LoginSignup
0
1

More than 3 years have passed since last update.

heatrapyに熱伝達+温度で入熱できる機能を追加する

Posted at

やったこと

heatrapyでの一次元非定常伝熱解析で熱伝達率と温度で入熱出来る機能を追加しました。
もともと、任意の位置への入熱は出来る仕様なので、それを利用しました。

改修点

  • system.pyのclass single_objectをいじってます

set_input_heat_transferで入力条件をセットして、computeで計算する際に熱を入れていきます。時間毎の温度差に応じて、各々の時間ステップで入熱しています。

henko.py
class single_object(object):
    def __init__(self, amb_temperature, materials=('Cu',), borders=(1, 11),
                 materials_order=(0,), dx=0.001, dt=0.1, file_name='data.txt',
                 boundaries=(0, 0), Q=[], Q0=[], heat_points=(1, -2),
                 initial_state=False, h_left=50000., h_right=50000.,
                 materials_path=False):

    中略

        self.input_heat_transfer = False #これをTrueにすると熱伝達率+温度での入熱を入れる

    中略

    def set_input_heat_transfer(self,input_heat_transfer_point,Heat_transfer_coefficient,Heat_transfer_temparature):
        """熱伝達率と温度でを任意の位置へ追加します。現状、一点のみへの入熱です

        Arguments:
            input_heat_transfer_point {int} -- 入熱するポイントです。一番上の場合は、1です
            Heat_transfer_coefficient {float} -- 熱伝達率[W/(m2K)]
            Heat_transfer_temparature {float} -- 熱伝達に使用される温度です[K]
        """
        self.input_heat_transfer=True
        self.input_heat_transfer_point = input_heat_transfer_point
        self.Heat_transfer_coefficient = Heat_transfer_coefficient
        self.Heat_transfer_temparature = Heat_transfer_temparature

    中略

    def compute(self, timeInterval, write_interval, solver='explicit_k(x)',
                modeTemp=False, numFlag=0.5, modeTempPoint=1):

            #熱伝達率と温度でインプットする場合
            if self.input_heat_transfer:
                td = self.temperature[self.input_heat_transfer_point][0]
                self.Q0[self.input_heat_transfer_point] = self.Heat_transfer_coefficient * (self.Heat_transfer_temparature - td)/self.dx
                print(td,self.Q0)

はまったところ

思ったような入熱になりませんでした。理由は単純で単位のミスでありました。Q0計算のところで、self.dxで割っているところです。熱伝達率の単位は[W/(m2 K)]の場合です。

テスト

銅でやってみました。
【インプット】

  • 初期温度 : 293[K]
  • 材料 :銅(物性値はheatrapyに入っている値
  • 長さ : 20mm
  • 境界条件:両端断熱
  • 入熱ポイント:端部(x=0)
  • 熱伝達率:700[W/(m2K)]
  • 雰囲気温度:900[K]
  • 解析時間:30秒
heat_transfer_test.py
import heatrapy as ht
import pandas as pd
import os

if os.path.exists("heat_transfer.txt"):
    os.remove("heat_transfer.txt")

example = ht.single_object(amb_temperature=293, materials=('Cu',), borders=(1,21),materials_order=(0,),
                            dx=0.001, dt=0.001, file_name='heat_transfer.txt',boundaries=(0,0), Q=[], Q0=[],initial_state=False)

example.set_input_heat_transfer(1,700,900)

example.compute(timeInterval=30, write_interval=10, solver='implicit_k(x)')

df = pd.read_csv("heat_transfer.txt")
df=df.drop("heat[1](W)", axis=1)
df=df.drop("heat[-2](J)", axis=1)
df = df.set_index("time(s)")
df.plot(figsize=(15,8))

【結果】
よい感じですね。dtの値は注意が必要です。dtを小さくすると精度は上がりますが、解析時間が長くなります。回しながら良いdtの値を探していく必要があります。

image.png

ソースコード

ソースコードは以下です。
https://github.com/myao9494/heatrapy
テストは、heat_transfer_test.ipynbです

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1