Page MenuHomec4science

parabolic_program.hpp
No OneTemporary

File Metadata

Created
Sun, Nov 17, 15:25

parabolic_program.hpp

#ifndef SPECMICP_DFPMSOLVER_PARABOLICPROGRAM_HPP
#define SPECMICP_DFPMSOLVER_PARABOLICPROGRAM_HPP
#include "common.hpp"
#include <Eigen/Sparse>
#include "dfpm_program.hpp"
namespace specmicp {
namespace dfpmsolver {
//! Concept class for a program
template <class Derived>
class ParabolicProgram: DFPMProgram<ParabolicProgram<Derived>>
{
public:
Derived* derived() {static_cast<Derived*>(this);}
//! \brief Compute the residuals
void compute_residuals(const Vector& displacement,
const Vector& velocity,
Vector& residual
)
{
derived()->compute_residuals(displacement, velocity, residual);
}
//! \brief Compute the jacobian
void compute_jacobian(Vector& displacement,
Vector& velocity,
Eigen::SparseMatrix<scalar_t>& jacobian,
scalar_t alphadt
)
{
derived()->compute_jacobian(displacement, velocity, jacobian, alphadt);
}
//! \brief Update the solutions
void update_solution(const Vector& update,
scalar_t lambda,
scalar_t alpha_dt,
Vector& predictor,
Vector& displacement,
Vector& velocity)
{
derived()->update_solution(update, lambda, alpha_dt, predictor, displacement, velocity);
}
//! \brief Apply boundary conditions to the velocity vector
//!
//! by default do nothing.
void apply_bc(scalar_t dt,
const Vector& displacement,
Vector& velocity)
{}
};
} // end namespace dfpmsolver
} // end namespace specmicp
#endif // SPECMICP_DFPMSOLVER_PARABOLICPROGRAM_HPP

Event Timeline