|Subject:||Re: [fem-fenics] MPI parallelisation|
|Date:||Sun, 3 Aug 2014 17:07:06 +0200|
I pushed to my repository some changesets that allow for the solution of problems in parallel via the MPI paradigm. Namely:* ufl.m and all the import_ufl_*.m are executed only by the main process, since they perform IO;* in parallel execution meshes are built from the p-e-t input argument and then distributed among processes;* matrices and vectors are assembled locally and then gathered to obtain the global ones on the main process;* Mesh.oct now can return as output arguments up to two meshfunctions storing facet or cell markers, since in parallel runs Meshes cannot store that information themselves with the current implementation of the DOLFIN library.Tomorrow I will provide more details on my blog.
Currently when using MPI one must use the meshfunction returned by Mesh.oct in order to provide DirichletBC.oct with the markers identifying subsets of the boundary. There are a couple of points that could be discussed. First of all, as of now DirichletBC.oct accepts as argument also a meshfunction identifying subdomains. I used this approach because I did not find an alternative for the storage of this information: MeshData, the class I mentioned previously, does not help in this task, as far as I understand. Anyway, dolfin::DirichletBC offers a constructor with the same signature as the current DirichletBC.oct, so this is not really weird.
A second aspect is that meshfunction is actually very, very raw. Currently there is no way to display it, no function to build it as users need… Moreover, its name is quite misleading, as dolfin::MeshFunction is a template class, whilst meshfunction wraps dolfin::MeshFunction <std::size_t>. For the first issues I think I can provide easily functionality as importing/exporting a MeshFunction from/to file, a descriptive line to display like in other fem-fenics types, etc. For the latter, I do not know if it could be meaningful to make meshfunction itself a template class or just provide three wrappers for <std::size_t>, <bool> and <double>, which are the most recurring instances in FEniCS documentation. Or even just leave it as it is and say it in the package documentation.
|[Prev in Thread]||Current Thread||[Next in Thread]|