Files
Magne Sjaastad 04091ad77d #4266 Update libecl
Use commit 0e1e780fd6f18ce93119061e36a4fca9711bc020

Excluded multibuild folder, as this caused git issues
2019-05-09 08:40:32 +02:00

128 lines
3.6 KiB
Python

#!/usr/bin/env python
# Copyright (C) 2017 Equinor ASA, Norway.
#
# This file is part of ERT - Ensemble based Reservoir Tool.
#
# ERT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ERT is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
#
# See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
# for more details.
class Cell(object):
def __init__(self, grid, global_index):
self._grid = grid
self._idx = global_index
self._ijk = grid.get_ijk(global_index=self._idx)
self._aidx = grid.get_active_index(global_index=self._idx)
@property
def volume(self):
return self._grid.cell_volume(global_index=self._idx)
@property
def global_index(self):
return self._idx
@property
def active_index(self):
return self._aidx
@property
def ijk(self):
return self._ijk
@property
def i(self):
return self._ijk[0]
@property
def j(self):
return self._ijk[1]
@property
def k(self):
return self._ijk[2]
@property
def active(self):
return self._aidx >= 0
def eval(self, kw):
return self._grid.grid_value(kw, self.i, self.j, self.k)
@property
def fracture(self):
return self._grid.active_fracture_index(global_index=self._idx)
@property
def dz(self):
return self._grid.cell_dz(global_index=self._idx)
@property
def dimension(self):
return self._grid.get_cell_dims(global_index=self._idx)
@property
def valid_geometry(self):
return self._grid.valid_cell_geometry(global_index=self._idx)
@property
def valid(self):
return not self._grid.cell_invalid(global_index=self._idx)
def __contains__(self, coord):
"""
Will check if this cell contains point given by world
coordinates (x,y,z)=coord.
"""
if len(coord) != 3:
raise ValueError('Cell contains takes a triple (x,y,z), was given %s.' % coord)
x,y,z = coord
return self._grid._cell_contains(self._idx, x,y,z)
def __eq__(self, other):
if isinstance(other, Cell):
idx_eq = self.global_index == other.global_index
return idx_eq and self._grid == other._grid
return NotImplemented
def __neq__(self, other):
if isinstance(other, Cell):
return not self == other
return NotImplemented
def hash(self):
return hash((self._idx, self._aidx, self.ijk))
@property
def coordinate(self):
return self._grid.get_xyz(global_index=self._idx)
@property
def corners(self):
"""
Return xyz for each of the eight vertices, indexed by:
lower layer: upper layer
2---3 6---7
| | | |
0---1 4---5
"""
cs = lambda c : self._grid.get_cell_corner(c, global_index=self._idx)
return [cs(i) for i in range(8)]
def __repr__(self):
act = 'active' if self.active else 'inactive'
pos = '(%.3f, %.3f, %.3f)' % self.coordinate
cnt = '%d, %d, %d, %s, %s, grid=%s' % (self.i, self.j, self.k,
act, pos,
self._grid.get_name())
return 'Cell(%s)' % cnt