<div class="gmail_quote">On Thu, Apr 14, 2011 at 15:18, Thomas Witkowski <span dir="ltr">&lt;<a href="mailto:thomas.witkowski@tu-dresden.de">thomas.witkowski@tu-dresden.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Has anybody of you implemented the FETI-DP method in PETSc? I think about to do this for my FEM code, but first I want to evaluate the effort of the implementation.</blockquote><div><br></div><div>There are a few implementations out there. Probably most notable is Axel Klawonn and Oliver Rheinbach&#39;s implementation which has been scaled up to very large problems and computers. My understanding is that Xuemin Tu did some work on BDDC (equivalent to FETI-DP) using PETSc. I am not aware of anyone releasing a working FETI-DP implementation using PETSc, but of course you&#39;re welcome to ask these people if they would share code with you.</div>
<div><br></div><div><br></div><div>What sort of problems do you want it for (physics and mesh)? How are you currently assembling your systems? A fully general FETI-DP implementation is a lot of work. For a specific class of problems and variant of FETI-DP, it will still take some effort, but should not be too much.</div>
<div><br></div><div>There was a start to a FETI-DP implementation in PETSc quite a while ago, but it died due to bitrot and different ideas of how we would like to implement. You can get that code from mercurial:</div><div>
<br></div><div> <a href="http://petsc.cs.iit.edu/petsc/petsc-dev/rev/021f379b5eea">http://petsc.cs.iit.edu/petsc/petsc-dev/rev/021f379b5eea</a></div><div><br></div><div><br></div><div>The fundamental ingredient of these methods is a &quot;partially assembled&quot; matrix. For a library implementation, the challenges are</div>
<div><br></div><div>1. How does the user provide the information necessary to decide what the coarse space looks like? (It&#39;s different for scalar problems, compressible elasticity, and Stokes, and tricky to do with no geometric information from the user.) The coefficient structure in the problem matters a lot when deciding which coarse basis functions to use, see <a href="http://dx.doi.org/10.1016/j.cma.2006.03.023">http://dx.doi.org/10.1016/j.cma.2006.03.023</a></div>
<div><br></div><div>2. How do you handle primal basis functions with large support (e.g. rigid body modes of a face)? Two choices here: <a href="http://www.cs.nyu.edu/cs/faculty/widlund/FETI-DP-elasticity_TR.pdf">http://www.cs.nyu.edu/cs/faculty/widlund/FETI-DP-elasticity_TR.pdf</a> .</div>
<div><br></div><div>3. How do you make it easy for the user to provide the required matrix? Ideally, the user would just use plain MatSetValuesLocal() and run with -mat_type partially-assembled -pc_type fetidp instead of, say -mat_type baij -pc_type asm. It should work for multiple subdomains per process and subdomains spanning multiple processes. This can now be done by implementing MatGetLocalSubMatrix(). The local blocks of the partially assembled system should be able to use different formats (e.g. SBAIJ).</div>
<div><br></div><div>4. How do you handle more than two levels? This is very important to use more than about 1000 subdomains in 3D because the coarse problem just gets too big (unless the coarse problem happens to be well-conditioned enough that you can use algebraic multigrid).</div>
<div><br></div><div><br></div><div>I&#39;ve wanted to implement FETI-DP in PETSc for almost two years, but it&#39;s never been a high priority. I think I now know how to get enough flexibility to make it worthwhile to me. I&#39;d be happy to discuss implementation issues with you.</div>
</div>