added faults

This commit is contained in:
Pål Grønås Drange
2017-01-13 14:30:07 +01:00
parent 70a9ef173e
commit 42fc9b27d1
3 changed files with 53 additions and 0 deletions

View File

@@ -22,6 +22,13 @@ class EclipseState(object):
def cfg(self):
return EclipseConfig(self._cfg())
def faults(self):
"""Returns a map from fault names to list of (i,j,k,D) where D ~ 'X+'"""
fs = {}
for fn in self.faultNames():
fs[fn] = self.faultFaces(fn)
return fs
@delegate(lib.Eclipse3DProperties)
class Eclipse3DProperties(object):

View File

@@ -8,6 +8,10 @@
#include <opm/parser/eclipse/EclipseState/InitConfig/InitConfig.hpp>
#include <opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaultCollection.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaultFace.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/Fault.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/FaceDir.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well.hpp>
#include <opm/parser/eclipse/Parser/Parser.hpp>
@@ -26,6 +30,42 @@ py::list getNNC( const EclipseState& state ) {
l.append( py::make_tuple( x.cell1, x.cell2, x.trans ) );
return l;
}
py::list faultNames( const EclipseState& state ) {
py::list l;
const auto& fc = state.getFaults();
for (size_t i = 0; i < fc.size(); i++) {
const auto& f = fc.getFault(i);
l.append(f.getName());
}
return l;
}
const std::string faceDir( FaceDir::DirEnum dir ) {
switch (dir) {
case FaceDir::DirEnum::XPlus: return "X+";
case FaceDir::DirEnum::XMinus: return "X-";
case FaceDir::DirEnum::YPlus: return "Y+";
case FaceDir::DirEnum::YMinus: return "Y-";
case FaceDir::DirEnum::ZPlus: return "Z+";
case FaceDir::DirEnum::ZMinus: return "Z-";
}
return "Unknown direction";
}
py::list faultFaces( const EclipseState& state, const std::string& name ) {
py::list l;
const auto& gr = state.getInputGrid(); // used for global -> IJK
const auto& fc = state.getFaults();
const Fault& f = fc.getFault(name);
for (const auto& ff : f) {
// for each fault face
for (size_t g : ff) {
// for global index g in ff
const auto ijk = gr.getIJK(g);
l.append(py::make_tuple(ijk[0], ijk[1], ijk[2], faceDir(ff.getDir())));
}
}
return l;
}
}
namespace cfg {
@@ -192,6 +232,8 @@ py::class_< EclipseState >( "EclipseState", py::no_init )
.def( "_cfg", &EclipseState::cfg, ref() )
.def( "has_input_nnc", &EclipseState::hasInputNNC )
.def( "input_nnc", state::getNNC )
.def( "faultNames", state::faultNames )
.def( "faultFaces", state::faultFaces )
;
py::class_< EclipseGrid >( "EclipseGrid", py::no_init )

View File

@@ -51,3 +51,7 @@ class TestState(unittest.TestCase):
self.assertFalse(sim.useCPR())
self.assertTrue(sim.hasDISGAS())
self.assertTrue(sim.hasVAPOIL())
def test_faults(self):
self.assertEquals([], self.spe3.faultNames())
self.assertEquals({}, self.spe3.faults())