T_distrib プログラム仕様
層状熱電スタックの定常一次元温度プロファイルを計算・プロットするスクリプトです。
このスクリプトは、層状熱電スタックの定常一次元温度プロファイルを計算し、結果をプロットします。 異なる表面熱抵抗のモデルに対応するために、二つのモードが利用可能です。
モード
delta: 表面熱抵抗は、厚さ
delta_top/delta_bottomおよび熱伝導率k_airを持つ 明示的な上部/下部空気境界層としてモデル化されます。conv_rad: 表面熱抵抗は、以下の要素から予測されます。 - 水平平板のヌセルト数相関を用いた自然対流。 - 熱放射。
どちらのモードでも、内部スタックは以下の層で構成されます。 上部電極 / 界面12 / TE半導体 / 界面23 / 下部電極
スクリプトは以下の情報を出力します。 - 各層/界面の抵抗 - 全体の抵抗 - 界面温度 - TE層の温度降下
また、物理スケールと模式図スケールの2つの垂直に重ねられたプロットを含む図を保存します。
- class electrical.T_distrib.Region(name: str, thickness_m: float, k_W_mK: float, category: str)[ソース]
ベースクラス:
object熱電スタックの単一の領域(層、界面、表面)を表すデータクラス。
このクラスは、特定の領域の物理的特性(名称、厚さ、熱伝導率、カテゴリ)を 保持し、その熱抵抗を計算するプロパティを提供します。
- パラメータ:
name -- str: 領域の識別名。
thickness_m -- float: 領域の厚さ [m]。
k_W_mK -- float: 領域の熱伝導率 [W/mK]。
category -- str: 領域のカテゴリ(例: "surface", "layer", "interface")。
- electrical.T_distrib.air_properties_simple(T_film_K: float, k_air_ref: float) Tuple[float, float, float, float][ソース]
単純な空気物性モデルを計算します。
室温から中程度の温度範囲での空気の物性を近似的に計算します。 熱伝導率
k_airはユーザー指定の参照値に基づいて温度依存性を持ち、 動粘度、熱拡散率、プラントル数も計算されます。- パラメータ:
T_film_K -- float: 空気膜の絶対温度 [K]。
k_air_ref -- float: 参照熱伝導率 [W/mK]。
- 戻り値:
Tuple[float, float, float, float]: - k_air: 熱伝導率 [W/mK] - nu: 動粘度 [m^2/s] - alpha: 熱拡散率 [m^2/s] - Pr: プラントル数 [-]
- electrical.T_distrib.bottom_surface_flux_downward(T_surface_bottom_C: float, T_air_bottom_C: float, eps_bottom: float, L_char_bottom_m: float, k_air_ref: float, T_rad_bottom_C: float | None = None) Tuple[float, float, float][ソース]
下部サンプル表面から下部周囲へ向かう正味の下向き熱流束を計算します。
自然対流と熱放射による熱流束の合計を計算します。 熱流束は下向きが正と定義されます。
- パラメータ:
T_surface_bottom_C -- float: 下部サンプル表面温度 [°C]。
T_air_bottom_C -- float: 下部周囲空気温度 [°C]。
eps_bottom -- float: 下部表面の放射率 [-]。
L_char_bottom_m -- float: 下部自然対流の特性長さ [m]。
k_air_ref -- float: 空気の参照熱伝導率 [W/mK]。
T_rad_bottom_C -- float | None, optional: 下部放射環境温度 [°C]。Noneの場合、T_air_bottom_C が使用されます。
- 戻り値:
Tuple[float, float, float]: 合計熱流束、対流熱流束、放射熱流束 [W/m^2] のタプル。
- electrical.T_distrib.build_internal_regions(args: Namespace) List[Region][ソース]
熱電スタック内部のコア層と界面の Region オブジェクトのリストを構築します。
この関数は、コマンドライン引数で指定された厚さ
d1,d2,d3と 熱伝導率k1,k2,k3、および界面の厚さdelta12,delta23と 熱伝導率k12,k23を使用して、内部スタックの領域を定義します。- パラメータ:
args -- argparse.Namespace: コマンドライン引数を格納するオブジェクト。
- 戻り値:
List[Region]: 内部スタック領域のリスト。
- electrical.T_distrib.build_parser() ArgumentParser[ソース]
コマンドライン引数をパースするための
ArgumentParserオブジェクトを構築します。この関数は、スタックの層の厚さや熱伝導率、表面モデル('delta'または'conv_rad')、 温度、プロット設定など、スクリプトの動作を制御するための様々な引数を定義します。
- 戻り値:
argparse.ArgumentParser: 設定済みのArgumentParserオブジェクト。
- electrical.T_distrib.build_regions_delta(args: Namespace) List[Region][ソース]
'delta'モードでの全領域(空気境界層を含む)の Region オブジェクトのリストを構築します。
この関数は、
build_internal_regionsで構築された内部スタック領域の前後に、 コマンドライン引数で指定されたdelta_top,delta_bottomの厚さとk_airの熱伝導率を持つ空気境界層を追加します。- パラメータ:
args -- argparse.Namespace: コマンドライン引数を格納するオブジェクト。
- 戻り値:
List[Region]: 'delta'モードにおける全スタック領域のリスト。
- electrical.T_distrib.compute_piecewise_profile(T_top_C: float, regions: List[Region], q_W_m2: float, n_points_per_region: int = 80) Tuple[ndarray, ndarray, List[float]][ソース]
既知の熱流束を持つ明示的な領域リストに対する物理的なZ座標と温度プロファイルを計算します。
各領域で線形温度勾配を仮定し、全体の温度プロファイルと各界面の温度を計算します。 プロファイルは連続的であり、各領域の熱伝導率と厚さに基づいて温度降下が計算されます。
- パラメータ:
T_top_C -- float: スタック最上部の温度 [°C]。
regions -- List[Region]: スタックを構成するRegionオブジェクトのリスト。
q_W_m2 -- float: スタックを通過する正味の熱流束(下向きが正) [W/m^2]。
n_points_per_region -- int, optional: 各領域でプロットのために生成する点の数 (デフォルトは80)。
- 戻り値:
Tuple[np.ndarray, np.ndarray, List[float]]: 物理的なZ座標の配列、対応する温度の配列、および各界面(最上部と最下部を含む)の温度のリストのタプル。
- electrical.T_distrib.compute_schematic_positions(region_names: List[str], region_categories: List[str], layer_width: float, interface_width: float, surface_width: float) Tuple[ndarray, List[float], List[float]][ソース]
模式図プロットのために、各領域の相対的な位置と幅を計算します。
各領域のカテゴリ(層、界面、表面)に基づいて、指定された表示幅を割り当て、 スタック内の模式的な位置(エッジと中心)を決定します。
- パラメータ:
region_names -- List[str]: 各領域の名前のリスト。
region_categories -- List[str]: 各領域のカテゴリのリスト("layer", "interface", "surface")。
layer_width -- float: 「layer」カテゴリの領域に割り当てる模式的な表示幅。
interface_width -- float: 「interface」カテゴリの領域に割り当てる模式的な表示幅。
surface_width -- float: 「surface」カテゴリの領域に割り当てる模式的な表示幅。
- 戻り値:
Tuple[np.ndarray, List[float], List[float]]: - np.ndarray: 各領域の模式的な開始および終了位置の配列。 - List[float]: 各領域の模式的な幅のリスト。 - List[float]: 各領域の模式的な中心位置のリスト。
- electrical.T_distrib.horizontal_plate_h_nat(T_surface_C: float, T_air_C: float, L_char_m: float, k_air_ref: float, side: str) float[ソース]
水平平板の自然対流熱伝達係数を計算します。
レイリー数とヌセルト数相関を用いて、水平平板の自然対流熱伝達係数
hを計算します。 表面と空気の温度差が極めて小さい場合は、熱伝達係数が非常に小さな正の値として返されます。 相関は、浮力的に有利な(不安定)および不利な(安定)ケースを考慮に入れます。- パラメータ:
T_surface_C -- float: 表面温度 [°C]。
T_air_C -- float: 周囲空気温度 [°C]。
L_char_m -- float: 特性長さ [m]。
k_air_ref -- float: 空気の参照熱伝導率 [W/mK]。
side -- str: サンプルの「top」(上部)または「bottom」(下部)表面を指定。
- 戻り値:
float: 自然対流熱伝達係数 [W/m^2/K]。
- 例外:
ValueError --
sideが 'top' または 'bottom' 以外の場合。
- electrical.T_distrib.main() None[ソース]
スクリプトのメイン実行関数です。
コマンドライン引数をパースし、選択された表面モード('delta'または'conv_rad')に基づいて、 熱電スタックの温度プロファイルを計算、レポート表示、およびプロットを実行します。
- electrical.T_distrib.plot_profiles_conv_rad(z_phys: ndarray, T_phys: ndarray, internal_regions: List[Region], interface_temps_internal: List[float], Th: float, Tc: float, Ts_top: float, Ts_bottom: float, out_png: str, schematic_layer_width: float, schematic_interface_width: float, schematic_surface_width: float) None[ソース]
'conv_rad'モードの温度プロファイルを物理スケールと模式図スケールでプロットし、PNGファイルに保存します。
上段のプロットは内部スタックのみの物理的な温度プロファイルを示し、 下段のプロットは表面の対流・放射領域を含む模式的な温度プロファイルを示します。
- パラメータ:
z_phys -- np.ndarray: 物理スケールのZ座標配列(内部スタックのみ)。
T_phys -- np.ndarray: 物理スケールの温度配列(内部スタックのみ)。
internal_regions -- List[Region]: 内部スタック領域のリスト。
interface_temps_internal -- List[float]: 内部界面の温度リスト。
Th -- float: 上部周囲空気温度 [°C]。
Tc -- float: 下部周囲空気温度 [°C]。
Ts_top -- float: 上部サンプル表面温度 [°C]。
Ts_bottom -- float: 下部サンプル表面温度 [°C]。
out_png -- str: 出力PNGファイル名。
schematic_layer_width -- float: 「layer」カテゴリの領域の模式的な表示幅。
schematic_interface_width -- float: 「interface」カテゴリの領域の模式的な表示幅。
schematic_surface_width -- float: 「surface」カテゴリの領域の模式的な表示幅。
- 戻り値:
None
- electrical.T_distrib.plot_profiles_delta(z_phys: ndarray, T_phys: ndarray, regions: List[Region], interface_temperatures: List[float], out_png: str, schematic_layer_width: float, schematic_interface_width: float, schematic_surface_width: float) None[ソース]
'delta'モードの温度プロファイルを物理スケールと模式図スケールでプロットし、PNGファイルに保存します。
上段のプロットは実際の厚さに基づく物理的な温度プロファイルを示し、 下段のプロットは各領域に一定の幅を割り当てた模式的な温度プロファイルを示します。
- パラメータ:
z_phys -- np.ndarray: 物理スケールのZ座標配列。
T_phys -- np.ndarray: 物理スケールの温度配列。
regions -- List[Region]: 全スタック領域のリスト。
interface_temperatures -- List[float]: 各界面の温度リスト。
out_png -- str: 出力PNGファイル名。
schematic_layer_width -- float: 「layer」カテゴリの領域の模式的な表示幅。
schematic_interface_width -- float: 「interface」カテゴリの領域の模式的な表示幅。
schematic_surface_width -- float: 「surface」カテゴリの領域の模式的な表示幅。
- 戻り値:
None
- electrical.T_distrib.print_report_conv_rad(args: Namespace, internal_regions: List[Region], result: dict) None[ソース]
'conv_rad'モードでの計算結果をコンソールに出力します。
入力温度、対流・放射パラメータ、内部領域の熱抵抗、有効な表面抵抗、熱流束、 表面熱流束の内訳、界面温度、およびTE半導体層の温度降下を含む詳細なレポートを表示します。
- パラメータ:
args -- argparse.Namespace: コマンドライン引数を格納するオブジェクト。
internal_regions -- List[Region]: 内部スタック領域のリスト。
result -- dict:
solve_conv_rad関数から返された計算結果の辞書。
- 戻り値:
None
- electrical.T_distrib.print_report_delta(args: Namespace, regions: List[Region], q: float, interface_temperatures: List[float]) None[ソース]
'delta'モードでの計算結果をコンソールに出力します。
入力温度、各領域の熱抵抗、総熱抵抗、熱流束、および各界面温度と TE半導体層の温度降下を含む詳細なレポートを表示します。
- パラメータ:
args -- argparse.Namespace: コマンドライン引数を格納するオブジェクト。
regions -- List[Region]: 全スタック領域のリスト。
q -- float: 計算された熱流束 [W/m^2]。
interface_temperatures -- List[float]: 各界面の温度リスト。
- 戻り値:
None
- electrical.T_distrib.solve_conv_rad(args: Namespace, internal_regions: List[Region], n_points_per_region: int = 80) dict[ソース]
'conv_rad'モードで定常状態の温度プロファイルを解きます。
上部と下部の表面温度を通じて暗黙的に決定される未知の熱流束を、 上部と下部からの熱流束が一致するように上部表面温度について解くことで見つけます。 二分法を使用して収束させます。
- パラメータ:
args -- argparse.Namespace: コマンドライン引数を格納するオブジェクト。
internal_regions -- List[Region]: 内部スタック領域のリスト。
n_points_per_region -- int, optional: 各領域でプロットのために生成する点の数 (デフォルトは80)。
- 戻り値:
dict: 計算結果を格納した辞書。以下のキーが含まれます: - 'q': float: 熱流束 [W/m^2]。 - 'R_internal': float: 内部スタックの熱抵抗 [m^2K/W]。 - 'R_top_eff': float: 有効な上部表面熱抵抗 [m^2K/W]。 - 'R_bottom_eff': float: 有効な下部表面熱抵抗 [m^2K/W]。 - 'Ts_top': float: 上部サンプル表面温度 [°C]。 - 'Ts_bottom': float: 下部サンプル表面温度 [°C]。 - 'q_conv_top': float: 上部対流熱流束 [W/m^2]。 - 'q_rad_top': float: 上部放射熱流束 [W/m^2]。 - 'q_conv_bottom': float: 下部対流熱流束 [W/m^2]。 - 'q_rad_bottom': float: 下部放射熱流束 [W/m^2]。 - 'z_phys': np.ndarray: 物理スケールのZ座標配列。 - 'T_phys': np.ndarray: 物理スケールの温度配列。 - 'interface_temps_internal': List[float]: 内部界面温度のリスト。 - 'interface_temps_full': List[float]: 全界面温度のリスト(空気温度と表面温度を含む)。
- 例外:
RuntimeError -- 上部表面温度の解の区間を見つけられなかった場合。
- electrical.T_distrib.top_surface_flux_downward(T_air_top_C: float, T_surface_top_C: float, eps_top: float, L_char_top_m: float, k_air_ref: float, T_rad_top_C: float | None = None) Tuple[float, float, float][ソース]
上部周囲から上部サンプル表面への正味の下向き熱流束を計算します。
自然対流と熱放射による熱流束の合計を計算します。 熱流束は下向きが正と定義されます。
- パラメータ:
T_air_top_C -- float: 上部周囲空気温度 [°C]。
T_surface_top_C -- float: 上部サンプル表面温度 [°C]。
eps_top -- float: 上部表面の放射率 [-]。
L_char_top_m -- float: 上部自然対流の特性長さ [m]。
k_air_ref -- float: 空気の参照熱伝導率 [W/mK]。
T_rad_top_C -- float | None, optional: 上部放射環境温度 [°C]。Noneの場合、T_air_top_C が使用されます。
- 戻り値:
Tuple[float, float, float]: 合計熱流束、対流熱流束、放射熱流束 [W/m^2] のタプル。