Processing math: 0%

quinta-feira, 22 de março de 2018

Cálculo numérico em R da pressão atmosférica na região da troposfera - método das diferenças finitas

Este artigo destina-se ao estudo numérico do comportamento da pressão na camada troposférica até seu limite superior, a tropopausa. Essa aproximação é válida apenas neste limite, uma vez que tanto na estratosfera quanto na termosfera a temperatura atmosférica não segue o mesmo comportamento aproximadamente linear como na troposfera e na mesosfera. O estudo aqui discutido levará em consideração um decrescimento que é aproximadamente linear na troposfera, o que está de acordo com o que é observado. Eu escolhi este tema para este tópico por ele estar alinhado com uma simulação computacional simples proposta por um professor do Departamento de Física Aplicada, da USP de São Paulo.

A equação termodinâmica de estado para a atmosfera, que é derivada considerando-se apenas ar seco (\textit{dry air}) e vapor, uma vez que eles representam 99,96% da concentração de gases da atmosfera. Assim: P_a = P_d + P_v, onde P_d é a pressão para o ar seco e P_v é a pressão de vapor. Para gases ideais (uma suposição bastante razoável é a de que os gases na atmosfera comportam-se como ideais), a equação é Pv = nRT, que pode ser reescrita em termos da densidade \rho do gás:

P = \frac{m_a}{V}n \frac{R}{m_a}T = \rho R' T

