29 #ifndef vtkPVFoamPointFields_H
30 #define vtkPVFoamPointFields_H
33 #include "vtkPVFoamReader.h"
43 #include "vtkFloatArray.h"
44 #include "vtkUnstructuredGrid.h"
49 void Foam::vtkPVFoam::convertPointFields
52 vtkMultiBlockDataSet* output
55 const polyBoundaryMesh&
patches =
56 procMeshesPtr_->completeMesh().poly().boundary();
67 tmp<PointField<Type>> tptf;
73 if (reader_->GetDecomposedCase())
75 if (!pointReconstructorPtr_.valid())
77 pointReconstructorPtr_.set
79 new pointFieldReconstructor
82 procMeshesPtr_->procMeshes(),
83 procMeshesPtr_->procPointAddressing()
89 pointReconstructorPtr_
90 ->reconstructField<Type>(*iter());
110 const PointField<Type>& ptf = tptf();
113 convertPointFieldBlock
122 convertPointFieldBlock
126 arrayRangeCellZones_,
131 convertPointFieldBlock
142 int partId = arrayRangePatches_.start();
143 partId < arrayRangePatches_.end();
147 const word patchName = getPartName(partId);
148 const label datasetNo = partDataset_[partId];
151 if (!partStatus_[partId] || datasetNo < 0 ||
patchId < 0)
156 convertPatchPointField
159 ptf.boundaryField()[
patchId].patchInternalField()(),
169 int partId = arrayRangeFaceZones_.start();
170 partId < arrayRangeFaceZones_.end();
174 const word zoneName = getPartName(partId);
175 const label datasetNo = partDataset_[partId];
177 ptf.mesh().mesh().faceZones().findIndex(zoneName);
179 if (!partStatus_[partId] || datasetNo < 0 || zoneId < 0)
187 ptf.primitiveField(),
188 ptf.mesh().mesh().faceZones()[zoneId].patch().meshPoints()
191 convertPatchPointField
196 arrayRangeFaceZones_,
205 void Foam::vtkPVFoam::convertPointFieldBlock
207 const PointField<Type>& ptf,
208 vtkMultiBlockDataSet* output,
209 const arrayRange&
range,
213 for (
int partId =
range.start(); partId <
range.end(); ++partId)
215 const label datasetNo = partDataset_[partId];
217 if (datasetNo >= 0 && partStatus_[partId])
234 void Foam::vtkPVFoam::convertPointField
236 const PointField<Type>& ptf,
237 const VolField<Type>&
tf,
238 vtkMultiBlockDataSet* output,
239 const arrayRange&
range,
240 const label datasetNo,
241 const polyDecomp& decomp
244 const label nComp = pTraits<Type>::nComponents;
245 const labelList& addPointCellLabels = decomp.addPointCellLabels();
246 const labelList& pointMap = decomp.pointMap();
260 pointData->SetNumberOfTuples(
nPoints + addPointCellLabels.size());
261 pointData->SetNumberOfComponents(nComp);
262 pointData->Allocate(nComp*(
nPoints + addPointCellLabels.size()));
268 pointData->SetName(
tf.name().c_str());
272 pointData->SetName(ptf.name().c_str());
276 <<
"Converting Point field: " <<
tf.name()
277 <<
" size=" <<
nPoints <<
" (" <<
nPoints + addPointCellLabels.size()
278 <<
"), nComp=" << nComp <<
endl;
286 const Type& t = ptf[pointMap[i]];
291 vtkOpenFOAMTupleRemap<Type>(vec);
293 pointData->InsertTuple(i, vec);
300 const Type& t = ptf[i];
305 vtkOpenFOAMTupleRemap<Type>(vec);
307 pointData->InsertTuple(i, vec);
316 forAll(addPointCellLabels, apI)
318 const Type& t =
tf[addPointCellLabels[apI]];
323 vtkOpenFOAMTupleRemap<Type>(vec);
325 pointData->InsertTuple(i++, vec);
330 forAll(addPointCellLabels, apI)
337 vtkOpenFOAMTupleRemap<Type>(vec);
339 pointData->InsertTuple(i++, vec);
343 vtkUnstructuredGrid::SafeDownCast
345 GetDataSetFromBlock(output,
range, datasetNo)
347 ->AddArray(pointData);
#define forAll(list, i)
Loop across all elements in list.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object of type.
static pointMesh & New(const word &name, const polyMesh &mesh)
Construct and return the named DemandDrivenMeshObject.
static const GeometricField< Type, GeoMesh, PrimitiveField > & null()
Return a null geometric field.
void dontThrowExceptions()
Motion of the mesh specified as a list of pointMeshMovers.
gmvFile<< "tracers "<< particles.size()<< nl;{ pointField positions(particles.size());label particlei=0;forAllConstIter(lagrangian::Cloud< passiveParticle >, particles, iter) { positions[particlei++]=iter().position(mesh);} for(i=0;i< pTraits< point >::nComponents;i++) { forAll(positions, particlei) { gmvFile<< component(positions[particlei], i)<< ' ';} gmvFile<< nl;}}forAll(lagrangianScalarNames, i){ const word &name=lagrangianScalarNames[i];IOField< scalar > fld(IOobject(name, runTime.name(), lagrangian::cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Interpolates (averages) the vertex values to the cell center.
const fvPatchList & patches
#define DebugInFunction
Report an information message using Foam::Info.
List< label > labelList
A List of labels.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
String typeName(const std::type_info &info)
Return the un-mangled name given the standard type info.
void component(GeometricField< typename GeometricField< Type, GeoMesh, PrimitiveField1 >::cmptType, GeoMesh, PrimitiveField1 > &gcf, const GeometricField< Type, GeoMesh, PrimitiveField2 > &gf, const direction d)
Type interpolatePointToCell(const PointField< Type > &ptf, const label celli)
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)