mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Make sortNncAndApplyEditnnc return vector of NNCData ready to be processed.
Previously the vector of NNCData was passed in as a reference and sorted. Unfortunately, it needed to be transformed later to meet all prerequisites. With this commit we do this transformations in sortNncAndApplyEditnnc. Furthermore EDITNNC data is passed by value as it is not needed outside and should usually not be to big. It was copied outside anyway!
This commit is contained in:
parent
f02c2d4114
commit
7849ce690d
@ -30,8 +30,8 @@
|
||||
#include <iostream>
|
||||
namespace Ewoms
|
||||
{
|
||||
void sortNncAndApplyEditnnc(std::vector<Opm::NNCdata>& nncData, std::vector<Opm::NNCdata>& editnncData,
|
||||
bool log )
|
||||
std::vector<Opm::NNCdata> sortNncAndApplyEditnnc(const std::vector<Opm::NNCdata>& nncDataIn, std::vector<Opm::NNCdata> editnncData,
|
||||
bool log )
|
||||
{
|
||||
auto nncLess =
|
||||
[](const Opm::NNCdata& d1, const Opm::NNCdata& d2) {
|
||||
@ -39,6 +39,21 @@ void sortNncAndApplyEditnnc(std::vector<Opm::NNCdata>& nncData, std::vector<Opm:
|
||||
(d1.cell1 < d2.cell1)
|
||||
|| (d1.cell1 == d2.cell1 && d1.cell2 < d2.cell2);
|
||||
};
|
||||
|
||||
auto makeCell1LessCell2 =
|
||||
[](const Opm::NNCdata& entry) {
|
||||
if ( entry.cell2 < entry.cell1)
|
||||
return Opm::NNCdata(entry.cell2, entry.cell1, entry.trans);
|
||||
else
|
||||
return entry;
|
||||
};
|
||||
|
||||
// We need to make sure that for each entry cell1<=cell2 holds. Otherwise sorting
|
||||
// will not make the search more accurate if the engineer chooses to define NNCs
|
||||
// differently.
|
||||
std::vector<Opm::NNCdata> nncData(nncDataIn);
|
||||
std::transform(nncData.begin(), nncData.end(), nncData.begin(), makeCell1LessCell2);
|
||||
std::transform(editnncData.begin(), editnncData.end(), editnncData.begin(), makeCell1LessCell2);
|
||||
std::sort(nncData.begin(), nncData.end(), nncLess);
|
||||
auto candidate = nncData.begin();
|
||||
|
||||
@ -75,5 +90,6 @@ void sortNncAndApplyEditnnc(std::vector<Opm::NNCdata>& nncData, std::vector<Opm:
|
||||
// EDITNNC is for same pair.
|
||||
candidate = firstCandidate;
|
||||
}
|
||||
return nncData;
|
||||
}
|
||||
} // end namespace Ewoms
|
||||
|
@ -31,7 +31,12 @@
|
||||
|
||||
namespace Ewoms
|
||||
{
|
||||
void sortNncAndApplyEditnnc(std::vector<Opm::NNCdata>& nncData, std::vector<Opm::NNCdata>& editnncData,
|
||||
bool log = true);
|
||||
/// \brief Scale NNC data wit informtion form EDITNNC and sort it.
|
||||
/// \param nncData The NNC data as provided by the deck.
|
||||
/// \param editnncData The EDITNNC data as provided by the deck.
|
||||
/// \return A lexicographically sorted vector of the scaled NNC data.
|
||||
/// For each entry entry.cell1<entry.cell2 will hold for convenience.
|
||||
std::vector<Opm::NNCdata> sortNncAndApplyEditnnc(const std::vector<Opm::NNCdata>& nncData, std::vector<Opm::NNCdata> editnncData,
|
||||
bool log = true);
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user