Select Git revision
IConnectivity.hpp
-
Stéphane Del Pino authoredStéphane Del Pino authored
AcousticSolver.hpp 6.41 KiB
#ifndef ACOUSTIC_SOLVER_HPP
#define ACOUSTIC_SOLVER_HPP
#include <memory>
#include <tuple>
#include <vector>
class IDiscreteFunction;
class IBoundaryConditionDescriptor;
class IMesh;
class ItemValueVariant;
class SubItemValuePerItemVariant;
double acoustic_dt(const std::shared_ptr<const IDiscreteFunction>& c);
double acoustic_rho_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const ItemValueVariant>& ur,
const double& dt_max);
double acoustic_pg_epsilon_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& E,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr_variant,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
double acoustic_pg_epsilon_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& E,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr_variant,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
double acoustic_pg_entropy_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& epsilon,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const IDiscreteFunction>& gamma,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr_variant,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
double acoustic_mg_epsilon_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& epsilon,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const IDiscreteFunction>& p_k,
const std::shared_ptr<const IDiscreteFunction>& rho0k0_expN0p1,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr_variant,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
double acoustic_mg_entropy_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& epsilon,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const IDiscreteFunction>& p_k,
const std::shared_ptr<const IDiscreteFunction>& Gamma_tau,
const std::shared_ptr<const IDiscreteFunction>& Gamma_inf,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr_variant,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
class AcousticSolverHandler
{
public:
enum class SolverType
{
Glace,
Eucclhyd
};
private:
struct IAcousticSolver
{
virtual std::tuple<const std::shared_ptr<const SubItemValuePerItemVariant>,
const std::shared_ptr<const ItemValueVariant>,
const std::shared_ptr<const SubItemValuePerItemVariant>>
compute_fluxes(
const SolverType& solver_type,
const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& c,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list) const = 0;
virtual std::tuple<std::shared_ptr<const IMesh>,
std::shared_ptr<const IDiscreteFunction>,
std::shared_ptr<const IDiscreteFunction>,
std::shared_ptr<const IDiscreteFunction>>
apply_fluxes(const double& dt,
const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& E,
const std::shared_ptr<const ItemValueVariant>& ur,
const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr) const = 0;
virtual std::tuple<std::shared_ptr<const IMesh>,
std::shared_ptr<const IDiscreteFunction>,
std::shared_ptr<const IDiscreteFunction>,
std::shared_ptr<const IDiscreteFunction>>
apply(const SolverType& solver_type,
const double& dt,
const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const IDiscreteFunction>& u,
const std::shared_ptr<const IDiscreteFunction>& E,
const std::shared_ptr<const IDiscreteFunction>& c,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list) const = 0;
IAcousticSolver() = default;
IAcousticSolver(IAcousticSolver&&) = default;
IAcousticSolver& operator=(IAcousticSolver&&) = default;
virtual ~IAcousticSolver() = default;
};
template <size_t Dimension>
class AcousticSolver;
std::unique_ptr<IAcousticSolver> m_acoustic_solver;
public:
const IAcousticSolver&
solver() const
{
return *m_acoustic_solver;
}
AcousticSolverHandler(const std::shared_ptr<const IMesh>& mesh);
};
#endif // ACOUSTIC_SOLVER_HPP