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

Advance entropic time step implementation

- Remains lots of work in 2d and 3d (great progresses in 2d)
- Remains to improve some constants evaluations (for Mie-Grunisen)
- The case Gamma_infty<1 is not started
parent 688f02e0
Branches
No related tags found
No related merge requests found
......@@ -24,18 +24,18 @@ class [[nodiscard]] Polynomial1D
PUGS_INLINE
friend Polynomial1D _simplify(Polynomial1D && p)
{
return std::move(p);
// size_t real_degree = p._getRealDegree();
// if (real_degree != p.degree()) {
// Polynomial1D q(real_degree);
// for (size_t i = 0; i <= real_degree; ++i) {
// q.coefficient(i) = p.coefficient(i);
// }
// return q;
// } else {
// return std::move(p);
// }
size_t real_degree = p._getRealDegree();
if (real_degree != p.degree()) {
Polynomial1D q(real_degree);
for (size_t i = 0; i <= real_degree; ++i) {
q.coefficient(i) = p.coefficient(i);
}
return q;
} else {
return std::move(p);
}
}
public:
......
......@@ -7,7 +7,7 @@ Polynomial1DRootComputer::_computeRootBetween(const PositionSignChanges& left_bo
double left = left_bound.position;
double right = right_bound.position;
const double interval_size = right - left;
const double interval_size = m_right - m_left;
const Polynomial1D& p0 = m_sturm_sequence.p(0);
double left_value = p0(left);
......@@ -49,6 +49,9 @@ Polynomial1DRootComputer::getFirstRoot() const
} else if (l.nb_sign_changes - rk.nb_sign_changes == 0) {
a = rk;
}
if (b.position - a.position < 1E-14 * (m_right - m_left)) {
return a.position;
}
} while (a.nb_sign_changes - b.nb_sign_changes != 1);
return _computeRootBetween(a, b);
} else {
......
......@@ -297,16 +297,16 @@ SchemeModule::SchemeModule()
));
this->_addBuiltinFunction("acoustic_epsilon_dt",
this->_addBuiltinFunction("acoustic_pg_epsilon_dt",
std::function(
[](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>& epsilon,
const std::shared_ptr<const IDiscreteFunction>& p,
const std::shared_ptr<const SubItemValuePerItemVariant>& Ajr,
const std::shared_ptr<const ItemValueVariant>& ur, const double& dt_max) -> double {
return acoustic_epsilon_dt(rho, u, E, p, Ajr, ur, dt_max);
return acoustic_pg_epsilon_dt(rho, u, epsilon, p, Ajr, ur, dt_max);
}
));
......@@ -326,6 +326,43 @@ SchemeModule::SchemeModule()
));
this->_addBuiltinFunction("acoustic_mg_epsilon_dt",
std::function(
[](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 {
return acoustic_mg_epsilon_dt(rho, u, epsilon, p, p_k, rho0k0_expN0p1, Ajr_variant,
ur_variant, dt_max);
}
));
this->_addBuiltinFunction("acoustic_mg_entropy_dt",
std::function(
[](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) -> double {
return acoustic_mg_entropy_dt(rho, u, epsilon, p, p_k, Gamma_tau, Gamma_inf,
Ajr_variant, ur_variant, dt_max);
}
));
this->_addBuiltinFunction("glace_fluxes", std::function(
[](const std::shared_ptr<const IDiscreteFunction>& rho,
......
This diff is collapsed.
......@@ -17,7 +17,7 @@ double acoustic_rho_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const ItemValueVariant>& ur,
const double& dt_max);
double acoustic_epsilon_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
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,
......@@ -25,11 +25,10 @@ double acoustic_epsilon_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
const std::shared_ptr<const ItemValueVariant>& ur_variant,
const double& dt_max);
double acoustic_entropy_dt(const std::shared_ptr<const IDiscreteFunction>& rho,
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>& epsilon,
const std::shared_ptr<const IDiscreteFunction>& E,
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);
......@@ -43,6 +42,27 @@ double acoustic_pg_entropy_dt(const std::shared_ptr<const IDiscreteFunction>& rh
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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment