18 template <
typename T,
typename ParticleType>
28 const T&
EMesh = (T)10.0,
39 for (
int e = 0; e <
InMesh.Num(); e++)
43 for (
int r = 0; r < 3; r++) {
44 for (
int c = 0; c < 3; c++) {
80 for (
int e = 0; e <
InMesh.Num(); e++)
82 for (
int32 j = 0; j < 4; j++)
88 for (
int e = 0; e <
InMesh.Num(); e++)
95 for (
int r = 0; r < 3; r++) {
96 for (
int c = 0; c < 3; c++) {
132 for (
int e = 0; e <
InMesh.Num(); e++)
134 for (
int32 j = 0; j < 4; j++)
146 for (
int e = 0; e <
InMesh.Num(); e++)
153 for (
int r = 0; r < 3; r++) {
154 for (
int c = 0; c < 3; c++) {
175 const T
GridN = (T).1,
176 const T&
EMesh = (T)10.0,
186 for (
int e = 0; e <
InMesh.Num(); e++)
190 for (
int r = 0; r < 3; r++) {
191 for (
int c = 0; c < 3; c++) {
210 for (
int i = 0; i < 3; i++) {
211 for (
int c = 0; c < 3; c++) {
221 for (
int i = 0; i < 3; i++) {
222 for (
int c = 0; c < 3; c++) {
236 for (
int r = 0; r < 3; r++) {
237 for (
int c = 0; c < 3; c++) {
246 for (
int r = 0; r < 3; r++) {
247 for (
int c = 0; c < 3; c++) {
256 for (T& Lambdas :
LambdaArray) { Lambdas = (T)0.; }
265 for (
int i = 0; i < 4; i++)
272 for (
int i = 0; i < 4; i++)
341 TVec4<TVector<T, 3>>
GetPolarGradient(
const PMatrix<T, 3, 3>&
Fe,
const PMatrix<T, 3, 3>& Re,
const PMatrix<T, 3, 3>&
DmInvT,
const T C1)
const
348 for (
int alpha = 0; alpha < 3; alpha++) {
349 for (
int l = 0; l < 3; l++) {
350 dC1[0][alpha] -=
A.GetAt(alpha, l);
353 for (
int ie = 0;
ie < 3;
ie++) {
354 for (
int alpha = 0; alpha < 3; alpha++) {
355 dC1[
ie + 1][alpha] =
A.GetAt(alpha,
ie);
361 for (
int i = 0; i < 4; i++)
363 for (
int j = 0; j < 3; j++)
384 JFinvT.SetAt(0, 0,
Fe.GetAt(1, 1) *
Fe.GetAt(2, 2) -
Fe.GetAt(2, 1) *
Fe.GetAt(1, 2));
385 JFinvT.SetAt(0, 1,
Fe.GetAt(2, 0) *
Fe.GetAt(1, 2) -
Fe.GetAt(1, 0) *
Fe.GetAt(2, 2));
386 JFinvT.SetAt(0, 2,
Fe.GetAt(1, 0) *
Fe.GetAt(2, 1) -
Fe.GetAt(2, 0) *
Fe.GetAt(1, 1));
387 JFinvT.SetAt(1, 0,
Fe.GetAt(2, 1) *
Fe.GetAt(0, 2) -
Fe.GetAt(0, 1) *
Fe.GetAt(2, 2));
388 JFinvT.SetAt(1, 1,
Fe.GetAt(0, 0) *
Fe.GetAt(2, 2) -
Fe.GetAt(2, 0) *
Fe.GetAt(0, 2));
389 JFinvT.SetAt(1, 2,
Fe.GetAt(2, 0) *
Fe.GetAt(0, 1) -
Fe.GetAt(0, 0) *
Fe.GetAt(2, 1));
390 JFinvT.SetAt(2, 0,
Fe.GetAt(0, 1) *
Fe.GetAt(1, 2) -
Fe.GetAt(1, 1) *
Fe.GetAt(0, 2));
391 JFinvT.SetAt(2, 1,
Fe.GetAt(1, 0) *
Fe.GetAt(0, 2) -
Fe.GetAt(0, 0) *
Fe.GetAt(1, 2));
392 JFinvT.SetAt(2, 2,
Fe.GetAt(0, 0) *
Fe.GetAt(1, 1) -
Fe.GetAt(1, 0) *
Fe.GetAt(0, 1));
396 for (
int ie = 0;
ie < 3;
ie++) {
397 for (
int alpha = 0; alpha < 3; alpha++) {
401 for (
int alpha = 0; alpha < 3; alpha++) {
402 for (
int l = 0; l < 3; l++) {
419 for (
int Row = 0; Row < 3; Row++)
421 for (
int Column = 0; Column < 3; Column++)
433 T InvSqrt = FMath::InvSqrt(InflationVolumeScale);
438 for (
int Row = 0; Row < 3; Row++)
440 for (
int Column = 0; Column < 3; Column++)
503 T J =
Fe.Determinant();
536 for (
int i = 0; i < 4; i++)
538 for (
int j = 0; j < 3; j++)
546 for (
int i = 0; i < 4; i++)
548 for (
int j = 0; j < 3; j++)
571 for (
int i = 0; i < 3; i++)
573 for (
int j = 0; j < 3; j++)
578 C1 = FMath::Sqrt(C1);
614 for (
int i = 0; i < 4; i++)
616 for (
int j = 0; j < 3; j++)
624 for (
int i = 0; i < 4; i++)
626 for (
int j = 0; j < 3; j++)
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
static TArray< TArray< int32 > > ComputeGraphColoring(const TArray< TVector< int32, N > > &Graph, const TDynamicParticles< T, 3 > &InParticles, const int32 GraphParticlesStart, const int32 GraphParticlesEnd)
Definition GraphColoring.h:24
Definition XPBDCorotatedConstraints.h:20
FXPBDCorotatedConstraints(const ParticleType &InParticles, const TArray< TVector< int32, 4 > > &InMesh, const TArray< T > &EMeshArray, const T &NuMesh=(T).3, const bool bRecordMetricIn=false)
Definition XPBDCorotatedConstraints.h:64
TArray< T > LambdaArray
Definition XPBDCorotatedConstraints.h:637
ParticleType RestParticles
Definition XPBDCorotatedConstraints.h:656
TArray< T > HErrorArray
Definition XPBDCorotatedConstraints.h:650
FXPBDCorotatedConstraints(const ParticleType &InParticles, const TArray< TVector< int32, 4 > > &InMesh, const T GridN=(T).1, const T &EMesh=(T) 10.0, const T &NuMesh=(T).3)
Definition XPBDCorotatedConstraints.h:172
void ApplyInSerial(ParticleType &Particles, const T Dt) const
Definition XPBDCorotatedConstraints.h:279
TArray< TVector< int32, 4 > > MeshConstraints
Definition XPBDCorotatedConstraints.h:654
TArray< T > Measure
Definition XPBDCorotatedConstraints.h:655
TArray< T > AlphaJArray
Definition XPBDCorotatedConstraints.h:648
void ModifyDmInverseSaveFromInflationVolumeScale(const int32 ElemIdx, const T InflationVolumeScale, const PMatrix< T, 3, 3 > &FiberDir)
Definition XPBDCorotatedConstraints.h:428
FXPBDCorotatedConstraints(const ParticleType &InParticles, const TArray< TVector< int32, 4 > > &InMesh, const TArray< T > &EMeshArray, const TArray< T > &NuMeshArray, TArray< T > &&AlphaJMeshArray, const FDeformableXPBDCorotatedParams &InParams, const T &NuMesh=(T).3, const bool bRecordMetricIn=false, const bool bDoColoring=true)
Definition XPBDCorotatedConstraints.h:112
void ApplyInParallel(ParticleType &Particles, const T Dt) const
Definition XPBDCorotatedConstraints.h:298
T Lambda
Definition XPBDCorotatedConstraints.h:645
FDeformableXPBDCorotatedParams CorotatedParams
Definition XPBDCorotatedConstraints.h:641
PMatrix< T, 3, 3 > DsInit(const int e, const ParticleType &InParticles) const
Definition XPBDCorotatedConstraints.h:208
T HError
Definition XPBDCorotatedConstraints.h:649
TArray< int32 > ConstraintsPerColorStartIndex
Definition XPBDCorotatedConstraints.h:657
void InitColor(const ParticleType &Particles)
Definition XPBDCorotatedConstraints.h:449
virtual void Init() const
Definition XPBDCorotatedConstraints.h:254
virtual void ApplyInSerial(ParticleType &Particles, const T Dt, const int32 ElementIndex) const
Definition XPBDCorotatedConstraints.h:259
TArray< T > DmInverse
Definition XPBDCorotatedConstraints.h:638
FXPBDCorotatedConstraints(const ParticleType &InParticles, const TArray< TVector< int32, 4 > > &InMesh, const bool bRecordMetricIn=true, const T &EMesh=(T) 10.0, const T &NuMesh=(T).3)
Definition XPBDCorotatedConstraints.h:24
PMatrix< T, 3, 3 > F(const int e, const ParticleType &InParticles) const
Definition XPBDCorotatedConstraints.h:230
TArray< T > MuElementArray
Definition XPBDCorotatedConstraints.h:646
TVec4< TVector< T, 3 > > GetDeterminantGradient(const PMatrix< T, 3, 3 > &Fe, const PMatrix< T, 3, 3 > &DmInvT) const
Definition XPBDCorotatedConstraints.h:373
virtual ~FXPBDCorotatedConstraints()
Definition XPBDCorotatedConstraints.h:206
virtual TVec4< TVector< T, 3 > > GetPolarDelta(const ParticleType &Particles, const T Dt, const int32 ElementIndex, const T Tol=(T) 1e-3) const
Definition XPBDCorotatedConstraints.h:558
TArray< T > DmInverseSave
Definition XPBDCorotatedConstraints.h:639
PMatrix< T, 3, 3 > ElementDmInv(const int e) const
Definition XPBDCorotatedConstraints.h:234
TVec4< TVector< T, 3 > > GetPolarGradient(const PMatrix< T, 3, 3 > &Fe, const PMatrix< T, 3, 3 > &Re, const PMatrix< T, 3, 3 > &DmInvT, const T C1) const
Definition XPBDCorotatedConstraints.h:341
TArray< T > LambdaElementArray
Definition XPBDCorotatedConstraints.h:647
PMatrix< T, 3, 3 > ElementDmInvSave(const int e) const
Definition XPBDCorotatedConstraints.h:244
TArray< T > GError
Definition XPBDCorotatedConstraints.h:658
bool VariableStiffness
Definition XPBDCorotatedConstraints.h:652
T Mu
Definition XPBDCorotatedConstraints.h:644
PMatrix< T, 3, 3 > Ds(const int e, const ParticleType &InParticles) const
Definition XPBDCorotatedConstraints.h:219
bool bRecordMetric
Definition XPBDCorotatedConstraints.h:651
void ModifyDmInverseFromMuscleLength(const int32 ElemIdx, const T FiberLengthRatio, const PMatrix< T, 3, 3 > &FiberDir, const T ContractionVolumeScale) const
Definition XPBDCorotatedConstraints.h:409
virtual TVec4< TVector< T, 3 > > GetDeterminantDelta(const ParticleType &Particles, const T Dt, const int32 ElementIndex, const T Tol=(T) 1e-3) const
Definition XPBDCorotatedConstraints.h:494
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55
void PolarDecomposition(const PMatrix< T, 2, 2 > &A, GivensRotation< T > &R, PMatrix< T, 2, 2 > &S_Sym)
2x2 polar decomposition.
Definition ImplicitQRSVD.h:323
U16 Index
Definition radfft.cpp:71
static constexpr UE_FORCEINLINE_HINT T Square(const T A)
Definition UnrealMathUtility.h:578