この週末で、寝かしていた地下水の熱輸送計算を片付けておこうと思い立ちました。
利用するのは FiPy。
1次元だと EXCEL でもよかったのですが、いまさら感があります(余談ですが、ここ数年で取り扱うデータ数が飛躍的に増加し、 EXCEL はベンチウォーマーになっています)。
伝熱計算では、以前見かけたコチラ↓のサイトに簡単なコードが紹介されています。 http://penguinitis.g1.xrea.com/study/FiPy/FiPy.html
1次元でも2Dメッシュを使った方がビジュアル的に理解しやすいので、そのまま2Dメッシュを使わせていただくことにしました。
地表流などでの熱の移流拡散、定常・非定常はそのままでOKですが、地下水など媒質中を流れる流体の熱の移流拡散は、各項の係数に修正が必要となります。その修正は簡単なのですが、あらためて調べてみるとあまり紹介されていないですね。今回は、段ボールの中から最初に見つけた以下の図書を参考にしました。
登坂「地圏水循環の数理」
で、動かしたのですが、定常の結果がほぼ一定値。左側(流入側)の境界条件に入力した値より1K低い値が連続します。
左側の境界条件は温度固定なので一定値でもOKです。が、右側(流出側)の境界条件は温度固定ではなく勾配を適当に入れていましたので、ある範囲で温度勾配がつくように予想していました。これでは結果があっているのか計算ミスをしたのかわからず、迷ってしまいます。
ひとまず係数をもとに戻し、理解しやすい表流水内の濃度の1D移流拡散でスクリプトを整理することにしました。結果は以下の通りです。
上図は最終ステップの濃度分布。2Dメッシュなので色付きで表示してくれます。下左図は縦軸にTimeStepをとって時系列変化を表現したモノ(STIVと同じ絵です。https://phreeqc.blogspot.com/2019/12/river.html)。下の参照リンクと異なり転置していません。
あと、time step も1秒と飛ばしているので、得られた濃度に厳密な意味は期待しません。が、与えた流速と整合する絵が得られましたので計算は正常に回ったと判断します。
ここで悩んだのは左端の境界条件。時系列で変化する濃度(10秒まで0, 50秒まで50, 60秒まで, 100, 以降50)を与えたかったのですが、その方法がわかりませんでした。が、検索すると同じことを聞かれている方がいらっしゃいました。コード付きの回答があります。ありがたい。
https://stackoverflow.com/questions/56237476/non-steady-diffusion-advection-equation-with-time-dependent-dirichlet-boundary-c
ただ、このコードでは境界条件が更新されなかったので、左端の境界条件設定文を for loop 内に入れたら期待通りに動きました。
スクリプトは組めたので、再度、熱輸送計算へ。
続きは後日。
0 件のコメント:
コメントを投稿