54Foam::scalar Foam::waveModels::irregularMultiDirectional::eta
66 scalar phaseTot = Kx*
x + Ky*
y - omega*t +
phase;
67 return H*0.5*
cos(phaseTot);
82 for (label i=1; i<=100; ++i)
104 forAll(irregWaveHeights_, ii)
106 forAll(irregWaveHeights_[ii], jj)
112 waveKs*
x*
cos(irregWaveDirs_[ii][jj])
113 + waveKs*
y*
sin(irregWaveDirs_[ii][jj])
115 + irregWavePhases_[ii][jj];
119 irregWaveHeights_[ii][jj],
125 irregWaveDirs_[ii][jj]
149 forAll(irregWaveHeights_, ii)
151 forAll(irregWaveHeights_[ii], jj)
160 irregWaveHeights_[ii][jj],
161 waveKs*
cos(irregWaveDirs_[ii][jj]),
163 waveKs*
sin(irregWaveDirs_[ii][jj]),
167 irregWavePhases_[ii][jj]
172 level[paddlei] = waterDepthRef_ + tCoeff*eta;
180 const scalar irregWaveOmega,
182 const scalar irregWaveKs,
185 const scalar irregDir
188 const scalar ksh = irregWaveKs*hh;
189 const scalar ksz = irregWaveKs*zz;
192 irregH*0.5*irregWaveOmega*
cos(pha)*(
cosh(ksz)/
sinh(ksh))*
cos(irregDir);
195 irregH*0.5*irregWaveOmega*
cos(pha)*(
cosh(ksz)/
sinh(ksh))*
sin(irregDir);
198 irregH*0.5*irregWaveOmega*
sin(pha)*(
sinh(ksz)/
sinh(ksh));
219 setPaddlePropeties(level, facei, fraction, z);
223 const label paddlei = faceToPaddle_[facei];
234 U_[facei] = fraction*
Uf*tCoeff;
250 irregularWaveModel(
dict,
mesh, patch, false)
268 readEntry(
"wavePeriods", irregWavePeriods_);
269 readEntry(
"waveHeights", irregWaveHeights_);
270 readEntry(
"wavePhases", irregWavePhases_);
271 readEntry(
"waveDirs", irregWaveDirs_);
273 irregWaveLengths_ = irregWaveHeights_;
275 forAll(irregWaveHeights_, ii)
277 forAll(irregWaveHeights_[ii], jj)
279 irregWaveLengths_[ii][jj] =
280 waveLength(waterDepthRef_, irregWavePeriods_[ii][jj]);
281 irregWaveDirs_[ii][jj] =
297 os <<
" Wave periods : " << irregWavePeriods_.size() <<
nl
298 <<
" Wave heights : " << irregWaveHeights_.size() <<
nl
299 <<
" Wave phases : " << irregWavePhases_.size() <<
nl
300 <<
" Wave lengths : " << irregWaveLengths_.size() <<
nl
301 <<
" Wave directions : " << irregWaveDirs_.size() <<
nl;
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
InfoProxy< IOobject > info() const noexcept
Return info proxy, for printing information to a stream.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
bool readEntry(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX, IOobjectOption::readOption readOpt=IOobjectOption::MUST_READ) const
Find entry and assign to T val. FatalIOError if it is found and the number of tokens is incorrect,...
Mesh data needed to do the Finite Volume discretisation.
Single incompressible phase derived from the phase-fraction. Used as part of the multiPhaseMixture fo...
A patch is a list of labels that address the faces in the global face list.
Base class for waveModels.
const vector & g_
Gravity.
vectorField U_
Velocity field.
scalar waterDepthRef_
Reference water depth / [m].
virtual void setPaddlePropeties(const scalarField &level, const label facei, scalar &fraction, scalar &z) const
Set the paddle coverage fraction and reference height.
scalarField yPaddle_
Paddle y coordinates / [m].
scalarField xPaddle_
Paddle x coordinates / [m].
labelList faceToPaddle_
Addressing from patch face index to paddle index.
Multi-directional irregular wave model.
virtual void setVelocity(const scalar t, const scalar tCoeff, const scalarField &level)
Calculate the wave model velocity.
virtual vector uMultiDirec(const scalar irregH, const scalar irregWaveOmega, const scalar phaseTot, const scalar irregWaveKs, const scalar z, const scalar h, const scalar irregDir) const
virtual void setLevel(const scalar t, const scalar tCoeff, scalarField &level) const
Set the water level.
virtual vector Uf(const scalar d, const scalar x, const scalar y, const scalar t, const scalar z) const
Wave velocity.
virtual scalar waveLength(const scalar h, const scalar T) const
Return the wavelength.
irregularMultiDirectional(const dictionary &dict, const fvMesh &mesh, const polyPatch &patch, const bool readFields=true)
Constructor.
virtual bool readDict(const dictionary &overrideDict)
Read from dictionary.
virtual bool readDict(const dictionary &overrideDict)
Read from dictionary.
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
volScalarField H(IOobject("H", runTime.timeName(), mesh.thisDb(), IOobject::NO_READ, IOobject::AUTO_WRITE), mesh, dimensionedScalar(dimLength, Zero))
autoPtr< surfaceVectorField > Uf
OBJstream os(runTime.globalPath()/outputName)
constexpr scalar pi(M_PI)
constexpr scalar twoPi(2 *M_PI)
Different types of constants.
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const NameMatchPredicate &selectedFields, DynamicList< regIOobject * > &storedObjects)
Read the selected GeometricFields of the templated type and store on the objectRegistry.
dimensionedScalar cosh(const dimensionedScalar &ds)
dimensionedScalar sin(const dimensionedScalar &ds)
dimensionedScalar tanh(const dimensionedScalar &ds)
dimensionedScalar sinh(const dimensionedScalar &ds)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
constexpr scalar degToRad() noexcept
Multiplication factor for degrees to radians conversion.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
dimensionedScalar cos(const dimensionedScalar &ds)
constexpr char nl
The newline '\n' character (0x0a).
#define forAll(list, i)
Loop across all elements in list.
Unit conversion functions.
const vector L(dict.get< vector >("L"))