NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::ContactEntity Class Reference

#include <nimble_contact_entity.h>

Classes

class  vertex
 

Public Types

enum  ContactEntityType { NONE = 0 , NODE = 1 , TRIANGLE = 3 }
 
typedef enum nimble::ContactEntity::ContactEntityType CONTACT_ENTITY_TYPE
 

Public Member Functions

NIMBLE_INLINE_FUNCTION ContactEntity ()=default
 
NIMBLE_INLINE_FUNCTION ContactEntity (CONTACT_ENTITY_TYPE entity_type, int contact_entity_global_id, double const coord[], double characteristic_length, int node_id_for_node_1, int node_id_for_node_2=0, const int node_ids_for_fictitious_node[4]=0)
 
NIMBLE_INLINE_FUNCTION ContactEntity (CONTACT_ENTITY_TYPE entity_type, int contact_entity_global_id, int contact_entity_local_id, double const coord[], double characteristic_length, int node_id_for_node_1, int node_id_for_node_2=0, const int node_ids_for_fictitious_node[4]=0)
 
NIMBLE_INLINE_FUNCTION ~ContactEntity ()=default
 
template<typename ArgT>
NIMBLE_INLINE_FUNCTION void SetCoordinates (ArgT coord)
 
template<typename ArgT>
NIMBLE_INLINE_FUNCTION void ScatterForceToContactManagerForceVector (ArgT &force) const
 
NIMBLE_INLINE_FUNCTION double get_x_min () const
 
NIMBLE_INLINE_FUNCTION double get_x_max () const
 
NIMBLE_INLINE_FUNCTION double get_y_min () const
 
NIMBLE_INLINE_FUNCTION double get_y_max () const
 
NIMBLE_INLINE_FUNCTION double get_z_min () const
 
NIMBLE_INLINE_FUNCTION double get_z_max () const
 
NIMBLE_INLINE_FUNCTION int contact_entity_global_id () const
 
NIMBLE_INLINE_FUNCTION int local_id () const noexcept
 
NIMBLE_INLINE_FUNCTION vertex centroid () const
 
void ExportGeometryInto (ContactEntity &xerox) const
 
NIMBLE_INLINE_FUNCTION bool contact_status () const noexcept
 
NIMBLE_INLINE_FUNCTION void set_contact_status (bool status) noexcept
 
NIMBLE_INLINE_FUNCTION void SetNodalContactForces (const double *const contact_force, const double *const N=nullptr)
 Distribute input force among node(s) of the entity.
 
NIMBLE_INLINE_FUNCTION void ComputeNodalContactForces (const double *const contact_force, const double *const closest_point_projection)
 
void ResetContactData ()
 

Public Attributes

CONTACT_ENTITY_TYPE entity_type_ = NONE
 
int num_nodes_ = 0
 
double coord_1_x_ = 0.0
 
double coord_1_y_ = 0.0
 
double coord_1_z_ = 0.0
 
double coord_2_x_ = 0.0
 
double coord_2_y_ = 0.0
 
double coord_2_z_ = 0.0
 
double coord_3_x_ = 0.0
 
double coord_3_y_ = 0.0
 
double coord_3_z_ = 0.0
 
double force_1_x_ = 0.0
 
double force_1_y_ = 0.0
 
double force_1_z_ = 0.0
 
double force_2_x_ = 0.0
 
double force_2_y_ = 0.0
 
double force_2_z_ = 0.0
 
double force_3_x_ = 0.0
 
double force_3_y_ = 0.0
 
double force_3_z_ = 0.0
 
double inflation_factor = 0.15
 Factor multiplying characteristic length to inflate bounding box.
 
double char_len_ = 0.0
 
double bounding_box_x_min_ = -DBL_MAX
 
double bounding_box_x_max_ = DBL_MAX
 
double bounding_box_y_min_ = -DBL_MAX
 
double bounding_box_y_max_ = DBL_MAX
 
double bounding_box_z_min_ = -DBL_MAX
 
double bounding_box_z_max_ = DBL_MAX
 
vertex centroid_
 
int node_id_for_node_1_ = -1
 
int node_id_for_node_2_ = -1
 
int node_id_1_for_fictitious_node_ = -1
 
int node_id_2_for_fictitious_node_ = -1
 
int node_id_3_for_fictitious_node_ = -1
 
int node_id_4_for_fictitious_node_ = -1
 
int contact_entity_global_id_ = -1
 
