C++

【オブジェクト指向C++】1次元バーガース方程式の数値計算

こんにちは(@t_kun_kamakiri

本記事ではC++を使った1次元バーガース方程式を題材にオブジェクト指向でのコーディングを解説します。
コードの解説は以下の記事に詳しく書いています。

本記事の内容

1次元バーガース方程式をC++で数値計算

1次元バーガース方程式
\begin{align*}\frac{\partial u(x,t)}{\partial t}+u(x,t)\frac{\partial u(x,t)}{\partial x}=\nu\frac{\partial^2 u(x,t)}{\partial x^2}\tag{1}\end{align*}
数値計算にはC++を使います。

カマキリ

C++の勉強中です

C++は3か月前に勉強を始めたばかりなのでコーディングスタイルの良し悪しに関してはこれからもっと磨いていかないといけないと思っています。今回はアウトプットの場として勉強したことをメモとして残しておきます。

【環境】
Microsoft Visual C++ (Visual Stido 2022)

解く方程式

1次元バーガース方程式
\begin{align*}\frac{\partial u(x,t)}{\partial t}+u(x,t)\frac{\partial u(x,t)}{\partial x}=\nu\frac{\partial^2 u(x,t)}{\partial x^2}\tag{1}\end{align*}
以下のように離散化します。

コードは前回の記事のを利用します。
コードの解説は以下の記事に詳しく書いています。

プログラム保存先

https://github.com/kamakiri1225/1DNS

コードの修正

main.cppの

以下に変更します。

周期境界条件にします。

出力するファイル名を以下に変更します。

修正は以上です。

全体のコード

前回の記事から変更したのはmain.cppとDiff1d.hだけです。

main.cpp

creatFields.hを作ってUの設定は別のヘッダーファイルで定義するようにしました。

creatFields.h

さらにプログラム作成途中でU[i].vauleの値を確認したい場合に出力するプログラムをヘッダーファイルに書きました。

main.cppで

によりインクルードしています。

PrintVector.h

main.cppで

の2行でよりでU[i].vauleの値を確認できます。

Mesh.h

Mesh.cpp

Fields.h

Fields.cpp

Diff1d.h

Solution1D.h

Solution1D.cpp

FileWriter.h

FileWriter.cpp

出力結果の確認

計算を実行し、計算が終了すると以下の2つのファイルができています。

  • 1dBurgers _initial.dat:初期状態
  • 1dBurgers _final.dat:最終状態

今回はさくっと確認するためExcelで重ねてみました。

  • オレンジ:初期状態
  • 薄青:最終状態(1000ステップ目)

周期境界なので折り返された状態になっています。
もう少しタイムステップを小さく(ntimestep = 500)にすると拡散しながら波が移動しているのがわかります。

参考書

1週間でC++の基礎が学べる本

1週間でC++の基礎が学べる本

亀田 健司
2,860円(12/09 13:56時点)
発売日: 2021/03/12
Amazonの情報を掲載しています
独習C++ 新版

独習C++ 新版

高橋 航平
3,346円(12/09 13:56時点)
発売日: 2019/11/11
Amazonの情報を掲載しています
江添亮のC++入門

江添亮のC++入門

江添 亮
5,500円(12/08 15:56時点)
Amazonの情報を掲載しています

【プロフィール】

カマキリ
(^^)

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

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

 

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

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

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

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です