51 for (
int i = 0; i <
m_dv.
size(); ++i)
101 f2 = f0 - alpha * scale * inner_product;
158 for (
int i = 0; i <
m_dv.
size(); ++i)
171 if (inner_product < -tol)
175 std::cout <<
"Looking backwards!" << std::endl;
181 inner_product = -inner_product;
183 else if (std::abs(inner_product) < tol)
187 std::cout <<
"Gradient Descent!" << std::endl;
192 m_ddv[i] = scale * residual[i];
194 inner_product = scale * res_norm * res_norm;
196 return inner_product;
260 return maxSquaredResidual;
280 m_dv[counter].setZero();
346 m_dv[counter].setZero();
422 BT_PROFILE(
"btDeformableBodySolver::predictDeformableMotion");
static const int kMaxConjugateGradientIterations
const T & btMax(const T &a, const T &b)
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
virtual void reinitialize(bool nodeUpdated)=0
int size() const
return the number of elements in the array
void copyFromArray(const btAlignedObjectArray &otherArray)
void resize(int newsize, const T &fillData=T())
btCollisionObject can be used to manage collision detection objects.
const btCollisionShape * getCollisionShape() const
virtual btScalar getMargin() const =0
virtual void updateSoftBodies()
Perform necessary per-step updates of soft bodies such as recomputing normals and bounding boxes.
virtual void solveDeformableConstraints(btScalar solverdt)
void updateEnergy(btScalar scale)
void setConstraints(const btContactSolverInfo &infoGlobal)
virtual ~btDeformableBodySolver()
btDeformableBackwardEulerObjective * m_objective
int m_maxNewtonIterations
btScalar computeDescentStep(TVStack &ddv, const TVStack &residual, bool verbose=false)
void predictDeformableMotion(btSoftBody *psb, btScalar dt)
btConjugateResidual< btDeformableBackwardEulerObjective > m_cr
btConjugateGradient< btDeformableBackwardEulerObjective > m_cg
void reinitialize(const btAlignedObjectArray< btSoftBody * > &softBodies, btScalar dt)
void setupDeformableSolve(bool implicit)
void setLineSearch(bool lineSearch)
btAlignedObjectArray< btSoftBody * > m_softBodies
virtual btScalar solveContactConstraints(btCollisionObject **deformableBodies, int numDeformableBodies, const btContactSolverInfo &infoGlobal)
btScalar m_newtonTolerance
virtual void predictMotion(btScalar solverdt)
Predict motion of soft bodies into next timestep.
void setImplicit(bool implicit)
void computeStep(TVStack &ddv, const TVStack &residual)
void updateTempPosition()
void updateDv(btScalar scale=1)
The btSoftBody is an class to simulate cloth and volumetric soft bodies.
void updateFaceTree(bool use_velocity, bool margin)
void updateNodeTree(bool use_velocity, bool margin)
btAlignedObjectArray< DeformableFaceNodeContact > m_faceNodeContacts
btScalar m_maxSpeedSquared
btAlignedObjectArray< DeformableFaceRigidContact > m_faceRigidContacts
btAlignedObjectArray< DeformableNodeRigidContact > m_nodeRigidContacts
void initializeFaceTree()
btVector3 can be used to represent 3D points and vectors.
btVector3 & safeNormalize()
btScalar norm() const
Return the norm (length) of the vector.
@ SDF_RD
Cluster vs convex rigid vs soft.