22 #ifndef __pointFieldToVTK_hpp__
23 #define __pointFieldToVTK_hpp__
34 template<
typename IntType,
typename IncludeMaskType>
38 int32 numActivePoints,
42 template<
typename IncludeMaskType>
46 int32 numActivePoints,
50 template<
typename IncludeMaskType>
54 int32 numActivePoints,
60 std::regex match(
"pointField\\<([A-Za-z1-9_]*)\\,([A-Za-z1-9_]*)\\>");
61 std::smatch search1, search2;
62 if(!std::regex_match(fieldType, search1, match))
return false;
63 if(!std::regex_match(TYPENAME, search2, match))
return false;
64 if(search1.size()!=3)
return false;
65 if(search1.size()!=search2.size())
return false;
66 return search1[1] == search2[1];
69 template<
typename Type>
92 if(!checkFieldType<T>(objectType))
97 auto objField = IOobject::make<PointFieldType>
104 auto&
Field = objField().template getObject<PointFieldType>();
106 T* data =
Field.deviceVectorAll().data();
126 if(!checkFieldType<real>(objectType))
return false;
128 auto objField = IOobject::make<realPointField_H>
137 real* data =
Field.hostVectorAll().data();
156 if(!checkFieldType<realx3>(objectType))
return false;
158 auto objField = IOobject::make<realx3PointField_H>
180 template<
typename IncludeMaskType>
183 int32 numActivePoints,
190 os<<
"DATASET UNSTRUCTURED_GRID\n";
191 os<<
"POINTS "<< numActivePoints <<
" float\n";
193 if(numActivePoints==0)
return true;
195 for(
int32 i=iFirst; i<iLast; ++i)
198 os<< position[i].
x()<<
' '<< position[i].
y()<<
' '<<position[i].
z()<<
'\n';
201 os<<
"CELLS "<< numActivePoints<<
' '<< 2*numActivePoints<<
'\n';
202 for(
int32 i=0; i<numActivePoints; i++)
204 os<< 1 <<
' '<< i<<
'\n';
207 os<<
"CELL_TYPES "<< numActivePoints<<
'\n';
209 for(
int32 i=0; i<numActivePoints; i++)
214 os <<
"POINT_DATA " << numActivePoints <<
endl;
220 template<
typename IntType,
typename IncludeMaskType>
224 int32 numActivePoints,
228 if(numActivePoints==0)
return true;
232 os <<
"FIELD FieldData 1\n"<<
233 fieldName <<
" 1 " << numActivePoints <<
" int\n";
234 for(
int32 i=iFirst; i<iLast; ++i)
237 os<< field[i] <<
'\n';
243 template<
typename IncludeMaskType>
247 int32 numActivePoints,
251 if(numActivePoints==0)
return true;
255 os <<
"FIELD FieldData 1\n"<<
256 fieldName <<
" 1 " << numActivePoints <<
" float\n";
257 for(
int32 i=iFirst; i<iLast; ++i)
260 os<< field[i] <<
'\n';
265 template<
typename IncludeMaskType>
269 int32 numActivePoints,
273 if(numActivePoints==0)
return true;
277 os <<
"FIELD FieldData 1\n"<<
278 fieldName <<
" 3 " << numActivePoints <<
" float\n";
279 for(
int32 i=iFirst; i<iLast; ++i)
282 os<< field[i].
x()<<
' '<< field[i].
y()<<
' '<<field[i].
z()<<
'\n';
308 " does not contain any pStructure data file. Skipping this folder . . ."
313 vtkFile vtk(destPath, bName, time);
315 if(!vtk)
return false;
317 auto pStructObjPtr = IOobject::make<pointStructure>(pStructHeader);
323 auto* pos = posVec.data();
336 for(
auto& file:fileList)
347 convertIntPointField<int32>(vtk(), fieldHeader,
pStruct);
348 convertIntPointField<int64>(vtk(), fieldHeader,
pStruct);
349 convertIntPointField<int8>(vtk(), fieldHeader,
pStruct);
381 " does not contain any pStructure data file. Skipping this folder . . ."
386 vtkFile vtk(destPath, bName, time);
388 if(!vtk)
return false;
390 auto pStructObjPtr = IOobject::make<pointStructure>(pStructHeader);
396 auto* pos = posVec.data();
409 for(
auto& fname:fieldsName)
422 convertIntPointField<int32>(vtk(), fieldHeader,
pStruct);
423 convertIntPointField<int64>(vtk(), fieldHeader,
pStruct);
424 convertIntPointField<int8>(vtk(), fieldHeader,
pStruct);
433 " does not exist."<<
endl;