29 #ifndef vtkCGNSReaderInternal_h 30 #define vtkCGNSReaderInternal_h 41 #include "vtkIdTypeArray.h" 42 #include "vtkPoints.h" 44 #include "vtkMultiProcessController.h" 54 static const bool value =
false;
66 static const bool value =
false;
84 vtkCGNSArraySelection::const_iterator iter = other.begin();
85 for (; iter != other.end(); ++iter)
87 (*this)[iter->first] = iter->second;
91 void AddArray(
const char* name,
bool status =
true) { (*this)[name] = status; }
95 vtkCGNSArraySelection::iterator iter = this->find(name);
96 if (iter != this->end())
107 vtkCGNSArraySelection::iterator iter = this->find(name);
108 return (iter != this->end());
113 void SetArrayStatus(
const char* name,
bool status) { this->AddArray(name, status); }
118 for (vtkCGNSArraySelection::iterator iter = this->begin(); iter != this->end(); ++iter)
123 return iter->first.c_str();
140 CGNS_ENUMT(DataType_t) dt;
149 CGNS_ENUMT(DataType_t) dt;
220 std::vector<CGNSRead::FamilyInformation>
family;
238 bool Parse(
const char* cgnsFileName);
253 std::vector<double>&
GetTimes() {
return this->GlobalTime; }
258 void PrintSelf(std::ostream& os);
260 void Broadcast(vtkMultiProcessController* controller,
int rank);
274 std::vector<CGNSRead::BaseInformation> baseList;
275 std::string LastReadFilename;
277 std::vector<double> GlobalTime;
287 return (strcmp(varOne->
name, varTwo->
name));
292 inline bool compareName(
const char_33 nameOne,
const char_33 nameTwo)
294 return (strncmp(nameOne, nameTwo, 32) == 0);
300 std::vector<CGNSVector>& vectorList,
const char_33 name)
302 for (std::vector<CGNSVector>::iterator iter = vectorList.begin(); iter != vectorList.end();
305 if (strncmp(iter->name, name, 31) == 0)
310 return vectorList.end();
314 inline bool isACGNSVariable(
const std::vector<CGNSVariable>& varList,
const char_33 name)
316 for (std::vector<CGNSVariable>::const_iterator iter = varList.begin(); iter != varList.end();
319 if (strncmp(iter->name, name, 32) == 0)
329 std::vector<CGNSRead::CGNSVector>& vectors,
const int physicalDim);
331 int setUpRind(
const int cgioNum,
const double rindId,
int* rind);
333 int getFirstNodeId(
const int cgioNum,
const double parentId,
const char* label,
double*
id);
336 const cgsize_t* srcStart,
const cgsize_t* srcEnd,
const cgsize_t* srcStride,
337 const cgsize_t* memStart,
const cgsize_t* memEnd,
const cgsize_t* memStride,
338 const cgsize_t* memDim, vtkIdType* localElements);
341 CGNS_ENUMT(ElementType_t) elemType,
bool& higherOrderWarning,
bool& cgnsOrderFlag);
343 void CGNS2VTKorder(
const vtkIdType size,
const int* cells_types, vtkIdType* elements);
347 template <
typename T,
typename Y>
348 int get_XYZ_mesh(
const int cgioNum,
const std::vector<double>& gridChildId,
349 const std::size_t& nCoordsArray,
const int cellDim,
const vtkIdType nPts,
350 const cgsize_t* srcStart,
const cgsize_t* srcEnd,
const cgsize_t* srcStride,
351 const cgsize_t* memStart,
const cgsize_t* memEnd,
const cgsize_t* memStride,
352 const cgsize_t* memDims, vtkPoints* points)
354 T* coords =
static_cast<T*
>(points->GetVoidPointer(0));
355 T* currentCoord =
static_cast<T*
>(&(coords[0]));
359 bool sameType =
true;
362 memset(coords, 0, 3 * nPts *
sizeof(T));
364 for (std::size_t c = 1; c <= nCoordsArray; ++c)
367 if (cgio_get_name(cgioNum, gridChildId[c - 1], coordName) != CG_OK)
370 cgio_error_message(message);
371 std::cerr <<
"get_XYZ_mesh : cgio_get_name :" << message;
376 if (cgio_get_data_type(cgioNum, gridChildId[c - 1], dataType))
381 if (strcmp(dataType,
"R8") == 0)
384 sameType = doubleType;
386 else if (strcmp(dataType,
"R4") == 0)
389 sameType = floatType;
393 std::cerr <<
"Invalid datatype for GridCoordinates\n";
398 len = strlen(coordName) - 1;
399 switch (coordName[len])
402 currentCoord =
static_cast<T*
>(&(coords[0]));
405 currentCoord =
static_cast<T*
>(&(coords[1]));
408 currentCoord =
static_cast<T*
>(&(coords[2]));
412 coordId = gridChildId[c - 1];
415 if (sameType ==
true)
417 if (cgio_read_data(cgioNum, coordId, srcStart, srcEnd, srcStride, cellDim, memEnd, memStart,
418 memEnd, memStride, (
void*)currentCoord))
421 cgio_error_message(message);
422 std::cerr <<
"cgio_read_data :" << message;
428 const cgsize_t memNoStride[3] = { 1, 1, 1 };
431 dataArray =
new Y[nPts];
434 std::cerr <<
"Error allocating buffer array\n";
437 if (cgio_read_data(cgioNum, coordId, srcStart, srcEnd, srcStride, cellDim, memDims, memStart,
438 memDims, memNoStride, (
void*)dataArray))
442 cgio_error_message(message);
443 std::cerr <<
"Buffer array cgio_read_data :" << message;
446 for (vtkIdType ii = 0; ii < nPts; ++ii)
448 currentCoord[memStride[0] * ii] =
static_cast<T
>(dataArray[ii]);
457 #endif // vtkCGNSReaderInternal_h
void SetArrayStatus(const char *name, bool status)
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)
void Merge(const vtkCGNSArraySelection &other)
int GetVTKElemType(CGNS_ENUMT(ElementType_t) elemType, bool &higherOrderWarning, bool &cgnsOrderFlag)
int getFirstNodeId(const int cgioNum, const double parentId, const char *label, double *id)
const char * GetArrayName(int index)
bool HasArray(const char *name)
static int sortVariablesByName(const void *vOne, const void *vTwo)
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)
std::vector< CGNSVector >::iterator getVectorFromName(std::vector< CGNSVector > &vectorList, const char_33 name)
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)
bool ArrayIsEnabled(const char *name)