26 #ifndef vtkCGNSReaderInternal_h
27 #define vtkCGNSReaderInternal_h
44 #include VTK_CGNS(cgnslib.h)
45 #include VTK_CGNS(cgns_io.h)
56 static const bool value =
false;
68 static const bool value =
false;
119 vtkCGNSArraySelection::const_iterator iter = other.begin();
120 for (; iter != other.end(); ++iter)
122 (*this)[iter->first] = iter->second;
130 vtkCGNSArraySelection::iterator iter = this->find(name);
131 if (iter != this->end())
142 vtkCGNSArraySelection::iterator iter = this->find(name);
143 return (iter != this->end());
153 for (vtkCGNSArraySelection::iterator iter = this->begin(); iter != this->end(); ++iter)
158 return iter->first.c_str();
175 CGNS_ENUMT(DataType_t) dt;
184 CGNS_ENUMT(DataType_t) dt;
213 this->name[0] =
'\0';
223 std::vector<CGNSRead::ZoneBCInformation>
bcs;
227 this->name[0] =
'\0';
275 std::vector<CGNSRead::FamilyInformation>
family;
278 std::vector<CGNSRead::ZoneInformation>
zones;
311 bool Parse(
const char* cgnsFileName);
326 std::vector<double>&
GetTimes() {
return this->GlobalTime; }
347 std::vector<CGNSRead::BaseInformation> baseList;
350 std::vector<double> GlobalTime;
355 inline bool compareName(
const char_33 nameOne,
const char_33 nameTwo)
357 return (strncmp(nameOne, nameTwo, 32) == 0);
364 char* end = name + strlen(name) - 1;
365 while (end >= name && isspace(*end))
370 assert(end >= name && end < name + 33);
377 std::vector<CGNSVector>& vectorList,
const char_33 name)
379 for (std::vector<CGNSVector>::iterator iter = vectorList.begin(); iter != vectorList.end();
382 if (strncmp(iter->name, name, 31) == 0)
387 return vectorList.end();
391 inline bool isACGNSVariable(
const std::vector<CGNSVariable>& varList,
const char_33 name)
393 for (std::vector<CGNSVariable>::const_iterator iter = varList.begin(); iter != varList.end();
396 if (strncmp(iter->name, name, 32) == 0)
406 std::vector<CGNSRead::CGNSVector>& vectors,
const int physicalDim);
408 int setUpRind(
const int cgioNum,
const double rindId,
int* rind);
415 const int cgioNum,
const double parentId,
const char* label,
double*
id,
const char* name = NULL);
418 const cgsize_t* srcStart,
const cgsize_t* srcEnd,
const cgsize_t* srcStride,
419 const cgsize_t* memStart,
const cgsize_t* memEnd,
const cgsize_t* memStride,
420 const cgsize_t* memDim,
vtkIdType* localElements);
423 const cgsize_t* srcStart,
const cgsize_t* srcEnd,
const cgsize_t* srcStride,
424 const cgsize_t* memStart,
const cgsize_t* memEnd,
const cgsize_t* memStride,
425 const cgsize_t* memDim,
vtkIdType* localElementsIdx);
428 CGNS_ENUMT(ElementType_t) elemType,
bool& higherOrderWarning,
bool& cgnsOrderFlag);
434 template <
typename T,
typename Y>
435 int get_XYZ_mesh(
const int cgioNum,
const std::vector<double>& gridChildId,
436 const std::size_t& nCoordsArray,
const int cellDim,
const vtkIdType nPts,
437 const cgsize_t* srcStart,
const cgsize_t* srcEnd,
const cgsize_t* srcStride,
438 const cgsize_t* memStart,
const cgsize_t* memEnd,
const cgsize_t* memStride,
442 T* currentCoord =
static_cast<T*
>(&(coords[0]));
446 bool sameType =
true;
449 memset(coords, 0, 3 * nPts *
sizeof(T));
451 for (std::size_t c = 1; c <= nCoordsArray; ++c)
454 if (cgio_get_name(cgioNum, gridChildId[c - 1], coordName) != CG_OK)
457 cgio_error_message(message);
458 std::cerr <<
"get_XYZ_mesh : cgio_get_name :" << message;
463 if (cgio_get_data_type(cgioNum, gridChildId[c - 1], dataType))
468 if (strcmp(dataType,
"R8") == 0)
471 sameType = doubleType;
473 else if (strcmp(dataType,
"R4") == 0)
476 sameType = floatType;
480 std::cerr <<
"Invalid datatype for GridCoordinates\n";
485 len = strlen(coordName) - 1;
486 switch (coordName[len])
489 currentCoord =
static_cast<T*
>(&(coords[0]));
492 currentCoord =
static_cast<T*
>(&(coords[1]));
495 currentCoord =
static_cast<T*
>(&(coords[2]));
499 coordId = gridChildId[c - 1];
502 if (sameType ==
true)
504 constexpr
const char* dtNameT = detail::cgns_type_name<T>();
505 if (cgio_read_data_type(cgioNum, coordId, srcStart, srcEnd, srcStride, dtNameT, cellDim,
506 memEnd, memStart, memEnd, memStride, (
void*)currentCoord))
509 cgio_error_message(message);
510 std::cerr <<
"cgio_read_data_type :" << message;
515 constexpr
const char* dtNameY = detail::cgns_type_name<Y>();
517 const cgsize_t memNoStride[3] = { 1, 1, 1 };
520 dataArray =
new Y[nPts];
523 std::cerr <<
"Error allocating buffer array\n";
526 if (cgio_read_data_type(cgioNum, coordId, srcStart, srcEnd, srcStride, dtNameY, cellDim,
527 memDims, memStart, memDims, memNoStride, (
void*)dataArray))
531 cgio_error_message(message);
532 std::cerr <<
"Buffer array cgio_read_data_type :" << message;
537 currentCoord[memStride[0] * ii] =
static_cast<T
>(dataArray[ii]);
546 #endif // vtkCGNSReaderInternal_h
bool ReadBase(vtkCGNSReader *reader, const BaseInformation &baseInfo)
Helpers to encapsulate all logic to read various nodes (zones, bc patches etc.).
void SetArrayStatus(const char *name, bool status)
constexpr const char * cgns_type_name< vtkTypeInt32 >() noexcept
void fillVectorsFromVars(std::vector< CGNSRead::CGNSVariable > &vars, std::vector< CGNSRead::CGNSVector > &vectors, const int physicalDim)
void CGNS2VTKorder(const vtkIdType size, const int *cells_types, vtkIdType *elements)
int get_XYZ_mesh(const int cgioNum, const std::vector< double > &gridChildId, const std::size_t &nCoordsArray, const int cellDim, const vtkIdType nPts, const cgsize_t *srcStart, const cgsize_t *srcEnd, const cgsize_t *srcStride, const cgsize_t *memStart, const cgsize_t *memEnd, const cgsize_t *memStride, const cgsize_t *memDims, vtkPoints *points)
bool isACGNSVariable(const std::vector< CGNSVariable > &varList, const char_33 name)
constexpr const char * cgns_type_name< float >() noexcept
void removeTrailingWhiteSpaces(char_33 name)
void Merge(const vtkCGNSArraySelection &other)
int GetVTKElemType(CGNS_ENUMT(ElementType_t) elemType, bool &higherOrderWarning, bool &cgnsOrderFlag)
constexpr const char * cgns_type_name() noexcept
int getFirstNodeId(const int cgioNum, const double parentId, const char *label, double *id, const char *name=NULL)
Find the first node with the given label.
bool ReadPatch(vtkCGNSReader *reader, const BaseInformation &, const ZoneInformation &zoneInfo, const std::string &patchFamilyname)
Helpers to encapsulate all logic to read various nodes (zones, bc patches etc.).
const char * GetArrayName(int index)
bool HasArray(const char *name)
constexpr const char * cgns_type_name< double >() noexcept
void * GetVoidPointer(const int id)
Return a void pointer.
vtkCGNSReader creates a multi-block dataset and reads unstructured grids and structured meshes from b...
void AddArray(const char *name, bool status=true)
int get_section_connectivity(const int cgioNum, const double cgioSectionId, const int dim, const cgsize_t *srcStart, const cgsize_t *srcEnd, const cgsize_t *srcStride, const cgsize_t *memStart, const cgsize_t *memEnd, const cgsize_t *memStride, const cgsize_t *memDim, vtkIdType *localElements)
int setUpRind(const int cgioNum, const double rindId, int *rind)
int get_section_start_offset(const int cgioNum, const double cgioSectionId, const int dim, const cgsize_t *srcStart, const cgsize_t *srcEnd, const cgsize_t *srcStride, const cgsize_t *memStart, const cgsize_t *memEnd, const cgsize_t *memStride, const cgsize_t *memDim, vtkIdType *localElementsIdx)
std::vector< CGNSVector >::iterator getVectorFromName(std::vector< CGNSVector > &vectorList, const char_33 name)
bool ReadGridForZone(vtkCGNSReader *reader, const BaseInformation &baseInfo, const ZoneInformation &zoneInfo)
Helpers to encapsulate all logic to read various nodes (zones, bc patches etc.).
void CGNS2VTKorderMonoElem(const vtkIdType size, const int cell_type, vtkIdType *elements)
int GetArraySetting(const char *name)
bool compareName(const char_33 nameOne, const char_33 nameTwo)
constexpr const char * cgns_type_name< vtkTypeInt64 >() noexcept
represent and manipulate 3D points
bool ArrayIsEnabled(const char *name)
Multiprocessing communication superclass.
bool ReadPatchesForBase(vtkCGNSReader *reader, const BaseInformation &)
Helpers to encapsulate all logic to read various nodes (zones, bc patches etc.).