Atmosfera izotermiczna vs adiabatyczna.

Stateczność i inne zjawiska występujące podczas lotu
Awatar użytkownika
Gość

Atmosfera izotermiczna vs adiabatyczna.

Post autor: Gość » wtorek, 5 maja 2009, 00:25

Witam!



Jak obiecałem, zamieszczam wyniki moich poszukiwań na temat ciśnienia w atmosferze i jego zależności od wysokości.



Kilka dni temu udałem się w tym celu do http://www.igf.fuw.edu.pl/zfa/ gdzie na temat wyznaczania wysokości na podstawie ciśnienia porozmawiałem z dr hab. Hanną Pawłowską.



Tak jak przypuszczałem, Pani dr potwierdziła że całkiem dobrym modelem jest model adiabatyczny.



Ale zacznijmy od początku czyli od równania równowagi hydrostatycznej :



Obrazek

.



Wyprowadzania nie będę podawał, kogo interesuje proszę bardzo link http://farside.ph.utexas.edu/teaching/s ... ode54.html.



Z równania stanu gazu doskonałego, gęstość powietrza wynosi Obrazek gdzie M - średnia masa molowa powietrza, p - ciśnienie na wysokości h, R - uniwersalna stała gazowa, T - temperatura na wysokości h.



Wstawiamy gęstość do równania równowagi uzyskując następujące równanie różniczkowe Obrazek.



Całkujemy obustronnie w granicach dla ciśnienia od początkowego p0 na wysokości 0 do ciśnienia p na wysokości h Obrazek.



Lewą całkę wykonujemy od ręki uzyskując równanie:



Obrazek.



I tu zaczyna się zabawa - nasze poszukiwane ciśnienie w funkcji wysokości sprowadziliśmy do całki zależnej od temperatury i teraz od tego jak ją wybierzemy uzyskamy różne przybliżenia.



Zacznijmy od najprostszego przybliżenia a jednocześnie całkiem dobrego dla małych wysokości, czyli od modelu atmosfery izotermicznej - temperaturę przyjmujemy za stałą równą T niezależnie od wysokości.



Wówczas prawą całkę łatwo wykonujemy uzyskując równanie

Obrazek.



Po przekształceniu



Obrazek



gdzie z jest wysokością względem położenia początkowego gdzie panowało ciśnienie p0.





Ale jak to jest w rzeczywistej atmosferze? Przecież każdy wie, że temperatura również zmienia się z wysokością! Jaką postać tej zależności wybrać?

I tu przyda się kilka faktów na temat transportu ciepła w atmosferze, mianowicie podstawową formą wymiany ciepła są procesy radiacyjne i oddawanie/pobieranie ciepła w formie promieniowania. Ich skala czasowa jest rzędu ok. 2 tygodni (w swobodnej atmosferze poza chmurami). Procesy mieszania w wyniku konwekcji są w zasadzie ograniczone tylko do turbulentnej warstwy powierzchniowej natomiast skala procesów związanych z rozprężaniem jest rzędu 1 dnia.

Jaki z tego wniosek? Rozważmy co się dzieje gdy mały balonik napełniony powietrzem umieszczony na powierzchni Ziemii będziemy unosić. Ze wzrostem wysokości, ciśnienie zewnętrzne będzie spadać a balonik będzie się rozprężał wykonując pracę. Ponieważ wymianę ciepła między balonikiem a otoczeniem możemy zaniedbać (2 tygodnie nie lata żaden balonik ani rakieta więc jest to zupełnie bez znaczenia w naszych zastosowaniach) możemy go potraktować jako układ zamknięty a więc przemiana w nim zachodząca jest przemianą adiabatyczną.



Temperatura będzie się więc zmieniać w dobrym przybliżeniu w <span style="font-weight: bold">sposób liniowy</span>. Oczywiście jest tu pewien haczyk ale do wysokości około 12km nie będziemy się nim przejmować :wink:



Przyjmijmy więc zależność temperatury od wysokości w postaci

Obrazek,

