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 12143 for NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/BDY/bdytides.F90 – NEMO

Ignore:
Timestamp:
2019-12-10T12:57:49+01:00 (4 years ago)
Author:
mathiot
Message:

update ENHANCE-02_ISF_nemo to 12072 (sette in progress)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/ENHANCE-02_ISF_nemo/src/OCE/BDY/bdytides.F90

    r10068 r12143  
    7070      INTEGER                                   ::   inum, igrd 
    7171      INTEGER, DIMENSION(3)                     ::   ilen0       !: length of boundary data (from OBC arrays) 
    72       INTEGER, POINTER, DIMENSION(:)            ::   nblen, nblenrim     ! short cuts 
    7372      INTEGER                                   ::   ios                 ! Local integer output status for namelist read 
    7473      CHARACTER(len=80)                         ::   clfile              !: full file name for tidal input file  
     
    7776      !! 
    7877      TYPE(TIDES_DATA),  POINTER                ::   td                  !: local short cut    
    79       TYPE(MAP_POINTER), DIMENSION(jpbgrd)      ::   ibmap_ptr           !: array of pointers to nbmap 
    8078      !! 
    8179      NAMELIST/nambdy_tide/filtide, ln_bdytide_2ddta, ln_bdytide_conj 
    8280      !!---------------------------------------------------------------------- 
    8381      ! 
    84       IF (nb_bdy>0) THEN 
    85          IF(lwp) WRITE(numout,*) 
    86          IF(lwp) WRITE(numout,*) 'bdytide_init : initialization of tidal harmonic forcing at open boundaries' 
    87          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    88       ENDIF 
     82      IF(lwp) WRITE(numout,*) 
     83      IF(lwp) WRITE(numout,*) 'bdytide_init : initialization of tidal harmonic forcing at open boundaries' 
     84      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    8985 
    9086      REWIND(numnam_cfg) 
     
    9490            ! 
    9591            td => tides(ib_bdy) 
    96             nblen => idx_bdy(ib_bdy)%nblen 
    97             nblenrim => idx_bdy(ib_bdy)%nblenrim 
    9892 
    9993            ! Namelist nambdy_tide : tidal harmonic forcing at open boundaries 
    10094            filtide(:) = '' 
    10195 
     96            REWIND( numnam_ref ) 
     97            READ  ( numnam_ref, nambdy_tide, IOSTAT = ios, ERR = 901) 
     98901         IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_tide in reference namelist' ) 
    10299            ! Don't REWIND here - may need to read more than one of these namelists.  
    103             READ  ( numnam_ref, nambdy_tide, IOSTAT = ios, ERR = 901) 
    104 901         IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_tide in reference namelist', lwp ) 
    105100            READ  ( numnam_cfg, nambdy_tide, IOSTAT = ios, ERR = 902 ) 
    106 902         IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy_tide in configuration namelist', lwp ) 
     101902         IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy_tide in configuration namelist' ) 
    107102            IF(lwm) WRITE ( numond, nambdy_tide ) 
    108103            !                                               ! Parameter control and print 
     
    125120            ! JC: If FRS scheme is used, we assume that tidal is needed over the whole 
    126121            ! relaxation area       
    127             IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN   ;   ilen0(:) = nblen   (:) 
    128             ELSE                                   ;   ilen0(:) = nblenrim(:) 
     122            IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN   ;   ilen0(:) = idx_bdy(ib_bdy)%nblen   (:) 
     123            ELSE                                   ;   ilen0(:) = idx_bdy(ib_bdy)%nblenrim(:) 
    129124            ENDIF 
    130125 
     
    161156                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    162157                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     158                     IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove? 
    163159                     td%ssh0(ib,itide,1) = ztr(ii,ij) 
    164160                     td%ssh0(ib,itide,2) = zti(ii,ij) 
     
    177173                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    178174                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     175                     IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove? 
    179176                     td%u0(ib,itide,1) = ztr(ii,ij) 
    180177                     td%u0(ib,itide,2) = zti(ii,ij) 
     
    193190                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    194191                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     192                     IF( ii == 1 .OR. ii == jpi .OR. ij == 1 .OR. ij == jpj )  CYCLE   ! to remove? 
    195193                     td%v0(ib,itide,1) = ztr(ii,ij) 
    196194                     td%v0(ib,itide,2) = zti(ii,ij) 
     
    207205               ALLOCATE( dta_read( MAXVAL(ilen0(1:3)), 1, 1 ) ) 
    208206               ! 
    209                ! Set map structure 
    210                ibmap_ptr(1)%ptr => idx_bdy(ib_bdy)%nbmap(:,1)   ;   ibmap_ptr(1)%ll_unstruc = ln_coords_file(ib_bdy) 
    211                ibmap_ptr(2)%ptr => idx_bdy(ib_bdy)%nbmap(:,2)   ;   ibmap_ptr(2)%ll_unstruc = ln_coords_file(ib_bdy) 
    212                ibmap_ptr(3)%ptr => idx_bdy(ib_bdy)%nbmap(:,3)   ;   ibmap_ptr(3)%ll_unstruc = ln_coords_file(ib_bdy) 
    213  
    214207               ! Open files and read in tidal forcing data 
    215208               ! ----------------------------------------- 
     
    219212                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 
    220213                  CALL iom_open( clfile, inum ) 
    221                   CALL fld_map( inum, 'z1' , dta_read(1:ilen0(1),1:1,1:1) , 1,  ibmap_ptr(1) ) 
     214                  CALL fld_map( inum, 'z1' , dta_read(1:ilen0(1),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
    222215                  td%ssh0(:,itide,1) = dta_read(1:ilen0(1),1,1) 
    223                   CALL fld_map( inum, 'z2' , dta_read(1:ilen0(1),1:1,1:1) , 1,  ibmap_ptr(1) ) 
     216                  CALL fld_map( inum, 'z2' , dta_read(1:ilen0(1),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
    224217                  td%ssh0(:,itide,2) = dta_read(1:ilen0(1),1,1) 
    225218                  CALL iom_close( inum ) 
     
    227220                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 
    228221                  CALL iom_open( clfile, inum ) 
    229                   CALL fld_map( inum, 'u1' , dta_read(1:ilen0(2),1:1,1:1) , 1, ibmap_ptr(2) ) 
     222                  CALL fld_map( inum, 'u1' , dta_read(1:ilen0(2),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
    230223                  td%u0(:,itide,1) = dta_read(1:ilen0(2),1,1) 
    231                   CALL fld_map( inum, 'u2' , dta_read(1:ilen0(2),1:1,1:1) , 1, ibmap_ptr(2) ) 
     224                  CALL fld_map( inum, 'u2' , dta_read(1:ilen0(2),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
    232225                  td%u0(:,itide,2) = dta_read(1:ilen0(2),1,1) 
    233226                  CALL iom_close( inum ) 
     
    235228                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 
    236229                  CALL iom_open( clfile, inum ) 
    237                   CALL fld_map( inum, 'v1' , dta_read(1:ilen0(3),1:1,1:1) , 1, ibmap_ptr(3) ) 
     230                  CALL fld_map( inum, 'v1' , dta_read(1:ilen0(3),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
    238231                  td%v0(:,itide,1) = dta_read(1:ilen0(3),1,1) 
    239                   CALL fld_map( inum, 'v2' , dta_read(1:ilen0(3),1:1,1:1) , 1, ibmap_ptr(3) ) 
     232                  CALL fld_map( inum, 'v2' , dta_read(1:ilen0(3),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
    240233                  td%v0(:,itide,2) = dta_read(1:ilen0(3),1,1) 
    241234                  CALL iom_close( inum ) 
     
    269262 
    270263 
    271    SUBROUTINE bdytide_update( kt, idx, dta, td, jit, time_offset ) 
     264   SUBROUTINE bdytide_update( kt, idx, dta, td, kit, kt_offset ) 
    272265      !!---------------------------------------------------------------------- 
    273266      !!                 ***  SUBROUTINE bdytide_update  *** 
     
    280273      TYPE(OBC_DATA)   , INTENT(inout) ::   dta         ! OBC external data 
    281274      TYPE(TIDES_DATA) , INTENT(inout) ::   td          ! tidal harmonics data 
    282       INTEGER, OPTIONAL, INTENT(in   ) ::   jit         ! Barotropic timestep counter (for timesplitting option) 
    283       INTEGER, OPTIONAL, INTENT(in   ) ::   time_offset ! time offset in units of timesteps. NB. if jit 
     275      INTEGER, OPTIONAL, INTENT(in   ) ::   kit         ! Barotropic timestep counter (for timesplitting option) 
     276      INTEGER, OPTIONAL, INTENT(in   ) ::   kt_offset   ! time offset in units of timesteps. NB. if kit 
    284277      !                                                 ! is present then units = subcycle timesteps. 
    285       !                                                 ! time_offset = 0  => get data at "now"    time level 
    286       !                                                 ! time_offset = -1 => get data at "before" time level 
    287       !                                                 ! time_offset = +1 => get data at "after"  time level 
     278      !                                                 ! kt_offset = 0  => get data at "now"    time level 
     279      !                                                 ! kt_offset = -1 => get data at "before" time level 
     280      !                                                 ! kt_offset = +1 => get data at "after"  time level 
    288281      !                                                 ! etc. 
    289282      ! 
     
    300293 
    301294      zflag=1 
    302       IF ( PRESENT(jit) ) THEN 
    303         IF ( jit /= 1 ) zflag=0 
     295      IF ( PRESENT(kit) ) THEN 
     296        IF ( kit /= 1 ) zflag=0 
    304297      ENDIF 
    305298 
     
    320313 
    321314      time_add = 0 
    322       IF( PRESENT(time_offset) ) THEN 
    323          time_add = time_offset 
     315      IF( PRESENT(kt_offset) ) THEN 
     316         time_add = kt_offset 
    324317      ENDIF 
    325318          
    326       IF( PRESENT(jit) ) THEN   
    327          z_arg = ((kt-kt_tide) * rdt + (jit+0.5_wp*(time_add-1)) * rdt / REAL(nn_baro,wp) ) 
     319      IF( PRESENT(kit) ) THEN   
     320         z_arg = ((kt-kt_tide) * rdt + (kit+0.5_wp*(time_add-1)) * rdt / REAL(nn_baro,wp) ) 
    328321      ELSE                               
    329322         z_arg = ((kt-kt_tide)+time_add) * rdt 
     
    358351 
    359352 
    360    SUBROUTINE bdy_dta_tides( kt, kit, time_offset ) 
     353   SUBROUTINE bdy_dta_tides( kt, kit, kt_offset ) 
    361354      !!---------------------------------------------------------------------- 
    362355      !!                 ***  SUBROUTINE bdy_dta_tides  *** 
     
    367360      INTEGER,           INTENT(in) ::   kt          ! Main timestep counter 
    368361      INTEGER, OPTIONAL, INTENT(in) ::   kit         ! Barotropic timestep counter (for timesplitting option) 
    369       INTEGER, OPTIONAL, INTENT(in) ::   time_offset ! time offset in units of timesteps. NB. if kit 
     362      INTEGER, OPTIONAL, INTENT(in) ::   kt_offset  ! time offset in units of timesteps. NB. if kit 
    370363      !                                              ! is present then units = subcycle timesteps. 
    371       !                                              ! time_offset = 0  => get data at "now"    time level 
    372       !                                              ! time_offset = -1 => get data at "before" time level 
    373       !                                              ! time_offset = +1 => get data at "after"  time level 
     364      !                                              ! kt_offset = 0  => get data at "now"    time level 
     365      !                                              ! kt_offset = -1 => get data at "before" time level 
     366      !                                              ! kt_offset = +1 => get data at "after"  time level 
    374367      !                                              ! etc. 
    375368      ! 
     
    386379 
    387380      time_add = 0 
    388       IF( PRESENT(time_offset) ) THEN 
    389          time_add = time_offset 
     381      IF( PRESENT(kt_offset) ) THEN 
     382         time_add = kt_offset 
    390383      ENDIF 
    391384       
     
    432425            ! If time splitting, initialize arrays from slow varying open boundary data: 
    433426            IF ( PRESENT(kit) ) THEN            
    434                IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) 
    435                IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) 
    436                IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) 
     427               IF ( dta_bdy(ib_bdy)%lneed_ssh  ) dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) 
     428               IF ( dta_bdy(ib_bdy)%lneed_dyn2d ) dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) 
     429               IF ( dta_bdy(ib_bdy)%lneed_dyn2d ) dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) 
    437430            ENDIF 
    438431            ! 
     
    444437               z_sist = zramp * SIN( z_sarg ) 
    445438               ! 
    446                IF ( dta_bdy(ib_bdy)%ll_ssh ) THEN 
     439               IF ( dta_bdy(ib_bdy)%lneed_ssh ) THEN 
    447440                  igrd=1                              ! SSH on tracer grid 
    448441                  DO ib = 1, ilen0(igrd) 
     
    453446               ENDIF 
    454447               ! 
    455                IF ( dta_bdy(ib_bdy)%ll_u2d ) THEN 
     448               IF ( dta_bdy(ib_bdy)%lneed_dyn2d ) THEN 
    456449                  igrd=2                              ! U grid 
    457450                  DO ib = 1, ilen0(igrd) 
     
    460453                        &                        tides(ib_bdy)%u(ib,itide,2)*z_sist ) 
    461454                  END DO 
    462                ENDIF 
    463                ! 
    464                IF ( dta_bdy(ib_bdy)%ll_v2d ) THEN 
    465455                  igrd=3                              ! V grid 
    466456                  DO ib = 1, ilen0(igrd)  
Note: See TracChangeset for help on using the changeset viewer.