Skip to content

Commit

Permalink
ENH: ert.simulate by specifying current, storing u/i/r and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
halbmy committed Dec 13, 2024
1 parent beaeba7 commit a149879
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions pygimli/physics/ert/ert.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ def simulate(mesh, scheme, res, **kwargs):
absolute phase error, if not given, data['iperr'] or noiseLevel is used
contactImpedances float|iterables
contact impedances for being used with CEM model
current : float
current to be assumed
Returns
-------
Expand Down Expand Up @@ -170,9 +172,9 @@ def simulate(mesh, scheme, res, **kwargs):

ret = pg.DataContainerERT(scheme)
# just to be sure that we don't work with artifacts
ret['u'] *= 0.0
ret['i'] *= 0.0
ret['r'] *= 0.0
ret['u'] = 0.0
ret['i'] = 0.0
ret['r'] = 0.0

if isArrayData:
rhoa = np.zeros((len(res), scheme.size()))
Expand All @@ -193,11 +195,13 @@ def simulate(mesh, scheme, res, **kwargs):
if fop.complex():
pg.critical('Implement me')
else:
ret["u"] = dMap.data(scheme)
ret["i"] = np.ones(ret.size())
ret['r'] = dMap.data(scheme)
ret['i'] = kwargs.pop("current", 1.0)
ret['u'] = ret['r'] * ret['i']

if returnFields:
return pg.Matrix(fop.solution())

return ret
else:
if fop.complex():
Expand Down Expand Up @@ -237,15 +241,17 @@ def simulate(mesh, scheme, res, **kwargs):
absoluteCurrent=1))
if verbose:
pg.info("Data error estimate (min:max) ",
min(ret('err')), ":", max(ret('err')))
min(ret['err']), ":", max(ret['err']))

rhoa *= 1. + pg.randn(ret.size(), seed=seed) * ret('err')
ret.set('rhoa', rhoa)
ret['rhoa'] = rhoa
if ret.allNoneZero('k'): # also provide r if user changes k later
ret['r'] = ret['rhoa'] / ret['k']

ipError = None
if phia is not None:
if scheme.allNonZero('iperr'):
ipError = scheme('iperr')
ipError = scheme['iperr']
else:
# np.abs(self.data("phia") +TOLERANCE) * 1e-4absoluteError
if noiseLevel > 0.5:
Expand All @@ -254,7 +260,7 @@ def simulate(mesh, scheme, res, **kwargs):
if 'phiErr' in kwargs:
ipError = np.ones(ret.size()) * kwargs.pop('phiErr') / 1000
else:
ipError = abs(ret["phia"]) * noiseLevel
ipError = abs(ret['phia']) * noiseLevel

if verbose:
print("Data IP abs error estimate (min:max) ",
Expand All @@ -272,6 +278,7 @@ def simulate(mesh, scheme, res, **kwargs):
else:
return rhoa

ret['valid'] = 1
if returnFOP:
return ret, fop
else:
Expand Down

0 comments on commit a149879

Please sign in to comment.