[fdfd] minor fixes and more tests
This commit is contained in:
parent
07b16ad86a
commit
87bb3af3f9
6 changed files with 392 additions and 15 deletions
|
|
@ -128,6 +128,11 @@ def stretch_with_scpml(
|
|||
dx_ai = dxes[0][axis].astype(complex)
|
||||
dx_bi = dxes[1][axis].astype(complex)
|
||||
|
||||
if thickness == 0:
|
||||
dxes[0][axis] = dx_ai
|
||||
dxes[1][axis] = dx_bi
|
||||
return dxes
|
||||
|
||||
pos = numpy.hstack((0, dx_ai.cumsum()))
|
||||
pos_a = (pos[:-1] + pos[1:]) / 2
|
||||
pos_b = pos[:-1]
|
||||
|
|
@ -153,10 +158,7 @@ def stretch_with_scpml(
|
|||
def l_d(x: NDArray[numpy.float64]) -> NDArray[numpy.float64]:
|
||||
return (x - bound) / (pos[-1] - bound)
|
||||
|
||||
if thickness == 0:
|
||||
slc = slice(None)
|
||||
else:
|
||||
slc = slice(-thickness, None)
|
||||
slc = slice(-thickness, None)
|
||||
|
||||
dx_ai[slc] *= 1 + 1j * s_function(l_d(pos_a[slc])) / d / s_correction
|
||||
dx_bi[slc] *= 1 + 1j * s_function(l_d(pos_b[slc])) / d / s_correction
|
||||
|
|
|
|||
|
|
@ -48,9 +48,11 @@ def _scipy_qmr(
|
|||
logger.info(f'Solver residual at iteration {ii} : {cur_norm}')
|
||||
|
||||
if 'callback' in kwargs:
|
||||
callback = kwargs['callback']
|
||||
|
||||
def augmented_callback(xk: ArrayLike) -> None:
|
||||
log_residual(xk)
|
||||
kwargs['callback'](xk)
|
||||
callback(xk)
|
||||
|
||||
kwargs['callback'] = augmented_callback
|
||||
else:
|
||||
|
|
@ -118,15 +120,15 @@ def generic(
|
|||
Pl, Pr = operators.e_full_preconditioners(dxes)
|
||||
|
||||
if adjoint:
|
||||
A = (Pl @ A0 @ Pr).H
|
||||
b = Pr.H @ b0
|
||||
A = (Pl @ A0 @ Pr).T.conjugate()
|
||||
b = Pr.T.conjugate() @ b0
|
||||
else:
|
||||
A = Pl @ A0 @ Pr
|
||||
b = Pl @ b0
|
||||
|
||||
if E_guess is not None:
|
||||
if adjoint:
|
||||
x0 = Pr.H @ E_guess
|
||||
x0 = Pr.T.conjugate() @ E_guess
|
||||
else:
|
||||
x0 = Pl @ E_guess
|
||||
matrix_solver_opts['x0'] = x0
|
||||
|
|
@ -134,7 +136,7 @@ def generic(
|
|||
x = matrix_solver(A.tocsr(), b, **matrix_solver_opts)
|
||||
|
||||
if adjoint:
|
||||
x0 = Pl.H @ x
|
||||
x0 = Pl.T.conjugate() @ x
|
||||
else:
|
||||
x0 = Pr @ x
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue