Solver updates.

This commit is contained in:
rowanc1
2014-05-16 19:35:50 -07:00
parent 6aada6d61d
commit bb8dbd8c86
2 changed files with 18 additions and 18 deletions
+6 -6
View File
@@ -28,8 +28,8 @@ class BaseFDEMProblem(BaseEMProblem):
for freq in self.survey.freqs:
A = self.getA(freq)
rhs = RHS(freq)
solver = self.Solver(A, **self.solverOpts)
sol = solver.solve(rhs)
Ainv = self.Solver(A, **self.solverOpts)
sol = Ainv * rhs
for fieldType in self.storeTheseFields:
Txs = self.survey.getTransmitters(freq)
F[Txs, fieldType] = CalcFields(sol, freq, fieldType)
@@ -46,12 +46,12 @@ class BaseFDEMProblem(BaseEMProblem):
for freq in self.survey.freqs:
A = self.getA(freq)
solver = self.Solver(A, **self.solverOpts)
Ainv = self.Solver(A, **self.solverOpts)
for tx in self.survey.getTransmitters(freq):
u_tx = u[tx, self.solType]
w = self.getADeriv(freq, u_tx, v)
Ainvw = solver.solve(w)
Ainvw = Ainv * w
for rx in tx.rxList:
fAinvw = self.calcFields(Ainvw, freq, rx.projField)
P = lambda v: rx.projectFieldsDeriv(tx, self.mesh, u, v)
@@ -78,7 +78,7 @@ class BaseFDEMProblem(BaseEMProblem):
for freq in self.survey.freqs:
AT = self.getA(freq).T
solver = self.Solver(AT, **self.solverOpts)
ATinv = self.Solver(AT, **self.solverOpts)
for tx in self.survey.getTransmitters(freq):
u_tx = u[tx, self.solType]
@@ -87,7 +87,7 @@ class BaseFDEMProblem(BaseEMProblem):
PTv = rx.projectFieldsDeriv(tx, self.mesh, u, v[tx, rx], adjoint=True)
fPTv = self.calcFields(PTv, freq, rx.projField, adjoint=True)
w = solver.solve( fPTv )
w = ATinv * fPTv
Jtv_rx = - self.getADeriv(freq, u_tx, w, adjoint=True)
df_dm = self.calcFieldsDeriv(u_tx, freq, rx.projField, PTv, adjoint=True)
+12 -12
View File
@@ -32,22 +32,22 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
F = F or FieldsTDEM(self.mesh, self.survey)
dtFact = None
Asolve = None
Ainv = None
for tInd, dt in enumerate(self.timeSteps):
if dt != dtFact:
dtFact = dt
if Asolve is not None:
Asolve.clean()
if Ainv is not None:
Ainv.clean()
A = self.getA(tInd)
if self.verbose: print 'Factoring... (dt = ' + str(dt) + ')'
Asolve = self.Solver(A, **self.solverOpts)
Ainv = self.Solver(A, **self.solverOpts)
if self.verbose: print 'Done'
rhs = RHS(tInd, F)
sol = Asolve.solve(rhs)
sol = Ainv * rhs
if sol.ndim == 1:
sol.shape = (sol.size,1)
F[:,:,tInd+1] = CalcFields(sol, tInd)
Asolve.clean()
Ainv.clean()
return F
def adjoint(self, m, RHS, CalcFields, F=None):
@@ -55,22 +55,22 @@ class BaseTDEMProblem(BaseTimeProblem, BaseEMProblem):
F = F or FieldsTDEM(self.mesh, self.survey)
dtFact = None
Asolve = None
Ainv = None
for tInd, dt in reversed(list(enumerate(self.timeSteps))):
if dt != dtFact:
dtFact = dt
if Asolve is not None:
Asolve.clean()
if Ainv is not None:
Ainv.clean()
A = self.getA(tInd)
if self.verbose: print 'Factoring... (dt = ' + str(dt) + ')'
Asolve = self.Solver(A, **self.solverOpts)
Ainv = self.Solver(A, **self.solverOpts)
if self.verbose: print 'Done'
rhs = RHS(tInd, F)
sol = Asolve.solve(rhs)
sol = Ainv * rhs
if sol.ndim == 1:
sol.shape = (sol.size,1)
F[:,:,tInd+1] = CalcFields(sol, tInd)
Asolve.clean()
Ainv.clean()
return F
def Jvec(self, m, v, u=None):