gdzie T0 temperatura na powierzchni a L (L>0) współczynnik spadku temperatury z wysokością. Minus jest ponieważ temperatura spada z wysokością a współczynnik L chcemy żeby był dodatni ale oczywiście można zrobić na odwrót co jest bez znaczenia o ile pilnujemy znaków.



Wstawiając do uzyskanego wcześniej równania dostaniemy

Obrazek



Całka z prawej strony do policzenia w pamięci

Obrazek



Końcowe równanie po przekształceniu

Obrazek,

gdzie p0 i T0 - ciśnienie (w hPa) i temperatura (w Kelvinach) na wysokości początkowej, L - szybkość spadku temperatury (w K/m), g - przyśpieszenie ziemskie, M - średnia masa molowa powietrza, R - uniwersalna stała gazowa, h - wysokość względna.



I oto uzyskaliśmy równanie na ciśnienie w funkcji wysokości, w oparciu o założenie liniowości zmian temperatury z wysokością.



Wspomniałem, że przy wysokościach około 12km zaczynają się problemy i nasz wzór się posypie :shock:. A dlaczego? Spójrzmy na jakościowy wykres zmienności temperatury w atmosferze:



Obrazek



Jak widać, powyżej pewnej wysokości temperatura przestaje spadać! Haczyk polega na przemilczanym przeze mnie założeniu, że mamy do czynienia z powietrzem SUCHYM! Otóż gdy początkowo ze wzrostem wysokości temperatura spada, osiągamy w końcu na tyle niską temperaturę że powyżej pewnej wysokości para wodna obecna w powietrzu zaczyna się skraplać oddając ciepło powietrzu, przeciwdziałając zmianie temperatury. Jest to tzw. obszar tropopauzy.



To jeszcze nie wszystkie paskudztwa jakie mogą nas spotkać jeśli chodzi o rozkład temperatury.

Problem w tym, że wzrost temperatury z wysokości może wystąpić również na niższych wysokościach i mamy wtedy do czynienia z tak zwaną http://pl.wikipedia.org/wiki/Inwersja_temperatury. Zjawisko takie może wystąpić np. w czasie bezwietrznej i bezchmurnej nocy, gdy grunt wypromieniowuje ciepło szybciej niż powietrze powyżej (mówimy wtedy o inwersji przyziemnej radiacyjnej). Efekt ten może zaburzać rozkład ciśnienia i należy unikać warunków w których inwersja może wystąpić jeżeli chcemy ciśnienie wykorzystać do wyznaczania wysokości (poczytajcie o inwersjach na Wikipedii). Innym niekorzystnym i nieprzewidywalnym zjawiskiem jest powstawanie "kominów konwekcyjnych" gdy ciepłe powietrze unosi się do góry. W czasie słonecznej pogody mogą powstawać co 10 - 30 min. i trwać od 8 do 20 min. Tu na pewno więcej do powiedzenia mają szybownicy :P.



A teraz zobaczmy jak wyglądają dane doświadczalne z sondażu atmosferycznego.



Dane pochodzą z sondażu atmosfery przeprowadzonego przez IMGW 28 kwietnia 2009r w Legionowie (link http://weather.uwyo.edu/cgi-bin/soundin ... STNM=12374). Dane można pobrać ze strony Uniwersytetu Wyoming także dla innych dni, pomiary są przeprowadzane bodajże dwa razy dziennie z wykorzystaniem balonów stratosferycznych oprzyrządowanych w czujniki pomiarowe. Wysokość balonu mierzona jest z wykorzystaniem systemu GPS. Co ciekawe Uniwersytetu Wyoming udostępnia te dane za darmo, natomiast IMGW każe sobie za nie płacić :P.



Wykres temperatury w funkcji wysokości:

Obrazek



Jak widzimy z wykresu aż do wysokości 11769m temperatura zmienia się w sposób bardzo zachęcający :).



Popatrzmy tylko na wycinek od 0 do 11769m:

Obrazek



