💧

Pythonによる湿り空気状態値計算と湿り空気線図作成:shimeri

2025/01/26に公開

はじめに

空調設備の設計や熱工学の分野では, 湿り空気の状態値計算や湿り空気線図(サイクロメトリックチャート)の作成が頻繁に必要となります.
これらの作業を簡単に行えるPythonパッケージ shimeri を公開したので紹介します.

https://github.com/yutaka-shoji/shimeri

PyPI Downloads

shimeriは, 以下の機能を提供します:

  • 湿り空気の状態値(乾球温度, 湿球温度, 相対湿度, 絶対湿度, エンタルピー)の計算
  • plotlyベースの湿り空気線図の作成
  • 等相対湿度線, 等絶対湿度線などの補助線の描画
  • 湿り空気線図上への2Dヒストグラムによる密度プロット

shimeriを利用することで以下のような湿り空気線図が作成できます.

shimeriを用いた湿り空気線図

インストール方法

pipを使用してインストールできます:

pip install shimeri
# or for uv user
# uv pip install shimeri

基本的な使い方

状態値の計算 (要素ごと)

たとえば乾球温度と相対湿度から絶対湿度を計算する際には以下のような形で計算できます.

import shimeri as sh

# calculatorインスタンスを作成(大気圧101.325kPaがデフォルト)
pc = sh.PsychrometricCalculator()
hr = pc.get_hr_from_db_rh(25.0, 50.0)
print(f"HR={hr:.1f}g/kg") 
# > HR=9.9g/kg

要素とメソッド名の対応
get_[target]_from_[source1]_[source2]

乾球温度: db (Dry Bulb)
湿球温度: wb (Wet Bulb)
相対湿度: rh (Relative Humidity)
絶対湿度: hr (Humidty Ratio)
比エンタルピー: en (Enthalpy)

状態値の計算 (収束計算)

あるいは既知の2要素から全5要素を計算することもできます.

db, wb, rh, hr, en = pc.get_all(db=25, rh=50)
print(f"乾球温度: {db:.1f}degC")
print(f"湿球温度: {wb:.1f}degC")
print(f"相対湿度: {rh:.1f}%")
print(f"絶対湿度: {hr:.1f}g.kg-1")
print(f"エンタルピー: {en:.1f}kJ.kg-1")
# > 乾球温度: 25.0degC
# > 湿球温度: 17.9degC
# > 相対湿度: 50.0%
# > 絶対湿度: 9.9g.kg-1
# > エンタルピー: 50.3kJ.kg-1

get_all()メソッドは, 5つの状態値(乾球温度, 湿球温度, 相対湿度, 絶対湿度, エンタルピー)のうち2要素を指定することで, 残りの3要素を計算します.

note:
PsychrometricCalculator.get_all()メソッドは多変数ニュートン法による収束計算を使用しています.特に, 湿球温度とエンタルピーからの計算は, 湿り空気線図上でこれらの線の傾きの差が小さいため, 収束性が悪くなる可能性があります.このような場合, 計算結果が不正確になる可能性があることに注意が必要です.

湿り空気線図のプロット

もうひとつ主要な機能として, plotlyベースの湿り空気線図の作成が行えます:

import shimeri as sh
import numpy as np

# 湿り空気線図のインスタンスを作成
fig = sh.PsychrometricChart()

# 点をプロット
pc = sh.PsychrometricCalculator()
dbs = np.array([25.0, 30.0])
rhs = np.array([50.0, 60.0])
hrs = pc.get_hr_from_db_rh(dbs, rhs)
ens = pc.get_en_from_db_hr(dbs, hrs)

fig.add_points(
    en=ens,
    hr=hrs,
    name="測定点",
    mode="markers",
)

# 等相対湿度線を描画
fig.draw_iso_rh_line(
    rh=50,
    db_range=np.array([20.0, 30.0]),
    mode="lines",
)

# グラフを表示
fig.show()

湿り空気線図2

このコードでは:

  1. 湿り空気線図のインスタンスを作成
  2. 乾球温度と相対湿度から状態点をプロット
  3. 相対湿度50%の等相対湿度線を描画
  4. 湿り空気線図を表示

plotlyベースのため, 以下の機能が利用可能です:

  • ズームイン/アウト
  • パン(グラフの移動)
  • ホバー時の値の表示
  • PNG保存

密度プロット

気象データなど, 多数のデータポイントを可視化する場合は, 2次元ヒストグラムによる密度プロットが有効です:

# random point cloud
rng = np.random.default_rng()
dbs = rng.normal(25, 5, 30)
rhs = rng.normal(50, 5, 30)

# 状態値の計算
dbs, wbs, rhs, hrs, ens = pc.get_all(db=dbs, rh=rhs)

# 密度プロットの作成
fig = sh.PsychrometricChart()
fig.add_histogram_2d_contour(
    en=ens,
    hr=hrs,
    name="point cloud",
    colorscale=[[0, "rgba(255,255,255,0)"], [1, "rgba(255,0,0,255)"]],
    contours_showlines=False,
    showscale=False,
)
fig.show()

湿り空気線図3

まとめ

shimeriパッケージを使用することで, 以下のことが簡単に実現できます:

  • 湿り空気の状態値計算
  • インタラクティブな湿り空気線図の作成
  • 気象データなどの可視化

またWebアプリ化の勉強がてらWebアプリ版(shimeri-web.vercel.app)も公開しました.
こちらではプログラミングなしで湿り空気線図を作成できます.

https://shimeri-web.vercel.app/

空調設備の設計や熱工学の研究において, このパッケージが皆様のお役に立てば幸いです.

Discussion