mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-28 16:14:19 +08:00
Lots of work on time domain problem.
This commit is contained in:
@@ -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 @@
|
||||
from BaseTDEM import DataTDEM1D
|
||||
from BaseTDEM import DataTDEM1D, ProblemTDEM1D
|
||||
Reference in New Issue
Block a user