------
README
------

This archive contains the source code to reproduce all numerical results of the publication

"Randomized quasi-optimal local approximation spaces in time"
by Julia Schleuß, Kathrin Smetana, and Lukas ter Maat.


All scripts are tested with Python 3.8.10.

Necessary Python packages (tested versions):
numpy (1.19.2)
scipy (1.5.2)
Cython (0.29.21)
matplotlib (3.3.3)
dill (0.3.3)

# ATTENTION: Note that most of the code (except setting up problems or postprocessing) is extremely time consuming as, for instance, 100.000 realizations are executed.
# (Depending on the employed computer architecture, code will probably run several days.)


To reproduce Figure 5 (left), run
python3 experiment_1/problem_set_up_exp1_1.py				--->  Results are saved in 'experiment_1/results/'.
python3 experiment_1/main_exp1_fig5left.py				--->  The plot is shown.

To reproduce Figure 5 (right), run
python3 experiment_1/problem_set_up_exp1_2.py				--->  Results are saved in 'experiment_1/results/'.
python3 experiment_1/main_exp1_fig5right.py				--->  The plot is shown.


To reproduce Figure 6 (right), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_leverage_scores_exp2_fig6.py		--->  The plot is shown.

To reproduce Figure 7 (left), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig7left.py		--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/'.
python3 experiment_2/postprocessing_exp2_fig7left.py			--->  The plot is shown.

To reproduce Figure 7 (right), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig7right.py		--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/'.
python3 experiment_2/postprocessing_exp2_fig7right.py		--->  The plot is shown.

To reproduce Figure 8, run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/transfer_singular_vals_exp2_fig8.py		--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_random_projection_error_exp2_fig8.py	--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/postprocessing_exp2_fig8.py			--->  The plot is shown.

To reproduce Figure 9 (left), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig9left.py		--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/'.
python3 experiment_2/postprocessing_exp2_fig9left.py			--->  The plot is shown.

To reproduce Figure 9 (middle), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig9middleright.py	--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/'.
python3 experiment_2/postprocessing_exp2_fig9middle.py		--->  The plot is shown.

To reproduce Figure 9 (right), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig9middleright.py	--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/'.
python3 experiment_2/postprocessing_exp2_fig9right.py		--->  The plot is shown.

To reproduce Figure 10 (left and right), run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/postprocessing_exp2_fig10.py			---> The plots are shown.

To reproduce Figure 11, run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig11.py		--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/', 
									      'experiment_1/results_probem=stove_model=uniform/', and 
									      'experiment_1/results_probem=stove_model=frobenius/'.
python3 experiment_2/postprocessing_exp2_fig11.py			--->  The plot is shown.
									    
To reproduce Figure 12, run
python3 experiment_2/problem_set_up_exp2.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/main_parameter_tests_exp2_fig11.py		--->  Results are saved in 'experiment_2/results_probem=stove_model=leverage/', 
									      'experiment_1/results_probem=stove_model=uniform/', and 
									      'experiment_1/results_probem=stove_model=frobenius/'.
python3 experiment_2/main_POD_exp2_fig12.py				--->  Results are saved in 'experiment_2/results/'.
python3 experiment_2/postprocessing_exp2_fig12.py			--->  The plot is shown.


To reproduce Figure 13, run
python3 experiment_3a/problem_set_up_svals_comparison.py		--->  Results are saved in 'experiment_3a/results/'.
python3 experiment_3a/main_exp_transfer_singular_vals_comparison.py	--->  Results are saved in 'experiment_3a/results/'.
python3 experiment_3a/plot_transfer_singular_vals_comparison.py	--->  The plot is shown.

To reproduce Figure 14, run
python3 experiment_3a/problem_set_up_ex_plots.py			--->  Results are saved in 'experiment_3a/results/'.
python3 experiment_3a/FE_visualization_ex_plots.py			--->  The plots are shown.

To reproduce Figure 15, run
python3 experiment_3b/problem_set_up_parameter_tests.py		--->  Results are saved in 'experiment_3b/results/'.
python3 experiment_3b/FE_visualization.py				--->  The plots are shown.

To reproduce Figure 16 (right), run
python3 experiment_3b/problem_set_up_parameter_tests.py		--->  Results are saved in 'experiment_3b/results/'.
python3 experiment_3b/main_probs.py					--->  The plot is shown.

To reproduce Figure 17 (left), run
python3 experiment_3a/problem_set_up_parameter_tests.py			--->  Results are saved in 'experiment_3a/results/'.
python3 experiment_3a/main_exp_transfer_singular_vals_parameter_tests.py	--->  Results are saved in 'experiment_3a/results/'.
python3 experiment_3a/plot_transfer_singular_vals_parameter_tests.py		--->  The plot is shown.

To reproduce Figure 17 (right), run
python3 experiment_3b/problem_set_up_parameter_tests.py		--->  Results are saved in 'experiment_3b/results/'.
python3 experiment_3b/main_parameter_tests_1.py			--->  Results are saved in 'experiment_3b/results_probem=advec_x=0.3_diff=0.01_nt=500/'.
python3 experiment_3b/postprocessing_parameter_tests_1.py		--->  The plot is shown.

To reproduce Figure 18 (left), run
python3 experiment_3b/problem_set_up_parameter_tests.py		--->  Results are saved in 'experiment_3b/results/'.
python3 experiment_3b/main_parameter_tests_2.py			--->  Results are saved in 'experiment_3b/results_probem=advec_x=0.3_diff=0.01_nt=500/'.
python3 experiment_3b/postprocessing_parameter_tests_2.py		--->  The plot is shown.

To reproduce Figure 18 (right), run
python3 experiment_3b/problem_set_up_parameter_tests.py		--->  Results are saved in 'experiment_3b/results/'.
python3 experiment_3b/main_parameter_tests_3.py			--->  Results are saved in 'experiment_3b/results_probem=advec_x=0.3_diff=0.01_nt=500/'.
python3 experiment_3b/postprocessing_parameter_tests_3.py		--->  The plot is shown.

To reproduce Figure 19, run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/FE_visualization_exp4_fig19.py			--->  The plots are shown.

To reproduce Figure 20 (right), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/main_leverage_scores_exp4_fig20.py		--->  The plot is shown.

To reproduce Figure 21 (left), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/main_parameter_tests_exp4_fig21leftmiddle.py	--->  Results are saved in 'experiment_4/results_probem=SPE10_model=leverage/'.
python3 experiment_4/postprocessing_exp4_fig21left.py		--->  The plot is shown.

To reproduce Figure 21 (middle), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/main_parameter_tests_exp4_fig21leftmiddle.py	--->  Results are saved in 'experiment_4/results_probem=SPE10_model=leverage/'.
python3 experiment_4/postprocessing_exp4_fig21middle.py		--->  The plot is shown.

To reproduce Figure 21 (right), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/main_parameter_tests_exp4_fig21leftmiddle.py	--->  Results are saved in 'experiment_4/results_probem=SPE10_model=leverage/'.
python3 experiment_4/main_POD_exp4_fig21right.py			--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/postprocessing_exp4_fig21right.py		--->  The plot is shown.

To reproduce Figure 22 (left), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/transfer_singular_vals_exp4_fig22left.py	--->  The plot is shown.

To reproduce Figure 22 (right), run
python3 experiment_4/problem_set_up_exp4.py				--->  Results are saved in 'experiment_4/results/'.
python3 experiment_4/main_parameter_tests_exp4_fig22middleright.py	--->  Results are saved in 'experiment_4/results_probem=SPE10_model=leverage/'.
python3 experiment_4/postprocessing_exp4_fig22right.py		--->  The plot is shown.

