mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #115 from atgeirr/expand-selector-options
Add more options for Selector class.
This commit is contained in:
@@ -292,7 +292,10 @@ spdiag(const AutoDiffBlock<double>::V& d)
|
|||||||
public:
|
public:
|
||||||
typedef AutoDiffBlock<Scalar> ADB;
|
typedef AutoDiffBlock<Scalar> ADB;
|
||||||
|
|
||||||
Selector(const typename ADB::V& selection_basis)
|
enum CriterionForLeftElement { GreaterEqualZero, GreaterZero, Zero, NotEqualZero, LessZero, LessEqualZero };
|
||||||
|
|
||||||
|
Selector(const typename ADB::V& selection_basis,
|
||||||
|
CriterionForLeftElement crit = GreaterEqualZero)
|
||||||
{
|
{
|
||||||
// Define selector structure.
|
// Define selector structure.
|
||||||
const int n = selection_basis.size();
|
const int n = selection_basis.size();
|
||||||
@@ -300,10 +303,33 @@ spdiag(const AutoDiffBlock<double>::V& d)
|
|||||||
left_elems_.reserve(n);
|
left_elems_.reserve(n);
|
||||||
right_elems_.reserve(n);
|
right_elems_.reserve(n);
|
||||||
for (int i = 0; i < n; ++i) {
|
for (int i = 0; i < n; ++i) {
|
||||||
if (selection_basis[i] < 0.0) {
|
bool chooseleft = false;
|
||||||
right_elems_.push_back(i);
|
switch (crit) {
|
||||||
} else {
|
case GreaterEqualZero:
|
||||||
|
chooseleft = selection_basis[i] >= 0.0;
|
||||||
|
break;
|
||||||
|
case GreaterZero:
|
||||||
|
chooseleft = selection_basis[i] > 0.0;
|
||||||
|
break;
|
||||||
|
case Zero:
|
||||||
|
chooseleft = selection_basis[i] == 0.0;
|
||||||
|
break;
|
||||||
|
case NotEqualZero:
|
||||||
|
chooseleft = selection_basis[i] != 0.0;
|
||||||
|
break;
|
||||||
|
case LessZero:
|
||||||
|
chooseleft = selection_basis[i] < 0.0;
|
||||||
|
break;
|
||||||
|
case LessEqualZero:
|
||||||
|
chooseleft = selection_basis[i] <= 0.0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
OPM_THROW(std::logic_error, "No such criterion: " << crit);
|
||||||
|
}
|
||||||
|
if (chooseleft) {
|
||||||
left_elems_.push_back(i);
|
left_elems_.push_back(i);
|
||||||
|
} else {
|
||||||
|
right_elems_.push_back(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user