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 15015 for NEMO/branches/2021/ticket2680_C1D_PAPA/tests/ISOMIP+/MY_SRC/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2021-06-17T19:17:25+02:00 (3 years ago)
Author:
gsamson
Message:

merge trunk into branch (#2680)

Location:
NEMO/branches/2021/ticket2680_C1D_PAPA
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/ticket2680_C1D_PAPA

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette@14244        sette 
         11^/utils/CI/sette@HEAD        sette 
         12 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/tests/ISOMIP+/MY_SRC/eosbn2.F90

    r14857 r15015  
    3131   !!   bn2           : compute the Brunt-Vaisala frequency 
    3232   !!   eos_pt_from_ct: compute the potential temperature from the Conservative Temperature 
    33    !!   eos_rab       : generic interface of in situ thermal/haline expansion ratio  
     33   !!   eos_rab       : generic interface of in situ thermal/haline expansion ratio 
    3434   !!   eos_rab_3d    : compute in situ thermal/haline expansion ratio 
    3535   !!   eos_rab_2d    : compute in situ thermal/haline expansion ratio for 2d fields 
     
    4646   USE in_out_manager ! I/O manager 
    4747   USE lib_mpp        ! MPP library 
    48    USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     48   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    4949   USE prtctl         ! Print control 
    5050   USE lbclnk         ! ocean lateral boundary conditions 
     
    6363   END INTERFACE 
    6464   ! 
    65    INTERFACE eos_fzp  
     65   INTERFACE eos_fzp 
    6666      MODULE PROCEDURE eos_fzp_2d, eos_fzp_0d 
    6767   END INTERFACE 
     
    9191 
    9292   !                               !!!  simplified eos coefficients (default value: Vallis 2006) 
    93    REAL(wp), PUBLIC ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff.  
    94    REAL(wp), PUBLIC ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff.  
    95    REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2         
    96    REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2         
    97    REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T   
    98    REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S   
    99    REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt   
    100     
     93   REAL(wp), PUBLIC ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff. 
     94   REAL(wp), PUBLIC ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff. 
     95   REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2 
     96   REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2 
     97   REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T 
     98   REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S 
     99   REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt 
     100 
    101101   ! TEOS10/EOS80 parameters 
    102102   REAL(wp) ::   r1_S0, r1_T0, r1_Z0, rdeltaS 
    103     
     103 
    104104   ! EOS parameters 
    105105   REAL(wp) ::   EOS000 , EOS100 , EOS200 , EOS300 , EOS400 , EOS500 , EOS600 
     
    119119   REAL(wp) ::   EOS022 
    120120   REAL(wp) ::   EOS003 , EOS103 
    121    REAL(wp) ::   EOS013  
    122     
     121   REAL(wp) ::   EOS013 
     122 
    123123   ! ALPHA parameters 
    124124   REAL(wp) ::   ALP000 , ALP100 , ALP200 , ALP300 , ALP400 , ALP500 
     
    135135   REAL(wp) ::   ALP012 
    136136   REAL(wp) ::   ALP003 
    137     
     137 
    138138   ! BETA parameters 
    139139   REAL(wp) ::   BET000 , BET100 , BET200 , BET300 , BET400 , BET500 
     
    162162   REAL(wp) ::   PEN002 , PEN102 
    163163   REAL(wp) ::   PEN012 
    164     
     164 
    165165   ! ALPHA_PEN parameters 
    166166   REAL(wp) ::   APE000 , APE100 , APE200 , APE300 
     
    241241      INTEGER                                 , INTENT(in   ) ::   ktts, ktrd, ktdep 
    242242      REAL(wp), DIMENSION(A2D_T(ktts) ,JPK,JPTS), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celsius] 
    243       !                                                               ! 2 : salinity               [psu] 
     243      !                                                                  ! 2 : salinity               [psu] 
    244244      REAL(wp), DIMENSION(A2D_T(ktrd) ,JPK     ), INTENT(  out) ::   prd   ! in situ density            [-] 
    245245      REAL(wp), DIMENSION(A2D_T(ktdep),JPK     ), INTENT(in   ) ::   pdep  ! depth                      [m] 
     
    301301               &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs - rn_mu2*zh ) * zs   & 
    302302               &  - rn_nu * zt * zs 
    303                !                                  
     303               ! 
    304304            prd(ji,jj,jk) = zn * r1_rho0 * ztm                ! density anomaly (masked) 
    305305         END_3D 
     
    354354      INTEGER                                  , INTENT(in   ) ::   ktts, ktrd, ktrhop, ktdep 
    355355      REAL(wp), DIMENSION(A2D_T(ktts)  ,JPK,JPTS), INTENT(in   ) ::   pts    ! 1 : potential temperature  [Celsius] 
    356       !                                                                ! 2 : salinity               [psu] 
     356      !                                                                    ! 2 : salinity               [psu] 
    357357      REAL(wp), DIMENSION(A2D_T(ktrd)  ,JPK     ), INTENT(  out) ::   prd    ! in situ density            [-] 
    358358      REAL(wp), DIMENSION(A2D_T(ktrhop),JPK     ), INTENT(  out) ::   prhop  ! potential density (surface referenced) 
     
    467467            END_3D 
    468468         ENDIF 
    469           
     469 
    470470      CASE( np_seos )                !==  simplified EOS  ==! 
    471471         ! 
     
    503503      END SELECT 
    504504      ! 
    505       IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-pot: ', tab3d_2=prhop, clinfo2=' pot : ', kdim=jpk ) 
     505      IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-pot: ', & 
     506         &                                  tab3d_2=prhop, clinfo2=' pot : ', kdim=jpk ) 
    506507      ! 
    507508      IF( ln_timing )   CALL timing_stop('eos-pot') 
     
    534535      INTEGER                            , INTENT(in   ) ::   ktts, ktdep, ktrd 
    535536      REAL(wp), DIMENSION(A2D_T(ktts),JPTS), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celsius] 
    536       !                                                           ! 2 : salinity               [psu] 
     537      !                                                             ! 2 : salinity               [psu] 
    537538      REAL(wp), DIMENSION(A2D_T(ktdep)    ), INTENT(in   ) ::   pdep  ! depth                      [m] 
    538539      REAL(wp), DIMENSION(A2D_T(ktrd)     ), INTENT(  out) ::   prd   ! in situ density 
     
    666667         ! 
    667668         DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
    668                ! 
    669                zt  = pts (ji,jj,jp_tem) * r1_T0                           ! temperature 
    670                zs  = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
    671                ztm = tmask(ji,jj,1)                                         ! tmask 
    672                ! 
    673                zn0 = (((((EOS060*zt   & 
    674                   &   + EOS150*zs+EOS050)*zt   & 
    675                   &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
    676                   &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
    677                   &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
    678                   &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
    679                   &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
    680                   ! 
    681                ! 
    682                prhop(ji,jj) = zn0 * ztm                           ! potential density referenced at the surface 
    683                ! 
    684             END_2D 
     669            ! 
     670            zt  = pts (ji,jj,jp_tem) * r1_T0                           ! temperature 
     671            zs  = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     672            ztm = tmask(ji,jj,1)                                         ! tmask 
     673            ! 
     674            zn0 = (((((EOS060*zt   & 
     675               &   + EOS150*zs+EOS050)*zt   & 
     676               &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     677               &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     678               &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     679               &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     680               &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     681               ! 
     682            ! 
     683            prhop(ji,jj) = zn0 * ztm                           ! potential density referenced at the surface 
     684            ! 
     685         END_2D 
    685686 
    686687      CASE( np_seos )                !==  simplified EOS  ==! 
     
    713714         ! 
    714715      END SELECT 
     716      IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab2d_1=prhop, clinfo1=' pot: ', kdim=1 ) 
    715717      ! 
    716718      IF(sn_cfctl%l_prtctl)   CALL prt_ctl( tab2d_1=prhop, clinfo1=' eos-pot: ' ) 
     
    741743      !! ** Action  : - pab     : thermal/haline expansion ratio at T-points 
    742744      !!---------------------------------------------------------------------- 
    743       INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
     745      INTEGER                                , INTENT(in   ) ::   Kmm   ! time level index 
    744746      INTEGER                                , INTENT(in   ) ::   ktts, ktab 
    745747      REAL(wp), DIMENSION(A2D_T(ktts),JPK,JPTS), INTENT(in   ) ::   pts   ! pot. temperature & salinity 
     
    873875      !! ** Action  : - pab     : thermal/haline expansion ratio at T-points 
    874876      !!---------------------------------------------------------------------- 
    875       INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
     877      INTEGER                            , INTENT(in   ) ::   Kmm   ! time level index 
    876878      INTEGER                            , INTENT(in   ) ::   ktts, ktdep, ktab 
    877879      REAL(wp), DIMENSION(A2D_T(ktts),JPTS), INTENT(in   ) ::   pts    ! pot. temperature & salinity 
     
    11131115      !!                  ***  ROUTINE bn2  *** 
    11141116      !! 
    1115       !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the  
     1117      !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the 
    11161118      !!                time-step of the input arguments 
    11171119      !! 
     
    11201122      !!      N.B. N^2 is set one for all to zero at jk=1 in istate module. 
    11211123      !! 
    1122       !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point  
    1123       !! 
    1124       !!---------------------------------------------------------------------- 
    1125       INTEGER                              , INTENT(in   ) ::   Kmm   ! time level index 
     1124      !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point 
     1125      !! 
     1126      !!---------------------------------------------------------------------- 
     1127      INTEGER                                , INTENT(in   ) ::  Kmm   ! time level index 
    11261128      INTEGER                                , INTENT(in   ) ::  ktab, ktn2 
    1127       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::  pts   ! pot. temperature and salinity   [Celsius,psu] 
     1129      REAL(wp), DIMENSION(jpi,jpj,  jpk,jpts), INTENT(in   ) ::  pts   ! pot. temperature and salinity   [Celsius,psu] 
    11281130      REAL(wp), DIMENSION(A2D_T(ktab),JPK,JPTS), INTENT(in   ) ::  pab   ! thermal/haline expansion coef.  [Celsius-1,psu-1] 
    11291131      REAL(wp), DIMENSION(A2D_T(ktn2),JPK     ), INTENT(  out) ::  pn2   ! Brunt-Vaisala frequency squared [1/s^2] 
     
    11371139      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 2, jpkm1 )      ! interior points only (2=< jk =< jpkm1 ); surface and bottom value set to zero one for all in istate.F90 
    11381140         zrw =   ( gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm) )   & 
    1139             &  / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) )  
    1140             ! 
    1141          zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw  
     1141            &  / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) ) 
     1142            ! 
     1143         zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw 
    11421144         zbw = pab(ji,jj,jk,jp_sal) * (1. - zrw) + pab(ji,jj,jk-1,jp_sal) * zrw 
    11431145         ! 
     
    12111213 
    12121214 
    1213    SUBROUTINE  eos_fzp_2d( psal, ptf, pdep ) 
     1215   SUBROUTINE eos_fzp_2d( psal, ptf, pdep ) 
    12141216      !! 
    12151217      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   )           ::   psal   ! salinity   [psu] 
     
    12341236      !!---------------------------------------------------------------------- 
    12351237      INTEGER                       , INTENT(in   )           ::   kttf 
    1236       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   )           ::   psal   ! salinity   [psu] 
    1237       REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ), OPTIONAL ::   pdep   ! depth      [m] 
     1238      REAL(wp), DIMENSION(jpi,jpj)  , INTENT(in   )           ::   psal   ! salinity   [psu] 
     1239      REAL(wp), DIMENSION(jpi,jpj)  , INTENT(in   ), OPTIONAL ::   pdep   ! depth      [m] 
    12381240      REAL(wp), DIMENSION(A2D_T(kttf)), INTENT(out  )           ::   ptf    ! freezing temperature [Celsius] 
    12391241      ! 
     
    12671269         CALL ctl_stop( 'eos_fzp_2d:', ctmp1 ) 
    12681270         ! 
    1269       END SELECT       
     1271      END SELECT 
    12701272      ! 
    12711273  END SUBROUTINE eos_fzp_2d_t 
     
    13241326      !! ** Purpose :   Calculates nonlinear anomalies of alpha_PE, beta_PE and PE at T-points 
    13251327      !! 
    1326       !! ** Method  :   PE is defined analytically as the vertical  
     1328      !! ** Method  :   PE is defined analytically as the vertical 
    13271329      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    13281330      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 
    1329       !!                                                      = 1/z * /int_0^z rd dz - rd  
     1331      !!                                                      = 1/z * /int_0^z rd dz - rd 
    13301332      !!                                where rd is the density anomaly (see eos_rhd function) 
    13311333      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
     
    13911393               ! 
    13921394            zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1393             !                               
     1395            ! 
    13941396            pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 
    13951397            ! 
     
    14061408               ! 
    14071409            zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1408             !                               
     1410            ! 
    14091411            pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 
    14101412            ! 
     
    15041506         IF(lwp) WRITE(numout,*) '   ==>>>   use of TEOS-10 equation of state (cons. temp. and abs. salinity)' 
    15051507         ! 
    1506          l_useCT = .TRUE.                          ! model temperature is Conservative temperature  
     1508         l_useCT = .TRUE.                          ! model temperature is Conservative temperature 
    15071509         ! 
    15081510         rdeltaS = 32._wp 
     
    18851887 
    18861888         r1_S0  = 0.875_wp/35.16504_wp   ! Used to convert CT in potential temperature when using bulk formulae (eos_pt_from_ct) 
    1887           
     1889 
    18881890         IF(lwp) THEN 
    18891891            WRITE(numout,*) 
     
    19231925      END SELECT 
    19241926      ! 
    1925       rho0_rcp    = rho0 * rcp  
     1927      rho0_rcp    = rho0 * rcp 
    19261928      r1_rho0     = 1._wp / rho0 
    19271929      r1_rcp      = 1._wp / rcp 
    1928       r1_rho0_rcp = 1._wp / rho0_rcp  
     1930      r1_rho0_rcp = 1._wp / rho0_rcp 
    19291931      ! 
    19301932      IF(lwp) THEN 
Note: See TracChangeset for help on using the changeset viewer.