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 3490 for branches/2012/dev_r3327_MERCATOR1_BDY/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90 – NEMO

Ignore:
Timestamp:
2012-10-08T16:27:20+02:00 (11 years ago)
Author:
cbricaud
Message:

add Jerome Chanut 's modications for BDY, Mercator_1 2012 task

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_r3327_MERCATOR1_BDY/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90

    r3367 r3490  
    88   !!            3.0  !  2008-04  (NEMO team)  add in the reference version 
    99   !!            3.3  !  2010-09  (D.Storkey and E.O'Dea)  bug fixes 
     10   !!            3.4  !  2012-09  (G. Reffray and J. Chanut) New inputs + mods 
    1011   !!---------------------------------------------------------------------- 
    1112#if defined key_bdy 
     
    2728   USE bdy_oce         ! ocean open boundary conditions 
    2829   USE daymod          ! calendar 
     30   USE wrk_nemo        ! Memory allocation 
    2931   USE tideini 
    30    USE tide_mod 
     32!   USE tide_mod       ! Useless ?? 
    3133   USE fldread, ONLY: fld_map 
    3234 
     
    3436   PRIVATE 
    3537 
    36    PUBLIC   bdytide_init  ! routine called in nemo_init 
    37    PUBLIC   tide_update   ! routine called in bdydyn 
     38   PUBLIC   bdytide_init     ! routine called in bdy_init 
     39   PUBLIC   bdytide_update   ! routine called in bdy_dta 
    3840 
    3941   TYPE, PUBLIC ::   TIDES_DATA     !: Storage for external tidal harmonics data 
     
    4749 
    4850   TYPE(TIDES_DATA), PUBLIC, DIMENSION(jp_bdy), TARGET :: tides  !: External tidal harmonics data 
    49     
     51 
    5052   !!---------------------------------------------------------------------- 
    5153   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    6668      !!------------------- 
    6769      CHARACTER(len=80)                         ::   filtide             !: Filename root for tidal input files 
    68       LOGICAL                                   ::   ln_conjug = .FALSE. !: F/T : tidal data in complex/complex conjugate 
     70      LOGICAL                                   ::   ln_bdytide_2ddta    !: If true, read 2d harmonic data 
     71      LOGICAL                                   ::   ln_bdytide_conj     !: If true, assume complex conjugate tidal data 
    6972      !! 
    7073      INTEGER                                   ::   ib_bdy, itide, ib   !: dummy loop indices 
     74      INTEGER                                   ::   ii, ij              !: dummy loop indices 
    7175      INTEGER                                   ::   inum, igrd 
    72       INTEGER, DIMENSION(3)                     ::   ilen0               !: length of boundary data (from OBC arrays) 
     76      INTEGER, DIMENSION(3)                     ::   ilen0       !: length of boundary data (from OBC arrays) 
     77      INTEGER, POINTER, DIMENSION(:)            ::   nblen, nblenrim     ! short cuts 
    7378      CHARACTER(len=80)                         ::   clfile              !: full file name for tidal input file  
    7479      REAL(wp),ALLOCATABLE, DIMENSION(:,:,:)    ::   dta_read            !: work space to read in tidal harmonics data 
     80      REAL(wp), POINTER, DIMENSION(:,:)         ::   ztr, zti            !:  "     "    "   "   "   "        "      "  
    7581      !! 
    7682      TYPE(TIDES_DATA),  POINTER                ::   td                  !: local short cut    
    7783      !! 
    78       NAMELIST/nambdy_tide/filtide, ln_conjug 
     84      NAMELIST/nambdy_tide/filtide, ln_bdytide_2ddta, ln_bdytide_conj 
    7985      !!---------------------------------------------------------------------- 
    8086 
    8187      IF( nn_timing == 1 ) CALL timing_start('bdytide_init') 
    8288 
    83       IF(lwp) WRITE(numout,*) 
    84       IF(lwp) WRITE(numout,*) 'bdytide_init : initialization of tidal harmonic forcing at open boundaries' 
    85       IF(lwp) WRITE(numout,*) '~~~~~~~~~' 
     89      IF (nb_bdy>0) THEN 
     90         IF(lwp) WRITE(numout,*) 
     91         IF(lwp) WRITE(numout,*) 'bdytide_init : initialization of tidal harmonic forcing at open boundaries' 
     92         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
     93      ENDIF 
     94 
     95      ln_bdytide_2ddta = .FALSE. 
     96      ln_bdytide_conj  = .FALSE. 
    8697 
    8798      REWIND(numnam) 
     
    90101 
    91102            td => tides(ib_bdy) 
     103            nblen => idx_bdy(ib_bdy)%nblen 
     104            nblenrim => idx_bdy(ib_bdy)%nblenrim 
    92105 
    93106            ! Namelist nambdy_tide : tidal harmonic forcing at open boundaries 
     
    97110            READ  ( numnam, nambdy_tide ) 
    98111            !                                               ! Parameter control and print 
     112            IF(lwp) WRITE(numout,*) '  ' 
    99113            IF(lwp) WRITE(numout,*) '          Namelist nambdy_tide : tidal harmonic forcing at open boundaries' 
    100             IF(lwp) WRITE(numout,*) '             tidal components specified ', nb_harmo 
    101             IF(lwp) WRITE(numout,*) '                ', Wave(ntide(1:nb_harmo))%cname_tide 
    102             IF(lwp) WRITE(numout,*) '             associated phase speeds (deg/hr) : ' 
    103             IF(lwp) WRITE(numout,*) '                ', omega_tide(1:nb_harmo) 
     114            IF(lwp) WRITE(numout,*) '             read tidal data in 2d files: ', ln_bdytide_2ddta 
     115            IF(lwp) WRITE(numout,*) '             assume complex conjugate   : ', ln_bdytide_conj 
     116            IF(lwp) WRITE(numout,*) '             Number of tidal components to read: ', nb_harmo 
     117            IF(lwp) THEN  
     118                    WRITE(numout,*) '             Tidal cpt name    -     Phase speed (deg/hr)'             
     119               DO itide = 1, nb_harmo 
     120                  WRITE(numout,*)  '             ', Wave(ntide(itide))%cname_tide, omega_tide(itide)    
     121               END DO 
     122            ENDIF  
     123            IF(lwp) WRITE(numout,*) ' ' 
    104124 
    105125            ! Allocate space for tidal harmonics data - get size from OBC data arrays 
    106126            ! ----------------------------------------------------------------------- 
    107127 
    108             ilen0(1) = SIZE( dta_bdy(ib_bdy)%ssh )  
     128            ! JC: If FRS scheme is used, we assume that tidal is needed over the whole 
     129            ! relaxation area       
     130            IF( nn_dyn2d(ib_bdy) .eq. jp_frs ) THEN 
     131               ilen0(:)=nblen(:) 
     132            ELSE 
     133               ilen0(:)=nblenrim(:) 
     134            ENDIF 
     135 
    109136            ALLOCATE( td%ssh0( ilen0(1), nb_harmo, 2 ) ) 
    110137            ALLOCATE( td%ssh ( ilen0(1), nb_harmo, 2 ) ) 
    111138 
    112             ilen0(2) = SIZE( dta_bdy(ib_bdy)%u2d )  
    113139            ALLOCATE( td%u0( ilen0(2), nb_harmo, 2 ) ) 
    114140            ALLOCATE( td%u ( ilen0(2), nb_harmo, 2 ) ) 
    115141 
    116             ilen0(3) = SIZE( dta_bdy(ib_bdy)%v2d )  
    117142            ALLOCATE( td%v0( ilen0(3), nb_harmo, 2 ) ) 
    118143            ALLOCATE( td%v ( ilen0(3), nb_harmo, 2 ) ) 
    119144 
    120             ALLOCATE( dta_read( MAXVAL(ilen0), 1, 1 ) ) 
    121  
    122             ! Open files and read in tidal forcing data 
    123             ! ----------------------------------------- 
    124  
    125             DO itide = 1, nb_harmo 
    126                !                                                              ! SSH fields 
    127                clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 
    128                CALL iom_open( clfile, inum ) 
    129                CALL fld_map( inum, 'z1' , dta_read(1:ilen0(1),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
    130                td%ssh0(:,itide,1) = dta_read(1:ilen0(1),1,1) 
    131                CALL fld_map( inum, 'z2' , dta_read(1:ilen0(1),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
    132                td%ssh0(:,itide,2) = dta_read(1:ilen0(1),1,1) 
     145            td%ssh0(:,:,:) = 0.e0 
     146            td%ssh(:,:,:) = 0.e0 
     147            td%u0(:,:,:) = 0.e0 
     148            td%u(:,:,:) = 0.e0 
     149            td%v0(:,:,:) = 0.e0 
     150            td%v(:,:,:) = 0.e0 
     151 
     152            IF (ln_bdytide_2ddta) THEN 
     153               ! It is assumed that each data file contains all complex harmonic amplitudes 
     154               ! given on the data domain (ie global, jpidta x jpjdta) 
     155               ! 
     156               CALL wrk_alloc( jpi, jpj, zti, ztr ) 
     157               ! 
     158               ! SSH fields 
     159               clfile = TRIM(filtide)//'_grid_T.nc' 
     160               CALL iom_open (clfile , inum )  
     161               igrd = 1                       ! Everything is at T-points here 
     162               DO itide = 1, nb_harmo 
     163                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
     164                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) )  
     165                  DO ib = 1, ilen0(igrd) 
     166                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     167                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     168                     td%ssh0(ib,itide,1) = ztr(ii,ij) 
     169                     td%ssh0(ib,itide,2) = zti(ii,ij) 
     170                  END DO 
     171               END DO  
    133172               CALL iom_close( inum ) 
    134                !                                                              ! U fields 
    135                clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 
    136                CALL iom_open( clfile, inum ) 
    137                CALL fld_map( inum, 'u1' , dta_read(1:ilen0(2),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
    138                td%u0(:,itide,1) = dta_read(1:ilen0(2),1,1) 
    139                CALL fld_map( inum, 'u2' , dta_read(1:ilen0(2),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
    140                td%u0(:,itide,2) = dta_read(1:ilen0(2),1,1) 
     173               ! 
     174               ! U fields 
     175               clfile = TRIM(filtide)//'_grid_U.nc' 
     176               CALL iom_open (clfile , inum )  
     177               igrd = 2                       ! Everything is at U-points here 
     178               DO itide = 1, nb_harmo 
     179                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_u1', ztr(:,:) ) 
     180                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_u2', zti(:,:) ) 
     181                  DO ib = 1, ilen0(igrd) 
     182                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     183                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     184                     td%u0(ib,itide,1) = ztr(ii,ij) 
     185                     td%u0(ib,itide,2) = zti(ii,ij) 
     186                  END DO 
     187               END DO 
    141188               CALL iom_close( inum ) 
    142                !                                                              ! V fields 
    143                clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 
    144                CALL iom_open( clfile, inum ) 
    145                CALL fld_map( inum, 'v1' , dta_read(1:ilen0(3),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
    146                td%v0(:,itide,1) = dta_read(1:ilen0(3),1,1) 
    147                CALL fld_map( inum, 'v2' , dta_read(1:ilen0(3),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
    148                td%v0(:,itide,2) = dta_read(1:ilen0(3),1,1) 
     189               ! 
     190               ! V fields 
     191               clfile = TRIM(filtide)//'_grid_V.nc' 
     192               CALL iom_open (clfile , inum )  
     193               igrd = 3                       ! Everything is at V-points here 
     194               DO itide = 1, nb_harmo 
     195                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_v1', ztr(:,:) ) 
     196                  CALL iom_get  ( inum, jpdom_data, TRIM(Wave(ntide(itide))%cname_tide)//'_v2', zti(:,:) ) 
     197                  DO ib = 1, ilen0(igrd) 
     198                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     199                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     200                     td%v0(ib,itide,1) = ztr(ii,ij) 
     201                     td%v0(ib,itide,2) = zti(ii,ij) 
     202                  END DO 
     203               END DO   
    149204               CALL iom_close( inum ) 
    150                IF ( ln_conjug ) THEN 
    151                   IF(lwp) WRITE(numout,*) '       The tidal input data are written in complex conjugate' 
    152                   td%ssh0(:,itide,2) = - td%ssh0(:,itide,2) 
    153                   td%u0  (:,itide,2) = - td%u0  (:,itide,2) 
    154                   td%v0  (:,itide,2) = - td%v0  (:,itide,2) 
    155                ENDIF 
    156                ! 
    157             END DO ! end loop on tidal components 
     205               ! 
     206               CALL wrk_dealloc( jpi, jpj, ztr, zti )  
     207               ! 
     208            ELSE             
     209               ! 
     210               ! Read tidal data only on bdy segments 
     211               !  
     212               ALLOCATE( dta_read( MAXVAL(ilen0(1:3)), 1, 1 ) ) 
     213 
     214               ! Open files and read in tidal forcing data 
     215               ! ----------------------------------------- 
     216 
     217               DO itide = 1, nb_harmo 
     218                  !                                                              ! SSH fields 
     219                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 
     220                  CALL iom_open( clfile, inum ) 
     221                  CALL fld_map( inum, 'z1' , dta_read(1:ilen0(1),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,1) ) 
     222                  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, idx_bdy(ib_bdy)%nbmap(:,1) ) 
     224                  td%ssh0(:,itide,2) = dta_read(1:ilen0(1),1,1) 
     225                  CALL iom_close( inum ) 
     226                  !                                                              ! U fields 
     227                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 
     228                  CALL iom_open( clfile, inum ) 
     229                  CALL fld_map( inum, 'u1' , dta_read(1:ilen0(2),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,2) ) 
     230                  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, idx_bdy(ib_bdy)%nbmap(:,2) ) 
     232                  td%u0(:,itide,2) = dta_read(1:ilen0(2),1,1) 
     233                  CALL iom_close( inum ) 
     234                  !                                                              ! V fields 
     235                  clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 
     236                  CALL iom_open( clfile, inum ) 
     237                  CALL fld_map( inum, 'v1' , dta_read(1:ilen0(3),1:1,1:1) , 1, idx_bdy(ib_bdy)%nbmap(:,3) ) 
     238                  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, idx_bdy(ib_bdy)%nbmap(:,3) ) 
     240                  td%v0(:,itide,2) = dta_read(1:ilen0(3),1,1) 
     241                  CALL iom_close( inum ) 
     242                  ! 
     243               END DO ! end loop on tidal components 
     244               ! 
     245               DEALLOCATE( dta_read ) 
     246            ENDIF ! ln_bdytide_2ddta=.true. 
    158247            ! 
    159             DEALLOCATE( dta_read ) 
     248            IF ( ln_bdytide_conj ) THEN ! assume complex conjugate in data files 
     249               td%ssh0(:,:,2) = - td%ssh0(:,:,2) 
     250               td%u0  (:,:,2) = - td%u0  (:,:,2) 
     251               td%v0  (:,:,2) = - td%v0  (:,:,2) 
     252            ENDIF 
    160253            ! 
    161254         ENDIF ! nn_dyn2d_dta(ib_bdy) .ge. 2 
     
    167260   END SUBROUTINE bdytide_init 
    168261 
    169    SUBROUTINE tide_update ( kt, idx, dta, td, jit, time_offset ) 
    170       !!---------------------------------------------------------------------- 
    171       !!                 ***  SUBROUTINE tide_update  *** 
     262   SUBROUTINE bdytide_update ( kt, idx, dta, td, jit, time_offset ) 
     263      !!---------------------------------------------------------------------- 
     264      !!                 ***  SUBROUTINE bdytide_update  *** 
    172265      !!                 
    173266      !! ** Purpose : - Add tidal forcing to ssh, u2d and v2d OBC data arrays.  
     
    186279                                                        ! etc. 
    187280      !! 
     281      INTEGER, DIMENSION(3)            ::   ilen0       !: length of boundary data (from OBC arrays) 
    188282      INTEGER                          :: itide, igrd, ib   ! dummy loop indices 
    189283      INTEGER                          :: time_add          ! time offset in units of timesteps 
    190       REAL(wp)                         :: z_arg, z_sarg, zflag       
     284      REAL(wp)                         :: z_arg, z_sarg, zflag, zramp       
    191285      REAL(wp), DIMENSION(jpmax_harmo) :: z_sist, z_cost 
    192286      !!---------------------------------------------------------------------- 
    193287 
    194       IF( nn_timing == 1 ) CALL timing_start('tide_update') 
     288      IF( nn_timing == 1 ) CALL timing_start('bdytide_update') 
     289 
     290      ilen0(1) =  SIZE(td%ssh(:,1,1)) 
     291      ilen0(2) =  SIZE(td%u(:,1,1)) 
     292      ilen0(3) =  SIZE(td%v(:,1,1)) 
    195293 
    196294      zflag=1 
     
    205303        IF(lwp) THEN 
    206304           WRITE(numout,*) 
    207            WRITE(numout,*) 'bdy_tide : (re)Initialization of the tidal bdy forcing at kt=',kt 
    208            WRITE(numout,*) '~~~~~~~ ' 
     305           WRITE(numout,*) 'bdytide_update : (re)Initialization of the tidal bdy forcing at kt=',kt 
     306           WRITE(numout,*) '~~~~~~~~~~~~~~ ' 
    209307        ENDIF 
    210308        ! 
     
    225323      ENDIF 
    226324 
     325      ! Linear ramp on tidal component at open boundaries  
     326      zramp = 1. 
     327      IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg + (kt_tide-nit000)*rdt)/(rdttideramp*rday),0.),1.) 
     328 
    227329      DO itide = 1, nb_harmo 
    228330         z_sarg = z_arg * omega_tide(itide) 
     
    233335      DO itide = 1, nb_harmo 
    234336         igrd=1                              ! SSH on tracer grid 
    235          DO ib = 1, idx%nblenrim(igrd) 
    236             dta%ssh(ib) = dta%ssh(ib) + td%ssh(ib,itide,1)*z_cost(itide) + td%ssh(ib,itide,2)*z_sist(itide) 
     337         DO ib = 1, ilen0(igrd) 
     338            dta%ssh(ib) = dta%ssh(ib) + zramp*(td%ssh(ib,itide,1)*z_cost(itide) + td%ssh(ib,itide,2)*z_sist(itide)) 
    237339         END DO 
    238340         igrd=2                              ! U grid 
    239          DO ib=1, idx%nblenrim(igrd) 
    240             dta%u2d(ib) = dta%u2d(ib) + td%u  (ib,itide,1)*z_cost(itide) + td%u  (ib,itide,2)*z_sist(itide) 
     341         DO ib = 1, ilen0(igrd) 
     342            dta%u2d(ib) = dta%u2d(ib) + zramp*(td%u  (ib,itide,1)*z_cost(itide) + td%u  (ib,itide,2)*z_sist(itide)) 
    241343         END DO 
    242344         igrd=3                              ! V grid 
    243          DO ib=1, idx%nblenrim(igrd) 
    244             dta%v2d(ib) = dta%v2d(ib) + td%v  (ib,itide,1)*z_cost(itide) + td%v  (ib,itide,2)*z_sist(itide) 
     345         DO ib = 1, ilen0(igrd)  
     346            dta%v2d(ib) = dta%v2d(ib) + zramp*(td%v  (ib,itide,1)*z_cost(itide) + td%v  (ib,itide,2)*z_sist(itide)) 
    245347         END DO 
    246348      END DO 
    247349      ! 
    248       IF( nn_timing == 1 ) CALL timing_stop('tide_update') 
     350      IF( nn_timing == 1 ) CALL timing_stop('bdytide_update') 
    249351      ! 
    250    END SUBROUTINE tide_update 
     352   END SUBROUTINE bdytide_update 
    251353 
    252354   SUBROUTINE tide_init_elevation( idx, td ) 
     
    257359      TYPE(TIDES_DATA),INTENT( inout )   ::   td      ! tidal harmonics data 
    258360      !! * Local declarations 
     361      INTEGER, DIMENSION(1)            ::   ilen0       !: length of boundary data (from OBC arrays) 
    259362      REAL(wp),ALLOCATABLE, DIMENSION(:) ::   mod_tide, phi_tide 
    260363      INTEGER                            ::   itide, igrd, ib      ! dummy loop indices 
    261364 
    262       igrd=1                                 ! SSH on tracer grid. 
    263  
    264       ALLOCATE(mod_tide(idx%nblenrim(igrd)),phi_tide(idx%nblenrim(igrd))) 
     365      igrd=1    
     366                              ! SSH on tracer grid. 
     367    
     368      ilen0(1) =  SIZE(td%ssh0(:,1,1)) 
     369 
     370      ALLOCATE(mod_tide(ilen0(igrd)),phi_tide(ilen0(igrd))) 
    265371 
    266372      DO itide = 1, nb_harmo 
    267          DO ib = 1, idx%nblenrim(igrd) 
     373         DO ib = 1, ilen0(igrd) 
    268374            mod_tide(ib)=SQRT(td%ssh0(ib,itide,1)**2.+td%ssh0(ib,itide,2)**2.) 
    269375            phi_tide(ib)=ATAN2(-td%ssh0(ib,itide,2),td%ssh0(ib,itide,1)) 
    270376         END DO 
    271          DO ib = 1, idx%nblenrim(igrd) 
     377         DO ib = 1 , ilen0(igrd) 
    272378            mod_tide(ib)=mod_tide(ib)*ftide(itide) 
    273379            phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 
    274380         ENDDO 
    275          DO ib = 1, idx%nblenrim(igrd) 
     381         DO ib = 1 , ilen0(igrd) 
    276382            td%ssh(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 
    277383            td%ssh(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) 
     
    290396      TYPE(TIDES_DATA),INTENT( inout )      ::   td      ! tidal harmonics data 
    291397      !! * Local declarations 
     398      INTEGER, DIMENSION(3)            ::   ilen0       !: length of boundary data (from OBC arrays) 
    292399      REAL(wp),ALLOCATABLE, DIMENSION(:) ::   mod_tide, phi_tide 
    293400      INTEGER                            ::   itide, igrd, ib      ! dummy loop indices 
    294401 
     402      ilen0(2) =  SIZE(td%u0(:,1,1)) 
     403      ilen0(3) =  SIZE(td%v0(:,1,1)) 
     404 
    295405      igrd=2                                 ! U grid. 
    296406 
    297       ALLOCATE(mod_tide(idx%nblenrim(igrd)),phi_tide(idx%nblenrim(igrd))) 
     407      ALLOCATE(mod_tide(ilen0(igrd)),phi_tide(ilen0(igrd))) 
    298408 
    299409      DO itide = 1, nb_harmo 
    300          DO ib = 1, idx%nblenrim(igrd) 
     410         DO ib = 1, ilen0(igrd) 
    301411            mod_tide(ib)=SQRT(td%u0(ib,itide,1)**2.+td%u0(ib,itide,2)**2.) 
    302412            phi_tide(ib)=ATAN2(-td%u0(ib,itide,2),td%u0(ib,itide,1)) 
    303413         END DO 
    304          DO ib = 1, idx%nblenrim(igrd) 
     414         DO ib = 1, ilen0(igrd) 
    305415            mod_tide(ib)=mod_tide(ib)*ftide(itide) 
    306416            phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 
    307417         ENDDO 
    308          DO ib = 1, idx%nblenrim(igrd) 
     418         DO ib = 1, ilen0(igrd) 
    309419            td%u(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 
    310420            td%u(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) 
     
    314424      DEALLOCATE(mod_tide,phi_tide) 
    315425 
    316       igrd=3                                 ! U grid. 
    317  
    318       ALLOCATE(mod_tide(idx%nblenrim(igrd)),phi_tide(idx%nblenrim(igrd))) 
     426      igrd=3                                 ! V grid. 
     427 
     428      ALLOCATE(mod_tide(ilen0(igrd)),phi_tide(ilen0(igrd))) 
    319429 
    320430      DO itide = 1, nb_harmo 
    321          DO ib = 1, idx%nblenrim(igrd) 
     431         DO ib = 1, ilen0(igrd) 
    322432            mod_tide(ib)=SQRT(td%v0(ib,itide,1)**2.+td%v0(ib,itide,2)**2.) 
    323433            phi_tide(ib)=ATAN2(-td%v0(ib,itide,2),td%v0(ib,itide,1)) 
    324434         END DO 
    325          DO ib = 1, idx%nblenrim(igrd) 
     435         DO ib = 1, ilen0(igrd) 
    326436            mod_tide(ib)=mod_tide(ib)*ftide(itide) 
    327437            phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 
    328438         ENDDO 
    329          DO ib = 1, idx%nblenrim(igrd) 
     439         DO ib = 1, ilen0(igrd) 
    330440            td%v(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 
    331441            td%v(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) 
     
    341451   !!---------------------------------------------------------------------- 
    342452CONTAINS 
    343    SUBROUTINE bdytide_init                ! Empty routine 
     453   SUBROUTINE bdytide_init             ! Empty routine 
     454      WRITE(*,*) 'bdytide_init: You should not have seen this print! error?' 
    344455   END SUBROUTINE bdytide_init 
    345    SUBROUTINE tide_data                ! Empty routine 
    346    END SUBROUTINE tide_data 
    347    SUBROUTINE tide_update( kt, jit )   ! Empty routine 
    348       WRITE(*,*) 'tide_update: You should not have seen this print! error?', kt, jit 
    349    END SUBROUTINE tide_update 
     456   SUBROUTINE bdytide_update( kt, jit )   ! Empty routine 
     457      WRITE(*,*) 'bdytide_update: You should not have seen this print! error?', kt, jit 
     458   END SUBROUTINE bdytide_update 
    350459#endif 
    351460 
Note: See TracChangeset for help on using the changeset viewer.