41 for (
int32 j = 0; j < 3; j++)
47template <
class T,
class TV>
50 const T Tmp[3]{
static_cast<T
>(
Value[0]),
static_cast<T
>(
Value[1]),
static_cast<T
>(
Value[2]) };
54template <
class T,
class TV>
57 for (
int j = 0; j < 3; j++)
68 for (
int32 i = 0; i < 3; i++)
74template <
class T,
class TV>
77 for (
int32 i = 0; i < 3; i++)
83template <
class T,
class TV>
86 for (
int i = 0; i < 3; i++)
95inline T
RowMaj3x3Determinant(
const T A0,
const T A1,
const T A2,
const T A3,
const T A4,
const T A5,
const T A6,
const T A7,
const T
A8)
97 return A0 * (A4 *
A8 - A5 * A7) - A1 * (A3 *
A8 - A5 * A6) + A2 * (A3 * A7 - A4 * A6);
109inline void RowMaj3x3Inverse(
const T
Det,
const T A0,
const T A1,
const T A2,
const T A3,
const T A4,
const T A5,
const T A6,
const T A7,
const T
A8, T*
Inv)
113 for (
int i = 0; i < 9; i++)
123 Inv[2] = (A1 * A5 - A2 * A4) /
Det;
126 Inv[5] = (A2 * A3 - A0 * A5) /
Det;
127 Inv[6] = (A3 * A7 - A4 * A6) /
Det;
128 Inv[7] = (A1 * A6 - A0 * A7) /
Det;
129 Inv[8] = (A0 * A4 - A1 * A3) /
Det;
135 RowMaj3x3Inverse(
Det,
A[0],
A[1],
A[2],
A[3],
A[4],
A[5],
A[6],
A[7],
A[8],
Inv);
149 for (
int32 i = 0; i < 3; i++)
151 for (
int32 j = 0; j < 3; j++)
158template <
class T,
class TV>
162 for (
int32 i = 0; i < 3; i++)
164 for (
int32 j = 0; j < 3; j++)
166 Result[i] +=
A[3 * i + j] * x[j];
172template <
class T,
class TV>
182 A[6] *
A[5] -
A[3] *
A[8],
A[0] *
A[8] -
A[6] *
A[2],
A[3] *
A[2] -
A[0] *
A[5],
183 A[3] *
A[7] -
A[6] *
A[4],
A[6] *
A[1] -
A[0] *
A[7],
A[0] *
A[4] -
A[3] *
A[1] };
195template <
class T,
class TV=FVector3f,
class TV_INT=FIntVector4,
int32 d=3>
227 for (
int32 i = 0; i < d*d; i++)
256template <
class T,
class TV,
class TV_INT = FIntVector4,
int d = 3>
316template <
class T,
class TV_INT=FIntVector4,
int d=3>
342 De_inverse[d * d * e + 0],
343 De_inverse[d * d * e + 1],
344 De_inverse[d * d * e + 2],
345 De_inverse[d * d * e + 3],
346 De_inverse[d * d * e + 4],
347 De_inverse[d * d * e + 5],
348 De_inverse[d * d * e + 6],
349 De_inverse[d * d * e + 7],
350 De_inverse[d * d * e + 8],
373 if (!IncidentElements[i].Num())
389template<
class T,
class TV_INT,
int d=3>
450 return T(.5) * result;
456template <
class T,
class TV,
class TV_INT,
int d=3>
536 De_inverse[d * d * e + 0],
537 De_inverse[d * d * e + 1],
538 De_inverse[d * d * e + 2],
539 De_inverse[d * d * e + 3],
540 De_inverse[d * d * e + 4],
541 De_inverse[d * d * e + 5],
542 De_inverse[d * d * e + 6],
543 De_inverse[d * d * e + 7],
544 De_inverse[d * d * e + 8],
552 for (
size_t ie = 0;
ie < d + 1;
ie++)
560 Directions[e] =
gradient * T(1) / Len;
562 else if (u[
Mesh[e][0]] > 0)
574template<
class TV,
class T,
bool NodalValues = false>
588 for (
int32 I = 1; I < Counts.
X - 1; ++I)
590 for (
int32 J = 1; J < Counts.
Y - 1; ++J)
592 for (
int32 K = 1; K < Counts.
Z - 1; ++K)
607template<
class TV,
class T,
bool NodalValues = false>
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T X
Definition Vector.h:1168
T Z
Definition Vector.h:1170
T Y
Definition Vector.h:1169
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
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 SkeletalMeshComponent.h:307
TV RowMaj3x3Multiply(const T *A, const TV &x)
Definition Poisson.h:159
void ComputeDeInverseAndElementMeasures(const TArray< TV_INT > &Mesh, const TArray< TV > &X, TArray< T > &De_inverse, TArray< T > &measure)
Definition Poisson.h:197
T LaplacianEnergy(const TArray< TV_INT > &Mesh, const TArray< T > &De_inverse, const TArray< T > &measure, const TArray< T > &u)
Definition Poisson.h:391
void RowMaj3x3SetRow(T *A, const int32 i, const T *Values)
Definition Poisson.h:39
void PoissonSolve(const TArray< int32 > &InConstrainedNodes, const TArray< T > &ConstrainedWeights, const TArray< TV_INT > &Mesh, const TArray< TV > &X, const int32 MaxItCG, const T CGTol, TArray< T > &Weights)
Definition Poisson.h:257
void RowMaj3x3Inverse(const T Det, const T A0, const T A1, const T A2, const T A3, const T A4, const T A5, const T A6, const T A7, const T A8, T *Inv)
Definition Poisson.h:109
int32 MinFlatIndex(const TArray< int32 > &ElemIdx, const TArray< int32 > &LocalIdx)
Definition Poisson.h:245
T RowMaj3x3Determinant(const T A0, const T A1, const T A2, const T A3, const T A4, const T A5, const T A6, const T A7, const T A8)
Definition Poisson.h:95
TV RowMaj3x3RobustSolveLinearSystem(const T *A, const TV &b)
Definition Poisson.h:173
@ X
Definition SimulationModuleBase.h:152
void RowMaj3x3GetCol(T *A, const int32 j, TV &Col)
Definition Poisson.h:84
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55
void RowMaj3x3SetCol(T *A, const int32 j, const T *Values)
Definition Poisson.h:66
void RowMaj3x3Transpose(const T *A, T *Transpose)
Definition Poisson.h:147
void ComputeFiberField(const TArray< TV_INT > &Mesh, const TArray< TV > &Vertices, const TArray< TArray< int32 > > &IncidentElements, const TArray< TArray< int32 > > &IncidentElementsLocalIndex, const TArray< int32 > &Origins, const TArray< int32 > &Insertions, TArray< TV > &Directions, TArray< T > &ScalarField, const int32 MaxIt=100, const T Tol=T(1e-7))
Definition Poisson.h:458
void LanczosCG(Func multiplyA, TArray< T > &x, const TArray< T > &b, const int max_it, const T res=1e-4, bool check_residual=false, int min_parallel_batch_size=1000)
Definition Krylov.h:14
const T & RowMaj3x3Get(const T *A, const int32 i, const int32 j)
Definition Poisson.h:25
void RowMaj3x3Set(T *A, const int32 i, const int32 j, const T Value)
Definition Poisson.h:19
void Laplacian(const TArray< TV_INT > &Mesh, const TArray< TArray< int32 > > &IncidentElements, const TArray< TArray< int32 > > &IncidentElementsLocalIndex, const TArray< T > &De_inverse, const TArray< T > &measure, const TArray< T > &u, TArray< T > &Lu)
Definition Poisson.h:318
void RowMaj3x3GetRow(T *A, const int32 i, TV &Row)
Definition Poisson.h:55
static constexpr UE_FORCEINLINE_HINT T Max3(const T A, const T B, const T C)
Definition UnrealMathUtility.h:551
Definition NumericLimits.h:41