int local_id_ = -1
 
bool contact_status_ = false
 

Protected Member Functions

void SetBoundingBox ()
 Create a bounding box centered around the entity.
 

Friends

template<typename ArgT>
void SerializeContactFaces (int num_entities, ArgT contact_entities, std::vector< char > &buffer)
 
template<typename ArgT>
void UnserializeContactFaces (int num_entities, ArgT contact_entities, std::vector< char > &buffer)
 

Member Typedef Documentation

◆ CONTACT_ENTITY_TYPE

Member Enumeration Documentation

◆ ContactEntityType

Enumerator
NONE 
NODE 
TRIANGLE 
119 {
120 NONE = 0,
121 NODE = 1,
122 TRIANGLE = 3
enum nimble::ContactEntity::ContactEntityType CONTACT_ENTITY_TYPE
@ TRIANGLE
Definition nimble_contact_entity.h:122
@ NONE
Definition nimble_contact_entity.h:120
@ NODE
Definition nimble_contact_entity.h:121

Constructor & Destructor Documentation

◆ ContactEntity() [1/3]

NIMBLE_INLINE_FUNCTION nimble::ContactEntity::ContactEntity ( )
default

◆ ContactEntity() [2/3]

NIMBLE_INLINE_FUNCTION nimble::ContactEntity::ContactEntity ( CONTACT_ENTITY_TYPE entity_type,
int contact_entity_global_id,
double const coord[],
double characteristic_length,
int node_id_for_node_1,
int node_id_for_node_2 = 0,
const int node_ids_for_fictitious_node[4] = 0 )
inline
175 entity_type,
177 -1,
178 coord,
179 characteristic_length,
180 node_id_for_node_1,
181 node_id_for_node_2,
182 node_ids_for_fictitious_node)
183 {
184 }
NIMBLE_INLINE_FUNCTION int contact_entity_global_id() const
Definition nimble_contact_entity.h:344
NIMBLE_INLINE_FUNCTION ContactEntity()=default

◆ ContactEntity() [3/3]

NIMBLE_INLINE_FUNCTION nimble::ContactEntity::ContactEntity ( CONTACT_ENTITY_TYPE entity_type,
int contact_entity_global_id,
int contact_entity_local_id,
double const coord[],
double characteristic_length,
int node_id_for_node_1,
int node_id_for_node_2 = 0,
const int node_ids_for_fictitious_node[4] = 0 )
inline
196 : entity_type_(entity_type),
197 char_len_(characteristic_length),
199 local_id_(contact_entity_local_id)
200 {
201 // contact entities must be either nodes (one node) or trianglular faces
202 // (three nodes)
203 if (entity_type_ == NODE) {
204 num_nodes_ = 1;
205 node_id_for_node_1_ = node_id_for_node_1;
206 } else if (entity_type_ == TRIANGLE) {
207 num_nodes_ = 3;
208 node_id_for_node_1_ = node_id_for_node_1;
209 node_id_for_node_2_ = node_id_for_node_2;
210 node_id_1_for_fictitious_node_ = node_ids_for_fictitious_node[0];
211 node_id_2_for_fictitious_node_ = node_ids_for_fictitious_node[1];
212 node_id_3_for_fictitious_node_ = node_ids_for_fictitious_node[2];
213 node_id_4_for_fictitious_node_ = node_ids_for_fictitious_node[3];
214 } else {
215 printf("\n**** Error in ContactEntity constructor, invalid entity type.\n");
216 }
217
218 coord_1_x_ = coord[0];
219 coord_1_y_ = coord[1];
220 coord_1_z_ = coord[2];
221 if (entity_type_ == TRIANGLE) {
222 coord_2_x_ = coord[3];
223 coord_2_y_ = coord[4];
224 coord_2_z_ = coord[5];
225 coord_3_x_ = coord[6];
226 coord_3_y_ = coord[7];
227 coord_3_z_ = coord[8];
228 }
230 }
double coord_1_y_
Definition nimble_contact_entity.h:534
double coord_2_z_
Definition nimble_contact_entity.h:538
int node_id_4_for_fictitious_node_
Definition nimble_contact_entity.h:578
int node_id_for_node_1_
Definition nimble_contact_entity.h:572
int node_id_for_node_2_
Definition nimble_contact_entity.h:573
void SetBoundingBox()
Create a bounding box centered around the entity.
Definition nimble_contact_entity.cc:76
int contact_entity_global_id_
Definition nimble_contact_entity.h:591
double coord_3_x_
Definition nimble_contact_entity.h:539
double coord_1_x_
Definition nimble_contact_entity.h:533
double coord_3_z_
Definition nimble_contact_entity.h:541
double char_len_
Definition nimble_contact_entity.h:557
double coord_2_x_
Definition nimble_contact_entity.h:536
int local_id_
Definition nimble_contact_entity.h:593
double coord_2_y_
Definition nimble_contact_entity.h:537
int node_id_2_for_fictitious_node_
Definition nimble_contact_entity.h:576
CONTACT_ENTITY_TYPE entity_type_
Definition nimble_contact_entity.h:531
int node_id_1_for_fictitious_node_
Definition nimble_contact_entity.h:575
int node_id_3_for_fictitious_node_
Definition nimble_contact_entity.h:577
double coord_3_y_
Definition nimble_contact_entity.h:540
double coord_1_z_
Definition nimble_contact_entity.h:535
int num_nodes_
Definition nimble_contact_entity.h:532

