oomph::OcTreeRoot Class Reference

#include <octree.h>

+ Inheritance diagram for oomph::OcTreeRoot:

Public Member Functions

 OcTreeRoot (RefineableElement *const &object_pt)
 
 OcTreeRoot (const OcTreeRoot &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const OcTreeRoot &)=delete
 Broken assignment operator. More...
 
Vector< TreeRoot * > edge_neighbour_pt (const unsigned &edge_direction)
 
unsigned nedge_neighbour (const unsigned &edge_direction)
 
void add_edge_neighbour_pt (TreeRoot *oc_tree_root_pt, const unsigned &edge_direction)
 
int up_equivalent (TreeRoot *tree_root_pt)
 
void set_up_equivalent (TreeRoot *tree_root_pt, const int &dir)
 
int right_equivalent (TreeRoot *tree_root_pt)
 
void set_right_equivalent (TreeRoot *tree_root_pt, const int &dir)
 
int direction_of_neighbour (TreeRoot *octree_root_pt)
 
- Public Member Functions inherited from oomph::OcTree
virtual ~OcTree ()
 
 OcTree (const OcTree &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const OcTree &)=delete
 Broken assignment operator. More...
 
Treeconstruct_son (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type)
 
OcTreegteq_face_neighbour (const int &direction, Vector< unsigned > &translate_s, Vector< double > &s_sw, Vector< double > &s_ne, int &face, int &diff_level, bool &in_neighbouring_tree) const
 
OcTreegteq_true_edge_neighbour (const int &direction, const unsigned &i_root_edge_neighbour, unsigned &nroot_edge_neighbour, Vector< unsigned > &translate_s, Vector< double > &s_lo, Vector< double > &s_hi, int &edge, int &diff_level) const
 
unsigned self_test ()
 
- Public Member Functions inherited from oomph::Tree
virtual ~Tree ()
 
 Tree (const Tree &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const Tree &)=delete
 Broken assignment operator. More...
 
RefineableElementobject_pt () const
 
void flush_object ()
 Flush the object represented by the tree. More...
 
Treeson_pt (const int &son_index) const
 
void set_son_pt (const Vector< Tree * > &son_pt)
 
