Page MenuHomec4science

transport_stagger.hpp
No OneTemporary

File Metadata

Created
Sun, Sep 8, 20:06

transport_stagger.hpp

#ifndef SPECMICP_REACTMICP_SYSTEMS_SATURATED_TRANSPORTSTAGGER_HPP
#define SPECMICP_REACTMICP_SYSTEMS_SATURATED_TRANSPORTSTAGGER_HPP
#include "variablesfwd.hpp"
#include "reactmicp/solver/staggers_base/transport_stagger_base.hpp"
#include "transport_program.hpp"
#include "dfpmsolver/parabolic_driver.hpp"
namespace specmicp {
namespace reactmicp {
namespace systems {
namespace satdiff {
using VariablesBasePtr = solver::VariablesBasePtr;
class SaturatedTransportStagger: public solver::TransportStaggerBase
{
public:
SaturatedTransportStagger(SaturatedVariablesPtr variables,
std::vector<index_t> list_fixed_nodes);
SaturatedTransportStagger(SaturatedVariablesPtr variables,
std::vector<index_t> list_fixed_nodes,
std::map<index_t, index_t> list_slave_nodes,
std::vector<index_t> list_immobile_components);
//! \brief Return the options of the solver
dfpmsolver::ParabolicDriverOptions& options_solver() {return m_solver.get_options();}
//! \brief Initialize the stagger at the beginning of an iteration
void initialize_timestep(scalar_t dt, VariablesBasePtr var) override;
//! \brief Solve the equation for the timestep
solver::StaggerReturnCode restart_timestep(VariablesBasePtr var) override;
//! \brief Compute the residuals norm
scalar_t get_residual(VariablesBasePtr var) override;
//! \brief Compute the residuals norm
scalar_t get_residual_0(VariablesBasePtr var) override {
// TODO : a slightly more optimized version would use the value from the solver
return m_residual_0;
}
//! \brief Obtain the update
scalar_t get_update(VariablesBasePtr var) override;
private:
scalar_t m_dt;
scalar_t m_residual_0;
SaturatedDiffusion m_program;
dfpmsolver::ParabolicDriver<SaturatedDiffusion> m_solver;
};
} // end namespace satdiff
} // end namespace systems
} // end namespace reactmicp
} // end namespace specmicp
#endif // SPECMICP_REACTMICP_SYSTEMS_SATURATED_TRANSPORTSTAGGER_HPP

Event Timeline