飽和水蒸気圧の計算 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.