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().boundaryMesh();
61 if (iter()->headerClassName() != PointField<Type>::typeName)
67 tmp<PointField<Type>> tptf;
68 if (reader_->GetDecomposedCase())
70 if (!pointReconstructorPtr_.valid())
72 pointReconstructorPtr_.set
74 new pointFieldReconstructor
77 procMeshesPtr_->procMeshes(),
78 procMeshesPtr_->procPointAddressing()
84 pointReconstructorPtr_
85 ->reconstructField<Type>(*iter());
96 const PointField<Type>& ptf = tptf();
99 convertPointFieldBlock
108 convertPointFieldBlock
112 arrayRangeCellZones_,
117 convertPointFieldBlock
128 int partId = arrayRangePatches_.start();
129 partId < arrayRangePatches_.end();
133 const word patchName = getPartName(partId);
134 const label datasetNo = partDataset_[partId];
137 if (!partStatus_[partId] || datasetNo < 0 ||
patchId < 0)
142 convertPatchPointField
145 ptf.boundaryField()[
patchId].patchInternalField()(),
155 int partId = arrayRangeFaceZones_.start();
156 partId < arrayRangeFaceZones_.end();
160 const word zoneName = getPartName(partId);
161 const label datasetNo = partDataset_[partId];
163 ptf.mesh().mesh().faceZones().findIndex(zoneName);
165 if (!partStatus_[partId] || datasetNo < 0 || zoneId < 0)
173 ptf.primitiveField(),
174 ptf.mesh().mesh().faceZones()[zoneId].patch().meshPoints()
177 convertPatchPointField
182 arrayRangeFaceZones_,
191 void Foam::vtkPVFoam::convertPointFieldBlock
193 const PointField<Type>& ptf,
194 vtkMultiBlockDataSet* output,
195 const arrayRange&
range,
196 const List<polyDecomp>& decompLst
199 for (
int partId =
range.start(); partId <
range.end(); ++partId)
201 const label datasetNo = partDataset_[partId];
203 if (datasetNo >= 0 && partStatus_[partId])
220 void Foam::vtkPVFoam::convertPointField
222 const PointField<Type>& ptf,
223 const VolField<Type>&
tf,
224 vtkMultiBlockDataSet* output,
225 const arrayRange&
range,
226 const label datasetNo,
227 const polyDecomp& decomp
230 const label nComp = pTraits<Type>::nComponents;
231 const labelList& addPointCellLabels = decomp.addPointCellLabels();
232 const labelList& pointMap = decomp.pointMap();
246 pointData->SetNumberOfTuples(
nPoints + addPointCellLabels.size());
247 pointData->SetNumberOfComponents(nComp);
248 pointData->Allocate(nComp*(
nPoints + addPointCellLabels.size()));
254 pointData->SetName(
tf.name().c_str());
258 pointData->SetName(ptf.name().c_str());
262 <<
"Converting Point field: " <<
tf.name()
263 <<
" size=" <<
nPoints <<
" (" <<
nPoints + addPointCellLabels.size()
264 <<
"), nComp=" << nComp <<
endl;
272 const Type& t = ptf[pointMap[i]];
277 vtkOpenFOAMTupleRemap<Type>(vec);
279 pointData->InsertTuple(i, vec);
286 const Type& t = ptf[i];
291 vtkOpenFOAMTupleRemap<Type>(vec);
293 pointData->InsertTuple(i, vec);
302 forAll(addPointCellLabels, apI)
304 const Type& t =
tf[addPointCellLabels[apI]];
309 vtkOpenFOAMTupleRemap<Type>(vec);
311 pointData->InsertTuple(i++, vec);
316 forAll(addPointCellLabels, apI)
323 vtkOpenFOAMTupleRemap<Type>(vec);
325 pointData->InsertTuple(i++, vec);
329 vtkUnstructuredGrid::SafeDownCast
331 GetDataSetFromBlock(output,
range, datasetNo)
333 ->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.
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.
autoPtr< CompressibleMomentumTransportModel > New(const volScalarField &rho, const volVectorField &U, const surfaceScalarField &phi, const viscosity &viscosity)
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.
void component(LagrangianPatchField< typename LagrangianPatchField< Type >::cmptType > &sf, const LagrangianPatchField< Type > &f, const direction d)
Type interpolatePointToCell(const PointField< Type > &ptf, const label celli)