15template <
typename KelvinletModelType>
31 return Pos +
dt * ((1.0 / 6.0) * (k1 +
k3) + (2.0 / 3.0) * k2);
35template <
typename KelvinletModelType>
78 typedef TBaseKelvinlet < FPullKelvinlet>
MyBase;
106 const double D = FMath::Sqrt(D2);
107 const double D3 = D2 *
D;
121 const double D5 = D2 * D2 * FMath::Sqrt(D2);
124 double Div = (2. *
bhat - 1.) * F.
Dot(
NPos) * (3. + D2) / (2 * D5);
140 typedef TBaseKelvinlet < FLaplacianPullKelvinlet >
MyBase;
160 const double D2 = 1. + R2;
161 const double D = FMath::Sqrt(D2);
162 const double D3 = D2 *
D;
163 const double D7 =
D * D3 * D3;
168 double RadialTerm = (15. -
bhat * D2 * (10. + 4. * R2)) / (2. * D7);
184 const double D = FMath::Sqrt(D2);
185 const double D9 = D2 * D2 * D2 * D2 *
D;
202 typedef TBaseKelvinlet < FBiLaplacianPullKelvinlet >
MyBase;
223 const double D2 = 1. + R2;
224 const double D = FMath::Sqrt(D2);
225 const double D3 = D2 *
D;
226 const double D11 = D3 * D3 * D3 * D2;
247 const double D = FMath::Sqrt(D2);
248 const double D8 = D2 * D2 * D2 * D2;
249 const double D13 =
D8 * D2 * D2 *
D;
252 double Div = 945. * (2. *
bhat - 1.) *
F.
Dot(
NPos) * (11 - 6. * D2) / (2. *
D13);
270 typedef TBaseKelvinlet < FSharpLaplacianPullKelvinlet >
MyBase;
291 const double R = FMath::Sqrt(R2);
292 const double R4 = R2 * R2;
293 const double R5 =
R4 *
R;
294 const double D2 = 1. + R2;
295 const double D = FMath::Sqrt(D2);
296 const double D3 = D2 *
D;
297 const double D5 = D3 * D2;
299 const double D11 = D3 * D3 * D3 * D2;
332 typedef TBaseKelvinlet < FSharpBiLaplacianPullKelvinlet >
MyBase;
353 const double R = FMath::Sqrt(R2);
354 const double R4 = R2 * R2;
355 const double D2 = 1. + R2;
356 const double D = FMath::Sqrt(D2);
357 const double D3 = D2 *
D;
358 const double D5 = D3 * D2;
359 const double D9 = D5 * D2 * D2;
360 const double D10 = D5 * D5;
361 const double D11 = D3 * D3 * D3 * D2;
370 const double RadialTerm = (9. /
D10) * (-512. *
R *
D10 + (((((512. * R2 + 2304.) * R2 + 4032.) * R2 + 3360.) * R2 + 1260.) * R2 + 105.) *
D + 2. *
bhat * (128 *
R *
D10 - D3 * (35. + R2 * (280. + R2 * (560. + R2 * (448. + 128 * R2))))));
375 const double NonIsoTerm = 18. * (
bhat / (
R *
D9)) * (128. *
D9 -
R * (R2 * (R2 * (R2 * (128. * R2 + 576.) + 1008.) + 840.) + 315.)) *
F.
Dot(
NPos);
402 typedef TBaseKelvinlet < FAffineKelvinlet>
MyBase;
423 const double D2 = 1. + R2;
424 const double D = FMath::Sqrt(D2);
425 const double D3 = D2 *
D;
426 const double D5 = D3 * D2;
457 typedef TBaseKelvinlet < FTwistKelvinlet>
MyBase;
461 F(CrossProductMatrix(Twist))
479 const double D2 = 1. + R2;
480 const double D = FMath::Sqrt(D2);
481 const double D3 = D2 *
D;
482 const double D5 = D3 * D2;
496 return Term1 * (2. / 5.);
515 typedef TBaseKelvinlet <FPinchKelvinlet>
MyBase;
535 const double D2 = 1. + R2;
536 const double D = FMath::Sqrt(D2);
537 const double D3 = D2 *
D;
538 const double D5 = D3 * D2;
558 double Trace =
Mat.Trace();
570 c = 1. / (4. *
bhat - 5.);
582 typedef TBaseKelvinlet < FScaleKelvinlet>
MyBase;
601 const double D2 = 1. + R2;
602 const double D = FMath::Sqrt(D2);
603 const double D3 = D2 *
D;
604 const double D5 = D3 * D2;
613 return S *
E * (2. / 15.) * (1.0 / D3 + 1.5 / D5) *
NPos;
621 const double D = FMath::Sqrt(D2);
623 return S *
E / (D2 * D2 * D2 *
D);
633template <
typename BrushTypeA,
typename BrushTypeB>
#define checkSlow(expr)
Definition AssertionMacros.h:332
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define PI
Definition UnrealMathUtility.h:65
uint32 Size
Definition VulkanMemory.cpp:4034
Definition Kelvinlets.h:400
FAffineKelvinlet(const FMatrix3d &ForceMatrix, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:404
double E2
Definition Kelvinlets.h:450
FMatrix3d F
Definition Kelvinlets.h:445
void UpdateForce(const FMatrix3d &NF)
Definition Kelvinlets.h:412
TBaseKelvinlet< FAffineKelvinlet > MyBase
Definition Kelvinlets.h:402
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:418
FMatrix3d SymF
Definition Kelvinlets.h:448
Definition Kelvinlets.h:200
FVector3d F
Definition Kelvinlets.h:256
TBaseKelvinlet< FBiLaplacianPullKelvinlet > MyBase
Definition Kelvinlets.h:202
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:242
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:217
FBiLaplacianPullKelvinlet(const FVector3d &Force, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:204
Definition Kelvinlets.h:138
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:154
FVector3d F
Definition Kelvinlets.h:192
TBaseKelvinlet< FLaplacianPullKelvinlet > MyBase
Definition Kelvinlets.h:140
FLaplacianPullKelvinlet(const FVector3d &Force, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:143
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:179
Definition Kelvinlets.h:513
TBaseKelvinlet< FPinchKelvinlet > MyBase
Definition Kelvinlets.h:515
FPinchKelvinlet(const FMatrix3d &ForceMatrix, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:517
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:527
Definition Kelvinlets.h:76
FPullKelvinlet(const FVector3d &Force, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:82
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:99
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:116
TBaseKelvinlet< FPullKelvinlet > MyBase
Definition Kelvinlets.h:78
Definition Kelvinlets.h:580
TBaseKelvinlet< FScaleKelvinlet > MyBase
Definition Kelvinlets.h:582
FScaleKelvinlet(const double Scale, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:584
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:617
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:593
double S
Definition Kelvinlets.h:628
Definition Kelvinlets.h:330
FVector3d F
Definition Kelvinlets.h:388
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:347
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:383
TBaseKelvinlet< FSharpBiLaplacianPullKelvinlet > MyBase
Definition Kelvinlets.h:332
FSharpBiLaplacianPullKelvinlet(const FVector3d &Force, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:334
Definition Kelvinlets.h:268
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:285
FSharpLaplacianPullKelvinlet(const FVector3d &Force, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:272
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:316
TBaseKelvinlet< FSharpLaplacianPullKelvinlet > MyBase
Definition Kelvinlets.h:270
FVector3d F
Definition Kelvinlets.h:321
Definition Kelvinlets.h:455
TBaseKelvinlet< FTwistKelvinlet > MyBase
Definition Kelvinlets.h:457
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:473
FMatrix3d F
Definition Kelvinlets.h:508
FTwistKelvinlet(const FVector3d &Twist, const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:459
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:500
FTwistKelvinlet(const FTwistKelvinlet &Other)
Definition Kelvinlets.h:465
Definition Kelvinlets.h:37
void UpdateRegularization(const double R)
Definition Kelvinlets.h:58
TBaseKelvinlet(const double Size, const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:40
double E
Definition Kelvinlets.h:66
void SetMaterialParameters(const double ShearModulus, const double PoissonRatio)
Definition Kelvinlets.h:50
double a
Definition Kelvinlets.h:68
double bhat
Definition Kelvinlets.h:70
Definition Kelvinlets.h:635
BrushTypeA ABrush
Definition Kelvinlets.h:655
BrushTypeB BBrush
Definition Kelvinlets.h:656
FVector3d Evaluate(const FVector3d &Pos) const
Definition Kelvinlets.h:644
double Divergence(const FVector3d &Pos) const
Definition Kelvinlets.h:649
double Alpha
Definition Kelvinlets.h:657
TBlendPairedKelvinlet(const BrushTypeA &BrushA, const BrushTypeB &BrushB, double StrengthA)
Definition Kelvinlets.h:637
Definition Kelvinlets.h:17
FVector3d IntegrateRK3(const FVector3d &Pos, double dt) const
Definition Kelvinlets.h:23
FVector3d Evaluate(const FVector3d &Pos) const
TBlendPairedKelvinlet< FBiLaplacianPullKelvinlet, FLaplacianPullKelvinlet > FBlendPullKelvinlet
Definition Kelvinlets.h:662
TMatrix3< double > FMatrix3d
Definition MatrixTypes.h:510
TBlendPairedKelvinlet< FTwistKelvinlet, FLaplacianPullKelvinlet > FLaplacianTwistPullKelvinlet
Definition Kelvinlets.h:660
TBlendPairedKelvinlet< FSharpBiLaplacianPullKelvinlet, FSharpLaplacianPullKelvinlet > FBlendPullSharpKelvinlet
Definition Kelvinlets.h:663
TBlendPairedKelvinlet< FTwistKelvinlet, FBiLaplacianPullKelvinlet > FBiLaplacianTwistPullKelvinlet
Definition Kelvinlets.h:661
Definition AdvancedWidgetsModule.cpp:13
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
RealType Trace() const
Definition MatrixTypes.h:172
static TMatrix3< double > Identity()
Definition MatrixTypes.h:86
TMatrix3< RealType > Transpose() const
Definition MatrixTypes.h:207
T SquaredLength() const
Definition Vector.h:1734
UE_FORCEINLINE_HINT T Dot(const TVector< T > &V) const
Definition Vector.h:1553