-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex2.html
More file actions
49 lines (44 loc) · 4.05 KB
/
index2.html
File metadata and controls
49 lines (44 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<center><h1>Features</h1></center>
<center>
<div class="flex-container">
<div class=flex-column>
<ul id=featurelist>
<li>• Temporal ordinary differential equations •</li>
<li>• Spatial boundary value problems •</li>
<li>• Spatio-temporal problems •</li>
<li>• Moving mesh (ALE) problems •</li>
<li>• Automatic mesh reconstruction •</li>
<li>• Spatial & temporal adaptivity •</li>
<li>• Mixed elements •</li>
<li>• Additional fields at interfaces •</li>
<li>• Stability analysis & bifurcation tracking •</li>
<li>• Periodic orbits & Floquet multipliers •</li>
<li>• Linear response to periodic driving •</li>
<li>• Azimuthal stability analysis •</li>
<li>• Follow eigenbranches •</li>
<li>• Nonlinear elasticity •</li>
</ul>
</div>
<div class=flex-column>
<ul id=featurelist>
<li>• Fully symbolically derived Jacobian/Hessian •</li>
<li>• Automatic non-dimensionalization •</li>
<li>• Continuous and Discontinuous Galerkin Methods •</li>
<li>• Multi-Domain and Multi-Physics •</li>
<li>• Coordinate-system-agnostic formulation of equations •</li>
<li>• Constraints via Lagrange multipliers •</li>
<li>• Free surface dynamics with Marangoni flow •</li>
<li>• Multi-component flow with mass transfer •</li>
<li>• Vapor-liquid equilibria by group contribution models •</li>
<li>• Surfactants with versatile isotherms •</li>
<li>• Contact line dynamics • </li>
<li>• Cartesian normal model analysis •</li>
<li>• Coupling simulations via a preCICE adapter •</li>
<li>• Fluid-structure interaction •</li>
</ul>
</div>
</div>
</center>
<center><h1>How it works</h1></center>
Formulating custom equations, meshes, problems and materials properties is directly done in Python. Subsequently, once the problem is assembled, the monolithic Jacobian matrix is symbolically derived. To speed up the assembly process, C code to fill the residuals and the Jacobian matrix is automatically generated, compiled and loaded back to the running program. For the code generation, pyoomph makes use of <a href="https://www.ginac.de">GiNaC</a> and <a href="https://www.ginac.de/CLN/">CLN</a>. Besides symbolically derived Jacobian matrices, also parameter derivatives and Hessians, even including the complicated derivatives with respect to the moving mesh coordinates on a symbolical level, are transferred to performant C code. The generated code is compiled and linked back to the running python script, either with the <a href="https://bellard.org/tcc/">TinyC compiler</a> (invoked by <a href="https://github.com/metab0t/tccbox">tccbox</a>) or, when installed, with a more performant alternative like <a href="https://gcc.gnu.org/">gcc</a>, <a href="https://clang.llvm.org/">LLVM/clang</a> or <a href="https://docs.microsoft.com/visualstudio/msbuild/msbuild">MSBuild</a>. Thereby, pyoomph is on par with hand-written implementations in a compiled programming language, yet with the ease of Python as scripting language. This approach allows for rapid development of complicated multi-physics and multi-domain problems, including physical dimensions (units) and realistic material properties, varying e.g. with the temperature or the composition. <br><br>
<center><img src="media/framework.gif" width="80%"><p>[From our paper <a href="https://doi.org/10.1016/j.jcp.2024.113306">Christian Diddens and Duarte Rocha, <i>Bifurcation tracking on moving meshes and with consideration of azimuthal symmetry breaking instabilities</i>, J. Comput. Phys. <b>518</b>, 113306, (2024).</a>]</p></center>