Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 : 4 : // This library is free software; you can redistribute it and/or 5 : // modify it under the terms of the GNU Lesser General Public 6 : // License as published by the Free Software Foundation; either 7 : // version 2.1 of the License, or (at your option) any later version. 8 : 9 : // This library is distributed in the hope that it will be useful, 10 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 : // Lesser General Public License for more details. 13 : 14 : // You should have received a copy of the GNU Lesser General Public 15 : // License along with this library; if not, write to the Free Software 16 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 : 18 : 19 : 20 : // Local includes 21 : #include "libmesh/quadrature_clough.h" 22 : #include "libmesh/quadrature_gauss.h" 23 : #include "libmesh/enum_to_string.h" 24 : 25 : namespace libMesh 26 : { 27 : 28 : 29 6836 : void QClough::init_2D() 30 : { 31 : #if LIBMESH_DIM > 1 32 7038 : QGauss gauss_rule(2, _order); 33 6836 : gauss_rule.init(TRI6, _p_level, /*simple_type_only=*/true); 34 : 35 : //----------------------------------------------------------------------- 36 : // 2D quadrature rules 37 6836 : switch (_type) 38 : { 39 : 40 : //--------------------------------------------- 41 : // Triangle quadrature rules 42 202 : case TRI3: 43 : case TRI6: 44 : case TRI7: 45 : { 46 202 : std::vector<Point> & gausspoints = gauss_rule.get_points(); 47 202 : std::vector<Real> & gaussweights = gauss_rule.get_weights(); 48 404 : std::size_t numgausspts = gausspoints.size(); 49 6836 : _points.resize(numgausspts*3); 50 6836 : _weights.resize(numgausspts*3); 51 94851 : for (std::size_t i = 0; i != numgausspts; ++i) 52 : { 53 90617 : _points[3*i](0) = gausspoints[i](0) + 54 88015 : gausspoints[i](1) / 3.; 55 88015 : _points[3*i](1) = gausspoints[i](1) / 3.; 56 88015 : _points[3*i+1](0) = gausspoints[i](1) / 3.; 57 93219 : _points[3*i+1](1) = gausspoints[i](0) + 58 88015 : gausspoints[i](1) / 3.; 59 93219 : _points[3*i+2](0) = 1./3. + 60 90617 : gausspoints[i](0) * 2./3. - 61 88015 : gausspoints[i](1) / 3.; 62 90617 : _points[3*i+2](1) = 1./3. - 63 90617 : gausspoints[i](0) / 3. + 64 88015 : gausspoints[i](1) * 2./3.; 65 93219 : _weights[3*i] = gaussweights[i] / 3.; 66 88015 : _weights[3*i+1] = _weights[3*i]; 67 90617 : _weights[3*i+2] = _weights[3*i]; 68 : } 69 7038 : return; 70 : } 71 : 72 : 73 : //--------------------------------------------- 74 : // Unsupported type 75 0 : default: 76 0 : libmesh_error_msg("Element type not supported: " << Utility::enum_to_string(_type)); 77 : } 78 : #endif 79 : } 80 : 81 : } // namespace libMesh