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 NEMO/branches/NERC/NEMO_4.0.4_CO9_package_tides/src/OCE/SBC – NEMO

source: NEMO/branches/NERC/NEMO_4.0.4_CO9_package_tides/src/OCE/SBC/tideini.F90 @ 14266

Last change on this file since 14266 was 14266, checked in by dbyrne, 3 years ago

Long period tide forcing, variable love number, new nodal equation 20 added

File size: 6.1 KB
Line 
1MODULE tideini
2   !!======================================================================
3   !!                       ***  MODULE  tideini  ***
4   !! Initialization of tidal forcing
5   !!======================================================================
6   !! History :  1.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         ! physical constants
11   USE daymod         ! calendar
12   USE tide_mod       !
13   !
14   USE in_out_manager ! I/O units
15   USE iom            ! xIOs server
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(:) ::   omega_tide   !:
23   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   v0tide       !:
24   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   utide        !:
25   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ftide        !:
26
27   LOGICAL , PUBLIC ::   ln_tide         !:
28   LOGICAL , PUBLIC ::   ln_tide_pot     !:
29   LOGICAL , PUBLIC ::   ln_read_load    !:
30   LOGICAL , PUBLIC ::   ln_scal_load    !:
31   LOGICAL , PUBLIC ::   ln_tide_ramp    !:
32   INTEGER , PUBLIC ::   nb_harmo        !:
33   INTEGER , PUBLIC ::   kt_tide         !:
34   REAL(wp), PUBLIC ::   rdttideramp     !:
35   REAL(wp), PUBLIC ::   rn_scal_load    !:
36   ! davbyr - read love number from namelist
37   REAL(wp), PUBLIC ::   dn_love_number  !:
38   ! END davbyr
39   CHARACTER(lc), PUBLIC ::   cn_tide_load   !:
40
41   INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !:
42
43   !!----------------------------------------------------------------------
44   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
45   !! $Id$
46   !! Software governed by the CeCILL license (see ./LICENSE)
47   !!----------------------------------------------------------------------
48CONTAINS
49   
50   SUBROUTINE tide_init
51      !!----------------------------------------------------------------------
52      !!                 ***  ROUTINE tide_init  ***
53      !!----------------------------------------------------------------------     
54      INTEGER  :: ji, jk
55      CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname
56      INTEGER  ::   ios                 ! Local integer output status for namelist read
57      !
58      NAMELIST/nam_tide/ln_tide, ln_tide_pot, ln_scal_load, ln_read_load, cn_tide_load, &
59                  &     ln_tide_ramp, rn_scal_load, rdttideramp, dn_love_number, clname
60      !!----------------------------------------------------------------------
61      !
62      ! Read Namelist nam_tide
63      REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides
64      READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901)
65901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nam_tide in reference namelist' )
66      !
67      REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides
68      READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 )
69902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nam_tide in configuration namelist' )
70      IF(lwm) WRITE ( numond, nam_tide )
71      !
72      IF( ln_tide ) THEN
73         IF (lwp) THEN
74            WRITE(numout,*)
75            WRITE(numout,*) 'tide_init : Initialization of the tidal components'
76            WRITE(numout,*) '~~~~~~~~~ '
77            WRITE(numout,*) '   Namelist nam_tide'
78            WRITE(numout,*) '      Use tidal components                       ln_tide      = ', ln_tide
79            WRITE(numout,*) '         Apply astronomical potential            ln_tide_pot  = ', ln_tide_pot
80            WRITE(numout,*) '         Use scalar approx. for load potential   ln_scal_load = ', ln_scal_load
81            WRITE(numout,*) '         Read load potential from file           ln_read_load = ', ln_read_load
82            WRITE(numout,*) '         Apply ramp on tides at startup          ln_tide_ramp = ', ln_tide_ramp
83            WRITE(numout,*) '         Fraction of SSH used in scal. approx.   rn_scal_load = ', rn_scal_load
84            WRITE(numout,*) '         Duration (days) of ramp                 rdttideramp  = ', rdttideramp
85            ! davbyr - Love number (one line)
86            WRITE(numout,*) '         Love Number                             dn_love_number = ', dn_love_number
87         ENDIF
88      ELSE
89         rn_scal_load = 0._wp 
90
91         IF(lwp) WRITE(numout,*)
92         IF(lwp) WRITE(numout,*) 'tide_init : tidal components not used (ln_tide = F)'
93         IF(lwp) WRITE(numout,*) '~~~~~~~~~ '
94         RETURN
95      ENDIF
96      !
97      CALL tide_init_Wave
98      !
99      nb_harmo=0
100      DO jk = 1, jpmax_harmo
101         DO ji = 1,jpmax_harmo
102            IF( TRIM(clname(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1
103         END DO
104      END DO
105      !       
106      ! Ensure that tidal components have been set in namelist_cfg
107      IF( nb_harmo == 0 )   CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' )
108      !
109      IF( ln_read_load.AND.(.NOT.ln_tide_pot) ) &
110          &   CALL ctl_stop('ln_read_load requires ln_tide_pot')
111      IF( ln_scal_load.AND.(.NOT.ln_tide_pot) ) &
112          &   CALL ctl_stop('ln_scal_load requires ln_tide_pot')
113      IF( ln_scal_load.AND.ln_read_load ) &
114          &   CALL ctl_stop('Choose between ln_scal_load and ln_read_load')
115      IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) )   &
116         &   CALL ctl_stop('rdttideramp must be lower than run duration')
117      IF( ln_tide_ramp.AND.(rdttideramp<0.) ) &
118         &   CALL ctl_stop('rdttideramp must be positive')
119      !
120      ALLOCATE( ntide(nb_harmo) )
121      DO jk = 1, nb_harmo
122         DO ji = 1, jpmax_harmo
123            IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) THEN
124               ntide(jk) = ji
125               EXIT
126            ENDIF
127         END DO
128      END DO
129      !
130      ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   &
131         &      utide     (nb_harmo), ftide     (nb_harmo)  )
132      kt_tide = nit000
133      !
134      IF (.NOT.ln_scal_load ) rn_scal_load = 0._wp
135      !
136   END SUBROUTINE tide_init
137     
138   !!======================================================================
139END MODULE tideini
Note: See TracBrowser for help on using the repository browser.