飽和水蒸気圧の計算 Delphi (2017/05/30)
ヴァイサラの資料の計算式を使用しています。
unit VaisalaUnit;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Math;
type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
T, S, Pws, Ews, x : double;
Tdp, H, Pw, Td, A : double;
begin
// 25℃ = 31.69hPa
// 100℃(水の沸点)における飽和水蒸気圧は 1013.25 hPa
// 温度 [C]
Td := 25.0;
// 絶対温度 [K]
T := Td + 273.15;
// 相対湿度 [%RH]
H := 50.0;
// 飽和水蒸気圧 [hPa]
// Vaisala --------------------------------------------------------------
S := T - (
-0.12743214E-7 * Power(T, 3) +
0.13746454E-4 * Power(T, 2) +
-0.46094296E-2 * Power(T, 1) +
0.49313580 * Power(T, 0)
);
//Edit1.Text := FloatToStr(S) + ' [hPa]';
Pws := Exp(
-0.14452093E-7 * Power(S, 3) +
0.41764768E-4 * Power(S, 2) +
-0.48640239E-1 * Power(S, 1) +
0.13914993E01 * Power(S, 0) +
-0.58002206E04 * Power(S, -1)+
6.5459673 * Ln(S)
) / 100;
Edit1.Text := FloatToStr(Pws) + ' [hPa]';
// ---------------------------------------------------------------------------
// [hPa]Tetens(テテンス)の式 -----------------------------------------------
Ews := 6.1078 * Power(10, 7.5 * Td / (Td + 237.3));
Edit2.Text := FloatToStr(Ews) + ' [hPa]';
// ---------------------------------------------------------------------------
// Wagner(ワグナー)の式 ----------------------------------------------------
x := 1 - (Td + 273.15) / 647.3;
Ews := 221200 * Exp((
-7.76451 * x +
1.45838 * Power(x, 1.5) +
-2.7758 * Power(x, 3) +
-1.23303 * Power(x, 6)) / (1 - x));
Edit3.Text := FloatToStr(Ews) + ' [hPa]';
// ---------------------------------------------------------------------------
// 水蒸気圧 [hPa]
Pw := Pws * H / 100;
// 露点温度 [℃DP]
Tdp := 237.30 / (7.5000 / Log10(Pw / 6.1078) - 1);
Edit4.Text := FloatToStr(Tdp) + ' [hPa]';
// 容積絶対湿度 [g/m3]
A := 216.679 * Pw / T;
Edit5.Text := FloatToStr(A) + ' [g/m3]';
// 混合比 [g/kg]
x := 621.9907 * Pw / (1013.25 - Pw);
// 重量絶対湿度 [kg/kg(DA)]
Edit6.Text := FloatToStr(x / 1000) +' [g/kg]';
// エンタルピ [kj/kg]
h := Td * (1.01 + 0.00189 * x) + 2.5 * x;
Edit7.Text := FloatToStr(h) + ' [kj/kg]';
end;
end.