⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fe_interface_inf_fe.c

📁 一个用来实现偏微分方程中网格的计算库
💻 C
📖 第 1 页 / 共 2 页
字号:
// $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 + -