SmartPtr<IElemProlongation<TDomain> > GetStandardElementProlongation(const LFEID& lfeid) { switch(lfeid.type()){ case LFEID::LAGRANGE: if(lfeid.order() == 1) return make_sp(new P1LagrangeElemTransfer<TDomain>(lfeid)); else return make_sp(new StdLagrangeElemTransfer<TDomain>(lfeid)); case LFEID::PIECEWISE_CONSTANT: return make_sp(new PiecewiseConstantElemTransfer<TDomain>(lfeid)); case LFEID::CROUZEIX_RAVIART: return make_sp(new CrouzeixRaviartElemTransfer<TDomain>(lfeid)); default: UG_THROW("No Standard Element Prolongation found for "<<lfeid); } }
void ConvectionDiffusionFE<Domain2d>:: register_all_funcs(const LFEID& lfeid, const int quadOrder) { register_func<RegularEdge, DimFEGeometry<dim, 1> >(); const int order = lfeid.order(); if(quadOrder != 2*order+1 || lfeid.type() != LFEID::LAGRANGE) { register_func<Triangle, DimFEGeometry<dim> >(); register_func<Quadrilateral, DimFEGeometry<dim> >(); return; } // special compiled cases // Triangle switch(order) { case 1: {typedef FEGeometry<Triangle, dim, LagrangeLSFS<ReferenceTriangle, 1>, GaussQuadrature<ReferenceTriangle, 3> > FEGeom; register_func<Triangle, FEGeom >(); break;} case 2: {typedef FEGeometry<Triangle, dim, LagrangeLSFS<ReferenceTriangle, 2>, GaussQuadrature<ReferenceTriangle, 5> > FEGeom; register_func<Triangle, FEGeom >(); break;} case 3: {typedef FEGeometry<Triangle, dim, LagrangeLSFS<ReferenceTriangle, 3>, GaussQuadrature<ReferenceTriangle, 7> > FEGeom; register_func<Triangle, FEGeom >(); break;} default: register_func<Triangle, DimFEGeometry<dim> >(); break; } // Quadrilateral switch(order) { case 1: {typedef FEGeometry<Quadrilateral, dim, LagrangeLSFS<ReferenceQuadrilateral, 1>, GaussQuadrature<ReferenceQuadrilateral, 3> > FEGeom; register_func<Quadrilateral, FEGeom >(); break;} case 2: {typedef FEGeometry<Quadrilateral, dim, LagrangeLSFS<ReferenceQuadrilateral, 2>, GaussQuadrature<ReferenceQuadrilateral, 7> > FEGeom; register_func<Quadrilateral, FEGeom >(); break;} case 3: {typedef FEGeometry<Quadrilateral, dim, LagrangeLSFS<ReferenceQuadrilateral, 3>, GaussQuadrature<ReferenceQuadrilateral, 11> > FEGeom; register_func<Quadrilateral, FEGeom >(); break;} default: register_func<Quadrilateral, DimFEGeometry<dim> >(); break; } }
void ConvectionDiffusionFE<Domain3d>:: register_all_funcs(const LFEID& lfeid, const int quadOrder) { register_func<RegularEdge, DimFEGeometry<dim, 1> >(); register_func<Triangle, DimFEGeometry<dim, 2> >(); register_func<Quadrilateral, DimFEGeometry<dim, 2> >(); const int order = lfeid.order(); if(quadOrder != 2*order+1 || lfeid.type() != LFEID::LAGRANGE) { register_func<Tetrahedron, DimFEGeometry<dim> >(); register_func<Prism, DimFEGeometry<dim> >(); register_func<Pyramid, DimFEGeometry<dim> >(); register_func<Hexahedron, DimFEGeometry<dim> >(); register_func<Octahedron, DimFEGeometry<dim> >(); return; } // special compiled cases // Tetrahedron switch(order) { case 1: {typedef FEGeometry<Tetrahedron, dim, LagrangeLSFS<ReferenceTetrahedron, 1>, GaussQuadrature<ReferenceTetrahedron, 3> > FEGeom; register_func<Tetrahedron, FEGeom >(); break;} case 2: {typedef FEGeometry<Tetrahedron, dim, LagrangeLSFS<ReferenceTetrahedron, 2>, GaussQuadrature<ReferenceTetrahedron, 5> > FEGeom; register_func<Tetrahedron, FEGeom >(); break;} case 3: {typedef FEGeometry<Tetrahedron, dim, LagrangeLSFS<ReferenceTetrahedron, 3>, GaussQuadrature<ReferenceTetrahedron, 7> > FEGeom; register_func<Tetrahedron, FEGeom >(); break;} default: register_func<Tetrahedron, DimFEGeometry<dim> >(); break; } // Prism switch(order) { default: register_func<Prism, DimFEGeometry<dim> >(); break; } // Pyramid switch(order) { default: register_func<Pyramid, DimFEGeometry<dim> >(); break; } // Octahedron switch(order) { default: register_func<Octahedron, DimFEGeometry<dim> >(); break; } // Hexahedron switch(order) { case 1: {typedef FEGeometry<Hexahedron, dim, LagrangeLSFS<ReferenceHexahedron, 1>, GaussQuadrature<ReferenceHexahedron, 3> > FEGeom; register_func<Hexahedron, FEGeom >(); break;} case 2: {typedef FEGeometry<Hexahedron, dim, LagrangeLSFS<ReferenceHexahedron, 2>, GaussQuadrature<ReferenceHexahedron, 7> > FEGeom; register_func<Hexahedron, FEGeom >(); break;} case 3: {typedef FEGeometry<Hexahedron, dim, LagrangeLSFS<ReferenceHexahedron, 3>, GaussQuadrature<ReferenceHexahedron, 11> > FEGeom; register_func<Hexahedron, FEGeom >(); break;} default: register_func<Hexahedron, DimFEGeometry<dim> >(); break; } }