Do danych w tym obszarze można ładnie dopasować prostą, korzystając z metody najmniejszych kwadratów. Uzyskana zależność T(h)=21.84-0.00741x (w stopniach Celsiusa). Tak więc w warunkach prowadzenia sondażu współczynnik L wyniósł 0.00741 K/m.



Korzystając z tych informacji porównałem na jednym wykresie wyniki z modelu izotermicznego, adiabatycznego i dane z sondażu:



Obrazek



Jak widać, model adiabatyczny sprawdził się znakomicie a izotermiczny działałby całkiem nieźle ale dla wysokości nie większych niż 3000m :)

Awatar użytkownika
andżej
Supersonic PROFI
Posty: 444
Rejestracja: niedziela, 30 sty 2011, 18:30
Lokalizacja: Rumia
Kontakt:

Post autor: andżej » wtorek, 5 maja 2009, 10:25

Witam



Widzę że zabrałeś się do sprawy metodycznie :D

Proponowany przez Robercika wzór na obliczanie wysokości polega właśnie na przecałkowaniu zależności liniowej temperatury od wysokości (w podanym przez Ciebie równaniu różniczkowym). Jesli uzyskasz tą samą zależność to poprawność podanego przez nas wzoru będzie potwierdzona. Przyjdzie wtedy czas na dyskusje bo pytan jest wiele :)



pozdr

Awatar użytkownika
Gość

Post autor: Gość » wtorek, 5 maja 2009, 23:26

Witam!



"Widzę że zabrałeś się do sprawy metodycznie "



No jasne! Nie mogę wam pomóc w budowie modeli ani nic podpowiedzieć w wyborze paliwa bo na tym się nie znam, ale mam nadzieję że w granicach możliwości przyczynię się do wspólnego sukcesu pomagając w innych dziedzinach :) W dzisiejszych czasach coraz trudniej odnieść sukces w pojedynkę, a co dopiero jeśli chodzi o technikę rakietową gdzie trzeba korzystać z bardzo szerokiego zasobu wiedzy. Natomiast zgrana drużyna i wspólny cel to gwarancja powodzenia :)



"Jesli uzyskasz tą samą zależność to poprawność podanego przez nas wzoru będzie potwierdzona. Przyjdzie wtedy czas na dyskusje bo pytan jest wiele"



Postaram się uprzedzić te pytania, rozbudowując swojego posta w dodatkowe informacje by nie zaburzać potem porządku dyskusji.



Pozdrawiam :)

Awatar użytkownika
KSard
Supersonic PROFI
Posty: 1506
Rejestracja: niedziela, 30 sty 2011, 18:30
Lokalizacja: Kraków
Kontakt:

Post autor: KSard » środa, 6 maja 2009, 10:54

Witam

Już nie mogę się doczekać.

Będę miał okazję do odświerzenia sobie trochę zapomnianych wiadomości z termodynamiki - dyscypliny naukowej należącej do tych nienajłatwiejszej i tak mało znanej ogółowi :wink:



Podoba mi się Twoje podejście do sprawy - fachowcy zawsze mile widziani. :D

Awatar użytkownika
Gość

Post autor: Gość » środa, 6 maja 2009, 18:59

"Podoba mi się Twoje podejście do sprawy - fachowcy zawsze mile widziani."



A dziękuję :) Staram się :)

Awatar użytkownika
kbosak
***
Posty: 71
Rejestracja: czwartek, 29 wrz 2011, 13:59
Kontakt:

Re: Atmosfera izotermiczna vs adiabatyczna.

Post autor: kbosak » niedziela, 14 kwie 2013, 15:45

A teraz rozwiązanie ultymatywne.
Zakładając że przyśpieszenie g nie jest stałe tylko zmienne z wysokością a także zależne od szerokości geograficznej (ziemia jest elipsoidą) , a także model temperatury od wysokości namierzamy doświadczalnie, równanie trzeba scałkować numerycznie.
Oto kod źródłowy w C który to robi:

Kod: Zaznacz cały

