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.
updtide.F90 in branches/NERC/dev_r5518_COAREbulk/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/NERC/dev_r5518_COAREbulk/NEMOGCM/NEMO/OPA_SRC/SBC/updtide.F90 @ 9185

Last change on this file since 9185 was 9185, checked in by jpalmier, 6 years ago

jpalm -- svn key delete

File size: 4.5 KB
Line 
1MODULE updtide
2   !!======================================================================
3   !!                       ***  MODULE  updtide  ***
4   !! Initialization of tidal forcing
5   !!======================================================================
6   !! History :  9.0  !  07  (O. Le Galloudec)  Original code
7   !!----------------------------------------------------------------------
8#if defined key_tide
9   !!----------------------------------------------------------------------
10   !!   'key_tide' :                                        tidal potential
11   !!----------------------------------------------------------------------
12   !!   upd_tide       : update tidal potential
13   !!----------------------------------------------------------------------
14   USE oce             ! ocean dynamics and tracers variables
15   USE dom_oce         ! ocean space and time domain
16   USE in_out_manager  ! I/O units
17   USE phycst          ! physical constant
18   USE sbctide         ! tide potential variable
19   USE tideini, ONLY: ln_tide_ramp, rdttideramp
20
21   IMPLICIT NONE
22   PUBLIC
23
24   PUBLIC   upd_tide   ! called in dynspg_... modules
25 
26   !!----------------------------------------------------------------------
27   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
28   !! $Id$
29   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
30   !!----------------------------------------------------------------------
31CONTAINS
32
33   SUBROUTINE upd_tide( kt, kit, kbaro, koffset )
34      !!----------------------------------------------------------------------
35      !!                 ***  ROUTINE upd_tide  ***
36      !!
37      !! ** Purpose :   provide at each time step the astronomical potential
38      !!
39      !! ** Method  :   computed from pulsation and amplitude of all tide components
40      !!
41      !! ** Action  :   pot_astro   actronomical potential
42      !!----------------------------------------------------------------------     
43      INTEGER, INTENT(in)           ::   kt      ! ocean time-step index
44      INTEGER, INTENT(in), OPTIONAL ::   kit     ! external mode sub-time-step index (lk_dynspg_ts=T only)
45      INTEGER, INTENT(in), OPTIONAL ::   kbaro   ! number of sub-time-step           (lk_dynspg_ts=T only)
46      INTEGER, INTENT(in), OPTIONAL ::   koffset ! time offset in number
47                                                 ! of sub-time-steps                 (lk_dynspg_ts=T only)
48      !
49      INTEGER  ::   joffset      ! local integer
50      INTEGER  ::   ji, jj, jk   ! dummy loop indices
51      REAL(wp) ::   zt, zramp    ! local scalar
52      REAL(wp), DIMENSION(nb_harmo) ::   zwt 
53      !!----------------------------------------------------------------------     
54      !
55      !                               ! tide pulsation at model time step (or sub-time-step)
56      zt = ( kt - kt_tide ) * rdt
57      !
58      joffset = 0
59      IF( PRESENT( koffset ) )   joffset = koffset
60      !
61      IF( PRESENT( kit ) .AND. PRESENT( kbaro ) )   THEN
62         zt = zt + ( kit + 0.5_wp * ( joffset - 1 ) ) * rdt / REAL( kbaro, wp )
63      ELSE
64         zt = zt + joffset * rdt
65      ENDIF
66      !
67      zwt(:) = omega_tide(:) * zt
68
69      pot_astro(:,:) = 0._wp          ! update tidal potential (sum of all harmonics)
70      DO jk = 1, nb_harmo   
71         pot_astro(:,:) = pot_astro(:,:) + amp_pot(:,:,jk) * COS( zwt(jk) + phi_pot(:,:,jk) )     
72      END DO
73      !
74      IF( ln_tide_ramp ) THEN         ! linear increase if asked
75         zt = ( kt - nit000 ) * rdt
76         IF( PRESENT( kit ) .AND. PRESENT( kbaro ) )   zt = zt + kit * rdt / REAL( kbaro, wp )
77         zramp = MIN(  MAX( zt / (rdttideramp*rday) , 0._wp ) , 1._wp  )
78         pot_astro(:,:) = zramp * pot_astro(:,:)
79      ENDIF
80      !
81   END SUBROUTINE upd_tide
82
83#else
84  !!----------------------------------------------------------------------
85  !!   Dummy module :                                        NO TIDE
86  !!----------------------------------------------------------------------
87CONTAINS
88  SUBROUTINE upd_tide( kt, kit, kbaro, koffset )          ! Empty routine
89    INTEGER, INTENT(in)           ::   kt      !  integer  arg, dummy routine
90    INTEGER, INTENT(in), OPTIONAL ::   kit     !  optional arg, dummy routine
91    INTEGER, INTENT(in), OPTIONAL ::   kbaro   !  optional arg, dummy routine
92    INTEGER, INTENT(in), OPTIONAL ::   koffset !  optional arg, dummy routine
93    WRITE(*,*) 'upd_tide: You should not have seen this print! error?', kt
94  END SUBROUTINE upd_tide
95
96#endif
97
98  !!======================================================================
99
100END MODULE updtide
Note: See TracBrowser for help on using the repository browser.