File contactForce.h

class contactForce : public baseForce

Public Functions

contactForce(const shared_ptr<softRobots> &soft_robots, double col_limit, double delta, double k_scaler, bool friction, double nu, bool self_contact)
virtual void computeForce(double dt) override
virtual void computeForceAndJacobian(double dt) override
void broadPhaseCollisionDetection() const
int getNumCollisions() const
double getMinDist() const

Public Members

double contact_stiffness
unique_ptr<collisionDetector> col_detector

Private Functions

void setupContactVariables(const Vector<int, 8> &contact_id)
void prepContactInput()
void prepFrictionInput(double dt)
void computeFriction(double dt)

Private Members

unique_ptr<symbolicEquations> sym_eqs
double K1
double K2
double delta
double k_scaler
bool friction
double mu
double nu
double surface_limit
int idx1
int idx2
int idx3
int idx4
int idx5
int idx6
Vector3d x1s
Vector3d x1e
Vector3d x2s
Vector3d x2e
Vector3d x1s0
Vector3d x1e0
Vector3d x2s0
Vector3d x2e0
ConstraintType constraint_type
FrictionType friction_type
ContactPiecewise contact_type
Vector<double, 8> p2p_input
Vector<double, 11> e2p_input
Vector<double, 14> e2e_input
Vector<double, 6> p2p_gradient
Vector<double, 9> e2p_gradient
Vector<double, 12> e2e_gradient
Matrix<double, 6, 6> p2p_hessian
Matrix<double, 9, 9> e2p_hessian
Matrix<double, 12, 12> e2e_hessian
Vector<double, 39> friction_input
Vector<double, 12> contact_gradient
Vector<double, 12> friction_forces
Matrix<double, 12, 12> contact_hessian
Matrix<double, 12, 12> friction_partials_dfr_dx
Matrix<double, 12, 12> friction_partials_dfr_dfc
Matrix<double, 12, 12> friction_jacobian