42 NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>::
51 surfaceSlipDisplacementPointPatchVectorField::projectModeNames_;
56 void surfaceSlipDisplacementPointPatchVectorField::calcProjection
74 vector projectVec(0, 0, 0);
78 projectVec = projectLen*
n;
85 if (frozenPointsZone_.size() > 0)
89 zonePtr = &pZones[frozenPointsZone_];
91 Pout<<
"surfaceSlipDisplacementPointPatchVectorField : Fixing all " 92 << zonePtr->
size() <<
" points in pointZone " << zonePtr->
name()
106 start[i] = points0[meshPoints[i]] + displacement[i];
109 label nNotProjected = 0;
125 if (zonePtr && (zonePtr->
whichPoint(meshPoints[i]) >= 0))
128 displacement[i] = points0[meshPoints[i]] - localPoints[i];
130 else if (nearest[i].hit())
133 nearest[i].hitPoint()
134 - points0[meshPoints[i]];
142 Pout<<
" point:" << meshPoints[i]
143 <<
" coord:" << localPoints[i]
144 <<
" did not find any surface within " << projectLen
182 offset[i] = start[i][wedgePlane_];
183 start[i][wedgePlane_] = 0;
184 projectVecs[i][wedgePlane_] = 0;
215 if (zonePtr && (zonePtr->
whichPoint(meshPoints[i]) >= 0))
218 displacement[i] = points0[meshPoints[i]] - localPoints[i];
220 else if (nearest[i].hit())
224 nearest[i].hitPoint()
225 - points0[meshPoints[i]];
231 if (rightHit[i].hit())
233 if (leftHit[i].hit())
237 magSqr(rightHit[i].hitPoint()-start[i])
238 <
magSqr(leftHit[i].hitPoint()-start[i])
241 interPt = rightHit[i];
245 interPt = leftHit[i];
250 interPt = rightHit[i];
255 if (leftHit[i].hit())
257 interPt = leftHit[i];
266 interPt.
rawPoint()[wedgePlane_] += offset[i];
268 displacement[i] = interPt.
rawPoint()-points0[meshPoints[i]];
276 Pout<<
" point:" << meshPoints[i]
277 <<
" coord:" << localPoints[i]
278 <<
" did not find any intersection between" 279 <<
" ray from " << start[i]-projectVecs[i]
280 <<
" to " << start[i]+projectVecs[i] <<
endl;
289 if (nNotProjected > 0)
291 Info<<
"surfaceSlipDisplacement :" 293 <<
" did not project " << nNotProjected
295 <<
" points." <<
endl;
325 surfacesDict_(dict.
subDict(
"geometry")),
326 projectMode_(projectModeNames_.
read(dict.
lookup(
"projectMode"))),
327 projectDir_(dict.
lookup(
"projectDirection")),
343 surfacesDict_(ppf.surfacesDict_),
344 projectMode_(ppf.projectMode_),
345 projectDir_(ppf.projectDir_),
346 wedgePlane_(ppf.wedgePlane_),
347 frozenPointsZone_(ppf.frozenPointsZone_)
358 surfacesDict_(ppf.surfacesDict_),
359 projectMode_(ppf.projectMode_),
360 projectDir_(ppf.projectDir_),
361 wedgePlane_(ppf.wedgePlane_),
362 frozenPointsZone_(ppf.frozenPointsZone_)
374 surfacesDict_(ppf.surfacesDict_),
375 projectMode_(ppf.projectMode_),
376 projectDir_(ppf.projectDir_),
377 wedgePlane_(ppf.wedgePlane_),
378 frozenPointsZone_(ppf.frozenPointsZone_)
387 if (surfacesPtr_.empty())
407 return surfacesPtr_();
419 calcProjection(displacement);
436 os.
writeKeyword(
"projectMode") << projectModeNames_[projectMode_]
444 os.
writeKeyword(
"frozenPointsZone") << frozenPointsZone_
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
void setInInternalField(Field< Type1 > &iF, const Field< Type1 > &pF, const labelList &meshPoints) const
Given the internal field and a patch field,.
void findNearest(const pointField &, const scalarField &nearestDistSqr, labelList &surfaces, List< pointIndexHit > &) const
Find nearest. Return -1 (and a miss()) or surface and nearest.
const objectRegistry & db() const
Return local objectRegistry.
Basic pointPatch represents a set of points from the mesh.
surfaceSlipDisplacementPointPatchVectorField(const pointPatch &, const DimensionedField< vector, pointMesh > &)
Construct from patch and internal field.
const point & min() const
Minimum describing the bounding box.
virtual const labelList & meshPoints() const =0
Return mesh points.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
This class describes the interaction of (usually) a face and a point. It carries the info of a succes...
dimensioned< scalar > mag(const dimensioned< Type > &)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
virtual const vectorField & pointNormals() const =0
Return point normals.
const Point & rawPoint() const
Return point with no checking.
A subset of mesh points. The labels of points in the zone can be obtained from the addressing() list...
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Evaluate the patch field.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
void size(const label)
Override size to be inconsistent with allocated storage.
const pointZoneMesh & pointZones() const
Return point zone mesh.
const pointMesh & mesh() const
Return the mesh reference.
virtual const vectorField & localPoints() const =0
Return mesh points.
bool hit() const
Is there a hit.
IOporosityModelList pZones(mesh)
A list of keyword definitions, which are a keyword followed by any number of values (e...
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const Field< Type > & internalField() const
Return internal field reference.
Number of components in this vector space.
makePointPatchTypeField(pointPatchVectorField, solidBodyMotionDisplacementPointPatchVectorField)
Ostream & endl(Ostream &os)
Add newline and flush stream.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
commsTypes
Types of communications.
Spatial transformation functions for primitive fields.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Update the patch field.
const Type & lookupObject(const word &name) const
Lookup and return the object of the given Type.
Macros for easy insertion into run-time selection tables.
const point & max() const
Maximum describing the bounding box.
const word & name() const
Return name.
Ostream & writeKeyword(const keyType &)
Write the keyword followed by an appropriate indentation.
Foam::pointPatchFieldMapper.
Initialise the NamedEnum HashTable from the static list of names.
Displacement follows a triSurface. Use in a displacementMotionSolver as a bc on the pointDisplacement...
Mesh consisting of general polyhedral cells.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
tmp< Field< Type > > patchInternalField() const
Return field created from appropriate internal field values.
Constant dispersed-phase particle diameter model.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
const boundBox & bounds() const
Return mesh bounding box.
virtual const word & name() const =0
Return name.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
const pointBoundaryMesh & boundaryMesh() const
Return boundaryMesh reference.
virtual void write(Ostream &) const
Write.
Container for searchableSurfaces.
const pointPatch & patch() const
Return patch.
const searchableSurfaces & surfaces() const
Surface to follow. Demand loads surfaceNames.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Enum read(Istream &) const
Read a word from Istream and return the corresponding.
void findAnyIntersection(const pointField &start, const pointField &end, labelList &surfaces, List< pointIndexHit > &) const
Find any intersection. Return hit point information and.
static const word null
An empty word.
virtual void write(Ostream &) const
Write.
prefixOSstream Pout(cout,"Pout")
label whichPoint(const label globalPointID) const
Helper function to re-direct to zone::localID(...)
Virtual base class for displacement motion solver.
pointPatchField< vector > pointPatchVectorField