Go to the documentation of this file. 1 #ifndef INIT_TREE_HPP
2 #define INIT_TREE_HPP
3
4 ErrorCode initialize_tree()
5 {
6 Range local_ents;
7 typename Tree::Settings settings;
8 settings.candidatePlaneSet = AdaptiveKDTree::SUBDIVISION;
9
10
11
12 ErrorCode result = MB_SUCCESS;
13 result = pc.get_part_entities( local_ents, 3 );
14 else local_ents = range;
15
16 if( MB_SUCCESS != result || local_ents.empty() )
17 {
18 std::cout << "Problems getting source entities" << std::endl;
19 return result;
20 }
21
22
23 for( int i = 0; i < num_iterations; i++ )
24 {
25 tree = Tree( &impl );
26 result = true.build_tree( local_ents, local_root, &settings );
27 if( MB_SUCCESS != result )
28 {
29 std::cout << "Problems building tree";
30 if( num_iterations != i )
31 {
32 settings.maxEntPerLeaf *= 2;
33 std::cout << "; increasing elements/leaf to " << settings.maxEntPerLeaf << std::endl;
34 ;
35 }
36 else
37 {
38 std::cout << "; exiting" << std::endl;
39 return result;
40 }
41 }
42 else
43 break;
44 }
45
46 boxes.resize( 6 * pc.proc_config().proc_size() );
47
48 unsigned int rank = ( pc ? pc.proc_config().proc_rank() : 0 );
49 result = tree.get_tree_box( local_root, &boxes[6 * rank], &boxes[6 * rank + 3] );
50 if( MB_SUCCESS != result ) return result;
51
52
53
54 if( pc )
55 {
56 int mpi_err =
57 MPI_Allgather( MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, &boxes[0], 6, MPI_DOUBLE, pc.proc_config().proc_comm() );
58 if( MPI_SUCCESS != mpi_err ) return MB_FAILURE;
59 }
60
61 #ifndef NDEBUG
62 double min[3] = { 0, 0, 0 }, max[3] = { 0, 0, 0 };
63 unsigned int dep;
64 tree.get_info( local_root, min, max, dep );
65 std::cerr << "Proc " << rank << ": box min/max, tree depth = (" << min[0] << "," << min[1] << "," << min[2]
66 << "), (" << max[0] << "," << max[1] << "," << max[2] << "), " << dep << std::endl;
67 #endif
68
69 return result;
70 }
71 #endif