29 #ifndef vtkPVFoamSurfaceField_H
30 #define vtkPVFoamSurfaceField_H
33 #include "vtkPVFoamReader.h"
43 #include "vtkCellData.h"
44 #include "vtkFloatArray.h"
45 #include "vtkMultiBlockDataSet.h"
46 #include "vtkPolyData.h"
51 void Foam::vtkPVFoam::convertSurfaceField
53 const VolField<Type>&
tf,
54 vtkMultiBlockDataSet* output,
55 const arrayRange&
range,
56 const label datasetNo,
61 const label nComp = pTraits<Type>::nComponents;
67 cellData->SetNumberOfTuples(faceLabels.size());
68 cellData->SetNumberOfComponents(nComp);
69 cellData->Allocate(nComp*faceLabels.size());
70 cellData->SetName(
tf.name().c_str());
73 <<
"Converting Surface field: " <<
tf.name()
74 <<
" size=" <<
tf.size() <<
" (" << faceLabels.size()
75 <<
"), nComp=" << nComp <<
endl;
83 const label facei = faceLabels[i];
84 if (facei < nInternalFaces)
86 const Type t = 0.5*(
tf[faceOwner[facei]] +
tf[faceNeigh[facei]]);
98 const fvPatchField<Type>& ptf =
tf.boundaryField()[
patchi];
101 isType<emptyFvPatchField<Type>>(ptf)
102 ?
tf[faceOwner[facei]]
110 vtkOpenFOAMTupleRemap<Type>(vec);
112 cellData->InsertTuple(i, vec);
116 vtkPolyData::SafeDownCast
118 GetDataSetFromBlock(output,
range, datasetNo)
120 ->AddArray(cellData);
127 void Foam::vtkPVFoam::convertSurfaceField
129 const SurfaceField<Type>&
tf,
130 vtkMultiBlockDataSet* output,
131 const arrayRange&
range,
132 const label datasetNo,
137 const label nComp = pTraits<Type>::nComponents;
141 cellData->SetNumberOfTuples(faceLabels.size());
142 cellData->SetNumberOfComponents(nComp);
143 cellData->Allocate(nComp*faceLabels.size());
144 cellData->SetName(
tf.name().c_str());
147 <<
"Converting Surface field: " <<
tf.name()
148 <<
" size=" <<
tf.
size() <<
" (" << faceLabels.size()
149 <<
"), nComp=" << nComp <<
endl;
153 SubField<Type>(flatFld, nInternalFaces) =
tf.internalField();
156 const fvsPatchField<Type>& ptf =
tf.boundaryField()[
patchi];
165 flatFld[facei] +=
fraction*ptf[patchFacei];
171 const label facei = faceLabels[i];
178 vtkOpenFOAMTupleRemap<Type>(vec);
180 cellData->InsertTuple(i, vec);
183 vtkPolyData::SafeDownCast
185 GetDataSetFromBlock(output,
range, datasetNo)
187 ->AddArray(cellData);
194 void Foam::vtkPVFoam::convertSurfaceFields
197 vtkMultiBlockDataSet* output
209 tmp<SurfaceField<Type>> ttf;
215 if (reader_->GetDecomposedCase())
217 if (!fvReconstructorPtr_.valid())
219 fvReconstructorPtr_.set
221 new fvFieldReconstructor
223 procMeshesPtr_->completeMesh(),
224 procMeshesPtr_->procMeshes(),
225 procMeshesPtr_->procFaceAddressing(),
226 procMeshesPtr_->procCellAddressing(),
227 procMeshesPtr_->procFaceAddressingBf()
234 ->reconstructFvSurfaceField<Type>(*iter());
239 new SurfaceField<Type>
242 procMeshesPtr_->completeMesh()
254 const SurfaceField<Type>&
tf = ttf();
255 const fvMesh&
mesh =
tf.mesh()();
260 int partId = arrayRangePatches_.start();
261 partId < arrayRangePatches_.end();
265 const word patchName = getPartName(partId);
266 const label datasetNo = partDataset_[partId];
269 if (!partStatus_[partId] || datasetNo < 0 ||
patchId < 0)
274 const fvsPatchField<Type>& ptf =
tf.boundaryField()[
patchId];
276 if (!
isType<emptyFvsPatchField<Type>>(ptf))
292 int partId = arrayRangeFaceZones_.start();
293 partId < arrayRangeFaceZones_.end();
297 const word zoneName = getPartName(partId);
298 const label datasetNo = partDataset_[partId];
300 if (!partStatus_[partId] || datasetNo < 0)
306 const label zoneId = zMesh.findIndex(zoneName);
317 arrayRangeFaceZones_,
327 int partId = arrayRangeFaceSets_.start();
328 partId < arrayRangeFaceSets_.end();
332 const word selectName = getPartName(partId);
333 const label datasetNo = partDataset_[partId];
335 if (!partStatus_[partId] || datasetNo < 0)
340 const autoPtr<faceSet> fSetPtr =
341 reader_->GetDecomposedCase()
342 ? procMeshesPtr_->reconstructSet<faceSet>(selectName)
343 : autoPtr<faceSet>(
new faceSet(
mesh, selectName));
#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.
const Boundary & boundaryField() const
Return const-reference to the boundary field.
void size(const label)
Override size to be inconsistent with allocated storage.
void dontThrowExceptions()
const GeometricBoundaryField< label, surfaceMesh > & polyFacesBf() const
Return face-poly-face addressing.
const surfaceScalarField & magSf() const
Return cell face area magnitudes.
const polyMesh & poly() const
Return reference to polyMesh.
label findIndex(const word &patchName) const
Find patch index given a name.
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
const polyBoundaryMesh & boundary() const
Return boundary mesh.
virtual const labelList & faceOwner() const
Return face owner.
const faceZoneList & faceZones() const
Return face zones.
virtual const labelList & faceNeighbour() const
Return face neighbour.
label nInternalFaces() const
const scalarField & magFaceAreas() const
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#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.
bool isType(const Type &t)
Check the typeid.
void component(GeometricField< typename GeometricField< Type, GeoMesh, PrimitiveField1 >::cmptType, GeoMesh, PrimitiveField1 > &gcf, const GeometricField< Type, GeoMesh, PrimitiveField2 > &gf, const direction d)
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)