15 template <
typename T,
typename ParticleType>
31 const T&
EMesh = (T)10.0,
38 LambdaArray.
Init((T)0., 3 * MeshConstraints.Num());
49 float CurrentTime =
Time;
54 AlphaActivation = (T)1. - (T)4. /
FinalTime * FMath::Abs(CurrentTime -
FinalTime / (T)2.);
57 virtual void ApplyInSerial(ParticleType& Particles,
const T Dt,
const int32 ElementIndex)
const override
61 for (
int i = 0; i < 4; i++)
63 Particles.P(MeshConstraints[ElementIndex][i]) +=
PolarDelta[i];
68 for (
int i = 0; i < 4; i++)
70 Particles.P(MeshConstraints[ElementIndex][i]) +=
DetDelta[i];
75 for (
int i = 0; i < 4; i++)
77 Particles.P(MeshConstraints[ElementIndex][i]) +=
FiberDelta[i];
96 for (
int32 i = 0; i < 4; i++)
98 for (
int32 j = 0; j < 3; j++)
111 TVec4<TVector<T, 3>> GetFiberDelta(
const ParticleType& Particles,
const T Dt,
const int32 ElementIndex,
const T Tol = 1e-3)
const
124 for (
int32 alpha = 0; alpha < 3; alpha++)
126 for (
int32 s = 0; s < 3; s++)
134 for (
int32 alpha = 0; alpha < 3; alpha++)
206 for (
int i = 0; i < 4; i++)
208 for (
int j = 0; j < 3; j++)
210 Denom +=
dC3[i][j] * Particles.InvM(MeshConstraints[ElementIndex][i]) *
dC3[i][j];
214 LambdaArray[2 * ElementIndex + 2] +=
DLambda;
216 for (
int i = 0; i < 4; i++)
218 for (
int j = 0; j < 3; j++)
220 Delta[i][j] = Particles.InvM(MeshConstraints[ElementIndex][i]) *
dC3[i][j] *
DLambda;
233 mutable T AlphaActivation;
234 TVector<T, 3> FiberDir;
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition XPBDCorotatedConstraints.h:20
TArray< T > LambdaArray
Definition XPBDCorotatedConstraints.h:637
TArray< TVector< int32, 4 > > MeshConstraints
Definition XPBDCorotatedConstraints.h:654
TArray< T > Measure
Definition XPBDCorotatedConstraints.h:655
TArray< T > DmInverse
Definition XPBDCorotatedConstraints.h:638
PMatrix< T, 3, 3 > F(const int e, const ParticleType &InParticles) const
Definition XPBDCorotatedConstraints.h:230
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
PMatrix< T, 3, 3 > ElementDmInv(const int e) const
Definition XPBDCorotatedConstraints.h:234
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
Definition XPBDCorotatedFiberConstraints.h:17
virtual ~FXPBDCorotatedFiberConstraints()
Definition XPBDCorotatedFiberConstraints.h:41
virtual void ApplyInSerial(ParticleType &Particles, const T Dt, const int32 ElementIndex) const override
Definition XPBDCorotatedFiberConstraints.h:57
void SetTime(const float Time) const
Definition XPBDCorotatedFiberConstraints.h:47
void SetActivation(const T AlphaIn)
Definition XPBDCorotatedFiberConstraints.h:45
TVec4< TVector< T, 3 > > GetFiberGradient(const T dFpdL, const T dFadL, const T C3, const TVec4< TVector< T, 3 > > &dLdX) const
Definition XPBDCorotatedFiberConstraints.h:83
FXPBDCorotatedFiberConstraints(const ParticleType &InParticles, const TArray< TVector< int32, 4 > > &InMesh, const bool bRecordMetricIn=true, const T &EMesh=(T) 10.0, const T &NuMesh=(T).3, const TVector< T, 3 > InFiberDir=TVector< T, 3 >((T) 1.,(T) 0.,(T) 0.), const T InSigmaMax=(T) 3e5)
Definition XPBDCorotatedFiberConstraints.h:27
TVector< T, 3 > GetFiberDir()
Definition XPBDCorotatedFiberConstraints.h:43
FORCEINLINE T Size() const
Definition Vector.h:1055
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
void PolarDecomposition(const PMatrix< T, 2, 2 > &A, GivensRotation< T > &R, PMatrix< T, 2, 2 > &S_Sym)
2x2 polar decomposition.
Definition ImplicitQRSVD.h:323