### Solver/Preconditioner for the gauged vector potential formulation (curl curl equation)

137
views
0
4 months ago by
Hi everyone,

I'm currently working on a nonlinear, Coulomb gauged vector potential formulation (curl curl equation) for three‐dimensional magnetostatics. Gauging is imposed via a penalty term.
Furthermore I'm using H(curl)-conforming edge elements. But I'm facing convergence problems trying to solve the nonlinear variational problem.
The convergence criterion is set to 1e-09 (absolute tolerance). I have tried direct solvers and different combinations of iterative solver/ preconditioners but i was not able to
achieve convergence.
Varying the penalty parameter also had not that much of an impact on the convergence behavior.

Here is a simplified working example to reproduce the problem:

from dolfin import *

# Create mesh and define function space
mesh = UnitCubeMesh(10, 10, 10)
V = FunctionSpace(mesh, "N1curl", 1)

# Dirichlet boundary:
def E0_boundary(x, on_boundary):
return on_boundary

c = Expression(("0.0", "10*x[0]", "0.0"), degree=1)
bc = DirichletBC(V, c, E0_boundary)

# Define functions
du = TrialFunction(V)
v  = TestFunction(V)
u  = Function(V)

# parameters
mu0 = 4.0*pi*1e-7
alpha= 1/mu0

# Magnetic field strength
H= 1/mu0*curl(u)

# Variational Formulation (in this special case: linear)
F = inner(curl(v), H)*dx + alpha*div(v)*div(u)*dx

# Compute Jacobian of F
J = derivative(F, u, du)

# Solve variational problem
problem = NonlinearVariationalProblem(F, u, bc, J)
solver  = NonlinearVariationalSolver(problem)

solver.parameters['newton_solver']['absolute_tolerance'] = 1E-9
solver.parameters['newton_solver']['relative_tolerance'] = 1E-35
solver.parameters['newton_solver']['maximum_iterations'] = 10
solver.parameters['newton_solver']['linear_solver'] = 'gmres'
solver.parameters['newton_solver']['preconditioner'] = 'hypre_amg'

solver.solve()​

Does anyone have experience regarding this convergence problem for the gauged vector potential formulation?
I will be grateful for any help.

Best regards,

Dustin
Community: FEniCS Project
Check the works of Xu and Hiptmair.

https://www.math.psu.edu/xu/teaching/13FallPKU/Papers/Hiptmair.R%3BXu.J2007b.pdf
https://pdfs.semanticscholar.org/cb77/bb244f3528c938c98ae3b5ebdc6cd33547f2.pdf

Preconditioning H(curl) problems is entirely non-trivial. Examine the Dolfin curl-curl demo.
written 4 months ago by Nate
I've already taken a look at the curl-curl demo which utilizes the hypre_ams preconditioner and adapted it for my problem.
Works nicely.
But are there any other reliable/good Solver/Preconditioner for the curl-curl problem?
In the future I want to model magnetomechanics and adapting the auxiliary space preconditioning is not a trivial task.
So i also wanted to explore some other options.
written 4 months ago by DustinG