24 int main(
int argc,
char** argv )
27 int fail = MPI_Init( &argc, &argv );
31 argv[0] = argv[argc - argc];
35 int dints = 1, dleafs = 1, ddeps = 1, csints = 0;
38 po.
addOpt<
int >(
"candidateplaneset,c",
39 "Candidate plane set (0=SUBDIVISION,1=SUBDIV_SNAP,2=VERTEX_MEDIAN,3=VERTEX_SAMPLE", &csints );
40 po.
addOpt<
int >(
"ints,i",
"Number of doublings of intervals on each side of scd mesh", &dints );
41 po.
addOpt<
int >(
"leaf,l",
"Number of doublings of maximum number of elements per leaf", &dleafs );
42 po.
addOpt<
int >(
"max_depth,m",
"Number of 5-intervals on maximum depth of tree", &ddeps );
43 po.
addOpt<
int >(
"npoints,n",
"Number of query points", &
npoints );
44 po.
addOpt<
int >(
"dim,d",
"Dimension of the mesh", &
dim );
48 std::vector< int >
ints, deps, leafs;
50 for(
int i = 1; i < dints; i++ )
53 for(
int i = 1; i < ddeps; i++ )
54 deps.push_back( deps[i - 1] - 5 );
56 for(
int i = 1; i < dleafs; i++ )
57 leafs.push_back( 2 * leafs[i - 1] );
60 std::cout <<
"Tree_type"
82 <<
"leafObjectTests" << std::endl;
85 for( std::vector< int >::iterator int_it =
ints.begin(); int_it !=
ints.end(); ++int_it )
93 for( std::vector< int >::iterator dep_it = deps.begin(); dep_it != deps.end(); ++dep_it )
97 for( std::vector< int >::iterator leafs_it = leafs.begin(); leafs_it != leafs.end(); ++leafs_it )
101 for(
int tree_tp = 0; tree_tp < 2; tree_tp++ )
110 std::ostringstream opts;
111 opts <<
"MAX_DEPTH=" << *dep_it <<
";MAX_PER_LEAF=" << *leafs_it;
114 if( opts.str().length() > 0 ) opts <<
";";
115 opts <<
"PLANE_SET=" << csints;
118 rval =
tree->parse_options( fo );
123 double cpu_time, perc_outside;
127 std::cout << ( tree_tp == 0 ?
"BVH" :
"KD" ) <<
" " << *leafs_it <<
" " << *dep_it <<
" " << *int_it
128 <<
" " << ( *int_it ) * ( *int_it ) * ( *int_it ) <<
" " << cpu_time <<
" "
129 << perc_outside <<
" ";
131 tree->tree_stats().output_all_stats();
142 fail = MPI_Finalize();
155 std::vector< EntityHandle > ents(
npoints );
158 double denom = 1.0 / (double)RAND_MAX;
159 for(
int i = 0; i <
npoints; i++ )
162 double rx = (double)rand() * denom, ry = (double)rand() * denom, rz = (double)rand() * denom;
163 test_pts[i] =
box.bMin +
CartVect( rx * box_del[0], ry * box_del[1], rz * box_del[2] );
176 cpu_time =
ct.time_elapsed();
178 int num_out = std::count( is_in, is_in +
npoints,
false );
179 percent_outside = ( (double)num_out ) /
npoints;
192 if(
dim > 1 ) high[1] = n - 1;
193 if(
dim > 2 ) high[2] = n - 1;