22 #include "libmesh/fe.h" 
   23 #include "libmesh/elem.h" 
   37   libmesh_error_msg(
"XYZ polynomials require the element \nbecause the centroid is needed.");
 
   45                       const Order libmesh_dbg_var(order),
 
   47                       const Point & point_in,
 
   48                       const bool libmesh_dbg_var(add_p_level))
 
   57     for (
unsigned int d = 0; d < 2; d++)
 
   60         max_distance(d) = std::max(
distance, max_distance(d));
 
   63   const Real x  = point_in(0);
 
   64   const Real y  = point_in(1);
 
   65   const Real xc = centroid(0);
 
   66   const Real yc = centroid(1);
 
   67   const Real distx = max_distance(0);
 
   68   const Real disty = max_distance(1);
 
   69   const Real dx = (x - xc)/distx;
 
   70   const Real dy = (y - yc)/disty;
 
   75   const unsigned int totalorder = order + add_p_level * elem->
p_level();
 
   77   libmesh_assert_less (i, (totalorder+1)*(totalorder+2)/2);
 
  135       for (; i >= (o+1)*(o+2)/2; o++) { }
 
  136       unsigned int i2 = i - (o*(o+1)/2);
 
  138       for (
unsigned int index=i2; index != o; index++)
 
  140       for (
unsigned int index=0; index != i2; index++)
 
  145 #else // LIBMESH_DIM <= 1 
  148   libmesh_not_implemented();
 
  161   libmesh_error_msg(
"XYZ polynomials require the element \nbecause the centroid is needed.");
 
  169                             const Order libmesh_dbg_var(order),
 
  170                             const unsigned int i,
 
  171                             const unsigned int j,
 
  172                             const Point & point_in,
 
  173                             const bool libmesh_dbg_var(add_p_level))
 
  178   libmesh_assert_less (j, 2);
 
  184     for (
unsigned int d = 0; d < 2; d++)
 
  187         max_distance(d) = std::max(
distance, max_distance(d));
 
  190   const Real x  = point_in(0);
 
  191   const Real y  = point_in(1);
 
  192   const Real xc = centroid(0);
 
  193   const Real yc = centroid(1);
 
  194   const Real distx = max_distance(0);
 
  195   const Real disty = max_distance(1);
 
  196   const Real dx = (x - xc)/distx;
 
  197   const Real dy = (y - yc)/disty;
 
  202   const unsigned int totalorder = order + add_p_level * elem->
p_level();
 
  204   libmesh_assert_less (i, (totalorder+1)*(totalorder+2)/2);
 
  238             return 3.*dx*dx/distx;
 
  241             return 2.*dx*dy/distx;
 
  251             return 4.*dx*dx*dx/distx;
 
  254             return 3.*dx*dx*dy/distx;
 
  257             return 2.*dx*dy*dy/distx;
 
  260             return dy*dy*dy/distx;
 
  267             for (; i >= (o+1)*(o+2)/2; o++) { }
 
  268             unsigned int i2 = i - (o*(o+1)/2);
 
  270             for (
unsigned int index=i2+1; index < o; index++)
 
  272             for (
unsigned int index=0; index != i2; index++)
 
  313             return 2.*dx*dy/disty;
 
  316             return 3.*dy*dy/disty;
 
  323             return dx*dx*dx/disty;
 
  326             return 2.*dx*dx*dy/disty;
 
  329             return 3.*dx*dy*dy/disty;
 
  332             return 4.*dy*dy*dy/disty;
 
  336             for (; i >= (o+1)*(o+2)/2; o++) { }
 
  337             unsigned int i2 = i - (o*(o+1)/2);
 
  339             for (
unsigned int index=i2; index != o; index++)
 
  341             for (
unsigned int index=1; index <= i2; index++)
 
  349       libmesh_error_msg(
"Invalid j = " << j);
 
  352 #else // LIBMESH_DIM <= 1 
  355   libmesh_not_implemented();
 
  360 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 
  369   libmesh_error_msg(
"XYZ polynomials require the element \nbecause the centroid is needed.");
 
  377                                    const Order libmesh_dbg_var(order),
 
  378                                    const unsigned int i,
 
  379                                    const unsigned int j,
 
  380                                    const Point & point_in,
 
  381                                    const bool libmesh_dbg_var(add_p_level))
 
  385   libmesh_assert_less_equal (j, 2);
 
  390   for (
unsigned int p = 0; p < elem->
n_nodes(); p++)
 
  391     for (
unsigned int d = 0; d < 2; d++)
 
  394         max_distance(d) = std::max(
distance, max_distance(d));
 
  397   const Real x  = point_in(0);
 
  398   const Real y  = point_in(1);
 
  399   const Real xc = centroid(0);
 
  400   const Real yc = centroid(1);
 
  401   const Real distx = max_distance(0);
 
  402   const Real disty = max_distance(1);
 
  403   const Real dx = (x - xc)/distx;
 
  404   const Real dy = (y - yc)/disty;
 
  405   const Real dist2x = 
pow(distx,2.);
 
  406   const Real dist2y = 
pow(disty,2.);
 
  407   const Real distxy = distx * disty;
 
  412   const unsigned int totalorder = order + add_p_level * elem->
p_level();
 
  414   libmesh_assert_less (i, (totalorder+1)*(totalorder+2)/2);
 
  453             return 12.*dx*dx/dist2x;
 
  456             return 6.*dx*dy/dist2x;
 
  459             return 2.*dy*dy/dist2x;
 
  467             for (; i >= (o+1)*(o+2)/2; o++) { }
 
  468             unsigned int i2 = i - (o*(o+1)/2);
 
  469             Real val = (o - i2) * (o - i2 - 1);
 
  470             for (
unsigned int index=i2+2; index < o; index++)
 
  472             for (
unsigned int index=0; index != i2; index++)
 
  518             return 3.*dx*dx/distxy;
 
  521             return 4.*dx*dy/distxy;
 
  524             return 3.*dy*dy/distxy;
 
  531             for (; i >= (o+1)*(o+2)/2; o++) { }
 
  532             unsigned int i2 = i - (o*(o+1)/2);
 
  533             Real val = (o - i2) * i2;
 
  534             for (
unsigned int index=i2+1; index < o; index++)
 
  536             for (
unsigned int index=1; index < i2; index++)
 
  582             return 2.*dx*dx/dist2y;
 
  585             return 6.*dx*dy/dist2y;
 
  588             return 12.*dy*dy/dist2y;
 
  592             for (; i >= (o+1)*(o+2)/2; o++) { }
 
  593             unsigned int i2 = i - (o*(o+1)/2);
 
  594             Real val = i2 * (i2 - 1);
 
  595             for (
unsigned int index=i2; index != o; index++)
 
  597             for (
unsigned int index=2; index < i2; index++)
 
  604       libmesh_error_msg(
"Invalid shape function derivative j = " << j);
 
  607 #else // LIBMESH_DIM <= 1 
  610   libmesh_not_implemented();