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;
177 for (
int i = 0;
i <
m_ddv.size(); ++
i)
181 inner_product = -inner_product;
183 else if (std::abs(inner_product) < tol)
187 std::cout <<
"Gradient Descent!" << std::endl;
190 for (
int i = 0;
i <
m_ddv.size(); ++
i)
192 m_ddv[
i] = scale * residual[
i];
194 inner_product = scale * res_norm * res_norm;
196 return inner_product;
260 return maxSquaredResidual;
270 if (!psb->isActive())
280 m_dv[counter].setZero();
302 if (!psb->isActive())
335 if (!psb->isActive())
346 m_dv[counter].setZero();
419 BT_PROFILE(
"btDeformableBodySolver::predictDeformableMotion");
438 psb->
m_sst.
radmrg = psb->getCollisionShape()->getMargin();
458 if (n.
m_v.norm() > max_v)
460 n.
m_v.safeNormalize();
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
static const int kMaxConjugateGradientIterations
SIMD_FORCE_INLINE 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...
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint int const btContactSolverInfo & infoGlobal
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
virtual void updateSoftBodies()
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)
void setImplicit(bool implicit)
void computeStep(TVStack &ddv, const TVStack &residual)
void updateTempPosition()
void updateDv(btScalar scale=1)
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()
ccl_device_inline float beta(const float x, const float y)
@ SDF_RD
Cluster vs convex rigid vs soft.