UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::Softs::FNewtonEvolution Class Reference

#include <NewtonEvolution.h>

+ Inheritance diagram for Chaos::Softs::FNewtonEvolution:

Public Member Functions

CHAOS_API FNewtonEvolution (FSolverParticles &&InParticles, FSolverCollisionParticles &&InGeometryParticles, TArray< TVec3< int32 > > &&CollisionTriangles, const TArray< TVector< int32, 4 > > &InMesh, TArray< TArray< TVector< int32, 2 > > > &&InIncidentElements, int32 NumNewtonIterations=5, int32 NumCGIterations=20, const TArray< int32 > &ConstrainedVertices=TArray< int32 >(), const TArray< FSolverVec3 > &BCPositions=TArray< FSolverVec3 >(), FSolverReal CollisionThickness=(FSolverReal) 0., FSolverReal SelfCollisionsThickness=(FSolverReal) 0., FSolverReal CoefficientOfFriction=(FSolverReal) 0., FSolverReal Damping=(FSolverReal) 0.04, FSolverReal LocalDamping=(FSolverReal) 0., FSolverReal EMesh=(FSolverReal) 1000., FSolverReal NuMesh=(FSolverReal).3, FSolverReal NewtonTol=(FSolverReal) 1e-6, FSolverReal CGTolIn=(FSolverReal) 1e-8, bool bWriteDebugInfoIn=true)
 
 ~FNewtonEvolution ()
 
CHAOS_API void AdvanceOneTimeStep (const FSolverReal Dt, const bool bSmoothDt=true)
 
CHAOS_API void ResetParticles ()
 
CHAOS_API int32 AddParticleRange (int32 NumParticles, uint32 GroupId, bool bActivate)
 
int32 GetParticleRangeSize (int32 Offset) const
 
void ActivateParticleRange (int32 Offset, bool bActivate)
 
const FSolverParticlesParticles () const
 
FSolverParticlesParticles ()
 
const TPBDActiveView< FSolverParticles > & ParticlesActiveView ()
 
TArray< TArray< TVector< int32, 2 > > > & IncidentElements ()
 
const TArray< uint32 > & ParticleGroupIds () const
 
CHAOS_API void ResetCollisionParticles (int32 NumParticles=0)
 
CHAOS_API int32 AddCollisionParticleRange (int32 NumParticles, uint32 GroupId, bool bActivate)
 
void ActivateCollisionParticleRange (int32 Offset, bool bActivate)
 
int32 GetCollisionParticleRangeSize (int32 Offset) const
 
const FSolverCollisionParticlesCollisionParticles () const
 
FSolverCollisionParticlesCollisionParticles ()
 
const TArray< uint32 > & CollisionParticleGroupIds () const
 
const TPBDActiveView< FSolverCollisionParticles > & CollisionParticlesActiveView ()
 
void ResetConstraintRules ()
 
CHAOS_API int32 AddConstraintInitRange (int32 NumConstraints, bool bActivate)
 
CHAOS_API int32 AddConstraintRuleRange (int32 NumConstraints, bool bActivate)
 
CHAOS_API int32 AddPostCollisionConstraintRuleRange (int32 NumConstraints, bool bActivate)
 
int32 GetConstraintInitRangeSize (int32 Offset) const
 
int32 GetConstraintRuleRangeSize (int32 Offset) const
 
int32 GetPostCollisionConstraintRuleRangeSize (int32 Offset) const
 
void ActivateConstraintInitRange (int32 Offset, bool bActivate)
 
void ActivateConstraintRuleRange (int32 Offset, bool bActivate)
 
void ActivatePostCollisionConstraintRuleRange (int32 Offset, bool bActivate)
 
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits () const
 
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits ()
 
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules () const
 
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules ()
 
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules () const
 
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules ()
 
