LCOV - code coverage report
Current view: top level - src/fe - fe_interface_inf_fe.C (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4475 (55045b) with base a68cc6 Lines: 12 281 4.3 %
Date: 2026-06-03 14:29:06 Functions: 3 19 15.8 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // The libMesh Finite Element Library.
       2             : // Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
       3             : 
       4             : // This library is free software; you can redistribute it and/or
       5             : // modify it under the terms of the GNU Lesser General Public
       6             : // License as published by the Free Software Foundation; either
       7             : // version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             : // This library is distributed in the hope that it will be useful,
      10             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             : // Lesser General Public License for more details.
      13             : 
      14             : // You should have received a copy of the GNU Lesser General Public
      15             : // License along with this library; if not, write to the Free Software
      16             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      17             : 
      18             : 
      19             : 
      20             : // Local includes
      21             : #include "libmesh/libmesh_config.h"
      22             : 
      23             : #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
      24             : 
      25             : #include "libmesh/fe_interface.h"
      26             : #include "libmesh/fe_interface_macros.h"
      27             : #include "libmesh/inf_fe.h"
      28             : #include "libmesh/elem.h"
      29             : #include "libmesh/enum_to_string.h"
      30             : 
      31             : namespace libMesh
      32             : {
      33             : 
      34             : //------------------------------------------------------------
      35             : //FEInterface class members handling calls to InfFE
      36             : 
      37             : 
      38             : 
      39           0 : unsigned int FEInterface::ifem_n_shape_functions(const FEType & fe_t,
      40             :                                                  const Elem * elem)
      41             : {
      42           0 :   switch (elem->dim())
      43             :     {
      44             :       // 1D
      45           0 :     case 1:
      46             :       /*
      47             :        * Since InfFE<Dim,T_radial,T_map>::n_shape_functions(...)
      48             :        * is actually independent of T_radial and T_map, we can use
      49             :        * just any T_radial and T_map
      50             :        */
      51           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, elem);
      52             : 
      53             :       // 2D
      54           0 :     case 2:
      55           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, elem);
      56             : 
      57             :       // 3D
      58           0 :     case 3:
      59           0 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_shape_functions(fe_t, elem);
      60             : 
      61           0 :     default:
      62           0 :       libmesh_error_msg("Unsupported dim = " << elem->dim());
      63             :     }
      64             : }
      65             : 
      66             : 
      67             : 
      68             : unsigned int
      69      227358 : FEInterface::ifem_n_dofs(const FEType & fe_t,
      70             :                          const Elem * elem)
      71             : {
      72      227358 :   switch (elem->dim())
      73             :     {
      74             :       // 1D
      75           0 :     case 1:
      76             :       /*
      77             :        * Since InfFE<Dim,T_radial,T_map>::n_dofs(...)
      78             :        * is actually independent of T_radial and T_map, we can use
      79             :        * just any T_radial and T_map
      80             :        */
      81           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, elem);
      82             : 
      83             :       // 2D
      84           0 :     case 2:
      85           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, elem);
      86             : 
      87             :       // 3D
      88      227358 :     case 3:
      89      227358 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs(fe_t, elem);
      90             : 
      91           0 :     default:
      92           0 :       libmesh_error_msg("Unsupported dim = " << elem->dim());
      93             :     }
      94             : }
      95             : 
      96             : 
      97             : 
      98             : #ifdef LIBMESH_ENABLE_DEPRECATED
      99           0 : unsigned int FEInterface::ifem_n_dofs_at_node(const unsigned int dim,
     100             :                                               const FEType & fe_t,
     101             :                                               const ElemType t,
     102             :                                               const unsigned int n)
     103             : {
     104             :   libmesh_deprecated();
     105             : 
     106           0 :   switch (dim)
     107             :     {
     108             :       // 1D
     109           0 :     case 1:
     110             :       /*
     111             :        * Since InfFE<Dim,T_radial,T_map>::n_dofs_at_node(...)
     112             :        * is actually independent of T_radial and T_map, we can use
     113             :        * just any T_radial and T_map
     114             :        */
     115           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n);
     116             : 
     117             :       // 2D
     118           0 :     case 2:
     119           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n);
     120             : 
     121             :       // 3D
     122           0 :     case 3:
     123           0 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, t, n);
     124             : 
     125           0 :     default:
     126           0 :       libmesh_error_msg("Unsupported dim = " << dim);
     127             :     }
     128             : }
     129             : #endif // LIBMESH_ENABLE_DEPRECATED
     130             : 
     131             : 
     132             : 
     133      258920 : unsigned int FEInterface::ifem_n_dofs_at_node(const FEType & fe_t,
     134             :                                               const Elem * elem,
     135             :                                               const unsigned int n)
     136             : {
     137      258920 :   switch (elem->dim())
     138             :     {
     139             :       // 1D
     140           0 :     case 1:
     141             :       /*
     142             :        * Since InfFE<Dim,T_radial,T_map>::n_dofs_at_node(...)
     143             :        * is actually independent of T_radial and T_map, we can use
     144             :        * just any T_radial and T_map
     145             :        */
     146           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, elem, n);
     147             : 
     148             :       // 2D
     149           0 :     case 2:
     150           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, elem, n);
     151             : 
     152             :       // 3D
     153      258920 :     case 3:
     154      258920 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_at_node(fe_t, elem, n);
     155             : 
     156           0 :     default:
     157           0 :       libmesh_error_msg("Unsupported dim = " << elem->dim());
     158             :     }
     159             : }
     160             : 
     161             : 
     162             : 
     163             : 
     164             : 
     165             : #ifdef LIBMESH_ENABLE_DEPRECATED
     166           0 : unsigned int FEInterface::ifem_n_dofs_per_elem(const unsigned int dim,
     167             :                                                const FEType & fe_t,
     168             :                                                const ElemType t)
     169             : {
     170             :   libmesh_deprecated();
     171             : 
     172           0 :   switch (dim)
     173             :     {
     174             :       // 1D
     175           0 :     case 1:
     176             :       /*
     177             :        * Since InfFE<Dim,T_radial,T_map>::n_dofs(...)
     178             :        * is actually independent of T_radial and T_map, we can use
     179             :        * just any T_radial and T_map
     180             :        */
     181           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t);
     182             : 
     183             :       // 2D
     184           0 :     case 2:
     185           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t);
     186             : 
     187             :       // 3D
     188           0 :     case 3:
     189           0 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, t);
     190             : 
     191           0 :     default:
     192           0 :       libmesh_error_msg("Unsupported dim = " << dim);
     193             :     }
     194             : }
     195             : #endif // LIBMESH_ENABLE_DEPRECATED
     196             : 
     197             : 
     198             : 
     199       22796 : unsigned int FEInterface::ifem_n_dofs_per_elem(const FEType & fe_t,
     200             :                                                const Elem * elem)
     201             : {
     202       22796 :   switch (elem->dim())
     203             :     {
     204             :       // 1D
     205           0 :     case 1:
     206             :       /*
     207             :        * Since InfFE<Dim,T_radial,T_map>::n_dofs(...)
     208             :        * is actually independent of T_radial and T_map, we can use
     209             :        * just any T_radial and T_map
     210             :        */
     211           0 :       return InfFE<1,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, elem);
     212             : 
     213             :       // 2D
     214           0 :     case 2:
     215           0 :       return InfFE<2,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, elem);
     216             : 
     217             :       // 3D
     218       22796 :     case 3:
     219       22796 :       return InfFE<3,JACOBI_20_00,CARTESIAN>::n_dofs_per_elem(fe_t, elem);
     220             : 
     221           0 :     default:
     222           0 :       libmesh_error_msg("Unsupported dim = " << elem->dim());
     223             :     }
     224             : }
     225             : 
     226             : 
     227             : 
     228             : 
     229           0 : void FEInterface::ifem_nodal_soln(const unsigned int dim,
     230             :                                   const FEType & fe_t,
     231             :                                   const Elem * elem,
     232             :                                   const std::vector<Number> & elem_soln,
     233             :                                   std::vector<Number> & nodal_soln)
     234             : {
     235           0 :   switch (dim)
     236             :     {
     237             : 
     238             :       // 1D
     239           0 :     case 1:
     240             :       {
     241           0 :         switch (fe_t.radial_family)
     242             :           {
     243           0 :           case INFINITE_MAP:
     244           0 :             libmesh_error_msg("ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
     245             : 
     246           0 :           case JACOBI_20_00:
     247             :             {
     248           0 :               switch (fe_t.inf_map)
     249             :                 {
     250           0 :                 case CARTESIAN:
     251             :                   {
     252           0 :                     InfFE<1,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     253           0 :                     break;
     254             :                   }
     255           0 :                 default:
     256           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     257             :                 }
     258           0 :               break;
     259             :             }
     260             : 
     261           0 :           case JACOBI_30_00:
     262             :             {
     263           0 :               switch (fe_t.inf_map)
     264             :                 {
     265           0 :                 case CARTESIAN:
     266             :                   {
     267           0 :                     InfFE<1,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     268           0 :                     break;
     269             :                   }
     270           0 :                 default:
     271           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     272             :                 }
     273           0 :               break;
     274             :             }
     275             : 
     276           0 :           case LEGENDRE:
     277             :             {
     278           0 :               switch (fe_t.inf_map)
     279             :                 {
     280           0 :                 case CARTESIAN:
     281             :                   {
     282           0 :                     InfFE<1,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     283           0 :                     break;
     284             :                   }
     285           0 :                 default:
     286           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     287             :                 }
     288           0 :               break;
     289             :             }
     290             : 
     291           0 :           case LAGRANGE:
     292             :             {
     293           0 :               switch (fe_t.inf_map)
     294             :                 {
     295           0 :                 case CARTESIAN:
     296             :                   {
     297           0 :                     InfFE<1,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     298           0 :                     break;
     299             :                   }
     300           0 :                 default:
     301           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     302             :                 }
     303           0 :               break;
     304             :             }
     305             : 
     306           0 :           default:
     307           0 :             libmesh_error_msg("ERROR: Bad FEType.radial_family == " << Utility::enum_to_string(fe_t.radial_family));
     308             :           }
     309             : 
     310           0 :         break;
     311             :       }
     312             : 
     313             : 
     314             : 
     315             : 
     316             :       // 2D
     317           0 :     case 2:
     318             :       {
     319           0 :         switch (fe_t.radial_family)
     320             :           {
     321           0 :           case INFINITE_MAP:
     322           0 :             libmesh_error_msg("ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
     323             : 
     324           0 :           case JACOBI_20_00:
     325             :             {
     326           0 :               switch (fe_t.inf_map)
     327             :                 {
     328           0 :                 case CARTESIAN:
     329             :                   {
     330           0 :                     InfFE<2,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     331           0 :                     break;
     332             :                   }
     333           0 :                 default:
     334           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     335             :                 }
     336           0 :               break;
     337             :             }
     338             : 
     339           0 :           case JACOBI_30_00:
     340             :             {
     341           0 :               switch (fe_t.inf_map)
     342             :                 {
     343           0 :                 case CARTESIAN:
     344             :                   {
     345           0 :                     InfFE<2,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     346           0 :                     break;
     347             :                   }
     348           0 :                 default:
     349           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     350             :                 }
     351           0 :               break;
     352             :             }
     353             : 
     354           0 :           case LEGENDRE:
     355             :             {
     356           0 :               switch (fe_t.inf_map)
     357             :                 {
     358           0 :                 case CARTESIAN:
     359             :                   {
     360           0 :                     InfFE<2,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     361           0 :                     break;
     362             :                   }
     363           0 :                 default:
     364           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     365             :                 }
     366           0 :               break;
     367             :             }
     368             : 
     369           0 :           case LAGRANGE:
     370             :             {
     371           0 :               switch (fe_t.inf_map)
     372             :                 {
     373           0 :                 case CARTESIAN:
     374             :                   {
     375           0 :                     InfFE<2,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     376           0 :                     break;
     377             :                   }
     378           0 :                 default:
     379           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     380             :                 }
     381           0 :               break;
     382             :             }
     383             : 
     384           0 :           default:
     385           0 :             libmesh_error_msg("ERROR: Bad FEType.radial_family == " << Utility::enum_to_string(fe_t.radial_family));
     386             :           }
     387             : 
     388           0 :         break;
     389             :       }
     390             : 
     391             : 
     392             : 
     393             : 
     394             :       // 3D
     395           0 :     case 3:
     396             :       {
     397           0 :         switch (fe_t.radial_family)
     398             :           {
     399           0 :           case INFINITE_MAP:
     400           0 :             libmesh_error_msg("ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
     401             : 
     402           0 :           case JACOBI_20_00:
     403             :             {
     404           0 :               switch (fe_t.inf_map)
     405             :                 {
     406           0 :                 case CARTESIAN:
     407             :                   {
     408           0 :                     InfFE<3,JACOBI_20_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     409           0 :                     break;
     410             :                   }
     411           0 :                 default:
     412           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     413             :                 }
     414           0 :               break;
     415             :             }
     416             : 
     417           0 :           case JACOBI_30_00:
     418             :             {
     419           0 :               switch (fe_t.inf_map)
     420             :                 {
     421           0 :                 case CARTESIAN:
     422             :                   {
     423           0 :                     InfFE<3,JACOBI_30_00,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     424           0 :                     break;
     425             :                   }
     426           0 :                 default:
     427           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     428             :                 }
     429           0 :               break;
     430             :             }
     431             : 
     432           0 :           case LEGENDRE:
     433             :             {
     434           0 :               switch (fe_t.inf_map)
     435             :                 {
     436           0 :                 case CARTESIAN:
     437             :                   {
     438           0 :                     InfFE<3,LEGENDRE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     439           0 :                     break;
     440             :                   }
     441           0 :                 default:
     442           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     443             :                 }
     444           0 :               break;
     445             :             }
     446             : 
     447           0 :           case LAGRANGE:
     448             :             {
     449           0 :               switch (fe_t.inf_map)
     450             :                 {
     451           0 :                 case CARTESIAN:
     452             :                   {
     453           0 :                     InfFE<3,LAGRANGE,CARTESIAN>::nodal_soln(fe_t, elem, elem_soln, nodal_soln);
     454           0 :                     break;
     455             :                   }
     456           0 :                 default:
     457           0 :                   libmesh_error_msg("ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
     458             :                 }
     459           0 :               break;
     460             :             }
     461             : 
     462             : 
     463             : 
     464           0 :           default:
     465           0 :             libmesh_error_msg("ERROR: Bad FEType.radial_family == " << Utility::enum_to_string(fe_t.radial_family));
     466             :           }
     467             : 
     468           0 :         break;
     469             :       }
     470             : 
     471           0 :     default:
     472           0 :       libmesh_error_msg("Invalid dim = " << dim);
     473             :     }
     474           0 : }
     475             : 
     476             : 
     477             : 
     478             : 
     479           0 : Point FEInterface::ifem_map (const unsigned int dim,
     480             :                              const FEType & fe_t,
     481             :                              const Elem * elem,
     482             :                              const Point & p)
     483             : {
     484           0 :   switch (fe_t.inf_map)
     485             :     {
     486           0 :     case CARTESIAN:
     487             :       {
     488           0 :         switch (dim)
     489             :           {
     490           0 :           case 1:
     491           0 :             return InfFE<1,JACOBI_20_00,CARTESIAN>::map(elem, p);
     492           0 :           case 2:
     493           0 :             return InfFE<2,JACOBI_20_00,CARTESIAN>::map(elem, p);
     494           0 :           case 3:
     495           0 :             return InfFE<3,JACOBI_20_00,CARTESIAN>::map(elem, p);
     496           0 :           default:
     497           0 :             libmesh_error_msg("Invalid dim = " << dim);
     498             :           }
     499             :       }
     500           0 :     case SPHERICAL:
     501             :     case ELLIPSOIDAL:
     502           0 :       libmesh_not_implemented_msg("ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
     503           0 :     default:
     504           0 :       libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     505             :     }
     506             : }
     507             : 
     508             : 
     509             : 
     510           0 : Point FEInterface::ifem_inverse_map (const unsigned int dim,
     511             :                                      const FEType & fe_t,
     512             :                                      const Elem * elem,
     513             :                                      const Point & p,
     514             :                                      const Real tolerance,
     515             :                                      const bool secure)
     516             : {
     517           0 :   switch (dim)
     518             :     {
     519             :       // 1D
     520           0 :     case 1:
     521             :       {
     522           0 :         switch (fe_t.inf_map)
     523             :           {
     524           0 :           case CARTESIAN:
     525           0 :             return InfFE<1,JACOBI_20_00,CARTESIAN>::inverse_map(elem, p, tolerance, secure);
     526             : 
     527           0 :           case SPHERICAL:
     528             :           case ELLIPSOIDAL:
     529           0 :             libmesh_not_implemented_msg("ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
     530             : 
     531             :             /*
     532             :               case SPHERICAL:
     533             :               return InfFE<1,JACOBI_20_00,SPHERICAL>::inverse_map(elem, p, tolerance);
     534             : 
     535             :               case ELLIPSOIDAL:
     536             :               return InfFE<1,JACOBI_20_00,ELLIPSOIDAL>::inverse_map(elem, p, tolerance);
     537             :             */
     538             : 
     539           0 :           default:
     540           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     541             :           }
     542             :       }
     543             : 
     544             : 
     545             :       // 2D
     546           0 :     case 2:
     547             :       {
     548           0 :         switch (fe_t.inf_map)
     549             :           {
     550           0 :           case CARTESIAN:
     551           0 :             return InfFE<2,JACOBI_20_00,CARTESIAN>::inverse_map(elem, p, tolerance, secure);
     552             : 
     553           0 :           case SPHERICAL:
     554             :           case ELLIPSOIDAL:
     555           0 :             libmesh_not_implemented_msg("ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
     556             : 
     557             :             /*
     558             :               case SPHERICAL:
     559             :               return InfFE<2,JACOBI_20_00,SPHERICAL>::inverse_map(elem, p, tolerance);
     560             : 
     561             :               case ELLIPSOIDAL:
     562             :               return InfFE<2,JACOBI_20_00,ELLIPSOIDAL>::inverse_map(elem, p, tolerance);
     563             :             */
     564             : 
     565           0 :           default:
     566           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     567             :           }
     568             :       }
     569             : 
     570             : 
     571             :       // 3D
     572           0 :     case 3:
     573             :       {
     574           0 :         switch (fe_t.inf_map)
     575             :           {
     576           0 :           case CARTESIAN:
     577           0 :             return InfFE<3,JACOBI_20_00,CARTESIAN>::inverse_map(elem, p, tolerance, secure);
     578             : 
     579           0 :           case SPHERICAL:
     580             :           case ELLIPSOIDAL:
     581           0 :             libmesh_not_implemented_msg("ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
     582             : 
     583             :             /*
     584             :               case SPHERICAL:
     585             :               return InfFE<3,JACOBI_20_00,SPHERICAL>::inverse_map(elem, p, tolerance);
     586             : 
     587             :               case ELLIPSOIDAL:
     588             :               return InfFE<3,JACOBI_20_00,ELLIPSOIDAL>::inverse_map(elem, p, tolerance);
     589             :             */
     590             : 
     591           0 :           default:
     592           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     593             :           }
     594             :       }
     595             : 
     596           0 :     default:
     597           0 :       libmesh_error_msg("Invalid dim = " << dim);
     598             :     }
     599             : }
     600             : 
     601             : 
     602             : 
     603           0 : void FEInterface::ifem_inverse_map (const unsigned int dim,
     604             :                                     const FEType & fe_t,
     605             :                                     const Elem * elem,
     606             :                                     const std::vector<Point> & physical_points,
     607             :                                     std::vector<Point> &       reference_points,
     608             :                                     const Real tolerance,
     609             :                                     const bool secure)
     610             : {
     611           0 :   switch (dim)
     612             :     {
     613             :       // 1D
     614           0 :     case 1:
     615             :       {
     616           0 :         switch (fe_t.inf_map)
     617             :           {
     618           0 :           case CARTESIAN:
     619           0 :             InfFE<1,JACOBI_20_00,CARTESIAN>::inverse_map(elem, physical_points, reference_points, tolerance, secure);
     620           0 :             return;
     621             : 
     622           0 :           default:
     623           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     624             :           }
     625             :       }
     626             : 
     627             : 
     628             :       // 2D
     629           0 :     case 2:
     630             :       {
     631           0 :         switch (fe_t.inf_map)
     632             :           {
     633           0 :           case CARTESIAN:
     634           0 :             InfFE<2,JACOBI_20_00,CARTESIAN>::inverse_map(elem, physical_points, reference_points, tolerance, secure);
     635           0 :             return;
     636             : 
     637           0 :           default:
     638           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     639             :           }
     640             :       }
     641             : 
     642             : 
     643             :       // 3D
     644           0 :     case 3:
     645             :       {
     646           0 :         switch (fe_t.inf_map)
     647             :           {
     648           0 :           case CARTESIAN:
     649           0 :             InfFE<3,JACOBI_20_00,CARTESIAN>::inverse_map(elem, physical_points, reference_points, tolerance, secure);
     650           0 :             return;
     651             : 
     652           0 :           default:
     653           0 :             libmesh_error_msg("Invalid map = " << Utility::enum_to_string(fe_t.inf_map));
     654             :           }
     655             :       }
     656             : 
     657           0 :     default:
     658           0 :       libmesh_error_msg("Invalid dim = " << dim);
     659             :     }
     660             : }
     661             : 
     662             : 
     663             : 
     664             : #ifdef LIBMESH_ENABLE_DEPRECATED
     665           0 : bool FEInterface::ifem_on_reference_element(const Point & p,
     666             :                                             const ElemType t,
     667             :                                             const Real eps)
     668             : {
     669           0 :   return FEBase::on_reference_element(p,t,eps);
     670             : }
     671             : 
     672             : 
     673             : 
     674           0 : Real FEInterface::ifem_shape(const unsigned int dim,
     675             :                              const FEType & fe_t,
     676             :                              const ElemType t,
     677             :                              const unsigned int i,
     678             :                              const Point & p)
     679             : {
     680             :   libmesh_deprecated();
     681             : 
     682           0 :   inf_fe_switch(shape(fe_t, t, i, p));
     683             : }
     684             : 
     685             : 
     686             : 
     687           0 : Real FEInterface::ifem_shape(const unsigned int dim,
     688             :                              const FEType & fe_t,
     689             :                              const Elem * elem,
     690             :                              const unsigned int i,
     691             :                              const Point & p)
     692             : {
     693             :   libmesh_deprecated();
     694             : 
     695           0 :   inf_fe_switch( shape(fe_t, elem, i, p));
     696             : }
     697             : #endif // LIBMESH_ENABLE_DEPRECATED
     698             : 
     699             : 
     700             : 
     701           0 : Real FEInterface::ifem_shape(const FEType & fe_t,
     702             :                              const Elem * elem,
     703             :                              const unsigned int i,
     704             :                              const Point & p)
     705             : {
     706             :   // The inf_fe_switch macro requires a "dim" parameter.
     707           0 :   auto dim = elem->dim();
     708             : 
     709           0 :   inf_fe_switch( shape(fe_t, elem, i, p));
     710             : }
     711             : 
     712             : 
     713             : 
     714             : #ifdef LIBMESH_ENABLE_DEPRECATED
     715           0 : Real FEInterface::ifem_shape_deriv (const unsigned int dim,
     716             :                                     const FEType & fe_t,
     717             :                                     const Elem * elem,
     718             :                                     const unsigned int i,
     719             :                                     const unsigned int j,
     720             :                                     const Point & p)
     721             : {
     722             :   libmesh_deprecated();
     723             : 
     724           0 :   inf_fe_switch(shape_deriv(fe_t, elem, i, j, p));
     725             : }
     726             : 
     727             : 
     728             : 
     729           0 : Real FEInterface::ifem_shape_deriv(const unsigned int dim,
     730             :                                    const FEType & fe_t,
     731             :                                    const ElemType t,
     732             :                                    const unsigned int i,
     733             :                                    const unsigned int j,
     734             :                                    const Point & p)
     735             : {
     736             :   libmesh_deprecated();
     737             : 
     738           0 :   inf_fe_switch(shape_deriv(fe_t, t, i, j, p));
     739             : }
     740             : #endif // LIBMESH_ENABLE_DEPRECATED
     741             : 
     742             : 
     743             : 
     744           0 : Real FEInterface::ifem_shape_deriv (const FEType & fe_t,
     745             :                                     const Elem * elem,
     746             :                                     const unsigned int i,
     747             :                                     const unsigned int j,
     748             :                                     const Point & p)
     749             : {
     750             :   // The inf_fe_switch macro requires a "dim" parameter.
     751           0 :   auto dim = elem->dim();
     752             : 
     753           0 :   inf_fe_switch(shape_deriv(fe_t, elem, i, j, p));
     754             : }
     755             : 
     756             : 
     757           0 : void FEInterface::ifem_compute_data(const unsigned int dim,
     758             :                                     const FEType & fe_t,
     759             :                                     const Elem * elem,
     760             :                                     FEComputeData & data)
     761             : {
     762           0 :   switch (dim)
     763             :     {
     764           0 :     case 1:
     765             :       {
     766           0 :         inf_fe_family_mapping_switch(1, compute_data(fe_t, elem,data), , ;break;);
     767           0 :         break;
     768             :       }
     769           0 :     case 2:
     770             :       {
     771           0 :         inf_fe_family_mapping_switch(2, compute_data(fe_t, elem,data), , ;break;);
     772           0 :         break;
     773             :       }
     774           0 :     case 3:
     775             :       {
     776           0 :         inf_fe_family_mapping_switch(3, compute_data(fe_t, elem,data), , ;break;);
     777           0 :         break;
     778             :       }
     779             : 
     780             : 
     781           0 :     default:
     782           0 :       libmesh_error_msg("Invalid dim = " << dim);
     783             :       break;
     784             :     }
     785           0 : }
     786             : 
     787             : } // namespace libMesh
     788             : 
     789             : #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS

Generated by: LCOV version 1.14