- Timestamp:
- 2012-10-08T16:27:20+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_r3327_MERCATOR1_BDY/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r3367 r3490 8 8 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 9 9 !! 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 10 11 !!---------------------------------------------------------------------- 11 12 #if defined key_bdy … … 27 28 USE bdy_oce ! ocean open boundary conditions 28 29 USE daymod ! calendar 30 USE wrk_nemo ! Memory allocation 29 31 USE tideini 30 USE tide_mod 32 ! USE tide_mod ! Useless ?? 31 33 USE fldread, ONLY: fld_map 32 34 … … 34 36 PRIVATE 35 37 36 PUBLIC bdytide_init ! routine called in nemo_init37 PUBLIC tide_update ! routine called in bdydyn38 PUBLIC bdytide_init ! routine called in bdy_init 39 PUBLIC bdytide_update ! routine called in bdy_dta 38 40 39 41 TYPE, PUBLIC :: TIDES_DATA !: Storage for external tidal harmonics data … … 47 49 48 50 TYPE(TIDES_DATA), PUBLIC, DIMENSION(jp_bdy), TARGET :: tides !: External tidal harmonics data 49 51 50 52 !!---------------------------------------------------------------------- 51 53 !! NEMO/OPA 3.3 , NEMO Consortium (2010) … … 66 68 !!------------------- 67 69 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 69 72 !! 70 73 INTEGER :: ib_bdy, itide, ib !: dummy loop indices 74 INTEGER :: ii, ij !: dummy loop indices 71 75 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 73 78 CHARACTER(len=80) :: clfile !: full file name for tidal input file 74 79 REAL(wp),ALLOCATABLE, DIMENSION(:,:,:) :: dta_read !: work space to read in tidal harmonics data 80 REAL(wp), POINTER, DIMENSION(:,:) :: ztr, zti !: " " " " " " " " 75 81 !! 76 82 TYPE(TIDES_DATA), POINTER :: td !: local short cut 77 83 !! 78 NAMELIST/nambdy_tide/filtide, ln_ conjug84 NAMELIST/nambdy_tide/filtide, ln_bdytide_2ddta, ln_bdytide_conj 79 85 !!---------------------------------------------------------------------- 80 86 81 87 IF( nn_timing == 1 ) CALL timing_start('bdytide_init') 82 88 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. 86 97 87 98 REWIND(numnam) … … 90 101 91 102 td => tides(ib_bdy) 103 nblen => idx_bdy(ib_bdy)%nblen 104 nblenrim => idx_bdy(ib_bdy)%nblenrim 92 105 93 106 ! Namelist nambdy_tide : tidal harmonic forcing at open boundaries … … 97 110 READ ( numnam, nambdy_tide ) 98 111 ! ! Parameter control and print 112 IF(lwp) WRITE(numout,*) ' ' 99 113 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,*) ' ' 104 124 105 125 ! Allocate space for tidal harmonics data - get size from OBC data arrays 106 126 ! ----------------------------------------------------------------------- 107 127 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 109 136 ALLOCATE( td%ssh0( ilen0(1), nb_harmo, 2 ) ) 110 137 ALLOCATE( td%ssh ( ilen0(1), nb_harmo, 2 ) ) 111 138 112 ilen0(2) = SIZE( dta_bdy(ib_bdy)%u2d )113 139 ALLOCATE( td%u0( ilen0(2), nb_harmo, 2 ) ) 114 140 ALLOCATE( td%u ( ilen0(2), nb_harmo, 2 ) ) 115 141 116 ilen0(3) = SIZE( dta_bdy(ib_bdy)%v2d )117 142 ALLOCATE( td%v0( ilen0(3), nb_harmo, 2 ) ) 118 143 ALLOCATE( td%v ( ilen0(3), nb_harmo, 2 ) ) 119 144 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 133 172 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 141 188 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 149 204 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. 158 247 ! 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 160 253 ! 161 254 ENDIF ! nn_dyn2d_dta(ib_bdy) .ge. 2 … … 167 260 END SUBROUTINE bdytide_init 168 261 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 *** 172 265 !! 173 266 !! ** Purpose : - Add tidal forcing to ssh, u2d and v2d OBC data arrays. … … 186 279 ! etc. 187 280 !! 281 INTEGER, DIMENSION(3) :: ilen0 !: length of boundary data (from OBC arrays) 188 282 INTEGER :: itide, igrd, ib ! dummy loop indices 189 283 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 191 285 REAL(wp), DIMENSION(jpmax_harmo) :: z_sist, z_cost 192 286 !!---------------------------------------------------------------------- 193 287 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)) 195 293 196 294 zflag=1 … … 205 303 IF(lwp) THEN 206 304 WRITE(numout,*) 207 WRITE(numout,*) 'bdy _tide : (re)Initialization of the tidal bdy forcing at kt=',kt208 WRITE(numout,*) '~~~~~~~ '305 WRITE(numout,*) 'bdytide_update : (re)Initialization of the tidal bdy forcing at kt=',kt 306 WRITE(numout,*) '~~~~~~~~~~~~~~ ' 209 307 ENDIF 210 308 ! … … 225 323 ENDIF 226 324 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 227 329 DO itide = 1, nb_harmo 228 330 z_sarg = z_arg * omega_tide(itide) … … 233 335 DO itide = 1, nb_harmo 234 336 igrd=1 ! SSH on tracer grid 235 DO ib = 1, i dx%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)) 237 339 END DO 238 340 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)) 241 343 END DO 242 344 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)) 245 347 END DO 246 348 END DO 247 349 ! 248 IF( nn_timing == 1 ) CALL timing_stop(' tide_update')350 IF( nn_timing == 1 ) CALL timing_stop('bdytide_update') 249 351 ! 250 END SUBROUTINE tide_update352 END SUBROUTINE bdytide_update 251 353 252 354 SUBROUTINE tide_init_elevation( idx, td ) … … 257 359 TYPE(TIDES_DATA),INTENT( inout ) :: td ! tidal harmonics data 258 360 !! * Local declarations 361 INTEGER, DIMENSION(1) :: ilen0 !: length of boundary data (from OBC arrays) 259 362 REAL(wp),ALLOCATABLE, DIMENSION(:) :: mod_tide, phi_tide 260 363 INTEGER :: itide, igrd, ib ! dummy loop indices 261 364 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))) 265 371 266 372 DO itide = 1, nb_harmo 267 DO ib = 1, i dx%nblenrim(igrd)373 DO ib = 1, ilen0(igrd) 268 374 mod_tide(ib)=SQRT(td%ssh0(ib,itide,1)**2.+td%ssh0(ib,itide,2)**2.) 269 375 phi_tide(ib)=ATAN2(-td%ssh0(ib,itide,2),td%ssh0(ib,itide,1)) 270 376 END DO 271 DO ib = 1 , idx%nblenrim(igrd)377 DO ib = 1 , ilen0(igrd) 272 378 mod_tide(ib)=mod_tide(ib)*ftide(itide) 273 379 phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 274 380 ENDDO 275 DO ib = 1 , idx%nblenrim(igrd)381 DO ib = 1 , ilen0(igrd) 276 382 td%ssh(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 277 383 td%ssh(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) … … 290 396 TYPE(TIDES_DATA),INTENT( inout ) :: td ! tidal harmonics data 291 397 !! * Local declarations 398 INTEGER, DIMENSION(3) :: ilen0 !: length of boundary data (from OBC arrays) 292 399 REAL(wp),ALLOCATABLE, DIMENSION(:) :: mod_tide, phi_tide 293 400 INTEGER :: itide, igrd, ib ! dummy loop indices 294 401 402 ilen0(2) = SIZE(td%u0(:,1,1)) 403 ilen0(3) = SIZE(td%v0(:,1,1)) 404 295 405 igrd=2 ! U grid. 296 406 297 ALLOCATE(mod_tide(i dx%nblenrim(igrd)),phi_tide(idx%nblenrim(igrd)))407 ALLOCATE(mod_tide(ilen0(igrd)),phi_tide(ilen0(igrd))) 298 408 299 409 DO itide = 1, nb_harmo 300 DO ib = 1, i dx%nblenrim(igrd)410 DO ib = 1, ilen0(igrd) 301 411 mod_tide(ib)=SQRT(td%u0(ib,itide,1)**2.+td%u0(ib,itide,2)**2.) 302 412 phi_tide(ib)=ATAN2(-td%u0(ib,itide,2),td%u0(ib,itide,1)) 303 413 END DO 304 DO ib = 1, i dx%nblenrim(igrd)414 DO ib = 1, ilen0(igrd) 305 415 mod_tide(ib)=mod_tide(ib)*ftide(itide) 306 416 phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 307 417 ENDDO 308 DO ib = 1, i dx%nblenrim(igrd)418 DO ib = 1, ilen0(igrd) 309 419 td%u(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 310 420 td%u(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) … … 314 424 DEALLOCATE(mod_tide,phi_tide) 315 425 316 igrd=3 ! Ugrid.317 318 ALLOCATE(mod_tide(i dx%nblenrim(igrd)),phi_tide(idx%nblenrim(igrd)))426 igrd=3 ! V grid. 427 428 ALLOCATE(mod_tide(ilen0(igrd)),phi_tide(ilen0(igrd))) 319 429 320 430 DO itide = 1, nb_harmo 321 DO ib = 1, i dx%nblenrim(igrd)431 DO ib = 1, ilen0(igrd) 322 432 mod_tide(ib)=SQRT(td%v0(ib,itide,1)**2.+td%v0(ib,itide,2)**2.) 323 433 phi_tide(ib)=ATAN2(-td%v0(ib,itide,2),td%v0(ib,itide,1)) 324 434 END DO 325 DO ib = 1, i dx%nblenrim(igrd)435 DO ib = 1, ilen0(igrd) 326 436 mod_tide(ib)=mod_tide(ib)*ftide(itide) 327 437 phi_tide(ib)=phi_tide(ib)+v0tide(itide)+utide(itide) 328 438 ENDDO 329 DO ib = 1, i dx%nblenrim(igrd)439 DO ib = 1, ilen0(igrd) 330 440 td%v(ib,itide,1)= mod_tide(ib)*COS(phi_tide(ib)) 331 441 td%v(ib,itide,2)=-mod_tide(ib)*SIN(phi_tide(ib)) … … 341 451 !!---------------------------------------------------------------------- 342 452 CONTAINS 343 SUBROUTINE bdytide_init ! Empty routine 453 SUBROUTINE bdytide_init ! Empty routine 454 WRITE(*,*) 'bdytide_init: You should not have seen this print! error?' 344 455 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 350 459 #endif 351 460
Note: See TracChangeset
for help on using the changeset viewer.