C++

【オブジェクト指向C++】2次元ナビエストークス方程式(キャビティ流れ)の数値計算

Step3:空間微分の離散化の定義

Diff1d.hに名前空間fdとして空間微分の定義を行います。

  • gradX:x方向1階微分後退差分$\frac{\partial u}{\partial x}=\frac{u_{i,j}-u_{i-1,j}}{dx}$
  • gradY:y方向1階微分後退差分$\frac{\partial u}{\partial y}=\frac{u_{i,j}-u_{i,j-1}}{dy}$
  • gradXCDS:x方向1階微分中心差分$\frac{\partial u}{\partial x}=\frac{u_{i+1,j}-u_{i-1,j}}{2dx}$
  • gradYCDS:y方向1階微分中心差分$\frac{\partial u}{\partial y}=\frac{u_{i,j+1}-u_{i,j-1}}{2dy}$
  • poissonX:x方向2階微分中心差分$\frac{\partial^2 u}{\partial x^2}=\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{dx^2}$
  • poissonY:y方向2階微分中心差分$\frac{\partial^2 u}{\partial y^2}=\frac{u_{i,j+1}-2u_{i,j}+u_{i,j-1}}{dy^2}$

Diff1d.h

こちらの微分の離散化を使ってmain.cppでステップ数の分だけ計算をしてみましょう。

解く方程式は以下です。

\begin{align*}
\frac{\partial u}{\partial t}+u\frac{\partial u}{\partial x}+v\frac{\partial u}{\partial y} = \nu \left(\frac{\partial^2 u}{\partial x^2}+\frac{\partial^2 u}{\partial y^2} \right) \tag{15}
\end{align*}

\begin{align*}
\frac{\partial v}{\partial t}+u\frac{\partial v}{\partial x}+v\frac{\partial v}{\partial y} = \nu \left(\frac{\partial^2 v}{\partial x^2}+\frac{\partial^2 v}{\partial y^2} \right) \tag{16}
\end{align*}

\begin{align*}
\frac{\partial^2 p}{\partial x^2}+\frac{\partial^2 p}{\partial y^2}=0 \tag{18}
\end{align*}

テスト計算なので流速ベクトル$\boldsymbol{u}$と圧力$p$は独立の式として解くようにしています。

main.cppでのステップ数のループは以下の部分です。

初期状態は以下としています。

今回はUだけを計算して結果を確認します。

main.cpp

結果を出力するためにFileWriter.hで

を定義しています。

FileWriter.h

FileWriter.cppに処理内容を書きます。
FileWriter::write1dFieldは1次元の計算結果を出力する際には必要でしたが今回は使いません。

FileWriter.cpp

結果をParaViewで確認してみましょう。

【結果】

1 2 3 4 5 6

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。

COMMENT

メールアドレスが公開されることはありません。