Skip to content

Commit 7104f70

Browse files
author
Teseo Schneider
committed
newton refactoring
1 parent e9bb718 commit 7104f70

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

src/polysolve/nonlinear/descent_strategies/Newton.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ namespace polysolve::nonlinear
1010
const double characteristic_length,
1111
spdlog::logger &logger)
1212
{
13+
// Copies stuff from main newton
14+
json proj_solver_params = R"({"ProjectedNewton": {}})"_json;
15+
proj_solver_params["ProjectedNewton"]["residual_tolerance"] = solver_params["Newton"]["residual_tolerance"];
16+
17+
json reg_solver_params = R"({"RegularizedNewton": {}})"_json;
18+
reg_solver_params["RegularizedNewton"]["residual_tolerance"] = solver_params["Newton"]["residual_tolerance"];
19+
reg_solver_params["RegularizedNewton"]["reg_weight_min"] = solver_params["Newton"]["reg_weight_min"];
20+
reg_solver_params["RegularizedNewton"]["reg_weight_max"] = solver_params["Newton"]["reg_weight_max"];
21+
reg_solver_params["RegularizedNewton"]["reg_weight_inc"] = solver_params["Newton"]["reg_weight_inc"];
22+
1323
std::vector<std::shared_ptr<DescentStrategy>> res;
1424
const bool force_psd_projection = solver_params["Newton"]["force_psd_projection"];
1525
if (!force_psd_projection)
@@ -22,14 +32,14 @@ namespace polysolve::nonlinear
2232
if (use_psd_projection)
2333
res.push_back(std::make_unique<ProjectedNewton>(
2434
sparse,
25-
solver_params, linear_solver_params,
35+
proj_solver_params, linear_solver_params,
2636
characteristic_length, logger));
2737

2838
const double reg_weight_min = solver_params["Newton"]["reg_weight_min"];
2939
if (reg_weight_min > 0)
3040
res.push_back(std::make_unique<RegularizedNewton>(
3141
sparse,
32-
solver_params, linear_solver_params,
42+
reg_solver_params, linear_solver_params,
3343
characteristic_length, logger));
3444

3545
if (res.empty())
@@ -65,6 +75,7 @@ namespace polysolve::nonlinear
6575
spdlog::logger &logger)
6676
: Superclass(sparse, solver_params, linear_solver_params, characteristic_length, logger)
6777
{
78+
m_residual_tolerance = solver_params["ProjectedNewton"]["residual_tolerance"];
6879
}
6980

7081
RegularizedNewton::RegularizedNewton(
@@ -75,9 +86,11 @@ namespace polysolve::nonlinear
7586
spdlog::logger &logger)
7687
: Superclass(sparse, solver_params, linear_solver_params, characteristic_length, logger)
7788
{
78-
reg_weight_min = solver_params["Newton"]["reg_weight_min"];
79-
reg_weight_max = solver_params["Newton"]["reg_weight_max"];
80-
reg_weight_inc = solver_params["Newton"]["reg_weight_inc"];
89+
90+
m_residual_tolerance = solver_params["RegularizedNewton"]["residual_tolerance"];
91+
reg_weight_min = solver_params["RegularizedNewton"]["reg_weight_min"];
92+
reg_weight_max = solver_params["RegularizedNewton"]["reg_weight_max"];
93+
reg_weight_inc = solver_params["RegularizedNewton"]["reg_weight_inc"];
8194

8295
reg_weight = reg_weight_min;
8396

src/polysolve/nonlinear/descent_strategies/Newton.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ namespace polysolve::nonlinear
3939

4040
const bool is_sparse;
4141
const double m_characteristic_length;
42-
double m_residual_tolerance;
4342

4443
std::unique_ptr<polysolve::linear::Solver> linear_solver; ///< Linear solver used to solve the linear system
4544

4645
double assembly_time;
4746
double inverting_time;
4847

4948
protected:
49+
double m_residual_tolerance;
50+
5051
std::string internal_name() const { return is_sparse ? "Sparse" : "Dense"; }
5152

5253
virtual void compute_hessian(Problem &objFunc,

0 commit comments

Comments
 (0)