9 class MacroStrainValue;
22 using typename FullNLProblem::Scalar;
23 using typename FullNLProblem::THessian;
24 using typename FullNLProblem::TVector;
29 std::shared_ptr<mesh::MeshNodes> mesh_nodes,
31 const std::vector<std::shared_ptr<Form>> &
forms,
32 const std::vector<std::shared_ptr<AugmentedLagrangianForm>> &penalty_forms,
33 bool solve_symmetric_macro_strain,
34 const std::shared_ptr<polysolve::linear::Solver> &solver,
41 double value(
const TVector &
x)
override;
42 void gradient(
const TVector &
x, TVector &gradv)
override;
49 TVector
full_to_reduced(
const TVector &full,
const Eigen::MatrixXd &disp_grad)
const;
64 void init(
const TVector &x0)
override;
65 bool is_step_valid(
const TVector &x0,
const TVector &x1)
override;
67 double max_step_size(
const TVector &x0,
const TVector &x1)
override;
70 void post_step(
const polysolve::nonlinear::PostStepData &data)
override;
std::vector< std::shared_ptr< Form > > & forms()
std::shared_ptr< mesh::MeshNodes > mesh_nodes_
Eigen::MatrixXd reduced_to_disp_grad(const TVector &reduced, bool homogeneous=false) const
Eigen::VectorXi fixed_mask_
void gradient(const TVector &x, TVector &gradv) override
void init(const TVector &x0) override
void post_step(const polysolve::nonlinear::PostStepData &data) override
Eigen::MatrixXd macro_mid_to_reduced_
int macro_reduced_size() const
void set_fixed_entry(const Eigen::VectorXi &fixed_entry)
TVector macro_full_to_reduced(const TVector &full) const
bool is_step_valid(const TVector &x0, const TVector &x1) override
Eigen::MatrixXd macro_mid_to_full_
const assembler::MacroStrainValue & macro_strain_constraint_
void line_search_begin(const TVector &x0, const TVector &x1) override
void update_quantities(const double t, const TVector &x) override
Eigen::MatrixXd macro_full_to_mid_
TVector extended_to_reduced_grad(const TVector &extended) const
void hessian(const TVector &x, THessian &hessian) override
void init_lagging(const TVector &x) override
TVector full_to_reduced_diag(const TVector &full_diag) const override
TVector reduced_to_extended(const TVector &reduced, bool homogeneous=false) const
TVector reduced_to_full(const TVector &reduced) const
TVector extended_to_reduced(const TVector &extended) const
virtual ~NLHomoProblem()=default
bool has_symmetry_constraint() const
std::vector< std::shared_ptr< Form > > homo_forms
Eigen::MatrixXd constraint_grad() const
Eigen::MatrixXd macro_full_to_reduced_grad(const Eigen::MatrixXd &full) const
double value(const TVector &x) override
TVector full_to_reduced(const TVector &full, const Eigen::MatrixXd &disp_grad) const
TVector full_to_reduced_grad(const TVector &full) const override
void full_hessian_to_reduced_hessian(THessian &hessian) const
const bool only_symmetric
void solution_changed(const TVector &new_x) override
double max_step_size(const TVector &x0, const TVector &x1) override
void extended_hessian_to_reduced_hessian(const THessian &extended, THessian &reduced) const
bool is_step_collision_free(const TVector &x0, const TVector &x1) override
void add_form(const std::shared_ptr< Form > &form)
void update_lagging(const TVector &x, const int iter_num) override
TVector macro_reduced_to_full(const TVector &reduced, bool homogeneous=false) const
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix