INT: refactored wave model code

This commit is contained in:
Andrew Heather
2018-06-13 12:45:40 +01:00
parent 13d49f60fc
commit a7425273a0
11 changed files with 193 additions and 199 deletions

View File

@ -2,6 +2,7 @@ waveModel/waveModel.C
waveModel/waveModelNew.C waveModel/waveModelNew.C
waveGenerationModels/base/waveGenerationModel/waveGenerationModel.C waveGenerationModels/base/waveGenerationModel/waveGenerationModel.C
waveGenerationModels/base/irregularWaveModel/irregularWaveModel.C
waveGenerationModels/base/regularWaveModel/regularWaveModel.C waveGenerationModels/base/regularWaveModel/regularWaveModel.C
waveGenerationModels/base/solitaryWaveModel/solitaryWaveModel.C waveGenerationModels/base/solitaryWaveModel/solitaryWaveModel.C
waveGenerationModels/derived/Boussinesq/BoussinesqWaveModel.C waveGenerationModels/derived/Boussinesq/BoussinesqWaveModel.C
@ -12,6 +13,7 @@ waveGenerationModels/derived/streamFunction/streamFunctionWaveModel.C
waveGenerationModels/derived/StokesII/StokesIIWaveModel.C waveGenerationModels/derived/StokesII/StokesIIWaveModel.C
waveGenerationModels/derived/StokesI/StokesIWaveModel.C waveGenerationModels/derived/StokesI/StokesIWaveModel.C
waveGenerationModels/derived/StokesV/StokesVWaveModel.C waveGenerationModels/derived/StokesV/StokesVWaveModel.C
waveGenerationModels/derived/irregularMultiDirectional/irregularMultiDirectionalWaveModel.C
waveAbsorptionModels/base/waveAbsorptionModel/waveAbsorptionModel.C waveAbsorptionModels/base/waveAbsorptionModel/waveAbsorptionModel.C

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\ / A nd | Copyright (C) 2016-2018 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2015 IH-Cantabria \\/ M anipulation | Copyright (C) 2015 IH-Cantabria
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -49,6 +49,7 @@ Foam::scalar Foam::waveModels::irregularWaveModel::timeCoeff
return max(0, min(t/rampTime_, 1)); return max(0, min(t/rampTime_, 1));
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::waveModels::irregularWaveModel::irregularWaveModel Foam::waveModels::irregularWaveModel::irregularWaveModel

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\ / A nd | Copyright (C) 2016-2018 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2015 IH-Cantabria \\/ M anipulation | Copyright (C) 2015 IH-Cantabria
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -41,7 +41,7 @@ namespace waveModels
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class irregularWaveModel Declaration Class irregularWaveModel Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class irregularWaveModel class irregularWaveModel
@ -69,6 +69,7 @@ protected:
//- Return the time scaling coefficient //- Return the time scaling coefficient
virtual scalar timeCoeff(const scalar t) const; virtual scalar timeCoeff(const scalar t) const;
public: public:
//- Runtime type information //- Runtime type information

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\ / A nd | Copyright (C) 2016-2018 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2015 IH-Cantabria \\/ M anipulation | Copyright (C) 2015 IH-Cantabria
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -41,15 +41,6 @@ namespace waveModels
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
Foam::scalar Foam::waveModels::regularWaveModel::timeCoeff
(
const scalar t
) const
{
return max(0, min(t/rampTime_, 1));
}
Foam::word Foam::waveModels::regularWaveModel::waveType() const Foam::word Foam::waveModels::regularWaveModel::waveType() const
{ {
scalar waveK = 2.0*mathematical::pi/waveLength_; scalar waveK = 2.0*mathematical::pi/waveLength_;
@ -78,8 +69,9 @@ Foam::waveModels::regularWaveModel::regularWaveModel
const bool readFields const bool readFields
) )
: :
waveGenerationModel(dict, mesh, patch, false), irregularWaveModel(dict, mesh, patch, false),
rampTime_(VSMALL), waveHeight_(0),
waveAngle_(0),
wavePeriod_(0), wavePeriod_(0),
waveLength_(0), waveLength_(0),
wavePhase_(1.5*mathematical::pi) wavePhase_(1.5*mathematical::pi)
@ -104,9 +96,10 @@ bool Foam::waveModels::regularWaveModel::readDict
const dictionary& overrideDict const dictionary& overrideDict
) )
{ {
if (waveGenerationModel::readDict(overrideDict)) if (irregularWaveModel::readDict(overrideDict))
{ {
lookup("rampTime") >> rampTime_; waveHeight_ = readWaveHeight();
waveAngle_ = readWaveAngle();
lookup("wavePeriod") >> wavePeriod_; lookup("wavePeriod") >> wavePeriod_;
if (wavePeriod_ < 0) if (wavePeriod_ < 0)
@ -130,9 +123,10 @@ bool Foam::waveModels::regularWaveModel::readDict
void Foam::waveModels::regularWaveModel::info(Ostream& os) const void Foam::waveModels::regularWaveModel::info(Ostream& os) const
{ {
waveGenerationModel::info(os); irregularWaveModel::info(os);
os << " Ramp time : " << rampTime_ << nl os << " Wave height : " << waveHeight_ << nl
<< " Wave angle : " << 180/mathematical::pi*waveAngle_ << nl
<< " Wave period : " << wavePeriod_ << nl << " Wave period : " << wavePeriod_ << nl
<< " Wave length : " << waveLength_ << nl << " Wave length : " << waveLength_ << nl
<< " Wave phase : " << wavePhase_ << nl; << " Wave phase : " << wavePhase_ << nl;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd. \\ / A nd | Copyright (C) 2016-2018 OpenCFD Ltd.
\\/ M anipulation | Copyright (C) 2015 IH-Cantabria \\/ M anipulation | Copyright (C) 2015 IH-Cantabria
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,7 +31,7 @@ Description
#ifndef waveModels_reguarWaveModel_H #ifndef waveModels_reguarWaveModel_H
#define waveModels_reguarWaveModel_H #define waveModels_reguarWaveModel_H
#include "waveGenerationModel.H" #include "irregularWaveModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -46,7 +46,7 @@ namespace waveModels
class regularWaveModel class regularWaveModel
: :
public waveGenerationModel public irregularWaveModel
{ {
// Private Member Functions // Private Member Functions
@ -61,8 +61,11 @@ protected:
// Protected data // Protected data
//- Ramp time //- Wave height / [m]
scalar rampTime_; scalar waveHeight_;
//- Wave angle / [rad] (read in degrees)
scalar waveAngle_;
//- Wave period //- Wave period
scalar wavePeriod_; scalar wavePeriod_;
@ -76,9 +79,6 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Return the time scaling coefficient
virtual scalar timeCoeff(const scalar t) const;
//- Return word description of wave type //- Return word description of wave type
virtual word waveType() const; virtual word waveType() const;

View File

@ -27,6 +27,11 @@ License
#include "polyPatch.H" #include "polyPatch.H"
#include "SubField.H" #include "SubField.H"
#include "mathematicalConstants.H"
using namespace Foam::constant;
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -61,6 +66,8 @@ Foam::waveModels::solitaryWaveModel::solitaryWaveModel
) )
: :
waveGenerationModel(dict, mesh, patch, false), waveGenerationModel(dict, mesh, patch, false),
waveHeight_(0),
waveAngle_(0),
x_ x_
( (
patch.faceCentres().component(0)*cos(waveAngle_) patch.faceCentres().component(0)*cos(waveAngle_)
@ -90,6 +97,9 @@ bool Foam::waveModels::solitaryWaveModel::readDict
{ {
if (waveGenerationModel::readDict(overrideDict)) if (waveGenerationModel::readDict(overrideDict))
{ {
waveHeight_ = readWaveHeight();
waveAngle_ = readWaveAngle();
return true; return true;
} }
@ -101,7 +111,9 @@ void Foam::waveModels::solitaryWaveModel::info(Ostream& os) const
{ {
waveGenerationModel::info(os); waveGenerationModel::info(os);
os << " x0: " << x0_ << nl; os << " Wave height : " << waveHeight_ << nl
<< " Wave angle : " << 180/mathematical::pi*waveAngle_ << nl
<< " x0: " << x0_ << nl;
} }

View File

@ -53,6 +53,12 @@ protected:
// Protected data // Protected data
//- Wave height / [m]
scalar waveHeight_;
//- Wave angle / [rad] (read in degrees)
scalar waveAngle_;
//- //-
const scalarField& x_; const scalarField& x_;

View File

@ -39,6 +39,30 @@ namespace waveModels
} }
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
Foam::scalar Foam::waveModels::waveGenerationModel::readWaveHeight() const
{
scalar h(readScalar(lookup("waveHeight")));
if (h < 0)
{
FatalIOErrorInFunction(*this)
<< "Wave height must be greater than zero. Supplied"
<< " value waveHeight = " << h
<< exit(FatalIOError);
}
return h;
}
Foam::scalar Foam::waveModels::waveGenerationModel::readWaveAngle() const
{
scalar angle(readScalar(lookup("waveAngle")));
return angle* mathematical::pi/180;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::waveModels::waveGenerationModel::waveGenerationModel Foam::waveModels::waveGenerationModel::waveGenerationModel
@ -49,9 +73,7 @@ Foam::waveModels::waveGenerationModel::waveGenerationModel
const bool readFields const bool readFields
) )
: :
waveModel(dict, mesh, patch, false), waveModel(dict, mesh, patch, false)
waveHeight_(0),
waveAngle_(0)
{ {
if (readFields) if (readFields)
{ {
@ -77,18 +99,6 @@ bool Foam::waveModels::waveGenerationModel::readDict
{ {
lookup("activeAbsorption") >> activeAbsorption_; lookup("activeAbsorption") >> activeAbsorption_;
lookup("waveHeight") >> waveHeight_;
if (waveHeight_ < 0)
{
FatalIOErrorInFunction(*this)
<< "Wave height must be greater than zero. Supplied"
<< " value waveHeight = " << waveHeight_
<< exit(FatalIOError);
}
lookup("waveAngle") >> waveAngle_;
waveAngle_ *= mathematical::pi/180;
return true; return true;
} }
@ -99,9 +109,6 @@ bool Foam::waveModels::waveGenerationModel::readDict
void Foam::waveModels::waveGenerationModel::info(Ostream& os) const void Foam::waveModels::waveGenerationModel::info(Ostream& os) const
{ {
waveModel::info(os); waveModel::info(os);
os << " Wave height : " << waveHeight_ << nl
<< " Wave angle : " << 180/mathematical::pi*waveAngle_ << nl;
} }

View File

@ -50,13 +50,13 @@ class waveGenerationModel
{ {
protected: protected:
// Protected data // Protected Member Functions
//- Wave height / [m] //- Helper function to read the wave height from the coeff dictionary
scalar waveHeight_; scalar readWaveHeight() const;
//- Wave angle / [rad] (read in degrees) //- Helper function to read the wave angle from the coeff dictionary
scalar waveAngle_; scalar readWaveAngle() const;
public: public:

View File

@ -23,7 +23,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "irregularWavesMultiDirecWaveModel.H" #include "irregularMultiDirectionalWaveModel.H"
#include "mathematicalConstants.H" #include "mathematicalConstants.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
@ -35,11 +35,11 @@ namespace Foam
{ {
namespace waveModels namespace waveModels
{ {
defineTypeNameAndDebug(irregularWavesMultiDirec, 0); defineTypeNameAndDebug(irregularMultiDirectional, 0);
addToRunTimeSelectionTable addToRunTimeSelectionTable
( (
waveModel, waveModel,
irregularWavesMultiDirec, irregularMultiDirectional,
patch patch
); );
} }
@ -48,8 +48,7 @@ namespace waveModels
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
// First order wave height Foam::scalar Foam::waveModels::irregularMultiDirectional::eta
Foam::scalar Foam::waveModels::irregularWavesMultiDirec::eta
( (
const scalar H, const scalar H,
const scalar Kx, const scalar Kx,
@ -68,8 +67,7 @@ Foam::scalar Foam::waveModels::irregularWavesMultiDirec::eta
// * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
//Calculate waveLength Foam::scalar Foam::waveModels::irregularMultiDirectional::waveLength
Foam::scalar Foam::waveModels::irregularWavesMultiDirec::waveLength
( (
const scalar h, const scalar h,
const scalar T const scalar T
@ -78,7 +76,7 @@ Foam::scalar Foam::waveModels::irregularWavesMultiDirec::waveLength
scalar L0 = mag(g_)*T*T/(2.0*mathematical::pi); scalar L0 = mag(g_)*T*T/(2.0*mathematical::pi);
scalar L = L0; scalar L = L0;
for (int iii=1; iii<=100; iii++) for (label i=1; i<=100; ++i)
{ {
L = L0*tanh(2.0*mathematical::pi*h/L); L = L0*tanh(2.0*mathematical::pi*h/L);
} }
@ -87,7 +85,7 @@ Foam::scalar Foam::waveModels::irregularWavesMultiDirec::waveLength
} }
Foam::vector Foam::waveModels::irregularWavesMultiDirec::U Foam::vector Foam::waveModels::irregularMultiDirectional::Uf
( (
const scalar h, const scalar h,
const scalar x, const scalar x,
@ -100,98 +98,80 @@ Foam::vector Foam::waveModels::irregularWavesMultiDirec::U
scalar v = 0.0; scalar v = 0.0;
scalar w = 0.0; scalar w = 0.0;
scalar phaseTot = 0.0; forAll(irregWaveHeights_, ii)
scalar waveKs_ = 0.0; {
scalar waveOmegas_ = 0.0; forAll(irregWaveHeights_[ii], jj)
{
scalar waveKs = mathematical::twoPi/irregWaveLengths_[ii][jj];
scalar waveOmegas = mathematical::twoPi/irregWavePeriods_[ii][jj];
int ii; scalar phaseTot =
int jj; waveKs*x*cos(irregWaveDirs_[ii][jj])
scalar COLUMNAS = 0; + waveKs*y*sin(irregWaveDirs_[ii][jj])
scalar FILAS = irregWaveHeights_.size(); - waveOmegas*t
+ irregWavePhases_[ii][jj];
for (ii=0; ii<FILAS; ++ii) const vector Uf = uMultiDirec
{ (
COLUMNAS= irregWaveHeights_[ii].size(); irregWaveHeights_[ii][jj],
waveOmegas,
phaseTot,
waveKs,
z,
h,
irregWaveDirs_[ii][jj]
);
for (jj=0; jj<COLUMNAS; ++jj) u += Uf[0];
{ v += Uf[1];
waveKs_ = mathematical::twoPi/irregWaveLengths_[ii][jj]; w += Uf[2];
waveOmegas_ = mathematical::twoPi/irregWavePeriods_[ii][jj]; }
phaseTot = waveKs_*x*cos(irregWaveDirs_[ii][jj]) + waveKs_*y*sin(irregWaveDirs_[ii][jj]) - waveOmegas_*t + irregWavePhases_[ii][jj];
const vector Uf = uMultiDirec
(
irregWaveHeights_[ii][jj],
waveOmegas_,
phaseTot,
waveKs_,
z,
h,
irregWaveDirs_[ii][jj]
);
u = u + Uf[0];
v = v + Uf[1];
w = w + Uf[2];
}
} }
return vector(u, v, w); return vector(u, v, w);
} }
void Foam::waveModels::irregularWavesMultiDirec::setLevel void Foam::waveModels::irregularMultiDirectional::setLevel
( (
const scalar t, const scalar t,
const scalar tCoeff, const scalar tCoeff,
scalarField& level scalarField& level
) const ) const
{ {
scalar eta = 0.0;
scalar COLUMNAS = 0;
scalar FILAS = 0;
scalar waveKs_ = 0.0;
scalar waveOmegas_ = 0.0;
int ii;
int jj;
forAll(level, paddlei) forAll(level, paddlei)
{ {
eta = 0.0; scalar eta = 0;
FILAS= irregWaveHeights_.size();
for (ii=0; ii<FILAS; ++ii) forAll(irregWaveHeights_, ii)
{ {
COLUMNAS= irregWaveHeights_[ii].size(); forAll(irregWaveHeights_[ii], jj)
{
for (jj=0; jj<COLUMNAS; ++jj) scalar waveKs = mathematical::twoPi/irregWaveLengths_[ii][jj];
{ scalar waveOmegas =
waveKs_ = mathematical::twoPi/irregWaveLengths_[ii][jj]; mathematical::twoPi/irregWavePeriods_[ii][jj];
waveOmegas_ = mathematical::twoPi/irregWavePeriods_[ii][jj];
eta += eta +=
this->eta this->eta
( (
irregWaveHeights_[ii][jj], irregWaveHeights_[ii][jj],
waveKs_*cos(irregWaveDirs_[ii][jj]), waveKs*cos(irregWaveDirs_[ii][jj]),
xPaddle_[paddlei], xPaddle_[paddlei],
waveKs_*sin(irregWaveDirs_[ii][jj]), waveKs*sin(irregWaveDirs_[ii][jj]),
yPaddle_[paddlei], yPaddle_[paddlei],
waveOmegas_, waveOmegas,
t, t,
irregWavePhases_[ii][jj] irregWavePhases_[ii][jj]
); );
} }
} }
level[paddlei] = waterDepthRef_ + tCoeff*eta; level[paddlei] = waterDepthRef_ + tCoeff*eta;
} }
} }
Foam::vector Foam::waveModels::irregularWavesMultiDirec::uMultiDirec
Foam::vector Foam::waveModels::irregularMultiDirectional::uMultiDirec
( (
const scalar irregH, const scalar irregH,
const scalar irregWaveOmega, const scalar irregWaveOmega,
@ -202,31 +182,23 @@ Foam::vector Foam::waveModels::irregularWavesMultiDirec::uMultiDirec
const scalar irregDir const scalar irregDir
) const ) const
{ {
const scalar ksh = irregWaveKs*hh;
const scalar ksz = irregWaveKs*zz;
scalar u = scalar u =
irregH*0.5*irregWaveOmega* irregH*0.5*irregWaveOmega*cos(pha)*(cosh(ksz)/sinh(ksh))*cos(irregDir);
cos(pha)*
(cosh(irregWaveKs*zz)/
sinh(irregWaveKs*hh))*
cos(irregDir);
scalar v = scalar v =
irregH*0.5*irregWaveOmega* irregH*0.5*irregWaveOmega*cos(pha)*(cosh(ksz)/sinh(ksh))*sin(irregDir);
cos(pha)*
(cosh(irregWaveKs*zz)/
sinh(irregWaveKs*hh))*
sin(irregDir);
scalar w = scalar w =
irregH*0.5*irregWaveOmega* irregH*0.5*irregWaveOmega*sin(pha)*(sinh(ksz)/sinh(ksh));
sin(pha)*
(sinh(irregWaveKs*zz)/
sinh(irregWaveKs*hh));
return vector(u, v, w); return vector(u, v, w);
} }
void Foam::waveModels::irregularWavesMultiDirec::setVelocity
void Foam::waveModels::irregularMultiDirectional::setVelocity
( (
const scalar t, const scalar t,
const scalar tCoeff, const scalar tCoeff,
@ -247,8 +219,8 @@ void Foam::waveModels::irregularWavesMultiDirec::setVelocity
{ {
const label paddlei = faceToPaddle_[facei]; const label paddlei = faceToPaddle_[facei];
const vector Uf = U const vector Uf = this->Uf
( (
waterDepthRef_, waterDepthRef_,
xPaddle_[paddlei], xPaddle_[paddlei],
yPaddle_[paddlei], yPaddle_[paddlei],
@ -257,15 +229,14 @@ void Foam::waveModels::irregularWavesMultiDirec::setVelocity
); );
U_[facei] = fraction*Uf*tCoeff; U_[facei] = fraction*Uf*tCoeff;
} }
} }
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::waveModels::irregularWavesMultiDirec::irregularWavesMultiDirec Foam::waveModels::irregularMultiDirectional::irregularMultiDirectional
( (
const dictionary& dict, const dictionary& dict,
const fvMesh& mesh, const fvMesh& mesh,
@ -284,56 +255,54 @@ Foam::waveModels::irregularWavesMultiDirec::irregularWavesMultiDirec
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::waveModels::irregularWavesMultiDirec::~irregularWavesMultiDirec() Foam::waveModels::irregularMultiDirectional::~irregularMultiDirectional()
{} {}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::waveModels::irregularWavesMultiDirec::readDict(const dictionary& overrideDict) bool Foam::waveModels::irregularMultiDirectional::readDict
(
const dictionary& overrideDict
)
{ {
int ii;
int jj;
if (irregularWaveModel::readDict(overrideDict)) if (irregularWaveModel::readDict(overrideDict))
{ {
lookup("wavePeriods") >> irregWavePeriods_;
lookup("waveHeights") >> irregWaveHeights_;
lookup("wavePhases") >> irregWavePhases_;
lookup("waveDirs") >> irregWaveDirs_;
lookup("irregWavePeriods") >> irregWavePeriods_; irregWaveLengths_ = irregWaveHeights_;
lookup("irregWaveHeights") >> irregWaveHeights_;
lookup("irregWavePhases") >> irregWavePhases_;
lookup("irregWaveDirs") >> irregWaveDirs_;
irregWaveLengths_ = irregWaveHeights_; forAll(irregWaveHeights_, ii)
scalar COLUMNAS = 0; {
scalar FILAS = irregWaveHeights_.size(); forAll(irregWaveHeights_[ii], jj)
{
for (ii=0; ii<FILAS; ++ii) irregWaveLengths_[ii][jj] =
{ waveLength(waterDepthRef_, irregWavePeriods_[ii][jj]);
COLUMNAS= irregWaveHeights_[ii].size(); irregWaveDirs_[ii][jj] =
irregWaveDirs_[ii][jj]*mathematical::pi/180;
for (jj=0; jj<COLUMNAS; ++jj) }
{ }
irregWaveLengths_[ii][jj] = waveLength (waterDepthRef_, irregWavePeriods_[ii][jj]);
irregWaveDirs_[ii][jj] = irregWaveDirs_[ii][jj] * (mathematical::pi/180);
}
}
return true; return true;
} }
return false; return false;
} }
void Foam::waveModels::irregularWavesMultiDirec::info(Ostream& os) const
void Foam::waveModels::irregularMultiDirectional::info(Ostream& os) const
{ {
irregularWaveModel::info(os); irregularWaveModel::info(os);
os << " WavePeriods (s) coefficients : " << irregWavePeriods_ << nl os << " Wave periods : " << irregWavePeriods_.size() << nl
<< " WaveHeights (m) coefficients : " << irregWaveHeights_ << nl << " Wave heights : " << irregWaveHeights_.size() << nl
<< " WavePhases (rad) coefficients : " << irregWavePhases_ << nl << " Wave phases : " << irregWavePhases_.size() << nl
<< " WaveLengths (m) coefficients : " << irregWaveLengths_ << nl << " Wave lengths : " << irregWaveLengths_.size() << nl
<< " WaveDirections (rad) coefficients : " << irregWaveDirs_ << nl; << " Wave directions : " << irregWaveDirs_.size() << nl;
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -22,15 +22,15 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class Class
Foam::waveModels::irregularWavesMultiDirec Foam::waveModels::irregularMultiDirectional
Description Description
Multi-directional irregular wave model Multi-directional irregular wave model
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef waveModels_irregularWavesMultiDirec_H #ifndef waveModels_irregularMultiDirectional_H
#define waveModels_irregularWavesMultiDirec_H #define waveModels_irregularMultiDirectional_H
#include "irregularWaveModel.H" #include "irregularWaveModel.H"
@ -42,10 +42,10 @@ namespace waveModels
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class irregularWavesMultiDirec Declaration Class irregularMultiDirectional Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class irregularWavesMultiDirec class irregularMultiDirectional
: :
public irregularWaveModel public irregularWaveModel
{ {
@ -53,20 +53,21 @@ private:
// Proteced Data // Proteced Data
//- Wave periods for irregularWavesMultiDirec case (seconds) //- Wave periods for irregularMultiDirectional case [seconds]
List< List<scalar> > irregWavePeriods_; List<List<scalar>> irregWavePeriods_;
//- Wave heights for irregularWavesMultiDirec case (meters) //- Wave heights for irregularMultiDirectional case [metres]
List< List<scalar> > irregWaveHeights_; List<List<scalar>> irregWaveHeights_;
//- Wave lengths for irregularWavesMultiDirec case (meters) //- Wave lengths for irregularMultiDirectional case [metres]
List< List<scalar> > irregWaveLengths_; List<List<scalar>> irregWaveLengths_;
//- Wave phases for irregularWavesMultiDirec case (radians) //- Wave phases for irregularMultiDirectional case [radians]
List< List<scalar> > irregWavePhases_; List<List<scalar>> irregWavePhases_;
//- Direction of propagation for irregularWavesMultiDirec case (degrees, from X axis) //- Direction of propagation for irregularMultiDirectional case
List< List<scalar> > irregWaveDirs_; //- [degrees] from X axis
List<List<scalar>> irregWaveDirs_;
// Private Member Functions // Private Member Functions
@ -91,13 +92,13 @@ protected:
//- Return the wavelength //- Return the wavelength
virtual scalar waveLength virtual scalar waveLength
( (
const scalar h, const scalar h,
const scalar T const scalar T
) const; ) const;
//- Wave velocity //- Wave velocity
virtual vector U virtual vector Uf
( (
const scalar d, const scalar d,
const scalar x, const scalar x,
@ -115,7 +116,7 @@ protected:
const scalar irregWaveKs, const scalar irregWaveKs,
const scalar z, const scalar z,
const scalar h, const scalar h,
const scalar irregDir const scalar irregDir
) const; ) const;
//- Set the water level //- Set the water level
@ -134,13 +135,14 @@ protected:
const scalarField& level const scalarField& level
); );
public: public:
//- Runtime type information //- Runtime type information
TypeName("irregularWavesMultiDirectional"); TypeName("irregularMultiDirectional");
//- Constructor //- Constructor
irregularWavesMultiDirec irregularMultiDirectional
( (
const dictionary& dict, const dictionary& dict,
const fvMesh& mesh, const fvMesh& mesh,
@ -149,7 +151,7 @@ public:
); );
//- Destructor //- Destructor
virtual ~irregularWavesMultiDirec(); virtual ~irregularMultiDirectional();
// Public Member Functions // Public Member Functions