Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Complex-valued coarse solver #142

Open
sebastiangrimberg opened this issue Nov 29, 2023 · 2 comments · May be fixed by #310
Open

Complex-valued coarse solver #142

sebastiangrimberg opened this issue Nov 29, 2023 · 2 comments · May be fixed by #310
Labels
driven Related to driven simulations in the frequency domain eigenmode Related to eigenmode simulations enhancement New feature or request performance Related to performance

Comments

@sebastiangrimberg
Copy link
Contributor

sebastiangrimberg commented Nov 29, 2023

The multigrid smoothers have recently been upgraded to smooth using the true complex-valued system matrix for frequency domain applications which, while more expensive per iteration, improves convergence by roughly halving the number of iterations in most observed cases. At high frequencies, the solver is expected to perform worse due to the indefinite nature of the system matrix but even limiting the number of multigrid levels to 1 (with "MGMaxLevels": 1) and using a sparse direct solver does not converge (or takes a large number of iterations). It can be tested that if the system matrix is real (remove lumped ports, absorbing boundary conditions), the solver converges in a constant number of iterations with 1 multigrid level (1 or 2 iterations based on stability of the direct solve and the desired precision), and performs very well even at large-ish frequencies with > 1 multigrid level. These experiments can be validated with the cpw example.

The conclusion is that we probably stand to gain in terms of convergence if the coarse solve (sparse direct solve) is performed on the complex-valued matrix instead of the real approximation A_r + A_i as is done currently. There are two relatively straightforward ways to go about this:

  1. Link to complex-valued STRUMPACK, SuperLU_DIST, and MUMPS and upgrade the MFEM interfaces to support input for a pair of HypreParMatrix representing the real and imaginary parts.
  2. Continue to use the real-valued libraries, but pass the 2x2 block matrix [A_r -A_i; A_i A_r] for the equivalent real formulation to the solver. This will be a more expensive factorization and solve by ~2x than the complex-valued one, but is perhaps easier to implement for testing.
@sebastiangrimberg sebastiangrimberg added enhancement New feature or request performance Related to performance driven Related to driven simulations in the frequency domain eigenmode Related to eigenmode simulations labels Nov 29, 2023
@sebastiangrimberg
Copy link
Contributor Author

This also allows us to more thoroughly investigate complex-shifted Laplacian approaches for the high-frequency regime (it is widely stated that the real shift -omega^2 M -> +omega^2 M hurts convergence at high frequency).

@sebastiangrimberg
Copy link
Contributor Author

We can also keep an eye here on the eigenvalue bounds computed by the Chebyshev smoother at each level. For very high frequencies, the coarser levels may become negative definite after which and sort of shifted-Laplacian approach is counter productive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
driven Related to driven simulations in the frequency domain eigenmode Related to eigenmode simulations enhancement New feature or request performance Related to performance
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant