I am working on indefinite Maxwell’s equations for scattering problems, and I would like to implement and try may be the Optimized Schwarz DDM. So, I plan to inheriting may be the linear solver classses, and implement this Krylov methods.
Is there any project or example where a new Krylov linear solver or preconditioner has been attempted ? And if yes, can you please share a link to that. It would be a great starting point for me.
I don’t think the BDDC preconditioner or the FETI-DP is enough for my scattering problems. I have strong material contrasts.
Is the domain decomposition in NGSolve happening at algebraic or geometric level ?
If I plan to work on this, can I get some support or occasional help if needed ?
I think I have to more specific. By optimized Schwarz methods, I may have to explicitly impose some transmission conditions at the interface between the sub-domains. The asmPreconditioner.cpp in myLittleNGSolve is of course a wonderful place to start with. But the tricky thing would be to impose the transmission conditions, and may be to edit the local matrix elements, corresponding to the interface. Are any similar attempts been done or any projects or examples exist, may be for a starting point ?
The domain decomposition happens geometrically. When a mesh is loaded into a parallel context, or when it is explicitely distributed, it gets partitioned by METIS and one part gets sent to each proc .
Some krylov space methods (gmres, cg, minres) are implmemented on python ise (ngsolve-src/python/krylovspace.py)
There are currently no ongoing projects I am aware of that do domain decomposition with NGSolve. There is a prototype FETI-DP implementation from last years usermeeting.
For prototyping, you can create a preconditioner in pyhton by derving from BaseMatrix. Have a look at unit 2.1.2 from the i-tutorials in the documentation.
As you asked about this before, I also want to mention that we now have a PETSc interface. It is hwoever, still at a relatively early stage.
Thanks for the reply. Since the domain decomposition is geometric, is it possible to have access to subdomain boundary or interface by some boundary identifier or label. WIth this, I can may be impose the transmission conditions.on these interfaces.
Currently, you only can get information about which DOFs are shared with which procas via python (fespace.ParallelDofs()).
On C+±side, the MeshAccess has a “GetDistantProcs” method, which tells you which procs a node (so a vertex, edge, face) is shared with.
Exposing this information also to python would probably not be a problem.
Thanks, I will give it a try myself and get back if I’m stuck.