currentModel changes to avoid recalculations of the modelTransform

This commit is contained in:
rowanc1
2014-05-02 13:54:45 -07:00
parent 1dd9109f22
commit cb4f699be5
2 changed files with 9 additions and 7 deletions
+4
View File
@@ -27,6 +27,7 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
def forward(self, m, RHS, CalcFields, F=None):
self.curModel = m
F = F or FieldsTDEM(self.mesh, self.survey)
dtFact = None
@@ -45,6 +46,7 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
return F
def adjoint(self, m, RHS, CalcFields, F=None):
self.curModel = m
F = F or FieldsTDEM(self.mesh, self.survey)
dtFact = None
@@ -77,6 +79,7 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
* Compute \\\(\\\\vec{w} = -\\\mathbf{Q} \\\\vec{y}\\\)
"""
self.curModel = m
u = u or self.fields(m)
p = self.Gvec(m, v, u)
y = self.solveAh(m, p)
@@ -98,6 +101,7 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
* Compute \\\(\\\\vec{w} = -\\\mathbf{G}^\\\\top y\\\)
"""
self.curModel = m
u = u or self.fields(m)
if not isinstance(v, self.dataPair):
+5 -7
View File
@@ -68,6 +68,7 @@ class ProblemTDEM_b(BaseTDEMProblem):
Multiply G by a vector
"""
u = u or self.fields(m)
self.curModel = m
# Note: Fields has shape (nF/E, nTx, nT+1)
# However, p will only really fill (:,:,1:nT+1)
@@ -75,8 +76,7 @@ class ProblemTDEM_b(BaseTDEMProblem):
p = FieldsTDEM(self.mesh, self.survey)
p[:, 'b', :] = 0.0 # b at all times is zero.
p[:, 'e', 0] = 0.0 # fake initial fields
curModel = self.mapping.transform(m)
c = self.mesh.getEdgeInnerProductDeriv(curModel)*self.mapping.transformDeriv(m)*vec
c = self.mesh.getEdgeInnerProductDeriv(self.curTModel)*self.curTModelDeriv*vec
for i in range(1,self.nT+1):
# TODO: G[1] may be dependent on the model
# for a galvanic source (deriv of the dc problem)
@@ -95,6 +95,8 @@ class ProblemTDEM_b(BaseTDEMProblem):
Multiply G.T by a vector
"""
u = u or self.fields(m)
self.curModel = m
nTx, nE = self.survey.nTx, self.mesh.nE
tmp = np.zeros(nE)
# Here we can do internal multiplications of Gt*v and then multiply by MsigDeriv.T in one go.
@@ -103,9 +105,7 @@ class ProblemTDEM_b(BaseTDEMProblem):
if nTx > 1:
vu = vu.sum(axis=1)
tmp += vu
curModel = self.mapping.transform(m)
p = -mkvc(self.mapping.transformDeriv(m).T*self.mesh.getEdgeInnerProductDeriv(curModel).T*tmp)
p = -mkvc(self.curTModelDeriv.T*(self.mesh.getEdgeInnerProductDeriv(self.curTModel).T*tmp))
return p
def solveAh(self, m, p):
@@ -156,7 +156,6 @@ class ProblemTDEM_b(BaseTDEMProblem):
y_e = self.MeSigmaI*self.mesh.edgeCurl.T*self.MfMui*y_b - self.MeSigmaI*p[:,'e',tInd+1]
return {'b':y_b, 'e':y_e}
self.curModel = m
return self.forward(m, AhRHS, AhCalcFields)
def solveAht(self, m, p):
@@ -230,7 +229,6 @@ class ProblemTDEM_b(BaseTDEMProblem):
y_e += - self.MeSigmaI*p[:,'e',tInd]
return {'b':y_b, 'e':y_e}
self.curModel = m
return self.adjoint(m, AhtRHS, AhtCalcFields)
####################################################