PolyFEM
Loading...
Searching...
No Matches
ALSolver.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <
polyfem/solver/NLProblem.hpp
>
4
#include <polysolve/nonlinear/Solver.hpp>
5
#include <
polyfem/solver/forms/BCLagrangianForm.hpp
>
6
#include <
polyfem/solver/forms/BCPenaltyForm.hpp
>
7
#include <
polyfem/Common.hpp
>
8
9
#include <Eigen/Core>
10
11
#include <functional>
12
#include <vector>
13
14
namespace
polyfem::solver
15
{
16
class
ALSolver
17
{
18
using
NLSolver
= polysolve::nonlinear::Solver;
19
20
public
:
21
ALSolver
(
22
std::shared_ptr<BCLagrangianForm>
lagr_form
,
23
std::shared_ptr<BCPenaltyForm>
pen_form
,
24
const
double
initial_al_weight
,
25
const
double
scaling
,
26
const
double
max_al_weight
,
27
const
double
eta_tol
,
28
const
std::function<
void
(
const
Eigen::VectorXd &)> &
update_barrier_stiffness
);
29
30
void
solve_al
(std::shared_ptr<NLSolver> nl_solver,
NLProblem
&nl_problem, Eigen::MatrixXd &sol);
31
void
solve_reduced
(std::shared_ptr<NLSolver> nl_solver,
NLProblem
&nl_problem, Eigen::MatrixXd &sol);
32
33
std::function<void(
const
double
)>
post_subsolve
= [](
const
double) {};
34
35
protected
:
36
void
set_al_weight
(
NLProblem
&nl_problem,
const
Eigen::VectorXd &
x
,
const
double
weight);
37
38
std::shared_ptr<BCLagrangianForm>
lagr_form
;
39
std::shared_ptr<BCPenaltyForm>
pen_form
;
40
const
double
initial_al_weight
;
41
const
double
scaling
;
42
const
double
max_al_weight
;
43
const
double
eta_tol
;
44
45
// TODO: replace this with a member function
46
std::function<void(
const
Eigen::VectorXd &)>
update_barrier_stiffness
;
47
};
48
}
// namespace polyfem::solver
BCLagrangianForm.hpp
BCPenaltyForm.hpp
Common.hpp
NLProblem.hpp
x
int x
Definition
SplineBasis3d.cpp:55
polyfem::solver::ALSolver
Definition
ALSolver.hpp:17
polyfem::solver::ALSolver::max_al_weight
const double max_al_weight
Definition
ALSolver.hpp:42
polyfem::solver::ALSolver::NLSolver
polysolve::nonlinear::Solver NLSolver
Definition
ALSolver.hpp:18
polyfem::solver::ALSolver::set_al_weight
void set_al_weight(NLProblem &nl_problem, const Eigen::VectorXd &x, const double weight)
Definition
ALSolver.cpp:126
polyfem::solver::ALSolver::update_barrier_stiffness
std::function< void(const Eigen::VectorXd &)> update_barrier_stiffness
Definition
ALSolver.hpp:46
polyfem::solver::ALSolver::pen_form
std::shared_ptr< BCPenaltyForm > pen_form
Definition
ALSolver.hpp:39
polyfem::solver::ALSolver::lagr_form
std::shared_ptr< BCLagrangianForm > lagr_form
Definition
ALSolver.hpp:38
polyfem::solver::ALSolver::post_subsolve
std::function< void(const double)> post_subsolve
Definition
ALSolver.hpp:33
polyfem::solver::ALSolver::initial_al_weight
const double initial_al_weight
Definition
ALSolver.hpp:40
polyfem::solver::ALSolver::solve_reduced
void solve_reduced(std::shared_ptr< NLSolver > nl_solver, NLProblem &nl_problem, Eigen::MatrixXd &sol)
Definition
ALSolver.cpp:93
polyfem::solver::ALSolver::solve_al
void solve_al(std::shared_ptr< NLSolver > nl_solver, NLProblem &nl_problem, Eigen::MatrixXd &sol)
Definition
ALSolver.cpp:25
polyfem::solver::ALSolver::eta_tol
const double eta_tol
Definition
ALSolver.hpp:43
polyfem::solver::ALSolver::scaling
const double scaling
Definition
ALSolver.hpp:41
polyfem::solver::NLProblem
Definition
NLProblem.hpp:11
polyfem::solver
Definition
AMIPSForm.cpp:8
src
polyfem
solver
ALSolver.hpp
Generated by
1.9.8