Hello, I am studying how to set the two-level GenEo algorithm by calling hpddm directly, and the code elasticity.edp in ~/examples/hpddm is related closely to my purpose. My problem is about the setting of AttachCoarseOperator, and the involved code is line 81-84 in this edp file:
The problem vPbNoPen defined here is different to the one in line 54, and the term int3d(Th)(f * vC) is not included here. Why does it work? And how to find the detailed usage of AttachCoarseOperator?
My purpose is to solve a thermal stress problem of large size (~ 10^9 dof) with the two-level ddm algorithm (GenEo), but calling it via FFDDM is very memory consuming. It seems that calling hpddm directly is a better choice. According to the code elasticity.edp in ~/examples/hpddm, the setting of AttachCoarseOperator is a key step.
I’m not sure why ffddm would be more memory demanding (maybe you are keeping the global mesh?). Anyway, if you want performance, you should just use PETSc with -pc_type hpddm, it’s the most performance-oriented implementation, and there are examples in the same folder.
I’ll add that for a thermal stress problem, the odds of AMG working and greatly outperforming GenEO are close to 100%.
I also tested the method of using PETSc with -pc_type hpddm, but the consumed time is much larger than using PETSc with hybre/AMG (20 min vs 5.5 min for a test problem running on my desktop pc). The setting reads:
The code using PETSc/hybre has been moved to the HPC of my lab, and was run by loading the container file freefem_latest.sif (version 4.12) via singularity. The key command is:
Hi, prj. Let’s turn back to the beginning of this topic. The code calling hpddm directly can be run on the HPC normally (via singularity/ff_v4.12), but it converges very slowly (relative error of 0.1 after 200 iterations). I suspect that the coarse space is not built correctly. Thus I pose the problem of setting AttachCoarseOperator, especially the meaning of vPbNoPen.