OcTree class: Recursively defined, generalised octree. More...
#include <octree.h>
Public Member Functions | |
virtual | ~OcTree () |
Destructor. Note: Deleting a octree also deletes the objects associated with all non-leaf nodes! More... | |
OcTree (const OcTree &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const OcTree &)=delete |
Broken assignment operator. More... | |
Tree * | construct_son (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type) |
Overload the function construct_son to ensure that the son is a specific OcTree and not a general Tree. More... | |
OcTree * | gteq_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 |
Find (pointer to) ‘greater-or-equal-sized face neighbour’ in given direction (L/R/U/D/F/B). Another way of interpreting this is that we're looking for the neighbour across the present element's face 'direction'. The various arguments return additional information about the size and relative orientation of the neighbouring octree. To interpret these we use the following General convention: More... | |
OcTree * | gteq_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 |
Find (pointer to) ‘greater-or-equal-sized true edge neighbour’ in the given direction (LB,RB,DB,UB [the back edges], LD,RD,LU,RU [the side edges], LF,RF,DF,UF [the front edges]). More... | |
unsigned | self_test () |
Self-test: Check all neighbours. Return success (0) if the max. distance between corresponding points in the neighbours is less than the tolerance specified in the static value Tree::Max_neighbour_finding_tolerance. More... | |
Public Member Functions inherited from oomph::Tree | |
virtual | ~Tree () |
Destructor. Note: Deleting a tree also deletes the objects associated with its non-leave nodes. More... | |
Tree (const Tree &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const Tree &)=delete |
Broken assignment operator. More... | |
RefineableElement * | object_pt () const |
Return the pointer to the object (RefineableElement) represented by the tree. More... | |
void | flush_object () |
Flush the object represented by the tree. More... | |
Tree * | son_pt (const int &son_index) const |
Return pointer to the son for a given index. Note that to aid code readability specific enums have been defined for specific trees. However, these are simply aliases for ints and the general interface can be implemented once, here. More... | |
void | set_son_pt (const Vector< Tree * > &son_pt) |
Set vector of pointers to sons, indexed by the appropriate enum that identies son types. (To aid code readability specific enums have been defined for specific trees. However, these are simply aliases for ints and the general interface can be implemented once, here). More... | |
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... | |
TreeRoot * | root_pt () const |
Return pointer to root of the tree (const version) More... | |
template<class ELEMENT > | |
void | split_if_required () |
If required, split the leaf and create its sons – criterion: bool object_pt()-> to_be_refined() = true. More... | |
template<class ELEMENT > | |
void | p_refine_if_required (Mesh *&mesh_pt) |
If required, p-refine the leaf – criterion: bool object_pt()-> to_be_p_refined() = true or bool object_pt()-> to_be_p_unrefined() = true. More... | |
void | merge_sons_if_required (Mesh *&mesh_pt) |
If required, merge the four sons for unrefinement – criterion: bool object_pt()-> sons_to_be_unrefined() = true. More... | |
void | deactivate_object () |
Call the RefineableElement's deactivate_element() function. More... | |
void | traverse_all (Tree::VoidMemberFctPt member_function) |
Traverse the tree and execute void Tree member function member_function() at all its "nodes". More... | |
void | traverse_all (Tree::VoidMeshPtArgumentMemberFctPt member_function, Mesh *&mesh_pt) |
Traverse the tree and excute void Tree member function that takes a pointer to a mesh as an argument. More... | |
void | traverse_all_but_leaves (Tree::VoidMemberFctPt member_function) |
Traverse the tree and execute void Tree member function member_function() at all its "nodes" aparat from the leaves. More... | |
void | traverse_leaves (Tree::VoidMemberFctPt member_function) |
Traverse the tree and execute void Tree member function member_function() only at its leaves. More... | |
void | traverse_leaves (Tree::VoidMeshPtArgumentMemberFctPt member_function, Mesh *&mesh_pt) |
Traverse the tree and execute void Tree member function that takes a pointer to a mesh as an argument only at its leaves. More... | |
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... | |
Tree * | father_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... | |
Static Public Member Functions | |
static Vector< int > | faces_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) |
Doc/check all face neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighhbouring element. If the two filestreams are closed, output is suppressed. More... | |
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) |
Doc/check all true edge neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighhbouring element. If the two filestreams are closed, output is suppressed. More... | |
static int | get_the_other_face (const unsigned &n1, const unsigned &n2, const unsigned &nnode1d, const int &face) |
If an edge is bordered by the nodes whose local numbers are n1 and n2 in an element with nnode1d nodes along each coordinate direction, then this edge is shared by two faces. This function takes one of these faces as the argument face and returns the other one. (face is a direction in the set U,D,F,B,L,R). More... | |
static unsigned | vertex_to_node_number (const int &vertex, const unsigned &nnode1d) |
Return the local node number of given vertex [LDB,RDB,...] in an element with nnode1d nodes in each coordinate direction. More... | |
static int | node_number_to_vertex (const unsigned &n, const unsigned &nnode1d) |
Return the vertex [LDB,RDB,...] of local (vertex) node n in an element with nnode1d nodes in each coordinate direction. More... | |
static Vector< int > | rotate (const int &new_up, const int &new_right, const Vector< int > &dir) |
If U[p] becomes new_up and R[ight] becomes new_right then the direction vector dir becomes rotate(new_up, new_right, dir) More... | |
static int | rotate (const int &new_up, const int &new_right, const int &dir) |
If U[p] becomes new_up and R[ight] becomes new_right then the direction dir becomes rotate(new_up, new_right, dir) More... | |
Static Public Member Functions inherited from oomph::Tree | |
static double & | max_neighbour_finding_tolerance () |
Max. allowed discrepancy in neighbour finding routine (distance between points when identified from two neighbouring elements) More... | |
Static Public Attributes | |
static Vector< std::string > | Direct_string |
Translate (enumerated) directions into strings. More... | |
static Vector< int > | Reflect_face |
Get opposite face, e.g. Reflect_face[L]=R. More... | |
static Vector< int > | Reflect_edge |
Get opposite edge, e.g. Reflect_edge[DB]=UF. More... | |
static Vector< int > | Reflect_vertex |
Get opposite vertex, e.g. Reflect_vertex[LDB]=RUF. More... | |
static Vector< Vector< int > > | Vertex_at_end_of_edge |
Vector of vectors containing the two vertices for each edge, e.g. Vertex_at_end_of_edge [LU][0]=LUB and Vertex_at_end_of_edge [LU][1]=LUF. More... | |
static std::map< Vector< int >, int > | Vector_to_direction |
Each vector representing a direction can be translated into a direction, either a son type (vertex), a face or an edge. E.g. : Vector_to_direction[(1,-1,1)]=RDF, Vector_to_direction[(0,1,0)]=U. More... | |
static Vector< Vector< int > > | Direction_to_vector |
For each direction, i.e. a son_type (vertex), a face or an edge, this defines a vector that indicates this direction. E.g : Direction_to_vector[RDB]=(1,-1,-1), Direction_to_vector[U]=(0,1,0) More... | |
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 |
Storage for the up/right-equivalents corresponding to two pairs of vertices along an element edge: More... | |
Static Public Attributes inherited from oomph::Tree | |
static const int | OMEGA = 26 |
Default value for an unassigned neighbour. More... | |
Protected Member Functions | |
OcTree () | |
Default constructor (empty and broken) More... | |
OcTree (RefineableElement *const &object_pt) | |
Constructor for empty (root) tree: no father, no sons; just pass a pointer to its object (a RefineableQElement<3>). This is protected because OcTrees can only be created internally, during the split operation. Only OcTreeRoots can be created externally. More... | |
OcTree (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type) | |
Constructor for tree that has a father: Pass it the pointer to its object, the pointer to its father and tell it what type of son (LDB,RDB,...) it is. Protected because OcTrees can only be created internally, during the split operation. Only OcTreeRoots can be created externally. More... | |
Protected Member Functions inherited from oomph::Tree | |
Tree () | |
Default constructor (empty and broken) More... | |
Tree (RefineableElement *const &object_pt) | |
Default constructor for empty (root) tree: no father, no sons; just pass a pointer to its object Protected because Trees can only be created internally, during the split operation. Only TreeRoots can be created externally. More... | |
Tree (RefineableElement *const &object_pt, Tree *const &father_pt, const int &son_type) | |
Constructor for tree that has a father: Pass it the pointer to its object, the pointer to its father and tell it what type of son it is. Protected because Trees can only be created internally, during the split operation. Only TreeRoots can be created externally. More... | |
Static Protected Attributes | |
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 |
Max. allowed discrepancy in neighbour finding routine (distance between points when identified from two neighbouring elements) More... | |
Private Member Functions | |
OcTree * | gteq_face_neighbour (const int &direction, double &s_difflo, double &s_diffhi, int &diff_level, bool &in_neighbouring_tree, int max_level, OcTreeRoot *orig_root_pt) const |
Find ‘greater-or-equal-sized face neighbour’ in given direction (L/R/U/D/B/F). More... | |
OcTree * | gteq_edge_neighbour (const int &direction, const unsigned &i_root_edge_neighbour, unsigned &nroot_edge_neighbour, double &s_diff, int &diff_level, int max_level, OcTreeRoot *orig_root_pt) const |
Find ‘greater-or-equal-sized edge neighbour’ in given direction (LB,RB,DB,UB [the back edges], LD,RD,LU,RU [the side edges], LF,RF,DF,UF [the front edges]). More... | |
bool | edge_neighbour_is_face_neighbour (const int &edge, OcTree *edge_neighb_pt) const |
Is the edge neighbour (for edge "edge") specified via the pointer also a face neighbour for one of the two adjacent faces? More... | |
Static Private Member Functions | |
static void | construct_rotation_matrix (int &axis, int &angle, DenseMatrix< int > &mat) |
This constructs the rotation matrix of the rotation around the axis axis with an angle of angle*90 . More... | |
static void | mult_mat_vect (const DenseMatrix< int > &mat, const Vector< int > &vect1, Vector< int > &vect2) |
Helper function: Performs the operation : vect2 = mat*vect1. More... | |
static void | mult_mat_mat (const DenseMatrix< int > &mat1, const DenseMatrix< int > &mat2, DenseMatrix< int > &mat3) |
Helper function: Performs the operation : mat3=mat1*mat2. More... | |
static Vector< int > | vertex_node_to_vector (const unsigned &n, const unsigned &nnode1d) |
Returns the vector of the coordinate directions of vertex node number n in an element with nnode1d element per dimension. More... | |
Static Private Attributes | |
static Vector< int > | Cosi |
Entry in rotation matrix: cos(i*90) More... | |
static Vector< int > | Sini |
Entry in rotation matrix sin(i*90) More... | |
static DenseMatrix< bool > | Is_adjacent |
Array of direction/octant adjacency scheme: Is_adjacent(direction,octant): Is face/edge direction adjacent to octant octant ? (Table in Samet's book) More... | |
static DenseMatrix< int > | Reflect |
Reflection scheme: Reflect(direction,octant): Get mirror of octant/edge in specified direction. E.g. Reflect(LDF,L)=RDF. More... | |
static DenseMatrix< int > | Common_face |
Determine common face of edges or octants. Slightly bizarre lookup scheme from Samet's book. More... | |
static Vector< std::string > | Colour |
Colours for neighbours in various directions. More... | |
static DenseMatrix< double > | S_base |
s_base(i,direction): Initial value for coordinate s[i] on the face indicated by direction (L/R/U/D/F/B) More... | |
static DenseMatrix< double > | S_steplo |
Each face of the RefineableQElement<3> that is represented by the octree is parametrised by two (of the three) local coordinates that parametrise the entire 3D element. E.g. the B[ack] face is parametrised by (s[0], s[1]); the D[own] face is parametrised by (s[0],s[2]); etc. We always identify the in-face coordinate with the lower (3D) index with the subscript _lo and the one with the larger (3D) index with the subscript _hi . Here we set up the translation scheme between the 2D in-face coordinates (s_lo,s_hi) and the corresponding 3D coordinates: If we're located on face face [L/R/F/B/U/D], then an increase in s_lo from -1 to +1 corresponds to a change of s_steplo(i,face) in the 3D coordinate s [i]. More... | |
static DenseMatrix< double > | S_stephi |
If we're located on face face [L/R/F/B/U/D], then an increase in s_hi from -1 to +1 corresponds to a change of s_stephi(i,face) in the 3D coordinate \ s[i]. [Read the discussion of s_steplo for an explanation of the subscripts _hi and _lo .]. More... | |
static DenseMatrix< double > | S_directlo |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant has an offset. If we project the son_octant's left/down/back vertex onto the father's face face , it is located at the in-face coordinate s_lo = h/2 S_directlo(face,son_octant) . [See discussion of s_steplo for an explanation of the subscripts _hi and _lo .]. More... | |
static DenseMatrix< double > | S_directhi |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant has an offset. If we project the son_octant's left/down/back vertex onto the father's face face , it is located at the in-face coordinate s_hi = h/2 S_directlhi(face,son_octant) . [See discussion of s_steplo for an explanation of the subscripts _hi and _lo .]. More... | |
static DenseMatrix< double > | S_base_edge |
S_base_edge(i,edge): Initial value for coordinate s[i] on the specified edge (LF/RF/...). More... | |
static DenseMatrix< double > | S_step_edge |
Each edge of the RefineableQElement<3> that is represented by the octree is parametrised by one (of the three) local coordinates that parametrise the entire 3D element. If we're located on edge edge [DB,UB,...], then an increase in s from -1 to +1 corresponds to a change of s_step_edge(i,edge) in the 3D coordinates s [i]. More... | |
static DenseMatrix< double > | S_direct_edge |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant has an offset. If we project the son_octant's left/down/back vertex onto the father's edge edge , it is located at the in-face coordinate s_lo = h/2 S_direct_edge(edge,son_octant) . More... | |
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) |
Function pointer to a void Tree member function that takes a pointer to a mesh as its argument. More... | |
Protected Attributes inherited from oomph::Tree | |
TreeRoot * | Root_pt |
Pointer to the root of the tree. More... | |
Tree * | Father_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... | |
RefineableElement * | Object_pt |
Pointer to the object represented by the tree. More... | |
OcTree class: Recursively defined, generalised octree.
An OcTree has:
The tree can also be part of a forest. If that is the case, the root will have pointers to the roots of neighbouring octrees.
The objects contained in the octree are assumed to be (topologically) cubic elements whose geometry is parametrised by local coordinates .
The tree can be traversed while actions are being performed at all of its "nodes" or only at the leaf "nodes".
Finally, the leaf "nodes" can be split depending on criteria defined by the object.
Note that OcTrees are only generated by splitting existing OcTrees. Therefore, the constructors are protected. The only OcTree that "Joe User" can create is the (derived) class OcTreeRoot.
|
inlinevirtual |
|
delete |
Broken copy constructor.
|
inlineprotected |
Default constructor (empty and broken)
Definition at line 382 of file octree.h.
Referenced by construct_son().
|
inlineprotected |
Constructor for empty (root) tree: no father, no sons; just pass a pointer to its object (a RefineableQElement<3>). This is protected because OcTrees can only be created internally, during the split operation. Only OcTreeRoots can be created externally.
|
inlineprotected |
Constructor for tree that has a father: Pass it the pointer to its object, the pointer to its father and tell it what type of son (LDB,RDB,...) it is. Protected because OcTrees can only be created internally, during the split operation. Only OcTreeRoots can be created externally.
|
staticprivate |
This constructs the rotation matrix of the rotation around the axis axis
with an angle of angle*90
.
Build the rotation matrix for a rotation around the axis axis
of an angle angle*90
.
Definition at line 609 of file octree.cc.
References oomph::VectorHelpers::angle(), Cosi, oomph::OcTreeNames::F, i, oomph::BinaryTreeNames::R, oomph::OcTreeNames::R, Sini, and oomph::OcTreeNames::U.
Referenced by rotate().
|
inlinevirtual |
Overload the function construct_son to ensure that the son is a specific OcTree and not a general Tree.
Implements oomph::Tree.
Definition at line 129 of file octree.h.
References oomph::Tree::father_pt(), oomph::Tree::object_pt(), OcTree(), and oomph::Tree::son_type().
|
static |
Doc/check all face neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighhbouring element. If the two filestreams are closed, output is suppressed.
Doc/check all face neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighbouring element. If the two filestreams are closed, output is suppressed. (Static function.)
Definition at line 4275 of file octree.cc.
References Colour, Direct_string, oomph::OcTreeNames::F, oomph::FiniteElement::get_x(), gteq_face_neighbour(), i, oomph::TreeRoot::is_neighbour_periodic(), oomph::BinaryTreeNames::L, oomph::Tree::Max_neighbour_finding_tolerance, oomph::RefineableElement::nodes_built(), oomph::RefineableElement::number(), oomph::Tree::object_pt(), oomph::Tree::OMEGA, oomph::pause(), oomph::Tree::root_pt(), s, S_base, S_stephi, and S_steplo.
Referenced by oomph::OcTreeForest::check_all_neighbours(), self_test(), and oomph::OcTreeForest::self_test().
|
static |
Doc/check all true edge neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighhbouring element. If the two filestreams are closed, output is suppressed.
///////////////////////////////////////////////////////////////////
Doc/check all true edge neighbours of octree (nodes) contained in the Vector forest_node_pt. Output into neighbours_file which can be viewed from tecplot with OcTreeNeighbours.mcr Neighbour info and errors are displayed on neighbours_txt_file. Finally, compute the max. error between vertices when viewed from neighbouring element. If the two filestreams are closed, output is suppressed. (Static function).
Definition at line 4552 of file octree.cc.
References Colour, Direct_string, faces_of_common_edge(), oomph::FiniteElement::get_x(), gteq_true_edge_neighbour(), i, oomph::Tree::is_leaf(), oomph::TreeRoot::is_neighbour_periodic(), oomph::OcTreeNames::LB, oomph::Tree::Max_neighbour_finding_tolerance, oomph::RefineableElement::nodes_built(), oomph::RefineableElement::number(), oomph::Tree::object_pt(), oomph::Tree::OMEGA, oomph::pause(), oomph::Tree::root_pt(), s, S_base_edge, S_step_edge, and oomph::OcTreeNames::UF.
Referenced by oomph::OcTreeForest::check_all_neighbours(), self_test(), and oomph::OcTreeForest::self_test().
|
private |
Is the edge neighbour (for edge "edge") specified via the pointer also a face neighbour for one of the two adjacent faces?
Definition at line 2769 of file octree.cc.
References oomph::OcTreeNames::B, oomph::OcTreeNames::D, oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, Direct_string, oomph::OcTreeNames::F, gteq_face_neighbour(), oomph::BinaryTreeNames::L, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::BinaryTreeNames::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 gteq_true_edge_neighbour().
|
static |
Function that, given an edge, returns the two faces on which it.
Given an edge, this function returns the faces on which it lies.
Definition at line 268 of file octree.cc.
References oomph::OcTreeNames::B, oomph::OcTreeNames::D, oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, Direct_string, oomph::OcTreeNames::F, oomph::BinaryTreeNames::L, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::BinaryTreeNames::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 doc_true_edge_neighbours(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_neighbour(), oomph::RefineableQElement< 3 >::node_created_by_neighbour(), and oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_son_of_neighbour().
|
static |
If an edge is bordered by the nodes whose local numbers are n1 and n2 in an element with nnode1d nodes along each coordinate direction, then this edge is shared by two faces. This function takes one of these faces as the argument face
and returns the other one. (face
is a direction in the set U,D,F,B,L,R).
This function takes as argument two node numbers of two nodes delimiting an edge, and one face of this edge and returns the other face that is sharing this edge. The node numbers given to this function MUST be vertices nodes to work. it also need the value of nnode1d to work. (face
is a direction in the set U,D,F,B,L,R).
Definition at line 565 of file octree.cc.
References Direction_to_vector, i, Vector_to_direction, and vertex_node_to_vector().
Referenced by oomph::OcTreeForest::construct_up_right_equivalents().
|
private |
Find ‘greater-or-equal-sized edge neighbour’ in given direction (LB,RB,DB,UB [the back edges], LD,RD,LU,RU [the side edges], LF,RF,DF,UF [the front edges]).
This is an auxiliary routine which allows neighbour finding in adjacent octrees. Needs to keep track of the maximum level to which search is performed because in the presence of OcTree forests, the search isn't purely recursive.
Parameters:
i_root_edge_neighbour
specifies which of these is used. Use this as "reverse communication": First call with i_root_edge_neighbour=0
and n_root_edge_neighour
initialised to anything you want (zero, ideally). On return from the fct, n_root_edge_neighour
contains the total number of true edge neighbours, so additional calls to the fct with i_root_edge_neighbour>0
can be made until they've all been visited.Note: some of the auxiliary information may be incorrect if the neighbour is not a true edge neighbour. We don't care because we're not dealing with those!
This is an auxiliary routine which allows neighbour finding in adjacent octrees. Needs to keep track of previous son types and the maximum level to which search is performed.
Parameters:
i_root_edge_neighbour
specifies which of these is used. Use this as "reverse communication": First call with i_root_edge_neighbour=0
and n_root_edge_neighour
initialised to anything you want (zero, ideally). On return from the fct, n_root_edge_neighour
contains the total number of true edge neighbours, so additional calls to the fct with i_root_edge_neighbour>0
can be made until they've all been visited.Definition at line 4015 of file octree.cc.
References Common_face, oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, Direct_string, oomph::Tree::Father_pt, gteq_face_neighbour(), Is_adjacent, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::Tree::Level, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::Tree::OMEGA, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, Reflect, oomph::OcTreeNames::RF, oomph::Tree::Root_pt, rotate(), oomph::OcTreeNames::RU, S_direct_edge, oomph::Tree::Son_pt, oomph::Tree::Son_type, oomph::OcTreeNames::UB, and oomph::OcTreeNames::UF.
Referenced by gteq_true_edge_neighbour().
|
private |
Find ‘greater-or-equal-sized face neighbour’ in given direction (L/R/U/D/B/F).
This is an auxiliary routine which allows neighbour finding in adjacent octrees. Needs to keep track of the maximum level to which search is performed because in the presence of OcTree forests, the search isn't purely recursive.
Parameters:
This is an auxiliary routine which allows neighbour finding in adjacent octrees. Needs to keep track of previous son types and the maximum level to which search is performed.
Parameters:
Definition at line 3839 of file octree.cc.
References oomph::OcTreeNames::B, oomph::OcTreeNames::D, Direct_string, oomph::OcTreeNames::F, oomph::Tree::Father_pt, gteq_face_neighbour(), Is_adjacent, oomph::BinaryTreeNames::L, oomph::Tree::Level, oomph::TreeRoot::neighbour_pt(), oomph::BinaryTreeNames::R, Reflect, oomph::Tree::Root_pt, rotate(), S_directhi, S_directlo, oomph::Tree::Son_pt, oomph::Tree::Son_type, and oomph::OcTreeNames::U.
OcTree * oomph::OcTree::gteq_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 |
Find (pointer to) ‘greater-or-equal-sized face neighbour’ in given direction (L/R/U/D/F/B). Another way of interpreting this is that we're looking for the neighbour across the present element's face 'direction'. The various arguments return additional information about the size and relative orientation of the neighbouring octree. To interpret these we use the following General convention:
With this convention, the interpretation of the arguments is as follows:
translate_s
turns the index of the local coordinate in the present octree into that of the neighbour. If there are no rotations then translate_s
[i] = i.s_sw
[0], s_sw
[1], s_sw
[2]) in the neighbouring octree.s_ne
[0], s_ne
[1], s_ne
[2]) in the neighbouring octree.direction
. When viewed from the neighbouring octree, the face that separates the present octree from its neighbour is the neighbour's face face
. If there's no rotation between the two octrees, this is a simple reflection: For instance, if we're looking for a neighhbour in the R
[ight] direction
, face
will be L
[eft]diff_level
<= 0 indicates the difference in refinement levels between the two neighbours. If diff_level==0
, the neighbour has the same size as the current octree. Definition at line 3373 of file octree.cc.
References oomph::OcTreeNames::B, oomph::OcTreeNames::D, Direct_string, Direction_to_vector, oomph::OcTreeNames::F, i, oomph::BinaryTreeNames::L, oomph::Tree::Level, oomph::BinaryTreeNames::R, Reflect_face, oomph::OcTreeRoot::right_equivalent(), oomph::Tree::Root_pt, rotate(), S_base, S_stephi, S_steplo, oomph::OcTreeNames::U, and oomph::OcTreeRoot::up_equivalent().
Referenced by oomph::RefineableQElement< 3 >::check_integrity(), doc_face_neighbours(), edge_neighbour_is_face_neighbour(), gteq_edge_neighbour(), gteq_face_neighbour(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_neighbour(), oomph::RefineableQElement< 3 >::node_created_by_neighbour(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_son_of_neighbour(), oomph::RefineableQElement< 3 >::oc_hang_helper(), and oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::oc_hang_helper().
OcTree * oomph::OcTree::gteq_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 |
Find (pointer to) ‘greater-or-equal-sized true edge neighbour’ in the given direction (LB,RB,DB,UB [the back edges], LD,RD,LU,RU [the side edges], LF,RF,DF,UF [the front edges]).
Find (pointer to) ‘greater-or-equal-sized true edge neighbour’ in the given direction (LB,RB,DB,UB [the back edges], LD,RD,LU,RU [the side edges], LF,RF,DF,UF [the front edges]). Another way of interpreting this is that we're looking for the neighbour across the present element's edge 'direction'. The various arguments return additional information about the size and relative orientation of the neighbouring octree. Each edge of the element that is represented by the octree is parametrised by one (of the three) local coordinates that parametrise the entire 3D element. E.g. the L[eft]B[ack] edge is parametrised by s[1]; the "low" vertex of this edge (located at the low value of this coordinate, i.e. at s[1]=-1) is L[eft]D[own]B[ack]. The "high" vertex of this edge (located at the high value of this coordinate, i.e. at s[1]=1) is L[eft]U[p]B[ack]; etc The interpretation of the arguments is as follows:
Another way of interpreting this is that we're looking for the neighbour across the present element's edge 'direction'. The various arguments return additional information about the size and relative orientation of the neighbouring octree. Each edge of the element that is represented by the octree is parametrised by one (of the three) local coordinates that parametrise the entire 3D element. E.g. the L[eft]B[ack] edge is parametrised by s[1]; the "low" vertex of this edge (located at the low value of this coordinate, i.e. at s[1]=-1) is L[eft]D[own]B[ack]. The "high" vertex of this edge (located at the high value of this coordinate, i.e. at s[1]=1) is L[eft]U[p]B[ack]; etc
The interpretation of the arguments is as follows:
i_root_edge_neighbour
specifies which of these is used. Use this as "reverse communication": First call with i_root_edge_neighbour=0
and n_root_edge_neighour
initialised to anything you want (zero, ideally). On return from the fct, n_root_edge_neighour
contains the total number of true edge neighbours, so additional calls to the fct with i_root_edge_neighbour>0
can be made until they've all been visited.translate_s
turns the index of the local coordinate in the present octree into that of the neighbour. If there are no rotations then translate_s
[i] = i.s_lo
[0], s_lo
[1], s_lo
[2])s_hi
[0], s_hi
[1], s_hi
[2])direction
. When viewed from the neighbouring octree, the edge that separates the present octree from its neighbour is the neighbour's edge edge
. If there's no rotation between the two octrees, this is a simple reflection: For instance, if we're looking for a neighhbour in the DB
direction
, edge
will be UF
.diff_level
<= 0 indicates the difference in refinement levels between the two neighbours. If diff_level==0
, the neighbour has the same size as the current octree.Important: We're only looking for true edge neighbours i.e. edge neigbours that are not also face neighbours. This is an important difference to Samet's terminology. If the neighbour in a certain direction is not a true edge neighbour, or if there is no neighbour, then this function returns NULL.
i_root_edge_neighbour
specifies which of these is used. Use this as "reverse communication": First call with i_root_edge_neighbour=0
and n_root_edge_neighour
initialised to anything you want (zero, ideally). On return from the fct, n_root_edge_neighour
contains the total number of true edge neighbours, so additional calls to the fct with i_root_edge_neighbour>0
can be made until they've all been visited.translate_s
turns the index of the local coordinate in the present octree into that of the neighbour. If there are no rotations then translate_s
[i] = i.s_lo
[0], s_lo
[1], s_lo
[2])s_hi
[0], s_hi
[1], s_hi
[2])direction
. When viewed from the neighbouring octree, the edge that separates the present octree from its neighbour is the neighbour's edge edge
. If there's no rotation between the two octrees, this is a simple reflection: For instance, if we're looking for a neighhbour in the DB
direction
, edge
will be UF
.diff_level
<= 0 indicates the difference in refinement levels between the two neighbours. If diff_level==0
, the neighbour has the same size as the current octree.Important: We're only looking for true edge neighbours i.e. edge neigbours that are not also face neighbours. This is an important difference to Samet's terminology. If the neighbour in a certain direction is not a true edge neighbour, or if there is no neighbour, then this function returns NULL.
Definition at line 3618 of file octree.cc.
References oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, Direct_string, Direction_to_vector, edge_neighbour_is_face_neighbour(), oomph::OcTreeNames::F, gteq_edge_neighbour(), i, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::Tree::Level, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::BinaryTreeNames::R, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, Reflect_edge, oomph::OcTreeNames::RF, oomph::OcTreeRoot::right_equivalent(), oomph::Tree::Root_pt, rotate(), oomph::OcTreeNames::RU, S_base_edge, S_step_edge, oomph::OcTreeNames::U, oomph::OcTreeNames::UB, oomph::OcTreeNames::UF, and oomph::OcTreeRoot::up_equivalent().
Referenced by doc_true_edge_neighbours(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_neighbour(), oomph::RefineableQElement< 3 >::node_created_by_neighbour(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::node_created_by_son_of_neighbour(), and oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::oc_hang_helper().
|
staticprivate |
|
staticprivate |
|
static |
Return the vertex [LDB,RDB,...] of local (vertex) node n in an element with nnode1d nodes in each coordinate direction.
Return the vertex of local (vertex) node n in an element with nnode1d nodes in each coordinate direction.
Definition at line 491 of file octree.cc.
References oomph::OcTreeNames::LDB, oomph::OcTreeNames::LDF, oomph::OcTreeNames::LUB, oomph::OcTreeNames::LUF, oomph::OcTreeNames::RDB, oomph::OcTreeNames::RDF, oomph::OcTreeNames::RUB, and oomph::OcTreeNames::RUF.
Referenced by oomph::OcTreeForest::construct_up_right_equivalents().
|
delete |
Broken assignment operator.
|
static |
If U[p] becomes new_up and R[ight] becomes new_right then the direction dir
becomes rotate(new_up, new_right, dir)
A rotation is defined by the newUp and newRight directions; so if Up becomes newUp and Right becomes newRight then dir becomes rotate(newUp,newRight,dir);.
Definition at line 709 of file octree.cc.
References oomph::OcTreeNames::B, oomph::OcTreeNames::D, Direct_string, Direction_to_vector, oomph::OcTreeNames::F, oomph::BinaryTreeNames::L, oomph::BinaryTreeNames::R, rotate(), oomph::OcTreeNames::U, and Vector_to_direction.
|
static |
If U[p] becomes new_up and R[ight] becomes new_right then the direction vector dir
becomes rotate(new_up, new_right, dir)
This function rotates a vector according to a rotation of the axes that changes up to new_up and right to new_right.
Definition at line 750 of file octree.cc.
References oomph::OcTreeNames::B, construct_rotation_matrix(), oomph::OcTreeNames::D, Direct_string, oomph::OcTreeNames::F, i, oomph::BinaryTreeNames::L, mult_mat_mat(), mult_mat_vect(), oomph::BinaryTreeNames::R, and oomph::OcTreeNames::U.
Referenced by gteq_edge_neighbour(), gteq_face_neighbour(), gteq_true_edge_neighbour(), rotate(), and setup_static_data().
unsigned oomph::OcTree::self_test | ( | ) |
Self-test: Check all neighbours. Return success (0) if the max. distance between corresponding points in the neighbours is less than the tolerance specified in the static value Tree::Max_neighbour_finding_tolerance.
Self-test: Check neighbour finding routine. For each element in the tree and for each vertex, determine the distance between the vertex and its position in the neigbour. . If the difference is less than Tree::Max_neighbour_finding_tolerance. return success (0), otherwise failure (1)
Definition at line 4200 of file octree.cc.
References doc_face_neighbours(), doc_true_edge_neighbours(), i, oomph::Tree::Max_neighbour_finding_tolerance, oomph::oomph_info, and oomph::Tree::stick_all_tree_nodes_into_vector().
|
static |
Setup the static data, rotation and reflection schemes, etc.
Setup static data for OcTree.
Definition at line 1040 of file octree.cc.
References oomph::OcTreeNames::B, Colour, Common_face, Cosi, oomph::OcTreeNames::D, oomph::OcTreeNames::DB, oomph::OcTreeNames::DF, Direct_string, Direction_to_vector, oomph::OcTreeNames::F, i, Is_adjacent, oomph::BinaryTreeNames::L, oomph::OcTreeNames::LB, oomph::OcTreeNames::LD, oomph::OcTreeNames::LDB, oomph::OcTreeNames::LDF, oomph::OcTreeNames::LF, oomph::OcTreeNames::LU, oomph::OcTreeNames::LUB, oomph::OcTreeNames::LUF, num_elem(), oomph::Tree::OMEGA, oomph::oomph_info, oomph::BinaryTreeNames::R, oomph::OcTreeNames::RB, oomph::OcTreeNames::RD, oomph::OcTreeNames::RDB, oomph::OcTreeNames::RDF, Reflect, Reflect_edge, Reflect_face, Reflect_vertex, oomph::DenseMatrix< T >::resize(), oomph::OcTreeNames::RF, rotate(), oomph::OcTreeNames::RU, oomph::OcTreeNames::RUB, oomph::OcTreeNames::RUF, S_base, S_base_edge, S_direct_edge, S_directhi, S_directlo, S_step_edge, S_stephi, S_steplo, Sini, Static_data_has_been_setup, oomph::OcTreeNames::U, oomph::OcTreeNames::UB, oomph::OcTreeNames::UF, Up_and_right_equivalent_for_pairs_of_vertices, Vector_to_direction, and Vertex_at_end_of_edge.
Referenced by oomph::RefineableBrickMesh< ELEMENT >::RefineableBrickMesh(), and oomph::RefineableEighthSphereMesh< ELEMENT >::RefineableEighthSphereMesh().
|
staticprivate |
Returns the vector of the coordinate directions of vertex node number n in an element with nnode1d element per dimension.
This function is used to translate the position of a vertex node (given by his local number n into a vector giving the position of this node in the local coordinates system. It also needs the value of nnode1d to work.
Definition at line 232 of file octree.cc.
Referenced by get_the_other_face().
|
static |
Return the local node number of given vertex [LDB,RDB,...] in an element with nnode1d nodes in each coordinate direction.
Return the local node number of given vertex in an element with nnode1d nodes in each coordinate direction.
Definition at line 414 of file octree.cc.
References Direct_string, oomph::OcTreeNames::LDB, oomph::OcTreeNames::LDF, oomph::OcTreeNames::LUB, oomph::OcTreeNames::LUF, oomph::OcTreeNames::RDB, oomph::OcTreeNames::RDF, oomph::OcTreeNames::RUB, and oomph::OcTreeNames::RUF.
Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), and oomph::HelmholtzMGPreconditioner< DIM >::maximum_edge_width().
|
staticprivate |
Colours for neighbours in various directions.
Definition at line 540 of file octree.h.
Referenced by doc_face_neighbours(), doc_true_edge_neighbours(), and setup_static_data().
|
staticprivate |
Determine common face of edges or octants. Slightly bizarre lookup scheme from Samet's book.
Definition at line 537 of file octree.h.
Referenced by gteq_edge_neighbour(), and setup_static_data().
|
staticprivate |
Entry in rotation matrix: cos(i*90)
Definition at line 520 of file octree.h.
Referenced by construct_rotation_matrix(), and setup_static_data().
|
static |
Translate (enumerated) directions into strings.
Definition at line 329 of file octree.h.
Referenced by oomph::OcTreeRoot::add_edge_neighbour_pt(), doc_face_neighbours(), doc_true_edge_neighbours(), edge_neighbour_is_face_neighbour(), oomph::OcTreeRoot::edge_neighbour_pt(), faces_of_common_edge(), gteq_edge_neighbour(), gteq_face_neighbour(), gteq_true_edge_neighbour(), oomph::RefineableQElement< 3 >::interpolated_zeta_on_face(), oomph::EighthSphereDomain::macro_element_boundary(), oomph::ExtrudedDomain::macro_element_boundary(), oomph::OcTreeRoot::nedge_neighbour(), oomph::OcTreeForest::oc_face_neigh_pt(), rotate(), setup_static_data(), and vertex_to_node_number().
For each direction, i.e. a son_type (vertex), a face or an edge, this defines a vector that indicates this direction. E.g : Direction_to_vector[RDB]=(1,-1,-1), Direction_to_vector[U]=(0,1,0)
Vector storing the information to translate a direction into a vector of directions (in the three coordinate directions)
Definition at line 353 of file octree.h.
Referenced by oomph::PRefineableGeneralisedNewtonianQCrouzeixRaviartElement< DIM >::further_build(), oomph::RefineableGeneralisedNewtonianQCrouzeixRaviartElement< DIM >::further_build(), oomph::PRefineableQCrouzeixRaviartElement< DIM >::further_build(), oomph::RefineableQCrouzeixRaviartElement< DIM >::further_build(), oomph::RefineableQPVDElementWithPressure< DIM >::further_build(), oomph::RefineableQElement< 3 >::get_bcs(), oomph::RefineableQElement< 3 >::get_boundaries(), oomph::RefineableSolidQElement< 3 >::get_solid_bcs(), get_the_other_face(), gteq_face_neighbour(), gteq_true_edge_neighbour(), rotate(), oomph::RefineableQElement< 3 >::setup_father_bounds(), and setup_static_data().
|
staticprivate |
Array of direction/octant adjacency scheme: Is_adjacent(direction,octant): Is face/edge direction
adjacent to octant octant
? (Table in Samet's book)
Array of direction/octant adjacency scheme: Is_adjacent(direction,octant): Is face/edge direction
adjacent to octant octant
? Table in Samet's book.
Definition at line 529 of file octree.h.
Referenced by gteq_edge_neighbour(), gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
Reflection scheme: Reflect(direction,octant): Get mirror of octant/edge in specified direction. E.g. Reflect(LDF,L)=RDF.
Definition at line 533 of file octree.h.
Referenced by gteq_edge_neighbour(), gteq_face_neighbour(), and setup_static_data().
|
static |
Get opposite edge, e.g. Reflect_edge[DB]=UF.
Definition at line 335 of file octree.h.
Referenced by gteq_true_edge_neighbour(), and setup_static_data().
|
static |
Get opposite face, e.g. Reflect_face[L]=R.
Definition at line 332 of file octree.h.
Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), gteq_face_neighbour(), and setup_static_data().
|
static |
Get opposite vertex, e.g. Reflect_vertex[LDB]=RUF.
Definition at line 338 of file octree.h.
Referenced by setup_static_data().
|
staticprivate |
s_base(i,direction): Initial value for coordinate s[i] on the face indicated by direction (L/R/U/D/F/B)
Definition at line 544 of file octree.h.
Referenced by doc_face_neighbours(), gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
S_base_edge(i,edge): Initial value for coordinate s[i] on the specified edge (LF/RF/...).
Definition at line 585 of file octree.h.
Referenced by doc_true_edge_neighbours(), gteq_true_edge_neighbour(), and setup_static_data().
|
staticprivate |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant
has an offset. If we project the son_octant's left/down/back vertex onto the father's edge edge
, it is located at the in-face coordinate s_lo
= h/2 S_direct_edge(edge,son_octant)
.
Definition at line 600 of file octree.h.
Referenced by gteq_edge_neighbour(), and setup_static_data().
|
staticprivate |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant
has an offset. If we project the son_octant's left/down/back vertex onto the father's face face
, it is located at the in-face coordinate s_hi
= h/2 S_directlhi(face,son_octant)
. [See discussion of s_steplo
for an explanation of the subscripts _hi
and _lo
.].
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant
has an offset. If we project the son_octant's left/down/back vertex onto the father's face face
, it is located at the in-face coordinate s_hi
= h/2 S_directlhi(face,son_octant)
. [See discussion of S_steplo
for an explanation of the subscripts _hi
and _lo
.].
Definition at line 581 of file octree.h.
Referenced by gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant
has an offset. If we project the son_octant's left/down/back vertex onto the father's face face
, it is located at the in-face coordinate s_lo
= h/2 S_directlo(face,son_octant)
. [See discussion of s_steplo
for an explanation of the subscripts _hi
and _lo
.].
Relative to the left/down/back vertex in any (father) octree, the corresponding vertex in the son specified by son_octant
has an offset. If we project the son_octant's left/down/back vertex onto the father's face face
, it is located at the in-face coordinate s_lo
= h/2 S_directlo(face,son_octant)
. [See discussion of S_steplo
for an explanation of the subscripts _hi
and _lo
.].
Definition at line 573 of file octree.h.
Referenced by gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
Each edge of the RefineableQElement<3> that is represented by the octree is parametrised by one (of the three) local coordinates that parametrise the entire 3D element. If we're located on edge edge
[DB,UB,...], then an increase in s from -1 to +1 corresponds to a change of s_step_edge(i,edge)
in the 3D coordinates s
[i].
Definition at line 593 of file octree.h.
Referenced by doc_true_edge_neighbours(), gteq_true_edge_neighbour(), and setup_static_data().
|
staticprivate |
If we're located on face face
[L/R/F/B/U/D], then an increase in s_hi from -1 to +1 corresponds to a change of s_stephi(i,face)
in the 3D coordinate \ s[i]. [Read the discussion of s_steplo
for an explanation of the subscripts _hi
and _lo
.].
If we're located on face face
[L/R/F/B/U/D], then an increase in s_hi from -1 to +1 corresponds to a change of S_stephi(i,face)
in the 3D coordinate \ s[i]. [Read the discussion of S_steplo
for an explanation of the subscripts _hi
and _lo
.].
Definition at line 565 of file octree.h.
Referenced by doc_face_neighbours(), gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
Each face of the RefineableQElement<3> that is represented by the octree is parametrised by two (of the three) local coordinates that parametrise the entire 3D element. E.g. the B[ack] face is parametrised by (s[0], s[1]); the D[own] face is parametrised by (s[0],s[2]); etc. We always identify the in-face coordinate with the lower (3D) index with the subscript _lo
and the one with the larger (3D) index with the subscript _hi
. Here we set up the translation scheme between the 2D in-face coordinates (s_lo,s_hi) and the corresponding 3D coordinates: If we're located on face face
[L/R/F/B/U/D], then an increase in s_lo from -1 to +1 corresponds to a change of s_steplo(i,face)
in the 3D coordinate s
[i].
Each face of the RefineableQElement<3> that is represented by the octree is parametrised by two (of the three) local coordinates that parametrise the entire 3D element. E.g. the B[ack] face is parametrised by (s[0], s[1]); the D[own] face is parametrised by (s[0],s[2]); etc. We always identify the in-face coordinate with the lower (3D) index with the subscript _lo
and the one with the larger (3D) index with the subscript _hi
. Here we set up the translation scheme between the 2D in-face coordinates (s_lo,s_hi) and the corresponding 3D coordinates: If we're located on face face
[L/R/F/B/U/D], then an increase in s_lo from -1 to +1 corresponds to a change of S_steplo(i,face)
in the 3D coordinate s
[i]. S_steplo(i,direction)
Definition at line 558 of file octree.h.
Referenced by doc_face_neighbours(), gteq_face_neighbour(), and setup_static_data().
|
staticprivate |
Entry in rotation matrix sin(i*90)
Entry in rotation matrix: sin(i*90)
Definition at line 523 of file octree.h.
Referenced by construct_rotation_matrix(), and setup_static_data().
|
staticprotected |
Bool indicating that static member data has been setup.
Definition at line 412 of file octree.h.
Referenced by oomph::OcTreeRoot::OcTreeRoot(), and setup_static_data().
|
static |
Storage for the up/right-equivalents corresponding to two pairs of vertices along an element edge:
These two pairs completely define the relative rotation between the reference element and its edge neighbour. The map returns a pair which contains the up_equivalent and the right_equivalent of the edge neighbour, i.e. it tells us which direction in the edge neighbour coincides with the up (or right) direction in the reference element.
Definition at line 377 of file octree.h.
Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), and setup_static_data().
|
static |
Each vector representing a direction can be translated into a direction, either a son type (vertex), a face or an edge. E.g. : Vector_to_direction[(1,-1,1)]=RDF, Vector_to_direction[(0,1,0)]=U.
Map storing the information to translate a vector of directions (in the three coordinate directions) into a direction.
Definition at line 348 of file octree.h.
Referenced by oomph::RefineableQElement< 3 >::get_bcs(), oomph::RefineableSolidQElement< 3 >::get_solid_bcs(), get_the_other_face(), rotate(), oomph::RefineableQElement< 3 >::setup_father_bounds(), and setup_static_data().
Vector
of vectors containing the two vertices for each edge, e.g. Vertex_at_end_of_edge
[LU][0]=LUB and Vertex_at_end_of_edge
[LU][1]=LUF.
Map of vectors containing the two vertices for each edge.
Definition at line 343 of file octree.h.
Referenced by oomph::OcTreeForest::construct_up_right_equivalents(), and setup_static_data().