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

source: branches/2013/dev_r3853_CNRS9_ConfSetting/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 @ 3875

Last change on this file since 3875 was 3875, checked in by clevy, 11 years ago

Configuration Setting/Step? 1, see ticket:#1074

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 = .false., ln_tide_ramp = .false.
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       clname(:)=''
64       !
65       ! Read Namelist nam_tide
66       REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides
67       READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901)
68901    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp )
69
70       REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides
71       READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 )
72902    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp )
73       WRITE ( numond, nam_tide )
74       !
75       nb_harmo=0
76       DO jk=1,jpmax_harmo
77          DO ji=1,jpmax_harmo
78             IF(TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
79                nb_harmo=nb_harmo+1
80             ENDIF
81          END DO
82       ENDDO
83       !
84       IF(lwp) THEN
85          WRITE(numout,*) '        Namelist nam_tide'
86          WRITE(numout,*) '        nb_harmo    = ', nb_harmo
87          WRITE(numout,*) '        ln_tide_ramp = ', ln_tide_ramp 
88          WRITE(numout,*) '        rdttideramp = ', rdttideramp
89          IF (ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp)) &
90          & CALL ctl_stop('rdttideramp must be lower than run duration')
91          IF (ln_tide_ramp.AND.(rdttideramp<0.)) &
92          & CALL ctl_stop('rdttideramp must be positive')
93          CALL flush(numout)
94       ENDIF
95       !
96       ALLOCATE(ntide(nb_harmo))
97       DO jk=1,nb_harmo
98          DO ji=1,jpmax_harmo
99             IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
100                ntide(jk) = ji
101                EXIT
102             END IF
103          END DO
104       END DO
105       !
106       ALLOCATE(omega_tide(nb_harmo))
107       ALLOCATE(v0tide    (nb_harmo))
108       ALLOCATE(utide     (nb_harmo))
109       ALLOCATE(ftide     (nb_harmo))
110       kt_tide = kt
111       !
112    ENDIF
113
114    IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN
115       !
116       IF(lwp) THEN
117          WRITE(numout,*)
118          WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=',kt
119          WRITE(numout,*) '~~~~~~~~ '
120       ENDIF
121       CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo)
122       DO jk =1,nb_harmo
123         IF(lwp) WRITE(numout,*) Wave(ntide(jk))%cname_tide,utide(jk),ftide(jk),v0tide(jk),omega_tide(jk)
124         call flush(numout)
125       END DO
126       !
127       kt_tide = kt
128       !
129    ENDIF
130
131  END SUBROUTINE tide_init
132   
133END MODULE tideini
Note: See TracBrowser for help on using the repository browser.