Parallelisation of Assembly Process and Solution
In order to make Griphfith more suitable for systems with more DOFs (thinking of either larger meshes or 3D), parts of the code shall be parallelised. To be precise, this concerns the two following parts:
- The solution of the system Ax=b, currently done by the external
cholmod2
at several points in the library (most prominently, inphase_field.fem.solver.aux.vec_active_dof_update
, but also inphase_field.output.paraview_step
). - Secondly, the assembly of the stiffness matrices in
phase_field.fem.solver.equilibrium.newton_raphson
andphase_field.fem.solver.pf.newton_raphson
. For this, it is possible, to split up the elements, compute their element stiffness matrices on several cpus in parallel, and afterwards add these contributions in the global stiffness matrix.
For both of these points, first an investigation regarding the most viable approach to parallelization/ multithreading shall be done, considering especially runs on HPCs such as Euler. A possible approach for 2. might be to use Matlab's Parallel Computing Toolbox and focus on the distribution of the elements among several cpus. If possible, parallelisation shall be able to be activated/ deactivated by a flag in one of the solver-parameter structs such that development/ debugging is still possible on a local system without having to comment out parallelised parts of the code.