Changeset 14072 for NEMO/trunk/src/OCE/TRA/eosbn2.F90
- Timestamp:
- 2020-12-04T08:48:38+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/TRA/eosbn2.F90
r14010 r14072 31 31 !! bn2 : compute the Brunt-Vaisala frequency 32 32 !! 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 34 34 !! eos_rab_3d : compute in situ thermal/haline expansion ratio 35 35 !! eos_rab_2d : compute in situ thermal/haline expansion ratio for 2d fields … … 46 46 USE in_out_manager ! I/O manager 47 47 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) 49 49 USE prtctl ! Print control 50 50 USE lbclnk ! ocean lateral boundary conditions … … 63 63 END INTERFACE 64 64 ! 65 INTERFACE eos_fzp 65 INTERFACE eos_fzp 66 66 MODULE PROCEDURE eos_fzp_2d, eos_fzp_0d 67 67 END INTERFACE … … 89 89 90 90 ! !!! simplified eos coefficients (default value: Vallis 2006) 91 REAL(wp) :: rn_a0 = 1.6550e-1_wp ! thermal expansion coeff. 92 REAL(wp) :: rn_b0 = 7.6554e-1_wp ! saline expansion coeff. 93 REAL(wp) :: rn_lambda1 = 5.9520e-2_wp ! cabbeling coeff. in T^2 94 REAL(wp) :: rn_lambda2 = 5.4914e-4_wp ! cabbeling coeff. in S^2 95 REAL(wp) :: rn_mu1 = 1.4970e-4_wp ! thermobaric coeff. in T 96 REAL(wp) :: rn_mu2 = 1.1090e-5_wp ! thermobaric coeff. in S 97 REAL(wp) :: rn_nu = 2.4341e-3_wp ! cabbeling coeff. in theta*salt 98 91 REAL(wp) :: rn_a0 = 1.6550e-1_wp ! thermal expansion coeff. 92 REAL(wp) :: rn_b0 = 7.6554e-1_wp ! saline expansion coeff. 93 REAL(wp) :: rn_lambda1 = 5.9520e-2_wp ! cabbeling coeff. in T^2 94 REAL(wp) :: rn_lambda2 = 5.4914e-4_wp ! cabbeling coeff. in S^2 95 REAL(wp) :: rn_mu1 = 1.4970e-4_wp ! thermobaric coeff. in T 96 REAL(wp) :: rn_mu2 = 1.1090e-5_wp ! thermobaric coeff. in S 97 REAL(wp) :: rn_nu = 2.4341e-3_wp ! cabbeling coeff. in theta*salt 98 99 99 ! TEOS10/EOS80 parameters 100 100 REAL(wp) :: r1_S0, r1_T0, r1_Z0, rdeltaS 101 101 102 102 ! EOS parameters 103 103 REAL(wp) :: EOS000 , EOS100 , EOS200 , EOS300 , EOS400 , EOS500 , EOS600 … … 117 117 REAL(wp) :: EOS022 118 118 REAL(wp) :: EOS003 , EOS103 119 REAL(wp) :: EOS013 120 119 REAL(wp) :: EOS013 120 121 121 ! ALPHA parameters 122 122 REAL(wp) :: ALP000 , ALP100 , ALP200 , ALP300 , ALP400 , ALP500 … … 133 133 REAL(wp) :: ALP012 134 134 REAL(wp) :: ALP003 135 135 136 136 ! BETA parameters 137 137 REAL(wp) :: BET000 , BET100 , BET200 , BET300 , BET400 , BET500 … … 160 160 REAL(wp) :: PEN002 , PEN102 161 161 REAL(wp) :: PEN012 162 162 163 163 ! ALPHA_PEN parameters 164 164 REAL(wp) :: APE000 , APE100 , APE200 , APE300 … … 295 295 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs - rn_mu2*zh ) * zs & 296 296 & - rn_nu * zt * zs 297 ! 297 ! 298 298 prd(ji,jj,jk) = zn * r1_rho0 * ztm ! density anomaly (masked) 299 299 END_3D … … 448 448 END_3D 449 449 ENDIF 450 450 451 451 CASE( np_seos ) !== simplified EOS ==! 452 452 ! … … 997 997 !! *** ROUTINE bn2 *** 998 998 !! 999 !! ** Purpose : Compute the local Brunt-Vaisala frequency at the 999 !! ** Purpose : Compute the local Brunt-Vaisala frequency at the 1000 1000 !! time-step of the input arguments 1001 1001 !! … … 1004 1004 !! N.B. N^2 is set one for all to zero at jk=1 in istate module. 1005 1005 !! 1006 !! ** Action : pn2 : square of the brunt-vaisala frequency at w-point 1006 !! ** Action : pn2 : square of the brunt-vaisala frequency at w-point 1007 1007 !! 1008 1008 !!---------------------------------------------------------------------- … … 1021 1021 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 1022 1022 zrw = ( gdepw(ji,jj,jk ,Kmm) - gdept(ji,jj,jk,Kmm) ) & 1023 & / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) ) 1024 ! 1025 zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw 1023 & / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) ) 1024 ! 1025 zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw 1026 1026 zbw = pab(ji,jj,jk,jp_sal) * (1. - zrw) + pab(ji,jj,jk-1,jp_sal) * zrw 1027 1027 ! … … 1151 1151 CALL ctl_stop( 'eos_fzp_2d:', ctmp1 ) 1152 1152 ! 1153 END SELECT 1153 END SELECT 1154 1154 ! 1155 1155 END SUBROUTINE eos_fzp_2d_t … … 1208 1208 !! ** Purpose : Calculates nonlinear anomalies of alpha_PE, beta_PE and PE at T-points 1209 1209 !! 1210 !! ** Method : PE is defined analytically as the vertical 1210 !! ** Method : PE is defined analytically as the vertical 1211 1211 !! primitive of EOS times -g integrated between 0 and z>0. 1212 1212 !! pen is the nonlinear bsq-PE anomaly: pen = ( PE - rho0 gz ) / rho0 gz - rd 1213 !! = 1/z * /int_0^z rd dz - rd 1213 !! = 1/z * /int_0^z rd dz - rd 1214 1214 !! where rd is the density anomaly (see eos_rhd function) 1215 1215 !! ab_pe are partial derivatives of PE anomaly with respect to T and S: … … 1275 1275 ! 1276 1276 zn = ( zn2 * zh + zn1 ) * zh + zn0 1277 ! 1277 ! 1278 1278 pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rho0 * ztm 1279 1279 ! … … 1290 1290 ! 1291 1291 zn = ( zn2 * zh + zn1 ) * zh + zn0 1292 ! 1292 ! 1293 1293 pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rho0 * ztm 1294 1294 ! … … 1370 1370 IF(lwp) WRITE(numout,*) ' ==>>> use of TEOS-10 equation of state (cons. temp. and abs. salinity)' 1371 1371 ! 1372 l_useCT = .TRUE. ! model temperature is Conservative temperature 1372 l_useCT = .TRUE. ! model temperature is Conservative temperature 1373 1373 ! 1374 1374 rdeltaS = 32._wp … … 1751 1751 1752 1752 r1_S0 = 0.875_wp/35.16504_wp ! Used to convert CT in potential temperature when using bulk formulae (eos_pt_from_ct) 1753 1753 1754 1754 IF(lwp) THEN 1755 1755 WRITE(numout,*) … … 1775 1775 END SELECT 1776 1776 ! 1777 rho0_rcp = rho0 * rcp 1777 rho0_rcp = rho0 * rcp 1778 1778 r1_rho0 = 1._wp / rho0 1779 1779 r1_rcp = 1._wp / rcp 1780 r1_rho0_rcp = 1._wp / rho0_rcp 1780 r1_rho0_rcp = 1._wp / rho0_rcp 1781 1781 ! 1782 1782 IF(lwp) THEN
Note: See TracChangeset
for help on using the changeset viewer.