Go to the documentation of this file.
40 #include "indirectPrimitivePatch.H"
73 ctrs[patchFaceI] = pp[patchFaceI].centre(
points);
88 const word& faceZoneName,
89 const word& masterPatchName,
90 const word& slavePatchName
112 dict.lookup(
"faceZoneName"),
117 dict.lookup(
"masterPatchName"),
122 dict.lookup(
"slavePatchName"),
143 Pout<<
"bool perfectInterface::changeTopology() const "
144 <<
"for object " <<
name() <<
" : "
145 <<
"Inactive" <<
endl;
179 scalar minLen = GREAT;
183 minLen =
min(minLen, edges0[edgeI].
mag(pts0));
185 scalar typDim = tol_*minLen;
189 Pout<<
"typDim:" << typDim <<
" edges0:" << edges0.
size()
190 <<
" pts0:" << pts0.size() <<
" pts1:" << pts1.size()
191 <<
" pp0:" << pp0.size() <<
" pp1:" << pp1.size() <<
endl;
201 renumberPoints[i] = i;
218 <<
"Points on patch sides do not match to within tolerance "
224 renumberPoints[meshPts1[i]] = meshPts0[from1To0Points[i]];
236 calcFaceCentres(pp0),
237 calcFaceCentres(pp1),
246 <<
"Face centres of patch sides do not match to within tolerance "
261 label meshPointI = meshPts1[i];
263 if (meshPointI != renumberPoints[meshPointI])
275 affectedFaces.
erase(pp1.addressing()[i]);
283 label faceI = pp0.addressing()[i];
285 if (affectedFaces.
erase(faceI))
288 <<
"Found face " << faceI <<
" vertices "
289 <<
mesh.
faces()[faceI] <<
" whose points are"
290 <<
" used both by master patch and slave patch" <<
endl;
298 const label faceI = iter.key();
305 newFace[fp] = renumberPoints[
f[fp]];
318 patchI =
patches.whichPatch(faceI);
323 bool zoneFlip =
false;
353 label meshPointI = meshPts1[i];
355 if (meshPointI != renumberPoints[meshPointI])
365 label faceI = pp1.addressing()[i];
378 label faceI = pp0.addressing()[i];
386 newFace[fp] = renumberPoints[
f[fp]];
391 label pp1FaceI = pp1.addressing()[from0To1Faces[i]];
439 Pout<<
"bool perfectInterface::setRefinement(polyTopoChange&) const : "
440 <<
"for object " <<
name() <<
" : "
441 <<
"masterPatchID_:" << masterPatchID_
442 <<
" slavePatchID_:" << slavePatchID_
443 <<
" faceZoneID_:" << faceZoneID_ <<
endl;
448 masterPatchID_.active()
449 && slavePatchID_.active()
450 && faceZoneID_.active()
474 setRefinement(pp0, pp1, ref);
501 << faceZoneID_.name() <<
nl
502 << masterPatchID_.name() <<
nl
503 << slavePatchID_.name() <<
endl;
511 <<
" type " <<
type()
514 <<
" active " << active()
517 <<
" faceZoneName " << faceZoneID_.name()
520 <<
" masterPatchName " << masterPatchID_.name()
523 <<
" slavePatchName " << slavePatchID_.name()
virtual ~perfectInterface()
Destructor.
virtual const pointField & points() const
Return raw points.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
face reverseFace() const
Return face with reverse direction.
const Field< PointType > & points() const
Return reference to global points.
A class for handling words, derived from string.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
Class containing data for point removal.
static const scalar tol_
Tolerance used for distance comparison (fraction of minimum edge.
virtual bool update()=0
Update the mesh for both mesh motion and topology change.
#define forAll(list, i)
Loop across all elements in list.
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
const Field< PointType > & localPoints() const
Return pointField of points in patch.
List of mesh modifiers defining the mesh dynamics.
virtual void modifyMotionPoints(pointField &motionPoints) const
Modify motion points to comply with the topological change.
const labelListList & pointFaces() const
Direct mesh changes based on v1.3 polyTopoChange syntax.
virtual void updateMesh(const mapPolyMesh &)
Force recalculation of locally stored data on topological change.
Class describing modification of a face.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Ostream & endl(Ostream &os)
Add newline and flush stream.
dimensioned< scalar > mag(const dimensioned< Type > &)
virtual void setRefinement(polyTopoChange &) const
Insert the layer addition/removal instructions.
static pointField calcFaceCentres(const indirectPrimitivePatch &)
Calculate face centres on patch.
virtual void writeDict(Ostream &) const
Write dictionary.
Mesh consisting of general polyhedral cells.
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
const faceZoneMesh & faceZones() const
Return face zone mesh.
Info<< "Finished reading KIVA file"<< endl;cellShapeList cellShapes(nPoints);labelList cellZoning(nPoints, -1);const cellModel &hex=*(cellModeller::lookup("hex"));labelList hexLabels(8);label activeCells=0;labelList pointMap(nPoints);forAll(pointMap, i){ pointMap[i]=i;}for(label i=0;i< nPoints;i++){ if(f[i] > 0.0) { hexLabels[0]=i;hexLabels[1]=i1tab[i];hexLabels[2]=i3tab[i1tab[i]];hexLabels[3]=i3tab[i];hexLabels[4]=i8tab[i];hexLabels[5]=i1tab[i8tab[i]];hexLabels[6]=i3tab[i1tab[i8tab[i]]];hexLabels[7]=i3tab[i8tab[i]];cellShapes[activeCells]=cellShape(hex, hexLabels);edgeList edges=cellShapes[activeCells].edges();forAll(edges, ei) { if(edges[ei].mag(points)< SMALL) { label start=pointMap[edges[ei].start()];while(start !=pointMap[start]) { start=pointMap[start];} label end=pointMap[edges[ei].end()];while(end !=pointMap[end]) { end=pointMap[end];} label minLabel=min(start, end);pointMap[start]=pointMap[end]=minLabel;} } cellZoning[activeCells]=idreg[i];activeCells++;}}cellShapes.setSize(activeCells);cellZoning.setSize(activeCells);forAll(cellShapes, celli){ cellShape &cs=cellShapes[celli];forAll(cs, i) { cs[i]=pointMap[cs[i]];} cs.collapse();}label bcIDs[11]={-1, 0, 2, 4, -1, 5, -1, 6, 7, 8, 9};const label nBCs=12;const word *kivaPatchTypes[nBCs]={ &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &symmetryPolyPatch::typeName, &wedgePolyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &symmetryPolyPatch::typeName, &oldCyclicPolyPatch::typeName};enum patchTypeNames{ PISTON, VALVE, LINER, CYLINDERHEAD, AXIS, WEDGE, INFLOW, OUTFLOW, PRESIN, PRESOUT, SYMMETRYPLANE, CYCLIC};const char *kivaPatchNames[nBCs]={ "piston", "valve", "liner", "cylinderHead", "axis", "wedge", "inflow", "outflow", "presin", "presout", "symmetryPlane", "cyclic"};List< SLList< face > > pFaces[nBCs]
Determine correspondence between points. See below.
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.
A subset of mesh faces organised as a primitive patch.
A patch is a list of labels that address the faces in the global face list.
virtual const labelList & faceOwner() const
Return face owner.
A List with indirect addressing.
virtual bool changeTopology() const
Check for topology change.
bool erase(const iterator &)
Erase a hashedEntry specified by given iterator.
label whichZone(const label objectIndex) const
Given a global object index, return the zone it is in.
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Macros for easy insertion into run-time selection tables.
label whichFace(const label globalCellID) const
Helper function to re-direct to zone::localID(...)
label start() const
Return start label of this patch in the polyMesh face list.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Virtual base class for mesh modifiers.
virtual const faceList & faces() const
Return raw faces.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
label setAction(const topoAction &action)
For compatibility with polyTopoChange: set topological action.
prefixOSstream Pout(cout, "Pout")
const polyMesh & mesh() const
Return the mesh reference.
Class containing data for face removal.
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
bool isInternalFace(const label faceIndex) const
Return true if given face label is internal to the mesh.
const dimensionedScalar e
Elementary charge.
bool insert(const Key &key)
Insert a new entry.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
A face is a list of labels corresponding to mesh vertices.
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,...
perfectInterface(const perfectInterface &)
Disallow default bitwise copy construct.
fileName::Type type(const fileName &)
Return the file type: DIRECTORY or FILE.
const labelList & meshPoints() const
Return labelList of mesh points in patch.
const boolList & flipMap() const
Return face flip map.
defineTypeNameAndDebug(combustionModel, 0)
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
bool matchPoints(const UList< point > &pts0, const UList< point > &pts1, const UList< scalar > &matchDistance, const bool verbose, labelList &from0To1, const point &origin=point::zero)
Determine correspondence between pointFields. Gets passed.
#define WarningInFunction
Report a warning using Foam::Warning.
word name(const complex &)
Return a string representation of a complex.
virtual const labelList & faceNeighbour() const
Return face neighbour.
A list of faces which address into the list of points.
virtual void write(Ostream &) const
Write.