NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Paul: > Does anyone know if it is possible to determine the value of a wet adiabat > on a thermodynamic diagram given the pressure and temperature. I would lke > to interrogate a sounding, determine the value of the wet adiabat that > passes through each point, thereby determining what theta-e ought to > approach in order to break the observed cap. Many years ago, we started doing this by an iterative process that produces excellent results. Below are a bunch of static methods taken from a Java class that deals with sounding and some thermodynamic computations. The last method will show you the technique. Hope this helps. tom /** Virtual Temperature * */ public static double virtualTemperature(double t, double td, double p) { return ( t * (1.0 + .000609*mixingRatio(td, p)) ); } /** saturation vapor pressure over water. t in kelvin. * */ public static double satVapPres(double t) { double coef[]={6.1104546,0.4442351,1.4302099e-2, 2.6454708e-4, 3.0357098e-6, 2.0972268e-8, 6.0487594e-11,-1.469687e-13}; // sat vap pressures every 5C from -50 to -200 double escold[] = { 0.648554685769663908E-01, 0.378319512256073479E-01, 0.222444934288790197E-01, 0.131828928424683120E-01, 0.787402077141244848E-02, 0.473973049488473318E-02, 0.287512035504357928E-02, 0.175743037675810294E-02, 0.108241739518850975E-02, 0.671708939185605941E-03, 0.419964702632039404E-03, 0.264524363863469876E-03, 0.167847963736813220E-03, 0.107285397631620379E-03, 0.690742634496135612E-04, 0.447940489768084267E-04, 0.292570419563937303E-04, 0.192452912634994161E-04, 0.127491372410747951E-04, 0.850507010275505138E-05, 0.571340025334971129E-05, 0.386465029673876238E-05, 0.263210971965005286E-05, 0.180491072930570428E-05, 0.124607850555816049E-05, 0.866070571346870824E-06, 0.605982217668895538E-06, 0.426821197943242768E-06, 0.302616508514379476E-06, 0.215963854234913987E-06, 0.155128954578336869E-06}; double temp = t - 273.16; double retval; if (temp > -50.) { retval = ( coef[0] + temp*(coef[1] + temp*(coef[2] + temp*(coef[3] + temp*(coef[4] + temp*(coef[5] + temp*(coef[6] + temp*coef[7])))))) ); } else { double tt = (-temp - 50.)/5.; int inx = (int) tt; if (inx < escold.length) { retval = escold[inx] + (tt % 1.)*(escold[inx+1]-escold[inx]); } else { retval = 1e-7; } } return retval; } /** mixing ratio * */ public static double mixingRatio(double t, double p) { double e = satVapPres(t); return ( 621.97*e/(p - e) ); } /** temperature at LCL (old SELS method) * */ public static double tempAtLCL(double t, double td) { return (td - (.001296*td - .15772)*(t-td) ); } /** define the parcel's theta-E. Pressure should be Station Pressure! * */ public static double parcelThetaE(double t, double td, double p) { double theta = t * Math.pow ( 1000.0/p, .286); return (theta * Math.exp(2481.9e-3*mixingRatio(td,p)/tempAtLCL(t, td)) ); } /** pressure at the LCL * */ public static double pressureAtLCL(double t, double td, double p) { double theta = t * Math.pow( 1000.0/p, .286); return (1000./ Math.pow( theta/tempAtLCL(t, td), 3.5) ); } /** compute temperature along Pseudo Adiabats. This iterates * until it converges.... * */ public static double tempAlongSatAdiabat(double thetaE, double p) { double s, th; double pcon = Math.pow( 1000.0/p, .286); double t = 273.0; double delta = 20.; do { s = mixingRatio(t, p); th = t * pcon * Math.exp(2.5*s/t); if ( (th-thetaE)*delta > 0.0) delta = -.5 * delta; t = t + delta; } while (Math.abs(delta) > .1); return (t); } } -- Tom Whittaker (tomw@xxxxxxxxxxxxx) University of Wisconsin-Madison Space Science and Engineering Center Phone/VoiceMail: 608/262-2759 Fax: 608/262-5974
ldm-users
archives: