25 int main(
int argc,
char** argv )
28 int fail = MPI_Init( &argc, &argv );
32 argv[0] = argv[argc - argc];
36 int dints = 1, dleafs = 1, ddeps = 1;
38 double rtol = 1.0e-10;
41 po.
addOpt<
void >(
",e",
"Use ElemEvaluator in tree search", &eval );
42 po.
addOpt<
int >(
"ints,i",
"Number of doublings of intervals on each side of scd mesh", &dints );
43 po.
addOpt<
int >(
"leaf,l",
"Number of doublings of maximum number of elements per leaf", &dleafs );
44 po.
addOpt<
int >(
"max_depth,m",
"Number of 5-intervals on maximum depth of tree", &ddeps );
45 po.
addOpt<
int >(
"npoints,n",
"Number of query points", &
npoints );
46 po.
addOpt<
int >(
"dim,d",
"Dimension of the mesh", &
dim );
47 po.
addOpt<
double >(
"tol,t",
"Relative tolerance of point search", &rtol );
51 std::vector< int >
ints, deps, leafs;
53 for(
int i = 1; i < dints; i++ )
56 for(
int i = 1; i < ddeps; i++ )
57 deps.push_back( deps[i - 1] - 5 );
59 for(
int i = 1; i < dleafs; i++ )
60 leafs.push_back( 2 * leafs[i - 1] );
63 std::cout <<
"Tree_type"
85 <<
"leafObjectTests" << std::endl;
88 for( std::vector< int >::iterator int_it =
ints.begin(); int_it !=
ints.end(); ++int_it )
96 for( std::vector< int >::iterator dep_it = deps.begin(); dep_it != deps.end(); ++dep_it )
100 for( std::vector< int >::iterator leafs_it = leafs.begin(); leafs_it != leafs.end(); ++leafs_it )
104 for(
int tree_tp = 0; tree_tp < 2; tree_tp++ )
122 std::ostringstream opts;
123 opts <<
"MAX_DEPTH=" << *dep_it <<
";MAX_PER_LEAF=" << *leafs_it;
125 rval =
tree->parse_options( fo );
130 double cpu_time, perc_outside;
134 std::cout << ( tree_tp == 0 ?
"BVH" :
"KD" ) <<
" " << *leafs_it <<
" " << *dep_it <<
" " << *int_it
135 <<
" " << ( *int_it ) * ( *int_it ) * ( *int_it ) <<
" " << cpu_time <<
" "
136 << perc_outside <<
" ";
138 tree->tree_stats().output_all_stats();
140 if( eeval )
delete eeval;
151 fail = MPI_Finalize();
164 std::vector< EntityHandle > ents(
npoints );
167 double denom = 1.0 / (double)RAND_MAX;
168 for(
int i = 0; i <
npoints; i++ )
171 double rx = (double)rand() * denom, ry = (double)rand() * denom, rz = (double)rand() * denom;
172 test_pts[i] =
box.bMin +
CartVect( rx * box_del[0], ry * box_del[1], rz * box_del[2] );
179 sl.
locate_points( test_pts[0].array(),
npoints, &ents[0], test_res[0].array(), &is_in[0], rtol, 0.0 );
186 cpu_time =
ct.time_elapsed();
188 int num_out = std::count( is_in, is_in +
npoints,
false );
189 percent_outside = ( (double)num_out ) /
npoints;
202 if(
dim > 1 ) high[1] = n - 1;
203 if(
dim > 2 ) high[2] = n - 1;