From a649129acf85bb1a614ab8d06d4bf25956962dbb Mon Sep 17 00:00:00 2001 From: rowanc1 Date: Thu, 20 Feb 2014 16:04:11 -0800 Subject: [PATCH] first attempt at activeCell model --- SimPEG/Model.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/SimPEG/Model.py b/SimPEG/Model.py index 1fcd2f0b..5cc26dd1 100644 --- a/SimPEG/Model.py +++ b/SimPEG/Model.py @@ -224,6 +224,47 @@ class Mesh2Mesh(BaseModel): def transformDeriv(self, m): return self.P + +class ActiveModel(BaseModel): + """ + Active model parameters. + + """ + + indActive = None #: Active Cells + valInactive = None #: Values of inactive Cells + nC = None #: Number of cells in the full model + + def __init__(self, mesh, indActive, valInactive, nC=None): + self.mesh = mesh + + self.nC = nC or mesh.nC + + if indActive.dtype is not bool: + z = np.zeros(mesh.nC,dtype=bool) + z[indActive] = True + indActive = z + self.indActive = indActive + self.indInactive = np.logical_not(indActive) + if type(valInactive) in [float, int, long]: + valInactive = np.ones(mesh.nC)*float(valInactive) + + valInactive[self.indActive] = 0 + self.valInactive = valInactive + + inds = np.nonzero(self.indActive)[0] + self.P = sp.csr_matrix((np.ones(inds.size),(inds, range(inds.size))), shape=(self.nC, self.nP)) + + @property + def nP(self): + """Number of parameters in the model.""" + return self.indActive.sum() + + def transform(self, m): + return self.P*m + self.valInactive + def transformDeriv(self, m): + return self.P + class ComboModel(BaseModel): """Combination of various models."""