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;
270 if (!psb->isActive())
302 if (!psb->isActive())
335 if (!psb->isActive())
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...
virtual void reinitialize(bool nodeUpdated)=0
void copyFromArray(const btAlignedObjectArray &otherArray)
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
SIMD_FORCE_INLINE void resize(int newsize, const T &fillData=T())
int solve(MatrixX &A, TVStack &x, const TVStack &b, bool verbose=false)
int solve(MatrixX &A, TVStack &x, const TVStack &b, bool verbose=false)
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)
virtual SIMD_FORCE_INLINE btScalar dot(const TVStack &a, const TVStack &b)
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_gpu_kernel_postfix ccl_global int * counter
@ SDF_RD
Cluster vs convex rigid vs soft.
ccl_device_inline float beta(float x, float y)