mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Add helpers grad, fullngrad, fulldiv.
This commit is contained in:
parent
15ff9d8076
commit
6e2cdfc33f
@ -39,12 +39,19 @@ struct HelperOps
|
|||||||
typedef Eigen::Array<int, Eigen::Dynamic, 1> IFaces;
|
typedef Eigen::Array<int, Eigen::Dynamic, 1> IFaces;
|
||||||
IFaces internal_faces;
|
IFaces internal_faces;
|
||||||
|
|
||||||
/// Extract for each face the difference of its adjacent cells'values.
|
/// Extract for each internal face the difference of its adjacent cells'values (first - second).
|
||||||
M ngrad;
|
M ngrad;
|
||||||
|
/// Extract for each face the difference of its adjacent cells'values (second - first).
|
||||||
|
M grad;
|
||||||
/// Extract for each face the average of its adjacent cells' values.
|
/// Extract for each face the average of its adjacent cells' values.
|
||||||
M caver;
|
M caver;
|
||||||
/// Extract for each cell the sum of its adjacent faces' (signed) values.
|
/// Extract for each cell the sum of its adjacent interior faces' (signed) values.
|
||||||
M div;
|
M div;
|
||||||
|
/// Extract for each face the difference of its adjacent cells'values (first - second).
|
||||||
|
/// For boundary faces, one of the entries per row (corresponding to the outside) is zero.
|
||||||
|
M fullngrad;
|
||||||
|
/// Extract for each cell the sum of all its adjacent faces' (signed) values.
|
||||||
|
M fulldiv;
|
||||||
|
|
||||||
/// Constructs all helper vectors and matrices.
|
/// Constructs all helper vectors and matrices.
|
||||||
HelperOps(const UnstructuredGrid& grid)
|
HelperOps(const UnstructuredGrid& grid)
|
||||||
@ -89,7 +96,21 @@ struct HelperOps
|
|||||||
}
|
}
|
||||||
ngrad.setFromTriplets(ngrad_tri.begin(), ngrad_tri.end());
|
ngrad.setFromTriplets(ngrad_tri.begin(), ngrad_tri.end());
|
||||||
caver.setFromTriplets(caver_tri.begin(), caver_tri.end());
|
caver.setFromTriplets(caver_tri.begin(), caver_tri.end());
|
||||||
|
grad = -ngrad;
|
||||||
div = ngrad.transpose();
|
div = ngrad.transpose();
|
||||||
|
std::vector<Tri> fullngrad_tri;
|
||||||
|
fullngrad_tri.reserve(2*nf);
|
||||||
|
for (int i = 0; i < nf; ++i) {
|
||||||
|
if (nb(i,0) >= 0) {
|
||||||
|
fullngrad_tri.emplace_back(i, nb(i,0), 1.0);
|
||||||
|
}
|
||||||
|
if (nb(i,1) >= 0) {
|
||||||
|
fullngrad_tri.emplace_back(i, nb(i,1), -1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fullngrad.resize(nf, nc);
|
||||||
|
fullngrad.setFromTriplets(fullngrad_tri.begin(), fullngrad_tri.end());
|
||||||
|
fulldiv = fullngrad.transpose();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user