Thanks to visit codestin.com
Credit goes to mps-basic.github.io

MPS-Basic
Loading...
Searching...
No Matches
mps.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "bucket.hpp"
4#include "common.hpp"
5#include "domain.hpp"
6#include "input.hpp"
8#include "particles.hpp"
10#include "refvalues.hpp"
11#include "settings.hpp"
13
14#include <Eigen/Dense>
15#include <Eigen/Sparse>
16#include <memory>
17#include <vector>
18
25class MPS {
26public:
28 Eigen::Vector3d gravity;
34
35 std::unique_ptr<PressureCalculator::Interface> pressureCalculator;
36
37 double courant{};
38
39 MPS() = default;
40
41 MPS(const Input& input,
42 Eigen::Vector3d& gravity,
43 std::unique_ptr<PressureCalculator::Interface>&& pressureCalculator,
44 std::unique_ptr<SurfaceDetector::Interface>&& surfaceDetector);
45
46 void stepForward();
47
48private:
50 std::unique_ptr<SurfaceDetector::Interface> surfaceDetector;
51
55 void calGravity();
56
66 void calViscosity(const double& re);
67
76 void moveParticle();
77
81 void collision();
82
87 void calNumberDensity(const double& re);
88
93
94 bool isFreeSurface(const Particle& pi);
95
110
115 void setMinimumPressure(const double& re);
116
127 void calPressureGradient(const double& re);
128
138
142 void calCourant();
143};
represents the domain of the simulation
Definition domain.hpp:8
MPS simulation class.
Definition mps.hpp:25
bool isParticleDistributionBiased(const Particle &pi)
check if particle distribution is biased.
void setMinimumPressure(const double &re)
set minimum pressure for pressure gradient calculation
Definition mps.cpp:178
void stepForward()
Definition mps.cpp:34
void calViscosity(const double &re)
calculate viscosity term of Navier-Stokes equation
Definition mps.cpp:76
std::unique_ptr< PressureCalculator::Interface > pressureCalculator
Interface for pressure calculation.
Definition mps.hpp:35
void moveParticleUsingPressureGradient()
move particles in correction step
Definition mps.cpp:230
Settings settings
Settings for the simulation.
Definition mps.hpp:27
bool isFreeSurface(const Particle &pi)
double courant
Maximum courant number among all particles.
Definition mps.hpp:37
void calPressureGradient(const double &re)
calculate pressure gradient term
Definition mps.cpp:203
MPS()=default
RefValues refValuesForLaplacian
Reference values for the simulation ( , )
Definition mps.hpp:30
void moveParticle()
move particles in prediction step
Definition mps.cpp:102
void setBoundaryCondition()
set boundary condition of pressure Poisson equation
Definition mps.cpp:162
RefValues refValuesForNumberDensity
Reference values for the simulation ( , )
Definition mps.hpp:29
void calCourant()
calculate Courant number
Definition mps.cpp:242
void collision()
calculate collision between particles when they are too close
Definition mps.cpp:113
Eigen::Vector3d gravity
Gravity vector for the simulation.
Definition mps.hpp:28
NeighborSearcher neighborSearcher
Neighbor searcher for neighbor search.
Definition mps.hpp:49
std::unique_ptr< SurfaceDetector::Interface > surfaceDetector
Interface for free surface detection.
Definition mps.hpp:50
void calNumberDensity(const double &re)
calculate number density of each particle
Definition mps.cpp:149
RefValues refValuesForGradient
Reference values for the simulation ( , )
Definition mps.hpp:31
void calGravity()
calculate gravity term
Definition mps.cpp:65
Particles particles
Particles in the simulation.
Definition mps.hpp:32
Domain domain
Domain of the simulation.
Definition mps.hpp:33
Class for particle in MPS method.
Definition particle.hpp:47
A collection of particles.
Definition particles.hpp:10
Struct for reference values of MPS method.
Definition refvalues.hpp:8
Represents the input data for MPS simulation.
Definition input.hpp:12
Struct for settings of calculation.
Definition settings.hpp:15