27 #include "vtkPVFoamReader.h"
41 #include "vtkDataArraySelection.h"
42 #include "vtkMultiBlockDataSet.h"
43 #include "vtkPolyData.h"
44 #include "vtkUnstructuredGrid.h"
48 void Foam::vtkPVFoam::convertMeshVolume
50 vtkMultiBlockDataSet* output,
56 arrayRange&
range = arrayRangeVolume_;
60 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
67 for (
int partId =
range.start(); partId <
range.end(); ++partId)
69 const word partName =
"internalMesh";
71 if (!partStatus_[partId])
continue;
73 vtkUnstructuredGrid* vtkmesh =
74 volumeVTKMesh(
mesh, regionPolyDecomp_[datasetNo]);
78 AddToBlock(output, vtkmesh,
range, datasetNo, partName);
81 partDataset_[partId] = datasetNo++;
86 if (datasetNo) ++blockNo;
90 void Foam::vtkPVFoam::convertMeshlagrangian
92 vtkMultiBlockDataSet* output,
98 arrayRange&
range = arrayRangelagrangian_;
102 lagrangianReconstructors_.clear();
104 for (
int partId =
range.start(); partId <
range.end(); ++partId)
106 const word lagrangianName = getPartName(partId);
108 if (!partStatus_[partId])
continue;
110 autoPtr<lagrangianFieldReconstructor> lreconstructorPtr;
112 vtkPolyData* vtkmesh =
113 lagrangianVTKMesh(lagrangianName, lreconstructorPtr);
116 AddToBlock(output, vtkmesh,
range, datasetNo, lagrangianName);
119 lagrangianReconstructors_.append(lreconstructorPtr.ptr());
121 partDataset_[partId] = datasetNo++;
126 if (datasetNo) ++blockNo;
130 void Foam::vtkPVFoam::convertMeshLagrangian
132 vtkMultiBlockDataSet* output,
138 arrayRange&
range = arrayRangeLagrangian_;
139 range.block(blockNo);
142 LagrangianMeshes_.clear();
143 LagrangianReconstructors_.clear();
145 for (
int partId =
range.start(); partId <
range.end(); ++partId)
147 const word LagrangianName = getPartName(partId);
149 if (!partStatus_[partId])
continue;
151 autoPtr<LagrangianMesh> LmeshPtr;
152 autoPtr<LagrangianFieldReconstructor> LreconstructorPtr;
154 vtkPolyData* vtkmesh =
155 LagrangianVTKMesh(LagrangianName, LmeshPtr, LreconstructorPtr);
158 AddToBlock(output, vtkmesh,
range, datasetNo, LagrangianName);
161 LagrangianMeshes_.append(LmeshPtr.ptr());
162 LagrangianReconstructors_.append(LreconstructorPtr.ptr());
164 partDataset_[partId] = datasetNo++;
169 if (datasetNo) ++blockNo;
173 void Foam::vtkPVFoam::convertMeshPatches
175 vtkMultiBlockDataSet* output,
179 arrayRange&
range = arrayRangePatches_;
180 range.block(blockNo);
183 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
186 for (
int partId =
range.start(); partId <
range.end(); ++partId)
188 if (!partStatus_[partId])
continue;
190 const word patchName = getPartName(partId);
192 patches.patchSet(List<wordRe>(1, wordRe(patchName)));
197 if (iter != patchIds.begin())
DebugInfo<<
',';
202 vtkPolyData* vtkmesh =
nullptr;
203 if (patchIds.size() == 1)
205 vtkmesh = patchVTKMesh(
patches[patchIds.begin().key()]);
219 const polyPatch& pp =
patches[iter.key()];
222 meshFaceLabels[sz++] = pp.start()+i;
225 UIndirectList<face> fcs(
mesh.
faces(), meshFaceLabels);
228 vtkmesh = patchVTKMesh(pp);
233 AddToBlock(output, vtkmesh,
range, datasetNo, patchName);
236 partDataset_[partId] = datasetNo++;
248 void Foam::vtkPVFoam::convertMeshCellZones
250 vtkMultiBlockDataSet* output,
254 arrayRange&
range = arrayRangeCellZones_;
255 range.block(blockNo);
258 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
261 zonePolyDecomp_.setSize(
range.size());
263 if (
range.empty())
return;
266 for (
int partId =
range.start(); partId <
range.end(); ++partId)
268 const word zoneName = getPartName(partId);
269 const label zoneId = zMesh.findIndex(zoneName);
271 if (!partStatus_[partId] || zoneId < 0)
continue;
274 <<
"Creating VTK mesh for cellZone[" << zoneId <<
"]: "
277 fvMeshSubset subsetter(
mesh);
278 subsetter.setLargeCellSubset(zMesh[zoneId]);
280 vtkUnstructuredGrid* vtkmesh = volumeVTKMesh
283 zonePolyDecomp_[datasetNo]
292 zonePolyDecomp_[datasetNo].superCells()
297 zonePolyDecomp_[datasetNo].addPointCellLabels()
301 zonePolyDecomp_[datasetNo].pointMap() = subsetter.pointMap();
303 AddToBlock(output, vtkmesh,
range, datasetNo, zoneName);
306 partDataset_[partId] = datasetNo++;
311 if (datasetNo) ++blockNo;
315 void Foam::vtkPVFoam::convertMeshCellSets
317 vtkMultiBlockDataSet* output,
321 arrayRange&
range = arrayRangeCellSets_;
322 range.block(blockNo);
325 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
328 setPolyDecomp_.setSize(
range.size());
330 for (
int partId =
range.start(); partId <
range.end(); ++partId)
332 const word partName = getPartName(partId);
334 if (!partStatus_[partId])
continue;
337 <<
"Creating VTK mesh for cellSet: [" << partName <<
endl;
339 const autoPtr<cellSet> cSetPtr =
340 reader_->GetDecomposedCase()
341 ? procMeshesPtr_->reconstructSet<cellSet>(partName)
342 : autoPtr<cellSet>(
new cellSet(
mesh, partName));
344 fvMeshSubset subsetter(
mesh);
345 subsetter.setLargeCellSubset(cSetPtr());
347 vtkUnstructuredGrid* vtkmesh = volumeVTKMesh
350 setPolyDecomp_[datasetNo]
359 setPolyDecomp_[datasetNo].superCells()
364 setPolyDecomp_[datasetNo].addPointCellLabels()
368 setPolyDecomp_[datasetNo].pointMap() = subsetter.pointMap();
370 AddToBlock(output, vtkmesh,
range, datasetNo, partName);
373 partDataset_[partId] = datasetNo++;
378 if (datasetNo) ++blockNo;
382 void Foam::vtkPVFoam::convertMeshFaceZones
384 vtkMultiBlockDataSet* output,
388 arrayRange&
range = arrayRangeFaceZones_;
389 range.block(blockNo);
392 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
394 if (
range.empty())
return;
397 for (
int partId =
range.start(); partId <
range.end(); ++partId)
399 const word zoneName = getPartName(partId);
400 const label zoneId = zMesh.findIndex(zoneName);
402 if (!partStatus_[partId] || zoneId < 0)
continue;
405 <<
"Creating VTK mesh for faceZone[" << zoneId <<
"]: "
408 vtkPolyData* vtkmesh = patchVTKMesh(zMesh[zoneId].patch());
411 AddToBlock(output, vtkmesh,
range, datasetNo, zoneName);
414 partDataset_[partId] = datasetNo++;
419 if (datasetNo) ++blockNo;
423 void Foam::vtkPVFoam::convertMeshFaceSets
425 vtkMultiBlockDataSet* output,
429 arrayRange&
range = arrayRangeFaceSets_;
430 range.block(blockNo);
433 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
435 for (
int partId =
range.start(); partId <
range.end(); ++partId)
437 const word partName = getPartName(partId);
439 if (!partStatus_[partId])
continue;
442 <<
"Creating VTK mesh for faceSet: " << partName <<
endl;
444 const autoPtr<faceSet> fSetPtr =
445 reader_->GetDecomposedCase()
446 ? procMeshesPtr_->reconstructSet<faceSet>(partName)
447 : autoPtr<faceSet>(
new faceSet(
mesh, partName));
449 vtkPolyData* vtkmesh = faceSetVTKMesh(
mesh, fSetPtr());
452 AddToBlock(output, vtkmesh,
range, datasetNo, partName);
455 partDataset_[partId] = datasetNo++;
460 if (datasetNo) ++blockNo;
464 void Foam::vtkPVFoam::convertMeshPointZones
466 vtkMultiBlockDataSet* output,
470 arrayRange&
range = arrayRangePointZones_;
471 range.block(blockNo);
474 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
476 if (
range.empty())
return;
479 for (
int partId =
range.start(); partId <
range.end(); ++partId)
481 const word zoneName = getPartName(partId);
482 const label zoneId = zMesh.findIndex(zoneName);
484 if (!partStatus_[partId] || zoneId < 0)
continue;
487 <<
"Creating VTK mesh for pointZone[" << zoneId <<
"]: "
490 vtkPolyData* vtkmesh = pointZoneVTKMesh(
mesh, zMesh[zoneId]);
493 AddToBlock(output, vtkmesh,
range, datasetNo, zoneName);
496 partDataset_[partId] = datasetNo++;
501 if (datasetNo) ++blockNo;
506 void Foam::vtkPVFoam::convertMeshPointSets
508 vtkMultiBlockDataSet* output,
512 arrayRange&
range = arrayRangePointSets_;
513 range.block(blockNo);
516 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
518 for (
int partId =
range.start(); partId <
range.end(); ++partId)
520 word partName = getPartName(partId);
522 if (!partStatus_[partId])
continue;
525 <<
"Creating VTK mesh for pointSet: " << partName <<
endl;
527 const autoPtr<pointSet> pSetPtr =
528 reader_->GetDecomposedCase()
529 ? procMeshesPtr_->reconstructSet<pointSet>(partName)
530 : autoPtr<pointSet>(
new pointSet(
mesh, partName));
532 vtkPolyData* vtkmesh = pointSetVTKMesh(
mesh, pSetPtr());
535 AddToBlock(output, vtkmesh,
range, datasetNo, partName);
538 partDataset_[partId] = datasetNo++;
543 if (datasetNo) ++blockNo;
#define forAll(list, i)
Loop across all elements in list.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object of type.
void setSize(const label)
Reset size of List.
label size() const
Return the number of elements in the UPtrList.
const pointZoneList & pointZones() const
Return point zones.
const cellZoneList & cellZones() const
Return cell zones.
virtual const faceList & faces() const
Return raw faces.
const faceZoneList & faceZones() const
Return face zones.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
virtual const pointField & points() const
Return raw points.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
const fvPatchList & patches
#define DebugInfo
Report an information message using Foam::Info.
#define DebugInFunction
Report an information message using Foam::Info.
List< label > labelList
A List of labels.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
PrimitivePatch< UIndirectList< face >, const pointField & > uindirectPrimitivePatch
Foam::uindirectPrimitivePatch.
void inplaceRenumber(const labelUList &oldToNew, ListType &)
Inplace renumber the values of a list.
HashSet< label, Hash< label > > labelHashSet
A HashSet with label keys.