津波解析

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 倍にしている。色は高さを表す。

参考文献

  • M. Kawahara and A. Anjyu, Lagrangian finite element method for solitary wave propagation, Computational Mechanics, 1988 (こちら から入手可能)