UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SmokeEvolution.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/ArrayFaceND.h"
5#include "Chaos/ArrayND.h"
7#include "Chaos/UniformGrid.h"
8
9#include <cmath>
10
11namespace Chaos
12{
13template<class T, int d>
15{
16 public:
18 : MGrid(Grid), MVelocity(MGrid), MDensity(MGrid), MDirichlet(MGrid), MNeumann(MGrid), MCollisionParticles(MoveTemp(GeometryParticles)), MSourceParticles(MoveTemp(SourceParticles))
19 {
20 MVelocity.Fill(0);
21 MDensity.Fill(0);
22 }
24
25 void AdvanceOneTimeStep(const T Dt);
26
27 inline void AddForceFunction(TFunction<void(const TUniformGrid<T, d>&, TArrayFaceND<T, d>&, const T, const Pair<int32, TVector<int32, d>>)> ForceFunction) { MForceRules.Add(ForceFunction); }
31
32 inline const TUniformGrid<T, d>& Grid() const { return MGrid; }
33 inline const TArrayFaceND<T, d>& Velocity() const { return MVelocity; }
34 inline const TArrayND<T, d>& Density() const { return MDensity; }
35 inline TArrayND<T, d>& Density() { return MDensity; }
36
38 {
39 T Divergence = 0;
40 for (int32 i = 0; i < MGrid.GetNumCells(); ++i)
41 {
42 T LocalDivergence = 0;
43 for (int32 j = 0; j < d; ++j)
44 {
45 const TVector<int32, d> index = MGrid.GetIndex(i);
46 LocalDivergence += (MVelocity(MakePair(j, MGrid.ClampIndex(index + TVector<int32, d>::AxisVector(j)))) - MVelocity(MakePair(j, index))) / MGrid.Dx()[j];
47 }
49 }
50 return Divergence / (T)MGrid.Counts().Product();
51 }
52
53 private:
55 TArrayFaceND<T, d> MVelocity;
56 TArrayND<T, d> MDensity;
57 TArrayND<bool, d> MDirichlet;
58 TArrayFaceND<bool, d> MNeumann;
59 TKinematicGeometryParticles<T, d> MCollisionParticles, MSourceParticles;
60
61 TArray<TFunction<void(const TUniformGrid<T, d>&, TArrayFaceND<T, d>&, const T, const Pair<int32, TVector<int32, d>>)>> MForceRules;
62 TFunction<void(const TUniformGrid<T, d>&, TArrayND<T, d>&, const TArrayND<T, d>&, const TArrayFaceND<T, d>&, const T, const TVector<int32, d>)> MAdvectionRule;
63 TFunction<void(const TUniformGrid<T, d>&, TArrayND<T, d>&, const TArrayND<T, d>&, const TArrayFaceND<T, d>&, const T, const TVector<int32, d>)> MConvectionRule;
64 TFunction<void(const TUniformGrid<T, d>&, TArrayFaceND<T, d>&, const TArrayND<bool, d>&, const TArrayFaceND<bool, d>&, const T)> MProjectionRule;
65};
66}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ArrayFaceND.h:14
Definition ArrayND.h:194
Definition KinematicGeometryParticles.h:13
Definition SmokeEvolution.h:15
TArrayND< T, d > & Density()
Definition SmokeEvolution.h:35
~TSmokeEvolution()
Definition SmokeEvolution.h:23
void AddForceFunction(TFunction< void(const TUniformGrid< T, d > &, TArrayFaceND< T, d > &, const T, const Pair< int32, TVector< int32, d > >)> ForceFunction)
Definition SmokeEvolution.h:27
const TArrayND< T, d > & Density() const
Definition SmokeEvolution.h:34
TSmokeEvolution(const TUniformGrid< T, d > &Grid, TKinematicGeometryParticles< T, d > &&GeometryParticles, TKinematicGeometryParticles< T, d > &&SourceParticles)
Definition SmokeEvolution.h:17
void SetAdvectionFunction(TFunction< void(const TUniformGrid< T, d > &, TArrayND< T, d > &, const TArrayND< T, d > &, const TArrayFaceND< T, d > &, const T, const TVector< int32, d >)> AdvectionFunction)
Definition SmokeEvolution.h:28
void SetConvectionFunction(TFunction< void(const TUniformGrid< T, d > &, TArrayND< T, d > &, const TArrayND< T, d > &, const TArrayFaceND< T, d > &, const T, const TVector< int32, d >)> ConvectionFunction)
Definition SmokeEvolution.h:29
const TUniformGrid< T, d > & Grid() const
Definition SmokeEvolution.h:32
void SetProjectionFunction(TFunction< void(const TUniformGrid< T, d > &, TArrayFaceND< T, d > &, const TArrayND< bool, d > &, const TArrayFaceND< bool, d > &, const T)> ProjectionFunction)
Definition SmokeEvolution.h:30
void AdvanceOneTimeStep(const T Dt)
Definition SmokeEvolution.cpp:10
const T ComputeDivergence()
Definition SmokeEvolution.h:37
const TArrayFaceND< T, d > & Velocity() const
Definition SmokeEvolution.h:33
Definition UniformGrid.h:267
Definition Vector.h:41
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition SkeletalMeshComponent.h:307
Pair< T1, T2 > MakePair(const T1 &First, const T2 &Second)
Definition Pair.h:45
Definition Pair.h:8
static constexpr UE_FORCEINLINE_HINT T Abs(const T A)
Definition GenericPlatformMath.h:949