start of using PropMaps for EB formulation

This commit is contained in:
Lindsey
2015-06-01 14:52:39 -07:00
parent 3df2140a88
commit 27c8da341d
+93 -72
View File
@@ -1,6 +1,16 @@
from SimPEG import Survey, Problem, Utils, Models, np, sp, Solver as SimpegSolver
from SimPEG import Survey, Problem, Utils, Models, Maps, PropMaps, np, sp, Solver as SimpegSolver
from scipy.constants import mu_0
class EMPropMap(Maps.PropMap):
sigma = Maps.Property("Electrical Conductivity", defaultInvProp = True)
mui = Maps.Property("Inverse Magnetic Permeability", defaultVal = 1./mu_0)
# rho = Maps.Property("Electrical Resistivity")
# mu = Maps.Property("Inverse Magnetic Permeability", defaultVal = 1./mu_0)
# Do some error checking: only 1 of sigma, rho can be InvProp similar story with mu and mui
# Also ensure that sigma and rho are reciprocals of one another ""
class BaseEMProblem(Problem.BaseProblem):
def __init__(self, mesh, **kwargs):
@@ -9,6 +19,8 @@ class BaseEMProblem(Problem.BaseProblem):
surveyPair = Survey.BaseSurvey
dataPair = Survey.Data
PropMap = EMPropMap
Solver = SimpegSolver
solverOpts = {}
@@ -29,89 +41,98 @@ class BaseEMProblem(Problem.BaseProblem):
####################################################
# Mu
@property
def mu(self):
if getattr(self, '_mu', None) is None:
# if getattr(self, '_mui', None) is not None:
# self._mu = sel
self._mu = mu_0
return self._mu
@mu.setter
def mu(self, value):
if getattr(self, '_MfMui', None) is not None:
del self._MfMui
if getattr(self, '_MfMuiI', None) is not None:
del self._MfMuiI
if getattr(self, '_MeMu', None) is not None:
del delf._MeMu
if getattr(self, '_MeMuI', None) is not None:
del self._MeMuI
self._mu = value
# @property
# def mu(self):
# if getattr(self, '_mu', None) is None:
# # if getattr(self, '_mui', None) is not None:
# # self._mu = sel
# self._mu = mu_0
# return self._mu
# @mu.setter
# def mu(self, value):
# if getattr(self, '_MfMui', None) is not None:
# del self._MfMui
# if getattr(self, '_MfMuiI', None) is not None:
# del self._MfMuiI
# if getattr(self, '_MeMu', None) is not None:
# del delf._MeMu
# if getattr(self, '_MeMuI', None) is not None:
# del self._MeMuI
# self._mu = value
# TODO: hardcoded to assume diagonal mu
@property
def mui(self):
if getattr(self, '_mui', None) is None:
self._mui = 1./mu_0
return self._mui
@mui.setter
def mui(self, value):
if getattr(self, '_MfMui', None) is not None:
del self._MfMui
if getattr(self, '_MfMuiI', None) is not None:
del self._MfMuiI
if getattr(self, '_MeMu', None) is not None:
del delf._MeMu
if getattr(self, '_MeMuI', None) is not None:
del self._MeMuI
self._mui = value
# @property
# def mui(self):
# if getattr(self, '_mui', None) is None:
# self._mui = 1./mu_0
# return self._mui
# @mui.setter
# def mui(self, value):
# if getattr(self, '_MfMui', None) is not None:
# del self._MfMui
# if getattr(self, '_MfMuiI', None) is not None:
# del self._MfMuiI
# if getattr(self, '_MeMu', None) is not None:
# del delf._MeMu
# if getattr(self, '_MeMuI', None) is not None:
# del self._MeMuI
# self._mui = value
# Sigma
# deleteTheseOnModelUpdate = ['_MeSigma', '_MeSigmaI','_MfSigmai','_MfSigmaiI']
@property
def sigma(self):
if getattr(self, '_sigma', None) is None:
self._sigma = self.curModel.transform
return self._sigma
@sigma.setter
def sigma(self, value):
if getattr(self, '_MeSigma', None) is not None:
del self._MeSigma
if getattr(self, '_MeSigmaI', None) is not None:
del self._MeSigmaI
if getattr(self, '_MfSigmai', None) is not None:
del delf._MfSigmai
if getattr(self, '_MfSigmaiI', None) is not None:
del self._MfSigmaiI
self._sigma = value
# @property
# def sigma(self):
# if getattr(self, '_sigma', None) is None:
# self._sigma = self.curModel.transform
# return self._sigma
# @sigma.setter
# def sigma(self, value):
# if getattr(self, '_MeSigma', None) is not None:
# del self._MeSigma
# if getattr(self, '_MeSigmaI', None) is not None:
# del self._MeSigmaI
# if getattr(self, '_MfSigmai', None) is not None:
# del delf._MfSigmai
# if getattr(self, '_MfSigmaiI', None) is not None:
# del self._MfSigmaiI
# self._sigma = value
# def dsigma_dm(self):
# return self.curModel.transformDeriv
# TODO: hardcoded to assume diagonal sigma
@property
def sigmai(self):
if getattr(self, '_sigmai', None) is None:
self._sigmai = 1./self.curModel.transform
return self._sigmai
@sigmai.setter
def sigmai(self, value):
if getattr(self, '_MeSigma', None) is not None:
del self._MeSigma
if getattr(self, '_MeSigmaI', None) is not None:
del self._MeSigmaI
if getattr(self, '_MfSigmai', None) is not None:
del delf._MfSigmai
if getattr(self, '_MfSigmaiI', None) is not None:
del self._MfSigmaiI
self._sigma = value
# @property
# def sigmai(self):
# if getattr(self, '_sigmai', None) is None:
# self._sigmai = 1./self.curModel.transform
# return self._sigmai
# @sigmai.setter
# def sigmai(self, value):
# if getattr(self, '_MeSigma', None) is not None:
# del self._MeSigma
# if getattr(self, '_MeSigmaI', None) is not None:
# del self._MeSigmaI
# if getattr(self, '_MfSigmai', None) is not None:
# del delf._MfSigmai
# if getattr(self, '_MfSigmaiI', None) is not None:
# del self._MfSigmaiI
# self._sigma = value
####################################################
# Mass Matrices
####################################################
# TODO: Link to EMPropMap
# if Prop
# deleteTheseOnModelUpdate = ['_MeSigma', '_MeSigmaI','_MfSigmai','_MfSigmaiI']
@property
def deleteTheseOnModelUpdate(self):
toDelete = []
if self.mapping.sigmaMap is not None:
toDelete += ['_MeSigma', '_MeSigmaI','_MfSigmai','_MfSigmaiI']
return toDelete
@property
def Me(self):
if getattr(self, '_Me', None) is None:
@@ -129,13 +150,13 @@ class BaseEMProblem(Problem.BaseProblem):
@property
def MfMui(self):
if getattr(self, '_MfMui', None) is None:
self._MfMui = self.mesh.getFaceInnerProduct(self.mui)
self._MfMui = self.mesh.getFaceInnerProduct(self.curModel.mui)
return self._MfMui
@property
def MfMuiI(self):
if getattr(self, '_MfMuiI', None) is None:
self._MfMuiI = self.mesh.getFaceInnerProduct(self.mui, invMat=True)
self._MfMuiI = self.mesh.getFaceInnerProduct(self.curModel.mui, invMat=True)
return self._MfMuiI
@property
@@ -155,7 +176,7 @@ class BaseEMProblem(Problem.BaseProblem):
@property
def MeSigma(self):
if getattr(self, '_MeSigma', None) is None:
self._MeSigma = self.mesh.getEdgeInnerProduct(self.sigma)
self._MeSigma = self.mesh.getEdgeInnerProduct(self.curModel.sigma)
return self._MeSigma
# def dMeSigma_dsigma(self, u):
@@ -164,7 +185,7 @@ class BaseEMProblem(Problem.BaseProblem):
@property
def MeSigmaI(self):
if getattr(self, '_MeSigmaI', None) is None:
self._MeSigmaI = self.mesh.getEdgeInnerProduct(self.sigma, invMat=True)
self._MeSigmaI = self.mesh.getEdgeInnerProduct(self.curModel.sigma, invMat=True)
return self._MeSigmaI
# def dMeSigmaI_dsigma(self,u)