6 #include "MeshMetadata.h" 15 class svtkTypeInt64Array;
16 class svtkTypeInt32Array;
19 class svtkUniformGrid;
20 class svtkRectilinearGrid;
21 class svtkStructuredGrid;
23 class svtkUnstructuredGrid;
24 class svtkMultiBlockDataSet;
25 class svtkOverlappingAMR;
26 class svtkDataSetAttributes;
27 class svtkCompositeDataSet;
30 class vtkTypeInt64Array;
31 class vtkTypeInt32Array;
39 class vtkRectilinearGrid;
40 class vtkStructuredGrid;
42 class vtkUnstructuredGrid;
43 class vtkMultiBlockDataSet;
44 class vtkOverlappingAMR;
48 #include <svtkDataArray.h> 49 #include <svtkAOSDataArrayTemplate.h> 50 #include <svtkSOADataArrayTemplate.h> 52 #include <svtkSmartPointer.h> 53 #include <svtkAOSDataArrayTemplate.h> 54 #include <svtkCellArray.h> 60 #define svtkCellTemplateMacro(code) \ 61 svtkTemplateMacroCase(SVTK_LONG_LONG, long long, code); \ 62 svtkTemplateMacroCase(SVTK_UNSIGNED_LONG_LONG, unsigned long long, code); \ 63 svtkTemplateMacroCase(SVTK_ID_TYPE, svtkIdType, code); \ 64 svtkTemplateMacroCase(SVTK_LONG, long, code); \ 65 svtkTemplateMacroCase(SVTK_UNSIGNED_LONG, unsigned long, code); \ 66 svtkTemplateMacroCase(SVTK_INT, int, code); \ 67 svtkTemplateMacroCase(SVTK_UNSIGNED_INT, unsigned int, code); 69 #define svtkTemplateMacroFP(call) \ 70 svtkTemplateMacroCase(SVTK_DOUBLE, double, call); \ 71 svtkTemplateMacroCase(SVTK_FLOAT, float, call); 74 #if defined(SENSEI_ENABLE_VTK_CORE) 76 #include <vtkSetGet.h> 78 #define vtkCellTemplateMacro(code) \ 79 vtkTemplateMacroCase(VTK_LONG_LONG, long long, code); \ 80 vtkTemplateMacroCase(VTK_UNSIGNED_LONG_LONG, unsigned long long, code); \ 81 vtkTemplateMacroCase(VTK_ID_TYPE, vtkIdType, code); \ 82 vtkTemplateMacroCase(VTK_LONG, long, code); \ 83 vtkTemplateMacroCase(VTK_UNSIGNED_LONG, unsigned long, code); \ 84 vtkTemplateMacroCase(VTK_INT, int, code); \ 85 vtkTemplateMacroCase(VTK_UNSIGNED_INT, unsigned int, code); 87 #define vtkTemplateMacroFP(call) \ 88 vtkTemplateMacroCase(VTK_DOUBLE, double, call); \ 89 vtkTemplateMacroCase(VTK_FLOAT, float, call); 93 using svtkCompositeDataSetPtr = svtkSmartPointer<svtkCompositeDataSet>;
107 template <
typename SVTK_TT>
110 using AOS_ARRAY_TT = svtkAOSDataArrayTemplate<SVTK_TT>;
111 using SOA_ARRAY_TT = svtkSOADataArrayTemplate<SVTK_TT>;
113 AOS_ARRAY_TT *aosDa =
nullptr;
114 SOA_ARRAY_TT *soaDa =
nullptr;
116 if ((aosDa = dynamic_cast<AOS_ARRAY_TT*>(da)))
118 return aosDa->GetPointer(0);
120 else if ((soaDa = dynamic_cast<SOA_ARRAY_TT*>(da)))
122 return soaDa->GetPointer(0);
125 SENSEI_ERROR(
"Invalid svtkDataArray " 126 << (da ? da->GetClassName() :
"nullptr"))
132 unsigned int Size(
int svtkt);
156 svtkFieldData *
GetAttributes(svtkDataSet *dobj,
int association);
167 int Apply(svtkDataObject *input, svtkDataObject *output,
184 int nGhostCellLayers,
int nGhostNodeLayers);
191 int &nGhostCellLayers,
int &nGhostNodeLayers);
197 int GetMetadata(MPI_Comm comm, svtkDataSet *ds, MeshMetadataPtr);
199 int GetMetadata(MPI_Comm comm, svtkCompositeDataSet *cd, MeshMetadataPtr);
208 svtkDataObject *dobj,
bool take =
true);
211 inline bool AMR(
const MeshMetadataPtr &md)
213 return (md->MeshType == SVTK_OVERLAPPING_AMR) ||
214 (md->MeshType == SVTK_NON_OVERLAPPING_AMR);
220 return (md->BlockType == SVTK_STRUCTURED_GRID) ||
221 (md->MeshType == SVTK_STRUCTURED_GRID);
227 return (md->BlockType == SVTK_POLY_DATA) || (md->MeshType == SVTK_POLY_DATA);
233 return (md->BlockType == SVTK_UNSTRUCTURED_GRID) ||
234 (md->MeshType == SVTK_UNSTRUCTURED_GRID);
240 return (md->BlockType == SVTK_RECTILINEAR_GRID) ||
241 (md->MeshType == SVTK_RECTILINEAR_GRID);
247 return (md->BlockType == SVTK_IMAGE_DATA) || (md->MeshType == SVTK_IMAGE_DATA)
248 || (md->BlockType == SVTK_UNIFORM_GRID) || (md->MeshType == SVTK_UNIFORM_GRID);
259 int WriteDomainDecomp(MPI_Comm comm,
const sensei::MeshMetadataPtr &md,
260 const std::string fileName);
282 int WriteVTK(
const char *fn,
long npx,
long npy,
long npz,
283 double x0,
double y0,
double z0,
double dx,
double dy,
double dz,
284 const std::vector<svtkDataArray*> &cellData,
285 const std::vector<svtkDataArray*> &pointData);
292 template <
typename SVTK_TT,
typename ARRAY_TT = svtkAOSDataArrayTemplate<SVTK_TT>>
293 void PackCells(ARRAY_TT *coIn, ARRAY_TT *ccIn, ARRAY_TT *coOut, ARRAY_TT *ccOut,
294 size_t &coId,
size_t &ccId)
297 size_t nOffs = coIn->GetNumberOfTuples();
298 const SVTK_TT *pSrc = coIn->GetPointer(0);
299 SVTK_TT *pDest = coOut->GetPointer(0);
301 for (
size_t i = 0; i < nOffs; ++i)
302 pDest[coId + i] = pSrc[i];
308 size_t nConn = ccIn->GetNumberOfTuples();
309 pSrc = ccIn->GetPointer(0);
310 pDest = ccOut->GetPointer(0);
312 for (
size_t i = 0; i < nConn; ++i)
313 pDest[ccId + i] = pSrc[i];
320 template <
typename SVTK_TT,
typename ARRAY_TT = svtkAOSDataArrayTemplate<SVTK_TT>>
322 svtkCellArray *caOut,
size_t &coId,
size_t &ccId)
327 SVTK_TT *pCoIn = coIn->GetPointer(0);
329 ARRAY_TT *coOut = ARRAY_TT::New();
331 coOut->SetNumberOfTuples(nCo);
332 SVTK_TT *pCoOut = coOut->GetPointer(0);
334 for (
size_t i = 0; i < nCo; ++i)
335 pCoOut[i] = pCoIn[coId + i];
340 size_t nCc = nc ? pCoOut[nCo - 1] : 0;
342 ARRAY_TT *ccOut = ARRAY_TT::New();
345 SVTK_TT *pCcIn = ccIn->GetPointer(0);
347 ccOut->SetNumberOfTuples(nCc);
348 SVTK_TT *pCcOut = ccOut->GetPointer(0);
350 for (
size_t i = 0; i < nCc; ++i)
351 pCcOut[i] = pCcIn[ccId + i];
357 caOut->SetData(coOut, ccOut);
381 static vtkTypeInt64Array *
New(svtkTypeInt64Array *daIn);
384 static vtkTypeInt32Array *
New(svtkTypeInt32Array *daIn);
394 static vtkDataObject *
New(svtkDataObject *objIn);
397 static vtkDataSet *
New(svtkDataSet *dsIn);
400 static vtkCellArray *
New(svtkCellArray *caIn);
403 static vtkFieldData *
New(svtkFieldData *fdIn);
406 static vtkPointData *
New(svtkPointData *fdIn);
409 static vtkCellData *
New(svtkCellData *fdIn);
412 static vtkPoints *
New(svtkPoints *ptsIn);
415 static vtkImageData *
New(svtkImageData *idIn);
418 static vtkUniformGrid *
New(svtkUniformGrid *idIn);
421 static vtkRectilinearGrid *
New(svtkRectilinearGrid *rgIn);
424 static vtkStructuredGrid *
New(svtkStructuredGrid *sgIn);
427 static vtkPolyData *
New(svtkPolyData *pdIn);
430 static vtkUnstructuredGrid *
New(svtkUnstructuredGrid *ugIn);
433 static vtkMultiBlockDataSet *
New(svtkMultiBlockDataSet *mbIn);
436 static vtkOverlappingAMR *
New(svtkOverlappingAMR *amrIn);
459 static svtkTypeInt64Array *
New(vtkTypeInt64Array *daIn);
462 static svtkTypeInt32Array *
New(vtkTypeInt32Array *daIn);
472 static svtkDataObject *
New(vtkDataObject *objIn);
475 static svtkDataSet *
New(vtkDataSet *dsIn);
478 static svtkCellArray *
New(vtkCellArray *caIn);
481 static svtkFieldData *
New(vtkFieldData *fdIn);
484 static svtkPointData *
New(vtkPointData *fdIn);
487 static svtkCellData *
New(vtkCellData *fdIn);
490 static svtkPoints *
New(vtkPoints *ptsIn);
493 static svtkImageData *
New(vtkImageData *idIn);
496 static svtkUniformGrid *
New(vtkUniformGrid *idIn);
499 static svtkRectilinearGrid *
New(vtkRectilinearGrid *rgIn);
502 static svtkStructuredGrid *
New(vtkStructuredGrid *sgIn);
505 static svtkPolyData *
New(vtkPolyData *pdIn);
508 static svtkUnstructuredGrid *
New(vtkUnstructuredGrid *ugIn);
511 static svtkMultiBlockDataSet *
New(vtkMultiBlockDataSet *mbIn);
514 static svtkOverlappingAMR *
New(vtkOverlappingAMR *amrIn);
SENSEI_EXPORT const char * GetAttributesName(int association)
returns the name of the association, point, cell or field
bool Structured(const MeshMetadataPtr &md)
Return true if the mesh or block type is logically Cartesian.
Definition: SVTKUtils.h:218
SENSEI_EXPORT int GetGhostLayerMetadata(svtkDataObject *mesh, int &nGhostCellLayers, int &nGhostNodeLayers)
Retreive ghost layer metadata from the mesh.
bool StretchedCartesian(const MeshMetadataPtr &md)
Return true if the mesh or block type is stretched Cartesian.
Definition: SVTKUtils.h:238
bool AMR(const MeshMetadataPtr &md)
Return true if the mesh or block type is AMR.
Definition: SVTKUtils.h:211
static vtkDataArray * New(svtkDataArray *daIn)
Construct a new VTK vtkDataArray from the passsed SVTK svtkDataArray.
SENSEI_EXPORT unsigned int Size(int svtkt)
given a SVTK type enum returns the sizeof that type
Constructs VTK objects from SVTK objects enabling the use of VTK filters and ParaView Catalyst on SVT...
Definition: SVTKUtils.h:368
bool UniformCartesian(const MeshMetadataPtr &md)
Return true if the mesh or block type is uniform Cartesian.
Definition: SVTKUtils.h:245
SENSEI_EXPORT svtkCompositeDataSetPtr AsCompositeData(MPI_Comm comm, svtkDataObject *dobj, bool take=true)
Given a data object ensure that it is a composite data set If it already is, then the call is a no-op...
SENSEI_EXPORT int WriteVTK(const char *fn, long npx, long npy, long npz, double x0, double y0, double z0, double dx, double dy, double dz, const std::vector< svtkDataArray *> &cellData, const std::vector< svtkDataArray *> &pointData)
Write an svtkImageData data set to disk in a VTK compatible binary format.
void PackCells(ARRAY_TT *coIn, ARRAY_TT *ccIn, ARRAY_TT *coOut, ARRAY_TT *ccOut, size_t &coId, size_t &ccId)
Packs data from a cell array into another cell array keeping track of where to insert into the output...
Definition: SVTKUtils.h:293
void UnpackCells(size_t nc, ARRAY_TT *coIn, ARRAY_TT *ccIn, svtkCellArray *caOut, size_t &coId, size_t &ccId)
deserializes a buffer made by SVTKUtils::PackCells.
Definition: SVTKUtils.h:321
SENSEI_EXPORT svtkFieldData * GetAttributes(svtkDataSet *dobj, int association)
returns the container for the associations: svtkPointData, svtkCellData, or svtkFieldData ...
bool Unstructured(const MeshMetadataPtr &md)
Return true if the mesh or block type is unstructured.
Definition: SVTKUtils.h:231
Constructs SVTK objects from VTK objects enabling the consumption of the output of VTK filters and Pa...
Definition: SVTKUtils.h:446
SENSEI.
Definition: ADIOS2AnalysisAdaptor.h:27
SENSEI_EXPORT int IsLegacyDataObject(int code)
given a SVTK data object enum returns true if it a legacy object
SENSEI_EXPORT int Apply(svtkDataObject *input, svtkDataObject *output, BinaryDatasetFunction &func)
Applies the function to leaves of the structurally equivalent input and output data objects...
bool Polydata(const MeshMetadataPtr &md)
Return true if the mesh or block type is polydata.
Definition: SVTKUtils.h:225
std::function< int(svtkDataSet *, svtkDataSet *)> BinaryDatasetFunction
A callback that processes input and output datasets.
Definition: SVTKUtils.h:161
std::function< int(svtkDataSet *)> DatasetFunction
A callback that processes input and output datasets return 0 for success, > zero to stop without erro...
Definition: SVTKUtils.h:173
SENSEI_EXPORT svtkDataObject * NewDataObject(int code)
givne a SVTK data object enum constructs an instance
SENSEI_EXPORT int SetGhostLayerMetadata(svtkDataObject *mesh, int nGhostCellLayers, int nGhostNodeLayers)
Store ghost layer metadata in the mesh.
bool LogicallyCartesian(const MeshMetadataPtr &md)
Return true if the mesh or block type is logically Cartesian.
Definition: SVTKUtils.h:252
SENSEI_EXPORT int GetAssociation(std::string assocStr, int &assoc)
returns the enum value given an association name.
SVTK_TT * GetPointer(svtkDataArray *da)
given a svtkDataArray get a pointer to underlying data this handles access from SVTK's AOS and SOA la...
Definition: SVTKUtils.h:108