1) 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 .
2) Some krylov space methods (gmres, cg, minres) are implmemented on python ise (ngsolve-src/python/krylovspace.py)
3) 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.
4) 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.
5) 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.