UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PerCellBoundaryConditions.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4// HEADER_UNIT_SKIP - Not included directly
5
7#include "Chaos/Transform.h"
8
9namespace Chaos
10{
11template<class T, int d>
13{
14 public:
16 : MParticles(CollisionParticles), MSources(SourceParticles) {}
18
20 {
22 for (uint32 i = 0; i < MParticles.Size(); ++i)
23 {
24 const TVector<T, d>& X = Grid.Location(Index);
25 TRigidTransform<T, d> Frame(MParticles.GetX(i), MParticles.GetR(i));
26 if (MParticles.GetGeometry(i)->SignedDistance(Frame.InverseTransformPosition(X)) < 0)
27 {
29 Velocity(Index) = MParticles.GetV(i)[Index.First];
30 break;
31 }
32 }
33 for (uint32 i = 0; i < MSources.Size(); ++i)
34 {
35 const TVector<T, d>& X = Grid.Location(Index);
36 TRigidTransform<T, d> Frame(MSources.GetX(i), MSources.GetR(i));
37 if (MSources.GetGeometry(i)->SignedDistance(Frame.InverseTransformPosition(X)) < 0)
38 {
40 Velocity(Index) = MSources.GetV(i)[Index.First];
41 break;
42 }
43 }
44 }
45
47 {
49 // This is not a real boundary condition; just a convinient place to set density from sources
50 for (uint32 i = 0; i < MSources.Size(); ++i)
51 {
52 const TVector<T, d>& X = Grid.Location(Index);
53 TRigidTransform<T, d> Frame(MSources.GetX(i), MSources.GetR(i));
54 if (MSources.GetGeometry(i)->SignedDistance(Frame.InverseTransformPosition(X)) < 0)
55 {
56 Density(Index) = 1.f;
57 break;
58 }
59 }
60 }
61
62 private:
63 const TKinematicGeometryParticles<T, d>& MParticles;
65};
66}
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
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayFaceND.h:14
Definition ArrayND.h:194
Definition KinematicGeometryParticles.h:13
Definition PerCellBoundaryConditions.h:13
void ApplyNeumann(const TUniformGrid< T, d > &Grid, TArrayFaceND< bool, d > &BoundaryConditions, TArrayFaceND< T, d > &Velocity, const T Dt, const Pair< int32, TVector< int32, d > > &Index)
Definition PerCellBoundaryConditions.h:19
TPerCellBoundaryConditions(const TKinematicGeometryParticles< T, d > &CollisionParticles, const TKinematicGeometryParticles< T, d > &SourceParticles)
Definition PerCellBoundaryConditions.h:15
~TPerCellBoundaryConditions()
Definition PerCellBoundaryConditions.h:17
void ApplyDirichlet(const TUniformGrid< T, d > &Grid, TArrayND< bool, d > &BoundaryConditions, TArrayND< T, d > &Density, const T Dt, const TVector< int32, d > &Index)
Definition PerCellBoundaryConditions.h:46
Definition Transform.h:115
Definition UniformGrid.h:267
Definition Vector.h:41
Definition SkeletalMeshComponent.h:307
@ X
Definition SimulationModuleBase.h:152
@ Velocity
Definition SimulationModuleBase.h:147
U16 Index
Definition radfft.cpp:71
Definition Pair.h:8