unsigned nsons () const
 Return number of sons (zero if it's a leaf node) More...
 
void flush_sons ()
 Flush the sons. More...
 
TreeRoot *& root_pt ()
 Return pointer to root of the tree. More...
 
TreeRootroot_pt () const
 Return pointer to root of the tree (const version) More...
 
template<class ELEMENT >
void split_if_required ()
 
template<class ELEMENT >
void p_refine_if_required (Mesh *&mesh_pt)
 
void merge_sons_if_required (Mesh *&mesh_pt)
 
void deactivate_object ()
 Call the RefineableElement's deactivate_element() function. More...
 
void traverse_all (Tree::VoidMemberFctPt member_function)
 
void traverse_all (Tree::VoidMeshPtArgumentMemberFctPt member_function, Mesh *&mesh_pt)
 
void traverse_all_but_leaves (Tree::VoidMemberFctPt member_function)
 
void traverse_leaves (Tree::VoidMemberFctPt member_function)
 
void traverse_leaves (Tree::VoidMeshPtArgumentMemberFctPt member_function, Mesh *&mesh_pt)
 
void stick_leaves_into_vector (Vector< Tree * > &)
 Traverse tree and stick pointers to leaf "nodes" (only) into Vector. More...
 
void stick_all_tree_nodes_into_vector (Vector< Tree * > &)
 Traverse and stick pointers to all "nodes" into Vector. More...
 
int son_type () const
 Return son type. More...
 
bool is_leaf ()
 Return true if the tree is a leaf node. More...
 
Treefather_pt () const
 Return pointer to father: NULL if it's a root node. More...
 
void set_father_pt (Tree *const &father_pt)
 Set the father. More...
 
unsigned level () const
 Return the level of the Tree (root=0) More...
 
- Public Member Functions inherited from oomph::TreeRoot
 TreeRoot (RefineableElement *const &object_pt)
 Constructor for the (empty) root tree. More...
 
 TreeRoot (const TreeRoot &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const TreeRoot &)=delete
 Broken assignment operator. More...
 
TreeRoot *& neighbour_pt (const int &direction)
 
bool is_neighbour_periodic (const int &direction)
 
void set_neighbour_periodic (const int &direction)
 Set the neighbour in particular direction to be periodic. More...
 
void set_neighbour_nonperiodic (const int &direction)
 Set the neighbour in particular direction to be nonperiodic. More...
 
unsigned nneighbour ()
 Return the number of neighbours. More...
 

Private Attributes

std::map< int, Vector< TreeRoot * > > Edge_neighbour_pt
 
std::map< TreeRoot *, intUp_equivalent
 
std::map< TreeRoot *, intRight_equivalent
 

Additional Inherited Members

- Public Types inherited from oomph::Tree
typedef void(Tree::* VoidMemberFctPt) ()
 Function pointer to argument-free void Tree member function. More...
 
typedef void(Tree::* VoidMeshPtArgumentMemberFctPt) (Mesh *&mesh_pt)
 
- Static Public Member Functions inherited from oomph::OcTree
static Vector< intfaces_of_common_edge (const int &edge)
 Function that, given an edge, returns the two faces on which it. More...
 
static void setup_static_data ()
 Setup the static data, rotation and reflection schemes, etc. More...
 
static void doc_face_neighbours (Vector< Tree * > forest_nodes_pt, std::ofstream &neighbours_file, std::ofstream &neighbours_txt_file, double &max_error)
 
static void doc_true_edge_neighbours (Vector< Tree * > forest_nodes_pt, std::ofstream &neighbours_file, std::ofstream &no_true_edge_file, std::ofstream &neighbours_txt_file, double &max_error)
 
static int get_the_other_face (const unsigned &n1, const unsigned &n2, const unsigned &nnode1d, const int &face)
 
static unsigned vertex_to_node_number (const int &vertex, const unsigned &nnode1d)
 
static int node_number_to_vertex (const unsigned &n, const unsigned &nnode1d)
 
static Vector< introtate (const int &new_up, const int &new_right, const Vector< int > &dir)
 
static int rotate (const int &new_up, const int &new_right, const int &dir)
 
- Static Public Member Functions inherited from oomph::Tree
static doublemax_neighbour_finding_tolerance ()
 
- Static Public Attributes inherited from oomph::OcTree
static Vector< std::string > Direct_string
 Translate (enumerated) directions into strings. More...
 
static Vector< intReflect_face
 Get opposite face, e.g. Reflect_face[L]=R. More...
 
static Vector< intReflect_edge
 Get opposite edge, e.g. Reflect_edge[DB]=UF. More...
 
static Vector< intReflect_vertex
 Get opposite vertex, e.g. Reflect_vertex[LDB]=RUF. More...
 
static Vector< Vector< int > > Vertex_at_end_of_edge
 Map of vectors containing the two vertices for each edge. More...
 
static std::map< Vector< int >, intVector_to_direction
 
static Vector< Vector< int > > Direction_to_vector
 
static std::map< std::pair< std::pair< int, int >, std::pair< int, int > >, std::pair< int, int > > Up_and_right_equivalent_for_pairs_of_vertices
 
- Static Public Attributes inherited from oomph::Tree
static const int OMEGA = 26
 Default value for an unassigned neighbour. More...
 
- Protected Member Functions inherited from oomph::OcTree
 OcTree ()
 Default constructor (empty and broken) More...
 
 OcTree (RefineableElement *const &object_pt)
 
 OcTree (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type)
 
- Protected Member Functions inherited from oomph::Tree
 Tree ()
 Default constructor (empty and broken) More...
 
 Tree (RefineableElement *const &object_pt)
 
 Tree (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type)
 
- Protected Attributes inherited from oomph::Tree
TreeRootRoot_pt
 Pointer to the root of the tree. More...
 
TreeFather_pt
 Pointer to the Father of the Tree. More...
 
Vector< Tree * > Son_pt
 Vector of pointers to the sons of the Tree. More...
 
int Level
 Level of the Tree (level 0 = root) More...
 
int Son_type
 Son type (e.g. SW/SE/NW/NE in a quadtree) More...
 
RefineableElementObject_pt
 Pointer to the object represented by the tree. More...
 
- Protected Attributes inherited from oomph::TreeRoot
std::map< int, TreeRoot * > Neighbour_pt
 
std::map< int, boolNeighbour_periodic
 
- Static Protected Attributes inherited from oomph::OcTree
static bool Static_data_has_been_setup = false
 Bool indicating that static member data has been setup. More...
 
- Static Protected Attributes inherited from oomph::Tree
static double Max_neighbour_finding_tolerance = 1.0e-14
 

Detailed Description

OcTreeRoot is a OcTree that forms the root of a (recursive) octree. The "root node" is special as it holds additional information about its neighbours and their relative rotation (inside a OcTreeForest).

Constructor & Destructor Documentation

◆ OcTreeRoot() [1/2]

oomph::OcTreeRoot::OcTreeRoot ( RefineableElement *const &  object_pt)
inline

Constructor for the root octree: Pass pointer to the RefineableQElement<3> that is represented by the OcTree.

643  {
644 #ifdef PARANOID
645  // Check that static member data has been set up
647  {
648  std::string error_message =
649  "Static member data hasn't been setup yet.\n";
650  error_message += "Call OcTree::setup_static_data() before creating\n";
651  error_message += "any OcTreeRoots\n";
652 
653  throw OomphLibError(
655  }
656 #endif
657  }
OcTree()
Default constructor (empty and broken)
Definition: octree.h:382
static bool Static_data_has_been_setup
Bool indicating that static member data has been setup.
Definition: octree.h:412
TreeRoot(RefineableElement *const &object_pt)
Constructor for the (empty) root tree.
Definition: tree.h:342
RefineableElement * object_pt() const
Definition: tree.h:88
Tree()
Default constructor (empty and broken)
Definition: tree.h:266
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::OcTree::Static_data_has_been_setup, and oomph::Global_string_for_annotation::string().

◆ OcTreeRoot() [2/2]

oomph::OcTreeRoot::OcTreeRoot ( const OcTreeRoot dummy)
delete

Broken copy constructor.

Member Function Documentation

◆ add_edge_neighbour_pt()

void oomph::OcTreeRoot::add_edge_neighbour_pt ( TreeRoot oc_tree_root_pt,
const unsigned edge_direction 
)
inline

Add pointer to the edge-neighbouring [Oc]TreeRoot in the (enumerated) (edge) direction – maintains uniqueness

718  {
719 #ifdef PARANOID
720  using namespace OcTreeNames;
721  if ((edge_direction != LB) && (edge_direction != RB) &&
722  (edge_direction != DB) && (edge_direction != UB) &&
723  (edge_direction != LD) && (edge_direction != RD) &&
724  (edge_direction != LU) && (edge_direction != RU) &&
725  (edge_direction != LF) && (edge_direction != RF) &&
726  (edge_direction != DF) && (edge_direction != UF))
727  {
728  std::ostringstream error_stream;
729  error_stream << "Wrong edge_direction: "
730  << Direct_string[edge_direction] << std::endl;
731  throw OomphLibError(
732  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
733  }
734 #endif
735 
736  Vector<TreeRoot*>::iterator it =
737  find(Edge_neighbour_pt[edge_direction].begin(),
738  Edge_neighbour_pt[edge_direction].end(),
739  oc_tree_root_pt);
740  if (it == Edge_neighbour_pt[edge_direction].end())
741  {
742  Edge_neighbour_pt[edge_direction].push_back(oc_tree_root_pt);
743  }
744  }
std::map< int, Vector< TreeRoot * > > Edge_neighbour_pt
Definition: octree.h:616
static Vector< std::string > Direct_string
Translate (enumerated) directions into strings.
Definition: octree.h:329
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
@ DF
Definition: octree.h:67
@ RD
Definition: octree.h:62
@ RB
Definition: octree.h:58
@ UF
Definition: octree.h:68
@ RU
Definition: octree.h:64
@ LF
Definition: octree.h:65
@ LD
Definition: octree.h:61
@ RF
Definition: octree.h:66
@ LU
Definition: octree.h:63
@ DB
Definition: octree.h:59
@ UB
Definition: octree.h:60
@ LB
Definition: octree.h:57

References oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, oomph::OcTree::Direct_string, Edge_neighbour_pt, Eigen::placeholders::end, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, oomph::OcTreeNames::RF, oomph::OcTreeNames::RU, oomph::OcTreeNames::UB, and oomph::OcTreeNames::UF.

Referenced by oomph::OcTreeForest::find_neighbours(), and UnsteadyHeatProblem< ELEMENT >::set_neighbour_periodic_and_up_right_equivalents().

◆ direction_of_neighbour()

int oomph::OcTreeRoot::direction_of_neighbour ( TreeRoot octree_root_pt)
inline

If octree_root_pt is a neighbour, return the direction [faces L/R/F/B/U/D or edges DB/UP/...] in which it is found, otherwise return OMEGA

815  {
816  using namespace OcTreeNames;
817 
818  if (Neighbour_pt[U] == octree_root_pt)
819  {
820  return U;
821  }
822  if (Neighbour_pt[D] == octree_root_pt)
823  {
824  return D;
825  }
826  if (Neighbour_pt[L] == octree_root_pt)
827  {
828  return L;
829  }
830  if (Neighbour_pt[R] == octree_root_pt)
831  {
832  return R;
833  }
834  if (Neighbour_pt[F] == octree_root_pt)
835  {
836  return F;
837  }
838  if (Neighbour_pt[B] == octree_root_pt)
839  {
840  return B;
841  }
842 
843  if (Neighbour_pt[LB] == octree_root_pt)
844  {
845  return LB;
846  }
847  if (Neighbour_pt[RB] == octree_root_pt)
848  {
849  return RB;
850  }
851  if (Neighbour_pt[DB] == octree_root_pt)
852  {
853  return DB;
854  }
855  if (Neighbour_pt[UB] == octree_root_pt)
856  {
857  return UB;
858  }
859 
860  if (Neighbour_pt[LD] == octree_root_pt)
861  {
862  return LD;
863  }
864  if (Neighbour_pt[RD] == octree_root_pt)
865  {
866  return RD;
867  }
868  if (Neighbour_pt[LU] == octree_root_pt)
869  {
870  return LU;
871  }
872  if (Neighbour_pt[RU] == octree_root_pt)
873  {
874  return RU;
875  }
876 
877  if (Neighbour_pt[LF] == octree_root_pt)
878  {
879  return LF;
880  }
881  if (Neighbour_pt[RF] == octree_root_pt)
882  {
883  return RF;
884  }
885  if (Neighbour_pt[DF] == octree_root_pt)
886  {
887  return DF;
888  }
889  if (Neighbour_pt[UF] == octree_root_pt)
890  {
891  return UF;
892  }
893 
894 
895  // Search over all edge neighbours
896  for (int dir = LB; dir <= UF; dir++)
897  {
898  Vector<TreeRoot*> edge_neigh_pt = this->edge_neighbour_pt(dir);
899  unsigned n_neigh = edge_neigh_pt.size();
900  for (unsigned e = 0; e < n_neigh; e++)
901  {
902  if (edge_neigh_pt[e] == octree_root_pt)
903  {
904  return dir;
905  }
906  }
907  }
908 
909 
910  // If we get here, it's not a neighbour
911  return OMEGA;
912  }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
MatrixXd L
Definition: LLT_example.cpp:6
@ R
Definition: StatisticsVector.h:21
Definition: matrices.h:74
Vector< TreeRoot * > edge_neighbour_pt(const unsigned &edge_direction)
Definition: octree.h:668
std::map< int, TreeRoot * > Neighbour_pt
Definition: tree.h:330
static const int OMEGA
Default value for an unassigned neighbour.
Definition: tree.h:262
@ B
Definition: octree.h:73
@ D
Definition: octree.h:71
@ F
Definition: octree.h:74
@ U
Definition: octree.h:72

References oomph::OcTreeNames::B, oomph::OcTreeNames::D, oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, e(), edge_neighbour_pt(), oomph::OcTreeNames::F, L, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::TreeRoot::Neighbour_pt, oomph::Tree::OMEGA, R, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, oomph::OcTreeNames::RF, oomph::OcTreeNames::RU, oomph::OcTreeNames::U, oomph::OcTreeNames::UB, and oomph::OcTreeNames::UF.

Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), right_equivalent(), and up_equivalent().

◆ edge_neighbour_pt()

Vector<TreeRoot*> oomph::OcTreeRoot::edge_neighbour_pt ( const unsigned edge_direction)
inline

Return vector of pointers to the edge-neighbouring TreeRoots in the (enumerated) (edge) direction.

669  {
670 #ifdef PARANOID
671  using namespace OcTreeNames;
672  if ((edge_direction != LB) && (edge_direction != RB) &&
673  (edge_direction != DB) && (edge_direction != UB) &&
674  (edge_direction != LD) && (edge_direction != RD) &&
675  (edge_direction != LU) && (edge_direction != RU) &&
676  (edge_direction != LF) && (edge_direction != RF) &&
677  (edge_direction != DF) && (edge_direction != UF))
678  {
679  std::ostringstream error_stream;
680  error_stream << "Wrong edge_direction: "
681  << Direct_string[edge_direction] << std::endl;
682  throw OomphLibError(
683  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
684  }
685 #endif
686 
687  return Edge_neighbour_pt[edge_direction];
688  }

References oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, oomph::OcTree::Direct_string, Edge_neighbour_pt, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, oomph::OcTreeNames::RF, oomph::OcTreeNames::RU, oomph::OcTreeNames::UB, and oomph::OcTreeNames::UF.

Referenced by direction_of_neighbour(), and oomph::OcTreeForest::oc_edge_neigh_pt().

◆ nedge_neighbour()

unsigned oomph::OcTreeRoot::nedge_neighbour ( const unsigned edge_direction)
inline

Return number of edge-neighbouring OcTreeRoot in the (enumerated) (edge) direction.

694  {
695 #ifdef PARANOID
696  using namespace OcTreeNames;
697  if ((edge_direction != LB) && (edge_direction != RB) &&
698  (edge_direction != DB) && (edge_direction != UB) &&
699  (edge_direction != LD) && (edge_direction != RD) &&
700  (edge_direction != LU) && (edge_direction != RU) &&
701  (edge_direction != LF) && (edge_direction != RF) &&
702  (edge_direction != DF) && (edge_direction != UF))
703  {
704  std::ostringstream error_stream;
705  error_stream << "Wrong edge_direction: "
706  << Direct_string[edge_direction] << std::endl;
707  throw OomphLibError(
708  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
709  }
710 #endif
711  return Edge_neighbour_pt[edge_direction].size();
712  }

References oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, oomph::OcTree::Direct_string, Edge_neighbour_pt, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, oomph::OcTreeNames::RF, oomph::OcTreeNames::RU, oomph::OcTreeNames::UB, and oomph::OcTreeNames::UF.

◆ operator=()

void oomph::OcTreeRoot::operator= ( const OcTreeRoot )
delete

Broken assignment operator.

◆ right_equivalent()

int oomph::OcTreeRoot::right_equivalent ( TreeRoot tree_root_pt)
inline

The same thing as up_equivalent, but for the right direction: When viewed from the current octree neighbour, our right direction is the neighbour's Right_equivalent[neighbour_pt] direction. Returns OMEGA if the Octree specified by the pointer argument is not a neighbour.

791  {
792  if (direction_of_neighbour(tree_root_pt) == OMEGA)
793  {
794  return OMEGA;
795  }
796  else
797  {
798  return Right_equivalent[tree_root_pt];
799  }
800  }
int direction_of_neighbour(TreeRoot *octree_root_pt)
Definition: octree.h:814
std::map< TreeRoot *, int > Right_equivalent
Definition: octree.h:635

References direction_of_neighbour(), oomph::Tree::OMEGA, and Right_equivalent.

Referenced by oomph::OcTree::gteq_face_neighbour(), and oomph::OcTree::gteq_true_edge_neighbour().

◆ set_right_equivalent()

void oomph::OcTreeRoot::set_right_equivalent ( TreeRoot tree_root_pt,
const int dir 
)
inline

The same thing as up_equivalent, but for the right direction: When viewed from the current octree neighbour, our right direction is the neighbour's Right_equivalent[neighbour_pt] direction.

807  {
808  Right_equivalent[tree_root_pt] = dir;
809  }

References Right_equivalent.

Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), and UnsteadyHeatProblem< ELEMENT >::set_neighbour_periodic_and_up_right_equivalents().

◆ set_up_equivalent()

void oomph::OcTreeRoot::set_up_equivalent ( TreeRoot tree_root_pt,
const int dir 
)
inline

Set up equivalent of the neighbours specified by pointer: When viewed from the current octree's neighbour, our up direction is the neighbour's Up_equivalent[neighbour_pt] direction. If there's no rotation, this map contains the identify so that, e.g. Up_equivalent[neighbour_pt]=U (read as: "in my neighbour, my Up is its Up"). If the neighbour is rotated by 180 degrees relative to the current octree (around the back-front axis) say, we have Up_equivalent[neighbour_pt]=D (read as: "in my neighbour, my Up is its Down"); etc.

780  {
781  Up_equivalent[tree_root_pt] = dir;
782  }
std::map< TreeRoot *, int > Up_equivalent
Definition: octree.h:627

References Up_equivalent.

Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), and UnsteadyHeatProblem< ELEMENT >::set_neighbour_periodic_and_up_right_equivalents().

◆ up_equivalent()

int oomph::OcTreeRoot::up_equivalent ( TreeRoot tree_root_pt)
inline

Return up equivalent of the neighbours specified by pointer: When viewed from the current octree's neighbour, our up direction is the neighbour's Up_equivalent[neighbour_pt] direction. If there's no rotation, this map contains the identify so that, e.g. Up_equivalent[neighbour_pt]=U (read as: "in my neighbour, my Up is its Up"). If the neighbour is rotated by 180 degrees relative to the current octree (around the back-front axis) say, we have Up_equivalent[neighbour_pt]=D (read as: "in my neighbour, my Up is its Down"); etc. Returns OMEGA if the Octree specified by the pointer argument is not a neighbour.

758  {
759  if (direction_of_neighbour(tree_root_pt) == OMEGA)
760  {
761  return OMEGA;
762  }
763  else
764  {
765  return Up_equivalent[tree_root_pt];
766  }
767  }

References direction_of_neighbour(), oomph::Tree::OMEGA, and Up_equivalent.

Referenced by oomph::OcTree::gteq_face_neighbour(), and oomph::OcTree::gteq_true_edge_neighbour().

Member Data Documentation

◆ Edge_neighbour_pt

std::map<int, Vector<TreeRoot*> > oomph::OcTreeRoot::Edge_neighbour_pt
private

Map of pointers to the edge-neighbouring [Oc]TreeRoots: Edge_neighbour_pt[direction] is Vector to the pointers to the [Oc]TreeRoot's edge neighbours in the (enumerated) (edge) direction.

Referenced by add_edge_neighbour_pt(), edge_neighbour_pt(), and nedge_neighbour().

◆ Right_equivalent

std::map<TreeRoot*, int> oomph::OcTreeRoot::Right_equivalent
private

Map giving the Right equivalent of the neighbour specified by pointer: When viewed from the current octree's neighbour, our right direction is the neighbour's right_equivalent[neighbour_pt] direction. If there's no rotation, this map contains the identify so that, e.g. Right_equivalent[neighbour_pt]=R (read as: "in my neighbour, my Right is its Right").

Referenced by right_equivalent(), and set_right_equivalent().

◆ Up_equivalent

std::map<TreeRoot*, int> oomph::OcTreeRoot::Up_equivalent
private

Map giving the Up equivalent of the neighbour specified by pointer: When viewed from the current octree's neighbour, our up direction is the neighbour's Up_equivalent[neighbour_pt] direction. If there's no rotation, this map contains the identify so that, e.g. Up_equivalent[neighbour_pt]=U (read as: "in my neighbour, my Up is its Up"). If the neighbour is rotated by 180 degrees relative to the current octree(around the back-front axis), say, we have Up_equivalent[neighbour_pt]=D (read as: "in my neighbour, my Up is its Down"); etc.

Referenced by set_up_equivalent(), and up_equivalent().


The documentation for this class was generated from the following file: