void Foam::shortEdgeFilter2D::addRegion ( const label regionI, DynamicList<label>& bPointRegions ) const { if (bPointRegions.empty()) { bPointRegions.append(regionI); } else if (findIndex(bPointRegions, regionI) == -1) { bPointRegions.append(regionI); } }
Foam::searchableSurfaceControl::searchableSurfaceControl ( const Time& runTime, const word& name, const dictionary& controlFunctionDict, const conformationSurfaces& geometryToConformTo, const scalar& defaultCellSize ) : cellSizeAndAlignmentControl ( runTime, name, controlFunctionDict, geometryToConformTo, defaultCellSize ), surfaceName_(controlFunctionDict.lookupOrDefault<word>("surface", name)), searchableSurface_(geometryToConformTo.geometry()[surfaceName_]), geometryToConformTo_(geometryToConformTo), cellSizeFunctions_(1), regionToCellSizeFunctions_(searchableSurface_.regions().size(), -1), maxPriority_(-1) { Info<< indent << "Master settings:" << endl; Info<< incrIndent; cellSizeFunctions_.set ( 0, cellSizeFunction::New ( controlFunctionDict, searchableSurface_, defaultCellSize_, labelList() ) ); Info<< decrIndent; PtrList<cellSizeFunction> regionCellSizeFunctions; DynamicList<label> defaultCellSizeRegions; label nRegionCellSizeFunctions = 0; // Loop over regions - if any entry is not specified they should // inherit values from the parent surface. if (controlFunctionDict.found("regions")) { const dictionary& regionsDict = controlFunctionDict.subDict("regions"); const wordList& regionNames = searchableSurface_.regions(); label nRegions = regionsDict.size(); regionCellSizeFunctions.setSize(nRegions); defaultCellSizeRegions.setCapacity(nRegions); forAll(regionNames, regionI) { const word& regionName = regionNames[regionI]; label regionID = geometryToConformTo_.geometry().findSurfaceRegionID ( this->name(), regionName ); if (regionsDict.found(regionName)) { // Get the dictionary for region const dictionary& regionDict = regionsDict.subDict(regionName); Info<< indent << "Region " << regionName << " (ID = " << regionID << ")" << " settings:" << endl; Info<< incrIndent; regionCellSizeFunctions.set ( nRegionCellSizeFunctions, cellSizeFunction::New ( regionDict, searchableSurface_, defaultCellSize_, labelList(1, regionID) ) ); Info<< decrIndent; regionToCellSizeFunctions_[regionID] = nRegionCellSizeFunctions; nRegionCellSizeFunctions++; } else { // Add to default list defaultCellSizeRegions.append(regionID); } } } if (defaultCellSizeRegions.empty() && !regionCellSizeFunctions.empty()) { cellSizeFunctions_.transfer(regionCellSizeFunctions); } else if (nRegionCellSizeFunctions > 0) { regionCellSizeFunctions.setSize(nRegionCellSizeFunctions + 1); regionCellSizeFunctions.set ( nRegionCellSizeFunctions, cellSizeFunction::New ( controlFunctionDict, searchableSurface_, defaultCellSize_, labelList() ) ); const wordList& regionNames = searchableSurface_.regions(); forAll(regionNames, regionI) { if (regionToCellSizeFunctions_[regionI] == -1) { regionToCellSizeFunctions_[regionI] = nRegionCellSizeFunctions; } } cellSizeFunctions_.transfer(regionCellSizeFunctions); }
void Foam::featurePointConformer::createMasterAndSlavePoints ( const extendedFeatureEdgeMesh& feMesh, const label ptI, DynamicList<Vb>& pts ) const { typedef DynamicList<autoPtr<plane> > planeDynList; typedef indexedVertexEnum::vertexType vertexType; typedef extendedFeatureEdgeMesh::edgeStatus edgeStatus; const Foam::point& featPt = feMesh.points()[ptI]; if ( ( Pstream::parRun() && !foamyHexMesh_.decomposition().positionOnThisProcessor(featPt) ) || geometryToConformTo_.outside(featPt) ) { return; } const scalar ppDist = foamyHexMesh_.pointPairDistance(featPt); // Maintain a list of master points and the planes to relect them in DynamicList<Foam::point> masterPoints; DynamicList<vertexType> masterPointsTypes; Map<planeDynList> masterPointReflections; const labelList& featPtEdges = feMesh.featurePointEdges()[ptI]; pointFeatureEdgesTypes pointEdgeTypes(feMesh, ptI); const List<extendedFeatureEdgeMesh::edgeStatus> allEdStat = pointEdgeTypes.calcPointFeatureEdgesTypes(); // Info<< nl << featPt << " " << pointEdgeTypes; const_circulator<labelList> circ(featPtEdges); // Loop around the edges of the feature point if (circ.size()) do { // const edgeStatus eStatusPrev = feMesh.getEdgeStatus(circ.prev()); const edgeStatus eStatusCurr = feMesh.getEdgeStatus(circ()); // const edgeStatus eStatusNext = feMesh.getEdgeStatus(circ.next()); // Info<< " Prev = " // << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusPrev] // << " Curr = " // << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusCurr] //// << " Next = " //// << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusNext] // << endl; // Get the direction in which to move the point in relation to the // feature point label sign = getSign(eStatusCurr); const vector n = sharedFaceNormal(feMesh, circ(), circ.next()); const vector pointMotionDirection = sign*0.5*ppDist*n; // Info<< " Shared face normal = " << n << endl; // Info<< " Direction to move point = " << pointMotionDirection // << endl; if (masterPoints.empty()) { // Initialise with the first master point Foam::point pt = featPt + pointMotionDirection; planeDynList firstPlane; firstPlane.append(autoPtr<plane>(new plane(featPt, n))); masterPoints.append(pt); masterPointsTypes.append ( sign == 1 ? Vb::vtExternalFeaturePoint // true : Vb::vtInternalFeaturePoint // false ); //Info<< " " << " " << firstPlane << endl; // const Foam::point reflectedPoint = reflectPointInPlane // ( // masterPoints.last(), // firstPlane.last()() // ); masterPointReflections.insert ( masterPoints.size() - 1, firstPlane ); } // else if // ( // eStatusPrev == extendedFeatureEdgeMesh::INTERNAL // && eStatusCurr == extendedFeatureEdgeMesh::EXTERNAL // ) // { // // Insert a new master point. // Foam::point pt = featPt + pointMotionDirection; // // planeDynList firstPlane; // firstPlane.append(autoPtr<plane>(new plane(featPt, n))); // // masterPoints.append(pt); // // masterPointsTypes.append // ( // sign == 1 // ? Vb::vtExternalFeaturePoint // true // : Vb::vtInternalFeaturePoint // false // ); // // masterPointReflections.insert // ( // masterPoints.size() - 1, // firstPlane // ); // } // else if // ( // eStatusPrev == extendedFeatureEdgeMesh::EXTERNAL // && eStatusCurr == extendedFeatureEdgeMesh::INTERNAL // ) // { // // } else { // Just add this face contribution to the latest master point masterPoints.last() += pointMotionDirection; masterPointReflections[masterPoints.size() - 1].append ( autoPtr<plane>(new plane(featPt, n)) ); } } while (circ.circulate(CirculatorBase::CLOCKWISE)); addMasterAndSlavePoints ( masterPoints, masterPointsTypes, masterPointReflections, pts, ptI ); }