Skip to content

Acceleration of T process assembly

Christoph Lehmann requested to merge chleh/ogs:accel-heat-cond-asm into master
  1. Feature description was added to the changelog
  2. Tests covering your feature were added?
  3. Any new feature or behavior change was documented?

This MR does the same for the T process as !4713 (merged) and !4730 (merged) did for the ComponentTransport process: adding the options <linear> and <linear_solver_compute_only_upon_timestep_change> to speed up the assembly.

The implementation is mostly copy & paste from ComponentTransport, the test cases are variations of an existing test case.

This MR also contains a bugfix

  • TimeLoop now calls the processes preOutput() hook always for the last timestep, even if no output is requested explicitely in the output config since the last timestep will always be output.
  • I also had to update the references for a 1D heat conduction test: There, the HeatFlowRates were strange (non-zero in the interior of the domain).

grafik

Verify effectiveness of the optimizations

$ cd <BUILDDIR>
$ ctest -R ogs-1D_HeatConduction_dirichlet
$ cd logs
$ grep -cF "Assembly took" ogs-1D_HeatConduction_dirichlet*.txt
ogs-1D_HeatConduction_dirichlet_linear_dt_change.txt:500
ogs-1D_HeatConduction_dirichlet_linear.txt:500
ogs-1D_HeatConduction_dirichlet.txt:1000     <-- not optimized, two non-linear iterations per timestep
ogs-1D_HeatConduction_dirichlet_varying_dt_linear_compute_only_on_dt_change.txt:600   <-- second test case with varying time step size
ogs-1D_HeatConduction_dirichlet_varying_dt_linear.txt:600
ogs-1D_HeatConduction_dirichlet_varying_dt.txt:1200
$ grep -cF "Eigen solver compute()" ogs-1D_HeatConduction_dirichlet*.txt
ogs-1D_HeatConduction_dirichlet_linear_dt_change.txt:1   <-- only one linear solver compute() call
ogs-1D_HeatConduction_dirichlet_linear.txt:500           <-- one iteration per timestep and one compute() per iteration
ogs-1D_HeatConduction_dirichlet.txt:1000                 <-- two iterations per timestep and one compute() per iteration
ogs-1D_HeatConduction_dirichlet_varying_dt_linear_compute_only_on_dt_change.txt:2   <-- one change in time step size = two compute() calls
ogs-1D_HeatConduction_dirichlet_varying_dt_linear.txt:600
ogs-1D_HeatConduction_dirichlet_varying_dt.txt:1200
Edited by Christoph Lehmann

Merge request reports