◆ ~ContactEntity()

NIMBLE_INLINE_FUNCTION nimble::ContactEntity::~ContactEntity ( )
default

Member Function Documentation

◆ centroid()

NIMBLE_INLINE_FUNCTION vertex nimble::ContactEntity::centroid ( ) const
inline
359 {
360 return centroid_;
361 }
vertex centroid_
Definition nimble_contact_entity.h:568

◆ ComputeNodalContactForces()

NIMBLE_INLINE_FUNCTION void nimble::ContactEntity::ComputeNodalContactForces ( const double *const contact_force,
const double *const closest_point_projection )
inline
459 {
460 double N[3] = {0.0, 0.0, 0.0};
461
462 if (entity_type_ == NODE) {
463 N[0] = 1.0;
464 } else if (entity_type_ == TRIANGLE) {
465 // Find the natural coordinates of the closest_point_projection
466 double area_1 = TriangleArea(
467 closest_point_projection[0],
468 closest_point_projection[1],
469 closest_point_projection[2],
475 coord_3_z_);
476 double area_2 = TriangleArea(
480 closest_point_projection[0],
481 closest_point_projection[1],
482 closest_point_projection[2],
485 coord_3_z_);
486 double full_area = TriangleArea(
488 N[0] = area_1 / full_area;
489 N[1] = area_2 / full_area;
490 N[2] = 1.0 - N[0] - N[1];
491 }
492
493 force_1_x_ = N[0] * contact_force[0];
494 force_1_y_ = N[0] * contact_force[1];
495 force_1_z_ = N[0] * contact_force[2];
496 if (entity_type_ == TRIANGLE) {
497 force_2_x_ = N[1] * contact_force[0];
498 force_2_y_ = N[1] * contact_force[1];
499 force_2_z_ = N[1] * contact_force[2];
500 force_3_x_ = N[2] * contact_force[0];
501 force_3_y_ = N[2] * contact_force[1];
502 force_3_z_ = N[2] * contact_force[2];
503 }
504 }
double force_1_y_
Definition nimble_contact_entity.h:543
double force_3_y_
Definition nimble_contact_entity.h:549
double force_3_z_
Definition nimble_contact_entity.h:550
double force_2_x_
Definition nimble_contact_entity.h:545
double force_1_x_
Definition nimble_contact_entity.h:542
double force_2_z_
Definition nimble_contact_entity.h:547
double force_1_z_
Definition nimble_contact_entity.h:544
double force_3_x_
Definition nimble_contact_entity.h:548
double force_2_y_
Definition nimble_contact_entity.h:546
NIMBLE_INLINE_FUNCTION double TriangleArea(double pt_1_x, double pt_1_y, double pt_1_z, double pt_2_x, double pt_2_y, double pt_2_z, double pt_3_x, double pt_3_y, double pt_3_z)
Definition nimble_contact_entity.h:67

◆ contact_entity_global_id()

NIMBLE_INLINE_FUNCTION int nimble::ContactEntity::contact_entity_global_id ( ) const
inline
345 {
347 }

◆ contact_status()

NIMBLE_INLINE_FUNCTION bool nimble::ContactEntity::contact_status ( ) const
inlinenoexcept
369 {
370 return contact_status_;
371 }
bool contact_status_
Definition nimble_contact_entity.h:595

◆ ExportGeometryInto()

void nimble::ContactEntity::ExportGeometryInto ( ContactEntity & xerox) const
51{
52 xerox.entity_type_ = entity_type_;
53
54 xerox.num_nodes_ = num_nodes_;
55 xerox.coord_1_x_ = coord_1_x_;
56 xerox.coord_1_y_ = coord_1_y_;
57 xerox.coord_1_z_ = coord_1_z_;
58 xerox.coord_2_x_ = coord_2_x_;
59 xerox.coord_2_y_ = coord_2_y_;
60 xerox.coord_2_z_ = coord_2_z_;
61 xerox.coord_3_x_ = coord_3_x_;
62 xerox.coord_3_y_ = coord_3_y_;
63 xerox.coord_3_z_ = coord_3_z_;
64
65 xerox.char_len_ = char_len_;
66
67 xerox.bounding_box_x_min_ = bounding_box_x_min_;
68 xerox.bounding_box_x_max_ = bounding_box_x_max_;
69 xerox.bounding_box_y_min_ = bounding_box_y_min_;
70 xerox.bounding_box_y_max_ = bounding_box_y_max_;
71 xerox.bounding_box_z_min_ = bounding_box_z_min_;
72 xerox.bounding_box_z_max_ = bounding_box_z_max_;
73}
double bounding_box_y_max_
Definition nimble_contact_entity.h:563
double bounding_box_z_min_
Definition nimble_contact_entity.h:564
double bounding_box_z_max_
Definition nimble_contact_entity.h:565
double bounding_box_y_min_
Definition nimble_contact_entity.h:562
double bounding_box_x_max_
Definition nimble_contact_entity.h:561
double bounding_box_x_min_
Definition nimble_contact_entity.h:560

◆ get_x_max()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_x_max ( ) const
inline
313 {
314 return bounding_box_x_max_;
315 }

◆ get_x_min()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_x_min ( ) const
inline
307 {
308 return bounding_box_x_min_;
309 }

◆ get_y_max()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_y_max ( ) const
inline
325 {
326 return bounding_box_y_max_;
327 }

◆ get_y_min()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_y_min ( ) const
inline
319 {
320 return bounding_box_y_min_;
321 }

◆ get_z_max()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_z_max ( ) const
inline
337 {
338 return bounding_box_z_max_;
339 }

◆ get_z_min()

NIMBLE_INLINE_FUNCTION double nimble::ContactEntity::get_z_min ( ) const
inline
331 {
332 return bounding_box_z_min_;
333 }

◆ local_id()

NIMBLE_INLINE_FUNCTION int nimble::ContactEntity::local_id ( ) const
inlinenoexcept
352 {
353 return local_id_;
354 }

◆ ResetContactData()

void nimble::ContactEntity::ResetContactData ( )
inline
508 {
509 contact_status_ = false;
510 }

◆ ScatterForceToContactManagerForceVector()

template<typename ArgT>
NIMBLE_INLINE_FUNCTION void nimble::ContactEntity::ScatterForceToContactManagerForceVector ( ArgT & force) const
inline
262 {
263 int n = 3 * node_id_for_node_1_;
264#ifdef NIMBLE_HAVE_KOKKOS
265 Kokkos::atomic_add(&force[n], force_1_x_);
266 Kokkos::atomic_add(&force[n + 1], force_1_y_);
267 Kokkos::atomic_add(&force[n + 2], force_1_z_);
268#else
269 force[n] += force_1_x_;
270 force[n + 1] += force_1_y_;
271 force[n + 2] += force_1_z_;
272#endif
273 if (entity_type_ == TRIANGLE) {
274 n = 3 * node_id_for_node_2_;
275#ifdef NIMBLE_HAVE_KOKKOS
276 Kokkos::atomic_add(&force[n], force_2_x_);
277 Kokkos::atomic_add(&force[n + 1], force_2_y_);
278 Kokkos::atomic_add(&force[n + 2], force_2_z_);
279#else
280 force[n] += force_2_x_;
281 force[n + 1] += force_2_y_;
282 force[n + 2] += force_2_z_;
283#endif
284 std::vector<int> list{
289 for (const auto n : list) {
290#ifdef NIMBLE_HAVE_KOKKOS
291 Kokkos::atomic_add(&force[n], force_3_x_ / 4.0);
292 Kokkos::atomic_add(&force[n + 1], force_3_y_ / 4.0);
293 Kokkos::atomic_add(&force[n + 2], force_3_z_ / 4.0);
294#else
295 force[n] += force_3_x_ / 4.0;
296 force[n + 1] += force_3_y_ / 4.0;
297 force[n + 2] += force_3_z_ / 4.0;
298#endif
299 }
300 }
301 }

◆ set_contact_status()

NIMBLE_INLINE_FUNCTION void nimble::ContactEntity::set_contact_status ( bool status)
inlinenoexcept
376 {
377#ifdef NIMBLE_HAVE_KOKKOS
378 Kokkos::atomic_store(&contact_status_, status);
379#else
380 contact_status_ = status;
381#endif
382 }

◆ SetBoundingBox()

void nimble::ContactEntity::SetBoundingBox ( )
protected

Create a bounding box centered around the entity.

Note
This function is only called within the class ContactEntity
77{
87
88 // todo, try ternary operator here
89 if (entity_type_ == TRIANGLE) {
100 centroid_[1] += coord_3_y_;
101 centroid_[2] += coord_3_z_;
108 }
109
110 centroid_[0] /= num_nodes_;
111 centroid_[1] /= num_nodes_;
112 centroid_[2] /= num_nodes_;
113
114 double inflation_length = inflation_factor * char_len_;
115
116 bounding_box_x_min_ -= inflation_length;
117 bounding_box_x_max_ += inflation_length;
118 bounding_box_y_min_ -= inflation_length;
119 bounding_box_y_max_ += inflation_length;
120 bounding_box_z_min_ -= inflation_length;
121 bounding_box_z_max_ += inflation_length;
122}
double inflation_factor
Factor multiplying characteristic length to inflate bounding box.
Definition nimble_contact_entity.h:555

◆ SetCoordinates()

template<typename ArgT>
NIMBLE_INLINE_FUNCTION void nimble::ContactEntity::SetCoordinates ( ArgT coord)
inline
238 {
239 int n0 = 3 * node_id_for_node_1_;
240 coord_1_x_ = coord[n0];
241 coord_1_y_ = coord[n0 + 1];
242 coord_1_z_ = coord[n0 + 2];
243 if (entity_type_ == TRIANGLE) {
244 n0 = 3 * node_id_for_node_2_;
245 coord_2_x_ = coord[n0];
246 coord_2_y_ = coord[n0 + 1];
247 coord_2_z_ = coord[n0 + 2];
252 coord_3_x_ = (coord[n0] + coord[n1] + coord[n2] + coord[n3]) / 4.0;
253 coord_3_y_ = (coord[n0 + 1] + coord[n1 + 1] + coord[n2 + 1] + coord[n3 + 1]) / 4.0;
254 coord_3_z_ = (coord[n0 + 2] + coord[n1 + 2] + coord[n2 + 2] + coord[n3 + 2]) / 4.0;
255 }
257 }

◆ SetNodalContactForces()

NIMBLE_INLINE_FUNCTION void nimble::ContactEntity::SetNodalContactForces ( const double *const contact_force,
const double *const N = nullptr )
inline

Distribute input force among node(s) of the entity.

Parameters
contact_forceInput force to distribute
NArray of barycentric coordinates when entity is triangular face
Note
Array N is not accessed when the entity is a node.
Indices for node(s) of the entity are not accessed.
430 {
431 switch (entity_type_) {
432 default: break;
433 case NODE:
434 force_1_x_ = -contact_force[0];
435 force_1_y_ = -contact_force[1];
436 force_1_z_ = -contact_force[2];
437 break;
438 case TRIANGLE:
439 if (N == nullptr) {
440 throw std::invalid_argument("\n Null pointer provided.\n\n");
441 }
442 force_1_x_ = N[0] * contact_force[0];
443 force_1_y_ = N[0] * contact_force[1];
444 force_1_z_ = N[0] * contact_force[2];
445 force_2_x_ = N[1] * contact_force[0];
446 force_2_y_ = N[1] * contact_force[1];
447 force_2_z_ = N[1] * contact_force[2];
448 force_3_x_ = N[2] * contact_force[0];
449 force_3_y_ = N[2] * contact_force[1];
450 force_3_z_ = N[2] * contact_force[2];
451 break;
452 }
453 }

Friends And Related Symbol Documentation

◆ SerializeContactFaces

template<typename ArgT>
void SerializeContactFaces ( int num_entities,
ArgT contact_entities,
std::vector< char > & buffer )
friend
601{
602 constexpr size_t size_int = sizeof(int);
603 constexpr size_t size_double = sizeof(double);
604 size_t entity_size = 10 * sizeof(double) + 8 * sizeof(int);
605 buffer.resize(entity_size * num_entities);
606 char* scan = &buffer[0];
607 for (int i = 0; i < num_entities; i++) {
608 memcpy(scan, &contact_entities[i].coord_1_x_, size_double);
609 scan += size_double;
610 memcpy(scan, &contact_entities[i].coord_1_y_, size_double);
611 scan += size_double;
612 memcpy(scan, &contact_entities[i].coord_1_z_, size_double);
613 scan += size_double;
614 memcpy(scan, &contact_entities[i].coord_2_x_, size_double);
615 scan += size_double;
616 memcpy(scan, &contact_entities[i].coord_2_y_, size_double);
617 scan += size_double;
618 memcpy(scan, &contact_entities[i].coord_2_z_, size_double);
619 scan += size_double;
620 memcpy(scan, &contact_entities[i].coord_3_x_, size_double);
621 scan += size_double;
622 memcpy(scan, &contact_entities[i].coord_3_y_, size_double);
623 scan += size_double;
624 memcpy(scan, &contact_entities[i].coord_3_z_, size_double);
625 scan += size_double;
626 memcpy(scan, &contact_entities[i].char_len_, size_double);
627 scan += size_double;
628 memcpy(scan, &contact_entities[i].contact_entity_global_id_, size_int);
629 scan += size_int;
630 memcpy(scan, &contact_entities[i].node_id_for_node_1_, size_int);
631 scan += size_int;
632 memcpy(scan, &contact_entities[i].node_id_for_node_2_, size_int);
633 scan += size_int;
634 memcpy(scan, &contact_entities[i].node_id_1_for_fictitious_node_, size_int);
635 scan += size_int;
636 memcpy(scan, &contact_entities[i].node_id_2_for_fictitious_node_, size_int);
637 scan += size_int;
638 memcpy(scan, &contact_entities[i].node_id_3_for_fictitious_node_, size_int);
639 scan += size_int;
640 memcpy(scan, &contact_entities[i].node_id_4_for_fictitious_node_, size_int);
641 scan += size_int;
642 }
643}

◆ UnserializeContactFaces

template<typename ArgT>
void UnserializeContactFaces ( int num_entities,
ArgT contact_entities,
std::vector< char > & buffer )
friend
648{
649 constexpr size_t size_int = sizeof(int);
650 constexpr size_t size_double = sizeof(double);
651 ContactEntity entity;
652 entity.entity_type_ = ContactEntity::TRIANGLE;
653 entity.num_nodes_ = 3;
654 entity.force_1_x_ = 0.0;
655 entity.force_1_y_ = 0.0;
656 entity.force_1_z_ = 0.0;
657 entity.force_2_x_ = 0.0;
658 entity.force_2_y_ = 0.0;
659 entity.force_2_z_ = 0.0;
660 entity.force_3_x_ = 0.0;
661 entity.force_3_y_ = 0.0;
662 entity.force_3_z_ = 0.0;
663 char* scan = &buffer[0];
664 for (int i = 0; i < num_entities; i++) {
665 memcpy(&entity.coord_1_x_, scan, size_double);
666 scan += size_double;
667 memcpy(&entity.coord_1_y_, scan, size_double);
668 scan += size_double;
669 memcpy(&entity.coord_1_z_, scan, size_double);
670 scan += size_double;
671 memcpy(&entity.coord_2_x_, scan, size_double);
672 scan += size_double;
673 memcpy(&entity.coord_2_y_, scan, size_double);
674 scan += size_double;
675 memcpy(&entity.coord_2_z_, scan, size_double);
676 scan += size_double;
677 memcpy(&entity.coord_3_x_, scan, size_double);
678 scan += size_double;
679 memcpy(&entity.coord_3_y_, scan, size_double);
680 scan += size_double;
681 memcpy(&entity.coord_3_z_, scan, size_double);
682 scan += size_double;
683 memcpy(&entity.char_len_, scan, size_double);
684 scan += size_double;
685 memcpy(&entity.contact_entity_global_id_, scan, size_int);
686 scan += size_int;
687 memcpy(&entity.node_id_for_node_1_, scan, size_int);
688 scan += size_int;
689 memcpy(&entity.node_id_for_node_2_, scan, size_int);
690 scan += size_int;
691 memcpy(&entity.node_id_1_for_fictitious_node_, scan, size_int);
692 scan += size_int;
693 memcpy(&entity.node_id_2_for_fictitious_node_, scan, size_int);
694 scan += size_int;
695 memcpy(&entity.node_id_3_for_fictitious_node_, scan, size_int);
696 scan += size_int;
697 memcpy(&entity.node_id_4_for_fictitious_node_, scan, size_int);
698 scan += size_int;
699 entity.SetBoundingBox();
700 contact_entities[i] = entity;
701 }
702}

Member Data Documentation

◆ bounding_box_x_max_

double nimble::ContactEntity::bounding_box_x_max_ = DBL_MAX

◆ bounding_box_x_min_

double nimble::ContactEntity::bounding_box_x_min_ = -DBL_MAX

◆ bounding_box_y_max_

double nimble::ContactEntity::bounding_box_y_max_ = DBL_MAX

◆ bounding_box_y_min_

double nimble::ContactEntity::bounding_box_y_min_ = -DBL_MAX

◆ bounding_box_z_max_

double nimble::ContactEntity::bounding_box_z_max_ = DBL_MAX

◆ bounding_box_z_min_

double nimble::ContactEntity::bounding_box_z_min_ = -DBL_MAX

◆ centroid_

vertex nimble::ContactEntity::centroid_

◆ char_len_

double nimble::ContactEntity::char_len_ = 0.0

◆ contact_entity_global_id_

int nimble::ContactEntity::contact_entity_global_id_ = -1

◆ contact_status_

bool nimble::ContactEntity::contact_status_ = false

◆ coord_1_x_

double nimble::ContactEntity::coord_1_x_ = 0.0

◆ coord_1_y_

double nimble::ContactEntity::coord_1_y_ = 0.0

◆ coord_1_z_

double nimble::ContactEntity::coord_1_z_ = 0.0

◆ coord_2_x_

double nimble::ContactEntity::coord_2_x_ = 0.0

◆ coord_2_y_

double nimble::ContactEntity::coord_2_y_ = 0.0

◆ coord_2_z_

double nimble::ContactEntity::coord_2_z_ = 0.0

◆ coord_3_x_

double nimble::ContactEntity::coord_3_x_ = 0.0

◆ coord_3_y_

double nimble::ContactEntity::coord_3_y_ = 0.0

◆ coord_3_z_

double nimble::ContactEntity::coord_3_z_ = 0.0

◆ entity_type_

CONTACT_ENTITY_TYPE nimble::ContactEntity::entity_type_ = NONE

◆ force_1_x_

double nimble::ContactEntity::force_1_x_ = 0.0

◆ force_1_y_

double nimble::ContactEntity::force_1_y_ = 0.0

◆ force_1_z_

double nimble::ContactEntity::force_1_z_ = 0.0

◆ force_2_x_

double nimble::ContactEntity::force_2_x_ = 0.0

◆ force_2_y_

double nimble::ContactEntity::force_2_y_ = 0.0

◆ force_2_z_

double nimble::ContactEntity::force_2_z_ = 0.0

◆ force_3_x_

double nimble::ContactEntity::force_3_x_ = 0.0

◆ force_3_y_

double nimble::ContactEntity::force_3_y_ = 0.0

◆ force_3_z_

double nimble::ContactEntity::force_3_z_ = 0.0

◆ inflation_factor

double nimble::ContactEntity::inflation_factor = 0.15

Factor multiplying characteristic length to inflate bounding box.

Note
Empirical default value 0.15

◆ local_id_

int nimble::ContactEntity::local_id_ = -1

◆ node_id_1_for_fictitious_node_

int nimble::ContactEntity::node_id_1_for_fictitious_node_ = -1

◆ node_id_2_for_fictitious_node_

int nimble::ContactEntity::node_id_2_for_fictitious_node_ = -1

◆ node_id_3_for_fictitious_node_

int nimble::ContactEntity::node_id_3_for_fictitious_node_ = -1

◆ node_id_4_for_fictitious_node_

int nimble::ContactEntity::node_id_4_for_fictitious_node_ = -1

◆ node_id_for_node_1_

int nimble::ContactEntity::node_id_for_node_1_ = -1

◆ node_id_for_node_2_

int nimble::ContactEntity::node_id_for_node_2_ = -1

◆ num_nodes_

int nimble::ContactEntity::num_nodes_ = 0

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