//http://en.wikipedia.org/wiki/Ellipse
double EllipseRadius(double major_radius, double minor_radius, double angle_degrees)
{
    const double angle_radians=angle_degrees*DEG2RAD;
    const double dx=major_radius*cos(angle_radians);
    const double dy=minor_radius*sin(angle_radians);
    return (major_radius*minor_radius)/sqrt((dx*dx) + (dy*dy));
}

//http://en.wikipedia.org/wiki/Earth_radius
double EarthRadius(double latitude_degrees)
{
    return EllipseRadius(6378.1370e3, 6356.7523e3, latitude_degrees);
}

//http://en.wikipedia.org/wiki/Barometric_formula
double TemperatureAtAltitudeCelsius(
    double h, 
    double T0_celsius=15.0, 
    double T0_level=0.0
    )
{
    if(h<11000.0)
    {
	   //return T0_celsius + h*(-6.5/1000.0);//Only if T0_celsius is exactly 15.0C
	   //must meet: T0_celsius at h=T0_level, -56.5 at 11000
	   //http://en.wikipedia.org/wiki/Lapse_rate
	   const double lapse_rate=(-56.5 - T0_celsius)/(11000.0-T0_level);
	   return T0_celsius + (h-T0_level)*lapse_rate;
    }
    if(h<20000.0)
    {
	   return -56.5;
    }
    if(h<32000.0)
    {
	   return -56.5 + (h-20000.0)*(1.0/1000.0);
    }
    if(h<47000.0)
    {
	   return -44.5 + (h-32000.0)*(2.8/1000.0);
    }
    if(h<51000.0)
    {
	   return -2.5;
    }
    if(h<71000.0)
    {
	   return -2.5 + (h-51000.0)*(-2.8/1000.0);
    }
    /*
    if(h>84852.0)
    {
	   h=84852.0;
    }
    if(h<=84852.0)
    */
    {
	   return -58.5 + (h-71000.0)*(-2.0/1000.0);
    }
}

//http://en.wikipedia.org/wiki/Gravitational_constant
//http://en.wikipedia.org/wiki/Earth_mass
double GLocal(double h, double latitude_degrees)
{
    const double Gconstant=6.67384E-11;
    const double Mearth=5.97219E24;
    const double R=EarthRadius(latitude_degrees);
    const double dist=R+h;
    return Gconstant*Mearth/(dist*dist);
}


