diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C index 66cfac6fb52f38bc4cd66314db92b31e6f704979..fca90949cacbc26c2bb37be540fc6d6b1744420a 100644 --- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.C +++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.C @@ -56,13 +56,36 @@ void Foam::distanceSurface::createGeometry() const scalarField(mesh().nCells(), GREAT), nearest ); - forAll(cellDistance, cellI) + + if (signed_) { - cellDistance[cellI] = Foam::mag - ( - nearest[cellI].hitPoint() - - mesh().cellCentres()[cellI] - ); + vectorField normal; + surfPtr_().getNormal(nearest, normal); + + forAll(cellDistance, cellI) + { + vector d(mesh().cellCentres()[cellI]-nearest[cellI].hitPoint()); + + if ((d&normal[cellI]) > 0) + { + cellDistance[cellI] = Foam::mag(d); + } + else + { + cellDistance[cellI] = -Foam::mag(d); + } + } + } + else + { + forAll(cellDistance, cellI) + { + cellDistance[cellI] = Foam::mag + ( + nearest[cellI].hitPoint() + - mesh().cellCentres()[cellI] + ); + } } } @@ -166,6 +189,7 @@ Foam::distanceSurface::distanceSurface ) ), distance_(readScalar(dict.lookup("distance"))), + signed_(readBool(dict.lookup("signed"))), regularise_(dict.lookupOrDefault("regularise", true)), zoneName_(word::null), facesPtr_(NULL), diff --git a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H index bb7290c5d8415e668e8cd698df11ce766798daea..82fba8a83f3ff696122ffb23102d4838cb6f6c4d 100644 --- a/src/sampling/sampledSurface/distanceSurface/distanceSurface.H +++ b/src/sampling/sampledSurface/distanceSurface/distanceSurface.H @@ -62,6 +62,9 @@ class distanceSurface //- distance value const scalar distance_; + //- signed distance + const bool signed_; + //- Whether to coarsen const Switch regularise_;