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.
Changeset 3953 for branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 – NEMO

Ignore:
Timestamp:
2013-07-03T13:41:32+02:00 (11 years ago)
Author:
gm
Message:

dev_r3858_NOC_ZTC, #863 : activate tide potential in filtered ssh case + style in tide modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90

    r3651 r3953  
    11MODULE 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 
     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) 
    1819 
    19   IMPLICIT NONE 
    20   PUBLIC 
     20   IMPLICIT NONE 
     21   PUBLIC 
    2122 
    22   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::  & 
    23        omega_tide,  & 
    24        v0tide,      & 
    25        utide,       & 
    26        ftide 
     23   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   omega_tide   !: 
     24   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   v0tide       !: 
     25   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   utide        !: 
     26   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ftide        !: 
    2727 
    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 
     28   LOGICAL , PUBLIC ::   ln_tide_pot  = .FALSE.   !: 
     29   LOGICAL , PUBLIC ::   ln_tide_ramp = .FALSE.   !: 
     30   INTEGER , PUBLIC ::   nb_harmo                 !: 
     31   INTEGER , PUBLIC ::   kt_tide                  !: 
     32   REAL(wp), PUBLIC ::   rdttideramp              !: 
     33    
     34   INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !: 
    3335 
    34   !!--------------------------------------------------------------------------------- 
    35   !!   OPA 9.0 , LODYC-IPSL  (2003) 
    36   !!--------------------------------------------------------------------------------- 
    37  
     36   !!---------------------------------------------------------------------- 
     37   !! NEMO/OPA 3.5 , NEMO Consortium (2013) 
     38   !! $Id: $ 
     39   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     40   !!---------------------------------------------------------------------- 
    3841CONTAINS 
    3942    
    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     !!---------------------------------------------------------------------- 
     43   SUBROUTINE tide_init ( kt ) 
     44      !!---------------------------------------------------------------------- 
     45      !!                 ***  ROUTINE tide_init  *** 
     46      !!----------------------------------------------------------------------       
     47      INTEGER  :: ji, jk 
     48      INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
     49      CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 
     50      ! 
     51      NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 
     52      !!---------------------------------------------------------------------- 
    5153 
    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     
     54      IF( kt == nit000 ) THEN 
     55         ! 
     56         IF(lwp) THEN 
     57            WRITE(numout,*) 
     58            WRITE(numout,*) 'tide_init : Initialization of the tidal components' 
     59            WRITE(numout,*) '~~~~~~~~~ ' 
     60         ENDIF 
     61         ! 
     62         CALL tide_init_Wave 
     63         ! 
     64         clname(:)='' 
     65         ! 
     66         REWIND( numnam )            ! Read Namelist nam_tide 
     67         READ  ( numnam, nam_tide ) 
     68         ! 
     69         nb_harmo=0 
     70         DO jk = 1, jpmax_harmo 
     71            DO ji = 1,jpmax_harmo 
     72               IF( TRIM(clname(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1 
     73            END DO 
     74         END DO 
     75         ! 
     76         IF(lwp) THEN 
     77            WRITE(numout,*) '   Namelist nam_tide' 
     78            WRITE(numout,*) '      Apply astronomical potential : ln_tide_pot  =', ln_tide_pot 
     79            WRITE(numout,*) '                                     nb_harmo     = ', nb_harmo 
     80            WRITE(numout,*) '                                     ln_tide_ramp = ', ln_tide_ramp  
     81            WRITE(numout,*) '                                     rdttideramp  = ', rdttideramp 
     82         ENDIF 
     83         IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) )   & 
     84            &   CALL ctl_stop('rdttideramp must be lower than run duration') 
     85         IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 
     86            &   CALL ctl_stop('rdttideramp must be positive') 
     87         ! 
     88         IF( .NOT. lk_dynspg_ts )   CALL ctl_warn( 'sbc_tide : use of time splitting is recommended' ) 
     89         ! 
     90         ALLOCATE( ntide(nb_harmo) ) 
     91         DO jk = 1, nb_harmo 
     92            DO ji = 1, jpmax_harmo 
     93               IF( TRIM(clname(jk)) .eq. Wave(ji)%cname_tide ) THEN 
     94                  ntide(jk) = ji 
     95                  EXIT 
     96               END IF 
     97            END DO 
     98         END DO 
     99         ! 
     100         ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   & 
     101            &      utide     (nb_harmo), ftide     (nb_harmo)  ) 
     102         kt_tide = kt 
     103         ! 
     104      ENDIF 
     105      ! 
     106      IF( nsec_day == NINT(0.5 * rdttra(1)) ) THEN 
     107         ! 
     108         CALL tide_harmo( omega_tide, v0tide, utide, ftide, ntide, nb_harmo ) 
     109         ! 
     110         kt_tide = kt 
     111         ! 
     112         IF(lwp) THEN 
     113            WRITE(numout,*) 
     114            WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=', kt 
     115            WRITE(numout,*) '~~~~~~~~ ' 
     116            DO jk = 1, nb_harmo 
     117               WRITE(numout,*) Wave(ntide(jk))%cname_tide, utide(jk), ftide(jk), v0tide(jk), omega_tide(jk) 
     118            END DO 
     119         ENDIF 
     120         ! 
     121      ENDIF 
     122      ! 
     123   END SUBROUTINE tide_init 
     124      
     125   !!====================================================================== 
    126126END MODULE tideini 
Note: See TracChangeset for help on using the changeset viewer.