Foam::Kmesh::Kmesh(const fvMesh& mesh) : vectorField(mesh.V().size()), nn_(vector::dim) { boundBox box = mesh.bounds(); l_ = box.span(); vector cornerCellCentre = ::Foam::max(mesh.C().internalField()); vector cellL = 2*(box.max() - cornerCellCentre); vector rdeltaByL; label nTot = 1; forAll(nn_, i) { nn_[i] = label(l_[i]/cellL[i] + 0.5); nTot *= nn_[i]; if (nn_[i] > 1) { l_[i] -= cellL[i]; } rdeltaByL[i] = nn_[i]/(l_[i]*l_[i]); }
void Foam::ignitionSite::findIgnitionCells(const fvMesh& mesh) { // Bit tricky: generate C and V before shortcutting if cannot find // cell locally. mesh.C generation uses parallel communication. const volVectorField& centres = mesh.C(); const scalarField& vols = mesh.V(); label ignCell = mesh.findCell(location_); if (ignCell == -1) { return; } scalar radius = diameter_/2.0; cells_.setSize(1); cellVolumes_.setSize(1); cells_[0] = ignCell; cellVolumes_[0] = vols[ignCell]; scalar minDist = GREAT; label nIgnCells = 1; forAll(centres, celli) { scalar dist = mag(centres[celli] - location_); if (dist < minDist) { minDist = dist; } if (dist < radius && celli != ignCell) { cells_.setSize(nIgnCells+1); cellVolumes_.setSize(nIgnCells+1); cells_[nIgnCells] = celli; cellVolumes_[nIgnCells] = vols[celli]; nIgnCells++; } }
Foam::quadraticFitSnGradData::quadraticFitSnGradData ( const fvMesh& mesh, const scalar cWeight ) : MeshObject<fvMesh, quadraticFitSnGradData>(mesh), centralWeight_(cWeight), #ifdef SPHERICAL_GEOMETRY dim_(2), #else dim_(mesh.nGeometricD()), #endif minSize_ ( dim_ == 1 ? 3 : dim_ == 2 ? 6 : dim_ == 3 ? 9 : 0 ), stencil_(mesh), fit_(mesh.nInternalFaces()) { if (debug) { Info << "Contructing quadraticFitSnGradData" << endl; } // check input if (centralWeight_ < 1 - SMALL) { FatalErrorIn("quadraticFitSnGradData::quadraticFitSnGradData") << "centralWeight requested = " << centralWeight_ << " should not be less than one" << exit(FatalError); } if (minSize_ == 0) { FatalErrorIn("quadraticFitSnGradData") << " dimension must be 1,2 or 3, not" << dim_ << exit(FatalError); } // store the polynomial size for each face to write out surfaceScalarField snGradPolySize ( IOobject ( "quadraticFitSnGradPolySize", "constant", mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedScalar("quadraticFitSnGradPolySize", dimless, scalar(0)) ); // Get the cell/face centres in stencil order. // Centred face stencils no good for triangles of tets. Need bigger stencils List<List<point> > stencilPoints(stencil_.stencil().size()); stencil_.collectData ( mesh.C(), stencilPoints ); // find the fit coefficients for every face in the mesh for(label faci = 0; faci < mesh.nInternalFaces(); faci++) { snGradPolySize[faci] = calcFit(stencilPoints[faci], faci); } if (debug) { snGradPolySize.write(); Info<< "quadraticFitSnGradData::quadraticFitSnGradData() :" << "Finished constructing polynomialFit data" << endl; } }