Changeset 11995 for NEMO/branches/2019/dev_r11643_ENHANCE-11_CEthe_Shaconemo_diags/src/OCE/TRA/eosbn2.F90
- Timestamp:
- 2019-11-28T11:35:08+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11643_ENHANCE-11_CEthe_Shaconemo_diags/src/OCE/TRA/eosbn2.F90
r11536 r11995 30 30 !! eos_insitu_2d : Compute the in situ density for 2d fields 31 31 !! bn2 : Compute the Brunt-Vaisala frequency 32 !! bn2 : compute the Brunt-Vaisala frequency33 32 !! eos_pt_from_ct: compute the potential temperature from the Conservative Temperature 34 33 !! eos_rab : generic interface of in situ thermal/haline expansion ratio … … 67 66 END INTERFACE 68 67 ! 68 INTERFACE eos_pt_from_ct 69 MODULE PROCEDURE eos_pt_from_ct_2d, eos_pt_from_ct_3d 70 END INTERFACE 71 69 72 PUBLIC eos ! called by step, istate, tranpc and zpsgrd modules 70 73 PUBLIC bn2 ! called by step module … … 76 79 77 80 ! !!** Namelist nameos ** 78 LOGICAL , PUBLIC :: ln_TEOS10 79 LOGICAL , PUBLIC :: ln_EOS80 80 LOGICAL , PUBLIC :: ln_SEOS 81 LOGICAL , PUBLIC :: ln_TEOS10 82 LOGICAL , PUBLIC :: ln_EOS80 83 LOGICAL , PUBLIC :: ln_SEOS 81 84 82 85 ! Parameters … … 936 939 937 940 938 FUNCTION eos_pt_from_ct ( ctmp, psal ) RESULT( ptmp )941 FUNCTION eos_pt_from_ct_2d( ctmp, psal ) RESULT( ptmp ) 939 942 !!---------------------------------------------------------------------- 940 943 !! *** ROUTINE eos_pt_from_ct *** … … 959 962 !!---------------------------------------------------------------------- 960 963 ! 961 IF( ln_timing ) CALL timing_start('eos_pt_from_ct ')964 IF( ln_timing ) CALL timing_start('eos_pt_from_ct_2d') 962 965 ! 963 966 zdeltaS = 5._wp … … 990 993 END DO 991 994 ! 992 IF( ln_timing ) CALL timing_stop('eos_pt_from_ct') 993 ! 994 END FUNCTION eos_pt_from_ct 995 IF( ln_timing ) CALL timing_stop('eos_pt_from_ct_2d') 996 ! 997 END FUNCTION eos_pt_from_ct_2d 998 999 1000 FUNCTION eos_pt_from_ct_3d( ctmp, psal ) RESULT( ptmp ) 1001 !!---------------------------------------------------------------------- 1002 !! *** ROUTINE eos_pt_from_ct *** 1003 !! 1004 !! ** Purpose : Compute pot.temp. from cons. temp. [Celcius] 1005 !! 1006 !! ** Method : rational approximation (5/3th order) of TEOS-10 algorithm 1007 !! checkvalue: pt=20.02391895 Celsius for sa=35.7g/kg, ct=20degC 1008 !! 1009 !! Reference : TEOS-10, UNESCO 1010 !! Rational approximation to TEOS10 algorithm (rms error on WOA13 values: 4.0e-5 degC) 1011 !!---------------------------------------------------------------------- 1012 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: ctmp ! Cons. Temp [Celcius] 1013 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: psal ! salinity [psu] 1014 ! Leave result array automatic rather than making explicitly allocated 1015 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ptmp ! potential temperature [Celcius] 1016 ! 1017 INTEGER :: ji, jj, jk ! dummy loop indices 1018 REAL(wp) :: zt , zs , ztm ! local scalars 1019 REAL(wp) :: zn , zd ! local scalars 1020 REAL(wp) :: zdeltaS , z1_S0 , z1_T0 1021 !!---------------------------------------------------------------------- 1022 ! 1023 IF ( ln_timing ) CALL timing_start('eos_pt_from_ct_3d') 1024 ! 1025 zdeltaS = 5._wp 1026 z1_S0 = 0.875_wp/35.16504_wp 1027 z1_T0 = 1._wp/40._wp 1028 ! 1029 DO jk = 1, jpkm1 1030 DO jj = 1, jpj 1031 DO ji = 1, jpi 1032 ! 1033 zt = ctmp (ji,jj,jk) * z1_T0 1034 zs = SQRT( ABS( psal(ji,jj,jk) + zdeltaS ) * r1_S0 ) 1035 ztm = tmask(ji,jj,jk) 1036 ! 1037 zn = ((((-2.1385727895e-01_wp*zt & 1038 & - 2.7674419971e-01_wp*zs+1.0728094330_wp)*zt & 1039 & + (2.6366564313_wp*zs+3.3546960647_wp)*zs-7.8012209473_wp)*zt & 1040 & + ((1.8835586562_wp*zs+7.3949191679_wp)*zs-3.3937395875_wp)*zs-5.6414948432_wp)*zt & 1041 & + (((3.5737370589_wp*zs-1.5512427389e+01_wp)*zs+2.4625741105e+01_wp)*zs & 1042 & +1.9912291000e+01_wp)*zs-3.2191146312e+01_wp)*zt & 1043 & + ((((5.7153204649e-01_wp*zs-3.0943149543_wp)*zs+9.3052495181_wp)*zs & 1044 & -9.4528934807_wp)*zs+3.1066408996_wp)*zs-4.3504021262e-01_wp 1045 ! 1046 zd = (2.0035003456_wp*zt & 1047 & -3.4570358592e-01_wp*zs+5.6471810638_wp)*zt & 1048 & + (1.5393993508_wp*zs-6.9394762624_wp)*zs+1.2750522650e+01_wp 1049 ! 1050 ptmp(ji,jj,jk) = ( zt / z1_T0 + zn / zd ) * ztm 1051 ! 1052 END DO 1053 END DO 1054 END DO 1055 ! 1056 IF( ln_timing ) CALL timing_stop('eos_pt_from_ct_3d') 1057 ! 1058 END FUNCTION eos_pt_from_ct_3d 995 1059 996 1060 … … 1651 1715 1652 1716 r1_S0 = 0.875_wp/35.16504_wp ! Used to convert CT in potential temperature when using bulk formulae (eos_pt_from_ct) 1653 1717 1654 1718 IF(lwp) THEN 1655 1719 WRITE(numout,*)
Note: See TracChangeset
for help on using the changeset viewer.