UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Tetrahedron<10>, shards::Tetrahedron<10> >(eMesh) { m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, true); Elem::StdMeshObjTopologies::bootstrap(); #if FACE_BREAKER_T10_T10 m_face_breaker = new UniformRefinerPattern<shards::Triangle<6>, shards::Triangle<6>, 4, SierraPort > (eMesh, block_names); #endif }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Quadrilateral<4> , shards::Triangle<3> >(eMesh) { m_primaryEntityRank = m_eMesh.face_rank(); if (m_eMesh.get_spatial_dim() == 2) m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, false); Elem::StdMeshObjTopologies::bootstrap(); #if EDGE_BREAKER_Q4_T3_6_S if (m_eMesh.get_spatial_dim() == 2) m_edge_breaker = new UniformRefinerPattern<shards::Line<2>, shards::Line<2>, 2, SierraPort > (eMesh, block_names) ; else m_edge_breaker = 0; #endif }
URP_Heterogeneous_3D(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : m_eMesh(eMesh) { m_primaryEntityRank = eMesh.element_rank(); //!setNeededParts(eMesh, block_names, true); Elem::StdMeshObjTopologies::bootstrap(); // list all types of known break patterns to be used here m_bp.resize(0); int spatialDim = eMesh.get_spatial_dim(); // refine // put them in reverse topological rank order if (spatialDim == 3) { m_bp.push_back(new UniformRefinerPattern<shards::Tetrahedron<4>, shards::Tetrahedron<4>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Hexahedron<8>, shards::Hexahedron<8>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Wedge<6>, shards::Wedge<6>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Pyramid<5>, shards::Pyramid<5>, 10, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Hexahedron<27>, shards::Hexahedron<27>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Hexahedron<20>, shards::Hexahedron<20>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Tetrahedron<10>, shards::Tetrahedron<10>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Wedge<15>, shards::Wedge<15>, 8, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::ShellQuadrilateral<4>, shards::ShellQuadrilateral<4>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back(new UniformRefinerPattern<shards::ShellTriangle<3>, shards::ShellTriangle<3>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back(new UniformRefinerPattern<shards::ShellTriangle<6>, shards::ShellTriangle<6>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back(new UniformRefinerPattern<shards::ShellQuadrilateral<8>, shards::ShellQuadrilateral<8>, 4, SierraPort > (eMesh, block_names)); // tmp FIXME #define ENABLE_DEBUG_BEAM_ELEMENTS_IN_2D 1 #if !ENABLE_DEBUG_BEAM_ELEMENTS_IN_2D m_bp.push_back(new UniformRefinerPattern<shards::Beam<2>, shards::Beam<2>, 2, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Beam<3>, shards::Beam<3>, 2, SierraPort > (eMesh, block_names)); #endif } #if ENABLE_DEBUG_BEAM_ELEMENTS_IN_2D m_bp.push_back(new UniformRefinerPattern<shards::Beam<2>, shards::Beam<2>, 2, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Beam<3>, shards::Beam<3>, 2, SierraPort > (eMesh, block_names)); #endif m_bp.push_back(new UniformRefinerPattern<shards::Quadrilateral<4>, shards::Quadrilateral<4>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back(new UniformRefinerPattern<shards::Triangle<3>, shards::Triangle<3>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back(new UniformRefinerPattern<shards::Triangle<6>, shards::Triangle<6>, 4, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Quadrilateral<9>, shards::Quadrilateral<9>, 4, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Quadrilateral<8>, shards::Quadrilateral<8>, 4, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Line<2>, shards::Line<2>, 2, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Line<3>, shards::Line<3>, 2, SierraPort > (eMesh, block_names)); #if 0 m_bp.push_back(new UniformRefinerPattern<shards::ShellLine<2>, shards::ShellLine<2>, 2, SierraPort > (eMesh, block_names)); #endif }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::ShellTriangle<6>, shards::ShellTriangle<6> >(eMesh) { if (m_eMesh.get_spatial_dim() != 3) { throw std::runtime_error("can't refine shell elements in 2D"); } m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, true); Elem::StdMeshObjTopologies::bootstrap(); #if EDGE_TR6_TR6_4_BREAKER //m_edge_breaker = Teuchos::rcp( new UniformRefinerPattern<shards::Line<2>, shards::Line<2>, 2, SierraPort > (eMesh, block_names) ); if (m_eMesh.get_spatial_dim() == 3) { m_edge_breaker = new UniformRefinerPattern<shards::ShellLine<3>, shards::ShellLine<3>, 2, SierraPort > (eMesh, block_names) ; m_face_breaker = new UniformRefinerPattern<shards::Triangle<6>, shards::Triangle<6>, 4, SierraPort > (eMesh, block_names) ; } #endif }
//UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Pyramid<5>, shards::Pyramid<5> >(eMesh), m_eMesh(eMesh) UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : m_eMesh(eMesh) { m_primaryEntityRank = eMesh.element_rank(); Elem::StdMeshObjTopologies::bootstrap(); // list all types of known break patterns to be used here m_bp.resize(0); m_bp.push_back(new UniformRefinerPattern<shards::Pyramid<5>, shards::Pyramid<5>, 6, SierraPort > (eMesh, block_names)); m_bp.push_back(new UniformRefinerPattern<shards::Pyramid<5>, shards::Tetrahedron<4>, 4, SierraPort > (eMesh, block_names)); bool sameTopology = false; //setNeededParts(eMesh, block_names, sameTopology); m_bp[0]->setNeededParts(eMesh, block_names, sameTopology); // force a new part for pyramids if (DEBUG_Pyramid5_Pyramid5_10) { std::cout << "tmp Pyramid5_Pyramid5_10 printParts m_bp[0]= " ; printParts(m_bp[0]); } m_bp[1]->setNeededParts(eMesh, block_names, sameTopology); if (DEBUG_Pyramid5_Pyramid5_10) { std::cout << "tmp Pyramid5_Pyramid5_10 printParts m_bp[1]= " ; printParts(m_bp[1]); } for (int ibp=0; ibp < 2; ibp++) { stk_classic::mesh::PartVector& fromParts = m_bp[ibp]->getFromParts(); for (unsigned ii=0; ii < fromParts.size(); ii++) { if (std::find(getFromParts().begin(), getFromParts().end(), fromParts[ii]) == getFromParts().end()) { getFromParts().push_back(fromParts[ii]); } } stk_classic::mesh::PartVector& toParts = m_bp[ibp]->getToParts(); for (unsigned ii=0; ii < toParts.size(); ii++) { if (std::find(getToParts().begin(), getToParts().end(), toParts[ii]) == getToParts().end()) { getToParts().push_back(toParts[ii]); } } } if (DEBUG_Pyramid5_Pyramid5_10) { std::cout << "tmp Pyramid5_Pyramid5_10 printParts this= " ; printParts(this); } m_face_breaker = new UniformRefinerPattern<shards::Quadrilateral<4>, shards::Quadrilateral<4>, 4, SierraPort > (eMesh, block_names) ; m_face_breaker_tri = new UniformRefinerPattern<shards::Triangle<3>, shards::Triangle<3>, 4, SierraPort > (eMesh, block_names); }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Pyramid<5>, shards::Tetrahedron<4> >(eMesh) { m_primaryEntityRank = eMesh.element_rank(); Elem::StdMeshObjTopologies::bootstrap(); }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Quadrilateral<4> , shards::Triangle<3> >(eMesh) { EXCEPTWATCH; m_primaryEntityRank = eMesh.face_rank(); if (m_eMesh.get_spatial_dim() == 2) m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, false); }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::ShellLine<3>, shards::ShellLine<3> >(eMesh) { m_primaryEntityRank = m_eMesh.edge_rank(); if (m_eMesh.get_spatial_dim() == 1) m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, true); }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Beam<2>, shards::Beam<2> >(eMesh) { // m_primaryEntityRank = m_eMesh.edge_rank(); // if (m_eMesh.get_spatial_dim() == 1) m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, true); Elem::StdMeshObjTopologies::bootstrap(); }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Pyramid<5> , shards::Pyramid<13> >(eMesh) { m_primaryEntityRank = eMesh.element_rank(); setNeededParts(eMesh, block_names, false); Elem::StdMeshObjTopologies::bootstrap(); #if FACE_BREAKER_P5_P13_1 m_subDim_breaker = new UniformRefinerPattern<shards::Triangle<3>, shards::Triangle<6>, 1, SierraPort > (eMesh, block_names) ; m_subDim_breaker_quad = new UniformRefinerPattern<shards::Quadrilateral<4>, shards::Quadrilateral<9>, 1, SierraPort > (eMesh, block_names); #endif }
URP_Heterogeneous_Enrich_3D(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : m_eMesh(eMesh) { m_primaryEntityRank = eMesh.element_rank(); Elem::StdMeshObjTopologies::bootstrap(); // list all types of known break patterns to be used here m_bp.resize(0); int spatialDim = eMesh.get_spatial_dim(); // refine // put them in reverse topological rank order if (spatialDim != 3) { throw std::runtime_error("URP_Heterogeneous_Enrich_3D is only for 3D meshes"); } // // refine // m_bp.push_back( new UniformRefinerPattern<shards::Hexahedron<8>, shards::Hexahedron<8>, 8, SierraPort > (eMesh, block_names) ); // m_bp.push_back( new UniformRefinerPattern<shards::Wedge<6>, shards::Wedge<6>, 8, SierraPort > (eMesh, block_names) ); // m_bp.push_back( new UniformRefinerPattern<shards::Tetrahedron<4>, shards::Tetrahedron<4>, 8, SierraPort > (eMesh, block_names) ); // enrich m_bp.push_back ( new UniformRefinerPattern< shards::Wedge<6>, shards::Wedge<15>, 1, SierraPort > (eMesh, block_names) ); m_bp.push_back ( new UniformRefinerPattern<shards::Tetrahedron<4>, shards::Tetrahedron<10>, 1, SierraPort > (eMesh, block_names) ); m_bp.push_back ( new UniformRefinerPattern<shards::Hexahedron<8>, shards::Hexahedron<27>, 1, SierraPort > (eMesh, block_names) ); m_bp.push_back ( new UniformRefinerPattern< shards::Pyramid<5>, shards::Pyramid<13>, 1, SierraPort > (eMesh, block_names) ); //m_bp.push_back( new UniformRefinerPattern<shards::ShellQuadrilateral<4>, shards::ShellQuadrilateral<9>, 1, SierraPort > (eMesh, block_names) ); //m_bp.push_back( new UniformRefinerPattern<shards::ShellTriangle<3>, shards::ShellTriangle<3>, 4, SierraPort > (eMesh, block_names) ); #if FACE_BREAKER_HETERO_ENRICH_3D m_bp.push_back( new UniformRefinerPattern<shards::Quadrilateral<4>, shards::Quadrilateral<4>, 4, SierraPort > (eMesh, block_names) ); m_bp.push_back( new UniformRefinerPattern<shards::Triangle<3>, shards::Triangle<3>, 4, SierraPort > (eMesh, block_names) ); #endif }