Changeset 1795 in lmdz_wrf
- Timestamp:
- Mar 12, 2018, 3:37:19 PM (7 years ago)
- Location:
- trunk/tools
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/diag_tools.py
r1784 r1795 833 833 834 834 return mslpv, mslpdims, mslpvdims 835 836 def Forcompute_psl_ecmwf(ps, hgt, ta1, pa2, unpa1, dimns, dimvns): 837 """ Function to compute the sea-level pressure following Mats Hamrud and Philippe Courtier [Pa] 838 Forcompute_psl_ptarget(ps, hgt, ta1, pa2, unpa1, dimns, dimvns) 839 [ps]= surface pressure values (assuming [[t],y,x]) [Pa] 840 [hgt]= opography (assuming [y,x]) [m] 841 [ta1]= air-temperature values at first half-mass level (assuming [[t],y,x]) [K] 842 [pa2]= pressure values at second full-mass levels (assuming [[t],y,x]) [Pa] 843 [unpa1]= pressure values at first half-mass levels (assuming [[t],y,x]) [Pa] 844 [dimns]= list of the name of the dimensions of [pa] 845 [dimvns]= list of the name of the variables with the values of the 846 dimensions of [pa] 847 """ 848 fname = 'Forcompute_psl_ecmwf' 849 850 vardims = dimns[:] 851 varvdims = dimvns[:] 852 853 if len(pa2.shape) == 3: 854 psl = np.zeros((pa2.shape[0],pa2.shape[1],pa2.shape[2]), dtype=np.float) 855 dx = pa2.shape[2] 856 dy = pa2.shape[1] 857 dt = pa2.shape[0] 858 pslt= fdin.module_fordiagnostics.compute_psl_ecmwf( ps=ps[:].transpose(), \ 859 hgt=hgt[:].transpose(), t=ta1[:].transpose(), press=pa2[:].transpose(), \ 860 unpress=unpa1[:].transpose(), d1=dx, d2=dy, d4=dt) 861 psl = pslt.transpose() 862 else: 863 print errormsg 864 print ' ' + fname + ': rank', len(pa2.shape), 'not ready !!' 865 print ' it only computes 3D [t,y,x] rank values' 866 quit(-1) 867 868 return psl, vardims, varvdims 835 869 836 870 def Forcompute_psl_ptarget(pa, ps, ta, hgt, qv, target_pressure, dimns, dimvns): -
trunk/tools/diagnostics.inf
r1784 r1795 24 24 prw, WRFprw, WRFdens@QVAPOR 25 25 psl, WRFmslp, WRFp@PSFC@HGT@WRFt@QVAPOR 26 psl, WRFpsl_ecmwf, PSFC@HGT@WRFt@WRFp@ZNU@ZNW 26 27 psl, WRFpsl_ptarget, WRFp@PSFC@WRFt@HGT@QVAPOR 27 28 rvor, rvor, U@V -
trunk/tools/diagnostics.py
r1784 r1795 79 79 'OMEGAw', 'RAINTOT', \ 80 80 'rvors', 'td', 'turbulence', 'WRFcape_afwa', 'WRFclivi', 'WRFclwvl', 'WRFgeop', \ 81 'WRFmrso', 'WRFp', 81 'WRFmrso', 'WRFp', 'WRFpsl_ecmwf', \ 82 82 'WRFpsl_ptarget', 'WRFrvors', 'WRFslw', 'ws', 'wds', 'wss', 'WRFheight', \ 83 83 'WRFheightrel', 'WRFua', 'WRFva', 'WRFzwind', 'WRFzwind_log', 'WRFzwindMO'] … … 871 871 ncvar.insert_variable(ncobj, 'zg', diagout, dnames, diagoutvd, newnc) 872 872 873 # WRFmslp_ptarget sea-level pressure following ECMWF method as PSFC, HGT, WRFt, WRFp, ZNU, ZNW 874 elif diagn == 'WRFpsl_ecmwf': 875 var0 = ncobj.variables[depvars[0]][:] 876 var1 = ncobj.variables[depvars[1]][0,:,:] 877 var2 = WRFt[:,0,:,:] 878 var4 = WRFp[:,0,:,:] 879 var5 = ncobj.variables[depvars[4]][0,:] 880 var6 = ncobj.variables[depvars[5]][0,:] 881 882 # This is quite too appriximate!! passing pressure at half-levels to 2nd full 883 # level, using eta values at full (ZNW) and half (ZNU) mass levels 884 var3 = WRFp[:,0,:,:] + (var6[1] - var5[0])*(WRFp[:,1,:,:] - WRFp[:,0,:,:])/ \ 885 (var5[1]-var5[0]) 886 887 dnamesvar = list(ncobj.variables[depvars[0]].dimensions) 888 dvnamesvar = ncvar.var_dim_dimv(dnamesvar,dnames,dvnames) 889 890 diagout = np.zeros(var0.shape, dtype=np.float) 891 diagout, diagoutd, diagoutvd = diag.Forcompute_psl_ecmwf(var0, var1, var2, \ 892 var3, var4, dnamesvar, dvnamesvar) 893 894 # Removing the nonChecking variable-dimensions from the initial list 895 varsadd = [] 896 for nonvd in NONchkvardims: 897 if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd) 898 varsadd.append(nonvd) 899 900 ncvar.insert_variable(ncobj, 'psl', diagout, diagoutd, diagoutvd, newnc) 901 873 902 # WRFmslp_ptarget sea-level pressure following ptarget method as WRFp, PSFC, WRFt, HGT, QVAPOR 874 903 elif diagn == 'WRFpsl_ptarget': -
trunk/tools/module_ForDiagnostics.f90
r1784 r1795 24 24 ! compute_clt3D3: Computation of total cloudiness from a 3D CLDFRA being 3rd dimension the z-dim 25 25 ! compute_clt: Computation of total cloudiness 26 ! compute_psl_ecmwf: Compute sea level pressure using ECMWF method following Mats Hamrud and Philippe Courtier [Pa] 26 27 ! compute_massvertint1D: Subroutine to vertically integrate a 1D variable in eta vertical coordinates 27 28 ! compute_vertint1D: Subroutine to vertically integrate a 1D variable in any vertical coordinates … … 602 603 END SUBROUTINE compute_cape_afwa4D 603 604 605 SUBROUTINE compute_psl_ecmwf(ps, hgt, T, press, unpress, psl, d1, d2, d4) 606 ! Subroutine to compute sea level pressure using ECMWF method following Mats Hamrud and Philippe Courtier [Pa] 607 608 IMPLICIT NONE 609 610 INTEGER, INTENT(in) :: d1, d2, d4 611 REAL(r_k), DIMENSION(d1,d2,d4), INTENT(in) :: ps, T, press, unpress 612 REAL(r_k), DIMENSION(d1,d2), INTENT(in) :: hgt 613 REAL(r_k), DIMENSION(d1,d2,d4), INTENT(out) :: psl 614 615 ! Local 616 INTEGER :: i, j, it 617 618 !!!!!!! Variables 619 ! ps: surface pressure [Pa] 620 ! hgt: terrain height [m] 621 ! T: temperature at first half-mass level [K] 622 ! press: pressure at first full levels [Pa] 623 ! unpress: pressure at first mass (half) levels [Pa] 624 ! psl: sea-level pressure [Pa] 625 626 fname = 'compute_psl_ecmwf' 627 628 DO i=1, d1 629 DO j=1, d2 630 DO it=1, d4 631 CALL var_psl_ecmwf(ps(i,j,it), hgt(i,j), T(i,j,it), unpress(i,j,it), press(i,j,it), & 632 psl(i,j,it)) 633 END DO 634 END DO 635 END DO 636 637 RETURN 638 639 END SUBROUTINE compute_psl_ecmwf 640 604 641 SUBROUTINE compute_zmla_generic4D(tpot, qratio, z, hgt, zmla3D, d1, d2, d3, d4) 605 642 ! Subroutine to compute pbl-height following a generic method -
trunk/tools/module_ForDiagnosticsVars.f90
r1785 r1795 28 28 ! var_cllmh: low, medium, high-cloud [0,1] 29 29 ! var_clt: total cloudiness [0,1] 30 ! var_psl_ecmwf: sea level pressure using ECMWF method following Mats Hamrud and Philippe Courtier [Pa] 30 31 ! var_zmla_generic: Subroutine to compute pbl-height following a generic method 31 32 ! var_zwind: Subroutine to extrapolate the wind at a given height following the 'power law' methodology … … 127 128 END FUNCTION var_clt 128 129 130 SUBROUTINE var_psl_ecmwf(PRPRESS, hgt, PTB, PRESBH, PRESBF, psl) 131 ! Subroutine to compute sea level pressure using ECMWF method following Mats Hamrud and Philippe Courtier 132 ! method found in LMDZ in phylmd/pppmer.F90 in combination with phylmd/ctsar.F90 133 134 ! IMPLICIT ARGUMENTS : CONSTANTS FROM YOMCST,YOMGEM,YOMSTA. 135 ! -------------------- 136 137 IMPLICIT NONE 138 139 REAL, INTENT(in) :: PRPRESS, hgt, PTB, PRESBH, PRESBF 140 REAL, INTENT(out) :: psl 141 142 ! Local 143 REAL :: ghgt, PTSTAR, PT0, ZTSTAR 144 REAL :: ZALPHA, POROG 145 REAL :: ZDTDZSG, ZOROG, ZT0, ZTX, ZTY, ZX, ZY, ZY2 146 REAL, PARAMETER :: RDTDZ1 = -gammav 147 148 !!!!!!! Variables 149 ! PRPRESS: Surface pressure [Pa] 150 ! hgt: Terrain height [m] 151 ! PTB: Temperature first half-level [K] 152 ! PRESBH: Pressure first half-level [Pa] 153 ! PRESBF: Pressure second full-level [Pa] 154 ! psl: sea-level pressure 155 156 fname = 'var_psl_ecmwf' 157 158 ! Height by gravity 159 POROG = hgt*g 160 161 !* 1. COMPUTES SURFACE TEMPERATURE 162 !* THEN STANDARD SURFACE TEMPERATURE. 163 164 ZDTDZSG=-RDTDZ1/g 165 ZALPHA=ZDTDZSG*r_d 166 167 PTSTAR=PTB*(1.0+ZALPHA*(PRESBH/PRESBF-1.0)) 168 PT0=PTSTAR+ZDTDZSG*POROG 169 170 !* 2. POST-PROCESS MSL PRESSURE. 171 ! -------------------------- 172 173 !* 2.1 COMPUTATION OF MODIFIED ALPHA AND TSTAR. 174 175 ZTX=290.5 176 ZTY=255.0 177 178 IF (PTSTAR < ZTY) THEN 179 ZTSTAR=0.5*(ZTY+PTSTAR) 180 ELSEIF (PTSTAR < ZTX) THEN 181 ZTSTAR=PTSTAR 182 ELSE 183 ZTSTAR=0.5*(ZTX+PTSTAR) 184 ENDIF 185 186 ZT0=ZTSTAR+ZDTDZSG*POROG 187 IF (ZTX > ZTSTAR .AND. ZT0 > ZTX) THEN 188 ZT0=ZTX 189 ELSEIF (ZTX <= ZTSTAR .AND. ZT0 > ZTSTAR) THEN 190 ZT0=ZTSTAR 191 ELSE 192 ZT0=PT0 193 ENDIF 194 195 ZOROG=SIGN(MAX(1.0,ABS(POROG)),POROG) 196 ZALPHA=r_d*(ZT0-ZTSTAR)/ZOROG 197 198 !* 2.2 COMPUTATION OF MSL PRESSURE. 199 200 IF (ABS(POROG) >= 0.001) THEN 201 ZX=POROG/(r_d*ZTSTAR) 202 ZY=ZALPHA*ZX 203 ZY2=ZY*ZY 204 205 psl=PRPRESS*EXP(ZX*(1.0-0.5*ZY+1.0/3.*ZY2)) 206 ELSE 207 psl=PRPRESS 208 ENDIF 209 210 RETURN 211 212 END SUBROUTINE var_psl_ecmwf 129 213 130 214 SUBROUTINE compute_psl_ptarget4d2(press, ps, hgt, ta, qv, ptarget, psl, d1, d2, d3, d4)
Note: See TracChangeset
for help on using the changeset viewer.