void Foam::directions::writeOBJ ( const fileName& fName, const primitiveMesh& mesh, const vectorField& dirs ) { Pout<< "Writing cell info to " << fName << " as vectors at the cellCentres" << endl << endl; OFstream xDirStream(fName); label vertI = 0; forAll(dirs, celli) { const point& ctr = mesh.cellCentres()[celli]; // Calculate local length scale scalar minDist = great; const labelList& nbrs = mesh.cellCells()[celli]; forAll(nbrs, nbrI) { minDist = min(minDist, mag(mesh.cellCentres()[nbrs[nbrI]] - ctr)); } scalar scale = 0.5*minDist; writeOBJ(xDirStream, ctr, ctr + scale*dirs[celli], vertI); }
// Return true if any cells had to be split to keep a difference between // neighbouring refinement levels < limitDiff. Puts cells into refCells and // update refLevel to account for refinement. bool limitRefinementLevel ( const primitiveMesh& mesh, labelList& refLevel, cellSet& refCells ) { const labelListList& cellCells = mesh.cellCells(); label oldNCells = refCells.size(); forAll(cellCells, celli) { const labelList& cCells = cellCells[celli]; forAll(cCells, i) { if (refLevel[cCells[i]] > (refLevel[celli]+1)) { // Found neighbour with >=2 difference in refLevel. refCells.insert(celli); refLevel[celli]++; break; } } } if (refCells.size() > oldNCells) { Info<< "Added an additional " << refCells.size() - oldNCells << " cells to satisfy 1:2 refinement level" << endl; return true; } else { return false; } }