123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- MODULE updtide
- !!======================================================================
- !! *** MODULE updtide ***
- !! Initialization of tidal forcing
- !!======================================================================
- !! History : 9.0 ! 07 (O. Le Galloudec) Original code
- !!----------------------------------------------------------------------
- #if defined key_tide
- !!----------------------------------------------------------------------
- !! 'key_tide' : tidal potential
- !!----------------------------------------------------------------------
- !! upd_tide : update tidal potential
- !!----------------------------------------------------------------------
- USE oce ! ocean dynamics and tracers variables
- USE dom_oce ! ocean space and time domain
- USE in_out_manager ! I/O units
- USE phycst ! physical constant
- USE sbctide ! tide potential variable
- USE tideini, ONLY: ln_tide_ramp, rdttideramp
- IMPLICIT NONE
- PUBLIC
- PUBLIC upd_tide ! called in dynspg_... modules
-
- !!----------------------------------------------------------------------
- !! NEMO/OPA 3.3 , NEMO Consortium (2010)
- !! $Id: updtide.F90 2678 2015-11-26 09:59:07Z ufla $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE upd_tide( kt, kit, time_offset )
- !!----------------------------------------------------------------------
- !! *** ROUTINE upd_tide ***
- !!
- !! ** Purpose : provide at each time step the astronomical potential
- !!
- !! ** Method : computed from pulsation and amplitude of all tide components
- !!
- !! ** Action : pot_astro actronomical potential
- !!----------------------------------------------------------------------
- INTEGER, INTENT(in) :: kt ! ocean time-step index
- INTEGER, INTENT(in), OPTIONAL :: kit ! external mode sub-time-step index (lk_dynspg_ts=T)
- INTEGER, INTENT(in), OPTIONAL :: time_offset ! time offset in number
- ! of internal steps (lk_dynspg_ts=F)
- ! of external steps (lk_dynspg_ts=T)
- !
- INTEGER :: joffset ! local integer
- INTEGER :: ji, jj, jk ! dummy loop indices
- REAL(wp) :: zt, zramp ! local scalar
- REAL(wp), DIMENSION(nb_harmo) :: zwt
- !!----------------------------------------------------------------------
- !
- ! ! tide pulsation at model time step (or sub-time-step)
- zt = ( kt - kt_tide ) * rdt
- !
- joffset = 0
- IF( PRESENT( time_offset ) ) joffset = time_offset
- !
- IF( PRESENT( kit ) ) THEN
- zt = zt + ( kit + joffset - 1 ) * rdt / REAL( nn_baro, wp )
- ELSE
- zt = zt + joffset * rdt
- ENDIF
- !
- zwt(:) = omega_tide(:) * zt
- pot_astro(:,:) = 0._wp ! update tidal potential (sum of all harmonics)
- DO jk = 1, nb_harmo
- pot_astro(:,:) = pot_astro(:,:) + amp_pot(:,:,jk) * COS( zwt(jk) + phi_pot(:,:,jk) )
- END DO
- !
- IF( ln_tide_ramp ) THEN ! linear increase if asked
- zt = ( kt - nit000 ) * rdt
- IF( PRESENT( kit ) ) zt = zt + ( kit + joffset -1) * rdt / REAL( nn_baro, wp )
- zramp = MIN( MAX( zt / (rdttideramp*rday) , 0._wp ) , 1._wp )
- pot_astro(:,:) = zramp * pot_astro(:,:)
- ENDIF
- !
- END SUBROUTINE upd_tide
- #else
- !!----------------------------------------------------------------------
- !! Dummy module : NO TIDE
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE upd_tide( kt, kit, time_offset ) ! Empty routine
- INTEGER, INTENT(in) :: kt ! integer arg, dummy routine
- INTEGER, INTENT(in), OPTIONAL :: kit ! optional arg, dummy routine
- INTEGER, INTENT(in), OPTIONAL :: time_offset ! optional arg, dummy routine
- WRITE(*,*) 'upd_tide: You should not have seen this print! error?', kt
- END SUBROUTINE upd_tide
- #endif
- !!======================================================================
- END MODULE updtide
|