18#ifndef __B2ELEMENT_CONTINUUM_SHAPE_H__ 
   19#define __B2ELEMENT_CONTINUUM_SHAPE_H__ 
   21#include "elements/properties/b2solid_mechanics.H" 
   22#include "elements/smr/b2element_continuum_integrate.H" 
   23#include "elements/smr/b2element_continuum_util.H" 
   24#include "utils/b2linear_algebra.H" 
   32class P_Shape_Evaluator {
 
   34    static const int num_nodes = 1;
 
   35    static const int num_dimensions = 0;
 
   36    static const int order = 0;
 
   37    static const int num_edge = 0;
 
   38    static const int num_face = 0;
 
   39    typedef IS_P ischeme_type;
 
   41    static ischeme_type create_ischeme() {
 
   46    static ischeme_type create_ischeme(SolidMechanics& property) {
 
   51    static const char name[2];
 
   53    static void eval_h(
const double internal_coor[1], 
double h[1]) { h[0] = 1.; }
 
   55    static void eval_h_derived(
const double internal_coor[1], 
double d[1][1]) { d[0][0] = 0; }
 
   58          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
   59        eval_h(internal_coor, &h[0]);
 
   62    static void eval_h_derived(
 
   63          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
   65        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
   73class L2_Shape_Evaluator {
 
   75    static const int num_nodes = 2;
 
   76    static const int num_dimensions = 1;
 
   77    static const int order = 1;
 
   78    typedef IS_L ischeme_type;
 
   80    static ischeme_type create_ischeme() {
 
   82        ischeme.set_order(order);
 
   86    static ischeme_type create_ischeme(SolidMechanics& property) {
 
   88        ischeme.set_order(2 * order);
 
   89        ischeme.init(property);
 
   93    static const double r_node[2];
 
   95    static const char name[3];
 
   97    typedef L2_Shape_Evaluator edge_shape_type_0;
 
   98    typedef L2_Shape_Evaluator edge_shape_type_1;
 
   99    static const int num_edge = 1;
 
  100    static const int edge_node[1][2];
 
  101    static const int num_face = 0;
 
  103    static void eval_h(
const double internal_coor[1], 
double h[2]) {
 
  104        const double r2 = 0.5 * internal_coor[0];
 
  110    static void eval_h_derived(
const double internal_coor[1], 
double d[2][1]) {
 
  117          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  118        eval_h(internal_coor, &h[0]);
 
  121    static void eval_h_derived(
 
  122          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  123        d.resize(1, num_nodes);
 
  124        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  128class L3_Shape_Evaluator {
 
  130    static const int num_nodes = 3;
 
  131    static const int num_dimensions = 1;
 
  132    static const int order = 2;
 
  133    typedef IS_L ischeme_type;
 
  135    static ischeme_type create_ischeme() {
 
  136        ischeme_type ischeme;
 
  137        ischeme.set_order(order);
 
  141    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  142        ischeme_type ischeme;
 
  143        ischeme.set_order(2 * order);
 
  144        ischeme.init(property);
 
  148    static const double r_node[3];
 
  150    static const char name[3];
 
  152    typedef L3_Shape_Evaluator edge_shape_type_0;
 
  153    typedef L3_Shape_Evaluator edge_shape_type_1;
 
  154    static const int num_edge = 1;
 
  155    static const int edge_node[1][3];
 
  156    static const int num_face = 0;
 
  158    static void eval_h(
const double internal_coor[1], 
double h[3]) {
 
  159        const double r = internal_coor[0];
 
  161        h[0] = 0.5 * r * (r - 1);
 
  162        h[1] = 0.5 * r * (r + 1);
 
  166    static void eval_h_derived(
const double internal_coor[1], 
double d[3][1]) {
 
  167        const double r = internal_coor[0];
 
  176          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  177        eval_h(internal_coor, &h[0]);
 
  180    static void eval_h_derived(
 
  181          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  182        d.resize(1, num_nodes);
 
  183        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  187class L4_Shape_Evaluator {
 
  189    static const int num_nodes = 4;
 
  190    static const int num_dimensions = 1;
 
  191    static const int order = 3;
 
  192    typedef IS_L ischeme_type;
 
  194    static ischeme_type create_ischeme() {
 
  195        ischeme_type ischeme;
 
  196        ischeme.set_order(order);
 
  200    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  201        ischeme_type ischeme;
 
  202        ischeme.set_order(2 * order);
 
  203        ischeme.init(property);
 
  207    static const double r_node[4];
 
  209    static const char name[3];
 
  211    typedef L4_Shape_Evaluator edge_shape_type_0;
 
  212    typedef L4_Shape_Evaluator edge_shape_type_1;
 
  213    static const int num_edge = 1;
 
  214    static const int edge_node[1][4];
 
  215    static const int num_face = 0;
 
  217    static void eval_h(
const double internal_coor[1], 
double h[4]) {
 
  218        const double r = internal_coor[0];
 
  220        h[0] = -(1 - r) * (1 - 9 * r * r) / 16;
 
  221        h[1] = -(1 + r) * (1 - 9 * r * r) / 16;
 
  222        h[2] = +9 * (1 - r * r) * (1 - 3 * r) / 16;
 
  223        h[3] = +9 * (1 - r * r) * (1 + 3 * r) / 16;
 
  226    static void eval_h_derived(
const double internal_coor[1], 
double d[4][1]) {
 
  227        const double r = internal_coor[0];
 
  230        d[0][0] = (+1 + 18 * r - 27 * r * r) / 16;
 
  231        d[1][0] = (-1 + 18 * r + 27 * r * r) / 16;
 
  232        d[2][0] = (-27 - 18 * r + 81 * r * r) / 16;
 
  233        d[3][0] = (+27 - 18 * r - 81 * r * r) / 16;
 
  237          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  238        eval_h(internal_coor, &h[0]);
 
  241    static void eval_h_derived(
 
  242          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  243        d.resize(1, num_nodes);
 
  244        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  248class L5_Shape_Evaluator {
 
  250    static const int num_nodes = 5;
 
  251    static const int num_dimensions = 1;
 
  252    static const int order = 4;
 
  253    typedef IS_L ischeme_type;
 
  255    static ischeme_type create_ischeme() {
 
  256        ischeme_type ischeme;
 
  257        ischeme.set_order(order);
 
  261    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  262        ischeme_type ischeme;
 
  263        ischeme.set_order(2 * order);
 
  264        ischeme.init(property);
 
  268    static const double r_node[5];
 
  270    static const char name[3];
 
  272    typedef L5_Shape_Evaluator edge_shape_type_0;
 
  273    typedef L5_Shape_Evaluator edge_shape_type_1;
 
  274    static const int num_edge = 1;
 
  275    static const int edge_node[1][5];
 
  276    static const int num_face = 0;
 
  278    static void eval_h(
const double internal_coor[1], 
double h[5]) {
 
  279        const double r = internal_coor[0];
 
  281        const double rm = r - 1;
 
  282        const double rp = r + 1;
 
  283        const double r2m = (2 * r - 1);
 
  284        const double r2p = (2 * r + 1);
 
  286        h[0] = +(rm * r * r2m * r2p) / 6;
 
  287        h[1] = +(r * rp * r2m * r2p) / 6;
 
  288        h[2] = -(4 * rm * r * rp * r2m) / 3;
 
  289        h[3] = +rm * rp * r2m * r2p;
 
  290        h[4] = -(4 * rm * r * rp * r2p) / 3;
 
  293    static void eval_h_derived(
const double internal_coor[1], 
double d[5][1]) {
 
  294        const double r = internal_coor[0];
 
  295        const double r4m = 4 * r - 1;
 
  296        const double r4p = 4 * r + 1;
 
  298        d[0][0] = +(r4m * (4 * r * r - 2 * r - 1)) / 6;
 
  299        d[1][0] = +(r4p * (4 * r * r + 2 * r - 1)) / 6;
 
  300        d[2][0] = -(4 * (8 * r * r * r - 3 * r * r - 4 * r + 1)) / 3;
 
  301        d[3][0] = +2 * r * (8 * r * r - 5);
 
  302        d[4][0] = -(4 * (8 * r * r * r + 3 * r * r - 4 * r - 1)) / 3;
 
  306          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  307        eval_h(internal_coor, &h[0]);
 
  310    static void eval_h_derived(
 
  311          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  312        d.resize(1, num_nodes);
 
  313        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  317class L6_Shape_Evaluator {
 
  319    static const int num_nodes = 6;
 
  320    static const int num_dimensions = 1;
 
  321    static const int order = 5;
 
  322    typedef IS_L ischeme_type;
 
  324    static ischeme_type create_ischeme() {
 
  325        ischeme_type ischeme;
 
  326        ischeme.set_order(order);
 
  330    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  331        ischeme_type ischeme;
 
  332        ischeme.set_order(2 * order);
 
  333        ischeme.init(property);
 
  337    static const double r_node[6];
 
  339    static const char name[3];
 
  341    typedef L6_Shape_Evaluator edge_shape_type_0;
 
  342    typedef L6_Shape_Evaluator edge_shape_type_1;
 
  343    static const int num_edge = 1;
 
  344    static const int edge_node[1][6];
 
  345    static const int num_face = 0;
 
  347    static void eval_h(
const double internal_coor[1], 
double h[6]) {
 
  348        const double r = internal_coor[0];
 
  350        const double rm = r - 1;
 
  351        const double rp = r + 1;
 
  352        const double r5m = 5 * r - 1;
 
  353        const double r5p = 5 * r + 1;
 
  354        h[0] = -(rm * (5 * r - 3) * r5m * r5p * (5 * r + 3)) / 768;
 
  355        h[1] = +(rp * (5 * r - 3) * r5m * r5p * (5 * r + 3)) / 768;
 
  356        h[2] = +(25 * rm * rp * (5 * r - 3) * r5m * r5p) / 768;
 
  357        h[3] = -(25 * rm * rp * (5 * r - 3) * r5m * (5 * r + 3)) / 384;
 
  358        h[4] = +(25 * rm * rp * (5 * r - 3) * r5p * (5 * r + 3)) / 384;
 
  359        h[5] = -(25 * rm * rp * r5m * r5p * (5 * r + 3)) / 768;
 
  362    static void eval_h_derived(
const double internal_coor[1], 
double d[6][1]) {
 
  363        const double r = internal_coor[0];
 
  364        d[0][0] = -(3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) / 768;
 
  365        d[1][0] = +(3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) / 768;
 
  366        d[2][0] = +(25 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5)) / 768;
 
  367        d[3][0] = -(25 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45)) / 384;
 
  368        d[4][0] = +(25 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45)) / 384;
 
  369        d[5][0] = -(25 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5)) / 768;
 
  373          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  374        eval_h(internal_coor, &h[0]);
 
  377    static void eval_h_derived(
 
  378          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  379        d.resize(1, num_nodes);
 
  380        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  384class L7_Shape_Evaluator {
 
  386    static const int num_nodes = 7;
 
  387    static const int num_dimensions = 1;
 
  388    static const int order = 6;
 
  389    typedef IS_L ischeme_type;
 
  391    static ischeme_type create_ischeme() {
 
  392        ischeme_type ischeme;
 
  393        ischeme.set_order(order);
 
  397    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  398        ischeme_type ischeme;
 
  399        ischeme.set_order(2 * order);
 
  400        ischeme.init(property);
 
  404    static const double r_node[7];
 
  406    static const char name[3];
 
  408    typedef L7_Shape_Evaluator edge_shape_type_0;
 
  409    typedef L7_Shape_Evaluator edge_shape_type_1;
 
  410    static const int num_edge = 1;
 
  411    static const int edge_node[1][7];
 
  412    static const int num_face = 0;
 
  414    static void eval_h(
const double internal_coor[1], 
double h[7]) {
 
  415        const double r = internal_coor[0];
 
  417        const double rm = r - 1;
 
  418        const double rp = r + 1;
 
  419        const double r3m = 3 * r - 1;
 
  420        const double r3p = 3 * r + 1;
 
  422        h[0] = +(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2)) / 80;
 
  423        h[1] = +(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)) / 80;
 
  424        h[2] = -(9 * rm * r * rp * (3 * r - 2) * r3m * r3p) / 40;
 
  425        h[3] = +(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2)) / 16;
 
  426        h[4] = -(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)) / 4;
 
  427        h[5] = +(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2)) / 16;
 
  428        h[6] = -(9 * rm * r * rp * r3m * r3p * (3 * r + 2)) / 40;
 
  431    static void eval_h_derived(
const double internal_coor[1], 
double d[7][1]) {
 
  432        const double r = internal_coor[0];
 
  434              +((6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)) / 80;
 
  436              +((6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)) / 80;
 
  438                    * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
  442                    * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
  445        d[4][0] = -(r * (9 * r * r - 7) * (27 * r * r - 7)) / 2;
 
  447                    * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
  451                    * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
  457          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  458        eval_h(internal_coor, &h[0]);
 
  461    static void eval_h_derived(
 
  462          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  463        d.resize(1, num_nodes);
 
  464        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  468class B4_Shape_Evaluator {
 
  470    static const int num_nodes = 4;
 
  471    static const int num_dimensions = 1;
 
  472    static const int order = 3;
 
  473    typedef IS_L ischeme_type;
 
  475    static ischeme_type create_ischeme() {
 
  476        ischeme_type ischeme;
 
  477        ischeme.set_order(order);
 
  481    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  482        ischeme_type ischeme;
 
  483        ischeme.set_order(2 * order);
 
  484        ischeme.init(property);
 
  488    static const double r_node[4];
 
  490    static const char name[3];
 
  492    typedef B4_Shape_Evaluator edge_shape_type_0;
 
  493    typedef B4_Shape_Evaluator edge_shape_type_1;
 
  494    static const int num_edge = 1;
 
  495    static const int edge_node[1][4];
 
  496    static const int num_face = 0;
 
  498    static void eval_h(
const double internal_coor[1], 
double h[4]) {
 
  499        const double r = internal_coor[0];
 
  501        const double rm = 1 - r;
 
  502        const double rp = 1 + r;
 
  503        h[0] = 0.125 * rm * rm * rm;
 
  504        h[2] = 0.375 * rm * rm * rp;
 
  505        h[3] = 0.375 * rm * rp * rp;
 
  506        h[1] = 0.125 * rp * rp * rp;
 
  509    static void eval_h_derived(
const double internal_coor[1], 
double d[4][1]) {
 
  510        const double r = internal_coor[0];
 
  513        const double rm = 1 - r;
 
  514        const double rp = 1 + r;
 
  515        d[0][0] = -0.375 * rm * rm;
 
  516        d[2][0] = -0.375 * rm * (1 + 3 * r);
 
  517        d[3][0] = +0.375 * rp * (1 - 3 * r);
 
  518        d[1][0] = +0.375 * rp * rp;
 
  522          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  523        eval_h(internal_coor, &h[0]);
 
  526    static void eval_h_derived(
 
  527          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  528        d.resize(1, num_nodes);
 
  529        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  533class P4_Shape_Evaluator {
 
  535    static const int num_nodes = 4;
 
  536    static const int num_dimensions = 1;
 
  537    static const int order = 3;
 
  538    typedef IS_L ischeme_type;
 
  540    static ischeme_type create_ischeme() {
 
  541        ischeme_type ischeme;
 
  542        ischeme.set_order(order);
 
  546    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  547        ischeme_type ischeme;
 
  548        ischeme.set_order(2 * order);
 
  549        ischeme.init(property);
 
  553    static const double r_node[4];
 
  555    static const char name[3];
 
  557    typedef P4_Shape_Evaluator edge_shape_type_0;
 
  558    typedef P4_Shape_Evaluator edge_shape_type_1;
 
  559    static const int num_edge = 1;
 
  560    static const int edge_node[1][4];
 
  561    static const int num_face = 0;
 
  563    static constexpr double f2 = 0.6123724356957945;
 
  564    static constexpr double f3 = 0.790569415042095;
 
  566    static void eval_h(
const double internal_coor[1], 
double h[4]) {
 
  567        const double r = internal_coor[0];
 
  571        h[2] = f2 * (r * r - 1);
 
  572        h[3] = f3 * r * (r * r - 1);
 
  575    static void eval_h_derived(
const double internal_coor[1], 
double d[4][1]) {
 
  576        const double r = internal_coor[0];
 
  581        d[2][0] = f2 * 2 * r;
 
  582        d[3][0] = f3 * (3 * r * r - 1);
 
  586          const double internal_coor[1], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  587        eval_h(internal_coor, &h[0]);
 
  590    static void eval_h_derived(
 
  591          const double internal_coor[1], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  592        d.resize(1, num_nodes);
 
  593        eval_h_derived(internal_coor, (
double(*)[1]) & d[0][0]);
 
  601class T3_Shape_Evaluator {
 
  603    static const int num_nodes = 3;
 
  604    static const int num_dimensions = 2;
 
  605    static const int order = 1;
 
  606    typedef IS_T ischeme_type;
 
  608    static ischeme_type create_ischeme() {
 
  609        ischeme_type ischeme;
 
  610        ischeme.set_order(order);
 
  614    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  615        ischeme_type ischeme;
 
  616        ischeme.set_order(2 * order);
 
  617        ischeme.init(property);
 
  621    static const double r_node[3];
 
  622    static const double s_node[3];
 
  623    static const double t_node[3];
 
  625    static const char name[3];
 
  627    typedef L2_Shape_Evaluator edge_shape_type_0;
 
  628    typedef L2_Shape_Evaluator edge_shape_type_1;
 
  629    static const int num_edge = 3;
 
  630    static const int edge_node[3][2];
 
  631    static const int edge_type_index[3];
 
  633    typedef T3_Shape_Evaluator face_shape_type_0;
 
  634    typedef T3_Shape_Evaluator face_shape_type_1;
 
  635    static const int num_face = 2;
 
  636    static const int face_node[2][3];
 
  637    static const int face_type_index[2];
 
  638    static const bool is_t_face[2];
 
  640    static void eval_h(
const double internal_coor[2], 
double h[3]) {
 
  641        const double r = internal_coor[0];
 
  642        const double s = internal_coor[1];
 
  649    static void eval_h_derived(
const double internal_coor[2], 
double d[3][2]) {
 
  662          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  663        eval_h(internal_coor, &h[0]);
 
  666    static void eval_h_derived(
 
  667          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  668        d.resize(2, num_nodes);
 
  669        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
  673class T6_Shape_Evaluator {
 
  675    static const int num_nodes = 6;
 
  676    static const int num_dimensions = 2;
 
  677    static const int order = 2;
 
  678    typedef IS_T ischeme_type;
 
  680    static ischeme_type create_ischeme() {
 
  681        ischeme_type ischeme;
 
  682        ischeme.set_order(order);
 
  686    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  687        ischeme_type ischeme;
 
  688        ischeme.set_order(2 * order);
 
  689        ischeme.init(property);
 
  693    static const double r_node[6];
 
  694    static const double s_node[6];
 
  695    static const double t_node[6];
 
  697    static const char name[3];
 
  699    typedef L3_Shape_Evaluator edge_shape_type_0;
 
  700    typedef L3_Shape_Evaluator edge_shape_type_1;
 
  701    static const int num_edge = 3;
 
  702    static const int edge_node[3][3];
 
  703    static const int edge_type_index[3];
 
  705    typedef T6_Shape_Evaluator face_shape_type_0;
 
  706    typedef T6_Shape_Evaluator face_shape_type_1;
 
  707    static const int num_face = 2;
 
  708    static const int face_node[2][6];
 
  709    static const int face_type_index[2];
 
  710    static const bool is_t_face[2];
 
  712    static void eval_h(
const double internal_coor[2], 
double h[6]) {
 
  713        const double r = internal_coor[0];
 
  714        const double s = internal_coor[1];
 
  715        const double t = 1. - r - s;
 
  717        h[0] = t * (2 * t - 1);
 
  718        h[1] = r * (2 * r - 1);
 
  719        h[2] = s * (2 * s - 1);
 
  725    static void eval_h_derived(
const double internal_coor[2], 
double d[6][2]) {
 
  726        const double r = internal_coor[0];
 
  727        const double s = internal_coor[1];
 
  730        d[0][0] = +4 * r + 4 * s - 3;
 
  731        d[1][0] = +4 * r - 1;
 
  733        d[3][0] = -4 * (s + 2 * r - 1);
 
  738        d[0][1] = +4 * r + 4 * s - 3;
 
  740        d[2][1] = +4 * s - 1;
 
  743        d[5][1] = -4 * (2 * s + r - 1);
 
  747          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  748        eval_h(internal_coor, &h[0]);
 
  751    static void eval_h_derived(
 
  752          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  753        d.resize(2, num_nodes);
 
  754        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
  758class T10_Shape_Evaluator {
 
  760    static const int num_nodes = 10;
 
  761    static const int num_dimensions = 2;
 
  762    static const int order = 3;
 
  763    typedef IS_T ischeme_type;
 
  765    static ischeme_type create_ischeme() {
 
  766        ischeme_type ischeme;
 
  767        ischeme.set_order(order);
 
  771    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  772        ischeme_type ischeme;
 
  773        ischeme.set_order(2 * order);
 
  774        ischeme.init(property);
 
  778    static const double r_node[10];
 
  779    static const double s_node[10];
 
  780    static const double t_node[10];
 
  782    static const char name[4];
 
  784    typedef L4_Shape_Evaluator edge_shape_type_0;
 
  785    typedef L4_Shape_Evaluator edge_shape_type_1;
 
  786    static const int num_edge = 3;
 
  787    static const int edge_node[3][4];
 
  788    static const int edge_type_index[3];
 
  790    typedef T10_Shape_Evaluator face_shape_type_0;
 
  791    typedef T10_Shape_Evaluator face_shape_type_1;
 
  792    static const int num_face = 2;
 
  793    static const int face_node[2][10];
 
  794    static const int face_type_index[2];
 
  795    static const bool is_t_face[2];
 
  797    static void eval_h(
const double internal_coor[2], 
double h[10]) {
 
  798        const double r = internal_coor[0];
 
  799        const double s = internal_coor[1];
 
  801        const double r3m = 3 * r - 1;
 
  802        const double s3m = 3 * s - 1;
 
  804        h[0] = -((s + r - 1) * (3 * s + 3 * r - 2) * (3 * s + 3 * r - 1)) / 2;
 
  805        h[1] = +(r * (3 * r - 2) * r3m) / 2;
 
  806        h[2] = +(s * (3 * s - 2) * s3m) / 2;
 
  807        h[3] = +(9 * r * (s + r - 1) * (3 * s + 3 * r - 2)) / 2;
 
  808        h[4] = -(9 * r * r3m * (s + r - 1)) / 2;
 
  809        h[5] = +(9 * s * (s + r - 1) * (3 * s + 3 * r - 2)) / 2;
 
  810        h[6] = -27 * r * s * (s + r - 1);
 
  811        h[7] = +(9 * r * r3m * s) / 2;
 
  812        h[8] = -(9 * s * (s + r - 1) * s3m) / 2;
 
  813        h[9] = +(9 * r * s * s3m) / 2;
 
  816    static void eval_h_derived(
const double internal_coor[2], 
double d[10][2]) {
 
  817        const double r = internal_coor[0];
 
  818        const double s = internal_coor[1];
 
  820        const double r3m = 3 * r - 1;
 
  821        const double s3m = 3 * s - 1;
 
  823        d[0][0] = -(27 * s * s + 54 * r * s - 36 * s + 27 * r * r - 36 * r + 11) / 2;
 
  824        d[1][0] = +(27 * r * r - 18 * r + 2) / 2;
 
  826        d[3][0] = +(9 * (3 * s * s + 12 * r * s - 5 * s + 9 * r * r - 10 * r + 2)) / 2;
 
  827        d[4][0] = -(9 * (6 * r * s - s + 9 * r * r - 8 * r + 1)) / 2;
 
  828        d[5][0] = +(9 * s * (6 * s + 6 * r - 5)) / 2;
 
  829        d[6][0] = -27 * s * (s + 2 * r - 1);
 
  830        d[7][0] = +(9 * (6 * r - 1) * s) / 2;
 
  831        d[8][0] = -(9 * s * s3m) / 2;
 
  832        d[9][0] = +(9 * s * s3m) / 2;
 
  833        d[0][1] = -(27 * s * s + 54 * r * s - 36 * s + 27 * r * r - 36 * r + 11) / 2;
 
  835        d[2][1] = +(27 * s * s - 18 * s + 2) / 2;
 
  836        d[3][1] = +(9 * r * (6 * s + 6 * r - 5)) / 2;
 
  837        d[4][1] = -(9 * r * r3m) / 2;
 
  838        d[5][1] = +(9 * (9 * s * s + 12 * r * s - 10 * s + 3 * r * r - 5 * r + 2)) / 2;
 
  839        d[6][1] = -27 * r * (2 * s + r - 1);
 
  840        d[7][1] = +(9 * r * r3m) / 2;
 
  841        d[8][1] = -(9 * (9 * s * s + 6 * r * s - 8 * s - r + 1)) / 2;
 
  842        d[9][1] = +(9 * r * (6 * s - 1)) / 2;
 
  846          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  847        eval_h(internal_coor, &h[0]);
 
  850    static void eval_h_derived(
 
  851          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  852        d.resize(2, num_nodes);
 
  853        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
  857class T15_Shape_Evaluator {
 
  859    static const int num_nodes = 15;
 
  860    static const int num_dimensions = 2;
 
  861    static const int order = 4;
 
  862    typedef IS_T ischeme_type;
 
  864    static ischeme_type create_ischeme() {
 
  865        ischeme_type ischeme;
 
  866        ischeme.set_order(order);
 
  870    static ischeme_type create_ischeme(SolidMechanics& property) {
 
  871        ischeme_type ischeme;
 
  872        ischeme.set_order(2 * order);
 
  873        ischeme.init(property);
 
  877    static const double r_node[15];
 
  878    static const double s_node[15];
 
  879    static const double t_node[15];
 
  881    static const char name[4];
 
  883    typedef L5_Shape_Evaluator edge_shape_type_0;
 
  884    typedef L5_Shape_Evaluator edge_shape_type_1;
 
  885    static const int num_edge = 3;
 
  886    static const int edge_node[3][5];
 
  887    static const int edge_type_index[3];
 
  889    typedef T15_Shape_Evaluator face_shape_type_0;
 
  890    typedef T15_Shape_Evaluator face_shape_type_1;
 
  891    static const int num_face = 2;
 
  892    static const int face_node[2][15];
 
  893    static const int face_type_index[2];
 
  894    static const bool is_t_face[2];
 
  896    static void eval_h(
const double internal_coor[2], 
double h[15]) {
 
  897        const double r = internal_coor[0];
 
  898        const double s = internal_coor[1];
 
  900        const double r2m = (2 * r - 1);
 
  901        const double r4m = (4 * r - 1);
 
  902        const double s2m = (2 * s - 1);
 
  903        const double s4m = (4 * s - 1);
 
  905        h[0] = +((s + r - 1) * (2 * s + 2 * r - 1) * (4 * s + 4 * r - 3) * (4 * s + 4 * r - 1)) / 3;
 
  906        h[1] = +(r * r2m * (4 * r - 3) * r4m) / 3;
 
  907        h[2] = +(s * s2m * (4 * s - 3) * s4m) / 3;
 
  908        h[3] = -(16 * r * (s + r - 1) * (2 * s + 2 * r - 1) * (4 * s + 4 * r - 3)) / 3;
 
  909        h[4] = +4 * r * r4m * (s + r - 1) * (4 * s + 4 * r - 3);
 
  910        h[5] = -(16 * r * r2m * r4m * (s + r - 1)) / 3;
 
  911        h[6] = -(16 * s * (s + r - 1) * (2 * s + 2 * r - 1) * (4 * s + 4 * r - 3)) / 3;
 
  912        h[7] = +32 * r * s * (s + r - 1) * (4 * s + 4 * r - 3);
 
  913        h[8] = -32 * r * r4m * s * (s + r - 1);
 
  914        h[9] = +(16 * r * r2m * r4m * s) / 3;
 
  915        h[10] = +4 * s * (s + r - 1) * s4m * (4 * s + 4 * r - 3);
 
  916        h[11] = -32 * r * s * (s + r - 1) * s4m;
 
  917        h[12] = +4 * r * r4m * s * s4m;
 
  918        h[13] = -(16 * s * (s + r - 1) * s2m * s4m) / 3;
 
  919        h[14] = +(16 * r * s * s2m * s4m) / 3;
 
  922    static void eval_h_derived(
const double internal_coor[2], 
double d[15][2]) {
 
  923        const double r = internal_coor[0];
 
  924        const double s = internal_coor[1];
 
  926        const double r2m = (2 * r - 1);
 
  927        const double r4m = (4 * r - 1);
 
  928        const double s2m = (2 * s - 1);
 
  929        const double s4m = (4 * s - 1);
 
  932              +((8 * s + 8 * r - 5) * (16 * s * s + 32 * r * s - 20 * s + 16 * r * r - 20 * r + 5))
 
  934        d[1][0] = +((8 * r - 3) * (16 * r * r - 12 * r + 1)) / 3;
 
  937                    * (8 * s * s * s + 48 * r * s * s - 18 * s * s + 72 * r * r * s - 72 * r * s
 
  938                       + 13 * s + 32 * r * r * r - 54 * r * r + 26 * r - 3))
 
  940        d[4][0] = +4 * (s + 2 * r - 1) * (32 * r * s - 4 * s + 32 * r * r - 32 * r + 3);
 
  942              -(16 * (24 * r * r * s - 12 * r * s + s + 32 * r * r * r - 42 * r * r + 14 * r - 1))
 
  944        d[6][0] = -(16 * s * (24 * s * s + 48 * r * s - 36 * s + 24 * r * r - 36 * r + 13)) / 3;
 
  945        d[7][0] = +32 * s * (4 * s * s + 16 * r * s - 7 * s + 12 * r * r - 14 * r + 3);
 
  946        d[8][0] = -32 * s * (8 * r * s - s + 12 * r * r - 10 * r + 1);
 
  947        d[9][0] = +(16 * (24 * r * r - 12 * r + 1) * s) / 3;
 
  948        d[10][0] = +4 * s * s4m * (8 * s + 8 * r - 7);
 
  949        d[11][0] = -32 * s * (s + 2 * r - 1) * s4m;
 
  950        d[12][0] = +4 * (8 * r - 1) * s * s4m;
 
  951        d[13][0] = -(16 * s * s2m * s4m) / 3;
 
  952        d[14][0] = +(16 * s * s2m * s4m) / 3;
 
  954              +((8 * s + 8 * r - 5) * (16 * s * s + 32 * r * s - 20 * s + 16 * r * r - 20 * r + 5))
 
  957        d[2][1] = +((8 * s - 3) * (16 * s * s - 12 * s + 1)) / 3;
 
  958        d[3][1] = -(16 * r * (24 * s * s + 48 * r * s - 36 * s + 24 * r * r - 36 * r + 13)) / 3;
 
  959        d[4][1] = +4 * r * r4m * (8 * s + 8 * r - 7);
 
  960        d[5][1] = -(16 * r * r2m * r4m) / 3;
 
  962                    * (32 * s * s * s + 72 * r * s * s - 54 * s * s + 48 * r * r * s - 72 * r * s
 
  963                       + 26 * s + 8 * r * r * r - 18 * r * r + 13 * r - 3))
 
  965        d[7][1] = +32 * r * (12 * s * s + 16 * r * s - 14 * s + 4 * r * r - 7 * r + 3);
 
  966        d[8][1] = -32 * r * r4m * (2 * s + r - 1);
 
  967        d[9][1] = +(16 * r * r2m * r4m) / 3;
 
  968        d[10][1] = +4 * (2 * s + r - 1) * (32 * s * s + 32 * r * s - 32 * s - 4 * r + 3);
 
  969        d[11][1] = -32 * r * (12 * s * s + 8 * r * s - 10 * s - r + 1);
 
  970        d[12][1] = +4 * r * r4m * (8 * s - 1);
 
  972              -(16 * (32 * s * s * s + 24 * r * s * s - 42 * s * s - 12 * r * s + 14 * s + r - 1))
 
  974        d[14][1] = +(16 * r * (24 * s * s - 12 * s + 1)) / 3;
 
  978          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
  979        eval_h(internal_coor, &h[0]);
 
  982    static void eval_h_derived(
 
  983          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
  984        d.resize(2, num_nodes);
 
  985        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
  989class T21_Shape_Evaluator {
 
  991    static const int num_nodes = 21;
 
  992    static const int num_dimensions = 2;
 
  993    static const int order = 5;
 
  994    typedef IS_T ischeme_type;
 
  996    static ischeme_type create_ischeme() {
 
  997        ischeme_type ischeme;
 
  998        ischeme.set_order(order);
 
 1002    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1003        ischeme_type ischeme;
 
 1004        ischeme.set_order(2 * order);
 
 1005        ischeme.init(property);
 
 1009    static const double r_node[21];
 
 1010    static const double s_node[21];
 
 1011    static const double t_node[21];
 
 1013    static const char name[4];
 
 1015    typedef L6_Shape_Evaluator edge_shape_type_0;
 
 1016    typedef L6_Shape_Evaluator edge_shape_type_1;
 
 1017    static const int num_edge = 3;
 
 1018    static const int edge_node[3][6];
 
 1019    static const int edge_type_index[3];
 
 1021    typedef T21_Shape_Evaluator face_shape_type_0;
 
 1022    typedef T21_Shape_Evaluator face_shape_type_1;
 
 1023    static const int num_face = 2;
 
 1024    static const int face_node[2][21];
 
 1025    static const int face_type_index[2];
 
 1026    static const bool is_t_face[2];
 
 1028    static void eval_h(
const double internal_coor[2], 
double h[21]) {
 
 1029        const double r = internal_coor[0];
 
 1030        const double s = internal_coor[1];
 
 1032        h[0] = -((s + r - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3) * (5 * s + 5 * r - 2)
 
 1033                 * (5 * s + 5 * r - 1))
 
 1035        h[1] = +(r * (5 * r - 4) * (5 * r - 3) * (5 * r - 2) * (5 * r - 1)) / 24;
 
 1036        h[2] = +(s * (5 * s - 4) * (5 * s - 3) * (5 * s - 2) * (5 * s - 1)) / 24;
 
 1037        h[3] = +(25 * r * (s + r - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3)
 
 1038                 * (5 * s + 5 * r - 2))
 
 1040        h[4] = -(25 * r * (5 * r - 1) * (s + r - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3))
 
 1042        h[5] = +(25 * r * (5 * r - 2) * (5 * r - 1) * (s + r - 1) * (5 * s + 5 * r - 4)) / 12;
 
 1043        h[6] = -(25 * r * (5 * r - 3) * (5 * r - 2) * (5 * r - 1) * (s + r - 1)) / 24;
 
 1044        h[7] = +(25 * s * (s + r - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3)
 
 1045                 * (5 * s + 5 * r - 2))
 
 1047        h[8] = -(125 * r * s * (s + r - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3)) / 6;
 
 1048        h[9] = +(125 * r * (5 * r - 1) * s * (s + r - 1) * (5 * s + 5 * r - 4)) / 4;
 
 1049        h[10] = -(125 * r * (5 * r - 2) * (5 * r - 1) * s * (s + r - 1)) / 6;
 
 1050        h[11] = +(25 * r * (5 * r - 3) * (5 * r - 2) * (5 * r - 1) * s) / 24;
 
 1051        h[12] = -(25 * s * (s + r - 1) * (5 * s - 1) * (5 * s + 5 * r - 4) * (5 * s + 5 * r - 3))
 
 1053        h[13] = +(125 * r * s * (s + r - 1) * (5 * s - 1) * (5 * s + 5 * r - 4)) / 4;
 
 1054        h[14] = -(125 * r * (5 * r - 1) * s * (s + r - 1) * (5 * s - 1)) / 4;
 
 1055        h[15] = +(25 * r * (5 * r - 2) * (5 * r - 1) * s * (5 * s - 1)) / 12;
 
 1056        h[16] = +(25 * s * (s + r - 1) * (5 * s - 2) * (5 * s - 1) * (5 * s + 5 * r - 4)) / 12;
 
 1057        h[17] = -(125 * r * s * (s + r - 1) * (5 * s - 2) * (5 * s - 1)) / 6;
 
 1058        h[18] = +(25 * r * (5 * r - 1) * s * (5 * s - 2) * (5 * s - 1)) / 12;
 
 1059        h[19] = -(25 * s * (s + r - 1) * (5 * s - 3) * (5 * s - 2) * (5 * s - 1)) / 24;
 
 1060        h[20] = +(25 * r * s * (5 * s - 3) * (5 * s - 2) * (5 * s - 1)) / 24;
 
 1063    static void eval_h_derived(
const double internal_coor[2], 
double d[21][2]) {
 
 1064        const double r = internal_coor[0];
 
 1065        const double s = internal_coor[1];
 
 1067        d[0][0] = -(3125 * s * s * s * s + 12500 * r * s * s * s - 7500 * s * s * s
 
 1068                    + 18750 * r * r * s * s - 22500 * r * s * s + 6375 * s * s
 
 1069                    + 12500 * r * r * r * s - 22500 * r * r * s + 12750 * r * s - 2250 * s
 
 1070                    + 3125 * r * r * r * r - 7500 * r * r * r + 6375 * r * r - 2250 * r + 274)
 
 1072        d[1][0] = +(3125 * r * r * r * r - 5000 * r * r * r + 2625 * r * r - 500 * r + 24) / 24;
 
 1075                    * (125 * s * s * s * s + 1000 * r * s * s * s - 350 * s * s * s
 
 1076                       + 2250 * r * r * s * s - 2100 * r * s * s + 355 * s * s
 
 1077                       + 2000 * r * r * r * s - 3150 * r * r * s + 1420 * r * s - 154 * s
 
 1078                       + 625 * r * r * r * r - 1400 * r * r * r + 1065 * r * r - 308 * r + 24))
 
 1081                    * (250 * r * s * s * s - 25 * s * s * s + 1125 * r * r * s * s - 750 * r * s * s
 
 1082                       + 60 * s * s + 1500 * r * r * r * s - 2025 * r * r * s + 710 * r * s - 47 * s
 
 1083                       + 625 * r * r * r * r - 1300 * r * r * r + 885 * r * r - 214 * r + 12))
 
 1086                    * (375 * r * r * s * s - 150 * r * s * s + 10 * s * s + 1000 * r * r * r * s
 
 1087                       - 1125 * r * r * s + 310 * r * s - 18 * s + 625 * r * r * r * r
 
 1088                       - 1200 * r * r * r + 735 * r * r - 156 * r + 8))
 
 1091                    * (500 * r * r * r * s - 450 * r * r * s + 110 * r * s - 6 * s
 
 1092                       + 625 * r * r * r * r - 1100 * r * r * r + 615 * r * r - 122 * r + 6))
 
 1094        d[7][0] = +(25 * s * (10 * s + 10 * r - 7)
 
 1095                    * (25 * s * s + 50 * r * s - 35 * s + 25 * r * r - 35 * r + 11))
 
 1098                    * (25 * s * s * s + 150 * r * s * s - 60 * s * s + 225 * r * r * s - 240 * r * s
 
 1099                       + 47 * s + 100 * r * r * r - 180 * r * r + 94 * r - 12))
 
 1101        d[9][0] = +(125 * s * (s + 2 * r - 1) * (50 * r * s - 5 * s + 50 * r * r - 50 * r + 4)) / 4;
 
 1102        d[10][0] = -(125 * s
 
 1103                     * (75 * r * r * s - 30 * r * s + 2 * s + 100 * r * r * r - 120 * r * r + 34 * r
 
 1106        d[11][0] = +(25 * (10 * r - 3) * (25 * r * r - 15 * r + 1) * s) / 12;
 
 1107        d[12][0] = -(25 * s * (5 * s - 1)
 
 1108                     * (75 * s * s + 150 * r * s - 120 * s + 75 * r * r - 120 * r + 47))
 
 1111              +(125 * s * (5 * s - 1) * (5 * s * s + 20 * r * s - 9 * s + 15 * r * r - 18 * r + 4))
 
 1113        d[14][0] = -(125 * s * (5 * s - 1) * (10 * r * s - s + 15 * r * r - 12 * r + 1)) / 4;
 
 1114        d[15][0] = +(25 * (75 * r * r - 30 * r + 2) * s * (5 * s - 1)) / 12;
 
 1115        d[16][0] = +(25 * s * (5 * s - 2) * (5 * s - 1) * (10 * s + 10 * r - 9)) / 12;
 
 1116        d[17][0] = -(125 * s * (s + 2 * r - 1) * (5 * s - 2) * (5 * s - 1)) / 6;
 
 1117        d[18][0] = +(25 * (10 * r - 1) * s * (5 * s - 2) * (5 * s - 1)) / 12;
 
 1118        d[19][0] = -(25 * s * (5 * s - 3) * (5 * s - 2) * (5 * s - 1)) / 24;
 
 1119        d[20][0] = +(25 * s * (5 * s - 3) * (5 * s - 2) * (5 * s - 1)) / 24;
 
 1120        d[0][1] = -(3125 * s * s * s * s + 12500 * r * s * s * s - 7500 * s * s * s
 
 1121                    + 18750 * r * r * s * s - 22500 * r * s * s + 6375 * s * s
 
 1122                    + 12500 * r * r * r * s - 22500 * r * r * s + 12750 * r * s - 2250 * s
 
 1123                    + 3125 * r * r * r * r - 7500 * r * r * r + 6375 * r * r - 2250 * r + 274)
 
 1126        d[2][1] = +(3125 * s * s * s * s - 5000 * s * s * s + 2625 * s * s - 500 * s + 24) / 24;
 
 1127        d[3][1] = +(25 * r * (10 * s + 10 * r - 7)
 
 1128                    * (25 * s * s + 50 * r * s - 35 * s + 25 * r * r - 35 * r + 11))
 
 1130        d[4][1] = -(25 * r * (5 * r - 1)
 
 1131                    * (75 * s * s + 150 * r * s - 120 * s + 75 * r * r - 120 * r + 47))
 
 1133        d[5][1] = +(25 * r * (5 * r - 2) * (5 * r - 1) * (10 * s + 10 * r - 9)) / 12;
 
 1134        d[6][1] = -(25 * r * (5 * r - 3) * (5 * r - 2) * (5 * r - 1)) / 24;
 
 1136                    * (625 * s * s * s * s + 2000 * r * s * s * s - 1400 * s * s * s
 
 1137                       + 2250 * r * r * s * s - 3150 * r * s * s + 1065 * s * s
 
 1138                       + 1000 * r * r * r * s - 2100 * r * r * s + 1420 * r * s - 308 * s
 
 1139                       + 125 * r * r * r * r - 350 * r * r * r + 355 * r * r - 154 * r + 24))
 
 1142                    * (100 * s * s * s + 225 * r * s * s - 180 * s * s + 150 * r * r * s
 
 1143                       - 240 * r * s + 94 * s + 25 * r * r * r - 60 * r * r + 47 * r - 12))
 
 1146              +(125 * r * (5 * r - 1) * (15 * s * s + 20 * r * s - 18 * s + 5 * r * r - 9 * r + 4))
 
 1148        d[10][1] = -(125 * r * (5 * r - 2) * (5 * r - 1) * (2 * s + r - 1)) / 6;
 
 1149        d[11][1] = +(25 * r * (5 * r - 3) * (5 * r - 2) * (5 * r - 1)) / 24;
 
 1151                     * (625 * s * s * s * s + 1500 * r * s * s * s - 1300 * s * s * s
 
 1152                        + 1125 * r * r * s * s - 2025 * r * s * s + 885 * s * s
 
 1153                        + 250 * r * r * r * s - 750 * r * r * s + 710 * r * s - 214 * s
 
 1154                        - 25 * r * r * r + 60 * r * r - 47 * r + 12))
 
 1157              +(125 * r * (2 * s + r - 1) * (50 * s * s + 50 * r * s - 50 * s - 5 * r + 4)) / 4;
 
 1158        d[14][1] = -(125 * r * (5 * r - 1) * (15 * s * s + 10 * r * s - 12 * s - r + 1)) / 4;
 
 1159        d[15][1] = +(25 * r * (5 * r - 2) * (5 * r - 1) * (10 * s - 1)) / 12;
 
 1161                     * (625 * s * s * s * s + 1000 * r * s * s * s - 1200 * s * s * s
 
 1162                        + 375 * r * r * s * s - 1125 * r * s * s + 735 * s * s - 150 * r * r * s
 
 1163                        + 310 * r * s - 156 * s + 10 * r * r - 18 * r + 8))
 
 1165        d[17][1] = -(125 * r
 
 1166                     * (100 * s * s * s + 75 * r * s * s - 120 * s * s - 30 * r * s + 34 * s + 2 * r
 
 1169        d[18][1] = +(25 * r * (5 * r - 1) * (75 * s * s - 30 * s + 2)) / 12;
 
 1171                     * (625 * s * s * s * s + 500 * r * s * s * s - 1100 * s * s * s
 
 1172                        - 450 * r * s * s + 615 * s * s + 110 * r * s - 122 * s - 6 * r + 6))
 
 1174        d[20][1] = +(25 * r * (10 * s - 3) * (25 * s * s - 15 * s + 1)) / 12;
 
 1178          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1179        eval_h(internal_coor, &h[0]);
 
 1182    static void eval_h_derived(
 
 1183          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1184        d.resize(2, num_nodes);
 
 1185        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1189class T28_Shape_Evaluator {
 
 1191    static const int num_nodes = 28;
 
 1192    static const int num_dimensions = 2;
 
 1193    static const int order = 6;
 
 1194    typedef IS_T ischeme_type;
 
 1196    static ischeme_type create_ischeme() {
 
 1197        ischeme_type ischeme;
 
 1198        ischeme.set_order(order);
 
 1202    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1203        ischeme_type ischeme;
 
 1204        ischeme.set_order(2 * order);
 
 1205        ischeme.init(property);
 
 1209    static const double r_node[28];
 
 1210    static const double s_node[28];
 
 1211    static const double t_node[28];
 
 1213    static const char name[4];
 
 1215    typedef L6_Shape_Evaluator edge_shape_type_0;
 
 1216    typedef L6_Shape_Evaluator edge_shape_type_1;
 
 1217    static const int num_edge = 3;
 
 1218    static const int edge_node[3][7];
 
 1219    static const int edge_type_index[3];
 
 1221    typedef T28_Shape_Evaluator face_shape_type_0;
 
 1222    typedef T28_Shape_Evaluator face_shape_type_1;
 
 1223    static const int num_face = 2;
 
 1224    static const int face_node[2][28];
 
 1225    static const int face_type_index[2];
 
 1226    static const bool is_t_face[2];
 
 1228    static void eval_h(
const double internal_coor[2], 
double h[28]) {
 
 1229        const double r = internal_coor[0];
 
 1230        const double s = internal_coor[1];
 
 1232        const double r2m = (2 * r - 1);
 
 1233        const double r3m = (3 * r - 1);
 
 1234        const double s2m = (2 * s - 1);
 
 1235        const double s3m = (3 * s - 1);
 
 1237        h[0] = +((s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2) * (3 * s + 3 * r - 1)
 
 1238                 * (6 * s + 6 * r - 5) * (6 * s + 6 * r - 1))
 
 1240        h[1] = +(r * r2m * (3 * r - 2) * r3m * (6 * r - 5) * (6 * r - 1)) / 10;
 
 1241        h[2] = +(s * s2m * (3 * s - 2) * s3m * (6 * s - 5) * (6 * s - 1)) / 10;
 
 1242        h[3] = -(18 * r * (s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2)
 
 1243                 * (3 * s + 3 * r - 1) * (6 * s + 6 * r - 5))
 
 1245        h[4] = +(9 * r * (6 * r - 1) * (s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2)
 
 1246                 * (6 * s + 6 * r - 5))
 
 1248        h[5] = -4 * r * r3m * (6 * r - 1) * (s + r - 1) * (3 * s + 3 * r - 2) * (6 * s + 6 * r - 5);
 
 1249        h[6] = +(9 * r * r2m * r3m * (6 * r - 1) * (s + r - 1) * (6 * s + 6 * r - 5)) / 2;
 
 1250        h[7] = -(18 * r * r2m * (3 * r - 2) * r3m * (6 * r - 1) * (s + r - 1)) / 5;
 
 1251        h[8] = -(18 * s * (s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2)
 
 1252                 * (3 * s + 3 * r - 1) * (6 * s + 6 * r - 5))
 
 1254        h[9] = +54 * r * s * (s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2)
 
 1255               * (6 * s + 6 * r - 5);
 
 1256        h[10] = -36 * r * (6 * r - 1) * s * (s + r - 1) * (3 * s + 3 * r - 2) * (6 * s + 6 * r - 5);
 
 1257        h[11] = +36 * r * r3m * (6 * r - 1) * s * (s + r - 1) * (6 * s + 6 * r - 5);
 
 1258        h[12] = -54 * r * r2m * r3m * (6 * r - 1) * s * (s + r - 1);
 
 1259        h[13] = +(18 * r * r2m * (3 * r - 2) * r3m * (6 * r - 1) * s) / 5;
 
 1260        h[14] = +(9 * s * (s + r - 1) * (2 * s + 2 * r - 1) * (3 * s + 3 * r - 2) * (6 * s - 1)
 
 1261                  * (6 * s + 6 * r - 5))
 
 1263        h[15] = -36 * r * s * (s + r - 1) * (3 * s + 3 * r - 2) * (6 * s - 1) * (6 * s + 6 * r - 5);
 
 1264        h[16] = +27 * r * (6 * r - 1) * s * (s + r - 1) * (6 * s - 1) * (6 * s + 6 * r - 5);
 
 1265        h[17] = -36 * r * r3m * (6 * r - 1) * s * (s + r - 1) * (6 * s - 1);
 
 1266        h[18] = +(9 * r * r2m * r3m * (6 * r - 1) * s * (6 * s - 1)) / 2;
 
 1268              -4 * s * (s + r - 1) * s3m * (3 * s + 3 * r - 2) * (6 * s - 1) * (6 * s + 6 * r - 5);
 
 1269        h[20] = +36 * r * s * (s + r - 1) * s3m * (6 * s - 1) * (6 * s + 6 * r - 5);
 
 1270        h[21] = -36 * r * (6 * r - 1) * s * (s + r - 1) * s3m * (6 * s - 1);
 
 1271        h[22] = +4 * r * r3m * (6 * r - 1) * s * s3m * (6 * s - 1);
 
 1272        h[23] = +(9 * s * (s + r - 1) * s2m * s3m * (6 * s - 1) * (6 * s + 6 * r - 5)) / 2;
 
 1273        h[24] = -54 * r * s * (s + r - 1) * s2m * s3m * (6 * s - 1);
 
 1274        h[25] = +(9 * r * (6 * r - 1) * s * s2m * s3m * (6 * s - 1)) / 2;
 
 1275        h[26] = -(18 * s * (s + r - 1) * s2m * (3 * s - 2) * s3m * (6 * s - 1)) / 5;
 
 1276        h[27] = +(18 * r * s * s2m * (3 * s - 2) * s3m * (6 * s - 1)) / 5;
 
 1279    static void eval_h_derived(
const double internal_coor[2], 
double d[28][2]) {
 
 1280        const double r = internal_coor[0];
 
 1281        const double s = internal_coor[1];
 
 1283        const double r2m = (2 * r - 1);
 
 1284        const double r3m = (3 * r - 1);
 
 1285        const double r4m = (4 * r - 1);
 
 1286        const double s2m = (2 * s - 1);
 
 1287        const double s3m = (3 * s - 1);
 
 1288        const double s4m = (4 * s - 1);
 
 1290        d[0][0] = +((12 * s + 12 * r - 7)
 
 1291                    * (324 * s * s * s * s + 1296 * r * s * s * s - 756 * s * s * s
 
 1292                       + 1944 * r * r * s * s - 2268 * r * s * s + 609 * s * s
 
 1293                       + 1296 * r * r * r * s - 2268 * r * r * s + 1218 * r * s - 196 * s
 
 1294                       + 324 * r * r * r * r - 756 * r * r * r + 609 * r * r - 196 * r + 21))
 
 1297              +((12 * r - 5) * (324 * r * r * r * r - 540 * r * r * r + 285 * r * r - 50 * r + 2))
 
 1301                    * (108 * s * s * s * s * s + 1080 * r * s * s * s * s - 360 * s * s * s * s
 
 1302                       + 3240 * r * r * s * s * s - 2880 * r * s * s * s + 465 * s * s * s
 
 1303                       + 4320 * r * r * r * s * s - 6480 * r * r * s * s + 2790 * r * s * s
 
 1304                       - 290 * s * s + 2700 * r * r * r * r * s - 5760 * r * r * r * s
 
 1305                       + 4185 * r * r * s - 1160 * r * s + 87 * s + 648 * r * r * r * r * r
 
 1306                       - 1800 * r * r * r * r + 1860 * r * r * r - 870 * r * r + 174 * r - 10))
 
 1309                    * (432 * r * s * s * s * s - 36 * s * s * s * s + 2592 * r * r * s * s * s
 
 1310                       - 1584 * r * s * s * s + 108 * s * s * s + 5184 * r * r * r * s * s
 
 1311                       - 6480 * r * r * s * s + 2076 * r * s * s - 119 * s * s
 
 1312                       + 4320 * r * r * r * r * s - 8352 * r * r * r * s + 5256 * r * r * s
 
 1313                       - 1160 * r * s + 57 * s + 1296 * r * r * r * r * r - 3420 * r * r * r * r
 
 1314                       + 3288 * r * r * r - 1383 * r * r + 234 * r - 10))
 
 1316        d[5][0] = -4 * (s + 2 * r - 1)
 
 1317                  * (972 * r * r * s * s - 324 * r * s * s + 18 * s * s + 1944 * r * r * r * s
 
 1318                     - 2268 * r * r * s + 558 * r * s - 27 * s + 972 * r * r * r * r
 
 1319                     - 1944 * r * r * r + 1206 * r * r - 234 * r + 10);
 
 1321                    * (864 * r * r * r * s * s - 648 * r * r * s * s + 132 * r * s * s - 6 * s * s
 
 1322                       + 2160 * r * r * r * r * s - 3312 * r * r * r * s + 1584 * r * r * s
 
 1323                       - 266 * r * s + 11 * s + 1296 * r * r * r * r * r - 3060 * r * r * r * r
 
 1324                       + 2568 * r * r * r - 921 * r * r + 132 * r - 5))
 
 1327                    * (540 * r * r * r * r * s - 720 * r * r * r * s + 315 * r * r * s - 50 * r * s
 
 1328                       + 2 * s + 648 * r * r * r * r * r - 1440 * r * r * r * r + 1140 * r * r * r
 
 1329                       - 390 * r * r + 54 * r - 2))
 
 1332                    * (540 * s * s * s * s + 2160 * r * s * s * s - 1440 * s * s * s
 
 1333                       + 3240 * r * r * s * s - 4320 * r * s * s + 1395 * s * s
 
 1334                       + 2160 * r * r * r * s - 4320 * r * r * s + 2790 * r * s - 580 * s
 
 1335                       + 540 * r * r * r * r - 1440 * r * r * r + 1395 * r * r - 580 * r + 87))
 
 1338                  * (36 * s * s * s * s + 288 * r * s * s * s - 108 * s * s * s
 
 1339                     + 648 * r * r * s * s - 648 * r * s * s + 119 * s * s + 576 * r * r * r * s
 
 1340                     - 972 * r * r * s + 476 * r * s - 57 * s + 180 * r * r * r * r
 
 1341                     - 432 * r * r * r + 357 * r * r - 114 * r + 10);
 
 1343                   * (216 * r * s * s * s - 18 * s * s * s + 972 * r * r * s * s - 648 * r * s * s
 
 1344                      + 45 * s * s + 1296 * r * r * r * s - 1782 * r * r * s + 624 * r * s - 37 * s
 
 1345                      + 540 * r * r * r * r - 1152 * r * r * r + 801 * r * r - 194 * r + 10);
 
 1347                   * (324 * r * r * s * s - 108 * r * s * s + 6 * s * s + 864 * r * r * r * s
 
 1348                      - 918 * r * r * s + 222 * r * s - 11 * s + 540 * r * r * r * r
 
 1349                      - 1008 * r * r * r + 585 * r * r - 112 * r + 5);
 
 1351                   * (144 * r * r * r * s - 108 * r * r * s + 22 * r * s - s + 180 * r * r * r * r
 
 1352                      - 288 * r * r * r + 141 * r * r - 24 * r + 1);
 
 1354              +(18 * (540 * r * r * r * r - 720 * r * r * r + 315 * r * r - 50 * r + 2) * s) / 5;
 
 1355        d[14][0] = +(9 * s * (4 * s + 4 * r - 3) * (6 * s - 1)
 
 1356                     * (36 * s * s + 72 * r * s - 54 * s + 36 * r * r - 54 * r + 19))
 
 1358        d[15][0] = -36 * s * (6 * s - 1)
 
 1359                   * (18 * s * s * s + 108 * r * s * s - 45 * s * s + 162 * r * r * s - 180 * r * s
 
 1360                      + 37 * s + 72 * r * r * r - 135 * r * r + 74 * r - 10);
 
 1361        d[16][0] = +27 * s * (s + 2 * r - 1) * (6 * s - 1)
 
 1362                   * (72 * r * s - 6 * s + 72 * r * r - 72 * r + 5);
 
 1363        d[17][0] = -36 * s * (6 * s - 1)
 
 1364                   * (54 * r * r * s - 18 * r * s + s + 72 * r * r * r - 81 * r * r + 20 * r - 1);
 
 1365        d[18][0] = +(9 * r4m * (36 * r * r - 18 * r + 1) * s * (6 * s - 1)) / 2;
 
 1366        d[19][0] = -4 * s * s3m * (6 * s - 1)
 
 1367                   * (54 * s * s + 108 * r * s - 90 * s + 54 * r * r - 90 * r + 37);
 
 1368        d[20][0] = +36 * s * s3m * (6 * s - 1)
 
 1369                   * (6 * s * s + 24 * r * s - 11 * s + 18 * r * r - 22 * r + 5);
 
 1370        d[21][0] = -36 * s * s3m * (6 * s - 1) * (12 * r * s - s + 18 * r * r - 14 * r + 1);
 
 1371        d[22][0] = +4 * (54 * r * r - 18 * r + 1) * s * s3m * (6 * s - 1);
 
 1372        d[23][0] = +(9 * s * s2m * s3m * (6 * s - 1) * (12 * s + 12 * r - 11)) / 2;
 
 1373        d[24][0] = -54 * s * (s + 2 * r - 1) * s2m * s3m * (6 * s - 1);
 
 1374        d[25][0] = +(9 * (12 * r - 1) * s * s2m * s3m * (6 * s - 1)) / 2;
 
 1375        d[26][0] = -(18 * s * s2m * (3 * s - 2) * s3m * (6 * s - 1)) / 5;
 
 1376        d[27][0] = +(18 * s * s2m * (3 * s - 2) * s3m * (6 * s - 1)) / 5;
 
 1377        d[0][1] = +((12 * s + 12 * r - 7)
 
 1378                    * (324 * s * s * s * s + 1296 * r * s * s * s - 756 * s * s * s
 
 1379                       + 1944 * r * r * s * s - 2268 * r * s * s + 609 * s * s
 
 1380                       + 1296 * r * r * r * s - 2268 * r * r * s + 1218 * r * s - 196 * s
 
 1381                       + 324 * r * r * r * r - 756 * r * r * r + 609 * r * r - 196 * r + 21))
 
 1385              +((12 * s - 5) * (324 * s * s * s * s - 540 * s * s * s + 285 * s * s - 50 * s + 2))
 
 1388                    * (540 * s * s * s * s + 2160 * r * s * s * s - 1440 * s * s * s
 
 1389                       + 3240 * r * r * s * s - 4320 * r * s * s + 1395 * s * s
 
 1390                       + 2160 * r * r * r * s - 4320 * r * r * s + 2790 * r * s - 580 * s
 
 1391                       + 540 * r * r * r * r - 1440 * r * r * r + 1395 * r * r - 580 * r + 87))
 
 1393        d[4][1] = +(9 * r * (6 * r - 1) * (4 * s + 4 * r - 3)
 
 1394                    * (36 * s * s + 72 * r * s - 54 * s + 36 * r * r - 54 * r + 19))
 
 1396        d[5][1] = -4 * r * r3m * (6 * r - 1)
 
 1397                  * (54 * s * s + 108 * r * s - 90 * s + 54 * r * r - 90 * r + 37);
 
 1398        d[6][1] = +(9 * r * r2m * r3m * (6 * r - 1) * (12 * s + 12 * r - 11)) / 2;
 
 1399        d[7][1] = -(18 * r * r2m * (3 * r - 2) * r3m * (6 * r - 1)) / 5;
 
 1401                    * (648 * s * s * s * s * s + 2700 * r * s * s * s * s - 1800 * s * s * s * s
 
 1402                       + 4320 * r * r * s * s * s - 5760 * r * s * s * s + 1860 * s * s * s
 
 1403                       + 3240 * r * r * r * s * s - 6480 * r * r * s * s + 4185 * r * s * s
 
 1404                       - 870 * s * s + 1080 * r * r * r * r * s - 2880 * r * r * r * s
 
 1405                       + 2790 * r * r * s - 1160 * r * s + 174 * s + 108 * r * r * r * r * r
 
 1406                       - 360 * r * r * r * r + 465 * r * r * r - 290 * r * r + 87 * r - 10))
 
 1409                  * (180 * s * s * s * s + 576 * r * s * s * s - 432 * s * s * s
 
 1410                     + 648 * r * r * s * s - 972 * r * s * s + 357 * s * s + 288 * r * r * r * s
 
 1411                     - 648 * r * r * s + 476 * r * s - 114 * s + 36 * r * r * r * r
 
 1412                     - 108 * r * r * r + 119 * r * r - 57 * r + 10);
 
 1413        d[10][1] = -36 * r * (6 * r - 1)
 
 1414                   * (72 * s * s * s + 162 * r * s * s - 135 * s * s + 108 * r * r * s - 180 * r * s
 
 1415                      + 74 * s + 18 * r * r * r - 45 * r * r + 37 * r - 10);
 
 1416        d[11][1] = +36 * r * r3m * (6 * r - 1)
 
 1417                   * (18 * s * s + 24 * r * s - 22 * s + 6 * r * r - 11 * r + 5);
 
 1418        d[12][1] = -54 * r * r2m * r3m * (6 * r - 1) * (2 * s + r - 1);
 
 1419        d[13][1] = +(18 * r * r2m * (3 * r - 2) * r3m * (6 * r - 1)) / 5;
 
 1421                     * (1296 * s * s * s * s * s + 4320 * r * s * s * s * s - 3420 * s * s * s * s
 
 1422                        + 5184 * r * r * s * s * s - 8352 * r * s * s * s + 3288 * s * s * s
 
 1423                        + 2592 * r * r * r * s * s - 6480 * r * r * s * s + 5256 * r * s * s
 
 1424                        - 1383 * s * s + 432 * r * r * r * r * s - 1584 * r * r * r * s
 
 1425                        + 2076 * r * r * s - 1160 * r * s + 234 * s - 36 * r * r * r * r
 
 1426                        + 108 * r * r * r - 119 * r * r + 57 * r - 10))
 
 1430              * (540 * s * s * s * s + 1296 * r * s * s * s - 1152 * s * s * s + 972 * r * r * s * s
 
 1431                 - 1782 * r * s * s + 801 * s * s + 216 * r * r * r * s - 648 * r * r * s
 
 1432                 + 624 * r * s - 194 * s - 18 * r * r * r + 45 * r * r - 37 * r + 10);
 
 1433        d[16][1] = +27 * r * (6 * r - 1) * (2 * s + r - 1)
 
 1434                   * (72 * s * s + 72 * r * s - 72 * s - 6 * r + 5);
 
 1435        d[17][1] = -36 * r * r3m * (6 * r - 1) * (18 * s * s + 12 * r * s - 14 * s - r + 1);
 
 1436        d[18][1] = +(9 * r * r2m * r3m * (6 * r - 1) * (12 * s - 1)) / 2;
 
 1437        d[19][1] = -4 * (2 * s + r - 1)
 
 1438                   * (972 * s * s * s * s + 1944 * r * s * s * s - 1944 * s * s * s
 
 1439                      + 972 * r * r * s * s - 2268 * r * s * s + 1206 * s * s - 324 * r * r * s
 
 1440                      + 558 * r * s - 234 * s + 18 * r * r - 27 * r + 10);
 
 1442                   * (540 * s * s * s * s + 864 * r * s * s * s - 1008 * s * s * s
 
 1443                      + 324 * r * r * s * s - 918 * r * s * s + 585 * s * s - 108 * r * r * s
 
 1444                      + 222 * r * s - 112 * s + 6 * r * r - 11 * r + 5);
 
 1445        d[21][1] = -36 * r * (6 * r - 1)
 
 1446                   * (72 * s * s * s + 54 * r * s * s - 81 * s * s - 18 * r * s + 20 * s + r - 1);
 
 1447        d[22][1] = +4 * r * r3m * (6 * r - 1) * (54 * s * s - 18 * s + 1);
 
 1449                     * (1296 * s * s * s * s * s + 2160 * r * s * s * s * s - 3060 * s * s * s * s
 
 1450                        + 864 * r * r * s * s * s - 3312 * r * s * s * s + 2568 * s * s * s
 
 1451                        - 648 * r * r * s * s + 1584 * r * s * s - 921 * s * s + 132 * r * r * s
 
 1452                        - 266 * r * s + 132 * s - 6 * r * r + 11 * r - 5))
 
 1455                   * (180 * s * s * s * s + 144 * r * s * s * s - 288 * s * s * s - 108 * r * s * s
 
 1456                      + 141 * s * s + 22 * r * s - 24 * s - r + 1);
 
 1457        d[25][1] = +(9 * r * (6 * r - 1) * s4m * (36 * s * s - 18 * s + 1)) / 2;
 
 1459                     * (648 * s * s * s * s * s + 540 * r * s * s * s * s - 1440 * s * s * s * s
 
 1460                        - 720 * r * s * s * s + 1140 * s * s * s + 315 * r * s * s - 390 * s * s
 
 1461                        - 50 * r * s + 54 * s + 2 * r - 2))
 
 1464              +(18 * r * (540 * s * s * s * s - 720 * s * s * s + 315 * s * s - 50 * s + 2)) / 5;
 
 1468          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1469        eval_h(internal_coor, &h[0]);
 
 1472    static void eval_h_derived(
 
 1473          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1474        d.resize(2, num_nodes);
 
 1475        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1483class Q4_Shape_Evaluator {
 
 1485    static const int num_nodes = 4;
 
 1486    static const int num_dimensions = 2;
 
 1487    static const int order = 2;
 
 1488    typedef IS_Q ischeme_type;
 
 1490    static ischeme_type create_ischeme() {
 
 1491        ischeme_type ischeme;
 
 1492        ischeme[0].set_order(1);
 
 1493        ischeme[1].set_order(1);
 
 1497    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1498        ischeme_type ischeme;
 
 1499        ischeme[0].set_order(2);
 
 1500        ischeme[1].set_order(2);
 
 1501        ischeme.init(property);
 
 1505    static const double r_node[4];
 
 1506    static const double s_node[4];
 
 1507    static const double t_node[4];
 
 1509    static const char name[3];
 
 1511    typedef L2_Shape_Evaluator edge_shape_type_0;
 
 1512    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 1513    static const int num_edge = 4;
 
 1514    static const int edge_node[4][2];
 
 1515    static const int edge_type_index[4];
 
 1517    typedef Q4_Shape_Evaluator face_shape_type_0;
 
 1518    typedef Q4_Shape_Evaluator face_shape_type_1;
 
 1519    static const int num_face = 2;
 
 1520    static const int face_node[2][4];
 
 1521    static const int face_type_index[2];
 
 1522    static const bool is_t_face[2];
 
 1524    static void eval_h(
const double internal_coor[2], 
double h[4]) {
 
 1525        const double r = internal_coor[0];
 
 1526        const double s = internal_coor[1];
 
 1528        const double rm = 1. - r;
 
 1529        const double sm = 1. - s;
 
 1531        const double rp = 1. + r;
 
 1532        const double sp = 1. + s;
 
 1534        h[0] = 0.25 * rm * sm;
 
 1535        h[1] = 0.25 * rp * sm;
 
 1536        h[2] = 0.25 * rp * sp;
 
 1537        h[3] = 0.25 * rm * sp;
 
 1540    static void eval_h_derived(
const double internal_coor[2], 
double d[4][2]) {
 
 1541        const double r = internal_coor[0];
 
 1542        const double s = internal_coor[1];
 
 1544        const double rm = 1. - r;
 
 1545        const double sm = 1. - s;
 
 1547        const double rp = 1. + r;
 
 1548        const double sp = 1. + s;
 
 1550        const double fa = 0.25;
 
 1566          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1567        eval_h(internal_coor, &h[0]);
 
 1570    static void eval_h_derived(
 
 1571          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1572        d.resize(2, num_nodes);
 
 1573        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1577class Q8_Shape_Evaluator {
 
 1579    static const int num_nodes = 8;
 
 1580    static const int num_dimensions = 2;
 
 1581    static const int order = 4;
 
 1582    typedef IS_Q ischeme_type;
 
 1584    static ischeme_type create_ischeme() {
 
 1585        ischeme_type ischeme;
 
 1586        ischeme[0].set_order(2);
 
 1587        ischeme[1].set_order(2);
 
 1591    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1592        ischeme_type ischeme;
 
 1593        ischeme[0].set_order(2 * 2);
 
 1594        ischeme[1].set_order(2 * 2);
 
 1595        ischeme.init(property);
 
 1599    static const double r_node[8];
 
 1600    static const double s_node[8];
 
 1601    static const double t_node[8];
 
 1603    static const char name[3];
 
 1605    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 1606    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 1607    static const int num_edge = 4;
 
 1608    static const int edge_node[4][3];
 
 1609    static const int edge_type_index[4];
 
 1611    typedef Q8_Shape_Evaluator face_shape_type_0;
 
 1612    typedef Q8_Shape_Evaluator face_shape_type_1;
 
 1613    static const int num_face = 2;
 
 1614    static const int face_node[2][8];
 
 1615    static const int face_type_index[2];
 
 1616    static const bool is_t_face[2];
 
 1618    static void eval_h(
const double internal_coor[2], 
double h[8]) {
 
 1619        const double r = internal_coor[0];
 
 1620        const double s = internal_coor[1];
 
 1622        const double rm = 1. - r;
 
 1623        const double sm = 1. - s;
 
 1625        const double rp = 1. + r;
 
 1626        const double sp = 1. + s;
 
 1628        h[0] = -0.25 * rm * sm * (s + r + 1);
 
 1629        h[1] = -0.25 * rp * sm * (s - r + 1);
 
 1630        h[2] = +0.25 * rp * sp * (s + r - 1);
 
 1631        h[3] = +0.25 * rm * sp * (s - r - 1);
 
 1632        h[4] = +0.50 * rm * rp * sm;
 
 1633        h[5] = +0.50 * rp * sm * sp;
 
 1634        h[6] = +0.50 * rm * rp * sp;
 
 1635        h[7] = +0.50 * rm * sm * sp;
 
 1638    static void eval_h_derived(
const double internal_coor[2], 
double d[8][2]) {
 
 1639        const double r = internal_coor[0];
 
 1640        const double s = internal_coor[1];
 
 1642        const double rm = 1. - r;
 
 1643        const double sm = 1. - s;
 
 1645        const double rp = 1. + r;
 
 1646        const double sp = 1. + s;
 
 1648        d[0][0] = +0.25 * sm * (s + 2 * r);
 
 1649        d[1][0] = -0.25 * sm * (s - 2 * r);
 
 1650        d[2][0] = +0.25 * sp * (s + 2 * r);
 
 1651        d[3][0] = -0.25 * sp * (s - 2 * r);
 
 1652        d[4][0] = -1.0 * r * sm;
 
 1653        d[5][0] = +0.50 * sm * sp;
 
 1654        d[6][0] = -1.0 * r * sp;
 
 1655        d[7][0] = -0.50 * sm * sp;
 
 1657        d[0][1] = +0.25 * rm * (2 * s + r);
 
 1658        d[1][1] = +0.25 * rp * (2 * s - r);
 
 1659        d[2][1] = +0.25 * rp * (2 * s + r);
 
 1660        d[3][1] = +0.25 * rm * (2 * s - r);
 
 1661        d[4][1] = -0.50 * rm * rp;
 
 1662        d[5][1] = -1.0 * rp * s;
 
 1663        d[6][1] = +0.50 * rm * rp;
 
 1664        d[7][1] = -1.0 * rm * s;
 
 1668          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1669        eval_h(internal_coor, &h[0]);
 
 1672    static void eval_h_derived(
 
 1673          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1674        d.resize(2, num_nodes);
 
 1675        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1679class Q9_Shape_Evaluator {
 
 1681    static const int num_nodes = 9;
 
 1682    static const int num_dimensions = 2;
 
 1683    static const int order = 4;
 
 1684    typedef IS_Q ischeme_type;
 
 1686    static ischeme_type create_ischeme() {
 
 1687        ischeme_type ischeme;
 
 1688        ischeme[0].set_order(2);
 
 1689        ischeme[1].set_order(2);
 
 1693    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1694        ischeme_type ischeme;
 
 1695        ischeme[0].set_order(2 * 2);
 
 1696        ischeme[1].set_order(2 * 2);
 
 1697        ischeme.init(property);
 
 1701    static const double r_node[9];
 
 1702    static const double s_node[9];
 
 1703    static const double t_node[9];
 
 1705    static const char name[3];
 
 1707    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 1708    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 1709    static const int num_edge = 4;
 
 1710    static const int edge_node[4][3];
 
 1711    static const int edge_type_index[4];
 
 1713    typedef Q9_Shape_Evaluator face_shape_type_0;
 
 1714    typedef Q9_Shape_Evaluator face_shape_type_1;
 
 1715    static const int num_face = 2;
 
 1716    static const int face_node[2][9];
 
 1717    static const int face_type_index[2];
 
 1718    static const bool is_t_face[2];
 
 1720    static void eval_h(
const double internal_coor[2], 
double h[9]) {
 
 1721        const double r = internal_coor[0];
 
 1722        const double s = internal_coor[1];
 
 1724        const double rm = 1. - r;
 
 1725        const double sm = 1. - s;
 
 1727        const double rp = 1. + r;
 
 1728        const double sp = 1. + s;
 
 1730        h[0] = +0.25 * rm * r * sm * s;
 
 1731        h[1] = -0.25 * r * rp * sm * s;
 
 1732        h[2] = +0.25 * r * rp * s * sp;
 
 1733        h[3] = -0.25 * rm * r * s * sp;
 
 1734        h[4] = -0.50 * rm * rp * sm * s;
 
 1735        h[5] = +0.50 * r * rp * sm * sp;
 
 1736        h[6] = +0.50 * rm * rp * s * sp;
 
 1737        h[7] = -0.50 * rm * r * sm * sp;
 
 1738        h[8] = +1.0 * rm * rp * sm * sp;
 
 1741    static void eval_h_derived(
const double internal_coor[2], 
double d[9][2]) {
 
 1742        const double r = internal_coor[0];
 
 1743        const double s = internal_coor[1];
 
 1745        const double rm = 1. - r;
 
 1746        const double sm = 1. - s;
 
 1748        const double rp = 1. + r;
 
 1749        const double sp = 1. + s;
 
 1751        d[0][0] = -0.25 * sm * s * (2 * r - 1);
 
 1752        d[1][0] = -0.25 * sm * s * (2 * r + 1);
 
 1753        d[2][0] = +0.25 * s * sp * (2 * r + 1);
 
 1754        d[3][0] = +0.25 * s * sp * (2 * r - 1);
 
 1755        d[4][0] = +1.0 * r * sm * s;
 
 1756        d[5][0] = +0.50 * sm * sp * (2 * r + 1);
 
 1757        d[6][0] = -1.0 * r * s * sp;
 
 1758        d[7][0] = +0.50 * sm * sp * (2 * r - 1);
 
 1759        d[8][0] = -2.00 * r * sm * sp;
 
 1761        d[0][1] = -0.25 * rm * r * (2 * s - 1);
 
 1762        d[1][1] = +0.25 * r * rp * (2 * s - 1);
 
 1763        d[2][1] = +0.25 * r * rp * (2 * s + 1);
 
 1764        d[3][1] = -0.25 * rm * r * (2 * s + 1);
 
 1765        d[4][1] = +0.50 * rm * rp * (2 * s - 1);
 
 1766        d[5][1] = -1.0 * r * rp * s;
 
 1767        d[6][1] = +0.50 * rm * rp * (2 * s + 1);
 
 1768        d[7][1] = +1.0 * rm * r * s;
 
 1769        d[8][1] = -2.00 * rm * rp * s;
 
 1773          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1774        eval_h(internal_coor, &h[0]);
 
 1777    static void eval_h_derived(
 
 1778          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1779        d.resize(2, num_nodes);
 
 1780        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1784class Q3X2_Shape_Evaluator {
 
 1786    static const int num_nodes = 6;
 
 1787    static const int num_dimensions = 2;
 
 1788    static const int order = 3;
 
 1789    typedef IS_Q ischeme_type;
 
 1791    static ischeme_type create_ischeme() {
 
 1792        ischeme_type ischeme;
 
 1793        ischeme[0].set_order(2);
 
 1794        ischeme[1].set_order(1);
 
 1798    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1799        ischeme_type ischeme;
 
 1800        ischeme[0].set_order(2 * 2);
 
 1801        ischeme[1].set_order(2 * 1);
 
 1802        ischeme.init(property);
 
 1806    static const double r_node[6];
 
 1807    static const double s_node[6];
 
 1808    static const double t_node[6];
 
 1810    static const char name[5];
 
 1812    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 1813    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 1814    static const int num_edge = 4;
 
 1815    static const int edge_node[4][3];
 
 1816    static const int edge_type_index[4];
 
 1818    typedef Q3X2_Shape_Evaluator face_shape_type_0;
 
 1819    typedef Q3X2_Shape_Evaluator face_shape_type_1;
 
 1820    static const int num_face = 2;
 
 1821    static const int face_node[2][6];
 
 1822    static const int face_type_index[2];
 
 1823    static const bool is_t_face[2];
 
 1825    static void eval_h(
const double internal_coor[2], 
double h[6]) {
 
 1826        const double r = internal_coor[0];
 
 1827        const double s = internal_coor[1];
 
 1829        const double rm = r - 1;
 
 1830        const double rp = r + 1;
 
 1831        const double sm = s - 1;
 
 1832        const double sp = s + 1;
 
 1834        h[0] = -rm * r * sm * 0.25;
 
 1835        h[1] = -r * rp * sm * 0.25;
 
 1836        h[2] = +r * rp * sp * 0.25;
 
 1837        h[3] = +rm * r * sp * 0.25;
 
 1838        h[4] = +rm * rp * sm * 0.5;
 
 1839        h[5] = -rm * rp * sp * 0.5;
 
 1842    static void eval_h_derived(
const double internal_coor[2], 
double d[6][2]) {
 
 1843        const double r = internal_coor[0];
 
 1844        const double s = internal_coor[1];
 
 1846        const double rm = r - 1;
 
 1847        const double rp = r + 1;
 
 1848        const double sm = s - 1;
 
 1849        const double sp = s + 1;
 
 1851        d[0][0] = -(2 * r - 1) * sm * 0.25;
 
 1852        d[1][0] = -(2 * r + 1) * sm * 0.25;
 
 1853        d[2][0] = +(2 * r + 1) * sp * 0.25;
 
 1854        d[3][0] = +(2 * r - 1) * sp * 0.25;
 
 1857        d[0][1] = -rm * r * 0.25;
 
 1858        d[1][1] = -r * rp * 0.25;
 
 1859        d[2][1] = +r * rp * 0.25;
 
 1860        d[3][1] = +rm * r * 0.25;
 
 1861        d[4][1] = +rm * rp * 0.5;
 
 1862        d[5][1] = -rm * rp * 0.5;
 
 1866          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1867        eval_h(internal_coor, &h[0]);
 
 1870    static void eval_h_derived(
 
 1871          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1872        d.resize(2, num_nodes);
 
 1873        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 1877class Q12_Shape_Evaluator {
 
 1879    static const int num_nodes = 12;
 
 1880    static const int num_dimensions = 2;
 
 1881    static const int order = 6;
 
 1882    typedef IS_Q ischeme_type;
 
 1884    static ischeme_type create_ischeme() {
 
 1885        ischeme_type ischeme;
 
 1886        ischeme[0].set_order(3);
 
 1887        ischeme[1].set_order(3);
 
 1891    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 1892        ischeme_type ischeme;
 
 1893        ischeme[0].set_order(2 * 3);
 
 1894        ischeme[1].set_order(2 * 3);
 
 1895        ischeme.init(property);
 
 1899    static const double r_node[12];
 
 1900    static const double s_node[12];
 
 1901    static const double t_node[12];
 
 1903    static const char name[4];
 
 1905    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 1906    typedef L4_Shape_Evaluator edge_shape_type_1;
 
 1907    static const int num_edge = 4;
 
 1908    static const int edge_node[4][4];
 
 1909    static const int edge_type_index[4];
 
 1911    typedef Q12_Shape_Evaluator face_shape_type_0;
 
 1912    typedef Q12_Shape_Evaluator face_shape_type_1;
 
 1913    static const int num_face = 2;
 
 1914    static const int face_node[2][12];
 
 1915    static const int face_type_index[2];
 
 1916    static const bool is_t_face[2];
 
 1918    static void eval_h(
const double internal_coor[2], 
double h[12]) {
 
 1919        const double r = internal_coor[0];
 
 1920        const double s = internal_coor[1];
 
 1922        const double rm = r - 1;
 
 1923        const double rp = r + 1;
 
 1924        const double sm = s - 1;
 
 1925        const double sp = s + 1;
 
 1927        const double r3m = 3 * r - 1;
 
 1928        const double r3p = 3 * r + 1;
 
 1929        const double s3m = 3 * s - 1;
 
 1930        const double s3p = 3 * s + 1;
 
 1932        const double fa = 0.03125;  
 
 1934        h[0] = +rm * sm * (9 * s * s + 9 * r * r - 10) * fa;
 
 1935        h[1] = -rp * sm * (9 * s * s + 9 * r * r - 10) * fa;
 
 1936        h[2] = +rp * sp * (9 * s * s + 9 * r * r - 10) * fa;
 
 1937        h[3] = -rm * sp * (9 * s * s + 9 * r * r - 10) * fa;
 
 1938        h[4] = -9 * rm * rp * r3m * sm * fa;
 
 1939        h[5] = +9 * rm * rp * r3p * sm * fa;
 
 1940        h[6] = -9 * rm * sm * sp * s3m * fa;
 
 1941        h[7] = +9 * rp * sm * sp * s3m * fa;
 
 1942        h[8] = +9 * rm * sm * sp * s3p * fa;
 
 1943        h[9] = -9 * rp * sm * sp * s3p * fa;
 
 1944        h[10] = +9 * rm * rp * r3m * sp * fa;
 
 1945        h[11] = -9 * rm * rp * r3p * sp * fa;
 
 1948    static void eval_h_derived(
const double internal_coor[2], 
double d[12][2]) {
 
 1949        const double r = internal_coor[0];
 
 1950        const double s = internal_coor[1];
 
 1952        const double rm = r - 1;
 
 1953        const double rp = r + 1;
 
 1954        const double sm = s - 1;
 
 1955        const double sp = s + 1;
 
 1957        const double r3m = 3 * r - 1;
 
 1958        const double r3p = 3 * r + 1;
 
 1959        const double s3m = 3 * s - 1;
 
 1960        const double s3p = 3 * s + 1;
 
 1962        const double fa = 0.03125;  
 
 1964        d[0][0] = +sm * (9 * s * s + 27 * r * r - 18 * r - 10) * fa;
 
 1965        d[1][0] = -sm * (9 * s * s + 27 * r * r + 18 * r - 10) * fa;
 
 1966        d[2][0] = +sp * (9 * s * s + 27 * r * r + 18 * r - 10) * fa;
 
 1967        d[3][0] = -sp * (9 * s * s + 27 * r * r - 18 * r - 10) * fa;
 
 1968        d[4][0] = -9 * (9 * r * r - 2 * r - 3) * sm * fa;
 
 1969        d[5][0] = +9 * (9 * r * r + 2 * r - 3) * sm * fa;
 
 1970        d[6][0] = -9 * sm * sp * s3m * fa;
 
 1971        d[7][0] = +9 * sm * sp * s3m * fa;
 
 1972        d[8][0] = +9 * sm * sp * s3p * fa;
 
 1973        d[9][0] = -9 * sm * sp * s3p * fa;
 
 1974        d[10][0] = +9 * (9 * r * r - 2 * r - 3) * sp * fa;
 
 1975        d[11][0] = -9 * (9 * r * r + 2 * r - 3) * sp * fa;
 
 1976        d[0][1] = +rm * (27 * s * s - 18 * s + 9 * r * r - 10) * fa;
 
 1977        d[1][1] = -rp * (27 * s * s - 18 * s + 9 * r * r - 10) * fa;
 
 1978        d[2][1] = +rp * (27 * s * s + 18 * s + 9 * r * r - 10) * fa;
 
 1979        d[3][1] = -rm * (27 * s * s + 18 * s + 9 * r * r - 10) * fa;
 
 1980        d[4][1] = -9 * rm * rp * r3m * fa;
 
 1981        d[5][1] = +9 * rm * rp * r3p * fa;
 
 1982        d[6][1] = -9 * rm * (9 * s * s - 2 * s - 3) * fa;
 
 1983        d[7][1] = +9 * rp * (9 * s * s - 2 * s - 3) * fa;
 
 1984        d[8][1] = +9 * rm * (9 * s * s + 2 * s - 3) * fa;
 
 1985        d[9][1] = -9 * rp * (9 * s * s + 2 * s - 3) * fa;
 
 1986        d[10][1] = +9 * rm * rp * r3m * fa;
 
 1987        d[11][1] = -9 * rm * rp * r3p * fa;
 
 1991          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 1992        eval_h(internal_coor, &h[0]);
 
 1995    static void eval_h_derived(
 
 1996          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 1997        d.resize(2, num_nodes);
 
 1998        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2002class Q16_Shape_Evaluator {
 
 2004    static const int num_nodes = 16;
 
 2005    static const int num_dimensions = 2;
 
 2006    static const int order = 6;
 
 2007    typedef IS_Q ischeme_type;
 
 2009    static ischeme_type create_ischeme() {
 
 2010        ischeme_type ischeme;
 
 2011        ischeme[0].set_order(3);
 
 2012        ischeme[1].set_order(3);
 
 2016    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2017        ischeme_type ischeme;
 
 2018        ischeme[0].set_order(2 * 3);
 
 2019        ischeme[1].set_order(2 * 3);
 
 2020        ischeme.init(property);
 
 2024    static const double r_node[16];
 
 2025    static const double s_node[16];
 
 2026    static const double t_node[16];
 
 2028    static const char name[4];
 
 2030    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 2031    typedef L4_Shape_Evaluator edge_shape_type_1;
 
 2032    static const int num_edge = 4;
 
 2033    static const int edge_node[4][4];
 
 2034    static const int edge_type_index[4];
 
 2036    typedef Q16_Shape_Evaluator face_shape_type_0;
 
 2037    typedef Q16_Shape_Evaluator face_shape_type_1;
 
 2038    static const int num_face = 2;
 
 2039    static const int face_node[2][16];
 
 2040    static const int face_type_index[2];
 
 2041    static const bool is_t_face[2];
 
 2043    static void eval_h(
const double internal_coor[2], 
double h[16]) {
 
 2044        const double r = internal_coor[0];
 
 2045        const double s = internal_coor[1];
 
 2047        const double rm = r - 1;
 
 2048        const double rp = r + 1;
 
 2049        const double sm = s - 1;
 
 2050        const double sp = s + 1;
 
 2052        const double r3m = 3 * r - 1;
 
 2053        const double r3p = 3 * r + 1;
 
 2054        const double s3m = 3 * s - 1;
 
 2055        const double s3p = 3 * s + 1;
 
 2057        const double fa = 0.00390625;  
 
 2059        h[0] = +rm * r3m * r3p * sm * s3m * s3p * fa;
 
 2060        h[1] = -rp * r3m * r3p * sm * s3m * s3p * fa;
 
 2061        h[2] = +rp * r3m * r3p * sp * s3m * s3p * fa;
 
 2062        h[3] = -rm * r3m * r3p * sp * s3m * s3p * fa;
 
 2063        h[4] = -9 * rm * rp * r3m * sm * s3m * s3p * fa;
 
 2064        h[5] = +9 * rm * rp * r3p * sm * s3m * s3p * fa;
 
 2065        h[6] = -9 * rm * r3m * r3p * sm * sp * s3m * fa;
 
 2066        h[7] = +81 * rm * rp * r3m * sm * sp * s3m * fa;
 
 2067        h[8] = -81 * rm * rp * r3p * sm * sp * s3m * fa;
 
 2068        h[9] = +9 * rp * r3m * r3p * sm * sp * s3m * fa;
 
 2069        h[10] = +9 * rm * r3m * r3p * sm * sp * s3p * fa;
 
 2070        h[11] = -81 * rm * rp * r3m * sm * sp * s3p * fa;
 
 2071        h[12] = +81 * rm * rp * r3p * sm * sp * s3p * fa;
 
 2072        h[13] = -9 * rp * r3m * r3p * sm * sp * s3p * fa;
 
 2073        h[14] = +9 * rm * rp * r3m * sp * s3m * s3p * fa;
 
 2074        h[15] = -9 * rm * rp * r3p * sp * s3m * s3p * fa;
 
 2077    static void eval_h_derived(
const double internal_coor[2], 
double d[16][2]) {
 
 2078        const double r = internal_coor[0];
 
 2079        const double s = internal_coor[1];
 
 2081        const double rm = r - 1;
 
 2082        const double rp = r + 1;
 
 2083        const double sm = s - 1;
 
 2084        const double sp = s + 1;
 
 2086        const double r3m = 3 * r - 1;
 
 2087        const double r3p = 3 * r + 1;
 
 2088        const double s3m = 3 * s - 1;
 
 2089        const double s3p = 3 * s + 1;
 
 2091        const double fa = 0.00390625;  
 
 2093        d[0][0] = +(27 * r * r - 18 * r - 1) * sm * s3m * s3p * fa;
 
 2094        d[1][0] = -(27 * r * r + 18 * r - 1) * sm * s3m * s3p * fa;
 
 2095        d[2][0] = +(27 * r * r + 18 * r - 1) * sp * s3m * s3p * fa;
 
 2096        d[3][0] = -(27 * r * r - 18 * r - 1) * sp * s3m * s3p * fa;
 
 2097        d[4][0] = -9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * fa;
 
 2098        d[5][0] = +9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * fa;
 
 2099        d[6][0] = -9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * fa;
 
 2100        d[7][0] = +81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * fa;
 
 2101        d[8][0] = -81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * fa;
 
 2102        d[9][0] = +9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * fa;
 
 2103        d[10][0] = +9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * fa;
 
 2104        d[11][0] = -81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * fa;
 
 2105        d[12][0] = +81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * fa;
 
 2106        d[13][0] = -9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * fa;
 
 2107        d[14][0] = +9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * fa;
 
 2108        d[15][0] = -9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * fa;
 
 2109        d[0][1] = +rm * r3m * r3p * (27 * s * s - 18 * s - 1) * fa;
 
 2110        d[1][1] = -rp * r3m * r3p * (27 * s * s - 18 * s - 1) * fa;
 
 2111        d[2][1] = +rp * r3m * r3p * (27 * s * s + 18 * s - 1) * fa;
 
 2112        d[3][1] = -rm * r3m * r3p * (27 * s * s + 18 * s - 1) * fa;
 
 2113        d[4][1] = -9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * fa;
 
 2114        d[5][1] = +9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * fa;
 
 2115        d[6][1] = -9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * fa;
 
 2116        d[7][1] = +81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * fa;
 
 2117        d[8][1] = -81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * fa;
 
 2118        d[9][1] = +9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * fa;
 
 2119        d[10][1] = +9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * fa;
 
 2120        d[11][1] = -81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * fa;
 
 2121        d[12][1] = +81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * fa;
 
 2122        d[13][1] = -9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * fa;
 
 2123        d[14][1] = +9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * fa;
 
 2124        d[15][1] = -9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * fa;
 
 2128          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 2129        eval_h(internal_coor, &h[0]);
 
 2132    static void eval_h_derived(
 
 2133          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 2134        d.resize(2, num_nodes);
 
 2135        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2139class Q4X2_Shape_Evaluator {
 
 2141    static const int num_nodes = 8;
 
 2142    static const int num_dimensions = 2;
 
 2143    static const int order = 4;
 
 2144    typedef IS_Q ischeme_type;
 
 2146    static ischeme_type create_ischeme() {
 
 2147        ischeme_type ischeme;
 
 2148        ischeme[0].set_order(3);
 
 2149        ischeme[1].set_order(1);
 
 2153    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2154        ischeme_type ischeme;
 
 2155        ischeme[0].set_order(2 * 3);
 
 2156        ischeme[1].set_order(2 * 1);
 
 2157        ischeme.init(property);
 
 2161    static const double r_node[8];
 
 2162    static const double s_node[8];
 
 2163    static const double t_node[8];
 
 2165    static const char name[5];
 
 2167    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 2168    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 2169    static const int num_edge = 4;
 
 2170    static const int edge_node[4][4];
 
 2171    static const int edge_type_index[4];
 
 2173    typedef Q4X2_Shape_Evaluator face_shape_type_0;
 
 2174    typedef Q4X2_Shape_Evaluator face_shape_type_1;
 
 2175    static const int num_face = 2;
 
 2176    static const int face_node[2][8];
 
 2177    static const int face_type_index[2];
 
 2178    static const bool is_t_face[2];
 
 2180    static void eval_h(
const double internal_coor[2], 
double h[8]) {
 
 2181        const double r = internal_coor[0];
 
 2182        const double s = internal_coor[1];
 
 2184        const double rm = r - 1;
 
 2185        const double rp = r + 1;
 
 2186        const double sm = s - 1;
 
 2187        const double sp = s + 1;
 
 2189        const double r3m = 3 * r - 1;
 
 2190        const double r3p = 3 * r + 1;
 
 2192        h[0] = +rm * r3m * r3p * sm / 32;
 
 2193        h[1] = -rp * r3m * r3p * sm / 32;
 
 2194        h[2] = +rp * r3m * r3p * sp / 32;
 
 2195        h[3] = -rm * r3m * r3p * sp / 32;
 
 2196        h[4] = -9 * rm * rp * r3m * sm / 32;
 
 2197        h[5] = +9 * rm * rp * r3p * sm / 32;
 
 2198        h[6] = +9 * rm * rp * r3m * sp / 32;
 
 2199        h[7] = -9 * rm * rp * r3p * sp / 32;
 
 2202    static void eval_h_derived(
const double internal_coor[2], 
double d[8][2]) {
 
 2203        const double r = internal_coor[0];
 
 2204        const double s = internal_coor[1];
 
 2206        const double rm = r - 1;
 
 2207        const double rp = r + 1;
 
 2208        const double sm = s - 1;
 
 2209        const double sp = s + 1;
 
 2211        const double r3m = 3 * r - 1;
 
 2212        const double r3p = 3 * r + 1;
 
 2214        d[0][0] = +(27 * r * r - 18 * r - 1) * sm / 32;
 
 2215        d[1][0] = -(27 * r * r + 18 * r - 1) * sm / 32;
 
 2216        d[2][0] = +(27 * r * r + 18 * r - 1) * sp / 32;
 
 2217        d[3][0] = -(27 * r * r - 18 * r - 1) * sp / 32;
 
 2218        d[4][0] = -9 * (9 * r * r - 2 * r - 3) * sm / 32;
 
 2219        d[5][0] = +9 * (9 * r * r + 2 * r - 3) * sm / 32;
 
 2220        d[6][0] = +9 * (9 * r * r - 2 * r - 3) * sp / 32;
 
 2221        d[7][0] = -9 * (9 * r * r + 2 * r - 3) * sp / 32;
 
 2222        d[0][1] = +rm * r3m * r3p / 32;
 
 2223        d[1][1] = -rp * r3m * r3p / 32;
 
 2224        d[2][1] = +rp * r3m * r3p / 32;
 
 2225        d[3][1] = -rm * r3m * r3p / 32;
 
 2226        d[4][1] = -9 * rm * rp * r3m / 32;
 
 2227        d[5][1] = +9 * rm * rp * r3p / 32;
 
 2228        d[6][1] = +9 * rm * rp * r3m / 32;
 
 2229        d[7][1] = -9 * rm * rp * r3p / 32;
 
 2233          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 2234        eval_h(internal_coor, &h[0]);
 
 2237    static void eval_h_derived(
 
 2238          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 2239        d.resize(2, num_nodes);
 
 2240        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2244class Q4X3_Shape_Evaluator {
 
 2246    static const int num_nodes = 12;
 
 2247    static const int num_dimensions = 2;
 
 2248    static const int order = 5;
 
 2249    typedef IS_Q ischeme_type;
 
 2251    static ischeme_type create_ischeme() {
 
 2252        ischeme_type ischeme;
 
 2253        ischeme[0].set_order(3);
 
 2254        ischeme[1].set_order(2);
 
 2258    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2259        ischeme_type ischeme;
 
 2260        ischeme[0].set_order(2 * 3);
 
 2261        ischeme[1].set_order(2 * 2);
 
 2262        ischeme.init(property);
 
 2266    static const double r_node[12];
 
 2267    static const double s_node[12];
 
 2268    static const double t_node[12];
 
 2270    static const char name[5];
 
 2272    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 2273    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 2274    static const int num_edge = 4;
 
 2275    static const int edge_node[4][4];
 
 2276    static const int edge_type_index[4];
 
 2278    typedef Q4X3_Shape_Evaluator face_shape_type_0;
 
 2279    typedef Q4X3_Shape_Evaluator face_shape_type_1;
 
 2280    static const int num_face = 2;
 
 2281    static const int face_node[2][12];
 
 2282    static const int face_type_index[2];
 
 2283    static const bool is_t_face[2];
 
 2285    static void eval_h(
const double internal_coor[2], 
double h[12]) {
 
 2286        const double r = internal_coor[0];
 
 2287        const double s = internal_coor[1];
 
 2289        const double rm = r - 1;
 
 2290        const double rp = r + 1;
 
 2291        const double sm = s - 1;
 
 2292        const double sp = s + 1;
 
 2294        const double r3m = 3 * r - 1;
 
 2295        const double r3p = 3 * r + 1;
 
 2297        h[0] = -(rm * r3m * r3p * sm * s) / 32;
 
 2298        h[1] = +(rp * r3m * r3p * sm * s) / 32;
 
 2299        h[2] = +(rp * r3m * r3p * s * sp) / 32;
 
 2300        h[3] = -(rm * r3m * r3p * s * sp) / 32;
 
 2301        h[4] = +(9 * rm * rp * r3m * sm * s) / 32;
 
 2302        h[5] = -(9 * rm * rp * r3p * sm * s) / 32;
 
 2303        h[6] = +(rm * r3m * r3p * sm * sp) / 16;
 
 2304        h[7] = -(9 * rm * rp * r3m * sm * sp) / 16;
 
 2305        h[8] = +(9 * rm * rp * r3p * sm * sp) / 16;
 
 2306        h[9] = -(rp * r3m * r3p * sm * sp) / 16;
 
 2307        h[10] = +(9 * rm * rp * r3m * s * sp) / 32;
 
 2308        h[11] = -(9 * rm * rp * r3p * s * sp) / 32;
 
 2311    static void eval_h_derived(
const double internal_coor[2], 
double d[8][2]) {
 
 2312        const double r = internal_coor[0];
 
 2313        const double s = internal_coor[1];
 
 2315        const double rm = r - 1;
 
 2316        const double rp = r + 1;
 
 2317        const double sm = s - 1;
 
 2318        const double sp = s + 1;
 
 2320        const double s2m = 2 * s - 1;
 
 2321        const double s2p = 2 * s + 1;
 
 2322        const double r3m = 3 * r - 1;
 
 2323        const double r3p = 3 * r + 1;
 
 2325        d[0][0] = -((27 * r * r - 18 * r - 1) * sm * s) / 32;
 
 2326        d[1][0] = +((27 * r * r + 18 * r - 1) * sm * s) / 32;
 
 2327        d[2][0] = +((27 * r * r + 18 * r - 1) * s * sp) / 32;
 
 2328        d[3][0] = -((27 * r * r - 18 * r - 1) * s * sp) / 32;
 
 2329        d[4][0] = +(9 * (9 * r * r - 2 * r - 3) * sm * s) / 32;
 
 2330        d[5][0] = -(9 * (9 * r * r + 2 * r - 3) * sm * s) / 32;
 
 2331        d[6][0] = +((27 * r * r - 18 * r - 1) * sm * sp) / 16;
 
 2332        d[7][0] = -(9 * (9 * r * r - 2 * r - 3) * sm * sp) / 16;
 
 2333        d[8][0] = +(9 * (9 * r * r + 2 * r - 3) * sm * sp) / 16;
 
 2334        d[9][0] = -((27 * r * r + 18 * r - 1) * sm * sp) / 16;
 
 2335        d[10][0] = +(9 * (9 * r * r - 2 * r - 3) * s * sp) / 32;
 
 2336        d[11][0] = -(9 * (9 * r * r + 2 * r - 3) * s * sp) / 32;
 
 2337        d[0][1] = -(rm * r3m * r3p * s2m) / 32;
 
 2338        d[1][1] = +(rp * r3m * r3p * s2m) / 32;
 
 2339        d[2][1] = +(rp * r3m * r3p * s2p) / 32;
 
 2340        d[3][1] = -(rm * r3m * r3p * s2p) / 32;
 
 2341        d[4][1] = +(9 * rm * rp * r3m * s2m) / 32;
 
 2342        d[5][1] = -(9 * rm * rp * r3p * s2m) / 32;
 
 2343        d[6][1] = +(rm * r3m * r3p * s) / 8;
 
 2344        d[7][1] = -(9 * rm * rp * r3m * s) / 8;
 
 2345        d[8][1] = +(9 * rm * rp * r3p * s) / 8;
 
 2346        d[9][1] = -(rp * r3m * r3p * s) / 8;
 
 2347        d[10][1] = +(9 * rm * rp * r3m * s2p) / 32;
 
 2348        d[11][1] = -(9 * rm * rp * r3p * s2p) / 32;
 
 2352          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 2353        eval_h(internal_coor, &h[0]);
 
 2356    static void eval_h_derived(
 
 2357          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 2358        d.resize(2, num_nodes);
 
 2359        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2363class Q25_Shape_Evaluator {
 
 2365    static const int num_nodes = 25;
 
 2366    static const int num_dimensions = 2;
 
 2367    static const int order = 4;
 
 2368    typedef IS_Q ischeme_type;
 
 2370    static ischeme_type create_ischeme() {
 
 2371        ischeme_type ischeme;
 
 2372        ischeme[0].set_order(4);
 
 2373        ischeme[1].set_order(4);
 
 2377    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2378        ischeme_type ischeme;
 
 2379        ischeme[0].set_order(2 * 4);
 
 2380        ischeme[1].set_order(2 * 4);
 
 2381        ischeme.init(property);
 
 2385    static const double r_node[25];
 
 2386    static const double s_node[25];
 
 2387    static const double t_node[25];
 
 2389    static const char name[4];
 
 2391    typedef L5_Shape_Evaluator edge_shape_type_0;
 
 2392    typedef L5_Shape_Evaluator edge_shape_type_1;
 
 2393    static const int num_edge = 4;
 
 2394    static const int edge_node[4][5];
 
 2395    static const int edge_type_index[4];
 
 2397    typedef Q25_Shape_Evaluator face_shape_type_0;
 
 2398    typedef Q25_Shape_Evaluator face_shape_type_1;
 
 2399    static const int num_face = 2;
 
 2400    static const int face_node[2][25];
 
 2401    static const int face_type_index[2];
 
 2402    static const bool is_t_face[2];
 
 2404    static void eval_h(
const double internal_coor[2], 
double h[25]) {
 
 2405        const double r = internal_coor[0];
 
 2406        const double s = internal_coor[1];
 
 2408        const double rm = r - 1;
 
 2409        const double rp = r + 1;
 
 2410        const double sm = s - 1;
 
 2411        const double sp = s + 1;
 
 2413        const double r2m = 2 * r - 1;
 
 2414        const double r2p = 2 * r + 1;
 
 2415        const double s2m = 2 * s - 1;
 
 2416        const double s2p = 2 * s + 1;
 
 2418        h[0] = +rm * r * r2m * r2p * sm * s * s2m * s2p / 36;
 
 2419        h[1] = +r * rp * r2m * r2p * sm * s * s2m * s2p / 36;
 
 2420        h[2] = +r * rp * r2m * r2p * s * sp * s2m * s2p / 36;
 
 2421        h[3] = +rm * r * r2m * r2p * s * sp * s2m * s2p / 36;
 
 2422        h[4] = -2 * rm * r * rp * r2m * sm * s * s2m * s2p / 9;
 
 2423        h[5] = +rm * rp * r2m * r2p * sm * s * s2m * s2p / 6;
 
 2424        h[6] = -2 * rm * r * rp * r2p * sm * s * s2m * s2p / 9;
 
 2425        h[7] = -2 * rm * r * r2m * r2p * sm * s * sp * s2m / 9;
 
 2426        h[8] = +16 * rm * r * rp * r2m * sm * s * sp * s2m / 9;
 
 2427        h[9] = -4 * rm * rp * r2m * r2p * sm * s * sp * s2m / 3;
 
 2428        h[10] = +16 * rm * r * rp * r2p * sm * s * sp * s2m / 9;
 
 2429        h[11] = -2 * r * rp * r2m * r2p * sm * s * sp * s2m / 9;
 
 2430        h[12] = +rm * r * r2m * r2p * sm * sp * s2m * s2p / 6;
 
 2431        h[13] = -4 * rm * r * rp * r2m * sm * sp * s2m * s2p / 3;
 
 2432        h[14] = +rm * rp * r2m * r2p * sm * sp * s2m * s2p;
 
 2433        h[15] = -4 * rm * r * rp * r2p * sm * sp * s2m * s2p / 3;
 
 2434        h[16] = +r * rp * r2m * r2p * sm * sp * s2m * s2p / 6;
 
 2435        h[17] = -2 * rm * r * r2m * r2p * sm * s * sp * s2p / 9;
 
 2436        h[18] = +16 * rm * r * rp * r2m * sm * s * sp * s2p / 9;
 
 2437        h[19] = -4 * rm * rp * r2m * r2p * sm * s * sp * s2p / 3;
 
 2438        h[20] = +16 * rm * r * rp * r2p * sm * s * sp * s2p / 9;
 
 2439        h[21] = -2 * r * rp * r2m * r2p * sm * s * sp * s2p / 9;
 
 2440        h[22] = -2 * rm * r * rp * r2m * s * sp * s2m * s2p / 9;
 
 2441        h[23] = +rm * rp * r2m * r2p * s * sp * s2m * s2p / 6;
 
 2442        h[24] = -2 * rm * r * rp * r2p * s * sp * s2m * s2p / 9;
 
 2445    static void eval_h_derived(
const double internal_coor[2], 
double d[25][2]) {
 
 2446        const double r = internal_coor[0];
 
 2447        const double s = internal_coor[1];
 
 2449        const double rm = r - 1;
 
 2450        const double rp = r + 1;
 
 2451        const double sm = s - 1;
 
 2452        const double sp = s + 1;
 
 2454        const double r2m = 2 * r - 1;
 
 2455        const double r2p = 2 * r + 1;
 
 2456        const double s2m = 2 * s - 1;
 
 2457        const double s2p = 2 * s + 1;
 
 2459        const double r4m = 4 * r - 1;
 
 2460        const double r4p = 4 * r + 1;
 
 2461        const double s4m = 4 * s - 1;
 
 2462        const double s4p = 4 * s + 1;
 
 2464        const double rr = r * r;
 
 2465        const double ss = s * s;
 
 2467        d[0][0] = +r4m * (4 * rr - 2 * r - 1) * sm * s * s2m * s2p / 36;
 
 2468        d[1][0] = +r4p * (4 * rr + 2 * r - 1) * sm * s * s2m * s2p / 36;
 
 2469        d[2][0] = +r4p * (4 * rr + 2 * r - 1) * s * sp * s2m * s2p / 36;
 
 2470        d[3][0] = +r4m * (4 * rr - 2 * r - 1) * s * sp * s2m * s2p / 36;
 
 2471        d[4][0] = -2 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * s2m * s2p / 9;
 
 2472        d[5][0] = +r * (8 * rr - 5) * sm * s * s2m * s2p / 3;
 
 2473        d[6][0] = -2 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * s2m * s2p / 9;
 
 2474        d[7][0] = -2 * r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2m / 9;
 
 2475        d[8][0] = +16 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2m / 9;
 
 2476        d[9][0] = -8 * r * (8 * rr - 5) * sm * s * sp * s2m / 3;
 
 2477        d[10][0] = +16 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2m / 9;
 
 2478        d[11][0] = -2 * r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2m / 9;
 
 2479        d[12][0] = +r4m * (4 * rr - 2 * r - 1) * sm * sp * s2m * s2p / 6;
 
 2480        d[13][0] = -4 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * sp * s2m * s2p / 3;
 
 2481        d[14][0] = +2 * r * (8 * rr - 5) * sm * sp * s2m * s2p;
 
 2482        d[15][0] = -4 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * sp * s2m * s2p / 3;
 
 2483        d[16][0] = +r4p * (4 * rr + 2 * r - 1) * sm * sp * s2m * s2p / 6;
 
 2484        d[17][0] = -2 * r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2p / 9;
 
 2485        d[18][0] = +16 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2p / 9;
 
 2486        d[19][0] = -8 * r * (8 * rr - 5) * sm * s * sp * s2p / 3;
 
 2487        d[20][0] = +16 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2p / 9;
 
 2488        d[21][0] = -2 * r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2p / 9;
 
 2489        d[22][0] = -2 * (8 * rr * r - 3 * rr - 4 * r + 1) * s * sp * s2m * s2p / 9;
 
 2490        d[23][0] = +r * (8 * rr - 5) * s * sp * s2m * s2p / 3;
 
 2491        d[24][0] = -2 * (8 * rr * r + 3 * rr - 4 * r - 1) * s * sp * s2m * s2p / 9;
 
 2492        d[0][1] = +rm * r * r2m * r2p * s4m * (4 * ss - 2 * s - 1) / 36;
 
 2493        d[1][1] = +r * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) / 36;
 
 2494        d[2][1] = +r * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) / 36;
 
 2495        d[3][1] = +rm * r * r2m * r2p * s4p * (4 * ss + 2 * s - 1) / 36;
 
 2496        d[4][1] = -2 * rm * r * rp * r2m * s4m * (4 * ss - 2 * s - 1) / 9;
 
 2497        d[5][1] = +rm * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) / 6;
 
 2498        d[6][1] = -2 * rm * r * rp * r2p * s4m * (4 * ss - 2 * s - 1) / 9;
 
 2499        d[7][1] = -2 * rm * r * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) / 9;
 
 2500        d[8][1] = +16 * rm * r * rp * r2m * (8 * ss * s - 3 * ss - 4 * s + 1) / 9;
 
 2501        d[9][1] = -4 * rm * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) / 3;
 
 2502        d[10][1] = +16 * rm * r * rp * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) / 9;
 
 2503        d[11][1] = -2 * r * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) / 9;
 
 2504        d[12][1] = +rm * r * r2m * r2p * s * (8 * ss - 5) / 3;
 
 2505        d[13][1] = -8 * rm * r * rp * r2m * s * (8 * ss - 5) / 3;
 
 2506        d[14][1] = +2 * rm * rp * r2m * r2p * s * (8 * ss - 5);
 
 2507        d[15][1] = -8 * rm * r * rp * r2p * s * (8 * ss - 5) / 3;
 
 2508        d[16][1] = +r * rp * r2m * r2p * s * (8 * ss - 5) / 3;
 
 2509        d[17][1] = -2 * rm * r * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) / 9;
 
 2510        d[18][1] = +16 * rm * r * rp * r2m * (8 * ss * s + 3 * ss - 4 * s - 1) / 9;
 
 2511        d[19][1] = -4 * rm * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) / 3;
 
 2512        d[20][1] = +16 * rm * r * rp * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) / 9;
 
 2513        d[21][1] = -2 * r * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) / 9;
 
 2514        d[22][1] = -2 * rm * r * rp * r2m * s4p * (4 * ss + 2 * s - 1) / 9;
 
 2515        d[23][1] = +rm * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) / 6;
 
 2516        d[24][1] = -2 * rm * r * rp * r2p * s4p * (4 * ss + 2 * s - 1) / 9;
 
 2520          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 2521        eval_h(internal_coor, &h[0]);
 
 2524    static void eval_h_derived(
 
 2525          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 2526        d.resize(2, num_nodes);
 
 2527        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2531class Q5X2_Shape_Evaluator {
 
 2533    static const int num_nodes = 10;
 
 2534    static const int num_dimensions = 2;
 
 2535    static const int order = 5;
 
 2536    typedef IS_Q ischeme_type;
 
 2538    static ischeme_type create_ischeme() {
 
 2539        ischeme_type ischeme;
 
 2540        ischeme[0].set_order(4);
 
 2541        ischeme[1].set_order(1);
 
 2545    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2546        ischeme_type ischeme;
 
 2547        ischeme[0].set_order(2 * 4);
 
 2548        ischeme[1].set_order(2 * 1);
 
 2549        ischeme.init(property);
 
 2553    static const double r_node[10];
 
 2554    static const double s_node[10];
 
 2555    static const double t_node[10];
 
 2557    static const char name[5];
 
 2559    typedef L5_Shape_Evaluator edge_shape_type_0;
 
 2560    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 2561    static const int num_edge = 4;
 
 2562    static const int edge_node[4][5];
 
 2563    static const int edge_type_index[4];
 
 2565    typedef Q5X2_Shape_Evaluator face_shape_type_0;
 
 2566    typedef Q5X2_Shape_Evaluator face_shape_type_1;
 
 2567    static const int num_face = 2;
 
 2568    static const int face_node[2][10];
 
 2569    static const int face_type_index[2];
 
 2570    static const bool is_t_face[2];
 
 2572    static void eval_h(
const double internal_coor[2], 
double h[10]) {
 
 2573        const double r = internal_coor[0];
 
 2574        const double s = internal_coor[1];
 
 2576        const double rm = r - 1;
 
 2577        const double rp = r + 1;
 
 2578        const double sm = s - 1;
 
 2579        const double sp = s + 1;
 
 2581        const double r2m = 2 * r - 1;
 
 2582        const double r2p = 2 * r + 1;
 
 2584        h[0] = -rm * r * r2m * r2p * sm / 12;
 
 2585        h[1] = -r * rp * r2m * r2p * sm / 12;
 
 2586        h[2] = +rm * r * r2m * r2p * sp / 12;
 
 2587        h[3] = +r * rp * r2m * r2p * sp / 12;
 
 2588        h[4] = +2 * rm * r * rp * r2m * sm / 3;
 
 2589        h[5] = -rm * rp * r2m * r2p * sm / 2;
 
 2590        h[6] = +2 * rm * r * rp * r2p * sm / 3;
 
 2591        h[7] = -2 * rm * r * rp * r2m * sp / 3;
 
 2592        h[8] = +rm * rp * r2m * r2p * sp / 2;
 
 2593        h[9] = -2 * rm * r * rp * r2p * sp / 3;
 
 2596    static void eval_h_derived(
const double internal_coor[2], 
double d[10][2]) {
 
 2597        const double r = internal_coor[0];
 
 2598        const double s = internal_coor[1];
 
 2600        const double rm = r - 1;
 
 2601        const double rp = r + 1;
 
 2602        const double sm = s - 1;
 
 2603        const double sp = s + 1;
 
 2605        const double r2m = 2 * r - 1;
 
 2606        const double r2p = 2 * r + 1;
 
 2608        const double r4m = 4 * r - 1;
 
 2609        const double r4p = 4 * r + 1;
 
 2611        const double rr = r * r;
 
 2613        d[0][0] = -r4m * (4 * rr - 2 * r - 1) * sm / 12;
 
 2614        d[1][0] = -r4p * (4 * rr + 2 * r - 1) * sm / 12;
 
 2615        d[2][0] = +r4m * (4 * rr - 2 * r - 1) * sp / 12;
 
 2616        d[3][0] = +r4p * (4 * rr + 2 * r - 1) * sp / 12;
 
 2617        d[4][0] = +2 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm / 3;
 
 2618        d[5][0] = -r * (8 * rr - 5) * sm;
 
 2619        d[6][0] = +2 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm / 3;
 
 2620        d[7][0] = -2 * (8 * rr * r - 3 * rr - 4 * r + 1) * sp / 3;
 
 2621        d[8][0] = +r * (8 * rr - 5) * sp;
 
 2622        d[9][0] = -2 * (8 * rr * r + 3 * rr - 4 * r - 1) * sp / 3;
 
 2623        d[0][1] = -rm * r * r2m * r2p / 12;
 
 2624        d[1][1] = -r * rp * r2m * r2p / 12;
 
 2625        d[2][1] = +rm * r * r2m * r2p / 12;
 
 2626        d[3][1] = +r * rp * r2m * r2p / 12;
 
 2627        d[4][1] = +2 * rm * r * rp * r2m / 3;
 
 2628        d[5][1] = -rm * rp * r2m * r2p / 2;
 
 2629        d[6][1] = +2 * rm * r * rp * r2p / 3;
 
 2630        d[7][1] = -2 * rm * r * rp * r2m / 3;
 
 2631        d[8][1] = +rm * rp * r2m * r2p / 2;
 
 2632        d[9][1] = -2 * rm * r * rp * r2p / 3;
 
 2636          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 2637        eval_h(internal_coor, &h[0]);
 
 2640    static void eval_h_derived(
 
 2641          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 2642        d.resize(2, num_nodes);
 
 2643        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 2647class Q36_Shape_Evaluator {
 
 2649    static const int num_nodes = 36;
 
 2650    static const int num_dimensions = 2;
 
 2651    static const int order = 5;
 
 2652    typedef IS_Q ischeme_type;
 
 2654    static ischeme_type create_ischeme() {
 
 2655        ischeme_type ischeme;
 
 2656        ischeme[0].set_order(5);
 
 2657        ischeme[1].set_order(5);
 
 2661    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 2662        ischeme_type ischeme;
 
 2663        ischeme[0].set_order(2 * 5);
 
 2664        ischeme[1].set_order(2 * 5);
 
 2665        ischeme.init(property);
 
 2669    static const double r_node[36];
 
 2670    static const double s_node[36];
 
 2671    static const double t_node[36];
 
 2673    static const char name[4];
 
 2675    typedef L6_Shape_Evaluator edge_shape_type_0;
 
 2676    typedef L6_Shape_Evaluator edge_shape_type_1;
 
 2677    static const int num_edge = 4;
 
 2678    static const int edge_node[4][6];
 
 2679    static const int edge_type_index[4];
 
 2681    typedef Q36_Shape_Evaluator face_shape_type_0;
 
 2682    typedef Q36_Shape_Evaluator face_shape_type_1;
 
 2683    static const int num_face = 2;
 
 2684    static const int face_node[2][36];
 
 2685    static const int face_type_index[2];
 
 2686    static const bool is_t_face[2];
 
 2688    static void eval_h(
const double internal_coor[2], 
double h[36]) {
 
 2689        const double r = internal_coor[0];
 
 2690        const double s = internal_coor[1];
 
 2691        const double rm = r - 1;
 
 2692        const double rp = r + 1;
 
 2693        const double sm = s - 1;
 
 2694        const double sp = s + 1;
 
 2696        h[0] = +(rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * (5 * s - 3)
 
 2697                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2699        h[1] = -(rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * (5 * s - 3)
 
 2700                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2702        h[2] = +(rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sp * (5 * s - 3)
 
 2703                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2705        h[3] = -(rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sp * (5 * s - 3)
 
 2706                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2708        h[4] = -(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sm * (5 * s - 3)
 
 2709                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2711        h[5] = +(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sm * (5 * s - 3)
 
 2712                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2714        h[6] = -(25 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sm * (5 * s - 3)
 
 2715                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2717        h[7] = +(25 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * (5 * s - 3)
 
 2718                 * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2720        h[8] = -(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2721                 * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2723        h[9] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sm * sp * (5 * s - 3)
 
 2724                 * (5 * s - 1) * (5 * s + 1))
 
 2726        h[10] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2727                  * (5 * s - 1) * (5 * s + 1))
 
 2729        h[11] = +(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2730                  * (5 * s - 1) * (5 * s + 1))
 
 2732        h[12] = -(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2733                  * (5 * s - 1) * (5 * s + 1))
 
 2735        h[13] = +(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2736                  * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2738        h[14] = +(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2739                  * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2741        h[15] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sm * sp * (5 * s - 3)
 
 2742                  * (5 * s - 1) * (5 * s + 3))
 
 2744        h[16] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2745                  * (5 * s - 1) * (5 * s + 3))
 
 2747        h[17] = -(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2748                  * (5 * s - 1) * (5 * s + 3))
 
 2750        h[18] = +(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2751                  * (5 * s - 1) * (5 * s + 3))
 
 2753        h[19] = -(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2754                  * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2756        h[20] = -(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2757                  * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2759        h[21] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sm * sp * (5 * s - 3)
 
 2760                  * (5 * s + 1) * (5 * s + 3))
 
 2762        h[22] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2763                  * (5 * s + 1) * (5 * s + 3))
 
 2765        h[23] = +(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2766                  * (5 * s + 1) * (5 * s + 3))
 
 2768        h[24] = -(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 3)
 
 2769                  * (5 * s + 1) * (5 * s + 3))
 
 2771        h[25] = +(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2772                  * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2774        h[26] = +(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2775                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2777        h[27] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sm * sp * (5 * s - 1)
 
 2778                  * (5 * s + 1) * (5 * s + 3))
 
 2780        h[28] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sm * sp * (5 * s - 1)
 
 2781                  * (5 * s + 1) * (5 * s + 3))
 
 2783        h[29] = -(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 1)
 
 2784                  * (5 * s + 1) * (5 * s + 3))
 
 2786        h[30] = +(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp * (5 * s - 1)
 
 2787                  * (5 * s + 1) * (5 * s + 3))
 
 2789        h[31] = -(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sm * sp
 
 2790                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2792        h[32] = +(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * sp * (5 * s - 3)
 
 2793                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2795        h[33] = -(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3) * sp * (5 * s - 3)
 
 2796                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2798        h[34] = +(25 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3) * sp * (5 * s - 3)
 
 2799                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2801        h[35] = -(25 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3) * sp * (5 * s - 3)
 
 2802                  * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2806    static void eval_h_derived(
const double internal_coor[2], 
double d[36][2]) {
 
 2807        const double r = internal_coor[0];
 
 2808        const double s = internal_coor[1];
 
 2809        const double rm = r - 1;
 
 2810        const double rp = r + 1;
 
 2811        const double sm = s - 1;
 
 2812        const double sp = s + 1;
 
 2813        d[0][0] = +((3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sm
 
 2814                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2816        d[1][0] = -((3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sm
 
 2817                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2819        d[2][0] = +((3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sp
 
 2820                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2822        d[3][0] = -((3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sp
 
 2823                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2825        d[4][0] = -(25 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sm
 
 2826                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2828        d[5][0] = +(25 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sm
 
 2829                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2831        d[6][0] = -(25 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sm
 
 2832                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2834        d[7][0] = +(25 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sm
 
 2835                    * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2837        d[8][0] = -(25 * (3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sm
 
 2838                    * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2840        d[9][0] = +(625 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sm
 
 2841                    * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2843        d[10][0] = -(625 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sm
 
 2844                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2846        d[11][0] = +(625 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sm
 
 2847                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2849        d[12][0] = -(625 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sm
 
 2850                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2852        d[13][0] = +(25 * (3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sm
 
 2853                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 1))
 
 2855        d[14][0] = +(25 * (3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sm
 
 2856                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2858        d[15][0] = -(625 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sm
 
 2859                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2861        d[16][0] = +(625 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sm
 
 2862                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2864        d[17][0] = -(625 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sm
 
 2865                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2867        d[18][0] = +(625 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sm
 
 2868                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2870        d[19][0] = -(25 * (3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sm
 
 2871                     * sp * (5 * s - 3) * (5 * s - 1) * (5 * s + 3))
 
 2873        d[20][0] = -(25 * (3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sm
 
 2874                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2876        d[21][0] = +(625 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sm
 
 2877                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2879        d[22][0] = -(625 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sm
 
 2880                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2882        d[23][0] = +(625 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sm
 
 2883                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2885        d[24][0] = -(625 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sm
 
 2886                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2888        d[25][0] = +(25 * (3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sm
 
 2889                     * sp * (5 * s - 3) * (5 * s + 1) * (5 * s + 3))
 
 2891        d[26][0] = +(25 * (3125 * r * r * r * r - 2500 * r * r * r - 750 * r * r + 500 * r + 9) * sm
 
 2892                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2894        d[27][0] = -(625 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sm
 
 2895                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2897        d[28][0] = +(625 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sm
 
 2898                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2900        d[29][0] = -(625 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sm
 
 2901                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2903        d[30][0] = +(625 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sm
 
 2904                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2906        d[31][0] = -(25 * (3125 * r * r * r * r + 2500 * r * r * r - 750 * r * r - 500 * r + 9) * sm
 
 2907                     * sp * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2909        d[32][0] = +(25 * (625 * r * r * r * r - 300 * r * r * r - 390 * r * r + 156 * r + 5) * sp
 
 2910                     * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2912        d[33][0] = -(25 * (625 * r * r * r * r - 100 * r * r * r - 510 * r * r + 68 * r + 45) * sp
 
 2913                     * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2915        d[34][0] = +(25 * (625 * r * r * r * r + 100 * r * r * r - 510 * r * r - 68 * r + 45) * sp
 
 2916                     * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2918        d[35][0] = -(25 * (625 * r * r * r * r + 300 * r * r * r - 390 * r * r - 156 * r + 5) * sp
 
 2919                     * (5 * s - 3) * (5 * s - 1) * (5 * s + 1) * (5 * s + 3))
 
 2921        d[0][1] = +(rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2922                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2924        d[1][1] = -(rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2925                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2927        d[2][1] = +(rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2928                    * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 2930        d[3][1] = -(rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2931                    * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 2933        d[4][1] = -(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 2934                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2936        d[5][1] = +(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 2937                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2939        d[6][1] = -(25 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 2940                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2942        d[7][1] = +(25 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2943                    * (3125 * s * s * s * s - 2500 * s * s * s - 750 * s * s + 500 * s + 9))
 
 2945        d[8][1] = -(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2946                    * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2948        d[9][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 2949                    * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2951        d[10][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 2952                     * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2954        d[11][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 2955                     * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2957        d[12][1] = -(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2958                     * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2960        d[13][1] = +(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2961                     * (625 * s * s * s * s - 300 * s * s * s - 390 * s * s + 156 * s + 5))
 
 2963        d[14][1] = +(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2964                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2966        d[15][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 2967                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2969        d[16][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 2970                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2972        d[17][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 2973                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2975        d[18][1] = +(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2976                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2978        d[19][1] = -(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2979                     * (625 * s * s * s * s - 100 * s * s * s - 510 * s * s + 68 * s + 45))
 
 2981        d[20][1] = -(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2982                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2984        d[21][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 2985                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2987        d[22][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 2988                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2990        d[23][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 2991                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2993        d[24][1] = -(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2994                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2996        d[25][1] = +(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 2997                     * (625 * s * s * s * s + 100 * s * s * s - 510 * s * s - 68 * s + 45))
 
 2999        d[26][1] = +(25 * rm * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 3000                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3002        d[27][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 3003                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3005        d[28][1] = +(625 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 3006                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3008        d[29][1] = -(625 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 3009                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3011        d[30][1] = +(625 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 3012                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3014        d[31][1] = -(25 * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 3015                     * (625 * s * s * s * s + 300 * s * s * s - 390 * s * s - 156 * s + 5))
 
 3017        d[32][1] = +(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 1)
 
 3018                     * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 3020        d[33][1] = -(25 * rm * rp * (5 * r - 3) * (5 * r - 1) * (5 * r + 3)
 
 3021                     * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 3023        d[34][1] = +(25 * rm * rp * (5 * r - 3) * (5 * r + 1) * (5 * r + 3)
 
 3024                     * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 3026        d[35][1] = -(25 * rm * rp * (5 * r - 1) * (5 * r + 1) * (5 * r + 3)
 
 3027                     * (3125 * s * s * s * s + 2500 * s * s * s - 750 * s * s - 500 * s + 9))
 
 3032          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 3033        eval_h(internal_coor, &h[0]);
 
 3036    static void eval_h_derived(
 
 3037          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 3038        d.resize(2, num_nodes);
 
 3039        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 3043class Q49_Shape_Evaluator {
 
 3045    static const int num_nodes = 49;
 
 3046    static const int num_dimensions = 2;
 
 3047    static const int order = 6;
 
 3048    typedef IS_Q ischeme_type;
 
 3050    static ischeme_type create_ischeme() {
 
 3051        ischeme_type ischeme;
 
 3052        ischeme[0].set_order(6);
 
 3053        ischeme[1].set_order(6);
 
 3057    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 3058        ischeme_type ischeme;
 
 3059        ischeme[0].set_order(2 * 6);
 
 3060        ischeme[1].set_order(2 * 6);
 
 3061        ischeme.init(property);
 
 3065    static const double r_node[49];
 
 3066    static const double s_node[49];
 
 3067    static const double t_node[49];
 
 3069    static const char name[4];
 
 3071    typedef L7_Shape_Evaluator edge_shape_type_0;
 
 3072    typedef L7_Shape_Evaluator edge_shape_type_1;
 
 3073    static const int num_edge = 4;
 
 3074    static const int edge_node[4][7];
 
 3075    static const int edge_type_index[4];
 
 3077    typedef Q49_Shape_Evaluator face_shape_type_0;
 
 3078    typedef Q49_Shape_Evaluator face_shape_type_1;
 
 3079    static const int num_face = 2;
 
 3080    static const int face_node[2][49];
 
 3081    static const int face_type_index[2];
 
 3082    static const bool is_t_face[2];
 
 3084    static void eval_h(
const double internal_coor[2], 
double h[49]) {
 
 3085        const double r = internal_coor[0];
 
 3086        const double s = internal_coor[1];
 
 3087        const double rm = r - 1;
 
 3088        const double rp = r + 1;
 
 3089        const double sm = s - 1;
 
 3090        const double sp = s + 1;
 
 3091        const double r3m = 3 * r - 1;
 
 3092        const double r3p = 3 * r + 1;
 
 3093        const double s3m = 3 * s - 1;
 
 3094        const double s3p = 3 * s + 1;
 
 3096        h[0] = +(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * (3 * s - 2) * s3m * s3p
 
 3099        h[1] = +(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * (3 * s - 2) * s3m * s3p
 
 3102        h[2] = +(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * sp * (3 * s - 2) * s3m * s3p
 
 3105        h[3] = +(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * sp * (3 * s - 2) * s3m * s3p
 
 3108        h[4] = -(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * s * (3 * s - 2) * s3m * s3p
 
 3111        h[5] = +(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * s * (3 * s - 2) * s3m
 
 3112                 * s3p * (3 * s + 2))
 
 3114        h[6] = -(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * (3 * s - 2) * s3m * s3p
 
 3117        h[7] = +(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * s * (3 * s - 2) * s3m
 
 3118                 * s3p * (3 * s + 2))
 
 3120        h[8] = -(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * s * (3 * s - 2) * s3m * s3p
 
 3123        h[9] = -(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3127              +(81 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3129        h[11] = -(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3132        h[12] = +(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3135        h[13] = -(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3139              +(81 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3141        h[15] = -(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3144        h[16] = +(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3145                  * s3m * (3 * s + 2))
 
 3147        h[17] = -(81 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * s * sp * (3 * s - 2) * s3m
 
 3150        h[18] = +(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3151                  * s3m * (3 * s + 2))
 
 3153        h[19] = -(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3154                  * s3m * (3 * s + 2))
 
 3156        h[20] = +(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3157                  * s3m * (3 * s + 2))
 
 3159        h[21] = -(81 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2) * s3m
 
 3162        h[22] = +(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3163                  * s3m * (3 * s + 2))
 
 3165        h[23] = -(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m * s3p
 
 3168        h[24] = +(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * sp * (3 * s - 2) * s3m * s3p
 
 3171        h[25] = -(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m
 
 3172                  * s3p * (3 * s + 2))
 
 3174        h[26] = +(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m
 
 3175                  * s3p * (3 * s + 2))
 
 3177        h[27] = -(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m
 
 3178                  * s3p * (3 * s + 2))
 
 3180        h[28] = +(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m * s3p
 
 3183        h[29] = -(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * sp * (3 * s - 2) * s3m * s3p
 
 3186        h[30] = +(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3187                  * s3p * (3 * s + 2))
 
 3189        h[31] = -(81 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * s * sp * (3 * s - 2) * s3p
 
 3192        h[32] = +(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3193                  * s3p * (3 * s + 2))
 
 3195        h[33] = -(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3196                  * s3p * (3 * s + 2))
 
 3198        h[34] = +(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3199                  * s3p * (3 * s + 2))
 
 3201        h[35] = -(81 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2) * s3p
 
 3204        h[36] = +(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * (3 * s - 2)
 
 3205                  * s3p * (3 * s + 2))
 
 3207        h[37] = -(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * s3m * s3p
 
 3211              +(81 * rm * r * rp * (3 * r - 2) * r3m * r3p * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3213        h[39] = -(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * sm * s * sp * s3m * s3p
 
 3216        h[40] = +(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * s3m * s3p
 
 3219        h[41] = -(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * sm * s * sp * s3m * s3p
 
 3223              +(81 * rm * r * rp * r3m * r3p * (3 * r + 2) * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3225        h[43] = -(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * sm * s * sp * s3m * s3p
 
 3228        h[44] = -(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * s * sp * (3 * s - 2) * s3m * s3p
 
 3231        h[45] = +(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * s * sp * (3 * s - 2) * s3m
 
 3232                  * s3p * (3 * s + 2))
 
 3234        h[46] = -(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * sp * (3 * s - 2) * s3m * s3p
 
 3237        h[47] = +(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * s * sp * (3 * s - 2) * s3m
 
 3238                  * s3p * (3 * s + 2))
 
 3240        h[48] = -(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * s * sp * (3 * s - 2) * s3m * s3p
 
 3245    static void eval_h_derived(
const double internal_coor[2], 
double d[49][2]) {
 
 3246        const double r = internal_coor[0];
 
 3247        const double s = internal_coor[1];
 
 3248        const double rm = r - 1;
 
 3249        const double rp = r + 1;
 
 3250        const double sm = s - 1;
 
 3251        const double sp = s + 1;
 
 3252        const double r3m = 3 * r - 1;
 
 3253        const double r3p = 3 * r + 1;
 
 3254        const double s3m = 3 * s - 1;
 
 3255        const double s3p = 3 * s + 1;
 
 3256        d[0][0] = +((6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3257                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3259        d[1][0] = +((6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3260                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3262        d[2][0] = +((6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3263                    * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3265        d[3][0] = +((6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3266                    * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3269                    * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3271                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3274                    * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3276                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3278        d[6][0] = -(r * (9 * r * r - 7) * (27 * r * r - 7) * sm * s * (3 * s - 2) * s3m * s3p
 
 3282                    * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3284                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3287                    * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3289                    * sm * s * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3292              -(9 * (6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3293                * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3296                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3298                     * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3301                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3303                     * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3306              +(9 * r * (9 * r * r - 7) * (27 * r * r - 7) * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3309                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3311                     * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3314                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3316                     * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3319              -(9 * (6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3320                * sm * s * sp * (3 * s - 2) * s3m * s3p)
 
 3323              +(9 * (6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3324                * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3327                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3329                     * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3332                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3334                     * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3336        d[19][0] = -(9 * r * (9 * r * r - 7) * (27 * r * r - 7) * sm * s * sp * (3 * s - 2) * s3m
 
 3340                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3342                     * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3345                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3347                     * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3350              +(9 * (6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3351                * sm * s * sp * (3 * s - 2) * s3m * (3 * s + 2))
 
 3353        d[23][0] = -((6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3354                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3357                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3359                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3362                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3364                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3366        d[26][0] = +(r * (9 * r * r - 7) * (27 * r * r - 7) * sm * sp * (3 * s - 2) * s3m * s3p
 
 3370                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3372                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3375                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3377                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3379        d[29][0] = -((6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3380                     * sm * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3383              +(9 * (6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3384                * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3387                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3389                     * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3392                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3394                     * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3396        d[33][0] = -(9 * r * (9 * r * r - 7) * (27 * r * r - 7) * sm * s * sp * (3 * s - 2) * s3p
 
 3400                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3402                     * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3405                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3407                     * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3410              +(9 * (6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3411                * sm * s * sp * (3 * s - 2) * s3p * (3 * s + 2))
 
 3414              -(9 * (6 * r - 1) * (81 * r * r * r * r - 54 * r * r * r - 39 * r * r + 16 * r + 4)
 
 3415                * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3418                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3420                     * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3423                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3425                     * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3428              +(9 * r * (9 * r * r - 7) * (27 * r * r - 7) * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3431                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3433                     * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3436                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3438                     * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3441              -(9 * (6 * r + 1) * (81 * r * r * r * r + 54 * r * r * r - 39 * r * r - 16 * r + 4)
 
 3442                * sm * s * sp * s3m * s3p * (3 * s + 2))
 
 3445                     * (81 * r * r * r * r * r - 45 * r * r * r * r - 60 * r * r * r + 30 * r * r
 
 3447                     * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3450                     * (162 * r * r * r * r * r - 45 * r * r * r * r - 156 * r * r * r + 39 * r * r
 
 3452                     * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3454        d[46][0] = -(r * (9 * r * r - 7) * (27 * r * r - 7) * s * sp * (3 * s - 2) * s3m * s3p
 
 3458                     * (162 * r * r * r * r * r + 45 * r * r * r * r - 156 * r * r * r - 39 * r * r
 
 3460                     * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3463                     * (81 * r * r * r * r * r + 45 * r * r * r * r - 60 * r * r * r - 30 * r * r
 
 3465                     * s * sp * (3 * s - 2) * s3m * s3p * (3 * s + 2))
 
 3467        d[0][1] = +(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s - 1)
 
 3468                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3470        d[1][1] = +(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s - 1)
 
 3471                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3473        d[2][1] = +(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s + 1)
 
 3474                    * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3476        d[3][1] = +(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s + 1)
 
 3477                    * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3479        d[4][1] = -(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * (6 * s - 1)
 
 3480                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3482        d[5][1] = +(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * (6 * s - 1)
 
 3483                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3485        d[6][1] = -(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s - 1)
 
 3486                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3488        d[7][1] = +(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * (6 * s - 1)
 
 3489                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3491        d[8][1] = -(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * (6 * s - 1)
 
 3492                    * (81 * s * s * s * s - 54 * s * s * s - 39 * s * s + 16 * s + 4))
 
 3494        d[9][1] = -(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3495                    * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3498        d[10][1] = +(81 * rm * r * rp * (3 * r - 2) * r3m * r3p
 
 3499                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3502        d[11][1] = -(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2)
 
 3503                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3506        d[12][1] = +(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3507                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3510        d[13][1] = -(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2)
 
 3511                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3514        d[14][1] = +(81 * rm * r * rp * r3m * r3p * (3 * r + 2)
 
 3515                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3518        d[15][1] = -(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3519                     * (81 * s * s * s * s * s - 45 * s * s * s * s - 60 * s * s * s + 30 * s * s
 
 3522        d[16][1] = +(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3523                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3526        d[17][1] = -(81 * rm * r * rp * (3 * r - 2) * r3m * r3p
 
 3527                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3530        d[18][1] = +(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2)
 
 3531                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3534        d[19][1] = -(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3535                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3538        d[20][1] = +(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2)
 
 3539                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3542        d[21][1] = -(81 * rm * r * rp * r3m * r3p * (3 * r + 2)
 
 3543                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3546        d[22][1] = +(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3547                     * (162 * s * s * s * s * s - 45 * s * s * s * s - 156 * s * s * s + 39 * s * s
 
 3550        d[23][1] = -(rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * (9 * s * s - 7)
 
 3554              +(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * s * (9 * s * s - 7) * (27 * s * s - 7))
 
 3556        d[25][1] = -(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * s * (9 * s * s - 7)
 
 3559        d[26][1] = +(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * (9 * s * s - 7)
 
 3562        d[27][1] = -(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * s * (9 * s * s - 7)
 
 3566              +(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * s * (9 * s * s - 7) * (27 * s * s - 7))
 
 3568        d[29][1] = -(r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * s * (9 * s * s - 7)
 
 3571        d[30][1] = +(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3572                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3575        d[31][1] = -(81 * rm * r * rp * (3 * r - 2) * r3m * r3p
 
 3576                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3579        d[32][1] = +(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2)
 
 3580                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3583        d[33][1] = -(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3584                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3587        d[34][1] = +(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2)
 
 3588                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3591        d[35][1] = -(81 * rm * r * rp * r3m * r3p * (3 * r + 2)
 
 3592                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3595        d[36][1] = +(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3596                     * (162 * s * s * s * s * s + 45 * s * s * s * s - 156 * s * s * s - 39 * s * s
 
 3599        d[37][1] = -(9 * rm * r * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3600                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3603        d[38][1] = +(81 * rm * r * rp * (3 * r - 2) * r3m * r3p
 
 3604                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3607        d[39][1] = -(81 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2)
 
 3608                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3611        d[40][1] = +(9 * rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3612                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3615        d[41][1] = -(81 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2)
 
 3616                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3619        d[42][1] = +(81 * rm * r * rp * r3m * r3p * (3 * r + 2)
 
 3620                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3623        d[43][1] = -(9 * r * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2)
 
 3624                     * (81 * s * s * s * s * s + 45 * s * s * s * s - 60 * s * s * s - 30 * s * s
 
 3627        d[44][1] = -(9 * rm * r * rp * (3 * r - 2) * r3m * r3p * (6 * s + 1)
 
 3628                     * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3630        d[45][1] = +(9 * rm * r * rp * (3 * r - 2) * r3m * (3 * r + 2) * (6 * s + 1)
 
 3631                     * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3633        d[46][1] = -(rm * rp * (3 * r - 2) * r3m * r3p * (3 * r + 2) * (6 * s + 1)
 
 3634                     * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3636        d[47][1] = +(9 * rm * r * rp * (3 * r - 2) * r3p * (3 * r + 2) * (6 * s + 1)
 
 3637                     * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3639        d[48][1] = -(9 * rm * r * rp * r3m * r3p * (3 * r + 2) * (6 * s + 1)
 
 3640                     * (81 * s * s * s * s + 54 * s * s * s - 39 * s * s - 16 * s + 4))
 
 3645          const double internal_coor[2], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 3646        eval_h(internal_coor, &h[0]);
 
 3649    static void eval_h_derived(
 
 3650          const double internal_coor[2], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 3651        d.resize(2, num_nodes);
 
 3652        eval_h_derived(internal_coor, (
double(*)[2]) & d[0][0]);
 
 3660template <
typename HELPER>
 
 3661class Solid_Shape_Evaluator : 
public HELPER {
 
 3663    static double eval_face_directors(
 
 3664          int face, 
const double* xi_face, 
const double coor[HELPER::num_nodes][3],
 
 3665          double d_coor_d_lcoor[2][3]) {
 
 3666        switch (HELPER::face_type_index[face]) {
 
 3668                return eval_face_directors_for_face<typename HELPER::face_shape_type_0>(
 
 3669                      face, xi_face, coor, d_coor_d_lcoor);
 
 3672                return eval_face_directors_for_face<typename HELPER::face_shape_type_1>(
 
 3673                      face, xi_face, coor, d_coor_d_lcoor);
 
 3679    static void eval_h(
const double internal_coor[3], 
double h[HELPER::num_nodes]) {
 
 3680        HELPER::eval_h(internal_coor, h);
 
 3683    static void eval_h_derived(
const double internal_coor[3], 
double d[HELPER::num_nodes][3]) {
 
 3684        HELPER::eval_h_derived(internal_coor, d);
 
 3688          const double internal_coor[3], b2linalg::Vector<double, b2linalg::Vdense>& h) {
 
 3689        HELPER::eval_h(internal_coor, &h[0]);
 
 3692    static void eval_h_derived(
 
 3693          const double internal_coor[3], b2linalg::Matrix<double, b2linalg::Mrectangle>& d) {
 
 3694        d.resize(3, HELPER::num_nodes);
 
 3695        HELPER::eval_h_derived(internal_coor, (
double(*)[3]) & d[0][0]);
 
 3699    template <
typename FSE>
 
 3700    static double eval_face_directors_for_face(
 
 3701          int face, 
const double* xi_face, 
const double coor[HELPER::num_nodes][3],
 
 3702          double d_coor_d_lcoor[2][3]) {
 
 3704        double X[FSE::num_nodes][3];
 
 3705        for (
int i = 0; i != FSE::num_nodes; ++i) {
 
 3706            const int j = HELPER::face_node[face][i];
 
 3707            std::copy(coor[j], coor[j + 1], X[i]);
 
 3711        double d_H_d_xi[FSE::num_nodes][2];
 
 3712        FSE::eval_h_derived(xi_face, d_H_d_xi);
 
 3716        ffmv::mc_eq_mat_mul_mb<2, 3, FSE::num_nodes>(J, d_H_d_xi, X);
 
 3719        for (
size_t l = 0; l != 2; ++l) {
 
 3720            std::copy(J[l], J[l + 1], d_coor_d_lcoor[l]);
 
 3727        const double surface = 
norm_3(c);
 
 3737class TE_Shape_Helper {
 
 3739    static inline void map_element_coor_to_face_coor(
 
 3740          const double element_coor[3],
 
 3742          double face_coor[2]) {
 
 3744        const double a[4][2] = {
 
 3750        const double b[4][2][3] = {
 
 3751              {{+1., 0., 0.}, {0., +1., 0.}},
 
 3752              {{+1., 0., 0.}, {0., 0., +1.}},
 
 3753              {{0., +1., 0.}, {0., 0., +1.}},
 
 3754              {{0., -1., 0.}, {0., 0., +1.}},
 
 3756        for (
int i = 0; i != 2; ++i) {
 
 3757            face_coor[i] = a[face][i];
 
 3758            for (
int j = 0; j != 3; ++j) { face_coor[i] += b[face][i][j] * element_coor[j]; }
 
 3762    static inline void map_face_coor_to_element_coor(
 
 3763          const int face, 
const double face_coor[2], 
double element_coor[3]) {
 
 3764        const double a[4][3] = {{0., 0., 0.}, {0., 0., 0.}, {+1., 0., 0.}, {0., +1., 0.}};
 
 3765        const double b[4][3][2] = {
 
 3766              {{+1., 0.}, {0., +1.}, {0., 0.}},
 
 3767              {{+1., 0.}, {0., 0.}, {0., +1.}},
 
 3768              {{-1., 0.}, {+1., 0.}, {0., 1.}},
 
 3769              {{+1., 0.}, {-1., 0.}, {0., 1.}},
 
 3771        for (
int i = 0; i != 3; ++i) {
 
 3772            element_coor[i] = a[face][i];
 
 3773            for (
int j = 0; j != 2; ++j) { element_coor[i] += b[face][i][j] * face_coor[j]; }
 
 3778class TE4_Shape_Helper : 
public TE_Shape_Helper {
 
 3780    static void eval_h(
const double internal_coor[3], 
double h[4]) {
 
 3781        const double r = internal_coor[0];
 
 3782        const double s = internal_coor[1];
 
 3783        const double t = internal_coor[2];
 
 3785        h[0] = 1 - r - s - t;
 
 3791    static void eval_h_derived(
const double internal_coor[3], 
double d[4][3]) {
 
 3811    static const int num_nodes = 4;
 
 3812    static const int num_faces = 4;
 
 3813    static const int num_dimensions = 3;
 
 3814    static const int order = 1;
 
 3815    typedef IS_TE ischeme_type;
 
 3817    static ischeme_type create_ischeme() {
 
 3818        ischeme_type ischeme;
 
 3819        ischeme.set_order(order);
 
 3823    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 3824        ischeme_type ischeme;
 
 3825        ischeme.set_order(2 * order);
 
 3826        ischeme.init(property);
 
 3830    static const double r_node[4];
 
 3831    static const double s_node[4];
 
 3832    static const double t_node[4];
 
 3834    static const bool supports_laminates = 
false;
 
 3836    static const char name[4];
 
 3838    typedef L2_Shape_Evaluator edge_shape_type_0;
 
 3839    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 3840    static const int num_edge = 6;
 
 3841    static const int edge_node[6][2];
 
 3842    static const int edge_type_index[6];
 
 3844    typedef T3_Shape_Evaluator face_shape_type_0;
 
 3845    typedef T3_Shape_Evaluator face_shape_type_1;
 
 3846    static const int num_face = 4;
 
 3847    static const int face_node[4][3];
 
 3848    static const int face_type_index[4];
 
 3849    static const bool is_t_face[4];
 
 3852typedef Solid_Shape_Evaluator<TE4_Shape_Helper> TE4_Shape_Evaluator;
 
 3854class TE10_Shape_Helper : 
public TE_Shape_Helper {
 
 3856    static void eval_h(
const double internal_coor[3], 
double h[10]) {
 
 3857        const double r = internal_coor[0];
 
 3858        const double s = internal_coor[1];
 
 3859        const double t = internal_coor[2];
 
 3861        const double a = 1 - r - s - t;
 
 3863        h[0] = a * (2 * a - 1);
 
 3864        h[1] = r * (2 * r - 1);
 
 3865        h[2] = s * (2 * s - 1);
 
 3866        h[3] = t * (2 * t - 1);
 
 3875    static void eval_h_derived(
const double internal_coor[3], 
double d[10][3]) {
 
 3876        const double r = internal_coor[0];
 
 3877        const double s = internal_coor[1];
 
 3878        const double t = internal_coor[2];
 
 3880        const double a = 1 - r - s - t;
 
 3883        d[0][0] = +1 - 4 * a;
 
 3884        d[1][0] = +4 * r - 1;
 
 3887        d[4][0] = +4 * (a - r);
 
 3895        d[0][1] = +1 - 4 * a;
 
 3897        d[2][1] = +4 * s - 1;
 
 3901        d[6][1] = +4 * (a - s);
 
 3907        d[0][2] = +1 - 4 * a;
 
 3910        d[3][2] = +4 * t - 1;
 
 3914        d[7][2] = +4 * (a - t);
 
 3919    static const int num_nodes = 10;
 
 3920    static const int num_faces = 4;
 
 3921    static const int num_dimensions = 3;
 
 3922    static const int order = 2;
 
 3923    typedef IS_TE ischeme_type;
 
 3925    static ischeme_type create_ischeme() {
 
 3926        ischeme_type ischeme;
 
 3927        ischeme.set_order(order);
 
 3931    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 3932        ischeme_type ischeme;
 
 3933        ischeme.set_order(2 * order);
 
 3934        ischeme.init(property);
 
 3938    static const double r_node[10];
 
 3939    static const double s_node[10];
 
 3940    static const double t_node[10];
 
 3942    static const bool supports_laminates = 
false;
 
 3944    static const char name[5];
 
 3946    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 3947    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 3948    static const int num_edge = 6;
 
 3949    static const int edge_node[6][3];
 
 3950    static const int edge_type_index[6];
 
 3952    typedef T6_Shape_Evaluator face_shape_type_0;
 
 3953    typedef T6_Shape_Evaluator face_shape_type_1;
 
 3954    static const int num_face = 4;
 
 3955    static const int face_node[4][6];
 
 3956    static const int face_type_index[4];
 
 3957    static const bool is_t_face[4];
 
 3960typedef Solid_Shape_Evaluator<TE10_Shape_Helper> TE10_Shape_Evaluator;
 
 3966class PR_Shape_Helper {
 
 3968    static inline void map_element_coor_to_face_coor(
 
 3969          const double element_coor[3],
 
 3971          double face_coor[2]) {
 
 3973        const double a[5][2] = {{0., 0.}, {0., 0.}, {-1., 0.}, {-1., 0.}, {+1., 0.}};
 
 3974        const double b[5][2][3] = {
 
 3975              {{+1., 0., 0.}, {0., +1., 0.}}, {{+1., 0., 0.}, {0., +1., 0.}},
 
 3976              {{+2., 0., 0.}, {0., 0., +1.}}, {{0., +2., 0.}, {0., 0., +1.}},
 
 3977              {{0., -2., 0.}, {0., 0., +1.}},
 
 3979        for (
int i = 0; i != 2; ++i) {
 
 3980            face_coor[i] = a[face][i];
 
 3981            for (
int j = 0; j != 3; ++j) { face_coor[i] += b[face][i][j] * element_coor[j]; }
 
 3985    static inline void map_face_coor_to_element_coor(
 
 3986          const int face, 
const double face_coor[2], 
double element_coor[3]) {
 
 3987        const double a[5][3] = {
 
 3988              {0., 0., -1.}, {0., 0., +1.}, {+.5, 0., 0.}, {+.5, +.5, 0.}, {0., +.5, 0.}};
 
 3989        const double b[5][3][2] = {
 
 3990              {{+1., 0.}, {0., +1.}, {0., 0.}}, {{+1., 0.}, {0., +1.}, {0., 0.}},
 
 3991              {{+.5, 0.}, {0., 0.}, {0., 1.}},  {{-.5, 0.}, {+.5, 0.}, {0., 1.}},
 
 3992              {{0., 0.}, {-.5, 0.}, {0., 1.}},
 
 3994        for (
int i = 0; i != 3; ++i) {
 
 3995            element_coor[i] = a[face][i];
 
 3996            for (
int j = 0; j != 2; ++j) { element_coor[i] += b[face][i][j] * face_coor[j]; }
 
 4001class PR6_Shape_Helper : 
public PR_Shape_Helper {
 
 4003    static void eval_h(
const double internal_coor[3], 
double h[6]) {
 
 4004        const double r = internal_coor[0];
 
 4005        const double s = internal_coor[1];
 
 4006        const double t = internal_coor[2];
 
 4008        const double tm = 1. - t;
 
 4009        const double tp = 1. + t;
 
 4011        h[0] = 0.5 * tm * (1. - r - s);
 
 4012        h[1] = 0.5 * tm * r;
 
 4013        h[2] = 0.5 * tm * s;
 
 4014        h[3] = 0.5 * tp * (1. - r - s);
 
 4015        h[4] = 0.5 * tp * r;
 
 4016        h[5] = 0.5 * tp * s;
 
 4019    static void eval_h_derived(
const double internal_coor[3], 
double d[6][3]) {
 
 4020        const double r = internal_coor[0];
 
 4021        const double s = internal_coor[1];
 
 4022        const double t = internal_coor[2];
 
 4024        const double tm = 1. - t;
 
 4025        const double tp = 1. + t;
 
 4028        d[0][0] = -0.5 * tm;
 
 4029        d[1][0] = +0.5 * tm;
 
 4031        d[3][0] = -0.5 * tp;
 
 4032        d[4][0] = +0.5 * tp;
 
 4036        d[0][1] = -0.5 * tm;
 
 4038        d[2][1] = +0.5 * tm;
 
 4039        d[3][1] = -0.5 * tp;
 
 4041        d[5][1] = +0.5 * tp;
 
 4044        d[0][2] = +0.5 * (r + s - 1);
 
 4047        d[3][2] = -0.5 * (r + s - 1);
 
 4052    static const int num_nodes = 6;
 
 4053    static const int num_dimensions = 3;
 
 4054    static const int order = 3;
 
 4055    typedef IS_PR ischeme_type;
 
 4057    static ischeme_type create_ischeme() {
 
 4058        ischeme_type ischeme;
 
 4059        ischeme.triangle.set_order(T3_Shape_Evaluator::order);
 
 4060        ischeme.line.set_order(L2_Shape_Evaluator::order);
 
 4064    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4065        ischeme_type ischeme;
 
 4066        ischeme.triangle.set_order(2 * T3_Shape_Evaluator::order);
 
 4067        ischeme.line.set_order(2 * L2_Shape_Evaluator::order);
 
 4068        ischeme.init(property);
 
 4072    static const double r_node[6];
 
 4073    static const double s_node[6];
 
 4074    static const double t_node[6];
 
 4076    static const bool supports_laminates = 
true;
 
 4078    static const char name[4];
 
 4080    typedef L2_Shape_Evaluator edge_shape_type_0;
 
 4081    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 4082    static const int num_edge = 9;
 
 4083    static const int edge_node[9][2];
 
 4084    static const int edge_type_index[9];
 
 4086    typedef T3_Shape_Evaluator face_shape_type_0;
 
 4087    typedef Q4_Shape_Evaluator face_shape_type_1;
 
 4088    static const int num_face = 5;
 
 4089    static const int face_node[5][4];
 
 4090    static const int face_type_index[5];
 
 4091    static const bool is_t_face[5];
 
 4094typedef Solid_Shape_Evaluator<PR6_Shape_Helper> PR6_Shape_Evaluator;
 
 4096class PR15_Shape_Helper : 
public PR_Shape_Helper {
 
 4098    static void eval_h(
const double internal_coor[3], 
double h[15]) {
 
 4099        double r = internal_coor[0];
 
 4100        double s = internal_coor[1];
 
 4101        double t = internal_coor[2];
 
 4104        double a = 1. - r - s;
 
 4105        h[0] = a * (1. - t) * (a - (1. + 0.5 * t));
 
 4106        h[1] = r * (1. - t) * (r - (1. + 0.5 * t));
 
 4107        h[2] = s * (1. - t) * (s - (1. + 0.5 * t));
 
 4108        h[3] = a * (1. + t) * (a - (1. - 0.5 * t));
 
 4109        h[4] = r * (1. + t) * (r - (1. - 0.5 * t));
 
 4110        h[5] = s * (1. + t) * (s - (1. - 0.5 * t));
 
 4111        h[6] = 2.0 * a * r * (1. - t);
 
 4112        h[7] = 2.0 * r * s * (1. - t);
 
 4113        h[8] = 2.0 * a * s * (1. - t);
 
 4114        h[9] = 2.0 * a * r * (1. + t);
 
 4115        h[10] = 2.0 * r * s * (1. + t);
 
 4116        h[11] = 2.0 * a * s * (1. + t);
 
 4117        h[12] = a * (1. - t * t);
 
 4118        h[13] = r * (1. - t * t);
 
 4119        h[14] = s * (1. - t * t);
 
 4122    static void eval_h_derived(
const double internal_coor[3], 
double d[15][3]) {
 
 4123        double r = internal_coor[0];
 
 4124        double s = internal_coor[1];
 
 4125        double t = internal_coor[2];
 
 4128        d[0][0] = -(t - 1.) * (t + 4.0 * s + 4.0 * r - 2.0) * 0.5;
 
 4129        d[1][0] = +(t - 1.) * (t - 4.0 * r + 2.0) * 0.5;
 
 4131        d[3][0] = -(t + 1.) * (t - 4.0 * s - 4.0 * r + 2.0) * 0.5;
 
 4132        d[4][0] = +(t + 1.) * (t + 4.0 * r - 2.0) * 0.5;
 
 4134        d[6][0] = +2.0 * (s + 2.0 * r - 1.) * (t - 1.);
 
 4135        d[7][0] = -2.0 * s * (t - 1.);
 
 4136        d[8][0] = +2.0 * s * (t - 1.);
 
 4137        d[9][0] = -2.0 * (s + 2.0 * r - 1.) * (t + 1.);
 
 4138        d[10][0] = +2.0 * s * (t + 1.);
 
 4139        d[11][0] = -2.0 * s * (t + 1.);
 
 4140        d[12][0] = +(t - 1.) * (t + 1.);
 
 4141        d[13][0] = -(t - 1.) * (t + 1.);
 
 4144        d[0][1] = -(t - 1.) * (t + 4.0 * s + 4.0 * r - 2.0) * 0.5;
 
 4146        d[2][1] = +(t - 1.) * (t - 4.0 * s + 2.0) * 0.5;
 
 4147        d[3][1] = -(t + 1.) * (t - 4.0 * s - 4.0 * r + 2.0) * 0.5;
 
 4149        d[5][1] = +(t + 1.) * (t + 4.0 * s - 2.0) * 0.5;
 
 4150        d[6][1] = +2.0 * r * (t - 1.);
 
 4151        d[7][1] = -2.0 * r * (t - 1.);
 
 4152        d[8][1] = +2.0 * (2.0 * s + r - 1.) * (t - 1.);
 
 4153        d[9][1] = -2.0 * r * (t + 1.);
 
 4154        d[10][1] = +2.0 * r * (t + 1.);
 
 4155        d[11][1] = -2.0 * (2.0 * s + r - 1.) * (t + 1.);
 
 4156        d[12][1] = +(t - 1.) * (t + 1.);
 
 4158        d[14][1] = -(t - 1.) * (t + 1.);
 
 4160        d[0][2] = -(s + r - 1.) * (2.0 * t + 2.0 * s + 2.0 * r - 1.) * 0.5;
 
 4161        d[1][2] = +r * (2.0 * t - 2.0 * r + 1.) * 0.5;
 
 4162        d[2][2] = +s * (2.0 * t - 2.0 * s + 1.) * 0.5;
 
 4163        d[3][2] = -(s + r - 1.) * (2.0 * t - 2.0 * s - 2.0 * r + 1.) * 0.5;
 
 4164        d[4][2] = +r * (2.0 * t + 2.0 * r - 1.) * 0.5;
 
 4165        d[5][2] = +s * (2.0 * t + 2.0 * s - 1.) * 0.5;
 
 4166        d[6][2] = +2.0 * r * (s + r - 1.);
 
 4167        d[7][2] = -2.0 * r * s;
 
 4168        d[8][2] = +2.0 * s * (s + r - 1.);
 
 4169        d[9][2] = -2.0 * r * (s + r - 1.);
 
 4170        d[10][2] = +2.0 * r * s;
 
 4171        d[11][2] = -2.0 * s * (s + r - 1.);
 
 4172        d[12][2] = +2.0 * (s + r - 1.) * t;
 
 4173        d[13][2] = -2.0 * r * t;
 
 4174        d[14][2] = -2.0 * s * t;
 
 4177    static const int num_nodes = 15;
 
 4178    static const int num_dimensions = 3;
 
 4179    static const int order = 6;
 
 4180    typedef IS_PR ischeme_type;
 
 4182    static ischeme_type create_ischeme() {
 
 4183        ischeme_type ischeme;
 
 4184        ischeme.triangle.set_order(T6_Shape_Evaluator::order);
 
 4185        ischeme.line.set_order(L3_Shape_Evaluator::order);
 
 4189    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4190        ischeme_type ischeme;
 
 4191        ischeme.triangle.set_order(2 * T6_Shape_Evaluator::order);
 
 4192        ischeme.line.set_order(2 * L3_Shape_Evaluator::order);
 
 4193        ischeme.init(property);
 
 4197    static const double r_node[15];
 
 4198    static const double s_node[15];
 
 4199    static const double t_node[15];
 
 4201    static const bool supports_laminates = 
true;
 
 4203    static const char name[5];
 
 4205    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 4206    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 4207    static const int num_edge = 9;
 
 4208    static const int edge_node[9][3];
 
 4209    static const int edge_type_index[9];
 
 4211    typedef T6_Shape_Evaluator face_shape_type_0;
 
 4212    typedef Q8_Shape_Evaluator face_shape_type_1;
 
 4213    static const int num_face = 5;
 
 4214    static const int face_node[5][8];
 
 4215    static const int face_type_index[5];
 
 4216    static const bool is_t_face[5];
 
 4219typedef Solid_Shape_Evaluator<PR15_Shape_Helper> PR15_Shape_Evaluator;
 
 4221class PR18_Shape_Helper : 
public PR_Shape_Helper {
 
 4223    static void eval_h(
const double internal_coor[3], 
double h[18]) {
 
 4225        T6_Shape_Evaluator::eval_h(internal_coor, inplane);
 
 4226        double outofplane[3];
 
 4227        L3_Shape_Evaluator::eval_h(internal_coor + 2, outofplane);
 
 4228        h[0] = inplane[0] * outofplane[0];
 
 4229        h[1] = inplane[1] * outofplane[0];
 
 4230        h[2] = inplane[2] * outofplane[0];
 
 4231        h[3] = inplane[0] * outofplane[1];
 
 4232        h[4] = inplane[1] * outofplane[1];
 
 4233        h[5] = inplane[2] * outofplane[1];
 
 4234        h[6] = inplane[3] * outofplane[0];
 
 4235        h[7] = inplane[4] * outofplane[0];
 
 4236        h[8] = inplane[5] * outofplane[0];
 
 4237        h[9] = inplane[3] * outofplane[1];
 
 4238        h[10] = inplane[4] * outofplane[1];
 
 4239        h[11] = inplane[5] * outofplane[1];
 
 4240        h[12] = inplane[0] * outofplane[2];
 
 4241        h[13] = inplane[1] * outofplane[2];
 
 4242        h[14] = inplane[2] * outofplane[2];
 
 4243        h[15] = inplane[3] * outofplane[2];
 
 4244        h[16] = inplane[4] * outofplane[2];
 
 4245        h[17] = inplane[5] * outofplane[2];
 
 4248    static void eval_h_derived(
const double internal_coor[3], 
double d[18][3]) {
 
 4250        T6_Shape_Evaluator::eval_h(internal_coor, inplane);
 
 4251        double outofplane[3];
 
 4252        L3_Shape_Evaluator::eval_h(internal_coor + 2, outofplane);
 
 4254        double inplane_d[6][2];
 
 4255        T6_Shape_Evaluator::eval_h_derived(internal_coor, inplane_d);
 
 4256        double outofplane_d[3][1];
 
 4257        L3_Shape_Evaluator::eval_h_derived(internal_coor + 2, outofplane_d);
 
 4259        d[0][0] = inplane_d[0][0] * outofplane[0];
 
 4260        d[1][0] = inplane_d[1][0] * outofplane[0];
 
 4261        d[2][0] = inplane_d[2][0] * outofplane[0];
 
 4262        d[3][0] = inplane_d[0][0] * outofplane[1];
 
 4263        d[4][0] = inplane_d[1][0] * outofplane[1];
 
 4264        d[5][0] = inplane_d[2][0] * outofplane[1];
 
 4265        d[6][0] = inplane_d[3][0] * outofplane[0];
 
 4266        d[7][0] = inplane_d[4][0] * outofplane[0];
 
 4267        d[8][0] = inplane_d[5][0] * outofplane[0];
 
 4268        d[9][0] = inplane_d[3][0] * outofplane[1];
 
 4269        d[10][0] = inplane_d[4][0] * outofplane[1];
 
 4270        d[11][0] = inplane_d[5][0] * outofplane[1];
 
 4271        d[12][0] = inplane_d[0][0] * outofplane[2];
 
 4272        d[13][0] = inplane_d[1][0] * outofplane[2];
 
 4273        d[14][0] = inplane_d[2][0] * outofplane[2];
 
 4274        d[15][0] = inplane_d[3][0] * outofplane[2];
 
 4275        d[16][0] = inplane_d[4][0] * outofplane[2];
 
 4276        d[17][0] = inplane_d[5][0] * outofplane[2];
 
 4278        d[0][1] = inplane_d[0][1] * outofplane[0];
 
 4279        d[1][1] = inplane_d[1][1] * outofplane[0];
 
 4280        d[2][1] = inplane_d[2][1] * outofplane[0];
 
 4281        d[3][1] = inplane_d[0][1] * outofplane[1];
 
 4282        d[4][1] = inplane_d[1][1] * outofplane[1];
 
 4283        d[5][1] = inplane_d[2][1] * outofplane[1];
 
 4284        d[6][1] = inplane_d[3][1] * outofplane[0];
 
 4285        d[7][1] = inplane_d[4][1] * outofplane[0];
 
 4286        d[8][1] = inplane_d[5][1] * outofplane[0];
 
 4287        d[9][1] = inplane_d[3][1] * outofplane[1];
 
 4288        d[10][1] = inplane_d[4][1] * outofplane[1];
 
 4289        d[11][1] = inplane_d[5][1] * outofplane[1];
 
 4290        d[12][1] = inplane_d[0][1] * outofplane[2];
 
 4291        d[13][1] = inplane_d[1][1] * outofplane[2];
 
 4292        d[14][1] = inplane_d[2][1] * outofplane[2];
 
 4293        d[15][1] = inplane_d[3][1] * outofplane[2];
 
 4294        d[16][1] = inplane_d[4][1] * outofplane[2];
 
 4295        d[17][1] = inplane_d[5][1] * outofplane[2];
 
 4297        d[0][2] = inplane[0] * outofplane_d[0][0];
 
 4298        d[1][2] = inplane[1] * outofplane_d[0][0];
 
 4299        d[2][2] = inplane[2] * outofplane_d[0][0];
 
 4300        d[3][2] = inplane[0] * outofplane_d[1][0];
 
 4301        d[4][2] = inplane[1] * outofplane_d[1][0];
 
 4302        d[5][2] = inplane[2] * outofplane_d[1][0];
 
 4303        d[6][2] = inplane[3] * outofplane_d[0][0];
 
 4304        d[7][2] = inplane[4] * outofplane_d[0][0];
 
 4305        d[8][2] = inplane[5] * outofplane_d[0][0];
 
 4306        d[9][2] = inplane[3] * outofplane_d[1][0];
 
 4307        d[10][2] = inplane[4] * outofplane_d[1][0];
 
 4308        d[11][2] = inplane[5] * outofplane_d[1][0];
 
 4309        d[12][2] = inplane[0] * outofplane_d[2][0];
 
 4310        d[13][2] = inplane[1] * outofplane_d[2][0];
 
 4311        d[14][2] = inplane[2] * outofplane_d[2][0];
 
 4312        d[15][2] = inplane[3] * outofplane_d[2][0];
 
 4313        d[16][2] = inplane[4] * outofplane_d[2][0];
 
 4314        d[17][2] = inplane[5] * outofplane_d[2][0];
 
 4317    static const int num_nodes = 18;
 
 4318    static const int num_dimensions = 3;
 
 4319    static const int order = 6;
 
 4320    typedef IS_PR ischeme_type;
 
 4322    static ischeme_type create_ischeme() {
 
 4323        ischeme_type ischeme;
 
 4324        ischeme.triangle.set_order(T6_Shape_Evaluator::order);
 
 4325        ischeme.line.set_order(L3_Shape_Evaluator::order);
 
 4329    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4330        ischeme_type ischeme;
 
 4331        ischeme.triangle.set_order(2 * T6_Shape_Evaluator::order);
 
 4332        ischeme.line.set_order(2 * L3_Shape_Evaluator::order);
 
 4333        ischeme.init(property);
 
 4337    static const double r_node[18];
 
 4338    static const double s_node[18];
 
 4339    static const double t_node[18];
 
 4341    static const bool supports_laminates = 
true;
 
 4343    static const char name[5];
 
 4345    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 4346    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 4347    static const int num_edge = 9;
 
 4348    static const int edge_node[9][3];
 
 4349    static const int edge_type_index[9];
 
 4351    typedef T6_Shape_Evaluator face_shape_type_0;
 
 4352    typedef Q9_Shape_Evaluator face_shape_type_1;
 
 4353    static const int num_face = 5;
 
 4354    static const int face_node[5][9];
 
 4355    static const int face_type_index[5];
 
 4356    static const bool is_t_face[5];
 
 4359typedef Solid_Shape_Evaluator<PR18_Shape_Helper> PR18_Shape_Evaluator;
 
 4365class HE_Shape_Helper {
 
 4367    static inline void map_element_coor_to_face_coor(
 
 4368          const double element_coor[3],
 
 4370          double face_coor[2]) {
 
 4372        const double coor_map[6][2][3] = {
 
 4373              {{0., -1., 0.}, {0., 0., 1.}}, {{0., 1., 0.}, {0., 0., 1.}},
 
 4374              {{1., 0., 0.}, {0., 0., 1.}},  {{-1., 0., 0.}, {0., 0., 1.}},
 
 4375              {{-1., 0., 0.}, {0., 1., 0.}}, {{1., 0., 0.}, {0., 1., 0.}}};
 
 4376        for (
int i = 0; i != 2; ++i) {
 
 4378            for (
int j = 0; j != 3; ++j) { face_coor[i] += coor_map[face][i][j] * element_coor[j]; }
 
 4382    static inline void map_face_coor_to_element_coor(
 
 4383          const int face, 
const double face_coor[2], 
double element_coor[3]) {
 
 4384        const double a[3] = {face_coor[0], face_coor[1], 1.};
 
 4385        const double coor_map[6][3][3] = {
 
 4386              {{0., 0., -1.}, {-1., 0., 0.}, {0., 1., 0.}},
 
 4387              {{0., 0., 1.}, {1., 0., 0.}, {0., 1., 0.}},
 
 4388              {{1., 0., 0.}, {0., 0., -1.}, {0., 1., 0.}},
 
 4389              {{-1., 0., 0.}, {0., 0., 1.}, {0., 1., 0.}},
 
 4390              {{-1., 0., 0.}, {0., 1., 0.}, {0., 0., -1.}},
 
 4391              {{1., 0., 0.}, {0., 1., 0.}, {0., 0., 1.}},
 
 4393        for (
int i = 0; i != 3; ++i) {
 
 4394            element_coor[i] = 0.;
 
 4395            for (
int j = 0; j != 3; ++j) { element_coor[i] += coor_map[face][i][j] * a[j]; }
 
 4400class HE8_Shape_Helper : 
public HE_Shape_Helper {
 
 4402    static void eval_h(
const double internal_coor[3], 
double h[8]) {
 
 4403        const double r = internal_coor[0];
 
 4404        const double s = internal_coor[1];
 
 4405        const double t = internal_coor[2];
 
 4407        const double rm = r - 1;
 
 4408        const double sm = s - 1;
 
 4409        const double tm = t - 1;
 
 4411        const double rp = r + 1;
 
 4412        const double sp = s + 1;
 
 4413        const double tp = t + 1;
 
 4415        h[0] = -0.125 * rm * sm * tm;
 
 4416        h[1] = +0.125 * rp * sm * tm;
 
 4417        h[2] = -0.125 * rp * sp * tm;
 
 4418        h[3] = +0.125 * rm * sp * tm;
 
 4419        h[4] = +0.125 * rm * sm * tp;
 
 4420        h[5] = -0.125 * rp * sm * tp;
 
 4421        h[6] = +0.125 * rp * sp * tp;
 
 4422        h[7] = -0.125 * rm * sp * tp;
 
 4425    static void eval_h_derived(
const double internal_coor[3], 
double d[8][3]) {
 
 4426        const double r = internal_coor[0];
 
 4427        const double s = internal_coor[1];
 
 4428        const double t = internal_coor[2];
 
 4430        const double rm = 1. - r;
 
 4431        const double sm = 1. - s;
 
 4432        const double tm = 1. - t;
 
 4434        const double rp = 1. + r;
 
 4435        const double sp = 1. + s;
 
 4436        const double tp = 1. + t;
 
 4438        const double fa = 0.125;
 
 4441        d[0][0] = -fa * sm * tm;
 
 4442        d[1][0] = +fa * sm * tm;
 
 4443        d[2][0] = +fa * sp * tm;
 
 4444        d[3][0] = -fa * sp * tm;
 
 4445        d[4][0] = -fa * sm * tp;
 
 4446        d[5][0] = +fa * sm * tp;
 
 4447        d[6][0] = +fa * sp * tp;
 
 4448        d[7][0] = -fa * sp * tp;
 
 4451        d[0][1] = -fa * rm * tm;
 
 4452        d[1][1] = -fa * rp * tm;
 
 4453        d[2][1] = +fa * rp * tm;
 
 4454        d[3][1] = +fa * rm * tm;
 
 4455        d[4][1] = -fa * rm * tp;
 
 4456        d[5][1] = -fa * rp * tp;
 
 4457        d[6][1] = +fa * rp * tp;
 
 4458        d[7][1] = +fa * rm * tp;
 
 4461        d[0][2] = -fa * rm * sm;
 
 4462        d[1][2] = -fa * rp * sm;
 
 4463        d[2][2] = -fa * rp * sp;
 
 4464        d[3][2] = -fa * rm * sp;
 
 4465        d[4][2] = +fa * rm * sm;
 
 4466        d[5][2] = +fa * rp * sm;
 
 4467        d[6][2] = +fa * rp * sp;
 
 4468        d[7][2] = +fa * rm * sp;
 
 4471    static const int num_nodes = 8;
 
 4472    static const int num_faces = 6;
 
 4473    static const int num_dimensions = 3;
 
 4474    static const int order = 3;
 
 4475    typedef IS_HE ischeme_type;
 
 4477    static ischeme_type create_ischeme() {
 
 4478        ischeme_type ischeme;
 
 4479        ischeme[0].set_order(1);
 
 4480        ischeme[1].set_order(1);
 
 4481        ischeme[2].set_order(1);
 
 4485    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4486        ischeme_type ischeme;
 
 4487        ischeme[0].set_order(2 * 1);
 
 4488        ischeme[1].set_order(2 * 1);
 
 4489        ischeme[2].set_order(2 * 1);
 
 4490        ischeme.init(property);
 
 4494    static const double r_node[8];
 
 4495    static const double s_node[8];
 
 4496    static const double t_node[8];
 
 4498    static const bool supports_laminates = 
true;
 
 4500    static const char name[4];
 
 4502    typedef L2_Shape_Evaluator edge_shape_type_0;
 
 4503    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 4504    static const int num_edge = 12;
 
 4505    static const int edge_node[12][2];
 
 4506    static const int edge_type_index[12];
 
 4508    typedef Q4_Shape_Evaluator face_shape_type_0;
 
 4509    typedef Q4_Shape_Evaluator face_shape_type_1;
 
 4510    static const int num_face = 6;
 
 4511    static const int face_node[6][4];
 
 4512    static const int face_type_index[6];
 
 4513    static const bool is_t_face[6];
 
 4516typedef Solid_Shape_Evaluator<HE8_Shape_Helper> HE8_Shape_Evaluator;
 
 4518class HE20_Shape_Helper : 
public HE_Shape_Helper {
 
 4520    static void eval_h(
const double internal_coor[3], 
double h[20]) {
 
 4521        const double r = internal_coor[0];
 
 4522        const double s = internal_coor[1];
 
 4523        const double t = internal_coor[2];
 
 4525        const double rm = r - 1;
 
 4526        const double sm = s - 1;
 
 4527        const double tm = t - 1;
 
 4529        const double rp = r + 1;
 
 4530        const double sp = s + 1;
 
 4531        const double tp = t + 1;
 
 4533        h[0] = +0.125 * rm * sm * tm * (t + s + r + 2);
 
 4534        h[1] = -0.125 * rp * sm * tm * (t + s - r + 2);
 
 4535        h[2] = +0.125 * rp * sp * tm * (t - s - r + 2);
 
 4536        h[3] = -0.125 * rm * sp * tm * (t - s + r + 2);
 
 4537        h[4] = +0.125 * rm * sm * tp * (t - s - r - 2);
 
 4538        h[5] = -0.125 * rp * sm * tp * (t - s + r - 2);
 
 4539        h[6] = +0.125 * rp * sp * tp * (t + s + r - 2);
 
 4540        h[7] = -0.125 * rm * sp * tp * (t + s - r - 2);
 
 4541        h[8] = -0.250 * rm * rp * sm * tm;
 
 4542        h[9] = +0.250 * rp * sm * sp * tm;
 
 4543        h[10] = +0.250 * rm * rp * sp * tm;
 
 4544        h[11] = -0.250 * rm * sm * sp * tm;
 
 4545        h[12] = +0.250 * rm * rp * sm * tp;
 
 4546        h[13] = -0.250 * rp * sm * sp * tp;
 
 4547        h[14] = -0.250 * rm * rp * sp * tp;
 
 4548        h[15] = +0.250 * rm * sm * sp * tp;
 
 4549        h[16] = -0.250 * rm * sm * tm * tp;
 
 4550        h[17] = +0.250 * rp * sm * tm * tp;
 
 4551        h[18] = -0.250 * rp * sp * tm * tp;
 
 4552        h[19] = +0.250 * rm * sp * tm * tp;
 
 4555    static void eval_h_derived(
const double internal_coor[3], 
double d[20][3]) {
 
 4556        const double r = internal_coor[0];
 
 4557        const double s = internal_coor[1];
 
 4558        const double t = internal_coor[2];
 
 4560        const double rm = r - 1;
 
 4561        const double sm = s - 1;
 
 4562        const double tm = t - 1;
 
 4564        const double rp = 1. + r;
 
 4565        const double sp = 1. + s;
 
 4566        const double tp = 1. + t;
 
 4569        d[0][0] = +0.125 * sm * tm * (t + s + 2 * r + 1);
 
 4570        d[1][0] = -0.125 * sm * tm * (t + s - 2 * r + 1);
 
 4571        d[2][0] = +0.125 * sp * tm * (t - s - 2 * r + 1);
 
 4572        d[3][0] = -0.125 * sp * tm * (t - s + 2 * r + 1);
 
 4573        d[4][0] = +0.125 * sm * tp * (t - s - 2 * r - 1);
 
 4574        d[5][0] = -0.125 * sm * tp * (t - s + 2 * r - 1);
 
 4575        d[6][0] = +0.125 * sp * tp * (t + s + 2 * r - 1);
 
 4576        d[7][0] = -0.125 * sp * tp * (t + s - 2 * r - 1);
 
 4577        d[8][0] = -0.5 * r * sm * tm;
 
 4578        d[9][0] = +0.25 * sm * sp * tm;
 
 4579        d[10][0] = +0.5 * r * sp * tm;
 
 4580        d[11][0] = -0.25 * sm * sp * tm;
 
 4581        d[12][0] = +0.5 * r * sm * tp;
 
 4582        d[13][0] = -0.25 * sm * sp * tp;
 
 4583        d[14][0] = -0.5 * r * sp * tp;
 
 4584        d[15][0] = +0.25 * sm * sp * tp;
 
 4585        d[16][0] = -0.25 * sm * tm * tp;
 
 4586        d[17][0] = +0.25 * sm * tm * tp;
 
 4587        d[18][0] = -0.25 * sp * tm * tp;
 
 4588        d[19][0] = +0.25 * sp * tm * tp;
 
 4591        d[0][1] = +0.125 * rm * tm * (t + 2 * s + r + 1);
 
 4592        d[1][1] = -0.125 * rp * tm * (t + 2 * s - r + 1);
 
 4593        d[2][1] = +0.125 * rp * tm * (t - 2 * s - r + 1);
 
 4594        d[3][1] = -0.125 * rm * tm * (t - 2 * s + r + 1);
 
 4595        d[4][1] = +0.125 * rm * tp * (t - 2 * s - r - 1);
 
 4596        d[5][1] = -0.125 * rp * tp * (t - 2 * s + r - 1);
 
 4597        d[6][1] = +0.125 * rp * tp * (t + 2 * s + r - 1);
 
 4598        d[7][1] = -0.125 * rm * tp * (t + 2 * s - r - 1);
 
 4599        d[8][1] = -0.25 * rm * rp * tm;
 
 4600        d[9][1] = +0.5 * rp * s * tm;
 
 4601        d[10][1] = +0.25 * rm * rp * tm;
 
 4602        d[11][1] = -0.5 * rm * s * tm;
 
 4603        d[12][1] = +0.25 * rm * rp * tp;
 
 4604        d[13][1] = -0.5 * rp * s * tp;
 
 4605        d[14][1] = -0.25 * rm * rp * tp;
 
 4606        d[15][1] = +0.5 * rm * s * tp;
 
 4607        d[16][1] = -0.25 * rm * tm * tp;
 
 4608        d[17][1] = +0.25 * rp * tm * tp;
 
 4609        d[18][1] = -0.25 * rp * tm * tp;
 
 4610        d[19][1] = +0.25 * rm * tm * tp;
 
 4613        d[0][2] = +0.125 * rm * sm * (2 * t + s + r + 1);
 
 4614        d[1][2] = -0.125 * rp * sm * (2 * t + s - r + 1);
 
 4615        d[2][2] = +0.125 * rp * sp * (2 * t - s - r + 1);
 
 4616        d[3][2] = -0.125 * rm * sp * (2 * t - s + r + 1);
 
 4617        d[4][2] = +0.125 * rm * sm * (2 * t - s - r - 1);
 
 4618        d[5][2] = -0.125 * rp * sm * (2 * t - s + r - 1);
 
 4619        d[6][2] = +0.125 * rp * sp * (2 * t + s + r - 1);
 
 4620        d[7][2] = -0.125 * rm * sp * (2 * t + s - r - 1);
 
 4621        d[8][2] = -0.25 * rm * rp * sm;
 
 4622        d[9][2] = +0.25 * rp * sm * sp;
 
 4623        d[10][2] = +0.25 * rm * rp * sp;
 
 4624        d[11][2] = -0.25 * rm * sm * sp;
 
 4625        d[12][2] = +0.25 * rm * rp * sm;
 
 4626        d[13][2] = -0.25 * rp * sm * sp;
 
 4627        d[14][2] = -0.25 * rm * rp * sp;
 
 4628        d[15][2] = +0.25 * rm * sm * sp;
 
 4629        d[16][2] = -0.5 * rm * sm * t;
 
 4630        d[17][2] = +0.5 * rp * sm * t;
 
 4631        d[18][2] = -0.5 * rp * sp * t;
 
 4632        d[19][2] = +0.5 * rm * sp * t;
 
 4635    static const int num_nodes = 20;
 
 4636    static const int num_faces = 6;
 
 4637    static const int num_dimensions = 3;
 
 4638    static const int order = 6;
 
 4639    typedef IS_HE ischeme_type;
 
 4641    static ischeme_type create_ischeme() {
 
 4642        ischeme_type ischeme;
 
 4643        ischeme[0].set_order(2);
 
 4644        ischeme[1].set_order(2);
 
 4645        ischeme[2].set_order(2);
 
 4649    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4650        ischeme_type ischeme;
 
 4651        ischeme[0].set_order(2 * 2);
 
 4652        ischeme[1].set_order(2 * 2);
 
 4653        ischeme[2].set_order(2 * 2);
 
 4654        ischeme.init(property);
 
 4658    static const double r_node[20];
 
 4659    static const double s_node[20];
 
 4660    static const double t_node[20];
 
 4662    static const bool supports_laminates = 
true;
 
 4664    static const char name[5];
 
 4666    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 4667    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 4668    static const int num_edge = 12;
 
 4669    static const int edge_node[12][3];
 
 4670    static const int edge_type_index[12];
 
 4672    typedef Q8_Shape_Evaluator face_shape_type_0;
 
 4673    typedef Q8_Shape_Evaluator face_shape_type_1;
 
 4674    static const int num_face = 6;
 
 4675    static const int face_node[6][8];
 
 4676    static const int face_type_index[6];
 
 4677    static const bool is_t_face[6];
 
 4680typedef Solid_Shape_Evaluator<HE20_Shape_Helper> HE20_Shape_Evaluator;
 
 4682class HE27_Shape_Helper : 
public HE_Shape_Helper {
 
 4684    static void eval_h(
const double internal_coor[3], 
double h[27]) {
 
 4685        const double r = internal_coor[0];
 
 4686        const double s = internal_coor[1];
 
 4687        const double t = internal_coor[2];
 
 4689        const double rm = r - 1;
 
 4690        const double sm = s - 1;
 
 4691        const double tm = t - 1;
 
 4693        const double rp = r + 1;
 
 4694        const double sp = s + 1;
 
 4695        const double tp = t + 1;
 
 4697        h[0] = +0.125 * rm * r * sm * s * tm * t;
 
 4698        h[1] = +0.125 * rp * r * sm * s * tm * t;
 
 4699        h[2] = +0.125 * rp * r * sp * s * tm * t;
 
 4700        h[3] = +0.125 * rm * r * sp * s * tm * t;
 
 4701        h[4] = +0.125 * rm * r * sm * s * tp * t;
 
 4702        h[5] = +0.125 * rp * r * sm * s * tp * t;
 
 4703        h[6] = +0.125 * rp * r * sp * s * tp * t;
 
 4704        h[7] = +0.125 * rm * r * sp * s * tp * t;
 
 4705        h[8] = -0.250 * rm * rp * sm * s * tm * t;
 
 4706        h[9] = -0.250 * rp * r * sm * sp * tm * t;
 
 4707        h[10] = -0.250 * rm * rp * sp * s * tm * t;
 
 4708        h[11] = -0.250 * rm * r * sm * sp * tm * t;
 
 4709        h[12] = -0.250 * rm * rp * sm * s * tp * t;
 
 4710        h[13] = -0.250 * rp * r * sm * sp * tp * t;
 
 4711        h[14] = -0.250 * rm * rp * sp * s * tp * t;
 
 4712        h[15] = -0.250 * rm * r * sm * sp * tp * t;
 
 4713        h[16] = -0.250 * rm * r * sm * s * tm * tp;
 
 4714        h[17] = -0.250 * rp * r * sm * s * tm * tp;
 
 4715        h[18] = -0.250 * rp * r * sp * s * tm * tp;
 
 4716        h[19] = -0.250 * rm * r * sp * s * tm * tp;
 
 4717        h[20] = +0.500 * rm * r * sm * sp * tm * tp;
 
 4718        h[21] = +0.500 * rp * r * sm * sp * tm * tp;
 
 4719        h[22] = +0.500 * rm * rp * sm * s * tm * tp;
 
 4720        h[23] = +0.500 * rm * rp * sp * s * tm * tp;
 
 4721        h[24] = +0.500 * rm * rp * sm * sp * tm * t;
 
 4722        h[25] = +0.500 * rm * rp * sm * sp * tp * t;
 
 4723        h[26] = -1.00 * rm * rp * sm * sp * tm * tp;
 
 4726    static void eval_h_derived(
const double internal_coor[3], 
double d[27][3]) {
 
 4727        const double r = internal_coor[0];
 
 4728        const double s = internal_coor[1];
 
 4729        const double t = internal_coor[2];
 
 4731        const double rm = r - 1;
 
 4732        const double sm = s - 1;
 
 4733        const double tm = t - 1;
 
 4735        const double rp = 1. + r;
 
 4736        const double sp = 1. + s;
 
 4737        const double tp = 1. + t;
 
 4739        const double rm2 = 2.0 * r - 1;
 
 4740        const double rp2 = 2.0 * r + 1;
 
 4741        const double sm2 = 2.0 * s - 1;
 
 4742        const double sp2 = 2.0 * s + 1;
 
 4743        const double tm2 = 2.0 * t - 1;
 
 4744        const double tp2 = 2.0 * t + 1;
 
 4747        d[0][0] = +0.125 * rm2 * sm * s * tm * t;
 
 4748        d[1][0] = +0.125 * rp2 * sm * s * tm * t;
 
 4749        d[2][0] = +0.125 * rp2 * s * sp * tm * t;
 
 4750        d[3][0] = +0.125 * rm2 * s * sp * tm * t;
 
 4751        d[4][0] = +0.125 * rm2 * sm * s * t * tp;
 
 4752        d[5][0] = +0.125 * rp2 * sm * s * t * tp;
 
 4753        d[6][0] = +0.125 * rp2 * s * sp * t * tp;
 
 4754        d[7][0] = +0.125 * rm2 * s * sp * t * tp;
 
 4755        d[8][0] = -0.5 * r * sm * s * tm * t;
 
 4756        d[9][0] = -0.25 * rp2 * sm * sp * tm * t;
 
 4757        d[10][0] = -0.5 * r * s * sp * tm * t;
 
 4758        d[11][0] = -0.25 * rm2 * sm * sp * tm * t;
 
 4759        d[12][0] = -0.5 * r * sm * s * t * tp;
 
 4760        d[13][0] = -0.25 * rp2 * sm * sp * t * tp;
 
 4761        d[14][0] = -0.5 * r * s * sp * t * tp;
 
 4762        d[15][0] = -0.25 * rm2 * sm * sp * t * tp;
 
 4763        d[16][0] = -0.25 * rm2 * sm * s * tm * tp;
 
 4764        d[17][0] = -0.25 * rp2 * sm * s * tm * tp;
 
 4765        d[18][0] = -0.25 * rp2 * s * sp * tm * tp;
 
 4766        d[19][0] = -0.25 * rm2 * s * sp * tm * tp;
 
 4767        d[20][0] = +0.5 * rm2 * sm * sp * tm * tp;
 
 4768        d[21][0] = +0.5 * rp2 * sm * sp * tm * tp;
 
 4769        d[22][0] = +1. * r * sm * s * tm * tp;
 
 4770        d[23][0] = +1. * r * s * sp * tm * tp;
 
 4771        d[24][0] = +1. * r * sm * sp * tm * t;
 
 4772        d[25][0] = +1. * r * sm * sp * t * tp;
 
 4773        d[26][0] = -2.0 * r * sm * sp * tm * tp;
 
 4776        d[0][1] = +0.125 * rm * r * sm2 * tm * t;
 
 4777        d[1][1] = +0.125 * r * rp * sm2 * tm * t;
 
 4778        d[2][1] = +0.125 * r * rp * sp2 * tm * t;
 
 4779        d[3][1] = +0.125 * rm * r * sp2 * tm * t;
 
 4780        d[4][1] = +0.125 * rm * r * sm2 * t * tp;
 
 4781        d[5][1] = +0.125 * r * rp * sm2 * t * tp;
 
 4782        d[6][1] = +0.125 * r * rp * sp2 * t * tp;
 
 4783        d[7][1] = +0.125 * rm * r * sp2 * t * tp;
 
 4784        d[8][1] = -0.25 * rm * rp * sm2 * tm * t;
 
 4785        d[9][1] = -0.5 * r * rp * s * tm * t;
 
 4786        d[10][1] = -0.25 * rm * rp * sp2 * tm * t;
 
 4787        d[11][1] = -0.5 * rm * r * s * tm * t;
 
 4788        d[12][1] = -0.25 * rm * rp * sm2 * t * tp;
 
 4789        d[13][1] = -0.5 * r * rp * s * t * tp;
 
 4790        d[14][1] = -0.25 * rm * rp * sp2 * t * tp;
 
 4791        d[15][1] = -0.5 * rm * r * s * t * tp;
 
 4792        d[16][1] = -0.25 * rm * r * sm2 * tm * tp;
 
 4793        d[17][1] = -0.25 * r * rp * sm2 * tm * tp;
 
 4794        d[18][1] = -0.25 * r * rp * sp2 * tm * tp;
 
 4795        d[19][1] = -0.25 * rm * r * sp2 * tm * tp;
 
 4796        d[20][1] = +1. * rm * r * s * tm * tp;
 
 4797        d[21][1] = +1. * r * rp * s * tm * tp;
 
 4798        d[22][1] = +0.5 * rm * rp * sm2 * tm * tp;
 
 4799        d[23][1] = +0.5 * rm * rp * sp2 * tm * tp;
 
 4800        d[24][1] = +1. * rm * rp * s * tm * t;
 
 4801        d[25][1] = +1. * rm * rp * s * t * tp;
 
 4802        d[26][1] = -2.0 * rm * rp * s * tm * tp;
 
 4805        d[0][2] = +0.125 * rm * r * sm * s * tm2;
 
 4806        d[1][2] = +0.125 * r * rp * sm * s * tm2;
 
 4807        d[2][2] = +0.125 * r * rp * s * sp * tm2;
 
 4808        d[3][2] = +0.125 * rm * r * s * sp * tm2;
 
 4809        d[4][2] = +0.125 * rm * r * sm * s * tp2;
 
 4810        d[5][2] = +0.125 * r * rp * sm * s * tp2;
 
 4811        d[6][2] = +0.125 * r * rp * s * sp * tp2;
 
 4812        d[7][2] = +0.125 * rm * r * s * sp * tp2;
 
 4813        d[8][2] = -0.25 * rm * rp * sm * s * tm2;
 
 4814        d[9][2] = -0.25 * r * rp * sm * sp * tm2;
 
 4815        d[10][2] = -0.25 * rm * rp * s * sp * tm2;
 
 4816        d[11][2] = -0.25 * rm * r * sm * sp * tm2;
 
 4817        d[12][2] = -0.25 * rm * rp * sm * s * tp2;
 
 4818        d[13][2] = -0.25 * r * rp * sm * sp * tp2;
 
 4819        d[14][2] = -0.25 * rm * rp * s * sp * tp2;
 
 4820        d[15][2] = -0.25 * rm * r * sm * sp * tp2;
 
 4821        d[16][2] = -0.5 * rm * r * sm * s * t;
 
 4822        d[17][2] = -0.5 * r * rp * sm * s * t;
 
 4823        d[18][2] = -0.5 * r * rp * s * sp * t;
 
 4824        d[19][2] = -0.5 * rm * r * s * sp * t;
 
 4825        d[20][2] = +1. * rm * r * sm * sp * t;
 
 4826        d[21][2] = +1. * r * rp * sm * sp * t;
 
 4827        d[22][2] = +1. * rm * rp * sm * s * t;
 
 4828        d[23][2] = +1. * rm * rp * s * sp * t;
 
 4829        d[24][2] = +0.5 * rm * rp * sm * sp * tm2;
 
 4830        d[25][2] = +0.5 * rm * rp * sm * sp * tp2;
 
 4831        d[26][2] = -2.0 * rm * rp * sm * sp * t;
 
 4834    static const int num_nodes = 27;
 
 4835    static const int num_faces = 6;
 
 4836    static const int num_dimensions = 3;
 
 4837    static const int order = 6;
 
 4838    typedef IS_HE ischeme_type;
 
 4840    static ischeme_type create_ischeme() {
 
 4841        ischeme_type ischeme;
 
 4842        ischeme[0].set_order(2);
 
 4843        ischeme[1].set_order(2);
 
 4844        ischeme[2].set_order(2);
 
 4848    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 4849        ischeme_type ischeme;
 
 4850        ischeme[0].set_order(2 * 2);
 
 4851        ischeme[1].set_order(2 * 2);
 
 4852        ischeme[2].set_order(2 * 2);
 
 4853        ischeme.init(property);
 
 4857    static const double r_node[27];
 
 4858    static const double s_node[27];
 
 4859    static const double t_node[27];
 
 4861    static const bool supports_laminates = 
true;
 
 4863    static const char name[5];
 
 4865    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 4866    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 4867    static const int num_edge = 12;
 
 4868    static const int edge_node[12][3];
 
 4869    static const int edge_type_index[12];
 
 4871    typedef Q9_Shape_Evaluator face_shape_type_0;
 
 4872    typedef Q9_Shape_Evaluator face_shape_type_1;
 
 4873    static const int num_face = 6;
 
 4874    static const int face_node[6][9];
 
 4875    static const int face_type_index[6];
 
 4876    static const bool is_t_face[6];
 
 4879typedef Solid_Shape_Evaluator<HE27_Shape_Helper> HE27_Shape_Evaluator;
 
 4881class HE3X3X2_Shape_Helper : 
public HE_Shape_Helper {
 
 4883    static void eval_h(
const double internal_coor[3], 
double h[18]) {
 
 4884        const double r = internal_coor[0];
 
 4885        const double s = internal_coor[1];
 
 4886        const double t = internal_coor[2];
 
 4888        const double rm = r - 1;
 
 4889        const double sm = s - 1;
 
 4890        const double tm = t - 1;
 
 4892        const double rp = r + 1;
 
 4893        const double sp = s + 1;
 
 4894        const double tp = t + 1;
 
 4896        h[0] = -rm * r * sm * s * tm / 8;
 
 4897        h[1] = -r * rp * sm * s * tm / 8;
 
 4898        h[2] = -r * rp * s * sp * tm / 8;
 
 4899        h[3] = -rm * r * s * sp * tm / 8;
 
 4900        h[4] = +rm * r * sm * s * tp / 8;
 
 4901        h[5] = +r * rp * sm * s * tp / 8;
 
 4902        h[6] = +r * rp * s * sp * tp / 8;
 
 4903        h[7] = +rm * r * s * sp * tp / 8;
 
 4904        h[8] = +rm * rp * sm * s * tm / 4;
 
 4905        h[9] = +rm * r * sm * sp * tm / 4;
 
 4906        h[10] = -rm * rp * sm * sp * tm / 2;
 
 4907        h[11] = +r * rp * sm * sp * tm / 4;
 
 4908        h[12] = +rm * rp * s * sp * tm / 4;
 
 4909        h[13] = -rm * rp * sm * s * tp / 4;
 
 4910        h[14] = -rm * r * sm * sp * tp / 4;
 
 4911        h[15] = +rm * rp * sm * sp * tp / 2;
 
 4912        h[16] = -r * rp * sm * sp * tp / 4;
 
 4913        h[17] = -rm * rp * s * sp * tp / 4;
 
 4916    static void eval_h_derived(
const double internal_coor[3], 
double d[18][3]) {
 
 4917        const double r = internal_coor[0];
 
 4918        const double s = internal_coor[1];
 
 4919        const double t = internal_coor[2];
 
 4921        const double rm = r - 1;
 
 4922        const double sm = s - 1;
 
 4923        const double tm = t - 1;
 
 4925        const double rp = 1. + r;
 
 4926        const double sp = 1. + s;
 
 4927        const double tp = 1. + t;
 
 4929        const double r2m = 2 * r - 1;
 
 4930        const double r2p = 2 * r + 1;
 
 4931        const double s2m = 2 * s - 1;
 
 4932        const double s2p = 2 * s + 1;
 
 4934        d[0][0] = -r2m * sm * s * tm / 8;
 
 4935        d[1][0] = -r2p * sm * s * tm / 8;
 
 4936        d[2][0] = -r2p * s * sp * tm / 8;
 
 4937        d[3][0] = -r2m * s * sp * tm / 8;
 
 4938        d[4][0] = +r2m * sm * s * tp / 8;
 
 4939        d[5][0] = +r2p * sm * s * tp / 8;
 
 4940        d[6][0] = +r2p * s * sp * tp / 8;
 
 4941        d[7][0] = +r2m * s * sp * tp / 8;
 
 4942        d[8][0] = +r * sm * s * tm / 2;
 
 4943        d[9][0] = +r2m * sm * sp * tm / 4;
 
 4944        d[10][0] = -r * sm * sp * tm;
 
 4945        d[11][0] = +r2p * sm * sp * tm / 4;
 
 4946        d[12][0] = +r * s * sp * tm / 2;
 
 4947        d[13][0] = -r * sm * s * tp / 2;
 
 4948        d[14][0] = -r2m * sm * sp * tp / 4;
 
 4949        d[15][0] = +r * sm * sp * tp;
 
 4950        d[16][0] = -r2p * sm * sp * tp / 4;
 
 4951        d[17][0] = -r * s * sp * tp / 2;
 
 4952        d[0][1] = -rm * r * s2m * tm / 8;
 
 4953        d[1][1] = -r * rp * s2m * tm / 8;
 
 4954        d[2][1] = -r * rp * s2p * tm / 8;
 
 4955        d[3][1] = -rm * r * s2p * tm / 8;
 
 4956        d[4][1] = +rm * r * s2m * tp / 8;
 
 4957        d[5][1] = +r * rp * s2m * tp / 8;
 
 4958        d[6][1] = +r * rp * s2p * tp / 8;
 
 4959        d[7][1] = +rm * r * s2p * tp / 8;
 
 4960        d[8][1] = +rm * rp * s2m * tm / 4;
 
 4961        d[9][1] = +rm * r * s * tm / 2;
 
 4962        d[10][1] = -rm * rp * s * tm;
 
 4963        d[11][1] = +r * rp * s * tm / 2;
 
 4964        d[12][1] = +rm * rp * s2p * tm / 4;
 
 4965        d[13][1] = -rm * rp * s2m * tp / 4;
 
 4966        d[14][1] = -rm * r * s * tp / 2;
 
 4967        d[15][1] = +rm * rp * s * tp;
 
 4968        d[16][1] = -r * rp * s * tp / 2;
 
 4969        d[17][1] = -rm * rp * s2p * tp / 4;
 
 4970        d[0][2] = -rm * r * sm * s / 8;
 
 4971        d[1][2] = -r * rp * sm * s / 8;
 
 4972        d[2][2] = -r * rp * s * sp / 8;
 
 4973        d[3][2] = -rm * r * s * sp / 8;
 
 4974        d[4][2] = +rm * r * sm * s / 8;
 
 4975        d[5][2] = +r * rp * sm * s / 8;
 
 4976        d[6][2] = +r * rp * s * sp / 8;
 
 4977        d[7][2] = +rm * r * s * sp / 8;
 
 4978        d[8][2] = +rm * rp * sm * s / 4;
 
 4979        d[9][2] = +rm * r * sm * sp / 4;
 
 4980        d[10][2] = -rm * rp * sm * sp / 2;
 
 4981        d[11][2] = +r * rp * sm * sp / 4;
 
 4982        d[12][2] = +rm * rp * s * sp / 4;
 
 4983        d[13][2] = -rm * rp * sm * s / 4;
 
 4984        d[14][2] = -rm * r * sm * sp / 4;
 
 4985        d[15][2] = +rm * rp * sm * sp / 2;
 
 4986        d[16][2] = -r * rp * sm * sp / 4;
 
 4987        d[17][2] = -rm * rp * s * sp / 4;
 
 4990    static const int num_nodes = 18;
 
 4991    static const int num_faces = 6;
 
 4992    static const int num_dimensions = 3;
 
 4993    static const int order = 5;
 
 4994    typedef IS_HE ischeme_type;
 
 4996    static ischeme_type create_ischeme() {
 
 4997        ischeme_type ischeme;
 
 4998        ischeme[0].set_order(2);
 
 4999        ischeme[1].set_order(2);
 
 5000        ischeme[2].set_order(1);
 
 5004    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 5005        ischeme_type ischeme;
 
 5006        ischeme[0].set_order(2 * 2);
 
 5007        ischeme[1].set_order(2 * 2);
 
 5008        ischeme[2].set_order(2 * 1);
 
 5009        ischeme.init(property);
 
 5013    static const double r_node[18];
 
 5014    static const double s_node[18];
 
 5015    static const double t_node[18];
 
 5017    static const bool supports_laminates = 
true;
 
 5019    static const char name[8];
 
 5021    typedef L3_Shape_Evaluator edge_shape_type_0;
 
 5022    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 5023    static const int num_edge = 12;
 
 5024    static const int edge_node[12][3];
 
 5025    static const int edge_type_index[12];
 
 5027    typedef Q3X2_Shape_Evaluator face_shape_type_0;
 
 5028    typedef Q9_Shape_Evaluator face_shape_type_1;
 
 5029    static const int num_face = 6;
 
 5030    static const int face_node[6][9];
 
 5031    static const int face_type_index[6];
 
 5032    static const bool is_t_face[6];
 
 5035typedef Solid_Shape_Evaluator<HE3X3X2_Shape_Helper> HE3X3X2_Shape_Evaluator;
 
 5037class HE32_Shape_Helper : 
public HE_Shape_Helper {
 
 5039    static void eval_h(
const double internal_coor[3], 
double h[32]) {
 
 5040        const double r = internal_coor[0];
 
 5041        const double s = internal_coor[1];
 
 5042        const double t = internal_coor[2];
 
 5044        const double rm = r - 1;
 
 5045        const double rp = r + 1;
 
 5046        const double sm = s - 1;
 
 5047        const double sp = s + 1;
 
 5048        const double tm = t - 1;
 
 5049        const double tp = t + 1;
 
 5051        const double r3m = 3 * r - 1;
 
 5052        const double r3p = 3 * r + 1;
 
 5053        const double s3m = 3 * s - 1;
 
 5054        const double s3p = 3 * s + 1;
 
 5055        const double t3m = 3 * t - 1;
 
 5056        const double t3p = 3 * t + 1;
 
 5058        const double rr = r * r;
 
 5059        const double ss = s * s;
 
 5060        const double tt = t * t;
 
 5062        const double fa = 0.015625;  
 
 5064        h[0] = -rm * sm * tm * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5065        h[1] = +rp * sm * tm * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5066        h[2] = -rp * sp * tm * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5067        h[3] = +rm * sp * tm * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5068        h[4] = +rm * sm * tp * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5069        h[5] = -rp * sm * tp * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5070        h[6] = +rp * sp * tp * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5071        h[7] = -rm * sp * tp * (9 * tt + 9 * ss + 9 * rr - 19) * fa;
 
 5072        h[8] = +9 * rm * rp * r3m * sm * tm * fa;
 
 5073        h[9] = -9 * rm * rp * r3p * sm * tm * fa;
 
 5074        h[10] = +9 * rm * sm * sp * s3m * tm * fa;
 
 5075        h[11] = -9 * rp * sm * sp * s3m * tm * fa;
 
 5076        h[12] = -9 * rm * sm * sp * s3p * tm * fa;
 
 5077        h[13] = +9 * rp * sm * sp * s3p * tm * fa;
 
 5078        h[14] = -9 * rm * rp * r3m * sp * tm * fa;
 
 5079        h[15] = +9 * rm * rp * r3p * sp * tm * fa;
 
 5080        h[16] = +9 * rm * sm * tm * tp * t3m * fa;
 
 5081        h[17] = -9 * rp * sm * tm * tp * t3m * fa;
 
 5082        h[18] = -9 * rm * sp * tm * tp * t3m * fa;
 
 5083        h[19] = +9 * rp * sp * tm * tp * t3m * fa;
 
 5084        h[20] = -9 * rm * sm * tm * tp * t3p * fa;
 
 5085        h[21] = +9 * rp * sm * tm * tp * t3p * fa;
 
 5086        h[22] = +9 * rm * sp * tm * tp * t3p * fa;
 
 5087        h[23] = -9 * rp * sp * tm * tp * t3p * fa;
 
 5088        h[24] = -9 * rm * rp * r3m * sm * tp * fa;
 
 5089        h[25] = +9 * rm * rp * r3p * sm * tp * fa;
 
 5090        h[26] = -9 * rm * sm * sp * s3m * tp * fa;
 
 5091        h[27] = +9 * rp * sm * sp * s3m * tp * fa;
 
 5092        h[28] = +9 * rm * sm * sp * s3p * tp * fa;
 
 5093        h[29] = -9 * rp * sm * sp * s3p * tp * fa;
 
 5094        h[30] = +9 * rm * rp * r3m * sp * tp * fa;
 
 5095        h[31] = -9 * rm * rp * r3p * sp * tp * fa;
 
 5098    static void eval_h_derived(
const double internal_coor[3], 
double d[32][3]) {
 
 5099        const double r = internal_coor[0];
 
 5100        const double s = internal_coor[1];
 
 5101        const double t = internal_coor[2];
 
 5103        const double rm = r - 1;
 
 5104        const double rp = r + 1;
 
 5105        const double sm = s - 1;
 
 5106        const double sp = s + 1;
 
 5107        const double tm = t - 1;
 
 5108        const double tp = t + 1;
 
 5110        const double r3m = 3 * r - 1;
 
 5111        const double r3p = 3 * r + 1;
 
 5112        const double s3m = 3 * s - 1;
 
 5113        const double s3p = 3 * s + 1;
 
 5114        const double t3m = 3 * t - 1;
 
 5115        const double t3p = 3 * t + 1;
 
 5117        const double rr = r * r;
 
 5118        const double ss = s * s;
 
 5119        const double tt = t * t;
 
 5121        const double fa = 0.015625;  
 
 5123        d[0][0] = -sm * tm * (9 * tt + 9 * ss + 27 * rr - 18 * r - 19) * fa;
 
 5124        d[1][0] = +sm * tm * (9 * tt + 9 * ss + 27 * rr + 18 * r - 19) * fa;
 
 5125        d[2][0] = -sp * tm * (9 * tt + 9 * ss + 27 * rr + 18 * r - 19) * fa;
 
 5126        d[3][0] = +sp * tm * (9 * tt + 9 * ss + 27 * rr - 18 * r - 19) * fa;
 
 5127        d[4][0] = +sm * tp * (9 * tt + 9 * ss + 27 * rr - 18 * r - 19) * fa;
 
 5128        d[5][0] = -sm * tp * (9 * tt + 9 * ss + 27 * rr + 18 * r - 19) * fa;
 
 5129        d[6][0] = +sp * tp * (9 * tt + 9 * ss + 27 * rr + 18 * r - 19) * fa;
 
 5130        d[7][0] = -sp * tp * (9 * tt + 9 * ss + 27 * rr - 18 * r - 19) * fa;
 
 5131        d[8][0] = +9 * (9 * rr - 2 * r - 3) * sm * tm * fa;
 
 5132        d[9][0] = -9 * (9 * rr + 2 * r - 3) * sm * tm * fa;
 
 5133        d[10][0] = +9 * sm * sp * s3m * tm * fa;
 
 5134        d[11][0] = -9 * sm * sp * s3m * tm * fa;
 
 5135        d[12][0] = -9 * sm * sp * s3p * tm * fa;
 
 5136        d[13][0] = +9 * sm * sp * s3p * tm * fa;
 
 5137        d[14][0] = -9 * (9 * rr - 2 * r - 3) * sp * tm * fa;
 
 5138        d[15][0] = +9 * (9 * rr + 2 * r - 3) * sp * tm * fa;
 
 5139        d[16][0] = +9 * sm * tm * tp * t3m * fa;
 
 5140        d[17][0] = -9 * sm * tm * tp * t3m * fa;
 
 5141        d[18][0] = -9 * sp * tm * tp * t3m * fa;
 
 5142        d[19][0] = +9 * sp * tm * tp * t3m * fa;
 
 5143        d[20][0] = -9 * sm * tm * tp * t3p * fa;
 
 5144        d[21][0] = +9 * sm * tm * tp * t3p * fa;
 
 5145        d[22][0] = +9 * sp * tm * tp * t3p * fa;
 
 5146        d[23][0] = -9 * sp * tm * tp * t3p * fa;
 
 5147        d[24][0] = -9 * (9 * rr - 2 * r - 3) * sm * tp * fa;
 
 5148        d[25][0] = +9 * (9 * rr + 2 * r - 3) * sm * tp * fa;
 
 5149        d[26][0] = -9 * sm * sp * s3m * tp * fa;
 
 5150        d[27][0] = +9 * sm * sp * s3m * tp * fa;
 
 5151        d[28][0] = +9 * sm * sp * s3p * tp * fa;
 
 5152        d[29][0] = -9 * sm * sp * s3p * tp * fa;
 
 5153        d[30][0] = +9 * (9 * rr - 2 * r - 3) * sp * tp * fa;
 
 5154        d[31][0] = -9 * (9 * rr + 2 * r - 3) * sp * tp * fa;
 
 5155        d[0][1] = -rm * tm * (9 * tt + 27 * ss - 18 * s + 9 * rr - 19) * fa;
 
 5156        d[1][1] = +rp * tm * (9 * tt + 27 * ss - 18 * s + 9 * rr - 19) * fa;
 
 5157        d[2][1] = -rp * tm * (9 * tt + 27 * ss + 18 * s + 9 * rr - 19) * fa;
 
 5158        d[3][1] = +rm * tm * (9 * tt + 27 * ss + 18 * s + 9 * rr - 19) * fa;
 
 5159        d[4][1] = +rm * tp * (9 * tt + 27 * ss - 18 * s + 9 * rr - 19) * fa;
 
 5160        d[5][1] = -rp * tp * (9 * tt + 27 * ss - 18 * s + 9 * rr - 19) * fa;
 
 5161        d[6][1] = +rp * tp * (9 * tt + 27 * ss + 18 * s + 9 * rr - 19) * fa;
 
 5162        d[7][1] = -rm * tp * (9 * tt + 27 * ss + 18 * s + 9 * rr - 19) * fa;
 
 5163        d[8][1] = +9 * rm * rp * r3m * tm * fa;
 
 5164        d[9][1] = -9 * rm * rp * r3p * tm * fa;
 
 5165        d[10][1] = +9 * rm * (9 * ss - 2 * s - 3) * tm * fa;
 
 5166        d[11][1] = -9 * rp * (9 * ss - 2 * s - 3) * tm * fa;
 
 5167        d[12][1] = -9 * rm * (9 * ss + 2 * s - 3) * tm * fa;
 
 5168        d[13][1] = +9 * rp * (9 * ss + 2 * s - 3) * tm * fa;
 
 5169        d[14][1] = -9 * rm * rp * r3m * tm * fa;
 
 5170        d[15][1] = +9 * rm * rp * r3p * tm * fa;
 
 5171        d[16][1] = +9 * rm * tm * tp * t3m * fa;
 
 5172        d[17][1] = -9 * rp * tm * tp * t3m * fa;
 
 5173        d[18][1] = -9 * rm * tm * tp * t3m * fa;
 
 5174        d[19][1] = +9 * rp * tm * tp * t3m * fa;
 
 5175        d[20][1] = -9 * rm * tm * tp * t3p * fa;
 
 5176        d[21][1] = +9 * rp * tm * tp * t3p * fa;
 
 5177        d[22][1] = +9 * rm * tm * tp * t3p * fa;
 
 5178        d[23][1] = -9 * rp * tm * tp * t3p * fa;
 
 5179        d[24][1] = -9 * rm * rp * r3m * tp * fa;
 
 5180        d[25][1] = +9 * rm * rp * r3p * tp * fa;
 
 5181        d[26][1] = -9 * rm * (9 * ss - 2 * s - 3) * tp * fa;
 
 5182        d[27][1] = +9 * rp * (9 * ss - 2 * s - 3) * tp * fa;
 
 5183        d[28][1] = +9 * rm * (9 * ss + 2 * s - 3) * tp * fa;
 
 5184        d[29][1] = -9 * rp * (9 * ss + 2 * s - 3) * tp * fa;
 
 5185        d[30][1] = +9 * rm * rp * r3m * tp * fa;
 
 5186        d[31][1] = -9 * rm * rp * r3p * tp * fa;
 
 5187        d[0][2] = -rm * sm * (27 * tt - 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5188        d[1][2] = +rp * sm * (27 * tt - 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5189        d[2][2] = -rp * sp * (27 * tt - 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5190        d[3][2] = +rm * sp * (27 * tt - 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5191        d[4][2] = +rm * sm * (27 * tt + 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5192        d[5][2] = -rp * sm * (27 * tt + 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5193        d[6][2] = +rp * sp * (27 * tt + 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5194        d[7][2] = -rm * sp * (27 * tt + 18 * t + 9 * ss + 9 * rr - 19) * fa;
 
 5195        d[8][2] = +9 * rm * rp * r3m * sm * fa;
 
 5196        d[9][2] = -9 * rm * rp * r3p * sm * fa;
 
 5197        d[10][2] = +9 * rm * sm * sp * s3m * fa;
 
 5198        d[11][2] = -9 * rp * sm * sp * s3m * fa;
 
 5199        d[12][2] = -9 * rm * sm * sp * s3p * fa;
 
 5200        d[13][2] = +9 * rp * sm * sp * s3p * fa;
 
 5201        d[14][2] = -9 * rm * rp * r3m * sp * fa;
 
 5202        d[15][2] = +9 * rm * rp * r3p * sp * fa;
 
 5203        d[16][2] = +9 * rm * sm * (9 * tt - 2 * t - 3) * fa;
 
 5204        d[17][2] = -9 * rp * sm * (9 * tt - 2 * t - 3) * fa;
 
 5205        d[18][2] = -9 * rm * sp * (9 * tt - 2 * t - 3) * fa;
 
 5206        d[19][2] = +9 * rp * sp * (9 * tt - 2 * t - 3) * fa;
 
 5207        d[20][2] = -9 * rm * sm * (9 * tt + 2 * t - 3) * fa;
 
 5208        d[21][2] = +9 * rp * sm * (9 * tt + 2 * t - 3) * fa;
 
 5209        d[22][2] = +9 * rm * sp * (9 * tt + 2 * t - 3) * fa;
 
 5210        d[23][2] = -9 * rp * sp * (9 * tt + 2 * t - 3) * fa;
 
 5211        d[24][2] = -9 * rm * rp * r3m * sm * fa;
 
 5212        d[25][2] = +9 * rm * rp * r3p * sm * fa;
 
 5213        d[26][2] = -9 * rm * sm * sp * s3m * fa;
 
 5214        d[27][2] = +9 * rp * sm * sp * s3m * fa;
 
 5215        d[28][2] = +9 * rm * sm * sp * s3p * fa;
 
 5216        d[29][2] = -9 * rp * sm * sp * s3p * fa;
 
 5217        d[30][2] = +9 * rm * rp * r3m * sp * fa;
 
 5218        d[31][2] = -9 * rm * rp * r3p * sp * fa;
 
 5221    static const int num_nodes = 32;
 
 5222    static const int num_faces = 6;
 
 5223    static const int num_dimensions = 3;
 
 5224    static const int order = 9;
 
 5225    typedef IS_HE ischeme_type;
 
 5227    static ischeme_type create_ischeme() {
 
 5228        ischeme_type ischeme;
 
 5229        ischeme[0].set_order(3);
 
 5230        ischeme[1].set_order(3);
 
 5231        ischeme[2].set_order(3);
 
 5235    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 5236        ischeme_type ischeme;
 
 5237        ischeme[0].set_order(2 * 3);
 
 5238        ischeme[1].set_order(2 * 3);
 
 5239        ischeme[2].set_order(2 * 3);
 
 5240        ischeme.init(property);
 
 5244    static const double r_node[32];
 
 5245    static const double s_node[32];
 
 5246    static const double t_node[32];
 
 5248    static const bool supports_laminates = 
true;
 
 5250    static const char name[5];
 
 5252    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 5253    typedef L4_Shape_Evaluator edge_shape_type_1;
 
 5254    static const int num_edge = 12;
 
 5255    static const int edge_node[12][4];
 
 5256    static const int edge_type_index[12];
 
 5258    typedef Q12_Shape_Evaluator face_shape_type_0;
 
 5259    typedef Q12_Shape_Evaluator face_shape_type_1;
 
 5260    static const int num_face = 6;
 
 5261    static const int face_node[6][12];
 
 5262    static const int face_type_index[6];
 
 5263    static const bool is_t_face[6];
 
 5266typedef Solid_Shape_Evaluator<HE32_Shape_Helper> HE32_Shape_Evaluator;
 
 5268class HE64_Shape_Helper : 
public HE_Shape_Helper {
 
 5270    static void eval_h(
const double internal_coor[3], 
double h[64]) {
 
 5271        const double r = internal_coor[0];
 
 5272        const double s = internal_coor[1];
 
 5273        const double t = internal_coor[2];
 
 5275        const double rm = r - 1;
 
 5276        const double rp = r + 1;
 
 5277        const double sm = s - 1;
 
 5278        const double sp = s + 1;
 
 5279        const double tm = t - 1;
 
 5280        const double tp = t + 1;
 
 5282        const double r3m = 3 * r - 1;
 
 5283        const double r3p = 3 * r + 1;
 
 5284        const double s3m = 3 * s - 1;
 
 5285        const double s3p = 3 * s + 1;
 
 5286        const double t3m = 3 * t - 1;
 
 5287        const double t3p = 3 * t + 1;
 
 5289        const double fa = 0.000244140625;  
 
 5291        h[0] = -rm * r3m * r3p * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5292        h[1] = +rp * r3m * r3p * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5293        h[2] = -rp * r3m * r3p * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5294        h[3] = +rm * r3m * r3p * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5295        h[4] = +rm * r3m * r3p * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5296        h[5] = -rp * r3m * r3p * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5297        h[6] = +rp * r3m * r3p * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5298        h[7] = -rm * r3m * r3p * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5299        h[8] = +9 * rm * rp * r3m * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5300        h[9] = -9 * rm * rp * r3p * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5301        h[10] = +9 * rm * r3m * r3p * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5302        h[11] = -81 * rm * rp * r3m * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5303        h[12] = +81 * rm * rp * r3p * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5304        h[13] = -9 * rp * r3m * r3p * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5305        h[14] = -9 * rm * r3m * r3p * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5306        h[15] = +81 * rm * rp * r3m * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5307        h[16] = -81 * rm * rp * r3p * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5308        h[17] = +9 * rp * r3m * r3p * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5309        h[18] = -9 * rm * rp * r3m * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5310        h[19] = +9 * rm * rp * r3p * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5311        h[20] = +9 * rm * r3m * r3p * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5312        h[21] = -81 * rm * rp * r3m * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5313        h[22] = +81 * rm * rp * r3p * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5314        h[23] = -9 * rp * r3m * r3p * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5315        h[24] = -81 * rm * r3m * r3p * sm * sp * s3m * tm * tp * t3m * fa;
 
 5316        h[25] = +729 * rm * rp * r3m * sm * sp * s3m * tm * tp * t3m * fa;
 
 5317        h[26] = -729 * rm * rp * r3p * sm * sp * s3m * tm * tp * t3m * fa;
 
 5318        h[27] = +81 * rp * r3m * r3p * sm * sp * s3m * tm * tp * t3m * fa;
 
 5319        h[28] = +81 * rm * r3m * r3p * sm * sp * s3p * tm * tp * t3m * fa;
 
 5320        h[29] = -729 * rm * rp * r3m * sm * sp * s3p * tm * tp * t3m * fa;
 
 5321        h[30] = +729 * rm * rp * r3p * sm * sp * s3p * tm * tp * t3m * fa;
 
 5322        h[31] = -81 * rp * r3m * r3p * sm * sp * s3p * tm * tp * t3m * fa;
 
 5323        h[32] = -9 * rm * r3m * r3p * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5324        h[33] = +81 * rm * rp * r3m * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5325        h[34] = -81 * rm * rp * r3p * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5326        h[35] = +9 * rp * r3m * r3p * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5327        h[36] = -9 * rm * r3m * r3p * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5328        h[37] = +81 * rm * rp * r3m * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5329        h[38] = -81 * rm * rp * r3p * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5330        h[39] = +9 * rp * r3m * r3p * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5331        h[40] = +81 * rm * r3m * r3p * sm * sp * s3m * tm * tp * t3p * fa;
 
 5332        h[41] = -729 * rm * rp * r3m * sm * sp * s3m * tm * tp * t3p * fa;
 
 5333        h[42] = +729 * rm * rp * r3p * sm * sp * s3m * tm * tp * t3p * fa;
 
 5334        h[43] = -81 * rp * r3m * r3p * sm * sp * s3m * tm * tp * t3p * fa;
 
 5335        h[44] = -81 * rm * r3m * r3p * sm * sp * s3p * tm * tp * t3p * fa;
 
 5336        h[45] = +729 * rm * rp * r3m * sm * sp * s3p * tm * tp * t3p * fa;
 
 5337        h[46] = -729 * rm * rp * r3p * sm * sp * s3p * tm * tp * t3p * fa;
 
 5338        h[47] = +81 * rp * r3m * r3p * sm * sp * s3p * tm * tp * t3p * fa;
 
 5339        h[48] = +9 * rm * r3m * r3p * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5340        h[49] = -81 * rm * rp * r3m * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5341        h[50] = +81 * rm * rp * r3p * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5342        h[51] = -9 * rp * r3m * r3p * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5343        h[52] = -9 * rm * rp * r3m * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5344        h[53] = +9 * rm * rp * r3p * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5345        h[54] = -9 * rm * r3m * r3p * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5346        h[55] = +81 * rm * rp * r3m * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5347        h[56] = -81 * rm * rp * r3p * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5348        h[57] = +9 * rp * r3m * r3p * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5349        h[58] = +9 * rm * r3m * r3p * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5350        h[59] = -81 * rm * rp * r3m * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5351        h[60] = +81 * rm * rp * r3p * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5352        h[61] = -9 * rp * r3m * r3p * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5353        h[62] = +9 * rm * rp * r3m * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5354        h[63] = -9 * rm * rp * r3p * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5357    static void eval_h_derived(
const double internal_coor[3], 
double d[64][3]) {
 
 5358        const double r = internal_coor[0];
 
 5359        const double s = internal_coor[1];
 
 5360        const double t = internal_coor[2];
 
 5362        const double rm = r - 1;
 
 5363        const double rp = r + 1;
 
 5364        const double sm = s - 1;
 
 5365        const double sp = s + 1;
 
 5366        const double tm = t - 1;
 
 5367        const double tp = t + 1;
 
 5369        const double r3m = 3 * r - 1;
 
 5370        const double r3p = 3 * r + 1;
 
 5371        const double s3m = 3 * s - 1;
 
 5372        const double s3p = 3 * s + 1;
 
 5373        const double t3m = 3 * t - 1;
 
 5374        const double t3p = 3 * t + 1;
 
 5376        const double rr = r * r;
 
 5377        const double ss = s * s;
 
 5378        const double tt = t * t;
 
 5380        const double fa = 0.000244140625;  
 
 5382        d[0][0] = -(27 * rr - 18 * r - 1) * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5383        d[1][0] = +(27 * rr + 18 * r - 1) * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5384        d[2][0] = -(27 * rr + 18 * r - 1) * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5385        d[3][0] = +(27 * rr - 18 * r - 1) * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5386        d[4][0] = +(27 * rr - 18 * r - 1) * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5387        d[5][0] = -(27 * rr + 18 * r - 1) * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5388        d[6][0] = +(27 * rr + 18 * r - 1) * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5389        d[7][0] = -(27 * rr - 18 * r - 1) * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5390        d[8][0] = +9 * (9 * rr - 2 * r - 3) * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5391        d[9][0] = -9 * (9 * rr + 2 * r - 3) * sm * s3m * s3p * tm * t3m * t3p * fa;
 
 5392        d[10][0] = +9 * (27 * rr - 18 * r - 1) * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5393        d[11][0] = -81 * (9 * rr - 2 * r - 3) * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5394        d[12][0] = +81 * (9 * rr + 2 * r - 3) * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5395        d[13][0] = -9 * (27 * rr + 18 * r - 1) * sm * sp * s3m * tm * t3m * t3p * fa;
 
 5396        d[14][0] = -9 * (27 * rr - 18 * r - 1) * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5397        d[15][0] = +81 * (9 * rr - 2 * r - 3) * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5398        d[16][0] = -81 * (9 * rr + 2 * r - 3) * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5399        d[17][0] = +9 * (27 * rr + 18 * r - 1) * sm * sp * s3p * tm * t3m * t3p * fa;
 
 5400        d[18][0] = -9 * (9 * rr - 2 * r - 3) * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5401        d[19][0] = +9 * (9 * rr + 2 * r - 3) * sp * s3m * s3p * tm * t3m * t3p * fa;
 
 5402        d[20][0] = +9 * (27 * rr - 18 * r - 1) * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5403        d[21][0] = -81 * (9 * rr - 2 * r - 3) * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5404        d[22][0] = +81 * (9 * rr + 2 * r - 3) * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5405        d[23][0] = -9 * (27 * rr + 18 * r - 1) * sm * s3m * s3p * tm * tp * t3m * fa;
 
 5406        d[24][0] = -81 * (27 * rr - 18 * r - 1) * sm * sp * s3m * tm * tp * t3m * fa;
 
 5407        d[25][0] = +729 * (9 * rr - 2 * r - 3) * sm * sp * s3m * tm * tp * t3m * fa;
 
 5408        d[26][0] = -729 * (9 * rr + 2 * r - 3) * sm * sp * s3m * tm * tp * t3m * fa;
 
 5409        d[27][0] = +81 * (27 * rr + 18 * r - 1) * sm * sp * s3m * tm * tp * t3m * fa;
 
 5410        d[28][0] = +81 * (27 * rr - 18 * r - 1) * sm * sp * s3p * tm * tp * t3m * fa;
 
 5411        d[29][0] = -729 * (9 * rr - 2 * r - 3) * sm * sp * s3p * tm * tp * t3m * fa;
 
 5412        d[30][0] = +729 * (9 * rr + 2 * r - 3) * sm * sp * s3p * tm * tp * t3m * fa;
 
 5413        d[31][0] = -81 * (27 * rr + 18 * r - 1) * sm * sp * s3p * tm * tp * t3m * fa;
 
 5414        d[32][0] = -9 * (27 * rr - 18 * r - 1) * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5415        d[33][0] = +81 * (9 * rr - 2 * r - 3) * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5416        d[34][0] = -81 * (9 * rr + 2 * r - 3) * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5417        d[35][0] = +9 * (27 * rr + 18 * r - 1) * sp * s3m * s3p * tm * tp * t3m * fa;
 
 5418        d[36][0] = -9 * (27 * rr - 18 * r - 1) * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5419        d[37][0] = +81 * (9 * rr - 2 * r - 3) * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5420        d[38][0] = -81 * (9 * rr + 2 * r - 3) * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5421        d[39][0] = +9 * (27 * rr + 18 * r - 1) * sm * s3m * s3p * tm * tp * t3p * fa;
 
 5422        d[40][0] = +81 * (27 * rr - 18 * r - 1) * sm * sp * s3m * tm * tp * t3p * fa;
 
 5423        d[41][0] = -729 * (9 * rr - 2 * r - 3) * sm * sp * s3m * tm * tp * t3p * fa;
 
 5424        d[42][0] = +729 * (9 * rr + 2 * r - 3) * sm * sp * s3m * tm * tp * t3p * fa;
 
 5425        d[43][0] = -81 * (27 * rr + 18 * r - 1) * sm * sp * s3m * tm * tp * t3p * fa;
 
 5426        d[44][0] = -81 * (27 * rr - 18 * r - 1) * sm * sp * s3p * tm * tp * t3p * fa;
 
 5427        d[45][0] = +729 * (9 * rr - 2 * r - 3) * sm * sp * s3p * tm * tp * t3p * fa;
 
 5428        d[46][0] = -729 * (9 * rr + 2 * r - 3) * sm * sp * s3p * tm * tp * t3p * fa;
 
 5429        d[47][0] = +81 * (27 * rr + 18 * r - 1) * sm * sp * s3p * tm * tp * t3p * fa;
 
 5430        d[48][0] = +9 * (27 * rr - 18 * r - 1) * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5431        d[49][0] = -81 * (9 * rr - 2 * r - 3) * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5432        d[50][0] = +81 * (9 * rr + 2 * r - 3) * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5433        d[51][0] = -9 * (27 * rr + 18 * r - 1) * sp * s3m * s3p * tm * tp * t3p * fa;
 
 5434        d[52][0] = -9 * (9 * rr - 2 * r - 3) * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5435        d[53][0] = +9 * (9 * rr + 2 * r - 3) * sm * s3m * s3p * tp * t3m * t3p * fa;
 
 5436        d[54][0] = -9 * (27 * rr - 18 * r - 1) * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5437        d[55][0] = +81 * (9 * rr - 2 * r - 3) * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5438        d[56][0] = -81 * (9 * rr + 2 * r - 3) * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5439        d[57][0] = +9 * (27 * rr + 18 * r - 1) * sm * sp * s3m * tp * t3m * t3p * fa;
 
 5440        d[58][0] = +9 * (27 * rr - 18 * r - 1) * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5441        d[59][0] = -81 * (9 * rr - 2 * r - 3) * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5442        d[60][0] = +81 * (9 * rr + 2 * r - 3) * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5443        d[61][0] = -9 * (27 * rr + 18 * r - 1) * sm * sp * s3p * tp * t3m * t3p * fa;
 
 5444        d[62][0] = +9 * (9 * rr - 2 * r - 3) * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5445        d[63][0] = -9 * (9 * rr + 2 * r - 3) * sp * s3m * s3p * tp * t3m * t3p * fa;
 
 5446        d[0][1] = -rm * r3m * r3p * (27 * ss - 18 * s - 1) * tm * t3m * t3p * fa;
 
 5447        d[1][1] = +rp * r3m * r3p * (27 * ss - 18 * s - 1) * tm * t3m * t3p * fa;
 
 5448        d[2][1] = -rp * r3m * r3p * (27 * ss + 18 * s - 1) * tm * t3m * t3p * fa;
 
 5449        d[3][1] = +rm * r3m * r3p * (27 * ss + 18 * s - 1) * tm * t3m * t3p * fa;
 
 5450        d[4][1] = +rm * r3m * r3p * (27 * ss - 18 * s - 1) * tp * t3m * t3p * fa;
 
 5451        d[5][1] = -rp * r3m * r3p * (27 * ss - 18 * s - 1) * tp * t3m * t3p * fa;
 
 5452        d[6][1] = +rp * r3m * r3p * (27 * ss + 18 * s - 1) * tp * t3m * t3p * fa;
 
 5453        d[7][1] = -rm * r3m * r3p * (27 * ss + 18 * s - 1) * tp * t3m * t3p * fa;
 
 5454        d[8][1] = +9 * rm * rp * r3m * (27 * ss - 18 * s - 1) * tm * t3m * t3p * fa;
 
 5455        d[9][1] = -9 * rm * rp * r3p * (27 * ss - 18 * s - 1) * tm * t3m * t3p * fa;
 
 5456        d[10][1] = +9 * rm * r3m * r3p * (9 * ss - 2 * s - 3) * tm * t3m * t3p * fa;
 
 5457        d[11][1] = -81 * rm * rp * r3m * (9 * ss - 2 * s - 3) * tm * t3m * t3p * fa;
 
 5458        d[12][1] = +81 * rm * rp * r3p * (9 * ss - 2 * s - 3) * tm * t3m * t3p * fa;
 
 5459        d[13][1] = -9 * rp * r3m * r3p * (9 * ss - 2 * s - 3) * tm * t3m * t3p * fa;
 
 5460        d[14][1] = -9 * rm * r3m * r3p * (9 * ss + 2 * s - 3) * tm * t3m * t3p * fa;
 
 5461        d[15][1] = +81 * rm * rp * r3m * (9 * ss + 2 * s - 3) * tm * t3m * t3p * fa;
 
 5462        d[16][1] = -81 * rm * rp * r3p * (9 * ss + 2 * s - 3) * tm * t3m * t3p * fa;
 
 5463        d[17][1] = +9 * rp * r3m * r3p * (9 * ss + 2 * s - 3) * tm * t3m * t3p * fa;
 
 5464        d[18][1] = -9 * rm * rp * r3m * (27 * ss + 18 * s - 1) * tm * t3m * t3p * fa;
 
 5465        d[19][1] = +9 * rm * rp * r3p * (27 * ss + 18 * s - 1) * tm * t3m * t3p * fa;
 
 5466        d[20][1] = +9 * rm * r3m * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3m * fa;
 
 5467        d[21][1] = -81 * rm * rp * r3m * (27 * ss - 18 * s - 1) * tm * tp * t3m * fa;
 
 5468        d[22][1] = +81 * rm * rp * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3m * fa;
 
 5469        d[23][1] = -9 * rp * r3m * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3m * fa;
 
 5470        d[24][1] = -81 * rm * r3m * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3m * fa;
 
 5471        d[25][1] = +729 * rm * rp * r3m * (9 * ss - 2 * s - 3) * tm * tp * t3m * fa;
 
 5472        d[26][1] = -729 * rm * rp * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3m * fa;
 
 5473        d[27][1] = +81 * rp * r3m * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3m * fa;
 
 5474        d[28][1] = +81 * rm * r3m * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3m * fa;
 
 5475        d[29][1] = -729 * rm * rp * r3m * (9 * ss + 2 * s - 3) * tm * tp * t3m * fa;
 
 5476        d[30][1] = +729 * rm * rp * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3m * fa;
 
 5477        d[31][1] = -81 * rp * r3m * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3m * fa;
 
 5478        d[32][1] = -9 * rm * r3m * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3m * fa;
 
 5479        d[33][1] = +81 * rm * rp * r3m * (27 * ss + 18 * s - 1) * tm * tp * t3m * fa;
 
 5480        d[34][1] = -81 * rm * rp * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3m * fa;
 
 5481        d[35][1] = +9 * rp * r3m * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3m * fa;
 
 5482        d[36][1] = -9 * rm * r3m * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3p * fa;
 
 5483        d[37][1] = +81 * rm * rp * r3m * (27 * ss - 18 * s - 1) * tm * tp * t3p * fa;
 
 5484        d[38][1] = -81 * rm * rp * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3p * fa;
 
 5485        d[39][1] = +9 * rp * r3m * r3p * (27 * ss - 18 * s - 1) * tm * tp * t3p * fa;
 
 5486        d[40][1] = +81 * rm * r3m * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3p * fa;
 
 5487        d[41][1] = -729 * rm * rp * r3m * (9 * ss - 2 * s - 3) * tm * tp * t3p * fa;
 
 5488        d[42][1] = +729 * rm * rp * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3p * fa;
 
 5489        d[43][1] = -81 * rp * r3m * r3p * (9 * ss - 2 * s - 3) * tm * tp * t3p * fa;
 
 5490        d[44][1] = -81 * rm * r3m * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3p * fa;
 
 5491        d[45][1] = +729 * rm * rp * r3m * (9 * ss + 2 * s - 3) * tm * tp * t3p * fa;
 
 5492        d[46][1] = -729 * rm * rp * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3p * fa;
 
 5493        d[47][1] = +81 * rp * r3m * r3p * (9 * ss + 2 * s - 3) * tm * tp * t3p * fa;
 
 5494        d[48][1] = +9 * rm * r3m * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3p * fa;
 
 5495        d[49][1] = -81 * rm * rp * r3m * (27 * ss + 18 * s - 1) * tm * tp * t3p * fa;
 
 5496        d[50][1] = +81 * rm * rp * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3p * fa;
 
 5497        d[51][1] = -9 * rp * r3m * r3p * (27 * ss + 18 * s - 1) * tm * tp * t3p * fa;
 
 5498        d[52][1] = -9 * rm * rp * r3m * (27 * ss - 18 * s - 1) * tp * t3m * t3p * fa;
 
 5499        d[53][1] = +9 * rm * rp * r3p * (27 * ss - 18 * s - 1) * tp * t3m * t3p * fa;
 
 5500        d[54][1] = -9 * rm * r3m * r3p * (9 * ss - 2 * s - 3) * tp * t3m * t3p * fa;
 
 5501        d[55][1] = +81 * rm * rp * r3m * (9 * ss - 2 * s - 3) * tp * t3m * t3p * fa;
 
 5502        d[56][1] = -81 * rm * rp * r3p * (9 * ss - 2 * s - 3) * tp * t3m * t3p * fa;
 
 5503        d[57][1] = +9 * rp * r3m * r3p * (9 * ss - 2 * s - 3) * tp * t3m * t3p * fa;
 
 5504        d[58][1] = +9 * rm * r3m * r3p * (9 * ss + 2 * s - 3) * tp * t3m * t3p * fa;
 
 5505        d[59][1] = -81 * rm * rp * r3m * (9 * ss + 2 * s - 3) * tp * t3m * t3p * fa;
 
 5506        d[60][1] = +81 * rm * rp * r3p * (9 * ss + 2 * s - 3) * tp * t3m * t3p * fa;
 
 5507        d[61][1] = -9 * rp * r3m * r3p * (9 * ss + 2 * s - 3) * tp * t3m * t3p * fa;
 
 5508        d[62][1] = +9 * rm * rp * r3m * (27 * ss + 18 * s - 1) * tp * t3m * t3p * fa;
 
 5509        d[63][1] = -9 * rm * rp * r3p * (27 * ss + 18 * s - 1) * tp * t3m * t3p * fa;
 
 5510        d[0][2] = -rm * r3m * r3p * sm * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5511        d[1][2] = +rp * r3m * r3p * sm * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5512        d[2][2] = -rp * r3m * r3p * sp * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5513        d[3][2] = +rm * r3m * r3p * sp * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5514        d[4][2] = +rm * r3m * r3p * sm * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5515        d[5][2] = -rp * r3m * r3p * sm * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5516        d[6][2] = +rp * r3m * r3p * sp * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5517        d[7][2] = -rm * r3m * r3p * sp * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5518        d[8][2] = +9 * rm * rp * r3m * sm * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5519        d[9][2] = -9 * rm * rp * r3p * sm * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5520        d[10][2] = +9 * rm * r3m * r3p * sm * sp * s3m * (27 * tt - 18 * t - 1) * fa;
 
 5521        d[11][2] = -81 * rm * rp * r3m * sm * sp * s3m * (27 * tt - 18 * t - 1) * fa;
 
 5522        d[12][2] = +81 * rm * rp * r3p * sm * sp * s3m * (27 * tt - 18 * t - 1) * fa;
 
 5523        d[13][2] = -9 * rp * r3m * r3p * sm * sp * s3m * (27 * tt - 18 * t - 1) * fa;
 
 5524        d[14][2] = -9 * rm * r3m * r3p * sm * sp * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5525        d[15][2] = +81 * rm * rp * r3m * sm * sp * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5526        d[16][2] = -81 * rm * rp * r3p * sm * sp * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5527        d[17][2] = +9 * rp * r3m * r3p * sm * sp * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5528        d[18][2] = -9 * rm * rp * r3m * sp * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5529        d[19][2] = +9 * rm * rp * r3p * sp * s3m * s3p * (27 * tt - 18 * t - 1) * fa;
 
 5530        d[20][2] = +9 * rm * r3m * r3p * sm * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5531        d[21][2] = -81 * rm * rp * r3m * sm * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5532        d[22][2] = +81 * rm * rp * r3p * sm * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5533        d[23][2] = -9 * rp * r3m * r3p * sm * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5534        d[24][2] = -81 * rm * r3m * r3p * sm * sp * s3m * (9 * tt - 2 * t - 3) * fa;
 
 5535        d[25][2] = +729 * rm * rp * r3m * sm * sp * s3m * (9 * tt - 2 * t - 3) * fa;
 
 5536        d[26][2] = -729 * rm * rp * r3p * sm * sp * s3m * (9 * tt - 2 * t - 3) * fa;
 
 5537        d[27][2] = +81 * rp * r3m * r3p * sm * sp * s3m * (9 * tt - 2 * t - 3) * fa;
 
 5538        d[28][2] = +81 * rm * r3m * r3p * sm * sp * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5539        d[29][2] = -729 * rm * rp * r3m * sm * sp * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5540        d[30][2] = +729 * rm * rp * r3p * sm * sp * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5541        d[31][2] = -81 * rp * r3m * r3p * sm * sp * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5542        d[32][2] = -9 * rm * r3m * r3p * sp * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5543        d[33][2] = +81 * rm * rp * r3m * sp * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5544        d[34][2] = -81 * rm * rp * r3p * sp * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5545        d[35][2] = +9 * rp * r3m * r3p * sp * s3m * s3p * (9 * tt - 2 * t - 3) * fa;
 
 5546        d[36][2] = -9 * rm * r3m * r3p * sm * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5547        d[37][2] = +81 * rm * rp * r3m * sm * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5548        d[38][2] = -81 * rm * rp * r3p * sm * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5549        d[39][2] = +9 * rp * r3m * r3p * sm * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5550        d[40][2] = +81 * rm * r3m * r3p * sm * sp * s3m * (9 * tt + 2 * t - 3) * fa;
 
 5551        d[41][2] = -729 * rm * rp * r3m * sm * sp * s3m * (9 * tt + 2 * t - 3) * fa;
 
 5552        d[42][2] = +729 * rm * rp * r3p * sm * sp * s3m * (9 * tt + 2 * t - 3) * fa;
 
 5553        d[43][2] = -81 * rp * r3m * r3p * sm * sp * s3m * (9 * tt + 2 * t - 3) * fa;
 
 5554        d[44][2] = -81 * rm * r3m * r3p * sm * sp * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5555        d[45][2] = +729 * rm * rp * r3m * sm * sp * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5556        d[46][2] = -729 * rm * rp * r3p * sm * sp * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5557        d[47][2] = +81 * rp * r3m * r3p * sm * sp * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5558        d[48][2] = +9 * rm * r3m * r3p * sp * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5559        d[49][2] = -81 * rm * rp * r3m * sp * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5560        d[50][2] = +81 * rm * rp * r3p * sp * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5561        d[51][2] = -9 * rp * r3m * r3p * sp * s3m * s3p * (9 * tt + 2 * t - 3) * fa;
 
 5562        d[52][2] = -9 * rm * rp * r3m * sm * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5563        d[53][2] = +9 * rm * rp * r3p * sm * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5564        d[54][2] = -9 * rm * r3m * r3p * sm * sp * s3m * (27 * tt + 18 * t - 1) * fa;
 
 5565        d[55][2] = +81 * rm * rp * r3m * sm * sp * s3m * (27 * tt + 18 * t - 1) * fa;
 
 5566        d[56][2] = -81 * rm * rp * r3p * sm * sp * s3m * (27 * tt + 18 * t - 1) * fa;
 
 5567        d[57][2] = +9 * rp * r3m * r3p * sm * sp * s3m * (27 * tt + 18 * t - 1) * fa;
 
 5568        d[58][2] = +9 * rm * r3m * r3p * sm * sp * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5569        d[59][2] = -81 * rm * rp * r3m * sm * sp * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5570        d[60][2] = +81 * rm * rp * r3p * sm * sp * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5571        d[61][2] = -9 * rp * r3m * r3p * sm * sp * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5572        d[62][2] = +9 * rm * rp * r3m * sp * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5573        d[63][2] = -9 * rm * rp * r3p * sp * s3m * s3p * (27 * tt + 18 * t - 1) * fa;
 
 5576    static const int num_nodes = 64;
 
 5577    static const int num_faces = 6;
 
 5578    static const int num_dimensions = 3;
 
 5579    static const int order = 9;
 
 5580    typedef IS_HE ischeme_type;
 
 5582    static ischeme_type create_ischeme() {
 
 5583        ischeme_type ischeme;
 
 5584        ischeme[0].set_order(3);
 
 5585        ischeme[1].set_order(3);
 
 5586        ischeme[2].set_order(3);
 
 5590    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 5591        ischeme_type ischeme;
 
 5592        ischeme[0].set_order(2 * 3);
 
 5593        ischeme[1].set_order(2 * 3);
 
 5594        ischeme[2].set_order(2 * 3);
 
 5595        ischeme.init(property);
 
 5599    static const double r_node[64];
 
 5600    static const double s_node[64];
 
 5601    static const double t_node[64];
 
 5603    static const bool supports_laminates = 
true;
 
 5605    static const char name[5];
 
 5607    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 5608    typedef L4_Shape_Evaluator edge_shape_type_1;
 
 5609    static const int num_edge = 12;
 
 5610    static const int edge_node[12][4];
 
 5611    static const int edge_type_index[12];
 
 5613    typedef Q16_Shape_Evaluator face_shape_type_0;
 
 5614    typedef Q16_Shape_Evaluator face_shape_type_1;
 
 5615    static const int num_face = 6;
 
 5616    static const int face_node[6][16];
 
 5617    static const int face_type_index[6];
 
 5618    static const bool is_t_face[6];
 
 5621typedef Solid_Shape_Evaluator<HE64_Shape_Helper> HE64_Shape_Evaluator;
 
 5623class HE4X4X2_Shape_Helper : 
public HE_Shape_Helper {
 
 5625    static void eval_h(
const double internal_coor[3], 
double h[32]) {
 
 5626        const double r = internal_coor[0];
 
 5627        const double s = internal_coor[1];
 
 5628        const double t = internal_coor[2];
 
 5630        const double rm = r - 1;
 
 5631        const double rp = r + 1;
 
 5632        const double sm = s - 1;
 
 5633        const double sp = s + 1;
 
 5634        const double tm = t - 1;
 
 5635        const double tp = t + 1;
 
 5637        const double r3m = 3 * r - 1;
 
 5638        const double r3p = 3 * r + 1;
 
 5639        const double s3m = 3 * s - 1;
 
 5640        const double s3p = 3 * s + 1;
 
 5642        const double fa = 0.001953125;  
 
 5644        h[0] = -rm * r3m * r3p * sm * s3m * s3p * tm * fa;
 
 5645        h[1] = +rp * r3m * r3p * sm * s3m * s3p * tm * fa;
 
 5646        h[2] = -rp * r3m * r3p * sp * s3m * s3p * tm * fa;
 
 5647        h[3] = +rm * r3m * r3p * sp * s3m * s3p * tm * fa;
 
 5648        h[4] = +rm * r3m * r3p * sm * s3m * s3p * tp * fa;
 
 5649        h[5] = -rp * r3m * r3p * sm * s3m * s3p * tp * fa;
 
 5650        h[6] = +rp * r3m * r3p * sp * s3m * s3p * tp * fa;
 
 5651        h[7] = -rm * r3m * r3p * sp * s3m * s3p * tp * fa;
 
 5652        h[8] = +9 * rm * rp * r3m * sm * s3m * s3p * tm * fa;
 
 5653        h[9] = -9 * rm * rp * r3p * sm * s3m * s3p * tm * fa;
 
 5654        h[10] = +9 * rm * r3m * r3p * sm * sp * s3m * tm * fa;
 
 5655        h[11] = -81 * rm * rp * r3m * sm * sp * s3m * tm * fa;
 
 5656        h[12] = +81 * rm * rp * r3p * sm * sp * s3m * tm * fa;
 
 5657        h[13] = -9 * rp * r3m * r3p * sm * sp * s3m * tm * fa;
 
 5658        h[14] = -9 * rm * r3m * r3p * sm * sp * s3p * tm * fa;
 
 5659        h[15] = +81 * rm * rp * r3m * sm * sp * s3p * tm * fa;
 
 5660        h[16] = -81 * rm * rp * r3p * sm * sp * s3p * tm * fa;
 
 5661        h[17] = +9 * rp * r3m * r3p * sm * sp * s3p * tm * fa;
 
 5662        h[18] = -9 * rm * rp * r3m * sp * s3m * s3p * tm * fa;
 
 5663        h[19] = +9 * rm * rp * r3p * sp * s3m * s3p * tm * fa;
 
 5664        h[20] = -9 * rm * rp * r3m * sm * s3m * s3p * tp * fa;
 
 5665        h[21] = +9 * rm * rp * r3p * sm * s3m * s3p * tp * fa;
 
 5666        h[22] = -9 * rm * r3m * r3p * sm * sp * s3m * tp * fa;
 
 5667        h[23] = +81 * rm * rp * r3m * sm * sp * s3m * tp * fa;
 
 5668        h[24] = -81 * rm * rp * r3p * sm * sp * s3m * tp * fa;
 
 5669        h[25] = +9 * rp * r3m * r3p * sm * sp * s3m * tp * fa;
 
 5670        h[26] = +9 * rm * r3m * r3p * sm * sp * s3p * tp * fa;
 
 5671        h[27] = -81 * rm * rp * r3m * sm * sp * s3p * tp * fa;
 
 5672        h[28] = +81 * rm * rp * r3p * sm * sp * s3p * tp * fa;
 
 5673        h[29] = -9 * rp * r3m * r3p * sm * sp * s3p * tp * fa;
 
 5674        h[30] = +9 * rm * rp * r3m * sp * s3m * s3p * tp * fa;
 
 5675        h[31] = -9 * rm * rp * r3p * sp * s3m * s3p * tp * fa;
 
 5678    static void eval_h_derived(
const double internal_coor[3], 
double d[32][3]) {
 
 5679        const double r = internal_coor[0];
 
 5680        const double s = internal_coor[1];
 
 5681        const double t = internal_coor[2];
 
 5683        const double rm = r - 1;
 
 5684        const double rp = r + 1;
 
 5685        const double sm = s - 1;
 
 5686        const double sp = s + 1;
 
 5687        const double tm = t - 1;
 
 5688        const double tp = t + 1;
 
 5690        const double r3m = 3 * r - 1;
 
 5691        const double r3p = 3 * r + 1;
 
 5692        const double s3m = 3 * s - 1;
 
 5693        const double s3p = 3 * s + 1;
 
 5695        const double fa = 0.001953125;  
 
 5697        d[0][0] = -(27 * r * r - 18 * r - 1) * sm * s3m * s3p * tm * fa;
 
 5698        d[1][0] = +(27 * r * r + 18 * r - 1) * sm * s3m * s3p * tm * fa;
 
 5699        d[2][0] = -(27 * r * r + 18 * r - 1) * sp * s3m * s3p * tm * fa;
 
 5700        d[3][0] = +(27 * r * r - 18 * r - 1) * sp * s3m * s3p * tm * fa;
 
 5701        d[4][0] = +(27 * r * r - 18 * r - 1) * sm * s3m * s3p * tp * fa;
 
 5702        d[5][0] = -(27 * r * r + 18 * r - 1) * sm * s3m * s3p * tp * fa;
 
 5703        d[6][0] = +(27 * r * r + 18 * r - 1) * sp * s3m * s3p * tp * fa;
 
 5704        d[7][0] = -(27 * r * r - 18 * r - 1) * sp * s3m * s3p * tp * fa;
 
 5705        d[8][0] = +9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * tm * fa;
 
 5706        d[9][0] = -9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * tm * fa;
 
 5707        d[10][0] = +9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * tm * fa;
 
 5708        d[11][0] = -81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * tm * fa;
 
 5709        d[12][0] = +81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * tm * fa;
 
 5710        d[13][0] = -9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * tm * fa;
 
 5711        d[14][0] = -9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * tm * fa;
 
 5712        d[15][0] = +81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * tm * fa;
 
 5713        d[16][0] = -81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * tm * fa;
 
 5714        d[17][0] = +9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * tm * fa;
 
 5715        d[18][0] = -9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * tm * fa;
 
 5716        d[19][0] = +9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * tm * fa;
 
 5717        d[20][0] = -9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * tp * fa;
 
 5718        d[21][0] = +9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * tp * fa;
 
 5719        d[22][0] = -9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * tp * fa;
 
 5720        d[23][0] = +81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * tp * fa;
 
 5721        d[24][0] = -81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * tp * fa;
 
 5722        d[25][0] = +9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * tp * fa;
 
 5723        d[26][0] = +9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * tp * fa;
 
 5724        d[27][0] = -81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * tp * fa;
 
 5725        d[28][0] = +81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * tp * fa;
 
 5726        d[29][0] = -9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * tp * fa;
 
 5727        d[30][0] = +9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * tp * fa;
 
 5728        d[31][0] = -9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * tp * fa;
 
 5729        d[0][1] = -rm * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * fa;
 
 5730        d[1][1] = +rp * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * fa;
 
 5731        d[2][1] = -rp * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * fa;
 
 5732        d[3][1] = +rm * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * fa;
 
 5733        d[4][1] = +rm * r3m * r3p * (27 * s * s - 18 * s - 1) * tp * fa;
 
 5734        d[5][1] = -rp * r3m * r3p * (27 * s * s - 18 * s - 1) * tp * fa;
 
 5735        d[6][1] = +rp * r3m * r3p * (27 * s * s + 18 * s - 1) * tp * fa;
 
 5736        d[7][1] = -rm * r3m * r3p * (27 * s * s + 18 * s - 1) * tp * fa;
 
 5737        d[8][1] = +9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * tm * fa;
 
 5738        d[9][1] = -9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * tm * fa;
 
 5739        d[10][1] = +9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * fa;
 
 5740        d[11][1] = -81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * tm * fa;
 
 5741        d[12][1] = +81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * tm * fa;
 
 5742        d[13][1] = -9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * fa;
 
 5743        d[14][1] = -9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * fa;
 
 5744        d[15][1] = +81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * tm * fa;
 
 5745        d[16][1] = -81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * tm * fa;
 
 5746        d[17][1] = +9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * fa;
 
 5747        d[18][1] = -9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * tm * fa;
 
 5748        d[19][1] = +9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * tm * fa;
 
 5749        d[20][1] = -9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * tp * fa;
 
 5750        d[21][1] = +9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * tp * fa;
 
 5751        d[22][1] = -9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * tp * fa;
 
 5752        d[23][1] = +81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * tp * fa;
 
 5753        d[24][1] = -81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * tp * fa;
 
 5754        d[25][1] = +9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * tp * fa;
 
 5755        d[26][1] = +9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * tp * fa;
 
 5756        d[27][1] = -81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * tp * fa;
 
 5757        d[28][1] = +81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * tp * fa;
 
 5758        d[29][1] = -9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * tp * fa;
 
 5759        d[30][1] = +9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * tp * fa;
 
 5760        d[31][1] = -9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * tp * fa;
 
 5761        d[0][2] = -rm * r3m * r3p * sm * s3m * s3p * fa;
 
 5762        d[1][2] = +rp * r3m * r3p * sm * s3m * s3p * fa;
 
 5763        d[2][2] = -rp * r3m * r3p * sp * s3m * s3p * fa;
 
 5764        d[3][2] = +rm * r3m * r3p * sp * s3m * s3p * fa;
 
 5765        d[4][2] = +rm * r3m * r3p * sm * s3m * s3p * fa;
 
 5766        d[5][2] = -rp * r3m * r3p * sm * s3m * s3p * fa;
 
 5767        d[6][2] = +rp * r3m * r3p * sp * s3m * s3p * fa;
 
 5768        d[7][2] = -rm * r3m * r3p * sp * s3m * s3p * fa;
 
 5769        d[8][2] = +9 * rm * rp * r3m * sm * s3m * s3p * fa;
 
 5770        d[9][2] = -9 * rm * rp * r3p * sm * s3m * s3p * fa;
 
 5771        d[10][2] = +9 * rm * r3m * r3p * sm * sp * s3m * fa;
 
 5772        d[11][2] = -81 * rm * rp * r3m * sm * sp * s3m * fa;
 
 5773        d[12][2] = +81 * rm * rp * r3p * sm * sp * s3m * fa;
 
 5774        d[13][2] = -9 * rp * r3m * r3p * sm * sp * s3m * fa;
 
 5775        d[14][2] = -9 * rm * r3m * r3p * sm * sp * s3p * fa;
 
 5776        d[15][2] = +81 * rm * rp * r3m * sm * sp * s3p * fa;
 
 5777        d[16][2] = -81 * rm * rp * r3p * sm * sp * s3p * fa;
 
 5778        d[17][2] = +9 * rp * r3m * r3p * sm * sp * s3p * fa;
 
 5779        d[18][2] = -9 * rm * rp * r3m * sp * s3m * s3p * fa;
 
 5780        d[19][2] = +9 * rm * rp * r3p * sp * s3m * s3p * fa;
 
 5781        d[20][2] = -9 * rm * rp * r3m * sm * s3m * s3p * fa;
 
 5782        d[21][2] = +9 * rm * rp * r3p * sm * s3m * s3p * fa;
 
 5783        d[22][2] = -9 * rm * r3m * r3p * sm * sp * s3m * fa;
 
 5784        d[23][2] = +81 * rm * rp * r3m * sm * sp * s3m * fa;
 
 5785        d[24][2] = -81 * rm * rp * r3p * sm * sp * s3m * fa;
 
 5786        d[25][2] = +9 * rp * r3m * r3p * sm * sp * s3m * fa;
 
 5787        d[26][2] = +9 * rm * r3m * r3p * sm * sp * s3p * fa;
 
 5788        d[27][2] = -81 * rm * rp * r3m * sm * sp * s3p * fa;
 
 5789        d[28][2] = +81 * rm * rp * r3p * sm * sp * s3p * fa;
 
 5790        d[29][2] = -9 * rp * r3m * r3p * sm * sp * s3p * fa;
 
 5791        d[30][2] = +9 * rm * rp * r3m * sp * s3m * s3p * fa;
 
 5792        d[31][2] = -9 * rm * rp * r3p * sp * s3m * s3p * fa;
 
 5795    static const int num_nodes = 32;
 
 5796    static const int num_faces = 6;
 
 5797    static const int num_dimensions = 3;
 
 5798    static const int order = 7;
 
 5799    typedef IS_HE ischeme_type;
 
 5801    static ischeme_type create_ischeme() {
 
 5802        ischeme_type ischeme;
 
 5803        ischeme[0].set_order(3);
 
 5804        ischeme[1].set_order(3);
 
 5805        ischeme[2].set_order(1);
 
 5809    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 5810        ischeme_type ischeme;
 
 5811        ischeme[0].set_order(2 * 3);
 
 5812        ischeme[1].set_order(2 * 3);
 
 5813        ischeme[2].set_order(2 * 1);
 
 5814        ischeme.init(property);
 
 5818    static const double r_node[32];
 
 5819    static const double s_node[32];
 
 5820    static const double t_node[32];
 
 5822    static const bool supports_laminates = 
true;
 
 5824    static const char name[8];
 
 5826    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 5827    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 5828    static const int num_edge = 12;
 
 5829    static const int edge_node[12][4];
 
 5830    static const int edge_type_index[12];
 
 5832    typedef Q4X2_Shape_Evaluator face_shape_type_0;
 
 5833    typedef Q16_Shape_Evaluator face_shape_type_1;
 
 5834    static const int num_face = 6;
 
 5835    static const int face_node[6][16];
 
 5836    static const int face_type_index[6];
 
 5837    static const bool is_t_face[6];
 
 5840typedef Solid_Shape_Evaluator<HE4X4X2_Shape_Helper> HE4X4X2_Shape_Evaluator;
 
 5842class HE5X5X2_Shape_Helper : 
public HE_Shape_Helper {
 
 5844    static void eval_h(
const double internal_coor[3], 
double h[50]) {
 
 5845        const double r = internal_coor[0];
 
 5846        const double s = internal_coor[1];
 
 5847        const double t = internal_coor[2];
 
 5849        const double rm = r - 1;
 
 5850        const double rp = r + 1;
 
 5851        const double sm = s - 1;
 
 5852        const double sp = s + 1;
 
 5853        const double tm = t - 1;
 
 5854        const double tp = t + 1;
 
 5856        const double r2m = 2 * r - 1;
 
 5857        const double r2p = 2 * r + 1;
 
 5858        const double s2m = 2 * s - 1;
 
 5859        const double s2p = 2 * s + 1;
 
 5861        h[0] = -rm * r * r2m * r2p * sm * s * s2m * s2p * tm / 72;
 
 5862        h[1] = -r * rp * r2m * r2p * sm * s * s2m * s2p * tm / 72;
 
 5863        h[2] = -r * rp * r2m * r2p * s * sp * s2m * s2p * tm / 72;
 
 5864        h[3] = -rm * r * r2m * r2p * s * sp * s2m * s2p * tm / 72;
 
 5865        h[4] = +rm * r * r2m * r2p * sm * s * s2m * s2p * tp / 72;
 
 5866        h[5] = +r * rp * r2m * r2p * sm * s * s2m * s2p * tp / 72;
 
 5867        h[6] = +r * rp * r2m * r2p * s * sp * s2m * s2p * tp / 72;
 
 5868        h[7] = +rm * r * r2m * r2p * s * sp * s2m * s2p * tp / 72;
 
 5869        h[8] = +rm * r * rp * r2m * sm * s * s2m * s2p * tm / 9;
 
 5870        h[9] = -rm * rp * r2m * r2p * sm * s * s2m * s2p * tm / 12;
 
 5871        h[10] = +rm * r * rp * r2p * sm * s * s2m * s2p * tm / 9;
 
 5872        h[11] = +rm * r * r2m * r2p * sm * s * sp * s2m * tm / 9;
 
 5873        h[12] = -8 * rm * r * rp * r2m * sm * s * sp * s2m * tm / 9;
 
 5874        h[13] = +2 * rm * rp * r2m * r2p * sm * s * sp * s2m * tm / 3;
 
 5875        h[14] = -8 * rm * r * rp * r2p * sm * s * sp * s2m * tm / 9;
 
 5876        h[15] = +r * rp * r2m * r2p * sm * s * sp * s2m * tm / 9;
 
 5877        h[16] = -rm * r * r2m * r2p * sm * sp * s2m * s2p * tm / 12;
 
 5878        h[17] = +2 * rm * r * rp * r2m * sm * sp * s2m * s2p * tm / 3;
 
 5879        h[18] = -rm * rp * r2m * r2p * sm * sp * s2m * s2p * tm / 2;
 
 5880        h[19] = +2 * rm * r * rp * r2p * sm * sp * s2m * s2p * tm / 3;
 
 5881        h[20] = -r * rp * r2m * r2p * sm * sp * s2m * s2p * tm / 12;
 
 5882        h[21] = +rm * r * r2m * r2p * sm * s * sp * s2p * tm / 9;
 
 5883        h[22] = -8 * rm * r * rp * r2m * sm * s * sp * s2p * tm / 9;
 
 5884        h[23] = +2 * rm * rp * r2m * r2p * sm * s * sp * s2p * tm / 3;
 
 5885        h[24] = -8 * rm * r * rp * r2p * sm * s * sp * s2p * tm / 9;
 
 5886        h[25] = +r * rp * r2m * r2p * sm * s * sp * s2p * tm / 9;
 
 5887        h[26] = +rm * r * rp * r2m * s * sp * s2m * s2p * tm / 9;
 
 5888        h[27] = -rm * rp * r2m * r2p * s * sp * s2m * s2p * tm / 12;
 
 5889        h[28] = +rm * r * rp * r2p * s * sp * s2m * s2p * tm / 9;
 
 5890        h[29] = -rm * r * rp * r2m * sm * s * s2m * s2p * tp / 9;
 
 5891        h[30] = +rm * rp * r2m * r2p * sm * s * s2m * s2p * tp / 12;
 
 5892        h[31] = -rm * r * rp * r2p * sm * s * s2m * s2p * tp / 9;
 
 5893        h[32] = -rm * r * r2m * r2p * sm * s * sp * s2m * tp / 9;
 
 5894        h[33] = +8 * rm * r * rp * r2m * sm * s * sp * s2m * tp / 9;
 
 5895        h[34] = -2 * rm * rp * r2m * r2p * sm * s * sp * s2m * tp / 3;
 
 5896        h[35] = +8 * rm * r * rp * r2p * sm * s * sp * s2m * tp / 9;
 
 5897        h[36] = -r * rp * r2m * r2p * sm * s * sp * s2m * tp / 9;
 
 5898        h[37] = +rm * r * r2m * r2p * sm * sp * s2m * s2p * tp / 12;
 
 5899        h[38] = -2 * rm * r * rp * r2m * sm * sp * s2m * s2p * tp / 3;
 
 5900        h[39] = +rm * rp * r2m * r2p * sm * sp * s2m * s2p * tp / 2;
 
 5901        h[40] = -2 * rm * r * rp * r2p * sm * sp * s2m * s2p * tp / 3;
 
 5902        h[41] = +r * rp * r2m * r2p * sm * sp * s2m * s2p * tp / 12;
 
 5903        h[42] = -rm * r * r2m * r2p * sm * s * sp * s2p * tp / 9;
 
 5904        h[43] = +8 * rm * r * rp * r2m * sm * s * sp * s2p * tp / 9;
 
 5905        h[44] = -2 * rm * rp * r2m * r2p * sm * s * sp * s2p * tp / 3;
 
 5906        h[45] = +8 * rm * r * rp * r2p * sm * s * sp * s2p * tp / 9;
 
 5907        h[46] = -r * rp * r2m * r2p * sm * s * sp * s2p * tp / 9;
 
 5908        h[47] = -rm * r * rp * r2m * s * sp * s2m * s2p * tp / 9;
 
 5909        h[48] = +rm * rp * r2m * r2p * s * sp * s2m * s2p * tp / 12;
 
 5910        h[49] = -rm * r * rp * r2p * s * sp * s2m * s2p * tp / 9;
 
 5913    static void eval_h_derived(
const double internal_coor[3], 
double d[50][3]) {
 
 5914        const double r = internal_coor[0];
 
 5915        const double s = internal_coor[1];
 
 5916        const double t = internal_coor[2];
 
 5918        const double rm = r - 1;
 
 5919        const double rp = r + 1;
 
 5920        const double sm = s - 1;
 
 5921        const double sp = s + 1;
 
 5922        const double tm = t - 1;
 
 5923        const double tp = t + 1;
 
 5925        const double r2m = 2 * r - 1;
 
 5926        const double r2p = 2 * r + 1;
 
 5927        const double s2m = 2 * s - 1;
 
 5928        const double s2p = 2 * s + 1;
 
 5930        const double r4m = 4 * r - 1;
 
 5931        const double r4p = 4 * r + 1;
 
 5932        const double s4m = 4 * s - 1;
 
 5933        const double s4p = 4 * s + 1;
 
 5935        const double rr = r * r;
 
 5936        const double ss = s * s;
 
 5938        d[0][0] = -r4m * (4 * rr - 2 * r - 1) * sm * s * s2m * s2p * tm / 72;
 
 5939        d[1][0] = -r4p * (4 * rr + 2 * r - 1) * sm * s * s2m * s2p * tm / 72;
 
 5940        d[2][0] = -r4p * (4 * rr + 2 * r - 1) * s * sp * s2m * s2p * tm / 72;
 
 5941        d[3][0] = -r4m * (4 * rr - 2 * r - 1) * s * sp * s2m * s2p * tm / 72;
 
 5942        d[4][0] = +r4m * (4 * rr - 2 * r - 1) * sm * s * s2m * s2p * tp / 72;
 
 5943        d[5][0] = +r4p * (4 * rr + 2 * r - 1) * sm * s * s2m * s2p * tp / 72;
 
 5944        d[6][0] = +r4p * (4 * rr + 2 * r - 1) * s * sp * s2m * s2p * tp / 72;
 
 5945        d[7][0] = +r4m * (4 * rr - 2 * r - 1) * s * sp * s2m * s2p * tp / 72;
 
 5946        d[8][0] = +(8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * s2m * s2p * tm / 9;
 
 5947        d[9][0] = -r * (8 * rr - 5) * sm * s * s2m * s2p * tm / 6;
 
 5948        d[10][0] = +(8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * s2m * s2p * tm / 9;
 
 5949        d[11][0] = +r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2m * tm / 9;
 
 5950        d[12][0] = -8 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2m * tm / 9;
 
 5951        d[13][0] = +4 * r * (8 * rr - 5) * sm * s * sp * s2m * tm / 3;
 
 5952        d[14][0] = -8 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2m * tm / 9;
 
 5953        d[15][0] = +r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2m * tm / 9;
 
 5954        d[16][0] = -r4m * (4 * rr - 2 * r - 1) * sm * sp * s2m * s2p * tm / 12;
 
 5955        d[17][0] = +2 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * sp * s2m * s2p * tm / 3;
 
 5956        d[18][0] = -r * (8 * rr - 5) * sm * sp * s2m * s2p * tm;
 
 5957        d[19][0] = +2 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * sp * s2m * s2p * tm / 3;
 
 5958        d[20][0] = -r4p * (4 * rr + 2 * r - 1) * sm * sp * s2m * s2p * tm / 12;
 
 5959        d[21][0] = +r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2p * tm / 9;
 
 5960        d[22][0] = -8 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2p * tm / 9;
 
 5961        d[23][0] = +4 * r * (8 * rr - 5) * sm * s * sp * s2p * tm / 3;
 
 5962        d[24][0] = -8 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2p * tm / 9;
 
 5963        d[25][0] = +r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2p * tm / 9;
 
 5964        d[26][0] = +(8 * rr * r - 3 * rr - 4 * r + 1) * s * sp * s2m * s2p * tm / 9;
 
 5965        d[27][0] = -r * (8 * rr - 5) * s * sp * s2m * s2p * tm / 6;
 
 5966        d[28][0] = +(8 * rr * r + 3 * rr - 4 * r - 1) * s * sp * s2m * s2p * tm / 9;
 
 5967        d[29][0] = -(8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * s2m * s2p * tp / 9;
 
 5968        d[30][0] = +r * (8 * rr - 5) * sm * s * s2m * s2p * tp / 6;
 
 5969        d[31][0] = -(8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * s2m * s2p * tp / 9;
 
 5970        d[32][0] = -r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2m * tp / 9;
 
 5971        d[33][0] = +8 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2m * tp / 9;
 
 5972        d[34][0] = -4 * r * (8 * rr - 5) * sm * s * sp * s2m * tp / 3;
 
 5973        d[35][0] = +8 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2m * tp / 9;
 
 5974        d[36][0] = -r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2m * tp / 9;
 
 5975        d[37][0] = +r4m * (4 * rr - 2 * r - 1) * sm * sp * s2m * s2p * tp / 12;
 
 5976        d[38][0] = -2 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * sp * s2m * s2p * tp / 3;
 
 5977        d[39][0] = +r * (8 * rr - 5) * sm * sp * s2m * s2p * tp;
 
 5978        d[40][0] = -2 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * sp * s2m * s2p * tp / 3;
 
 5979        d[41][0] = +r4p * (4 * rr + 2 * r - 1) * sm * sp * s2m * s2p * tp / 12;
 
 5980        d[42][0] = -r4m * (4 * rr - 2 * r - 1) * sm * s * sp * s2p * tp / 9;
 
 5981        d[43][0] = +8 * (8 * rr * r - 3 * rr - 4 * r + 1) * sm * s * sp * s2p * tp / 9;
 
 5982        d[44][0] = -4 * r * (8 * rr - 5) * sm * s * sp * s2p * tp / 3;
 
 5983        d[45][0] = +8 * (8 * rr * r + 3 * rr - 4 * r - 1) * sm * s * sp * s2p * tp / 9;
 
 5984        d[46][0] = -r4p * (4 * rr + 2 * r - 1) * sm * s * sp * s2p * tp / 9;
 
 5985        d[47][0] = -(8 * rr * r - 3 * rr - 4 * r + 1) * s * sp * s2m * s2p * tp / 9;
 
 5986        d[48][0] = +r * (8 * rr - 5) * s * sp * s2m * s2p * tp / 6;
 
 5987        d[49][0] = -(8 * rr * r + 3 * rr - 4 * r - 1) * s * sp * s2m * s2p * tp / 9;
 
 5988        d[0][1] = -rm * r * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tm / 72;
 
 5989        d[1][1] = -r * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tm / 72;
 
 5990        d[2][1] = -r * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tm / 72;
 
 5991        d[3][1] = -rm * r * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tm / 72;
 
 5992        d[4][1] = +rm * r * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tp / 72;
 
 5993        d[5][1] = +r * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tp / 72;
 
 5994        d[6][1] = +r * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tp / 72;
 
 5995        d[7][1] = +rm * r * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tp / 72;
 
 5996        d[8][1] = +rm * r * rp * r2m * s4m * (4 * ss - 2 * s - 1) * tm / 9;
 
 5997        d[9][1] = -rm * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tm / 12;
 
 5998        d[10][1] = +rm * r * rp * r2p * s4m * (4 * ss - 2 * s - 1) * tm / 9;
 
 5999        d[11][1] = +rm * r * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tm / 9;
 
 6000        d[12][1] = -8 * rm * r * rp * r2m * (8 * ss * s - 3 * ss - 4 * s + 1) * tm / 9;
 
 6001        d[13][1] = +2 * rm * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tm / 3;
 
 6002        d[14][1] = -8 * rm * r * rp * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tm / 9;
 
 6003        d[15][1] = +r * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tm / 9;
 
 6004        d[16][1] = -rm * r * r2m * r2p * s * (8 * ss - 5) * tm / 6;
 
 6005        d[17][1] = +4 * rm * r * rp * r2m * s * (8 * ss - 5) * tm / 3;
 
 6006        d[18][1] = -rm * rp * r2m * r2p * s * (8 * ss - 5) * tm;
 
 6007        d[19][1] = +4 * rm * r * rp * r2p * s * (8 * ss - 5) * tm / 3;
 
 6008        d[20][1] = -r * rp * r2m * r2p * s * (8 * ss - 5) * tm / 6;
 
 6009        d[21][1] = +rm * r * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tm / 9;
 
 6010        d[22][1] = -8 * rm * r * rp * r2m * (8 * ss * s + 3 * ss - 4 * s - 1) * tm / 9;
 
 6011        d[23][1] = +2 * rm * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tm / 3;
 
 6012        d[24][1] = -8 * rm * r * rp * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tm / 9;
 
 6013        d[25][1] = +r * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tm / 9;
 
 6014        d[26][1] = +rm * r * rp * r2m * s4p * (4 * ss + 2 * s - 1) * tm / 9;
 
 6015        d[27][1] = -rm * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tm / 12;
 
 6016        d[28][1] = +rm * r * rp * r2p * s4p * (4 * ss + 2 * s - 1) * tm / 9;
 
 6017        d[29][1] = -rm * r * rp * r2m * s4m * (4 * ss - 2 * s - 1) * tp / 9;
 
 6018        d[30][1] = +rm * rp * r2m * r2p * s4m * (4 * ss - 2 * s - 1) * tp / 12;
 
 6019        d[31][1] = -rm * r * rp * r2p * s4m * (4 * ss - 2 * s - 1) * tp / 9;
 
 6020        d[32][1] = -rm * r * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tp / 9;
 
 6021        d[33][1] = +8 * rm * r * rp * r2m * (8 * ss * s - 3 * ss - 4 * s + 1) * tp / 9;
 
 6022        d[34][1] = -2 * rm * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tp / 3;
 
 6023        d[35][1] = +8 * rm * r * rp * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tp / 9;
 
 6024        d[36][1] = -r * rp * r2m * r2p * (8 * ss * s - 3 * ss - 4 * s + 1) * tp / 9;
 
 6025        d[37][1] = +rm * r * r2m * r2p * s * (8 * ss - 5) * tp / 6;
 
 6026        d[38][1] = -4 * rm * r * rp * r2m * s * (8 * ss - 5) * tp / 3;
 
 6027        d[39][1] = +rm * rp * r2m * r2p * s * (8 * ss - 5) * tp;
 
 6028        d[40][1] = -4 * rm * r * rp * r2p * s * (8 * ss - 5) * tp / 3;
 
 6029        d[41][1] = +r * rp * r2m * r2p * s * (8 * ss - 5) * tp / 6;
 
 6030        d[42][1] = -rm * r * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tp / 9;
 
 6031        d[43][1] = +8 * rm * r * rp * r2m * (8 * ss * s + 3 * ss - 4 * s - 1) * tp / 9;
 
 6032        d[44][1] = -2 * rm * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tp / 3;
 
 6033        d[45][1] = +8 * rm * r * rp * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tp / 9;
 
 6034        d[46][1] = -r * rp * r2m * r2p * (8 * ss * s + 3 * ss - 4 * s - 1) * tp / 9;
 
 6035        d[47][1] = -rm * r * rp * r2m * s4p * (4 * ss + 2 * s - 1) * tp / 9;
 
 6036        d[48][1] = +rm * rp * r2m * r2p * s4p * (4 * ss + 2 * s - 1) * tp / 12;
 
 6037        d[49][1] = -rm * r * rp * r2p * s4p * (4 * ss + 2 * s - 1) * tp / 9;
 
 6038        d[0][2] = -rm * r * r2m * r2p * sm * s * s2m * s2p / 72;
 
 6039        d[1][2] = -r * rp * r2m * r2p * sm * s * s2m * s2p / 72;
 
 6040        d[2][2] = -r * rp * r2m * r2p * s * sp * s2m * s2p / 72;
 
 6041        d[3][2] = -rm * r * r2m * r2p * s * sp * s2m * s2p / 72;
 
 6042        d[4][2] = +rm * r * r2m * r2p * sm * s * s2m * s2p / 72;
 
 6043        d[5][2] = +r * rp * r2m * r2p * sm * s * s2m * s2p / 72;
 
 6044        d[6][2] = +r * rp * r2m * r2p * s * sp * s2m * s2p / 72;
 
 6045        d[7][2] = +rm * r * r2m * r2p * s * sp * s2m * s2p / 72;
 
 6046        d[8][2] = +rm * r * rp * r2m * sm * s * s2m * s2p / 9;
 
 6047        d[9][2] = -rm * rp * r2m * r2p * sm * s * s2m * s2p / 12;
 
 6048        d[10][2] = +rm * r * rp * r2p * sm * s * s2m * s2p / 9;
 
 6049        d[11][2] = +rm * r * r2m * r2p * sm * s * sp * s2m / 9;
 
 6050        d[12][2] = -8 * rm * r * rp * r2m * sm * s * sp * s2m / 9;
 
 6051        d[13][2] = +2 * rm * rp * r2m * r2p * sm * s * sp * s2m / 3;
 
 6052        d[14][2] = -8 * rm * r * rp * r2p * sm * s * sp * s2m / 9;
 
 6053        d[15][2] = +r * rp * r2m * r2p * sm * s * sp * s2m / 9;
 
 6054        d[16][2] = -rm * r * r2m * r2p * sm * sp * s2m * s2p / 12;
 
 6055        d[17][2] = +2 * rm * r * rp * r2m * sm * sp * s2m * s2p / 3;
 
 6056        d[18][2] = -rm * rp * r2m * r2p * sm * sp * s2m * s2p / 2;
 
 6057        d[19][2] = +2 * rm * r * rp * r2p * sm * sp * s2m * s2p / 3;
 
 6058        d[20][2] = -r * rp * r2m * r2p * sm * sp * s2m * s2p / 12;
 
 6059        d[21][2] = +rm * r * r2m * r2p * sm * s * sp * s2p / 9;
 
 6060        d[22][2] = -8 * rm * r * rp * r2m * sm * s * sp * s2p / 9;
 
 6061        d[23][2] = +2 * rm * rp * r2m * r2p * sm * s * sp * s2p / 3;
 
 6062        d[24][2] = -8 * rm * r * rp * r2p * sm * s * sp * s2p / 9;
 
 6063        d[25][2] = +r * rp * r2m * r2p * sm * s * sp * s2p / 9;
 
 6064        d[26][2] = +rm * r * rp * r2m * s * sp * s2m * s2p / 9;
 
 6065        d[27][2] = -rm * rp * r2m * r2p * s * sp * s2m * s2p / 12;
 
 6066        d[28][2] = +rm * r * rp * r2p * s * sp * s2m * s2p / 9;
 
 6067        d[29][2] = -rm * r * rp * r2m * sm * s * s2m * s2p / 9;
 
 6068        d[30][2] = +rm * rp * r2m * r2p * sm * s * s2m * s2p / 12;
 
 6069        d[31][2] = -rm * r * rp * r2p * sm * s * s2m * s2p / 9;
 
 6070        d[32][2] = -rm * r * r2m * r2p * sm * s * sp * s2m / 9;
 
 6071        d[33][2] = +8 * rm * r * rp * r2m * sm * s * sp * s2m / 9;
 
 6072        d[34][2] = -2 * rm * rp * r2m * r2p * sm * s * sp * s2m / 3;
 
 6073        d[35][2] = +8 * rm * r * rp * r2p * sm * s * sp * s2m / 9;
 
 6074        d[36][2] = -r * rp * r2m * r2p * sm * s * sp * s2m / 9;
 
 6075        d[37][2] = +rm * r * r2m * r2p * sm * sp * s2m * s2p / 12;
 
 6076        d[38][2] = -2 * rm * r * rp * r2m * sm * sp * s2m * s2p / 3;
 
 6077        d[39][2] = +rm * rp * r2m * r2p * sm * sp * s2m * s2p / 2;
 
 6078        d[40][2] = -2 * rm * r * rp * r2p * sm * sp * s2m * s2p / 3;
 
 6079        d[41][2] = +r * rp * r2m * r2p * sm * sp * s2m * s2p / 12;
 
 6080        d[42][2] = -rm * r * r2m * r2p * sm * s * sp * s2p / 9;
 
 6081        d[43][2] = +8 * rm * r * rp * r2m * sm * s * sp * s2p / 9;
 
 6082        d[44][2] = -2 * rm * rp * r2m * r2p * sm * s * sp * s2p / 3;
 
 6083        d[45][2] = +8 * rm * r * rp * r2p * sm * s * sp * s2p / 9;
 
 6084        d[46][2] = -r * rp * r2m * r2p * sm * s * sp * s2p / 9;
 
 6085        d[47][2] = -rm * r * rp * r2m * s * sp * s2m * s2p / 9;
 
 6086        d[48][2] = +rm * rp * r2m * r2p * s * sp * s2m * s2p / 12;
 
 6087        d[49][2] = -rm * r * rp * r2p * s * sp * s2m * s2p / 9;
 
 6090    static const int num_nodes = 50;
 
 6091    static const int num_faces = 6;
 
 6092    static const int num_dimensions = 3;
 
 6093    static const int order = 9;
 
 6094    typedef IS_HE ischeme_type;
 
 6096    static ischeme_type create_ischeme() {
 
 6097        ischeme_type ischeme;
 
 6098        ischeme[0].set_order(4);
 
 6099        ischeme[1].set_order(4);
 
 6100        ischeme[2].set_order(1);
 
 6104    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 6105        ischeme_type ischeme;
 
 6106        ischeme[0].set_order(2 * 4);
 
 6107        ischeme[1].set_order(2 * 4);
 
 6108        ischeme[2].set_order(2 * 1);
 
 6109        ischeme.init(property);
 
 6113    static const double r_node[50];
 
 6114    static const double s_node[50];
 
 6115    static const double t_node[50];
 
 6117    static const bool supports_laminates = 
true;
 
 6119    static const char name[8];
 
 6121    typedef L5_Shape_Evaluator edge_shape_type_0;
 
 6122    typedef L2_Shape_Evaluator edge_shape_type_1;
 
 6123    static const int num_edge = 12;
 
 6124    static const int edge_node[12][5];
 
 6125    static const int edge_type_index[12];
 
 6127    typedef Q5X2_Shape_Evaluator face_shape_type_0;
 
 6128    typedef Q25_Shape_Evaluator face_shape_type_1;
 
 6129    static const int num_face = 6;
 
 6130    static const int face_node[6][25];
 
 6131    static const int face_type_index[6];
 
 6132    static const bool is_t_face[6];
 
 6135typedef Solid_Shape_Evaluator<HE5X5X2_Shape_Helper> HE5X5X2_Shape_Evaluator;
 
 6137class HE4X4X3_Shape_Helper : 
public HE_Shape_Helper {
 
 6139    static void eval_h(
const double internal_coor[3], 
double h[48]) {
 
 6140        const double r = internal_coor[0];
 
 6141        const double s = internal_coor[1];
 
 6142        const double t = internal_coor[2];
 
 6144        const double rm = r - 1;
 
 6145        const double rp = r + 1;
 
 6146        const double sm = s - 1;
 
 6147        const double sp = s + 1;
 
 6148        const double tm = t - 1;
 
 6149        const double tp = t + 1;
 
 6151        const double r3m = 3 * r - 1;
 
 6152        const double r3p = 3 * r + 1;
 
 6153        const double s3m = 3 * s - 1;
 
 6154        const double s3p = 3 * s + 1;
 
 6156        h[0] = +(rm * r3m * r3p * sm * s3m * s3p * tm * t) / 512;
 
 6157        h[1] = -(rp * r3m * r3p * sm * s3m * s3p * tm * t) / 512;
 
 6158        h[2] = +(rp * r3m * r3p * sp * s3m * s3p * tm * t) / 512;
 
 6159        h[3] = -(rm * r3m * r3p * sp * s3m * s3p * tm * t) / 512;
 
 6160        h[4] = +(rm * r3m * r3p * sm * s3m * s3p * t * tp) / 512;
 
 6161        h[5] = -(rp * r3m * r3p * sm * s3m * s3p * t * tp) / 512;
 
 6162        h[6] = +(rp * r3m * r3p * sp * s3m * s3p * t * tp) / 512;
 
 6163        h[7] = -(rm * r3m * r3p * sp * s3m * s3p * t * tp) / 512;
 
 6164        h[8] = -(rm * r3m * r3p * sm * s3m * s3p * tm * tp) / 256;
 
 6165        h[9] = +(rp * r3m * r3p * sm * s3m * s3p * tm * tp) / 256;
 
 6166        h[10] = -(rp * r3m * r3p * sp * s3m * s3p * tm * tp) / 256;
 
 6167        h[11] = +(rm * r3m * r3p * sp * s3m * s3p * tm * tp) / 256;
 
 6168        h[12] = -(9 * rm * rp * r3m * sm * s3m * s3p * tm * t) / 512;
 
 6169        h[13] = +(9 * rm * rp * r3p * sm * s3m * s3p * tm * t) / 512;
 
 6170        h[14] = -(9 * rm * r3m * r3p * sm * sp * s3m * tm * t) / 512;
 
 6171        h[15] = +(81 * rm * rp * r3m * sm * sp * s3m * tm * t) / 512;
 
 6172        h[16] = -(81 * rm * rp * r3p * sm * sp * s3m * tm * t) / 512;
 
 6173        h[17] = +(9 * rp * r3m * r3p * sm * sp * s3m * tm * t) / 512;
 
 6174        h[18] = +(9 * rm * r3m * r3p * sm * sp * s3p * tm * t) / 512;
 
 6175        h[19] = -(81 * rm * rp * r3m * sm * sp * s3p * tm * t) / 512;
 
 6176        h[20] = +(81 * rm * rp * r3p * sm * sp * s3p * tm * t) / 512;
 
 6177        h[21] = -(9 * rp * r3m * r3p * sm * sp * s3p * tm * t) / 512;
 
 6178        h[22] = +(9 * rm * rp * r3m * sp * s3m * s3p * tm * t) / 512;
 
 6179        h[23] = -(9 * rm * rp * r3p * sp * s3m * s3p * tm * t) / 512;
 
 6180        h[24] = -(9 * rm * rp * r3m * sm * s3m * s3p * t * tp) / 512;
 
 6181        h[25] = +(9 * rm * rp * r3p * sm * s3m * s3p * t * tp) / 512;
 
 6182        h[26] = -(9 * rm * r3m * r3p * sm * sp * s3m * t * tp) / 512;
 
 6183        h[27] = +(81 * rm * rp * r3m * sm * sp * s3m * t * tp) / 512;
 
 6184        h[28] = -(81 * rm * rp * r3p * sm * sp * s3m * t * tp) / 512;
 
 6185        h[29] = +(9 * rp * r3m * r3p * sm * sp * s3m * t * tp) / 512;
 
 6186        h[30] = +(9 * rm * r3m * r3p * sm * sp * s3p * t * tp) / 512;
 
 6187        h[31] = -(81 * rm * rp * r3m * sm * sp * s3p * t * tp) / 512;
 
 6188        h[32] = +(81 * rm * rp * r3p * sm * sp * s3p * t * tp) / 512;
 
 6189        h[33] = -(9 * rp * r3m * r3p * sm * sp * s3p * t * tp) / 512;
 
 6190        h[34] = +(9 * rm * rp * r3m * sp * s3m * s3p * t * tp) / 512;
 
 6191        h[35] = -(9 * rm * rp * r3p * sp * s3m * s3p * t * tp) / 512;
 
 6192        h[36] = +(9 * rm * rp * r3m * sm * s3m * s3p * tm * tp) / 256;
 
 6193        h[37] = -(9 * rm * rp * r3p * sm * s3m * s3p * tm * tp) / 256;
 
 6194        h[38] = +(9 * rm * r3m * r3p * sm * sp * s3m * tm * tp) / 256;
 
 6195        h[39] = -(81 * rm * rp * r3m * sm * sp * s3m * tm * tp) / 256;
 
 6196        h[40] = +(81 * rm * rp * r3p * sm * sp * s3m * tm * tp) / 256;
 
 6197        h[41] = -(9 * rp * r3m * r3p * sm * sp * s3m * tm * tp) / 256;
 
 6198        h[42] = -(9 * rm * r3m * r3p * sm * sp * s3p * tm * tp) / 256;
 
 6199        h[43] = +(81 * rm * rp * r3m * sm * sp * s3p * tm * tp) / 256;
 
 6200        h[44] = -(81 * rm * rp * r3p * sm * sp * s3p * tm * tp) / 256;
 
 6201        h[45] = +(9 * rp * r3m * r3p * sm * sp * s3p * tm * tp) / 256;
 
 6202        h[46] = -(9 * rm * rp * r3m * sp * s3m * s3p * tm * tp) / 256;
 
 6203        h[47] = +(9 * rm * rp * r3p * sp * s3m * s3p * tm * tp) / 256;
 
 6206    static void eval_h_derived(
const double internal_coor[3], 
double d[48][3]) {
 
 6207        const double r = internal_coor[0];
 
 6208        const double s = internal_coor[1];
 
 6209        const double t = internal_coor[2];
 
 6211        const double rm = r - 1;
 
 6212        const double rp = r + 1;
 
 6213        const double sm = s - 1;
 
 6214        const double sp = s + 1;
 
 6215        const double tm = t - 1;
 
 6216        const double tp = t + 1;
 
 6218        const double t2m = 2 * t - 1;
 
 6219        const double t2p = 2 * t + 1;
 
 6221        const double r3m = 3 * r - 1;
 
 6222        const double r3p = 3 * r + 1;
 
 6223        const double s3m = 3 * s - 1;
 
 6224        const double s3p = 3 * s + 1;
 
 6226        d[0][0] = +((27 * r * r - 18 * r - 1) * sm * s3m * s3p * tm * t) / 512;
 
 6227        d[1][0] = -((27 * r * r + 18 * r - 1) * sm * s3m * s3p * tm * t) / 512;
 
 6228        d[2][0] = +((27 * r * r + 18 * r - 1) * sp * s3m * s3p * tm * t) / 512;
 
 6229        d[3][0] = -((27 * r * r - 18 * r - 1) * sp * s3m * s3p * tm * t) / 512;
 
 6230        d[4][0] = +((27 * r * r - 18 * r - 1) * sm * s3m * s3p * t * tp) / 512;
 
 6231        d[5][0] = -((27 * r * r + 18 * r - 1) * sm * s3m * s3p * t * tp) / 512;
 
 6232        d[6][0] = +((27 * r * r + 18 * r - 1) * sp * s3m * s3p * t * tp) / 512;
 
 6233        d[7][0] = -((27 * r * r - 18 * r - 1) * sp * s3m * s3p * t * tp) / 512;
 
 6234        d[8][0] = -((27 * r * r - 18 * r - 1) * sm * s3m * s3p * tm * tp) / 256;
 
 6235        d[9][0] = +((27 * r * r + 18 * r - 1) * sm * s3m * s3p * tm * tp) / 256;
 
 6236        d[10][0] = -((27 * r * r + 18 * r - 1) * sp * s3m * s3p * tm * tp) / 256;
 
 6237        d[11][0] = +((27 * r * r - 18 * r - 1) * sp * s3m * s3p * tm * tp) / 256;
 
 6238        d[12][0] = -(9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * tm * t) / 512;
 
 6239        d[13][0] = +(9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * tm * t) / 512;
 
 6240        d[14][0] = -(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * tm * t) / 512;
 
 6241        d[15][0] = +(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * tm * t) / 512;
 
 6242        d[16][0] = -(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * tm * t) / 512;
 
 6243        d[17][0] = +(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * tm * t) / 512;
 
 6244        d[18][0] = +(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * tm * t) / 512;
 
 6245        d[19][0] = -(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * tm * t) / 512;
 
 6246        d[20][0] = +(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * tm * t) / 512;
 
 6247        d[21][0] = -(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * tm * t) / 512;
 
 6248        d[22][0] = +(9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * tm * t) / 512;
 
 6249        d[23][0] = -(9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * tm * t) / 512;
 
 6250        d[24][0] = -(9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * t * tp) / 512;
 
 6251        d[25][0] = +(9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * t * tp) / 512;
 
 6252        d[26][0] = -(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * t * tp) / 512;
 
 6253        d[27][0] = +(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * t * tp) / 512;
 
 6254        d[28][0] = -(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * t * tp) / 512;
 
 6255        d[29][0] = +(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * t * tp) / 512;
 
 6256        d[30][0] = +(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * t * tp) / 512;
 
 6257        d[31][0] = -(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * t * tp) / 512;
 
 6258        d[32][0] = +(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * t * tp) / 512;
 
 6259        d[33][0] = -(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * t * tp) / 512;
 
 6260        d[34][0] = +(9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * t * tp) / 512;
 
 6261        d[35][0] = -(9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * t * tp) / 512;
 
 6262        d[36][0] = +(9 * (9 * r * r - 2 * r - 3) * sm * s3m * s3p * tm * tp) / 256;
 
 6263        d[37][0] = -(9 * (9 * r * r + 2 * r - 3) * sm * s3m * s3p * tm * tp) / 256;
 
 6264        d[38][0] = +(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3m * tm * tp) / 256;
 
 6265        d[39][0] = -(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3m * tm * tp) / 256;
 
 6266        d[40][0] = +(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3m * tm * tp) / 256;
 
 6267        d[41][0] = -(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3m * tm * tp) / 256;
 
 6268        d[42][0] = -(9 * (27 * r * r - 18 * r - 1) * sm * sp * s3p * tm * tp) / 256;
 
 6269        d[43][0] = +(81 * (9 * r * r - 2 * r - 3) * sm * sp * s3p * tm * tp) / 256;
 
 6270        d[44][0] = -(81 * (9 * r * r + 2 * r - 3) * sm * sp * s3p * tm * tp) / 256;
 
 6271        d[45][0] = +(9 * (27 * r * r + 18 * r - 1) * sm * sp * s3p * tm * tp) / 256;
 
 6272        d[46][0] = -(9 * (9 * r * r - 2 * r - 3) * sp * s3m * s3p * tm * tp) / 256;
 
 6273        d[47][0] = +(9 * (9 * r * r + 2 * r - 3) * sp * s3m * s3p * tm * tp) / 256;
 
 6274        d[0][1] = +(rm * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * t) / 512;
 
 6275        d[1][1] = -(rp * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * t) / 512;
 
 6276        d[2][1] = +(rp * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * t) / 512;
 
 6277        d[3][1] = -(rm * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * t) / 512;
 
 6278        d[4][1] = +(rm * r3m * r3p * (27 * s * s - 18 * s - 1) * t * tp) / 512;
 
 6279        d[5][1] = -(rp * r3m * r3p * (27 * s * s - 18 * s - 1) * t * tp) / 512;
 
 6280        d[6][1] = +(rp * r3m * r3p * (27 * s * s + 18 * s - 1) * t * tp) / 512;
 
 6281        d[7][1] = -(rm * r3m * r3p * (27 * s * s + 18 * s - 1) * t * tp) / 512;
 
 6282        d[8][1] = -(rm * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * tp) / 256;
 
 6283        d[9][1] = +(rp * r3m * r3p * (27 * s * s - 18 * s - 1) * tm * tp) / 256;
 
 6284        d[10][1] = -(rp * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * tp) / 256;
 
 6285        d[11][1] = +(rm * r3m * r3p * (27 * s * s + 18 * s - 1) * tm * tp) / 256;
 
 6286        d[12][1] = -(9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * tm * t) / 512;
 
 6287        d[13][1] = +(9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * tm * t) / 512;
 
 6288        d[14][1] = -(9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * t) / 512;
 
 6289        d[15][1] = +(81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * tm * t) / 512;
 
 6290        d[16][1] = -(81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * tm * t) / 512;
 
 6291        d[17][1] = +(9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * t) / 512;
 
 6292        d[18][1] = +(9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * t) / 512;
 
 6293        d[19][1] = -(81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * tm * t) / 512;
 
 6294        d[20][1] = +(81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * tm * t) / 512;
 
 6295        d[21][1] = -(9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * t) / 512;
 
 6296        d[22][1] = +(9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * tm * t) / 512;
 
 6297        d[23][1] = -(9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * tm * t) / 512;
 
 6298        d[24][1] = -(9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * t * tp) / 512;
 
 6299        d[25][1] = +(9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * t * tp) / 512;
 
 6300        d[26][1] = -(9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * t * tp) / 512;
 
 6301        d[27][1] = +(81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * t * tp) / 512;
 
 6302        d[28][1] = -(81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * t * tp) / 512;
 
 6303        d[29][1] = +(9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * t * tp) / 512;
 
 6304        d[30][1] = +(9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * t * tp) / 512;
 
 6305        d[31][1] = -(81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * t * tp) / 512;
 
 6306        d[32][1] = +(81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * t * tp) / 512;
 
 6307        d[33][1] = -(9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * t * tp) / 512;
 
 6308        d[34][1] = +(9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * t * tp) / 512;
 
 6309        d[35][1] = -(9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * t * tp) / 512;
 
 6310        d[36][1] = +(9 * rm * rp * r3m * (27 * s * s - 18 * s - 1) * tm * tp) / 256;
 
 6311        d[37][1] = -(9 * rm * rp * r3p * (27 * s * s - 18 * s - 1) * tm * tp) / 256;
 
 6312        d[38][1] = +(9 * rm * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * tp) / 256;
 
 6313        d[39][1] = -(81 * rm * rp * r3m * (9 * s * s - 2 * s - 3) * tm * tp) / 256;
 
 6314        d[40][1] = +(81 * rm * rp * r3p * (9 * s * s - 2 * s - 3) * tm * tp) / 256;
 
 6315        d[41][1] = -(9 * rp * r3m * r3p * (9 * s * s - 2 * s - 3) * tm * tp) / 256;
 
 6316        d[42][1] = -(9 * rm * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * tp) / 256;
 
 6317        d[43][1] = +(81 * rm * rp * r3m * (9 * s * s + 2 * s - 3) * tm * tp) / 256;
 
 6318        d[44][1] = -(81 * rm * rp * r3p * (9 * s * s + 2 * s - 3) * tm * tp) / 256;
 
 6319        d[45][1] = +(9 * rp * r3m * r3p * (9 * s * s + 2 * s - 3) * tm * tp) / 256;
 
 6320        d[46][1] = -(9 * rm * rp * r3m * (27 * s * s + 18 * s - 1) * tm * tp) / 256;
 
 6321        d[47][1] = +(9 * rm * rp * r3p * (27 * s * s + 18 * s - 1) * tm * tp) / 256;
 
 6322        d[0][2] = +(rm * r3m * r3p * sm * s3m * s3p * t2m) / 512;
 
 6323        d[1][2] = -(rp * r3m * r3p * sm * s3m * s3p * t2m) / 512;
 
 6324        d[2][2] = +(rp * r3m * r3p * sp * s3m * s3p * t2m) / 512;
 
 6325        d[3][2] = -(rm * r3m * r3p * sp * s3m * s3p * t2m) / 512;
 
 6326        d[4][2] = +(rm * r3m * r3p * sm * s3m * s3p * t2p) / 512;
 
 6327        d[5][2] = -(rp * r3m * r3p * sm * s3m * s3p * t2p) / 512;
 
 6328        d[6][2] = +(rp * r3m * r3p * sp * s3m * s3p * t2p) / 512;
 
 6329        d[7][2] = -(rm * r3m * r3p * sp * s3m * s3p * t2p) / 512;
 
 6330        d[8][2] = -(rm * r3m * r3p * sm * s3m * s3p * t) / 128;
 
 6331        d[9][2] = +(rp * r3m * r3p * sm * s3m * s3p * t) / 128;
 
 6332        d[10][2] = -(rp * r3m * r3p * sp * s3m * s3p * t) / 128;
 
 6333        d[11][2] = +(rm * r3m * r3p * sp * s3m * s3p * t) / 128;
 
 6334        d[12][2] = -(9 * rm * rp * r3m * sm * s3m * s3p * t2m) / 512;
 
 6335        d[13][2] = +(9 * rm * rp * r3p * sm * s3m * s3p * t2m) / 512;
 
 6336        d[14][2] = -(9 * rm * r3m * r3p * sm * sp * s3m * t2m) / 512;
 
 6337        d[15][2] = +(81 * rm * rp * r3m * sm * sp * s3m * t2m) / 512;
 
 6338        d[16][2] = -(81 * rm * rp * r3p * sm * sp * s3m * t2m) / 512;
 
 6339        d[17][2] = +(9 * rp * r3m * r3p * sm * sp * s3m * t2m) / 512;
 
 6340        d[18][2] = +(9 * rm * r3m * r3p * sm * sp * s3p * t2m) / 512;
 
 6341        d[19][2] = -(81 * rm * rp * r3m * sm * sp * s3p * t2m) / 512;
 
 6342        d[20][2] = +(81 * rm * rp * r3p * sm * sp * s3p * t2m) / 512;
 
 6343        d[21][2] = -(9 * rp * r3m * r3p * sm * sp * s3p * t2m) / 512;
 
 6344        d[22][2] = +(9 * rm * rp * r3m * sp * s3m * s3p * t2m) / 512;
 
 6345        d[23][2] = -(9 * rm * rp * r3p * sp * s3m * s3p * t2m) / 512;
 
 6346        d[24][2] = -(9 * rm * rp * r3m * sm * s3m * s3p * t2p) / 512;
 
 6347        d[25][2] = +(9 * rm * rp * r3p * sm * s3m * s3p * t2p) / 512;
 
 6348        d[26][2] = -(9 * rm * r3m * r3p * sm * sp * s3m * t2p) / 512;
 
 6349        d[27][2] = +(81 * rm * rp * r3m * sm * sp * s3m * t2p) / 512;
 
 6350        d[28][2] = -(81 * rm * rp * r3p * sm * sp * s3m * t2p) / 512;
 
 6351        d[29][2] = +(9 * rp * r3m * r3p * sm * sp * s3m * t2p) / 512;
 
 6352        d[30][2] = +(9 * rm * r3m * r3p * sm * sp * s3p * t2p) / 512;
 
 6353        d[31][2] = -(81 * rm * rp * r3m * sm * sp * s3p * t2p) / 512;
 
 6354        d[32][2] = +(81 * rm * rp * r3p * sm * sp * s3p * t2p) / 512;
 
 6355        d[33][2] = -(9 * rp * r3m * r3p * sm * sp * s3p * t2p) / 512;
 
 6356        d[34][2] = +(9 * rm * rp * r3m * sp * s3m * s3p * t2p) / 512;
 
 6357        d[35][2] = -(9 * rm * rp * r3p * sp * s3m * s3p * t2p) / 512;
 
 6358        d[36][2] = +(9 * rm * rp * r3m * sm * s3m * s3p * t) / 128;
 
 6359        d[37][2] = -(9 * rm * rp * r3p * sm * s3m * s3p * t) / 128;
 
 6360        d[38][2] = +(9 * rm * r3m * r3p * sm * sp * s3m * t) / 128;
 
 6361        d[39][2] = -(81 * rm * rp * r3m * sm * sp * s3m * t) / 128;
 
 6362        d[40][2] = +(81 * rm * rp * r3p * sm * sp * s3m * t) / 128;
 
 6363        d[41][2] = -(9 * rp * r3m * r3p * sm * sp * s3m * t) / 128;
 
 6364        d[42][2] = -(9 * rm * r3m * r3p * sm * sp * s3p * t) / 128;
 
 6365        d[43][2] = +(81 * rm * rp * r3m * sm * sp * s3p * t) / 128;
 
 6366        d[44][2] = -(81 * rm * rp * r3p * sm * sp * s3p * t) / 128;
 
 6367        d[45][2] = +(9 * rp * r3m * r3p * sm * sp * s3p * t) / 128;
 
 6368        d[46][2] = -(9 * rm * rp * r3m * sp * s3m * s3p * t) / 128;
 
 6369        d[47][2] = +(9 * rm * rp * r3p * sp * s3m * s3p * t) / 128;
 
 6372    static const int num_nodes = 48;
 
 6373    static const int num_faces = 6;
 
 6374    static const int num_dimensions = 3;
 
 6375    static const int order = 8;
 
 6376    typedef IS_HE ischeme_type;
 
 6378    static ischeme_type create_ischeme() {
 
 6379        ischeme_type ischeme;
 
 6380        ischeme[0].set_order(3);
 
 6381        ischeme[1].set_order(3);
 
 6382        ischeme[2].set_order(2);
 
 6386    static ischeme_type create_ischeme(SolidMechanics& property) {
 
 6387        ischeme_type ischeme;
 
 6388        ischeme[0].set_order(2 * 3);
 
 6389        ischeme[1].set_order(2 * 3);
 
 6390        ischeme[2].set_order(2 * 2);
 
 6391        ischeme.init(property);
 
 6395    static const double r_node[48];
 
 6396    static const double s_node[48];
 
 6397    static const double t_node[48];
 
 6399    static const bool supports_laminates = 
true;
 
 6401    static const char name[8];
 
 6403    typedef L4_Shape_Evaluator edge_shape_type_0;
 
 6404    typedef L3_Shape_Evaluator edge_shape_type_1;
 
 6405    static const int num_edge = 12;
 
 6406    static const int edge_node[12][4];
 
 6407    static const int edge_type_index[12];
 
 6409    typedef Q4X3_Shape_Evaluator face_shape_type_0;
 
 6410    typedef Q16_Shape_Evaluator face_shape_type_1;
 
 6411    static const int num_face = 6;
 
 6412    static const int face_node[6][16];
 
 6413    static const int face_type_index[6];
 
 6414    static const bool is_t_face[6];
 
 6417typedef Solid_Shape_Evaluator<HE4X4X3_Shape_Helper> HE4X4X3_Shape_Evaluator;
 
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
 
T norm_3(T a[3])
Definition b2tensor_calculus.H:364
 
T normalise_3(T a[3])
Definition b2tensor_calculus.H:418
 
void outer_product_3(const T1 a[3], const T2 b[3], T3 c[3])
Definition b2tensor_calculus.H:389