|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include "TestUtil.hpp"#include "moab/Core.hpp"#include "MBTagConventions.hpp"#include "moab/CN.hpp"#include "moab/Range.hpp"#include "moab/GeomTopoTool.hpp"#include <cmath>#include <algorithm>
Include dependency graph for cub_file_test.cpp:Go to the source code of this file.
Functions | |
| void | read_file (Interface &moab, const std::string &input_file) |
| void | check_adj_ho_nodes (Interface &moab, EntityHandle entity) |
| void | check_ho_element (Interface &moab, EntityHandle entity, int mid_nodes[4]) |
| void | test_ho_elements (EntityType type, int num_nodes) |
| void | test_vertices () |
| void | test_edges () |
| void | test_quads () |
| void | test_hexes () |
| void | test_geometric_topology () |
| void | test_geometric_sets () |
| void | test_blocks () |
| void | test_side_sets () |
| void | test_node_sets () |
| void | test_tri6 () |
| void | test_tri7 () |
| void | test_quad5 () |
| void | test_quad8 () |
| void | test_quad9 () |
| void | test_tet8 () |
| void | test_tet10 () |
| void | test_tet14 () |
| void | test_hex9 () |
| void | test_hex20 () |
| void | test_hex27 () |
| void | test_multiple_files () |
| void | test_cubit12 () |
| void | test_cubit14 () |
| int | main () |
| void | test_element (const std::string &filename, EntityType type, int num_elem, int node_per_elem, const int *conn_list) |
| template<int L> | |
| std::vector< int > | find_parents (const int parent_conn[][L], int num_parent, int id) |
| int | check_geometric_set (Interface &moab, int dim, int id, const int *children, int num_children, std::vector< int > parents) |
| void | test_bc_sets (const char *tag_name, unsigned count, const int *ids, const std::vector< int > set_surfs[]) |
| static EntityHandle | find_side (Interface &moab, EntityHandle entity, int side_dim, int side_num) |
Variables | |
| static const std::string | input_file_1 = std::string( TestDir + "unittest/io/test.cub" ) |
| Input test file: test.cub Cubit 10.2 file. File contains: Two merged 10x10x10 bricks sharing a single surface (surface 6). | |
| static const std::string | ho_file = std::string( TestDir + "unittest/io/ho_test.cub" ) |
| static const std::string | cubit12_file = std::string( TestDir + "unittest/io/cubtest12.cub" ) |
| static const std::string | cubit14_file = std::string( TestDir + "unittest/io/cubtest14.cub" ) |
| void check_adj_ho_nodes | ( | Interface & | moab, |
| EntityHandle | entity | ||
| ) |
Definition at line 713 of file cub_file_test.cpp.
References CHECK_EQUAL, CHECK_ERR, dim, moab::CN::Dimension(), ErrorCode, find_side(), moab::Interface::get_connectivity(), moab::CN::HasMidNodes(), moab::CN::HONodeIndex(), moab::CN::NumSubEntities(), and moab::TYPE_FROM_HANDLE().
Referenced by test_ho_elements().
{
EntityType type = TYPE_FROM_HANDLE( entity );
const EntityHandle* conn;
int conn_len;
ErrorCode rval = moab.get_connectivity( entity, conn, conn_len );CHECK_ERR( rval );
int ho[4];
CN::HasMidNodes( type, conn_len, ho );
for( int dim = CN::Dimension( type ) - 1; dim > 0; --dim )
{
if( !ho[dim] ) continue;
for( int j = 0; j < CN::NumSubEntities( type, dim ); ++j )
{
EntityHandle side = find_side( moab, entity, dim, j );
if( !side ) continue;
const EntityHandle* side_conn;
int side_len;
rval = moab.get_connectivity( side, side_conn, side_len );CHECK_ERR( rval );
int this_idx = CN::HONodeIndex( type, conn_len, dim, j );
int side_idx = CN::HONodeIndex( TYPE_FROM_HANDLE( side ), side_len, dim, 0 );
CHECK_EQUAL( side_conn[side_idx], conn[this_idx] );
}
}
}
| int check_geometric_set | ( | Interface & | moab, |
| int | dim, | ||
| int | id, | ||
| const int * | children, | ||
| int | num_children, | ||
| std::vector< int > | parents | ||
| ) |
Definition at line 354 of file cub_file_test.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, dim, dim_tag, ErrorCode, moab::Range::front(), geom, moab::Interface::get_child_meshsets(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::get_parent_meshsets(), MB_TYPE_INTEGER, MBENTITYSET, rel, moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by test_geometric_topology().
{
ErrorCode rval;
Tag gid_tag, dim_tag;
rval = moab.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
rval = moab.tag_get_handle( "GEOM_DIMENSION", 1, MB_TYPE_INTEGER, dim_tag );CHECK_ERR( rval );
void* tag_vals[] = { &dim, &id };
Tag tags[] = { dim_tag, gid_tag };
Range ents;
rval = moab.get_entities_by_type_and_tag( 0, MBENTITYSET, tags, tag_vals, 2, ents );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)ents.size() );
const EntityHandle geom = ents.front();
std::vector< int > exp_rel, act_rel;
std::vector< EntityHandle > rel;
if( num_children )
{
exp_rel.resize( num_children );
std::copy( children, children + num_children, exp_rel.begin() );
std::sort( exp_rel.begin(), exp_rel.end() );
rel.clear();
rval = moab.get_child_meshsets( geom, rel );CHECK_ERR( rval );
CHECK_EQUAL( num_children, (int)rel.size() );
act_rel.resize( rel.size() );
rval = moab.tag_get_data( gid_tag, &rel[0], rel.size(), &act_rel[0] );CHECK_ERR( rval );
std::sort( act_rel.begin(), act_rel.end() );
CHECK( exp_rel == act_rel );
}
if( !parents.empty() )
{
exp_rel = parents;
std::sort( exp_rel.begin(), exp_rel.end() );
rel.clear();
rval = moab.get_parent_meshsets( geom, rel );CHECK_ERR( rval );
CHECK_EQUAL( parents.size(), rel.size() );
act_rel.resize( rel.size() );
rval = moab.tag_get_data( gid_tag, &rel[0], rel.size(), &act_rel[0] );CHECK_ERR( rval );
std::sort( act_rel.begin(), act_rel.end() );
CHECK( exp_rel == act_rel );
}
return 0;
}
| void check_ho_element | ( | Interface & | moab, |
| EntityHandle | entity, | ||
| int | mid_nodes[4] | ||
| ) |
Definition at line 745 of file cub_file_test.cpp.
References CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, moab::CN::Dimension(), ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_coords(), moab::CN::HONodeParent(), moab::CN::NumSubEntities(), moab::CN::SubEntityType(), moab::CN::SubEntityVertexIndices(), moab::TYPE_FROM_HANDLE(), and moab::CN::VerticesPerEntity().
Referenced by check_ho_elements(), and test_ho_elements().
{
// get element info
const EntityType type = TYPE_FROM_HANDLE( entity );
const EntityHandle* conn;
int conn_len;
ErrorCode rval = moab.get_connectivity( entity, conn, conn_len );CHECK_ERR( rval );
std::vector< double > coords( 3 * conn_len );
rval = moab.get_coords( conn, conn_len, &coords[0] );CHECK_ERR( rval );
// calculate and verify expected number of mid nodes
int num_nodes = CN::VerticesPerEntity( type );
for( int d = 1; d <= CN::Dimension( type ); ++d )
if( mid_nodes[d] ) num_nodes += CN::NumSubEntities( type, d );
CHECK_EQUAL( num_nodes, conn_len );
// verify that each higher-order node is at the center
// of its respective sub-entity.
for( int i = CN::VerticesPerEntity( type ); i < num_nodes; ++i )
{
// get sub-entity owning ho-node
int sub_dim, sub_num;
CN::HONodeParent( type, num_nodes, i, sub_dim, sub_num );
// get corner vertex indices
int sub_conn[8], num_sub;
if( sub_dim < CN::Dimension( type ) )
{
CN::SubEntityVertexIndices( type, sub_dim, sub_num, sub_conn );
EntityType sub_type = CN::SubEntityType( type, sub_dim, sub_num );
num_sub = CN::VerticesPerEntity( sub_type );
}
else
{
num_sub = CN::VerticesPerEntity( type );
for( int j = 0; j < num_sub; ++j )
sub_conn[j] = j;
}
// calculate mean of corner vertices
double mean[3] = { 0, 0, 0 };
for( int j = 0; j < num_sub; ++j )
{
int co = 3 * sub_conn[j];
mean[0] += coords[co];
mean[1] += coords[co + 1];
mean[2] += coords[co + 2];
}
mean[0] /= num_sub;
mean[1] /= num_sub;
mean[2] /= num_sub;
// verify that higher-order node is at expected location
CHECK_REAL_EQUAL( mean[0], coords[3 * i], 1e-6 );
CHECK_REAL_EQUAL( mean[1], coords[3 * i + 1], 1e-6 );
CHECK_REAL_EQUAL( mean[2], coords[3 * i + 2], 1e-6 );
}
}
| std::vector< int > find_parents | ( | const int | parent_conn[][L], |
| int | num_parent, | ||
| int | id | ||
| ) |
Definition at line 341 of file cub_file_test.cpp.
{
std::vector< int > results;
for( int i = 0; i < num_parent; ++i )
{
for( int j = 0; j < L; ++j )
{
if( parent_conn[i][j] == id ) results.push_back( i + 1 );
}
}
return results;
}
| static EntityHandle find_side | ( | Interface & | moab, |
| EntityHandle | entity, | ||
| int | side_dim, | ||
| int | side_num | ||
| ) | [static] |
Definition at line 669 of file cub_file_test.cpp.
References CHECK_ERR, ErrorCode, moab::Interface::get_adjacencies(), moab::Interface::get_connectivity(), moab::CN::SubEntityType(), moab::CN::SubEntityVertexIndices(), moab::TYPE_FROM_HANDLE(), and moab::CN::VerticesPerEntity().
Referenced by check_adj_ho_nodes().
{
ErrorCode rval;
std::vector< EntityHandle > adj;
rval = moab.get_adjacencies( &entity, 1, side_dim, false, adj );CHECK_ERR( rval );
int sub_ent_indices[4];
CN::SubEntityVertexIndices( TYPE_FROM_HANDLE( entity ), side_dim, side_num, sub_ent_indices );
EntityType subtype = CN::SubEntityType( TYPE_FROM_HANDLE( entity ), side_dim, side_num );
int sub_ent_corners = CN::VerticesPerEntity( subtype );
const EntityHandle* conn;
int conn_len;
rval = moab.get_connectivity( entity, conn, conn_len );CHECK_ERR( rval );
for( size_t i = 0; i < adj.size(); ++i )
{
if( TYPE_FROM_HANDLE( adj[i] ) != subtype ) continue;
const EntityHandle* sub_conn;
int sub_len;
rval = moab.get_connectivity( adj[i], sub_conn, sub_len );CHECK_ERR( rval );
int n = std::find( sub_conn, sub_conn + sub_len, conn[sub_ent_indices[0]] ) - sub_conn;
if( n == sub_len ) // no vertex in common
continue;
// check forward direction
int j;
for( j = 1; j < sub_ent_corners; ++j )
if( conn[sub_ent_indices[j]] != sub_conn[( j + n ) % sub_ent_corners] ) break;
if( j == sub_ent_corners ) return adj[i];
// check reverse direction
for( j = 1; j < sub_ent_corners; ++j )
if( conn[sub_ent_indices[j]] != sub_conn[( n + sub_ent_corners - j ) % sub_ent_corners] ) break;
if( j == sub_ent_corners ) return adj[i];
}
// no match
return 0;
}
| int main | ( | ) |
Definition at line 173 of file cub_file_test.cpp.
References RUN_TEST, test_blocks(), test_cubit12(), test_cubit14(), test_edges(), test_geometric_sets(), test_geometric_topology(), test_hex20(), test_hex27(), test_hex9(), test_hexes(), test_multiple_files(), test_node_sets(), test_quad5(), test_quad8(), test_quad9(), test_quads(), test_side_sets(), test_tet10(), test_tet14(), test_tet8(), test_tri6(), test_tri7(), and test_vertices().
{
int result = 0;
result += RUN_TEST( test_vertices );
result += RUN_TEST( test_edges );
result += RUN_TEST( test_quads );
result += RUN_TEST( test_hexes );
result += RUN_TEST( test_geometric_topology );
result += RUN_TEST( test_geometric_sets );
result += RUN_TEST( test_blocks );
result += RUN_TEST( test_side_sets );
result += RUN_TEST( test_node_sets );
result += RUN_TEST( test_tri6 );
result += RUN_TEST( test_tri7 );
result += RUN_TEST( test_quad5 );
result += RUN_TEST( test_quad8 );
result += RUN_TEST( test_quad9 );
result += RUN_TEST( test_tet8 );
result += RUN_TEST( test_tet10 );
result += RUN_TEST( test_tet14 );
result += RUN_TEST( test_hex9 );
result += RUN_TEST( test_hex20 );
result += RUN_TEST( test_hex27 );
result += RUN_TEST( test_multiple_files );
result += RUN_TEST( test_cubit12 );
result += RUN_TEST( test_cubit14 );
return result;
}
Definition at line 203 of file cub_file_test.cpp.
References CHECK_ERR, ErrorCode, and moab::Interface::load_file().
Referenced by check_tag_data(), cube_edge_adjacencies_test(), cube_tri_curve_coincidence_test(), cube_tri_vertex_test(), cube_tris_connectivity_test(), cube_verts_connectivity_test(), DeformMeshRemap::execute(), main(), process_bu_auto_merge(), process_merge(), process_mo_auto_merge(), process_td_auto_merge(), read_cube_curves_test(), read_cube_surfs_test(), read_cube_tris_test(), read_cube_vertex_pos_test(), read_cube_verts_test(), read_cube_vols_test(), read_cylcube_curve_senses_test(), read_cylcube_groups_test(), read_cylcube_surf_senses_test(), test_bc_sets(), test_big_endian(), test_blocks(), test_check_groups(), test_check_meshsets(), test_check_num_entities(), test_cone_curve_facet(), test_cube_curve_facet(), test_cubit12(), test_cubit14(), test_detect_byte_order(), test_detect_type(), test_element(), test_free_vertices(), test_geometric_sets(), test_geometric_topology(), test_ho_elements(), test_little_endian(), test_loadfile_1(), test_loadfile_2(), test_meshset_tags_1(), test_meshset_tags_2(), test_multiple_files(), test_read_airfoil(), test_read_ascii(), test_read_fgh(), test_read_geom_set(), test_read_hexes(), test_read_material_on_nodes(), test_read_material_set(), test_read_material_set1(), test_read_material_set2(), test_read_nodes(), test_read_physical_set(), test_read_prisms(), test_read_quads(), test_read_side(), test_read_t1(), test_read_tets(), test_read_triangles(), test_read_write_element(), test_structured_2d(), test_structured_3d(), test_tet_tags_1(), test_tet_tags_2(), test_tets_1(), test_tets_2(), test_triangles_1(), test_triangles_2(), test_triangles_tags_1(), test_triangles_tags_2(), test_unstructured_field(), test_vertices(), test_vertices_1(), test_vertices_2(), and test_write_ascii().
{
ErrorCode rval = moab.load_file( input_file.c_str() );CHECK_ERR( rval );
}
| void test_bc_sets | ( | const char * | tag_name, |
| unsigned | count, | ||
| const int * | ids, | ||
| const std::vector< int > | set_surfs[] | ||
| ) |
Definition at line 585 of file cub_file_test.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), dim_tag, moab::Range::end(), ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_dimension(), moab::Interface::get_entities_by_type_and_tag(), input_file_1, mb, MB_TYPE_INTEGER, MBENTITYSET, read_file(), moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by test_node_sets(), and test_side_sets().
{
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, input_file_1 );
Tag ss_tag, gid_tag, dim_tag;
rval = mb.tag_get_handle( tag_name, 1, MB_TYPE_INTEGER, ss_tag );CHECK_ERR( rval );
rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
rval = mb.tag_get_handle( "GEOM_DIMENSION", 1, MB_TYPE_INTEGER, dim_tag );CHECK_ERR( rval );
// check number of sidesets and IDs
Range sidesets;
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &ss_tag, 0, 1, sidesets );CHECK_ERR( rval );
CHECK_EQUAL( count, (unsigned)sidesets.size() );
std::vector< EntityHandle > handles( count, 0 );
for( Range::iterator i = sidesets.begin(); i != sidesets.end(); ++i )
{
int id;
rval = mb.tag_get_data( ss_tag, &*i, 1, &id );CHECK_ERR( rval );
unsigned idx;
for( idx = 0; idx < count; ++idx )
if( ids[idx] == id ) break;
CHECK( idx != count );
CHECK( handles[idx] == 0 );
handles[idx] = *i;
}
// get surface faces
std::vector< Range > exp( count );
Range surfs, tmp;
Tag tags[] = { dim_tag, gid_tag };
for( unsigned i = 0; i < count; ++i )
{
exp[i].clear();
surfs.clear();
const int two = 2;
for( unsigned j = 0; j < set_surfs[i].size(); ++j )
{
const void* vals[] = { &two, &set_surfs[i][j] };
surfs.clear();
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, tags, vals, 2, surfs );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)surfs.size() );
tmp.clear();
rval = mb.get_entities_by_dimension( surfs.front(), 2, tmp, true );CHECK_ERR( rval );
exp[i].merge( tmp );
}
}
// check each bc set
Range act;
for( unsigned i = 0; i < count; ++i )
{
act.clear();
rval = mb.get_entities_by_dimension( handles[i], 2, act, true );CHECK_ERR( rval );
CHECK( exp[i] == act );
}
}
| void test_blocks | ( | ) |
Definition at line 555 of file cub_file_test.cpp.
References CHECK, CHECK_EQUAL, CHECK_ERR, ErrorCode, moab::Range::front(), moab::Interface::get_entities_by_dimension(), moab::Interface::get_entities_by_type_and_tag(), input_file_1, MATERIAL_SET_TAG_NAME, mb, MB_TYPE_INTEGER, MBENTITYSET, read_file(), moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by main().
{
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, input_file_1 );
Tag mat_tag;
rval = mb.tag_get_handle( MATERIAL_SET_TAG_NAME, 1, MB_TYPE_INTEGER, mat_tag );CHECK_ERR( rval );
Range blocks;
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &mat_tag, 0, 1, blocks );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)blocks.size() );
EntityHandle block = blocks.front();
int id;
rval = mb.tag_get_data( mat_tag, &block, 1, &id );CHECK_ERR( rval );
CHECK_EQUAL( 1, id );
Range block_hexes, mesh_hexes;
rval = mb.get_entities_by_dimension( 0, 3, mesh_hexes );CHECK_ERR( rval );
rval = mb.get_entities_by_dimension( block, 3, block_hexes, true );CHECK_ERR( rval );
CHECK( mesh_hexes == block_hexes );
}
| void test_cubit12 | ( | ) |
Definition at line 888 of file cub_file_test.cpp.
References cubit12_file, mb, and read_file().
Referenced by main().
{
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, cubit12_file );
}
| void test_cubit14 | ( | ) |
Definition at line 895 of file cub_file_test.cpp.
References CHECK, CHECK_ERR, cubit14_file, ErrorCode, moab::GeomTopoTool::find_geomsets(), mb, MB_TYPE_INTEGER, read_file(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by main().
{
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, cubit14_file );
// check the global id for some geometry sets
GeomTopoTool gtt( &mb_impl );
Range ranges[5];
ErrorCode rval = gtt.find_geomsets( ranges );CHECK_ERR( rval );
EntityHandle set0 = ranges[0][0]; // does it have a global id > 0?
Tag gid_tag;
rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
int val;
rval = mb.tag_get_data( gid_tag, &set0, 1, &val );
CHECK( val != 0 );
}
| void test_edges | ( | ) |
Definition at line 297 of file cub_file_test.cpp.
References input_file_1, MBEDGE, and test_element().
Referenced by main().
{
const int edge_conn[] = { 1, 3, // 1
3, 2, 2, 5, 5, 4, 4, 7, 7, 6, 6, 8, 8, 1, 3, 9, 9, 8, // 10
5, 9, 9, 7, 10, 12, 12, 11, 11, 14, 14, 13, 13, 16, 16, 15, 15, 17, 17, 10, // 20
12, 18, 18, 17, 14, 18, 18, 16, 6, 19, 19, 13, 1, 20, 20, 11, 19, 21, 21, 8, // 30
14, 21, 21, 20, 4, 22, 22, 15, 22, 23, 23, 7, 16, 23, 23, 19, 2, 24, 24, 10, // 40
24, 25, 25, 5, 17, 25, 25, 22, 20, 26, 26, 3, 12, 26, 26, 24, 28, 30, 30, 29, // 50
29, 31, 31, 2, 1, 32, 32, 28, 30, 33, 33, 32, 31, 33, 33, 3, 34, 36, 36, 35, // 60
35, 37, 37, 11, 10, 38, 38, 34, 36, 39, 39, 38, 37, 39, 39, 12, 28, 40, 40, 35, // 70
20, 41, 41, 32, 37, 41, 41, 40, 29, 42, 42, 34, 42, 43, 43, 31, 38, 43, 43, 24, // 80
40, 44, 44, 30, 36, 44, 44, 42 };
test_element( input_file_1, MBEDGE, 84, 2, edge_conn );
}
| void test_element | ( | const std::string & | filename, |
| EntityType | type, | ||
| int | num_elem, | ||
| int | node_per_elem, | ||
| const int * | conn_list | ||
| ) |
Definition at line 258 of file cub_file_test.cpp.
References moab::Range::begin(), CHECK_EQUAL, CHECK_ERR, ErrorCode, moab::Interface::get_connectivity(), moab::Interface::get_entities_by_type(), mb, MB_TYPE_INTEGER, read_file(), moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by test_edges(), test_hexes(), and test_quads().
{
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, filename );
Range elems;
rval = mb.get_entities_by_type( 0, type, elems );CHECK_ERR( rval );
CHECK_EQUAL( num_elem, (int)elems.size() );
// get global ids
Tag gid_tag;
rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
std::vector< int > ids( num_elem );
rval = mb.tag_get_data( gid_tag, elems, &ids[0] );CHECK_ERR( rval );
// check that global ids are consecutive, beginning with 1
std::vector< int > sorted( ids );
std::sort( sorted.begin(), sorted.end() );
for( int i = 0; i < num_elem; ++i )
CHECK_EQUAL( i + 1, sorted[i] );
// check connectivity of each element
std::vector< int > conn_ids( node_per_elem );
std::vector< EntityHandle > conn_h;
Range::iterator j = elems.begin();
for( int i = 0; i < num_elem; ++i, ++j )
{
conn_h.clear();
rval = mb.get_connectivity( &*j, 1, conn_h );CHECK_ERR( rval );
CHECK_EQUAL( node_per_elem, (int)conn_h.size() );
rval = mb.tag_get_data( gid_tag, &conn_h[0], node_per_elem, &conn_ids[0] );CHECK_ERR( rval );
const int* exp = conn_list + node_per_elem * ( ids[i] - 1 );
for( int k = 0; k < node_per_elem; ++k )
CHECK_EQUAL( exp[k], conn_ids[k] );
}
}
| void test_geometric_sets | ( | ) |
Definition at line 452 of file cub_file_test.cpp.
References moab::Range::begin(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Range::clear(), dim, dim_tag, moab::Range::empty(), moab::Range::end(), ErrorCode, geom, moab::Interface::get_adjacencies(), moab::Interface::get_entities_by_dimension(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), moab::Interface::get_entities_by_type_and_tag(), moab::Interface::get_parent_meshsets(), input_file_1, mb, MB_TYPE_INTEGER, MBEDGE, MBENTITYSET, MBHEX, MBQUAD, MBVERTEX, read_file(), moab::Range::size(), moab::subtract(), moab::Interface::tag_get_handle(), and moab::Interface::UNION.
Referenced by main().
{
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, input_file_1 );
Tag gid_tag, dim_tag;
rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
rval = mb.tag_get_handle( "GEOM_DIMENSION", 1, MB_TYPE_INTEGER, dim_tag );CHECK_ERR( rval );
// verify mesh entity counts
Range verts, curves, surfs, vols;
int dim = 0;
// Cppcheck warning (false positive): variable dim is assigned a value that is never used
// Cppcheck warning (false positive): variable dim is reassigned a value before the old one has
// been used
const void* vals[] = { &dim };
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &dim_tag, vals, 1, verts );CHECK_ERR( rval );
dim = 1;
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &dim_tag, vals, 1, curves );CHECK_ERR( rval );
dim = 2;
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &dim_tag, vals, 1, surfs );CHECK_ERR( rval );
dim = 3;
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &dim_tag, vals, 1, vols );CHECK_ERR( rval );
CHECK_EQUAL( 12u, (unsigned)verts.size() );
CHECK_EQUAL( 20u, (unsigned)curves.size() );
CHECK_EQUAL( 11u, (unsigned)surfs.size() );
CHECK_EQUAL( 2u, (unsigned)vols.size() );
// check that each vertex has a single node, and that the
// node is also contained in any parent curve
Range ents;
Range::iterator i;
for( i = verts.begin(); i != verts.end(); ++i )
{
ents.clear();
rval = mb.get_entities_by_handle( *i, ents );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)ents.size() );
CHECK( ents.all_of_type( MBVERTEX ) );
}
// check that each curve has one node and two edges
for( i = curves.begin(); i != curves.end(); ++i )
{
ents.clear();
rval = mb.get_entities_by_handle( *i, ents );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)ents.num_of_type( MBVERTEX ) );
CHECK_EQUAL( 2u, (unsigned)ents.num_of_type( MBEDGE ) );
CHECK_EQUAL( 3u, (unsigned)ents.size() );
}
// check that each surface has 1 node, 4 edges, 4 quads
for( i = surfs.begin(); i != surfs.end(); ++i )
{
ents.clear();
rval = mb.get_entities_by_handle( *i, ents );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)ents.num_of_type( MBVERTEX ) );
CHECK_EQUAL( 4u, (unsigned)ents.num_of_type( MBEDGE ) );
CHECK_EQUAL( 4u, (unsigned)ents.num_of_type( MBQUAD ) );
CHECK_EQUAL( 9u, (unsigned)ents.size() );
}
// check that each volume has 1 node and 8 hexes.
for( i = vols.begin(); i != vols.end(); ++i )
{
ents.clear();
rval = mb.get_entities_by_handle( *i, ents );CHECK_ERR( rval );
CHECK_EQUAL( 1u, (unsigned)ents.num_of_type( MBVERTEX ) );
CHECK_EQUAL( 8u, (unsigned)ents.num_of_type( MBHEX ) );
CHECK_EQUAL( 9u, (unsigned)ents.size() );
}
// Check that for each geometric entity, any contained vertices
// are adjacent to some entity in one of its parents.
Range parents, geom, nodes, tmp;
for( int d = 0; d < 3; ++d )
{
const void* vals1[] = { &d };
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, &dim_tag, vals1, 1, geom );CHECK_ERR( rval );
for( i = geom.begin(); i != geom.end(); ++i )
{
nodes.clear();
ents.clear();
parents.clear();
rval = mb.get_entities_by_type( *i, MBVERTEX, nodes );CHECK_ERR( rval );
rval = mb.get_parent_meshsets( *i, parents );CHECK_ERR( rval );
for( Range::iterator j = parents.begin(); j != parents.end(); ++j )
{
tmp.clear();
rval = mb.get_entities_by_dimension( *j, d + 1, tmp );CHECK_ERR( rval );
ents.merge( tmp );
}
tmp.clear();
rval = mb.get_adjacencies( ents, 0, false, tmp, Interface::UNION );CHECK_ERR( rval );
nodes = subtract( nodes, tmp );
CHECK( nodes.empty() );
}
}
}
| void test_geometric_topology | ( | ) |
Definition at line 406 of file cub_file_test.cpp.
References check_geometric_set(), input_file_1, mb, and read_file().
Referenced by main().
{
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, input_file_1 );
// expected geometric vertices, specified by global ID
const int vertex_ids[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14 };
// List of global IDs of surfacs in geometric volumes, indexed by ID-1
const int volume_surfs[2][6] = { { 1, 2, 3, 4, 5, 6 }, { 7, 8, 9, 6, 11, 12 } };
// List of global IDs of curves in geometric surfaces, indexed by ID-1
// Curve IDs of zero indicates that corresponding surface doesn't exist.
const int surf_curves[12][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 6, 10, 4 }, { 11, 7, 9, 3 },
{ 12, 8, 11, 2 }, { 10, 5, 12, 1 }, { 13, 14, 1, 16 }, { 17, 18, 5, 20 },
{ 10, 18, 22, 16 }, { 0, 0, 0, 0 }, // no surf 10
{ 24, 20, 12, 14 }, { 22, 17, 24, 13 } };
// List of global IDs of vertices in geometric curves, indexed by ID-1
// Vertex IDs of zero indicates that corresponding curve doesn't exist.
const int curve_verts[24][2] = { { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 1 }, { 5, 6 }, // 5
{ 6, 7 }, { 7, 8 }, { 8, 5 }, { 4, 7 }, { 1, 6 }, // 10
{ 3, 8 }, { 2, 5 }, { 9, 10 }, // 13
{ 10, 2 }, { 0, 0 }, // no curve 15
{ 1, 9 }, { 13, 14 }, { 14, 6 }, { 0, 0 }, // no curve 19
{ 5, 13 }, { 0, 0 }, // no curve 21
{ 9, 14 }, { 0, 0 }, // no curve 23
{ 10, 13 } };
// check all vertices
for( unsigned i = 0; i < ( sizeof( vertex_ids ) / sizeof( vertex_ids[0] ) ); ++i )
check_geometric_set( mb, 0, vertex_ids[i], 0, 0, find_parents< 2 >( curve_verts, 24, vertex_ids[i] ) );
// check all curves
for( int i = 1; i <= 24; ++i )
if( curve_verts[i - 1][0] )
check_geometric_set( mb, 1, i, curve_verts[i - 1], 2, find_parents< 4 >( surf_curves, 12, i ) );
// check all surfs
for( int i = 1; i <= 12; ++i )
if( surf_curves[i - 1][0] )
check_geometric_set( mb, 2, i, surf_curves[i - 1], 4, find_parents< 6 >( volume_surfs, 2, i ) );
// check all volumes
std::vector< int > empty;
for( int i = 1; i <= 2; ++i )
check_geometric_set( mb, 3, i, volume_surfs[i - 1], 6, empty );
}
| void test_hex20 | ( | ) |
Definition at line 159 of file cub_file_test.cpp.
References MBHEX, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBHEX, 20 );
}
| void test_hex27 | ( | ) |
Definition at line 163 of file cub_file_test.cpp.
References MBHEX, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBHEX, 27 );
}
| void test_hex9 | ( | ) |
Definition at line 155 of file cub_file_test.cpp.
References MBHEX, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBHEX, 9 );
}
| void test_hexes | ( | ) |
Definition at line 329 of file cub_file_test.cpp.
References input_file_1, MBHEX, and test_element().
Referenced by main().
{
const int hex_conn[] = { 6, 19, 23, 7, 8, 21, 27, 9, 19, 13, 16, 23, 21, 14, 18, 27, 7, 23, 22, 4, 9, 27,
25, 5, 23, 16, 15, 22, 27, 18, 17, 25, 8, 21, 27, 9, 1, 20, 26, 3, 21, 14, 18, 27,
20, 11, 12, 26, 9, 27, 25, 5, 3, 26, 24, 2, 27, 18, 17, 25, 26, 12, 10, 24, 1, 20,
26, 3, 32, 41, 45, 33, 20, 11, 12, 26, 41, 37, 39, 45, 3, 26, 24, 2, 33, 45, 43, 31,
26, 12, 10, 24, 45, 39, 38, 43, 32, 41, 45, 33, 28, 40, 44, 30, 41, 37, 39, 45, 40, 35,
36, 44, 33, 45, 43, 31, 30, 44, 42, 29, 45, 39, 38, 43, 44, 36, 34, 42 };
test_element( input_file_1, MBHEX, 16, 8, hex_conn );
}
| void test_ho_elements | ( | EntityType | type, |
| int | num_nodes | ||
| ) |
Definition at line 805 of file cub_file_test.cpp.
References moab::Range::begin(), CHECK, check_adj_ho_nodes(), CHECK_ERR, check_ho_element(), moab::Range::empty(), moab::Range::end(), entities, ErrorCode, moab::Interface::get_entities_by_type(), moab::Interface::get_entities_by_type_and_tag(), HAS_MID_NODES_TAG_NAME, moab::CN::HasMidNodes(), ho_file, MATERIAL_SET_TAG_NAME, mb, MB_TYPE_INTEGER, MBENTITYSET, read_file(), and moab::Interface::tag_get_handle().
Referenced by test_hex20(), test_hex27(), test_hex9(), test_quad5(), test_quad8(), test_quad9(), test_tet10(), test_tet14(), test_tet8(), test_tri6(), and test_tri7().
{
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, ho_file );
ErrorCode rval;
Tag ho_tag, block_tag;
rval = mb.tag_get_handle( MATERIAL_SET_TAG_NAME, 1, MB_TYPE_INTEGER, block_tag );CHECK_ERR( rval );
rval = mb.tag_get_handle( HAS_MID_NODES_TAG_NAME, 4, MB_TYPE_INTEGER, ho_tag );CHECK_ERR( rval );
// get material sets with expected higher-order nodes
Range blocks;
int ho_flags[4];
CN::HasMidNodes( type, num_nodes, ho_flags );
Tag tags[2] = { ho_tag, block_tag };
void* vals[2] = { ho_flags, NULL };
rval = mb.get_entities_by_type_and_tag( 0, MBENTITYSET, tags, vals, 2, blocks );CHECK_ERR( rval );
Range::iterator i;
Range entities;
for( i = blocks.begin(); i != blocks.end(); ++i )
{
rval = mb.get_entities_by_type( *i, type, entities, true );CHECK_ERR( rval );
}
// test file should contain all types of HO entities
CHECK( !entities.empty() );
// test ho node positions -- expect to be at center of adj corners
for( i = entities.begin(); i != entities.end(); ++i )
check_ho_element( mb, *i, ho_flags );
// test ho node handles consistent with adjacent entities
for( i = entities.begin(); i != entities.end(); ++i )
check_adj_ho_nodes( mb, *i );
}
| void test_multiple_files | ( | ) |
Definition at line 840 of file cub_file_test.cpp.
References moab::Interface::add_entities(), CHECK, CHECK_EQUAL, CHECK_ERR, moab::Interface::create_meshset(), moab::Range::empty(), ErrorCode, moab::Interface::get_adjacencies(), moab::Interface::get_entities_by_dimension(), moab::Interface::get_entities_by_handle(), moab::Interface::get_entities_by_type(), input_file_1, moab::intersect(), mb, MBVERTEX, MESHSET_SET, read_file(), moab::Range::size(), moab::subtract(), and moab::Interface::UNION.
Referenced by main().
{
// load two surface meshes, one at z=+5 at z=-5.
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
Range file1_ents, file2_ents;
read_file( mb, input_file_1 );
mb.get_entities_by_handle( 0, file1_ents );
read_file( mb, input_file_1 );
mb.get_entities_by_handle( 0, file2_ents );
file2_ents = subtract( file2_ents, file1_ents );
EntityHandle file1, file2;
mb.create_meshset( MESHSET_SET, file1 );
mb.create_meshset( MESHSET_SET, file2 );
mb.add_entities( file1, file1_ents );
mb.add_entities( file2, file2_ents );
// first check that we get the same number of verts from
// each file and that they are distinct vertices
Range file1_verts, file2_verts;
rval = mb.get_entities_by_type( file1, MBVERTEX, file1_verts );CHECK_ERR( rval );
CHECK( !file1_verts.empty() );
rval = mb.get_entities_by_type( file2, MBVERTEX, file2_verts );CHECK_ERR( rval );
CHECK( !file2_verts.empty() );
CHECK_EQUAL( file1_verts.size(), file2_verts.size() );
CHECK( intersect( file1_verts, file2_verts ).empty() );
// now check that we get the same number of elements from
// each file and that they are distinct
Range file1_elems, file2_elems;
rval = mb.get_entities_by_dimension( file1, 3, file1_elems );CHECK_ERR( rval );
CHECK( !file1_elems.empty() );
rval = mb.get_entities_by_dimension( file2, 3, file2_elems );CHECK_ERR( rval );
CHECK( !file2_elems.empty() );
CHECK_EQUAL( file1_elems.size(), file2_elems.size() );
CHECK( intersect( file1_elems, file2_elems ).empty() );
// now check that the connectivity for each element is
// defined using the appropriate vertex instances
Range file1_elem_verts, file2_elem_verts;
rval = mb.get_adjacencies( file1_elems, 0, false, file1_elem_verts, Interface::UNION );CHECK_ERR( rval );
rval = mb.get_adjacencies( file2_elems, 0, false, file2_elem_verts, Interface::UNION );CHECK_ERR( rval );
CHECK_EQUAL( file1_elem_verts.size(), file2_elem_verts.size() );
CHECK( intersect( file1_elem_verts, file1_verts ) == file1_elem_verts );
CHECK( intersect( file2_elem_verts, file2_verts ) == file2_elem_verts );
}
| void test_node_sets | ( | ) |
Definition at line 658 of file cub_file_test.cpp.
References DIRICHLET_SET_TAG_NAME, and test_bc_sets().
Referenced by main().
{
int ids[] = { 1, 2 };
std::vector< int > surfs[2];
surfs[0].push_back( 2 );
surfs[0].push_back( 8 );
surfs[1].push_back( 3 );
surfs[1].push_back( 9 );
test_bc_sets( DIRICHLET_SET_TAG_NAME, 2, ids, surfs );
}
| void test_quad5 | ( | ) |
Definition at line 129 of file cub_file_test.cpp.
References MBQUAD, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBQUAD, 5 );
}
| void test_quad8 | ( | ) |
Definition at line 133 of file cub_file_test.cpp.
References MBQUAD, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBQUAD, 8 );
}
| void test_quad9 | ( | ) |
Definition at line 137 of file cub_file_test.cpp.
References MBQUAD, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBQUAD, 9 );
}
| void test_quads | ( | ) |
Definition at line 312 of file cub_file_test.cpp.
References input_file_1, MBQUAD, and test_element().
Referenced by main().
{
const int quad_conn[] = {
1, 3, 9, 8, // 1
3, 2, 5, 9, 8, 9, 7, 6, 9, 5, 4, 7, 10, 12, 18, 17, 12, 11, 14, 18,
17, 18, 16, 15, 18, 14, 13, 16, 6, 19, 21, 8, 19, 13, 14, 21, // 10
8, 21, 20, 1, 21, 14, 11, 20, 4, 22, 23, 7, 22, 15, 16, 23, 7, 23, 19, 6,
23, 16, 13, 19, 2, 24, 25, 5, 24, 10, 17, 25, 5, 25, 22, 4, 25, 17, 15, 22, // 20
1, 20, 26, 3, 20, 11, 12, 26, 3, 26, 24, 2, 26, 12, 10, 24, 28, 30, 33, 32,
30, 29, 31, 33, 32, 33, 3, 1, 33, 31, 2, 3, 34, 36, 39, 38, 36, 35, 37, 39, // 30
38, 39, 12, 10, 39, 37, 11, 12, 1, 20, 41, 32, 20, 11, 37, 41, 32, 41, 40, 28,
41, 37, 35, 40, 29, 42, 43, 31, 42, 34, 38, 43, 31, 43, 24, 2, 43, 38, 10, 24, // 40
28, 40, 44, 30, 40, 35, 36, 44, 30, 44, 42, 29, 44, 36, 34, 42,
};
test_element( input_file_1, MBQUAD, 44, 4, quad_conn );
}
| void test_side_sets | ( | ) |
Definition at line 647 of file cub_file_test.cpp.
References NEUMANN_SET_TAG_NAME, and test_bc_sets().
Referenced by main().
{
int ids[] = { 1, 2 };
std::vector< int > surfs[2];
surfs[0].push_back( 1 );
surfs[0].push_back( 7 );
surfs[1].push_back( 5 );
surfs[1].push_back( 11 );
test_bc_sets( NEUMANN_SET_TAG_NAME, 2, ids, surfs );
}
| void test_tet10 | ( | ) |
Definition at line 146 of file cub_file_test.cpp.
References MBTET, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBTET, 10 );
}
| void test_tet14 | ( | ) |
Definition at line 150 of file cub_file_test.cpp.
References MBTET, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBTET, 14 );
}
| void test_tet8 | ( | ) |
Definition at line 142 of file cub_file_test.cpp.
References MBTET, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBTET, 8 );
}
| void test_tri6 | ( | ) |
Definition at line 120 of file cub_file_test.cpp.
References MBTRI, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBTRI, 6 );
}
| void test_tri7 | ( | ) |
Definition at line 124 of file cub_file_test.cpp.
References MBTRI, and test_ho_elements().
Referenced by main().
{
test_ho_elements( MBTRI, 7 );
}
| void test_vertices | ( | ) |
Definition at line 208 of file cub_file_test.cpp.
References CHECK_EQUAL, CHECK_ERR, CHECK_REAL_EQUAL, ErrorCode, moab::Interface::get_coords(), moab::Interface::get_entities_by_type(), input_file_1, mb, MB_TYPE_INTEGER, MBVERTEX, read_file(), moab::Range::size(), moab::Interface::tag_get_data(), and moab::Interface::tag_get_handle().
Referenced by main().
{
/* Node coordinates, in order of node ID, beginning with 1. */
const double node_coords[] = {
5, -5, 5, // 1
5, 5, 5, 5, 0, 5, -5, 5, 5, 0, 5, 5, // 5
-5, -5, 5, -5, 0, 5, 0, -5, 5, 0, 0, 5, 5, 5, -5, // 10
5, -5, -5, 5, 0, -5, -5, -5, -5, 0, -5, -5, -5, 5, -5, // 15
-5, 0, -5, 0, 5, -5, 0, 0, -5, -5, -5, 0, 5, -5, 0, // 20
0, -5, 0, -5, 5, 0, -5, 0, 0, 5, 5, 0, 0, 5, 0, // 25
5, 0, 0, 0, 0, 0, 15, -5, 5, 15, 5, 5, 15, 0, 5, // 30
10, 5, 5, 10, -5, 5, 10, 0, 5, 15, 5, -5, 15, -5, -5, // 35
15, 0, -5, 10, -5, -5, 10, 5, -5, 10, 0, -5, 15, -5, 0, // 40
10, -5, 0, 15, 5, 0, 10, 5, 0, 15, 0, 0, 10, 0, 0 // 45
};
ErrorCode rval;
Core mb_impl;
Interface& mb = mb_impl;
read_file( mb, input_file_1 );
// get vertex handles and check correct number of vertices
const size_t num_nodes = sizeof( node_coords ) / ( 3 * sizeof( double ) );
Range verts;
rval = mb.get_entities_by_type( 0, MBVERTEX, verts );CHECK_ERR( rval );
CHECK_EQUAL( num_nodes, (size_t)verts.size() );
// check global ids (should be 1 to 45 for vertices.)
Tag gid_tag;
rval = mb.tag_get_handle( "GLOBAL_ID", 1, MB_TYPE_INTEGER, gid_tag );CHECK_ERR( rval );
std::vector< int > ids( num_nodes );
rval = mb.tag_get_data( gid_tag, verts, &ids[0] );CHECK_ERR( rval );
std::vector< int > sorted( ids );
std::sort( sorted.begin(), sorted.end() );
for( size_t i = 0; i < num_nodes; ++i )
CHECK_EQUAL( (int)( i + 1 ), sorted[i] );
// check coordinates of each vertex
std::vector< double > coords( 3 * num_nodes );
rval = mb.get_coords( verts, &coords[0] );CHECK_ERR( rval );
for( size_t i = 0; i < num_nodes; ++i )
{
const double* exp = node_coords + 3 * ( ids[i] - 1 );
const double* act = &coords[3 * i];
CHECK_REAL_EQUAL( exp[0], act[0], 1e-8 );
CHECK_REAL_EQUAL( exp[1], act[1], 1e-8 );
CHECK_REAL_EQUAL( exp[2], act[2], 1e-8 );
}
}
const std::string cubit12_file = std::string( TestDir + "unittest/io/cubtest12.cub" ) [static] |
Definition at line 82 of file cub_file_test.cpp.
Referenced by test_cubit12().
const std::string cubit14_file = std::string( TestDir + "unittest/io/cubtest14.cub" ) [static] |
Definition at line 83 of file cub_file_test.cpp.
Referenced by test_cubit14().
const std::string ho_file = std::string( TestDir + "unittest/io/ho_test.cub" ) [static] |
Definition at line 81 of file cub_file_test.cpp.
Referenced by test_ho_elements().
const std::string input_file_1 = std::string( TestDir + "unittest/io/test.cub" ) [static] |
Input test file: test.cub Cubit 10.2 file. File contains: Two merged 10x10x10 bricks sharing a single surface (surface 6).
Surfaces: 2 8 / / o----------o----------o /. / /. / /| / . (5)/ / . (11)/ / | / . L / . L / | o----------o----------o | | . | . |(12) 4--|-> o . . .|. .o. . . | . o | . (1) | . (9) | / | . ^ | . ^ | / |. | |. | |/ o----------o----------o | | 3 9
Curves:
o----8-----o----20----o /. /. /| 12 . 11 . 24 | / 7 / 5 / 17 o----2-----o----14----o | | . | . | | | o . .6.|. .o. . 18| . o 3 . 1 . 13 / | 9 | 10 | 22 |. |. |/ o----4-----o----16----o
Vertices:
8----------5----------13 /. /. /| / . / . / | / . / . / | 3----------2----------10 | | . | . | | | 7 . . .|. .6. . . | . 14 | . | . | / | . | . | / |. |. |/ 4----------1----------9
Definition at line 80 of file cub_file_test.cpp.
Referenced by test_bc_sets(), test_blocks(), test_edges(), test_geometric_sets(), test_geometric_topology(), test_hexes(), test_multiple_files(), test_quads(), and test_vertices().