Lots of work on time domain problem.

This commit is contained in:
Dave Marchant
2014-02-05 16:28:16 -08:00
parent f1f261243a
commit 2ec86ea09a
2 changed files with 102 additions and 1 deletions
+101
View File
@@ -1,5 +1,7 @@
from SimPEG import Utils
from SimPEG.Data import BaseData
from SimPEG.Problem import BaseProblem
import numpy as np
class DataTDEM1D(BaseData):
@@ -16,3 +18,102 @@ class DataTDEM1D(BaseData):
def __init__(self, **kwargs):
BaseData.__init__(self, **kwargs)
Utils.setKwargs(self, **kwargs)
class MixinInitialFieldCalc(object):
"""docstring for MixinInitialFieldCalc"""
def getInitialFields(self):
pass
# return fields obj
class ProblemTDEM1D(MixinInitialFieldCalc, BaseProblem):
"""docstring for ProblemTDEM1D"""
def __init__(self, mesh, model, **kwargs):
BaseProblem.__init__(self, mesh, model, **kwargs)
# Time stuff ########################################
def dt():
doc = "Size of time steps"
def fget(self):
return self._dt
def fdel(self):
del self._dt
return locals()
dt = property(**dt())
def nsteps():
doc = "Number of steps to take"
def fget(self):
return self._nsteps
def fdel(self):
del self._nsteps
return locals()
nsteps = property(**nsteps())
def tCalc():
doc = "Modelling times"
def fget(self):
t = np.r_[1:self.nsteps[0]+1]*self.dt[0]
for i in range(1,self.dt.size):
t = np.r_[t, np.r_[1:self.nsteps[i]+1]*self.dt[i]+t[-1]]
return t
return locals()
tCalc = property(**tCalc())
def getDt(self, tInd):
return np.concatenate([self.dt[i].repeat(self.nsteps[i]) for i in range(self.dt.size)])[tInd]
def setTimes(self, dt, nsteps):
dt = np.array(dt)
nsteps = np.array(nsteps)
assert dt.size==nsteps.size, "dt, nsteps must be same length"
self._dt = dt
self._nsteps = nsteps
# End Time stuff ########################################
def field(self, m):
F = self.getInitialFields()
Asolve = None
for i, dt in enumerate(self.times):
A = self.getA(i, F)
rhs = self.getRHS(i, F)
if Asolve is None or redoSolver:
Asolve = Solver(A,options=self.solveOpts)
sol = Asolve.Solve(rhs)
self.updateField(sol, F)
return F
class FieldsTDEM(object):
phi0 = None #: Initial electric potential
A0 = None #: Initial magnetic vector potential
e0 = None #: Initial electric field
b0 = None #: Initial magnetic flux density
j0 = None #: Initial current density
h0 = None #: Initial magnetic field
phi = None #: Electric potential
A = None #: Magnetic vector potential
e = None #: Electric field
b = None #: Magnetic flux density
j = None #: Current density
h = None #: Magnetic field
"""docstring for FieldsTDEM"""
def __init__(self, mesh, nTimes, store):
self.nTimes = nTimes
self.nC = mesh.nC
self.nE = mesh.nE
self.nF = mesh.nF
self.nN = mesh.nN
+1 -1
View File
@@ -1 +1 @@
from BaseTDEM import DataTDEM1D
from BaseTDEM import DataTDEM1D, ProblemTDEM1D