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 12495 for NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/tests/ISOMIP+/MY_SRC/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2020-03-02T09:10:34+01:00 (4 years ago)
Author:
smasson
Message:

dev_r12472_ASINTER-05: update to trunk@12493, see #2156

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12472_ASINTER-05_Masson_CurrentFeedback/tests/ISOMIP+/MY_SRC/eosbn2.F90

    r12353 r12495  
    191191      !!                   ***  ROUTINE eos_insitu  *** 
    192192      !! 
    193       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     193      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    194194      !!       potential temperature and salinity using an equation of state 
    195195      !!       selected in the nameos namelist 
    196196      !! 
    197       !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rau0 ) / rau0 
     197      !! ** Method  :   prd(t,s,z) = ( rho(t,s,z) - rho0 ) / rho0 
    198198      !!         with   prd    in situ density anomaly      no units 
    199199      !!                t      TEOS10: CT or EOS80: PT      Celsius 
     
    201201      !!                z      depth                        meters 
    202202      !!                rho    in situ density              kg/m^3 
    203       !!                rau0   reference density            kg/m^3 
     203      !!                rho0   reference density            kg/m^3 
    204204      !! 
    205205      !!     ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). 
     
    210210      !! 
    211211      !!     ln_seos : simplified equation of state 
    212       !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rau0 
     212      !!              prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rho0 
    213213      !!              linear case function of T only: rn_alpha<>0, other coefficients = 0 
    214214      !!              linear eos function of T and S: rn_alpha and rn_beta<>0, other coefficients=0 
     
    216216      !! 
    217217      !!     ln_leos : linear ISOMIP equation of state 
    218       !!              prd(t,s,z) = ( -a0*(T-T0) + b0*(S-S0) ) / rau0 
     218      !!              prd(t,s,z) = ( -a0*(T-T0) + b0*(S-S0) ) / rho0 
    219219      !!              setup for ISOMIP linear eos 
    220220      !! 
     
    273273                  zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    274274                  ! 
    275                   prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm  ! density anomaly (masked) 
     275                  prd(ji,jj,jk) = (  zn * r1_rho0 - 1._wp  ) * ztm  ! density anomaly (masked) 
    276276                  ! 
    277277               END DO 
     
    293293                     &  - rn_nu * zt * zs 
    294294                     !                                  
    295                   prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
     295                  prd(ji,jj,jk) = zn * r1_rho0 * ztm                ! density anomaly (masked) 
    296296               END DO 
    297297            END DO 
     
    308308                  ztm = tmask(ji,jj,jk) 
    309309                  ! 
    310                   zn =  rau0 * ( - rn_a0 * zt + rn_b0 * zs ) 
     310                  zn =  rho0 * ( - rn_a0 * zt + rn_b0 * zs ) 
    311311                  !                                  
    312                   prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
     312                  prd(ji,jj,jk) = zn * r1_rho0 * ztm                ! density anomaly (masked) 
    313313               END DO 
    314314            END DO 
     
    328328      !!                  ***  ROUTINE eos_insitu_pot  *** 
    329329      !! 
    330       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) and the 
     330      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) and the 
    331331      !!      potential volumic mass (Kg/m3) from potential temperature and 
    332332      !!      salinity fields using an equation of state selected in the 
     
    410410                        prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp)                      ! potential density referenced at the surface 
    411411                        ! 
    412                         prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rau0 - 1._wp  )   ! density anomaly (masked) 
     412                        prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rho0 - 1._wp  )   ! density anomaly (masked) 
    413413                     END DO 
    414414                     prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos 
     
    454454                     prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
    455455                     ! 
    456                      prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     456                     prd(ji,jj,jk) = (  zn * r1_rho0 - 1._wp  ) * ztm      ! density anomaly (masked) 
    457457                  END DO 
    458458               END DO 
     
    473473                     &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs   & 
    474474                     &  - rn_nu * zt * zs 
    475                   prhop(ji,jj,jk) = ( rau0 + zn ) * ztm 
     475                  prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 
    476476                  !                                                     ! density anomaly (masked) 
    477477                  zn = zn - ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zh 
    478                   prd(ji,jj,jk) = zn * r1_rau0 * ztm 
     478                  prd(ji,jj,jk) = zn * r1_rho0 * ztm 
    479479                  ! 
    480480               END DO 
     
    492492                  ztm = tmask(ji,jj,jk) 
    493493                  !                                                     ! potential density referenced at the surface 
    494                   zn =  rau0 * ( - rn_a0 * zt + rn_b0 * zs ) 
    495                   prhop(ji,jj,jk) = ( rau0 + zn ) * ztm 
     494                  zn =  rho0 * ( - rn_a0 * zt + rn_b0 * zs ) 
     495                  prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 
    496496                  !                                                     ! density anomaly (masked) 
    497                   prd(ji,jj,jk) = zn * r1_rau0 * ztm 
     497                  prd(ji,jj,jk) = zn * r1_rho0 * ztm 
    498498                  ! 
    499499               END DO 
     
    514514      !!                  ***  ROUTINE eos_insitu_2d  *** 
    515515      !! 
    516       !! ** Purpose :   Compute the in situ density (ratio rho/rau0) from 
     516      !! ** Purpose :   Compute the in situ density (ratio rho/rho0) from 
    517517      !!      potential temperature and salinity using an equation of state 
    518518      !!      selected in the nameos namelist. * 2D field case 
     
    569569               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    570570               ! 
    571                prd(ji,jj) = zn * r1_rau0 - 1._wp               ! unmasked in situ density anomaly 
     571               prd(ji,jj) = zn * r1_rho0 - 1._wp               ! unmasked in situ density anomaly 
    572572               ! 
    573573            END DO 
     
    589589                  &  - rn_nu * zt * zs 
    590590                  ! 
    591                prd(ji,jj) = zn * r1_rau0               ! unmasked in situ density anomaly 
     591               prd(ji,jj) = zn * r1_rho0               ! unmasked in situ density anomaly 
    592592               ! 
    593593            END DO 
     
    605605               zh    = pdep (ji,jj)                         ! depth at the partial step level 
    606606               ! 
    607                zn =  rau0 * ( - rn_a0 * zt + rn_b0 * zs ) 
    608                   ! 
    609                prd(ji,jj) = zn * r1_rau0               ! unmasked in situ density anomaly 
     607               zn =  rho0 * ( - rn_a0 * zt + rn_b0 * zs ) 
     608                  ! 
     609               prd(ji,jj) = zn * r1_rho0               ! unmasked in situ density anomaly 
    610610               ! 
    611611            END DO 
     
    676676                  zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    677677                  ! 
    678                   pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm 
     678                  pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm 
    679679                  ! 
    680680                  ! beta 
     
    697697                  zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    698698                  ! 
    699                   pab(ji,jj,jk,jp_sal) = zn / zs * r1_rau0 * ztm 
     699                  pab(ji,jj,jk,jp_sal) = zn / zs * r1_rho0 * ztm 
    700700                  ! 
    701701               END DO 
     
    714714                  ! 
    715715                  zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    716                   pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm   ! alpha 
     716                  pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm   ! alpha 
    717717                  ! 
    718718                  zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    719                   pab(ji,jj,jk,jp_sal) = zn * r1_rau0 * ztm   ! beta 
     719                  pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm   ! beta 
    720720                  ! 
    721721               END DO 
     
    733733                  ztm = tmask(ji,jj,jk)                   ! land/sea bottom mask = surf. mask 
    734734                  ! 
    735                   zn  = rn_a0 * rau0 
    736                   pab(ji,jj,jk,jp_tem) = zn * r1_rau0 * ztm   ! alpha 
    737                   ! 
    738                   zn  = rn_b0 * rau0 
    739                   pab(ji,jj,jk,jp_sal) = zn * r1_rau0 * ztm   ! beta 
     735                  zn  = rn_a0 * rho0 
     736                  pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm   ! alpha 
     737                  ! 
     738                  zn  = rn_b0 * rho0 
     739                  pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm   ! beta 
    740740                  ! 
    741741               END DO 
     
    809809               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    810810               ! 
    811                pab(ji,jj,jp_tem) = zn * r1_rau0 
     811               pab(ji,jj,jp_tem) = zn * r1_rho0 
    812812               ! 
    813813               ! beta 
     
    830830               zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    831831               ! 
    832                pab(ji,jj,jp_sal) = zn / zs * r1_rau0 
     832               pab(ji,jj,jp_sal) = zn / zs * r1_rho0 
    833833               ! 
    834834               ! 
     
    848848               ! 
    849849               zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    850                pab(ji,jj,jp_tem) = zn * r1_rau0   ! alpha 
     850               pab(ji,jj,jp_tem) = zn * r1_rho0   ! alpha 
    851851               ! 
    852852               zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    853                pab(ji,jj,jp_sal) = zn * r1_rau0   ! beta 
     853               pab(ji,jj,jp_sal) = zn * r1_rho0   ! beta 
    854854               ! 
    855855            END DO 
     
    867867               zh    = pdep (ji,jj)                   ! depth at the partial step level 
    868868               ! 
    869                zn  = rn_a0 * rau0 
    870                pab(ji,jj,jp_tem) = zn * r1_rau0   ! alpha 
    871                ! 
    872                zn  = rn_b0 * rau0 
    873                pab(ji,jj,jp_sal) = zn * r1_rau0   ! beta 
     869               zn  = rn_a0 * rho0 
     870               pab(ji,jj,jp_tem) = zn * r1_rho0   ! alpha 
     871               ! 
     872               zn  = rn_b0 * rho0 
     873               pab(ji,jj,jp_sal) = zn * r1_rho0   ! beta 
    874874               ! 
    875875            END DO 
     
    941941         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    942942         ! 
    943          pab(jp_tem) = zn * r1_rau0 
     943         pab(jp_tem) = zn * r1_rho0 
    944944         ! 
    945945         ! beta 
     
    962962         zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    963963         ! 
    964          pab(jp_sal) = zn / zs * r1_rau0 
     964         pab(jp_sal) = zn / zs * r1_rho0 
    965965         ! 
    966966         ! 
     
    973973         ! 
    974974         zn  = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 
    975          pab(jp_tem) = zn * r1_rau0   ! alpha 
     975         pab(jp_tem) = zn * r1_rho0   ! alpha 
    976976         ! 
    977977         zn  = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 
    978          pab(jp_sal) = zn * r1_rau0   ! beta 
     978         pab(jp_sal) = zn * r1_rho0   ! beta 
    979979         ! 
    980980      CASE( np_leos )                  !==  linear ISOMIP EOS  ==! 
     
    984984         zh    = pdep                    ! depth at the partial step level 
    985985         ! 
    986          zn  = rn_a0 * rau0 
    987          pab(jp_tem) = zn * r1_rau0   ! alpha 
    988          ! 
    989          zn  = rn_b0 * rau0 
    990          pab(jp_sal) = zn * r1_rau0   ! beta 
     986         zn  = rn_a0 * rho0 
     987         pab(jp_tem) = zn * r1_rho0   ! alpha 
     988         ! 
     989         zn  = rn_b0 * rho0 
     990         pab(jp_sal) = zn * r1_rho0   ! beta 
    991991         ! 
    992992      CASE DEFAULT 
     
    12141214      !! ** Method  :   PE is defined analytically as the vertical  
    12151215      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    1216       !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rau0 gz ) / rau0 gz - rd 
     1216      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 
    12171217      !!                                                      = 1/z * /int_0^z rd dz - rd  
    12181218      !!                                where rd is the density anomaly (see eos_rhd function) 
    12191219      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
    1220       !!                    ab_pe(1) = - 1/(rau0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
    1221       !!                    ab_pe(2) =   1/(rau0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
     1220      !!                    ab_pe(1) = - 1/(rho0 gz) * dPE/dT + drd/dT = - d(pen)/dT 
     1221      !!                    ab_pe(2) =   1/(rho0 gz) * dPE/dS + drd/dS =   d(pen)/dS 
    12221222      !! 
    12231223      !! ** Action  : - pen         : PE anomaly given at T-points 
     
    12671267                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    12681268                  ! 
    1269                   ppen(ji,jj,jk)  = zn * zh * r1_rau0 * ztm 
     1269                  ppen(ji,jj,jk)  = zn * zh * r1_rho0 * ztm 
    12701270                  ! 
    12711271                  ! alphaPE non-linear anomaly 
     
    12821282                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    12831283                  !                               
    1284                   pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rau0 * ztm 
     1284                  pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 
    12851285                  ! 
    12861286                  ! betaPE non-linear anomaly 
     
    12971297                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    12981298                  !                               
    1299                   pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rau0 * ztm 
     1299                  pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 
    13001300                  ! 
    13011301               END DO 
     
    13121312                  zh  = gdept(ji,jj,jk,Kmm)              ! depth in meters  at t-point 
    13131313                  ztm = tmask(ji,jj,jk)                ! tmask 
    1314                   zn  = 0.5_wp * zh * r1_rau0 * ztm 
     1314                  zn  = 0.5_wp * zh * r1_rho0 * ztm 
    13151315                  !                                    ! Potential Energy 
    13161316                  ppen(ji,jj,jk) = ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zn 
     
    13321332                  zh  = gdept(ji,jj,jk,Kmm)                ! depth in meters  at t-point 
    13331333                  ztm = tmask(ji,jj,jk)                  ! tmask 
    1334                   zn  = 0.5_wp * zh * r1_rau0 * ztm 
     1334                  zn  = 0.5_wp * zh * r1_rho0 * ztm 
    13351335                  !                                    ! Potential Energy 
    13361336                  ppen(ji,jj,jk) = 0. 
     
    13791379      IF(lwm) WRITE( numond, nameos ) 
    13801380      ! 
    1381       rau0        = 1027.51_wp     !: volumic mass of reference     [kg/m3] 
     1381      rho0        = 1027.51_wp     !: volumic mass of reference     [kg/m3] 
    13821382      rcp         = 3974.00_wp     !: heat capacity     [J/K] 
    13831383      ! 
     
    17931793            WRITE(numout,*) '   ==>>>   use of simplified eos:    ' 
    17941794            WRITE(numout,*) '              rhd(dT=T-10,dS=S-35,Z) = [-a0*(1+lambda1/2*dT+mu1*Z)*dT ' 
    1795             WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rau0' 
     1795            WRITE(numout,*) '                                       + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rho0' 
    17961796            WRITE(numout,*) '              with the following coefficients :' 
    17971797            WRITE(numout,*) '                 thermal exp. coef.    rn_a0      = ', rn_a0 
     
    18101810            WRITE(numout,*) 
    18111811            WRITE(numout,*) '          use of linear ISOMIP eos:    rhd(dT=T-(-1),dS=S-(34.2),Z) = ' 
    1812             WRITE(numout,*) '             [ -a0*dT + b0*dS ]/rau0' 
     1812            WRITE(numout,*) '             [ -a0*dT + b0*dS ]/rho0' 
    18131813            WRITE(numout,*) 
    18141814            WRITE(numout,*) '             thermal exp. coef.    rn_a0      = ', rn_a0 
     
    18221822      END SELECT 
    18231823      ! 
    1824       rau0_rcp    = rau0 * rcp  
    1825       r1_rau0     = 1._wp / rau0 
     1824      rho0_rcp    = rho0 * rcp  
     1825      r1_rho0     = 1._wp / rho0 
    18261826      r1_rcp      = 1._wp / rcp 
    1827       r1_rau0_rcp = 1._wp / rau0_rcp  
     1827      r1_rho0_rcp = 1._wp / rho0_rcp  
    18281828      ! 
    18291829      IF(lwp) THEN 
     
    18401840      IF(lwp) WRITE(numout,*) 
    18411841      IF(lwp) WRITE(numout,*) '   Associated physical constant' 
    1842       IF(lwp) WRITE(numout,*) '      volumic mass of reference           rau0  = ', rau0   , ' kg/m^3' 
    1843       IF(lwp) WRITE(numout,*) '      1. / rau0                        r1_rau0  = ', r1_rau0, ' m^3/kg' 
     1842      IF(lwp) WRITE(numout,*) '      volumic mass of reference           rho0  = ', rho0   , ' kg/m^3' 
     1843      IF(lwp) WRITE(numout,*) '      1. / rho0                        r1_rho0  = ', r1_rho0, ' m^3/kg' 
    18441844      IF(lwp) WRITE(numout,*) '      ocean specific heat                 rcp   = ', rcp    , ' J/Kelvin' 
    1845       IF(lwp) WRITE(numout,*) '      rau0 * rcp                       rau0_rcp = ', rau0_rcp 
    1846       IF(lwp) WRITE(numout,*) '      1. / ( rau0 * rcp )           r1_rau0_rcp = ', r1_rau0_rcp 
     1845      IF(lwp) WRITE(numout,*) '      rho0 * rcp                       rho0_rcp = ', rho0_rcp 
     1846      IF(lwp) WRITE(numout,*) '      1. / ( rho0 * rcp )           r1_rho0_rcp = ', r1_rho0_rcp 
    18471847      ! 
    18481848   END SUBROUTINE eos_init 
Note: See TracChangeset for help on using the changeset viewer.