triplets=zip(sounding['temp'],sounding['dwpt'],sounding['pres']) xcoord_T=[] xcoord_Td=[] for a_temp,a_dew,a_pres in triplets: xcoord_T.append(convertTempToSkew(a_temp,a_pres,skew)) xcoord_Td.append(convertTempToSkew(a_dew,a_pres,skew)) # In[8]: get_ipython().magic('matplotlib inline') skew=30 plt.close('all') fig,ax =plt.subplots(1,1,figsize=(8,8)) corners=[-15,35] ax,skew = makeSkewWet(ax,corners=corners,skew=skew) ax.plot(xcoord_T,sounding['pres'],color='k',label='temp') ax.plot(xcoord_Td,sounding['pres'],color='g',label='dew') [line.set(linewidth=3) for line in ax.lines[-2:]] out=ax.set(title=title) # In[9]: from a405thermo.thermlib import find_Tmoist,find_thetaep,find_rsat,find_Tv # # find thetae of the surface air # sfc_press,sfc_temp,sfc_td =[sounding[key][0] for key in ['pres','temp','dwpt']] sfc_press,sfc_temp,sfc_td = sfc_press*100.,sfc_temp+c.Tc,sfc_td+c.Tc sfc_rvap = find_rsat(sfc_temp,sfc_press)
#calculate the temperature and dewpoint sounding #assuming linear profiles slope = (Ttop - Tbot) / (Ptop - Pbot) press = np.arange(Pbot, Ptop - 10, -10) Temp = (Tbot + slope * (press - Pbot)) slope = (Tdewtop - Tdewbot) / (Ptop - Pbot) Tdew = (Tdewbot + slope * (press - Pbot)) # #figure 1: plot the T,Tdew profile only # plt.close('all') fig, ax = plt.subplots(1, 1, figsize=(10, 10)) ax, skew = makeSkewWet(ax,corners=[5,25]) #zoom the axis to focus on layer skewLimits = convertTempToSkew([5, 25], 1.e3, skew) ax.axis([skewLimits[0], skewLimits[1], 1000, 600]) xplot1 = convertTempToSkew(Temp, press, skew) #plot() returns a list of handles for each line plotted Thandle, = ax.plot(xplot1, press, 'k-', linewidth=2.5,label='Temp (deg C)') xplot2 = convertTempToSkew(Tdew, press, skew) TdHandle, = ax.plot(xplot2, press, 'b--', linewidth=2.5,label='Dewpoint (deg C)') ax.set_title('convectively unstable sounding: base at 900 hPa') ax.legend(numpoints=1,loc='best') fig.savefig('initial_sound.png') fig.savefig('initial_sound.pdf') #
A_thetae=find_thetaet(A_Td,A_rv,A_temp,A_press) print('tropical surface thetae: {} K'.format(A_thetae)) A_temp,A_rv,A_rl = tinvert_thetae(A_thetae,A_rv,A_press) fields=['id','temp','rv','rl','press'] A_dict = dict(zip(fields,('A',A_temp,A_rv,A_rl,A_press))) A_tup = calc_enthalpy(A_dict) print(format_tup(A_tup)) # ### B. Lift to 400 hPa and remove 80% of the liquied water # In[201]: plt.close('all') fig,ax = plt.subplots(1,1,figsize=[10,8]) ax,skew = makeSkewWet(ax,corners=[-15,35]) lcl_temp, lcl_press = find_lcl(A_Td,A_tup.temp,A_tup.press) xplot=convertTempToSkew(A_tup.temp - c.Tc,A_tup.press*pa2hPa,skew) bot=ax.plot(xplot, A_tup.press*pa2hPa-10., 'ko', markersize=14, markerfacecolor='k') ax.text(xplot,A_tup.press*pa2hPa-20.,'A',fontsize=30) pressrange=np.arange(1000,395.,-10.) trop_adiabat=[] for press in pressrange: temp,rv,rl = tinvert_thetae(A_thetae,A_tup.rt,press*1.e2) xtemp = convertTempToSkew(temp - c.Tc,press,skew) trop_adiabat.append(xtemp) ax.plot(trop_adiabat,pressrange,'r-',lw=10) B_press=400.e2 #Pa temp,rv,rl = tinvert_thetae(thetae_trop,A_tup.rt,B_press) rl = 0.2*rl #rain out 80% of liquid
thetaC=find_theta(tempC,pressC) thetaB=thetaC tempB=tempA term1=(thetaB/tempB)**(c.cpd/c.Rd) term1=1./term1 pressB=term1*1.e5 tempD=tempC thetaD=thetaA term1=(thetaD/tempD)**(c.cpd/c.Rd) term1=1./term1 pressD=term1*1.e5 plt.close('all') fig,ax = plt.subplots(1,1) corners = [5,30] ax, skew = makeSkewWet(ax,corners=corners) xtempA=convertTempToSkew(tempA - c.Tc,pressA*0.01,skew) xtempB=convertTempToSkew(tempB - c.Tc,pressB*0.01,skew) xtempC=convertTempToSkew(tempC - c.Tc,pressC*0.01,skew) xtempD=convertTempToSkew(tempD - c.Tc,pressD*0.01,skew) ax.text(xtempA,pressA*0.01,'A', fontweight='bold',fontsize= 22, color='b') ax.text(xtempB,pressB*0.01,'B', fontweight='bold',fontsize= 22,color='b') ax.text(xtempC,pressC*0.01,'C', fontweight='bold',fontsize= 22,color='b') ax.text(xtempD,pressD*0.01,'D', fontweight='bold',fontsize= 22, color='b') xmin = convertTempToSkew(corners[0],pressA*0.01,skew) xmax = convertTempToSkew(corners[1],pressA*0.01,skew) ax.axis([xmin, xmax, 1000, 600]) ax.set_title('forward carnot cycle')
def k2c(temp): return (temp - c.Tc) print('here2: {} deg C'.format(n(k2c(300)))) # ### back to midterm question 2: make the tephigram -- with LCLs as black dots # In[2]: get_ipython().magic('matplotlib inline') pa2hPa=1.e-2 from importlib import reload import a405skewT.makeSkewII reload(a405skewT.makeSkewII) from a405skewT.makeSkewII import makeSkewWet fig, ax = plt.subplots(1, 1, figsize=(12, 8)) ax, skew = makeSkewWet(ax,corners=[10,30]) ax.set(ylim=[1000,700]) from a405thermo.thermlib import find_Tmoist,find_rsat,find_Td,tinvert_thetae,convertTempToSkew, find_lcl import a405thermo.thermlib as tl # # set the lcl for 900 hPa to 860 hPa and thetae to 338 K # press=860.e2 thetae_900=338. #K Temp_860=find_Tmoist(thetae_900,press) rv_860=find_rsat(Temp_860,press) rv_900 = rv_860 #vapor is conserved Tdew_860=Temp_860 print("temp,Tdew,rv at LCL press: {} hPa {} C {} C {} kg/kg" .format(n(press*1.e-2),e(k2c(Temp_860)),e(k2c(Tdew_860)),e(rv_900))) # # now descend adiabatically to 900 hPa