📄 fe_bernstein.c
字号:
// {// case 0:// case 1:// case 2:// case 3:// case 4:// case 5:// case 6:// case 7:// return 1;// case 8:// case 9:// case 10:// case 11:// case 12:// case 13:// case 14:// case 15:// case 16:// case 17:// case 18:// case 19:// return 2; // case 20:// case 21:// case 22:// case 23:// case 24:// case 25:// return 4; // case 26:// return 8;// }// } // default:// libmesh_error(); // }// }// // The fourth-order Bernstein shape functions// case FOURTH:// {// switch (t)// {// // The 1D Bernstein defined on a three-noded edge// case EDGE2:// case EDGE3:// {// switch (n)// {// case 0:// case 1:// return 1;// case 2:// return 3; // default:// libmesh_error(); // }// } // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// {// switch (n)// {// case 0:// case 1:// case 2:// return 1;// case 3:// case 4:// case 5:// return 3;// case 6:// return 3;// default:// libmesh_error();// }// }// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD8:// case QUAD9:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// return 1;// case 4:// case 5:// case 6:// case 7:// return 3; // case 8:// return 9; // default:// libmesh_error();// }// }// // The 3D Bernsteins defined on a ten-noded tetrahedral.// case TET10:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// return 1;// case 4:// case 5:// case 6:// case 7:// case 8:// case 9:// return 3; // default:// libmesh_error();// }// }// // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// case 4:// case 5:// case 6:// case 7:// return 1;// case 8:// case 9:// case 10:// case 11:// case 12:// case 13:// case 14:// case 15:// case 16:// case 17:// case 18:// case 19:// return 3; // case 20:// case 21:// case 22:// case 23:// case 24:// case 25:// return 9; // case 26:// return 27;// }// } // default:// libmesh_error(); // }// }// // The fifth-order Bernstein shape functions// case FIFTH:// {// switch (t)// {// // The 1D Bernstein defined on a three-noded edge// case EDGE2:// case EDGE3:// {// switch (n)// {// case 0:// case 1:// return 1;// case 2:// return 4; // default:// libmesh_error(); // }// } // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// {// switch (n)// {// case 0:// case 1:// case 2:// return 1;// case 3:// case 4:// case 5:// return 4;// case 6:// return 6;// default:// libmesh_error();// }// }// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD8:// case QUAD9:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// return 1;// case 4:// case 5:// case 6:// case 7:// return 4; // case 8:// return 16; // default:// libmesh_error();// }// }// // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// case 4:// case 5:// case 6:// case 7:// return 1;// case 8:// case 9:// case 10:// case 11:// case 12:// case 13:// case 14:// case 15:// case 16:// case 17:// case 18:// case 19:// return 4; // case 20:// case 21:// case 22:// case 23:// case 24:// case 25:// return 16; // case 26:// return 64;// }// } // default:// libmesh_error(); // } // switch ElemType// } // case FIFTH// // The sixth-order Bernstein shape functions// case SIXTH:// {// switch (t)// {// // The 1D Bernstein defined on a three-noded edge// case EDGE2:// case EDGE3:// {// switch (n)// {// case 0:// case 1:// return 1;// case 2:// return 5; // default:// libmesh_error(); // }// } // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// {// switch (n)// {// case 0:// case 1:// case 2:// return 1;// case 3:// case 4:// case 5:// return 5;// case 6:// return 10;// default:// libmesh_error();// }// }// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD8:// case QUAD9:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// return 1;// case 4:// case 5:// case 6:// case 7:// return 5; // case 8:// return 25; // default:// libmesh_error();// }// }// // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// {// switch (n)// {// case 0:// case 1:// case 2:// case 3:// case 4:// case 5:// case 6:// case 7:// return 1;// case 8:// case 9:// case 10:// case 11:// case 12:// case 13:// case 14:// case 15:// case 16:// case 17:// case 18:// case 19:// return 5; // case 20:// case 21:// case 22:// case 23:// case 24:// case 25:// return 25; // case 26:// return 125;// }// } // default:// libmesh_error(); // } // switch ElemType// } // case SIXTH // default:// libmesh_error();// // } // libmesh_error();// return 0;}template <unsigned int Dim, FEFamily T>unsigned int FE<Dim,T>::n_dofs_per_elem(const ElemType t, const Order o){ switch (t) { case EDGE2: case EDGE3: return 0; case TRI3: case QUAD4: return 0; case TRI6: return ((o-1)*(o-2)/2); case QUAD8: if (o <= 2) return 0; case QUAD9: return ((o-1)*(o-1)); case HEX8: libmesh_assert(o < 2); case HEX20: libmesh_assert(o < 3); return 0; case HEX27: return ((o-1)*(o-1)*(o-1)); case TET4: libmesh_assert (o<2); case TET10: libmesh_assert (o<3); return 0; default: libmesh_error(); } libmesh_error(); return 0;// switch (o)// {// // The first-order Bernstein shape functions// case FIRST:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 0; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 0;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD8:// return 0; // // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D Bernsteins defined on a four-noded hexahedral.// case TET4:// return 0; // // The 3D Bernsteins defined on a ten-noded hexahedral.// case TET10:// return 0; // // The 3D Bernsteins defined on a 20-noded hexahedral.// case HEX20:// return 0;// // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// }// // The second-order Bernstein shape functions// case SECOND:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 1; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 0;// // The 2D tensor-product Bernsteins defined on a// // eight-noded quadrilateral.// case QUAD8:// return 0;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D Bernsteins defined on a ten-noded hexahedral.// case TET10:// return 0; // // The 3D Bernsteins defined on a 20-noded hexahedral.// case HEX20:// return 0;// // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// }// // The third-order Bernstein shape functions// case THIRD:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 2; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 1; // // The 2D tensor-product Bernsteins defined on a// // eight-noded quadrilateral.// case QUAD8:// return 4;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D Bernsteins defined on a ten-noded hexahedral.// case TET10:// return 4; // // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// }// // The fourth-order Bernstein shape functions// case FOURTH:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 3; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 3; // // The 2D tensor-product Bernsteins defined on a// // eight-noded quadrilateral.// case QUAD8:// return 9;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D Bernsteins defined on a ten-noded hexahedral.// case TET10:// return 13; // // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// }// // The fifth-order Bernstein shape functions// case FIFTH:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 4; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 6; // // The 2D tensor-product Bernsteins defined on a// // eight-noded quadrilateral.// case QUAD8:// return 16;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// }// // The sixth-order Bernstein shape functions// case SIXTH:// {// switch (t)// {// // The 1D Bernstein defined on a two-noded edge// case EDGE2:// return 5; // // The 1D Bernstein defined on a three-noded edge// case EDGE3:// return 0; // // The 2D Bernstein defined on a 6-noded triangle// case TRI6:// return 10; // // The 2D tensor-product Bernsteins defined on a// // eight-noded quadrilateral.// case QUAD8:// return 25;// // The 2D tensor-product Bernsteins defined on a// // nine-noded quadrilateral.// case QUAD9:// return 0; // // The 3D tensor-product Bernsteins defined on a// // twenty-seven noded hexahedral.// case HEX27:// return 0; // default:// libmesh_error(); // }// } // // Otherwise no DOFS per element// default:// return 0;// }}template <unsigned int Dim, FEFamily T>FEContinuity FE<Dim,T>::get_continuity() const{ return C_ZERO;}template <unsigned int Dim, FEFamily T>bool FE<Dim,T>::is_hierarchic() const{ return false;}template <unsigned int Dim, FEFamily T>bool FE<Dim,T>::shapes_need_reinit() const{ // reinit is only necessary for // approximation orders >= 3, // but we might reach that with p refinement// if(this->fe_type.order == FIRST ||// this->fe_type.order == SECOND)// return false;// else return true;}//--------------------------------------------------------------// Explicit instantiations for member functionsINSTANTIATE_MBRF(1,BERNSTEIN);INSTANTIATE_MBRF(2,BERNSTEIN);INSTANTIATE_MBRF(3,BERNSTEIN);#endif //ENABLE_HIGHER_ORDER_SHAPES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -