津波解析2015年3月13日 | |
はじめに津波 (孤立波) の解析について。 バージョンOpenFOAM 2.3.1 ファイル津波解析ソルバーは interFoam を使う。造波には codedFixedValue を使う。 2 次元で解析する。Y 軸下向きを重力の方向とする。孤立波の式には Laitone の式を使用。 alpha1.water
left
{
type codedFixedValue;
value uniform 0;
redirectType solitary_wave_alpha;
code
#{
const scalar d = 5.;
const scalar H = 2.;
const scalar t = this->db().time().timeOutputValue();
scalar c = sqrt(9.81*d*(1 + H/d));
scalar x0 = 3/sqrt(3./4.*H/pow(d, 3));
scalar X = sqrt(3./4.*H/pow(d, 3))*(x0 - c*t);
scalar sech2 = pow(1./cosh(X), 2);
scalarField f(patch().size(), 0.);
forAll(patch().Cf(), faceI)
{
const scalar y = patch().Cf()[faceI][1];
if (y <= d + H*sech2)
{
f[faceI] = 1.;
}
}
operator==(f);
#};
}
U
left
{
type codedFixedValue;
value uniform (0 0 0);
redirectType solitary_wave_veclocity;
code
#{
const scalar d = 5.;
const scalar H = 2.;
const scalar t = this->db().time().timeOutputValue();
scalar c = sqrt(9.81*d*(1 + H/d));
scalar x0 = 3/sqrt(3./4.*H/pow(d, 3));
scalar X = sqrt(3./4.*H/pow(d, 3))*(x0 - c*t);
scalar sech2 = pow(1./cosh(X), 2);
scalar u = sqrt(9.81*d)*H/d*sech2;
vectorField f(patch().size(), vector::zero);
forAll(patch().Cf(), faceI)
{
const scalar y = patch().Cf()[faceI][1];
const scalar v =
sqrt(3.*9.81*d)*pow(H/d, 1.5)*(y/d)*sech2*tanh(X);
f[faceI] = vector(u, v, 0.);
}
operator==(f);
#};
}
d は深さ、H は波の高さ、d + H が底から波のてっぺんまでの距離である。x0 ははじめの波の高さが H の 1 % 以下になるように設定。 アニメーション ![]() それっぽく見えるように奥行を 500 倍にしている。色は高さを表す。 参考文献
| |
| PENGUINITIS | |