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 6808 for branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90 – NEMO

Ignore:
Timestamp:
2016-07-19T10:38:35+02:00 (8 years ago)
Author:
jamesharle
Message:

merge with trunk@6232 for consistency with SSB code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90

    r5215 r6808  
    66   !! History :  1.0  !  2007  (O. Le Galloudec)  Original code 
    77   !!---------------------------------------------------------------------- 
    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 
     8   USE oce            ! ocean dynamics and tracers variables 
     9   USE dom_oce        ! ocean space and time domain 
     10   USE phycst         ! physical constant 
     11   USE daymod         ! calandar 
     12   USE tide_mod       !  
    1413   ! 
    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) 
     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) 
    1918 
    2019   IMPLICIT NONE 
     
    2827   LOGICAL , PUBLIC ::   ln_tide_pot     !: 
    2928   LOGICAL , PUBLIC ::   ln_tide_ramp    !: 
    30    INTEGER , PUBLIC ::   nb_harmo                 !: 
    31    INTEGER , PUBLIC ::   kt_tide                  !: 
    32    REAL(wp), PUBLIC ::   rdttideramp              !: 
     29   INTEGER , PUBLIC ::   nb_harmo        !: 
     30   INTEGER , PUBLIC ::   kt_tide         !: 
     31   REAL(wp), PUBLIC ::   rdttideramp     !: 
    3332    
    3433   INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !: 
     
    4140CONTAINS 
    4241    
    43   SUBROUTINE tide_init ( kt ) 
    44     !!---------------------------------------------------------------------- 
    45     !!                 ***  ROUTINE tide_init  *** 
    46     !!----------------------------------------------------------------------       
    47     !! * Local declarations 
    48     INTEGER  :: ji, jk 
    49     INTEGER, INTENT( in ) ::   kt     ! ocean time-step 
    50     CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 
    51     INTEGER  ::   ios                 ! Local integer output status for namelist read 
    52     ! 
    53     NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 
    54     !!---------------------------------------------------------------------- 
    55  
    56     IF ( kt == nit000 ) THEN 
    57        ! 
    58        IF(lwp) THEN 
    59           WRITE(numout,*) 
    60           WRITE(numout,*) 'tide_init : Initialization of the tidal components' 
    61           WRITE(numout,*) '~~~~~~~~~ ' 
    62        ENDIF 
    63        ! 
    64        CALL tide_init_Wave 
    65        ! 
    66        ! Read Namelist nam_tide 
    67        REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides 
    68        READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901) 
    69 901    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp ) 
    70  
    71        REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides 
    72        READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 ) 
    73 902    IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp ) 
    74        IF(lwm) WRITE ( numond, nam_tide ) 
    75        ! 
    76        nb_harmo=0 
    77        DO jk = 1, jpmax_harmo 
    78           DO ji = 1,jpmax_harmo 
    79              IF( TRIM(clname(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1 
    80           END DO 
    81        END DO 
    82        !        
    83        ! Ensure that tidal components have been set in namelist_cfg 
    84        IF( nb_harmo .EQ. 0 ) CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' ) 
    85        ! 
    86        IF(lwp) THEN 
    87           WRITE(numout,*) '   Namelist nam_tide' 
    88           WRITE(numout,*) '      Apply astronomical potential : ln_tide_pot  =', ln_tide_pot 
    89           WRITE(numout,*) '                                     nb_harmo     = ', nb_harmo 
    90           WRITE(numout,*) '                                     ln_tide_ramp = ', ln_tide_ramp  
    91           WRITE(numout,*) '                                     rdttideramp  = ', rdttideramp 
    92        ENDIF 
    93        IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) )   & 
    94           &   CALL ctl_stop('rdttideramp must be lower than run duration') 
    95        IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 
    96           &   CALL ctl_stop('rdttideramp must be positive') 
    97        ! 
    98        IF( .NOT. lk_dynspg_ts )   CALL ctl_warn( 'sbc_tide : use of time splitting is recommended' ) 
    99        ! 
    100        ALLOCATE( ntide(nb_harmo) ) 
    101        DO jk = 1, nb_harmo 
    102           DO ji = 1, jpmax_harmo 
    103              IF( TRIM(clname(jk)) .eq. Wave(ji)%cname_tide ) THEN 
    104                 ntide(jk) = ji 
    105                 EXIT 
    106              END IF 
    107           END DO 
    108        END DO 
    109        ! 
    110        ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   & 
    111           &      utide     (nb_harmo), ftide     (nb_harmo)  ) 
    112        kt_tide = kt 
    113        ! 
     42   SUBROUTINE tide_init 
     43      !!---------------------------------------------------------------------- 
     44      !!                 ***  ROUTINE tide_init  *** 
     45      !!----------------------------------------------------------------------       
     46      INTEGER  :: ji, jk 
     47      CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 
     48      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     49      ! 
     50      NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 
     51      !!---------------------------------------------------------------------- 
     52      ! 
     53      IF(lwp) THEN 
     54         WRITE(numout,*) 
     55         WRITE(numout,*) 'tide_init : Initialization of the tidal components' 
     56         WRITE(numout,*) '~~~~~~~~~ ' 
    11457      ENDIF 
     58      ! 
     59      CALL tide_init_Wave 
     60      ! 
     61      ! Read Namelist nam_tide 
     62      REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides 
     63      READ  ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901) 
     64901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp ) 
     65      ! 
     66      REWIND( numnam_cfg )              ! Namelist nam_tide in configuration namelist : Tides 
     67      READ  ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 ) 
     68902   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp ) 
     69      IF(lwm) WRITE ( numond, nam_tide ) 
     70      ! 
     71      nb_harmo=0 
     72      DO jk = 1, jpmax_harmo 
     73         DO ji = 1,jpmax_harmo 
     74            IF( TRIM(clname(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1 
     75         END DO 
     76      END DO 
     77      !        
     78      ! Ensure that tidal components have been set in namelist_cfg 
     79      IF( nb_harmo == 0 )   CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' ) 
     80      ! 
     81      IF(lwp) THEN 
     82         WRITE(numout,*) '   Namelist nam_tide' 
     83         WRITE(numout,*) '      Apply astronomical potential : ln_tide_pot  =', ln_tide_pot 
     84         WRITE(numout,*) '                                     nb_harmo     = ', nb_harmo 
     85         WRITE(numout,*) '                                     ln_tide_ramp = ', ln_tide_ramp  
     86         WRITE(numout,*) '                                     rdttideramp  = ', rdttideramp 
     87      ENDIF 
     88      IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) )   & 
     89         &   CALL ctl_stop('rdttideramp must be lower than run duration') 
     90      IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 
     91         &   CALL ctl_stop('rdttideramp must be positive') 
     92      ! 
     93      ALLOCATE( ntide(nb_harmo) ) 
     94      DO jk = 1, nb_harmo 
     95         DO ji = 1, jpmax_harmo 
     96            IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) THEN 
     97               ntide(jk) = ji 
     98               EXIT 
     99            ENDIF 
     100         END DO 
     101      END DO 
     102      ! 
     103      ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   & 
     104         &      utide     (nb_harmo), ftide     (nb_harmo)  ) 
     105      kt_tide = nit000 
    115106      ! 
    116107   END SUBROUTINE tide_init 
Note: See TracChangeset for help on using the changeset viewer.