48 void Foam::sampledIsoSurface::getIsoFields()
const
50 const fvMesh& fvm =
static_cast<const fvMesh&
>(
mesh());
59 Info<<
"sampledIsoSurface::getIsoField() : lookup volField "
62 storedVolFieldPtr_.
clear();
71 Info<<
"sampledIsoSurface::getIsoField() : checking "
72 << isoField_ <<
" for same time " << fvm.time().timeName()
78 storedVolFieldPtr_.
empty()
79 || (fvm.time().timeName() != storedVolFieldPtr_().instance())
84 Info<<
"sampledIsoSurface::getIsoField() : reading volField "
85 << isoField_ <<
" from time " << fvm.time().timeName()
89 storedVolFieldPtr_.
reset
96 fvm.time().timeName(),
105 volFieldPtr_ = storedVolFieldPtr_.operator->();
114 if (!subMeshPtr_.
valid())
116 word pointFldName =
"volPointInterpolate(" + isoField_ +
')';
122 Info<<
"sampledIsoSurface::getIsoField() : lookup pointField "
123 << pointFldName <<
endl;
133 Info<<
"sampledIsoSurface::getIsoField() : checking pointField "
134 << pointFldName <<
" for same time "
135 << fvm.time().timeName() <<
endl;
140 storedPointFieldPtr_.
empty()
141 || (fvm.time().timeName() != storedPointFieldPtr_().instance())
146 Info<<
"sampledIsoSurface::getIsoField() :"
147 <<
" interpolating volField " << volFieldPtr_->
name()
148 <<
" to get pointField " << pointFldName <<
endl;
151 storedPointFieldPtr_.
reset
157 pointFieldPtr_ = storedPointFieldPtr_.operator->();
166 storedVolFieldPtr_.
reset(average(fvm, *pointFieldPtr_).ptr());
167 volFieldPtr_ = storedVolFieldPtr_.operator->();
173 Info<<
"sampledIsoSurface::getIsoField() : volField "
174 << volFieldPtr_->
name() <<
" min:" <<
min(*volFieldPtr_).value()
175 <<
" max:" <<
max(*volFieldPtr_).value() <<
endl;
176 Info<<
"sampledIsoSurface::getIsoField() : pointField "
177 << pointFieldPtr_->
name()
185 const fvMesh& subFvm = subMeshPtr_().subMesh();
193 Info<<
"sampledIsoSurface::getIsoField() :"
194 <<
" submesh lookup volField "
195 << isoField_ <<
endl;
197 storedVolSubFieldPtr_.
clear();
198 volSubFieldPtr_ = &subFvm.lookupObject<
volScalarField>(isoField_);
204 Info<<
"sampledIsoSurface::getIsoField() : subsetting volField "
205 << isoField_ <<
endl;
207 storedVolSubFieldPtr_.
reset
215 volSubFieldPtr_ = storedVolSubFieldPtr_.operator->();
222 "volPointInterpolate("
223 + volSubFieldPtr_->
name()
230 Info<<
"sampledIsoSurface::getIsoField() :"
231 <<
" submesh lookup pointField " << pointFldName <<
endl;
233 storedPointSubFieldPtr_.
clear();
243 Info<<
"sampledIsoSurface::getIsoField() :"
244 <<
" interpolating submesh volField "
245 << volSubFieldPtr_->
name()
246 <<
" to get submesh pointField " << pointFldName <<
endl;
248 storedPointSubFieldPtr_.
reset
255 storedPointSubFieldPtr_->
checkOut();
256 pointSubFieldPtr_ = storedPointSubFieldPtr_.operator->();
265 storedVolSubFieldPtr_.
reset
267 average(subFvm, *pointSubFieldPtr_).ptr()
269 volSubFieldPtr_ = storedVolSubFieldPtr_.operator->();
275 Info<<
"sampledIsoSurface::getIsoField() : volSubField "
276 << volSubFieldPtr_->
name()
277 <<
" min:" <<
min(*volSubFieldPtr_).value()
278 <<
" max:" <<
max(*volSubFieldPtr_).value() <<
endl;
279 Info<<
"sampledIsoSurface::getIsoField() : pointSubField "
280 << pointSubFieldPtr_->
name()
294 tmp<volScalarField> tcellAvg
301 mesh.time().timeName(),
315 for (label pointI = 0; pointI < mesh.nPoints(); pointI++)
317 const labelList& pCells = mesh.pointCells(pointI);
321 label cellI = pCells[i];
323 cellAvg[cellI] += pfld[pointI];
324 nPointCells[cellI]++;
330 cellAvg[cellI] /= nPointCells[cellI];
333 cellAvg.correctBoundaryConditions();
341 const pointMesh& pMesh,
345 tmp<pointScalarField> tpointAvg
352 fld.time().timeName(),
364 for (label pointI = 0; pointI < fld.mesh().nPoints(); pointI++)
366 const labelList& pCells = fld.mesh().pointCells(pointI);
370 pointAvg[pointI] += fld[pCells[i]];
372 pointAvg[pointI] /= pCells.size();
375 pointAvg.correctBoundaryConditions();
381 bool Foam::sampledIsoSurface::updateGeometry()
const
383 const fvMesh& fvm =
static_cast<const fvMesh&
>(
mesh());
386 if (fvm.time().timeIndex() == prevTimeIndex_)
392 if (zoneID_.index() != -1 && !subMeshPtr_.valid())
397 label exposedPatchI = patches.
findPatchID(exposedPatchName_);
401 Info<<
"Allocating subset of size "
403 <<
" with exposed faces into patch "
404 << patches[exposedPatchI].name() <<
endl;
409 new fvMeshSubset(fvm)
411 subMeshPtr_().setLargeCellSubset
419 prevTimeIndex_ = fvm.time().timeIndex();
429 if (subMeshPtr_.valid())
461 Pout<<
"sampledIsoSurface::updateGeometry() : constructed iso:"
463 <<
" regularise : " << regularise_ <<
nl
464 <<
" average : " << average_ <<
nl
465 <<
" isoField : " << isoField_ <<
nl
466 <<
" isoValue : " << isoVal_ <<
nl;
467 if (subMeshPtr_.valid())
469 Pout<<
" zone size : " << subMeshPtr_().subMesh().nCells()
473 <<
" tris : " << surface().size() << nl
474 <<
" cut cells : " << surface().meshCells().size()
492 isoField_(dict.
lookup(
"isoField")),
502 storedVolFieldPtr_(NULL),
504 storedPointFieldPtr_(NULL),
511 "sampledIsoSurface::sampledIsoSurface"
512 "(const word&, const polyMesh&, const dictionary&)",
514 ) <<
"Non-interpolated iso surface not supported since triangles"
518 if (zoneID_.index() != -1)
520 dict.
lookup(
"exposedPatchName") >> exposedPatchName_;
526 "sampledIsoSurface::sampledIsoSurface"
527 "(const word&, const polyMesh&, const dictionary&)",
529 ) <<
"Cannot find patch " << exposedPatchName_
530 <<
" in which to put exposed faces." <<
endl
535 if (debug && zoneID_.index() != -1)
537 Info<<
"Restricting to cellZone " << zoneID_.name()
538 <<
" with exposed internal faces into patch "
539 << exposedPatchName_ <<
endl;
571 if (prevTimeIndex_ == -1)
584 return updateGeometry();
593 return sampleField(vField);
602 return sampleField(vField);
611 return sampleField(vField);
620 return sampleField(vField);
629 return sampleField(vField);
638 return interpolateField(interpolator);
647 return interpolateField(interpolator);
655 return interpolateField(interpolator);
664 return interpolateField(interpolator);
673 return interpolateField(interpolator);
679 os <<
"sampledIsoSurface: " <<
name() <<
" :"
680 <<
" field :" << isoField_
681 <<
" value :" << isoVal_;