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 14166 – NEMO

Changeset 14166


Ignore:
Timestamp:
2020-12-13T20:36:10+01:00 (3 years ago)
Author:
dbyrne
Message:

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

Location:
NEMO/branches/NERC/NEMO_4.0.2_CO9_package_tides/src/OCE/SBC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/NERC/NEMO_4.0.2_CO9_package_tides/src/OCE/SBC/sbctide.F90

    r12658 r14166  
    1616   USE ioipsl         ! NetCDF IPSL library 
    1717   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     18 
     19   USE bdytides ! davbyr - Access to love number 
    1820 
    1921   IMPLICIT NONE 
     
    108110 
    109111      DO jk = 1, nb_harmo 
    110          zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk) 
     112         ! davbyr - Insert variable Love number where once was 0.7 
     113         zcons = dn_love_number * Wave(ntide(jk))%equitide * ftide(jk) 
     114         ! END davbyr 
    111115         DO ji = 1, jpi 
    112116            DO jj = 1, jpj 
     
    119123               IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
    120124               ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
     125               ! davbyr - Include long period tidal forcing 
     126               ELSEIF( Wave(ntide(jk))%nutide == 0 )  THEN  ;  zcs = zcons * (0.5_wp-1.5_wp*SIN(zlat)**2._wp) 
     127               ! END - davbyr 
    121128               ELSE                                         ;  zcs = 0._wp 
    122129               ENDIF 
  • NEMO/branches/NERC/NEMO_4.0.2_CO9_package_tides/src/OCE/SBC/tide.h90

    r14077 r14166  
    22   !! History :  3.2  !  2007  (O. Le Galloudec)  Original code 
    33   !!---------------------------------------------------------------------- 
    4  
     4   !! TIDES ADDED  ! 2017 (Nico Bruneau)  
     5   !! Following this document that seems to match implemented code  
     6   !!    https://docs.lib.noaa.gov/rescue/cgs_specpubs/QB275U35no981924.pdf 
     7   !! see page 189 for some proposed values 
     8   !! 
     9   !! The convention which seems to have been chosen is the Shureman one and  
     10   !! not the Cartwright and Tayer (1971) 
     11   !! This is probably due to the fact the Schureman has a solar calendar  
     12   !! while Cartwright and Tayer is based on a lunar calendar 
     13   !! 
     14   !! Therefore the coefficient are not the Doodson number but the one  
     15   !! defined by Schureman. For example : 
     16   !! M2 : Doodson   : 2  0 0 0 0 0 
     17   !!      Schureman : 2 -2 2 0 0 0 
     18   !! 
     19   !! Components 1-34 are for FES 2014 
     20   !! Components >= 35 are the one that were initially present in NEMO and not in FES14 
     21   !!                  keep in mind than equitide coefficient have been ajusted for the 
     22   !!                  34 FES 2014 constituents 
     23   !!  
     24   !! The different coefficient are as follows 
     25   !!   - nt   = T  = Number of Julian centuries (36625 days) from Greenwich mean noon on December 31, 1899. 
     26   !!               = Hour angle of mean sun 
     27   !!   - ns   = s  = mean longitude of the moon 
     28   !!   - nh   = h  = mean longitude of the sun 
     29   !!   - np   = p  = mean longitude of the lunar perigee 
     30   !!   - np1  = p1 = mean longitude of the solar perigee 
     31   !!   - shift appears in table as a bias in degree 
     32   !!   - nksi Coefficient for the longitude in moon's orbit of lunar intersection 
     33   !!   - nu0 Coefficient for the right ascension of lunar intersection 
     34   !!   - nu1 Coefficient for the term in argument of lunisolar constituent K1 
     35   !!   - nu2 Coefficient for the term in argument of lunisolar constituent K2 
     36   !!   - R = ???  
     37   !!   - Formula = Nodal factor function; see the table of Schureman. Implemented in tide_mod.F90  
     38   !!  
     39   !! The equitide parameter seems to be the equilibrium tide amplitude corrected 
     40   !! with the C_n^m coefficient: see Cartwright and Tayer (1971) equation 12  
     41   !! and Table 2 
     42   !! As an example in their Table 4c (p66), M2 (200000) has an amplitude of  
     43   !! around 0.63186 m 
     44   !! Table 2, give us a correction of m = 2, n = 2 (semi-diurnal) 
     45   !! 0.63186*3*sqrt( 5 / 96 / pi ) = 0.24407  
     46   !! very close to the one define originally here : 0.242297 
     47   !! Third order terms are neglected 
     48   !! 
     49   !! So to correct (to match what is implemented in sbctide.F90 - take care CT71 uses co-latitude): 
     50   !!    - long wave : Amplitude from CT71 * [ -1   * sqrt( 5 /  4 / pi ) ] 
     51   !!    - diurnal   : Amplitude from CT71 * [ -3/2 * sqrt( 5 / 24 / pi ) ] 
     52   !!    - semi-diur : Amplitude from CT71 * [  3   * sqrt( 5 / 96 / pi ) ] 
     53   !! 
     54   !! ATTENTION: convention seems to be to have a positive coefficient and a 180 shift to  
     55   !!            represent negative value. to be confirmed though. 
     56   !! 
     57   !! All equtide were computed using the last epocs from Cartwright and Tayer (1971) multiply by 
     58   !! the corresponding coefficient of their table 2 
     59   !!  
     60   !! nutide is used to compute tide potential - it uses a different formulation depending of nutide 
     61   !! see sbctide.F90 in function tide_init_potential 
     62   !! 
     63   !! Some random note 
     64   !! in cnes fes tool: 
     65   !!        Msf has nksi = 2 and nnu0 = -2 which is reverse from Schureman (I kept the Schureman one) 
     66   !! 
     67   !!---------------------------------------------------------------------- 
     68   ! 
    569   !             !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 
    670   !             !!           !          !        !    !    !    !    !     !       !      !      !      !      !   !         !! 
    7    Wave( 1) = tide(  'M2'     , 0.242297 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    8    Wave( 2) = tide(  'N2'     , 0.046313 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    9    Wave( 3) = tide( '2N2'     , 0.006184 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    10    Wave( 4) = tide(  'S2'     , 0.113572 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
    11    Wave( 5) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
    12    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    13    Wave( 6) = tide(  'K1'     , 0.142408 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
    14    Wave( 7) = tide(  'O1'     , 0.101266 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    15    Wave( 8) = tide(  'Q1'     , 0.019387 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    16    Wave( 9) = tide(  'P1'     , 0.047129 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
    17    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    18    Wave(10) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    1    ) 
    19    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    20    Wave(11) = tide(  'Mf'     , 0.042017 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    21    Wave(12) = tide(  'Mm'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
    22    Wave(13) = tide(  'Msqm'   , 0.000667 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    23    Wave(14) = tide(  'Mtm'    , 0.008049 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    24    !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    25    Wave(15) = tide(  'S1'     , 0.000000 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    )    
    26    Wave(16) = tide(  'MU2'    , 0.005841 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    ) 
    27    Wave(17) = tide(  'NU2'    , 0.009094 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    )  
    28    Wave(18) = tide(  'L2'     , 0.006694 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,  215    ) 
    29    Wave(19) = tide(  'T2'     , 0.006614 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
    3071   ! 
    31    !             !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 
    32    Wave(20) = tide(  'MNS2'   , 0.000000 ,    2   ,  2 , -5 ,  4 ,  1 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    6    ) 
    33    Wave(21) = tide(  'Lam2'   , 0.001760 ,    2   ,  2 , -1 ,  0 ,  1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,   78    ) 
    34    Wave(22) = tide(  'MSN2'   , 0.000000 ,    2   ,  2 ,  1 ,  0 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  2   , 0 ,    6    ) 
    35    Wave(23) = tide(  '2SM2'   , 0.000000 ,    2   ,  2 ,  2 , -2 ,  0 ,  0  ,    0  , -2   ,  2   ,  0   ,  0   , 0 ,   16    ) 
    36    Wave(24) = tide(  'MO3'    , 0.000000 ,    3   ,  3 , -4 ,  1 ,  0 ,  0  ,  +90  ,  2   , -2   ,  0   ,  0   , 0 ,   13    ) 
    37    Wave(25) = tide(  'MK3'    , 0.000000 ,    3   ,  3 , -2 ,  3 ,  0 ,  0  ,  -90  ,  2   , -2   , -1   ,  0   , 0 ,   10    ) 
    38    Wave(26) = tide(  'MN4'    , 0.000000 ,    4   ,  4 , -5 ,  4 ,  1 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    1    ) 
    39    Wave(27) = tide(  'MS4'    , 0.000000 ,    4   ,  4 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    2    ) 
    40    Wave(28) = tide(  'M6'     , 0.000000 ,    6   ,  6 , -6 ,  6 ,  0 ,  0  ,    0  ,  6   , -6   ,  0   ,  0   , 0 ,    4    ) 
    41    Wave(29) = tide(  '2MS6'   , 0.000000 ,    6   ,  6 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    6    ) 
    42    Wave(30) = tide(  '2MK6'   , 0.000000 ,    6   ,  6 , -4 ,  6 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   , -2   , 0 ,    5    ) 
    43    Wave(31) = tide(  '3M2S2'  , 0.000000 ,    2   , 2  , -6 ,  6 ,  0 ,  0  ,    0  ,  6   , -6   ,  0   ,  0   , 0 ,   12    ) 
     72   ! Long Period Tides 
     73   Wave( 1) = tide(  'SA'     , 0.003103 ,    0   ,  0 ,  0 ,  1 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     74   Wave( 2) = tide(  'SSA'    , 0.019523 ,    0   ,  0 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     75   Wave( 3) = tide(  'MM'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
     76   Wave( 4) = tide(  'MF'     , 0.042023 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     77   Wave( 5) = tide(  'MTM'    , 0.008042 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     78   Wave( 6) = tide(  'MSF'    , 0.003671 ,    0   ,  0 ,  2 , -2 ,  0 ,  0  ,    0  , -2   ,  2   ,  0   ,  0   , 0 ,   78    ) 
     79   Wave( 7) = tide(  'MSQM'   , 0.001293 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     80   ! 
     81   ! Diurnal Tides 
     82   Wave( 8) = tide(  'K1'     ,-0.142442 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
     83   Wave( 9) = tide(  'O1'     , 0.101277 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     84   Wave(10) = tide(  'Q1'     , 0.019383 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     85   Wave(11) = tide(  'P1'     , 0.047145 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     86   Wave(12) = tide(  'S1'     ,-0.001116 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     87   Wave(13) = tide(  'J1'     ,-0.007961 ,    1   ,  1 ,  1 ,  1 , -1 ,  0  ,  -90  ,  0   , -1   ,  0   ,  0   , 0 ,    76   ) 
     88   ! 
     89   ! Semi-Diurnal Tides 
     90   Wave(14) = tide(  'M2'     , 0.244083 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     91   Wave(15) = tide(  'N2'     , 0.046720 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     92   Wave(16) = tide(  'S2'     , 0.113565 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     93   Wave(17) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
     94   Wave(18) = tide(  'L2'     , 0.006903 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,   215   ) 
     95   Wave(19) = tide(  'T2'     , 0.006644 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     96   Wave(20) = tide(  'R2'     , 0.000950 ,    2   ,  2 ,  0 ,  1 ,  0 , -1  , +180  ,  2   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     97   ! 
     98   Wave(21) = tide(  'MU2'    , 0.007451 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     99   Wave(22) = tide(  'NU2'    , 0.008873 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     100   Wave(23) = tide( '2N2'     , 0.006176 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     101   Wave(24) = tide(  'MKS2'   , 0.000000 ,    2   ,  2 , -2 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   , -2   , 0 ,     4   ) 
     102   Wave(25) = tide(  'LA2'    , 0.001800 ,    2   ,  2 , -1 ,  0 ,  1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     103   Wave(26) = tide(  'EPS2'   , 0.001796 ,    2   ,  2 , -5 ,  4 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     104   ! 
     105   ! Harmonic and others 
     106   Wave(27) = tide(  'M3'     , 0.000000 ,    3   ,  3 , -3 ,  3 ,  0 ,  0  ,    0  ,  3   , -3   ,  0   ,  0   , 0 ,   149   ) 
     107   Wave(28) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     108   Wave(29) = tide(  'M6'     , 0.000000 ,    6   ,  6 , -6 ,  6 ,  0 ,  0  ,    0  ,  6   , -6   ,  0   ,  0   , 0 ,    18   ) 
     109   Wave(30) = tide(  'M8'     , 0.000000 ,    8   ,  8 , -8 ,  8 ,  0 ,  0  ,    0  ,  8   , -8   ,  0   ,  0   , 0 ,    20   ) 
     110   Wave(31) = tide(  'N4'     , 0.000000 ,    4   ,  4 , -6 ,  4 ,  2 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     111   Wave(32) = tide(  'S4'     , 0.000000 ,    4   ,  4 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     112   Wave(33) = tide(  'MN4'    , 0.000000 ,    4   ,  4 , -5 ,  4 ,  1 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,     1   ) 
     113   Wave(34) = tide(  'MS4'    , 0.000000 ,    4   ,  4 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     114   !  
  • NEMO/branches/NERC/NEMO_4.0.2_CO9_package_tides/src/OCE/SBC/tide_mod.F90

    r14077 r14166  
    1616   PUBLIC   tide_init_Wave   ! called by tideini and diaharm modules 
    1717 
    18    INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 31   !: maximum number of harmonic 
     18   ! davbyr: increase maximum number of harmonics from 19 to 34 
     19   INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 34   !: maximum number of harmonic 
    1920 
    2021   TYPE, PUBLIC ::    tide 
     
    331332         zf = zf * zf1 * zf1 
    332333         ! 
     334          
     335      !--- davbyr 11/2017 
     336      CASE( 20 )                 !==  formule 20,  compound waves ( 78 x 78 x 78 x 78 ) 
     337         zf1 = nodal_factort(78) 
     338         zf  = zf1 * zf1 * zf1 * zf1 
     339      !--- END davbyr 
    333340      CASE( 73 )                 !==  formule 73 
    334341         zs = sin(sh_I) 
  • NEMO/branches/NERC/NEMO_4.0.2_CO9_package_tides/src/OCE/SBC/tideini.F90

    r12658 r14166  
    3434   REAL(wp), PUBLIC ::   rdttideramp     !: 
    3535   REAL(wp), PUBLIC ::   rn_scal_load    !: 
     36   ! davbyr - read love number from namelist 
     37   REAL(wp), PUBLIC ::   dn_love_number  !: 
     38   ! END davbyr 
    3639   CHARACTER(lc), PUBLIC ::   cn_tide_load   !:  
    3740 
     
    5457      ! 
    5558      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 
     59                  &     ln_tide_ramp, rn_scal_load, rdttideramp, dn_love_number, clname 
    5760      !!---------------------------------------------------------------------- 
    5861      ! 
     
    8083            WRITE(numout,*) '         Fraction of SSH used in scal. approx.   rn_scal_load = ', rn_scal_load 
    8184            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 
    8287         ENDIF 
    8388      ELSE 
Note: See TracChangeset for help on using the changeset viewer.