📄 fe_interface_inf_fe.c
字号:
// $Id: fe_interface_inf_fe.C 2788 2008-04-13 02:05:22Z roystgnr $// The libMesh Finite Element Library.// Copyright (C) 2002-2007 Benjamin S. Kirk, John W. Peterson // This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version. // This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// Lesser General Public License for more details. // You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA// Local includes#include "libmesh_config.h"#ifdef ENABLE_INFINITE_ELEMENTS#include "fe_interface.h"#include "inf_fe.h"//------------------------------------------------------------//FEInterface class members handling calls to InfFEunsigned int FEInterface::ifem_n_shape_functions(const unsigned int dim, const FEType& fe_t, const ElemType t){ switch (dim) { // 1D case 1: /* * Since InfFE<Dim,T_radial,T_map>::n_shape_functions(...) * is actually independent of T_radial and T_map, we can use * just any T_radial and T_map */ return InfFE<1,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, t); // 2D case 2: return InfFE<2,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, t); // 3D case 3: return InfFE<3,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, t); default: libmesh_error(); } libmesh_error(); return 0;}unsigned int FEInterface::ifem_n_dofs(const unsigned int dim, const FEType& fe_t, const ElemType t){ switch (dim) { // 1D case 1: /* * Since InfFE<Dim,T_radial,T_map>::n_dofs(...) * is actually independent of T_radial and T_map, we can use * just any T_radial and T_map */ return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, t); // 2D case 2: return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, t); // 3D case 3: return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, t); default: libmesh_error(); } libmesh_error(); return 0;} unsigned int FEInterface::ifem_n_dofs_at_node(const unsigned int dim, const FEType& fe_t, const ElemType t, const unsigned int n){ switch (dim) { // 1D case 1: /* * Since InfFE<Dim,T_radial,T_map>::n_dofs_at_node(...) * is actually independent of T_radial and T_map, we can use * just any T_radial and T_map */ return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n); // 2D case 2: return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n); // 3D case 3: return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n); default: libmesh_error(); } libmesh_error(); return 0;}unsigned int FEInterface::ifem_n_dofs_per_elem(const unsigned int dim, const FEType& fe_t, const ElemType t){ switch (dim) { // 1D case 1: /* * Since InfFE<Dim,T_radial,T_map>::n_dofs(...) * is actually independent of T_radial and T_map, we can use * just any T_radial and T_map */ return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t); // 2D case 2: return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t); // 3D case 3: return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t); default: libmesh_error(); } libmesh_error(); return 0;}void FEInterface::ifem_nodal_soln(const unsigned int dim, const FEType& fe_t, const Elem* elem, const std::vector<Number>& elem_soln, std::vector<Number>& nodal_soln){ switch (dim) { // 1D case 1: { switch (fe_t.radial_family) { case INFINITE_MAP: { std::cerr << "ERROR: INFINTE_MAP is not a valid shape family for radial approximation." << std::endl; libmesh_error(); break; } case JACOBI_20_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<1,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case JACOBI_30_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<1,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LEGENDRE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<1,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LAGRANGE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<1,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } default: std::cerr << "ERROR: Bad FEType.radial_family= " << fe_t.radial_family << std::endl; libmesh_error(); break; } break; } // 2D case 2: { switch (fe_t.radial_family) { case INFINITE_MAP: { std::cerr << "ERROR: INFINTE_MAP is not a valid shape family for radial approximation." << std::endl; libmesh_error(); break; } case JACOBI_20_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<2,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case JACOBI_30_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<2,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LEGENDRE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<2,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LAGRANGE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<2,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } default: std::cerr << "ERROR: Bad FEType.radial_family= " << fe_t.radial_family << std::endl; libmesh_error(); break; } break; } // 3D case 3: { switch (fe_t.radial_family) { case INFINITE_MAP: { std::cerr << "ERROR: INFINTE_MAP is not a valid shape family for radial approximation." << std::endl; libmesh_error(); break; } case JACOBI_20_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<3,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case JACOBI_30_00: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<3,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LEGENDRE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<3,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } case LAGRANGE: { switch (fe_t.inf_map) { case CARTESIAN: { InfFE<3,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln); break; } default: std::cerr << "ERROR: Spherical & Ellipsoidal IFEMs not implemented." << std::endl; libmesh_error(); } break; } default: std::cerr << "ERROR: Bad FEType.radial_family= " << fe_t.radial_family << std::endl; libmesh_error(); break; } break; } default: libmesh_error(); } return;}Point FEInterface::ifem_inverse_map (const unsigned int dim, const FEType& fe_t, const Elem* elem, const Point& p, const Real tolerance, const bool secure){ switch (dim) { // 1D case 1: { switch (fe_t.inf_map) { case CARTESIAN: return InfFE<1,JACOBI_20_00,CARTESIAN>::inverse_map(elem, p, tolerance, secure); case SPHERICAL: case ELLIPSOIDAL: { std::cerr << "ERROR: Spherical and Ellipsoidal IFEMs not (yet) " << std::endl << "implemented." << std::endl; libmesh_error(); }/* case SPHERICAL: return InfFE<1,JACOBI_20_00,SPHERICAL>::inverse_map(elem, p, tolerance);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -