diff --git a/src/sampling/sampledSet/midPoint/midPointSet.C b/src/sampling/sampledSet/midPoint/midPointSet.C index d0ea99108c8e9649a213519d4e49fe9cf68c60e7..38031ee7b00ead9c8bd59e1817d0492c7810baff 100644 --- a/src/sampling/sampledSet/midPoint/midPointSet.C +++ b/src/sampling/sampledSet/midPoint/midPointSet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,7 @@ License #include "midPointSet.H" #include "polyMesh.H" +#include "meshSearch.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -47,58 +48,46 @@ void Foam::midPointSet::genSamples() labelList midSegments(2*size()); scalarList midCurveDist(2*size()); - label midI = 0; + label mSamplei = 0; + label samplei = 0; - label sampleI = 0; - - while(true && size()>0) + while (size() > 0) { - // calculate midpoint between sampleI and sampleI+1 (if in same segment) + // Calculate midpoint between samplei and samplei+1 (if in same segment) while ( - (sampleI < size() - 1) - && (segments_[sampleI] == segments_[sampleI+1]) + (samplei < size() - 1) + && (segments_[samplei] == segments_[samplei+1]) ) { - midPoints[midI] = - 0.5*(operator[](sampleI) + operator[](sampleI+1)); - - label cell1 = getCell(faces_[sampleI], midPoints[midI]); - label cell2 = getCell(faces_[sampleI+1], midPoints[midI]); + point midPoint(0.5*(operator[](samplei) + operator[](samplei+1))); + label cellm = pointInCell(midPoint, samplei); - if (cell1 != cell2) + if (cellm != -1) { - FatalErrorInFunction - << " midI:" << midI - << " sampleI:" << sampleI - << " pts[sampleI]:" << operator[](sampleI) - << " face[sampleI]:" << faces_[sampleI] - << " pts[sampleI+1]:" << operator[](sampleI+1) - << " face[sampleI+1]:" << faces_[sampleI+1] - << " cell1:" << cell1 - << " cell2:" << cell2 - << abort(FatalError); + midPoints[mSamplei] = midPoint; + midCells[mSamplei] = cellm; + midSegments[mSamplei] = segments_[samplei]; + midCurveDist[mSamplei] = mag(midPoints[mSamplei] - start()); + mSamplei++; } - midCells[midI] = cell1; - midSegments[midI] = segments_[sampleI]; - midCurveDist[midI] = mag(midPoints[midI] - start()); - - midI++; - sampleI++; + samplei++; } - if (sampleI == size() - 1) + if (samplei == size() - 1) { break; } - sampleI++; + + samplei++; } - midPoints.setSize(midI); - midCells.setSize(midI); - midSegments.setSize(midI); - midCurveDist.setSize(midI); + midPoints.setSize(mSamplei); + midCells.setSize(mSamplei); + midSegments.setSize(mSamplei); + midCurveDist.setSize(mSamplei); + setSamples ( midPoints, diff --git a/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C b/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C index 7a57549855957e856cfc10c044b14dd8ea8bc417..1628ca50ef1c5889f6fe20757515a0eb9758775f 100644 --- a/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C +++ b/src/sampling/sampledSet/midPointAndFace/midPointAndFaceSet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,101 +39,83 @@ namespace Foam // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Rework faceOnlySet samples. -// Take two consecutive samples void Foam::midPointAndFaceSet::genSamples() { // Generate midpoints and add to face points - List<point> newSamplePoints(3*size()); - labelList newSampleCells(3*size()); - labelList newSampleFaces(3*size()); - labelList newSampleSegments(3*size()); - scalarList newSampleCurveDist(3*size()); + List<point> mpfSamplePoints(3*size()); + labelList mpfSampleCells(3*size()); + labelList mpfSampleFaces(3*size()); + labelList mpfSampleSegments(3*size()); + scalarList mpfSampleCurveDist(3*size()); - label newSampleI = 0; + label mpfSamplei = 0; + label samplei = 0; - label sampleI = 0; - - while(true && size()>0) + while (size() > 0) { - // sampleI is start of segment - - // Add sampleI - newSamplePoints[newSampleI] = operator[](sampleI); - newSampleCells[newSampleI] = cells_[sampleI]; - newSampleFaces[newSampleI] = faces_[sampleI]; - newSampleSegments[newSampleI] = segments_[sampleI]; - newSampleCurveDist[newSampleI] = curveDist_[sampleI]; - newSampleI++; + // Add first face + mpfSamplePoints[mpfSamplei] = operator[](samplei); + mpfSampleCells[mpfSamplei] = cells_[samplei]; + mpfSampleFaces[mpfSamplei] = faces_[samplei]; + mpfSampleSegments[mpfSamplei] = segments_[samplei]; + mpfSampleCurveDist[mpfSamplei] = curveDist_[samplei]; + mpfSamplei++; while ( - (sampleI < size() - 1) - && (segments_[sampleI] == segments_[sampleI+1]) + (samplei < size() - 1) + && (segments_[samplei] == segments_[samplei+1]) ) { - // Add mid point - const point mid = 0.5*(operator[](sampleI) + operator[](sampleI+1)); - - label cell1 = getCell(faces_[sampleI], mid); - label cell2 = getCell(faces_[sampleI+1], mid); + point midPoint(0.5*(operator[](samplei) + operator[](samplei+1))); + label cellm = pointInCell(midPoint, samplei); - if (cell1 != cell2) + if (cellm != -1) { - FatalErrorInFunction - << " newSampleI:" << newSampleI - << " pts[sampleI]:" << operator[](sampleI) - << " face[sampleI]:" << faces_[sampleI] - << " pts[sampleI+1]:" << operator[](sampleI+1) - << " face[sampleI+1]:" << faces_[sampleI+1] - << " cell1:" << cell1 - << " cell2:" << cell2 - << abort(FatalError); + mpfSamplePoints[mpfSamplei] = midPoint; + mpfSampleCells[mpfSamplei] = cellm; + mpfSampleFaces[mpfSamplei] = -1; + mpfSampleSegments[mpfSamplei] = segments_[samplei]; + mpfSampleCurveDist[mpfSamplei] = + mag(mpfSamplePoints[mpfSamplei] - start()); + + mpfSamplei++; } - newSamplePoints[newSampleI] = mid; - newSampleCells[newSampleI] = cell1; - newSampleFaces[newSampleI] = -1; - newSampleSegments[newSampleI] = segments_[sampleI]; - newSampleCurveDist[newSampleI] = - mag(newSamplePoints[newSampleI] - start()); - - newSampleI++; - - // Add sampleI+1 - newSamplePoints[newSampleI] = operator[](sampleI+1); - newSampleCells[newSampleI] = cells_[sampleI+1]; - newSampleFaces[newSampleI] = faces_[sampleI+1]; - newSampleSegments[newSampleI] = segments_[sampleI+1]; - newSampleCurveDist[newSampleI] = - mag(newSamplePoints[newSampleI] - start()); + // Add second face + mpfSamplePoints[mpfSamplei] = operator[](samplei+1); + mpfSampleCells[mpfSamplei] = cells_[samplei+1]; + mpfSampleFaces[mpfSamplei] = faces_[samplei+1]; + mpfSampleSegments[mpfSamplei] = segments_[samplei+1]; + mpfSampleCurveDist[mpfSamplei] = + mag(mpfSamplePoints[mpfSamplei] - start()); - newSampleI++; + mpfSamplei++; - sampleI++; + samplei++; } - if (sampleI == size() - 1) + if (samplei == size() - 1) { break; } - sampleI++; + samplei++; } - newSamplePoints.setSize(newSampleI); - newSampleCells.setSize(newSampleI); - newSampleFaces.setSize(newSampleI); - newSampleSegments.setSize(newSampleI); - newSampleCurveDist.setSize(newSampleI); + mpfSamplePoints.setSize(mpfSamplei); + mpfSampleCells.setSize(mpfSamplei); + mpfSampleFaces.setSize(mpfSamplei); + mpfSampleSegments.setSize(mpfSamplei); + mpfSampleCurveDist.setSize(mpfSamplei); setSamples ( - newSamplePoints, - newSampleCells, - newSampleFaces, - newSampleSegments, - newSampleCurveDist + mpfSamplePoints, + mpfSampleCells, + mpfSampleFaces, + mpfSampleSegments, + mpfSampleCurveDist ); } diff --git a/src/sampling/sampledSet/sampledSet/sampledSet.C b/src/sampling/sampledSet/sampledSet/sampledSet.C index ff58cef6bf06149489ecb24111edc1aeab2dd3ed..f53e6e44fd42abd90b38e0b7a3cd88f5eebe652d 100644 --- a/src/sampling/sampledSet/sampledSet/sampledSet.C +++ b/src/sampling/sampledSet/sampledSet/sampledSet.C @@ -47,61 +47,57 @@ Foam::label Foam::sampledSet::getBoundaryCell(const label faceI) const } -Foam::label Foam::sampledSet::getCell +Foam::label Foam::sampledSet::pointInCell ( - const label faceI, - const point& sample + const point& p, + const label samplei ) const { - if (faceI == -1) - { - FatalErrorInFunction - << "Illegal face label " << faceI - << abort(FatalError); - } + const label cellio = mesh().faceOwner()[faces_[samplei]]; + const label cellin = mesh().faceNeighbour()[faces_[samplei]]; + const label celljo = mesh().faceOwner()[faces_[samplei+1]]; + const label celljn = mesh().faceNeighbour()[faces_[samplei+1]]; - if (faceI >= mesh().nInternalFaces()) - { - label cellI = getBoundaryCell(faceI); - - if (!mesh().pointInCell(sample, cellI, searchEngine_.decompMode())) - { - FatalErrorInFunction - << "Found cell " << cellI << " using face " << faceI - << ". But cell does not contain point " << sample - << abort(FatalError); - } - return cellI; - } - else - { - // Try owner and neighbour to see which one contains sample + // If mid-point is in the cell including the sampled faces + // include in list otherwise ignore - label cellI = mesh().faceOwner()[faceI]; + label cellm = + (cellio == celljo || cellio == celljn) ? cellio + : (cellin == celljo || cellin == celljn) ? cellin + : -1; - if (mesh().pointInCell(sample, cellI, searchEngine_.decompMode())) - { - return cellI; - } - else + if (cellm != -1) + { + // Check the mid-point is in the cell otherwise ignore + if (!mesh().pointInCell(p, cellm, searchEngine_.decompMode())) { - cellI = mesh().faceNeighbour()[faceI]; + cellm = -1; - if (mesh().pointInCell(sample, cellI, searchEngine_.decompMode())) - { - return cellI; - } - else + if (debug) { - FatalErrorInFunction - << "None of the neighbours of face " - << faceI << " contains point " << sample - << abort(FatalError); - - return -1; + WarningInFunction + << "Could not find mid-point " << p + << " cell " << cellm << endl; } } } + else if (debug) + { + WarningInFunction + << "Could not find cell for mid-point" << nl + << " samplei: " << samplei + << " pts[samplei]: " << operator[](samplei) + << " face[samplei]: " << faces_[samplei] + << " pts[samplei+1]: " << operator[](samplei+1) + << " face[samplei+1]: " << faces_[samplei+1] + << " cellio: " << cellio + << " cellin: " << cellin + << " celljo: " << celljo + << " celljn: " << celljn + << endl; + } + + return cellm; } diff --git a/src/sampling/sampledSet/sampledSet/sampledSet.H b/src/sampling/sampledSet/sampledSet/sampledSet.H index 005ef61c1cbf9795b28d28e40cfb74fafd1f3d5f..1531480ee8ff1fc22958a3d01dd2d03a4ab0b182 100644 --- a/src/sampling/sampledSet/sampledSet/sampledSet.H +++ b/src/sampling/sampledSet/sampledSet/sampledSet.H @@ -92,12 +92,9 @@ protected: //- Returns cell next to boundary face label getBoundaryCell(const label) const; - //- Returns cell using face and containing sample - label getCell - ( - const label faceI, - const point& sample - ) const; + //- Return the cell in which the point on the sample line + // resides if found otherwise return -1 + label pointInCell(const point& p, const label samplei) const; //- Calculates inproduct of face normal and vector sample-face centre // <0 if sample inside.