本文整理汇总了C++中percept::PerceptMesh类的典型用法代码示例。如果您正苦于以下问题:C++ PerceptMesh类的具体用法?C++ PerceptMesh怎么用?C++ PerceptMesh使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PerceptMesh类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: setSubPatterns
void setSubPatterns( std::vector<UniformRefinerPatternBase *>& bp, percept::PerceptMesh& eMesh )
{
EXCEPTWATCH;
#if EDGE_QU4_QU9_1_BREAKER
bp = std::vector<UniformRefinerPatternBase *>(3u, 0);
#else
bp = std::vector<UniformRefinerPatternBase *>(1u, 0);
#endif
if (eMesh.get_spatial_dim() == 3)
{
bp[0] = this;
#if EDGE_QU4_QU9_1_BREAKER
bp[1] = m_face_breaker;
bp[2] = m_edge_breaker;
#endif
}
else if (eMesh.get_spatial_dim() != 3)
{
// FIXME
std::cout << "ERROR" ;
throw std::runtime_error("ERROR in shell quad class");
}
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:25,代码来源:UniformRefinerPattern_ShellQuad4_ShellQuad9_1_sierra.hpp
示例2: setSubPatterns
void setSubPatterns( std::vector<UniformRefinerPatternBase *>& bp, percept::PerceptMesh& eMesh )
{
EXCEPTWATCH;
#if EDGE_BREAKER_T6_T6
bp = std::vector<UniformRefinerPatternBase *>(2u, 0);
#else
bp = std::vector<UniformRefinerPatternBase *>(1u, 0);
#endif
if (eMesh.get_spatial_dim() == 2)
{
bp[0] = this;
#if EDGE_BREAKER_T6_T6
bp[1] = m_edge_breaker;
#endif
}
else if (eMesh.get_spatial_dim() == 3)
{
// FIXME
// std::cout << "ERROR" ;
// exit(1);
}
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:25,代码来源:UniformRefinerPattern_Tri6_Tri6_4_sierra.hpp
示例3: UniformRefinerPattern
// UniformRefinerPattern(percept::PerceptMesh& eMesh, std::string fromTopoPartName="block_1", std::string toTopoPartName="block_quad_4")
// {
// setNeededParts(eMesh, fromTopoPartName, toTopoPartName);
// }
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Quadrilateral<4>, shards::Quadrilateral<4> >(eMesh)
{
m_primaryEntityRank = eMesh.face_rank();
if (m_eMesh.get_spatial_dim() == 2)
m_primaryEntityRank = eMesh.element_rank();
setNeededParts(eMesh, block_names, true);
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:12,代码来源:UniformRefinerPattern_Quad4_Quad4_4.hpp
示例4: correctBlockNamesForPartPartConsistency
BlockNamesType RefinerUtil::correctBlockNamesForPartPartConsistency(percept::PerceptMesh& eMesh, BlockNamesType& blocks)
{
if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "RefinerUtil::correctBlockNamesForPartPartConsistency..." << std::endl;
if (blocks[eMesh.element_rank()].size() == 0)
return blocks;
stk_classic::mesh::EntityRank subDimRank = (eMesh.get_spatial_dim() == 3 ? eMesh.face_rank() : eMesh.edge_rank());
mesh::PartVector all_parts = eMesh.get_fem_meta_data()->get_parts();
for (mesh::PartVector::iterator i_part = all_parts.begin(); i_part != all_parts.end(); ++i_part)
{
mesh::Part * part = *i_part ;
for (mesh::PartVector::iterator i_surfacePart = all_parts.begin(); i_surfacePart != all_parts.end(); ++i_surfacePart)
{
mesh::Part * surfacePart = *i_surfacePart ;
if ( stk_classic::mesh::is_auto_declared_part(*surfacePart) )
continue;
const CellTopologyData * part_cell_topo_data = stk_classic::percept::PerceptMesh::get_cell_topology(*surfacePart);
CellTopology surf_topo(part_cell_topo_data);
//if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "tmp srk surfacePart= " << surfacePart->name() << " topo= " << (part_cell_topo_data?surf_topo.getName() : "NULL") << std::endl;
if (part_cell_topo_data && part->primary_entity_rank() == eMesh.element_rank() && surfacePart->primary_entity_rank() == subDimRank)
{
std::string partNamePlus = "+" + part->name();
std::vector<std::string>::iterator partInBlocks = std::find(blocks[eMesh.element_rank()].begin(), blocks[eMesh.element_rank()].end(), partNamePlus);
// if this part is not in the blocks list, skip it
if (partInBlocks == blocks[eMesh.element_rank()].end())
{
//if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "tmp srk skipping part= " << partNamePlus << std::endl;
continue;
}
std::string surfacePartNamePlus = "+" + surfacePart->name();
std::vector<std::string>::iterator surfacePartInBlocks = std::find(blocks[subDimRank].begin(), blocks[subDimRank].end(), surfacePartNamePlus);
// if this surface is already in the list, skip it
if (surfacePartInBlocks != blocks[subDimRank].end())
{
//if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "tmp srk skipping surf= " << surfacePartNamePlus << std::endl;
continue;
}
bool isBoundarySurface= eMesh.isBoundarySurface(*part, *surfacePart);
if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "tmp srk isBoundarySurface for part/surf= " << part->name() << " / " << surfacePart->name() << " = " << isBoundarySurface << std::endl;
if (isBoundarySurface)
{
if (EXTRA_PRINT_UR_GETBLOCKS) std::cout << "tmp part [" << part->name() << "] shares sideset [" << surfacePart->name() << "]" << std::endl;
blocks[subDimRank].push_back(std::string("+"+surfacePart->name()));
}
else
{
//std::cout << "tmp part [" << part->name() << "] doesn't shares sideset [" << surfacePart->name() << "]" << std::endl;
}
}
}
}
if (0) std::cout << "tmp RefinerUtil::correctBlockNamesForPartPartConsistency: blocks = " << blocks << std::endl;
return blocks;
}
开发者ID:00liujj,项目名称:trilinos,代码行数:60,代码来源:RefinerUtil.cpp
示例5: UniformRefinerPattern
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Pyramid<5>, shards::Tetrahedron<4> >(eMesh)
{
m_primaryEntityRank = eMesh.element_rank();
Elem::StdMeshObjTopologies::bootstrap();
}
开发者ID:00liujj,项目名称:trilinos,代码行数:7,代码来源:UniformRefinerPattern_Pyramid5_Pyramid5_10_sierra.hpp
示例6: UniformRefinerPattern
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Quadrilateral<4>, shards::Quadrilateral<4> >(eMesh)
{
m_primaryEntityRank = eMesh.face_rank();
if (m_eMesh.get_spatial_dim() == 2)
m_primaryEntityRank = eMesh.element_rank();
setNeededParts(eMesh, block_names, true);
Elem::StdMeshObjTopologies::bootstrap();
#if EDGE_BREAKER_Q4_Q4_4_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
}
开发者ID:00liujj,项目名称:trilinos,代码行数:17,代码来源:UniformRefinerPattern_Quad4_Quad4_4_sierra.hpp
示例7: UniformRefinerPattern
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);
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:8,代码来源:UniformRefinerPattern_ShellLine3_ShellLine3_2_sierra.hpp
示例8: setSubPatterns
void setSubPatterns( std::vector<UniformRefinerPatternBase *>& bp, percept::PerceptMesh& eMesh )
{
EXCEPTWATCH;
bp = std::vector<UniformRefinerPatternBase *>(2u, 0);
if (eMesh.get_spatial_dim() == 2)
{
bp[0] = this;
#if EDGE_BREAKER_Q4_Q8_1
bp[1] = m_edge_breaker;
#endif
}
else if (eMesh.get_spatial_dim() == 3)
{
}
}
开发者ID:00liujj,项目名称:trilinos,代码行数:17,代码来源:UniformRefinerPattern_Quad4_Quad8_1_sierra.hpp
示例9: URP_Heterogeneous_Enrich_3D
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
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:44,代码来源:URP_Heterogeneous_Enrich_3D.hpp
示例10: UniformRefinerPattern
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();
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:10,代码来源:UniformRefinerPattern_Beam2_Beam2_2_sierra.hpp
示例11: setSubPatterns
void setSubPatterns( std::vector<UniformRefinerPatternBase *>& bp, percept::PerceptMesh& eMesh )
{
EXCEPTWATCH;
bp.resize(0);
if (eMesh.get_spatial_dim() == 3)
{
bp.push_back(this);
#if EDGE_TR6_TR6_4_BREAKER
bp.push_back( m_face_breaker);
bp.push_back( m_edge_breaker);
#endif
}
else if (eMesh.get_spatial_dim() != 3)
{
// FIXME
std::cout << "ERROR" ;
throw std::runtime_error("ERROR in shell quad class");
}
}
开发者ID:00liujj,项目名称:trilinos,代码行数:21,代码来源:UniformRefinerPattern_ShellTri6_ShellTri6_4_sierra.hpp
示例12: UniformRefinerPattern
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Tetrahedron<4> , shards::Tetrahedron<10> >(eMesh)
{
m_primaryEntityRank = eMesh.element_rank();
setNeededParts(eMesh, block_names, false);
Elem::StdMeshObjTopologies::bootstrap();
#if FACE_BREAKER_TET4_TET10_1
m_subDim_breaker = new UniformRefinerPattern<shards::Triangle<3>, shards::Triangle<6>, 1, SierraPort > (eMesh, block_names) ;
#endif
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:12,代码来源:UniformRefinerPattern_Tet4_Tet10_1_sierra.hpp
示例13: UniformRefinerPattern
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
}
开发者ID:00liujj,项目名称:trilinos,代码行数:13,代码来源:UniformRefinerPattern_Pyramid5_Pyramid13_1_sierra.hpp
示例14: UniformRefinerPattern
UniformRefinerPattern(percept::PerceptMesh& eMesh, BlockNamesType block_names = BlockNamesType()) : URP<shards::Wedge<6>, shards::Wedge<6> >(eMesh)
{
m_primaryEntityRank = eMesh.element_rank();
setNeededParts(eMesh, block_names, true);
Elem::StdMeshObjTopologies::bootstrap();
#if FACE_BREAKER_W6_W6_8
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);
#endif
}
开发者ID:00liujj,项目名称:trilinos,代码行数:14,代码来源:UniformRefinerPattern_Wedge6_Wedge6_8_sierra.hpp
示例15: UniformRefinerPattern
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
}
开发者ID:00liujj,项目名称:trilinos,代码行数:24,代码来源:UniformRefinerPattern_ShellTri6_ShellTri6_4_sierra.hpp
示例16: createNewElements
void
createNewElements(percept::PerceptMesh& eMesh, NodeRegistry& nodeRegistry,
stk_classic::mesh::Entity& element, NewSubEntityNodesType& new_sub_entity_nodes, vector<stk_classic::mesh::Entity *>::iterator& element_pool,
stk_classic::mesh::FieldBase *proc_rank_field=0)
{
const CellTopologyData * const cell_topo_data = stk_classic::percept::PerceptMesh::get_cell_topology(element);
typedef boost::tuple<stk_classic::mesh::EntityId, stk_classic::mesh::EntityId, stk_classic::mesh::EntityId> tri_tuple_type;
static vector<tri_tuple_type> elems(6);
CellTopology cell_topo(cell_topo_data);
const stk_classic::mesh::PairIterRelation elem_nodes = element.relations(stk_classic::mesh::fem::FEMMetaData::NODE_RANK);
//stk_classic::mesh::Part & active = mesh->ActivePart();
//stk_classic::mesh::Part & quad4 = mesh->QuadPart();
std::vector<stk_classic::mesh::Part*> add_parts;
std::vector<stk_classic::mesh::Part*> remove_parts;
//add_parts.push_back( &active );
//FIXME
//add_parts.push_back( const_cast<mesh::Part*>( eMesh.getPart(m_toTopoPartName) ));
add_parts = m_toParts;
/**
\node[above] at (p4.side 1){2};
\node[left] at (p4.side 2){3};
\node[below] at (p4.side 3){0};
\node[right] at (p4.side 4){1};
*/
double tmp_x[3];
for (int iedge = 0; iedge < 4; iedge++)
{
double * mp = midPoint(EDGE_COORD(iedge,0), EDGE_COORD(iedge,1), eMesh.get_spatial_dim(), tmp_x);
if (!EDGE_N(iedge))
{
std::cout << "P[" << eMesh.get_rank() << " nid ## = 0 << " << std::endl;
}
eMesh.createOrGetNode(EDGE_N(iedge), mp);
}
elems[0] = tri_tuple_type(VERT_N(0), EDGE_N(0), EDGE_N(3));
elems[1] = tri_tuple_type(VERT_N(1), EDGE_N(1), EDGE_N(0));
elems[2] = tri_tuple_type(EDGE_N(0), EDGE_N(1), EDGE_N(3));
elems[3] = tri_tuple_type(VERT_N(2), EDGE_N(2), EDGE_N(1));
elems[4] = tri_tuple_type(VERT_N(3), EDGE_N(3), EDGE_N(2));
elems[5] = tri_tuple_type(EDGE_N(2), EDGE_N(3), EDGE_N(1));
// write a diagram of the refinement pattern as a vtk file, or a latex/tikz/pgf file
#define WRITE_DIAGRAM 0
#if WRITE_DIAGRAM
#endif
for (unsigned ielem=0; ielem < elems.size(); ielem++)
{
//stk_classic::mesh::Entity& newElement = eMesh.get_bulk_data()->declare_entity(Element, *element_id_pool, eMesh.getPart(interface_table::shards_Triangle_3) );
//stk_classic::mesh::Entity& newElement = eMesh.get_bulk_data()->declare_entity(Element, *element_id_pool, eMesh.getPart(interface_table::shards_Triangle_3) );
stk_classic::mesh::Entity& newElement = *(*element_pool);
if (proc_rank_field)
{
double *fdata = stk_classic::mesh::field_data( *static_cast<const ScalarFieldType *>(proc_rank_field) , newElement );
//fdata[0] = double(m_eMesh.get_rank());
fdata[0] = double(newElement.owner_rank());
}
//eMesh.get_bulk_data()->change_entity_parts( newElement, add_parts, remove_parts );
change_entity_parts(eMesh, element, newElement);
{
if (!elems[ielem].get<0>())
{
std::cout << "P[" << eMesh.get_rank() << " nid = 0 << " << std::endl;
exit(1);
}
}
eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<0>()), 0);
eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<1>()), 1);
eMesh.get_bulk_data()->declare_relation(newElement, eMesh.createOrGetNode(elems[ielem].get<2>()), 2);
set_parent_child_relations(eMesh, element, newElement, ielem);
element_pool++;
}
}
开发者ID:00liujj,项目名称:trilinos,代码行数:97,代码来源:UniformRefinerPattern_Quad4_Tri3_6.hpp
示例17: URP_Heterogeneous_3D
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
}
开发者ID:gitter-badger,项目名称:quinoa,代码行数:63,代码来源:URP_Heterogeneous_3D.hpp
示例18: createNewElements
void
createNewElements(percept::PerceptMesh& eMesh, NodeRegistry& nodeRegistry,
stk::mesh::Entity& element, NewSubEntityNodesType& new_sub_entity_nodes, vector<stk::mesh::Entity *>::iterator& element_pool,
stk::mesh::FieldBase *proc_rank_field=0)
{
const CellTopologyData * const cell_topo_data = stk::percept::PerceptMesh::get_cell_topology(element);
typedef boost::tuple<stk::mesh::EntityId, stk::mesh::EntityId> line_tuple_type;
static vector<line_tuple_type> elems(2);
CellTopology cell_topo(cell_topo_data);
const stk::mesh::PairIterRelation elem_nodes = element.relations(stk::mesh::fem::FEMMetaData::NODE_RANK);
std::vector<stk::mesh::Part*> add_parts;
std::vector<stk::mesh::Part*> remove_parts;
add_parts = m_toParts;
unsigned num_nodes_on_edge = new_sub_entity_nodes[m_eMesh.edge_rank()][0].size();
if (!num_nodes_on_edge)
return;
double coord_x[3];
for (int iedge = 0; iedge < 1; iedge++)
{
//double * mp = midPoint(EDGE_COORD(iedge,0), EDGE_COORD(iedge,1), eMesh.get_spatial_dim(), coord_x);
//double * mp = midPoint(FACE_COORD(iedge,0), FACE_COORD(iedge,1), eMesh.get_spatial_dim(), coord_x);
double * mp = midPoint(VERT_COORD(0), VERT_COORD(1), eMesh.get_spatial_dim(), coord_x);
if (!EDGE_N(iedge))
{
std::cout << "P[" << eMesh.get_rank() << " nid ## = 0 " << std::endl;
}
eMesh.createOrGetNode(EDGE_N(iedge), mp);
}
// FIXME
nodeRegistry.makeCentroidCoords(*const_cast<stk::mesh::Entity *>(&element), m_primaryEntityRank, 0u);
nodeRegistry.addToExistingParts(*const_cast<stk::mesh::Entity *>(&element), m_primaryEntityRank, 0u);
nodeRegistry.interpolateFields(*const_cast<stk::mesh::Entity *>(&element), m_primaryEntityRank, 0u);
Elem::CellTopology elem_celltopo = Elem::getCellTopology< FromTopology >();
const Elem::RefinementTopology* ref_topo_p = Elem::getRefinementTopology(elem_celltopo);
const Elem::RefinementTopology& ref_topo = *ref_topo_p;
#ifndef NDEBUG
unsigned num_child = ref_topo.num_child();
VERIFY_OP(num_child, == , 2, "createNewElements num_child problem");
bool homogeneous_child = ref_topo.homogeneous_child();
VERIFY_OP(homogeneous_child, ==, true, "createNewElements homogeneous_child");
#endif
// new_sub_entity_nodes[i][j]
//const UInt * const * child_nodes() const {
//const UInt * child_node_0 = ref_topo.child_node(0);
typedef Elem::StdMeshObjTopologies::RefTopoX RefTopoX;
RefTopoX& l2 = Elem::StdMeshObjTopologies::RefinementTopologyExtra< FromTopology > ::refinement_topology;
#define CENTROID_N NN(m_primaryEntityRank,0)
for (unsigned iChild = 0; iChild < 2; iChild++)
{
unsigned EN[2];
for (unsigned jNode = 0; jNode < 2; jNode++)
{
unsigned childNodeIdx = ref_topo.child_node(iChild)[jNode];
#ifndef NDEBUG
unsigned childNodeIdxCheck = l2[childNodeIdx].ordinal_of_node;
VERIFY_OP(childNodeIdx, ==, childNodeIdxCheck, "childNodeIdxCheck");
#endif
unsigned inode=0;
if (l2[childNodeIdx].rank_of_subcell == 0)
inode = VERT_N(l2[childNodeIdx].ordinal_of_subcell);
else if (l2[childNodeIdx].rank_of_subcell == 1)
inode = EDGE_N(l2[childNodeIdx].ordinal_of_subcell);
// else if (l2[childNodeIdx].rank_of_subcell == 2)
// inode = CENTROID_N;
EN[jNode] = inode;
}
elems[iChild] = line_tuple_type(EN[0], EN[1]);
}
#undef CENTROID_N
for (unsigned ielem=0; ielem < elems.size(); ielem++)
{
stk::mesh::Entity& newElement = *(*element_pool);
#if 0
if (proc_rank_field && proc_rank_field->rank() == m_eMesh.edge_rank()) //&& m_eMesh.get_spatial_dim()==1)
{
double *fdata = stk::mesh::field_data( *static_cast<const ScalarFieldType *>(proc_rank_field) , newElement );
//fdata[0] = double(m_eMesh.get_rank());
fdata[0] = double(newElement.owner_rank());
}
//.........这里部分代码省略.........
开发者ID:gitter-badger,项目名称:quinoa,代码行数:101,代码来源:RefinerPattern_Line2_Line2_N.hpp
示例19: color
void Colorer::
color(percept::PerceptMesh& eMesh, unsigned * elementType, stk_classic::mesh::PartVector* fromParts, stk_classic::mesh::FieldBase *element_color_field)
{
const unsigned MAX_COLORS=1000;
vector< ColorerNodeSetType > node_colors(MAX_COLORS+1);
ColorerElementSetType all_elements;
mesh::Selector selector(eMesh.get_fem_meta_data()->universal_part());
if (fromParts)
{
if (0)
{
std::cout << "tmp Colorer::color fromParts= " << *fromParts << std::endl;
std::cout << "tmp Colorer::color elementType= " << *elementType << std::endl;
for (unsigned i_part = 0; i_part < fromParts->size(); i_part++)
{
std::cout << "tmp Colorer::color i_part = " << i_part << " fromParts= " << (*fromParts)[i_part]->name() << std::endl;
}
}
selector = mesh::selectUnion(*fromParts);
}
stk_classic::mesh::BulkData& bulkData = *eMesh.get_bulk_data();
unsigned ncolor = 0;
int nelem = 0;
unsigned num_max_colors = MAX_COLORS;
if (m_noColoring)
num_max_colors = 1;
m_element_colors = vector< ColorerSetType > (num_max_colors+1);
for (unsigned icolor = 0; icolor < num_max_colors; icolor++)
{
int num_colored_this_pass = 0;
for (unsigned irank = 0; irank < m_entityRanks.size(); irank++)
{
const vector<stk_classic::mesh::Bucket*> & buckets = bulkData.buckets( m_entityRanks[irank] );
for ( vector<stk_classic::mesh::Bucket*>::const_iterator k = buckets.begin() ; k != buckets.end() ; ++k )
{
if (selector(**k))
{
stk_classic::mesh::Bucket & bucket = **k ;
bool doThisBucket = true;
const CellTopologyData * const bucket_cell_topo_data = stk_classic::percept::PerceptMesh::get_cell_topology(bucket);
shards::CellTopology topo(bucket_cell_topo_data);
if (elementType && (topo.getKey() != *elementType))
{
doThisBucket = false;
}
if (0 && doThisBucket)
{
std::cout << "tmp color = " << icolor << " bucket topo name= " << topo.getName() << " key= " << topo.getKey()
<< " elementType= " << (elementType? *elementType : 0) << " doThisBucket= " << doThisBucket << std::endl;
}
if (doThisBucket)
{
const unsigned num_elements_in_bucket = bucket.size();
nelem += num_elements_in_bucket;
for (unsigned iElement = 0; iElement < num_elements_in_bucket; iElement++)
{
stk_classic::mesh::Entity& element = bucket[iElement];
if (0)
std::cout << "tmp color = " << icolor << " bucket topo name= " << topo.getName() << " key= " << topo.getKey()
<< " elementId = " << element.identifier() << " element = " << element << std::endl;
stk_classic::mesh::EntityId elem_id = element.identifier();
if (!m_noColoring && contains(all_elements, elem_id))
continue;
bool none_in_this_color = true;
static std::vector<stk_classic::mesh::EntityId> node_ids(100);
unsigned num_node = 0;
if (!m_noColoring)
{
const stk_classic::mesh::PairIterRelation elem_nodes = element.relations( stk_classic::mesh::fem::FEMMetaData::NODE_RANK );
num_node = elem_nodes.size();
node_ids.reserve(num_node);
for (unsigned inode=0; inode < num_node; inode++)
{
stk_classic::mesh::Entity & node = *elem_nodes[ inode ].entity();
stk_classic::mesh::EntityId nid = node.identifier();
node_ids[inode] = nid;
if (contains(node_colors[icolor], nid))
{
none_in_this_color = false;
break;
}
}
}
if (none_in_this_color)
{
++num_colored_this_pass;
//.........这里部分代码省略.........
开发者ID:00liujj,项目名称:trilinos,代码行数:101,代码来源:Colorer.cpp
示例20: createNewElements
void
createNewElements(percept::PerceptMesh& eMesh, NodeRegistry& nodeRegistry,
stk_classic::mesh::Entity& element, NewSubEntityNodesType& new_sub_entity_nodes, vector<stk_classic::mesh::Entity *>::iterator& element_pool,
stk_classic::mesh::FieldBase *proc_rank_field=0)
{
const CellTopologyData * const cell_topo_data = stk_classic::percept::PerceptMesh::get_cell_topology(element);
typedef boost::tuple<stk_classic::mesh::EntityId, stk_classic::mesh::EntityId, stk_classic::mesh::EntityId> tri_tuple_type;
static vector<tri_tuple_type> elems(4);
CellTopology cell_topo(cell_topo_data);
const stk_classic::mesh::PairIterRelation elem_nodes = element.relations(stk_classic::mesh::fem::FEMMetaData::NODE_RANK);
//stk_classic::mesh::Part & active = mesh->ActivePart();
//stk_classic::mesh::Part & quad4 = mesh->QuadPart();
std::vector<stk_classic::mesh::Part*> add_parts;
std::vector<stk_classic::mesh::Part*> remove_parts;
add_parts = m_toParts;
//std::cout << "P["<< m_eMesh.get_rank() << "] add_parts = " << add_parts << std::endl;
stk_classic::mesh::EntityRank my_rank = m_primaryEntityRank;
nodeRegistry.makeCentroidCoords(*const_cast<stk_classic::mesh::Entity *>(&element), my_rank, 0u);
nodeRegistry.addToExistingParts(*const_cast<stk_classic::mesh::Entity *>(&element), my_rank, 0u);
nodeRegistry.interpolateFields(*const_cast<stk_classic::mesh::Entity *>(&element), my_rank, 0u);
#define CENTROID_N NN(m_primaryEntityRank, 0)
elems[0] = tri_tuple_type(VERT_N(0), VERT_N(1), CENTROID_N);
elems[1] = tri_tuple_type(VERT_N(1), VERT_N(2), CENTROID_N);
elems[2] = tri_tuple_type(VERT_N(2), VERT_N(3), CENTROID_N);
elems[3] = tri_tuple_type(VERT_N(3), VERT_N(0), CENTROID_N);
#undef CENTROID_N
// write a diagram of the refinement pattern as a vtk file, or a latex/tikz/pgf file
#define WRITE_DIAGRAM 0
#if WRITE_DIAGRAM
/**
\node[above] at (p4.side 1){2};
\node[left] at (p4.side 2){3};
\node[below] at (p4.side 3){0};
\node[right] at (p4.side 4){1};
*/
#endif
for (unsigned ielem=0; ielem < elems.size(); ielem++)
{
stk_classic::mesh::Entity& newElement = *(*element_pool);
//std::cout << "P["<<
|
请发表评论