VTK  9.3.20240425
vtkIOSSUtilities.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
18#ifndef vtkIOSSUtilities_h
19#define vtkIOSSUtilities_h
20
22#include "vtkDoubleArray.h"
23#include "vtkIOSSReader.h"
24#include "vtkLogger.h"
25#include "vtkObject.h"
26#include "vtkSmartPointer.h"
27#include "vtkTypeInt32Array.h"
28#include "vtkTypeInt64Array.h"
29#include "vtkTypeList.h" // Needed for ArrayList definition
30
31// Ioss includes
32#include <vtk_ioss.h>
33// clang-format off
34#include VTK_IOSS(Ioss_Region.h)
35#include VTK_IOSS(Ioss_Transform.h)
36#include VTK_IOSS(Ioss_StructuredBlock.h)
37#include VTK_IOSS(Ioss_SideSet.h)
38#include VTK_IOSS(Ioss_SideBlock.h)
39// clang-format on
40
41#include <cassert>
42#include <set>
43
44VTK_ABI_NAMESPACE_BEGIN
45class vtkCellArray;
46class vtkDataSet;
47VTK_ABI_NAMESPACE_END
48
49namespace vtkIOSSUtilities
50{
51VTK_ABI_NAMESPACE_BEGIN
52
54{
59};
60
64class Cache
65{
66public:
69
74
80
84 void Clear();
85
86 vtkObject* Find(const Ioss::GroupingEntity* entity, const std::string& cachekey) const;
87 void Insert(const Ioss::GroupingEntity* entity, const std::string& cachekey, vtkObject* array);
88
89private:
90 Cache(const Cache&) = delete;
91 void operator=(const Cache&) = delete;
92
93 class CacheInternals;
94 CacheInternals* Internals;
95};
96
102{
103public:
106
110 std::string GetMessages() const;
111
112private:
113 std::ostringstream Stream;
114 std::ostream* DebugStream;
115 std::ostream* WarningStream;
116};
117
118using EntityNameType = std::pair<vtkTypeUInt64, std::string>;
119
127 vtkTypeList::Create<vtkDoubleArray, vtkTypeInt32Array, vtkTypeInt64Array>>::Result;
128
133std::vector<std::pair<int, double>> GetTime(const Ioss::Region* region);
134
142std::string GetSanitizedBlockName(const Ioss::Region* region, const std::string& name);
143
149template <typename EntityType>
150void GetEntityAndFieldNames(const Ioss::Region* region, const std::vector<EntityType*>& entities,
151 std::set<EntityNameType>& entity_names, std::set<std::string>& field_names)
152{
153 for (const auto& entity : entities)
154 {
155 const int64_t id = entity->property_exists("id") ? entity->get_property("id").get_int() : 0;
156 auto name = vtkIOSSUtilities::GetSanitizedBlockName(region, entity->name());
157 entity_names.insert(EntityNameType{ static_cast<vtkTypeUInt64>(id), name });
158
159 Ioss::NameList attributeNames;
160 entity->field_describe(Ioss::Field::TRANSIENT, &attributeNames);
161 entity->field_describe(Ioss::Field::ATTRIBUTE, &attributeNames);
162 std::copy(
163 attributeNames.begin(), attributeNames.end(), std::inserter(field_names, field_names.end()));
164 }
165}
169template <>
170void GetEntityAndFieldNames<Ioss::SideSet>(const Ioss::Region* region,
171 const std::vector<Ioss::SideSet*>& entities, std::set<EntityNameType>& entity_names,
172 std::set<std::string>& field_names);
173
181
190
197vtkSmartPointer<vtkDataArray> GetData(const Ioss::GroupingEntity* entity,
198 const std::string& fieldname, Ioss::Transform* transform = nullptr, Cache* cache = nullptr,
199 const std::string& cachekey = std::string());
200
209int GetCellType(const Ioss::ElementTopology* topology);
210
218const Ioss::ElementTopology* GetElementTopology(int vtk_cell_type);
219
231 Ioss::GroupingEntity* group_entity, int& vtk_topology_type, Cache* cache = nullptr);
232
239 const Ioss::GroupingEntity* group_entity, Cache* cache = nullptr);
240
247bool IsFieldTransient(Ioss::GroupingEntity* entity, const std::string& fieldname);
248
250
253std::string GetDisplacementFieldName(Ioss::GroupingEntity* nodeblock);
256
262
267DatabaseFormatType DetectType(const std::string& dbaseName);
268
274DatabaseFormatType GetFormat(const Ioss::GroupingEntity* entity);
275
282std::vector<Ioss::StructuredBlock*> GetMatchingStructuredBlocks(
283 Ioss::Region* region, const std::string& blockname);
284
285VTK_ABI_NAMESPACE_END
286}
287
288#endif
289// VTK-HeaderTest-Exclude: vtkIOSSUtilities.h
object to represent cell connectivity
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
void Clear()
Clears the cache.
void ClearUnused()
Removes all cached entries not accessed since most recent call to ResetAccessCounts.
void ResetAccessCounts()
Call this to clear internal count for hits.
vtkObject * Find(const Ioss::GroupingEntity *entity, const std::string &cachekey) const
void Insert(const Ioss::GroupingEntity *entity, const std::string &cachekey, vtkObject *array)
A helper to instantiate on stack to temporarily redirect non-critical messages emanating from IOSS.
std::string GetMessages() const
Provides access to the accumulated messages.
abstract base class for most VTK objects
Definition vtkObject.h:162
Hold a reference to a vtkObjectBase instance.
internal utilities for vtkIOSSReader
void GetEntityAndFieldNames< Ioss::SideSet >(const Ioss::Region *region, const std::vector< Ioss::SideSet * > &entities, std::set< EntityNameType > &entity_names, std::set< std::string > &field_names)
Specialization for Ioss::SideSet (see paraview/paraview#21231).
void InitializeEnvironmentForIOSS()
Must be called before using any Ioss library functions.
std::vector< std::pair< int, double > > GetTime(const Ioss::Region *region)
Reads time / timestep information from a region.
std::vector< Ioss::StructuredBlock * > GetMatchingStructuredBlocks(Ioss::Region *region, const std::string &blockname)
Returns collection of StructuredBlock's matching the selected blockname.
void GetEntityAndFieldNames(const Ioss::Region *region, const std::vector< EntityType * > &entities, std::set< EntityNameType > &entity_names, std::set< std::string > &field_names)
Populates entitySelection with available entity block (or set) names and populates fieldSelection wit...
DatabaseFormatType GetFormat(const Ioss::GroupingEntity *entity)
Given any GroupingEntity pointer, returns the format that the associated database is in.
std::pair< vtkTypeUInt64, std::string > EntityNameType
vtkSmartPointer< vtkPoints > GetMeshModelCoordinates(const Ioss::GroupingEntity *group_entity, Cache *cache=nullptr)
Read points from the group_entity.
Ioss::EntityType GetIOSSEntityType(vtkIOSSReader::EntityType vtk_type)
For the given vtkIOSSReader::EntityType return the corresponding Ioss::EntityType.
const Ioss::ElementTopology * GetElementTopology(int vtk_cell_type)
Returns an Ioss topology element, if possible, given a VTK cell type.
int GetCellType(const Ioss::ElementTopology *topology)
Returns VTK celltype for a Ioss topology element.
vtkSmartPointer< vtkDataArray > CreateArray(const Ioss::Field &field)
Create an array for the given field.
vtkSmartPointer< vtkCellArray > GetConnectivity(Ioss::GroupingEntity *group_entity, int &vtk_topology_type, Cache *cache=nullptr)
Read connectivity information from the group_entity.
std::string GetSanitizedBlockName(const Ioss::Region *region, const std::string &name)
This is primarily intended for CGNS.
bool IsFieldTransient(Ioss::GroupingEntity *entity, const std::string &fieldname)
Returns true if the field is transient.
std::string GetDisplacementFieldName(Ioss::GroupingEntity *nodeblock)
Finds a displacement field name.
vtkSmartPointer< vtkDataArray > GetData(const Ioss::GroupingEntity *entity, const std::string &fieldname, Ioss::Transform *transform=nullptr, Cache *cache=nullptr, const std::string &cachekey=std::string())
Returns a VTK array for a given field (fieldname) on the chosen block (or set) entity.
DatabaseFormatType DetectType(const std::string &dbaseName)
Given a filename determines and returns the database type.
Remove all duplicate types from TypeList TList, storing the new list in Result.