Linear Solver Performance: 2D Stokes manufactured Solution after Botti and Di Pietro

Part 1, Benchmark Setup and Execution

This benchmark was proposed in a work:

"p‑Multilevel Preconditioners for HHO Discretizations of the Stokes Equations with Static Condensation" by L. Botti and D. Di Pietro (https://doi.org/10.1007/s42967-021-00142-5)

It is used to assess DG as well as HDG methods, the latter beeing the main focus of the paper, the former only for reference. The exact solution to the stationary Stokes equation is $$ u_1 = -\exp(x) \cdot (y \cdot \cos(y) + \sin(y)), \\ u_2 = \exp(x) \cdot y \cdot \sin(y), \\ p = 2 \cdot \exp(x) \cdot \sin(y) . $$ The domain is set as $ \Omega = (-1,1)^2 $. This exact solution is also used as a boundary condition on three sides; On one side, a Neumann boundary condition is enforced. It is not mentioned which side this is.

Note

This example can be found in the source code repository as as LinslvPerf_BottiPietroStokes2D.ipynb. One can directly load this into Jupyter to interactively work with the following code examples.

Note: First, BoSSS has to be loaded into the Jupyter kernel. Note: In the following line, the reference to BoSSSpad.dll is required. One must either set #r "BoSSSpad.dll" to something which is appropirate for the current computer (e.g. C:\Program Files (x86)\FDY\BoSSS\bin\Release\net5.0\BoSSSpad.dll if working with the binary distribution), or, if one is working with the source code, one must compile BoSSSpad and put it side-by-side to this worksheet file (from the original location in the repository, one can use the scripts getbossspad.sh, resp. getbossspad.bat).

Utility definitions

Init grids and save to database

Setup Control Object for a Solver Run

Boundary Conditions and Exact Solution

Setup of Parameter Study

Polynomial degrees to test:

Solvers which we want to instrument:

Maximum Dof for one calculation (we skip fine grids for higher polynomial orders):

Loop over all combinations of parameters and define a control object for each combo:

Total number of simulations:

Launch Jobs

Use the default queue defined on this machine:

Wait for Completion and Check Job Status

Asserting Success:

Remark: since this is currently (22 Apr. 2022) work-in-progress, we allow for some jobs to fail; At this intermediate milestone, I want to record (by the means of tests) what is already working. Thereby, I hope I won't break the working cases while trying to fix the failing ones.