29 #include "vtkPVFoamReader.h"
44 #include "vtkDataArraySelection.h"
53 template<
class ZonesType>
64 explicit zonesEntries(
const IOobject& io)
67 PtrList<entry>(readStream(ZonesType::typeName))
85 template<
class ZonesType>
86 Foam::wordList Foam::vtkPVFoam::getZoneNames(
const ZonesType& zones)
const
93 if (zones[zoneI].size())
95 names[nZone++] = zones[zoneI].name();
104 template<
class ZonesType>
105 Foam::wordList Foam::vtkPVFoam::getZoneNames(
const word& zonesName)
const
110 typeIOobject<ZonesType> ioObj
113 dbPtr_().findInstance
126 if (ioObj.headerOk())
128 const zonesEntries<ZonesType> zones(ioObj);
130 names.setSize(zones.size());
133 names[zoneI] = zones[zoneI].keyword();
141 void Foam::vtkPVFoam::updateInfoInternalMesh
143 vtkDataArraySelection* arraySelection
153 arrayRangeVolume_.reset(arraySelection->GetNumberOfArrays());
154 arraySelection->AddArray
158 arrayRangeVolume_ += 1;
163 getSelectedArrayEntries(arraySelection);
168 void Foam::vtkPVFoam::updateInfoLagrangian
170 vtkDataArraySelection* arraySelection
188 arrayRangeLagrangian_.reset(arraySelection->GetNumberOfArrays());
191 HashSet<fileName> cloudDirs;
201 dbPtr_->path()/times[timei].name()/lagrangianPrefix,
208 arraySelection->AddArray
210 (cloudIter.key() +
" - lagrangian").c_str()
214 arrayRangeLagrangian_ += cloudDirs.size();
219 getSelectedArrayEntries(arraySelection);
224 void Foam::vtkPVFoam::updateInfoPatches
226 vtkDataArraySelection* arraySelection,
234 <<
" [meshPtr=" << (meshPtr_ ?
"set" :
"nullptr") <<
"]" <<
endl;
238 HashSet<string> enabledEntriesSet(enabledEntries);
240 arrayRangePatches_.reset(arraySelection->GetNumberOfArrays());
245 const polyBoundaryMesh&
patches = meshPtr_->boundaryMesh();
246 const HashTable<labelList, word>& groups =
patches.groupPatchIndices();
254 iter != groups.end();
258 const word& groupName = iter.key();
270 string vtkGrpName = groupName +
" - group";
271 arraySelection->AddArray(vtkGrpName.c_str());
275 if (enabledEntriesSet.found(vtkGrpName))
277 if (!reader_->GetShowGroupsOnly())
279 enabledEntriesSet.erase(vtkGrpName);
282 const polyPatch& pp =
patches[patchIDs[i]];
287 pp.name() +
" - " + pp.type()
290 enabledEntriesSet.insert(vtkPatchName);
301 if (!reader_->GetShowGroupsOnly())
309 const string vtkPatchName = pp.name() +
" - " + pp.type();
312 arraySelection->AddArray(vtkPatchName.c_str());
323 typeIOobject<polyBoundaryMesh> ioObj
326 dbPtr_().findInstance
340 if (ioObj.headerOk())
342 polyBoundaryMeshEntries patchEntries(ioObj);
347 wordList names(patchEntries.size());
352 const dictionary& patchDict = patchEntries[
patchi].dict();
361 HashTable<labelList, word> groups(patchEntries.size());
365 const dictionary& patchDict = patchEntries[
patchi].dict();
368 patchDict.readIfPresent(
"inGroups", groupNames);
370 forAll(groupNames, groupI)
376 if (iter != groups.end())
391 iter != groups.end();
395 const word& groupName = iter.key();
401 nFaces += sizes[patchIDs[i]];
407 string vtkGrpName = groupName +
" - group";
408 arraySelection->AddArray(vtkGrpName.c_str());
412 if (enabledEntriesSet.found(vtkGrpName))
414 if (!reader_->GetShowGroupsOnly())
416 enabledEntriesSet.erase(vtkGrpName);
419 if (sizes[patchIDs[i]])
423 patchEntries[patchIDs[i]].
dict().lookup
431 names[patchIDs[i]] +
" - " + patchType
434 enabledEntriesSet.insert(vtkPatchName);
445 if (!reader_->GetShowGroupsOnly())
449 configDict_.lookupOrDefault
466 const string vtkPatchName
468 names[
patchi] +
" - " + patchType
471 arraySelection->AddArray(vtkPatchName.c_str());
477 enabledEntriesSet.insert(vtkPatchName);
490 enabledEntries = enabledEntriesSet.toc();
495 getSelectedArrayEntries(arraySelection);
500 void Foam::vtkPVFoam::updateInfoZones
502 vtkDataArraySelection* arraySelection
505 if (!reader_->GetIncludeZones())
513 <<
" [meshPtr=" << (meshPtr_ ?
"set" :
"nullptr") <<
"]" <<
endl;
521 namesLst = getZoneNames(meshPtr_->cellZones());
525 namesLst = getZoneNames<cellZoneList>(
"cellZones");
528 arrayRangeCellZones_.reset(arraySelection->GetNumberOfArrays());
531 arraySelection->AddArray
533 (namesLst[elemI] +
" - cellZone").c_str()
536 arrayRangeCellZones_ += namesLst.size();
542 namesLst = getZoneNames(meshPtr_->faceZones());
546 namesLst = getZoneNames<faceZoneList>(
"faceZones");
549 arrayRangeFaceZones_.reset(arraySelection->GetNumberOfArrays());
552 arraySelection->AddArray
554 (namesLst[elemI] +
" - faceZone").c_str()
557 arrayRangeFaceZones_ += namesLst.size();
563 namesLst = getZoneNames(meshPtr_->pointZones());
567 namesLst = getZoneNames<pointZoneList>(
"pointZones");
570 arrayRangePointZones_.reset(arraySelection->GetNumberOfArrays());
573 arraySelection->AddArray
575 (namesLst[elemI] +
" - pointZone").c_str()
578 arrayRangePointZones_ += namesLst.size();
583 getSelectedArrayEntries(arraySelection);
588 void Foam::vtkPVFoam::updateInfoSets
590 vtkDataArraySelection* arraySelection
593 if (!reader_->GetIncludeSets())
606 word facesInstance = dbPtr_().findInstance
613 word setsInstance = dbPtr_().findInstance
621 IOobjectList
objects(dbPtr_(), setsInstance, meshDir_/
"sets");
625 Info<<
" Foam::vtkPVFoam::updateInfoSets read "
626 <<
objects.names() <<
" from " << setsInstance <<
endl;
630 arrayRangeCellSets_.reset(arraySelection->GetNumberOfArrays());
631 arrayRangeCellSets_ += addToSelection<cellSet>
638 arrayRangeFaceSets_.reset(arraySelection->GetNumberOfArrays());
639 arrayRangeFaceSets_ += addToSelection<faceSet>
646 arrayRangePointSets_.reset(arraySelection->GetNumberOfArrays());
647 arrayRangePointSets_ += addToSelection<pointSet>
657 getSelectedArrayEntries(arraySelection);
662 void Foam::vtkPVFoam::updateInfoFields()
667 <<
" [meshPtr=" << (meshPtr_ ?
"set" :
"nullptr") <<
"]"
671 vtkDataArraySelection* fieldSelection = reader_->GetFieldSelection();
678 regionPrefix = meshRegion_;
681 const Time& runTime = dbPtr_();
686 if (fieldSelection->GetNumberOfArrays() == 0 && !meshPtr_)
690 configDict_.lookupOrDefault
701 IOobjectList
objects(runTime, times[timei].
name(), regionPrefix);
705 objectNameSet.insert(iter.key());
709 const wordList objectNames(objectNameSet.toc());
715 enabledEntries.setSize(defaultFields.size());
718 enabledEntries[i] = objectNames[defaultFields[i]];
724 enabledEntries = getSelectedArrayEntries(fieldSelection);
727 fieldSelection->RemoveAllArrays();
732 IOobjectList
objects(runTime, times[timei].
name(), regionPrefix);
734 addFieldsToSelection<fvPatchField, volMesh>
740 addInternalFieldsToSelection<fvPatchField, volMesh>
746 addFieldsToSelection<fvsPatchField, surfaceMesh>
752 addFieldsToSelection<pointPatchField, pointMesh>
760 setSelectedArrayEntries(fieldSelection, enabledEntries);
764 void Foam::vtkPVFoam::updateInfoLagrangianFields()
771 vtkDataArraySelection* fieldSelection =
772 reader_->GetLagrangianFieldSelection();
775 stringList enabledEntries = getSelectedArrayEntries(fieldSelection);
776 fieldSelection->RemoveAllArrays();
790 const arrayRange&
range = arrayRangeLagrangian_;
802 lagrangianPrefix/getPartName(partId)
805 addToSelection<IOField<label>>(fieldSelection,
objects);
806 addToSelection<IOField<scalar>>(fieldSelection,
objects);
807 addToSelection<IOField<vector>>(fieldSelection,
objects);
808 addToSelection<IOField<sphericalTensor>>(fieldSelection,
objects);
809 addToSelection<IOField<symmTensor>>(fieldSelection,
objects);
810 addToSelection<IOField<tensor>>(fieldSelection,
objects);
815 setSelectedArrayEntries(fieldSelection, enabledEntries);
#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.
label size() const
Return the number of elements in the UPtrList.
static const word prefix
The prefix to local: lagrangian.
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 word defaultRegion
Return the default region name.
static const word null
An empty word.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
const fvPatchList & patches
#define InfoInFunction
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.
Ostream & endl(Ostream &os)
Add newline and flush stream.
word name(const bool)
Return a word representation of a bool.
labelList first(const UList< labelPair > &p)
List< instant > instantList
List of instants.
List< wordRe > wordReList
A List of wordRe (word or regular expression)
HashSet wordHashSet
A HashSet with word keys.
List< string > stringList
A List of strings.
const bool writeData(readBool(pdfDictionary.lookup("writeData")))