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

source: branches/UKMO/test_moci_test_suite_namelist_read/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 @ 9366

Last change on this file since 9366 was 9366, checked in by andmirek, 6 years ago

#2050 first version. Compiled OK in moci test suite

File size: 5.6 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
11   USE daymod
12   USE dynspg_oce
13   USE tide_mod
14   !
15   USE iom
16   USE in_out_manager  ! I/O units
17   USE ioipsl          ! NetCDF IPSL library
18   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
19
20   IMPLICIT NONE
21   PRIVATE init_namelist
22   PUBLIC
23
24   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   omega_tide   !:
25   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   v0tide       !:
26   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   utide        !:
27   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ftide        !:
28
29   LOGICAL , PUBLIC ::   ln_tide_pot     !:
30   LOGICAL , PUBLIC ::   ln_tide_ramp    !:
31   INTEGER , PUBLIC ::   nb_harmo                 !:
32   INTEGER , PUBLIC ::   kt_tide                  !:
33   REAL(wp), PUBLIC ::   rdttideramp              !:
34   
35   INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !:
36
37   !!----------------------------------------------------------------------
38   !! NEMO/OPA 3.5 , NEMO Consortium (2013)
39   !! $Id$
40   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
41   !!----------------------------------------------------------------------
42CONTAINS
43   
44  SUBROUTINE tide_init ( kt )
45    !!----------------------------------------------------------------------
46    !!                 ***  ROUTINE tide_init  ***
47    !!----------------------------------------------------------------------     
48    !! * Local declarations
49    INTEGER  :: ji, jk
50    INTEGER, INTENT( in ) ::   kt     ! ocean time-step
51    CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname
52    INTEGER  ::   ios                 ! Local integer output status for namelist read
53    !
54    NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname
55    !!----------------------------------------------------------------------
56
57    IF ( kt == nit000 ) THEN
58       !
59       IF(lwp) THEN
60          WRITE(numout,*)
61          WRITE(numout,*) 'tide_init : Initialization of the tidal components'
62          WRITE(numout,*) '~~~~~~~~~ '
63       ENDIF
64       !
65       CALL tide_init_Wave
66       !
67       ! Read Namelist nam_tide
68       IF(lwm) THEN
69          REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides
70          READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901)
71901       IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwm )
72          REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides
73          READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 )
74902       IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwm )
75       ENDIF
76
77       IF(lwm) WRITE ( numond, nam_tide )
78       !
79       CALL init_namelist(clname)
80
81       nb_harmo=0
82       DO jk = 1, jpmax_harmo
83          DO ji = 1,jpmax_harmo
84             IF( TRIM(clname(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1
85          END DO
86       END DO
87       !       
88       ! Ensure that tidal components have been set in namelist_cfg
89       IF( nb_harmo .EQ. 0 ) CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' )
90       !
91       IF(lwp) THEN
92          WRITE(numout,*) '   Namelist nam_tide'
93          WRITE(numout,*) '      Apply astronomical potential : ln_tide_pot  =', ln_tide_pot
94          WRITE(numout,*) '                                     nb_harmo     = ', nb_harmo
95          WRITE(numout,*) '                                     ln_tide_ramp = ', ln_tide_ramp 
96          WRITE(numout,*) '                                     rdttideramp  = ', rdttideramp
97       ENDIF
98       IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) )   &
99          &   CALL ctl_stop('rdttideramp must be lower than run duration')
100       IF( ln_tide_ramp.AND.(rdttideramp<0.) ) &
101          &   CALL ctl_stop('rdttideramp must be positive')
102       !
103       IF( .NOT. lk_dynspg_ts )   CALL ctl_warn( 'sbc_tide : use of time splitting is recommended' )
104       !
105       ALLOCATE( ntide(nb_harmo) )
106       DO jk = 1, nb_harmo
107          DO ji = 1, jpmax_harmo
108             IF( TRIM(clname(jk)) .eq. Wave(ji)%cname_tide ) THEN
109                ntide(jk) = ji
110                EXIT
111             END IF
112          END DO
113       END DO
114       !
115       ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   &
116          &      utide     (nb_harmo), ftide     (nb_harmo)  )
117       kt_tide = kt
118       !
119      ENDIF
120      !
121   END SUBROUTINE tide_init
122
123   SUBROUTINE init_namelist(cdname)
124     !!---------------------------------------------------------------------
125     !!                   ***  ROUTINE init_namelist  ***
126     !!                     
127     !! ** Purpose :   Broadcast namelist variables read by procesor lwm
128     !!
129     !! ** Method  :   use lib_mpp
130     !!----------------------------------------------------------------------
131     CHARACTER(LEN=4), DIMENSION(jpmax_harmo), INTENT(INOUT) :: cdname
132     INTEGER :: il
133
134#if defined key_mpp_mpi
135      CALL mpp_bcast(ln_tide_pot)
136      CALL mpp_bcast(ln_tide_ramp)
137      CALL mpp_bcast(rdttideramp)
138      DO il = 1, jpmax_harmo
139         CALL mpp_bcast(cdname(il), 4)
140      ENDDO
141#endif
142   END SUBROUTINE init_namelist     
143
144   !!======================================================================
145END MODULE tideini
Note: See TracBrowser for help on using the repository browser.