- Timestamp:
- 2019-04-12T11:58:31+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/BDY/bdytides.F90
r10861 r10865 30 30 31 31 PUBLIC bdytide_init ! routine called in bdy_init 32 PUBLIC bdytide_update ! routine called in bdy_dta33 32 PUBLIC bdy_dta_tides ! routine called in dyn_spg_ts 34 33 … … 263 262 264 263 265 SUBROUTINE bdytide_update( kt, idx, dta, td, jit, time_offset )266 !!----------------------------------------------------------------------267 !! *** SUBROUTINE bdytide_update ***268 !!269 !! ** Purpose : - Add tidal forcing to ssh, u2d and v2d OBC data arrays.270 !!271 !!----------------------------------------------------------------------272 INTEGER , INTENT(in ) :: kt ! Main timestep counter273 TYPE(OBC_INDEX) , INTENT(in ) :: idx ! OBC indices274 TYPE(OBC_DATA) , INTENT(inout) :: dta ! OBC external data275 TYPE(TIDES_DATA) , INTENT(inout) :: td ! tidal harmonics data276 INTEGER, OPTIONAL, INTENT(in ) :: jit ! Barotropic timestep counter (for timesplitting option)277 INTEGER, OPTIONAL, INTENT(in ) :: time_offset ! time offset in units of timesteps. NB. if jit278 ! ! is present then units = subcycle timesteps.279 ! ! time_offset = 0 => get data at "now" time level280 ! ! time_offset = -1 => get data at "before" time level281 ! ! time_offset = +1 => get data at "after" time level282 ! ! etc.283 !284 INTEGER :: itide, igrd, ib ! dummy loop indices285 INTEGER :: time_add ! time offset in units of timesteps286 INTEGER, DIMENSION(3) :: ilen0 ! length of boundary data (from OBC arrays)287 REAL(wp) :: z_arg, z_sarg, zflag, zramp ! local scalars288 REAL(wp), DIMENSION(jpmax_harmo) :: z_sist, z_cost289 !!----------------------------------------------------------------------290 !291 ilen0(1) = SIZE(td%ssh(:,1,1))292 ilen0(2) = SIZE(td%u(:,1,1))293 ilen0(3) = SIZE(td%v(:,1,1))294 295 zflag=1296 IF ( PRESENT(jit) ) THEN297 IF ( jit /= 1 ) zflag=0298 ENDIF299 300 IF ( (nsec_day == NINT(0.5_wp * rdt) .OR. kt==nit000) .AND. zflag==1 ) THEN301 !302 kt_tide = kt - (nsec_day - 0.5_wp * rdt)/rdt303 !304 IF(lwp) THEN305 WRITE(numout,*)306 WRITE(numout,*) 'bdytide_update : (re)Initialization of the tidal bdy forcing at kt=',kt307 WRITE(numout,*) '~~~~~~~~~~~~~~ '308 ENDIF309 !310 CALL tide_init_elevation ( idx, td )311 CALL tide_init_velocities( idx, td )312 !313 ENDIF314 315 time_add = 0316 IF( PRESENT(time_offset) ) THEN317 time_add = time_offset318 ENDIF319 320 IF( PRESENT(jit) ) THEN321 z_arg = ((kt-kt_tide) * rdt + (jit+0.5_wp*(time_add-1)) * rdt / REAL(nn_baro,wp) )322 ELSE323 z_arg = ((kt-kt_tide)+time_add) * rdt324 ENDIF325 326 ! Linear ramp on tidal component at open boundaries327 zramp = 1._wp328 IF (ln_tide_ramp) zramp = MIN(MAX( (z_arg + (kt_tide-nit000)*rdt)/(rn_tide_ramp_dt*rday),0._wp),1._wp)329 330 DO itide = 1, nb_harmo331 z_sarg = z_arg * tide_harmonics(itide)%omega332 z_cost(itide) = COS( z_sarg )333 z_sist(itide) = SIN( z_sarg )334 END DO335 336 DO itide = 1, nb_harmo337 igrd=1 ! SSH on tracer grid338 DO ib = 1, ilen0(igrd)339 dta%ssh(ib) = dta%ssh(ib) + zramp*(td%ssh(ib,itide,1)*z_cost(itide) + td%ssh(ib,itide,2)*z_sist(itide))340 END DO341 igrd=2 ! U grid342 DO ib = 1, ilen0(igrd)343 dta%u2d(ib) = dta%u2d(ib) + zramp*(td%u (ib,itide,1)*z_cost(itide) + td%u (ib,itide,2)*z_sist(itide))344 END DO345 igrd=3 ! V grid346 DO ib = 1, ilen0(igrd)347 dta%v2d(ib) = dta%v2d(ib) + zramp*(td%v (ib,itide,1)*z_cost(itide) + td%v (ib,itide,2)*z_sist(itide))348 END DO349 END DO350 !351 END SUBROUTINE bdytide_update352 353 354 264 SUBROUTINE bdy_dta_tides( kt, kit, time_offset ) 355 265 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.