$extrastylesheet
quadrature_simpson_2D.C
Go to the documentation of this file.
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