Skip to content
Snippets Groups Projects
Commit 553f20a7 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add implicit acoustic solver for second order in time

parent 9a047296
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,7 @@
#include <scheme/HyperelasticSolver.hpp>
#include <scheme/IBoundaryConditionDescriptor.hpp>
#include <scheme/IDiscreteFunctionDescriptor.hpp>
#include <scheme/ImplicitAcousticO2Solver.hpp>
#include <scheme/ImplicitAcousticSolver.hpp>
#include <scheme/ImplicitExactTrafficSolver.hpp>
#include <scheme/ImplicitIterativeTrafficSolver.hpp>
......@@ -584,6 +585,40 @@ SchemeModule::SchemeModule()
));
this->_addBuiltinFunction(
"implicit_2_states_euler_o2",
std::function(
[](const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& u,
const std::shared_ptr<const DiscreteFunctionVariant>& E,
const std::shared_ptr<const DiscreteFunctionVariant>& c,
const std::shared_ptr<const DiscreteFunctionVariant>& p,
const std::shared_ptr<const DiscreteFunctionVariant>& pi,
const std::shared_ptr<const DiscreteFunctionVariant>& gamma,
const std::shared_ptr<const DiscreteFunctionVariant>& Cv,
const std::shared_ptr<const DiscreteFunctionVariant>& entropy,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt)
-> std::tuple<std::shared_ptr<const MeshVariant>, std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> {
return ImplicitAcousticO2SolverHandler{ImplicitAcousticO2SolverHandler::SolverType::Glace2States,
rho,
c,
u,
p,
pi,
gamma,
Cv,
entropy,
bc_descriptor_list,
std::vector<std::shared_ptr<const IZoneDescriptor>>{},
dt}
.solver()
.apply(dt, rho, u, E, c, p, pi, gamma, Cv, entropy);
}
));
this
->_addBuiltinFunction("implicit_eucclhyd_euler",
std::function(
......
......@@ -10,6 +10,7 @@ add_library(
DiscreteFunctionVectorIntegrator.cpp
DiscreteFunctionVectorInterpoler.cpp
ImplicitAcousticSolver.cpp
ImplicitAcousticO2Solver.cpp
LinearImplicitAcousticSolver.cpp
RelaxedImplicitAcousticSolver.cpp
UpwindExplicitTrafficSolver.cpp
......
This diff is collapsed.
#ifndef IMPLICIT_ACOUSTIC_O2_SOLVER_HPP
#define IMPLICIT_ACOUSTIC_O2_SOLVER_HPP
#include <mesh/MeshTraits.hpp>
#include <memory>
#include <tuple>
#include <vector>
class DiscreteFunctionVariant;
class MeshVariant;
class ItemValueVariant;
class SubItemValuePerItemVariant;
class IBoundaryConditionDescriptor;
class IZoneDescriptor;
class ImplicitAcousticO2SolverHandler
{
public:
enum class SolverType
{
Glace1State,
Glace2States,
Eucclhyd
};
private:
struct IImplicitAcousticO2Solver
{
virtual std::tuple<std::shared_ptr<const MeshVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
apply(const double& dt,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& u,
const std::shared_ptr<const DiscreteFunctionVariant>& E,
const std::shared_ptr<const DiscreteFunctionVariant>& c,
const std::shared_ptr<const DiscreteFunctionVariant>& p,
const std::shared_ptr<const DiscreteFunctionVariant>& pi,
const std::shared_ptr<const DiscreteFunctionVariant>& gamma,
const std::shared_ptr<const DiscreteFunctionVariant>& Cv,
const std::shared_ptr<const DiscreteFunctionVariant>& entropy) = 0;
IImplicitAcousticO2Solver() = default;
IImplicitAcousticO2Solver(IImplicitAcousticO2Solver&&) = default;
IImplicitAcousticO2Solver& operator=(IImplicitAcousticO2Solver&&) = default;
virtual ~IImplicitAcousticO2Solver() = default;
};
template <MeshConcept MeshType>
class ImplicitAcousticO2Solver;
std::unique_ptr<IImplicitAcousticO2Solver> m_implicit_acoustic_solver;
public:
IImplicitAcousticO2Solver&
solver()
{
return *m_implicit_acoustic_solver;
}
ImplicitAcousticO2SolverHandler(
SolverType solver_type,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& c,
const std::shared_ptr<const DiscreteFunctionVariant>& u,
const std::shared_ptr<const DiscreteFunctionVariant>& p,
const std::shared_ptr<const DiscreteFunctionVariant>& pi,
const std::shared_ptr<const DiscreteFunctionVariant>& gamma,
const std::shared_ptr<const DiscreteFunctionVariant>& Cv,
const std::shared_ptr<const DiscreteFunctionVariant>& entropy,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list,
const std::vector<std::shared_ptr<const IZoneDescriptor>>& explicit_zone_list,
const double& dt);
ImplicitAcousticO2SolverHandler(
const SolverType solver_type,
const std::shared_ptr<const DiscreteFunctionVariant>& rho,
const std::shared_ptr<const DiscreteFunctionVariant>& c,
const std::shared_ptr<const DiscreteFunctionVariant>& u,
const std::shared_ptr<const DiscreteFunctionVariant>& p,
const std::shared_ptr<const DiscreteFunctionVariant>& pi,
const std::shared_ptr<const DiscreteFunctionVariant>& gamma,
const std::shared_ptr<const DiscreteFunctionVariant>& Cv,
const std::shared_ptr<const DiscreteFunctionVariant>& entropy,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list,
const std::shared_ptr<const DiscreteFunctionVariant>& chi_explicit,
const double& dt);
};
#endif // IMPLICIT_ACOUSTIC_O2_SOLVER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment