54 Foam::scalar Foam::waveModels::StokesV::A11
65 Foam::scalar Foam::waveModels::StokesV::A13
77 Foam::scalar Foam::waveModels::StokesV::A15
98 Foam::scalar Foam::waveModels::StokesV::A22
105 return 3/(8*
pow4(
s));
109 Foam::scalar Foam::waveModels::StokesV::A24
124 Foam::scalar Foam::waveModels::StokesV::A33
133 return (13 - 4*
sqr(
c))/(64*
pow(
s, 7));
137 Foam::scalar Foam::waveModels::StokesV::A35
160 Foam::scalar Foam::waveModels::StokesV::A44
175 Foam::scalar Foam::waveModels::StokesV::A55
197 Foam::scalar Foam::waveModels::StokesV::B22
210 Foam::scalar Foam::waveModels::StokesV::B24
225 Foam::scalar Foam::waveModels::StokesV::B33
238 Foam::scalar Foam::waveModels::StokesV::B33k
247 const scalar sk =
h*
s;
248 const scalar ck =
h*
c;
254 Foam::scalar Foam::waveModels::StokesV::B35
278 Foam::scalar Foam::waveModels::StokesV::B35k
287 const scalar sk =
h*
s;
288 const scalar ck =
h*
c;
292 14*88128*
pow(
c, 13)*ck
293 - 12*208224*
pow(
c, 11)*ck
294 + 10*70848*
pow(
c, 9)*ck
295 + 8*54000.0*
pow(
c, 7)*ck
311 /(12288*
pow(
s, 13)*(6*
sqr(
c) - 1))*sk
326 Foam::scalar Foam::waveModels::StokesV::B44
348 Foam::scalar Foam::waveModels::StokesV::B55
373 Foam::scalar Foam::waveModels::StokesV::B55k
382 const scalar sk =
h*
s;
383 const scalar ck =
h*
c;
387 16*192000*
pow(
c, 15)*ck
388 - 14*262720*
pow(
c, 13)*ck
389 + 12*83680*
pow(
c, 11)*ck
390 + 10*20160*
pow(
c, 9)*ck
391 - 8*7280*
pow(
c, 7)*ck
392 + 6*7160*
pow(
c, 5)*ck
393 - 4*1800*
pow(
c, 3)*ck
394 - 2*1050*
pow(
c, 1)*ck
436 Foam::scalar Foam::waveModels::StokesV::C1
449 Foam::scalar Foam::waveModels::StokesV::C1k
458 const scalar sk =
h*
s;
459 const scalar ck =
h*
c;
467 Foam::scalar Foam::waveModels::StokesV::C2
490 Foam::scalar Foam::waveModels::StokesV::C2k
499 const scalar sk =
h*
s;
500 const scalar ck =
h*
c;
504 12*3840*
pow(
c, 11)*ck
505 - 10*4096*
pow(
c,9)*ck
506 + 8*2592*
pow(
c, 7)*ck
507 - 6*1008*
pow(
c, 5)*ck
508 + 4*5944*
pow(
c, 3)*ck
535 Foam::scalar Foam::waveModels::StokesV::C3
548 Foam::scalar Foam::waveModels::StokesV::C4
563 void Foam::waveModels::StokesV::initialise
583 static const scalar tolerance = 1
e-12;
584 static const label iterMax = 10000;
586 while ((
mag(f1) > tolerance ||
mag(f2) > tolerance) && (
n < iterMax))
588 const scalar b33 = B33(d,
k);
589 const scalar b35 = B35(d,
k);
590 const scalar b55 = B55(d,
k);
591 const scalar
c1 = C1(d,
k);
592 const scalar
c2 = C2(d,
k);
594 const scalar b33k = B33k(d,
k);
595 const scalar b35k = B35k(d,
k);
596 const scalar b55k = B55k(d,
k);
597 const scalar c1k = C1k(d,
k);
598 const scalar c2k = C2k(d,
k);
601 const scalar l3 = l2*
lambda;
602 const scalar l4 = l3*
lambda;
603 const scalar l5 = l4*
lambda;
605 const scalar Bmat11 =
607 - 2*
pi/(
k*d)*(l3*b33k + l5*(b35k + b55k));
609 const scalar Bmat12 =
610 - 2*
pi/(
k*d)*(1 + 3*l2*b33 + 5*l4*(b35 + b55));
612 const scalar Bmat21 =
615 -
k*d/(2*
pi)*
tanh(
k*d)*(l2*c1k + l4*c2k);
619 f1 =
pi*
H/d - 2*
pi/(
k*d)*(
lambda + l3*b33 + l5*(b35 + b55));
627 const scalar lambdaPr =
628 (f1*Bmat21 - f2*Bmat11)/(Bmat11*Bmat22 - Bmat12*Bmat21);
630 (f2*Bmat12 - f1*Bmat22)/(Bmat11*Bmat22 - Bmat12*Bmat21);
646 Foam::scalar Foam::waveModels::StokesV::eta
659 const scalar
k =
sqrt(kx*kx + ky*ky);
661 const scalar b22 = B22(
h,
k);
662 const scalar b24 = B24(
h,
k);
663 const scalar b33 = B33(
h,
k);
664 const scalar b35 = B35(
h,
k);
665 const scalar b44 = B44(
h,
k);
666 const scalar b55 = B55(
h,
k);
669 const scalar l3 = l2*
lambda;
670 const scalar l4 = l3*
lambda;
671 const scalar l5 = l4*
lambda;
674 const scalar amp2 = (b22*l2 + b24*l4)/
k;
675 const scalar amp3 = (b33*l3 + b35*l5)/
k;
676 const scalar amp4 = b44*l4/
k;
677 const scalar amp5 = b55*l5/
k;
706 const scalar
k =
sqrt(kx*kx + ky*ky);
708 const scalar a11 = A11(d,
k);
709 const scalar a13 = A13(d,
k);
710 const scalar a15 = A15(d,
k);
711 const scalar a22 = A22(d,
k);
712 const scalar a24 = A24(d,
k);
713 const scalar a33 = A33(d,
k);
714 const scalar a35 = A35(d,
k);
715 const scalar a44 = A44(d,
k);
716 const scalar a55 = A55(d,
k);
720 const scalar l3 = l2*
lambda;
721 const scalar l4 = l3*
lambda;
722 const scalar l5 = l4*
lambda;
724 const scalar a1u = 2*
pi/
T/
k*(
lambda*a11 + l3*a13 + l5*a15);
725 const scalar a2u = 2*2*
pi/
T/
k*(l2*a22 + l4*a24);
726 const scalar a3u = 3*2*
pi/
T/
k*(l3*a33 + l5*a35);
727 const scalar a4u = 4*2*
pi/
T/
k*(l4*a44);
728 const scalar a5u = 5*2*
pi/
T/
k*(l5*a55);
730 const scalar theta = kx*
x + ky*
y - 2*
pi/
T*t + phase;
746 scalar v = u*
sin(waveAngle_);
747 u *=
cos(waveAngle_);
763 const scalar waveKx = waveK*
cos(waveAngle_);
764 const scalar waveKy = waveK*
sin(waveAngle_);
782 level[paddlei] = waterDepthRef_ + tCoeff*eta;
795 const scalar waveKx = waveK*
cos(waveAngle_);
796 const scalar waveKy = waveK*
sin(waveAngle_);
806 setPaddlePropeties(level, facei, fraction, z);
810 const label paddlei = faceToPaddle_[facei];
826 U_[facei] = fraction*
Uf*tCoeff;
873 if (f1 > 0.001 || f2 > 0.001)
876 <<
"No convergence for Stokes V wave theory" <<
nl 877 <<
" f1: " << f1 <<
nl 878 <<
" f2: " << f2 <<
nl 893 os <<
" Lambda : " << lambda_ <<
nl 894 <<
" Wave type : " << waveType() <<
nl;
Different types of constants.
dimensionedScalar tanh(const dimensionedScalar &ds)
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
virtual bool readDict(const dictionary &overrideDict)
Read from dictionary.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
virtual void setLevel(const scalar t, const scalar tCoeff, scalarField &level) const
Set the water level.
StokesV(const dictionary &dict, const fvMesh &mesh, const polyPatch &patch, const bool readFields=true)
Constructor.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
constexpr char nl
The newline '\n' character (0x0a)
const dimensionedScalar c2
Second radiation constant: default SI units: [m.K].
dimensionedScalar sqrt(const dimensionedScalar &ds)
label k
Boltzmann constant.
dimensionedScalar pow5(const dimensionedScalar &ds)
Macros for easy insertion into run-time selection tables.
#define forAll(list, i)
Loop across all elements in list.
const dimensionedScalar e
Elementary charge.
dimensionedScalar cos(const dimensionedScalar &ds)
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.
constexpr scalar twoPi(2 *M_PI)
dimensionedScalar lambda("lambda", dimTime/sqr(dimLength), laminarTransport)
constexpr scalar pi(M_PI)
virtual void setVelocity(const scalar t, const scalar tCoeff, const scalarField &level)
Calculate the wave model velocity.
autoPtr< surfaceVectorField > Uf
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...
dimensionedScalar sin(const dimensionedScalar &ds)
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
OBJstream os(runTime.globalPath()/outputName)
defineTypeNameAndDebug(combustionModel, 0)
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
const dimensionedScalar h
Planck constant.
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
dimensionedScalar pow3(const dimensionedScalar &ds)
dimensionedScalar sinh(const dimensionedScalar &ds)
virtual bool readDict(const dictionary &overrideDict)
Read from dictionary.
Mesh data needed to do the Finite Volume discretisation.
const dimensionedScalar c
Speed of light in a vacuum.
dimensionedScalar pow4(const dimensionedScalar &ds)
const std::string patch
OpenFOAM patch number as a std::string.
const dimensionedScalar c1
First radiation constant: default SI units: [W/m2].
dimensionedScalar pow6(const dimensionedScalar &ds)
dimensionedScalar cosh(const dimensionedScalar &ds)
A patch is a list of labels that address the faces in the global face list.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
volScalarField H(IOobject("H", runTime.timeName(), mesh.thisDb(), IOobject::NO_READ, IOobject::AUTO_WRITE), mesh, dimensionedScalar(dimLength, Zero))
addToRunTimeSelectionTable(functionObject, pointHistory, dictionary)