Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://www.mooseframework.org 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #pragma once 11 : 12 : #include "CSGSurface.h" 13 : 14 : #include "libmesh/point.h" 15 : 16 : namespace CSG 17 : { 18 : 19 : /** 20 : * CSGSphere creates an internal representation of a Constructive Solid Geometry (CSG) 21 : * sphere, represented in the form (x - x0)^2 + (y - y0)^2 + (z - z0)^2 = r^2 22 : */ 23 : class CSGSphere : public CSGSurface 24 : { 25 : public: 26 : /** 27 : * @brief Construct a new CSGSphere surface 28 : * 29 : * @param name unique name for the sphere surface 30 : * @param center center point of sphere 31 : * @param r radius of sphere 32 : */ 33 : CSGSphere(const std::string & name, const Point & center, const Real r); 34 : 35 : /** 36 : * @brief Construct a new CSGSphere surface 37 : * 38 : * @param name unique name for the sphere surface 39 : * @param r radius of sphere 40 : */ 41 : CSGSphere(const std::string & name, const Real r); 42 : 43 : /** 44 : * Destructor 45 : */ 46 142 : virtual ~CSGSphere() = default; 47 : 48 : /** 49 : * @brief Get the coefficients (x0, y0, z0, r) for the equation of a sphere 50 : * (x - x0)^2 + (y - y0)^2 + (z - z0)^2 = r^2 51 : * 52 : * @return map of coefficients (x0, y0, z0, and r) and their values 53 : */ 54 : virtual std::unordered_map<std::string, Real> getCoeffs() const override; 55 : 56 : /** 57 : * @brief given a point, determine its evaluation based on the equation of the sphere 58 : * 59 : * @param p point 60 : * @return evaluation of point based on surface equation 61 : */ 62 : virtual Real evaluateSurfaceEquationAtPoint(const Point & p) const override; 63 : 64 : protected: 65 : // check that radius is positive 66 : void checkRadius() const; 67 : 68 : /// Value of x0 in equation of sphere 69 : Real _x0; 70 : 71 : /// Value of y0 in equation of sphere 72 : Real _y0; 73 : 74 : /// Value of z0 in equation of sphere 75 : Real _z0; 76 : 77 : /// Value of r in equation of sphere 78 : Real _r; 79 : }; 80 : } // namespace CSG