21 #include "libmesh/libmesh_config.h" 
   22 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 
   23 #include "libmesh/inf_fe_map.h" 
   24 #include "libmesh/inf_fe.h" 
   25 #include "libmesh/fe.h" 
   26 #include "libmesh/elem.h" 
   27 #include "libmesh/inf_fe_macro.h" 
   28 #include "libmesh/libmesh_logging.h" 
   41                      const Elem * inf_elem,
 
   42                      const Point & reference_point)
 
   45   libmesh_assert_not_equal_to (
dim, 0);
 
   50   const Real         v                    (reference_point(
dim-1));
 
   57       base_point = inf_elem->
point(0);
 
   61       base_point = 
FEMap::map (
dim-1, base_elem.get(), reference_point);
 
   65       libmesh_error_msg(
"Unknown dim = " << 
dim);
 
   73   const Point outer_point (base_point * 2. - inf_elem->
origin());
 
   79   p.add_scaled (outer_point, 
eval (v, radial_mapping_order, 1));
 
   89                              const Elem * inf_elem,
 
   90                              const Point & physical_point,
 
   95   libmesh_assert_greater_equal (tolerance, 0.);
 
   99   LOG_SCOPE(
"inverse_map()", 
"InfFEMap");
 
  132       libmesh_error_msg(
"ERROR: InfFE::inverse_map is not yet implemented in 2d");
 
  137         const Point & p0 = base_elem->point(0);
 
  138         const Point & p1 = base_elem->point(1);
 
  139         const Point & p2 = base_elem->point(2);
 
  142         const Point & fp = physical_point;
 
  147         const Real c_factor = -(p1(0)*fp(1)*p0(2)-p1(0)*fp(2)*p0(1)
 
  148                                 +fp(0)*p1(2)*p0(1)-p0(0)*fp(1)*p1(2)
 
  149                                 +p0(0)*fp(2)*p1(1)+p2(0)*fp(2)*p0(1)
 
  150                                 -p2(0)*fp(1)*p0(2)-fp(0)*p2(2)*p0(1)
 
  151                                 +fp(0)*p0(2)*p2(1)+p0(0)*fp(1)*p2(2)
 
  152                                 -p0(0)*fp(2)*p2(1)-fp(0)*p0(2)*p1(1)
 
  153                                 +p0(2)*p2(0)*p1(1)-p0(1)*p2(0)*p1(2)
 
  154                                 -fp(0)*p1(2)*p2(1)+p2(1)*p0(0)*p1(2)
 
  155                                 -p2(0)*fp(2)*p1(1)-p1(0)*fp(1)*p2(2)
 
  156                                 +p2(2)*p1(0)*p0(1)+p1(0)*fp(2)*p2(1)
 
  157                                 -p0(2)*p1(0)*p2(1)-p2(2)*p0(0)*p1(1)
 
  158                                 +fp(0)*p2(2)*p1(1)+p2(0)*fp(1)*p1(2))/
 
  159           (fp(0)*p1(2)*p0(1)-p1(0)*fp(2)*p0(1)
 
  160            +p1(0)*fp(1)*p0(2)-p1(0)*o(1)*p0(2)
 
  161            +o(0)*p2(2)*p0(1)-p0(0)*fp(2)*p2(1)
 
  162            +p1(0)*o(1)*p2(2)+fp(0)*p0(2)*p2(1)
 
  163            -fp(0)*p1(2)*p2(1)-p0(0)*o(1)*p2(2)
 
  164            +p0(0)*fp(1)*p2(2)-o(0)*p0(2)*p2(1)
 
  165            +o(0)*p1(2)*p2(1)-p2(0)*fp(2)*p1(1)
 
  166            +fp(0)*p2(2)*p1(1)-p2(0)*fp(1)*p0(2)
 
  167            -o(2)*p0(0)*p1(1)-fp(0)*p0(2)*p1(1)
 
  168            +p0(0)*o(1)*p1(2)+p0(0)*fp(2)*p1(1)
 
  169            -p0(0)*fp(1)*p1(2)-o(0)*p1(2)*p0(1)
 
  170            -p2(0)*o(1)*p1(2)-o(2)*p2(0)*p0(1)
 
  171            -o(2)*p1(0)*p2(1)+o(2)*p0(0)*p2(1)
 
  172            -fp(0)*p2(2)*p0(1)+o(2)*p2(0)*p1(1)
 
  173            +p2(0)*o(1)*p0(2)+p2(0)*fp(1)*p1(2)
 
  174            +p2(0)*fp(2)*p0(1)-p1(0)*fp(1)*p2(2)
 
  175            +p1(0)*fp(2)*p2(1)-o(0)*p2(2)*p1(1)
 
  176            +o(2)*p1(0)*p0(1)+o(0)*p0(2)*p1(1));
 
  203       libmesh_error_msg(
"Invalid dim = " << 
dim);
 
  237   v = 1.-2.*a_dist/fp_o_dist;
 
  251   if (-1.-1.e-5 < v && v < 1.)
 
  254       const Point diff  = physical_point - check;
 
  256       if (diff.
norm() > tolerance)
 
  257         libmesh_warning(
"WARNING:  diff is " << diff.
norm());
 
  268                             const std::vector<Point> & physical_points,
 
  269                             std::vector<Point> &       reference_points,
 
  270                             const Real tolerance,
 
  275   const std::size_t n_points = physical_points.
size();
 
  279   reference_points.resize(n_points);
 
  283   for (
unsigned int p=0; p<n_points; p++)
 
  284     reference_points[p] =
 
  292 #endif //ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS