source: NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/SBC/tideini.F90 @ 11180

Last change on this file since 11180 was 11180, checked in by clne, 22 months ago

Initial commit of code for 2d (surge) work in NEMO4.
This is aiming to replicate the 3.6 version in branches/UKMO/dev_r5518_Surge_Modelling

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