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 3876 for branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

Ignore:
Timestamp:
2013-04-19T08:48:21+02:00 (11 years ago)
Author:
gm
Message:

dev_r3858_CNRS3_Ediag: #927 phasing with 2011/dev_r3309_LOCEAN12_Ediag branche + mxl diag update

Location:
branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r3625 r3876  
    1818   !!            3.3  ! 2010-05  (C. Ethe, G. Madec)  merge TRC-TRA 
    1919   !!             -   ! 2010-10  (G. Nurser, G. Madec)  add eos_alpbet used in ldfslp 
     20   !!            3.5  ! 2012-03  (F. Roquet, G. Madec)  add pen_ddt_dds used in trdpen 
     21   !!             -   ! 2012-05  (F. Roquet)  add Vallis and original JM95 equation of state 
     22   !!             -   ! 2012-05  (F. Roquet)  add eos_alpha_beta 
    2023   !!---------------------------------------------------------------------- 
    2124 
     
    2831   !!   eos_bn2        : Compute the Brunt-Vaisala frequency 
    2932   !!   eos_alpbet     : calculates the in situ thermal/haline expansion ratio 
     33   !!   eos_expansion_ratio : calculates the partial derivative of in situ density with respect to T and S 
    3034   !!   tfreez         : Compute the surface freezing temperature 
    3135   !!   eos_init       : set eos parameters (namelist) 
     
    5155   END INTERFACE 
    5256 
    53    PUBLIC   eos        ! called by step, istate, tranpc and zpsgrd modules 
    54    PUBLIC   eos_init   ! called by istate module 
    55    PUBLIC   bn2        ! called by step module 
    56    PUBLIC   eos_alpbet ! called by ldfslp module 
    57    PUBLIC   tfreez     ! called by sbcice_... modules 
     57   PUBLIC   eos            ! called by step, istate, tranpc and zpsgrd modules 
     58   PUBLIC   eos_init       ! called by istate module 
     59   PUBLIC   bn2            ! called by step module 
     60   PUBLIC   eos_alpbet     ! called by ldfslp module 
     61   PUBLIC   eos_alpha_beta ! used for density diagnostics in dyntra 
     62   PUBLIC   eos_pen        ! used for pe diagnostics in trdpen 
     63   PUBLIC   tfreez         ! called by sbcice_... modules 
    5864 
    5965   !                                          !!* Namelist (nameos) * 
    60    INTEGER , PUBLIC ::   nn_eos   = 0         !: = 0/1/2 type of eq. of state and Brunt-Vaisala frequ. 
     66   INTEGER , PUBLIC ::   nn_eos   = 0         !: = -1/0/1/2/3 type of eq. of state and associated Brunt-Vaisala frequ. 
    6167   REAL(wp), PUBLIC ::   rn_alpha = 2.0e-4_wp !: thermal expension coeff. (linear equation of state) 
    6268   REAL(wp), PUBLIC ::   rn_beta  = 7.7e-4_wp !: saline  expension coeff. (linear equation of state) 
    6369 
    64    REAL(wp), PUBLIC ::   ralpbet              !: alpha / beta ratio 
     70   REAL(wp) ::   vallis_ratio = 0   ! 1027/rau0 
     71   REAL(wp) ::   vallis_diff  = 0   ! (1027-rau0)/rau0 
    6572 
    6673   !! * Substitutions 
     
    8289      !!       defined through the namelist parameter nn_eos. 
    8390      !! 
    84       !! ** Method  :   3 cases: 
    85       !!      nn_eos = 0 : Jackett and McDougall (1994) equation of state. 
     91      !! ** Method  :   5 cases: 
     92      !!      nn_eos = -1 : Jackett and McDougall (1995) equation of state. 
     93      !!         Check value: rho = 1041.83267 kg/m**3 for p=3000 dbar, 
     94      !!          t = 3 deg celcius, s=35.5 psu 
     95      !!      nn_eos = 0 : standard NEMO equation of state, based on  
     96      !!         Jackett and McDougall (1995) equation of state. 
    8697      !!         the in situ density is computed directly as a function of 
    8798      !!         potential temperature relative to the surface (the opa t 
     
    103114      !!               salinity 
    104115      !!              prd(t,s) = rn_beta * s - rn_alpha * tn - 1. 
     116      !!      nn_eos = 3 : Vallis simplified equation of state (Vallis book, 2006) 
     117      !!              prd(t,s,p) =  ( rho(t,s,p) - rau0 ) / rau0 
     118      !!              where the pressure p in decibars is approximated by the depth in meters. 
    105119      !!      Note that no boundary condition problem occurs in this routine 
    106120      !!      as pts are defined over the whole domain. 
     
    108122      !! ** Action  :   compute prd , the in situ density (no units) 
    109123      !! 
    110       !! References :   Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 
    111       !!---------------------------------------------------------------------- 
    112       !! 
     124      !! References :   Vallis, Atmospheric and Oceanic Fluid Dynamics, 2006 
     125      !!                Jackett and McDougall, J. Atmos. Ocean. Tech., 1995 
     126      !!---------------------------------------------------------------------- 
    113127      REAL(wp), DIMENSION(:,:,:,:), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    114128      !                                                      ! 2 : salinity               [psu] 
    115129      REAL(wp), DIMENSION(:,:,:)  , INTENT(  out) ::   prd   ! in situ density            [-] 
    116       !! 
     130      ! 
    117131      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    118132      REAL(wp) ::   zt , zs , zh , zsr   ! local scalars 
     
    123137      REAL(wp), POINTER, DIMENSION(:,:,:) :: zws 
    124138      !!---------------------------------------------------------------------- 
    125  
    126139      ! 
    127140      IF( nn_timing == 1 ) CALL timing_start('eos') 
     
    131144      SELECT CASE( nn_eos ) 
    132145      ! 
    133       CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     146      CASE( -1 )                !==  Jackett and McDougall (1995) formulation  ==! 
     147         ! 
    134148!CDIR NOVERRCHK 
    135149         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     
    156170                  ! 
    157171                  ! add the compression terms 
     172                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     173                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     174                  zb = zbw + ze * zs 
     175                  ! 
     176                  zd = -1.480266e-4_wp 
     177                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     178                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     179                  za = ( zd*zsr + zc ) *zs + zaw 
     180                  ! 
     181                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     182                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     183                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     184                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     185                  ! 
     186                  ! masked in situ density anomaly. Important: rau0=1035, should be 1027! 
     187                  prd(ji,jj,jk) = (  zrhop / (  1.0_wp - zh / ( zk0 - zh * ( za - zh * zb ) )  )    & 
     188                     &             - rau0  ) * r1_rau0 * tmask(ji,jj,jk) 
     189               END DO 
     190            END DO 
     191         END DO 
     192         ! 
     193      CASE( 0 )                !==  modified Jackett and McDougall (1995) formulation  ==! 
     194         ! 
     195!CDIR NOVERRCHK 
     196         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     197         ! 
     198         DO jk = 1, jpkm1 
     199            DO jj = 1, jpj 
     200               DO ji = 1, jpi 
     201                  zt = pts   (ji,jj,jk,jp_tem) 
     202                  zs = pts   (ji,jj,jk,jp_sal) 
     203                  zh = fsdept(ji,jj,jk)        ! depth 
     204                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     205                  ! 
     206                  ! compute volumic mass pure water at atm pressure 
     207                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     208                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     209                  ! seawater volumic mass atm pressure 
     210                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     211                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     212                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     213                  zr4= 4.8314e-4_wp 
     214                  ! 
     215                  ! potential volumic mass (reference to the surface) 
     216                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     217                  ! 
     218                  ! add the compression terms 
    158219                  ze = ( -3.508914e-8_wp*zt-1.248266e-8_wp ) *zt-2.595994e-6_wp 
    159220                  zbw= (  1.296821e-6_wp*zt-5.782165e-9_wp ) *zt+1.045941e-4_wp 
     
    187248         END DO 
    188249         ! 
     250      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     251         DO jk = 1, jpkm1 
     252            DO jj = 1, jpj 
     253               DO ji = 1, jpi 
     254                  zt = pts   (ji,jj,jk,jp_tem) - 10._wp 
     255                  zs = pts   (ji,jj,jk,jp_sal) - 35._wp 
     256                  zh = fsdept(ji,jj,jk)        ! depth 
     257                  ! masked in situ density anomaly 
     258                  prd(ji,jj,jk) = vallis_diff + vallis_ratio * (                                             & 
     259                     &   -(1.67e-4_wp*(1._wp+1.1e-4_wp*zh)+0.5e-5_wp*zt)*zt + 0.78e-3_wp*zs + 4.39e-6_wp*zh  & 
     260                     &   ) * tmask(ji,jj,jk) 
     261               END DO 
     262            END DO 
     263         END DO 
     264         ! 
    189265      END SELECT 
    190266      ! 
     
    207283      !!     namelist parameter nn_eos. 
    208284      !! 
    209       !! ** Method  : 
    210       !!      nn_eos = 0 : Jackett and McDougall (1994) equation of state. 
     285      !! ** Method  :   5 cases: 
     286      !!      nn_eos = -1 : Jackett and McDougall (1995) equation of state. 
     287      !!      nn_eos = 0 : standard NEMO equation of state, based on  
     288      !!         Jackett and McDougall (1995) equation of state. 
    211289      !!         the in situ density is computed directly as a function of 
    212290      !!         potential temperature relative to the surface (the opa t 
     
    235313      !!                       = rn_beta * s - rn_alpha * tn - 1. 
    236314      !!              rhop(t,s)  = rho(t,s) 
     315      !!      nn_eos = 3 : Vallis simplified equation of state (Vallis book, 2006) 
     316      !!              prd(t,s,p) = ( rho(t,s,p) - rau0 ) / rau0 
     317      !!              rhop(t,s)  = rho(t,s,0) 
    237318      !!      Note that no boundary condition problem occurs in this routine 
    238319      !!      as (tn,sn) or (ta,sa) are defined over the whole domain. 
     
    241322      !!              - prhop, the potential volumic mass (Kg/m3) 
    242323      !! 
    243       !! References :   Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 
     324      !! References :   Vallis, Atmospheric and Oceanic Fluid Dynamics, 2006 
     325      !!                Jackett and McDougall, J. Atmos. Ocean. Tech., 1995 
    244326      !!                Brown and Campana, Mon. Weather Rev., 1978 
    245327      !!---------------------------------------------------------------------- 
     
    262344      SELECT CASE ( nn_eos ) 
    263345      ! 
    264       CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     346      CASE( -1 )                !==  Jackett and McDougall (1995) formulation  ==! 
    265347!CDIR NOVERRCHK 
    266348         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     
    290372                  ! 
    291373                  ! add the compression terms 
     374                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     375                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     376                  zb = zbw + ze * zs 
     377                  ! 
     378                  zd = -1.480266e-4_wp 
     379                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     380                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     381                  za = ( zd*zsr + zc ) *zs + zaw 
     382                  ! 
     383                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     384                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     385                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     386                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     387                  ! 
     388                  ! masked in situ density anomaly 
     389                  prd(ji,jj,jk) = (  zrhop / (  1.0_wp - zh / ( zk0 - zh * ( za - zh * zb ) )  )    & 
     390                     &             - rau0  ) * r1_rau0 * tmask(ji,jj,jk) 
     391               END DO 
     392            END DO 
     393         END DO 
     394         ! 
     395      CASE( 0 )                !==  modified Jackett and McDougall (1995) formulation  ==! 
     396!CDIR NOVERRCHK 
     397         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     398         ! 
     399         DO jk = 1, jpkm1 
     400            DO jj = 1, jpj 
     401               DO ji = 1, jpi 
     402                  zt = pts   (ji,jj,jk,jp_tem) 
     403                  zs = pts   (ji,jj,jk,jp_sal) 
     404                  zh = fsdept(ji,jj,jk)        ! depth 
     405                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     406                  ! 
     407                  ! compute volumic mass pure water at atm pressure 
     408                  zr1= ( ( ( ( 6.536332e-9_wp*zt-1.120083e-6_wp )*zt+1.001685e-4_wp )*zt   & 
     409                     &                          -9.095290e-3_wp )*zt+6.793952e-2_wp )*zt+999.842594_wp 
     410                  ! seawater volumic mass atm pressure 
     411                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt   & 
     412                     &                                         -4.0899e-3_wp ) *zt+0.824493_wp 
     413                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     414                  zr4= 4.8314e-4_wp 
     415                  ! 
     416                  ! potential volumic mass (reference to the surface) 
     417                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     418                  ! 
     419                  ! save potential volumic mass 
     420                  prhop(ji,jj,jk) = zrhop * tmask(ji,jj,jk) 
     421                  ! 
     422                  ! add the compression terms 
    292423                  ze = ( -3.508914e-8_wp*zt-1.248266e-8_wp ) *zt-2.595994e-6_wp 
    293424                  zbw= (  1.296821e-6_wp*zt-5.782165e-9_wp ) *zt+1.045941e-4_wp 
     
    323454         END DO 
    324455         ! 
     456      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     457         DO jk = 1, jpkm1 
     458            DO jj = 1, jpj 
     459               DO ji = 1, jpi 
     460                  zt = pts   (ji,jj,jk,jp_tem) - 10._wp 
     461                  zs = pts   (ji,jj,jk,jp_sal) - 35._wp 
     462                  zh = fsdept(ji,jj,jk)        ! depth 
     463                  ! masked in situ density anomaly 
     464                  prd(ji,jj,jk) = vallis_diff + vallis_ratio * (                                             & 
     465                     &   -(1.67e-4_wp*(1._wp+1.1e-4_wp*zh)+0.5e-5_wp*zt)*zt + 0.78e-3_wp*zs + 4.39e-6_wp*zh  & 
     466                     &   ) * tmask(ji,jj,jk) 
     467                  ! masked in situ density anomaly 
     468                 prhop(ji,jj,jk) = ( 1.0_wp - ( 1.67e-4_wp + 0.5e-5_wp*zt ) *zt + 0.78e-3_wp *zs )   & 
     469                     &              * 1027._wp * tmask(ji,jj,jk) 
     470                 ! 
     471               END DO 
     472            END DO 
     473         END DO 
     474         ! 
    325475      END SELECT 
    326476      ! 
     
    342492      !!      defined through the namelist parameter nn_eos. * 2D field case 
    343493      !! 
    344       !! ** Method : 
    345       !!      nn_eos = 0 : Jackett and McDougall (1994) equation of state. 
     494      !! ** Method  :   5 cases: 
     495      !!      nn_eos = -1 : Jackett and McDougall (1995) equation of state. 
     496      !!      nn_eos = 0 : standard NEMO equation of state, based on  
     497      !!         Jackett and McDougall (1995) equation of state. 
    346498      !!         the in situ density is computed directly as a function of 
    347499      !!         potential temperature relative to the surface (the opa t 
     
    363515      !!               salinity 
    364516      !!              prd(t,s) = rn_beta * s - rn_alpha * tn - 1. 
     517      !!      nn_eos = 3 : Vallis simplified equation of state (Vallis book, 2006) 
     518      !!              prd(t,s,p) =  ( rho(t,s,p) - rau0 ) / rau0 
     519      !!              where the pressure p in decibars is approximated by the depth in meters. 
    365520      !!      Note that no boundary condition problem occurs in this routine 
    366521      !!      as pts are defined over the whole domain. 
     
    368523      !! ** Action  : - prd , the in situ density (no units) 
    369524      !! 
    370       !! References :   Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 
     525      !! References :   Vallis, Atmospheric and Oceanic Fluid Dynamics, 2006 
     526      !!                Jackett and McDougall, J. Atmos. Ocean. Tech., 1995 
    371527      !!---------------------------------------------------------------------- 
    372528      !! 
     
    391547      SELECT CASE( nn_eos ) 
    392548      ! 
    393       CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     549      CASE( -1 )                !==  Jackett and McDougall (1995) formulation  ==! 
    394550      ! 
    395551!CDIR NOVERRCHK 
     
    403559            DO ji = 1, fs_jpim1   ! vector opt. 
    404560               zmask = tmask(ji,jj,1)          ! land/sea bottom mask = surf. mask 
    405                zt    = pts  (ji,jj,jp_tem)            ! interpolated T 
    406                zs    = pts  (ji,jj,jp_sal)            ! interpolated S 
     561               zt    = pts  (ji,jj,jp_tem)     ! interpolated T 
     562               zs    = pts  (ji,jj,jp_sal)     ! interpolated S 
     563               zsr   = zws  (ji,jj)            ! square root of interpolated S 
     564               zh    = pdep (ji,jj)            ! depth at the partial step level 
     565               ! 
     566               ! compute volumic mass pure water at atm pressure 
     567               zr1 = ( ( ( ( 6.536332e-9_wp*zt-1.120083e-6_wp )*zt+1.001685e-4_wp )*zt   & 
     568                  &                        -9.095290e-3_wp )*zt+6.793952e-2_wp )*zt+999.842594_wp 
     569               ! seawater volumic mass atm pressure 
     570               zr2 = ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp )*zt+7.6438e-5_wp ) *zt   & 
     571                  &                                   -4.0899e-3_wp ) *zt+0.824493_wp 
     572               zr3 = ( -1.6546e-6_wp*zt+1.0227e-4_wp ) *zt-5.72466e-3_wp 
     573               zr4 = 4.8314e-4_wp 
     574               ! 
     575               ! potential volumic mass (reference to the surface) 
     576               zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     577               ! 
     578               ! add the compression terms 
     579               ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     580               zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     581               zb = zbw + ze * zs 
     582               ! 
     583               zd = -1.480266e-4_wp 
     584               zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     585               zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     586               za = ( zd*zsr + zc ) *zs + zaw 
     587               ! 
     588               zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     589               za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     590               zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     591               zk0= ( zb1*zsr + za1 )*zs + zkw 
     592               ! 
     593               ! masked in situ density anomaly 
     594               prd(ji,jj) = ( zrhop / (  1.0_wp - zh / ( zk0 - zh * ( za - zh * zb ) )  ) - rau0 ) / rau0 * zmask 
     595            END DO 
     596         END DO 
     597         ! 
     598      CASE( 0 )                !==  modified Jackett and McDougall (1995) formulation  ==! 
     599      ! 
     600!CDIR NOVERRCHK 
     601         DO jj = 1, jpjm1 
     602!CDIR NOVERRCHK 
     603            DO ji = 1, fs_jpim1   ! vector opt. 
     604               zws(ji,jj) = SQRT( ABS( pts(ji,jj,jp_sal) ) ) 
     605            END DO 
     606         END DO 
     607         DO jj = 1, jpjm1 
     608            DO ji = 1, fs_jpim1   ! vector opt. 
     609               zmask = tmask(ji,jj,1)          ! land/sea bottom mask = surf. mask 
     610               zt    = pts  (ji,jj,jp_tem)     ! interpolated T 
     611               zs    = pts  (ji,jj,jp_sal)     ! interpolated S 
    407612               zsr   = zws  (ji,jj)            ! square root of interpolated S 
    408613               zh    = pdep (ji,jj)            ! depth at the partial step level 
     
    455660         END DO 
    456661         ! 
     662      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     663         DO jj = 1, jpjm1 
     664            DO ji = 1, fs_jpim1   ! vector opt. 
     665               zmask = tmask(ji,jj,1)          ! land/sea bottom mask = surf. mask 
     666               zt    = pts  (ji,jj,jp_tem) - 10._wp   ! interpolated T 
     667               zs    = pts  (ji,jj,jp_sal) - 35._wp   ! interpolated S 
     668               zh    = pdep (ji,jj)            ! depth at the partial step level 
     669               ! masked in situ density anomaly 
     670               prd(ji,jj) = vallis_diff + vallis_ratio * (                                                & 
     671                  &   -(1.67e-4_wp*(1._wp+1.1e-4_wp*zh)+0.5e-5_wp*zt)*zt + 0.78e-3_wp*zs + 4.39e-6_wp*zh  & 
     672                  &   ) * zmask 
     673               ! 
     674            END DO 
     675         END DO 
     676         ! 
    457677      END SELECT 
    458678 
     
    473693      !!      step of the input arguments 
    474694      !! 
    475       !! ** Method : 
    476       !!       * nn_eos = 0  : UNESCO sea water properties 
    477       !!         The brunt-vaisala frequency is computed using the polynomial 
    478       !!      polynomial expression of McDougall (1987): 
     695      !! ** Method  :   5 cases: 
     696      !!       * nn_eos = -1  : The brunt-vaisala frequency is computed for 
     697      !!       the Jackett and McDougall (1995) equation of state: 
    479698      !!            N^2 = grav * beta * ( alpha/beta*dk[ t ] - dk[ s ] )/e3w 
     699      !!      If lk_zdfddm=T, the heat/salt buoyancy flux ratio Rrau is 
     700      !!      computed and used in zdfddm module : 
     701      !!              Rrau = alpha/beta * ( dk[ t ] / dk[ s ] ) 
     702      !!       * nn_eos = 0  : The brunt-vaisala frequency is based on the 
     703      !!            formulation of McDougall (1987). 
    480704      !!      If lk_zdfddm=T, the heat/salt buoyancy flux ratio Rrau is 
    481705      !!      computed and used in zdfddm module : 
     
    494718      !! ** Action  : - pn2 : the brunt-vaisala frequency 
    495719      !! 
    496       !! References :   McDougall, J. Phys. Oceanogr., 17, 1950-1964, 1987. 
     720      !! References :   Vallis, Atmospheric and Oceanic Fluid Dynamics, 2006 
     721      !!                Jackett and McDougall, J. Atmos. Ocean. Tech., 1995 
     722      !!                McDougall, J. Phys. Oceano., 1987 
    497723      !!---------------------------------------------------------------------- 
    498724      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
     
    501727      !! 
    502728      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    503       REAL(wp) ::   zgde3w, zt, zs, zh, zalbet, zbeta   ! local scalars 
     729      REAL(wp) ::   zgde3w, zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop      ! local scalars 
     730      REAL(wp) ::   ze, zbw, zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zM    !   -      - 
     731      REAL(wp) ::   zDenom, zrho, zdzk0, zdza, zdzb, zdrhop, zdM, zdDenom   !   -      - 
     732      REAL(wp) ::   zalpbet, zalpha, zbeta                                  !   -      - 
    504733#if defined key_zdfddm 
    505734      REAL(wp) ::   zds   ! local scalars 
    506735#endif 
     736      REAL(wp), POINTER, DIMENSION(:,:,:) :: zws 
    507737      !!---------------------------------------------------------------------- 
    508738 
    509739      ! 
    510740      IF( nn_timing == 1 ) CALL timing_start('bn2') 
     741      ! 
     742      CALL wrk_alloc( jpi, jpj, jpk, zws ) 
    511743      ! 
    512744      ! pn2 : interior points only (2=< jk =< jpkm1 ) 
     
    515747      SELECT CASE( nn_eos ) 
    516748      ! 
    517       CASE( 0 )                !==  Jackett and McDougall (1994) formulation  ==! 
     749      CASE( -1 )                !==  Jackett and McDougall (1995)  ==! 
     750         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     751         DO jk = 2, jpkm1 
     752            DO jj = 1, jpj 
     753               DO ji = 1, jpi 
     754                  zgde3w = grav / fse3w(ji,jj,jk) 
     755                  zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) )         ! potential temperature at w-pt 
     756                  zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) )         ! salinity at w-pt 
     757                  zsr = 0.5 * ( zws(ji,jj,jk) + zws(ji,jj,jk-1) )        ! square root of S at w-pt 
     758                  zh = fsdepw(ji,jj,jk)                                                ! depth in meters  at w-point 
     759                  ! 
     760                  ! compute volumic mass pure water at atm pressure 
     761                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     762                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     763                  ! seawater volumic mass atm pressure 
     764                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     765                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     766                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     767                  zr4= 4.8314e-4_wp 
     768                  ! 
     769                  ! potential volumic mass (reference to the surface) 
     770                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     771                  ! 
     772                  ! add the compression terms 
     773                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     774                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     775                  zb = zbw + ze * zs 
     776                  ! 
     777                  zd = -1.480266e-4_wp 
     778                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     779                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     780                  za = ( zd*zsr + zc ) *zs + zaw 
     781                  ! 
     782                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     783                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     784                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     785                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     786                  ! 
     787                  zM= ( zb*zh - za )*zh + zk0 
     788                  zDenom= 1._wp - zh / zM 
     789                  ! compute in-situ density 
     790                  zrho = zrhop/zDenom 
     791              ! alpha 
     792                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     793                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     794                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     795                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     796                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     797                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     798                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     799                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     800                  zdDenom = zh * zdM / (zM*zM) 
     801                  zalpha = - ( zdrhop - zrho*zdDenom ) / zDenom / rau0 
     802                  ! beta 
     803                  zdzb  = ze 
     804                  zdza  = -3.0644505e-2_wp*zsr+zc 
     805                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     806                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     807                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     808                  zdDenom = zh * zdM / (zM*zM) 
     809                  zbeta =   ( zdrhop - zrho*zdDenom ) / zDenom / rau0 
     810                  ! alpha/beta 
     811                  zalpbet = zalpha / zbeta 
     812                  ! N2 
     813                  pn2(ji,jj,jk) = zgde3w * zbeta * tmask(ji,jj,jk)           &   ! N^2 
     814                     &          * ( zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )   & 
     815                     &                     - ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) ) ) 
     816#if defined key_zdfddm 
     817                  !                                                         !!bug **** caution a traiter zds=dk[S]= 0 !!!! 
     818                  zds = ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )                    ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
     819                  IF ( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 
     820                  rrau(ji,jj,jk) = zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
     821#endif 
     822               END DO 
     823            END DO 
     824         END DO 
     825         ! 
     826      CASE( 0 )                !==  McDougall (1987) formulation  ==! 
    518827         DO jk = 2, jpkm1 
    519828            DO jj = 1, jpj 
     
    524833                  zh = fsdepw(ji,jj,jk)                                                ! depth in meters  at w-point 
    525834                  ! 
    526                   zalbet = ( ( ( - 0.255019e-07_wp * zt + 0.298357e-05_wp ) * zt   &   ! ratio alpha/beta 
     835                  zalpbet = ( ( ( - 0.255019e-07_wp * zt + 0.298357e-05_wp ) * zt  &   ! ratio alpha/beta 
    527836                     &                                  - 0.203814e-03_wp ) * zt   & 
    528837                     &                                  + 0.170907e-01_wp ) * zt   & 
     
    550859                     ! 
    551860                  pn2(ji,jj,jk) = zgde3w * zbeta * tmask(ji,jj,jk)           &   ! N^2 
    552                      &          * ( zalbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )   & 
     861                     &          * ( zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )   & 
    553862                     &                     - ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) ) ) 
    554863#if defined key_zdfddm 
     
    556865                  zds = ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )                    ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
    557866                  IF ( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 
    558                   rrau(ji,jj,jk) = zalbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
     867                  rrau(ji,jj,jk) = zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
    559868#endif 
    560869               END DO 
     
    564873      CASE( 1 )                !==  Linear formulation = F( temperature )  ==! 
    565874         DO jk = 2, jpkm1 
    566             pn2(:,:,jk) = grav * rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 
     875            pn2(:,:,jk) = grav * rn_alpha * ( pts(:,:,jk-1,jp_tem) - pts(:,:,jk,jp_tem) )        & 
     876              &                / fse3w(:,:,jk) * tmask(:,:,jk) 
    567877         END DO 
    568878         ! 
     
    579889                  zds = ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) ) 
    580890                  IF ( ABS( zds ) <= 1.e-20_wp ) zds = 1.e-20_wp 
    581                   rrau(ji,jj,jk) = ralpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
     891                  rrau(ji,jj,jk) = rn_alpha / rn_beta * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
    582892               END DO 
    583893            END DO 
    584894         END DO 
    585895#endif 
     896         ! 
     897      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     898         DO jk = 2, jpkm1 
     899            DO jj = 1, jpj 
     900               DO ji = 1, jpi 
     901                  zgde3w = grav / fse3w(ji,jj,jk) 
     902                  zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) ) - 10._wp ! potential temperature at w-pt 
     903                  zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35._wp ! salinity anomaly (s-35) at w-pt 
     904                  zh = fsdepw(ji,jj,jk)                                                 ! depth in meters  at w-point 
     905                  ! 
     906                  zalpha = 1027._wp * ( 1.67e-4_wp * ( 1._wp + 1.1e-4_wp*zh ) + 1.e-5_wp*zt ) / rau0 ! alpha 
     907                  zbeta  = 1027._wp * 0.78e-3_wp / rau0  ! beta 
     908                  zalpbet = zalpha / zbeta  ! ratio alpha/beta 
     909                  ! 
     910                  pn2(ji,jj,jk) = zgde3w * zbeta * tmask(ji,jj,jk)           &   ! N^2 
     911                     &          * ( zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) )   & 
     912                     &                     - ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) ) ) 
     913#if defined key_zdfddm 
     914                  !                                                         !!bug **** caution a traiter zds=dk[S]= 0 !!!! 
     915                  zds = ( pts(ji,jj,jk-1,jp_sal) - pts(ji,jj,jk,jp_sal) )                    ! Rrau = (alpha / beta) (dk[t] / dk[s]) 
     916                  IF ( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 
     917                  rrau(ji,jj,jk) = zalpbet * ( pts(ji,jj,jk-1,jp_tem) - pts(ji,jj,jk,jp_tem) ) / zds 
     918#endif 
     919               END DO 
     920            END DO 
     921         END DO 
     922         ! 
    586923      END SELECT 
    587924 
     
    591928#endif 
    592929      ! 
     930      CALL wrk_dealloc( jpi, jpj, jpk, zws ) 
     931      ! 
    593932      IF( nn_timing == 1 ) CALL timing_stop('bn2') 
    594933      ! 
     
    603942      !! 
    604943      !! ** Method  :   calculates alpha / beta ratio at T-points 
    605       !!       * nn_eos = 0  : UNESCO sea water properties 
    606       !!                       The alpha/beta ratio is returned as 3-D array palpbet using the polynomial 
    607       !!                       polynomial expression of McDougall (1987). 
     944      !!       * nn_eos = -1  : alpha / beta ratio is computed for 
     945      !!       the Jackett and McDougall (1995) equation of state: 
     946      !!                       Scalar beta0 is returned = 1. 
     947      !!       * nn_eos = 0  : alpha / beta ratio using the formulation of McDougall (1987). 
    608948      !!                       Scalar beta0 is returned = 1. 
    609949      !!       * nn_eos = 1  : linear equation of state (temperature only) 
     
    611951      !!                       Scalar beta0 is returned = 0. 
    612952      !!       * nn_eos = 2  : linear equation of state (temperature & salinity) 
    613       !!                       The alpha/beta ratio is returned as ralpbet 
     953      !!                       The alpha/beta ratio is returned as palpbet 
     954      !!                       Scalar beta0 is returned = 1. 
     955      !!       * nn_eos = 3  : Vallis equation of state (Vallis 2006) 
    614956      !!                       Scalar beta0 is returned = 1. 
    615957      !! 
     
    622964      !! 
    623965      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    624       REAL(wp) ::   zt, zs, zh   ! local scalars 
     966      REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop            ! temporary scalars 
     967      REAL(wp) ::   ze, zbw, zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zM  !    -         - 
     968      REAL(wp) ::   zDenom, zrho, zdzk0, zdza, zdzb, zdrhop, zdM, zdDenom ! 
     969      REAL(wp) ::   zalpha, zbeta                                ! local scalars 
     970      REAL(wp), POINTER, DIMENSION(:,:,:) :: zws 
    625971      !!---------------------------------------------------------------------- 
    626972      ! 
    627973      IF( nn_timing == 1 ) CALL timing_start('eos_alpbet') 
    628974      ! 
     975      CALL wrk_alloc( jpi, jpj, jpk, zws ) 
     976      ! 
    629977      SELECT CASE ( nn_eos ) 
    630978      ! 
    631       CASE ( 0 )               ! Jackett and McDougall (1994) formulation 
     979      CASE ( -1 )               ! Jackett and McDougall (1995) formulation 
     980         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     981         DO jk = 1, jpkm1 
     982            DO jj = 1, jpj 
     983               DO ji = 1, jpi 
     984                  zt = pts   (ji,jj,jk,jp_tem) 
     985                  zs = pts   (ji,jj,jk,jp_sal) 
     986                  zh = fsdept(ji,jj,jk)        ! depth 
     987                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     988                  ! 
     989                  ! compute volumic mass pure water at atm pressure 
     990                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     991                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     992                  ! seawater volumic mass atm pressure 
     993                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     994                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     995                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     996                  zr4= 4.8314e-4_wp 
     997                  ! 
     998                  ! potential volumic mass (reference to the surface) 
     999                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     1000                  ! 
     1001                  ! add the compression terms 
     1002                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     1003                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     1004                  zb = zbw + ze * zs 
     1005                  ! 
     1006                  zd = -1.480266e-4_wp 
     1007                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     1008                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     1009                  za = ( zd*zsr + zc ) *zs + zaw 
     1010                  ! 
     1011                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     1012                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     1013                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     1014                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     1015                  ! 
     1016                  zM= ( zb*zh - za )*zh + zk0 
     1017                  zDenom= 1._wp - zh / zM 
     1018                  ! compute in-situ density 
     1019                  zrho = zrhop/zDenom 
     1020              ! alpha 
     1021                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     1022                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     1023                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     1024                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     1025                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     1026                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     1027                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     1028                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1029                  zdDenom = zh * zdM / (zM*zM) 
     1030                  zalpha = - ( zdrhop - zrho*zdDenom ) / zDenom / rau0 
     1031                  ! beta 
     1032                  zdzb  = ze 
     1033                  zdza  = -3.0644505e-2_wp*zsr+zc 
     1034                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     1035                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     1036                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1037                  zdDenom = zh * zdM / (zM*zM) 
     1038                  zbeta =   ( zdrhop - zrho*zdDenom ) / zDenom / rau0 
     1039                  ! alpha/beta 
     1040                  palpbet(ji,jj,jk) = zalpha / zbeta * tmask(ji,jj,jk) 
     1041               END DO 
     1042            END DO 
     1043         END DO 
     1044         beta0 = 1._wp 
     1045         ! 
     1046      CASE ( 0 )               ! McDougall (1987) formulation 
    6321047         DO jk = 1, jpk 
    6331048            DO jj = 1, jpj 
     
    6601075         ! 
    6611076      CASE ( 2 )              !==  Linear formulation = F( temperature , salinity )  ==! 
    662          palpbet(:,:,:) = ralpbet 
     1077         palpbet(:,:,:) = rn_alpha / rn_beta 
     1078         beta0 = 1._wp 
     1079         ! 
     1080      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     1081         DO jk = 1, jpkm1 
     1082            DO jj = 1, jpj 
     1083               DO ji = 1, jpi 
     1084                  zt = pts(ji,jj,jk,jp_tem) - 10._wp  ! potential temperature 
     1085                  zs = pts(ji,jj,jk,jp_sal) - 35._wp  ! salinity anomaly (s-35) 
     1086                  zh = fsdepw(ji,jj,jk)                                                ! depth in meters  at w-point 
     1087                  ! 
     1088                  zalpha = ( 1.67e-4_wp * ( 1._wp + 1.1e-4_wp*zh ) + 1.e-5_wp*zt ) ! alpha/vallis_ratio 
     1089                  zbeta  = 0.78e-3_wp  ! beta/vallis_ratio 
     1090                  ! 
     1091                  palpbet(ji,jj,jk) = zalpha / zbeta * tmask(ji,jj,jk) 
     1092               END DO 
     1093            END DO 
     1094         END DO 
    6631095         beta0 = 1._wp 
    6641096         ! 
     
    6701102      END SELECT 
    6711103      ! 
     1104      CALL wrk_dealloc( jpi, jpj, jpk, zws ) 
     1105      ! 
    6721106      IF( nn_timing == 1 ) CALL timing_stop('eos_alpbet') 
    6731107      ! 
     
    6751109 
    6761110 
     1111   SUBROUTINE eos_alpha_beta( pts, palpha, pbeta ) 
     1112      !!---------------------------------------------------------------------- 
     1113      !!                 ***  ROUTINE eos_alpha_beta  *** 
     1114      !! 
     1115      !! ** Purpose :   Calculates the in situ thermal/haline expansion terms at T-points 
     1116      !! 
     1117      !! ** Method  :   calculates alpha and beta at T-points 
     1118      !!       * nn_eos = -1 : Jackett and McDougall (1995) equation of state 
     1119      !!       * nn_eos = 0  : modified Jackett and McDougall (1995) equation of state 
     1120      !!       * nn_eos = 1  : linear equation of state (temperature only) 
     1121      !!                       palpha = rn_alpha 
     1122      !!                       pbeta = 0 
     1123      !!       * nn_eos = 2  : linear equation of state (temperature & salinity) 
     1124      !!                       palpha = rn_alpha 
     1125      !!                       pbeta = rn_beta 
     1126      !!       * nn_eos = 3  : Vallis equation of state (Vallis 2006) 
     1127      !!                       alpha and beta ratios are returned as 3-D arrays. 
     1128      !! 
     1129      !! ** Action  : - palpha : thermal expansion ratio at T-points 
     1130      !!            : - pbeta  : haline expansion ratio at T-points 
     1131      !!---------------------------------------------------------------------- 
     1132      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts      ! pot. temperature & salinity 
     1133      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   palpha   ! alpha 
     1134      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pbeta    ! beta 
     1135      ! 
     1136      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     1137      REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop            ! temporary scalars 
     1138      REAL(wp) ::   ze, zbw, zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zM  !    -         - 
     1139      REAL(wp) ::   zDenom, zrho, zdzk0, zdza, zdzb, zdrhop, zdM, zdDenom ! 
     1140      REAL(wp), POINTER, DIMENSION(:,:,:) :: zws 
     1141      !!---------------------------------------------------------------------- 
     1142      ! 
     1143      IF ( nn_timing == 1 )   CALL timing_start('eos_alpha_beta') 
     1144      ! 
     1145      CALL wrk_alloc( jpi, jpj, jpk, zws ) 
     1146      ! 
     1147      SELECT CASE ( nn_eos ) 
     1148      ! 
     1149      CASE ( -1 )               ! Jackett and McDougall (1995) formulation 
     1150         ! 
     1151         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     1152         DO jk = 1, jpkm1 
     1153            DO jj = 1, jpj 
     1154               DO ji = 1, jpi 
     1155                  zt = pts   (ji,jj,jk,jp_tem) 
     1156                  zs = pts   (ji,jj,jk,jp_sal) 
     1157                  zh = fsdept(ji,jj,jk)        ! depth 
     1158                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     1159                  ! 
     1160                  ! compute volumic mass pure water at atm pressure 
     1161                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     1162                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     1163                  ! seawater volumic mass atm pressure 
     1164                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     1165                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     1166                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     1167                  zr4= 4.8314e-4_wp 
     1168                  ! 
     1169                  ! potential volumic mass (reference to the surface) 
     1170                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     1171                  ! 
     1172                  ! add the compression terms 
     1173                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     1174                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     1175                  zb = zbw + ze * zs 
     1176                  ! 
     1177                  zd = -1.480266e-4_wp 
     1178                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     1179                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     1180                  za = ( zd*zsr + zc ) *zs + zaw 
     1181                  ! 
     1182                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     1183                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     1184                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     1185                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     1186                  ! 
     1187                  zM= ( zb*zh - za )*zh + zk0 
     1188                  zDenom= 1._wp - zh / zM 
     1189                  ! compute in-situ density 
     1190                  zrho = zrhop/zDenom 
     1191              ! alpha 
     1192                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     1193                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     1194                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     1195                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     1196                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     1197                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     1198                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     1199                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1200                  zdDenom = zh * zdM / (zM*zM) 
     1201                  palpha(ji,jj,jk) = - ( zdrhop - zrho*zdDenom ) / zDenom / rau0 * tmask(ji,jj,jk) 
     1202                  ! beta 
     1203                  zdzb  = ze 
     1204                  zdza  = -3.0644505e-2_wp*zsr+zc 
     1205                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     1206                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     1207                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1208                  zdDenom = zh * zdM / (zM*zM) 
     1209                  pbeta(ji,jj,jk) =   ( zdrhop - zrho*zdDenom ) / zDenom / rau0 * tmask(ji,jj,jk) 
     1210               END DO 
     1211            END DO 
     1212         END DO 
     1213         ! 
     1214      CASE ( 0 )               ! modified Jackett and McDougall (1995) formulation 
     1215         ! 
     1216         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     1217         DO jk = 1, jpkm1 
     1218            DO jj = 1, jpj 
     1219               DO ji = 1, jpi 
     1220                  zt = pts   (ji,jj,jk,jp_tem) 
     1221                  zs = pts   (ji,jj,jk,jp_sal) 
     1222                  zh = fsdept(ji,jj,jk)        ! depth 
     1223                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     1224                  ! 
     1225                  ! compute volumic mass pure water at atm pressure 
     1226                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     1227                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     1228                  ! seawater volumic mass atm pressure 
     1229                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     1230                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     1231                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     1232                  zr4= 4.8314e-4_wp 
     1233                  ! 
     1234                  ! potential volumic mass (reference to the surface) 
     1235                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     1236                  ! 
     1237                  ! add the compression terms 
     1238                  ze = ( -3.508914e-8_wp*zt-1.248266e-8_wp ) *zt-2.595994e-6_wp 
     1239                  zbw= (  1.296821e-6_wp*zt-5.782165e-9_wp ) *zt+1.045941e-4_wp 
     1240                  zb = zbw + ze * zs 
     1241                  ! 
     1242                  zd = -2.042967e-2_wp 
     1243                  zc =   (-7.267926e-5_wp*zt+2.598241e-3_wp ) *zt+0.1571896_wp 
     1244                  zaw= ( ( 5.939910e-6_wp*zt+2.512549e-3_wp ) *zt-0.1028859_wp ) *zt - 4.721788_wp 
     1245                  za = ( zd*zsr + zc ) *zs + zaw 
     1246                  ! 
     1247                  zb1=   (-0.1909078_wp*zt+7.390729_wp )        *zt-55.87545_wp 
     1248                  za1= ( ( 2.326469e-3_wp*zt+1.553190_wp)       *zt-65.00517_wp ) *zt+1044.077_wp 
     1249                  zkw= ( ( (-1.361629e-4_wp*zt-1.852732e-2_wp ) *zt-30.41638_wp ) *zt + 2098.925_wp ) *zt+190925.6_wp 
     1250                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     1251                  ! 
     1252                  zM= ( zb*zh - za )*zh + zk0 
     1253                  zDenom= 1._wp - zh / zM 
     1254                  ! compute in-situ density 
     1255                  zrho = zrhop/zDenom 
     1256              ! alpha 
     1257                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     1258                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     1259                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     1260                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     1261                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     1262                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     1263                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     1264                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1265                  zdDenom = zh * zdM / (zM*zM) 
     1266                  palpha(ji,jj,jk) = - ( zdrhop - zrho*zdDenom ) / zDenom / rau0 * tmask(ji,jj,jk) 
     1267                  ! beta 
     1268                  zdzb  = ze 
     1269                  zdza  = -3.0644505e-2_wp*zsr+zc 
     1270                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     1271                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     1272                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1273                  zdDenom = zh * zdM / (zM*zM) 
     1274                  pbeta(ji,jj,jk) =   ( zdrhop - zrho*zdDenom ) / zDenom / rau0 * tmask(ji,jj,jk) 
     1275               END DO 
     1276            END DO 
     1277         END DO 
     1278         ! 
     1279      CASE ( 1 )              !==  Linear formulation = F( temperature )  ==! 
     1280         palpha(:,:,:) = rn_alpha 
     1281         pbeta (:,:,:) = 0._wp 
     1282         ! 
     1283      CASE ( 2 )              !==  Linear formulation = F( temperature , salinity )  ==! 
     1284         palpha(:,:,:) = rn_alpha 
     1285         pbeta (:,:,:) = rn_beta 
     1286         ! 
     1287      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     1288         DO jk = 1, jpkm1 
     1289            DO jj = 1, jpj 
     1290               DO ji = 1, jpi 
     1291                  zt = pts(ji,jj,jk,jp_tem) - 10._wp  ! potential temperature (t-10) 
     1292                  zh = fsdept(ji,jj,jk)                                                ! depth in meters  at w-point 
     1293                  palpha(ji,jj,jk) = vallis_ratio * & 
     1294                      &  ( 1.67e-4_wp * ( 1._wp + 1.1e-4_wp*zh ) + 1.e-5_wp*zt ) * tmask(ji,jj,jk)   ! alpha 
     1295                  ! 
     1296               END DO 
     1297            END DO 
     1298         END DO 
     1299         pbeta (:,:,:) = vallis_ratio * 0.78e-3_wp * tmask(:,:,:)   ! beta 
     1300         ! 
     1301      CASE DEFAULT 
     1302         IF(lwp) WRITE(numout,cform_err) 
     1303         IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     1304         nstop = nstop + 1 
     1305         ! 
     1306      END SELECT 
     1307      ! 
     1308      CALL wrk_dealloc( jpi, jpj, jpk, zws ) 
     1309      ! 
     1310      IF( nn_timing == 1 ) CALL timing_stop('eos_alpha_beta') 
     1311      ! 
     1312   END SUBROUTINE eos_alpha_beta 
     1313 
     1314 
     1315 
     1316   SUBROUTINE eos_pen( pts, palphaPE, pbetaPE, pPEanom ) 
     1317      !!---------------------------------------------------------------------- 
     1318      !!                 ***  ROUTINE eos_pen  *** 
     1319      !! 
     1320      !! ** Purpose :   Calculates alpha_PE, beta_PE and PE at T-points 
     1321      !! 
     1322      !! ** Method  :   PE is defined analytically as the vertical  
     1323      !!                   primitive of EOS times -g integrated between 0 and z>0. 
     1324      !!                PEanom is the PE anomaly: PEanom = ( PE - rau0 gz ) / rau0 gz 
     1325      !!                                           = -1/z * /int_z^0 rd , where rd density anomaly 
     1326      !!                dalphaPE and dbetaPE are partial derivatives of PE anomaly with respect to T and S: 
     1327      !!                    alphaPE = - 1/(rau0 gz) * dPE/dT = - dPEanom/dT 
     1328      !!                    betaPE  =   1/(rau0 gz) * dPE/dS = - dPEanom/dS 
     1329      !! 
     1330      !!       * nn_eos = -1 : Jackett and McDougall (1995) equation of state. 
     1331      !!       * nn_eos = 0  : modified Jackett and McDougall (1995) equation of state. 
     1332      !!       * nn_eos = 1  : linear equation of state (temperature only) 
     1333      !!                       palpha = rau0*g*rn_alpha*z 
     1334      !!                       pbeta = 0 
     1335      !!       * nn_eos = 2  : linear equation of state (temperature & salinity) 
     1336      !!                       palpha = rau0*g*rn_alpha*z 
     1337      !!                       pbeta = -rau0*g*rn_beta*z 
     1338      !!       * nn_eos = 3  : Vallis equation of state (Vallis 2006) 
     1339      !! 
     1340      !! ** Action  : - pPEanom     : PE anomaly given at T-points 
     1341      !!            : - palphaPE    : given at T-points 
     1342      !!            : - pbetaPE     : given at T-points 
     1343      !!---------------------------------------------------------------------- 
     1344      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts       ! pot. temperature & salinity 
     1345      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   palphaPE  ! partial derivative of PE anom 
     1346      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pbetaPE   ! with respect to T and S, resp. 
     1347      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pPEanom   ! potential energy anomaly 
     1348      ! 
     1349      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     1350      REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop            ! temporary scalars 
     1351      REAL(wp) ::   ze, zbw, zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zM  !    -         - 
     1352      REAL(wp) ::   zDenom, zrho, zdzk0, zdza, zdzb, zdrhop, zdM, zdDenom ! 
     1353      REAL(wp) ::   zap1, zdelta, zsdelta, zAp, zBp, zlogBp, zCp, zatanCp ! 
     1354      REAL(wp) ::   zddelta, zdAp, zdBp, zdlogBp, zdCp, zP, zdP, zEp      ! 
     1355      REAL(wp), POINTER, DIMENSION(:,:,:) :: zws 
     1356      !!---------------------------------------------------------------------- 
     1357      ! 
     1358      IF ( nn_timing == 1 )   CALL timing_start('eos_pen') 
     1359      ! 
     1360      CALL wrk_alloc( jpi, jpj, jpk, zws ) 
     1361      ! 
     1362      SELECT CASE ( nn_eos ) 
     1363      ! 
     1364      CASE ( -1 )               ! Jackett and McDougall (1995) formulation 
     1365         ! 
     1366         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     1367         DO jk = 1, jpkm1 
     1368            DO jj = 1, jpj 
     1369               DO ji = 1, jpi 
     1370                  zt = pts   (ji,jj,jk,jp_tem) 
     1371                  zs = pts   (ji,jj,jk,jp_sal) 
     1372                  zh = fsdept(ji,jj,jk)        ! depth 
     1373                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     1374                  ! 
     1375                  ! compute volumic mass pure water at atm pressure 
     1376                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     1377                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     1378                  ! seawater volumic mass atm pressure 
     1379                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     1380                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     1381                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     1382                  zr4= 4.8314e-4_wp 
     1383                  ! 
     1384                  ! potential volumic mass (reference to the surface) 
     1385                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     1386                  ! 
     1387                  ! add the compression terms 
     1388                  ze = ( 6.207323e-11_wp*zt+6.128773e-9_wp ) *zt-2.040237e-7_wp 
     1389                  zbw= (  1.394680e-8_wp*zt-1.202016e-6_wp ) *zt+2.102898e-5_wp 
     1390                  zb = zbw + ze * zs 
     1391                  ! 
     1392                  zd = -1.480266e-4_wp 
     1393                  zc =   (-2.059331e-7_wp*zt+1.847318e-4_wp ) *zt-6.704388e-3 
     1394                  zaw= ( ( -1.956415e-6_wp*zt+2.984642e-4_wp ) *zt-2.212276e-2_wp ) *zt -3.186519_wp 
     1395                  za = ( zd*zsr + zc ) *zs + zaw 
     1396                  ! 
     1397                  zb1=   (-4.619924e-3_wp*zt+9.085835e-2_wp )        *zt+3.886640_wp 
     1398                  za1= ( ( -5.084188e-4_wp*zt+6.283263e-2_wp)       *zt-3.101089_wp ) *zt+528.4855_wp 
     1399                  zkw= ( ( (-4.190253e-4_wp*zt+9.648704e-2_wp ) *zt-17.06103_wp ) *zt + 1444.304_wp ) *zt+196593.3_wp 
     1400                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     1401                  ! 
     1402                  zM= ( zb*zh - za )*zh + zk0 
     1403                  zDenom= 1._wp - zh / zM 
     1404                  ! compute in-situ density 
     1405                  zrho = zrhop/zDenom 
     1406                  ! 
     1407                  zap1    = 1._wp + za 
     1408                  zdelta  = 4._wp*zb*zk0 - zap1*zap1 
     1409                  zsdelta = sqrt( abs( zdelta ) ) 
     1410                  zAp     = zap1 / zb / zsdelta 
     1411                  zBp     = ( zM - zh ) / zk0 
     1412                  zlogBp  = log(abs(zBp)) 
     1413                  zCp     = zh * zsdelta / (2._wp*zk0-zh*zap1) 
     1414                  zatanCp = atan(zCp) 
     1415                  zP      = zh + zAp * zatanCp + 0.5_wp*zlogBp/zb 
     1416                  ! compute potential energy 
     1417                  pPEanom(ji,jj,jk)     = ( ( zrhop * zP ) / rau0 / zh - 1._wp ) * tmask(ji,jj,jk) !!wrong 
     1418                  ! 
     1419              ! dPEdt 
     1420                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     1421                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     1422                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     1423                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     1424                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     1425                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     1426                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     1427                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1428                  zdDenom = zh * zdM / (zM*zM) 
     1429                  ! 
     1430                  zddelta = 4._wp * (zk0*zdzb+zb*zdzk0) - 2._wp*zap1*zdza 
     1431                  zdAp    = zAp * (zdza/zap1 - zdzb/zb - 0.5_wp*zddelta/zdelta) 
     1432                  zdlogBp = zdM/(zM-zh) - zdzk0/zk0 
     1433                  zdCp    = zCp * (0.5_wp*zddelta/zdelta - (2._wp*zdzk0-zh*zdza)/(2._wp*zk0-zh*zap1)) 
     1434                  zdP     = 0.5_wp * ( zdlogBp - zlogBp*zdzb/zb ) / zb + zdAp*zatanCp + zAp*zdCp/(1._wp+zCp*zCp)  
     1435                  ! 
     1436                  palphaPE(ji,jj,jk)    = - grav * ( zP*zdrhop + zrhop*zdP ) * tmask(ji,jj,jk)  
     1437                  ! 
     1438              ! dPEds 
     1439                  zdzb  = ze 
     1440                  zdza  = -3.0644505e-2_wp*zsr+zc 
     1441                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     1442                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     1443                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1444                  zdDenom = zh * zdM / (zM*zM) 
     1445                  ! 
     1446                  zddelta = 4._wp * (zk0*zdzb+zb*zdzk0) - 2._wp*zap1*zdza 
     1447                  zdAp    = zAp * (zdza/zap1 - zdzb/zb - 0.5_wp*zddelta/zdelta) 
     1448                  zdlogBp = zdM/(zM-zh) - zdzk0/zk0 
     1449                  zdCp    = zCp * (0.5_wp*zddelta/zdelta - (2._wp*zdzk0-zh*zdza)/(2._wp*zk0-zh*zap1)) 
     1450                  zdP     = 0.5_wp * ( zdlogBp - zlogBp*zdzb/zb ) / zb + zdAp*zatanCp + zAp*zdCp/(1._wp+zCp*zCp)  
     1451                  ! 
     1452                  pbetaPE(ji,jj,jk)    = - grav * ( zP*zdrhop + zrhop*zdP ) * tmask(ji,jj,jk) 
     1453                  ! 
     1454               END DO 
     1455            END DO 
     1456         END DO 
     1457         ! 
     1458      CASE ( 0 )               ! modified Jackett and McDougall (1995) formulation 
     1459         ! 
     1460         zws(:,:,:) = SQRT( ABS( pts(:,:,:,jp_sal) ) ) 
     1461         DO jk = 1, jpkm1 
     1462            DO jj = 1, jpj 
     1463               DO ji = 1, jpi 
     1464                  zt = pts   (ji,jj,jk,jp_tem) 
     1465                  zs = pts   (ji,jj,jk,jp_sal) 
     1466                  zh = fsdept(ji,jj,jk)        ! depth 
     1467                  zsr= zws   (ji,jj,jk)        ! square root salinity 
     1468                  ! 
     1469                  ! compute volumic mass pure water at atm pressure 
     1470                  zr1= ( ( ( ( 6.536332e-9_wp  *zt - 1.120083e-6_wp )*zt + 1.001685e-4_wp )*zt   & 
     1471                     &        -9.095290e-3_wp )*zt + 6.793952e-2_wp )*zt +  999.842594_wp 
     1472                  ! seawater volumic mass atm pressure 
     1473                  zr2= ( ( ( 5.3875e-9_wp*zt-8.2467e-7_wp ) *zt+7.6438e-5_wp ) *zt        & 
     1474                     &                      -4.0899e-3_wp ) *zt+0.824493_wp 
     1475                  zr3= ( -1.6546e-6_wp*zt+1.0227e-4_wp )    *zt-5.72466e-3_wp 
     1476                  zr4= 4.8314e-4_wp 
     1477                  ! 
     1478                  ! potential volumic mass (reference to the surface) 
     1479                  zrhop= ( zr4*zs + zr3*zsr + zr2 ) *zs + zr1 
     1480                  ! 
     1481                  ! add the compression terms 
     1482                  ze = ( -3.508914e-8_wp*zt-1.248266e-8_wp ) *zt-2.595994e-6_wp 
     1483                  zbw= (  1.296821e-6_wp*zt-5.782165e-9_wp ) *zt+1.045941e-4_wp 
     1484                  zb = zbw + ze * zs 
     1485                  ! 
     1486                  zd = -2.042967e-2_wp 
     1487                  zc =   (-7.267926e-5_wp*zt+2.598241e-3_wp ) *zt+0.1571896_wp 
     1488                  zaw= ( ( 5.939910e-6_wp*zt+2.512549e-3_wp ) *zt-0.1028859_wp ) *zt - 4.721788_wp 
     1489                  za = ( zd*zsr + zc ) *zs + zaw 
     1490                  ! 
     1491                  zb1=   (-0.1909078_wp*zt+7.390729_wp )        *zt-55.87545_wp 
     1492                  za1= ( ( 2.326469e-3_wp*zt+1.553190_wp)       *zt-65.00517_wp ) *zt+1044.077_wp 
     1493                  zkw= ( ( (-1.361629e-4_wp*zt-1.852732e-2_wp ) *zt-30.41638_wp ) *zt + 2098.925_wp ) *zt+190925.6_wp 
     1494                  zk0= ( zb1*zsr + za1 )*zs + zkw 
     1495                  ! 
     1496                  zM= ( zb*zh - za )*zh + zk0 
     1497                  zDenom= 1._wp - zh / zM 
     1498                  ! compute in-situ density 
     1499                  zrho = zrhop/zDenom 
     1500                  ! 
     1501                  zap1    = 1._wp + za 
     1502                  zdelta  = 4._wp*zb*zk0 - zap1*zap1 
     1503                  zsdelta = sqrt( abs( zdelta ) ) 
     1504                  zAp     = zap1 / zb / zsdelta 
     1505                  zBp     = ( zM - zh ) / zk0 
     1506                  zlogBp  = log(abs(zBp)) 
     1507                  zCp     = zh * zsdelta / (2._wp*zk0-zh*zap1) 
     1508                  zatanCp = atan(zCp) 
     1509                  zP      = zh + zAp * zatanCp + 0.5_wp*zlogBp/zb 
     1510                  ! compute potential energy 
     1511                  pPEanom(ji,jj,jk)     = - grav * zrhop * zP * tmask(ji,jj,jk) 
     1512                  ! 
     1513              ! dPEdt 
     1514                  zdzb  = (2.593642e-6_wp*zt-5.782165e-9_wp) + (-7.017828e-8_wp*zt-1.248266e-8_wp) * zs 
     1515                  zdza  = (-14.535852e-5_wp*zt+2.598241e-3)*zs+((17.81973e-6_wp*zt+5.025098e-3_wp)*zt-0.1028859_wp) 
     1516                  zdzk0 = ((-0.3818156_wp*zt+7.390729_wp)*zsr+((6.979407e-3_wp*zt+3.10638_wp)*zt-65.00517_wp))*zs  & 
     1517                     &            +(((-5.446516e-4_wp*zt-5.558196e-2_wp)*zt-60.83276_wp)*zt+2098.925_wp) 
     1518                  zdrhop   = ((-3.3092e-6_wp*zt+1.0227e-4_wp)*zsr  & 
     1519                     &            +(((21.55e-9_wp*zt-24.7401e-7_wp)*zt+15.2876e-5_wp)*zt-4.0899e-3_wp))*zs  & 
     1520                     &            +((((32.68166e-9_wp*zt-4.480332e-6_wp)*zt+3.005055e-4_wp)*zt-18.19058e-3_wp)*zt+6.793952e-2_wp) 
     1521                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1522                  zdDenom = zh * zdM / (zM*zM) 
     1523                  ! 
     1524                  zddelta = 4._wp * (zk0*zdzb+zb*zdzk0) - 2._wp*zap1*zdza 
     1525                  zdAp    = zAp * (zdza/zap1 - zdzb/zb - 0.5_wp*zddelta/zdelta) 
     1526                  zdlogBp = zdM/(zM-zh) - zdzk0/zk0 
     1527                  zdCp    = zCp * (0.5_wp*zddelta/zdelta - (2._wp*zdzk0-zh*zdza)/(2._wp*zk0-zh*zap1)) 
     1528                  zdP     = 0.5_wp * ( zdlogBp - zlogBp*zdzb/zb ) / zb + zdAp*zatanCp + zAp*zdCp/(1._wp+zCp*zCp)  
     1529                  ! 
     1530                  palphaPE(ji,jj,jk)    = - grav * ( zP*zdrhop + zrhop*zdP ) * tmask(ji,jj,jk) 
     1531                  ! 
     1532              ! dPEds 
     1533                  zdzb  = ze 
     1534                  zdza  = -3.0644505e-2_wp*zsr+zc 
     1535                  zdzk0 = 1.5_wp*zb1*zsr+za1 
     1536                  zdrhop   = 9.6628e-4_wp*zs+1.5_wp*zr3*zsr+zr2 
     1537                  zdM = (zdzb*zh-zdza)*zh+zdzk0 
     1538                  zdDenom = zh * zdM / (zM*zM) 
     1539                  ! 
     1540                  zddelta = 4._wp * (zk0*zdzb+zb*zdzk0) - 2._wp*zap1*zdza 
     1541                  zdAp    = zAp * (zdza/zap1 - zdzb/zb - 0.5_wp*zddelta/zdelta) 
     1542                  zdlogBp = zdM/(zM-zh) - zdzk0/zk0 
     1543                  zdCp    = zCp * (0.5_wp*zddelta/zdelta - (2._wp*zdzk0-zh*zdza)/(2._wp*zk0-zh*zap1)) 
     1544                  zdP     = 0.5_wp * ( zdlogBp - zlogBp*zdzb/zb ) / zb + zdAp*zatanCp + zAp*zdCp/(1._wp+zCp*zCp)  
     1545                  ! 
     1546                  pbetaPE(ji,jj,jk)    = - grav * ( zP*zdrhop + zrhop*zdP ) * tmask(ji,jj,jk) 
     1547                  ! 
     1548               END DO 
     1549            END DO 
     1550         END DO 
     1551         ! 
     1552      CASE ( 1 )              !==  Linear formulation = F( temperature )  ==! 
     1553         palphaPE(:,:,:) = rn_alpha * tmask(:,:,:) 
     1554         pbetaPE (:,:,:) = 0._wp 
     1555         DO jk = 1, jpkm1 
     1556            pPEanom(:,:,jk) = ( 0.0285_wp - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
     1557         END DO 
     1558         ! 
     1559      CASE ( 2 )              !==  Linear formulation = F( temperature , salinity )  ==! 
     1560         palphaPE(:,:,:) = rn_alpha * tmask(:,:,:) 
     1561         pbetaPE (:,:,:) = rn_beta  * tmask(:,:,:) 
     1562         DO jk = 1, jpkm1 
     1563            pPEanom(:,:,jk) = ( rn_beta  * pts(:,:,jk,jp_sal) - rn_alpha * pts(:,:,jk,jp_tem) ) * tmask(:,:,jk) 
     1564         END DO 
     1565         ! 
     1566      CASE( 3 )                !==  Vallis (2006) simplified EOS  ==! 
     1567         DO jk = 1, jpkm1 
     1568            DO jj = 1, jpj 
     1569               DO ji = 1, jpi 
     1570                  zt = pts(ji,jj,jk,jp_tem) - 10._wp  ! potential temperature (t-10) 
     1571                  zs = pts(ji,jj,jk,jp_sal) - 35._wp  ! salinity anomaly (s-35) 
     1572                  zh = fsdept(ji,jj,jk)                                                ! depth in meters  at w-point 
     1573                  ! 
     1574                  palphaPE(ji,jj,jk) = vallis_ratio * & 
     1575                      &  ( 1.67e-4_wp * ( 1._wp + 0.55e-4_wp*zh ) + 1.e-5_wp*zt ) * tmask(ji,jj,jk)   ! alphaPE 
     1576                  pPEanom(ji,jj,jk)     = vallis_diff + vallis_ratio *   & 
     1577                      &   ( - ( 1.67e-4_wp*(1._wp+0.55e-4_wp*zh) + 0.5e-5_wp*zt )*zt + 0.78e-3_wp*zs + 2.195e-6_wp*zh ) & 
     1578                      &   * tmask(ji,jj,jk) 
     1579                  ! 
     1580               END DO 
     1581            END DO 
     1582         END DO 
     1583         pbetaPE (:,:,:) = vallis_ratio * 0.78e-3_wp * tmask(:,:,:)   ! betaPE=beta 
     1584         ! 
     1585      CASE DEFAULT 
     1586         IF(lwp) WRITE(numout,cform_err) 
     1587         IF(lwp) WRITE(numout,*) '          bad flag value for nn_eos = ', nn_eos 
     1588         nstop = nstop + 1 
     1589         ! 
     1590      END SELECT 
     1591      ! 
     1592      CALL wrk_dealloc( jpi, jpj, jpk, zws ) 
     1593      ! 
     1594      IF( nn_timing == 1 ) CALL timing_stop('eos_pen') 
     1595      ! 
     1596   END SUBROUTINE eos_pen 
     1597 
     1598 
     1599 
    6771600   FUNCTION tfreez( psal ) RESULT( ptf ) 
    6781601      !!---------------------------------------------------------------------- 
    679       !!                 ***  ROUTINE eos_init  *** 
     1602      !!                 ***  ROUTINE tfreez  *** 
    6801603      !! 
    6811604      !! ** Purpose :   Compute the sea surface freezing temperature [Celcius] 
     
    7241647      SELECT CASE( nn_eos )         ! check option 
    7251648      ! 
    726       CASE( 0 )                        !==  Jackett and McDougall (1994) formulation  ==! 
     1649      CASE( -1 )                        !==  Jackett and McDougall (1995) formulation  ==! 
    7271650         IF(lwp) WRITE(numout,*) 
    728          IF(lwp) WRITE(numout,*) '          use of Jackett & McDougall (1994) equation of state and' 
    729          IF(lwp) WRITE(numout,*) '                 McDougall (1987) Brunt-Vaisala frequency' 
     1651         IF(lwp) WRITE(numout,*) '          use of Jackett & McDougall (1995) equation of state' 
     1652         ! 
     1653      CASE( 0 )                        !==  modified Jackett and McDougall (1995) formulation  ==! 
     1654         IF(lwp) WRITE(numout,*) 
     1655         IF(lwp) WRITE(numout,*) '          use of modified Jackett & McDougall (1995) equation of state' 
     1656         IF(lwp) WRITE(numout,*) '                and McDougall (1987) Brunt-Vaisala frequency' 
    7301657         ! 
    7311658      CASE( 1 )                        !==  Linear formulation = F( temperature )  ==! 
     
    7361663         ! 
    7371664      CASE( 2 )                        !==  Linear formulation = F( temperature , salinity )  ==! 
    738          ralpbet = rn_alpha / rn_beta 
    7391665         IF(lwp) WRITE(numout,*) 
    7401666         IF(lwp) WRITE(numout,*) '          use of linear eos rho(T,S) = rau0 * ( rn_beta * S - rn_alpha * T )' 
     1667         ! 
     1668      CASE( 3 )                        !==  Vallis (2006) formulation  ==! 
     1669         IF(lwp) WRITE(numout,*) 
     1670         IF(lwp) WRITE(numout,*) '          use of Vallis (2006) equation of state' 
     1671         vallis_ratio = 1027._wp / rau0 
     1672         vallis_diff = (1027._wp-rau0) / rau0 
    7411673         ! 
    7421674      CASE DEFAULT                     !==  ERROR in nn_eos  ==! 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90

    r3718 r3876  
    44   !! Ocean  tracers:  horizontal & vertical advective trend 
    55   !!====================================================================== 
    6    !! History :  8.2  ! 2001-08  (G. Madec, E. Durand) trahad+trazad=traadv  
    7    !!            1.0  ! 2002-06  (G. Madec)  F90: Free form and module 
    8    !!            9.0  ! 2004-08  (C. Talandier) New trends organization 
     6   !! History :  OPA  ! 2001-08  (G. Madec, E. Durand) v8.2 trahad+trazad=traadv  
     7   !!   NEMO     1.0  ! 2002-06  (G. Madec)  F90: Free form and module 
     8   !!             -   ! 2004-08  (C. Talandier) New trends organization 
    99   !!             -   ! 2005-11  (V. Garnier) Surface pressure gradient organization 
    1010   !!            2.0  ! 2006-04  (R. Benshila, G. Madec) Step reorganization 
     
    2121   USE dom_oce         ! ocean space and time domain 
    2222   USE eosbn2          ! equation of state 
    23    USE trdmod_oce      ! tracers trends 
    24    USE trdtra          ! tracers trends 
     23   USE trd_oce         ! trends: ocean variables 
     24   USE trdtra          ! trends manager: tracers  
    2525   USE closea          ! closed sea 
    2626   USE sbcrnf          ! river runoffs 
     
    3737   PRIVATE 
    3838 
    39    PUBLIC   tra_adv_cen2       ! routine called by step.F90 
    40    PUBLIC   ups_orca_set       ! routine used by traadv_cen2_jki.F90 
     39   PUBLIC   tra_adv_cen2   ! routine called by step.F90 
     40   PUBLIC   ups_orca_set   ! routine used by traadv_cen2_jki.F90 
    4141 
    4242   LOGICAL  :: l_trd       ! flag to compute trends 
     
    5555 
    5656   SUBROUTINE tra_adv_cen2( kt, kit000, cdtype, pun, pvn, pwn,     & 
    57       &                                 ptb, ptn, pta, kjpt   )  
     57      &                                         ptb, ptn, pta, kjpt   )  
    5858      !!---------------------------------------------------------------------- 
    5959      !!                  ***  ROUTINE tra_adv_cen2  *** 
     
    8585      !!       * Add this trend now to the general trend of tracer (ta,sa): 
    8686      !!               pta = pta + ztra 
    87       !!       * trend diagnostic ('key_trdtra' defined): the trend is 
     87      !!       * trend diagnostic (l_trdtra=T or l_trctra=T): the trend is 
    8888      !!      saved for diagnostics. The trends saved is expressed as 
    89       !!      Uh.gradh(T), i.e. 
    90       !!                     save trend = ztra + ptn divn 
     89      !!      Uh.gradh(T), i.e.  save trend = ztra + ptn divn 
    9190      !! 
    9291      !!         Part II : vertical advection 
     
    104103      !!         Add this trend now to the general trend of tracer (ta,sa): 
    105104      !!             pta = pta + ztra 
    106       !!         Trend diagnostic ('key_trdtra' defined): the trend is 
     105      !!         Trend diagnostic (l_trdtra=T or l_trctra=T): the trend is 
    107106      !!      saved for diagnostics. The trends saved is expressed as : 
    108107      !!             save trend =  w.gradz(T) = ztra - ptn divn. 
     
    144143         IF(lwp) WRITE(numout,*) 
    145144         ! 
    146          IF ( .NOT. ALLOCATED( upsmsk ) )  THEN 
     145         IF( .NOT. ALLOCATED( upsmsk ) )  THEN 
    147146             ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 
    148147             IF( ierr /= 0 )   CALL ctl_stop('STOP', 'tra_adv_cen2: unable to allocate array') 
     
    260259         END DO 
    261260 
    262          !                                 ! trend diagnostics (contribution of upstream fluxes) 
     261         !                                 ! trend diagnostics 
    263262         IF( l_trd ) THEN 
    264             CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptn(:,:,:,jn) ) 
    265             CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    266             CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwz, pwn, ptn(:,:,:,jn) ) 
     263            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
     264            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
     265            CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 
    267266         END IF 
    268267         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    272271         ENDIF 
    273272         ! 
    274       ENDDO 
     273      END DO 
    275274 
    276275      ! ---------------------------  required in restart file to ensure restartability) 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90

    r3718 r3876  
    1616   !!---------------------------------------------------------------------- 
    1717   USE oce            ! ocean dynamics and active tracers 
     18   USE trc_oce        ! share passive tracers/Ocean variables 
    1819   USE dom_oce        ! ocean space and time domain 
    19    USE trdmod_oce     ! tracers trends  
    20    USE trdtra         ! tracers trends  
    21    USE in_out_manager ! I/O manager 
     20   USE trd_oce        ! trends: ocean variables 
     21   USE trdtra         ! tracers trends manager 
    2222   USE dynspg_oce     ! choice/control of key cpp for surface pressure gradient 
    23    USE trabbl         ! tracers: bottom boundary layer 
    24    USE lib_mpp        ! distribued memory computing 
    25    USE lbclnk         ! ocean lateral boundary condition (or mpp link)  
     23   USE sbcrnf          ! river runoffs 
    2624   USE diaptr         ! poleward transport diagnostics 
    27    USE trc_oce        ! share passive tracers/Ocean variables 
     25   ! 
    2826   USE wrk_nemo       ! Memory Allocation 
    2927   USE timing         ! Timing 
    3028   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    31    USE eosbn2          ! equation of state 
    32    USE sbcrnf          ! river runoffs 
     29   USE in_out_manager ! I/O manager 
     30   USE lib_mpp        ! distribued memory computing 
     31   USE lbclnk         ! ocean lateral boundary condition (or mpp link)  
     32!!gm   USE trabbl         ! tracers: bottom boundary layer 
     33!!gm   USE eosbn2          ! equation of state 
    3334 
    3435   IMPLICIT NONE 
     
    191192                  zalpha = 0.5 - z0u 
    192193                  zu  = z0u - 0.5 * pun(ji,jj,jk) * zdt / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    193                   zzwx = ptb(ji+1,jj,jk,jn) + xind(ji,jj,jk) * (zu * zslpx(ji+1,jj,jk)) 
    194                   zzwy = ptb(ji  ,jj,jk,jn) + xind(ji,jj,jk) * (zu * zslpx(ji  ,jj,jk)) 
     194                  zzwx = ptb(ji+1,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji+1,jj,jk) 
     195                  zzwy = ptb(ji  ,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji  ,jj,jk) 
    195196                  zwx(ji,jj,jk) = pun(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    196197                  ! 
     
    198199                  zalpha = 0.5 - z0v 
    199200                  zv  = z0v - 0.5 * pvn(ji,jj,jk) * zdt / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 
    200                   zzwx = ptb(ji,jj+1,jk,jn) + xind(ji,jj,jk) * (zv * zslpy(ji,jj+1,jk)) 
    201                   zzwy = ptb(ji,jj  ,jk,jn) + xind(ji,jj,jk) * (zv * zslpy(ji,jj  ,jk)) 
     201                  zzwx = ptb(ji,jj+1,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj+1,jk) 
     202                  zzwy = ptb(ji,jj  ,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj  ,jk) 
    202203                  zwy(ji,jj,jk) = pvn(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    203204               END DO 
     
    222223         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    223224         IF( l_trd )  THEN 
    224             CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptb(:,:,:,jn) ) 
    225             CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptb(:,:,:,jn) ) 
     225            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptb(:,:,:,jn) ) 
     226            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptb(:,:,:,jn) ) 
    226227         END IF 
    227228         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    273274                  zalpha = 0.5 + z0w 
    274275                  zw  = z0w - 0.5 * pwn(ji,jj,jk+1) * zdt * zbtr  
    275                   zzwx = ptb(ji,jj,jk+1,jn) + xind(ji,jj,jk) * (zw * zslpx(ji,jj,jk+1)) 
    276                   zzwy = ptb(ji,jj,jk  ,jn) + xind(ji,jj,jk) * (zw * zslpx(ji,jj,jk  )) 
     276                  zzwx = ptb(ji,jj,jk+1,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk+1) 
     277                  zzwy = ptb(ji,jj,jk  ,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk  ) 
    277278                  zwx(ji,jj,jk+1) = pwn(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    278279               END DO  
     
    293294         END DO 
    294295         !                                 ! Save the vertical advective trends for diagnostic 
    295          IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwx, pwn, ptb(:,:,:,jn) ) 
     296         IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pwn, ptb(:,:,:,jn) ) 
    296297         ! 
    297298      ENDDO 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90

    r3625 r3876  
    1313   !!---------------------------------------------------------------------- 
    1414   USE oce             ! ocean dynamics and active tracers 
     15   USE trc_oce         ! share passive tracers/Ocean variables 
    1516   USE dom_oce         ! ocean space and time domain 
    16    USE trdmod_oce      ! tracers trends  
    17    USE trdtra          ! tracers trends  
     17   USE trd_oce         ! trends: ocean variables 
     18   USE trdtra          ! trends manager: tracers  
    1819   USE in_out_manager  ! I/O manager 
    1920   USE dynspg_oce      ! choice/control of key cpp for surface pressure gradient 
    20    USE trabbl          ! tracers: bottom boundary layer 
     21!!gm   USE trabbl          ! tracers: bottom boundary layer 
     22   USE diaptr          ! poleward transport diagnostics 
     23   ! 
    2124   USE lib_mpp         ! distribued memory computing 
    2225   USE lbclnk          ! ocean lateral boundary condition (or mpp link)  
    23    USE diaptr          ! poleward transport diagnostics 
    24    USE trc_oce         ! share passive tracers/Ocean variables 
    2526   USE wrk_nemo        ! Memory Allocation 
    2627   USE timing          ! Timing 
     
    201202         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    202203         IF( l_trd ) THEN 
    203             CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptb(:,:,:,jn) ) 
    204             CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptb(:,:,:,jn) ) 
     204            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptb(:,:,:,jn) ) 
     205            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptb(:,:,:,jn) ) 
    205206         END IF 
    206207 
     
    284285         END DO 
    285286         !                       ! trend diagnostics (contribution of upstream fluxes) 
    286          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwx, pwn, ptb(:,:,:,jn) ) 
     287         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pwn, ptb(:,:,:,jn) ) 
    287288         ! 
    288289      END DO 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90

    r3625 r3876  
    1717   USE oce             ! ocean dynamics and active tracers 
    1818   USE dom_oce         ! ocean space and time domain 
    19    USE trdmod_oce      ! ocean space and time domain 
    20    USE trdtra          ! ocean tracers trends  
    21    USE trabbl          ! advective term in the BBL 
     19   USE trc_oce         ! share passive tracers/Ocean variables 
     20   USE trd_oce         ! trends: ocean variables 
     21   USE trdtra          ! trends manager: tracers  
     22!!gm   USE trabbl          ! advective term in the BBL 
     23   USE dynspg_oce      ! surface pressure gradient variables 
     24   USE diaptr          ! poleward transport diagnostics 
     25   ! 
    2226   USE lib_mpp         ! distribued memory computing 
    2327   USE lbclnk          ! ocean lateral boundary condition (or mpp link) 
    24    USE dynspg_oce      ! surface pressure gradient variables 
    2528   USE in_out_manager  ! I/O manager 
    26    USE diaptr          ! poleward transport diagnostics 
    27    USE trc_oce         ! share passive tracers/Ocean variables 
    2829   USE wrk_nemo        ! Memory Allocation 
    2930   USE timing          ! Timing 
     
    233234         END DO 
    234235         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    235          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptn(:,:,:,jn) ) 
     236         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
    236237         ! 
    237238      END DO 
     
    359360         END DO 
    360361         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    361          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptn(:,:,:,jn) ) 
     362         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    362363         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    363364         IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nn_fptr ) == 0 ) ) THEN   
     
    422423         END DO 
    423424         !                                 ! Save the vertical advective trends for diagnostic 
    424          IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwz, pwn, ptn(:,:,:,jn) ) 
     425         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 
    425426         ! 
    426427      END DO 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90

    r3625 r3876  
    2222   USE oce            ! ocean dynamics and active tracers 
    2323   USE dom_oce        ! ocean space and time domain 
    24    USE trdmod_oce     ! tracers trends 
     24   USE trc_oce        ! share passive tracers/Ocean variables 
     25   USE trd_oce        ! trends: ocean variables 
    2526   USE trdtra         ! tracers trends 
    26    USE in_out_manager ! I/O manager 
    2727   USE dynspg_oce     ! choice/control of key cpp for surface pressure gradient 
     28   USE diaptr         ! poleward transport diagnostics 
     29   ! 
    2830   USE lib_mpp        ! MPP library 
    2931   USE lbclnk         ! ocean lateral boundary condition (or mpp link)  
    30    USE diaptr         ! poleward transport diagnostics 
    31    USE trc_oce        ! share passive tracers/Ocean variables 
     32   USE in_out_manager ! I/O manager 
    3233   USE wrk_nemo       ! Memory Allocation 
    3334   USE timing         ! Timing 
     
    228229            ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
    229230             
    230             CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, ztrdx, pun, ptn(:,:,:,jn) )    
    231             CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, ztrdy, pvn, ptn(:,:,:,jn) )   
    232             CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, ztrdz, pwn, ptn(:,:,:,jn) )  
     231            CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) )    
     232            CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) )   
     233            CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) )  
    233234         END IF 
    234235         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90

    r3787 r3876  
    1414   USE oce            ! ocean dynamics and active tracers 
    1515   USE dom_oce        ! ocean space and time domain 
    16    USE trdmod_oce     ! ocean space and time domain 
    17    USE trdtra 
    18    USE lib_mpp 
     16   USE trc_oce        ! share passive tracers/Ocean variables 
     17   USE trd_oce        ! trends: ocean variables 
     18   USE trdtra         ! trends manager: tracers  
     19   USE dynspg_oce     ! choice/control of key cpp for surface pressure gradient 
     20   USE diaptr         ! poleward transport diagnostics 
     21   ! 
     22   USE lib_mpp        ! I/O library 
    1923   USE lbclnk         ! ocean lateral boundary condition (or mpp link) 
    2024   USE in_out_manager ! I/O manager 
    21    USE diaptr         ! poleward transport diagnostics 
    22    USE dynspg_oce     ! choice/control of key cpp for surface pressure gradient 
    23    USE trc_oce        ! share passive tracers/Ocean variables 
    2425   USE wrk_nemo       ! Memory Allocation 
    2526   USE timing         ! Timing 
     
    5152      !!      and add it to the general trend of passive tracer equations. 
    5253      !! 
    53       !! ** Method  :   The upstream biased 3rd order scheme (UBS) is based on an 
     54      !! ** Method  :   The upstream biased scheme (UBS) is based on a 3rd order 
    5455      !!      upstream-biased parabolic interpolation (Shchepetkin and McWilliams 2005) 
    5556      !!      It is only used in the horizontal direction. 
     
    182183         !                                 ! trend diagnostics (contribution of upstream fluxes) 
    183184         IF( l_trd ) THEN 
    184              CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptn(:,:,:,jn) ) 
    185              CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptn(:,:,:,jn) ) 
     185             CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
     186             CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    186187         END IF 
    187188         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     
    265266               END DO 
    266267            END DO 
    267             CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zltv ) 
     268            CALL trd_tra( kt, cdtype, jn, jptra_zad, zltv ) 
    268269         ENDIF 
    269270         ! 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90

    r3625 r3876  
    1818   USE dom_oce         ! domain: ocean 
    1919   USE phycst          ! physical constants 
    20    USE trdmod_oce      ! trends: ocean variables  
    21    USE trdtra          ! trends: active tracers  
     20   USE trd_oce         ! trends: ocean variables 
     21   USE trdtra          ! trends manager: tracers  
    2222   USE in_out_manager  ! I/O manager 
    2323   USE prtctl          ! Print control 
     
    9999      IF( l_trdtra ) THEN        ! Save the geothermal heat flux trend for diagnostics 
    100100         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    101          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_bbc, ztrdt ) 
     101         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt ) 
    102102         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt ) 
    103103      ENDIF 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r3764 r3876  
    2828   USE phycst         ! physical constant 
    2929   USE eosbn2         ! equation of state 
    30    USE trdmod_oce     ! trends: ocean variables 
    31    USE trdtra         ! trends: active tracers 
    32    USE iom            ! IOM server 
     30   USE trd_oce        ! trends: ocean variables 
     31   USE trdtra         ! trends manager: tracers  
     32   USE iom            ! IOM server                
    3333   USE in_out_manager ! I/O manager 
    3434   USE lbclnk         ! ocean lateral boundary conditions 
     
    148148         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    149149         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    150          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_bbl, ztrdt ) 
    151          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_bbl, ztrds ) 
    152          CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
     150         CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 
     151         CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) 
     152         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )  
    153153      ENDIF 
    154154      ! 
     
    180180      !!              Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 
    181181      !!---------------------------------------------------------------------- 
    182       ! 
    183182      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    184183      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
     
    399398                                          - 0.121555e-07 ) * pfh 
    400399      !!---------------------------------------------------------------------- 
    401  
    402400      ! 
    403401      IF( nn_timing == 1 )  CALL timing_start( 'bbl') 
     
    405403      CALL wrk_alloc( jpi, jpj, zub, zvb, ztb, zsb, zdep ) 
    406404      ! 
    407  
    408405      IF( kt == kit000 )  THEN 
    409406         IF(lwp)  WRITE(numout,*) 
     
    411408         IF(lwp)  WRITE(numout,*) '~~~~~~~~~~' 
    412409      ENDIF 
    413  
    414410      !                                        !* bottom temperature, salinity, velocity and depth 
    415411#if defined key_vectopt_loop 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90

    r3294 r3876  
    2727   USE oce            ! ocean: variables 
    2828   USE dom_oce        ! ocean: domain variables 
    29    USE trdmod_oce     ! ocean: trend variables 
    30    USE trdtra         ! active tracers: trends 
     29   USE trd_oce        ! trends: ocean variables 
     30   USE trdtra         ! trends manager: tracers  
    3131   USE zdf_oce        ! ocean: vertical physics 
    3232   USE phycst         ! physical constants 
     
    4747   PUBLIC   dtacof_zoom  ! routine called by in both tradmp.F90 and trcdmp.F90 
    4848 
    49    !                                !!* Namelist namtra_dmp : T & S newtonian damping * 
     49   !                                         !!* Namelist namtra_dmp : T & S newtonian damping * 
    5050   LOGICAL, PUBLIC ::   ln_tradmp = .TRUE.    !: internal damping flag 
    5151   INTEGER         ::   nn_hdmp   =   -1      ! = 0/-1/'latitude' for damping over T and S 
     
    111111      ! 
    112112      CALL wrk_alloc( jpi, jpj, jpk, jpts,  zts_dta ) 
     113      ! 
    113114      !                           !==   input T-S data at kt   ==! 
    114115      CALL dta_tsd( kt, zts_dta )            ! read and interpolates T-S data at kt 
     
    171172      ! 
    172173      IF( l_trdtra )   THEN       ! trend diagnostic 
    173          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_dmp, ttrdmp ) 
    174          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_dmp, strdmp ) 
     174         CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ttrdmp ) 
     175         CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, strdmp ) 
    175176      ENDIF 
    176177      !                           ! Control print 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90

    r3294 r3876  
    2323   USE traldf_iso_grif ! lateral mixing          (tra_ldf_iso_grif routine) 
    2424   USE traldf_lap      ! lateral mixing               (tra_ldf_lap routine) 
    25    USE trdmod_oce      ! ocean space and time domain 
    26    USE trdtra          ! ocean active tracers trends 
     25   USE trd_oce         ! trends: ocean variables 
     26   USE trdtra          ! trends manager: tracers  
    2727   USE prtctl          ! Print control 
    2828   USE in_out_manager  ! I/O manager 
     
    3535   PRIVATE 
    3636 
    37    PUBLIC   tra_ldf         ! called by step.F90  
    38    PUBLIC   tra_ldf_init    ! called by opa.F90  
     37   PUBLIC   tra_ldf        ! called by step.F90  
     38   PUBLIC   tra_ldf_init   ! called by opa.F90  
    3939   ! 
    4040   INTEGER ::   nldf = 0   ! type of lateral diffusion used defined from ln_traldf_... namlist logicals) 
     
    112112         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    113113         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    114          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_ldf, ztrdt ) 
    115          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_ldf, ztrds ) 
     114         CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrdt ) 
     115         CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrds ) 
    116116         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )  
    117117      ENDIF 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/tranpc.F90

    r3294 r3876  
    1717   USE dom_oce         ! ocean space and time domain 
    1818   USE zdf_oce         ! ocean vertical physics 
    19    USE trdmod_oce      ! ocean active tracer trends 
    20    USE trdtra          ! ocean active tracer trends 
     19   USE trd_oce         ! trends: ocean variables 
     20   USE trdtra          ! trends manager: tracers  
    2121   USE eosbn2          ! equation of state (eos routine)  
    2222   USE lbclnk          ! lateral boundary conditions (or mpp link) 
     
    5454      !! 
    5555      !! ** Action  : - (ta,sa) after the application od the npc scheme 
    56       !!              - save the associated trends (ttrd,strd) ('key_trdtra') 
     56      !!              - save the associated trends (l_trdtra=T) 
    5757      !! 
    5858      !! References : Madec, et al., 1991, JPO, 21, 9, 1349-1371. 
     
    196196         !                                                ! =============== 
    197197         !  
     198       
     199         ! Lateral boundary conditions on ( ta, sa )   ( Unchanged sign) 
     200         CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. )   ;   CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. ) 
     201 
    198202         IF( l_trdtra )   THEN         ! save the Non penetrative mixing trends for diagnostic 
    199203            ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    200204            ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    201             CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_npc, ztrdt ) 
    202             CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_npc, ztrds ) 
     205            CALL trd_tra( kt, 'TRA', jp_tem, jptra_npc, ztrdt ) 
     206            CALL trd_tra( kt, 'TRA', jp_sal, jptra_npc, ztrds ) 
    203207            CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    204208         ENDIF 
    205209       
    206          ! Lateral boundary conditions on ( ta, sa )   ( Unchanged sign) 
    207          ! ------------------------------============ 
    208          CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. )   ;   CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. ) 
    209        
    210  
    211          !  2. non penetrative convective scheme statistics 
    212          !  ----------------------------------------------- 
     210         ! non penetrative convective scheme statistics 
    213211         IF( nn_npcp /= 0 .AND. MOD( kt, nn_npcp ) == 0 ) THEN 
    214212            IF(lwp) WRITE(numout,*)' kt=',kt, ' number of statically instable',   & 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90

    r3294 r3876  
    2727   USE dom_oce         ! ocean space and time domain variables  
    2828   USE sbc_oce         ! surface boundary condition: ocean 
    29    USE zdf_oce         ! ??? 
     29   USE zdf_oce         ! ocean vertical mixing 
    3030   USE domvvl          ! variable volume 
    3131   USE dynspg_oce      ! surface     pressure gradient variables 
    3232   USE dynhpg          ! hydrostatic pressure gradient  
    33    USE trdmod_oce      ! ocean space and time domain variables  
    34    USE trdtra          ! ocean active tracers trends  
    35    USE phycst 
    36    USE obc_oce 
     33   USE trd_oce         ! trends: ocean variables 
     34   USE trdtra          ! trends manager: tracers  
     35   USE traqsr          ! penetrative solar radiation (needed for nksr) 
     36   USE phycst          ! physical constant 
     37   USE ldftra_oce      ! lateral physics on tracers 
     38   USE bdy_oce         ! BDY open boundary condition variables 
     39   USE bdytra          ! BDY open boundary condition (bdy_tra routine) 
     40   USE obc_oce         ! open boundary condition variables 
    3741   USE obctra          ! open boundary condition (obc_tra routine) 
    38    USE bdy_oce 
    39    USE bdytra          ! open boundary condition (bdy_tra routine) 
     42   ! 
    4043   USE in_out_manager  ! I/O manager 
    4144   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    4245   USE prtctl          ! Print control 
    43    USE traqsr          ! penetrative solar radiation (needed for nksr) 
     46   USE wrk_nemo        ! Memory allocation 
     47   USE timing          ! Timing 
    4448#if defined key_agrif 
    4549   USE agrif_opa_update 
    4650   USE agrif_opa_interp 
    4751#endif 
    48    USE wrk_nemo        ! Memory allocation 
    49    USE timing          ! Timing 
    5052 
    5153   IMPLICIT NONE 
     
    132134         ztrdt(:,:,:) = tsn(:,:,:,jp_tem)  
    133135         ztrds(:,:,:) = tsn(:,:,:,jp_sal) 
     136         IF( ln_traldf_iso ) THEN              ! diagnose the "pure" Kz diffusive trend  
     137            CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 
     138            CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds ) 
     139         ENDIF 
    134140      ENDIF 
    135141 
     
    159165            ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 
    160166         END DO 
    161          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_atf, ztrdt ) 
    162          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_atf, ztrds ) 
     167         CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     168         CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 
    163169         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    164170      END IF 
     
    168174         &                       tab3d_2=tsn(:,:,:,jp_sal), clinfo2=       ' Sn: ', mask2=tmask ) 
    169175      ! 
    170       ! 
    171       IF( nn_timing == 1 )  CALL timing_stop('tra_nxt') 
     176      IF( nn_timing == 1 )   CALL timing_stop('tra_nxt') 
    172177      ! 
    173178   END SUBROUTINE tra_nxt 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90

    r3680 r3876  
    1313 
    1414   !!---------------------------------------------------------------------- 
    15    !!   tra_qsr      : trend due to the solar radiation penetration 
    16    !!   tra_qsr_init : solar radiation penetration initialization 
     15   !!   tra_qsr       : trend due to the solar radiation penetration 
     16   !!   tra_qsr_init  : solar radiation penetration initialization 
    1717   !!---------------------------------------------------------------------- 
    18    USE oce             ! ocean dynamics and active tracers 
    19    USE dom_oce         ! ocean space and time domain 
    20    USE sbc_oce         ! surface boundary condition: ocean 
    21    USE trc_oce         ! share SMS/Ocean variables 
    22    USE trdmod_oce      ! ocean variables trends 
    23    USE trdtra          ! ocean active tracers trends  
    24    USE in_out_manager  ! I/O manager 
    25    USE phycst          ! physical constants 
    26    USE prtctl          ! Print control 
    27    USE iom             ! I/O manager 
    28    USE fldread         ! read input fields 
    29    USE lib_mpp         ! MPP library 
     18   USE oce            ! ocean dynamics and active tracers 
     19   USE dom_oce        ! ocean space and time domain 
     20   USE sbc_oce        ! surface boundary condition: ocean 
     21   USE trc_oce        ! share SMS/Ocean variables 
     22   USE trd_oce        ! trends: ocean variables 
     23   USE trdtra         ! trends manager: tracers  
     24   USE phycst         ! physical constants 
     25   ! 
     26   USE in_out_manager ! I/O manager 
     27   USE prtctl         ! Print control 
     28   USE iom            ! I/O manager 
     29   USE fldread        ! read input fields 
     30   USE lib_mpp        ! MPP library 
    3031   USE wrk_nemo       ! Memory Allocation 
    3132   USE timing         ! Timing 
    32  
    3333 
    3434   IMPLICIT NONE 
     
    4848   REAL(wp), PUBLIC ::   rn_si1     = 23.0_wp   !: deepest depth of extinction (water type I)       (2 bands) 
    4949    
    50    ! Module variables 
    51    REAL(wp) ::   xsi0r                           !: inverse of rn_si0 
    52    REAL(wp) ::   xsi1r                           !: inverse of rn_si1 
     50   INTEGER , PUBLIC ::   nksr   !: levels below which the light cannot penetrate ( depth larger than 391 m) 
     51 
     52   REAL(wp)                  ::   xsi0r, xsi1r        ! inverse of rn_si0 and rn_si1, resp. 
     53   REAL(wp), DIMENSION(3,61) ::   rkrgb               ! tabulated attenuation coefficients for RGB absorption 
    5354   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_chl   ! structure of input Chl (file informations, fields read) 
    54    INTEGER, PUBLIC ::   nksr              ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    55    REAL(wp), DIMENSION(3,61) ::   rkrgb   !: tabulated attenuation coefficients for RGB absorption 
    5655 
    5756   !! * Substitutions 
     
    8786      !! 
    8887      !! ** Action  : - update ta with the penetrative solar radiation trend 
    89       !!              - save the trend in ttrd ('key_trdtra') 
     88      !!              - send the trend to trdtra (l_trdtra=T) 
    9089      !! 
    9190      !! Reference  : Jerlov, N. G., 1968 Optical Oceanography, Elsevier, 194pp. 
    9291      !!              Lengaigne et al. 2007, Clim. Dyn., V28, 5, 503-516. 
    9392      !!---------------------------------------------------------------------- 
    94       ! 
    9593      INTEGER, INTENT(in) ::   kt     ! ocean time-step 
    9694      ! 
     
    116114      ENDIF 
    117115 
    118       IF( l_trdtra ) THEN      ! Save ta and sa trends 
     116      IF( l_trdtra ) THEN      ! Save temperature trend 
    119117         CALL wrk_alloc( jpi, jpj, jpk, ztrdt )  
    120118         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     
    141139      !                                        Compute now qsr tracer content field 
    142140      !                                        ************************************ 
    143        
    144141      !                                           ! ============================================== ! 
    145142      IF( lk_qsr_bio .AND. ln_qsr_bio ) THEN      !  bio-model fluxes  : all vertical coordinates  ! 
     
    168165            IF( nn_chldta == 1 .OR. lk_vvl ) THEN            !*  Variable Chlorophyll or ocean volume 
    169166               ! 
    170                IF( nn_chldta == 1 ) THEN                             !* Variable Chlorophyll 
     167               IF( nn_chldta == 1 ) THEN                             !- Variable Chlorophyll 
    171168                  ! 
    172169                  CALL fld_read( kt, 1, sf_chl )                         ! Read Chl data and provides it at the current time step 
     
    184181                     END DO 
    185182                  END DO 
    186                ELSE                                            ! Variable ocean volume but constant chrlorophyll 
    187                   zchl = 0.05                                     ! constant chlorophyll 
     183               ELSE                                                  !- Variable ocean volume but constant chrlorophyll 
     184                  zchl = 0.05                                           ! constant chlorophyll 
    188185                  irgb = NINT( 41 + 20.*LOG10( zchl ) + 1.e-15 ) 
    189                   zekb(:,:) = rkrgb(1,irgb)                       ! Separation in R-G-B depending of the chlorophyll  
     186                  zekb(:,:) = rkrgb(1,irgb)                             ! Separation in R-G-B depending of the chlorophyll  
    190187                  zekg(:,:) = rkrgb(2,irgb) 
    191188                  zekr(:,:) = rkrgb(3,irgb) 
    192189               ENDIF 
    193190               ! 
    194                zcoef  = ( 1. - rn_abs ) / 3.e0                        ! equi-partition in R-G-B 
    195                ze0(:,:,1) = rn_abs  * qsr(:,:) 
    196                ze1(:,:,1) = zcoef * qsr(:,:) 
    197                ze2(:,:,1) = zcoef * qsr(:,:) 
    198                ze3(:,:,1) = zcoef * qsr(:,:) 
    199                zea(:,:,1) =         qsr(:,:) 
     191               zcoef  = ( 1. - rn_abs ) / 3.e0                       !- equi-partition in R-G-B 
     192               ze0(:,:,1) = rn_abs * qsr(:,:) 
     193               ze1(:,:,1) =  zcoef * qsr(:,:) 
     194               ze2(:,:,1) =  zcoef * qsr(:,:) 
     195               ze3(:,:,1) =  zcoef * qsr(:,:) 
     196               zea(:,:,1) =          qsr(:,:) 
    200197               ! 
    201198               DO jk = 2, nksr+1 
     
    283280      IF( l_trdtra ) THEN     ! qsr tracers trends saved for diagnostics 
    284281         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    285          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_qsr, ztrdt ) 
     282         CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt ) 
    286283         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt )  
    287284      ENDIF 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90

    r3764 r3876  
    1818   USE dom_oce         ! ocean space domain variables 
    1919   USE phycst          ! physical constant 
     20   USE sbcmod          ! ln_rnf   
     21   USE sbcrnf          ! River runoff   
    2022   USE traqsr          ! solar radiation penetration 
    21    USE trdmod_oce      ! ocean trends  
    22    USE trdtra          ! ocean trends 
     23   USE trd_oce         ! trends: ocean variables 
     24   USE trdtra          ! trends manager: tracers  
     25   ! 
    2326   USE in_out_manager  ! I/O manager 
    2427   USE prtctl          ! Print control 
    25    USE sbcrnf          ! River runoff   
    26    USE sbcmod          ! ln_rnf   
    27    USE iom 
     28   USE iom             ! I/O library 
    2829   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2930   USE wrk_nemo        ! Memory Allocation 
     
    9192      !!         where emp, the surface freshwater budget (evaporation minus 
    9293      !!         precipitation minus runoff) given in kg/m2/s is divided 
    93       !!         by rau0 = 1020 kg/m3 (density of sea water) to obtain m/s.     
     94      !!         by rau0 = 1035 kg/m3 (density of sea water) to obtain m/s.     
    9495      !!         Note: even though Fwe does not appear explicitly for  
    9596      !!         temperature in this routine, the heat carried by the water 
     
    107108      !! ** Action  : - Update the 1st level of (ta,sa) with the trend associated 
    108109      !!                with the tracer surface boundary condition  
    109       !!              - save the trend it in ttrd ('key_trdtra') 
     110      !!              - send trends to trdtra module (l_trdtra=T) 
    110111      !!---------------------------------------------------------------------- 
    111112      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     
    124125      ENDIF 
    125126 
    126       IF( l_trdtra )   THEN                    !* Save ta and sa trends 
     127      IF( l_trdtra ) THEN                    !* Save ta and sa trends 
    127128         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds )  
    128129         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     
    137138 
    138139      !---------------------------------------- 
    139       !        EMP, EMPS and QNS effects 
     140      !        EMP, SFX and QNS effects 
    140141      !---------------------------------------- 
    141142      !                                          Set before sbc tracer content fields 
     
    146147              & iom_varid( numror, 'sbc_hc_b', ldstop = .FALSE. ) > 0 ) THEN 
    147148            IF(lwp) WRITE(numout,*) '          nit000-1 surface tracer content forcing fields red in the restart file' 
    148             zfact = 0.5e0 
     149            zfact = 0.5_wp 
    149150            CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem) )   ! before heat content sbc trend 
    150151            CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal) )   ! before salt content sbc trend 
    151152         ELSE                                         ! No restart or restart not found: Euler forward time stepping 
    152             zfact = 1.e0 
    153             sbc_tsc_b(:,:,:) = 0.e0 
     153            zfact = 1._wp 
     154            sbc_tsc_b(:,:,:) = 0._wp 
    154155         ENDIF 
    155156      ELSE                                         ! Swap of forcing fields 
    156157         !                                         ! ---------------------- 
    157          zfact = 0.5e0 
     158         zfact = 0.5_wp 
    158159         sbc_tsc_b(:,:,:) = sbc_tsc(:,:,:) 
    159160      ENDIF 
     
    226227      ENDIF 
    227228  
    228       IF( l_trdtra )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
     229      IF( l_trdtra )   THEN                      ! save the trends for further diagnostics 
    229230         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 
    230231         ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 
    231          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_nsr, ztrdt ) 
    232          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_nsr, ztrds ) 
     232         CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt ) 
     233         CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds ) 
    233234         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )  
    234235      ENDIF 
  • branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90

    r3294 r3876  
    1919   USE sbc_oce         ! surface boundary condition: ocean 
    2020   USE dynspg_oce 
    21  
    2221   USE trazdf_exp      ! vertical diffusion: explicit (tra_zdf_exp     routine) 
    2322   USE trazdf_imp      ! vertical diffusion: implicit (tra_zdf_imp     routine) 
    24  
    2523   USE ldftra_oce      ! ocean active tracers: lateral physics 
    26    USE trdmod_oce      ! ocean active tracers: lateral physics 
    27    USE trdtra      ! ocean tracers trends  
     24   USE trd_oce         ! trends: ocean variables 
     25   USE trdtra          ! trends manager: tracers  
     26   ! 
    2827   USE in_out_manager  ! I/O manager 
    2928   USE prtctl          ! Print control 
     
    9695            ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dtra(jk) ) - ztrds(:,:,jk) 
    9796         END DO 
    98          CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_zdf, ztrdt ) 
    99          CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_zdf, ztrds ) 
     97         CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdf, ztrdt ) 
     98         CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdf, ztrds ) 
    10099         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
    101100      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.