quadrature_grid_2D.C
Go to the documentation of this file.00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2012 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 _points.resize((_order + 1)*(_order + 2)/2); 00062 _weights.resize((_order + 1)*(_order + 2)/2); 00063 00064 unsigned int pt = 0; 00065 for (int i = 0; i != _order + 1; ++i) 00066 { 00067 for (int j = 0; j != _order + 1 - i; ++j) 00068 { 00069 _points[pt](0) = (double)i / (double)_order; 00070 _points[pt](1) = (double)j / (double)_order; 00071 _weights[pt] = 1.0 / (double)(_order+1) / 00072 (double)(_order+2); 00073 pt++; 00074 } 00075 } 00076 return; 00077 } 00078 00079 //--------------------------------------------- 00080 // Unsupported type 00081 default: 00082 { 00083 libMesh::err << "Element type not supported!:" << type_in << std::endl; 00084 libmesh_error(); 00085 } 00086 } 00087 00088 libmesh_error(); 00089 00090 return; 00091 00092 #endif 00093 } 00094 00095 } // namespace libMesh
Site Created By: libMesh Developers
Last modified: February 05 2013 19:54:48 UTC
Hosted By: