30 #define KRATOS_WATCH_3(name) std::cout << #name << " : " << name[0] << ", " << name[1] << ", " << name[2] << std::endl;
59 template <
class TCellType>
81 static constexpr std::size_t
DIMENSION = cell_type::DIMENSION;
82 static constexpr std::size_t
MAX_LEVEL = cell_type::MAX_LEVEL;
83 static constexpr std::size_t
ROOT_LEVEL = cell_type::ROOT_LEVEL;
84 static constexpr std::size_t
MIN_LEVEL = cell_type::MIN_LEVEL;
95 mScaleFactor[
i] = 1.00;
102 mScaleFactor[
i] = NewScaleFactor[
i];
103 mOffset[
i] = NewOffset[
i];
125 mScaleFactor[
i] = 1/(High[
i] - Low[
i]);
126 mOffset[
i] = -Low[
i];
131 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
133 return (1 << cell->GetLevel()) * scale;
137 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
144 Coordinates[
i] += mOffset[
i];
145 Coordinates[
i] *= mScaleFactor[
i];
151 for(
int i = 0 ;
i < 3 ;
i++)
153 NormalizedCoordinates[
i] = Coordinates[
i] + mOffset[
i];
154 NormalizedCoordinates[
i] *= mScaleFactor[
i];
159 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
160 NormalizedCoordinate =
static_cast<double>(key * scale);
164 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
166 NormalizedCoordinates[
i] =
static_cast<double>(
keys[
i] * scale);
170 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
172 ResultCoordinates[
i] = (
static_cast<double>(
keys[
i] * scale) / mScaleFactor[
i]) - mOffset[
i];
178 ThisCoordinates[
i] /= mScaleFactor[
i];
179 ThisCoordinates[
i] -= mOffset[
i];
187 ResultCoordinates[
i] = ThisCoordinates[
i] / mScaleFactor[
i];
188 ResultCoordinates[
i] -= mOffset[
i];
200 assert(coordinate>=0.); assert(coordinate<=1.);
212 if (cell->IsLeaf()) {
215 cell = cell->pGetChild(x_key, y_key, z_key);
230 if (cell->IsLeaf()) {
233 cell = cell->pGetChild(x_key, y_key, z_key);
244 std::vector<cell_type*> leaves;
245 std::vector<cell_type*> next_leaves;
251 for (std::size_t i_cell = 0; i_cell < leaves.size(); i_cell++) {
252 cell_type* current_leaf = leaves[i_cell];
253 if (current_leaf->GetLevel() == i_level) {
256 for (
int i_direction = 0; i_direction < 18; i_direction++) {
257 if (current_leaf->GetNeighbourKey(i_direction, neighbour_key)) {
259 if (neighbour_cell->GetLevel() > i_level + 1) {
260 cell_type* temp_neighbour_cell = neighbour_cell;
261 for (
char j_level = neighbour_cell->GetLevel(); j_level > i_level + 1; j_level--) {
263 temp_neighbour_cell->TransferObjectsToSonsNormalized();
264 std::size_t child_index = temp_neighbour_cell->GetChildIndex(neighbour_key[0], neighbour_key[1], neighbour_key[2]);
266 if (
j != child_index) {
267 next_leaves.push_back(temp_neighbour_cell->GetChildren() +
j);
270 temp_neighbour_cell = temp_neighbour_cell->GetChildren() + child_index;
271 if (j_level == neighbour_cell->GetLevel() - 1)
272 next_leaves.push_back(temp_neighbour_cell);
277 }
else if (current_leaf->IsLeaf()) {
278 next_leaves.push_back(current_leaf);
281 leaves.swap(next_leaves);
287 std::vector<cell_type*> leaves;
288 std::vector<cell_type*> next_leaves;
293 for (
int i_direction = 0; i_direction < 18; i_direction++) {
294 for (std::size_t i_cell = 0; i_cell < leaves.size(); i_cell++) {
295 cell_type* current_leaf = leaves[i_cell];
296 if (current_leaf->GetLevel() == i_level) {
298 if (current_leaf->GetNeighbourKey(i_direction, neighbour_key)) {
300 if (neighbour_cell->GetLevel() > i_level + 1) {
301 cell_type* temp_neighbour_cell = neighbour_cell;
302 for (
char j_level = neighbour_cell->GetLevel(); j_level > i_level + 1; j_level--) {
305 std::size_t child_index = temp_neighbour_cell->GetChildIndex(neighbour_key[0], neighbour_key[1], neighbour_key[2]);
307 if (
j != child_index) {
308 next_leaves.push_back(temp_neighbour_cell->GetChildren() +
j);
311 temp_neighbour_cell = temp_neighbour_cell->GetChildren() + child_index;
312 if (j_level == neighbour_cell->GetLevel() - 1)
313 next_leaves.push_back(temp_neighbour_cell);
317 }
else if (i_direction == 0) {
318 if (current_leaf->IsLeaf()) {
319 next_leaves.push_back(current_leaf);
324 leaves.swap(next_leaves);
332 std::vector<cell_type*>& leaves)
const
342 key_type delta_x = min_x_key^max_x_key;
343 key_type delta_y = min_y_key^max_y_key;
344 key_type delta_z = min_z_key^max_z_key;
351 const std::size_t one = 1;
352 while (!(delta_x & (one << min_level_1)) && (min_level_1 >
MIN_LEVEL)) min_level_1--;
353 while (!(delta_y & (one << min_level_2)) && (min_level_2 > min_level_1)) min_level_2--;
354 while (!(delta_z & (one << min_level)) && (min_level > min_level_2)) min_level--;
360 if (range_cell->IsLeaf()) {
363 range_cell = range_cell->pGetChild(min_x_key, min_y_key, min_z_key);
367 std::vector<cell_type*> cells_stack;
368 cells_stack.push_back(range_cell);
369 while (!cells_stack.empty()) {
371 cells_stack.pop_back();
372 if (cell->HasChildren()) {
379 child->GetMinPoint(low);
380 child->GetMaxPoint(high);
381 if (
Collides(coord1, coord2, low, high))
382 cells_stack.push_back(cell->pGetChild(
i));
385 leaves.push_back(cell);
393 bool Collides(
const double* Low1,
const double* High1,
const double* Low2,
const double* High2)
395 return (Low1[0] <= High2[0]) &&
396 (Low1[1] <= High2[1]) &&
397 (Low1[2] <= High2[2]) &&
398 (Low2[0] <= High1[0]) &&
399 (Low2[1] <= High1[1]) &&
400 (Low2[2] <= High1[2]);
405 std::vector<cell_type*> cells_stack;
406 cells_stack.push_back(root_);
407 while (!cells_stack.empty()) {
409 cells_stack.pop_back();
410 if (cell->HasChildren()) {
412 cells_stack.push_back(cell->pGetChild(
i));
414 all_leaves.push_back(cell);
433 if (cell->IsLeaf()) {
445 if (cell->IsLeaf()) {
455 if (p_cell->GetLeftKey(
keys)) {
463 if (p_cell->GetLeftKey(
keys)) {
471 if (p_cell->GetRightKey(
keys)) {
479 if (p_cell->GetRightKey(
keys)) {
487 if (p_cell->GetBackKey(
keys)) {
495 if (p_cell->GetBackKey(
keys)) {
503 if (p_cell->GetFrontKey(
keys)) {
511 if (p_cell->GetFrontKey(
keys)) {
519 if (p_cell->GetTopKey(
keys)) {
527 if (p_cell->GetTopKey(
keys)) {
535 if (p_cell->GetBottomKey(
keys)) {
543 if (p_cell->GetBottomKey(
keys)) {
552 if (p_cell->GetNeighbourKey(direction,
keys)) {
561 if (p_cell->GetNeighbourKey(position, direction,
keys)) {
571 return p_cell->SubdivideCell();
584 std::size_t scaled_size = std::size_t(desired_size * (1 <<
ROOT_LEVEL));
589 for (std::size_t
i =
ROOT_LEVEL; (std::size_t(1) <<
i) > scaled_size;
i--) {
590 if (cell->IsLeaf()) {
593 cell = cell->pGetChild(x_key, y_key, z_key);
601 double cell_size = uniform_size;
602 if(cell_size < min_size)
603 cell_size = min_size;
605 std::vector<cell_type*> cells_stack;
606 cells_stack.push_back(root_);
608 while (!cells_stack.empty()) {
610 cells_stack.pop_back();
612 if (cell->IsLeaf()) {
616 cells_stack.push_back(cell->pGetChild(
i));
628 double min_coord[3]={0.00, 0.00, 0.00};
629 double max_coord[3]={0.00, 0.00, 0.00};
636 configuration_type::GetBoundingBox(
object, min_coord, max_coord);
647 key_type delta_x = min_x_key^max_x_key;
648 key_type delta_y = min_y_key^max_y_key;
649 key_type delta_z = min_z_key^max_z_key;
656 const std::size_t one = 1;
657 while (!(delta_x & (one << min_level_1)) && (min_level_1 >
MIN_LEVEL)) min_level_1--;
658 while (!(delta_y & (one << min_level_2)) && (min_level_2 > min_level_1)) min_level_2--;
659 while (!(delta_z & (one << min_level)) && (min_level > min_level_2)) min_level--;
665 if (range_cell->IsLeaf()) {
669 range_cell = range_cell->pGetChild(min_x_key, min_y_key, min_z_key);
673 std::vector<cell_type*> cells_stack;
674 cells_stack.push_back(range_cell);
675 while (!cells_stack.empty()) {
677 cells_stack.pop_back();
678 if (cell->HasChildren()) {
684 child->GetMinPointNormalized(low);
685 child->GetMaxPointNormalized(high);
686 if (
Collides(min_coord, max_coord, low, high))
687 cells_stack.push_back(child);
691 double cell_min_point[3];
692 double cell_max_point[3];
694 cell->GetMinPointNormalized(cell_min_point);
695 cell->GetMaxPointNormalized(cell_max_point);
701 const int is_intersected =
IsIntersected(
object,tolerance, cell_min_point, cell_max_point);
703 cell->Insert(
object);
709 void Insert(
typename cell_type::pointer_type
object){
713 double min_coord[3]={0.00, 0.00, 0.00};
714 double max_coord[3]={0.00, 0.00, 0.00};
719 configuration_type::GetBoundingBox(
object, min_coord, max_coord);
732 key_type delta_x = min_x_key^max_x_key;
733 key_type delta_y = min_y_key^max_y_key;
734 key_type delta_z = min_z_key^max_z_key;
741 const std::size_t one = 1;
742 while (!(delta_x & (one << min_level_1)) && (min_level_1 >
MIN_LEVEL)) min_level_1--;
743 while (!(delta_y & (one << min_level_2)) && (min_level_2 > min_level_1)) min_level_2--;
744 while (!(delta_z & (one << min_level)) && (min_level > min_level_2)) min_level--;
750 if (range_cell->IsLeaf()) {
754 range_cell = range_cell->pGetChild(min_x_key, min_y_key, min_z_key);
759 std::vector<cell_type*> cells_stack;
760 cells_stack.push_back(range_cell);
761 while (!cells_stack.empty()) {
763 cells_stack.pop_back();
764 if (cell->HasChildren()) {
770 child->GetMinPointNormalized(low);
771 child->GetMaxPointNormalized(high);
772 if (
Collides(min_coord, max_coord, low, high))
773 cells_stack.push_back(child);
777 double cell_min_point[3];
778 double cell_max_point[3];
780 cell->GetMinPointNormalized(cell_min_point);
781 cell->GetMaxPointNormalized(cell_max_point);
787 const int is_intersected =
IsIntersected(
object,tolerance, cell_min_point, cell_max_point);
789 cell->Insert(
object);
809 typename cell_type::pointer_type pObject,
810 std::vector<cell_type*>& rLeaves,
811 const double ToleranceCoefficient = 0.001
816 double min_coord[3]={0.00, 0.00, 0.00};
817 double max_coord[3]={0.00, 0.00, 0.00};
821 configuration_type::GetBoundingBox(pObject, min_coord, max_coord);
833 key_type delta_x = min_x_key^max_x_key;
834 key_type delta_y = min_y_key^max_y_key;
835 key_type delta_z = min_z_key^max_z_key;
842 const std::size_t one = 1;
843 while (!(delta_x & (one << min_level_1)) && (min_level_1 >
MIN_LEVEL)) min_level_1--;
844 while (!(delta_y & (one << min_level_2)) && (min_level_2 > min_level_1)) min_level_2--;
845 while (!(delta_z & (one << min_level)) && (min_level > min_level_2)) min_level--;
851 if (range_cell->IsLeaf()) {
855 range_cell = range_cell->pGetChild(min_x_key, min_y_key, min_z_key);
859 std::vector<cell_type*> cells_stack;
860 cells_stack.push_back(range_cell);
861 while (!cells_stack.empty()) {
863 cells_stack.pop_back();
864 if (cell->HasChildren()) {
870 child->GetMinPointNormalized(low);
871 child->GetMaxPointNormalized(high);
872 if (
Collides(min_coord, max_coord, low, high)) {
873 cells_stack.push_back(child);
878 double cell_min_point[3];
879 double cell_max_point[3];
881 cell->GetMinPointNormalized(cell_min_point);
882 cell->GetMaxPointNormalized(cell_max_point);
888 const bool is_intersected =
IsIntersected(pObject,tolerance, cell_min_point, cell_max_point);
891 rLeaves.push_back(cell);
898 inline bool IsIntersected(
typename cell_type::pointer_type rObject,
double Tolerance,
const double* rLowPoint,
const double* rHighPoint)
900 Point low_point(rLowPoint[0] - Tolerance, rLowPoint[1] - Tolerance, rLowPoint[2] - Tolerance);
901 Point high_point(rHighPoint[0] + Tolerance, rHighPoint[1] + Tolerance, rHighPoint[2] + Tolerance);
912 const Point& rLowPoint,
913 const Point& rHighPoint
946 std::vector<cell_type*> leaves;
950 std::cout <<
"writing " << leaves.size() <<
" leaves" << std::endl;
951 rOStream <<
"MESH \"leaves\" dimension 3 ElemType Hexahedra Nnode 8" << std::endl;
952 rOStream <<
"# color 96 96 96" << std::endl;
953 rOStream <<
"Coordinates" << std::endl;
954 rOStream <<
"# node number coordinate_x coordinate_y coordinate_z " << std::endl;
956 std::size_t node_index = 1;
957 for (std::size_t
i = 0;
i < leaves.size();
i++) {
960 cell->GetMinPoint(min_point);
962 double cell_size = cell->CalcSize();
964 for (std::size_t
j = 0;
j < 2;
j++)
965 for (std::size_t
k = 0;
k < 2;
k++)
966 for (std::size_t
h = 0;
h < 2;
h++) {
967 rOStream << node_index++ <<
" " << min_point[0] +
j * cell_size <<
" " << min_point[1] +
k * cell_size <<
" " << min_point[2] +
h * cell_size << std::endl;
971 rOStream <<
"end coordinates" << std::endl;
972 rOStream <<
"Elements" << std::endl;
973 rOStream <<
"# element node_1 node_2 node_3 material_number" << std::endl;
975 for (std::size_t
i = 0;
i < leaves.size();
i++) {
976 if ((leaves[
i]->pGetData()))
977 rOStream <<
i + 1 <<
" " << 8 *
i + 1 <<
" " << 8 *
i + 2 <<
" " << 8 *
i + 4 <<
" " << 8 *
i + 3 <<
" " << 8 *
i + 5 <<
" " << 8 *
i + 6 <<
" " << 8 *
i + 8 <<
" " << 8 *
i + 7 <<
" " << leaves[
i]->GetLevel() + 100 << std::endl;
979 rOStream <<
i + 1 <<
" " << 8 *
i + 1 <<
" " << 8 *
i + 2 <<
" " << 8 *
i + 4 <<
" " << 8 *
i + 3 <<
" " << 8 *
i + 5 <<
" " << 8 *
i + 6 <<
" " << 8 *
i + 8 <<
" " << 8 *
i + 7 <<
" " <<
int(leaves[
i]->GetLevel()) << std::endl;
982 rOStream <<
"end elements" << std::endl;
987 const double scale = 1.00 / (1 <<
ROOT_LEVEL);
989 return static_cast<double>(key * scale);
993 std::vector<cell_type*> leaves;
997 std::cout <<
"writing " << leaves.size() <<
" leaves" << std::endl;
998 rOStream <<
"MESH \"leaves\" dimension 3 ElemType Hexahedra Nnode 8" << std::endl;
999 rOStream <<
"# color 96 96 96" << std::endl;
1000 rOStream <<
"Coordinates" << std::endl;
1001 rOStream <<
"# node number coordinate_x coordinate_y coordinate_z " << std::endl;
1002 std::size_t node_number = 0;
1004 for (std::size_t
i = 0;
i < leaves.size();
i++) {
1006 for (std::size_t i_point = 0; i_point < 8; i_point++) {
1007 std::size_t
node_id = (*(leaf->pGetData()))[i_point]->Id();
1010 leaf->GetKey(i_point, point_key);
1011 double point_coordinate[3];
1014 point_coordinate[
j] = leaf->GetCoordinate(point_key[
j]);
1016 rOStream <<
node_id <<
" " << point_coordinate[0] <<
" " << point_coordinate[1] <<
" " << point_coordinate[2] << std::endl;
1022 rOStream <<
"end coordinates" << std::endl;
1023 rOStream <<
"Elements" << std::endl;
1024 rOStream <<
"# element node_1 node_2 node_3 material_number" << std::endl;
1026 for (std::size_t
i = 0;
i < leaves.size();
i++) {
1028 rOStream <<
i + 1 <<
" ";
1029 for (std::size_t i_point = 0; i_point < 8; i_point++)
1030 rOStream << (*(leaf->pGetData()))[i_point]->Id() <<
" ";
1032 rOStream << std::endl;
1034 rOStream <<
"end elements" << std::endl;
1053 rOStream <<
"Number of cells : " << number_of_cells_ << std::endl;
1054 rOStream <<
"Number of leaves : " << number_of_leaves_ << std::endl;
1077 std::size_t number_of_cells_;
1078 std::size_t number_of_leaves_;
1079 std::size_t levels_;
1143 template <
class TCellType>
1147 rOStream << std::endl;
Geometry base class.
Definition: geometry.h:71
virtual bool HasIntersection(const GeometryType &ThisGeometry) const
Definition: geometry.h:1453
This class defines the node.
Definition: node.h:65
Short class definition.
Definition: octree_binary.h:60
virtual void PrintInfo(std::ostream &rOStream) const
Print information about this object.
Definition: octree_binary.h:1046
OctreeBinary(const double *NewScaleFactor, const double *NewOffset)
Definition: octree_binary.h:100
cell_type * pGetRightCell(const cell_type *p_cell)
Definition: octree_binary.h:469
cell_type * pGetBottomCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:541
cell_type * pGetFrontCell(const cell_type *p_cell)
Definition: octree_binary.h:501
int SubdivideCell(cell_type *p_cell)
Definition: octree_binary.h:567
cell_type * pGetLeftCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:461
TCellType cell_type
Definition: octree_binary.h:68
void SetBoundingBox(const coordinate_type *Low, const coordinate_type *High)
Definition: octree_binary.h:122
cell_type * pGetBottomCell(const cell_type *p_cell)
Definition: octree_binary.h:533
cell_type::key_type key_type
Definition: octree_binary.h:70
void Constrain2To1()
Definition: octree_binary.h:243
int SubvidiveUntilSizeNormalized(double *coord, const double desired_size)
Definition: octree_binary.h:575
void GetLeavesInBoundingBoxNormalized(const double *coord1, const double *coord2, std::vector< cell_type * > &leaves) const
Definition: octree_binary.h:331
virtual bool HasIntersection(GeometryType &rGeometry, const Point &rLowPoint, const Point &rHighPoint)
Detect if triangle and box are intersected.
Definition: octree_binary.h:910
virtual std::string Info() const
Turn back information as a string.
Definition: octree_binary.h:1040
void ScaleBackToOriginalCoordinate(coordinate_type *ThisCoordinates) const
Definition: octree_binary.h:175
cell_type * pGetBackCell(const cell_type *p_cell)
Definition: octree_binary.h:485
void NormalizeCoordinates(coordinate_type *Coordinates) const
Definition: octree_binary.h:141
void NormalizeCoordinates(const coordinate_type *Coordinates, coordinate_type *NormalizedCoordinates) const
Definition: octree_binary.h:149
int GetAllLeavesVector(std::vector< cell_type * > &all_leaves) const
Definition: octree_binary.h:404
void CalculateCoordinatesNormalized(const key_type *keys, coordinate_type *NormalizedCoordinates) const
Definition: octree_binary.h:163
bool Collides(const double *Low1, const double *High1, const double *Low2, const double *High2)
Definition: octree_binary.h:393
virtual ~OctreeBinary()
Destructor.
Definition: octree_binary.h:109
void Constrain2To1New()
Definition: octree_binary.h:286
int RefineWithUniformSizeNormalized(const double uniform_size)
Definition: octree_binary.h:599
cell_type * pGetNeighbourCell(cell_type *p_cell, std::size_t position, std::size_t direction)
Definition: octree_binary.h:558
cell_type * pGetLeftCell(const cell_type *p_cell)
Definition: octree_binary.h:453
double coordinate_type
Definition: octree_binary.h:74
cell_type::configuration_type configuration_type
Definition: octree_binary.h:72
cell_type * pGetRightCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:477
static constexpr std::size_t CHILDREN_NUMBER
Definition: octree_binary.h:80
key_type CalcKeyNormalized(coordinate_type coordinate) const
Definition: octree_binary.h:199
static constexpr std::size_t MAX_LEVEL
Definition: octree_binary.h:82
void CalculateCoordinateNormalized(const key_type key, coordinate_type &NormalizedCoordinate) const
Definition: octree_binary.h:158
void Insert(typename cell_type::pointer_type object)
Definition: octree_binary.h:709
void CalculateCoordinates(key_type *keys, coordinate_type *ResultCoordinates) const
Definition: octree_binary.h:169
Node NodeType
Definition: octree_binary.h:76
KRATOS_CLASS_POINTER_DEFINITION(OctreeBinary)
Pointer definition of Octree.
Geometry< NodeType > GeometryType
Definition: octree_binary.h:78
void ScaleBackToOriginalCoordinate(const coordinate_type *ThisCoordinates, coordinate_type *ResultCoordinates) const
Definition: octree_binary.h:184
void GetIntersectedLeaves(typename cell_type::pointer_type pObject, std::vector< cell_type * > &rLeaves, const double ToleranceCoefficient=0.001)
This method fills the intersected leaves.
Definition: octree_binary.h:808
bool CheckConstrain2To1() const
Definition: octree_binary.h:238
OctreeBinary()
Default constructor.
Definition: octree_binary.h:92
void Insert(coordinate_type *point)
Definition: octree_binary.h:220
double CalcMinCellNormalizedSize() const
Definition: octree_binary.h:136
void InsertNormalized(typename cell_type::pointer_type object)
Definition: octree_binary.h:624
static constexpr std::size_t ROOT_LEVEL
Definition: octree_binary.h:83
cell_type * pGetFrontCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:509
bool IsIntersected(typename cell_type::pointer_type rObject, double Tolerance, const double *rLowPoint, const double *rHighPoint)
Definition: octree_binary.h:898
static constexpr std::size_t MIN_LEVEL
Definition: octree_binary.h:84
void PrintGiDMesh(std::ostream &rOStream) const
Definition: octree_binary.h:945
cell_type * pGetNeighbourCell(const cell_type *p_cell, std::size_t direction)
Definition: octree_binary.h:549
cell_type * pGetCellContainRegion(key_type min_x_key, key_type min_y_key, key_type min_z_key, key_type max_x_key, key_type max_y_key, key_type max_z_key)
Definition: octree_binary.h:919
static constexpr std::size_t DIMENSION
Definition: octree_binary.h:81
cell_type * pGetTopCell(const cell_type *p_cell)
Definition: octree_binary.h:517
double CalcSizeNormalized(const cell_type *cell) const
Definition: octree_binary.h:130
cell_type * pGetRoot()
Definition: octree_binary.h:931
cell_type * pGetBackCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:493
cell_type * pGetCell(key_type *keys, std::size_t level) const
Definition: octree_binary.h:441
virtual void PrintData(std::ostream &rOStream) const
Print object's data.
Definition: octree_binary.h:1052
cell_type * pGetCellNormalized(const coordinate_type *point) const
Definition: octree_binary.h:420
cell_type * pGetTopCell(cell_type *p_cell, std::size_t level)
Definition: octree_binary.h:525
void InsertNormalized(coordinate_type *point)
Definition: octree_binary.h:204
double GetCoordinateNormalized(key_type key) const
Definition: octree_binary.h:986
void PrintGiDMeshNew(std::ostream &rOStream) const
Definition: octree_binary.h:992
cell_type * pGetCell(key_type *keys) const
Definition: octree_binary.h:429
Point class.
Definition: point.h:59
#define KRATOS_WATCH(variable)
Definition: define.h:806
pybind11::list keys(Parameters const &self)
Definition: add_kratos_parameters_to_python.cpp:32
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
REACTION_CHECK_STIFFNESS_FACTOR int
Definition: contact_structural_mechanics_application_variables.h:75
TABLE_NUMBER_ANGULAR_VELOCITY TABLE_NUMBER_MOMENT I33 BEAM_INERTIA_ROT_UNIT_LENGHT_Y KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, BEAM_INERTIA_ROT_UNIT_LENGHT_Z) typedef std double
Definition: DEM_application_variables.h:182
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
h
Definition: generate_droplet_dynamics.py:91
int k
Definition: quadrature.py:595
int j
Definition: quadrature.py:648
int node_id
Definition: read_stl.py:12
integer i
Definition: TensorModule.f:17