$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_grid.h" 00022 00023 namespace libMesh 00024 { 00025 00026 00027 void QGrid::init_2D(const ElemType type_in, 00028 unsigned int) 00029 { 00030 #if LIBMESH_DIM > 1 00031 00032 //----------------------------------------------------------------------- 00033 // 2D quadrature rules 00034 00035 // We ignore p - the grid rule is just for experimentation 00036 00037 switch (type_in) 00038 { 00039 00040 00041 //--------------------------------------------- 00042 // Quadrilateral quadrature rules 00043 case QUAD4: 00044 case QUAD8: 00045 case QUAD9: 00046 { 00047 // We compute the 2D quadrature rule as a tensor 00048 // product of the 1D quadrature rule. 00049 QGrid q1D(1,_order); 00050 q1D.init(EDGE2); 00051 tensor_product_quad( q1D ); 00052 return; 00053 } 00054 00055 00056 //--------------------------------------------- 00057 // Triangle quadrature rules 00058 case TRI3: 00059 case TRI6: 00060 { 00061 const unsigned int np = (_order + 1)*(_order + 2)/2; 00062 const Real weight = 0.5/np; 00063 const Real dx = 1.0/(_order+1); 00064 _points.resize(np); 00065 _weights.resize(np); 00066 00067 unsigned int pt = 0; 00068 for (int i = 0; i != _order + 1; ++i) 00069 { 00070 for (int j = 0; j != _order + 1 - i; ++j) 00071 { 00072 _points[pt](0) = (i+0.5)*dx; 00073 _points[pt](1) = (j+0.5)*dx; 00074 _weights[pt] = weight; 00075 pt++; 00076 } 00077 } 00078 return; 00079 } 00080 00081 //--------------------------------------------- 00082 // Unsupported type 00083 default: 00084 libmesh_error_msg("Element type not supported!:" << type_in); 00085 } 00086 #endif 00087 } 00088 00089 } // namespace libMesh