こたつむりの備忘録

研究・技術的なことをメモしていきます

NEMDで熱伝導率計算 - その1

3ヶ月ほど放置してましたすみません

前回まではEMDで熱伝導率を計算することを目的としていくつか記事を書いていました

指導教官づてでLAMMPSの熱伝導率計算に詳しい方に聞いたのですが、 EMDはパラメータチューニングがかなりシビアらしいですね。
理論的背景も難解なのでEMDで熱伝導率を計算するのは諦めました。



はい、ということで今回からは
LAMMPSを使ってNEMD(非平衡分子動力学法)で熱伝導率計算する時の知見
をメモしていこうと思います

サンプル

何はともあれまずは公式ドキュメントとサンプルコードを確認しましょう。
以前にも書いた気がしますが、NEMDは適当に流しただけだったので再度見ていきます。

LAMMPSでの熱伝導率計算は大別すると4つの方法があり、
exapmle/KAPPA/ ではlangevinなどとタグ付けされた5つの例が確認できます。
まとめると以下のような感じ

  • NEMD
    1. サーモスタットで温度を制御 langevin
    2. 系に出入りするエネルギーを制御 heat ehex
    3. 原子組の運動エネルギーを交換してしまうことで温度勾配を作る mp
  • EMD heatflux

NEMDは1〜3と番号を振ったので、それぞれの詳細は別記事に分けて書いていこうと思います

1〜3の共通点、相違点

実際に系に温度勾配がかかりますが、周期的境界条件を満たすために逆向きの温度勾配もかける必要があります。
熱流方向にn等分した領域を考えて、その中から高温領域hot・低温領域coldを用意します。

f:id:justice_vsbr:20181110001553p:plain
ポンチ絵ですがこんな感じ。z方向が熱流方向です。

NEMDによる熱伝導率計算の流れは共通して以下のようになっています。

  • まずは系全体が一定温度になるように熱平衡させる
  • hot-cold間に温度勾配を発生させて定常状態にさせる(各手法でここが異なる
    1. hotcoldサーモスタットを当てて一定温度になるように温度制御
    2. hotcold一定エネルギーを加える/取り除く
    3. hotの中で最低温度の原子とcoldの中で最高温度の原子のペアを作り、運動エネルギーを交換する
  • 測定を開始して、累積熱流束や温度勾配の時間平均などを求める
  • 最終的な熱伝導率を見積もる
    • LAMMPSコマンドを駆使してスクリプトに組み込むこともできるはずだが、後処理として分けることも可能(サンプルコードでは分けている)
    • 熱流束・温度勾配は自分で設定する or ログファイルから読み取る
    • フーリエ則から
\kappa = - \frac{J}{grad(T)}

ログファイルから必要な値をどうやって読み取るか、はそれぞれの記事で解説していきます。
なお、サンプルのログファイルとREADMEの更新時期がずれているため、
ログファイルから読み取れる値とREADMEに書いてある値が異なっていることに注意してください

温度プロファイル

一様な物質なら、理想的な定常状態では温度プロファイルは直線的になっているはず。

サンプルコードでは、fix ave/chunkコマンドで熱流方向の温度プロファイルの時間平均を定期的にprofile.**というファイルに出力するようになっています。

  • 測定開始直後
  • 測定中
  • 測定終了直前

の3点の温度プロファイルをそれぞれのサンプルで描画しました。
ちゃんと測定開始時点で定常状態になっていて、直線的な温度勾配になっていることが確認できますね。

f:id:justice_vsbr:20181110013159p:plainf:id:justice_vsbr:20181110013206p:plainf:id:justice_vsbr:20181110013207p:plainf:id:justice_vsbr:20181110013214p:plain
左からlangevin、heat、ehex、mpの温度プロファイル

注意点

サンプルは、

  • 計算対象がレナードジョーンズ流体 (pair_style lj/cut)
  • それに伴い、物理量を無次元で表す特殊な単位系を使用している (units lj)

という特殊な例です。

私のように固体物性を調べたい場合にはそのまま流用できない部分もあると思います。

試行錯誤する中でつまづいたことなども次回以降の記事で書いていくので参考にしてください。
今回はここまで