Skip to content

Commit 6f55f04

Browse files
committed
have default solver again from ValueType through triangular solver
1 parent a4deb41 commit 6f55f04

File tree

3 files changed

+23
-21
lines changed

3 files changed

+23
-21
lines changed

examples/file-config-solver/config/parilu-gmres.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
"type": "solver::Gmres",
33
"preconditioner": {
44
"type": "preconditioner::Ilu",
5-
"l_solver": {
6-
"type": "solver::LowerTrs"
7-
},
8-
"u_solver": {
9-
"type": "solver::UpperTrs"
10-
},
115
"reverse_apply": false,
126
"factorization": {
137
"type": "factorization::ParIlu"

include/ginkgo/core/preconditioner/ic.hpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -402,22 +402,30 @@ class Ic : public EnableLinOp<Ic<LSolverTypeOrValueType, IndexType>>,
402402
// If no factories are provided, generate default ones
403403
if (!parameters_.l_solver_factory) {
404404
if constexpr (std::is_same_v<l_solver_type, LinOp>) {
405-
// linop can not have a default factory generation
406-
GKO_NOT_IMPLEMENTED;
405+
// use LowerTrs as the default
406+
l_solver_ = generate_default_solver<
407+
solver::LowerTrs<value_type, index_type>>(exec, l_factor);
407408
} else {
408409
l_solver_ =
409410
generate_default_solver<l_solver_type>(exec, l_factor);
410-
// If comp contains both factors: use the transposed factor to
411-
// avoid transposing twice
412-
if (comp->get_operators().size() == 2) {
413-
auto lh_factor = comp->get_operators()[1];
414-
GKO_ASSERT_EQUAL_DIMENSIONS(l_factor, lh_factor);
415-
lh_solver_ = as<lh_solver_type>(
416-
as<Transposable>(l_solver_)->conj_transpose());
411+
}
412+
// If comp contains both factors: use the transposed factor to
413+
// avoid transposing twice
414+
if (comp->get_operators().size() == 2) {
415+
auto lh_factor = comp->get_operators()[1];
416+
GKO_ASSERT_EQUAL_DIMENSIONS(l_factor, lh_factor);
417+
if constexpr (std::is_same_v<lh_solver_type, LinOp>) {
418+
// use UpperTrs as the default
419+
lh_solver_ = generate_default_solver<
420+
solver::UpperTrs<value_type, index_type>>(exec,
421+
lh_factor);
417422
} else {
418-
lh_solver_ = as<lh_solver_type>(
419-
as<Transposable>(l_solver_)->conj_transpose());
423+
lh_solver_ =
424+
generate_default_solver<lh_solver_type>(exec, l_factor);
420425
}
426+
} else {
427+
lh_solver_ = as<lh_solver_type>(
428+
as<Transposable>(l_solver_)->conj_transpose());
421429
}
422430
} else {
423431
l_solver_ = parameters_.l_solver_factory->generate(l_factor);

include/ginkgo/core/preconditioner/ilu.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,8 @@ class Ilu
468468
// If no factories are provided, generate default ones
469469
if (!parameters_.l_solver_factory) {
470470
if constexpr (std::is_same_v<l_solver_type, LinOp>) {
471-
// linop can not have a default factory generation
472-
GKO_NOT_IMPLEMENTED;
471+
l_solver_ = generate_default_solver<
472+
solver::LowerTrs<value_type, index_type>>(exec, l_factor);
473473
} else {
474474
l_solver_ =
475475
generate_default_solver<l_solver_type>(exec, l_factor);
@@ -479,8 +479,8 @@ class Ilu
479479
}
480480
if (!parameters_.u_solver_factory) {
481481
if constexpr (std::is_same_v<u_solver_type, LinOp>) {
482-
// linop can not have a default factory generation
483-
GKO_NOT_IMPLEMENTED;
482+
u_solver_ = generate_default_solver<
483+
solver::LowerTrs<value_type, index_type>>(exec, u_factor);
484484
} else {
485485
u_solver_ =
486486
generate_default_solver<u_solver_type>(exec, u_factor);

0 commit comments

Comments
 (0)