Example #1
0
#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))

#how big is the pressure vector?
numPoints= np.size(press);


#figure 1: cloud base at 900 hPa
plt.figure(1)
skew, ax = convecSkew(1)
#zoom the axis to focus on layer
skewLimits=convertTempToSkew([5,30],1.e3,skew)
plt.axis([skewLimits[0],skewLimits[1],1000,600])
xplot1=convertTempToSkew(Temp,press,skew)
#plot() returns a list of handles for each line plotted
Thandle, = plt.plot(xplot1,press,'k-', linewidth=2.5)
xplot2=convertTempToSkew(Tdew,press,skew)
TdHandle, = plt.plot(xplot2,press,'b--', linewidth=2.5)
plt.title('convectively unstable sounding: base at 900 hPa')

plt.show()
#print -dpdf initial_sound.pdf

#put on the top and bottom LCLs and the thetae sounding
Tlcl=np.zeros(numPoints)
Example #2
0
eqT_bot=30 + c.Tc
eqwv_bot=14*1.e-3
sfT_bot=21 + c.Tc
sfwv_bot=3.e-3
eqwv_top=3.e-3
sfwv_top=3.e-3
ptop=410.e2
pbot=1000.e2

eqTd_bot=findTdwv(eqwv_bot,pbot)
sfTd_bot=findTdwv(sfwv_bot,pbot)
thetae_eq=thetaep(eqTd_bot,eqT_bot,pbot)
thetae_sf=thetaep(sfTd_bot,sfT_bot,pbot)

fig1 = plt.figure(1)
skew, ax1 = convecSkew(1)


pvec=np.arange(ptop, pbot, 1000)
#initialize vectors
Tvec_eq = np.zeros(pvec.size)
Tvec_sf = np.zeros(pvec.size)
wv = np.zeros(pvec.size)
wl = np.zeros(pvec.size)
xcoord_eq = np.zeros(pvec.size)
xcoord_sf = np.zeros(pvec.size)

for i in range(0, len(pvec)):
    Tvec_eq[i], wv[i], wl[i] = tinvert_thetae(thetae_eq, eqwv_bot, pvec[i])
    xcoord_eq[i] = convertTempToSkew(Tvec_eq[i] - c.Tc, pvec[i]*0.01, skew)
    Tvec_sf[i], wv[i], wl[i] = tinvert_thetae(thetae_sf, sfwv_bot, pvec[i])
Example #3
0
dewpoint= sound_var[:,3]
direct= sound_var[:,6]
speed= sound_var[:,7]

plt.figure(1)
plt.semilogy(temp, press)
plt.semilogy(dewpoint, press)
plt.gca().invert_yaxis()
plt.gca().set_ybound((200, 1000))
plt.gca().set_title('littlerock sounding, %s' %var_names[3])
plt.ylabel('pressure (hPa)')
plt.xlabel('temperature (deg C)')
plt.show()

plt.figure(2)
skew, ax2 = convecSkew(2)
xtemp=convertTempToSkew(temp,press,skew)
xdew=convertTempToSkew(dewpoint,press,skew)
plt.semilogy(xtemp,press,'g-',linewidth=4)
plt.semilogy(xdew,press,'b-',linewidth=4)

#use 900 hPa sounding level for adiabat
#array.argmin() finds the index of the min. value of array 
p900_level = np.abs(900 - press).argmin()

thetaeVal=thetaep(dewpoint[p900_level] + c.Tc,temp[p900_level] + c.Tc,press[p900_level]*100.)
pressVals,tempVals =calcAdiabat(press[p900_level]*100.,thetaeVal,200.e2)
xTemp=convertTempToSkew(tempVals - c.Tc,pressVals*1.e-2,skew)
p900_adiabat = plt.semilogy(xTemp,pressVals*1.e-2,'r-',linewidth=4)
xleft=convertTempToSkew(-20,1.e3,skew)
xright=convertTempToSkew(25.,1.e3,skew)
Example #4
0
pressC = 0.7e5
tempC = 5 + c.Tc
thetaA = theta(tempA, pressA)
thetaC = 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.figure(1)
skew, ax1 = convecSkew(1)

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)

plt.text(xtempA, pressA * 0.01, "A", fontweight="bold", fontsize=22, color="b")
plt.text(xtempB, pressB * 0.01, "B", fontweight="bold", fontsize=22, color="b")
plt.text(xtempC, pressC * 0.01, "C", fontweight="bold", fontsize=22, color="b")
plt.text(xtempD, pressD * 0.01, "D", fontweight="bold", fontsize=22, color="b")

xmin = convertTempToSkew(0, pressA * 0.01, skew)
xmax = convertTempToSkew(35, pressA * 0.01, skew)
plt.axis([xmin, xmax, 1000, 600])
plt.title("forward carnot cycle")
sfT_bot = 21 + c.Tc
sfwv_bot = 3.e-3
eqwv_top = 3.e-3
sfwv_top = 3.e-3
ptop = 4e2
pbot = 1000.e2

# Perform the functions as the heat expands
eqTd_bot = findTdwv(eqwv_bot,pbot)
sfTd_bot = findTdwv(sfwv_bot,pbot)
thetae_eq = thetaep(eqTd_bot,eqT_bot,pbot)
thetae_sf = thetaep(sfTd_bot,sfT_bot,pbot)

# plot
fig1 = plt.figure(1)
skew, ax1 = convecSkew(1)

# Initialize vector arrays.
pvec = np.arange(ptop, pbot, 1000)
Tvec_eq = np.zeros(pvec.size)
Tvec_sf = np.zeros(pvec.size)
wv = np.zeros(pvec.size)
wl = np.zeros(pvec.size)
xcoord_eq = np.zeros(pvec.size)
xcoord_sf = np.zeros(pvec.size)

for i in range(0, len(pvec)):
    Tvec_eq[i], wv[i], wl[i] = tinvert_thetae(thetae_eq, eqwv_bot, pvec[i])
    xcoord_eq[i] = convertTempToSkew(Tvec_eq[i] - c.Tc, pvec[i]*0.01, skew)
    Tvec_sf[i], wv[i], wl[i] = tinvert_thetae(thetae_sf, sfwv_bot, pvec[i])
    xcoord_sf[i] = convertTempToSkew(Tvec_sf[i] - c.Tc, pvec[i]*0.01, skew)
Example #6
0
pressC=0.7e5
tempC=5 + c.Tc;
thetaA=theta(tempA,pressA)
thetaC=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.figure(1)
skew, ax1 =convecSkew(1)

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)

plt.text(xtempA,pressA*0.01,'A', fontweight='bold',fontsize= 22, color='b')
plt.text(xtempB,pressB*0.01,'B', fontweight='bold',fontsize= 22,color='b')
plt.text(xtempC,pressC*0.01,'C', fontweight='bold',fontsize= 22,color='b')
plt.text(xtempD,pressD*0.01,'D', fontweight='bold',fontsize= 22, color='b')

xmin = convertTempToSkew(0,pressA*0.01,skew)
xmax = convertTempToSkew(35,pressA*0.01,skew)
plt.axis([xmin, xmax, 1000, 600])
plt.title('forward carnot cycle')