View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003453 | OpenFOAM | Patch | public | 2020-02-14 16:53 | 2020-02-16 11:31 |
Reporter | handrake0724 | Assigned To | henry | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | dev | ||||
Fixed in Version | dev | ||||
Summary | 0003453: wrong setType value in cylinder and cylinderAnnulusToFace and addtional pointSource | ||||
Description | I found that cylinderToFace and cylinderAnnulusToFace was returning wrong type in setType() member function as follows: virtual sourceType setType() const { return CELLSETSOURCE; } this type should be FACESETSOURCE. I noticed that faceSource and pointSource are lack of similar features available cellSource like sphereToCell, cylinderToCell, cylinderAnnulusToCell. so, I added additional classes sphereToFace, cylinderToPoint, cylinderAnnulusToPoint, sphereToPoint. these classes may be useful working with topoSet, setSet utilities. I have attached patch files for those things. Please review it. | ||||
Tags | No tags attached. | ||||
|
patch.diff (34,094 bytes)
diff --git a/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H b/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H index 7ca5cb49e..45518675b 100644 --- a/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H +++ b/src/meshTools/sets/faceSources/cylinderAnnulusToFace/cylinderAnnulusToFace.H @@ -115,7 +115,7 @@ public: virtual sourceType setType() const { - return CELLSETSOURCE; + return FACESETSOURCE; } virtual void applyToSet diff --git a/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H b/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H index 03f735477..a3a320c04 100644 --- a/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H +++ b/src/meshTools/sets/faceSources/cylinderToFace/cylinderToFace.H @@ -111,7 +111,7 @@ public: virtual sourceType setType() const { - return CELLSETSOURCE; + return FACESETSOURCE; } virtual void applyToSet diff --git a/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C new file mode 100644 index 000000000..864078def --- /dev/null +++ b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.C @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "sphereToFace.H" +#include "polyMesh.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(sphereToFace, 0); + addToRunTimeSelectionTable(topoSetSource, sphereToFace, word); + addToRunTimeSelectionTable(topoSetSource, sphereToFace, istream); +} + + +Foam::topoSetSource::addToUsageTable Foam::sphereToFace::usage_ +( + sphereToFace::typeName, + "\n Usage: sphereToFace (centreX centreY centreZ) radius\n\n" + " Select all faces with face centre within bounding sphere\n\n" +); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::sphereToFace::combine(topoSet& set, const bool add) const +{ + const pointField& ctrs = mesh_.faceCentres(); + + const scalar radSquared = radius_*radius_; + + forAll(ctrs, facei) + { + scalar offset = magSqr(centre_ - ctrs[facei]); + if (offset <= radSquared) + { + addOrDelete(set, facei, add); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::sphereToFace::sphereToFace +( + const polyMesh& mesh, + const vector& centre, + const scalar radius +) +: + topoSetSource(mesh), + centre_(centre), + radius_(radius) +{} + + +Foam::sphereToFace::sphereToFace +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + centre_(dict.lookup("centre")), + radius_(dict.lookup<scalar>("radius")) +{} + + +Foam::sphereToFace::sphereToFace +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + centre_(checkIs(is)), + radius_(readScalar(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::sphereToFace::~sphereToFace() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::sphereToFace::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding faces with centre within sphere, with centre = " + << centre_ << " and radius = " << radius_ << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing faces with centre within sphere, with centre = " + << centre_ << " and radius = " << radius_ << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H new file mode 100644 index 000000000..a89ee0783 --- /dev/null +++ b/src/meshTools/sets/faceSources/sphereToFace/sphereToFace.H @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::sphereToFace + +Description + A topoSetSource to select cells based on cell centres inside sphere. + +SourceFiles + sphereToFace.C + +\*---------------------------------------------------------------------------*/ + +#ifndef sphereToFace_H +#define sphereToFace_H + +#include "topoSetSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class sphereToFace Declaration +\*---------------------------------------------------------------------------*/ + +class sphereToFace +: + public topoSetSource +{ + + // Private Data + + //- Add usage string + static addToUsageTable usage_; + + //- Centre + vector centre_; + + //- Radius + scalar radius_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("sphereToFace"); + + + // Constructors + + //- Construct from components + sphereToFace + ( + const polyMesh& mesh, + const vector& centre, + const scalar radius + ); + + //- Construct from dictionary + sphereToFace + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + sphereToFace + ( + const polyMesh& mesh, + Istream& + ); + + + //- Destructor + virtual ~sphereToFace(); + + + // Member Functions + + virtual sourceType setType() const + { + return FACESETSOURCE; + } + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C new file mode 100644 index 000000000..accdb2a58 --- /dev/null +++ b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.C @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "cylinderAnnulusToPoint.H" +#include "polyMesh.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(cylinderAnnulusToPoint, 0); + addToRunTimeSelectionTable(topoSetSource, cylinderAnnulusToPoint, word); + addToRunTimeSelectionTable(topoSetSource, cylinderAnnulusToPoint, istream); +} + + +Foam::topoSetSource::addToUsageTable Foam::cylinderAnnulusToPoint::usage_ +( + cylinderAnnulusToPoint::typeName, + "\n Usage: cylinderAnnulusToPoint (p1X p1Y p1Z) (p2X p2Y p2Z)" + " outerRadius innerRadius\n\n" + " Select all points within bounding cylinder annulus\n\n" +); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::cylinderAnnulusToPoint::combine(topoSet& set, const bool add) const +{ + const vector axis = p2_ - p1_; + const scalar orad2 = sqr(outerRadius_); + const scalar irad2 = sqr(innerRadius_); + const scalar magAxis2 = magSqr(axis); + + const pointField& ctrs = mesh_.points(); + + forAll(ctrs, pointi) + { + vector d = ctrs[pointi] - p1_; + scalar magD = d & axis; + + if ((magD > 0) && (magD < magAxis2)) + { + scalar d2 = (d & d) - sqr(magD)/magAxis2; + if ((d2 < orad2) && (d2 > irad2)) + { + addOrDelete(set, pointi, add); + } + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint +( + const polyMesh& mesh, + const vector& p1, + const vector& p2, + const scalar outerRadius, + const scalar innerRadius +) +: + topoSetSource(mesh), + p1_(p1), + p2_(p2), + outerRadius_(outerRadius), + innerRadius_(innerRadius) +{} + + +Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + p1_(dict.lookup("p1")), + p2_(dict.lookup("p2")), + outerRadius_(dict.lookup<scalar>("outerRadius")), + innerRadius_(dict.lookup<scalar>("innerRadius")) +{} + + +Foam::cylinderAnnulusToPoint::cylinderAnnulusToPoint +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + p1_(checkIs(is)), + p2_(checkIs(is)), + outerRadius_(readScalar(checkIs(is))), + innerRadius_(readScalar(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::cylinderAnnulusToPoint::~cylinderAnnulusToPoint() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::cylinderAnnulusToPoint::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding points within cylinder annulus," + << " with p1 = " + << p1_ << ", p2 = " << p2_ << " and outer radius = " << outerRadius_ + << " and inner radius = " << innerRadius_ + << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing points within cylinder, with p1 = " + << p1_ << ", p2 = " << p2_ << " and outer radius = " << outerRadius_ + << " and inner radius " << innerRadius_ + << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H new file mode 100644 index 000000000..233cb1b66 --- /dev/null +++ b/src/meshTools/sets/pointSources/cylinderAnnulusToPoint/cylinderAnnulusToPoint.H @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::cylinderAnnulusToPoint + +Description + A topoSetSource to select faces based on face centres inside a + cylinder annulus. + +SourceFiles + cylinderAnnulusToPoint.C + +\*---------------------------------------------------------------------------*/ + +#ifndef cylinderAnnulusToPoint_H +#define cylinderAnnulusToPoint_H + +#include "topoSetSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class cylinderAnnulusToPoint Declaration +\*---------------------------------------------------------------------------*/ + +class cylinderAnnulusToPoint +: + public topoSetSource +{ + + // Private Data + + //- Add usage string + static addToUsageTable usage_; + + //- First point on cylinder axis + vector p1_; + + //- Second point on cylinder axis + vector p2_; + + //- Outer Radius + scalar outerRadius_; + + //- Inner Radius + scalar innerRadius_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("cylinderAnnulusToPoint"); + + + // Constructors + + //- Construct from components + cylinderAnnulusToPoint + ( + const polyMesh& mesh, + const vector& p1, + const vector& p2, + const scalar outerRadius, + const scalar innerRadius + ); + + //- Construct from dictionary + cylinderAnnulusToPoint + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + cylinderAnnulusToPoint + ( + const polyMesh& mesh, + Istream& + ); + + + // Destructor + virtual ~cylinderAnnulusToPoint(); + + // Member Functions + + virtual sourceType setType() const + { + return POINTSETSOURCE; + } + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C new file mode 100644 index 000000000..c02258ee0 --- /dev/null +++ b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.C @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "cylinderToPoint.H" +#include "polyMesh.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(cylinderToPoint, 0); + addToRunTimeSelectionTable(topoSetSource, cylinderToPoint, word); + addToRunTimeSelectionTable(topoSetSource, cylinderToPoint, istream); +} + + +Foam::topoSetSource::addToUsageTable Foam::cylinderToPoint::usage_ +( + cylinderToPoint::typeName, + "\n Usage: cylinderToPoint (p1X p1Y p1Z) (p2X p2Y p2Z) radius\n\n" + " Select all points within bounding cylinder\n\n" +); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::cylinderToPoint::combine(topoSet& set, const bool add) const +{ + const vector axis = p2_ - p1_; + const scalar rad2 = sqr(radius_); + const scalar magAxis2 = magSqr(axis); + + const pointField& ctrs = mesh_.points(); + + forAll(ctrs, pointi) + { + vector d = ctrs[pointi] - p1_; + scalar magD = d & axis; + + if ((magD > 0) && (magD < magAxis2)) + { + scalar d2 = (d & d) - sqr(magD)/magAxis2; + if (d2 < rad2) + { + addOrDelete(set, pointi, add); + } + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::cylinderToPoint::cylinderToPoint +( + const polyMesh& mesh, + const vector& p1, + const vector& p2, + const scalar radius +) +: + topoSetSource(mesh), + p1_(p1), + p2_(p2), + radius_(radius) +{} + + +Foam::cylinderToPoint::cylinderToPoint +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + p1_(dict.lookup("p1")), + p2_(dict.lookup("p2")), + radius_(dict.lookup<scalar>("radius")) +{} + + +Foam::cylinderToPoint::cylinderToPoint +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + p1_(checkIs(is)), + p2_(checkIs(is)), + radius_(readScalar(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::cylinderToPoint::~cylinderToPoint() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::cylinderToPoint::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding points within cylinder, with p1 = " + << p1_ << ", p2 = " << p2_ << " and radius = " << radius_ << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing points within cylinder, with p1 = " + << p1_ << ", p2 = " << p2_ << " and radius = " << radius_ << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H new file mode 100644 index 000000000..9e171568b --- /dev/null +++ b/src/meshTools/sets/pointSources/cylinderToPoint/cylinderToPoint.H @@ -0,0 +1,133 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2017-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::cylinderToPoint + +Description + A topoSetSource to select faces based on face centres inside a cylinder. + +SourceFiles + cylinderToPoint.C + +\*---------------------------------------------------------------------------*/ + +#ifndef cylinderToPoint_H +#define cylinderToPoint_H + +#include "topoSetSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class cylinderToPoint Declaration +\*---------------------------------------------------------------------------*/ + +class cylinderToPoint +: + public topoSetSource +{ + + // Private Data + + //- Add usage string + static addToUsageTable usage_; + + //- First point on cylinder axis + vector p1_; + + //- Second point on cylinder axis + vector p2_; + + //- Radius + scalar radius_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("cylinderToPoint"); + + + // Constructors + + //- Construct from components + cylinderToPoint + ( + const polyMesh& mesh, + const vector& p1, + const vector& p2, + const scalar radius + ); + + //- Construct from dictionary + cylinderToPoint + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + cylinderToPoint + ( + const polyMesh& mesh, + Istream& + ); + + + //- Destructor + virtual ~cylinderToPoint(); + + + // Member Functions + + virtual sourceType setType() const + { + return POINTSETSOURCE; + } + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C new file mode 100644 index 000000000..2f465d5d4 --- /dev/null +++ b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.C @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "sphereToPoint.H" +#include "polyMesh.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(sphereToPoint, 0); + addToRunTimeSelectionTable(topoSetSource, sphereToPoint, word); + addToRunTimeSelectionTable(topoSetSource, sphereToPoint, istream); +} + + +Foam::topoSetSource::addToUsageTable Foam::sphereToPoint::usage_ +( + sphereToPoint::typeName, + "\n Usage: sphereToPoint (centreX centreY centreZ) radius\n\n" + " Select all points within bounding sphere\n\n" +); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::sphereToPoint::combine(topoSet& set, const bool add) const +{ + const pointField& ctrs = mesh_.points(); + + const scalar radSquared = radius_*radius_; + + forAll(ctrs, pointi) + { + scalar offset = magSqr(centre_ - ctrs[pointi]); + if (offset <= radSquared) + { + addOrDelete(set, pointi, add); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::sphereToPoint::sphereToPoint +( + const polyMesh& mesh, + const vector& centre, + const scalar radius +) +: + topoSetSource(mesh), + centre_(centre), + radius_(radius) +{} + + +Foam::sphereToPoint::sphereToPoint +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + centre_(dict.lookup("centre")), + radius_(dict.lookup<scalar>("radius")) +{} + + +Foam::sphereToPoint::sphereToPoint +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + centre_(checkIs(is)), + radius_(readScalar(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::sphereToPoint::~sphereToPoint() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::sphereToPoint::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding points within sphere, with centre = " + << centre_ << " and radius = " << radius_ << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing points within sphere, with centre = " + << centre_ << " and radius = " << radius_ << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H new file mode 100644 index 000000000..4c9af7427 --- /dev/null +++ b/src/meshTools/sets/pointSources/sphereToPoint/sphereToPoint.H @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::sphereToPoint + +Description + A topoSetSource to select cells based on cell centres inside sphere. + +SourceFiles + sphereToPoint.C + +\*---------------------------------------------------------------------------*/ + +#ifndef sphereToPoint_H +#define sphereToPoint_H + +#include "topoSetSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class sphereToPoint Declaration +\*---------------------------------------------------------------------------*/ + +class sphereToPoint +: + public topoSetSource +{ + + // Private Data + + //- Add usage string + static addToUsageTable usage_; + + //- Centre + vector centre_; + + //- Radius + scalar radius_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("sphereToPoint"); + + + // Constructors + + //- Construct from components + sphereToPoint + ( + const polyMesh& mesh, + const vector& centre, + const scalar radius + ); + + //- Construct from dictionary + sphereToPoint + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + sphereToPoint + ( + const polyMesh& mesh, + Istream& + ); + + + //- Destructor + virtual ~sphereToPoint(); + + + // Member Functions + + virtual sourceType setType() const + { + return POINTSETSOURCE; + } + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // |
|
Thanks for the report, I have corrected cylinderAnnulusToFace, cylinderToFace. > I added additional classes sphereToFace, cylinderToPoint, cylinderAnnulusToPoint, sphereToPoint. these classes may be useful working with topoSet, setSet utilities. We don't have a use case for these and they have never been requested. Do you have cases that need them? We don't want to add lost of code to OpenFOAM which is not needed and never used as it increases the maintenance overhead and it is already difficult to secure funding for the current maintenance load. |
|
cellSource subclasses like boxToCell, etc. selects cells if cell center is within the specified region. due to this behavior, sometimes the selected zone looks a little bit different than I expected. while I was looking for a way, studied sets classes and reached the idea adding those classes. Thus, with the same shape but different selection method, it would be handy to set refinement zone. |
|
We don't have a use case for these and they have never been requested. Do you have cases that need them? Can you supply a suitable test case which shows the need and advantage of them? |
|
the attached file is what I would like to make mesh with topoSet. this is a simple case but maybe my intention is to provide handy way to select cells with centers within region and also cells with intersecting region. |
|
I have downloaded the case but it is not clear what topoSet is needed for, the sets are not used. |
|
Sorry, I noticed the case file was not enough and repacked. FYI, the results from boxToCell and boxToPoint are attached which shows different behavior of selecting cells. I am not sure about other's use case with sets library, I sometimes needed different selecting behavior like boxToPoint. |
|
> I sometimes needed different selecting behavior like boxToPoint. For what cases? Can you provide the case for which you added this functionality? |
|
in offshore field, coupling of potential and cfd solutions is a main topic for studying wave load for non linear wave. So EOM (Euler overlay method) which is a similar method to relaxation method implemented in waves2foam is likely to become a standard method in this field. In the eom method, synthesizing zones are set with sets library. At the time when I was not familiar with OpenFOAM, the zones were made with boxToCell but the selected cells were not satisfactory. Now I figured out it could be boxToPoint instead. I can not share the code though. I think these classes find some guys usage. I noticed today openfoam-plus had them I am not sure since when. You think it does not find any usage and is in user support then it is fine |
|
We have never needed them and they have never been requested and it is also not clear if you need them or if so for what; we don't have a case demonstrating this. I am happy to include and maintain them if they are needed but if they are not needed then it would be a maintenance overhead without funding. If you would like us to include and maintain code which only you need at the moment will you contribute to OpenFOAM maintenance? See https://openfoam.org/news/funding-2020/ https://openfoam.org/maintenance/ |
|
Unfortunately I don't have any fund to support you at the moment. I am fine with the bug fix and would like to close this issue. |
|
Resolved by commit 4deaba90f726697bdbb7be24ff900a67aaad2e59 |
Date Modified | Username | Field | Change |
---|---|---|---|
2020-02-14 16:53 | handrake0724 | New Issue | |
2020-02-14 16:53 | handrake0724 | File Added: patch.diff | |
2020-02-14 17:10 | henry | Note Added: 0011175 | |
2020-02-14 17:33 | handrake0724 | Note Added: 0011176 | |
2020-02-14 17:40 | henry | Note Added: 0011177 | |
2020-02-14 17:40 | henry | Note Edited: 0011177 | |
2020-02-14 18:24 | handrake0724 | File Added: mesh.tar.gz | |
2020-02-14 18:24 | handrake0724 | Note Added: 0011178 | |
2020-02-14 18:35 | henry | Note Added: 0011179 | |
2020-02-15 16:55 | handrake0724 | File Added: mesh.tar-2.gz | |
2020-02-15 16:55 | handrake0724 | File Added: withboxToCell.png | |
2020-02-15 16:55 | handrake0724 | File Added: withboxToPoint.png | |
2020-02-15 16:55 | handrake0724 | Note Added: 0011181 | |
2020-02-15 17:10 | henry | Note Added: 0011182 | |
2020-02-15 17:49 | handrake0724 | Note Added: 0011183 | |
2020-02-15 18:06 | henry | Note Added: 0011184 | |
2020-02-16 11:16 | handrake0724 | Note Added: 0011187 | |
2020-02-16 11:31 | henry | Assigned To | => henry |
2020-02-16 11:31 | henry | Status | new => closed |
2020-02-16 11:31 | henry | Resolution | open => fixed |
2020-02-16 11:31 | henry | Fixed in Version | => dev |
2020-02-16 11:31 | henry | Note Added: 0011188 |