First time here? Checkout the FAQ!
x
0 votes
by (640 points)
I was wondering if there exists a documentation explaining in a "human-like" way the algorithms coded in electrics.h and electrics.cc as well as the slimfem implementation. I found the "numerical schemes" section on the user manual, but I feel it is not enough in order to understand the structure behind openCARP and, maybe, contributing to the project.

Furthermore I do not understand where preconditioners are implemented. I keep finding calls to function "KSPSetReusePreconditioner", but not other explicit calls to preconditioners.

Can you help me?

Thank you in advance

1 Answer

+1 vote
by (8.0k points)
Hi!

In the manual, there are the chapters "Mathematical Model Formulation" and "Numerical Schemes", which are dedicated to framing the numerical setting. Clearly, those chapters cannot go into the nuts and bolts of the algorithms. The finite-element implementations are quite "classic" in the sense that domain experts will understand most aspects quickly.

On the other hand, the parallelization is rather customized to the simulator and is probably the hardest part to understand form the source code. Parallelization is chronically under-documented in every piece of software I have seen, and openCARP is no different unfortunately.

Linear solvers and preconditioners are not implemented in openCARP. Instead, those provided through PETSc are used (ILU-PCG and Hypre AMG-PCG).

All the best, Aurel
by (640 points)
Thank you very much! Do you have suggestions on source codes I should read in order to better understand at least the structure of the core? I found electrics.cc for the elliptic and parabolic solvers and SF_fem_utils.h in slimfem/src, but I feel I am still missing something
Welcome to openCARP Q&A. Ask questions and receive answers from other members of the community. For best support, please use appropriate TAGS!
architecture, carputils, documentation, experiments, installation-containers-packages, limpet, slimfem, website, governance
MathJax.Hub.Config({ tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ], config: ["MMLorHTML.js"], jax: ["input/TeX"], processEscapes: true } }); MathJax.Hub.Config({ "HTML-CSS": { linebreaks: { automatic: true } } });
...