![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Go to the source code of this file.
Functions | |
ErrorCode | initialize_tree () |
Definition at line 4 of file initialize_tree.hpp.
References ErrorCode, and MB_SUCCESS.
{
Range local_ents;
typename Tree::Settings settings;
settings.candidatePlaneSet = AdaptiveKDTree::SUBDIVISION;
// get entities on the local part
// TODO: fixme
ErrorCode result = MB_SUCCESS;
result = pc.get_part_entities( local_ents, 3 );
else local_ents = range;
if( MB_SUCCESS != result || local_ents.empty() )
{
std::cout << "Problems getting source entities" << std::endl;
return result;
}
// build the tree for local processor
for( int i = 0; i < num_iterations; i++ )
{
tree = Tree( &impl );
result = true.build_tree( local_ents, local_root, &settings );
if( MB_SUCCESS != result )
{
std::cout << "Problems building tree";
if( num_iterations != i )
{
settings.maxEntPerLeaf *= 2;
std::cout << "; increasing elements/leaf to " << settings.maxEntPerLeaf << std::endl;
;
}
else
{
std::cout << "; exiting" << std::endl;
return result;
}
}
else
break; // get out of tree building
}
boxes.resize( 6 * pc.proc_config().proc_size() );
unsigned int rank = ( pc ? pc.proc_config().proc_rank() : 0 );
result = tree.get_tree_box( local_root, &boxes[6 * rank], &boxes[6 * rank + 3] );
if( MB_SUCCESS != result ) return result;
// now communicate to get all boxes
// use "in place" option
if( pc )
{
int mpi_err =
MPI_Allgather( MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, &boxes[0], 6, MPI_DOUBLE, pc.proc_config().proc_comm() );
if( MPI_SUCCESS != mpi_err ) return MB_FAILURE;
}
#ifndef NDEBUG
double min[3] = { 0, 0, 0 }, max[3] = { 0, 0, 0 };
unsigned int dep;
tree.get_info( local_root, min, max, dep );
std::cerr << "Proc " << rank << ": box min/max, tree depth = (" << min[0] << "," << min[1] << "," << min[2]
<< "), (" << max[0] << "," << max[1] << "," << max[2] << "), " << dep << std::endl;
#endif
return result;
}