diff --git a/src/waveModels/derivedPointPatchFields/waveMaker/waveMakerPointPatchVectorField.C b/src/waveModels/derivedPointPatchFields/waveMaker/waveMakerPointPatchVectorField.C index 301c1e2b21f2ee7701f48bf9b4272a5b7bc3ec4b..409768101ca9573f4c6961c64416f854e2f25dec 100644 --- a/src/waveModels/derivedPointPatchFields/waveMaker/waveMakerPointPatchVectorField.C +++ b/src/waveModels/derivedPointPatchFields/waveMaker/waveMakerPointPatchVectorField.C @@ -33,6 +33,10 @@ License #include "Time.H" #include "gravityMeshObject.H" +#include "polyMesh.H" +#include "surfaceFields.H" +#include "volFields.H" + // * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * // const Foam::Enum @@ -89,6 +93,48 @@ Foam::scalar Foam::waveMakerPointPatchVectorField::timeCoeff } +void Foam::waveMakerPointPatchVectorField::initialiseGeometry() +{ + // Global patch extents + const vectorField& Cp = this->patch().localPoints(); + const vectorField CpLocal(Cp); + boundBox bb(CpLocal, true); + + const scalar xMin = bb.min().x(); + const scalar xMax = bb.max().x(); + const scalar yMin = bb.min().y(); + const scalar yMax = bb.max().y(); + zSpan_ = bb.max().z() - bb.min().z(); + + zMinGb_ = bb.min().z(); + reduce(zMinGb_, minOp()); + + // Global x, y positions of the paddle centres + xPaddle_.setSize(nPaddle_, 0); + yPaddle_.setSize(nPaddle_, 0); + const scalar xMid = xMin + 0.5*(xMax - xMin); + const scalar paddleDy = (yMax - yMin)/scalar(nPaddle_); + + for (label paddlei = 0; paddlei < nPaddle_; ++paddlei) + { + xPaddle_[paddlei] = xMid; + yPaddle_[paddlei] = paddlei*paddleDy + yMin + 0.5*paddleDy; + } + + // Local face centres + x_ = this->patch().localPoints().component(0); + y_ = this->patch().localPoints().component(1); + z_ = this->patch().localPoints().component(2); + + // Local point-to-paddle addressing + pointToPaddle_.setSize(this->patch().size(), -1); + + forAll(pointToPaddle_, ppi) + { + pointToPaddle_[ppi] = floor((y_[ppi] - yMin)/(paddleDy+0.01*paddleDy)); + } +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::waveMakerPointPatchVectorField::waveMakerPointPatchVectorField @@ -105,10 +151,11 @@ Foam::waveMakerPointPatchVectorField::waveMakerPointPatchVectorField wavePeriod_(0), waveHeight_(0), wavePhase_(0), - waveLength_(0), + waveAngle_(0), startTime_(0), rampTime_(1), - secondOrder_(false) + secondOrder_(false), + nPaddle_(0) {} @@ -127,29 +174,43 @@ Foam::waveMakerPointPatchVectorField::waveMakerPointPatchVectorField wavePeriod_(dict.get("wavePeriod")), waveHeight_(dict.get("waveHeight")), wavePhase_(dict.get("wavePhase")), - waveLength_(this->waveLength(initialDepth_, wavePeriod_)), + waveAngle_(dict.get("waveAngle")), startTime_ ( - dict.lookupOrDefault + dict.getOrDefault ( "startTime", db().time().startTime().value() ) ), rampTime_(dict.get("rampTime")), - secondOrder_(dict.lookupOrDefault("secondOrder", false)) + secondOrder_(dict.getOrDefault("secondOrder", false)), + nPaddle_(dict.getOrDefault