Go to the documentation of this file.
42 NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>::
62 const pointField& localPoints = patch().localPoints();
63 const labelList& meshPoints = patch().meshPoints();
74 vector projectVec(0, 0, 0);
75 if (projectMode_ == FIXEDNORMAL)
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;
111 if (projectMode_ == NEAREST)
115 surfaces().findNearest
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
158 surfaces().findNearest
171 if (projectMode_ == POINTNORMAL)
173 projectVecs = projectLen*patch().pointNormals();
182 offset[i] = start[i][wedgePlane_];
183 start[i][wedgePlane_] = 0;
184 projectVecs[i][wedgePlane_] = 0;
191 surfaces().findAnyIntersection
203 surfaces().findAnyIntersection
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 :"
292 <<
" on patch " << patch().name()
293 <<
" did not project " << nNotProjected
295 <<
" points." <<
endl;
310 projectMode_(NEAREST),
326 projectMode_(projectModeNames_.read(
dict.
lookup(
"projectMode"))),
416 vectorField displacement(this->patchInternalField());
419 calcProjection(displacement);
425 setInInternalField(iF, displacement);
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
const dictionary surfacesDict_
Names of surfaces.
void calcProjection(vectorField &displacement) const
Calculate displacement (w.r.t. points0()) to project onto surface.
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Evaluate the patch field.
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)
const searchableSurfaces & surfaces() const
Surface to follow. Demand loads surfaceNames.
const vector projectDir_
Direction to project.
#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 polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
virtual void write(Ostream &) const
Write.
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 > &)
Abstract base class for point-mesh patch fields.
Mesh consisting of general polyhedral cells.
Foam::pointPatchFieldMapper.
Constant dispersed-phase particle diameter model.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
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.
surfaceSlipDisplacementPointPatchVectorField(const pointPatch &, const DimensionedField< vector, pointMesh > &)
Construct from patch and internal field.
const pointZoneMesh & pointZones() const
Return point zone mesh.
virtual void write(Ostream &) const
Write.
const polyMesh & mesh() const
Return the mesh reference.
const point & min() const
Minimum describing the bounding box.
autoPtr< searchableSurfaces > surfacesPtr_
Demand driven: surface to project.
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 word frozenPointsZone_
pointZone with frozen points
const objectRegistry & db() const
Return local objectRegistry.
const word & name() const
Return name.
const projectMode projectMode_
How to project/project onto surface.
conserve internalField()+
const boundBox & bounds() const
Return mesh bounding box.
label whichPoint(const label globalPointID) const
Helper function to re-direct to zone::localID(...)
commsTypes
Types of communications.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Update the patch field.
prefixOSstream Pout(cout, "Pout")
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 word null
An empty word.
pointPatchField< vector > pointPatchVectorField
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 dictionary & subDict(const word &) const
Find and return a sub-dictionary.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
Displacement follows a triSurface. Use in a displacementMotionSolver as a bc on the pointDisplacement...
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...
const label wedgePlane_
Plane for 2D wedge case or -1.
static const NamedEnum< projectMode, 3 > projectModeNames_
Project mode names.