In this repository, we provide the code used for the numerical experiments in the paper "A monolithic space-time temporal multirate finite element framework for interface and volume coupled problems" by J. Roth, M. Soszyńska, T. Richter and T. Wick. Additionally, we provide another code for the staggered temporal multirate finite element method for poroelasticity at the example of the Mandel problem.
For technical details, we refer to the journal article and the arXiv preprint. To cite this code, please use the following BibTeX citation:
@article{RoSoRiWi2024,
title = {A monolithic space–time temporal multirate finite element framework for interface and volume coupled problems},
journal = {Journal of Computational and Applied Mathematics},
volume = {446},
pages = {115831},
year = {2024},
issn = {0377-0427},
doi = {https://doi.org/10.1016/j.cam.2024.115831},
url = {https://www.sciencedirect.com/science/article/pii/S0377042724000803},
author = {Julian Roth and Martyna Soszyńska and Thomas Richter and Thomas Wick},
keywords = {Galerkin space–time, Multirate, Monolithic framework, Interface coupling, Volume coupling, Mandel’s benchmark}
}
We are often dealing with multiphysics problems that have dynamics on different time scales. An example of this is atherosclerosis, where plaque deposits on the walls of a human's arteries and then reduces blood flow, possibly even causing heart attacks or strokes. Simulating this medical phenomenon is complex because we have to accurately model:
- the plaque growth,
- the blood flow.
BUT: Can we also solve both physics at once, while using the respective time scale for each problem? This would be faster than solving everything on the smaller time scale and is more accurate and numerically robsut than using homogenization or using a staggered scheme.
ANSWER: Yes, we can by using restriction matrices (from geometric multigrid) and from one side restrict the temporal matrices that have been assembled on the finer temporal mesh. For more details, please take a closer look at the paper.
The code for this example is located in src/monolithic_heatwave
and is based on the FEM library deal.II 9.3.3
.
- Go to
main.cc
and make sure that# define DIM 1
. - To compile the code run
cmake .; make release; make; mv main main_1d
. - To run the convergence tests from the paper execute
sh run_1d_for_paper.sh
and to analyze the results go topaper_output_1d
and runpython3 create_convergence_plots.py
.
The code for this example is located in src/monolithic_heatwave
and is based on the FEM library deal.II 9.3.3
.
- Go to
main.cc
and make sure that# define DIM 2
and# define SOLID_SOURCE false
. - To compile the code run
cmake .; make release; make; mv main main_2d
. - To run the convergence tests from the paper execute
sh run_2d_for_paper.sh
and to analyze the results go topaper_output_2d
and runpython3 create_convergence_plots.py
.
The code for this example is located in src/monolithic_heatwave
and is based on the FEM library deal.II 9.3.3
.
- Go to
main.cc
and make sure that# define DIM 2
and# define SOLID_SOURCE true
. - To compile the code run
cmake .; make release; make; mv main main_2d_solid
. - To run the convergence tests from the paper execute
sh run_2d_solid_for_paper.sh
and to analyze the results go topaper_output_2d_solid
and runpython3 create_convergence_plots.py
.
The code for this example is located in src/monolithic_poroelasticity_mandel
and is based on the FEM library deal.II 9.3.3
.
- To compile the code run
cmake .; make release; make
. - To run the convergence tests from the paper execute
sh run_mandel_for_paper.sh
.
The code for this example is located in src/monolithic_poroelasticity_footing
and is based on the FEM library deal.II 9.3.3
.
- To compile the code run
cmake .; make release; make
. - To run the convergence tests from the paper execute
sh run_footing_for_paper.sh
.
To solve this temporal multirate problems more efficiently, one could use geometric multigrid in time, use the staggered scheme as a preconditioner for the monolithic scheme or directly solve the staggered scheme as shown below for the Mandel problem where for each displacement (u
) temporal element we have two pressure (p
) temporal elements.
The code for this example is located in src/staggered_poroelasticity_mandel
and is based on the FEM library FEniCS
.
- To run the convergence tests execute
sh run_Mandel_tests.sh
. - To analyze the results execute
python3 analyze_Mandel_tests.py
.