私はFEMソルバーであるFenics with pythonで作業します。しかし、Pythonはラッパーであり、メインプログラムはC++で作られているので、最近私は後者に切り替えました。私は次の式(コードと式の両方)を使ってデモを見つけました。私は何が書かれているのか理解できず、なぜこのように書くのでしょうか?これは、私が使用しているFEMプラットフォームに特有のものですか?これをC++の知識の欠如に関連する問題として考える代わりに、その方向性を調べるべきですか?これはC++でこの式を書く正しい方法ですか?
加速度更新が式によって定義されるステッピング方式が実施されているニューマークベータ時間:
= 1 /(2 *ベータ)*((U - U0 - V0の*のDT)/(0.5 * DT * DT) - (1-2 *ベータ版)* A0)
としてのC++コードで表現されています
一般的にあなたがするようにコードとデータを整理するために探しているC++で// Acceleration update
void update_a(Function& a, const Function& u, const Function& a0,
const Function& v0, const Function& u0,
double beta, double dt)
{
*a.vector() = *u.vector();
*a.vector() -= *u0.vector();
*a.vector() *= 1.0/dt;
*a.vector() -= *v0.vector();
*a.vector() *= 1.0/((0.5-beta)*dt);
*a.vector() -= *a0.vector();
*a.vector() *= (0.5-beta)/beta;
}
実際の質問は何ですか?質問のタイトルの中で「この表現」は何ですか? 「私は書かれたことを理解できません。」と私の意見では広すぎます。 –
タイプ(class/struct) 'Function'を見てください。これはおそらく、オーバーロードされた 'operator *'型を返すメンバ関数 'vector'や、' * 'が適用されるときにあなたのコードに示される算術式と代入式をサポートする別の型をもたらすポインタを持っています。 – Pixelchemist
何をしているのかわからずにコードを見ると、 'Function'型のオブジェクトは実際に何らかの形で数学的なベクトルになり、' a.vector() 'はベクトルを取得し、演算子のオーバーロードを使ってあなたの表現。したがって、 ' - = u0.vector()'はそれぞれの位置で 'u0'を減算します。これの利点は、自動的に操作を並列化/「ベクトル化」することでしょうか?あるいは、彼らはこのようにもっと明確に感じます。 –