diff --git a/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.C b/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.C index dec8298540..3fa74ec2fa 100644 --- a/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.C +++ b/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2014-2017 OpenFOAM Foundation - Copyright (C) 2018 OpenCFD Ltd. + Copyright (C) 2018-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -72,9 +72,8 @@ Foam::pointIndexHit Foam::searchableDisk::findNearest v.normalise(); - - // Clip to radius. - info.setPoint(origin() + min(magV, radius_)*v); + // Clip to inner/outer radius + info.setPoint(origin() + radialLimits_.clip(magV)*v); if (magSqr(sample - info.rawPoint()) < nearestDistSqr) { @@ -112,11 +111,10 @@ void Foam::searchableDisk::findLine v.normalise(); - // Set (hit or miss) to intersection of ray and plane of disk info.setPoint(origin() + magV*v); - if (magV <= radius_) + if (radialLimits_.contains(magV)) { info.setHit(); info.setIndex(0); @@ -131,15 +129,15 @@ Foam::searchableDisk::searchableDisk const IOobject& io, const point& originPoint, const vector& normalVector, - const scalar radius + const scalar outerRadius, + const scalar innerRadius ) : searchableSurface(io), plane(originPoint, normalVector), - radius_(radius) + radialLimits_(innerRadius, outerRadius) { // Rough approximation of bounding box - // vector span(radius_, radius_, radius_); // See searchableCylinder vector span @@ -148,7 +146,7 @@ Foam::searchableDisk::searchableDisk sqrt(sqr(normal().x()) + sqr(normal().z())), sqrt(sqr(normal().x()) + sqr(normal().y())) ); - span *= radius_; + span *= outerRadius; bounds().min() = origin() - span; bounds().max() = origin() + span; @@ -166,7 +164,8 @@ Foam::searchableDisk::searchableDisk io, dict.get("origin"), dict.get("normal"), - dict.get("radius") + dict.get("radius"), + dict.getOrDefault("innerRadius", 0) ) {} @@ -177,8 +176,8 @@ const Foam::wordList& Foam::searchableDisk::regions() const { if (regions_.empty()) { - regions_.setSize(1); - regions_[0] = "region0"; + regions_.resize(1); + regions_.first() = "region0"; } return regions_; } @@ -190,11 +189,11 @@ void Foam::searchableDisk::boundingSpheres scalarField& radiusSqr ) const { - centres.setSize(1); - centres[0] = origin(); + centres.resize(1); + radiusSqr.resize(1); - radiusSqr.setSize(1); - radiusSqr[0] = sqr(radius_); + centres[0] = origin(); + radiusSqr[0] = sqr(radialLimits_.max()); // Add a bit to make sure all points are tested inside radiusSqr += Foam::sqr(SMALL); @@ -208,7 +207,7 @@ void Foam::searchableDisk::findNearest List& info ) const { - info.setSize(samples.size()); + info.resize(samples.size()); forAll(samples, i) { @@ -224,7 +223,7 @@ void Foam::searchableDisk::findLine List& info ) const { - info.setSize(start.size()); + info.resize(start.size()); forAll(start, i) { diff --git a/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.H b/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.H index 23c66670e0..7dec54089f 100644 --- a/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.H +++ b/src/meshTools/searchableSurfaces/searchableDisk/searchableDisk.H @@ -29,7 +29,7 @@ Class Description Searching on circular disk given as origin, normal (gets normalised) - and radius + and radius. Optionally it can be an annular ring. \heading Dictionary parameters \table @@ -38,6 +38,7 @@ Description origin | centre of disk | yes | normal | normal vector | yes | radius | disk radius | yes | + innerRadius | inner disk radius | no | 0 \endtable Note @@ -52,6 +53,7 @@ SourceFiles #define searchableDisk_H #include "plane.H" +#include "MinMax.H" #include "searchableSurface.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -70,10 +72,10 @@ class searchableDisk { private: - // Private Member Data + // Private Data - //- Radius - const scalar radius_; + //- Inner/outer radial limits + const scalarMinMax radialLimits_; //- Names of regions mutable wordList regions_; @@ -119,7 +121,8 @@ public: const IOobject& io, const point& originPoint, const vector& normalVector, - const scalar radius + const scalar outerRadius, + const scalar innerRadius = 0 ); //- Construct from dictionary (used by searchableSurface) @@ -247,7 +250,6 @@ public: NotImplemented; return false; } - }; diff --git a/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer index ff827d803c..cb780c9185 100644 --- a/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer +++ b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/fieldTransfer @@ -45,6 +45,25 @@ sampled ${_sampleMesh} surface plane-0.55.stl; } + + outerplane-0.45 + { + type distanceSurface; + // defaults: + distance 0; + signed true; + isoMethod topo; + + surfaceType disk; + + origin (0.45 0 0); + normal (1 0 0); + radius 0.09; + innerRadius 0.05; + + topology largestRegion; + store true; + } } } diff --git a/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/samplingDebug b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/samplingDebug new file mode 100644 index 0000000000..85c05bd8b3 --- /dev/null +++ b/tutorials/compressible/rhoSimpleFoam/gasMixing/injectorPipe/system/samplingDebug @@ -0,0 +1,66 @@ +// -*- C++ -*- + +// ************************************************************************* // + +samplingDebug +{ + type surfaces; + libs (sampling); + log true; + writeControl timeStep; + writeInterval 1; + + fields (tracer0 U); + + sampleScheme cellPoint; + interpolationScheme cellPoint; + surfaceFormat vtk; + + formatOptions + { + ensight + { + collateTimes true; + // collateTimes false; + } + } + + _sampleMesh + { + type meshedSurface; + source cells; + } + + _diskOuter + { + surfaceType disk; + origin (0 0 0); + normal (1 0 0); + radius 0.09; + } + + _distanceSurface + { + type distanceSurface; + distance 0; + signed true; + isoMethod topo; + } + + surfaces + { + diskOuter + { + ${_distanceSurface} + ${_diskOuter} + + origin (0.45 0 0); + innerRadius 0.05; + + topology largestRegion; + } + } +} + + +// ************************************************************************* //