57 const Foam::scalar Foam::perfectInterface::tol_ = 1
e-3;
73 ctrs[patchFacei] = pp[patchFacei].centre(points);
83 Foam::perfectInterface::perfectInterface
88 const word& faceZoneName,
89 const word& masterPatchName,
90 const word& slavePatchName
101 Foam::perfectInterface::perfectInterface
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])
269 affectedFaces.insert(pFaces[pFacei]);
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]];
323 bool zoneFlip =
false;
353 label meshPointi = meshPts1[i];
355 if (meshPointi != renumberPoints[meshPointi])
365 label facei = pp1.addressing()[i];
374 mesh.
faceZones()[faceZoneID_.index()].flipMap();
378 label facei = pp0.addressing()[i];
386 newFace[fp] = renumberPoints[f[fp]];
391 label pp1Facei = pp1.addressing()[from0To1Faces[i]];
419 newFace.reverseFace(),
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()
456 const polyPatch& patch0 = patches[masterPatchID_.index()];
457 const polyPatch& patch1 = patches[slavePatchID_.index()];
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()
const labelListList & pointFaces() const
Class containing data for face removal.
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
errorManipArg< error, int > exit(error &err, const int errNo=1)
const boolList & flipMap() const
Return face flip map.
Class describing modification of a face.
A face is a list of labels corresponding to mesh vertices.
const double e
Elementary charge.
const labelList & meshPoints() const
Return labelList of mesh points in patch. They are constructed.
A list of keyword definitions, which are a keyword followed by any number of values (e...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
void size(const label)
Override size to be inconsistent with allocated storage.
Ostream & endl(Ostream &os)
Add newline and flush stream.
virtual void updateMesh(const mapPolyMesh &)
Force recalculation of locally stored data on topological change.
virtual bool changeTopology() const
Check for topology change.
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
bool isInternalFace(const label faceIndex) const
Return true if given face label is internal to the mesh.
PrimitivePatch< face, IndirectList, const pointField & > indirectPrimitivePatch
Foam::indirectPrimitivePatch.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Determine correspondence between points. See below.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Macros for easy insertion into run-time selection tables.
virtual const pointField & points() const
Return raw points.
virtual void writeDict(Ostream &) const
Write dictionary.
label whichFace(const label globalCellID) const
Helper function to re-direct to zone::localID(...)
const polyMesh & mesh() const
Return the mesh reference.
A list of faces which address into the list of points.
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.
vectorField pointField
pointField is a vectorField.
virtual void setRefinement(polyTopoChange &) const
Insert the layer addition/removal instructions.
label start() const
Return start label of this patch in the polyMesh face list.
List of mesh modifiers defining the mesh dynamics.
A class for handling words, derived from string.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const edgeList & edges() const
Return list of edges, address into LOCAL point list.
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]
Virtual base class for mesh modifiers.
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
virtual void modifyMotionPoints(pointField &motionPoints) const
Modify motion points to comply with the topological change.
An Ostream is an abstract base class for all output systems (streams, files, token lists...
prefixOSstream Pout(cout,"Pout")
virtual bool update()=0
Update the mesh for both mesh motion and topology change.
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
virtual ~perfectInterface()
Destructor.
defineTypeNameAndDebug(combustionModel, 0)
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
word name(const complex &)
Return a string representation of a complex.
virtual const labelList & faceNeighbour() const
Return face neighbour.
fileName::Type type(const fileName &)
Return the file type: DIRECTORY or FILE.
#define WarningInFunction
Report a warning using Foam::Warning.
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
label whichZone(const label objectIndex) const
Given a global object index, return the zone it is in.
Direct mesh changes based on v1.3 polyTopoChange syntax.
virtual void write(Ostream &) const
Write.
dimensioned< scalar > mag(const dimensioned< Type > &)
const faceZoneMesh & faceZones() const
Return face zone mesh.
Mesh consisting of general polyhedral cells.
A subset of mesh faces organised as a primitive patch.
virtual const labelList & faceOwner() const
Return face owner.
A patch is a list of labels that address the faces in the global face list.
virtual const faceList & faces() const
Return raw faces.
A List with indirect addressing.
Class containing data for point removal.
const Field< PointType > & localPoints() const
Return pointField of points in patch.
label setAction(const topoAction &action)
For compatibility with polyTopoChange: set topological action.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.