- Timestamp:
- 2020-03-05T12:21:05+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/r12377_ticket2386
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r12377_ticket2386
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev _r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF5 ^/vendors/AGRIF/dev@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/eosbn2.F90
r12377 r12511 191 191 !! *** ROUTINE eos_insitu *** 192 192 !! 193 !! ** Purpose : Compute the in situ density (ratio rho/r au0) from193 !! ** Purpose : Compute the in situ density (ratio rho/rho0) from 194 194 !! potential temperature and salinity using an equation of state 195 195 !! selected in the nameos namelist 196 196 !! 197 !! ** Method : prd(t,s,z) = ( rho(t,s,z) - r au0 ) / rau0197 !! ** Method : prd(t,s,z) = ( rho(t,s,z) - rho0 ) / rho0 198 198 !! with prd in situ density anomaly no units 199 199 !! t TEOS10: CT or EOS80: PT Celsius … … 201 201 !! z depth meters 202 202 !! rho in situ density kg/m^3 203 !! r au0 reference density kg/m^3203 !! rho0 reference density kg/m^3 204 204 !! 205 205 !! ln_teos10 : polynomial TEOS-10 equation of state is used for rho(t,s,z). … … 210 210 !! 211 211 !! 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) ) / r au0212 !! prd(t,s,z) = ( -a0*(1+lambda/2*(T-T0)+mu*z+nu*(S-S0))*(T-T0) + b0*(S-S0) ) / rho0 213 213 !! linear case function of T only: rn_alpha<>0, other coefficients = 0 214 214 !! linear eos function of T and S: rn_alpha and rn_beta<>0, other coefficients=0 … … 267 267 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 268 268 ! 269 prd(ji,jj,jk) = ( zn * r1_r au0 - 1._wp ) * ztm ! density anomaly (masked)269 prd(ji,jj,jk) = ( zn * r1_rho0 - 1._wp ) * ztm ! density anomaly (masked) 270 270 ! 271 271 END_3D … … 283 283 & - rn_nu * zt * zs 284 284 ! 285 prd(ji,jj,jk) = zn * r1_r au0 * ztm ! density anomaly (masked)285 prd(ji,jj,jk) = zn * r1_rho0 * ztm ! density anomaly (masked) 286 286 END_3D 287 287 ! … … 299 299 !! *** ROUTINE eos_insitu_pot *** 300 300 !! 301 !! ** Purpose : Compute the in situ density (ratio rho/r au0) and the301 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 302 302 !! potential volumic mass (Kg/m3) from potential temperature and 303 303 !! salinity fields using an equation of state selected in the … … 379 379 prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp) ! potential density referenced at the surface 380 380 ! 381 prd(ji,jj,jk) = prd(ji,jj,jk) + ( zn_sto(jsmp) * r1_r au0 - 1._wp ) ! density anomaly (masked)381 prd(ji,jj,jk) = prd(ji,jj,jk) + ( zn_sto(jsmp) * r1_rho0 - 1._wp ) ! density anomaly (masked) 382 382 END DO 383 383 prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos … … 419 419 prhop(ji,jj,jk) = zn0 * ztm ! potential density referenced at the surface 420 420 ! 421 prd(ji,jj,jk) = ( zn * r1_r au0 - 1._wp ) * ztm ! density anomaly (masked)421 prd(ji,jj,jk) = ( zn * r1_rho0 - 1._wp ) * ztm ! density anomaly (masked) 422 422 END_3D 423 423 ENDIF … … 434 434 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 435 435 & - rn_nu * zt * zs 436 prhop(ji,jj,jk) = ( r au0 + zn ) * ztm436 prhop(ji,jj,jk) = ( rho0 + zn ) * ztm 437 437 ! ! density anomaly (masked) 438 438 zn = zn - ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zh 439 prd(ji,jj,jk) = zn * r1_r au0 * ztm439 prd(ji,jj,jk) = zn * r1_rho0 * ztm 440 440 ! 441 441 END_3D … … 454 454 !! *** ROUTINE eos_insitu_2d *** 455 455 !! 456 !! ** Purpose : Compute the in situ density (ratio rho/r au0) from456 !! ** Purpose : Compute the in situ density (ratio rho/rho0) from 457 457 !! potential temperature and salinity using an equation of state 458 458 !! selected in the nameos namelist. * 2D field case … … 508 508 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 509 509 ! 510 prd(ji,jj) = zn * r1_r au0 - 1._wp ! unmasked in situ density anomaly510 prd(ji,jj) = zn * r1_rho0 - 1._wp ! unmasked in situ density anomaly 511 511 ! 512 512 END_2D … … 524 524 & - rn_nu * zt * zs 525 525 ! 526 prd(ji,jj) = zn * r1_r au0 ! unmasked in situ density anomaly526 prd(ji,jj) = zn * r1_rho0 ! unmasked in situ density anomaly 527 527 ! 528 528 END_2D … … 588 588 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 589 589 ! 590 pab(ji,jj,jk,jp_tem) = zn * r1_r au0 * ztm590 pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm 591 591 ! 592 592 ! beta … … 609 609 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 610 610 ! 611 pab(ji,jj,jk,jp_sal) = zn / zs * r1_r au0 * ztm611 pab(ji,jj,jk,jp_sal) = zn / zs * r1_rho0 * ztm 612 612 ! 613 613 END_3D … … 622 622 ! 623 623 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 624 pab(ji,jj,jk,jp_tem) = zn * r1_r au0 * ztm ! alpha624 pab(ji,jj,jk,jp_tem) = zn * r1_rho0 * ztm ! alpha 625 625 ! 626 626 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 627 pab(ji,jj,jk,jp_sal) = zn * r1_r au0 * ztm ! beta627 pab(ji,jj,jk,jp_sal) = zn * r1_rho0 * ztm ! beta 628 628 ! 629 629 END_3D … … 694 694 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 695 695 ! 696 pab(ji,jj,jp_tem) = zn * r1_r au0696 pab(ji,jj,jp_tem) = zn * r1_rho0 697 697 ! 698 698 ! beta … … 715 715 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 716 716 ! 717 pab(ji,jj,jp_sal) = zn / zs * r1_r au0717 pab(ji,jj,jp_sal) = zn / zs * r1_rho0 718 718 ! 719 719 ! … … 729 729 ! 730 730 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 731 pab(ji,jj,jp_tem) = zn * r1_r au0 ! alpha731 pab(ji,jj,jp_tem) = zn * r1_rho0 ! alpha 732 732 ! 733 733 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 734 pab(ji,jj,jp_sal) = zn * r1_r au0 ! beta734 pab(ji,jj,jp_sal) = zn * r1_rho0 ! beta 735 735 ! 736 736 END_2D … … 799 799 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 800 800 ! 801 pab(jp_tem) = zn * r1_r au0801 pab(jp_tem) = zn * r1_rho0 802 802 ! 803 803 ! beta … … 820 820 zn = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 821 821 ! 822 pab(jp_sal) = zn / zs * r1_r au0822 pab(jp_sal) = zn / zs * r1_rho0 823 823 ! 824 824 ! … … 831 831 ! 832 832 zn = rn_a0 * ( 1._wp + rn_lambda1*zt + rn_mu1*zh ) + rn_nu*zs 833 pab(jp_tem) = zn * r1_r au0 ! alpha833 pab(jp_tem) = zn * r1_rho0 ! alpha 834 834 ! 835 835 zn = rn_b0 * ( 1._wp - rn_lambda2*zs - rn_mu2*zh ) - rn_nu*zt 836 pab(jp_sal) = zn * r1_r au0 ! beta836 pab(jp_sal) = zn * r1_rho0 ! beta 837 837 ! 838 838 CASE DEFAULT … … 1052 1052 !! ** Method : PE is defined analytically as the vertical 1053 1053 !! primitive of EOS times -g integrated between 0 and z>0. 1054 !! pen is the nonlinear bsq-PE anomaly: pen = ( PE - r au0 gz ) / rau0 gz - rd1054 !! pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 1055 1055 !! = 1/z * /int_0^z rd dz - rd 1056 1056 !! where rd is the density anomaly (see eos_rhd function) 1057 1057 !! ab_pe are partial derivatives of PE anomaly with respect to T and S: 1058 !! ab_pe(1) = - 1/(r au0 gz) * dPE/dT + drd/dT = - d(pen)/dT1059 !! ab_pe(2) = 1/(r au0 gz) * dPE/dS + drd/dS = d(pen)/dS1058 !! ab_pe(1) = - 1/(rho0 gz) * dPE/dT + drd/dT = - d(pen)/dT 1059 !! ab_pe(2) = 1/(rho0 gz) * dPE/dS + drd/dS = d(pen)/dS 1060 1060 !! 1061 1061 !! ** Action : - pen : PE anomaly given at T-points … … 1103 1103 zn = ( zn2 * zh + zn1 ) * zh + zn0 1104 1104 ! 1105 ppen(ji,jj,jk) = zn * zh * r1_r au0 * ztm1105 ppen(ji,jj,jk) = zn * zh * r1_rho0 * ztm 1106 1106 ! 1107 1107 ! alphaPE non-linear anomaly … … 1118 1118 zn = ( zn2 * zh + zn1 ) * zh + zn0 1119 1119 ! 1120 pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_r au0 * ztm1120 pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 1121 1121 ! 1122 1122 ! betaPE non-linear anomaly … … 1133 1133 zn = ( zn2 * zh + zn1 ) * zh + zn0 1134 1134 ! 1135 pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_r au0 * ztm1135 pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 1136 1136 ! 1137 1137 END_3D … … 1144 1144 zh = gdept(ji,jj,jk,Kmm) ! depth in meters at t-point 1145 1145 ztm = tmask(ji,jj,jk) ! tmask 1146 zn = 0.5_wp * zh * r1_r au0 * ztm1146 zn = 0.5_wp * zh * r1_rho0 * ztm 1147 1147 ! ! Potential Energy 1148 1148 ppen(ji,jj,jk) = ( rn_a0 * rn_mu1 * zt + rn_b0 * rn_mu2 * zs ) * zn … … 1186 1186 IF(lwm) WRITE( numond, nameos ) 1187 1187 ! 1188 r au0 = 1026._wp !: volumic mass of reference [kg/m3]1188 rho0 = 1026._wp !: volumic mass of reference [kg/m3] 1189 1189 rcp = 3991.86795711963_wp !: heat capacity [J/K] 1190 1190 ! … … 1598 1598 WRITE(numout,*) ' ==>>> use of simplified eos: ' 1599 1599 WRITE(numout,*) ' rhd(dT=T-10,dS=S-35,Z) = [-a0*(1+lambda1/2*dT+mu1*Z)*dT ' 1600 WRITE(numout,*) ' + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / r au0'1600 WRITE(numout,*) ' + b0*(1+lambda2/2*dT+mu2*Z)*dS - nu*dT*dS] / rho0' 1601 1601 WRITE(numout,*) ' with the following coefficients :' 1602 1602 WRITE(numout,*) ' thermal exp. coef. rn_a0 = ', rn_a0 … … 1617 1617 END SELECT 1618 1618 ! 1619 r au0_rcp = rau0 * rcp1620 r1_r au0 = 1._wp / rau01619 rho0_rcp = rho0 * rcp 1620 r1_rho0 = 1._wp / rho0 1621 1621 r1_rcp = 1._wp / rcp 1622 r1_r au0_rcp = 1._wp / rau0_rcp1622 r1_rho0_rcp = 1._wp / rho0_rcp 1623 1623 ! 1624 1624 IF(lwp) THEN … … 1635 1635 IF(lwp) WRITE(numout,*) 1636 1636 IF(lwp) WRITE(numout,*) ' Associated physical constant' 1637 IF(lwp) WRITE(numout,*) ' volumic mass of reference r au0 = ', rau0 , ' kg/m^3'1638 IF(lwp) WRITE(numout,*) ' 1. / r au0 r1_rau0 = ', r1_rau0, ' m^3/kg'1637 IF(lwp) WRITE(numout,*) ' volumic mass of reference rho0 = ', rho0 , ' kg/m^3' 1638 IF(lwp) WRITE(numout,*) ' 1. / rho0 r1_rho0 = ', r1_rho0, ' m^3/kg' 1639 1639 IF(lwp) WRITE(numout,*) ' ocean specific heat rcp = ', rcp , ' J/Kelvin' 1640 IF(lwp) WRITE(numout,*) ' r au0 * rcp rau0_rcp = ', rau0_rcp1641 IF(lwp) WRITE(numout,*) ' 1. / ( r au0 * rcp ) r1_rau0_rcp = ', r1_rau0_rcp1640 IF(lwp) WRITE(numout,*) ' rho0 * rcp rho0_rcp = ', rho0_rcp 1641 IF(lwp) WRITE(numout,*) ' 1. / ( rho0 * rcp ) r1_rho0_rcp = ', r1_rho0_rcp 1642 1642 ! 1643 1643 END SUBROUTINE eos_init
Note: See TracChangeset
for help on using the changeset viewer.