C++

【オブジェクト指向C++】1次元移流方程式の数値計算

Step1:x方向の分割幅

3つのファイルを用意します。

  • main.cpp:メインファイル
  • Mesh.h:x座標の定義のヘッダーファイル
  • Mesh.cpp:Mesh.hで定義した変数や関数処理

main.cpp

ヘッダーファイルと関数処理ようのcppファイルを同時に作成したい場合は以下のようにします。

Mesh.h

Mesh.cpp

【結果】

初期値としてxpts[i]の全てのiに対して値が0になっています。

Mesh作成のためのクラスを用意しています。
Mesh.h(ヘッダーファイル)は基本的に変数や関数の定義を書くようにします。

は、Meshクラスのコンストラクタで以下のようにmain.cppでクラスのインスタンス化が実行された時点で関数が実行されます。

Mesh.hには引数無しの「Mesh()」と引数ありの「Mesh(int&, double&)」があり、クラスのインスタンス化を行う際の引数や変数の型に応じて実行される関数が変わります。

今回は「Mesh mesh_(Nx, totallength);」として引数ありでインスタンス化を行っているため、Mesh.cppの

が実行されることになります。

「xpts(NumberOfNode, 0.0)//vector(要素数, 値)」はxptsがvectorコンテナによって、要素数と値を入れることで配列要素を作ることができます。
今は全ての要素の値を0にしています。

Step2:x方向座標の離散化

xptsがx座標の分割座標になるのですが、初期値として全ての要素の値を0にしていました。

\begin{align*}
x[i]=x[i-1]+dx\tag{8}
\end{align*}

としてx座標の離散化を行いたいと思います。

Mesh.hに以下の記述を追加します。

これは「vector<double>」型を参照渡しで引数に設定して、x座標の分割座標を設定する関数です。関数の処理内容なMesh.cppに記述します。

さらに以下で「discritized1dgrid(xpts); //add」とします。
xptsを参照渡してとている点に注意です。

ここまでの記述がない場合は、step1で見たようにxptsの要素の値は全て0でしたが、xptsの参照渡しにより同じアドレスの値を書き換えているため、xptsの指す値が上書きされています。main.cppでxptsを出力した値がstep1で出力した値と違っていることを確認しましょう。

では、ここまでの全体のコードを見ておきます。

Mesh.h

Mesh.cpp

main.cpp

【結果】

xpts[i]がiに応じて値が設定されています。
これにてx座標の離散化を行うことができました。

1 2 3 4 5 6

COMMENT

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