void SetKinematicUpdateFunction (TFunction< void(FSolverParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
 
void SetCollisionKinematicUpdateFunction (TFunction< void(FSolverCollisionParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
 
TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction (const uint32 GroupId=0)
 
const TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction (const uint32 GroupId=0) const
 
const FSolverVec3GetGravity (const uint32 GroupId=0) const
 
void SetGravity (const FSolverVec3 &Acceleration, const uint32 GroupId=0)
 
FVelocityAndPressureFieldGetVelocityAndPressureField (const uint32 GroupId=0)
 
const FVelocityAndPressureFieldGetVelocityAndPressureField (const uint32 GroupId=0) const
 
int32 GetNewtonIterations () const
 
void SetNewtonIterations (const int32 Iterations)
 
FSolverReal GetCollisionThickness (const uint32 GroupId=0) const
 
void SetCollisionThickness (const FSolverReal CollisionThickness, const uint32 GroupId=0)
 
FSolverReal GetCoefficientOfFriction (const uint32 GroupId=0) const
 
void SetCoefficientOfFriction (const FSolverReal CoefficientOfFriction, const uint32 GroupId=0)
 
FSolverReal GetDamping (const uint32 GroupId=0) const
 
void SetDamping (const FSolverReal Damping, const uint32 GroupId=0)
 
FSolverReal GetLocalDamping (const uint32 GroupId=0) const
 
void SetLocalDamping (const FSolverReal LocalDamping, const uint32 GroupId=0)
 
bool GetUseCCD (const uint32 GroupId=0) const
 
void SetUseCCD (const bool bUseCCD, const uint32 GroupId=0)
 
const bool Collided (int32 index)
 
const TArray< bool > & GetCollisionStatus ()
 
const TArray< FSolverVec3 > & GetCollisionContacts () const
 
const TArray< FSolverVec3 > & GetCollisionNormals () const
 
FSolverReal GetTime () const
 
template<typename Func1 , typename Func2 >
void ComputeNegativeBackwardEulerResidual (const FSolverParticles &InParticles, const TArray< TArray< TVector< int32, 2 > > > &IncidentElements, const TArray< FSolverReal > &NodalMass, const TArray< FSolverVec3 > &Vn, const FSolverParticles &Xn, Func1 P, Func2 AddExternalForce, const FSolverReal Time, const FSolverReal Dt, TArray< FSolverVec3 > &Residual)
 
template<typename Func1 , typename Func2 , typename Func3 , typename Func4 , typename Func5 , typename Func6 >
void DoNewtonStep (const int32 max_it_newton, const FSolverReal newton_tol, const int32 max_it_cg, const FSolverReal cg_tol, Func1 P, Func2 dP, const FSolverReal time, const FSolverReal dt, const TArray< TArray< TVector< int32, 2 > > > &incident_elements, const TArray< FSolverReal > &nodal_mass, Func3 set_bcs, Func4 project_bcs, Func5 add_external_force, Func6 update_position_based_state, FSolverParticles &InParticles, TArray< FSolverReal > &residual_norm, bool use_cg=false, FSolverReal cg_prctg_reduce=0, bool no_verbose=false)
 
CHAOS_API void InitFEM ()
 
CHAOS_API void WriteOutputLog (const int32 Frame)
 
- Public Member Functions inherited from Chaos::TArrayCollection
 TArrayCollection ()
 
 TArrayCollection (const TArrayCollection &Other)=delete
 
 TArrayCollection (TArrayCollection &&Other)=delete
 
virtual ~TArrayCollection ()
 
void ShrinkArrays (const float MaxSlackFraction, const int32 MinSlack)
 
int32 AddArray (TArrayCollectionArrayBase *Array)
 
void RemoveArray (TArrayCollectionArrayBase *Array)
 
void RemoveAt (int32 Index, int32 Count)
 
uint32 Size () const
 
uint64 ComputeColumnSize () const
 

Additional Inherited Members

- Protected Member Functions inherited from Chaos::TArrayCollection
void AddElementsHelper (const int32 Num)
 
void ResizeHelper (const int32 Num)
 
void RemoveAtHelper (const int32 Index, const int32 Count)
 
void RemoveAtSwapHelper (const int32 Index)
 
void MoveToOtherArrayCollection (const int32 Index, TArrayCollection &Other)
 
- Protected Attributes inherited from Chaos::TArrayCollection
uint32 MSize
 

Constructor & Destructor Documentation

◆ FNewtonEvolution()

Chaos::Softs::FNewtonEvolution::FNewtonEvolution ( FSolverParticles &&  InParticles,
FSolverCollisionParticles &&  InGeometryParticles,
TArray< TVec3< int32 > > &&  CollisionTriangles,
const TArray< TVector< int32, 4 > > &  InMesh,
TArray< TArray< TVector< int32, 2 > > > &&  InIncidentElements,
int32  NumNewtonIterations = 5,
int32  NumCGIterations = 20,
const TArray< int32 > &  ConstrainedVertices = TArray<int32>(),
const TArray< FSolverVec3 > &  BCPositions = TArray<FSolverVec3>(),
FSolverReal  CollisionThickness = (FSolverReal)0.,
FSolverReal  SelfCollisionsThickness = (FSolverReal)0.,
FSolverReal  CoefficientOfFriction = (FSolverReal)0.,
FSolverReal  Damping = (FSolverReal)0.04,
FSolverReal  LocalDamping = (FSolverReal)0.,
FSolverReal  EMesh = (FSolverReal)1000.,
FSolverReal  NuMesh = (FSolverReal).3,
FSolverReal  NewtonTol = (FSolverReal) 1e-6,
FSolverReal  CGTolIn = (FSolverReal) 1e-8,
bool  bWriteDebugInfoIn = true 
)

◆ ~FNewtonEvolution()

Chaos::Softs::FNewtonEvolution::~FNewtonEvolution ( )
inline

Member Function Documentation

◆ ActivateCollisionParticleRange()

void Chaos::Softs::FNewtonEvolution::ActivateCollisionParticleRange ( int32  Offset,
bool  bActivate 
)
inline

◆ ActivateConstraintInitRange()

void Chaos::Softs::FNewtonEvolution::ActivateConstraintInitRange ( int32  Offset,
bool  bActivate 
)
inline

◆ ActivateConstraintRuleRange()

void Chaos::Softs::FNewtonEvolution::ActivateConstraintRuleRange ( int32  Offset,
bool  bActivate 
)
inline

◆ ActivateParticleRange()

void Chaos::Softs::FNewtonEvolution::ActivateParticleRange ( int32  Offset,
bool  bActivate 
)
inline

◆ ActivatePostCollisionConstraintRuleRange()

void Chaos::Softs::FNewtonEvolution::ActivatePostCollisionConstraintRuleRange ( int32  Offset,
bool  bActivate 
)
inline

◆ AddCollisionParticleRange()

int32 Chaos::Softs::FNewtonEvolution::AddCollisionParticleRange ( int32  NumParticles,
uint32  GroupId,
bool  bActivate 
)

◆ AddConstraintInitRange()

int32 Chaos::Softs::FNewtonEvolution::AddConstraintInitRange ( int32  NumConstraints,
bool  bActivate 
)

◆ AddConstraintRuleRange()

int32 Chaos::Softs::FNewtonEvolution::AddConstraintRuleRange ( int32  NumConstraints,
bool  bActivate 
)

◆ AddParticleRange()

int32 Chaos::Softs::FNewtonEvolution::AddParticleRange ( int32  NumParticles,
uint32  GroupId,
bool  bActivate 
)

◆ AddPostCollisionConstraintRuleRange()

int32 Chaos::Softs::FNewtonEvolution::AddPostCollisionConstraintRuleRange ( int32  NumConstraints,
bool  bActivate 
)

◆ AdvanceOneTimeStep()

void Chaos::Softs::FNewtonEvolution::AdvanceOneTimeStep ( const FSolverReal  Dt,
const bool  bSmoothDt = true 
)

◆ Collided()

const bool Chaos::Softs::FNewtonEvolution::Collided ( int32  index)
inline

◆ CollisionParticleGroupIds()

const TArray< uint32 > & Chaos::Softs::FNewtonEvolution::CollisionParticleGroupIds ( ) const
inline

◆ CollisionParticles() [1/2]

FSolverCollisionParticles & Chaos::Softs::FNewtonEvolution::CollisionParticles ( )
inline

◆ CollisionParticles() [2/2]

const FSolverCollisionParticles & Chaos::Softs::FNewtonEvolution::CollisionParticles ( ) const
inline

◆ CollisionParticlesActiveView()

const TPBDActiveView< FSolverCollisionParticles > & Chaos::Softs::FNewtonEvolution::CollisionParticlesActiveView ( )
inline

◆ ComputeNegativeBackwardEulerResidual()

template<typename Func1 , typename Func2 >
void Chaos::Softs::FNewtonEvolution::ComputeNegativeBackwardEulerResidual ( const FSolverParticles InParticles,
const TArray< TArray< TVector< int32, 2 > > > &  IncidentElements,
const TArray< FSolverReal > &  NodalMass,
const TArray< FSolverVec3 > &  Vn,
const FSolverParticles Xn,
Func1  P,
Func2  AddExternalForce,
const FSolverReal  Time,
const FSolverReal  Dt,
TArray< FSolverVec3 > &  Residual 
)

◆ ConstraintInits() [1/2]

TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::ConstraintInits ( )
inline

◆ ConstraintInits() [2/2]

const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::ConstraintInits ( ) const
inline

◆ ConstraintRules() [1/2]

TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::ConstraintRules ( )
inline

◆ ConstraintRules() [2/2]

const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::ConstraintRules ( ) const
inline

◆ DoNewtonStep()

void Chaos::Softs::FNewtonEvolution::DoNewtonStep ( const int32  max_it_newton,
const FSolverReal  newton_tol,
const int32  max_it_cg,
const FSolverReal  cg_tol,
Func1  P,
Func2  dP,
const FSolverReal  time,
const FSolverReal  dt,
const TArray< TArray< TVector< int32, 2 > > > &  incident_elements,
const TArray< FSolverReal > &  nodal_mass,
Func3  set_bcs,
Func4  project_bcs,
Func5  add_external_force,
Func6  update_position_based_state,
FSolverParticles InParticles,
TArray< FSolverReal > &  residual_norm,
bool  use_cg = false,
FSolverReal  cg_prctg_reduce = 0,
bool  no_verbose = false 
)

◆ GetCoefficientOfFriction()

FSolverReal Chaos::Softs::FNewtonEvolution::GetCoefficientOfFriction ( const uint32  GroupId = 0) const
inline

◆ GetCollisionContacts()

const TArray< FSolverVec3 > & Chaos::Softs::FNewtonEvolution::GetCollisionContacts ( ) const
inline

◆ GetCollisionNormals()

const TArray< FSolverVec3 > & Chaos::Softs::FNewtonEvolution::GetCollisionNormals ( ) const
inline

◆ GetCollisionParticleRangeSize()

int32 Chaos::Softs::FNewtonEvolution::GetCollisionParticleRangeSize ( int32  Offset) const
inline

◆ GetCollisionStatus()

const TArray< bool > & Chaos::Softs::FNewtonEvolution::GetCollisionStatus ( )
inline

◆ GetCollisionThickness()

FSolverReal Chaos::Softs::FNewtonEvolution::GetCollisionThickness ( const uint32  GroupId = 0) const
inline

◆ GetConstraintInitRangeSize()

int32 Chaos::Softs::FNewtonEvolution::GetConstraintInitRangeSize ( int32  Offset) const
inline

◆ GetConstraintRuleRangeSize()

int32 Chaos::Softs::FNewtonEvolution::GetConstraintRuleRangeSize ( int32  Offset) const
inline

◆ GetDamping()

FSolverReal Chaos::Softs::FNewtonEvolution::GetDamping ( const uint32  GroupId = 0) const
inline

◆ GetForceFunction() [1/2]

TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & Chaos::Softs::FNewtonEvolution::GetForceFunction ( const uint32  GroupId = 0)
inline

◆ GetForceFunction() [2/2]

const TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & Chaos::Softs::FNewtonEvolution::GetForceFunction ( const uint32  GroupId = 0) const
inline

◆ GetGravity()

const FSolverVec3 & Chaos::Softs::FNewtonEvolution::GetGravity ( const uint32  GroupId = 0) const
inline

◆ GetLocalDamping()

FSolverReal Chaos::Softs::FNewtonEvolution::GetLocalDamping ( const uint32  GroupId = 0) const
inline

◆ GetNewtonIterations()

int32 Chaos::Softs::FNewtonEvolution::GetNewtonIterations ( ) const
inline

◆ GetParticleRangeSize()

int32 Chaos::Softs::FNewtonEvolution::GetParticleRangeSize ( int32  Offset) const
inline

◆ GetPostCollisionConstraintRuleRangeSize()

int32 Chaos::Softs::FNewtonEvolution::GetPostCollisionConstraintRuleRangeSize ( int32  Offset) const
inline

◆ GetTime()

FSolverReal Chaos::Softs::FNewtonEvolution::GetTime ( ) const
inline

◆ GetUseCCD()

bool Chaos::Softs::FNewtonEvolution::GetUseCCD ( const uint32  GroupId = 0) const
inline

◆ GetVelocityAndPressureField() [1/2]

FVelocityAndPressureField & Chaos::Softs::FNewtonEvolution::GetVelocityAndPressureField ( const uint32  GroupId = 0)
inline

◆ GetVelocityAndPressureField() [2/2]

const FVelocityAndPressureField & Chaos::Softs::FNewtonEvolution::GetVelocityAndPressureField ( const uint32  GroupId = 0) const
inline

◆ IncidentElements()

TArray< TArray< TVector< int32, 2 > > > & Chaos::Softs::FNewtonEvolution::IncidentElements ( )
inline

◆ InitFEM()

void Chaos::Softs::FNewtonEvolution::InitFEM ( )

◆ ParticleGroupIds()

const TArray< uint32 > & Chaos::Softs::FNewtonEvolution::ParticleGroupIds ( ) const
inline

◆ Particles() [1/2]

FSolverParticles & Chaos::Softs::FNewtonEvolution::Particles ( )
inline

◆ Particles() [2/2]

const FSolverParticles & Chaos::Softs::FNewtonEvolution::Particles ( ) const
inline

◆ ParticlesActiveView()

const TPBDActiveView< FSolverParticles > & Chaos::Softs::FNewtonEvolution::ParticlesActiveView ( )
inline

◆ PostCollisionConstraintRules() [1/2]

TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::PostCollisionConstraintRules ( )
inline

◆ PostCollisionConstraintRules() [2/2]

const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & Chaos::Softs::FNewtonEvolution::PostCollisionConstraintRules ( ) const
inline

◆ ResetCollisionParticles()

void Chaos::Softs::FNewtonEvolution::ResetCollisionParticles ( int32  NumParticles = 0)

◆ ResetConstraintRules()

void Chaos::Softs::FNewtonEvolution::ResetConstraintRules ( )
inline

◆ ResetParticles()

void Chaos::Softs::FNewtonEvolution::ResetParticles ( )

◆ SetCoefficientOfFriction()

void Chaos::Softs::FNewtonEvolution::SetCoefficientOfFriction ( const FSolverReal  CoefficientOfFriction,
const uint32  GroupId = 0 
)
inline

◆ SetCollisionKinematicUpdateFunction()

void Chaos::Softs::FNewtonEvolution::SetCollisionKinematicUpdateFunction ( TFunction< void(FSolverCollisionParticles &, const FSolverReal, const FSolverReal, const int32)>  KinematicUpdate)
inline

◆ SetCollisionThickness()

void Chaos::Softs::FNewtonEvolution::SetCollisionThickness ( const FSolverReal  CollisionThickness,
const uint32  GroupId = 0 
)
inline

◆ SetDamping()

void Chaos::Softs::FNewtonEvolution::SetDamping ( const FSolverReal  Damping,
const uint32  GroupId = 0 
)
inline

◆ SetGravity()

void Chaos::Softs::FNewtonEvolution::SetGravity ( const FSolverVec3 Acceleration,
const uint32  GroupId = 0 
)
inline

◆ SetKinematicUpdateFunction()

void Chaos::Softs::FNewtonEvolution::SetKinematicUpdateFunction ( TFunction< void(FSolverParticles &, const FSolverReal, const FSolverReal, const int32)>  KinematicUpdate)
inline

◆ SetLocalDamping()

void Chaos::Softs::FNewtonEvolution::SetLocalDamping ( const FSolverReal  LocalDamping,
const uint32  GroupId = 0 
)
inline

◆ SetNewtonIterations()

void Chaos::Softs::FNewtonEvolution::SetNewtonIterations ( const int32  Iterations)
inline

◆ SetUseCCD()

void Chaos::Softs::FNewtonEvolution::SetUseCCD ( const bool  bUseCCD,
const uint32  GroupId = 0 
)
inline

◆ WriteOutputLog()

void Chaos::Softs::FNewtonEvolution::WriteOutputLog ( const int32  Frame)

The documentation for this class was generated from the following files: