MPS-Basic
Loading...
Searching...
No Matches
implicit.cpp
Go to the documentation of this file.
1#include "implicit.hpp"
2
3#include "../refvalues.hpp"
4#include "../weight.hpp"
5
6#include <iostream>
7#include <queue>
8
10using std::cerr;
11using std::endl;
12
14 int dimension,
15 double particleDistance,
16 double reForNumberDensity,
17 double reForLaplacian,
18 double dt,
19 double compressibility,
20 double relaxationCoefficient,
21 std::unique_ptr<DirichletBoundaryConditionGenerator::Interface>&& dirichletBoundaryConditionGenerator
22) {
23 auto refValuesForNumberDensity =
24 RefValues(dimension, particleDistance, reForNumberDensity, WeightType::SemiImplicit);
25 auto refValuesForLaplacian = RefValues(dimension, particleDistance, reForLaplacian, WeightType::SemiImplicit);
28 dimension,
29 dt,
30 relaxationCoefficient,
31 compressibility,
32 refValuesForNumberDensity.n0,
33 refValuesForLaplacian.n0,
34 refValuesForLaplacian.lambda,
35 reForLaplacian,
36 reForNumberDensity
37 );
38}
39
40std::vector<double> Implicit::calc(Particles& particles) {
41 auto dirichletBoundaryCondition = dirichletBoundaryConditionGenerator->generate(particles);
42 this->pressurePoissonEquation.setup(particles, dirichletBoundaryCondition);
45
46 return this->pressure;
47}
48
51
53#pragma omp parallel for
54 for (auto& p : pressure) {
55 if (p < 0) {
56 p = 0;
57 }
58 }
59}
A collection of particles.
Definition particles.hpp:10
Class for implicit pressure calculation.
Definition implicit.hpp:21
void removeNegativePressure()
remove negative pressure for stability
Definition implicit.cpp:52
std::vector< double > pressure
Solution of pressure calculation.
Definition implicit.hpp:43
PressurePoissonEquation pressurePoissonEquation
Definition implicit.hpp:45
std::unique_ptr< DirichletBoundaryConditionGenerator::Interface > dirichletBoundaryConditionGenerator
Definition implicit.hpp:44
Implicit(int dimension, double particleDistance, double re_forGradient, double re_forLaplacian, double dt, double compressibility, double relaxationCoefficient, std::unique_ptr< DirichletBoundaryConditionGenerator::Interface > &&dirichletBoundaryConditionGenerator)
Definition implicit.cpp:13
std::vector< double > calc(Particles &particles) override
calculate pressure
Definition implicit.cpp:40
Class for setting up and solving pressure Poisson equation.
std::vector< double > solve()
Solve pressure Poisson equation.
void setup(const Particles &particles, const DirichletBoundaryCondition &dirichletBoundaryCondition)
Setup pressure Poisson equation.
Struct for reference values of MPS method.
Definition refvalues.hpp:9