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/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/SBC/sbctide.F90 @ 3955

Last change on this file since 3955 was 3955, checked in by acc, 11 years ago

Branch 2013/dev_r3858_NOC_ZTC, #863. Minor fix to sbctide.F90 to enable compilation (typos resulting in undeclared variables).

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