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.
sbctide.F90 in branches/UKMO/r5936_hadgem3_cplfld/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/UKMO/r5936_hadgem3_cplfld/NEMOGCM/NEMO/OPA_SRC/SBC/sbctide.F90 @ 7138

Last change on this file since 7138 was 7138, checked in by jcastill, 7 years ago

Remove svn keywords

File size: 5.3 KB
Line 
1MODULE sbctide
2   !!======================================================================
3   !!                       ***  MODULE  sbctide  ***
4   !! Initialization of tidal forcing
5   !!======================================================================
6   !! History :  9.0  !  2007  (O. Le Galloudec)  Original code
7   !!----------------------------------------------------------------------
8   USE oce             ! ocean dynamics and tracers variables
9   USE dom_oce         ! ocean space and time domain
10   USE phycst
11   USE daymod
12   USE tideini
13   !
14   USE iom
15   USE in_out_manager  ! I/O units
16   USE ioipsl          ! NetCDF IPSL library
17   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
18
19   IMPLICIT NONE
20   PUBLIC
21
22   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) ::   pot_astro   !
23
24#if defined key_tide
25   !!----------------------------------------------------------------------
26   !!   'key_tide' :                                        tidal potential
27   !!----------------------------------------------------------------------
28   !!   sbc_tide            :
29   !!   tide_init_potential :
30   !!----------------------------------------------------------------------
31
32   LOGICAL, PUBLIC, PARAMETER ::   lk_tide  = .TRUE.
33   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   amp_pot, phi_pot
34
35   !!----------------------------------------------------------------------
36   !! NEMO/OPA 3.5 , NEMO Consortium (2013)
37   !! $Id$
38   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
39   !!----------------------------------------------------------------------
40CONTAINS
41
42   SUBROUTINE sbc_tide( kt )
43      !!----------------------------------------------------------------------
44      !!                 ***  ROUTINE sbc_tide  ***
45      !!----------------------------------------------------------------------     
46      INTEGER, INTENT( in ) ::   kt     ! ocean time-step
47      INTEGER               ::   jk     ! dummy loop index
48      !!----------------------------------------------------------------------
49
50      IF( nsec_day == NINT(0.5_wp * rdttra(1)) ) THEN      ! start a new day
51         !
52         IF( kt == nit000 ) THEN
53            ALLOCATE( amp_pot(jpi,jpj,nb_harmo),                      &
54               &      phi_pot(jpi,jpj,nb_harmo), pot_astro(jpi,jpj)   )
55         ENDIF
56         !
57         amp_pot(:,:,:) = 0._wp
58         phi_pot(:,:,:) = 0._wp
59         pot_astro(:,:) = 0._wp
60         !
61         CALL tide_harmo( omega_tide, v0tide, utide, ftide, ntide, nb_harmo )
62         !
63         kt_tide = kt
64         !
65         IF(lwp) THEN
66            WRITE(numout,*)
67            WRITE(numout,*) 'sbc_tide : Update of the components and (re)Init. the potential at kt=', kt
68            WRITE(numout,*) '~~~~~~~~ '
69            DO jk = 1, nb_harmo
70               WRITE(numout,*) Wave(ntide(jk))%cname_tide, utide(jk), ftide(jk), v0tide(jk), omega_tide(jk)
71            END DO
72         ENDIF
73         !
74         IF( ln_tide_pot )   CALL tide_init_potential
75         !
76      ENDIF
77      !
78   END SUBROUTINE sbc_tide
79
80
81   SUBROUTINE tide_init_potential
82      !!----------------------------------------------------------------------
83      !!                 ***  ROUTINE tide_init_potential  ***
84      !!----------------------------------------------------------------------
85      INTEGER  ::   ji, jj, jk   ! dummy loop indices
86      REAL(wp) ::   zcons, ztmp1, ztmp2, zlat, zlon, ztmp, zamp, zcs   ! local scalar
87      !!----------------------------------------------------------------------
88
89      DO jk = 1, nb_harmo
90         zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk)
91         DO ji = 1, jpi
92            DO jj = 1, jpj
93               ztmp1 =  amp_pot(ji,jj,jk) * COS( phi_pot(ji,jj,jk) )
94               ztmp2 = -amp_pot(ji,jj,jk) * SIN( phi_pot(ji,jj,jk) )
95               zlat = gphit(ji,jj)*rad !! latitude en radian
96               zlon = glamt(ji,jj)*rad !! longitude en radian
97               ztmp = v0tide(jk) + utide(jk) + Wave(ntide(jk))%nutide * zlon
98               ! le potentiel est composé des effets des astres:
99               IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat )
100               ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2
101               ELSE                                         ;  zcs = 0._wp
102               ENDIF
103               ztmp1 = ztmp1 + zcs * COS( ztmp )
104               ztmp2 = ztmp2 - zcs * SIN( ztmp )
105               zamp = SQRT( ztmp1*ztmp1 + ztmp2*ztmp2 )
106               amp_pot(ji,jj,jk) = zamp
107               phi_pot(ji,jj,jk) = ATAN2( -ztmp2 / MAX( 1.e-10_wp , zamp ) ,   &
108                  &                        ztmp1 / MAX( 1.e-10_wp,  zamp )   )
109            END DO
110         END DO
111      END DO
112      !
113   END SUBROUTINE tide_init_potential
114
115#else
116  !!----------------------------------------------------------------------
117  !!   Default case :   Empty module
118  !!----------------------------------------------------------------------
119  LOGICAL, PUBLIC, PARAMETER ::   lk_tide = .FALSE.
120CONTAINS
121  SUBROUTINE sbc_tide( kt )      ! Empty routine
122    INTEGER         , INTENT(in) ::   kt         ! ocean time-step
123    WRITE(*,*) 'sbc_tide: You should not have seen this print! error?', kt
124  END SUBROUTINE sbc_tide
125#endif
126
127  !!======================================================================
128END MODULE sbctide
Note: See TracBrowser for help on using the repository browser.