Go to the documentation of this file.
43 NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3>::
63 const pointField& localPoints = patch().localPoints();
64 const labelList& meshPoints = patch().meshPoints();
76 if (projectMode_ == FIXEDNORMAL)
79 projectVec = projectLen*
n;
86 if (frozenPointsZone_.size() > 0)
90 zonePtr = &
pZones[frozenPointsZone_];
92 Pout<<
"surfaceDisplacementPointPatchVectorField : Fixing all "
93 << zonePtr->
size() <<
" points in pointZone " << zonePtr->
name()
107 start[i] = points0[meshPoints[i]] + displacement[i];
110 label nNotProjected = 0;
112 if (projectMode_ == NEAREST)
116 surfaces().findNearest
126 if (zonePtr && (zonePtr->
whichPoint(meshPoints[i]) >= 0))
129 displacement[i] = points0[meshPoints[i]] - localPoints[i];
131 else if (nearest[i].hit())
134 nearest[i].hitPoint()
135 - points0[meshPoints[i]];
143 Pout<<
" point:" << meshPoints[i]
144 <<
" coord:" << localPoints[i]
145 <<
" did not find any surface within " << projectLen
159 surfaces().findNearest
172 if (projectMode_ == POINTNORMAL)
174 projectVecs = projectLen*patch().pointNormals();
183 offset[i] = start[i][wedgePlane_];
184 start[i][wedgePlane_] = 0;
185 projectVecs[i][wedgePlane_] = 0;
192 surfaces().findAnyIntersection
204 surfaces().findAnyIntersection
216 if (zonePtr && (zonePtr->
whichPoint(meshPoints[i]) >= 0))
219 displacement[i] = points0[meshPoints[i]] - localPoints[i];
221 else if (nearest[i].hit())
225 nearest[i].hitPoint()
226 - points0[meshPoints[i]];
232 if (rightHit[i].hit())
234 if (leftHit[i].hit())
238 magSqr(rightHit[i].hitPoint()-start[i])
239 <
magSqr(leftHit[i].hitPoint()-start[i])
242 interPt = rightHit[i];
246 interPt = leftHit[i];
251 interPt = rightHit[i];
256 if (leftHit[i].hit())
258 interPt = leftHit[i];
267 interPt.
rawPoint()[wedgePlane_] += offset[i];
269 displacement[i] = interPt.
rawPoint()-points0[meshPoints[i]];
277 Pout<<
" point:" << meshPoints[i]
278 <<
" coord:" << localPoints[i]
279 <<
" did not find any intersection between"
280 <<
" ray from " << start[i]-projectVecs[i]
281 <<
" to " << start[i]+projectVecs[i] <<
endl;
290 if (nNotProjected > 0)
292 Info<<
"surfaceDisplacement :"
293 <<
" on patch " << patch().name()
294 <<
" did not project " << nNotProjected
296 <<
" points." <<
endl;
310 fixedValuePointPatchVectorField(
p, iF),
312 projectMode_(NEAREST),
326 fixedValuePointPatchVectorField(
p, iF,
dict),
329 projectMode_(projectModeNames_.read(
dict.
lookup(
"projectMode"))),
334 if (velocity_.x() < 0 || velocity_.y() < 0 || velocity_.z() < 0)
337 <<
"All components of velocity have to be positive : "
339 <<
"Set velocity components to a great value if no clipping"
354 fixedValuePointPatchVectorField(ppf,
p, iF, mapper),
370 fixedValuePointPatchVectorField(ppf),
387 fixedValuePointPatchVectorField(ppf, iF),
435 vectorField currentDisplacement(this->patchInternalField());
442 vectorField offset(displacement-currentDisplacement);
446 const scalar deltaT =
mesh.time().deltaTValue();
457 d[cmpt] =
max(d[cmpt], -clipVelocity[cmpt]);
461 d[cmpt] =
min(d[cmpt], clipVelocity[cmpt]);
468 fixedValuePointPatchVectorField::updateCoeffs();
497 fixedValuePointPatchVectorField,
surfaceDisplacementPointPatchVectorField(const pointPatch &, const DimensionedField< vector, pointMesh > &)
Construct from patch and internal field.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
const point & max() const
Maximum describing the bounding box.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
#define forAll(list, i)
Loop across all elements in list.
A subset of mesh points. The labels of points in the zone can be obtained from the addressing() list.
IOporosityModelList pZones(mesh)
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
bool hit() const
Is there a hit.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
@ nComponents
Number of components in this vector space.
const dictionary surfacesDict_
Names of surfaces.
tmp< fvMatrix< Type > > operator==(const fvMatrix< Type > &, const fvMatrix< Type > &)
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Basic pointPatch represents a set of points from the mesh.
dimensioned< scalar > mag(const dimensioned< Type > &)
Mesh consisting of general polyhedral cells.
Foam::pointPatchFieldMapper.
Constant dispersed-phase particle diameter model.
autoPtr< searchableSurfaces > surfacesPtr_
Demand driven: surface to project.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
const word frozenPointsZone_
pointZone with frozen points
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
const Point & rawPoint() const
Return point with no checking.
makePointPatchTypeField(pointPatchVectorField, solidBodyMotionDisplacementPointPatchVectorField)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Pre-declare SubField and related Field type.
const pointZoneMesh & pointZones() const
Return point zone mesh.
const polyMesh & mesh() const
Return the mesh reference.
const point & min() const
Minimum describing the bounding box.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Virtual base class for displacement motion solver.
Macros for easy insertion into run-time selection tables.
const vector velocity_
Maximum velocity.
const word & name() const
Return name.
errorManipArg< error, int > exit(error &err, const int errNo=1)
void calcProjection(vectorField &displacement) const
Calculate displacement (w.r.t. points0()) to project onto surface.
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
const boundBox & bounds() const
Return mesh bounding box.
label whichPoint(const label globalPointID) const
Helper function to re-direct to zone::localID(...)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
prefixOSstream Pout(cout, "Pout")
const searchableSurfaces & surfaces() const
Surface to follow. Demand loads surfaceNames.
const label wedgePlane_
Plane for 2D wedge case or -1.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Container for searchableSurfaces.
Ostream & writeKeyword(const keyType &)
Write the keyword followed by an appropriate indentation.
static const NamedEnum< projectMode, 3 > projectModeNames_
Project mode names.
static const word null
An empty word.
Displacement fixed by projection onto triSurface. Use in a displacementMotionSolver as a bc on the po...
const Type & lookupObject(const word &name) const
Lookup and return the object of the given Type.
void size(const label)
Override size to be inconsistent with allocated storage.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
const vector projectDir_
Direction to project.
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
const projectMode projectMode_
How to project/project onto surface.
Initialise the NamedEnum HashTable from the static list of names.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
virtual void write(Ostream &) const
Write.