窒素(N2)の分子量が28、酸素(O2)の分子量が32で、
その混合気体である空気が(たしか)29くらい
であるのに比べ、水(H2O)の分子量は18で圧倒的に軽い。
(ちなみに、二酸化炭素は44)
しかし、摂氏100度、湿度100%相当にならない限り空気全体が水蒸気
になる訳ではないので、29対18という値で、湿った
空気が軽いわけではありません。
なお、湿度何%というのは空気に占める水蒸気の割合では
なく、その温度で空気が含みうる水蒸気の量との割合です。
実際の所どの位軽くなるのでしょう?
天気予報ではよく「暖かく湿った空気が上昇し。。。」
などと聞きますが、「湿った」だけでも軽いはずで
「暖かい」との効きの割合はどの位でしょう?
例えば摂氏25度の時、100%の湿度は、気温何度
分空気を軽くするのでしょう?
という事で、「湿った空気の重さ比較の簡易計算機」を作り
ました。
計算機パネル上の
摂氏[____]度
湿度[____]%
中に数値を入れると計算値が出ます。
エンターなどの操作は不要です。湿度は0~100
の間が有効。温度には制限はありませんが、
通常の気温の範囲を超えると得られる値
が不正確になります。
摂氏25度湿度100%の空気というのは摂氏28.5度の乾燥空気
と同じ重さなんですねえ。3.5度の差というのはかなり大きいです
よね。
計算法は次の通り
- 飽和水蒸気圧(hPa)=6.11×10^(7.5×t÷(t+237.3))
Tetens(1930)の式(tは摂氏)
- 水蒸気分圧(hPa)=飽和水蒸気圧×(湿度÷100)
- 気体中の水蒸気構成比=(水蒸気分圧/1013)
- 乾燥空気との重量比=(29×(1-水蒸気構成比)+18×水蒸気構成比)÷29
- 同じ重量乾燥空気温度=(t+273.15)÷重量比-273.15
あくまで凡その値です。飽和水蒸気圧の計算は簡易計算
ですし、空気の分子量も高い精度ではありません。
例えば本来100度だと飽和水蒸気圧は1013のはずなのですが
若干誤差を持っています。なお、低い温度
はより正確になっています。
### 分離しないか?
さしあたって空気と混ざり合った塊を考えた訳ですが、分子量の
違いを考えると、徐々に分離し、水蒸気だけが上に登るということ
は考えられないでしょうか?
例えば、湿度50%の均一な空気で占められた部屋も、しばらく
すると、上部は60%くらいになり、下部は40%くらいになる
という蒸気圧勾配ができるのではないでしょうか?
(あやしい)
### 湿度100%で安定できるか?
蒸気圧勾配ができるとして、部屋全体に湿度100%の空気が
あった場合、果たしてそのまま安定するでしょうか?
蒸気圧勾配が作られる力が働くのではないでしょうか?
そうすると、上部では100%を超えることとなり、水蒸気
は凝結します。雲ができるのです。(核となる
ゴミなどがないと過飽和状態になる可能性もある)
湿度100%で安定することはできないのです。
(さらにあやしくなってきた)
### 潜熱で熱勾配ができて安定?
水蒸気が凝縮するときは潜熱を出します。この熱により再び
蒸気となる?
最終的には熱勾配ができて安定する。
(そうとうあやしい)
### そもそも潜熱ってなんだ?
おおまかな話として潜熱があるというのは納得できます。でも
ミクロにみると一体どういう仕組みなんでしょう?
### いずれ
。。。。いずれ、別記事で
### Flashプログラム
計算機はFlash/ActionScript3で作成しました。単純に計算式
を実行し、ステージに配置したTextInputに表示しているだけのものです。
(入力域も計算結果の出力域もTextInputです)
入力不可のTextInputはプロパティの
カラーを[明度:-10%]としています。
TextInputを配置する方法は
Flashに文字入力やボタンなどUIを設定するに説明があります。
// 湿った空気はどの位軽いか
function calc(e:Event){
var t:Number=Number(tinput.text); // t:温度(摂氏)
var m:Number=Number(tinput2.text); // m:湿度
tE.text=tEm.text=tR.text=tWR.text=tST.text=tTD.text="---";
if( tinput.text.length!=0 && !isNaN(t) ){
// E:飽和水蒸気圧 Tetens(1930)の式
var E:Number = 6.11*Math.pow(10,(7.5*t/(t+237.3)));
tE.text = String(E);
if( tinput2.text.length!=0 && !isNaN(m)
&& m>=0 && m<=100 ){ // 湿度0~100%の時のみ計算
var Em:Number= E*(m/100); // Em:水蒸気圧
if( Em<=1023 ) {// 本当は1013
var R:Number = (Em/1013); // R: 蒸気構成比
var WR:Number= (29*(1-R)+18*R)/29; // WR:対乾燥空気重量比
var ST:Number= (t+273.15)/WR-273.15;// ST:相当乾燥空気温度
tEm.text = String(Em);
tR.text = String(R*100);
tWR.text = String(WR*100);
tST.text = String(ST);
tTD.text = String(ST-t);
}
}
}
}
tinput.addEventListener("change",calc);
tinput2.addEventListener("change",calc);
calc(null);
### 余談:空白地獄(インデント地獄 in IE+ココログ)
インデントをちゃんと出すのにとても苦労しました。
僕はプログラムソースには絶対タブを使いません。それは
印刷や引用時にインデントが狂うからです。
インデントにタブを用いるのは愚か極まりないことだと
思っています。このソースもインデントは空白です。
ところが、単純に<pre><code>指定ではインデントが行ごとに
ずれるのです。
これはとても不思議なことで、例えば同じ6個の空白からなるはず
の領域のサイズが行ごとに異なるのです。
それもどうやら同じインデントの行が連続する場合だけ。
しかも症状が出るのは「IE+ココログ」の場合のみ。
出したり、隠したりの仕組みのせいかと、普通に出す形
にしたけどだめ。
cssでfont-familyを指定してもだめ。 などを
書き連ねたら途中から変な文字がでる。
JavaScriptでdocumet.writeで出し
てみても同じ。
tableを使えば
そろえられるけどコピペ不能となる。FlashのTextAreaを使えばできるには
できたが大げさすぎ。
結局<pre><font face="MS ゴシック">
でなんとかなった。
いやあ、苦労した。
この記事で最も苦労したのがこの等幅連続空白です。(等幅文字
問題ではありません。連続する空白のサイズ。一個の空白や
目に見える文字は問題なく等幅になる)
記事のタイトルを
「IE+ココログ環境下に於ける空白サイズ、または湿った空気の重さ」
などと変えたくなりました。
。。。さらに苦労が
<pre><font face="MS ゴシック">
の次行から
文を始める
と文の前になぜか2行の間が空いてしまう。
そこで
<pre><font face="MS ゴシック"
>ここから文
という形にした。(IE以外で変な形にならなければよいが。。。)
###
2015.3.6 Flash非対応処理の変更