mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Implement limiters with addConstant() and multiplyGradient().
This is instead of directly manipulating the coefficients, requiring assumptions on the basis used.
This commit is contained in:
parent
5ac24f9b8d
commit
b61bb494dc
@ -727,16 +727,14 @@ namespace Opm
|
|||||||
// Handle by setting a flat solution.
|
// Handle by setting a flat solution.
|
||||||
std::cout << "Trouble in cell " << cell << std::endl;
|
std::cout << "Trouble in cell " << cell << std::endl;
|
||||||
limiter = 0.0;
|
limiter = 0.0;
|
||||||
tof[num_basis*cell] = min_upstream_tof;
|
DGBasis::addConstant(min_upstream_tof - tof_c, dim, degree_, tof + num_basis*cell);
|
||||||
}
|
}
|
||||||
ASSERT(limiter >= 0.0);
|
ASSERT(limiter >= 0.0);
|
||||||
|
|
||||||
// Actually do the limiting (if applicable).
|
// Actually do the limiting (if applicable).
|
||||||
if (limiter < 1.0) {
|
if (limiter < 1.0) {
|
||||||
// std::cout << "Applying limiter in cell " << cell << ", limiter = " << limiter << std::endl;
|
// std::cout << "Applying limiter in cell " << cell << ", limiter = " << limiter << std::endl;
|
||||||
for (int i = num_basis*cell + 1; i < num_basis*(cell+1); ++i) {
|
DGBasis::multiplyGradient(limiter, dim, degree_, tof + num_basis*cell);
|
||||||
tof[i] *= limiter;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// std::cout << "Not applying limiter in cell " << cell << "!" << std::endl;
|
// std::cout << "Not applying limiter in cell " << cell << "!" << std::endl;
|
||||||
}
|
}
|
||||||
@ -835,16 +833,14 @@ namespace Opm
|
|||||||
// Handle by setting a flat solution.
|
// Handle by setting a flat solution.
|
||||||
std::cout << "Trouble in cell " << cell << std::endl;
|
std::cout << "Trouble in cell " << cell << std::endl;
|
||||||
limiter = 0.0;
|
limiter = 0.0;
|
||||||
tof[num_basis*cell] = min_upstream_tof;
|
DGBasis::addConstant(min_upstream_tof - tof_c, dim, degree_, tof + num_basis*cell);
|
||||||
}
|
}
|
||||||
ASSERT(limiter >= 0.0);
|
ASSERT(limiter >= 0.0);
|
||||||
|
|
||||||
// Actually do the limiting (if applicable).
|
// Actually do the limiting (if applicable).
|
||||||
if (limiter < 1.0) {
|
if (limiter < 1.0) {
|
||||||
// std::cout << "Applying limiter in cell " << cell << ", limiter = " << limiter << std::endl;
|
// std::cout << "Applying limiter in cell " << cell << ", limiter = " << limiter << std::endl;
|
||||||
for (int i = num_basis*cell + 1; i < num_basis*(cell+1); ++i) {
|
DGBasis::multiplyGradient(limiter, dim, degree_, tof + num_basis*cell);
|
||||||
tof[i] *= limiter;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// std::cout << "Not applying limiter in cell " << cell << "!" << std::endl;
|
// std::cout << "Not applying limiter in cell " << cell << "!" << std::endl;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user