From d0768e6039ba526d4fde446fd22fd6ff76577417 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Tue, 26 Nov 2019 16:14:09 +0000 Subject: [PATCH] waves: Protected exponential and hyperbolic functions from overflow Resolves bug report https://bugs.openfoam.org/view.php?id=3397 --- src/waves/waveModels/Airy/Airy.C | 4 +++- src/waves/waveModels/Stokes2/Stokes2.C | 10 +++++++--- src/waves/waveModels/Stokes5/Stokes5.C | 10 +++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/waves/waveModels/Airy/Airy.C b/src/waves/waveModels/Airy/Airy.C index 104064f06b..dea5a08b6d 100644 --- a/src/waves/waveModels/Airy/Airy.C +++ b/src/waves/waveModels/Airy/Airy.C @@ -80,7 +80,9 @@ Foam::tmp Foam::waveModels::Airy::vi const scalarField z(xz.component(1)); const scalarField phi(angle(t, x)); - const scalarField kz(k()*z); + + const scalar kzGreat = log(i*great); + const scalarField kz(min(max(k()*z, - kzGreat), kzGreat)); if (deep()) { diff --git a/src/waves/waveModels/Stokes2/Stokes2.C b/src/waves/waveModels/Stokes2/Stokes2.C index 641783cfd5..a71429fa01 100644 --- a/src/waves/waveModels/Stokes2/Stokes2.C +++ b/src/waves/waveModels/Stokes2/Stokes2.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2017-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,9 @@ Foam::tmp Foam::waveModels::Stokes2::elevation const scalarField& x ) const { - const scalar kd = k()*depth(), ka = k()*amplitude(t); + static const scalar kdGreat = log(great); + const scalar kd = min(max(k()*depth(), - kdGreat), kdGreat); + const scalar ka = k()*amplitude(t); const scalar T = deep() ? 1 : tanh(kd); @@ -87,7 +89,9 @@ Foam::tmp Foam::waveModels::Stokes2::velocity const vector2DField& xz ) const { - const scalar kd = k()*depth(), ka = k()*amplitude(t); + static const scalar kdGreat = log(great); + const scalar kd = min(max(k()*depth(), - kdGreat), kdGreat); + const scalar ka = k()*amplitude(t); const scalar A22ByA11 = deep() ? 0 : 0.375/pow3(sinh(kd)); diff --git a/src/waves/waveModels/Stokes5/Stokes5.C b/src/waves/waveModels/Stokes5/Stokes5.C index dfafb0273d..1cf09c79b1 100644 --- a/src/waves/waveModels/Stokes5/Stokes5.C +++ b/src/waves/waveModels/Stokes5/Stokes5.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2017-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,9 @@ Foam::tmp Foam::waveModels::Stokes5::elevation const scalarField& x ) const { - const scalar kd = k()*depth(), ka = k()*amplitude(t); + static const scalar kdGreat = log(great); + const scalar kd = min(max(k()*depth(), - kdGreat), kdGreat); + const scalar ka = k()*amplitude(t); const scalar S = deep() ? 0 : 1/cosh(2*kd), T = deep() ? 1 : tanh(kd); @@ -128,7 +130,9 @@ Foam::tmp Foam::waveModels::Stokes5::velocity const vector2DField& xz ) const { - const scalar kd = k()*depth(), ka = k()*amplitude(t); + static const scalar kdGreat = log(great); + const scalar kd = min(max(k()*depth(), - kdGreat), kdGreat); + const scalar ka = k()*amplitude(t); const scalar S = deep() ? 0 : 1/cosh(2*kd); const scalar SByA11 = deep() ? 0 : S*sinh(kd);