Hermes2D  3.0
multimesh_dg_neighbor_tree.h
1 
16 #ifndef __H2D_MULTIMESH_DG_NEIGHBOR_TREE_H
17 #define __H2D_MULTIMESH_DG_NEIGHBOR_TREE_H
18 
19 #include "multimesh_dg_neighbor_tree_node.h"
20 #include "mesh/traverse.h"
21 #include "neighbor_search.h"
22 
23 namespace Hermes
24 {
25  namespace Hermes2D
26  {
29  template<typename Scalar>
31  {
32  public:
34  static void process_edge(NeighborSearch<Scalar>** neighbor_searches, unsigned char num_neighbor_searches, unsigned int& num_neighbors, bool*& processed);
35 
36  private:
38  static void build_multimesh_tree(MultimeshDGNeighborTreeNode* root, NeighborSearch<Scalar>** neighbor_searches, int number);
39 
41  static void insert_into_multimesh_tree(MultimeshDGNeighborTreeNode* node, unsigned int* transformations, unsigned int transformation_count);
42 
44  static std::vector<std::vector<unsigned int>*> get_multimesh_neighbors_transformations(MultimeshDGNeighborTreeNode* multimesh_tree);
45 
47  static void traverse_multimesh_tree(MultimeshDGNeighborTreeNode* node, std::vector<std::vector<unsigned int>*>& running_transformations);
48 
50  static void update_neighbor_search(NeighborSearch<Scalar>* ns, MultimeshDGNeighborTreeNode* multimesh_tree);
51 
54  static MultimeshDGNeighborTreeNode* find_node(unsigned int* transformations, unsigned int transformation_count, MultimeshDGNeighborTreeNode* node);
55 
58  static int update_ns_subtree(NeighborSearch<Scalar>* ns, MultimeshDGNeighborTreeNode* node, unsigned int ith_neighbor);
59 
61  static void traverse_multimesh_subtree(MultimeshDGNeighborTreeNode* node, std::vector<std::vector<unsigned int>*>& running_central_transformations,
62  std::vector<std::vector<unsigned int>*>& running_neighbor_transformations, const typename NeighborSearch<Scalar>::NeighborEdgeInfo& edge_info, const int& active_edge, const int& mode);
63 
64  friend class DiscreteProblem < Scalar > ;
65  friend class DiscreteProblemDGAssembler < Scalar > ;
66  friend class KellyTypeAdapt < Scalar > ;
67  };
68  }
69 }
70 #endif
Definition: adapt.h:24
static void process_edge(NeighborSearch< Scalar > **neighbor_searches, unsigned char num_neighbor_searches, unsigned int &num_neighbors, bool *&processed)
The main method, for the passed neighbor searches, it will process all multi-mesh neighbor consolidat...
This class characterizes a neighborhood of a given edge in terms of adjacent elements and provides me...
Structure containing all the needed information about the active edge from the neighbor's side...