numerics
Loading...
Searching...
No Matches
fluid3d.hpp
Go to the documentation of this file.
1
/// @file fluid3d.hpp
2
/// @brief 3D WCSPH fluid solver -- public interface and dispatch hub
3
///
4
/// FluidSolver3D is a data container + dispatch hub, mirroring fluid.hpp.
5
/// All physics computation lives in backends/{seq,omp}/.
6
///
7
/// @par Execution policies (params.policy)
8
/// Backend::seq -- Newton pair traversal via iterate_pairs(), O(n*k/2)
9
/// Backend::omp -- parallel for over particles, per-particle query, O(n*k)
10
#pragma once
11
12
#include "
particle3d.hpp
"
13
#include "
rigid_body3d.hpp
"
14
#include "
spatial_hash3d.hpp
"
15
#include "
heat3d.hpp
"
16
#include "
core/policy.hpp
"
17
#include <vector>
18
19
namespace
physics
{
20
21
struct
FluidParams3D
{
22
float
h
= 0.05f;
///< Smoothing length [m]
23
float
rho0
= 1000.0f;
///< Rest density [kg/m^3]
24
int
gamma
= 7;
///< Tait EOS exponent
25
float
c0
= 10.0f;
///< Speed of sound [m/s]
26
float
mu
= 10.0f;
///< Dynamic viscosity [Pa*s]
27
float
mass
= 0.064f;
///< Particle mass [kg] (~= rho_0*(0.8h)^3)
28
29
float
gx
= 0.0f,
gy
= -9.81f,
gz
= 0.0f;
30
float
dt
= 0.001f;
31
32
float
xmin
= 0.0f,
xmax
= 0.8f;
33
float
ymin
= 0.0f,
ymax
= 0.8f;
34
float
zmin
= 0.0f,
zmax
= 0.8f;
35
float
restitution
= 0.01f;
36
37
float
alpha_T
= 0.005f;
///< Thermal diffusivity [m^2/s]
38
float
h_conv
= 8.0f;
///< Convective coefficient with rigid bodies [1/s]
39
40
num::Backend
policy
=
num::Backend::seq
;
///< seq = Newton pairs; omp = parallel
41
};
42
43
class
FluidSolver3D
{
44
public
:
45
explicit
FluidSolver3D
(
const
FluidParams3D
& p);
46
47
void
add_particle
(
float
x,
float
y,
float
z,
48
float
vx,
float
vy,
float
vz,
float
T);
49
void
add_body
(
const
RigidBody3D
& b);
50
void
clear
();
51
52
/// Advance by one timestep. Dispatches to seq or omp backends.
53
void
step
();
54
55
const
std::vector<Particle3D>&
particles
()
const
{
return
particles_; }
56
const
std::vector<RigidBody3D>&
bodies
()
const
{
return
bodies_; }
57
std::vector<RigidBody3D>&
bodies
() {
return
bodies_; }
58
const
FluidParams3D
&
params
()
const
{
return
params_; }
59
FluidParams3D
&
params_mut
() {
return
params_; }
60
float
min_temp
()
const
{
return
T_min_; }
61
float
max_temp
()
const
{
return
T_max_; }
62
63
private
:
64
FluidParams3D
params_;
65
std::vector<Particle3D> particles_;
66
std::vector<RigidBody3D> bodies_;
67
SpatialHash3D
grid_;
68
float
T_min_ = 0.0f, T_max_ = 100.0f;
69
};
70
71
}
// namespace physics
physics::FluidSolver3D
Definition
fluid3d.hpp:43
physics::FluidSolver3D::min_temp
float min_temp() const
Definition
fluid3d.hpp:60
physics::FluidSolver3D::step
void step()
Advance by one timestep. Dispatches to seq or omp backends.
Definition
fluid3d.cpp:47
physics::FluidSolver3D::clear
void clear()
Definition
fluid3d.cpp:43
physics::FluidSolver3D::add_body
void add_body(const RigidBody3D &b)
Definition
fluid3d.cpp:42
physics::FluidSolver3D::params_mut
FluidParams3D & params_mut()
Definition
fluid3d.hpp:59
physics::FluidSolver3D::particles
const std::vector< Particle3D > & particles() const
Definition
fluid3d.hpp:55
physics::FluidSolver3D::max_temp
float max_temp() const
Definition
fluid3d.hpp:61
physics::FluidSolver3D::params
const FluidParams3D & params() const
Definition
fluid3d.hpp:58
physics::FluidSolver3D::bodies
std::vector< RigidBody3D > & bodies()
Definition
fluid3d.hpp:57
physics::FluidSolver3D::bodies
const std::vector< RigidBody3D > & bodies() const
Definition
fluid3d.hpp:56
physics::FluidSolver3D::add_particle
void add_particle(float x, float y, float z, float vx, float vy, float vz, float T)
Definition
fluid3d.cpp:29
physics::SpatialHash3D
Definition
spatial_hash3d.hpp:15
heat3d.hpp
Heat transfer parameters for the 3D SPH backends.
num::Backend
Backend
Selects which backend handles a linalg operation.
Definition
policy.hpp:19
num::Backend::seq
@ seq
Naive textbook loops – always available.
physics
Definition
field.cpp:7
particle3d.hpp
policy.hpp
Backend enum for linear algebra operations.
rigid_body3d.hpp
spatial_hash3d.hpp
3D SPH neighbour search – powered by num::CellList3D
physics::FluidParams3D
Definition
fluid3d.hpp:21
physics::FluidParams3D::restitution
float restitution
Definition
fluid3d.hpp:35
physics::FluidParams3D::mu
float mu
Dynamic viscosity [Pa*s].
Definition
fluid3d.hpp:26
physics::FluidParams3D::c0
float c0
Speed of sound [m/s].
Definition
fluid3d.hpp:25
physics::FluidParams3D::alpha_T
float alpha_T
Thermal diffusivity [m^2/s].
Definition
fluid3d.hpp:37
physics::FluidParams3D::zmax
float zmax
Definition
fluid3d.hpp:34
physics::FluidParams3D::h
float h
Smoothing length [m].
Definition
fluid3d.hpp:22
physics::FluidParams3D::h_conv
float h_conv
Convective coefficient with rigid bodies [1/s].
Definition
fluid3d.hpp:38
physics::FluidParams3D::gamma
int gamma
Tait EOS exponent.
Definition
fluid3d.hpp:24
physics::FluidParams3D::dt
float dt
Definition
fluid3d.hpp:30
physics::FluidParams3D::gx
float gx
Definition
fluid3d.hpp:29
physics::FluidParams3D::policy
num::Backend policy
seq = Newton pairs; omp = parallel
Definition
fluid3d.hpp:40
physics::FluidParams3D::mass
float mass
Particle mass [kg] (~= rho_0*(0.8h)^3)
Definition
fluid3d.hpp:27
physics::FluidParams3D::zmin
float zmin
Definition
fluid3d.hpp:34
physics::FluidParams3D::gy
float gy
Definition
fluid3d.hpp:29
physics::FluidParams3D::gz
float gz
Definition
fluid3d.hpp:29
physics::FluidParams3D::xmax
float xmax
Definition
fluid3d.hpp:32
physics::FluidParams3D::ymax
float ymax
Definition
fluid3d.hpp:33
physics::FluidParams3D::xmin
float xmin
Definition
fluid3d.hpp:32
physics::FluidParams3D::ymin
float ymin
Definition
fluid3d.hpp:33
physics::FluidParams3D::rho0
float rho0
Rest density [kg/m^3].
Definition
fluid3d.hpp:23
physics::RigidBody3D
3D rigid spherical body that interacts with SPH particles
Definition
rigid_body3d.hpp:8
apps
fluid_sim_3d
fluid3d.hpp
Generated by
1.9.8