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