Changeset 2098 in lmdz_wrf
- Timestamp:
- Aug 25, 2018, 5:10:51 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/generic_tools.py
r2085 r2098 173 173 # vals_around: Function to provide the 3x3 values around a given j,i point 174 174 # xtrm_nx: Function to provide the extreme (a percentage above min,max) of a series of values 175 # WRF_percenlevels: Function to compute eta-levels for WRF following a percentage distribution 175 176 # WRFsetup: Function to check the set-up of a WRF model namelist or from any other model 176 177 … … 13750 13751 return 13751 13752 13753 def WRF_percenlevels(Nlevs=38, ps=1000., pt=20.): 13754 """ Function to compute eta-levels for WRF following a percentage distribution 13755 Nlevs: number of levels 13756 pt: p_top pressure [hPa] 13757 ps: p_sfc pressure [hPa] 13758 p_sfc - 975 hPa: 4 % 13759 975 - 900 hPa: 28 % 13760 900 - 850 hPa: 10 % 13761 850 - 600 hPa: 25 % 13762 600 - 450 hPa: 12 % 13763 450 - 250 hPa: 12 % 13764 250 - p_top: 9 % 13765 """ 13766 fname = 'WRF_percenlevels' 13767 13768 # 72 numbers 13769 #dps = {900.:5., 850.: 10., 700.: 15., 600.: 20., 450.: 10., 250.: 20., 50.: 30.} 13770 #Nlevp: {450.0: 15, 900.0: 20, 50.0: 6, 850.0: 5, 600.0: 5, 250.0: 10, 700.0: 10} % 13771 #900.0 : 27.7777777778 13772 #850.0 : 6.94444444444 13773 #700.0 : 13.8888888889 13774 #600.0 : 6.94444444444 13775 #450.0 : 20.8333333333 13776 #250.0 : 13.8888888889 13777 #50.0 : 8.33333333333 13778 13779 # Assigning percentage of levels per interval 13780 # Computing dps 13781 #dppsperce = {900.: 29., 850.: 6., 700.: 15., 600.: 7., 450.:21., 250.:14., 50.: 8.} 13782 dppsperce = {990: 4., 900.: 28., 850.: 10., 600.: 25., 450.:12., 250.:12., pt: 9.} 13783 dpps0 = dppsperce.keys() 13784 dpps0.sort(reverse=True) 13785 13786 dps = {} 13787 13788 # Assigning number of levels 13789 nplevs = {} 13790 percen = 0 13791 Ntotlev = 0 13792 # Removing 1st and last levels 13793 Nlevs1 = Nlevs - 2 13794 for dpp in dpps0: 13795 nlev = int(Nlevs1*dppsperce[dpp]/100.) 13796 nplevs[dpp] = nlev 13797 Ntotlev = Ntotlev + nlev 13798 13799 print ' ' + fname + ' final total number of levels:', Ntotlev, \ 13800 'of initial Nlevs:', Nlevs, 'TOT %:', np.sum(dppsperce.values()) 13801 13802 # Re-distributing rest of levels on first intervals 13803 if Ntotlev < Nlevs1: 13804 Nextralevs = Nlevs1 - Ntotlev 13805 print ' ' + fname + ': Ntotlev:', Ntotlev, 're-distributing:', Nextralevs, \ 13806 'extra levels !!' 13807 for i in range(Nextralevs): nplevs[dpps0[i]] = nplevs[dpps0[i]] + 1 13808 else: 13809 Nextralevs = 0 13810 13811 print ' ' + fname + ' final number of levels:', nplevs, 'sum:', \ 13812 np.sum(nplevs.values()) + 2 13813 13814 # Assigning pressure-differenctials 13815 pp0 = ps 13816 print ' uppper_limit_section [hPa] dp [hPa] _______' 13817 for dpp in dpps0: 13818 nlev = nplevs[dpp] 13819 # Adding an extra level to meet final pt 13820 if dpp == dpps0[len(dpps0)-1]: nlev = nlev + 1 13821 dp = pp0 - dpp 13822 ddp = dp / nlev 13823 dps[dpp] = ddp 13824 percen = percen + dppsperce[dpp] 13825 print ' ', '{:.2f}'.format(dpp), ' ', ddp 13826 pp0 = dpp 13827 13828 p = [ps] 13829 dpps = list(dps.keys()) 13830 dpps.sort(reverse=True) 13831 iiz = 1 13832 Ntotlevs = 0 13833 for dpp in dpps: 13834 dp = dps[dpp] 13835 Ntotlevs = Ntotlevs + nplevs[dpp] 13836 for iz in range(nplevs[dpp]): 13837 p.append(p[iiz-1] - dp) 13838 iiz = iiz + 1 13839 #print 'iz:', iz, p[iz], dp, pt 13840 p.append(pt) 13841 p = np.array(p) 13842 eta = (p-pt)/(ps-pt) 13843 dz=p.shape[0] 13844 13845 ofilen = 'WRFpercen_p' + str(Nlevs) + 'lev.dat' 13846 of = open(ofilen, 'w') 13847 of.write('# ' + str(Nlevs) + ' i-lev[1] pressure[2] eta[3] dp[4]__________\n') 13848 for i in range(dz-1): 13849 of.write(str(i) + ' ' + str(p[i]) + ' ' + str(eta[i]) + ' ' + str(p[i]-p[i+1]) + '\n') 13850 i = dz-1 13851 of.write(str(i) + ' ' + str(pt) + ' ' + str(eta[i]) + ' 0.\n') 13852 13853 of.close() 13854 print fname + ": succesfull written of file '" + ofilen + "' !!" 13855 13856 return 13857 13858 print WRF_percenlevels() 13859 13752 13860 #quit() 13753 13861 13754 13755
Note: See TracChangeset
for help on using the changeset viewer.