- still using the same version of the reader API (2.03)
- this seems to solve strange issues with genericPatchField symbols,
but it still doesn't get the reader module working.
- added in the release information (the build string)
- using a filter such as clip-plane on a multi-port source causes
inconsistent UPDATE_TIME_STEPS() on each port. This looks like a
VTK/Paraview bug to me.
Workaround: check both ports and take the first one that has a value
different than the last time set.
- objectRegistry gets a rename() that also adjusts the dbDir
- cloud reworked to use static variables subInstance and defaultName.
This avoids writing "lagrangian" everywhere
string fixes
- avoid masking of std::string::replace in string.H
- avoid old strstream in PV3FoamReader
- OSspecific: chmod() -> chMod(), even although it's not used anywhere
- ListOps get subset() and inplaceSubset() templated on BoolListType
- added UList<bool>::operator[](..) const specialization.
Returns false (actually pTraits<bool>::zero) for out-of-range elements.
This lets us use List<bool> with lazy evaluation and no noticeable
change in performance.
- use rcIndex() and fcIndex() wherever possible.
Could check if branching or modulus is faster for fcIndex().
- UList and FixedList get 'const T* cdata() const' and 'T* data()' members.
Similar to the STL front() and std::string::data() methods, they return a
pointer to the first element without needing to write '&myList[0]', recast
begin() or violate const-ness.
- can use 'XX.empty()' instead of 'XX.size() == 0', 'XX.size() < 1' or
'XX.size() <= 0' or for simpler coding.
It also has the same number of characters as '!XX.size()' and /might/ be
more readable
- many size checking had 'XX.size() > 0', 'XX.size() != 0', or 'XX.size() >= 1'
when a simple 'XX.size()' suffices
Pro: Good delimitation. Good visual distinction. No confusion with normal
cases, since '{}' characters are excluded by !word::valid()
Con: Possible quoting issues when creating directly instead of via paraFoam,
but seemed to work fine with bash TAB completion.
- handling multiple regions require multiple readers
- a region is currently recognized by the file name, anything after the
'=' delimiter (eg, "case=region.OpenFOAM") is used to determine the
mesh region, but might be changed in the future
eg, 'case%region', 'case^region', 'case~region', 'case{region}' ...
Note:
- Having a separate reader for each region instead attempting to handle
all the mesh regions in a single reader is the better solution.
It is not only simpler, but allows distinct field selections for
each region
Todo:
- Haven't a test for Lagrangian and multi-regions.
- streamlined code somewhat, minor attempt to reclaim some memory
- now use "mesh parts" for patches/zones/sets/etc throughout to avoid
ambiguity with mesh regions
- collect superCells and addPointCellLabels in a class. The old version
actually seemed to have overwritten the addPointCellLabels with each
cellSet/cellZone. This means that part of the pointFields would be trashed
in the combination of polyhedral cells, cellSets/cellZones and internalMesh
- polyDecomp information for muitiple mesh regions, but not yet exploited
- pointFields now working for cellZones/cellSets
- extroplating fields onto walls also works as expected for interpolated
pointFields
- added tooltips to reader GUI
TODO:
- pointFields (real and interpolated) for faceSets/faceZones
- various GUI properties are now animateable="0"
(meaning they no longer show up on the time-line)
- move reader switches to the bottom of the GUI
- move Lagrangian fields above pointFields for better visibility
- basic support for multiple clouds
- filter fields based on selection before looping over all the geometry bits
- mesh conversion functions now return VTK mesh types for easier handling
- faceZones mesh conversion had points/faces allocation reversed
- updateInfo with every call to setTime() that changes the timeIndex
This seems to be the only way to notice Lagrangian fields
- restore displaying patchnames that got forgotten in the last commit
- misc reorganization
- normal mesh data on port0
- Lagrangian data on port1
- no fixed block numbers for dividing internalMesh, patches, zones etc.
This helps avoid ugly gaps in the multiblock output
- avoid segfault if Lagrangian fields are converted without positions
TODO:
- can we label the output ports?
- the selection of Lagrangian data and fields is wonky.
- added printMemory() method to aid debugging memory used
- call UpdateInformation() if the mesh has changed
- automatic activation of "internalMesh", "p", "U"
is suppressed if a fvMesh is cached. Otherwise,
appearing/disappearing volFields can cause a crash
Note:
The message "had to make up a selection value" that sometimes occurs
seems to be paraview related (see paraview mailing list),
- vtkPV3Foam get PrintSelf (reduces number of methods)
- move output data member from vtkPV3Foam -> PV3FoamReader
in preparation for rewriting output method
- roughed in code to track mesh/field changes in preparation for rewriting
output method
- progress bar with arbitrary values to give the user something to watch