Files
opm-common/python/sunbeam/schedule.py
2017-01-13 12:52:50 +01:00

80 lines
2.1 KiB
Python

import libsunbeam as lib
from .sunbeam import delegate
@delegate(lib.Schedule)
class Schedule(object):
def __repr__(self):
lt = len(self.timesteps)
lw = len(self.wells)
return 'Schedule(timesteps: %d, wells: %d)' % (lt, lw)
@property
def wells(self):
return map(Well, self._wells)
def group(self, name):
return Group(self._group(name), self)
@property
def groups(self):
def mk(x): return Group(x, self)
def not_field(x): return x.name != 'FIELD'
return map(mk, filter(not_field, self._groups))
@delegate(lib.Well)
class Well(object):
def pos(self, timestep = None):
if timestep is None:
return self.I(), self.J(), self.ref()
return self.I(timestep), self.J(timestep), self.ref(timestep)
def __repr__(self):
return 'Well(name = "%s")' % self.name
@staticmethod
def defined(timestep):
def fn(well): return well.isdefined(timestep)
return fn
@staticmethod
def injector(timestep):
def fn(well): return well.isinjector(timestep)
return fn
@staticmethod
def producer(timestep):
def fn(well): return well.isproducer(timestep)
return fn
# using the names flowing and closed for functions that test if a well is
# opened or closed at some point, because we might want to use the more
# imperative words 'open' and 'close' (or 'shut') for *changing* the status
# later
@staticmethod
def flowing(timestep):
def fn(well): return well.status(timestep) == 'OPEN'
return fn
@staticmethod
def closed(timestep):
def fn(well): return well.status(timestep) == 'SHUT'
return fn
@staticmethod
def auto(timestep):
def fn(well): return well.status(timestep) == 'AUTO'
return fn
@delegate(lib.Group)
class Group(object):
def __init__(self, _, schedule):
self._schedule = schedule
def wells(self, timestep):
names = self._wellnames(timestep)
wells = { well.name: well for well in self._schedule.wells }
return map(wells.__getitem__, filter(wells.__contains__, names))