New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3583 for branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

Ignore:
Timestamp:
2012-11-16T17:18:17+01:00 (12 years ago)
Author:
cbricaud
Message:

add modification from dev_r3327_MERCATOR1_BDY branch in dev_MERCATOR_2012_rev3555 branch

Location:
branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90

    r3294 r3583  
    667667      !!---------------------------------------------------------------------- 
    668668#if defined key_bdy 
    669       USE bdy_oce, ONLY:  dta_global         ! workspace to read in global data arrays 
     669      USE bdy_oce, ONLY:  dta_global, dta_global2         ! workspace to read in global data arrays 
    670670#endif  
    671671 
     
    681681      INTEGER                                 ::   ilendta  ! length of data in file 
    682682      INTEGER                                 ::   idvar    ! variable ID 
    683       INTEGER                                 ::   ib, ik   ! loop counters 
     683      INTEGER                                 ::   ib, ik, ji, jj   ! loop counters 
    684684      INTEGER                                 ::   ierr 
    685       REAL(wp), POINTER, DIMENSION(:,:,:)     ::   dta_read ! work space for global data 
     685      REAL(wp), POINTER, DIMENSION(:,:,:)     ::   dta_read  ! work space for global data 
    686686      !!--------------------------------------------------------------------- 
    687687             
    688 #if defined key_bdy 
    689       dta_read => dta_global 
    690 #endif 
    691  
    692688      ipi = SIZE( dta, 1 ) 
    693689      ipj = 1 
     
    696692      idvar   = iom_varid( num, clvar ) 
    697693      ilendta = iom_file(num)%dimsz(1,idvar) 
     694 
     695#if defined key_bdy 
     696      ipj = iom_file(num)%dimsz(2,idvar) 
     697      IF (ipj == 1) THEN ! we assume that this is a structured open boundary file 
     698         dta_read => dta_global 
     699      ELSE 
     700         dta_read => dta_global2 
     701      ENDIF 
     702#endif 
     703 
     704      IF ((lwp).AND.(ipi>ilendta*ipj)) CALL ctl_stop('fld_map problem with file dimension') 
     705 
    698706      IF(lwp) WRITE(numout,*) 'Dim size for ',TRIM(clvar),' is ', ilendta 
    699707      IF(lwp) WRITE(numout,*) 'Number of levels for ',TRIM(clvar),' is ', ipk 
     708 
    700709 
    701710      SELECT CASE( ipk ) 
     
    706715      END SELECT 
    707716      ! 
    708       DO ib = 1, ipi 
    709          DO ik = 1, ipk 
    710             dta(ib,1,ik) =  dta_read(map(ib),1,ik) 
     717      IF (ipj==1) THEN 
     718         DO ib = 1, ipi 
     719            DO ik = 1, ipk 
     720               dta(ib,1,ik) =  dta_read(map(ib),1,ik) 
     721            END DO 
    711722         END DO 
    712       END DO 
     723      ELSE ! we assume that this is a structured open boundary file 
     724         DO ib = 1, ipi 
     725            jj=1+floor(REAL(map(ib)-1)/REAL(ilendta)) 
     726            ji=map(ib)-(jj-1)*ilendta 
     727            DO ik = 1, ipk 
     728               dta(ib,1,ik) =  dta_read(ji,jj,ik) 
     729            END DO 
     730         END DO 
     731      ENDIF 
    713732 
    714733   END SUBROUTINE fld_map 
  • branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90

    r3294 r3583  
    6666      !! 
    6767      INTEGER            ::   ierror  ! local integer  
    68       REAL(wp)           ::   zpref   ! local scalar 
    6968      !! 
    7069      CHARACTER(len=100) ::  cn_dir   ! Root directory for location of ssr files 
    7170      TYPE(FLD_N)        ::  sn_apr   ! informations about the fields to be read 
    7271      !! 
    73       NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr 
     72      NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rpref, ln_apr_obc 
    7473      !!---------------------------------------------------------------------- 
    7574      ! 
     
    113112         ! 
    114113         !                                            !* control check 
    115          IF( ln_apr_obc  )   & 
    116             CALL ctl_stop( 'sbc_apr: inverse barometer added to OBC ssh data not yet implemented ' ) 
    117          IF( ln_apr_obc .AND. .NOT. lk_obc )   & 
    118             CALL ctl_stop( 'sbc_apr: add inverse barometer to OBC requires to use key_obc' ) 
     114         IF ( ln_apr_obc  ) THEN 
     115            IF(lwp) WRITE(numout,*) '         Inverse barometer added to OBC ssh data' 
     116         ENDIF 
    119117         IF( ( ln_apr_obc ) .AND. .NOT. lk_dynspg_ts )   & 
    120118            CALL ctl_stop( 'sbc_apr: use inverse barometer ssh at open boundary ONLY possible with time-splitting' ) 
  • branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbctide.F90

    r3294 r3583  
    1414  USE daymod 
    1515  USE dynspg_oce 
    16   USE tide_mod 
     16  USE tideini 
    1717  USE iom 
    1818 
     
    2121 
    2222  REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: pot_astro 
    23   LOGICAL, PUBLIC :: ln_tide_pot = .false. 
     23 
    2424#if defined key_tide 
    2525 
    2626  LOGICAL, PUBLIC, PARAMETER ::   lk_tide  = .TRUE. 
    27  
    28   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: omega_tide  
    29  
    30   REAL(wp), ALLOCATABLE, DIMENSION(:) ::  & 
    31        v0tide,      & 
    32        utide,       & 
    33        ftide 
    34  
    3527  REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: amp_pot,phi_pot 
    36  
    37   INTEGER, PUBLIC :: nb_harmo 
    38   INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide 
    39   INTEGER, PUBLIC :: nn_tide, kt_tide 
    40  
    4128  !!--------------------------------------------------------------------------------- 
    4229  !!   OPA 9.0 , LODYC-IPSL  (2003) 
     
    5138    !! * Arguments 
    5239    INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
    53     !! * Local declarations 
    54     INTEGER  :: jk,ji 
    55     CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 
    5640    !!---------------------------------------------------------------------- 
    5741 
    58     NAMELIST/nam_tide/ln_tide_pot,nb_harmo,clname,nn_tide 
     42    IF ( kt == nit000 .AND. .NOT. lk_dynspg_ts )  CALL ctl_stop( 'STOP', 'sbc_tide : tidal potential use only with time splitting' ) 
    5943 
    60     IF ( kt == nit000 ) THEN 
     44    IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN 
     45      ! 
     46      kt_tide = kt 
    6147 
    62        IF( .NOT. lk_dynspg_ts  )  CALL ctl_stop( 'STOP', 'sbc_tide : tidal potential use only with time splitting' ) 
     48      IF(lwp) THEN 
     49         WRITE(numout,*) 
     50         WRITE(numout,*) 'sbc_tide : (re)Initialization of the tidal potential at kt=',kt 
     51         WRITE(numout,*) '~~~~~~~ ' 
     52      ENDIF 
    6353 
    64     ! Read Namelist nam_tide 
     54      IF(lwp) THEN 
     55         IF ( kt == nit000 ) WRITE(numout,*) 'Apply astronomical potential : ln_tide_pot =', ln_tide_pot 
     56         CALL flush(numout) 
     57      ENDIF 
    6558 
    66     nn_tide=INT(rday/rdt) 
     59      IF ( kt == nit000 ) ALLOCATE(amp_pot(jpi,jpj,nb_harmo)) 
     60      IF ( kt == nit000 ) ALLOCATE(phi_pot(jpi,jpj,nb_harmo)) 
     61      IF ( kt == nit000 ) ALLOCATE(pot_astro(jpi,jpj)) 
    6762 
    68     CALL tide_init_Wave 
     63      amp_pot(:,:,:) = 0.e0 
     64      phi_pot(:,:,:) = 0.e0 
     65      pot_astro(:,:) = 0.e0 
    6966 
    70     REWIND ( numnam ) 
    71     READ   ( numnam, nam_tide ) 
    72  
    73     IF(lwp) THEN 
    74        WRITE(numout,*) 
    75        WRITE(numout,*) 'sbc_tide : Initialization of the tidal components' 
    76        WRITE(numout,*) '~~~~~~~ ' 
     67      IF ( ln_tide_pot ) CALL tide_init_potential 
     68      ! 
    7769    ENDIF 
    78  
    79     IF(lwp) THEN 
    80        WRITE(numout,*) '        Namelist nam_tide' 
    81        WRITE(numout,*) '        Apply astronomical potential : ln_tide_pot =', ln_tide_pot 
    82        WRITE(numout,*) '        nb_harmo    = ', nb_harmo 
    83        CALL flush(numout) 
    84     ENDIF 
    85  
    86     ALLOCATE(ntide     (nb_harmo)) 
    87     DO jk=1,nb_harmo 
    88        DO ji=1,jpmax_harmo 
    89           IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN 
    90              ntide(jk) = ji 
    91              EXIT 
    92           END IF 
    93        END DO 
    94     END DO 
    95     ALLOCATE(omega_tide(nb_harmo)) 
    96     ALLOCATE(v0tide    (nb_harmo)) 
    97     ALLOCATE(utide     (nb_harmo)) 
    98     ALLOCATE(ftide     (nb_harmo)) 
    99     ALLOCATE(amp_pot(jpi,jpj,nb_harmo)) 
    100     ALLOCATE(phi_pot(jpi,jpj,nb_harmo)) 
    101     ALLOCATE(pot_astro(jpi,jpj)) 
    102     ENDIF 
    103  
    104     IF ( MOD( kt - 1, nn_tide ) == 0 ) THEN 
    105       kt_tide = kt 
    106       CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo) 
    107     ENDIF 
    108  
    109     amp_pot(:,:,:) = 0.e0 
    110     phi_pot(:,:,:) = 0.e0 
    111     pot_astro(:,:) = 0.e0 
    112  
    113     IF (ln_tide_pot          ) CALL tide_init_potential 
    11470 
    11571  END SUBROUTINE sbc_tide 
  • branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/updtide.F90

    r3294 r3583  
    1313  USE sbctide 
    1414  USE dynspg_oce 
     15  USE tideini, ONLY: ln_tide_ramp, rdttideramp 
    1516 
    1617  IMPLICIT NONE 
     
    3334    INTEGER, INTENT( in ) ::   kt,kit      ! ocean time-step index 
    3435    INTEGER  :: ji,jj,jk 
     36    REAL (wp) :: zramp 
    3537    REAL (wp), DIMENSION(nb_harmo) :: zwt  
    36     !............................................................................... 
    37     ! Potentiel astronomique 
    3838    !............................................................................... 
    3939 
    4040    pot_astro(:,:)=0.e0 
     41    zramp = 1.e0 
    4142 
    4243    IF (lk_dynspg_ts) THEN 
    4344       zwt(:) = omega_tide(:)* ((kt-kt_tide)*rdt + kit*(rdt/REAL(nn_baro,wp))) 
     45       IF (ln_tide_ramp) THEN 
     46          zramp = MIN(MAX( ((kt-nit000)*rdt + kit*(rdt/REAL(nn_baro,wp)))/(rdttideramp*rday),0.),1.) 
     47       ENDIF 
    4448    ELSE 
    4549       zwt(:) = omega_tide(:)*(kt-kt_tide)*rdt 
     50       IF (ln_tide_ramp) THEN 
     51          zramp = MIN(MAX( ((kt-nit000)*rdt)/(rdttideramp*rday),0.),1.)  
     52       ENDIF   
    4653    ENDIF 
    4754 
     
    4956       do ji=1,jpi 
    5057          do jj=1,jpj 
    51              pot_astro(ji,jj)=pot_astro(ji,jj) + (amp_pot(ji,jj,jk)*COS(zwt(jk)+phi_pot(ji,jj,jk)))       
     58             pot_astro(ji,jj)=pot_astro(ji,jj) + zramp*(amp_pot(ji,jj,jk)*COS(zwt(jk)+phi_pot(ji,jj,jk)))       
    5259          enddo 
    5360       enddo 
Note: See TracChangeset for help on using the changeset viewer.