onde n~m_a é a massa total, R^{'} = R/m_a é a constante do gás.

Com isso,

P_a = P_d + P_v = \rho_d R^{'}_d T + \rho_v R^{'}_v T = T (\rho_v R^{'}_v + \rho_d R^{'}_d)

Considere a constante \epsilon = R_d/R_v = m_v/m_d = 0.622, então:

P_a = R_d T\left( \rho_d + \frac{\rho_v}{\epsilon} \right),

que ainda pode ser reescrita em termos da densidade do ar (\rho_a = \rho_d + \rho_v) como:

P_a = \rho_a R_d T \left( \frac{\rho_d + \frac{\rho_v}{\epsilon}}{\rho_a} \right) = \rho_a R_d T \left( \frac{(\rho_a - \rho_v)}{\rho_a} + \frac{\rho_v}{\rho_a\epsilon}\right).

Neste ponto, define-se a umidade específica, q_v = \frac{\rho_v}{\rho_a}, de tal forma que:

P_a = \rho_a R_d T \left(1 - q_v + \frac{q_v}{\epsilon}\right) =  \rho_a R_d T \left( 1 + \frac{1-\epsilon}{\epsilon}q_v \right),

com (1-\epsilon)/\epsilon = 0.608. Considera-se, neste momento, uma nova temperatura, a temperatura virtual T_v,

T_v = T \left( 1 + \frac{1-\epsilon}{\epsilon}q_v \right),

que, conceitualmente, é a temeratura que o ar seco teria caso fosse aquecido pelo calor latente armazenado em q_v. Algo que é necessário deixar claro é que as grandezas \rho, P e T variam verticalmente na atmosfera, independente da equação de estado. Como o ar não está acelerado na direção vertical, isso significa que sua força peso está em equilíbrio com o gradiente de pressão:

PA - (P+dP)A = \rho A g dz \\ A dP = \rho A g dz, \\ \frac{dP}{dz} = \rho g,

que é a equação hidrostática. Através do método de diferenças finitas, a equação diferencial anterior pode ser resolvida:

\frac{P_k - P_{k+1}}{z_k - z_k+1} \approx \frac{\rho_k+\rho_{k+1}}{2} \frac{g_k +g_{k+1}}{2}, \\ \Rightarrow P_k \approx P_{k+1} - \rho_k g (\Delta z_k)

em que foi considerado que a densidade varia pouco com a altitude, bem como a constante gravitacional g. Esta última equação pode ser facilmente resolvida em R:

 p2 = c(); p2[1] = 101325; #vetor para a pressao;
rho = 1.3; g = 9.8; 
for (z in 1: 1000){
  
  p2[z+1] = p2[1]-rho*g*z
}

atm2 = p2*9.87e-6

par(mar = c(5, 6, 3, 5))
plot(seq(1:length(atm2)),atm2,type='l', xlab='Altitude above sea level (m)',ylab = 'Air pressure (atm)')
par(new=TRUE)

hbar = p2/100;

plot(hbar,type='l',ylab="",xlab = "",xaxt = "n", yaxt = "n");
axis(side=4);
mtext("Air pressure (hPa)", side = 4, line = 3)


Outra consideração para o cálculo da pressão atmosférica, desta vez com maior acurácia, é através da junção entre a equação de estado e a equação hidrostática. Considerando uma atmosféra isoterma, então:

dP = -\rho g dz,\\ P = \rho R_d T_v, \\ \Rightarrow \frac{dP}{P} = - \frac{g}{R_d T_v}dz = -\frac{dz}{H},

onde o fator de escala H = R_d T_v/g. Resolvendo a equação anterior:

P(z) = P_0 e^{-(z-z_0)/H}.

 p = c(); p[1] = 101325; #vetor para a pressao;
rho = 1.3; g = 9.8; R = 287.04;
Temp = c(); Temp[1] = 300;
for (z in 1: 15000){
  
  p[z+1] = p[1]*exp(-g*z/(R*Temp[1]));
}

atm = p*9.87e-6
dist2 = seq(1:length(atm))/1000;
par(mar = c(5, 6, 3, 5))
plot(dist2,atm,type='l', xlab='Altitude above sea level (Km)',ylab = 'Air pressure (atm)')
par(new=TRUE)

hbar2 = p/100;

plot(hbar2,type='l',ylab="",xlab = "",xaxt = "n", yaxt = "n");
axis(side=4);
mtext("Air pressure (hPa)", side = 4, line = 3)



Apenas a título de curiosidade, mostro abaixo uma comparação entre a solução da equação hidrostática e a solução da nova equação diferencial, considerando atmosféra isotérmica e equação de estado para até 1000 metros acima do nível do mar:

 plot(hbar2[1:1001],type='l', xlab = "Altitude above sea level (m)", ylab = "Air pressure (hPa)" )   
  points(hbar[1:1001],type='l',col='blue')   
  legend(400,1000,c("State and hidrostatic eq.","Hidrostatic equation"), text.col = c('black','blue'))   



Nota-se que a partir de 200 m de altitute, as soluções de ambas as equações começam a divergir entre si. Agora, considero que há variação da temperatura conforme a altitude aumenta. Especificamente, na troposfera a temperatura diminui com o aumento da temperatura de forma aproximadamente linear, ou seja:

T(z) = T_0 - \Gamma z,

em que \Gamma \approx 6.5 K/Km. Ou seja, a temperatura diminui 6.5 K a cada quilômetro atingido acima do nível do mar. Com essa consideração, a equação diferencial para a pressão fica escrita como:

\frac{dP}{P} = -\frac{g}{R_m T}dz = -\frac{g dz}{R_m(T_0 - \Gamma z)}

Ao tomar:

R_m = R (1 - (1-\epsilon)q_v/\epsilon)

como uma grandeza constante, então, integrando os termos correspondentes (0 < z' < z  e Po < P' < P ),:

\ln{\left( \frac{P}{P_0} \right)} = \frac{\Gamma g}{R_m T_0 \Gamma}\ln{\left(\left[ \frac{T_0}{\Gamma }\right] - z\right)} \Biggr|_{0}^{z},\\ \Rightarrow \frac{g}{\Gamma R_m} \left[ \ln{\left( \frac{T_0}{\Gamma} - z \right) - \left(\frac{T_0}{\Gamma}  \right)} \right] = \frac{g}{\Gamma R_m} \left[ \ln{\left(\frac{\frac{T_0}{\Gamma}-z}{\frac{T_0}{\Gamma}}\right)} \right], \\ \Rightarrow \ln{\left( \frac{P}{P_0} \right)} = \ln{\left( \frac{T_0 - \Gamma z}{T_0} \right)}\frac{g}{\Gamma R_m}

Neste ponto, uso a seguinte propriedade do logaritmo:

\ln{A} = B \ln{C} \Rightarrow A = C^B,

ou seja,

P = P_0 \left( 1 - \frac{\Gamma z}{T_0} \right)^{\frac{g}{\Gamma R_m}}.

Esta equação pode ser facilmente resolvida numericamente assim como o caso anterior, com a diferença de que incluiremos a variação da temperatura com a altitude:

p3 = c(); p3[1] = 101325; #vetor para a pressao;
g = 9.8; R = 287.04; gamma = 6.5/1000;
Temp = c(); Temp[1] = 300;

for (z in 1: 15000){
  
  p3[z+1] = p3[1]*(1-gamma*z/Temp[1])^(g/(R*gamma));
}

atm3 = p3*9.87e-6
dist = seq(1:length(atm3))/1000;

plot(dist,atm3, type='l', xlab='Altitude above sea level (Km)',ylab = 'Air pressure (atm)')



Uma comparação desta solução com a do caso anterior, para temperatura constante, é:

 plot(atm, type='l',xlab = "Altitude above sea level (Km)", ylab = 'Air pressure (atm)')   
  lines(atm3,col='green')   
  legend(9500,1,c("Constant Temperature","Variable Temperature"), text.col = c('black','green'))   



mostrando que a solução com temperatura variável tende a ser diferente daquela para temperatura constante a partir de, aproximadamente, 5 Km.