mirror of
https://github.com/wassname/simpeg.git
synced 2026-07-02 22:47:42 +08:00
Memory clean ups with fancier fields objects.
This commit is contained in:
@@ -15,11 +15,12 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
|
||||
BaseTimeProblem.__init__(self, mesh, mapping=mapping, **kwargs)
|
||||
|
||||
surveyPair = SurveyTDEM
|
||||
_FieldsTDEM_pair = FieldsTDEM #: used for the forward calculation only
|
||||
|
||||
def fields(self, m):
|
||||
self.curModel = m
|
||||
# Create a fields storage object
|
||||
F = FieldsTDEM(self.mesh, self.survey)
|
||||
F = self._FieldsTDEM_pair(self.mesh, self.survey)
|
||||
for tx in self.survey.txList:
|
||||
# Set the initial conditions
|
||||
F[tx,:,0] = tx.getInitialFields(self.mesh)
|
||||
|
||||
+18
-3
@@ -3,6 +3,21 @@ from SimPEG.Utils import mkvc
|
||||
import numpy as np
|
||||
from SurveyTDEM import SurveyTDEM, FieldsTDEM
|
||||
|
||||
|
||||
class FieldsTDEM_e_from_b(FieldsTDEM):
|
||||
"""Fancy Field Storage for a TDEM survey."""
|
||||
knownFields = {'b': 'F'}
|
||||
aliasFields = {'e': ['b','E','e_from_b']}
|
||||
|
||||
def startup(self):
|
||||
self.MeSigmaI = self.survey.prob.MeSigmaI
|
||||
self.edgeCurlT = self.survey.prob.mesh.edgeCurl.T
|
||||
self.MfMui = self.survey.prob.MfMui
|
||||
|
||||
def e_from_b(self, b, ind):
|
||||
# TODO: implement non-zero js
|
||||
return self.MeSigmaI*(self.edgeCurlT*(self.MfMui*b))
|
||||
|
||||
class ProblemTDEM_b(BaseTDEMProblem):
|
||||
"""
|
||||
Time-Domain EM problem - B-formulation
|
||||
@@ -21,6 +36,7 @@ class ProblemTDEM_b(BaseTDEMProblem):
|
||||
solType = 'b' #: Type of the solution, in this case the 'b' field
|
||||
|
||||
surveyPair = SurveyTDEM
|
||||
_FieldsTDEM_pair = FieldsTDEM_e_from_b #: used for the forward calculation only
|
||||
|
||||
####################################################
|
||||
# Internal Methods
|
||||
@@ -45,12 +61,11 @@ class ProblemTDEM_b(BaseTDEMProblem):
|
||||
|
||||
if self.solType == 'b':
|
||||
b = sol
|
||||
e = self.MeSigmaI*(self.mesh.edgeCurl.T*(self.MfMui*b))
|
||||
# Todo: implement non-zero js
|
||||
# e = self.MeSigmaI*(self.mesh.edgeCurl.T*(self.MfMui*b))
|
||||
else:
|
||||
raise NotImplementedError('solType "%s" is not implemented in CalcFields.' % self.solType)
|
||||
|
||||
return {'b':b, 'e':e}
|
||||
return {'b':b}
|
||||
|
||||
|
||||
####################################################
|
||||
|
||||
@@ -107,9 +107,8 @@ class TDEM_bDerivTests(unittest.TestCase):
|
||||
A = sp.bmat([[a11,a12],[a21,a22]])
|
||||
|
||||
f = prb.fields(sigma)
|
||||
f[:,:,0] = {'e':0,'b':0}
|
||||
f[:,:,0] = {'b':0}
|
||||
f[:,'b',1] = 0
|
||||
f[:,'e',1] = np.random.rand(prb.mesh.nE,1)
|
||||
|
||||
self.assertTrue(np.all(np.r_[f[:,'b',1],f[:,'e',1]] == f.tovec()))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user