# ~~~
# This file is part of the paper:
#
# " An Online Efficient Two-Scale Reduced Basis Approach
# for the Localized Orthogonal Decomposition "
#
# https://github.com/TiKeil/Two-scale-RBLOD.git
#
# Copyright 2021 all developers. All rights reserved.
# License: licensed as BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause)
# Authors:
# Tim Keil
# Stephan Rave
# ~~~
In this repository, we provide the code for the numerical experiments in Section 6 of the paper "An Online Efficient Two-Scale Reduced Basis Approach for the Localized Orthogonal Decomposition" by Tim Keil and Stephan Rave. The preprint is available here.
For just taking a look at the experiment outputs and data, you do not need to
install the software. Just go to scripts/test_scripts/test_outputs/
,
where we have stored printouts of our numerical experiments.
In order to relate this data to the paper, we provide further information in the next Section.
If you want to have a closer look at the implementation or generate the results by
yourself, we provide simple setup instructions for configuring your own Python environment.
We note that our setup instructions are written for Ubuntu Linux only and we do not provide
setup instructions for MacOS and Windows.
Our setup instructions have successfully been tested on a fresh Ubuntu 20.04.2.0 LTS system.
The actual experiments have been computed on the
PALMA II HPC cluster.
For the concrete configurations we refer to the scripts in submit_to_cluster
.
We provide information on how to relate the output files to the figures and tables in the paper.
All output files and figures are stored in scripts/test_scripts/test_outputs
.
Note that the outputs are verbose outputs compared to the ones that we present in the paper,
which is also the reason why we do not provide scripts for constructing the error plots and
tables from the paper.
- Figure 1: The plots for this figure are named by
model_problem_1_coefficient_*.png
. - Table 1: The output for all three choices of the coarse mesh are stored in
model_problem_1_H_8.dat
,model_problem_1_H_16.dat
,model_problem_1_H_32.dat
. - Figure 2: This plot has been constructed from the printout in
estimator_study_for_different_epsilon.txt
. - Figure 3: All errors and estimates are stored in
estimator_study_certified.txt
for the certified training (Figure 3A) and inestimator_study_coarse.txt
for the training with the coarse part of the certified estimator (Figure 3B). - Figure 4: The plots are stored as
model_problem_2_coefficients_*.png
. - Table 2: This table has been filled with the data from
model_problem_2.dat
.
We used several external software packages:
- pyMOR is a software library for Model Order Reduction.
- gridlod is a discretization toolkit for the Localized Orthogonal Decompostion (LOD) method.
- perturbations-for-2d-data contains a coefficient generator for constructing randomized and highly oscillating coefficients.
We added the external software as editable submodules with a fixed commit hash.
For the TSRBLOD, we have developed a Python module rblod
.
The rest of the code is contained in scripts
, where you find the definition of the model problems
(in problems.py
) and the main scripts for the numerical experiments.
The file run_experiment.py
contains a lot of additional documentation for understanding
the specific implementation of our methods.
On a standard Ubuntu system (with Python and C compilers installed) it will most likely be enough to just run our setup script. For that, please clone the repository
git clone https://github.com/TiKeil/Two-scale-RBLOD.git TSRBLOD
and execute the provided setup script via
cd TSRBLOD
./setup.sh
If this does not work for you, and you don't know how to help yourself, please follow the extended setup instructions below.
We also provide setup instructions for a fresh Ubuntu system (20.04.2.0 LTS). The following steps need to be taken:
sudo apt update
sudo apt upgrade
sudo apt install git
sudo apt install build-essential
sudo apt install python3-dev
sudo apt install python3-venv
sudo apt install libopenmpi-dev
sudo apt install libsuitesparse-dev
Now you are ready to clone the repository and run the setup script:
git clone https://github.com/TiKeil/Two-scale-RBLOD.git TSRBLOD
cd TSRBLOD
./setup.sh
You can make sure your that setup is complete by running the minimal test script
cd scripts/test_scripts
./minimal_test.sh
If this works fine (with timings and max error output in the end), your setup is working well.
If you are interested in the exact shell scripts that we have used for the numerical experiments
in the paper, please have a look at scripts/test_scripts
. Moreover, we provide further information
on how to reconstruct the figures and tables from the paper.
Please note that these shell scripts will produce verbose outputs.
The above mentioned output files in scripts/test_scripts/test_outputs
are a minimal version of this.
For executing Python scripts, you need to activate the virtual environment by
source venv/bin/activate
- Figure 1: For visualizing the diffusion coefficients, you can run the file
model_problem_1_coefficients.py
with Python. - Table 1:
model_problem_1.sh
executes three experiments with changing coarse mesh. - Figure 2: This plot has been constructed from the verbose output of
estimator_study_for_different_epsilon.sh
. - Figure 3: The corresponding data can be obtained by running two scripts.
With
estimator_study_prepare.sh
, you can build the Stage 1 model once (which will then be stored on disc). After the data of Stage 1 has been stored, withestimator_study_*.sh
, you can then compute the errors for different basis sizes. - Figure 4: The coefficients can be obtained by calling
model_problem_2_coefficients_on_4_elements.py
with Python. Note that this is not the actual diffusion coefficient but rather a way to visualize it on 4 elements. - Table 2: This data has been generated by
model_problem_2.sh
.
Note that especially for model_problem_2.sh
, an HPC cluster is required.
In particular, starting the shell scripts with only a few parallel cores (or even without mpirun
)
on your local computer may take days to weeks.
Please have a look at the description of the command line arguments of scripts/run_experiment.py
to try different configurations of the given problem classes. Note that it is also possible to solve
your own parameterized problems with our code since the problem definitions that are used in
scripts/problems.py
are very general.
In the paper, we have not provided an expression for the diffusion coefficient that has been used for
test case 2. This is due to the fact that the coefficient is a random diffusion tensor with random noise
(also for the periodic parts). The seed for the random distribution is defined by the index of the
coarse element T. The concrete coefficients are constructed by the coefficient generator buildcoef2d
from perturbations-for-2d-data.
For this we refer to the function construct_coefficients_on_T
which is defined in scripts/problems.py
.
The class arguments uniquely determine these coefficients and also fix the random seed. With this,
the coefficients can always be reconstructed from the returned numpy.array
,
where each entry corresponds to the constant value of the coefficient on each fine grid element.
If there are any questions of any kind, please contact us via tim.keil@wwu.de.