Unilateral constraints

Description

Collaboration diagram for Unilateral constraints:

Classes

class  chrono::ChConstraintBilateral
 Bilateral (joint) constraints. More...
 
class  chrono::ChConstraintRigidRigid
 Unilateral (contact) constraints. More...
 

Macros

#define NORMAL_J
 
#define SLIDING_J
 
#define Loop_Over_Rigid_Neighbors(X)
 
#define Loop_Over_Fluid_Neighbors(X)
 

Functions

CH_PARALLEL_API void chrono::Orthogonalize (real3 &Vx, real3 &Vy, real3 &Vz)
 
CH_PARALLEL_API void chrono::Compute_Jacobian (const quaternion &quat, const real3 &U, const real3 &V, const real3 &W, const real3 &point, real3 &T1, real3 &T2, real3 &T3)
 
CH_PARALLEL_API void chrono::Compute_Jacobian_Rolling (const quaternion &quat, const real3 &U, const real3 &V, const real3 &W, real3 &T1, real3 &T2, real3 &T3)
 
CH_PARALLEL_API bool chrono::Cone_generalized_rigid (real &gamma_n, real &gamma_u, real &gamma_v, real mu)
 
CH_PARALLEL_API bool chrono::Cone_single_rigid (real &gamma_n, real &gamma_s, real mu)
 
CH_PARALLEL_API void chrono::AppendRigidFluidBoundary (const real contact_mu, const uint num_fluid_bodies, const uint body_offset, const uint start_boundary, ChParallelDataManager *data_manager)
 
CH_PARALLEL_API void chrono::ProjectRigidFluidBoundary (const real contact_mu, const real contact_cohesion, const uint num_fluid_bodies, const uint start_boundary, real *gamma, ChParallelDataManager *data_manager)
 
CH_PARALLEL_API void chrono::ComplianceRigidFluidBoundary (const real contact_mu, const real contact_compliance, const real alpha, const uint start_boundary, ChParallelDataManager *data_manager)
 
CH_PARALLEL_API void chrono::CorrectionRigidFluidBoundary (const real contact_mu, const real contact_cohesion, const real alpha, const real contact_recovery_speed, const uint num_fluid_bodies, const uint start_boundary, ChParallelDataManager *data_manager)
 
CH_PARALLEL_API void chrono::BuildRigidFluidBoundary (const real contact_mu, const uint num_fluid_bodies, const uint body_offset, const uint start_boundary, ChParallelDataManager *data_manager)
 

Macro Definition Documentation

◆ Loop_Over_Fluid_Neighbors

#define Loop_Over_Fluid_Neighbors (   X)
Value:
for (int body_a = 0; body_a < (signed)num_fluid_bodies; body_a++) { \
real3 pos_p = sorted_pos[body_a]; \
for (int i = 0; i < data_manager->host_data.c_counts_3dof_3dof[body_a]; i++) { \
int body_b = data_manager->host_data.neighbor_3dof_3dof[body_a * max_neighbors + i]; \
if (body_a == body_b) { \
continue; \
} \
if (body_a > body_b) { \
continue; \
} \
real3 xij = pos_p - sorted_pos[body_b]; \
X; \
index++; \
} \
}

◆ Loop_Over_Rigid_Neighbors

#define Loop_Over_Rigid_Neighbors (   X)
Value:
for (int p = 0; p < (signed)num_fluid_bodies; p++) { \
int start = contact_counts[p]; \
int end = contact_counts[p + 1]; \
for (int index = start; index < end; index++) { \
int i = index - start; \
X \
} \
}

◆ NORMAL_J

#define NORMAL_J
Value:
real3 U_A = Rotate(U, q_a); \
T3 = Cross(U_A, sbar_a.v); \
real3 U_B = Rotate(U, q_b); \
T6 = Cross(U_B, sbar_b.v);

◆ SLIDING_J

#define SLIDING_J
Value:
real3 V_A = Rotate(V, q_a); \
real3 W_A = Rotate(W, q_a); \
T4 = Cross(V_A, sbar_a.v); \
T5 = Cross(W_A, sbar_a.v); \
\
real3 V_B = Rotate(V, q_b); \
real3 W_B = Rotate(W, q_b); \
T7 = Cross(V_B, sbar_b.v); \
T8 = Cross(W_B, sbar_b.v);