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 : #include "CSGYCylinder.h" 11 : 12 : namespace CSG 13 : { 14 : 15 6 : CSGYCylinder::CSGYCylinder(const std::string & name, const Real x0, const Real z0, const Real r) 16 6 : : CSGSurface(name, MooseUtils::prettyCppType<CSGYCylinder>()), _x0(x0), _z0(z0), _r(r) 17 : { 18 6 : checkRadius(); 19 6 : } 20 : 21 : std::unordered_map<std::string, Real> 22 2 : CSGYCylinder::getCoeffs() const 23 : { 24 10 : std::unordered_map<std::string, Real> coeffs = {{"x0", _x0}, {"z0", _z0}, {"r", _r}}; 25 2 : return coeffs; 26 2 : } 27 : 28 : Real 29 2 : CSGYCylinder::evaluateSurfaceEquationAtPoint(const Point & p) const 30 : { 31 : // Compute distance from the cylinder center to determine if inside (< r^2) 32 : // or outside (> r^2) the cylinder 33 2 : const Real dist_sq = Utility::pow<2>((p(0) - _x0)) + Utility::pow<2>((p(2) - _z0)); 34 : 35 2 : return dist_sq - Utility::pow<2>(_r); 36 : } 37 : 38 : void 39 6 : CSGYCylinder::checkRadius() const 40 : { 41 6 : if (_r <= 0.0) 42 2 : mooseError("Radius of y-cylinder must be positive."); 43 4 : } 44 : 45 : } // namespace CSG