Added wellsToSrc() function. Use forward declarations in header.
This commit is contained in:
parent
df3592473a
commit
a50bb8ffe9
@ -18,6 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <opm/core/utility/miscUtilities.hpp>
|
#include <opm/core/utility/miscUtilities.hpp>
|
||||||
|
#include <opm/core/grid.h>
|
||||||
|
#include <opm/core/newwells.h>
|
||||||
|
#include <opm/core/fluid/IncompPropertiesInterface.hpp>
|
||||||
#include <opm/core/utility/ErrorMacros.hpp>
|
#include <opm/core/utility/ErrorMacros.hpp>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@ -333,6 +336,27 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Create a src vector equivalent to a wells structure.
|
||||||
|
/// For this to be valid, the wells must be all rate-controlled and
|
||||||
|
/// single-perforation.
|
||||||
|
void wellsToSrc(const Wells& wells, const int num_cells, std::vector<double>& src)
|
||||||
|
{
|
||||||
|
src.resize(num_cells);
|
||||||
|
for (int w = 0; w < wells.number_of_wells; ++w) {
|
||||||
|
if (wells.ctrls[w]->num != 1) {
|
||||||
|
THROW("In wellsToSrc(): well has more than one control.");
|
||||||
|
}
|
||||||
|
if (wells.ctrls[w]->type[0] != RATE) {
|
||||||
|
THROW("In wellsToSrc(): well is BHP, not RATE.");
|
||||||
|
}
|
||||||
|
if (wells.well_connpos[w+1] - wells.well_connpos[w] != 1) {
|
||||||
|
THROW("In wellsToSrc(): well has multiple perforations.");
|
||||||
|
}
|
||||||
|
const double flow = wells.ctrls[w]->target[0];
|
||||||
|
const double cell = wells.well_cells[wells.well_connpos[w]];
|
||||||
|
src[cell] = (wells.type[w] == INJECTOR) ? flow : -flow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
@ -20,15 +20,16 @@
|
|||||||
#ifndef OPM_MISCUTILITIES_HEADER_INCLUDED
|
#ifndef OPM_MISCUTILITIES_HEADER_INCLUDED
|
||||||
#define OPM_MISCUTILITIES_HEADER_INCLUDED
|
#define OPM_MISCUTILITIES_HEADER_INCLUDED
|
||||||
|
|
||||||
|
|
||||||
#include <opm/core/grid.h>
|
|
||||||
#include <opm/core/fluid/IncompPropertiesInterface.hpp>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
struct Wells;
|
||||||
|
struct UnstructuredGrid;
|
||||||
|
|
||||||
namespace Opm
|
namespace Opm
|
||||||
{
|
{
|
||||||
|
|
||||||
|
class IncompPropertiesInterface;
|
||||||
|
|
||||||
/// @brief Computes pore volume of all cells in a grid.
|
/// @brief Computes pore volume of all cells in a grid.
|
||||||
/// @param[in] grid a grid
|
/// @param[in] grid a grid
|
||||||
/// @param[in] props rock and fluid properties
|
/// @param[in] props rock and fluid properties
|
||||||
@ -151,6 +152,12 @@ namespace Opm
|
|||||||
void toBothSat(const std::vector<double>& sw,
|
void toBothSat(const std::vector<double>& sw,
|
||||||
std::vector<double>& sboth);
|
std::vector<double>& sboth);
|
||||||
|
|
||||||
|
/// Create a src vector equivalent to a wells structure.
|
||||||
|
/// For this to be valid, the wells must be all rate-controlled and
|
||||||
|
/// single-perforation.
|
||||||
|
void wellsToSrc(const Wells& wells, const int num_cells, std::vector<double>& src);
|
||||||
|
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
|
||||||
#endif // OPM_MISCUTILITIES_HEADER_INCLUDED
|
#endif // OPM_MISCUTILITIES_HEADER_INCLUDED
|
||||||
|
Loading…
Reference in New Issue
Block a user