22 #include "libmesh/fe.h" 
   23 #include "libmesh/elem.h" 
   37   libmesh_error_msg(
"XYZ polynomials require the element because 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))
 
   55   for (
unsigned int p = 0; p < elem->
n_nodes(); p++)
 
   56     for (
unsigned int d = 0; d < 3; d++)
 
   59         max_distance(d) = std::max(
distance, max_distance(d));
 
   62   const Real x  = point_in(0);
 
   63   const Real y  = point_in(1);
 
   64   const Real z  = point_in(2);
 
   65   const Real xc = centroid(0);
 
   66   const Real yc = centroid(1);
 
   67   const Real zc = centroid(2);
 
   68   const Real distx = max_distance(0);
 
   69   const Real disty = max_distance(1);
 
   70   const Real distz = max_distance(2);
 
   71   const Real dx = (x - xc)/distx;
 
   72   const Real dy = (y - yc)/disty;
 
   73   const Real dz = (z - zc)/distz;
 
   78   const unsigned int totalorder = order + add_p_level * elem->
p_level();
 
   80   libmesh_assert_less (i, (totalorder+1) * (totalorder+2) *
 
  198       for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  199       unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  200       unsigned int block=o, nz = 0;
 
  201       for (; block < i2; block += (o-nz+1)) { nz++; }
 
  202       const unsigned int nx = block - i2;
 
  203       const unsigned int ny = o - nx - nz;
 
  205       for (
unsigned int index=0; index != nx; index++)
 
  207       for (
unsigned int index=0; index != ny; index++)
 
  209       for (
unsigned int index=0; index != nz; index++)
 
  214 #else // LIBMESH_DIM != 3 
  217   libmesh_not_implemented();
 
  230   libmesh_error_msg(
"XYZ polynomials require the element \nbecause the centroid is needed.");
 
  238                             const Order libmesh_dbg_var(order),
 
  239                             const unsigned int i,
 
  240                             const unsigned int j,
 
  241                             const Point & point_in,
 
  242                             const bool libmesh_dbg_var(add_p_level))
 
  247   libmesh_assert_less (j, 3);
 
  251   for (
unsigned int p = 0; p < elem->
n_nodes(); p++)
 
  252     for (
unsigned int d = 0; d < 3; d++)
 
  255         max_distance(d) = std::max(
distance, max_distance(d));
 
  258   const Real x  = point_in(0);
 
  259   const Real y  = point_in(1);
 
  260   const Real z  = point_in(2);
 
  261   const Real xc = centroid(0);
 
  262   const Real yc = centroid(1);
 
  263   const Real zc = centroid(2);
 
  264   const Real distx = max_distance(0);
 
  265   const Real disty = max_distance(1);
 
  266   const Real distz = max_distance(2);
 
  267   const Real dx = (x - xc)/distx;
 
  268   const Real dy = (y - yc)/disty;
 
  269   const Real dz = (z - zc)/distz;
 
  274   const unsigned int totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
 
  276   libmesh_assert_less (i, (totalorder+1) * (totalorder+2) *
 
  321             return 3.*dx*dx/distx;
 
  324             return 2.*dx*dy/distx;
 
  333             return 2.*dx*dz/distx;
 
  352             return 4.*dx*dx*dx/distx;
 
  355             return 3.*dx*dx*dy/distx;
 
  358             return 2.*dx*dy*dy/distx;
 
  361             return dy*dy*dy/distx;
 
  367             return 3.*dx*dx*dz/distx;
 
  370             return 2.*dx*dy*dz/distx;
 
  373             return dy*dy*dz/distx;
 
  379             return 2.*dx*dz*dz/distx;
 
  382             return dy*dz*dz/distx;
 
  388             return dz*dz*dz/distx;
 
  398             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  399             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  400             unsigned int block=o, nz = 0;
 
  401             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  402             const unsigned int nx = block - i2;
 
  403             const unsigned int ny = o - nx - nz;
 
  405             for (
unsigned int index=1; index < nx; index++)
 
  407             for (
unsigned int index=0; index != ny; index++)
 
  409             for (
unsigned int index=0; index != nz; index++)
 
  462             return 2.*dx*dy/disty;
 
  465             return 3.*dy*dy/disty;
 
  474             return 2.*dy*dz/disty;
 
  490             return dx*dx*dx/disty;
 
  493             return 2.*dx*dx*dy/disty;
 
  496             return 3.*dx*dy*dy/disty;
 
  499             return 4.*dy*dy*dy/disty;
 
  505             return dx*dx*dz/disty;
 
  508             return 2.*dx*dy*dz/disty;
 
  511             return 3.*dy*dy*dz/disty;
 
  517             return dx*dz*dz/disty;
 
  520             return 2.*dy*dz*dz/disty;
 
  526             return dz*dz*dz/disty;
 
  533             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  534             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  535             unsigned int block=o, nz = 0;
 
  536             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  537             const unsigned int nx = block - i2;
 
  538             const unsigned int ny = o - nx - nz;
 
  540             for (
unsigned int index=0; index != nx; index++)
 
  542             for (
unsigned int index=1; index < ny; index++)
 
  544             for (
unsigned int index=0; index != nz; index++)
 
  612             return 2.*dx*dz/distz;
 
  615             return 2.*dy*dz/distz;
 
  618             return 3.*dz*dz/distz;
 
  637             return dx*dx*dx/distz;
 
  640             return dx*dx*dy/distz;
 
  643             return dx*dy*dy/distz;
 
  646             return dy*dy*dy/distz;
 
  649             return 2.*dx*dx*dz/distz;
 
  652             return 2.*dx*dy*dz/distz;
 
  655             return 2.*dy*dy*dz/distz;
 
  658             return 3.*dx*dz*dz/distz;
 
  661             return 3.*dy*dz*dz/distz;
 
  664             return 4.*dz*dz*dz/distz;
 
  668             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  669             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  670             unsigned int block=o, nz = 0;
 
  671             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  672             const unsigned int nx = block - i2;
 
  673             const unsigned int ny = o - nx - nz;
 
  675             for (
unsigned int index=0; index != nx; index++)
 
  677             for (
unsigned int index=0; index != ny; index++)
 
  679             for (
unsigned int index=1; index < nz; index++)
 
  687       libmesh_error_msg(
"Invalid j = " << j);
 
  690 #else // LIBMESH_DIM != 3 
  693   libmesh_not_implemented();
 
  698 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 
  707   libmesh_error_msg(
"XYZ polynomials require the element \nbecause the centroid is needed.");
 
  715                                    const Order libmesh_dbg_var(order),
 
  716                                    const unsigned int i,
 
  717                                    const unsigned int j,
 
  718                                    const Point & point_in,
 
  719                                    const bool libmesh_dbg_var(add_p_level))
 
  724   libmesh_assert_less (j, 6);
 
  729     for (
unsigned int d = 0; d < 3; d++)
 
  732         max_distance(d) = std::max(
distance, max_distance(d));
 
  735   const Real x  = point_in(0);
 
  736   const Real y  = point_in(1);
 
  737   const Real z  = point_in(2);
 
  738   const Real xc = centroid(0);
 
  739   const Real yc = centroid(1);
 
  740   const Real zc = centroid(2);
 
  741   const Real distx = max_distance(0);
 
  742   const Real disty = max_distance(1);
 
  743   const Real distz = max_distance(2);
 
  744   const Real dx = (x - xc)/distx;
 
  745   const Real dy = (y - yc)/disty;
 
  746   const Real dz = (z - zc)/distz;
 
  747   const Real dist2x = 
pow(distx,2.);
 
  748   const Real dist2y = 
pow(disty,2.);
 
  749   const Real dist2z = 
pow(distz,2.);
 
  750   const Real distxy = distx * disty;
 
  751   const Real distxz = distx * distz;
 
  752   const Real distyz = disty * distz;
 
  757   const unsigned int totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
 
  759   libmesh_assert_less (i, (totalorder+1) * (totalorder+2) *
 
  813             return 12.*dx*dx/dist2x;
 
  816             return 6.*dx*dy/dist2x;
 
  819             return 2.*dy*dy/dist2x;
 
  826             return 6.*dx*dz/dist2x;
 
  829             return 2.*dy*dz/dist2x;
 
  836             return 2.*dz*dz/dist2x;
 
  847             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  848             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  849             unsigned int block=o, nz = 0;
 
  850             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  851             const unsigned int nx = block - i2;
 
  852             const unsigned int ny = o - nx - nz;
 
  853             Real val = nx * (nx - 1);
 
  854             for (
unsigned int index=2; index < nx; index++)
 
  856             for (
unsigned int index=0; index != ny; index++)
 
  858             for (
unsigned int index=0; index != nz; index++)
 
  920             return 3.*dx*dx/distxy;
 
  923             return 4.*dx*dy/distxy;
 
  926             return 3.*dy*dy/distxy;
 
  933             return 2.*dx*dz/distxy;
 
  936             return 2.*dy*dz/distxy;
 
  953             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
  954             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
  955             unsigned int block=o, nz = 0;
 
  956             for (; block < i2; block += (o-nz+1)) { nz++; }
 
  957             const unsigned int nx = block - i2;
 
  958             const unsigned int ny = o - nx - nz;
 
  960             for (
unsigned int index=1; index < nx; index++)
 
  962             for (
unsigned int index=1; index < ny; index++)
 
  964             for (
unsigned int index=0; index != nz; index++)
 
 1004             return 2.*dx/dist2y;
 
 1006             return 6.*dy/dist2y;
 
 1013             return 2.*dz/dist2y;
 
 1026             return 2.*dx*dx/dist2y;
 
 1029             return 6.*dx*dy/dist2y;
 
 1032             return 12.*dy*dy/dist2y;
 
 1039             return 2.*dx*dz/dist2y;
 
 1042             return 6.*dy*dz/dist2y;
 
 1049             return 2.*dz*dz/dist2y;
 
 1058             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1059             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1060             unsigned int block=o, nz = 0;
 
 1061             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1062             const unsigned int nx = block - i2;
 
 1063             const unsigned int ny = o - nx - nz;
 
 1064             Real val = ny * (ny - 1);
 
 1065             for (
unsigned int index=0; index != nx; index++)
 
 1067             for (
unsigned int index=2; index < ny; index++)
 
 1069             for (
unsigned int index=0; index != nz; index++)
 
 1111             return 2.*dx/distxz;
 
 1120             return 2.*dz/distxz;
 
 1135             return 3.*dx*dx/distxz;
 
 1138             return 2.*dx*dy/distxz;
 
 1141             return dy*dy/distxz;
 
 1147             return 4.*dx*dz/distxz;
 
 1150             return 2.*dy*dz/distxz;
 
 1156             return 3.*dz*dz/distxz;
 
 1164             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1165             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1166             unsigned int block=o, nz = 0;
 
 1167             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1168             const unsigned int nx = block - i2;
 
 1169             const unsigned int ny = o - nx - nz;
 
 1171             for (
unsigned int index=1; index < nx; index++)
 
 1173             for (
unsigned int index=0; index != ny; index++)
 
 1175             for (
unsigned int index=1; index < nz; index++)
 
 1220             return 2.*dy/distyz;
 
 1226             return 2.*dz/distyz;
 
 1241             return dx*dx/distyz;
 
 1244             return 2.*dx*dy/distyz;
 
 1247             return 3.*dy*dy/distyz;
 
 1253             return 2.*dx*dz/distyz;
 
 1256             return 4.*dy*dz/distyz;
 
 1262             return 3.*dz*dz/distyz;
 
 1269             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1270             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1271             unsigned int block=o, nz = 0;
 
 1272             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1273             const unsigned int nx = block - i2;
 
 1274             const unsigned int ny = o - nx - nz;
 
 1276             for (
unsigned int index=0; index != nx; index++)
 
 1278             for (
unsigned int index=1; index < ny; index++)
 
 1280             for (
unsigned int index=1; index < nz; index++)
 
 1323             return 2.*dx/dist2z;
 
 1326             return 2.*dy/dist2z;
 
 1329             return 6.*dz/dist2z;
 
 1344             return 2.*dx*dx/dist2z;
 
 1347             return 2.*dx*dy/dist2z;
 
 1350             return 2.*dy*dy/dist2z;
 
 1353             return 6.*dx*dz/dist2z;
 
 1356             return 6.*dy*dz/dist2z;
 
 1359             return 12.*dz*dz/dist2z;
 
 1363             for (; i >= (o+1)*(o+2)*(o+3)/6; o++) { }
 
 1364             unsigned int i2 = i - (o*(o+1)*(o+2)/6);
 
 1365             unsigned int block=o, nz = 0;
 
 1366             for (; block < i2; block += (o-nz+1)) { nz++; }
 
 1367             const unsigned int nx = block - i2;
 
 1368             const unsigned int ny = o - nx - nz;
 
 1369             Real val = nz * (nz - 1);
 
 1370             for (
unsigned int index=0; index != nx; index++)
 
 1372             for (
unsigned int index=0; index != ny; index++)
 
 1374             for (
unsigned int index=2; index < nz; index++)
 
 1382       libmesh_error_msg(
"Invalid j = " << j);
 
 1385 #else // LIBMESH_DIM != 3 
 1388   libmesh_not_implemented();