$extrastylesheet
00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 00003 00004 // This library is free software; you can redistribute it and/or 00005 // modify it under the terms of the GNU Lesser General Public 00006 // License as published by the Free Software Foundation; either 00007 // version 2.1 of the License, or (at your option) any later version. 00008 00009 // This library is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 // Lesser General Public License for more details. 00013 00014 // You should have received a copy of the GNU Lesser General Public 00015 // License along with this library; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 00018 00019 00020 // Local includes 00021 #include "libmesh/quadrature_simpson.h" 00022 00023 namespace libMesh 00024 { 00025 00026 00027 00028 void QSimpson::init_2D(const ElemType type_in, 00029 unsigned int) 00030 { 00031 #if LIBMESH_DIM > 1 00032 00033 //----------------------------------------------------------------------- 00034 // 2D quadrature rules 00035 switch (type_in) 00036 { 00037 00038 00039 //--------------------------------------------- 00040 // Quadrilateral quadrature rules 00041 case QUAD4: 00042 case QUAD8: 00043 case QUAD9: 00044 { 00045 // We compute the 2D quadrature rule as a tensor 00046 // product of the 1D quadrature rule. 00047 QSimpson q1D(1); 00048 q1D.init(EDGE2); 00049 tensor_product_quad( q1D ); 00050 return; 00051 } 00052 00053 00054 //--------------------------------------------- 00055 // Triangle quadrature rules 00056 case TRI3: 00057 case TRI6: 00058 { 00059 // I'm not sure if you would call this Simpson's 00060 // rule for triangles. What it *Really* is is 00061 // four trapezoidal rules combined to give a six 00062 // point rule. The points lie at the nodal locations 00063 // of the TRI6, so you can get diagonal element 00064 // stiffness matrix entries for quadratic elements. 00065 // This rule should be able to integrate a little 00066 // better than linears exactly. 00067 00068 _points.resize(6); 00069 _weights.resize(6); 00070 00071 _points[0](0) = 0.; 00072 _points[0](1) = 0.; 00073 00074 _points[1](0) = 1.; 00075 _points[1](1) = 0.; 00076 00077 _points[2](0) = 0.; 00078 _points[2](1) = 1.; 00079 00080 _points[3](0) = 0.5; 00081 _points[3](1) = 0.; 00082 00083 _points[4](0) = 0.; 00084 _points[4](1) = 0.5; 00085 00086 _points[5](0) = 0.5; 00087 _points[5](1) = 0.5; 00088 00089 _weights[0] = 0.041666666666666666666666666667; // 1./24. 00090 _weights[1] = 0.041666666666666666666666666667; // 1./24. 00091 _weights[2] = 0.041666666666666666666666666667; // 1./24. 00092 _weights[3] = 0.125; // 1./8. 00093 _weights[4] = 0.125; // 1./8. 00094 _weights[5] = 0.125; // 1./8. 00095 00096 return; 00097 } 00098 00099 00100 //--------------------------------------------- 00101 // Unsupported type 00102 default: 00103 libmesh_error_msg("Element type not supported!:" << type_in); 00104 } 00105 #endif 00106 } 00107 00108 } // namespace libMesh