Page MenuHomec4science

diffusion.hpp
No OneTemporary

File Metadata

Created
Sat, Aug 31, 08:09

diffusion.hpp

#ifndef SPECMICP_DFPM_1DTRANSPORT_DIFFUSION_HPP
#define SPECMICP_DFPM_1DTRANSPORT_DIFFUSION_HPP
#include <memory>
#include "common.hpp"
#include "dfpm/types.hpp"
#include "dfpmsolver/parabolic_program.hpp"
#include "dfpm/meshes/mesh1dfwd.hpp"
namespace specmicp {
namespace dfpm {
class SaturatedDiffusion1DParameters;
class SaturatedDiffusion1D: public dfpmsolver::ParabolicProgram<SaturatedDiffusion1D>
{
public:
SaturatedDiffusion1D(
mesh::Mesh1DPtr the_mesh,
std::shared_ptr<SaturatedDiffusion1DParameters> parameters,
std::vector<index_t> list_bcs
);
//! \brief Return the number of equations
index_t get_neq() const {return m_neq;}
//! \brief Return the number of degrees of freedom per node
index_t get_ndf() const {return 1;}
//! \brief Return the total number of degrees of freedom
index_t get_tot_ndf() const {return m_tot_ndf;}
//! \brief Return the id of the equation corresponding to the degree of freedom 'id_dof'
//!
//! Return 'no_equation' if no equation exist
index_t id_equation(index_t id_dof) const {return m_id_equations(id_dof);}
void element_residuals(index_t element,
const Vector& displacement,
const Vector& velocity,
Vector& element_residual
);
//! \brief Compute the residuals
void compute_residuals(const Vector& displacement,
const Vector& velocity,
Vector& residual
);
//! \brief Compute the jacobian
void compute_jacobian(Vector& displacement,
Vector& velocity,
Eigen::SparseMatrix<scalar_t>& jacobian,
scalar_t alphadt
);
void element_jacobian(
index_t element,
Vector& displacement,
Vector& velocity,
list_triplet_t& jacobian,
scalar_t alphadt);
//! \brief Update the solutions
void update_solution(const Vector& update,
scalar_t lambda,
scalar_t alpha_dt,
Vector& predictor,
Vector& displacement,
Vector& velocity);
//! \brief Apply boundary conditions to the velocity vector
//!
//! by default do nothing.
void apply_bc(scalar_t dt,
const Vector& displacement,
Vector& velocity)
{}
//! \brief Return the value of the external flow for dof 'id_dof'
scalar_t external_flow(index_t id_dof) const {return m_external_flow(id_dof);}
//! \brief Return a reference to the value of the external flow for dof 'id_dof'
scalar_t& external_flow(index_t id_dof) {return m_external_flow(id_dof);}
//! \brief Return a reference to the vector of external flow
Vector& external_flow() {return m_external_flow;}
private:
void number_equations(std::vector<index_t> list_bcs);
index_t m_tot_ndf;
index_t m_neq;
Eigen::VectorXi m_id_equations;
mesh::Mesh1DPtr m_mesh;
std::shared_ptr<SaturatedDiffusion1DParameters> m_param;
Vector m_internal_flow;
Vector m_external_flow;
};
} // end namespace dfpm
} // end namespace specmicp
#endif // SPECMICP_DFPM_1DTRANSPORT_DIFFUSION_HPP

Event Timeline