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

source: branches/2012/dev_NOC_MERCATOR_2012/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 @ 3651

Last change on this file since 3651 was 3651, checked in by cbricaud, 11 years ago

merge dev_MERCATOR_2012_rev3555 into dev_NOC_MERCATOR_2012 ; see ticket 1020

File size: 4.0 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    !
49    NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname
50    !!----------------------------------------------------------------------
51
52    IF ( kt == nit000 ) THEN
53       !
54       IF(lwp) THEN
55          WRITE(numout,*)
56          WRITE(numout,*) 'tide_init : Initialization of the tidal components'
57          WRITE(numout,*) '~~~~~~~~~ '
58       ENDIF
59       !
60       CALL tide_init_Wave
61       !
62       clname(:)=''
63       !
64       ! Read Namelist nam_tide
65       REWIND ( numnam )
66       READ   ( numnam, nam_tide )
67       !
68       nb_harmo=0
69       DO jk=1,jpmax_harmo
70          DO ji=1,jpmax_harmo
71             IF(TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
72                nb_harmo=nb_harmo+1
73             ENDIF
74          END DO
75       ENDDO
76       !
77       IF(lwp) THEN
78          WRITE(numout,*) '        Namelist nam_tide'
79          WRITE(numout,*) '        nb_harmo    = ', nb_harmo
80          WRITE(numout,*) '        ln_tide_ramp = ', ln_tide_ramp 
81          WRITE(numout,*) '        rdttideramp = ', rdttideramp
82          IF (ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp)) &
83          & CALL ctl_stop('rdttideramp must be lower than run duration')
84          IF (ln_tide_ramp.AND.(rdttideramp<0.)) &
85          & CALL ctl_stop('rdttideramp must be positive')
86          CALL flush(numout)
87       ENDIF
88       !
89       ALLOCATE(ntide(nb_harmo))
90       DO jk=1,nb_harmo
91          DO ji=1,jpmax_harmo
92             IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN
93                ntide(jk) = ji
94                EXIT
95             END IF
96          END DO
97       END DO
98       !
99       ALLOCATE(omega_tide(nb_harmo))
100       ALLOCATE(v0tide    (nb_harmo))
101       ALLOCATE(utide     (nb_harmo))
102       ALLOCATE(ftide     (nb_harmo))
103       kt_tide = kt
104       !
105    ENDIF
106
107    IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN
108       !
109       IF(lwp) THEN
110          WRITE(numout,*)
111          WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=',kt
112          WRITE(numout,*) '~~~~~~~~ '
113       ENDIF
114       CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo)
115       DO jk =1,nb_harmo
116         IF(lwp) WRITE(numout,*) Wave(ntide(jk))%cname_tide,utide(jk),ftide(jk),v0tide(jk),omega_tide(jk)
117         call flush(numout)
118       END DO
119       !
120       kt_tide = kt
121       !
122    ENDIF
123
124  END SUBROUTINE tide_init
125   
126END MODULE tideini
Note: See TracBrowser for help on using the repository browser.