dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #05411
Re: Parallelization
jesperc wrote:
Hi,
I'm taking a summer course in parallel programming and want to
parallelize something in Dolfin as a small project for the course. How
much is currently sucessfully parallelized in the code when for example
solving the Poisson equation? I know that some of you are working with
the parallel implementation of the assembly, but what is the status there?
Would it be possible for me to make some contribution?
Yes, definitely. Here's what we have now:
1. Mesh partitioning works:
uint n = 16;
MeshFunction<uint> partitions;
mesh.partition(n, partitions);
This returns a MeshFunction which labels all the cells of the mesh with
the number of the partition to which they belong.
2. Garth has implemented a working (last time I checked) prototype of a
parallel assembler in src/sandbox/passembly/main.cpp.
3. It should be relatively easy to extend the current assembler in
src/kernel/fem/Assembler.cpp to do parallel assembly. It currently knows
how to assemble over subdomains (defined by some MeshFunctions) and the
parallel assembly would be similar: skip the cells (if (.. != ... )
continue;) that don't belong to the current processor.
4. The first thing we need is to be able to communicate Mesh and
MeshFunction between processes. There is a sketch in
src/kernel/mesh/MPIMeshCommunicator.cpp (empty). One process reads the
mesh, partitions it and sends it to all processes. (To begin with, each
process will have a copy of the mesh.)
5. The tricky part will be how to order degrees of freedom (class
DofMap). And this relates to ongoing work on merging the linear algebra
interfaces of DOLFIN and PyCC (Simula in-house code). We need to find
a design that works well for communicating both with PETSc and Epetra
(Trilinos).
I'm sure Garth and Martin will have further opinions.
/Anders
Follow ups
References