27 #include "vtkPVFoamReader.h"
44 #include "vtkDataArraySelection.h"
52 template<
class ZonesType>
63 explicit zonesEntries(
const IOobject& io)
66 PtrList<entry>(readStream(ZonesType::typeName))
84 template<
class ZonesType>
85 Foam::wordList Foam::vtkPVFoam::getZoneNames(
const ZonesType& zones)
const
92 if (zones[zoneI].size())
94 names[nZone++] = zones[zoneI].name();
103 template<
class ZonesType>
104 Foam::wordList Foam::vtkPVFoam::getZoneNames(
const word& zonesName)
const
106 const Time& runTime =
107 reader_->GetDecomposedCase()
108 ? procDbsPtr_->proc0Time()
109 : procDbsPtr_->completeTime();
112 typeIOobject<ZonesType> ioObj
128 if (ioObj.headerOk())
130 const zonesEntries<ZonesType> zones(ioObj);
136 names[zoneI] = zones[zoneI].keyword();
148 void Foam::vtkPVFoam::updateInfoInternalMesh
150 vtkDataArraySelection* arraySelection
155 arrayRangeVolume_.reset(arraySelection->GetNumberOfArrays());
156 arraySelection->AddArray
160 arrayRangeVolume_ += 1;
164 void Foam::vtkPVFoam::updateInfolagrangian
166 vtkDataArraySelection* arraySelection
169 UPtrList<const Time> runTimes;
170 if (reader_->GetDecomposedCase())
172 runTimes.setSize(procDbsPtr_->nProcs());
173 forAll(procDbsPtr_->procTimes(), proci)
175 runTimes.set(proci, &procDbsPtr_->procTimes()[proci]);
181 runTimes.set(0, &procDbsPtr_->completeTime());
186 const fileName lagrangianPrefix =
189 : meshRegion_/lagrangian::cloud::prefix;
191 arrayRangelagrangian_.reset(arraySelection->GetNumberOfArrays());
194 HashSet<fileName> lagrangianDirs;
198 forAll(runTimes, runTimei)
200 const instantList times = runTimes[runTimei].times();
209 runTimes[runTimei].path()
220 arraySelection->AddArray
222 (cloudIter.key() +
" - lagrangian").c_str()
226 arrayRangelagrangian_ += lagrangianDirs.size();
230 void Foam::vtkPVFoam::updateInfoLagrangian
232 vtkDataArraySelection* arraySelection
235 const Time& runTime =
236 reader_->GetDecomposedCase()
237 ? procDbsPtr_->proc0Time()
238 : procDbsPtr_->completeTime();
242 const fileName LagrangianPrefix =
245 : meshRegion_/LagrangianMesh::prefix;
247 arrayRangeLagrangian_.reset(arraySelection->GetNumberOfArrays());
250 HashSet<fileName> LagrangianDirs;
272 arraySelection->AddArray
274 (LagrangianIter.key() +
" - Lagrangian").c_str()
278 arrayRangeLagrangian_ += LagrangianDirs.size();
282 void Foam::vtkPVFoam::updateInfoPatches
284 vtkDataArraySelection* arraySelection,
289 HashSet<string> enabledEntriesSet(enabledEntries);
291 arrayRangePatches_.reset(arraySelection->GetNumberOfArrays());
294 if (procMeshesPtr_.valid())
296 const fvMesh&
mesh = procMeshesPtr_->completeMesh();
299 const HashTable<labelList, word>& groups =
patches.groupPatchIndices();
306 iter != groups.end();
310 const word& groupName = iter.key();
323 string vtkGrpName = groupName +
" - group";
324 arraySelection->AddArray(vtkGrpName.c_str());
328 if (enabledEntriesSet.found(vtkGrpName))
330 if (!reader_->GetShowGroupsOnly())
332 enabledEntriesSet.erase(vtkGrpName);
335 const polyPatch& pp =
patches[patchIDs[i]];
339 enabledEntriesSet.insert
341 pp.name() +
" - " + pp.type()
351 if (!reader_->GetShowGroupsOnly())
359 arraySelection->AddArray
361 (pp.name() +
" - " + pp.type()).c_str()
371 const bool decomposed = reader_->GetDecomposedCase();
373 const Time& runTime =
375 ? procDbsPtr_->proc0Time()
376 : procDbsPtr_->completeTime();
380 typeIOobject<polyBoundaryMesh> ioObj
397 if (ioObj.headerOk())
399 polyBoundaryMeshEntries patchEntries(ioObj);
402 wordList names(patchEntries.size());
404 boolList isProc(patchEntries.size());
407 const dictionary& patchDict = patchEntries[
patchi].dict();
411 isProc[
patchi] = patchDict.found(
"myProcNo");
416 HashTable<labelList> groups(patchEntries.size());
419 const dictionary& patchDict = patchEntries[
patchi].dict();
422 patchDict.lookupOrDefault(
"inGroups",
wordList());
424 forAll(groupNames, groupI)
427 groups.find(groupNames[groupI]);
429 if (iter != groups.end())
443 const word& groupName = iter.key();
449 if (!isProc[patchIDs[i]])
451 nFaces += sizes[patchIDs[i]];
458 string vtkGrpName = groupName +
" - group";
459 arraySelection->AddArray(vtkGrpName.c_str());
463 if (enabledEntriesSet.found(vtkGrpName))
465 if (!reader_->GetShowGroupsOnly())
467 enabledEntriesSet.erase(vtkGrpName);
471 if (sizes[patchIDs[i]])
473 enabledEntriesSet.insert
477 + patchEntries[patchIDs[i]]
479 .lookup<word>(
"type")
489 if (!reader_->GetShowGroupsOnly())
493 configDict_.lookupOrDefault
510 const string vtkPatchName
512 names[
patchi] +
" - " + patchType
515 arraySelection->AddArray(vtkPatchName.c_str());
519 enabledEntriesSet.insert(vtkPatchName);
532 enabledEntries = enabledEntriesSet.toc();
536 void Foam::vtkPVFoam::updateInfoZones
538 vtkDataArraySelection* arraySelection
541 if (!reader_->GetIncludeZones())
return;
544 !procMeshesPtr_.valid()
545 ? NullObjectRef<fvMesh>()
546 : reader_->GetDecomposedCase()
547 ? procMeshesPtr_->haveProcs()
548 ? procMeshesPtr_->procMeshes().
first()
550 : procMeshesPtr_->completeMesh();
556 : getZoneNames<cellZoneList>(
"cellZones");
558 arrayRangeCellZones_.reset(arraySelection->GetNumberOfArrays());
561 arraySelection->AddArray
563 (cellZoneNames[i] +
" - cellZone").c_str()
566 arrayRangeCellZones_ += cellZoneNames.size();
572 : getZoneNames<faceZoneList>(
"faceZones");
574 arrayRangeFaceZones_.reset(arraySelection->GetNumberOfArrays());
577 arraySelection->AddArray
579 (faceZoneNames[i] +
" - faceZone").c_str()
582 arrayRangeFaceZones_ += faceZoneNames.size();
588 : getZoneNames<pointZoneList>(
"pointZones");
590 arrayRangePointZones_.reset(arraySelection->GetNumberOfArrays());
593 arraySelection->AddArray
595 (pointZoneNames[i] +
" - pointZone").c_str()
598 arrayRangePointZones_ += pointZoneNames.size();
602 void Foam::vtkPVFoam::updateInfoSets
604 vtkDataArraySelection* arraySelection
607 if (!reader_->GetIncludeSets())
return;
609 const Time& runTime =
610 reader_->GetDecomposedCase()
611 ? procDbsPtr_->proc0Time()
612 : procDbsPtr_->completeTime();
617 const word facesInstance = runTime.findInstance
624 const word setsInstance = runTime.findInstance
632 const IOobjectList
objects(runTime, setsInstance, meshDir_/
"sets");
634 arrayRangeCellSets_.reset(arraySelection->GetNumberOfArrays());
635 arrayRangeCellSets_ +=
636 addToSelection<cellSet>(arraySelection,
objects,
" - cellSet");
638 arrayRangeFaceSets_.reset(arraySelection->GetNumberOfArrays());
639 arrayRangeFaceSets_ +=
640 addToSelection<faceSet>(arraySelection,
objects,
" - faceSet");
642 arrayRangePointSets_.reset(arraySelection->GetNumberOfArrays());
643 arrayRangePointSets_ +=
644 addToSelection<pointSet>(arraySelection,
objects,
" - pointSet");
648 void Foam::vtkPVFoam::updateInfoFields()
652 vtkDataArraySelection* fieldSelection = reader_->GetFieldSelection();
659 regionPrefix = meshRegion_;
662 const Time& runTime =
663 reader_->GetDecomposedCase()
664 ? procDbsPtr_->proc0Time()
665 : procDbsPtr_->completeTime();
670 if (fieldSelection->GetNumberOfArrays() == 0 && !procMeshesPtr_.valid())
674 configDict_.lookupOrDefault
685 IOobjectList
objects(runTime, times[timei].
name(), regionPrefix);
689 objectNameSet.insert(iter.key());
693 const wordList objectNames(objectNameSet.toc());
699 enabledEntries.setSize(defaultFields.size());
702 enabledEntries[i] = objectNames[defaultFields[i]];
708 enabledEntries = getSelectedArrayEntries(fieldSelection,
false);
711 fieldSelection->RemoveAllArrays();
716 IOobjectList
objects(runTime, times[timei].
name(), regionPrefix);
718 addFieldsToSelection<volMesh>(fieldSelection,
objects);
719 addInternalFieldsToSelection<volMesh>(fieldSelection,
objects);
720 addFieldsToSelection<surfaceMesh>(fieldSelection,
objects);
721 addFieldsToSelection<pointMesh>(fieldSelection,
objects);
725 setSelectedArrayEntries(fieldSelection, enabledEntries);
727 if (debug) getSelectedArrayEntries(fieldSelection);
731 void Foam::vtkPVFoam::updateInfolagrangianFields()
735 UPtrList<const Time> runTimes;
736 if (reader_->GetDecomposedCase())
738 runTimes.setSize(procDbsPtr_->nProcs());
739 forAll(procDbsPtr_->procTimes(), proci)
741 runTimes.set(proci, &procDbsPtr_->procTimes()[proci]);
747 runTimes.set(0, &procDbsPtr_->completeTime());
750 vtkDataArraySelection* fieldSelection =
751 reader_->GetlagrangianFieldSelection();
754 stringList enabledEntries = getSelectedArrayEntries(fieldSelection,
false);
755 fieldSelection->RemoveAllArrays();
769 const arrayRange&
range = arrayRangelagrangian_;
773 forAll(runTimes, runTimei)
775 const instantList times = runTimes[runTimei].times();
783 lagrangianPrefix/getPartName(partId)
786 #define ADD_TO_SELECTION(Type, nullArg) \
787 addToSelection<IOField<Type>>(fieldSelection, objects);
790 #undef ADD_TO_SELECTION
796 setSelectedArrayEntries(fieldSelection, enabledEntries);
798 if (debug) getSelectedArrayEntries(fieldSelection);
802 void Foam::vtkPVFoam::updateInfoLagrangianFields()
806 const Time& runTime =
807 reader_->GetDecomposedCase()
808 ? procDbsPtr_->proc0Time()
809 : procDbsPtr_->completeTime();
813 vtkDataArraySelection* fieldSelection =
814 reader_->GetLagrangianFieldSelection();
817 stringList enabledEntries = getSelectedArrayEntries(fieldSelection,
false);
818 fieldSelection->RemoveAllArrays();
822 const fileName LagrangianPrefix =
825 : meshRegion_/LagrangianMesh::prefix;
831 const arrayRange&
range = arrayRangeLagrangian_;
843 LagrangianPrefix/getPartName(partId)
846 #define ADD_TO_SELECTION(Type, GeoField) \
847 addToSelection<GeoField<Type>>(fieldSelection, objects);
852 #undef ADD_TO_SELECTION
857 setSelectedArrayEntries(fieldSelection, enabledEntries);
859 if (debug) getSelectedArrayEntries(fieldSelection);
#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.
friend class iterator
Declare friendship with the iterator.
friend class const_iterator
Declare friendship with the const_iterator.
static const word prefix
Instance prefix.
label size() const
Return the number of elements in the UPtrList.
virtual void flush() const
Forcibly wait until all output done. Flush any cached data.
virtual fileNameList readDir(const fileName &, const fileType=fileType::file, const bool filterVariants=true, const bool followLink=true) const =0
Read a directory and return the entries as a string list.
static const word prefix
The prefix to local: lagrangian.
const pointZoneList & pointZones() const
Return point zones.
const cellZoneList & cellZones() const
Return cell zones.
static word defaultRegion
Return the default region name.
const faceZoneList & faceZones() const
Return face zones.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
static const word null
An empty word.
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
const fvPatchList & patches
#define DebugInFunction
Report an information message using Foam::Info.
const fileOperation & fileHandler()
Get current file handler.
List< word > wordList
A List of words.
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.
bool findStrings(const wordReListMatcher &matcher, const std::string &str)
Return true if string matches one of the regular expressions.
List< bool > boolList
Bool container classes.
labelList first(const UList< labelPair > &p)
List< instant > instantList
List of instants.
bool notNull(const T &t)
Return true if t is not a reference to the nullObject of type T.
DimensionedField< Type, LagrangianMesh > LagrangianInternalField
const T & NullObjectRef()
Return const reference to the nullObject of type T.
List< wordRe > wordReList
A List of wordRe (word or regular expression)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
HashSet wordHashSet
A HashSet with word keys.
FOR_ALL_FIELD_TYPES(makeFieldSourceTypedef)
List< string > stringList
A List of strings.
GeometricField< Type, LagrangianMesh > LagrangianField
const bool writeData(readBool(pdfDictionary.lookup("writeData")))
#define ADD_TO_SELECTION(Type, nullArg)