int main()
{
    /*
    for(double h=0.0; h<=100000.0; h+=1000.0)
    {
	   printf("%lf %lf\n", h, TemperatureAtAltitudeCelsius(h) );
    }
    */
    
    const double latitude_degrees=53.0;//Torun test site
    
    const double P0=101325.0;//pressure at sea level
    
    //const double T0=15.0;//15[C] is stdatm
    const double T0=22.0;//temperature at T0_level
    const double T0_level=53.0;//Altitude above mean sea level at which temperature is measured
    
    double M=0.0289644;//Molar mass of dry air [kg/mol]
    
    //const double R=8.31432;//stdatm model
    //http://en.wikipedia.org/wiki/Gas_constant
    const double R=8.3144621;//precise ideal gas constant 
    
    //const double g=9.80665;//stdatm model

    //http://en.wikipedia.org/wiki/Barometric_formula
    double integral_value=0;
    const double integral_dh=1;

    const double alti_step=1000.0;
    int alti_i=0;
    double hnext=0;
    const double hmax=(100000.0+(alti_step*0.5));
    double fvalue_previous;//Trapeze and Simpson's rule
    //http://en.wikipedia.org/wiki/Simpson%27s_rule
    double fvalue_middle;//Simpson's rule only
    double P=0.0;
    for(double h=0.0; h<=hmax; h+=integral_dh)
    {
	   const double g=GLocal(h, latitude_degrees);
	   //http://en.wikipedia.org/wiki/Absolute_zero
	   const double T_celsius=TemperatureAtAltitudeCelsius(h, T0, T0_level);
	   const double T_kelvin=T_celsius+273.15;
	   const double air_density=M/(R*T_kelvin);// 1/(R_specific*T_kelvin)
	   const double fvalue=g*air_density;
	   
	   //http://en.wikipedia.org/wiki/Density_of_air
	   if(P>0)
	   {
		  const double Psat=6.1078*pow(10.0, (7.5*T_celsius)/(T_celsius+237.3));//saturation vapor pressure of water
		  const double RH=0;//0.40;//Relative humidity
		  const double Pvapor=RH*Psat;
		  const double Pdry=P-Pvapor;//Since P_total=Pdry+Pvapor
		  const double Mdry=0.0289644;//Molar mass of dry air
		  const double Mvapor=0.018016;//Molar mass of water vapor
		  const double Mwet=( (Pdry*Mdry) + (Pvapor*Mvapor) )/P;
		  M=Mwet;
	   }
	   
	   {//Simpson's rule only
		  const double hmiddle=h-(integral_dh*0.5);
		  const double g=GLocal(hmiddle, latitude_degrees);
		  //http://en.wikipedia.org/wiki/Absolute_zero
		  const double T_celsius=TemperatureAtAltitudeCelsius(h, T0, T0_level);
		  const double T_kelvin=T_celsius+273.15;
		  const double air_density=M/(R*T_kelvin);// 1/(R_specific*T_kelvin)
		  fvalue_middle=g*air_density;
	   }
	   
	   if(h>0)
	   {
		  //integral_value+=fvalue*integral_dh;//Rectangle rule
		  //integral_value+=((fvalue_previous+fvalue)*0.5)*integral_dh;//Trapeze rule
		  integral_value+=( (fvalue_previous + (4*fvalue_middle) + fvalue)/6.0 )*integral_dh;//Simpson's rule
	   }
	   
	   P=P0*exp(-integral_value);
	   if(h>=hnext)
	   {
		  //http://forum.rakiety.org.pl/topic696.html
		  const double gamma=1.4;//Adiabatic index Cp/Cv
		  //http://en.wikipedia.org/wiki/Gas_constant
		  const double R_specific=R/M;//Specific gas constant for dry air, unless you update M
		  //http://en.wikipedia.org/wiki/Speed_of_sound
		  const double mach_speed=sqrt(gamma*(R_specific*T_kelvin));//[m/s]

		  printf("% 14.6lf % 7.0lf %6.2lf\n", P, h, mach_speed);
		  
		  alti_i++;
		  hnext=alti_i*alti_step;
	   }
	   fvalue_previous=fvalue;
    }
    return 0;
}
GLocal zwraca przyśpieszenie ziemskie na danej szerokości geograficznej i wysokości. Jeśli nie wiesz co dać, wystarczy 9.81.
P0[Pa] to ciśnienie na poziomie morza.
T0[C] to temperatura na poziomie morza.
TemperatureAtAltitudeCelsius może być analityczne (jak w kodzie powyżej, zgodne z atmosferą standardową i liniową korekcją na najniższej warstwie aby trafić na poziomie gruntu w temperaturę lokalną) lub całkowicie z danych pomierzonych w czasie lotu.
Ten kod oblicza zależność ciśnienia do wysokości dla wszystkich warstw atmosfery, można łatwo podmienić profil temperatury (w tym zadać dowolną na poziomie ziemii), podmienić ciśnienie na poziomie morza. Formua w wersji standardowej liczy dokładnie aż do 100km, tj linii Karmana http://en.wikipedia.org/wiki/K%C3%A1rm%C3%A1n_line.

Kod uwzględnia teraz zmiany wilgotności wraz z wysokością (zmienna masa molowa M w zależności od wilgotności względnej).
W praktyce jest tak że trzeba podać ciśnienie przedstartowe na poziomie morza a temperaturę mierzymy lokalnie raczej na poziomie gruntu i podajemy wysokość tego miejsca npm.
Ewentualnie można użyć prognozy meteo, T0 wziąść tzw zredukowane do poziomu morza i ustawić T0_level=0.

Gradienty temperatur dla warstw atmosfery pochodzą z
http://en.wikipedia.org/wiki/Barometric_formula

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość