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.
tideini.F90 in branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 @ 4147

Last change on this file since 4147 was 4147, checked in by cetlod, 10 years ago

merge in dev_LOCEAN_2013, the 1st development branch dev_r3853_CNRS9_Confsetting, from its starting point ( r3853 ) on the trunk: see ticket #1169

File size: 4.5 KB
Line 
1MODULE tideini
2  !!=================================================================================
3  !!                       ***  MODULE  tideini  ***
4  !! Initialization of tidal forcing
5  !! History :  9.0  !  07  (O. Le Galloudec)  Original code
6  !!=================================================================================
7  !! * Modules used
8  USE oce             ! ocean dynamics and tracers variables
9  USE dom_oce         ! ocean space and time domain
10  USE in_out_manager  ! I/O units
11  USE ioipsl          ! NetCDF IPSL library
12  USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
13  USE phycst
14  USE daymod
15  USE dynspg_oce
16  USE tide_mod
17  USE iom
18
19  IMPLICIT NONE
20  PUBLIC
21
22  REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::  &
23       omega_tide,  &
24       v0tide,      &
25       utide,       &
26       ftide
27
28  LOGICAL, PUBLIC :: ln_tide_pot , ln_tide_ramp 
29  REAL(wp), PUBLIC :: rdttideramp 
30  INTEGER, PUBLIC :: nb_harmo
31  INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide
32  INTEGER, PUBLIC :: kt_tide
33
34  !!---------------------------------------------------------------------------------
35  !!   OPA 9.0 , LODYC-IPSL  (2003)
36  !!---------------------------------------------------------------------------------
37
38CONTAINS
39   
40  SUBROUTINE tide_init ( kt )
41    !!----------------------------------------------------------------------
42    !!                 ***  ROUTINE tide_init  ***
43    !!----------------------------------------------------------------------     
44    !! * Local declarations
45    INTEGER  :: ji, jk
46    INTEGER, INTENT( in ) ::   kt     ! ocean time-step
47    CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname
48    INTEGER  ::   ios                 ! Local integer output status for namelist read
49    !
50    NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname
51    !!----------------------------------------------------------------------
52
53    IF ( kt == nit000 ) THEN
54       !
55       IF(lwp) THEN
56          WRITE(numout,*)
57          WRITE(numout,*) 'tide_init : Initialization of the tidal components'
58          WRITE(numout,*) '~~~~~~~~~ '
59       ENDIF
60       !
61       CALL tide_init_Wave
62       !
63       ! Read Namelist nam_tide
64       REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides
65       READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901)
66901    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp )
67
68       REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides
69       READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 )
70902    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp )
71       WRITE ( numond, nam_tide )
72       !
73       nb_harmo=0
74       DO jk=1,jpmax_harmo
75          DO ji=1,jpmax_harmo
76             IF(TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
77                nb_harmo=nb_harmo+1
78             ENDIF
79          END DO
80       ENDDO
81       !
82       IF(lwp) THEN
83          WRITE(numout,*) '        Namelist nam_tide'
84          WRITE(numout,*) '        nb_harmo    = ', nb_harmo
85          WRITE(numout,*) '        ln_tide_ramp = ', ln_tide_ramp 
86          WRITE(numout,*) '        rdttideramp = ', rdttideramp
87          IF (ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp)) &
88          & CALL ctl_stop('rdttideramp must be lower than run duration')
89          IF (ln_tide_ramp.AND.(rdttideramp<0.)) &
90          & CALL ctl_stop('rdttideramp must be positive')
91          CALL flush(numout)
92       ENDIF
93       !
94       ALLOCATE(ntide(nb_harmo))
95       DO jk=1,nb_harmo
96          DO ji=1,jpmax_harmo
97             IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
98                ntide(jk) = ji
99                EXIT
100             END IF
101          END DO
102       END DO
103       !
104       ALLOCATE(omega_tide(nb_harmo))
105       ALLOCATE(v0tide    (nb_harmo))
106       ALLOCATE(utide     (nb_harmo))
107       ALLOCATE(ftide     (nb_harmo))
108       kt_tide = kt
109       !
110    ENDIF
111
112    IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN
113       !
114       IF(lwp) THEN
115          WRITE(numout,*)
116          WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=',kt
117          WRITE(numout,*) '~~~~~~~~ '
118       ENDIF
119       CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo)
120       DO jk =1,nb_harmo
121         IF(lwp) WRITE(numout,*) Wave(ntide(jk))%cname_tide,utide(jk),ftide(jk),v0tide(jk),omega_tide(jk)
122         call flush(numout)
123       END DO
124       !
125       kt_tide = kt
126       !
127    ENDIF
128
129  END SUBROUTINE tide_init
130   
131END MODULE tideini
Note: See TracBrowser for help on using the repository browser.