Skip to content
Snippets Groups Projects
Commit f86f684f authored by Alexandre Gangloff's avatar Alexandre Gangloff
Browse files

Add apply_fluxes functions for the third and fourth orders in time extension

parent eb2debb8
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@
#include <scheme/CouplingBoundaryConditionDescriptor.hpp>
#include <scheme/HighOrderAcousticSolver.hpp>
#include <scheme/LocalDtAcousticSolver.hpp>
#include <scheme/LocalDtHyperelasticSolver.hpp>
......@@ -1006,6 +1007,75 @@ LocalFSIModule::LocalFSIModule()
bc_descriptor_list2, lambda2, mu2, gamma2, p_inf2);
}
));
this->_addBuiltinFunction("apply_acoustic_fluxes_prediction_order3",
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 ItemValueVariant>& ur, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred, //
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 HighOrderAcousticSolverHandler{getCommonMesh({rho, u, E})} //
.solver()
.apply_fluxes_prediction_order3(dt, rho, u, E, ur, Fjr, ur_pred, Fjr_pred);
}
));
this->_addBuiltinFunction("apply_acoustic_fluxes_correction_order3",
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 ItemValueVariant>& ur, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred1, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred1,
const std::shared_ptr<const ItemValueVariant>& ur_pred2, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred2, //
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 HighOrderAcousticSolverHandler{getCommonMesh({rho, u, E})} //
.solver()
.apply_fluxes_correction_order3(dt, rho, u, E, ur, Fjr, ur_pred1, Fjr_pred1, ur_pred2, Fjr_pred2);
}
));
this->_addBuiltinFunction("apply_acoustic_fluxes_correction_order4",
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 ItemValueVariant>& ur, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred1, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred1,
const std::shared_ptr<const ItemValueVariant>& ur_pred2, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred2,
const std::shared_ptr<const ItemValueVariant>& ur_pred3, //
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred3, //
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 HighOrderAcousticSolverHandler{getCommonMesh({rho, u, E})} //
.solver()
.apply_fluxes_correction_order4(dt, rho, u, E, ur, Fjr, ur_pred1, Fjr_pred1, ur_pred2, Fjr_pred2, ur_pred3, Fjr_pred3);
}
));
}
......
......@@ -12,6 +12,7 @@ add_library(
LocalDtHyperelasticSolver.cpp
FluxingAdvectionSolver.cpp
FluxingAdvectionSolver.cpp
HighOrderAcousticSolver.cpp
HyperelasticSolver.cpp
LoadBalancer.cpp
PolynomialReconstruction.cpp
......
This diff is collapsed.
#ifndef HighOrder_ACOUSTIC_SOLVER_HPP
#define HighOrder_ACOUSTIC_SOLVER_HPP
#include <mesh/MeshTraits.hpp>
#include <memory>
#include <tuple>
#include <vector>
class DiscreteFunctionVariant;
class IBoundaryConditionDescriptor;
class MeshVariant;
class ItemValueVariant;
class SubItemValuePerItemVariant;
class HighOrderAcousticSolverHandler
{
public:
enum class SolverType
{
Glace,
Eucclhyd
};
private:
struct IHighOrderAcousticSolver
{
virtual std::tuple<std::shared_ptr<const MeshVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
apply_fluxes_prediction_order3(const double& dt,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_v,
const std::shared_ptr<const DiscreteFunctionVariant>& u_v,
const std::shared_ptr<const DiscreteFunctionVariant>& E_v,
const std::shared_ptr<const ItemValueVariant>& ur,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred) const = 0;
virtual std::tuple<std::shared_ptr<const MeshVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
apply_fluxes_correction_order3(const double& dt,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_v,
const std::shared_ptr<const DiscreteFunctionVariant>& u_v,
const std::shared_ptr<const DiscreteFunctionVariant>& E_v,
const std::shared_ptr<const ItemValueVariant>& ur,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred1,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred1,
const std::shared_ptr<const ItemValueVariant>& ur_pred2,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred2) const = 0;
virtual std::tuple<std::shared_ptr<const MeshVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>,
std::shared_ptr<const DiscreteFunctionVariant>>
apply_fluxes_correction_order4(const double& dt,
const std::shared_ptr<const DiscreteFunctionVariant>& rho_v,
const std::shared_ptr<const DiscreteFunctionVariant>& u_v,
const std::shared_ptr<const DiscreteFunctionVariant>& E_v,
const std::shared_ptr<const ItemValueVariant>& ur,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,
const std::shared_ptr<const ItemValueVariant>& ur_pred1,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred1,
const std::shared_ptr<const ItemValueVariant>& ur_pred2,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred2,
const std::shared_ptr<const ItemValueVariant>& ur_pred3,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr_pred3) const = 0;
IHighOrderAcousticSolver() = default;
IHighOrderAcousticSolver(IHighOrderAcousticSolver&&) = default;
IHighOrderAcousticSolver& operator=(IHighOrderAcousticSolver&&) = default;
virtual ~IHighOrderAcousticSolver() = default;
};
template <MeshConcept MeshType>
class HighOrderAcousticSolver;
std::unique_ptr<IHighOrderAcousticSolver> m_acoustic_solver;
public:
const IHighOrderAcousticSolver&
solver() const
{
return *m_acoustic_solver;
}
HighOrderAcousticSolverHandler(const std::shared_ptr<const MeshVariant>& mesh_v);
};
#endif // ACOUSTIC_SOLVER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment