//- Calculate the offset to the next layer Foam::tmp<Foam::vectorField> Foam::layerAdditionRemovalMC::extrusionDir() const { const polyMesh& mesh = topoChanger().mesh(); const primitiveFacePatch& masterFaceLayer = mesh.faceZones()[faceZoneID_.index()](); const pointField& points = mesh.points(); const labelList& mp = masterFaceLayer.meshPoints(); tmp<vectorField> textrusionDir(new vectorField(mp.size())); vectorField& extrusionDir = textrusionDir(); if (setLayerPairing()) { if (debug) { Pout<< "void layerAdditionRemovalMC::extrusionDir() const " << " for object " << name() << " : " << "Using edges for point insertion" << endl; } // Detected a valid layer. Grab the point and face collapse mapping const labelList& ptc = pointsPairing(); forAll(extrusionDir, mpI) { extrusionDir[mpI] = points[ptc[mpI]] - points[mp[mpI]]; } }
void Foam::layerAdditionRemoval::addCellLayer ( polyTopoChange& ref ) const { // Insert the layer addition instructions into the topological change // Algorithm: // 1. For every point in the master zone add a new point // 2. For every face in the master zone add a cell // 3. Go through all the edges of the master zone. For all internal // edges, add a face with the correct orientation and make it internal. // For all boundary edges, find the patch it belongs to and add the // face to this patch // 4. Create a set of new faces on the patch image and assign them to be // between the old master cells and the newly created cells // 5. Modify all the faces in the patch such that they are located // between the old slave cells and newly created cells if (debug) { Pout<< "void layerAdditionRemoval::addCellLayer(" << "polyTopoChange& ref) const for object " << name() << " : " << "Adding cell layer" << endl; } // Create the points const polyMesh& mesh = topoChanger().mesh(); const primitiveFacePatch& masterFaceLayer = mesh.faceZones()[faceZoneID_.index()](); const pointField& points = mesh.points(); const labelList& mp = masterFaceLayer.meshPoints(); // Calculation of point normals, using point pairing vectorField extrusionDir(mp.size()); if (setLayerPairing()) { if (debug) { Pout<< "void layerAdditionRemoval::addCellLayer(" << "polyTopoChange& ref) const " << " for object " << name() << " : " << "Using edges for point insertion" << endl; } // Detected a valid layer. Grab the point and face collapse mapping const labelList& ptc = pointsPairing(); forAll (extrusionDir, mpI) { extrusionDir[mpI] = points[ptc[mpI]] - points[mp[mpI]]; } extrusionDir *= addDelta_*maxLayerThickness_; }
void Foam::layerAdditionRemoval::removeCellLayer ( polyTopoChange& ref ) const { // Algorithm for layer removal. Second phase: topological change // 2) Go through all the faces of the master cell layer and remove // the ones that are not in the master face zone. // // 3) Grab all the faces coming out of points that are collapsed // and select the ones that are not marked for removal. Go // through the remaining faces and replace the point to remove by // the equivalent point in the master face zone. if (debug) { Pout<< "Removing the cell layer for object " << name() << endl; } const polyMesh& mesh = topoChanger().mesh(); const labelList& own = mesh.faceOwner(); const labelList& nei = mesh.faceNeighbour(); const labelList& ptc = pointsPairing(); const labelList& ftc = facesPairing(); // Remove all the cells from the master layer const labelList& mc = mesh.faceZones()[faceZoneID_.index()].masterCells(); forAll(mc, facei) { label slaveSideCell = own[ftc[facei]]; if (mesh.isInternalFace(ftc[facei]) && slaveSideCell == mc[facei]) { // Owner cell of the face is being removed. // Grab the neighbour instead slaveSideCell = nei[ftc[facei]]; } ref.setAction(polyRemoveCell(mc[facei], slaveSideCell)); }