From f3f1778f777d0aeb15c65033996bd0144d2aa8c6 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Wed, 17 Dec 2025 10:53:43 +0800 Subject: [PATCH] initial upload --- .gitignore | 1 + CMakeLists.txt | 292 + LICENSE | 674 + README.md | 102 + README_install_HDF5.md | 12 + cuda/cuda_constants.cuh | 35 + cuda/cuda_initialize.cuh | 145 + cuda/cuda_utils.cu | 186 + cuda/cuda_utils.cuh | 211 + cuda/grid_wrapper.cu | 681 + cuda/grid_wrapper.cuh | 123 + cuda/iterator_wrapper.cu | 883 + cuda/iterator_wrapper.cuh | 27 + debug_mpi.sh | 19 + docs/.DS_Store | Bin 0 -> 6148 bytes docs/logo/TomoATT_logo.png | Bin 0 -> 112334 bytes docs/logo/TomoATT_logo.svg | 433 + docs/logo/TomoATT_logo_2.png | Bin 0 -> 117374 bytes docs/logo/TomoATT_logo_only_cube.png | Bin 0 -> 84283 bytes docs/manual/index.md | 277 + docs/manual/usage_on_HPCs.md | 164 + docs/mpi_diagram/class_diagram | 1 + docs/mpi_diagram/earthquake_relocation | 1 + .../earthquake_relocation.drawio.png | Bin 0 -> 40554 bytes docs/mpi_diagram/mpi_group_explanation | 1 + docs/mpi_diagram/mpi_group_explanation.pdf | Bin 0 -> 49155 bytes examples/.DS_Store | Bin 0 -> 10244 bytes examples/clean_examples.sh | 7 + .../3_input_params/input_params_inv.yaml | 215 + .../3_input_params/input_params_signal.yaml | 50 + examples/eg1_seismic_tomography/README.md | 29 + .../assign_gaussian_noise.py | 16 + .../eg1_seismic_tomography/plot_output.py | 250 + .../prepare_input_files.py | 63 + .../run_this_example.sh | 29 + .../3_input_params/input_params_loc.yaml | 114 + .../3_input_params/input_params_signal.yaml | 50 + examples/eg2_earthquake_location/README.md | 29 + .../assign_gaussian_noise.py | 30 + .../eg2_earthquake_location/plot_output.py | 254 + .../prepare_input_files.py | 61 + .../run_this_example.sh | 27 + .../input_params_joint_step1.yaml | 114 + .../input_params_joint_step2.yaml | 312 + .../input_params_joint_step3.yaml | 139 + .../3_input_params/input_params_signal.yaml | 50 + examples/eg3_joint_inversion/README.md | 29 + .../assign_gaussian_noise.py | 34 + examples/eg3_joint_inversion/plot_output.py | 286 + .../prepare_input_files.py | 63 + .../eg3_joint_inversion/run_this_example.sh | 40 + .../input_params_1dinv_inv.yaml | 215 + .../input_params_1dinv_signal.yaml | 215 + examples/eg4_1d_inversion/plot_output.py | 37 + .../eg4_1d_inversion/prepare_input_files.py | 64 + examples/eg4_1d_inversion/run_this_example.sh | 27 + .../.DS_Store | Bin 0 -> 6148 bytes .../3_input_params/input_params_real.yaml | 186 + .../README.md | 30 + .../plot_output.py | 222 + .../prepare_input_files.py | 45 + .../run_this_example.sh | 16 + .../tectonics/SAF | 68 + .../tectonics/SAF_creeping | 10 + .../tectonics/SAF_locked | 10 + .../tectonics/SAF_transition | 5 + .../.DS_Store | Bin 0 -> 6148 bytes .../3_input_params/input_params_real.yaml | 187 + .../README.md | 29 + .../plot_output.py | 260 + .../prepare_input_files.py | 45 + .../run_this_example.sh | 16 + .../tectonics/3PagodasFault.txt | 9 + .../tectonics/DBPF.txt | 12 + .../tectonics/Khorat_new.txt | 74 + .../tectonics/SongMaSuture.txt | 7 + .../tectonics/WangChaoFault.txt | 35 + .../1_crust1.0_ak135_model.py | 105 + .../3_input_params/input_params_real.yaml | 186 + .../ak135.h5 | Bin 0 -> 5336 bytes .../run_this_example.sh | 10 + .../1_generate_models.py | 287 + .../2_plot_models.py | 338 + .../input_params/input_params.yaml | 50 + .../run_this_example.sh | 13 + examples/scripts_of_plotting/1_plot_model.py | 173 + .../scripts_of_plotting/2_plot_time_field.py | 187 + examples/scripts_of_plotting/3_plot_kernel.py | 189 + .../4_plot_earthquake_station.py | 54 + .../5_plot_objective_function.py | 124 + .../6_plot_data_residual.py | 86 + .../7_plot_inversion_grid.py | 61 + examples/scripts_of_plotting/README.md | 16 + examples/scripts_of_plotting/prepare_files.py | 21 + .../scripts_of_plotting/run_this_example.sh | 50 + examples/src_rec_file_instruction.jpg | Bin 0 -> 2031745 bytes examples/utils/functions_for_data.ipynb | 2719 ++ examples/utils/functions_for_data.py | 2414 ++ examples/utils/svel13_chen.cpt | 15 + external_libs/.DS_Store | Bin 0 -> 6148 bytes external_libs/CMakeLists.txt | 60 + external_libs/tinyxml2/tinyxml2.cpp | 2987 ++ external_libs/tinyxml2/tinyxml2.h | 2380 ++ external_libs/yaml-cpp-cstdint.patch | 10 + include/1d_models.h | 397 + include/config.h | 332 + include/eikonal_solver_2d.h | 79 + include/grid.fwd.h | 2 + include/grid.h | 445 + include/input_params.h | 574 + include/inv_grid.h | 75 + include/io.fwd.h | 2 + include/io.h | 284 + include/iterator.h | 161 + include/iterator_legacy.h | 82 + include/iterator_level.h | 65 + include/iterator_selector.h | 98 + include/kernel.h | 226 + include/lbfgs.h | 577 + include/main_routines_calling.h | 923 + include/main_routines_earthquake_relocation.h | 149 + include/main_routines_inversion_mode.h | 293 + include/model_optimization_routines.h | 496 + include/model_update.h | 485 + include/mpi_funcs.h | 1062 + include/objective_function_utils.h | 181 + include/oneD_inversion.h | 109 + include/receiver.h | 36 + include/simd_conf.h | 194 + include/smooth.h | 773 + include/smooth_descent_dir.h | 319 + include/smooth_grad_regul.h | 321 + include/source.fwd.h | 2 + include/source.h | 71 + include/src_rec.h | 211 + include/timer.h | 98 + include/utils.h | 401 + include/vectorized_sweep.h | 825 + include/version.h.in | 10 + install_mpi_and_hdf5_local.sh | 48 + install_mpi_and_hdf5_local_clang.sh | 30 + install_mpi_and_hdf5_local_intel.sh | 26 + singularity/Dockerfile | 45 + singularity/Dockerfile_singularity_on_centos6 | 47 + ...Dockerfile_singularity_on_centos6_cuda10.1 | 47 + singularity/README.md | 51 + singularity/tomoatt.def | 87 + singularity/tomoatt_cuda.def | 87 + src/SrcRecWeight.cxx | 505 + src/TOMOATT.cxx | 131 + src/TOMOATT_2d_precalc.cxx | 73 + src/TOMOATT_solver_only.cxx | 165 + src/eikonal_solver_2d.cpp | 1075 + src/grid.cpp | 2305 ++ src/input_params.cpp | 3291 ++ src/inv_grid.cpp | 229 + src/io.cpp | 2370 ++ src/iterator.cpp | 3384 ++ src/iterator_legacy.cpp | 490 + src/iterator_level.cpp | 1108 + src/oneD_inversion.cpp | 1367 + src/receiver.cpp | 1579 + src/source.cpp | 187 + src/src_rec.cpp | 1751 + test/.DS_Store | Bin 0 -> 6148 bytes test/clean_test.sh | 36 + test/inversion_small/README.md | 28 + test/inversion_small/check_3d_out.ipynb | 122 + test/inversion_small/data_post_process.py | 71 + ...ample_to_check_result_with_pytomoatt.ipynb | 4268 ++ test/inversion_small/img/result_fun.png | Bin 0 -> 79670 bytes test/inversion_small/input_params.yml | 259 + .../input_params_flexible_inv_grid.yml | 188 + test/inversion_small/input_params_pre.yml | 57 + test/inversion_small/make_test_model.ipynb | 347 + test/inversion_small/make_test_model.py | 240 + test/inversion_small/run_this_example.sh | 36 + test/old_tests/.DS_Store | Bin 0 -> 10244 bytes .../heterogeneous_inv_test/input_params.yml | 50 + .../input_params_pre.yml | 34 + .../make_test_model.ipynb | 441 + test/old_tests/inversion/README.md | 14 + test/old_tests/inversion/check_obj_func.ipynb | 66 + .../inversion/check_src_rec_file.ipynb | 185 + test/old_tests/inversion/input_params.yml | 51 + test/old_tests/inversion/input_params_pre.yml | 36 + .../old_tests/inversion/make_test_model.ipynb | 348 + test/old_tests/inversion_2/README.md | 14 + .../inversion_2/check_obj_func.ipynb | 62 + .../inversion_2/check_src_rec_file.ipynb | 119 + .../compare_with_fortran_code.ipynb | 284 + test/old_tests/inversion_2/fortran/Readme.txt | 3 + .../fortran/ega5/input/EARTHQUAKES.txt | 501 + .../fortran/ega5/input/EARTHQUAKES_5.txt | 6 + .../fortran/ega5/input/STATIONS.txt | 61 + .../fortran/ega5/input/STATIONS_5.txt | 6 + .../ega5_sphe_3d_inversion_Tong_3Dinv.f90 | 737 + .../inversion_2/fortran/eikon_solver_mpi.f90 | 2836 ++ .../station_source_to_srcrec_file.ipynb | 1115 + test/old_tests/inversion_2/input_params.yml | 54 + .../inversion_2/input_params_pre.yml | 36 + .../inversion_2/make_test_model.ipynb | 328 + test/old_tests/inversion_2_one_src/README.md | 14 + .../inversion_2_one_src/check_obj_func.ipynb | 64 + .../compare_with_fortran_code.ipynb | 491 + .../fortran_code/Readme.txt | 3 + .../fortran_code/ega5/input/EARTHQUAKES.txt | 2 + .../fortran_code/ega5/input/STATIONS.txt | 2 + .../fortran_code/ega5_sphe_3d_kernel.f90 | 737 + .../fortran_code/eikon_solver_mpi.f90 | 2838 ++ .../inversion_2_one_src/input_params.yml | 56 + .../inversion_2_one_src/input_params2.yml | 54 + .../inversion_2_one_src/input_params_pre.yml | 40 + .../inversion_2_one_src/input_params_pre2.yml | 36 + .../inversion_2_one_src/make_test_model.ipynb | 279 + .../inversion_2_one_src/make_test_model.py | 215 + test/old_tests/inversion_ASCII/README.md | 14 + .../inversion_ASCII/check_obj_func.ipynb | 66 + .../inversion_ASCII/check_src_rec_file.ipynb | 185 + .../inversion_ASCII/input_params.yml | 51 + .../inversion_ASCII/input_params_pre.yml | 37 + .../inversion_ASCII/make_test_model.ipynb | 338 + .../inversion_ASCII/view_result.ipynb | 94 + test/old_tests/inversion_one_src/README.md | 30 + .../inversion_one_src/input_params.yml | 44 + .../inversion_one_src/input_params_pre.yml | 35 + .../inversion_one_src/make_test_model.ipynb | 319 + .../inversion_one_src/make_test_model.py | 246 + test/old_tests/inversion_tele/1d_ak135.txt | 136 + test/old_tests/inversion_tele/1d_model.txt | 158 + test/old_tests/inversion_tele/README.md | 30 + .../check_1d_model_and_Tfield.ipynb | 111 + .../ega5/input/EARTHQUAKES_region | 201 + .../fortran_code/ega5/input/EARTHQUAKES_tele | 31 + .../fortran_code/ega5/input/STATIONS | 41 + .../fortran_code/ega5/input/inputdata.ipynb | 474 + .../fortran_code/ega5/input/prem_model.txt | 89 + .../fortran_code/ega5_sphe_3d_kernel.f90 | 1016 + .../fortran_code/eikon_solver_mpi.f90 | 5333 +++ .../old_tests/inversion_tele/input_params.yml | 48 + .../inversion_tele/input_params_pre.yml | 36 + .../inversion_tele/make_test_model.ipynb | 352 + .../inversion_tele_one_src/1d_ak135.txt | 136 + .../inversion_tele_one_src/1d_model.txt | 789 + .../inversion_tele_one_src/EARTHQUAKES_tele | 2 + .../inversion_tele_one_src/README.md | 19 + .../old_tests/inversion_tele_one_src/STATIONS | 51 + .../check_1d_model_and_Tfield.ipynb | 157 + .../compare_with_fortran_code.ipynb | 453 + .../ega5/input/EARTHQUAKES_region | 1 + .../fortran_code/ega5/input/EARTHQUAKES_tele | 2 + .../fortran_code/ega5/input/STATIONS | 51 + .../fortran_code/ega5/input/inputdata.ipynb | 474 + .../fortran_code/ega5/input/prem_model.txt | 89 + .../fortran_code/ega5_sphe_3d_kernel.f90 | 1022 + .../fortran_code/eikon_solver_mpi.f90 | 5333 +++ .../inversion_tele_one_src/input_params.yml | 47 + .../input_params_pre.yml | 34 + .../make_test_model.ipynb | 412 + .../inversion_tele_one_src/make_test_model.py | 331 + test/old_tests/only_source/README.md | 52 + test/old_tests/only_source/check_3d_out.ipynb | 91 + test/old_tests/only_source/input_params.yml | 33 + .../only_source/input_params_pre.yml | 33 + test/old_tests/only_source/make_test_model.py | 200 + .../solver_performance/analysis_iter.ipynb | 98 + .../solver_performance/check_3d_out.ipynb | 126 + .../check_src_rec_file.ipynb | 145 + test/old_tests/solver_performance/iter.txt | 59 + .../solver_performance/iter_cuda.txt | 100 + test/old_tests/solver_performance/log_val | 478 + .../solver_performance/make_test_model.py | 298 + .../solver_performance/plot_SIMD_effect.ipynb | 163 + .../solver_performance/pvpython_test.py | 139 + .../pyscript_written_by_paraview.py | 115 + .../pyscript_written_by_paraview2.py | 106 + .../run_performance_test.ipynb | 420 + .../speedup_200x200x200.png | Bin 0 -> 146719 bytes .../solver_performance/test_screenshot.png | Bin 0 -> 43942 bytes .../test_cg_smooth/check_pattern.ipynb | 90 + test/old_tests/test_cg_smooth/smooth_test.h | 200 + test/old_tests/test_cg_smooth/test.cpp | 78 + .../update_input_file/check_3d_out.ipynb | 122 + .../convert_param_file_2to3.py | 181 + .../update_input_file/data_post_process.py | 71 + .../update_input_file/input_params.yml | 49 + .../input_params_flexible_inv_grid.yml | 56 + .../update_input_file/input_params_pre.yml | 34 + .../update_input_file/input_params_ver3.yml | 182 + .../update_input_file/make_test_model.ipynb | 347 + .../update_input_file/make_test_model.py | 241 + .../update_input_file/params_log.yaml | 236 + .../update_input_file/params_log_old.yaml | 80 + .../params_log_old.yaml.v3.yaml | 182 + .../update_input_file/params_model_v3.yaml | 206 + .../update_input_file/run_this_example.sh | 13 + test/old_tests/update_input_file/test.ipynb | 312 + test/old_tests/update_input_file/time.txt | 34561 ++++++++++++++++ test/plot_time.ipynb | 356 + test/run_test.sh | 42 + tests/read_write_srcrec.cxx | 9 + utils/__init__.py | 0 utils/compare_models.py | 67 + utils/convert_param_file_2to3.py | 184 + utils/find_2_bytes_chars.py | 28 + utils/params_model_v3.yaml | 230 + utils/src_rec_file_helper.py | 357 + utils/tomoatt_data_retrieval.py | 228 + 308 files changed, 129940 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 README.md create mode 100644 README_install_HDF5.md create mode 100644 cuda/cuda_constants.cuh create mode 100644 cuda/cuda_initialize.cuh create mode 100644 cuda/cuda_utils.cu create mode 100644 cuda/cuda_utils.cuh create mode 100644 cuda/grid_wrapper.cu create mode 100644 cuda/grid_wrapper.cuh create mode 100644 cuda/iterator_wrapper.cu create mode 100644 cuda/iterator_wrapper.cuh create mode 100755 debug_mpi.sh create mode 100644 docs/.DS_Store create mode 100644 docs/logo/TomoATT_logo.png create mode 100644 docs/logo/TomoATT_logo.svg create mode 100644 docs/logo/TomoATT_logo_2.png create mode 100644 docs/logo/TomoATT_logo_only_cube.png create mode 100644 docs/manual/index.md create mode 100644 docs/manual/usage_on_HPCs.md create mode 100644 docs/mpi_diagram/class_diagram create mode 100644 docs/mpi_diagram/earthquake_relocation create mode 100644 docs/mpi_diagram/earthquake_relocation.drawio.png create mode 100644 docs/mpi_diagram/mpi_group_explanation create mode 100644 docs/mpi_diagram/mpi_group_explanation.pdf create mode 100644 examples/.DS_Store create mode 100755 examples/clean_examples.sh create mode 100644 examples/eg1_seismic_tomography/3_input_params/input_params_inv.yaml create mode 100644 examples/eg1_seismic_tomography/3_input_params/input_params_signal.yaml create mode 100644 examples/eg1_seismic_tomography/README.md create mode 100644 examples/eg1_seismic_tomography/assign_gaussian_noise.py create mode 100644 examples/eg1_seismic_tomography/plot_output.py create mode 100644 examples/eg1_seismic_tomography/prepare_input_files.py create mode 100644 examples/eg1_seismic_tomography/run_this_example.sh create mode 100644 examples/eg2_earthquake_location/3_input_params/input_params_loc.yaml create mode 100644 examples/eg2_earthquake_location/3_input_params/input_params_signal.yaml create mode 100644 examples/eg2_earthquake_location/README.md create mode 100644 examples/eg2_earthquake_location/assign_gaussian_noise.py create mode 100644 examples/eg2_earthquake_location/plot_output.py create mode 100644 examples/eg2_earthquake_location/prepare_input_files.py create mode 100644 examples/eg2_earthquake_location/run_this_example.sh create mode 100644 examples/eg3_joint_inversion/3_input_params/input_params_joint_step1.yaml create mode 100644 examples/eg3_joint_inversion/3_input_params/input_params_joint_step2.yaml create mode 100644 examples/eg3_joint_inversion/3_input_params/input_params_joint_step3.yaml create mode 100644 examples/eg3_joint_inversion/3_input_params/input_params_signal.yaml create mode 100644 examples/eg3_joint_inversion/README.md create mode 100644 examples/eg3_joint_inversion/assign_gaussian_noise.py create mode 100644 examples/eg3_joint_inversion/plot_output.py create mode 100644 examples/eg3_joint_inversion/prepare_input_files.py create mode 100644 examples/eg3_joint_inversion/run_this_example.sh create mode 100644 examples/eg4_1d_inversion/3_input_params/input_params_1dinv_inv.yaml create mode 100644 examples/eg4_1d_inversion/3_input_params/input_params_1dinv_signal.yaml create mode 100644 examples/eg4_1d_inversion/plot_output.py create mode 100644 examples/eg4_1d_inversion/prepare_input_files.py create mode 100644 examples/eg4_1d_inversion/run_this_example.sh create mode 100644 examples/realcase1_regional_tomography_California/.DS_Store create mode 100644 examples/realcase1_regional_tomography_California/3_input_params/input_params_real.yaml create mode 100644 examples/realcase1_regional_tomography_California/README.md create mode 100644 examples/realcase1_regional_tomography_California/plot_output.py create mode 100644 examples/realcase1_regional_tomography_California/prepare_input_files.py create mode 100644 examples/realcase1_regional_tomography_California/run_this_example.sh create mode 100644 examples/realcase1_regional_tomography_California/tectonics/SAF create mode 100644 examples/realcase1_regional_tomography_California/tectonics/SAF_creeping create mode 100644 examples/realcase1_regional_tomography_California/tectonics/SAF_locked create mode 100644 examples/realcase1_regional_tomography_California/tectonics/SAF_transition create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/.DS_Store create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/3_input_params/input_params_real.yaml create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/README.md create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/plot_output.py create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/prepare_input_files.py create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/run_this_example.sh create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/tectonics/3PagodasFault.txt create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/tectonics/DBPF.txt create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/tectonics/Khorat_new.txt create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/tectonics/SongMaSuture.txt create mode 100644 examples/realcase2_teleseismic_tomography_Thailand/tectonics/WangChaoFault.txt create mode 100644 examples/scripts_of_generate_community_model/1_crust1.0_ak135_model.py create mode 100644 examples/scripts_of_generate_community_model/3_input_params/input_params_real.yaml create mode 100644 examples/scripts_of_generate_community_model/ak135.h5 create mode 100644 examples/scripts_of_generate_community_model/run_this_example.sh create mode 100644 examples/scripts_of_generate_hdf5_model/1_generate_models.py create mode 100644 examples/scripts_of_generate_hdf5_model/2_plot_models.py create mode 100644 examples/scripts_of_generate_hdf5_model/input_params/input_params.yaml create mode 100644 examples/scripts_of_generate_hdf5_model/run_this_example.sh create mode 100644 examples/scripts_of_plotting/1_plot_model.py create mode 100644 examples/scripts_of_plotting/2_plot_time_field.py create mode 100644 examples/scripts_of_plotting/3_plot_kernel.py create mode 100644 examples/scripts_of_plotting/4_plot_earthquake_station.py create mode 100644 examples/scripts_of_plotting/5_plot_objective_function.py create mode 100644 examples/scripts_of_plotting/6_plot_data_residual.py create mode 100644 examples/scripts_of_plotting/7_plot_inversion_grid.py create mode 100644 examples/scripts_of_plotting/README.md create mode 100644 examples/scripts_of_plotting/prepare_files.py create mode 100644 examples/scripts_of_plotting/run_this_example.sh create mode 100644 examples/src_rec_file_instruction.jpg create mode 100644 examples/utils/functions_for_data.ipynb create mode 100644 examples/utils/functions_for_data.py create mode 100644 examples/utils/svel13_chen.cpt create mode 100644 external_libs/.DS_Store create mode 100644 external_libs/CMakeLists.txt create mode 100644 external_libs/tinyxml2/tinyxml2.cpp create mode 100644 external_libs/tinyxml2/tinyxml2.h create mode 100644 external_libs/yaml-cpp-cstdint.patch create mode 100644 include/1d_models.h create mode 100644 include/config.h create mode 100644 include/eikonal_solver_2d.h create mode 100644 include/grid.fwd.h create mode 100644 include/grid.h create mode 100644 include/input_params.h create mode 100644 include/inv_grid.h create mode 100644 include/io.fwd.h create mode 100644 include/io.h create mode 100644 include/iterator.h create mode 100644 include/iterator_legacy.h create mode 100644 include/iterator_level.h create mode 100644 include/iterator_selector.h create mode 100644 include/kernel.h create mode 100644 include/lbfgs.h create mode 100644 include/main_routines_calling.h create mode 100644 include/main_routines_earthquake_relocation.h create mode 100644 include/main_routines_inversion_mode.h create mode 100644 include/model_optimization_routines.h create mode 100644 include/model_update.h create mode 100644 include/mpi_funcs.h create mode 100644 include/objective_function_utils.h create mode 100644 include/oneD_inversion.h create mode 100644 include/receiver.h create mode 100644 include/simd_conf.h create mode 100644 include/smooth.h create mode 100644 include/smooth_descent_dir.h create mode 100644 include/smooth_grad_regul.h create mode 100644 include/source.fwd.h create mode 100644 include/source.h create mode 100644 include/src_rec.h create mode 100644 include/timer.h create mode 100644 include/utils.h create mode 100644 include/vectorized_sweep.h create mode 100644 include/version.h.in create mode 100755 install_mpi_and_hdf5_local.sh create mode 100755 install_mpi_and_hdf5_local_clang.sh create mode 100755 install_mpi_and_hdf5_local_intel.sh create mode 100644 singularity/Dockerfile create mode 100644 singularity/Dockerfile_singularity_on_centos6 create mode 100644 singularity/Dockerfile_singularity_on_centos6_cuda10.1 create mode 100644 singularity/README.md create mode 100644 singularity/tomoatt.def create mode 100644 singularity/tomoatt_cuda.def create mode 100644 src/SrcRecWeight.cxx create mode 100644 src/TOMOATT.cxx create mode 100644 src/TOMOATT_2d_precalc.cxx create mode 100644 src/TOMOATT_solver_only.cxx create mode 100644 src/eikonal_solver_2d.cpp create mode 100644 src/grid.cpp create mode 100644 src/input_params.cpp create mode 100644 src/inv_grid.cpp create mode 100644 src/io.cpp create mode 100644 src/iterator.cpp create mode 100644 src/iterator_legacy.cpp create mode 100644 src/iterator_level.cpp create mode 100644 src/oneD_inversion.cpp create mode 100644 src/receiver.cpp create mode 100644 src/source.cpp create mode 100644 src/src_rec.cpp create mode 100644 test/.DS_Store create mode 100755 test/clean_test.sh create mode 100644 test/inversion_small/README.md create mode 100644 test/inversion_small/check_3d_out.ipynb create mode 100644 test/inversion_small/data_post_process.py create mode 100644 test/inversion_small/example_to_check_result_with_pytomoatt.ipynb create mode 100644 test/inversion_small/img/result_fun.png create mode 100644 test/inversion_small/input_params.yml create mode 100644 test/inversion_small/input_params_flexible_inv_grid.yml create mode 100644 test/inversion_small/input_params_pre.yml create mode 100644 test/inversion_small/make_test_model.ipynb create mode 100644 test/inversion_small/make_test_model.py create mode 100755 test/inversion_small/run_this_example.sh create mode 100644 test/old_tests/.DS_Store create mode 100644 test/old_tests/heterogeneous_inv_test/input_params.yml create mode 100644 test/old_tests/heterogeneous_inv_test/input_params_pre.yml create mode 100644 test/old_tests/heterogeneous_inv_test/make_test_model.ipynb create mode 100644 test/old_tests/inversion/README.md create mode 100644 test/old_tests/inversion/check_obj_func.ipynb create mode 100644 test/old_tests/inversion/check_src_rec_file.ipynb create mode 100644 test/old_tests/inversion/input_params.yml create mode 100644 test/old_tests/inversion/input_params_pre.yml create mode 100644 test/old_tests/inversion/make_test_model.ipynb create mode 100644 test/old_tests/inversion_2/README.md create mode 100644 test/old_tests/inversion_2/check_obj_func.ipynb create mode 100644 test/old_tests/inversion_2/check_src_rec_file.ipynb create mode 100644 test/old_tests/inversion_2/compare_with_fortran_code.ipynb create mode 100644 test/old_tests/inversion_2/fortran/Readme.txt create mode 100644 test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt create mode 100644 test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES_5.txt create mode 100644 test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt create mode 100644 test/old_tests/inversion_2/fortran/ega5/input/STATIONS_5.txt create mode 100644 test/old_tests/inversion_2/fortran/ega5_sphe_3d_inversion_Tong_3Dinv.f90 create mode 100644 test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90 create mode 100644 test/old_tests/inversion_2/fortran/station_source_to_srcrec_file.ipynb create mode 100644 test/old_tests/inversion_2/input_params.yml create mode 100644 test/old_tests/inversion_2/input_params_pre.yml create mode 100644 test/old_tests/inversion_2/make_test_model.ipynb create mode 100644 test/old_tests/inversion_2_one_src/README.md create mode 100644 test/old_tests/inversion_2_one_src/check_obj_func.ipynb create mode 100644 test/old_tests/inversion_2_one_src/compare_with_fortran_code.ipynb create mode 100644 test/old_tests/inversion_2_one_src/fortran_code/Readme.txt create mode 100644 test/old_tests/inversion_2_one_src/fortran_code/ega5/input/EARTHQUAKES.txt create mode 100644 test/old_tests/inversion_2_one_src/fortran_code/ega5/input/STATIONS.txt create mode 100644 test/old_tests/inversion_2_one_src/fortran_code/ega5_sphe_3d_kernel.f90 create mode 100644 test/old_tests/inversion_2_one_src/fortran_code/eikon_solver_mpi.f90 create mode 100644 test/old_tests/inversion_2_one_src/input_params.yml create mode 100644 test/old_tests/inversion_2_one_src/input_params2.yml create mode 100644 test/old_tests/inversion_2_one_src/input_params_pre.yml create mode 100644 test/old_tests/inversion_2_one_src/input_params_pre2.yml create mode 100644 test/old_tests/inversion_2_one_src/make_test_model.ipynb create mode 100644 test/old_tests/inversion_2_one_src/make_test_model.py create mode 100644 test/old_tests/inversion_ASCII/README.md create mode 100644 test/old_tests/inversion_ASCII/check_obj_func.ipynb create mode 100644 test/old_tests/inversion_ASCII/check_src_rec_file.ipynb create mode 100644 test/old_tests/inversion_ASCII/input_params.yml create mode 100644 test/old_tests/inversion_ASCII/input_params_pre.yml create mode 100644 test/old_tests/inversion_ASCII/make_test_model.ipynb create mode 100644 test/old_tests/inversion_ASCII/view_result.ipynb create mode 100644 test/old_tests/inversion_one_src/README.md create mode 100644 test/old_tests/inversion_one_src/input_params.yml create mode 100644 test/old_tests/inversion_one_src/input_params_pre.yml create mode 100644 test/old_tests/inversion_one_src/make_test_model.ipynb create mode 100644 test/old_tests/inversion_one_src/make_test_model.py create mode 100644 test/old_tests/inversion_tele/1d_ak135.txt create mode 100644 test/old_tests/inversion_tele/1d_model.txt create mode 100644 test/old_tests/inversion_tele/README.md create mode 100644 test/old_tests/inversion_tele/check_1d_model_and_Tfield.ipynb create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_region create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_tele create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5/input/STATIONS create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5/input/inputdata.ipynb create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5/input/prem_model.txt create mode 100644 test/old_tests/inversion_tele/fortran_code/ega5_sphe_3d_kernel.f90 create mode 100644 test/old_tests/inversion_tele/fortran_code/eikon_solver_mpi.f90 create mode 100644 test/old_tests/inversion_tele/input_params.yml create mode 100644 test/old_tests/inversion_tele/input_params_pre.yml create mode 100644 test/old_tests/inversion_tele/make_test_model.ipynb create mode 100644 test/old_tests/inversion_tele_one_src/1d_ak135.txt create mode 100644 test/old_tests/inversion_tele_one_src/1d_model.txt create mode 100644 test/old_tests/inversion_tele_one_src/EARTHQUAKES_tele create mode 100644 test/old_tests/inversion_tele_one_src/README.md create mode 100644 test/old_tests/inversion_tele_one_src/STATIONS create mode 100644 test/old_tests/inversion_tele_one_src/check_1d_model_and_Tfield.ipynb create mode 100644 test/old_tests/inversion_tele_one_src/compare_with_fortran_code.ipynb create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_region create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_tele create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/STATIONS create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/inputdata.ipynb create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/prem_model.txt create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/ega5_sphe_3d_kernel.f90 create mode 100644 test/old_tests/inversion_tele_one_src/fortran_code/eikon_solver_mpi.f90 create mode 100644 test/old_tests/inversion_tele_one_src/input_params.yml create mode 100644 test/old_tests/inversion_tele_one_src/input_params_pre.yml create mode 100644 test/old_tests/inversion_tele_one_src/make_test_model.ipynb create mode 100644 test/old_tests/inversion_tele_one_src/make_test_model.py create mode 100644 test/old_tests/only_source/README.md create mode 100644 test/old_tests/only_source/check_3d_out.ipynb create mode 100644 test/old_tests/only_source/input_params.yml create mode 100644 test/old_tests/only_source/input_params_pre.yml create mode 100644 test/old_tests/only_source/make_test_model.py create mode 100644 test/old_tests/solver_performance/analysis_iter.ipynb create mode 100644 test/old_tests/solver_performance/check_3d_out.ipynb create mode 100644 test/old_tests/solver_performance/check_src_rec_file.ipynb create mode 100644 test/old_tests/solver_performance/iter.txt create mode 100644 test/old_tests/solver_performance/iter_cuda.txt create mode 100644 test/old_tests/solver_performance/log_val create mode 100644 test/old_tests/solver_performance/make_test_model.py create mode 100644 test/old_tests/solver_performance/plot_SIMD_effect.ipynb create mode 100644 test/old_tests/solver_performance/pvpython_test.py create mode 100644 test/old_tests/solver_performance/pyscript_written_by_paraview.py create mode 100644 test/old_tests/solver_performance/pyscript_written_by_paraview2.py create mode 100644 test/old_tests/solver_performance/run_performance_test.ipynb create mode 100644 test/old_tests/solver_performance/speedup_200x200x200.png create mode 100644 test/old_tests/solver_performance/test_screenshot.png create mode 100644 test/old_tests/test_cg_smooth/check_pattern.ipynb create mode 100644 test/old_tests/test_cg_smooth/smooth_test.h create mode 100644 test/old_tests/test_cg_smooth/test.cpp create mode 100644 test/old_tests/update_input_file/check_3d_out.ipynb create mode 100644 test/old_tests/update_input_file/convert_param_file_2to3.py create mode 100644 test/old_tests/update_input_file/data_post_process.py create mode 100644 test/old_tests/update_input_file/input_params.yml create mode 100644 test/old_tests/update_input_file/input_params_flexible_inv_grid.yml create mode 100644 test/old_tests/update_input_file/input_params_pre.yml create mode 100644 test/old_tests/update_input_file/input_params_ver3.yml create mode 100644 test/old_tests/update_input_file/make_test_model.ipynb create mode 100644 test/old_tests/update_input_file/make_test_model.py create mode 100644 test/old_tests/update_input_file/params_log.yaml create mode 100644 test/old_tests/update_input_file/params_log_old.yaml create mode 100644 test/old_tests/update_input_file/params_log_old.yaml.v3.yaml create mode 100644 test/old_tests/update_input_file/params_model_v3.yaml create mode 100755 test/old_tests/update_input_file/run_this_example.sh create mode 100644 test/old_tests/update_input_file/test.ipynb create mode 100644 test/old_tests/update_input_file/time.txt create mode 100644 test/plot_time.ipynb create mode 100755 test/run_test.sh create mode 100644 tests/read_write_srcrec.cxx create mode 100644 utils/__init__.py create mode 100644 utils/compare_models.py create mode 100644 utils/convert_param_file_2to3.py create mode 100644 utils/find_2_bytes_chars.py create mode 100644 utils/params_model_v3.yaml create mode 100644 utils/src_rec_file_helper.py create mode 100644 utils/tomoatt_data_retrieval.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8256d0f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Stroe \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3fb2ed3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,292 @@ +cmake_minimum_required(VERSION 3.10) + +# set the project name +set(CMAKE_PROJECT_NAME "TOMOATT") +project(${CMAKE_PROJECT_NAME} VERSION 1.1.2 LANGUAGES C CXX ) + +# set install directory +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +# check debug or release +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + message(STATUS "Build type: Debug") +else() + message(STATUS "Build type: Release") +endif() + +# check compiler type +message(STATUS "Compiler type: ${CMAKE_CXX_COMPILER_ID}") +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CXX_ADDITIONAL_FLAGS "-Wall -pedantic -g -O0") + else() + set(CXX_ADDITIONAL_FLAGS "-Wall -pedantic -O3 -funroll-loops -ffast-math -ftree-vectorize") + endif() +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CXX_ADDITIONAL_FLAGS "-Wall -pedantic -g -O0 -lm -lstdc++fs") + else() + set(CXX_ADDITIONAL_FLAGS "-Wall -pedantic -lm -O3 -funroll-loops -ffast-math -ftree-vectorize -lstdc++fs") + endif() +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CXX_ADDITIONAL_FLAGS "-diag-disable=10441,2012,2015,2017,2047,2304,2305,3868,10193,10315,11074,11076 -Wall -pedantic -g -O0 -lm -lstdc++fs") + else() + set(CXX_ADDITIONAL_FLAGS "-diag-disable=10441,2012,2015,2017,2047,2304,2305,3868,10193,10315,11074,11076 -Wall -pedantic -O3 -funroll-loops -ffast-math -lm -ftree-vectorize -lstdc++fs") + endif() +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Fujitsu") + MESSAGE(FATAL_ERROR "Fujitsu trad compiler is not supported. Please use clang mode.") +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "FujitsuClang") + MESSAGE("Compiler type: FujitsuClang") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CXX_ADDITIONAL_FLAGS "-Nclang -g -O0 -std=c++17 -mcpu=a64fx+sve -march=armv8-a+sve") + else() + set(CXX_ADDITIONAL_FLAGS "-Nclang -Ofast -std=c++17 -mcpu=a64fx+sve -march=armv8-a+sve") + endif() +else() + MESSAGE(FATAL_ERROR "Compiler type: Unknown") +endif() +# Default to C++17 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 17) +endif() + +set(BUILD_TESTING OFF) +option(FORCE_DOWNLOAD_EXTERNAL_LIBS "Force download and use external libraries" OFF) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_ADDITIONAL_FLAGS}") + +# find installed MPI +message(STATUS "Running CMAKE FindMPI.cmake...") +find_package(MPI) + +message(STATUS "MPI_FOUND: ${MPI_FOUND}") +message(STATUS "MPI_VERSION: ${MPI_VERSION}") + +# find openmp ## WE DO NOT USE OPENMP BUT KEEP THIS FOR FUTURE USE +###find_package(OpenMP) +###if(OPENMP_FOUND) +### message(STATUS "OpenMP found") +### set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") +### set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") +### set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") +### add_definitions(-DUSE_OMP) +###endif() + +# find HDF5 parallel TODO: check parallel io is enable or not +message(STATUS "Running CMAKE FindHDF5.cmake...") +# set parallel HDF5 default +set(HDF5_PREFER_PARALLEL TRUE) +find_package(HDF5) +if(HDF5_FOUND) + message(STATUS "HDF5_FOUND: ${HDF5_FOUND}") + add_definitions(-DUSE_HDF5) + # check if HD5 PARALLEL is available + if(HDF5_IS_PARALLEL) + message(STATUS "HDF5 parallel is available.") + else() + message(FATAL "TomoATT requires HDF5 compiled with parallel IO option.") + endif() +endif() + +# use collective io for HDF5: should be faster than independent io, +#but there will be a memory overhead and may not work on some systems. +#If you have a problem, please comment out this line. +add_definitions(-DUSE_HDF5_IO_COLLECTIVE) + +# precision setting (uncomment for single precision. default is double precision.) +#add_definitions(-DSINGLE_PRECISION) + +# use SIMD (SSE/AVX/AVX2/AVX512) for vectorization, which is faster than the default but use a little more memory. +if (USE_SIMD) + message(STATUS "TomoATT is compiled with SIMD.") + add_definitions(-DUSE_SIMD) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mfma") +endif() + +# find cuda package if USE_CUDA is defined +if(USE_CUDA) + message(STATUS "Running CMAKE FindCUDA.cmake...") + enable_language(CUDA) + find_package(CUDA) +else() + message(STATUS "TomoATT is compiled without cuda, because -DUSE_CUDA=True is not defined") +endif() + +if(CUDA_FOUND) # TODO : add HIP here in the future + message(STATUS "CUDA_FOUND: ${CUDA_FOUND}") + add_definitions(-DUSE_CUDA) + set(CUDA_LIBRARY_NAME "TOMOATT_CUDA") + + # list of source and header files for cuda + file(GLOB SOURCES_CUDA "cuda/*.cu") + file(GLOB HEADERS_CUDA "cuda/*.cuh") + + # cuda flag + # + # for production + set(CMAKE_CUDA_FLAGS "-fPIC -O3 -use_fast_math -extra-device-vectorization -gencode arch=compute_61,code=sm_61") + # + # for debugging + #set(CMAKE_CUDA_FLAGS "-fPIC -lineinfo -g -G -O0 -gencode arch=compute_61,code=sm_61") + set(CMAKE_CUDA_STANDARD "11") + message(STATUS, "TomoATT will be compiled with cuda.") +else() + message(STATUS "TomoATT will be compiled without cuda, because cuda is not found or -DUSE_CUDA=True was not specified.") +endif() + +# synchronize the adjuscent ghost layers for each direction oft the sweep +# which is more frequent than the referred paper but necessary +add_definitions(-DFREQ_SYNC_GHOST) + +# find BLAS # WE DO NOT USE BLAS BUT KEEP THIS FOR FUTURE USE +#find_package(BLAS) +#if(BLAS_FOUND) +# message(STATUS "BLAS_FOUND: ${BLAS_FOUND} at ${BLAS_LIBRARIES}, ${BLAS_INCLUDE_DIRS}") +# add_definitions(-DUSE_BLAS) +# find_path(BLAS_INCLUDE_DIRS cblas.h +# /usr/include +# /usr/local/include +# /usr/local/include/openblas) +#endif() + +# submodules +# yaml parser +find_package(yaml-cpp 0.8 QUIET) +if (yaml-cpp_FOUND AND NOT ${FORCE_DOWNLOAD_EXTERNAL_LIBS}) + message(STATUS "yaml-cpp found") + message(STATUS "YAML_CPP_INCLUDE_DIR: ${YAML_CPP_INCLUDE_DIR}") + message(STATUS "YAML_CPP_LIBRARIES: ${YAML_CPP_LIBRARIES}") +else() + message(STATUS "yaml-cpp not found. Using external_libs/yaml-cpp ...") + add_subdirectory(external_libs) + set(YAML_CPP_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/external_libs/yaml-cpp/include) + set(YAML_CPP_LIBRARIES yaml-cpp) +endif() + +# add include directory +include_directories(include cuda) + +execute_process( + COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +configure_file( + ${PROJECT_SOURCE_DIR}/include/version.h.in + ${PROJECT_SOURCE_DIR}/include/version.h +) + +# list of source files +file(GLOB SOURCES "src/*.cpp") +if(CUDA_FOUND) + file(GLOB HEADERS "include/*.h" "cuda/*.cuh") +else() + file(GLOB HEADERS "include/*.h") +endif() +file(GLOB SOURCES_EXT_XML "external_libs/tinyxml2/*.cpp") + +# compile cuda code +if (CUDA_FOUND) + include_directories(${CUDA_INCLUDE_DIRS}) + add_library(${CUDA_LIBRARY_NAME} STATIC ${SOURCES_CUDA} ${HEADERS_CUDA} ) + target_include_directories(${CUDA_LIBRARY_NAME} PUBLIC ${YAML_CPP_INCLUDE_DIR}) + target_include_directories(${CUDA_LIBRARY_NAME} PUBLIC ${HDF5_INCLUDE_DIRS}) + target_include_directories(${CUDA_LIBRARY_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/external_libs/tinyxml2) +endif() + + +# +# compile the executables +# all the files with the name *.cxx is compiled as an executable +# +#file( GLOB APP_SOURCES src/*.cxx ) + +# add one by one +set(APP_SOURCES + src/TOMOATT.cxx + #src/TOMOATT_solver_only.cxx + #src/TOMOATT_2d_precalc.cxx + #src/SrcRecWeight.cxx + ) + +# if BUILD_TESTING is defined, make APP_TEST and append to APP_SOURCES list +if(BUILD_TESTING) + # use all the cxx files in tests/ directory + file( GLOB APP_TEST tests/*.cxx) + # or you can specify the test files one by one + #set(APP_TEST + # tests/read_write_srcrec.cxx + #) + list(APPEND APP_SOURCES ${APP_TEST}) +endif() + +foreach( execsourcefile ${APP_SOURCES} ) + # get app name from file name + get_filename_component(EXEC_NAME ${execsourcefile} NAME_WE) + + # add the executable + add_executable(${EXEC_NAME} ${execsourcefile} ${SOURCES} ${HEADERS} ${SOURCES_EXT_XML}) + + # set include path + target_include_directories(${EXEC_NAME} PRIVATE + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/cuda + ${PROJECT_SOURCE_DIR}/external_libs/tinyxml2) + + # link mpi + target_link_libraries(${EXEC_NAME} PUBLIC MPI::MPI_CXX) + + # link yaml-app: + target_link_libraries(${EXEC_NAME} PUBLIC ${YAML_CPP_LIBRARIES}) + target_include_directories(${EXEC_NAME} PUBLIC ${YAML_CPP_INCLUDE_DIR}) + + # link HDF5 + if(HDF5_FOUND) + target_link_libraries(${EXEC_NAME} PUBLIC ${HDF5_LIBRARIES}) + target_include_directories(${EXEC_NAME} PUBLIC ${HDF5_INCLUDE_DIRS}) + endif() + + # link blas + if(BLAS_FOUND) + target_link_libraries(${EXEC_NAME} PUBLIC ${BLAS_LIBRARIES}) + target_include_directories(${EXEC_NAME} PUBLIC ${BLAS_INCLUDE_DIRS}) + endif() + + # link cuda + if (CUDA_FOUND) + + #set_target_properties(${CUDA_LIBRARY_NAME} PROPERTIES CUDA_ARCHITECTURES "35;50;72") + set_target_properties(${CUDA_LIBRARY_NAME} PROPERTIES CUDA_ARCHITECTURES "61") + set_property(TARGET ${CUDA_LIBRARY_NAME} PROPERTY CUDA_ARCHITECTURES 61) + + target_link_libraries(${EXEC_NAME} PRIVATE ${CUDA_LIBRARY_NAME}) + target_link_libraries(${CUDA_LIBRARY_NAME} PUBLIC MPI::MPI_CXX) + target_link_libraries(${CUDA_LIBRARY_NAME} PUBLIC yaml-cpp) + target_link_libraries(${CUDA_LIBRARY_NAME} PUBLIC ${HDF5_LIBRARIES}) + + endif() + + +endforeach( execsourcefile ${APP_SOURCES} ) + +# install +install(TARGETS TOMOATT DESTINATION bin) + +# test + +# We check if this is the main file +# you don't usually want users of your library to +# execute tests as part of their build +if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR} AND BUILD_TESTING) + include(CTest) + + # loop over APP_TEST + foreach( execsourcefile ${APP_TEST} ) + add_test(NAME ${execsourcefile} COMMAND ${EXEC_NAME} ${execsourcefile}) + endforeach( execsourcefile ${APP_TEST} ) +endif () + +enable_testing() diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..073a122 --- /dev/null +++ b/README.md @@ -0,0 +1,102 @@ +# TomoATT + +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](LICENSE) +[![CI](https://github.com/mnagaso/TomoATT/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/mnagaso/TomoATT/actions/workflows/CI.yml) +[![Anaconda-Server Badge](https://anaconda.org/conda-forge/tomoatt/badges/version.svg)](https://anaconda.org/conda-forge/tomoatt) +[![Anaconda-Server Badge](https://anaconda.org/conda-forge/tomoatt/badges/platforms.svg)](https://anaconda.org/conda-forge/tomoatt) +[![Anaconda-Server Badge](https://anaconda.org/conda-forge/tomoatt/badges/latest_release_date.svg)](https://anaconda.org/conda-forge/tomoatt) + +![logo](docs/logo/TomoATT_logo_2.png) + +TomoATT is a library which implements an eikonal equation solver based Adjoint-state Traveltime Tomography for a very large-scale computation, which implements the methods described in the publications: + +- **The TomoATT software package** + - Chen, J., Nagaso, M., Xu, M., & Tong, P. (2025). TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy. Computers & Geosciences, 105995. [DOI](https://doi.org/10.1016/j.cageo.2025.105995). + +- **Regional tomography in Cartesian coordinates** + + - Tong, P. (2021). Adjoint‐state traveltime tomography: Eikonal equation‐based methods and application to the Anza area in southern California. Journal of Geophysical Research: Solid Earth, 126(5), e2021JB021818. [DOI](https://doi.org/10.1029/2021JB021818). + + - Tong, P. (2021). Adjoint‐state traveltime tomography for azimuthally anisotropic media and insight into the crustal structure of central California near Parkfield. Journal of Geophysical Research: Solid Earth, 126(10), e2021JB022365. [DOI](https://doi.org/10.1029/2021JB022365). + +- **Regional tomography in Spherical coordinates** + + - Chen, J., Chen, G., Nagaso, M., & Tong, P. (2023). Adjoint-state traveltime tomography for azimuthally anisotropic media in spherical coordinates. Geophysical Journal International, 234(1), 712-736. [DOI](https://doi.org/10.1093/gji/ggad093). + +- **Teleseismic tomography in Spherical coordinates** + + - Chen, J., Wu, S., Xu, M., Nagaso, M., Yao, J., Wang, K., ... & Tong, P. (2023). Adjoint‐state teleseismic traveltime tomography: Method and application to Thailand in Indochina Peninsula. Journal of Geophysical Research: Solid Earth, 128(12), e2023JB027348. [DOI](https://doi.org/10.1029/2023JB027348). + + +Thanks to the efficiency of an eikonal equation solver, the computation of the travel-time is very fast and requires less amount of computational resources. +As an input data for TomoATT is travel times at seismic stations, we can easily prepare a great amount of input data for the computation. + +This library is developped to be used for modeling a very-large domain. For this purpose, 3-layer parallelization is applied, which are: +- layer 1: simulutaneous run parallelization (travel times for multiple seismic sources may be calculated simultaneously) +- layer 2: subdomain decomposition (If the number of computational nodes requires too large memory, we can separate the domain into subdomains and run each subdomain in a separate compute node) +- layer 3: sweeping parallelization (in each subdomain, sweeping layers are also parallelized) + +The details of the parallelization method applied in this library are described in the paper [Miles Detrixhe and Frédéric Gibou (2016)](https://doi.org/10.1016/j.jcp.2016.06.023). + +Regional events (sources within the global domain) and teleseismic events (sources outside the global domain) may be used for inversion. + +## Quick installation +This library is available in the [conda-forge channel](https://anaconda.org/conda-forge/tomoatt). You can install it on personal computer by the following command: +``` bash +conda install -c conda-forge tomoatt pytomoatt +``` + +TomoATT is also capable of running on high-performance computing (HPC) systems and. Detailed installation instructions are described in the [installation manual](https://tomoatt.com/docs/GetStarted/Installation/Dependencies). + + + +## to run an example +``` bash +mpirun -n 4 ./TOMOATT -i ./input_params.yml +``` +Please check the [user manual](https://tomoatt.com/docs) and `examples` directory for the details. + + + diff --git a/README_install_HDF5.md b/README_install_HDF5.md new file mode 100644 index 0000000..ff58196 --- /dev/null +++ b/README_install_HDF5.md @@ -0,0 +1,12 @@ +# Compile HDF5 library with parallel option from the source + +1. run the install script `./install_mpi_and_hdf5_local.sh`, which compiles and creates openmpi and hdf5 executables in `./external_libs/local_mpi_hdf5/bin` + +2. compile TOMOATT by +``` bash +mkdir build && cd build +cmake .. -DCMAKE_PREFIX_PATH=$(pwd)/../external_libs/local_mpi_hdf5 +make -j16 +``` + +This creates TOMOATT executable at ./build/TOMOATT \ No newline at end of file diff --git a/cuda/cuda_constants.cuh b/cuda/cuda_constants.cuh new file mode 100644 index 0000000..0cedb2f --- /dev/null +++ b/cuda/cuda_constants.cuh @@ -0,0 +1,35 @@ +#ifndef CUDA_CONSTANTS_H +#define CUDA_CONSTANTS_H + +#include +#include + +#define CUSTOMREAL double // need here for cuda kernels +#define MPI_CR MPI_DOUBLE +//#define CUSTOMREAL float // need here for cuda kernels +//#define MPI_CR MPI_FLOAT + +#define MPI_DUMMY_TAG_CUDA 9999 + +// maximum grid dimension in one direction of GPU +//#define MAXIMUM_GRID_DIM 65535 + +#define CUDA_MAX_BLOCK_SIZE 1024 +#define CUDA_MAX_GRID_SIZE 65535 +#define CUDA_MAX_THREADS_PER_BLOCK 1024 + +//#define CUDA_SWEEPING_BLOCK_SIZE 16 // s +//#define CUDA_SWEEPING_BLOCK_SIZE 32 // 15.254 s +//#define CUDA_SWEEPING_BLOCK_SIZE 64 // 15.281 s +//#define CUDA_SWEEPING_BLOCK_SIZE 128 // 15.378 s +//#define CUDA_SWEEPING_BLOCK_SIZE 256 // s +#define CUDA_SWEEPING_BLOCK_SIZE 512 // +//#define CUDA_SWEEPING_BLOCK_SIZE 1024 // + + +#define CUDA_L1_BLOCK_SIZE 128 +//#define CUDA_L1_BLOCK_SIZE 256 + +#define CUDA_MAX_NUM_STREAMS 32 + +#endif // CUDA_CONSTANTS_H \ No newline at end of file diff --git a/cuda/cuda_initialize.cuh b/cuda/cuda_initialize.cuh new file mode 100644 index 0000000..66100b4 --- /dev/null +++ b/cuda/cuda_initialize.cuh @@ -0,0 +1,145 @@ +#ifndef CUDA_INITIALIZE_H +#define CUDA_INITIALIZE_H + + +#include +#include +#include + +//#include "config.h" +#include "cuda_constants.cuh" + +void get_free_memory(double* free_db, double* used_db, double* total_db) { + + // gets memory usage in byte + size_t free_byte ; + size_t total_byte ; + cudaError_t cuda_status = cudaMemGetInfo( &free_byte, &total_byte ) ; + if ( cudaSuccess != cuda_status ){ + printf("Error: cudaMemGetInfo fails, %s \n", cudaGetErrorString(cuda_status) ); + exit(EXIT_FAILURE); + } + + *free_db = (double)free_byte ; + *total_db = (double)total_byte ; + *used_db = *total_db - *free_db ; + return; +} + + +// setup cuda constants and variables by reading device properties +void initialize_cuda(){ + + std::cout << "Initializing CUDA..." << std::endl; + + int ncuda_device; + int device; + + // count number of devices + cudaGetDeviceCount(&ncuda_device); + + cudaError_t err = cudaGetLastError(); + if (err != cudaSuccess) { + printf("cudaGetDeviceCount returned error code %d after %d devices\n", err, ncuda_device); + exit(1); + } + + if (ncuda_device == 0) + { + printf("There is no device supporting CUDA\n"); + exit(1); + } + + // set the active device + if (ncuda_device >= 1){ + cudaDeviceReset(); + + device = world_rank % ncuda_device; + cudaSetDevice(device); + + cudaFree(0); + + // check device is set + cudaGetDevice(&device); + if (device != world_rank % ncuda_device){ + printf("Error: Could not set device to %d\n", world_rank % ncuda_device); + exit(1); + } + } // end if ncuda_device >= 1 + + cudaGetDevice(&device); + + // get device properties + cudaDeviceProp deviceProp; // in cuda_constants + cudaGetDeviceProperties(&deviceProp, device); + + // exit if machine has no cuda enable device + if (deviceProp.major == 9999 && deviceProp.minor == 9999){ + printf("Error: No CUDA device found\n"); + exit(1); + } + + // print device properties + char filename[256]; + + if (world_rank == 0){ + sprintf(filename, "cuda_device_info.txt"); + FILE *fp = fopen(filename, "w"); + + if(fp == NULL){ + printf("Error: Could not open file %s\n", filename); + exit(1); + } + + // display device properties + fprintf(fp,"Device Name = %s\n",deviceProp.name); + fprintf(fp,"memory:\n"); + fprintf(fp," totalGlobalMem (in MB): %f\n",(unsigned long) deviceProp.totalGlobalMem / (1024.f * 1024.f)); + fprintf(fp," totalGlobalMem (in GB): %f\n",(unsigned long) deviceProp.totalGlobalMem / (1024.f * 1024.f * 1024.f)); + fprintf(fp," totalConstMem (in bytes): %lu\n",(unsigned long) deviceProp.totalConstMem); + fprintf(fp," Maximum 1D texture size (in bytes): %lu\n",(unsigned long) deviceProp.maxTexture1D); + fprintf(fp," sharedMemPerBlock (in bytes): %lu\n",(unsigned long) deviceProp.sharedMemPerBlock); + fprintf(fp," regsPerBlock (in bytes): %lu\n",(unsigned long) deviceProp.regsPerBlock); + fprintf(fp,"blocks:\n"); + fprintf(fp," Maximum number of threads per block: %d\n",deviceProp.maxThreadsPerBlock); + fprintf(fp," Maximum size of each dimension of a block: %d x %d x %d\n", + deviceProp.maxThreadsDim[0],deviceProp.maxThreadsDim[1],deviceProp.maxThreadsDim[2]); + fprintf(fp," Maximum sizes of each dimension of a grid: %d x %d x %d\n", + deviceProp.maxGridSize[0],deviceProp.maxGridSize[1],deviceProp.maxGridSize[2]); + fprintf(fp,"features:\n"); + fprintf(fp," Compute capability of the device = %d.%d\n", deviceProp.major, deviceProp.minor); + fprintf(fp," multiProcessorCount: %d\n",deviceProp.multiProcessorCount); + if (deviceProp.canMapHostMemory){ + fprintf(fp," canMapHostMemory: TRUE\n"); + }else{ + fprintf(fp," canMapHostMemory: FALSE\n"); + } + if (deviceProp.deviceOverlap){ + fprintf(fp," deviceOverlap: TRUE\n"); + }else{ + fprintf(fp," deviceOverlap: FALSE\n"); + } + if (deviceProp.concurrentKernels){ + fprintf(fp," concurrentKernels: TRUE\n"); + }else{ + fprintf(fp," concurrentKernels: FALSE\n"); + } + // outputs initial memory infos via cudaMemGetInfo() + double free_db,used_db,total_db; + get_free_memory(&free_db,&used_db,&total_db); + fprintf(fp,"memory usage:\n"); + fprintf(fp," rank %d: GPU memory usage: used = %f MB, free = %f MB, total = %f MB\n",myrank, + used_db/1024.0/1024.0, free_db/1024.0/1024.0, total_db/1024.0/1024.0); + + // closes output file + fclose(fp); + } + +} + + +void finalize_cuda(){ + cudaDeviceReset(); +} + +#endif // CUDA_INITIALIZE_H \ No newline at end of file diff --git a/cuda/cuda_utils.cu b/cuda/cuda_utils.cu new file mode 100644 index 0000000..8741176 --- /dev/null +++ b/cuda/cuda_utils.cu @@ -0,0 +1,186 @@ +#include "cuda_utils.cuh" + + + +// allocate memory on device +cudaError_t allocate_memory_on_device_i(void** d_ptr, size_t size) +{ + return cudaMalloc((void**) d_ptr, size * sizeof(int)); +} + +cudaError_t allocate_memory_on_device_cv(void** d_ptr, size_t size) +{ + return cudaMalloc((void**) d_ptr, size * sizeof(CUSTOMREAL)); +} + +cudaError_t allocate_memory_on_device_bl(void** d_ptr, size_t size) +{ + return cudaMalloc((void**) d_ptr, size * sizeof(bool)); +} + + +// device-host shared memory (pinned memory) (maybe unnecessary for CUDA-aware MPI) +cudaError_t allocate_memory_on_device_cv_pinned(void** d_ptr, size_t size) +{ + return cudaMallocHost((void**) d_ptr, size * sizeof(CUSTOMREAL)); +} + + +// deallocate memory on device +cudaError_t deallocate_memory_on_device_i(int*& d_ptr) +{ + return cudaFree(d_ptr); +} + +cudaError_t deallocate_memory_on_device_cv(CUSTOMREAL*& d_ptr) +{ + return cudaFree(d_ptr); +} + +cudaError_t deallocate_memory_on_device_bl(bool*& d_ptr) +{ + return cudaFree(d_ptr); +} + + +// copy memory between host and device +cudaError_t copy_host_to_device_i(int* d_ptr, int* h_ptr, const size_t size) +{ + return cudaMemcpy(d_ptr, h_ptr, size * sizeof(int), cudaMemcpyHostToDevice); +} + +cudaError_t copy_host_to_device_cv(CUSTOMREAL* d_ptr, CUSTOMREAL* h_ptr, const size_t size) +{ + return cudaMemcpy(d_ptr, h_ptr, size * sizeof(CUSTOMREAL), cudaMemcpyHostToDevice); +} + +cudaError_t copy_host_to_device_bl(bool* d_ptr, bool* h_ptr, const size_t size) +{ + return cudaMemcpy(d_ptr, h_ptr, size * sizeof(bool), cudaMemcpyHostToDevice); +} + +// copy memory from device to host +cudaError_t copy_device_to_host_i(int* h_ptr, int* d_ptr, size_t size) +{ + return cudaMemcpy(h_ptr, d_ptr, size * sizeof(int), cudaMemcpyDeviceToHost); +} +cudaError_t copy_device_to_host_cv(CUSTOMREAL* h_ptr, CUSTOMREAL* d_ptr, size_t size) +{ + return cudaMemcpy(h_ptr, d_ptr, size * sizeof(CUSTOMREAL), cudaMemcpyDeviceToHost); +} + + +// allocate and copy to device +void* allocate_and_copy_host_to_device_i(int* h_ptr, size_t size, int num) +{ + void* d_ptr; + + print_CUDA_error_if_any(allocate_memory_on_device_i(&d_ptr, size), num); + print_CUDA_error_if_any(copy_host_to_device_i((int*)d_ptr, h_ptr, size),num); + + return d_ptr; +} + +void* allocate_and_copy_host_to_device_cv(CUSTOMREAL* h_ptr, size_t size, int num) +{ + void* d_ptr; + print_CUDA_error_if_any(allocate_memory_on_device_cv(&d_ptr, size),num); + print_CUDA_error_if_any(copy_host_to_device_cv((CUSTOMREAL*)d_ptr, h_ptr, size), num); + + return d_ptr; +} + +void* allocate_and_copy_host_to_device_bl(bool* h_ptr, size_t size, int num) +{ + void* d_ptr; + print_CUDA_error_if_any(allocate_memory_on_device_bl(&d_ptr, size),num); + print_CUDA_error_if_any(copy_host_to_device_bl((bool*)d_ptr, h_ptr, size), num); + + return d_ptr; +} + +// allocate, flatten and copy from host to device +void flatten_arr_i(int* h_ptr_flattened, std::vector&h_v, int size_total, int* size_each) +{ + // flatten + int counter = 0; + int n_v = h_v.size(); + + for (int i = 0; i < n_v; i++) { // levels + for (int j = 0; j < size_each[i]; j++) { + h_ptr_flattened[counter] = h_v.at(i)[j]; + counter++; + } + } +} + +void flatten_arr_cv(CUSTOMREAL* h_ptr_flattened, std::vector &h_v, int size_total, int* size_each) +{ + // flatten + int counter = 0; + int n_v = h_v.size(); + + for (int i = 0; i < n_v; i++) { // levels + for (int j = 0; j < size_each[i]; j++) { + h_ptr_flattened[counter] = h_v.at(i)[j]; + counter++; + } + } +} + +void flatten_arr_bl(bool* h_ptr_flattened, std::vector &h_v, int size_total, int* size_each) +{ + // flatten + int counter = 0; + int n_v = h_v.size(); + + for (int i = 0; i < n_v; i++) { // levels + for (int j = 0; j < size_each[i]; j++) { + h_ptr_flattened[counter] = h_v.at(i)[j]; + counter++; + } + } +} + +void* allocate_and_copy_host_to_device_flattened_i(std::vector& vh, int size_total, int* size_each, int num){ + // flatten + int* h_ptr_flattened = new int[size_total]; + flatten_arr_i(h_ptr_flattened, vh, size_total, size_each); + + // allocate and copy + void* d_ptr = allocate_and_copy_host_to_device_i(h_ptr_flattened, size_total, num); + + // free + delete[] h_ptr_flattened; + + return d_ptr; +} + +void* allocate_and_copy_host_to_device_flattened_cv(std::vector& vh, int size_total, int* size_each, int num){ + // flatten + CUSTOMREAL* h_ptr_flattened = new CUSTOMREAL[size_total]; + flatten_arr_cv(h_ptr_flattened, vh, size_total, size_each); + + // allocate and copy + void* d_ptr = allocate_and_copy_host_to_device_cv(h_ptr_flattened, size_total, num); + + // free + delete[] h_ptr_flattened; + + return d_ptr; +} + +void* allocate_and_copy_host_to_device_flattened_bl(std::vector& vh, int size_total, int* size_each, int num){ + // flatten + bool* h_ptr_flattened = new bool[size_total]; + flatten_arr_bl(h_ptr_flattened, vh, size_total, size_each); + + // allocate and copy + void* d_ptr = allocate_and_copy_host_to_device_bl(h_ptr_flattened, size_total, num); + + // free + delete[] h_ptr_flattened; + + return d_ptr; +} + diff --git a/cuda/cuda_utils.cuh b/cuda/cuda_utils.cuh new file mode 100644 index 0000000..2bf5321 --- /dev/null +++ b/cuda/cuda_utils.cuh @@ -0,0 +1,211 @@ +#ifndef CUDA_UTILS_H +#define CUDA_UTILS_H + +#include +#include +#include +#include +#include +#include + +#include "cuda_constants.cuh" + +// function to convert kernel,grid to ijk +#define I2V_cuda(i,j,k,II,JJ) ((k)*(JJ)*(II)+(j)*(II)+(i)) + + +// allocate memory on device +cudaError_t allocate_memory_on_device_i(void** d_ptr, size_t size); +cudaError_t allocate_memory_on_device_cv(void** d_ptr, size_t size); +cudaError_t allocate_memory_on_device_bl(void** d_ptr, size_t size); +cudaError_t allocate_memory_on_device_cv_pinned(void** d_ptr, size_t size); + +// deallocate memory on device +cudaError_t deallocate_memory_on_device_i(int *&d_ptr); +cudaError_t deallocate_memory_on_device_cv(CUSTOMREAL *&d_ptr); +cudaError_t deallocate_memory_on_device_bl(bool *&d_ptr); + +// copy memory from host to device +cudaError_t copy_host_to_device_i(int *d_ptr, int *h_ptr, const size_t size); +cudaError_t copy_host_to_device_cv(CUSTOMREAL *d_ptr, CUSTOMREAL *h_ptr, const size_t size); +cudaError_t copy_host_to_device_bl(bool *d_ptr, bool *h_ptr, const size_t size); + +// copy memory from device to host +cudaError_t copy_device_to_host_i(int *h_ptr, int *d_ptr, size_t size); +cudaError_t copy_device_to_host_cv(CUSTOMREAL *h_ptr, CUSTOMREAL *d_ptr, size_t size); + +// allocate and copy to device +void* allocate_and_copy_host_to_device_i(int* h_ptr, size_t size, int num); +void* allocate_and_copy_host_to_device_cv(CUSTOMREAL* h_ptr, size_t size, int num); +void* allocate_and_copy_host_to_device_bl(bool* h_ptr, size_t size, int num); + + +// allocate, flatten and copy to device +void flatten_arr_i(int* h_ptr_flattened, std::vector &h_v, int size_total, int* size_each); +void flatten_arr_cv(CUSTOMREAL* h_ptr_flattened, std::vector &h_v, int size_total, int* size_each); +void flatten_arr_bl(bool* h_ptr_flattened, std::vector &h_v, int size_total, int* size_each); + + +void* allocate_and_copy_host_to_device_flattened_i(std::vector&vh, int size_total, int* size_each, int num); +void* allocate_and_copy_host_to_device_flattened_cv(std::vector& vh, int size_total, int* size_each, int num); +void* allocate_and_copy_host_to_device_flattened_bl(std::vector& vh, int size_total, int* size_each, int num); + + +// mpi send recv +static inline void cuda_send_cr(CUSTOMREAL* buf, int count, int dest, MPI_Comm inter_sub_comm){ + MPI_Send(buf, count, MPI_CR, dest, MPI_DUMMY_TAG_CUDA, inter_sub_comm); +} + +static inline void cuda_recv_cr(CUSTOMREAL* buf, int count, int source, MPI_Comm inter_sub_comm){ + MPI_Status stat; + MPI_Recv(buf, count, MPI_CR, source, MPI_DUMMY_TAG_CUDA, inter_sub_comm, &stat); +} + +static inline void cuda_synchronize_all_sub(MPI_Comm& sub_comm){ + MPI_Barrier(sub_comm); +} + +inline void cuda_wait_req(MPI_Request& req){ + MPI_Status status; + MPI_Wait(&req, &status); +} + + + +static inline void get_block_xy(int num_blocks, int* num_blocks_x, int* num_blocks_y) { + // at first, the num_blocks_x is set with equal value of num_blocks, and num_blocks_y is set with value 1 + // when the num_blocks_x exceeds the block size limit of 65535, the num_blocks_x is divided by 2 and num_blocks_y is increased by 1 + *num_blocks_x = num_blocks; + *num_blocks_y = 1; + + while (*num_blocks_x > CUDA_MAX_GRID_SIZE) { + *num_blocks_x = (int) ceil(*num_blocks_x * 0.5f); + *num_blocks_y = *num_blocks_y * 2;; + } + +} + + +static inline void get_thread_block_for_3d_loop(int nx, int ny, int nz, dim3* threads, dim3* blocks) { + threads->x = 8; threads->y = 8; threads->z = 8; // use 512 threads in total + blocks->x = (nx + threads->x - 1)/threads->x; + blocks->y = (ny + threads->y - 1)/threads->y; + blocks->z = (nz + threads->z - 1)/threads->z; +} + + +static inline void get_thread_block_for_ibound(int nx, int ny, int nz, dim3* threads, dim3* blocks) { + threads->x = nx; threads->y = 8; threads->z = 8; + blocks->x = (nx + threads->x - 1)/threads->x; + blocks->y = (ny + threads->y - 1)/threads->y; + blocks->z = (nz + threads->z - 1)/threads->z; +} + + +static inline void get_thread_block_for_jbound(int nx, int ny, int nz, dim3* threads, dim3* blocks) { + threads->x = 8; threads->y = ny; threads->z = 8; + blocks->x = (nx + threads->x - 1)/threads->x; + blocks->y = (ny + threads->y - 1)/threads->y; + blocks->z = (nz + threads->z - 1)/threads->z; +} + + +static inline void get_thread_block_for_kbound(int nx, int ny, int nz, dim3* threads, dim3* blocks) { + threads->x = 8; threads->y = 8; threads->z = nz; + blocks->x = (nx + threads->x - 1)/threads->x; + blocks->y = (ny + threads->y - 1)/threads->y; + blocks->z = (nz + threads->z - 1)/threads->z; +} + + +inline void cuda_isend_cr(CUSTOMREAL* buf, int count, int dest, MPI_Comm& comm, MPI_Request& request){ + //MPI_Request request = MPI_REQUEST_NULL; + //std::cout << "sending from : " << inter_sub_rank << ", to : " << dest <<", size : " << count << std::endl; + int DUMMY_TAG = 9999; + MPI_Isend(buf, count, MPI_CR, dest, DUMMY_TAG, comm, &request); +} + +inline void cuda_irecv_cr(CUSTOMREAL* buf, int count, int source, MPI_Comm& comm, MPI_Request& request){ + //MPI_Request request = MPI_REQUEST_NULL; + //std::cout << "receiving by : " << inter_sub_rank << ", from : " << source << ", size : " << count << std::endl; + int DUMMY_TAG = 9999; + MPI_Irecv(buf, count, MPI_CR, source, DUMMY_TAG, comm, &request); +} + + +#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); } +inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true) +{ + if (code != cudaSuccess) + { + fprintf(stderr,"GPUassert: %s %s %d\n", cudaGetErrorString(code), file, line); + if (abort) exit(code); + } +} + +inline void print_memory_usage(){ + size_t free_byte ; + size_t total_byte ; + cudaError_t cuda_status = cudaMemGetInfo( &free_byte, &total_byte ) ; + if ( cudaSuccess != cuda_status ){ + printf("Error: cudaMemGetInfo fails, %s \n", cudaGetErrorString(cuda_status) ); + exit(1); + } + + double free_db = (double)free_byte ; + double total_db = (double)total_byte ; + double used_db = total_db - free_db ; + + printf("GPU memory usage: used = %f, free = %f MB, total = %f MB\n", + used_db/1024.0/1024.0, free_db/1024.0/1024.0, total_db/1024.0/1024.0); +} + +inline void print_CUDA_error_if_any(cudaError_t err, int num) { + if (cudaSuccess != err) + { + printf("\nCUDA error !!!!! <%s> !!!!! \nat CUDA call error code: # %d\n",cudaGetErrorString(err),num); + fflush(stdout); + + // outputs error file + FILE* fp; + int myrank; + char filename[BUFSIZ]; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + sprintf(filename,"error_message_%06d.txt",myrank); + fp = fopen(filename,"a+"); + if (fp != NULL) { + fprintf(fp,"\nCUDA error !!!!! <%s> !!!!! \nat CUDA call error code: # %d\n",cudaGetErrorString(err),num); + fclose(fp); + } + + // check memory usage + size_t free_byte ; + size_t total_byte ; + cudaError_t cuda_status = cudaMemGetInfo( &free_byte, &total_byte ) ; + + if ( cudaSuccess != cuda_status ){ + printf("Error: cudaMemGetInfo fails, %s \n", cudaGetErrorString(cuda_status) ); + fflush(stdout); + exit(1); + } + + // print usage + double free_db = (double)free_byte ; + double total_db = (double)total_byte ; + double used_db = total_db - free_db ; + printf("GPU memory usage: used = %f, free = %f MB, total = %f MB", used_db/1024.0/1024.0, free_db/1024.0/1024.0, total_db/1024.0/1024.0); + + + // stops program + //MPI_Abort(MPI_COMM_WORLD,1); + MPI_Finalize(); + exit(EXIT_FAILURE); + } +} + + + + + + +#endif // CUDA_UTILS_H \ No newline at end of file diff --git a/cuda/grid_wrapper.cu b/cuda/grid_wrapper.cu new file mode 100644 index 0000000..728c250 --- /dev/null +++ b/cuda/grid_wrapper.cu @@ -0,0 +1,681 @@ +#include "grid_wrapper.cuh" + +void cuda_initialize_grid_1st(std::vector< std::vector >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K, + CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \ + std::vector> & vv_i__j__k__, \ + std::vector> & vv_ip1j__k__, \ + std::vector> & vv_im1j__k__, \ + std::vector> & vv_i__jp1k__, \ + std::vector> & vv_i__jm1k__, \ + std::vector> & vv_i__j__kp1, \ + std::vector> & vv_i__j__km1, \ + std::vector> & vv_fac_a, \ + std::vector> & vv_fac_b, \ + std::vector> & vv_fac_c, \ + std::vector> & vv_fac_f, \ + std::vector> & vv_T0v, \ + std::vector> & vv_T0r, \ + std::vector> & vv_T0t, \ + std::vector> & vv_T0p, \ + std::vector> & vv_fun, \ + std::vector> & vv_change){ + + // store grid parameters + grid_dv->loc_I_host = loc_I; + grid_dv->loc_J_host = loc_J; + grid_dv->loc_K_host = loc_K; + grid_dv->dr_host = dr; + grid_dv->dt_host = dt; + grid_dv->dp_host = dp; + + // count node number + grid_dv->n_nodes_total_host = 0; + grid_dv->n_levels_host = ijk.size(); + // allocate grid_dv->n_nodes_on_levels_host + grid_dv->n_nodes_on_levels_host = new int[grid_dv->n_levels_host]; + + for (int i=0; in_levels_host; i++){ + grid_dv->n_nodes_on_levels_host[i] = ijk[i].size(); + grid_dv->n_nodes_total_host += grid_dv->n_nodes_on_levels_host[i]; + // find max + if (grid_dv->n_nodes_on_levels_host[i] > grid_dv->n_nodes_max_host){ + grid_dv->n_nodes_max_host = grid_dv->n_nodes_on_levels_host[i]; + } + } + + // allocate memory on device + grid_dv->n_nodes_on_levels = (int*) allocate_and_copy_host_to_device_i(grid_dv->n_nodes_on_levels_host, grid_dv->n_levels_host, 0); + + grid_dv->vv_i__j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 2); + grid_dv->vv_ip1j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 2); + grid_dv->vv_im1j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 3); + grid_dv->vv_i__jp1k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 4); + grid_dv->vv_i__jm1k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 5); + grid_dv->vv_i__j__kp1_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 6); + grid_dv->vv_i__j__km1_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 7); + + grid_dv->vv_i__j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_ip1j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_im1j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jp1k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__jm1k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__kp1_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + grid_dv->vv_i__j__km1_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 14); + + grid_dv->vv_i__j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 15); + grid_dv->vv_ip1j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 16); + grid_dv->vv_im1j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 17); + grid_dv->vv_i__jp1k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 18); + grid_dv->vv_i__jm1k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 19); + grid_dv->vv_i__j__kp1_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 20); + grid_dv->vv_i__j__km1_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 21); + + grid_dv->vv_i__j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 22); + grid_dv->vv_ip1j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 23); + grid_dv->vv_im1j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 24); + grid_dv->vv_i__jp1k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 25); + grid_dv->vv_i__jm1k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 26); + grid_dv->vv_i__j__kp1_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 27); + grid_dv->vv_i__j__km1_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 28); + + grid_dv->vv_i__j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 29); + grid_dv->vv_ip1j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 30); + grid_dv->vv_im1j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 31); + grid_dv->vv_i__jp1k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 32); + grid_dv->vv_i__jm1k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 33); + grid_dv->vv_i__j__kp1_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 34); + grid_dv->vv_i__j__km1_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 35); + + grid_dv->vv_i__j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 36); + grid_dv->vv_ip1j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 37); + grid_dv->vv_im1j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 38); + grid_dv->vv_i__jp1k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 39); + grid_dv->vv_i__jm1k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 40); + grid_dv->vv_i__j__kp1_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 41); + grid_dv->vv_i__j__km1_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 42); + + grid_dv->vv_i__j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 43); + grid_dv->vv_ip1j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 44); + grid_dv->vv_im1j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 45); + grid_dv->vv_i__jp1k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 46); + grid_dv->vv_i__jm1k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 47); + grid_dv->vv_i__j__kp1_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 48); + grid_dv->vv_i__j__km1_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 49); + + grid_dv->vv_i__j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 50); + grid_dv->vv_ip1j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 51); + grid_dv->vv_im1j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 52); + grid_dv->vv_i__jp1k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 53); + grid_dv->vv_i__jm1k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 54); + grid_dv->vv_i__j__kp1_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 55); + grid_dv->vv_i__j__km1_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 56); + + grid_dv->vv_fac_a_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 57); + grid_dv->vv_fac_b_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 58); + grid_dv->vv_fac_c_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 59); + grid_dv->vv_fac_f_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 60); + grid_dv->vv_T0v_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 61); + grid_dv->vv_T0r_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 62); + grid_dv->vv_T0t_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 63); + grid_dv->vv_T0p_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 64); + grid_dv->vv_fun_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 65); + grid_dv->vv_change_0 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 66); + + grid_dv->vv_fac_a_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 67); + grid_dv->vv_fac_b_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 68); + grid_dv->vv_fac_c_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 69); + grid_dv->vv_fac_f_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 70); + grid_dv->vv_T0v_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 71); + grid_dv->vv_T0r_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 72); + grid_dv->vv_T0t_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 73); + grid_dv->vv_T0p_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 74); + grid_dv->vv_fun_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 75); + grid_dv->vv_change_1 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 76); + + grid_dv->vv_fac_a_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_2 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_3 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_4 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_5 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_6 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_7 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + // allocate tau (need full grid including boundary nodes) + print_CUDA_error_if_any(allocate_memory_on_device_cv((void**)&(grid_dv->tau), loc_I*loc_J*loc_K), 87); + + +} + +void cuda_initialize_grid_3rd(std::vector< std::vector >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K, + CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \ + std::vector> & vv_i__j__k__, \ + std::vector> & vv_ip1j__k__, \ + std::vector> & vv_im1j__k__, \ + std::vector> & vv_i__jp1k__, \ + std::vector> & vv_i__jm1k__, \ + std::vector> & vv_i__j__kp1, \ + std::vector> & vv_i__j__km1, \ + std::vector> & vv_ip2j__k__, \ + std::vector> & vv_im2j__k__, \ + std::vector> & vv_i__jp2k__, \ + std::vector> & vv_i__jm2k__, \ + std::vector> & vv_i__j__kp2, \ + std::vector> & vv_i__j__km2, \ + std::vector> & vv_fac_a, \ + std::vector> & vv_fac_b, \ + std::vector> & vv_fac_c, \ + std::vector> & vv_fac_f, \ + std::vector> & vv_T0v, \ + std::vector> & vv_T0r, \ + std::vector> & vv_T0t, \ + std::vector> & vv_T0p, \ + std::vector> & vv_fun, \ + std::vector> & vv_change){ + + grid_dv->if_3rd_order = true; + + // store grid parameters + grid_dv->loc_I_host = loc_I; + grid_dv->loc_J_host = loc_J; + grid_dv->loc_K_host = loc_K; + grid_dv->dr_host = dr; + grid_dv->dt_host = dt; + grid_dv->dp_host = dp; + + // count node number + grid_dv->n_nodes_total_host = 0; + grid_dv->n_levels_host = ijk.size(); + grid_dv->n_nodes_on_levels_host = new int[grid_dv->n_levels_host]; + + for (int i = 0; i < grid_dv->n_levels_host; i++){ + grid_dv->n_nodes_on_levels_host[i] = ijk.at(i).size(); + grid_dv->n_nodes_total_host += grid_dv->n_nodes_on_levels_host[i]; + // find max + if (grid_dv->n_nodes_on_levels_host[i] > grid_dv->n_nodes_max_host){ + grid_dv->n_nodes_max_host = grid_dv->n_nodes_on_levels_host[i]; + } + } + + // allocate memory on device + grid_dv->n_nodes_on_levels = (int*) allocate_and_copy_host_to_device_i(grid_dv->n_nodes_on_levels_host, grid_dv->n_levels_host, 0); + + grid_dv->vv_i__j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 1); + grid_dv->vv_ip1j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 2); + grid_dv->vv_im1j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 3); + grid_dv->vv_i__jp1k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 4); + grid_dv->vv_i__jm1k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 5); + grid_dv->vv_i__j__kp1_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 6); + grid_dv->vv_i__j__km1_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 7); + grid_dv->vv_ip2j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_0 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_ip1j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_im1j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jp1k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__jm1k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__kp1_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + grid_dv->vv_i__j__km1_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 14); + grid_dv->vv_ip2j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_1 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 15); + grid_dv->vv_ip1j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 16); + grid_dv->vv_im1j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 17); + grid_dv->vv_i__jp1k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 18); + grid_dv->vv_i__jm1k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 19); + grid_dv->vv_i__j__kp1_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 20); + grid_dv->vv_i__j__km1_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 21); + grid_dv->vv_ip2j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_2 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 22); + grid_dv->vv_ip1j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 23); + grid_dv->vv_im1j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 24); + grid_dv->vv_i__jp1k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 25); + grid_dv->vv_i__jm1k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 26); + grid_dv->vv_i__j__kp1_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 27); + grid_dv->vv_i__j__km1_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 28); + grid_dv->vv_ip2j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_3 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 29); + grid_dv->vv_ip1j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 30); + grid_dv->vv_im1j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 31); + grid_dv->vv_i__jp1k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 32); + grid_dv->vv_i__jm1k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 33); + grid_dv->vv_i__j__kp1_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 34); + grid_dv->vv_i__j__km1_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 35); + grid_dv->vv_ip2j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_4 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 36); + grid_dv->vv_ip1j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 37); + grid_dv->vv_im1j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 38); + grid_dv->vv_i__jp1k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 39); + grid_dv->vv_i__jm1k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 40); + grid_dv->vv_i__j__kp1_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 41); + grid_dv->vv_i__j__km1_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 42); + grid_dv->vv_ip2j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_5 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 43); + grid_dv->vv_ip1j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 44); + grid_dv->vv_im1j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 45); + grid_dv->vv_i__jp1k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 46); + grid_dv->vv_i__jm1k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 47); + grid_dv->vv_i__j__kp1_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 48); + grid_dv->vv_i__j__km1_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 49); + grid_dv->vv_ip2j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_6 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_i__j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 50); + grid_dv->vv_ip1j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip1j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 51); + grid_dv->vv_im1j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im1j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 52); + grid_dv->vv_i__jp1k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp1k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 53); + grid_dv->vv_i__jm1k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm1k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 54); + grid_dv->vv_i__j__kp1_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp1.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 55); + grid_dv->vv_i__j__km1_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km1.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 56); + grid_dv->vv_ip2j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_ip2j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 8); + grid_dv->vv_im2j__k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_im2j__k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 9); + grid_dv->vv_i__jp2k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jp2k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 10); + grid_dv->vv_i__jm2k___7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__jm2k__.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 11); + grid_dv->vv_i__j__kp2_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__kp2.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 12); + grid_dv->vv_i__j__km2_7 = (int*) allocate_and_copy_host_to_device_flattened_i(vv_i__j__km2.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 13); + + grid_dv->vv_fac_a_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 57); + grid_dv->vv_fac_b_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 58); + grid_dv->vv_fac_c_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 59); + grid_dv->vv_fac_f_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 60); + grid_dv->vv_T0v_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 61); + grid_dv->vv_T0r_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 62); + grid_dv->vv_T0t_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 63); + grid_dv->vv_T0p_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 64); + grid_dv->vv_fun_0 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 65); + grid_dv->vv_change_0 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(0), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 66); + + grid_dv->vv_fac_a_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 67); + grid_dv->vv_fac_b_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 68); + grid_dv->vv_fac_c_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 69); + grid_dv->vv_fac_f_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 70); + grid_dv->vv_T0v_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 71); + grid_dv->vv_T0r_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 72); + grid_dv->vv_T0t_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 73); + grid_dv->vv_T0p_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 74); + grid_dv->vv_fun_1 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 75); + grid_dv->vv_change_1 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(1), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 76); + + grid_dv->vv_fac_a_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_2 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_2 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(2), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_3 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_3 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(3), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_4 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_4 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(4), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_5 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_5 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(5), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_6 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_6 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(6), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + grid_dv->vv_fac_a_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_a.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 77); + grid_dv->vv_fac_b_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_b.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 78); + grid_dv->vv_fac_c_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_c.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 79); + grid_dv->vv_fac_f_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fac_f.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 80); + grid_dv->vv_T0v_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0v.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 81); + grid_dv->vv_T0r_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0r.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 82); + grid_dv->vv_T0t_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0t.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 83); + grid_dv->vv_T0p_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_T0p.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 84); + grid_dv->vv_fun_7 = (CUSTOMREAL*) allocate_and_copy_host_to_device_flattened_cv( vv_fun.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 85); + grid_dv->vv_change_7 = (bool*) allocate_and_copy_host_to_device_flattened_bl( vv_change.at(7), grid_dv->n_nodes_total_host, grid_dv->n_nodes_on_levels_host, 86); + + // allocate tau + print_CUDA_error_if_any(allocate_memory_on_device_cv((void**)&(grid_dv->tau), loc_I*loc_J*loc_K), 87); + +} + + +void cuda_finalize_grid(Grid_on_device* grid_dv){ + // deallocate memory on device + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->n_nodes_on_levels), 10000); + delete [] grid_dv->n_nodes_on_levels_host; + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___0), 1); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___0), 2); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___0), 3); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___0), 4); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___0), 5); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_0), 6); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_0), 7); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___1), 8); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___1), 9); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___1), 10); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___1), 11); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___1), 12); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_1), 13); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_1), 14); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___2), 15); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___2), 16); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___2), 17); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___2), 18); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___2), 19); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_2), 20); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_2), 21); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___3), 22); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___3), 23); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___3), 24); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___3), 25); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___3), 26); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_3), 27); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_3), 28); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___4), 29); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___4), 30); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___4), 31); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___4), 32); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___4), 33); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_4), 34); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_4), 35); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___5), 36); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___5), 37); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___5), 38); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___5), 39); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___5), 40); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_5), 41); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_5), 42); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___6), 43); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___6), 44); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___6), 45); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___6), 46); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___6), 47); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_6), 48); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_6), 49); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__k___7), 50); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip1j__k___7), 51); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im1j__k___7), 52); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp1k___7), 53); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm1k___7), 54); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp1_7), 55); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km1_7), 56); + + if(grid_dv->if_3rd_order){ + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___0), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___0), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___0), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___0), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_0), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_0), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___1), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___1), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___1), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___1), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_1), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_1), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___2), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___2), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___2), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___2), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_2), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_2), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___3), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___3), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___3), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___3), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_3), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_3), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___4), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___4), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___4), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___4), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_4), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_4), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___5), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___5), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___5), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___5), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_5), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_5), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___6), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___6), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___6), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___6), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_6), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_6), 10013); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_ip2j__k___7), 10008); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_im2j__k___7), 10009); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jp2k___7), 10010); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__jm2k___7), 10011); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__kp2_7), 10012); + print_CUDA_error_if_any(deallocate_memory_on_device_i(grid_dv->vv_i__j__km2_7), 10013); + } + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_0), 10057); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_0), 10058); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_0), 10059); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_0), 10060); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_0), 10061); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_0), 10062); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_0), 10063); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_0), 10064); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_0), 10065); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_0), 10066); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_1), 10067); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_1), 10068); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_1), 10069); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_1), 10070); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_1), 10071); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_1), 10072); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_1), 10073); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_1), 10074); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_1), 10075); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_1), 10076); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_2), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_2), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_2), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_2), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_2), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_2), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_2), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_2), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_2), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_2), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_3), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_3), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_3), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_3), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_3), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_3), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_3), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_3), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_3), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_3), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_4), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_4), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_4), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_4), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_4), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_4), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_4), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_4), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_4), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_4), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_5), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_5), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_5), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_5), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_5), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_5), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_5), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_5), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_5), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_5), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_6), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_6), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_6), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_6), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_6), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_6), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_6), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_6), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_6), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_6), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_a_7), 10077); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_b_7), 10078); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_c_7), 10079); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fac_f_7), 10080); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0v_7), 10081); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0r_7), 10082); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0t_7), 10083); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_T0p_7), 10084); + print_CUDA_error_if_any(deallocate_memory_on_device_cv( grid_dv->vv_fun_7), 10085); + print_CUDA_error_if_any(deallocate_memory_on_device_bl(grid_dv->vv_change_7), 10086); + + print_CUDA_error_if_any(deallocate_memory_on_device_cv(grid_dv->tau), 10087); + +} + + +// copy tau from host to device +void cuda_copy_tau_to_device(Grid_on_device* grid_dv, CUSTOMREAL* tau_h){ + print_CUDA_error_if_any(copy_host_to_device_cv(grid_dv->tau, tau_h, grid_dv->loc_I_host*grid_dv->loc_J_host*grid_dv->loc_K_host), 10087); +} + + +// copy tau from device to host +void cuda_copy_tau_to_host(Grid_on_device* grid_dv, CUSTOMREAL* tau_h){ + print_CUDA_error_if_any(copy_device_to_host_cv(tau_h, grid_dv->tau, grid_dv->loc_I_host*grid_dv->loc_J_host*grid_dv->loc_K_host), 10088); +} + diff --git a/cuda/grid_wrapper.cuh b/cuda/grid_wrapper.cuh new file mode 100644 index 0000000..1fdf5cd --- /dev/null +++ b/cuda/grid_wrapper.cuh @@ -0,0 +1,123 @@ +#ifndef GRID_WRAPPER_CUH +#define GRID_WRAPPER_CUH + +#include +#include +#include + +#include +#include + +//#include "config.h" +#include "cuda_constants.cuh" +#include "cuda_utils.cuh" + +// structure for storing grid information on device +typedef struct Grid_on_device { + + // parameters + int loc_I_host, loc_J_host, loc_K_host; + int n_nodes_total_host; + int n_nodes_max_host=0; + int n_levels_host; + CUSTOMREAL dr_host, dt_host, dp_host; + + // index storage + int* n_nodes_on_levels, *n_nodes_on_levels_host; + + int* vv_i__j__k___0, *vv_i__j__k___1, *vv_i__j__k___2, *vv_i__j__k___3, *vv_i__j__k___4, *vv_i__j__k___5, *vv_i__j__k___6, *vv_i__j__k___7; + int* vv_ip1j__k___0, *vv_ip1j__k___1, *vv_ip1j__k___2, *vv_ip1j__k___3, *vv_ip1j__k___4, *vv_ip1j__k___5, *vv_ip1j__k___6, *vv_ip1j__k___7; + int* vv_im1j__k___0, *vv_im1j__k___1, *vv_im1j__k___2, *vv_im1j__k___3, *vv_im1j__k___4, *vv_im1j__k___5, *vv_im1j__k___6, *vv_im1j__k___7; + int* vv_i__jp1k___0, *vv_i__jp1k___1, *vv_i__jp1k___2, *vv_i__jp1k___3, *vv_i__jp1k___4, *vv_i__jp1k___5, *vv_i__jp1k___6, *vv_i__jp1k___7; + int* vv_i__jm1k___0, *vv_i__jm1k___1, *vv_i__jm1k___2, *vv_i__jm1k___3, *vv_i__jm1k___4, *vv_i__jm1k___5, *vv_i__jm1k___6, *vv_i__jm1k___7; + int* vv_i__j__kp1_0, *vv_i__j__kp1_1, *vv_i__j__kp1_2, *vv_i__j__kp1_3, *vv_i__j__kp1_4, *vv_i__j__kp1_5, *vv_i__j__kp1_6, *vv_i__j__kp1_7; + int* vv_i__j__km1_0, *vv_i__j__km1_1, *vv_i__j__km1_2, *vv_i__j__km1_3, *vv_i__j__km1_4, *vv_i__j__km1_5, *vv_i__j__km1_6, *vv_i__j__km1_7; + int* vv_ip2j__k___0, *vv_ip2j__k___1, *vv_ip2j__k___2, *vv_ip2j__k___3, *vv_ip2j__k___4, *vv_ip2j__k___5, *vv_ip2j__k___6, *vv_ip2j__k___7; + int* vv_im2j__k___0, *vv_im2j__k___1, *vv_im2j__k___2, *vv_im2j__k___3, *vv_im2j__k___4, *vv_im2j__k___5, *vv_im2j__k___6, *vv_im2j__k___7; + int* vv_i__jp2k___0, *vv_i__jp2k___1, *vv_i__jp2k___2, *vv_i__jp2k___3, *vv_i__jp2k___4, *vv_i__jp2k___5, *vv_i__jp2k___6, *vv_i__jp2k___7; + int* vv_i__jm2k___0, *vv_i__jm2k___1, *vv_i__jm2k___2, *vv_i__jm2k___3, *vv_i__jm2k___4, *vv_i__jm2k___5, *vv_i__jm2k___6, *vv_i__jm2k___7; + int* vv_i__j__kp2_0, *vv_i__j__kp2_1, *vv_i__j__kp2_2, *vv_i__j__kp2_3, *vv_i__j__kp2_4, *vv_i__j__kp2_5, *vv_i__j__kp2_6, *vv_i__j__kp2_7; + int* vv_i__j__km2_0, *vv_i__j__km2_1, *vv_i__j__km2_2, *vv_i__j__km2_3, *vv_i__j__km2_4, *vv_i__j__km2_5, *vv_i__j__km2_6, *vv_i__j__km2_7; + + // constants + CUSTOMREAL* vv_fac_a_0, *vv_fac_a_1, *vv_fac_a_2, *vv_fac_a_3, *vv_fac_a_4, *vv_fac_a_5, *vv_fac_a_6, *vv_fac_a_7; + CUSTOMREAL* vv_fac_b_0, *vv_fac_b_1, *vv_fac_b_2, *vv_fac_b_3, *vv_fac_b_4, *vv_fac_b_5, *vv_fac_b_6, *vv_fac_b_7; + CUSTOMREAL* vv_fac_c_0, *vv_fac_c_1, *vv_fac_c_2, *vv_fac_c_3, *vv_fac_c_4, *vv_fac_c_5, *vv_fac_c_6, *vv_fac_c_7; + CUSTOMREAL* vv_fac_f_0, *vv_fac_f_1, *vv_fac_f_2, *vv_fac_f_3, *vv_fac_f_4, *vv_fac_f_5, *vv_fac_f_6, *vv_fac_f_7; + CUSTOMREAL* vv_T0v_0, *vv_T0v_1, *vv_T0v_2, *vv_T0v_3, *vv_T0v_4, *vv_T0v_5, *vv_T0v_6, *vv_T0v_7; + CUSTOMREAL* vv_T0r_0, *vv_T0r_1, *vv_T0r_2, *vv_T0r_3, *vv_T0r_4, *vv_T0r_5, *vv_T0r_6, *vv_T0r_7; + CUSTOMREAL* vv_T0t_0, *vv_T0t_1, *vv_T0t_2, *vv_T0t_3, *vv_T0t_4, *vv_T0t_5, *vv_T0t_6, *vv_T0t_7; + CUSTOMREAL* vv_T0p_0, *vv_T0p_1, *vv_T0p_2, *vv_T0p_3, *vv_T0p_4, *vv_T0p_5, *vv_T0p_6, *vv_T0p_7; + CUSTOMREAL* vv_fun_0, *vv_fun_1, *vv_fun_2, *vv_fun_3, *vv_fun_4, *vv_fun_5, *vv_fun_6, *vv_fun_7; + bool* vv_change_0, *vv_change_1, *vv_change_2, *vv_change_3, *vv_change_4, *vv_change_5, *vv_change_6, *vv_change_7; + + // temporary variables + CUSTOMREAL* tau; + + bool if_3rd_order = false; + + // thead and grid for sweeping + dim3 grid_sweep_host, threads_sweep_host; + // array of streams + cudaStream_t* level_streams; + + +} Grid_on_device; + + +void cuda_initialize_grid_1st(std::vector< std::vector >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K, + CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \ + std::vector> & vv_i__j__k__, \ + std::vector> & vv_ip1j__k__, \ + std::vector> & vv_im1j__k__, \ + std::vector> & vv_i__jp1k__, \ + std::vector> & vv_i__jm1k__, \ + std::vector> & vv_i__j__kp1, \ + std::vector> & vv_i__j__km1, \ + std::vector> & vv_fac_a, \ + std::vector> & vv_fac_b, \ + std::vector> & vv_fac_c, \ + std::vector> & vv_fac_f, \ + std::vector> & vv_T0v, \ + std::vector> & vv_T0r, \ + std::vector> & vv_T0t, \ + std::vector> & vv_T0p, \ + std::vector> & vv_fun, \ + std::vector> & vv_change); + +void cuda_initialize_grid_3rd(std::vector< std::vector >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K, + CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \ + std::vector> & vv_i__j__k__, \ + std::vector> & vv_ip1j__k__, \ + std::vector> & vv_im1j__k__, \ + std::vector> & vv_i__jp1k__, \ + std::vector> & vv_i__jm1k__, \ + std::vector> & vv_i__j__kp1, \ + std::vector> & vv_i__j__km1, \ + std::vector> & vv_ip2j__k__, \ + std::vector> & vv_im2j__k__, \ + std::vector> & vv_i__jp2k__, \ + std::vector> & vv_i__jm2k__, \ + std::vector> & vv_i__j__kp2, \ + std::vector> & vv_i__j__km2, \ + std::vector> & vv_fac_a, \ + std::vector> & vv_fac_b, \ + std::vector> & vv_fac_c, \ + std::vector> & vv_fac_f, \ + std::vector> & vv_T0v, \ + std::vector> & vv_T0r, \ + std::vector> & vv_T0t, \ + std::vector> & vv_T0p, \ + std::vector> & vv_fun, \ + std::vector> & vv_change); + + +// finalize +void cuda_finalize_grid(Grid_on_device* grid_dv); + +// copy tau from host to device +void cuda_copy_tau_to_device(Grid_on_device* grid_dv, CUSTOMREAL* tau_h); +// copy tau from device to host +void cuda_copy_tau_to_host(Grid_on_device* grid_dv, CUSTOMREAL* tau_h); + +#endif // GRID_WRAPPER_CUH \ No newline at end of file diff --git a/cuda/iterator_wrapper.cu b/cuda/iterator_wrapper.cu new file mode 100644 index 0000000..2232659 --- /dev/null +++ b/cuda/iterator_wrapper.cu @@ -0,0 +1,883 @@ +#include "iterator_wrapper.cuh" + +__device__ const CUSTOMREAL PLUS = 1.0; +__device__ const CUSTOMREAL MINUS = -1.0; +__device__ const CUSTOMREAL v_eps = 1e-12; + +__device__ const CUSTOMREAL _0_5_CR = 0.5; +__device__ const CUSTOMREAL _1_CR = 1.0; +__device__ const CUSTOMREAL _2_CR = 2.0; +__device__ const CUSTOMREAL _3_CR = 3.0; +__device__ const CUSTOMREAL _4_CR = 4.0; + +__device__ CUSTOMREAL my_square_cu(CUSTOMREAL const& x) { + return x*x; +} + +__device__ CUSTOMREAL calc_stencil_1st(CUSTOMREAL const& a, CUSTOMREAL const& b, CUSTOMREAL const& Dinv){ + return Dinv*(a-b); +} + +__device__ CUSTOMREAL calc_stencil_3rd(CUSTOMREAL const& a, CUSTOMREAL const& b, CUSTOMREAL const& c, CUSTOMREAL const& d, CUSTOMREAL const& Dinv_half, CUSTOMREAL const& sign){ + CUSTOMREAL tmp1 = v_eps + my_square_cu(a-_2_CR*b+c); + CUSTOMREAL tmp2 = v_eps + my_square_cu(d-_2_CR*a+b); + CUSTOMREAL ww = _1_CR/(_1_CR+_2_CR*my_square_cu(tmp1/tmp2)); + return sign*((_1_CR-ww)* (b-d)*Dinv_half + ww*(-_3_CR*a+_4_CR*b-c)*Dinv_half); +} + +__device__ CUSTOMREAL cuda_calc_LF_Hamiltonian( \ + CUSTOMREAL const& fac_a_, \ + CUSTOMREAL const& fac_b_, \ + CUSTOMREAL const& fac_c_, \ + CUSTOMREAL const& fac_f_, \ + CUSTOMREAL const& T0r_, \ + CUSTOMREAL const& T0t_, \ + CUSTOMREAL const& T0p_, \ + CUSTOMREAL const& T0v_, \ + CUSTOMREAL& tau_, \ + CUSTOMREAL const& pp1, CUSTOMREAL& pp2, \ + CUSTOMREAL const& pt1, CUSTOMREAL& pt2, \ + CUSTOMREAL const& pr1, CUSTOMREAL& pr2 \ + ) { + // LF Hamiltonian for T = T0 * tau + return sqrt( + fac_a_ * my_square_cu(T0r_ * tau_ + T0v_ * (pr1+pr2)/_2_CR) \ + + fac_b_ * my_square_cu(T0t_ * tau_ + T0v_ * (pt1+pt2)/_2_CR) \ + + fac_c_ * my_square_cu(T0p_ * tau_ + T0v_ * (pp1+pp2)/_2_CR) \ + - _2_CR*fac_f_ * (T0t_ * tau_ + T0v_ * (pt1+pt2)/_2_CR) \ + * (T0p_ * tau_ + T0v_ * (pp1+pp2)/_2_CR) \ + ); +} + +__global__ void cuda_do_sweep_level_kernel_1st(\ + const int i__j__k__[],\ + const int ip1j__k__[],\ + const int im1j__k__[],\ + const int i__jp1k__[],\ + const int i__jm1k__[],\ + const int i__j__kp1[],\ + const int i__j__km1[],\ + const CUSTOMREAL fac_a[], \ + const CUSTOMREAL fac_b[], \ + const CUSTOMREAL fac_c[], \ + const CUSTOMREAL fac_f[], \ + const CUSTOMREAL T0v[], \ + const CUSTOMREAL T0r[], \ + const CUSTOMREAL T0t[], \ + const CUSTOMREAL T0p[], \ + const CUSTOMREAL fun[], \ + const bool changed[], \ + CUSTOMREAL tau[], \ + const int loc_I, \ + const int loc_J, \ + const int loc_K, \ + const CUSTOMREAL dr, \ + const CUSTOMREAL dt, \ + const CUSTOMREAL dp, \ + const int n_nodes_this_level, \ + const int i_start \ +){ + + unsigned int i_node = (blockIdx.y * gridDim.x + blockIdx.x) * blockDim.x + threadIdx.x; + + if (i_node >= n_nodes_this_level) return; + + i_node += i_start; + + //if (i_node >= loc_I*loc_J*loc_K) return; + + if (changed[i_node] != true) return; + + CUSTOMREAL sigr = _1_CR*sqrt(fac_a[i_node])*T0v[i_node]; + CUSTOMREAL sigt = _1_CR*sqrt(fac_b[i_node])*T0v[i_node]; + CUSTOMREAL sigp = _1_CR*sqrt(fac_c[i_node])*T0v[i_node]; + CUSTOMREAL coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + CUSTOMREAL pp1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[im1j__k__[i_node]], _1_CR/dp); + CUSTOMREAL pp2 = calc_stencil_1st(tau[ip1j__k__[i_node]],tau[i__j__k__[i_node]], _1_CR/dp); + + CUSTOMREAL pt1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[i__jm1k__[i_node]], _1_CR/dt); + CUSTOMREAL pt2 = calc_stencil_1st(tau[i__jp1k__[i_node]],tau[i__j__k__[i_node]], _1_CR/dt); + + CUSTOMREAL pr1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[i__j__km1[i_node]], _1_CR/dr); + CUSTOMREAL pr2 = calc_stencil_1st(tau[i__j__kp1[i_node]],tau[i__j__k__[i_node]], _1_CR/dr); + + // LF Hamiltonian + CUSTOMREAL Htau = cuda_calc_LF_Hamiltonian(\ + fac_a[i_node], \ + fac_b[i_node], \ + fac_c[i_node], \ + fac_f[i_node], \ + T0r[i_node], \ + T0t[i_node], \ + T0p[i_node], \ + T0v[i_node], \ + tau[i__j__k__[i_node]], \ + pp1, pp2, pt1, pt2, pr1, pr2); + + tau[i__j__k__[i_node]] += coe*((fun[i_node] - Htau) \ + +(sigr*(pr2-pr1) \ + + sigt*(pt2-pt1) \ + + sigp*(pp2-pp1))/_2_CR); + +} + +__global__ void cuda_do_sweep_level_kernel_3rd(\ + const int i__j__k__[],\ + const int ip1j__k__[],\ + const int im1j__k__[],\ + const int i__jp1k__[],\ + const int i__jm1k__[],\ + const int i__j__kp1[],\ + const int i__j__km1[],\ + const int ip2j__k__[],\ + const int im2j__k__[],\ + const int i__jp2k__[],\ + const int i__jm2k__[],\ + const int i__j__kp2[],\ + const int i__j__km2[],\ + const CUSTOMREAL fac_a[], \ + const CUSTOMREAL fac_b[], \ + const CUSTOMREAL fac_c[], \ + const CUSTOMREAL fac_f[], \ + const CUSTOMREAL T0v[], \ + const CUSTOMREAL T0r[], \ + const CUSTOMREAL T0t[], \ + const CUSTOMREAL T0p[], \ + const CUSTOMREAL fun[], \ + const bool changed[], \ + CUSTOMREAL tau[], \ + const int loc_I, \ + const int loc_J, \ + const int loc_K, \ + const CUSTOMREAL dr, \ + const CUSTOMREAL dt, \ + const CUSTOMREAL dp, \ + const int n_nodes_this_level, \ + const int i_start \ +){ + + CUSTOMREAL pp1, pp2, pt1, pt2, pr1, pr2; + + unsigned int i_node = (blockIdx.y * gridDim.x + blockIdx.x) * blockDim.x + threadIdx.x; + + if (i_node >= n_nodes_this_level) return; + + i_node += i_start; + //if (i_node >= loc_I*loc_J*loc_K) return; + + if (changed[i_node] != true) return; + + int k = i__j__k__[i_node] / (loc_I*loc_J); + int j = (i__j__k__[i_node] - k*loc_I*loc_J)/loc_I; + int i = i__j__k__[i_node] - k*loc_I*loc_J - j*loc_I; + + + CUSTOMREAL DRinv = _1_CR/dr; + CUSTOMREAL DTinv = _1_CR/dt; + CUSTOMREAL DPinv = _1_CR/dp; + CUSTOMREAL DRinv_half = DRinv*_0_5_CR; + CUSTOMREAL DTinv_half = DTinv*_0_5_CR; + CUSTOMREAL DPinv_half = DPinv*_0_5_CR; + + CUSTOMREAL sigr = _1_CR*sqrt(fac_a[i_node])*T0v[i_node]; + CUSTOMREAL sigt = _1_CR*sqrt(fac_b[i_node])*T0v[i_node]; + CUSTOMREAL sigp = _1_CR*sqrt(fac_c[i_node])*T0v[i_node]; + CUSTOMREAL coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + // direction p + if (i == 1) { + pp1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[im1j__k__[i_node]],DPinv); + pp2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[ip1j__k__[i_node]],tau[ip2j__k__[i_node]],tau[im1j__k__[i_node]],DPinv_half, PLUS); + } else if (i == loc_I-2) { + pp1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[im1j__k__[i_node]],tau[im2j__k__[i_node]],tau[ip1j__k__[i_node]],DPinv_half, MINUS); + pp2 = calc_stencil_1st(tau[ip1j__k__[i_node]],tau[i__j__k__[i_node]],DPinv); + } else { + pp1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[im1j__k__[i_node]],tau[im2j__k__[i_node]],tau[ip1j__k__[i_node]],DPinv_half, MINUS); + pp2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[ip1j__k__[i_node]],tau[ip2j__k__[i_node]],tau[im1j__k__[i_node]],DPinv_half, PLUS); + } + + // direction t + if (j == 1) { + pt1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[i__jm1k__[i_node]],DTinv); + pt2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__jp1k__[i_node]],tau[i__jp2k__[i_node]],tau[i__jm1k__[i_node]],DTinv_half, PLUS); + } else if (j == loc_J-2) { + pt1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__jm1k__[i_node]],tau[i__jm2k__[i_node]],tau[i__jp1k__[i_node]],DTinv_half, MINUS); + pt2 = calc_stencil_1st(tau[i__jp1k__[i_node]],tau[i__j__k__[i_node]],DTinv); + } else { + pt1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__jm1k__[i_node]],tau[i__jm2k__[i_node]],tau[i__jp1k__[i_node]],DTinv_half, MINUS); + pt2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__jp1k__[i_node]],tau[i__jp2k__[i_node]],tau[i__jm1k__[i_node]],DTinv_half, PLUS); + } + + // direction r + if (k == 1) { + pr1 = calc_stencil_1st(tau[i__j__k__[i_node]],tau[i__j__km1[i_node]],DRinv); + pr2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__j__kp1[i_node]],tau[i__j__kp2[i_node]],tau[i__j__km1[i_node]],DRinv_half, PLUS); + } else if (k == loc_K-2) { + pr1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__j__km1[i_node]],tau[i__j__km2[i_node]],tau[i__j__kp1[i_node]],DRinv_half, MINUS); + pr2 = calc_stencil_1st(tau[i__j__kp1[i_node]],tau[i__j__k__[i_node]],DRinv); + } else { + pr1 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__j__km1[i_node]],tau[i__j__km2[i_node]],tau[i__j__kp1[i_node]],DRinv_half, MINUS); + pr2 = calc_stencil_3rd(tau[i__j__k__[i_node]],tau[i__j__kp1[i_node]],tau[i__j__kp2[i_node]],tau[i__j__km1[i_node]],DRinv_half, PLUS); + } + + CUSTOMREAL Htau = cuda_calc_LF_Hamiltonian(\ + fac_a[i_node], \ + fac_b[i_node], \ + fac_c[i_node], \ + fac_f[i_node], \ + T0r[i_node], \ + T0t[i_node], \ + T0p[i_node], \ + T0v[i_node], \ + tau[i__j__k__[i_node]], \ + pp1, pp2, pt1, pt2, pr1, pr2); + + tau[i__j__k__[i_node]] += coe*((fun[i_node] - Htau) \ + +(sigr*(pr2-pr1) \ + + sigt*(pt2-pt1) \ + + sigp*(pp2-pp1))/_2_CR); + + +} + + +void initialize_sweep_params(Grid_on_device* grid_dv){ + + // check the numBlockPerSm and set the block size accordingly + //int numBlocksPerSm = 0; + //int block_size = CUDA_SWEEPING_BLOCK_SIZE; + + //int device; + //cudaGetDevice(&device); + + //cudaDeviceProp deviceProp; + //cudaGetDeviceProperties(&deviceProp, device); + //if(grid_dv->if_3rd_order) + // cudaOccupancyMaxActiveBlocksPerMultiprocessor(&numBlocksPerSm, cuda_do_sweep_level_kernel_3rd, CUDA_SWEEPING_BLOCK_SIZE, 0); + //else + // cudaOccupancyMaxActiveBlocksPerMultiprocessor(&numBlocksPerSm, cuda_do_sweep_level_kernel_1st, CUDA_SWEEPING_BLOCK_SIZE, 0); + + //int max_cooperative_blocks = deviceProp.multiProcessorCount*numBlocksPerSm; + + //grid_dv->threads_sweep_host = dim3(block_size, 1, 1); + //grid_dv->grid_sweep_host = dim3(max_cooperative_blocks, 1, 1); + + // spawn streams + //grid_dv->level_streams = (cudaStream_t*)malloc(CUDA_MAX_NUM_STREAMS*sizeof(cudaStream_t)); + //for (int i = 0; i < CUDA_MAX_NUM_STREAMS; i++) { + grid_dv->level_streams = (cudaStream_t*)malloc(grid_dv->n_levels_host*sizeof(cudaStream_t)); + for (int i = 0; i < grid_dv->n_levels_host; i++) { + //cudaStreamCreate(&(grid_dv->level_streams[i])); + // add null + //cudaStreamCreateWithFlags(&(grid_dv->level_streams[i]), cudaStreamNonBlocking); + grid_dv->level_streams[i] = nullptr; + + } + + +} + + +void finalize_sweep_params(Grid_on_device* grid_on_dv){ + // destroy streams + //for (int i = 0; i < CUDA_MAX_NUM_STREAMS; i++) { + //for (int i = 0; i < grid_on_dv->n_levels_host; i++) { + // cudaStreamDestroy(grid_on_dv->level_streams[i]); + //} + + free(grid_on_dv->level_streams); +} + + +void run_kernel(Grid_on_device* grid_dv, int const& iswp, int& i_node_offset, int const& i_level, \ + dim3& grid_each, dim3& threads_each, int& n_nodes_this_level){ + + int id_stream = i_level;// % CUDA_MAX_NUM_STREAMS; + + if (grid_dv->if_3rd_order) { + if (iswp == 0){ + void *kernelArgs[]{\ + &(grid_dv->vv_i__j__k___0), \ + &(grid_dv->vv_ip1j__k___0), \ + &(grid_dv->vv_im1j__k___0), \ + &(grid_dv->vv_i__jp1k___0), \ + &(grid_dv->vv_i__jm1k___0), \ + &(grid_dv->vv_i__j__kp1_0), \ + &(grid_dv->vv_i__j__km1_0), \ + &(grid_dv->vv_ip2j__k___0), \ + &(grid_dv->vv_im2j__k___0), \ + &(grid_dv->vv_i__jp2k___0), \ + &(grid_dv->vv_i__jm2k___0), \ + &(grid_dv->vv_i__j__kp2_0), \ + &(grid_dv->vv_i__j__km2_0), \ + &(grid_dv->vv_fac_a_0 ), \ + &(grid_dv->vv_fac_b_0 ), \ + &(grid_dv->vv_fac_c_0 ), \ + &(grid_dv->vv_fac_f_0 ), \ + &(grid_dv->vv_T0v_0 ), \ + &(grid_dv->vv_T0r_0 ), \ + &(grid_dv->vv_T0t_0 ), \ + &(grid_dv->vv_T0p_0 ), \ + &(grid_dv->vv_fun_0 ), \ + &(grid_dv->vv_change_0 ), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 1){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___1), \ + &(grid_dv->vv_i__jp1k___1), \ + &(grid_dv->vv_i__jm1k___1), \ + &(grid_dv->vv_i__j__kp1_1), \ + &(grid_dv->vv_i__j__km1_1), \ + &(grid_dv->vv_ip1j__k___1), \ + &(grid_dv->vv_im1j__k___1), \ + &(grid_dv->vv_ip2j__k___1), \ + &(grid_dv->vv_im2j__k___1), \ + &(grid_dv->vv_i__jp2k___1), \ + &(grid_dv->vv_i__jm2k___1), \ + &(grid_dv->vv_i__j__kp2_1), \ + &(grid_dv->vv_i__j__km2_1), \ + &(grid_dv->vv_fac_a_1 ), \ + &(grid_dv->vv_fac_b_1 ), \ + &(grid_dv->vv_fac_c_1 ), \ + &(grid_dv->vv_fac_f_1 ), \ + &(grid_dv->vv_T0v_1 ), \ + &(grid_dv->vv_T0r_1 ), \ + &(grid_dv->vv_T0t_1 ), \ + &(grid_dv->vv_T0p_1 ), \ + &(grid_dv->vv_fun_1 ), \ + &(grid_dv->vv_change_1 ), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 2){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___2), \ + &(grid_dv->vv_i__j__kp1_2), \ + &(grid_dv->vv_i__j__km1_2), \ + &(grid_dv->vv_ip1j__k___2), \ + &(grid_dv->vv_im1j__k___2), \ + &(grid_dv->vv_i__jp1k___2), \ + &(grid_dv->vv_i__jm1k___2), \ + &(grid_dv->vv_ip2j__k___2), \ + &(grid_dv->vv_im2j__k___2), \ + &(grid_dv->vv_i__jp2k___2), \ + &(grid_dv->vv_i__jm2k___2), \ + &(grid_dv->vv_i__j__kp2_2), \ + &(grid_dv->vv_i__j__km2_2), \ + &(grid_dv->vv_fac_a_2), \ + &(grid_dv->vv_fac_b_2), \ + &(grid_dv->vv_fac_c_2), \ + &(grid_dv->vv_fac_f_2), \ + &(grid_dv->vv_T0v_2), \ + &(grid_dv->vv_T0r_2), \ + &(grid_dv->vv_T0t_2), \ + &(grid_dv->vv_T0p_2), \ + &(grid_dv->vv_fun_2), \ + &(grid_dv->vv_change_2), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 3){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___3), \ + &(grid_dv->vv_ip1j__k___3), \ + &(grid_dv->vv_im1j__k___3), \ + &(grid_dv->vv_i__jp1k___3), \ + &(grid_dv->vv_i__jm1k___3), \ + &(grid_dv->vv_i__j__kp1_3), \ + &(grid_dv->vv_i__j__km1_3), \ + &(grid_dv->vv_ip2j__k___3), \ + &(grid_dv->vv_im2j__k___3), \ + &(grid_dv->vv_i__jp2k___3), \ + &(grid_dv->vv_i__jm2k___3), \ + &(grid_dv->vv_i__j__kp2_3), \ + &(grid_dv->vv_i__j__km2_3), \ + &(grid_dv->vv_fac_a_3), \ + &(grid_dv->vv_fac_b_3), \ + &(grid_dv->vv_fac_c_3), \ + &(grid_dv->vv_fac_f_3), \ + &(grid_dv->vv_T0v_3), \ + &(grid_dv->vv_T0r_3), \ + &(grid_dv->vv_T0t_3), \ + &(grid_dv->vv_T0p_3), \ + &(grid_dv->vv_fun_3), \ + &(grid_dv->vv_change_3), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 4){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___4), \ + &(grid_dv->vv_ip1j__k___4), \ + &(grid_dv->vv_im1j__k___4), \ + &(grid_dv->vv_i__jp1k___4), \ + &(grid_dv->vv_i__jm1k___4), \ + &(grid_dv->vv_i__j__kp1_4), \ + &(grid_dv->vv_i__j__km1_4), \ + &(grid_dv->vv_ip2j__k___4), \ + &(grid_dv->vv_im2j__k___4), \ + &(grid_dv->vv_i__jp2k___4), \ + &(grid_dv->vv_i__jm2k___4), \ + &(grid_dv->vv_i__j__kp2_4), \ + &(grid_dv->vv_i__j__km2_4), \ + &(grid_dv->vv_fac_a_4), \ + &(grid_dv->vv_fac_b_4), \ + &(grid_dv->vv_fac_c_4), \ + &(grid_dv->vv_fac_f_4), \ + &(grid_dv->vv_T0v_4), \ + &(grid_dv->vv_T0r_4), \ + &(grid_dv->vv_T0t_4), \ + &(grid_dv->vv_T0p_4), \ + &(grid_dv->vv_fun_4), \ + &(grid_dv->vv_change_4), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 5) { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___5), \ + &(grid_dv->vv_ip1j__k___5), \ + &(grid_dv->vv_im1j__k___5), \ + &(grid_dv->vv_i__jp1k___5), \ + &(grid_dv->vv_i__jm1k___5), \ + &(grid_dv->vv_i__j__kp1_5), \ + &(grid_dv->vv_i__j__km1_5), \ + &(grid_dv->vv_ip2j__k___5), \ + &(grid_dv->vv_im2j__k___5), \ + &(grid_dv->vv_i__jp2k___5), \ + &(grid_dv->vv_i__jm2k___5), \ + &(grid_dv->vv_i__j__kp2_5), \ + &(grid_dv->vv_i__j__km2_5), \ + &(grid_dv->vv_fac_a_5), \ + &(grid_dv->vv_fac_b_5), \ + &(grid_dv->vv_fac_c_5), \ + &(grid_dv->vv_fac_f_5), \ + &(grid_dv->vv_T0v_5), \ + &(grid_dv->vv_T0r_5), \ + &(grid_dv->vv_T0t_5), \ + &(grid_dv->vv_T0p_5), \ + &(grid_dv->vv_fun_5), \ + &(grid_dv->vv_change_5), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 6) { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___6), \ + &(grid_dv->vv_ip1j__k___6), \ + &(grid_dv->vv_im1j__k___6), \ + &(grid_dv->vv_i__jp1k___6), \ + &(grid_dv->vv_i__jm1k___6), \ + &(grid_dv->vv_i__j__kp1_6), \ + &(grid_dv->vv_i__j__km1_6), \ + &(grid_dv->vv_ip2j__k___6), \ + &(grid_dv->vv_im2j__k___6), \ + &(grid_dv->vv_i__jp2k___6), \ + &(grid_dv->vv_i__jm2k___6), \ + &(grid_dv->vv_i__j__kp2_6), \ + &(grid_dv->vv_i__j__km2_6), \ + &(grid_dv->vv_fac_a_6), \ + &(grid_dv->vv_fac_b_6), \ + &(grid_dv->vv_fac_c_6), \ + &(grid_dv->vv_fac_f_6), \ + &(grid_dv->vv_T0v_6), \ + &(grid_dv->vv_T0r_6), \ + &(grid_dv->vv_T0t_6), \ + &(grid_dv->vv_T0p_6), \ + &(grid_dv->vv_fun_6), \ + &(grid_dv->vv_change_6), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___7), \ + &(grid_dv->vv_ip1j__k___7), \ + &(grid_dv->vv_im1j__k___7), \ + &(grid_dv->vv_i__jp1k___7), \ + &(grid_dv->vv_i__jm1k___7), \ + &(grid_dv->vv_i__j__kp1_7), \ + &(grid_dv->vv_i__j__km1_7), \ + &(grid_dv->vv_ip2j__k___7), \ + &(grid_dv->vv_im2j__k___7), \ + &(grid_dv->vv_i__jp2k___7), \ + &(grid_dv->vv_i__jm2k___7), \ + &(grid_dv->vv_i__j__kp2_7), \ + &(grid_dv->vv_i__j__km2_7), \ + &(grid_dv->vv_fac_a_7), \ + &(grid_dv->vv_fac_b_7), \ + &(grid_dv->vv_fac_c_7), \ + &(grid_dv->vv_fac_f_7), \ + &(grid_dv->vv_T0v_7), \ + &(grid_dv->vv_T0r_7), \ + &(grid_dv->vv_T0t_7), \ + &(grid_dv->vv_T0p_7), \ + &(grid_dv->vv_fun_7), \ + &(grid_dv->vv_change_7), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_3rd, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } + } else { // 1st order + if (iswp == 0){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___0), \ + &(grid_dv->vv_ip1j__k___0), \ + &(grid_dv->vv_im1j__k___0), \ + &(grid_dv->vv_i__jp1k___0), \ + &(grid_dv->vv_i__jm1k___0), \ + &(grid_dv->vv_i__j__kp1_0), \ + &(grid_dv->vv_i__j__km1_0), \ + &(grid_dv->vv_fac_a_0), \ + &(grid_dv->vv_fac_b_0), \ + &(grid_dv->vv_fac_c_0), \ + &(grid_dv->vv_fac_f_0), \ + &(grid_dv->vv_T0v_0), \ + &(grid_dv->vv_T0r_0), \ + &(grid_dv->vv_T0t_0), \ + &(grid_dv->vv_T0p_0), \ + &(grid_dv->vv_fun_0), \ + &(grid_dv->vv_change_0), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30000); + + } else if (iswp == 1){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___1), \ + &(grid_dv->vv_i__jp1k___1), \ + &(grid_dv->vv_i__jm1k___1), \ + &(grid_dv->vv_i__j__kp1_1), \ + &(grid_dv->vv_i__j__km1_1), \ + &(grid_dv->vv_ip1j__k___1), \ + &(grid_dv->vv_im1j__k___1), \ + &(grid_dv->vv_fac_a_1), \ + &(grid_dv->vv_fac_b_1), \ + &(grid_dv->vv_fac_c_1), \ + &(grid_dv->vv_fac_f_1), \ + &(grid_dv->vv_T0v_1), \ + &(grid_dv->vv_T0r_1), \ + &(grid_dv->vv_T0t_1), \ + &(grid_dv->vv_T0p_1), \ + &(grid_dv->vv_fun_1), \ + &(grid_dv->vv_change_1), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30001); + + } else if (iswp == 2){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___2), \ + &(grid_dv->vv_i__j__kp1_2), \ + &(grid_dv->vv_i__j__km1_2), \ + &(grid_dv->vv_ip1j__k___2), \ + &(grid_dv->vv_im1j__k___2), \ + &(grid_dv->vv_i__jp1k___2), \ + &(grid_dv->vv_i__jm1k___2), \ + &(grid_dv->vv_fac_a_2), \ + &(grid_dv->vv_fac_b_2), \ + &(grid_dv->vv_fac_c_2), \ + &(grid_dv->vv_fac_f_2), \ + &(grid_dv->vv_T0v_2), \ + &(grid_dv->vv_T0r_2), \ + &(grid_dv->vv_T0t_2), \ + &(grid_dv->vv_T0p_2), \ + &(grid_dv->vv_fun_2), \ + &(grid_dv->vv_change_2), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30002); + + } else if (iswp == 3){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___3), \ + &(grid_dv->vv_ip1j__k___3), \ + &(grid_dv->vv_im1j__k___3), \ + &(grid_dv->vv_i__jp1k___3), \ + &(grid_dv->vv_i__jm1k___3), \ + &(grid_dv->vv_i__j__kp1_3), \ + &(grid_dv->vv_i__j__km1_3), \ + &(grid_dv->vv_fac_a_3), \ + &(grid_dv->vv_fac_b_3), \ + &(grid_dv->vv_fac_c_3), \ + &(grid_dv->vv_fac_f_3), \ + &(grid_dv->vv_T0v_3), \ + &(grid_dv->vv_T0r_3), \ + &(grid_dv->vv_T0t_3), \ + &(grid_dv->vv_T0p_3), \ + &(grid_dv->vv_fun_3), \ + &(grid_dv->vv_change_3), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30003); + + } else if (iswp == 4){ + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___4), \ + &(grid_dv->vv_ip1j__k___4), \ + &(grid_dv->vv_im1j__k___4), \ + &(grid_dv->vv_i__jp1k___4), \ + &(grid_dv->vv_i__jm1k___4), \ + &(grid_dv->vv_i__j__kp1_4), \ + &(grid_dv->vv_i__j__km1_4), \ + &(grid_dv->vv_fac_a_4), \ + &(grid_dv->vv_fac_b_4), \ + &(grid_dv->vv_fac_c_4), \ + &(grid_dv->vv_fac_f_4), \ + &(grid_dv->vv_T0v_4), \ + &(grid_dv->vv_T0r_4), \ + &(grid_dv->vv_T0t_4), \ + &(grid_dv->vv_T0p_4), \ + &(grid_dv->vv_fun_4), \ + &(grid_dv->vv_change_4), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30004); + + } else if (iswp == 5) { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___5), \ + &(grid_dv->vv_ip1j__k___5), \ + &(grid_dv->vv_im1j__k___5), \ + &(grid_dv->vv_i__jp1k___5), \ + &(grid_dv->vv_i__jm1k___5), \ + &(grid_dv->vv_i__j__kp1_5), \ + &(grid_dv->vv_i__j__km1_5), \ + &(grid_dv->vv_fac_a_5), \ + &(grid_dv->vv_fac_b_5), \ + &(grid_dv->vv_fac_c_5), \ + &(grid_dv->vv_fac_f_5), \ + &(grid_dv->vv_T0v_5), \ + &(grid_dv->vv_T0r_5), \ + &(grid_dv->vv_T0t_5), \ + &(grid_dv->vv_T0p_5), \ + &(grid_dv->vv_fun_5), \ + &(grid_dv->vv_change_5), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30005); + + } else if (iswp == 6) { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___6), \ + &(grid_dv->vv_ip1j__k___6), \ + &(grid_dv->vv_im1j__k___6), \ + &(grid_dv->vv_i__jp1k___6), \ + &(grid_dv->vv_i__jm1k___6), \ + &(grid_dv->vv_i__j__kp1_6), \ + &(grid_dv->vv_i__j__km1_6), \ + &(grid_dv->vv_fac_a_6), \ + &(grid_dv->vv_fac_b_6), \ + &(grid_dv->vv_fac_c_6), \ + &(grid_dv->vv_fac_f_6), \ + &(grid_dv->vv_T0v_6), \ + &(grid_dv->vv_T0r_6), \ + &(grid_dv->vv_T0t_6), \ + &(grid_dv->vv_T0p_6), \ + &(grid_dv->vv_fun_6), \ + &(grid_dv->vv_change_6), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30006); + + + } else { + void* kernelArgs[]{\ + &(grid_dv->vv_i__j__k___7), \ + &(grid_dv->vv_ip1j__k___7), \ + &(grid_dv->vv_im1j__k___7), \ + &(grid_dv->vv_i__jp1k___7), \ + &(grid_dv->vv_i__jm1k___7), \ + &(grid_dv->vv_i__j__kp1_7), \ + &(grid_dv->vv_i__j__km1_7), \ + &(grid_dv->vv_fac_a_7 ), \ + &(grid_dv->vv_fac_b_7 ), \ + &(grid_dv->vv_fac_c_7 ), \ + &(grid_dv->vv_fac_f_7 ), \ + &(grid_dv->vv_T0v_7 ), \ + &(grid_dv->vv_T0r_7 ), \ + &(grid_dv->vv_T0t_7 ), \ + &(grid_dv->vv_T0p_7 ), \ + &(grid_dv->vv_fun_7 ), \ + &(grid_dv->vv_change_7 ), \ + &(grid_dv->tau), \ + &(grid_dv->loc_I_host), \ + &(grid_dv->loc_J_host), \ + &(grid_dv->loc_K_host), \ + &(grid_dv->dr_host), \ + &(grid_dv->dt_host), \ + &(grid_dv->dp_host), \ + &n_nodes_this_level, \ + &i_node_offset \ + }; + + print_CUDA_error_if_any(cudaLaunchKernel((void*) cuda_do_sweep_level_kernel_1st, grid_each, threads_each, kernelArgs, 0, grid_dv->level_streams[id_stream]), 30007); + + } + } + + // synchronize all streams + //print_CUDA_error_if_any(cudaStreamSynchronize(grid_dv->level_streams[id_stream]), 30008); +} + + +// this function calculate all levels of one single sweep direction +void cuda_run_iteration_forward(Grid_on_device* grid_dv, int const& iswp){ + + initialize_sweep_params(grid_dv); + + int block_size = CUDA_SWEEPING_BLOCK_SIZE; + int num_blocks_x, num_blocks_y; + int i_node_offset=0; + //get_block_xy(ceil(grid_dv->n_nodes_max_host/block_size+0.5), &num_blocks_x, &num_blocks_y); + //dim3 grid_each(num_blocks_x, num_blocks_y); + //dim3 threads_each(block_size, 1, 1); + + for (size_t i_level = 0; i_level < grid_dv->n_levels_host; i_level++){ + get_block_xy(ceil(grid_dv->n_nodes_on_levels_host[i_level]/block_size+0.5), &num_blocks_x, &num_blocks_y); + dim3 grid_each(num_blocks_x, num_blocks_y); + dim3 threads_each(block_size, 1, 1); + + run_kernel(grid_dv, iswp, i_node_offset, i_level, grid_each, threads_each, grid_dv->n_nodes_on_levels_host[i_level]); + //run_kernel(grid_dv, iswp, i_node_offset, i_level, grid_dv->grid_sweep_host, grid_dv->threads_sweep_host, grid_dv->n_nodes_on_levels_host[i_level]); + + i_node_offset += grid_dv->n_nodes_on_levels_host[i_level]; + } + + finalize_sweep_params(grid_dv); + + // check memory leak + //print_memory_usage(); + +} \ No newline at end of file diff --git a/cuda/iterator_wrapper.cuh b/cuda/iterator_wrapper.cuh new file mode 100644 index 0000000..0da743f --- /dev/null +++ b/cuda/iterator_wrapper.cuh @@ -0,0 +1,27 @@ +#ifndef ITERATOR_WRAPPER_CUH +#define ITERATOR_WRAPPER_CUH + +#include +#include +#include + +#include +#include +#include + +#include +#include "grid_wrapper.cuh" +#include "cuda_utils.cuh" + + +//void cuda_do_sweep_level_kernel_3rd(); +//void cuda_do_sweep_level_kernel_1st(); + +void run_kernel(Grid_on_device*, int const&, int const&, int const&, dim3&, dim3&, int const&); + +void initialize_sweep_params(Grid_on_device*); +void finalize_sweep_params(Grid_on_device*); +void cuda_run_iteration_forward(Grid_on_device*, int const&); + + +#endif // ITERATOR_WRAPPER_CUH \ No newline at end of file diff --git a/debug_mpi.sh b/debug_mpi.sh new file mode 100755 index 0000000..6d544c6 --- /dev/null +++ b/debug_mpi.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# general mpi debugging + +# instantly start the debugger +#mpirun --oversubscribe -np $1 xterm -e gdb -ex run --args ../../build/bin/TOMOATT -v -i $2 +# for break point insertion +mpirun --oversubscribe -np $1 xterm -e gdb --args ../../build/bin/TOMOATT -v -i $2 +# tui mode +#mpirun --oversubscribe -np $1 xterm -e gdb --tui --args ../../build/bin/TOMOATT -i $2 + + +# valgrind memory leak check +#mpirun --oversubscribe -np $1 valgrind --log-file="log_val" --leak-check=yes --track-origins=yes ../../build/bin/TOMOATT -i $2 + +# cuda debug +#mpirun --oversubscribe -np $1 xterm -e cuda-gdb -ex run --args ../../build/bin/TOMOATT $2 +# nvprof +#nvprof mpirun --oversubscribe -np 1 ../../build/bin/TOMOATT $2 diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..81cac2b81aaba413c2ca434eb9c3dd9f2e952415 GIT binary patch literal 6148 zcmeHKK~BR!475vBiprr!jydpw{vcH0zzwMnfR;!tC}AT+ZwTcn{Dw1s;L0BuuUA!< zbh#iQglx&4#B1+5lU1B0BA#ukDba+8Mo_`Q5zHQuanYU(g69~>GDp3d&Tm}P_9D&k zR~e9Zmr+fQR^+1hH~hHU9cx@!E^D`hPd3Bp+vDq5JYIb}-mZ7{#-Z#t8d5_Gx~C0n z9j#3lPhZCq>qm1mZf^}yOjHM5N*!a=(b6qlQ3bmI6A!RWR1rVFry~=!CFV_3nTU?+ zIME> WE`UYAP7xl6{Rns(%oqc|%D^YCd1!F} literal 0 HcmV?d00001 diff --git a/docs/logo/TomoATT_logo.png b/docs/logo/TomoATT_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2ced40f204ca2482b90de7fe994c3b5af101cd62 GIT binary patch literal 112334 zcmY(q1yEdD(>06)3mOP+Ay{w=ZV4KKCFtPp?ry<@yF>8c?rwuKxVsJR4g>$(@BMFX zo>N6l)f6>n@9y5K*Xr&a`b|y}{WZ~R7#J9IsV`y*FffSTFfj0$$cWHynE0%xp&ux= zU(_66U}&}f`GW;@0V1Ja5;}?l92ISh9bNS7jbL0{T$s(QEgTH=Y>k+0>`l^61c+c@ z-oZ$TeO7W!KU#4~Uzza&zs%hyYJlZfzKFawI~Hs5${W0D!`mU;?vgtGi!gb@ zwD)lk9(AS3p&jgb>arVkc>{JpV`r(IOoe^KsVwwoJN2P@gl(UjzkO+|W>8}cx_$ZX zGk&^8$Porokg>djap0!9tN|FX0`;xJA&(YKHKz^`TpOhMG!%_rAkG;q^tbL z9zfJImL3h?c59)fxK1j+|Hx`|2~(-+BY&(1zeQN4-?f~VIX{C-l_Hr1{V7N83rB;{ zUh3-OBYJ_0`qaP6dGjWP^0l|K;+*a1DPYs)Q@kG*D^FgjwD}pOXI}FAx}J=KyrQ3y@6EDxTkMQ{!9fFyL7>X%NSF|sm z7vaZ<@xCq@`3Pafi5YPv=emW4{QJm+{m5F8VJM5xCI4}TjNES}R@lu)gvboOSd<_t z*>#M4KV?`I|G{hBPDBKb2BZrI_daK$LsBfBPTm#7+7l2U(A`s?B*f_F=ei6^4Hl(; zbz7IbnO(D#EGPEwV`xlww-BK@T<1fGwxueEg%F9XZIr|21=tmH)yQ^8ui_Fn@lC>QVa zN@O8U^+C22W--NE`2RRz0sg~XipH+GdIc)o3qpW*^_yeeFX9;1uJnbeioBe{b8&A| zKtTkXpUFs`aV;hjJ4x4?M>jX3nR)XbivcQWMpD;blr#E%_ow}9;E)mi*WSBd7|M_| zjzrluL_)rB<$7s8b+xH!wkL-j7LR`ydQaYKAb=-0WNv^mnK(dIi0;?bM}ez0nZbKA z{FbM9u=Q{*J9l03&(?QI5riGq`O5ies9d|h-AEK;G8R?-EN)P-pZ$@`Q*0es_<_Bm z%!tY5GVYhyM9nLlv2(jGYN7>Gg=5pUA~nO2VF#K|G1|5S=~`@7f3_ZjDbocaK}NCu z(Mh}%&P6ctO%OdlkWprIe_L#~iX!L^V~x&fBC)#HTR|3y5`4##_kg~j&qT{rV7e%k zn){Rd&o8C;KwYD+vpdX0k)L00pDB<140!i@wKqt#y^q`D#;9YG_O4fZMhSFmD83s? z5!4t%oKt4WnfOkS?aYqt&PcSr@MllSB?;h{eI&?(&GohSpRF6Nem|=TLwL3JV_r5@ zG9Nz7DHa|~`HlFT+E=~nlC@Q1fG6Gg3DVecDnN(*XYmW@AMO?c)y+mfdol<3N{&9S2s$A-CNv1G z>4#a}izjvxyk|5rKv6sd9CiSkU2X6rRqYZ^_qVVKuSr05J|D==9ux)rOZxwSN5KiobOQb%&A1kT}OG39^U8^jJR6$~RWxLZaz? z_rhb)F^No?U3hSc4ZE-yxOy4Zm4HV+P|5gP!*;%zk2k~JMNdxW)Spg(y z-g~jfV-5f=&}U`xt2qtg1{d+G8PRZxx?OYis1!e=KPw9vp$|kN|1{Y=x(as#7eWsX z<4N%88EQdW@6&Cju>2yDt)y9Fv$p&4d{}Y1bvF^fX0?5`+>nGR^gM&Z|F~Lgg*?0+ zR|PC4LdzUgz||a~E`luh;FqZwo>&^@w#5+l_~szR5I(wnfgX=R=R&n@Jb?CLbY_f2 z{dw+5$TMFEYaZ^?pXCg+u8&>6+Rar_&zRyl9@ae#IQtfoPBjjD#@LvffINukWch9= zVyX0GcorSgb9<{|22Au52gns^w85sKKn`K)C}oQzJy-#>luf6B^hjNfh^kONw6L5h zJP}o(b55lfXB*ciF;x#cO^tS(MXal3QtLNjKfv%1OwL9h-~1*o22TS?kc>yroGVDS zXY{1$(x#W(PD_oixlJr>|BEZNoOP2_Xik%@6mAe>K;JMWFgT-3l4(u$%IM+kX4J2; zDy$(fh@f@`CaI`d((KVC*9r4&mpzYijI>%+ zP6$st8xHwy1S)uFJ3{t|cc;Q6p4>*l@9B~OMY!l(s3L_y^As`csq zXr|_E4|AUSf}kio5_S%u;LqCM|4N~kk?L)-6Hb~gGGERNL|Z@bY8V>gEOtfz!~~yB zihHsjMh;IhCic6vJ|ScBvl-3FnSM8d>31hA;R`8^zJ&?k@yZ)7r-Yku3-y@;**~bW3yUDkZ$~=E^cv+f;La2|qv~~5 zJZGbx;PrXooufM}Dh(;+yLI7vxyA&m@_b7my>o0#XB0^!7v&rJh-O``v6#@Y$M3?)MLNs14@k=bkgVOBnAjY< z<_|Jm7o<{rG?;mVfe0ef^q`Wof0LEoR*f8k`8!U|dSh3CJHuOHhePPCtlrt9K=D`3 z^zpr^#$j)hItLGz-+yN+LImNZrUZ=@Ro8oIyhmEBU5R2dM#NypXli~(dWH*0yZ9s; zNPGE&Ece=0%Z`w{r*x&(BRBq8PH`Jz{gDsw;fePJ-2UKsxt?dxcHTKT3H7p^#_dD1 z2+(iV5NHmD{j2CC#p}HOA^T`W!ZoL4t)YH1j2pOu{QOmW);R zuFcF?96vSk=QS{=s2((_l;7_$XZZei#2?pBo|wqVpcG8Uas1hrnuiol7{w6k0W_gu z0G?+gNSVpFYHOqI^w4n79*(vd{bLF@fV__faq}z8Tlj26vM+PB9m_}Uu2V4?UC}o9 zq%G7tcjqm@Vx7ffudCbHX+w+P-1529dIWf0mdKT9z#UFX^0-?6;f+-0>!iwFrf;rm z4*2)K7!zq--?wL;_G#5N)hq18^=2_+?9WroWf~L}8Hj8BlyG5I$HTZVA5<8k5>8s> zFHwVxY6+qI2LfgaXB=burLNNoa#4XaMLgopQ|(7K-f3%N%myi^BkOt>qaPh!7xD-R z5igKvkaR{OeByE*hNL|0_TQp-U$^D*tvGJ8XtvLAL}su?+A)Sjdhk14`M8w>UF+v- zvde3xlZJIkxe15ivQg+-K$jwCXrNwH!20ZWZUc)qDL)(B(tI|EHx64jd!-VhVCk9O zPR&xRrQ{ejW=^G6A0=^d++A{M`M2_w{v9mD2*S8!wa>7<_>nf;2tcvk6q-~Uo$gqX z#G_IwYAD#Gj||G8*PRoWMj5as&Qoz>u-S_!Q0<2T?ZV_gIEHzv_zVIuI3k!h6f#0K+ zyBeMxodygc9@G^oW8-d_|RQNNKs1>;S72oO6n+%y)KcYNNS-lahwQ^}@}M zD$59ZGxKiz(E-#|b5e8Fg>E#r^oQE^b{tH#hQ`g;@m-a^2xD~Vn~vjzE|XS_&dcKO zbE@O$uD34^RZrKhH%BGkreWF)&mK)ZmWSRgM8kt#oK7mGwVBbZnQAfXRIiheICxpd z?(l5k(HcQ#mdg?v`|mI=jH^?nUd8^l!z~$daY$0sue47DeOceq`;w$(PpZr~JY%OH zA?@A38*I*a2WwkjzB}QQwM6)z1UOo@t{LP@Qa2MM*i6c{jOFlB(89uHjIojM$A)ht zXl0cxaD83q+V9{wn~{H18Yg$M-rvRFDk`(CCc=UDwTa+~r(>>jHpqWzD(h}{1^pVy zS&mQTanYFUDUG9{9dec9YO7)WS;2};VZo5qb#{FLGM_cvI3jh7ID^OjQl=;C$#ScY z5>8EU+d|{!jlMsI_Lx_!rfqNrw$6z&-HOZ%$y}sjy!Kugsv8Eo%l)gt-oNLEvd;C7 zaxJ*s5GFiP^TzY_$o2yNW*q|al9Rgc#bl)#MbEJBY2SV67<9iy$^3w>`1;mpjj$qd zFvfs)cx8)cb!B8JUmG#K>e45c!(#~EJKIInYj=m7tl8+$0oA{cd?{X9Ibn@crQI!> zlG&%o{2V3CVM%-0LYg(1F!E~(NiQWBg;3hGd7mrlQj7$9(QCf{H{6%iC~jAO;wHO0 z@k|${{0Rro&aUWsj3(!-AbmlTk49>-Y%Tj0*?F5LjgtqmxWa!n#4dc4$zR?w-f?;Q z3dT_kSnZAq8&iDr=*Pi1f=L`|3mCNwuM4`bgLZQeEHPP_orWYc=G$ zzo%s|b2N3x__D$|<0S3gTE$!E2f&dm)fy4F<42DS;?Y@}ceQ8GRwj^GGbaaYmt1&F4nSi>e!_J^kL;r(Vy zo5vRWR+RSzjyPoHLbti{S{2ppxkb_?P<(CS@vgzEKa4iq0PQ3B>MrTyqs8l{2mR@$ z@}gXU=yS`X`#~s3ynWMr=o(?-R6U6_b^6K@>8d%z}r<|nRAHtoC25Br`LG+ z!H(;(r=^>fGNiO~u1cUVR=W^YX|{ZsYCQR_|5)}2>ZLyX4Wu#AA}SI}AzV-M5>oJq zT;HaHY9|-DF4|Sv8*zW&u^JxqoP^oje?OkAS)1SRTBvjvemq-CpINPIFW_k`Gp7jf zwpSS&Sm4J%ocm#tRO$0%#(Yz4XyR$b#%2L9AU9Md_~y)%&G9@!_GLpg;ju&=F?j6h zqUSnT`ytkb=04BA>ur?Jb>6Cum&t{1NfF~97#NwQ=lQxUv5`=@#Hz>eipGh?J}6oQ;sdIL`v=H;`5|HW|i z($dzCte4RjYcj(#W@*n-3R|EE;g{D=tym*Hoe8}5ffR_^{?+h8b&oer&$rwiv$`bw zgL|P?pwm9eGKR$lff|>lmt#+k-sj#*DimL|%#|$2R@hyh>MvH*lE6YYKJ`9$F2i|Z zR3C}m^#vKLrjkk*9oyBp6RXwJEA%+BMa83$^MRQ{r&f1xm)_d0NG`<%O_2Jagf|D% z2KY{sUes7+mh!R(uiln}8$lFJdF-5!+`FKZVrJ)?)ge#zL|UQV2H*?_{<%WEX?L$F zGwwfvFm}Y&CC^YsSGfi!1ixX5tZxU4Lo7mj&!1cc^BePrdk9;kj=;4IIjVe%@pU{- zDpat!?p>NVw?aYiqLV*R!lGx|5O!Q45l9XesYpFY(Qxcz?OE=Pn7~`*VvCVd@09)B zTDkC$J=UBrI1#wkT#|3JFe}x6;8l_s{OrC{e~o#Hk6EwGsR1{K9U=4qO3xI|DM+w0 z``z{h?g@3Gj@sY9x86v+NNe4oPB5kfwZICHOp1#dSEd?Ra4=r%+Lx2Z|M*L(N8N;Q zc$aUa3J1F4_V%-??-;-&y>sE*4>ewfjRkA5E$7e0T zp=k_NxAv0U1@hjxn#yMlvL=f+%p!48cEH|c2KX{vrA zZE7_3IZy1W4@DBzia6!f;KC4Pz{#5K?0+cN3oJs zRY~QXuI)n-nKjS0V#OW5#eIDn)Di*@`HGL)Er;tDowLOUtRafVA}t@`8)w&-;CbFX z^N?rNz5Yeq*nWj^dWW-Q3+qa-C4QgyJm$~*}(0L4dAE0~CdLyyqx1%UG6iO_Y(_^$t`BV9r|TrVzb-#z`o0N%YJH*0 ztTqZN9yOJ2%tJ`;YVgjUPO~9o%y)rRvy-!ll1YC zea`E+6HiD&ap8%qJG&?gP9nSCB-Cn4LtU^PC<$cWf~OW8Dj0ax(N*~5&ts}Bq{{wX z7~+{`g9N#1OdKHO7afB2>^!~vO+RC=A1B{KGUn(Ujv)Ld+PghrHh1@b=mJLt*Pe!1 z8JBGdwKht2+AG3AUcPmpTJ;33W{P^}kBmspPM8;9N1*t_N^+-6=}$YDC`XE;;g1*? z&Z!kRb)$~Zdb-Mc>F%<0?B2+4TFrHh&G3sUlEz9fto7}}n!!D0+*`*VuI zWfn4hc=cym?ZkocBfaQPRKE68c64iiBmR3-VFr>*4-0nSirqLa60=2nljqrag?DL% zk3%-i>j7$$*6`B)zV$vKIu8WZ<}fvZEsL0iIeB5>b)*fIdaUm^Kw%aL=0fEyJe~z(qTx}zGuiEWg!BO=&214IN*IKMCfk*GdT~-M4i^ zIp>4lU|FsJHi8iPmTNYyZiZ{{MVfcJ{C?7!U~$Jdd%QK@(TWKv;av4zBU8~%$E9Z1 z`H}AF1F&4dhbzK~o+2ILJu?o* z>KRG8v?7+98S;5T&9j#iGtJ7U45@xX*TT-?4xSPN2<0RCwG|y>z&J-P?D&BDq%#X% zyzsEel-VRlJ6;Omp&ID6i5d-=WcbWiyd^iJ11_Rw% z&Qy82rEf>VN7YFR4DENOPWA0PWfrge=`ta621r>C4|aXo^_oHi&NWL7z8tQzl*-z` z?>8i4gCmYGN_hk3DoCJWVv(n8A&g;-zs5yg1B>%F;C-Cs zBu|0nh0951)$zc(IC!KvzPzm(p0q7qZ|!uBy245T+0OUJS5Zi?Jyev?vxWL_NI7<}SiYE%I4UehHadl#5@AtYYC6sf4`nrsOv$EW5EvxXK(goj;vQw+f$XrzLHMu#>Am zlqkNfA3xXI{eI~c_F{K=$`VMiYjq9Ynx8+runJBfdtRDqd8}75>87Z_8?uB}V8pq2 z{5hTscxRJWHtm)joW{Ev?p2hG2dZ!~*R~mHf@PAV(d*LZ*T>ErILYb$I>7g)axRM% z8>#Xdn>M0KX_nX| z8^R+^*DDq9QN`-oxTEP~ZTTA{X3(1J_8F+%bExx^h7iuxqcV<0=jTZ-CS2&@b7f1) zD=x|m-GLn}o~?=`ckm#<;z^9H@k(n^5+WKqK1IUYMdXUz-Nv=`+h z(aFl$5p{xgdd#-Q+C!`n{?iid6(dq-4oq`oZ*bONC!WLW^kAOU9LKDpO~=P+Qj*sN&g{Y$}OcdFI&XS8R1nJZFVV%@-egWuf6q z!q;lM6|>V{&R^$JDVT)vz^l%olvM zEbGY4h4<9!d#ledN5(tn@K?(%MJu)(+SZ4AtUz?gr#_=q0lL}+Y2MQdrKxrP&|=F_ zdxK?*Ua*+SNi(aySsa`tE^Jj@}~6~S)(j_r>lZyRYMq<{`k$V zH?JaHK!!VH4&`6I3`8trb&M|Ai5Ws0mIEpDQlc$X?*=(BZt(EXM;bjU|1p z)M9%7Pg`dh$VH3dSufmA%Xt)iTw?5|73AfdC0gTb@IPrcwNC5GqH$M7`pHXr*%TS5 zH3n03=P1YG9Uir#wY-qpo$iqdK5knkMvPxh?qtKEcOXHdODkr$QRPHO_{WipqReiC zoKtsVrGYvx+rRd*S<)9)Zk?Tqr!(j*$zdWi3sVpFu$eO^V17pld3S5U+nl*u>pP+N z1|Oz;m;)RM?qX(2WnAHR{Jvn{fHn-O%*|Y1UU(X6Y#i$7Zu8S<$|-qY25E^)w;4|X zkt+s2x-sc#jL|J}kQ&z{;x(mtPEhRG^4|aH3H{RGR^9^LvE}KsrmFmfOVvwh=j&i; zPct)_D;#OZGXMiC(wRO!i{-Db%)y~6$-4m=9ruRo_bk9$2c4!b6A{Q>qP>9MF|RoG zn>TgK&3?NMfqhgOj)uU3Tl2R>7h0>HwxM3@AkhB7n&vU4Q$A|qxC~k<8seIYBC*a0 z^~vgypyKcrr}mcQ(+4yH=h)Z3OqW%?mK{lyI5DrYp6;`7g&sUCo(5-)4SI$fNLAeT zP))ATEQ{oj#2fI2!ZG8~GM%LQ82}sJ;c?(mwQn_gf`?6kX$;`IaLm=^ulY*#g5q&H zJ$6nQDZCkno*#wo{HCSLG#z?1K~jGxv!RKx<=hj4XTEjv#wqbp3RW{t3FqX-`IJb5>w<@beKM8MWRR*X`DxuL9)>M$4ttj+T(_PJ=^M#N*)3TA& z{j!Vt=2@7(rNzdfO!Z*wt^N={vhQU5CyM4|>DE5R%+P$;%EY?mey{w`4+@E$mOkw= z1qGTT4QOZ?kf_@^ukG$R8YaQeA!d1>6`E)Frp`8GfkN;8@-I8N*ShRR#d)10 zeufUb5R#sG>0%E;>v*3Lv}%0W^oe*J_Ylw@b@x4AfwD9`hNBx+KtXxKw%yFuwr?g1 zFY>MoUm=pa4Q4L_DRD8l!`9g46i8(9n@NX54YiT}^#nBs2@E7wXR)PeNqq>2ofZln z%^R4;#QaDy&+EF;v9>Z^ujG~^8b&N=bQ=v{=JR5j+p3x~kI#~f6qSYH&#NK$ELd&p)SYD}NZ7Hwi;o!(N zV)mpmKMn%j_QJL1`l73wcKzBR@;c-hmp-Q@6^jjj}}1FR7i=o9yb*HxxR|W_K93Lf%gV8bI^T3SAA~&?$Yas(#J!>V@Y~+U*DuW zS}9zn6vqC{GEv0w91Zc4(U1VpppVv709VoZ9Z>@prol4L8vDG@h>r*GeqQG}XWgh< zs^8qBDlqH${GQaR;-f@gJ#_wJe3wzppTa1~{*xBa%=GMK;|54Uqv*JD$+k2d%-FSfdh%zRf^*fz5KhhXa5 zyOh`mYu&`!tZof@9!@|uJ)ZZT#-1ZM;~yp?5@S>5pGWJ+QqDd^a)Is3!L0jsA}wX_ z#oLEn{GAtDL#-ZS-;GlXnhv1P+KL$bEVyszbo-UT|0weJxdh43-I?V(QS=JGiVWcJI;_}n^sKg=4I8Ge!s;u!vtdabjHzcyQ=WSP6n)}{Tg4euW9r(*4wr`ocZ42f z#P&ox=P$S8%9(=$`@G=sy$)$PJ+d0jCc%U1uJ^M&(k0LCM)EI-#g0l`bwSZpFaurd z0MQ|`!I)ivF^yPBty}P^i4= zj@I_zEDHwxPn}{{&?Vv}vxDU=;S*kR7~@Vj;mR);SeM^{ZL54KaY-aVJ+q80j>{mz zU1;6z)GYG`{;L^sJwMVwk2H=^S`cEA)_E&5`XD*cMH$90S9khkQ0J0bvD7v8kTxA8 z#|}HgMvD${O%iAVcZx`wFl!5Zec6pNcg-?)2#IlYt7wY&h}_y0wo`+?q9%24T%G%L zw3HjKWe)Ze%bf2y72dSjLSi8Br%H1`u7RkC1lGpc=xSvpUS*{iYU!WQ+S&e47U5*x zm#wWS5mZz_bg3tPkhuIso>m|HtU|ex$HEY)9W0CUfU^!;OjUV#7AJ;7$O z3}u;q76zNbTmi~kOEQE{1ARJ*;(9M|f#LrCVOwxKjk7%*x{xYV9-yuO3}({ck~N{g zvJ~yX=BDMX6DB4;K4z5C4!PpJiDA!bAGOxPxQm^nj*IOXLmIfIsY`gI_Z?iv$@r4Y|MM_j{^rNg|)Rk8t{qYh;0V=SNT>Y%*EcS2*kqb>h!MLf_X%@1H4D`|aTATor2als8*X{})WU>Bg>u!;GZW+VY$& z47$2n?zhu|azTPOS=L)!q^A~FvQaF%K{XX57>I(XJ4YTMgXRLVd^M74&Z@TU;D%Ia z*)x6e*0J1T8~RUo;-|n=qi^LzI)t3(?N-83q@xza6{7($yzbf3rbXt)HTFBbUWXV z@goDKMU4NL8}UZ?aC&pd(oSDax?F$jrWGM1(@YrlY9lD+3s$(k#nhzAiumdq0uP z$BWTH=sX0&8cyoAyyeBSonTow(kv{8y=er;MLQ`1G9Iz=%?#~AjBL9xE5&+L;A|4t#%Nrt0L_p`8`{0h1!Z!Cpjk*#hN;Xzd9kS6wAsF1RlD z{tL%O2YrR4U96_E2q_$^p1m_B%+6QVZ2}o;DtikGM+Os9-nw)^!{yA-5%Eju2ZTR* zIp$t3cD+B`;u23C8UNVw*KM(I%2(2nu{3L0uQjKO(FanS?T)$IQ`0z~$J?V{Cv=rq zO6|rCsK^rS#+KM05p?xYt+Br?bpF7{(Px8Q=N?{k%_mA)`8I(fg6qa7cJ{MxzdpJ9tMYFOby2r#58 zlo;b5nwB{KoCV;vo$y&z<4Iy+3?VCzgEPgLI-ZekTt=SF||h%BVPv zw$SxlzbWT(!^vVnI?Fj;qipd%7hY(oPL=m4VTzmjQo|EJ4Z#PnwCUqA)tevvFzz6X~qV!lUmveL{U7_T(*yVaDe<2|>w?A66s zR5m<(e_^!q@kmkfnEiQKZ}gvkTEa)Y82(vbJ<7EN@l&w<{pYOgJVPW!$>&@wd%Bj~ zg&xPRotg@|%p&I7>lap^&Owe>*1yXeUY(dKa!nfPc2Xq>)nubuGR0?5B}1FmN&a!q z7oivZ&j%)od{c#6GZNMU;GdDJ5uDeo0(_DF+`6G~$Ok57C)NGLYt`R7Fvb71k)ijz z-WkW_{D9P0&qO5Hx_9&1H!ko)T)N)Yrisk7{Z(Q+!)Zqqv+@U7i`E9R6_)nn3wbAu z_Bfl$_>ApRBBbEy%0LQTpg&Gn1gQ-7Hyb+DF`A1(ZghP4mq|*`tJ|zmd82ffS;pG6 zjy(=7h>a>IRsR8iQ3%6YUgp&+r{XEB|2hqraZ>c&hPMX3N=g1q061Z@u-zDDv5nY- z!$+3qE-R-<;kI0T?Y6D;^~@J{z0>h}N6J?TncmD8MM7cdDS_ii9|&bS`nW_=V#W)L zn|N$b=6q85jwb7hiqNVzVj!F3Ub~x_U1iGGi3&S0*K9mmiL6G*CB}Lu7uk7hA^)L} zPisG+Fy&}O?LO}<+PVvzQ(`A!k>%iQymYYE#n2hTT5E}QGcB9o?eUH%rq}a`pT0-& zAU2UN0X|Yki+$GuvR9C=UI;^W6s*E_S{MXh%SZCY*FoC{1h(rf5f-9q1Y@%75znXE z_-;(t`C=enVi}p}o&0(K`}Zwvx67v7Jb-R3PW%N}e*-J*hiTCTDY>=tLC*Lf`KKw` z9>w-Ez^G%t=aDqSL)OFMd44uV2cbl9fG5ea+&iNxMLr#qVtQJ{Ya+D7%2jM#7=N1* zJd7*tn=NuB7QPcJ6M6%|%a=$}^%eKU@oygG*ksfWNK+U)L?MMrZ2wis-&fP7iUbBu z5DGg0#qcWnb%`1MU|I79IB_3Akitg@Wx1=K`te99RGCcNx3R3)8wyMxa}m9#pAiGd z1p5iF63?&;`r4peVCl0GY%Lx1K~_|kT@1XoD2^4046kPjuZ1sJ`o;Y-_9Z^(#eOA6 zbtD)>CjR1P za?*L}Etp?#N|{qVj49-0b_(&e};xT%kj+U?@3AB zju)VR{QFcNv0`l#5sN!q7`3p{w(@q8{P|bqZD?A7@&YzmLF2|UL-VRy%{v^tEfT3; zNK$)KMy%*~{7|cCAu3kJdxli;+?mmu3pi@LD3@6O9_B(jcJ$?OY=r!jcj@pxos=nB z8&3V|`f7h3+eLIfMC88_j5lv|Csk~uVxmaVkquQVeY*~2g%T^h^F)BjwPgzpE#RMz zHl-GKU%<6MMrWg@jnWdnMQ!sT@tqIc_PAlt3}yXGFR|E&&yR1oGEQ@fI-{m*mDY-+ z@u^(npw+T+3iby@R@zugj>Rws>g&%FcY_dH);y74bJ!n0T>bIMn>U0tJ?oNfE4x8m zr-*S?uhc>+2{h+woTT|YgdYcP4+y|4oipNf_IXSs7=&hDX-r=ThFJ}M= zb;M$O9f^O}#HUjUIS$SQ^}&yM?&&=Tcnlr*dKj<)#$5Q z-wXfEIytZ@>}dSU<6pP3R#xQ3LfH_NAxChCXDw(2L)Zne(LEFi&N;ie^*35>FX&GD zsT=)e;z$0PPn z#lu}n{qb!v(LJCA+jA-6N0yhtQ73Jh^x2TKtY!Z8U(y)GxE9Aj4}&(NzFB+C#T;Z^=x zrYRCdb}36RoHw}?-S-ul3OE8djUSD$5@RRlgAH$6Krat%_o6InX{kf+G%~eJJ6;CY zj>ueFnlZl8ppbcW?)yR0hu|Ng@#am;;6GMSdi*`JWLe2mCAHYXDPtL?LQm#4gSycK zoy=a`kGvm#0SH~4t(6{;Tgr2anxg5R+n%*B&FTe-W_=Y0umEsyW(Xzd;}q)6H*`VN z!i{CdS#jKaii8#r(ML()_5;Ngh{i>PR3BEtc)ufYPCWGpXnXljViOa)5#zVIMm)IY znnJUVR$8Bz7-q$TLKim%W@)2)9q&z4CbNvoNPl~6&dXp$2CL@Lm%2~Up7yQ;t=3`J ze#L~^h=@~GRc6QzLCCDSo*Ff`pFk!jO-1GRAy$e+-~@6qK2H$27AsFB)08PauBepm zPQAttdg+h(Ty}rCgWTEtx;{*8nZjSERt#M#FkDI`tDvj>vi*E&L@!CMjA?Pt70>%Y z5`5e4I{c=7{+N>*8Ua+`&DywELN#yF9SH|SlMApPc;x8I`G1w%79&+ulxQ#W=YP(8 z0OJIawVX^}=t?&0<>?PZ*Xu4ZeHIks_mU7d?!OyZ`T+AMGGpBI3d>gMm4z>0sg(t_ zJN)rAa_met@;)#U>^0pz3Ns!#9B7<40>g)x8?-&mZi8kXd3U@Eo%0TW(e-$XU({P< z8NQ_E$o&FhyGreCZRUp(VXiFt%oGzJRHKV35^Yyms9p))gZk6-RhtvP>LRq)&C7|7 zn}!xn)BJa%PfQFO>XTjHoGi={-LvMdb0$6XfaI^A6amw7k0~D3n7xAXMsBSD^oLZ3>gY;rhbvWxT zs^uV}<}!qpzQyx}oB7cDu*$2Z%QwysE3Atew{PD112>)d+y4N<&1d?+N`0NMLkFEtO~{+undd(8l)dp-E8g)i@vhG`@sf>*fEPxQB0(#{+B0$%$s*YE zYmEH52QRenaM3C0VF58Ubt;0gUd;5DG@i5W zZSDu){WIRCtnm(*$hYOFKT4VLSaU(Ht_NT~?|s>QN5B6li$VR>{a@NEW=Op#f3`I~ zdWYXl_)7Vg?nme2?m=`~=?=%mtuTCT7tt=%&2swZeuzcfA0&g4QdwxKC-nCpCTb-{c}gv_#vrk}(SVr35?TcZN?W1Rnx9Y#?nm z9;Z)Jj}pygcc)oyJ(F5Kjt|S-V%Ci4x-f8^XB`($KD%#|?) z2Q$O%_OeBu-Aa;9&s)!RgXs90nkg$n04^eCFTrY8SI*r1!tB^T0w^Tp>L>K|A(Y8% zn(-$KW~bdKdn_!nSr2QcgKhhwm^&?H_hs^>S@*mBb1Y0UJHV-TC?v2L9r^%r*73t} zq~Cl5tT~!Q53W2Q`JerA@;0rHHTfHL9Hh8XE%9TS8EXr|i2KZxl6bZ=D#w1>A_zZvEi(Vm~}?X9CG9iE%f!eLPK9e(9Q> zqmkzHX(gq~?+WGCn`a%L+mi0uFb_f}&R$#X*#c`i%t$SnFn1V8vvF5Xf6qAexj~oK zf!GwXjL2W%Q&4#&RQq!8AP0w2%^lW+U8U}}{<%dl@O8TDH}@0-)Mn4~gT7HH+QZ!7JOA&QEGHJ z-}?&EhgT3hGN+5F%cNy{s|k?gBNNQoKPH3#UwC-cOSi+0<;Vw!8efa$O60UDRBz@z zmj7oI3@_4f_o>o`HdJ#An@(g0Gr;DCCKsWaYKi6D5T`-@7XMP<6yB)Gg8gpL!41;f z6(@dKN1IN6OwFqjS6Awu=GU=&x}6`X5G1!dSv@ZTO`m7Lf7;lmXLCR3+}JQHq9Y8O_5Z; zH=Wj)Ba!%qK46=<06;5dFm^M^jzBk$=>r=7Ue6KZcF7YHmTPuT8T#8E8SgjvXYyPwBu z)F<+-1Ws|?=d#sjI;k1CFWJ5!YWYD$i7dEWs+X^=6D)lQ#KK=%;l*ODbg!~MDYPMU zpW%%%;xDTCxYA!R#jQe1Mn)bgdO0=WNJ#S8aGo)M+UsRtqjUPN>0bshq}Y?x_4LT+=u;{_m|rc4I!PYrxRd`;AKYL;Pq*TX?44o?Z_LqeQ#3Cs3U># zJ*Pbb0t{6o0n^9==rD_3=zgx{@88g5Ce-HES~=Tc+POecB%LV|)Ycs) zB&MIq!bJsmENda2fk~tcKjJm`*PV<-tY?A8zzZ2&|HY?GD7UFv~&? z5^i^Wc3j%|$E{X;UPg!$PabloOz>$gO5QEwQt`4Y!>@gLUEa@~fnLH#5MYd_j~1MS z61&O3FhzXY-Yn4ST#(DhPo{2=<*|lTQUeOd(;Lk95)+CXL8A(N<3#!+l;pr20{;Hz ztZskW*PUJ(PUzW~BOzQLq<(^<57h_bcg*-S%h*MT}ab6~%Rz1~I2|lp*Rvnceh5A(*Af$YSEu!dYp% zpS!L3JU=R3kfVb`I5Bg@7iK`|-9hl(r*y4977!C_9`E|ykhE0F9ZabTOU#~Q3C#rS zKMYO(Kd!zqAj<9g8bm^Alpb2dpu0PzEF`5D z{(8Odr}=o!Jm;LX*IsL%eYTa3OW3Sgpp8yu>cmmm2xUsvZ`Vi93yXx6AkYE!^8li+~Y83>u2~h zYP&xSxl@-DxcJ_tx`LJUAROzq&iE3%sC>&{6L`%A^@jLxk%ioAPRX%JHEC~-AB{lp zbIbAE+6k8{nK@O@>6yJfwN)g^o%l$&Fr?pu^O(w@Q=U^qw6=q;qkj5^^AER#5&!UG zjf(BYuMzUIYD0dOH5$_>Qwnb3sCliPj?E7Ld|=f_o&k&yKR24Z0-X36@vONRNjZEJyB0APVZ7-r$c` z%(yG*@$W8E^`1;TkpDms)(C1~`)hN&OGw#?){N&=lr^P(LXJCG3qA<==G5W}t%1~z z{|7GRVed{OkjM^R9|1h^HMAZdldl5Pvvf-x6Y~iZlbAMD4d9=hs?OXhtO@-k=b^YG zRQOaJ<2uHt;S43keijVRp8hR{2yi_wWtocZXJjo<@!bL5pxZvdis32U!Ba1)Po_a*J6i*ca)4-CZeiuJtt2P2F(o_UFi9Le`5*&bkshCj88S~G6U7^n=ThKP_|Uyki_hZ=0N>VL?Q^9`~VK*+;If{K&hNR=#yBd4t`Lzv3al3atoym*`~w)0pi3jKwM~f zJ6AQ>gc=T-PvIeZbX__2BR>r7UIT+ZgAzpfrMs$>v^Bq{H^gQYDIrrJQz zTYqsy!`FYFqaD(>Y4vQxsFHfFZd)vsOQaI=6$iIz`@Sb_pWuQob?STLfT3@Ee?EjJ zx#0MIRNW&?fg)j?#{2Jl1~NwI7ES8DfvrqdKG*Vv;ZjXZuqIVxuGlP2PJYuMiLs5h5Ps#8eN3ZxIKYPB6g^^%LYyhy{?Cnz0Xq4 z13q~?KSIR}ry6!i4=d)v+kC_~tb zcl2_PKYrcO@6q^x&LLWjbg|jK$Vnibb9j&VKPs8*C1bJxEB1Z#;)1q)h{L|vfCn=- z@3e3{56-AB!(b(2CxD^eubORl0+DmLIgGal2Gb*8ZNpdfkS2$rUTbcLj9Jf#wJpV=WsnB^y+&v5y z&&yM%opdTV7V)dz#YQs3lD$oPC5qx3{nu*L`JdD-uA+o83w^}_pOxZ?@h)&Mw4jDF zpC1e@bvE8^UkTlu&0*B$3jv8^f$OeG6xWpO3t70L6b(KWMH2{2E160W5meLF{yL7dMhWh5ZLdy`u_FIiLKmm&|v`^mGUa;M63LV0p`N#2G+kmgvFHV zUQ{6N^B{n@G+}=gc#$iGapwX-AvAYb>5S8ObFk}Nhn=&%ZcCj!4IaeIHm$_}l7`Hp z`-Fd1nu+cFLZpEJC)cftjsa(~5uY{cQwTyuS-~izu#HXmrlFN^RC|DayoFT@PF{cb-G2X zo_eu4vY{FRS14WI#XGnnu)=FW8_fF4Orgi@^pdO3$H9|($uUjfKfygOe>#R!kgxjQ z{&2NRuFg(wEMM{VCZ3OZ=2|YNA4nbxKgwdGh*=gnhjC(DqRpjEgW zUF496xg3s0&W&w->o|IV&U-r<_+opt?IR;Bw&5{(lOBq;y}t;4-XCz5mR_2lG}>DP z$Kc(*;9CJrf+F%iQU+LO`C8^G7Ip~@(OgyI6H5scr9qQT|W?-~* zeCi8@7g82WWDdw>VrSd^>#~(d=BO8vy0BD zDFayP-1kGQ?zkMlN)23tO)g*GDGQBz9Vch6>Gem0yVrwIP|qbb+z*3jj(&yLjARnG z1Ix|Gemy4xYcGU;r#U|yyl!VH%Z1hp1Aua=Xcce25&K_}c=Ckk>QVkJbq$pm9vknK zMUeXR%t$2NFrp=aPq?%S8P2l2_0p)(F(w3#Gp6VAYP-{Y%oS;sjis!`u-K#Df^5g> zK013%;)C%>Mo!w2jSvX6(QgVbv~Ckcuk;&+C81u(k-=E6&Af~0a9_?$cORX}thc_V zse@aNv44vpAW2{*Te?A|?psr7k4lY=SDK?kF}7csR>NFYh;u}#z2|Ev6?F-m)i@IR z?R(=XpH0yS)047rRxuwb;5_zG3p{2) znASY1_x4(Bnen!tY-urWNOF3bg-TR)FE}u?Y7uD6m!g<4`)8vVXN{{O`qL1|ehS?O zd3Oncd3a_REVp8Ne-XGGu6(EyyWeBT(+?cCq{;J+aeX2!npQGu>WT5M_wz(iVmWb* z(aX9KSML_8#Mj@_%u=wuvo~R|LYMc9iFga@O()zn z%S;X43X!e=X<;2S9_AA$dr=`VwL!!NpitV-Xo+_y-IpVEr^nn0`(CYb-dC5Ge}6S zabZV!`4?6_BMKrfXq-==}Wsifw^h zi+WaEGET8S%BdVDPd83@cY}>Y?>r^dkxJkC@}g$xFjj|Mpwh@3heFp~mEa5#!`k`u z_(Txpn-8(o*rCZDgjL6LhzkOou<9?AHV$te0jzep2X|x}zku4D)lI0%Cxy6zfvI<3k_I!~*2|YS^hNCE4mq56C-xDYG${e!t zYda@hf7iw?fXBKxT@oa!%z!mtp6aG8) z%8Ag%cGgOVG{H}*FQHkZsGN7NdA*mWQfzeGHhHqXicLDhR*T0MS8g3_wg(fTP}0q2 z81+A>$!DO^j4Y|IC;Ej{Sq>&IDL9XzY-%d?8!0z@o@dP-IRO=7;LP{#vuz{i+fp(y zVc8HDF4^I)nrr(L|H7rTG5Q7|Jt&gikj10RvD>y9t?y8vq&C1zw_|6o`AK!$jRp^+ z3O=;srf#xTeY;rl+^hqSK6mFv4Ps#LP(m>oat}+pw!= zLoTqB2cVS2@!9)At64y#D-STk>~4=#^p-2(pXTP~B5dRf=E`upKuQarf+* z319K!dQMV_Xdbj>eII*&D#stYoKVX9wnEHBx}e(J&jM=^Rl>099%e4i zrbS6K&@rIFpM5vj!tr7pNcg(i`1G`O4p+8ybIKdMk2fg+4R<#_c`lyD5}FM$MosiL z6>CNNuPl{k71SC|1N|B^k3Ikje2j-_yiTL-a+2)rG&is9y(;84Gn(Y?6rr4Bo%G|z z*oxhT_mUQ9t^hzKMqb6NoQ_(NL~zOW0HRul6NtZV=gEm(ZAQ6Nq!*)1D!OMYx20Zo z2I+;F- zf~$WnJfCNHj|nPAVCz8I13zu_W1}m!&~88NnumoE<*5kH=I4M43?DJbE>%iB?(gSD zs7woZ0`urb%Uu!tVT9p)yT5+C>v^HvX~^;PMZAS2$MHMn=HHDGL3L-Znfs%EynbTN&`Y1@@lweJR@|8&MTDo}Ku zjd2`=NqdC)PZs97?s#_Q=`WX5W^_^_#2X8NhlPLE0NB^_zQmhOYs96Zqit*X38933 zV4{Pxk?g?`%X=b16ws`q27TtzE3di4HKE1a5e z9QiGD#U*(=fk711WU?4RVrB$2)Ip+nW`W8=PcoN>BcAdR^*1j3L{QRH?X*Xdwo;9J zrW8$ezm+M^+0l;0Ue&qXxfZW(mFUGngk{DeNMU$St%-jJ4_Nd9Bfi%VUb+?flN~%W z;iOeQMZ~*J%H2tBUXQo+n>AuJ`>pNjUYB{_&y)QufdlQS1#Be4xYe)YQ=8yo14qn& zlS6XU^T8sog#fV%z+$o-bR2&~&}TAX-yXOT9u!Vy&I(hMo6Wimrj6%KC#s*5dqht) zlq&jr3WSg+9y_TTQn?rD1>>w zRqIu+b!}nCZ^5fQqY6mKcRNERX<&Y;3?zSG!#K<3o*#`j>J>SIF7B(%VjKxEh^6W* ziLP6BIincOc4^CDJdjIyxLwcPo-0ERqqkr->N6<#wwUZ&V6^(W`$363%)V7sm**uo zp=>HQlXJ5iN0Yc>Ynx@Gzi4lxyHVCjt9f(ez*If-i3WG1%)^Ud5K-A*rsuoQXw+9^ z^LsgT4=DCGoHPv2j-aw5>M8q&J?DwG&)mG6FD;o*&K8JQ$Ea(!t6aYC08s+uX<9Uc z{2aLK?o1U3AHhBRDiG;(!4DFk)Dck^IOXCa4HsF=p=wNd01cfQEoIC9SsC^)jq2h| z+_aBSPWC6DsnZ{{e4qK(dwuu$8iQEY*|+CV;9~-^hY(r`CjtZ_R^@u9MSOd+tC?*; zAPNPxn9#1@NKS(t4l+sIsdh7=*-5{rXe&hUj7=vfmpsOq`*Mg%*kX;V%*pg%A+eB3 zXdz5Uuz{~`d-E6fwKs5dlJmYN8QcB>HN1zL`@Ll8SIXYMAY&;18bb_k7agAxV*EU! zQp~pN@lp3S1Q9g-x!{ux3-G1EX zT{AZw-rQ?K@9f|xpIp|P5!My1n6yiiYjlx3%9`WP5v?q3#4*T?deX%3h9g119PioR zLK%$IP^`Hh8|pzTgl;o{rA@_&(tul#GUs}dW5Yu2y<-H7-?L3-IPA`vns-$t{H3*5 zR2~I?&&W@qXoPLA>GHKByOp%pZur%G)&uNZ-T>cakG8Vh%Z7Z(qeVxFdCs*<&6hD(^-16 zukkQi!m(#ANgD+(n{F?k4@xqs^GfREUUniMhk<{}e?$X&5w4>Kol3s>tMg{;TU8-1 z95y>+CMpH;bfsFUcF2T_`HX`JJhn14RyA(pB4Ub$e@N8%29wD&m7H1Xiyc{D5Q7G1 z99nxVYYjdCS0kW@p@E8en5hj&7q6LGZ)&gk$^O`S+F4sFls`$7BlFLzbcPQBqQ0n6 zvKe<{)|by^GAn=X{ACEYQTwHGpUI1DB#{byRKUy)>rjM8;^;npK%%P|KjU&bvIw^{ zs}Y^=Z@lPQAuZ(Jov5brv!tC?8zbyNA$+-0v(~_ao9G1Oh7K6~cP>67dn{S6VD7uO z4dwHK9-5K=r^j!ds9%KDh%IRWxRvOWE6IP;f>{4U`+@ZlR)-3DU7-i*p^onCM0C!t zP7nREDQp3o;wj*;9wUE6=h%jepxt<_xDJ|o$bvpfAgAtG^IR*vTY>V9mmUSAd63n% z(diBLKB4lyvh_7sIMq^kq0e(w{r685uta8lh!={-2$x>-I{>YsiMI5ih<5 z21@3g&rDNwYBC*5xpHv$N50l8-SqR^e6VQ-=ugMx0pA-k=rYThu;fA2dU3Bhv z7&0r0 zD|t)(Jgn7jsrG%wIv`h!Vky=O{%yH+*t@Tv*->TkNT4VAxg@hn%o99_!E5 z-fX0VBht$mUjaPs?{5`>N&F<=doci!%&S1ciP;o*lFO`=|x_IKIt!^685t+ z%Z;6_DX#kHIbT7!(NEFvEr*B$Mcdcq*(fRiEAvWc#Ub1_IHx7MlI279l0BI3( z5;qU0KY<&lq0<|XKtS8p<#ZSJoCN{vcdr?2+ymy|_Ur(>T(6Vf#&dD?8PQ|w3?0vl z<)~pOX%O?L3tENB9fH>UfmN&~_cYQfQZ=|NRhpb7NV{T=WUS6}Y9XuAiUs5P6(YdP zVewNK+wG{k*~;UK_V<=FFoq`Bcd}j(cP+K+-vskOa*N~4j$g6X1E;8?!yk}yVR@Vs z@!Ut92}o+6HT5CAMWz79{>K@c*+O0ioit&^$MvzwqbZ=L;%hlVcEZ9XY0cc=rI3ae z6C6cQ!N%7z50JJ^rod&_sqk!_{$`j=|8AZ3`eWwX*x$7PLbrPr0hc!y$%@!-syXCJ zkIj7;N{6xJXm>UN(E4kUfTrM7V)Gl+sInfRfaQ!;p>yYiNuTBeQ~^7X;?VZ?`ci1t z=&;9m^zoS9UNaR}KTe*Le|%YO2b`hOd>q7nW5~L74r0Ay8din#%FV>MlQcG4&-om` zj_c;;q@cZc#(Cr^*W5XxvK{-)L^>f7oX_5q$lgNVD#6yz_E$tL5d)6wmO!n$PIGX0 z;CT7T4)=qtg}AdDl-)v9BH;_!*mU*eLyhbxCeN*v2kBE@i%H3l{*yw3i7K8TF(VDE z(E4#~_nqVMJ4JWx24UfLkY8y;g79+x&h~Be-1&|;qTCS5c6D)?O;da9!j^Z5ZeAgo z3V4{lV4O%@X!gH#(u9N)h4ttU^Oq3p6o||;DCQD{X!AvG)y5&}&8>ecrd<2^;Jsb< zpCSGaed+K)o1{Yc&+texp{C3n7t(-f`aD%yIj&wpiXuFUwf(apY4 z)euAPe7kf5-+RXqf;}=%24(k5Lc#Y=G{^`Hl&yCVi+>>SsR#hF^x=>bV_qyz8hP;6XvqAI>`F7oD$oQ@vyWVl3Yr`K=t<0pF7f zUZwr7VF{CJruL&ro%iI}@fN7d_wGyewm)ALZAaY4jnRcU)t@cNk-{IaT@4PTZ1|T7 z00Of~bn@*Sp>&9iTFnC{s!EKVr|@tTflvn&&nc(0KIwNRvf9gRF{vF$?;Z+Lm8zJs% zhh8X6zR>mR+4&l2gH7>Jf3~xpD9>@n4;`)-fs<+YcTM-o{1|+!3Rzo`Jw^952C{(%Byl9JH6i1jl9)2A48r&rh>X<;l2iE{B<=3E5RqV!}8L2_>+GZ zy0p#8)^A7q;mY3O$58Jbn?0$WBlo@;Qxbcne^|?>0{oJ_hr-8U>NYJCW(iR!ek+cl>O4P>%_*FM_0zTYFgB_=l*M>_<(EI$fXw;$b}Odo}Ejs zJU2LP6!dR{NZ00L(h0Y;f5 zy<9=OIJ(9R{1A=XM^nCw02auNdfnE3L@9P8vU>!b;Tcjc{$Cl&O~&x*3e$lRK}BB* zdfiioE-B%G#lt_93&8h3l8&VkJ8>ou0vng~R`YqErL8(N2%ncbb^?VH;~ce~`aII{ zWryu>hAH-MXt{1KP9U36pze`VIv-Jj^My1w=W4nBywU?WsVA8KV@3P>$BH3uJo5)I zX;G&A89*G7I{(GWAw?=ovD>KI_*9dX^7S~r)EhPI!@{XOzxOjjVh!v6$mR7yq$yN7 zXkqV#oP<9L_%Y6t%C^+Mv`~lUQew1baUa=(j-+t+T2Ha*L8&&zu_wZ9p&8_`&-2Zu~=tw0~ zf&^i{qkD=GNA@&-o1q=3gEFKcm-*br`)kixRT{4G8|o?M8yW>oPHwziEUk-&Dp{?! zEMkwDaJx~ms8g#q^a0trR+1)GQFc^W)%vU}W`Ah^4HYRsVG9H-r5rDv$Cff=x^vQ? zK*pl~h9EqLF6QsklvbEAzxu4eO-hpcejvQ^W+6}L!}Xh;5X$~S5vR@l;KC?2GUlgt04Sony%D9dP6tbVUKu`=eW!4z@)L5!_rStM5VZ7SJQBZJ%&Ok>h8 zW5SmIFQU3CxLjU-^k2fKy@!HRxX#&WeQXUM)iGqo^#l>bH4ooY_>M?Zz55pQB`gp# z5IL-F4z$m0gEGIri0*B(kxT{j_2T}dgUvT12)S+zA?X9(El{f>0kON|e;8lvq?eGF z@bs>fQq66x(h&_4E@YNJ6N=9$O#f0Z4}Ckaxtts2LVMVEBIn-sVBv? zwUabQtuuwewv%89>zj!iB5qLGDWR)lFmAdeen0D9OywYQ%4`optX}_kqI|cVsTpW! zxvE9!2?A~#ay7vM9n09hNtNP}QrNjVuSI2fdlcJmsOfEb4+qioIKSCKq>2^qXUz%b ziZ(*@JzPbC5iu4L&_usOQY zsFs;fku*bB!cjSyM%%tJ4vyyfCbS$TbP3a^|D&yFk1pHva8o z@hi^$Eq`3l#CF^AeN5hHFlO0BNPgqoL^hlJkel*M>if><&BCQFTdIhhKeT&&K-Vwz zdG!$A7M0DIb<2r2RrqwI1Tp_->e+R!y!%VE6yVmfQ%v0a_*}2~_RY_hb2kp^r`tQ1 zxo=E&Z!aqYLPh{r#{e}5Dh znpt79s^pa!0h>Eejw_%)Tg2ez5e}5v@=$oWy82MvxB?Rk{bGXh_feH1b{X5op^^!9NFF}N7ru*JJ7{IpRmIKkT9W7)SeMlr=> zt9bb0Op&lH3jGt0-ggnRpOyr6>1x{^J$jUHHtFnSbcv<4Q2+C`jbdGFU2UQS;Z^Ka zvN>rzq3(yqMO5jo3L+E5OPw*2{*xi#HHct{dBf+D2uj|1&AL?9G~XHM9zfva`Vi9{ z46Sz0pH_p96@*rJr;DrOD0i*`wfJLAHZ}h-SJTC`$~*wi8_54(bG4{V*0Rti?{#j~ zw25^PtlHg3h(PO(8ahZ9-I9IA-Ky`+V)>f4_a(xEeVb2kH2^M(cw7-od_-(@fXW;z3Z4m*VO!hEsYWGvey!s<+1}Yn z6ApdU%bz&=^$={FC_WSX;ur23>)|X;0ljPw!rJLeC%E@48l7GEOIBd1SY+KNc0UOn z8_0KO{c~(y|DJ-t888K7Fj_4Gsn{JS!RcJLvpQUTiUm6c`}KU@|F~g5wUKaUyqEnK z0EY8^rjW5{4fT{E+Q_}I_L=`7Z5^W4WZnN?P^7(aZ26Uh@E(CHnM7HGHFXTVTlJK*v=569zr0Hx2$d^9!V<}s zjx$`nEXK>7KmsKxaL3t%XTOiv0nxb89vV)0tTR)bfX+#qC=Ad3DqVSRlM zyN$7%lkny-n==VLKAzO`zR9JFQ$22hT2B`cMQwYVz?CM0jbQphhzO8GfEsodH}}V? zp>bJF<$@jnd2qSQvGmM!^cdG}D9(LWJ3A;mT-z z=HXIYp8o$>UMZ*XiE>atK6b}WJ6S8%4u{%Y4+xY8BwsJKNBSKxl~Tojkld1ZJ8(t? zBy>^0CY!3_xvzN;)=~W~7K%i|c;qTJxHiJ<4_pG9>)&i&S4G+MV*DzdzEB*eBpyXu#3TcdgMt1Mta#M@rW)2qbWv4*t+ z=5$d-!3_y_nQu!{2UHkUp@~lQYRHWp&|1Gm|5T&042?(1W)!9eTHan}HkxhtAmGtB zL-qX6;NQlzW0iB^W@EVdp0ihz(9bX&2`+3qt*-x*i=Azr5<_zx)V8!!HN-A^p^Zic z2G1&)k2)8?Z!C%)uIjaF%1AGV z|0kU_Hm)DpZfy#1KZnp>IK)n+bMp-96?<0?9j}+X|aK#kqWOzbyWjw_IUK2gDc>L%Mo;Es6 z(Yso;LM&eF;=L;KdyiqqEG6EZDvdINqT?jR9H8JXlcvwjuiNP^qj;NnsOIU!myR@J zP4n;W9YOTFGRn1IVkdF9fS$$y4}=pxX?6*FL!oj`&4ZQfErkyud9KZk)$6sH!$J{% zrtli5V9|(}rG*U4B(E_7)pk76WPxxdzM(vzl2LA^`qm!O>6$!8ul-}W`r;@oy7N~7 z@{@JH$ANGLQc6I`xI*WC^a*4*eIRB;q3+UQ$B!=d{G-7%Tx5{%T(%vnv{uLi6oGnW z8hEpgssbXLKRXD))fygD1LHT{v7$rX zD`H+2KOODdt!xkk>ZujQug?|iS{KGuZRcHGj2Yk?KshVexb|kNGY$T8zx0l9tCSP| zDKiV_7;sRO(|AT%d>cNb@XQj}K69_li9h+0k?1V&d;7uAfD{%AKOEk-NS@hps1npj zBA`Jf#FNJ&V`jU)DyQ^f_iCS;5&hYl_5n&d?$N&d<`}qeU>Y_Wmx41Nbgwgsf!XE@iYIIn**Lqq|th3LHp)W`5(ExQz43}I*jKLF%s^BnGl6;I1MtmgK4ZRO7dimJ{Yem=|Y zX3gspO{DP~$fBg=bh$e$iv#2kOGS%FCu{mwr%h=JRANDR@Tw@GMNC(p$00Y6(=#Bb z6*H)JA9h`_7t(B&L5>5!wa&=${%qSnRqq08CnbwH*Jq-;2FetjDAL#c)%z>1(LA=U z8@;PH-M#O7f1V>98>i2@c2izyj|&vtr|4q`X##~HgFWJqszf*X=PT0`bR8}agYGzktotg&P(CM?kg=PEHeF^`}_2>E@yCf*RKGaR|>O?M3;4}nv z;O_VnfXK~WbUi}LU5z~C^E8+Sc01AK4%3{V_nclTr;yl0B?Scve~C}xM^owqv}C== zj;`oeO<*j0iesk;k?zvzrelM!AGZECJEv5b#&*VLoJTF0TI5Ip-XR$};mk{|?^Zai31wqA)ameNa)DUEI!8wTNX+ zPL8M9#bn7oMSq^Ib4^aInVZKHAs7WGutI@%0>d9hfOVIiAuX>9>7P7%i4cv>e5UaA zhhWywF1+Pk@|*JhTIdg_;@LT`6ojGk$8C1$*_~4%;2n^ZtMA7W@W`}l-6n>yd@{EM zn!fyp?tX1CMU#RE%p|J7Z%-*lS?FIse@86F^E$hyao-k+p}WT%t#3FVwXi_+7Iff; zn>6}*J}&#I&FeU|k$1MHEr|Qczt42$O7=Z3E1okB_E|-yJ5y*C-2?*q995$qeeZ@S zE-t{*4sYy7BClNyERlU;)rR`ly-ZncqK$C67Jc@mya1cvNtRBB{55ImmC$F!E3@yX zqYIXwQogxIi%~L;m^Z|F4b^e>%{T~4nzhK@))Jiha`+q3IQhb=Hs0z1*<^{Fax7c*o$r1 z6Cj!({qdJiD!{sO;;X{d98K&uwXgU8)Xeta52K6qt-XtBwyKnt6Ax``o{tr|BIX#R zk=QUx-E9l#^PLYqoSWXX-e(ZntiBOR-QAfT7>sCF5Sq~9>?G1L&Sth)*U36xL28wEmFXFE}O*$ZMI9Pen;3PIeVl5#xitZY?)f_kF_M2ESI8krEH@9zJp z(&FJ$Zo}t@1Kk~+_t>?}yYd@kdRGE;%Iz-cWlg=1fx}llTt^nZ;~li*cRzQ&nOGKS zqrz4EYFILAM~z|DM1*Fy$($4w+@UM8^|gmf8t08c+$ZZ9Vf(sNd@zaGh)XoK+>5T> z>7=^W5R8Q+#sZ8-fq56hP^$a&xJep%{r9La-w=n1#F6}Ara}G|A88;|Ro>R%+YL*P z?VzX>U+7tpM@8& z15&(t+_z!hF=CTu+r7i{hcnWb^O@`&@-&>x`QD1Qy=gZTOTwLZ`o7D2taDV^s9AE! zBytc&?ALgSfCS09eateoQhAA2R7?B8CzIXCjMhG)bdop4F~&cF^ji^(6YbGkGHdmF zsQG34t_|YYEIhjFE&I<3!9vdd3^*5>+LdKm6jAl7fnVn`z7MsyhSd3;c~-u;`qQa5 zGbY>em^Ta9#Uzn69~3jo24;7uyiQ_@SFIPom!zVjrwhr5*zW6D>SC0E*9bSz_6*gFa(43Oclxl z6^(i;>~&F`>ppwc3ws-w%s8>~1JwiDLF%We{7k$~U2um3y&INmLa;#>j^RCW>&+Dc zFzc#4`ED+7oI<~RQOkR=yEvwiPMiDf<`+zLWn}AoP5`#`6Mp zYCNOJw0^P6!^yzKD6vB;l$Sft!Elq*-PwIBvk3o+Pn~J~DpJ!X3XVc$9irdg|MY$F zgzx}|LnL%S9oOS^Q!|}Dx!eJ{sN&AoL?$k8kzOs}os4gigQcyeSC`{$^V(8gX5#7t zJrl`z=LrRlk4;8IFXDffkHOBD^WR=wmD1TY&6DMLv>%Z4 z&p69$-ZSPd*g`{i$a~gXqrB=eK*gr+Dk0g=wv1c5WqR%XG0?IQPyA=WeGFJVL`P9; z`?E>OojcaljWTrF-}XSnfx%BAdr3>lgoO|4Qcoek5q68mmW9#tfjvv2s2(%2YAh7n zYJ~(T78rKm@`AM#eT@=A8?ye$IV(M0=wf(%soDP3R)T@4WmJtLuEmtev9J0qK&EQ=M457+hlX2_Z=n;^$|E8(@>ln-dSI)!DGDo2=&6 z?fvp0=HJ25E`gVrn)y^-d=hFh+y_rrmE4Rz&|};ACWQBFgl?7^!*)DUnxMS5xkhFw z!ub0h5wUJs3jv2oNwpygwd+Q8f-2;p+z2=fTaj;Ox^H_q-wKbpnD55Rj4n}%ee1Ql z)yj0Zk4jFAWwK>p9$&^EF62?tKaYsK!EVL#X2|Ke>j*^O8l*L`SL>Kq6h2zYgU;9j$dxx4GVw2N7ZS!)0 zl6q)Nd?OGKQn$H(S2>`5ZNcc(?^*y1vFDocm6@wruW?v0-V|qgqtodZo$*(R#5}@$ zxblImYXrwc``q7|yTPj>L57-sAhA`V5hhLyzmUa{Ih`){tY5Uxf z#=vMCob#kK9%v5?D<|h7yQ5{XNFgdGwEYWcfv0Hs?4?X18uabwjR4{agzBtcp;{$2 zaFWF#rDG#iseB@_t$FYo|M!@$A%FnPd^K?<97NE;Ta6=tz2*OnI8r}m>`BSjtWPJO znMxnJ1{kC;rnS1vqfH2Nq~=zAjuNO2wA9gXTVKW~fMSw?e-I~)nBmMLBc79Q$R-HX zvLF_uK7{wrzLlc6M)_^^b<}ZM?;R>PxEd&B#Vh#b;?8U9=VT3`jwT-ye`a=Bylhu+ zFu#=#Fr{p}n0x)Sombf?3cZg6+{vo`lweA4&(=_zyWKJQei7)qY z*8R;ynnK=hxNQm)H>5le{9^Zey9D=m4`YaN4BmeHl!b*M#acdKd5=^X&tKa3aV9b? z-YE0oy(yYU_BBsWKLSI&Hv%;=VT0&PCPd>RS{wbQwr8e^>l07U%pgw6W8Um;(dyNo zQXg}e^hYM_4KAnRnPS;}>O{GLZ}9qzE&l?TnxhjrhOwh*czRK=eKFK7q_UXm!r^O13=PPtUc zCp>O{yLv_@eD!hp`WDP*c7y!jbMadB{k7C{^&_jQYyXrqmfrWH?WnCI3^LiN@2eBf zKUrrmTsU8Oy_9>;qH3%ALLPWf=lP~4sfHmi)FQ868=UTm&_j$w{tTXePDatow)7L{ z-`kFJPKorY%tTED!;eOS)BF=)#P@vM@Hs1nlGH@lU}(zpu#W~}P^!(Lk|G@Wk0JdB zNbhU(@YGOG<+S<^%-i*ylf&B!j-AWI(;bh+w2Wu)sZD&p)_}Y6MUS!*shZ~wZ)Ft) z=&zrsuV}q3{@7;E=bWQj{8%~oPWvQ`ys2%T39q{04uT|sKmU2|6|AyvexCV?M*nx( z6MveG?e${fmYg<>?n7!W`X|r_93}ILW#)0BkN!mPyzCy{*Uv)xw$dg?adkE( z`Lh~4-gu66P$SHBd7BX4_LgIPfO2-p#yVHNSzTbBDb$E%$d{|H5d8GQcJKae>#b6( zy?=dzYHiR5^Z^y81J4FhHL`u?PkcAYD~5adX+_V!4%@D5;RSgpkNwe;>AB#^8_kMU zOBC|qnC$!ixl%jGC|1f_!o#fRmVJ~tKS zIE!7>h95hO8}SLC;#V>~DS_M6&yn zjuDpkmE~}1rcy-n`0hazD9)?*&v{4`4c*2~sF&?1A3(U}C`;Kxeqi0JPQ85IxHOj( zK}Z@|{Gi;W>ftjyN6)aN!GRtDW!7Wt!>~98&Amf6Aj|)^Lp|(VycsI5%+fQ@ln%Y0 z8$8~MRsZOV4;dKTVJFPACwIm1T*DxI#k|y)G~=NWvjq>z3kAdJF7dRY{WPO=N4})l z#YimKz#@=!G^xI)a3bcPEGtQ8`3isk4LPRM^)Z!?NU;qq z=%I~gToCb}hZ5wKfi~pdzXuRsWxmDIl#3@NGhiYPB(vT$#WK(Gn_I=_4}yTfDCTJa z*wr1@Ieuf~WLb|?MiYAO+_P)j4*{M+X1iXXY74`s5~axedZgwmE9EQ*1?K%NLEySv1BzbQyZ9*{(ygwpg{+gHPL# z)?ryDq;>Jme#X#6mui2bxzi6fU;0JI*o(fK0CyV(9^kER;wXLlsGuZ2;Tg%(DLC3D z2PxB5z3ypbDSbk}aOu%_fQ4U6Xo8;(Fs3`84OtzEOYN$n4A`3u(8q)VXSxK?Rn@<5 z$QbLs{55Y(@4W{lVbs*L#@NdnAR2j8(jbtT9k1SkqQg*izY#f3w?JnST;MT%nEP7( zBMrV>Lj~V)={DN&3O9?L@4G1+hM@|vDWz>(;WLXG5=I>ds-k-Q7c+%?*4m|IY|ob6 zBJE$|kCI!X#u5pc$WHU*mG|!{O-kktOF!888QbofrW6l6=(fbVQ|5Q%7E^RFOV$LB zfP(IO;wB~8BCkw)_v1yLE-Mg=VVsTzxvW)d6)OG~x$vxY^GRvxF?0OsE?kr10N(yc z+SvCq+TF5&1R(H6yKQWLc&F-~#D8hVoK!U4Y6z#75u>*$(#NTeWbBl(qJ8`+jC@vi zZf`)HO<~mIGVccJv3rtjLTZyx5;PIXRk80aa=v}C>Sh085zYHDWfr-OYw^~;7N^*# zNc?k_)x|h+wl!>YUXz`le^j5H%(6J#?~Uj5{K8}#b4gG!H?=AM-kuI-kPmPxBQGo& zDt2P#BkbzY4mt8ShDLP4;rdTr(bLh%;raOZ=(=r*Oh*Cl;>a^8t=n;&eNP)mHnS-B z#3hK+wfTqT;mH8&_o0VVH$Sq-Y_sINorr5IuRP1)!95u?j)(}gq%#d1ywQ_kBWh&x z)!CRyPbO6P*r3*3t*f=ca?}vQUi<@bhb}sOF_5jYeA;1TWId?iI%KaEY8_XS8qWdl zGE2o(sj`j^{`F_bEMoG>4;F z#z(a2mt;k$aVoog*s5cq@O;8UGNyFn(P7HShyg~V+5yjyzg#;uSJCEg?9MVMeEx5L z#Q@n;94Q^ZLn?!=c= zGkIUmw)d{9W4HTgN#JFS9^LS@F`2qk?NgrQ>l{_y8K>=N&qQjGgUZ%*ftWLv7=*^- zyF3|CrQ@#Qdi+cNT@f_#kmNlX&5o4_N{*!$EJ-sI;PI<%)k>fEd#_Ai{HSpI4g0Sl zz}H@h{+=E=8KT5zaCt3l_sPDoc`|Ol!bZ1zk}=Q5O?9iv^zl_~qf_Bl{0>A`iqp>y zC!oTxjVwFwY~uYQ(vM8akf@M}3fr@Uy=^}8L2glx#+NUVoEOawmPs1@WtHW-{YFu# zl-`*CT_{5c+E`3&;Ya`ye%_w zVgM!Ay7@wkR0-f3Ro<#HyzhRiY(+<@)Rtg0LaFn9#{J7o?+6h}{UZF>sNNLRY?X1@ zSrjw?6+LM>6w?lApUB3vkE)3OP2xw70d3uX_d2FxKxA@8Sd!dhUp0(!3%P=t@CgqZ z{!?8tkMs-|&0cMFU1E;Ls^Om)p1W#VLGyaO=?}|4?0rl`+a-|1)22d&-@30Qol<|^ z6cs70I3rrP1JIy1=sK#t4ZD)77o$Fc%$pLsVjDizgD8JAZ z7e0s;=d7fkH(8AQd+&WZ>ywWdoL`vUr!tJ#d8~*wc-oN*w({Z267KJZqpr3dUYeNr z)<+g4T#!miz>hm}rGikvR*@w(G=EG*lwRa)p2pmU^l=%YiScl=A&e3G7dkWnzP5QD zt)^g{GzhD{>Q-Q?2V=X8%{@r7cgV^9z==;Q6a6RZnm{zI<3uxPs1LoukhKX9xaLiq zN`cT@Qx`yCVfSIC<<|lRPZyyj#ju`QpW4(^N=fB?uJL!g939+C09LdlRzJ8%(eLJy zAJnZ#p07_tEbRlmZEHhC`E1bxP<+>fwfxRCs26_NUUSj+~7>$uck5&y1m{?C~q zsb(~MnM!m7E0R@GQ<_+>Fs{b|A|CD)e1_uJmd0+*Uc40UBCVsj!vimnxW8Dj<>i2_ z_SsVK5LXz(90qv`FWAmJO}BAGUNj@OPFk3>iyJy`lD*r_=NxrMrBd7$>`734Qj9{Q zzmoGog@ijoBp%3W|9fr~&p$XIMzoHqq>)oHN~n0CVXAGBV6Y(Izlp@yZTR{GW#J3l zpSr)5n;R%QM%Kj%%sxg_)U$RT2Mf0uXj3|M#&0Ukk*Fv69zG2H6@SfY$d`^pwTYWv zSM-lh-J8moO`h}=IsQrgzZgIhMhOyF5FTJSj zlL+~m!7+VZ_PRi=syKzU3*~^2*fIq&8{f++g&TBRON-zELNsp*dTn~>6OK0FNIA4Z zgh});+1oT>XKTZYW#5iZnin&n>9>2lD=bczc^E$B4Zg<40zv%{FppsQi%k4i2sneD z@=o>PpFVA%mBaMhSn>2jb*#qM?pcZOR=KF_ul$C<7&hTi3Dk=w{guxk0Z%BmlXl~+ zY<*8t@cHdmb-Yd}$VO_oPoIxuD<%x60tscM_|dTNBD;#(^VppRdB~i=j|p_dcYD0r zSsH1pkR;XCqfNY&VeA-LK*o}g!5ds+QW>#KDWwp>RG_Ni3B9qLX?53AZU|uxTclytpNCnFgvt8EDIUg#pp-^lc{I z0`9fOyv1BabUfJNCq=Xbpo{8wPlMKPVY0e7!QDy-HMjBhEi`}RWs$6UHkID!Y}<=1 z7rv!0zwiyzhzJ*4mUKLK4x9ra8Y589crHYnw33%Kl`ecigi(JWY^VSKn5?GK-rK8O zd~k@B{)p|oB4OeA@wRcElM=<7Bx=+s2b+sv7 zB`}u+S#&s{8F|9iYaJ`=SoRMxjfJJDQMiOUBR4|Db#W{3O%q#uxrn}{0R{%w@;DB&a|4KaW2gR*;lf9lgURWuhZ=*S!_O0M=}!ep3X?ocNG5J1;EfLMiLEP+B+e?w&CDUY}7F zzy3F`vcJjUKj#x^GC9~)Y7Dh@VJgH?n_6MV)md_wh-@;)Vkd9xcmgv{S-;?=$qL#S zQ4q)0xZ1LmR%0If1WQ@}7!sAY={W(l{oGRT`Ey~{Z&nk2YkcygK^fZ?itJQN6obJ8k*SSL!YkN+^lg*_Ng2v3mA!}NIn0jV?xKjRK~^^$@hk0P zhLmROJ*CEB=KisPb@7&DMel`;aVJb3F;a>(JY~`BLo#v=MV||v5lnuq$djt^CdZA%WL;+m^_uu1kX^Nu?LDKRnt_*IT2d-}Lp?dx=2|&? zph@HMOIeI?`)~&~mQnbhpGvX8sKV%cBwpC!Kbl4ejjK?r)2LX0sv)KuYCxEq+Hp39 ziqv<$Nls+er%On0Eq7oULIYoZ`xE<8SiXfe@3M*KUk{^3C2R#%vH6&Ck{4*2JEmXp zm;@eM{-$umY1SnZid;P~+r^1Wh>=qQ!U+o{MO1jEi)~gr0$tCMgu{7GVro9)-7oi- zSs61()r~H=)$n43LWu%t2q!=2yY*|5?v@U!Ftht52?TaFI+t_{2^6@mzrNz7(fa^U z=ixu04-M>*xMwYL_+gz)kHFRO2=*UJ$o8L^9{Zt2hjCRYg+wYzH*MSOm(9EF>A)B< zY-I)WuQ204Mhg4AR28n{cUzALk`YE+z1(hwL_+GEud}nGe}VoF)Y+Q^z~T%3y$*ag ze}Tp}Ei~3DDvI>2tyoZAI39Cnf#LCjQ`*8eguvL$>kEpHG~(Ja{*j_td3?ZwW^4xCKjo1$?%MeU-Mm<8lvr>ygti~2o@oN5X*mdA@IQ~)94D^G zSgdLZPaI$Jcf&AGBtl9Pg0MezL}bj+_zqYM8vcBZ&0j~Gd>$XLcqZj|qEsI`E!@lo zwqo;wuaNc^w~jEz?sy7fLO<4|UO2k=kwEj6@BRR8>@PAaZd35|Vv1~lc22AY7ld{p zG@`BJ-V>As+G;8E)2W1an3h<&ppBhLB7b zmfRCcmE^?q@uI(ehR98gK;#pKjYAJCG&_c5Mz|%29}UCltXi5)TsQXy9eL$iQEI?YC+iPLBqnGdN)f0!jqF&r zEej)K?D>Xyb7y7V^I2#z0yNWC`*ba(`)Yb|n9(8gEqnUwZOt^mW)!fvoCzM3d0(aV z50hZPD!qKODAC%BmLRv&DBwb1&$M2{u3r?2&uJd%4aV*MePet~bwGA%1;as8tfS$%RLLavmCt~c(*NfbsQMoWkA6F z%!8e=h%Z@`0F)HDfT2SistBu%FD}(dMNL5{ygw5FE#Kn;2bf(hjD6l?up20KufUR{ z`b-q~Xh`6P}{W+N`Nt~V1}`igtJnG2cQ$_ zR#5uT{{qcyNDd3dzmF);`6Q@adS>+WBhd9TNzaIjf=pHWLYa9-A3>n?J0m-I5Kp9d zYEPG0PZsH9GcXtDXB#Kkg>@Q1sO6&!p^mmhSEFoOhY4;x>9kediZ%+9R~$7ZwLt;ixA^Y2w)mer6<0SHqF$ji z-Rnz99}phfpBF{yVdWuR2?TaJJxxCI07<^}7xtiqC$IEnS2Y&G4aSkEx|5%kXpd~B zWfV!4y#VPNW1hm0s)BH`><1Q`cLu6bXvew?hZMC?#KY$*jhR*jn^)Ps>Y(p0Wq=Ab z?_se%V!Z@GxN~sZ51i_MO*frRsIJ2Qnl~<~3fd?efw5D=%W%+qehi!;?~iaf%7&;vbxyHJ!h6KlR1) zzFa>lRB^BLrcVrJ9P=BO-HYMXlX=`TuWe|~#wi(j?WRCG5FkT*r@vtOLVl!Hm+?*^ zb+q>y(i4%@rP?P2YcBNH7&G06z?~y%s1WWhWE8*=9BQGGKWxb9v|g$wwrJCzTF{XY zp|$syOHl`v8ViAI{1Y^QB7GDdaiUV>-p}N(1(%q36x9wWN}O&JT? z26sm&#(a34fRO76h2`rS6kx~m&c~QGfH%IY@55!8K=ug)-g1ttX^8>xG^3R}BTm-v zf%N)Kv&^~%zN!|E#5}NR&wrJEC!_RY12(hv3zf+-8>0eM6MC*dlNAjxd=4%hHZ|=B zw%MX@^`+#kppRf9FXW4)i24oR}BMSU9mr?d`vZ~fx8 zu`4FP#x(T!6ck;0ZlrTU9)3j>e*>~QA5SiB3bgK zp$+nqhR$QIt?0vGo%-4iW%cY$}ic*{+z z2`*-q(E9~BJ$$!y6BIjoU_StpIk6z5@|K~J?I=lb3t>)G3^{K1rSt8i)fr0+@u>4Y z)ByN)VOhr8PAxW#U=;_AYXdN`8L@g$t0U+>DsN~2zfe|_AZKkBZzFiE-A zS2IzMVj33^g9mDePIU^+&zQ@JX69yA0(io0iDiw`!X*Wyl|f<<{CQ6^@UkD6;8N?e zz2xdr+fn1WIOnrbkJE$jb}O_3Ys<~07P8XMXq9$tHmlnF4;SFEI1*5?j=bmOqu^WQ z@ZB@5=z*q#BIoO^w=h4z7&6(<@B)Ej5f)jXGy{RKM8bAiI|>#T$W8-H0%( zDOy4_Ix#B~cl6!DV!Yn)MmR-Yh{=W1JUgD*9(lNxh*&=lYy-k#B!CQ!0SSDB>UVGh zFxNyC7s@`^bkwv3>>GEDux_(Cl~Z{uwmZw*q0Nxfie14muvL&~l(X1=k^8gs`6Q~% z?{8#bz~(*nagVebeC#W1%33Jz01Sz!^Qrje<`Tn0iYqpq+`|p=!hqZ}C!^vug^P@Z`z-X?!t$W170dPzv9-X{tNvI7CLO*>v!kFl&^1sB43YCu4jj4v(Z)**$;qx?8(8w3p+jF+rs{cI@mZ0Q9r?2fr z;vgE*EX}Z2_vAEk?~DJ_EfboIK~ow6M*siEM4tXWHS2+2|HU!#p#qafmW=j{?uPUI z+NdY8xm~}o=UY*JsbTaB?p+~UmH$AhTZ2#|!CVw4<0tg2+u)*fHLsfu4;FF-_fl#n zcL?*C*zM9cn~S}%srZB3q`{>X3`Ssj{Uo057;cj>-|gpB*f>q~oNm(PE_l7pQ?+mi zf##fT+hSAYl7xruWT1L|&-B;GF`NkV7SlHE>oY&^wni6?PVcvbF=w3g#$as%L$?M4 z#wUK!tdOz959+N$2(J%&(=0?;mp`ZG4R79rW9VK%$nf<%Drp88XwWLh$lB+8(I;$8|HooKP-9vkaI@9QX{x(lgm*@DYd2 ze&64X7s^=atTBRJzCm<^p7K+0d4^1|Rc&Pg|eB4+kbpJCf61a~MIDvJ?E^bT)+HyOd z>9^U=rN=NwO4M_^6o{46q@Lp+8J$lh@X@?tk|V^61s&hMx8{;M!@+ULr)m9B-1fBQYo~rTT;@|yQEn>ueTcvd zaDH6SntsI#b{9A~6kGj+O>?@Vm$kL<5e69}FoyD%|ITzxhL(OByryp1JzwlPU5kl^ zk?f86_~yEa$W&|0og@0*$iPT0HjU2!#zLRGl2Hn04G0>BXpxDO?qof}_ALsCb4y0G z_8^g+Z!Rj(BLshILASRNzojC-)8pkPZ^j%hOGmvu_ss7R!DS{7aku#5{S@&+>g)lonvT&#j^ALPM^3FrP|+R)-hikfvZ*ybgSZ{>}D z*4zke)@)IB6Ig1B)*fCt9*7>pBib`0!Qon4_Rw358~{t|Ma#T3ZEuI z+#(ETIaUvuOdJ^MyzMI+Q>s$=G`}f-?!0IX9BzyYzny-QilX6T* z!z&=UEtk`IJ<+xlw0gvR7zHKSgR_03Ugy&3Zv|x0{ZQe_vjvMBJ|#Og!BC_+9%-1L zt)r)76VZ;2TtV?T7cc!ZwrmgQNCUWA4+dmQFeJrg1pG6&Nk#c|2gSU*N&dB!gb^O3 zMUr4`s71ksWdB6mYQLQzxNrwg?8;;)HM|;9(V>gRdCoj`D+p5)&J^AUo$;ej9(lI; zXO7NPJ(rB;Q`_1RaJXI5V=SrjVp0e=<6@P4RW72ZyXIn5v2t;3=&i_hR#sB(mLw+9$BMjkwlOdC6qtWh$B5Q~5 z)1t`h(5kl{$M_8z0=U7TE<-*#2S(5a>lI;j445xtRFPzq+eI-yil)z?1R(W0ioiq9 z()cBMZ}Lf6Ktk`DUr%^-O9L_ivD+mV>e`%YsItCc%l}DY&-A@f{86KaX#hqw&@(s z9sT(3?&O9|tq zqa9g%&-ZJ(-^msi$1}w4W&eoTu{K&}HD7B9pD`H@mS!d}dSPKT*r8OMv%8djTijn} z?BEB{{YrHluy;dK=WnB&Rb%iOGGSU0H}^fkP<}}(UhFZoUUk@ZLpa-JUzPX}%~8Eu zY-PqV=O~0lBVOVwuIVKR&MRly9TD*eKzSR6ZEO;PrGQE&%6ghOyEva?Hn!6S{zgq$ z!$E-T%PjLsQm6_0R^tM(YeZOM7I}#F{PDs^A3FYRanuJR4)eMlUawW^LDSXz>@}e3 zGqv5Iv(BB}f4N;KbFB*m#Xl4H9x#{&e}=pd%&sL7`u=!LD#Dl7SYilJLDFNm4hx_^o&E%L1U&(>}8Ms+&hwZ~-J7)91;aQK)zekDrPDd=do znaUe}%zl_C7R@|6E(Zt|`o^$=?U_Qe+h}-SP{7l{-+WChWUlOZb;u3moVOU?VdE&< zXKkil6VCP(*{79koLs7ji7of(E_aV!S4Nf!5t*b{lg0Mre1;vi+%XbN`_VA(jkq8` zAYZL1W?Q!js_@CA5jdN`Q(oZejgQ5wNw877qP9JUAJ!1}@0QJifs*627v58*H9-*4 z&=KEbAXKtS!vwln>3YKfIvkm8FdgSLwOLzqzx_r0vfdgI(F{HkxNffvYJ6{?Y<}EI zQSddDtJD+?pfO^kWtn;57%w`dyNtWmJ?avx2gX+QT>$E72h8WRw`Ac2;xSuYSY*{D zmD);lW16nYQe1cTbz_iiV5$B?`5GwIJnsTG+^ZeEEQ_45X2>*cqlcw+uJg=q+&#}d z5d)t(OJ1e2wbooVf3lFNkqw~599tbmNAdy6(qRGpJ@NA&6_L5mzcxp#(JUVOlrBNnUB*EDw21KI1o>LlF_M+^(#t=jLQ2T;1Z;qug!8 zXpI+mINUpeFkR5!dlC(Ae5XX{H#zwQWu#oVUA`G^5}UJ654>CsezT@Run;#pXfvHMXBbj*ARmyIup+Pbwx2xQphmBID%ok;rsK*Ljg1*kbp zXc)Bpw7c|1-oUHgAWhZmaPl`Vg%)d%ybp-nVwhs@zP(fYV-QXx$DL-S*Ro)>NZWC2 zvq)at|*qX6F8bxii6`%P^A6`kLLn&_L=TvdpAR-xDG`3||IVSc#{k`8t$^(xLir`xm~gnv zOGg>^v$SU@Z!he!LLz-UTq;E#>11`R!{VNYVwPa-o zS8G2&v!iB&3l0@|D96nNXKv*QF_4b*)S+xQ@LTEQA=PaK`8S#9WQv4&O?!%u#A7K?pou5-hXtXWaOlH?;SvHJ+ZP>EYN8z*84IS_OG-X4d?2WWfuEby@ z$^UUvNFR~=_fNWl$gY4SQqyY0pdZ}j4VO_BJKc%aJdkeYaFbka*56fEx&&`WGxbJq zH-<3IDdaP;w-#%>cYIN&KZQ&~$YCDiduhJLIL$a$wx+&HZ_RK@jV40DUIw%>Oqg~( z2eyRI9kUPJI1CN$kq+?lC#04t807vg5MGpY{88z=bnX&o#f3tAt8(um=;0&R)6VXB zKON}9FK4Rp(*NPnd4;8^&KW3{^yZER=b zEC5&VW|(G-df-YK3?*LbkzRoYyH&In3qBReQpzCGn=R?+Qto&^(E$3h>g2fvF~S{{ z?{RZ&2m4W`j5sNsU(j)A;~(V1zQ47L{NZPB`SfH-n-_)_Bg#naoCh zRhEZEMnfiqOLd?BIKO_=1~uP3J+{98ruff~un}Gb^Udb;RU7{)c|C;P zb*e}k6B>~k9;QrB^erOt%2V?GOP-xY?QRXrTUGUaRR0zkD4f{J`#fMiQlvGP#)~tb zPHRNT;Zzb&l9N+*E)=ZWd(-cpF~{IpUXUbm?n(DWuSe#;EN6S+!x+>Y*UQhY{yCDTueZXo|(ufC)=p!PH%@+3>Va5c*lj37XQE!4( z!jipI{1cx{gYy;EwiPl#_8%XTbi#*=kB-zfnd0tv3kS>N)xg8(uPC3h66T@tYrD4GL&8A}YFWrb;>?kTiH z0&khffw`YTArorDF_vsvm6^pIEd(B*!GefaRR7C2v2-}S9c35X6ktf7Qz1t}YFjn= z&UIZ<-581$rUA;?8KFrzQ%D|`1)`nVuUI5Xdm{AVNNtyRQvj{0fB3sh)uu-o*L0#cBRi2g;;y3OW;yf&v~eL z{L=f*Czc|aL-z^`GxWE-o1ule%$hZeuDSx}6AF5};H3A}Y9vvVUl~TGS1+a(C?dF; z4Q-J|fBroq@zOfkqG0U=P^%e0EIxbgVwk{MUpcxmAg(DEN6@?8dMa_yvAW50I`ujd zdKu_qz2emQ^+Q<9mqdFmpOC$}$rF{UPd>oS6E^SET4jCDH$>FV&-LD`HJ@~Y2H!Q< z?ky9q9XNUG8wNPyoowcItVNCgdTn!9&c~SJ9%wDsW2cu2XjmAe)hmjSmi{<=1R$pB zEzlWyr_=dFLj5&SHaJ1O3deTlw|7zeiEmS)MncTS6#6eho6x!laZbmHJ^h^LV=Z8- z53S8)x75CgI+RpA$vOqgB{qaC#JA(V6zSlx*w6hMBSLp~Sw8CnjOnD~3g8kB=^ai{ z+%OMvZl+0eWbkqNtc)x2Z{&-}z5X-Bf8mI6huRX)FxNQ0=5G?0Jbm#=87}FFZovFL zN>Q>(Sw^=cIuSd^vuuQ9()A2Q_PCJ{;MFlr<}tD1ry9FIdlAe`$bJy!Gl;K`@-uVB zK-HF5g@u&E4CJ-?{%#r1ZV}z3x#BWSSGG#;o9e0_g1-UWhsKQIn;cY}7I&~q+jfj3 zg0`+i+6A8Pe&-`cUiw+)v<7efjJ~svbLf65=6A04#m4)q3WTy)oQefa-1ElfJuqO+=n@I{O%S8#kvh}&kLA^t?V^cog+Vd8cCDo0Ucal25#5f}HxItZQ zb|vbzBjDZ<<(HvS&rt8_)AvY?=SbtLc7HFw++A0rz0KD+-#RK^f6g8FJ9nEi4Z2`k zB9Xph8~;|VK7tx6GvgCEIZ+p0W_OZO`EOKvy>q9wdfuS$8hsj{f8rh_0P>m24{KlI z*UV#F>aD9)MmtexQH`H3sj7Ul+1<^(o#FCaV94HT3h_96#ulKEGJBVb8bpho^GEVz zKlMy|?%723+eBC)S@zQE9ypPqgTE-}poa>}7V*7Iyq3)`9az*kh0fGr9Y-o0g=^FO z_{d>E>u#x0ft{2^swQ#1*0|=RKA9yw(dzNoTej)Wha&R*OK;3FjLO&3k~CLgZs7$l zUX>^(RF=lfU9^0WK*i+|rXa)}ZxQJ=$@p!`E0*I1kfWY;N9GWMD;c7)s=G)NS_ZToP}na@neuN(s;Zh>G&zQ%q@8r)C!&O^s_X zbIGJmxclWHA8mK>?3wq-YA{ChZuw&_CE4Xm*3zdY>IHv&2r|S+1(cI=@5I`V#$;E} zixky^=sec@;!ZDp)0F2L8)Rd+@1?u2nn06S#c<;pdeTsRVHb?Pb*`5{yYPdiE@L!S zlZ|x?=ZB`5{_Zs)Z9Nw?-DCil@Ar|bHwWvJEY-X^N!>~~E2f(4kz?Qn>K2|&fnPxD znFJpfb^NFiN6EEmZzk`6lM$}i4`2*X|B+CNG9h^G^7tCxkY}{jpIV+4vy75;f{mbu zz-AYZle4}un5&fbD_jH9m&9^2wh2_om+fxUZh)ZD9x$e$@@GqM9asITh(Fp|N4%tU ztefK#+;@IMBg|aCqo%B?D4_@Z9Gr?P{$Wj^D2%OHj6|Vcx6JJ2uL7x zZ5ruM#<#=e!wOgO0$H=HqjTQhHqv@ zR0}3_92GWuxpzknt-s!1&S#jvxo#?b-JN0g%KzS*_FTMGs{oY>hg21N1i4cre;mvU zkDn~zp6I%eDeXj4(_R7#AFRr3YCcoFuMp$VN_{z0vE12y^C5it=yUusb#+Kc%!RB0 z)?7~ZDyh`ZL|Bq_pHo+>&F&|Gl-E)>9?E?1V{Kk`B<_ z?Cp*F$N#1zcDtLWUa%2f4E}jyFW=PB+t~^+<9LBsf+%59Yl6a)JZIPVR}}E2`kl~f zPaodu_XA+r0y2CkU>Ix@JNF8T_|n7tPzeI@oo`Au-L9Fbs(0vGiU9%&NO3;H_$xe~ zFQI4{0F8B4aXv#3HToD@phItB?>E|Wc!OU^qev?KhjiYzXjenF9p8;YnzNj1ZAUF0 zmXmkGlSG4iiM-wX*N;DEeeT)RGUNDJ?7k8j?|U;{!`+xjS|!wIV*>+Qs-oQh)u$8D z_Y2Y%J==#Xfv)B`V9I&vxH-yLT$Up zyz;5am}I*V;#dDDMdN3NB^>{fdNdEiEQU45)}fC5`9GENv9Yb%Q-f?Ssw^^t?pWgw za>rLsB#;c1$X#&y?^XV=S&s=r5g77ckiNj4xB)FzEr47|f^R56Fs?LD%`xogL>vCc zy*3w2S)Y!Uq2kXq5s#N3>F59ULlF*tZk8k$F&+%vGwu^$_%btE0-ZU%26IrO!KOA{ z-$Qn3DE8MY(`IfNT66uGsOw_~GG?s|8gqsutvALixt}`J5@WLJ8bAoI>jiP84`U;X zX{4%Re?(0)N1?D&sskd<(UvuM6LaX=8g6eZL+RY92x)$}IRYIRVo_zN164P6hu>}r z))T>PSmUxqQ_lH8))=xTC$8m5Wn5q4qTF21_Gr;$pWz^>$s;c_)4_p+glzWAyka?& z!8-Qfvrl2XSdT*36_P#r%YFQWHFmnV9#ua=ZAI1uB70cQaxc{)7*QY#Ps=SRl&?2O zKAsAS7V%5hx*DVq9m&Wp-xgbxJk=Bq`KjL`AA*4&DVf(UM#etoQ$IiWCE~9a3O<+Ut(Yq3*3PsurYF5)< z)phL_7LgoRr**jIEQ>Q+Er~I$Tq&w=9@aN;JfUG0a+R|2(;WVr^>DG;l7`3PHpsXA zP1ubq$6=JzuqKItR1!{61k+hjm7;rM-&yaxWVm4>TV?U z2;}<{vuq@^*Y6`Ta&pqL`hR2OFV5qf8qs$T@jmY9%BdM58AnnRqZet(a(`=!!m<3& zWIjWn=Ck9`9g1>+{TYecriIUlmJ(UBQ*dmjHDOWR{IGaW;WRSMB&TzIq0M zUg62daBMv^l+|lEFg-Jf(~ktF3`PzYosIP*+8I5ZmBN%r+Mh1+{_8l92BiX9#MSXG zS$CN{fb=q;T5mMEvl>nIPKkM@d?QVn{e(|G1LP)4w(gfnog)*U_PKCuumlZC6kggG z&41{(z|j*x2HaxWva0Hk&mhr&YBs}THbc59m}uerdzz*=93A&_2r+e{&H$CZ?Q&a3 z`pW5+;O=6t^TMn=hLZK^IW9;$A|yEP>doA;?|15%YwEUiy;kda55v6I8Fg;m7ab6d zt6PiYDAmVxj%TKw#6548p^F)1u;{CZBEId{q2pBUgL)fb)QFE84)8;z(F9MHCLiJn zQt$HBU zl6#6onmcsjhL!A*zzu8)KPt|@+~%1Z({AlUR>P!A`vWyp_E-~u`A3rVhz`tlx~0vl zh7GxhAip(}t^cKQv0Ey?f^y;L0TJ5>`ic5IL7*5SvW>xeg{0GVe$VE|j?-1YxWERnt7yNA~q^jpz&HPZku7=PM#NgUC` z*c_>Z$0d|&+6$kOtEc5L=LUvTII?!OYl{@ zEgV14+aL;i7`RE&Rzd=nR1@Q@x+vK-vEOzdGP1KrP2H2sS9lhpdT9hK_DGlF{i`LF z2UGfcbJs+axhyv0nCHT$;Wb}IHIMZ?@HTqBxjhZYL%HMP& zMnj$!3RT=G%Xi=16UWzC9evv~I4TyFwzk}meg$*3>wg7g!dnj(j@ZM|(j+=?kmvC% zO12L~w)V6q@Tg-yS-{Wa#2MU@EO3SJmiIXlrFOEJs|U3svxPQvMKQ|TBDe#oU4EX znd&~}ksh0O31MVRqe4MzlmoNqb2VBL1j;sj?9400ssl++*^_AV#AL(EcE--fF*PO` zWozN2KMek53_A$kR@?l;dirNtLy5*qW-3>xKJk~~oB;OZd}ar;a|=XN%XLS*%Fcni zWfJ^kklXZXpAFO0D-&t&6tpfLYWOrpnjN*>ifuMpQq+%QhqA&K8papU1IZ$1)NC5m zc5T3=77vmWJV%gr(@$*a%Vzw(te1v;%d}o~qaVI>GB)%07Ie zlOKEfvph`q=N=FRydwio_T-%oESl9Wn%)MkRlG_3^1>iif`NNbKv$X0OCVQ<D_g)T~xng1e|5%9Q+t9!*y9VRtB)lY!2ov7Kn^r3()(_ zYb*D`7>3;w(rLa^X4O<5;~fn72g1Ix<*%^@f0<;o-;9PKlV^d^+DQCK zQ`umi$o~;@FX(F&iu=!Ma-shdw`S?ER{I#4F(Hxxsb{M7Ca36l_Zfz$woT#b5U}DT za!R1Q!7UPhetc0ZVF#1T5up(Uu8p{%P$rrlQguzfH&xjXW#R32tfq2M?+z1LmCVd_#44je~C9i@}=OgZ1Z*YI}#|GQv>k$o< z!a=J<#NHIQF<>;lsufkp;KjILC9fn850s%Yf5l9Bk1nm`+=W&C^nyde65e`DZo7G2 zxKTT8QJZZ}U5QBmK}>ne=lm3PcB07- z<@%^;qn4g;zH3QvltVr~==_skwKkT!>sh)m-62a%5JY1H@G8@Oua!e6eZ5cM-112S z5`)kXc+h0(eKb^drI+^SF9%}zlLR6GwZ*cdM*w`g1zm@m_m`If|&MMQN%#KV5?o$;ExZ>{Ssr8=vD03)Z}76 z>`ZSx#{f;Z^zaRJvUm$q!E8{U%BbTJ&&Ip8B{xlkKM=u)P$H-H)5scY>FwQTl+L+l z{w$?fQ2Uu61TM7h$Lop+%Xp1W?#&0cep6VIBy$I_f_=RyA@O)hsZ2B!nS$lwum|j{ zBhkJjIjabo672aR{Mo1oh@mNEf?Q(NKjxjhAmY2*D7C#O?2Ci;G-OeR?<5Q!FrhZL z6KF6-3o|i$tImEA990e%Cqk2IeIX&|e3s+y8^kVD^Ge*kCy@!rD<%~AKfYr>MD+`j z^VcMo^&zxzDmr_^X4>{%on6a>6qB2xUskTxhA0dgHlVPA#k`$*Dj3+Fz5YPlxby9f zwd3^L8Fl2+ZnqfVL}gLb%vy?S!&?DI#z0(v3JiS<41EGrbH>4IG8&R-Ew|KjjB> z8qwA?W>~(|$IDVJ4C^IbkvLCNRK-b(wcy#QeZlsXijwJg{*>(Vpz5SQCp9}pvceyx zs;@0}lhjo^eJB|pmH`*b!vpFDd+l=gBe^frh=pI8pXP;pDE?8p92CvUiOfJs>wW87 z=0K)BH=}DwK2hL>09AwFiSXv^n5I(F=DfXBni?UxZzrN8(~fWOPM6p1vF?NtAFhRL6U?SN3_-fd&sg_@t5&0+2{??)Ncz90!3-t5}l zD4P;5X>>)HFfj4!IY$kYS+I@EVf$ZN+&?eXr*pKow2$i(olLN$-6sEqWF6j?63E=! z8HOL#+d|V}?kn}gE2n-cH%l5Y?|kCYGlo6d!lFu|UMPnd=u}UnhKy`xF=p*vt(RJK zKvMfwk28H%&j*}ZF?a@a@2KdYx8LQ6zGqG6gN(=BmwG-^#|h>!84@qWPWJyixD)$> z{B;f~shOZ`4?9c`^@S5@5(j;Bx&|IHi%JN^}ND{fH%M1&~(Wbt4^x3+T_~o zU80frRTjYt`SYY$<&Jtq2%3%~31v+<5>cU}a02|)%_aT={`=FXuP8X=HL0WDbet~J zhcAWCt`KA5DMDm2ZU?1$=n#J{=-fs->pTam0~5sBW9!z^WE%S=*mq;K*>*j%x<)u_WJ+KmuoVN4Z~Lqjyr)6EI_UOp!uQEPdXzMP`gi#Q0ENub2q zG_U+@fIVBo!&Pyh%cd2hxAi2TN4N8n7<~$#SIi$lUq3=L{QmtQm#*ZTYecMP&3rGF zg&B!x;j^GBAC-f7km4Ywa2JSAw}J^B-L^VawUkPVeWsb&6-bamAPm9825BG|uuR7# zwov8=wYIhhRefEto7*q7BvsXBRHncWtZe6OktIz*GFOYVwk)3RDWO$T`C6Sjv~e%r zn7bn2)ZYyF_SWjlhMghF-?a5{iUEaUok0`J zGGCZN$^;@Q1sC!j4#4=S&WO2qd|Ib~xwtpxpUEc#bt%$X#Sw|rJVtP5v17AartCM{A;W(o0*$Sefg1tVQXAt* zWTbg@{JkNbd@cE9KC^C|h4Z^~u-Q}5tn#i|nvtahVS#(Ae6B?=dL@mSUC}dYdLL(3Ja|=!cQF6P&2V=Xt4Z=e5kyr5M>? zJHNx7NF5S3_+cWUpikG)e?sv?fcFO+-&$>?qQzvh_>#%=t*KHR*+kZ|<$R;hwNb}% z|0k6sHTaDh;Q{zJm(WieIxoy&Liu4hu&CargPzBE`@OdxJ0VdNo29OO?5H;!VV@OY z04j$s=a0oz3g9kGQ^cb^-@?r?28dORbaCk`4_J116C>m!`s741hsoEat>kKverd#v zHRn(^el;CWCz}Ftm-XpH=pH3pMYqQNyrU=%UIw+k`2dYod1l&`yK1uaJ13X|A)xyC zA76(hU8MiV)mcTw!7S|>3ob!}yF+k-g~2trJ0!Tf2M8YA-CYNF*Whl!-5mzEGuium zvi}R_3TDx(x~rdh-|B7|Sk`3lO`M2yqu_YZ*l)ER=??_;i4$_gcyPqYaCq_hl7}oh zA*gMgw80)eNyodIZ{4Wed~p#=4ibZOOc@E3A$;$7I*J}y6+ktskRctp(_jLPxk`hO zz!To-g{1zxZ1GIR{{@2cjA8e|rz7%(KpdljQ;7Po97=Lv2eD!Uv0`-j_+yNf5rw5@ zm@LPB6WdJ+bFs7%XGh|@x2JpixIu=_mY*-jR{-~8nV0&{hec*<%PXMBH<4TNN z^H)t@n$HDdfb-s6!a%V+vw6D=-=et%21HjL&`kC#F6YHj*yy zLL=YfcMrpF+bnjMlT`dt$2xZaqJ2U&J>18ccFIoHh(lYV51n@6kP)}1CfVQC&~RTA z@o7}~JYsSQTTv%uLUW58P^hRt#`-Pql2bnj7s9a?LuIDRLnqfr3lS`}eRnD?{zis` z*Av~rKc$=>$(y-hUt02ujDLo@Q7qNO3}(dY*J@h^-nzb2cKNG?(R?K zIY8A5XP@Z6fK#EPF)^kf>$lHc{@(}TN-QM{h1oJhQ4{#WQ=7Bg-)aLUvkhrtvYwvD z2p8FsC7~xbQz<7eSd+U~#%XA?Ntr#lb=yb3IB=E~^xJR4U z`r29ZBw(m0Pb@X`MRg^=fJwOY|B`Tit}__D3Q)(lp-geP$uZ+Ob$rhvzsfjJvqOvE zrDoL4a@GKh0_WVyfS0J5HCHx(bA1p4hC#b|OPiT(m*f)} z$KoNcQcvW-`2K@Wdyu5;Pth`=v(IFb>+L>t%FT(Ea8~^Tdbd~UZ&F8FvV-XXQLsJP zRl>PERQE@wIcPs18bp#k=D*Ddo}KFqWdEq;NqW$EiphAuBJ1(c`^I34o`-FgCCWL8 zl40N;TkUvjcO#!jTsvLCE(;f``2>7u>ono`C;=>Y@msteMs{K>WX~vTqPNZJ6vuau zr2%Y4Pkf9#H!4UF9x|RQ_81Ub3LRc*6>Xe zn_t1qe}ZFW%2%d=XPYw=Pg(Q$!vda>?qUHC%aTflfdGCXu_OEc*eWzw1>lo+F{DZG zJEBrbG|u`gxJm=zs;so`42?Jm3bE_8Lp&whJ%yKoloZY`boPPV@vs+mL zqu?_4V7gR7PV?o%{~Sfrg2?~^t;i8 z12~5hIa3Ywa~3&!q&XaKbW|IvIE0#bL&$;$EPR1Qv+G#7AS!s(-!e~0H(=Ru0v*FLK?vNVNuG6IfOGMEP0>}GEG$OOY{cU^DmoRy(CI88{r8shm@k5 zecYQy3@d#`4tn~j6hiWE|FND}tigLUD$KC&>_d|yWy9e+<93L2!6Asgc|z?D;9NHhV99EvS-6gVlTiroQvtLf8XfjGzK z9kCzpWb^A=NIBd1UFSo(a-+Wi#){|)IGFd>KUi5M*2Dwb0vW9G>uNCout6o8%!wMC zA@|=f2e+Fl0A%*&CYb1J{tbvxPFFMJf{;j>UCs2HGbQlo#Cu;+9p2k1CAchtlb*6d z!p5lPQ`6(X$iX3DHQ2N%f0_S$Th1MpXpt8;k+lFN*ZU2BCV5DP*0aXX>wCZ%v`|_#`gm?P@mIalTQ_qr2ox!{BK| z!^HH(ZF+G?PG>7s-To*B*DP7ex3lDj{X4Spn?H{5YnP>F^QTP{ljl**(X9k8FTHwkGG6o<=!5m1zk*{T2hn~RJQOldkpsmH8BcI8)A*zHC*3zDM=^k3 zqh6Igf^994txLd{LhE=`To?w5bkANnledBE`_NWm8Ilr&>XWeR#ZK>d0s#IrX^JWW zbatLOY`-`p7nO}6cdz{8vwT7O$u1dj54F(KCsQ-nKx`)Q@01;dhw!6dhbxXIM)bEB zk}Y{iOv>R_{d&y>d&Z&8cpap^Zw#7Z?&q!-!aWuYE=xJoy0N8c4n#OAJhlh;TAy2F zu$OpqfE$zg{4(>9w43xzF0HqgrW9Ye@;sz+zOyDELR zQg98sw#NN_a0$Nt>Mrll&!G{4%%MF288RK~O}x{G5r50vu1 z5psjncjHVTTFTIiui1O(!4m$VxAmcXTi--Wz?a(p@mU^QU!#P)mh$~x-Ph>F= z0d5SUa<>j)CXYMYx$#O6VAAtJuH~7m`CZX7P2rYJ)XXv3aKY+sfggSgrsJlRQZUm3 z5C81<%5R6*g)f~+tyZfr3az!VMQ3fkEvvhIsf@f0Hq(;#bn-oPtAp3_6>dG^DovYO92OV z^{eiFW0YgJ1a&2ZKF|~0D)rcx1{@VCaI*^h!Yc@Gc%lSc`jT^!={bVj1R|f%fSDYY^-S6JXsPHlvE3 zYPbJyancSPpj+J$mXc}V7TmzfIFgw0z8#@)BgZdX zWUj84xxi^tGl$I?Hmfr*`*NKArlkq+m|x4J`q6_^`D~?if3vQaZUww~w-Nx_M+MyZ z^-)8b!cg=;k#Ta+#UzRbO;6NRQ4TiT+A(3!BuF|aVFTnWR(UPV$llwx@MPoQQ zh0>BsM#D(SAk$3-#H2FE$=O+$9UPdM!NcI=A5Qp%h566izF5f}`Cxv`IOaP6kRZe+mWwE%Xixe3pR;d#|eETz(iyb~N?$4|NJ`k!>hfS}!? z#-eH8qt8*4N6JB_5t&Cqr7Z0Rr4h@WoJY({6bzZ1_pSfvM#v^53u1{U4~0kX>FbLk;lB|O zcx@Pza8c8;Nh8;&PQsoQC4SSM&7&O3NNTd&`3+w#E)yk>U56v>3IENXoEBo)ieO)0gt zRTH+_))l0p#-H(HHg5P1eEryvPW8jgg|pLI#sY~*2mr(yh=%XcxqyrEG@WpcCFCy$LeU*MLe%wi|}ZK|I&W(|O3W+oX$oYcA!+vUD^5$OR|4Yy^^2^X-;g zV7Lq~RKED0-2Lr-qW9;g;}vP(3VvP1?R>@n)dqzIeRVm+-V~VmGzk#EzJIfdUyc_W z51(B{z31n*r8jCm@6H$dR^F&c1ca1Q4y;MF&4mZYsCK2jXCt*OL6i1n(Ruc1eb?JH zQtBgxzj^_vj?-akPT6-0Ur+OiuVcxZfn$>VHt1l7`uh=?jrWN+vd;o=nipKo*SxOp zRb7|Z*UjT{%RM1x-+BtX9Lb zM36W8z>(Au$(c`Y{?nc7bepQ zpF3Pjmyh!Y`yH0&#bs-1cy?PhEVT{0h;Jo0Xeb9=T=PlfpZJ?f3Tk5k zfw8rF=Vva{MGpq(QR^=35^MP3M9{X0Awf2{_hH&n;!Yey95ZB#7R^eC!0pczF_A&0 z8Ky1Pvv zrq9oc?nM{Qy$(Nx5eY=a;sWbo&w=>k{?~vpBFneQyaa!2^t~4o1okt{?oc1C!Pbd% z`FtLJ!{QenqqoLJZf=AKG%l3G`C9Pr*?8xIo%e-;)Ye*5|IhhqW99Rx2%s*CAn)XMzh!s+@?TiFz z9YAQLIAZ*;Yoo-Fyl}U65vA`b_pN!O0FOYc>lBMu0Fm_tT9ku zP>FnI>Z07NI6hknvZZfMFkg=(=Sx1t`$Ii(^vXmr8Hj-kEp+pPASO83&sdrEcd5c2 z#o%KEKFxcPEsw4vh=j|x#<9eO6zC{WLDAQ(Bjb=R8Ft4yPuV4?B{06C6bdH}XE*1A zVm{ubo(TZBQ1_F0ZJy^ngB8&h3rUGa7`3kflDhNS{H4%x>Qbe8crIj)Yx;QN5HaCK z;u7X^nzn=;6Sx5vP#L5w+%DkP!==XKoNJCVMknqDX5|<5cU}su(wn4CD=;hHR~y2@ z>ElUpoJ31Ocvut8V1G#gS-3J&4ETI(r|bxGb$`bKA5WF+zOZDI^%Pu*YP#&DY#y^b zNU7=66&&=gsi~R0g&ZmcCZ>f!=wJ;69SYK##3`j^Jl~~kQ}_OzWQ_aA{EMZwf;SVB z_2lTYt9gKVVoC}%D=YjQ49|#u*L|p7OC8;yWI5)7O4le(Pz7YxP5cE;9tEmEimAyfE&Z*` zc-7;9;4b0nH?Yyp=-PmgE5)L%!0?^W-9X6vO;Os4qtA8fTK^0zd`fBfg?9|KmRgm- zHDMzVTl0zRI-@=fl<8UCVAUKk#b)XH>SB?^Le0-3{w+@XFv)Yl+qBH-R1`z+aN8n7 zCEWOSo4@vjsRbZzbKNxV-9r_Z&3b`Nm2%b06=nabTLyN(;Y{C%P~c>v4=0+qmZe5g zFJ~~>ij2!Tr@{_Et zkc{3Fa&X{nttkAw_FrA9nzo$wkyX9=pMH`85m6lx%$k`78R_#w%`&c#Mfg-m7wq49 z(*v_B!}fEst`!}Xv-IJvHF686ovbQ=?=J(E+5kqzI7+8;TzmuSA9m+dUelf<(vR^p zO-FppgJ0gv4I5(tbIWCJS8-hSPTJU#d7y26yJMZ^g`S5Y z6+5*eN*(jOQ_d|4ugakhGJ!9LXEjm;~pv6iG-(BuV9P(G9M^>h(p(k8NtxmTPrkgLz+tkW6nm zP?NCQzqf8vUWUNImR-GKanMUB#HfcaPAsL@n(hOv$)vNmPDAIzttl}*C)CjP$Jp%` z&b$m7z(aM=JVm#I6!}f-!h2kxoAr@L^PL7Sw^_2CfLjyYiCYH%gWcBM~a zblx(ouS~w*5{_>ycf~P=t%_7uM`D`j_`n=x*4=29+TD6%T2vy|1D~fasbsuK8{Q{W zgKvR4;yNw?+DXp^17D9^v-p!t0iH;k7K19QX7GMLf~>y4?8XW9_E3rMwS2=Um1KKU zAHj7!p0@$kxZb3Ez8R9Aj+K7QuVmo$rj(+b(&KjB%@b{?4^#cuVTnVcjCv2{=1gxX zQWmiLS55iV&Gm@jJ}iAF#ql;k;C5rXAa(QBtUn_vDvbZG|D7yQ;zc!9^ysbv+5~eA z(u3|WPWKSn0KGii;f3UtenJl<*SO~Mq?R@0sGlh@7Ku15q~{xD;10vbBpIMOT_m9J zA?{T!Tk%KVFRI9{cQVgnOyDPnyT+pUe@uG1=(-=vf2e-c$9Z3oVAQCE34{J~Rwn%! z!wi13JRj{xl%EhQ;PxUfJhi$~`?&385GK**(4&VFN-04e3JFCZ){UOEkd{BrhBxJ= zzJ-JSpM*7C#{1>jtQkFIt9tIrfZK4|jilkT zfPCbVv{C={3bsF(UOS}m;5RF_^0B@HjY`R}ln>b?tqj$-X?80{r~=e&ThFwIPVdqI zhK}brytZc&^=Yl7*Kq$nL7D(AuOcpbFDDpSCiFJT6bKnaxPj)Ip4Di09Ge*6)X0f-v@jjL3ZSYX;%zEuE>l&i;65OCr zv2lFh(lc0E-~yR((tVvT&dG9wqcycF~tti;MgfE3d!a^i;V&s1c{eWOp&o@&2G*5FUQV^Fs=J zQpTgi4;DJSDO!P>XMNE{P3KiD)73kZn%xcra3`Q2@agPCG|B?qS#JsebUfCybBnwc{&RAm{V<h*soN+%z`h)7Ezven+N{B(S6j zAfan|FD*+M6}twXSe^w`?AH@ZC?sD2P9&PR9a_TpjbFjUCZN%?u^uVMEm*XV_sC!# z5pUyMWnzlswqMd3+)WA!42z%?f7B|(qsBJnbliVjM=!VHKf|v8Ufz#oeOphB>C>XL zmNNfda-%x^uU!g!R*T>RUW>o=?S z{5GXiX3MttZ3Q4s5{U3y5+>CKgEnGP%aBFEuXdWKIDz%>&bK8KL?r~_nq*x%3BGK0l+e7;s>|=%cy7q z)uz*Q8JUs3^%ydKBeGy~&&K)h4Wbk)w)zCwc7qBfAjMC*wbLN$rpTbX1mGzs%Y!q7 zt2bU+??>6>JqyCdMfc`N@MaKzr&t9e<-X@4W};)jul0%bg`}-=M;r>2^{5J~cb1#X zuzAX0!x<008o`VwFtwbn^ZySLp6nI_Q|0+!_`L0>AZoV@+&c{^1xQ-h)m};HUN)yY z#pU3n^7E*=8*jU(T&Sg-;NL^->#*^|6POb* z+kFwQOBOby!JvfQAup6v8eH4)DPnUZR!SyQ zI!meBsHUzoZE(je=~g%N6QOidg6r9z4x&QBjO_Cq{VhvdEB(c*QDmEp&iHEJr_}Ec zjj-<_%5ee#rG&KZbJF-#=3(4~o^vGJ$3=JZ^}`p1@FNq?h(nEjW&@T2=3n0n=8Yr( zgzNmcm=*ssYyW(FyZgNxPEyTB+r^cijdYdhS!}*xyAY_EwVbY3wKp%xe;Q`delsaF zej3Is6>f{t&+%|&9v9Lhx4p)+4w{t6sryBsv^|DajnH4?aqCL5*=PIOP@!Deo#fHv zwON4tT=D_9`pF)jz()eIK-wrSE^m4u@5adXAumPde4#_+>!e<0U|bPKW<#$~QCqLE zE7L&L7ZhNV{c2A6p?24A2n7VU(W?{ETJUu2p>5P3*$M(c0G3+5q+d;-*>C9!XfE(V z`=s^^BUOC6Clb(ml8T6sg0Qp0O)_+!Qu6T2`fG{8lW7^}ZWIO0Pp6h7Aa}|A2o)Z` zSo-jeFRVGQ<3h<~ob%3UZlLZ_Q3y*Luq0Wix1d@d9l>4j+p7$CL&xjJ+vbJvpd)_;kSq*{i2r z41DzzO|bsGlJ0Ta&4om>;imAfhBSo|B?nVGHJIL+96&K?+b)lV6le&JdSC&I1HL7)6IVj7CW$rw;%v#f=iu|~ zLZ-E?)7U@T^;dKd>E!(L@x?2nB2T(1fY&tQpu?F#<>Vr# zW&UA1RQ}@kogCGx$A>u_rBB@&sVhIl%rUaYT0UOgCSeLKs%wq(kgBjF4Xi?gC*tU9 zQZUbE+D*OKwHeCsn+?;%x*Or)CdOGfsa=_|a6IkobA>zd_omYY2bDW)feiK<5WgGI z%^AbQ%NG0R=k;-e&o&!D02|uVagdZq95e&jQJ$jAEl$>dw-)ds{XIhs?_Ii&jt^&k zGjFA)WoX=ecx$pr`@K$9Dr)p;m%qDruj9zlh*OtM!*T9;Q~eyEvo9W=OwdD%Y^96p zwPa6I$+b*dj7lHe2|HZ(lQ4c#9Z(}vKY8g!q$uwg4wW6V(FK~!z- z{-M`J$6FBQ?}(l9T2(Aatd5MO-1xOZm7QZ$cYjORfACzJ_#+g`hggc zdGhuZ^RI#S5q}aY;{ukVv>{W1%uySm2Jl_N7t806i%p7N4S zHHlCBvY`C%a+75Q%J@{86BVT}!F?!1axg>^`sZ@R##T?6qc1CYE4sWe$=pVhSi_YK zS+^zcn5?rurWVE5HtqVAxjmH}?hGJ-L+QiAJv0;g#)Nx6xihs>e8vE)94R;1xXF98 zs(#k`h@sbZDmmSYuZrOHjC*f~Yxst!-M=Qh@Jxv<@Yjd~%<40QA&d6n)hxVH2fE}e zkOiE7}}j_R5~6 zO6OrBwvgJo1=qR|jD9`@UjpH2+fXie>AygW_xxDNw2{z?O2hxY3#h=-RfQlnlMlC| zCjYG_S~p)c+yPEP7S>i@XwhkGxW;X@^2jD^ZwM7m!~19sxs5Of6YY?9fO5qPI7&;Jyv%%R~mgz*W$5vC)ZXJG=}oFk98sNR=J#`CX*S{Y*U zOnaWKrq#|F#+<{tl)W)v*>7^6Ug3|K_l1iw%xM(g+^l}Kfn{V|14F)JepQVg2TBFi z^o8nOub?~f>osm(s3ARO&AJ>CJw^;Wm9Fc^)T-w0Za z12)JU{bV?rxF))HaVQU;@aLWq?Ggl>EU_z2q%Rv|E}XH()gY(SXnEzwRGRwwj92AK z>S|V*5)FdK`;l%LOW`bwFy6*kNkjCL0E+$2Un>M^iW415xOdfC<;=A=XscLkdX~J< zfh2*t6`+{6NQ6HC_+JWq>4gEVsT9nm^$3o9UDOwZbWzIV#d06v&*!YNuEpYWFmO5) z86of1Xvx72<`O#)$Yai2S(yt_u4*%p$1gL>7U$rd_d}wCqR7rmO`kTy!s)Jn8t}Tj zOMjVhcK#SkglcyzhU9kM$WEKzowoUP5vSvp@vtd`a9mFOD)Up4F#7BUEqIs&4$0pB znZ3c9SCh^hEtQm9;u`kz>XKH7zT=A4H;1YtJ6aCdbCWdckttTfx~bb8;DpW;M@-bfR-gH)AAxvWKh^#$!W3LV%|xahFINvu-V< zqoc2NK|YD@4wpx9=!agIIq0a_O~G5?^`Xnt_7b!{!0hU>kviC}uvHZ%;exF(JDvw8 zXq5DeF`8p7W2-NGBl4Z8Ib6cr1;WkJL!#({U*j3P0)Ah|s{j!H3gkDg)a8H_BRGa>E^>(~I0-@=iWshe`ZYwaUwP+K=hnSP^# z7^kBFqp*@TXCj{(xRxqrm`$(U@Zm8ThIb=-W^HeJj={`Hf3fM+U>@|*$f^}GLCuCb zl+>WEczOV~ty%P48w- zJipZzZer_exFa8TaAs8tMNsRn-FyUV8Z#+ZW1f#q>))YC5bXvxP8l|e3@tLhsIT{x zPgqx20zY8CCX=&BJxs@!ystvn7$ZSNrhd(x_6kVj3$leQXFEO1@>n=_EF@>ds%X8Ff%(k3A`NWJ91gQ^ZhHdZjw2?0L3esW4Rdr-=b(eph z^B+>$lBjjx3NB*FR8WB?K5vc^L4sl+OO=21{zqq+U#5$W*2)s6?UJKa5mbi9n`_;7 zei~KzzPZX^s2sJtG->WiXX`K`mPE7uFy^afBjem`>DN=qiEQo^fB@avsX>_jv(Uh8 zhWpvt$TXvkr`BL>xEQ|_L06MyDhyr1zAa~3kG{=m z;=ro9jNfS}9*y;X`beR2a&{D>!XPBfZgrA>kk9#o-SHd$y0L= zy!V7C{)ltO9Rg!*hy|RyC8VWvw0B;O@Xpu+QEi}to^;Ez5ZY~jw1E1cr%wCs!7MfJ zm0{#%={dsjpcdtPSnInt%3Jmte~!ZGadfVY;u8iioqPo|WNt7ez7{JVp}~W>I{Ssg zhkhMji-YX}Qo#~2c6%%U2M-u1#fmW_li%j7_nuF*SQ?bmp&KfUKQKmv4xHL<_hX(Tywq5@2y9Y*hj^oYB2X zV1Ax&Z88*`RaV>{W8Jpu&6-pgAF%Q7E*8`sRt!v}kx(N;@%eM@a#Q^r`~hhOjC>x? z>OQ8Km$n2gN1FNZT$;{9#zSLKgt&tR;n@U_xMqwef_g=8)>L!EPi0GYy0>wX%EsfWZ7(}2SKFv-R-}QII*06`Ck)@#bJp&P{vN&PvCJ%+4CH-#hNUTF5ZSg~@~G)8@_PIFcBw8vP;MI2(-eih|52{(?xfC+F0U*>{x@!rOQ@#x z;J#GTj^o9Cvrq{^gC}G}2+@zVyvACiUbeY|j@T94ul<_(WYu&qOP0GP5Z*H1xj7p2 zypX$k$o#ddchp|%oRgAYR>3q8QFNq5m339UHCkD96Qvl6#|46{C4AJ_l_q)k9OC6q z;H`#-8~ggV%#vI1Ds!RypeQ$QVTLU6l?IEqaEO5!bXm^|INlk15I5O$gVj5jW7z+Q zPq;dZ?Vm2i2^zAHgq||d4;GHFsDtL!O6m2FYAD$rdgyFveVM%0FS86%phh=(Sp2dD z?Q?X z8H{zMiSfkrk=^?*_JyBvz$CgLm?KH!lQ+>XWN|Qvf?PezI5`^)HJ}vuzSCdHa<}wo zvN`MV7cT)CIDbPoOGm@pHo3@KrV&3v1V1AYp zsc8P!4P0%ZEt%mmN^zY7J1aaSVv)|~f{e|xF9kr+HU&km*KwkR zVQ~MkmeGHh&DQ>#nP zLyV~3>_;o_tY7`}J4b(PaAm=o*Dg>3bu02+81AwSBo9YR8_lCHd8*7zR_puLxL7ZR zzZYohlw5a|zuMYmK+o^W^C_;XI0LQJZ>OUuxR6>{J#IF))m1uv%E6SRpA!7)Qhyd}**RNibn5Ay_;!I+~Kgv29B9xJyt!yT`rrJ|$Q3 zht(4+cv^wprO(})puqThUw!|LEiHRXqUk$A1fmeDpfOJ5x_MS+C|Kny&D6{S+Tuh? zST@~RI$|)dJ+iVt6APtlJT8 z(t34hN|t+34z}~q#%&WwSt*5ydbRDM)2F$s*!U_>iOD;>Yx)!D`KmIOY#@^R)lvi&T+0J@gG@XumSsn@;RUlP!Sh=%GQxx|lp*RQtknxKjoPJ)={<_gi z7EGYm3M3ZMwd-qJNcQZt1|$CGSATZ5E7L5h3?+(L8#_pVWE6M|0|xN zUu54uAH3WP=3+cL39V(XbV#O{kau_pkh%Jj*G^LN3I|pFT2=?My#T6V zU9Pm$PyPX5*gvYnZ(VA$o5I;wx6e5&b-$z`Vk`~}zdfkh3|DIpJk3}9eBi4^0rGV4 zkJij2^=()7_sCTrR1)5AF_=3k<#}q^(V3Ix(Iu2Qu8+*u1dp1dNVHXjs>uo^eo;E_{U3%mqAM@Aq{9L6D851vQnEU?DNl=AdZGi>m(P zXw9PjbV!8mFkMSdluKvY?nZv~&Cyqb999>z&cX}yGZ*fc^#zBOq|6daq9QZ9r`<3& z#~0t7UxXHA@hkg);nx>;^f*<{+j(y8Crd=8zvk`FRU@#Cc&>0++i4^yt_U`rS|pN| zbA3aI=1ZUfPcE-lt!nf9NCWI`bi!|%UxI?ToSn^SY~3yWG8R}$|3gHqfesw~$%P64 zv#Z04Stp0J%Cj?W(DMRy@x_uRovHmue-hQY`$?DJrvg74OWr)40#QN-eg|%bqw4F! zy;r9-^9`HoR0{@n%vKbW%zMr+Mc+q4#V1M9{@Ydc2g*Y6Yt-EyLQ`4~nMCnaPY=7uHwd7sGsuG@sa zOSYz8*7~s28btb^IWOlzY6P@|4pA_BNsTq{Wt#mVKWJvqQG(+Kl!&%D?75v$aMX=` z?XwSaqJ*h9m-ZFR)Ug!LWYAYx*|GJj_7V^3wi{>XVn2eh>^Z$72RI>n%D7vFO?BS< z0oy|~E@@I?b_|H9%=c{aW}rm0tO_Rk?s4+q37>=quJRI3oJiCEN)?bLK%$dLwn$RM zKc~5@^sd5-ObtWTE`c z2w=mhtO7B5XarwXgDL{^`fO1BcR-7yNY?YPV>kP&wTN~egN-*xaQ`+i>DNF*Pz#wh z;IcvCcOJej%(t;NznTE?;OzGbddHNzjxDITa<@S3DI$Ijy#@0B;QvxWNZ;`kQ;|m9 z3J(Fb!7e9n!C>Q7bC^`+t)P$3V8X|h^9c3BJcWCB@mj*W{&mOss0FUJtwK0~;Zt>; zo_oQce-_bu;XEys!|fnID&uh3_#XrLFLwg0*MPEaRkv&d?4{Q}lS5x5L6=qkfrY;& zE7%S;#e64_5U1(tc4w5Yph01PkJ|rpc^H}FlXd&zsp*@M?f|RT#KIpAV{j$byuZ;O z!;`Z`a}g10w$!2>4G<>~tZQC?6co-`;&dmFHbZ6{q3w?(#MP_ub}zS|(!{Fxdd=6p0x&xi*BR5b znAaRQ?%u}S$L|dWFZN)}tz=d{N~QfM3QP$=$C~d?fBjY*@Q&nV0Io zGk(C+CwpihsRIjdv{1CP>W_cp0XW^Jn)_`O@j7XIHM?VRWUJp$G%JU}g`^E=L&OUN zE*BOC@9F!fpG;os**0Muxh{CIwQqK2vZfLv%iWw^xtgluiu@okv%LxgBSHkG{UBcH z%Iy$h@pGMFV*yU3F7dVNtol2a3*kyV9#h3X3>beEp66h|S!z#6D|tWxz^dUwbEFLg0`arw4RrD6=^ur#U`R6cfX~ zIwZ&UB3YdL7>dt}V_dWQ2sWR<@YM~xPGW1BGa2Zjhv4R({XmSs+H97d+G+ZaqFvXM zm2$bgR&Y){BUk9J_3k%9Afm{W1QqC#@3dAN_QQ(1rF?s>ody5x%c7zD%X9vB>a(oU zp`>F1E37@2h%*TM3gSmn#Mo?#Xy#x5_3N$DUN$?IF;ly-^DHOQWxW09uUYE`X$VanJ+Q1U z17!v_Pi1}1gii>tU{O%-{~;r@Nzrcku?Y_hBDp_qxI#v1`YC4(d%W%uw;gx0(diZ4 z&3O5R8OoiP;rIm-L)3iASB65`YzQ$yOI$lUa>QNBt3YnVga9QKdB^JSO*M zj{Q{6TrmIn7>}U`>ibxq9o*k4jFwR=oOL@0D_@9|Y~o1>pB%ho^$)q^wW=Q)ZUnKT z;s+`LcugXzK;65}6Frv)vE8R(OnWzQs8j+LO4fL$>Td$FmADFETWL@UI9?6!O#ffi zK|`$lX*jHruov2gJ!&=^3Q++e&fl!&0B7{y1SqU>T2qiBUN$t9`JcL5l+(SpHEy+L z^!rJ1cQw`VQ|obt<|f^)teUQa<`x*BYaHn2a!P?2bwQ_ybN+lMc`1lp#f4ao=ecl! zvf7MX4%3a9pX48GqvmxpuAlV1*j_doCnTfLU|UoRQoF?SV39*lQ>GzLl;C?2&=JgHd!M?a5{F>{orGnaQ816^+&H-W$PrOLSe&QEn~V4`2j86B8> z@;)%+MPx@%*<1J#f=$YQ+H}VjwgAS4C4yFHez3K6{Z74a-O~gtAmy;pz<-bI`DqE7 z#UXSn@?|{GxVf06o=uZVe~G*4Hhj#i zReOB6&BGKd1 ztsnY%cC#Jdd2?7CQ0J3{2WT6`ppkq`%|Y2ST!|fa$4CEBP*U7}g3X345oSGO8dC~aKZ(98Dft%nXR6aXV zTqJolQnh7!+3J=~gouiE_?h;UeQ=J)Gt?4gTwLMyl_i44`iHa*U36*9&ylKsh74}9 zX|}&jp!_60)la?=Pck6UY*SjooGxx?kf*?%Z-0mF8l=$FIM}8S+?(X7oNrVc+8FOg za(n6UABt?L3~5Xxcnk-R`d>-7n(ricOCm?nW8M13q@Y`x!Ksl?W`#c;MI7-Gyx11g z9mn`%JWSQxg4U06-$o1mA5~WwR@K&ZK@db*lny}w>FyE^ib#iaNh95PNa+UY@_6X( z?(RcKcY}1-0lw{hulL?>|KShM!6b%1oW#vX@0mSmACD^1ZW1+ zX0Ywy^b0)aIR_*xYh5&l7rgq51%oXs#q}mDEBD+P_BT$)lQ2$``NYiLw3=qBdYG+1P`oE-{!2Sm~dUXqzZ4E z$p0gf3^v#sc?9KM3&~HyH~-S5#m=T4l$I5%ja|V&BVf*8tn66yF;21AL>JuBwJ5Xy z^Oxn4@}jB@2(a5j%1e-;>asT}IZ1ack=%_3@g_MHcK44IHD~iIiBvHYH1KXrLpCm~ z4s^WBcaq~Ehi$t6v)h;BG4C*`I(_01rVmt=eBztEhQqpl$iA;QxA|xqUtM2$&d+s`au zbMHStlH*MiI+Z@efl6AQ9o1pLO1Tm(7xsXb#4@Z(^aS^1^!2g1wuhV`syr0kb z19!lTXA0hF@`RK!!pr31^v^v3C4!6hp_^+IP$Hl!coV7zg5^iMEy*0Ii;I)czIYRI zb;4;|RLe)Bn>wfnwvPcHnN3MYC&s_vpa9ssFXjSwCd|RuO~m2bihV~|ZkQf?;jxPA zngDms<^u*kIfdym4=(d2Nv*dWopn>vDqqFI0zN9+QE+d2O{;dRJ4`7=_^90FHl*ER zmcvVg=d3RQL{U@TiF{s3$Vs*Z` zb9-}`?9po^fh@Wg-`_wYr!gB#(iUl*V#s8k-_#Zj@*9VhA5HOaoKIU~mfUnk3iqsu zz)6$D5o(%J^7Gz&!Srttgyqc2GLL+=Y28}dEEh;n0>Zn}XW_}Xd>62UCa;-gh$FtT z9Q9>}>pvNW@)w6fmmDDBn_G+IfAVHQ%pXr_g0it<7EHV9=~r4WgdFs?1qY~t_iihC z(r;j~QWNfiHbWa+w`2?oZ`uRIX%5das^^;{g;lbvU z5s|cEjuu`Yi?O0+1pz@>249L#=`~82U`~99Y!~jSuF(NzjlyB`$w4f|N_FTh;ezp6 z6Adv*>`VC{omay1gL41I7}RG#Py}miTXjDK-#i7G7b4?~u45e9OjZtgz;HnZQrwK8 z{%*fg)K^A-D`uS5S8-et-^yR9ME-btJ?w?~1)-)YWno>ak52jHTIYQKqmk*#F1rre zI}thc9FMKC2seV++7)OQVD*sAuJ*5|%$e__2XNijY&}rkLDg5&crXJFt32}Pw_E^) z&%JiqehJu-!muk!=9{!4tn$-bz-=`$n#%U8JQ?~IEyX47 zMZgIPaW833{Q2GIHW}f{$&{kTx~WHOj}L2j@j8M29}FN(j92AWpbXzzSep+2(Vd_? zvj3^d+n*(~C&%k%e;)W}jhKOmff(XXXbPB{1koM;je zWID}?UM!M5egm5}1I6}O9zN0257e7IJ}kZRNilWN?Ngr@G@%4kvsjOQ?~`V+tR_tc zz;VH9`vJt&NHbr=cPfExGx!NM*))0R<@yL4e5<8+JUh}8*{+*T@NKE9h3V^bwBf&n z!?a0T1-{oLQE9C5Inq3pTn4dbBTBNg;v0Nh-P*2isAdWv4q^c+Xy-2~NEY)22fZ5E z>VZ8c2BK23>*HA=IFZU5q>tK*D~0VjKtHo~THL~5x9wVTxOz7;Ixh0yaKj_QOD!P0 z9_jk&<7^QPp|4`jkM&z`>aV7BpRi&tb+|+H>cqOyof+X|)L4R!cnL+#MF;A<>3cTb zMmgGj%L5DF?2>2sM2nWW>(3zHNpD<$`*$t?@}RgS9K`HWb#PAp&_*P9UIAlE_aU>_JN z9hFY)hJj%K*F-)g1qvc*cmFOrB{7th^WAOzl0>zu5l}nLKf$7iWK}p#3H++k!Z>Y zX6A$=@=0$9xn8g%cmnc1?Zeud$HifWsmsKAioy*{XAtlgZwp$DtoaKctZ}Eb2ZC^G z-leSx2b_#^F@To*rbc_4?QSk(PsyxGJ$;MIK5Eyy^6ip+K<@t;yio59z7S4GAv)@K*CIV(cQZNsxU!%G`Z_4O4 zXAv4W=DR>EdJ=~80AqK=tZ=y@*sHLprWtY!aJx(d+UXv*qew{Cwl4~+9Zm$6UqeO; zY&DL~{I6^-ieD1V3mndkn3A$9GpGTgS4iqz1?tt+3oi?oiOck)VWv}psM%ScIr5=7 zRYr|ZKx@`Rsp~1o)5y&fde9-U?Y^z?Yf;q>pC`lX#i6i}KfD%XY0l51_K^}2iQ|Qq z_n#Pd!EXzAng~*l=vouxbGc>ObS-ra0gSezC6r>e70KkLQKHS{%8 z{R@3M7p)SC7EN99-&N4HMldJ`f`*-TA7ivS0Y$otV8Q+L8(oiuxywX?Dn(q=VagV5 zPfcLXm+}qtYSz*pVUP<-?Fge%ddPdhU$hgUt_Cx<{`mj+hkS^z?8~B$3li z{?LfOYZLNrpyAb0Yr+)ot7NfA(&3P%ca{^&i^`(g0m6^xM|z4Hktou}pE5Q+sCp!V zH?XHDdTzV~W6$JqobMA!ZgTCm$3v!jirVuq!Hkc{LXhNKQ&{H9QUT!vFdyDkw7g#( zV$D+AH`kv6FnLf*>i=uEWR#DUgrnq5&&V5fmjJ=q`^h>$NwHz-LUyCBOo1tn^x?=b z&c@{+Il?nXV;?^v4S@=3=L$DlYICYOLn*e$6myL}JfTc}VW*g-ZjEfAY&Sg@DLy zQL`KJ`T(GO3f>>mo_5L!OVJ$kqyFVPw?28`XG6xXD z7fh07@Mf?5lm~qZS#?fbVDs`~w6(?52pV#-2c`OBy6}U^^*5@lxFH)c8P{_;d$5Ob z1IIvVKbDJMDJ->A!sT@w+0GU+3BHPmPlt*XpRKZFf4ScYz;kE6U}H072&8sx1b0;~ zsPjru)cp>!@NUlDrTIavT++)`yT(ZCygr2@g8^edN}(!}AmWQGd^d-8qhWVf$7HvH zqt<9q@qNurZV@s2lSi_y+5cL=emfb<2Z%(l+-eBmZ^C@LiMdADwDE4HEoI#%O_m0j z8*eugUzjq6*@d7upJ}IhoZf>z&fuDdxJxt(&_3Zg3tmnC$$iZKGx0qESJpvt544C! zz-3sD!t~*4Rb-Nkz3KL+w8;c@0xi%qF#sxo<_AoWf>}s(lXFZ6PSwRv+6nqVVWP$m zQr0pM4Ts!x_mA6>o~QW48VU&*DlD~Md8Wvut$zL>ZokS?S*+T0<8uA9pz86pfovE) z3MRFmuy-seGwW!ZuQR1IK*En=P<5FlL>_rQYN!Ex9`!#x7x3wlBdGcP{DSkArdfC# zBH8$czzG*Vq`3X4ZL2wtS;JG}XK8AH3gZT&RnyT)=VlLfsU6)5h3B?&%rnG;h~HJA z;l|oN?k@T75jrpp=X;Pe19KvJww7$1*Q4xpm)#~Ps?>XZG6s48k$aNm!h8VA9sGUeG)rq)&ZyI&1=s>)IX%SOg zDaqx2n-YD8cDX%sXiE4a=Ad02rTACb0b)#oK?}S_|+v3X#)7@ zLBL*62xqTY1sJo)<$W$D|CIao8huowfhF7FG7je{UZ4XXtL zWv+(I#wVb(+408z1@->j(CN7e1=q0~KMjAOz3+_g*f6?IUfn!7H?GdOVZnC(J##^f z#jB_}w+ zKl$zbURjQpry?5}c4s5LVu&{i%6A;w0>B+Rw_oSR>Bl`EA4imn25w(Sj%_)`p#|?g za5rvF$2-NRHGf+tQAkz9y>z#F#9dTyHoEaK?@=6BdPdyXNUd=tK^$B1XVciLCB8rt zPg|-TWM!mu1QcP??$42f4*&33KtbUg2QW{*GW^Xqt2ZkPvj#&%R1h- zFRr6?yJ}P=!Qu_j+1boKEhZ$LnJ02|Xj9&Be`p&vKg$(6=RAL=W&0iPB;J|OLhXIo zr2$e$=+wD$&3VLBRnTPVh2~bcV9P3=VXRXoKTqc*vCxxis}W=L^cEbZ^109_Y^JEG zcH3+F4BY!o$){en0uowq{SI@irumK#dwh-)Sz0T1PG?#90uY7#Mv`zG*#Dpd&uyn; zsz6>Y?KT8jYrbRD=y~`#jMh=6fR_TrlT=Yzm-e5A))m5vicb?o@v~sx^jyEyh)?}{tu-R*}!3fzH=@DNUFm=!nb*?Bu z4l+*-`l087nLUVbZPsHcd0wPFx^E5xFF#tw3T>%4TwOQ6B>%GYe#mBM9tTzV(Mgm0 zDvowg%iuxbjRN7<(QhN`-?N!CdVW4iD69{T^tdkqTH4FJq(soB$KL>CYWjFqid|@mQL54ob;;%J15f@TLHobz!dPm|Dk}xV4CjA zw!lN{{QycCiFX>pLRMeWVp|>ro^^o~xE6Y-IXVaKl*(oZ3252v7p8*P^%odBR#r6J~JSFHm z@y!*PO^p0@Jb-ts^B3M}5IrIS#*liIFikMzg{dm+7&UICe)rJ*$**d+3hX7Z19Agc z@r$s*-}&bT+Lv@zy=PKt0nYMgQwcC`>A9IObK$|`A2ydfY)QJsQsYeWuHEoI8%UFY zop`*qV7n+t+`)F##l`<##y{-y^mQ-gaTzs9{JGO0sin)pRsvb9_5-#FZ8xg#IHm4^ zstJTOkd#yk@C|-=Gx7Jp!`!o-rp>iimv{VT+@D6 zV|Br4&>j`VZw5jsbZK5k{bgdv2+GR!VG5jZm zN^=7fp7MEDX7|zG739@A-tw%+5!_6BzT()Jz8w3DGzYZy--L?@&&3tCoUGC6{mx>m zoj%+Lp8+e-V?rA>|de&*pM^I_fkfkx|4>@P*J?lrkrRl_*l3;I)^ z=T2Cu-)NS80+wDU5tcmDPrZ5uIPH{DRa8BlCz=2$)drAKC!a6k0Eco4(0{xx4}NQ; z?H~EYd!m0N2jLA+gpIGyYSK5qd3jbIe0tCAJnA*8DrtoUNfWfniuCcJ@K;aYc?E!R zcV8b$UEzN=vGOM%4Jg?YZj)Pb@7j!iWGG|{PyfN-yskNInN^mQv7n{qaM_>u;thA@ z4#pXn`mC6?d4OFK-)K7 z4_x?`+9-j;uKw2pDx=%Yiv1~t$zIgfBEo(a{fJMwfH=+O@guwX*Qx+(ai5H{-N+8f zuFl3nj|>o zYV9a3sJ7$!85Fz4S9rQvcbMaMg9~|g2P|$oo}VNMTH!#wjkkL6=q3fzWn69uLp{M9 z;}LTzmrnt)fzX+$DXa{U2dJBX!4i@4F)2Hf+rfX1Wl)o3MMv~y+1k?q0G%{}WB}#D ztpcgy;T#en2i~92gEAOD6a5R-c$5jK_2b!LOJlY=y~RXm+R)`xQWR~-)@zsoIK_cr zvg8kpI#Wvv*U{1S1a8+CP`gX;ns4;a3%wH6EMN|i9*vqLM8;BvwliH7Gcsj#Pi9o7 zSVvL`Qwji|Tp15rj;U8ua@>u^zrCk`5&G)mSN%nFFh=7?3LbGYCubU#Ck*lxB{Yqm%LIV<2iXz78K_bK3+j$oQ8Efn~fR_qS>-@NOR2z3hi(+fAI!+Ad=1B9ph z@?UtL-~q1W5if;3D66T2QYWQ^bldk5CfC=4a4mBGQkM3YA%*PBdrzo7;sj9Rl%FqZYY)sEY(?7V7l8OB zKjmh}9=U20j5w$s)Q1i8@REy2Y)8PC zRwXoWh%$^A_s`?Xl$bX$_fs`s`lpwSIjdm+a8Gyk-X|7WdxhH{$16%DEydQyqAZiz z(HuwO6sqLzldapQWD7X8aXuRXVb-NT&X)UELHvQ)b6}xQ( zzjPdzFHh@!O-Hibh~dS*K0`zWMa(41AZM;5bY*h5w7weuqF(uco_b!vkbACGhJSF? zehj~exqB1Qt*p6dWNZ3y>-uZO36c1p$MBX*X&Ohh#oL=b4vrjL#?u6g-G6CVkRQvZ@Q zZeV7<@lDGXE)1Dg*AZN^)}^V5gh0YKe^!R~KBI9*M%HX_pM9s)1vIR&hlAXN!&A?d z*6Y+}q0E(7DODgMdu(GWQ{d4LFxUomgL7S5dkxJU)u{}yr8_q(!8OM2sRrea*93u^ zoXJVyBc0g~T#vGc<1T`xD2_35blioyi}tmGL4g!$p7^lEI)N-(DZmQ867`Bk4s22r z)X2}sW($>i^6u~Gxy!qjd-TnlQ(1Y9LU}Coe6mslsIiK-;u|iAQ?=ZBLYgnMyLT6t zDXiU;j$%(E=Av|$%1zy#7#wv=TFH@+-5{fISOvT9{q#P=7+SdRZI&XpkG!AKZ1|%6 z=0v-gZ|5xfQ;UmsY=(2P%y}?;T0d}nB&ThTV8(NT;>K`nB!@kR#y8Zi-!oWEVq>z|ki?NYu9%j}akG`e$9G+iqK zyL){Y8nLN@j>F>On;%I$3|Kbq7cNaSig{|2B#_!M zcfgzsI->dosRBt+W?p3yzW}0dH-}Dw#;&nXi~++>cBjmUwEGv8HNUyoqfDqo6u}(%4Y4-;iO#Fz(dnh%a5h zksVq#(~hFxKTqDRcXEHAubHgsR&gv}^^*z=$k_cwg+&@P{t%Il&5bP@$!xMwrLQUW zJb}BF+E{-!l`Jw|HjoE=B^mLsQuPyDERMy)%$H{3d1Fk|gG5isWoTe?Fq;PJF+Nw z>akIdVwPU7w3xE5JS4I)+hYEgj2IBqkCA@ikC*DWyYbV$xX`OHqaZ?PJfevg z_Ie^REp_fGl1(o;A_jPG~kGk*dp&p zb-&C4;uO3*6}lQtqUES-cBDTmbE#ct)T25{Cj1j66%|PmWFiH84LuyUdPmkuf-uYE zIo?f>jm30&x`ui`0d_Yjo2bxMfB){~3T*~|eEVCedh*xy!=#Le_`3f&tQPv& zL?R03dGIrcUF&Km){IYLZO^j%1p07)ml@5$v=Qrp>zcea2_d*R^o0Z?5%AMIJ-lPD za$u&n6`|B6MR*4PH3xXr72hkLOtad5b@j4QO>nJ8)yaLRO=T+AWpAt|!Rld5A=V#r zs44R_NZO9Cq3v0v*w5MRyU@K_9r91Lyp;xYNYvS=Y$%aJksfv_Vi~^=+}@Fh$=Nmj zYV9)`z^^N1udy?38rK9IzXa(}qXZ-s`$<^w_jLOW$OEr;Lju`H+uWqgG1TvhM}+#p z->&~IGeJSUVa889v)vd!x7HA1&zFOYaaJD(w8}7Zag?=%sl%CB4K;k*eY_mKOoXhP zS1#`^^070@JooB~n=?;n>KOgQtjnM%70Yqp#&C6uz2z|PeH0PPo_I*zc*gYU_Cv5- z{a&|KPeIfEc+(QE%j(pFL#Zz5mtU?kc-KhFFhAa@ULZ`D>@7T&lH%jBj~UMuh zc=;~yc*KkJt?lcS;)KdtQzS^ow?{M(r-VLxSRZF+-lT?_8PL1d|AT_&fEsuS>SP%sN+>#m`?u z(zp3^mNhD`^Ul~__b7;;G$dtJnfP8?15*LFLe5+1@TnOSw&q2MqNt&*t!evm7Uj4_ zskDe{azn_T^MN(rFU^{%W?%o52e^xh&I5i3lt`L?i?Qe|n9}C?%|DU$P7dP8Chpt? z(X>6sTp?$RmSnc&piET4Of?PW=fBm=c-}XaP3I((-d~x3+Owy3}rNm)rxoX z7I;ciKHaQ(KgzAhn#kU{(1&-5z^8E&3JTQma2`O+aLcWm^tV{IS&NAb6Fwj3aoe!1 z2|u%&jH_t zr*Lr=^*Bq5TW=@Q!^Od9yS!D+FT86aj9~!Ye<|bgm#DG>Ql~95jVYVBGQB-N{zjl& z-No#pHnt~ZGb)>Nw$lheMTEaAKr9R%RV1 zM2Ypx4tjkhNpC-kFKzd$YN~ARR%N151;Aob*aCrVabR&zaYu3m6pl}lnf8Ccy}0-n z9;G9tS(ld$sK8jYspt68Nev!C{8a`ex1>~d?a={Du(a!%m)ov(M^29LdTq#^AQYOU zP5FUEu7Ys>6aJi08Cm$P8Ulu<1;f`mU=!9?T^k~?(j5mj?wYKL3tb`bdT!>s);ds! zoHHyGI#QrDOkD0mO&<7NBB6pRZTj^KKdvWeNLBu{jy;j4WX~!_?8f{si%5)|> z0e_AULu5QWyxl>Fpf^*Ohr9IIpKdjJDj>->L+pHj5oHU)QvnmrvDH8>P2C_1a4E?g z(hS%<5Zfurd4M?DTjRtD0o_UE%BL0&?e(pNcgD~p-oi&W-b44-mYk2Ok$m%_x@{M7 zcQO5-QiocjOJy#N7yjw{t0&L|j0m`#b4`^|4m;yw6rIK@)fJ|>3~hOZ?NOre8f|nN zG*mbO6+@V$REaWBLdhih9cp7`mm{>iXQJnxj%BfhVMCJQ$+&ah>X__@=u9dT?$t6NDqN| zgciAW%Z3MFI?U#M-eyipRZ4GJnuX8QXfMX5sOGyus#??yOZZoypz8$wdM3&3SY>(_ zJRJY{Qb^H`xD)p-4w1cKPEMt9;#t;}Xc{{R`yaZ?3EMl{IzTUIUFwb70V3 zDh5`>%+2l}%v-%c(+0aveRwo-b_jRBsPJ%#74K>7vE|paQU=zmQuWToczW5 z_6!cY4DxcA?CXf#opl3pxAKi4YwfG}-nSzYxlN&ajpg2Lt9rd7{d3!TEqNIlVvpWS zKEjTiO!vMMz8^7G9VoFh>4Ib!UL`sG$n8{a;IiZ81k&3Yd3MdTSvU)re(PiQ3;dSd zcL2zK`ioCBy>1_KzV=L!DlIWjJrJ|a%vTqAbqdQX{K54yk^k~=}z$Cn?Fa3Zg*y`r;=SHsLPg=YrhB<}g31@>y1XkgO8_YgUQ zPoRu--bzE$gEQB)V>#PZ>W6p0NwxN>rEvDxdGge6XvYnOW8&$5J2%evO)q#Jo<<}3 z#Rj7v3LdV+C$#7db%gFsP+V`{z<)*PNX--oa#;61)tC?`yL0X7U`5?}zR! zV&dL@1(FWK<}&(0^0A{ixz->TZTdjxEJpk@$&GNNb=Gxa@*6_Z7(U~;3oDe~k$H9F zmPny~g{8)(;`4*+o3{DWb3Zz)jofOxf$ZJDL13f_cc$6&Uz(vg*)L;*5hezgl?rQv zR<%TV-H!Ea%6SdhJMZHz)ShKJ0vHJWe>gpgLEU0epTNra+ESl&4SyFjZ=S6^Tzy6m zh;^&$T(bv6=jhMb0{=ycclj{a;I}GYECLvn@D*EMekH>(BB}F=o+^(jGozFZ&}sk_ zYcJ2(DIxn^lIvqW6V~Ro*2u<0!)qIRk= z*>0)J8`8r(6FFvzFBPSN`$;V0$$wD6*at3D5tLI`Ae%5VrJ3G0@0#rt2^&3hI$F~$ zoyIu%^Eacq zHEK6lB1!H#CT`^k`&j~qjfh`-L~(x~Idl7!)?Amx?rM~X_Vmos zeKpekt+(W6YF5dU53>`&|DZWe*`c<`E>AXB_60~@1E<3>!NG0`eDB_iFZZax%j59v zXV9q?P9}$wRx1g2;u8y9ze^#DGMRwVE}UrLXzMwGaO^a|E z@WOic%R-TzY86nXmPMK0@}+v=%r7x2MbuCj3O%B&dkgG7quvCn3csNcZuMJ&Bj9!5 z#t{iDuS7W{hRqma%rLCRNF}pcKEE+E)r{Jz+$}Mh^3%?R5Y_e)-W7hEuH|Mm5 zxGRd9<~3Skj5o>JXqiiDmb1=#p{Jas^=RvUDw&{?7tLhTEJ@?kN@DH+4sRSiVhNg8o2U7y$&!=0b20RyTF#(= zU)}bK&+iq?$*H^SFv&r!k$R0}6-{ayI-njsgUcoFF}g$p8xm{W;C8t@uNT$Cc-lsmzpijYZ!q;Ipm1uk6bcHt{F4=@p^pK4ayeY z+9O>O##TD-a_zuh+Vl;DK6NL(u-N%&UVP}pt}qmeDLC5mf`Z@N#p06$&sBuv6o+95 z4uQh_igfep+%n;e+opZyGI)pv3#8_pCs_L-+Y8=_!OC zqr`m)J=LwlsCH&{$@*^XPRnsmJ*i*^SF@~I@52C^oQD^7{GZjbKH#JaJeYSyTuO`eRk%IKf zEFj(NRfGpX$Rel%>!-^qv3`yk$jJ8igUMrc_R2v&p0uOqJr743zpHXn{U`n zLg>m9Ct5v-32zV{qna?fdWr1se*>6ePP-9;LyjJ=!=AKrtzlvNp7fOo+Eg~)vTP`Y zhe27Vi?;wN-a9r?RisNGiZ>^u(gmf#M|Ea9L>R&ovZQf&sSE+6SWM#2%P=v(805_A z`XM{Q7*UX_xszhpA}o-lDZ6;YWFvBM@H{7@ef>ryhR+1QHya}N71)3owKa`TA%7of zi(z~QPmlfwtk1+)br9-%?4zdju}Op^)&Q%+T7@e6Dt`dT`JQ^l=+NL6lx2ao?)yEYm? zP{n>DhA0&cpi0yBD5;L5?ou_aay4mUnz-@ZDGbY|_>LA&2J46Mz+H_~fO7V3csP)M z3K~*|#cAE}i4o5w%ZfW;#V4xm{Na=b^M_DGfbUG-BDaVLntd|#?)4v0W-+lhLhooT z<~+hx@gtJFc;OU_WyiB_G3N^(K@(}r+r^X+X_~lj7+<&?@}oJtzHtwYB}u-C$vI?- z>S#v^EM0iUWk((zWbs})I!H2RsSQINpPm2edEC>Np>2@56<|6+3QH;#MY^xFsQpSPivi6#~adM zy((cl7^2RleWtl9>6d8-e+8J_MVWFqzE|fJVIQrQ&AWN=X#o3>JTQ zk9)yE_y;Z7n^lGW8R^b~UbP2I-`)%5@2}EpGb0fTM1J_ESY-;QU z>>9{RY1o`#EO+A_wo7f6cXN^!lE+zjNaM8IOp3TU=|c5|iXk)6iiaG+t> zr@aJCx2MJ;D;C*TPH!^D?q6e`z+sT8YD)P}zDUvpBm^(m(joCO3%fLhofYeP_Xl!Y zYtwBc3=NAM%A=T2B~+d@aUpkWLQS`+ko3v>zGQ-se)6eQm+qr{U8dpdSlQjm5n7ah z*29XQ!j0PEI(6(UdN~?QVpT7a{iI0ngXnn9gvjhVuigfKY+ZLF2fIhwU%*mF2(s@R*P2WGC0C}rlrrFA7qPQ{ngO- z+V_1^U7K1c8Rs;))G{Cwmh>GHG#XfX_E{!4o6MQFU@(Vs+g{^tVHCMHmT=L}W%uLV z2UvVlxjEalQ(2$j8HP4C`m*Mo?X>EfWR20H#q=v{^cf{xbi_jhXq* zv`{kkC{GMtb_4xS)Yr8*Cr2tOO@rWI5^e&8KbeXq#q8X8Nwq1Hi?G~Jk1EvCa2rp3 zFUUtH)Eanqky;X3(`!LF{W&`4P%B!cTkkV~Fi;_N8Xg%L7dl;Km1YRkV$^vuO86DP zH=EvB(&FjibKm)R9T05&7{JoRH{XDpPRM2U0~WAdeUz+g!+^C_?Q5O**c07nFk2|+ z{jy~>9EU+aQsCwV(tG|{)x{7YoG`W4jUk$>3TLc!Brx-GjIi@AzEzDe07GWs{z_BU zwVm|#VQJpzmkYVmSsk+qX_cYPS<)~wNuZS-Kbk#9jM^r`#pD-t52Fjp_VQl%}poM9H>1y zd)tUhlHI)xytS^O=fFhVUkf^!X+294mUORqA1F+Yl92c)j-C`0KWR14AmYw)*l;ym zKdE`TtY6H3>~LZ}2dw5>YA{<$brIe_b#g}7B71^l$AbcCq{e@0!kp9W82>`k*Wry@ z{N#1l3iM%PaUSl3_6>IY)z z3k!W8AWVc2koc&tPT!l+63iw6KV{l$IE${IbicT0x+cu8 zx0RCLD^fSemHYxR-$L7CKetvP3*qRq60%oYj;@dNsls!29Rr0ACo867d7AmI`gBQo zG}M-6&FOOXSIc>MU&W93msW`0;ztLt);i#@PnNzQvokxF2Z{oaOt&ObZTh(OT+hZG zi!N^q7KisU1bl)Kb5R7@r-zV(PGgl(xn-Rq-rSS_%Ez}Xyaf6+O$1r$~vR5puYneBx)*QAn3LxxR4(pnm z^!t|EA00I0_rv#H?Rr+8>{<&^I>W_*dgS6VC59DLB{Y6z@v0Z-)pr#;OPHK*1liV0 zfn51AKb66u#WMyt^a=H_IP}O(o+Vd;SkQ5$lWp8^tZ2st)1TE)vCjeTr~jKhinQG) z^FluZOE+6h;1!jMFT}TUskL^U&zD{fA+2rASN&+nvM&FtGJtPD29dgT)>@?JH!`yU zeZQ$~WKnGK@Z@)|Px4Er(*)1*K5ia0o*;BlN{FK!0T3jqP~vdWfU)Vef%EeD7oCCk zSUjn=D6shpl#n&t2`5{=m{xjkvlmkTtcz-{LB{tPHVd92Hv(2fc$s64Fp7b}DrKn< z4sYK^Vc?v&*{Fa{vfyp?fP49V6}EGvM}oPWu;u!-?q2jU?O>zfZ~!8E+(-_|s_J|U zuyb<^XbKoueEJ^=JwAXkv_c2k@22cGiyjiBrAn*bWs5ftO!TA;gkCad3lb?>5+rmj z<0`ejIs4~qMUxFm7cFXyO)8nKDp`Mj=1u0rdKX^~Kyy2?(e;Bsq1_Cp{c|DN?2DXx zKY+NVu)jD;4kX|Ve3z4yH$qE-tNw&xHP}WeB^_*7 ztZG-xStYRN+4~nP2FSvzYerSlW3)-ZNswA9`OW&+Wgo+T*E2@b78$x5Al{9DZ{Akx zSg6XHh$h8J@yLRov?*(V!gH4>vZ2T0HlA5Y!l0mC51m2SWq4${e{u3nP;$&jPg_(t zBj9Mb@7AIZ9mMp*v>=9Cm`io->u%UvYN`tO1%d*C9?8q9o|-0Y9cAOCuU|c-&nnQ6=?_OzVCowV2-&uo z!z>uzJHwL!Bqe9I0I&hpLN~frmL(U}w$pqh0T~DTAqFC`TEq3chDcJJSfVA& zChwfA0x(dl>Cf^!O0q~6&v$Nl*BP9DRxNIyrfFUHoDzZ|NxT<%z~@Uy1p%IeeE{RN zT-l!&CD-*hd<3Hw?j6ytFm1S|3`~a5XQg+gP&IL;$Y`@UM*#g(|82 ze`2kyFE zp0{ZCPV|7oMibbT=ep_$lMz7DoxMo1--V z*Qo+s{_RsaGP_Y0f|lJ1?8?as$i(G7v95E!84~bbZZV8<-1t)ZK+oUijz}1ymNPN! zNxSWJJ|7#QO==lmG~qj0vR*HuxYO3&ZE`uZ((*b{?4EL!&cHP^MbT%xuD^UkRnEl7 zowzIX_dDqwwv1h-eVv+r#l}0SUjvNy_v$4xdYZG7lD#D1xy1K!JW4oNXjvTD+R0{Vi1qk^c2r^A~osImAM5#!l$KC|(1jxL(;9`{SltR0#Ba(f88hl#>ZR$ujDtG|3% z=WsqY($k};xc!Q%gdSV2?N7BB%$M<{K+U0+rFhR}kqjpU_+`ZJ1B%1aExnGtvQGPD zRyEN3eUsB)Go4LKE^;gBUcxT=?3mz~%f3e#YQEe-$-6hoROQ;!oXRsEN5B+zh*Am1 zdg9dFAnsCgd_rTO~Y?tj8B&A&L2}+=xxLJ@$#ByFv zTsBch@}!{NRQVIee~uH!3z4{zoaf#OpvK-+5(K|pzumX%KA>tSr(N&6mR|)MGQV{h z+BEL+U#cYo$au0O69Y5T`luM9E!30Sn9*dZY5A*jm8(6=0FerjyEgI~%c`PXPkewY z3?06B&aP#6uY?FrZa@a%~2WgsXb(YBh~;Dfkfwg1(~BmrtFWn)@6bkCYGzaXx0?qX)R)ED5z{{YcJsh$pxTnme8z+UuDjpWAe9OmM z`3z5<&m?&k^YHE@jjKt*(^7yz*oGYRF#ewO`t|<07KS=0I}nDUfc|s%pCnV5lDA5m z0`EX@cw5R^7v|`*r^dnLj%XR+qGOlzYiw5a&Hh7Qpr)~!dH>P45PTU-K|<LJk+ysIiweTU0F6d-G zsl%Z4+|UWKBe^QmRes)DYKlr**Ao|G=+l>W{1;yvLXT)jWTtf9Vu6Vd%+0{%vp#li{A~WV=-PH& zB!(;GyN3H=whq3s%E0*PgKY-)(n8TxB!=NZZh{%kR9ZR=aU z>@l-;y?*G>Hm8{7B=FuQ9pYIBKVN#qy5=3TE`X9`Hf1HO?_P=C>Ts>OWCzNeCFQ# zBgN&k#rYj_?Q4DK?PKTk%)(+>8wr(www57r+GHct>Iekd_p+x!^f zaTve1_lhcvS+TcZ4g=gdOXLKn8|AsMFM%AqO)@e>#B6CDXS~DrMsJeJaP$9GY1XLR zK9Bl~V;BjTE#r&U=4#WwBjjj`>yLy5$|$I#f4l1+m>epSjqa}dkZroJ zNnYQkP%5KygUAf1eCS`@AiV>M2x0ND!_SLONkKVFQwJyabcMY;anrh8X8vS(7@GsxtWI;1A^Zd4W&f%c3r}%hv)&M&;mSw*h z{LMd553^A5w~p4>W*t5@W5`{(<-hd)uw)3@ zC0X4t@sVC!IoQc6{B3GYaPd5oOHxWpO5;;=&Wr zfVSs1&Z|3bFQR(gjo*v@rHx8Obl?i6+5I2N=FK4X{T51QR-W{=b~Ho6WW{*$E%Cv` zxSGHhiv|$PbMH4csv`PtafY~(DY<+wZ`806(%9qn&wqDFcP&q{DVI7*jgwE(jXLC= zoXaKW0Asyq83n&_ciQ1x>}BBfm*gVz=4s1RoBX6h>ye@id9{ikHRrD3Uy#w|8Ak~EtQH&+VHe;&?IA2qH3knZ%8+qH+ z`A#uU+pUV3Ll>gzUm41343)+;jrqEaLctj5lO6?SNu#0M)ma%(ic~Z@bDIA887o42 zQFN?pQ*qzz&$cqR_@cypwL*hQg6B{ybh;up699sjrmWz4=jRe>5rtdsJ^jW^BstH= zRGT$CusX~C3Q8#-)5gq1n^pWiv+iGix%=^s8PHDpEg6J*;_sghHSPABUWs4|OShVg zg~{irt%J9{AaQpci4M89oAa^I^Sl>DNc+tEq*U81SxLbq9e(1*(3-K-_k<~0soI#S+C>TDW^WuSH$I;r&oi4pNvr)=7z$C#Rm}*OXOlDJ<{KY}$RhtOdfkl_1ZNR)?cV)Zh<{xM9BV_H2%62w%VQy2hyJE$HzNz z8NT9Ux_p|>{<^%bZ%29yja}nC8Y^OD-8TFWot1yOpF*Qe?!geJa__Zhc!4e1WTW6E z63j?U%g9y6A}f-s7P+s#2B{Qky{mGRrQHjz2m2tOG;CB^8w+~1^dSXi1 z2F(-XB!Pb4vx-kLQs1t+S#~LmF*>#O1;jq5i~05bDua=&8?}P}cbF!FZSBPe8J@DT zms=l?_1h*ioIO`Za~cDQN+BHtM8auijG8q)mKdy`{40mXS_o}ziytgo8n}iBQj?x$ z^yl?rF=JtRokaRkYx?BdMspo+v#)b|OpOmsCHc_5Zu~*XSJ7I&{XcPNXEb5 z@RpF#?=`N<9*OT;WkwT!0%&eVT_+JRSe?=S!<*&b&1U#2`WiNTJ+x&x{mBK>myIcR zLfbB#Lop~c!f!ROqnnB&rZrzFrWU5K`uLRfUbh>1qqEicKO%o*O72llUv>Hi7-$BH zX!|ILF*jmHoyYo~Y>`z2sh7=w6DJL+42e&y8sTdeVf7rj1BqiF-iF@IXPxDpqc{Hj z^&2bgrgdcQ;-Fo*(!b!sH)pakJc zuh!Z7z$FUGSMw$hAsE7oBOeQ&tXF(W=Mv^)r%OJ=X%zF{6XIM91xWPtC(U)G>MU%} zEu7H9o~OM!`*R8~!5l&uoJmh$X7UYEs-(U7=UkYtKL`K!>prZ#8VV(Y6J^M;xE6N7 zZz`qEayqs5cv{!>{?(*SyV$;~#N?SnvFC+L;@*)_+k^IiY|*`hhV&xz8n3euo1m`& zcQNZVaf)WRin4NE-bK~LuUndF8Ib~B;)cBJ`Ym-%?Ni+U;OTJ*6uIQ9a;T8kCJWK_JV1 zaQ$@YJt8h7s42|8tK6Cev#id^_S(D&Z00Z1M^rLr5FN#s`6pn!_%@56JBBCQ|FY16OK zUIIjI4UzeKJ0(M@|I~Iv8jv9Py1n#y1gRVs!O;oFOd7>7?Rn7?mCl&@UCX+|5^oBs|4-N&G0<&byLxhQTX_pV}Y-Fd;M#LQGSWR%PLAm(R-EdoB9oH4(1KH4@PvBRsVS>SMbhq*%vg&e&*WBt5MV$#lm%n z)~n=f3wva4OCs=?jltIq8iQXR+Q^RNM~HKI^Y!Gj@{2_A7>u*GO_m#EZ~h0f3RQra z_9a#02vWZjBw48)CTE6?gH`y=iR0L{o{LT>xS@s#KERQI?;Z$7ZWu^L+L{F+9E#}j z_@Wym_#1Q@-z?0y#v}IB?3nY>-|LsfBh6UkOV97}OKg9^X4-}*2bL|VySAJ~Q0$RJw zEWz=2i@v3s^6WH{A-@wt2!Wy5ysx75%;j?KF#HORSr75jf6bXxF-xBnByp6h?a zv2`x&-AQtRru`be3v6lK6yx{vg}j)3MD6IC6$lE{@BKQ6_lJ88ANqpo;;Rm?IuLxy zjtv=(7fgw1|K+@_-Z?ZXUfY;OVdh6*7rS#U|uW__o`==@~<-w zy)>8lY9?Byg53BbF0$S!XwHwF*g(=GIB0V3`pu_ECo1M&?^`av-M6gSmK_f5CyEyf zMlqWgahYw$>cw&8a8RCw!C<^M0+{J?CAV=0mgwEq=KkDgnEg+zyZjZcT33)B&lHMu zBBzy?GL%f$?@E8VJrkK(tdegxY`YOR5T^|xd*PZx;#gc1Pje(~JqHnhXE1#c!FyMs zKOuIl_ex|QmqNe0R-O|JY42)`@sce+dS4Jd5NXk`7k_CsWWPVb61_mNYqw^MsfbPM zFSD^}YDD&OsqmM)z__iOv~dA|urH!nTbfZ0T@|_6{N#`FgWJoj2I50_mfC|=X(_cE z%*L+=YOcNKX$q8jLI66o*vf_8R4QA`O+`6cVoX;sGH==k<^;)@5jIvOMPj!A$m$M8 z@Xo(hy{_!)F~xiV<`J~{NWM8onTq^|rAA{Vv1bt*cH#?JjKoT(1^S+ee3Erq|ND@| zO4gPBlDK$wrFgTfn zbeNI7#;O3;SaXhe|90zRt5(;dl@`y%M363bE$R*`RtO^Vgs?x>!xby1^DNN25_m=a z7!2b4jx}b#F9R0i-gn_jqNX3u&;XcT!6I2( zNP$O)4q}D=_uBa2_GPT6Qd)l@N_3Z&U9-(QHm@1`gS6LlDXNN>XV2I{EeR2se{0aL zmBJN|of9lmjvujNOf2j&UfoAlPUKl^=S+MCaA8B<6QnNBF;j~zq{S0B%syMja5V~EqX}0}_2OFuM-r}sS z`sw2A8_5zYly>%rRO_-sbH9^|t<6SJonoG2`{PK@<+^@+S1Jnu<~IeuONbd<+#D&s zGJvx>{#W8se`K+nsb>+FV*YLcYC{QMQYh5R$x4=^jBkm;v6clUkF>$bV$}R#!7n_E zOteRKV)pxsL|R8wKlR&{*)_w-JjIm~)+frpsU9&I7QFa%VkQPXjgQpP3Ogn8YHAV7 zg`QC=vm3S-6<1M+qzO-D&@wj~ueoCTza{$55-Dd{6=trR9ny@KLv*5cN!yN*lkZSTT4znEJ! zDGRh>fB{OzxUEH6Z12veI4Q3X4|m3CTVZ#dl=ICe0l%3s{I*JLn)#L-&Fvm9J$6>) zjR;C?qZ9mO4_3D^9j+ieGjDn1Co7y1jXl$1OgpnC^PO126RSA2xdYWsX?Ry`cXtx( zd1_IoI8O4D@SAo)(%#d9v5Fpcn7!G+HN!wV0=NHkKMF`pkHtPT@U+5yL9ZM;LP_8V zi$gitH5=gzk>S`&#nZi?4j+4<sR-tHWzJ0OTj5aENrrUVsuIiQ|l%=0wY}+Ha zJo{}0xw+qA9&lmE@!eM>4MIpM!B(@#E$J9${>$14GutxpLb3%6hk=)7 ztZCjxNBbrZr%8J{Y2PZcmrb*r6n zE~K4R%wqJB&ouE=i#bP-TEDpAs(>W#gc)Ye7^-_?{A|U|=(~tw_-#LuUrVCDCk>&( zU1;w<#5@RbN%APODLCyrd1-33;f+15h6o%U_Fzn`bI0O}+p#545(4di3eNzzywY;? ztNCBMhXO{TP#a%j&9BjYK|+Pi;hg0ry1kyQWcXLH85dd`4}5ODRm`_}oM&}|nby7u zPR6cGMgBF`m;*?8wL?tm|9Z^MBmf##F#r6z$H@CENkohyW;BLj+nRBGbEPHhpfz`| zEL&{A!|PJnGs|AY+#B?GS%y!`uY>7Z#vI6A=3id)v8Eh;rfPdbVp2$&Lvt1~l?uTq zJyjY?0M@HS)NnPQRhy}bRa+>ledogTC1aHhMVfr)VsynQBbV{B$;XkLrm}C5Y{FGH zcy=B*1Pdwh_w%*h#X$C+4sk{uedjM*nJYnWbjdW=WC#xPi!yjABCL9kF5^VOJZnF` zJ5^CX!nnrL(-XoPLT`wxbfQgN2G@Q*O8XGUsT_hg!`k!t=^2f0couyX;gA>|9yf{& z!%nQ0FT=Z1jXw@w&c2Pcx8(14X&+jcYj0oMd`e0%kpKVR|K~X{8;68;)&0Cg2NQ7l zJuCoU5$;$hPL1*7jFpnDyTj>VEF8O^AyXaKx-&97hg6OkU$`@)1Sw{MOZ&>uN;)NQ zTh%YOE8wG#z@lvM`hj_BhVVk=CF?pjXa`_SC30Sn`@k69kinfXK)WrPAyb`gKFkaW=J*X7d zgj_c`VC134Yl&Iw7By!`VI&V$2`2H!d)?i%{SO-WiR0%N+K{$608C*CK!8{K??uJ6 zUZ!0d7|H#kMfUNwA0<^X0A($a$58W-Su0&>?JBm8fII`oiwFQ(I!Y3bo$FyCS)P~& z99ujlk6WNsdw0&wu$`P4c!P+c}bW7?0A_v7h6e^SncV!Fx=2QHLTj=cwx4S zGo;kRa{q@I0>(>yj8`Tg4zY0?M*jL3jhiO5dlt$9g-oyxyW=MUd*Nsu2mf>Z5x8;! zuz8LnCUd*kL+=2vdIB)m-$x^;*UVl>!suYfnB9~2-*&wV6%u6A^JouH1k=rz!Ww1D z1a)9hX}^eJE{ezOXf+Ctd&p>*5>#-)D?#=6$z-?BMx(^i?Z^9NKa%PeMcmgWlFs>y zfGA&YOnL!Julfluy}wKF-{1=Xc-%R4SclOuP6`o}>)hFZ(F}-Vq*&$sTtbxda)E?x z-2U>*LJ|Lap4wOmYEbus!Gc4Mc@aPcWqqN%b6$0sNZR@@77vB&{WvyZNuU0%yx~zg z`3$L?2~;{O?s(ZNB_xv;<|Pk>A|8Y;?s5@K<&nKA{7b4aUn%AZ8ciK`3yT2K{c)qLY; zI#LhVvB@DjmRa3z_SJ1<_GikU=Rz_mc}cAm@pAxi5cpgPNL&WL6BdseDifdmF%Pr* z?F$!H^P@|mV)|9T+(Nj({IX5aFhdwTofP@_!)}}Wku8kpx_C zb*bbVuuz-6V@{u9y?aRa;S@|V>4=3lZ=BmPvxDjgY>z)yuQeg0E#RP!40{$1UZT9VWH2%LW89nTdWfdSh>-`p*vAf`kwD9nl8?76 z5Bk9Q3xi98_dOv+^&3GJS%8BKe@U(xfCKsRk!n-zIipbl8()z4Edr;;|Dr3whDG+U zXcdWL-;;Vs{h45=Z#c~jn`Jy^4wcc3GueuHYv8-5amKFCBGGg;7$sPT_%Z!V^$+(f zDq7n&SaxeOGsV58IknO~f?);m7AYCj;z1U9yDEX6^lSlsJ* zYOdWU(B|m)rmx-}e3A}(3Rdy)c(stP?HF^o;>vGVW<`ABS_r>-?>3QF@Ue5UydooN z(|{VGEH%vLm|huzZ+<4w{CBCnAtd+I?|Hv1)W>NQj*G`h5xl1FkxO~rTo0$pq5PSr4VABRAGCG!Z6gWR9{+c#?K9{$;Pyr- ze0O>3}V$gh{dl4y_FqFw)xgrQl`$~C;aa*Cnn$RP^;&#i?WNf|H|m<6XI zNcq^{9OEK!ECjGCNGZ1<&rJ=ok5X4;ev-oC|4QPkXie41SBF!cn?6XXUbWC*x|(he zSO;20-{9PAWFb;n+4e3(QKz}w^cY$~Isih%i9`4>x3Hz@Zyw`;C|h> zH>;Or&V22BBoW1q*1K{?Y+?c)4)2=33ga~mU^XaZLoUbSMo5cxQ(^|U$8uCuRJY=^ zBCOS{kaomV0!XQ_X=KHr#P7)l$W0LInZgnDIadhV2c-405}tFj?W+)WX4q5#dZ)R+ zUMmQGjA47dh`6ef1N#mcslL6F)$$hECh|4jc5G7_nfI-!Pf{ag6q*34WU ziMGca=7{FKLvl-eWwf`0gwslb(GC}v8OmBwl_Y)^;OEj9>}4QxNa97kW-0C?yh;xo zdiB634*eX4Bsl!6LgSuZ`2+-OC$Ntt_1O1jxamC-G40Ft#Ki(yk;fPOvHLSJY`dk@ zWZu=1csKyhQ4zRo9VC>3p4do7Ri0z=B8&gRC_zaqEAj#u%?wvf%oFKYUknC-K}<4e0BCflJq(i zSnk8+JV8}Dau3qBw13#%)D*32*9B38sA$1P z_pc&J*3 zd`LZQ%0aY+>u%T6#Y6{GFG-_g*fJ-ehOpPJpkd>>n&N7u~|Hu%SC%E?SpPr6WfocZ`}GE%cqL-h0q4GE^ZH z_xXNJ7sd5N#UeVqLy}vUBH`xhB_U(M7ZG2@0+{d5<#jVhTUrMsuDZxVw;p?v52#fx zAq7s%u2Jr0*~$eZ%CI3TMX?QHp=BzAv0WE&x(<&qDAjD0{mS`;q6l0LBw_z%H^C)D z37^)@EK~H}x(wQLgH)+@v-pjfk^8xQ(;Lh5i^)9m)eS#4Honm>vVY^Mqsj`NFp~{- zV!4~d-1Y#EhpV%r4J|JQca;jN5FfZ=!mgOVnCu|d$D~zng*!L7q%y@Cn?sqMU+ks_ z;D~6`j7oj~YtFZ6APGsVcxP7Y@9F^&2A_5n{0yp+dsuq$69v*kqP4JPZPK-a@0&if zs|HS2bF<%oNOgmWj^jcy>BYTqd^c`-*h^p0HYMN^pIu4_3xnQIkowM4BK4wh!bbA%SU}}9 z-O7UnyEDOQ-yqPLwTb6?X=fic?c>|yyGkxc+HD}uo z7ApBQ&tV=p4q@34<$UF?NR30I&mb;YRJ04my!k+j2vHK4r-DU;FqXX8u1kWxvP6i4 zOZ!27TSFBb{op0di}*0yd!*jE?=+LPv89uxM`q8G{^P#PV?ukBD5Av6XLMbXvpY&3G zyeEA)jA(5=oS~UXsy~A~xQb=2@3uC|jmD)S52RX4rCQqWLd^1OuXp+dJeG141u|xv z&Gt&OhUQScPCHZ4zAyADMX)`{1Wm@*=dXnCp&@-0f%EUK+kSd`5;w6}5SAHOTtsx} zkH+B~kWx8fr{h;&3*H;^$@J+6xX_v9np+}5`cAbo>&qVj(S!5L1%j$&`?ELod>rEw zP0zVdX%tMBbw(t_X83f_>xZSCb~A9G4sM3mR4K=-KTiaraWf~&8N6iP<(7B?))F>B zx&sEd>yQT`X&VzZR1el#Cp|MMf3$p25SZ|@LO+8LtxbLVXdpdy^hC=AKJ!ha?NcZx zgOdMhAku>sdl)eHM`TD8)fS?XP5C1rK6X4r&(g@gZA5V4G-b@(2+W`j5W{00zITY! zyQt!4XV1=#Hi4Qme5xO~8DY|CLL6K^@~EuI?h77y^A;d?d? z)M88BaL*{yrh7X^vt8v}sWC4O?h|4%?X40-1~&o`<$~ehTU5Q z(Ue$q729m|BC~S$1H6hhbw@rv&eW2;YyazGMC7!2+h+D~Q7G;QNEytHfXaeHbd^TG zYQWIf(+wv5>6^3fvUaTLKsNhR(htQ6G1I2`c2Wf^&roURqEnPrhX`oTLZVRWV!Hyq zYO>rVO9;L_2%k|WJPZ8BB*TEo46EoDkQ59g1Y6D~dt5w(@ybBK(_v}3c{IZ$nerd z!M7_x!uhkqdcKMqdmvigVB5U%Xl@8@269EOTwpg&lDDvAnKHa0h;STz4~qf3Qp)OK z@OPC|`u&>mghU)E03*VqfXB^K54B<7DgebibWr`a1?1E+?w+B@zxRq7CME-r`ooH% z$-NySnlFUR=dJ^_J0iN!(ZF@{;B2?5#;U;^_D5$b*|$$qXO++H~XrC$@C{DtT|3pt+oAed#zT zk8$l9Kp|~&71_~UyCCO>Rma`%NOJYKb>FC?(k^_@(BU*F3CclH4eJh_L7Wx(4yQ?0 z9-(?`Qbs^Mge!LDMqDN|B-XGQTbv&r_mmJqRtu+faOq!JILV6`4IlSRrsP%84>Mie z=5uw#EYL^$F(1_}uNQM;CqZSzBB8E*1a2KYx%-rE=QJN|_GBHEeZz40p0dN~`zDa7 z?pf7JqLwxV{*kby;s&9(c>l$$@Mrf;wJfc>a_*~y+N-B8y4uqw6P^YHNSthl($8Jx}X?K z>l14kwc9(Uvt1Pw6}%_CY^?-kDy-!RCAFZDVz_9T*vV=y3wgX9Sd2p>D?f{!Oy1N* zN>z!~HcAM!{)v=XPlvB?yI6Ns5WzA*{G|oFk-fv|2l+I0WT4PO-eL#EX@d$AJA6BR zo;uXn9byK>2Y#6)k+(GksDl!*bo0$m+GQ+Qak9}WOEcpws{1f$jykGt&7e=`=Rgk2 z4T{ygy!x@@+1|MxmTl!4ty-SQS|SF}Bx zr?w$&SFm*fO6N^K|8cDyX&XYgHX3Ve1om}y!}$67&c`FOdDP&*shjWM6d$sRpQ%B zk+`rPma!WNw1)^-%RtBz(&$_=h*0hm30V0|$$KIoabrmd?+XwXyNyK?nDlw*m(S() zOiGy3L?!)!@EUAw;}3i@gOX1s+hjJ62mAYezXKK|P~~E>fsSyror6EI;wA}r?x{+}YfUAO51pqL7}N5V5)mL&mC3t1KF!QOUJZw< zKOueo6U)bS9aeA`>{%FU3P1Jdd*4%17+sRt6H<*-2V{Z{aZ=c_EV+M&6A&VzLg*KslcZIVd%uGt@^aCmHImV!+pTt5`| z0hKnKo6tJGoM?)0FAzIj?Ij_IokL1#GvY)nv%&geHna+6Ax0%dGitI|uuniiz$L_| zkDr~r#0koW;-YZhk-hD+lD;?=)cwyx4;hW6eLcb}1C!0AVsY_Erbmn^tTUgs^(>qm zs9|*H0q>$FW;RB`a8HqX;nT4(n!^`0({H1uy*%YH9L`J+Ba#D!*te7Csaty1k=gS2 z9MU4HR1Q;ht=en_+fHxhmG^1S-5)}JsWHv_Yo-{??qrI1AIk!SasVxTtW(j z{{meRcLnvWY2n)o^H+)aaT8{qkY@(v%ZoX!Hi3y0sHVj1Wmj0z47UP5cI=`u|Uo6bN{asKcNJXu5GNk4% z20v4Wx*ze>bI)ktfECM%N@I#|nAy35^bk?{slT7=gxW3aS?s<`hAc|;IDBd?9$wCg zrOmN&Dl%nh6;o7C@z8g8w#%G37(Y}m*%=Yrlh{>Mbjz$b({%Y`_e!Eraa4 za({JT!*Kwh$*|ng%{*yo9o1@K%}4hypX?U9zTO}`RTPJtLM4!_1g?dbORn!`+q$l0 zY)>KdGMQWtqF1SMFAAqxA zdT+YK4>P#Gvqi!Frzh$O=?#3EAT1tPw5YNIDk0)951z=;_INx6z6lOD#YIJ16y}^1 zk3zncO5dIX1kQS-LnzZ=3{E|K2!VAr<`F2RE++k)<0Z3_TZ5284SiDjLJ0e?Wi=%0aZq0U#SS(Tl)Ie#P>G&DOE+R zXl3XVkjNJm5d8~4i`kT~Zlg@YOuA|OAjTOr)d725B)bN0{bkXVskkLzHJIl?Qc2+`2#pPm+dDGjl{1jO!09*;BixHFw03t`*z8IB6ZZ`{>Uka|X zHgjghhy7Vv_+swsCg9heu+bFs+cf7nT-X|c}lUK>8+fS)H5oJ+%|@)zJP~}L_G#U|6Mw8 zB-&Wr!T-`_TQF1jHAEN|eFdCi4WL13_w_n5ZKYW z4*pLs<6WF(q&8p%+!qnmoNhNKb;!4qa)(~0iF*`@N$2LeweGhEmF>|r&%{{K;ltM& ze)L_Db-cH;}oh&2Z#2vkrWEp`F@GZ4ix ztNGm!@@*Fw=G!=IZa7%A`&I|1eFFFbtVqD-9%kXq2mX0dnA#lzJ<+{`B2YY_<~<^l zvV+KI3$r@|XHKVlWI>*2R$5a?J~V%L;$c+C{^X1eaBc@2Sdi%p*rFZ0XyRjVaiBNbp$^)V zvmv)8r*-)E+<<nL+YSBy%W1Y~OR7$$w;d2bJ8!1_Ko%)X^B&361pzpi9w#o9d)6 zgKnnxg!F~R@(U%e3^=WG!D$UL7n?Xj`oesu$LLkE)d%JWf(AlAp?4obhrsz7$s{aW z9=FjujMb`#G)KBtdkK0`2?_<$h{Y_R_T)!(fXfqt)}*>&#wB91 z3db29tV5W9w%-R20VMzhQon?QhXA@El&|FF>7)t}5P!Ig_ZNgkiypPpg9eYNd5(33-12~J zk(Z49-`k;bsun%X~22j!6l{UfMP?!K-w3Kgd(_dU z%TYqMfx{JwM~;9&kTyMa#-w{P+&72}(vAq?)uUz81cxEi$KJ0B?h{(lN3COnT3?9( zL&dIg#)8{eTL4#r6Ppf_&Lpb8>tvYjVr5#hZ=0v|R2h>9^H}$-KGQlASRa1{uk?p68`Oc{BOQVH zVtvBnKsgLndOWc(DcC(>#(_mV^}A8PuCy&63z9J~RUqAWG}mL`wj6^C1f0h$A+53~ zAGO$9!*~sknUKgbDlw|Xm_+O=(KCD`Y+%e_M_wslXTCZv44In*pC+r&rfj=HV4lg} zbsvH;-$b!JV5(-q0q9EsVI0gJ6y3qv`l%7*vOb_u9o`TATqkhudMaTK!0RRb{PV=x z9jRgmGz7{kkrKK8v&^J1nKf(0u5leXq6=0Z1&F6%vp0_!*Zc--gZ~aE1Vnr?+&_GE z3{F&M97{xkDVi`*pk;_Dt|1Js-9H{dntbM-_!5N1@!%G|79LK(|K2hFAs>RFU$Hna z<0bao3AzOg2NwjNAvhy$V4{HIBA}d`4Wxf7d=Y5pqhmS!f{lGUW+?-x)=L7G)(Tq7 zZGz*3>+<|*A(+OcV_a)Ot)W{U!OQN*17Io&N5fG-SjW?Glf2y%GpfiDpanH)N7F>m z(M;8U9;gu}Oyc-QmJ2DBeE)ew&#@uZY=*)=0TXJGDj*$f>^%uR;z zQf}P1vXPKNqB0(o!njJVVh0E`vmVo2`5`#K*$e_RWPfTOesUET#a<^UNz^e9f6;_X zfDA=JPn$7G&R1&>Uc>m41lDlx$b@S)e#2u4f1B!aTL4K=<4TC?t0h5W94YSoUqyeHrqwb$2zZ z#$Aigr`V5b6hI2T3r80H{4KZzm?@dR0kX*6Wz;>wgCJkM}NT-=_Z)s+NmiDXaBQ~ zS5gRj258Jz1Qr1%zH(LA(JJ6+4WL&?voc;EF3->U6~p@pGoij>hVx)Tjxc}Kb1Vi$ z87>cBEv=TWhke_cine#a_|9kGuz~WAi}GQU37j(r1DxOZv28#^^e@KGz#5KcoNCs# z2m^ivW4>T2$&bzpwBnxtf~vL8vWjvdAj4vs&t(krI)NK?4J@nOS3 zp{eCl_)xx>EEzD|>d(jeuHh>-FkS#Z%oICWVdDt7vTtjE(#vOqqk%R$nq%Y(47p`6cy+lGV zz-xWHCCNeznA!RW3j%!_fY;879+K$^;|Vd~9ja%KbRp?5Xv6z@nFtnC&|%SpkN}Ll zCO)FDF^+{K3c%P}OZf3pl~rOnGg$^$@-gBbWlqrUQ$USs&t1B#U*)yzO*RIiCy7S$uHi_f}@`2)NKolZQ+2Mt` zoH^H*;G*EdFGg~51xueVeW^&28H{nvq6{8;xNwRRsYo3fda_eCLj26sWnw=#Ty&0k z1^GP!z8ja{=h3^HwPI#Uap7RxNyOEx%5}e&VdDG%40fpsDSPM1ZaD-;LhzpE3Ay=J zdjl)`(@2Qq`-B|fYKj;I5!pwX2bXehyoWoystX}JiF6R75MdL0{p4IAGx9OJ#@++M zqfb8F`$?42)N+b4kdg)YxQo-{=-G_$GTM|?QMzba#=B5Tn&#h!6Meka2ypXw-@{YQ zR<9GlK6ck5l3)jLS>)jIP-p&D7y&}M)UsA6o2ihEECDf$@xNy|JyPDroM;IlY!?1+ zv*wFqL$lP6>o}EJk?H^TiW04EAzYN0k%J;I|7ciED-;yX_nNuq7Ya}3pg|C5fcMn# zJ?+GiAJGhTUj+0KF3=E%|>NJrlEW1gp;lKKY-E;|%iK*TIN~94Wx*%)dv!51)DL z$w(Dq7&T;AAW|mUC ztYWe2y(%Dlaod#@!qw@YS@>5G)$jolHxnxQEHg>NP z?E3oOu6CR@wqRF@6Ip?jACTB`BlAc0FeJnVjPfzUet!kZKHLN9nZ1xWrF*zN_~NC# z7YP^f{bZTvkA0Jg1!r$p2N5(*$(PIxx!FsCnkH2qRF#wpPL-n5-Z z+KHJXocIAw>oR@TH1_*5QSfv}-9yfmo%T_+m_X+C&Gb>1v4bPd8~_}>>OxXHL?pzd zzy4nwX75##CCdon_za%fpH>>MvR&C(jRPv)LjYaFS6whm?XB!jc@FM#(ZK=XYAKA)yz-K31b+c3fRjF%637 zN)@I)S<>en7Y#fJ`oq=)cv968KuJCOXBGy*QJp%?pOt9tlRkeqt$R&3pJ^+RfV)n$ zJOlw_>E8(`T2&vcSe@< zw5`Z?BK7i*1$C&vQ+JDVc3x|GyE^crj9^w#pY^mZNuO#H^Hf;LR?H~|MuO74{kj!K zVkBqpMWk`MC5ZCe7)AAWpdm$)U`q}i+Ft$~;xswG(>5%;7a2c3EBs=@zrx?BbKd^x z^ynOQNdvb$bROVIl3c_Sdx7tgvyr_&%sP;g7p8I_xPdndKeS9qzQV<1VSW5d{3kj8 zUr*N_&ve_ycfe8(rJS-kWEBaC!pMX$I!FhHh|&mQa+-{`N2MaP)u*JKX z%f!O7K%@0^B3KA6wuVG{iTa~OE!Y?B9s9?LJvG`kgu!6Zf0y@&ce}s$TsJvm zWr|L7NOIBMtV~{yZA3^Vu;y9W>+9Wu6~1mTbOtjce2K;Hfj9IE>LEjUH2EDkm2@pZ za+{V^Kb04kYb)cpD>$RMdf7F5oQofF*QItFU~Oy+b-R1a(U-Ds0n3pUP?b%F1z82legpuooaAwEro()v_hA} zL&Zy)!HmQN4SF1GZn!-d@*3v-ucdf3%?2jMb3(bJ6%P6jdW>1xP|wF!xdZSoA*Iar zY=F3OEpo6jt?(6pEGUjZ-WtAHwZV`7uVS|JDIUP#i0zeNK>V1Uzq;RA?jAlkObVv- zT?b}Do9QA1(RTz6w_D%GY<9pzfa9pG_u%5Z(0B#HF3!-TYC(F=Gcw)k z8A_}~qeZ5pi>dlos>BnFtT~9108tPslCi>pWdY>d(sL3w6bX6qy|Rp~G49A@WE}#x zptA<0)E23OnDq|0ABplPxAx~a_w3XUWA&V*l=5=%n{g$RNd-hjGBwxl z4ZY!Icl)%kIj?!9PUeQX+S-@7yytCNM9TfLbtLQb_skL2G|IN#W8HUiUfsSHU+!w| z+P`~vgG0-=-LNg~p~f9jB3NJgyld>QamMhROgb@Y|0UBS`JVUhZai0gT#6<=VEtjH z-s4o%CXodvwtrl@MWL|i!68cf15ZVQW@{#HdxAu>Y)gA_Aa9lx#S4=NxDXi;$yBGR zYe%V-K@_Eqnvtv%Q}0+V(WJO4B60Y%bK1XeeDnnWr?8k6)7r9EI|+N*T9;8PhgVZu z@1<|*Or*T6PWs}FtdUq;^(J|VPh1%>$j zvF*0}<9aM*hos}I$;Q$oUDMsQ4xeNr16(q%H2kVjrxQd!v+*I1HUq>950qki0ojrU zD%I+!Qq24^u~9x=?U5E=)h?N7igF$rq<6;`9?>^OTtv?HjKH3f(fZHVTT*zZPn{8X+8UY^ zm61GO*VC{5L6fq&?#RZ3%(3Hw%0>g7;Omb$nB&^ikP6w4-31H1S{&T|RMcTqO?vsY zH;k>#$9`s8dUZrU(3(zkP$KsjInBh^>6097m0Z>dQ|xh2;s|a@NJnTe@ zMqpX!3qz}-M)@49Bil1TQRExBq|o7U2^Hb#^y>I$0g%cUh~n>;Ox6e#)e;ES!)?H8 zP;C{<#JiEvTS};Ru@L~t*WU}`x?CF$`y(P-1TNHsu0$@X$99CPloJC*K>t!PnBW}S ze|**R=icyPv^|Ro3~ZwDUsr$y?Uo9Yr1?ZH`GGPhuQwD%@RSSk=~NX&)va;>?| z)i`yDE+Dn@z%{ZY88bZuv$&&x*H?L1R6N$RM12?pH5bkHn zEJ$Z;ywnKUN0O1VMrwjDOL3lXPVWxZr}=?kxfcJ~7l{faU&AgC2st=orrVArkg9N> z?z$~>@Nbkm5O9?kmxesYkbmSCBTy;z)QWWGk^F)RbnQa+Y{~NEtg+SktI9lX+m2OK z5h>D8E#dPd5_|)<`kl-+9d@33DYe6X8uJz8A-B0N=LxDf*H&l$V0hR&%zs_TX?Tj+ zS6t{tIjzwF1z#c@uyE;hY$fpb)GtZF8$dDN(jdsZ432Ii>wr7%J~;h=sEbb4(CvB! z&b~kuT?+wY@4vKHPyqoch~=DW$+{`soGRC**;o^}Wnf!I=XXSqN7G)Vtr|JhpBZ2B zY;GHpd5Y@+gBOJ6pfp2F+K!~5HioYgLfMz(vT3>f1}God=0zh=3#XcxSNRC4db?6q z%s?ha*|W$OqBvE&tHc8>$jrEV!6s)<&a4vAkZpE$VXxc6 z#CVL#1vw+RWpDm?TTWIPtj_Z8PuNzYa6=WrcmO;0p>F5kKHex85A$G_p#x}Vz9?K! z3wq2QVKwF0rtBM>aIs)sg#jBf-pyoSK<~jK8AAnk`$^CZq1w)q{8rJ)se_l{J@Ebl zER58(V13Q~x#1oK=9+$A68xvA`IUTs0@<0p!GA*gaZ@MnL$2*T<64OlWHG0KrGi^9 zOEn7}nkr|syAfrW44$Id@41OlG1JE$DNX`|op%uwbaZk%pUWtujOb{`5-G!#)99ET zNiL^MFl>T>A8N^oczCLDliNXFq?uJM?Kkr+w1w6^;O~tLM-`@RO!l8 znd=>ARtRo)n3ryybicP(&JHQweH&WtG_uAw3JGmc6N{WC zcZU;=ty?y?k@Q-EYLL+7a?vL+>;-fcgHKHewsu7im!7sM31>n`XLo7u8zP6Fe4}|H9qKCO>4Jkz*mWZST zr9+xUy}voeOC53(ciIewyHr0Ex6MPLx0d~URZ1+}jD%*JOw9_qCh2@p6pn_jYSeRN zcL!@z_4|bB>w*aR*7yr@n<*J#GGV-Nz3#f;9IVO4h=+QVqV!j3`;&Z7&N^$;P1Ix1 z4FsM$Ftj<;AQZP9+$! z^1JHtueIXLAy6&H?!$}S%aHzMw_t2&dC}iUpLp%L z05JCQyF=0YQ+(MgSK*->s#(rDevu5eC%ePH(na0XU6EjSfAdm?65T>%N4u7AN|km3 z7{z>W*YkgMMegw9ZTZD^R~nLhvq!cWH?Qzfk-K9;9n*`MTOm3|Q=+g>O+*N`a2_`w zrzyRPL(#QG1^tIU`)e%p-!T2X0qVICRe2^9Uc`7~xzb*$h|q<1 zZ}({Ovd*mVGD#q#4x<@{Af)AKr_04{^kW*+*Pai-LH_>kz&~>1WZ!~Cy}60|9*jog z_dV?WbsCrm=C}i{%{oNV%29WIOunU^qs4cBQ8I=Lg%+^LYb7WOG^~r^|3zOy*Q06C z9B4{g#)Evf(u`6YFB1pKF1Vt+mVAM8y`41>ofJ58B9>N=2=q{dT-Q#+zj0ju!_AVU zKiI|Yz$Bnm2<|nXLl3dK3^Wrj760nGyKwP=e zo=L{~qunF}RP)Y4O8qBtFQ}vBa_WBQ>)%&=Oqh zi`%<00t?-EhWyS;K#jv&lQjwtg`yLZPfE4s^ZFi!|06RdVI_xmhzVmmvL6{1>jq~S z>*nsMY-ngRekv}4psMvJ{>^v5*6bC_o*nwk~V} zJAmec2C?%(A?hZF_h86`>M4~Rd?{lMZSG^#8XATsu?b7xnvcIpsd@+>@U8q=CqOgg z&Rp}MhWQ?U{`n`>jiuEMrI+YdVDPqll=31+kA^R&>QCB0MRTn^-r;w9G~u0MQT~G; z$pJDOCtjY&pDU@$E1{~Z&Bok{4I)$spRN2Tkzy~gYiK$DMnTCFEcl>1t4bHOM6!%n c_-bAm7p + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TomoATT + + diff --git a/docs/logo/TomoATT_logo_2.png b/docs/logo/TomoATT_logo_2.png new file mode 100644 index 0000000000000000000000000000000000000000..af691be5f739d3f7aab674e093d543132e68228b GIT binary patch literal 117374 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%0AcKmM!f2I~8ppX<$l^1*g=X!|JmObf&^< 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/logo/TomoATT_logo_only_cube.png b/docs/logo/TomoATT_logo_only_cube.png new file mode 100644 index 0000000000000000000000000000000000000000..eb08b614a065d979642615becb0b6453fe1a2f03 GIT binary patch literal 84283 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 D%)?dN literal 0 HcmV?d00001 diff --git a/docs/manual/index.md b/docs/manual/index.md new file mode 100644 index 0000000..635fa90 --- /dev/null +++ b/docs/manual/index.md @@ -0,0 +1,277 @@ +# TomoATT User Manual version 1.0 + +## Introduction + +TomoATT is a library which implements an eikonal equation solver based Adjoint-state Travel-Time Tomography for a very large-scale computation, following a published article [Ping Tong (2021)](https://doi.org/10.1029/2021JB021818) and [Jing Chen (2022)](add_here_when_published). +The slowness field and anisotropy fields are computed in spherical coordinate system. + +Thanks to the efficiency of an eikonal equation solver, the computation of the travel-time is very fast and requires less amount of computational resources. +As an input data for TomoATT is travel times at seismic stations, we can easily prepare a great amount of input data for the computation. + +This library is developped to be used for modeling a very-large domain. For this purpose, 3-layer parallelization is applied, which are: +- layer 1: simulutaneous run parallelization (travel times for multiple seismic sources may be calculated simultaneously) +- layer 2: subdomain decomposition (If the number of computational nodes requires too large memory, we can separate the domain into subdomains and run each subdomain in a separate compute node) +- layer 3: sweeping parallelization (in each subdomain, sweeping layers are also parallelized) + +The details of the parallelization method applied in this library are described in the paper [Miles Detrixhe and Frédéric Gibou (2016)](https://doi.org/10.1016/j.jcp.2016.06.023). + +Regional events (sources within the global domain) and teleseismic events (sources outside the global domain) may be used for inversion. + +--- + +## Input files + +TomoATT requires 3 input files : +1. input parameter file (setup file for simulation parameters) +2. source receiver file (source and receiver definitions and observation arrival times) +3. initial model file (3d initial model) + + +### 1. input parameter file + +All the necessary parameters for setuping a calculation are described in input parameter file in [yaml format](https://en.wikipedia.org/wiki/YAML). + +Below is an example of input parameter file for making a forward simulation. + +``` yaml +version : 2 + +domain : + min_max_dep : [5740.6370,5790.6370] # depth in km + min_max_lat : [45.0,55.0] # latitude in degree + min_max_lon : [35.0,45.0] # longitude in degree + n_rtp : [40,40,40] # number of nodes + +source : + src_rec_file : 'src_rec_test.dat' # source receiver file + +model : + init_model_path : './test_model_init.h5' # path to initial model file + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [2,2,1] # number of subdomains + nproc_sub : 1 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-6 + max_iterations : 100 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + # output the calculated field of all sources. 1 for yes; 0 for no; default: 1 + is_output_source_field : 0 + # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_verbose_output : 0 + # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + is_output_model_dat : 0 + +``` + +There are categories and sub-categories with setup parameters. +Below is the explanation of each category and sub-category. +If a category tag or sub-category tag is missing from the input parameter file, the default value will be used. + +#### domain : +The domain category is for setting a global domain of the simulation. +- `min_max_dep` : `[dep1, dep2]` minimum and maximum depth of the domain in kilo meter +- `min_max_lat` : `[lat1, lat2]` minimum and maximum latitude in degree +- `min_max_lon` : `[lon1, lon2]` minimum and maximum longitude in degree +- `n_rtp` : `[nr, nt, np]` number of computation nodes for r (depth),t (latitude) and p (longitude) direction + +#### source : +Source category is used for setting about source and receiver definitions. +- `src_rec_file` : for specifying a path to a source receiver file (details of this file is in the following section). The calculated travel time at receivers will be output as a new source receiver file in OUTPUT_FILES directory. +- `swap_src_rec` : `0` or `1`. Set 1 for using receivers as sources, which reduces computation time when the number of sources are larger than the number of receivers. (usual when using a large dataset.) + +#### model : +- `init_model_path` : File path for 3D initial model file. Details will be explained in the following section. +- `model_1d_name` : the name of 1d model used for teleseismic tomography. `ak135` and `iasp91` are available. User defined model can be used by modifying the file `1d_models.h` in `include` directory, by changing `model_1d_prem` part and setting this `model_1d_name` parameter as `user_defined`. +#### inversion : +- `run_mode` : + - `0` for running only a forward simulation. + - `1` for do inversion. + - `2` for only precalculation of 2d traveltime field for teleseismic sources. This is an optional step for teleseismic case. If 2d traveltime field is not precalculated, it will be calculated during mode `0` or `1`. This is useful for calculations on HPC as 2d eikonal solver has not been parallelized. Users can run it on a local machine beforehand to reduce CPU time on HPC. + - `3` run earthquake relocation. For using this mode, `sources : swap_src_rec` need to be set to 1. Otherwise the program will exit with an error message. +- `n_inversion_grid` : the number of inversion grid. +- `n_inv_dep_lat_lon` : the numbers of inversion grids for r, t and p direction. +- `min_max_dep_inv` : `[dep1, dep2]` minimum and maximum depth of inversion grid in kilo meter. +- `min_max_lat_inv` : `[lat1, lat2]` minimum and maximum latitude of inversion grid in degree. +- `min_max_lon_inv` : `[lon1, lon2]` minimum and maximum longitude of inversion grid in degree. + +Currently, TomoATT provide two ways for defining the inversion grid. One is a regular grid (even intervals for all axis) type and another uses used defined intervals for each axis. + +For setting the user defined intervals, please use the flags below. +- `type_dep_inv` : `0` for regular grid (default), `1` for user defined intervals. +- `type_lat_inv` : `0` for regular grid (default), `1` for user defined intervals. +- `type_lon_inv` : `0` for regular grid (default), `1` for user defined intervals. + +and the coordinates where the main inversion grids are placed, +- `dep_inv` : `[z1,z2,z3,...]` for user defined intervals. +- `lat_inv` : `[y1,y2,y3,...]` for user defined intervals. +- `lon_inv` : `[x1,x2,x3,...]` for user defined intervals. + +other parameers for inversion seetting. +- `max_iterations_inv` : The limit of iteration number for inversion. +- `step_size` : Maximum step size ratio for updating model. +- `smooth_method` : `0` or `1`. 0 for multigrid parametrization ([Ping Tong 2019](https://doi.org/10.1093/gji/ggz151)). 1 for laplacian smoothing with CG method. +- `l_smooth_rtp` : `[lr, lt, lp]` smoothing coefficients for laplacian smoothing on r,t and p direction. +- `optim_method` : `0`, `1` or `2`. 0 for gradient descent, 1 for gradient descent with halve-stepping, 2 for L-BFGS (THIS MODE IS EXPERIMENTAL AND CURRENTLY NOT WORKING.). +- `regularization_weight`: regularization weight, USED ONLY L-BFGS mode. +- `max_sub_iterations` : maximum number of sub iteration. Used for optim_method 1 and 2. + +#### parallel : +- `n_sims` : number of simulutaneous run +- `ndiv_rtp` : `[ndiv_r, ndiv_t, ndiv_p]` number of domain decomposition on r, t and p direction +- `nproc_sub` : number of processes used for sweeping parallelization +- `use_gpu` : `0` or `1`. Set 1 for using GPU. (Currently gpu mode is used only for a forward simulation. n_sims, ndiv_rtp and nproc_sub need to be 1.) + +The total number of mpi processes (i.e. mpirun -n NUMBER) must be n_sims\*ndiv_r\*ndiv_t\*ndiv_p\*nproc_sub, otherwise the code will stop instantly. + +#### calculation : +- `convergence_tolerance` : convergence criterion for forward and adjoint run. +- `max_iterations` : number of maximum iteration for forward and adjoint run +- `stencil_order` : `1` or `3`. The order of stencil for sweeping. +- `sweep_type` : `0`or `1`. 0 is for sweeping in legacy order (threefold loops on r,t and p), 1 for cuthill-mckee node ordering with sweeping parallelization. +- `output_file_format` : `0` or `1` for selecting input and output file format. `0` is for HDF5 format, `1` is for ASCII format. + +#### output_setting : +- `is_output_source_field` : `0`(no) or `1`(yes). if output the calculated field of all sources. +- `is_verbose_output` : `0` or `1`. if output internal parameters, if no, only model parameters are out. +- `is_output_model_dat` : `0` or `1`. if output model_parameters_inv_0000.dat or not. + + +### 2. source receiver file +Source receiver file is a file which defines source and receiver positions and arrival times. + +Below is an example: +``` +1 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- source 1 +1 1 PCBI 1.8900 98.9253 1000.0000 P 18.000 <- receiver 1 +1 2 MRPI 1.6125 99.3172 1100.0000 P 19.400 <- receiver 2 +1 3 HUTI 2.3153 98.9711 1600.0000 P 19.200 + .... + +``` + +``` +Source line : id_src year month day hour min sec lat lon dep_km magnitude num_recs id_event (weight) +Receiver line : id_src id_rec name_rec lat lon elevation_m phase arrival_time_sec (weight) +``` + +`num_recs` (number of receivers for this source) need to be the same with the number of receiver lines. +The last column of both source and receiver line is for put weight (on objective function). These are the optional column and set to be 1.0 if not written. +`name_rec` need to be different for each station. +`lon` and `lat` are in degree. + +If the source position is out of the global domain (defined in input parameter file.), the code will flag this event as a teleseismic event and run the dedicated routine for teleseimic event. For teleseismic event, swap_src_rec will be ignored for this event (as the teleseismic case, a source is not a point but boundary surfaces). + + +### 3. initial model file + +Initial model file is used for defining parameters of input mode. +Necessary parameters are `vel` (velocity), `eta`, `xi`, `zeta`. + +#### inital model file in HDF5 format + +In HDF5 I/O mode (`output_file_format`: 0 in input parameter file), all the necessary parameters should be saved in one single `.h5` file, with exactly the same name of dataset with parameter name written above. +The dimension of dataset should be the same with `n_rtp` in input parameter file. +Please refer the `examples/inversion_small/make_test_model.py` for details. + + +#### initial model file in ASCII format + +In ASCII I/O mode (`output_file_format`: 1 in input parameter file), all the necessary parameters should be save in one single ASCII file. +The number of rows in the file need to be equivalent with the number of global nodes (i.e. n_rtp[0]\*n_rtp[1]\*n_rtp[2]). + +The node order should be: +```python + # write nodes in rtp + for ir in range(n_rtp[0]): # number of nodes on r direction + for it in range(n_rtp[1]): # number of nodes on t direction + for ip in range(n_rtp[2]): # number of nodes on p direction + # write out parameters + # eta xi zeta fun fac_a fac_b fac_c fac_f + +``` + +Complete example may be found `examples/inversion_small_ASCII/make_test_model.py`. + +--- + +## Output files + +Calculated travel times at the stations will be writen in `(source receiver file)_out.dat` on the column for travel times. + +Volumetric result data files are saved in OUTPUT_FILES directory. + +As the node order in the output file is not in the global domain but each subdomains, it is necessary to do a small post-processing for extracting slices. +`utils/tomoatt_data_retrieval.py` includes functions for this post processing. +Please refer the concrete example in `inversion_small/data_post_process.py` for HDF5 mode, and `inversion_small_ASCII/data_post_process.py` for ASCII mode. + +Only the final iteration result will be saved in 3D matrix form as `final_model.h5` or `final_model.dat`, thus it is not necessary to do post-processing for the final result. + + +### HDF5 I/O mode +In HDF5 mode, the code will carry out collective writing from all MPI processes into one single output file, which will try to maximize the I/O bandwidth for efficient I/O. + +TomoATT produces output files like below: +- out_data_grid.h5 : grid coordinate and connectivity data +- out_data_sim.h5 : field data +- out_data_sim.xmf : XDMF index data for visualizing 3D data. This may be open by Paraview. +- final_model.h5 : final model parameters + +Travel time field for i-th source may be visualized by reading `OUTPUT_FILES/out_data_sim_i.xmf`. +All the inversed parameters from all the sources and receivers are saved in `out_data_sim_0.xmf`. + + +Internal composition of .h5 data may be indicated by `h5ls -r` command. +The composition of out_data_grid.h5 is : +``` +/ Group +/Mesh Group +/Mesh/elem_conn Dataset {21609, 9} # node connectivity used for visualization +/Mesh/node_coords_p Dataset {26010} # longitude [degree] +/Mesh/node_coords_r Dataset {26010} # radious [km] +/Mesh/node_coords_t Dataset {26010} # latiude [degree] +/Mesh/node_coords_x Dataset {26010} # xyz coordinate in WGS84 +/Mesh/node_coords_y Dataset {26010} +/Mesh/node_coords_z Dataset {26010} +/Mesh/procid Dataset {26010} # mpi processor id +``` + + +out_data_sim.h5 is : +``` +/model Group +/model/eta_inv_000j Dataset {25000} # eta at j-th inversion +/model/xi_inv_000j Dataset {25000} # xi +/model/vel_inv_000j Dataset {25000} # velocity field at j-th inversion +``` + +then final_model.h5 is : +``` +eta Dataset {10, 50, 50} +vel Dataset {10, 50, 50} +xi Dataset {10, 50, 50} +``` +The internal composition of the final_model.h5 is exactly the same with the initial model file. Thus it is possible to use the final model file as the initial model file for the next run by specifying `initial_model_file` in input parameter file. + +### ASCII I/O mode +In ASCII mode, code will be do independent writing, (i.e. each MPI process do I/O process sequencially) in a single output file. + +The files that TomoATT creates in OUPUT_FILES directory are : + +``` +out_grid_conn.dat # node connectivity +out_grid_ptr.dat # grid coordinate lon (degree), lat (degree), radius (km) +out_grid_xyz.dat # grid coordinate in WGS84 +eta_inv_000j.dat # eta +xi_inv_000j.dat # xi +vel_inv_000j.dat # velocity +``` + diff --git a/docs/manual/usage_on_HPCs.md b/docs/manual/usage_on_HPCs.md new file mode 100644 index 0000000..55a92f6 --- /dev/null +++ b/docs/manual/usage_on_HPCs.md @@ -0,0 +1,164 @@ +# commands for compiling and running on HPCs + +## Gekko @ NTU + +### 1. Load necessary modules and select GNU compilers +```bash +module purge && module load cmake gnu/gcc-9.3.0 +``` + +### 2. compiler openmpi and HDF5 with parallel option +`./install_mpi_and_hdf5_local.sh` +will create openmpi and hdf5 executables in external_libs/local_mpi_hdf5/bin + +### 3. Compile TomoATT +```bash +# make a build directory +mkdir build + +# compile TomoATT +cd build +CC=/usr/local/gcc-9.3.0/bin/gcc CXX=/usr/local/gcc-9.3.0/bin/g++ cmake .. -DCMAKE_PREFIX_PATH=$(pwd)/../external_libs/local_mpi_hdf5 + +make -j16 +``` + +Then the executable TOMOATT is created in the build directory. + + +## Fugaku @ RIKEN + + +### 0. start interactive job on Fugaku (for accessing arch64 environment) + +```bash +pjsub --interact -g hp220155 -L "node=1" -L "rscgrp=int" -L "elapse=1:00:00" --mpi "max-proc-per-node=12" --sparam "wait-time=600" -x PJM_LLIO_GFSCACHE=/vol0004 --no-check-directory +``` + + +### 1. Load necessary modules +```bash +# prepare spack env +. /vol0004/apps/oss/spack/share/spack/setup-env.sh +# load Fujitsu mpi +spack load /jfzaut5 +# or load gnu 11.2.0 +spack load /nphnrhl /cvur4ou +``` + + + +### 2. Download hdf5 source code and compile it +```bash + +# every file will be placed in external_libs +cd ./external_libs + +# make a local install pass +mkdir local_mpi_hdf5 + +# download hdf5 source +wget https://gamma.hdfgroup.org/ftp/pub/outgoing/hdf5/snapshots/v112/hdf5-1.12.2-1.tar.gz + +#Extract the downloaded directory +tar -xvf hdf5-1.12.2-1.tar.gz && cd hdf5-1.12.2-1 + +# Configure the code. (the pathes to mpicc, mpicxx should vary on the environment) +CC=mpifcc CFLAGS="-Nclang" CXX=mpiFCC CXXFLAGS="-Nclang" ./configure --enable-parallel --enable-unsupported --enable-shared --enable-cxx --prefix=$(pwd)/../local_mpi_hdf5 + +# make +make -j12 && make install + +# now hdf5 executables are in external_libs/local_mpi_hdf5/bin +``` + +or with gnu 11.2.0 +```bash + +# download hdf5 source +wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.13/hdf5-1.13.2/src/hdf5-1.13.2.tar.gz +#Extract the downloaded directory +tar -xvf hdf5-1.13.2.tar.gz +cd hdf5-1.13.2 +# Configure the code. (the pathes to mpicc, mpicxx should vary on the environment) +CC=mpicc CXX=mpic++ ./configure --enable-parallel --enable-unsupported --enable-shared --enable-cxx --prefix=$(pwd)/../local_mpi_hdf5 +# make +make -j12 && make install + +``` + + +### 3. Compile TomoATT +```bash +# cd to TomoATT directory +cd ../.. + +# make a build directory +mkdir build + +# compile TomoATT +cd build + +CC=mpifcc CXX=mpiFCC cmake .. -DCMAKE_PREFIX_PATH=$(pwd)/../external_libs/local_mpi_hdf5 +# or for gnu 11.2.0 +cmake .. -DCMAKE_PREFIX_PATH=$(pwd)/../external_libs/local_mpi_hdf5 + +make -j12 +``` + +### 4. terminalte interactive job +`Ctrl + D` + + + + + +## ASPIRE 1 @ NSCC + +### 0. load necessary modules +```bash +module purge +export PATH=/app/gcc/9.5.0/bin:$PATH && export LD_LIBRARY_PATH=/app/gcc/9.5.0/lib:$LD_LIBRARY_PATH +module load intel/19.0.0.117 +``` + +### 1. Download hdf5 source code and compile it +```bash + +# download openmpi and hdf5 source code on your LOCAL MACHINE +wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.13/hdf5-1.13.3/src/hdf5-1.13.3.tar.gz + +# then upload it to NSCC (for example) +scp -rC hdf5-1.13.3.tar.gz aspire1:~/(where TomoATT placed)/external_libs/ + +# on ASPIURE 1 +cd external_libs + +mkdir local_mpi_hdf5 + +# extract tar file and cd to the directory +tar -xvf hdf5-1.13.3.tar.gz && cd hdf5-1.13.3 + +# configure the code +CC=mpiicc CXX=mpiicpc \ +./configure --enable-parallel --enable-unsupported --enable-shared --enable-cxx --prefix=$(pwd)/../local_mpi_hdf5 + +# make and install to the prefix +make -j16 && make install + +``` + +### 2. Compile TomoATT +```bash +# cd to TomoATT directory +cd ../.. + +# make a build directory +mkdir build + +# compile TomoATT +cd build +CC=icc CXX=icpc cmake .. -DCMAKE_PREFIX_PATH=$(pwd)/../external_libs/local_mpi_hdf5 + +make -j16 +``` diff --git a/docs/mpi_diagram/class_diagram b/docs/mpi_diagram/class_diagram new file mode 100644 index 0000000..683713c --- /dev/null +++ b/docs/mpi_diagram/class_diagram @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/mpi_diagram/earthquake_relocation b/docs/mpi_diagram/earthquake_relocation new file mode 100644 index 0000000..4c79daf --- /dev/null +++ b/docs/mpi_diagram/earthquake_relocation @@ -0,0 +1 @@ +3Vpbd5s4EP41Pmf3oTkgMLYfYyfb7m53223aTfLUI4NsSASiQsT2/vodgTAX0cRJTLD9wkGDJEYz880NBtYsXL/nOPb/Yh6hA2R464F1MUDIdhBcJWGTE0aGmROWPPByUoVwFfxHFNFQ1DTwSFKbKBijIojrRJdFEXFFjYY5Z6v6tAWj9bfGeEk0wpWLqU69Djzh59QxGpX0DyRY+sWbTWeSPwlxMVmdJPGxx1YVknU5sGacMZHfhesZoVJ2hVyuf99c04/3zvs//kl+4G/TP7/+/e+7fLPfnrNkewROIvHireM73/wRfWE4uJlN/U8fHsYT9s501NnEphAY8UB+asi48NmSRZheltQpZ2nkEbmtAaNyzkfGYiCaQLwjQmyUMeBUMCD5IqTqKVkH4qZyfyu3Ohuq0cVa7ZwNNmqQ8ymZa+j1CaGoeQlLuUsekYRSssB8ScRjErO2qgfIEBYSwTewkBOKRfBQ5w4r411u55UKghulo2foy7L61Fepo9vKk3Z9gVb4prJIDm+rz8pl2ejQ9GwZfepZcfmAaareNMPUTeHVBMhfOX7IvLQIQjleBIR6iXwQDpBD4VjTOYe7pbxbMC45zN7JiUuAdy7nhpollXYiVbvyA0GuYpxJcwWxoW4TeJ4wmgpyzl1lNxm1HNkwTARn91u/i7bqBRYEWb9Awbo+il0KL63C1Db+rEqnjwxF8ysOf2h0BVVTE/ChQhUGnwkHWxKEHzh8ixTiKfiiPtFraui9AoZFZo1gjMjBoURTNE/iTGRNyPI0+h5CIgYLBtY5XJFmSjqyKkYAmUos54XrpczpzhaUrVwfODhLJB/ffwbvzsA5qoNzrGPTbMOm0xk2dYEeKjYPFIdoRxz2GkWRjsMVGHpxPBkFceTV4+IJx0TT2TEmWl3hDh0N7rrGj7VruTHptdzQAHS5Fhy7oiUJxZJIsOuXx5cJ6S83ya+nharJsIYqa9QSzUZvGc1sXUvSq+0nY4CUMAwiLKCK6DdpcHrPGtDkWLzXoxm9WcsjyrSir4x+Z1c4eqUrVEs/syASpZ3ZjShpmQ37yRlTqxomtGXjFcWC7mQ/pSJORVbYU6LnJC9EsocFnuOEvDGOLadRmRsjDcfjtsJ82BWMj6cwP9Dk3xztCNlee6UFlxVgfSHYU22yE8pIkNXISFp6X5MWhNmdlde9flUwKvh66qvC462vAwuU411R12vRbY2Oxr3use+ZjZqbHYxF2L364bHmh2c+ce8H2UdfcIdLEslicU9ZDnGDJGDRW1crqO6DHaOlWmlzwt1VK/1+KnyOEz5UhzvZEV6vrkxeh6+Jhi+38rEQAOIFJKt42EJe5nfEzbiC+iKN4BbAUjRCkzSUB2Z6K+eE8qUtDhVW7WELVltLks6wqrdwQA9TvVABSYiGJ8zENmNUNmguIhZJGEPdSBskTIMlOMULFyQnA9RUyjUAQzlXD8LA8+jPisO6X+hMMUNUT2QNR1OM85b96iKxPoJc5pjyFrRr/ZinDr19PtILyG+xl3vVbYebMhfnLrQHD9mC886w2WjHDu0d27HdVZn20YHzwFqvhd98+m+KvbRezznHm8qEWLZUk8rOjc4sGtVz6qFjNIwm33Gv7dhCJhXQnzy0Gx1aq6V22cbYKrSRaT8b2zAsf5nNlVb+d2xd/g8= \ No newline at end of file diff --git a/docs/mpi_diagram/earthquake_relocation.drawio.png b/docs/mpi_diagram/earthquake_relocation.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a407f5e7896cfb6db0275d78c81b3bea7a035611 GIT binary patch literal 40554 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 \ No newline at end of file diff --git a/docs/mpi_diagram/mpi_group_explanation.pdf b/docs/mpi_diagram/mpi_group_explanation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9ae1f761fe9739017b91e3201376eee9f3a97c89 GIT binary patch literal 49155 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 literal 0 HcmV?d00001 diff --git a/examples/clean_examples.sh b/examples/clean_examples.sh new file mode 100755 index 0000000..29feaf5 --- /dev/null +++ b/examples/clean_examples.sh @@ -0,0 +1,7 @@ +rm -r ./*/OUTPUT_FILES +rm ./*/*.dat +rm ./*/*.h5 +rm ./*/*.txt +rm ./*/params_log.yaml +rm -r ./*/OUTPUT_FILES* +rm ./*/*/*.h5 \ No newline at end of file diff --git a/examples/eg1_seismic_tomography/3_input_params/input_params_inv.yaml b/examples/eg1_seismic_tomography/3_input_params/input_params_inv.yaml new file mode 100644 index 0000000..10fae32 --- /dev/null +++ b/examples/eg1_seismic_tomography/3_input_params/input_params_inv.yaml @@ -0,0 +1,215 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_noisy.dat # source receiver file path + swap_src_rec: true # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged) + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N61_61_61.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_inv # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'. + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do). + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 1 + +have_tele_data: false # An error will be reported if false but source out of study region is used. Default: false. + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 40 # maximum number of inversion iterations + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + #common parameters for all optim methods + step_length: 0.02 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction + # if step_method:0. if objective function increase, step size -> step length * step_length_decay. + step_length_decay: 0.9 # default: 0.9 + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.2] # default: [0.5,1.2] + # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion + # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is fully normalized. 0.5 or less is recommended if really required. + Kdensity_coe: 0 # default: 0.0, limited range: 0.0 - 0.95 + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: true # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: true # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # -------------- uniform inversion grid setting -------------- + # settings for uniform inversion grid + n_inv_dep_lat_lon: [12, 9, 9] # number of the base inversion grid points + min_max_dep_inv: [-10, 50] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv: [0, 2] # latitude in degree + min_max_lon_inv: [0, 2] # longitude in degree + + # -------------- flexible inversion grid setting -------------- + # settings for flexible inversion grid + dep_inv: [-10, 0, 10, 20, 30, 40, 50, 60] # inversion grid for vel in depth (km) + lat_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in latitude (degree) + lon_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [100, 200, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : true # update azimuthal anisotropy (xi, eta) or not. default: false diff --git a/examples/eg1_seismic_tomography/3_input_params/input_params_signal.yaml b/examples/eg1_seismic_tomography/3_input_params/input_params_signal.yaml new file mode 100644 index 0000000..376d749 --- /dev/null +++ b/examples/eg1_seismic_tomography/3_input_params/input_params_signal.yaml @@ -0,0 +1,50 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_config.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_61_61.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_signal # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +run_mode: 0 diff --git a/examples/eg1_seismic_tomography/README.md b/examples/eg1_seismic_tomography/README.md new file mode 100644 index 0000000..c7c897c --- /dev/null +++ b/examples/eg1_seismic_tomography/README.md @@ -0,0 +1,29 @@ +# seismic tomography + +This is a toy model to invert traveltimes for Vp and anisotropy (Figure 8c.) + +Reference: +[1] J. Chen, M. Nagaso, M. Xu, and P. Tong, TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy, submitted. +https://doi.org/10.48550/arXiv.2412.00031 + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + +2. After inversion, run `plot_output.py` to plot the results. + +The initial and true models: + +![](img/model_setting.jpg) + +The inversion result: + +![](img/model_inv.jpg) + + diff --git a/examples/eg1_seismic_tomography/assign_gaussian_noise.py b/examples/eg1_seismic_tomography/assign_gaussian_noise.py new file mode 100644 index 0000000..1126466 --- /dev/null +++ b/examples/eg1_seismic_tomography/assign_gaussian_noise.py @@ -0,0 +1,16 @@ +from pytomoatt.src_rec import SrcRec + +def assign_noise_to_src_rec_file(in_fname, out_fname, noise_level=0.1): + sr = SrcRec.read(in_fname) + sr.add_noise(noise_level) + sr.write(out_fname) + + +if __name__ == "__main__": + in_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward.dat" # input source receiver file + out_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_noisy.dat" # output source receiver file + sigma = 0.1 # noise level in seconds + assign_noise_to_src_rec_file(in_fname, out_fname, noise_level=sigma) + + + diff --git a/examples/eg1_seismic_tomography/plot_output.py b/examples/eg1_seismic_tomography/plot_output.py new file mode 100644 index 0000000..cbf446a --- /dev/null +++ b/examples/eg1_seismic_tomography/plot_output.py @@ -0,0 +1,250 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +import os + +# %% +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# read models + +Ngrid = [61,61,61] +data_file = '2_models/model_init_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +par_file = '3_input_params/input_params_signal.yaml' +model = ATTModel.read(data_file, par_file) +initial_model = model.to_xarray() + +data_file = '2_models/model_ckb_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +model = ATTModel.read(data_file, par_file) +ckb_model = model.to_xarray() + +# initial model +depth = 10.0 +vel_init = initial_model.interp_dep(depth, field='vel') +start = [1.25,0]; end = [1.25,2] +vel_init_sec = initial_model.interp_sec(start, end, field='vel', val = 1) + +# checkerboard model +vel_ckb = ckb_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] +vel_ckb_sec = ckb_model.interp_sec(start, end, field='vel', val = 1) + +# anisotropic arrow +samp_interval = 3 +length = 7 +width = 0.1 +ani_thd = 0.02 + +ani_ckb_phi = ckb_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_ckb_epsilon = ckb_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_ckb = np.hstack([ani_ckb_phi, ani_ckb_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_ckb_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_ckb_epsilon[:,2] > ani_thd) +ani_ckb = ani_ckb[idx[0],:] + +try: + os.mkdir('img') +except: + pass + +# %% +# read src_rec_file for data +from pytomoatt.src_rec import SrcRec + +sr = SrcRec.read('1_src_rec_files/src_rec_config.dat') +station = sr.receivers[['stlo','stla','stel']].values.T +true_loc = sr.sources[['evlo','evla','evdp']].values.T +earthquake = true_loc + +# %% +# categorize earthquakes +ev_idx1 = [] +ev_idx2 = [] +ev_idx3 = [] +for i in range(earthquake.shape[1]): + dep = earthquake[2,i] + if dep < 15: + ev_idx1.append(i) + elif dep < 25: + ev_idx2.append(i) + elif dep < 35: + ev_idx3.append(i) + +# %% +# plot the checkerboard model +fig = pygmt.Figure() + +region = [0,2,0,2] +frame = ["xa1","ya1","nSWe"] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +# -------------- initial model and earthquake location -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tInitial model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_init[:,0]; y = vel_init[:,1]; value = (vel_init[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = true_loc[0,ev_idx1], y = true_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = true_loc[0,ev_idx2], y = true_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = true_loc[0,ev_idx3], y = true_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +fig.plot(x = station[0,:], y = station[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# # anisotropic arrow +# fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_init_sec[:,3]; y = vel_init_sec[:,1]; value = (vel_init_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = true_loc[2,ev_idx1], y = true_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = true_loc[2,ev_idx2], y = true_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = true_loc[2,ev_idx3], y = true_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + +fig.shift_origin(xshift=4) + + + + +# -------------- checkerboard model -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tTrue model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_ckb[:,0]; y = vel_ckb[:,1]; value = (vel_ckb[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = earthquake[0,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = earthquake[0,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = earthquake[0,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +# fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_ckb_sec[:,3]; y = vel_ckb_sec[:,1]; value = (vel_ckb_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = earthquake[2,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = earthquake[2,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = earthquake[2,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + +fig.show() +fig.savefig('img/model_setting.png', dpi=300) + +# %% +# plot the inversion result + +# read models +tag = "inv" +data_file = "OUTPUT_FILES/OUTPUT_FILES_%s/final_model.h5"%(tag) +model = ATTModel.read(data_file, par_file) +inv_model = model.to_xarray() +vel_inv = inv_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] +x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +vel_inv_sec = inv_model.interp_sec(start, end, field='vel', val = 1) +x_sec = vel_inv_sec[:,3]; y_sec = vel_inv_sec[:,1]; value_sec = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 + +ani_inv_phi = inv_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_inv_epsilon = inv_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_inv = np.hstack([ani_inv_phi, ani_inv_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_inv_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_inv_epsilon[:,2] > ani_thd) +ani_inv = ani_inv[idx[0],:] + +# plot the inversion result + +fig = pygmt.Figure() + +region = [0,2,0,2] +frame = ["xa1","ya1","+tInversion results"] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +# -------------- checkerboard model -------------- +fig.basemap(region=region, frame=frame, projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# # earthquakes +# fig.plot(x = earthquake[0,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +# fig.plot(x = earthquake[0,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +# fig.plot(x = earthquake[0,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +# fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_inv, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_inv_sec[:,3]; y = vel_inv_sec[:,1]; value = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# # earthquakes +# fig.plot(x = earthquake[2,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +# fig.plot(x = earthquake[2,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +# fig.plot(x = earthquake[2,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + + +fig.show() +fig.savefig('img/model_%s.png'%(tag), dpi=300) + + diff --git a/examples/eg1_seismic_tomography/prepare_input_files.py b/examples/eg1_seismic_tomography/prepare_input_files.py new file mode 100644 index 0000000..13869cd --- /dev/null +++ b/examples/eg1_seismic_tomography/prepare_input_files.py @@ -0,0 +1,63 @@ +# download src_ref_files from Zenodo +import os +import numpy as np +import sys +try: + from pytomoatt.model import ATTModel + from pytomoatt.checkerboard import Checker + from pytomoatt.src_rec import SrcRec +except: + print("ERROR: ATTModel not found. Please install pytomoatt first." + "See https://tomoatt.github.io/PyTomoATT/installation.html for details.") + sys.exit(1) + + +class BuildInitialModel(): + def __init__(self, par_file="./3_input_params/input_params_signal.yaml", output_dir="2_models"): + """ + Build initial model for tomography inversion + """ + self.am = ATTModel(par_file) + self.output_dir = output_dir + + def build_initial_model(self, vel_min=5.0, vel_max=8.0): + """ + Build initial model for tomography inversion + """ + self.am.vel[self.am.depths < 0, :, :] = vel_min + idx = np.where((0 <= self.am.depths) & (self.am.depths < 40.0))[0] + self.am.vel[idx, :, :] = np.linspace(vel_min, vel_max, idx.size)[::-1][:, np.newaxis, np.newaxis] + self.am.vel[self.am.depths >= 40.0, :, :] = vel_max + + +def build_ckb_model(output_dir="2_models"): + cbk = Checker(f'{output_dir}/model_init_N61_61_61.h5', para_fname="./3_input_params/input_params_signal.yaml") + cbk.checkerboard( + n_pert_x=2, n_pert_y=2, n_pert_z=2, + pert_vel=0.2, pert_ani=0.1, ani_dir=60.0, + lim_x=[0.5, 1.5], lim_y=[0.5, 1.5], lim_z=[0, 40] + ) + cbk.write(f'{output_dir}/model_ckb_N61_61_61.h5') + + +if __name__ == "__main__": + # download src_rec_config.dat + url = 'https://zenodo.org/records/14053821/files/src_rec_config.dat' + path = "1_src_rec_files/src_rec_config.dat" + os.makedirs(os.path.dirname(path), exist_ok=True) + if not os.path.exists(path): + sr = SrcRec.read(url) + sr.write(path) + + # build initial model + output_dir = "2_models" + os.makedirs(output_dir, exist_ok=True) + bim = BuildInitialModel(output_dir=output_dir) + bim.build_initial_model() + bim.am.write('{}/model_init_N{:d}_{:d}_{:d}.h5'.format(bim.output_dir, *bim.am.n_rtp)) + + # build ckb model + build_ckb_model(output_dir) + + + diff --git a/examples/eg1_seismic_tomography/run_this_example.sh b/examples/eg1_seismic_tomography/run_this_example.sh new file mode 100644 index 0000000..2b0f0a3 --- /dev/null +++ b/examples/eg1_seismic_tomography/run_this_example.sh @@ -0,0 +1,29 @@ +#!/bin/bash + + +# Step 1: Generate necessary input files +python prepare_input_files.py + +# Step 2: Run forward modeling +# for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_signal.yaml + + +# Step 3: Assign data noise to the observational data +python assign_gaussian_noise.py + +# Step 4: Do inversion +# for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_inv.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_inv.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_inv.yaml + + +# Step 5 (Optional): Plot the results +python plot_output.py \ No newline at end of file diff --git a/examples/eg2_earthquake_location/3_input_params/input_params_loc.yaml b/examples/eg2_earthquake_location/3_input_params/input_params_loc.yaml new file mode 100644 index 0000000..f77f6ec --- /dev/null +++ b/examples/eg2_earthquake_location/3_input_params/input_params_loc.yaml @@ -0,0 +1,114 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_61_61.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_loc # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 2 + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime: [10.0, 15.0, 15.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime: [10.0, 15.0, 15.0, 1.0] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 201 # maximum number of iterations for relocation + tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : true # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : false # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) diff --git a/examples/eg2_earthquake_location/3_input_params/input_params_signal.yaml b/examples/eg2_earthquake_location/3_input_params/input_params_signal.yaml new file mode 100644 index 0000000..376d749 --- /dev/null +++ b/examples/eg2_earthquake_location/3_input_params/input_params_signal.yaml @@ -0,0 +1,50 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_config.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_61_61.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_signal # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +run_mode: 0 diff --git a/examples/eg2_earthquake_location/README.md b/examples/eg2_earthquake_location/README.md new file mode 100644 index 0000000..8d2cf5b --- /dev/null +++ b/examples/eg2_earthquake_location/README.md @@ -0,0 +1,29 @@ +# earthquake location + +This is a toy model to invert traveltimes for locating earthquakes (Figure 8a.) + +Reference: +[1] J. Chen, M. Nagaso, M. Xu, and P. Tong, TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy, submitted. +https://doi.org/10.48550/arXiv.2412.00031 + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + +2. After inversion, run `plot_output.py` to plot the results. + +The initial and true models: + +![](img/model_setting.jpg) + +The location results: + +![](img/model_loc.jpg) + + diff --git a/examples/eg2_earthquake_location/assign_gaussian_noise.py b/examples/eg2_earthquake_location/assign_gaussian_noise.py new file mode 100644 index 0000000..354e0dd --- /dev/null +++ b/examples/eg2_earthquake_location/assign_gaussian_noise.py @@ -0,0 +1,30 @@ +from pytomoatt.src_rec import SrcRec + +class AssignNoise: + def __init__(self, in_fname, out_fname): + self.in_fname = in_fname + self.out_fname = out_fname + self.sr = SrcRec.read(self.in_fname) + + def assign_noise_for_tt(self, noise_level=0.1): + self.sr.add_noise(noise_level) + + def assign_noise_for_src(self, lat_pert=0.1, lon_pert=0.1, dep_pert=10, tau_pert=0.5): + self.sr.add_noise_to_source(lat_pert, lon_pert, dep_pert, tau_pert) + +if __name__ == "__main__": + in_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward.dat" # input source receiver file + out_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat" # output source receiver file + sigma = 0.1 # noise level in seconds + lat_pert = 0.1 # assign noise for latitude in degrees + lon_pert = 0.1 # assign noise for longitude in degrees + dep_pert = 10 # assign noise for depth in km + tau_pert = 0.5 # assign noise for origin time in seconds + # Initialize the instance + an = AssignNoise(in_fname, out_fname) + # Assign noise for travel time + an.assign_noise_for_tt(sigma) + # Assign noise for source + an.assign_noise_for_src(lat_pert, lon_pert, dep_pert, tau_pert) + # Write the output file + an.sr.write(out_fname) diff --git a/examples/eg2_earthquake_location/plot_output.py b/examples/eg2_earthquake_location/plot_output.py new file mode 100644 index 0000000..c4b7922 --- /dev/null +++ b/examples/eg2_earthquake_location/plot_output.py @@ -0,0 +1,254 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +import os + +# %% +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# read models + +Ngrid = [61,61,61] +data_file = '2_models/model_init_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +par_file = '3_input_params/input_params_signal.yaml' +model = ATTModel.read(data_file, par_file) +initial_model = model.to_xarray() + +data_file = '2_models/model_ckb_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +model = ATTModel.read(data_file, par_file) +ckb_model = model.to_xarray() + +# initial model +depth = 10.0 +vel_init = initial_model.interp_dep(depth, field='vel') +start = [1.25,0]; end = [1.25,2] +vel_init_sec = initial_model.interp_sec(start, end, field='vel', val = 1) + +# checkerboard model +vel_ckb = ckb_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] +vel_ckb_sec = ckb_model.interp_sec(start, end, field='vel', val = 1) + +# anisotropic arrow +samp_interval = 3 +length = 7 +width = 0.1 +ani_thd = 0.02 + +ani_ckb_phi = ckb_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_ckb_epsilon = ckb_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_ckb = np.hstack([ani_ckb_phi, ani_ckb_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_ckb_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_ckb_epsilon[:,2] > ani_thd) +ani_ckb = ani_ckb[idx[0],:] + +try: + os.mkdir('img') +except: + pass + +# %% +# read src_rec_file for data +from pytomoatt.src_rec import SrcRec + +sr = SrcRec.read('1_src_rec_files/src_rec_config.dat') +station = sr.receivers[['stlo','stla','stel']].values.T +true_loc = sr.sources[['evlo','evla','evdp']].values.T +earthquake = true_loc + +sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat') +init_loc = sr.sources[['evlo','evla','evdp']].values.T + +# %% +# categorize earthquakes +ev_idx1 = [] +ev_idx2 = [] +ev_idx3 = [] +for i in range(earthquake.shape[1]): + dep = earthquake[2,i] + if dep < 15: + ev_idx1.append(i) + elif dep < 25: + ev_idx2.append(i) + elif dep < 35: + ev_idx3.append(i) + +# %% +# plot the model setting +fig = pygmt.Figure() + +region = [0,2,0,2] +frame = ["xa1","ya1"] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +# -------------- initial model and earthquake location -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tInitial model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_ckb[:,0]; y = vel_ckb[:,1]; value = (vel_ckb[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = init_loc[0,ev_idx1], y = init_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = init_loc[0,ev_idx2], y = init_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = init_loc[0,ev_idx3], y = init_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +fig.plot(x = station[0,:], y = station[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_ckb_sec[:,3]; y = vel_ckb_sec[:,1]; value = (vel_ckb_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = init_loc[2,ev_idx1], y = init_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = init_loc[2,ev_idx2], y = init_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = init_loc[2,ev_idx3], y = init_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + +fig.shift_origin(xshift=4) + + +# -------------- true model and earthquake location -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tTrue model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_ckb[:,0]; y = vel_ckb[:,1]; value = (vel_ckb[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = earthquake[0,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = earthquake[0,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = earthquake[0,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +# fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_ckb_sec[:,3]; y = vel_ckb_sec[:,1]; value = (vel_ckb_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = earthquake[2,ev_idx1], y = earthquake[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = earthquake[2,ev_idx2], y = earthquake[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = earthquake[2,ev_idx3], y = earthquake[1,ev_idx3], style = "c0.1c", fill = "black") + + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + +fig.show() +fig.savefig('img/model_setting.png', dpi=300) + +# %% +# plot the location result + +# read models +tag = "loc" +data_file = "OUTPUT_FILES/OUTPUT_FILES_%s/final_model.h5"%(tag) +model = ATTModel.read(data_file, par_file) +inv_model = model.to_xarray() +vel_inv = inv_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] +x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +vel_inv_sec = inv_model.interp_sec(start, end, field='vel', val = 1) +x_sec = vel_inv_sec[:,3]; y_sec = vel_inv_sec[:,1]; value_sec = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 + +ani_inv_phi = inv_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_inv_epsilon = inv_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_inv = np.hstack([ani_inv_phi, ani_inv_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_inv_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_inv_epsilon[:,2] > ani_thd) +ani_inv = ani_inv[idx[0],:] + +sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_loc/src_rec_file_reloc_0201.dat') +re_loc = sr.sources[['evlo','evla','evdp']].values.T + +# plot the inversion result + +fig = pygmt.Figure() + +region = [0,2,0,2] +frame = ["xa1","ya1","+tLocation results"] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +# -------------- checkerboard model -------------- +fig.basemap(region=region, frame=frame, projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = re_loc[0,ev_idx1], y = re_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = re_loc[0,ev_idx2], y = re_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = re_loc[0,ev_idx3], y = re_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +# fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_inv, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_inv_sec[:,3]; y = vel_inv_sec[:,1]; value = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = re_loc[2,ev_idx1], y = re_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = re_loc[2,ev_idx2], y = re_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = re_loc[2,ev_idx3], y = re_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + + +fig.show() +fig.savefig('img/model_%s.png'%(tag), dpi=300) + + diff --git a/examples/eg2_earthquake_location/prepare_input_files.py b/examples/eg2_earthquake_location/prepare_input_files.py new file mode 100644 index 0000000..2c3bf9d --- /dev/null +++ b/examples/eg2_earthquake_location/prepare_input_files.py @@ -0,0 +1,61 @@ +import numpy as np +import os +import sys +try: + from pytomoatt.checkerboard import Checker + from pytomoatt.src_rec import SrcRec + from pytomoatt.model import ATTModel +except: + print("ERROR: ATTModel not found. Please install pytomoatt first." + "See https://tomoatt.github.io/PyTomoATT/installation.html for details.") + sys.exit(1) + + +class BuildInitialModel(): + def __init__(self, par_file="./3_input_params/input_params_signal.yaml", output_dir="2_models"): + """ + Build initial model for tomography inversion + """ + self.am = ATTModel(par_file) + self.output_dir = output_dir + + def build_initial_model(self, vel_min=5.0, vel_max=8.0): + """ + Build initial model for tomography inversion + """ + self.am.vel[self.am.depths < 0, :, :] = vel_min + idx = np.where((0 <= self.am.depths) & (self.am.depths < 40.0))[0] + self.am.vel[idx, :, :] = np.linspace(vel_min, vel_max, idx.size)[::-1][:, np.newaxis, np.newaxis] + self.am.vel[self.am.depths >= 40.0, :, :] = vel_max + + +def build_ckb_model(output_dir="2_models"): + cbk = Checker(f'{output_dir}/model_init_N61_61_61.h5', para_fname="./3_input_params/input_params_signal.yaml") + cbk.checkerboard( + n_pert_x=2, n_pert_y=2, n_pert_z=2, + pert_vel=0.2, pert_ani=0.1, ani_dir=60.0, + lim_x=[0.5, 1.5], lim_y=[0.5, 1.5], lim_z=[0, 40] + ) + cbk.write(f'{output_dir}/model_ckb_N61_61_61.h5') + + +if __name__ == "__main__": + # download src_rec_file + url = 'https://zenodo.org/records/14053821/files/src_rec_config.dat' + path = "1_src_rec_files/src_rec_config.dat" + os.makedirs(os.path.dirname(path), exist_ok=True) + if not os.path.exists(path): + sr = SrcRec.read(url) + sr.write(path) + + # build initial model + output_dir = "2_models" + os.makedirs(output_dir, exist_ok=True) + + bim = BuildInitialModel(output_dir=output_dir) + bim.build_initial_model() + bim.am.write('{}/model_init_N{:d}_{:d}_{:d}.h5'.format(bim.output_dir, *bim.am.n_rtp)) + + build_ckb_model(output_dir) + + diff --git a/examples/eg2_earthquake_location/run_this_example.sh b/examples/eg2_earthquake_location/run_this_example.sh new file mode 100644 index 0000000..9d0bbe9 --- /dev/null +++ b/examples/eg2_earthquake_location/run_this_example.sh @@ -0,0 +1,27 @@ +#!/bin/bash + + +# Step 1: Generate necessary input files +python prepare_input_files.py + +# Step 2: Run forward modeling +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_signal.yaml + +# Step 3: Assign data noise and location perturbation to the observational data +python assign_gaussian_noise.py + +# Step 4: Do relocation +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_loc.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_loc.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_loc.yaml + +# Step 5 (Optional): Plot the results +# python plot_output.py \ No newline at end of file diff --git a/examples/eg3_joint_inversion/3_input_params/input_params_joint_step1.yaml b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step1.yaml new file mode 100644 index 0000000..974227e --- /dev/null +++ b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step1.yaml @@ -0,0 +1,114 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N61_61_61.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_joint_step1 # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 2 + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime: [10.0, 15.0, 15.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime: [10.0, 15.0, 15.0, 1.0] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 50 # maximum number of iterations for relocation + tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : true # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) diff --git a/examples/eg3_joint_inversion/3_input_params/input_params_joint_step2.yaml b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step2.yaml new file mode 100644 index 0000000..8dd4d8e --- /dev/null +++ b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step2.yaml @@ -0,0 +1,312 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_joint_step1/src_rec_file_reloc_0050_obs.dat # source receiver file path + swap_src_rec: true # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged) + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N61_61_61.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_joint_step2 # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'. + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do). + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 3 + +have_tele_data: false # An error will be reported if false but source out of study region is used. Default: false. + + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 40 # maximum number of inversion iterations + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + #common parameters for all optim methods + step_length: 0.02 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction + # if step_method:0. if objective function increase, step size -> step length * step_length_decay. + step_length_decay: 0.9 # default: 0.9 + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.2] # default: [0.5,1.2] + # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion + # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is fully normalized. 0.5 or less is recommended if really required. + Kdensity_coe: 0 # default: 0.0, limited range: 0.0 - 0.95 + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 20 # maximum number of each sub-iteration + regularization_weight: 0.5 # weight value for regularization (lbfgs mode only) + coefs_regulalization_rtp: [1, 1, 1] # regularization coefficients for rtp (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: true # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: true # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # -------------- uniform inversion grid setting -------------- + # settings for uniform inversion grid + n_inv_dep_lat_lon: [12, 9, 9] # number of the base inversion grid points + min_max_dep_inv: [-10, 50] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv: [0, 2] # latitude in degree + min_max_lon_inv: [0, 2] # longitude in degree + + # -------------- flexible inversion grid setting -------------- + # settings for flexible inversion grid + dep_inv: [-10, 0, 10, 20, 30, 40, 50, 60] # inversion grid for vel in depth (km) + lat_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in latitude (degree) + lon_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: false + + # ---------- uniform inversion grid setting for anisotropy ---------- + n_inv_dep_lat_lon_ani: [12, 11, 11] # number of the base inversion grid points + min_max_dep_inv_ani: [-7, 63] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv_ani: [30, 32] # latitude in degree + min_max_lon_inv_ani: [30, 32] # longitude in degree + + # ---------- flexible inversion grid setting for anisotropy ---------- + # settings for flexible inversion grid for anisotropy + dep_inv_ani: [-7, -3, 0, 3, 7, 12, 18, 25, 33, 42, 52, 63] # inversion grid for ani in depth (km) + lat_inv_ani: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for ani in latitude (degree) + lon_inv_ani: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for ani in longitude (degree) + trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + # inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh), + # this precondition may be carefully applied if the sizes of inversion grids are unbalanced + invgrid_volume_rescale: false + + # path to station correction file (under development) + use_sta_correction: false + # initial_sta_correction_file: dummy_sta_correction_file # the path of initial station correction + step_length_sta_correction: 0.001 # step length relate to the update of station correction terms + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [100, 200, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : true # update azimuthal anisotropy (xi, eta) or not. default: false + + # -------------- for teleseismic inversion (under development) -------------- + # depth_taper : [d1,d2] means: + # if XXX < d1, kernel <- kernel * 0.0 + # if d1 <= XXX < d2, kernel <- kernel * (XXX-d1)/(d2-d1), (linear interpolation) + # if d2 <= XXX , kernel <- kernel * 1.0 + # You can easily set d1 = -200, d1 = -100 to remove this taper. + depth_taper : [-1e+07, -1e+07] + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10, 15, 15, 1] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [10, 15, 15, 1] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 201 # maximum number of iterations for relocation + tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : true # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight : [1, 3, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight : [100, 200, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [15, 30, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight : [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_local_weight: 1 # weight of absolute traveltime data for relocation after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data for relocation after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data for relocation after balance, default: 1.0 + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode : 1 # 0 for update model parameters and relocation iteratively. 1 for update model parameters and relocation simultaneously. + + # for inv_mode : 0, parameters below are required + inv_mode_0: # update model for steps, then update location for steps, and repeat the process for loops. + model_update_N_iter : 1 + relocation_N_iter : 1 + max_loop : 10 + + # for inv_mode : 1, parameters below are required + inv_mode_1: # update model and location simultaneously for loops. + max_loop : 40 diff --git a/examples/eg3_joint_inversion/3_input_params/input_params_joint_step3.yaml b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step3.yaml new file mode 100644 index 0000000..60046e3 --- /dev/null +++ b/examples/eg3_joint_inversion/3_input_params/input_params_joint_step3.yaml @@ -0,0 +1,139 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_joint_step2/src_rec_file_inv_0039_reloc_0039_obs.dat # source receiver file path + swap_src_rec: true # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged) + +################################################# +# initial model file path # +################################################# +model: + init_model_path: OUTPUT_FILES/OUTPUT_FILES_joint_step2/final_model.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_joint_step3 # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'. + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do). + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 2 + +have_tele_data: false # An error will be reported if false but source out of study region is used. Default: false. + + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10, 15, 15, 1] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [10, 15, 15, 1] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 100 # maximum number of iterations for relocation + tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : false # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight : [1, 3, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight : [100, 200, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [15, 30, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight : [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_local_weight: 1 # weight of absolute traveltime data for relocation after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data for relocation after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data for relocation after balance, default: 1.0 diff --git a/examples/eg3_joint_inversion/3_input_params/input_params_signal.yaml b/examples/eg3_joint_inversion/3_input_params/input_params_signal.yaml new file mode 100644 index 0000000..376d749 --- /dev/null +++ b/examples/eg3_joint_inversion/3_input_params/input_params_signal.yaml @@ -0,0 +1,50 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_config.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_61_61.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_signal # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +run_mode: 0 diff --git a/examples/eg3_joint_inversion/README.md b/examples/eg3_joint_inversion/README.md new file mode 100644 index 0000000..b6f0a61 --- /dev/null +++ b/examples/eg3_joint_inversion/README.md @@ -0,0 +1,29 @@ +# joint inversion + +This is a toy model to simultaneously update model parameters and locate earthquakes (Figure 8e.) + +Reference: +[1] J. Chen, M. Nagaso, M. Xu, and P. Tong, TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy, submitted. +https://doi.org/10.48550/arXiv.2412.00031 + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + +2. After inversion, run `plot_output.py` to plot the results. + +The initial and true models: + +![](img/model_setting.jpg) + +The inversion results: + +![](img/model_joint.jpg) + + diff --git a/examples/eg3_joint_inversion/assign_gaussian_noise.py b/examples/eg3_joint_inversion/assign_gaussian_noise.py new file mode 100644 index 0000000..22b4ddf --- /dev/null +++ b/examples/eg3_joint_inversion/assign_gaussian_noise.py @@ -0,0 +1,34 @@ +from pytomoatt.src_rec import SrcRec + +class AssignNoise: + def __init__(self, in_fname, out_fname): + self.in_fname = in_fname + self.out_fname = out_fname + self.sr = SrcRec.read(self.in_fname) + + def assign_noise_for_tt(self, noise_level=0.1): + self.sr.add_noise(noise_level) + + def assign_noise_for_src(self, lat_pert=0.1, lon_pert=0.1, dep_pert=10, tau_pert=0.5): + self.sr.add_noise_to_source(lat_pert, lon_pert, dep_pert, tau_pert) + +if __name__ == "__main__": + in_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward.dat" # input source receiver file + out_fname = "OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat" # output source receiver file + sigma = 0.1 # noise level in seconds + lat_pert = 0.1 # assign noise for latitude in degrees + lon_pert = 0.1 # assign noise for longitude in degrees + dep_pert = 10 # assign noise for depth in km + tau_pert = 0.5 # assign noise for origin time in seconds + + # Initialize the instance + an = AssignNoise(in_fname, out_fname) + + # Assign noise for travel time + an.assign_noise_for_tt(sigma) + + # Assign noise for source + an.assign_noise_for_src(lat_pert, lon_pert, dep_pert, tau_pert) + + # Write the output file + an.sr.write(out_fname) \ No newline at end of file diff --git a/examples/eg3_joint_inversion/plot_output.py b/examples/eg3_joint_inversion/plot_output.py new file mode 100644 index 0000000..e6d0cf1 --- /dev/null +++ b/examples/eg3_joint_inversion/plot_output.py @@ -0,0 +1,286 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +import os + +# %% +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# read models + +Ngrid = [61,61,61] +data_file = '2_models/model_init_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +par_file = '3_input_params/input_params_signal.yaml' +model = ATTModel.read(data_file, par_file) +initial_model = model.to_xarray() + +data_file = '2_models/model_ckb_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +model = ATTModel.read(data_file, par_file) +ckb_model = model.to_xarray() + +# initial model +depth = 10.0 +vel_init = initial_model.interp_dep(depth, field='vel') +start = [1.25,0]; end = [1.25,2] +vel_init_sec = initial_model.interp_sec(start, end, field='vel', val = 1) + +# checkerboard model +vel_ckb = ckb_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] +vel_ckb_sec = ckb_model.interp_sec(start, end, field='vel', val = 1) + +# anisotropic arrow +samp_interval = 3 +length = 7 +width = 0.1 +ani_thd = 0.02 + +ani_ckb_phi = ckb_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_ckb_epsilon = ckb_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_ckb = np.hstack([ani_ckb_phi, ani_ckb_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_ckb_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_ckb_epsilon[:,2] > ani_thd) +ani_ckb = ani_ckb[idx[0],:] + +try: + os.mkdir('img') +except: + pass + +# %% +# read src_rec_file for data +from pytomoatt.src_rec import SrcRec + +sr = SrcRec.read('1_src_rec_files/src_rec_config.dat') +station = sr.receivers[['stlo','stla','stel']].values.T +true_loc = sr.sources[['evlo','evla','evdp']].values.T +earthquake = true_loc + +sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_signal/src_rec_file_forward_errloc.dat') +init_loc = sr.sources[['evlo','evla','evdp']].values.T + +# %% +# categorize earthquakes +ev_idx1 = [] +ev_idx2 = [] +ev_idx3 = [] +for i in range(earthquake.shape[1]): + dep = earthquake[2,i] + if dep < 15: + ev_idx1.append(i) + elif dep < 25: + ev_idx2.append(i) + elif dep < 35: + ev_idx3.append(i) + +# %% +# plot the model setting +fig = pygmt.Figure() + +region = [0,2,0,2] +frame = ["xa1","ya1"] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +# -------------- initial model and earthquake location -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tInitial model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_init[:,0]; y = vel_init[:,1]; value = (vel_init[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = init_loc[0,ev_idx1], y = init_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = init_loc[0,ev_idx2], y = init_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = init_loc[0,ev_idx3], y = init_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +fig.plot(x = station[0,:], y = station[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# # anisotropic arrow +# fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_init_sec[:,3]; y = vel_init_sec[:,1]; value = (vel_init_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = init_loc[2,ev_idx1], y = init_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = init_loc[2,ev_idx2], y = init_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = init_loc[2,ev_idx3], y = init_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + +fig.shift_origin(xshift=4) + + +# -------------- true model and earthquake location -------------- +fig.basemap(region=region, frame=["xa1","ya1","+tTrue model and locations"], projection=projection) +# velocity perturbation +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) +x = vel_ckb[:,0]; y = vel_ckb[:,1]; value = (vel_ckb[:,2] - vel_init[:,2])/vel_init[:,2] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) +fig.grdimage(grid = grid) +# earthquakes +fig.plot(x = true_loc[0,ev_idx1], y = true_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = true_loc[0,ev_idx2], y = true_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = true_loc[0,ev_idx3], y = true_loc[1,ev_idx3], style = "c0.1c", fill = "black") + +# stations +# fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + +# anisotropic arrow +fig.plot(ani_ckb, style='j', fill='yellow1', pen='0.5p,black') + +fig.shift_origin(xshift=11) + +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") +x = vel_ckb_sec[:,3]; y = vel_ckb_sec[:,1]; value = (vel_ckb_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 +grid = pygmt.surface(x=x, y=y, z=value, spacing="1/0.04",region=[0,40,0,2]) +fig.grdimage(grid = grid) + +# earthquakes +fig.plot(x = true_loc[2,ev_idx1], y = true_loc[1,ev_idx1], style = "c0.1c", fill = "red") +fig.plot(x = true_loc[2,ev_idx2], y = true_loc[1,ev_idx2], style = "c0.1c", fill = "green") +fig.plot(x = true_loc[2,ev_idx3], y = true_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + +fig.show() +fig.savefig('img/model_setting.png', dpi=300) + +# %% +# plot the joint inversion results + +fig = pygmt.Figure() + +region = [0,2,0,2] +projection = "M10c" +spacing = 0.04 + +vel_range = 20 + +tag_list = ["joint_step1", "joint_step2", "joint_step3"] + +for itag, tag in enumerate(tag_list): + + if (tag == "joint_step1"): + # model + x = vel_init[:,0]; y = vel_init[:,1]; value = (vel_init[:,2] - vel_init[:,2])/vel_init[:,2] * 100 + x_sec = vel_init_sec[:,3]; y_sec = vel_init_sec[:,1]; value_sec = (vel_init_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 + + # location + sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_%s/src_rec_file_reloc_0050.dat'%(tag)) + re_loc = sr.sources[['evlo','evla','evdp']].values.T + + frame = ["xa1","ya1","+tStep %d, preliminary location"%(itag+1)] + elif (tag == "joint_step2"): + # model + data_file = "OUTPUT_FILES/OUTPUT_FILES_%s/final_model.h5"%(tag) + model = ATTModel.read(data_file, par_file) + inv_model = model.to_xarray() + vel_inv = inv_model.interp_dep(depth, field='vel') # lon = [:,0], lat = [:,1], vel = [:,2] + x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 + vel_inv_sec = inv_model.interp_sec(start, end, field='vel', val = 1) + x_sec = vel_inv_sec[:,3]; y_sec = vel_inv_sec[:,1]; value_sec = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 + + ani_inv_phi = inv_model.interp_dep(depth, field='phi', samp_interval=samp_interval) + ani_inv_epsilon = inv_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) + ani_inv = np.hstack([ani_inv_phi, ani_inv_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_inv_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width + idx = np.where(ani_inv_epsilon[:,2] > ani_thd) + ani = ani_inv[idx[0],:] + + # location + sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_%s/src_rec_file_inv_0039_reloc_0039.dat'%(tag)) + re_loc = sr.sources[['evlo','evla','evdp']].values.T + + frame = ["xa1","ya1","+tStep %d, joint inversion"%(itag+1)] + elif (tag == "joint_step3"): + + # model + x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 + x_sec = vel_inv_sec[:,3]; y_sec = vel_inv_sec[:,1]; value_sec = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 + ani = ani_inv[idx[0],:] + + # location + sr = SrcRec.read('OUTPUT_FILES/OUTPUT_FILES_%s/src_rec_file_reloc_0100.dat'%(tag)) + re_loc = sr.sources[['evlo','evla','evdp']].values.T + + frame = ["xa1","ya1","+tStep %d, relocation"%(itag+1)] + + # plot the inversion result + + + # -------------- inversion model -------------- + fig.basemap(region=region, frame=frame, projection=projection) + # velocity perturbation + pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-vel_range, vel_range], background=True, reverse=False) + grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) + fig.grdimage(grid = grid) + # earthquakes + fig.plot(x = re_loc[0,ev_idx1], y = re_loc[1,ev_idx1], style = "c0.1c", fill = "red") + fig.plot(x = re_loc[0,ev_idx2], y = re_loc[1,ev_idx2], style = "c0.1c", fill = "green") + fig.plot(x = re_loc[0,ev_idx3], y = re_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + # stations + # fig.plot(x = loc_st[0,:], y = loc_st[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + + # anisotropic arrow + if (tag == "joint_step2" or tag == "joint_step3"): + fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') + + fig.shift_origin(xshift=11) + + fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","Nswe"], projection="X2c/10c") + grid = pygmt.surface(x=x_sec, y=y_sec, z=value_sec, spacing="1/0.04",region=[0,40,0,2]) + fig.grdimage(grid = grid) + + # earthquakes + fig.plot(x = re_loc[2,ev_idx1], y = re_loc[1,ev_idx1], style = "c0.1c", fill = "red") + fig.plot(x = re_loc[2,ev_idx2], y = re_loc[1,ev_idx2], style = "c0.1c", fill = "green") + fig.plot(x = re_loc[2,ev_idx3], y = re_loc[1,ev_idx3], style = "c0.1c", fill = "black") + + fig.shift_origin(xshift=4) + +# ------------------- colorbar ------------------- +fig.shift_origin(xshift=-4) + +fig.shift_origin(xshift=-11, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(vel_range),"x+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.shift_origin(xshift=6, yshift=-1) +fig.basemap(region=[0,1,0,1], frame=["wesn"], projection="X6c/1.5c") +ani = [ + [0.2, 0.6, 45, 0.02*length, width], # lon, lat, phi, epsilon, size + [0.5, 0.6, 45, 0.05*length, width], + [0.8, 0.6, 45, 0.10*length, width], + ] +fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black') +fig.text(text=["0.02", "0.05", "0.10"], x=[0.2,0.5,0.8], y=[0.2]*3, font="16p,Helvetica", justify="CM") +fig.shift_origin(xshift= 11, yshift=2.5) + + +fig.show() +fig.savefig('img/model_joint.png', dpi=300) + + diff --git a/examples/eg3_joint_inversion/prepare_input_files.py b/examples/eg3_joint_inversion/prepare_input_files.py new file mode 100644 index 0000000..13869cd --- /dev/null +++ b/examples/eg3_joint_inversion/prepare_input_files.py @@ -0,0 +1,63 @@ +# download src_ref_files from Zenodo +import os +import numpy as np +import sys +try: + from pytomoatt.model import ATTModel + from pytomoatt.checkerboard import Checker + from pytomoatt.src_rec import SrcRec +except: + print("ERROR: ATTModel not found. Please install pytomoatt first." + "See https://tomoatt.github.io/PyTomoATT/installation.html for details.") + sys.exit(1) + + +class BuildInitialModel(): + def __init__(self, par_file="./3_input_params/input_params_signal.yaml", output_dir="2_models"): + """ + Build initial model for tomography inversion + """ + self.am = ATTModel(par_file) + self.output_dir = output_dir + + def build_initial_model(self, vel_min=5.0, vel_max=8.0): + """ + Build initial model for tomography inversion + """ + self.am.vel[self.am.depths < 0, :, :] = vel_min + idx = np.where((0 <= self.am.depths) & (self.am.depths < 40.0))[0] + self.am.vel[idx, :, :] = np.linspace(vel_min, vel_max, idx.size)[::-1][:, np.newaxis, np.newaxis] + self.am.vel[self.am.depths >= 40.0, :, :] = vel_max + + +def build_ckb_model(output_dir="2_models"): + cbk = Checker(f'{output_dir}/model_init_N61_61_61.h5', para_fname="./3_input_params/input_params_signal.yaml") + cbk.checkerboard( + n_pert_x=2, n_pert_y=2, n_pert_z=2, + pert_vel=0.2, pert_ani=0.1, ani_dir=60.0, + lim_x=[0.5, 1.5], lim_y=[0.5, 1.5], lim_z=[0, 40] + ) + cbk.write(f'{output_dir}/model_ckb_N61_61_61.h5') + + +if __name__ == "__main__": + # download src_rec_config.dat + url = 'https://zenodo.org/records/14053821/files/src_rec_config.dat' + path = "1_src_rec_files/src_rec_config.dat" + os.makedirs(os.path.dirname(path), exist_ok=True) + if not os.path.exists(path): + sr = SrcRec.read(url) + sr.write(path) + + # build initial model + output_dir = "2_models" + os.makedirs(output_dir, exist_ok=True) + bim = BuildInitialModel(output_dir=output_dir) + bim.build_initial_model() + bim.am.write('{}/model_init_N{:d}_{:d}_{:d}.h5'.format(bim.output_dir, *bim.am.n_rtp)) + + # build ckb model + build_ckb_model(output_dir) + + + diff --git a/examples/eg3_joint_inversion/run_this_example.sh b/examples/eg3_joint_inversion/run_this_example.sh new file mode 100644 index 0000000..1fbcdea --- /dev/null +++ b/examples/eg3_joint_inversion/run_this_example.sh @@ -0,0 +1,40 @@ +#!/bin/bash + + +# Step 1: Generate necessary input files +python prepare_input_files.py + +# Step 2: Run forward modeling +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_signal.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_signal.yaml + +# Step 3: Assign data noise and location perturbation to the observational data +python assign_gaussian_noise.py + +# Step 4: Do joint inversion +# # for WSL +# # step 1. relocation for 50 iterations in the initial model, using traveltimes and common-receiver differential arrival times +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step1.yaml +# # step 2. simultaneously update model parameters and locations for 40 iterations, +# # using traveltimes and common-source differential arrival times for model update +# # using traveltimes and common-receiver differential arrival times for location +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step2.yaml +# # step 3. relocation for 50 iterations in the initial model, using only common-receiver differential arrival times +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step3.yaml + +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step1.yaml +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step2.yaml +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_joint_step3.yaml + +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_joint_step1.yaml +mpirun -n 8 TOMOATT -i 3_input_params/input_params_joint_step2.yaml +mpirun -n 8 TOMOATT -i 3_input_params/input_params_joint_step3.yaml + +# Step 5 (Optional): Plot the results +python plot_output.py \ No newline at end of file diff --git a/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_inv.yaml b/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_inv.yaml new file mode 100644 index 0000000..1ddddd3 --- /dev/null +++ b/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_inv.yaml @@ -0,0 +1,215 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/OUTPUT_FILES_1dinv_signal/src_rec_file_step_0000.dat # source receiver file path + swap_src_rec: true # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged) + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N61_61_61.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_1dinv_inv # path to output director (default is ./OUTPUT_FILES/) + output_source_field: true # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'. + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do). + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 4 + +have_tele_data: false # An error will be reported if false but source out of study region is used. Default: false. + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 200 # maximum number of inversion iterations + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + #common parameters for all optim methods + step_length: 0.02 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction + # if step_method:0. if objective function increase, step size -> step length * step_length_decay. + step_length_decay: 0.9 # default: 0.9 + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.2] # default: [0.5,1.2] + # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion + # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is fully normalized. 0.5 or less is recommended if really required. + Kdensity_coe: 0 # default: 0.0, limited range: 0.0 - 0.95 + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: true # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: true # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: true # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # -------------- uniform inversion grid setting -------------- + # settings for uniform inversion grid + n_inv_dep_lat_lon: [13, 9, 9] # number of the base inversion grid points + min_max_dep_inv: [-10, 50] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv: [0, 2] # latitude in degree + min_max_lon_inv: [0, 2] # longitude in degree + + # -------------- flexible inversion grid setting -------------- + # settings for flexible inversion grid + dep_inv: [-10, 0, 10, 20, 30, 40, 50, 60] # inversion grid for vel in depth (km) + lat_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in latitude (degree) + lon_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [100, 200, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false diff --git a/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_signal.yaml b/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_signal.yaml new file mode 100644 index 0000000..025b2fe --- /dev/null +++ b/examples/eg4_1d_inversion/3_input_params/input_params_1dinv_signal.yaml @@ -0,0 +1,215 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 2] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 61, 61] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_config.dat # source receiver file path + swap_src_rec: true # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged) + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_61_61.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_1dinv_signal # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'. + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do). + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 4 + +have_tele_data: false # An error will be reported if false but source out of study region is used. Default: false. + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 1 # maximum number of inversion iterations + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + #common parameters for all optim methods + step_length: 0.02 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction + # if step_method:0. if objective function increase, step size -> step length * step_length_decay. + step_length_decay: 0.9 # default: 0.9 + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.2] # default: [0.5,1.2] + # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion + # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is fully normalized. 0.5 or less is recommended if really required. + Kdensity_coe: 0 # default: 0.0, limited range: 0.0 - 0.95 + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: true # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: true # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # -------------- uniform inversion grid setting -------------- + # settings for uniform inversion grid + n_inv_dep_lat_lon: [12, 9, 9] # number of the base inversion grid points + min_max_dep_inv: [-10, 50] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv: [0, 2] # latitude in degree + min_max_lon_inv: [0, 2] # longitude in degree + + # -------------- flexible inversion grid setting -------------- + # settings for flexible inversion grid + dep_inv: [-10, 0, 10, 20, 30, 40, 50, 60] # inversion grid for vel in depth (km) + lat_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in latitude (degree) + lon_inv: [30, 30.2, 30.4, 30.6, 30.8, 31, 31.2, 31.4, 31.6, 31.8, 32] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [100, 200, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [15, 30, 1, 1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false diff --git a/examples/eg4_1d_inversion/plot_output.py b/examples/eg4_1d_inversion/plot_output.py new file mode 100644 index 0000000..9a86fef --- /dev/null +++ b/examples/eg4_1d_inversion/plot_output.py @@ -0,0 +1,37 @@ +import h5py +import matplotlib.pyplot as plt +import numpy as np +import os + +try: + os.mkdir("img") +except: + pass + +dep = np.linspace(50,-10, 61) + +with h5py.File("OUTPUT_FILES/OUTPUT_FILES_1dinv_inv/final_model.h5", "r") as f: + vel_final= np.array(f["vel"]) +with h5py.File("2_models/model_init_N61_61_61.h5", "r") as f: + vel_init = np.array(f["vel"]) +with h5py.File("2_models/model_ckb_N61_61_61.h5", "r") as f: + vel_ckb = np.array(f["vel"]) + +fig = plt.figure(figsize=(6, 6)) +ax = fig.add_subplot(111) +ax.plot(vel_init[:,0,0] , dep, label="init") +ax.plot(vel_ckb[:,0,0], dep, label="ckb") +ax.plot(vel_final[:,0,0], dep, label="inv") +ax.grid() +ax.set_xlabel("Velocity (m/s)",fontsize=16) +ax.set_ylabel("Depth (km)",fontsize=16) +ax.get_xaxis().set_tick_params(labelsize=16) +ax.get_yaxis().set_tick_params(labelsize=16) +ax.set_xlim([4.5,8.5]) +ax.set_ylim([0,50]) + +plt.gca().invert_yaxis() +plt.legend(fontsize=16) + +plt.show() +fig.savefig("img/1d_model_inversion.png", dpi=300, bbox_inches="tight", edgecolor="w", facecolor="w") diff --git a/examples/eg4_1d_inversion/prepare_input_files.py b/examples/eg4_1d_inversion/prepare_input_files.py new file mode 100644 index 0000000..0cd5cdf --- /dev/null +++ b/examples/eg4_1d_inversion/prepare_input_files.py @@ -0,0 +1,64 @@ +# %% +# download src_ref_files from Zenodo +import os +import numpy as np +import sys +try: + from pytomoatt.model import ATTModel + from pytomoatt.checkerboard import Checker + from pytomoatt.src_rec import SrcRec +except: + print("ERROR: ATTModel not found. Please install pytomoatt first." + "See https://tomoatt.github.io/PyTomoATT/installation.html for details.") + sys.exit(1) + + +class BuildInitialModel(): + def __init__(self, par_file="./3_input_params/input_params_signal.yaml", output_dir="2_models"): + """ + Build initial model for tomography inversion + """ + self.am = ATTModel(par_file) + self.output_dir = output_dir + + def build_initial_model(self, vel_min=5.0, vel_max=8.0): + """ + Build initial model for tomography inversion + """ + self.am.vel[self.am.depths < 0, :, :] = vel_min + idx = np.where((0 <= self.am.depths) & (self.am.depths < 40.0))[0] + self.am.vel[idx, :, :] = np.linspace(vel_min, vel_max, idx.size)[::-1][:, np.newaxis, np.newaxis] + self.am.vel[self.am.depths >= 40.0, :, :] = vel_max + + def build_ckb_model(self): + """ + Build checkerboard model for tomography inversion + """ + nr = self.am.n_rtp[0] + for ir in range(nr): + dep = self.am.depths[ir] + self.am.vel[ir, :, :] = (1 + 0.05 * np.sin(np.pi * dep / 10.0)) * self.am.vel[ir, :, :] + + + +if __name__ == "__main__": + # download src_rec_config.dat + url = 'https://zenodo.org/records/14053821/files/src_rec_config.dat' + path = "1_src_rec_files/src_rec_config.dat" + os.makedirs(os.path.dirname(path), exist_ok=True) + if not os.path.exists(path): + sr = SrcRec.read(url) + sr.write(path) + + # build initial model + output_dir = "2_models" + os.makedirs(output_dir, exist_ok=True) + bim = BuildInitialModel(output_dir=output_dir) + bim.build_initial_model() + bim.am.write('{}/model_init_N{:d}_{:d}_{:d}.h5'.format(bim.output_dir, *bim.am.n_rtp)) + + bim.build_ckb_model() + bim.am.write('{}/model_ckb_N{:d}_{:d}_{:d}.h5'.format(bim.output_dir, *bim.am.n_rtp)) + + + diff --git a/examples/eg4_1d_inversion/run_this_example.sh b/examples/eg4_1d_inversion/run_this_example.sh new file mode 100644 index 0000000..f2e4003 --- /dev/null +++ b/examples/eg4_1d_inversion/run_this_example.sh @@ -0,0 +1,27 @@ +#!/bin/bash + + +# Step 1: Generate necessary input files +echo "Generating TomoATT input files..." +python prepare_input_files.py + +# Step 2: Run forward modeling +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_1dinv_signal.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_1dinv_signal.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_1dinv_signal.yaml + +# Step 3: Do inversion +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_1dinv_inv.yaml +# # for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_1dinv_inv.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_1dinv_inv.yaml + +# Step 4 (Optional): Plot the results +echo "Plotting the results..." +python plot_output.py + diff --git a/examples/realcase1_regional_tomography_California/.DS_Store b/examples/realcase1_regional_tomography_California/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dd0a91e0045390a295ee77804741d1a360b6d675 GIT binary patch literal 6148 zcmeHKu}%Xq47E##tB_Df#ti&Gh1k>T_<|0MKwAWrdfchB`~4j=f5dZaLCdA8SWty* z$$7cNPMnu2u8D{z+r@}zNJIrxus1-H5t$e5NY6%OlG7RuZD~XI)X-zc+6PXN0lB*i zy2hO?=@s|(eSd4*VMTAN=h1XtSB(aLbAHUes>^b=s%Nm1wXZ%l@8jb>i(mURFS~I? zY(WG3_MT{tw#HeO=>3SkxXW7|h&i)fRc9m3SZ3mr7+stJXTTXa1qP6_MGAS-U7P`D zz!}(OK;DM{6^w?hVtP8zq!Iww$8Zw#rIrw%U>FTsMa)20U4iP#R${QaV?3B$G;9^s zo!E*Gww>836i&Ni{gBLwqoTLYfHSbqz?psyCI8F0*MB1oPj@O;1j(JR(${f literal 0 HcmV?d00001 diff --git a/examples/realcase1_regional_tomography_California/3_input_params/input_params_real.yaml b/examples/realcase1_regional_tomography_California/3_input_params/input_params_real.yaml new file mode 100644 index 0000000..39b35ef --- /dev/null +++ b/examples/realcase1_regional_tomography_California/3_input_params/input_params_real.yaml @@ -0,0 +1,186 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-5, 45] # depth in km + min_max_lat: [-2.0, 2.4] # latitude in degree + min_max_lon: [-0.8, 0.8] # longitude in degree + n_rtp: [51, 89, 33] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_file.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N51_89_33.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_inv # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: true + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: true # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: true # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: true # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do) + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 1 + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 80 # maximum number of inversion iterations + + step_length: 0.01 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.41] # default: [0.5,1.2] + Kdensity_coe: 0.3 # default: 0.0, range: 0.0 - 1.0 + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: false # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: false # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # settings for uniform inversion grid + n_inv_dep_lat_lon: [3, 11, 11] # number of inversion grid in depth, latitude, and longitude direction + min_max_dep_inv: [-5 , 5] # inversion grid for vel in depth (km) + min_max_lat_inv: [0, 1] # inversion grid for vel in latitude (degree) + min_max_lon_inv: [0, 1] # inversion grid for vel in longitude (degree) + + # settings for flexible inversion grid + dep_inv: [-5, -2, 0, 3, 7, 12, 17, 23, 30, 38, 47, 57] # inversion grid for vel in depth (km) + lat_inv: [-2.5, -2.2, -1.9, -1.6, -1.3, -1.0, -0.7, -0.4, -0.1, 0.2, 0.5, 0.8, 1.1, 1.4, 1.7, 2.0, 2.3, 2.6] # inversion grid for vel in latitude (degree) + lon_inv: [-1.2, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 0.9, 1.2] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: true + + # ---------- flexible inversion grid setting for anisotropy ---------- + # settings for flexible inversion grid for anisotropy + dep_inv_ani: [-5, -2, 0, 3, 7, 12, 17, 23, 30, 38, 47, 57] # inversion grid for ani in depth (km) + lat_inv_ani: [-2.8, -2.3, -1.8, -1.3, -0.8, -0.3, 0.2, 0.7, 1.2, 1.7, 2.2, 2.7] # inversion grid for ani in latitude (degree) + lon_inv_ani: [-1.2, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 0.9, 1.2] # inversion grid for ani in longitude (degree) + trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : true # update azimuthal anisotropy (xi, eta) or not. default: false diff --git a/examples/realcase1_regional_tomography_California/README.md b/examples/realcase1_regional_tomography_California/README.md new file mode 100644 index 0000000..537aff4 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/README.md @@ -0,0 +1,30 @@ +# Real case of regional tomography in central California near Parkfield + +This is a real case to invert traveltimes for velocity heterogeneity and azimuthal anisotropy in central California near Parkfield + +Reference: + +[1] J. Chen, G. Chen, M. Nagaso, and P. Tong, Adjoint-state traveltime tomography for azimuthally anisotropic media in spherical coordinates. Geophys. J. Int., 234 (2023), pp. 712-736. +https://doi.org/10.1093/gji/ggad093 + +[2] J. Chen, M. Nagaso, M. Xu, and P. Tong, TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy, submitted. +https://doi.org/10.48550/arXiv.2412.00031 + + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + +2. After inversion, run `plot_output.py` to plot the results. + +The imaging results: + +![](img/imaging_result.jpg) + + diff --git a/examples/realcase1_regional_tomography_California/plot_output.py b/examples/realcase1_regional_tomography_California/plot_output.py new file mode 100644 index 0000000..81bd195 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/plot_output.py @@ -0,0 +1,222 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +import os + +# %% +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# read model files + +Ngrid = [51,89,33] +data_file = '2_models/model_init_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +par_file = '3_input_params/input_params_real.yaml' +model = ATTModel.read(data_file, par_file) +initial_model = model.to_xarray() + +data_file = 'OUTPUT_FILES/OUTPUT_FILES_real/final_model.h5' +model = ATTModel.read(data_file, par_file) +inv_model = model.to_xarray() + +# %% +# read earthquakes and stations + +from pytomoatt.src_rec import SrcRec + +# read src_rec_file +sr = SrcRec.read("1_src_rec_files/src_rec_file.dat") + +# rotate back to original coordinates +central_lat = 35.6 +central_lon = -120.45 +rotation_angle = -30 +sr.rotate(central_lat, central_lon, rotation_angle, reverse=True) + +# get the coordinates of the stations and earthquakes +stations = sr.receivers[['stlo','stla','stel']].values.T +earthquakes = sr.sources[['evlo','evla','evdp']].values.T + +print(stations.shape) +print(earthquakes.shape) + +# %% +# study region + +import sys +sys.path.append('../utils') +import functions_for_data as ffd + +lat1 = -1.8; lat2 = 2.2; +lon1 = -0.7; lon2 = 0.7; + +lat_lon_rotate = np.array([[lon1,lat1],[lon1,lat2],[lon2,lat2],[lon2,lat1],[lon1,lat1]]) +lat_lon = ffd.rtp_rotation_reverse(lat_lon_rotate[:,1],lat_lon_rotate[:,0],central_lat,central_lon,rotation_angle) +studt_lat = lat_lon[0] +studt_lon = lat_lon[1] + +# %% +# load topography +region = [-122.8,-118.5,33.5,38] +grid_topo = pygmt.datasets.load_earth_relief(resolution="01m", region=region) +grid_gra = pygmt.grdgradient(grid = grid_topo, azimuth = 0) + +# %% +def line_read(file): + doc=open(file,'r') + file = doc.readlines() + doc.close() + lat = []; lon = []; + for info in file: + tmp = info.split() + lon.append(float(tmp[0])) + lat.append(float(tmp[1])) + return((lat,lon)) + +# %% +# plot imgaing results + +fig = pygmt.Figure() +try: + os.mkdir("img") +except: + pass + + +# ------------------ Sub fig 1. topography ------------------ +region = [-122.8,-118.5,33.5,38] +frame = ["xa1","ya1","nSWe"] +projection = "M10c" + +# topography +pygmt.makecpt(cmap="globe", series=[-4000,4000], background = True) +fig.grdimage(grid=grid_topo, shading = grid_gra, projection=projection, frame=frame,region=region) +# study region +fig.plot(x = studt_lon, y = studt_lat, pen = "1.5p,red") +# earthquakes +fig.plot(x = earthquakes[0,:], y = earthquakes[1,:], style = "c0.02c", fill = "red",label = "Earthquake") +# stations +fig.plot(x = stations[0,:], y = stations[1,:], style = "t0.2c", fill = "blue", pen = "white", label = "Station") + + +fig.basemap(region=[0,1,0,1], frame=["wesn+gwhite"], projection="X4c/2c") +fig.plot(x=0.1, y=0.3, style='c0.2c', fill='red') +fig.text(text="Earthquake", x=0.2, y=0.3, font="16p,Helvetica", justify="LM") +fig.plot(x=0.1, y=0.7, style='t0.4c', fill='blue', pen='black') +fig.text(text="Station", x=0.2, y=0.7, font="16p,Helvetica", justify="LM") + + +# ------------------ Sub fig 2. colorbar ------------------ +fig.shift_origin(xshift= 2, yshift= -2) + +pygmt.makecpt(cmap="globe", series=[-4000,4000], background = True) +fig.colorbar(frame = ["a%f"%(4000),"y+lElevation (m)"], position="+e+w4c/0.3c+h") +fig.shift_origin(yshift=-2) + +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-8, 8], background=True, reverse=False) +fig.colorbar(frame = ["a%f"%(4),"y+ldlnVp (%)"], position="+e+w4c/0.3c+h") +fig.shift_origin(yshift=-2) + +pygmt.makecpt(cmap="cool", series=[0, 0.08], background=True, reverse=False) +fig.colorbar(frame = ["a%f"%(0.04),"y+lAnisotropy"], position="+ef+w4c/0.3c+h") + + + +# ------------------ Sub fig 3. model ------------------ +fig.shift_origin(xshift = 10, yshift=8) + +region_oblique = [-0.7,0.7,-2.2,1.8] +projection = "OA%s/%s/%s/4c"%(central_lon,central_lat,rotation_angle-90.0) +perspective = "30/90" +spacing = "1m" + +depth_list = [4,8,16] + +for idepth, depth in enumerate(depth_list): + + # initial model + vel_init = initial_model.interp_dep(depth, field='vel') + + # output model + vel_inv = inv_model.interp_dep(depth, field='vel') # velocity + epsilon_inv = inv_model.interp_dep(depth, field='epsilon') # magnitude of anisotropy + + # fast velocity directions + samp_interval = 3 + ani_thd = 0.015 + length = 20 + width = 0.1 + + ani_inv_phi = inv_model.interp_dep(depth, field='phi', samp_interval=samp_interval) + ani_inv_epsilon = inv_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) + ani_inv = np.hstack([ani_inv_phi, ani_inv_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_inv_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width + idx = np.where(ani_inv_epsilon[:,2] > ani_thd) + ani = ani_inv[idx[0],:] + + # --------- plot velocity ------------ + if idepth == 0: + frame = ["xa100","ya1","nSwE"] + elif idepth == len(depth_list)-1: + frame = ["xa100","ya1","NsWe"] + else: + frame = ["xa100","ya1","nswe"] + + fig.basemap(region=region_oblique, frame=frame, projection=projection, perspective=perspective) + pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-8, 8], background=True, reverse=False) + + x = vel_init[:,0]; y = vel_init[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 + y,x = ffd.rtp_rotation_reverse(y,x,central_lat,central_lon,rotation_angle) + grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) + fig.grdimage(frame=frame,grid = grid,projection=projection, region=region_oblique,perspective=perspective) # nan_transparent may work + + # tectonic setting + fig.coast(region=region_oblique, frame=frame, projection=projection, perspective=perspective, shorelines="1p,black") # coastlines + (SAFy,SAFx) = line_read("tectonics/SAF") + fig.plot(x = SAFx, y = SAFy, pen = '3.0p,black', perspective = perspective) # SAF + if idepth == 0: + fig.text(text = "SMB", x = -120.45 , y = 35.0, font = "16p,Helvetica-Bold,black", angle = 150, fill = "lightblue", perspective = perspective) # SMB + fig.text(text = "FT", x = -120.6 , y = 36.50, font = "16p,Helvetica-Bold,black", angle = 150, fill = "lightblue", perspective = perspective) # Franciscan terrane + fig.text(text = "ST", x = -121.1 , y = 36.0, font = "16p,Helvetica-Bold,black", angle = 150, fill = "lightblue", perspective = perspective) # Salinian terrane + fig.text(text = "TR", x = -119.30 , y = 34.70, font = "16p,Helvetica-Bold,black", angle = 150, fill = "lightblue", perspective = perspective) # Coast Ranges + + # depth label + fig.text(text="%d km"%(depth), x = -119.8 , y = 34.0, font = "16p,Helvetica-Bold,black", angle = 180, fill = "white", perspective = perspective) # Coast Ranges + + + # --------- plot anisotropy ------------ + fig.shift_origin(yshift=-12) + + fig.basemap(region=region_oblique, frame=frame, projection=projection, perspective=perspective) + pygmt.makecpt(cmap="cool", series=[0, 0.08], background=True) + value = epsilon_inv[:,2] + grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) + fig.grdimage(frame=frame,grid = grid,projection=projection, region=region_oblique,perspective=perspective) # nan_transparent may work + + # tectonic setting + fig.coast(region=region_oblique, frame=frame, projection=projection, perspective=perspective, shorelines="1p,black") # coastlines + (line_y,line_x) = line_read("tectonics/SAF_creeping") + fig.plot(x = line_x, y = line_y, pen = '3.0p,black',perspective = perspective) + (line_y,line_x) = line_read("tectonics/SAF_transition") + fig.plot(x = line_x, y = line_y, pen = '3.0p,red',perspective = perspective) + (line_y,line_x) = line_read("tectonics/SAF_locked") + fig.plot(x = line_x, y = line_y, pen = '3.0p,blue',perspective = perspective) + + # anisotropy + if len(ani) > 0: + # rotate back to original coordinates + x = ani[:,0]; y = ani[:,1] + y,x = ffd.rtp_rotation_reverse(y,x,central_lat,central_lon,rotation_angle) + ani[:,0] = x; ani[:,1] = y; # no need to modify the angle, because the porjection angle and rotate angle are the same + fig.plot(ani, style='j', fill='yellow1', pen='0.5p,black',perspective=perspective) + + fig.shift_origin(xshift=6,yshift=12) + + +fig.show() + +fig.savefig("img/imaging_result.png") + + diff --git a/examples/realcase1_regional_tomography_California/prepare_input_files.py b/examples/realcase1_regional_tomography_California/prepare_input_files.py new file mode 100644 index 0000000..d28a636 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/prepare_input_files.py @@ -0,0 +1,45 @@ +# %% +# download src_ref_files from Zenodo +import os +import requests + +url = 'https://zenodo.org/records/14065341/files/src_rec_file.dat?download=1' + +path = "1_src_rec_files/src_rec_file.dat" + +# check file existence +if not os.path.exists(path): + try: + os.mkdir("1_src_rec_files") + except: + pass + print("Downloading src_rec_file.dat from Zenodo...") + response = requests.get(url, stream=True) + with open(path, 'wb') as out_file: + out_file.write(response.content) + print("Download complete.") +else: + print("src_rec_file.dat already exists.") + +# %% +# download initial model from Zenodo + +url = 'https://zenodo.org/records/14065341/files/model_init_N51_89_33.h5?download=1' + +path = "2_models/model_init_N51_89_33.h5" + +# check file existence +if not os.path.exists(path): + try: + os.mkdir("2_models") + except: + pass + print("Downloading model_init_N51_89_33.h5 from Zenodo...") + response = requests.get(url, stream=True) + with open(path, 'wb') as out_file: + out_file.write(response.content) + print("Download complete.") +else: + print("model_init_N51_89_33.h5 already exists.") + + diff --git a/examples/realcase1_regional_tomography_California/run_this_example.sh b/examples/realcase1_regional_tomography_California/run_this_example.sh new file mode 100644 index 0000000..59016cc --- /dev/null +++ b/examples/realcase1_regional_tomography_California/run_this_example.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Step 1: Generate necessary input files +python prepare_input_files.py + +# Step 2: Run inversion +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_real.yaml +# for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_real.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_real.yaml + +# Step 3 (Optional): Plot the results +python plot_output.py + diff --git a/examples/realcase1_regional_tomography_California/tectonics/SAF b/examples/realcase1_regional_tomography_California/tectonics/SAF new file mode 100644 index 0000000..c91fe84 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/tectonics/SAF @@ -0,0 +1,68 @@ +-122.73566 37.96894 +-122.70941 37.93895 +-122.65033 37.88999 +-122.62177 37.83209 +-122.59009 37.79618 +-122.56673 37.74661 +-122.51982 37.71281 +-122.47924 37.65959 +-122.40956 37.58436 +-122.38051 37.54962 +-122.32748 37.48461 +-122.23632 37.38344 +-122.18852 37.34638 +-122.15621 37.31470 +-122.11902 37.26828 +-122.01512 37.19501 +-121.92424 37.12444 +-121.88689 37.10485 +-121.86086 37.08276 +-121.78342 37.04335 +-121.70450 36.97942 +-121.65426 36.93801 +-121.57487 36.88348 +-121.47861 36.81956 +-121.43712 36.78821 +-121.40534 36.76781 +-121.36812 36.75009 +-121.33557 36.71495 +-121.27255 36.67184 +-121.16342 36.57248 +-121.09358 36.51578 +-121.02139 36.44378 +-120.93316 36.35578 +-120.79679 36.21978 +-120.63636 36.07582 +-120.52406 35.97185 +-120.43583 35.90791 +-120.33957 35.81993 +-120.29568 35.74979 +-120.26271 35.71512 +-120.23380 35.67390 +-120.19772 35.63300 +-120.12299 35.56383 +-120.02674 35.48387 +-119.98846 35.44344 +-119.88017 35.32590 +-119.78610 35.24387 +-119.67380 35.14792 +-119.53743 35.04400 +-119.40726 34.94926 +-119.34920 34.92597 +-119.31423 34.90995 +-119.24588 34.88266 +-119.20791 34.87552 +-119.16832 34.87107 +-119.12954 34.86300 +-119.09076 34.86210 +-118.97416 34.84129 +-118.93565 34.84176 +-118.85999 34.82469 +-118.78894 34.79661 +-118.72217 34.76987 +-118.68535 34.75631 +-118.56902 34.72084 +-118.49005 34.70185 +-118.39037 34.66204 +-118.22995 34.61434 +-118.06150 34.54260 diff --git a/examples/realcase1_regional_tomography_California/tectonics/SAF_creeping b/examples/realcase1_regional_tomography_California/tectonics/SAF_creeping new file mode 100644 index 0000000..ef46433 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/tectonics/SAF_creeping @@ -0,0 +1,10 @@ +-121.36812 36.75009 +-121.33557 36.71495 +-121.27255 36.67184 +-121.16342 36.57248 +-121.09358 36.51578 +-121.02139 36.44378 +-120.93316 36.35578 +-120.79679 36.21978 +-120.63636 36.07582 +-120.52406 35.97185 diff --git a/examples/realcase1_regional_tomography_California/tectonics/SAF_locked b/examples/realcase1_regional_tomography_California/tectonics/SAF_locked new file mode 100644 index 0000000..dd7d6a6 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/tectonics/SAF_locked @@ -0,0 +1,10 @@ +-120.26271 35.71512 +-120.23380 35.67390 +-120.19772 35.63300 +-120.12299 35.56383 +-120.02674 35.48387 +-119.98846 35.44344 +-119.88017 35.32590 +-119.78610 35.24387 +-119.67380 35.14792 +-119.53743 35.04400 \ No newline at end of file diff --git a/examples/realcase1_regional_tomography_California/tectonics/SAF_transition b/examples/realcase1_regional_tomography_California/tectonics/SAF_transition new file mode 100644 index 0000000..a530619 --- /dev/null +++ b/examples/realcase1_regional_tomography_California/tectonics/SAF_transition @@ -0,0 +1,5 @@ +-120.52406 35.97185 +-120.43583 35.90791 +-120.33957 35.81993 +-120.29568 35.74979 +-120.26271 35.71512 \ No newline at end of file diff --git a/examples/realcase2_teleseismic_tomography_Thailand/.DS_Store b/examples/realcase2_teleseismic_tomography_Thailand/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..366fd7e63938fb69c88a58e5b00be32065c1c640 GIT binary patch literal 6148 zcmeHK%}N773{Gm1RzZ67I0s*#2tAKwy$gK+wLfT~+g-H1@7sCyF?qJ*;U{}vy>H%b4#&)Y9aBDk z&nw~x>f^V!pc!m|cUfZeBm1+DcCS4-x9pb}t(mrX*7LiQ{9K#?XTTXa76wqWMSACo zZk+*Vz!}&vAm4`o6^w?JV)}Hzq!s|!#dH#krI(PHU>FT6MXW$rLxCE~)?%=RV?LN) zG^`XgoY v[ix,iy,iz] * 1.2 or v[ix,iy,iz+1] < v[ix,iy,iz] * 0.8) in the input model. Default: false. + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 80 # maximum number of inversion iterations + + step_length: 0.01 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.41] # default: [0.5,1.2] + Kdensity_coe: 0.3 # default: 0.0, range: 0.0 - 1.0 + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: false # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: false # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # settings for flexible inversion grid + dep_inv: [-50, -25, 0, 50, 100, 150, 200, 275, 350, 425, 500, 600,700] # inversion grid for vel in depth (km) + lat_inv: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] # inversion grid for vel in latitude (degree) + lon_inv: [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: false + + # ---------- flexible inversion grid setting for anisotropy ---------- + # settings for flexible inversion grid for anisotropy + dep_inv_ani: [-5, -2, 0, 3, 7, 12, 17, 23, 30, 38, 47, 57] # inversion grid for ani in depth (km) + lat_inv_ani: [-2.8, -2.3, -1.8, -1.3, -0.8, -0.3, 0.2, 0.7, 1.2, 1.7, 2.2, 2.7] # inversion grid for ani in latitude (degree) + lon_inv_ani: [-1.2, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 0.9, 1.2] # inversion grid for ani in longitude (degree) + trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: false # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false + + use_sta_correction: true + # initial_sta_correction_file: 4_initial_station_correct/station_correction_file_step_0010.dat # the path of initial station correction + step_length_sta_correction: 0.01 # step length relate to the update of station correction terms diff --git a/examples/realcase2_teleseismic_tomography_Thailand/README.md b/examples/realcase2_teleseismic_tomography_Thailand/README.md new file mode 100644 index 0000000..c83eb7c --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/README.md @@ -0,0 +1,29 @@ +# Real case of teleseismic tomography in Thailand and adjacent areas + +This is a real case to invert common-source differential arrival times for velocity heterogeneity in Thailand and adjacent areas + +Reference: + +[1] J. Chen, S. Wu, M. Xu, M. Nagaso, J. Yao, K. Wang, T. Li, Y. Bai, and P. Tong, Adjoint-state teleseismic traveltime tomography: method and application to Thailand in Indochina Peninsula. J.Geophys. Res. Solid Earth, 128(2023), e2023JB027348. +https://doi.org/10.1029/2023JB027348 + +[2] J. Chen, M. Nagaso, M. Xu, and P. Tong, TomoATT: An open-source package for Eikonal equation-based adjoint-state traveltime tomography for seismic velocity and azimuthal anisotropy, submitted. +https://doi.org/10.48550/arXiv.2412.00031 + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + +2. After inversion, run `plot_output.py` to plot the results. + +The imaging results: + +![](img/imaging_result.jpg) + + diff --git a/examples/realcase2_teleseismic_tomography_Thailand/plot_output.py b/examples/realcase2_teleseismic_tomography_Thailand/plot_output.py new file mode 100644 index 0000000..fcc45b9 --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/plot_output.py @@ -0,0 +1,260 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +import os + +# %% +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# read model files + +Ngrid = [121,121,121] +data_file = '2_models/model_init_N%d_%d_%d.h5'%(Ngrid[0],Ngrid[1],Ngrid[2]) +par_file = '3_input_params/input_params_real.yaml' +model = ATTModel.read(data_file, par_file) +init_model = model.to_xarray() + +data_file = 'OUTPUT_FILES/OUTPUT_FILES_real/final_model.h5' +model = ATTModel.read(data_file, par_file) +inv_model = model.to_xarray() + +# %% +# # read earthquakes and stations + +# from pytomoatt.src_rec import SrcRec + +# # read src_rec_file +# sr = SrcRec.read("1_src_rec_files/src_rec_file.dat") + +# # get the coordinates of the stations and earthquakes +# stations = sr.receivers[['stlo','stla','stel']].values.T +# earthquakes = sr.sources[['evlo','evla','evdp']].values.T + +# print(stations.shape) +# print(earthquakes.shape) + +# %% +# read earthquakes and stations + +import sys +sys.path.append('../utils') +import functions_for_data as ffd + +ev, st = ffd.read_src_rec_file('1_src_rec_files/src_rec_file.dat') +# earthquake location +ev_lon, ev_lat, ev_dep , _ = ffd.data_lon_lat_dep_wt_ev(ev) +# station location +st_lon, st_lat, _, _ = ffd.data_lon_lat_ele_wt_st(ev,st) + +# %% +# load topography +region = [97,106,12,21] +grid_topo = pygmt.datasets.load_earth_relief(resolution="01m", region=region) +grid_gra = pygmt.grdgradient(grid = grid_topo, azimuth = 0) + +# %% +def line_read(file): + doc=open(file,'r') + file = doc.readlines() + doc.close() + lat = []; lon = []; + for info in file: + tmp = info.split() + lon.append(float(tmp[0])) + lat.append(float(tmp[1])) + return((lat,lon)) + +# %% +# plot imgaing results + +fig = pygmt.Figure() +try: + os.mkdir("img") +except: + pass + + +# ------------------ Sub fig 1. topography ------------------ +region = [97,106,12,21] +projection = "B101.5/16.5/12/21/10c" +frame = ["xa2+lLongitude", "ya2+lLatitude", "nSWe"] +spacing = [0.1, 0.1] + +# topography +pygmt.makecpt(cmap="globe", series=[-4000,4000], background = True) +fig.grdimage(grid=grid_topo, shading = grid_gra, projection=projection, frame=frame,region=region) + +# station +fig.plot(x = st_lon, y = st_lat, style = "t0.4c", fill = "blue", pen = "1p,white", label = "Station") + + +# tectonic setting +(lat,lon) = line_read('tectonics/Khorat_new.txt') # Khorat Plateau +fig.plot(x = lon, y = lat, pen = "1p,black") +fig.text(text = "Khorat", x = 103.5, y = 17.5, font = "15p,Helvetica-Bold,black", angle = 0) +fig.text(text = "Plateau", x = 103.5, y = 16.5, font = "15p,Helvetica-Bold,black", angle = 0) +(lat,lon) = line_read('tectonics/WangChaoFault.txt') # Wang-Chao Fault +fig.plot(x = lon, y = lat, pen = "1p,black,-") +fig.text(text = "WCF", x = 100, y = 16, font = "20p,Helvetica-Bold,white=1p", angle = 315) +(lat,lon) = line_read('tectonics/3PagodasFault.txt') # Three Pagodas Fault +fig.plot(x = lon, y = lat, pen = "1p,black,-") +fig.text(text = "TPF", x = 98.5, y = 14.5, font = "20p,Helvetica-Bold,white=1p", angle = 315) +(lat,lon) = line_read('tectonics/DBPF.txt') # Dien Bien Phu Fault +fig.plot(x = lon, y = lat, pen = "1p,black,-") +fig.text(text = "DBPF", x = 102, y = 19.5, font = "20p,Helvetica-Bold,white=1p", angle = 55) +(lat,lon) = line_read('tectonics/SongMaSuture.txt') # Song Ma Suture +fig.plot(x = lon, y = lat, pen = "1p,black,-") +fig.text(text = "Shan-Thai", x = 99, y = 20, font = "18p,Helvetica-Bold,black=0.5p,white", angle = 0) +fig.text(text = "Block", x = 99, y = 19.3, font = "18p,Helvetica-Bold,black=0.5p,white", angle = 0) +fig.text(text = "Indochina Block", x = 103.5, y = 15, font = "18p,Helvetica-Bold,black=0.5p,white", angle = 315) + + +fig.shift_origin(xshift= 1, yshift=-1.5) +fig.colorbar(frame = ["a%f"%(4000),"y+lElevation (m)"], position="+w4c/0.3c+h") +fig.shift_origin(xshift=-1, yshift=+1.5) + +fig.shift_origin(xshift=0, yshift=-13) + + +# ------------------ Sub fig 2. earthquakes ------------------ + +region = "g" +projection = "E101/16/90/10c" # centerlon/centerlat/distnace_range/fig_size +frame = ["ya180"] +spacing = [0.1, 5] + +fig.basemap(region=region, projection=projection, frame=frame) +fig.coast(region=region, projection=projection, frame=frame, water="white", land="gray", A=10000) + +fig.plot(x=101.5, y=16.5, pen="1p,black,-", style="E-60d") +fig.plot(x=101.5, y=16.5, pen="1p,black,-", style="E-120d") +fig.plot(x=101.5, y=16.5, pen="1p,black,-", style="E-180d") +fig.text(x = [101.5, 101.5, 101.5], y = [-8.0, -38.0, -68], text = ['30', '60', '90'], font="13p") + +fig.plot(x=[97,97,106,106,97], y=[11,21,21,11,11], pen="1p,red") +pygmt.makecpt(cmap="jet", series=[0, 100], background=True) +fig.plot(x = ev_lon, y = ev_lat, size = [0.4]*len(ev_lon), fill = ev_dep, style = "a", cmap = True, pen = "0.5p,white") + + +fig.shift_origin(xshift= 1, yshift=-1) +fig.colorbar(frame = ["a%f"%(50),"y+lFocal depth (km)"], position="+w4c/0.3c+h") +fig.shift_origin(xshift=-1, yshift=+1) + +fig.shift_origin(xshift= 13, yshift= 13) + + +# ------------------ Sub fig 3. depth and vertical profile ------------------ + +region = [97,106,12,21] +projection = "B101.5/16.5/12/21/10c" +frame = ["xa2+lLongitude", "ya2+lLatitude", "nSWe"] +spacing = [0.1, 0.1] + +depth_list = [100,200,300,400] +start_list = [ [97, 19], [97, 17.2], [101.8, 12] ] +end_list = [ [106, 15], [106, 13.2], [101.8, 21] ] + +# depth profiles +for idepth, depth in enumerate(depth_list): + + # read models + vel_init = init_model.interp_dep(depth, field='vel') + vel_inv = inv_model.interp_dep(depth, field='vel') + + if idepth == 3: + fig.shift_origin(xshift=-39, yshift=-13) + + pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-2, 2], background=True) + x = vel_inv[:,0]; y = vel_inv[:,1]; value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2]*100 + grid = pygmt.surface(x=x, y=y, z=value, spacing=spacing,region=region) + fig.grdimage(frame=frame,grid = grid,projection=projection, region=region) # nan_transparent may work + + (lat,lon) = line_read('tectonics/Khorat_new.txt') # Khorat Plateau + fig.plot(x = lon, y = lat, pen = "1p,black") + + # vertical profile location + fig.plot(x = [start_list[0][0],end_list[0][0]], y = [start_list[0][1],end_list[0][1],], pen = "2p,green,-") + fig.text(text = "A", x = start_list[0][0] + 0.5, y = start_list[0][1], font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + fig.text(text = "A@+'@+", x = end_list[0][0] - 0.5, y = end_list[0][1] + 0.5, font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + + fig.plot(x = [start_list[1][0],end_list[1][0]], y = [start_list[1][1],end_list[1][1],], pen = "2p,green,-") + fig.text(text = "B", x = start_list[1][0] + 0.5, y = start_list[1][1], font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + fig.text(text = "B@+'@+", x = end_list[1][0] - 0.5, y = end_list[1][1] + 0.5, font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + + fig.plot(x = [start_list[2][0],end_list[2][0]], y = [start_list[2][1],end_list[2][1],], pen = "2p,green,-") + fig.text(text = "C", x = start_list[2][0] - 0.5, y = start_list[2][1] + 0.5, font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + fig.text(text = "C@+'@+", x = end_list[2][0] - 0.5, y = end_list[2][1] - 0.5, font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + + # depth label + fig.text(text="%d km"%(depth), x = 98 , y = 12.5, font = "14p,Helvetica-Bold,black", fill = "white") + + + fig.shift_origin(xshift=13) + +fig.shift_origin(yshift=6) + +# vertical profiles +for iprof in range(len(start_list)): + + # generate topography data + Npoints = 100 + point_x = np.linspace(start_list[iprof][0],end_list[iprof][0],Npoints) + point_y = np.linspace(start_list[iprof][1],end_list[iprof][1],Npoints) + points = np.hstack((point_x.reshape(-1,1),point_y.reshape(-1,1))) + topo = np.array(pygmt.grdtrack(points=points, grid=grid_topo)[2]) + topo_dis = [0] + for ip in range(1, Npoints): + dis = ffd.cal_dis(point_y[0], point_x[0], point_y[ip], point_x[ip]) + topo_dis.append(dis) + topo_dis = np.array(topo_dis) + + # read models + vel_init_sec = init_model.interp_sec(start_list[iprof], end_list[iprof], field='vel', val=10) + vel_inv_sec = inv_model.interp_sec(start_list[iprof], end_list[iprof], field='vel', val=10) + + + # plot topography + max_dis = np.max(vel_init_sec[:,2]) + + region = [0,max_dis,0,2000] + projection = "X%f/1c"%(max_dis/400*4) + frame = ["ya2000+lElevation (m)", "sW"] + + fig.shift_origin(yshift=4) + fig.basemap(region=region, projection=projection, frame=frame) + fig.plot(x = topo_dis, y = topo, pen = "1p,black", frame = frame, projection = projection, region = region) + fig.shift_origin(yshift=-4) + + # plot model + region = [0,max_dis,0,400] + projection = "X%f/-4c"%(max_dis/400*4) + frame = ["xa300+lDistance (km)", "ya100+lDepth (km)", "nSWe"] + spacing = [10, 5] + + x_sec = vel_inv_sec[:,2]; y_sec = vel_inv_sec[:,3]; value_sec = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4]*100 + grid = pygmt.surface(x=x_sec, y=y_sec, z=value_sec, spacing=spacing,region=region) + fig.grdimage(frame=frame,grid = grid,projection=projection, region=region) # nan_transparent may work + + label_list = ['A', 'B', 'C'] + fig.text(text = "%s"%(label_list[iprof]), x = 50, y = 50 , font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + fig.text(text = "%s@+'@+"%(label_list[iprof]), x = np.max(x) - 50, y = 50, font = "18p,Helvetica-Bold,black", fill = "lightblue", angle = 0) + + + if (iprof == 0): + fig.shift_origin(xshift=0, yshift=-6.5) + elif (iprof == 1): + fig.shift_origin(xshift=13, yshift=6.5) + +fig.shift_origin(xshift= 2, yshift=-2.5) +fig.colorbar(frame = ["a%f"%(2),"y+ldlnVp (%)"], position="+w4c/0.3c+h") +fig.shift_origin(xshift=-2, yshift=+2.5) + +fig.show() + +fig.savefig("img/imaging_result.png") + + diff --git a/examples/realcase2_teleseismic_tomography_Thailand/prepare_input_files.py b/examples/realcase2_teleseismic_tomography_Thailand/prepare_input_files.py new file mode 100644 index 0000000..cfb7ab3 --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/prepare_input_files.py @@ -0,0 +1,45 @@ +# %% +# download src_ref_files from Zenodo +import os +import requests + +url = 'https://zenodo.org/records/14092478/files/src_rec_file.dat?download=1' + +path = "1_src_rec_files/src_rec_file.dat" + +# check file existence +if not os.path.exists(path): + try: + os.mkdir("1_src_rec_files") + except: + pass + print("Downloading src_rec_file.dat from Zenodo...") + response = requests.get(url, stream=True) + with open(path, 'wb') as out_file: + out_file.write(response.content) + print("Download complete.") +else: + print("src_rec_file.dat already exists.") + +# %% +# download initial model from Zenodo + +url = 'https://zenodo.org/records/14092478/files/model_init_N121_121_121.h5?download=1' + +path = "2_models/model_init_N121_121_121.h5" + +# check file existence +if not os.path.exists(path): + try: + os.mkdir("2_models") + except: + pass + print("Downloading model_init_N121_121_121.h5 from Zenodo...") + response = requests.get(url, stream=True) + with open(path, 'wb') as out_file: + out_file.write(response.content) + print("Download complete.") +else: + print("model_init_N121_121_121.h5 already exists.") + + diff --git a/examples/realcase2_teleseismic_tomography_Thailand/run_this_example.sh b/examples/realcase2_teleseismic_tomography_Thailand/run_this_example.sh new file mode 100644 index 0000000..b0ecd3f --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/run_this_example.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Step 1: Generate necessary input files +python prepare_input_files.py + +# Step 2: Run inversion +# # for WSL +# mpirun -n 8 --allow-run-as-root --oversubscribe ../../build/bin/TOMOATT -i 3_input_params/input_params_real.yaml +# for Linux +# mpirun -n 8 ../../build/bin/TOMOATT -i 3_input_params/input_params_real.yaml +# for conda install +mpirun -n 8 TOMOATT -i 3_input_params/input_params_real.yaml + +# # Step 3 (Optional): Plot the results +# python plot_output.py + diff --git a/examples/realcase2_teleseismic_tomography_Thailand/tectonics/3PagodasFault.txt b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/3PagodasFault.txt new file mode 100644 index 0000000..8af7384 --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/3PagodasFault.txt @@ -0,0 +1,9 @@ +97.716435 15.996933 +97.909999 15.704275 +98.075912 15.388543 +98.283303 15.065462 +98.504520 14.792299 +98.753389 14.414982 +99.306431 13.919170 +99.569126 13.657715 +99.831821 13.344572 \ No newline at end of file diff --git a/examples/realcase2_teleseismic_tomography_Thailand/tectonics/DBPF.txt b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/DBPF.txt new file mode 100644 index 0000000..6d2284f --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/DBPF.txt @@ -0,0 +1,12 @@ +100.26019 17.132888 +100.51411 17.490642 +100.79624 17.903402 +101.10658 18.261329 +101.47335 18.591967 +101.75549 19.004727 +102.00940 19.362481 +102.29154 19.802702 +102.51724 20.242749 +102.74295 20.627877 +102.91223 21.122673 +103.02508 21.919356 \ No newline at end of file diff --git a/examples/realcase2_teleseismic_tomography_Thailand/tectonics/Khorat_new.txt b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/Khorat_new.txt new file mode 100644 index 0000000..b935bbd --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/Khorat_new.txt @@ -0,0 +1,74 @@ +101.3217 15.25436 +101.3610 15.02633 +101.4085 14.66495 +101.6319 14.56644 +101.6012 14.38869 +101.4514 14.26901 +101.7127 14.13520 +101.9088 14.04399 +102.1729 14.00737 +102.4503 14.00100 +102.7636 14.00578 +103.0485 14.13474 +103.3082 14.27712 +103.5336 14.33471 +103.7845 14.37077 +103.9997 14.34649 +104.2485 14.32079 +104.4734 14.33280 +104.6885 14.37674 +104.9102 14.34013 +105.1688 14.31806 +105.3968 14.38630 +105.5182 14.48660 +105.5693 14.77796 +105.8248 14.91528 +106.1238 14.87758 +106.3348 14.64013 +106.4688 14.60983 +106.7040 14.63849 +106.9841 14.69472 +107.1072 14.88782 +106.9818 15.16007 +106.8467 15.43551 +106.7018 15.70776 +106.4761 15.91474 +106.7336 16.04609 +106.9007 16.14401 +106.9118 16.31668 +106.7038 16.57524 +106.4385 16.64211 +106.2010 16.67623 +106.0120 16.46044 +105.8274 16.65030 +105.8194 16.91355 +105.5656 17.01331 +105.2865 17.09928 +104.9742 17.44792 +104.8155 17.65625 +104.6904 17.84917 +104.4882 18.06029 +104.2648 18.23726 +104.2338 18.42014 +104.0404 18.69778 +103.8294 18.71916 +103.6035 18.82287 +103.4194 18.79012 +103.1891 18.75828 +102.9576 18.78853 +102.7519 18.78060 +102.4620 18.70688 +102.2884 18.31131 +102.3415 17.97336 +102.3233 17.61750 +102.3959 17.36994 +102.5198 17.16424 +102.4485 16.89594 +102.2198 17.03361 +102.0690 16.82544 +101.9004 16.52085 +101.7902 16.17219 +101.5551 16.16099 +101.3962 15.84821 +101.3255 15.53741 +101.3217 15.25436 \ No newline at end of file diff --git a/examples/realcase2_teleseismic_tomography_Thailand/tectonics/SongMaSuture.txt b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/SongMaSuture.txt new file mode 100644 index 0000000..b39f66d --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/SongMaSuture.txt @@ -0,0 +1,7 @@ +103.42006 21.261522 +103.75862 21.015416 +104.12539 20.687015 +104.54859 20.386247 +104.94357 20.140313 +105.33856 19.811998 +105.67712 19.565892 \ No newline at end of file diff --git a/examples/realcase2_teleseismic_tomography_Thailand/tectonics/WangChaoFault.txt b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/WangChaoFault.txt new file mode 100644 index 0000000..5ee10ef --- /dev/null +++ b/examples/realcase2_teleseismic_tomography_Thailand/tectonics/WangChaoFault.txt @@ -0,0 +1,35 @@ +97.160627 18.667449 +97.439913 18.296889 +97.702608 18.010759 +97.979130 17.718541 +98.283303 17.463175 +98.550606 17.271720 +98.765678 17.102918 +99.057562 16.870374 +99.306431 16.669104 +99.555300 16.377656 +99.831821 16.064504 +100.03921 15.742171 +100.21895 15.443462 +100.39869 15.086120 +100.56460 14.752446 +100.78582 14.447648 +100.96556 14.282677 +101.60156 13.889472 +101.90573 13.651846 +102.20990 13.442356 +102.51408 13.201059 +102.80719 12.957404 +103.10972 12.693070 +103.48190 12.438190 +103.78607 12.172426 +104.09025 11.987404 +104.36677 11.761654 +104.62946 11.466553 +104.91981 11.204539 +105.18250 10.882527 +105.43137 10.599681 +105.72172 10.344518 +106.01207 10.087398 +106.30241 9.8312565 +106.50981 9.6872272 \ No newline at end of file diff --git a/examples/scripts_of_generate_community_model/1_crust1.0_ak135_model.py b/examples/scripts_of_generate_community_model/1_crust1.0_ak135_model.py new file mode 100644 index 0000000..06a3ceb --- /dev/null +++ b/examples/scripts_of_generate_community_model/1_crust1.0_ak135_model.py @@ -0,0 +1,105 @@ +# %% +from pytomoatt.model import ATTModel +import os +import numpy as np +import h5py +# %% [markdown] +# # Step 1. Generate the ATT model based on the crust1.0 model. + +# %% +# generate the .h5 model for TomoATT based on the crust1.0 model. Nearest extrapolation is used. + +param_file = "./3_input_params/input_params_real.yaml" +am_crust1p0 = ATTModel(param_file) +am_crust1p0.grid_data_crust1(type="vp") + +# %% [markdown] +# # Step 2. Generate the ATT model based on ak135 model. + +# %% +# Step 2. Generate the ATT model based on ak135 model. + +# ak135.h5 has a three-column dataset 'model'. First column: depth (in km), second column: Vp (in km/s), third column: Vs (in km/s). +# a text version of the ak135 model can be found in Kennett et al. (1995): +# Kennett, B. L., Engdahl, E. R., & Buland, R. (1995). Constraints on seismic velocities in the Earth from traveltimes. Geophysical Journal International, 122(1), 108-124. + +# Load the 1D ak135 model from the .h5 file. +with h5py.File('ak135.h5', 'r') as f: + points_ak135 = f['model'][:] + +am_ak135 = ATTModel(param_file) + +# interpolate the 1D ak135 velocity model to the depths of the ATT model. +vel_1d = np.interp(am_ak135.depths, points_ak135[:,0], points_ak135[:,1], left=points_ak135[0,1], right=points_ak135[-1,1]) + +# Set the 3D velocity model by tiling the 1D velocity model along lat and lon directions. +am_ak135.vel = np.tile(vel_1d[:, None, None], (1, am_ak135.n_rtp[1], am_ak135.n_rtp[2])) + + +# %% [markdown] +# # Step 3. Combine ak135 model with crust1.0 model + +# %% +# 1. set two depths +# if depth < depth_1, vel = crust1p0 +# if depth_1 <= depth <= depth_2, vel = linear_interp between crust1p0 and ak135 +# if depth > depth_2, vel = ak135 + +am_combined = ATTModel(param_file) + +depth_1 = 35.0 +depth_2 = 70.0 + +ratio = (am_ak135.depths - depth_1) / (depth_2 - depth_1) +ratio = np.clip(ratio, 0.0, 1.0) +ratio_3d = np.tile(ratio[:, None, None], (1, am_ak135.n_rtp[1], am_ak135.n_rtp[2])) + +# linear interpolation +am_combined.vel = am_crust1p0.vel * (1 - ratio_3d) + am_ak135.vel * ratio_3d + +# %% [markdown] +# # Step 4. post processing (OPTIONAL) + +# %% +am_processed = am_combined.copy() + +# 1. (OPTIONAL) monotonic increase check +# Ensure that the velocity model increases monotonically with depth. +am_processed.vel[::-1,:,:] = np.maximum.accumulate(am_processed.vel[::-1,:,:], axis=0) + +# 2. (OPTIONAL) Gaussian smoothing to the combined model to avoid sharp discontinuities. +## Upgrade PyTomoATT to version 0.2.10 or later to use this function. +am_processed.smooth(sigma=am_processed.d_rtp, unit_deg=True, mode='nearest') # standard deviation for Gaussian kernel along each axis (ddep, dlat, dlon) + + +# %% +# output as .h5 file +n_rtp = am_processed.n_rtp +fname = f"constant_velocity_N{n_rtp[0]:d}_{n_rtp[1]:d}_{n_rtp[2]:d}_PyTomoATT.h5" +am_processed.write(fname) + +# %% +# visualization of the central lat-lon slice +import matplotlib.pyplot as plt +dep = am_processed.depths +vel = am_processed.vel[:, am_processed.n_rtp[1]//2, am_processed.n_rtp[2]//2] +lat = am_processed.latitudes[am_processed.n_rtp[1]//2] +lon = am_processed.longitudes[am_processed.n_rtp[2]//2] +fig = plt.figure(figsize=(6,6)) +ax = fig.add_subplot(1,1,1) +ax.plot(vel, dep, label='Velocity', color='blue') +ax.invert_yaxis() +ax.set_xlabel('Vp (km/s)', fontsize=16) +ax.set_ylabel('Depth (km)', fontsize=16) +ax.tick_params(axis='x', labelsize=16) +ax.tick_params(axis='y', labelsize=16) + +ax.set_title(f'Velocity Profile at Lat: {lat:.2f}, Lon: {lon:.2f}', fontsize=16) +ax.grid() +ax.legend(fontsize=16) +plt.show() + +os.makedirs("figs", exist_ok=True) +fig.savefig("figs/velocity_profile_lat%.2f_lon%.2f.png"%(lat, lon), facecolor='white', edgecolor='white', bbox_inches='tight') + + diff --git a/examples/scripts_of_generate_community_model/3_input_params/input_params_real.yaml b/examples/scripts_of_generate_community_model/3_input_params/input_params_real.yaml new file mode 100644 index 0000000..5219217 --- /dev/null +++ b/examples/scripts_of_generate_community_model/3_input_params/input_params_real.yaml @@ -0,0 +1,186 @@ +version: 3 + +################################################# +# computational domain # +################################################# +domain: + min_max_dep: [-50, 550] # depth in km + min_max_lat: [10.5, 22.5] # latitude in degree + min_max_lon: [95.5, 107.5] # longitude in degree + n_rtp: [121, 121, 121] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_file.dat # source receiver file path + swap_src_rec: false # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_init_N121_121_121.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultaneous runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_real # path to output directory (default is ./OUTPUT_FILES/) + output_source_field: false # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'. + output_kernel: false + output_final_model: true # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'. + output_middle_model: false # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5' + output_in_process: false # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'. + output_in_process_data: false # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat' + single_precision_output: false # True: output results in single precision. Default: false. + verbose_output_level: 0 # output internal parameters, (to do) + output_file_format: 0 # 0: hdf5, 1: ascii + +# output files: +# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; +# ['Mesh']['node_coords_p'], phi coordinates of nodes; +# ['Mesh']['node_coords_t'], theta coordinates of nodes; +# ['Mesh']['node_coords_r'], r coordinates of nodes; +# ['Mesh']['node_coords_x'], phi coordinates of elements; +# ['Mesh']['node_coords_y'], theta coordinates of elements; +# ['Mesh']['node_coords_z'], r coordinates of elements; +# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; +# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; +# ['model']['eta_inv_XXXX'], eta model at iteration XXXX +# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX +# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX +# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX +# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX +# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX +# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX +# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX +# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX +# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX +# ['model']['Ks_update_inv_XXXX'], slowness kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Kxi_update_inv_XXXX'], xi kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['model']['Keta_update_inv_XXXX'], eta kernel over kernel density at iteration XXXX, smoothed by inversion grid +# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode +# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode +# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode +# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file. +# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model. +# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX. +# File: 'inversion_grid.txt'. The location of inversion grid nodes +# File: 'objective_function.txt'. The objective function value at each iteration +# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX; +# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX; +# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode +# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +# 4 for 1d model inversion +run_mode: 1 + +have_tele_data: true # An error will be reported if false but source out of study region is used. Default: false. + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 80 # maximum number of inversion iterations + + step_length: 0.01 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.41] # default: [0.5,1.2] + Kdensity_coe: 0.3 # default: 0.0, range: 0.0 - 1.0 + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + uniform_inv_grid_dep: false # true if use uniform inversion grid for dep, false if use flexible inversion grid + uniform_inv_grid_lat: false # true if use uniform inversion grid for lat, false if use flexible inversion grid + uniform_inv_grid_lon: false # true if use uniform inversion grid for lon, false if use flexible inversion grid + + # settings for flexible inversion grid + dep_inv: [-50, -25, 0, 50, 100, 150, 200, 275, 350, 425, 500, 600,700] # inversion grid for vel in depth (km) + lat_inv: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] # inversion grid for vel in latitude (degree) + lon_inv: [95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: false + + # ---------- flexible inversion grid setting for anisotropy ---------- + # settings for flexible inversion grid for anisotropy + dep_inv_ani: [-5, -2, 0, 3, 7, 12, 17, 23, 30, 38, 47, 57] # inversion grid for ani in depth (km) + lat_inv_ani: [-2.8, -2.3, -1.8, -1.3, -0.8, -0.3, 0.2, 0.7, 1.2, 1.7, 2.2, 2.7] # inversion grid for ani in latitude (degree) + lon_inv_ani: [-1.2, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 0.9, 1.2] # inversion grid for ani in longitude (degree) + trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: false # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false + + use_sta_correction: true + # initial_sta_correction_file: 4_initial_station_correct/station_correction_file_step_0010.dat # the path of initial station correction + step_length_sta_correction: 0.01 # step length relate to the update of station correction terms diff --git a/examples/scripts_of_generate_community_model/ak135.h5 b/examples/scripts_of_generate_community_model/ak135.h5 new file mode 100644 index 0000000000000000000000000000000000000000..46c64556091dd8da56ca4a57586239b21d263841 GIT binary patch literal 5336 zcmeH}dst2B9>;g7q`grIk+e%zyPfG_CNe|%7Lt%8M3^EZmqJmwMQ$0Qn?w>Rm8f=C zw{u*_Wf%^Qa*8o0VGt3y3}e=N*|VNAbIw2KInVrate&TLtS`n-m!Y9dPi9PSwf{cytHz8G?X&jxKz^gc#|?bU(`7e0GV&*rnR9N!^?yIl&v)oh znK)CcuO0bovfg^^&QJ?JjsI5`@Eq#qLpJQscdhl(^W4w0#+VltJY%l-p!G*j?GOLu zs3X&7T3k>^rlLwZx(vi~-Bx`3{c|hP^T|vTrK^njE@Vz}nbSx9g1$(}@4C87(2z$; zD;+*vR-@q3e2Dtj$3OXLtoP_4B%-x(sMK!!PhQ8T&waAMCky^06HoW8MBECvV4?DY=dbn-@41)!E@LMxB*d;9^vr-Ndh_AGw!8*I|7pEe~hkeXYd!cAsf>g>fFZ z2y~r()|h7O|7F>E&SMwDx2pTv$0gPXGmSfO(Yga)Pc*iidZn7&-UdtQixMZ($5h$C zlN!#9%|EdWk;&$I>QhMU@C31CUy!Sdhf9W-G zT}@AXXobb>dr{bUJnXi2-BJdE?E&DcJl7*aqCd0`Ic%eG)NIs~0=7EsjlUR>s8 z&ev>3w0~aT%NBNM2-?bYKH*#K@V^B;(S^PGM|Z#R&58-JHuVP zI9H`&`|afQYv0+y_@~OERty$Lh^2Rq!Eh7{__pHbi)&v>3RmaPhSJ!P%Ld z$E0DLxD4+=6)LB#yybG3b8JWcK5ukbr9!9BQOyb0IX6g0Sku}IetT57^z_1M_eRby zrNg=Fi2&tE6->?@soHE{!R(*30}BejsSUZSLcF_1Io z-810Q>&A}zmi8FeTb8LbNu8Id#wKFx$Q@{ao%q?$TZhfdn8T%W$?R$oWI|VpT7$KeuKsyqdIQ# zdUS^Kpe%NNSM1T6ETES2Gg-`!pV%W;jF#dToZIa|y4pPTMjJJT%oZ)xrW>=v#yzMu z6<02(QQwakiu1-j*e9l+>cMJu&d!|s?1i|RYj*jwcG6cmqt0-?cOT4!vHIDj4lpn^bN#lCbNw8M*3xt8)mQ+$?WiNINAS%?{eVy(fUKnI0uL-kqay=Ax877JjYxXcL5F<)+$PFtKvFI zx$w2iiZ2dwK<(QVp~svgUKb(@TcxMX+cFu|X~~5cy#u`aNSx-!fc?;SGU+#Pio{78 zefQV>cs~8olo1;wPV0kh9_F3>MYB{RajFxa$JSXZajMgphmMvP8eH|P+5TlR8P)O4 z2T3#69VAZj;>gN;rtd3pd$IwG0?_Y7Nt|T&%-8}X=dT_!e3!&&x^F08ae7kXw7d;J zfY3V&HYVJYIIVMs4q)bn=~Lh7iqRqD8i`7$Bu?{R*dZjg7d`!s z#7ViifBg{TBO$in+uxNX?t?h62A@P`| z)zbG#J04;-xdda=Yw{3Jdr z#bR+eIm;zZ{l~ftVz)8*m$*Oji1Lml?z5<#P#zxqt z$yt1^F9UIZ!vO-sD)k`rfSmPtN6J_q0)hGOU*y!@C!UnSackC_J{|%{7&Kg!gT#BJ zRXN;f0uta9TPfBsIqm-(e9Mtw(A3G(M?hy!pZDg?a@x1nuPKMw)gd)aegb~DD^JeX zRj_`vvK-gNF3o?UfV0Ztg&`&ikhmEAs2s#k!>0(W4qGWe{8Qhug5`}M0gqBe2kxby zeaG?96|61>3#?!3ub_STqSY0c{&bT2pb!DKZ4JZ_SJ1qzDz89K@;FC;@> z`RdMt3KnPeXn7cib4oPyTZk)tX>rd2N#SpJx$pnaaMXp`6X z#6~Pa0BNTj=PO`EKA@>Y&8kHnDT@VszT`7&s|W?#XG0}kkajgnz=}=oXZ{qSQG-eL$bwlJdKdn~K^YtpO d!c>w7mI@&4UQwKa#Z!G1i&K%4@GxJaz^`#Ech&#^ literal 0 HcmV?d00001 diff --git a/examples/scripts_of_generate_community_model/run_this_example.sh b/examples/scripts_of_generate_community_model/run_this_example.sh new file mode 100644 index 0000000..ba570dd --- /dev/null +++ b/examples/scripts_of_generate_community_model/run_this_example.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# run the script to generate HDF5 model files based on community models +# 1. crust1.0 (Laske et al., 2013) + ak135 model (Kennett et al., 1995) +python 1_crust1.0_ak135_model.py + + +# References: +# Laske, G., Masters, G., Ma, Z., & Pasyanos, M. (2013, April). Update on CRUST1. 0—A 1-degree global model of Earth’s crust. In Geophysical research abstracts (Vol. 15, No. 15, p. 2658). +# Kennett, B. L., Engdahl, E. R., & Buland, R. (1995). Constraints on seismic velocities in the Earth from traveltimes. Geophysical Journal International, 122(1), 108-124. \ No newline at end of file diff --git a/examples/scripts_of_generate_hdf5_model/1_generate_models.py b/examples/scripts_of_generate_hdf5_model/1_generate_models.py new file mode 100644 index 0000000..efcad49 --- /dev/null +++ b/examples/scripts_of_generate_hdf5_model/1_generate_models.py @@ -0,0 +1,287 @@ +# %% +from pytomoatt.model import ATTModel +from pytomoatt.checkerboard import Checker +import os +import numpy as np +import h5py + +# %% [markdown] +# # read YAML parameter file to obtain the grid parameters for the model + +# %% +output_path = "models" +os.makedirs(output_path, exist_ok=True) + +par_file = "input_params/input_params.yaml" + +att_model = ATTModel(par_file) + +n_rtp = att_model.n_rtp # grid node numbers in r (depth), t (longtitude), p (latitude) directions +am_depths = att_model.depths # depths in km +am_latitudes = att_model.latitudes # latitudes in degrees +am_longitudes = att_model.longitudes # longitudes in degrees + +print("grid node numbers (N_r, N_t, N_p):", n_rtp) +print("depths (km):", am_depths) +print("latitudes (degree):", am_latitudes) +print("longitudes (degree):", am_longitudes) + +# %% [markdown] +# # eg1. generate model with constant velocity + +# %% +# case 1. ---------- generate a constant velocity model using PyTomoATT module ------------- + +# set the velocity model to a constant value +constant_v = 6.0 # constant velocity (km/s) +att_model.vel[:,:,:] = constant_v +att_model.xi[:,:,:] = 0.0 +att_model.eta[:,:,:] = 0.0 + +# write the model to a file +fname = "%s/constant_velocity_N%d_%d_%d_PyTomoATT.h5"%(output_path, n_rtp[0], n_rtp[1], n_rtp[2]) +att_model.write(fname) +print("generate model using PyTomoATT:", fname) + + +# case 2. ---------- generate a constant velocity model using plain loop (h5py module is required) ------------- + +# set the velocity model to a constant value +vel = np.zeros(n_rtp) +xi = np.zeros(n_rtp) +eta = np.zeros(n_rtp) +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + vel[ir, it, ip] = constant_v + +fname = "%s/constant_velocity_N%d_%d_%d_loop.h5"%(output_path, n_rtp[0], n_rtp[1], n_rtp[2]) + +with h5py.File(fname, 'w') as f: + f.create_dataset('vel', data=vel) + f.create_dataset('xi', data=xi) + f.create_dataset('eta', data=eta) +print("generate model using plain loop:", fname) + +# %% [markdown] +# # eg2. generate a linear velocity model: +# vel = 5.0, if depth < 0 km +# +# vel = 5.0 + 0.1 * depth, if 0 km <= depth <= 30 km +# +# vel = 8.0, if depth > 30 km + +# %% +# case 1. ---------- generate a constant velocity model using PyTomoATT module ------------- + +# set the velocity model to a constant value +idx = np.where((am_depths >= 0.0) & (am_depths <= 30.0)) +depth = am_depths[idx] +att_model.vel[idx,:,:] = 5.0 + 0.1 * depth[:, np.newaxis, np.newaxis] # velocity increases linearly from 5.0 to 8.0 km/s +att_model.vel[np.where(am_depths > 30.0),:,:] = 8.0 # velocity is constant at 8.0 km/s below 30.0 km depth +att_model.vel[np.where(am_depths < 0.0),:,:] = 5.0 # velocity is constant at 5.0 km/s above 0.0 km depth + +att_model.xi[:,:,:] = 0.0 +att_model.eta[:,:,:] = 0.0 + +# write the model to a file +fname = "%s/linear_velocity_N%d_%d_%d_PyTomoATT.h5"%(output_path, n_rtp[0], n_rtp[1], n_rtp[2]) +att_model.write(fname) +print("generate model using PyTomoATT:", fname) + +# case 2. ---------- generate a linear velocity model using plain loop (h5py module is required) ------------- + +# set the velocity model to a linear value +vel = np.zeros(n_rtp) +xi = np.zeros(n_rtp) +eta = np.zeros(n_rtp) + +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + if am_depths[ir] < 0.0: + vel[ir, it, ip] = 5.0 + elif am_depths[ir] <= 30.0: + vel[ir, it, ip] = 5.0 + 0.1 * am_depths[ir] + else: + vel[ir, it, ip] = 8.0 +fname = "%s/linear_velocity_N%d_%d_%d_loop.h5"%(output_path, n_rtp[0], n_rtp[1], n_rtp[2]) + +with h5py.File(fname, 'w') as f: + f.create_dataset('vel', data=vel) + f.create_dataset('xi', data=xi) + f.create_dataset('eta', data=eta) +print("generate model using plain loop:", fname) + +# %% [markdown] +# # eg3. generate checkerboard model for velocity and anisotropy. +# +# assign perturbation + +# %% +# case 1. ---------- generate a constant velocity model using PyTomoATT module ------------- + +# file name of the background model +bg_model_fname = "%s/linear_velocity_N%d_%d_%d_PyTomoATT.h5" % (output_path, n_rtp[0], n_rtp[1], n_rtp[2]) + +lim_x = [0.5, 1.5] # longitude limits of the checkerboard +lim_y = [0.25, 0.75] # latitude limits of the checkerboard +lim_z = [0, 30] # depth limits of the checkerboard +pert_vel = 0.1 # amplitude of velocity perturbation (%) +pert_ani = 0.05 # amplitude of anisotropy perturbation (fraction) +ani_dir = 60.0 # fast velocity direction (anti-clockwise from x-axis, in degrees) +n_pert_x = 4 # number of checkers in x (lon) direction +n_pert_y = 2 # number of checkers in y (lat) direction +n_pert_z = 3 # number of checkers in z (dep) direction + +size_x = (lim_x[1] - lim_x[0]) / n_pert_x # size of each checker in x direction +size_y = (lim_y[1] - lim_y[0]) / n_pert_y # size of each checker in y direction +size_z = (lim_z[1] - lim_z[0]) / n_pert_z # size of each checker in z direction + + +ckb = Checker(bg_model_fname, para_fname=par_file) +# n_pert_x, n_pert_y, n_pert_z: number of checkers in x (lon), y (lat), z (dep) directions +# pert_vel: amplitude of velocity perturbation (km/s) +# pert_ani: amplitude of anisotropy perturbation (fraction) +# ani_dir: fast velicty direction (anti-cloclkwise from x-axis, in degrees) +# lim_x, lim_y, lim_z: limits of the checkerboard in x (lon), y (lat), z (dep) directions +ckb.checkerboard( + n_pert_x=n_pert_x, n_pert_y=n_pert_y, n_pert_z=n_pert_z, + pert_vel=pert_vel, pert_ani=pert_ani, ani_dir=ani_dir, + lim_x=lim_x, lim_y=lim_y, lim_z=lim_z +) + +fname = "%s/linear_velocity_ckb_N%d_%d_%d_PyTomoATT.h5" % (output_path, n_rtp[0], n_rtp[1], n_rtp[2]) +ckb.write(fname) +print("generate checkerboard model based on the linear velocity model using PyTomoATT:", fname) + +# case 2. ---------- generate a checkerboard model using plain loop (h5py module is required) ------------- + +# read the background model +bg_model = np.zeros(n_rtp) +with h5py.File(bg_model_fname, 'r') as f: + bg_model = f['vel'][:] + +# set the checkerboard model +vel = np.zeros(n_rtp) +xi = np.zeros(n_rtp) +eta = np.zeros(n_rtp) + +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + depth = am_depths[ir] + lat = am_latitudes[it] + lon = am_longitudes[ip] + + # check if the current grid node is within the checkerboard limits + if (lim_x[0] <= lon <= lim_x[1]) and (lim_y[0] <= lat <= lim_y[1]) and (lim_z[0] <= depth <= lim_z[1]): + + sigma_vel = np.sin(np.pi * (lon - lim_x[0])/size_x) * np.sin(np.pi * (lat - lim_y[0])/size_y) * np.sin(np.pi * (depth - lim_z[0])/size_z) + sigma_ani = np.sin(np.pi * (lon - lim_x[0])/size_x) * np.sin(np.pi * (lat - lim_y[0])/size_y) * np.sin(np.pi * (depth - lim_z[0])/size_z) + + if (sigma_ani > 0): + psi = ani_dir / 180.0 * np.pi # convert degrees to radians + elif (sigma_ani < 0): + psi = (ani_dir + 90.0) / 180.0 * np.pi + else: + psi = 0.0 + + else: + sigma_vel = 0.0 + sigma_ani = 0.0 + psi = 0.0 + + # set the velocity and anisotropy + vel[ir, it, ip] = bg_model[ir, it, ip] * (1.0 + pert_vel * sigma_vel) + xi[ir, it, ip] = pert_ani * abs(sigma_ani) * np.cos(2*psi) + eta[ir, it, ip] = pert_ani * abs(sigma_ani) * np.sin(2*psi) + +# write the model to a file +fname = "%s/linear_velocity_ckb_N%d_%d_%d_loop.h5" % (output_path, n_rtp[0], n_rtp[1], n_rtp[2]) +with h5py.File(fname, 'w') as f: + f.create_dataset('vel', data=vel) + f.create_dataset('xi', data=xi) + f.create_dataset('eta', data=eta) +print("generate checkerboard model based on the linear velocity model using plain loop:", fname) + + +# %% [markdown] +# # eg4. generate flexible checkerboard model +# +# the checker size increases with depth; +# +# the checker size is large for anisotropy; + +# %% +# only + +# file name of the background model +bg_model_fname = "%s/linear_velocity_N%d_%d_%d_PyTomoATT.h5" % (output_path, n_rtp[0], n_rtp[1], n_rtp[2]) + +# read the background model +bg_model = np.zeros(n_rtp) +with h5py.File(bg_model_fname, 'r') as f: + bg_model = f['vel'][:] + +# set the checkerboard model +vel = np.zeros(n_rtp) +xi = np.zeros(n_rtp) +eta = np.zeros(n_rtp) + +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + depth = am_depths[ir] + lat = am_latitudes[it] + lon = am_longitudes[ip] + + if ((depth >= 0.0) and (depth <= 8.0)): + size_vel = 0.2 + size_ani = 0.3 + + sigma_vel = np.sin(np.pi * lon/size_vel) * np.sin(np.pi * lat/size_vel) * np.sin(np.pi * depth/8.0) + sigma_ani = np.sin(np.pi * lon/size_ani) * np.sin(np.pi * lat/size_ani) * np.sin(np.pi * depth/8.0) + + elif ((depth > 8.0) and (depth <= 20.0)): + + size_vel = 0.3 + size_ani = 0.4 + + sigma_vel = np.sin(np.pi * lon/size_vel) * np.sin(np.pi * lat/size_vel) * np.sin(np.pi * (depth - 8.0)/12.0 + np.pi) + sigma_ani = np.sin(np.pi * lon/size_ani) * np.sin(np.pi * lat/size_ani) * np.sin(np.pi * (depth - 8.0)/12.0 + np.pi) + + elif ((depth > 20.0) and (depth <= 36.0)): + + size_vel = 0.4 + size_ani = 0.5 + + sigma_vel = np.sin(np.pi * lon/size_vel) * np.sin(np.pi * lat/size_vel) * np.sin(np.pi * (depth - 20.0)/16.0 + 2*np.pi) + sigma_ani = np.sin(np.pi * lon/size_ani) * np.sin(np.pi * lat/size_ani) * np.sin(np.pi * (depth - 20.0)/16.0 + 2*np.pi) + + else: + sigma_vel = 0.0 + sigma_ani = 0.0 + + if (sigma_ani > 0): + psi = ani_dir / 180.0 * np.pi # convert degrees to radians + elif (sigma_ani < 0): + psi = (ani_dir + 90.0) / 180.0 * np.pi + else: + psi = 0.0 + + # set the velocity and anisotropy + vel[ir, it, ip] = bg_model[ir, it, ip] * (1.0 + pert_vel * sigma_vel) + xi[ir, it, ip] = pert_ani * abs(sigma_ani) * np.cos(2*psi) + eta[ir, it, ip] = pert_ani * abs(sigma_ani) * np.sin(2*psi) + +# write the model to a file +fname = "%s/linear_velocity_ckb_flex_N%d_%d_%d.h5" % (output_path, n_rtp[0], n_rtp[1], n_rtp[2]) +with h5py.File(fname, 'w') as f: + f.create_dataset('vel', data=vel) + f.create_dataset('xi', data=xi) + f.create_dataset('eta', data=eta) + +print("generate flexible checkerboard model based on the linear velocity model using plain loop:", fname) + + diff --git a/examples/scripts_of_generate_hdf5_model/2_plot_models.py b/examples/scripts_of_generate_hdf5_model/2_plot_models.py new file mode 100644 index 0000000..4bf5d2a --- /dev/null +++ b/examples/scripts_of_generate_hdf5_model/2_plot_models.py @@ -0,0 +1,338 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + + +# %% +import os +output_path = "figs" +os.makedirs(output_path, exist_ok=True) + + +# %% [markdown] +# # eg1. plot constant velocity model + +# %% +# ---------------- read model files ---------------- +# file names +# init_model_file = 'models/constant_velocity_N61_51_101_PyTomoATT.h5' # initial model file +init_model_file = 'models/constant_velocity_N61_51_101_loop.h5' # initial model file +par_file = 'input_params/input_params.yaml' # parameter file + +# read initial and final model file +att_model = ATTModel.read(init_model_file, par_file) +init_model = att_model.to_xarray() + +# interp vel at depth = 20 km +depth = 20.0 +vel_init = init_model.interp_dep(depth, field='vel') # vel_init[i,:] are (lon, lat, vel) + +# ----------------- pygmt plot ------------------ + +fig = pygmt.Figure() +pygmt.makecpt(cmap="seis", series=[5, 7], background=True, reverse=False) # colorbar + + +# ------------ plot horizontal profile of velocity ------------ +region = [0, 2, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa1","ya1","+tVelocity (km/s)"], projection="M10c") # base map + +depth = 20.0 +prof_init = init_model.interp_dep(depth, field='vel') # prof_init[i,:] are (lon, lat, vel) +lon = prof_init[:,0] # longitude +lat = prof_init[:,1] # latitude +vel = prof_init[:,2] # velocity + +grid = pygmt.surface(x=lon, y=lat, z=vel, spacing=0.04,region=region) + +fig.grdimage(grid = grid) # plot figure +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a1","y+lVp (km/s)"], position="+e+w4c/0.3c+h") +fig.shift_origin(xshift=0, yshift= 1.5) + +# ------------ plot horivertical profile of velocity ------------ +fig.shift_origin(xshift=11, yshift= 0) + +region = [0, 40, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa20+lDepth (km)","ya1+lLatitude","nSwE"], projection="X3c/5c") # base map + +start = [1,0]; end = [1,1]; gap = 1 +prof_init = init_model.interp_sec(start, end, field='vel', val = gap) # prof_init[i,:] are (lon, lat, dis, dep, vel) +lat = prof_init[:,1] # lat +dep = prof_init[:,3] # depth +vel = prof_init[:,4] # velocity + +grid = pygmt.surface(x=dep, y=lat, z=vel, spacing="1/0.04",region=region) + +fig.grdimage(grid = grid) # plot figure + +fig.savefig("figs/constant_velocity.png") # save figure +fig.show() + + + +# %% [markdown] +# # eg2. plot linear velocity model + +# %% +# ---------------- read model files ---------------- +# file names +# init_model_file = 'models/linear_velocity_N61_51_101_PyTomoATT.h5' # initial model file +init_model_file = 'models/linear_velocity_N61_51_101_loop.h5' # initial model file +par_file = 'input_params/input_params.yaml' # parameter file + +# read initial and final model file +att_model = ATTModel.read(init_model_file, par_file) +init_model = att_model.to_xarray() + +# # interp vel at depth = 20 km +# depth = 20.0 +# vel_init = init_model.interp_dep(depth, field='vel') # vel_init[i,:] are (lon, lat, vel) + +# ----------------- pygmt plot ------------------ + +fig = pygmt.Figure() +pygmt.makecpt(cmap="seis", series=[5, 8], background=True, reverse=False) # colorbar + + +# ------------ plot horizontal profile of velocity ------------ +region = [0, 2, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa1","ya1","+tVelocity (km/s)"], projection="M10c") # base map + +depth = 20.0 +prof_init = init_model.interp_dep(depth, field='vel') # prof_init[i,:] are (lon, lat, vel) +lon = prof_init[:,0] # longitude +lat = prof_init[:,1] # latitude +vel = prof_init[:,2] # velocity + +grid = pygmt.surface(x=lon, y=lat, z=vel, spacing=0.04,region=region) + +fig.grdimage(grid = grid) # plot figure +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a1","y+lVp (km/s)"], position="+e+w4c/0.3c+h") +fig.shift_origin(xshift=0, yshift= 1.5) + +# ------------ plot horivertical profile of velocity ------------ +fig.shift_origin(xshift=11, yshift= 0) + +region = [0, 40, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa20+lDepth (km)","ya1+lLatitude","nSwE"], projection="X3c/5c") # base map + +start = [1,0]; end = [1,1]; gap = 1 +prof_init = init_model.interp_sec(start, end, field='vel', val = gap) # prof_init[i,:] are (lon, lat, dis, dep, vel) +lat = prof_init[:,1] # lat +dep = prof_init[:,3] # depth +vel = prof_init[:,4] # velocity + +grid = pygmt.surface(x=dep, y=lat, z=vel, spacing="1/0.04",region=region) + +fig.grdimage(grid = grid) # plot figure + +fig.savefig("figs/linear_velocity.png") # save figure +fig.show() + + + +# %% [markdown] +# # eg3. plot checkerboard model + +# %% +# ---------------- read model files ---------------- +# file names +init_model_file = 'models/linear_velocity_N61_51_101_PyTomoATT.h5' # initial model file +ckb_model_file = 'models/linear_velocity_ckb_N61_51_101_PyTomoATT.h5' # checkerboard model file +# ckb_model_file = 'models/linear_velocity_ckb_N61_51_101_loop.h5' # checkerboard model file +par_file = 'input_params/input_params.yaml' # parameter file + +# read initial and final model file +att_model = ATTModel.read(init_model_file, par_file) +init_model = att_model.to_xarray() + +att_model = ATTModel.read(ckb_model_file, par_file) +ckb_model = att_model.to_xarray() + +# # interp vel at depth = 20 km +# depth = 20.0 +# vel_init = init_model.interp_dep(depth, field='vel') # vel_init[i,:] are (lon, lat, vel) +# vel_ckb = ckb_model.interp_dep(depth, field='vel') # vel_ckb[i,:] are (lon, lat, vel) + +# ----------------- pygmt plot ------------------ + +fig = pygmt.Figure() +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-10,10], background=True, reverse=False) # colorbar + + +# ------------ plot horizontal profile of velocity ------------ +region = [0, 2, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa1","ya1","+tVelocity perturbation (%)"], projection="M10c") # base map + +# velocity perturbation at depth = 15 km +depth = 15.0 +prof_init = init_model.interp_dep(depth, field='vel') # prof_init[i,:] are (lon, lat, vel) +prof_ckb = ckb_model.interp_dep(depth, field='vel') # prof_ckb[i,:] are (lon, lat, vel) +lon = prof_init[:,0] # longitude +lat = prof_init[:,1] # latitude +vel_pert = (prof_ckb[:,2] - prof_init[:,2])/prof_init[:,2] * 100 # velocity perturbation related to initial model + +grid = pygmt.surface(x=lon, y=lat, z=vel_pert, spacing=0.01,region=region) + +fig.grdimage(grid = grid) # plot figure +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# fast velocity directions (FVDs) +samp_interval = 3 # control the density of anisotropic arrows +width = 0.06 # width of the anisotropic arrow +ani_per_1 = 0.01; ani_per_2 = 0.05; scale = 0.5; basic = 0.1 # control the length of anisotropic arrows related to the amplitude of anisotropy. length = 0.1 + (amplitude - ani_per_1) / (ani_per_2 - ani_per_1) * scale +ani_thd = ani_per_1 # if the amplitude of anisotropy is smaller than ani_thd, no anisotropic arrow will be plotted + +phi = ckb_model.interp_dep(depth, field='phi', samp_interval=samp_interval) # phi_inv[i,:] are (lon, lat, phi) +epsilon = ckb_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) # epsilon_inv[i,:] are (lon, lat, epsilon) +ani_lon = phi[:,0].reshape(-1,1) +ani_lat = phi[:,1].reshape(-1,1) +ani_phi = phi[:,2].reshape(-1,1) +length = ((epsilon[:,2] - ani_per_1) / (ani_per_2 - ani_per_1) * scale + basic).reshape(-1,1) +ani_arrow = np.hstack([ani_lon, ani_lat, ani_phi, length, np.ones((ani_lon.size,1))*width]) # lon, lat, color, angle[-90,90], length, width + +# remove arrows with small amplitude of anisotropy +idx = np.where(epsilon[:,2] > ani_thd)[0] # indices of arrows with large enough amplitude of anisotropy +ani_arrow = ani_arrow[idx,:] # remove arrows with small amplitude of anisotropy + +# plot anisotropic arrows +fig.plot(ani_arrow, style='j', fill='yellow1', pen='0.5p,black') # plot fast velocity direction + + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a10","y+ldlnVp (%)"], position="+e+w4c/0.3c+h") +fig.shift_origin(xshift=0, yshift= 1.5) + +# ------------ plot horivertical profile of velocity ------------ +fig.shift_origin(xshift=11, yshift= 0) + +region = [0, 40, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa20+lDepth (km)","ya1+lLatitude","nSwE"], projection="X3c/5c") # base map + +start = [0.875,0]; end = [0.875,1]; gap = 1 +prof_init = init_model.interp_sec(start, end, field='vel', val = gap) # prof_init[i,:] are (lon, lat, dis, dep, vel) +prof_ckb = ckb_model.interp_sec(start, end, field='vel', val = gap) # prof_ckb[i,:] are (lon, lat, dis, dep, vel) +lat = prof_init[:,1] # lat +dep = prof_init[:,3] # depth +vel = (prof_ckb[:,4] - prof_init[:,4])/prof_init[:,4] * 100 # velocity perturbation related to initial model + +grid = pygmt.surface(x=dep, y=lat, z=vel, spacing="1/0.01",region=region) + +fig.grdimage(grid = grid) # plot figure + +fig.savefig("figs/checkerboard_velocity.png") # save figure +fig.show() + + +# %% [markdown] +# # eg4. plot flexible checkerboard model + +# %% +# ---------------- read model files ---------------- +# file names +init_model_file = 'models/linear_velocity_N61_51_101_PyTomoATT.h5' # initial model file +ckb_model_file = 'models/linear_velocity_ckb_flex_N61_51_101.h5' # checkerboard model file +par_file = 'input_params/input_params.yaml' # parameter file + +# read initial and final model file +att_model = ATTModel.read(init_model_file, par_file) +init_model = att_model.to_xarray() + +att_model = ATTModel.read(ckb_model_file, par_file) +ckb_model = att_model.to_xarray() + +# # interp vel at depth = 20 km +# depth = 20.0 +# vel_init = init_model.interp_dep(depth, field='vel') # vel_init[i,:] are (lon, lat, vel) +# vel_ckb = ckb_model.interp_dep(depth, field='vel') # vel_ckb[i,:] are (lon, lat, vel) + +# ----------------- pygmt plot ------------------ + +fig = pygmt.Figure() +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-10,10], background=True, reverse=False) # colorbar + + +for depth in [4,14,28]: + # ------------ plot horizontal profile of velocity ------------ + region = [0, 2, 0, 1] # region of interest + fig.basemap(region=region, frame=["xa1","ya1","NsEw"], projection="M10c") # base map + + # velocity perturbation at depth = 15 km + prof_init = init_model.interp_dep(depth, field='vel') # prof_init[i,:] are (lon, lat, vel) + prof_ckb = ckb_model.interp_dep(depth, field='vel') # prof_ckb[i,:] are (lon, lat, vel) + lon = prof_init[:,0] # longitude + lat = prof_init[:,1] # latitude + vel_pert = (prof_ckb[:,2] - prof_init[:,2])/prof_init[:,2] * 100 # velocity perturbation related to initial model + + grid = pygmt.surface(x=lon, y=lat, z=vel_pert, spacing=0.01,region=region) + + fig.grdimage(grid = grid) # plot figure + + # fast velocity directions (FVDs) + samp_interval = 3 # control the density of anisotropic arrows + width = 0.06 # width of the anisotropic arrow + ani_per_1 = 0.01; ani_per_2 = 0.05; scale = 0.5; basic = 0.1 # control the length of anisotropic arrows related to the amplitude of anisotropy. length = 0.1 + (amplitude - ani_per_1) / (ani_per_2 - ani_per_1) * scale + ani_thd = ani_per_1 # if the amplitude of anisotropy is smaller than ani_thd, no anisotropic arrow will be plotted + + phi = ckb_model.interp_dep(depth, field='phi', samp_interval=samp_interval) # phi_inv[i,:] are (lon, lat, phi) + epsilon = ckb_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) # epsilon_inv[i,:] are (lon, lat, epsilon) + ani_lon = phi[:,0].reshape(-1,1) + ani_lat = phi[:,1].reshape(-1,1) + ani_phi = phi[:,2].reshape(-1,1) + length = ((epsilon[:,2] - ani_per_1) / (ani_per_2 - ani_per_1) * scale + basic).reshape(-1,1) + ani_arrow = np.hstack([ani_lon, ani_lat, ani_phi, length, np.ones((ani_lon.size,1))*width]) # lon, lat, color, angle[-90,90], length, width + + # remove arrows with small amplitude of anisotropy + idx = np.where(epsilon[:,2] > ani_thd)[0] # indices of arrows with large enough amplitude of anisotropy + ani_arrow = ani_arrow[idx,:] # remove arrows with small amplitude of anisotropy + + # plot anisotropic arrows + fig.plot(ani_arrow, style='j', fill='yellow1', pen='0.5p,black') # plot fast velocity direction + + fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + + # plot vertical profile + fig.plot(x=[0.9, 0.9], y=[0, 1], pen="2p,black,-") # vertical line + + fig.shift_origin(xshift=0, yshift=-6) + +# colorbar +fig.shift_origin(xshift=0, yshift= 4.5) +fig.colorbar(frame = ["a10","y+ldlnVp (%)"], position="+e+w4c/0.3c+h") +fig.shift_origin(xshift=0, yshift= 1.5) + +# ------------ plot horivertical profile of velocity ------------ +fig.shift_origin(xshift=11, yshift= 0) + +region = [0, 40, 0, 1] # region of interest +fig.basemap(region=region, frame=["xa20+lDepth (km)","ya1+lLatitude","nSwE"], projection="X3c/5c") # base map + +start = [0.9,0]; end = [0.9,1]; gap = 1 +prof_init = init_model.interp_sec(start, end, field='vel', val = gap) # prof_init[i,:] are (lon, lat, dis, dep, vel) +prof_ckb = ckb_model.interp_sec(start, end, field='vel', val = gap) # prof_ckb[i,:] are (lon, lat, dis, dep, vel) +lat = prof_init[:,1] # lat +dep = prof_init[:,3] # depth +vel = (prof_ckb[:,4] - prof_init[:,4])/prof_init[:,4] * 100 # velocity perturbation related to initial model + +grid = pygmt.surface(x=dep, y=lat, z=vel, spacing="1/0.01",region=region) + +fig.grdimage(grid = grid) # plot figure + +fig.savefig("figs/flexible_checkerboard_velocity.png") # save figure +fig.show() + + + diff --git a/examples/scripts_of_generate_hdf5_model/input_params/input_params.yaml b/examples/scripts_of_generate_hdf5_model/input_params/input_params.yaml new file mode 100644 index 0000000..dffdc97 --- /dev/null +++ b/examples/scripts_of_generate_hdf5_model/input_params/input_params.yaml @@ -0,0 +1,50 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 50] # depth in km + min_max_lat: [0, 1] # latitude in degree + min_max_lon: [0, 2] # longitude in degree + n_rtp: [61, 51, 101] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: 1_src_rec_files/src_rec_config.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: 2_models/model_ckb_N61_51_101.h5 # path to initial model file + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 8 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: OUTPUT_FILES/OUTPUT_FILES_signal # path to output director (default is ./OUTPUT_FILES/) + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: false # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +run_mode: 0 diff --git a/examples/scripts_of_generate_hdf5_model/run_this_example.sh b/examples/scripts_of_generate_hdf5_model/run_this_example.sh new file mode 100644 index 0000000..5257145 --- /dev/null +++ b/examples/scripts_of_generate_hdf5_model/run_this_example.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# run the script to generate HDF5 model files for TomoATT. Four models will be generated for TomoATT +# 1. constant velocity model +# 2. linear velocity model +# 3. regular checkerboard model based on the linear velocity model +# 4. flexible checkerboard model based on the linear velocity model + +python 1_generate_models.py + +# run the script to plot the generated models (optional) + +python 2_plot_models.py diff --git a/examples/scripts_of_plotting/1_plot_model.py b/examples/scripts_of_plotting/1_plot_model.py new file mode 100644 index 0000000..3c8f24b --- /dev/null +++ b/examples/scripts_of_plotting/1_plot_model.py @@ -0,0 +1,173 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# (Option 1) plot the final model after inversion + +# Need to set "output_final_model" as "True" in the input_params.yaml file + +# ---------------- read model files ---------------- +# file names +init_model_file = 'input_files/model_init_N61_61_61.h5' # initial model file +inv_model_file = 'OUTPUT_FILES/final_model.h5' # final model file +par_file = 'input_files/input_params.yaml' # parameter file + +# read initial and final model file +model = ATTModel.read(init_model_file, par_file) +init_model = model.to_xarray() + +model = ATTModel.read(inv_model_file, par_file) +inv_model = model.to_xarray() + + +# %% +# # (Option 2) plot the model at the XX iteration + +# # Need to set "output_middle_model" as "True" in the input_params.yaml file + +# # ---------------- read model files ---------------- +# # file names +# init_model_file = 'input_files/model_init_N61_61_61.h5' # initial model file +# inv_model_file = 'OUTPUT_FILES/middle_model_step_0007.h5' # final model file +# par_file = 'input_files/input_params.yaml' # parameter file + +# # read initial and final model file +# model = ATTModel.read(init_model_file, par_file) +# init_model = model.to_xarray() + +# model = ATTModel.read(inv_model_file, par_file) +# inv_model = model.to_xarray() + +# %% +import os +try: + os.mkdir('img') +except: + pass + +# %% +# ---------------- access 3D model parameters ---------------- + +# we can access 3D dataset with keys: +# 1. "vel" for velocity +# 2. "phi" fast velocity direction, anti-clock angle w.r.t the east direction. (only available for anisotropic model) +# 3. "epsilon" for anisotropic magnitude (only available for anisotropic model) +# 4. "xi" and "eta" for anisotropic parameters: xi = epsilon * cos(phi), eta = epsilon * sin(phi) +vel_3d_array = inv_model["vel"] +phi_3d_array = inv_model["phi"] +epsilon_3d_array = inv_model["epsilon"] +xi_3d_array = inv_model["xi"] +eta_3d_array = inv_model["eta"] + +print("3D array of model parameters. \n vel: ", vel_3d_array.shape, " \n phi: ", phi_3d_array.shape, + " \n epsilon: ", epsilon_3d_array.shape, " \n xi: ", xi_3d_array.shape, " \n eta: ", eta_3d_array.shape) + +# %% +# ---------------- 2D depth profile of velocity perturbation ---------------- + +# interp vel at depth = 20 km +depth = 20.0 +vel_init = init_model.interp_dep(depth, field='vel') # vel_init[i,:] are (lon, lat, vel) +vel_inv = inv_model.interp_dep(depth, field='vel') + +print("vel_depth at depth = ", depth, " km. vel_depth:", vel_init.shape, ", (lon, lat, vel)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","+tVelocity perturbation"], projection="M10c") # base map +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-20, 20], background=True, reverse=False) # colorbar + +x = vel_init[:,0]; # longitude +y = vel_init[:,1]; # latitude +value = (vel_inv[:,2] - vel_init[:,2])/vel_init[:,2] * 100 # velocity perturbation relative to the initial model +grid = pygmt.surface(x=x, y=y, z=value, spacing=0.04,region=[0,2,0,2]) + +fig.grdimage(grid = grid) # plot figure +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a20","y+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.savefig("img/1_dep_vel.png") + +# %% +# ---------------- 2D depth profile of azimuthal anisotropy ---------------- + +# interp magnitude of anisotropy at depth = 20 km +depth = 20.0 +epsilon_inv = inv_model.interp_dep(depth, field='epsilon') # epsilon_inv[i,:] are (lon, lat, epsilon) + +print("epsilon_inv at depth = ", depth, " km. epsilon_inv:", epsilon_inv.shape, ", (lon, lat, epsilon)") + +# generate fast velocity direction (anisotropic arrow) +samp_interval = 3 +length = 10 +width = 0.1 +ani_thd = 0.02 +ani_phi = inv_model.interp_dep(depth, field='phi', samp_interval=samp_interval) +ani_epsilon = inv_model.interp_dep(depth, field='epsilon', samp_interval=samp_interval) +ani_arrow = np.hstack([ani_phi, ani_epsilon[:,2].reshape(-1, 1)*length, np.ones((ani_epsilon.shape[0],1))*width]) # lon, lat, angle, length, width +idx = np.where(ani_epsilon[:,2] > ani_thd) +ani_arrow = ani_arrow[idx[0],:] + +print("ani_arrow at depth = ", depth, " km. ani_arrow:", ani_arrow.shape, ", (lon, lat, angle, length, width)") + + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","+tAzimuthal Anisotropy"], projection="M10c") # base map +pygmt.makecpt(cmap="cool", series=[0, 0.1], background=True, reverse=False) # colorbar + +x = epsilon_inv[:,0]; # longitude +y = epsilon_inv[:,1]; # latitude +value = epsilon_inv[:,2] # magnitude of anisotropy +grid = pygmt.surface(x=x, y=y, z=value, spacing=0.04,region=[0,2,0,2]) + +fig.grdimage(grid = grid) # plot magnitude of anisotropy +fig.plot(ani_arrow, style='j', fill='yellow1', pen='0.5p,black') # plot fast velocity direction + +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a0.1","y+lAnisotropy"], position="+e+w4c/0.3c+h") + +fig.savefig("img/1_dep_ani.png") + +# %% +# ---------------- 2D vertical profile of velocity perturbation ---------------- + +# interp vel from [0,0.75] in lon-lat to [2,0.75] in lon-lat, gap = 1 km +start = [0,0.75]; end = [2,0.75]; gap = 1 +vel_init_sec = init_model.interp_sec(start, end, field='vel', val = gap) # vel_init_sec[i,:] are (lon, lat, dis, dep, vel) +vel_inv_sec = inv_model.interp_sec(start, end, field='vel', val = gap) + +print("vel_init_sec:", vel_init_sec.shape, ", (lon, lat, distance, depth, vel)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,40], frame=["xa1+lLongitude","ya20+lDepth (km)","+tVelocity perturbation"], projection="X10c/-4c") # base map +pygmt.makecpt(cmap="../utils/svel13_chen.cpt", series=[-20, 20], background=True, reverse=False) # colorbar + +x = vel_init_sec[:,0]; # longitude +y = vel_init_sec[:,3]; # depth +value = (vel_inv_sec[:,4] - vel_init_sec[:,4])/vel_init_sec[:,4] * 100 # velocity perturbation relative to the initial model +grid = pygmt.surface(x=x, y=y, z=value, spacing="0.04/1",region=[0,2,0,40]) + +fig.grdimage(grid = grid) # plot figure +fig.text(text="A", x = 0.1 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") +fig.text(text="A@+'@+", x = 1.9 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-2) +fig.colorbar(frame = ["a20","y+ldlnVp (%)"], position="+e+w4c/0.3c+h") + +fig.savefig("img/1_sec_vel.png") + + diff --git a/examples/scripts_of_plotting/2_plot_time_field.py b/examples/scripts_of_plotting/2_plot_time_field.py new file mode 100644 index 0000000..19726bb --- /dev/null +++ b/examples/scripts_of_plotting/2_plot_time_field.py @@ -0,0 +1,187 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# plot the traveltime field and adjoint field of the source at the XX iteration +# 1. set "output_source_field" to be "True" in the input_params.yaml file + +# Because source parallelizaion is used, the source field is only stored in one out_data_sim_group_XX.h5 file. +# For example, if we use 8 processors for source parallelization, we have +# src_JC00 is stored in out_data_sim_group_0.h5 file. +# src_JC05 is stored in out_data_sim_group_5.h5 file. +# src_JC07 is stored in out_data_sim_group_7.h5 file. +# src_JC08 is stored in out_data_sim_group_0.h5 file. +# src_JC09 is stored in out_data_sim_group_1.h5 file. +# src_JC10 is stored in out_data_sim_group_2.h5 file. +# ... +# src_JC24 is stored in out_data_sim_group_0.h5 file. + +# ---------------- read files ---------------- +src_name = 'JC05' +Nstep = "0007" + +# file names +data_file = 'OUTPUT_FILES/out_data_sim_group_5.h5' # data file +par_file = 'input_files/input_params.yaml' # parameter file +grid_file = 'OUTPUT_FILES/out_data_grid.h5' # grid file +group = 'src_%s'%(src_name) # src_${src_name} + +# read traveltime field +dataset_time = 'time_field_inv_%s'%(Nstep) # time_field_inv_${Nstep} +data = ATTData.read(data_file, par_file, grid_file, group, dataset_time) +time_field = data.to_xarray() + +# read adjoint field +dataset_adjoint = 'adjoint_field_inv_%s'%(Nstep) # adjoint_field_inv_${Nstep} +data = ATTData.read(data_file, par_file, grid_file, group, dataset_adjoint) +adjoint_field = data.to_xarray() + + +# %% +import os +try: + os.mkdir('img') +except: + pass + +# %% +# ---------------- access 3D time field and adjoint field ---------------- +# we can access 3D dataset: + +dep_1d_array = time_field["dep"] +lat_1d_array = time_field["lat"] +lon_1d_array = time_field["lon"] + +print("3D array of coordinates. \n dep: ", dep_1d_array.shape, " \n lat: ", lat_1d_array.shape, " \n lon: ", lon_1d_array.shape) + +time_3d_array = time_field[dataset_time] +adjoint_3d_array = adjoint_field[dataset_adjoint] + +print("3D array of fields. \n time: ", time_3d_array.shape, " \n adjoint: ", adjoint_3d_array.shape) + +# %% +# ---------------- 2D depth profile of time field ---------------- + +# interp vel at depth = 20 km +depth = 20.0 +time = time_field.interp_dep(depth, field=dataset_time) # time[i,:] are (lon, lat, vel) + +print("time at depth = ", depth, " km. time:", time.shape, ", (lon, lat, time)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","+tTraveltime"], projection="M10c") # base map +pygmt.makecpt(cmap="jet", series=[0, 30], background=True, reverse=True) # colorbar + +x = time[:,0]; # longitude +y = time[:,1]; # latitude +value = time[:,2] # traveltime +grid = pygmt.surface(x=x, y=y, z=value, spacing=0.04,region=[0,2,0,2]) + +fig.grdimage(grid = grid) # plot figure +fig.contour(x=x, y=y, z=value, levels=5, pen="1.5p,white") # contour +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a20","y+lTraveltime (s)"], position="+e+w4c/0.3c+h") + +fig.savefig("img/2_dep_time.png") + +# %% +# ---------------- 2D depth profile of adjoint field ---------------- + +# interp vel at depth = 20 km +depth = 20.0 +adjoint = adjoint_field.interp_dep(depth, field=dataset_adjoint) + +print("time at depth = ", depth, " km. time:", time.shape, ", (lon, lat, time)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","+tAdjoint field"], projection="M10c") # base map +pygmt.makecpt(cmap="jet", series=[-0.5, 0.5], background=True, reverse=False) # colorbar + +x = time[:,0]; # longitude +y = time[:,1]; # latitude +value = adjoint[:,2] # traveltime +value = value/np.nanmax(np.abs(value)) +grid = pygmt.surface(x=x, y=y, z=value, spacing=0.04,region=[0,2,0,2]) + +fig.grdimage(grid = grid) # plot figure +fig.contour(x=x, y=y, z=time[:,2], levels=5, pen="1.5p,white") # contour +fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a0.5","y+lAdjoint field"], position="+e+w4c/0.3c+h") + +fig.savefig("img/2_dep_adjoint.png") + +# %% +# ---------------- 2D vertical profile of traveltime field ---------------- + +# interp from [0,0.6] in lon-lat to [2,0.6] in lon-lat, gap = 1 km +start = [0,0.6]; end = [2,0.6]; gap = 1 +time_sec = time_field.interp_sec(start, end, field=dataset_time, val = gap) # time_sec[i,:] are (lon, lat, dis, dep, time) + +print("time_sec:", time_sec.shape, ", (lon, lat, distance, depth, time)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,40], frame=["xa1+lLongitude","ya20+lDepth (km)","+tTraveltime"], projection="X10c/-2c") # base map +pygmt.makecpt(cmap="jet", series=[0, 30], background=True, reverse=True) # colorbar + +x = time_sec[:,0]; # longitude +y = time_sec[:,3]; # depth +value = time_sec[:,4] # traveltime +grid = pygmt.surface(x=x, y=y, z=value, spacing="0.04/1",region=[0,2,0,40]) + +fig.grdimage(grid = grid) # plot figure +fig.contour(x=x, y=y, z=value, levels=5, pen="1.5p,white") # contour +fig.text(text="A", x = 0.1 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") +fig.text(text="A@+'@+", x = 1.9 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-2) +fig.colorbar(frame = ["a20","y+lTraveltime (s)"], position="+e+w4c/0.3c+h") + +fig.savefig("img/2_sec_time.png") + +# %% +# ---------------- 2D vertical profile of adjoint field ---------------- + +# interp from [0,0.6] in lon-lat to [2,0.6] in lon-lat, gap = 1 km +start = [0,0.6]; end = [2,0.6]; gap = 1 +adjoint_sec = adjoint_field.interp_sec(start, end, field=dataset_adjoint, val = gap) + +print("adjoint_sec:", time_sec.shape, ", (lon, lat, distance, depth, adjoint)") + +# plot +fig = pygmt.Figure() +fig.basemap(region=[0,2,0,40], frame=["xa1+lLongitude","ya20+lDepth (km)","+tAdjoint field"], projection="X10c/-2c") # base map +pygmt.makecpt(cmap="jet", series=[-0.5, 0.5], background=True, reverse=False) # colorbar + +x = adjoint_sec[:,0]; # longitude +y = adjoint_sec[:,3]; # depth +value = adjoint_sec[:,4] # traveltime +value = value/np.nanmax(np.abs(value)) +grid = pygmt.surface(x=x, y=y, z=value, spacing="0.04/1",region=[0,2,0,40]) + +fig.grdimage(grid = grid) # plot figure +fig.contour(x=x, y=y, z=time_sec[:,4], levels=5, pen="1.5p,white") # contour +fig.text(text="A", x = 0.1 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") +fig.text(text="A@+'@+", x = 1.9 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") + +# colorbar +fig.shift_origin(xshift=0, yshift=-2) +fig.colorbar(frame = ["a0.5","y+lAdjoint"], position="+e+w4c/0.3c+h") + +fig.savefig("img/2_sec_adjoint.png") + + diff --git a/examples/scripts_of_plotting/3_plot_kernel.py b/examples/scripts_of_plotting/3_plot_kernel.py new file mode 100644 index 0000000..9bc64d3 --- /dev/null +++ b/examples/scripts_of_plotting/3_plot_kernel.py @@ -0,0 +1,189 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + +from pytomoatt.model import ATTModel +from pytomoatt.data import ATTData +import numpy as np + +# %% +# plot sensitivity kernel at the XX iteration +# 1. set "output_kernel" to be "True" in the input_params.yaml file + +# ---------------- read files ---------------- +Nstep = "0007" +kernel_list = {} # dictionary to store all the kernels + +# file names +data_file = 'OUTPUT_FILES/out_data_sim_group_0.h5' # data file +par_file = 'input_files/input_params.yaml' # parameter file +grid_file = 'OUTPUT_FILES/out_data_grid.h5' # grid file +group = 'model' + +# (Option 1) read original sensitivity kernel +# Ks: kernel w.r.t. slowness at the 7-th iteration +dataset = 'Ks_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Kxi: kernel w.r.t. xi (anisotropic parameter) at the 7-th iteration +dataset = 'Kxi_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Keta: kernel w.r.t. eta (anisotropic parameter) at the 7-th iteration +dataset = 'Keta_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# %% +# (Option 2) read kernel_density +# Ks_den: kernel density w.r.t. slowness at the 7-th iteration +dataset = 'Ks_density_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Kxi_den: kernel density w.r.t. xi (anisotropic parameter) at the 7-th iteration +dataset = 'Kxi_density_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Keta_den: kernel density w.r.t. eta (anisotropic parameter) at the 7-th iteration +dataset = 'Keta_density_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# %% +# kernel density normalization is performed after smoothing. So tag 'Ks_over_Kden_inv_%s'%(Nstep) is not available for version > 1.0.3 +# # (Option 3) read normalized kernel, K/(k_den)^\zeta +# dataset = 'Ks_over_Kden_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# # Kxi_norm: normalized kernel w.r.t. xi (anisotropic parameter) at the 7-th iteration +# dataset = 'Kxi_over_Kden_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# # Keta_norm: normalized kernel w.r.t. eta (anisotropic parameter) at the 7-th iteration +# dataset = 'Keta_over_Kden_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# %% +# this part works for version > 1.0.3 +# # (Option 3) read kernel density smoothed by multigrid parameterization, +# dataset = 'Ks_density_update_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# # Kxi_norm: normalized kernel w.r.t. xi (anisotropic parameter) at the 7-th iteration +# dataset = 'Kxi_density_update_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# # Keta_norm: normalized kernel w.r.t. eta (anisotropic parameter) at the 7-th iteration +# dataset = 'Keta_density_update_inv_%s'%(Nstep) +# data = ATTData.read(data_file, par_file, grid_file, group, dataset) +# kernel_list[dataset] = data.to_xarray() + +# %% +# (Option 4) read normalized kernel smoothed by multigrid parameterization +# Ks_update: smoothed normalized kernel w.r.t. slowness at the 7-th iteration +dataset = 'Ks_update_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Kxi_update: smoothed normalized kernel w.r.t. xi (anisotropic parameter) at the 7-th iteration +dataset = 'Kxi_update_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# Keta_update: smoothed normalized kernel w.r.t. eta (anisotropic parameter) at the 7-th iteration +dataset = 'Keta_update_inv_%s'%(Nstep) +data = ATTData.read(data_file, par_file, grid_file, group, dataset) +kernel_list[dataset] = data.to_xarray() + +# %% +import os +try: + os.mkdir('img') +except: + pass + +# %% +# ---------------- access 3D array ---------------- +# we can access 3D dataset: + +dep_1d_array = kernel_list['Ks_inv_0007']["dep"] +lat_1d_array = kernel_list['Ks_inv_0007']["lat"] +lon_1d_array = kernel_list['Ks_inv_0007']["lon"] + +print("3D array of coordinates. \n dep: ", dep_1d_array.shape, " \n lat: ", lat_1d_array.shape, " \n lon: ", lon_1d_array.shape) + +array = kernel_list['Ks_inv_0007']["Ks_inv_0007"] + +print("3D array of kernel. \n Ks: ", array.shape) + +# %% +# ---------------- 2D depth profile of kernels ---------------- + +for dataset in kernel_list: + + # interp vel at depth = 20 km + depth = 20.0 + kernel = kernel_list[dataset].interp_dep(depth, field=dataset) # kernel[i,:] are (lon, lat, kernel) + + print("kernel at depth = ", depth, " km. kernel:", kernel.shape, ", (lon, lat, kernel)") + + # plot + fig = pygmt.Figure() + fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","+t%s"%(dataset)], projection="M10c") # base map + pygmt.makecpt(cmap="jet", series=[-0.5, 0.5], background=True, reverse=True) # colorbar + + x = kernel[:,0]; # longitude + y = kernel[:,1]; # latitude + value = kernel[:,2]/np.nanmax(np.abs(kernel[:,2])) # traveltime + grid = pygmt.surface(x=x, y=y, z=value, spacing=0.04,region=[0,2,0,2]) + + fig.grdimage(grid = grid) # plot figure + fig.text(text="%d km"%(depth), x = 0.2 , y = 0.1, font = "14p,Helvetica-Bold,black", fill = "white") + + # colorbar + fig.shift_origin(xshift=0, yshift=-1.5) + fig.colorbar(frame = ["a0.5","y+l%s"%(dataset)], position="+e+w4c/0.3c+h") + + fig.savefig("img/3_dep_%s.png"%(dataset)) + +# %% +# ---------------- 2D vertical profile of kernels ---------------- + +for dataset in kernel_list: + + # interp from [0,0.6] in lon-lat to [2,0.6] in lon-lat, gap = 1 km + start = [0,0.6]; end = [2,0.6]; gap = 1 + kernel_sec = kernel_list[dataset].interp_sec(start, end, field=dataset, val = gap) # kernel_sec[i,:] are (lon, lat, dis, dep, kernel) + + print("kernel_sec:", kernel_sec.shape, ", (lon, lat, distance, depth, kernel)") + + # plot + fig = pygmt.Figure() + fig.basemap(region=[0,2,0,40], frame=["xa1+lLongitude","ya20+lDepth (km)","+t%s"%(dataset)], projection="X10c/-2c") # base map + pygmt.makecpt(cmap="jet", series=[-0.5, 0.5], background=True, reverse=True) # colorbar + + x = kernel_sec[:,0]; # longitude + y = kernel_sec[:,3]; # depth + value = kernel_sec[:,4]/np.nanmax(np.abs(kernel_sec[:,4])) # traveltime + grid = pygmt.surface(x=x, y=y, z=value, spacing="0.04/1",region=[0,2,0,40]) + + fig.grdimage(grid = grid) # plot figure + fig.text(text="A", x = 0.1 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") + fig.text(text="A@+'@+", x = 1.9 , y = 5, font = "14p,Helvetica-Bold,black", fill = "white") + + # colorbar + fig.shift_origin(xshift=0, yshift=-2) + fig.colorbar(frame = ["a0.5","y+l%s"%(dataset)], position="+e+w4c/0.3c+h") + + fig.savefig("img/3_sec_%s.png"%(dataset)) + + diff --git a/examples/scripts_of_plotting/4_plot_earthquake_station.py b/examples/scripts_of_plotting/4_plot_earthquake_station.py new file mode 100644 index 0000000..ba78905 --- /dev/null +++ b/examples/scripts_of_plotting/4_plot_earthquake_station.py @@ -0,0 +1,54 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + + +# %% +from pytomoatt.src_rec import SrcRec + +# read src_rec_file +sr = SrcRec.read("input_files/src_rec_file.dat") + +# get the coordinates of the stations and earthquakes +stations = sr.receivers[['stlo','stla','stel']].values.T +earthquakes = sr.sources[['evlo','evla','evdp']].values.T + +print(stations.shape) +print(earthquakes.shape) + +# %% +# plot earthquakes and locations + +fig = pygmt.Figure() + +pygmt.makecpt(cmap="jet", series=[0, 40], background=True, reverse=True) # colorbar + +# -------- horizontal view (x-y) -------- +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","NsWe"], projection="M10c") # base map +# earthquakes +fig.plot(x = earthquakes[0,:], y = earthquakes[1,:], cmap = True, style = "c0.1c", fill = earthquakes[2,:]) +# stations +fig.plot(x = stations[0,:], y = stations[1,:], style = "t0.4c", fill = "blue", pen = "black", label = "Station") + + +# -------- vertical view (x-z) -------- +fig.shift_origin(xshift=0, yshift=-3) +fig.basemap(region=[0,2,0,40], frame=["xa1","ya20+lDepth (km)","NsWe"], projection="X10c/-2c") # base map +# earthquakes +fig.plot(x = earthquakes[0,:], y = earthquakes[2,:], cmap = True, style = "c0.1c", fill = earthquakes[2,:]) + + +# -------- vertical view (z-y) -------- +fig.shift_origin(xshift=11, yshift=3) +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","NsWe"], projection="X2c/10c") # base map +# earthquakes +fig.plot(x = earthquakes[2,:], y = earthquakes[1,:], cmap = True, style = "c0.1c", fill = earthquakes[2,:]) + + +# colorbar +fig.shift_origin(xshift=0, yshift=-1.5) +fig.colorbar(frame = ["a20","x+lDepth (km)"], position="+e+w2c/0.3c+h") + +fig.savefig("img/4_earthquakes_and_stations.png") + + diff --git a/examples/scripts_of_plotting/5_plot_objective_function.py b/examples/scripts_of_plotting/5_plot_objective_function.py new file mode 100644 index 0000000..8ba2eb0 --- /dev/null +++ b/examples/scripts_of_plotting/5_plot_objective_function.py @@ -0,0 +1,124 @@ +# %% +import sys +sys.path.append('../utils') +import functions_for_data as ffd + +# %% +# read objective function + +path = "OUTPUT_FILES" +full_curve, location_curve, model_curve = ffd.read_objective_function_file(path) + +print("full_curve: ", full_curve.shape, ", the total objective function value during the inversion, including relocation and model update") +print("location_curve: ", location_curve.shape, ", the objective function value during the relocation step") +print("model_curve: ", model_curve.shape, ", the objective function value during the model update step") + +print("The first index is iteraion number, the second index is the objective function value vector") + + +# %% +# (Option 1) objective function value +full_obj = full_curve[:,0] +location_obj = location_curve[:,0] +model_obj = model_curve[:,0] + +# (Option 2) objective function value for only traveltime +full_obj_tt = full_curve[:,1] +location_obj_tt = location_curve[:,1] +model_obj_tt = model_curve[:,1] + +# (Option 3) objective function value for only common source differential arrival time +full_obj_cs = full_curve[:,2] +location_obj_cs = location_curve[:,2] +model_obj_cs = model_curve[:,2] + +# (Option 4) objective function value for only common receiver differential arrival time +full_obj_cr = full_curve[:,3] +location_obj_cr = location_curve[:,3] +model_obj_cr = model_curve[:,3] + +# (Option 5) objective function value for teleseismic differential arrival time +full_obj_tele = full_curve[:,4] +location_obj_tele = location_curve[:,4] +model_obj_tele = model_curve[:,4] + +# (Option 6) mean value of all data residual +full_mean = full_curve[:,5] +location_mean = location_curve[:,5] +model_mean = model_curve[:,5] + +# (Option 7) standard deviation of all data residual +full_std = full_curve[:,6] +location_std = location_curve[:,6] +model_std = model_curve[:,6] + +# (Option 8) mean value of residuals of traveltime +full_mean_tt = full_curve[:,7] +location_mean_tt = location_curve[:,7] +model_mean_tt = model_curve[:,7] + +# (Option 9) standard deviation of residuals of traveltime +full_std_tt = full_curve[:,8] +location_std_tt = location_curve[:,8] +model_std_tt = model_curve[:,8] + +# (Option 10) mean value of residuals of common source differential arrival time +full_mean_cs = full_curve[:,9] +location_mean_cs = location_curve[:,9] +model_mean_cs = model_curve[:,9] + +# (Option 11) standard deviation of residuals of common source differential arrival time +full_std_cs = full_curve[:,10] +location_std_cs = location_curve[:,10] +model_std_cs = model_curve[:,10] + +# (Option 12) mean value of residuals of common receiver differential arrival time +full_mean_cr = full_curve[:,11] +location_mean_cr = location_curve[:,11] +model_mean_cr = model_curve[:,11] + +# (Option 13) standard deviation of residuals of common receiver differential arrival time +full_std_cr = full_curve[:,12] +location_std_cr = location_curve[:,12] +model_std_cr = model_curve[:,12] + +# (Option 14) mean value of residuals of teleseismic differential arrival time +full_mean_tele = full_curve[:,13] +location_mean_tele = location_curve[:,13] +model_mean_tele = model_curve[:,13] + +# (Option 15) standard deviation of residuals of teleseismic differential arrival time +full_std_tele = full_curve[:,14] +location_std_tele = location_curve[:,14] +model_std_tele = model_curve[:,14] + + +# %% +import os +try: + os.mkdir("img") +except: + pass + +# %% +# plot objective functin reduction + +import matplotlib.pyplot as plt +import numpy as np + +plt.figure(figsize=(10, 6)) +ax = plt.subplot(1, 1, 1) + +ax.plot(model_obj/np.max(model_obj), label='objective function', linewidth=2) +ax.set_xlim([-0.2, len(model_obj)-0.8]) +ax.set_ylim([0, 1.1]) +ax.grid() +ax.set_xlabel('Iteration number',fontsize=14) +ax.set_ylabel('Normalized value',fontsize=14) +ax.tick_params(axis='x', labelsize=14) +ax.tick_params(axis='y', labelsize=14) +ax.legend(fontsize=14) + +plt.savefig('img/5_objective_function_reduction.png', dpi=300, bbox_inches='tight', edgecolor='w', facecolor='w') + + diff --git a/examples/scripts_of_plotting/6_plot_data_residual.py b/examples/scripts_of_plotting/6_plot_data_residual.py new file mode 100644 index 0000000..f8193ed --- /dev/null +++ b/examples/scripts_of_plotting/6_plot_data_residual.py @@ -0,0 +1,86 @@ +# %% +import sys +sys.path.append('../utils') +import functions_for_data as ffd + + +# %% +# synthetic and observational traveltime files in the initial and final models + +file_init_syn = "OUTPUT_FILES/src_rec_file_inv_0000_reloc_0000.dat" # synthetic traveltime in the initial model +file_init_obs = "input_files/src_rec_file.dat" # observational traveltime in the initial model + +file_final_syn = "OUTPUT_FILES/src_rec_file_inv_0009_reloc_0009.dat" # synthetic traveltime in the final model +file_final_obs = "OUTPUT_FILES/src_rec_file_inv_0009_reloc_0009_obs.dat" # observational traveltime in the final model + + +# %% +# from pytomoatt.src_rec import SrcRec +# init_syn = SrcRec.read(file_init_syn) +# init_obs = SrcRec.read(file_init_obs) + +# final_syn = SrcRec.read(file_final_syn) +# final_obs = SrcRec.read(file_final_obs) + +# %% +ev, st = ffd.read_src_rec_file(file_init_syn) +time_init_syn = ffd.data_dis_time(ev, st)[1] # synthetic traveltime in the initial model + +ev, st = ffd.read_src_rec_file(file_init_obs) +time_init_obs = ffd.data_dis_time(ev, st)[1] # observational traveltime in the initial model + +ev, st = ffd.read_src_rec_file(file_final_syn) +time_final_syn = ffd.data_dis_time(ev, st)[1] # synthetic traveltime in the final model + +ev, st = ffd.read_src_rec_file(file_final_obs) +time_final_obs = ffd.data_dis_time(ev, st)[1] # observational traveltime in the final model + +# %% +import os +try: + os.mkdir("img") +except: + pass + +# %% +import numpy as np +import matplotlib.pyplot as plt + +fig = plt.figure(figsize=(8,8)) +ax = fig.add_subplot(111) + +range_l = -1.5 +range_r = 1.5 +Nbar = 20 + +bins=np.linspace(range_l,range_r,Nbar) +error_init = time_init_syn - time_init_obs +error_final = time_final_syn - time_final_obs + +tag1 = "initial mode" +tag2 = "final mode" + +hist_init, _, _ = ax.hist(error_init,bins=bins,histtype='step', edgecolor = "red", linewidth = 2, + label = "%s: std = %5.3f s, mean = %5.3f s"%(tag1,np.std(error_init),np.mean(error_init))) + +hist_final, _, _ = ax.hist(error_final,bins=bins,alpha = 0.5, color = "blue", + label = "%s: std = %5.3f s, mean = %5.3f s"%(tag2,np.std(error_final),np.mean(error_final))) + +print("residual for ",tag1," model is: ","mean: ",np.mean(error_init),"sd: ",np.std(error_init)) +print("residual for ",tag2," model is: ","mean: ",np.mean(error_final),"sd: ",np.std(error_final)) +ax.legend(fontsize=14) + +ax.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1) +ax.set_ylim(0,1.3*max(max(hist_init),max(hist_final))) + +ax.tick_params(axis='x',labelsize=18) +ax.tick_params(axis='y',labelsize=18) +ax.set_ylabel('Count of data',fontsize=18) +ax.set_xlabel('Traveltime residuals (s)',fontsize=18) +ax.set_title("$t_{syn} - t_{obs}$",fontsize=18) +ax.grid() + +plt.savefig("img/6_data_residual.png",dpi=300, bbox_inches='tight', edgecolor='w', facecolor='w' ) +plt.show() + + diff --git a/examples/scripts_of_plotting/7_plot_inversion_grid.py b/examples/scripts_of_plotting/7_plot_inversion_grid.py new file mode 100644 index 0000000..df3c589 --- /dev/null +++ b/examples/scripts_of_plotting/7_plot_inversion_grid.py @@ -0,0 +1,61 @@ +# %% +import pygmt +pygmt.config(FONT="16p", IO_SEGMENT_MARKER="<<<") + + +# %% +import sys +sys.path.append('../utils') +import functions_for_data as ffd + +# %% +# read inversion grid file + +inv_grid_vel, inv_grid_ani = ffd.read_inversion_grid_file("OUTPUT_FILES") + +print("inversion grid for velocity: ", inv_grid_vel.shape) +print("inversion grid for anisotropy: ", inv_grid_vel.shape) + +Nset = inv_grid_vel.shape[0] +Ngrid = inv_grid_vel.shape[1] + +colorlist = ["green","blue","red","purple","orange","yellow","black","gray","pink","cyan"] + +# %% +# plot earthquakes and locations + +fig = pygmt.Figure() + +pygmt.makecpt(cmap="jet", series=[0, 40], background=True, reverse=True) # colorbar + +# -------- horizontal view (x-y) -------- +fig.basemap(region=[0,2,0,2], frame=["xa1","ya1","NsWe"], projection="M10c") # base map +# plot inversion grid +for igrid in range(Nset): + x = inv_grid_vel[igrid,:,0] + y = inv_grid_vel[igrid,:,1] + fig.plot(x=x, y=y, style="c0.1c", fill=colorlist[igrid]) + +# -------- vertical view (x-z) -------- +fig.shift_origin(xshift=0, yshift=-3) +fig.basemap(region=[0,2,0,40], frame=["xa1","ya20+lDepth (km)","NsWe"], projection="X10c/-2c") # base map +# plot inversion grid +for igrid in range(Nset): + x = inv_grid_vel[igrid,:,0] + y = inv_grid_vel[igrid,:,2] + fig.plot(x=x, y=y, style="c0.1c", fill=colorlist[igrid]) + + +# -------- vertical view (z-y) -------- +fig.shift_origin(xshift=11, yshift=3) +fig.basemap(region=[0,40,0,2], frame=["xa20+lDepth (km)","ya1","NsWe"], projection="X2c/10c") # base map +# plot inversion grid +for igrid in range(Nset): + x = inv_grid_vel[igrid,:,2] + y = inv_grid_vel[igrid,:,1] + fig.plot(x=x, y=y, style="c0.1c", fill=colorlist[igrid]) + + +fig.savefig("img/7_inversion_grid.png") + + diff --git a/examples/scripts_of_plotting/README.md b/examples/scripts_of_plotting/README.md new file mode 100644 index 0000000..6ca9b8a --- /dev/null +++ b/examples/scripts_of_plotting/README.md @@ -0,0 +1,16 @@ +# Scripts of plotting + +It includes examples to illustrate the output file of TomoATT + + +Python modules are required to initiate the inversion and to plot final results: +- h5py +- PyTomoAT +- Pygmt +- gmt + +Run this example: + +1. Run bash script `bash run_this_example.sh` to execute the test. + + diff --git a/examples/scripts_of_plotting/prepare_files.py b/examples/scripts_of_plotting/prepare_files.py new file mode 100644 index 0000000..d6de7f2 --- /dev/null +++ b/examples/scripts_of_plotting/prepare_files.py @@ -0,0 +1,21 @@ +# %% +# download model file from Zenodo +import os +import requests + +url = 'https://zenodo.org/records/14160818/files/files_for_plotting.tar.gz?download=1' + +path = "files_for_plotting.tar.gz" + +# check file existence +if not os.path.exists(path): + print("Downloading src_rec_file.dat from Zenodo...") + print("The file is about 400 MB, so it may take a while.") + response = requests.get(url, stream=True) + with open(path, 'wb') as out_file: + out_file.write(response.content) + print("Download complete.") +else: + print("files_for_plotting.tar.gz already exists.") + + diff --git a/examples/scripts_of_plotting/run_this_example.sh b/examples/scripts_of_plotting/run_this_example.sh new file mode 100644 index 0000000..10ec932 --- /dev/null +++ b/examples/scripts_of_plotting/run_this_example.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Some script to plot figures for the output file of TomoATT + +python prepare_files.py # download the files for plotting +tar -xf files_for_plotting.tar.gz # extract the files + + +# Test 1: plot velocity perturbation and azimuthal anisotropy fields to generate +# img/1_dep_vel.png 2D velocity perturbation at 20 km depth +# img/1_dep_ani.png 2D azimuthal anisotropy at 20 km depth +# img/1_sec_vel.png 2D velocity perturbation along vertical section +python 1_plot_model.py + +# Test 2: plot traveltime and adjoint fields to generate +# img/2_dep_time.png 2D traveltime field at 20 km depth +# img/2_sec_time.png 2D traveltime field along vertical section +# img/2_dep_adjoint.png 2D adjoint field at XX depth +# img/2_sec_adjoint.png 2D adjoint field along vertical section +python 2_plot_time_field.py + +# Test 3: plot kernels to generate +# img/3_dep_Ks_inv_0007.png Ks: original kernel w.r.t slowness at 20 km depth +# img/3_dep_Ks_density_inv_0007.png Kden: kernel density w.r.t slowness at 20 km depth +# img/3_dep_Ks_over_Kden_inv_0007.png Ks/Kden^{\zeta}: normalized kernel w.r.t slowness at 20 km depth +# img/3_dep_Ks_update_inv_0007.png smoothed normalized kernel w.r.t slowness at 20 km depth +# img/3_sec_Ks_inv_0007.png Ks: original kernel w.r.t slowness along vertical section +# img/3_sec_Ks_density_inv_0007.png Kden: kernel density w.r.t slowness along vertical section +# img/3_sec_Ks_over_Kden_inv_0007.png Ks/Kden^{\zeta}: normalized kernel w.r.t slowness along vertical section +# img/3_sec_Ks_update_inv_0007.png smoothed normalized kernel w.r.t slowness along vertical section +# and the same for kernels w.r.t xi and eta (azimuthal anisotropy) +python 3_plot_kernel.py + +# Test 4: plot earthquakes and stations to generate +# img/4_earthquakes_and_stations.png the location of earthquakes and stations +python 4_plot_earthquake_station.py + +# Test 5: plot objective function reduction to generate +# img/5_objective_function_reduction.png the reduction of objective function value +python 5_plot_objective_function.py + +# Test 6: plot traveltime residuals to generate +# img/6_data_residual.png the traveltime residuals +python 6_plot_data_residual.py + +# Test 7: plot inversion grid to generate +# img/7_inversion_grid.png the inversion grid +python 7_plot_inversion_grid.py + + diff --git a/examples/src_rec_file_instruction.jpg b/examples/src_rec_file_instruction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6444f5ebabbf0654c44276155894dc322d116c7 GIT binary patch literal 2031745 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 rOV#CC}dJ1Vf5??+C0;=aH@7i*eEa!;i-kw<+ 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

lC_u9a$chgO8-cjtA_ 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Â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�V9}u2G*+*?9szbBe&~N76}j2N)Pf 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

$_bs#e0?6yB@MdUo%CUA8h#fJ%XF6v3P z*KhkU9E31t*7I>XZr{+2R$JFN(TLHn{0^BXJkvTzpPm(lm~Xc^5n^BKncbEp_+*$D z9PeNHA+W$HEh>7|X!%mJsp-n5??~7~#z19lNyut`11S~EE?i><;80HBE96*Va#lDs zP_==+0J(rPw>VCf4NrFbaNM?N1Ld z=I@53a~DBo3&WJFH9HFPvsGeMw>oSaACQ05ea0?E7 z_@*%P^)i8I@%pgICuirgZ-N;#_0+)zKk5bxm_Cdk<>sO)UR3cB<|9? zp!1EO3&0IyzAw*Ou*|<#;TSQZ75O26jTxg3`Ht1j1_sh|VY_w>Gz72?%-k$8fi0fE z+Wd3FB4D4avi{i@xS#kM-P4S(*!>j==e{=Gg|!W3;4n}#6%e|a20gvlYDTqsRyB@@ zRlJK+6d&x}PfK9j*$1n)Pk+{$4ooc6PNl>+rs)CZgr{w{_G!>gg#xA-4Hc2L0UUC1 ztf-pOR)!(RIgu03i@MrFIqKq=i<_7hRL|#trE@>X8EelXFir#lEM>jYHtb`k%eQ#7 z>tQvb-=G#gMXA&7=3gg^PXZZ$s-m6^{}-9_xf9gBJ~UfWx{G6NKcPVm-JZ=1bF3M} z@@BXTYK}*yRby~|xPJ5|#Qq?9)3(zgk5;sX7m!TnRn2Vkcgqh123OeYieq3TzHH4S zMJNBnL}f(pI5n^-dEK-@4Gu73K|KdKba2f!BuNE;3&{%6l)A z!hXzgP}Zz|?#&1D6VO)G&7ZxrK4+0QWp~gI9Z%g;JhMVmtn!nLhT0Qsb~YnyN>2BD z^na)E2K@=oweU-^M6V$;aF6ISAgR)6yuBL)wmQe!$I#Ti6%)QfhKCWVpw({umCC9L zb`_7S>x3x`KafQb$EBj6aymrQ zPTIdAF4KRCcy{261gC0*gy#Y&eREKWALsb<)%iZ)_Q%b^ck1Oj1|KZHbwc+8y$4>b z&r$T_vY57M`N|jbPj5yg@<=}!V6(lzL5kPy86eF@oKlhm=*1Dj)eoy^ z@mK(yN+tBJXuh&_uM*yf)phbI1&`$Q={cXk`0Fhka;~0dF`_&qCs-0bo6$t4Xm^ic;{M&BwM;+z zrQzCCd}pwUN-3h9M-S&ra#tJ6Xz(N-{f#I+CPNnK9U9{?{ti-I{(P6ye?+yspp=D- zDPSY^&gpy!p7OV4I0AbEI8P zSn@M?%|V<2EVVv+LZ^$#H=vtYTfUR%i$lmM?gusg8{pxwk+P*1yGf1Aa@@Q3ff>-d zM(oQMNl@BGdFk6=UJ}rD-wIXLtOGp%H~TISR6cB)cj*HKy-2FC|}gS4(D7gdN@qDFjFo=aFj-a1=!F*BY3 z)6V9c2(gO+i!Zl#RkmzgcNDvz_+d?tZ(fU+YZ6(C)vGJZ-rSscu3|WyEDr8Qx-Py{ zDD6DiRbg-z1)>cuBX2Fr1Qpfd{!mCvpg4Rx;`?3{YM;dBTwXbZxOqbu$nTI4m|XtH z;GBck!~+wsO9J0(&)5~uJOAB4(|40#_)+{>?j0Sh66TfSy?R6tpVWxjy^V5!a&3^= z1esu_(~lm@`gkNu_MN_W$cpbkx}%XtgXLcRFa}S4+8L82F!SeYt2q8J#;@isJSfXj zMa8vdwW#yc#}=cgOe600MEADJdye<5umG5o`kT9f+vR+UbdTr45p4}BCx;h3Nin|v zALbo3$j_~~+&JVP$aZP?+?C#kh`9ZPv&O`CLuc<^1BDDo6mcyZJc~K4cK18ub@yJi zo3dtd_I|a%jcvpK{s%XPuSv!)`!UwQNO8f1dS4S%F8{w+*+2guRu23v<9|_i;}YoK32Z)=UwtZo~n9taijEUz^*&Oh*7FF(t|L#iAj68OEnomEPq_H72imeO;1Wk zYMzp8*JPvmbLMXMd9=nw<98PP)YCKhaNDn6l7&~BIit4e?W*@JN4-WHlZSc}&^E~z z?51(J;_yw!*%D1Zm6RLdhHdvDEuOjquGOAuylH8T? zUJ%6lvDjNn%ti*xbI|YbrL>psJyn5aR)w~d;)Lu%{W16 z6qQx8^*(h(CgcI8QA0R+@8RJ$sUO6xZG!F_9vLD12BSyc)9cSZcTK)AbJhP!0gLva zOzAQ!|G2&&##V1pWi_$FN318T3d~p!9;agPw{?6yxTB30>UJ(h5>1}&_foVg4@cY& zZ8=Bk0|wXQL+vAFs<~B9kgCt%N4OHM*{Y=kSHp=nhJ(lh78@{P&@-8=r zN#;py*=m?7EX_}lP*7zn<Z~UZ3j(uK;Cnpt%VLU-&bu^jIrcF4+H_xf8^RqoL);D^aiwhn+_jNj1<20Y{_n*;zEhwYw-3Nj&24i45)oWw?&xBLf=wQH4kCi(Zn0 z?;(7Ue^=F|H}AZb)1G_zo4#fN;ghU6mu@z6@YbX6b;LC*Ea1mVsR~}Hi_ZtK-scp@ zd`CKnl=(4&V(NzdWrUErVtG<4YA|BlUaW;zl;pOKEXRGI+g@783%+qJosB+aLboZ$ z{+eYUk}RKF_cmkcyw!Pa*4JLS=0vgVaqLq9|fgTGjE2UgBonYTmPkKzt>> zS~4geCHI|xJch5mU9YZ+bkJY#U8l3r;@zf@g?y7Fga8JL%Iqo3O~q*cUvGMuwp$ac z_ZF^$55A{J>Z*=@SeXgu8&T}UiRtmRh-y#29X z93L&j3k@h666;+Id-gBgG4_#>bl;eK@8f*OZ(P&(rrL-|VOyKWs)OWG$7ZDahz(Ru zTGCrWiFXh2brAc>wH8sJZR1S#rlYlTLdbHrbE;ALyCi8}B*VNg+7n0@t6xU2=w!2!?|B~uNoyfu zmIPpXxAHA(?e&vCH60jgzx;9|S1NRxt;iBu_qC5+h)bo0>a75PU~8TJ_o2NT8xqK_ zA7C~vE}l{rqO9&ar}%||NEveKMk_UQ81daWajXdVROt~#tKC@Jra_NJgb)h&DY)XR zSr2&A^z4@DHdm9SEzasIH2!Yil@z34TL@h&zi*mZk6fLi{;X2wZ{b}U#w5Jv zK=1wZDHZ@U&#BCjGFwJPTS%DZaHFPmhd^9%{I;!#_-YhXkT-DThh#r<%_uy+uQWkJp!$U7w9>XKyq4c(O z>v-aub^BSmc;{1t!KIc5*+LN^M09W4o(g@0t~}n;J zex?@xW*k(ZOzmf@Nm`j5E7iPpfHx}jN%E>39=2_=jzlING5@K_YhtBlOuwS&I2|Lm zD|eI_B@4Ce4qvNZ5~fuhA>H!lW0;DZS6q4n9db$eJlm;r&rM}jJl|bqKc0`QH#*KN ziZrNsLTiC$NiD#}MVq}CkR24R5yyd_e!SF3wLC#lf&YFtFpAc)DHbI1TDjnmA+wt+oJ$v{xSSggh_M7D?Mh&5|lW-0zNI;Ylt_t}Qa z2hTr25L@pABhZ}^&7}{6m++Gxh-=NHUXtL@@QJh?gkyDU>R;CF`;H&=!d7($pg#RV zhWFEns9AIbTHX;fc)sfbWEa&Bk1=!Q8ZB>FBppfZ&eYBuw!<>|P1yKdH zUuc^$bFBPEY78Sh3(`zA{*{ONP(naXSQUzquSq`^!xO%NcM8aY=1{BD5xwM2 zO`oA1XQKfIYWmJNR)qf)`)rV^foM5_>}>{U zVRDZ3rStF5MMkg}(+C}4e}ITzj}l44R-#a~)Z;kSHa=3`u~6tYFR-5lf+kjd%NH+x z#{&A@7m}~?H50u=*P8F$82P~A8RQsA?jCf6fB<&hI-0t#58fiwnutufHX;iu!j%GcGOs){EdWecV! zJj8PPsh9BU^AgPD?uIZlSQb0>^nh_-0kw~Ez0vDi%F+QpSZvdm+&A;k% zyoKDg!AR&U^1J`CFSLCpa_J&bEJhu3y9>^tOOmTi@alqwxz1U2q<${R>g1(7;;| z(Yp%{3gW!I)m#4@SSy-Ge?h|+4^(iaqE0m}I~<*WE%dOyp3JaJGfwJgxZ*$QF@~>DdtI6Sv>tUMK@6q(~sj ztg6n>uz?EB0g{Ct?P*2$$LQn_3*j7jHo9n$-S!3RP*wbv-a6=fgBiB$Vl>k-kh_uy zZ8=j|l7cCBMOJ{=y`J=I8Xu?nt_%{dLqCZ{QxV)2rvETT>5lH{BjqP_?8K%bXY5g~ zH#@<9CIp=Xlh(pFR+6GB82uDkucrvaxfp5;?jY3VavWXLEynHvUyPoTRC5q-1yo4XzN1mU7Q8PATC|kMuJ!{%EcZ$3n*Z7 z=Lth>Z^5r+wh;DyuD{wQ)$#T%8X+#sE8;i83z?HA_4{! zk&HTkiipTSl$KEh1cZo45kj^N5d<=bfE3N30wN_MO=<*$(4(}_L+>RCB-tr@dmiTf z-gB<^yWaC&-}!TX_`?K9+0S0TI(0!SG1z34``cojF6@#Dx)!itzc!L2 zz~GM(?4&4J58hd~{Zt`Gz>*M(jnPT5WJbg`8iez`rTA&0F>1otik|T1SrEX7EReeL z{Hga1;=e=D^slU_5%h2z$OsM|<2RW|=6LY7A9DSusk2m{=OZuekjhKdcF9%)XE~-M zTo!;Nn@TR=fs(iBY`8X81^hj_)-<-a#dG#TKoHCv*PpA$B=Jn(U??F+O?Vkr@#dYW z*|@>I=|XRS;sB)=&$p&CFykJrjKSwA#9^f-@M`a(-cDV)ao6h6ErD*g!@J-V=>ZB$ zS*yxi8!F7NbJaHS8QP*g<=O-%1TeDtIi8 zu;CR+EI?{FPbt`gnfBLSl_)s+U3+@_>z$klMP+TFKHiq1jP`)35%a8jdIm;GyNY*Z zf>xqS64SsU>{pAA)!TwzIJr#`|HglWzNln7)qbzz+^qg2*v}x8X>w!B6w-R~yu{b7 z>V=A&i12_Qv8v7Xcd!zHU#LjaREWHAlsIQn(d<^6zUAo zlJa!|Js`D!<@t14C9y}f)`0K;Lf6?t!<~S8a%4)_KY=R=9dGjlTp&1Z-^>G7%eH-) z7`lrQOheiC7GzsjkF{xnC&QMXq(naW^frUv@tc_Hio9d#QgFk>Ph#~EGPq@3%8P{2 zqkWj{fb`i4Z(fCkCG zS0%0=M5jM3WS6`FM0gHO{#+(6)P_G->?|lM&^ag$SBP=+vr}pbHuAANxOy_1^R;|M zmFkA)X3{HrBMqJys$we(IK6p8no+sl8+!J~wVHHYx939!(}uy^c9|)R@x7a6=Vzdw zORuN)cnB$FTvC`o<$*A|m5l$J!Y2PgC|#Ayi8TD7^BL z5oQWi{alorpL^fH^QRm55n`ykrf^u_;dZcX(q8swDVvyNxy$tE@v9vMhIu7MLL>*e zwNYglh$q@UHIX5m&AuG&?{*J-Gi5G+-@SL#=Z9RXK>UH}5|W$y9oO$l?6a zL5>u1WQW50HvN`jC4(e?P^-`v1xegeT`CgrL#{nseQF=bm5elb-YDuh`Cg>_w<=bQ zcS7L*ViNkFrlJ2on}zPIkyAr@ymZ{e%|Ge%Y2eR)HttI>JC%f8QUWuAAb?2!bqJ+E zNaE@Lg@X`K9zFE3E1BvnHo=tcKD9)@lXO0MQP3tVGVO(SK%*Ri)<38@F^skw8qM&) z2-?|mw3;One90ib!RJA57ke0Dnq5^Hew{5X#&-fEOWuz63=*U}^N~?`Y^1Y1T}Va} zaPm)8e`}jpTU6fnxAsp#goykNQKhl*(d~pOf=uC+8d_g;D0kv7;FNqjNYzBwB={t7 zpjQp$GKM^}h1qG?DqZZFMmCkv0Ln^c+7#8qij0Y!Ht`q-bekTRiu0W$iyRBc92XJ z|6S(ErSM127d_c=e$(dByL12(x|l-iQn(QpS-t+r*p0EI!i|(-vKoAWv$5i5N87@| zKirQS-Df-HRZm~DF)YZ(A7^;g_6G$EaAM#q063KxsDjf{0Vt-D+Q!C(4ElYoC=!5S zU|7;XOwPMtD>$(juy~D_A|%Y3eeEP#65n#R;78f%K-8?tV-X|N=bi3$-@auYqkDkf z-q^g6Y$eq>%LwwnhRy|v=kwVb!?#E89Xvq`V*u5%Wf#z5x)yVho`!d4J>&=Yd^L#u z^28$1#Oo(|l4|EQK<|SHP+=Z$HMmtoO>I(dT2kvZX_B{8{dBZiN1mB^)T;~sgJkpnEOquD5@~M+w^2oIH;?|b`=rs_uAs}|atFX2bLrg4 z>EbJ!ykZ3$nF0wtT?j-o+9d3{s!kis^eCRIKm?NlmHM9V94>P1-ooGO51wM4S;w5J z09a~o+n*r+EXVvprYtUq&J?p}3tv1Y<2sD2z+7-PKo5n@Wi)PaPVTN(%gMH55u0H7 z%rK6*z@Ao;ZIPmN|(^ zyJD{+DN74;Zf_kdhJsJUb{)*1Gf7do`NXaC*a{((LGNdUyEsJACA!OGH%k%R4wDVq)iSDbxV#?28lccPOm))l$SxWMU0}B;|xuLV1 z^;)qE)+)v^$OU|Ir3Em2NUxNI1QVn_l+N|3D$ScOF!TbzKCSdOcYH5q2Pp@dD5xWS zvk{wH_`anceY?Cy^=Oa>8Xy+PC%j}M#TKfxfJW1)l37kC<8s9&8vFt{#sFGJ6S#W- zjD?@e13SC9(86jzd4yy2rD9t|KrFNlF$WRE397ryMtHuZW$=j_UOqxma5Tp!_aV$FMuVCY>Erq zhMtCAk&U)%_0W8yiawcKnK8y0SY`GZSpylSQ-)2TcJaLO4-jnlf0de52>0T<5$9XA zZ2tL6CDB(uY9N35mw($43J;7|r^=aNXQ=T0U$FQHrQ7||A>v+D^I$dUPXUtwT3=`O zcrwaaxVdZZUdX?$_3@zg0YURHL9_f znxZNbLu>H-6|K-h9*WBVsI=0Iq8#A)Ah+$V^v-eda=Lr!xaU*Fcfq}EkppFRB-2^} zClci_^l~zoJ#Bfb=1#m7XbJxT*WrGE4|B6a_J>~j%S}f>^a%v=$Q{F1WL6^@hu=uE zf(Y2X?9~fpoM+0<#+_Px?BNUR9?yr^W_q`K+$or6e3}N>tow&t8Kb4_l;=B0?5YNR zF%L?gtt9GOSy2#{^3jjw~L36hJe%%|tO17V}zes=Axy_UbGg=N#XZhW@eeML!UVo0qeY^}w z@FMW#D3=4QwsH^blxB=l)24Ex+dwJ9kXH|CkB#?bH=LdB*qI1JitO=@vF}-ZhnjN( zeCO^(OQxhicHhKMYlIQ1<0ka(p$~i^2o%NFz(80=mWTiI+S_|$Upn=%br$=Nh!aP6 z`~T@VH_A34ni#PYVxHBQb>E@Ag@D#sc>PfM)*TM0%+3HT=;w{ZKO6!3L&#}hxEU~^ z`VSD@neFAhfU#D&p-sId#*PJ&MeZFjqL_2)1dCR4@64G~UL#M|gMidqqT{OyyTT+hdtiyf8Z{qR0u@U2ygMa=4Z_P*3R zDlF^ zhurmyeDmuAGk+F&JbiZ?_MIcT$^HP5tD5oP&e6cQXMfdfYAcJLo3X|JoTK)MTann1 z3q&`pz9@1@vhAyDL|bMEr}dJM0BJFpTC;mq;Pm|AMbi%O>P5hMcW!0m-IE$umQJu> zb`E(j^43sc#H@yD);2p7{S=UFBg9Aeb@|U&O0v_R?iYMt++?&!nDL)IBR$YOgcvZb zoMS}yRj+hj4$nRIvS8nJnoM!PIsW(0&KRuSL%>tk$v=Ih4{;A7AoV{i?hTHw_R$h) zzJNvw#A|sQ8EtrFeyYq|{$m42s+VppRg;HH3u*shu?f{Z0^ctCCn9Lld@2W3_CeeF zC7_wA$yK>TRD=oUk97)vTi;nu{*x5imdgj-a9c(K7cW!13ueI@X3!GIlDIylj{cnv zWBscM1?^gTwal%4ssi!E`$>LReNjUUD#r1TT`91#nw;tFp1ceaudVHd!=W#HG3QBp zGAFO8WXo?qllh(D4DRe_rA}y2_+mi_XFe1258VWb({v_2D?AR!$x%soc(mWINFwY8 za`eb~5Zv+Y>?(+BT`ldUXM;h{?>orHTPYw(T|N<%2m^X7@0Uni=N9V8kUOU5l>EqB zygtWL3YNf3LOuqz{{~nvd;&c&Zl{{_e*F<7QN-y|`&w-VS8s9Y6&WDr!4!gn$)<_e z@Mq(uGpspHCmg#v+t8$mG3nL@S{0#4;UVXOj?u*(v;lw6rYL@3q!EC(c&t;8Mm%Hp zFtizi>6lft>cG*;YhL?jPtJ_^)D;hVQPUd6V|QCT)hq_Owjehs##rzSA+|L=5wyrM z3TR5bU1A-|A`&x4e23v$P`fX{TDC*(-8`;h{bd)Au2iPd~ zvcM%k5PxyRioZ%U1B*>w8czlU)G@NitV;+38hye9K>9Uf2aYb@=m@d>mnUy2ER++9 z9=Zhy>SuVNSMa>!Wtb%p8kf|rIP(kl*^Bx}Cd|*2rq^n@xxB+KpVvmzTJK`dhTivG z13sIJ;?4GzBR}L$(W@AbM3M4QcbA>}=#B!Z0~d2i3eDE#m>{M*T*H-qh@0(R}=QV?*|L=dF3B^{$xpMoGx? zqf_&wL+5qn69Ng-!pBu?p;i0#i)YuefwEi+)FuA~tlj$wpWkZvCVw7T$9u))ie@?Q ztN;GIUY3~8diP2vz{~tk{BL-7?0e4e_U!xkPUT79eRyVq7uv}J1}xYnpcX~k8eBB& zl2r^8#|x&wnD9fh00!Cz#4Cp@8o%JhnzxDn>M6J5-x;otmHplbhCZ~=m+yns7C}8= zk<{~oAUOcNTRmQXOTm1%`vsSX>x_mx*Yb-LW53&f>htT{F6 z$OKTT-|AaOy5*bs-rs>TZR42T)uERNW6FKS1p!@wtT-mcAmZLUwcCP<0TRJ$;LxEC zABPqYfJSr6d$AjiVI;Nw4(ij3xOGSUuC|mx#__XbUkU(d5moG~!FTS~;b1 zxz3VN@I#mSd-G{Cnx_Y8zVtIXY3Ud11}o2WTf7vLh8bVh7SMWr9{cL*;m4GkRHPuu zM!V9hQj1;<@g;g^bMBLmD>J^Pm-5@6Fpr5cAP@QNT2;g~#s{#fUHXLP*6f3un5j?0 zvom-gGd=?zl#&isjQYkSlTZ)+iSw(}Te*E6-FSCQ1fH8m+6(DYCi;P^1z5HMdxix& zhEPG^XTn^npOZmO#G$aeClv*~R85140x+Yv7iCI9zha-BW~zBX^V09qU(xzz5LULD zFkD^wOx+O^SYCQkYqo!7RPN+5Ysyl|7Jc>JpTtcc4ohj$NRQ`--X zxLq$A{8%fm$hVkFmtO1r!nU=3*Qf+~dw!TA{kidhO~oZ`ttP}{FHviH6YUwQ_ZfaL z+)V;CedS^oyZ(Bnp;?|$==zYzl}!;0Ww>h5k?r;F`OxUOy?b3g)*PQ3WiIzEaXU?j zwq=KRU$!}#ZOOWJW$-fTsKNvDUdLolr}%5V{+B~4Qz&z~zGt^uTF$5Ygr{!*;=NPx zJ6Uxn9GwcWZ71G_B;U^BoN~Zd&YWBQ^_3RjsSu)h!doEholHmZb%bW1 zt>go=Px=^wY6+p0nCE^3#;41&#X;-DVC{msqJF6Ob{6E*6+}?Bi8dWSFkZew=nj6p zD4ha4N>*v!Ac_HF0UTw7f$_7@wj~k%ur3e-pFFbh3ZIuj%jc{Cy^Mq@NYL_cO3DGc zO$8h&qqU+ANfLzcFc0tc1~=4L?O0U-{_4X5vc5+UHtkCHr-Z?vbzC1?Pxb}jr_3Nt zi{_0h&@+0#D{_GIQA-xt32`xCqa0TMqC98ahy;C{d}jHb&N-7Urx(a^=TWh2UtIa8<6Y4R!KZPr`=_t7;)$+;hL zt3*(<15gIkM>*{Ae#&!TrNvn!K=T^`niL3<<$uVjm0*M-G+K>|NmY_1?P8%|5^~yD zZRt4>ke@sw3&AJZ4`u$t-HL^iECA_xvP~RbiB0U_hKRb!XRdSlU&&8n#eO>W>C(A< zcPS(2m)c$nSSQ9@`P2Ig6O$gTM*Aq=(Dhuuq#tq$nno?omMua6Qcs}Ov@J@1!q%!u zk5IX3cSTU#c{SyyxnU-SX#K&Ppd_ zZd|DHl+o6n^K{i`shJveCs>$lif%w-HM?ZrsH~ry)8E@!-1(Xd;tMEjzMJGlO{5Yw z6?;)S$$x>X`zk=+nycH@UG1v8c>fayY{rq$c4*fvauDu&(U#%U7ON_JT+5hE>>VOa z>(S^wSraELD|ef4>E{s^FLHYu!E{?m($9=sfDN7I#= zB8i7_THywf%(&jYWTZzDDpcYgBp)p;a#LGhuvjOe8|TA+m7s6fs+UMdCXVG`gb#R= z$m=;r^Qzt9Dof4e7U!rJ^k0Ja6Fd)-0iCq+cQ|}zWbO8yg_##jexirsl4{$vc6Jvj z43v|EWiSKiYngsE@=suhLQ2??y??mIlWZf><(sj2-7bC&q=aRA(rm-^i4mGUI0iwI>YkK?c z{lM4Wxzv1p0(UKYbhp!Tv7p*qPFTz_IC}k6bE>|_#;8{&+QxzFoi?lgoK%q z{cXEDNEh%pn-xE2O>t(h?Ty3=@8P)68H{YJEBXgRdKXYlx6p1H|1gJw@B9Q5{LY{U z=u%%2vZ@e&iy>A5&7v7cqLRl-r%d%eSv(AmxmqnCMI5lxVCgRdK;r`7nIvI1U=*k_ z8xbH6zp*uDcu3>c@TTghrDI7)}DojYe2=?$?Q zfH|D>kcrXOndK(SOL`qXYR3<`C(p`QMT{39GDuQ_EZsCXB^P0H=CsnnUQ!=sc6gY`|@t|k5I zylXO zhloJ(GZwh;b6oc2a{Ep*u=D>wgU*Q2RTVlmK5Fh|$QdbDg0Ia>V zf~ZO9f%vxpH3)jpJ$}NQVp)#npGL7r0yMhXbxF}wD9wwSIYrW5K^X#l(~^UtSpXY< zHM9692NaHWBN$NY7&e#gD6(2sS{lx_+#7t-I7k)z?O(>tJaxZ(I{Q86Yhk1OEgMb^ zwTCgpc~nrWDbUoih;wc+%VjOn4}v%3B|AmjMm9*qX#3zY94p?GF@%FiR9eRz9XEP4 z$?KlYNijVsTjTho-)ZdM!sDRXPkgN1&~W$Uf!9Cez<-rf``irdAyW{8 z!(SiIE&pC-9qdsuBhs0h?s&eh0u_LG*}YLMW3)4}TWZcT0|KOj{ic-$A+M74yv5(= zezFIo6vY~d>ui~mdGdZ1@;8?5oq9Cy(fA*8k<^S2qq*e5h1&F3UEqhQw)7U5HJ*3} zmjz#pT+TTXV`37-CAlrvJ3tnZgfQr>=h3Hw4mt+Qc_>~@_DEu7L95x&LKFaWWH}k? zj(W~W&dw2=%gOX`%p%BK0L9FOE)Y*K#30J`6``|W{F)d;<2(R*@+-`IO!yiql2*p~ z)z`j^hZ{@t^Vb0ORqnt0hwME{(=X5f0`!^4pZJ~?;|uTsQ&|IECmblLY;1%E*1xmIJcz3i49K_uyR$%p93uuIR!9FHh;9$aEag7fOzK3|<$0xyO_f}HwJj<4g%5j?Ud!oO=_NDch2QMRInq68*IAJW zz5!p9MX;rXIr%HdS|2qk7atBJH?=6Z+u$#knGKhN*)wx?*KpLyZxwnpCosLhz5Iy! z3?uwLBlJa;F)MD04*HWnex5<=>9tz0#_!A;03#h7%OnTePT+2eTk7*PDG#7Z3}f`< z^8L+1Lx?oJg|P~c1$lTcHEcW6p{TFY`}m9iCxDMr#+fmWT0Iyyv_lQu$7akIP)<|Y znCRi746fD$F`u!649>$^`V+z07o=VVeMPuidOaY}L2Wqe+tYU={#=@^jHCBvU|&I> zBw`yFhyiT--E^zCR%_5JT5f5nsi|A5O=G*Nx=%9|Nl(uocvHFol#Txf?D!@|M)lwWFVT)R14$A^2d~1$6BN zEM{qkL|)>8tsLIynj%QnYj>Nb;AO@;i@}7hRmJ9HxRoOlrIStamsUg9uW&t}MARkh1i`Tdo-dgQ|E)kr zYkt&vf=kc9lc4)%ytvMxjz5y({W0ey8){!=IAC<2w|Rfv&jPVtskYvqmF-Se$@icu z9*im@T$NrTAB-7dhNBI8{-$uLCBf4ZvmsoGg`(_y)QSzXs^eDE9@GOLfB=z?p}%GB zGGhMa+qWC}6?rZ!&Z;u7>alL1lx*w`4h|zb_@vZGrb~Qe;1Jt*komInA|;lG0p69v zl4;7`q^(#N3Ui>Wtd;P!U-gOkVcYGlEkFqJFD5fmmj_5IN29$^efdoQ0H&b?I+N9H zcM1It_otm(R;2$6-AjX+*%-9kViC90F^1NV)at3y4jHQf-}@&;I5X|>g|Z#kf!bOi z{+P~ksSuuRDWzjR3#V*1lsPZDH zek^0q&xs;hw+DI_i64@M1nA4QjZRd7xNPrnVJfI@qT%iZSqVPivcjW_?-!d5i-VrP zF zygzz&uM8zr73!7QxZA_tdsE2;2REa#uptz zttH+c$U2}ct2@|{TG4mU9r~Nz1OY3D&5l}9buppE`)F|{RuNDh8~XsF*cV%7T760P z{fXF^lp1aAc3-U43ro$9F5D4sNNf4Plm^T8M2y}H zw7|@P;h-j3kE;+`9#QedhDgu$?;(|S3?34dQkwy3L$cUBqWevFt_|<)3-~zE{X^vA z-Xv!?Cpq6Q>p@RM8O{?HBlLXI(>SFqJz)A|#Dh?&i5vbQw;Lb}CzQM!bkP3i3^FVkZ; zOqM=X!{thUMw?a)I+vG4Vqy#Y?|2gp0CRMfax^DoSR?!KThVhJfuwyRHrCe9)Wt$+ z=QMc*@3nLM@X2beGwA+`FW`-xv1ckp4EN#31|eQV|C41I}V+h2R_Z$PDw2+H7+?<8o>7 ztR6-=|DIRkvEh)b7uWU=R9r?F727=U$~Vg5&n4dM2)p$wYqtlBqAT+wJ@OY3jC@QN zw~sE-ZICdq4|$Vv;^s`n*>{U6UZ3YTlB49;3SwJY>W2HZ?#iAbDX8MK(ORCy6Y;2j zpUD+MvRmD?(jE`NBVjM{gw50*@QCi6=ilkJoFTq6!gF7|-ooqXpvFz_F?xk%H?lu{ zc;oi;e5#St0t;5tmxX3SGlO8p!FqvKxS;wgNiyRIn2}$cfAJ8OL5+a*`g&$yoH#H|o>~s|fCk1>1@sIfJq%own2y}Rw^RW5^zf!{C=V?V zsMoT@>Vf}0{C2&{dL1|)zY}s(1DVF-5}-nwZ~yfd`=0b1RBzXgXZhG~r?^WF86Li; znOYoFea2|dClHhy!Ng{%P`Pz}b@k+pzJV*<(J*0@^Kdqj8McI~Ac5d~ti^{8)Wx@6Byqo5AhGOya;u5?Z3ah?B$uG{1&-|1SRvUhe`b7+{%)+;=ky*>XNbFo56~ADkz;th$z?CU zgDf8TzXQ|%Cy!xg@$j!i;Py9!M`}QE)f`MzC3HdD-x*>vu&64122{`!B@8^z2|XJz zfmUi`BrdKttC4XU96wH-+7CD>-Uj3V>d6?apz-4X4io`euMHPTzDp4VgWq1c^sh4^ zD5F1{q6t|ZBX31OS&ti!o=r|dE02H!;<9@D9+fu@g`uu(#9UWNBk?`hDtH3%e+L@_ zB1{uuOl$TE{+@?GQBurpq}^9$AVKouSiv!^+i(JyHNgB0M0zpXarnhPcIef@?p|cX zaY}m4?ks0JPOHD}9y%q!HKQ$@pGRT(2eHdqmAfI7DM8MKL&fg>w0rx=`gI6EHxDoD z3edJl1z7o;2Ls8)mHx?9P1$M9nSqsikr0X;HAHoF66k|FybT^fo5{t}05V0{B-=kV zEPlMdHW*8Ls?J)k7JneEy`KdzwCnzjyqU|`wmCJ--}DaB!$*FvcgF}$}` zsOC58{N57*9VNH+SD1opNI#z!Ab*FO?R6Fb+qupbKzvzcD7(CRmDszZJhK*jsUJX8 zc7}t-e#qVFqE6UvO<$Pwt2KYiTiTtY@{OHF-T>EU1ZdT6*Fg&ZD2n{l_!`^%d-~q3 z3b6#)PxOls$r}z@UB){Zt%EAh8EUu=nqg1cp0JCHxb~=6NH^zB%%yVEYaXxsez(?T zW)UEPDuxcvJHL;bHa$n#9?-H_?W3XP%kIeR6k2ASpKW=urw@@C@GV(o|owC@aC`C+U ze<8W(P8ffc@2jbHG12_1Gw9Vt-dQ0O!@wkNHK1xZt}>5NJbb`nw*EHRTC??Duah5G z`Gl=%l!NC(vg$ocW=2Ks+}pVHrZ%IrPvPOYQg1-dRi3NZ0pBt2wDn5zI@Mxx2E`3S z`Ct}Wy_$0D$&{x}-@W?}Lg@{-#M}QGyHYu3+~w%>(JVirs*E82 zOm>rfX@u1LP0E%xcTvy8)P{Ir3nTZf>E3aX;J@2k^WsU3OuNl0yo=k|sTQTbch3S& z3?s&aB8efqbXOiZZpRi_6C3C<1tw|%P7Dcou^VK+i#7tpnjo%T8UTrG;3}BCP6tE4 zG-5SWMWavtfAZt|5)6{z=ujJA7OkPZzOJC9N$tQS-L*7^GSjQTc-sHHy$)!U-!bo= z0JEahWnKjO5Gwth+zW#0+NmLoG#KOy#l=hXRFG^jiw8hAb^`rIPg*n1cr3Gb^R5L* zd1>K?oVgXgk@4>Fz0Xn*Z9fww*Q1v#W<5TeGY@~rX**Eo-sy7RkYFV~{WREnbdiUDFZ)U7rEu=PuOxgJ z@70Kz0d=!KKWkcl?ogDw_eFiz5z`39=&g4AOetj0v_i|4f~)5_rclN6oR+*d z4^6KX>f?>+IraNol8(FA-#rNlFA(9<5~7sTPM9qUe*joq?^bB$0U$=Y^?EFM{$@xY zEl8UF@3X_sNYWB59=)Q>51d#K^-^pf(u%o1%xH1a1^(cc7=iZHv&SqB+5jJPba=mffCc-ga$5IYZS zfpw$3j|?uREa7UQN|2aF9Uh_ORN!+>n=ABw$3gL(A4ik|ZT)feORv*Mm1>FN14fX8BF{eIx3edLl5pJ4Og zEz+w!b)3xti~c%_j|{ii*E#>ZaI))8U^xHd;SN@Qb5Fqjc&9l`*L_sdIE`I$8jfbo zg0~H>4>9?NT&|X62J@c&ofvKoOmZ3OBj6o%O!QP<;RamagmYj$`XT33!>rA=LKzlI zbVk`}{IH!5DE52B%CNlf_=yS}P}`9}slmuFs06q6(j}vuI(Cb5Mh49|sopOuLvTg;oaV*S;i9=9E~hF`+BBMzU28NOTQ5m-#Mjd z(%vQ1E&H5abTcBk|B$nh7v2|_{#SDOUqk4}P}5sLaMPrxD?I6g7!^hMzxcrYKVcfIR;<0cZ)RU5Xwn1J4pGC84vk|(tAV-q<#qK)ayDb=AnfZW-(13xVQoL4RgL5DcH^0s ztC#5Q6;ZjRO&A0e?tP&%&>!!5n=b>CB8>DU*THHq$PKToa``4|+2XxGG`02co*uvy z6zo9yu4(^?zqup6s>hx!wf37xCWMezB5zE?Wv<@NC?v8UOjt+Hc8W%Kb{@{3+sjPPo7i`FAa zD!m^W&?cTpw)|AwAJaJ&yX=_##FkH_bSOW^B#EBMnknzeyW3~)n(H;EJ<&s2Ut4^n z*D_WFluB0!liR)YJyoxZL^w$dP{PchXkP8E+H1u>csp25F^WL39Pgm(rojDDJK1rr z(LYWd`LB%J^qmfay>}LKZjlSF*?Pdg0qqHP3mA&QbcYX1?LH^sPmKOu)KJSXBzynE z32?IY@MNDMmD+S*&+8toYP+09>6~P6Ef+#6F!8~!^MJo&GdWF&UZmYM&C$bD zpHX`z$_1058lVI(=g9$rHl}pp%UdvBtj1*zP004KkI2feKnBQtW<~(4t280)o*)EpksP4e><_mJ-V1I}VlZ7-|#7yQZQX43Fn8z;`kZ zptuOQg;dKR;7KXZo-s1e0jvzds$q9kTm_dlPQ{nPX%=z4GA;C~`{WQ4w6e&^gBE4hGdTWxzuq*= zIL6{8PB<4uuh#x7c|<%JnpBbAGmI);KN2e{l5N@Sgl_*|CYNjFz}PMTbHDs?9FVD? zEBLS9S~%|-*n8CgoW*BIa%c4-t5s*Fx~Y13!evTgI`9G@;2pHFVpt2vKS>Tkh0FcJ z|Kzt<5VC_-&qDr+)TlG(Q{n@;9?Vmf^waQ)_uxi><0*c8?4*wLj_&y4nxdnWPD-6Y zb2d_*{ydy*glBIj6AHqzX&N5dXySI=&bk)d<&U3Z=pw{ALb&w zNuvUOLc3kI&-|UWHP>2QCxifLUiqyp z?tkZC9q@y%6U)m~e~!FrGMCv*`J>yYvCB^SNn>V#n1cDpt~LH>cLJkrn(!ckogSL* zQ&oGO*@-C{Tf|q&{W*9G8Y6}~swJMo_4YT@IQ2i|Qk0P)SjtVIsLNIre%ZQnO9|#0 zF&fHe%vP#bWj5AVuzr)xA}7z`#>cnbjtlj&v+6gLch<`aeohpRsUv*1v`%An?K%cm znWL5Qq4>%SunG{(DuTn82eGdKa8N;3EOiLe^M?-#Lk6>nFh8N&J$QPZRibVGT zwSnnxU%OmR%wE7GKtTL%{~-B7fBDCK%Q~F~V;k-$ zdKE~(Ia|32c}abW%X}tyToiZp)9Ox!9@%&3>RsY?d)s?Dlm#SafryK3^D?iKB;R^7 zbR$qSYnE~@b9zz%KZDPvlu(+Lw$aSnm)odzyf~5o)jk>3dgZFo90!y?r)`m4WiidLZmNDZLx7v_d>*@Ay!-B0qpH;it!D*l z1j-yp!e&FC=(42cBjI>P94=N6-p5Q`h8W;XF}klnwIIF=#t<9EaV9ZYVi;%k5>~0z z{2{mVxIYX{npBL!az5AG&`J6e*>zp%MF(Ux`q*RM;y#8qwEXB94Y)wfh;Ia{(TD$l zHZ&rSK!BBdyD~UZx(BMK_d}%^K8^=uCVv54#Gus(#01Z7uc$@-X34H2Y-u#Ow8T`) z=fc&MEr%zXI0}qWzY5TTDPIsO0F?S3;-CeCjO9nc5DTSzQMesETDSbD81>0YSh}iQ zVC*wy0Uw~s;x+LogHc-n?wz1bFE4vYmBz9uU;P%;pWNty#yXaVHXN;_&H)qXW|sU;eNUtt*A7)`p;+b! zwCPQLn6%MlS9HI5u#k9uDTm@2mewCc130wO?9ix1*kv*ksFDz~e%7*OTw#z%-6znk zy-CeiuW5~qeL4>GjGtC0#-9Pk$+Q^t`6weW>9@};e#@d!kB-?|l3EG!aw)xCORX0H zMGi5SnCllO#IGrk<17wy>Imatg)nF^Dd30PpAT%epGak57l`SJzhrQohS1boSDk*y zncS!}>X@9c-u8Ynpj)#eC~r|o$ln3eef|{(_y#f?WAp<68$>nnIzFS4a8OCnl&HU#?;P%(wszzA#1i`hjjK zxSPQCyR|0Ju(3RH8_Z-mS%#mVXrtxZq#lLV;}oy%*suw2AiD;S+}lgrDmd9> zv0wly?73ZFaowG0G3mjJ83|y0?YBTnZ0-tN@;L{OXL_FZ(3K|aJkdEutzm3&`*`%y zwEvdcYPU;41Oug`UVYg1s`m3X$F%SE6`Wu_EFt`?HhYCyc zU5r~!(d($8JrgoD^jEWp5l>1C(4$3TFaoi!297^1aLgL`6LJ z4D*>?&@t{2y*jY=wdD`dTNrHOrOaz7W!j_rGQX$qSj4_|HtUjj2)p1BCmu9xom!I~ zpEq~y^T|&j%5<51^>cf7l{rRF;4czmZS<+zQ#M4g_{R(rrE0?6@XQ$8$+XaUkbK+X zGd(q4t7EoQb)|tPfsr7Jmu>T#dk5oO8aNvH#{dM^4(QA4JICTFBdy3k=yt7I{3Ba? zkFX7KF9)TGvKPoluxwFpw8`H7`dTHAK#VP{f6=jLVgR{jV3^+W$BkB}of*oV*P#w@ zxX6iah0&(XyJ+Ewf{cbv!}DRKT}$-)+jILJ=`T|%0+Bdy06mRKX#q#;zUS1I4Tl@vhxO`x!on?Etb!qfrxohly?-Yti8@09CE39y+duqCrDa}p>=I(0K?Q_r z&Z-#;QihwK!ujHQzvHOygw=Ajc|G>UWZ*@gPN8VlSC8QlME^CRtc;%(vt1sKHfba0E7eSRpm#}iL>v*~vO*>gDF z!Cs~#zO1aMxA5Xiqwz97rv$s1i-(&i*O@bC)m&G&=StQkYpy@>_JWPttL;nj;!Pm4 zvF|Q-)r44~Jeb2ei|+>mt31xBq9o}Z7MRecTMXd`6s3yNHMP}4zczdnTNUNf-3wpb zVkJco3yVX*xdI{LxjSbbw`{A0?k8Xb-x&#j8-Wk(y+zq|JBwm6iRI(13;&+h$CSn( zPS9Ebj$0NE00@2pp^D%TZSvM)a4ogcW~wVpcR=;GvzKk_SrC4Es|kg4_XElR!m ze26K|I#kUB{=LV}O_Ux$8kga>lws3)c>BAowUgPkKnj-;Vt#En!Xydb+EygJUP^=a z$JcV;^S+asiRQg~tt;{8MVMaJAWe2?qj%~R(eM!Q!Q>bACg1qlx8tViu{Q38S>u2t zu?Wqb1czaN*>kPL1MTy_m0^Uf@WjTJ1n<(d8VLelp$eptiF2JU48RokZRpVN+ADYp484Ne#L#<&T`IGqE>o__Sq%0%DtijCY z)wO}IH+F7!in1-MYdAOUH#n7{Cg_JqoX3_Qd*8S@GRS~Qx97>r6xV<88`xZ$ms^l~ z|Ln{EkgIs@DO^}SbZX`SMvD$k(;WkuKBloDw)Q}+;tP@qI!dp!hBuD2**)d$_kNN| z<@}KAEW06P}wSt<2yk^GkMY5Y% zz5b~246BxLknDmV{s6#GPA%gG{?@{iRf|K}9sIQUvIld-7|lTqvhhf>3FhFL!a;gJ zj=LjJex@jx<+>X?lvS$QCfx=#(mH@aNg7N*&8zoP;UeYWE2?U?1dEw+9i})=+U#G&lO0kbM+Cn8x9s%LeeL{fFFa z2P`@vfBc8s08Y9Qgbls0|BJIX4~KgH|A)0IB^4rM&N+%Al(I8ZIazX~C_+r7h>6L* zjhQwn+Z+j5r;;tkB*xB^J=1Z_z{Xa^ z?cli+%!IwwVw6gP<^=8)jClpSp(e?PgCyF8b7vMb_kp)nz%&h}33h_PQ&k$62k8w* zbl@7p6D7uYFTQS^V1-ZReKaQxP^yzln(!>hIrLX|fugLml2I=}&Wr12zL5Lgv4=hdr7rObN{-gg{Jtks36?Yr;ke^i}!Td+$%6($2L05?G z{=Z@{%{8yM!X#rm7jDvHu@16~E&-MF`58|7_nJQXiu|{oe-%Jjgm1Vwfpjg?EN;4Z z=g$Y^z%@c_&Q#Z87}2Z!9ama-Gh!U;T#GmU;TmTcz_jH80g-pdIp$fpfX2YUfh$X~ zuf6_Wmt7+?tf>FOO7nDO9)-^n8i_%+$u%LFWG5WZyr#)NKpzig6yZ^|)o*yYK+I-HY}BVEphMjlj<9GMT$;unIfdA}_2MplLQa;=fKglDViD3Mm}}2E#)Es; zCehcUGg?MT4y3WP3%`%um`pUeErUm&qh^%*=w^WqMz7|NJ@kXK0!XCwiZp8KdNbn3 z>xB2gtb|x6$UDVT9MU*$2j}$NKD_!=tl!_0arHHaxa<|qMe)fORK?d0vQL6CNf};( z9*C%X3v7EllpTqnck!(K4 zOtL^DGCSY)@1RVH8Cy;{SXVK2b^HYWB%|=%$oG?xv{BOj?Uc9RJ#^+1jK{d0epp{b z^?{3amu3|1_69!eIiNkiszGkB*w4MSv|_6xM~@9Uu-bfpS9*xyecplJhwmTv+-X zLa_F0{?Cv!X<7ly?l24x^G(tm#^WAD|8)rpe9MzK;OQ*W=75fkHn^C-3vrHIKua(L z>_}B4xG)1w!`0-rzDelX*u6w`zxgwkzDlcb!7e6d!WHyHoiX@u6`{9mRl6d@KignT zbKF7oxGayP>-;4`C7~Ru%MlfTGI7_Oy;wE7(J5-Y=Cmc*J={xT_KZ`V(brTKi zs!-wf&q0VTPc@QRcjit@;WRLjqcwfhR@hXUKowCUp=dt%a_;;^bJr8=ud(%y6^=UO_dEzl$<0NOo7V5)^@{b)oRnfuvFMwRWr4cJ4|a zrW7&%@XV#S+ysZw_r(jea`NUpA)oM#7Kd3j_;;hwJ$~ICx6~D}5o=FgCT9kDob>@$ zjRuG+*wSt^q1&WWjq`Z?ioIJw|EAa)=@FzP=^e{=Vi1q&Ed0W(Bq%>@)3@EQ{~5$P zct@|ZHgn2kd0l#8%)MRO^=pf|cen=_1nM#{Yrs5Twkq`a)b+jjL&{Dy*G3!>TTj?V zGfr%d%-)C(Xa~6Vd6wYw$+`oc^+uYDm}mAA?hN~huxe5?^|dEOKKQ3~KEXOI&2O)f zZRO_dIBdvu+=ZYs6fSQWGot{)huk`LC(5)Ne%%(I0Y>4_S&2%wrF9mzN&Tk2@*Q7p~TmUCh!W$84&xYhf%b9$=<`St?cI zTgiG3az5vw4GJTY5iSWCT>FIQh1W))PjDuvwsdhzq39mz*=F~N8|@N@;$viXCMCuv zEU9Vs*|=+~oC8C~yCb%{#g+QMz4_I~0n@UISt6|Dt=KrEJGTfpf`Dw;i?*_2=mtOX zvc?0Db_(|d`C{mD4AOi8=6CpZbmQpp{qqJW!^n$bgTX==t za0k#IVk+w@*UGy47}E7^^DG>g(ATq=$+x)8MOZefuC0AAavW}r`Fa*M`4+Od2&OKR z_Z(XwW1BB>P1Z11YhMjrN^q6tcMGm>909>ZyiYlK!n$Jt6G|H(IcZ}yc7T#kI8xq9 z<{ZC5Zp3jt`GeHESZ6%*{G1{JjnllH}? zS&4>cp8HJYcRZM@)9tUZ*4?}}nNXsL2buX7+>`apGpyLWjW@9J3W9p?3oZ(_6vcIA z%l`>I-McJPz9Kz;uTQCxKKmZH1h~j-IMXFBg3g)-D*jY*y8)S|` zt-4`1F}HEiKBR`cRkm02xvax%JaVXIJarDTCuv!)GD$~&Yu!nHEEG6eH!uL(%Uh~3 zJ1kT&ZlZ~6HsT(IhDMCKNcPlao&DO3KTC$G71EVcSTekWL*wp40c$I+BZ9w2%($jN zdaZzyFVWzn*8ZCv?DQp9?P{((3I-7kfS=Ana%-2!ZCs~_Z*bgG69LI{qE4$%8&c+y;x|wSV!;!4 z&X3@*X4Q^y4B8-dQ?_ljD7fNcmAa?mM^f+LwejFuXdhPI+GUTdNF1*53OWC2i@1^wXRV zYp_2lLbg)v*?)V}j#V-|DbhIMxs#3@Is+LuFU+8LdUY}b<>HF-MaI;(D+Dad8SUj< zIv-YMa9T>rxqH)!dq*(rDAAZwB%b#Osj^sySfNcMRVtDu+%t{5^k;9bwClraJTM16 zA{+ok5z$rfbOv|2^t8t5sr{=!t;$TWTNCJw1(Ftl<6<594BVK#&}dgp1iQ8OWM||6 zX-Z5Gm6)h2`-A?vXfZs3RYM=|$^}LTP#Zz_JTBTGlCqh~&*0GHA&~~TZ7u6&MD!VS zcUcbzCWC#jAmuas-Z@W?``?UsK?Mduyk{U$1RK`mHLu@ZlXCnvqoZmuIwCgF>{jQV72#T_&Q z#brC36W*-#BBkCokB?8;Jf!^I-(MEUPl#!O0a%Ip3#fIK79jzyQw0kxR7}ex z2Dku2wlc^=%B?rCvv7F_>Nj=;3E+_^%x*#n?9Pj$ifX+AGX*S=kX}0oH0H5lG4KHm z^m744NpKnmpf^Gwp;;mZzI+fQBSlz%etkz%#9G+*dz%4@s>q-M>eHzq3w~CJP>4{M ziL-^Lcfm+7%V}$I*XPV~UQ8euny{ahSpaViVuxYM@y3}oCo_L9ZTrL@16&XcTLuoq z%j@g1b{unELCtBtStoH$xbt4g!-dF}91F=&cIQ0-!Dl{smEZvmeWC=X6ny9mdEP}G zWLX_RLJ(XUyr*{ek;5kgp;*p5U_{Md{YS))hZu(s>f)%Mxq_tI1?!C%bsuRcEEdwnldw7Rxj zV$lwvhcIHR88#F0u`+*oC_Ol>5yD4c#`$kJSzMh`%ir7*6aX6KM$#jBVFtD4zv${x zqoNVO^ecxCmF7LvoW$XiLBVqcx92y<`0B|6PRyyYO}EhmDdgOw}0 zDXb#WSZppk5{q{Qb$HZfOfglZeVST|jt2r#XJ;8})o$@A$-Z=0gg=dGkND9P+tLQ> z$4)tsib;U4_UXX`Zym<)76KsdKKaTiZ!fEokK83X3pd0W_Cd2ERUP9u%IOY=ENRID zpLRD~@4O5qCVRX;0BJGx_WbRA)Nzsj@wIJz+y8CL z4LlNzD7xWz!$JIZ7&nTf@Qy2F?MnDR(&eBIW}44}oxA8uk%p zz9^ShIKT1p|80sb|8KxP{PP?jkrxOh^0wrU8_F)NslPgPosJJ%swX{j+((?^zn>dC zBh>WySm#?-6=tDp`mnzw7j>z>G(F^u7jOP!EZ#3OdlTY9SePHz26lb_hQN%cTK)nE z)P;Smx|VELo`gRdzI6uHRtFqq1dRZe7g1L72xv`&V{B!dQ%pfPra9*WFCXt51L0rp2aD{6Vf`nuP-;s-08CVs)|wk7)Qy2@EaXt%D?zx!m*&fO`a`j*Y@ zI+WU=(3=lg{JwSPboxF|17H8QA~{xK6=&yuJ>abf#6X$Sk%ITVP!(s7Pa%kEh~w1H zxBIeeIVpbmCdK9GfUXf2;y3-JD?Q#|K0RH`dsBAGqf~^k+T(jaH^g5=#qqH3{p(bZ zK9ONBLKW#&M0ZncwTsL7J*rPv?CU$7Rh~oD5sC+5?Yb~0_lY|894yhFx0#0B6`bU( zH!yiyYl+d5r%rO+!~+S)U)U7r*EKIj%UJ zQX}Xj5qGRVMOkfCGynKz$z_+Rr=_~7l@>-znc9#Y&|LCr%3b^~1D9o(2XrgYUxl~q z*<)$!diA+%{WJc2V9`tqt~j!ONx|?el^y$y{2L$*f|a=A7^-~Z=z)7WL76VSEpS#* zu0TGl1*F0U`A$5<;oG-rCk?bex^(cJ5&-X+nXbu;EQNDHxxvz&gb|Y$ESNK21iN$% zyoSiJ9Mz|f7k{T;QgxB9pYH^jPI{AZ_xrR#nxVsj1OYCC)^;3f+a zKib)u6=ke|%oHCbGi0+vS`_~#Ga1WMlXiD;6z3%;o^ z?WoK1Y7XXsguD~AMQjdo)KyGaY%SnT_sQtxf6Is5!hE$CsN5KJ8O6AdnmyEIeWJ`1 zW#{Q+>r8hc!kS5kw6QNVT5Kv-$`vw+osXZoI2)+9&gVOw2g_f~hi#swE=-oqsOE=1 zQ%b#Z`l58o+p8CM=Gc64oa)><;=Ps@JgH~*Kn|>*ao}gxsL?Hl0{S!y--*X8iDG-| zG@rPYC*HN&NRD^5kA!L?My2l|EO93Zm#sMzw?m*M^)e=@Wx*aer7;{#>~acH2|?AE zK4;yA;iRq;9t%V{fG%LgHO{QgW-Pa%Dvy{Nt1&-n4k24UHRn|&@A)!CYW@Hz108A7 z&tseA9LmK9CYFf@B6A66V92^-C>2f!>%gS096NbstqbrclSv-dKO)DAupcZ!Jn$Y` z=40u{^~qE4GzRx!FbA@+TYwj6n>q0bD31wwqz33K`0~M}k||jseu`6a3=LaXb~Fc* z&AIF#XfV=RP?1+F-Kf7?#6&_lTISaMB83QoDSzEjm2S_D>o{Wa-HR_UY@bwUh%vFN16A1cz!+JA#N8B z(d--q_94|41jo(atnw&=_+$I}xAsSBEQmImQ$eZVLOiO z@|$UC<9Dkn3mDcYW-ssDGxJUbMER@Wd3XUy9IDC*qwkBnhy3U{P)vB8hidLpW9FI; z%yet;<^u;+@Ik2%hULVPgesoM?yT8YgC;KYy?T8z*#G`=-?Z5RDUNi993jw6%=8K~ zo1FO@9HeDZEbJ4kL1G_AYfm2{`WwAoTHWL#%UKQ zmsj-ZnyG-vW9_lNTn}f6m1(Y4=~KG(vjrpdiT0llrsK@%s1q)0tC2iOCHkK(JL<|; zybm4u90Xlsc@rk0JAJ1uijEF12WTT3VEY3!ckO@Rw#@W%8IX{o@3RY$ol{Hw$!9W0 zXiw|Z@ArU+kI*@tBFXs%>#2yfWh-)=@(`Wq0ESEl5@dXh6#8N!7}y^&!#*&0-ro#r z)>tQS;UoX&!YdHAF(3VsFIy+P=BIS?l*TYm#7aD<1L+H-Q-fgNu;V)W$#>NG_oE@H z#Iotfn}8ZgIso$D2S^1^%a;M-G#sZN%tm<9WRE_0&wVbtBshCVRo~?G@vAZSI)cD3 zqPh(Qz^T(t9VKS98;)7rBd9aoyfAupS-*z*Sfp=Es~+J9OEVg2WFO9s{$}*e*b^zn znZLpen8CT~Cac^WND0@&JLD+a+nFu6KPQc4lEfBQ=K~X*yRT7 z1MOK7)T*d9o9<0ZhK<9Yvw=QKZXCn)y0fL&+bw|aC6_Fa4{D*U{`<Gx1X(`sE8zf#8fz1~X1wd#=i)hV-x5z0k8qp<9#*MO;aly$EI(e`v~RN< zs6xu~><6H~mFQ%{(yBApI=4K%ep&0hzH&qk3@i`4beD4e1y!UqOKM90V=N*6lKLyh zrrJ7B5Hq&$aW$GOBk=wnz#WDb=ck{xfI{uLnzPvx^ce(B0^F|KaEMcAKv7X}snsQ4 zM_e&fl>bN|O}*LVD|C)#4>zoVD3uEcAn={R+rF?*4>b@x!dz#8SB*eRQ3cddqcZDc z8v%xX899V$X%O6jZ_026w8CSQvSq_!BcP8-FrXeq3pUfJL zK>n&igd@$|;&hb6!eJwX&Z}HxurT<8Pv{RfVK=eLvgJ=!J-_~3LfD%dfBhlbKcIPc zBg_M{?*`A1lQ`w^s^#n@r=8G@f46Iq-o*rm#wuf zhvfWJJXXc*Z%G5sMZYstYQEAe$!t4wPHWn1N#%)=&p0l&>~D?yg29$r5$J6w?ota2 zyKs+5vLiX4o2SB3wuMB0?ZPaj@{rvygy!L3l;+@483Qb$LV%*jiv+PcY}Z$TTqiYG z7T8|7*=;a;?R9B9SA3ix$8jG=wcm3ua47ZhSGDF`!^n{CXFyzf>@*pcfnsmC{hVGH z!-2jhC5R|+BEeZ7DVWlks71;_7k4a%MUW%vUgx%4->{4PB%oC>iU|3CdCge(sW8F1 zA(UPD3m!5rnAq-OF@1M(z$#SM5fxudK5-Ki33EsPYur@u%J8b0r`qNhut|p8N#f|4 z2|Q%@%@}q)NoRgF0qh6*Mp-OMo5V1j;0pcYGo* zWb1gqNem7C@4*6>-U?14sFvhf4rtg1CtJb&*2ow52?9BuQiWV%T;+$-_Q5Tp*!miG z_9nmJ7L)QkRa}SVz5Nv9s(h#zk5R=ZqJqK>ebd%Vo&(VY8v{KvpQ#(0B$(;kdny!o zxsbKfl6jR5{c@+`@)9Q8o6-m`?ZuBZ^NPtGh9LlJ0q%37|y7)X`C6*K6g^v?8D$goav`8#pr@N*n;Ml}r*tdxEgb zi+f}#xg3OAf@!v1|A1MVYQob}>p|KJQZWXg2QPF-1Db2I7DuY5MS+$(;UuSlyOpQ; z-RRg+cGW2MXmt7xQDdRGDE%i_7MhE(J-e0FTZ(gVqREf@vOH)U`#9P)74+ zU5;0GUn16|T}qE4@1#LXja zsr`-c0lZ!<*92iSo(YsZ(R->_3f-1z`s7*< zF`wbJ+!sXXHT2hDOTq39=I6=gWkl*JwWn?1)YfvxBkQdraeEm_hT%b$8^IfX0%?vP zl6yaRuG_TJYy%vz%P=n*1Q^@znjjJ&tPVoK;6&memqsUZ&esHtNAxOFN|#Q$=j#D2 zm$VvJ?k=8spL>!uV?!36lWr}=7FyJf^d*VEg2VV5?XY-4X%)Q|Cj3=;eh5qqTLZl8uxvuov$jGB0h$lzwFvM}z=rqgr2J?yPkIt!x*@0@MmscaO&|te6KX&v4sc}hy%!Js) z23Xp~KNLS(57-q24+&7ckX6giSx0xvhq3kze z9VaF1Sk0_z*~4pVlVFjaN^+Aqn9jC)W$_F#GjkNgF692;nJX;qA*%q54f*_>V87;| zQ5jrEX+ryh8EyS=Gpn=yZno^$GwbbN1X@f&Q?)H0Sc%#6iLT{vXkr_X5;?(fo(T6s z0xJohvzUYcf2Xhtr_ML0%1zL&3<+PW3vwu|qU^GO*m~dT4+!J~!Bw7Wv!v z-{6B9=Sdvze0Kou`IQz#o>K=%GnB;8#IHg|2FmNhPdP8r5b|9)zgyIYt-ZmYAXB$B zW@?q*Kzi4-e)*!X`mt^or=JkKW9w`=^vYE*5AZ%tCFzh+$kjeRg8v?^^fSnf-qweo z>N=5={eOA|VgMZt>N#6J8CviNO%CU*zga~7viWONws$j?as*b1F3 zGHW80+P|#vLQZ+gWZq#=fd@92nCZKlbftrKN?$s2XH*Q)utc@Xe*ujbw2{iLuyi7J zCWHq~HfZP~y?2B|3I$}yKD5fuE98(O56ffq_nzLxO~IcFj&N%6!MFPh7j>j(owErH zJiXog(AmDaYqCecI<=D*^-6;)p!ZAG9+Sp0;Jd%6aKrvwZ`auuw3aqnbjwF zFn7KuD_``Iz#2w-^gnRa|Hf1aJtpw9fK7A6X2DO;%sivXefp0`r8Pt1J%rauS`-yb zOHQ*1Y5!}s`U4v2`M;+G`S#7UjXzkVbqO#c-V3|G2?hd5ztrb&IjA8p#=_hpaE%bn zmQs8z@TyNXR#+O(hWieyC7 zV|9+*SW{5lyN^V-BaN5WfX={q*o;6spuoXFwq;*hH7u0airRzcczWqr1zldAR#^7o z6-<*}02Di@e#HJtDwi8%s`XcpBDf_m+Z153p2a{C)qe%W@T}kC}EhCV&4G^IGHzW^B@-|L_RjK$N^~>AuNQj^V zChK%LEk&qvBm8Wi8E?SlLu7pFck9(qN^Qj1WZK+tZJg;*nad zHCpLW43r^w2aTDB0IocLhj5v=;- z*vg2#U^k7KBd?zV3UJjJQ>jf%H9Qe0zoLzvXkYKEyFTViqyI@NBV&~>;PW3gh%RAb zeXhNK%kM3UHG{oawH{I$qeSwyOq54jRud~?4EHumaO^wf(k;d3RhLCC4YJ@(N1U4N zpRnAOeT}P!tccotl#T!FS~x=I-Tbvs9iIdTVOOD(m09`RShi5!fK%9aIwCM%pVl z^x49T;Gu7edo7HhhgPxFndVUG&ke{tuQ;d(@NwrcAlLej4|G*iV0+D>H!kWve&6F( zDj4Yv?1+$1;i=7#qhZA=Af1)>)bi9qRO!AMoZE+4mE*<3%GR-jP_=jBi{G&YAI+$h*nreWl!&+wV^N=0~H}nRE2H=i#W6)sMYu zIzNt~az{V&T)F2s2`#5WLL+FY6)k97hR-?1J@2vUs)wAH$K38Y#vuLJqHIe(9?$a{ zE54oYQmFPY3O}tKnhiLju}t!W5sWJ1xENP*(--U*29(Zd=wZ$XA^4KElOgV;Ca~C# z<$PjIn1@)4Vs?bfQvj~YQ3jiNjbR=`uldiI)(cL|>aS;(B3-&S7stRus~}_HN6uoO zgnCV7V)IS3KA*)@>9rEttvTSqVZIBKk0SR*Fh1n|vgSr7yPbT-XNJI`?9=-2q4ILg z(QD3K$?SAarEW}(-_fCzr`|K#CESCaY_^M@hsLoRi8-R`9Q(*Qx%AYG2Fo+vp2Tso z)Ck9Irh^zBn?8_&N|)5?Q0nUDK4vCNU?Ul&g%%$j^Os-DGgg6G8|Q>6(F2dVw4&}F zcW>p*6h>}23{HL8RJOa!kdXxtBkfjBZgaWdO!W%k!^+VvKU+uLf(}&!+o`iqnPEKX z#bY@^eCv)?jbU~CkJUJ4~=N!(6tTH#JYXojr`VWVvPrj;KG`W zAj)I4-^|qduH4jaOiRNDpZ!U-hejTFF&*(duGB^ogI5ny)B_f^9fOS{z?Jk~5|L1ezSR6_ScYhfDyGWx1iHKTa&NP&zlCW9CO!EQBe(YtUSrbiGo1{RV z_LNa{mCRgwnmcbV=k>E9qWF*X+z6UYaZ-5|`VG2^R7`$ks-Q$whMo$ft;V(m)Qw9G5c#p*h8_@)rAK%`I9$^1kz|^?v93 zGVMOzLq{(^uiazG|77I#!Kp>T;CWxnEnl$m*GK%CW9D^z1LO$I32dgNFf)dN*n*cU z3VeWBH}-qM1-nO>nc@bf&S4i%X8nu#U&jKxukqg^C8r(W|LnV}0UEF|@GMbd?+fGJ z^!WwFuaz_4+!Mh{Ulrw3y>xARr{jZenSuZ{Q&xU(2qANop!#|Lu1(6l2{=`)aa8T` z`5_OL6R_Jy%~}o6c=ch9^|2Ng>`fC-G&S}y%RW9J4(TkEoB%ZTT=rprBjn~j zde`es+;!Vx>x>^5?RXqzA{EuX{(92>-Z)8U-XCs1Sgaw!f$J*YdoBBjwZ^p#=Ls|o zb$g&jWqfIuS)SwkA+4L{5ie}~aBZa17^G%YF{hVtDdDB4(o+|;0`!33?7)M8(Qp%g z&r=|Oxe2YMgFtW~iF++=J%Av3#HuUExbR3|mfO7qTwAr~)8|ni zyZn`d#kA>=W7VgtpG)*lzpC8ibN32*%Am?&hF+I8^<4i_zU#TZ6bod*${Ubzy6VT+ z)gNLzt7o=zH|@tU5l{n8#TfCM;W0Gd9n*-vV&^%yiWX?y=6+ixw) znjZ;0#8D3DQ(t4qeiKy^nGtGxU*fp4!Wz)hHO|J`Vb;o9MSe@isPZgv>>sSDHfb-* zDIsWCGQr2A?uoa&0qvbLewly=--Ik5O<v`yXQL%ONwwKK`$eP z#miTpzW#Wlz_yuGs{67g5LiG3R4H9oCUGT!|gRD9`lxseh}(w1pOPRs3_D)Vz`yqmqx zE|^GPT2We0n6Pg^itxhRyv%O)N`3oA188#R8Yt6A^(k+IKtn1>f^99#krO_lsZawV zL^%t~o#%Pl^UHXlvrqFMVuV2Q^8D4SL8hga*$TQ9)tKZjgsm;g(FG3VqgT^+ z0aImy5mS!01lS?K5cXLRN=-1Lbu{mu$0Q9N5>J-}DWPg2L{rs($p)~XAsf%fYYNmY z{1iHsG%hXoPr}5A7ZWD-B^-?<+C8)|uF!6E@hpKCYw1ihziPRXe7VxX)r)YrRXfKe zQQz-~-t39`R(=gfodr8bzyk;q~4kC^<-qc4C_cA$|eo zK|177b-y%f{ejwdVT`@SNuDSxp7?M(#AkZvCS@N|0&%wM=E+LQQ>&jPuK_bGD!_Hv z&(199(qmODnIF^u-%DjrgB-8c!KhL?@`|ro5p%tnkEv&F1SUI4`2)u=^kn_`a=Km= zs$U=5zcf@bp%M9!Cmm-PereRfsBGK{Z9F#HEnxKX?(mIJv3X81W^r%4x(b zsin=Dh&G_!1lWnM=BRDFP<{$9_q4&H=IiNaZr&MoRf4W9UX8*-f|q@y(-k9WU|t>h zt@JnZ!o()P2U;NCO#cCO|hPoLwzB6lVKh#F&th@HB*9W(c7Z zOz-M`kzqkiwYp`(>uv)@<(yb$I6blYsAzAX|aWUT! z0}46FF4m3fSQLzCmKl|*kvZfW;u}iwESxg!s4uS^>hLkxoD*3Sv*%(*p86> zqQZS&r_YI=;A_F<20xEpXe$@e<9=i?!e&;#BsmM3ZgK%0igVhr zMUO>|KdDXs$#E{^v2LkzzgBFdg(D z?UvNkJH=+R>{KNo00QYjMr3F0&HLY*EMmX`ApI75>tJ<}WdKyf9 z&~M_Rc!+SiA;DnNTI;VF?Q#1ovSAiAG3?J4qtwa|9+IA3FS0!J8CQRJEPL99fEm8` z|A^d`7;NJL!oTPDjmJ1HasC#i_-2pM-Uo@!2iPh?c5<}kxcO8Cwtdk1#-d`hGe~jZ zEIV2QdRJZV#rh{BC9|oE&@Hp6m@mj(&L+W`w)m1fMi-U0$gf5l40~esD?cBguZvg5 z@YSMqnoUc+By*27RQc9mQ=qD&djO}?Q*v81Dy1{*f9bKVd zm;zv@I%7Be0L3zjFZsp5%O^(+q+{zqv8fOC)<`rjdtxUXxf%A4NRBGR0yWzA9_aUF z=@C}V{}HjkcD5aVFWgWD2b1-W{vW?yQCEj96_V=xuJ#%b{cq3tmKeO=D2EpC6ER+V z+b;&Sac}TiL#9RTIo_0&(gbl z#AV5DPJd>tXy4|hCATcqbmVB{QHr|$H}jvRA?E$8Kllg+{0E6036(ljrm35(P+@wM z6~)Q&zWCsNoi6G7QM>YFSF=`vTg>ak4&GFWKc5l&it5OhnVP4bP;PDyhg(m`M)W2+fBfa|CACrE@zPtY2kJyh_yi-5+qcTP=VYG+0{6YGi6%!}k~g&z%yevb zC2=STaScti`wG>~ye@lkZ4d(+1wmtsQeE8s2R3fkUZ(B9p1;{VoLZbar!{MjFj6lw z-`GhIUEHZO3Ui0uL5c^PG#Ffrm`o+c_@3JSG#&7%ng?nE#zsPW&L%j28sEBXo!djo zsNKWPVFg9vdkhhb7a2RPIRo{AApsPOt6)H>6WU+k*N~X$EN4_w$yH*xv&}iKEEix1 zGLCF)b>Pw)VWC|DsKh@xmtoV!?=dt0djT%|`G0$NxP0IY{;S~r7hGV4M@3f|Bkxm- zHzm231PwTG-tX^2lH{5b)E;yl_?6vckV-Y5_|wG5zkN!Li#cD4^Qx#?P&V7Tw3SI|DxcT9cV zC^L6q2a{mlH(mwGf{{Jmvf$VO`bgyCI{o0M(C+tDl(YE4YBa#DBhX4%knREk zhA@c!eb?m5K{L|W>#%#DE>hMQ3DZ@zq)^Sjax1 zWVmW3|EAv=G=M2X#^GfigvRMG^#O`f_@|PJpQ_)(Zb*?X4sg%@5!u&FVa}%-S|V27 zicI3T(^()(f@E_awELcrlk8F&?`YIwX^ciMg4j3*U6F&Yivlx{xGraXm8`CFox&kGVuM0sq6W%smXTb6NnH| zPEJ?*nUls{i-uv8+1v(Pj3cB4E_&m~95tgx)mF4qC5AGgkrA$(99UvH3LWGRCaWVKJ0|hs}_F4jAcM}_xyn= zFTIQ#5fa*LutPzBPCj|;7e*~E#s@>P z;YLq(ir=G0Gr(t@fhye(q}tVnC>&He>bqZOVEqLN0g>foc6<%M)alF#Q!OBX;o@~E z@Ri+g7nsRY^~#qwJ$;|xr4s)zmfyUy?kzt7<57U$(-bJ@AIBOhZa6p`NJ#ceurI~z zzj;5oz_^<63VNP^*8WE%z_k;9Uf&t=U80`$0xFX{-XGgn)s))#$GyiYN~?ru*jOP% z>g-Uh)~rAGhc_&sxnV(VTwX%haSVUr)RN~F1@KbrKqXBc3m)6>ODbBh*E~{E6Snf>_VPqGqHgfx>STD=2GE0k0DxJST-inw zY`dAvGfW#l1%wZN@kc=BED3*2`X4P4DYJkdslyrV%#w+YWjWlP;k z2K-a@4fCQvdv=4ywGNiFV!9Q&_D(;)N5j6#L%@hFu}0^ry#vHI=pg3onb4GV;k6 zKZbKG5?dO+=W8`mlff8T_;4G`)h^(|dFQ%`;#=2l_o+{+7;OW~8g2)h&`B>)dqk6S zM?x%PD`s+MtOo=z4z}@t*6;{YoC4qs9Uo0EdHJ!~s?ZXZiNB(CV>MH5XqBcPfZKo# z6EzoIvxc3*KTha9q%|TY<*UnTGd?6tyX$M?$FVO$anDY(57*Szs+}x?b{*0$E}lsw z50!DU##u~)9hPfD=|J2O8KK0(|Av>&yy%gLO-{C34v8Lo%}s5G5GA6m5{CHI>%Myr z01qO8N7yU=R)>gA0#)JJOR(B$Z7g%cnh5aIR8r}#Zl1Ml6|VLAYv0aQLhs>hrhBvA zAW_`29(L+r&?`{1ZsAzBRAHaYtem{NJfvT=V$J_-T2pPO+@FLtdJLe--Q@QQChvrL8fkfvVF-w>A>mLAsmy?EWK4Yd25Y8W}IQCvg{JFqs@_l z^`d~=UJ_s(OJx&q2J?Yv;?(#<9?{!12E{7g1UI;SffN7kr$C`;Alqv<_srhYfPPiy z$}g^Q%9(>HGTfdl9#)b(JuD&3B1MoqB&32()su8H9qCBWWw?tV9SXo5@U#pF@Tt0| zFPgg9I#7Btq{854N#$lgR~KdaeW4U_F~O$X|FGEQ=~L7}){6owxS zJ;H(iS@Vi)*E4y)FL4(@Ca1|w3`N>GR%buHprD@QPq@7H9f2d7Mc0^YJJ!TrLuY|W zZI}=SiDv%`gTxx9+7U}(W~8yvrHum8I+(N?+TVEfq?a>~V>)#CB)~?6kix+SP6q+1 zJdOKF{r_xn+j^k$_nVuxd2dC0{)Z;xe`z!R*Po)ZzY8^WtyDT0@VR$_?+_i3*#KSm zt7JZCcre5^Dior)2=+66CJ-48i&ZjcVOz89GyW0LsKca9hhP{*r%P!13>R;pqge5e zNJ{lTA}8SdDiW4w!z_PHKsjCutkUzS(*wr@@%M z*UcmG7C&1qlbqzz^BUQH=|Jcu&r3a4o=Fr(h)y@pa*gnTG!AgNHC@b<8Xz6oKmeWx zTL#~0g756V5VlwJ3LcS`vo!@b&~VKx@(Z0_@RPPu*v9Q4bSp^&rAaS1?qpL}^6b<0 z4bZcT2=8Pzu=jAB4y7FFoliCR_Vc{3UnUyt%66g{{Sj4$)?2P$1!=egD2)3lj=?G| zfv0xSIgcYCYkOckbQOJ!B%3V&hL?B(v)quB+f8ZI$8>W5)@n$9nddyKx>@>CVAElR*(p zfDK^o$ajX$PFJv!X3!Rbws|nL`SFxMj8zNU`1PAH8@IvVHSVAfs#yYCN(4#fas%++ zPww&DuwOzmDwD=<4{7*X*P`EWoNSnwCj1}Pj3b`SI`LYldQ3e@g?E}OH|KI7e85F} z`G*3QlZau@EuO_iD(ZB*4oP6yakynM@MMYkV^~?T!>u(i`zgHLsXI_C^tZ~eH{!5) zhJ@fo_;{h90gRk#TZI#MQc97hfOvv(mAK4T^bXF^XdN8hqpO|#4S08Q$+#v&66jV4 zAFLI4kaPH@1~QPHM! z<~(a>e8BYFz~Fs&0cah7eELb$9J{KeNsC=_^xHH{%_SRBZ!LQv+YB3g8@#iFS;BV~ z%`#iC3Zw5Km%0SEcO+1_!gFfp!-U1!lKQ|og$Qo=gQr=`S}Xm6nR0~uU+lekIMn<9 zKkOW*oEE7hMNCChiV7jiv>YjpB$cdF$vQD@vW=NaAz?}(l&KIBQ`T%VmY7P&I$6h( z-7sSr!z}%tBc0{*`(F3&zQ6Z%-GAKI_quYmoHOrvzn-t>>$$z2&&PxJX4clT!WUD5 z3XdlK?h$2zQQzK1wg{gdq%+5{_|F}n3?xAZ4DBd)6Czo7!3hf2({CMKO#9QSEHDp! z#wcD46`4Q^UhO4-9i7+wxdYtaabJ8bE6l|9j95R~TdlEf^Xch~AehubLV^)o(BLL5 z!wyx%jEf4hvH{91vWRzF$*x&nukfNI(RG4PLQUVoBoY$V!I8NM?~p4L+P7Xk@!stb z{oz8nL0aAy*eD>7HyN3w{8-9dLJzd@g0b+3JXauh)zGP}#Y`A-{VHeBdm2YoZK zqqW^#&*v;W*4J+42JdPLHP2dT zW*#?Ma1!>XY6YGXO+N(qbTL#`s%!w?BdD2}9*no8Df|ujGBv5MPKP?rg)k>2v z_@?w(V=&u|`1h-O&E|fEmxN<<7XQA81K+(L0ZroHMRpjtgSh^^Mx%c&p=ZhEWd1LB zp<2B`_Sj?hLoboUg1OmShdPQcF9v?=|5DNj)<29ff~97#5&uO@aOyb-P9o0bKMXmD z=idvsWeZXNe$?!VXn0GB|7W{o#50WYe?OEm$zD8@6X4Mt4;vT&OFTUCbC{w1LQ zSi}Ep@&9b`fA%Z;jm@N{2t3_d!Ao%JLK`B%lcXUhwSPoA zry7`Mp$)VJGf=i=%7?YM)$zN?{88Sy14l)QO(7757=Eg!`;xQj{Sty4e?HTXy_AFU zOWyf@u0K3Nb;VL5kn+heNuxopI9e`mS$QyCz%vFfa=id^L+^5uVJ0G2)>2UF46!}U znRkG^CuHUl{>M4gLDW^fUyt-t`(g21=ggUuF3WOapk#5ao-^=XV@zZF$G1!PJB`$ONGS+YBb=Y}ckbwK>jBBKbYv6zNZg$aVyXW)5 z?(6PwWTc-R{Z^5em*`LF4$dWZtWvEQCaCh>;I5iXV~JXt#O0V$QL~qDBwCs#&6(XFaEG&ks>6GODJ9 z=8cVjn}#p5%EdFy*qQlO4lEqxoT9})+fkRRQ*929G)j)Dlmk7AK%+i~xJ)~T9OyJ*wiHdxCfw-UT6Zz3lTNj9un*ww zfWE2WY8Gm=ID_*Ep~|i7Jl~5D2F1Q<>$@;AO}=M;M2-%3<_x@Vnqhw)koz|iTdL<{ zf$0Ik;U7T=#6`FM5x^Wqlyqv|$|?nq4#87>avi9|66DNZF8$`s|I1*aso_7um_X$J zIQH59iQWGHAG-xRarHmF8&1~zSBQ_{>C%X^vOjW#SKVDi8D)Ixk7&6jxvuy9;&eW7 zA?y@mTX5*eK&(F|KStp=%!uJKv0FIQXFO|WB@vxEoLjfOa^-AL67IY!{>{Z!%`dSM z>)aps{;+j5K}@rXc)3$HDEW)a8U$PBowK9aV((AK`{sy0vXK?r@j_phVBiQLvoMv+ z=C5GUM?IO8$`dg!Y1!CR`Um}d0ps)+RlP0D^M=`PnntZPd%r2JKrZDRhq~%}AOMlb z4MmuNLI zYQ(BScGwy<0C|xV?i#*yKhNCZbxVh=UrPTDN}2yFUBWH$j(pSf-WuenFw47YzlDF_ z6D5_ltX9S+rdMzPibh4Rop10iTVv^vR?g>jIf#TA#KFCDK?@ngN{$7KJYLfJ^i@T_ zyQOFVaKB_y84=`dU!K)tGI%K$D!uZgSXdO(?B(5ZwR>boxJbD#%my=v<@C&qoNgbf zbUpXJ$e{&WUMX3+Vo$QEVb_o1kU?!2{Sagk#FwqK(IF;a{oYwli|vod zv{kaX?#)*T#S8mearhqmi>rcLQvskLu#N>r z!}v^y^2~Vq1zJCHBM5z>kP^;DWUdS5CIiO~Nw5-)_ZW;Bm zqFd&{13TM7c)9$iI5B+Lt;V&zTnnxZdc2K|$r>Qew34%#d5oOP-KI(=E=9=v#L#E> zJVx7t(B3LRPKQyc{T}1`(jNtiHxqC1MyQoZy5(vO0wH*BU-C<=E&q-{hEx0g<@oXD z?8i<6efKx8*{>+z#xF<&Lcf!Smgei*7X~;>NHuDlt(a23V1vyjdV62jrD7g0 zol{_+<}~T$cjwi~Gh;iwuNTexQ*V!HbP zQ+_eB1gDW^8LtglwNP{9$r2^1$Yir9EBwNd{KT+tdad^D&Z9In^HZzIi7e+)#dsxJ zauMM@-SKGnAE=f>w!pweaO%mw3&h1cD5W^f1lB@Sa}G5)L#_8Zvk;TWA7y$B>*6;I z?NnHF>giGC99$DtjFZ;ghHA-OccIDswEdo>d?4b$IB_Ape8*IwextW;wHdn`hLG|_-OWA~D+3rF4AY;dLr$|Erg>sV3Fo@K>9O|`P~ zj~d(d4kE;A=(a^N986^SW zr`->BN`*5@6xl1#b$IBg2rf`c&QL#)YV$$wGw&r?o0&J-)}tnN?7~|XHLC9(f)goU zj33B3L&Jlikn|2QrP=SBlqK=e3|m4@@NAy3bocPcTalZk+jXZ`)8!)dYN>ypb}yxqfLFs6{VVeh=L}7 zrJ!|pAiEYlx!i6I6owk;8*Sw3+KgS(qw*U36eSk&=9q?wJ7RQIEuqt&^tmmR{Z-!| zP1Il-g^s9L2p0u)zriXT!G2={o?K!h==s9mPF#nhq2!ckMMqOw#+{C|r}UFgKOT#T zYkY{Z?J@s%k+2xS`B#-t53c+Eqneuo(c0hi>{I`) zR+5hJiAZM(2drl+WL#Q;CPC8#zK`}{qKKl-&#m#|I>=3;o_X7JV!sJ7owTKijSe=jpVYG-C3(16gw(5F@p@?T z$4uduDPmmfqZ7h*LJFyNEMd|kWGiXn^>-2JGH3z#^}q8&E{B5)iTo#P11Pb#Lw5To zt%=p=9|ZahMdnA@SY^1}pa^0}X_MbY)*`p~EM^}ioQIHbBw{ulQ_hFe@(6wJ|hQcTM7Iqo<2GQyYtjYO6B`ntyk zl|pJp1F?rDB#Lb;ym-7B^emuIA7xMx(x*0 z^{31>wlT+nSvF9e3*+!@dDv%wBnq)=j*$>FLIV3|F(725=VeLT7Bx}Kk9Kaq+Iqv2O! zkI>Y8;^Oqp(yt2k2xrULhy9HQYMgY&ZPP2tk8$H3p4mG*wAs1pXs2=>uA<=cUYx$G zs^Xc*#0|tU${B;@aNo%G1Wek8L)SB6P+qBk*+G5k(q^NR@rlYNvYeh2o-b~j zM@+hQB6(f9gxV_e>R~@=-kJv6tY*RH*HI6t`(_!R_~KXqeXO~V$6B4W%bco|${|r@ zg2GgbMrQRssy}IVOdn}6AtNJ;(Y{x*GtQlm4kI)QG395%r@~}U-#xR1lN=?geMLw? z>*G?c!`$f8=?C0%NxUoIGCZcZw!7^SjM( z=t(d|ZouvzPM}0L#`C=8;yX}LEOs72k#NF zYia#fMLv3p!q()63J}=+%>DUIn(nIWb5q~n7?`!}<4K!d9Ih(0h@DbfB51_zWV#a{ zIQaKb!=FGOzptjwi7(%t*3z`0i43)*bvHOohNNH?BT!0)lu0=Q#Hg2oJNij{f zxVhNxAv3#CnIH2o#xvUtyeB?PY(Mc0TZg<>B%Z|4>ZJyKd)Jh6@ApK{nk^qkIF`C# z@=6T^YuskWbpa_3)daDDBY(;5bo13h(9Ee*6Zk5D~e-7N4@6c0tZSvgu z%5~@A&vfQ7%I!gITDJXs`yE!3>y4`gq+8cl)$#h zYi~O(HTvlEgIME_TVC+YsyO#b<5$#XEsc4J4q!*VvWc~?e~qbf2Be*HfcwsS_w_7+v4TD`_6`w_lvm_5b>G#P)u6x8h~ba7>UEOaEN5v% zaOUuf(z6&iXQv@4vVo*XbWYzJHzh1mkc9c3_*;HR`uXNDHC4^p>?Pm!T;#6k$Y&6D zK^QlU`USg*iNEb|s^|;&u%)5SHLIKfh{dhrhX`I01N7u1g2W(<-42y{Cp=4)EH8xa zfpiaYioRr{u4=PV`(@3~$$3osp-nmn)-KWM33NLN-}Ow!fBa5&y-f)||IYOQ{@b>p zZZvLLJO$;|bT_REzl4TVD4pej*(sID_Ju0BaAt zB|J|kWQnKK#ILLMkFgR76$obw96iZH6CF!Z*Ke^0PlLRDRUTz534 zcRiP6gOnwM!j$#qyt~I$;cC^?B3&nieG2#N{U`m*;a3RLGGO=8rZ-*?7)9cZ1CoSK zk1N{4#S5cj-W#Tb41^xcXilKtILFwac3{IS{%6h#%>XN=sJv?WEG&`HG?iSZbf+qOhBZ=>$JQ08v(^#jwoE%)~~T>y0qa`F9f6i4QE<3wm)Y z?}uH8?h0C@FTA7@?%+0mc^=Y6xPKsg?<=_X%_==kWI=0nA-;<8wE$mIR6AtrhxlDj3{mED?!r4R zCgK1!x^G}wb4ogdf<|(VlBKl*p|b}u;f1fNZOgk(?U)T%WVFw-zImVL`yrh5xg|vOUj&_Lo%hz2)_tT1oUb>W_gtpIL72{ z*51(!qBD2L9YJlM2R*(m53rh#)N;@Iz@*(ytQHUtjTzJ=;p*7Du@8drXg<2)hc-Y< zSTM3ouZVIIYLlS6-)bDEt}_&+7BUO7FpDs;>Yh^PtsBR}Q9!8$ide#;d#N_CUau;0qvr}c-Rx`RNi zmO2B$oc=%Be@H@vC2+JkU4%tDp$0mCpp*q$M#{g7%y&r%A9gmNHG2Llg%L&*p;hAF zAWd;-XwKPc#QTI~&jOx^N`I^1S5}t5PV^mW?)>B9hh1J! zwj!lv2{W$y`=dfcxDA5e@4>W*uAm#m^+Wkumg1Rzpk`C)GvM>vTDkRI$pXt?vJ8L>EkBGm{rB%ch-*cTy{F2uh z_Cd3+@RsbeYMJvp)>a4Eb+9%sNXxnd_L$X5tmp0b~73fAv;&U zj5ffpKQ_v@heFxKx4nfncFHG;CeGR}{{U>H#@<}^6%K}Fb1bxDq`){P;e?lHyT1yv zsvIdjOfA`^;|&(FZCTLd%zV6VozbZ~-TI8_6=L+lLnp zH$tY=D$U-&!E~d3ZEyby<6RGx_lI1CyAIj_X&zQLAQb@DG~+S=rC|?CD#50mJ|0#8 zbM!@=PKiTxAt%~{Di{(scy_p`D=Latx{bYh$hY|fq`U0+FL5rskCHElanOv4+UVxn zK9^ozrS9Rn;^;KkY{i1QU>Af(XXN0)pK1mUp>nOuQYFL^b>UsM6cCmU6}5 zJzEr~0YBavfPbaXvDwjAAOjlO_YKacB-(%uXDw{fbzIRbonv4)?gLSU1=`8ke^}j5ih%)UD#4GexJFN`;mG8MX=a zpwRL|YY>Cb8)nfLcf3Q0A1u*BK@1ycM0-w=9VCgBMX$m>CDqiN?D35*A;>}P_)^0- zNpYg2#za15GsRjsI}DWs3*SHStx@FjrML2jK9b7)5q9sskkgq=AoDjEu3doBCb(>N1aB?PWSQa<(nA_@x-UtP9=f{!9gwcLv5-a zU?CcqwHgmQ7TkT_D;{saBIOwThBf`-z5^K6jnt)dZd0{$lL(ij6-~O zMo_J_()5)zRkd;Us16Wb$HD)z-uRD_d#v)ym}30g@;Gu7Tp9wPQQdr7^t+j9W05_H8G< zGToQmofy&E?{Tz08>Z1rD&*Inb;s;=AAkv>>fVH!S~F3EvkLJ7T%_v35C>f*dv@pe zrdZA5nm+w}QVP6S)|UDgPkFd}<%9FQbq~A0ep=%9T|c{0z9C!gv8hc4%c{|f zNKf;wJa6qFNc9=0aN0=Tl?c_jfzP(Wxmp#>b#}eVroLl_{`M;}!*mfyixqMC+$5M5 zF=5V7%>wJ?&?j?l9er?Ri;kw5E&mo-ibFUZ!8Y|Xq^sGc3Y+Z-_G|dCxm_d3&6P7% zgmslLH~UFg@IlSqoyXfby+svw!LuPQPX*~fmd8qQ{FqBmJv60h2xM}IB(q|trh>iI3(sw~(h>^@G+v*Am&{zQx1=stlYDgvBX(v%l@ zYlmc7MsIx@Cy4!sWf`L7pE3ElV;U+QJvr`9?rxYp*V|i25^`qodAo9*?knX?HK6ZG!vdaaVw1d7E!D{T|jY)w|hl zrokudN&nlmMFneo9It*!JHdG@IW zkD~htq9hLO1TmLRa99Vh?so*5PpvhYQ#v&hr<{ieL6$H~aa>uedrNSe1Lx%05{3e->^HI82k!RKJ(VA~R6C_s z_;U14KJmG5xhX-m1Cfk`j4Qw}-NhH!?yA!Dj(la+npmA_~ME-^bRBgP(gU%?Vn2kk4E*o$J@xo!$V_Dpj9E$y&`kwD1z8~gc!!I`%d>ww-&=iA^&X%m37Y{e_IBw9NCvbx8Ef>;{Uxx&<; zL~=IPof^^75s$7fX{9;u-E0vl;@a%>LNBKZZL66OyO6MeNS3}^O6`SCYF+cdnDhJbAc_Qeiz~|U z9qn52JB9vQj%5{cE#)lKp{>oMO#IPCSFX^vLo+dDuLR&o05+PCu*KvA|E->TngrcV zHs}ycWLBgF9qo`$lA$=pLY-&4yhEiVUSZTrq`N}IktMvU zA-&3)t5%{>8BdfpUu%iq{OE%JQP=?nCzdSEy7F;H*{T82h|5E$*Ydxy=ywELS~Lm* z-#W`)RGWNAgR1u`=J>sFtcq5QvvO2R4f-E^TnQ#}U>m5|_C;ei<MPRGWzxHERn&G7R{N7?6Ko(V;pf+QUZvc*3HWt&G^m$r=GtAX(yniH9t@^`U^Ojo1fu6RM78&mLc6my# zt$hxuofFP%w=%_JXDZ|FM zkDrhXOiD!hW`}pFUP2E^v|!ko6pq*HA@=UW z`C`%c^V5qQyW^ztawu)9r#3)<Dl+vX;7Q8j)-N|cKA4rw}r zxN>hT0hHL7Z_GASXAG7mYzjOnRLOC=1Q~%vGR1ElSW%qB`12YVhwd;6Bel2c+{Ex1 z9+=`M^UC!T>o6m>Df{h!MR{5~zm8Mbg@NU-y>=?AfR7XbF^|Dm= zQ2OBL!H8WF!n7y`$priqNa5yv@S*`mbnm_C&8CL}yCxuQ^L^x5puf*k<1Lb8?Plte}1U*I&sMIa8D{40sa{9zN<`?ZGzjY zHz-sK)Y5UUd1{=u-Cy-qVM%G$X|k5@3biKcHH)C0l=a(|XNF;*bO4Q(S%Fn`xb6>&N_Pqv~mGLwM+7 zDm`KJdU#h`_Lm!fq}$kU;|G(au?L!Lj_1>|&nZ5gztW}kVgjHPiIMb{Z#PQrm^BG? z01I{(?@p3G_}Ffqn!wTe(dm>{Da9G2C6yvZ)Fb%Puye@9st|`_yHxPw2-r47qVVvzRq%!&07uz!`|ZIi7%tcXg6JUEE7lU zs+Hvv&0=+4w6`Z4PpNT~$vNmmo`sca@)?UOSDGg2!A0giJ$|+OhIk+K-OQG8YPe;V zWdA4ewgFFQN&CW2zP?(x&6Z!zsbd+H&&Y4cJ2P!^8k40g0;t<66KU*k%{z0DtJmhm zY=K*rOImcG?8@01rGv@a9+m)sq+AbTt-bdP)Sh9p-C42Bl)4;~SYyk>mlBFalcYxe zs2Ki*O*Udap`~Hh@SkDyR*|e;))Nux$MW8xt(u|(?StwI9L#eZ!e7dv9`mt$ z@TO=ReDIu9#=}(9j$Jd8vf=19Jv*)nPn~o3e1z>t!G72KFy?<52#ygeu??Vm1= zVT&n{6_g@@gXWKrwA4!pasZSQwU+qabl8}Id+1x$Sxk??*oCu{X0LYuzyq$deVS+_hnfmEY-IzwxBImB11NHFRt*)d`% zvE_YS?4gI_mPI>Rk|&uyi$7u1Fq?~)?{s?Z-#POfre{@DqMEUE-0Fye;af)x7$eTa2^LBsE z$DQQTsMc9xjfw`-X+5xU$@elo)3SUBBWEybk4&{4hf}-ENO(DX@Rxpc1V-0&MHPGHRC! z+YLS=at8>Hz+L@FR?<>%EjaB)%Zsgn;}w+3BHn4@k|rbnV_bG4$M88;uPIhvX}Hx> zauNUQ%-m_>Xf+d6PTp0RYj<#>S?b~XPUKwEB=sI{%W(YOXn!8$+nUNjg6(dCb&hDO zT=$`mubE!tm)h0Y$g?kbuAlCZp$63?J&D*FTs>} zfBk+ty1;o{od&#HS`fMi;nr0@YeyMoxG=QN3W>X@=!p>_Byr0EhWBwde6Dl2r;Ww( z*6==$7Gy698S>)gEWzWBv)qaS_9KqbbMM1FgJaIuj`Q>VP8$ud>jg5?n+6&EjWJFfpd%|*_3FoTD zzWBG!%S_k(CgjFZ=%If#=|(XdLdiyv$|{6bZpF ztBG~4A9bAgrmT~`$yDEJ)I`e7HieI4VuYL&?o%tXWBbFCU6h3!05f#R%@^b3u)y$< zKFv^Bx_e@Pr@~s=z^-96MckB62o*BQ3X_(*LgZ3mW}c8kAV&7>H0zX*bA?{ayg+1@ z6YUyZjaYOH8HuI#(!a`fquWg{!IxC;-f<~enC(|R6cP&oGtLiX4;f(Bv6||;r{{Cm zz_iGzeM5$d(3Qeq1{~lxy!ud}*_2-P`kCljf7~sybNcvt-m#`4yei``UgvI&&&V0g zB;B?X%J1Of;Q1y%*ib#GfM|}=`r6BXXo|~j($+M;emf2SW zTt%fLv&N|mg&wh+udne2ai1Yq#RTf1{kxYX=szOc-X1WRZn=}vc(G=K=hnPyxNbN48lFMx1tLomu7pk+ zq1gV;$5Ym1;4?{;Rz*nG_6oTe1-YYoD-6Ap z%#wy1T=GUPiwb9JjHljAKRLGCP)dD<)NNUTS;0HP@qcOUCX@5}>>q2!^^wNOy_6Qw z?jXVv*J%b~r;yF|4o+>5l7k7=*t%NRkMZh>kmxZ(2tox#)OprE^uzVXG#x+Jgzg-w z{J_7%q>OTzJr%T@= z>$uWfV-6Ua74C`;|AZ9AJ&tnSED3i4*J7|2wT?slY^6oei0#7~a*uNgD_nCYWEll^{T>~K0k$c2W%rj( z?JBg2$ElpgJrk7Sa~osRZ||ntt;2q0KV=N>M*V5VRPLUkt_x!)r4P9(Tn+lD2P|3- zx>0vq^8#}Dfecw|(Aa^nx+p>K0@(MJppfCRk93O-#&#>lyDURx%LE2F`Qmw1Gjo>1 z1EX17Y<*1HPa-mjfU9ke6VbE2PTP|HyWJ;Uz37S6!JFb7Gt zU*z^lK>WIU>`B6jK|X~O$5n+0IAIk!-R}s$>tnkF$1(;k$CeB*Us20x7DgF^FaP*6 zWj^2m%L53J6E~3A#RYks233kXO5Uz58&mE)PHzInBdATrzK4QhYHO^FyNR*+~X=7aen z>qq`0@oa=-vWk8hJDY>(CI-@1?(D4}zc>))T8EW59Zppq z)nrP9kawZucLU8vhTcalXT9kJLrz`B;OfA<{8l5t_Pi5kW>HnWwbD0XIzg~hjV1d> zGth!k(Wy3{dm7dO5HVCuZe8NEnbc($UiS1`uKbDm**~p|v<6pauf+0?XrtTvJb1+r zjgK@bBg$yf#Wtsh)kcYcVIi5cZQ#h@su6D}8w`|Ov``Y$zY#2QoE(Ld918p>J#z;K z?s5BC&Bn{`9nBuc?~9#HKF&|lJN3#&L*3rvu#m$jzD}^ktw8<_t$EV@okK)BZLwNs z7{Oy*0Gr4zgBw9NgEe_)JWZ@*M<0YsnBDiY>~m&F_i#peR^k;!x6HPmEqA{>H^9&V zO0^P&{G!fhi$voCSQ#odEUD&v)sdj~mg=jHk0SR)>+C+Al4H=x565Htjp=8yzIZ6c z>K?8%(W>H&OqrZyqHf}}z2)BzTX)71G?2TnPd31n-l{Kp7CzloeeZG}Uby##mT(5w z60cp)NC@0{Xvw+~px!PHbqM?8@`+-t=X0OuyNhdi)NC^@RQgz!4b)0M@UuJ%!& zWuLyVUS!)m5662PD8NE-MWc<-=0J@;4*HKx7jo2ptI-!{)!M^&4{2Hi-x{8@(R_F?3I&V^P7Rs3){~e=t#gJdX}uepvm{ zsQU@?P>;>3vzLd_G>Ri~QTs4a>KgQR8kE!Jd)^@yb7aQfTR+V#D-6(Ppq|s;(nj<5 zKER;U+HH6b9F*Pt_sVA`AiQUJr;u*^h7nWQLqXm2vUJs<7zc;Ny~IiiG@*1Q;U&+r z9u%DEx6<__Wg*>BVQb|#aCFhm&PpG<@*I&`*jOHclgwH%SutZVTR$7)z#AD*Hx79{ zE;+a-*l+vw2Nfh^*Y)}-;dh477Zt6;lg=mkxTv<*m7Qq3@Qr5mNpG*KYije;{fpL^ z|LX_w4#9LH^4h)lRY-0$seLIA39M%t0L0cy8MA^_7UQ~(|An#kEsrM$-8f3UU5L4n zRA}bhC-7C7lZH=ZLa$LfRutM}J&}FRsM`NCrP8_{xSM+f#7hQFH}9-jy6smPzU!K< zhN0K_8f&$`Y>N}$zWn&!eYeyN*Q{15HD0_mQQzek7l3$6k#kv>ZEpDMJb<&{2r zrl*omUkSmO-&tdBs`5L~$DW;MfLay1^||hnv>WRZ)*RoSAG0Cl_m_F(ZH=crw#6Mb z6ZKuM+Dl)$(aJ-X@=g4vG zZLx|?3h%;?Mmre{>Zc7aLvU1AB%gC$etwuc<03tl=T^{Qc7AK=G?baTKNigJCdi-| z$MIcv3s}%l<^>Z0GvF!|yZ0vv`i9+k1z^D&b7t-~8%r3*x} z5D;zxv!#sw`d!4*e-^>axP$M?Z+-srlhCWQsJaQh3ZX@xsj}2RlG#(Q7X);Ct7)g1 z;&oKRm4-;WM-l`Z z;z;<~h26S_VDk7T0vrkUGC_cddxfv9p5ae4-F;g_ z$0-VSt6+=!-GT)67>ZINl4)B#uNkwNe}--QRBJ&c>*7mQr!fK6%56&FgR1oa)sogn zSn2JWZMEJ8xvj!KfO`<0cUn!LIf!(K@_Q+3%quOVeK1g99YROw?!`IPYTowA4{wd! z-0L8Ro7N6(ut?umV5XZAw@7x;PAR=-N~MQIl3r4*pRZVR@~l(zxzvb@88#9M8gYxX z+;wn_KV8K`7Q+r^zZRk|m%yJygg-(uXG1CeS^SNGY6|l>5x^38T0y+cNR}nOOa)pX zNo~k}DfW1df5Iq$;J4}*VhPwWMmP@cF@yam!x{L#wC^Gvk#k24v25KtSBe~c&R^EZ zPgb#;JbE$0S}E!S-|r63r#C~cYTJdDy}B*kLz7piE#{H=i32;GkDc&(6xUQ}UuB{& zi4kmq#>!V9-Kf0pBG=79v1jm2cF@6V^IfD+Whx@1-&QgrJq2uF1N;y`{CA(hNM0a* z)(9e^PXs{73@Q}78W&j8`7H;8w31r*YTJK&KDuO9p_3pmMGB4}dt9)lfW}M|m_yby zks$o`5yX@wastZqW1kK|g<+a7r$U)U<7XUk5p@=V7Z>o8yGaaPy2>)K6K5dDgXc9h*ulOR3Z}<^8K%M_;6idTi34*BF?;=}4 zd1lRLbMb)nIhRJCb^9(d$#FYYM;R2t2CjyGXS?EZcHkY_TE#Sa#CXbC#xi47}zB@Ic#d^L)Hiq6ZSa5E`Kw#3r-6+B6Gkj_BJ765o|65>dXrkZl31I8zH6;WT zC6R^1Fp#{2AXvIlKb?1|4OYGIt{`v^WdA=D899xB2?8Q=7CiLqX8eDlD*vgd>~Hvw zLXrQ}RMha^qp)Gf`3(bAlsweq#b5rH?4GQ|my&lSNT~Oee;gq!XVeNzV;dpaxFs^^ zLM-Bh`6&2?Nn-@I8b=p=X;ucU=%s4c8yfXdUB1_hovPJ+XW&ZC2*>y!9-42jp1tmX=#;E_c!-ETdx$ zK80ecwrF#|B(GO7-Zt38a8CMS-WsB7S%)AHt8+_D48@Z0%Ea*!bMx4(zZ!3o9IOBG zGpU&W9hDeJ**h|I|9`RfCSWnQ-^2KjibxM8X<-m5Nuoue$ugzVzEKznHLa3TT81n! zTF}N+O53!kETxEs77^|HzA4)GnrdeJ&!w*Z=ok@AtY)vzWP;v!8RHbMDF! zgW^C?AY<%6tD!ZRec16JVjUObgV0pD5fm-KKYY2;=!L1u5~PL={-OT+=D#rbFCF}s z7yd7i2M$m@6v5l2fC=&|XD0XhnLt9sMr~|Pe>iF5_1$m;r}=Zmj&b@UkmGdb? zN}?qm&I!}P=~eFxmr=29)eu}uMz=&u^lC{(vVE*9!atGe7L9Q$x~a7Oc|pUmdT?Le zlAlSx$?#?PQEi;5)ddact45axD>193K5O|cEz3Jx&vguZA$O6kCyD#cHQs`tgYOTX zs*8iv%L{**qj%!35N+v|7D&MPJ$oc-Og1ED`de z#NE#;KM%2<+aosQY)~Wv*@3}>!((E-tBr8iFU0(VBYB?bDVlP9oQjs3c{ zJ^ZiF$!X`?KW*6+!bertOW?;yY~r_n=Chgch|Nv36aVR1(%hiyMqNiJIT(`7z`|_1 z#vKxbmqfmnkFs`0541WRp5&AABb@Q*w~xN)tB%Q1PY^_V^Ojk8srz*b$8CM6b2LQF zmdqxEWya}k?^1qP5|*>Wix9_i4t>2O1SeW+ta>C%GKgSyzmw(gaq>nLVeg9{-gxqz zZXs<9uH|+o3CFI`QmaiLiac4X^_EoTD!8a9)FB{ob1iRL-KhnV1373tS!oUtOBn|~ z_iBpPp}`2;hO6f&LiJH_KGQpO+@gg;LDQ&ZxlD+&G}$oxR)PXl*B@c%84Ns0#a>h6^b;ArUE&N`bNhb8t=tYrcwOcAcPkG;hsuZ%rS^Kbaj3JS z|Nc*R3{BrF6hCx^#EgSz9aw6yHcTiv=v5l^psRgis1OIKUr@H#{miNAae7_25AAN! zL;ytdY?vQ012Ul_A`n@GrWn}_!6_YwjD>AEMePJf-k&;olbGEAcXUwTG!23|%Z7cX z+t7Fr%pBFxoTre`-b4|8pyH`aiHD zaavH{gdf0*$ZT=DMMu1t^6_UnhDTlfA1x zld=y^ye7V#cqtN_p7TNcJ}{_nvMp{Fnr`7|qw>jA2LnAAhPAMqi~gdK*eIr#qCpd5 zQeuppPPI=``%_HCBU|x9n*jNZjJHw4FEp4ZvEz6!=g8A76>8ir&Np<|WAadP9&vVH(ZbsdysdwqQEj&D5PzeINuNArmJ|2B>?~{zwGvgI5 zhabHhw|Sh>laL7F)g^Yo7-SjyOSf$N(>}Tcl@2Ed0|$tiN?%Y5FxA9%!BOm!@m1#- zTYVk+cGU7afATpGowVwS$a(L3ACM*%P0vMJhHSVTiQ94tS9)g+>G~&*wCi} z3(s8y?Fb>q%~)nzlKbZ*EOQN(gIFXq)dS?+Jt4Yks7L6qI1nWqI*b#>0_pN&KI0p{ z4zQj0+6EjV$?pS5VFwnZ=`b%62cz)J1JGy6Z58o*o2ehC$IM=f%W_3C2q??IdnTD5beW9u&NHqM z7_WV98yYxn(EPxr?QOzmJG>gR5S!Z5_*zZMsx_e5AqMZasys?#fg?_AOX#>Zpl5@r z(&w&b27?X?d>Z7PZb{8P%MJ4yP5M98hC@W0Ad=o+WwEZxaa@Cbofo`zaDiK;21ake zvNFnsYo%`V$TW(FryPQfws(dOO($HOfujVWX8Z&z&`u|D(DZPIx7*6IpvI;k`?A@` zgSoD}yT)qoerA5vl`5y`!^eovQ$A98v4kG>rs{wlg^fp)f^qHh$4na8#|;Y32hx{A zrg6p-vY?&oWVUEAoW4Wj9xOpQV@p@Qli=Ih>yy=ehu&wp@pN37p7WF+)BC8v%fUW+ z0?=&3-kAm5mb=B$pld=!+G}i`=?}WAJMNnbdDdvb&kd>~B zP_xa2`EyDRYfD2OK7U<*x0a z#f4ev9f6?d;iQ9}42^D(%cpg}vN9wy%z6is0eDmVx4ccBM+t)4)=!r$kG}#*UBlDMkIg_&9(8{ zn~a51;s6Xy5C__bFcJUp$3;0{-9})ZLcY_t^shO*k+meljS->}s>T&#rG~+|f=a_u zW0dY~lV({>qC2d%wlwo5qH!Kr6`D{2friiKY-XIQ`D~q^ezhe%WdCyq*B^-)pf@S^9L|i{Yd^d<}N=#It_3XE8?}zl|&5;Z0KSH=uLRoy!32;8ttym#|rfzD%JLqN85_$L>rT9=<^kJjD>e9j56mUvnMJ<pGX5^alH-KDBx;C$tB zb-pm93wdiIRTSaA`>Iem5IEepp1)WB6_VQGie$9pgTaaD)%<+IUAO4pHG0rDx&3dt9-G z8ZGEfk%rm@>4-PA){--?RQI;X8?t5@?Ca#Qb(hqHHiS$?fo%gfXWm4HyV|=xOxH9) z8MoK#O~|!Z?_wqL1sOHwiJh`bSJtjlB%oeL)}{_o^p@mFW%RWwH-zF$Po60w3rej= z>(}Kk9pU4#(1{5T+_qjZ(+cgGhVI;GsaI8Eo6qqKR&vJgV|JB@S-7|M9@q~GiBO|9 z6stlXDx}NR1-||08}BH^1_ed1WgXjto;nv%r7@8sV#?Pjr=#-GdWve62U0lZ=cBc) zn;>Hd4h>gxrbPf$LoNXD5{(ZY3-eKNMRR|UQg@7kiDKJb=SgK~DI6dPobolMWVEfu zzto5h%aOag3BGTxwzLSD_qs;fx(%;YQ_S>_3JOc%TSht!!{6Jt z1>)|=9P`Rw6$yvOhxop|YMv$zamy4jj7T^7|v1B;hFQFm$`+QgfiU;ppM0US~!Dk+uAtPo=GO_zCZGM2Wmxhk0|)k!ts`}qP=TBy%a<1 z)jtxBLR@bgE>SbH8lCnQ0H-KoDZ9f9MY2chd#l}ge=PcOlMZAlw#}!k^>yQvBSq%5 zgC(bR2IW~|iB8r{t2>5}l=v|Su*LxCgt72OSOb6;ogyy}fh7p}iKIWH9QSF733NDo z(m3kjb_&Za9J)37wa{rK=Sqxwt5b)G$Ua5&2z?Iu1$kz9rI*FCjK!U;~0rN{3d?eU7T z%C9IrURH6EoRbo^x_HxF14PPW0Yc?8RfpnL19TP?U6asc4};)xFur_E3@_U#n6>qx*w~hSK<_3nyXw* z)U51K<6bYBDC)A+^Q41a3p$Elusf;hQqwZW7EvSWy2o$kdHASX4D;DsC);Ea-2<0f zu|7W#4baC64N&tpFcwm}+=o%y_zm{&l(M?x&Mrf%xE z3ta*bYafhuwXvnT&X<|wRU$XbSUre6b`?|?AgMZ>6J;2f9{u9!){z= zLWWe$HQ6BO7Lg2v`Sb;&7CyfnvXX^ckyQ+>$%2oPjtmRtK<%4MPHx;rwr!abHi$%y z)dqqYbUZxJv&6KuZFFmrXHtA!pjyF2=1XMuXBDrYF>-)>4;+y$D$3k{S{0;GaOkXVs_vr zq^!bfrtl7Owxq5&ZBlz7rbLgMUMrF>=Jp6GmG?65BXP1KCJWf>{1DG-WEv62UNhEd z;qzajiP@T8P%$?2P-y+cMY~0v2my-?!Y?kE5*#U{~T*Yie`Ua<K6TUCXv+9}LN98{7hQajIqht$aECn}@i zuoJ>!{}Qk?==(o0AZ=~17LK;LI@XeyR^YsRn zNejDO3C>;4g3uV%QHh~~9oGXIlq68CQHGpvBNy#IapY>i9uo zc9tWM@@{bNRXhL<^1hgU&4k9GnHhh<8w*m4Nh(D|YM1t{7P)qkcX2=KfC7U5*`|W+7NfIFa+-%T} zKS-=O-SHDFZ~TOe>)`2MX@U{HVh>W`??X1QFmZ|?r@&G3Pl3aeYaIPIV`lLH{* zJ3Cb7Cj%cYNrl_pWq{&KfZ~nesA(bG?#>RcH)7}yAVNKh*)aY6--yzpy#~-Tn{g2w zT=@eId}c`jsUa&cH-4mnOyqv|?=*1x2de+ZdI(Vi?_pb{2Ph0SSf(7F{@{O?#P|jy zvmdqqjQbO@0ON_zX1qVj$%y}A`G1vO_%D{fYV`k@mx-W9ODZS&{t0#Vv;6vv8u(ig z6v~MHvk0QL7{37NANCu&g94_|AMK8X9i0EB*n9-a@Lv*rV0JkEW3%J;_6~(9c#bb= z99*}riub3PK~H*oQ&$>O7SFaRi)TvgrkhGya;v`S{e$fw0k#82J#wZwWuE=0F^VK` z*k24To1YD?f19xck-5PX|2nq}a}^xh%-D$yiUetnU$n*#_{Jc%?@8qs*#r{hQ zk#}%P)+04!w&I^L7ys?m|5y0`U|jt#R`E(q4(?RuNic5_uCSr+oW&w9kU;Ivmd#Jr z?QO7bUxdz>a|Gg#Hd)YV0@w{d8&-cZZvQORh<}zYh(YRzon_pY1)cdv^RNBEh%NP? zqXk)}%>5}T@x(0Z7h8q@Zyl7MCHjA4ks_9~y^TKW9s4nPjsv>yWE5j&|S{sYM; zBY~qIJTven{scMjD`t6Ce{0My!cO}{fHu%=BSK&_Bif+|+Z0BF$}^>}-mrBzvUsT< z{KDUwr-(TG#f_gr`5(bH?K&eQ@-xl>em~Ru-)eF2NB<*w{~vcGvStSlzH0*@wW&AL zl=idl^a$Zna9;OvO@}-%|3b(E`7(R2v^ zQ=rC&juy3n+jFLaM2$2@)0v2o)Q}TzWYuq+%~>*0*L58PDV)B`u@WD+jA#1oGw~#b!jp-$p?} zk3bakC&PN##9kz%_78tN9YRGAM))3$WF4NxTEE27Kuoc+7b2`WZ5LZ{V`qCLzlb9t zxZ`BnTmqG;L32DxoE2R@aepx<5=)%z&>*qI?^5*ARF33VGyX?^qQQ@a49?^C=&#E3 zuK&FtQqmvgD9CRpHlK+E|06;A5V8gg+LT(Fe{*_^91G4ohQCGLXGh^@UPlMMra;aH z&q6Lv-~I1>_t;Z3SseK6zyEw@m|4%-NIRo-NJ>N4x1-saW7-KN<^njeV_gUxCYov2U_1@3(Kgo~0UK`!dA0UUHa_aJR`;X<=KiQh?sO zC*-50NFn&n60h+S6wLX>TlM{PiW43TKgTK)Th?GFB8lT?A-#PiWN>CevK$%gjX({^ zo3Ctt?>T3m{V=xc%{i#oC(=OT>?x!tTmwF$bO_P+2|~Kr4M;r= zWwycr%@Rm%#C=;uJ(>vJ*6B<*l{AJxtp{DD?<#f}N#3sVVH!f^UiKdB$bRZz2V`!^ zVO!QE0*J)0%0JA78TiYGp)F2-PMq|nN`Iy>Uziey zzM#IK)_Z(Gt;PHdHRZ39!N&g?sI4X9`W6|`-(v@#!Y=|sBSU9R=R>=u#Eiu-k6;RLgvHp)R^kfFWe-?Vq{s26BZFu0s0GuipLWm^* zL%$YUOq{*r{nVB<_=!mDxIJ-fr7W?jSuBgG%=2~LeW&~uY5lls1G>uCKSmWYn448m z?p&XdRyf%VZ5-c(9sdhd(vkjL=9SQKBOr(O8YLQ2yM)>Bj9jH3C?+XCbW2I>TLk2Q zEWp%nu?4jLoicvHR@9H{{#$JQlQg~t4mZ=A0~rgyq0580c!sDEQY+!2Z8w-g8Egh0 zWHUy%+cJCi@ZF!81WVs1;tL7dKGR$R+Gq-mz(CV%mdLqZZW{cPvuQ4AJm87KP0d$$V|?}xHH_dWkc0XQr>><^FFHrUftg49fA7LqmGTGM|c&-G@^-gbO7# zkzR6BsZiYYY7(U}ln*(1sr-*U!E$zy0_zXQq!q~6oiy>wEsA!oHN{Q9G zFgBgi-r{8KqB*-^Cvb1C?>w?S`tY2qI7tzf6gd*g8e1R5LN-JaCPeDy2Bq74QjZWQ zne(9b%0@=bVJ%P1MgIv1M7y!H)p&YTL^GC=1O2n|UGb|7s)+rN*{!OSNt^@=rh_~I zR|1+a_j`U~zLvmDoHEsCXSBneyzM?68%V-Q1B)2KOe^Zo)u~Q+Fl}DDV%x+p%dx#6 z{-Z7UXoJ++#s#3xuDzpnFXMvGj=5QQe?d9LGKIz;3Q9uOa1wRIW-FeEm?}OVIZM+FpOp?X{aWM#(9>+%K8K)xCfBYP$Wa>= zA*tobw_?uDQkCG+N4~g)yAPW1skqgVrAcfH#t0lIN@K#<;(8$GCj1p7Ik$UdQv4t( zed872dEpfZxduIpI2{Q!wf6(f!r~XROKOYPM}nV3ZmxZqszL~f8}F$Tbzt_i`o3_BP{`B z9dvVv@5wV)pd0GapGHU;Gh2CuU9xg#2_(sjK98&4C!rxZp>RhsWz8{IyOVSr04Nn$SMO66*7M#Ip-16)%0sMB5Pp&`t%`+w$B%xDx5Seg# zu4N<<{@$WFXuPLbfO%`L!cJ-J&=xi2KKe_CM@vplX9p3PdOe2M6X8Rf&Aoa z8mkam2Op&&9k#hyRqNB-d;C%gMah@?_zWfT4ak=^;IV>&ts zn%#0UIj7U!sqHS9id86#ZQQIrf5qGAi&w)o$xm-hHyQA* zhg#)Vz8x^~E^MA1S$8rS((FrSFFmsS6-@FM>%10{#Yi;ErBftN0iCQ9Ma!3eO$IjC z4#-(iBjPt_wQLx)KaG;R@DQoD@JMWa2*?$9iGUcH>6_0#`}O}{ncRAL@7g&;WH>bK zw9dGLiSh&>>29ke%4dw*(5%?J|9G)t=Qgt6930@gUUzQsZh*b;9OYNhy&Hnh>+C&# zVbM*IR|9J20brarU~j9#ze-K?UGN_hRC4F~o_nve#!^@|{E94EZ&8mtH!(Mt&JjTa z#{v`Tr3}q&~R=6CH$!qE$JB(VCJ# zuq?n#-;>;@Uq=JWDyQjOTZrQgPxANuz?;J#D=@I1ja5k^@_1EGnW)7|vK?oam)UwGZo8IiQ2EIT=|nvOkm;(=jr496Be*Tqy7Qf~tVd$@~8- zF*JqO9|qvgWbu;?kg*0IJGqk<LNZ`%dSKL`0v4k+Ii(Hz>l%1kt@o1R>sT>|R1c|SjTDer2Xi!J2g*fBHyhpDS6R>%lt^^I+Q8G17%73re|3sTa~Ou~ zX%5zUPG*SgC@#2VF6L8U7HuNgUrph0y|VsTIGJCv+2HL5MmWbdFr`mP9D26?*#i?- zkKPE`XcN+DYgP{B?!{sYf$gVtou<0THgZhPW2f77h9cWYG923ab%LTda2xDOJX;e^ z_AJk-zJWuvyW1M#@W8$} za*Cqx9tNuWlc#{_v5kI4%N#g_BX*Yf8P4lPsP2NT!p91?V!ksH-x+l;kM?jlD79 zq+;9?`D5Xv#pWlY+gQn=K#z=C$q-pn2|NzzryPAX?GDVU8Bb zcYE~meC-=2o<$0j=Bk)O`*szvxwof9+MyxtQ)0k{P&Ng2(fFaAuN7@^QWLte2k+O$ z6qw7M2^Kr7H@d(~j-*z${8e;Q@kZtD&9;i21pb)8E*VK=qrt^$waKLy^EnKv)R4ld z@Dnik+-txQXtXxh3xfGG-cafLICRhz)uLi^F?3Llm}&lLz}NP8Ba{{*P-j+*tonxs zg3F|eAngkvEf6Z$coUi6=8Wv&%Wn6|)-g)hZzi%Pen@+OtaX6+a<|~?@H?UBLluy( zB4QGGguzcDfs}r=`bff3T58>@{_Z4of|;LT9om;eST?diu3~dIZXpo)B}1hnm+Re0 z;Pv?FZI@gxnMo4KIC*m8b!+|Bm}n1*j%VT=wF15ntyIIXbt{GQ(N&*Cydyx_uK}5c zM(H}oshlcR;P3!Rx=1Gm_8^RkG$9#UjD)eAqju~GCfiHN73r)5Hvi_HP05mJg*~IV zr=E43)*<$C(5Qm4r)*4Q4e8ajD0ZK1rG)^=S(lwc8T!r}dOsN8ch5!V>j& zdF$WxEQx(hx%w_L=h3PL^WCpN@w~HITS#We1qN&3zrTap-4Q85LTyk+Td%#m zvnZF$@$}Ngx8WB{NDB~5f<1s3Cv0S((1XHZT57Muv^9=_-c?T1cc~CI6lRyyga7A^ z)3Q01W{S3sPTdeFpndykD=8!MlcbIYCS8Q}TE6|nd?O)e>{D`F71&uPvL zDHG_C4Pzl|+8Mlk*RHx-No5;po7zIn;msRcQ$YeKpv9kxC@OnvTG#@;n{|qWS?#O{ z_VoIz6NHhzRn?T3$i4)4I(fz$q$)+le)&2AGdZMVJV&a)%sR_EJT|lBlVriJ4uy9u zQOdjisxvIJN1q~P=$n2()S<2&S_~xJ4^e>`s{HjiELd|f@Qc7_#O}}@7BdI02p!gb z+y518E@e4bC$KEt_j}w)1Q(q+C;x81fgVaz1Fem%51Ut?YbfJfYKCSh@|Dy%L&)^j zPZbJbMK2?%Wm4`WC61Dga^_0gy;#Uq(!U)$>iBo=GYS5 zR^=-j9<)*}?n4kjQ)|stTSYsdo|r|3QMyO=WW@k;6bBC{L@X~a-dVAn1m;rUeN`

>}p=U}^g4UQj>F~uz5 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

d&3V}{rapaRGaaz7?BeNZ>s0aYk!CWs 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 z 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%0DawAJ@8&V+n%8BJ9Xl#Fh0Q9`;Vo&UwKkxlpAL9 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

-ylUM(xIzv3wJ3d{1y&ugb$N7o~_*Raf)HjMJTI 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

bN2;=snDuRt>JJ4p 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®hi(oPfUKW2 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 literal 0 HcmV?d00001 diff --git a/examples/utils/functions_for_data.ipynb b/examples/utils/functions_for_data.ipynb new file mode 100644 index 0000000..f375dff --- /dev/null +++ b/examples/utils/functions_for_data.ipynb @@ -0,0 +1,2719 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialization, class definition, and declaration.\n", + "\n", + "import os\n", + "import math\n", + "from obspy import UTCDateTime\n", + "import numpy as np\n", + "import copy\n", + "\n", + "class Event(): # class of earthquake\n", + " def __init__(self):\n", + " self.name = \"nan\" # evname1 Earthquake name, recommended as \"earthquake\".\n", + " self.id = -1\n", + " self.lat = 0.0\n", + " self.lon = 0.0\n", + " self.dep = 0.0\n", + " self.mag = 0.0\n", + " self.ortime = UTCDateTime(1999,1,1,0,0,0)\n", + " self.Nt = 0 # Number of the absolute traveltime of earthquake\n", + " self.Ncs_dt = 0 # Number of the commmon source differential traveltime of earthquake\n", + " self.Ncr_dt = 0 # Number of the commmon receiver differential traveltime of earthquake\n", + " self.t = {} # stname1+phase -> (stname1, phase, time, data_weight)\n", + " self.cs_dt = {} # stname1 + stname2 + phase -> (stname1, stname2, phase, dif_time, data_weight)\n", + " self.cr_dt = {} # stname1 + evname2 + phase -> (stname1, evname2, phase, dif_time, data_weight)\n", + " self.azi_gap = 360.0 # the max azimuthal gap of each earthquake\n", + " self.misfit = {} # traveltime residual of the data, the difference between real data and synthetic data, used for evaluation. stname or stname1+stname2 or stname1+evname2 -> residual\n", + " self.tag = {} # additional tags for the earthquake, e.g., azi_gap, weight. (azimuthal gap, weight of the earthquake)\n", + "\n", + "class Station():\n", + " def __init__(self):\n", + " self.name = \"nan\" # stname1, recommend: network.stname\n", + " self.id = -1\n", + " self.lat = 0.0\n", + " self.lon = 0.0\n", + " self.ele = 0.0\n", + " self.tag = {} # additional tags for the station, e.g., wright\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: some basic auxiliary functions for processing data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: cal_dis(lat1, lon1,lat2, lon2) (in kilometers), cal_azimuth(lat1, lon1, lat2, lon2) (degree) calculate epicentral distance (km) and azimuth (degree)\n", + "\n", + "def cal_dis(lat1, lon1,lat2, lon2, R = 6371):\n", + " latitude1 = (math.pi/180)*lat1\n", + " latitude2 = (math.pi/180)*lat2\n", + " longitude1 = (math.pi/180)*lon1\n", + " longitude2= (math.pi/180)*lon2\n", + " # Therefore, the spherical distance between points A and B is:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R\n", + " # Radius of the earth\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.000001):\n", + " return 0\n", + "\n", + " d = math.acos(math.sin(latitude1)*math.sin(latitude2)+ math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))/math.pi*180\n", + " return d * 2 * math.pi * R / 360\n", + "\n", + "def cal_azimuth(lat1, lon1, lat2, lon2):\n", + " lat1_rad = lat1 * math.pi / 180\n", + " lon1_rad = lon1 * math.pi / 180\n", + " lat2_rad = lat2 * math.pi / 180\n", + " lon2_rad = lon2 * math.pi / 180\n", + "\n", + " y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad)\n", + " x = math.cos(lat1_rad) * math.sin(lat2_rad) - math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad)\n", + " brng = math.atan2(y, x) * 180 / math.pi\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.0001):\n", + " return 0\n", + " return float((brng + 360.0) % 360.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: Coordinate rotation rotate_src_rec(ev_info, st_info, theta0, phi0, psi): rotate to the new coordinate system, satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi.\n", + "# Satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi.\n", + "\n", + "import numpy as np\n", + "\n", + "RAD2DEG = 180/np.pi\n", + "DEG2RAD = np.pi/180\n", + "R_earth = 6371.0\n", + "\n", + "# Spherical coordinates to Cartesian coordinate\n", + "def rtp2xyz(r,theta,phi):\n", + " x = r * np.cos(theta*DEG2RAD) * np.cos(phi*DEG2RAD)\n", + " y = r * np.cos(theta*DEG2RAD) * np.sin(phi*DEG2RAD)\n", + " z = r * np.sin(theta*DEG2RAD)\n", + " return (x,y,z)\n", + "\n", + "# Cartesian coordinates to Spherical coordinate\n", + "def xyz2rtp(x,y,z):\n", + " # theta: -90~90; phi: -180~180\n", + " r = np.sqrt(x**2+y**2+z**2)\n", + " theta = np.arcsin(z/r)\n", + " phi = np.arcsin(y/r/np.cos(theta))\n", + "\n", + "\n", + " idx = np.where((phi > 0) & (x*y < 0))\n", + " phi[idx] = np.pi - phi[idx]\n", + " idx = np.where((phi < 0) & (x*y > 0))\n", + " phi[idx] = -np.pi - phi[idx]\n", + "\n", + "\n", + " # for i in range(phi.size):\n", + " # if(phi[i] > 0 and x[i]*y[i] < 0):\n", + " # phi[i] = np.pi - phi[i]\n", + " # if(phi[i] < 0 and x[i]*y[i] > 0):\n", + " # phi[i] = -np.pi - phi[i]\n", + "\n", + " return (r,theta*RAD2DEG,phi*RAD2DEG)\n", + "\n", + "# anti-clockwise rotation along x-axis\n", + "def rotate_x(x,y,z,theta):\n", + " new_x = x\n", + " new_y = y * np.cos(theta*DEG2RAD) + z * -np.sin(theta*DEG2RAD)\n", + " new_z = y * np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD)\n", + " return (new_x,new_y,new_z)\n", + "\n", + "# anti-clockwise rotation along y-axis\n", + "def rotate_y(x,y,z,theta):\n", + " new_x = x * np.cos(theta*DEG2RAD) + z * np.sin(theta*DEG2RAD)\n", + " new_y = y\n", + " new_z = x * -np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD)\n", + " return (new_x,new_y,new_z)\n", + "\n", + "# anti-clockwise rotation along z-axis\n", + "def rotate_z(x,y,z,theta):\n", + " new_x = x * np.cos(theta*DEG2RAD) + y * -np.sin(theta*DEG2RAD)\n", + " new_y = x * np.sin(theta*DEG2RAD) + y * np.cos(theta*DEG2RAD)\n", + " new_z = z\n", + " return (new_x,new_y,new_z)\n", + "\n", + "# spherical Rotation\n", + "\n", + "# rotate to the new coordinate, satisfying the center r0,t0,p0 -> r0,0,0 and a anticlockwise angle psi\n", + "def rtp_rotation(t,p,theta0,phi0,psi):\n", + " # step 1: r,t,p -> x,y,z\n", + " (x,y,z) = rtp2xyz(1.0,t,p)\n", + "\n", + " # step 2: anti-clockwise rotation with -phi0 along z-axis: r0,t0,p0 -> r0,t0,0\n", + " (x,y,z) = rotate_z(x,y,z,-phi0)\n", + "\n", + " # step 3: anti-clockwise rotation with theta0 along y-axis: r0,t0,0 -> r0,0,0\n", + " (x,y,z) = rotate_y(x,y,z,theta0)\n", + "\n", + " # # step 4: anti-clockwise rotation with psi along x-axis\n", + " (x,y,z) = rotate_x(x,y,z,psi)\n", + "\n", + " # step 5: x,y,z -> r,t,p\n", + " (new_r,new_t,new_p) = xyz2rtp(x,y,z)\n", + "\n", + " return (new_t,new_p)\n", + "\n", + "\n", + "def rtp_rotation_reverse(new_t,new_p,theta0,phi0,psi):\n", + " # step 1: r,t,p -> x,y,z\n", + " (x,y,z) = rtp2xyz(1.0,new_t,new_p)\n", + "\n", + " # step 2: anti-clockwise rotation with -psi along x-axis\n", + " (x,y,z) = rotate_x(x,y,z,-psi)\n", + "\n", + " # step 3: anti-clockwise rotation with -theta0 along y-axis: r0,0,0 -> r0,t0,0\n", + " (x,y,z) = rotate_y(x,y,z,-theta0)\n", + "\n", + " # step 4: anti-clockwise rotation with phi0 along z-axis: r0,t0,0 -> r0,t0,p0\n", + " (x,y,z) = rotate_z(x,y,z,phi0)\n", + "\n", + " # step 5: x,y,z -> r,t,p\n", + " (r,t,p) = xyz2rtp(x,y,z)\n", + "\n", + " return (t,p)\n", + "\n", + "def rotate_src_rec(ev_info,st_info,theta0,phi0,psi):\n", + " ev_info_rotate = {}\n", + " st_info_rotate = {}\n", + "\n", + " # rotate earthquakes\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + " ev_lat = np.array([ev.lat]); ev_lon = np.array([ev.lon])\n", + " (ev_lat,ev_lon,) = rtp_rotation(ev_lat,ev_lon,theta0,phi0,psi)\n", + " ev.lat = ev_lat[0]; ev.lon = ev_lon[0]\n", + " ev_info_rotate[key_ev] = ev\n", + "\n", + " # rotate stations\n", + " for key_st in st_info:\n", + " st = st_info[key_st]\n", + " st_lat = np.array([st.lat]); st_lon = np.array([st.lon])\n", + " (st_lat,st_lon) = rtp_rotation(st_lat,st_lon,theta0,phi0,psi)\n", + " st.lat = st_lat[0]; st.lon = st_lon[0]\n", + " st_info_rotate[key_st] = st\n", + "\n", + " return (ev_info_rotate,st_info_rotate)\n", + "\n", + "def rotate_src_rec_reverse(ev_info_rotate,st_info_rotate,theta0,phi0,psi):\n", + " ev_info = {}\n", + " st_info = {}\n", + "\n", + " # rotate earthquakes\n", + " for key_ev in ev_info_rotate:\n", + " ev = ev_info_rotate[key_ev]\n", + " ev_lat = np.array([ev.lat]); ev_lon = np.array([ev.lon])\n", + " (ev_lat,ev_lon,) = rtp_rotation_reverse(ev_lat,ev_lon,theta0,phi0,psi)\n", + " ev.lat = ev_lat[0]; ev.lon = ev_lon[0]\n", + " ev_info[key_ev] = ev\n", + "\n", + " # rotate stations\n", + " for key_st in st_info_rotate:\n", + " st = st_info_rotate[key_st]\n", + " st_lat = np.array([st.lat]); st_lon = np.array([st.lon])\n", + " (st_lat,st_lon) = rtp_rotation_reverse(st_lat,st_lon,theta0,phi0,psi)\n", + " st.lat = st_lat[0]; st.lon = st_lon[0]\n", + " st_info[key_st] = st\n", + "\n", + " return (ev_info,st_info)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# # Function: Coordinate rotation rotate_src_rec(ev_info, st_info, theta0, phi0, psi): rotate to the new coordinate system, satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi.\n", + "# # Satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi.\n", + "\n", + "# import numpy as np\n", + "\n", + "# RAD2DEG = 180/np.pi\n", + "# DEG2RAD = np.pi/180\n", + "# R_earth = 6371.0\n", + "\n", + "# # Spherical coordinates to Cartesian coordinate\n", + "# def rtp2xyz(r,theta,phi):\n", + "# x = r * np.cos(theta*DEG2RAD) * np.cos(phi*DEG2RAD)\n", + "# y = r * np.cos(theta*DEG2RAD) * np.sin(phi*DEG2RAD)\n", + "# z = r * np.sin(theta*DEG2RAD)\n", + "# return (x,y,z)\n", + "\n", + "# # Cartesian coordinates to Spherical coordinate\n", + "# def xyz2rtp(x,y,z):\n", + "# # theta: -90~90; phi: -180~180\n", + "# r = np.sqrt(x**2+y**2+z**2)\n", + "# theta = np.arcsin(z/r)\n", + "# phi = np.arcsin(y/r/np.cos(theta))\n", + "\n", + "\n", + "# if(phi > 0 and x*y < 0):\n", + "# phi = np.pi - phi\n", + "# if(phi < 0 and x*y > 0):\n", + "# phi = -np.pi - phi\n", + "\n", + "# return (r,theta*RAD2DEG,phi*RAD2DEG)\n", + "\n", + "# # anti-clockwise rotation along x-axis\n", + "# def rotate_x(x,y,z,theta):\n", + "# new_x = x\n", + "# new_y = y * np.cos(theta*DEG2RAD) + z * -np.sin(theta*DEG2RAD)\n", + "# new_z = y * np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD)\n", + "# return (new_x,new_y,new_z)\n", + "\n", + "# # anti-clockwise rotation along y-axis\n", + "# def rotate_y(x,y,z,theta):\n", + "# new_x = x * np.cos(theta*DEG2RAD) + z * np.sin(theta*DEG2RAD)\n", + "# new_y = y\n", + "# new_z = x * -np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD)\n", + "# return (new_x,new_y,new_z)\n", + "\n", + "# # anti-clockwise rotation along z-axis\n", + "# def rotate_z(x,y,z,theta):\n", + "# new_x = x * np.cos(theta*DEG2RAD) + y * -np.sin(theta*DEG2RAD)\n", + "# new_y = x * np.sin(theta*DEG2RAD) + y * np.cos(theta*DEG2RAD)\n", + "# new_z = z\n", + "# return (new_x,new_y,new_z)\n", + "\n", + "# # spherical Rotation\n", + "\n", + "# # rotate to the new coordinate, satisfying the center r0,t0,p0 -> r0,0,0 and a anticlockwise angle psi\n", + "# def rtp_rotation(t,p,theta0,phi0,psi):\n", + "# # step 1: r,t,p -> x,y,z\n", + "# (x,y,z) = rtp2xyz(1.0,t,p)\n", + "\n", + "# # step 2: anti-clockwise rotation with -phi0 along z-axis: r0,t0,p0 -> r0,t0,0\n", + "# (x,y,z) = rotate_z(x,y,z,-phi0)\n", + "\n", + "# # step 3: anti-clockwise rotation with theta0 along y-axis: r0,t0,0 -> r0,0,0\n", + "# (x,y,z) = rotate_y(x,y,z,theta0)\n", + "\n", + "# # # step 4: anti-clockwise rotation with psi along x-axis\n", + "# (x,y,z) = rotate_x(x,y,z,psi)\n", + "\n", + "# # step 5: x,y,z -> r,t,p\n", + "# (new_r,new_t,new_p) = xyz2rtp(x,y,z)\n", + "\n", + "# return (new_t,new_p)\n", + "\n", + "\n", + "# def rtp_rotation_reverse(new_t,new_p,theta0,phi0,psi):\n", + "# # step 1: r,t,p -> x,y,z\n", + "# (x,y,z) = rtp2xyz(1.0,new_t,new_p)\n", + "\n", + "# # step 2: anti-clockwise rotation with -psi along x-axis\n", + "# (x,y,z) = rotate_x(x,y,z,-psi)\n", + "\n", + "# # step 3: anti-clockwise rotation with -theta0 along y-axis: r0,0,0 -> r0,t0,0\n", + "# (x,y,z) = rotate_y(x,y,z,-theta0)\n", + "\n", + "# # step 4: anti-clockwise rotation with phi0 along z-axis: r0,t0,0 -> r0,t0,p0\n", + "# (x,y,z) = rotate_z(x,y,z,phi0)\n", + "\n", + "# # step 5: x,y,z -> r,t,p\n", + "# (r,t,p) = xyz2rtp(x,y,z)\n", + "\n", + "# return (t,p)\n", + "\n", + "# def rotate_src_rec(ev_info,st_info,theta0,phi0,psi):\n", + "# ev_info_rotate = {}\n", + "# st_info_rotate = {}\n", + "\n", + "# # rotate earthquakes\n", + "# for key_ev in ev_info:\n", + "# ev = ev_info[key_ev]\n", + "# (ev.lat,ev.lon,) = rtp_rotation(ev.lat,ev.lon,theta0,phi0,psi)\n", + "# ev_info_rotate[key_ev] = ev\n", + "\n", + "# # rotate stations\n", + "# for key_st in st_info:\n", + "# st = st_info[key_st]\n", + "# (st.lat,st.lon) = rtp_rotation(st.lat,st.lon,theta0,phi0,psi)\n", + "# st_info_rotate[key_st] = st\n", + "\n", + "# return (ev_info_rotate,st_info_rotate)\n", + "\n", + "# def rotate_src_rec_reverse(ev_info_rotate,st_info_rotate,theta0,phi0,psi):\n", + "# ev_info = {}\n", + "# st_info = {}\n", + "\n", + "# # rotate earthquakes\n", + "# for key_ev in ev_info_rotate:\n", + "# ev = ev_info_rotate[key_ev]\n", + "# (ev.lat,ev.lon) = rtp_rotation_reverse(ev.lat,ev.lon,theta0,phi0,psi)\n", + "# ev_info[key_ev] = ev\n", + "\n", + "# # rotate stations\n", + "# for key_st in st_info_rotate:\n", + "# st = st_info_rotate[key_st]\n", + "# (st.lat,st.lon) = rtp_rotation_reverse(st.lat,st.lon,theta0,phi0,psi)\n", + "# st_info[key_st] = st\n", + "\n", + "# return (ev_info,st_info)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# linear_regression(X,Y)\n", + "def linear_regression(X,Y):\n", + " slope,intercept = np.polyfit(X,Y,deg=1)\n", + " fitted_values = slope * X + intercept\n", + " residual = Y - fitted_values\n", + " SEE = np.std(residual)\n", + " return (slope,intercept,SEE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "Functions: obtain target information from ev_info and st_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [lon,lat,dep,weight] of the earthquake\n", + "def data_lon_lat_dep_wt_ev(ev_info):\n", + " lat = []\n", + " lon = []\n", + " dep = []\n", + " weight = []\n", + " for key in ev_info:\n", + " lat.append(ev_info[key].lat)\n", + " lon.append(ev_info[key].lon)\n", + " dep.append(ev_info[key].dep)\n", + " try:\n", + " weight.append(ev_info[key].tag[\"weight\"])\n", + " except:\n", + " weight.append(1.0)\n", + " return [np.array(lon),np.array(lat),np.array(dep),np.array(weight)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [lon, lat, dep, ortime] of the earthquake\n", + "def data_ev_loc(ev_info):\n", + " lat = []\n", + " lon = []\n", + " dep = []\n", + " ortime = []\n", + " for key in ev_info:\n", + " lat.append(ev_info[key].lat)\n", + " lon.append(ev_info[key].lon)\n", + " dep.append(ev_info[key].dep)\n", + " ortime.append(ev_info[key].ortime.timestamp)\n", + " return [np.array(lon),np.array(lat),np.array(dep),np.array(ortime)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [lon,lat,dep,weight] of the station\n", + "def data_lon_lat_ele_wt_st(ev_info,st_info):\n", + " names = {}\n", + " lat = []\n", + " lon = []\n", + " ele = []\n", + " weight = []\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t: # absolute traveltime data\n", + " name_st = ev_info[key_ev].t[key_t][0]\n", + " names[name_st] = name_st\n", + "\n", + " for key_t in ev_info[key_ev].cs_dt: # common source differential traveltime data\n", + " name_st = ev_info[key_ev].cs_dt[key_t][0]\n", + " names[name_st] = name_st\n", + " name_st = ev_info[key_ev].cs_dt[key_t][1]\n", + " names[name_st] = name_st\n", + "\n", + " for key_t in ev_info[key_ev].cr_dt: # common receiver differential traveltime data\n", + " name_st = ev_info[key_ev].cr_dt[key_t][0]\n", + " names[name_st] = name_st\n", + "\n", + " for name in names: # only output the station which has data\n", + " lat.append(st_info[name].lat)\n", + " lon.append(st_info[name].lon)\n", + " ele.append(st_info[name].ele)\n", + " try:\n", + " weight.append(st_info[name].tag[\"weight\"])\n", + " except:\n", + " weight.append(1.0)\n", + " return [np.array(lon),np.array(lat),np.array(ele),np.array(weight)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [dis,time] of all data\n", + "def data_dis_time(ev_info,st_info):\n", + " all_dis = []\n", + " all_time = []\n", + " for key_ev in ev_info:\n", + " lat_ev = ev_info[key_ev].lat\n", + " lon_ev = ev_info[key_ev].lon\n", + " dep_ev = ev_info[key_ev].dep\n", + " for key_t in ev_info[key_ev].t:\n", + " all_time.append(ev_info[key_ev].t[key_t][2])\n", + " lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat\n", + " lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon\n", + " ele_st = st_info[ev_info[key_ev].t[key_t][0]].ele\n", + " dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2)\n", + " all_dis.append(dis)\n", + "\n", + " return [np.array(all_dis),np.array(all_time)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [epidis,time] of all data\n", + "def data_epidis_time(ev_info,st_info):\n", + " all_dis = []\n", + " all_time = []\n", + " for key_ev in ev_info:\n", + " lat_ev = ev_info[key_ev].lat\n", + " lon_ev = ev_info[key_ev].lon\n", + " for key_t in ev_info[key_ev].t:\n", + " all_time.append(ev_info[key_ev].t[key_t][2])\n", + " lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat\n", + " lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon\n", + " dis = cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2\n", + " all_dis.append(dis)\n", + "\n", + " return [np.array(all_dis),np.array(all_time)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# function: output the [cs_dt] of all data\n", + "def data_cs_dt(ev_info):\n", + " all_time = []\n", + " for key_ev in ev_info:\n", + " for key_dt in ev_info[key_ev].cs_dt:\n", + " all_time.append(ev_info[key_ev].cs_dt[key_dt][3])\n", + "\n", + " return np.array(all_time)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: data_dis_time_phase(ev_info, st_info, phase_list) Given a list of seismic phases, output the [epicentral distance, arrival time] for each phase.\n", + "def data_dis_time_phase(ev_info,st_info,phase_list):\n", + " all_dis = {}\n", + " all_time = {}\n", + " for phase in phase_list:\n", + " all_dis[phase] = []\n", + " all_time[phase] = []\n", + "\n", + " for key_ev in ev_info:\n", + " lat_ev = ev_info[key_ev].lat\n", + " lon_ev = ev_info[key_ev].lon\n", + " dep_ev = ev_info[key_ev].dep\n", + " for key_t in ev_info[key_ev].t:\n", + " phase = key_t.split(\"+\")[1]\n", + " if (not phase in phase_list):\n", + " continue\n", + "\n", + " all_time[phase].append(ev_info[key_ev].t[key_t][2])\n", + " lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat\n", + " lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon\n", + " ele_st = st_info[ev_info[key_ev].t[key_t][0]].ele\n", + "\n", + " dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2)\n", + " all_dis[phase].append(dis)\n", + "\n", + " for phase in phase_list:\n", + " all_dis[phase] = np.array(all_dis[phase])\n", + " all_time[phase] = np.array(all_time[phase])\n", + "\n", + " return [all_dis,all_time]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: data_lon_lat_dep_wt_ev(ev_info) Outputs the lines connecting station and earthquake for traveltime data as [line_x, line_y].\n", + "\n", + "def data_line(ev_info,st_info):\n", + " line_x = []\n", + " line_y = []\n", + "\n", + " for key_ev in ev_info:\n", + " lat_ev = ev_info[key_ev].lat\n", + " lon_ev = ev_info[key_ev].lon\n", + " for key_t in ev_info[key_ev].t:\n", + " lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat\n", + " lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon\n", + "\n", + " line_x.append([lon_ev,lon_st])\n", + " line_y.append([lat_ev,lat_st])\n", + "\n", + " return [line_x,line_y]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: discard some data in ev_info and st_info based on selection criteria" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_ev_region(ev_info, lat1, lat2, lon1, lon2, dep1, dep2) Delete the earthquakes that are out of the specified region.\n", + "\n", + "def limit_ev_region(ev_info,lat_min,lat_max,lon_min,lon_max,dep_min,dep_max):\n", + " count_delete = 0\n", + "\n", + " del_key_ev = []\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + " lat = ev.lat\n", + " lon = ev.lon\n", + " dep = ev.dep\n", + "\n", + " if (lat < min(lat_min,lat_max) or lat > max(lat_min,lat_max) \\\n", + " or lon < min(lon_min,lon_max) or lon > max(lon_min,lon_max) \\\n", + " or dep < min(dep_min,dep_max) or dep > max(dep_min,dep_max)):\n", + " del_key_ev.append(key_ev)\n", + " count_delete += 1\n", + "\n", + " del_key_t = []\n", + " for key_t in ev_info[key_ev].cr_dt:\n", + " name_ev2 = ev_info[key_ev].cr_dt[key_t][1]\n", + " lat2 = ev_info[name_ev2].lat\n", + " lon2 = ev_info[name_ev2].lon\n", + " dep2 = ev_info[name_ev2].dep\n", + " if (lat2 < min(lat_min,lat_max) or lat2 > max(lat_min,lat_max) \\\n", + " or lon2 < min(lon_min,lon_max) or lon2 > max(lon_min,lon_max) \\\n", + " or dep2 < min(dep_min,dep_max) or dep2 > max(dep_min,dep_max)):\n", + "\n", + " del_key_t.append(key_t)\n", + "\n", + " for key_t in del_key_t:\n", + " del ev_info[key_ev].cr_dt[key_t]\n", + "\n", + " ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt)\n", + "\n", + " for key_ev in del_key_ev:\n", + " del ev_info[key_ev]\n", + "\n", + " print(\"delete %d events out of the region, now %d earthquakes are retained within the study region\"%(count_delete,len(ev_info)))\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_st_region(ev_info, st_info, lat1, lat2, lon1, lon2) Delete the stations that are out of the specified region.\n", + "\n", + "def limit_st_region(ev_info,st_info,lat1,lat2,lon1,lon2):\n", + "\n", + " for key_ev in ev_info:\n", + " # delete the station out of the region in the absolute traveltime data\n", + " del_key_t = []\n", + " for key_t in ev_info[key_ev].t:\n", + " name_st = ev_info[key_ev].t[key_t][0]\n", + " lat_st = st_info[name_st].lat\n", + " lon_st = st_info[name_st].lon\n", + " if(lat_st < min(lat1,lat2) or lat_st > max(lat1,lat2) or lon_st < min(lon1,lon2) or lon_st > max(lon1,lon2)):\n", + " del_key_t.append(key_t)\n", + "\n", + " for key_t in del_key_t:\n", + " del ev_info[key_ev].t[key_t]\n", + " ev_info[key_ev].Nt = len(ev_info[key_ev].t)\n", + "\n", + " # delete the station out of the region in the common source differential traveltime data\n", + " del_key_t = []\n", + " for key_t in ev_info[key_ev].cs_dt:\n", + " name_st1 = ev_info[key_ev].cs_dt[key_t][0]\n", + " lat_st1 = st_info[name_st1].lat\n", + " lon_st1 = st_info[name_st1].lon\n", + "\n", + " name_st2 = ev_info[key_ev].cs_dt[key_t][1]\n", + " lat_st2 = st_info[name_st2].lat\n", + " lon_st2 = st_info[name_st2].lon\n", + " if(lat_st1 < min(lat1,lat2) or lat_st1 > max(lat1,lat2) or lon_st1 < min(lon1,lon2) or lon_st1 > max(lon1,lon2) \\\n", + " or lat_st2 < min(lat1,lat2) or lat_st2 > max(lat1,lat2) or lon_st2 < min(lon1,lon2) or lon_st2 > max(lon1,lon2)):\n", + " del_key_t.append(key_t)\n", + "\n", + " for key_t in del_key_t:\n", + " del ev_info[key_ev].cs_dt[key_t]\n", + " ev_info[key_ev].Ncs_dt = len(ev_info[key_ev].cs_dt)\n", + "\n", + " # delete the station out of the region in the common receiver differential traveltime data\n", + " del_key_st = []\n", + " for key_t in ev_info[key_ev].cr_dt:\n", + " name_st = ev_info[key_ev].cr_dt[key_t][0]\n", + " lat_st = st_info[name_st].lat\n", + " lon_st = st_info[name_st].lon\n", + " if(lat_st < min(lat1,lat2) or lat_st > max(lat1,lat2) or lon_st < min(lon1,lon2) or lon_st > max(lon1,lon2)):\n", + " del_key_st.append(key_t)\n", + "\n", + " for key_t in del_key_st:\n", + " del ev_info[key_ev].cr_dt[key_t]\n", + " ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt)\n", + "\n", + " return ev_info\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_epi_dis(ev_info, st_info, epi_dis1, epi_dis2) Delete the stations with epicentral distance in the range from epi_dis1 to epi_dis2.\n", + "\n", + "def limit_epi_dis(ev_info,st_info,epi_dis1,epi_dis2):\n", + "\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + "\n", + " lat_ev = ev.lat\n", + " lon_ev = ev.lon\n", + "\n", + " # delete the absolute traveltime data\n", + " del_key_t = []\n", + " for key_t in ev.t:\n", + " stname = ev.t[key_t][0]\n", + " lat_st = st_info[stname].lat\n", + " lon_st = st_info[stname].lon\n", + " dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st)\n", + " if (dis > epi_dis1 and dis < epi_dis2):\n", + " del_key_t.append(key_t)\n", + " for key_t in del_key_t:\n", + " del ev.t[key_t]\n", + " ev.Nt = len(ev.t)\n", + "\n", + " # delete the common source differential traveltime data\n", + " del_key_t = []\n", + " for key_t in ev.cs_dt:\n", + " for i in range(2):\n", + " stname = ev.t[key_t][i]\n", + " lat_st = st_info[stname].lat\n", + " lon_st = st_info[stname].lon\n", + " dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st)\n", + "\n", + " if (dis > epi_dis1 and dis < epi_dis2):\n", + " del_key_t.append(key_t)\n", + " break\n", + " for key_t in del_key_t:\n", + " del ev.cs_dt[key_t]\n", + " ev.Ncs_dt = len(ev.cs_dt)\n", + "\n", + " # delete the common receiver differential traveltime data\n", + " del_key_t = []\n", + " for key_t in ev.cr_dt:\n", + " stname = ev.cr_dt[key_t][0]\n", + " lat_st = st_info[stname].lat\n", + " lon_st = st_info[stname].lon\n", + " dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st)\n", + " if (dis > epi_dis1 and dis < epi_dis2):\n", + " del_key_t.append(key_t)\n", + "\n", + " lat_ev2 = ev_info[ev.cr_dt[key_t][1]].lat\n", + " lon_ev2 = ev_info[ev.cr_dt[key_t][1]].lon\n", + " dis = cal_dis(lat_ev2, lon_ev2, lat_st, lon_st)\n", + " if (dis > epi_dis1 and dis < epi_dis2):\n", + " del_key_t.append(key_t)\n", + "\n", + " for key_t in del_key_t:\n", + " del ev.cr_dt[key_t]\n", + " ev.Ncr_dt = len(ev.cr_dt)\n", + "\n", + "\n", + " ev_info[key_ev] = ev\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_data_residual(ev_info, st_info, slope, intercept, up, down) Limit the data within the range defined by the line time = dis * slope + intercept and the bounds up and down.\n", + "\n", + "# remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up\n", + "def limit_data_residual(ev_info,st_info,slope,intercept,up,down):\n", + " for key_ev in ev_info:\n", + " lat_ev = ev_info[key_ev].lat\n", + " lon_ev = ev_info[key_ev].lon\n", + " dep_ev = ev_info[key_ev].dep\n", + " del_key_t = []\n", + " for key_t in ev_info[key_ev].t:\n", + " name_st = ev_info[key_ev].t[key_t][0]\n", + " lat_st = st_info[name_st].lat\n", + " lon_st = st_info[name_st].lon\n", + " ele_st = st_info[name_st].ele\n", + " dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2)\n", + " residual = ev_info[key_ev].t[key_t][2] - (slope*dis+intercept)\n", + "\n", + " if (residual < down or residual > up):\n", + " del_key_t.append(key_t)\n", + "\n", + " for key_t in del_key_t:\n", + " del ev_info[key_ev].t[key_t]\n", + "\n", + " for key_ev in ev_info:\n", + " ev_info[key_ev].Nt = len(ev_info[key_ev].t)\n", + "\n", + " return ev_info\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_data_phase(ev_info, phase_list) Retain only the specified seismic phases.\n", + "\n", + "def limit_data_phase(ev_info,phase_list):\n", + " for key_ev in ev_info:\n", + " # process the absolute traveltime data\n", + " new_t = {}\n", + " for key_t in ev_info[key_ev].t:\n", + " phase = ev_info[key_ev].t[key_t][1]\n", + " if phase in phase_list:\n", + " new_t[key_t] = ev_info[key_ev].t[key_t]\n", + "\n", + " ev_info[key_ev].t = new_t\n", + " ev_info[key_ev].Nt = len(ev_info[key_ev].t)\n", + "\n", + " # process the common source differential traveltime data\n", + " new_t = {}\n", + " for key_t in ev_info[key_ev].cs_dt:\n", + " phase = ev_info[key_ev].cs_dt[key_t][2]\n", + " phase = phase.split(\",\")[0]\n", + " if phase in phase_list:\n", + " new_t[key_t] = ev_info[key_ev].cs_dt[key_t]\n", + "\n", + " ev_info[key_ev].cs_dt = new_t\n", + " ev_info[key_ev].Ncs_dt = len(ev_info[key_ev].cs_dt)\n", + "\n", + " # process the common receiver differential traveltime data\n", + " new_t = {}\n", + " for key_t in ev_info[key_ev].cr_dt:\n", + " phase = ev_info[key_ev].cr_dt[key_t][2]\n", + " phase = phase.split(\",\")[0]\n", + " if phase in phase_list:\n", + " new_t[key_t] = ev_info[key_ev].cr_dt[key_t]\n", + "\n", + " ev_info[key_ev].cr_dt = new_t\n", + " ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt)\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_min_Nt(min_Nt_thd, ev_info) Delete the earthquakes with the number of data less than min_Nt_thd.\n", + "\n", + "def limit_min_Nt(min_Nt_thd, ev_info):\n", + " Nev = len(ev_info)\n", + "\n", + " del_key_ev = []\n", + " for key_ev in ev_info:\n", + " if(ev_info[key_ev].Nt < min_Nt_thd):\n", + " del_key_ev.append(key_ev)\n", + "\n", + " for key_ev in del_key_ev:\n", + " del ev_info[key_ev]\n", + "\n", + " print(\"Original data set has %d earthquakes, %d earthquakes are deleted, %d earthquakes are retained\"%(Nev,len(del_key_ev),len(ev_info)))\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_azi_gap(gap_thd) Calculate the azimuthal gap for all events and delete events with a gap greater than gap_thd.\n", + "def limit_azi_gap(gap_thd,ev_info,st_info):\n", + " Nev = len(ev_info)\n", + "\n", + " del_key_ev = []\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + " gap = cal_azi_gap(ev,st_info)\n", + " if (gap > gap_thd):\n", + " del_key_ev.append(key_ev)\n", + " else:\n", + " ev_info[key_ev].tag[\"azi_gap\"] = gap\n", + " for key_ev in del_key_ev:\n", + " del ev_info[key_ev]\n", + "\n", + " print(\"Original data set has %d earthquakes, %d earthquakes are deleted, %d earthquakes are retained\"%(Nev,len(del_key_ev),len(ev_info)))\n", + "\n", + " return ev_info\n", + "\n", + "# Function: cal_azi_gap(ev, st_info) Calculate the azimuthal gap of a single earthquake.\n", + "def cal_azi_gap(ev,st_info):\n", + " azi_all = []\n", + " lat_ev = ev.lat\n", + " lon_ev = ev.lon\n", + " stlist = {}\n", + " for key in ev.t:\n", + " stname = ev.t[key][0]\n", + " if (not stname in stlist):\n", + " lat_st = st_info[stname].lat\n", + " lon_st = st_info[stname].lon\n", + " azi = cal_azimuth(lat_ev, lon_ev, lat_st, lon_st)\n", + " azi_all.append(azi)\n", + " stlist[stname] = 1\n", + "\n", + " azi_all.sort()\n", + " if(len(azi_all) < 2):\n", + " return 360.0\n", + " else:\n", + " gap = 0.0\n", + " for i in range(len(azi_all)-1):\n", + " gap = max(gap,azi_all[i+1] - azi_all[i])\n", + " gap = max(gap,azi_all[0] + 360 - azi_all[-1])\n", + " return gap\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: limit_earthquake_decluster_Nt(ev_info, dlat, dlon, ddep, Top_N) Divide the region into several subdomains, sort by the number of arrival times, and retain only the top Top_N earthquakes with the most arrival times in each box.\n", + "# option 3, declustering. Divide the region into several subdomains, retain the Top N earthquakes in terms of the number of arrival times in each subdomain.\n", + "def limit_earthquake_decluster_Nt(ev_info,dlat,dlon,ddep,Top_N):\n", + " # subdivide earthquakes into different subdomains\n", + " [ev_info,tag2name] = tag_event_cluster(dlat,dlon,ddep,ev_info)\n", + "\n", + " # sort earthquakes in the same subdomain\n", + " # Sort the quality of earthquakes within each tag based on the number of arrivals.\n", + " tag2name = sort_cluster_Nt(ev_info, tag2name)\n", + "\n", + " # only retain Top_N earthquakes in each subdomain\n", + " # Within each tag, prioritize selecting the top Top_N earthquakes.\n", + " [ev_info,tag2name] = limit_decluster(ev_info, tag2name,Top_N)\n", + "\n", + " return ev_info\n", + "\n", + "\n", + "\n", + "# Function: tag_event_cluster(size_lat, size_lon, size_dep, ev_info) Subdivide the study area, assign each earthquake to a subregion, and place it in a tag.\n", + "def tag_event_cluster(size_lat,size_lon,size_dep,ev_info):\n", + " tag2name = {}\n", + " for key_ev in ev_info:\n", + " name = ev_info[key_ev].name\n", + " lat = ev_info[key_ev].lat\n", + " lon = ev_info[key_ev].lon\n", + " dep = ev_info[key_ev].dep\n", + " tag = \"%d_%d_%d\"%(math.floor(lon/size_lon),math.floor(lat/size_lat),math.floor(dep/size_dep))\n", + " ev_info[key_ev].tag[\"cluster\"] = tag\n", + "\n", + " if (tag in tag2name):\n", + " tag2name[tag].append(name)\n", + " else:\n", + " tag2name[tag] = []\n", + " tag2name[tag].append(name)\n", + "\n", + " return [ev_info,tag2name]\n", + "\n", + "# Function: sort_cluster_Nt(ev_info, tag2name) Sort the quality of earthquakes within each tag based on the number of arrivals.\n", + "def sort_cluster_Nt(ev_info, tag2name):\n", + " for key_tag in tag2name:\n", + " names_ev = tag2name[key_tag]\n", + " Nt = []\n", + " for key_ev in names_ev:\n", + " Nt.append(len(ev_info[key_ev].t))\n", + "\n", + " # Sort the earthquakes within each tag based on the number of arrivals.\n", + " sorted_Nt = sorted(enumerate(Nt), key=lambda x: x[1], reverse=True)\n", + " tag2name[key_tag] = []\n", + " for index, Nt in sorted_Nt:\n", + " tag2name[key_tag].append(names_ev[index])\n", + "\n", + " return tag2name\n", + "\n", + "# Function: limit_cluster(ev_info, tag2name, Max) Prioritize selecting the top Max earthquakes within each tag.\n", + "def limit_decluster(ev_info, tag2name, Max):\n", + " del_key_ev = []\n", + " for key_tag in tag2name:\n", + " names_ev = tag2name[key_tag]\n", + "\n", + " if(len(names_ev) > Max):\n", + " tag2name[key_tag] = names_ev[0:Max]\n", + " for i in range(Max,len(names_ev)): # Delete earthquakes that exceed the threshold in the sorted list.\n", + " del_key_ev.append(names_ev[i])\n", + "\n", + " for key_ev in del_key_ev:\n", + " del ev_info[key_ev]\n", + "\n", + " return [ev_info,tag2name]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: assign weights to earthquakes, stations, and data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: box_weighting_ev(ev_info, dlat, dlon, ddep) Assign box-weight to the earthquakes.\n", + "def box_weighting_ev(ev_info,dlon,dlat,ddep):\n", + "\n", + " # categorization\n", + " distribute = {}\n", + " all_tag_wt = {}\n", + "\n", + " for key_ev in ev_info:\n", + " lat_id = math.floor((ev_info[key_ev].lat) / dlat)\n", + " lon_id = math.floor((ev_info[key_ev].lon) / dlon)\n", + " dep_id = math.floor((ev_info[key_ev].dep) / ddep)\n", + "\n", + " tag = '%d_%d_%d'%(lat_id,lon_id,dep_id)\n", + " if (tag in distribute):\n", + " distribute[tag] += 1\n", + " else:\n", + " distribute[tag] = 1\n", + "\n", + " max_weight = 0\n", + " for tag in distribute:\n", + " all_tag_wt[tag] = 1.0/math.sqrt(distribute[tag])\n", + " max_weight = max(max_weight,all_tag_wt[tag])\n", + "\n", + " for key_ev in ev_info:\n", + " lat_id = math.floor((ev_info[key_ev].lat) / dlat)\n", + " lon_id = math.floor((ev_info[key_ev].lon) / dlon)\n", + " dep_id = math.floor((ev_info[key_ev].dep) / ddep)\n", + "\n", + " tag = '%d_%d_%d'%(lat_id,lon_id,dep_id)\n", + "\n", + " ev_info[key_ev].tag[\"weight\"] = all_tag_wt[tag]/max_weight\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: geographical_weighting_ev_rough(ev_info, dlat, dlon, ddep) Assign geographical weighting to the earthquakes roughly.\n", + "def geographical_weighting_ev_rough(ev_info,dlat,dlon,ddep,coefficient = 0.5):\n", + "\n", + " # categorization\n", + " distribute = {}\n", + " all_tag_wt = {}\n", + "\n", + " for key_ev in ev_info:\n", + " lat_id = int(ev_info[key_ev].lat/dlat)\n", + " lon_id = int(ev_info[key_ev].lon/dlat)\n", + " dep_id = int(ev_info[key_ev].dep/ddep)\n", + "\n", + "\n", + " tag = '%d_%d_%d'%(lat_id,lon_id,dep_id)\n", + " if (tag in distribute):\n", + " distribute[tag] += 1\n", + " else:\n", + " distribute[tag] = 1\n", + "\n", + " # Calculate the weight of each category.\n", + " delta0 = 0\n", + " for tag1 in distribute:\n", + " tmp1 = tag1.split('_')\n", + " # evlat1 = float(tmp1[0])*dlat; evlon1 = float(tmp1[1])*dlon; evdep1 = float(tmp1[2])*ddep\n", + "\n", + " for tag2 in distribute:\n", + " tmp2 = tag2.split('_')\n", + " # evlat2 = float(tmp2[0])*dlat; evlon2 = float(tmp2[1])*dlon; evdep2 = float(tmp2[2])*ddep\n", + "\n", + " # distance of id\n", + " delta_tp = math.sqrt((int(tmp1[0]) - int(tmp2[0]))**2 + (int(tmp1[1]) - int(tmp2[1]))**2 + (int(tmp1[2]) - int(tmp2[2]))**2)\n", + " delta0 = delta0 + distribute[tag1] * distribute[tag2] * delta_tp\n", + "\n", + " delta0 = delta0/(len(ev_info)**2) * coefficient\n", + "\n", + " max_weight = 0.0\n", + " for tag1 in distribute:\n", + " tmp1 = tag1.split('_')\n", + " # evlat1 = float(tmp1[0])*dlat; evlon1 = float(tmp1[1])*dlon; evdep1 = float(tmp1[2])*ddep\n", + "\n", + " weight = 0\n", + " for tag2 in distribute:\n", + " tmp2 = tag2.split('_')\n", + " # evlat2 = float(tmp2[0])*dlat; evlon2 = float(tmp2[1])*dlon; evdep2 = float(tmp2[2])*ddep\n", + "\n", + " delta_tp = math.sqrt((int(tmp1[0]) - int(tmp2[0]))**2 + (int(tmp1[1]) - int(tmp2[1]))**2 + (int(tmp1[2]) - int(tmp2[2]))**2)\n", + " weight = weight + math.exp(-(delta_tp/delta0)**2) * distribute[tag2]\n", + "\n", + " all_tag_wt[tag1] = (1.0/weight)\n", + " max_weight = max(max_weight,1.0/weight)\n", + "\n", + " # Assign weights to each earthquake based on its tag.\n", + " for key_ev in ev_info:\n", + " lat_id = int(ev_info[key_ev].lat/dlat)\n", + " lon_id = int(ev_info[key_ev].lon/dlon)\n", + " dep_id = int(ev_info[key_ev].dep/ddep)\n", + "\n", + " tag = '%d_%d_%d'%(lat_id,lon_id,dep_id)\n", + "\n", + " ev_info[key_ev].tag[\"weight\"] = all_tag_wt[tag]/max_weight\n", + " return ev_info\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: box_weighting_st(ev_info, st_info, dlat, dlon) Assign geographical weighting to the stations roughly.\n", + "def box_weighting_st(ev_info,st_info,dlon,dlat):\n", + "\n", + " [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info)\n", + "\n", + " # Integrate all involved stations.\n", + " wt_st = {}\n", + " name_st = {}\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t:\n", + " name_rec = ev_info[key_ev].t[key_t][0]\n", + " wt_st[name_rec] = -1.0\n", + " name_st[name_rec] = 1\n", + "\n", + " # categorization\n", + " distribute = {}\n", + " all_tag_wt = {}\n", + "\n", + " # Count the number of stations in each subdomain.\n", + " for key_st in name_st:\n", + " lat_id = math.floor((st_info[key_st].lat) / dlat)\n", + " lon_id = math.floor((st_info[key_st].lon) / dlon)\n", + "\n", + " tag = '%d_%d'%(lat_id,lon_id)\n", + " if (tag in distribute):\n", + " distribute[tag] += 1\n", + " else:\n", + " distribute[tag] = 1\n", + "\n", + " max_weight = 0\n", + " for tag in distribute:\n", + " all_tag_wt[tag] = 1.0/math.sqrt(distribute[tag])\n", + " max_weight = max(max_weight,all_tag_wt[tag])\n", + "\n", + " # Assign weights to each station based on its tag.\n", + " for key_st in name_st:\n", + " lat_id = math.floor((st_info[key_st].lat) / dlat)\n", + " lon_id = math.floor((st_info[key_st].lon) / dlon)\n", + " tag = '%d_%d'%(lat_id,lon_id)\n", + " wt_st[key_st] = all_tag_wt[tag]/max_weight\n", + "\n", + " # modify weight tag in st_info\n", + " for key_t in wt_st:\n", + " st_info[key_t].tag[\"weight\"] = wt_st[key_t]\n", + "\n", + " # modify weight of abs data ev_info\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t:\n", + " name_rec = ev_info[key_ev].t[key_t][0]\n", + " ev_info[key_ev].t[key_t][3] = wt_st[name_rec]\n", + "\n", + " return [ev_info,st_info]\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: geographical_weighting_st(ev_info,st_info) Assign geographical weighting to the stations roughly.\n", + "def geographical_weighting_st(ev_info,st_info,coefficient = 0.5):\n", + "\n", + " # Integrate all involved stations.\n", + " wt_st = {}\n", + " name_st = {}\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t:\n", + " name_rec = ev_info[key_ev].t[key_t][0]\n", + " wt_st[name_rec] = -1.0\n", + " name_st[name_rec] = 1\n", + "\n", + " # Calculate the weight of each station.\n", + " delta0 = 0\n", + " for key_st1 in name_st:\n", + " stlat1 = st_info[key_st1].lat\n", + " stlon1 = st_info[key_st1].lon\n", + "\n", + " for key_st2 in name_st:\n", + " stlat2 = st_info[key_st2].lat\n", + " stlon2 = st_info[key_st2].lon\n", + "\n", + " delta_tp = cal_dis(stlat1,stlon1,stlat2,stlon2)\n", + " delta0 = delta0 + delta_tp\n", + "\n", + " delta0 = delta0/(len(wt_st)**2)*coefficient\n", + "\n", + " max_weight = 0.0\n", + " for key_st1 in name_st:\n", + " stlat1 = st_info[key_st1].lat\n", + " stlon1 = st_info[key_st1].lon\n", + "\n", + " weight = 0\n", + " for key_st2 in name_st:\n", + " stlat2 = st_info[key_st2].lat\n", + " stlon2 = st_info[key_st2].lon\n", + "\n", + " delta_tp = cal_dis(stlat1,stlon1,stlat2,stlon2)\n", + " weight = weight + math.exp(-(delta_tp/delta0)**2)\n", + "\n", + " wt_st[key_st1] = (1.0/weight)\n", + " max_weight = max(max_weight,1.0/weight)\n", + "\n", + " for key_st1 in wt_st:\n", + " wt_st[key_st1] = wt_st[key_st1]/max_weight\n", + "\n", + " # Add weight to each data point in the earthquakes.\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t:\n", + " name_rec = ev_info[key_ev].t[key_t][0]\n", + " if (not name_rec in wt_st):\n", + " ValueError(\"The station of the data is not in the calculation list\")\n", + "\n", + " if (len(ev_info[key_ev].t[key_t])==3):\n", + " ev_info[key_ev].t[key_t].append(wt_st[name_rec])\n", + " elif (len(ev_info[key_ev].t[key_t])==4):\n", + " ev_info[key_ev].t[key_t][3] = wt_st[name_rec]\n", + " else:\n", + " ValueError(\"Error in the weight information of the absolute traveltime data\")\n", + "\n", + " # modify weight tag in st_info\n", + " for key_t in wt_st:\n", + " st_info[key_t].tag[\"weight\"] = wt_st[key_t]\n", + "\n", + " # modify weight of abs data ev_info\n", + " for key_ev in ev_info:\n", + " for key_t in ev_info[key_ev].t:\n", + " name_rec = ev_info[key_ev].t[key_t][0]\n", + " ev_info[key_ev].t[key_t][3] = wt_st[name_rec]\n", + "\n", + " return [ev_info,st_info]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Function: add noise into data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function:assign_gaussian_noise():\n", + "def assign_gaussian_noise(ev_info,sigma):\n", + "\n", + " # Record which seismic phases correspond to each station.\n", + " st2phase = {} # Station name -> [Keys of absolute arrival time data related to this station]\n", + "\n", + "\n", + " for key_ev in ev_info:\n", + " # Absolute arrival time noise\n", + " for key_t in ev_info[key_ev].t:\n", + " stname = ev_info[key_ev].t[key_t][0]\n", + " ev_info[key_ev].t[key_t][2] = ev_info[key_ev].t[key_t][2] + np.random.normal(0,sigma)\n", + " if(stname in st2phase):\n", + " st2phase[stname].append(key_t)\n", + " else:\n", + " st2phase[stname] = [key_t]\n", + "\n", + " for key_ev in ev_info:\n", + " # Double-difference arrival time noise\n", + " for key_dt in ev_info[key_ev].cs_dt:\n", + " stname1 = ev_info[key_ev].cs_dt[key_dt][0]\n", + " stname2 = ev_info[key_ev].cs_dt[key_dt][1]\n", + " t1 = -999\n", + " t2 = -999\n", + " # Search for the arrival time of the data.\n", + " if (stname1 in st2phase):\n", + " for key_t in st2phase[stname1]:\n", + " if (key_t in ev_info[key_ev].t):\n", + " t1 = ev_info[key_ev].t[key_t][2]\n", + " break\n", + " if (stname2 in st2phase):\n", + " for key_t in st2phase[stname2]:\n", + " if (key_t in ev_info[key_ev].t):\n", + " t2 = ev_info[key_ev].t[key_t][2]\n", + " break\n", + "\n", + " if (t1 == -999 or t2 == -999):\n", + " # If there is no absolute arrival time data, the double-difference data residuals increase by a factor of sqrt(2) in noise.\n", + " ev_info[key_ev].cs_dt[key_dt][3] = ev_info[key_ev].cs_dt[key_dt][3] + np.random.normal(0,sigma*np.sqrt(2))\n", + " print('no data: ', key_ev, key_dt)\n", + " else:\n", + " # If there is absolute arrival time data, the double-difference data is obtained by subtraction.\n", + " ev_info[key_ev].cs_dt[key_dt][3] = t1 - t2\n", + "\n", + " # Common station double-difference arrival time\n", + " for key_dt in ev_info[key_ev].cr_dt:\n", + " stname = ev_info[key_ev].cr_dt[key_dt][0]\n", + " key_ev2 = ev_info[key_ev].cr_dt[key_dt][1]\n", + "\n", + " t1 = -999\n", + " t2 = -999\n", + " # Search for the arrival time of the data.\n", + " if (stname in st2phase):\n", + " for key_t in st2phase[stname]:\n", + " if (key_t in ev_info[key_ev].t):\n", + " t1 = ev_info[key_ev].t[key_t][2]\n", + " break\n", + " else:\n", + " print('not found 1: ', key_ev, key_t)\n", + "\n", + " for key_t in st2phase[stname]:\n", + " if (key_t in ev_info[key_ev2].t):\n", + " t2 = ev_info[key_ev2].t[key_t][2]\n", + " break\n", + " else:\n", + " print('not found 2: ', key_ev, key_t)\n", + "\n", + " if (t1 == -999 or t2 == -999):\n", + " # If there is no absolute arrival time data, the double-difference data residuals increase by a factor of sqrt(2) in noise.\n", + " ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] + np.random.normal(0,sigma*np.sqrt(2))\n", + " print('no data: ', key_ev, key_dt)\n", + " else:\n", + " # If there is absolute arrival time data, the double-difference data is obtained by subtraction.\n", + " ev_info[key_ev].cr_dt[key_dt][3] = t1 - t2\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function:assign_uniform_noise_to_ev():\n", + "def assign_uniform_noise_to_ev(ev_info, range_lat, range_lon, range_dep, range_time):\n", + "\n", + " # Loop through all earthquakes and assign noise to them.\n", + " ev_noise = {} # Name of the earthquake -> noise of [lat,lon,dep,ortime]\n", + " # loop list of earthquakes\n", + " for key_ev in ev_info:\n", + " evname = key_ev\n", + " if (evname in ev_noise):\n", + " print(\"error: repeated earthquake name\")\n", + " exit()\n", + " else:\n", + " # generate noise\n", + " ev_noise[evname] = np.random.uniform(-1,1,4) * np.array([range_lat,range_lon,range_dep,range_time])\n", + "\n", + " # Add noise to each data point.\n", + " for key_ev in ev_info:\n", + "\n", + " # Absolute arrival time noise\n", + " for key_t in ev_info[key_ev].t:\n", + "\n", + " ev_info[key_ev].t[key_t][2] = ev_info[key_ev].t[key_t][2] - ev_noise[key_ev][3]\n", + "\n", + "\n", + " # Double-difference arrival time noise (double-difference arrival time remains unchanged)\n", + "\n", + " # Common station double-difference arrival time\n", + " for key_dt in ev_info[key_ev].cr_dt:\n", + " key_ev2 = ev_info[key_ev].cr_dt[key_dt][1]\n", + "\n", + " if (key_ev2 in ev_noise):\n", + " ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] - ev_noise[key_ev][3] + ev_noise[key_ev2][3]\n", + " else:\n", + " print(\"earthquake %s is not included in ev_list\"%(key_ev2))\n", + " ev_noise[key_ev2] = np.random.uniform(-1,1,4) * np.array([range_lat,range_lon,range_dep,range_time])\n", + " ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] - ev_noise[key_ev][3] + ev_noise[key_ev2][3]\n", + "\n", + "\n", + " # Add noise to each earthquake.\n", + " for key_ev in ev_noise:\n", + " ev_info[key_ev].lat = ev_info[key_ev].lat + ev_noise[key_ev][0]\n", + " ev_info[key_ev].lon = ev_info[key_ev].lon + ev_noise[key_ev][1]\n", + " ev_info[key_ev].dep = abs(ev_info[key_ev].dep + ev_noise[key_ev][2])\n", + " ev_info[key_ev].ortime = ev_info[key_ev].ortime + ev_noise[key_ev][3]\n", + "\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: generate differential traveltime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: generate_cs_dif(ev_info, st_info, dis_thd, azi_thd) Generate double-difference arrival times from absolute arrival times, with inter-station distance less than dis_thd and azimuthal difference less than azi_thd.\n", + "# function: generate common source differential traveltime data from absolute traveltime data, the stations separation is less than dis_thd, the azimuth difference is less than azi_thd\n", + "def generate_cs_dif(ev_info,st_info,dis_thd,azi_thd):\n", + " count_t = 0\n", + " count_cs_dt = 0\n", + "\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + "\n", + " lat_ev = ev.lat\n", + " lon_ev = ev.lon\n", + "\n", + " # traverse all arrival times\n", + " name_st_list = [] # names of stations\n", + " t_list = [] # traveltime\n", + " wt_list = [] # weight\n", + " for key_t in ev.t:\n", + " name_st_list.append(ev.t[key_t][0])\n", + " t_list.append(ev.t[key_t][2])\n", + " wt_list.append(ev.t[key_t][3])\n", + " count_t += 1\n", + "\n", + " # search for possible double-difference arrival times\n", + " for id_st1 in range(len(name_st_list)-1):\n", + " name_st1 = name_st_list[id_st1]\n", + " lat_st1 = st_info[name_st1].lat\n", + " lon_st1 = st_info[name_st1].lon\n", + " t_st1 = t_list[id_st1]\n", + " wt_st1 = wt_list[id_st1]\n", + "\n", + " for id_st2 in range(id_st1+1,len(name_st_list)):\n", + " name_st2 = name_st_list[id_st2]\n", + " lat_st2 = st_info[name_st2].lat\n", + " lon_st2 = st_info[name_st2].lon\n", + " t_st2 = t_list[id_st2]\n", + " wt_st2 = wt_list[id_st2]\n", + "\n", + " dis = cal_dis(lat_st1,lon_st1,lat_st2,lon_st2)\n", + " azi_st1 = cal_azimuth(lat_ev,lon_ev,lat_st1,lon_st1)\n", + " azi_st2 = cal_azimuth(lat_ev,lon_ev,lat_st2,lon_st2)\n", + "\n", + " azi_dif = abs(azi_st1 - azi_st2)\n", + "\n", + " if(dis < dis_thd and (azi_dif < azi_thd or (360-azi_dif) < azi_thd )):\n", + " ev.cs_dt[\"%s+%s+%s\"%(name_st1,name_st2,\"P,cs\")] = [name_st1,name_st2,\"P,cs\",t_st1-t_st2,(wt_st1+wt_st2)/2]\n", + " count_cs_dt += 1\n", + "\n", + " ev_info[key_ev].Ncs_dt = len(ev.cs_dt)\n", + "\n", + " print('we generate %d common source differential traveltimes from %s absolute traveltimes'%(count_cs_dt,count_t))\n", + " return ev_info\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: generate_cr_dif(ev_info, st_info, dis_thd) Generate common station double-difference arrival times from absolute arrival times, with inter-event distance less than dis_thd.\n", + "# Function: generate common receiver differential traveltime data from absolute traveltime data, the earthquake separation is less than dis_thd\n", + "def generate_cr_dif(ev_info,st_info,dis_thd,azi_thd):\n", + "\n", + " # Construct mapping:rec2src[name_ev] -> {name_st: [name_ev, name_st, t, wt]; name_st: [name_ev, name_st, t, wt]; ...}\n", + " rec2src = build_rec_src_map(ev_info,dis_thd)\n", + " print(\"rec to src map generation finished\")\n", + "\n", + " # Construct double-difference data association mapping:rec2src_pair[key_t]\n", + " rec2src_pair = build_rec_src_pair_map(rec2src)\n", + " print(\"rec to src_pair map generation finished\")\n", + "\n", + " for key_t in rec2src_pair:\n", + " name_st = key_t.split('+')[0]\n", + " lat_st = st_info[name_st].lat\n", + " lon_st = st_info[name_st].lon\n", + "\n", + " for ev_tag in rec2src_pair[key_t]:\n", + " name_ev1 = rec2src_pair[key_t][ev_tag][0]\n", + " lat_ev1 = ev_info[name_ev1].lat\n", + " lon_ev1 = ev_info[name_ev1].lon\n", + " dep_ev1 = ev_info[name_ev1].dep\n", + "\n", + " name_ev2 = rec2src_pair[key_t][ev_tag][1]\n", + " lat_ev2 = ev_info[name_ev2].lat\n", + " lon_ev2 = ev_info[name_ev2].lon\n", + " dep_ev2 = ev_info[name_ev2].dep\n", + "\n", + " dis_xy = cal_dis(lat_ev1,lon_ev1,lat_ev2,lon_ev2)\n", + " dis_z = abs(dep_ev1 - dep_ev2)\n", + " dis = math.sqrt(dis_xy**2 + dis_z**2)\n", + " if(dis > dis_thd): # limit of the distance between two earthquakes\n", + " continue\n", + "\n", + " azi1 = cal_azimuth(lat_ev1,lon_ev1,lat_st,lon_st)\n", + " azi2 = cal_azimuth(lat_ev2,lon_ev2,lat_st,lon_st)\n", + " azi_dif = abs(azi1 - azi2)\n", + "\n", + " if(azi_dif > azi_thd and (360-azi_dif) > azi_thd): # limit of the azimuth difference between two earthquakes\n", + " continue\n", + "\n", + " t_ev1 = ev_info[name_ev1].t[key_t][2]\n", + " t_ev2 = ev_info[name_ev2].t[key_t][2]\n", + " wt_ev1 = ev_info[name_ev1].t[key_t][3] * ev_info[name_ev1].tag[\"weight\"]\n", + " wt_ev2 = ev_info[name_ev2].t[key_t][3] * ev_info[name_ev2].tag[\"weight\"]\n", + " # The actual data weight is wt_ev1 + wt_ev2, but in TomoATT calculations, we need to divide it by ev_info[name_ev1].tag[\"weight\"].\n", + " wt = (wt_ev1 + wt_ev2)/2/ev_info[name_ev1].tag[\"weight\"]\n", + "\n", + " ev_info[name_ev1].cr_dt[\"%s+%s+%s\"%(name_st,name_ev2,\"P,cr\")] = [name_st,name_ev2,\"P,cr\",t_ev1-t_ev2,wt]\n", + "\n", + " # Count the number of double-difference data points.\n", + " count_cr_dt = 0\n", + " count_t = 0\n", + " for key_ev in ev_info:\n", + " ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt)\n", + " count_cr_dt += ev_info[key_ev].Ncr_dt\n", + " count_t += ev_info[key_ev].Nt\n", + "\n", + " print('we generate %d common receiver differential traveltimes from %s absolute traveltimes'%(count_cr_dt,count_t))\n", + "\n", + " return ev_info\n", + "\n", + "# Construct mapping: rec2src = {key_t: dict_tag; key_t: dict_tag; ...}\n", + "# dict_tag = {tag: list_name_ev; tag: list_name_ev; ...}\n", + "# list_name_ev = [name_ev1, name_ev2, ...]\n", + "# Assign earthquakes to different subregions based on their locations. The subregion size is dlat * dlon * ddep. When performing common station double-difference calculations, only earthquake pairs within the same subregion or adjacent subregions will be considered.\n", + "def build_rec_src_map(ev_info,dis_thd):\n", + " rec2src = {}\n", + " for key_ev in ev_info:\n", + " name_ev = ev_info[key_ev].name\n", + " lat = ev_info[key_ev].lat\n", + " lon = ev_info[key_ev].lon\n", + " dep = ev_info[key_ev].dep\n", + " tag_dep = math.floor(dep/dis_thd)\n", + " tag_lat = math.floor(lat/180*math.pi*R_earth/dis_thd)\n", + " tag_lon = math.floor(lon/180*math.pi*R_earth*math.cos(lat)/dis_thd)\n", + " tag = \"%d_%d_%d\"%(tag_lon,tag_lat,tag_dep)\n", + "\n", + "\n", + " for key_t in ev_info[key_ev].t:\n", + "\n", + " # create dictionary\n", + " if (not key_t in rec2src):\n", + " rec2src[key_t] = {tag:[]}\n", + " elif (not tag in rec2src[key_t]):\n", + " rec2src[key_t][tag] = []\n", + "\n", + " # Add data\n", + " rec2src[key_t][tag].append(name_ev)\n", + "\n", + " return rec2src\n", + "\n", + "# Function: generate_adjacent_tag(tag) Generate tags surrounding the given tag.\n", + "def generate_adjacent_tag(tag): # Excluding the tag itself.\n", + " adjacent_tag_list = []\n", + " tmp = tag.split('_')\n", + " tag_lon = int(tmp[0])\n", + " tag_lat = int(tmp[1])\n", + " tag_dep = int(tmp[2])\n", + "\n", + " for i in range(-1,2):\n", + " for j in range(-1,2):\n", + " for k in range(-1,2):\n", + " if(i == 0 and j == 0 and k == 0):\n", + " continue\n", + " adjacent_tag_list.append(\"%d_%d_%d\"%(tag_lon+i,tag_lat+j,tag_dep+k))\n", + "\n", + " return adjacent_tag_list\n", + "\n", + "\n", + "# construct mapping:rec2src_pair\n", + "def build_rec_src_pair_map(rec2src):\n", + " rec2src_pair = {}\n", + "\n", + " for key_t in rec2src:\n", + " rec2src_pair[key_t] = {}\n", + "\n", + " for tag in rec2src[key_t]:\n", + " name_ev_list1 = rec2src[key_t][tag]\n", + "\n", + " name_ev_list2 = rec2src[key_t][tag]\n", + " adjacent_tag_list = generate_adjacent_tag(tag)\n", + " for adjacent_tag in adjacent_tag_list:\n", + " if (adjacent_tag in rec2src[key_t]): # If the surrounding tag's region has earthquakes, add them to the earthquake list.\n", + " name_ev_list2 = name_ev_list2 + rec2src[key_t][adjacent_tag]\n", + "\n", + " # Find possible earthquake pairs.\n", + " for id_ev1 in range(len(name_ev_list1)-1):\n", + " name_ev1 = name_ev_list1[id_ev1]\n", + "\n", + " for id_ev2 in range(id_ev1+1,len(name_ev_list2)): # Starting from id_ev1 + 1 already excludes duplicate earthquakes within the tag.\n", + " name_ev2 = name_ev_list2[id_ev2]\n", + "\n", + " ev_tag1 = \"%s+%s\"%(name_ev1,name_ev2)\n", + " ev_tag2 = \"%s+%s\"%(name_ev2,name_ev1)\n", + "\n", + " if(ev_tag1 in rec2src_pair[key_t] or ev_tag2 in rec2src_pair[key_t]):\n", + " continue\n", + "\n", + " rec2src_pair[key_t][ev_tag1] = [name_ev1,name_ev2]\n", + "\n", + "\n", + " return rec2src_pair" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: read and write src_rec.dat file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: reorder_src(ev) Reorder the earthquake IDs. If the earthquake has no data, the ID is -999.\n", + "def reorder_src(ev_info):\n", + "\n", + " ev_id = 0\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + "\n", + " if(ev.Nt + ev.Ncs_dt + ev.Ncr_dt == 0):\n", + " ev.id = -999\n", + " else:\n", + " ev_info[key_ev].id = ev_id\n", + " ev_id += 1\n", + "\n", + " return ev_info\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: read_src_rec_file(fname) Read the src_rec.dat file.\n", + "#\n", + "def read_src_rec_file(fname):\n", + " ev_info = {}\n", + " st_info = {}\n", + "\n", + " tmp_ev_info = {}\n", + "\n", + " doc = open(fname,'r')\n", + " doc_input = doc.readlines()\n", + " doc.close()\n", + "\n", + " cc = 0\n", + " for info in doc_input:\n", + " tmp=info.split()\n", + " if (cc == 0): # event line\n", + " ev = Event()\n", + " # 1 2000 1 2 20 28 37.270 38.2843 39.0241 11.00 3.60 8 1725385\n", + " # id_ev = int(tmp[0])\n", + " ev.id = int(tmp[0])\n", + " year = int(tmp[1])\n", + " month = int(tmp[2])\n", + " day = int(tmp[3])\n", + " hour = int(tmp[4])\n", + " minute = int(tmp[5])\n", + " second = float(tmp[6])\n", + " ev.ortime = UTCDateTime(year,month,day,hour,minute,0) + second\n", + " ev.lat = float(tmp[7])\n", + " ev.lon = float(tmp[8])\n", + " ev.dep = float(tmp[9])\n", + " ev.mag = float(tmp[10])\n", + " ev.Nt = 0\n", + " ev.Ncs_dt = 0\n", + " ev.Ncr_dt = 0\n", + " ev.t = {}\n", + " ev.cs_dt = {}\n", + " ev.cr_dt = {}\n", + " ndata = int(tmp[11])\n", + " name_ev = tmp[12]\n", + " ev.name = name_ev\n", + " cc += 1\n", + " try:\n", + " ev.tag[\"weight\"] = float(tmp[13])\n", + " except:\n", + " pass\n", + "\n", + " if (ndata == 0):\n", + " cc = 0\n", + " ev_info[name_ev] = ev\n", + "\n", + " else: # data line\n", + " # 1 1 MYA 38.3261 38.4253 1050.0000 P 52.46 6.630 weight\n", + " if(len(tmp) < 10): # absolue traveltime data\n", + " name_st = tmp[2]\n", + " phase = tmp[6]\n", + " if (phase == \"PG\"):\n", + " phase = \"Pg\"\n", + " if (phase == \"PB\"):\n", + " phase = \"Pb\"\n", + " if (phase == \"PN\"):\n", + " phase = \"Pn\"\n", + "\n", + " if (not name_st in st_info):\n", + " st = Station()\n", + " st.name = name_st\n", + " st.id = float(tmp[1])\n", + " st.lat = float(tmp[3])\n", + " st.lon = float(tmp[4])\n", + " st.ele = float(tmp[5])\n", + " st_info[name_st] = st\n", + "\n", + " time = float(tmp[7])\n", + " if(len(tmp) == 9):\n", + " weight = float(tmp[8])\n", + " else:\n", + " weight = 1.0\n", + " ev.t[\"%s+%s\"%(name_st,phase)] = [name_st,phase,time,weight]\n", + " ev.Nt += 1\n", + "\n", + " else: # differential traveltime data\n", + " phase = tmp[11]\n", + " if (phase.__contains__(\"cr\")): # common receiver differential traveltime\n", + " # evid stid1 stname1 lat1 lon1 eve1 evid2 evname2 lat2 lon2 dep2 phase,cr diftime weight\n", + "\n", + " name_st1 = tmp[2]\n", + " if (not name_st1 in st_info): # add station to the station list\n", + " st = Station()\n", + " st.name = name_st1\n", + " st.id = float(tmp[1])\n", + " st.lat = float(tmp[3])\n", + " st.lon = float(tmp[4])\n", + " st.ele = float(tmp[5])\n", + " st_info[name_st1] = st\n", + "\n", + " name_ev2 = tmp[7]\n", + " # add earthquake to the temp earthquake list\n", + " ev2 = Event()\n", + " ev2.name = name_ev2\n", + " ev2.id = float(tmp[6])\n", + " ev2.lat = float(tmp[8])\n", + " ev2.lon = float(tmp[9])\n", + " ev2.dep = float(tmp[10])\n", + " tmp_ev_info[name_ev2] = ev2\n", + "\n", + "\n", + " dif_time = float(tmp[12])\n", + " if(len(tmp) == 14):\n", + " weight = float(tmp[13])\n", + " else:\n", + " weight = 1.0\n", + " ev.cr_dt[\"%s+%s+%s\"%(name_st1,name_ev2,phase)] = [name_st1,name_ev2,phase,dif_time,weight]\n", + " ev.Ncr_dt += 1\n", + "\n", + " else: # common source differential traveltime\n", + " # evid stid1 stname1 lat1 lon1 eve1 stid2 stname2 lat2 lon2 ele2 phase,cs diftime weight\n", + "\n", + " name_st1 = tmp[2]\n", + " if (not name_st1 in st_info):\n", + " st = Station()\n", + " st.name = name_st1\n", + " st.id = len(st_info)\n", + " st.lat = float(tmp[3])\n", + " st.lon = float(tmp[4])\n", + " st.ele = float(tmp[5])\n", + " st_info[name_st1] = st\n", + "\n", + " name_st2 = tmp[7]\n", + " if (not name_st2 in st_info):\n", + " st = Station()\n", + " st.name = name_st2\n", + " st.id = float(tmp[6])\n", + " st.lat = float(tmp[8])\n", + " st.lon = float(tmp[9])\n", + " st.ele = float(tmp[10])\n", + " st_info[name_st2] = st\n", + "\n", + " dif_time = float(tmp[12])\n", + " if(len(tmp) == 14):\n", + " weight = float(tmp[13])\n", + " else:\n", + " weight = 1.0\n", + " ev.cs_dt[\"%s+%s+%s\"%(name_st1,name_st2,phase)] = [name_st1,name_st2,phase,dif_time,weight]\n", + " ev.Ncs_dt += 1\n", + "\n", + " if (cc == ndata): # end of the event data\n", + " cc = 0\n", + " ev_info[name_ev] = ev\n", + " else:\n", + " cc += 1\n", + "\n", + " # Add earthquakes from the temporary earthquake list to the main earthquake list.\n", + " for key_ev in tmp_ev_info:\n", + " if (not key_ev in ev_info):\n", + " ev_info[key_ev] = tmp_ev_info[key_ev]\n", + "\n", + " return [ev_info,st_info]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: write_src_rec_file(fname, ev_info, st_info) Output the src_rec.dat file.\n", + "def write_src_rec_file(fname,ev_info,st_info):\n", + " ev_info = reorder_src(ev_info)\n", + " doc_src_rec = open(fname,'w')\n", + "\n", + " min_lat = 9999\n", + " max_lat = -9999\n", + " min_lon = 9999\n", + " max_lon = -9999\n", + " min_dep = 9999\n", + " max_dep = -9999\n", + "\n", + " record_ev = {}\n", + " record_st = {}\n", + " Nt_total = 0\n", + " Ncs_dt_total = 0\n", + " Ncr_dt_total = 0\n", + "\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + " evid = ev.id\n", + " year = ev.ortime.year\n", + " month = ev.ortime.month\n", + " day = ev.ortime.day\n", + " hour = ev.ortime.hour\n", + " minute = ev.ortime.minute\n", + " second = ev.ortime.second\n", + " msec = ev.ortime.microsecond\n", + " lat_ev = ev.lat\n", + " lon_ev = ev.lon\n", + " dep_ev = ev.dep\n", + " mag = ev.mag\n", + " ndata = ev.Nt + ev.Ncs_dt + ev.Ncr_dt\n", + " name_ev = ev.name\n", + " try:\n", + " weight_ev = ev.tag[\"weight\"]\n", + " except:\n", + " weight_ev = 1.0\n", + "\n", + " if(ndata == 0): # if the earthquake has no data, do not output it\n", + " continue\n", + "\n", + " doc_src_rec.write('%7d %6d %2d %2d %2d %2d %5.2f %9.4f %9.4f %9.4f %5.2f %7d %s %7.3f\\n'%(\\\n", + " evid,year,month,day,hour,minute,second+msec/1000000,lat_ev,lon_ev,dep_ev,mag,ndata,name_ev,weight_ev))\n", + "\n", + " min_lat = min(min_lat, lat_ev)\n", + " max_lat = max(max_lat, lat_ev)\n", + " min_lon = min(min_lon, lon_ev)\n", + " max_lon = max(max_lon, lon_ev)\n", + " min_dep = min(min_dep, dep_ev)\n", + " max_dep = max(max_dep, dep_ev)\n", + "\n", + " record_ev[name_ev] = 1 # record this earthquake\n", + " Nt_total += ev.Nt\n", + " Ncs_dt_total += ev.Ncs_dt\n", + " Ncr_dt_total += ev.Ncr_dt\n", + "\n", + " for key_t in ev.t:\n", + " data = ev.t[key_t]\n", + " st = st_info[data[0]]\n", + " stid = st.id\n", + " name_st = st.name\n", + " lat_st = st.lat\n", + " lon_st = st.lon\n", + " ele_st = st.ele\n", + " phase = data[1]\n", + " time = data[2]\n", + " try:\n", + " weight_data = data[3]\n", + " except:\n", + " weight_data = 1.0\n", + " doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \\n'%(evid,stid,name_st,lat_st,lon_st,ele_st,phase,time,weight_data))\n", + "\n", + " min_lat = min(min_lat, lat_st)\n", + " max_lat = max(max_lat, lat_st)\n", + " min_lon = min(min_lon, lon_st)\n", + " max_lon = max(max_lon, lon_st)\n", + " min_dep = min(min_dep, -ele_st/1000)\n", + " max_dep = max(max_dep, -ele_st/1000)\n", + "\n", + " record_st[name_st] = 1 # record this station\n", + "\n", + " for key_t in ev.cs_dt:\n", + " data = ev.cs_dt[key_t]\n", + " st1 = st_info[data[0]]\n", + " stid1 = st1.id\n", + " name_st1= st1.name\n", + " lat_st1 = st1.lat\n", + " lon_st1 = st1.lon\n", + " ele_st1 = st1.ele\n", + " st2 = st_info[data[1]]\n", + " stid2 = st2.id\n", + " name_st2= st2.name\n", + " lat_st2 = st2.lat\n", + " lon_st2 = st2.lon\n", + " ele_st2 = st2.ele\n", + " phase = data[2]\n", + " time = data[3]\n", + " try:\n", + " weight_data = data[4]\n", + " except:\n", + " weight_data = 1.0\n", + " doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \\n'%(\\\n", + " evid,stid1,name_st1,lat_st1,lon_st1,ele_st1,stid2,name_st2,lat_st2,lon_st2,ele_st2,phase,time,weight_data))\n", + "\n", + " min_lat = min(min_lat, lat_st1)\n", + " max_lat = max(max_lat, lat_st1)\n", + " min_lon = min(min_lon, lon_st1)\n", + " max_lon = max(max_lon, lon_st1)\n", + " min_dep = min(min_dep, -ele_st1/1000)\n", + " max_dep = max(max_dep, -ele_st1/1000)\n", + "\n", + " min_lat = min(min_lat, lat_st2)\n", + " max_lat = max(max_lat, lat_st2)\n", + " min_lon = min(min_lon, lon_st2)\n", + " max_lon = max(max_lon, lon_st2)\n", + " min_dep = min(min_dep, -ele_st2/1000)\n", + " max_dep = max(max_dep, -ele_st2/1000)\n", + "\n", + " record_st[name_st1] = 1 # record this station\n", + " record_st[name_st2] = 1 # record this station\n", + "\n", + " for key_t in ev.cr_dt:\n", + " data = ev.cr_dt[key_t]\n", + " st = st_info[data[0]]\n", + " stid = st.id\n", + " name_st = st.name\n", + " lat_st = st.lat\n", + " lon_st = st.lon\n", + " ele_st = st.ele\n", + " ev2 = ev_info[data[1]]\n", + " evid2 = ev2.id\n", + " name_ev2= ev2.name\n", + " lat_ev2 = ev2.lat\n", + " lon_ev2 = ev2.lon\n", + " dep_ev2 = ev2.dep\n", + " phase = data[2]\n", + " time = data[3]\n", + " try:\n", + " weight_data = data[4]\n", + " except:\n", + " weight_data = 1.0\n", + " doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \\n'%(\\\n", + " evid,stid,name_st,lat_st,lon_st,ele_st,evid2,name_ev2,lat_ev2,lon_ev2,dep_ev2,phase,time,weight_data))\n", + "\n", + " min_lat = min(min_lat, lat_st)\n", + " max_lat = max(max_lat, lat_st)\n", + " min_lon = min(min_lon, lon_st)\n", + " max_lon = max(max_lon, lon_st)\n", + " min_dep = min(min_dep, -ele_st/1000)\n", + " max_dep = max(max_dep, -ele_st/1000)\n", + "\n", + " min_lat = min(min_lat, lat_ev2)\n", + " max_lat = max(max_lat, lat_ev2)\n", + " min_lon = min(min_lon, lon_ev2)\n", + " max_lon = max(max_lon, lon_ev2)\n", + " min_dep = min(min_dep, dep_ev2)\n", + " max_dep = max(max_dep, dep_ev2)\n", + "\n", + " record_ev[name_ev2] = 1 # record this station\n", + " record_st[name_st] = 1 # record this station\n", + "\n", + " doc_src_rec.close()\n", + "\n", + " print(\"src_rec.dat has been outputed: %d events, %d stations, %d abs traveltime, %d cs_dif traveltime, %d cr_dif traveltime. \" \\\n", + " %(len(record_ev),len(record_st),Nt_total,Ncs_dt_total,Ncr_dt_total))\n", + " print(\"earthquake and station region, lat: %6.1f - %6.1f, lon: %6.1f - %6.1f, dep: %6.1f - %6.1f\"%(min_lat,max_lat,min_lon,max_lon,min_dep,max_dep) )\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: write_src_list_file(fname, ev_info) Output the event list file.\n", + "def write_src_list_file(fname,ev_info):\n", + " doc_ev_list = open(fname,'w')\n", + "\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + " evid = ev.id\n", + " lat_ev = ev.lat\n", + " lon_ev = ev.lon\n", + " dep_ev = ev.dep\n", + " mag = ev.mag\n", + " name_ev = ev.name\n", + " if (ev.id == -999): # if the earthquake has no data, do not output it\n", + " continue\n", + " doc_ev_list.write(\"%7d %s %s %9.4f %9.4f %9.4f %5.2f \\n\"%(evid,name_ev,ev.ortime,lat_ev,lon_ev,dep_ev,mag))\n", + " doc_ev_list.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: write_rec_list_file(fname, ev_info, st_info) Output the station list file.\n", + "def write_rec_list_file(fname,ev_info,st_info):\n", + " doc_st_list = open(fname,'w')\n", + "\n", + " st_list = {}\n", + " for key_ev in ev_info:\n", + " ev = ev_info[key_ev]\n", + "\n", + " for key_t in ev.t:\n", + " data = ev.t[key_t]\n", + " st = st_info[data[0]]\n", + " name_st = st.name\n", + " lat_st = st.lat\n", + " lon_st = st.lon\n", + " ele_st = st.ele\n", + " if(not name_st in st_list):\n", + " doc_st_list.write(\"%6s %9.4f %9.4f %10.4f \\n\"%(name_st,lat_st,lon_st,ele_st))\n", + " st_list[name_st] = 1\n", + "\n", + " for key_t in ev.cs_dt:\n", + " data = ev.cs_dt[key_t]\n", + " st1 = st_info[data[0]]\n", + " name_st1= st1.name\n", + " lat_st1 = st1.lat\n", + " lon_st1 = st1.lon\n", + " ele_st1 = st1.ele\n", + " st2 = st_info[data[0]]\n", + " name_st2= st2.name\n", + " lat_st2 = st2.lat\n", + " lon_st2 = st2.lon\n", + " ele_st2 = st2.ele\n", + " if(not name_st1 in st_list):\n", + " doc_st_list.write(\"%6s %9.4f %9.4f %10.4f \\n\"%(name_st1,lat_st1,lon_st1,ele_st1))\n", + " st_list[name_st1] = 1\n", + " if(not name_st2 in st_list):\n", + " doc_st_list.write(\"%6s %9.4f %9.4f %10.4f \\n\"%(name_st2,lat_st2,lon_st2,ele_st2))\n", + " st_list[name_st2] = 1\n", + "\n", + " for key_t in ev.cr_dt:\n", + " data = ev.cr_dt[key_t]\n", + " st = st_info[data[0]]\n", + " name_st = st.name\n", + " lat_st = st.lat\n", + " lon_st = st.lon\n", + " ele_st = st.ele\n", + " if(not name_st in st_list):\n", + " doc_st_list.write(\"%6s %9.4f %9.4f %10.4f \\n\"%(name_st,lat_st,lon_st,ele_st))\n", + " st_list[name_st] = 1\n", + "\n", + " doc_st_list.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: read objective function file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: read_objective_function_file(path)\n", + "def read_objective_function_file(path):\n", + "\n", + " full_curve = []\n", + " location_curve = []\n", + " model_curve = []\n", + "\n", + " with open('%s/objective_function.txt'%(path)) as f:\n", + " for i,line in enumerate(f):\n", + " tmp = line.split(',')\n", + " if (tmp[0].__contains__(\"#\")):\n", + " continue # skip the comment line\n", + " \n", + " iter = int(tmp[0])\n", + " tag = tmp[1]\n", + " obj = float(tmp[2])\n", + " obj_abs = float(tmp[3])\n", + " obj_cs = float(tmp[4])\n", + " obj_cr = float(tmp[5])\n", + " obj_tele = float(tmp[6])\n", + " tmp2 = tmp[7].split('/')\n", + " mean = float(tmp2[0])\n", + " std = float(tmp2[1])\n", + " tmp2 = tmp[8].split('/')\n", + " mean_abs = float(tmp2[0])\n", + " std_abs = float(tmp2[1])\n", + " tmp2 = tmp[9].split('/')\n", + " mean_cs = float(tmp2[0])\n", + " std_cs = float(tmp2[1])\n", + " tmp2 = tmp[10].split('/')\n", + " mean_cr = float(tmp2[0])\n", + " std_cr = float(tmp2[1])\n", + " tmp2 = tmp[11].split('/')\n", + " mean_tele = float(tmp2[0])\n", + " std_tele = float(tmp2[1])\n", + "\n", + " full_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele])\n", + " if tag.__contains__(\"relocation\"):\n", + " location_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele])\n", + " if tag.__contains__(\"model\"):\n", + " model_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele])\n", + "\n", + " return np.array(full_curve),np.array(location_curve),np.array(model_curve)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: read inversion grid file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: read the inversion grid file\n", + "def read_inversion_grid_file(path):\n", + "\n", + " inv_grid_vel = []\n", + " inv_grid_ani = []\n", + "\n", + " switch = False\n", + " igrid = -1\n", + " with open('%s/inversion_grid.txt'%(path)) as f:\n", + " tmp_inv_grid = []\n", + " for i,line in enumerate(f):\n", + "\n", + " # read the number of inversion grid in dep, lat, lon directions\n", + " if(i==0):\n", + " tmp = line.split()\n", + " ndep = int(tmp[1])\n", + " nlines = 3*ndep+1 # The number of rows for each inversion grid is 3*ndep+1\n", + "\n", + " iline = i % nlines\n", + "\n", + " if(iline == 0): # info: number of inversion grid\n", + " tmp = line.split()\n", + " if (int(tmp[0]) > igrid):\n", + " igrid = int(tmp[0])\n", + " else: # change from vel to ani\n", + " switch = True\n", + " igrid = int(tmp[0])\n", + "\n", + " else: # info location of inversion grid\n", + " iline_sub = (iline-1) % 3\n", + " if(iline_sub == 0): # dep\n", + " tmp = line.split()\n", + " dep = float(tmp[0])\n", + " if(iline_sub == 1): # list of lat\n", + " lat_list = line.split()\n", + " if(iline_sub == 2): # list of lon\n", + " lon_list = line.split()\n", + "\n", + " # add inversion grid\n", + " for lat in lat_list:\n", + " for lon in lon_list:\n", + " tmp_inv_grid.append([float(lon), float(lat), dep])\n", + "\n", + " if(iline == nlines-1): # the last line of inversion grid\n", + " if(switch):\n", + " inv_grid_ani.append(tmp_inv_grid)\n", + " else:\n", + " inv_grid_vel.append(tmp_inv_grid)\n", + " tmp_inv_grid = []\n", + "\n", + " return [np.array(inv_grid_vel),np.array(inv_grid_ani)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: for plotting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: fig_ev_st_distribution_dep(ev_info, st_info) Plot the distribution of the earthquakes and stations, color-coded by earthquake depth.\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.gridspec import GridSpec\n", + "\n", + "def fig_ev_st_distribution_dep(ev_info,st_info):\n", + "\n", + " [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info)\n", + " [lon_st,lat_st,ele_st,wt_st] = data_lon_lat_ele_wt_st(ev_info,st_info)\n", + "\n", + " min_lon = min(min(lon_ev),min(lon_st))\n", + " max_lon = max(max(lon_ev),max(lon_st))\n", + "\n", + " min_lat = min(min(lat_ev),min(lat_st))\n", + " max_lat = max(max(lat_ev),max(lat_st))\n", + "\n", + " max_dep = max(dep_ev)\n", + "\n", + " # Insert a value that does not affect the plot to make the colorbar range look better.\n", + " lon_ev = np.insert(lon_ev, 0, 9999); lat_ev = np.insert(lat_ev, 0, 9999); dep_ev = np.insert(dep_ev, 0, 0);\n", + "\n", + " fig = plt.figure(figsize=(12,12))\n", + " gridspace = GridSpec(12,12,figure = fig)\n", + "\n", + " xrange = max_lon - min_lon + 1.0\n", + " yrange = max_lat - min_lat + 1.0\n", + "\n", + " if (xrange > yrange):\n", + " fig_x_size = 6\n", + " fig_y_size = round(6*yrange/xrange)\n", + " else:\n", + " fig_x_size = round(6*xrange/yrange)\n", + " fig_y_size = 6\n", + "\n", + "\n", + " ax1 = fig.add_subplot(gridspace[0:fig_y_size,0:fig_x_size])\n", + "\n", + " bar_ev = ax1.scatter(lon_ev,lat_ev,c=dep_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + " # ax1.plot(lon_st,lat_st,'rv',label = \"rec\",markersize = 6)\n", + " bar_st = ax1.scatter(lon_st,lat_st,c=\"red\",label = \"rec\",s = 100,marker='v',edgecolors='white')\n", + "\n", + " ax1.legend(fontsize = 14)\n", + " ax1.tick_params(axis='x',labelsize=18)\n", + " ax1.tick_params(axis='y',labelsize=18)\n", + " ax1.set_xlabel('Lon',fontsize=18)\n", + " ax1.set_ylabel('Lat',fontsize=18)\n", + " ax1.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1))\n", + " ax1.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1))\n", + "\n", + "\n", + " ax2 = fig.add_subplot(gridspace[0:fig_y_size, fig_x_size+1 : fig_x_size+3])\n", + "\n", + " ax2.scatter(dep_ev,lat_ev,c=dep_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + "\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_xlabel('Dep',fontsize=18)\n", + " ax2.set_ylabel('Lat',fontsize=18)\n", + " ax2.set_xlim((-max_dep*0.05,max_dep*1.1))\n", + " ax2.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1))\n", + "\n", + "\n", + " ax3 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+3,0:fig_x_size])\n", + "\n", + " ax3.scatter(lon_ev,dep_ev,c=dep_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + "\n", + " ax3.tick_params(axis='x',labelsize=18)\n", + " ax3.tick_params(axis='y',labelsize=18)\n", + " ax3.set_xlabel('Lon',fontsize=18)\n", + " ax3.set_ylabel('Dep',fontsize=18)\n", + " ax3.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1))\n", + " ax3.set_ylim((-max_dep*0.05,max_dep*1.1))\n", + " ax3.invert_yaxis()\n", + "\n", + " # Place the colorbar on a new axis.\n", + " ax4 = fig.add_subplot(gridspace[fig_y_size+2:fig_y_size+3,fig_x_size+1:fig_x_size+3])\n", + " cbar1 = plt.colorbar(bar_ev, ax=ax4,orientation='horizontal')\n", + " cbar1.set_label('Depth of earthquakes',fontsize=16)\n", + " cbar1.ax.tick_params(axis='x', labelsize=16) # Colorbar font size.\n", + "\n", + " # Hide the borders of the axes.\n", + " ax4.spines['top'].set_visible(False)\n", + " ax4.spines['right'].set_visible(False)\n", + " ax4.spines['bottom'].set_visible(False)\n", + " ax4.spines['left'].set_visible(False)\n", + "\n", + " # Hide the tick values of the axes.\n", + " ax4.set_xticks([])\n", + " ax4.set_yticks([])\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Function: fig_ev_st_distribution_wt(ev_info, st_info) Plot the distribution of the earthquakes and stations, color-coded by weight.\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.gridspec import GridSpec\n", + "from matplotlib.colors import ListedColormap\n", + "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", + "import math\n", + "\n", + "def fig_ev_st_distribution_wt(ev_info,st_info):\n", + "\n", + "\n", + " [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info)\n", + " [lon_st,lat_st,ele_st,wt_st] = data_lon_lat_ele_wt_st(ev_info,st_info)\n", + "\n", + " # Insert a value that does not affect the plot to make the colorbar range look better.\n", + " lon_ev = np.insert(lon_ev, 0, lon_ev[0]); lat_ev = np.insert(lat_ev, 0, lat_ev[0]); dep_ev = np.insert(dep_ev, 0, dep_ev[0]); wt_ev = np.insert(wt_ev, 0, 0.0)\n", + " lon_ev = np.insert(lon_ev, 0, lon_ev[0]); lat_ev = np.insert(lat_ev, 0, lat_ev[0]); dep_ev = np.insert(dep_ev, 0, dep_ev[0]); wt_ev = np.insert(wt_ev, 0, 1.0)\n", + " lon_st = np.insert(lon_st, 0, lon_st[0]); lat_st = np.insert(lat_st, 0, lat_st[0]); ele_st = np.insert(ele_st, 0, ele_st[0]); wt_st = np.insert(wt_st, 0, 0.0)\n", + " lon_st = np.insert(lon_st, 0, lon_st[0]); lat_st = np.insert(lat_st, 0, lat_st[0]); ele_st = np.insert(ele_st, 0, ele_st[0]); wt_st = np.insert(wt_st, 0, 1.0)\n", + "\n", + " min_lon = min(min(lon_ev),min(lon_st))\n", + " max_lon = max(max(lon_ev),max(lon_st))\n", + "\n", + " min_lat = min(min(lat_ev),min(lat_st))\n", + " max_lat = max(max(lat_ev),max(lat_st))\n", + "\n", + " max_dep = max(dep_ev)\n", + "\n", + " fig = plt.figure(figsize=(12,12))\n", + " gridspace = GridSpec(12,12,figure = fig)\n", + "\n", + " xrange = max_lon - min_lon + 1.0\n", + " yrange = max_lat - min_lat + 1.0\n", + "\n", + " if (xrange > yrange):\n", + " fig_x_size = 6\n", + " fig_y_size = round(6*yrange/xrange)\n", + " else:\n", + " fig_x_size = round(6*xrange/yrange)\n", + " fig_y_size = 6\n", + "\n", + "\n", + " ax1 = fig.add_subplot(gridspace[0:fig_y_size,0:fig_x_size])\n", + "\n", + " bar_ev = ax1.scatter(lon_ev,lat_ev,c=wt_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + " bar_st = ax1.scatter(lon_st,lat_st,c=wt_st,cmap=\"jet\",label = \"rec\",s = 100,marker='^',edgecolors='white')\n", + "\n", + " ax1.legend(fontsize = 14)\n", + " ax1.tick_params(axis='x',labelsize=18)\n", + " ax1.tick_params(axis='y',labelsize=18)\n", + " ax1.set_xlabel('Lon',fontsize=18)\n", + " ax1.set_ylabel('Lat',fontsize=18)\n", + " ax1.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1))\n", + " ax1.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1))\n", + "\n", + "\n", + " ax2 = fig.add_subplot(gridspace[0:fig_y_size, fig_x_size+1 : fig_x_size+3])\n", + "\n", + " ax2.scatter(dep_ev,lat_ev,c=wt_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + "\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_xlabel('Dep',fontsize=18)\n", + " ax2.set_ylabel('Lat',fontsize=18)\n", + " ax2.set_xlim((-max_dep*0.05,max_dep*1.1))\n", + " ax2.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1))\n", + "\n", + "\n", + " ax3 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+3,0:fig_x_size])\n", + "\n", + " ax3.scatter(lon_ev,dep_ev,c=wt_ev,cmap=\"jet\",label = \"src\",s = 3)\n", + "\n", + " ax3.tick_params(axis='x',labelsize=18)\n", + " ax3.tick_params(axis='y',labelsize=18)\n", + " ax3.set_xlabel('Lon',fontsize=18)\n", + " ax3.set_ylabel('Dep',fontsize=18)\n", + " ax3.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1))\n", + " ax3.set_ylim((-max_dep*0.05,max_dep*1.1))\n", + " ax3.invert_yaxis()\n", + "\n", + " # Place the colorbar on a new axis.\n", + " ax4 = fig.add_subplot(gridspace[fig_y_size+2:fig_y_size+3,fig_x_size+1:fig_x_size+3])\n", + " cbar1 = plt.colorbar(bar_st, ax=ax4,orientation='horizontal')\n", + " cbar1.set_label('Weight of stations',fontsize=16)\n", + " cbar1.ax.tick_params(axis='x', labelsize=16) # colorbar font size.\n", + " # Hide the borders of the axes.\n", + " ax4.spines['top'].set_visible(False)\n", + " ax4.spines['right'].set_visible(False)\n", + " ax4.spines['bottom'].set_visible(False)\n", + " ax4.spines['left'].set_visible(False)\n", + "\n", + " # Hide the tick values of the axes.\n", + " ax4.set_xticks([])\n", + " ax4.set_yticks([])\n", + "\n", + " # Place the colorbar on a new axis.\n", + " ax5 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+2,fig_x_size+1:fig_x_size+3])\n", + " cbar1 = plt.colorbar(bar_ev, ax=ax5,orientation='horizontal')\n", + " cbar1.set_label('Weight of earthquakes',fontsize=16)\n", + " cbar1.ax.tick_params(axis='x', labelsize=16) # colorbar font size.\n", + " # Hide the borders of the axes.\n", + " ax5.spines['top'].set_visible(False)\n", + " ax5.spines['right'].set_visible(False)\n", + " ax5.spines['bottom'].set_visible(False)\n", + " ax5.spines['left'].set_visible(False)\n", + "\n", + " # Hide the tick values of the axes.\n", + " ax5.set_xticks([])\n", + " ax5.set_yticks([])\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Plot and function: plot the distance-time scatter plot, remove the outliers.\n", + "# Limit the data within the range defined by the line time = dis * slope + intercept and the bounds up and down.\n", + "# Remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up.\n", + "\n", + "def fig_data_plot_remove_outliers(ev_info,st_info,slope,intercept,up,down,dis_min,dis_max):\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " gridspace = GridSpec(6,6,figure = fig)\n", + " ax2 = fig.add_subplot(gridspace[0:6, 0:6])\n", + "\n", + " # plot original data\n", + " [dis_obs,time_obs] = data_dis_time(ev_info,st_info)\n", + " ax2.plot(dis_obs,time_obs,'r.',markersize=1.5,label = \"discarded\")\n", + "\n", + " # remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up\n", + " ev_info = limit_data_residual(ev_info,st_info,slope,intercept,up,down)\n", + "\n", + " [dis_obs,time_obs] = data_dis_time(ev_info,st_info)\n", + " ax2.plot(dis_obs,time_obs,'b.',markersize=1.5,label = \"retained\")\n", + "\n", + " ax2.plot([dis_min,dis_max],[slope*dis_min+intercept+up,slope*dis_max+intercept+up],'b-',linewidth=2)\n", + " ax2.plot([dis_min,dis_max],[slope*dis_min+intercept+down,slope*dis_max+intercept+down],'b-',linewidth=2)\n", + " ax2.plot([dis_min,dis_max],[slope*dis_min+intercept,slope*dis_max+intercept],'k-',linewidth=2)\n", + "\n", + " ax2.legend(fontsize = 14)\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_xlabel('Distance (km)',fontsize=18)\n", + " ax2.set_ylabel('Traveltime',fontsize=18)\n", + " ax2.set_xlim((dis_min,dis_max))\n", + " ax2.set_ylim((intercept+down-5,slope*dis_max+intercept+up+5))\n", + "\n", + " return ev_info" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Plot: distance-time scatter plot of given phases.\n", + "\n", + "def fig_data_plot_phase(ev_info,st_info,phase_list,color_list,dis_min,dis_max):\n", + "\n", + " [dis_obs_phase,time_obs_phase] = data_dis_time_phase(ev_info,st_info,phase_list)\n", + "\n", + " regression = {}\n", + " # Calculate the least squares y = ax+b\n", + " for key_phase in phase_list:\n", + " X = dis_obs_phase[key_phase]\n", + " Y = time_obs_phase[key_phase]\n", + "\n", + " if(len(X)>20):\n", + " regression[key_phase] = linear_regression(X,Y)\n", + " else:\n", + " print(\"No enough data: %d, for %s\"%(len(X),key_phase))\n", + " regression[key_phase] = [0,0,0]\n", + "\n", + "\n", + " # draw\n", + " fig = plt.figure(figsize=(10,10))\n", + " gridspace = GridSpec(6,6,figure = fig)\n", + " ax2 = fig.add_subplot(gridspace[0:6, 0:6])\n", + " y1 = 99999; y2 = -99999\n", + "\n", + " # scatter plot\n", + " for iphase in range(len(phase_list)):\n", + " phase = phase_list[iphase]\n", + " color = color_list[iphase]\n", + " ax2.plot(dis_obs_phase[phase],time_obs_phase[phase],'%s.'%(color),markersize=1)\n", + "\n", + " # linear regression plot\n", + " for iphase in range(len(phase_list)):\n", + " phase = phase_list[iphase]\n", + " color = color_list[iphase]\n", + " (slope,intercept,SEE)= regression[phase]\n", + " ax2.plot([dis_min,dis_max],[dis_min*slope+intercept,dis_max*slope+intercept],'%s-'%(color),linewidth=2,label = \"%s: a,b,SEE=%5.2f,%5.2f,%5.2f\"%(phase,slope,intercept,SEE))\n", + " y1 = min(y1,intercept-5)\n", + " y2 = max(y2,dis_max*slope+intercept+5)\n", + "\n", + " ax2.legend(fontsize = 14)\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_xlabel('Distance (km)',fontsize=18)\n", + " ax2.set_ylabel('Traveltime (s)',fontsize=18)\n", + " ax2.set_xlim((dis_min,dis_max))\n", + "\n", + "\n", + " for iphase in range(len(phase_list)):\n", + " try:\n", + " y1 = min(y1,min(time_obs_phase[phase]))\n", + " y2 = max(y2,max(time_obs_phase[phase]))\n", + " except:\n", + " pass\n", + " ax2.set_ylim((y1,y2))\n", + "\n", + " title = \"\"\n", + " for phase in dis_obs_phase:\n", + " title = title + \"%s(%d) \"%(phase,len(dis_obs_phase[phase]))\n", + "\n", + " ax2.set_title(title)\n", + "\n", + " print(\"a is slope, b is intercept, SEE is standard error of estimate\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Functions: results analysis and evaluation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot: plot the residual histogram of the initial and final model\n", + "def fig_residual_histogram(fn_syn_init,fn_syn_final,fn_obs,range_l,range_r,Nbar,tag1 = \"initial\",tag2 = \"final\"):\n", + "\n", + " # read synthetic traveltime data in the initial model\n", + " [ev_info_syn_init, st_info_syn_init] = read_src_rec_file(fn_syn_init)\n", + " time_syn_init = data_dis_time(ev_info_syn_init,st_info_syn_init)[1]\n", + "\n", + " # read synthetic traveltime data in the final model\n", + " [ev_info_syn_final, st_info_syn_final] = read_src_rec_file(fn_syn_final)\n", + " time_syn_final = data_dis_time(ev_info_syn_final,st_info_syn_final)[1]\n", + "\n", + " # read observed traveltime data\n", + " [ev_info_obs, st_info_obs] = read_src_rec_file(fn_obs)\n", + " time_obs = data_dis_time(ev_info_obs,st_info_obs)[1]\n", + "\n", + " fig = plt.figure(figsize=(6,6))\n", + " gridspace = GridSpec(6,6,figure = fig)\n", + "\n", + " ax2 = fig.add_subplot(gridspace[0:6, 0:6])\n", + "\n", + " bins=np.linspace(range_l,range_r,Nbar)\n", + " error_init = time_syn_init - time_obs\n", + " error_final = time_syn_final - time_obs\n", + "\n", + " hist_init, _, _ = ax2.hist(error_init,bins=bins,histtype='step', edgecolor = \"red\", linewidth = 2,\n", + " label = \"%s: std = %5.3f s, mean = %5.3f s\"%(tag1,np.std(error_init),np.mean(error_init)))\n", + "\n", + " hist_final, _, _ = ax2.hist(error_final,bins=bins,alpha = 0.5, color = \"blue\",\n", + " label = \"%s: std = %5.3f s, mean = %5.3f s\"%(tag2,np.std(error_final),np.mean(error_final)))\n", + "\n", + " print(\"residual for \",tag1,\" model is: \",\"mean: \",np.mean(error_init),\"sd: \",np.std(error_init))\n", + " print(\"residual for \",tag2,\" model is: \",\"mean: \",np.mean(error_final),\"sd: \",np.std(error_final))\n", + " ax2.legend(fontsize=14)\n", + "\n", + " ax2.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1)\n", + " ax2.set_ylim(0,1.3*max(max(hist_init),max(hist_final)))\n", + "\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_ylabel('Number of data',fontsize=18)\n", + " ax2.set_xlabel('Traveltime residuals (s)',fontsize=18)\n", + " ax2.set_title(\"$t_{syn} - t_{obs}$\",fontsize=18)\n", + " ax2.grid()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot: plot the residual histogram of the initial and final model\n", + "def fig_data_difference_histogram(fn_A,fn_B,range_l,range_r,Nbar):\n", + "\n", + " # read data A\n", + " [ev_info_A, st_info_A] = read_src_rec_file(fn_A)\n", + "\n", + " # read data B\n", + " [ev_info_B, st_info_B] = read_src_rec_file(fn_B)\n", + "\n", + " # absolute traveltime residual\n", + " error_t = []\n", + " for key_ev in ev_info_A:\n", + " for key_t in ev_info_A[key_ev].t:\n", + " data_A = ev_info_A[key_ev].t[key_t]\n", + " if (key_ev in ev_info_B and key_t in ev_info_B[key_ev].t):\n", + " data_B = ev_info_B[key_ev].t[key_t]\n", + " error_t.append(data_A[2] - data_B[2])\n", + "\n", + " # common-source differential traveltime residual\n", + " error_cs_dt = []\n", + " for key_ev in ev_info_A:\n", + " for key_dt in ev_info_A[key_ev].cs_dt:\n", + " data_A = ev_info_A[key_ev].cs_dt[key_dt]\n", + " if (key_ev in ev_info_B and key_dt in ev_info_B[key_ev].cs_dt):\n", + " data_B = ev_info_B[key_ev].cs_dt[key_dt]\n", + " error_cs_dt.append(data_A[3] - data_B[3])\n", + " else:\n", + " print(key_ev,key_dt)\n", + "\n", + " # common-receiver differential traveltime residual\n", + " error_cr_dt = []\n", + " for key_ev in ev_info_A:\n", + " for key_dt in ev_info_A[key_ev].cr_dt:\n", + " data_A = ev_info_A[key_ev].cr_dt[key_dt]\n", + " if (key_ev in ev_info_B and key_dt in ev_info_B[key_ev].cr_dt):\n", + " data_B = ev_info_B[key_ev].cr_dt[key_dt]\n", + " error_cr_dt.append(data_A[3] - data_B[3])\n", + "\n", + " # plot\n", + " fig = plt.figure(figsize=(14,6))\n", + " gridspace = GridSpec(6,14,figure = fig)\n", + "\n", + "\n", + " ax2 = fig.add_subplot(gridspace[0:6, 0:6])\n", + " bins=np.linspace(range_l,range_r,Nbar)\n", + " # hist_t, _, _ = ax2.hist(error_t,bins=bins,histtype='step', edgecolor = \"red\", linewidth = 2,\n", + " # label = \"noise: std = %5.3f s, mean = %5.3f s\"%(np.std(error_t),np.mean(error_t)))\n", + " hist_t, _, _ = ax2.hist(error_t,bins=bins,alpha = 0.5, color = \"blue\",\n", + " label = \"noise: std = %5.3f s, mean = %5.3f s\"%(np.std(error_t),np.mean(error_t)))\n", + "\n", + " ax2.legend(fontsize=14)\n", + " ax2.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1)\n", + " try:\n", + " ax2.set_ylim(0,1.3*max(hist_t))\n", + " except:\n", + " ax2.set_ylim(0,1.0)\n", + " ax2.tick_params(axis='x',labelsize=18)\n", + " ax2.tick_params(axis='y',labelsize=18)\n", + " ax2.set_ylabel('Number of data',fontsize=18)\n", + " ax2.set_xlabel('Noise (s)',fontsize=18)\n", + " ax2.set_title(\"Noise of traveltime\",fontsize=18)\n", + "\n", + "\n", + " ax3 = fig.add_subplot(gridspace[0:6,8:14])\n", + " bins=np.linspace(range_l,range_r,Nbar)\n", + " # hist_t, _, _ = ax3.hist(error_t,bins=bins,histtype='step', edgecolor = \"red\", linewidth = 2,\n", + " # label = \"noise: std = %5.3f s, mean = %5.3f s\"%(np.std(error_t),np.mean(error_t)))\n", + " hist_cs_dt, _, _ = ax3.hist(error_cs_dt,bins=bins,alpha = 0.5, color = \"blue\",\n", + " label = \"noise: std = %5.3f s, mean = %5.3f s\"%(np.std(error_cs_dt),np.mean(error_cs_dt)))\n", + "\n", + " ax3.legend(fontsize=14)\n", + " ax3.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1)\n", + " try:\n", + " ax3.set_ylim(0,1.3*max(hist_cs_dt))\n", + " except:\n", + " ax3.set_ylim(0,1.0)\n", + " ax3.tick_params(axis='x',labelsize=18)\n", + " ax3.tick_params(axis='y',labelsize=18)\n", + " ax3.set_ylabel('Number of data',fontsize=18)\n", + " ax3.set_xlabel('Noise (s)',fontsize=18)\n", + " ax3.set_title(\"Noise of differential traveltime\",fontsize=18)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/utils/functions_for_data.py b/examples/utils/functions_for_data.py new file mode 100644 index 0000000..c21864e --- /dev/null +++ b/examples/utils/functions_for_data.py @@ -0,0 +1,2414 @@ +# %% +# Initialization, class definition, and declaration. + +import os +import math +from obspy import UTCDateTime +import numpy as np +import copy + +class Event(): # class of earthquake + def __init__(self): + self.name = "nan" # evname1 Earthquake name, recommended as "earthquake". + self.id = -1 + self.lat = 0.0 + self.lon = 0.0 + self.dep = 0.0 + self.mag = 0.0 + self.ortime = UTCDateTime(1999,1,1,0,0,0) + self.Nt = 0 # Number of the absolute traveltime of earthquake + self.Ncs_dt = 0 # Number of the commmon source differential traveltime of earthquake + self.Ncr_dt = 0 # Number of the commmon receiver differential traveltime of earthquake + self.t = {} # stname1+phase -> (stname1, phase, time, data_weight) + self.cs_dt = {} # stname1 + stname2 + phase -> (stname1, stname2, phase, dif_time, data_weight) + self.cr_dt = {} # stname1 + evname2 + phase -> (stname1, evname2, phase, dif_time, data_weight) + self.azi_gap = 360.0 # the max azimuthal gap of each earthquake + self.misfit = {} # traveltime residual of the data, the difference between real data and synthetic data, used for evaluation. stname or stname1+stname2 or stname1+evname2 -> residual + self.tag = {} # additional tags for the earthquake, e.g., azi_gap, weight. (azimuthal gap, weight of the earthquake) + +class Station(): + def __init__(self): + self.name = "nan" # stname1, recommend: network.stname + self.id = -1 + self.lat = 0.0 + self.lon = 0.0 + self.ele = 0.0 + self.tag = {} # additional tags for the station, e.g., wright + + + + +# %% [markdown] +# Functions: some basic auxiliary functions for processing data + +# %% +# function: cal_dis(lat1, lon1,lat2, lon2) (in kilometers), cal_azimuth(lat1, lon1, lat2, lon2) (degree) calculate epicentral distance (km) and azimuth (degree) + +def cal_dis(lat1, lon1,lat2, lon2, R = 6371): + latitude1 = (math.pi/180)*lat1 + latitude2 = (math.pi/180)*lat2 + longitude1 = (math.pi/180)*lon1 + longitude2= (math.pi/180)*lon2 + # Therefore, the spherical distance between points A and B is:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R + # Radius of the earth + if((lat1-lat2)**2+(lon1-lon2)**2<0.000001): + return 0 + + d = math.acos(math.sin(latitude1)*math.sin(latitude2)+ math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))/math.pi*180 + return d * 2 * math.pi * R / 360 + +def cal_azimuth(lat1, lon1, lat2, lon2): + lat1_rad = lat1 * math.pi / 180 + lon1_rad = lon1 * math.pi / 180 + lat2_rad = lat2 * math.pi / 180 + lon2_rad = lon2 * math.pi / 180 + + y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad) + x = math.cos(lat1_rad) * math.sin(lat2_rad) - math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad) + brng = math.atan2(y, x) * 180 / math.pi + if((lat1-lat2)**2+(lon1-lon2)**2<0.0001): + return 0 + return float((brng + 360.0) % 360.0) + + +# %% +# Function: Coordinate rotation rotate_src_rec(ev_info, st_info, theta0, phi0, psi): rotate to the new coordinate system, satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi. +# Satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi. + +import numpy as np + +RAD2DEG = 180/np.pi +DEG2RAD = np.pi/180 +R_earth = 6371.0 + +# Spherical coordinates to Cartesian coordinate +def rtp2xyz(r,theta,phi): + x = r * np.cos(theta*DEG2RAD) * np.cos(phi*DEG2RAD) + y = r * np.cos(theta*DEG2RAD) * np.sin(phi*DEG2RAD) + z = r * np.sin(theta*DEG2RAD) + return (x,y,z) + +# Cartesian coordinates to Spherical coordinate +def xyz2rtp(x,y,z): + # theta: -90~90; phi: -180~180 + r = np.sqrt(x**2+y**2+z**2) + theta = np.arcsin(z/r) + phi = np.arcsin(y/r/np.cos(theta)) + + + idx = np.where((phi > 0) & (x*y < 0)) + phi[idx] = np.pi - phi[idx] + idx = np.where((phi < 0) & (x*y > 0)) + phi[idx] = -np.pi - phi[idx] + + + # for i in range(phi.size): + # if(phi[i] > 0 and x[i]*y[i] < 0): + # phi[i] = np.pi - phi[i] + # if(phi[i] < 0 and x[i]*y[i] > 0): + # phi[i] = -np.pi - phi[i] + + return (r,theta*RAD2DEG,phi*RAD2DEG) + +# anti-clockwise rotation along x-axis +def rotate_x(x,y,z,theta): + new_x = x + new_y = y * np.cos(theta*DEG2RAD) + z * -np.sin(theta*DEG2RAD) + new_z = y * np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD) + return (new_x,new_y,new_z) + +# anti-clockwise rotation along y-axis +def rotate_y(x,y,z,theta): + new_x = x * np.cos(theta*DEG2RAD) + z * np.sin(theta*DEG2RAD) + new_y = y + new_z = x * -np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD) + return (new_x,new_y,new_z) + +# anti-clockwise rotation along z-axis +def rotate_z(x,y,z,theta): + new_x = x * np.cos(theta*DEG2RAD) + y * -np.sin(theta*DEG2RAD) + new_y = x * np.sin(theta*DEG2RAD) + y * np.cos(theta*DEG2RAD) + new_z = z + return (new_x,new_y,new_z) + +# spherical Rotation + +# rotate to the new coordinate, satisfying the center r0,t0,p0 -> r0,0,0 and a anticlockwise angle psi +def rtp_rotation(t,p,theta0,phi0,psi): + # step 1: r,t,p -> x,y,z + (x,y,z) = rtp2xyz(1.0,t,p) + + # step 2: anti-clockwise rotation with -phi0 along z-axis: r0,t0,p0 -> r0,t0,0 + (x,y,z) = rotate_z(x,y,z,-phi0) + + # step 3: anti-clockwise rotation with theta0 along y-axis: r0,t0,0 -> r0,0,0 + (x,y,z) = rotate_y(x,y,z,theta0) + + # # step 4: anti-clockwise rotation with psi along x-axis + (x,y,z) = rotate_x(x,y,z,psi) + + # step 5: x,y,z -> r,t,p + (new_r,new_t,new_p) = xyz2rtp(x,y,z) + + return (new_t,new_p) + + +def rtp_rotation_reverse(new_t,new_p,theta0,phi0,psi): + # step 1: r,t,p -> x,y,z + (x,y,z) = rtp2xyz(1.0,new_t,new_p) + + # step 2: anti-clockwise rotation with -psi along x-axis + (x,y,z) = rotate_x(x,y,z,-psi) + + # step 3: anti-clockwise rotation with -theta0 along y-axis: r0,0,0 -> r0,t0,0 + (x,y,z) = rotate_y(x,y,z,-theta0) + + # step 4: anti-clockwise rotation with phi0 along z-axis: r0,t0,0 -> r0,t0,p0 + (x,y,z) = rotate_z(x,y,z,phi0) + + # step 5: x,y,z -> r,t,p + (r,t,p) = xyz2rtp(x,y,z) + + return (t,p) + +def rotate_src_rec(ev_info,st_info,theta0,phi0,psi): + ev_info_rotate = {} + st_info_rotate = {} + + # rotate earthquakes + for key_ev in ev_info: + ev = ev_info[key_ev] + ev_lat = np.array([ev.lat]); ev_lon = np.array([ev.lon]) + (ev_lat,ev_lon,) = rtp_rotation(ev_lat,ev_lon,theta0,phi0,psi) + ev.lat = ev_lat[0]; ev.lon = ev_lon[0] + ev_info_rotate[key_ev] = ev + + # rotate stations + for key_st in st_info: + st = st_info[key_st] + st_lat = np.array([st.lat]); st_lon = np.array([st.lon]) + (st_lat,st_lon) = rtp_rotation(st_lat,st_lon,theta0,phi0,psi) + st.lat = st_lat[0]; st.lon = st_lon[0] + st_info_rotate[key_st] = st + + return (ev_info_rotate,st_info_rotate) + +def rotate_src_rec_reverse(ev_info_rotate,st_info_rotate,theta0,phi0,psi): + ev_info = {} + st_info = {} + + # rotate earthquakes + for key_ev in ev_info_rotate: + ev = ev_info_rotate[key_ev] + ev_lat = np.array([ev.lat]); ev_lon = np.array([ev.lon]) + (ev_lat,ev_lon,) = rtp_rotation_reverse(ev_lat,ev_lon,theta0,phi0,psi) + ev.lat = ev_lat[0]; ev.lon = ev_lon[0] + ev_info[key_ev] = ev + + # rotate stations + for key_st in st_info_rotate: + st = st_info_rotate[key_st] + st_lat = np.array([st.lat]); st_lon = np.array([st.lon]) + (st_lat,st_lon) = rtp_rotation_reverse(st_lat,st_lon,theta0,phi0,psi) + st.lat = st_lat[0]; st.lon = st_lon[0] + st_info[key_st] = st + + return (ev_info,st_info) + +# %% +# # Function: Coordinate rotation rotate_src_rec(ev_info, st_info, theta0, phi0, psi): rotate to the new coordinate system, satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi. +# # Satisfying the center point transformation r0, t0, p0 -> r0, 0, 0 and an anticlockwise rotation angle psi. + +# import numpy as np + +# RAD2DEG = 180/np.pi +# DEG2RAD = np.pi/180 +# R_earth = 6371.0 + +# # Spherical coordinates to Cartesian coordinate +# def rtp2xyz(r,theta,phi): +# x = r * np.cos(theta*DEG2RAD) * np.cos(phi*DEG2RAD) +# y = r * np.cos(theta*DEG2RAD) * np.sin(phi*DEG2RAD) +# z = r * np.sin(theta*DEG2RAD) +# return (x,y,z) + +# # Cartesian coordinates to Spherical coordinate +# def xyz2rtp(x,y,z): +# # theta: -90~90; phi: -180~180 +# r = np.sqrt(x**2+y**2+z**2) +# theta = np.arcsin(z/r) +# phi = np.arcsin(y/r/np.cos(theta)) + + +# if(phi > 0 and x*y < 0): +# phi = np.pi - phi +# if(phi < 0 and x*y > 0): +# phi = -np.pi - phi + +# return (r,theta*RAD2DEG,phi*RAD2DEG) + +# # anti-clockwise rotation along x-axis +# def rotate_x(x,y,z,theta): +# new_x = x +# new_y = y * np.cos(theta*DEG2RAD) + z * -np.sin(theta*DEG2RAD) +# new_z = y * np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD) +# return (new_x,new_y,new_z) + +# # anti-clockwise rotation along y-axis +# def rotate_y(x,y,z,theta): +# new_x = x * np.cos(theta*DEG2RAD) + z * np.sin(theta*DEG2RAD) +# new_y = y +# new_z = x * -np.sin(theta*DEG2RAD) + z * np.cos(theta*DEG2RAD) +# return (new_x,new_y,new_z) + +# # anti-clockwise rotation along z-axis +# def rotate_z(x,y,z,theta): +# new_x = x * np.cos(theta*DEG2RAD) + y * -np.sin(theta*DEG2RAD) +# new_y = x * np.sin(theta*DEG2RAD) + y * np.cos(theta*DEG2RAD) +# new_z = z +# return (new_x,new_y,new_z) + +# # spherical Rotation + +# # rotate to the new coordinate, satisfying the center r0,t0,p0 -> r0,0,0 and a anticlockwise angle psi +# def rtp_rotation(t,p,theta0,phi0,psi): +# # step 1: r,t,p -> x,y,z +# (x,y,z) = rtp2xyz(1.0,t,p) + +# # step 2: anti-clockwise rotation with -phi0 along z-axis: r0,t0,p0 -> r0,t0,0 +# (x,y,z) = rotate_z(x,y,z,-phi0) + +# # step 3: anti-clockwise rotation with theta0 along y-axis: r0,t0,0 -> r0,0,0 +# (x,y,z) = rotate_y(x,y,z,theta0) + +# # # step 4: anti-clockwise rotation with psi along x-axis +# (x,y,z) = rotate_x(x,y,z,psi) + +# # step 5: x,y,z -> r,t,p +# (new_r,new_t,new_p) = xyz2rtp(x,y,z) + +# return (new_t,new_p) + + +# def rtp_rotation_reverse(new_t,new_p,theta0,phi0,psi): +# # step 1: r,t,p -> x,y,z +# (x,y,z) = rtp2xyz(1.0,new_t,new_p) + +# # step 2: anti-clockwise rotation with -psi along x-axis +# (x,y,z) = rotate_x(x,y,z,-psi) + +# # step 3: anti-clockwise rotation with -theta0 along y-axis: r0,0,0 -> r0,t0,0 +# (x,y,z) = rotate_y(x,y,z,-theta0) + +# # step 4: anti-clockwise rotation with phi0 along z-axis: r0,t0,0 -> r0,t0,p0 +# (x,y,z) = rotate_z(x,y,z,phi0) + +# # step 5: x,y,z -> r,t,p +# (r,t,p) = xyz2rtp(x,y,z) + +# return (t,p) + +# def rotate_src_rec(ev_info,st_info,theta0,phi0,psi): +# ev_info_rotate = {} +# st_info_rotate = {} + +# # rotate earthquakes +# for key_ev in ev_info: +# ev = ev_info[key_ev] +# (ev.lat,ev.lon,) = rtp_rotation(ev.lat,ev.lon,theta0,phi0,psi) +# ev_info_rotate[key_ev] = ev + +# # rotate stations +# for key_st in st_info: +# st = st_info[key_st] +# (st.lat,st.lon) = rtp_rotation(st.lat,st.lon,theta0,phi0,psi) +# st_info_rotate[key_st] = st + +# return (ev_info_rotate,st_info_rotate) + +# def rotate_src_rec_reverse(ev_info_rotate,st_info_rotate,theta0,phi0,psi): +# ev_info = {} +# st_info = {} + +# # rotate earthquakes +# for key_ev in ev_info_rotate: +# ev = ev_info_rotate[key_ev] +# (ev.lat,ev.lon) = rtp_rotation_reverse(ev.lat,ev.lon,theta0,phi0,psi) +# ev_info[key_ev] = ev + +# # rotate stations +# for key_st in st_info_rotate: +# st = st_info_rotate[key_st] +# (st.lat,st.lon) = rtp_rotation_reverse(st.lat,st.lon,theta0,phi0,psi) +# st_info[key_st] = st + +# return (ev_info,st_info) + +# %% +# linear_regression(X,Y) +def linear_regression(X,Y): + slope,intercept = np.polyfit(X,Y,deg=1) + fitted_values = slope * X + intercept + residual = Y - fitted_values + SEE = np.std(residual) + return (slope,intercept,SEE) + +# %% [markdown] +# +# Functions: obtain target information from ev_info and st_info + +# %% +# function: output the [lon,lat,dep,weight] of the earthquake +def data_lon_lat_dep_wt_ev(ev_info): + lat = [] + lon = [] + dep = [] + weight = [] + for key in ev_info: + lat.append(ev_info[key].lat) + lon.append(ev_info[key].lon) + dep.append(ev_info[key].dep) + try: + weight.append(ev_info[key].tag["weight"]) + except: + weight.append(1.0) + return [np.array(lon),np.array(lat),np.array(dep),np.array(weight)] + +# %% +# function: output the [lon, lat, dep, ortime] of the earthquake +def data_ev_loc(ev_info): + lat = [] + lon = [] + dep = [] + ortime = [] + for key in ev_info: + lat.append(ev_info[key].lat) + lon.append(ev_info[key].lon) + dep.append(ev_info[key].dep) + ortime.append(ev_info[key].ortime.timestamp) + return [np.array(lon),np.array(lat),np.array(dep),np.array(ortime)] + +# %% +# function: output the [lon,lat,dep,weight] of the station +def data_lon_lat_ele_wt_st(ev_info,st_info): + names = {} + lat = [] + lon = [] + ele = [] + weight = [] + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: # absolute traveltime data + name_st = ev_info[key_ev].t[key_t][0] + names[name_st] = name_st + + for key_t in ev_info[key_ev].cs_dt: # common source differential traveltime data + name_st = ev_info[key_ev].cs_dt[key_t][0] + names[name_st] = name_st + name_st = ev_info[key_ev].cs_dt[key_t][1] + names[name_st] = name_st + + for key_t in ev_info[key_ev].cr_dt: # common receiver differential traveltime data + name_st = ev_info[key_ev].cr_dt[key_t][0] + names[name_st] = name_st + + for name in names: # only output the station which has data + lat.append(st_info[name].lat) + lon.append(st_info[name].lon) + ele.append(st_info[name].ele) + try: + weight.append(st_info[name].tag["weight"]) + except: + weight.append(1.0) + return [np.array(lon),np.array(lat),np.array(ele),np.array(weight)] + +# %% +# function: output the [dis,time] of all data +def data_dis_time(ev_info,st_info): + all_dis = [] + all_time = [] + for key_ev in ev_info: + lat_ev = ev_info[key_ev].lat + lon_ev = ev_info[key_ev].lon + dep_ev = ev_info[key_ev].dep + for key_t in ev_info[key_ev].t: + all_time.append(ev_info[key_ev].t[key_t][2]) + lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat + lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon + ele_st = st_info[ev_info[key_ev].t[key_t][0]].ele + dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2) + all_dis.append(dis) + + return [np.array(all_dis),np.array(all_time)] + +# %% +# function: output the [epidis,time] of all data +def data_epidis_time(ev_info,st_info): + all_dis = [] + all_time = [] + for key_ev in ev_info: + lat_ev = ev_info[key_ev].lat + lon_ev = ev_info[key_ev].lon + for key_t in ev_info[key_ev].t: + all_time.append(ev_info[key_ev].t[key_t][2]) + lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat + lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon + dis = cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + all_dis.append(dis) + + return [np.array(all_dis),np.array(all_time)] + +# %% +# function: output the [cs_dt] of all data +def data_cs_dt(ev_info): + all_time = [] + for key_ev in ev_info: + for key_dt in ev_info[key_ev].cs_dt: + all_time.append(ev_info[key_ev].cs_dt[key_dt][3]) + + return np.array(all_time) + +# %% +# Function: data_dis_time_phase(ev_info, st_info, phase_list) Given a list of seismic phases, output the [epicentral distance, arrival time] for each phase. +def data_dis_time_phase(ev_info,st_info,phase_list): + all_dis = {} + all_time = {} + for phase in phase_list: + all_dis[phase] = [] + all_time[phase] = [] + + for key_ev in ev_info: + lat_ev = ev_info[key_ev].lat + lon_ev = ev_info[key_ev].lon + dep_ev = ev_info[key_ev].dep + for key_t in ev_info[key_ev].t: + phase = key_t.split("+")[1] + if (not phase in phase_list): + continue + + all_time[phase].append(ev_info[key_ev].t[key_t][2]) + lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat + lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon + ele_st = st_info[ev_info[key_ev].t[key_t][0]].ele + + dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2) + all_dis[phase].append(dis) + + for phase in phase_list: + all_dis[phase] = np.array(all_dis[phase]) + all_time[phase] = np.array(all_time[phase]) + + return [all_dis,all_time] + +# %% +# Function: data_lon_lat_dep_wt_ev(ev_info) Outputs the lines connecting station and earthquake for traveltime data as [line_x, line_y]. + +def data_line(ev_info,st_info): + line_x = [] + line_y = [] + + for key_ev in ev_info: + lat_ev = ev_info[key_ev].lat + lon_ev = ev_info[key_ev].lon + for key_t in ev_info[key_ev].t: + lat_st = st_info[ev_info[key_ev].t[key_t][0]].lat + lon_st = st_info[ev_info[key_ev].t[key_t][0]].lon + + line_x.append([lon_ev,lon_st]) + line_y.append([lat_ev,lat_st]) + + return [line_x,line_y] + +# %% [markdown] +# Functions: discard some data in ev_info and st_info based on selection criteria + +# %% +# Function: limit_ev_region(ev_info, lat1, lat2, lon1, lon2, dep1, dep2) Delete the earthquakes that are out of the specified region. + +def limit_ev_region(ev_info,lat_min,lat_max,lon_min,lon_max,dep_min,dep_max): + count_delete = 0 + + del_key_ev = [] + for key_ev in ev_info: + ev = ev_info[key_ev] + lat = ev.lat + lon = ev.lon + dep = ev.dep + + if (lat < min(lat_min,lat_max) or lat > max(lat_min,lat_max) \ + or lon < min(lon_min,lon_max) or lon > max(lon_min,lon_max) \ + or dep < min(dep_min,dep_max) or dep > max(dep_min,dep_max)): + del_key_ev.append(key_ev) + count_delete += 1 + + del_key_t = [] + for key_t in ev_info[key_ev].cr_dt: + name_ev2 = ev_info[key_ev].cr_dt[key_t][1] + lat2 = ev_info[name_ev2].lat + lon2 = ev_info[name_ev2].lon + dep2 = ev_info[name_ev2].dep + if (lat2 < min(lat_min,lat_max) or lat2 > max(lat_min,lat_max) \ + or lon2 < min(lon_min,lon_max) or lon2 > max(lon_min,lon_max) \ + or dep2 < min(dep_min,dep_max) or dep2 > max(dep_min,dep_max)): + + del_key_t.append(key_t) + + for key_t in del_key_t: + del ev_info[key_ev].cr_dt[key_t] + + ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt) + + for key_ev in del_key_ev: + del ev_info[key_ev] + + print("delete %d events out of the region, now %d earthquakes are retained within the study region"%(count_delete,len(ev_info))) + return ev_info + +# %% +# Function: limit_st_region(ev_info, st_info, lat1, lat2, lon1, lon2) Delete the stations that are out of the specified region. + +def limit_st_region(ev_info,st_info,lat1,lat2,lon1,lon2): + + for key_ev in ev_info: + # delete the station out of the region in the absolute traveltime data + del_key_t = [] + for key_t in ev_info[key_ev].t: + name_st = ev_info[key_ev].t[key_t][0] + lat_st = st_info[name_st].lat + lon_st = st_info[name_st].lon + if(lat_st < min(lat1,lat2) or lat_st > max(lat1,lat2) or lon_st < min(lon1,lon2) or lon_st > max(lon1,lon2)): + del_key_t.append(key_t) + + for key_t in del_key_t: + del ev_info[key_ev].t[key_t] + ev_info[key_ev].Nt = len(ev_info[key_ev].t) + + # delete the station out of the region in the common source differential traveltime data + del_key_t = [] + for key_t in ev_info[key_ev].cs_dt: + name_st1 = ev_info[key_ev].cs_dt[key_t][0] + lat_st1 = st_info[name_st1].lat + lon_st1 = st_info[name_st1].lon + + name_st2 = ev_info[key_ev].cs_dt[key_t][1] + lat_st2 = st_info[name_st2].lat + lon_st2 = st_info[name_st2].lon + if(lat_st1 < min(lat1,lat2) or lat_st1 > max(lat1,lat2) or lon_st1 < min(lon1,lon2) or lon_st1 > max(lon1,lon2) \ + or lat_st2 < min(lat1,lat2) or lat_st2 > max(lat1,lat2) or lon_st2 < min(lon1,lon2) or lon_st2 > max(lon1,lon2)): + del_key_t.append(key_t) + + for key_t in del_key_t: + del ev_info[key_ev].cs_dt[key_t] + ev_info[key_ev].Ncs_dt = len(ev_info[key_ev].cs_dt) + + # delete the station out of the region in the common receiver differential traveltime data + del_key_st = [] + for key_t in ev_info[key_ev].cr_dt: + name_st = ev_info[key_ev].cr_dt[key_t][0] + lat_st = st_info[name_st].lat + lon_st = st_info[name_st].lon + if(lat_st < min(lat1,lat2) or lat_st > max(lat1,lat2) or lon_st < min(lon1,lon2) or lon_st > max(lon1,lon2)): + del_key_st.append(key_t) + + for key_t in del_key_st: + del ev_info[key_ev].cr_dt[key_t] + ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt) + + return ev_info + + + +# %% +# Function: limit_epi_dis(ev_info, st_info, epi_dis1, epi_dis2) Delete the stations with epicentral distance in the range from epi_dis1 to epi_dis2. + +def limit_epi_dis(ev_info,st_info,epi_dis1,epi_dis2): + + for key_ev in ev_info: + ev = ev_info[key_ev] + + lat_ev = ev.lat + lon_ev = ev.lon + + # delete the absolute traveltime data + del_key_t = [] + for key_t in ev.t: + stname = ev.t[key_t][0] + lat_st = st_info[stname].lat + lon_st = st_info[stname].lon + dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st) + if (dis > epi_dis1 and dis < epi_dis2): + del_key_t.append(key_t) + for key_t in del_key_t: + del ev.t[key_t] + ev.Nt = len(ev.t) + + # delete the common source differential traveltime data + del_key_t = [] + for key_t in ev.cs_dt: + for i in range(2): + stname = ev.t[key_t][i] + lat_st = st_info[stname].lat + lon_st = st_info[stname].lon + dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st) + + if (dis > epi_dis1 and dis < epi_dis2): + del_key_t.append(key_t) + break + for key_t in del_key_t: + del ev.cs_dt[key_t] + ev.Ncs_dt = len(ev.cs_dt) + + # delete the common receiver differential traveltime data + del_key_t = [] + for key_t in ev.cr_dt: + stname = ev.cr_dt[key_t][0] + lat_st = st_info[stname].lat + lon_st = st_info[stname].lon + dis = cal_dis(lat_ev, lon_ev, lat_st, lon_st) + if (dis > epi_dis1 and dis < epi_dis2): + del_key_t.append(key_t) + + lat_ev2 = ev_info[ev.cr_dt[key_t][1]].lat + lon_ev2 = ev_info[ev.cr_dt[key_t][1]].lon + dis = cal_dis(lat_ev2, lon_ev2, lat_st, lon_st) + if (dis > epi_dis1 and dis < epi_dis2): + del_key_t.append(key_t) + + for key_t in del_key_t: + del ev.cr_dt[key_t] + ev.Ncr_dt = len(ev.cr_dt) + + + ev_info[key_ev] = ev + + return ev_info + +# %% +# Function: limit_data_residual(ev_info, st_info, slope, intercept, up, down) Limit the data within the range defined by the line time = dis * slope + intercept and the bounds up and down. + +# remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up +def limit_data_residual(ev_info,st_info,slope,intercept,up,down): + for key_ev in ev_info: + lat_ev = ev_info[key_ev].lat + lon_ev = ev_info[key_ev].lon + dep_ev = ev_info[key_ev].dep + del_key_t = [] + for key_t in ev_info[key_ev].t: + name_st = ev_info[key_ev].t[key_t][0] + lat_st = st_info[name_st].lat + lon_st = st_info[name_st].lon + ele_st = st_info[name_st].ele + dis = math.sqrt(cal_dis(lat_ev,lon_ev,lat_st,lon_st)**2 + (dep_ev+ele_st/1000)**2) + residual = ev_info[key_ev].t[key_t][2] - (slope*dis+intercept) + + if (residual < down or residual > up): + del_key_t.append(key_t) + + for key_t in del_key_t: + del ev_info[key_ev].t[key_t] + + for key_ev in ev_info: + ev_info[key_ev].Nt = len(ev_info[key_ev].t) + + return ev_info + + + +# %% +# Function: limit_data_phase(ev_info, phase_list) Retain only the specified seismic phases. + +def limit_data_phase(ev_info,phase_list): + for key_ev in ev_info: + # process the absolute traveltime data + new_t = {} + for key_t in ev_info[key_ev].t: + phase = ev_info[key_ev].t[key_t][1] + if phase in phase_list: + new_t[key_t] = ev_info[key_ev].t[key_t] + + ev_info[key_ev].t = new_t + ev_info[key_ev].Nt = len(ev_info[key_ev].t) + + # process the common source differential traveltime data + new_t = {} + for key_t in ev_info[key_ev].cs_dt: + phase = ev_info[key_ev].cs_dt[key_t][2] + phase = phase.split(",")[0] + if phase in phase_list: + new_t[key_t] = ev_info[key_ev].cs_dt[key_t] + + ev_info[key_ev].cs_dt = new_t + ev_info[key_ev].Ncs_dt = len(ev_info[key_ev].cs_dt) + + # process the common receiver differential traveltime data + new_t = {} + for key_t in ev_info[key_ev].cr_dt: + phase = ev_info[key_ev].cr_dt[key_t][2] + phase = phase.split(",")[0] + if phase in phase_list: + new_t[key_t] = ev_info[key_ev].cr_dt[key_t] + + ev_info[key_ev].cr_dt = new_t + ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt) + + return ev_info + +# %% +# Function: limit_min_Nt(min_Nt_thd, ev_info) Delete the earthquakes with the number of data less than min_Nt_thd. + +def limit_min_Nt(min_Nt_thd, ev_info): + Nev = len(ev_info) + + del_key_ev = [] + for key_ev in ev_info: + if(ev_info[key_ev].Nt < min_Nt_thd): + del_key_ev.append(key_ev) + + for key_ev in del_key_ev: + del ev_info[key_ev] + + print("Original data set has %d earthquakes, %d earthquakes are deleted, %d earthquakes are retained"%(Nev,len(del_key_ev),len(ev_info))) + + return ev_info + +# %% +# Function: limit_azi_gap(gap_thd) Calculate the azimuthal gap for all events and delete events with a gap greater than gap_thd. +def limit_azi_gap(gap_thd,ev_info,st_info): + Nev = len(ev_info) + + del_key_ev = [] + for key_ev in ev_info: + ev = ev_info[key_ev] + gap = cal_azi_gap(ev,st_info) + if (gap > gap_thd): + del_key_ev.append(key_ev) + else: + ev_info[key_ev].tag["azi_gap"] = gap + for key_ev in del_key_ev: + del ev_info[key_ev] + + print("Original data set has %d earthquakes, %d earthquakes are deleted, %d earthquakes are retained"%(Nev,len(del_key_ev),len(ev_info))) + + return ev_info + +# Function: cal_azi_gap(ev, st_info) Calculate the azimuthal gap of a single earthquake. +def cal_azi_gap(ev,st_info): + azi_all = [] + lat_ev = ev.lat + lon_ev = ev.lon + stlist = {} + for key in ev.t: + stname = ev.t[key][0] + if (not stname in stlist): + lat_st = st_info[stname].lat + lon_st = st_info[stname].lon + azi = cal_azimuth(lat_ev, lon_ev, lat_st, lon_st) + azi_all.append(azi) + stlist[stname] = 1 + + azi_all.sort() + if(len(azi_all) < 2): + return 360.0 + else: + gap = 0.0 + for i in range(len(azi_all)-1): + gap = max(gap,azi_all[i+1] - azi_all[i]) + gap = max(gap,azi_all[0] + 360 - azi_all[-1]) + return gap + + + +# %% +# Function: limit_earthquake_decluster_Nt(ev_info, dlat, dlon, ddep, Top_N) Divide the region into several subdomains, sort by the number of arrival times, and retain only the top Top_N earthquakes with the most arrival times in each box. +# option 3, declustering. Divide the region into several subdomains, retain the Top N earthquakes in terms of the number of arrival times in each subdomain. +def limit_earthquake_decluster_Nt(ev_info,dlat,dlon,ddep,Top_N): + # subdivide earthquakes into different subdomains + [ev_info,tag2name] = tag_event_cluster(dlat,dlon,ddep,ev_info) + + # sort earthquakes in the same subdomain + # Sort the quality of earthquakes within each tag based on the number of arrivals. + tag2name = sort_cluster_Nt(ev_info, tag2name) + + # only retain Top_N earthquakes in each subdomain + # Within each tag, prioritize selecting the top Top_N earthquakes. + [ev_info,tag2name] = limit_decluster(ev_info, tag2name,Top_N) + + return ev_info + + + +# Function: tag_event_cluster(size_lat, size_lon, size_dep, ev_info) Subdivide the study area, assign each earthquake to a subregion, and place it in a tag. +def tag_event_cluster(size_lat,size_lon,size_dep,ev_info): + tag2name = {} + for key_ev in ev_info: + name = ev_info[key_ev].name + lat = ev_info[key_ev].lat + lon = ev_info[key_ev].lon + dep = ev_info[key_ev].dep + tag = "%d_%d_%d"%(math.floor(lon/size_lon),math.floor(lat/size_lat),math.floor(dep/size_dep)) + ev_info[key_ev].tag["cluster"] = tag + + if (tag in tag2name): + tag2name[tag].append(name) + else: + tag2name[tag] = [] + tag2name[tag].append(name) + + return [ev_info,tag2name] + +# Function: sort_cluster_Nt(ev_info, tag2name) Sort the quality of earthquakes within each tag based on the number of arrivals. +def sort_cluster_Nt(ev_info, tag2name): + for key_tag in tag2name: + names_ev = tag2name[key_tag] + Nt = [] + for key_ev in names_ev: + Nt.append(len(ev_info[key_ev].t)) + + # Sort the earthquakes within each tag based on the number of arrivals. + sorted_Nt = sorted(enumerate(Nt), key=lambda x: x[1], reverse=True) + tag2name[key_tag] = [] + for index, Nt in sorted_Nt: + tag2name[key_tag].append(names_ev[index]) + + return tag2name + +# Function: limit_cluster(ev_info, tag2name, Max) Prioritize selecting the top Max earthquakes within each tag. +def limit_decluster(ev_info, tag2name, Max): + del_key_ev = [] + for key_tag in tag2name: + names_ev = tag2name[key_tag] + + if(len(names_ev) > Max): + tag2name[key_tag] = names_ev[0:Max] + for i in range(Max,len(names_ev)): # Delete earthquakes that exceed the threshold in the sorted list. + del_key_ev.append(names_ev[i]) + + for key_ev in del_key_ev: + del ev_info[key_ev] + + return [ev_info,tag2name] + + + +# %% [markdown] +# Functions: assign weights to earthquakes, stations, and data + +# %% +# Function: box_weighting_ev(ev_info, dlat, dlon, ddep) Assign box-weight to the earthquakes. +def box_weighting_ev(ev_info,dlon,dlat,ddep): + + # categorization + distribute = {} + all_tag_wt = {} + + for key_ev in ev_info: + lat_id = math.floor((ev_info[key_ev].lat) / dlat) + lon_id = math.floor((ev_info[key_ev].lon) / dlon) + dep_id = math.floor((ev_info[key_ev].dep) / ddep) + + tag = '%d_%d_%d'%(lat_id,lon_id,dep_id) + if (tag in distribute): + distribute[tag] += 1 + else: + distribute[tag] = 1 + + max_weight = 0 + for tag in distribute: + all_tag_wt[tag] = 1.0/math.sqrt(distribute[tag]) + max_weight = max(max_weight,all_tag_wt[tag]) + + for key_ev in ev_info: + lat_id = math.floor((ev_info[key_ev].lat) / dlat) + lon_id = math.floor((ev_info[key_ev].lon) / dlon) + dep_id = math.floor((ev_info[key_ev].dep) / ddep) + + tag = '%d_%d_%d'%(lat_id,lon_id,dep_id) + + ev_info[key_ev].tag["weight"] = all_tag_wt[tag]/max_weight + + return ev_info + +# %% +# Function: geographical_weighting_ev_rough(ev_info, dlat, dlon, ddep) Assign geographical weighting to the earthquakes roughly. +def geographical_weighting_ev_rough(ev_info,dlat,dlon,ddep,coefficient = 0.5): + + # categorization + distribute = {} + all_tag_wt = {} + + for key_ev in ev_info: + lat_id = int(ev_info[key_ev].lat/dlat) + lon_id = int(ev_info[key_ev].lon/dlat) + dep_id = int(ev_info[key_ev].dep/ddep) + + + tag = '%d_%d_%d'%(lat_id,lon_id,dep_id) + if (tag in distribute): + distribute[tag] += 1 + else: + distribute[tag] = 1 + + # Calculate the weight of each category. + delta0 = 0 + for tag1 in distribute: + tmp1 = tag1.split('_') + # evlat1 = float(tmp1[0])*dlat; evlon1 = float(tmp1[1])*dlon; evdep1 = float(tmp1[2])*ddep + + for tag2 in distribute: + tmp2 = tag2.split('_') + # evlat2 = float(tmp2[0])*dlat; evlon2 = float(tmp2[1])*dlon; evdep2 = float(tmp2[2])*ddep + + # distance of id + delta_tp = math.sqrt((int(tmp1[0]) - int(tmp2[0]))**2 + (int(tmp1[1]) - int(tmp2[1]))**2 + (int(tmp1[2]) - int(tmp2[2]))**2) + delta0 = delta0 + distribute[tag1] * distribute[tag2] * delta_tp + + delta0 = delta0/(len(ev_info)**2) * coefficient + + max_weight = 0.0 + for tag1 in distribute: + tmp1 = tag1.split('_') + # evlat1 = float(tmp1[0])*dlat; evlon1 = float(tmp1[1])*dlon; evdep1 = float(tmp1[2])*ddep + + weight = 0 + for tag2 in distribute: + tmp2 = tag2.split('_') + # evlat2 = float(tmp2[0])*dlat; evlon2 = float(tmp2[1])*dlon; evdep2 = float(tmp2[2])*ddep + + delta_tp = math.sqrt((int(tmp1[0]) - int(tmp2[0]))**2 + (int(tmp1[1]) - int(tmp2[1]))**2 + (int(tmp1[2]) - int(tmp2[2]))**2) + weight = weight + math.exp(-(delta_tp/delta0)**2) * distribute[tag2] + + all_tag_wt[tag1] = (1.0/weight) + max_weight = max(max_weight,1.0/weight) + + # Assign weights to each earthquake based on its tag. + for key_ev in ev_info: + lat_id = int(ev_info[key_ev].lat/dlat) + lon_id = int(ev_info[key_ev].lon/dlon) + dep_id = int(ev_info[key_ev].dep/ddep) + + tag = '%d_%d_%d'%(lat_id,lon_id,dep_id) + + ev_info[key_ev].tag["weight"] = all_tag_wt[tag]/max_weight + return ev_info + + +# %% +# Function: box_weighting_st(ev_info, st_info, dlat, dlon) Assign geographical weighting to the stations roughly. +def box_weighting_st(ev_info,st_info,dlon,dlat): + + [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info) + + # Integrate all involved stations. + wt_st = {} + name_st = {} + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: + name_rec = ev_info[key_ev].t[key_t][0] + wt_st[name_rec] = -1.0 + name_st[name_rec] = 1 + + # categorization + distribute = {} + all_tag_wt = {} + + # Count the number of stations in each subdomain. + for key_st in name_st: + lat_id = math.floor((st_info[key_st].lat) / dlat) + lon_id = math.floor((st_info[key_st].lon) / dlon) + + tag = '%d_%d'%(lat_id,lon_id) + if (tag in distribute): + distribute[tag] += 1 + else: + distribute[tag] = 1 + + max_weight = 0 + for tag in distribute: + all_tag_wt[tag] = 1.0/math.sqrt(distribute[tag]) + max_weight = max(max_weight,all_tag_wt[tag]) + + # Assign weights to each station based on its tag. + for key_st in name_st: + lat_id = math.floor((st_info[key_st].lat) / dlat) + lon_id = math.floor((st_info[key_st].lon) / dlon) + tag = '%d_%d'%(lat_id,lon_id) + wt_st[key_st] = all_tag_wt[tag]/max_weight + + # modify weight tag in st_info + for key_t in wt_st: + st_info[key_t].tag["weight"] = wt_st[key_t] + + # modify weight of abs data ev_info + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: + name_rec = ev_info[key_ev].t[key_t][0] + ev_info[key_ev].t[key_t][3] = wt_st[name_rec] + + return [ev_info,st_info] + + +# %% +# Function: geographical_weighting_st(ev_info,st_info) Assign geographical weighting to the stations roughly. +def geographical_weighting_st(ev_info,st_info,coefficient = 0.5): + + # Integrate all involved stations. + wt_st = {} + name_st = {} + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: + name_rec = ev_info[key_ev].t[key_t][0] + wt_st[name_rec] = -1.0 + name_st[name_rec] = 1 + + # Calculate the weight of each station. + delta0 = 0 + for key_st1 in name_st: + stlat1 = st_info[key_st1].lat + stlon1 = st_info[key_st1].lon + + for key_st2 in name_st: + stlat2 = st_info[key_st2].lat + stlon2 = st_info[key_st2].lon + + delta_tp = cal_dis(stlat1,stlon1,stlat2,stlon2) + delta0 = delta0 + delta_tp + + delta0 = delta0/(len(wt_st)**2)*coefficient + + max_weight = 0.0 + for key_st1 in name_st: + stlat1 = st_info[key_st1].lat + stlon1 = st_info[key_st1].lon + + weight = 0 + for key_st2 in name_st: + stlat2 = st_info[key_st2].lat + stlon2 = st_info[key_st2].lon + + delta_tp = cal_dis(stlat1,stlon1,stlat2,stlon2) + weight = weight + math.exp(-(delta_tp/delta0)**2) + + wt_st[key_st1] = (1.0/weight) + max_weight = max(max_weight,1.0/weight) + + for key_st1 in wt_st: + wt_st[key_st1] = wt_st[key_st1]/max_weight + + # Add weight to each data point in the earthquakes. + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: + name_rec = ev_info[key_ev].t[key_t][0] + if (not name_rec in wt_st): + ValueError("The station of the data is not in the calculation list") + + if (len(ev_info[key_ev].t[key_t])==3): + ev_info[key_ev].t[key_t].append(wt_st[name_rec]) + elif (len(ev_info[key_ev].t[key_t])==4): + ev_info[key_ev].t[key_t][3] = wt_st[name_rec] + else: + ValueError("Error in the weight information of the absolute traveltime data") + + # modify weight tag in st_info + for key_t in wt_st: + st_info[key_t].tag["weight"] = wt_st[key_t] + + # modify weight of abs data ev_info + for key_ev in ev_info: + for key_t in ev_info[key_ev].t: + name_rec = ev_info[key_ev].t[key_t][0] + ev_info[key_ev].t[key_t][3] = wt_st[name_rec] + + return [ev_info,st_info] + + +# %% [markdown] +# Function: add noise into data + +# %% +# Function:assign_gaussian_noise(): +def assign_gaussian_noise(ev_info,sigma): + + # Record which seismic phases correspond to each station. + st2phase = {} # Station name -> [Keys of absolute arrival time data related to this station] + + + for key_ev in ev_info: + # Absolute arrival time noise + for key_t in ev_info[key_ev].t: + stname = ev_info[key_ev].t[key_t][0] + ev_info[key_ev].t[key_t][2] = ev_info[key_ev].t[key_t][2] + np.random.normal(0,sigma) + if(stname in st2phase): + st2phase[stname].append(key_t) + else: + st2phase[stname] = [key_t] + + for key_ev in ev_info: + # Double-difference arrival time noise + for key_dt in ev_info[key_ev].cs_dt: + stname1 = ev_info[key_ev].cs_dt[key_dt][0] + stname2 = ev_info[key_ev].cs_dt[key_dt][1] + t1 = -999 + t2 = -999 + # Search for the arrival time of the data. + if (stname1 in st2phase): + for key_t in st2phase[stname1]: + if (key_t in ev_info[key_ev].t): + t1 = ev_info[key_ev].t[key_t][2] + break + if (stname2 in st2phase): + for key_t in st2phase[stname2]: + if (key_t in ev_info[key_ev].t): + t2 = ev_info[key_ev].t[key_t][2] + break + + if (t1 == -999 or t2 == -999): + # If there is no absolute arrival time data, the double-difference data residuals increase by a factor of sqrt(2) in noise. + ev_info[key_ev].cs_dt[key_dt][3] = ev_info[key_ev].cs_dt[key_dt][3] + np.random.normal(0,sigma*np.sqrt(2)) + print('no data: ', key_ev, key_dt) + else: + # If there is absolute arrival time data, the double-difference data is obtained by subtraction. + ev_info[key_ev].cs_dt[key_dt][3] = t1 - t2 + + # Common station double-difference arrival time + for key_dt in ev_info[key_ev].cr_dt: + stname = ev_info[key_ev].cr_dt[key_dt][0] + key_ev2 = ev_info[key_ev].cr_dt[key_dt][1] + + t1 = -999 + t2 = -999 + # Search for the arrival time of the data. + if (stname in st2phase): + for key_t in st2phase[stname]: + if (key_t in ev_info[key_ev].t): + t1 = ev_info[key_ev].t[key_t][2] + break + else: + print('not found 1: ', key_ev, key_t) + + for key_t in st2phase[stname]: + if (key_t in ev_info[key_ev2].t): + t2 = ev_info[key_ev2].t[key_t][2] + break + else: + print('not found 2: ', key_ev, key_t) + + if (t1 == -999 or t2 == -999): + # If there is no absolute arrival time data, the double-difference data residuals increase by a factor of sqrt(2) in noise. + ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] + np.random.normal(0,sigma*np.sqrt(2)) + print('no data: ', key_ev, key_dt) + else: + # If there is absolute arrival time data, the double-difference data is obtained by subtraction. + ev_info[key_ev].cr_dt[key_dt][3] = t1 - t2 + + return ev_info + +# %% +# Function:assign_uniform_noise_to_ev(): +def assign_uniform_noise_to_ev(ev_info, range_lat, range_lon, range_dep, range_time): + + # Loop through all earthquakes and assign noise to them. + ev_noise = {} # Name of the earthquake -> noise of [lat,lon,dep,ortime] + # loop list of earthquakes + for key_ev in ev_info: + evname = key_ev + if (evname in ev_noise): + print("error: repeated earthquake name") + exit() + else: + # generate noise + ev_noise[evname] = np.random.uniform(-1,1,4) * np.array([range_lat,range_lon,range_dep,range_time]) + + # Add noise to each data point. + for key_ev in ev_info: + + # Absolute arrival time noise + for key_t in ev_info[key_ev].t: + + ev_info[key_ev].t[key_t][2] = ev_info[key_ev].t[key_t][2] - ev_noise[key_ev][3] + + + # Double-difference arrival time noise (double-difference arrival time remains unchanged) + + # Common station double-difference arrival time + for key_dt in ev_info[key_ev].cr_dt: + key_ev2 = ev_info[key_ev].cr_dt[key_dt][1] + + if (key_ev2 in ev_noise): + ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] - ev_noise[key_ev][3] + ev_noise[key_ev2][3] + else: + print("earthquake %s is not included in ev_list"%(key_ev2)) + ev_noise[key_ev2] = np.random.uniform(-1,1,4) * np.array([range_lat,range_lon,range_dep,range_time]) + ev_info[key_ev].cr_dt[key_dt][3] = ev_info[key_ev].cr_dt[key_dt][3] - ev_noise[key_ev][3] + ev_noise[key_ev2][3] + + + # Add noise to each earthquake. + for key_ev in ev_noise: + ev_info[key_ev].lat = ev_info[key_ev].lat + ev_noise[key_ev][0] + ev_info[key_ev].lon = ev_info[key_ev].lon + ev_noise[key_ev][1] + ev_info[key_ev].dep = abs(ev_info[key_ev].dep + ev_noise[key_ev][2]) + ev_info[key_ev].ortime = ev_info[key_ev].ortime + ev_noise[key_ev][3] + + + return ev_info + +# %% [markdown] +# Functions: generate differential traveltime + +# %% +# Function: generate_cs_dif(ev_info, st_info, dis_thd, azi_thd) Generate double-difference arrival times from absolute arrival times, with inter-station distance less than dis_thd and azimuthal difference less than azi_thd. +# function: generate common source differential traveltime data from absolute traveltime data, the stations separation is less than dis_thd, the azimuth difference is less than azi_thd +def generate_cs_dif(ev_info,st_info,dis_thd,azi_thd): + count_t = 0 + count_cs_dt = 0 + + for key_ev in ev_info: + ev = ev_info[key_ev] + + lat_ev = ev.lat + lon_ev = ev.lon + + # traverse all arrival times + name_st_list = [] # names of stations + t_list = [] # traveltime + wt_list = [] # weight + for key_t in ev.t: + name_st_list.append(ev.t[key_t][0]) + t_list.append(ev.t[key_t][2]) + wt_list.append(ev.t[key_t][3]) + count_t += 1 + + # search for possible double-difference arrival times + for id_st1 in range(len(name_st_list)-1): + name_st1 = name_st_list[id_st1] + lat_st1 = st_info[name_st1].lat + lon_st1 = st_info[name_st1].lon + t_st1 = t_list[id_st1] + wt_st1 = wt_list[id_st1] + + for id_st2 in range(id_st1+1,len(name_st_list)): + name_st2 = name_st_list[id_st2] + lat_st2 = st_info[name_st2].lat + lon_st2 = st_info[name_st2].lon + t_st2 = t_list[id_st2] + wt_st2 = wt_list[id_st2] + + dis = cal_dis(lat_st1,lon_st1,lat_st2,lon_st2) + azi_st1 = cal_azimuth(lat_ev,lon_ev,lat_st1,lon_st1) + azi_st2 = cal_azimuth(lat_ev,lon_ev,lat_st2,lon_st2) + + azi_dif = abs(azi_st1 - azi_st2) + + if(dis < dis_thd and (azi_dif < azi_thd or (360-azi_dif) < azi_thd )): + ev.cs_dt["%s+%s+%s"%(name_st1,name_st2,"P,cs")] = [name_st1,name_st2,"P,cs",t_st1-t_st2,(wt_st1+wt_st2)/2] + count_cs_dt += 1 + + ev_info[key_ev].Ncs_dt = len(ev.cs_dt) + + print('we generate %d common source differential traveltimes from %s absolute traveltimes'%(count_cs_dt,count_t)) + return ev_info + + +# %% +# Function: generate_cr_dif(ev_info, st_info, dis_thd) Generate common station double-difference arrival times from absolute arrival times, with inter-event distance less than dis_thd. +# Function: generate common receiver differential traveltime data from absolute traveltime data, the earthquake separation is less than dis_thd +def generate_cr_dif(ev_info,st_info,dis_thd,azi_thd): + + # Construct mapping:rec2src[name_ev] -> {name_st: [name_ev, name_st, t, wt]; name_st: [name_ev, name_st, t, wt]; ...} + rec2src = build_rec_src_map(ev_info,dis_thd) + print("rec to src map generation finished") + + # Construct double-difference data association mapping:rec2src_pair[key_t] + rec2src_pair = build_rec_src_pair_map(rec2src) + print("rec to src_pair map generation finished") + + for key_t in rec2src_pair: + name_st = key_t.split('+')[0] + lat_st = st_info[name_st].lat + lon_st = st_info[name_st].lon + + for ev_tag in rec2src_pair[key_t]: + name_ev1 = rec2src_pair[key_t][ev_tag][0] + lat_ev1 = ev_info[name_ev1].lat + lon_ev1 = ev_info[name_ev1].lon + dep_ev1 = ev_info[name_ev1].dep + + name_ev2 = rec2src_pair[key_t][ev_tag][1] + lat_ev2 = ev_info[name_ev2].lat + lon_ev2 = ev_info[name_ev2].lon + dep_ev2 = ev_info[name_ev2].dep + + dis_xy = cal_dis(lat_ev1,lon_ev1,lat_ev2,lon_ev2) + dis_z = abs(dep_ev1 - dep_ev2) + dis = math.sqrt(dis_xy**2 + dis_z**2) + if(dis > dis_thd): # limit of the distance between two earthquakes + continue + + azi1 = cal_azimuth(lat_ev1,lon_ev1,lat_st,lon_st) + azi2 = cal_azimuth(lat_ev2,lon_ev2,lat_st,lon_st) + azi_dif = abs(azi1 - azi2) + + if(azi_dif > azi_thd and (360-azi_dif) > azi_thd): # limit of the azimuth difference between two earthquakes + continue + + t_ev1 = ev_info[name_ev1].t[key_t][2] + t_ev2 = ev_info[name_ev2].t[key_t][2] + wt_ev1 = ev_info[name_ev1].t[key_t][3] * ev_info[name_ev1].tag["weight"] + wt_ev2 = ev_info[name_ev2].t[key_t][3] * ev_info[name_ev2].tag["weight"] + # The actual data weight is wt_ev1 + wt_ev2, but in TomoATT calculations, we need to divide it by ev_info[name_ev1].tag["weight"]. + wt = (wt_ev1 + wt_ev2)/2/ev_info[name_ev1].tag["weight"] + + ev_info[name_ev1].cr_dt["%s+%s+%s"%(name_st,name_ev2,"P,cr")] = [name_st,name_ev2,"P,cr",t_ev1-t_ev2,wt] + + # Count the number of double-difference data points. + count_cr_dt = 0 + count_t = 0 + for key_ev in ev_info: + ev_info[key_ev].Ncr_dt = len(ev_info[key_ev].cr_dt) + count_cr_dt += ev_info[key_ev].Ncr_dt + count_t += ev_info[key_ev].Nt + + print('we generate %d common receiver differential traveltimes from %s absolute traveltimes'%(count_cr_dt,count_t)) + + return ev_info + +# Construct mapping: rec2src = {key_t: dict_tag; key_t: dict_tag; ...} +# dict_tag = {tag: list_name_ev; tag: list_name_ev; ...} +# list_name_ev = [name_ev1, name_ev2, ...] +# Assign earthquakes to different subregions based on their locations. The subregion size is dlat * dlon * ddep. When performing common station double-difference calculations, only earthquake pairs within the same subregion or adjacent subregions will be considered. +def build_rec_src_map(ev_info,dis_thd): + rec2src = {} + for key_ev in ev_info: + name_ev = ev_info[key_ev].name + lat = ev_info[key_ev].lat + lon = ev_info[key_ev].lon + dep = ev_info[key_ev].dep + tag_dep = math.floor(dep/dis_thd) + tag_lat = math.floor(lat/180*math.pi*R_earth/dis_thd) + tag_lon = math.floor(lon/180*math.pi*R_earth*math.cos(lat)/dis_thd) + tag = "%d_%d_%d"%(tag_lon,tag_lat,tag_dep) + + + for key_t in ev_info[key_ev].t: + + # create dictionary + if (not key_t in rec2src): + rec2src[key_t] = {tag:[]} + elif (not tag in rec2src[key_t]): + rec2src[key_t][tag] = [] + + # Add data + rec2src[key_t][tag].append(name_ev) + + return rec2src + +# Function: generate_adjacent_tag(tag) Generate tags surrounding the given tag. +def generate_adjacent_tag(tag): # Excluding the tag itself. + adjacent_tag_list = [] + tmp = tag.split('_') + tag_lon = int(tmp[0]) + tag_lat = int(tmp[1]) + tag_dep = int(tmp[2]) + + for i in range(-1,2): + for j in range(-1,2): + for k in range(-1,2): + if(i == 0 and j == 0 and k == 0): + continue + adjacent_tag_list.append("%d_%d_%d"%(tag_lon+i,tag_lat+j,tag_dep+k)) + + return adjacent_tag_list + + +# construct mapping:rec2src_pair +def build_rec_src_pair_map(rec2src): + rec2src_pair = {} + + for key_t in rec2src: + rec2src_pair[key_t] = {} + + for tag in rec2src[key_t]: + name_ev_list1 = rec2src[key_t][tag] + + name_ev_list2 = rec2src[key_t][tag] + adjacent_tag_list = generate_adjacent_tag(tag) + for adjacent_tag in adjacent_tag_list: + if (adjacent_tag in rec2src[key_t]): # If the surrounding tag's region has earthquakes, add them to the earthquake list. + name_ev_list2 = name_ev_list2 + rec2src[key_t][adjacent_tag] + + # Find possible earthquake pairs. + for id_ev1 in range(len(name_ev_list1)-1): + name_ev1 = name_ev_list1[id_ev1] + + for id_ev2 in range(id_ev1+1,len(name_ev_list2)): # Starting from id_ev1 + 1 already excludes duplicate earthquakes within the tag. + name_ev2 = name_ev_list2[id_ev2] + + ev_tag1 = "%s+%s"%(name_ev1,name_ev2) + ev_tag2 = "%s+%s"%(name_ev2,name_ev1) + + if(ev_tag1 in rec2src_pair[key_t] or ev_tag2 in rec2src_pair[key_t]): + continue + + rec2src_pair[key_t][ev_tag1] = [name_ev1,name_ev2] + + + return rec2src_pair + +# %% [markdown] +# Functions: read and write src_rec.dat file + +# %% +# Function: reorder_src(ev) Reorder the earthquake IDs. If the earthquake has no data, the ID is -999. +def reorder_src(ev_info): + + ev_id = 0 + for key_ev in ev_info: + ev = ev_info[key_ev] + + if(ev.Nt + ev.Ncs_dt + ev.Ncr_dt == 0): + ev.id = -999 + else: + ev_info[key_ev].id = ev_id + ev_id += 1 + + return ev_info + + +# %% +# Function: read_src_rec_file(fname) Read the src_rec.dat file. +# +def read_src_rec_file(fname): + ev_info = {} + st_info = {} + + tmp_ev_info = {} + + doc = open(fname,'r') + doc_input = doc.readlines() + doc.close() + + cc = 0 + for info in doc_input: + tmp=info.split() + if (cc == 0): # event line + ev = Event() + # 1 2000 1 2 20 28 37.270 38.2843 39.0241 11.00 3.60 8 1725385 + # id_ev = int(tmp[0]) + ev.id = int(tmp[0]) + year = int(tmp[1]) + month = int(tmp[2]) + day = int(tmp[3]) + hour = int(tmp[4]) + minute = int(tmp[5]) + second = float(tmp[6]) + ev.ortime = UTCDateTime(year,month,day,hour,minute,0) + second + ev.lat = float(tmp[7]) + ev.lon = float(tmp[8]) + ev.dep = float(tmp[9]) + ev.mag = float(tmp[10]) + ev.Nt = 0 + ev.Ncs_dt = 0 + ev.Ncr_dt = 0 + ev.t = {} + ev.cs_dt = {} + ev.cr_dt = {} + ndata = int(tmp[11]) + name_ev = tmp[12] + ev.name = name_ev + cc += 1 + try: + ev.tag["weight"] = float(tmp[13]) + except: + pass + + if (ndata == 0): + cc = 0 + ev_info[name_ev] = ev + + else: # data line + # 1 1 MYA 38.3261 38.4253 1050.0000 P 52.46 6.630 weight + if(len(tmp) < 10): # absolue traveltime data + name_st = tmp[2] + phase = tmp[6] + if (phase == "PG"): + phase = "Pg" + if (phase == "PB"): + phase = "Pb" + if (phase == "PN"): + phase = "Pn" + + if (not name_st in st_info): + st = Station() + st.name = name_st + st.id = float(tmp[1]) + st.lat = float(tmp[3]) + st.lon = float(tmp[4]) + st.ele = float(tmp[5]) + st_info[name_st] = st + + time = float(tmp[7]) + if(len(tmp) == 9): + weight = float(tmp[8]) + else: + weight = 1.0 + ev.t["%s+%s"%(name_st,phase)] = [name_st,phase,time,weight] + ev.Nt += 1 + + else: # differential traveltime data + phase = tmp[11] + if (phase.__contains__("cr")): # common receiver differential traveltime + # evid stid1 stname1 lat1 lon1 eve1 evid2 evname2 lat2 lon2 dep2 phase,cr diftime weight + + name_st1 = tmp[2] + if (not name_st1 in st_info): # add station to the station list + st = Station() + st.name = name_st1 + st.id = float(tmp[1]) + st.lat = float(tmp[3]) + st.lon = float(tmp[4]) + st.ele = float(tmp[5]) + st_info[name_st1] = st + + name_ev2 = tmp[7] + # add earthquake to the temp earthquake list + ev2 = Event() + ev2.name = name_ev2 + ev2.id = float(tmp[6]) + ev2.lat = float(tmp[8]) + ev2.lon = float(tmp[9]) + ev2.dep = float(tmp[10]) + tmp_ev_info[name_ev2] = ev2 + + + dif_time = float(tmp[12]) + if(len(tmp) == 14): + weight = float(tmp[13]) + else: + weight = 1.0 + ev.cr_dt["%s+%s+%s"%(name_st1,name_ev2,phase)] = [name_st1,name_ev2,phase,dif_time,weight] + ev.Ncr_dt += 1 + + else: # common source differential traveltime + # evid stid1 stname1 lat1 lon1 eve1 stid2 stname2 lat2 lon2 ele2 phase,cs diftime weight + + name_st1 = tmp[2] + if (not name_st1 in st_info): + st = Station() + st.name = name_st1 + st.id = len(st_info) + st.lat = float(tmp[3]) + st.lon = float(tmp[4]) + st.ele = float(tmp[5]) + st_info[name_st1] = st + + name_st2 = tmp[7] + if (not name_st2 in st_info): + st = Station() + st.name = name_st2 + st.id = float(tmp[6]) + st.lat = float(tmp[8]) + st.lon = float(tmp[9]) + st.ele = float(tmp[10]) + st_info[name_st2] = st + + dif_time = float(tmp[12]) + if(len(tmp) == 14): + weight = float(tmp[13]) + else: + weight = 1.0 + ev.cs_dt["%s+%s+%s"%(name_st1,name_st2,phase)] = [name_st1,name_st2,phase,dif_time,weight] + ev.Ncs_dt += 1 + + if (cc == ndata): # end of the event data + cc = 0 + ev_info[name_ev] = ev + else: + cc += 1 + + # Add earthquakes from the temporary earthquake list to the main earthquake list. + for key_ev in tmp_ev_info: + if (not key_ev in ev_info): + ev_info[key_ev] = tmp_ev_info[key_ev] + + return [ev_info,st_info] + +# %% +# Function: write_src_rec_file(fname, ev_info, st_info) Output the src_rec.dat file. +def write_src_rec_file(fname,ev_info,st_info): + ev_info = reorder_src(ev_info) + doc_src_rec = open(fname,'w') + + min_lat = 9999 + max_lat = -9999 + min_lon = 9999 + max_lon = -9999 + min_dep = 9999 + max_dep = -9999 + + record_ev = {} + record_st = {} + Nt_total = 0 + Ncs_dt_total = 0 + Ncr_dt_total = 0 + + for key_ev in ev_info: + ev = ev_info[key_ev] + evid = ev.id + year = ev.ortime.year + month = ev.ortime.month + day = ev.ortime.day + hour = ev.ortime.hour + minute = ev.ortime.minute + second = ev.ortime.second + msec = ev.ortime.microsecond + lat_ev = ev.lat + lon_ev = ev.lon + dep_ev = ev.dep + mag = ev.mag + ndata = ev.Nt + ev.Ncs_dt + ev.Ncr_dt + name_ev = ev.name + try: + weight_ev = ev.tag["weight"] + except: + weight_ev = 1.0 + + if(ndata == 0): # if the earthquake has no data, do not output it + continue + + doc_src_rec.write('%7d %6d %2d %2d %2d %2d %5.2f %9.4f %9.4f %9.4f %5.2f %7d %s %7.3f\n'%(\ + evid,year,month,day,hour,minute,second+msec/1000000,lat_ev,lon_ev,dep_ev,mag,ndata,name_ev,weight_ev)) + + min_lat = min(min_lat, lat_ev) + max_lat = max(max_lat, lat_ev) + min_lon = min(min_lon, lon_ev) + max_lon = max(max_lon, lon_ev) + min_dep = min(min_dep, dep_ev) + max_dep = max(max_dep, dep_ev) + + record_ev[name_ev] = 1 # record this earthquake + Nt_total += ev.Nt + Ncs_dt_total += ev.Ncs_dt + Ncr_dt_total += ev.Ncr_dt + + for key_t in ev.t: + data = ev.t[key_t] + st = st_info[data[0]] + stid = st.id + name_st = st.name + lat_st = st.lat + lon_st = st.lon + ele_st = st.ele + phase = data[1] + time = data[2] + try: + weight_data = data[3] + except: + weight_data = 1.0 + doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \n'%(evid,stid,name_st,lat_st,lon_st,ele_st,phase,time,weight_data)) + + min_lat = min(min_lat, lat_st) + max_lat = max(max_lat, lat_st) + min_lon = min(min_lon, lon_st) + max_lon = max(max_lon, lon_st) + min_dep = min(min_dep, -ele_st/1000) + max_dep = max(max_dep, -ele_st/1000) + + record_st[name_st] = 1 # record this station + + for key_t in ev.cs_dt: + data = ev.cs_dt[key_t] + st1 = st_info[data[0]] + stid1 = st1.id + name_st1= st1.name + lat_st1 = st1.lat + lon_st1 = st1.lon + ele_st1 = st1.ele + st2 = st_info[data[1]] + stid2 = st2.id + name_st2= st2.name + lat_st2 = st2.lat + lon_st2 = st2.lon + ele_st2 = st2.ele + phase = data[2] + time = data[3] + try: + weight_data = data[4] + except: + weight_data = 1.0 + doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \n'%(\ + evid,stid1,name_st1,lat_st1,lon_st1,ele_st1,stid2,name_st2,lat_st2,lon_st2,ele_st2,phase,time,weight_data)) + + min_lat = min(min_lat, lat_st1) + max_lat = max(max_lat, lat_st1) + min_lon = min(min_lon, lon_st1) + max_lon = max(max_lon, lon_st1) + min_dep = min(min_dep, -ele_st1/1000) + max_dep = max(max_dep, -ele_st1/1000) + + min_lat = min(min_lat, lat_st2) + max_lat = max(max_lat, lat_st2) + min_lon = min(min_lon, lon_st2) + max_lon = max(max_lon, lon_st2) + min_dep = min(min_dep, -ele_st2/1000) + max_dep = max(max_dep, -ele_st2/1000) + + record_st[name_st1] = 1 # record this station + record_st[name_st2] = 1 # record this station + + for key_t in ev.cr_dt: + data = ev.cr_dt[key_t] + st = st_info[data[0]] + stid = st.id + name_st = st.name + lat_st = st.lat + lon_st = st.lon + ele_st = st.ele + ev2 = ev_info[data[1]] + evid2 = ev2.id + name_ev2= ev2.name + lat_ev2 = ev2.lat + lon_ev2 = ev2.lon + dep_ev2 = ev2.dep + phase = data[2] + time = data[3] + try: + weight_data = data[4] + except: + weight_data = 1.0 + doc_src_rec.write('%7d %7d %6s %9.4f %9.4f %9.4f %7d %6s %9.4f %9.4f %9.4f %s %8.4f %7.3f \n'%(\ + evid,stid,name_st,lat_st,lon_st,ele_st,evid2,name_ev2,lat_ev2,lon_ev2,dep_ev2,phase,time,weight_data)) + + min_lat = min(min_lat, lat_st) + max_lat = max(max_lat, lat_st) + min_lon = min(min_lon, lon_st) + max_lon = max(max_lon, lon_st) + min_dep = min(min_dep, -ele_st/1000) + max_dep = max(max_dep, -ele_st/1000) + + min_lat = min(min_lat, lat_ev2) + max_lat = max(max_lat, lat_ev2) + min_lon = min(min_lon, lon_ev2) + max_lon = max(max_lon, lon_ev2) + min_dep = min(min_dep, dep_ev2) + max_dep = max(max_dep, dep_ev2) + + record_ev[name_ev2] = 1 # record this station + record_st[name_st] = 1 # record this station + + doc_src_rec.close() + + print("src_rec.dat has been outputed: %d events, %d stations, %d abs traveltime, %d cs_dif traveltime, %d cr_dif traveltime. " \ + %(len(record_ev),len(record_st),Nt_total,Ncs_dt_total,Ncr_dt_total)) + print("earthquake and station region, lat: %6.1f - %6.1f, lon: %6.1f - %6.1f, dep: %6.1f - %6.1f"%(min_lat,max_lat,min_lon,max_lon,min_dep,max_dep) ) + + +# %% +# Function: write_src_list_file(fname, ev_info) Output the event list file. +def write_src_list_file(fname,ev_info): + doc_ev_list = open(fname,'w') + + for key_ev in ev_info: + ev = ev_info[key_ev] + evid = ev.id + lat_ev = ev.lat + lon_ev = ev.lon + dep_ev = ev.dep + mag = ev.mag + name_ev = ev.name + if (ev.id == -999): # if the earthquake has no data, do not output it + continue + doc_ev_list.write("%7d %s %s %9.4f %9.4f %9.4f %5.2f \n"%(evid,name_ev,ev.ortime,lat_ev,lon_ev,dep_ev,mag)) + doc_ev_list.close() + +# %% +# Function: write_rec_list_file(fname, ev_info, st_info) Output the station list file. +def write_rec_list_file(fname,ev_info,st_info): + doc_st_list = open(fname,'w') + + st_list = {} + for key_ev in ev_info: + ev = ev_info[key_ev] + + for key_t in ev.t: + data = ev.t[key_t] + st = st_info[data[0]] + name_st = st.name + lat_st = st.lat + lon_st = st.lon + ele_st = st.ele + if(not name_st in st_list): + doc_st_list.write("%6s %9.4f %9.4f %10.4f \n"%(name_st,lat_st,lon_st,ele_st)) + st_list[name_st] = 1 + + for key_t in ev.cs_dt: + data = ev.cs_dt[key_t] + st1 = st_info[data[0]] + name_st1= st1.name + lat_st1 = st1.lat + lon_st1 = st1.lon + ele_st1 = st1.ele + st2 = st_info[data[0]] + name_st2= st2.name + lat_st2 = st2.lat + lon_st2 = st2.lon + ele_st2 = st2.ele + if(not name_st1 in st_list): + doc_st_list.write("%6s %9.4f %9.4f %10.4f \n"%(name_st1,lat_st1,lon_st1,ele_st1)) + st_list[name_st1] = 1 + if(not name_st2 in st_list): + doc_st_list.write("%6s %9.4f %9.4f %10.4f \n"%(name_st2,lat_st2,lon_st2,ele_st2)) + st_list[name_st2] = 1 + + for key_t in ev.cr_dt: + data = ev.cr_dt[key_t] + st = st_info[data[0]] + name_st = st.name + lat_st = st.lat + lon_st = st.lon + ele_st = st.ele + if(not name_st in st_list): + doc_st_list.write("%6s %9.4f %9.4f %10.4f \n"%(name_st,lat_st,lon_st,ele_st)) + st_list[name_st] = 1 + + doc_st_list.close() + +# %% [markdown] +# Functions: read objective function file + +# %% +# Function: read_objective_function_file(path) +def read_objective_function_file(path): + + full_curve = [] + location_curve = [] + model_curve = [] + + with open('%s/objective_function.txt'%(path)) as f: + for i,line in enumerate(f): + tmp = line.split(',') + if (tmp[0].__contains__("#")): + continue # skip the comment line + + iter = int(tmp[0]) + tag = tmp[1] + obj = float(tmp[2]) + obj_abs = float(tmp[3]) + obj_cs = float(tmp[4]) + obj_cr = float(tmp[5]) + obj_tele = float(tmp[6]) + tmp2 = tmp[7].split('/') + mean = float(tmp2[0]) + std = float(tmp2[1]) + tmp2 = tmp[8].split('/') + mean_abs = float(tmp2[0]) + std_abs = float(tmp2[1]) + tmp2 = tmp[9].split('/') + mean_cs = float(tmp2[0]) + std_cs = float(tmp2[1]) + tmp2 = tmp[10].split('/') + mean_cr = float(tmp2[0]) + std_cr = float(tmp2[1]) + tmp2 = tmp[11].split('/') + mean_tele = float(tmp2[0]) + std_tele = float(tmp2[1]) + + full_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele]) + if tag.__contains__("relocation"): + location_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele]) + if tag.__contains__("model"): + model_curve.append([obj,obj_abs,obj_cs,obj_cr,obj_tele,mean,std,mean_abs,std_abs,mean_cs,std_cs,mean_cr,std_cr,mean_tele,std_tele]) + + return np.array(full_curve),np.array(location_curve),np.array(model_curve) + +# %% [markdown] +# Functions: read inversion grid file + +# %% +# Function: read the inversion grid file +def read_inversion_grid_file(path): + + inv_grid_vel = [] + inv_grid_ani = [] + + switch = False + igrid = -1 + with open('%s/inversion_grid.txt'%(path)) as f: + tmp_inv_grid = [] + for i,line in enumerate(f): + + # read the number of inversion grid in dep, lat, lon directions + if(i==0): + tmp = line.split() + ndep = int(tmp[1]) + nlines = 3*ndep+1 # The number of rows for each inversion grid is 3*ndep+1 + + iline = i % nlines + + if(iline == 0): # info: number of inversion grid + tmp = line.split() + if (int(tmp[0]) > igrid): + igrid = int(tmp[0]) + else: # change from vel to ani + switch = True + igrid = int(tmp[0]) + + else: # info location of inversion grid + iline_sub = (iline-1) % 3 + if(iline_sub == 0): # dep + tmp = line.split() + dep = float(tmp[0]) + if(iline_sub == 1): # list of lat + lat_list = line.split() + if(iline_sub == 2): # list of lon + lon_list = line.split() + + # add inversion grid + for lat in lat_list: + for lon in lon_list: + tmp_inv_grid.append([float(lon), float(lat), dep]) + + if(iline == nlines-1): # the last line of inversion grid + if(switch): + inv_grid_ani.append(tmp_inv_grid) + else: + inv_grid_vel.append(tmp_inv_grid) + tmp_inv_grid = [] + + return [np.array(inv_grid_vel),np.array(inv_grid_ani)] + +# %% [markdown] +# Functions: for plotting + +# %% +# Function: fig_ev_st_distribution_dep(ev_info, st_info) Plot the distribution of the earthquakes and stations, color-coded by earthquake depth. +import matplotlib.pyplot as plt +from matplotlib.gridspec import GridSpec + +def fig_ev_st_distribution_dep(ev_info,st_info): + + [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info) + [lon_st,lat_st,ele_st,wt_st] = data_lon_lat_ele_wt_st(ev_info,st_info) + + min_lon = min(min(lon_ev),min(lon_st)) + max_lon = max(max(lon_ev),max(lon_st)) + + min_lat = min(min(lat_ev),min(lat_st)) + max_lat = max(max(lat_ev),max(lat_st)) + + max_dep = max(dep_ev) + + # Insert a value that does not affect the plot to make the colorbar range look better. + lon_ev = np.insert(lon_ev, 0, 9999); lat_ev = np.insert(lat_ev, 0, 9999); dep_ev = np.insert(dep_ev, 0, 0); + + fig = plt.figure(figsize=(12,12)) + gridspace = GridSpec(12,12,figure = fig) + + xrange = max_lon - min_lon + 1.0 + yrange = max_lat - min_lat + 1.0 + + if (xrange > yrange): + fig_x_size = 6 + fig_y_size = round(6*yrange/xrange) + else: + fig_x_size = round(6*xrange/yrange) + fig_y_size = 6 + + + ax1 = fig.add_subplot(gridspace[0:fig_y_size,0:fig_x_size]) + + bar_ev = ax1.scatter(lon_ev,lat_ev,c=dep_ev,cmap="jet",label = "src",s = 3) + # ax1.plot(lon_st,lat_st,'rv',label = "rec",markersize = 6) + bar_st = ax1.scatter(lon_st,lat_st,c="red",label = "rec",s = 100,marker='v',edgecolors='white') + + ax1.legend(fontsize = 14) + ax1.tick_params(axis='x',labelsize=18) + ax1.tick_params(axis='y',labelsize=18) + ax1.set_xlabel('Lon',fontsize=18) + ax1.set_ylabel('Lat',fontsize=18) + ax1.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1)) + ax1.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1)) + + + ax2 = fig.add_subplot(gridspace[0:fig_y_size, fig_x_size+1 : fig_x_size+3]) + + ax2.scatter(dep_ev,lat_ev,c=dep_ev,cmap="jet",label = "src",s = 3) + + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_xlabel('Dep',fontsize=18) + ax2.set_ylabel('Lat',fontsize=18) + ax2.set_xlim((-max_dep*0.05,max_dep*1.1)) + ax2.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1)) + + + ax3 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+3,0:fig_x_size]) + + ax3.scatter(lon_ev,dep_ev,c=dep_ev,cmap="jet",label = "src",s = 3) + + ax3.tick_params(axis='x',labelsize=18) + ax3.tick_params(axis='y',labelsize=18) + ax3.set_xlabel('Lon',fontsize=18) + ax3.set_ylabel('Dep',fontsize=18) + ax3.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1)) + ax3.set_ylim((-max_dep*0.05,max_dep*1.1)) + ax3.invert_yaxis() + + # Place the colorbar on a new axis. + ax4 = fig.add_subplot(gridspace[fig_y_size+2:fig_y_size+3,fig_x_size+1:fig_x_size+3]) + cbar1 = plt.colorbar(bar_ev, ax=ax4,orientation='horizontal') + cbar1.set_label('Depth of earthquakes',fontsize=16) + cbar1.ax.tick_params(axis='x', labelsize=16) # Colorbar font size. + + # Hide the borders of the axes. + ax4.spines['top'].set_visible(False) + ax4.spines['right'].set_visible(False) + ax4.spines['bottom'].set_visible(False) + ax4.spines['left'].set_visible(False) + + # Hide the tick values of the axes. + ax4.set_xticks([]) + ax4.set_yticks([]) + + +# %% +# Function: fig_ev_st_distribution_wt(ev_info, st_info) Plot the distribution of the earthquakes and stations, color-coded by weight. +import matplotlib.pyplot as plt +from matplotlib.gridspec import GridSpec +from matplotlib.colors import ListedColormap +from mpl_toolkits.axes_grid1 import make_axes_locatable +import math + +def fig_ev_st_distribution_wt(ev_info,st_info): + + + [lon_ev,lat_ev,dep_ev,wt_ev] = data_lon_lat_dep_wt_ev(ev_info) + [lon_st,lat_st,ele_st,wt_st] = data_lon_lat_ele_wt_st(ev_info,st_info) + + # Insert a value that does not affect the plot to make the colorbar range look better. + lon_ev = np.insert(lon_ev, 0, lon_ev[0]); lat_ev = np.insert(lat_ev, 0, lat_ev[0]); dep_ev = np.insert(dep_ev, 0, dep_ev[0]); wt_ev = np.insert(wt_ev, 0, 0.0) + lon_ev = np.insert(lon_ev, 0, lon_ev[0]); lat_ev = np.insert(lat_ev, 0, lat_ev[0]); dep_ev = np.insert(dep_ev, 0, dep_ev[0]); wt_ev = np.insert(wt_ev, 0, 1.0) + lon_st = np.insert(lon_st, 0, lon_st[0]); lat_st = np.insert(lat_st, 0, lat_st[0]); ele_st = np.insert(ele_st, 0, ele_st[0]); wt_st = np.insert(wt_st, 0, 0.0) + lon_st = np.insert(lon_st, 0, lon_st[0]); lat_st = np.insert(lat_st, 0, lat_st[0]); ele_st = np.insert(ele_st, 0, ele_st[0]); wt_st = np.insert(wt_st, 0, 1.0) + + min_lon = min(min(lon_ev),min(lon_st)) + max_lon = max(max(lon_ev),max(lon_st)) + + min_lat = min(min(lat_ev),min(lat_st)) + max_lat = max(max(lat_ev),max(lat_st)) + + max_dep = max(dep_ev) + + fig = plt.figure(figsize=(12,12)) + gridspace = GridSpec(12,12,figure = fig) + + xrange = max_lon - min_lon + 1.0 + yrange = max_lat - min_lat + 1.0 + + if (xrange > yrange): + fig_x_size = 6 + fig_y_size = round(6*yrange/xrange) + else: + fig_x_size = round(6*xrange/yrange) + fig_y_size = 6 + + + ax1 = fig.add_subplot(gridspace[0:fig_y_size,0:fig_x_size]) + + bar_ev = ax1.scatter(lon_ev,lat_ev,c=wt_ev,cmap="jet",label = "src",s = 3) + bar_st = ax1.scatter(lon_st,lat_st,c=wt_st,cmap="jet",label = "rec",s = 100,marker='^',edgecolors='white') + + ax1.legend(fontsize = 14) + ax1.tick_params(axis='x',labelsize=18) + ax1.tick_params(axis='y',labelsize=18) + ax1.set_xlabel('Lon',fontsize=18) + ax1.set_ylabel('Lat',fontsize=18) + ax1.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1)) + ax1.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1)) + + + ax2 = fig.add_subplot(gridspace[0:fig_y_size, fig_x_size+1 : fig_x_size+3]) + + ax2.scatter(dep_ev,lat_ev,c=wt_ev,cmap="jet",label = "src",s = 3) + + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_xlabel('Dep',fontsize=18) + ax2.set_ylabel('Lat',fontsize=18) + ax2.set_xlim((-max_dep*0.05,max_dep*1.1)) + ax2.set_ylim((min_lat - (max_lat - min_lat)*0.1,max_lat + (max_lat - min_lat)*0.1)) + + + ax3 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+3,0:fig_x_size]) + + ax3.scatter(lon_ev,dep_ev,c=wt_ev,cmap="jet",label = "src",s = 3) + + ax3.tick_params(axis='x',labelsize=18) + ax3.tick_params(axis='y',labelsize=18) + ax3.set_xlabel('Lon',fontsize=18) + ax3.set_ylabel('Dep',fontsize=18) + ax3.set_xlim((min_lon - (max_lon - min_lon)*0.1,max_lon + (max_lon - min_lon)*0.1)) + ax3.set_ylim((-max_dep*0.05,max_dep*1.1)) + ax3.invert_yaxis() + + # Place the colorbar on a new axis. + ax4 = fig.add_subplot(gridspace[fig_y_size+2:fig_y_size+3,fig_x_size+1:fig_x_size+3]) + cbar1 = plt.colorbar(bar_st, ax=ax4,orientation='horizontal') + cbar1.set_label('Weight of stations',fontsize=16) + cbar1.ax.tick_params(axis='x', labelsize=16) # colorbar font size. + # Hide the borders of the axes. + ax4.spines['top'].set_visible(False) + ax4.spines['right'].set_visible(False) + ax4.spines['bottom'].set_visible(False) + ax4.spines['left'].set_visible(False) + + # Hide the tick values of the axes. + ax4.set_xticks([]) + ax4.set_yticks([]) + + # Place the colorbar on a new axis. + ax5 = fig.add_subplot(gridspace[fig_y_size+1:fig_y_size+2,fig_x_size+1:fig_x_size+3]) + cbar1 = plt.colorbar(bar_ev, ax=ax5,orientation='horizontal') + cbar1.set_label('Weight of earthquakes',fontsize=16) + cbar1.ax.tick_params(axis='x', labelsize=16) # colorbar font size. + # Hide the borders of the axes. + ax5.spines['top'].set_visible(False) + ax5.spines['right'].set_visible(False) + ax5.spines['bottom'].set_visible(False) + ax5.spines['left'].set_visible(False) + + # Hide the tick values of the axes. + ax5.set_xticks([]) + ax5.set_yticks([]) + + +# %% +# Plot and function: plot the distance-time scatter plot, remove the outliers. +# Limit the data within the range defined by the line time = dis * slope + intercept and the bounds up and down. +# Remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up. + +def fig_data_plot_remove_outliers(ev_info,st_info,slope,intercept,up,down,dis_min,dis_max): + + fig = plt.figure(figsize=(10,10)) + gridspace = GridSpec(6,6,figure = fig) + ax2 = fig.add_subplot(gridspace[0:6, 0:6]) + + # plot original data + [dis_obs,time_obs] = data_dis_time(ev_info,st_info) + ax2.plot(dis_obs,time_obs,'r.',markersize=1.5,label = "discarded") + + # remove outliers, only retain data satisfying: slope * dis + intercept + down < time < slope * dis + intercept + up + ev_info = limit_data_residual(ev_info,st_info,slope,intercept,up,down) + + [dis_obs,time_obs] = data_dis_time(ev_info,st_info) + ax2.plot(dis_obs,time_obs,'b.',markersize=1.5,label = "retained") + + ax2.plot([dis_min,dis_max],[slope*dis_min+intercept+up,slope*dis_max+intercept+up],'b-',linewidth=2) + ax2.plot([dis_min,dis_max],[slope*dis_min+intercept+down,slope*dis_max+intercept+down],'b-',linewidth=2) + ax2.plot([dis_min,dis_max],[slope*dis_min+intercept,slope*dis_max+intercept],'k-',linewidth=2) + + ax2.legend(fontsize = 14) + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_xlabel('Distance (km)',fontsize=18) + ax2.set_ylabel('Traveltime',fontsize=18) + ax2.set_xlim((dis_min,dis_max)) + ax2.set_ylim((intercept+down-5,slope*dis_max+intercept+up+5)) + + return ev_info + +# %% +# Plot: distance-time scatter plot of given phases. + +def fig_data_plot_phase(ev_info,st_info,phase_list,color_list,dis_min,dis_max): + + [dis_obs_phase,time_obs_phase] = data_dis_time_phase(ev_info,st_info,phase_list) + + regression = {} + # Calculate the least squares y = ax+b + for key_phase in phase_list: + X = dis_obs_phase[key_phase] + Y = time_obs_phase[key_phase] + + if(len(X)>20): + regression[key_phase] = linear_regression(X,Y) + else: + print("No enough data: %d, for %s"%(len(X),key_phase)) + regression[key_phase] = [0,0,0] + + + # draw + fig = plt.figure(figsize=(10,10)) + gridspace = GridSpec(6,6,figure = fig) + ax2 = fig.add_subplot(gridspace[0:6, 0:6]) + y1 = 99999; y2 = -99999 + + # scatter plot + for iphase in range(len(phase_list)): + phase = phase_list[iphase] + color = color_list[iphase] + ax2.plot(dis_obs_phase[phase],time_obs_phase[phase],'%s.'%(color),markersize=1) + + # linear regression plot + for iphase in range(len(phase_list)): + phase = phase_list[iphase] + color = color_list[iphase] + (slope,intercept,SEE)= regression[phase] + ax2.plot([dis_min,dis_max],[dis_min*slope+intercept,dis_max*slope+intercept],'%s-'%(color),linewidth=2,label = "%s: a,b,SEE=%5.2f,%5.2f,%5.2f"%(phase,slope,intercept,SEE)) + y1 = min(y1,intercept-5) + y2 = max(y2,dis_max*slope+intercept+5) + + ax2.legend(fontsize = 14) + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_xlabel('Distance (km)',fontsize=18) + ax2.set_ylabel('Traveltime (s)',fontsize=18) + ax2.set_xlim((dis_min,dis_max)) + + + for iphase in range(len(phase_list)): + try: + y1 = min(y1,min(time_obs_phase[phase])) + y2 = max(y2,max(time_obs_phase[phase])) + except: + pass + ax2.set_ylim((y1,y2)) + + title = "" + for phase in dis_obs_phase: + title = title + "%s(%d) "%(phase,len(dis_obs_phase[phase])) + + ax2.set_title(title) + + print("a is slope, b is intercept, SEE is standard error of estimate") + +# %% [markdown] +# Functions: results analysis and evaluation + +# %% +# plot: plot the residual histogram of the initial and final model +def fig_residual_histogram(fn_syn_init,fn_syn_final,fn_obs,range_l,range_r,Nbar,tag1 = "initial",tag2 = "final"): + + # read synthetic traveltime data in the initial model + [ev_info_syn_init, st_info_syn_init] = read_src_rec_file(fn_syn_init) + time_syn_init = data_dis_time(ev_info_syn_init,st_info_syn_init)[1] + + # read synthetic traveltime data in the final model + [ev_info_syn_final, st_info_syn_final] = read_src_rec_file(fn_syn_final) + time_syn_final = data_dis_time(ev_info_syn_final,st_info_syn_final)[1] + + # read observed traveltime data + [ev_info_obs, st_info_obs] = read_src_rec_file(fn_obs) + time_obs = data_dis_time(ev_info_obs,st_info_obs)[1] + + fig = plt.figure(figsize=(6,6)) + gridspace = GridSpec(6,6,figure = fig) + + ax2 = fig.add_subplot(gridspace[0:6, 0:6]) + + bins=np.linspace(range_l,range_r,Nbar) + error_init = time_syn_init - time_obs + error_final = time_syn_final - time_obs + + hist_init, _, _ = ax2.hist(error_init,bins=bins,histtype='step', edgecolor = "red", linewidth = 2, + label = "%s: std = %5.3f s, mean = %5.3f s"%(tag1,np.std(error_init),np.mean(error_init))) + + hist_final, _, _ = ax2.hist(error_final,bins=bins,alpha = 0.5, color = "blue", + label = "%s: std = %5.3f s, mean = %5.3f s"%(tag2,np.std(error_final),np.mean(error_final))) + + print("residual for ",tag1," model is: ","mean: ",np.mean(error_init),"sd: ",np.std(error_init)) + print("residual for ",tag2," model is: ","mean: ",np.mean(error_final),"sd: ",np.std(error_final)) + ax2.legend(fontsize=14) + + ax2.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1) + ax2.set_ylim(0,1.3*max(max(hist_init),max(hist_final))) + + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_ylabel('Number of data',fontsize=18) + ax2.set_xlabel('Traveltime residuals (s)',fontsize=18) + ax2.set_title("$t_{syn} - t_{obs}$",fontsize=18) + ax2.grid() + + +# %% +# plot: plot the residual histogram of the initial and final model +def fig_data_difference_histogram(fn_A,fn_B,range_l,range_r,Nbar): + + # read data A + [ev_info_A, st_info_A] = read_src_rec_file(fn_A) + + # read data B + [ev_info_B, st_info_B] = read_src_rec_file(fn_B) + + # absolute traveltime residual + error_t = [] + for key_ev in ev_info_A: + for key_t in ev_info_A[key_ev].t: + data_A = ev_info_A[key_ev].t[key_t] + if (key_ev in ev_info_B and key_t in ev_info_B[key_ev].t): + data_B = ev_info_B[key_ev].t[key_t] + error_t.append(data_A[2] - data_B[2]) + + # common-source differential traveltime residual + error_cs_dt = [] + for key_ev in ev_info_A: + for key_dt in ev_info_A[key_ev].cs_dt: + data_A = ev_info_A[key_ev].cs_dt[key_dt] + if (key_ev in ev_info_B and key_dt in ev_info_B[key_ev].cs_dt): + data_B = ev_info_B[key_ev].cs_dt[key_dt] + error_cs_dt.append(data_A[3] - data_B[3]) + else: + print(key_ev,key_dt) + + # common-receiver differential traveltime residual + error_cr_dt = [] + for key_ev in ev_info_A: + for key_dt in ev_info_A[key_ev].cr_dt: + data_A = ev_info_A[key_ev].cr_dt[key_dt] + if (key_ev in ev_info_B and key_dt in ev_info_B[key_ev].cr_dt): + data_B = ev_info_B[key_ev].cr_dt[key_dt] + error_cr_dt.append(data_A[3] - data_B[3]) + + # plot + fig = plt.figure(figsize=(14,6)) + gridspace = GridSpec(6,14,figure = fig) + + + ax2 = fig.add_subplot(gridspace[0:6, 0:6]) + bins=np.linspace(range_l,range_r,Nbar) + # hist_t, _, _ = ax2.hist(error_t,bins=bins,histtype='step', edgecolor = "red", linewidth = 2, + # label = "noise: std = %5.3f s, mean = %5.3f s"%(np.std(error_t),np.mean(error_t))) + hist_t, _, _ = ax2.hist(error_t,bins=bins,alpha = 0.5, color = "blue", + label = "noise: std = %5.3f s, mean = %5.3f s"%(np.std(error_t),np.mean(error_t))) + + ax2.legend(fontsize=14) + ax2.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1) + try: + ax2.set_ylim(0,1.3*max(hist_t)) + except: + ax2.set_ylim(0,1.0) + ax2.tick_params(axis='x',labelsize=18) + ax2.tick_params(axis='y',labelsize=18) + ax2.set_ylabel('Number of data',fontsize=18) + ax2.set_xlabel('Noise (s)',fontsize=18) + ax2.set_title("Noise of traveltime",fontsize=18) + + + ax3 = fig.add_subplot(gridspace[0:6,8:14]) + bins=np.linspace(range_l,range_r,Nbar) + # hist_t, _, _ = ax3.hist(error_t,bins=bins,histtype='step', edgecolor = "red", linewidth = 2, + # label = "noise: std = %5.3f s, mean = %5.3f s"%(np.std(error_t),np.mean(error_t))) + hist_cs_dt, _, _ = ax3.hist(error_cs_dt,bins=bins,alpha = 0.5, color = "blue", + label = "noise: std = %5.3f s, mean = %5.3f s"%(np.std(error_cs_dt),np.mean(error_cs_dt))) + + ax3.legend(fontsize=14) + ax3.set_xlim(range_l - abs(range_l)*0.1,range_r + abs(range_r)*0.1) + try: + ax3.set_ylim(0,1.3*max(hist_cs_dt)) + except: + ax3.set_ylim(0,1.0) + ax3.tick_params(axis='x',labelsize=18) + ax3.tick_params(axis='y',labelsize=18) + ax3.set_ylabel('Number of data',fontsize=18) + ax3.set_xlabel('Noise (s)',fontsize=18) + ax3.set_title("Noise of differential traveltime",fontsize=18) + + diff --git a/examples/utils/svel13_chen.cpt b/examples/utils/svel13_chen.cpt new file mode 100644 index 0000000..a985d6f --- /dev/null +++ b/examples/utils/svel13_chen.cpt @@ -0,0 +1,15 @@ + -0.7000E+01 166 0 0 -0.6000E+01 225 0 0 + -0.6000E+01 225 0 0 -0.5000E+01 255 75 0 + -0.5000E+01 255 75 0 -0.4000E+01 255 132 0 + -0.4000E+01 255 132 0 -0.3000E+01 255 198 0 + -0.3000E+01 255 198 0 -0.2000E+01 255 255 0 + -0.2000E+01 255 255 0 -0.1000E+00 255 255 255 + -0.1000E+00 255 255 255 0.1000E+00 255 255 255 + 0.1000E+00 255 255 255 0.2000E+01 0 255 255 + 0.2000E+01 0 255 255 0.3000E+01 90 205 255 + 0.3000E+01 90 205 255 0.4000E+01 26 160 255 + 0.4000E+01 26 160 255 0.5000E+01 0 100 255 + 0.5000E+01 0 100 255 0.6000E+01 0 50 200 + 0.6000E+01 0 50 200 0.7000E+01 0 10 160 +B 166 0 0 +F 0 10 160 diff --git a/external_libs/.DS_Store b/external_libs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..18c14579c6468f8ab1a5ebe2e19be2b1db2c0bcf GIT binary patch literal 6148 zcmeHKJ5Izv4D~Eq1kr3sIR!06I6+v28l+qRc2@$VWRqf%pv#fC1vNL~`J+I75)}eu zOZJ<1?3u|+6vspq)=#^XXhlQ`lyPwkGa)?BI+BHXcrwTu&s0%K7v+6gjH2D~8yV1t zd!R?!(+hohe%rcgzzyYbn6T_1J1x-X8<*uB{@-a>kK#p&OpZi ze;*>0F*9rx<TGhX4opi1MwdLp}~za@S_ZT0FaPM$^ZZW literal 0 HcmV?d00001 diff --git a/external_libs/CMakeLists.txt b/external_libs/CMakeLists.txt new file mode 100644 index 0000000..72ce202 --- /dev/null +++ b/external_libs/CMakeLists.txt @@ -0,0 +1,60 @@ +function(initialize_submodule DIRECTORY) + if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git) + find_package(Git QUIET REQUIRED) + message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git does not exist. Initializing ${DIRECTORY} submodule ...") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init ${DIRECTORY} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_EXIT_CODE) + if(NOT GIT_EXIT_CODE EQUAL "0") + message(FATAL_ERROR "${GIT_EXECUTABLE} submodule update --init dependencies/${DIRECTORY} failed with exit code ${GIT_EXIT_CODE}, please checkout submodules") + endif() + endif() +endfunction(initialize_submodule) + + +initialize_submodule(yaml-cpp) + +# Apply patch to yaml-cpp to fix missing cstdint include +set(PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/yaml-cpp-cstdint.patch") +set(TARGET_FILE "${CMAKE_CURRENT_SOURCE_DIR}/yaml-cpp/src/emitterutils.cpp") + +if(EXISTS ${PATCH_FILE} AND EXISTS ${TARGET_FILE}) + # Check if the patch has already been applied by looking for cstdint include + file(READ ${TARGET_FILE} FILE_CONTENTS) + string(FIND "${FILE_CONTENTS}" "#include " CSTDINT_FOUND) + + if(CSTDINT_FOUND EQUAL -1) + message(STATUS "Applying yaml-cpp cstdint patch...") + find_program(PATCH_PROGRAM patch) + if(PATCH_PROGRAM) + execute_process( + COMMAND ${PATCH_PROGRAM} -p1 -i ${PATCH_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/yaml-cpp + RESULT_VARIABLE PATCH_RESULT + OUTPUT_QUIET + ERROR_QUIET + ) + if(PATCH_RESULT EQUAL 0) + message(STATUS "yaml-cpp patch applied successfully") + else() + message(WARNING "Failed to apply yaml-cpp patch, trying manual fix...") + # Fallback: manual insertion + file(READ ${TARGET_FILE} ORIGINAL_CONTENT) + string(REPLACE "#include \n" "#include \n#include \n" PATCHED_CONTENT "${ORIGINAL_CONTENT}") + file(WRITE ${TARGET_FILE} "${PATCHED_CONTENT}") + message(STATUS "Manual yaml-cpp fix applied") + endif() + else() + message(STATUS "patch command not found, applying manual fix...") + # Manual insertion if patch command is not available + file(READ ${TARGET_FILE} ORIGINAL_CONTENT) + string(REPLACE "#include \n" "#include \n#include \n" PATCHED_CONTENT "${ORIGINAL_CONTENT}") + file(WRITE ${TARGET_FILE} "${PATCHED_CONTENT}") + message(STATUS "Manual yaml-cpp fix applied") + endif() + else() + message(STATUS "yaml-cpp cstdint patch already applied") + endif() +endif() + +add_subdirectory(yaml-cpp EXCLUDE_FROM_ALL) diff --git a/external_libs/tinyxml2/tinyxml2.cpp b/external_libs/tinyxml2/tinyxml2.cpp new file mode 100644 index 0000000..d32b2b3 --- /dev/null +++ b/external_libs/tinyxml2/tinyxml2.cpp @@ -0,0 +1,2987 @@ +/* +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include "tinyxml2.h" + +#include // yes, this one new style header, is in the Android SDK. +#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) +# include +# include +#else +# include +# include +#endif + +#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) + // Microsoft Visual Studio, version 2005 and higher. Not WinCE. + /*int _snprintf_s( + char *buffer, + size_t sizeOfBuffer, + size_t count, + const char *format [, + argument] ... + );*/ + static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... ) + { + va_list va; + va_start( va, format ); + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + va_end( va ); + return result; + } + + static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va ) + { + const int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va ); + return result; + } + + #define TIXML_VSCPRINTF _vscprintf + #define TIXML_SSCANF sscanf_s +#elif defined _MSC_VER + // Microsoft Visual Studio 2003 and earlier or WinCE + #define TIXML_SNPRINTF _snprintf + #define TIXML_VSNPRINTF _vsnprintf + #define TIXML_SSCANF sscanf + #if (_MSC_VER < 1400 ) && (!defined WINCE) + // Microsoft Visual Studio 2003 and not WinCE. + #define TIXML_VSCPRINTF _vscprintf // VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have. + #else + // Microsoft Visual Studio 2003 and earlier or WinCE. + static inline int TIXML_VSCPRINTF( const char* format, va_list va ) + { + int len = 512; + for (;;) { + len = len*2; + char* str = new char[len](); + const int required = _vsnprintf(str, len, format, va); + delete[] str; + if ( required != -1 ) { + TIXMLASSERT( required >= 0 ); + len = required; + break; + } + } + TIXMLASSERT( len >= 0 ); + return len; + } + #endif +#else + // GCC version 3 and higher + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_VSNPRINTF vsnprintf + static inline int TIXML_VSCPRINTF( const char* format, va_list va ) + { + int len = vsnprintf( 0, 0, format, va ); + TIXMLASSERT( len >= 0 ); + return len; + } + #define TIXML_SSCANF sscanf +#endif + +#if defined(_WIN64) + #define TIXML_FSEEK _fseeki64 + #define TIXML_FTELL _ftelli64 +#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) \ + || defined(__NetBSD__) || defined(__DragonFly__) || defined(__ANDROID__) + #define TIXML_FSEEK fseeko + #define TIXML_FTELL ftello +#elif defined(__unix__) && defined(__x86_64__) + #define TIXML_FSEEK fseeko64 + #define TIXML_FTELL ftello64 +#else + #define TIXML_FSEEK fseek + #define TIXML_FTELL ftell +#endif + + +static const char LINE_FEED = static_cast(0x0a); // all line endings are normalized to LF +static const char LF = LINE_FEED; +static const char CARRIAGE_RETURN = static_cast(0x0d); // CR gets filtered out +static const char CR = CARRIAGE_RETURN; +static const char SINGLE_QUOTE = '\''; +static const char DOUBLE_QUOTE = '\"'; + +// Bunch of unicode info at: +// http://www.unicode.org/faq/utf_bom.html +// ef bb bf (Microsoft "lead bytes") - designates UTF-8 + +static const unsigned char TIXML_UTF_LEAD_0 = 0xefU; +static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; +static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + +namespace tinyxml2 +{ + +struct Entity { + const char* pattern; + int length; + char value; +}; + +static const int NUM_ENTITIES = 5; +static const Entity entities[NUM_ENTITIES] = { + { "quot", 4, DOUBLE_QUOTE }, + { "amp", 3, '&' }, + { "apos", 4, SINGLE_QUOTE }, + { "lt", 2, '<' }, + { "gt", 2, '>' } +}; + + +StrPair::~StrPair() +{ + Reset(); +} + + +void StrPair::TransferTo( StrPair* other ) +{ + if ( this == other ) { + return; + } + // This in effect implements the assignment operator by "moving" + // ownership (as in auto_ptr). + + TIXMLASSERT( other != 0 ); + TIXMLASSERT( other->_flags == 0 ); + TIXMLASSERT( other->_start == 0 ); + TIXMLASSERT( other->_end == 0 ); + + other->Reset(); + + other->_flags = _flags; + other->_start = _start; + other->_end = _end; + + _flags = 0; + _start = 0; + _end = 0; +} + + +void StrPair::Reset() +{ + if ( _flags & NEEDS_DELETE ) { + delete [] _start; + } + _flags = 0; + _start = 0; + _end = 0; +} + + +void StrPair::SetStr( const char* str, int flags ) +{ + TIXMLASSERT( str ); + Reset(); + size_t len = strlen( str ); + TIXMLASSERT( _start == 0 ); + _start = new char[ len+1 ]; + memcpy( _start, str, len+1 ); + _end = _start + len; + _flags = flags | NEEDS_DELETE; +} + + +char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLineNumPtr ) +{ + TIXMLASSERT( p ); + TIXMLASSERT( endTag && *endTag ); + TIXMLASSERT(curLineNumPtr); + + char* start = p; + const char endChar = *endTag; + size_t length = strlen( endTag ); + + // Inner loop of text parsing. + while ( *p ) { + if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) { + Set( start, p, strFlags ); + return p + length; + } else if (*p == '\n') { + ++(*curLineNumPtr); + } + ++p; + TIXMLASSERT( p ); + } + return 0; +} + + +char* StrPair::ParseName( char* p ) +{ + if ( !p || !(*p) ) { + return 0; + } + if ( !XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { + return 0; + } + + char* const start = p; + ++p; + while ( *p && XMLUtil::IsNameChar( (unsigned char) *p ) ) { + ++p; + } + + Set( start, p, 0 ); + return p; +} + + +void StrPair::CollapseWhitespace() +{ + // Adjusting _start would cause undefined behavior on delete[] + TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 ); + // Trim leading space. + _start = XMLUtil::SkipWhiteSpace( _start, 0 ); + + if ( *_start ) { + const char* p = _start; // the read pointer + char* q = _start; // the write pointer + + while( *p ) { + if ( XMLUtil::IsWhiteSpace( *p )) { + p = XMLUtil::SkipWhiteSpace( p, 0 ); + if ( *p == 0 ) { + break; // don't write to q; this trims the trailing space. + } + *q = ' '; + ++q; + } + *q = *p; + ++q; + ++p; + } + *q = 0; + } +} + + +const char* StrPair::GetStr() +{ + TIXMLASSERT( _start ); + TIXMLASSERT( _end ); + if ( _flags & NEEDS_FLUSH ) { + *_end = 0; + _flags ^= NEEDS_FLUSH; + + if ( _flags ) { + const char* p = _start; // the read pointer + char* q = _start; // the write pointer + + while( p < _end ) { + if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) { + // CR-LF pair becomes LF + // CR alone becomes LF + // LF-CR becomes LF + if ( *(p+1) == LF ) { + p += 2; + } + else { + ++p; + } + *q = LF; + ++q; + } + else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) { + if ( *(p+1) == CR ) { + p += 2; + } + else { + ++p; + } + *q = LF; + ++q; + } + else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) { + // Entities handled by tinyXML2: + // - special entities in the entity table [in/out] + // - numeric character reference [in] + // 中 or 中 + + if ( *(p+1) == '#' ) { + const int buflen = 10; + char buf[buflen] = { 0 }; + int len = 0; + const char* adjusted = const_cast( XMLUtil::GetCharacterRef( p, buf, &len ) ); + if ( adjusted == 0 ) { + *q = *p; + ++p; + ++q; + } + else { + TIXMLASSERT( 0 <= len && len <= buflen ); + TIXMLASSERT( q + len <= adjusted ); + p = adjusted; + memcpy( q, buf, len ); + q += len; + } + } + else { + bool entityFound = false; + for( int i = 0; i < NUM_ENTITIES; ++i ) { + const Entity& entity = entities[i]; + if ( strncmp( p + 1, entity.pattern, entity.length ) == 0 + && *( p + entity.length + 1 ) == ';' ) { + // Found an entity - convert. + *q = entity.value; + ++q; + p += entity.length + 2; + entityFound = true; + break; + } + } + if ( !entityFound ) { + // fixme: treat as error? + ++p; + ++q; + } + } + } + else { + *q = *p; + ++p; + ++q; + } + } + *q = 0; + } + // The loop below has plenty going on, and this + // is a less useful mode. Break it out. + if ( _flags & NEEDS_WHITESPACE_COLLAPSING ) { + CollapseWhitespace(); + } + _flags = (_flags & NEEDS_DELETE); + } + TIXMLASSERT( _start ); + return _start; +} + + + + +// --------- XMLUtil ----------- // + +const char* XMLUtil::writeBoolTrue = "true"; +const char* XMLUtil::writeBoolFalse = "false"; + +void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse) +{ + static const char* defTrue = "true"; + static const char* defFalse = "false"; + + writeBoolTrue = (writeTrue) ? writeTrue : defTrue; + writeBoolFalse = (writeFalse) ? writeFalse : defFalse; +} + + +const char* XMLUtil::ReadBOM( const char* p, bool* bom ) +{ + TIXMLASSERT( p ); + TIXMLASSERT( bom ); + *bom = false; + const unsigned char* pu = reinterpret_cast(p); + // Check for BOM: + if ( *(pu+0) == TIXML_UTF_LEAD_0 + && *(pu+1) == TIXML_UTF_LEAD_1 + && *(pu+2) == TIXML_UTF_LEAD_2 ) { + *bom = true; + p += 3; + } + TIXMLASSERT( p ); + return p; +} + + +void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) +{ + const unsigned long BYTE_MASK = 0xBF; + const unsigned long BYTE_MARK = 0x80; + const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + + if (input < 0x80) { + *length = 1; + } + else if ( input < 0x800 ) { + *length = 2; + } + else if ( input < 0x10000 ) { + *length = 3; + } + else if ( input < 0x200000 ) { + *length = 4; + } + else { + *length = 0; // This code won't convert this correctly anyway. + return; + } + + output += *length; + + // Scary scary fall throughs are annotated with carefully designed comments + // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc + switch (*length) { + case 4: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 3: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 2: + --output; + *output = static_cast((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + //fall through + case 1: + --output; + *output = static_cast(input | FIRST_BYTE_MARK[*length]); + break; + default: + TIXMLASSERT( false ); + } +} + + +const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length ) +{ + // Presume an entity, and pull it out. + *length = 0; + + if ( *(p+1) == '#' && *(p+2) ) { + unsigned long ucs = 0; + TIXMLASSERT( sizeof( ucs ) >= 4 ); + ptrdiff_t delta = 0; + unsigned mult = 1; + static const char SEMICOLON = ';'; + + if ( *(p+2) == 'x' ) { + // Hexadecimal. + const char* q = p+3; + if ( !(*q) ) { + return 0; + } + + q = strchr( q, SEMICOLON ); + + if ( !q ) { + return 0; + } + TIXMLASSERT( *q == SEMICOLON ); + + delta = q-p; + --q; + + while ( *q != 'x' ) { + unsigned int digit = 0; + + if ( *q >= '0' && *q <= '9' ) { + digit = *q - '0'; + } + else if ( *q >= 'a' && *q <= 'f' ) { + digit = *q - 'a' + 10; + } + else if ( *q >= 'A' && *q <= 'F' ) { + digit = *q - 'A' + 10; + } + else { + return 0; + } + TIXMLASSERT( digit < 16 ); + TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); + const unsigned int digitScaled = mult * digit; + TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); + ucs += digitScaled; + TIXMLASSERT( mult <= UINT_MAX / 16 ); + mult *= 16; + --q; + } + } + else { + // Decimal. + const char* q = p+2; + if ( !(*q) ) { + return 0; + } + + q = strchr( q, SEMICOLON ); + + if ( !q ) { + return 0; + } + TIXMLASSERT( *q == SEMICOLON ); + + delta = q-p; + --q; + + while ( *q != '#' ) { + if ( *q >= '0' && *q <= '9' ) { + const unsigned int digit = *q - '0'; + TIXMLASSERT( digit < 10 ); + TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit ); + const unsigned int digitScaled = mult * digit; + TIXMLASSERT( ucs <= ULONG_MAX - digitScaled ); + ucs += digitScaled; + } + else { + return 0; + } + TIXMLASSERT( mult <= UINT_MAX / 10 ); + mult *= 10; + --q; + } + } + // convert the UCS to UTF-8 + ConvertUTF32ToUTF8( ucs, value, length ); + return p + delta + 1; + } + return p+1; +} + + +void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%d", v ); +} + + +void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); +} + + +void XMLUtil::ToStr( bool v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse); +} + +/* + ToStr() of a number is a very tricky topic. + https://github.com/leethomason/tinyxml2/issues/106 +*/ +void XMLUtil::ToStr( float v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v ); +} + + +void XMLUtil::ToStr( double v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v ); +} + + +void XMLUtil::ToStr( int64_t v, char* buffer, int bufferSize ) +{ + // horrible syntax trick to make the compiler happy about %lld + TIXML_SNPRINTF(buffer, bufferSize, "%lld", static_cast(v)); +} + +void XMLUtil::ToStr( uint64_t v, char* buffer, int bufferSize ) +{ + // horrible syntax trick to make the compiler happy about %llu + TIXML_SNPRINTF(buffer, bufferSize, "%llu", (long long)v); +} + +bool XMLUtil::ToInt(const char* str, int* value) +{ + if (IsPrefixHex(str)) { + unsigned v; + if (TIXML_SSCANF(str, "%x", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + if (TIXML_SSCANF(str, "%d", value) == 1) { + return true; + } + } + return false; +} + +bool XMLUtil::ToUnsigned(const char* str, unsigned* value) +{ + if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%x" : "%u", value) == 1) { + return true; + } + return false; +} + +bool XMLUtil::ToBool( const char* str, bool* value ) +{ + int ival = 0; + if ( ToInt( str, &ival )) { + *value = (ival==0) ? false : true; + return true; + } + static const char* TRUE_VALS[] = { "true", "True", "TRUE", 0 }; + static const char* FALSE_VALS[] = { "false", "False", "FALSE", 0 }; + + for (int i = 0; TRUE_VALS[i]; ++i) { + if (StringEqual(str, TRUE_VALS[i])) { + *value = true; + return true; + } + } + for (int i = 0; FALSE_VALS[i]; ++i) { + if (StringEqual(str, FALSE_VALS[i])) { + *value = false; + return true; + } + } + return false; +} + + +bool XMLUtil::ToFloat( const char* str, float* value ) +{ + if ( TIXML_SSCANF( str, "%f", value ) == 1 ) { + return true; + } + return false; +} + + +bool XMLUtil::ToDouble( const char* str, double* value ) +{ + if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) { + return true; + } + return false; +} + + +bool XMLUtil::ToInt64(const char* str, int64_t* value) +{ + if (IsPrefixHex(str)) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llx + if (TIXML_SSCANF(str, "%llx", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + long long v = 0; // horrible syntax trick to make the compiler happy about %lld + if (TIXML_SSCANF(str, "%lld", &v) == 1) { + *value = static_cast(v); + return true; + } + } + return false; +} + + +bool XMLUtil::ToUnsigned64(const char* str, uint64_t* value) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llu + if(TIXML_SSCANF(str, IsPrefixHex(str) ? "%llx" : "%llu", &v) == 1) { + *value = (uint64_t)v; + return true; + } + return false; +} + + +char* XMLDocument::Identify( char* p, XMLNode** node ) +{ + TIXMLASSERT( node ); + TIXMLASSERT( p ); + char* const start = p; + int const startLine = _parseCurLineNum; + p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); + if( !*p ) { + *node = 0; + TIXMLASSERT( p ); + return p; + } + + // These strings define the matching patterns: + static const char* xmlHeader = { "( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += xmlHeaderLen; + } + else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += commentHeaderLen; + } + else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) { + XMLText* text = CreateUnlinkedNode( _textPool ); + returnNode = text; + returnNode->_parseLineNum = _parseCurLineNum; + p += cdataHeaderLen; + text->SetCData( true ); + } + else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _commentPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += dtdHeaderLen; + } + else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) { + returnNode = CreateUnlinkedNode( _elementPool ); + returnNode->_parseLineNum = _parseCurLineNum; + p += elementHeaderLen; + } + else { + returnNode = CreateUnlinkedNode( _textPool ); + returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character + p = start; // Back it up, all the text counts. + _parseCurLineNum = startLine; + } + + TIXMLASSERT( returnNode ); + TIXMLASSERT( p ); + *node = returnNode; + return p; +} + + +bool XMLDocument::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + if ( visitor->VisitEnter( *this ) ) { + for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { + if ( !node->Accept( visitor ) ) { + break; + } + } + } + return visitor->VisitExit( *this ); +} + + +// --------- XMLNode ----------- // + +XMLNode::XMLNode( XMLDocument* doc ) : + _document( doc ), + _parent( 0 ), + _value(), + _parseLineNum( 0 ), + _firstChild( 0 ), _lastChild( 0 ), + _prev( 0 ), _next( 0 ), + _userData( 0 ), + _memPool( 0 ) +{ +} + + +XMLNode::~XMLNode() +{ + DeleteChildren(); + if ( _parent ) { + _parent->Unlink( this ); + } +} + +const char* XMLNode::Value() const +{ + // Edge case: XMLDocuments don't have a Value. Return null. + if ( this->ToDocument() ) + return 0; + return _value.GetStr(); +} + +void XMLNode::SetValue( const char* str, bool staticMem ) +{ + if ( staticMem ) { + _value.SetInternedStr( str ); + } + else { + _value.SetStr( str ); + } +} + +XMLNode* XMLNode::DeepClone(XMLDocument* target) const +{ + XMLNode* clone = this->ShallowClone(target); + if (!clone) return 0; + + for (const XMLNode* child = this->FirstChild(); child; child = child->NextSibling()) { + XMLNode* childClone = child->DeepClone(target); + TIXMLASSERT(childClone); + clone->InsertEndChild(childClone); + } + return clone; +} + +void XMLNode::DeleteChildren() +{ + while( _firstChild ) { + TIXMLASSERT( _lastChild ); + DeleteChild( _firstChild ); + } + _firstChild = _lastChild = 0; +} + + +void XMLNode::Unlink( XMLNode* child ) +{ + TIXMLASSERT( child ); + TIXMLASSERT( child->_document == _document ); + TIXMLASSERT( child->_parent == this ); + if ( child == _firstChild ) { + _firstChild = _firstChild->_next; + } + if ( child == _lastChild ) { + _lastChild = _lastChild->_prev; + } + + if ( child->_prev ) { + child->_prev->_next = child->_next; + } + if ( child->_next ) { + child->_next->_prev = child->_prev; + } + child->_next = 0; + child->_prev = 0; + child->_parent = 0; +} + + +void XMLNode::DeleteChild( XMLNode* node ) +{ + TIXMLASSERT( node ); + TIXMLASSERT( node->_document == _document ); + TIXMLASSERT( node->_parent == this ); + Unlink( node ); + TIXMLASSERT(node->_prev == 0); + TIXMLASSERT(node->_next == 0); + TIXMLASSERT(node->_parent == 0); + DeleteNode( node ); +} + + +XMLNode* XMLNode::InsertEndChild( XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + InsertChildPreamble( addThis ); + + if ( _lastChild ) { + TIXMLASSERT( _firstChild ); + TIXMLASSERT( _lastChild->_next == 0 ); + _lastChild->_next = addThis; + addThis->_prev = _lastChild; + _lastChild = addThis; + + addThis->_next = 0; + } + else { + TIXMLASSERT( _firstChild == 0 ); + _firstChild = _lastChild = addThis; + + addThis->_prev = 0; + addThis->_next = 0; + } + addThis->_parent = this; + return addThis; +} + + +XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + InsertChildPreamble( addThis ); + + if ( _firstChild ) { + TIXMLASSERT( _lastChild ); + TIXMLASSERT( _firstChild->_prev == 0 ); + + _firstChild->_prev = addThis; + addThis->_next = _firstChild; + _firstChild = addThis; + + addThis->_prev = 0; + } + else { + TIXMLASSERT( _lastChild == 0 ); + _firstChild = _lastChild = addThis; + + addThis->_prev = 0; + addThis->_next = 0; + } + addThis->_parent = this; + return addThis; +} + + +XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ) +{ + TIXMLASSERT( addThis ); + if ( addThis->_document != _document ) { + TIXMLASSERT( false ); + return 0; + } + + TIXMLASSERT( afterThis ); + + if ( afterThis->_parent != this ) { + TIXMLASSERT( false ); + return 0; + } + if ( afterThis == addThis ) { + // Current state: BeforeThis -> AddThis -> OneAfterAddThis + // Now AddThis must disappear from it's location and then + // reappear between BeforeThis and OneAfterAddThis. + // So just leave it where it is. + return addThis; + } + + if ( afterThis->_next == 0 ) { + // The last node or the only node. + return InsertEndChild( addThis ); + } + InsertChildPreamble( addThis ); + addThis->_prev = afterThis; + addThis->_next = afterThis->_next; + afterThis->_next->_prev = addThis; + afterThis->_next = addThis; + addThis->_parent = this; + return addThis; +} + + + + +const XMLElement* XMLNode::FirstChildElement( const char* name ) const +{ + for( const XMLNode* node = _firstChild; node; node = node->_next ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::LastChildElement( const char* name ) const +{ + for( const XMLNode* node = _lastChild; node; node = node->_prev ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::NextSiblingElement( const char* name ) const +{ + for( const XMLNode* node = _next; node; node = node->_next ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const +{ + for( const XMLNode* node = _prev; node; node = node->_prev ) { + const XMLElement* element = node->ToElementWithName( name ); + if ( element ) { + return element; + } + } + return 0; +} + + +char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) +{ + // This is a recursive method, but thinking about it "at the current level" + // it is a pretty simple flat list: + // + // + // + // With a special case: + // + // + // + // + // Where the closing element (/foo) *must* be the next thing after the opening + // element, and the names must match. BUT the tricky bit is that the closing + // element will be read by the child. + // + // 'endTag' is the end tag for this node, it is returned by a call to a child. + // 'parentEnd' is the end tag for the parent, which is filled in and returned. + + XMLDocument::DepthTracker tracker(_document); + if (_document->Error()) + return 0; + + while( p && *p ) { + XMLNode* node = 0; + + p = _document->Identify( p, &node ); + TIXMLASSERT( p ); + if ( node == 0 ) { + break; + } + + const int initialLineNum = node->_parseLineNum; + + StrPair endTag; + p = node->ParseDeep( p, &endTag, curLineNumPtr ); + if ( !p ) { + DeleteNode( node ); + if ( !_document->Error() ) { + _document->SetError( XML_ERROR_PARSING, initialLineNum, 0); + } + break; + } + + const XMLDeclaration* const decl = node->ToDeclaration(); + if ( decl ) { + // Declarations are only allowed at document level + // + // Multiple declarations are allowed but all declarations + // must occur before anything else. + // + // Optimized due to a security test case. If the first node is + // a declaration, and the last node is a declaration, then only + // declarations have so far been added. + bool wellLocated = false; + + if (ToDocument()) { + if (FirstChild()) { + wellLocated = + FirstChild() && + FirstChild()->ToDeclaration() && + LastChild() && + LastChild()->ToDeclaration(); + } + else { + wellLocated = true; + } + } + if ( !wellLocated ) { + _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value()); + DeleteNode( node ); + break; + } + } + + XMLElement* ele = node->ToElement(); + if ( ele ) { + // We read the end tag. Return it to the parent. + if ( ele->ClosingType() == XMLElement::CLOSING ) { + if ( parentEndTag ) { + ele->_value.TransferTo( parentEndTag ); + } + node->_memPool->SetTracked(); // created and then immediately deleted. + DeleteNode( node ); + return p; + } + + // Handle an end tag returned to this level. + // And handle a bunch of annoying errors. + bool mismatch = false; + if ( endTag.Empty() ) { + if ( ele->ClosingType() == XMLElement::OPEN ) { + mismatch = true; + } + } + else { + if ( ele->ClosingType() != XMLElement::OPEN ) { + mismatch = true; + } + else if ( !XMLUtil::StringEqual( endTag.GetStr(), ele->Name() ) ) { + mismatch = true; + } + } + if ( mismatch ) { + _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name()); + DeleteNode( node ); + break; + } + } + InsertEndChild( node ); + } + return 0; +} + +/*static*/ void XMLNode::DeleteNode( XMLNode* node ) +{ + if ( node == 0 ) { + return; + } + TIXMLASSERT(node->_document); + if (!node->ToDocument()) { + node->_document->MarkInUse(node); + } + + MemPool* pool = node->_memPool; + node->~XMLNode(); + pool->Free( node ); +} + +void XMLNode::InsertChildPreamble( XMLNode* insertThis ) const +{ + TIXMLASSERT( insertThis ); + TIXMLASSERT( insertThis->_document == _document ); + + if (insertThis->_parent) { + insertThis->_parent->Unlink( insertThis ); + } + else { + insertThis->_document->MarkInUse(insertThis); + insertThis->_memPool->SetTracked(); + } +} + +const XMLElement* XMLNode::ToElementWithName( const char* name ) const +{ + const XMLElement* element = this->ToElement(); + if ( element == 0 ) { + return 0; + } + if ( name == 0 ) { + return element; + } + if ( XMLUtil::StringEqual( element->Name(), name ) ) { + return element; + } + return 0; +} + +// --------- XMLText ---------- // +char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + if ( this->CData() ) { + p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 ); + } + return p; + } + else { + int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES; + if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) { + flags |= StrPair::NEEDS_WHITESPACE_COLLAPSING; + } + + p = _value.ParseText( p, "<", flags, curLineNumPtr ); + if ( p && *p ) { + return p-1; + } + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 ); + } + } + return 0; +} + + +XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLText* text = doc->NewText( Value() ); // fixme: this will always allocate memory. Intern? + text->SetCData( this->CData() ); + return text; +} + + +bool XMLText::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLText* text = compare->ToText(); + return ( text && XMLUtil::StringEqual( text->Value(), Value() ) ); +} + + +bool XMLText::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + + +// --------- XMLComment ---------- // + +XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLComment::~XMLComment() +{ +} + + +char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Comment parses as text. + p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr ); + if ( p == 0 ) { + _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLComment* comment = doc->NewComment( Value() ); // fixme: this will always allocate memory. Intern? + return comment; +} + + +bool XMLComment::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLComment* comment = compare->ToComment(); + return ( comment && XMLUtil::StringEqual( comment->Value(), Value() )); +} + + +bool XMLComment::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + + +// --------- XMLDeclaration ---------- // + +XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLDeclaration::~XMLDeclaration() +{ + //printf( "~XMLDeclaration\n" ); +} + + +char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Declaration parses as text. + p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( p == 0 ) { + _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLDeclaration* dec = doc->NewDeclaration( Value() ); // fixme: this will always allocate memory. Intern? + return dec; +} + + +bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLDeclaration* declaration = compare->ToDeclaration(); + return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() )); +} + + + +bool XMLDeclaration::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + +// --------- XMLUnknown ---------- // + +XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc ) +{ +} + + +XMLUnknown::~XMLUnknown() +{ +} + + +char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr ) +{ + // Unknown parses as text. + p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr ); + if ( !p ) { + _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 ); + } + return p; +} + + +XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLUnknown* text = doc->NewUnknown( Value() ); // fixme: this will always allocate memory. Intern? + return text; +} + + +bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLUnknown* unknown = compare->ToUnknown(); + return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() )); +} + + +bool XMLUnknown::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + return visitor->Visit( *this ); +} + +// --------- XMLAttribute ---------- // + +const char* XMLAttribute::Name() const +{ + return _name.GetStr(); +} + +const char* XMLAttribute::Value() const +{ + return _value.GetStr(); +} + +char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr ) +{ + // Parse using the name rules: bug fix, was using ParseText before + p = _name.ParseName( p ); + if ( !p || !*p ) { + return 0; + } + + // Skip white space before = + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( *p != '=' ) { + return 0; + } + + ++p; // move up to opening quote + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( *p != '\"' && *p != '\'' ) { + return 0; + } + + const char endTag[2] = { *p, 0 }; + ++p; // move past opening quote + + p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr ); + return p; +} + + +void XMLAttribute::SetName( const char* n ) +{ + _name.SetStr( n ); +} + + +XMLError XMLAttribute::QueryIntValue( int* value ) const +{ + if ( XMLUtil::ToInt( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const +{ + if ( XMLUtil::ToUnsigned( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryInt64Value(int64_t* value) const +{ + if (XMLUtil::ToInt64(Value(), value)) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const +{ + if(XMLUtil::ToUnsigned64(Value(), value)) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryBoolValue( bool* value ) const +{ + if ( XMLUtil::ToBool( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryFloatValue( float* value ) const +{ + if ( XMLUtil::ToFloat( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +XMLError XMLAttribute::QueryDoubleValue( double* value ) const +{ + if ( XMLUtil::ToDouble( Value(), value )) { + return XML_SUCCESS; + } + return XML_WRONG_ATTRIBUTE_TYPE; +} + + +void XMLAttribute::SetAttribute( const char* v ) +{ + _value.SetStr( v ); +} + + +void XMLAttribute::SetAttribute( int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +void XMLAttribute::SetAttribute( unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +void XMLAttribute::SetAttribute(int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + _value.SetStr(buf); +} + +void XMLAttribute::SetAttribute(uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + _value.SetStr(buf); +} + + +void XMLAttribute::SetAttribute( bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + +void XMLAttribute::SetAttribute( double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + +void XMLAttribute::SetAttribute( float v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + +// --------- XMLElement ---------- // +XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ), + _closingType( OPEN ), + _rootAttribute( 0 ) +{ +} + + +XMLElement::~XMLElement() +{ + while( _rootAttribute ) { + XMLAttribute* next = _rootAttribute->_next; + DeleteAttribute( _rootAttribute ); + _rootAttribute = next; + } +} + + +const XMLAttribute* XMLElement::FindAttribute( const char* name ) const +{ + for( XMLAttribute* a = _rootAttribute; a; a = a->_next ) { + if ( XMLUtil::StringEqual( a->Name(), name ) ) { + return a; + } + } + return 0; +} + + +const char* XMLElement::Attribute( const char* name, const char* value ) const +{ + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return 0; + } + if ( !value || XMLUtil::StringEqual( a->Value(), value )) { + return a->Value(); + } + return 0; +} + +int XMLElement::IntAttribute(const char* name, int defaultValue) const +{ + int i = defaultValue; + QueryIntAttribute(name, &i); + return i; +} + +unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const +{ + unsigned i = defaultValue; + QueryUnsignedAttribute(name, &i); + return i; +} + +int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const +{ + int64_t i = defaultValue; + QueryInt64Attribute(name, &i); + return i; +} + +uint64_t XMLElement::Unsigned64Attribute(const char* name, uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Attribute(name, &i); + return i; +} + +bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const +{ + bool b = defaultValue; + QueryBoolAttribute(name, &b); + return b; +} + +double XMLElement::DoubleAttribute(const char* name, double defaultValue) const +{ + double d = defaultValue; + QueryDoubleAttribute(name, &d); + return d; +} + +float XMLElement::FloatAttribute(const char* name, float defaultValue) const +{ + float f = defaultValue; + QueryFloatAttribute(name, &f); + return f; +} + +const char* XMLElement::GetText() const +{ + /* skip comment node */ + const XMLNode* node = FirstChild(); + while (node) { + if (node->ToComment()) { + node = node->NextSibling(); + continue; + } + break; + } + + if ( node && node->ToText() ) { + return node->Value(); + } + return 0; +} + + +void XMLElement::SetText( const char* inText ) +{ + if ( FirstChild() && FirstChild()->ToText() ) + FirstChild()->SetValue( inText ); + else { + XMLText* theText = GetDocument()->NewText( inText ); + InsertFirstChild( theText ); + } +} + + +void XMLElement::SetText( int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText(int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + SetText(buf); +} + +void XMLElement::SetText(uint64_t v) { + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + SetText(buf); +} + + +void XMLElement::SetText( bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( float v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +void XMLElement::SetText( double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + SetText( buf ); +} + + +XMLError XMLElement::QueryIntText( int* ival ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToInt( t, ival ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToUnsigned( t, uval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryInt64Text(int64_t* ival) const +{ + if (FirstChild() && FirstChild()->ToText()) { + const char* t = FirstChild()->Value(); + if (XMLUtil::ToInt64(t, ival)) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryUnsigned64Text(uint64_t* ival) const +{ + if(FirstChild() && FirstChild()->ToText()) { + const char* t = FirstChild()->Value(); + if(XMLUtil::ToUnsigned64(t, ival)) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryBoolText( bool* bval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToBool( t, bval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryDoubleText( double* dval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToDouble( t, dval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + +XMLError XMLElement::QueryFloatText( float* fval ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->Value(); + if ( XMLUtil::ToFloat( t, fval ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + +int XMLElement::IntText(int defaultValue) const +{ + int i = defaultValue; + QueryIntText(&i); + return i; +} + +unsigned XMLElement::UnsignedText(unsigned defaultValue) const +{ + unsigned i = defaultValue; + QueryUnsignedText(&i); + return i; +} + +int64_t XMLElement::Int64Text(int64_t defaultValue) const +{ + int64_t i = defaultValue; + QueryInt64Text(&i); + return i; +} + +uint64_t XMLElement::Unsigned64Text(uint64_t defaultValue) const +{ + uint64_t i = defaultValue; + QueryUnsigned64Text(&i); + return i; +} + +bool XMLElement::BoolText(bool defaultValue) const +{ + bool b = defaultValue; + QueryBoolText(&b); + return b; +} + +double XMLElement::DoubleText(double defaultValue) const +{ + double d = defaultValue; + QueryDoubleText(&d); + return d; +} + +float XMLElement::FloatText(float defaultValue) const +{ + float f = defaultValue; + QueryFloatText(&f); + return f; +} + + +XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name ) +{ + XMLAttribute* last = 0; + XMLAttribute* attrib = 0; + for( attrib = _rootAttribute; + attrib; + last = attrib, attrib = attrib->_next ) { + if ( XMLUtil::StringEqual( attrib->Name(), name ) ) { + break; + } + } + if ( !attrib ) { + attrib = CreateAttribute(); + TIXMLASSERT( attrib ); + if ( last ) { + TIXMLASSERT( last->_next == 0 ); + last->_next = attrib; + } + else { + TIXMLASSERT( _rootAttribute == 0 ); + _rootAttribute = attrib; + } + attrib->SetName( name ); + } + return attrib; +} + + +void XMLElement::DeleteAttribute( const char* name ) +{ + XMLAttribute* prev = 0; + for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) { + if ( XMLUtil::StringEqual( name, a->Name() ) ) { + if ( prev ) { + prev->_next = a->_next; + } + else { + _rootAttribute = a->_next; + } + DeleteAttribute( a ); + break; + } + prev = a; + } +} + + +char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr ) +{ + XMLAttribute* prevAttribute = 0; + + // Read the attributes. + while( p ) { + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + if ( !(*p) ) { + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() ); + return 0; + } + + // attribute. + if (XMLUtil::IsNameStartChar( (unsigned char) *p ) ) { + XMLAttribute* attrib = CreateAttribute(); + TIXMLASSERT( attrib ); + attrib->_parseLineNum = _document->_parseCurLineNum; + + const int attrLineNum = attrib->_parseLineNum; + + p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr ); + if ( !p || Attribute( attrib->Name() ) ) { + DeleteAttribute( attrib ); + _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() ); + return 0; + } + // There is a minor bug here: if the attribute in the source xml + // document is duplicated, it will not be detected and the + // attribute will be doubly added. However, tracking the 'prevAttribute' + // avoids re-scanning the attribute list. Preferring performance for + // now, may reconsider in the future. + if ( prevAttribute ) { + TIXMLASSERT( prevAttribute->_next == 0 ); + prevAttribute->_next = attrib; + } + else { + TIXMLASSERT( _rootAttribute == 0 ); + _rootAttribute = attrib; + } + prevAttribute = attrib; + } + // end of the tag + else if ( *p == '>' ) { + ++p; + break; + } + // end of the tag + else if ( *p == '/' && *(p+1) == '>' ) { + _closingType = CLOSED; + return p+2; // done; sealed element. + } + else { + _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 ); + return 0; + } + } + return p; +} + +void XMLElement::DeleteAttribute( XMLAttribute* attribute ) +{ + if ( attribute == 0 ) { + return; + } + MemPool* pool = attribute->_memPool; + attribute->~XMLAttribute(); + pool->Free( attribute ); +} + +XMLAttribute* XMLElement::CreateAttribute() +{ + TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() ); + XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute(); + TIXMLASSERT( attrib ); + attrib->_memPool = &_document->_attributePool; + attrib->_memPool->SetTracked(); + return attrib; +} + + +XMLElement* XMLElement::InsertNewChildElement(const char* name) +{ + XMLElement* node = _document->NewElement(name); + return InsertEndChild(node) ? node : 0; +} + +XMLComment* XMLElement::InsertNewComment(const char* comment) +{ + XMLComment* node = _document->NewComment(comment); + return InsertEndChild(node) ? node : 0; +} + +XMLText* XMLElement::InsertNewText(const char* text) +{ + XMLText* node = _document->NewText(text); + return InsertEndChild(node) ? node : 0; +} + +XMLDeclaration* XMLElement::InsertNewDeclaration(const char* text) +{ + XMLDeclaration* node = _document->NewDeclaration(text); + return InsertEndChild(node) ? node : 0; +} + +XMLUnknown* XMLElement::InsertNewUnknown(const char* text) +{ + XMLUnknown* node = _document->NewUnknown(text); + return InsertEndChild(node) ? node : 0; +} + + + +// +// +// foobar +// +char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ) +{ + // Read the element name. + p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr ); + + // The closing element is the form. It is + // parsed just like a regular element then deleted from + // the DOM. + if ( *p == '/' ) { + _closingType = CLOSING; + ++p; + } + + p = _value.ParseName( p ); + if ( _value.Empty() ) { + return 0; + } + + p = ParseAttributes( p, curLineNumPtr ); + if ( !p || !*p || _closingType != OPEN ) { + return p; + } + + p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr ); + return p; +} + + + +XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const +{ + if ( !doc ) { + doc = _document; + } + XMLElement* element = doc->NewElement( Value() ); // fixme: this will always allocate memory. Intern? + for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) { + element->SetAttribute( a->Name(), a->Value() ); // fixme: this will always allocate memory. Intern? + } + return element; +} + + +bool XMLElement::ShallowEqual( const XMLNode* compare ) const +{ + TIXMLASSERT( compare ); + const XMLElement* other = compare->ToElement(); + if ( other && XMLUtil::StringEqual( other->Name(), Name() )) { + + const XMLAttribute* a=FirstAttribute(); + const XMLAttribute* b=other->FirstAttribute(); + + while ( a && b ) { + if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) { + return false; + } + a = a->Next(); + b = b->Next(); + } + if ( a || b ) { + // different count + return false; + } + return true; + } + return false; +} + + +bool XMLElement::Accept( XMLVisitor* visitor ) const +{ + TIXMLASSERT( visitor ); + if ( visitor->VisitEnter( *this, _rootAttribute ) ) { + for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) { + if ( !node->Accept( visitor ) ) { + break; + } + } + } + return visitor->VisitExit( *this ); +} + + +// --------- XMLDocument ----------- // + +// Warning: List must match 'enum XMLError' +const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = { + "XML_SUCCESS", + "XML_NO_ATTRIBUTE", + "XML_WRONG_ATTRIBUTE_TYPE", + "XML_ERROR_FILE_NOT_FOUND", + "XML_ERROR_FILE_COULD_NOT_BE_OPENED", + "XML_ERROR_FILE_READ_ERROR", + "XML_ERROR_PARSING_ELEMENT", + "XML_ERROR_PARSING_ATTRIBUTE", + "XML_ERROR_PARSING_TEXT", + "XML_ERROR_PARSING_CDATA", + "XML_ERROR_PARSING_COMMENT", + "XML_ERROR_PARSING_DECLARATION", + "XML_ERROR_PARSING_UNKNOWN", + "XML_ERROR_EMPTY_DOCUMENT", + "XML_ERROR_MISMATCHED_ELEMENT", + "XML_ERROR_PARSING", + "XML_CAN_NOT_CONVERT_TEXT", + "XML_NO_TEXT_NODE", + "XML_ELEMENT_DEPTH_EXCEEDED" +}; + + +XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) : + XMLNode( 0 ), + _writeBOM( false ), + _processEntities( processEntities ), + _errorID(XML_SUCCESS), + _whitespaceMode( whitespaceMode ), + _errorStr(), + _errorLineNum( 0 ), + _charBuffer( 0 ), + _parseCurLineNum( 0 ), + _parsingDepth(0), + _unlinked(), + _elementPool(), + _attributePool(), + _textPool(), + _commentPool() +{ + // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+) + _document = this; +} + + +XMLDocument::~XMLDocument() +{ + Clear(); +} + + +void XMLDocument::MarkInUse(const XMLNode* const node) +{ + TIXMLASSERT(node); + TIXMLASSERT(node->_parent == 0); + + for (int i = 0; i < _unlinked.Size(); ++i) { + if (node == _unlinked[i]) { + _unlinked.SwapRemove(i); + break; + } + } +} + +void XMLDocument::Clear() +{ + DeleteChildren(); + while( _unlinked.Size()) { + DeleteNode(_unlinked[0]); // Will remove from _unlinked as part of delete. + } + +#ifdef TINYXML2_DEBUG + const bool hadError = Error(); +#endif + ClearError(); + + delete [] _charBuffer; + _charBuffer = 0; + _parsingDepth = 0; + +#if 0 + _textPool.Trace( "text" ); + _elementPool.Trace( "element" ); + _commentPool.Trace( "comment" ); + _attributePool.Trace( "attribute" ); +#endif + +#ifdef TINYXML2_DEBUG + if ( !hadError ) { + TIXMLASSERT( _elementPool.CurrentAllocs() == _elementPool.Untracked() ); + TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() ); + TIXMLASSERT( _textPool.CurrentAllocs() == _textPool.Untracked() ); + TIXMLASSERT( _commentPool.CurrentAllocs() == _commentPool.Untracked() ); + } +#endif +} + + +void XMLDocument::DeepCopy(XMLDocument* target) const +{ + TIXMLASSERT(target); + if (target == this) { + return; // technically success - a no-op. + } + + target->Clear(); + for (const XMLNode* node = this->FirstChild(); node; node = node->NextSibling()) { + target->InsertEndChild(node->DeepClone(target)); + } +} + +XMLElement* XMLDocument::NewElement( const char* name ) +{ + XMLElement* ele = CreateUnlinkedNode( _elementPool ); + ele->SetName( name ); + return ele; +} + + +XMLComment* XMLDocument::NewComment( const char* str ) +{ + XMLComment* comment = CreateUnlinkedNode( _commentPool ); + comment->SetValue( str ); + return comment; +} + + +XMLText* XMLDocument::NewText( const char* str ) +{ + XMLText* text = CreateUnlinkedNode( _textPool ); + text->SetValue( str ); + return text; +} + + +XMLDeclaration* XMLDocument::NewDeclaration( const char* str ) +{ + XMLDeclaration* dec = CreateUnlinkedNode( _commentPool ); + dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" ); + return dec; +} + + +XMLUnknown* XMLDocument::NewUnknown( const char* str ) +{ + XMLUnknown* unk = CreateUnlinkedNode( _commentPool ); + unk->SetValue( str ); + return unk; +} + +static FILE* callfopen( const char* filepath, const char* mode ) +{ + TIXMLASSERT( filepath ); + TIXMLASSERT( mode ); +#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE) + FILE* fp = 0; + const errno_t err = fopen_s( &fp, filepath, mode ); + if ( err ) { + return 0; + } +#else + FILE* fp = fopen( filepath, mode ); +#endif + return fp; +} + +void XMLDocument::DeleteNode( XMLNode* node ) { + TIXMLASSERT( node ); + TIXMLASSERT(node->_document == this ); + if (node->_parent) { + node->_parent->DeleteChild( node ); + } + else { + // Isn't in the tree. + // Use the parent delete. + // Also, we need to mark it tracked: we 'know' + // it was never used. + node->_memPool->SetTracked(); + // Call the static XMLNode version: + XMLNode::DeleteNode(node); + } +} + + +XMLError XMLDocument::LoadFile( const char* filename ) +{ + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + + Clear(); + FILE* fp = callfopen( filename, "rb" ); + if ( !fp ) { + SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename ); + return _errorID; + } + LoadFile( fp ); + fclose( fp ); + return _errorID; +} + +XMLError XMLDocument::LoadFile( FILE* fp ) +{ + Clear(); + + TIXML_FSEEK( fp, 0, SEEK_SET ); + if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + TIXML_FSEEK( fp, 0, SEEK_END ); + + unsigned long long filelength; + { + const long long fileLengthSigned = TIXML_FTELL( fp ); + TIXML_FSEEK( fp, 0, SEEK_SET ); + if ( fileLengthSigned == -1L ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + TIXMLASSERT( fileLengthSigned >= 0 ); + filelength = static_cast(fileLengthSigned); + } + + const size_t maxSizeT = static_cast(-1); + // We'll do the comparison as an unsigned long long, because that's guaranteed to be at + // least 8 bytes, even on a 32-bit platform. + if ( filelength >= static_cast(maxSizeT) ) { + // Cannot handle files which won't fit in buffer together with null terminator + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + if ( filelength == 0 ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return _errorID; + } + + const size_t size = static_cast(filelength); + TIXMLASSERT( _charBuffer == 0 ); + _charBuffer = new char[size+1]; + const size_t read = fread( _charBuffer, 1, size, fp ); + if ( read != size ) { + SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 ); + return _errorID; + } + + _charBuffer[size] = 0; + + Parse(); + return _errorID; +} + + +XMLError XMLDocument::SaveFile( const char* filename, bool compact ) +{ + if ( !filename ) { + TIXMLASSERT( false ); + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=" ); + return _errorID; + } + + FILE* fp = callfopen( filename, "w" ); + if ( !fp ) { + SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename ); + return _errorID; + } + SaveFile(fp, compact); + fclose( fp ); + return _errorID; +} + + +XMLError XMLDocument::SaveFile( FILE* fp, bool compact ) +{ + // Clear any error from the last save, otherwise it will get reported + // for *this* call. + ClearError(); + XMLPrinter stream( fp, compact ); + Print( &stream ); + return _errorID; +} + + +XMLError XMLDocument::Parse( const char* p, size_t len ) +{ + Clear(); + + if ( len == 0 || !p || !*p ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return _errorID; + } + if ( len == static_cast(-1) ) { + len = strlen( p ); + } + TIXMLASSERT( _charBuffer == 0 ); + _charBuffer = new char[ len+1 ]; + memcpy( _charBuffer, p, len ); + _charBuffer[len] = 0; + + Parse(); + if ( Error() ) { + // clean up now essentially dangling memory. + // and the parse fail can put objects in the + // pools that are dead and inaccessible. + DeleteChildren(); + _elementPool.Clear(); + _attributePool.Clear(); + _textPool.Clear(); + _commentPool.Clear(); + } + return _errorID; +} + + +void XMLDocument::Print( XMLPrinter* streamer ) const +{ + if ( streamer ) { + Accept( streamer ); + } + else { + XMLPrinter stdoutStreamer( stdout ); + Accept( &stdoutStreamer ); + } +} + + +void XMLDocument::ClearError() { + _errorID = XML_SUCCESS; + _errorLineNum = 0; + _errorStr.Reset(); +} + + +void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... ) +{ + TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT ); + _errorID = error; + _errorLineNum = lineNum; + _errorStr.Reset(); + + const size_t BUFFER_SIZE = 1000; + char* buffer = new char[BUFFER_SIZE]; + + TIXMLASSERT(sizeof(error) <= sizeof(int)); + TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum); + + if (format) { + size_t len = strlen(buffer); + TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": "); + len = strlen(buffer); + + va_list va; + va_start(va, format); + TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va); + va_end(va); + } + _errorStr.SetStr(buffer); + delete[] buffer; +} + + +/*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID) +{ + TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT ); + const char* errorName = _errorNames[errorID]; + TIXMLASSERT( errorName && errorName[0] ); + return errorName; +} + +const char* XMLDocument::ErrorStr() const +{ + return _errorStr.Empty() ? "" : _errorStr.GetStr(); +} + + +void XMLDocument::PrintError() const +{ + printf("%s\n", ErrorStr()); +} + +const char* XMLDocument::ErrorName() const +{ + return ErrorIDToName(_errorID); +} + +void XMLDocument::Parse() +{ + TIXMLASSERT( NoChildren() ); // Clear() must have been called previously + TIXMLASSERT( _charBuffer ); + _parseCurLineNum = 1; + _parseLineNum = 1; + char* p = _charBuffer; + p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum ); + p = const_cast( XMLUtil::ReadBOM( p, &_writeBOM ) ); + if ( !*p ) { + SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); + return; + } + ParseDeep(p, 0, &_parseCurLineNum ); +} + +void XMLDocument::PushDepth() +{ + _parsingDepth++; + if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) { + SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." ); + } +} + +void XMLDocument::PopDepth() +{ + TIXMLASSERT(_parsingDepth > 0); + --_parsingDepth; +} + +XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : + _elementJustOpened( false ), + _stack(), + _firstElement( true ), + _fp( file ), + _depth( depth ), + _textDepth( -1 ), + _processEntities( true ), + _compactMode( compact ), + _buffer() +{ + for( int i=0; i(entityValue); + TIXMLASSERT( flagIndex < ENTITY_RANGE ); + _entityFlag[flagIndex] = true; + } + _restrictedEntityFlag[static_cast('&')] = true; + _restrictedEntityFlag[static_cast('<')] = true; + _restrictedEntityFlag[static_cast('>')] = true; // not required, but consistency is nice + _buffer.Push( 0 ); +} + + +void XMLPrinter::Print( const char* format, ... ) +{ + va_list va; + va_start( va, format ); + + if ( _fp ) { + vfprintf( _fp, format, va ); + } + else { + const int len = TIXML_VSCPRINTF( format, va ); + // Close out and re-start the va-args + va_end( va ); + TIXMLASSERT( len >= 0 ); + va_start( va, format ); + TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 ); + char* p = _buffer.PushArr( len ) - 1; // back up over the null terminator. + TIXML_VSNPRINTF( p, len+1, format, va ); + } + va_end( va ); +} + + +void XMLPrinter::Write( const char* data, size_t size ) +{ + if ( _fp ) { + fwrite ( data , sizeof(char), size, _fp); + } + else { + char* p = _buffer.PushArr( static_cast(size) ) - 1; // back up over the null terminator. + memcpy( p, data, size ); + p[size] = 0; + } +} + + +void XMLPrinter::Putc( char ch ) +{ + if ( _fp ) { + fputc ( ch, _fp); + } + else { + char* p = _buffer.PushArr( sizeof(char) ) - 1; // back up over the null terminator. + p[0] = ch; + p[1] = 0; + } +} + + +void XMLPrinter::PrintSpace( int depth ) +{ + for( int i=0; i 0 && *q < ENTITY_RANGE ) { + // Check for entities. If one is found, flush + // the stream up until the entity, write the + // entity, and keep looking. + if ( flag[static_cast(*q)] ) { + while ( p < q ) { + const size_t delta = q - p; + const int toPrint = ( INT_MAX < delta ) ? INT_MAX : static_cast(delta); + Write( p, toPrint ); + p += toPrint; + } + bool entityPatternPrinted = false; + for( int i=0; i(delta); + Write( p, toPrint ); + } + } + else { + Write( p ); + } +} + + +void XMLPrinter::PushHeader( bool writeBOM, bool writeDec ) +{ + if ( writeBOM ) { + static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 }; + Write( reinterpret_cast< const char* >( bom ) ); + } + if ( writeDec ) { + PushDeclaration( "xml version=\"1.0\"" ); + } +} + +void XMLPrinter::PrepareForNewNode( bool compactMode ) +{ + SealElementIfJustOpened(); + + if ( compactMode ) { + return; + } + + if ( _firstElement ) { + PrintSpace (_depth); + } else if ( _textDepth < 0) { + Putc( '\n' ); + PrintSpace( _depth ); + } + + _firstElement = false; +} + +void XMLPrinter::OpenElement( const char* name, bool compactMode ) +{ + PrepareForNewNode( compactMode ); + _stack.Push( name ); + + Write ( "<" ); + Write ( name ); + + _elementJustOpened = true; + ++_depth; +} + + +void XMLPrinter::PushAttribute( const char* name, const char* value ) +{ + TIXMLASSERT( _elementJustOpened ); + Putc ( ' ' ); + Write( name ); + Write( "=\"" ); + PrintString( value, false ); + Putc ( '\"' ); +} + + +void XMLPrinter::PushAttribute( const char* name, int v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute( const char* name, unsigned v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute(const char* name, int64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + PushAttribute(name, buf); +} + + +void XMLPrinter::PushAttribute(const char* name, uint64_t v) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(v, buf, BUF_SIZE); + PushAttribute(name, buf); +} + + +void XMLPrinter::PushAttribute( const char* name, bool v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::PushAttribute( const char* name, double v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + PushAttribute( name, buf ); +} + + +void XMLPrinter::CloseElement( bool compactMode ) +{ + --_depth; + const char* name = _stack.Pop(); + + if ( _elementJustOpened ) { + Write( "/>" ); + } + else { + if ( _textDepth < 0 && !compactMode) { + Putc( '\n' ); + PrintSpace( _depth ); + } + Write ( "" ); + } + + if ( _textDepth == _depth ) { + _textDepth = -1; + } + if ( _depth == 0 && !compactMode) { + Putc( '\n' ); + } + _elementJustOpened = false; +} + + +void XMLPrinter::SealElementIfJustOpened() +{ + if ( !_elementJustOpened ) { + return; + } + _elementJustOpened = false; + Putc( '>' ); +} + + +void XMLPrinter::PushText( const char* text, bool cdata ) +{ + _textDepth = _depth-1; + + SealElementIfJustOpened(); + if ( cdata ) { + Write( "" ); + } + else { + PrintString( text, true ); + } +} + + +void XMLPrinter::PushText( int64_t value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( uint64_t value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr(value, buf, BUF_SIZE); + PushText(buf, false); +} + + +void XMLPrinter::PushText( int value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( unsigned value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( bool value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( float value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushText( double value ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( value, buf, BUF_SIZE ); + PushText( buf, false ); +} + + +void XMLPrinter::PushComment( const char* comment ) +{ + PrepareForNewNode( _compactMode ); + + Write( "" ); +} + + +void XMLPrinter::PushDeclaration( const char* value ) +{ + PrepareForNewNode( _compactMode ); + + Write( "" ); +} + + +void XMLPrinter::PushUnknown( const char* value ) +{ + PrepareForNewNode( _compactMode ); + + Write( "' ); +} + + +bool XMLPrinter::VisitEnter( const XMLDocument& doc ) +{ + _processEntities = doc.ProcessEntities(); + if ( doc.HasBOM() ) { + PushHeader( true, false ); + } + return true; +} + + +bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute ) +{ + const XMLElement* parentElem = 0; + if ( element.Parent() ) { + parentElem = element.Parent()->ToElement(); + } + const bool compactMode = parentElem ? CompactMode( *parentElem ) : _compactMode; + OpenElement( element.Name(), compactMode ); + while ( attribute ) { + PushAttribute( attribute->Name(), attribute->Value() ); + attribute = attribute->Next(); + } + return true; +} + + +bool XMLPrinter::VisitExit( const XMLElement& element ) +{ + CloseElement( CompactMode(element) ); + return true; +} + + +bool XMLPrinter::Visit( const XMLText& text ) +{ + PushText( text.Value(), text.CData() ); + return true; +} + + +bool XMLPrinter::Visit( const XMLComment& comment ) +{ + PushComment( comment.Value() ); + return true; +} + +bool XMLPrinter::Visit( const XMLDeclaration& declaration ) +{ + PushDeclaration( declaration.Value() ); + return true; +} + + +bool XMLPrinter::Visit( const XMLUnknown& unknown ) +{ + PushUnknown( unknown.Value() ); + return true; +} + +} // namespace tinyxml2 diff --git a/external_libs/tinyxml2/tinyxml2.h b/external_libs/tinyxml2/tinyxml2.h new file mode 100644 index 0000000..452ae95 --- /dev/null +++ b/external_libs/tinyxml2/tinyxml2.h @@ -0,0 +1,2380 @@ +/* +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#ifndef TINYXML2_INCLUDED +#define TINYXML2_INCLUDED + +#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__) +# include +# include +# include +# include +# include +# if defined(__PS3__) +# include +# endif +#else +# include +# include +# include +# include +# include +#endif +#include + +/* + TODO: intern strings instead of allocation. +*/ +/* + gcc: + g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe + + Formatting, Artistic Style: + AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h +*/ + +#if defined( _DEBUG ) || defined (__DEBUG__) +# ifndef TINYXML2_DEBUG +# define TINYXML2_DEBUG +# endif +#endif + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4251) +#endif + +#ifdef _WIN32 +# ifdef TINYXML2_EXPORT +# define TINYXML2_LIB __declspec(dllexport) +# elif defined(TINYXML2_IMPORT) +# define TINYXML2_LIB __declspec(dllimport) +# else +# define TINYXML2_LIB +# endif +#elif __GNUC__ >= 4 +# define TINYXML2_LIB __attribute__((visibility("default"))) +#else +# define TINYXML2_LIB +#endif + + +#if !defined(TIXMLASSERT) +#if defined(TINYXML2_DEBUG) +# if defined(_MSC_VER) +# // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like +# define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); } +# elif defined (ANDROID_NDK) +# include +# define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); } +# else +# include +# define TIXMLASSERT assert +# endif +#else +# define TIXMLASSERT( x ) {} +#endif +#endif + +/* Versioning, past 1.0.14: + http://semver.org/ +*/ +static const int TIXML2_MAJOR_VERSION = 9; +static const int TIXML2_MINOR_VERSION = 0; +static const int TIXML2_PATCH_VERSION = 0; + +#define TINYXML2_MAJOR_VERSION 9 +#define TINYXML2_MINOR_VERSION 0 +#define TINYXML2_PATCH_VERSION 0 + +// A fixed element depth limit is problematic. There needs to be a +// limit to avoid a stack overflow. However, that limit varies per +// system, and the capacity of the stack. On the other hand, it's a trivial +// attack that can result from ill, malicious, or even correctly formed XML, +// so there needs to be a limit in place. +static const int TINYXML2_MAX_ELEMENT_DEPTH = 100; + +namespace tinyxml2 +{ +class XMLDocument; +class XMLElement; +class XMLAttribute; +class XMLComment; +class XMLText; +class XMLDeclaration; +class XMLUnknown; +class XMLPrinter; + +/* + A class that wraps strings. Normally stores the start and end + pointers into the XML file itself, and will apply normalization + and entity translation if actually read. Can also store (and memory + manage) a traditional char[] + + Isn't clear why TINYXML2_LIB is needed; but seems to fix #719 +*/ +class TINYXML2_LIB StrPair +{ +public: + enum Mode { + NEEDS_ENTITY_PROCESSING = 0x01, + NEEDS_NEWLINE_NORMALIZATION = 0x02, + NEEDS_WHITESPACE_COLLAPSING = 0x04, + + TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, + TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, + ATTRIBUTE_NAME = 0, + ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION, + ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION, + COMMENT = NEEDS_NEWLINE_NORMALIZATION + }; + + StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {} + ~StrPair(); + + void Set( char* start, char* end, int flags ) { + TIXMLASSERT( start ); + TIXMLASSERT( end ); + Reset(); + _start = start; + _end = end; + _flags = flags | NEEDS_FLUSH; + } + + const char* GetStr(); + + bool Empty() const { + return _start == _end; + } + + void SetInternedStr( const char* str ) { + Reset(); + _start = const_cast(str); + } + + void SetStr( const char* str, int flags=0 ); + + char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr ); + char* ParseName( char* in ); + + void TransferTo( StrPair* other ); + void Reset(); + +private: + void CollapseWhitespace(); + + enum { + NEEDS_FLUSH = 0x100, + NEEDS_DELETE = 0x200 + }; + + int _flags; + char* _start; + char* _end; + + StrPair( const StrPair& other ); // not supported + void operator=( const StrPair& other ); // not supported, use TransferTo() +}; + + +/* + A dynamic array of Plain Old Data. Doesn't support constructors, etc. + Has a small initial memory pool, so that low or no usage will not + cause a call to new/delete +*/ +template +class DynArray +{ +public: + DynArray() : + _mem( _pool ), + _allocated( INITIAL_SIZE ), + _size( 0 ) + { + } + + ~DynArray() { + if ( _mem != _pool ) { + delete [] _mem; + } + } + + void Clear() { + _size = 0; + } + + void Push( T t ) { + TIXMLASSERT( _size < INT_MAX ); + EnsureCapacity( _size+1 ); + _mem[_size] = t; + ++_size; + } + + T* PushArr( int count ) { + TIXMLASSERT( count >= 0 ); + TIXMLASSERT( _size <= INT_MAX - count ); + EnsureCapacity( _size+count ); + T* ret = &_mem[_size]; + _size += count; + return ret; + } + + T Pop() { + TIXMLASSERT( _size > 0 ); + --_size; + return _mem[_size]; + } + + void PopArr( int count ) { + TIXMLASSERT( _size >= count ); + _size -= count; + } + + bool Empty() const { + return _size == 0; + } + + T& operator[](int i) { + TIXMLASSERT( i>= 0 && i < _size ); + return _mem[i]; + } + + const T& operator[](int i) const { + TIXMLASSERT( i>= 0 && i < _size ); + return _mem[i]; + } + + const T& PeekTop() const { + TIXMLASSERT( _size > 0 ); + return _mem[ _size - 1]; + } + + int Size() const { + TIXMLASSERT( _size >= 0 ); + return _size; + } + + int Capacity() const { + TIXMLASSERT( _allocated >= INITIAL_SIZE ); + return _allocated; + } + + void SwapRemove(int i) { + TIXMLASSERT(i >= 0 && i < _size); + TIXMLASSERT(_size > 0); + _mem[i] = _mem[_size - 1]; + --_size; + } + + const T* Mem() const { + TIXMLASSERT( _mem ); + return _mem; + } + + T* Mem() { + TIXMLASSERT( _mem ); + return _mem; + } + +private: + DynArray( const DynArray& ); // not supported + void operator=( const DynArray& ); // not supported + + void EnsureCapacity( int cap ) { + TIXMLASSERT( cap > 0 ); + if ( cap > _allocated ) { + TIXMLASSERT( cap <= INT_MAX / 2 ); + const int newAllocated = cap * 2; + T* newMem = new T[newAllocated]; + TIXMLASSERT( newAllocated >= _size ); + memcpy( newMem, _mem, sizeof(T)*_size ); // warning: not using constructors, only works for PODs + if ( _mem != _pool ) { + delete [] _mem; + } + _mem = newMem; + _allocated = newAllocated; + } + } + + T* _mem; + T _pool[INITIAL_SIZE]; + int _allocated; // objects allocated + int _size; // number objects in use +}; + + +/* + Parent virtual class of a pool for fast allocation + and deallocation of objects. +*/ +class MemPool +{ +public: + MemPool() {} + virtual ~MemPool() {} + + virtual int ItemSize() const = 0; + virtual void* Alloc() = 0; + virtual void Free( void* ) = 0; + virtual void SetTracked() = 0; +}; + + +/* + Template child class to create pools of the correct type. +*/ +template< int ITEM_SIZE > +class MemPoolT : public MemPool +{ +public: + MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {} + ~MemPoolT() { + MemPoolT< ITEM_SIZE >::Clear(); + } + + void Clear() { + // Delete the blocks. + while( !_blockPtrs.Empty()) { + Block* lastBlock = _blockPtrs.Pop(); + delete lastBlock; + } + _root = 0; + _currentAllocs = 0; + _nAllocs = 0; + _maxAllocs = 0; + _nUntracked = 0; + } + + virtual int ItemSize() const { + return ITEM_SIZE; + } + int CurrentAllocs() const { + return _currentAllocs; + } + + virtual void* Alloc() { + if ( !_root ) { + // Need a new block. + Block* block = new Block(); + _blockPtrs.Push( block ); + + Item* blockItems = block->items; + for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) { + blockItems[i].next = &(blockItems[i + 1]); + } + blockItems[ITEMS_PER_BLOCK - 1].next = 0; + _root = blockItems; + } + Item* const result = _root; + TIXMLASSERT( result != 0 ); + _root = _root->next; + + ++_currentAllocs; + if ( _currentAllocs > _maxAllocs ) { + _maxAllocs = _currentAllocs; + } + ++_nAllocs; + ++_nUntracked; + return result; + } + + virtual void Free( void* mem ) { + if ( !mem ) { + return; + } + --_currentAllocs; + Item* item = static_cast( mem ); +#ifdef TINYXML2_DEBUG + memset( item, 0xfe, sizeof( *item ) ); +#endif + item->next = _root; + _root = item; + } + void Trace( const char* name ) { + printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n", + name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs, + ITEM_SIZE, _nAllocs, _blockPtrs.Size() ); + } + + void SetTracked() { + --_nUntracked; + } + + int Untracked() const { + return _nUntracked; + } + + // This number is perf sensitive. 4k seems like a good tradeoff on my machine. + // The test file is large, 170k. + // Release: VS2010 gcc(no opt) + // 1k: 4000 + // 2k: 4000 + // 4k: 3900 21000 + // 16k: 5200 + // 32k: 4300 + // 64k: 4000 21000 + // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK + // in private part if ITEMS_PER_BLOCK is private + enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE }; + +private: + MemPoolT( const MemPoolT& ); // not supported + void operator=( const MemPoolT& ); // not supported + + union Item { + Item* next; + char itemData[ITEM_SIZE]; + }; + struct Block { + Item items[ITEMS_PER_BLOCK]; + }; + DynArray< Block*, 10 > _blockPtrs; + Item* _root; + + int _currentAllocs; + int _nAllocs; + int _maxAllocs; + int _nUntracked; +}; + + + +/** + Implements the interface to the "Visitor pattern" (see the Accept() method.) + If you call the Accept() method, it requires being passed a XMLVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs + are simply called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its siblings will be visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the XMLDocument, although all nodes support visiting. + + You should never change the document from a callback. + + @sa XMLNode::Accept() +*/ +class TINYXML2_LIB XMLVisitor +{ +public: + virtual ~XMLVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const XMLDocument& /*doc*/ ) { + return true; + } + /// Visit a document. + virtual bool VisitExit( const XMLDocument& /*doc*/ ) { + return true; + } + + /// Visit an element. + virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) { + return true; + } + /// Visit an element. + virtual bool VisitExit( const XMLElement& /*element*/ ) { + return true; + } + + /// Visit a declaration. + virtual bool Visit( const XMLDeclaration& /*declaration*/ ) { + return true; + } + /// Visit a text node. + virtual bool Visit( const XMLText& /*text*/ ) { + return true; + } + /// Visit a comment node. + virtual bool Visit( const XMLComment& /*comment*/ ) { + return true; + } + /// Visit an unknown node. + virtual bool Visit( const XMLUnknown& /*unknown*/ ) { + return true; + } +}; + +// WARNING: must match XMLDocument::_errorNames[] +enum XMLError { + XML_SUCCESS = 0, + XML_NO_ATTRIBUTE, + XML_WRONG_ATTRIBUTE_TYPE, + XML_ERROR_FILE_NOT_FOUND, + XML_ERROR_FILE_COULD_NOT_BE_OPENED, + XML_ERROR_FILE_READ_ERROR, + XML_ERROR_PARSING_ELEMENT, + XML_ERROR_PARSING_ATTRIBUTE, + XML_ERROR_PARSING_TEXT, + XML_ERROR_PARSING_CDATA, + XML_ERROR_PARSING_COMMENT, + XML_ERROR_PARSING_DECLARATION, + XML_ERROR_PARSING_UNKNOWN, + XML_ERROR_EMPTY_DOCUMENT, + XML_ERROR_MISMATCHED_ELEMENT, + XML_ERROR_PARSING, + XML_CAN_NOT_CONVERT_TEXT, + XML_NO_TEXT_NODE, + XML_ELEMENT_DEPTH_EXCEEDED, + + XML_ERROR_COUNT +}; + + +/* + Utility functionality. +*/ +class TINYXML2_LIB XMLUtil +{ +public: + static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr ) { + TIXMLASSERT( p ); + + while( IsWhiteSpace(*p) ) { + if (curLineNumPtr && *p == '\n') { + ++(*curLineNumPtr); + } + ++p; + } + TIXMLASSERT( p ); + return p; + } + static char* SkipWhiteSpace( char* const p, int* curLineNumPtr ) { + return const_cast( SkipWhiteSpace( const_cast(p), curLineNumPtr ) ); + } + + // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't + // correct, but simple, and usually works. + static bool IsWhiteSpace( char p ) { + return !IsUTF8Continuation(p) && isspace( static_cast(p) ); + } + + inline static bool IsNameStartChar( unsigned char ch ) { + if ( ch >= 128 ) { + // This is a heuristic guess in attempt to not implement Unicode-aware isalpha() + return true; + } + if ( isalpha( ch ) ) { + return true; + } + return ch == ':' || ch == '_'; + } + + inline static bool IsNameChar( unsigned char ch ) { + return IsNameStartChar( ch ) + || isdigit( ch ) + || ch == '.' + || ch == '-'; + } + + inline static bool IsPrefixHex( const char* p) { + p = SkipWhiteSpace(p, 0); + return p && *p == '0' && ( *(p + 1) == 'x' || *(p + 1) == 'X'); + } + + inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) { + if ( p == q ) { + return true; + } + TIXMLASSERT( p ); + TIXMLASSERT( q ); + TIXMLASSERT( nChar >= 0 ); + return strncmp( p, q, nChar ) == 0; + } + + inline static bool IsUTF8Continuation( const char p ) { + return ( p & 0x80 ) != 0; + } + + static const char* ReadBOM( const char* p, bool* hasBOM ); + // p is the starting location, + // the UTF-8 value of the entity will be placed in value, and length filled in. + static const char* GetCharacterRef( const char* p, char* value, int* length ); + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + + // converts primitive types to strings + static void ToStr( int v, char* buffer, int bufferSize ); + static void ToStr( unsigned v, char* buffer, int bufferSize ); + static void ToStr( bool v, char* buffer, int bufferSize ); + static void ToStr( float v, char* buffer, int bufferSize ); + static void ToStr( double v, char* buffer, int bufferSize ); + static void ToStr(int64_t v, char* buffer, int bufferSize); + static void ToStr(uint64_t v, char* buffer, int bufferSize); + + // converts strings to primitive types + static bool ToInt( const char* str, int* value ); + static bool ToUnsigned( const char* str, unsigned* value ); + static bool ToBool( const char* str, bool* value ); + static bool ToFloat( const char* str, float* value ); + static bool ToDouble( const char* str, double* value ); + static bool ToInt64(const char* str, int64_t* value); + static bool ToUnsigned64(const char* str, uint64_t* value); + // Changes what is serialized for a boolean value. + // Default to "true" and "false". Shouldn't be changed + // unless you have a special testing or compatibility need. + // Be careful: static, global, & not thread safe. + // Be sure to set static const memory as parameters. + static void SetBoolSerialization(const char* writeTrue, const char* writeFalse); + +private: + static const char* writeBoolTrue; + static const char* writeBoolFalse; +}; + + +/** XMLNode is a base class for every object that is in the + XML Document Object Model (DOM), except XMLAttributes. + Nodes have siblings, a parent, and children which can + be navigated. A node is always in a XMLDocument. + The type of a XMLNode can be queried, and it can + be cast to its more defined type. + + A XMLDocument allocates memory for all its Nodes. + When the XMLDocument gets deleted, all its Nodes + will also be deleted. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + @endverbatim +*/ +class TINYXML2_LIB XMLNode +{ + friend class XMLDocument; + friend class XMLElement; +public: + + /// Get the XMLDocument that owns this XMLNode. + const XMLDocument* GetDocument() const { + TIXMLASSERT( _document ); + return _document; + } + /// Get the XMLDocument that owns this XMLNode. + XMLDocument* GetDocument() { + TIXMLASSERT( _document ); + return _document; + } + + /// Safely cast to an Element, or null. + virtual XMLElement* ToElement() { + return 0; + } + /// Safely cast to Text, or null. + virtual XMLText* ToText() { + return 0; + } + /// Safely cast to a Comment, or null. + virtual XMLComment* ToComment() { + return 0; + } + /// Safely cast to a Document, or null. + virtual XMLDocument* ToDocument() { + return 0; + } + /// Safely cast to a Declaration, or null. + virtual XMLDeclaration* ToDeclaration() { + return 0; + } + /// Safely cast to an Unknown, or null. + virtual XMLUnknown* ToUnknown() { + return 0; + } + + virtual const XMLElement* ToElement() const { + return 0; + } + virtual const XMLText* ToText() const { + return 0; + } + virtual const XMLComment* ToComment() const { + return 0; + } + virtual const XMLDocument* ToDocument() const { + return 0; + } + virtual const XMLDeclaration* ToDeclaration() const { + return 0; + } + virtual const XMLUnknown* ToUnknown() const { + return 0; + } + + /** The meaning of 'value' changes for the specific type. + @verbatim + Document: empty (NULL is returned, not an empty string) + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + const char* Value() const; + + /** Set the Value of an XML node. + @sa Value() + */ + void SetValue( const char* val, bool staticMem=false ); + + /// Gets the line number the node is in, if the document was parsed from a file. + int GetLineNum() const { return _parseLineNum; } + + /// Get the parent of this node on the DOM. + const XMLNode* Parent() const { + return _parent; + } + + XMLNode* Parent() { + return _parent; + } + + /// Returns true if this node has no children. + bool NoChildren() const { + return !_firstChild; + } + + /// Get the first child node, or null if none exists. + const XMLNode* FirstChild() const { + return _firstChild; + } + + XMLNode* FirstChild() { + return _firstChild; + } + + /** Get the first child element, or optionally the first child + element with the specified name. + */ + const XMLElement* FirstChildElement( const char* name = 0 ) const; + + XMLElement* FirstChildElement( const char* name = 0 ) { + return const_cast(const_cast(this)->FirstChildElement( name )); + } + + /// Get the last child node, or null if none exists. + const XMLNode* LastChild() const { + return _lastChild; + } + + XMLNode* LastChild() { + return _lastChild; + } + + /** Get the last child element or optionally the last child + element with the specified name. + */ + const XMLElement* LastChildElement( const char* name = 0 ) const; + + XMLElement* LastChildElement( const char* name = 0 ) { + return const_cast(const_cast(this)->LastChildElement(name) ); + } + + /// Get the previous (left) sibling node of this node. + const XMLNode* PreviousSibling() const { + return _prev; + } + + XMLNode* PreviousSibling() { + return _prev; + } + + /// Get the previous (left) sibling element of this node, with an optionally supplied name. + const XMLElement* PreviousSiblingElement( const char* name = 0 ) const ; + + XMLElement* PreviousSiblingElement( const char* name = 0 ) { + return const_cast(const_cast(this)->PreviousSiblingElement( name ) ); + } + + /// Get the next (right) sibling node of this node. + const XMLNode* NextSibling() const { + return _next; + } + + XMLNode* NextSibling() { + return _next; + } + + /// Get the next (right) sibling element of this node, with an optionally supplied name. + const XMLElement* NextSiblingElement( const char* name = 0 ) const; + + XMLElement* NextSiblingElement( const char* name = 0 ) { + return const_cast(const_cast(this)->NextSiblingElement( name ) ); + } + + /** + Add a child node as the last (right) child. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the node does not + belong to the same document. + */ + XMLNode* InsertEndChild( XMLNode* addThis ); + + XMLNode* LinkEndChild( XMLNode* addThis ) { + return InsertEndChild( addThis ); + } + /** + Add a child node as the first (left) child. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the node does not + belong to the same document. + */ + XMLNode* InsertFirstChild( XMLNode* addThis ); + /** + Add a node after the specified child node. + If the child node is already part of the document, + it is moved from its old location to the new location. + Returns the addThis argument or 0 if the afterThis node + is not a child of this node, or if the node does not + belong to the same document. + */ + XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis ); + + /** + Delete all the children of this node. + */ + void DeleteChildren(); + + /** + Delete a child of this node. + */ + void DeleteChild( XMLNode* node ); + + /** + Make a copy of this node, but not its children. + You may pass in a Document pointer that will be + the owner of the new Node. If the 'document' is + null, then the node returned will be allocated + from the current Document. (this->GetDocument()) + + Note: if called on a XMLDocument, this will return null. + */ + virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0; + + /** + Make a copy of this node and all its children. + + If the 'target' is null, then the nodes will + be allocated in the current document. If 'target' + is specified, the memory will be allocated is the + specified XMLDocument. + + NOTE: This is probably not the correct tool to + copy a document, since XMLDocuments can have multiple + top level XMLNodes. You probably want to use + XMLDocument::DeepCopy() + */ + XMLNode* DeepClone( XMLDocument* target ) const; + + /** + Test if 2 nodes are the same, but don't test children. + The 2 nodes do not need to be in the same Document. + + Note: if called on a XMLDocument, this will return false. + */ + virtual bool ShallowEqual( const XMLNode* compare ) const = 0; + + /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the XMLVisitor interface. + + This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + XMLPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( XMLVisitor* visitor ) const = 0; + + /** + Set user data into the XMLNode. TinyXML-2 in + no way processes or interprets user data. + It is initially 0. + */ + void SetUserData(void* userData) { _userData = userData; } + + /** + Get user data set into the XMLNode. TinyXML-2 in + no way processes or interprets user data. + It is initially 0. + */ + void* GetUserData() const { return _userData; } + +protected: + explicit XMLNode( XMLDocument* ); + virtual ~XMLNode(); + + virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); + + XMLDocument* _document; + XMLNode* _parent; + mutable StrPair _value; + int _parseLineNum; + + XMLNode* _firstChild; + XMLNode* _lastChild; + + XMLNode* _prev; + XMLNode* _next; + + void* _userData; + +private: + MemPool* _memPool; + void Unlink( XMLNode* child ); + static void DeleteNode( XMLNode* node ); + void InsertChildPreamble( XMLNode* insertThis ) const; + const XMLElement* ToElementWithName( const char* name ) const; + + XMLNode( const XMLNode& ); // not supported + XMLNode& operator=( const XMLNode& ); // not supported +}; + + +/** XML text. + + Note that a text node can have child element nodes, for example: + @verbatim + This is bold + @endverbatim + + A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCData() and query it with CData(). +*/ +class TINYXML2_LIB XMLText : public XMLNode +{ + friend class XMLDocument; +public: + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLText* ToText() { + return this; + } + virtual const XMLText* ToText() const { + return this; + } + + /// Declare whether this should be CDATA or standard text. + void SetCData( bool isCData ) { + _isCData = isCData; + } + /// Returns true if this is a CDATA text element. + bool CData() const { + return _isCData; + } + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLText( XMLDocument* doc ) : XMLNode( doc ), _isCData( false ) {} + virtual ~XMLText() {} + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + bool _isCData; + + XMLText( const XMLText& ); // not supported + XMLText& operator=( const XMLText& ); // not supported +}; + + +/** An XML Comment. */ +class TINYXML2_LIB XMLComment : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLComment* ToComment() { + return this; + } + virtual const XMLComment* ToComment() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLComment( XMLDocument* doc ); + virtual ~XMLComment(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr); + +private: + XMLComment( const XMLComment& ); // not supported + XMLComment& operator=( const XMLComment& ); // not supported +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXML-2 will happily read or write files without a declaration, + however. + + The text of the declaration isn't interpreted. It is parsed + and written as a string. +*/ +class TINYXML2_LIB XMLDeclaration : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLDeclaration* ToDeclaration() { + return this; + } + virtual const XMLDeclaration* ToDeclaration() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLDeclaration( XMLDocument* doc ); + virtual ~XMLDeclaration(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLDeclaration( const XMLDeclaration& ); // not supported + XMLDeclaration& operator=( const XMLDeclaration& ); // not supported +}; + + +/** Any tag that TinyXML-2 doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into XMLUnknowns. +*/ +class TINYXML2_LIB XMLUnknown : public XMLNode +{ + friend class XMLDocument; +public: + virtual XMLUnknown* ToUnknown() { + return this; + } + virtual const XMLUnknown* ToUnknown() const { + return this; + } + + virtual bool Accept( XMLVisitor* visitor ) const; + + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + explicit XMLUnknown( XMLDocument* doc ); + virtual ~XMLUnknown(); + + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLUnknown( const XMLUnknown& ); // not supported + XMLUnknown& operator=( const XMLUnknown& ); // not supported +}; + + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not XMLNodes. You may only query the + Next() attribute in a list. +*/ +class TINYXML2_LIB XMLAttribute +{ + friend class XMLElement; +public: + /// The name of the attribute. + const char* Name() const; + + /// The value of the attribute. + const char* Value() const; + + /// Gets the line number the attribute is in, if the document was parsed from a file. + int GetLineNum() const { return _parseLineNum; } + + /// The next attribute in the list. + const XMLAttribute* Next() const { + return _next; + } + + /** IntValue interprets the attribute as an integer, and returns the value. + If the value isn't an integer, 0 will be returned. There is no error checking; + use QueryIntValue() if you need error checking. + */ + int IntValue() const { + int i = 0; + QueryIntValue(&i); + return i; + } + + int64_t Int64Value() const { + int64_t i = 0; + QueryInt64Value(&i); + return i; + } + + uint64_t Unsigned64Value() const { + uint64_t i = 0; + QueryUnsigned64Value(&i); + return i; + } + + /// Query as an unsigned integer. See IntValue() + unsigned UnsignedValue() const { + unsigned i=0; + QueryUnsignedValue( &i ); + return i; + } + /// Query as a boolean. See IntValue() + bool BoolValue() const { + bool b=false; + QueryBoolValue( &b ); + return b; + } + /// Query as a double. See IntValue() + double DoubleValue() const { + double d=0; + QueryDoubleValue( &d ); + return d; + } + /// Query as a float. See IntValue() + float FloatValue() const { + float f=0; + QueryFloatValue( &f ); + return f; + } + + /** QueryIntValue interprets the attribute as an integer, and returns the value + in the provided parameter. The function will return XML_SUCCESS on success, + and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful. + */ + XMLError QueryIntValue( int* value ) const; + /// See QueryIntValue + XMLError QueryUnsignedValue( unsigned int* value ) const; + /// See QueryIntValue + XMLError QueryInt64Value(int64_t* value) const; + /// See QueryIntValue + XMLError QueryUnsigned64Value(uint64_t* value) const; + /// See QueryIntValue + XMLError QueryBoolValue( bool* value ) const; + /// See QueryIntValue + XMLError QueryDoubleValue( double* value ) const; + /// See QueryIntValue + XMLError QueryFloatValue( float* value ) const; + + /// Set the attribute to a string value. + void SetAttribute( const char* value ); + /// Set the attribute to value. + void SetAttribute( int value ); + /// Set the attribute to value. + void SetAttribute( unsigned value ); + /// Set the attribute to value. + void SetAttribute(int64_t value); + /// Set the attribute to value. + void SetAttribute(uint64_t value); + /// Set the attribute to value. + void SetAttribute( bool value ); + /// Set the attribute to value. + void SetAttribute( double value ); + /// Set the attribute to value. + void SetAttribute( float value ); + +private: + enum { BUF_SIZE = 200 }; + + XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {} + virtual ~XMLAttribute() {} + + XMLAttribute( const XMLAttribute& ); // not supported + void operator=( const XMLAttribute& ); // not supported + void SetName( const char* name ); + + char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr ); + + mutable StrPair _name; + mutable StrPair _value; + int _parseLineNum; + XMLAttribute* _next; + MemPool* _memPool; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TINYXML2_LIB XMLElement : public XMLNode +{ + friend class XMLDocument; +public: + /// Get the name of an element (which is the Value() of the node.) + const char* Name() const { + return Value(); + } + /// Set the name of the element. + void SetName( const char* str, bool staticMem=false ) { + SetValue( str, staticMem ); + } + + virtual XMLElement* ToElement() { + return this; + } + virtual const XMLElement* ToElement() const { + return this; + } + virtual bool Accept( XMLVisitor* visitor ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none + exists. For example: + + @verbatim + const char* value = ele->Attribute( "foo" ); + @endverbatim + + The 'value' parameter is normally null. However, if specified, + the attribute will only be returned if the 'name' and 'value' + match. This allow you to write code: + + @verbatim + if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar(); + @endverbatim + + rather than: + @verbatim + if ( ele->Attribute( "foo" ) ) { + if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar(); + } + @endverbatim + */ + const char* Attribute( const char* name, const char* value=0 ) const; + + /** Given an attribute name, IntAttribute() returns the value + of the attribute interpreted as an integer. The default + value will be returned if the attribute isn't present, + or if there is an error. (For a method with error + checking, see QueryIntAttribute()). + */ + int IntAttribute(const char* name, int defaultValue = 0) const; + /// See IntAttribute() + unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const; + /// See IntAttribute() + int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const; + /// See IntAttribute() + uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const; + /// See IntAttribute() + bool BoolAttribute(const char* name, bool defaultValue = false) const; + /// See IntAttribute() + double DoubleAttribute(const char* name, double defaultValue = 0) const; + /// See IntAttribute() + float FloatAttribute(const char* name, float defaultValue = 0) const; + + /** Given an attribute name, QueryIntAttribute() returns + XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion + can't be performed, or XML_NO_ATTRIBUTE if the attribute + doesn't exist. If successful, the result of the conversion + will be written to 'value'. If not successful, nothing will + be written to 'value'. This allows you to provide default + value: + + @verbatim + int value = 10; + QueryIntAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 + @endverbatim + */ + XMLError QueryIntAttribute( const char* name, int* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryIntValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryUnsignedValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryInt64Attribute(const char* name, int64_t* value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + return a->QueryInt64Value(value); + } + + /// See QueryIntAttribute() + XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const { + const XMLAttribute* a = FindAttribute(name); + if(!a) { + return XML_NO_ATTRIBUTE; + } + return a->QueryUnsigned64Value(value); + } + + /// See QueryIntAttribute() + XMLError QueryBoolAttribute( const char* name, bool* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryBoolValue( value ); + } + /// See QueryIntAttribute() + XMLError QueryDoubleAttribute( const char* name, double* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryDoubleValue( value ); + } + /// See QueryIntAttribute() + XMLError QueryFloatAttribute( const char* name, float* value ) const { + const XMLAttribute* a = FindAttribute( name ); + if ( !a ) { + return XML_NO_ATTRIBUTE; + } + return a->QueryFloatValue( value ); + } + + /// See QueryIntAttribute() + XMLError QueryStringAttribute(const char* name, const char** value) const { + const XMLAttribute* a = FindAttribute(name); + if (!a) { + return XML_NO_ATTRIBUTE; + } + *value = a->Value(); + return XML_SUCCESS; + } + + + + /** Given an attribute name, QueryAttribute() returns + XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion + can't be performed, or XML_NO_ATTRIBUTE if the attribute + doesn't exist. It is overloaded for the primitive types, + and is a generally more convenient replacement of + QueryIntAttribute() and related functions. + + If successful, the result of the conversion + will be written to 'value'. If not successful, nothing will + be written to 'value'. This allows you to provide default + value: + + @verbatim + int value = 10; + QueryAttribute( "foo", &value ); // if "foo" isn't found, value will still be 10 + @endverbatim + */ + XMLError QueryAttribute( const char* name, int* value ) const { + return QueryIntAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, unsigned int* value ) const { + return QueryUnsignedAttribute( name, value ); + } + + XMLError QueryAttribute(const char* name, int64_t* value) const { + return QueryInt64Attribute(name, value); + } + + XMLError QueryAttribute(const char* name, uint64_t* value) const { + return QueryUnsigned64Attribute(name, value); + } + + XMLError QueryAttribute( const char* name, bool* value ) const { + return QueryBoolAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, double* value ) const { + return QueryDoubleAttribute( name, value ); + } + + XMLError QueryAttribute( const char* name, float* value ) const { + return QueryFloatAttribute( name, value ); + } + + XMLError QueryAttribute(const char* name, const char** value) const { + return QueryStringAttribute(name, value); + } + + /// Sets the named attribute to value. + void SetAttribute( const char* name, const char* value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, int value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, unsigned value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + + /// Sets the named attribute to value. + void SetAttribute(const char* name, int64_t value) { + XMLAttribute* a = FindOrCreateAttribute(name); + a->SetAttribute(value); + } + + /// Sets the named attribute to value. + void SetAttribute(const char* name, uint64_t value) { + XMLAttribute* a = FindOrCreateAttribute(name); + a->SetAttribute(value); + } + + /// Sets the named attribute to value. + void SetAttribute( const char* name, bool value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, double value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. + void SetAttribute( const char* name, float value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + + /** + Delete an attribute. + */ + void DeleteAttribute( const char* name ); + + /// Return the first attribute in the list. + const XMLAttribute* FirstAttribute() const { + return _rootAttribute; + } + /// Query a specific attribute in the list. + const XMLAttribute* FindAttribute( const char* name ) const; + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the XMLText child + and accessing it directly. + + If the first child of 'this' is a XMLText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + */ + const char* GetText() const; + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, SetText() is limited compared to creating an XMLText child + and mutating it directly. + + If the first child of 'this' is a XMLText, SetText() sets its value to + the given string, otherwise it will create a first child that is an XMLText. + + This is a convenient method for setting the text of simple contained text: + @verbatim + This is text + fooElement->SetText( "Hullaballoo!" ); + Hullaballoo! + @endverbatim + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then it will not change "This is text", but rather prefix it with a text element: + @verbatim + Hullaballoo!This is text + @endverbatim + + For this XML: + @verbatim + + @endverbatim + SetText() will generate + @verbatim + Hullaballoo! + @endverbatim + */ + void SetText( const char* inText ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( int value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( unsigned value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText(int64_t value); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText(uint64_t value); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( bool value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( double value ); + /// Convenience method for setting text inside an element. See SetText() for important limitations. + void SetText( float value ); + + /** + Convenience method to query the value of a child text node. This is probably best + shown by example. Given you have a document is this form: + @verbatim + + 1 + 1.4 + + @endverbatim + + The QueryIntText() and similar functions provide a safe and easier way to get to the + "value" of x and y. + + @verbatim + int x = 0; + float y = 0; // types of x and y are contrived for example + const XMLElement* xElement = pointElement->FirstChildElement( "x" ); + const XMLElement* yElement = pointElement->FirstChildElement( "y" ); + xElement->QueryIntText( &x ); + yElement->QueryFloatText( &y ); + @endverbatim + + @returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted + to the requested type, and XML_NO_TEXT_NODE if there is no child text to query. + + */ + XMLError QueryIntText( int* ival ) const; + /// See QueryIntText() + XMLError QueryUnsignedText( unsigned* uval ) const; + /// See QueryIntText() + XMLError QueryInt64Text(int64_t* uval) const; + /// See QueryIntText() + XMLError QueryUnsigned64Text(uint64_t* uval) const; + /// See QueryIntText() + XMLError QueryBoolText( bool* bval ) const; + /// See QueryIntText() + XMLError QueryDoubleText( double* dval ) const; + /// See QueryIntText() + XMLError QueryFloatText( float* fval ) const; + + int IntText(int defaultValue = 0) const; + + /// See QueryIntText() + unsigned UnsignedText(unsigned defaultValue = 0) const; + /// See QueryIntText() + int64_t Int64Text(int64_t defaultValue = 0) const; + /// See QueryIntText() + uint64_t Unsigned64Text(uint64_t defaultValue = 0) const; + /// See QueryIntText() + bool BoolText(bool defaultValue = false) const; + /// See QueryIntText() + double DoubleText(double defaultValue = 0) const; + /// See QueryIntText() + float FloatText(float defaultValue = 0) const; + + /** + Convenience method to create a new XMLElement and add it as last (right) + child of this node. Returns the created and inserted element. + */ + XMLElement* InsertNewChildElement(const char* name); + /// See InsertNewChildElement() + XMLComment* InsertNewComment(const char* comment); + /// See InsertNewChildElement() + XMLText* InsertNewText(const char* text); + /// See InsertNewChildElement() + XMLDeclaration* InsertNewDeclaration(const char* text); + /// See InsertNewChildElement() + XMLUnknown* InsertNewUnknown(const char* text); + + + // internal: + enum ElementClosingType { + OPEN, // + CLOSED, // + CLOSING // + }; + ElementClosingType ClosingType() const { + return _closingType; + } + virtual XMLNode* ShallowClone( XMLDocument* document ) const; + virtual bool ShallowEqual( const XMLNode* compare ) const; + +protected: + char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr ); + +private: + XMLElement( XMLDocument* doc ); + virtual ~XMLElement(); + XMLElement( const XMLElement& ); // not supported + void operator=( const XMLElement& ); // not supported + + XMLAttribute* FindOrCreateAttribute( const char* name ); + char* ParseAttributes( char* p, int* curLineNumPtr ); + static void DeleteAttribute( XMLAttribute* attribute ); + XMLAttribute* CreateAttribute(); + + enum { BUF_SIZE = 200 }; + ElementClosingType _closingType; + // The attribute list is ordered; there is no 'lastAttribute' + // because the list needs to be scanned for dupes before adding + // a new attribute. + XMLAttribute* _rootAttribute; +}; + + +enum Whitespace { + PRESERVE_WHITESPACE, + COLLAPSE_WHITESPACE +}; + + +/** A Document binds together all the functionality. + It can be saved, loaded, and printed to the screen. + All Nodes are connected and allocated to a Document. + If the Document is deleted, all its Nodes are also deleted. +*/ +class TINYXML2_LIB XMLDocument : public XMLNode +{ + friend class XMLElement; + // Gives access to SetError and Push/PopDepth, but over-access for everything else. + // Wishing C++ had "internal" scope. + friend class XMLNode; + friend class XMLText; + friend class XMLComment; + friend class XMLDeclaration; + friend class XMLUnknown; +public: + /// constructor + XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE ); + ~XMLDocument(); + + virtual XMLDocument* ToDocument() { + TIXMLASSERT( this == _document ); + return this; + } + virtual const XMLDocument* ToDocument() const { + TIXMLASSERT( this == _document ); + return this; + } + + /** + Parse an XML file from a character string. + Returns XML_SUCCESS (0) on success, or + an errorID. + + You may optionally pass in the 'nBytes', which is + the number of bytes which will be parsed. If not + specified, TinyXML-2 will assume 'xml' points to a + null terminated string. + */ + XMLError Parse( const char* xml, size_t nBytes=static_cast(-1) ); + + /** + Load an XML file from disk. + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError LoadFile( const char* filename ); + + /** + Load an XML file from disk. You are responsible + for providing and closing the FILE*. + + NOTE: The file should be opened as binary ("rb") + not text in order for TinyXML-2 to correctly + do newline normalization. + + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError LoadFile( FILE* ); + + /** + Save the XML file to disk. + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError SaveFile( const char* filename, bool compact = false ); + + /** + Save the XML file to disk. You are responsible + for providing and closing the FILE*. + + Returns XML_SUCCESS (0) on success, or + an errorID. + */ + XMLError SaveFile( FILE* fp, bool compact = false ); + + bool ProcessEntities() const { + return _processEntities; + } + Whitespace WhitespaceMode() const { + return _whitespaceMode; + } + + /** + Returns true if this document has a leading Byte Order Mark of UTF8. + */ + bool HasBOM() const { + return _writeBOM; + } + /** Sets whether to write the BOM when writing the file. + */ + void SetBOM( bool useBOM ) { + _writeBOM = useBOM; + } + + /** Return the root element of DOM. Equivalent to FirstChildElement(). + To get the first node, use FirstChild(). + */ + XMLElement* RootElement() { + return FirstChildElement(); + } + const XMLElement* RootElement() const { + return FirstChildElement(); + } + + /** Print the Document. If the Printer is not provided, it will + print to stdout. If you provide Printer, this can print to a file: + @verbatim + XMLPrinter printer( fp ); + doc.Print( &printer ); + @endverbatim + + Or you can use a printer to print to memory: + @verbatim + XMLPrinter printer; + doc.Print( &printer ); + // printer.CStr() has a const char* to the XML + @endverbatim + */ + void Print( XMLPrinter* streamer=0 ) const; + virtual bool Accept( XMLVisitor* visitor ) const; + + /** + Create a new Element associated with + this Document. The memory for the Element + is managed by the Document. + */ + XMLElement* NewElement( const char* name ); + /** + Create a new Comment associated with + this Document. The memory for the Comment + is managed by the Document. + */ + XMLComment* NewComment( const char* comment ); + /** + Create a new Text associated with + this Document. The memory for the Text + is managed by the Document. + */ + XMLText* NewText( const char* text ); + /** + Create a new Declaration associated with + this Document. The memory for the object + is managed by the Document. + + If the 'text' param is null, the standard + declaration is used.: + @verbatim + + @endverbatim + */ + XMLDeclaration* NewDeclaration( const char* text=0 ); + /** + Create a new Unknown associated with + this Document. The memory for the object + is managed by the Document. + */ + XMLUnknown* NewUnknown( const char* text ); + + /** + Delete a node associated with this document. + It will be unlinked from the DOM. + */ + void DeleteNode( XMLNode* node ); + + /// Clears the error flags. + void ClearError(); + + /// Return true if there was an error parsing the document. + bool Error() const { + return _errorID != XML_SUCCESS; + } + /// Return the errorID. + XMLError ErrorID() const { + return _errorID; + } + const char* ErrorName() const; + static const char* ErrorIDToName(XMLError errorID); + + /** Returns a "long form" error description. A hopefully helpful + diagnostic with location, line number, and/or additional info. + */ + const char* ErrorStr() const; + + /// A (trivial) utility function that prints the ErrorStr() to stdout. + void PrintError() const; + + /// Return the line where the error occurred, or zero if unknown. + int ErrorLineNum() const + { + return _errorLineNum; + } + + /// Clear the document, resetting it to the initial state. + void Clear(); + + /** + Copies this document to a target document. + The target will be completely cleared before the copy. + If you want to copy a sub-tree, see XMLNode::DeepClone(). + + NOTE: that the 'target' must be non-null. + */ + void DeepCopy(XMLDocument* target) const; + + // internal + char* Identify( char* p, XMLNode** node ); + + // internal + void MarkInUse(const XMLNode* const); + + virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const { + return 0; + } + virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const { + return false; + } + +private: + XMLDocument( const XMLDocument& ); // not supported + void operator=( const XMLDocument& ); // not supported + + bool _writeBOM; + bool _processEntities; + XMLError _errorID; + Whitespace _whitespaceMode; + mutable StrPair _errorStr; + int _errorLineNum; + char* _charBuffer; + int _parseCurLineNum; + int _parsingDepth; + // Memory tracking does add some overhead. + // However, the code assumes that you don't + // have a bunch of unlinked nodes around. + // Therefore it takes less memory to track + // in the document vs. a linked list in the XMLNode, + // and the performance is the same. + DynArray _unlinked; + + MemPoolT< sizeof(XMLElement) > _elementPool; + MemPoolT< sizeof(XMLAttribute) > _attributePool; + MemPoolT< sizeof(XMLText) > _textPool; + MemPoolT< sizeof(XMLComment) > _commentPool; + + static const char* _errorNames[XML_ERROR_COUNT]; + + void Parse(); + + void SetError( XMLError error, int lineNum, const char* format, ... ); + + // Something of an obvious security hole, once it was discovered. + // Either an ill-formed XML or an excessively deep one can overflow + // the stack. Track stack depth, and error out if needed. + class DepthTracker { + public: + explicit DepthTracker(XMLDocument * document) { + this->_document = document; + document->PushDepth(); + } + ~DepthTracker() { + _document->PopDepth(); + } + private: + XMLDocument * _document; + }; + void PushDepth(); + void PopDepth(); + + template + NodeType* CreateUnlinkedNode( MemPoolT& pool ); +}; + +template +inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT& pool ) +{ + TIXMLASSERT( sizeof( NodeType ) == PoolElementSize ); + TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() ); + NodeType* returnNode = new (pool.Alloc()) NodeType( this ); + TIXMLASSERT( returnNode ); + returnNode->_memPool = &pool; + + _unlinked.Push(returnNode); + return returnNode; +} + +/** + A XMLHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2 + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + XMLElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + XMLElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + XMLElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + XMLElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. XMLHandle addresses the verbosity + of such code. A XMLHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + XMLHandle docHandle( &document ); + XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + XMLHandle handleCopy = handle; + @endverbatim + + See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects. +*/ +class TINYXML2_LIB XMLHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + explicit XMLHandle( XMLNode* node ) : _node( node ) { + } + /// Create a handle from a node. + explicit XMLHandle( XMLNode& node ) : _node( &node ) { + } + /// Copy constructor + XMLHandle( const XMLHandle& ref ) : _node( ref._node ) { + } + /// Assignment + XMLHandle& operator=( const XMLHandle& ref ) { + _node = ref._node; + return *this; + } + + /// Get the first child of this handle. + XMLHandle FirstChild() { + return XMLHandle( _node ? _node->FirstChild() : 0 ); + } + /// Get the first child element of this handle. + XMLHandle FirstChildElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 ); + } + /// Get the last child of this handle. + XMLHandle LastChild() { + return XMLHandle( _node ? _node->LastChild() : 0 ); + } + /// Get the last child element of this handle. + XMLHandle LastChildElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->LastChildElement( name ) : 0 ); + } + /// Get the previous sibling of this handle. + XMLHandle PreviousSibling() { + return XMLHandle( _node ? _node->PreviousSibling() : 0 ); + } + /// Get the previous sibling element of this handle. + XMLHandle PreviousSiblingElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); + } + /// Get the next sibling of this handle. + XMLHandle NextSibling() { + return XMLHandle( _node ? _node->NextSibling() : 0 ); + } + /// Get the next sibling element of this handle. + XMLHandle NextSiblingElement( const char* name = 0 ) { + return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 ); + } + + /// Safe cast to XMLNode. This can return null. + XMLNode* ToNode() { + return _node; + } + /// Safe cast to XMLElement. This can return null. + XMLElement* ToElement() { + return ( _node ? _node->ToElement() : 0 ); + } + /// Safe cast to XMLText. This can return null. + XMLText* ToText() { + return ( _node ? _node->ToText() : 0 ); + } + /// Safe cast to XMLUnknown. This can return null. + XMLUnknown* ToUnknown() { + return ( _node ? _node->ToUnknown() : 0 ); + } + /// Safe cast to XMLDeclaration. This can return null. + XMLDeclaration* ToDeclaration() { + return ( _node ? _node->ToDeclaration() : 0 ); + } + +private: + XMLNode* _node; +}; + + +/** + A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the + same in all regards, except for the 'const' qualifiers. See XMLHandle for API. +*/ +class TINYXML2_LIB XMLConstHandle +{ +public: + explicit XMLConstHandle( const XMLNode* node ) : _node( node ) { + } + explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) { + } + XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) { + } + + XMLConstHandle& operator=( const XMLConstHandle& ref ) { + _node = ref._node; + return *this; + } + + const XMLConstHandle FirstChild() const { + return XMLConstHandle( _node ? _node->FirstChild() : 0 ); + } + const XMLConstHandle FirstChildElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 ); + } + const XMLConstHandle LastChild() const { + return XMLConstHandle( _node ? _node->LastChild() : 0 ); + } + const XMLConstHandle LastChildElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 ); + } + const XMLConstHandle PreviousSibling() const { + return XMLConstHandle( _node ? _node->PreviousSibling() : 0 ); + } + const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 ); + } + const XMLConstHandle NextSibling() const { + return XMLConstHandle( _node ? _node->NextSibling() : 0 ); + } + const XMLConstHandle NextSiblingElement( const char* name = 0 ) const { + return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 ); + } + + + const XMLNode* ToNode() const { + return _node; + } + const XMLElement* ToElement() const { + return ( _node ? _node->ToElement() : 0 ); + } + const XMLText* ToText() const { + return ( _node ? _node->ToText() : 0 ); + } + const XMLUnknown* ToUnknown() const { + return ( _node ? _node->ToUnknown() : 0 ); + } + const XMLDeclaration* ToDeclaration() const { + return ( _node ? _node->ToDeclaration() : 0 ); + } + +private: + const XMLNode* _node; +}; + + +/** + Printing functionality. The XMLPrinter gives you more + options than the XMLDocument::Print() method. + + It can: + -# Print to memory. + -# Print to a file you provide. + -# Print XML without a XMLDocument. + + Print to Memory + + @verbatim + XMLPrinter printer; + doc.Print( &printer ); + SomeFunction( printer.CStr() ); + @endverbatim + + Print to a File + + You provide the file pointer. + @verbatim + XMLPrinter printer( fp ); + doc.Print( &printer ); + @endverbatim + + Print without a XMLDocument + + When loading, an XML parser is very useful. However, sometimes + when saving, it just gets in the way. The code is often set up + for streaming, and constructing the DOM is just overhead. + + The Printer supports the streaming case. The following code + prints out a trivially simple XML file without ever creating + an XML document. + + @verbatim + XMLPrinter printer( fp ); + printer.OpenElement( "foo" ); + printer.PushAttribute( "foo", "bar" ); + printer.CloseElement(); + @endverbatim +*/ +class TINYXML2_LIB XMLPrinter : public XMLVisitor +{ +public: + /** Construct the printer. If the FILE* is specified, + this will print to the FILE. Else it will print + to memory, and the result is available in CStr(). + If 'compact' is set to true, then output is created + with only required whitespace and newlines. + */ + XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 ); + virtual ~XMLPrinter() {} + + /** If streaming, write the BOM and declaration. */ + void PushHeader( bool writeBOM, bool writeDeclaration ); + /** If streaming, start writing an element. + The element must be closed with CloseElement() + */ + void OpenElement( const char* name, bool compactMode=false ); + /// If streaming, add an attribute to an open element. + void PushAttribute( const char* name, const char* value ); + void PushAttribute( const char* name, int value ); + void PushAttribute( const char* name, unsigned value ); + void PushAttribute( const char* name, int64_t value ); + void PushAttribute( const char* name, uint64_t value ); + void PushAttribute( const char* name, bool value ); + void PushAttribute( const char* name, double value ); + /// If streaming, close the Element. + virtual void CloseElement( bool compactMode=false ); + + /// Add a text node. + void PushText( const char* text, bool cdata=false ); + /// Add a text node from an integer. + void PushText( int value ); + /// Add a text node from an unsigned. + void PushText( unsigned value ); + /// Add a text node from a signed 64bit integer. + void PushText( int64_t value ); + /// Add a text node from an unsigned 64bit integer. + void PushText( uint64_t value ); + /// Add a text node from a bool. + void PushText( bool value ); + /// Add a text node from a float. + void PushText( float value ); + /// Add a text node from a double. + void PushText( double value ); + + /// Add a comment + void PushComment( const char* comment ); + + void PushDeclaration( const char* value ); + void PushUnknown( const char* value ); + + virtual bool VisitEnter( const XMLDocument& /*doc*/ ); + virtual bool VisitExit( const XMLDocument& /*doc*/ ) { + return true; + } + + virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute ); + virtual bool VisitExit( const XMLElement& element ); + + virtual bool Visit( const XMLText& text ); + virtual bool Visit( const XMLComment& comment ); + virtual bool Visit( const XMLDeclaration& declaration ); + virtual bool Visit( const XMLUnknown& unknown ); + + /** + If in print to memory mode, return a pointer to + the XML file in memory. + */ + const char* CStr() const { + return _buffer.Mem(); + } + /** + If in print to memory mode, return the size + of the XML file in memory. (Note the size returned + includes the terminating null.) + */ + int CStrSize() const { + return _buffer.Size(); + } + /** + If in print to memory mode, reset the buffer to the + beginning. + */ + void ClearBuffer( bool resetToFirstElement = true ) { + _buffer.Clear(); + _buffer.Push(0); + _firstElement = resetToFirstElement; + } + +protected: + virtual bool CompactMode( const XMLElement& ) { return _compactMode; } + + /** Prints out the space before an element. You may override to change + the space and tabs used. A PrintSpace() override should call Print(). + */ + virtual void PrintSpace( int depth ); + virtual void Print( const char* format, ... ); + virtual void Write( const char* data, size_t size ); + virtual void Putc( char ch ); + + inline void Write(const char* data) { Write(data, strlen(data)); } + + void SealElementIfJustOpened(); + bool _elementJustOpened; + DynArray< const char*, 10 > _stack; + +private: + /** + Prepares to write a new node. This includes sealing an element that was + just opened, and writing any whitespace necessary if not in compact mode. + */ + void PrepareForNewNode( bool compactMode ); + void PrintString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities. + + bool _firstElement; + FILE* _fp; + int _depth; + int _textDepth; + bool _processEntities; + bool _compactMode; + + enum { + ENTITY_RANGE = 64, + BUF_SIZE = 200 + }; + bool _entityFlag[ENTITY_RANGE]; + bool _restrictedEntityFlag[ENTITY_RANGE]; + + DynArray< char, 20 > _buffer; + + // Prohibit cloning, intentionally not implemented + XMLPrinter( const XMLPrinter& ); + XMLPrinter& operator=( const XMLPrinter& ); +}; + + +} // tinyxml2 + +#if defined(_MSC_VER) +# pragma warning(pop) +#endif + +#endif // TINYXML2_INCLUDED diff --git a/external_libs/yaml-cpp-cstdint.patch b/external_libs/yaml-cpp-cstdint.patch new file mode 100644 index 0000000..ed183d5 --- /dev/null +++ b/external_libs/yaml-cpp-cstdint.patch @@ -0,0 +1,10 @@ +--- a/src/emitterutils.cpp ++++ b/src/emitterutils.cpp +@@ -1,6 +1,7 @@ + #include + #include + #include ++#include + + #include "emitterutils.h" + #include "exp.h" diff --git a/include/1d_models.h b/include/1d_models.h new file mode 100644 index 0000000..2ce8b93 --- /dev/null +++ b/include/1d_models.h @@ -0,0 +1,397 @@ +#ifndef ONE_D_MODELS_H +#define ONE_D_MODELS_H + +#include +#include "config.h" + + +// ak135 http://rses.anu.edu.au/seismology/ak135/ak135t.html +// depth(km), P velocity(km/s) +inline const std::vector> model_1d_ak135 \ + {{ 0.000, 5.8000}, + { 20.000, 5.8000}, + { 20.000, 6.5000}, + { 35.000, 6.5000}, + { 35.000, 8.0400}, + { 77.500, 8.0450}, + { 120.000, 8.0500}, + { 165.000, 8.1750}, + { 210.000, 8.3000}, + { 210.000, 8.3000}, + { 260.000, 8.4825}, + { 310.000, 8.6650}, + { 360.000, 8.8475}, + { 410.000, 9.0300}, + { 410.000, 9.3600}, + { 460.000, 9.5280}, + { 510.000, 9.6960}, + { 560.000, 9.8640}, + { 610.000, 10.0320}, + { 660.000, 10.2000}, + { 660.000, 10.7900}, + { 710.000, 10.9229}, + { 760.000, 11.0558}, + { 809.500, 11.1353}, + { 859.000, 11.2221}, + { 908.500, 11.3068}, + { 958.000, 11.3896}, + { 1007.500, 11.4705}, + { 1057.000, 11.5495}, + { 1106.500, 11.6269}, + { 1156.000, 11.7026}, + { 1205.500, 11.7766}, + { 1255.000, 11.8491}, + { 1304.500, 11.9200}, + { 1354.000, 11.9895}, + { 1403.500, 12.0577}, + { 1453.000, 12.1245}, + { 1502.500, 12.1912}, + { 1552.000, 12.2550}, + { 1601.500, 12.3185}, + { 1651.000, 12.3819}, + { 1700.500, 12.4426}, + { 1750.000, 12.5031}, + { 1799.500, 12.5631}, + { 1849.000, 12.6221}, + { 1898.500, 12.6804}, + { 1948.000, 12.7382}, + { 1997.500, 12.7956}, + { 2047.000, 12.8526}, + { 2096.500, 12.9096}, + { 2146.000, 12.9668}, + { 2195.500, 13.0222}, + { 2245.000, 13.0783}, + { 2294.500, 13.1336}, + { 2344.000, 13.1894}, + { 2393.500, 13.2465}, + { 2443.000, 13.3018}, + { 2492.500, 13.3585}, + { 2542.000, 13.4156}, + { 2591.500, 13.4741}, + { 2640.000, 13.5312}, + { 2690.000, 13.5900}, + { 2740.000, 13.6494}, + { 2740.000, 13.6494}, + { 2789.670, 13.6530}, + { 2839.330, 13.6566}, + { 2891.500, 13.6602}, + { 2891.500, 8.0000}, + { 2939.330, 8.0382}, + { 2989.660, 8.1283}, + { 3039.990, 8.2213}, + { 3090.320, 8.3122}, + { 3140.660, 8.4001}, + { 3190.990, 8.4861}, + { 3241.320, 8.5692}, + { 3291.650, 8.6496}, + { 3341.980, 8.7283}, + { 3392.310, 8.8036}, + { 3442.640, 8.8761}, + { 3492.970, 8.9461}, + { 3543.300, 9.0138}, + { 3593.640, 9.0792}, + { 3643.970, 9.1426}, + { 3694.300, 9.2042}, + { 3744.630, 9.2634}, + { 3794.960, 9.3205}, + { 3845.290, 9.3760}, + { 3895.620, 9.4297}, + { 3945.950, 9.4814}, + { 3996.280, 9.5306}, + { 4046.620, 9.5777}, + { 4096.950, 9.6232}, + { 4147.280, 9.6673}, + { 4197.610, 9.7100}, + { 4247.940, 9.7513}, + { 4298.270, 9.7914}, + { 4348.600, 9.8304}, + { 4398.930, 9.8682}, + { 4449.260, 9.9051}, + { 4499.600, 9.9410}, + { 4549.930, 9.9761}, + { 4600.260, 10.0103}, + { 4650.590, 10.0439}, + { 4700.920, 10.0768}, + { 4801.580, 10.1415}, + { 4851.910, 10.1739}, + { 4902.240, 10.2049}, + { 4952.580, 10.2329}, + { 5002.910, 10.2565}, + { 5053.240, 10.2745}, + { 5103.570, 10.2854}, + { 5153.500, 10.2890}, + { 5153.500, 11.0427}, + { 5204.610, 11.0585}, + { 5255.320, 11.0718}, + { 5306.040, 11.0850}, + { 5356.750, 11.0983}, + { 5407.460, 11.1166}, + { 5458.170, 11.1316}, + { 5508.890, 11.1457}, + { 5559.600, 11.1590}, + { 5610.310, 11.1715}, + { 5661.020, 11.1832}, + { 5711.740, 11.1941}, + { 5813.160, 11.2134}, + { 5863.870, 11.2219}, + { 5914.590, 11.2295}, + { 5965.300, 11.2364}, + { 6016.010, 11.2424}, + { 6066.720, 11.2477}, + { 6117.440, 11.2521}, + { 6168.150, 11.2557}, + { 6218.860, 11.2586}, + { 6269.570, 11.2606}, + { 6320.290, 11.2618}, + { 6371.000, 11.2622}}; + + +// iasp91 model from http://ds.iris.edu/spud/earthmodel/9991809 +inline const std::vector> model_1d_iasp91 \ + {{0.00, 5.8000}, + {1.00, 5.8000}, + {2.00, 5.8000}, + {3.00, 5.8000}, + {4.00, 5.8000}, + {5.00, 5.8000}, + {6.00, 5.8000}, + {7.00, 5.8000}, + {8.00, 5.8000}, + {9.00, 5.8000}, + {10.00, 5.8000}, + {11.00, 5.8000}, + {12.00, 5.8000}, + {13.00, 5.8000}, + {14.00, 5.8000}, + {15.00, 5.8000}, + {16.00, 5.8000}, + {17.00, 5.8000}, + {18.00, 5.8000}, + {19.00, 5.8000}, + {20.00, 5.8000}, + {20.00, 6.5000}, + {21.00, 6.5000}, + {22.00, 6.5000}, + {23.00, 6.5000}, + {24.00, 6.5000}, + {25.00, 6.5000}, + {26.00, 6.5000}, + {27.00, 6.5000}, + {28.00, 6.5000}, + {29.00, 6.5000}, + {30.00, 6.5000}, + {31.00, 6.5000}, + {32.00, 6.5000}, + {33.00, 6.5000}, + {34.00, 6.5000}, + {35.00, 6.5000}, + {35.00, 8.0400}, + {40.00, 8.0406}, + {45.00, 8.0412}, + {50.00, 8.0418}, + {60.00, 8.0429}, + {70.00, 8.0441}, + {80.00, 8.0453}, + {90.00, 8.0465}, + {100.00, 8.0476}, + {110.00, 8.0488}, + {120.00, 8.0500}, + {120.00, 8.0500}, + {130.00, 8.0778}, + {140.00, 8.1056}, + {150.00, 8.1333}, + {160.00, 8.1611}, + {170.00, 8.1889}, + {180.00, 8.2167}, + {190.00, 8.2444}, + {200.00, 8.2722}, + {210.00, 8.3000}, + {210.00, 8.3000}, + {220.00, 8.3365}, + {230.00, 8.3730}, + {240.00, 8.4095}, + {250.00, 8.4460}, + {260.00, 8.4825}, + {270.00, 8.5190}, + {280.00, 8.5555}, + {290.00, 8.5920}, + {300.00, 8.6285}, + {310.00, 8.6650}, + {320.00, 8.7015}, + {330.00, 8.7380}, + {340.00, 8.7745}, + {350.00, 8.8110}, + {360.00, 8.8475}, + {370.00, 8.8840}, + {380.00, 8.9205}, + {390.00, 8.9570}, + {400.00, 8.9935}, + {410.00, 9.0300}, + {410.00, 9.3600}, + {420.00, 9.3936}, + {430.00, 9.4272}, + {440.00, 9.4608}, + {450.00, 9.4944}, + {460.00, 9.5280}, + {470.00, 9.5616}, + {480.00, 9.5952}, + {490.00, 9.6288}, + {500.00, 9.6624}, + {510.00, 9.6960}, + {520.00, 9.7296}, + {530.00, 9.7632}, + {540.00, 9.7968}, + {550.00, 9.8304}, + {560.00, 9.8640}, + {570.00, 9.8976}, + {580.00, 9.9312}, + {590.00, 9.9648}, + {600.00, 9.9984}, + {610.00, 10.0320}, + {620.00, 10.0656}, + {630.00, 10.0992}, + {640.00, 10.1328}, + {650.00, 10.1664}, + {660.00, 10.2000}, + {660.00, 10.7900}, + {670.00, 10.8166}, + {680.00, 10.8432}, + {690.00, 10.8697}, + {700.00, 10.8963}, + {710.00, 10.9229}, + {720.00, 10.9495}, + {730.00, 10.9761}, + {740.00, 11.0026}, + {750.00, 11.0292}, + {760.00, 11.0558}, + {760.00, 11.0558}, + {770.00, 11.0738}, + {780.00, 11.0917}, + {790.00, 11.1095}, + {800.00, 11.1272}, + {900.00, 11.2997}, + {1000.00, 11.4640}, + {1100.00, 11.6208}, + {1200.00, 11.7707}, + {1300.00, 11.9142}, + {1400.00, 12.0521}, + {1500.00, 12.1849}, + {2000.00, 12.7944}, + {2500.00, 13.3697}, + {2700.00, 13.6076}, + {2740.00, 13.6564}, + {2740.00, 13.6564}, + {2750.00, 13.6587}, + {2800.00, 13.6703}, + {2850.00, 13.6818}, + {2889.00, 13.6908}, + {2889.00, 8.0088}, + {2900.00, 8.0280}, + {3000.00, 8.1995}, + {3100.00, 8.3642}, + {3200.00, 8.5222}, + {3300.00, 8.6735}, + {3400.00, 8.8180}, + {3500.00, 8.9558}, + {4000.00, 9.5437}, + {4500.00, 9.9633}, + {5153.90, 10.2578}, + {5153.90, 11.0914}, + {5500.00, 11.1644}, + {6000.00, 11.2270}, + {6371.00, 11.2409}}; + + +// fortran test model +inline const std::vector> model_1d_prem \ + = {{ 0.00, 5.80000}, + { 15.00, 5.80000}, + { 15.00, 6.80000}, + { 24.40, 6.80000}, + { 24.40, 8.11061}, + { 40.00, 8.10119}, + { 60.00, 8.08907}, + { 80.00, 8.07688}, + { 115.00, 8.05540}, + { 150.00, 8.03370}, + { 185.00, 8.01180}, + { 220.00, 7.98970}, + { 220.00, 8.55896}, + { 265.00, 8.64552}, + { 310.00, 8.73209}, + { 355.00, 8.81867}, + { 400.00, 8.90522}, + { 400.00, 9.13397}, + { 450.00, 9.38990}, + { 500.00, 9.64588}, + { 550.00, 9.90185}, + { 600.00, 10.15782}, + { 635.00, 10.21203}, + { 670.00, 10.26622}, + { 670.00, 10.75131}, + { 721.00, 10.91005}, + { 771.00, 11.06557}, + { 871.00, 11.24490}, + { 971.00, 11.41560}, + { 1071.00, 11.57828}, + { 1171.00, 11.73357}, + { 1271.00, 11.88209}, + { 1371.00, 12.02445}, + { 1471.00, 12.16126}, + { 1571.00, 12.29316}, + { 1671.00, 12.42075}, + { 1771.00, 12.54466}, + { 1871.00, 12.66550}, + { 1971.00, 12.78389}, + { 2071.00, 12.90045}, + { 2171.00, 13.01579}, + { 2271.00, 13.13055}, + { 2371.00, 13.24532}, + { 2471.00, 13.36074}, + { 2571.00, 13.47742}, + { 2671.00, 13.59597}, + { 2741.00, 13.68041}, + { 2771.00, 13.68753}, + { 2871.00, 13.71168}, + { 2891.00, 13.71660}, + { 2891.00, 8.06482}, + { 2971.00, 8.19939}, + { 3071.00, 8.36019}, + { 3171.00, 8.51298}, + { 3271.00, 8.65805}, + { 3371.00, 8.79573}, + { 3471.00, 8.92632}, + { 3571.00, 9.05015}, + { 3671.00, 9.16752}, + { 3771.00, 9.27867}, + { 3871.00, 9.38418}, + { 3971.00, 9.48409}, + { 4071.00, 9.57881}, + { 4171.00, 9.66865}, + { 4271.00, 9.75393}, + { 4371.00, 9.83496}, + { 4471.00, 9.91206}, + { 4571.00, 9.98554}, + { 4671.00, 10.05572}, + { 4771.00, 10.12291}, + { 4871.00, 10.18743}, + { 4971.00, 10.24959}, + { 5071.00, 10.30971}, + { 5149.50, 10.35568}, + { 5149.50, 11.02827}, + { 5171.00, 11.03643}, + { 5271.00, 11.07249}, + { 5371.00, 11.10542}, + { 5471.00, 11.13521}, + { 5571.00, 11.16186}, + { 5671.00, 11.18538}, + { 5771.00, 11.20576}, + { 5871.00, 11.22301}, + { 5971.00, 11.23712}, + { 6071.00, 11.24809}, + { 6171.00, 11.25593}, + { 6271.00, 11.26064}, + { 6371.00, 11.26220}}; + + +#endif \ No newline at end of file diff --git a/include/config.h b/include/config.h new file mode 100644 index 0000000..1493242 --- /dev/null +++ b/include/config.h @@ -0,0 +1,332 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include +#include +#include +#include +#include +#include +#include "version.h" + +// custom floating point accuracy +#ifdef SINGLE_PRECISION +#define CUSTOMREAL float +#define MPI_CR MPI_FLOAT +#else +#define CUSTOMREAL double +#define MPI_CR MPI_DOUBLE +#endif + + +#define MPI_DUMMY_TAG 1000 + +// version +inline const std::string TOMOATT_VERSION = std::to_string(PROJECT_VERSION_MAJOR) + + "." + std::to_string(PROJECT_VERSION_MINOR) + + "." + std::to_string(PROJECT_VERSION_PATCH); + +inline int loc_I, loc_J, loc_K; +inline int loc_I_vis, loc_J_vis, loc_K_vis; +inline int loc_I_excl_ghost, loc_J_excl_ghost, loc_K_excl_ghost; +inline int n_inv_grids; +inline int n_inv_I_loc, n_inv_J_loc, n_inv_K_loc; +inline int n_inv_I_loc_ani, n_inv_J_loc_ani, n_inv_K_loc_ani; + +// 3d indices to 1d index +#define I2V(A,B,C) ((C)*loc_I*loc_J + (B)*loc_I + A) +inline void V2I(const int& ijk, int& i, int& j, int& k) { + k = ijk / (loc_I * loc_J); + j = (ijk - k * loc_I * loc_J) / loc_I; + i = ijk - k * loc_I * loc_J - j * loc_I; +} + +#define I2V_INV_GRIDS(A,B,C,D) ((D)*n_inv_I_loc*n_inv_J_loc*n_inv_K_loc + (C)*n_inv_I_loc*n_inv_J_loc + (B)*n_inv_I_loc + A) +#define I2V_INV_KNL(A,B,C) ((C)*n_inv_I_loc*n_inv_J_loc + (B)*n_inv_I_loc + A) +#define I2V_INV_GRIDS_1DK(A,B) ((B)*n_inv_K_loc + (A)) +#define I2V_INV_GRIDS_2DJ(A,B,C) ((C)*n_inv_J_loc*n_inv_K_loc + (B)*n_inv_J_loc + (A)) +#define I2V_INV_GRIDS_2DI(A,B,C) ((C)*n_inv_I_loc*n_inv_K_loc + (B)*n_inv_I_loc + (A)) + +#define I2V_INV_ANI_GRIDS(A,B,C,D) ((D)*n_inv_I_loc_ani*n_inv_J_loc_ani*n_inv_K_loc_ani + (C)*n_inv_I_loc_ani*n_inv_J_loc_ani + (B)*n_inv_I_loc_ani + A) +#define I2V_INV_ANI_KNL(A,B,C) ((C)*n_inv_I_loc_ani*n_inv_J_loc_ani + (B)*n_inv_I_loc_ani + A) +#define I2V_INV_ANI_GRIDS_1DK(A,B) ((B)*n_inv_K_loc_ani + (A)) +#define I2V_INV_ANI_GRIDS_1DJ(A,B,C) ((C)*n_inv_J_loc_ani*n_inv_K_loc_ani + (B)*n_inv_J_loc_ani + (A)) +#define I2V_INV_ANI_GRIDS_1DI(A,B,C) ((C)*n_inv_I_loc_ani*n_inv_K_loc_ani + (B)*n_inv_I_loc_ani + (A)) + +#define I2V_INV_GRIDS_1D_GENERIC(A,B,C_ninv) ((B)*C_ninv + (A)) +#define I2V_INV_GRIDS_2D_GENERIC(A,B,C,D_ninv,E_inv) ((C)*D_ninv*E_inv + (B)*D_ninv + (A)) + +#define I2V_EXCL_GHOST(A,B,C) ((C)* loc_I_excl_ghost * loc_J_excl_ghost + (B)* loc_I_excl_ghost + A) +#define I2V_VIS(A,B,C) ((C)* loc_I_vis * loc_J_vis + (B)* loc_I_vis + A) +#define I2V_3D(A,B,C) ((C)* loc_I_excl_ghost*loc_J_excl_ghost + (B)* loc_I_excl_ghost + A) +#define I2V_ELM_CONN(A,B,C) ((C)*(loc_I_vis-1)*(loc_J_vis-1) + (B)*(loc_I_vis-1) + A) +#define I2VLBFGS(A,B,C,D) ((A)*loc_I*loc_J*loc_K + (D)*loc_I*loc_J + (C)*loc_I + B) + +// 2d indices to 1d index +#define IJ2V(A,B,C) (C*loc_I*loc_J + (B)*loc_I + A) +#define JK2V(A,B,C) (C*loc_J*loc_K + (B)*loc_J + A) +#define IK2V(A,B,C) (C*loc_I*loc_K + (B)*loc_I + A) + +inline const CUSTOMREAL eps = 1e-12; +inline const CUSTOMREAL epsAdj = 1e-6; + +inline bool isZero(CUSTOMREAL x) { + return fabs(x) < eps; +} + +inline bool isNegative(CUSTOMREAL x) { + return (x) < -eps; +} + +inline bool isPositive(CUSTOMREAL x) { + return (x) > eps; +} + +inline bool isZeroAdj(CUSTOMREAL x) { + return fabs(x) < epsAdj; +} + +// constants +inline const CUSTOMREAL PI = 3.14159265358979323846264338327950288; +inline const CUSTOMREAL DEG2RAD = PI/180.0; +inline const CUSTOMREAL RAD2DEG = 180.0/PI; +inline const CUSTOMREAL M2KM = 0.001; +inline const CUSTOMREAL _0_CR = 0.0; +inline const CUSTOMREAL _0_5_CR = 0.5; +inline const CUSTOMREAL _1_CR = 1.0; +inline const CUSTOMREAL _1_5_CR = 1.5; +inline const CUSTOMREAL _2_CR = 2.0; +inline const CUSTOMREAL _3_CR = 3.0; +inline const CUSTOMREAL _4_CR = 4.0; +inline const CUSTOMREAL _8_CR = 8.0; +inline const CUSTOMREAL TAU_INITIAL_VAL = 1.0; +inline const CUSTOMREAL TAU_INF_VAL = 20.0; +inline const int SWEEPING_COEFF = 1.0; // coefficient for calculationg sigr/sigt/sigp for cpu + +// ASCII output precision +typedef std::numeric_limits< CUSTOMREAL > dbl; +inline const int ASCII_OUTPUT_PRECISION = dbl::max_digits10; + +// radious of the earth in km +//inline CUSTOMREAL R_earth = 6378.1370; +inline CUSTOMREAL R_earth = 6371.0; // for compatibility with fortran code +inline const CUSTOMREAL GAMMA = 0.0; +inline const CUSTOMREAL r_kermel_mask = 40.0; +inline CUSTOMREAL step_length_init = 0.01; // update step size limit +inline CUSTOMREAL step_length_init_sc = 0.001; // update step size limit (for station correction) +inline CUSTOMREAL step_length_decay = 0.9; +inline CUSTOMREAL step_length_down = 0.5; +inline CUSTOMREAL step_length_up = 1.2; +inline CUSTOMREAL step_length_lbfgs; +inline int step_method = 1; // 0:modulate according to obj, 1: modulate according to gradient direction. +inline CUSTOMREAL step_length_gradient_angle = 120.0; +inline const int OBJ_DEFINED = 0; +inline const int GRADIENT_DEFINED = 1; + +// halve steping params +inline const CUSTOMREAL HALVE_STEP_RATIO = 0.7; +inline const CUSTOMREAL MAX_DIFF_RATIO_VOBJ = 0.8; // maximum difference ratio between vobj_t+1 and vobj_t +inline const CUSTOMREAL HALVE_STEP_RESTORAION_RATIO = 0.7; // no restoration if == HALVE_STEP_RATIO + +// RUN MODE TYPE FLAG +inline const int ONLY_FORWARD = 0; +inline const int DO_INVERSION = 1; +inline const int SRC_RELOCATION = 2; +inline const int INV_RELOC = 3; +inline const int ONED_INVERSION = 4; +inline const int TELESEIS_PREPROCESS = -1; // hiden function + +// SWEEPING TYPE FLAG +inline const int SWEEP_TYPE_LEGACY = 0; +inline const int SWEEP_TYPE_LEVEL = 1; +inline bool hybrid_stencil_order = false; // if true, code at first run 1st order, then change to 3rd order (Dong Cui 2020) + +// STENCIL TYPE +inline const int NON_UPWIND = 0; +inline const int UPWIND = 1; + +// convert depth <-> radius +inline CUSTOMREAL depth2radius(CUSTOMREAL depth) { + return R_earth - depth; +} +inline CUSTOMREAL radius2depth(CUSTOMREAL radius) { + return R_earth - radius; +} + +// parallel calculation parameters +// here we use so called "inline variables" for defining global variables +inline int ngrid_i = 0; // number of grid points in i direction +inline int ngrid_j = 0; // number of grid points in j direction +inline int ngrid_k = 0; // number of grid points in k direction +//inline int ngrid_i_inv = 0; // number of inversion grid points in i direction # DUPLICATED with n_inv_I_loc as all the subdomains have the same number of inversion grid points +//inline int ngrid_j_inv = 0; // number of inversion grid points in j direction # DUPLICATED with n_inv_J_loc +//inline int ngrid_k_inv = 0; // number of inversion grid points in k direction # DUPLICATED with n_inv_K_loc +//inline int ngrid_i_inv_ani = 0; // number of inversion grid points in i direction for anisotropy # DUPLICATED with n_inv_I_loc_ani +//inline int ngrid_j_inv_ani = 0; // number of inversion grid points in j direction for anisotropy # DUPLICATED with n_inv_J_loc_ani +//inline int ngrid_k_inv_ani = 0; // number of inversion grid points in k direction for anisotropy # DUPLICATED with n_inv_K_loc_ani + +// inversion grid type flags +#define INV_GRID_REGULAR 0 +#define INV_GRID_FLEX 1 +#define INV_GRID_TRAPE 2 + +// mpi parameters +inline int world_nprocs; // total number of processes (all groups) +inline int world_rank; // mpi rank of this process (all groups) +inline int sim_nprocs; // number of processes in this simulation group +inline int sim_rank; // mpi rank of this process in this simulation group +inline int inter_sim_rank; +inline int sub_nprocs; // total number of processes +inline int sub_rank; // mpi rank of this process +inline int inter_sub_rank; // mpi rank of this process in the inter-subdomain communicator +inline int inter_sub_nprocs; // number of processes in the inter-subdomain communicator +inline int nprocs; // = n subdomains +inline int myrank; // = id subdomain +inline MPI_Comm sim_comm, inter_sim_comm, sub_comm, inter_sub_comm; // mpi communicator for simulation, inter-simulation, subdomain, and inter subdomains +inline int n_sims = 1; // number of mpi groups for simultaneous runs +inline int n_procs_each_sim = 1; // number of processes in each simulation group +inline int n_subdomains = 1; // number of subdomains +inline int n_subprocs = 1; // number of sub processes in each subdomain +inline int ndiv_i = 1; // number of divisions in x direction +inline int ndiv_j = 1; // number of divisions in y direction +inline int ndiv_k = 1; // number of divisions in z direction +inline int id_sim = 0; // simultaneous run id (not equal to src id) (parallel level 1) +inline int id_subdomain = 0; // subdomain id (parallel level 2) +inline bool subdom_main = false; // true if this process is main process in subdomain (parallel level 3) + +// flags for explaining the process's role +inline bool proc_read_srcrec = false; // true if this process is reading source file +inline bool proc_store_srcrec = false; // true if this process is storing srcrec file + +// MNMN stop using these global variable for avoiding misleadings during the sources' iteration loop +//inline int id_sim_src = 0; // id of current target source +//inline std::string name_sim_src = "unknown"; //name of current target source + +// rule to distribute source to simultaneous group +inline int select_id_sim_for_src(const int& i_src, const int& n_sims){ + return i_src % n_sims; +} + +// read input yaml file +inline std::string input_file="input_params.yaml"; +// output directory name +inline std::string output_dir="./OUTPUT_FILES/"; +// output file format +#define OUTPUT_FORMAT_HDF5 11111 +#define OUTPUT_FORMAT_ASCII 22222 +//#define OUTPUT_FORMAT_BINARY 33333 //#TODO: add +inline int output_format = OUTPUT_FORMAT_HDF5; // 0 - ascii, 1 - hdf5, 2 - binary + +// HDF5 io mode (independent or collective) +#ifdef USE_HDF5_IO_COLLECTIVE +#define HDF5_IO_MODE H5FD_MPIO_COLLECTIVE +#else +#define HDF5_IO_MODE H5FD_MPIO_INDEPENDENT +#endif + +// smooth parameters +inline int smooth_method = 0; // 0: multi grid parametrization, 1: laplacian smoothing +inline CUSTOMREAL smooth_lp = 1.0; +inline CUSTOMREAL smooth_lt = 1.0; +inline CUSTOMREAL smooth_lr = 1.0; +inline CUSTOMREAL regul_lp = 1.0; +inline CUSTOMREAL regul_lt = 1.0; +inline CUSTOMREAL regul_lr = 1.0; +inline const int GRADIENT_DESCENT = 0; +inline const int HALVE_STEPPING_MODE = 1; +inline const int LBFGS_MODE = 2; +inline int optim_method = 0; // 0: gradient descent, 1: halve_stepping, 2: LBFGS +inline const CUSTOMREAL wolfe_c1 = 1e-4; +inline const CUSTOMREAL wolfe_c2 = 0.9; +inline const int Mbfgs = 5; // number of gradients/models stored in memory +inline CUSTOMREAL regularization_weight = 0.5; // regularization weight +inline int max_sub_iterations = 20; // maximum number of sub-iterations +inline const CUSTOMREAL LBFGS_RELATIVE_step_length = 3.0; // relative step size for the second and later iteration +inline CUSTOMREAL Kdensity_coe = 0.0; // a preconditioner \in [0,1], kernel -> kernel / pow(kernel density, Kdensity_coe) +// variables for test +inline bool if_test = false; + +// verboose mode +inline bool if_verbose = false; +//inline bool if_verbose = true; + +// if use gpu +inline bool use_gpu; + +// total number of sources in the srcrec file +inline int nsrc_total = 0; + +// flag if common receiver double difference data is used +inline bool src_pair_exists = false; + + +// weight of different typs of data +inline CUSTOMREAL abs_time_local_weight = 1.0; // weight of absolute traveltime data for local earthquake, default: 1.0 +inline CUSTOMREAL cr_dif_time_local_weight = 1.0; // weight of common receiver differential traveltime data for local earthquake, default: 1.0 +inline CUSTOMREAL cs_dif_time_local_weight = 1.0; // weight of common source differential traveltime data for local earthquake, default: 1.0 (not ready) +inline CUSTOMREAL teleseismic_weight = 1.0; // weight of teleseismic data default: 1.0 (not ready) +inline CUSTOMREAL abs_time_local_weight_reloc = 1.0; // weight of absolute traveltime data for local earthquake, default: 1.0 +inline CUSTOMREAL cs_dif_time_local_weight_reloc = 1.0; // weight of common source differential traveltime data for local earthquake, default: 1.0 +inline CUSTOMREAL cr_dif_time_local_weight_reloc = 1.0; // weight of common receiver differential traveltime data for local earthquake, default: 1.0 +inline CUSTOMREAL teleseismic_weight_reloc = 1.0; // weight of teleseismic data default: 1.0 (not ready) + +// misfit balance +inline bool balance_data_weight = false; // add the weight to normalize the initial objective function of different types of data. 1 for yes and 0 for no +inline CUSTOMREAL total_abs_local_data_weight = 0.0; +inline CUSTOMREAL total_cr_dif_local_data_weight = 0.0; +inline CUSTOMREAL total_cs_dif_local_data_weight = 0.0; +inline CUSTOMREAL total_teleseismic_data_weight = 0.0; +inline bool balance_data_weight_reloc = false; // add the weight to normalize the initial objective function of different types of data for relocation. 1 for yes and 0 for no +inline CUSTOMREAL total_abs_local_data_weight_reloc = 0.0; +inline CUSTOMREAL total_cr_dif_local_data_weight_reloc = 0.0; +inline CUSTOMREAL total_cs_dif_local_data_weight_reloc = 0.0; +inline CUSTOMREAL total_teleseismic_data_weight_reloc = 0.0; + +// 2d solver parameters for teleseismic data +// use fixed domain size for all 2d simulations in teleseismic data +inline CUSTOMREAL rmin_2d = 3370.5; +inline CUSTOMREAL rmax_2d = 6471.5; +inline CUSTOMREAL tmin_2d = -5.0/180.0*PI; +inline CUSTOMREAL tmax_2d = 120.0/180.0*PI; +inline CUSTOMREAL dr_2d = 2.0; +inline CUSTOMREAL dt_2d = PI/1000.0; +inline const CUSTOMREAL TOL_2D_SOLVER = 1e-5; +inline const CUSTOMREAL MAX_ITER_2D_SOLVER = 4000; +inline const CUSTOMREAL SWEEPING_COEFF_TELE = 1.05; // coefficient for calculationg sigr/sigt/sigp +inline const int N_LAYER_SRC_BOUND = 1; // number of layers for source boundary +inline CUSTOMREAL DIST_SRC_DDT = 2.5*DEG2RAD; // distance threshold of two stations +inline const std::string OUTPUT_DIR_2D = "/2D_TRAVEL_TIME_FIELD/"; // output directory for 2d solver + +// earthquake relocation +inline CUSTOMREAL step_length_src_reloc = 0.01; // step length for source relocation +inline CUSTOMREAL step_length_decay_src_reloc = 0.9; +inline int N_ITER_MAX_SRC_RELOC = 501; // max iteration for source location +inline CUSTOMREAL TOL_SRC_RELOC = 1e-3; // threshold of the norm of gradient for stopping single earthquake location +inline const CUSTOMREAL TOL_step_length = 1e-4; // threshold of the max step size for stopping single earthquake location +inline CUSTOMREAL rescaling_dep = 10.0; +inline CUSTOMREAL rescaling_lat = 5.0; +inline CUSTOMREAL rescaling_lon = 5.0; +inline CUSTOMREAL rescaling_ortime = 0.5; +inline CUSTOMREAL max_change_dep = 10.0; // default: max change is 10 km +inline CUSTOMREAL max_change_lat = 5.0; // default: max change is 5 km +inline CUSTOMREAL max_change_lon = 5.0; // default: max change is 5 km +inline CUSTOMREAL max_change_ortime = 0.5; // default: max change is 0.5 s +inline bool ortime_local_search = true; +inline int min_Ndata_reloc = 4; // if an earthquake is recorded by less than times, relocation is not allowed. + +// inversion strategy parameters +inline int inv_mode = 1; +inline int model_update_N_iter = 1; +inline int relocation_N_iter = 1; +inline int max_loop_mode0 = 10; +inline int max_loop_mode1 = 10; + +// INV MODE TYPE FLAG +inline const int ITERATIVE = 0; +inline const int SIMULTANEOUS = 1; + +// source receiver weight calculation +inline CUSTOMREAL ref_value = 1.0; // reference value for source receiver weight calculation +inline std::string output_file_weight = "srcrec_weight.txt"; // output file name for source receiver weight calculation + +#endif // CONFIG_H \ No newline at end of file diff --git a/include/eikonal_solver_2d.h b/include/eikonal_solver_2d.h new file mode 100644 index 0000000..940078f --- /dev/null +++ b/include/eikonal_solver_2d.h @@ -0,0 +1,79 @@ +#ifndef EIKONAL_SOLVER_2D_H +#define EIKONAL_SOLVER_2D_H + +#include +#include +#include + +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "1d_models.h" +#include "mpi_funcs.h" +#include "io.h" + + +class PlainGrid { + +public: + PlainGrid(Source& src, InputParams& IP); + ~PlainGrid(); + + void run_iteration(InputParams& IP); + void run_iteration_upwind(InputParams& IP); + +//private: + // grid parameters + CUSTOMREAL src_r, src_t, src_p; + CUSTOMREAL src_t_dummy; + CUSTOMREAL rmin_3d, rmax_3d, tmin_3d, tmax_3d, pmin_3d, pmax_3d; + CUSTOMREAL max_degree; + int nr_2d, nt_2d; + + // for eikonal solver + int count_cand; + int ii,ii_nr,ii_n2r,ii_pr,ii_p2r,ii_nt,ii_n2t,ii_pt,ii_p2t; + CUSTOMREAL ar,br,at,bt,ar1,ar2,at1,at2,br1,br2,bt1,bt2; + CUSTOMREAL eqn_a, eqn_b, eqn_c, eqn_Delta; + CUSTOMREAL tmp_tau, T_r, T_t, charact_r, charact_t; + bool is_causality; + std::vector canditate = std::vector(60); + + // arrays + // azimuth + CUSTOMREAL *azimuth_2d; + // epicentral distance + CUSTOMREAL *epicentral_distance_2d; + // activated boundaries + //bool *activated_boundaries; + // grid + CUSTOMREAL *r_2d, *t_2d; // coordinates + CUSTOMREAL *fun_2d, *fac_a_2d, *fac_b_2d, *u_2d, *T_2d; // functions + CUSTOMREAL *T0v_2d, *T0r_2d, *T0t_2d, *tau_2d, *tau_old_2d; + bool *is_changed_2d; + + // member functions + void allocate_arrays(); + void deallocate_arrays(); + void load_1d_model(std::string); + void select_1d_model(std::string); + void calculate_stencil_2d(int&, int&); + void calculate_stencil_upwind_2d(int&, int&); + CUSTOMREAL eps_2d = 1e-12; + +private: + + // # TODO: make id model type selectable by input file + // 1D model used for 2D solver + std::vector> model_1d_ref = model_1d_prem; + + +}; + +void prepare_teleseismic_boundary_conditions(InputParams&, Grid&, IO_utils&); +void run_2d_solver(InputParams&, Source&, IO_utils&); +void interp2d(PlainGrid&, CUSTOMREAL, CUSTOMREAL, CUSTOMREAL&); +void load_2d_traveltime(InputParams&, Source&, Grid&, IO_utils&); +std::string get_2d_tt_filename(const std::string&, Source&); + +#endif // EIKONAL_SOLVER_2D_H \ No newline at end of file diff --git a/include/grid.fwd.h b/include/grid.fwd.h new file mode 100644 index 0000000..b5d30f0 --- /dev/null +++ b/include/grid.fwd.h @@ -0,0 +1,2 @@ +#pragma once +class Grid; \ No newline at end of file diff --git a/include/grid.h b/include/grid.h new file mode 100644 index 0000000..f203d52 --- /dev/null +++ b/include/grid.h @@ -0,0 +1,445 @@ +#ifndef GRID_H +#define GRID_H + +// to handle circular dependency +#pragma once +#include "grid.fwd.h" +#include "source.fwd.h" +#include "io.fwd.h" + +#include +#include +#include +#include +#include + +#include "utils.h" +#include "config.h" +#include "mpi_funcs.h" +#include "input_params.h" +#include "source.h" +#include "io.h" +#include "inv_grid.h" + +#ifdef USE_CUDA +#include +#include +#endif + +class Grid { +public: + Grid(InputParams&, IO_utils&); + ~Grid(); + // + // setter + // + // set physical parameters + void setup_grid_params(InputParams&, IO_utils&); // setup grid parameters + // set factors + void setup_factors(Source &); + // calculate initial fields T0 T0r T0t T0p and initialize tau + void initialize_fields(Source &, InputParams&); + // calculate initial fields T0 T0r T0t T0p and initialize tau for teleseismic source + void initialize_fields_teleseismic(); + // calculate L1 and Linf diff (sum of value change on the nodes) + void calc_L1_and_Linf_diff(CUSTOMREAL&, CUSTOMREAL&); + // calculate L1 and Linf diff for teleseismic source (sum of value change on the nodes) + void calc_L1_and_Linf_diff_tele(CUSTOMREAL&, CUSTOMREAL&); + // FOR TEST: calculate L1 and Linf error between analytic solution and current T + void calc_L1_and_Linf_error(CUSTOMREAL&, CUSTOMREAL&); + // calculate L1 and Linf diff for adjoint field + void calc_L1_and_Linf_diff_adj(CUSTOMREAL&, CUSTOMREAL&); + // calculate L1 and Linf diff for density of adjoint field + void calc_L1_and_Linf_diff_adj_density(CUSTOMREAL&, CUSTOMREAL&); + + // send and receive data to/from other subdomains + void send_recev_boundary_data(CUSTOMREAL*); + void prepare_boundary_data_to_send(CUSTOMREAL*); + void assign_received_data_to_ghost(CUSTOMREAL*); + void send_recev_boundary_data_av(CUSTOMREAL*); + void assign_received_data_to_ghost_av(CUSTOMREAL*); + // send and receive data to/from the neighbor subdomains which contact on a line or point + void send_recev_boundary_data_kosumi(CUSTOMREAL*); + void prepare_boundary_data_to_send_kosumi(CUSTOMREAL*); + void assign_received_data_to_ghost_kosumi(CUSTOMREAL*); + + // inversion methods + InvGrid* inv_grid; // inversion grid definitions + + // check model discontinuity + void check_velocity_discontinuity(); + + void reinitialize_abcf(); // reinitialize factors + void rejuvenate_abcf(); // reinitialize factors for earthquake relocation + void initialize_kernels(); // fill 0 to kernels + + // + // getters + // + + int get_ngrid_total_excl_ghost(){return loc_nnodes;}; + int get_nelms_total_excl_ghost(){return loc_nelms;}; + int get_offset_nnodes() {return offset_nnodes;}; + int get_offset_elms() {return offset_nelms;}; + void get_offsets_3d(int* arr) { + arr[0] = offset_k; + arr[1] = offset_j; + arr[2] = offset_i; + }; + + int get_ngrid_total_vis() {return loc_nnodes_vis;}; + int get_nelms_total_vis() {return loc_nelms_vis;}; + int get_offset_nnodes_vis(){return offset_nnodes_vis;}; + int get_offset_elms_vis() {return offset_nelms_vis;}; + + // return dimensions of node coordinates arra and connectivity array + std::array get_dim_nodes_coords() {return {offset_nnodes,3};}; + std::array get_dim_elms_conn() {return {offset_nelms,9};}; + + // return node coordinates array and connectivity array + int* get_elms_conn() {return elms_conn;}; + CUSTOMREAL* get_nodes_coords_x(){return x_loc_3d;}; // lon + CUSTOMREAL* get_nodes_coords_y(){return y_loc_3d;}; // lat + CUSTOMREAL* get_nodes_coords_z(){return z_loc_3d;}; // r + CUSTOMREAL* get_nodes_coords_p(){return p_loc_3d;}; // lon + CUSTOMREAL* get_nodes_coords_t(){return t_loc_3d;}; // lat + CUSTOMREAL* get_nodes_coords_r(){return r_loc_3d;}; // r + int* get_proc_dump() {return my_proc_dump;}; // array storing the process ids + + CUSTOMREAL* get_true_solution(){return get_array_for_vis(u_loc, false);}; // true solution + CUSTOMREAL* get_fun() {return get_array_for_vis(fun_loc, false);}; // + CUSTOMREAL* get_xi() {return get_array_for_vis(xi_loc, false);}; // + CUSTOMREAL* get_eta() {return get_array_for_vis(eta_loc, false);}; // + CUSTOMREAL* get_a() {return get_array_for_vis(fac_a_loc, false);}; // + CUSTOMREAL* get_b() {return get_array_for_vis(fac_b_loc, false);}; // + CUSTOMREAL* get_c() {return get_array_for_vis(fac_c_loc, false);}; // + CUSTOMREAL* get_f() {return get_array_for_vis(fac_f_loc, false);}; // + CUSTOMREAL* get_vel() {return get_array_for_vis(fun_loc, true);}; // true velocity field + CUSTOMREAL* get_T0v() {return get_array_for_vis(T0v_loc, false);}; // initial T0 + CUSTOMREAL* get_u() {return get_array_for_vis(u_loc, false);}; // current solution + CUSTOMREAL* get_tau() {return get_array_for_vis(tau_loc, false);}; // current tau + CUSTOMREAL* get_T() {return get_array_for_vis(T_loc, false);}; + CUSTOMREAL* get_residual() { calc_residual(); + return get_array_for_vis(u_loc, false);}; // calculate residual (T_loc over written!!) + CUSTOMREAL* get_Tadj() {return get_array_for_vis(Tadj_loc, false);}; // adjoint solution + CUSTOMREAL* get_Ks() {return get_array_for_vis(Ks_loc, false);}; // Ks + CUSTOMREAL* get_Kxi() {return get_array_for_vis(Kxi_loc, false);}; // Kxi + CUSTOMREAL* get_Keta() {return get_array_for_vis(Keta_loc, false);}; // Keta + CUSTOMREAL* get_Ks_density() {return get_array_for_vis(Ks_density_loc, false);}; // Ks_density + CUSTOMREAL* get_Kxi_density() {return get_array_for_vis(Kxi_density_loc, false);}; // Kxi_density + CUSTOMREAL* get_Keta_density() {return get_array_for_vis(Keta_density_loc, false);}; // Keta_density + CUSTOMREAL* get_Ks_update() {return get_array_for_vis(Ks_update_loc, false);}; // Ks_update + CUSTOMREAL* get_Kxi_update() {return get_array_for_vis(Kxi_update_loc, false);}; // Kxi_update + CUSTOMREAL* get_Keta_update() {return get_array_for_vis(Keta_update_loc, false);}; // Keta_update + CUSTOMREAL* get_Ks_density_update() {return get_array_for_vis(Ks_density_update_loc,false);}; // Ks_density_update + CUSTOMREAL* get_Kxi_density_update() {return get_array_for_vis(Kxi_density_update_loc,false);}; // Kxi_density_update + CUSTOMREAL* get_Keta_density_update() {return get_array_for_vis(Keta_density_update_loc,false);}; // Keta_density_update + + CUSTOMREAL* get_Ks_descent_dir() {return get_array_for_vis(Ks_descent_dir_loc, false);}; // Ks_descent_dir + CUSTOMREAL* get_Kxi_descent_dir(){return get_array_for_vis(Kxi_descent_dir_loc,false);}; // Kxi_descent_dir + CUSTOMREAL* get_Keta_descent_dir(){return get_array_for_vis(Keta_descent_dir_loc,false);}; // Keta_descent_dir + + // get physical parameters + CUSTOMREAL get_r_min() {return r_min;}; + CUSTOMREAL get_r_max() {return r_max;}; + CUSTOMREAL get_lat_min() {return lat_min;}; + CUSTOMREAL get_lat_max() {return lat_max;}; + CUSTOMREAL get_lon_min() {return lon_min;}; + CUSTOMREAL get_lon_max() {return lon_max;}; + CUSTOMREAL get_delta_lon() {return dlon;}; + CUSTOMREAL get_delta_lat() {return dlat;}; + CUSTOMREAL get_delta_r() {return dr;}; + CUSTOMREAL get_r_min_loc_excl_gl() {return r_loc_1d[k_start_loc];}; + CUSTOMREAL get_r_max_loc_excl_gl() {return r_loc_1d[k_end_loc];}; + CUSTOMREAL get_lat_min_loc_excl_gl() {return t_loc_1d[j_start_loc];}; + CUSTOMREAL get_lat_max_loc_excl_gl() {return t_loc_1d[j_end_loc];}; + CUSTOMREAL get_lon_min_loc_excl_gl() {return p_loc_1d[i_start_loc];}; + CUSTOMREAL get_lon_max_loc_excl_gl() {return p_loc_1d[i_end_loc];}; + CUSTOMREAL get_r_min_loc() {return r_loc_1d[0];}; + CUSTOMREAL get_r_max_loc() {return r_loc_1d[loc_K-1];}; + CUSTOMREAL get_lat_min_loc() {return t_loc_1d[0];}; + CUSTOMREAL get_lat_max_loc() {return t_loc_1d[loc_J-1];}; + CUSTOMREAL get_lon_min_loc() {return p_loc_1d[0];}; + CUSTOMREAL get_lon_max_loc() {return p_loc_1d[loc_I-1];}; + CUSTOMREAL get_r_by_index(int i) {return r_loc_1d[i];}; + CUSTOMREAL get_lat_by_index(int j) {return t_loc_1d[j];}; + CUSTOMREAL get_lon_by_index(int i) {return p_loc_1d[i];}; + + int get_offset_i() {return offset_i-i_start_loc;}; // return offset index (global index of the first node) + int get_offset_j() {return offset_j-j_start_loc;}; + int get_offset_k() {return offset_k-k_start_loc;}; + int get_offset_i_excl_gl() {return offset_i;}; // return offset index + int get_offset_j_excl_gl() {return offset_j;}; + int get_offset_k_excl_gl() {return offset_k;}; + + // return index of the first node excluding ghost layer + int get_k_start_loc() {return k_start_loc;}; + int get_k_end_loc() {return k_end_loc;}; + int get_j_start_loc() {return j_start_loc;}; + int get_j_end_loc() {return j_end_loc;}; + int get_i_start_loc() {return i_start_loc;}; + int get_i_end_loc() {return i_end_loc;}; + + // copy tau to tau old + void tau2tau_old(); + // copy T to tau old + void T2tau_old(); + // copy tau to Tadj + void update_Tadj(); + // copy tau to Tadj + void update_Tadj_density(); + // back up fun xi eta + void back_up_fun_xi_eta_bcf(); + // restore fun xi eta + void restore_fun_xi_eta_bcf(); + + // write out inversion grid file + void write_inversion_grid_file(); + +private: + + // + // member variables + // + // i: longitude, phi, + // j: latitude, theta, + // k: radius, r + + // starting node id for each direction expect the boundary + int i_start_loc=0, j_start_loc=0, k_start_loc=0; + // end node id for each direction expect the boundary + int i_end_loc=0, j_end_loc=0, k_end_loc=0; + + // neighbors domain_id (-1 if no neighbor) + // order of directions: -i,+i,-j,+j,-k,+k + std::vector neighbors_id{-1,-1,-1,-1,-1,-1}; + // neighbors domain_id line and point contact + // ij plane nn, np, pn, pp + std::vector neighbors_id_ij{-1,-1,-1,-1}; + // jk plane nn, np, pn, pp + std::vector neighbors_id_jk{-1,-1,-1,-1}; + // ik plane nn, np, pn, pp + std::vector neighbors_id_ik{-1,-1,-1,-1}; + // ijk plane nnn, nnp, npn, npp, pnn, pnp, ppn, ppp + std::vector neighbors_id_ijk{-1,-1,-1,-1,-1,-1,-1,-1}; + + // layer id of this domain + int domain_i, domain_j, domain_k; + + // number of points on each boundary surface + int n_grid_bound_i, n_grid_bound_j, n_grid_bound_k; + + // mpi parameters + int offset_nnodes=0, offset_nelms=0; + int offset_i=0, offset_j=0, offset_k=0; // offset of this domain in the global grid + + // number of nodes and elements on each subdomain + int loc_nnodes, loc_nelms; + int *nnodes, *nelms; + + // arrays for visualization + //int loc_I_vis, loc_J_vis, loc_K_vis; + int i_start_vis, j_start_vis, k_start_vis; + int i_end_vis, j_end_vis, k_end_vis; + int loc_nnodes_vis, loc_nelms_vis; + int *nnodes_vis, *nelms_vis; + int offset_nnodes_vis=0, offset_nelms_vis=0; + +public: + // 3d arrays + CUSTOMREAL *xi_loc; // local xi + CUSTOMREAL *eta_loc; // local eta + CUSTOMREAL *zeta_loc; // local zeta + CUSTOMREAL *fac_a_loc; // factor a + CUSTOMREAL *fac_b_loc; // factor b + CUSTOMREAL *fac_c_loc; // factor c + CUSTOMREAL *fac_f_loc; // factor f + CUSTOMREAL *fun_loc; + CUSTOMREAL *T_loc; + CUSTOMREAL *T0v_loc, *T0r_loc, *T0p_loc, *T0t_loc; + CUSTOMREAL *tau_loc; + CUSTOMREAL *tau_old_loc; + bool *is_changed; + // for inversion backup + CUSTOMREAL *fun_loc_back; + CUSTOMREAL *xi_loc_back; + CUSTOMREAL *eta_loc_back; + CUSTOMREAL *fac_b_loc_back; + CUSTOMREAL *fac_c_loc_back; + CUSTOMREAL *fac_f_loc_back; + // for lbfgs + CUSTOMREAL *Ks_grad_store_loc, *Keta_grad_store_loc, *Kxi_grad_store_loc; + CUSTOMREAL *Ks_model_store_loc, *Keta_model_store_loc, *Kxi_model_store_loc; + CUSTOMREAL *Ks_descent_dir_loc, *Keta_descent_dir_loc, *Kxi_descent_dir_loc; + CUSTOMREAL *fun_regularization_penalty_loc, *eta_regularization_penalty_loc, *xi_regularization_penalty_loc; + CUSTOMREAL *fun_gradient_regularization_penalty_loc, *eta_gradient_regularization_penalty_loc, *xi_gradient_regularization_penalty_loc; + CUSTOMREAL *fun_prior_loc, *eta_prior_loc, *xi_prior_loc; // *zeta_prior_loc; TODO + // tmp array for file IO + CUSTOMREAL *vis_data; + +private: + // windows for shm arrays + MPI_Win win_fac_a_loc, win_fac_b_loc, win_fac_c_loc, win_fac_f_loc; + MPI_Win win_T0r_loc, win_T0p_loc, win_T0t_loc, win_T0v_loc; + MPI_Win win_tau_loc, win_fun_loc; + MPI_Win win_is_changed; + MPI_Win win_T_loc, win_tau_old_loc; + MPI_Win win_xi_loc, win_eta_loc, win_zeta_loc; + MPI_Win win_r_loc_1d, win_t_loc_1d, win_p_loc_1d; + + CUSTOMREAL *x_loc_3d; // local (lon) x (global position) + CUSTOMREAL *y_loc_3d; // local (lat) y (global position) + CUSTOMREAL *z_loc_3d; // local (r ) z (global position) + CUSTOMREAL *p_loc_3d; // local lon (x) (global position) + CUSTOMREAL *t_loc_3d; // local lat (y) (global position) + CUSTOMREAL *r_loc_3d; // local r (z) (global position) + int *elms_conn; // connectivity array + int *my_proc_dump; // dump process id for each node DEBUG +public: + // 1d arrays for coordinates, storing only subdomain's local coordinates + CUSTOMREAL *r_loc_1d; // radius z in kilo meter + CUSTOMREAL *t_loc_1d; // theta lat y in radian + CUSTOMREAL *p_loc_1d; // phi lon x in radian +private: + // arrays for inversion + // TODO: check if those arrays can use shm + bool inverse_flag = false; + //int n_inv_grids; // in config.h + //int n_inv_I_loc, n_inv_J_loc, n_inv_K_loc; // in config.h +public: + CUSTOMREAL *Ks_loc; + CUSTOMREAL *Kxi_loc; + CUSTOMREAL *Keta_loc; + CUSTOMREAL *Ks_density_loc; + CUSTOMREAL *Kxi_density_loc; + CUSTOMREAL *Keta_density_loc; + CUSTOMREAL *Tadj_loc; // timetable for adjoint source + CUSTOMREAL *Tadj_density_loc; // timetable for density of adjoint source + CUSTOMREAL *Ks_inv_loc; + CUSTOMREAL *Kxi_inv_loc; + CUSTOMREAL *Keta_inv_loc; + CUSTOMREAL *Ks_density_inv_loc; + CUSTOMREAL *Kxi_density_inv_loc; + CUSTOMREAL *Keta_density_inv_loc; + // model update para + CUSTOMREAL *Ks_update_loc; + CUSTOMREAL *Kxi_update_loc; + CUSTOMREAL *Keta_update_loc; + CUSTOMREAL *Ks_density_update_loc; + CUSTOMREAL *Kxi_density_update_loc; + CUSTOMREAL *Keta_density_update_loc; + // model update para of the previous step + CUSTOMREAL *Ks_update_loc_previous; + CUSTOMREAL *Kxi_update_loc_previous; + CUSTOMREAL *Keta_update_loc_previous; +private: + MPI_Win win_Tadj_loc; + MPI_Win win_Tadj_density_loc; + // boundary layer for mpi communication + // storing not the value but the pointers for the elements of arrays + // to send + CUSTOMREAL *bin_s; // boundary i axis negative + CUSTOMREAL *bip_s; // boundary i axis positive + CUSTOMREAL *bjn_s; // boundary j axis negative + CUSTOMREAL *bjp_s; // boundary j axis positive + CUSTOMREAL *bkn_s; // boundary k axis negative + CUSTOMREAL *bkp_s; // boundary k axis positive + // to receive + CUSTOMREAL *bin_r; // boundary i axis negative + CUSTOMREAL *bip_r; // boundary i axis positive + CUSTOMREAL *bjn_r; // boundary j axis negative + CUSTOMREAL *bjp_r; // boundary j axis positive + CUSTOMREAL *bkn_r; // boundary k axis negative + CUSTOMREAL *bkp_r; // boundary k axis positive + + // kosumi boundaries (touching on lines and points) + CUSTOMREAL *bij_pp_s, *bij_pp_r; + CUSTOMREAL *bij_pn_s, *bij_pn_r; + CUSTOMREAL *bij_np_s, *bij_np_r; + CUSTOMREAL *bij_nn_s, *bij_nn_r; + CUSTOMREAL *bjk_pp_s, *bjk_pp_r; + CUSTOMREAL *bjk_pn_s, *bjk_pn_r; + CUSTOMREAL *bjk_np_s, *bjk_np_r; + CUSTOMREAL *bjk_nn_s, *bjk_nn_r; + CUSTOMREAL *bik_pp_s, *bik_pp_r; + CUSTOMREAL *bik_pn_s, *bik_pn_r; + CUSTOMREAL *bik_np_s, *bik_np_r; + CUSTOMREAL *bik_nn_s, *bik_nn_r; + CUSTOMREAL *bijk_ppp_s,*bijk_ppp_r; + CUSTOMREAL *bijk_ppn_s,*bijk_ppn_r; + CUSTOMREAL *bijk_pnn_s,*bijk_pnn_r; + CUSTOMREAL *bijk_npp_s,*bijk_npp_r; + CUSTOMREAL *bijk_npn_s,*bijk_npn_r; + CUSTOMREAL *bijk_nnp_s,*bijk_nnp_r; + CUSTOMREAL *bijk_nnn_s,*bijk_nnn_r; + CUSTOMREAL *bijk_pnp_s,*bijk_pnp_r; + + // store MPI_Request for sending and receiving + MPI_Request *mpi_send_reqs; + MPI_Request *mpi_recv_reqs; + MPI_Request *mpi_send_reqs_kosumi; + MPI_Request *mpi_recv_reqs_kosumi; + // + // domain definition + // + CUSTOMREAL r_min; // minimum radius of global domain + CUSTOMREAL r_max; // maximum radius of global domain + CUSTOMREAL lat_min; // minimum latitude of global domain + CUSTOMREAL lat_max; // maximum latitude of global domain + CUSTOMREAL lon_min; // minimum longitude of global domain + CUSTOMREAL lon_max; // maximum longitude of global domain +public: + CUSTOMREAL dr ; + CUSTOMREAL dlat,dt; + CUSTOMREAL dlon,dp; +private: + + // + // members for test + // + CUSTOMREAL *u_loc; // true solution # TODO: erase for no testing + //CUSTOMREAL *velo_loc; // velocity field, # TODO: use this for storing an intial model + // anisotropic factors + CUSTOMREAL a0, b0, c0, f0, fun0; + + CUSTOMREAL source_width; + // + // member functions + // + void init_decomposition(InputParams&); // initialize domain decomposition + void memory_allocation(); // allocate memory for arrays + void memory_deallocation(); // deallocate memory from arrays + void shm_memory_allocation(); // allocate memory for shared memory + void shm_memory_deallocation(); // deallocate memory from shared memory + + CUSTOMREAL *get_array_for_vis(CUSTOMREAL *arr, bool); // get array for visualization +public: + void get_array_for_3d_output(const CUSTOMREAL *arr_in, CUSTOMREAL* arr_out, bool inverse_field); // get array for 3d output + void set_array_from_vis(CUSTOMREAL *arr); // set vis array to local array + + // finalize the Time table + void calc_T_plus_tau(); +private: + // check difference between true solution and computed solution + void calc_residual(); + + // + // utilities + // +public: + bool i_first(){ return neighbors_id[0] == -1;} + bool j_first(){ return neighbors_id[2] == -1;} + bool k_first(){ return neighbors_id[4] == -1;} + bool i_last(){ return neighbors_id[1] == -1;} + bool j_last(){ return neighbors_id[3] == -1;} + bool k_last(){ return neighbors_id[5] == -1;} +private: + // number of the layers for ghost nodes + const int n_ghost_layers = 1; + // vtk format cell type + const int cell_type = 9; + + +}; + +#endif // GRID_H \ No newline at end of file diff --git a/include/input_params.h b/include/input_params.h new file mode 100644 index 0000000..56cd105 --- /dev/null +++ b/include/input_params.h @@ -0,0 +1,574 @@ +#ifndef INPUT_PARAMS_H +#define INPUT_PARAMS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" +#include "yaml-cpp/yaml.h" +#include "utils.h" +#include "mpi_funcs.h" +#include "timer.h" +#include "src_rec.h" + + +// InputParams class for reading/storing and outputing input parameters and src_rec information +class InputParams { + +public: + InputParams(std::string&); + ~InputParams(); + + // write parameters to output file + void write_params_to_file(); + + // + // getter/setter + // + + // + // bondary information + // + CUSTOMREAL get_min_dep(){return min_dep;}; + CUSTOMREAL get_max_dep(){return max_dep;}; + CUSTOMREAL get_min_lat(){return min_lat*DEG2RAD;}; + CUSTOMREAL get_max_lat(){return max_lat*DEG2RAD;}; + CUSTOMREAL get_min_lon(){return min_lon*DEG2RAD;}; + CUSTOMREAL get_max_lon(){return max_lon*DEG2RAD;}; + + // + // source receiver data + // + + // source receiver information for processes which stores source receiver information + std::string get_src_rec_file() {return src_rec_file;}; + bool get_src_rec_file_exist(){return src_rec_file_exist;}; + SrcRecInfo& get_src_point(const std::string&); // return SrcRec object + SrcRecInfo& get_rec_point(const std::string&); // return receivers for the current source + + // source receiver information with broadcast to all subdom_main processes + SrcRecInfo get_src_point_bcast(const std::string&); // return SrcRec object + SrcRecInfo get_rec_point_bcast(const std::string&); // return receivers for the current source + CUSTOMREAL get_src_radius( const std::string&); + CUSTOMREAL get_src_lat( const std::string&); + CUSTOMREAL get_src_lon( const std::string&); + SrcRecInfo get_src_point_bcast_2d(const std::string&); // return SrcRec object + CUSTOMREAL get_src_radius_2d(const std::string&); + CUSTOMREAL get_src_lat_2d( const std::string&); + CUSTOMREAL get_src_lon_2d( const std::string&); + std::string get_src_name(const int&); // return source name from in-sim_group id + std::string get_rec_name(const int&); // return receiver name from in-sim_group id + std::string get_src_name_comm(const int&); // return source name in common receiver list + int get_src_id(const std::string&); // return src global id from src name + bool get_if_src_teleseismic(const std::string&); // return true if the source is teleseismic + + // + // others + // + CUSTOMREAL get_conv_tol() {return conv_tol;}; + void set_conv_tol(CUSTOMREAL conv_tol_){conv_tol = conv_tol_;}; + CUSTOMREAL get_max_iter() {return max_iter;}; + + int get_stencil_order() {return stencil_order;}; + void set_stencil_order(int stencil_order_){stencil_order = stencil_order_;}; + int get_stencil_type() {return stencil_type;}; + int get_sweep_type() {return sweep_type;}; + + std::string get_init_model_path(){return init_model_path;}; + std::string get_model_1d_name() {return model_1d_name;}; + + int get_run_mode() {return run_mode;}; + + // invgrid for vel + int get_n_inversion_grid(){return n_inversion_grid;}; + + int get_n_inv_r() {return n_inv_r;}; + int get_n_inv_t() {return n_inv_t;}; + int get_n_inv_p() {return n_inv_p;}; + int get_n_inv_r_ani(){return n_inv_r_ani;}; + int get_n_inv_t_ani(){return n_inv_t_ani;}; + int get_n_inv_p_ani(){return n_inv_p_ani;}; + CUSTOMREAL get_min_dep_inv(){return min_dep_inv;}; + CUSTOMREAL get_max_dep_inv(){return max_dep_inv;}; + CUSTOMREAL get_min_lat_inv(){return min_lat_inv*DEG2RAD;}; + CUSTOMREAL get_max_lat_inv(){return max_lat_inv*DEG2RAD;}; + CUSTOMREAL get_min_lon_inv(){return min_lon_inv*DEG2RAD;}; + CUSTOMREAL get_max_lon_inv(){return max_lon_inv*DEG2RAD;}; + CUSTOMREAL get_min_dep_inv_ani(){return min_dep_inv_ani;}; + CUSTOMREAL get_max_dep_inv_ani(){return max_dep_inv_ani;}; + CUSTOMREAL get_min_lat_inv_ani(){return min_lat_inv_ani*DEG2RAD;}; + CUSTOMREAL get_max_lat_inv_ani(){return max_lat_inv_ani*DEG2RAD;}; + CUSTOMREAL get_min_lon_inv_ani(){return min_lon_inv_ani*DEG2RAD;}; + CUSTOMREAL get_max_lon_inv_ani(){return max_lon_inv_ani*DEG2RAD;}; + + int get_n_inv_r_flex(){return n_inv_r_flex;}; + int get_n_inv_t_flex(){return n_inv_t_flex;}; + int get_n_inv_p_flex(){return n_inv_p_flex;}; + CUSTOMREAL* get_dep_inv() {return dep_inv;}; + CUSTOMREAL* get_lat_inv() {return lat_inv;}; + CUSTOMREAL* get_lon_inv() {return lon_inv;}; + CUSTOMREAL* get_trapezoid() {return trapezoid;}; + + bool get_ignore_velocity_discontinuity(){return ignore_velocity_discontinuity;}; + + // invgrid for ani + bool get_invgrid_ani() {return invgrid_ani;}; + + int get_n_inv_r_flex_ani(){return n_inv_r_flex_ani;}; + int get_n_inv_t_flex_ani(){return n_inv_t_flex_ani;}; + int get_n_inv_p_flex_ani(){return n_inv_p_flex_ani;}; + CUSTOMREAL* get_dep_inv_ani() {return dep_inv_ani;}; + CUSTOMREAL* get_lat_inv_ani() {return lat_inv_ani;}; + CUSTOMREAL* get_lon_inv_ani() {return lon_inv_ani;}; + CUSTOMREAL* get_trapezoid_ani() {return trapezoid_ani;}; + + // + void check_inv_grid(); +private: + void check_increasing(CUSTOMREAL*, int, std::string); + void check_lower_bound(CUSTOMREAL*&, int&, CUSTOMREAL, std::string); + void check_upper_bound(CUSTOMREAL*&, int&, CUSTOMREAL, std::string); + +public: + // void check_dep_inv(); + // void check_lat_inv(); + // void check_lon_inv(); + // void check_dep_inv_ani(); + // void check_lat_inv_ani(); + // void check_lon_inv_ani(); + + // // adjust inv grid + // void insertAtFront(CUSTOMREAL*&, int&, CUSTOMREAL); + // void insertAtBack(CUSTOMREAL*&, int&, CUSTOMREAL); + + // bool get_invgrid_volume_rescale(){return invgrid_volume_rescale;} + + int get_max_iter_inv() {return max_iter_inv;}; + + int get_model_update_N_iter(){return model_update_N_iter;}; + int get_relocation_N_iter() {return relocation_N_iter;}; + int get_max_loop_mode0() {return max_loop_mode0;}; + int get_max_loop_mode1() {return max_loop_mode1;}; + + bool get_is_srcrec_swap() {return swap_src_rec;}; + + bool get_if_output_source_field() {return output_source_field;}; + bool get_if_output_kernel() {return output_kernel;}; + bool get_if_output_final_model() {return output_final_model;}; + bool get_if_output_middle_model() {return output_middle_model;}; + bool get_if_output_in_process() {return output_in_process;}; + bool get_if_output_in_process_data() {return output_in_process_data;}; + bool get_if_single_precision_output(){return single_precision_output;}; + int get_verbose_output_level() {return verbose_output_level;}; // #TODO: modify codes for verbose_output_level > 1 + + bool get_update_slowness() {return update_slowness;}; + bool get_update_azi_ani() {return update_azi_ani;}; + bool get_update_rad_ani() {return update_rad_ani;}; + CUSTOMREAL * get_depth_taper() {return depth_taper;}; + + bool get_have_tele_data() {return have_tele_data;}; + + bool get_use_abs() {return use_abs;}; + bool get_use_cs() {return use_cs;}; + bool get_use_cr() {return use_cr;}; + + bool get_use_abs_reloc() {return use_abs_reloc;}; + bool get_use_cs_reloc() {return use_cs_reloc;}; + bool get_use_cr_reloc() {return use_cr_reloc;}; + + CUSTOMREAL* get_residual_weight_abs() {return residual_weight_abs;}; + CUSTOMREAL* get_distance_weight_abs() {return distance_weight_abs;}; + CUSTOMREAL* get_residual_weight_cs() {return residual_weight_cs;}; + CUSTOMREAL* get_azimuthal_weight_cs() {return azimuthal_weight_cs;}; + CUSTOMREAL* get_residual_weight_cr() {return residual_weight_cr;}; + CUSTOMREAL* get_azimuthal_weight_cr() {return azimuthal_weight_cr;}; + + + CUSTOMREAL* get_residual_weight_abs_reloc() {return residual_weight_abs_reloc;}; + CUSTOMREAL* get_distance_weight_abs_reloc() {return distance_weight_abs_reloc;}; + CUSTOMREAL* get_residual_weight_cs_reloc() {return residual_weight_cs_reloc;}; + CUSTOMREAL* get_azimuthal_weight_cs_reloc() {return azimuthal_weight_cs_reloc;}; + CUSTOMREAL* get_residual_weight_cr_reloc() {return residual_weight_cr_reloc;}; + CUSTOMREAL* get_azimuthal_weight_cr_reloc() {return azimuthal_weight_cr_reloc;}; + + // get if the T field is written into the file + bool get_is_T_written_into_file(const std::string&); + + // prepare source list for this simulation group + void prepare_src_map(); + + // (relocation) modify (swapped source) receiver's location and time + void modify_swapped_source_location(); + + // write out src_rec_file + void write_src_rec_file(int,int); + + // write out station_correction_file + void write_station_correction_file(int); + + // station correction + void station_correction_update( CUSTOMREAL ); + + int n_src_this_sim_group = 0; // number of sources in this simultaneous group + int n_src_comm_rec_this_sim_group = 0; // number of sources with common receiver in this simultaneous group + int n_src_2d_this_sim_group = 0; // number of sources assigned for 2d solver in this simultaneous group + int n_rec_this_sim_group = 0; // number of receivers in this simultaneous group + + std::map src_map_all; // map of all sources (full information is only stored by the main process) + std::map src_map; // map of sources belonging to this simultaneous group + std::map src_map_comm_rec; // map of sources with common receiver + std::map src_map_2d; // map of sources assigned for 2d solver + std::map src_map_tele; // source list for teleseismic + + std::map rec_map_all; // map of all receivers (full information is only stored by the main process) + std::map rec_map; // map of receivers belonging to this simultaneous group + std::map rec_map_tele; // rec list for teleseismic + + // datainfo-vector maps + std::map< std::string, std::map>> data_map_all; // data list for all data (full information is only stored by the main process) + std::map< std::string, std::map>> data_map; // data list for this simultaneous group + std::map< std::string, std::map>> data_map_tele; // data list for teleseismic + + std::vector name_for_reloc; // name list of receivers (swarpped sources) for location + + // src id <-> src name relations + std::vector src_id2name; // name list of sources belonging to this simultaneous group + std::vector rec_id2name; // name list of receivers belongig to this simultaneous group + std::vector src_id2name_comm_rec; // name list of sources with common receiver + std::vector src_id2name_2d; // name list of sources assigned for 2d solver. + std::vector src_id2name_all; // name list of all sources (store the order of sources in src_rec file) + std::vector src_id2name_back; // back up of name list of all sources (this will not be swapped) + std::vector>> rec_id2name_back; // back up of the name list of all receivers for each source (this will not be swapped) + + // backups used when outputing the data + std::map src_map_back; + std::map rec_map_back; + std::map>> data_map_back; + + // the number of data + int N_abs_local_data = 0; + int N_cr_dif_local_data = 0; + int N_cs_dif_local_data = 0; + int N_teleseismic_data = 0; + int N_data = 0; + // the number of the types of data + int N_data_type = 0; + std::map data_type; // element: "abs", "cs_dif", "cr_dif", "tele" + + // initialize_adjoint_source + void initialize_adjoint_source(); + // set adjoint source && adjoint source density + void set_adjoint_source(std::string, CUSTOMREAL); + void set_adjoint_source_density(std::string, CUSTOMREAL); + + // gather traveltimes and calculate differences of synthetic data + void gather_traveltimes_and_calc_syn_diff(); + + // reduce necessary data in rec_map, which has differed elements in each sim group. + template + void allreduce_rec_map_var(T&); + + void allreduce_rec_map_vobj_src_reloc(); + void allreduce_rec_map_grad_src(); + +private: + // boundary information + CUSTOMREAL min_dep; // minimum depth in km + CUSTOMREAL max_dep; // maximum depth in km + CUSTOMREAL min_lat; // minimum latitude in degree + CUSTOMREAL max_lat; // maximum latitude in degree + CUSTOMREAL min_lon; // minimum longitude in degree + CUSTOMREAL max_lon; // maximum longitude in degree + + // source information + CUSTOMREAL src_dep; // source depth in km + CUSTOMREAL src_lat; // source latitude in degrees + CUSTOMREAL src_lon; // source longitude in degrees + std::string src_rec_file; // source receiver file + std::string src_rec_file_out; // source receiver file to be output + std::string sta_correction_file; // station correction file to be input + std::string station_correction_file_out; // station correction file to be output + bool src_rec_file_exist = false; // source receiver file exist + bool sta_correction_file_exist = false; // station correction file exist + bool swap_src_rec = false; // whether the src/rec are swapped or not + + // model input files + std::string init_model_path; // model file path init + std::string model_1d_name; // name of 1d model for teleseismic tomography + + // inversion + int run_mode=0; // do inversion or not (0: no, 1: yes) + int n_inversion_grid=1; // number of inversion grid + + // inversion grid setting + static const int n_trapezoid = 3; + CUSTOMREAL trapezoid[n_trapezoid] = {1.0, 0.0, 50.0}; + CUSTOMREAL trapezoid_ani[n_trapezoid] = {1.0, 0.0, 50.0}; + + + // uniform or flexible inversion grid (0: uniform, 1: flexible, 2: trapezoid) + // int type_invgrid_dep=0; + // int type_invgrid_lat=0; + // int type_invgrid_lon=0; + // uniform or flexible anisotropic inversion grid (0: uniform, 1: flexible, 2: trapezoid) + // int type_invgrid_dep_ani=0; + // int type_invgrid_lat_ani=0; + // int type_invgrid_lon_ani=0; + + // + // variables for type = 0: uniform inversion grid + // + + bool uniform_inv_grid_dep = false; // automatically generate inversion grid for dep or not + bool uniform_inv_grid_lat = false; // automatically generate inversion grid for lat or not + bool uniform_inv_grid_lon = false; // automatically generate inversion grid for lon or not + // number of uniform inversion grid nodes in r, t, p direction + int n_inv_r=0; + int n_inv_t=0; + int n_inv_p=0; + // number of uniform anisotropic inversion grid nodes in r, t, p direction + int n_inv_r_ani=0; + int n_inv_t_ani=0; + int n_inv_p_ani=0; + + // type = 0: uniform inversion grid + // inversion grid + CUSTOMREAL min_dep_inv=-99999; // minimum depth in km + CUSTOMREAL max_dep_inv=-99999; // maximum depth in km + CUSTOMREAL min_lat_inv=-99999; // minimum latitude + CUSTOMREAL max_lat_inv=-99999; // maximum latitude + CUSTOMREAL min_lon_inv=-99999; // minimum longitude + CUSTOMREAL max_lon_inv=-99999; // maximum longitude + + // inversion grid for anisotropic parameters + CUSTOMREAL min_dep_inv_ani=-99999; // minimum depth in km + CUSTOMREAL max_dep_inv_ani=-99999; // maximum depth in km + CUSTOMREAL min_lat_inv_ani=-99999; // minimum latitude + CUSTOMREAL max_lat_inv_ani=-99999; // maximum latitude + CUSTOMREAL min_lon_inv_ani=-99999; // minimum longitude + CUSTOMREAL max_lon_inv_ani=-99999; // maximum longitude + void setup_uniform_inv_grid(); + + // + // variables fo type = 1: flexible inversion grid + // + + CUSTOMREAL *dep_inv = nullptr; // array for storing inversion grid points in depth + CUSTOMREAL *lat_inv = nullptr; // array for storing inversion grid points in latitude + CUSTOMREAL *lon_inv = nullptr; // array for storing inversion grid points in longitude + CUSTOMREAL *dep_inv_ani = nullptr; // array for storing inversion grid points in depth for anisotropy + CUSTOMREAL *lat_inv_ani = nullptr; // array for storing inversion grid points in latitude for anisotropy + CUSTOMREAL *lon_inv_ani = nullptr; // array for storing inversion grid points in longitude for anisotropy + + // number of flexibly designed inversion grid in r, t, p direction + int n_inv_r_flex=0; + int n_inv_t_flex=0; + int n_inv_p_flex=0; + // number of flexibly designed inversion grid in r, t, p direction + int n_inv_r_flex_ani=0; + int n_inv_t_flex_ani=0; + int n_inv_p_flex_ani=0; + + // if true, use defined inversion grid for anisotropy. Otherwise, use the same inversion grid of velocity for anisotropy + bool invgrid_ani = false; + + // inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh) + // bool invgrid_volume_rescale = false; + + // date usage setting and weights + bool use_abs = false; // use absolute travel time or not + bool use_cs = false; // use common source double difference or not + bool use_cr = false; // use common receiver double difference or not + static const int n_weight = 4; + CUSTOMREAL residual_weight_abs[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL residual_weight_cs[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL residual_weight_cr[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL distance_weight_abs[n_weight] = { 100.0, 200.0, 1.0, 1.0}; + CUSTOMREAL azimuthal_weight_cs[n_weight] = { 15.0, 30.0, 1.0, 1.0}; + CUSTOMREAL azimuthal_weight_cr[n_weight] = { 15.0, 30.0, 1.0, 1.0}; + + // for relocation + bool use_abs_reloc = false; // use absolute travel time or not + bool use_cs_reloc = false; // use common source double difference or not + bool use_cr_reloc = false; // use common source double difference or not + CUSTOMREAL residual_weight_abs_reloc[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL distance_weight_abs_reloc[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL residual_weight_cs_reloc[n_weight] = { 1.0, 3.0, 1.0, 1.0}; + CUSTOMREAL azimuthal_weight_cs_reloc[n_weight] = { 100.0, 200.0, 1.0, 1.0}; + CUSTOMREAL residual_weight_cr_reloc[n_weight] = { 15.0, 30.0, 1.0, 1.0}; + CUSTOMREAL azimuthal_weight_cr_reloc[n_weight] = { 15.0, 30.0, 1.0, 1.0}; + + // convergence setting + CUSTOMREAL conv_tol = 1e-05; // convergence tolerance + int max_iter = 500; // maximum number of iterations + int max_iter_inv=1; // maximum number of iterations for inversion + + // calculation method + int stencil_order = 1; // stencil order + int stencil_type = 1; // stencil type (0: non upwind; 1: upwind) + int sweep_type = 0; // sweep type (0: legacy, 1: cuthil-mckee with shm parallelization) + + // gather all arrival times to a main process + void gather_all_arrival_times_to_main(); + // gather rec info to main process + void gather_rec_info_to_main(); + + // generate a map of sources which include common receiver double difference data + void generate_src_map_with_common_receiver(std::map>>&, + std::map&, + std::vector&); + + bool i_first=false, i_last=false, \ + j_first=false, j_last=false, \ + k_first=false; // store info if this subdomain has outer boundary + + // check contradictions in input parameters + void check_contradictions(); + + // output setting + bool output_source_field = false; // output out_data_sim_X.h or not. + bool output_kernel = false; // output kernel or not. + bool output_final_model = true; // output merged final model or not. + bool output_middle_model = false; // output merged model at each inv iteration or not. + bool output_in_process = true; // True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: "out_data_sim_group_0". Keys: "Kdensity_update_inv_XXXX", "vel_inv_0000", "xi_inv_0000", "eta_inv_0000" + bool output_in_process_data = true; // output src_rec_file at each inv iteration or not. + int verbose_output_level = 0; // output verbose information or not. + + // inversion setting + bool update_slowness = true; // update slowness (velocity) or not. + bool update_azi_ani = false; // update azimuthal anisotropy (xi, eta) or not. + bool update_rad_ani = false; // update radial anisotropy (in future) or not. + + // have have_tele_data or not? + bool have_tele_data = false; // default is false. Error will occur if teleseismic data is include but false. + + // ignore velocity discontinuity + bool ignore_velocity_discontinuity = false; // default is false. Error will occur if model velocity has discontinuity ( v[i+1] > v[i] * 1.2 or v[i+1] < v[i] * 0.8). + + CUSTOMREAL depth_taper[2] = {-9999999, -9999998}; // kernel weight: 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + bool use_sta_correction = false; // apply station correction or not. + + // single precision (float) output mode + bool single_precision_output = false; + + +}; + + +// +// utils +// +inline DataInfo& get_data_src_rec(std::vector& v){ + // return the first element in the vector with is_rec_pair = true + for (auto it = v.begin(); it != v.end(); it++){ + if (it->is_src_rec) + return *it; + } + + // error if no rec pair is found + std::cerr << "Error: no src/rec is found in get_data_src_rec" << std::endl; + exit(1); + + // return the first element in the vector as a dummy + return v[0]; +} + + +inline DataInfo& get_data_rec_pair(std::map>>& v, + const std::string& name_src, + const std::string& name_rec1, + const std::string& name_rec2){ + // return the first element in the vector with is_rec_pair = true + auto& map1 = v[name_src][name_rec1]; + auto& map2 = v[name_src][name_rec2]; + + for (auto it = map1.begin(); it != map1.end(); it++){ + if (it->is_rec_pair && it->name_rec_pair[0] == name_rec1 && it->name_rec_pair[1] == name_rec2) + return *it; + } + + for (auto it = map2.begin(); it != map2.end(); it++){ + if (it->is_rec_pair && it->name_rec_pair[0] == name_rec1 && it->name_rec_pair[1] == name_rec2) + return *it; + } + + // error if no rec pair is found + std::cerr << "Error: no rec pair is found in get_data_rec_pair" << std::endl; + exit(1); + + // return the first element in the vector as a dummy + return v[name_src][name_rec1][0]; +} + + +inline DataInfo& get_data_src_pair(std::map>>& v, + const std::string& name_src1, + const std::string& name_src2, + const std::string& name_rec){ + + // return the first element in the vector with is_rec_pair = true + auto& map1 = v[name_src1][name_rec]; + auto& map2 = v[name_src2][name_rec]; + + for (auto it = map1.begin(); it != map1.end(); it++){ + if (it->is_src_pair && it->name_src_pair[0] == name_src1 && it->name_src_pair[1] == name_src2) + return *it; + } + + for (auto it = map2.begin(); it != map2.end(); it++){ + if (it->is_src_pair && it->name_src_pair[0] == name_src2 && it->name_src_pair[1] == name_src1) + return *it; + } + + // error if no src pair is found + std::cerr << "Error: no src pair is found in get_data_src_pair" << std::endl; + exit(1); + + // return the first element in the vector as a dummy + return v[name_src1][name_rec][0]; +} + + +inline void set_cr_dif_to_src_pair(std::map>>& v, + std::string& name_src1, + std::string& name_src2, + std::string& name_rec, + CUSTOMREAL& cr_dif){ + // return the first element in the vector with is_rec_pair = true + + std::vector& vdata = v[name_src1][name_rec]; + + for (auto it = vdata.begin(); it != vdata.end(); it++){ + if (it->is_src_pair + && ( (it->name_src_pair[0] == name_src1 && it->name_src_pair[1] == name_src2) + || (it->name_src_pair[0] == name_src2 && it->name_src_pair[1] == name_src1) )) { + it->cr_dif_travel_time = cr_dif; + } + } +} + + +inline bool get_if_any_src_pair(std::vector& v){ + // return the first element in the vector with is_rec_pair = true + for (auto it = v.begin(); it != v.end(); it++){ + if (it->is_src_pair) + return true; + } + + // or maybe this will be enough + //return v.size() > 1; + + // return false if no rec pair is found + return false; +} + + +#endif \ No newline at end of file diff --git a/include/inv_grid.h b/include/inv_grid.h new file mode 100644 index 0000000..ecb3389 --- /dev/null +++ b/include/inv_grid.h @@ -0,0 +1,75 @@ +#ifndef INV_GRID_H +#define INV_GRID_H + +#include + +#include "config.h" +#include "input_params.h" + + +// Base class for 1D inversion grid () +class InvGrid1dBase { +public: + InvGrid1dBase(){}; + virtual ~InvGrid1dBase(){ + delete[] arr; + }; + + // copy constructor + InvGrid1dBase(const InvGrid1dBase& other){ + n = other.n; + dinv = other.dinv; + dinv_l = other.dinv_l; + arr = new CUSTOMREAL[n]; + std::copy(other.arr, other.arr+n, arr); + } + + // assignment operator + InvGrid1dBase& operator=(const InvGrid1dBase& other){ + if (this != &other){ + n = other.n; + dinv = other.dinv; + dinv_l = other.dinv_l; + arr = new CUSTOMREAL[n]; + std::copy(other.arr, other.arr+n, arr); + } + return *this; + } + + CUSTOMREAL* arr = nullptr; // 1d or 2d array storing the grid coordinates + int n; // number of grid points + CUSTOMREAL dinv; // grid spacing + CUSTOMREAL dinv_l; // amount of shift for each inversion grid +}; + +// Derived class for 1D inversion grid +class InvGrid1d : public InvGrid1dBase { +public: + InvGrid1d(InputParams&, const int, const CUSTOMREAL*); // for r grid + InvGrid1d(InputParams&, const int, const CUSTOMREAL*, const CUSTOMREAL*, const int, const CUSTOMREAL*); // function overload for t and p grids + ~InvGrid1d() override {}; +}; + + +// Base class for 3D inversion grid +class InvGrid { +public: + InvGrid(InputParams&); + ~InvGrid(); + + void write_inversion_grid_to_file(); + + InvGrid1dBase r; + InvGrid1dBase t; + InvGrid1dBase p; + InvGrid1dBase r_ani; + InvGrid1dBase t_ani; + InvGrid1dBase p_ani; + +private: + void get_inv_grid_params(InputParams&); +}; + + + +#endif // INV_GRID_H diff --git a/include/io.fwd.h b/include/io.fwd.h new file mode 100644 index 0000000..57a9bf0 --- /dev/null +++ b/include/io.fwd.h @@ -0,0 +1,2 @@ +#pragma once +class IO_utils; \ No newline at end of file diff --git a/include/io.h b/include/io.h new file mode 100644 index 0000000..ef4c915 --- /dev/null +++ b/include/io.h @@ -0,0 +1,284 @@ +#ifndef IO_H +#define IO_H + +#include +#include +#if USE_HDF5 + #include "hdf5.h" +#endif +#include "tinyxml2.h" + +// to handle circular dependency +#pragma once +#include "grid.fwd.h" +//#include "source.fwd.h" +#include "io.fwd.h" + +#include "utils.h" +#include "mpi_funcs.h" +#include "grid.h" +#include "config.h" +#include "input_params.h" +#include "eikonal_solver_2d.h" + + +class IO_utils { + +public: + IO_utils(InputParams&); + ~IO_utils(); + + // initialize data output file + void init_data_output_file(); + // finalize data/grid outpiut file (xdmf) + void finalize_data_output_file(); + // change the output file name and xdmf objects + void change_xdmf_obj(int); + // output for updating xdmf file + void update_xdmf_file(); + + // change group name for source + void reset_source_info(const int&, const std::string&); + // change group name for model + void change_group_name_for_model(); + // prepare grid for each inversion iteration + void prepare_grid_inv_xdmf(int); + + // set id_sim + void set_id_src(const int& id_src_){id_sim_src = id_src_;}; + // set source name + void set_name_src(const std::string& name_src_){name_sim_src = name_src_;}; + + + // + // write functions + // + + // xdmf write out for grid data + void write_xdmf_file_grid(); + + // write grid data to output file + void write_grid(Grid&); + // general function for write out data in hdf5 + void write_data_h5(Grid&, std::string&, std::string&, CUSTOMREAL*, int, bool, bool for_tmp_db=false); + // general function for write out data in hdf5 with merging subdomains + void write_data_merged_h5(Grid&, std::string&, std::string&, std::string&, CUSTOMREAL*, bool, bool no_group=true); + // general function for write out data in ascii + void write_data_ascii(Grid&, std::string&, CUSTOMREAL*); + // general function for write out data in ascii with merging subdomains + void write_data_merged_ascii(Grid&, std::string&); + // write true solution + void write_true_solution(Grid&); + // write velocity model + void write_vel(Grid&, int); + // write T0v + void write_T0v(Grid&, int); + // write u + void write_u(Grid&); + // write tau + void write_tau(Grid&, int); + // write temporal tau fields + //void write_tmp_tau(Grid&, int); + // write result timetable T + void write_T(Grid&, int); + // write temporal timetable T in a separated file + void write_T_tmp(Grid&); + // write residual (resudual = true_solution - result) + void write_residual(Grid&); + // write adjoint field + void write_adjoint_field(Grid&, int); + // write fun_loc + void write_fun(Grid&, int); + // write xi + void write_xi(Grid&, int); + // write eta + void write_eta(Grid&, int); + // write a + void write_a(Grid&, int); + // write b + void write_b(Grid&, int); + // write c + void write_c(Grid&, int); + // write f + void write_f(Grid&, int); + // Ks + void write_Ks(Grid&, int); + // Kxi + void write_Kxi(Grid&, int); + // Keta + void write_Keta(Grid&, int); + // Ks_density + void write_Ks_density(Grid&, int); + // Kxi_density + void write_Kxi_density(Grid&, int); + // Keta_density + void write_Keta_density(Grid&, int); + // Ks_over_Kden + void write_Ks_over_Kden(Grid&, int); + // Kxi_over_Kden + void write_Kxi_over_Kden(Grid&, int); + // Keta_over_Kden + void write_Keta_over_Kden(Grid&, int); + // Ks_update + void write_Ks_update(Grid&, int); + // Kxi_update + void write_Kxi_update(Grid&, int); + // Keta_update + void write_Keta_update(Grid&, int); + // Ks_density_update + void write_Ks_density_update(Grid&, int); + // Kxi_density_update + void write_Kxi_density_update(Grid&, int); + // Keta_density_update + void write_Keta_density_update(Grid&, int); + // Ks_descent_dir_loc + void write_Ks_descent_dir(Grid&, int); + // Kxi_descent_dir_loc + void write_Kxi_descent_dir(Grid&, int); + // Keta_descent_dir_loc + void write_Keta_descent_dir(Grid&, int); + + // write all concerning parameters + std::vector get_grid_data(CUSTOMREAL * data); + // void write_concerning_parameters(Grid&, int, InputParams&); + + // 2d traveltime field for teleseismic source + void write_2d_travel_time_field(CUSTOMREAL*, CUSTOMREAL*, CUSTOMREAL*, int, int, CUSTOMREAL); + void h5_create_and_write_dataset_2d(std::string&, int, int*, int, CUSTOMREAL*); + void read_2d_travel_time_field(std::string&, CUSTOMREAL*, int, int); + + // 2d field for 1dinv + void write_1dinv_field(CUSTOMREAL*, CUSTOMREAL*, CUSTOMREAL*, int, int, std::string&); + + // merged model + void write_T_merged(Grid&, InputParams&, int); + void write_merged_model(Grid&, InputParams&, std::string); + bool node_of_this_subdomain(int*, const int&, const int&, const int&); + + // + // read functions + // + + // read model data + void read_model(std::string&, const char*, CUSTOMREAL*, int, int, int); + // read Travel time from file for earthquake relocation and common receiver double-difference + void read_T(Grid&); + // read Travel time from a temporal file for earthquake relocation and common receiver double-difference + void read_T_tmp(Grid&); + + void read_data_ascii(Grid&, std::string&); + + // + // delete functions + // + // Any deletion of data should be done on a created hdf5. Because the design of hdf5 is that + // it is not possible to delete data from an existing hdf5 file. The only way to do so is to + // create a new hdf5 file and copy the necessary data from the old one to the new one. + // Therefore, the deletion of data is not implemented in this class. + // Reference : https://stackoverflow.com/questions/1124994/removing-data-from-a-hdf5-file + +private: + // member variables + std::string h5_output_grid_fname = "out_data_grid.h5"; // output file name + std::string h5_output_fname = "out_data.h5"; // output file name + std::string h5_output_fname_tmp = "out_data_tmp.h5"; // output file name + std::string xdmf_output_fname = "out_data.xmf"; // output file name + std::string h5_group_name_grid = "Mesh"; // group name for grid data + std::string h5_group_name_event = "Event"; // group name for event data + std::string h5_group_name_data = "Data"; // group name for event data + + std::string h5_dset_name_node_coords_x = "node_coords_x"; // dataset name for node coordinates + std::string h5_dset_name_node_coords_y = "node_coords_y"; // dataset name for node coordinates + std::string h5_dset_name_node_coords_z = "node_coords_z"; // dataset name for node coordinates + std::string h5_dset_name_node_coords_p = "node_coords_p"; // dataset name for node coordinates + std::string h5_dset_name_node_coords_t = "node_coords_t"; // dataset name for node coordinates + std::string h5_dset_name_node_coords_r = "node_coords_r"; // dataset name for node coordinates + std::string h5_dset_name_elem_conn = "elem_conn"; // dataset name for element connectivity + std::string h5_dset_name_procid = "procid"; // dataset name for my_procs + + std::string h5_file_and_group = h5_output_grid_fname + ":/" + h5_group_name_grid; + std::string h5_whole_name_conn = h5_file_and_group + "/" + h5_dset_name_elem_conn; + std::string h5_whole_name_x = h5_file_and_group + "/" + h5_dset_name_node_coords_x; + std::string h5_whole_name_y = h5_file_and_group + "/" + h5_dset_name_node_coords_y; + std::string h5_whole_name_z = h5_file_and_group + "/" + h5_dset_name_node_coords_z; + std::string h5_whole_name_proc = h5_file_and_group + "/" + h5_dset_name_procid; + + // index of current simulation used for naming output files and datasets + int id_sim_src; + // name of current simulation used for naming output files and datasets + std::string name_sim_src; + + int nnodes_glob = 0; + int nelms_glob = 0; + + int array_rank_default = 2; // default array rank + + int custom_real_flag; // custom real type + + // custom data type for real + std::string type_name = "Float"; + std::string type_size = "4"; + + // helper for xdmf/xml file io + tinyxml2::XMLDocument* doc; + tinyxml2::XMLNode* xdmf, *domain, *grid; + tinyxml2::XMLNode* inversions, *inv_grid; + void init_xdmf_file(); + void write_xdmf_file(); + void finalize_xdmf_file(); + void insert_data_xdmf(std::string&, std::string&, std::string&); + +#ifdef USE_HDF5 + // h5 variables + hid_t file_id; + hid_t group_id; + hid_t space_id; + hid_t dset_id; + hid_t plist_id, plist_id_dset; + hid_t file_dspace_id, mem_dspace_id; + herr_t status; + hid_t plist_id_2d; + hid_t file_id_2d; + + // h5 low level utilities + void h5_create_file_by_group_main(std::string&); + void h5_open_file_by_group_main(std::string&); + void h5_open_file_collective(std::string&); + void h5_open_file_collective_input(std::string&); + void h5_close_file_by_group_main(); + void h5_close_file_collective(); + + void h5_create_group_by_group_main(std::string& ); + void h5_open_group_by_group_main(std::string& ); + void h5_open_group_collective(std::string& ); + void h5_close_group_by_group_main(); + void h5_close_group_collective(); + + void h5_create_dataset(std::string&, int, int*, int, bool no_group = false); + void h5_open_dataset(std::string&); + void h5_open_dataset_no_group(std::string&); + void h5_close_dataset(); + + template + void h5_write_array(std::string&, int, int*, T*, int offset_one, int offset_two=0, int offset_three=0, bool no_group=false); + + template + void h5_read_array(std::string&, int, int*, T*, int*, bool); + + template + void h5_read_array_simple(std::string&, T*); + + void read_data_h5(Grid&, CUSTOMREAL*, std::string, std::string); +#endif // HDF_HDF5 + + // utilities + std::string create_fname_ascii(std::string&); + std::string create_fname_ascii_model(std::string&); + + // flag for data type + const bool model_data = true; + const bool src_data = false; + +}; + +#endif // IO_H \ No newline at end of file diff --git a/include/iterator.h b/include/iterator.h new file mode 100644 index 0000000..3e522f6 --- /dev/null +++ b/include/iterator.h @@ -0,0 +1,161 @@ +#ifndef ITERATOR_H +#define ITERATOR_H + +#include +#include +#include +#include +#include "grid.h" +#include "input_params.h" +#include "utils.h" +#include "source.h" +#include "io.h" +#include "timer.h" +#include "eikonal_solver_2d.h" + +#ifdef USE_CUDA +#include "grid_wrapper.cuh" +#include "iterator_wrapper.cuh" +#endif + +//#ifdef USE_SIMD +#include "simd_conf.h" +//#endif + +class Iterator { +public: + Iterator(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); + virtual ~Iterator(); + // regional source + void run_iteration_forward(InputParams&, Grid&, IO_utils&, bool&); // run forward iteration till convergence + void run_iteration_adjoint(InputParams&, Grid&, IO_utils&, int); // run adjoint iteration till convergence + + void initialize_arrays(InputParams&, IO_utils&, Grid&, Source&, const std::string&); // initialize factors etc. + +protected: + void assign_processes_for_levels(Grid&, InputParams&); // assign intra-node processes for each sweeping level + void set_sweep_direction(int); // set sweep direction + // regional source + virtual void do_sweep(int, Grid&, InputParams&){}; // do sweeping with ordinal method + void calculate_stencil_1st_order(Grid&, int&, int&, int&); // calculate stencil for 1st order + void calculate_stencil_3rd_order(Grid&, int&, int&, int&); // calculate stencil for 3rd order + void calculate_stencil_1st_order_upwind(Grid&, int&, int&, int&); // calculate stencil for 1st order in upwind form + void calculate_boundary_nodes(Grid&); // calculate boundary values + // teleseismic source + void calculate_stencil_1st_order_tele(Grid&, int&, int&, int&); // calculate stencil for 1st order + void calculate_stencil_3rd_order_tele(Grid&, int&, int&, int&); // calculate stencil for 3rd order + void calculate_stencil_1st_order_upwind_tele(Grid&, int&, int&, int&); // calculate stencil for 1st order in upwind form + void calculate_boundary_nodes_tele(Grid&, int&, int&, int&); // calculate boundary values for teleseismic source + + void calculate_boundary_nodes_adj(Grid&, int&, int&, int&); // calculate boundary values for adjoint source (all zeros) + + // Hamiltonian calculation + inline CUSTOMREAL calc_LF_Hamiltonian(Grid&, CUSTOMREAL& ,CUSTOMREAL& , \ + CUSTOMREAL& ,CUSTOMREAL& , \ + CUSTOMREAL& ,CUSTOMREAL&, \ + int&, int&, int& ); + inline CUSTOMREAL calc_LF_Hamiltonian_tele(Grid&, CUSTOMREAL& ,CUSTOMREAL& , \ + CUSTOMREAL& ,CUSTOMREAL& , \ + CUSTOMREAL& ,CUSTOMREAL&, \ + int&, int&, int& ); + + // methods for adjoint field calculation + void init_delta_and_Tadj(Grid&, InputParams&); // initialize delta and Tadj + void init_delta_and_Tadj_density(Grid&, InputParams&); // initialize delta and Tadj_density + void fix_boundary_Tadj(Grid&); // fix boundary values for Tadj + virtual void do_sweep_adj(int, Grid&, InputParams&){}; // do sweeping with ordinal method for adjoint field + void calculate_stencil_adj(Grid&, int&, int&, int&); // calculate stencil for 1st order for adjoint field + + // grid point information + int* _nr, *_nt, *_np; // number of grid points on the direction r, theta, phi + CUSTOMREAL* _dr, *_dt, *_dp; // grid spacing on the direction r, theta, phi + int nr, nt, np; // number of grid points on the direction r, theta, phi + CUSTOMREAL dr, dt, dp; // grid spacing on the direction r, theta, phi + int st_level; // start level for sweeping + int ed_level; // end level for sweeping + std::vector< std::vector > ijk_for_this_subproc; // ijk=I2V(i,j,k) for this process (level, ijk) + int max_n_nodes_plane; // maximum number of nodes on a plane + + +#if defined USE_SIMD || defined USE_CUDA + // stencil dumps + // first orders + CUSTOMREAL *dump_c__;// center of C + // all grid data expect tau pre-load strategy (iswap, ilevel, inodes) +#if USE_AVX512 || USE_AVX || USE_NEON || defined USE_CUDA + std::vector> vv_i__j__k__, vv_ip1j__k__, vv_im1j__k__, vv_i__jp1k__, vv_i__jm1k__, vv_i__j__kp1, vv_i__j__km1; + std::vector> vv_ip2j__k__, vv_im2j__k__, vv_i__jp2k__, vv_i__jm2k__, vv_i__j__kp2, vv_i__j__km2; +#elif USE_ARM_SVE + std::vector> vv_i__j__k__, vv_ip1j__k__, vv_im1j__k__, vv_i__jp1k__, vv_i__jm1k__, vv_i__j__kp1, vv_i__j__km1; + std::vector> vv_ip2j__k__, vv_im2j__k__, vv_i__jp2k__, vv_i__jm2k__, vv_i__j__kp2, vv_i__j__km2; +#endif + std::vector> vv_iip, vv_jjt, vv_kkr; + + std::vector> vv_fac_a, vv_fac_b, vv_fac_c, vv_fac_f, vv_T0v, vv_T0r, vv_T0t, vv_T0p, vv_fun; + std::vector>vv_change; + std::vector>vv_change_bl; + + template + void preload_indices(std::vector> &vi, std::vector> &, std::vector> &, int, int, int); + template + void preload_indices_1d(std::vector> &, int, int, int); + template + std::vector> preload_array(T* a); + std::vector> preload_array_bl(bool* a); + template + void free_preloaded_array(std::vector> &vvv){ + for (int iswap = 0; iswap < 8; iswap++){ + for (auto& vv : vvv.at(iswap)) free(vv); + } + } + // flag for deallocation + bool simd_allocated = false; + bool simd_allocated_3rd = false; + +#endif // USE_SIMD || USE_CUDA + +#ifdef USE_CUDA + Grid_on_device *gpu_grid; +#endif + + + const int nswp = 8; // number of sweeping directions + int r_dirc, t_dirc, p_dirc; // sweeping directions + CUSTOMREAL sigr, sigt, sigp; // + CUSTOMREAL coe; + CUSTOMREAL wp1, pp1, wp2, pp2; + CUSTOMREAL wt1, pt1, wt2, pt2; + CUSTOMREAL wr1, pr1, wr2, pr2; + CUSTOMREAL Htau, tpT; + + CUSTOMREAL ap1, bp1, ap2, bp2, ap, bp; + CUSTOMREAL at1, bt1, at2, bt2, at, bt; + CUSTOMREAL ar1, br1, ar2, br2, ar, br; + + CUSTOMREAL bc_f2, eqn_a, eqn_b, eqn_c, eqn_Delta; + CUSTOMREAL tmp_tau, tmp_T; + CUSTOMREAL T_r, T_t, T_p, charact_r, charact_t, charact_p; + bool is_causality; + int count_cand; + std::vector canditate = std::vector(60); + + + // iteration control + int iter_count = 0; + CUSTOMREAL ini_diff_L1 = HUGE_VAL, ini_diff_Linf = HUGE_VAL; + CUSTOMREAL ini_err_L1 = HUGE_VAL, ini_err_Linf = HUGE_VAL; + CUSTOMREAL cur_diff_L1 = HUGE_VAL, cur_diff_Linf = HUGE_VAL; + CUSTOMREAL cur_err_L1 = HUGE_VAL, cur_err_Linf = HUGE_VAL; + + // teleseismic flag + bool is_teleseismic = false; + + // second run for hybrid order method + bool is_second_run = false; + +}; + +// define derived classes for each iteration scheme + + +#endif // ITERATOR_H \ No newline at end of file diff --git a/include/iterator_legacy.h b/include/iterator_legacy.h new file mode 100644 index 0000000..be4c72d --- /dev/null +++ b/include/iterator_legacy.h @@ -0,0 +1,82 @@ +#ifndef ITERATOR_legacy_H +#define ITERATOR_legacy_H + +#include "iterator.h" + + +class Iterator_legacy : public Iterator { +public: + Iterator_legacy(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +protected: + void do_sweep_adj(int, Grid&, InputParams&) override ; // do sweeping for adjoint routine + virtual void do_sweep(int, Grid&, InputParams&) {}; // do sweeping +}; + + +class Iterator_legacy_tele : public Iterator { +public: + Iterator_legacy_tele(InputParams& , Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +protected: + void do_sweep_adj(int, Grid&, InputParams&) override ; // do sweeping for adjoint routine + virtual void do_sweep(int, Grid&, InputParams&) {}; // do sweeping +}; + + +class Iterator_legacy_1st_order : public Iterator_legacy { + +public: + Iterator_legacy_1st_order(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping + +}; + +class Iterator_legacy_3rd_order : public Iterator_legacy { + +public: + Iterator_legacy_3rd_order(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); + //void run_iteration_forward(InputParams&, Grid&, IO_utils&, bool&); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping + +}; + +class Iterator_legacy_1st_order_upwind : public Iterator_legacy { + +public: + Iterator_legacy_1st_order_upwind(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_legacy_1st_order_tele : public Iterator_legacy_tele { + +public: + Iterator_legacy_1st_order_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); + //void run_iteration_forward(InputParams&, Grid&, IO_utils&, bool&); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping + +}; + +class Iterator_legacy_3rd_order_tele : public Iterator_legacy_tele { + +public: + Iterator_legacy_3rd_order_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); + //void run_iteration_forward(InputParams&, Grid&, IO_utils&, bool&); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping + +}; + +class Iterator_legacy_1st_order_upwind_tele : public Iterator_legacy_tele { + +public: + Iterator_legacy_1st_order_upwind_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); + //void run_iteration_forward(InputParams&, Grid&, IO_utils&, bool&); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping + +}; + +#endif // ITERATOR_LEGACY_H \ No newline at end of file diff --git a/include/iterator_level.h b/include/iterator_level.h new file mode 100644 index 0000000..da916e7 --- /dev/null +++ b/include/iterator_level.h @@ -0,0 +1,65 @@ +#ifndef ITERATOR_LEVEL_H +#define ITERATOR_LEVEL_H + +#include "iterator.h" + + +class Iterator_level : public Iterator { +public: + Iterator_level(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +protected: + void do_sweep_adj(int, Grid&, InputParams&) override ; // do sweeping for adjoint routine + virtual void do_sweep(int, Grid&, InputParams&) {}; // do sweeping +}; + +class Iterator_level_tele : public Iterator { +public: + Iterator_level_tele(InputParams& , Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +protected: + void do_sweep_adj(int, Grid&, InputParams&) override ; // do sweeping for adjoint routine + virtual void do_sweep(int, Grid&, InputParams&) {}; // do sweeping +}; + +class Iterator_level_1st_order : public Iterator_level { +public: + Iterator_level_1st_order(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_level_3rd_order : public Iterator_level { +public: + Iterator_level_3rd_order(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_level_1st_order_upwind : public Iterator_level { +public: + Iterator_level_1st_order_upwind(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_level_1st_order_tele : public Iterator_level_tele { +public: + Iterator_level_1st_order_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_level_3rd_order_tele : public Iterator_level_tele { +public: + Iterator_level_3rd_order_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +class Iterator_level_1st_order_upwind_tele : public Iterator_level_tele { +public: + Iterator_level_1st_order_upwind_tele(InputParams&, Grid&, Source&, IO_utils&, const std::string&, bool, bool, bool); +private: + void do_sweep(int, Grid&, InputParams&) override ; // do sweeping +}; + +#endif // ITERATOR_LEVEL_H \ No newline at end of file diff --git a/include/iterator_selector.h b/include/iterator_selector.h new file mode 100644 index 0000000..a6c0b09 --- /dev/null +++ b/include/iterator_selector.h @@ -0,0 +1,98 @@ +#ifndef ITERATOR_SELECTOR_H +#define ITERATOR_SELECTOR_H + +#include +#include "iterator.h" +#include "iterator_legacy.h" +#include "iterator_level.h" + + +void select_iterator(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic, std::unique_ptr& It, bool is_second_run) { + // initialize iterator object + + if (!is_teleseismic){ + if (IP.get_sweep_type() == SWEEP_TYPE_LEGACY) { + if (IP.get_stencil_order() == 1){ + if (IP.get_stencil_type() == UPWIND){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } else { + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } + } else if (IP.get_stencil_order() == 3){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + if (IP.get_stencil_type() == UPWIND){ + std::cout << "WARNING: Upwind Stencil type not supported, using 3rd order non upwind scheme (LF)" << std::endl; + } + } else{ + std::cout << "ERROR: Stencil order not supported" << std::endl; + exit(1); + } + } else if (IP.get_sweep_type() == SWEEP_TYPE_LEVEL){ + if (IP.get_stencil_order() == 1){ + if (IP.get_stencil_type() == UPWIND){ + // std::cout << "WARNING: Upwind Stencil type not supported, using non upwind scheme (LF)" << std::endl; + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } else { + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } + } else if (IP.get_stencil_order() == 3){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + if (IP.get_stencil_type() == UPWIND){ + std::cout << "WARNING: Upwind Stencil type not supported, using 3rd order non upwind scheme (LF)" << std::endl; + } + } else{ + std::cout << "ERROR: Stencil order not supported" << std::endl; + exit(1); + } + } else { + std::cout << "ERROR: Sweep type not supported" << std::endl; + exit(1); + } + } else { // teleseismic event + if (IP.get_sweep_type() == SWEEP_TYPE_LEGACY) { + if (IP.get_stencil_order() == 1){ + if (IP.get_stencil_type() == UPWIND){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } else { + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } + } else if (IP.get_stencil_order() == 3){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + if (IP.get_stencil_type() == UPWIND){ + std::cout << "WARNING: Upwind Stencil type not supported, using non upwind scheme (LF)" << std::endl; + } + } else{ + std::cout << "ERROR: Stencil order not supported" << std::endl; + exit(1); + } + } else if (IP.get_sweep_type() == SWEEP_TYPE_LEVEL){ + if (IP.get_stencil_order() == 1){ + if (IP.get_stencil_type() == UPWIND){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + } else { + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + std::cout << "WARNING: SWEEP_TYPE_LEVEL for non-unwind solver does not work. Index wrong currently" << std::endl; + exit(1); + } + } else if (IP.get_stencil_order() == 3){ + It = std::make_unique(IP, grid, src, io, src_name, first_init, is_teleseismic, is_second_run); + std::cout << "WARNING: SWEEP_TYPE_LEVEL for non-unwind solver does not work. Index wrong currently" << std::endl; + exit(1); + if (IP.get_stencil_type() == UPWIND){ + std::cout << "WARNING: Upwind Stencil type not supported, using non upwind scheme (LF)" << std::endl; + } + } else{ + std::cout << "ERROR: Stencil order not supported" << std::endl; + exit(1); + } + } else { + std::cout << "ERROR: Sweep type not supported" << std::endl; + exit(1); + } + } + +} + +#endif + diff --git a/include/kernel.h b/include/kernel.h new file mode 100644 index 0000000..1a11362 --- /dev/null +++ b/include/kernel.h @@ -0,0 +1,226 @@ +#ifndef KERNEL_H +#define KERNEL_H + +#include "config.h" +#include "grid.h" +#include "input_params.h" + +void calculate_sensitivity_kernel(Grid& grid, InputParams& IP, const std::string& name_sim_src){ + // calculate sensitivity kernel + + // kernel calculation will be done only by the subdom_main + if (subdom_main) { + // get the necessary parameters + int np = loc_I; + int nt = loc_J; + int nr = loc_K; + CUSTOMREAL dr = grid.dr; + CUSTOMREAL dt = grid.dt; + CUSTOMREAL dp = grid.dp; + CUSTOMREAL src_lon = IP.get_src_lon( name_sim_src); + CUSTOMREAL src_lat = IP.get_src_lat( name_sim_src); + CUSTOMREAL src_r = IP.get_src_radius(name_sim_src); + + CUSTOMREAL weight = _1_CR; + + // inner points + for (int kkr = 1; kkr < nr-1; kkr++) { + for (int jjt = 1; jjt < nt-1; jjt++) { + for (int iip = 1; iip < np-1; iip++) { + + // calculate the kernel + CUSTOMREAL Tr_km = (grid.T_loc[I2V(iip,jjt,kkr+1)] - grid.T_loc[I2V(iip,jjt,kkr-1)]) / (_2_CR * dr); + CUSTOMREAL Ttheta_km = (grid.T_loc[I2V(iip,jjt+1,kkr)] - grid.T_loc[I2V(iip,jjt-1,kkr)]) / (_2_CR * dt) / grid.r_loc_1d[kkr]; + CUSTOMREAL Tphi_km = (grid.T_loc[I2V(iip+1,jjt,kkr)] - grid.T_loc[I2V(iip-1,jjt,kkr)]) / (_2_CR * dp) / (grid.r_loc_1d[kkr]*std::cos(grid.t_loc_1d[jjt])); + + CUSTOMREAL azi_ratio = std::sqrt((my_square(Ttheta_km) + my_square(Tphi_km))/(my_square(Tr_km) + my_square(Ttheta_km) + my_square(Tphi_km))); + + // mask within one grid around the source + if ((std::abs(grid.r_loc_1d[kkr] - src_r) >= dr) || + (std::abs(grid.t_loc_1d[jjt] - src_lat) >= dt) || + (std::abs(grid.p_loc_1d[iip] - src_lon) >= dp)) { + // density of ks + grid.Ks_density_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_density_loc[I2V(iip,jjt,kkr)]; + + // density of kxi + // grid.Kxi_density_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_density_loc[I2V(iip,jjt,kkr)]; + grid.Kxi_density_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_density_loc[I2V(iip,jjt,kkr)] * azi_ratio; + + // density of keta + // grid.Keta_density_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_density_loc[I2V(iip,jjt,kkr)]; + grid.Keta_density_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_density_loc[I2V(iip,jjt,kkr)] * azi_ratio; + + + if (IP.get_update_slowness()==1){ // we need to update slowness + // Kernel w r t slowness s + grid.Ks_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_loc[I2V(iip,jjt,kkr)] * my_square(grid.fun_loc[I2V(iip,jjt,kkr)]); + } else { + grid.Ks_loc[I2V(iip,jjt,kkr)] = _0_CR; + } + + + if (IP.get_update_azi_ani()){ // we need to update azimuthal anisotropy + // Kernel w r t anisotrophy xi + if (isZero(std::sqrt(my_square(grid.xi_loc[I2V(iip,jjt,kkr)])+my_square(grid.eta_loc[I2V(iip,jjt,kkr)])))) { + grid.Kxi_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_loc[I2V(iip,jjt,kkr)] \ + * (my_square(Ttheta_km) - my_square(Tphi_km)); + + grid.Keta_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_loc[I2V(iip,jjt,kkr)] \ + * ( -_2_CR * Ttheta_km * Tphi_km ); + + } else { + grid.Kxi_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_loc[I2V(iip,jjt,kkr)] \ + * ((- GAMMA * grid.xi_loc[I2V(iip,jjt,kkr)] / \ + std::sqrt(my_square(grid.xi_loc[ I2V(iip,jjt,kkr)]) + my_square(grid.eta_loc[I2V(iip,jjt,kkr)]))) * my_square(Tr_km) \ + + my_square(Ttheta_km) + - my_square(Tphi_km)); + + grid.Keta_loc[I2V(iip,jjt,kkr)] += weight * grid.Tadj_loc[I2V(iip,jjt,kkr)] \ + * (( - GAMMA * grid.eta_loc[I2V(iip,jjt,kkr)]/ \ + std::sqrt(my_square(grid.xi_loc[I2V(iip,jjt,kkr)]) + my_square(grid.eta_loc[I2V(iip,jjt,kkr)]))) * my_square(Tr_km) \ + - _2_CR * Ttheta_km * Tphi_km ); + } + } else { + grid.Kxi_loc[I2V(iip,jjt,kkr)] = _0_CR; + grid.Keta_loc[I2V(iip,jjt,kkr)] = _0_CR; + } + + } else{ + grid.Ks_loc[I2V(iip,jjt,kkr)] += _0_CR; + grid.Kxi_loc[I2V(iip,jjt,kkr)] += _0_CR; + grid.Keta_loc[I2V(iip,jjt,kkr)] += _0_CR; + + grid.Ks_density_loc[I2V(iip,jjt,kkr)] += _0_CR; + grid.Kxi_density_loc[I2V(iip,jjt,kkr)] += _0_CR; + grid.Keta_density_loc[I2V(iip,jjt,kkr)] += _0_CR; + + } + } + } + } + + // boundary + for (int kkr = 0; kkr < nr; kkr++) { + for (int jjt = 0; jjt < nt; jjt++) { + // set Ks Kxi Keta to zero + if (grid.i_first()){ + grid.Ks_loc[I2V(0,jjt,kkr)] = _0_CR; + grid.Kxi_loc[I2V(0,jjt,kkr)] = _0_CR; + grid.Keta_loc[I2V(0,jjt,kkr)] = _0_CR; + grid.Ks_density_loc[I2V(0,jjt,kkr)] = _0_CR; + grid.Kxi_density_loc[I2V(0,jjt,kkr)] = _0_CR; + grid.Keta_density_loc[I2V(0,jjt,kkr)] = _0_CR; + } + if (grid.i_last()){ + grid.Ks_loc[I2V(np-1,jjt,kkr)] = _0_CR; + grid.Kxi_loc[I2V(np-1,jjt,kkr)] = _0_CR; + grid.Keta_loc[I2V(np-1,jjt,kkr)] = _0_CR; + grid.Ks_density_loc[I2V(np-1,jjt,kkr)] = _0_CR; + grid.Kxi_density_loc[I2V(np-1,jjt,kkr)] = _0_CR; + grid.Keta_density_loc[I2V(np-1,jjt,kkr)]= _0_CR; + } + } + } + for (int kkr = 0; kkr < nr; kkr++) { + for (int iip = 0; iip < np; iip++) { + // set Ks Kxi Keta to zero + if (grid.j_first()){ + grid.Ks_loc[I2V(iip,0,kkr)] = _0_CR; + grid.Kxi_loc[I2V(iip,0,kkr)] = _0_CR; + grid.Keta_loc[I2V(iip,0,kkr)] = _0_CR; + grid.Ks_density_loc[I2V(iip,0,kkr)] = _0_CR; + grid.Kxi_density_loc[I2V(iip,0,kkr)] = _0_CR; + grid.Keta_density_loc[I2V(iip,0,kkr)] = _0_CR; + } + if (grid.j_last()){ + grid.Ks_loc[I2V(iip,nt-1,kkr)] = _0_CR; + grid.Kxi_loc[I2V(iip,nt-1,kkr)] = _0_CR; + grid.Keta_loc[I2V(iip,nt-1,kkr)] = _0_CR; + grid.Ks_density_loc[I2V(iip,nt-1,kkr)] = _0_CR; + grid.Kxi_density_loc[I2V(iip,nt-1,kkr)] = _0_CR; + grid.Keta_density_loc[I2V(iip,nt-1,kkr)]= _0_CR; + } + } + } + for (int jjt = 0; jjt < nt; jjt++) { + for (int iip = 0; iip < np; iip++) { + // set Ks Kxi Keta to zero + if (grid.k_first()){ + grid.Ks_loc[I2V(iip,jjt,0)] = _0_CR; + grid.Kxi_loc[I2V(iip,jjt,0)] = _0_CR; + grid.Keta_loc[I2V(iip,jjt,0)] = _0_CR; + grid.Ks_density_loc[I2V(iip,jjt,0)] = _0_CR; + grid.Kxi_density_loc[I2V(iip,jjt,0)] = _0_CR; + grid.Keta_density_loc[I2V(iip,jjt,0)] = _0_CR; + } + if (grid.k_last()){ + grid.Ks_loc[I2V(iip,jjt,nr-1)] = _0_CR; + grid.Kxi_loc[I2V(iip,jjt,nr-1)] = _0_CR; + grid.Keta_loc[I2V(iip,jjt,nr-1)] = _0_CR; + grid.Ks_density_loc[I2V(iip,jjt,nr-1)] = _0_CR; + grid.Kxi_density_loc[I2V(iip,jjt,nr-1)] = _0_CR; + grid.Keta_density_loc[I2V(iip,jjt,nr-1)]= _0_CR; + } + } + } + + } // end if subdom_main +} + + +void check_kernel_density(Grid& grid, InputParams& IP) { + if(subdom_main){ + // check local kernel density positivity + for (int i_loc = 0; i_loc < loc_I; i_loc++) { + for (int j_loc = 0; j_loc < loc_J; j_loc++) { + for (int k_loc = 0; k_loc < loc_K; k_loc++) { + if (isNegative(grid.Ks_density_loc[I2V(i_loc,j_loc,k_loc)])){ + std::cout << "Warning, id_sim: " << id_sim << ", grid.Ks_density_loc[I2V(" << i_loc << "," << j_loc << "," << k_loc << ")] is less than 0, = " + << grid.Ks_density_loc[I2V(i_loc,j_loc,k_loc)] + << std::endl; + // // print the source name + // for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + // // get source info + // const std::string name_sim_src = IP.get_src_name(i_src); // get_src_name must be run by all processes + // std::cout << "id_sim: " << id_sim << ", " + // << i_src + 1 << "/" << IP.n_src_this_sim_group << ", source name: " << name_sim_src << std::endl; + // } + } + } + } + } + } +} + + +void sumup_kernels(Grid& grid) { + if(subdom_main){ + int n_grids = loc_I*loc_J*loc_K; + + allreduce_cr_sim_inplace(grid.Ks_loc, n_grids); + allreduce_cr_sim_inplace(grid.Kxi_loc, n_grids); + allreduce_cr_sim_inplace(grid.Keta_loc, n_grids); + allreduce_cr_sim_inplace(grid.Ks_density_loc, n_grids); + allreduce_cr_sim_inplace(grid.Kxi_density_loc, n_grids); + allreduce_cr_sim_inplace(grid.Keta_density_loc, n_grids); + + // share the values on boundary + grid.send_recev_boundary_data(grid.Ks_loc); + grid.send_recev_boundary_data(grid.Kxi_loc); + grid.send_recev_boundary_data(grid.Keta_loc); + grid.send_recev_boundary_data(grid.Ks_density_loc); + grid.send_recev_boundary_data(grid.Kxi_density_loc); + grid.send_recev_boundary_data(grid.Keta_density_loc); + + grid.send_recev_boundary_data_kosumi(grid.Ks_loc); + grid.send_recev_boundary_data_kosumi(grid.Kxi_loc); + grid.send_recev_boundary_data_kosumi(grid.Keta_loc); + grid.send_recev_boundary_data_kosumi(grid.Ks_density_loc); + grid.send_recev_boundary_data_kosumi(grid.Kxi_density_loc); + grid.send_recev_boundary_data_kosumi(grid.Keta_density_loc); + } + + synchronize_all_world(); +} + +#endif \ No newline at end of file diff --git a/include/lbfgs.h b/include/lbfgs.h new file mode 100644 index 0000000..0f9a642 --- /dev/null +++ b/include/lbfgs.h @@ -0,0 +1,577 @@ +#ifndef LBFGS_H +#define LBFGS_H + +#include "config.h" +#include "utils.h" +#include "grid.h" +#include "mpi_funcs.h" + +inline CUSTOMREAL volume_domain = _0_CR; // volume of the domain +inline CUSTOMREAL weight_Tikonov = _0_CR; // weight of the regularization term +inline CUSTOMREAL weight_Tikonov_ani = _0_CR; // weight of the regularization term for anisotropic regularization +inline int N_params = 3; // number of parameters to invert +inline CUSTOMREAL q_0 = _0_CR; // initial cost function +inline CUSTOMREAL qp_0 = _0_CR; // store initial p_k * grad(f_k) (descent_direction * gradient) +inline int damp_weight_fun = _1_CR; // damp weights for fun +inline int damp_weight_eta = _1_CR; // damp weights for eta +inline int damp_weight_xi = _1_CR; // damp weights for xi + + +void store_model_and_gradient(Grid& grid, int i_inv) { + + if (subdom_main && id_sim==0) { + + if (i_inv < Mbfgs){ + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_model_store_loc[ I2VLBFGS(i_inv,i,j,k)] = grid.fun_loc[I2V(i,j,k)]; + grid.Keta_model_store_loc[I2VLBFGS(i_inv,i,j,k)] = grid.eta_loc[I2V(i,j,k)]; + grid.Kxi_model_store_loc[ I2VLBFGS(i_inv,i,j,k)] = grid.xi_loc[ I2V(i,j,k)]; + grid.Ks_grad_store_loc[ I2VLBFGS(i_inv,i,j,k)] = grid.Ks_update_loc[ I2V(i,j,k)]; + grid.Keta_grad_store_loc[ I2VLBFGS(i_inv,i,j,k)] = grid.Keta_update_loc[I2V(i,j,k)]; + grid.Kxi_grad_store_loc[ I2VLBFGS(i_inv,i,j,k)] = grid.Kxi_update_loc[ I2V(i,j,k)]; + } + } + } + + } else { + // replace the current stored models and gradients + for (int istore = 0; istore < Mbfgs-1; istore++){ + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_model_store_loc[ I2VLBFGS(istore,i,j,k)] = grid.Ks_model_store_loc[ I2VLBFGS(istore+1,i,j,k)]; + grid.Keta_model_store_loc[I2VLBFGS(istore,i,j,k)] = grid.Keta_model_store_loc[I2VLBFGS(istore+1,i,j,k)]; + grid.Kxi_model_store_loc[ I2VLBFGS(istore,i,j,k)] = grid.Kxi_model_store_loc[ I2VLBFGS(istore+1,i,j,k)]; + grid.Ks_grad_store_loc[ I2VLBFGS(istore,i,j,k)] = grid.Ks_grad_store_loc[ I2VLBFGS(istore+1,i,j,k)]; + grid.Keta_grad_store_loc[ I2VLBFGS(istore,i,j,k)] = grid.Keta_grad_store_loc[ I2VLBFGS(istore+1,i,j,k)]; + grid.Kxi_grad_store_loc[ I2VLBFGS(istore,i,j,k)] = grid.Kxi_grad_store_loc[ I2VLBFGS(istore+1,i,j,k)]; + } + } + } + } + + // store new model and gradient + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_model_store_loc[ I2VLBFGS(Mbfgs-1,i,j,k)] = grid.fun_loc[I2V(i,j,k)]; + grid.Keta_model_store_loc[I2VLBFGS(Mbfgs-1,i,j,k)] = grid.eta_loc[I2V(i,j,k)]; + grid.Kxi_model_store_loc[ I2VLBFGS(Mbfgs-1,i,j,k)] = grid.xi_loc[ I2V(i,j,k)]; + grid.Ks_grad_store_loc[ I2VLBFGS(Mbfgs-1,i,j,k)] = grid.Ks_update_loc[ I2V(i,j,k)]; + grid.Keta_grad_store_loc[ I2VLBFGS(Mbfgs-1,i,j,k)] = grid.Keta_update_loc[I2V(i,j,k)]; + grid.Kxi_grad_store_loc[ I2VLBFGS(Mbfgs-1,i,j,k)] = grid.Kxi_update_loc[ I2V(i,j,k)]; + } + } + } + } + + } // end subdom main and id_sim==0 + +} + + +void calculate_descent_direction_lbfgs(Grid& grid, int i_inv) { + + if (subdom_main && id_sim==0) { + int imin = 0; + int imax = 0; + if (i_inv >= Mbfgs) + imax = Mbfgs-2; + else + imax = i_inv-1; + + CUSTOMREAL* ak_store = allocateMemory(imax-imin+1, 2000); + CUSTOMREAL* pk_store = allocateMemory(imax-imin+1, 2001); + + CUSTOMREAL* desc_wks_Ks = allocateMemory(loc_I*loc_J*loc_K, 2002); + CUSTOMREAL* desc_wks_Keta = allocateMemory(loc_I*loc_J*loc_K, 2003); + CUSTOMREAL* desc_wks_Kxi = allocateMemory(loc_I*loc_J*loc_K, 2004); + + CUSTOMREAL* wks_1_Ks = allocateMemory(loc_I*loc_J*loc_K, 2005); + CUSTOMREAL* wks_1_Keta = allocateMemory(loc_I*loc_J*loc_K, 2006); + CUSTOMREAL* wks_1_Kxi = allocateMemory(loc_I*loc_J*loc_K, 2007); + CUSTOMREAL* wks_2_Ks = allocateMemory(loc_I*loc_J*loc_K, 2008); + CUSTOMREAL* wks_2_Keta = allocateMemory(loc_I*loc_J*loc_K, 2009); + CUSTOMREAL* wks_2_Kxi = allocateMemory(loc_I*loc_J*loc_K, 2010); + + std::cout << "imax, imin: " << imax << ", " << imin << std::endl; + + // initialize + for (int i = 0; i < imax-imin+1; i++) { + ak_store[i] = 0.0; // alpha + pk_store[i] = 0.0; //rho + } + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + desc_wks_Ks[I2V(i,j,k)] = grid.Ks_grad_store_loc[ I2VLBFGS(imax+1,i,j,k)]; // d + desc_wks_Keta[I2V(i,j,k)] = grid.Keta_grad_store_loc[I2VLBFGS(imax+1,i,j,k)]; // d + desc_wks_Kxi[I2V(i,j,k)] = grid.Kxi_grad_store_loc[ I2VLBFGS(imax+1,i,j,k)]; // d + wks_1_Ks[I2V(i,j,k)] = grid.Ks_grad_store_loc[ I2VLBFGS(imax+1,i,j,k)] - grid.Ks_grad_store_loc[ I2VLBFGS(imax,i,j,k)]; + wks_1_Keta[I2V(i,j,k)] = grid.Keta_grad_store_loc[I2VLBFGS(imax+1,i,j,k)] - grid.Keta_grad_store_loc[I2VLBFGS(imax,i,j,k)]; + wks_1_Kxi[I2V(i,j,k)] = grid.Kxi_grad_store_loc[ I2VLBFGS(imax+1,i,j,k)] - grid.Kxi_grad_store_loc[ I2VLBFGS(imax,i,j,k)]; + } + } + } + + //calculate l2 norms + CUSTOMREAL norm_yiter = 0.0; + + norm_yiter += calc_l2norm(wks_1_Ks,loc_I*loc_J*loc_K); + norm_yiter += calc_l2norm(wks_1_Keta,loc_I*loc_J*loc_K); + norm_yiter += calc_l2norm(wks_1_Kxi,loc_I*loc_J*loc_K); + + CUSTOMREAL tmp = norm_yiter; + allreduce_cr_single(tmp, norm_yiter); + + for (int iinv = imax; iinv >= imin; iinv--){ + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + wks_1_Ks[I2V(i,j,k)] = grid.Ks_grad_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Ks_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_1_Keta[I2V(i,j,k)] = grid.Keta_grad_store_loc[I2VLBFGS(iinv+1,i,j,k)] - grid.Keta_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_1_Kxi[I2V(i,j,k)] = grid.Kxi_grad_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Kxi_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + + wks_2_Ks[I2V(i,j,k)] = grid.Ks_model_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Ks_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_2_Keta[I2V(i,j,k)] = grid.Keta_model_store_loc[I2VLBFGS(iinv+1,i,j,k)] - grid.Keta_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_2_Kxi[I2V(i,j,k)] = grid.Kxi_model_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Kxi_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + } + } + } + + CUSTOMREAL pk = _0_CR; + pk += dot_product(wks_1_Ks,wks_2_Ks,loc_I*loc_J*loc_K); + pk += dot_product(wks_1_Keta,wks_2_Keta,loc_I*loc_J*loc_K); + pk += dot_product(wks_1_Kxi,wks_2_Kxi,loc_I*loc_J*loc_K); + CUSTOMREAL tmp = pk; + allreduce_cr_single(tmp, pk); + pk_store[iinv] = _1_CR / pk; + + CUSTOMREAL ak = _0_CR; + ak += dot_product(wks_2_Ks, desc_wks_Ks,loc_I*loc_J*loc_K); + ak += dot_product(wks_2_Keta, desc_wks_Keta,loc_I*loc_J*loc_K); + ak += dot_product(wks_2_Kxi, desc_wks_Kxi,loc_I*loc_J*loc_K); + // print ak + if(myrank== 0) std::cout << "ak: " << ak << std::endl; + tmp = ak; + allreduce_cr_single(tmp, ak); + // print ak + if(myrank== 0) std::cout << "ak gathered: " << ak << std::endl; + ak_store[iinv] = pk_store[iinv] * ak; + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + desc_wks_Ks[I2V(i,j,k)] -= ak_store[iinv] * wks_1_Ks[I2V(i,j,k)]; + desc_wks_Keta[I2V(i,j,k)] -= ak_store[iinv] * wks_1_Keta[I2V(i,j,k)]; + desc_wks_Kxi[I2V(i,j,k)] -= ak_store[iinv] * wks_1_Kxi[I2V(i,j,k)]; + } + } + } + + } // end loop iinv + + // Nocedal's default preconditionning + CUSTOMREAL pk = _1_CR / (pk_store[imax] * norm_yiter); + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + desc_wks_Ks[I2V(i,j,k)] *= pk; + desc_wks_Keta[I2V(i,j,k)] *= pk; + desc_wks_Kxi[I2V(i,j,k)] *= pk; + } + } + } + + // print ak_store and pk_store + if (myrank == 0) { + std::cout << "ak_store: "; + for (int i = 0; i < imax+1; i++) { + std::cout << ak_store[i] << " "; + } + std::cout << std::endl; + std::cout << "pk_store: "; + for (int i = 0; i < imax+1; i++) { + std::cout << pk_store[i] << " "; + } + std::cout << std::endl; + } + + + // custom preconditionning + // diagonal preconditionner + + for (int iinv = imin; iinv <= imax; iinv++){ + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + wks_1_Ks[I2V(i,j,k)] = grid.Ks_grad_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Ks_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_1_Keta[I2V(i,j,k)] = grid.Keta_grad_store_loc[I2VLBFGS(iinv+1,i,j,k)] - grid.Keta_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_1_Kxi[I2V(i,j,k)] = grid.Kxi_grad_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Kxi_grad_store_loc[I2VLBFGS(iinv,i,j,k)]; + + wks_2_Ks[I2V(i,j,k)] = grid.Ks_model_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Ks_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_2_Keta[I2V(i,j,k)] = grid.Keta_model_store_loc[I2VLBFGS(iinv+1,i,j,k)] - grid.Keta_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + wks_2_Kxi[I2V(i,j,k)] = grid.Kxi_model_store_loc[ I2VLBFGS(iinv+1,i,j,k)] - grid.Kxi_model_store_loc[I2VLBFGS(iinv,i,j,k)]; + } + } + } + + CUSTOMREAL beta = _0_CR; + beta += dot_product(wks_1_Ks,desc_wks_Ks,loc_I*loc_J*loc_K); + beta += dot_product(wks_1_Keta,desc_wks_Keta,loc_I*loc_J*loc_K); + beta += dot_product(wks_1_Kxi,desc_wks_Kxi,loc_I*loc_J*loc_K); + CUSTOMREAL tmp = beta; + allreduce_cr_single(tmp, beta); + beta = pk_store[iinv] * beta; + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + desc_wks_Ks[I2V(i,j,k)] += (ak_store[iinv]-beta) * wks_2_Ks[I2V(i,j,k)]; + desc_wks_Keta[I2V(i,j,k)] += (ak_store[iinv]-beta) * wks_2_Keta[I2V(i,j,k)]; + desc_wks_Kxi[I2V(i,j,k)] += (ak_store[iinv]-beta) * wks_2_Kxi[I2V(i,j,k)]; + } + } + } + } + + // descent directions + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_descent_dir_loc[I2V(i,j,k)] = - _1_CR * desc_wks_Ks[I2V(i,j,k)]; + grid.Keta_descent_dir_loc[I2V(i,j,k)] = - _1_CR * desc_wks_Keta[I2V(i,j,k)]; + grid.Kxi_descent_dir_loc[I2V(i,j,k)] = - _1_CR * desc_wks_Kxi[I2V(i,j,k)]; + //grid.Ks_descent_dir_loc[I2V(i,j,k)] = desc_wks_Ks[I2V(i,j,k)]; + //grid.Keta_descent_dir_loc[I2V(i,j,k)] = desc_wks_Keta[I2V(i,j,k)]; + //grid.Kxi_descent_dir_loc[I2V(i,j,k)] = desc_wks_Kxi[I2V(i,j,k)]; + + } + } + } + + + delete [] ak_store; + delete [] pk_store; + delete [] desc_wks_Ks; + delete [] desc_wks_Keta; + delete [] desc_wks_Kxi; + delete [] wks_1_Ks; + delete [] wks_1_Keta; + delete [] wks_1_Kxi; + delete [] wks_2_Ks; + delete [] wks_2_Keta; + delete [] wks_2_Kxi; + + + } // end of subdom_main + + // share with all simultaneous run + if (subdom_main){ + broadcast_cr_inter_sim(grid.Ks_descent_dir_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_descent_dir_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Kxi_descent_dir_loc, loc_I*loc_J*loc_K, 0); + } + +} + +/* +// laplacian approximation in cartesian coordinates +inline void calc_laplacian_field(Grid& grid, CUSTOMREAL* arr_in, CUSTOMREAL* arr_res) { + if (subdom_main) { + + //CUSTOMREAL lr = 1.0; + //CUSTOMREAL lt = 1.0; + //CUSTOMREAL lp = 1.0; + + CUSTOMREAL lr = regul_lp; + CUSTOMREAL lt = regul_lt; + CUSTOMREAL lp = regul_lp; + + // calculate L(m) + for (int k = 1; k < loc_K-1; k++) { + for (int j = 1; j < loc_J-1; j++) { + for (int i = 1; i < loc_I-1; i++) { + arr_res[I2V(i,j,k)] = \ + - _2_CR * (lr+lt+lp) * arr_in[I2V(i,j,k)] \ + + lr * (arr_in[I2V(i,j,k+1)] + arr_in[I2V(i,j,k-1)]) \ + + lt * (arr_in[I2V(i,j+1,k)] + arr_in[I2V(i,j-1,k)]) \ + + lp * (arr_in[I2V(i+1,j,k)] + arr_in[I2V(i-1,j,k)]); + } + } + } + + // communicate with adjacent subdomains + grid.send_recev_boundary_data(arr_res); + } +} +*/ + +// laplacian approximation in spherical coordinates +inline void calc_laplacian_field(Grid& grid, CUSTOMREAL* d, CUSTOMREAL* arr_out){ + + if (subdom_main) { + + CUSTOMREAL lr = regul_lp; + CUSTOMREAL lt = regul_lt; + CUSTOMREAL lp = regul_lp; + CUSTOMREAL dr = grid.dr; + CUSTOMREAL dt = grid.dt; + CUSTOMREAL dp = grid.dp; + + CUSTOMREAL r,t; + + // calculate L(m) in sphercal coordinates + for (int k = 1; k < loc_K-1; k++) { + for (int j = 1; j < loc_J-1; j++) { + for (int i = 1; i < loc_I-1; i++) { + r = grid.r_loc_1d[k]; + t = grid.t_loc_1d[j]; + + // finite difference approximation of laplacian spherical coordinates + arr_out[I2V(i,j,k)] = \ + lr*lr*((d[I2V(i,j,k+1)] - _2_CR*d[I2V(i,j,k)] + d[I2V(i,j,k-1)])/(dr*dr) \ + +(_2_CR/r)*(d[I2V(i,j,k+1)]-d[I2V(i,j,k-1)])/dr) \ + + lt*lt*((_1_CR/(r*r*std::sin(t)))*(std::cos(t)*(d[I2V(i,j+1,k)]-d[I2V(i,j-1,k)])/dt \ + - (std::sin(t)*(d[I2V(i,j+1,k)]-_2_CR*d[I2V(i,j,k)]+d[I2V(i,j-1,k)])/(dt*dt)))) \ + + lp*lp*((_1_CR/(r*r*std::sin(t)*std::sin(t)))*(d[I2V(i+1,j,k)]-_2_CR*d[I2V(i,j,k)]+d[I2V(i-1,j,k)])/(dp*dp)); + + } + } + } + + // communicate with adjacent subdomains + grid.send_recev_boundary_data(arr_out); + } +} + + + + +// add 1/2 * L(m)^2 to the objective function +inline CUSTOMREAL calculate_regularization_obj(Grid& grid) { + + CUSTOMREAL regularization_term = _0_CR; + + if (subdom_main && id_sim==0) { + int ngrid = loc_I*loc_J*loc_K; + + regularization_term += weight_Tikonov * calc_l2norm(grid.fun_regularization_penalty_loc, ngrid); + regularization_term += weight_Tikonov_ani * calc_l2norm(grid.eta_regularization_penalty_loc, ngrid); + regularization_term += weight_Tikonov_ani * calc_l2norm(grid.xi_regularization_penalty_loc, ngrid); + + // gather from all subdomain + CUSTOMREAL tmp = regularization_term; + allreduce_cr_single(tmp, regularization_term); + } + + // share retularization_term with all simultaneous run (may be unnecessary) + broadcast_cr_single_inter_sim(regularization_term, 0); + + return _0_5_CR * regularization_term; + +} + + +inline void init_regularization_penalty(Grid& grid) { + if (subdom_main && id_sim==0) { + int ngrid = loc_I*loc_J*loc_K; + + // initialize regularization penalties + std::fill(grid.fun_regularization_penalty_loc, grid.fun_regularization_penalty_loc + ngrid, _0_CR); + std::fill(grid.eta_regularization_penalty_loc, grid.eta_regularization_penalty_loc + ngrid, _0_CR); + std::fill(grid.xi_regularization_penalty_loc, grid.xi_regularization_penalty_loc + ngrid, _0_CR); + std::fill(grid.fun_gradient_regularization_penalty_loc, grid.fun_gradient_regularization_penalty_loc + ngrid, _0_CR); + std::fill(grid.eta_gradient_regularization_penalty_loc, grid.eta_gradient_regularization_penalty_loc + ngrid, _0_CR); + std::fill(grid.xi_gradient_regularization_penalty_loc, grid.xi_gradient_regularization_penalty_loc + ngrid, _0_CR); + } +} + +inline void init_regulaization_penalty_with_one(Grid& grid) { + if (subdom_main && id_sim==0) { + int ngrid = loc_I*loc_J*loc_K; + + // initialize regularization penalties + std::fill(grid.fun_regularization_penalty_loc, grid.fun_regularization_penalty_loc + ngrid, _1_CR); + std::fill(grid.eta_regularization_penalty_loc, grid.eta_regularization_penalty_loc + ngrid, _1_CR); + std::fill(grid.xi_regularization_penalty_loc, grid.xi_regularization_penalty_loc + ngrid, _1_CR); + std::fill(grid.fun_gradient_regularization_penalty_loc, grid.fun_gradient_regularization_penalty_loc + ngrid, _1_CR); + std::fill(grid.eta_gradient_regularization_penalty_loc, grid.eta_gradient_regularization_penalty_loc + ngrid, _1_CR); + std::fill(grid.xi_gradient_regularization_penalty_loc, grid.xi_gradient_regularization_penalty_loc + ngrid, _1_CR); + } +} + + +inline void calculate_regularization_penalty(Grid& grid) { + if (subdom_main && id_sim==0) { + int n_grid = loc_I*loc_J*loc_K; + + CUSTOMREAL* tmp_fun = allocateMemory(n_grid, 2011); + CUSTOMREAL* tmp_eta = allocateMemory(n_grid, 2012); + CUSTOMREAL* tmp_xi = allocateMemory(n_grid, 2013); + + for (int i = 0; i < n_grid; i++) { + tmp_fun[i] = grid.fun_loc[i] - grid.fun_prior_loc[i]; + tmp_eta[i] = grid.eta_loc[i] - grid.eta_prior_loc[i]; + tmp_xi[i] = grid.xi_loc[i] - grid.xi_prior_loc[i]; + } + + init_regularization_penalty(grid); + + // calculate LL(m) on fun (Ks) + calc_laplacian_field(grid, tmp_fun, grid.fun_regularization_penalty_loc); + calc_laplacian_field(grid, grid.fun_regularization_penalty_loc, grid.fun_gradient_regularization_penalty_loc); + + // calculate LL(m) on eta (Keta) + calc_laplacian_field(grid, tmp_eta, grid.eta_regularization_penalty_loc); + calc_laplacian_field(grid, grid.eta_regularization_penalty_loc, grid.eta_gradient_regularization_penalty_loc); + + // calculate LL(m) on xi (Kxi) + calc_laplacian_field(grid, tmp_xi, grid.xi_regularization_penalty_loc); + calc_laplacian_field(grid, grid.xi_regularization_penalty_loc, grid.xi_gradient_regularization_penalty_loc); + + for (int i = 0; i < n_grid; i++){ + // calculate gradient_regularization_penalty first for avoiding using overwrited value in regularization_penalty + grid.fun_gradient_regularization_penalty_loc[i] = damp_weight_fun*damp_weight_fun*(tmp_fun[i] - _2_CR * grid.fun_regularization_penalty_loc[i] + grid.fun_gradient_regularization_penalty_loc[i]); + grid.eta_gradient_regularization_penalty_loc[i] = damp_weight_eta*damp_weight_eta*(tmp_eta[i] - _2_CR * grid.eta_regularization_penalty_loc[i] + grid.eta_gradient_regularization_penalty_loc[i]); + grid.xi_gradient_regularization_penalty_loc[i] = damp_weight_xi *damp_weight_xi *(tmp_xi[i] - _2_CR * grid.xi_regularization_penalty_loc[i] + grid.xi_gradient_regularization_penalty_loc[i]); + } + + grid.send_recev_boundary_data(grid.fun_gradient_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.eta_gradient_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.xi_gradient_regularization_penalty_loc); + + for (int i = 0; i < n_grid; i++){ + // calculate gradient_regularization_penalty first for avoiding using overwrited value in regularization_penalty + + grid.fun_regularization_penalty_loc[i] = damp_weight_fun*(tmp_fun[i] - grid.fun_regularization_penalty_loc[i]); + grid.eta_regularization_penalty_loc[i] = damp_weight_eta*(tmp_eta[i] - grid.eta_regularization_penalty_loc[i]); + grid.xi_regularization_penalty_loc[i] = damp_weight_xi *(tmp_xi[i] - grid.xi_regularization_penalty_loc[i]); + } + + grid.send_recev_boundary_data(grid.fun_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.eta_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.xi_regularization_penalty_loc); + + delete [] tmp_fun; + delete [] tmp_eta; + delete [] tmp_xi; + } +} + + +// add grad(L(m)) to gradient +inline void add_regularization_grad(Grid& grid) { + if (subdom_main){ + if(id_sim==0){ + // add LL(m) to gradient + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + + //grid.fun_gradient_regularization_penalty_loc[I2V(i,j,k)] /= Linf_Ks; + //grid.eta_gradient_regularization_penalty_loc[I2V(i,j,k)] /= Linf_Keta; + //grid.xi_gradient_regularization_penalty_loc[I2V(i,j,k)] /= Linf_Kxi; + + grid.Ks_update_loc[I2V(i,j,k)] += weight_Tikonov * grid.fun_gradient_regularization_penalty_loc[I2V(i,j,k)]; + grid.Keta_update_loc[I2V(i,j,k)] += weight_Tikonov_ani * grid.eta_gradient_regularization_penalty_loc[I2V(i,j,k)]; + grid.Kxi_update_loc[I2V(i,j,k)] += weight_Tikonov_ani * grid.xi_gradient_regularization_penalty_loc[I2V(i,j,k)]; + } + } + } + + grid.send_recev_boundary_data(grid.Ks_update_loc); + grid.send_recev_boundary_data(grid.Keta_update_loc); + grid.send_recev_boundary_data(grid.Kxi_update_loc); + + }// end id_sim==0 + + + // share with all simultaneous run (may be unnecessary) + broadcast_cr_inter_sim(grid.Ks_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Kxi_update_loc, loc_I*loc_J*loc_K, 0); + + }// end subdom_main +} + + +// compute initial guess for step length to try for line search +void initial_guess_step(Grid& grid, CUSTOMREAL& step_length, CUSTOMREAL SC_VAL) { + // find the max value in descent_direction + CUSTOMREAL max_val = _0_CR, max_val_all = _0_CR; + const CUSTOMREAL max_relative_pert = 0.02; + + if(subdom_main && id_sim==0) { + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + if (std::abs(grid.Ks_descent_dir_loc[I2V(i,j,k)] ) > max_val) max_val = std::abs(grid.Ks_descent_dir_loc[I2V(i,j,k)]); + if (std::abs(grid.Keta_descent_dir_loc[I2V(i,j,k)]) > max_val) max_val = std::abs(grid.Keta_descent_dir_loc[I2V(i,j,k)]); + if (std::abs(grid.Kxi_descent_dir_loc[I2V(i,j,k)] ) > max_val) max_val = std::abs(grid.Kxi_descent_dir_loc[I2V(i,j,k)]); + } + } + } + + // reduce + allreduce_cr_single_max(max_val, max_val_all); + + // debug print max_val + std::cout << "max_val: " << max_val_all << std::endl; + + // step size + step_length = max_relative_pert / SC_VAL / max_val_all; + } + + // broadcast to all simultaneous run (may be unnecessary) + if (subdom_main) + broadcast_cr_single_inter_sim(step_length, 0); + +} + + +inline CUSTOMREAL compute_volume_domain(Grid& grid) { + CUSTOMREAL volume = _0_CR; + + if (subdom_main && id_sim==0) { + volume += calc_l2norm(grid.fun_regularization_penalty_loc, loc_I*loc_J*loc_K); + volume += calc_l2norm(grid.eta_regularization_penalty_loc, loc_I*loc_J*loc_K); + volume += calc_l2norm(grid.xi_regularization_penalty_loc, loc_I*loc_J*loc_K); + + // reduce + allreduce_cr_single(volume, volume); + } + + // broadcast to all simultaneous run (may be unnecessary) + broadcast_cr_single_inter_sim(volume, 0); + + return volume; +} + + +inline void compute_damp_weights(const Grid& grid) { + // (size/sum)**2 + + if(subdom_main){ + CUSTOMREAL sum_fun = std::accumulate(grid.fun_prior_loc, grid.fun_prior_loc + loc_I*loc_J*loc_K, _0_CR); + //CUSTOMREAL sum_eta = std::accumulate(grid.eta_prior_loc, grid.eta_prior_loc + loc_I*loc_J*loc_K, _0_CR); // do not use + //CUSTOMREAL sum_xi = std::accumulate(grid.xi_prior_loc, grid.xi_prior_loc + loc_I*loc_J*loc_K, _0_CR); + + allreduce_cr_single(sum_fun, sum_fun); + + damp_weight_fun = (volume_domain / sum_fun)*(volume_domain / sum_fun); + //damp_weight_eta = (volume / sum_eta)*(volume / sum_eta); + //damp_weight_xi = (volume / sum_xi)*(volume / sum_xi); + damp_weight_eta = _1_CR; + damp_weight_xi = _1_CR; + + } + +} + +#endif \ No newline at end of file diff --git a/include/main_routines_calling.h b/include/main_routines_calling.h new file mode 100644 index 0000000..98c2208 --- /dev/null +++ b/include/main_routines_calling.h @@ -0,0 +1,923 @@ +#ifndef MAIN_ROUTINES_CALLING_H +#define MAIN_ROUTINES_CALLING_H + +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "main_routines_inversion_mode.h" +#include "model_optimization_routines.h" +#include "main_routines_earthquake_relocation.h" +#include "iterator_selector.h" +#include "iterator.h" +#include "iterator_legacy.h" +#include "iterator_level.h" +#include "source.h" +#include "receiver.h" +#include "kernel.h" +#include "model_update.h" +#include "lbfgs.h" +#include "objective_function_utils.h" +#include "timer.h" +#include "oneD_inversion.h" + +// run forward-only or inversion mode +inline void run_forward_only_or_inversion(InputParams &IP, Grid &grid, IO_utils &io) { + + // for check if the current source is the first source + bool first_src = true; + + if(myrank == 0) + std::cout << "id_sim: " << id_sim << ", size of src_map: " << IP.src_map.size() << std::endl; + + // estimate running time + Timer timer("Forward_or_inversion", true); + + // prepare objective_function file + std::ofstream out_main; // close() is not mandatory + prepare_header_line(IP, out_main); + + if (id_sim==0) { + io.prepare_grid_inv_xdmf(0); + + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + io.write_vel(grid, 0); + io.write_xi( grid, 0); + io.write_eta(grid, 0); + //io.write_zeta(grid, i_inv); // TODO + + if (IP.get_verbose_output_level()){ + io.write_a(grid, 0); + io.write_b(grid, 0); + io.write_c(grid, 0); + io.write_f(grid, 0); + io.write_fun(grid, 0); + } + + // // output model_parameters_inv_0000.dat + // if (IP.get_if_output_model_dat()) + // io.write_concerning_parameters(grid, 0, IP); + } + + + // output station correction file (only for teleseismic differential data) + IP.write_station_correction_file(0); + + synchronize_all_world(); + + ///////////////////// + // loop for inversion + ///////////////////// + + bool line_search_mode = false; // if true, run_simulation_one_step skips adjoint simulation and only calculates objective function value + + // objective function for all src + CUSTOMREAL v_obj = 0.0, old_v_obj = 0.0; + std::vector v_obj_misfit(20, 0.0); + + for (int i_inv = 0; i_inv < IP.get_max_iter_inv(); i_inv++) { + + if(myrank == 0 && id_sim ==0){ + std::cout << "iteration " << i_inv << " starting ... " << std::endl; + } + + old_v_obj = v_obj; + + // prepare inverstion iteration group in xdmf file + io.prepare_grid_inv_xdmf(i_inv); + + /////////////////////////////////////////////////////// + // run (forward and adjoint) simulation for each source + /////////////////////////////////////////////////////// + + // run forward and adjoint simulation and calculate current objective function value and sensitivity kernel for all sources + line_search_mode = false; + // skip for the mode with sub-iteration + if (i_inv > 0 && optim_method != GRADIENT_DESCENT) { + } else { + bool is_save_T = false; + v_obj_misfit = run_simulation_one_step(IP, grid, io, i_inv, first_src, line_search_mode, is_save_T); + v_obj = v_obj_misfit[0]; + } + + // wait for all processes to finish + synchronize_all_world(); + + // check if v_obj is nan + if (std::isnan(v_obj)) { + if (myrank == 0) + std::cout << "v_obj is nan, stop inversion" << std::endl; + // stop inversion + break; + } + + // output src rec file with the result arrival times + if (IP.get_if_output_in_process_data() || i_inv == IP.get_max_iter_inv()-1 || i_inv==0) { + IP.write_src_rec_file(i_inv,0); + } + + /////////////// + // model update + /////////////// + if(myrank == 0 && id_sim ==0) + std::cout << "model update starting ... " << std::endl; + + if (IP.get_run_mode() == DO_INVERSION) { + if (optim_method == GRADIENT_DESCENT) + model_optimize(IP, grid, io, i_inv, v_obj, old_v_obj, first_src, out_main); + else if (optim_method == HALVE_STEPPING_MODE) + v_obj_misfit = model_optimize_halve_stepping(IP, grid, io, i_inv, v_obj, first_src, out_main); + else if (optim_method == LBFGS_MODE) { + bool found_next_step = model_optimize_lbfgs(IP, grid, io, i_inv, v_obj, first_src, out_main); + if (!found_next_step) + goto end_of_inversion; + } + } + + // output station correction file (only for teleseismic differential data) + IP.write_station_correction_file(i_inv + 1); + + // output objective function + write_objective_function(IP, i_inv, v_obj_misfit, out_main, "model update"); + + // since model is update. The written traveltime field should be discraded. + // initialize is_T_written_into_file + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + const std::string name_sim_src = IP.get_src_name(i_src); + + if (proc_store_srcrec) // only proc_store_srcrec has the src_map object + IP.src_map[name_sim_src].is_T_written_into_file = false; + } + + // output updated model + if (id_sim==0) { + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + if (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2){ + io.write_vel(grid, i_inv+1); + io.write_xi( grid, i_inv+1); + io.write_eta(grid, i_inv+1); + } + //io.write_zeta(grid, i_inv); // TODO + + if (IP.get_verbose_output_level()){ + io.write_a(grid, i_inv+1); + io.write_b(grid, i_inv+1); + io.write_c(grid, i_inv+1); + io.write_f(grid, i_inv+1); + io.write_fun(grid, i_inv+1); + } + + // // output model_parameters_inv_0000.dat + // if (IP.get_if_output_model_dat() + // && (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2)) + // io.write_concerning_parameters(grid, i_inv + 1, IP); + + } + + // writeout temporary xdmf file + io.update_xdmf_file(); + + // wait for all processes to finish + synchronize_all_world(); + + + // estimate running time + CUSTOMREAL time_elapsed = timer.get_t(); + if (id_sim == 0 && myrank == 0 && i_inv < IP.get_max_iter_inv()-1) { + const time_t end_time_estimated = time_elapsed / (i_inv + 1) * (IP.get_max_iter_inv() - i_inv - 1) + timer.get_start(); + auto will_run_time = (int)(time_elapsed/(i_inv + 1) * (IP.get_max_iter_inv() - i_inv - 1)); + + std::cout << std::endl; + std::cout << "The program begins at " << timer.get_start_t() << std::endl; + std::cout << "Iteration (" << i_inv + 1 << "/" << IP.get_max_iter_inv() << ") finished at " << time_elapsed << " seconds" << std::endl; + std::cout << i_inv + 1 << " iterations run " << timer.get_t() << " seconds, the rest of " << IP.get_max_iter_inv() - i_inv - 1 << " iterations require " << will_run_time << " seconds." << std::endl; + std::cout << "The program is estimated to stop at " << timer.get_utc_from_time_t(end_time_estimated) << std::endl; + std::cout << std::endl; + } + + // output current state of the model + if (IP.get_if_output_final_model()) { + // io.write_final_model(grid, IP); + io.write_merged_model(grid, IP, "final_model.h5"); + } + if (IP.get_if_output_middle_model()) { + std::string tmp_fname = "middle_model_step_" + int2string_zero_fill(i_inv + 1) + ".h5"; + io.write_merged_model(grid, IP, tmp_fname); + } + + + } // end loop inverse + +end_of_inversion: + + // close xdmf file + io.finalize_data_output_file(); + + timer.stop_timer(); + if (id_sim == 0 && myrank == 0) { + std::cout << std::endl; + std::cout << "The program begin at " << timer.get_start_t() << std::endl; + std::cout << "Forward_or_inversion end at " << timer.get_end_t() << std::endl; + std::cout << "It has run " << timer.get_elapsed_t() << " seconds in total." << std::endl; + std::cout << std::endl; + } +} + + +// run earthquake relocation mode +inline void run_earthquake_relocation(InputParams& IP, Grid& grid, IO_utils& io) { + + Receiver recs; + + // calculate traveltime for each receiver (swapped from source) and write in output file + calculate_traveltime_for_all_src_rec(IP, grid, io); + + // prepare output for iteration status + std::ofstream out_main; // close() is not mandatory + prepare_header_line(IP, out_main); + + // objective function and its gradient + CUSTOMREAL v_obj = 999999999.0; + + int i_iter = 0; + + std::vector v_obj_misfit; + + // iterate + while (true) { + + v_obj = 0.0; + + // calculate gradient of objective function at sources + v_obj_misfit = calculate_gradient_objective_function(IP, grid, io, i_iter); + v_obj = v_obj_misfit[0]; + + // update source location + recs.update_source_location(IP, grid); + + synchronize_all_world(); + + // check convergence + bool finished = false; + + if (subdom_main && id_subdomain==0) { + if (i_iter >= N_ITER_MAX_SRC_RELOC){ + std::cout << "Finished relocation because iteration number exceeds the maximum " << N_ITER_MAX_SRC_RELOC << std::endl; + finished = true; + } + allreduce_bool_single_inplace_sim(finished); //LAND + } + + synchronize_all_world(); + + // check if all processes have finished + broadcast_bool_inter_and_intra_sim(finished, 0); + + synchronize_all_world(); + + // output location information + if(id_sim == 0 && myrank == 0){ + // write objective function + std::cout << "iteration: " << i_iter << ", objective function: " << v_obj << std::endl; + } + + // write objective functions + write_objective_function(IP, i_iter, v_obj_misfit, out_main, "relocation"); + + // write out new src_rec_file + if (IP.get_if_output_in_process_data() || i_iter == N_ITER_MAX_SRC_RELOC-1 || i_iter==0){ + IP.write_src_rec_file(0,i_iter); + } + + // modify the receiver's location for output + IP.modify_swapped_source_location(); + + + if (finished) + break; + + // new iteration + i_iter++; + } + + // modify the receiver's location + IP.modify_swapped_source_location(); + // write out new src_rec_file + IP.write_src_rec_file(0,i_iter); + // close xdmf file + io.finalize_data_output_file(); + +} + + +// run earthquake relocation mode +inline void run_inversion_and_relocation(InputParams& IP, Grid& grid, IO_utils& io) { + + Timer timer("Inv_and_reloc", true); + + ///////////////////// + // preparation of model update + ///////////////////// + + // for check if the current source is the first source + bool first_src = true; + + if(myrank == 0) + std::cout << "id_sim: " << id_sim << ", size of src_map: " << IP.src_map.size() << std::endl; + + // prepare objective_function file + std::ofstream out_main; // close() is not mandatory + prepare_header_line(IP, out_main); + + if (id_sim==0) { + // prepare inverstion iteration group in xdmf file + io.prepare_grid_inv_xdmf(0); + + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + io.write_vel(grid, 0); + io.write_xi( grid, 0); + io.write_eta(grid, 0); + //io.write_zeta(grid, i_inv); // TODO + + if (IP.get_verbose_output_level()){ + io.write_a(grid, 0); + io.write_b(grid, 0); + io.write_c(grid, 0); + io.write_f(grid, 0); + io.write_fun(grid, 0); + } + + // // output model_parameters_inv_0000.dat + // if (IP.get_if_output_model_dat()) + // io.write_concerning_parameters(grid, 0, IP); + } + + // output station correction file (only for teleseismic differential data) + IP.write_station_correction_file(0); + + synchronize_all_world(); + + bool line_search_mode = false; // if true, run_simulation_one_step skips adjoint simulation and only calculates objective function value + + ///////////////////// + // preparation of relocation + ///////////////////// + + Receiver recs; + + ///////////////////// + // initializae objective function + ///////////////////// + + CUSTOMREAL v_obj = 0.0, old_v_obj = 10000000000.0; + std::vector v_obj_misfit(20, 0.0); + + if (inv_mode == ITERATIVE){ + + ///////////////////// + // main loop for model update and relocation + ///////////////////// + + int model_update_step = 0; + int relocation_step = 0; + + for (int i_loop = 0; i_loop < IP.get_max_loop_mode0(); i_loop++){ + ///////////////////// + // stage 1, update model parameters + ///////////////////// + + for (int one_loop_i_inv = 0; one_loop_i_inv < IP.get_model_update_N_iter(); one_loop_i_inv++){ + // the actural step index of model update + int i_inv = i_loop * IP.get_model_update_N_iter() + one_loop_i_inv; + + if(myrank == 0 && id_sim ==0){ + std::cout << std::endl; + std::cout << "loop " << i_loop+1 << ", model update iteration " << one_loop_i_inv+1 + << " ( the " << i_inv+1 << "-th model update) starting ... " << std::endl; + std::cout << std::endl; + } + + + // prepare inverstion iteration group in xdmf file + io.prepare_grid_inv_xdmf(i_inv); + + /////////////////////////////////////////////////////// + // run (forward and adjoint) simulation for each source + /////////////////////////////////////////////////////// + + // run forward and adjoint simulation and calculate current objective function value and sensitivity kernel for all sources + line_search_mode = false; + // skip for the mode with sub-iteration + if (i_inv > 0 && optim_method != GRADIENT_DESCENT) { + } else { + bool is_save_T = false; + v_obj_misfit = run_simulation_one_step(IP, grid, io, i_inv, first_src, line_search_mode, is_save_T); + v_obj = v_obj_misfit[0]; + } + + // wait for all processes to finish + synchronize_all_world(); + + // check if v_obj is nan + if (std::isnan(v_obj)) { + if (myrank == 0) + std::cout << "v_obj is nan, stop inversion" << std::endl; + // stop inversion + break; + } + + /////////////// + // model update + /////////////// + + if (optim_method == GRADIENT_DESCENT) + model_optimize(IP, grid, io, i_inv, v_obj, old_v_obj, first_src, out_main); + else if (optim_method == HALVE_STEPPING_MODE) + v_obj_misfit = model_optimize_halve_stepping(IP, grid, io, i_inv, v_obj, first_src, out_main); + else if (optim_method == LBFGS_MODE) { + bool found_next_step = model_optimize_lbfgs(IP, grid, io, i_inv, v_obj, first_src, out_main); + + if (!found_next_step) + break; + } + + // define old_v_obj + old_v_obj = v_obj; + + // output objective function + write_objective_function(IP, i_inv, v_obj_misfit, out_main, "model update"); + + // since model is update. The written traveltime field should be discraded. + // initialize is_T_written_into_file + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + const std::string name_sim_src = IP.get_src_name(i_src); + + if (proc_store_srcrec) // only proc_store_srcrec has the src_map object + IP.src_map[name_sim_src].is_T_written_into_file = false; + } + + // output updated model + if (id_sim==0) { + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + if (IP.get_if_output_in_process() || i_inv >= IP.get_max_loop_mode0()*IP.get_model_update_N_iter() - 2){ + io.write_vel(grid, i_inv+1); + io.write_xi( grid, i_inv+1); + io.write_eta(grid, i_inv+1); + } + //io.write_zeta(grid, i_inv); // TODO + + if (IP.get_verbose_output_level()){ + io.write_a(grid, i_inv+1); + io.write_b(grid, i_inv+1); + io.write_c(grid, i_inv+1); + io.write_f(grid, i_inv+1); + io.write_fun(grid, i_inv+1); + } + + // // output model_parameters_inv_0000.dat + // if (IP.get_if_output_model_dat() + // && (IP.get_if_output_in_process() || i_inv >= IP.get_max_loop_mode0()*IP.get_model_update_N_iter() - 2)) + // io.write_concerning_parameters(grid, i_inv + 1, IP); + + } // end output updated model + + // writeout temporary xdmf file + io.update_xdmf_file(); + + // write src rec files + if (IP.get_if_output_in_process_data()){ + IP.write_src_rec_file(model_update_step,relocation_step); + } else if (i_inv == IP.get_max_loop_mode0() * IP.get_model_update_N_iter()-1 || i_inv==0) { + IP.write_src_rec_file(model_update_step,relocation_step); + } + model_update_step += 1; + + // wait for all processes to finish + synchronize_all_world(); + + // output current state of the model + if (IP.get_if_output_final_model()) { + // io.write_final_model(grid, IP); + io.write_merged_model(grid, IP, "final_model.h5"); + } + if (IP.get_if_output_middle_model()) { + std::string tmp_fname = "middle_model_step_" + int2string_zero_fill(i_inv + 1) + ".h5"; + io.write_merged_model(grid, IP, tmp_fname); + } + + } // end model update in one loop + + + ///////////////////// + // stage 2, update earthquake locations + ///////////////////// + + if(myrank == 0 && id_sim ==0){ + std::cout << std::endl; + std::cout << "loop " << i_loop+1 << ", computing traveltime field for relocation" << std::endl; + std::cout << std::endl; + } + + // calculate traveltime for each receiver (swapped from source) and write in output file + if (IP.get_relocation_N_iter() > 0) // we really do relocation + calculate_traveltime_for_all_src_rec(IP, grid, io); + + + // initilize all earthquakes + if (proc_store_srcrec){ + for(auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++){ + iter->second.is_stop = false; + } + } + + // iterate + for (int one_loop_i_iter = 0; one_loop_i_iter < IP.get_relocation_N_iter(); one_loop_i_iter++){ + int i_iter = i_loop * IP.get_relocation_N_iter() + one_loop_i_iter; + + if(myrank == 0 && id_sim ==0){ + std::cout << std::endl; + std::cout << "loop " << i_loop+1 << ", relocation iteration " << one_loop_i_iter+1 + << " ( the " << i_iter+1 << "-th relocation) starting ... " << std::endl; + std::cout << std::endl; + } + + + // calculate gradient of objective function at sources + v_obj_misfit = calculate_gradient_objective_function(IP, grid, io, i_iter); + v_obj = v_obj_misfit[0]; + + // update source location + recs.update_source_location(IP, grid); + + synchronize_all_world(); + + + // output location information + if(id_sim == 0 && myrank == 0){ + std::cout << "objective function: " << v_obj << std::endl; + } + + // write objective functions + write_objective_function(IP, i_iter, v_obj_misfit, out_main, "relocation"); + + // write out new src_rec_file + if (IP.get_if_output_in_process_data()){ + IP.write_src_rec_file(model_update_step,relocation_step); + } else if (i_iter == IP.get_max_loop_mode0() * IP.get_relocation_N_iter()-1 || i_iter==0) { + IP.write_src_rec_file(model_update_step,relocation_step); + } + + // modify the receiver's location for output + IP.modify_swapped_source_location(); + + relocation_step += 1; + } // end relocation loop + + grid.rejuvenate_abcf(); // (a,b/r^2,c/(r^2*cos^2),f/(r^2*cos)) -> (a,b,c,f) + + // estimate running time + CUSTOMREAL time_elapsed = timer.get_t(); + if (id_sim == 0 && myrank == 0 && i_loop < IP.get_max_loop_mode0()-1) { + const time_t end_time_estimated = time_elapsed / (i_loop + 1) * (IP.get_max_loop_mode0() - i_loop - 1) + timer.get_start(); + auto will_run_time = (int)(time_elapsed/(i_loop + 2) * (IP.get_max_loop_mode0() - i_loop - 1)); + + std::cout << std::endl; + std::cout << "The program begins at " << timer.get_start_t() << std::endl; + std::cout << "Loop (" << i_loop + 1 << "/" << IP.get_max_loop_mode0() << ") finished at " << time_elapsed << " seconds" << std::endl; + std::cout << i_loop + 1 << " loop run " << timer.get_t() << " seconds, the rest of " << IP.get_max_loop_mode0() - i_loop - 1 << " iterations require " << will_run_time << " seconds." << std::endl; + std::cout << "The program is estimated to stop at " << timer.get_utc_from_time_t(end_time_estimated) << std::endl; + std::cout << std::endl; + } + + } // end loop for model update and relocation + } else if (inv_mode == SIMULTANEOUS) { + + for (int i_loop = 0; i_loop < IP.get_max_loop_mode1(); i_loop++){ + + if(myrank == 0 && id_sim ==0){ + std::cout << std::endl; + std::cout << "loop " << i_loop+1 << ", model update and relocation starting ... " << std::endl; + std::cout << std::endl; + } + + ///////////////////// + // stage 1, update model parameters + ///////////////////// + + + // prepare inversion iteration group in xdmf file + io.prepare_grid_inv_xdmf(i_loop); + + /////////////////////////////////////////////////////// + // run (forward and adjoint) simulation for each source + /////////////////////////////////////////////////////// + + // run forward and adjoint simulation and calculate current objective function value and sensitivity kernel for all sources + line_search_mode = false; + // skip for the mode with sub-iteration + if (i_loop > 0 && optim_method != GRADIENT_DESCENT) { + } else { + bool is_save_T = true; + v_obj_misfit = run_simulation_one_step(IP, grid, io, i_loop, first_src, line_search_mode, is_save_T); + v_obj = v_obj_misfit[0]; + } + + // wait for all processes to finish + synchronize_all_world(); + + // check if v_obj is nan + if (std::isnan(v_obj)) { + if (myrank == 0) + std::cout << "v_obj is nan, stop inversion" << std::endl; + + // stop inversion + break; + } + + /////////////// + // model update + /////////////// + + if (optim_method == GRADIENT_DESCENT) + model_optimize(IP, grid, io, i_loop, v_obj, old_v_obj, first_src, out_main); + else if (optim_method == HALVE_STEPPING_MODE) + v_obj_misfit = model_optimize_halve_stepping(IP, grid, io, i_loop, v_obj, first_src, out_main); + else if (optim_method == LBFGS_MODE) { + bool found_next_step = model_optimize_lbfgs(IP, grid, io, i_loop, v_obj, first_src, out_main); + + if (!found_next_step) + break; + } + + + // output objective function (model update part) + write_objective_function(IP, i_loop, v_obj_misfit, out_main, "model update"); + + ///////////////////// + // stage 2, update earthquake locations + ///////////////////// + + + // initilize all earthquakes + if (proc_store_srcrec){ + for(auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++){ + iter->second.is_stop = false; + } + } + + // calculate gradient of objective function at sources + v_obj_misfit = calculate_gradient_objective_function(IP, grid, io, i_loop); + + // update source location + recs.update_source_location(IP, grid); + + synchronize_all_world(); + + // output objective function (relocation part) + write_objective_function(IP, i_loop, v_obj_misfit, out_main, "relocation"); + + + // define old_v_obj + old_v_obj = v_obj; + + + // since model is update. The written traveltime field should be discraded. + // initialize is_T_written_into_file + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + const std::string name_sim_src = IP.get_src_name(i_src); + + if (proc_store_srcrec) // only proc_store_srcrec has the src_map object + IP.src_map[name_sim_src].is_T_written_into_file = false; + } + + // output updated model + if (id_sim==0) { + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + if (IP.get_if_output_in_process() || i_loop >= IP.get_max_loop_mode1() - 2){ + io.write_vel(grid, i_loop+1); + io.write_xi( grid, i_loop+1); + io.write_eta(grid, i_loop+1); + } + //io.write_zeta(grid, i_inv); // TODO + + if (IP.get_verbose_output_level()){ + io.write_a(grid, i_loop+1); + io.write_b(grid, i_loop+1); + io.write_c(grid, i_loop+1); + io.write_f(grid, i_loop+1); + io.write_fun(grid, i_loop+1); + } + + // // output model_parameters_inv_0000.dat + // if (IP.get_if_output_model_dat() + // && (IP.get_if_output_in_process() || i_loop >= IP.get_max_loop_mode1() - 2)) + // io.write_concerning_parameters(grid, i_loop + 1, IP); + + } // end output updated model + + // writeout temporary xdmf file + io.update_xdmf_file(); + + // write src rec files + if (IP.get_if_output_in_process_data()){ + IP.write_src_rec_file(i_loop,i_loop); + } else if (i_loop == IP.get_max_loop_mode1() -1 || i_loop==0) { + IP.write_src_rec_file(i_loop,i_loop); + } + + // modify the receiver's location for output + IP.modify_swapped_source_location(); + + // wait for all processes to finish + synchronize_all_world(); + + grid.rejuvenate_abcf(); // (a,b/r^2,c/(r^2*cos^2),f/(r^2*cos)) -> (a,b,c,f) + + // estimate running time + CUSTOMREAL time_elapsed = timer.get_t(); + if (id_sim == 0 && myrank == 0 && i_loop < IP.get_max_loop_mode1()-1) { + const time_t end_time_estimated = time_elapsed / (i_loop + 1) * (IP.get_max_loop_mode1() - i_loop - 1) + timer.get_start(); + auto will_run_time = (int)(time_elapsed/(i_loop + 2) * (IP.get_max_loop_mode1() - i_loop - 1)); + + std::cout << std::endl; + std::cout << "The program begins at " << timer.get_start_t() << std::endl; + std::cout << "Loop (" << i_loop + 1 << "/" << IP.get_max_loop_mode1() << ") finished at " << time_elapsed << " seconds" << std::endl; + std::cout << i_loop + 1 << " loop run " << timer.get_t() << " seconds, the rest of " << IP.get_max_loop_mode1() - i_loop - 1 << " iterations require " << will_run_time << " seconds." << std::endl; + std::cout << "The program is estimated to stop at " << timer.get_utc_from_time_t(end_time_estimated) << std::endl; + std::cout << std::endl; + } + + // output current state of the model + if (IP.get_if_output_final_model()) { + // io.write_final_model(grid, IP); + io.write_merged_model(grid, IP, "final_model.h5"); + } + if (IP.get_if_output_middle_model()) { + std::string tmp_fname = "middle_model_step_" + int2string_zero_fill(i_loop + 1) + ".h5"; + io.write_merged_model(grid, IP, tmp_fname); + } + } // end loop for model update and relocation + + } else { + std::cout << "Error: inv_mode is not defined" << std::endl; + exit(1); + } + // close xdmf file + io.finalize_data_output_file(); + + timer.stop_timer(); + if (id_sim == 0 && myrank == 0) { + std::cout << std::endl; + std::cout << "The program begin at " << timer.get_start_t(); + std::cout << "Inv_and_reloc end at " << timer.get_end_t(); + std::cout << "It has run " << timer.get_elapsed_t() << " seconds in total." << std::endl; + std::cout << std::endl; + } + +} + + +// run 1D inversion mode +inline void run_1d_inversion(InputParams& IP, Grid& grid, IO_utils& io) { + OneDInversion oneDInv(IP, grid); + + if(myrank == 0) + std::cout << "id_sim: " << id_sim << ", size of src_map: " << IP.src_map.size() << std::endl; + + // estimate running time + Timer timer("1D_inversion", true); + + // prepare objective_function file + std::ofstream out_main; // close() is not mandatory + prepare_header_line(IP, out_main); + + synchronize_all_world(); + + ///////////////////// + // loop for inversion + ///////////////////// + + // objective function for all src + std::vector v_obj_misfit(20, 0.0); + + for (int i_inv = 0; i_inv < IP.get_max_iter_inv(); i_inv++) { + if(myrank == 0 && id_sim ==0){ + std::cout << "iteration " << i_inv << " starting ... " << std::endl; + } + + // prepare inverstion iteration group in xdmf file + io.prepare_grid_inv_xdmf(i_inv); + + /////////////////////////////////////////////////////// + // run (forward and adjoint) simulation for each source + /////////////////////////////////////////////////////// + v_obj_misfit = oneDInv.run_simulation_one_step_1dinv(IP, io, i_inv); + + // wait for all processes to finish + synchronize_all_world(); + + // check if v_obj is nan + if (std::isnan(v_obj_misfit[0])) { + if (myrank == 0) + std::cout << "v_obj is nan, stop inversion" << std::endl; + // stop inversion + break; + } + + // output src rec file with the result arrival times + if (IP.get_if_output_in_process_data()){ + IP.write_src_rec_file(i_inv,0); + } else if (i_inv == IP.get_max_iter_inv()-1 || i_inv==0) { + IP.write_src_rec_file(i_inv,0); + } + + /////////////// + // model update + /////////////// + if(myrank == 0 && id_sim ==0) + std::cout << "model update starting ... " << std::endl; + oneDInv.model_optimize_1dinv(IP, grid, io, i_inv); + + // output objective function + write_objective_function(IP, i_inv, v_obj_misfit, out_main, "1d inversion"); + + // output updated model + if (id_sim==0) { + //io.change_xdmf_obj(0); // change xmf file for next src + io.change_group_name_for_model(); + + // write out model info + if (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2){ + io.write_vel(grid, i_inv+1); + io.write_xi( grid, i_inv+1); + io.write_eta(grid, i_inv+1); + } + } + + // writeout temporary xdmf file + io.update_xdmf_file(); + + // wait for all processes to finish + synchronize_all_world(); + + // estimate running time + CUSTOMREAL time_elapsed = timer.get_t(); + if (id_sim == 0 && myrank == 0 && i_inv < IP.get_max_iter_inv()-1) { + const time_t end_time_estimated = time_elapsed / (i_inv + 1) * (IP.get_max_iter_inv() - i_inv - 1) + timer.get_start(); + auto will_run_time = (int)(time_elapsed/(i_inv + 1) * (IP.get_max_iter_inv() - i_inv - 1)); + + std::cout << std::endl; + std::cout << "The program begins at " << timer.get_start_t() << std::endl; + std::cout << "Iteration (" << i_inv + 1 << "/" << IP.get_max_iter_inv() << ") finished at " << time_elapsed << " seconds" << std::endl; + std::cout << i_inv + 1 << " iterations run " << timer.get_t() << " seconds, the rest of " << IP.get_max_iter_inv() - i_inv - 1 << " iterations require " << will_run_time << " seconds." << std::endl; + std::cout << "The program is estimated to stop at " << timer.get_utc_from_time_t(end_time_estimated) << std::endl; + std::cout << std::endl; + } + + // output current state of the model + if (IP.get_if_output_final_model()) { + // io.write_final_model(grid, IP); + io.write_merged_model(grid, IP, "final_model.h5"); + } + if (IP.get_if_output_middle_model()) { + std::string tmp_fname = "middle_model_step_" + int2string_zero_fill(i_inv + 1) + ".h5"; + io.write_merged_model(grid, IP, tmp_fname); + } + + // wait for all processes to finish + synchronize_all_world(); + } // end loop inverse + + // close xdmf file + io.finalize_data_output_file(); + + timer.stop_timer(); + if (id_sim == 0 && myrank == 0) { + std::cout << std::endl; + std::cout << "The program begin at " << timer.get_start_t() << std::endl; + std::cout << "1d model inversion ended at " << timer.get_end_t() << std::endl; + std::cout << "It has run " << timer.get_elapsed_t() << " seconds in total." << std::endl; + std::cout << std::endl; + } +} + +#endif // MAIN_ROUTINES_CALLING_H \ No newline at end of file diff --git a/include/main_routines_earthquake_relocation.h b/include/main_routines_earthquake_relocation.h new file mode 100644 index 0000000..6f3ca59 --- /dev/null +++ b/include/main_routines_earthquake_relocation.h @@ -0,0 +1,149 @@ +#ifndef MAIN_ROUTINES_EARTHQUAKE_RELOCATION_H +#define MAIN_ROUTINES_EARTHQUAKE_RELOCATION_H + +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "iterator_selector.h" +#include "iterator.h" +#include "iterator_legacy.h" +#include "iterator_level.h" +#include "source.h" +#include "receiver.h" +#include "main_routines_inversion_mode.h" + + +// calculate traveltime field for all sources-receivers and write to file +void calculate_traveltime_for_all_src_rec(InputParams& IP, Grid& grid, IO_utils& io){ + + // check if this run is in source receiver swap mode + // if not, stop the program + if (IP.get_is_srcrec_swap() == false){ + std::cout << "Error: Source relocation mode must run with swap_src_rec = true" << std::endl; + exit(1); + } + + // reinitialize factors + grid.reinitialize_abcf(); + + // prepare inverstion iteration group in xdmf file + io.prepare_grid_inv_xdmf(0); + + /////////////////////// + // loop for each source + /////////////////////// + + Source src; + + // iterate over sources + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + + const std::string name_sim_src = IP.get_src_name(i_src); + const int id_sim_src = IP.get_src_id(name_sim_src); // global source id + + // check if the source is teleseismic or not + // because teleseismic source is not supported in this mode + bool is_teleseismic = IP.get_if_src_teleseismic(name_sim_src); + + if (is_teleseismic){ + std::cout << "Error: Teleseismic source is not supported in source relocation mode." << std::endl; + exit(1); + } + + // set simu group id and source name for output files/dataset names + io.reset_source_info(id_sim_src, name_sim_src); + + // set source position + src.set_source_position(IP, grid, is_teleseismic, name_sim_src); + + // initialize iterator object + bool first_init = (i_src==0); + + // initialize iterator object + std::unique_ptr It; + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, false); + + ///////////////////////// + // run forward simulation + ///////////////////////// + + if (proc_store_srcrec){ + auto srcmap_this = IP.get_src_point(name_sim_src); + + std::cout << "calculating source (" << i_src+1 << "/" << IP.n_src_this_sim_group << "), name: " + << name_sim_src << ", lat: " << srcmap_this.lat + << ", lon: " << srcmap_this.lon << ", dep: " << srcmap_this.dep + << std::endl; + } + + bool write_tmp_T = true; + calculate_or_read_traveltime_field(IP, grid, io, i_src, IP.n_src_this_sim_group, first_init, It, name_sim_src, write_tmp_T); + + } + + // wait for all processes to finish traveltime calculation + synchronize_all_world(); +} + + +std::vector calculate_gradient_objective_function(InputParams& IP, Grid& grid, IO_utils& io, int i_iter){ + + Receiver recs; // here the source is swapped to receiver + + // initialize source parameters (obj, kernel, ) + recs.init_vars_src_reloc(IP); + + // iterate over sources (to obtain gradient of traveltime field T and absolute traveltime, common source differential traveltime, and common receiver differential traveltime) + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + + const std::string name_sim_src = IP.get_src_name(i_src); + const int id_sim_src = IP.get_src_id(name_sim_src); // global source id + + // set simu group id and source name for output files/dataset names + io.reset_source_info(id_sim_src, name_sim_src); + + // load travel time field on grid.T_loc + io.read_T_tmp(grid); + + // calculate travel time at the actual source location (absolute traveltime, common source differential traveltime) + recs.interpolate_and_store_arrival_times_at_rec_position(IP, grid, name_sim_src); + + // calculate gradient at the actual source location + recs.calculate_T_gradient(IP, grid, name_sim_src); + } + + // wait for all processes to finish + synchronize_all_world(); + + // gather all the traveltime to the main process and distribute to all processes + // for calculating the synthetic (common receiver differential traveltime) + IP.gather_traveltimes_and_calc_syn_diff(); + + + // iterate over sources for calculating gradient of objective function + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + const std::string name_sim_src = IP.get_src_name(i_src); + + // calculate gradient of objective function with respect to location and ortime + recs.calculate_grad_obj_src_reloc(IP, name_sim_src); + } + + // compute the objective function + std::vector obj_residual = recs.calculate_obj_reloc(IP, i_iter); + + // sum grad_tau and grad_chi_k of all simulation groups + IP.allreduce_rec_map_grad_src(); + + //synchronize_all_world(); // not necessary here because allreduce is already synchronizing communication + + return obj_residual; +} + + + +#endif // MAIN_ROUTINES_EARTHQUAKE_RELOCATION_H \ No newline at end of file diff --git a/include/main_routines_inversion_mode.h b/include/main_routines_inversion_mode.h new file mode 100644 index 0000000..31b9071 --- /dev/null +++ b/include/main_routines_inversion_mode.h @@ -0,0 +1,293 @@ +#ifndef MAIN_ROUTINES_INVERSION_MODE_H +#define MAIN_ROUTINES_INVERSION_MODE_H + +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "iterator_selector.h" +#include "iterator.h" +#include "iterator_legacy.h" +#include "iterator_level.h" +#include "source.h" +#include "receiver.h" +#include "kernel.h" +#include "model_update.h" +#include "lbfgs.h" + + +inline void calculate_or_read_traveltime_field(InputParams& IP, Grid& grid, IO_utils& io, const int i_src, const int N_src, bool first_init, + std::unique_ptr& It, const std::string& name_sim_src, const bool& prerun=false){ + + if (IP.get_is_T_written_into_file(name_sim_src)){ + // load travel time field on grid.T_loc + if (myrank == 0){ + std::cout << "id_sim: " << id_sim << ", reading source (" << i_src+1 << "/" << N_src + << "), name: " + << name_sim_src << ", lat: " << IP.src_map[name_sim_src].lat + << ", lon: " << IP.src_map[name_sim_src].lon << ", dep: " << IP.src_map[name_sim_src].dep + << std::endl; + } + + io.read_T_tmp(grid); + + } else { + // We need to solve eikonal equation + if (myrank == 0){ + std::cout << "id_sim: " << id_sim << ", calculating source (" << i_src+1 << "/" << N_src + << "), name: " + << name_sim_src << ", lat: " << IP.src_map[name_sim_src].lat + << ", lon: " << IP.src_map[name_sim_src].lon << ", dep: " << IP.src_map[name_sim_src].dep + << std::endl; + } + + // solve travel time field on grid.T_loc + It->run_iteration_forward(IP, grid, io, first_init); + + // writeout travel time field + if (prerun) { + // write the temporary traveltime field into file for later use + io.write_T_tmp(grid); + + if (proc_store_srcrec) // only proc_store_srcrec has the src_map object + IP.src_map[name_sim_src].is_T_written_into_file = true; + } + } +} + + + +inline void pre_run_forward_only(InputParams& IP, Grid& grid, IO_utils& io, int i_inv){ + if(world_rank == 0) + std::cout << "preparing traveltimes of common receiver data ..." << std::endl; + + Source src; + Receiver recs; + + // noted that src_map_comm_rec is the subset of src_map + for (int i_src = 0; i_src < IP.n_src_comm_rec_this_sim_group; i_src++){ + + // check if this is the first iteration of entire inversion process + bool first_init = (i_inv == 0 && i_src==0); + + // get source info + std::string name_sim_src = IP.get_src_name_comm(i_src); + int id_sim_src = IP.get_src_id(name_sim_src); // global source id + bool is_teleseismic = IP.get_if_src_teleseismic(name_sim_src); // get is_teleseismic flag + + // set simu group id and source name for output files/dataset names + io.reset_source_info(id_sim_src, name_sim_src); + + // set source position + src.set_source_position(IP, grid, is_teleseismic, name_sim_src); + + // initialize iterator object + std::unique_ptr It; + + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, false); + + // calculate or read traveltime field + bool prerun_mode = true; + calculate_or_read_traveltime_field(IP, grid, io, i_src, IP.n_src_comm_rec_this_sim_group, first_init, It, name_sim_src, prerun_mode); + + // interpolate and store traveltime, cs_dif. For cr_dif, only store the traveltime. + recs.interpolate_and_store_arrival_times_at_rec_position(IP, grid, name_sim_src); + // CHS: At this point, all the synthesised arrival times for all the co-located stations are recorded in syn_time_map_sr. When you need to use it later, you can just look it up. + } + + + // wait for all processes to finish + synchronize_all_world(); + + if(world_rank == 0) + std::cout << "synthetic traveltimes of common receiver data have been prepared." << std::endl; + + // gather all the traveltime to the main process and distribute to all processes + // for calculating cr_dif + IP.gather_traveltimes_and_calc_syn_diff(); + + +} + + +// run forward and adjoint simulation and calculate current objective function value and sensitivity kernel if requested +inline std::vector run_simulation_one_step(InputParams& IP, Grid& grid, IO_utils& io, int i_inv, bool& first_src, bool line_search_mode, bool is_save_T){ + + // initialize kernel arrays + if (IP.get_run_mode() == DO_INVERSION || IP.get_run_mode() == INV_RELOC) + grid.initialize_kernels(); + + // reinitialize factors + grid.reinitialize_abcf(); + + /////////////////////////////////////////////////////////////////////// + // compute the synthetic common receiver differential traveltime first + /////////////////////////////////////////////////////////////////////// + + // prepare synthetic traveltime for all earthquakes, if + // 1. common receiver data exists; + // 2. we use common receiver data to update model; (cr + not swap) or (cs + swap) + // 3. we do inversion + if ( src_pair_exists && + ((IP.get_use_cr() && !IP.get_is_srcrec_swap()) + || (IP.get_use_cs() && IP.get_is_srcrec_swap()) ) + && (IP.get_run_mode() == DO_INVERSION || IP.get_run_mode() == INV_RELOC)){ + pre_run_forward_only(IP, grid, io, i_inv); + } + // + // loop over all sources + // + + Source src; + Receiver recs; + + if(world_rank == 0) + std::cout << "computing traveltime field, adjoint field and kernel ..." << std::endl; + + // iterate over sources + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + + // check if this is the first iteration of entire inversion process + bool first_init = (i_inv == 0 && i_src==0); + + // get source info + const std::string name_sim_src = IP.get_src_name(i_src); // source name + const int id_sim_src = IP.get_src_id(name_sim_src); // global source id + bool is_teleseismic = IP.get_if_src_teleseismic(name_sim_src); // get is_teleseismic flag + + // set simu group id and source name for output files/dataset names + io.reset_source_info(id_sim_src, name_sim_src); + + // output initial field + if(first_src && IP.get_if_output_source_field()) { + // write true solution + if (if_test){ + io.write_true_solution(grid); + } + + first_src = false; + } + + ///////////////////////// + // run forward simulation + ///////////////////////// + + // (re) initialize source object and set to grid + src.set_source_position(IP, grid, is_teleseismic, name_sim_src); + + // initialize iterator object + std::unique_ptr It; + + if (!hybrid_stencil_order){ + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, false); + + // if traveltime field has been wriiten into the file, we choose to read the traveltime data. + calculate_or_read_traveltime_field(IP, grid, io, i_src, IP.n_src_this_sim_group, first_init, It, name_sim_src, is_save_T); + + } else { + // hybrid stencil mode + std::cout << "\nrunnning in hybrid stencil mode\n" << std::endl; + + // run 1st order forward simulation + std::unique_ptr It_pre; + IP.set_stencil_order(1); + IP.set_conv_tol(IP.get_conv_tol()*100.0); + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It_pre, false); + calculate_or_read_traveltime_field(IP, grid, io, i_src, IP.n_src_this_sim_group, first_init, It_pre, name_sim_src, is_save_T); + + // run 3rd order forward simulation + IP.set_stencil_order(3); + IP.set_conv_tol(IP.get_conv_tol()/100.0); + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, true); + calculate_or_read_traveltime_field(IP, grid, io, i_src, IP.n_src_this_sim_group, first_init, It, name_sim_src, is_save_T); + } + + // output the result of forward simulation + // ignored for inversion mode. + if (!line_search_mode && IP.get_if_output_source_field()) { + + // output T (result timetable) + io.write_T(grid, i_inv); + + // output T0v + //io.write_T0v(grid,i_inv); // initial Timetable + // output u (true solution) + //if (if_test) + // io.write_u(grid); // true Timetable + // output tau + //io.write_tau(grid, i_inv); // calculated deviation + // output residual (residual = true_solution - result) + //if (if_test) + // io.write_residual(grid); // this will over write the u_loc, so we need to call write_u_h5 first + } + // calculate the arrival times at each receivers + recs.interpolate_and_store_arrival_times_at_rec_position(IP, grid, name_sim_src); + + ///////////////////////// + // run adjoint simulation + ///////////////////////// + + // if (myrank == 0){ + // std::cout << "calculating adjoint field, source (" << i_src+1 << "/" << (int)IP.src_id2name.size() << "), name: " + // << name_sim_src << ", lat: " << IP.src_map[name_sim_src].lat + // << ", lon: " << IP.src_map[name_sim_src].lon << ", dep: " << IP.src_map[name_sim_src].dep + // << std::endl; + // } + + if (IP.get_run_mode()==DO_INVERSION || IP.get_run_mode()==INV_RELOC){ + // calculate adjoint source + recs.calculate_adjoint_source(IP, name_sim_src); + // run iteration for adjoint field calculation + int adj_type = 0; // compute adjoint field + It->run_iteration_adjoint(IP, grid, io, adj_type); + // run iteration for density of the adjoint field + adj_type = 1; // compute adjoint field + It->run_iteration_adjoint(IP, grid, io, adj_type); + // calculate sensitivity kernel + calculate_sensitivity_kernel(grid, IP, name_sim_src); + if (subdom_main && !line_search_mode && IP.get_if_output_source_field()) { + // adjoint field will be output only at the end of subiteration + // output the result of adjoint simulation + io.write_adjoint_field(grid,i_inv); + } + + // io.write_adjoint_field(grid,i_inv); + + // check adjoint source + // if (proc_store_srcrec){ + // for (auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++){ + // std::cout << "rec id: " << iter->second.id << ", rec name: " << iter->second.name << ", adjoint source: " << iter->second.adjoint_source << std::endl; + // } + // } + + } // end if run_mode == DO_INVERSION + + // wait for all processes to finish + // this should not be called here, for the case that the simultaneous run group has different number of sources + //synchronize_all_world(); + + } // end for i_src + // synchronize all processes + synchronize_all_world(); + + // gather all the traveltime to the main process and distribute to all processes + // for calculating the synthetic common receiver differential traveltime + if ( IP.get_run_mode()==ONLY_FORWARD || // case 1. if we are doing forward modeling, traveltime is not prepared for computing cr_dif data. Now we need to compute it + (!IP.get_use_cr() && !IP.get_is_srcrec_swap()) || // case 2-1, we do inversion, but we do not use cr data (cr + no swap) + (!IP.get_use_cs() && IP.get_is_srcrec_swap())){ // case 2-2, we do inversion, but we do not use cr data (cs + swap) + IP.gather_traveltimes_and_calc_syn_diff(); + } + // compute all residual and obj + std::vector obj_residual = recs.calculate_obj_and_residual(IP); + + + // return current objective function value + return obj_residual; +} + + +#endif // MAIN_ROUTINES_INVERSION_MODE_H \ No newline at end of file diff --git a/include/model_optimization_routines.h b/include/model_optimization_routines.h new file mode 100644 index 0000000..eac1baa --- /dev/null +++ b/include/model_optimization_routines.h @@ -0,0 +1,496 @@ +#ifndef MODEL_OPTIMIZATION_ROUTINES_H +#define MODEL_OPTIMIZATION_ROUTINES_H + +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "main_routines_calling.h" +#include "iterator_selector.h" +#include "iterator.h" +#include "iterator_legacy.h" +#include "iterator_level.h" +#include "source.h" +#include "receiver.h" +#include "kernel.h" +#include "model_update.h" +#include "lbfgs.h" +#include "objective_function_utils.h" + + +// do model update by gradient descent +inline void model_optimize(InputParams& IP, Grid& grid, IO_utils& io, int i_inv, \ + CUSTOMREAL& v_obj_inout, CUSTOMREAL& old_v_obj, bool& first_src, std::ofstream& out_main) { + + // check kernel density + check_kernel_density(grid, IP); + + // sum kernels among all simultaneous runs + sumup_kernels(grid); + + // write out original kernels + if (id_sim==0 && subdom_main && IP.get_if_output_kernel() && (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2 || i_inv == 0)) { + // store kernel only in the first src datafile + io.change_group_name_for_model(); + + // write kernel + io.write_Ks(grid, i_inv); + io.write_Keta(grid, i_inv); + io.write_Kxi(grid, i_inv); + + // write kernel density + io.write_Ks_density(grid, i_inv); + io.write_Kxi_density(grid, i_inv); + io.write_Keta_density(grid, i_inv); + } + + // smooth kernels (multigrid, and kdensity normalization) + smooth_kernels(grid, IP); + + // write out modified kernels + if (id_sim==0 && subdom_main && IP.get_if_output_kernel() && (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2 || i_inv == 0)) { + // store kernel only in the first src datafile + io.change_group_name_for_model(); + + // // kernel over density + // io.write_Ks_over_Kden(grid, i_inv); + // io.write_Keta_over_Kden(grid, i_inv); + // io.write_Kxi_over_Kden(grid, i_inv); + + // kernel over density with smoothing + io.write_Ks_update(grid, i_inv); + io.write_Keta_update(grid, i_inv); + io.write_Kxi_update(grid, i_inv); + + // density with smoothing + io.write_Ks_density_update(grid, i_inv); + io.write_Kxi_density_update(grid, i_inv); + io.write_Keta_density_update(grid, i_inv); + } + + // change stepsize + // Option 1: the step length is modulated when obj changes. + if (step_method == OBJ_DEFINED){ + if(i_inv != 0){ + if (v_obj_inout < old_v_obj) { + step_length_init = std::min((CUSTOMREAL)0.02, step_length_init); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The obj keeps decreasing, from " << old_v_obj << " to " << v_obj_inout + << ", the step length is " << step_length_init << std::endl; + std::cout << std::endl; + } + } else if (v_obj_inout >= old_v_obj) { + step_length_init = std::max((CUSTOMREAL)0.0001, step_length_init*step_length_decay); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The obj keep increases, from " << old_v_obj << " to " << v_obj_inout + << ", the step length decreases from " << step_length_init/step_length_decay + << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "At the first iteration, the step length is " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else if (step_method == GRADIENT_DEFINED){ + // Option 2: we modulate the step length according to the angle between the previous and current gradient directions. + // If the angle is less than XX degree, which means the model update direction is successive, we should enlarge the step size + // Otherwise, the step length should decrease + CUSTOMREAL angle = direction_change_of_model_update(grid); + if(i_inv != 0){ + if (angle > step_length_gradient_angle){ + CUSTOMREAL old_step_length = step_length_init; + step_length_init = std::max((CUSTOMREAL)0.0001, step_length_init * step_length_down); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The angle between two update darections is " << angle + << ". Because the angle is greater than " << step_length_gradient_angle << " degree, the step length decreases from " + << old_step_length << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } else if (angle <= step_length_gradient_angle) { + CUSTOMREAL old_step_length = step_length_init; + step_length_init = std::min((CUSTOMREAL)0.02, step_length_init * step_length_up); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The angle between two update darections is " << angle + << ". Because the angle is less than " << step_length_gradient_angle << " degree, the step length increases from " + << old_step_length << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "At the first iteration, the step length is " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + std::cout << std::endl; + std::cout << "No supported method for step size change, step keep the same: " << step_length_init << std::endl; + std::cout << std::endl; + } + + // broadcast the step_length + broadcast_cr_single(step_length_init,0); + + // update the model with the initial step size + set_new_model(grid, step_length_init); + + // make station correction + IP.station_correction_update(step_length_init_sc); + + // writeout temporary xdmf file + if (IP.get_verbose_output_level()) + io.update_xdmf_file(); + + synchronize_all_world(); +} + + +inline std::vector model_optimize_halve_stepping(InputParams& IP, Grid& grid, IO_utils& io, int i_inv, CUSTOMREAL& v_obj_inout, bool& first_src, std::ofstream& out_main) { + + CUSTOMREAL step_length = step_length_init; // step size init is global variable + CUSTOMREAL diff_obj = - 9999999999; + CUSTOMREAL v_obj_old = v_obj_inout; + CUSTOMREAL v_obj_new = 0.0; + std::vector v_obj_misfit_new = std::vector(10, 0.0); + int sub_iter_count = 0; + + // sum kernels among all simultaneous runs + sumup_kernels(grid); + + // smooth kernels + smooth_kernels(grid, IP); + + // backup the initial model + grid.back_up_fun_xi_eta_bcf(); + + // update the model with the initial step size + set_new_model(grid, step_length); + + + if (IP.get_verbose_output_level()) { + // store kernel only in the first src datafile + io.change_group_name_for_model(); + + // output updated velocity models + io.write_Ks(grid, i_inv); + io.write_Keta(grid, i_inv); + io.write_Kxi(grid, i_inv); + + // output descent direction + io.write_Ks_update(grid, i_inv); + io.write_Keta_update(grid, i_inv); + io.write_Kxi_update(grid, i_inv); + } + + // writeout temporary xdmf file + if (IP.get_verbose_output_level()) + io.update_xdmf_file(); + + synchronize_all_world(); + + // loop till + while (sub_iter_count < max_sub_iterations) { + // check the new objective function value + // v_obj_new = run_simulation_one_step(IP, grid, io, i_inv, first_src, true); // run simulations with line search mode + v_obj_misfit_new = run_simulation_one_step(IP, grid, io, i_inv, first_src, true, false); // run simulations with line search mode + v_obj_new = v_obj_misfit_new[0]; + // if the new objective function value is larger than the old one, make the step width to be half of the previous one + diff_obj = v_obj_new - v_obj_old; + + if ( diff_obj > _0_CR // if the objective function value is larger than the old one + || std::abs(diff_obj/v_obj_old) > MAX_DIFF_RATIO_VOBJ) { // if the objective function reduced too much ) { + + // set step length just for writing out + step_length_init = step_length; + // print status + write_objective_function(IP, i_inv, v_obj_misfit_new, out_main, "sub iter"); + + grid.restore_fun_xi_eta_bcf(); + step_length *= HALVE_STEP_RATIO; + set_new_model(grid, step_length); + + sub_iter_count++; + } else { + // if the new objective function value is smaller than the old one, make the step width to be twice of the previous one + goto end_of_sub_iteration; + } + + } + +end_of_sub_iteration: + + v_obj_inout = v_obj_new; + step_length_init = step_length/(HALVE_STEP_RATIO)*HALVE_STEP_RESTORAION_RATIO; // use this step size for the next inversion + + // write adjoint field + int next_i_inv = i_inv + 1; + if (subdom_main && IP.get_if_output_source_field()) + io.write_adjoint_field(grid,next_i_inv); + + return v_obj_misfit_new; + +} + + +// do model update +inline bool model_optimize_lbfgs(InputParams& IP, Grid& grid, IO_utils& io, int i_inv, CUSTOMREAL& v_obj_inout, bool& first_src, std::ofstream& out_main) { + + int subiter_count = 0; // subiteration count + //CUSTOMREAL qp_0 = _0_CR; // store initial p_k * grad(f_k) (descent_direction * gradient) + CUSTOMREAL qp_t = _0_CR; // store p_k * grad(f_k) + CUSTOMREAL td = _0_CR; // wolfes right step + CUSTOMREAL tg = _0_CR; // wolfes left step + CUSTOMREAL step_length = step_length_init; // step size init is global variable + CUSTOMREAL v_obj_reg = _0_CR; // regularization term == q_t + //CUSTOMREAL q_0 = _0_CR; // initial cost function + CUSTOMREAL q_t = _0_CR; // current cost function + std::vector v_obj_misfit_new = std::vector(10, 0.0); + + // + // initialize + // + if (i_inv == 0) { + // initialize regularization + // regularization_penalty[:] = 1.0 + init_regulaization_penalty_with_one(grid); + + // calculate volume_domain = SquaredL2Norm(regularization_penalty) + volume_domain = compute_volume_domain(grid); + + // volume_domain /= N_params + volume_domain /= N_params; + + // weight_Tikonov = penalty_weight / volume_domain + weight_Tikonov = regularization_weight / volume_domain; + weight_Tikonov_ani = regularization_weight; + std::cout << "DEBUG: weight_Tikonov: " << weight_Tikonov << std::endl; + + // calculate damp_weights + compute_damp_weights(grid); + + // calculate gradient (run onestep forward+adjoint) not necessary to do here. already done + //v_obj_misfit_new = run_simulation_one_step(IP, grid, io, i_inv, first_src, true); + + // Q0 = initial obj + q_0 = v_obj_inout; + + // sum kernels among all simultaneous runs + sumup_kernels(grid); + + // smooth gradient + smooth_kernels(grid, IP); + + // calc regularization penalties + calculate_regularization_penalty(grid); + + //// smooth calculated grad regularization penalty + //smooth_gradient_regularization(grid); + + // calc (update) obj_regl = squaredL2Norm(regularization_penalty) + v_obj_reg = calculate_regularization_obj(grid); + + // Q0 += 0.5*weight_Tiknov*obj_regl + q_0 += v_obj_reg; + + // init_grad += weight_Tikonov * gadient_regularization_penalty + add_regularization_grad(grid); + + // store model and gradient + store_model_and_gradient(grid, i_inv); + + // log out + if(myrank == 0 && id_sim ==0) { + out_main \ + << std::setw(5) << i_inv \ + << "," << std::setw(5) << subiter_count \ + << "," << std::setw(15) << step_length \ + << "," << std::setw(15) << q_0 \ + << "," << std::setw(15) << q_t \ + << "," << std::setw(15) << v_obj_reg \ + << "," << std::setw(15) << qp_0 \ + << "," << std::setw(15) << qp_t \ + << "," << std::setw(15) << td \ + << "," << std::setw(15) << tg \ + << "," << std::setw(15) << wolfe_c1*qp_0 \ + << "," << std::setw(15) << wolfe_c2*qp_0 \ + << "," << std::setw(15) << "init" << std::endl; + } + } + + // backup the initial model + grid.back_up_fun_xi_eta_bcf(); + + // update the model with the initial step size + if (IP.get_verbose_output_level() && id_sim==0) { + // store kernel only in the first src datafile + io.change_group_name_for_model(); + + // output updated velocity models + io.write_Ks(grid, i_inv); + io.write_Keta(grid, i_inv); + io.write_Kxi(grid, i_inv); + + // output descent direction + io.write_Ks_descent_dir(grid, i_inv); + io.write_Keta_descent_dir(grid, i_inv); + io.write_Kxi_descent_dir(grid, i_inv); + } + + // writeout temporary xdmf file + if (IP.get_verbose_output_level()&& id_sim==0) + io.update_xdmf_file(); + + // + // iteration + // + if (i_inv > 0) { + // sum kernels among all simultaneous runs + sumup_kernels(grid); + + // smooth kernels + smooth_kernels(grid, IP); + } + + // compute descent direction + calc_descent_direction(grid, i_inv, IP); + + // smooth descent direction + smooth_descent_direction(grid); + + // calc qp_0 = inital grad * descent direction + qp_0 = compute_q_k(grid); + + // loop wolfes subiterations + bool wolfe_cond_ok = false; + while (wolfe_cond_ok != true) { + + // initial guess for isub = 0 + if (i_inv == 0 && subiter_count == 0) + initial_guess_step(grid, step_length, 1.0); + else if (i_inv == 1 && subiter_count == 0) + initial_guess_step(grid, step_length, LBFGS_RELATIVE_step_length); + + //// Update model + set_new_model(grid, step_length); + + //// calculate gradient (run onestep forward+adjoint) + v_obj_misfit_new = run_simulation_one_step(IP, grid, io, i_inv, first_src, true, false); + + //// Qt update (=current obj) + q_t = v_obj_misfit_new[0]; + + // sum kernels among all simultaneous runs + sumup_kernels(grid); + + //// smooth gradient + smooth_kernels(grid, IP); + + //// calculate regularization to grad + calculate_regularization_penalty(grid); + + //// smooth calculated grad regularization penalty + //smooth_gradient_regularization(grid); + + //// add regularization term to Qt (Qt += 0.5 * obj_regl ) + v_obj_reg = calculate_regularization_obj(grid); + q_t += v_obj_reg; + + //// current grad += weight_Tikonov * gadient_regularization_penalty + add_regularization_grad(grid); + + //// Qpt = Inner product(current_grad * descent_direction) + qp_t = compute_q_k(grid); + + //// check wolfe conditions + wolfe_cond_ok = check_wolfe_cond(grid, q_0, q_t, qp_0, qp_t, td, tg, step_length); + + // update the model with the initial step size + if (IP.get_verbose_output_level() && id_sim==0) { + // store kernel only in the first src datafile + io.change_group_name_for_model(); + + // gradient + io.write_Ks_update(grid, i_inv*100+subiter_count); + io.write_Keta_update(grid, i_inv*100+subiter_count); + io.write_Kxi_update(grid, i_inv*100+subiter_count); + + // output descent direction + io.write_Ks_descent_dir(grid, i_inv*100+subiter_count); + io.write_Keta_descent_dir(grid, i_inv*100+subiter_count); + io.write_Kxi_descent_dir(grid, i_inv*100+subiter_count); + + } + + // writeout temporary xdmf file + if (IP.get_verbose_output_level()&& id_sim==0) + io.update_xdmf_file(); + + // log out + if(myrank == 0 && id_sim ==0) + out_main \ + << std::setw(5) << i_inv \ + << "," << std::setw(5) << subiter_count \ + << "," << std::setw(15) << step_length \ + << "," << std::setw(15) << q_0 \ + << "," << std::setw(15) << q_t \ + << "," << std::setw(15) << v_obj_reg \ + << "," << std::setw(15) << qp_0 \ + << "," << std::setw(15) << qp_t \ + << "," << std::setw(15) << td \ + << "," << std::setw(15) << tg \ + << "," << std::setw(15) << wolfe_c1*qp_0 \ + << "," << std::setw(15) << wolfe_c2*qp_0 \ + << "," << std::setw(15) << wolfe_cond_ok << std::endl; + + if (wolfe_cond_ok) { + goto end_of_subiteration; + } else if (subiter_count > max_sub_iterations){ + // reached max subiter + // exit + std::cout << "reached max subiterations" << std::endl; + + return false; + + } else { + // wolfe conditions not satisfied + subiter_count++; + + grid.restore_fun_xi_eta_bcf(); + } + + } + +end_of_subiteration: + //// store model and gradient, + store_model_and_gradient(grid, i_inv+1); + + //// Q0=Qt + q_0 = q_t; + qp_0 = qp_t; + + step_length_init = step_length; // use current step size for the next iteration + + + if (myrank == 0) + std::cout << "Wolfe conditions satisfied at iteration " << subiter_count << std::endl; + + return true; + +} + + + +#endif // MODEL_OPTIMIZATION_ROUTINES_H \ No newline at end of file diff --git a/include/model_update.h b/include/model_update.h new file mode 100644 index 0000000..08eaac4 --- /dev/null +++ b/include/model_update.h @@ -0,0 +1,485 @@ +#ifndef MODEL_UPDATE_H +#define MODEL_UPDATE_H + +#include +#include "config.h" +#include "grid.h" +#include "smooth.h" +#include "smooth_descent_dir.h" +#include "smooth_grad_regul.h" +#include "lbfgs.h" + + +// generate smoothed kernels (K*_update_loc) from the kernels (K*_loc) +// before doing this, K*_loc should be summed up among all simultaneous runs (by calling sumup_kernels) +// before doing this, K*_update_loc has no meaning (unavailable) +void smooth_kernels(Grid& grid, InputParams& IP) { + + if (subdom_main){ // parallel level 3 + + if (id_sim==0){ // parallel level 1 + // initiaize update params + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_update_loc_previous[I2V(i,j,k)] = grid.Ks_update_loc[I2V(i,j,k)]; + grid.Keta_update_loc_previous[I2V(i,j,k)] = grid.Keta_update_loc[I2V(i,j,k)]; + grid.Kxi_update_loc_previous[I2V(i,j,k)] = grid.Kxi_update_loc[I2V(i,j,k)]; + grid.Ks_update_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_update_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_update_loc[I2V(i,j,k)] = _0_CR; + // grid.Ks_density_update_loc[I2V(i,j,k)] = _0_CR; + // grid.Kxi_density_update_loc[I2V(i,j,k)] = _0_CR; + // grid.Keta_density_update_loc[I2V(i,j,k)] = _0_CR; + } + } + } + + // check kernel + CUSTOMREAL max_kernel = _0_CR; + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + max_kernel = std::max(max_kernel, std::abs(grid.Ks_loc[I2V(i,j,k)])); + } + } + } + CUSTOMREAL tmp = 0; + allreduce_cr_single_max(max_kernel, tmp); + max_kernel = tmp; + + if (max_kernel <= eps) { + std::cout << "Error: max_kernel is near zero (less than 10^-12), check data residual and whether no data is used" << std::endl; + exit(1); + } + + if (smooth_method == 0) { + // Ks_loc, Keta_loc, Kxi_loc to be 0 for ghost layers to eliminate the effect of overlapping boundary + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + + if (i == 0 && !grid.i_first()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + if (i == loc_I-1 && !grid.i_last()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + if (j == 0 && !grid.j_first()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + if (j == loc_J-1 && !grid.j_last()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + if (k == 0 && !grid.k_first()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + if (k == loc_K-1 && !grid.k_last()) { + grid.Ks_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_loc[I2V(i,j,k)] = _0_CR; + grid.Ks_density_loc[I2V(i,j,k)] = _0_CR; + grid.Kxi_density_loc[I2V(i,j,k)] = _0_CR; + grid.Keta_density_loc[I2V(i,j,k)] = _0_CR; + } + } + } + } + + // grid based smoothing + smooth_inv_kernels_orig(grid, IP); + } else if (smooth_method == 1) { + // CG smoothing + smooth_inv_kernels_CG(grid, smooth_lr, smooth_lt, smooth_lp); + } + + // shared values on the boundary + grid.send_recev_boundary_data(grid.Ks_update_loc); + grid.send_recev_boundary_data(grid.Keta_update_loc); + grid.send_recev_boundary_data(grid.Kxi_update_loc); + grid.send_recev_boundary_data(grid.Ks_density_update_loc); + grid.send_recev_boundary_data(grid.Kxi_density_update_loc); + grid.send_recev_boundary_data(grid.Keta_density_update_loc); + + grid.send_recev_boundary_data_kosumi(grid.Ks_update_loc); + grid.send_recev_boundary_data_kosumi(grid.Keta_update_loc); + grid.send_recev_boundary_data_kosumi(grid.Kxi_update_loc); + grid.send_recev_boundary_data_kosumi(grid.Ks_density_update_loc); + grid.send_recev_boundary_data_kosumi(grid.Kxi_density_update_loc); + grid.send_recev_boundary_data_kosumi(grid.Keta_density_update_loc); + + } // end if id_sim == 0 + + // send the updated model to all the simultaneous run + broadcast_cr_inter_sim(grid.Ks_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Kxi_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Ks_density_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Kxi_density_update_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_density_update_loc, loc_I*loc_J*loc_K, 0); + + // send the previous updated model to all the simultaneous run + broadcast_cr_inter_sim(grid.Ks_update_loc_previous, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Kxi_update_loc_previous, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_update_loc_previous, loc_I*loc_J*loc_K, 0); + + } // end if subdom_main + + synchronize_all_world(); +} + + +// smooth gradient regularization term +void smooth_gradient_regularization(Grid& grid) { + + if (subdom_main && id_sim==0){ // only id_sim==0 has values for these arrays + if (smooth_method == 0) { + // grid based smoothing + smooth_gradient_regularization_orig(grid); + } else if (smooth_method == 1) { + // CG smoothing + smooth_gradient_regularization_CG(grid, smooth_lr, smooth_lt, smooth_lp); + } + + grid.send_recev_boundary_data(grid.fun_gradient_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.eta_gradient_regularization_penalty_loc); + grid.send_recev_boundary_data(grid.xi_gradient_regularization_penalty_loc); + } +} + + +void smooth_descent_direction(Grid& grid){ + if (subdom_main){ + if (id_sim == 0) { // calculation of the update model is only done in the main simultaneous run + if (smooth_method == 0) { + // grid based smoothing + smooth_descent_dir(grid); + } else if (smooth_method == 1) { + // CG smoothing + smooth_descent_dir_CG(grid, smooth_lr, smooth_lt, smooth_lp); + } + + // shared values on the boundary + grid.send_recev_boundary_data( grid.Ks_descent_dir_loc); + grid.send_recev_boundary_data(grid.Keta_descent_dir_loc); + grid.send_recev_boundary_data( grid.Kxi_descent_dir_loc); + + } // end if id_sim == 0 + + // send the updated model to all the simultaneous run + broadcast_cr_inter_sim( grid.Ks_descent_dir_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim( grid.Kxi_descent_dir_loc, loc_I*loc_J*loc_K, 0); + broadcast_cr_inter_sim(grid.Keta_descent_dir_loc, loc_I*loc_J*loc_K, 0); + + } +} + + +void calc_descent_direction(Grid& grid, int i_inv, InputParams& IP) { + + if (subdom_main) { + + // routines for LBFGS + if (optim_method == LBFGS_MODE) { + + // calculate the descent direction + if (i_inv > 0) { + calculate_descent_direction_lbfgs(grid, i_inv); + // use gradient for the first iteration + } else { + int n_grid = loc_I*loc_J*loc_K; + + // first time, descent direction = - precond * gradient + // inverse the gradient to fit the update scheme for LBFGS + for (int i = 0; i < n_grid; i++){ + grid.Ks_descent_dir_loc[i] = - _1_CR* grid.Ks_update_loc[i]; + grid.Keta_descent_dir_loc[i] = - _1_CR* grid.Keta_update_loc[i]; + grid.Kxi_descent_dir_loc[i] = - _1_CR* grid.Kxi_update_loc[i]; + //grid.Ks_descent_dir_loc[i] = - _1_CR* grid.Ks_loc[i]; + //grid.Keta_descent_dir_loc[i] = - _1_CR* grid.Keta_loc[i]; + //grid.Kxi_descent_dir_loc[i] = - _1_CR* grid.Kxi_loc[i]; + + } + } + } else { + // return error + std::cout << "Error: optim_method is not set to LBFGS_MODE (=2)" << std::endl; + exit(1); + } + + + } // end if subdom_main + + synchronize_all_world(); + +} + +CUSTOMREAL direction_change_of_model_update(Grid& grid){ + CUSTOMREAL norm_grad = _0_CR; + CUSTOMREAL norm_grad_previous = _0_CR; + CUSTOMREAL inner_product = _0_CR; + CUSTOMREAL cos_angle = _0_CR; + CUSTOMREAL angle = _0_CR; + if (subdom_main) { + // initiaize update params + inner_product = dot_product(grid.Ks_update_loc_previous, grid.Ks_update_loc, loc_I*loc_J*loc_K); + norm_grad = dot_product(grid.Ks_update_loc, grid.Ks_update_loc, loc_I*loc_J*loc_K); + norm_grad_previous = dot_product(grid.Ks_update_loc_previous, grid.Ks_update_loc_previous, loc_I*loc_J*loc_K); + + CUSTOMREAL tmp; + allreduce_cr_single(inner_product,tmp); + inner_product = tmp; + + allreduce_cr_single(norm_grad,tmp); + norm_grad = tmp; + + allreduce_cr_single(norm_grad_previous,tmp); + norm_grad_previous = tmp; + + cos_angle = inner_product / (std::sqrt(norm_grad) * std::sqrt(norm_grad_previous)); + angle = acos(cos_angle) * RAD2DEG; + } + + return angle; +} + + +void set_new_model(Grid& grid, CUSTOMREAL step_length_new, bool init_bfgs=false) { + + if (subdom_main) { + + // for LBFGS mode. K*_update_loc is not directly the descent direction but smoothed gradient + // so for non LBFGS_mode, nextstep will be calculated with K*_update_loc + if (optim_method != LBFGS_MODE) { + // // get the scaling factor + // CUSTOMREAL Linf_Ks = _0_CR, Linf_Keta = _0_CR, Linf_Kxi = _0_CR; + // for (int k = 1; k < loc_K-1; k++) { + // for (int j = 1; j < loc_J-1; j++) { + // for (int i = 1; i < loc_I-1; i++) { + // Linf_Ks = std::max(Linf_Ks, std::abs(grid.Ks_update_loc[I2V(i,j,k)])); + // Linf_Keta = std::max(Linf_Keta, std::abs(grid.Keta_update_loc[I2V(i,j,k)])); + // Linf_Kxi = std::max(Linf_Kxi, std::abs(grid.Kxi_update_loc[I2V(i,j,k)])); + // } + // } + // } + + // // get the maximum scaling factor among subdomains + // CUSTOMREAL Linf_tmp; + // allreduce_cr_single_max(Linf_Ks, Linf_tmp); Linf_Ks = Linf_tmp; + // allreduce_cr_single_max(Linf_Keta, Linf_tmp); Linf_Keta = Linf_tmp; + // allreduce_cr_single_max(Linf_Kxi, Linf_tmp); Linf_Kxi = Linf_tmp; + + // CUSTOMREAL Linf_all = _0_CR; + // Linf_all = std::max(Linf_Ks, std::max(Linf_Keta, Linf_Kxi)); + + // // if (myrank == 0 && id_sim == 0) + // // std::cout << "Scaling factor for all kernels: " << Linf_all << std::endl; + // // std::cout << "Scaling factor for model update for Ks, Keta, Kx, stepsize: " << Linf_Ks << ", " << Linf_Keta << ", " << Linf_Kxi << ", " << step_length_new << std::endl; + + + // Linf_Ks = Linf_all; + // Linf_Keta = Linf_all; + // Linf_Kxi = Linf_all; + + // kernel update has been rescaled in "smooth_inv_kernels_orig" + + // update the model + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + + // // update + // grid.fun_loc[I2V(i,j,k)] *= (_1_CR - grid.Ks_update_loc[I2V(i,j,k) ] / (Linf_Ks /step_length_new) ); + // grid.xi_loc[I2V(i,j,k)] -= grid.Kxi_update_loc[I2V(i,j,k) ] / (Linf_Kxi /step_length_new) ; + // grid.eta_loc[I2V(i,j,k)] -= grid.Keta_update_loc[I2V(i,j,k)] / (Linf_Keta /step_length_new) ; + + // update + grid.fun_loc[I2V(i,j,k)] *= (_1_CR - grid.Ks_update_loc[I2V(i,j,k) ] * step_length_new); + grid.xi_loc[I2V(i,j,k)] -= grid.Kxi_update_loc[I2V(i,j,k) ] * step_length_new; + grid.eta_loc[I2V(i,j,k)] -= grid.Keta_update_loc[I2V(i,j,k)] * step_length_new; + + + // grid.fac_b_loc[I2V(i,j,k)] = _1_CR - _2_CR * grid.xi_loc[I2V(i,j,k)]; + // grid.fac_c_loc[I2V(i,j,k)] = _1_CR + _2_CR * grid.xi_loc[I2V(i,j,k)]; + // grid.fac_f_loc[I2V(i,j,k)] = - _2_CR * grid.eta_loc[I2V(i,j,k)]; + + // grid.fun_loc[I2V(i,j,k)] *= (_1_CR); + // grid.xi_loc[I2V(i,j,k)] -= (_0_CR); + // grid.eta_loc[I2V(i,j,k)] -= (_0_CR); + + // grid.fac_b_loc[I2V(i,j,k)] = _1_CR - _2_CR * grid.xi_loc[I2V(i,j,k)]; + // grid.fac_c_loc[I2V(i,j,k)] = _1_CR + _2_CR * grid.xi_loc[I2V(i,j,k)]; + // grid.fac_f_loc[I2V(i,j,k)] = - _2_CR * grid.eta_loc[I2V(i,j,k)]; + + } + } + } + + grid.rejuvenate_abcf(); + + + } else { // for LBFGS routine + + // here all the simultaneous runs have the same values used in this routine. + // thus we don't need to if(id_sim==0) + + CUSTOMREAL step_length = step_length_new; + const CUSTOMREAL factor = - _1_CR; + + // update the model + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + // update + grid.fun_loc[I2V(i,j,k)] *= (_1_CR - factor * grid.Ks_descent_dir_loc[I2V(i,j,k)] * step_length); + grid.xi_loc[I2V(i,j,k)] -= factor * grid.Kxi_descent_dir_loc[I2V(i,j,k) ] * step_length; + grid.eta_loc[I2V(i,j,k)] -= factor * grid.Keta_descent_dir_loc[I2V(i,j,k)] * step_length; + //grid.fun_loc[I2V(i,j,k)] += grid.Ks_descent_dir_loc[I2V(i,j,k)] *step_length_new; + //grid.xi_loc[I2V(i,j,k)] += grid.Kxi_descent_dir_loc[I2V(i,j,k)] *step_length_new; + //grid.eta_loc[I2V(i,j,k)] += grid.Keta_descent_dir_loc[I2V(i,j,k)]*step_length_new; + + grid.fac_b_loc[I2V(i,j,k)] = _1_CR - _2_CR * grid.xi_loc[I2V(i,j,k)]; + grid.fac_c_loc[I2V(i,j,k)] = _1_CR + _2_CR * grid.xi_loc[I2V(i,j,k)]; + grid.fac_f_loc[I2V(i,j,k)] = - _2_CR * grid.eta_loc[I2V(i,j,k)]; + } + } + } + + } // end LBFGS model update + + // shared values on the boundary + grid.send_recev_boundary_data(grid.fun_loc); + grid.send_recev_boundary_data(grid.xi_loc); + grid.send_recev_boundary_data(grid.eta_loc); + grid.send_recev_boundary_data(grid.fac_b_loc); + grid.send_recev_boundary_data(grid.fac_c_loc); + grid.send_recev_boundary_data(grid.fac_f_loc); + + } // end if subdom_main +} + + + +// compute p_k * grad(f_k) +CUSTOMREAL compute_q_k(Grid& grid) { + + CUSTOMREAL tmp_qk = _0_CR; + + if (subdom_main && id_sim == 0) { + + // grad * descent_direction + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + // we can add here a precondition (here use *_update_loc for storing descent direction) + tmp_qk += grid.Ks_update_loc[I2V(i,j,k)] * grid.Ks_descent_dir_loc[I2V(i,j,k)] + + grid.Keta_update_loc[I2V(i,j,k)] * grid.Keta_descent_dir_loc[I2V(i,j,k)] + + grid.Kxi_update_loc[I2V(i,j,k)] * grid.Kxi_descent_dir_loc[I2V(i,j,k)]; + } + } + } + + // add tmp_qk among all subdomain + allreduce_cr_single(tmp_qk, tmp_qk); + } + + // share tmp_qk among all simultaneous runs + if (subdom_main) + broadcast_cr_single_inter_sim(tmp_qk,0); + + return tmp_qk; + +} + + +// check if the wolfe conditions are satisfied +bool check_wolfe_cond(Grid& grid, \ + CUSTOMREAL q_0, CUSTOMREAL q_t, \ + CUSTOMREAL qp_0, CUSTOMREAL qp_t, \ + CUSTOMREAL& td, CUSTOMREAL& tg, CUSTOMREAL& step_length_sub) { + /* + q_0 : initial cost function + q_t : current cost function + q_p0 : initial grad * descent_dir + q_pt : current grad * descent_dir + td : right step size + tg : left step size + step_length_sub : current step size + */ + + bool step_accepted = false; + + // check if the wolfe conditions are satisfied and update the step_length_sub + CUSTOMREAL qpt = (q_t - q_0) / step_length_sub; + + if (subdom_main) { + // good step size + if (qpt <= wolfe_c1*qp_0 \ + && wolfe_c2*qp_0 <= qp_t \ + ){ + if (myrank==0) + std::cout << "Wolfe rules: step accepted" << std::endl; + step_accepted = true; + } else { + // modify the stepsize + if (wolfe_c1*qp_0 < qpt) { + td = step_length_sub; + if (myrank==0) + std::cout << "Wolfe rules: right step size updated." << std::endl; + } + if (qpt <= wolfe_c1*qp_0 && qp_t < wolfe_c2*qp_0) { + tg = step_length_sub; + if (myrank==0) + std::cout << "Wolfe rules: left step size updated." << std::endl; + } + //if (isZero(td)) { + if (td == _0_CR) { + step_length_sub = _2_CR * step_length_sub; + if (myrank==0) + std::cout << "Wolfe rules: step size too small. Increased to " << step_length_sub << std::endl; + } else { + step_length_sub = _0_5_CR * (td+tg); + if (myrank==0) + std::cout << "Wolfe rules: step size too large. Decreased to " << step_length_sub << std::endl; + } + } + + // share step_accepted among all subdomains + broadcast_bool_single(step_accepted,0); + broadcast_cr_single(step_length_sub,0); + } // end if subdom_main + + broadcast_bool_single_sub(step_accepted,0); + broadcast_cr_single_sub(step_length_sub,0); + + return step_accepted; +} + + + +#endif // MODEL_UPDATE_H \ No newline at end of file diff --git a/include/mpi_funcs.h b/include/mpi_funcs.h new file mode 100644 index 0000000..22a7e45 --- /dev/null +++ b/include/mpi_funcs.h @@ -0,0 +1,1062 @@ +#ifndef MPI_FUNCS_H +#define MPI_FUNCS_H + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "config.h" + +#ifdef USE_OMP +#include +#endif + +// Forward declaration for Grid class +class Grid; + +inline void initialize_mpi(); +inline void finalize_mpi(); +inline void cleanup_all_mpi_windows(); // Add cleanup function declaration + +inline void mpi_debug(char const* str); + +template +inline std::vector node_reordering(const std::vector&); +inline int check_total_nprocs_and_ndiv(); +inline void synchronize_all(); +inline void synchronize_all_inter_sim(); +inline void synchronize_all_sim(); +inline void synchronize_all_sub(); +inline void synchronize_all_inter(); +inline void synchronize_all_world(); +inline void send_bool_single_sim(bool*, int); +inline void recv_bool_single_sim(bool*, int); +inline void send_i_single_sim(int*, int); +inline void recv_i_single_sim(int*, int); +inline void send_cr(CUSTOMREAL*, int, int); +inline void recv_cr(CUSTOMREAL*, int, int); +inline void isend_cr(CUSTOMREAL*, int, int, MPI_Request&); +inline void irecv_cr(CUSTOMREAL*, int, int, MPI_Request&); +inline void send_cr_single_sim(CUSTOMREAL *, int); +inline void recv_cr_single_sim(CUSTOMREAL *, int); +inline void send_str_sim(std::string, int); +inline void recv_str_sim(std::string&, int); +inline void send_str(std::string, int); +inline void recv_str(std::string&, int); +inline void allreduce_i_single(int&, int&); +inline void allreduce_cr_single(CUSTOMREAL&, CUSTOMREAL&); +inline void allreduce_i_inplace(int*, int); +inline void allreduce_i_sim_single_inplace(int&); +inline void allreduce_bool_inplace_inter_sim(bool*, int); +inline void allreduce_bool_inplace(bool*, int); +inline void allreduce_bool_inplace_sub(bool*, int); +inline void allreduce_bool_single_inplace(bool&); +inline void allreduce_bool_single_inplace_world(bool&); +inline void allreduce_cr_inplace(CUSTOMREAL*, int); +inline void allreduce_cr_sim(CUSTOMREAL*, int, CUSTOMREAL*); +inline void allreduce_cr_sim_inplace(CUSTOMREAL*, int); +inline void allreduce_cr_sim_single_inplace(CUSTOMREAL&); +inline void allgather_i_single(int*, int*); +inline void allgather_cr_single(CUSTOMREAL*, CUSTOMREAL*); +inline void allgather_str(const std::string&, std::vector&); +inline void broadcast_bool_single(bool&, int); +inline void broadcast_bool_single_sub(bool&, int); +inline void broadcast_bool_single_inter_sim(bool&, int); +inline void broadcast_bool_inter_and_intra_sim(bool&, int); +inline void broadcast_i_single(int&, int); +inline void broadcast_i_single_inter_sim(int&, int); +inline void broadcast_i_single_sub(int&, int); +inline void broadcast_i_single_intra_sim(int&, int); +inline void broadcast_i_single_inter_and_intra_sim(int&, int); +inline void broadcast_f_single(float&, int); +inline void broadcast_cr(CUSTOMREAL* , int, int); +inline void broadcast_cr_single(CUSTOMREAL&, int); +inline void broadcast_cr_single_inplace(CUSTOMREAL&); +inline void broadcast_cr_inter_sim(CUSTOMREAL*, int, int); +inline void broadcast_str(std::string&, int); +inline void broadcast_str_inter_sim(std::string&, int); +inline void broadcast_str_sub(std::string&, int); +inline void broadcast_str_inter_and_intra_sim(std::string&, int); +inline void broadcast_cr_single_sub(CUSTOMREAL&, int); +inline void broadcast_cr_sub(CUSTOMREAL*, int, int); +inline void broadcast_cr_single_inter_and_intra_sim(CUSTOMREAL&, int); +inline void prepare_shm_array_cr(int, CUSTOMREAL*&, MPI_Win&); +inline void prepare_shm_array_bool(int, bool*&, MPI_Win&); +inline void cleanup_mpi_win(MPI_Win&); +inline void cleanup_mpi_wins(std::initializer_list); +inline void init_mpi_wins(std::initializer_list); + +inline void wait_req(MPI_Request&); +inline void shm_fence(MPI_Win&); + +inline void initialize_mpi(){ + // Initialize the MPI environment +#ifndef USE_OMP + MPI_Init(NULL, NULL); +#else + int provided; + MPI_Init_thread(NULL,NULL,MPI_THREAD_FUNNELED,&provided); + if(provided != MPI_THREAD_FUNNELED){ + std::cerr << "MPI_THREAD_FUNNELED is not supported" << std::endl; + exit(1); + } + + // currently no routine except src/rec weight calculation is parallelized by openmp + // thus put 1 thread per process + omp_set_num_threads(1); + + // show the number of threads + int nthreads = omp_get_max_threads(); + + // error check + if (nthreads != 1){ + std::cerr << "number of threads is not 1" << std::endl; + exit(1); + } + + //if (world_rank == 0) + // std::cout << "Number of threads = " << nthreads << std::endl; +#endif + // Get the number of processes + MPI_Comm_size(MPI_COMM_WORLD, &world_nprocs); + // Get the rank of the process + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); + + // temporary use those parameters for reading input file + nprocs = world_nprocs; + myrank = world_rank; + inter_sub_comm = MPI_COMM_WORLD; + + stdout_by_rank_zero("mpi initialized."); +} + + +inline void finalize_mpi(){ + + synchronize_all_world(); + + // Clean up all MPI windows before finalizing MPI + cleanup_all_mpi_windows(); + + // free communicators if necessary + //if (sub_comm != MPI_COMM_NULL) + // MPI_Comm_free(&sub_comm); + //if (inter_sub_comm != MPI_COMM_WORLD) + // MPI_Comm_free(&inter_sub_comm); + //if (sim_comm != MPI_COMM_NULL) + // MPI_Comm_free(&sim_comm); + + // Finalize the MPI environment. + MPI_Finalize(); + + stdout_by_rank_zero("mpi finalized."); +} + + +inline void mpi_debug(char const* str){ + std::cout << "rank: " << world_rank << ", " << str << std::endl; + synchronize_all_world(); +} + + +template +inline std::vector node_reordering(const std::vector& vec){ + // reordering the nodes in the order of the number of particles + // the first node has the most particles + std::vector idx(vec.size()); + std::iota(idx.begin(), idx.end(), 0); + std::sort(idx.begin(), idx.end(), [&vec](size_t i1, size_t i2) {return vec[i1] > vec[i2];}); + return idx; +} + + +inline std::vector define_node_ids(std::vector& mpi_node_names_pre){ + std::vector mpi_node_ids(world_nprocs); + std::vector mpi_node_names_unique = mpi_node_names_pre; + std::sort(mpi_node_names_unique.begin(), mpi_node_names_unique.end()); + mpi_node_names_unique.erase(std::unique(mpi_node_names_unique.begin(), mpi_node_names_unique.end()), mpi_node_names_unique.end()); + for (int irank = 0; irank < world_nprocs; irank++){ + for (long unsigned int i = 0; i < mpi_node_names_unique.size(); i++){ + if (mpi_node_names_pre[irank] == mpi_node_names_unique[i]){ + mpi_node_ids[irank] = i; + break; + } + } + } + return mpi_node_ids; +} + + +inline int count_number_compute_nodes(std::vector mpi_node_names) { + std::vector mpi_node_names_unique = mpi_node_names; + std::sort(mpi_node_names_unique.begin(), mpi_node_names_unique.end()); + mpi_node_names_unique.erase(std::unique(mpi_node_names_unique.begin(), mpi_node_names_unique.end()), mpi_node_names_unique.end()); + return mpi_node_names_unique.size(); +} + + +inline void split_mpi_comm(){ + /* + This function splits MPI_COMM_WORLD into 3 layers of mpi communication groups + - simulation groups + - subdomain groups + - group of only the sub domain's leader + + subdomain leader is selected from the first processes of each simulation group. + Then the later processes will be assigned to the subdomain group. + + # memo + h5 grid file is written only by the first group of simultaneous runs + h5 data is written by the subdomain main processes of all the simultaneous runs. + xdmf file is written by only the first subdomain's subdomain main process of all the simultaneous runs. + */ + + // make a list of mpi node names and redefine the world_rank + std::vector mpi_node_names(world_nprocs, "not_initialized"), mpi_node_names_pre(world_nprocs, "not_initialized"); + std::vector mpi_node_ids(world_nprocs, -1); // we put id for each node + + // get processor name of this process + char processor_name[MPI_MAX_PROCESSOR_NAME]; + int name_len; + MPI_Get_processor_name(processor_name, &name_len); + mpi_node_names_pre[world_rank] = std::string(processor_name); + +// +// DEBUG ONLY rename mpi node names into 4 different names +// +// //if (world_nprocs != 32){ +// // std::cout << "ERROR: world_nprocs is not 64. (for processor assignment test)" << std::endl; +// // exit(1); +// //} +// if (world_nprocs%2 != 0){ +// std::cout << "ERROR: world_nprocs is not even. (for processor assignment test)" << std::endl; +// exit(1); +// } +// +// if (world_rank %2 == 0) { +// mpi_node_names_pre[world_rank] = "node_inu"; +// //} else if (world_rank % 4 == 1) { +// // mpi_node_names_pre[world_rank] = "node_neko"; +// //} else if (world_rank % 4 == 2) { +// // mpi_node_names_pre[world_rank] = "node_kani"; +// } else { +// mpi_node_names_pre[world_rank] = "node_usagi"; +// } +// +// // debug out +// if (world_rank == 0){ +// for (int irank = 0; irank < world_nprocs; irank++){ +// std::cout << "rank: " << irank << ", node name: " << mpi_node_names_pre[irank] << std::endl; +// } +// } +// +// synchronize_all_world(); +// +// DEBUG node fake name assignment done +// + + // gather all the node names in std::vector + allgather_str(mpi_node_names_pre[world_rank], mpi_node_names_pre); + + // define node id for each node + mpi_node_ids = define_node_ids(mpi_node_names_pre); + + // total number of nodes (unique) + int n_compute_nodes = count_number_compute_nodes(mpi_node_names_pre); + + // reorder if the number of unique mpi_node_ids != 1 + if (n_compute_nodes > 1){ + + // sort mpi_node_names and change world rank accordingly + std::vector node_reorder = node_reordering(mpi_node_names_pre); + std::vector mpi_node_names_sorted(world_nprocs); + std::vector mpi_node_ids_sorted(world_nprocs); + for (int irank = 0; irank < world_nprocs; irank++){ + mpi_node_names_sorted[irank] = mpi_node_names_pre[node_reorder[irank]]; + mpi_node_ids_sorted[irank] = mpi_node_ids[node_reorder[irank]]; + } + mpi_node_names = mpi_node_names_sorted; + mpi_node_ids = mpi_node_ids_sorted; + + // renumbering this process's rank + world_rank = node_reorder[world_rank]; + + } else { + mpi_node_names = mpi_node_names_pre; + //mpi_node_ids = mpi_node_ids; + } + + // debug out +// if (world_rank == 0){ +// for (int irank = 0; irank < world_nprocs; irank++){ +// std::cout << "apres rank: " << irank << ", node name: " << mpi_node_names[irank] << ", node id : " << mpi_node_ids[irank] << std::endl; +// } +// } +// synchronize_all_world(); + + // show node name and number summary + if (world_rank == 0){ + std::cout << "\n\n Node name summary\n" << std::endl; + + std::cout << "Total number of compute nodes: " << n_compute_nodes << std::endl; + + for (long unsigned int i = 0; i < mpi_node_names.size(); i++){ + // only one show for each node name + if (i == 0 || mpi_node_names[i] != mpi_node_names[i-1]){ + std::cout << "node name: " << mpi_node_names[i] << ", number: " << std::count(mpi_node_names.begin(), mpi_node_names.end(), mpi_node_names[i]) << std::endl; + } + } + std::cout << "\n" << std::endl; + } + + // create communicator for this group if simultaneous run mode + if(n_sims > 1) { + // set a simultaneous run id + if (world_nprocs%n_sims == 0) { + n_procs_each_sim = static_cast(world_nprocs/n_sims); + id_sim = std::floor(world_rank/n_procs_each_sim); + //id_sim = static_cast(world_rank/n_procs_each_sim); + } else { + stdout_by_main("Error: requested nproc is not divisible by n_sims."); + finalize_mpi(); + exit(1); + } + + // create communicator for simulation group + MPI_Comm_split(MPI_COMM_WORLD, id_sim, world_rank, &sim_comm); + MPI_Comm_rank(sim_comm, &sim_rank); // rank in simulation group + MPI_Comm_size(sim_comm, &sim_nprocs); // number of processes in simulation group + + // recreate node_names and node_ids for this simulation group + std::vector mpi_node_names_tmp(sim_nprocs); + std::vector mpi_node_ids_tmp(sim_nprocs); + + for (int irank = 0; irank < sim_nprocs; irank++){ + mpi_node_names_tmp[irank] = mpi_node_names[n_procs_each_sim*id_sim + irank]; + mpi_node_ids_tmp[irank] = mpi_node_ids[ n_procs_each_sim*id_sim + irank]; + } + + // re-assign node_names and node_ids + mpi_node_names = mpi_node_names_tmp; + mpi_node_ids = mpi_node_ids_tmp; + + // count the number of compute nodes (unique) again + n_compute_nodes = count_number_compute_nodes(mpi_node_names); + + } else { + // this is not a simultaneous run + n_procs_each_sim = world_nprocs; + id_sim = 0; + + sim_comm = MPI_COMM_WORLD; + sim_rank = world_rank; + sim_nprocs = world_nprocs; + } + + // inter-communicator (between simulation groups) + MPI_Comm_split(MPI_COMM_WORLD, sim_rank, id_sim, &inter_sim_comm); + MPI_Comm_rank(inter_sim_comm, &inter_sim_rank); + + // number of subdomains + n_subdomains = ndiv_i*ndiv_j*ndiv_k; + + // check if the number of compute node is multiple of n_subdomains + if (n_subdomains % n_compute_nodes != 0){ + std::cout << "ERROR: n_compute_nodes is not multiple of n_subdomains" << std::endl; + exit(1); + } + + // number of subdomains per node + //int n_subdomains_per_node = static_cast(n_subdomains/n_compute_nodes); + int n_procs_per_subdomain = static_cast(sim_nprocs/n_subdomains); + id_subdomain = std::floor(sim_rank/n_procs_per_subdomain); + int id_proc_in_subdomain = sim_rank - id_subdomain*n_procs_per_subdomain; + + // assign first ranks to the main node of subdomain + // and create a commmunicator for main processes of subdomain + if (id_proc_in_subdomain == 0) { + //std::cout << "my sim_rank: " << sim_rank << std::endl; + subdom_main = true; + MPI_Comm_split(sim_comm, 0, sim_rank, &inter_sub_comm); + MPI_Comm_rank(inter_sub_comm, &inter_sub_rank); + MPI_Comm_size(inter_sub_comm, &inter_sub_nprocs); + + // then the calculation in the sub domain will be done by only the processes + // with subdomom_main == true and with inter_sub_comm commmunicator + + // use the rank number of inter_sub_comm as the myrank + myrank = inter_sub_rank; + nprocs = inter_sub_nprocs; + + } else { + //std::cout << "my sim_rank to sub : " << sim_rank << std::endl; + MPI_Comm_split(sim_comm, 1, sim_rank, &inter_sub_comm); + + // assign those ranks as subprocesses of each sub domain. + subdom_main = false; + myrank = -9999; + nprocs = -9999; + } + + synchronize_all_sim(); + + MPI_Comm_split(sim_comm, id_subdomain, sim_rank, &sub_comm); + MPI_Comm_rank(sub_comm, &sub_rank); + MPI_Comm_size(sub_comm, &sub_nprocs); + + // convert the sub_comm to shared memory available communicator + MPI_Comm tmp_comm; + MPI_Comm_split_type(sub_comm, MPI_COMM_TYPE_SHARED, id_subdomain, MPI_INFO_NULL, &tmp_comm); + sub_comm = tmp_comm; + MPI_Comm_rank(sub_comm, &sub_rank); + MPI_Comm_size(sub_comm, &sub_nprocs); + + synchronize_all_world(); + + // check processors + for (int irank = 0; irank < world_nprocs; irank++){ + synchronize_all_world(); + if (irank == world_rank) + std::cout << "global rank: " << world_rank << ", node name: " << mpi_node_names[world_rank] \ + << " | i_simul/total: " << id_sim << "/" << n_sims << ", n_procs_each_sim: " << n_procs_each_sim \ + << " | i_subdom/total: " << id_subdomain << "/" << n_subdomains << ", subdom_main: " << subdom_main \ + << ", sub_rank/total: " << sub_rank << "/" << sub_nprocs \ + << std::endl; + } + + synchronize_all_world(); + + // // check processors + // for (int irank = 0; irank < world_nprocs; irank++){ + // synchronize_all_world(); + // if (irank == world_rank) { + // std::cout << "global rank: " << world_rank << ", node name: " << mpi_node_names[world_rank] + // << ", world_rank: " << world_rank << ", world_nprocs: " << world_nprocs + // << ", sim_rank: " << sim_rank << ", sim_nprocs: " << sim_nprocs + // << ", sub_rank: " << sub_rank << ", sub_nprocs: " << sub_nprocs + // << ", inter_sim_rank: " << inter_sim_rank + // << ", inter_sub_rank: " << inter_sub_rank << ", inter_sub_nprocs: " << inter_sub_nprocs + // << ", id_sim: " << id_sim << ", id_subdomain: " << id_subdomain + // << ", subdom_main: " << subdom_main + // << ", id_proc_in_subdomain: " << id_proc_in_subdomain + // << ", id_subdomain: " << id_subdomain + // << std::endl; + // std::cout << std::endl; + // } + // } + // synchronize_all_world(); + +} + + +inline int check_total_nprocs_and_ndiv(){ + if (world_nprocs != (n_sims*ndiv_i*ndiv_j*ndiv_k*n_subprocs)){ + stdout_by_main("ERROR: the number of requested processors and n_sims*ndiv_rtp[0]*ndiv_rtp[1]*ndiv_rtp[2]*nproc_sub in input_params.yml need to be the same."); + if (world_rank==0){ + // print all params + std::cout << "n_sims: " << n_sims << std::endl; + std::cout << "ndiv_rtp: " << ndiv_k << " " << ndiv_j << " " << ndiv_i << std::endl; + std::cout << "n_subprocs: " << n_subprocs << std::endl; + std::cout << "nprocs should be n_sims*ndiv_p*ndiv_t*ndiv_r*n_subprocs = " << n_sims*ndiv_i*ndiv_j*ndiv_k*n_subprocs << std::endl; + std::cout << "but the actual nprocs = " << nprocs << std::endl; + } + finalize_mpi(); + exit(EXIT_FAILURE); + } + return 0; +} + + +inline void synchronize_all(){ + MPI_Barrier(sim_comm); +} + + +inline void synchronize_all_sim(){ + MPI_Barrier(sim_comm); +} + + +inline void synchronize_all_sub(){ + MPI_Barrier(sub_comm); +} + + +inline void synchronize_all_inter(){ + MPI_Barrier(inter_sub_comm); +} + + +inline void synchronize_all_inter_sim(){ + MPI_Barrier(inter_sim_comm); +} + + +inline void synchronize_all_world(){ + MPI_Barrier(MPI_COMM_WORLD); +} + + +inline void send_bool_single_sim(bool* b, int dest){ + const int n = 1; + MPI_Send(b, n, MPI_C_BOOL, dest, MPI_DUMMY_TAG, inter_sim_comm); +} + + +inline void recv_bool_single_sim(bool* b, int src){ + const int n = 1; + MPI_Recv(b, n, MPI_C_BOOL, src, MPI_DUMMY_TAG, inter_sim_comm, MPI_STATUS_IGNORE); +} + + +inline void send_i_single_sim(int* i, int dest){ + const int n = 1; + MPI_Send(i, n, MPI_INT, dest, MPI_DUMMY_TAG, inter_sim_comm); +} + + +inline void recv_i_single_sim(int* i, int src){ + const int n = 1; + MPI_Recv(i, n, MPI_INT, src, MPI_DUMMY_TAG, inter_sim_comm, MPI_STATUS_IGNORE); +} + + +inline void send_cr_single_sim(CUSTOMREAL *cr, int dest){ + const int n = 1; + MPI_Send(cr, n, MPI_CR, dest, MPI_DUMMY_TAG, inter_sim_comm); +} + + +inline void recv_cr_single_sim(CUSTOMREAL *cr, int src){ + const int n = 1; + MPI_Recv(cr, n, MPI_CR, src, MPI_DUMMY_TAG, inter_sim_comm, MPI_STATUS_IGNORE); +} + + +inline void send_str_sim(std::string str, int dest){ + const int n = str.size(); + char* cstr = new char[n+1]; + strcpy(cstr, str.c_str()); + MPI_Send(cstr, n, MPI_CHAR, dest, MPI_DUMMY_TAG, inter_sim_comm); + delete[] cstr; +} + + +inline void recv_str_sim(std::string& str, int src){ + MPI_Status status; + int n; + MPI_Probe(src, MPI_DUMMY_TAG, inter_sim_comm, &status); + MPI_Get_count(&status, MPI_CHAR, &n); + char* cstr = new char[n+1]; + MPI_Recv(cstr, n, MPI_CHAR, src, MPI_DUMMY_TAG, inter_sim_comm, MPI_STATUS_IGNORE); + cstr[n] = '\0'; + str = std::string(cstr); + delete[] cstr; +} + + +inline void send_str(std::string str, int dest){ + const int n = str.size(); + char* cstr = new char[n+1]; + strcpy(cstr, str.c_str()); + MPI_Send(cstr, n, MPI_CHAR, dest, MPI_DUMMY_TAG, inter_sub_comm); + delete[] cstr; +} + + +inline void recv_str(std::string& str, int src){ + MPI_Status status; + int n; + MPI_Probe(src, MPI_DUMMY_TAG, inter_sub_comm, &status); + MPI_Get_count(&status, MPI_CHAR, &n); + char* cstr = new char[n+1]; + MPI_Recv(cstr, n, MPI_CHAR, src, MPI_DUMMY_TAG, inter_sub_comm, MPI_STATUS_IGNORE); + cstr[n] = '\0'; + str = std::string(cstr); + delete[] cstr; +} + + +inline void send_cr(CUSTOMREAL *cr, int n, int dest){ + MPI_Send(cr, n, MPI_CR, dest, MPI_DUMMY_TAG, inter_sub_comm); +} + + +inline void recv_cr(CUSTOMREAL *cr, int n, int src){ + MPI_Recv(cr, n, MPI_CR, src, MPI_DUMMY_TAG, inter_sub_comm, MPI_STATUS_IGNORE); +} + +inline void isend_cr(CUSTOMREAL* buf, int count, int dest, MPI_Request& request){ + //MPI_Request request = MPI_REQUEST_NULL; + //std::cout << "sending from : " << inter_sub_rank << ", to : " << dest <<", size : " << count << std::endl; + MPI_Isend(buf, count, MPI_CR, dest, MPI_DUMMY_TAG, inter_sub_comm, &request); +} + +inline void irecv_cr(CUSTOMREAL* buf, int count, int source, MPI_Request& request){ + //MPI_Request request = MPI_REQUEST_NULL; + //std::cout << "receiving by : " << inter_sub_rank << ", from : " << source << ", size : " << count << std::endl; + MPI_Irecv(buf, count, MPI_CR, source, MPI_DUMMY_TAG, inter_sub_comm, &request); +} + +inline void allreduce_i_single(int& value, int& result){ + int count = 1; + MPI_Allreduce(&value, &result, count, MPI_INT, MPI_SUM, inter_sub_comm); +} + +inline void allreduce_i_sim_single_inplace(int& value){ + int count = 1; + MPI_Allreduce(MPI_IN_PLACE, &value, count, MPI_INT, MPI_SUM, inter_sim_comm); +} + +inline void allreduce_cr_single(CUSTOMREAL& loc_buf, CUSTOMREAL& all_buf){ + int count = 1; + MPI_Allreduce(&loc_buf, &all_buf, count, MPI_CR, MPI_SUM, inter_sub_comm); +} + + +inline void allreduce_bool_inplace_inter_sim(bool* loc_buf, int count){ + // return true if any of the processes return true + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_CXX_BOOL, MPI_LOR, inter_sim_comm); +} + + +inline void allreduce_bool_inplace(bool* loc_buf, int count){ + // return true if any of the processes return true + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_CXX_BOOL, MPI_LOR, inter_sub_comm); +} + + +inline void allreduce_bool_inplace_sub(bool* loc_buf, int count){ + // return true if any of the processes return true + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_CXX_BOOL, MPI_LOR, sub_comm); +} + + +inline void allreduce_bool_single_inplace(bool& loc_buf){ + MPI_Allreduce(MPI_IN_PLACE, &loc_buf, 1, MPI_CXX_BOOL, MPI_LAND, inter_sub_comm); +} + +// true if all processes return true else false +inline void allreduce_bool_single_inplace_sim(bool& loc_buf){ + MPI_Allreduce(MPI_IN_PLACE, &loc_buf, 1, MPI_CXX_BOOL, MPI_LAND, inter_sim_comm); +} + +inline void allreduce_i_inplace(int* loc_buf, int count){ + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_INT, MPI_SUM, inter_sub_comm); +} + +inline void allreduce_cr_inplace(CUSTOMREAL* loc_buf, int count){ + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_CR, MPI_SUM, inter_sub_comm); +} + +inline void allreduce_cr_sim(CUSTOMREAL* loc_buf, int count, CUSTOMREAL* all_buf){ + MPI_Allreduce(loc_buf, all_buf, count, MPI_CR, MPI_SUM, inter_sim_comm); +} + +inline void allreduce_cr_sim_single(CUSTOMREAL& loc_buf, CUSTOMREAL& all_buf){ + int count = 1; + MPI_Allreduce(&loc_buf, &all_buf, count, MPI_CR, MPI_SUM, inter_sim_comm); +} + +inline void allreduce_cr_sim_single_inplace(CUSTOMREAL& loc_buf){ + int count = 1; + MPI_Allreduce(MPI_IN_PLACE, &loc_buf, count, MPI_CR, MPI_SUM, inter_sim_comm); +} + +inline void allreduce_cr_sim_inplace(CUSTOMREAL* loc_buf, int count){ + MPI_Allreduce(MPI_IN_PLACE, loc_buf, count, MPI_CR, MPI_SUM, inter_sim_comm); +} + +inline void alleduce_cr_sim_single_inplace(CUSTOMREAL& loc_buf){ + int count = 1; + MPI_Allreduce(MPI_IN_PLACE, &loc_buf, count, MPI_CR, MPI_SUM, inter_sim_comm); +} + +inline void allreduce_cr_single_max(CUSTOMREAL& loc_buf, CUSTOMREAL& all_buf){ + int count = 1; + MPI_Allreduce(&loc_buf, &all_buf, count, MPI_CR, MPI_MAX, inter_sub_comm); +} + +inline void allgather_i_single(int* loc_buf, int* all_buf){ + int count = 1; + MPI_Allgather(loc_buf, count, MPI_INT, all_buf, count, MPI_INT, inter_sub_comm); +} + +inline void allgather_cr_single(CUSTOMREAL* loc_buf, CUSTOMREAL* all_buf){ + int count = 1; + MPI_Allgather(loc_buf, count, MPI_CR, all_buf, count, MPI_CR, inter_sub_comm); +} + +inline void allgather_bool_single(bool* loc_buf, bool* all_buf){ + int count = 1; + MPI_Allgather(loc_buf, count, MPI_CXX_BOOL, all_buf, count, MPI_CXX_BOOL, inter_sub_comm); +} + +inline void broadcast_bool_single(bool& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_CXX_BOOL, root, inter_sub_comm); +} + +inline void broadcast_bool_single_sub(bool& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_CXX_BOOL, root, sub_comm); +} + +inline void broadcast_bool_single_inter_sim(bool& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_CXX_BOOL, root, inter_sim_comm); +} + +inline void broadcast_bool_inter_and_intra_sim(bool& value, int root){ + broadcast_bool_single_inter_sim(value, root); // broadcast among simultaneous run group + broadcast_bool_single(value, root); // broadcast among subdomain group + broadcast_bool_single_sub(value, root); // broadcast within subdomain group +} + +inline void broadcast_i_single(int& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_INT, root, inter_sub_comm); +} + + +inline void broadcast_i_single_inter_sim(int& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_INT, root, inter_sim_comm); +} + +inline void broadcast_i_single_intra_sim(int& value, int root){ + broadcast_i_single(value, root); // broadcast among subdomain group + broadcast_i_single_sub(value, root); // broadcast within subdomain group +} + +inline void broadcast_i_single_inter_and_intra_sim(int& value, int root){ + broadcast_i_single_inter_sim(value, root); // broadcast among simultaneous run group + broadcast_i_single(value, root); // broadcast among subdomain group + broadcast_i_single_sub(value, root); // broadcast within subdomain group +} + +inline void broadcast_f_single(float& value, int root){ // !!!! FOR ONLY READ PARAMETER !!!!! + int count = 1; + MPI_Bcast(&value, count, MPI_FLOAT, root, inter_sub_comm); +} + +inline void broadcast_cr_single(CUSTOMREAL& buf, int root){ + MPI_Bcast(&buf, 1, MPI_CR, root, inter_sub_comm); +} + +inline void broadcast_cr(CUSTOMREAL* buf, int count, int root){ + MPI_Bcast(buf, count, MPI_CR, root, inter_sub_comm); +} + +inline void broadcast_cr_single_inplace(CUSTOMREAL& buf, int root){ + MPI_Bcast(&buf, 1, MPI_CR, root, inter_sub_comm); +} + +inline void broadcast_cr_inter_sim(CUSTOMREAL* buf, int count, int root){ + MPI_Bcast(buf, count, MPI_CR, root, inter_sim_comm); +} + + +inline void broadcast_cr_single_inter_sim(CUSTOMREAL& buf, int root){ + int count = 1; + MPI_Bcast(&buf, count, MPI_CR, root, inter_sim_comm); +} + + +inline void broadcast_cr_single_inter_and_intra_sim(CUSTOMREAL& buf, int root){ + broadcast_cr_single_inter_sim(buf, root); // broadcast among simultaneous run group + broadcast_cr_single(buf, root); // broadcast among subdomain group + broadcast_cr_single_sub(buf, root); // broadcast within subdomain group +} + + +inline void broadcast_i_single_sub(int& value, int root){ + int count = 1; + MPI_Bcast(&value, count, MPI_INT, root, sub_comm); +} + +//inline void broadcast_f_single_sub(float& value, int root){ // !!!! FOR ONLY READ PARAMETER !!!!! +// int count = 1; +// MPI_Bcast(&value, count, MPI_FLOAT, root, sub_comm); +//} + +inline void broadcast_cr_single_sub(CUSTOMREAL& buf, int root){ + int count = 1; + MPI_Bcast(&buf, count, MPI_CR, root, sub_comm); +} + +inline void broadcast_cr_sub(CUSTOMREAL* buf, int count, int root){ + MPI_Bcast(buf, count, MPI_CR, root, sub_comm); +} + +inline void broadcast_str(std::string& str, int root) { + int count = str.size(); + MPI_Bcast(&count, 1, MPI_INT, root, inter_sub_comm); + char* buf = new char[count+1]; + if (root == inter_sub_rank) { + std::strcpy(buf, str.c_str()); + } + MPI_Bcast(buf, count+1, MPI_CHAR, root, inter_sub_comm); + str = buf; + delete[] buf; +} + +inline void broadcast_str_sub(std::string& str, int root) { + int count = str.size(); + MPI_Bcast(&count, 1, MPI_INT, root, sub_comm); + char* buf = new char[count+1]; + if (root == sub_rank) { + std::strcpy(buf, str.c_str()); + } + MPI_Bcast(buf, count+1, MPI_CHAR, root, sub_comm); + str = buf; + delete[] buf; +} + +inline void broadcast_str_inter_sim(std::string& str, int root) { + int count = str.size(); + MPI_Bcast(&count, 1, MPI_INT, root, inter_sim_comm); + char* buf = new char[count+1]; + if (root == inter_sim_rank) { + std::strcpy(buf, str.c_str()); + } + MPI_Bcast(buf, count+1, MPI_CHAR, root, inter_sim_comm); + str = buf; + delete[] buf; +} + +inline void broadcast_str_inter_and_intra_sim(std::string& str, int root) { + broadcast_str_inter_sim(str, root); + broadcast_str(str, root); + broadcast_str_sub(str, root); +} + + +inline void allgather_str(const std::string &str, std::vector &result) { + MPI_Comm comm = MPI_COMM_WORLD; + int size = world_nprocs; + + int str_size = str.size(); + std::vector str_sizes(size); + MPI_Allgather(&str_size, 1, MPI_INT, str_sizes.data(), 1, MPI_INT, comm); + + int total_size = 0; + std::vector displs(size); + for (int i = 0; i < size; i++) { + total_size += str_sizes[i]; + displs[i] = (i == 0) ? 0 : (displs[i - 1] + str_sizes[i - 1]); + } + + std::vector data(total_size); + MPI_Allgatherv(str.data(), str_size, MPI_CHAR, data.data(), str_sizes.data(), displs.data(), MPI_CHAR, comm); + + result.reserve(size); + int start = 0; + for (int i = 0; i < size; i++) { + result[i] = std::string(&data[start], str_sizes[i]); + start += str_sizes[i]; + } + +} + + +inline void prepare_shm_array_cr(int n_elms, CUSTOMREAL* &buf, MPI_Win& win){ + int* model; + int flag; + MPI_Aint winsize_dummy; + int windisp_dummy; + + // Allocate shared memory for the array on only the subdomain's main process (n_elms == 0 for the other processes) + MPI_Win_allocate_shared(n_elms*sizeof(CUSTOMREAL), sizeof(CUSTOMREAL), MPI_INFO_NULL, sub_comm, &buf, &win); + // get attribute + MPI_Win_get_attr(win, MPI_WIN_MODEL, &model, &flag); + // shared query + if (sub_rank != 0){ + MPI_Win_shared_query(win, 0, &winsize_dummy, &windisp_dummy, &buf); + } + + shm_fence(win); +} + +/* +inline void prepare_shm_single_i(int*& value, MPI_Win& win){ + int* model; + int flag; + MPI_Aint winsize_dummy; + int windisp_dummy; + int mpi_size; + if (sub_rank == 0){ + mpi_size = sizeof(int)*1; + } else { + mpi_size = 0; + } + + // Allocate shared memory for the array on only the subdomain's main process (n_elms == 0 for the other processes) + MPI_Win_allocate_shared(mpi_size, sizeof(int), MPI_INFO_NULL, sub_comm, &value, &win); + // get attribute + MPI_Win_get_attr(win, MPI_WIN_MODEL, &model, &flag); + // shared query + if (sub_rank != 0){ + MPI_Win_shared_query(win, 0, &winsize_dummy, &windisp_dummy, &value); + } + + shm_fence(win); +} +*/ +/* +inline void prepare_shm_single_cr(CUSTOMREAL*& value, MPI_Win& win){ + int* model; + int flag; + MPI_Aint winsize_dummy; + int windisp_dummy; + int mpi_size; + if (sub_rank == 0){ + mpi_size = sizeof(CUSTOMREAL)*1; + } else { + mpi_size = 0; + } + + // Allocate shared memory for the array on only the subdomain's main process (n_elms == 0 for the other processes) + MPI_Win_allocate_shared(mpi_size, sizeof(CUSTOMREAL), MPI_INFO_NULL, sub_comm, &value, &win); + // get attribute + MPI_Win_get_attr(win, MPI_WIN_MODEL, &model, &flag); + // shared query + if (sub_rank != 0){ + MPI_Win_shared_query(win, 0, &winsize_dummy, &windisp_dummy, &value); + } + + shm_fence(win); +} +*/ + +inline void prepare_shm_array_bool(int n_elms, bool* &buf, MPI_Win& win){ + int* model; + int flag; + MPI_Aint winsize_dummy; + int windisp_dummy; + + // Allocate shared memory for the array on only the subdomain's main process (n_elms == 0 for the other processes) + MPI_Win_allocate_shared(n_elms*sizeof(bool), sizeof(bool), MPI_INFO_NULL, sub_comm, &buf, &win); + // get attribute + MPI_Win_get_attr(win, MPI_WIN_MODEL, &model, &flag); + // shared query + if (sub_rank != 0){ + MPI_Win_shared_query(win, 0, &winsize_dummy, &windisp_dummy, &buf); + } + + shm_fence(win); +} + + +inline void wait_req(MPI_Request& req){ + MPI_Status status; + MPI_Wait(&req, &status); +} + + +inline void shm_fence(MPI_Win& win){ + MPI_Win_fence(0, win); +} + +// Function to safely free a single MPI window +inline void cleanup_mpi_win(MPI_Win& win) { + if (win != MPI_WIN_NULL) { + int mpi_error = MPI_Win_free(&win); + if (mpi_error != MPI_SUCCESS) { + char error_string[MPI_MAX_ERROR_STRING]; + int length_of_error_string; + MPI_Error_string(mpi_error, error_string, &length_of_error_string); + std::cerr << "ERROR: MPI_Win_free failed with error code " << mpi_error + << ": " << error_string << std::endl; + std::cerr << "This may indicate issues with Intel OneAPI MPI shared memory cleanup." << std::endl; + // Don't call MPI_Abort here as we're likely in cleanup phase + } else { + win = MPI_WIN_NULL; + } + } +} + +// Function to safely free multiple MPI windows +inline void cleanup_mpi_wins(std::initializer_list wins) { + int error_count = 0; + int total_windows = 0; + + for (MPI_Win* win : wins) { + if (win != nullptr) { + total_windows++; + if (*win != MPI_WIN_NULL) { + int mpi_error = MPI_Win_free(win); + if (mpi_error != MPI_SUCCESS) { + error_count++; + char error_string[MPI_MAX_ERROR_STRING]; + int length_of_error_string; + MPI_Error_string(mpi_error, error_string, &length_of_error_string); + std::cerr << "ERROR: MPI_Win_free failed for window " << total_windows + << " with error code " << mpi_error + << ": " << error_string << std::endl; + } else { + *win = MPI_WIN_NULL; + } + } + } + } + + if (error_count > 0) { + std::cerr << "WARNING: " << error_count << " out of " << total_windows + << " MPI windows failed to free properly." << std::endl; + std::cerr << "This may indicate Intel OneAPI MPI shared memory cleanup issues." << std::endl; + } else if (total_windows > 0) { + // Only show success message in verbose mode or for debugging + if (if_verbose && world_rank == 0) { + std::cout << "Successfully freed " << total_windows << " MPI shared memory windows." << std::endl; + } + } +} + +// Function to initialize multiple MPI windows to NULL +inline void init_mpi_wins(std::initializer_list wins) { + int initialized_count = 0; + + for (MPI_Win* win : wins) { + if (win != nullptr) { + *win = MPI_WIN_NULL; + initialized_count++; + } else { + std::cerr << "WARNING: Null pointer passed to init_mpi_wins, skipping." << std::endl; + } + } + + if (if_verbose && world_rank == 0 && initialized_count > 0) { + std::cout << "Initialized " << initialized_count << " MPI windows to MPI_WIN_NULL." << std::endl; + } +} + +// Simple flag to track if MPI windows have been cleaned up +inline bool& get_mpi_windows_cleaned_flag() { + static bool mpi_windows_cleaned = false; + return mpi_windows_cleaned; +} + +// Clean up all MPI windows before MPI_Finalize (called once) +inline void cleanup_all_mpi_windows() { + bool& cleaned = get_mpi_windows_cleaned_flag(); + + if (!cleaned) { + if (world_rank == 0 && if_verbose) { + std::cout << "Cleaning up all MPI windows before MPI_Finalize..." << std::endl; + } + cleaned = true; + + if (world_rank == 0 && if_verbose) { + std::cout << "All MPI windows cleaned up successfully." << std::endl; + } + } +} + + + + +#endif // MPI_FUNCS_H \ No newline at end of file diff --git a/include/objective_function_utils.h b/include/objective_function_utils.h new file mode 100644 index 0000000..49c2899 --- /dev/null +++ b/include/objective_function_utils.h @@ -0,0 +1,181 @@ +#ifndef OBJECTIVE_FUNCTION_UTILS_H +#define OBJECTIVE_FUNCTION_UTILS_H + +#include +#include + +#include "config.h" +#include "input_params.h" + +// prepare header line of objective_funciton.txt +inline void prepare_header_line(InputParams &IP, std::ofstream &out_main) { + // prepare output for iteration status + if(myrank == 0 && id_sim ==0){ + out_main.open(output_dir + "/objective_function.txt"); + if (optim_method == GRADIENT_DESCENT || optim_method == HALVE_STEPPING_MODE){ + + out_main << std::setw(8) << std::right << "# iter,"; + out_main << std::setw(13) << std::right << " type,"; + + // if (optim_method == HALVE_STEPPING_MODE) + // out_main << std::setw(8) << std::right << "subiter,"; (TODO in the future) + std::string tmp = "obj("; + if(IP.get_run_mode() == ONED_INVERSION){ + tmp.append(std::to_string(IP.N_abs_local_data)); // for 1d inversion, only absolute time residual is considered in obj + } else { + tmp.append(std::to_string(IP.N_data)); + } + tmp.append("),"); + out_main << std::setw(20) << tmp; + + tmp = "obj_abs("; + tmp.append(std::to_string(IP.N_abs_local_data)); + tmp.append("),"); + out_main << std::setw(20) << tmp; + + tmp = "obj_cs_dif("; + if (IP.get_is_srcrec_swap()) + tmp.append(std::to_string(IP.N_cr_dif_local_data)); + else + tmp.append(std::to_string(IP.N_cs_dif_local_data)); + tmp.append("),"); + out_main << std::setw(20) << tmp; + + tmp = "obj_cr_dif("; + if (IP.get_is_srcrec_swap()) + tmp.append(std::to_string(IP.N_cs_dif_local_data)); + else + tmp.append(std::to_string(IP.N_cr_dif_local_data)); + tmp.append("),"); + out_main << std::setw(20) << tmp; + + tmp = "obj_tele("; + tmp.append(std::to_string(IP.N_teleseismic_data)); + tmp.append("),"); + out_main << std::setw(20) << tmp; + + out_main << std::setw(25) << "res(mean/std),"; + + out_main << std::setw(25) << "res_abs(mean/std),"; + + out_main << std::setw(25) << "res_cs_dif(mean/std),"; + + out_main << std::setw(25) << "res_cr_dif(mean/std),"; + + out_main << std::setw(25) << "res_tele(mean/std),"; + + out_main << std::setw(20) << "step_length," << std::endl; + + } else if (optim_method == LBFGS_MODE) + out_main << std::setw(6) << "it," << std::setw(6) << "subit," << std::setw(16) << "step_length," << std::setw(16) << "q_0," << std::setw(16) << "q_t," \ + << std::setw(16) << "v_obj_reg," << std::setw(16) << "qp_0," << std::setw(16) << "qp_t," << std::setw(16) << "td," << std::setw(16) << "tg," \ + << std::setw(16) << "c1*qp_0," << std::setw(16) << "c2*qp_0," << std::setw(6) << "step ok," << std::endl; + + } +} + + +inline void write_objective_function(InputParams& IP, int i_inv, std::vector& v_misfit_inout, std::ofstream& out_main, std::string type) { + // output objective function + if (myrank==0 && id_sim==0) { + out_main << std::setw(8) << std::to_string(i_inv)+","; + out_main << std::setw(13) << type; + out_main << "," << std::setw(19) << v_misfit_inout[0]; + out_main << "," << std::setw(19) << v_misfit_inout[1]; + if (IP.get_is_srcrec_swap()) + out_main << "," << std::setw(19) << v_misfit_inout[3]; + else + out_main << "," << std::setw(19) << v_misfit_inout[2]; + if (IP.get_is_srcrec_swap()) + out_main << "," << std::setw(19) << v_misfit_inout[2]; + else + out_main << "," << std::setw(19) << v_misfit_inout[3]; + out_main << "," << std::setw(19) << v_misfit_inout[4]; + // res + CUSTOMREAL mean; + CUSTOMREAL std; + std::string tmp; + if (IP.N_data > 0) { + mean = v_misfit_inout[5]/IP.N_data; + std = sqrt(v_misfit_inout[6]/IP.N_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + // res_abs + if (IP.N_abs_local_data > 0) { + mean = v_misfit_inout[7]/IP.N_abs_local_data; + std = sqrt(v_misfit_inout[8]/IP.N_abs_local_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + if (IP.get_is_srcrec_swap()){ + if (IP.N_cr_dif_local_data > 0) { + mean = v_misfit_inout[11]/IP.N_cr_dif_local_data; + std = sqrt(v_misfit_inout[12]/IP.N_cr_dif_local_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + if (IP.N_cs_dif_local_data > 0) { + mean = v_misfit_inout[9]/IP.N_cs_dif_local_data; + std = sqrt(v_misfit_inout[10]/IP.N_cs_dif_local_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + } else { + if (IP.N_cs_dif_local_data > 0) { + mean = v_misfit_inout[9]/IP.N_cs_dif_local_data; + std = sqrt(v_misfit_inout[10]/IP.N_cs_dif_local_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + if (IP.N_cr_dif_local_data > 0) { + mean = v_misfit_inout[11]/IP.N_cr_dif_local_data; + std = sqrt(v_misfit_inout[12]/IP.N_cr_dif_local_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + } + + if (IP.N_teleseismic_data > 0) { + mean = v_misfit_inout[13]/IP.N_teleseismic_data; + std = sqrt(v_misfit_inout[14]/IP.N_teleseismic_data - my_square(mean)); + tmp = std::to_string(mean); + tmp.append("/"); + tmp.append(std::to_string(std)); + out_main << "," << std::setw(24) << tmp; + } else { + out_main << "," << std::setw(24) << "0.0/0.0"; + } + if(type == "model update" || type == "1d inversion") + out_main << "," << std::setw(19) << step_length_init << ","; + + out_main << std::endl; + } +} + + +#endif // OBJECTIVE_FUNCTION_UTILS_H \ No newline at end of file diff --git a/include/oneD_inversion.h b/include/oneD_inversion.h new file mode 100644 index 0000000..0229eac --- /dev/null +++ b/include/oneD_inversion.h @@ -0,0 +1,109 @@ +#ifndef ONED_INVERSION_H +#define ONED_INVERSION_H + +#include +#include +#include + +#include "input_params.h" +#include "grid.h" +#include "utils.h" +#include "config.h" +#include "receiver.h" + +class OneDInversion { + +public: + OneDInversion(InputParams&, Grid&); + ~OneDInversion(); + + // grid parameters + int nr_1dinv, nt_1dinv; // number of grid points in r and epicenter distance + CUSTOMREAL *r_1dinv, *t_1dinv; // coordinates + CUSTOMREAL dr_1dinv, dt_1dinv; // grid spacing + + // parameters on grid nodes (for model) + CUSTOMREAL *slowness_1dinv; // slowness + CUSTOMREAL *fac_a_1dinv; // fac_a + CUSTOMREAL *fac_b_1dinv; // fac_b + + // parameters on grid nodes (for eikonal solver and adjoint solver) + CUSTOMREAL *tau_1dinv; // tau + CUSTOMREAL *tau_old_1dinv; // tau_old + CUSTOMREAL *T_1dinv; // T + CUSTOMREAL *Tadj_1dinv; // Tadj + CUSTOMREAL *Tadj_density_1dinv; // Tadj + CUSTOMREAL *T0v_1dinv; // T0v + CUSTOMREAL *T0r_1dinv; // T0r + CUSTOMREAL *T0t_1dinv; // T0t + bool *is_changed_1dinv; // is_changed + CUSTOMREAL *delta_1dinv; // delta + + // parameters on grid nodes (for inversion) + CUSTOMREAL *Ks_1dinv; // Ks + CUSTOMREAL *Ks_density_1dinv; // Ks_density + CUSTOMREAL *Ks_over_Kden_1dinv; // Ks_over_Kdensity + CUSTOMREAL *Ks_multigrid_1dinv; // (Ks_over_Kdensity) parameterized by multigrid + CUSTOMREAL *Ks_multigrid_previous_1dinv; // Ks_multigrid at previous iteration + + // parameters for optimization + CUSTOMREAL v_obj; + CUSTOMREAL old_v_obj; + + // functions + std::vector run_simulation_one_step_1dinv(InputParams&, IO_utils&, const int&); + void model_optimize_1dinv(InputParams&, Grid&, IO_utils&, const int&); + + // h5 file output + void write_T_1dinv(IO_utils&, const std::string&, const int&); + void write_Tadj_1dinv(IO_utils&, const std::string&, const int&); + void write_vel_1dinv(IO_utils&, const int&); + +private: + + // for eikonal solver + int count_cand; + int ii,ii_nr,ii_n2r,ii_pr,ii_p2r,ii_nt,ii_n2t,ii_pt,ii_p2t; + CUSTOMREAL ar,br,at,bt,ar1,ar2,at1,at2,br1,br2,bt1,bt2; + CUSTOMREAL eqn_a, eqn_b, eqn_c, eqn_Delta; + CUSTOMREAL tmp_tau, T_r, T_t, charact_r, charact_t; + bool is_causality; + std::vector canditate = std::vector(60); + + + // member functions + // class functions + void generate_2d_mesh(InputParams&); + void deallocate_arrays(); + void allocate_arrays(); + void load_1d_model(Grid&); + int I2V_1DINV(const int&,const int&); + + // "run_simulation_one_step_1dinv" subfunctions: + void eikonal_solver_2d(InputParams&, int& ); + void initialize_eikonal_array(CUSTOMREAL); + void FSM_2d(); + void calculate_stencil(const int&, const int&); + + void calculate_synthetic_traveltime_and_adjoint_source(InputParams&, int& ); + CUSTOMREAL interpolate_2d_traveltime(const CUSTOMREAL&, const CUSTOMREAL&); + + void adjoint_solver_2d(InputParams&, const int&, const int&); + void initialize_adjoint_array(InputParams&, const int&, const int&); + void FSM_2d_adjoint(const int&); + void calculate_stencil_adj(const int&, const int&); + + void initialize_kernel_1d(); + void calculate_kernel_1d(); + + // "model_optimize_1dinv" subfunctions: + void kernel_processing_1dinv(Grid&); + void density_normalization_1dinv(); + void multi_grid_parameterization_1dinv(Grid&); + void model_update_1dinv(const int&); + void determine_step_size_1dinv(const int&); + CUSTOMREAL norm_1dinv(const CUSTOMREAL*, const int&); + void generate_3d_model(Grid&); +}; + +#endif // ONED_INVERSION_H \ No newline at end of file diff --git a/include/receiver.h b/include/receiver.h new file mode 100644 index 0000000..8fbcc83 --- /dev/null +++ b/include/receiver.h @@ -0,0 +1,36 @@ +#ifndef RECEIVER_H +#define RECEIVER_H + +#include +#include "input_params.h" +#include "grid.h" + +class Receiver { +public: + Receiver(); + ~Receiver(); + + void interpolate_and_store_arrival_times_at_rec_position(InputParams&, Grid&, const std::string&); // only for common receiver differential traveltime + + // adjoint source + void calculate_adjoint_source(InputParams&, const std::string&); + // objective function and residual + std::vector calculate_obj_and_residual(InputParams&); + // Gradient of traveltime + void calculate_T_gradient(InputParams&, Grid&, const std::string&); + // initialize variables for source relocation + void init_vars_src_reloc(InputParams&); + // Gradient of objective function + void calculate_grad_obj_src_reloc(InputParams&, const std::string&); + // objective function + std::vector calculate_obj_reloc(InputParams&, int); + // update source location + void update_source_location(InputParams&, Grid&); + +private: + CUSTOMREAL interpolate_travel_time(Grid&, InputParams&, std::string, std::string); + void calculate_T_gradient_one_rec(Grid&, InputParams&, std::string, CUSTOMREAL*); + bool check_if_receiver_is_in_this_subdomain(Grid&, const CUSTOMREAL&, const CUSTOMREAL&, const CUSTOMREAL&); +}; + +#endif // RECEIVER_H \ No newline at end of file diff --git a/include/simd_conf.h b/include/simd_conf.h new file mode 100644 index 0000000..3101acf --- /dev/null +++ b/include/simd_conf.h @@ -0,0 +1,194 @@ +#ifndef SIMD_CONF_H +#define SIMD_CONF_H + +#ifdef USE_SIMD + +// flags for self controling the SIMD usage +#define USE_AVX __AVX__ +#define USE_AVX512 __AVX512F__ +#define USE_ARM_SVE __ARM_FEATURE_SVE +#define USE_NEON __ARM_NEON__ + +// forcely make USE_AVX and USE_AVX512 to be false if USE_ARM_SVE is true +#if USE_ARM_SVE +#undef USE_AVX +#define USE_AVX 0 +#undef USE_AVX512 +#define USE_AVX512 0 +#endif + +#if USE_AVX || USE_AVX512 +#include +#elif USE_ARM_SVE +#include +#elif USE_NEON +#include +#endif + + +#ifdef SINGLE_PRECISION + +#if USE_AVX && !USE_AVX512 +const int ALIGN = 32; +const int NSIMD = 8; +#define __mT __m256 +#define _mmT_set1_pT _mm256_set1_ps +#define _mmT_loadu_pT _mm256_loadu_ps +#define _mmT_mul_pT _mm256_mul_ps +#define _mmT_sub_pT _mm256_sub_ps +#define _mmT_add_pT _mm256_add_ps +#define _mmT_div_pT _mm256_div_ps +#define _mmT_min_pT _mm256_min_ps +#define _mmT_sqrt_pT _mm256_sqrt_ps +#define _mmT_store_pT _mm256_store_ps +#define _mmT_fmadd_pT _mm256_fmadd_ps + +#define _mm256_cmp_pT _mm256_cmp_ps + +#elif USE_AVX512 +const int ALIGN = 64; +const int NSIMD = 16; +#define __mT __m512 +#define _mmT_set1_pT _mm512_set1_ps +#define _mmT_loadu_pT _mm512_loadu_ps +#define _mmT_mul_pT _mm512_mul_ps +#define _mmT_sub_pT _mm512_sub_ps +#define _mmT_add_pT _mm512_add_ps +#define _mmT_div_pT _mm512_div_ps +#define _mmT_min_pT _mm512_min_ps +#define _mmT_max_pT _mm512_max_ps +#define _mmT_sqrt_pT _mm512_sqrt_ps +#define _mmT_store_pT _mm512_store_ps +#define _mmT_fmadd_pT _mm512_fmadd_ps + +#define __mmaskT __mmask16 +#define _mm512_cmp_pT_mask _mm512_cmp_ps_mask +#define _mm512_mask_blend_pT _mm512_mask_blend_ps +#define _kand_maskT _kand_mask16 + + +#elif USE_ARM_SVE // NOT TESTED YET +const int ALIGN = 8*svcntd(); // use svcntw() for float +const int NSIMD = svcntd(); // Vector Length +#define __mT svfloat32_t +//#define _mmT_set1_pT svdup_f64 +//#define _mmT_loadu_pT svld1_f64_f64_f64 +//#define _mmT_mul_pT svmul_f64_m +//#define _mmT_sub_pT svsub_f64_m +//#define _mmT_add_pT svadd_f64_m +//#define _mmT_div_pT svdiv_f64_m +//#define _mmT_min_pT svmin_f64_m +//#define _mmT_sqrt_pT svsqrt_f64_m +//#define _mmT_store_pT svst1_f64 + +#elif USE_NEON +const int ALIGN = 16; +const int NSIMD = 4; +#define __mT float32x4_t +#define _mmT_set1_pT vdupq_n_f32 +#define _mmT_loadu_pT vld1q_f32 +#define _mmT_mul_pT vmulq_f32 +#define _mmT_sub_pT vsubq_f32 +#define _mmT_add_pT vaddq_f32 +#define _mmT_div_pT vdivq_f32 +#define _mmT_min_pT vminq_f32 +#define _mmT_sqrt_pT vsqrtq_f32 +#define _mmT_store_pT vst1q_f32 + +#endif // __ARM_FEATURE_SVE + + +#else // DOUBLE_PRECISION + +#if USE_AVX && !USE_AVX512 +const int ALIGN = 32; +const int NSIMD = 4; +#define __mT __m256d +#define _mmT_set1_pT _mm256_set1_pd +#define _mmT_loadu_pT _mm256_loadu_pd +#define _mmT_mul_pT _mm256_mul_pd +#define _mmT_sub_pT _mm256_sub_pd +#define _mmT_add_pT _mm256_add_pd +#define _mmT_div_pT _mm256_div_pd +#define _mmT_min_pT _mm256_min_pd +#define _mmT_sqrt_pT _mm256_sqrt_pd +#define _mmT_store_pT _mm256_store_pd +#define _mmT_fmadd_pT _mm256_fmadd_pd + +#define _mm256_cmp_pT _mm256_cmp_pd + +#elif USE_AVX512 +const int ALIGN = 64; +const int NSIMD = 8; +#define __mT __m512d +#define _mmT_set1_pT _mm512_set1_pd +#define _mmT_loadu_pT _mm512_loadu_pd +#define _mmT_mul_pT _mm512_mul_pd +#define _mmT_sub_pT _mm512_sub_pd +#define _mmT_add_pT _mm512_add_pd +#define _mmT_div_pT _mm512_div_pd +#define _mmT_min_pT _mm512_min_pd +#define _mmT_max_pT _mm512_max_pd +#define _mmT_sqrt_pT _mm512_sqrt_pd +#define _mmT_store_pT _mm512_store_pd +#define _mmT_fmadd_pT _mm512_fmadd_pd + +#define __mmaskT __mmask8 +#define _mm512_cmp_pT_mask _mm512_cmp_pd_mask +#define _mm512_mask_blend_pT _mm512_mask_blend_pd +#define _kand_maskT _kand_mask8 + + +#elif USE_ARM_SVE +const int ALIGN = 8*svcntd(); // use svcntw() for float +const int NSIMD = svcntd(); // Vector Length +#define __mT svfloat64_t +//#define _mmT_set1_pT svdup_f64 +//#define _mmT_loadu_pT svld1_f64_f64_f64 +//#define _mmT_mul_pT svmul_f64_m +//#define _mmT_sub_pT svsub_f64_m +//#define _mmT_add_pT svadd_f64_m +//#define _mmT_div_pT svdiv_f64_m +//#define _mmT_min_pT svmin_f64_m +//#define _mmT_sqrt_pT svsqrt_f64_m +//#define _mmT_store_pT svst1_f64 + +#elif USE_NEON +const int ALIGN = 16; +const int NSIMD = 2; +#define __mT float64x2_t +#define _mmT_set1_pT vdupq_n_f64 +#define _mmT_loadu_pT vld1q_f64 +#define _mmT_mul_pT vmulq_f64 +#define _mmT_sub_pT vsubq_f64 +#define _mmT_add_pT vaddq_f64 +#define _mmT_div_pT vdivq_f64 +#define _mmT_min_pT vminq_f64 +#define _mmT_sqrt_pT vsqrtq_f64 +#define _mmT_store_pT vst1q_f64 + +#endif // __ARM_FEATURE_SVE + +#endif // DOUBLE_PRECISION + +inline void print_simd_type() { + std::cout << "SIMD type: "; +#if USE_AVX && !USE_AVX512 + std::cout << "AVX" << std::endl; +#elif USE_AVX512 + std::cout << "AVX512" << std::endl; +#elif USE_ARM_SVE + std::cout << "ARM SVE" << std::endl; +#elif USE_NEON + std::cout << "NEON" << std::endl; +#endif // __ARM_FEATURE_SVE +} + +#else // USE_CUDA but not AVX dummy +const int ALIGN = 32; +const int NSIMD = 4; +#endif // USE_SIMD + + + +#endif // SIMD_CONF_H \ No newline at end of file diff --git a/include/smooth.h b/include/smooth.h new file mode 100644 index 0000000..b39605d --- /dev/null +++ b/include/smooth.h @@ -0,0 +1,773 @@ +#ifndef SMOOTH_H +#define SMOOTH_H + +#include +#include "grid.h" +#include "config.h" +#include "utils.h" + +void calc_inversed_laplacian(CUSTOMREAL* d, CUSTOMREAL* Ap, + const int i, const int j, const int k, + const CUSTOMREAL lr, const CUSTOMREAL lt, const CUSTOMREAL lp, + const CUSTOMREAL dr, const CUSTOMREAL dt, const CUSTOMREAL dp) { + // calculate inversed laplacian operator + CUSTOMREAL termx = _0_CR, termy = _0_CR, termz = _0_CR; + + if (i==0) { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i+1,j,k)])); + } else if (i==loc_I-1) { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i-1,j,k)])); + } else { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+d[I2V(i-1,j,k)]+d[I2V(i+1,j,k)])); + } + + if (j==0) { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i,j+1,k)])); + } else if (j==loc_J-1) { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i,j-1,k)])); + } else { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+d[I2V(i,j-1,k)]+d[I2V(i,j+1,k)])); + } + + if (k==0) { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i,j,k+1)])); + } else if (k==loc_K-1) { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+2.0*d[I2V(i,j,k-1)])); + } else { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+d[I2V(i,j,k-1)]+d[I2V(i,j,k+1)])); + } + + Ap[I2V(i,j,k)] = termx+termy+termz; +} + + + +void CG_smooth(Grid& grid, CUSTOMREAL* arr_in, CUSTOMREAL* arr_out, CUSTOMREAL lr, CUSTOMREAL lt, CUSTOMREAL lp) { + // arr: array to be smoothed + // lr: smooth length on r + // lt: smooth length on theta + // lp: smooth length on phi + + // arrays : + // x_array model + // g_array gradient + // d_array descent direction + // Ap stiffness scalar (laplacian) + // pAp = d_array*Ap + // rr = g_array * g_array (dot product) + + const int max_iter_cg = 1000; + const CUSTOMREAL xtol = 0.001; + const bool use_scaling = true; + + CUSTOMREAL dr=grid.dr, dt=grid.dt, dp=grid.dp; // in km, rad, rad + //CUSTOMREAL dr=_1_CR,dt=_1_CR,dp=_1_CR; + //debug + std::cout << "dr, dt, dp, lr, lt, lp = " << dr << " " << dt << " " << dp << " " << lr << " " << lt << " " << lp << std::endl; + + // allocate memory + CUSTOMREAL* x_array = allocateMemory(loc_I*loc_J*loc_K, 3000); + CUSTOMREAL* r_array = allocateMemory(loc_I*loc_J*loc_K, 3001); + CUSTOMREAL* p_array = allocateMemory(loc_I*loc_J*loc_K, 3002); + CUSTOMREAL* Ap = allocateMemory(loc_I*loc_J*loc_K, 3003); + CUSTOMREAL pAp=_0_CR, rr_0=_0_CR, rr=_0_CR, rr_new=_0_CR, aa=_0_CR, bb=_0_CR, tmp=_0_CR; + + CUSTOMREAL scaling_A=_1_CR, scaling_coeff = _1_CR; + + if (use_scaling) { + // calculate scaling factor + //scaling_A = std::sqrt(_1_CR / (_8_CR * PI * lr * lt * lp)); + // scaling coefficient for gradient + scaling_coeff = find_absmax(arr_in, loc_I*loc_J*loc_K); + tmp = scaling_coeff; + allreduce_cr_single_max(tmp, scaling_coeff); + //if (scaling_coeff == _0_CR) + if (isZero(scaling_coeff)) + scaling_coeff = _1_CR; + } + // std out scaling factors + if (myrank == 0) { + std::cout << "scaling_A = " << scaling_A << std::endl; + std::cout << "scaling_coeff = " << scaling_coeff << std::endl; + } + + + // array initialization + for (int i=0; ir.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + r_r = calc_ratio_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + + r_r_ani = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc_ani-1; ii_invr++){ + // increasing or decreasing order + if (in_between(r_glob, grid.inv_grid->r_ani.arr[I2V_INV_ANI_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r_ani.arr[I2V_INV_ANI_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr_ani = ii_invr; + r_r_ani = calc_ratio_between(r_glob, grid.inv_grid->r_ani.arr[I2V_INV_ANI_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r_ani.arr[I2V_INV_ANI_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + // depth model update taper + CUSTOMREAL depth = radius2depth(r_glob); + if (depth < taper[0]) { // weight = 0; + weight = _0_CR; + } else if (depth < taper[1]) { + weight = (_1_CR - std::cos(PI*(depth - taper[0])/(taper[1] - taper[0]))) / _2_CR; + } else { + weight = _1_CR; + } + + // continue if r is out of the inversion grid + if (r_r < _0_CR || r_r_ani < _0_CR) continue; + + for (int j = j_start; j < j_end; j++) { + CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + r_t = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr+1,i_grid)]*(r_r); + if (in_between(t_glob, left, right)) { + jdt = ii_invt; + r_t = calc_ratio_between(t_glob, left, right); + break; + } + } + + r_t_ani = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc_ani-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t_ani.arr[I2V_INV_ANI_GRIDS_1DJ(ii_invt, kdr_ani,i_grid)]*(1-r_r_ani) + grid.inv_grid->t_ani.arr[I2V_INV_ANI_GRIDS_1DJ(ii_invt, kdr_ani+1,i_grid)]*(r_r_ani); + CUSTOMREAL right = grid.inv_grid->t_ani.arr[I2V_INV_ANI_GRIDS_1DJ(ii_invt+1,kdr_ani,i_grid)]*(1-r_r_ani) + grid.inv_grid->t_ani.arr[I2V_INV_ANI_GRIDS_1DJ(ii_invt+1,kdr_ani+1,i_grid)]*(r_r_ani); + if (in_between(t_glob, left, right)) { + jdt_ani = ii_invt; + r_t_ani = calc_ratio_between(t_glob, left, right); + break; + } + } + + // continue if t is out of the inversion grid + if (r_t < _0_CR || r_t_ani < _0_CR) continue; + + for (int i = i_start; i < i_end; i++) { + CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + r_p = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr+1,i_grid)]*(r_r); + if (in_between(p_glob, left, right)) { + idp = ii_invp; + r_p = calc_ratio_between(p_glob, left, right); + break; + } + } + + r_p_ani = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc_ani-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p_ani.arr[I2V_INV_ANI_GRIDS_1DI(ii_invp, kdr_ani,i_grid)]*(1-r_r_ani) + grid.inv_grid->p_ani.arr[I2V_INV_ANI_GRIDS_1DI(ii_invp, kdr_ani+1,i_grid)]*(r_r_ani); + CUSTOMREAL right = grid.inv_grid->p_ani.arr[I2V_INV_ANI_GRIDS_1DI(ii_invp+1,kdr_ani,i_grid)]*(1-r_r_ani) + grid.inv_grid->p_ani.arr[I2V_INV_ANI_GRIDS_1DI(ii_invp+1,kdr_ani+1,i_grid)]*(r_r_ani); + if (in_between(p_glob, left, right)) { + idp_ani = ii_invp; + r_p_ani = calc_ratio_between(p_glob, left, right); + break; + } + } + + // continue if p is out of the inversion grid + if (r_p < _0_CR || r_p_ani < _0_CR) continue; + + // global grid id to local id + int k_loc = k - grid.get_offset_k(); + int j_loc = j - grid.get_offset_j(); + int i_loc = i - grid.get_offset_i(); + + // check if *_loc are inside the local subdomain + if (k_loc < 0 || k_loc > loc_K-1) continue; + if (j_loc < 0 || j_loc > loc_J-1) continue; + if (i_loc < 0 || i_loc > loc_I-1) continue; + + CUSTOMREAL pert_Ks = 0.0; + CUSTOMREAL pert_Keta = 0.0; + CUSTOMREAL pert_Kxi = 0.0; + CUSTOMREAL pert_Ks_density = 0.0; + CUSTOMREAL pert_Keta_density = 0.0; + CUSTOMREAL pert_Kxi_density = 0.0; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + pert_Keta += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani)]; + pert_Kxi += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani)]; + pert_Ks_density += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + pert_Keta_density += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani)]; + pert_Kxi_density += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani)]; + + pert_Ks += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Keta += r_r_ani*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani+1)]; + pert_Kxi += r_r_ani*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani+1)]; + pert_Ks_density += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Keta_density += r_r_ani*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani+1)]; + pert_Kxi_density += r_r_ani*(_1_CR-r_t_ani)*(_1_CR-r_p_ani)*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani,kdr_ani+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r_ani)*r_t_ani*(_1_CR-r_p_ani)*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani)]; + pert_Kxi += (_1_CR-r_r_ani)*r_t_ani*(_1_CR-r_p_ani)*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani)]; + pert_Ks_density += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Keta_density = (_1_CR-r_r_ani)*r_t_ani*(_1_CR-r_p_ani)*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani)]; + pert_Kxi_density += (_1_CR-r_r_ani)*r_t_ani*(_1_CR-r_p_ani)*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani)]; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Keta += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*r_p_ani*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani)]; + pert_Kxi += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*r_p_ani*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani)]; + pert_Ks_density += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Keta_density += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*r_p_ani*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani)]; + pert_Kxi_density += (_1_CR-r_r_ani)*(_1_CR-r_t_ani)*r_p_ani*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani)]; + + pert_Ks += r_r*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Keta += r_r_ani*r_t_ani*(_1_CR-r_p_ani)*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani+1)]; + pert_Kxi += r_r_ani*r_t_ani*(_1_CR-r_p_ani)*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani+1)]; + pert_Ks_density += r_r*r_t*(_1_CR-r_p)*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Keta_density += r_r_ani*r_t_ani*(_1_CR-r_p_ani)*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani+1)]; + pert_Kxi_density += r_r_ani*r_t_ani*(_1_CR-r_p_ani)*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani,jdt_ani+1,kdr_ani+1)]; + + pert_Ks += r_r*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Keta += r_r_ani*(_1_CR-r_t_ani)*r_p_ani*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani+1)]; + pert_Kxi += r_r_ani*(_1_CR-r_t_ani)*r_p_ani*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani+1)]; + pert_Ks_density += r_r*(_1_CR-r_t)*r_p*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Keta_density += r_r_ani*(_1_CR-r_t_ani)*r_p_ani*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani+1)]; + pert_Kxi_density += r_r_ani*(_1_CR-r_t_ani)*r_p_ani*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani,kdr_ani+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r_ani)*r_t_ani*r_p_ani*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani)]; + pert_Kxi += (_1_CR-r_r_ani)*r_t_ani*r_p_ani*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani)]; + pert_Ks_density += (_1_CR-r_r)*r_t*r_p*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Keta_density += (_1_CR-r_r_ani)*r_t_ani*r_p_ani*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani)]; + pert_Kxi_density += (_1_CR-r_r_ani)*r_t_ani*r_p_ani*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani)]; + + pert_Ks += r_r*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Keta += r_r_ani*r_t_ani*r_p_ani*grid.Keta_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani+1)]; + pert_Kxi += r_r_ani*r_t_ani*r_p_ani*grid.Kxi_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani+1)]; + pert_Ks_density += r_r*r_t*r_p*grid.Ks_density_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Keta_density += r_r_ani*r_t_ani*r_p_ani*grid.Keta_density_inv_loc[I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani+1)]; + pert_Kxi_density += r_r_ani*r_t_ani*r_p_ani*grid.Kxi_density_inv_loc[ I2V_INV_ANI_KNL(idp_ani+1,jdt_ani+1,kdr_ani+1)]; + + // update para + grid.Ks_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Ks; + grid.Keta_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Keta; + grid.Kxi_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Kxi; + grid.Ks_density_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Ks_density; + grid.Keta_density_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Keta_density; + grid.Kxi_density_update_loc[ I2V(i_loc,j_loc,k_loc)] += weight * pert_Kxi_density; + + } // end for i + } // end for j + } // end for k + + } // end i_grid + + + // + // rescale kernel update to -1 ~ 1 + // + // get the scaling factor + CUSTOMREAL Linf_Ks = _0_CR, Linf_Keta = _0_CR, Linf_Kxi = _0_CR; + // CUSTOMREAL Linf_Kden = _0_CR; + for (int k = 1; k < loc_K-1; k++) { + for (int j = 1; j < loc_J-1; j++) { + for (int i = 1; i < loc_I-1; i++) { + Linf_Ks = std::max(Linf_Ks, std::abs(grid.Ks_update_loc[I2V(i,j,k)])); + Linf_Keta = std::max(Linf_Keta, std::abs(grid.Keta_update_loc[I2V(i,j,k)])); + Linf_Kxi = std::max(Linf_Kxi, std::abs(grid.Kxi_update_loc[I2V(i,j,k)])); + } + } + } + + // get the maximum scaling factor among subdomains + CUSTOMREAL Linf_tmp; + allreduce_cr_single_max(Linf_Ks, Linf_tmp); Linf_Ks = Linf_tmp; + allreduce_cr_single_max(Linf_Keta, Linf_tmp); Linf_Keta = Linf_tmp; + allreduce_cr_single_max(Linf_Kxi, Linf_tmp); Linf_Kxi = Linf_tmp; + + CUSTOMREAL Linf_all = _0_CR; + Linf_all = std::max(Linf_Ks, std::max(Linf_Keta, Linf_Kxi)); + + Linf_Ks = Linf_all; + Linf_Keta = Linf_all; + Linf_Kxi = Linf_all; + + // rescale the kernel update + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.Ks_update_loc[I2V(i,j,k)] /= Linf_Ks; + grid.Keta_update_loc[I2V(i,j,k)] /= Linf_Keta; + grid.Kxi_update_loc[I2V(i,j,k)] /= Linf_Kxi; + } + } + } +} + + +#endif \ No newline at end of file diff --git a/include/smooth_descent_dir.h b/include/smooth_descent_dir.h new file mode 100644 index 0000000..38c1b55 --- /dev/null +++ b/include/smooth_descent_dir.h @@ -0,0 +1,319 @@ +#ifndef SMOOTH_DESCENT_DIR_H +#define SMOOTH_DESCENT_DIR_H + +#include +#include "grid.h" +#include "config.h" +#include "smooth.h" + + +inline void smooth_descent_dir_CG(Grid& grid, const CUSTOMREAL lr, const CUSTOMREAL lt, const CUSTOMREAL lp) { + // smoothing kernels with Conjugate Gradient method + // lr,lt,lp: smoothing length in r, theta, phi direction + + // smooth Ks + CG_smooth(grid, grid.Ks_descent_dir_loc, grid.Ks_descent_dir_loc, lr, lt, lp); + // smooth Keta + CG_smooth(grid, grid.Keta_descent_dir_loc, grid.Keta_descent_dir_loc, lr, lt, lp); + // smooth Kxi + CG_smooth(grid, grid.Kxi_descent_dir_loc, grid.Kxi_descent_dir_loc, lr, lt, lp); + +} + + +// original method for smoothing kernels +inline void smooth_descent_dir(Grid& grid){ + // necessary params + CUSTOMREAL r_r, r_t, r_p; + int kdr, jdt, idp; + + int k_start = 0; + int j_start = 0; + int i_start = 0; + int k_end = ngrid_k; + int j_end = ngrid_j; + int i_end = ngrid_i; + + // + // sum the kernel values on the inversion grid + // + + for (int i_grid = 0; i_grid < n_inv_grids; i_grid++) { + + // init coarser kernel arrays + for (int k = 0; k < n_inv_K_loc; k++) { + for (int j = 0; j < n_inv_J_loc; j++) { + for (int i = 0; i < n_inv_I_loc; i++) { + grid.Ks_inv_loc[ I2V_INV_KNL(i,j,k)] = _0_CR; + grid.Keta_inv_loc[I2V_INV_KNL(i,j,k)] = _0_CR; + grid.Kxi_inv_loc[ I2V_INV_KNL(i,j,k)] = _0_CR; + } + } + } + + for (int k = k_start; k < k_end; k++) { + // CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + // r_r = -_1_CR; + // for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // if (r_glob > grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)] && r_glob <= grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]) { + // kdr = ii_invr; + // r_r = (r_glob - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]) / (grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)] - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]); + // break; + // } + // } + CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + r_r = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // increasing or decreasing order + if (in_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + r_r = calc_ratio_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + // continue if r is out of the inversion grid + if (r_r < 0) continue; + + for (int j = j_start; j < j_end; j++) { + // CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + // r_t = -_1_CR; + // for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + // if (t_glob > grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)] && t_glob <= grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)]) { + // jdt = ii_invt; + // r_t = (t_glob - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]) / (grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)] - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]); + // break; + // } + // } + CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); // global coordinate of t (latitude) + r_t = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr+1,i_grid)]*(r_r); + if (in_between(t_glob, left, right)) { + jdt = ii_invt; + r_t = calc_ratio_between(t_glob, left, right); + break; + } + } + + // continue if t is out of the inversion grid + if (r_t < 0) continue; + + for (int i = i_start; i < i_end; i++) { + // CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + // r_p = -_1_CR; + // for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + // if (p_glob > grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)] && p_glob <= grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)]) { + // idp = ii_invp; + // r_p = (p_glob - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]) / (grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)] - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]); + // break; + // } + // } + CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); // global coordinate of p (longitude) + r_p = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(r_r); + if (in_between(p_glob, left, right)) { + idp = ii_invp; + r_p = calc_ratio_between(p_glob, left, right); + break; + } + } + + // continue if p is out of the inversion grid + if (r_p < 0) continue; + + // global grid id to local id + int k_loc = k - grid.get_offset_k(); + int j_loc = j - grid.get_offset_j(); + int i_loc = i - grid.get_offset_i(); + + // check if *_loc are inside the local subdomain + if (k_loc < 0 || k_loc > loc_K-1) continue; + if (j_loc < 0 || j_loc > loc_J-1) continue; + if (i_loc < 0 || i_loc > loc_I-1) continue; + + // update Ks_inv Keta_inv Kxi_inv + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)]; + + } // end for i + } // end for j + } // end for k + + // sum over all sub-domains + allreduce_cr_inplace(grid.Ks_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + allreduce_cr_inplace(grid.Keta_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + allreduce_cr_inplace(grid.Kxi_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + + // + // update factors + // + for (int k = k_start; k < k_end; k++) { + // CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + // r_r = -_1_CR; + // for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // if (r_glob > grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)] && r_glob <= grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]) { + // kdr = ii_invr; + // r_r = (r_glob - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]) / (grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)] - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]); + // break; + // } + // } + CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + r_r = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + if (in_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + r_r = calc_ratio_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + + // continue if r is out of the inversion grid + if (r_r < 0) continue; + + for (int j = j_start; j < j_end; j++) { + // CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + // r_t = -_1_CR; + // for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + // if (t_glob > grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)] && t_glob <= grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)]) { + // jdt = ii_invt; + // r_t = (t_glob - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]) / (grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)] - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]); + // break; + // } + // } + CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + r_t = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr+1,i_grid)]*(r_r); + if (in_between(t_glob, left, right)) { + jdt = ii_invt; + r_t = calc_ratio_between(t_glob, left, right); + break; + } + } + + + // continue if t is out of the inversion grid + if (r_t < 0) continue; + + for (int i = i_start; i < i_end; i++) { + // CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + // r_p = -_1_CR; + // for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + // if (p_glob > grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)] && p_glob <= grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)]) { + // idp = ii_invp; + // r_p = (p_glob - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]) / (grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)] - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]); + // break; + // } + // } + CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + r_p = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(r_r); + if (in_between(p_glob, left, right)) { + idp = ii_invp; + r_p = calc_ratio_between(p_glob, left, right); + break; + } + } + + // continue if p is out of the inversion grid + if (r_p < 0) continue; + + // global grid id to local id + int k_loc = k - grid.get_offset_k(); + int j_loc = j - grid.get_offset_j(); + int i_loc = i - grid.get_offset_i(); + + // check if *_loc are inside the local subdomain + if (k_loc < 0 || k_loc > loc_K-1) continue; + if (j_loc < 0 || j_loc > loc_J-1) continue; + if (i_loc < 0 || i_loc > loc_I-1) continue; + + CUSTOMREAL pert_Ks = 0.0; + CUSTOMREAL pert_Keta = 0.0; + CUSTOMREAL pert_Kxi = 0.0; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + pert_Keta += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr)]; + pert_Kxi += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + + pert_Ks += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Keta += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Kxi += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Kxi += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Keta += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Kxi += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + + pert_Ks += r_r*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Keta += r_r*r_t*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Kxi += r_r*r_t*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + + pert_Ks += r_r*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Keta += r_r*(_1_CR-r_t)*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Kxi += r_r*(_1_CR-r_t)*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r)*r_t*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Kxi += (_1_CR-r_r)*r_t*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + + pert_Ks += r_r*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Keta += r_r*r_t*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Kxi += r_r*r_t*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + + + // update para + grid.Ks_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)] += pert_Ks; + grid.Keta_descent_dir_loc[I2V(i_loc,j_loc,k_loc)] += pert_Keta; + grid.Kxi_descent_dir_loc[ I2V(i_loc,j_loc,k_loc)] += pert_Kxi; + + + } // end for i + } // end for j + } // end for k + + } // end i_grid + +} + + + +#endif \ No newline at end of file diff --git a/include/smooth_grad_regul.h b/include/smooth_grad_regul.h new file mode 100644 index 0000000..bc1db58 --- /dev/null +++ b/include/smooth_grad_regul.h @@ -0,0 +1,321 @@ +#ifndef SMOOTH_GRAD_REGUL_H +#define SMOOTH_GRAD_REGUL_H + +#include +#include "grid.h" +#include "config.h" +#include "smooth.h" + +inline void smooth_gradient_regularization_CG(Grid& grid, const CUSTOMREAL lr, const CUSTOMREAL lt, const CUSTOMREAL lp) { + // smoothing kernels with Conjugate Gradient method + // lr,lt,lp: smoothing length in r, theta, phi direction + + // smooth Ks + CG_smooth(grid, grid.fun_gradient_regularization_penalty_loc, \ + grid.fun_gradient_regularization_penalty_loc, lr, lt, lp); + // smooth Keta + CG_smooth(grid, grid.eta_gradient_regularization_penalty_loc, \ + grid.eta_gradient_regularization_penalty_loc, lr, lt, lp); + // smooth Kxi + CG_smooth(grid, grid.xi_gradient_regularization_penalty_loc, \ + grid.xi_gradient_regularization_penalty_loc, lr, lt, lp); + +} + +// original method for smoothing kernels +inline void smooth_gradient_regularization_orig(Grid& grid){ + // necessary params + CUSTOMREAL r_r, r_t, r_p; + int kdr, jdt, idp; + + int k_start = 0; + int j_start = 0; + int i_start = 0; + int k_end = ngrid_k; + int j_end = ngrid_j; + int i_end = ngrid_i; + + // + // sum the kernel values on the inversion grid + // + + for (int i_grid = 0; i_grid < n_inv_grids; i_grid++) { + + // init coarser kernel arrays + for (int k = 0; k < n_inv_K_loc; k++) { + for (int j = 0; j < n_inv_J_loc; j++) { + for (int i = 0; i < n_inv_I_loc; i++) { + grid.Ks_inv_loc[ I2V_INV_KNL(i,j,k)] = _0_CR; + grid.Keta_inv_loc[I2V_INV_KNL(i,j,k)] = _0_CR; + grid.Kxi_inv_loc[ I2V_INV_KNL(i,j,k)] = _0_CR; + } + } + } + + for (int k = k_start; k < k_end; k++) { + // CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + // r_r = -_1_CR; + // for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // if (r_glob > grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)] && r_glob <= grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]) { + // kdr = ii_invr; + // r_r = (r_glob - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]) / (grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)] - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]); + // break; + // } + // } + CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + r_r = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // increasing or decreasing order + if (in_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + r_r = calc_ratio_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + + // continue if r is out of the inversion grid + if (r_r < 0) continue; + + for (int j = j_start; j < j_end; j++) { + // CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + // r_t = -_1_CR; + // for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + // if (t_glob > grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)] && t_glob <= grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)]) { + // jdt = ii_invt; + // r_t = (t_glob - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]) / (grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)] - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]); + // break; + // } + // } + CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); // global coordinate of t (latitude) + r_t = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr+1,i_grid)]*(r_r); + if (in_between(t_glob, left, right)) { + jdt = ii_invt; + r_t = calc_ratio_between(t_glob, left, right); + break; + } + } + + // continue if t is out of the inversion grid + if (r_t < 0) continue; + + for (int i = i_start; i < i_end; i++) { + // CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + // r_p = -_1_CR; + // for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + // if (p_glob > grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)] && p_glob <= grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)]) { + // idp = ii_invp; + // r_p = (p_glob - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]) / (grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)] - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]); + // break; + // } + // } + CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); // global coordinate of p (longitude) + r_p = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(r_r); + if (in_between(p_glob, left, right)) { + idp = ii_invp; + r_p = calc_ratio_between(p_glob, left, right); + break; + } + } + + // continue if p is out of the inversion grid + if (r_p < 0) continue; + + // global grid id to local id + int k_loc = k - grid.get_offset_k(); + int j_loc = j - grid.get_offset_j(); + int i_loc = i - grid.get_offset_i(); + + // check if *_loc are inside the local subdomain + if (k_loc < 0 || k_loc > loc_K-1) continue; + if (j_loc < 0 || j_loc > loc_J-1) continue; + if (i_loc < 0 || i_loc > loc_I-1) continue; + + // update Ks_inv Keta_inv Kxi_inv + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)] += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)] += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)] += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)] += r_r*r_t*(_1_CR-r_p)*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)] += r_r*(_1_CR-r_t)*r_p*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)] += (_1_CR-r_r)*r_t*r_p*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)]; + grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)] += r_r*r_t*r_p*grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)]; + + } // end for i + } // end for j + } // end for k + + // sum over all sub-domains + allreduce_cr_inplace(grid.Ks_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + allreduce_cr_inplace(grid.Keta_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + allreduce_cr_inplace(grid.Kxi_inv_loc, n_inv_I_loc*n_inv_J_loc*n_inv_K_loc); + + // + // update factors + // + for (int k = k_start; k < k_end; k++) { + // CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + // r_r = -_1_CR; + // for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // if (r_glob > grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)] && r_glob <= grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]) { + // kdr = ii_invr; + // r_r = (r_glob - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]) / (grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)] - grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)]); + // break; + // } + // } + CUSTOMREAL r_glob = grid.get_r_min() + k*grid.get_delta_r(); // global coordinate of r + r_r = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // increasing or decreasing order + if (in_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + r_r = calc_ratio_between(r_glob, grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + + // continue if r is out of the inversion grid + if (r_r < 0) continue; + + for (int j = j_start; j < j_end; j++) { + // CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); + // r_t = -_1_CR; + // for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + // if (t_glob > grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)] && t_glob <= grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)]) { + // jdt = ii_invt; + // r_t = (t_glob - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]) / (grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,i_grid)] - grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt,i_grid)]); + // break; + // } + // } + CUSTOMREAL t_glob = grid.get_lat_min() + j*grid.get_delta_lat(); // global coordinate of t (latitude) + r_t = -_1_CR; + for (int ii_invt = 0; ii_invt < n_inv_J_loc-1; ii_invt++){ + CUSTOMREAL left = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt, kdr+1,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->t.arr[I2V_INV_GRIDS_2DJ(ii_invt+1,kdr+1,i_grid)]*(r_r); + if (in_between(t_glob, left, right)) { + jdt = ii_invt; + r_t = calc_ratio_between(t_glob, left, right); + break; + } + } + + // continue if t is out of the inversion grid + if (r_t < 0) continue; + + for (int i = i_start; i < i_end; i++) { + // CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); + // r_p = -_1_CR; + // for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + // if (p_glob > grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)] && p_glob <= grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)]) { + // idp = ii_invp; + // r_p = (p_glob - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]) / (grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,i_grid)] - grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp,i_grid)]); + // break; + // } + // } + CUSTOMREAL p_glob = grid.get_lon_min() + i*grid.get_delta_lon(); // global coordinate of p (longitude) + r_p = -_1_CR; + for (int ii_invp = 0; ii_invp < n_inv_I_loc-1; ii_invp++){ + CUSTOMREAL left = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp, kdr,i_grid)]*(r_r); + CUSTOMREAL right = grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(1-r_r) + grid.inv_grid->p.arr[I2V_INV_GRIDS_2DI(ii_invp+1,kdr,i_grid)]*(r_r); + if (in_between(p_glob, left, right)) { + idp = ii_invp; + r_p = calc_ratio_between(p_glob, left, right); + break; + } + } + + // continue if p is out of the inversion grid + if (r_p < 0) continue; + + // global grid id to local id + int k_loc = k - grid.get_offset_k(); + int j_loc = j - grid.get_offset_j(); + int i_loc = i - grid.get_offset_i(); + + // check if *_loc are inside the local subdomain + if (k_loc < 0 || k_loc > loc_K-1) continue; + if (j_loc < 0 || j_loc > loc_J-1) continue; + if (i_loc < 0 || i_loc > loc_I-1) continue; + + CUSTOMREAL pert_Ks = 0.0; + CUSTOMREAL pert_Keta = 0.0; + CUSTOMREAL pert_Kxi = 0.0; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + pert_Keta += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr)]; + pert_Kxi += (_1_CR-r_r)*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr)]; + + pert_Ks += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Keta += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt,kdr+1)]; + pert_Kxi += r_r*(_1_CR-r_t)*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt,kdr+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr)]; + pert_Kxi += (_1_CR-r_r)*r_t*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr)]; + + pert_Ks += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Keta += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr)]; + pert_Kxi += (_1_CR-r_r)*(_1_CR-r_t)*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr)]; + + pert_Ks += r_r*r_t*(_1_CR-r_p)*grid.Ks_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Keta += r_r*r_t*(_1_CR-r_p)*grid.Keta_inv_loc[I2V_INV_KNL(idp,jdt+1,kdr+1)]; + pert_Kxi += r_r*r_t*(_1_CR-r_p)*grid.Kxi_inv_loc[ I2V_INV_KNL(idp,jdt+1,kdr+1)]; + + pert_Ks += r_r*(_1_CR-r_t)*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Keta += r_r*(_1_CR-r_t)*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt,kdr+1)]; + pert_Kxi += r_r*(_1_CR-r_t)*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt,kdr+1)]; + + pert_Ks += (_1_CR-r_r)*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Keta += (_1_CR-r_r)*r_t*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr)]; + pert_Kxi += (_1_CR-r_r)*r_t*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr)]; + + pert_Ks += r_r*r_t*r_p*grid.Ks_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Keta += r_r*r_t*r_p*grid.Keta_inv_loc[I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + pert_Kxi += r_r*r_t*r_p*grid.Kxi_inv_loc[ I2V_INV_KNL(idp+1,jdt+1,kdr+1)]; + + + // update para + grid.fun_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)] += pert_Ks; + grid.eta_gradient_regularization_penalty_loc[I2V(i_loc,j_loc,k_loc)] += pert_Keta; + grid.xi_gradient_regularization_penalty_loc[ I2V(i_loc,j_loc,k_loc)] += pert_Kxi; + + + } // end for i + } // end for j + } // end for k + + } // end i_grid + +} + + + +#endif \ No newline at end of file diff --git a/include/source.fwd.h b/include/source.fwd.h new file mode 100644 index 0000000..51fc038 --- /dev/null +++ b/include/source.fwd.h @@ -0,0 +1,2 @@ +#pragma once +class Source; \ No newline at end of file diff --git a/include/source.h b/include/source.h new file mode 100644 index 0000000..14e6165 --- /dev/null +++ b/include/source.h @@ -0,0 +1,71 @@ +#ifndef SOURCE_H +#define SOURCE_H + +// to handle circular dependency +#pragma once +#include "grid.fwd.h" +#include "source.fwd.h" + +#include "input_params.h" +#include "grid.h" +#include "config.h" +#include "mpi_funcs.h" + +class Source { +public: + Source(){}; + ~Source(); + + // set source information + void set_source_position(InputParams &, Grid &, bool&, const std::string&, bool for_2d_solver=false); + // + // getters + // + CUSTOMREAL get_ds_lat(){return dis_src_lat;}; + CUSTOMREAL get_ds_lon(){return dis_src_lon;}; + CUSTOMREAL get_ds_r (){return dis_src_r;}; + CUSTOMREAL get_src_r(){return src_r;}; // radius + CUSTOMREAL get_src_t(){return src_lat;}; // radian + CUSTOMREAL get_src_p(){return src_lon;}; // radian + CUSTOMREAL get_src_dep(){return radius2depth(src_r);}; // km + + // + // parallel getters + // + CUSTOMREAL get_fac_at_source(CUSTOMREAL*, bool check=false); + CUSTOMREAL get_fac_at_point(CUSTOMREAL*, int, int, int); + +private: + // positions + CUSTOMREAL src_lat; + CUSTOMREAL src_lon; + CUSTOMREAL src_r; + + // discretize source position ids (LOCAL) + int i_src_loc; + int j_src_loc; + int k_src_loc; + + // discretized source position + CUSTOMREAL dis_src_lat; + CUSTOMREAL dis_src_lon; + CUSTOMREAL dis_src_r; + + CUSTOMREAL dis_src_err_r; // r1 + CUSTOMREAL dis_src_err_lat; // r2 + CUSTOMREAL dis_src_err_lon; // r3 + + // if source is in this subdomain + bool is_in_subdomain = false; + int src_rank; + bool *src_flags; + int n_dom_src = 0; + + // position error by discretization for each direction + CUSTOMREAL error_lon, error_lat, error_r; + + // grid gaps + CUSTOMREAL delta_lon, delta_lat, delta_r; +}; + +#endif // SOURCE_H \ No newline at end of file diff --git a/include/src_rec.h b/include/src_rec.h new file mode 100644 index 0000000..dc34ca9 --- /dev/null +++ b/include/src_rec.h @@ -0,0 +1,211 @@ +#ifndef SRC_REC_H +#define SRC_REC_H + +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" +#include "utils.h" +#include "timer.h" +#include "mpi_funcs.h" + + +// information of source or receiver +class SrcRecInfo { +public: + int id = -1; + std::string name = "unknown"; + CUSTOMREAL dep; // stored as depth (km), so need to depth2radious function when using it in other part of the code + CUSTOMREAL lat; // stored in degree, but convarted to radian when passed through get_src_* function + CUSTOMREAL lon; // stored in degree, but convarted to radian when passed through get_src_* function + + int year = -1; + int month = -1; + int day = -1; + int hour = -1; + int min = -1; + CUSTOMREAL sec = -1.0; + CUSTOMREAL mag = -1.0; + + CUSTOMREAL adjoint_source = 0.0; + CUSTOMREAL adjoint_source_density = 0.0; + + int n_data = 0; + + // arrays for storing arrival times on boundary surfaces, calculated by 2D Eikonal solver + bool is_out_of_region = false; // is the source or receiver in the region; false: in the refion; true: teleseismic + //CUSTOMREAL* arr_times_bound_N = nullptr; // arrival time of the receiver at the north boundary of the subdomain + //CUSTOMREAL* arr_times_bound_E = nullptr; // arrival time of the receiver at the east boundary of the subdomain + //CUSTOMREAL* arr_times_bound_W = nullptr; // arrival time of the receiver at the west boundary of the subdomain + //CUSTOMREAL* arr_times_bound_S = nullptr; // arrival time of the receiver at the south boundary of the subdomain + //CUSTOMREAL* arr_times_bound_Bot = nullptr; // arrival time of the receiver at the bottom boundary of the subdomain + //bool* is_bound_src; // true if the source is on the boundary surface + + // kernel + CUSTOMREAL sta_correct = 0.0; + CUSTOMREAL sta_correct_kernel = 0.0; + + // relocation + bool is_stop = false; + CUSTOMREAL tau_opt = 0.0; + CUSTOMREAL grad_chi_i = 0.0; + CUSTOMREAL grad_chi_j = 0.0; + CUSTOMREAL grad_chi_k = 0.0; + CUSTOMREAL grad_tau = 0.0; + CUSTOMREAL sum_weight = 0.0; + CUSTOMREAL vobj_src_reloc_old = 99999999.9; + CUSTOMREAL vobj_src_reloc = 0.0; + CUSTOMREAL vobj_grad_norm_src_reloc = 0.0; + + CUSTOMREAL step_length_max = step_length_src_reloc; // 2 km default, step length for relocation + CUSTOMREAL change_dep = 0.0; + CUSTOMREAL change_lat = 0.0; + CUSTOMREAL change_lon = 0.0; + CUSTOMREAL change_tau = 0.0; + int Ndata = 0.0; + + bool is_T_written_into_file = false; +}; + +class DataInfo { +public: + + CUSTOMREAL data_weight = 1.0; // the weight in the src_rec file + CUSTOMREAL weight = 1.0; // the actual weight in the inversion, equal data_weight * weight about the data type; + CUSTOMREAL weight_reloc = 1.0; // the actual weight for relocation, equal data_weight * weight about the data type; + + std::string phase = "unknown"; + + bool dual_data = false; // if true, this data is a dual data, used for generating kernel, but not for obj estimation (if true, data type = 2 or 3) + + bool is_src_rec = false; // absolute traveltime, single source - receiver + + // source information + int id_src = -1; + std::string name_src = "unknown"; + + // receiver information + int id_rec = -1; + std::string name_rec = "unknown"; + + // traveltime + CUSTOMREAL travel_time = -999.0; + CUSTOMREAL travel_time_obs = -999.0; + + // receiver pair infomation + bool is_rec_pair = false; // common source differential traveltime + std::vector id_rec_pair = {-1,-1}; + std::vector name_rec_pair = {"unknown","unknown"}; + + // common source differential travel time + CUSTOMREAL cs_dif_travel_time = -999.0; + CUSTOMREAL cs_dif_travel_time_obs = -999.0; + + // source pair infomation + bool is_src_pair = false; // common receiver differential traveltime (for future) + std::vector id_src_pair = {-1,-1}; + std::vector name_src_pair = {"unknown","unknown"}; + + // common receiver differential travel time + CUSTOMREAL cr_dif_travel_time = -999.0; + CUSTOMREAL cr_dif_travel_time_obs = -999.0; + + // source relocation + CUSTOMREAL DTi = 0.0; + CUSTOMREAL DTj = 0.0; + CUSTOMREAL DTk = 0.0; + + std::vector DTi_pair = {0.0, 0.0}; + std::vector DTj_pair = {0.0, 0.0}; + std::vector DTk_pair = {0.0, 0.0}; + +}; + + + +// methods for managing SrcRec objects/lists + +// parse src_rec_file +void parse_src_rec_file(std::string& , \ + std::map&, \ + std::map&, \ + std::map>>&, \ + std::vector&, \ + std::vector>>&); + +// parse sta_correctoion_file +void parse_sta_correction_file(std::string&, \ + std::map&); + +// swap the sources and receivers +void do_swap_src_rec(std::map &, \ + std::map &, \ + std::map>> &, \ + std::vector&); + +// do not swap the sources and receivers +void do_not_swap_src_rec(std::map &, \ + std::map &, \ + std::map>> &, \ + std::vector&); + +// tele seismic source management +void separate_region_and_tele_src_rec_data(std::map &, + std::map &, + std::map>>&, + std::map &, + std::map &, + std::map>>&, + std::map &, + std::map &, + std::map>>&, + std::map &, + int &, + int &, + int &, + int &, + int &, + const CUSTOMREAL, const CUSTOMREAL, + const CUSTOMREAL, const CUSTOMREAL, + const CUSTOMREAL, const CUSTOMREAL, + bool); + +void merge_region_and_tele_src(std::map &, + std::map &, + std::map>>&, + std::vector&, + std::map &, + std::map &, + std::map>>&); + +// distribute srcrec data to all simulation groups +void distribute_src_rec_data(std::map&, \ + std::map&, \ + std::map>>&, \ + std::vector&, \ + std::map&, \ + std::map&, \ + std::map>>&, \ + std::vector&, \ + std::vector&); + +void prepare_src_map_for_2d_solver(std::map&, \ + std::map&, \ + std::vector&, \ + std::map&); + +void send_src_info_inter_sim(SrcRecInfo&, int); +void recv_src_info_inter_sim(SrcRecInfo&, int); +void broadcast_src_info_intra_sim(SrcRecInfo&, int); +void send_rec_info_inter_sim(SrcRecInfo&, int); +void recv_rec_info_inter_sim(SrcRecInfo&, int); +void broadcast_rec_info_intra_sim(SrcRecInfo&, int); +void send_data_info_inter_sim(DataInfo&, int); +void recv_data_info_inter_sim(DataInfo&, int); + +#endif //SRC_REC_H \ No newline at end of file diff --git a/include/timer.h b/include/timer.h new file mode 100644 index 0000000..c09a53a --- /dev/null +++ b/include/timer.h @@ -0,0 +1,98 @@ +#ifndef TIMER_H +#define TIMER_H + + +#include +#include +#include +#include +#include +#include "config.h" + +class Timer { +public: + Timer(std::string name, bool show_start_time = false) : name(name), show_start_time(show_start_time) { + start_timer(); + } + + ~Timer() {} + + std::string name; + std::chrono::high_resolution_clock::time_point start; + std::chrono::high_resolution_clock::time_point end; + std::chrono::duration elapsed_time; + bool show_start_time = false; + + void start_timer() { + start = std::chrono::high_resolution_clock::now(); + time_back = start; + if (show_start_time && proc_read_srcrec) { + std::cout << this->name << " started at " << get_current_utc_time() << std::endl; + } + } + + void stop_timer() { + end = std::chrono::high_resolution_clock::now(); + elapsed_time = end - start; + print_elapsed_time(); + } + + double get_start() { + return std::chrono::duration(start.time_since_epoch()).count(); + } + + double get_t_delta() { + auto current_time = std::chrono::high_resolution_clock::now(); + auto delta = current_time - time_back; + time_back = current_time; + return std::chrono::duration(delta).count(); + } + + double get_t() { + return std::chrono::duration(std::chrono::high_resolution_clock::now() - start).count(); + } + + std::string get_start_t() { + return get_current_utc_time(start); + } + + std::string get_end_t() { + return get_current_utc_time(end); + } + + std::string get_elapsed_t() { + return std::to_string(elapsed_time.count()) + " sec"; + } + + std::string get_utc_from_time_t(std::time_t time_t) { + std::tm utc_tm = *std::gmtime(&time_t); + + std::ostringstream oss; + oss << std::put_time(&utc_tm, "%F %T") << " UTC"; + return oss.str(); + } + +private: + std::chrono::high_resolution_clock::time_point time_back; + + void print_elapsed_time() { + if (if_verbose) + std::cout << "Time for " << name << ": " << elapsed_time.count() << " sec" << std::endl; + } + + std::string get_current_utc_time(std::chrono::high_resolution_clock::time_point time = std::chrono::high_resolution_clock::now()) { + std::chrono::milliseconds ms = std::chrono::duration_cast(time.time_since_epoch()); + std::time_t time_t = ms.count() / 1000; + + std::tm utc_tm = *std::gmtime(&time_t); + + std::ostringstream oss; + oss << std::put_time(&utc_tm, "%F %T") << " UTC"; + return oss.str(); + } + +}; + + + +#endif // TIMER_H \ No newline at end of file diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..81f13f6 --- /dev/null +++ b/include/utils.h @@ -0,0 +1,401 @@ +#ifndef UTILS_H +#define UTILS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include // for std::bad_alloc +#include // for std::exit + + +// chec if compiler is gcc 7.5 or older +//#if __GNUC__ == 7 && __GNUC_MINOR__ <= 5 +//#include +//#define GNUC_7_5 +//#elif __cplusplus > 201402L // compilers supporting c++17 +//#include +//#endif + +#include "config.h" + + +inline int mkpath(std::string s,mode_t mode) { + size_t pos=0; + std::string dir; + int mdret = 0; + + if(s[s.size()-1]!='/'){ + // force trailing / so we can handle everything in loop + s+='/'; + } + + while((pos=s.find_first_of('/',pos))!=std::string::npos){ + dir=s.substr(0,pos++); + if(dir.size()==0) continue; // if leading / first time is 0 length + if((mdret=mkdir(dir.c_str(),mode)) && errno!=EEXIST){ + return mdret; + } + } + return mdret; +} + + + +inline void create_output_dir(std::string dir_path){ + + // create output directory if not exists (directories tree) + if (world_rank == 0) { + +//#if __cplusplus > 201402L && !defined(GNUC_7_5) +// // this function requires c++17 +// if (!std::filesystem::exists(dir_path)){ +// std::filesystem::create_directories(dir_path); +// } else { +// std::cout << "Output directory already exists. Overwriting..." << std::endl; +// } +//#else // compilers not supporting std++17 + // check if directory exists + struct stat info; + if (stat(dir_path.c_str(), &info) != 0){ + // directory does not exist + // create directory + int status = mkpath(dir_path, 0755); + if (status != 0){ + std::cout << "Error: cannot create output directory" << std::endl; + std::cout << "Exiting..." << std::endl; + exit(1); + } + } else { + // directory exists + std::cout << "Output directory already exists. Overwriting..." << std::endl; + } +//#endif + + } + +} + + +inline bool is_file_exist(const char* fileName) +{ + return static_cast(std::ifstream(fileName)); +} + + +inline void stdout_by_main(char const* str){ + if (sim_rank == 0 && inter_sub_rank == 0 && sub_rank == 0 && id_sim == 0) + std::cout << str << std::endl; +} + + +inline void stdout_by_rank_zero(char const* str){ + if(world_rank == 0) + std::cout << str << std::endl; +} + + +inline void parse_options(int argc, char* argv[]){ + bool input_file_found = false; + + for (int i = 1; i < argc; i++){ + if(strcmp(argv[i], "-v") == 0) + if_verbose = true; + else if (strcmp(argv[i],"-i") == 0){ + input_file = argv[i+1]; + input_file_found = true; + } + else if (strcmp(argv[i], "-h") == 0){ + stdout_by_main("usage: mpirun -np 4 TOMOATT -i input_params.yaml"); + exit(EXIT_SUCCESS); + } + } + + // error if input_file is not found + if(!input_file_found){ + stdout_by_main("usage: mpirun -np 4 TOMOATT -i input_params.yaml"); + std::cout << "Error: input parameter file not found" << std::endl; + exit(EXIT_FAILURE); + } +} + + +inline void parse_options_srcrec_weight(int argc, char* argv[]){ + bool input_file_found = false; + + for (int i = 1; i < argc; i++){ + if(strcmp(argv[i], "-v") == 0) + if_verbose = true; + else if (strcmp(argv[i],"-i") == 0){ + input_file = argv[i+1]; + input_file_found = true; + } else if (strcmp(argv[i],"-r") == 0){ + // reference value + ref_value = atof(argv[i+1]); + } else if (strcmp(argv[i], "-o") == 0){ + // get output filename + output_file_weight = argv[i+1]; + } + } + + // error if input_file is not found + if(!input_file_found){ + stdout_by_main("usage: ./SrcRecWeight -i srcrec_file.txt -r 10.0 -o srcrec_weight.txt"); + std::cout << argc << std::endl; + exit(EXIT_FAILURE); + } +} + + +template +inline int check_data_type(T const& data){ + if (std::is_same::value){ + return 0; + } else if (std::is_same::value){ + return 1; + } else if (std::is_same::value){ + return 2; + } else if (std::is_same::value){ + return 3; + } else { + std::cout << "Error: custom real type is not float or double" << std::endl; + std::cout << "Please check the definition of CUSTOMREAL in io.h" << std::endl; + std::cout << "Exiting..." << std::endl; + exit(1); + } +} + + +template +inline T my_square(T const& a){ + return a * a; +} + + +// defined function is more than 2 times slower than inline function +//#define my_square(a) (a * a) + + +template +T* allocateMemory(size_t size, int allocationID) { + try { + T* ptr = new T[size]; + return ptr; + } catch (const std::bad_alloc& e) { + // Handle memory allocation failure + std::cerr << "Memory allocation failed for ID " << allocationID << ": " << e.what() << std::endl; + std::exit(EXIT_FAILURE); // Exit the program on allocation failure + } +} + + +inline void RLonLat2xyz(CUSTOMREAL lon, CUSTOMREAL lat, CUSTOMREAL R, CUSTOMREAL& x, CUSTOMREAL& y, CUSTOMREAL& z){ + /* + lon : longitude in radian + lat : latitude in radian + R : radius + + x : x coordinate in m + y : y coordinate in m + z : z coordinate in m + */ + //x = R*cos(lat*DEG2RAD)*cos(lon*DEG2RAD); + //y = R*cos(lat*DEG2RAD)*sin(lon*DEG2RAD); + //z = R*sin(lat*DEG2RAD); + x = R*cos(lat)*cos(lon); + y = R*cos(lat)*sin(lon); + z = R*sin(lat); + +} + + +// calculate epicentral distance in radian from lon lat in radian +inline void Epicentral_distance_sphere(const CUSTOMREAL lat1, const CUSTOMREAL lon1, \ + const CUSTOMREAL lat2, const CUSTOMREAL lon2, \ + CUSTOMREAL& dist) { + + // calculate epicentral distance in radian + //dist = std::abs(acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))); + CUSTOMREAL lon_dif = lon2 - lon1; + + dist = std::atan2(std::sqrt((my_square(std::cos(lat2) * std::sin(lon_dif)) + \ + my_square(std::cos(lat1) * std::sin(lat2) - std::sin(lat1) * std::cos(lat2) * std::cos(lon_dif)))), \ + std::sin(lat1) * std::sin(lat2) + std::cos(lat1) * std::cos(lat2) * std::cos(lon_dif)); + +} + + + + +//calculate azimuth +inline void Azimuth_sphere(CUSTOMREAL lat1, CUSTOMREAL lon1, \ + CUSTOMREAL lat2, CUSTOMREAL lon2, \ + CUSTOMREAL& azi) { + + if (isZero(my_square((lat1-lat2)) \ + && + my_square((lon1-lon2)))){ + azi = _0_CR; + } else { + azi = atan2(sin(lon2-lon1)*cos(lat2), \ + cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1)); + if (azi < _0_CR) + azi += _2_CR * PI; + } +} + + +inline void WGS84ToCartesian(CUSTOMREAL& lon, CUSTOMREAL& lat, CUSTOMREAL R, \ + CUSTOMREAL& x, CUSTOMREAL& y, CUSTOMREAL& z, \ + CUSTOMREAL& lon_center, CUSTOMREAL& lat_center){ + + // equatorial radius WGS84 major axis + const static CUSTOMREAL equRadius = R_earth; // in m in this function + const static CUSTOMREAL flattening = 1.0 / 298.257222101; + + const static CUSTOMREAL sqrEccentricity = flattening * (2.0 - flattening); + + const CUSTOMREAL lat_rad = lat - lat_center; // input should be already in radian + const CUSTOMREAL lon_rad = lon - lon_center; + const CUSTOMREAL alt = R - equRadius; // altitude (height above sea level) + + const CUSTOMREAL sinLat = sin(lat_rad); + const CUSTOMREAL cosLat = cos(lat_rad); + const CUSTOMREAL sinLon = sin(lon_rad); + const CUSTOMREAL cosLon = cos(lon_rad); + + // Normalized radius + const CUSTOMREAL normRadius = equRadius / sqrt(1.0 - sqrEccentricity * sinLat * sinLat); + + x = (normRadius + alt) * cosLat * cosLon; + y = (normRadius + alt) * cosLat * sinLon; + z = (normRadius * (1.0 - sqrEccentricity) + alt) * sinLat; + +} + + +template +inline T dot_product(T const* const a, T const* const b, int const& n){ + CUSTOMREAL result = _0_CR; + for (int i = 0; i < n; i++){ + result += a[i] * b[i]; + } + return result; +} + +template +inline T find_max(T const* const a, int const& n){ + T max = a[0]; + for (int i = 1; i < n; i++){ + if (a[i] > max){ + max = a[i]; + } + } + return max; +} + +template +inline T find_absmax(T const* const a, int const& n){ + T max = fabs(a[0]); + for (int i = 1; i < n; i++){ + if (fabs(a[i]) > max){ + max = fabs(a[i]); + } + } + return max; +} + +template +inline T calc_l2norm(T const* const a, int const& n){ + T result = _0_CR; + for (int i = 0; i < n; i++){ + result += a[i] * a[i]; + } + return result; +} + + +inline std::string int2string_zero_fill(int i) { + std::stringstream ss; + ss << std::setfill('0') << std::setw(4) << i; + return ss.str(); +} + + +inline bool in_between(CUSTOMREAL const& a, CUSTOMREAL const& b, CUSTOMREAL const& c){ + // check if a is between b and c + if ((a-b)*(a-c) <= _0_CR){ + return true; + } else { + return false; + } +} + + +inline CUSTOMREAL calc_ratio_between(CUSTOMREAL const& a, CUSTOMREAL const& b, CUSTOMREAL const& c){ + // calculate ratio of a between b and c + //if (b < c) + return (a - b) / (c - b); + //else + // return (a - b) / (b - c); +} + + +inline void linear_interpolation_1d_sorted(const CUSTOMREAL* x1, const CUSTOMREAL* y1, const int& n1, const CUSTOMREAL* x2, CUSTOMREAL* y2, const int& n2){ + // linear interpolation for sorted 1d array (monotonely increasing) + // x1 : positions of the first array + // y1 : values of the first array + // n1 : size of the first array + // x2 : positions of the second array + // y2 : values of the second array + // n2 : size of the second array + int start = 0; + for(int pt2=0; pt2= x1[n1-1]){ // x2[pt2] >= x1[n1-1] + y2[pt2] = y1[n1-1]; + } else { // x1[0] < x2[pt2] < x1[n1-1] + for(int pt1=start; pt1= x1[pt1] && x2[pt2] <= x1[pt1+1]){ + y2[pt2] = y1[pt1] + (y1[pt1+1] - y1[pt1]) * (x2[pt2] - x1[pt1]) / (x1[pt1+1] - x1[pt1]); + start = pt1; + break; + } + } + } + } +} + +template +std::vector linspace(T start_in, T end_in, int num_in) +{ + + std::vector linspaced; + + double start = static_cast(start_in); + double end = static_cast(end_in); + double num = static_cast(num_in); + + if (num == 0) { return linspaced; } + if (num == 1) + { + linspaced.push_back(start); + return linspaced; + } + + double delta = (end - start) / (num - 1); + + for(int i=0; i < num-1; ++i) + { + linspaced.push_back(start + delta * i); + } + linspaced.push_back(end); // I want to ensure that start and end + // are exactly the same as the input + return linspaced; +} + +#endif // UTILS_H \ No newline at end of file diff --git a/include/vectorized_sweep.h b/include/vectorized_sweep.h new file mode 100644 index 0000000..8f59731 --- /dev/null +++ b/include/vectorized_sweep.h @@ -0,0 +1,825 @@ +#ifndef VECTORIZED_SWEEP_H +#define VECTORIZED_SWEEP_H + + +#include +#include "config.h" + +#ifdef USE_SIMD // closed at the end of this file +#include "simd_conf.h" + +#if USE_AVX || USE_AVX512 +__mT COEF = _mmT_set1_pT(1.0); +__mT v_1 = _mmT_set1_pT(1.0); +__mT v_0 = _mmT_set1_pT(0.0); +__mT v_half = _mmT_set1_pT(0.5); +__mT v_2 = _mmT_set1_pT(2.0); +__mT v_m2 = _mmT_set1_pT(-2.0); +__mT v_4 = _mmT_set1_pT(4.0); +__mT v_m3 = _mmT_set1_pT(-3.0); +__mT coe_max = _mmT_set1_pT(1e19); +__mT v_eps = _mmT_set1_pT(1e-12); +__mT COEF_TELE = _mmT_set1_pT(1.05); + + +// square of __mT +inline __mT my_square_v(__mT const& a){ + return _mmT_mul_pT(a, a); +} + +// pp = (a - b) * Dinv +inline __mT calc_1d_stencil(__mT const& a, __mT const& b, __mT const& Dinv){ + return _mmT_mul_pT(_mmT_sub_pT(a,b),Dinv); +} + +/* + ww = _1_CR/(_1_CR+_2_CR*my_square_v((eps + my_square_v( a \ + -_2_CR*b \ + + c) ) \ + + / (eps + my_square_v( d \ + -_2_CR*a \ + + b) )) ); + + pp = sign * (_1_CR - ww) * ( b \ <-- sign = +1 or -1 + - d) * 0.5 * Dinv \ + + ww * ( -3.0 * a \ + + 4.0 * b \ + - 1.0 * c ) * 0.5 * Dinv ); +*/ +inline __mT calc_3d_stencil(__mT const& a, __mT const& b, __mT const&c, __mT const& d, __mT const& Dinv_half, int const& sign){ + +#ifdef __FMA__ + // v_eps + square(a - 2.0*b + c) + __mT tmp1 = _mmT_add_pT(v_eps,my_square_v(_mmT_add_pT(a,_mmT_fmadd_pT(v_m2,b,c)))); + // v_eps + square(d - 2.0*a + b) + __mT tmp2 = _mmT_add_pT(v_eps,my_square_v(_mmT_add_pT(d,_mmT_fmadd_pT(v_m2,a,b)))); + // ww = 1.0/(1.0 + 2.0 * square(tmp1/tmp2)) + __mT ww = _mmT_div_pT(v_1,_mmT_fmadd_pT(v_2,my_square_v(_mmT_div_pT(tmp1,tmp2)),v_1)); + // pp = sign* ((1.0 - ww) * (b - d) / 2.0 / D + // + ww * (-3.0* a + 4.0 * b - c) * Dinv_half) + /* + */ + return _mmT_mul_pT(_mmT_set1_pT(sign), \ + _mmT_add_pT(\ + _mmT_mul_pT(_mmT_sub_pT(v_1,ww),_mmT_mul_pT(_mmT_sub_pT(b,d),Dinv_half)),\ + _mmT_mul_pT(ww,_mmT_mul_pT(_mmT_sub_pT(_mmT_fmadd_pT(v_4,b,_mmT_mul_pT(v_m3,a)),c),Dinv_half))\ + )\ + ); +#else + __mT tmp1 = _mmT_add_pT(v_eps,my_square_v(_mmT_add_pT(a,_mmT_add_pT(_mmT_mul_pT(v_m2,b),c)))); + __mT tmp2 = _mmT_add_pT(v_eps,my_square_v(_mmT_add_pT(d,_mmT_add_pT(_mmT_mul_pT(v_m2,a),b)))); + __mT ww = _mmT_div_pT(v_1,_mmT_add_pT(v_1,_mmT_mul_pT(v_2,my_square_v(_mmT_div_pT(tmp1,tmp2))))); + return _mmT_mul_pT(_mmT_set1_pT(sign), \ + _mmT_add_pT(\ + _mmT_mul_pT(_mmT_sub_pT(v_1,ww),_mmT_mul_pT(_mmT_sub_pT(b,d),Dinv_half)),\ + _mmT_mul_pT(ww,_mmT_mul_pT(_mmT_sub_pT(_mmT_add_pT(_mmT_mul_pT(v_4,b),_mmT_mul_pT(v_m3,a)),c),Dinv_half))\ + )\ + ); +#endif + +} + +#elif USE_ARM_SVE + +inline __mT my_square_v(svbool_t const& pg, __mT const& a){ + return svmul_f64_z(pg, a, a); +} + +inline __mT calc_1d_stencil(svbool_t const& pg, __mT const& a, __mT const& b, __mT const& Dinv){ + return svmul_f64_z(pg, svsub_f64_z(pg, a, b), Dinv); +} + +inline __mT calc_3d_stencil(svbool_t const& pg, __mT const& a, __mT const& b, __mT const&c, __mT const& d, __mT const& Dinv_half, int const& sign){ + + __mT v_1 = svdup_f64(1.0); + __mT v_2 = svdup_f64(2.0); + __mT v_m2 = svdup_f64(-2.0); + __mT v_4 = svdup_f64(4.0); + __mT v_m3 = svdup_f64(-3.0); + __mT v_eps = svdup_f64(1e-12); + + // v_eps + square(a - 2.0*b + c) + //__mT tmp1 = svadd_f64_z(pg, v_eps, my_square_v(pg, svadd_f64_z(pg, a, svadd_f64_z(pg, svmul_f64_z(pg, v_m2, b), c)))); + __mT tmp1 = svadd_f64_z(pg, v_eps, my_square_v(pg, svadd_f64_z(pg, a, svmad_f64_z(pg, v_m2, b, c)))); + // v_eps + square(d - 2.0*a + b) + //__mT tmp2 = svadd_f64_z(pg, v_eps, my_square_v(pg, svadd_f64_z(pg, d, svadd_f64_z(pg, svmul_f64_z(pg, v_m2, a), b)))); + __mT tmp2 = svadd_f64_z(pg, v_eps, my_square_v(pg, svadd_f64_z(pg, d, svmad_f64_z(pg, v_m2, a, b)))); + // ww = 1.0/(1.0 + 2.0 * square(tmp1/tmp2)) + //__mT ww = svdiv_f64_z(pg, v_1, svadd_f64_z(pg, v_1, svmul_f64_z(pg, v_2, my_square_v(pg, svdiv_f64_z(pg, tmp1, tmp2))))); + __mT ww = svdiv_f64_z(pg, v_1, svmad_f64_z(pg, v_2, my_square_v(pg, svdiv_f64_z(pg, tmp1, tmp2)), v_1)); + // pp = sign* ((1.0 - ww) * (b - d) / 2.0 / D + // + ww * (-3.0* a + 4.0 * b - c) * Dinv_half) + /* + return svmul_f64_m(pg, svdup_f64(sign), \ + svadd_f64_z(pg, \ + svmul_f64_z(pg, svsub_f64_z(pg, v_1, ww), svmul_f64_z(pg, svsub_f64_z(pg, b, d), Dinv_half)),\ + svmul_f64_z(pg, ww, svmul_f64_z(pg, svsub_f64_z(pg, svadd_f64_z(pg, svmul_f64_z(pg, v_4, b), svmul_f64_z(pg, v_m3, a)), c), Dinv_half))\ + )\ + ); + */ + return svmul_f64_m(pg, svdup_f64(sign), \ + svadd_f64_z(pg, \ + svmul_f64_z(pg, svsub_f64_z(pg, v_1, ww), svmul_f64_z(pg, svsub_f64_z(pg, b, d), Dinv_half)),\ + svmul_f64_z(pg, ww, svmul_f64_z(pg, svsub_f64_z(pg, svmad_f64_z(pg, v_4, b, svmul_f64_z(pg, v_m3, a)), c), Dinv_half))\ + )\ + ); +} + + +#endif + + + +inline void vect_stencil_1st_pre_simd( +#if USE_ARM_SVE + svbool_t const& pg, +#endif + __mT const& v_iip, __mT const& v_jjt, __mT const& v_kkr, + __mT const& v_c__, + __mT const& v_p__, __mT const& v_m__, __mT const& v__p_, __mT const& v__m_, __mT const& v___p, __mT const& v___m, + __mT& v_pp1, __mT& v_pp2, __mT& v_pt1, __mT& v_pt2, __mT& v_pr1, __mT& v_pr2, + __mT const& v_DP_inv, __mT const& v_DT_inv, __mT const& v_DR_inv, + __mT const& v_DP_inv_half, __mT const& v_DT_inv_half, __mT const& v_DR_inv_half, + int const& NP, int const& NT, int const& NR){ + +#if USE_AVX512 || USE_AVX + + v_pp1 = calc_1d_stencil(v_c__, v_m__, v_DP_inv); + v_pp2 = calc_1d_stencil(v_p__, v_c__, v_DP_inv); + v_pt1 = calc_1d_stencil(v_c__, v__m_, v_DT_inv); + v_pt2 = calc_1d_stencil(v__p_, v_c__, v_DT_inv); + v_pr1 = calc_1d_stencil(v_c__, v___m, v_DR_inv); + v_pr2 = calc_1d_stencil(v___p, v_c__, v_DR_inv); + +#elif USE_ARM_SVE + + v_pp1 = calc_1d_stencil(pg, v_c__, v_m__, v_DP_inv); + v_pp2 = calc_1d_stencil(pg, v_p__, v_c__, v_DP_inv); + v_pt1 = calc_1d_stencil(pg, v_c__, v__m_, v_DT_inv); + v_pt2 = calc_1d_stencil(pg, v__p_, v_c__, v_DT_inv); + v_pr1 = calc_1d_stencil(pg, v_c__, v___m, v_DR_inv); + v_pr2 = calc_1d_stencil(pg, v___p, v_c__, v_DR_inv); + +#endif + +} + + +inline void vect_stencil_3rd_pre_simd( +#if USE_ARM_SVE + svbool_t const& pg, +#endif + __mT const& v_iip, __mT const& v_jjt, __mT const& v_kkr, + __mT const& v_c__, + __mT const& v_p__, __mT const& v_m__, __mT const& v__p_, __mT const& v__m_, __mT const& v___p, __mT const& v___m, + __mT const& v_pp____, __mT const& v_mm____, __mT const& v___pp__, __mT const& v___mm__, __mT const& v_____pp, __mT const& v_____mm, + __mT& v_pp1, __mT& v_pp2, __mT& v_pt1, __mT& v_pt2, __mT& v_pr1, __mT& v_pr2, + __mT const& v_DP_inv, __mT const& v_DT_inv, __mT const& v_DR_inv, + __mT const& v_DP_inv_half, __mT const& v_DT_inv_half, __mT const& v_DR_inv_half, + int const& NP, int const& NT, int const& NR){ + + const int PLUS = 1; + const int MINUS = -1; + +#if USE_AVX512 + + __mmaskT mask_i_eq_1 = _mm512_cmp_pT_mask(v_iip, v_1,_CMP_EQ_OQ); // if iip == 1 + __mmaskT mask_j_eq_1 = _mm512_cmp_pT_mask(v_jjt, v_1,_CMP_EQ_OQ); // if jjt == 1 + __mmaskT mask_k_eq_1 = _mm512_cmp_pT_mask(v_kkr, v_1,_CMP_EQ_OQ); // if kkr == 1 + __mmaskT mask_i_eq_N_minus_2 = _mm512_cmp_pT_mask(v_iip, _mmT_set1_pT(NP-2),_CMP_EQ_OQ); // if iip == N-2 + __mmaskT mask_j_eq_N_minus_2 = _mm512_cmp_pT_mask(v_jjt, _mmT_set1_pT(NT-2),_CMP_EQ_OQ); // if jjt == N-2 + __mmaskT mask_k_eq_N_minus_2 = _mm512_cmp_pT_mask(v_kkr, _mmT_set1_pT(NR-2),_CMP_EQ_OQ); // if kkr == N-2 + + // 1 < iip < N-2 + __mmaskT mask_i_else = _kand_maskT( + _mm512_cmp_pT_mask(v_iip, v_1 , _CMP_GT_OQ), + _mm512_cmp_pT_mask(_mmT_set1_pT(NP-2), v_iip, _CMP_GT_OQ) + ); + // 1 < jjt < N-2 + __mmaskT mask_j_else = _kand_maskT( + _mm512_cmp_pT_mask(v_jjt, v_1 , _CMP_GT_OQ), + _mm512_cmp_pT_mask(_mmT_set1_pT(NT-2), v_jjt, _CMP_GT_OQ) + ); + // 1 < kkr < N-2 + __mmaskT mask_k_else = _kand_maskT( + _mm512_cmp_pT_mask(v_kkr, v_1 , _CMP_GT_OQ), + _mm512_cmp_pT_mask(_mmT_set1_pT(NR-2), v_kkr, _CMP_GT_OQ) + ); + + // if _i_eq_1 == true + v_pp1 = _mm512_mask_blend_pT(mask_i_eq_1, calc_1d_stencil(v_c__, v_m__, v_DP_inv) , v_pp1 ); + v_pp2 = _mm512_mask_blend_pT(mask_i_eq_1, calc_3d_stencil(v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS), v_pp2 ); + // if_i_eq_N_minus_2 == true + v_pp1 = _mm512_mask_blend_pT(mask_i_eq_N_minus_2, calc_3d_stencil(v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), v_pp1); + v_pp2 = _mm512_mask_blend_pT(mask_i_eq_N_minus_2, calc_1d_stencil(v_p__, v_c__, v_DP_inv) , v_pp2); + // else + v_pp1 = _mm512_mask_blend_pT(mask_i_else, calc_3d_stencil(v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), v_pp1); + v_pp2 = _mm512_mask_blend_pT(mask_i_else, calc_3d_stencil(v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS) , v_pp2); + + // if _j_eq_1 == true + v_pt1 = _mm512_mask_blend_pT(mask_j_eq_1, calc_1d_stencil(v_c__, v__m_, v_DT_inv) , v_pt1); + v_pt2 = _mm512_mask_blend_pT(mask_j_eq_1, calc_3d_stencil(v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS), v_pt2); + // if _j_eq_N_minus_2 == true + v_pt1 = _mm512_mask_blend_pT(mask_j_eq_N_minus_2, calc_3d_stencil(v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), v_pt1); + v_pt2 = _mm512_mask_blend_pT(mask_j_eq_N_minus_2, calc_1d_stencil(v__p_, v_c__, v_DT_inv) , v_pt2); + // else + v_pt1 = _mm512_mask_blend_pT(mask_j_else, calc_3d_stencil(v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), v_pt1); + v_pt2 = _mm512_mask_blend_pT(mask_j_else, calc_3d_stencil(v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS) , v_pt2); + + // if _k_eq_1 == true + v_pr1 = _mm512_mask_blend_pT(mask_k_eq_1, calc_1d_stencil(v_c__, v___m, v_DR_inv) , v_pr1 ); + v_pr2 = _mm512_mask_blend_pT(mask_k_eq_1, calc_3d_stencil(v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS), v_pr2 ); + // if _k_eq_N_minus_2 == true + v_pr1 = _mm512_mask_blend_pT(mask_k_eq_N_minus_2, calc_3d_stencil(v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), v_pr1); + v_pr2 = _mm512_mask_blend_pT(mask_k_eq_N_minus_2, calc_1d_stencil(v___p, v_c__, v_DR_inv) , v_pr2); + // else + v_pr1 = _mm512_mask_blend_pT(mask_k_else, calc_3d_stencil(v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), v_pr1); + v_pr2 = _mm512_mask_blend_pT(mask_k_else, calc_3d_stencil(v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS) , v_pr2); + +#elif USE_AVX + + __mT mask_i_eq_1 = _mm256_cmp_pT(v_iip, v_1,_CMP_EQ_OQ); // if iip == 1 + __mT mask_j_eq_1 = _mm256_cmp_pT(v_jjt, v_1,_CMP_EQ_OQ); // if jjt == 1 + __mT mask_k_eq_1 = _mm256_cmp_pT(v_kkr, v_1,_CMP_EQ_OQ); // if kkr == 1 + __mT mask_i_eq_N_minus_2 = _mm256_cmp_pT(v_iip, _mmT_set1_pT(NP-2),_CMP_EQ_OQ); // if iip == N-2 + __mT mask_j_eq_N_minus_2 = _mm256_cmp_pT(v_jjt, _mmT_set1_pT(NT-2),_CMP_EQ_OQ); // if jjt == N-2 + __mT mask_k_eq_N_minus_2 = _mm256_cmp_pT(v_kkr, _mmT_set1_pT(NR-2),_CMP_EQ_OQ); // if kkr == N-2 + + // 1 < iip < N-2 + __m256d mask_i_else = _mm256_and_pd( + _mm256_cmp_pT(v_iip, v_1 , _CMP_GT_OQ), + _mm256_cmp_pT(_mmT_set1_pT(NP-2),v_iip, _CMP_GT_OQ) + ); + // 1 < jjt < N-2 + __m256d mask_j_else = _mm256_and_pd( + _mm256_cmp_pT(v_jjt, v_1 , _CMP_GT_OQ), + _mm256_cmp_pT(_mmT_set1_pT(NT-2),v_jjt, _CMP_GT_OQ) + ); + // 1 < kkr < N-2 + __m256d mask_k_else = _mm256_and_pd( + _mm256_cmp_pT(v_kkr, v_1 , _CMP_GT_OQ), + _mm256_cmp_pT(_mmT_set1_pT(NR-2),v_kkr, _CMP_GT_OQ) + ); + + // if _i_eq_1 == true + v_pp1 = _mm256_blendv_pd(v_pp1, calc_1d_stencil(v_c__, v_m__, v_DP_inv), mask_i_eq_1); + v_pp2 = _mm256_blendv_pd(v_pp2, calc_3d_stencil(v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS), mask_i_eq_1); + // if_i_eq_N_minus_2 == true + v_pp1 = _mm256_blendv_pd(v_pp1, calc_3d_stencil(v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), mask_i_eq_N_minus_2); + v_pp2 = _mm256_blendv_pd(v_pp2, calc_1d_stencil(v_p__, v_c__, v_DP_inv), mask_i_eq_N_minus_2); + // else + v_pp1 = _mm256_blendv_pd(v_pp1, calc_3d_stencil(v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), mask_i_else); + v_pp2 = _mm256_blendv_pd(v_pp2, calc_3d_stencil(v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS), mask_i_else); + + // if _j_eq_1 == true + v_pt1 = _mm256_blendv_pd(v_pt1, calc_1d_stencil(v_c__, v__m_, v_DT_inv), mask_j_eq_1); + v_pt2 = _mm256_blendv_pd(v_pt2, calc_3d_stencil(v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS), mask_j_eq_1); + // if _j_eq_N_minus_2 == true + v_pt1 = _mm256_blendv_pd(v_pt1, calc_3d_stencil(v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), mask_j_eq_N_minus_2); + v_pt2 = _mm256_blendv_pd(v_pt2, calc_1d_stencil(v__p_, v_c__, v_DT_inv), mask_j_eq_N_minus_2); + // else + v_pt1 = _mm256_blendv_pd(v_pt1, calc_3d_stencil(v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), mask_j_else); + v_pt2 = _mm256_blendv_pd(v_pt2, calc_3d_stencil(v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS), mask_j_else); + + // if _k_eq_1 == true + v_pr1 = _mm256_blendv_pd(v_pr1, calc_1d_stencil(v_c__, v___m, v_DR_inv), mask_k_eq_1); + v_pr2 = _mm256_blendv_pd(v_pr2, calc_3d_stencil(v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS), mask_k_eq_1); + // if _k_eq_N_minus_2 == true + v_pr1 = _mm256_blendv_pd(v_pr1, calc_3d_stencil(v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), mask_k_eq_N_minus_2); + v_pr2 = _mm256_blendv_pd(v_pr2, calc_1d_stencil(v___p, v_c__, v_DR_inv), mask_k_eq_N_minus_2); + // else + v_pr1 = _mm256_blendv_pd(v_pr1, calc_3d_stencil(v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), mask_k_else); + v_pr2 = _mm256_blendv_pd(v_pr2, calc_3d_stencil(v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS), mask_k_else); + +#elif USE_ARM_SVE + + svfloat64_t v_1 = svdup_f64(1.0); + + svfloat64_t v_NP_minus_2 = svdup_f64(NP-2); + svfloat64_t v_NT_minus_2 = svdup_f64(NT-2); + svfloat64_t v_NR_minus_2 = svdup_f64(NR-2); + + svbool_t mask_i_eq_1 = svcmpeq_f64(pg, v_iip, v_1); // if iip == 1 + svbool_t mask_j_eq_1 = svcmpeq_f64(pg, v_jjt, v_1); // if jjt == 1 + svbool_t mask_k_eq_1 = svcmpeq_f64(pg, v_kkr, v_1); // if kkr == 1 + svbool_t mask_i_eq_N_minus_2 = svcmpeq_f64(pg, v_iip, v_NP_minus_2); // if iip == N-2 + svbool_t mask_j_eq_N_minus_2 = svcmpeq_f64(pg, v_jjt, v_NT_minus_2); // if jjt == N-2 + svbool_t mask_k_eq_N_minus_2 = svcmpeq_f64(pg, v_kkr, v_NR_minus_2); // if kkr == N-2 + + // 1 < iip < N-2 + svbool_t mask_i_else = svand_b_z(pg, + svcmpgt_f64(pg, v_iip, v_1), + svcmplt_f64(pg, v_iip, v_NP_minus_2) + ); + // 1 < jjt < N-2 + svbool_t mask_j_else = svand_b_z(pg, + svcmpgt_f64(pg, v_jjt, v_1), + svcmplt_f64(pg, v_jjt, v_NT_minus_2) + ); + // 1 < kkr < N-2 + svbool_t mask_k_else = svand_b_z(pg, + svcmpgt_f64(pg, v_kkr, v_1), + svcmplt_f64(pg, v_kkr, v_NR_minus_2) + ); + + // if _i_eq_1 == true + v_pp1 = svsel_f64(mask_i_eq_1, calc_1d_stencil(mask_i_eq_1, v_c__, v_m__, v_DP_inv) , v_pp1); + v_pp2 = svsel_f64(mask_i_eq_1, calc_3d_stencil(mask_i_eq_1, v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS), v_pp2); + // if_i_eq_N_minus_2 == true + v_pp1 = svsel_f64(mask_i_eq_N_minus_2, calc_3d_stencil(mask_i_eq_N_minus_2, v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), v_pp1); + v_pp2 = svsel_f64(mask_i_eq_N_minus_2, calc_1d_stencil(mask_i_eq_N_minus_2, v_p__, v_c__, v_DP_inv) , v_pp2); + // else + v_pp1 = svsel_f64(mask_i_else, calc_3d_stencil(mask_i_else, v_c__, v_m__, v_mm____, v_p__, v_DP_inv_half, MINUS), v_pp1); + v_pp2 = svsel_f64(mask_i_else, calc_3d_stencil(mask_i_else, v_c__, v_p__, v_pp____, v_m__, v_DP_inv_half, PLUS) , v_pp2); + + // if _j_eq_1 == true + v_pt1 = svsel_f64(mask_j_eq_1, calc_1d_stencil(mask_j_eq_1, v_c__, v__m_, v_DT_inv) , v_pt1); + v_pt2 = svsel_f64(mask_j_eq_1, calc_3d_stencil(mask_j_eq_1, v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS), v_pt2); + // if _j_eq_N_minus_2 == true + v_pt1 = svsel_f64(mask_j_eq_N_minus_2, calc_3d_stencil(mask_j_eq_N_minus_2, v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), v_pt1); + v_pt2 = svsel_f64(mask_j_eq_N_minus_2, calc_1d_stencil(mask_j_eq_N_minus_2, v__p_, v_c__, v_DT_inv) , v_pt2); + // else + v_pt1 = svsel_f64(mask_j_else, calc_3d_stencil(mask_j_else, v_c__, v__m_, v___mm__, v__p_, v_DT_inv_half, MINUS), v_pt1); + v_pt2 = svsel_f64(mask_j_else, calc_3d_stencil(mask_j_else, v_c__, v__p_, v___pp__, v__m_, v_DT_inv_half, PLUS) , v_pt2); + + // if _k_eq_1 == true + v_pr1 = svsel_f64(mask_k_eq_1, calc_1d_stencil(mask_k_eq_1, v_c__, v___m, v_DR_inv) , v_pr1); + v_pr2 = svsel_f64(mask_k_eq_1, calc_3d_stencil(mask_k_eq_1, v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS), v_pr2); + // if _k_eq_N_minus_2 == true + v_pr1 = svsel_f64(mask_k_eq_N_minus_2, calc_3d_stencil(mask_k_eq_N_minus_2, v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), v_pr1); + v_pr2 = svsel_f64(mask_k_eq_N_minus_2, calc_1d_stencil(mask_k_eq_N_minus_2, v___p, v_c__, v_DR_inv) , v_pr2); + // else + v_pr1 = svsel_f64(mask_k_else, calc_3d_stencil(mask_k_else, v_c__, v___m, v_____mm, v___p, v_DR_inv_half, MINUS), v_pr1); + v_pr2 = svsel_f64(mask_k_else, calc_3d_stencil(mask_k_else, v_c__, v___p, v_____pp, v___m, v_DR_inv_half, PLUS) , v_pr2); + + +#endif + +} + + +inline void vect_stencil_1st_3rd_apre_simd( +#if USE_ARM_SVE + svbool_t const& pg, +#endif + __mT& v_tau, __mT const& v_fac_a,__mT const& v_fac_b, __mT const& v_fac_c, __mT const& v_fac_f, + __mT const& v_T0v, __mT const& v_T0p, __mT const& v_T0t, __mT const& v_T0r, __mT const& v_fun, __mT const& v_change, + __mT const& v_pp1, __mT const& v_pp2, __mT const& v_pt1, __mT const& v_pt2, __mT const& v_pr1, __mT const& v_pr2, + __mT const& DP_inv, __mT const& DT_inv, __mT const& DR_inv){ + +#if USE_AVX512 || USE_AVX + + // sigr = COEF * sqrt(v_fac_a)*v_T0v; + __mT sigr = _mmT_mul_pT(_mmT_mul_pT(COEF,_mmT_sqrt_pT(v_fac_a)),v_T0v); + // sigt = COEF * sqrt(v_fac_b)*v_T0v; + __mT sigt = _mmT_mul_pT(_mmT_mul_pT(COEF,_mmT_sqrt_pT(v_fac_b)),v_T0v); + // sigp = COEF * sqrt(v_fac_c)*v_T0v; + __mT sigp = _mmT_mul_pT(_mmT_mul_pT(COEF,_mmT_sqrt_pT(v_fac_c)),v_T0v); + + // coe = 1.0 / (sigr/D + sigt/D + sigz/D); + __mT coe = _mmT_div_pT(v_1,_mmT_add_pT(_mmT_add_pT(_mmT_mul_pT(sigr,DR_inv),_mmT_mul_pT(sigt,DT_inv)),_mmT_mul_pT(sigp,DP_inv))); + // coe becomes inf as sig* goes to 0 + // if coe > 1e19, set coe = 1e19 + coe = _mmT_min_pT(coe,coe_max); + + // Htau = v_fac_a * square(v_T0r * v_tau + v_T0v * (v_pr1 + v_pr2)*0.5); + __mT Htau = _mmT_mul_pT(v_fac_a,my_square_v(_mmT_add_pT(_mmT_mul_pT(v_T0r,v_tau),_mmT_mul_pT(v_T0v,_mmT_mul_pT(_mmT_add_pT(v_pr1,v_pr2),v_half))))); + + // Htau += v_fac_b * square(v_T0t * v_tau + v_T0v * (v_pt1 + v_pt2)*0.5)) + Htau = _mmT_add_pT(Htau,_mmT_mul_pT(v_fac_b,my_square_v(_mmT_add_pT(_mmT_mul_pT(v_T0t,v_tau),_mmT_mul_pT(v_T0v,_mmT_mul_pT(_mmT_add_pT(v_pt1,v_pt2), v_half)))))); + // Htau += v_fac_c * square(v_T0p * v_tau + v_T0v * (v_pp1 + v_pp2)*0.5)) + Htau = _mmT_add_pT(Htau,_mmT_mul_pT(v_fac_c,my_square_v(_mmT_add_pT(_mmT_mul_pT(v_T0p,v_tau),_mmT_mul_pT(v_T0v,_mmT_mul_pT(_mmT_add_pT(v_pp1,v_pp2), v_half)))))); + + // tmp1 = ( v_T0t * v_tau + v_T0v * (v_pt1 + v_pt2)*0.5) + __mT tmp1 = _mmT_add_pT(_mmT_mul_pT(v_T0t,v_tau),_mmT_mul_pT(v_T0v,_mmT_mul_pT(_mmT_add_pT(v_pt1,v_pt2), v_half))); + // tmp2 = ( v_T0p * v_tau + v_T0v * (v_pp1 + v_pp2)*0.5)) + __mT tmp2 = _mmT_add_pT(_mmT_mul_pT(v_T0p,v_tau),_mmT_mul_pT(v_T0v,_mmT_mul_pT(_mmT_add_pT(v_pp1,v_pp2), v_half))); + // tmp3 = -2.0 * v_fac_f * tmp1 * tmp2; + __mT tmp3 = _mmT_mul_pT(v_m2,_mmT_mul_pT(v_fac_f,_mmT_mul_pT(tmp1,tmp2))); + + // Htau = sqrt(Htau + tmp3); // # becamse nan as Htau - tmp3 goes to 0 + Htau = _mmT_sqrt_pT(_mmT_add_pT(Htau,tmp3)); + + // tmp = (sigr*(v_pr2 - v_pr1) + sigt*(v_pt2 - v_pt1) + sigz*(v_pp2 - v_pp1))*0.5 + __mT tmp = _mmT_mul_pT(v_half,_mmT_add_pT(_mmT_add_pT(_mmT_mul_pT(sigr,_mmT_sub_pT(v_pr2,v_pr1)),_mmT_mul_pT(sigt,_mmT_sub_pT(v_pt2,v_pt1))),_mmT_mul_pT(sigp,_mmT_sub_pT(v_pp2,v_pp1)))); + + // v_tau += coe * ((v_fun - Htau) + tmp) if mask is true + v_tau = _mmT_add_pT(v_tau,_mmT_mul_pT(coe,_mmT_add_pT(_mmT_sub_pT(v_fun,Htau),tmp))); + +#if USE_AVX512 + // mask if v_change != 1.0 + __mmaskT mask = _mm512_cmp_pT_mask(v_change,v_1,_CMP_NEQ_OQ); + // set 1 if mask is true + v_tau = _mm512_mask_blend_pT(mask,v_tau,v_1); +#elif USE_AVX + __m256d mask = _mm256_cmp_pT(v_change, v_1,_CMP_NEQ_OQ); + v_tau = _mm256_blendv_pd(v_tau, v_1,mask); +#endif + +#elif USE_ARM_SVE + + __mT COEF = svdup_f64(1.0); + __mT v_1 = svdup_f64(1.0); + __mT v_half = svdup_f64(0.5); + __mT v_m2 = svdup_f64(-2.0); + __mT coe_max = svdup_f64(1e19); + + // sigr = COEF * sqrt(v_fac_a)*v_T0v; + __mT sigr = svmul_f64_z(pg, svmul_f64_z(pg,COEF,svsqrt_f64_z(pg,v_fac_a)), v_T0v); + // sigt = COEF * sqrt(v_fac_b)*v_T0v; + __mT sigt = svmul_f64_z(pg, svmul_f64_z(pg,COEF,svsqrt_f64_z(pg,v_fac_b)), v_T0v); + // sigp = COEF * sqrt(v_fac_c)*v_T0v; + __mT sigp = svmul_f64_z(pg, svmul_f64_z(pg,COEF,svsqrt_f64_z(pg,v_fac_c)), v_T0v); + + // coe = 1.0 / (sigr/D + sigt/D + sigz/D); + __mT coe = svdiv_f64_z(pg, v_1, svadd_f64_z(pg, svadd_f64_z(pg, svmul_f64_z(pg, sigr, DR_inv), svmul_f64_z(pg, sigt, DT_inv)), svmul_f64_z(pg, sigp, DP_inv))); + // coe becomes inf as sig* goes to 0 + // if coe > 1e19, set coe = 1e19 + coe = svmin_f64_z(pg, coe, coe_max); + + // Htau = v_fac_a * square(v_T0r * v_tau + v_T0v * (v_pr1 + v_pr2)*0.5); + __mT Htau = svmul_f64_z(pg, v_fac_a, my_square_v(pg, svadd_f64_z(pg, \ + svmul_f64_z(pg, v_T0r, v_tau), \ + svmul_f64_z(pg, v_T0v, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pr1, v_pr2))))\ + )\ + ); + + // Htau += v_fac_b * square(v_T0t * v_tau + v_T0v * (v_pt1 + v_pt2)*0.5)) + Htau = svadd_f64_z(pg, Htau, svmul_f64_z(pg, v_fac_b, my_square_v(pg, svadd_f64_z(pg, \ + svmul_f64_z(pg, v_T0t, v_tau), \ + svmul_f64_z(pg, v_T0v, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pt1, v_pt2))))\ + )\ + )\ + ); + // Htau += v_fac_c * square(v_T0p * v_tau + v_T0v * (v_pp1 + v_pp2)*0.5)) + Htau = svadd_f64_z(pg, Htau, svmul_f64_z(pg, v_fac_c, my_square_v(pg, svadd_f64_z(pg, \ + svmul_f64_z(pg, v_T0p, v_tau), \ + svmul_f64_z(pg, v_T0v, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pp1, v_pp2))))\ + )\ + )\ + ); + + // tmp1 = ( v_T0t * v_tau + v_T0v * (v_pt1 + v_pt2)*0.5) + __mT tmp1 = svadd_f64_z(pg, \ + svmul_f64_z(pg, v_T0t, v_tau), \ + svmul_f64_z(pg, v_T0v, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pt1, v_pt2)))\ + ); + // tmp2 = ( v_T0p * v_tau + v_T0v * (v_pp1 + v_pp2)*0.5)) + __mT tmp2 = svadd_f64_z(pg, \ + svmul_f64_z(pg, v_T0p, v_tau), \ + svmul_f64_z(pg, v_T0v, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pp1, v_pp2)))\ + ); + // tmp3 = -2.0 * v_fac_f * tmp1 * tmp2; + __mT tmp3 = svmul_f64_z(pg, v_m2, svmul_f64_z(pg, v_fac_f, svmul_f64_z(pg, tmp1, tmp2))); + + // Htau = sqrt(Htau + tmp3); // # becamse nan as Htau - tmp3 goes to 0 + Htau = svsqrt_f64_z(pg, svadd_f64_z(pg, Htau, tmp3)); + + // tmp = (sigr*(v_pr2 - v_pr1) + sigt*(v_pt2 - v_pt1) + sigz*(v_pp2 - v_pp1))*0.5 + __mT tmp = svmul_f64_z(pg, v_half, svadd_f64_z(pg, \ + svadd_f64_z(pg, \ + svmul_f64_z(pg, sigr, svsub_f64_z(pg, v_pr2, v_pr1)), \ + svmul_f64_z(pg, sigt, svsub_f64_z(pg, v_pt2, v_pt1))\ + ), \ + svmul_f64_z(pg, sigp, svsub_f64_z(pg, v_pp2, v_pp1))\ + )\ + ); + + // v_tau += coe * ((v_fun - Htau) + tmp) if mask is true + v_tau = svadd_f64_z(pg, v_tau, svmul_f64_z(pg, coe, svadd_f64_z(pg, svsub_f64_z(pg, v_fun, Htau), tmp))); + // mask = v_change != 1.0 + svbool_t mask = svcmpne_f64(pg, v_change, v_1); + // v_tau = v_1 if mask is true (!= 1.0) + v_tau = svsel_f64(mask, v_1, v_tau); + +#endif + +} + + + +inline void vect_stencil_1st_3rd_apre_simd_tele( +#if USE_ARM_SVE + svbool_t const& pg, +#endif + __mT& v_tau, __mT const& v_fac_a,__mT const& v_fac_b, __mT const& v_fac_c, __mT const& v_fac_f, + __mT const& v_fun, __mT const& v_change, + __mT const& v_pp1, __mT const& v_pp2, __mT const& v_pt1, __mT const& v_pt2, __mT const& v_pr1, __mT const& v_pr2, + __mT const& DP_inv, __mT const& DT_inv, __mT const& DR_inv){ + +#if USE_AVX512 || USE_AVX + + // sigr = COEF * sqrt(v_fac_a); + __mT sigr = _mmT_mul_pT(COEF_TELE,_mmT_sqrt_pT(v_fac_a)); + // sigt = COEF * sqrt(v_fac_b); + __mT sigt = _mmT_mul_pT(COEF_TELE,_mmT_sqrt_pT(v_fac_b)); + // sigp = COEF * sqrt(v_fac_c); + __mT sigp = _mmT_mul_pT(COEF_TELE,_mmT_sqrt_pT(v_fac_c)); + + // coe = 1.0 / (sigr/D + sigt/D + sigz/D); + __mT coe = _mmT_div_pT(v_1,_mmT_add_pT(_mmT_add_pT(_mmT_mul_pT(sigr,DR_inv),_mmT_mul_pT(sigt,DT_inv)),_mmT_mul_pT(sigp,DP_inv))); + // coe becomes inf as sig* goes to 0 + // if coe > 1e19, set coe = 1e19 + coe = _mmT_min_pT(coe,coe_max); + + // Htau = v_fac_a * square((v_pr1 + v_pr2)*0.5); + __mT Htau = _mmT_mul_pT(v_fac_a,my_square_v(_mmT_mul_pT(_mmT_add_pT(v_pr1,v_pr2),v_half))); + + // Htau += v_fac_b * square((v_pt1 + v_pt2)*0.5)) + Htau = _mmT_add_pT(Htau,_mmT_mul_pT(v_fac_b,my_square_v(_mmT_mul_pT(_mmT_add_pT(v_pt1,v_pt2), v_half)))); + // Htau += v_fac_c * square((v_pp1 + v_pp2)*0.5)) + Htau = _mmT_add_pT(Htau,_mmT_mul_pT(v_fac_c,my_square_v(_mmT_mul_pT(_mmT_add_pT(v_pp1,v_pp2), v_half)))); + + // tmp1 = (v_pt1 + v_pt2)*0.5 + __mT tmp1 = _mmT_mul_pT(_mmT_add_pT(v_pt1,v_pt2), v_half); + // tmp2 = (v_pp1 + v_pp2)*0.5 + __mT tmp2 = _mmT_mul_pT(_mmT_add_pT(v_pp1,v_pp2), v_half); + // tmp3 = -2.0 * v_fac_f * tmp1 * tmp2; + __mT tmp3 = _mmT_mul_pT(v_m2,_mmT_mul_pT(v_fac_f,_mmT_mul_pT(tmp1,tmp2))); + + // Htau = sqrt(Htau + tmp3); // # becamse nan as Htau - tmp3 goes to 0 + Htau = _mmT_sqrt_pT(_mmT_add_pT(Htau,tmp3)); + + // tmp = (sigr*(v_pr2 - v_pr1) + sigt*(v_pt2 - v_pt1) + sigz*(v_pp2 - v_pp1))*0.5 + __mT tmp = _mmT_mul_pT(v_half,_mmT_add_pT(_mmT_add_pT(_mmT_mul_pT(sigr,_mmT_sub_pT(v_pr2,v_pr1)),_mmT_mul_pT(sigt,_mmT_sub_pT(v_pt2,v_pt1))),_mmT_mul_pT(sigp,_mmT_sub_pT(v_pp2,v_pp1)))); + + // v_tau += coe * ((v_fun - Htau) + tmp) if mask is true + v_tau = _mmT_add_pT(v_tau,_mmT_mul_pT(coe,_mmT_add_pT(_mmT_sub_pT(v_fun,Htau),tmp))); + +#if USE_AVX512 + // mask if v_change != 1.0 + __mmaskT mask = _mm512_cmp_pT_mask(v_change,v_1,_CMP_NEQ_OQ); + // set 1 if mask is true + v_tau = _mm512_mask_blend_pT(mask,v_tau,v_1); +#elif USE_AVX + __m256d mask = _mm256_cmp_pT(v_change, v_1,_CMP_NEQ_OQ); + v_tau = _mm256_blendv_pd(v_tau, v_1,mask); +#endif + +#elif USE_ARM_SVE + + __mT COEF_TELE = svdup_f64(1.05); + __mT v_1 = svdup_f64(1.0); + __mT v_half = svdup_f64(0.5); + __mT v_m2 = svdup_f64(-2.0); + __mT coe_max = svdup_f64(1e19); + + // sigr = COEF * sqrt(v_fac_a); + __mT sigr = svmul_f64_z(pg,COEF_TELE,svsqrt_f64_z(pg,v_fac_a)); + // sigt = COEF * sqrt(v_fac_b); + __mT sigt = svmul_f64_z(pg,COEF_TELE,svsqrt_f64_z(pg,v_fac_b)); + // sigp = COEF * sqrt(v_fac_c); + __mT sigp = svmul_f64_z(pg,COEF_TELE,svsqrt_f64_z(pg,v_fac_c)); + + // coe = 1.0 / (sigr/D + sigt/D + sigz/D); + __mT coe = svdiv_f64_z(pg, v_1, svadd_f64_z(pg, svadd_f64_z(pg, svmul_f64_z(pg, sigr, DR_inv), svmul_f64_z(pg, sigt, DT_inv)), svmul_f64_z(pg, sigp, DP_inv))); + // coe becomes inf as sig* goes to 0 + // if coe > 1e19, set coe = 1e19 + coe = svmin_f64_z(pg, coe, coe_max); + + // Htau = v_fac_a * square((v_pr1 + v_pr2)*0.5); + __mT Htau = svmul_f64_z(pg, v_fac_a, my_square_v(pg, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pr1, v_pr2)))); + // Htau += v_fac_b * square((v_pt1 + v_pt2)*0.5)) + Htau = svadd_f64_z(pg, Htau, svmul_f64_z(pg, v_fac_b, my_square_v(pg, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pt1, v_pt2))))); + // Htau += v_fac_c * square((v_pp1 + v_pp2)*0.5)) + Htau = svadd_f64_z(pg, Htau, svmul_f64_z(pg, v_fac_c, my_square_v(pg, svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pp1, v_pp2))))); + + // tmp1 = (v_pt1 + v_pt2)*0.5 + __mT tmp1 = svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pt1, v_pt2)); + // tmp2 = (v_pp1 + v_pp2)*0.5 + __mT tmp2 = svmul_f64_z(pg, v_half, svadd_f64_z(pg, v_pp1, v_pp2)); + // tmp3 = -2.0 * v_fac_f * tmp1 * tmp2; + __mT tmp3 = svmul_f64_z(pg, v_m2, svmul_f64_z(pg, v_fac_f, svmul_f64_z(pg, tmp1, tmp2))); + + // Htau = sqrt(Htau + tmp3); // # becamse nan as Htau - tmp3 goes to 0 + Htau = svsqrt_f64_z(pg, svadd_f64_z(pg, Htau, tmp3)); + + // tmp = (sigr*(v_pr2 - v_pr1) + sigt*(v_pt2 - v_pt1) + sigz*(v_pp2 - v_pp1))*0.5 + __mT tmp = svmul_f64_z(pg, v_half, svadd_f64_z(pg, \ + svadd_f64_z(pg, \ + svmul_f64_z(pg, sigr, svsub_f64_z(pg, v_pr2, v_pr1)), \ + svmul_f64_z(pg, sigt, svsub_f64_z(pg, v_pt2, v_pt1))\ + ), \ + svmul_f64_z(pg, sigp, svsub_f64_z(pg, v_pp2, v_pp1))\ + )\ + ); + + // v_tau += coe * ((v_fun - Htau) + tmp) if mask is true + v_tau = svadd_f64_z(pg, v_tau, svmul_f64_z(pg, coe, svadd_f64_z(pg, svsub_f64_z(pg, v_fun, Htau), tmp))); + // mask = v_change != 1.0 + svbool_t mask = svcmpne_f64(pg, v_change, v_1); + // v_tau = v_1 if mask is true (!= 1.0) + v_tau = svsel_f64(mask, v_1, v_tau); + +#endif + +} + + +// function for calculating the values on boundaries +inline void calculate_boundary_nodes_tele_simd( +#if USE_ARM_SVE + svbool_t const& pg, +#endif + __mT const& v_iip, __mT const& v_jjt, __mT const& v_kkr, + __mT & v_c__, + __mT const& v_p__, __mT const& v_m__, __mT const& v__p_, __mT const& v__m_, __mT const& v___p, __mT const& v___m, + __mT const& v_pp____, __mT const& v_mm____, __mT const& v___pp__, __mT const& v___mm__, __mT const& v_____pp, __mT const& v_____mm, + __mT const& v_change, + int const& loc_I, int const& loc_J, int const& loc_K +){ + +#if USE_AVX512 + + // mask for bottom boundary (v_kkr == 0 && v_change == 1.0) + __mmaskT mask_bot = _kand_maskT(\ + _mm512_cmp_pT_mask(v_kkr, v_0, _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + // mask for top boundary (v_kkr == loc_K-1 && v_change == 1.0) + __mmaskT mask_top = _kand_maskT(\ + _mm512_cmp_pT_mask(v_kkr, _mmT_set1_pT(loc_K-1), _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + // mask for south boundary (v_jjt == 0 && v_change == 1.0) + __mmaskT mask_south = _kand_maskT(\ + _mm512_cmp_pT_mask(v_jjt, v_0, _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + // mask for north boundary (v_jjt == loc_J-1 && v_change == 1.0) + __mmaskT mask_north = _kand_maskT(\ + _mm512_cmp_pT_mask(v_jjt, _mmT_set1_pT(loc_J-1), _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + // mask for west boundary (v_iip == 0 && v_change == 1.0) + __mmaskT mask_west = _kand_maskT(\ + _mm512_cmp_pT_mask(v_iip, v_0, _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + // mask for east boundary (v_iip == loc_I-1 && v_change == 1.0) + __mmaskT mask_east = _kand_maskT(\ + _mm512_cmp_pT_mask(v_iip, _mmT_set1_pT(loc_I-1), _CMP_EQ_OQ), \ + _mm512_cmp_pT_mask(v_change, v_1, _CMP_EQ_OQ)); + + // if mask_bot, v_c__ = max(2*v___p - v_____pp, v_____pp) + v_c__ = _mm512_mask_blend_pT(mask_bot, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v___p), v_____pp), v_____pp)); + // if mask_top, v_c__ = max(2*v___m - v_____mm, v_____mm) + v_c__ = _mm512_mask_blend_pT(mask_top, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v___m), v_____mm), v_____mm)); + // if mask_south, v_c__ = max(2*v__p_ - v___pp__, v___pp__) + v_c__ = _mm512_mask_blend_pT(mask_south, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v__p_), v___pp__), v___pp__)); + // if mask_north, v_c__ = max(2*v__m_ - v___mm__, v___mm__) + v_c__ = _mm512_mask_blend_pT(mask_north, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v__m_), v___mm__), v___mm__)); + // if mask_west, v_c__ = max(2*v_p__ - v_pp____, v_pp____) + v_c__ = _mm512_mask_blend_pT(mask_west, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v_p__), v_pp____), v_pp____)); + // if mask_east, v_c__ = max(2*v_m__ - v_mm____, v_mm____) + v_c__ = _mm512_mask_blend_pT(mask_east, v_c__, _mmT_max_pT(_mmT_sub_pT(_mmT_mul_pT(v_2, v_m__), v_mm____), v_mm____)); +#elif USE_AVX + + // mask for bottom boundary (v_kkr == 0 && v_change == 1.0) + __m256d mask_bot = _mm256_and_pd(\ + _mm256_cmp_pT(v_kkr, v_0, _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // mask for top boundary (v_kkr == loc_K-1 && v_change == 1.0) + __m256d mask_top = _mm256_and_pd(\ + _mm256_cmp_pT(v_kkr, _mmT_set1_pT(loc_K-1), _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // mask for south boundary (v_jjt == 0 && v_change == 1.0) + __m256d mask_south = _mm256_and_pd(\ + _mm256_cmp_pT(v_jjt, v_0, _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // mask for north boundary (v_jjt == loc_J-1 && v_change == 1.0) + __m256d mask_north = _mm256_and_pd(\ + _mm256_cmp_pT(v_jjt, _mmT_set1_pT(loc_J-1), _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // mask for west boundary (v_iip == 0 && v_change == 1.0) + __m256d mask_west = _mm256_and_pd(\ + _mm256_cmp_pT(v_iip, v_0, _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // mask for east boundary (v_iip == loc_I-1 && v_change == 1.0) + __m256d mask_east = _mm256_and_pd(\ + _mm256_cmp_pT(v_iip, _mmT_set1_pT(loc_I-1), _CMP_EQ_OQ), \ + _mm256_cmp_pT(v_change, v_1, _CMP_EQ_OQ)); + // if mask_bot, v_c__ = max(2*v___p - v_____pp, v_____pp) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v___p), v_____pp), v_____pp), mask_bot); + // if mask_top, v_c__ = max(2*v___m - v_____mm, v_____mm) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v___m), v_____mm), v_____mm), mask_top); + // if mask_south, v_c__ = max(2*v__p_ - v___pp__, v___pp__) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v__p_), v___pp__), v___pp__), mask_south); + // if mask_north, v_c__ = max(2*v__m_ - v___mm__, v___mm__) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v__m_), v___mm__), v___mm__), mask_north); + // if mask_west, v_c__ = max(2*v_p__ - v_pp____, v_pp____) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v_p__), v_pp____), v_pp____), mask_west); + // if mask_east, v_c__ = max(2*v_m__ - v_mm____, v_mm____) + v_c__ = _mm256_blendv_pd(v_c__, _mm256_max_pd(_mm256_sub_pd(_mm256_mul_pd(v_2, v_m__), v_mm____), v_mm____), mask_east); + +#elif USE_ARM_SVE + + svfloat64_t v_0 = svdup_f64(0.0); + svfloat64_t v_1 = svdup_f64(1.0); + svfloat64_t v_2 = svdup_f64(2.0); + svfloat64_t v_loc_I_minus_1 = svdup_f64(loc_I-1); + svfloat64_t v_loc_J_minus_1 = svdup_f64(loc_J-1); + svfloat64_t v_loc_K_minus_1 = svdup_f64(loc_K-1); + + + // mask for bottom boundary + svbool_t mask_bot = svand_b_z(pg, \ + svcmpeq_f64(pg, v_kkr, v_0), \ + svcmpeq_f64(pg, v_change, v_1)); + // mask for top boundary + svbool_t mask_top = svand_b_z(pg, \ + svcmpeq_f64(pg, v_kkr, v_loc_K_minus_1), \ + svcmpeq_f64(pg, v_change, v_1)); + // mask for south boundary + svbool_t mask_south = svand_b_z(pg, \ + svcmpeq_f64(pg, v_jjt, v_0), \ + svcmpeq_f64(pg, v_change, v_1)); + // mask for north boundary + svbool_t mask_north = svand_b_z(pg, \ + svcmpeq_f64(pg, v_jjt, v_loc_J_minus_1), \ + svcmpeq_f64(pg, v_change, v_1)); + // mask for west boundary + svbool_t mask_west = svand_b_z(pg, \ + svcmpeq_f64(pg, v_iip, v_0), \ + svcmpeq_f64(pg, v_change, v_1)); + // mask for east boundary + svbool_t mask_east = svand_b_z(pg, \ + svcmpeq_f64(pg, v_iip, v_loc_I_minus_1), \ + svcmpeq_f64(pg, v_change, v_1)); + + // if mask_bot, v_c__ = max(2*v___p - v_____pp, v_____pp) + v_c__ = svsel_f64(mask_bot, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v___p), v_____pp), v_____pp), \ + v_c__); + // if mask_top, v_c__ = max(2*v___m - v_____mm, v_____mm) + v_c__ = svsel_f64(mask_top, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v___m), v_____mm), v_____mm), \ + v_c__); + // if mask_south, v_c__ = max(2*v__p_ - v___pp__, v___pp__) + v_c__ = svsel_f64(mask_south, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v__p_), v___pp__), v___pp__), \ + v_c__); + // if mask_north, v_c__ = max(2*v__m_ - v___mm__, v___mm__) + v_c__ = svsel_f64(mask_north, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v__m_), v___mm__), v___mm__), \ + v_c__); + // if mask_west, v_c__ = max(2*v_p__ - v_pp____, v_pp____) + v_c__ = svsel_f64(mask_west, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v_p__), v_pp____), v_pp____), \ + v_c__); + // if mask_east, v_c__ = max(2*v_m__ - v_mm____, v_mm____) + v_c__ = svsel_f64(mask_east, \ + svmax_f64_z(pg, svsub_f64_z(pg, svmul_f64_z(pg, v_2, v_m__), v_mm____), v_mm____), \ + v_c__); + +#endif + +} + + + + + + +#if USE_AVX512 || USE_AVX + +inline __mT load_mem_gen_to_mTd(CUSTOMREAL* a, int* ijk){ + + CUSTOMREAL dump_[NSIMD]; + for (int i=0; i/etc/yum.repos.d/CentOS-Base.repo && \ + yum clean all + +RUN yum update ca-certificates -y + +# install dependencies +RUN yum update -y && \ + yum groupinstall -y 'Development Tools' && \ + yum install -y \ + openssl-devel \ + libuuid-devel \ + libseccomp-devel \ + wget \ + squashfs-tools \ + cryptsetup + + + +# install go +ENV VERSION=1.16.2 OS=linux ARCH=amd64 +RUN wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \ + tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \ + rm go$VERSION.$OS-$ARCH.tar.gz +ENV PATH="${PATH}:/usr/local/go/bin" + +# install singularity of 3.6.4 +RUN wget https://github.com/apptainer/singularity/releases/download/v3.6.4/singularity-3.6.4.tar.gz && \ + tar -xvf singularity-3.6.4.tar.gz && \ + rm singularity-3.6.4.tar.gz && \ + cd singularity && \ + ./mconfig && \ + make -C builddir && \ + make -C builddir install + +# install singularity of 3.9 +#ENV VERSION=3.9.5 +#RUN wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz && \ +# tar -xzf singularity-ce-${VERSION}.tar.gz && \ +# cd singularity-ce-${VERSION} && \ +# ./mconfig && \ +# make -C builddir && \ +# make -C builddir install + diff --git a/singularity/Dockerfile_singularity_on_centos6_cuda10.1 b/singularity/Dockerfile_singularity_on_centos6_cuda10.1 new file mode 100644 index 0000000..a755071 --- /dev/null +++ b/singularity/Dockerfile_singularity_on_centos6_cuda10.1 @@ -0,0 +1,47 @@ +FROM nvidia/cuda:10.2-devel-centos6 + +# install wget without yum +RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak && \ + curl https://www.host-stage.net/hsmirrors/centos6repofix >/etc/yum.repos.d/CentOS-Base.repo && \ + yum clean all + +RUN yum update ca-certificates -y + +# install dependencies +RUN yum update -y && \ + yum groupinstall -y 'Development Tools' && \ + yum install -y \ + openssl-devel \ + libuuid-devel \ + libseccomp-devel \ + wget \ + squashfs-tools \ + cryptsetup + + + +# install go +ENV VERSION=1.16.2 OS=linux ARCH=amd64 +RUN wget https://dl.google.com/go/go$VERSION.$OS-$ARCH.tar.gz && \ + tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz && \ + rm go$VERSION.$OS-$ARCH.tar.gz +ENV PATH="${PATH}:/usr/local/go/bin" + +# install singularity of 3.6.4 +RUN wget https://github.com/apptainer/singularity/releases/download/v3.6.4/singularity-3.6.4.tar.gz && \ + tar -xvf singularity-3.6.4.tar.gz && \ + rm singularity-3.6.4.tar.gz && \ + cd singularity && \ + ./mconfig && \ + make -C builddir && \ + make -C builddir install + +# install singularity of 3.9 +#ENV VERSION=3.9.5 +#RUN wget https://github.com/sylabs/singularity/releases/download/v${VERSION}/singularity-ce-${VERSION}.tar.gz && \ +# tar -xzf singularity-ce-${VERSION}.tar.gz && \ +# cd singularity-ce-${VERSION} && \ +# ./mconfig && \ +# make -C builddir && \ +# make -C builddir install + diff --git a/singularity/README.md b/singularity/README.md new file mode 100644 index 0000000..2a93b6c --- /dev/null +++ b/singularity/README.md @@ -0,0 +1,51 @@ +# Singularity image of TomoATT project + +[Singularity](https://docs.sylabs.io/guides/3.10/user-guide/introduction.html) is a container technology that prepare a pre-compiled project's executable with an environment required dependencies (this is called a container image). +This is very useful for the users who are not familiar with the process of compiling the project's executable and installing the required dependencies, and also for the users who are not allowed to install the required dependencies on their system. + +Once the container image is prepared, this image can be uploaded on singularity-hub.org, and the users can download the image and run the project's executable on their system instantly. + +[Docker](https://www.docker.com/) is another container technology similar to Singularity, which is rather popular in the Information Technology (IT) community. However, Docker may not access the MPI library on the native system, which Singularity can do, and this cause degradation of the performance of the application. + +Therefore, Singularity is more popular and suitable in scientific computing community and often used in the HPC environment. + + +This directry includes a singularity receipe file (*.def) to build a container image of TomoATT project. +To build the container image, +``` bash +sudo singularity build tomoatt.sif tomoatt.def +``` + +To run the TomoATT executable on the container image, +``` bash +singularity run tomoatt.sif TOMOATT +``` + +To run the TomoATT executable on the container image with native MPI library, +``` bash +mpirun -n 8 singularity run tomoatt.sif TOMOATT -i input_params.yml +``` +For utilizing the native MPI library, the version number of OpenMPI should be the same between the native system and the container image. +The two variables in tomoatt.def file need to be modified for this purpose. +``` bash + export OMPI_VERSOIN_MAJOR=3.0 + export OMPI_VERSION_FULL=3.0.1 +``` + + +# For running the container image on the HPC with old kernel environment + +Some HPC systems have old kernel environment, e.g. CentOS 6, RHEL 6, and Ubuntu 16.04. +In this case, the container image cannot be run on the HPC system. (The error message is "FATAL: kernel too old") +To create a container image that can be run on the HPC system, this image needs to be built on the old kernel environment as well. +For this purpose, we use [docker](https://www.docker.com/) for virtualy creating an old kernel environment, and then build the container image on it. + +To build the container image on the old kernel environment, +``` bash +docker build -t singularity_on_centos6 -f Dockerfile_singularity_on_centos6 . +``` + +To build the container image on the old kernel environment, +``` bash +docker run --privileged -v "(full path to)/TomoATT:/TomoATT" singularity_on_centos6 singularity build /TomoATT/singularity/tomoatt.sif /TomoATT/singularity/tomoatt.def +``` \ No newline at end of file diff --git a/singularity/tomoatt.def b/singularity/tomoatt.def new file mode 100644 index 0000000..46ca9a1 --- /dev/null +++ b/singularity/tomoatt.def @@ -0,0 +1,87 @@ +Bootstrap: docker +From: ubuntu:16.04 + +%help +This is a test container. + +%files + ../../TomoATT /opt/TomoATT + +%environment + export PKG_DIR=/opt/packages + export SINGULARITY_PKG_DIR=$PKG_DIR + export SINGULARITYENV_APPEND_PATH=$PKG_DIR/bin + export SINGULAIRTYENV_APPEND_LD_LIBRARY_PATH=$PKG_DIR/lib + export PATH=$PKG_DIR/bin:$PATH + export PATH=/opt/TomoATT/build/bin:$PATH + export LD_LIBRARY_PATH=$PKG_DIR/lib:$LD_LIBRARY_PATH + +%post + echo "Installing required packages..." + apt-get update && apt-get install -y wget git bash gcc gfortran g++ make file apt-transport-https ca-certificates + + # install gcc-9 and g++-9 + apt-get install -y software-properties-common && \ + add-apt-repository ppa:ubuntu-toolchain-r/test -y && \ + apt-get update -y && \ + apt-get install -y gcc-9 g++-9 && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 + + # install latest cmake + apt update && \ + apt install -y software-properties-common lsb-release && \ + apt clean all && \ + wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null && \ + apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" && \ + apt update && \ + apt install kitware-archive-keyring && \ + rm /etc/apt/trusted.gpg.d/kitware.gpg && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4 && \ + apt update && \ + apt install -y cmake && \ + apt clean all + + export PKG_DIR=/opt/packages + export NPROC=4 + + echo "Installing Open MPI" + export OMPI_VERSOIN_MAJOR=3.0 + export OMPI_VERSION_FULL=3.0.1 + export OMPI_URL="https://download.open-mpi.org/release/open-mpi/v$OMPI_VERSOIN_MAJOR/openmpi-$OMPI_VERSION_FULL.tar.gz" + mkdir -p /tmp/ompi + mkdir -p /opt + # Download + cd /tmp/ompi && wget -O openmpi-$OMPI_VERSION_FULL.tar.gz $OMPI_URL && tar -xvf openmpi-$OMPI_VERSION_FULL.tar.gz + # Compile and install + cd /tmp/ompi/openmpi-$OMPI_VERSION_FULL && ./configure --prefix=$PKG_DIR && make -j$NPROC && make install + # Set env variables so we can compile our application + export PATH=$PKG_DIR/bin:$PATH + export LD_LIBRARY_PATH=$PKG_DIR/lib:$LD_LIBRARY_PATH + export MANPATH=$PKG_DIR/share/man:$MANPATH + + echo "openmpi installed." + + echo "Compiling hdf5" + + export HDF5_VERSION_MAJOR=1.13 + export HDF5_VERSION_FULL=1.13.2 + export HDF5_URL="https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$HDF5_VERSION_MAJOR/hdf5-$HDF5_VERSION_FULL/src/hdf5-$HDF5_VERSION_FULL.tar.gz" + mkdir -p /tmp/hdf5 + cd /tmp/hdf5 && wget -O hdf5-$HDF5_VERSION_FULL.tar.gz $HDF5_URL && tar -xvf hdf5-$HDF5_VERSION_FULL.tar.gz && cd hdf5-$HDF5_VERSION_FULL + tar -xvf hdf5-$HDF5_VERSION_FULL.tar.gz && cd hdf5-$HDF5_VERSION_FULL + CC=mpicc CXX=mpic++ ./configure --enable-parallel --enable-unsupported --enable-shared --enable-cxx --prefix=$PKG_DIR && make -j$NPROC && make install + + echo "hdf5 installed." + + cd /opt/TomoATT + mkdir -p build && cd build && rm -rf ./* + cmake .. -DCMAKE_PREFIX_PATH=$PKG_DIR + make -j$NPROC + + echo "TomoATT installed." + +%labels + + Maintainer MasaruNagaso + + Version v1.0 diff --git a/singularity/tomoatt_cuda.def b/singularity/tomoatt_cuda.def new file mode 100644 index 0000000..51e3046 --- /dev/null +++ b/singularity/tomoatt_cuda.def @@ -0,0 +1,87 @@ +Bootstrap: docker +From: ubuntu:16.04 + +%help +This is a test container. + +%files + ../../TomoATT /opt/TomoATT + +%environment + export PKG_DIR=/opt/packages + export SINGULARITY_PKG_DIR=$PKG_DIR + export SINGULARITYENV_APPEND_PATH=$PKG_DIR/bin + export SINGULAIRTYENV_APPEND_LD_LIBRARY_PATH=$PKG_DIR/lib + export PATH=$PKG_DIR/bin:$PATH + export PATH=/opt/TomoATT/build/bin:$PATH + export LD_LIBRARY_PATH=$PKG_DIR/lib:$LD_LIBRARY_PATH + +%post + echo "Installing required packages..." + apt-get update && apt-get install -y wget git bash gcc gfortran g++ make file apt-transport-https ca-certificates + + # install gcc-9 and g++-9 + apt-get install -y software-properties-common && \ + add-apt-repository ppa:ubuntu-toolchain-r/test -y && \ + apt-get update -y && \ + apt-get install -y gcc-9 g++-9 && \ + update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 + + # install latest cmake + apt update && \ + apt install -y software-properties-common lsb-release && \ + apt clean all && \ + wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null && \ + apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" && \ + apt update && \ + apt install kitware-archive-keyring && \ + rm /etc/apt/trusted.gpg.d/kitware.gpg && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF7F09730B3F0A4 && \ + apt update && \ + apt install -y cmake && \ + apt clean all + + export PKG_DIR=/opt/packages + export NPROC=4 + + echo "Installing Open MPI" + export OMPI_VERSOIN_MAJOR=3.0 + export OMPI_VERSION_FULL=3.0.1 + export OMPI_URL="https://download.open-mpi.org/release/open-mpi/v$OMPI_VERSOIN_MAJOR/openmpi-$OMPI_VERSION_FULL.tar.gz" + mkdir -p /tmp/ompi + mkdir -p /opt + # Download + cd /tmp/ompi && wget -O openmpi-$OMPI_VERSION_FULL.tar.gz $OMPI_URL && tar -xvf openmpi-$OMPI_VERSION_FULL.tar.gz + # Compile and install + cd /tmp/ompi/openmpi-$OMPI_VERSION_FULL && ./configure --prefix=$PKG_DIR && make -j$NPROC && make install + # Set env variables so we can compile our application + export PATH=$PKG_DIR/bin:$PATH + export LD_LIBRARY_PATH=$PKG_DIR/lib:$LD_LIBRARY_PATH + export MANPATH=$PKG_DIR/share/man:$MANPATH + + echo "openmpi installed." + + echo "Compiling hdf5" + + export HDF5_VERSION_MAJOR=1.13 + export HDF5_VERSION_FULL=1.13.2 + export HDF5_URL="https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$HDF5_VERSION_MAJOR/hdf5-$HDF5_VERSION_FULL/src/hdf5-$HDF5_VERSION_FULL.tar.gz" + mkdir -p /tmp/hdf5 + cd /tmp/hdf5 && wget -O hdf5-$HDF5_VERSION_FULL.tar.gz $HDF5_URL && tar -xvf hdf5-$HDF5_VERSION_FULL.tar.gz && cd hdf5-$HDF5_VERSION_FULL + tar -xvf hdf5-$HDF5_VERSION_FULL.tar.gz && cd hdf5-$HDF5_VERSION_FULL + CC=mpicc CXX=mpic++ ./configure --enable-parallel --enable-unsupported --enable-shared --enable-cxx --prefix=$PKG_DIR && make -j$NPROC && make install + + echo "hdf5 installed." + + cd /opt/TomoATT + mkdir -p build && cd build && rm -rf ./* + cmake .. -DUSE_CUDA=True -DCMAKE_PREFIX_PATH=$PKG_DIR + make -j$NPROC + + echo "TomoATT installed." + +%labels + + Maintainer MasaruNagaso + + Version v1.0 diff --git a/src/SrcRecWeight.cxx b/src/SrcRecWeight.cxx new file mode 100644 index 0000000..35f8f59 --- /dev/null +++ b/src/SrcRecWeight.cxx @@ -0,0 +1,505 @@ +#include +#include +#include + +#include "utils.h" +#include "input_params.h" +#include "src_rec.h" +#include "mpi_funcs.h" + +#ifdef USE_OMP +#include +#endif + +/* + caluclate geographical weight for sources and receivers. + At first, we calculate inversed weight for each source from summation of epicentral distances to all sources. + Then, we calculate inversed weight for each receiver from summation of epicentral distances to all receivers. + + ref: Youyi Ruan(2019) https://academic.oup.com/gji/article/219/2/1225/5542709 +*/ + +void calc_dist_min_max(std::map& src_or_rec, \ + std::vector& id2name,\ + CUSTOMREAL& d_min, CUSTOMREAL& d_max){ + // calculate the min and max epicentral distance of all src_or_rec + + // check the min and max epicentral distance of all src_or_rec + CUSTOMREAL tmp_min = 1.0e+10; + CUSTOMREAL tmp_max = 0.0; + + int n_elm = src_or_rec.size(); + + #pragma omp parallel for default(none) shared(src_or_rec, id2name, n_elm) reduction(min:tmp_min) reduction(max:tmp_max) + for (int i = 0; i < n_elm-1; i++) { + for (int j = i+1; j < n_elm; j++) { + CUSTOMREAL d_ij = 0.0; + + SrcRecInfo& sr_i = src_or_rec[id2name[i]]; + SrcRecInfo& sr_j = src_or_rec[id2name[j]]; + + Epicentral_distance_sphere(sr_i.lat*DEG2RAD, \ + sr_i.lon*DEG2RAD, \ + sr_j.lat*DEG2RAD, \ + sr_j.lon*DEG2RAD, \ + d_ij); + + if (d_ij < tmp_min) tmp_min = d_ij; + if (d_ij > tmp_max) tmp_max = d_ij; + } + } + + // set result + d_min = tmp_min; + d_max = tmp_max; + + // print the min and max epicentral distance + //std::cout << "min epicentral distance = " << d_min << std::endl; + //std::cout << "max epicentral distance = " << d_max << std::endl; + +} + +void init_weight(std::map& src_or_rec, \ + std::vector& id2name){ + // initialize all the source and receiver weights to be zero + #pragma omp parallel for default(none) shared(src_or_rec, id2name) + for (int i = 0; i < (int)id2name.size(); i++) { + src_or_rec[id2name[i]].sum_weight = 0.0; + } +} + + +CUSTOMREAL _calc_weight(std::map& src_or_rec, \ + std::vector& id2name, \ + CUSTOMREAL& d_zero){ + + int n_elm = id2name.size(); + + // parallelize loop over sources and receivers + // sharing src_or_rec.weight + #pragma omp parallel for default(none) shared(src_or_rec, id2name, n_elm, d_zero, std::cout) + for (int i = 0; i < n_elm-1; i++) { + for (int j = i+1; j < n_elm; j++) { + CUSTOMREAL d_ij = 0.0; + + SrcRecInfo& sr_i = src_or_rec[id2name[i]]; + SrcRecInfo& sr_j = src_or_rec[id2name[j]]; + + Epicentral_distance_sphere(sr_i.lat*DEG2RAD, \ + sr_i.lon*DEG2RAD, \ + sr_j.lat*DEG2RAD, \ + sr_j.lon*DEG2RAD, \ + d_ij); + + d_ij *= RAD2DEG; + + CUSTOMREAL w_inv_tmp = std::exp(-std::pow(d_ij/d_zero, 2.0)); + //CUSTOMREAL w_inv_tmp = std::pow(-(d_ij/d_zero)*(d_ij/d_zero),4.0); + + // check if w_inv_tmp is nan or inf + if (std::isnan(w_inv_tmp) || std::isinf(w_inv_tmp)) { + std::cout << "w_inv_tmp is nan or inf " << std::endl; + std::cout << "d_ij = " << d_ij << std::endl; + std::cout << "d_zero = " << d_zero << std::endl; + std::cout << "i = " << i << std::endl; + std::cout << "j = " << j << std::endl; + std::cout << "name_i = " << id2name[i] << std::endl; + std::cout << "name_j = " << id2name[j] << std::endl; + std::cout << "sr_i.id = " << sr_i.id << std::endl; + std::cout << "sr_j.id = " << sr_j.id << std::endl; + std::cout << "sr_i.lat = " << sr_i.lat << std::endl; + std::cout << "sr_i.lon = " << sr_i.lon << std::endl; + std::cout << "sr_j.lat = " << sr_j.lat << std::endl; + std::cout << "sr_j.lon = " << sr_j.lon << std::endl; + std::cout << "w_inv_tmp = " << w_inv_tmp << std::endl; + exit(1); + } + + sr_i.sum_weight += w_inv_tmp; + sr_j.sum_weight += w_inv_tmp; + } + } + + + // here the weight is inversed weight, so we need to invert it + #pragma omp parallel for default(none) shared(src_or_rec, id2name, n_elm, d_zero, std::cout) + for (int i = 0; i < n_elm; i++) { + CUSTOMREAL w_tmp = src_or_rec[id2name[i]].sum_weight; + // check if w_tmp is nan or inf + if (std::isnan(w_tmp) || std::isinf(w_tmp)){ + std::cout << "w_tmp is nan or inf" << std::endl; + std::cout << "i = " << i << std::endl; + std::cout << "name_i = " << id2name[i] << std::endl; + std::cout << "w_tmp = " << w_tmp << std::endl; + exit(1); + } + + + src_or_rec[id2name[i]].sum_weight = 1.0/src_or_rec[id2name[i]].sum_weight; + } + + // calculate condition number (min/max of weight) + CUSTOMREAL w_min = 1.0e+10; + CUSTOMREAL w_max = 0.0; + + // parallelize loop for finding min and max with reduction + #pragma omp parallel for default(none) shared(src_or_rec, id2name, n_elm) reduction(min:w_min) reduction(max:w_max) + for (int i = 0; i < n_elm; i++) { + if (src_or_rec[id2name[i]].sum_weight < w_min) w_min = src_or_rec[id2name[i]].sum_weight; + if (src_or_rec[id2name[i]].sum_weight > w_max) w_max = src_or_rec[id2name[i]].sum_weight; + } + + std::cout << "weight min = " << w_min << std::endl; + std::cout << "weight max = " << w_max << std::endl; + std::cout << "condition number = " << w_max/w_min << std::endl; + + return w_max/w_min; + +} + + +int find_good_ncond(std::vector& condition_numbers){ + // select the best condition number + + int n_try = condition_numbers.size(); + + CUSTOMREAL ncond_min = 1.0e+10; + CUSTOMREAL ncond_max = 0.0; + + for (int i = 0; i < n_try; i++) { + // ignore abnormal value + if (std::isnan(condition_numbers[i])) continue; + if (std::isinf(condition_numbers[i])) continue; + + if (condition_numbers[i] < ncond_min) { + ncond_min = condition_numbers[i]; + } + if (condition_numbers[i] > ncond_max) { + ncond_max = condition_numbers[i]; + } + } + + // find the first one-third point between min and max condition number + CUSTOMREAL ncond_1_3 = ncond_min + (ncond_max - ncond_min) / 3.0; + int ncond_1_3_idx = 0; + + for (int i = 0; i < n_try; i++) { + // ignore abnormal value + if (std::isnan(condition_numbers[i])) continue; + if (std::isinf(condition_numbers[i])) continue; + + if (condition_numbers[i] > ncond_1_3) { + ncond_1_3_idx = i; + break; + } + } + + return ncond_1_3_idx; +} + + +void normalize_weight(std::map& src_or_rec, std::vector& id2name){ + + // scale weight values to be \sum_{i}^{S} w_i = S + + int n_elm = src_or_rec.size(); + CUSTOMREAL w_sum = 0.0; + #pragma omp parallel for default(none) reduction(+:w_sum) shared(src_or_rec, id2name, n_elm) + for(int i = 0; i < n_elm; i++){ + w_sum += src_or_rec[id2name[i]].sum_weight; + } + + #pragma omp parallel for default(none) shared(src_or_rec, id2name, n_elm, w_sum) + for (int i=0; i>>& data_map, \ + std::map& src_map, \ + std::map& rec_map, \ + std::vector& src_id2name, \ + std::vector& rec_id2name){ + + // normalize weight in each event (sum of weight*n_data becomes 1.0*number of data tracks in the event) + int n_src = src_id2name.size(); + int n_rec = rec_id2name.size(); + +// +// this way cancel the geographical weight on the receiver side +// + #pragma omp parallel for default(none) shared(data_map, src_map, rec_map, src_id2name, rec_id2name, n_src, n_rec) + for (int i = 0; i < n_src; i++) { + CUSTOMREAL w_sum_tmp = 0.0; // sum of receiver weight + for (int j = 0; j < n_rec; j++) { + int v_data_size = data_map[src_id2name[i]][rec_id2name[j]].size(); + if (v_data_size > 0) { + CUSTOMREAL& weight_rec = rec_map[rec_id2name[j]].sum_weight; + w_sum_tmp += weight_rec*v_data_size; + //n_data +=v_data_size; + } + } + + // normalize for receivers + for (int j = 0; j < n_rec; j++) { + for(auto &data : data_map[src_id2name[i]][rec_id2name[j]]){ + data.data_weight = src_map[src_id2name[i]].sum_weight*rec_map[rec_id2name[j]].sum_weight/w_sum_tmp; + } + } + } + +// #pragma omp parallel for default(none) shared(data_map, src_map, rec_map, src_id2name, rec_id2name, n_src, n_rec) +// for (int i = 0; i < n_src; i++) { +// for (int j = 0; j < n_rec; j++) { +// int v_data_size = data_map[src_id2name[i]][rec_id2name[j]].size(); +// for (int k = 0; k < v_data_size; k++) { +// data_map[src_id2name[i]][rec_id2name[j]][k].data_weight = src_map[src_id2name[i]].sum_weight*rec_map[rec_id2name[j]].sum_weight; +// } +// } +// } +} + + + + +void calc_weight(std::map& src_or_rec, \ + std::vector& id2name){ + + CUSTOMREAL d_zero_fin; + + if (ref_value < 0) { + + // calculate the weights of sources or receivers + int n_try = 30; // number of tries + + // get the min and max epicentral distance of all src_or_rec + CUSTOMREAL d_min, d_max; + // calc_dist_min_max(src_or_rec, id2name, d_min, d_max); + + // convert rad to deg + //d_min *= RAD2DEG; + //d_max *= RAD2DEG; + + d_max = 5.0; // in deg + d_min = 0.01; // shouldn't be 0.0 + // + std::cout << "ref distance min = " << d_min << std::endl; + std::cout << "ref distance max = " << d_max << std::endl; + + std::vector condition_numbers; // store the condition numbers + std::vector test_d_zero; // store the test d_zero + + // prepare the test d_zero (d_min ~ d_max by n_try times) + CUSTOMREAL d_zero_step = (d_max - d_min) / (n_try - 1); + CUSTOMREAL d_zero_tmp = d_min; // void d_zero = 0.0 + for (int i = 0; i < n_try; i++) { + test_d_zero.push_back(d_zero_tmp); + d_zero_tmp += d_zero_step; + } + + // calculate the weights iteratively + int c = 0; + for (auto& d_zero_try : test_d_zero) { + // initialize all the source or receiver weights to be zero + init_weight(src_or_rec, id2name); + CUSTOMREAL ncond = _calc_weight(src_or_rec, id2name, d_zero_try); + + // store the condition number + condition_numbers.push_back(ncond); + + // output d_zero and condition number + std::cout << "i-iter/total: " << c << "/" << n_try << ", d_zero: " << d_zero_try << ", condition number: " << ncond << std::endl; + + c++; + } + + // find the one-third point between min and max condition number + d_zero_fin = test_d_zero[find_good_ncond(condition_numbers)]; + + } else { + // use largest distance as d_zero_fin + d_zero_fin = ref_value; + } + + // calculate the weights with the final d_zero + init_weight(src_or_rec, id2name); + _calc_weight(src_or_rec, id2name, d_zero_fin); + +} + +void calculate_src_rec_weight(std::map &src_map, \ + std::map &rec_map, \ + std::map>> &data_map, \ + std::vector &src_id2name, \ + std::vector &rec_id2name) { + + + // calculate source weights + std::cout << "calculating source weights..." << std::endl; + calc_weight(src_map, src_id2name); + // normalize the source weight + normalize_weight(src_map, src_id2name); + + // calculate receiver weights + std::cout << "calculating receiver weights..." << std::endl; + calc_weight(rec_map, rec_id2name); + + // normalize the receiver weight + // (the receiver weight is normalized for each source) + normalize_weight_data(data_map, src_map, rec_map, src_id2name, rec_id2name); + + // end +} + + +void write_src_rec_file_with_weight(std::string src_rec_file_out, \ + std::map &src_map, \ + std::map &rec_map, \ + std::map>> &data_map, \ + std::vector &src_id2name, \ + std::vector &rec_id2name){ + + std::ofstream ofs; + + // open file + ofs.open(src_rec_file_out); + + for (int i_src = 0; i_src < (int)src_id2name.size(); i_src++){ + + std::string name_src = src_id2name[i_src]; + SrcRecInfo src = src_map[name_src]; + + // format should be the same as input src_rec_file + // source line : id_src year month day hour min sec lat lon dep_km mag num_recs id_event + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << src.year << " " << src.month << " " << src.day << " " + << src.hour << " " << src.min << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.sec << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.dep << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.mag << " " + << std::setw(5) << std::right << std::setfill(' ') << src.n_data << " " + << src.name << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << 1.0 //src.sum_weight + << std::endl; + + // data line + int i_rec = 0; + for (auto iter = data_map[name_src].begin(); iter != data_map[name_src].end(); iter++){ + + const std::string name_rec = iter->first; + std::vector v_data = data_map[name_src][name_rec]; + + for (const auto& data : v_data){ + + // absolute traveltime data + if (data.is_src_rec){ + SrcRecInfo rec = rec_map[name_rec]; + + CUSTOMREAL travel_time = data.travel_time_obs; // write the observed travel time + + // receiver line : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << i_rec << " " + << rec.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << -1.0*rec.dep*1000.0 << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << travel_time << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + + i_rec++; + }else { + std::cout << "Error: data type is not defined." << std::endl; + exit(1); + } // end of if (data.is_src_rec) + + } // end of for (const auto& data : v_data) + } // end of for (auto iter = data_map_back[name_src].begin(); iter != data_map_back[name_src].end(); iter++) + } // end of for (int i_src = 0; i_src < (int)src_name_list.size(); i_src++) + + // close file + ofs.close(); + + +} + +// +// function for calculating the source and receiver weight +// MNMN: receiver pair data is not supported yet. +int main(int argc, char *argv[]) +{ + // parse options + parse_options_srcrec_weight(argc, argv); + + // init mpi + initialize_mpi(); + + // exit if number of processes is not 1 + if (nprocs > 1) { + std::cout << "number of processes should be 1." << std::endl; + exit(1); + } + +#ifdef USE_OMP + // srcrec weight calculation uses opnemp parallelization + // set 12 threads for openmp + omp_set_num_threads(12); + + // n threads + int n_threads = omp_get_max_threads(); +#endif + + stdout_by_main("------------------------------------------------------"); + stdout_by_main("start Src Rec weight calculation."); + std::cout << "number of openmp threads: " << n_threads << std::endl; + stdout_by_main("------------------------------------------------------"); + + std::map src_map; + std::map rec_map; + std::map>> data_map; + std::vector src_id2name, rec_id2name; + std::vector>> rec_id2name_back_dummy; + + std::cout << "parsing src_rec file: " << input_file << std::endl; + + // read src_rec file + parse_src_rec_file(input_file, \ + src_map, \ + rec_map, \ + data_map, \ + src_id2name, \ + rec_id2name_back_dummy); + + // create rec_id2name + for (auto& rec: rec_map) { + rec_id2name.push_back(rec.first); + } + + std::cout << "calculating source and receiver weight..." << std::endl; + + // calculate source and receiver weight + calculate_src_rec_weight(src_map, rec_map, data_map, src_id2name, rec_id2name); + + std::cout << "writing src_rec file with weight: " << output_file_weight << std::endl; + + // write src_rec file with calculated weights + write_src_rec_file_with_weight(output_file_weight, \ + src_map, \ + rec_map, \ + data_map, \ + src_id2name, \ + rec_id2name); + + stdout_by_main("------------------------------------------------------"); + stdout_by_main("end Src Rec weight calculation."); + stdout_by_main(("output file: " + output_file_weight).c_str()); + stdout_by_main("------------------------------------------------------"); + return 0; + +} \ No newline at end of file diff --git a/src/TOMOATT.cxx b/src/TOMOATT.cxx new file mode 100644 index 0000000..100d2e7 --- /dev/null +++ b/src/TOMOATT.cxx @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "source.h" +#include "receiver.h" +#include "kernel.h" +#include "model_update.h" +#include "main_routines_calling.h" +#include "eikonal_solver_2d.h" +#include "version.h" +#include "oneD_inversion.h" + +#ifdef USE_CUDA +#include "cuda_initialize.cuh" +#endif + +//#ifdef USE_BLAS +//#include "cblas.h" +//#endif + +// TOMOATT main function +int main(int argc, char *argv[]) +{ + // parse options + parse_options(argc, argv); + + // initialize mpi + initialize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero(("TOMOATT version: " + std::string(TOMOATT_VERSION)).c_str()); + stdout_by_rank_zero(("git commit: " + std::string(GIT_COMMIT)).c_str()); + stdout_by_rank_zero("TOMOATT calculation starting..."); + stdout_by_rank_zero("------------------------------------------------------"); + + // read input file + InputParams IP(input_file); + + // create output directory + create_output_dir(output_dir); + +#ifdef USE_CUDA + // initialize cuda + if(use_gpu) initialize_cuda(); +#endif + +#ifdef USE_SIMD + // check SIMD type + if (myrank==0) + print_simd_type(); +#endif + + // check the number of mpi processes and ndiv setting is consistent + check_total_nprocs_and_ndiv(); + + // split mpi communicator for simultaneous run, subdomain division and sweep parallelization + split_mpi_comm(); + + // assign source for each simultaneous run group + IP.prepare_src_map(); + + // initialize file IO object + IO_utils io(IP); // create IO object for main and non-main process as well + + { + // initialize compute grids (use scope block to ensure destruction before MPI_Finalize) + Grid grid(IP, io); // member objects are created in only the main process of subdomain groups + + // output inversion grid file (by main process) + grid.inv_grid->write_inversion_grid_to_file(); + + if (subdom_main) { + // output grid data (grid data is only output in the main simulation) + io.write_grid(grid); + } + + // preapre teleseismic boundary conditions (do nothinng if no teleseismic source is defined) + prepare_teleseismic_boundary_conditions(IP, grid, io); // not ready for new version of src rec data + + synchronize_all_world(); + + // + // run main calculation routines depending on specified mode + // + if (IP.get_run_mode() == ONLY_FORWARD || IP.get_run_mode() == DO_INVERSION){ + run_forward_only_or_inversion(IP, grid, io); + } else if (IP.get_run_mode() == TELESEIS_PREPROCESS) { + // terminate the program here if the run mode is TELESEIS_PREPROCESS + // because prepare_teleseismic_boundary_conditions is already called. + } else if (IP.get_run_mode() == SRC_RELOCATION) { + run_earthquake_relocation(IP, grid, io); + } else if (IP.get_run_mode() == INV_RELOC) { + run_inversion_and_relocation(IP,grid,io); + } else if (IP.get_run_mode() == ONED_INVERSION) { + run_1d_inversion(IP,grid,io); + } else { + std::cerr << "Error: invalid run mode is specified." << std::endl; + exit(1); + } + + // output final state of the model + if (IP.get_if_output_final_model()) { + io.write_merged_model(grid, IP, "final_model.h5"); + } + + synchronize_all_world(); + + } // Grid destructor called here - before finalize_mpi()! + + + // finalize cuda +#ifdef USE_CUDA + if (use_gpu) finalize_cuda(); +#endif + + // finalize mpi + finalize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero("TOMOATT calculation end."); + stdout_by_rank_zero("------------------------------------------------------"); + + return 0; +} \ No newline at end of file diff --git a/src/TOMOATT_2d_precalc.cxx b/src/TOMOATT_2d_precalc.cxx new file mode 100644 index 0000000..a5f775c --- /dev/null +++ b/src/TOMOATT_2d_precalc.cxx @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "source.h" +#include "iterator.h" +#include "iterator_selector.h" + +#include "eikonal_solver_2d.h" + +#ifdef USE_CUDA +#include "cuda_initialize.cuh" +#endif + +// TOMOATT main function +int main(int argc, char *argv[]) +{ + // parse options + parse_options(argc, argv); + + // initialize mpi + initialize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero("start TOMOATT 2d pre calculation mode."); + stdout_by_rank_zero("------------------------------------------------------"); + + // read input file + InputParams IP(input_file); + + // create output directory + create_output_dir(output_dir); + + // check the number of mpi processes and ndiv setting is consistent + check_total_nprocs_and_ndiv(); + + // split mpi communicator for simultaneous run, subdomain division and sweep parallelization + split_mpi_comm(); + + // assign source for each simultaneous run group + IP.prepare_src_map(); + + // initialize file IO object + IO_utils io(IP); // create IO object for main and non-main process as well + + // initialize compute grids + Grid grid(IP, io); // member objects are created in only the main process of subdomain groups + + if (subdom_main) { + // output grid data (grid data is only output in the main simulation) + io.write_grid(grid); + } + + // preapre teleseismic boundary conditions (do nothinng if no teleseismic source is defined) + prepare_teleseismic_boundary_conditions(IP, grid, io); + + synchronize_all_world(); + + // finalize mpi + finalize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero("end TOMOATT 2d pre calculation mode."); + stdout_by_rank_zero("------------------------------------------------------"); + + return 0; +} \ No newline at end of file diff --git a/src/TOMOATT_solver_only.cxx b/src/TOMOATT_solver_only.cxx new file mode 100644 index 0000000..b8e24e4 --- /dev/null +++ b/src/TOMOATT_solver_only.cxx @@ -0,0 +1,165 @@ +//# TODO: this file need to modify for new srcrec handling routines + + +#include +#include +#include +#include +#include "mpi_funcs.h" +#include "config.h" +#include "utils.h" +#include "input_params.h" +#include "grid.h" +#include "io.h" +#include "source.h" +#include "iterator.h" +#include "iterator_selector.h" +#include "eikonal_solver_2d.h" +#include "main_routines_inversion_mode.h" + +#ifdef USE_CUDA +#include "cuda_initialize.cuh" +#endif + +// TOMOATT main function +int main(int argc, char *argv[]) +{ + // parse options + parse_options(argc, argv); + + // here we set i_inv = 0; but later we can modify the code to set from command line + int i_inv = 0; + + // initialize mpi + initialize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero("start TOMOATT only traveltime field calculation mode."); + stdout_by_rank_zero("------------------------------------------------------"); + + // read input file + InputParams IP(input_file); + + // create output directory + create_output_dir(output_dir); + +#ifdef USE_CUDA + // initialize cuda + if(use_gpu) initialize_cuda(); +#endif + +#ifdef USE_SIMD + // check SIMD type + if (myrank==0) + print_simd_type(); +#endif + + // check the number of mpi processes and ndiv setting is consistent + check_total_nprocs_and_ndiv(); + + // split mpi communicator for simultaneous run, subdomain division and sweep parallelization + split_mpi_comm(); + + // assign source for each simultaneous run group + IP.prepare_src_map(); + + // initialize file IO object + IO_utils io(IP); // create IO object for main and non-main process as well + + // initialize compute grids + Grid grid(IP, io); // member objects are created in only the main process of subdomain groups + + if (subdom_main) { + // output grid data (grid data is only output in the main simulation) + io.write_grid(grid); + } + + // preapre teleseismic boundary conditions (do nothinng if no teleseismic source is defined) + prepare_teleseismic_boundary_conditions(IP, grid, io); + + synchronize_all_world(); + + // initialize factors + grid.reinitialize_abcf(); + + // prepare iteration group in xdmf file + io.prepare_grid_inv_xdmf(i_inv); + + /////////////////////// + // loop for each source + /////////////////////// + Source src; + + for (long unsigned int i_src = 0; i_src < IP.n_src_comm_rec_this_sim_group; i_src++) { + + // check if this is the first source + bool first_init = (i_src==0); + + // check source info + std::string name_sim_src = IP.get_src_name_comm(i_src); // source name + int id_sim_src = IP.get_src_id(name_sim_src); // global source id + bool is_teleseismic = IP.get_if_src_teleseismic(name_sim_src); // get is_teleseismic flag + + // set simu group id and source name for output files/dataset names + io.reset_source_info(id_sim_src, name_sim_src); + + if (myrank == 0) + std::cout << "source id: " << id_sim_src << ", forward modeling starting..." << std::endl; + + // (re) initialize source object and set to grid + src.set_source_position(IP, grid, is_teleseismic, name_sim_src); + + ///////////////////////// + // run forward simulation + ///////////////////////// + + // initialize iterator object + std::unique_ptr It; + + if (!hybrid_stencil_order){ + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, false); + It->run_iteration_forward(IP, grid, io, first_init); + } else { + // hybrid stencil mode + std::cout << "\nrunnning in hybrid stencil mode\n" << std::endl; + + // run 1st order forward simulation + std::unique_ptr It_pre; + IP.set_stencil_order(1); + IP.set_conv_tol(IP.get_conv_tol()*100.0); + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It_pre, false); + It_pre->run_iteration_forward(IP, grid, io, first_init); + + // run 3rd order forward simulation + IP.set_stencil_order(3); + IP.set_conv_tol(IP.get_conv_tol()/100.0); + select_iterator(IP, grid, src, io, name_sim_src, first_init, is_teleseismic, It, true); + It->run_iteration_forward(IP, grid, io, first_init); + } + + // output the result of forward simulation + // ignored for inversion mode. + io.write_T_merged(grid, IP, i_inv); + + } // end loop sources + + // wait for all processes to finish + synchronize_all_world(); + + // close xdmf file + io.finalize_data_output_file(); + + // finalize cuda +#ifdef USE_CUDA + if (use_gpu) finalize_cuda(); +#endif + + // finalize mpi + finalize_mpi(); + + stdout_by_rank_zero("------------------------------------------------------"); + stdout_by_rank_zero("end TOMOATT only traveltime calculation mode."); + stdout_by_rank_zero("------------------------------------------------------"); + + return 0; +} \ No newline at end of file diff --git a/src/eikonal_solver_2d.cpp b/src/eikonal_solver_2d.cpp new file mode 100644 index 0000000..9c7d0f9 --- /dev/null +++ b/src/eikonal_solver_2d.cpp @@ -0,0 +1,1075 @@ +#include "eikonal_solver_2d.h" + +void prepare_teleseismic_boundary_conditions(InputParams& IP, Grid& grid, IO_utils& io) { + bool if_teleseismic_event_exists=false; + + // 2D travel time fields vary only by the depth of the source. + // So here we make another src_id2name list for dropping the sources + // that have the same depth, in onder to reduce the number of 2D eikonal solver runs. + + // so we use + // - src_id2name_2d + // - src_map_2d + // for 2D eikonal solver runs + + // in the current implentation, we only run the 2d solver with the proc_store_srcrec process + // thus all the processes assigned to subdomain and sweep parallelization will not used. + // For efficiency, it is strongly recommended to use pre-run mode of teleseismic source calculation, + // with no domain decomposition and sweep parallelization. + + // + // pre calculation of 2d travel time fields + // + + for (int i_src = 0; i_src < IP.n_src_2d_this_sim_group; i_src++){ + + std::string name_sim_src; + + if (proc_store_srcrec) + name_sim_src = IP.src_id2name_2d[i_src]; + broadcast_str(name_sim_src, 0); + + // get source info + bool is_teleseismic = true; // the object in src_id2name_2d is always teleseismic + // #BUG: src in src_id2name_2d includes the srcs in other sim groups. + bool for_2d_solver = true; + + Source src; + src.set_source_position(IP, grid, is_teleseismic, name_sim_src, for_2d_solver); + + // run 2d eikonal solver for teleseismic boundary conditions if teleseismic event + if (proc_store_srcrec){ + if (myrank==0) + std::cout << "solve 2d eikonal equation for src: " << name_sim_src << std::endl; + run_2d_solver(IP, src, io); + } + } + + synchronize_all_world(); + + // boundary travel time data should not be loaded here because the memory requirement will be + // too large for large scale simulations. + // instead, we load the boundary travel time data at the initialization of the iterator class. + + if (IP.n_src_2d_this_sim_group > 0) + if_teleseismic_event_exists = true; + + if (myrank==0 && if_teleseismic_event_exists) + std::cout << "done preparing teleseismic boundary conditions" << std::endl; +} + + + +PlainGrid::PlainGrid(Source& src, InputParams& IP) { + + //stdout_by_main("PlainGrid initialization start."); + + // get source info + src_r = src.get_src_r(); + src_t = src.get_src_t(); + src_p = src.get_src_p(); + src_t_dummy = _0_CR; // dummy src_t + rmin_3d = radius2depth(IP.get_max_dep()); + rmax_3d = radius2depth(IP.get_min_dep()); + tmin_3d = IP.get_min_lat(); + tmax_3d = IP.get_max_lat(); + pmin_3d = IP.get_min_lon(); + pmax_3d = IP.get_max_lon(); + + // allocate arrays + allocate_arrays(); + + // calculate epicentral distance and azimuth between source and simulation domain + // S-W + Epicentral_distance_sphere(tmin_3d, pmin_3d, src_t, src_p, epicentral_distance_2d[0]); + Azimuth_sphere(tmin_3d, pmin_3d, src_t, src_p, azimuth_2d[0]); + // S-E + Epicentral_distance_sphere(tmin_3d, pmax_3d, src_t, src_p, epicentral_distance_2d[1]); + Azimuth_sphere(tmin_3d, pmax_3d, src_t, src_p, azimuth_2d[1]); + // N-W + Epicentral_distance_sphere(tmax_3d, pmin_3d, src_t, src_p, epicentral_distance_2d[2]); + Azimuth_sphere(tmax_3d, pmin_3d, src_t, src_p, azimuth_2d[2]); + // N-E + Epicentral_distance_sphere(tmax_3d, pmax_3d, src_t, src_p, epicentral_distance_2d[3]); + Azimuth_sphere(tmax_3d, pmax_3d, src_t, src_p, azimuth_2d[3]); + + // determine which boundaries are activated + max_degree = std::max({ + std::abs(epicentral_distance_2d[0]), + std::abs(epicentral_distance_2d[1]), + std::abs(epicentral_distance_2d[2]), + std::abs(epicentral_distance_2d[3]), + }); + + //activated_boundaries[0] = true; // N + //activated_boundaries[1] = true; // E + //activated_boundaries[2] = true; // W + //activated_boundaries[3] = true; // S + //activated_boundaries[4] = true; // Bot + + // grid setup + nr_2d = std::floor((rmax_2d-rmin_2d)/dr_2d)+1; + nt_2d = std::floor((tmax_2d-tmin_2d)/dt_2d)+1; + + // initialize arrays + r_2d = allocateMemory(nr_2d, 4000); + t_2d = allocateMemory(nt_2d, 4001); + + // fill arrays + for (int i = 0; i < nr_2d; i++) { + r_2d[i] = rmin_2d + i*dr_2d; + } + for (int i = 0; i < nt_2d; i++) { + t_2d[i] = tmin_2d + i*dt_2d; + } + + // output summary of 2d grid + if (myrank==0 && if_verbose) { + std::cout << "\n\n2d grid info :" << std::endl; + std::cout << "nr_2d: " << nr_2d << std::endl; + std::cout << "nt_2d: " << nt_2d << std::endl; + std::cout << "rmin_2d: " << rmin_2d << std::endl; + std::cout << "rmax_2d: " << rmax_2d << std::endl; + std::cout << "tmin_2d: " << tmin_2d << std::endl; + std::cout << "tmax_2d: " << tmax_2d << std::endl; + std::cout << "dr_2d: " << dr_2d << std::endl; + std::cout << "dt_2d: " << dt_2d << std::endl; + std::cout << "r_2d: " << r_2d[0] << " " << r_2d[nr_2d-1] << std::endl; + std::cout << "t_2d: " << t_2d[0] << " " << t_2d[nt_2d-1] << std::endl; + std::cout << "\n\n" << std::endl; + } + + // field setup + fun_2d = allocateMemory(nr_2d*nt_2d, 4002); + fac_a_2d = allocateMemory(nr_2d*nt_2d, 4003); + fac_b_2d = allocateMemory(nr_2d*nt_2d, 4004); + u_2d = allocateMemory(nr_2d*nt_2d, 4005); + T_2d = allocateMemory(nr_2d*nt_2d, 4006); + T0v_2d = allocateMemory(nr_2d*nt_2d, 4007); + T0r_2d = allocateMemory(nr_2d*nt_2d, 4008); + T0t_2d = allocateMemory(nr_2d*nt_2d, 4009); + tau_2d = allocateMemory(nr_2d*nt_2d, 4010); + tau_old_2d = allocateMemory(nr_2d*nt_2d, 4011); + is_changed_2d = allocateMemory(nr_2d*nt_2d, 4012); + + // load 1d model to 2d field + load_1d_model(IP.get_model_1d_name()); + + // initialize other field + for (int ir = 0; ir < nr_2d; ir++){ + for (int it = 0; it < nt_2d; it++){ + fac_a_2d[ir*nt_2d+it] = _1_CR; + fac_b_2d[ir*nt_2d+it] = _1_CR/my_square(r_2d[ir]); + u_2d[ir*nt_2d+it] = _0_CR; + T_2d[ir*nt_2d+it] = _0_CR; + } + } + + // discretize the src position + int src_r_i = std::floor((src_r -rmin_2d)/dr_2d); + int src_t_i = std::floor((src_t_dummy-tmin_2d)/dt_2d); + + // error of discretized source position + CUSTOMREAL src_r_err = std::min(_1_CR, (src_r - r_2d[src_r_i])/dr_2d); + CUSTOMREAL src_t_err = std::min(_1_CR, (src_t_dummy - t_2d[src_t_i])/dt_2d); + + // check precision error for floor + if (src_r_err == _1_CR) { + src_r_err = _0_CR; + src_r_i++; + } + if (src_t_err == _1_CR) { + src_t_err = _0_CR; + src_t_i++; + } + + // initialize the initial fields + CUSTOMREAL a0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*fac_a_2d[src_r_i*nt_2d+src_t_i] \ + + (_1_CR - src_r_err)* src_t_err *fac_a_2d[src_r_i*nt_2d+src_t_i+1] \ + + src_r_err*(_1_CR - src_t_err)*fac_a_2d[(src_r_i+1)*nt_2d+src_t_i] \ + + src_r_err* src_t_err *fac_a_2d[(src_r_i+1)*nt_2d+src_t_i+1]; + + CUSTOMREAL b0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*fac_b_2d[src_r_i*nt_2d+src_t_i] \ + + (_1_CR - src_r_err)* src_t_err *fac_b_2d[src_r_i*nt_2d+src_t_i+1] \ + + src_r_err *(_1_CR - src_t_err)*fac_b_2d[(src_r_i+1)*nt_2d+src_t_i] \ + + src_r_err * src_t_err *fac_b_2d[(src_r_i+1)*nt_2d+src_t_i+1]; + + CUSTOMREAL fun0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*fun_2d[src_r_i*nt_2d+src_t_i] \ + + (_1_CR - src_r_err)* src_t_err *fun_2d[src_r_i*nt_2d+src_t_i+1] \ + + src_r_err *(_1_CR - src_t_err)*fun_2d[(src_r_i+1)*nt_2d+src_t_i] \ + + src_r_err * src_t_err *fun_2d[(src_r_i+1)*nt_2d+src_t_i+1]; + + + for (int ir = 0; ir < nr_2d; ir++){ + for (int it = 0; it < nt_2d; it++){ + + int irt = ir*nt_2d+it; + T0v_2d[irt] = fun0 * std::sqrt((_1_CR/a0) * my_square((r_2d[ir]-src_r)) + + _1_CR/b0 * my_square((t_2d[it]-src_t_dummy))); + + if (isZero(T0v_2d[irt])) { + T0r_2d[irt] = _0_CR; + T0t_2d[irt] = _0_CR; + } else { + T0r_2d[irt] = my_square(fun0) * (_1_CR/a0 * (r_2d[ir]-src_r)) / T0v_2d[irt]; + T0t_2d[irt] = my_square(fun0) * (_1_CR/b0 * (t_2d[it]-src_t_dummy)) / T0v_2d[irt]; + } + + if (std::abs((r_2d[ir]-src_r)/dr_2d) <= _2_CR \ + && std::abs((t_2d[it]-src_t_dummy)/dt_2d) <= _2_CR) { + tau_2d[irt] = TAU_INITIAL_VAL; + is_changed_2d[irt] = false; + } else { + tau_2d[irt] = TAU_INF_VAL; // upwind scheme, initial tau should be large enough + is_changed_2d[irt] = true; + } + + tau_old_2d[irt] = _0_CR; + } + } +} + + +void PlainGrid::allocate_arrays(){ + azimuth_2d = allocateMemory(4, 4013); + epicentral_distance_2d = allocateMemory(4, 4014); +} + + +void PlainGrid::deallocate_arrays(){ + delete[] azimuth_2d; + delete[] epicentral_distance_2d; + delete[] r_2d; + delete[] t_2d; + delete[] fun_2d; + delete[] fac_a_2d; + delete[] fac_b_2d; + delete[] u_2d; + delete[] T_2d; + delete[] T0v_2d; + delete[] T0r_2d; + delete[] T0t_2d; + delete[] tau_2d; + delete[] tau_old_2d; + delete[] is_changed_2d; +} + + +PlainGrid::~PlainGrid() { + deallocate_arrays(); +} + + +void PlainGrid::select_1d_model(std::string model_1d_name){ + if(model_1d_name.compare("iasp91")==0) { + model_1d_ref = model_1d_iasp91; + } else if (model_1d_name.compare("ak135")==0) { + model_1d_ref = model_1d_ak135; + } else if (model_1d_name.compare("user_defined")==0) { + model_1d_ref = model_1d_prem; + } else { + model_1d_ref = model_1d_prem; + } +} + + +void PlainGrid::load_1d_model(std::string model_1d_name){ + + // debug output 1d model to a file + std::ofstream file_1d_model; + file_1d_model.open(output_dir + "/model_1d.txt"); + + // load 1d model to 2d field + for (int i = 0; i < nr_2d; i++) { + + // interpolate from model_1d_ref by linear interpolation + CUSTOMREAL r = r_2d[i]; + + // select 1d model + select_1d_model(model_1d_name); + + // find 2 closest r in model_1d_ref + int ir = 0; + for (auto& dep_vel : model_1d_ref) { + CUSTOMREAL r_model = depth2radius(dep_vel[0]); + if (r > r_model) + break; + ir++; + } + + // linear interpolation + CUSTOMREAL v_interp; + + if(ir != 0){ + CUSTOMREAL r_model_1 = depth2radius(model_1d_ref[ir-1][0]); + CUSTOMREAL r_model_2 = depth2radius(model_1d_ref[ir][0]); + CUSTOMREAL v_model_1 = model_1d_ref[ir-1][1]; + CUSTOMREAL v_model_2 = model_1d_ref[ir][1]; + + v_interp = v_model_1 + (v_model_2 - v_model_1) * (r - r_model_1) / (r_model_2 - r_model_1); + + if (isZero((r_model_2 - r_model_1))) + v_interp = model_1d_ref[ir][1]; + } else { + v_interp = model_1d_ref[ir][1]; + } + + // debug output 1d model to a file + file_1d_model << r << ", " << v_interp << std::endl; + + for (int j = 0; j < nt_2d; j++) + fun_2d[i*nt_2d+j] = _1_CR / v_interp; + + } + + // close file + file_1d_model.close(); +} + + +void PlainGrid::run_iteration(InputParams& IP){ + // solve Tau, H(tau) = a tau_x^2+ b tau_y^2 + (2aTx-2cTy) tau_x + (2bTy-2cTx) tau_y + // -2c tau_x tau_y + (aTx^2+bTy^2-2cTxTy) = f^2 + + if (myrank==0) + std::cout << "Running 2d eikonal solver..." << std::endl; + + CUSTOMREAL L1_dif =1000000000; + CUSTOMREAL Linf_dif=1000000000; + CUSTOMREAL L1_err =_0_CR; + CUSTOMREAL Linf_err=_0_CR; + + int iter = 0; + + while (true) { + + // update tau_old + std::memcpy(tau_old_2d, tau_2d, sizeof(CUSTOMREAL)*nr_2d*nt_2d); + + int r_start, r_end; + int t_start, t_end; + int r_dirc, t_dirc; + + // sweep direction + for (int iswp = 0; iswp < 4; iswp++){ + if (iswp == 0){ + r_start = nr_2d-2; + r_end = 0; + t_start = nt_2d-2; + t_end = 0; + r_dirc = -1; + t_dirc = -1; + } else if (iswp==1){ + r_start = nr_2d-2; + r_end = 0; + t_start = 1; + t_end = nt_2d-1; + r_dirc = -1; + t_dirc = 1; + } else if (iswp==2){ + r_start = 1; + r_end = nr_2d-1; + t_start = nt_2d-2; + t_end = 0; + r_dirc = 1; + t_dirc = -1; + } else { + r_start = 1; + r_end = nr_2d-1; + t_start = 1; + t_end = nt_2d-1; + r_dirc = 1; + t_dirc = 1; + } + + for (int ir = r_start; ir != r_end; ir += r_dirc) { + for (int it = t_start; it != t_end; it += t_dirc) { + + // if the point is not in the boundary, skip it + if (is_changed_2d[ir*nt_2d+it]) + calculate_stencil_2d(ir, it); + + } + } + + // boundary + for (int ir = 0; ir < nr_2d; ir++) { + tau_2d[ir*nt_2d] = std::max(_2_CR*tau_2d[ir*nt_2d+1] -tau_2d[ir*nt_2d+2], tau_2d[ir*nt_2d+2]); + tau_2d[ir*nt_2d+nt_2d-1] = std::max(_2_CR*tau_2d[ir*nt_2d+nt_2d-2]-tau_2d[ir*nt_2d+nt_2d-3], tau_2d[ir*nt_2d+nt_2d-3]); + } + for (int it = 0; it < nt_2d; it++) { + tau_2d[it] = std::max(_2_CR*tau_2d[1*nt_2d+it] -tau_2d[2*nt_2d+it], tau_2d[2*nt_2d+it]); + tau_2d[(nr_2d-1)*nt_2d+it] = std::max(_2_CR*tau_2d[(nr_2d-2)*nt_2d+it]-tau_2d[(nr_2d-3)*nt_2d+it], tau_2d[(nr_2d-3)*nt_2d+it]); + } + + } // end of iswp + + // calculate L1 and Linf error + L1_dif = _0_CR; + Linf_dif= _0_CR; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + L1_dif += std::abs(tau_2d[ii]-tau_old_2d[ii]); + Linf_dif = std::max(Linf_dif, std::abs(tau_2d[ii]-tau_old_2d[ii])); + } + L1_dif /= nr_2d*nt_2d; + + // calculate L1 and Linf error + L1_err = _0_CR; + Linf_err= _0_CR; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + L1_err += std::abs(tau_2d[ii]*T0v_2d[ii] - u_2d[ii]); + Linf_err = std::max(Linf_err, std::abs(tau_2d[ii]*T0v_2d[ii] - u_2d[ii])); + } + L1_err /= nr_2d*nt_2d; + + // check convergence + if (std::abs(L1_dif) < TOL_2D_SOLVER && std::abs(Linf_dif) < TOL_2D_SOLVER){ + if (myrank==0) + std::cout << "Converged at iteration " << iter << std::endl; + goto iter_end; + } else if (iter > MAX_ITER_2D_SOLVER){ + if (myrank==0) + std::cout << "Maximum iteration reached at iteration " << iter << std::endl; + goto iter_end; + } else { + if (myrank==0 && if_verbose) + std::cout << "Iteration " << iter << "L_1(Tnew-Told)= " << L1_dif << " , L_inf(Tnew-Told) = " << Linf_dif << std::endl; + iter++; + } + // if (myrank==0){ + // std::cout << "Iteration " << iter << "L_1(Tnew-Told)= " << L1_dif << " , L_inf(Tnew-Told) = " << Linf_dif << std::endl; + // std::cout << "Iteration " << iter << ": L1 error = " << L1_err << ", Linf error = " << Linf_err << std::endl; + // } + } // end of wile + +iter_end: + if (myrank==0) + std::cout << "Iteration " << iter << " finished." << std::endl; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + T_2d[ii] = tau_2d[ii]*T0v_2d[ii]; + } + +} + + +void PlainGrid::calculate_stencil_2d(int& ir, int& it){ + ii = ir*nt_2d+it; + ii_nr = (ir-1)*nt_2d+it; + ii_n2r = (ir-2)*nt_2d+it; + ii_nt = ir*nt_2d+(it-1); + ii_n2t = ir*nt_2d+(it-2); + ii_pr = (ir+1)*nt_2d+it; + ii_p2r = (ir+2)*nt_2d+it; + ii_pt = ir*nt_2d+(it+1); + ii_p2t = ir*nt_2d+(it+2); + + CUSTOMREAL sigr = std::sqrt(fac_a_2d[ii])*T0v_2d[ii]; + CUSTOMREAL sigt = std::sqrt(fac_b_2d[ii])*T0v_2d[ii]; + CUSTOMREAL coe = _1_CR/(sigr/dr_2d + sigt/dt_2d); + + CUSTOMREAL px1, px2, wx1=0, wx2=0; + CUSTOMREAL py1, py2, wy1=0, wy2=0; + + if(ir==1){ + px1=(tau_2d[ii]-tau_2d[ii_nr])/dr_2d; + wx2=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_pr]+ tau_2d[ii_p2r])) \ + / (eps_2d +my_square(tau_2d[ii_nr] - _2_CR*tau_2d[ii] + tau_2d[ii_pr] )))); + px2=(_1_CR-wx2)*( tau_2d[ii_pr] -tau_2d[ii_nr]) /_2_CR/dr_2d \ + + wx2 *(-_3_CR*tau_2d[ii]+_4_CR*tau_2d[ii_pr]-tau_2d[ii_p2r])/_2_CR/dr_2d; + + } + else if (ir == nr_2d-2){ + wx1=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_nr]+ tau_2d[ii_n2r])) \ + / (eps_2d+my_square(tau_2d[ii_pr] - _2_CR*tau_2d[ii] + tau_2d[ii_nr] )))); + px1=(_1_CR-wx1)*( tau_2d[ii_pr] -tau_2d[ii_nr]) /_2_CR/dr_2d \ + + wx1 *( _3_CR*tau_2d[ii]-_4_CR*tau_2d[ii_nr]+tau_2d[ii_n2r])/_2_CR/dr_2d; + px2=(tau_2d[ii_pr]-tau_2d[ii_nr])/dr_2d; + } + else { + wx1=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_nr]+ tau_2d[ii_n2r])) \ + / (eps_2d+my_square(tau_2d[ii_pr] - _2_CR*tau_2d[ii] + tau_2d[ii_nr] )))); + px1=(_1_CR-wx1)*( tau_2d[ii_pr] -tau_2d[ii_nr]) /_2_CR/dr_2d \ + + wx1 *( _3_CR*tau_2d[ii]-_4_CR*tau_2d[ii_nr]+tau_2d[ii_n2r])/_2_CR/dr_2d; + wx2=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_pr]+ tau_2d[ii_p2r])) \ + / (eps_2d+my_square(tau_2d[ii_nr] - _2_CR*tau_2d[ii] + tau_2d[ii_pr] )))); + px2=(_1_CR-wx2)*( tau_2d[ii_pr] -tau_2d[ii_nr]) /_2_CR/dr_2d \ + + wx2 *(-_3_CR*tau_2d[ii]+_4_CR*tau_2d[ii_pr]-tau_2d[ii_p2r])/_2_CR/dr_2d; + } + + if(it==1){ + py1=(tau_2d[ii]-tau_2d[ii_nt])/dt_2d; + wy2=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_pt]+ tau_2d[ii_p2t])) \ + / (eps_2d+my_square(tau_2d[ii_nt] - _2_CR*tau_2d[ii] + tau_2d[ii_pt] )))); + py2=(_1_CR-wy2)*( tau_2d[ii_pt] -tau_2d[ii_nt]) /_2_CR/dt_2d \ + + wy2 *(-_3_CR*tau_2d[ii]+_4_CR*tau_2d[ii_pt]-tau_2d[ii_p2t])/_2_CR/dt_2d; + } + else if (it == nt_2d-2){ + wy1=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_nt]+ tau_2d[ii_n2t])) \ + / (eps_2d+my_square(tau_2d[ii_pt] - _2_CR*tau_2d[ii] + tau_2d[ii_nt] )))); + py1=(_1_CR-wy1)*( tau_2d[ii_pt] -tau_2d[ii_nt]) /_2_CR/dt_2d \ + + wy1 *( _3_CR*tau_2d[ii]-_4_CR*tau_2d[ii_nt]+tau_2d[ii_n2t])/_2_CR/dt_2d; + py2=(tau_2d[ii_pt]-tau_2d[ii])/dt_2d; + } + else { + wy1=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_nt]+ tau_2d[ii_n2t])) \ + / (eps_2d+my_square(tau_2d[ii_pt] - _2_CR*tau_2d[ii] + tau_2d[ii_nt] )))); + py1=(_1_CR-wy1)*( tau_2d[ii_pt] -tau_2d[ii_nt]) /_2_CR/dt_2d \ + + wy1 *( _3_CR*tau_2d[ii]-_4_CR*tau_2d[ii_nt]+tau_2d[ii_n2t])/_2_CR/dt_2d; + wy2=_1_CR/(_1_CR+_2_CR*my_square( (eps_2d+my_square(tau_2d[ii] - _2_CR*tau_2d[ii_pt]+ tau_2d[ii_p2t])) \ + / (eps_2d+my_square(tau_2d[ii_nt] - _2_CR*tau_2d[ii] + tau_2d[ii_pt] )))); + py2=(_1_CR-wy2)*( tau_2d[ii_pt] -tau_2d[ii_nt]) /_2_CR/dt_2d \ + + wy2 *(-_3_CR*tau_2d[ii]+_4_CR*tau_2d[ii_pt]-tau_2d[ii_p2t])/_2_CR/dt_2d; + } + + CUSTOMREAL Htau = std::sqrt(fac_a_2d[ii]*my_square(T0r_2d[ii]*tau_2d[ii]+T0v_2d[ii]*(px1+px2)/_2_CR) \ + +fac_b_2d[ii]*my_square(T0t_2d[ii]*tau_2d[ii]+T0v_2d[ii]*(py1+py2)/_2_CR)); + + tau_2d[ii] = coe * ( (fun_2d[ii] - Htau) + (sigr*(px2-px1)/_2_CR + sigt*(py2-py1)/_2_CR) ) + tau_2d[ii]; + +} + + +void PlainGrid::run_iteration_upwind(InputParams& IP){ + // solve Tau, H(tau) = a tau_x^2+ b tau_y^2 + (2aTx-2cTy) tau_x + (2bTy-2cTx) tau_y + // -2c tau_x tau_y + (aTx^2+bTy^2-2cTxTy) = f^2 + + if (myrank==0) + std::cout << "Running 2d eikonal solver..." << std::endl; + + CUSTOMREAL L1_dif =1000000000; + CUSTOMREAL Linf_dif=1000000000; + CUSTOMREAL L1_err =_0_CR; + CUSTOMREAL Linf_err=_0_CR; + + int iter = 0; + + while (true) { + + // update tau_old + std::memcpy(tau_old_2d, tau_2d, sizeof(CUSTOMREAL)*nr_2d*nt_2d); + + int r_start, r_end; + int t_start, t_end; + int r_dirc, t_dirc; + + // sweep direction + for (int iswp = 0; iswp < 4; iswp++){ + if (iswp == 0){ + r_start = nr_2d-1; + r_end = -1; + t_start = nt_2d-1; + t_end = -1; + r_dirc = -1; + t_dirc = -1; + } else if (iswp==1){ + r_start = nr_2d-1; + r_end = -1; + t_start = 0; + t_end = nt_2d; + r_dirc = -1; + t_dirc = 1; + } else if (iswp==2){ + r_start = 0; + r_end = nr_2d; + t_start = nt_2d-1; + t_end = -1; + r_dirc = 1; + t_dirc = -1; + } else { + r_start = 0; + r_end = nr_2d; + t_start = 0; + t_end = nt_2d; + r_dirc = 1; + t_dirc = 1; + } + + for (int ir = r_start; ir != r_end; ir += r_dirc) { + for (int it = t_start; it != t_end; it += t_dirc) { + + // if the point is not in the boundary, skip it + if (is_changed_2d[ir*nt_2d+it]) + calculate_stencil_upwind_2d(ir, it); + + } + } + } // end of iswp + + // calculate L1 and Linf error + L1_dif = _0_CR; + Linf_dif= _0_CR; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + L1_dif += std::abs(tau_2d[ii]-tau_old_2d[ii]); + Linf_dif = std::max(Linf_dif, std::abs(tau_2d[ii]-tau_old_2d[ii])); + } + L1_dif /= nr_2d*nt_2d; + + // calculate L1 and Linf error + L1_err = _0_CR; + Linf_err= _0_CR; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + L1_err += std::abs(tau_2d[ii]*T0v_2d[ii] - u_2d[ii]); + Linf_err = std::max(Linf_err, std::abs(tau_2d[ii]*T0v_2d[ii] - u_2d[ii])); + } + L1_err /= nr_2d*nt_2d; + + // check convergence + if (std::abs(L1_dif) < TOL_2D_SOLVER && std::abs(Linf_dif) < TOL_2D_SOLVER){ + if (myrank==0) + std::cout << "Converged at iteration " << iter << std::endl; + goto iter_end; + } else if (iter > MAX_ITER_2D_SOLVER){ + if (myrank==0) + std::cout << "Maximum iteration reached at iteration " << iter << std::endl; + goto iter_end; + } else { + if (myrank==0 && if_verbose) + std::cout << "Iteration " << iter << ": L1 error = " << L1_err << ", Linf error = " << Linf_err << std::endl; + iter++; + + } + // if (myrank==0){ + // std::cout << "Iteration " << iter << "L_1(Tnew-Told)= " << L1_dif << " , L_inf(Tnew-Told) = " << Linf_dif << std::endl; + // // std::cout << "Iteration " << iter << ": L1 error = " << L1_err << ", Linf error = " << Linf_err << std::endl; + // } + } // end of wile + +iter_end: + if (myrank==0) + std::cout << "Iteration " << iter << " finished." << std::endl; + + for (int ii = 0; ii < nr_2d*nt_2d; ii++){ + T_2d[ii] = tau_2d[ii]*T0v_2d[ii]; + } + +} + + +void PlainGrid::calculate_stencil_upwind_2d(int& ir, int& it){ + + count_cand = 0; + ii = ir*nt_2d+it; + ii_nr = (ir-1)*nt_2d+it; + ii_pr = (ir+1)*nt_2d+it; + ii_nt = ir*nt_2d+(it-1); + ii_pt = ir*nt_2d+(it+1); + + + // (T0*tau)_r = ar*tau(iix,iiy)+br; (T0*tau)_t = at*tau(iix,iiy)+bt + if (it > 0){ + at1 = T0t_2d[ii] + T0v_2d[ii]/dt_2d; + bt1 = -T0v_2d[ii]/dt_2d*tau_2d[ii_nt]; + } + if (it < nt_2d-1){ + at2 = T0t_2d[ii] - T0v_2d[ii]/dt_2d; + bt2 = T0v_2d[ii]/dt_2d*tau_2d[ii_pt]; + } + if (ir > 0){ + ar1 = T0r_2d[ii] + T0v_2d[ii]/dr_2d; + br1 = -T0v_2d[ii]/dr_2d*tau_2d[ii_nr]; + } + if (ir < nr_2d-1){ + ar2 = T0r_2d[ii] - T0v_2d[ii]/dr_2d; + br2 = T0v_2d[ii]/dr_2d*tau_2d[ii_pr]; + } + + // start to find candidate solutions + + // first catalog: characteristic travels through sector in 2D volume (4 cases) + for (int i_case = 0; i_case < 4; i_case++){ + // determine discretization of T_t,T_r + switch (i_case) { + case 0: // characteristic travels from -t, -r + if (it == 0 || ir == 0) + continue; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: // characteristic travels from -t, +r + if (it == 0 || ir == nr_2d-1) + continue; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: // characteristic travels from +t, -r + if (it == nt_2d-1 || ir == 0) + continue; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: // characteristic travels from +t, +r + if (it == nt_2d-1 || ir == nr_2d-1) + continue; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solving the quadratic equation with respect to tau(iip,jjt,kkr) + // that is a*(ar*tau+br)^2 + b*(at*tau+bt)^2 = s^2 + eqn_a = fac_a_2d[ii] * std::pow(ar, _2_CR) + fac_b_2d[ii] * std::pow(at, _2_CR); + eqn_b = fac_a_2d[ii] * _2_CR * ar * br + fac_b_2d[ii] * _2_CR * at * bt; + eqn_c = fac_a_2d[ii] * std::pow(br, _2_CR) + fac_b_2d[ii] * std::pow(bt, _2_CR) - std::pow(fun_2d[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: the characteristic passing through (it,ir) is in between used two sides + // characteristic direction is (dr/dt, dtheta/dt, tphi/dt) = (H_p1,H_p2,H_p3), p1 = T_r, p2 = T_t, p3 = T_p + T_r = ar*tmp_tau + br; + T_t = at*tmp_tau + bt; + + charact_r = T_r; + charact_t = T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (charact_t >= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 1: //characteristic travels from -t, +r + if (charact_t >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from +t, -r + if (charact_t <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from +t, +r + if (charact_t <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + } + } + + // second catalog: characteristic travels through lines in 1D volume (4 cases) + // case: 1-2 + // characteristic travels along r-axis, force H_p2, H_p3 = 0, that is, T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 = s^2 + for (int i_case = 0; i_case < 2; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -r + if (ir == 0){ + continue; + } + ar = ar1; br = br1; + break; + case 1: //characteristic travels from +r + if (ir == nr_2d-1){ + continue; + } + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: (ar*tau+br)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(fun_2d[ii],_2_CR)/fac_a_2d[ii]) - br)/ar; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(fun_2d[ii],_2_CR)/fac_a_2d[ii]) - br)/ar; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -r (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * T0v_2d[ii] > tau_2d[ii_nr] * T0v_2d[ii_nr] + && tmp_tau > tau_2d[ii_nr]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 1: //characteristic travels from +r + if (tmp_tau * T0v_2d[ii] > tau_2d[ii_pr] * T0v_2d[ii_pr] + && tmp_tau > tau_2d[ii_pr]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + + } + + + // case: 3-4 + // characteristic travels along t-axis, force H_p1, H_p3 = 0, that is, T_r = 0; + // plug the constraint into eikonal equation, we have the equation: T_t^2 = s^2 + for (int i_case = 2; i_case < 4; i_case++){ + switch (i_case){ + case 2: //characteristic travels from -t + if (it == 0){ + continue; + } + at = at1; bt = bt1; + break; + case 3: //characteristic travels from +t + if (it == nt_2d-1){ + continue; + } + at = at2; bt = bt2; + break; + } + + // plug T_t into eikonal equation, solve the quadratic equation: b*(at*tau+bt)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(fun_2d[ii],_2_CR)/fac_b_2d[ii]) - bt)/at; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(fun_2d[ii],_2_CR)/fac_b_2d[ii]) - bt)/at; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 2: //characteristic travels from -t (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * T0v_2d[ii] > tau_2d[ii_nt] * T0v_2d[ii_nt] + && tmp_tau > tau_2d[ii_nt]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 3: //characteristic travels from +t + if (tmp_tau * T0v_2d[ii] > tau_2d[ii_pt] * T0v_2d[ii_pt] + && tmp_tau > tau_2d[ii_pt]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + } + + // final, choose the minimum candidate solution as the updated value + for (int i_cand = 0; i_cand < count_cand; i_cand++){ + tau_2d[ii] = std::min(tau_2d[ii], canditate[i_cand]); + if (tau_2d[ii] < 0 ){ + std::cout << "error, tele tau_loc < 0. ir: " << ir << ", it: " << it << std::endl; + exit(1); + } + } + +} + + +CUSTOMREAL interp2d(PlainGrid& pg, CUSTOMREAL t, CUSTOMREAL r) { + // interpolate 2d travel time field on the boundaries + // pg is the grid + // t is distance between source and boundary point + // r is the radius of the boundary point + + // find the index of the closest point on the grid + int it_n=0, it_p=0, ir_n=0, ir_p=0; + + CUSTOMREAL dt = pg.t_2d[1] - pg.t_2d[0]; + CUSTOMREAL dr = pg.r_2d[1] - pg.r_2d[0]; + + // here t is the distance between source and boundary point + // which is ok because t values of 2d grid is also relative + margin from source + // location + it_n = std::floor((t - pg.t_2d[0]) / dt); + it_p = it_n + 1; + ir_n = std::floor((r - pg.r_2d[0]) / dr); + ir_p = ir_n + 1; + + // interpolate + CUSTOMREAL T_tnrn = pg.T_2d[ir_n*pg.nt_2d+it_n]; + CUSTOMREAL T_tnrp = pg.T_2d[ir_p*pg.nt_2d+it_n]; + CUSTOMREAL T_tprn = pg.T_2d[ir_n*pg.nt_2d+it_p]; + CUSTOMREAL T_tprp = pg.T_2d[ir_p*pg.nt_2d+it_p]; + + CUSTOMREAL t_err = std::min(_1_CR, (t-pg.t_2d[it_n])/dt); + CUSTOMREAL r_err = std::min(_1_CR, (r-pg.r_2d[ir_n])/dr); + + return (1-t_err)*(1-r_err)*T_tnrn + t_err*(1-r_err)*T_tprn + (1-t_err)*r_err*T_tnrp + t_err*r_err*T_tprp; +} + + +std::string get_2d_tt_filename(const std::string& dir_2d, Source& src) { + + std::string fname_2d_src; + + if (output_format == OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // add the depth of the source to the file name + // to share the travel time field if sources have the same depth of hypocenter + auto str = std::to_string(src.get_src_dep()); + fname_2d_src = dir_2d + "/2d_travel_time_field_dep_" + str.substr(0,str.find(".")+4) +".h5"; +#else + std::cout << "HDF5 is not enabled. Please recompile with HDF5" << std::endl; +#endif + } else if (output_format == OUTPUT_FORMAT_ASCII) { + auto str = std::to_string(src.get_src_dep()); // use depth value of the source to the file name + fname_2d_src = dir_2d + "/2d_travel_time_field_dep_" + str.substr(0,str.find(".")+4) +".dat"; + } + + return fname_2d_src; + +} + + +void run_2d_solver(InputParams& IP, Source& src, IO_utils& io) { + // calculate 2d travel time field by only the first process of each simulation group + + // initialize grid for all processes + PlainGrid plain_grid(src,IP); + + // check if pre-calculated 2d travel time field exists + + // create output directory for 2d solver + std::string dir_2d = output_dir+"/"+OUTPUT_DIR_2D; + create_output_dir(dir_2d); + + std::string fname_2d_src = get_2d_tt_filename(dir_2d, src); + + if (is_file_exist(fname_2d_src.c_str())) { + std::cout << "2d solver skipped the src because traveltime data already exists: " << fname_2d_src << std::endl; + } else { // if not, calculate and store it + // run iteration + std::cout << "start run iteration myrank: " << myrank << ", for file: " << fname_2d_src << std::endl; + plain_grid.run_iteration_upwind(IP); + + // write out calculated 2D travel time field + io.write_2d_travel_time_field(plain_grid.T_2d, plain_grid.r_2d, plain_grid.t_2d, plain_grid.nr_2d, plain_grid.nt_2d, src.get_src_dep()); + } + + } + + +void load_2d_traveltime(InputParams& IP, Source& src, Grid& grid, IO_utils& io) { + // initialize grid for all processes + PlainGrid plain_grid(src,IP); + + // check if pre-calculated 2d travel time field exists + if(myrank == 0) { + + // output directory for 2d solver + std::string dir_2d = output_dir+"/"+OUTPUT_DIR_2D; + //create_output_dir(dir_2d); + + std::string fname_2d_src = get_2d_tt_filename(dir_2d, src); + + if (is_file_exist(fname_2d_src.c_str())) { + // remark :: TODO :: we need to check whether the 2d_traveltime file has the same size of T_2d here. + // Otherwise, we need to recalculate the 2d traveltime field and write it out. + + // read 2d travel time field from file + io.read_2d_travel_time_field(fname_2d_src, plain_grid.T_2d, plain_grid.nt_2d, plain_grid.nr_2d); + + if (if_verbose) + std::cout << "2d travel time field has been read from file: " << fname_2d_src << std::endl; + } else { // if not, stop the program + std::cout << "2d travel time field does not exist. Please verify if the 2d solver finished normally." << std::endl; + std::cout << "missing : " << fname_2d_src << std::endl; + exit(1); + } + } + + // share T_2d, r_2d and t_2d to all processes + broadcast_cr(plain_grid.T_2d, plain_grid.nr_2d*plain_grid.nt_2d, 0); + broadcast_cr(plain_grid.r_2d, plain_grid.nr_2d, 0); + broadcast_cr(plain_grid.t_2d, plain_grid.nt_2d, 0); + + // interpolate results on the boundaries and store SrcRec object + + CUSTOMREAL tmp_dist; + + for (int l = 0; l < N_LAYER_SRC_BOUND; l++){ + for (int k = 0; k < loc_K; k++) { + for (int i = 0; i < loc_I; i++) { + // North boundary + if (grid.j_last()){ + Epicentral_distance_sphere(plain_grid.src_t, plain_grid.src_p, grid.get_lat_by_index(loc_J-1-l), grid.get_lon_by_index(i), tmp_dist); + grid.T_loc[I2V(i, loc_J-1-l, k)] = interp2d(plain_grid, tmp_dist, grid.get_r_by_index(k)); + grid.is_changed[I2V(i, loc_J-1-l, k)] = false; + } + // South boundary + if (grid.j_first()){ + Epicentral_distance_sphere(plain_grid.src_t, plain_grid.src_p, grid.get_lat_by_index(l), grid.get_lon_by_index(i), tmp_dist); + grid.T_loc[I2V(i, l, k)] = interp2d(plain_grid, tmp_dist, grid.get_r_by_index(k)); + grid.is_changed[I2V(i, l, k)] = false; + } + } + } + + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + // East boundary + if (grid.i_last()){ + Epicentral_distance_sphere(plain_grid.src_t, plain_grid.src_p, grid.get_lat_by_index(j), grid.get_lon_by_index(loc_I-1-l), tmp_dist); + grid.T_loc[I2V(loc_I-1-l, j, k)] = interp2d(plain_grid, tmp_dist, grid.get_r_by_index(k)); + grid.is_changed[I2V(loc_I-1-l, j, k)] = false; + } + // West boundary + if (grid.i_first()){ + Epicentral_distance_sphere(plain_grid.src_t, plain_grid.src_p, grid.get_lat_by_index(j), grid.get_lon_by_index(l), tmp_dist); + grid.T_loc[I2V(l, j, k)] = interp2d(plain_grid, tmp_dist, grid.get_r_by_index(k)); + grid.is_changed[I2V(l, j, k)] = false; + } + } + } + + for (int i = 0; i < loc_I; i++) { + for (int j = 0; j < loc_J; j++) { + // Bottom boundary + if (grid.k_first()){ + Epicentral_distance_sphere(plain_grid.src_t, plain_grid.src_p, grid.get_lat_by_index(j), grid.get_lon_by_index(i), tmp_dist); + grid.T_loc[I2V(i, j, l)] = interp2d(plain_grid, tmp_dist, grid.get_r_by_index(l)); + grid.is_changed[I2V(i, j, l)] = false; + } + } + } + } + +} + + diff --git a/src/grid.cpp b/src/grid.cpp new file mode 100644 index 0000000..85821e2 --- /dev/null +++ b/src/grid.cpp @@ -0,0 +1,2305 @@ +#include "grid.h" + +Grid::Grid(InputParams& IP, IO_utils& io) { + stdout_by_main("--- grid object initialization starts. ---"); + + // Initialize all MPI_Win variables to NULL to ensure proper cleanup + init_mpi_wins({&win_fac_a_loc, &win_fac_b_loc, &win_fac_c_loc, &win_fac_f_loc, + &win_T0r_loc, &win_T0p_loc, &win_T0t_loc, &win_T0v_loc, + &win_tau_loc, &win_fun_loc, &win_is_changed, + &win_T_loc, &win_tau_old_loc, + &win_xi_loc, &win_eta_loc, &win_zeta_loc, + &win_r_loc_1d, &win_t_loc_1d, &win_p_loc_1d, + &win_Tadj_loc, &win_Tadj_density_loc}); + + // initialize grid parameters are done by only the main process of each subdomain + if (subdom_main) { + // domain decomposition + init_decomposition(IP); + + // memory allocation + memory_allocation(); + } + + // allocate memory for shm arrays if necessary + if (n_subprocs > 1){ + shm_memory_allocation(); + } + + synchronize_all_world(); + + // setup grid parameters + if (subdom_main) + setup_grid_params(IP, io); + +} + +Grid::~Grid() { + // deallocate memory from all arrays + if (subdom_main) memory_deallocation(); + + if (n_subprocs > 1) { + // deallocate memory from shm arrays + shm_memory_deallocation(); + } +} + +void Grid::init_decomposition(InputParams& IP) { + + int tmp_rank = 0; + + for (int kk = 0; kk < ndiv_k; kk++) + for (int jj = 0; jj < ndiv_j; jj++) + for (int ii = 0; ii < ndiv_i; ii++) { + tmp_rank = kk * ndiv_i * ndiv_j + jj * ndiv_i + ii; + if (tmp_rank == myrank) { + // check neighbors on i axis + if (ndiv_i > 1) { + if (ii == 0) { // neighbor on the bound +i + neighbors_id[1] = tmp_rank + 1; + } else if (ii == ndiv_i - 1) { // neighbor on the bound -i + neighbors_id[0] = tmp_rank - 1; + } else { // middle layers + neighbors_id[0] = tmp_rank - 1; + neighbors_id[1] = tmp_rank + 1; + } + } + + // check neighbors on j axis + if (ndiv_j > 1) { + if (jj == 0) { // neighbor on the bound +j + neighbors_id[3] = tmp_rank + ndiv_i; + } else if (jj == ndiv_j - 1) { // neighbor on the bound -j + neighbors_id[2] = tmp_rank - ndiv_i; + } else { // middle layers + neighbors_id[2] = tmp_rank - ndiv_i; + neighbors_id[3] = tmp_rank + ndiv_i; + } + } + + // check neighbors on k axis + if (ndiv_k > 1) { + if (kk == 0) { // neighbor on the bound +k + neighbors_id[5] = tmp_rank + ndiv_i * ndiv_j; + } else if (kk == ndiv_k - 1) { // neighbor on the bound -k + neighbors_id[4] = tmp_rank - ndiv_i * ndiv_j; + } else { // middle layers + neighbors_id[4] = tmp_rank - ndiv_i * ndiv_j; + neighbors_id[5] = tmp_rank + ndiv_i * ndiv_j; + } + } + + // store the layer id + domain_i = ii; + domain_j = jj; + domain_k = kk; + + // stop searching immediately if this rank found the local ids + goto end_pos_detected; + } + } + + end_pos_detected: + + // calculate the number of grid points for this subdomain + loc_I = (int)ngrid_i/ndiv_i; + loc_J = (int)ngrid_j/ndiv_j; + loc_K = (int)ngrid_k/ndiv_k; + + // calculate the number of grid points for this subdomain + offset_i = domain_i * loc_I; + offset_j = domain_j * loc_J; + offset_k = domain_k * loc_K; + + // add modulus to the last rank + if (i_last()) loc_I += ngrid_i % ndiv_i; + if (j_last()) loc_J += ngrid_j % ndiv_j; + if (k_last()) loc_K += ngrid_k % ndiv_k; + + // number of grid points on the boundary surfaces + n_grid_bound_i = loc_J * loc_K; + n_grid_bound_j = loc_I * loc_K; + n_grid_bound_k = loc_I * loc_J; + + // store the number of grids excluding the ghost grids + loc_I_excl_ghost = loc_I; + loc_J_excl_ghost = loc_J; + loc_K_excl_ghost = loc_K; + + // initialize iteration start/end + i_start_loc = 0; + j_start_loc = 0; + k_start_loc = 0; + i_end_loc = loc_I-1; // end id needs to be included for the iterations + j_end_loc = loc_J-1; // thus please pay attaintion to the for loop + k_end_loc = loc_K-1; // to be e.g. for (i = i_start_loc; i <= i_end_loc; i++) + + // add ghost nodes to comunicate with neighbor domains + // i axis + if (ndiv_i > 1) { + if (i_first() || i_last()) { + loc_I += n_ghost_layers; + } else { + loc_I += n_ghost_layers * 2; + } + // store the start/end ids of iteration for axis i + if (!i_first()) i_start_loc = n_ghost_layers; + if (!i_last()) i_end_loc = loc_I - n_ghost_layers - 1; + if (i_last()) i_end_loc = loc_I - 1; + } + + // j axis + if (ndiv_j > 1) { + if (j_first() || j_last()) { + loc_J += n_ghost_layers; + } else { + loc_J += n_ghost_layers * 2; + } + // store the start/end ids of iteration for axis j + if (!j_first()) j_start_loc = n_ghost_layers; + if (!j_last()) j_end_loc = loc_J - n_ghost_layers - 1; + if (j_last()) j_end_loc = loc_J - 1; + } + // k axis + if (ndiv_k > 1) { + if (k_first() || k_last()) { + loc_K += n_ghost_layers; + } else { + loc_K += n_ghost_layers * 2; + } + // store the start/end ids of iteration for axis k + if (!k_first()) k_start_loc = n_ghost_layers; + if (!k_last()) k_end_loc = loc_K - n_ghost_layers - 1; + if (k_last()) k_end_loc = loc_K - 1; + } + + // calculate the nodes' and elms' offset for data output + loc_nnodes = loc_I_excl_ghost * loc_J_excl_ghost * loc_K_excl_ghost; + loc_nelms = (loc_I_excl_ghost - 1) * (loc_J_excl_ghost - 1) * (loc_K_excl_ghost - 1); + + nnodes = allocateMemory(nprocs, 1001); + nelms = allocateMemory(nprocs, 1002); + + // gather the number of nodes and elements + allgather_i_single(&loc_nnodes, nnodes); + allgather_i_single(&loc_nelms, nelms); + + if (myrank > 0){ + // sum nnodes and nelms + for (int i = 0; i < myrank; i++) { + offset_nnodes += nnodes[i]; + offset_nelms += nelms[i]; + } + } + + // setup number of elements and nodes for visualization (additinoal 1 layer for connection) + loc_I_vis = loc_I_excl_ghost; + loc_J_vis = loc_J_excl_ghost; + loc_K_vis = loc_K_excl_ghost; + if (!i_last()) loc_I_vis++; + if (!j_last()) loc_J_vis++; + if (!k_last()) loc_K_vis++; + + loc_nnodes_vis = loc_I_vis * loc_J_vis * loc_K_vis; + loc_nelms_vis = (loc_I_vis - 1) * (loc_J_vis - 1) * (loc_K_vis - 1); + nnodes_vis = allocateMemory(nprocs, 1003); + nelms_vis = allocateMemory(nprocs, 1004); + allgather_i_single(&loc_nnodes_vis, nnodes_vis); + allgather_i_single(&loc_nelms_vis, nelms_vis); + if (myrank > 0){ + // sum nnodes and nelms + for (int i = 0; i < myrank; i++) { + offset_nnodes_vis += nnodes_vis[i]; + offset_nelms_vis += nelms_vis[i]; + } + } + i_start_vis = i_start_loc; + j_start_vis = j_start_loc; + k_start_vis = k_start_loc; + i_end_vis = i_end_loc; + j_end_vis = j_end_loc; + k_end_vis = k_end_loc; + // add one layer for connection to the next subdomain + if (!i_last()) i_end_vis++; + if (!j_last()) j_end_vis++; + if (!k_last()) k_end_vis++; + + // inversion setup + // check if inversion grids are needed + if (IP.get_run_mode()==DO_INVERSION || IP.get_run_mode()==INV_RELOC || IP.get_run_mode()==ONED_INVERSION){ + inverse_flag = true; + inv_grid = new InvGrid(IP); + } else { + inverse_flag = false; + } + + // check subdomains contacting lines and points + // ij nn + if (neighbors_id[0] != -1 && neighbors_id[2] != -1) + neighbors_id_ij[0] = neighbors_id[2]-1; + // ij np + if (neighbors_id[0] != -1 && neighbors_id[3] != -1) + neighbors_id_ij[1] = neighbors_id[3]-1; + // ij pn + if (neighbors_id[1] != -1 && neighbors_id[2] != -1) + neighbors_id_ij[2] = neighbors_id[2]+1; + // ij pp + if (neighbors_id[1] != -1 && neighbors_id[3] != -1) + neighbors_id_ij[3] = neighbors_id[3]+1; + // jk nn + if (neighbors_id[2] != -1 && neighbors_id[4] != -1) + neighbors_id_jk[0] = neighbors_id[4]-ndiv_i; + // jk np + if (neighbors_id[2] != -1 && neighbors_id[5] != -1) + neighbors_id_jk[1] = neighbors_id[5]-ndiv_i; + // jk pn + if (neighbors_id[3] != -1 && neighbors_id[4] != -1) + neighbors_id_jk[2] = neighbors_id[4]+ndiv_i; + // jk pp + if (neighbors_id[3] != -1 && neighbors_id[5] != -1) + neighbors_id_jk[3] = neighbors_id[5]+ndiv_i; + // ik nn + if (neighbors_id[0] != -1 && neighbors_id[4] != -1) + neighbors_id_ik[0] = neighbors_id[4]-1; + // ik np + if (neighbors_id[0] != -1 && neighbors_id[5] != -1) + neighbors_id_ik[1] = neighbors_id[5]-1; + // ik pn + if (neighbors_id[1] != -1 && neighbors_id[4] != -1) + neighbors_id_ik[2] = neighbors_id[4]+1; + // ik pp + if (neighbors_id[1] != -1 && neighbors_id[5] != -1) + neighbors_id_ik[3] = neighbors_id[5]+1; + // ijk nnn + if (neighbors_id[0] != -1 && neighbors_id[2] != -1 && neighbors_id[4] != -1) + neighbors_id_ijk[0] = neighbors_id[4]-ndiv_i; + // ijk nnp + if (neighbors_id[0] != -1 && neighbors_id[2] != -1 && neighbors_id[5] != -1) + neighbors_id_ijk[1] = neighbors_id[5]-ndiv_i; + // ijk npn + if (neighbors_id[0] != -1 && neighbors_id[3] != -1 && neighbors_id[4] != -1) + neighbors_id_ijk[2] = neighbors_id[4]+ndiv_i; + // ijk npp + if (neighbors_id[0] != -1 && neighbors_id[3] != -1 && neighbors_id[5] != -1) + neighbors_id_ijk[3] = neighbors_id[5]+ndiv_i; + // ijk pnn + if (neighbors_id[1] != -1 && neighbors_id[2] != -1 && neighbors_id[4] != -1) + neighbors_id_ijk[4] = neighbors_id[4]-ndiv_i; + // ijk pnp + if (neighbors_id[1] != -1 && neighbors_id[2] != -1 && neighbors_id[5] != -1) + neighbors_id_ijk[5] = neighbors_id[5]-ndiv_i; + // ijk ppn + if (neighbors_id[1] != -1 && neighbors_id[3] != -1 && neighbors_id[4] != -1) + neighbors_id_ijk[6] = neighbors_id[4]+ndiv_i; + // ijk ppp + if (neighbors_id[1] != -1 && neighbors_id[3] != -1 && neighbors_id[5] != -1) + neighbors_id_ijk[7] = neighbors_id[5]+ndiv_i; + + // debug output + stdout_by_main("domain decomposition initialization end."); + + + for (int i = 0; i < nprocs; i++) { + synchronize_all_inter(); + + if (id_sim == 0){ + if (i == myrank) { + std::cout << "--- myrank: ---" << myrank << std::endl; + + if (i == 0) { + std::cout << "ndiv_i j k : " << ndiv_i << " " << ndiv_j << " " << ndiv_k << std::endl; + std::cout << "ngrid_i j k : " << ngrid_i << " " << ngrid_j << " " << ngrid_k << std::endl; + } + + std::cout << "domain_i j k: " << domain_i << " " << domain_j << " " << domain_k << std::endl; + std::cout << "loc_I J K: " << loc_I << " " << loc_J << " " << loc_K << std::endl; + std::cout << "loc_I_excl_ghost J_excl_ghost K_excl_ghost: " << loc_I_excl_ghost << " " << loc_J_excl_ghost << " " << loc_K_excl_ghost << std::endl; + std::cout << "i_start_loc i_end_loc: " << i_start_loc << " " << i_end_loc << std::endl; + std::cout << "j_start_loc j_end_loc: " << j_start_loc << " " << j_end_loc << std::endl; + std::cout << "k_start_loc k_end_loc: " << k_start_loc << " " << k_end_loc << std::endl; + std::cout << "offset_nnodes offset_nelms: " << offset_nnodes << " " << offset_nelms << std::endl; + std::cout << "n total local grids: " << loc_I*loc_J*loc_K << " max vector elm id: " << I2V(loc_I-1,loc_J-1,loc_K-1) << std::endl; + // print neighbors_id + std::cout << "neighbors_id: "; + for (int i = 0; i < 6; i++) { + std::cout << neighbors_id[i] << " "; + } + std::cout << std::endl; + } + } + } + + synchronize_all_inter(); +} + + + +// allocate memory for arrays, called only for subdom_main +void Grid::memory_allocation() { + // 3d arrays + int n_total_loc_grid_points = loc_I * loc_J * loc_K; + // skip allocation of shm arrays if not using shm + if (sub_nprocs <= 1) { +#ifdef USE_CUDA + if(use_gpu) + cudaMallocHost((void**)&tau_loc, n_total_loc_grid_points * sizeof(CUSTOMREAL)); + else + tau_loc = allocateMemory(n_total_loc_grid_points, 1); +#else + tau_loc = allocateMemory(n_total_loc_grid_points, 1); +#endif + + xi_loc = allocateMemory(n_total_loc_grid_points, 2); + eta_loc = allocateMemory(n_total_loc_grid_points, 3); + zeta_loc = allocateMemory(n_total_loc_grid_points, 4); + T_loc = allocateMemory(n_total_loc_grid_points, 5); + tau_old_loc = allocateMemory(n_total_loc_grid_points, 6); + + T0r_loc = allocateMemory(n_total_loc_grid_points, 7); + T0t_loc = allocateMemory(n_total_loc_grid_points, 8); + T0p_loc = allocateMemory(n_total_loc_grid_points, 9); + T0v_loc = allocateMemory(n_total_loc_grid_points, 10); + fac_a_loc = allocateMemory(n_total_loc_grid_points, 11); + fac_b_loc = allocateMemory(n_total_loc_grid_points, 12); + fac_c_loc = allocateMemory(n_total_loc_grid_points, 13); + fac_f_loc = allocateMemory(n_total_loc_grid_points, 14); + fun_loc = allocateMemory(n_total_loc_grid_points, 15); + is_changed = allocateMemory(n_total_loc_grid_points, 16); + + // 1d arrays + p_loc_1d = allocateMemory(loc_I, 17); + t_loc_1d = allocateMemory(loc_J, 18); + r_loc_1d = allocateMemory(loc_K, 19); + } + + if (if_test) + u_loc = allocateMemory(n_total_loc_grid_points, 20); + + // ghost layer arrays + if (neighbors_id[0] != -1) { + bin_s = allocateMemory(n_ghost_layers*n_grid_bound_i, 21); + bin_r = allocateMemory(n_ghost_layers*n_grid_bound_i, 22); + } + if (neighbors_id[1] != -1) { + bip_s = allocateMemory(n_ghost_layers*n_grid_bound_i, 23); + bip_r = allocateMemory(n_ghost_layers*n_grid_bound_i, 24); + } + if (neighbors_id[2] != -1) { + bjn_s = allocateMemory(n_ghost_layers*n_grid_bound_j, 25); + bjn_r = allocateMemory(n_ghost_layers*n_grid_bound_j, 26); + } + if (neighbors_id[3] != -1) { + bjp_s = allocateMemory(n_ghost_layers*n_grid_bound_j, 27); + bjp_r = allocateMemory(n_ghost_layers*n_grid_bound_j, 28); + } + if (neighbors_id[4] != -1) { + bkn_s = allocateMemory(n_ghost_layers*n_grid_bound_k, 29); + bkn_r = allocateMemory(n_ghost_layers*n_grid_bound_k, 30); + } + if (neighbors_id[5] != -1) { + bkp_s = allocateMemory(n_ghost_layers*n_grid_bound_k, 31); + bkp_r = allocateMemory(n_ghost_layers*n_grid_bound_k, 32); + } + if (neighbors_id_ij[0] != -1) { + bij_nn_s = allocateMemory(loc_K_vis, 33); + bij_nn_r = allocateMemory(loc_K_vis, 34); + } + if (neighbors_id_ij[1] != -1) { + bij_np_s = allocateMemory(loc_K_vis, 35); + bij_np_r = allocateMemory(loc_K_vis, 36); + } + if (neighbors_id_ij[2] != -1) { + bij_pn_s = allocateMemory(loc_K_vis, 37); + bij_pn_r = allocateMemory(loc_K_vis, 38); + } + if (neighbors_id_ij[3] != -1) { + bij_pp_s = allocateMemory(loc_K_vis, 39); + bij_pp_r = allocateMemory(loc_K_vis, 40); + } + if (neighbors_id_jk[0] != -1) { + bjk_nn_s = allocateMemory(loc_I_vis, 41); + bjk_nn_r = allocateMemory(loc_I_vis, 42); + } + if (neighbors_id_jk[1] != -1) { + bjk_np_s = allocateMemory(loc_I_vis, 43); + bjk_np_r = allocateMemory(loc_I_vis, 44); + } + if (neighbors_id_jk[2] != -1) { + bjk_pn_s = allocateMemory(loc_I_vis, 45); + bjk_pn_r = allocateMemory(loc_I_vis, 46); + } + if (neighbors_id_jk[3] != -1) { + bjk_pp_s = allocateMemory(loc_I_vis, 47); + bjk_pp_r = allocateMemory(loc_I_vis, 48); + } + if (neighbors_id_ik[0] != -1) { + bik_nn_s = allocateMemory(loc_J_vis, 49); + bik_nn_r = allocateMemory(loc_J_vis, 50); + } + if (neighbors_id_ik[1] != -1) { + bik_np_s = allocateMemory(loc_J_vis, 51); + bik_np_r = allocateMemory(loc_J_vis, 52); + } + if (neighbors_id_ik[2] != -1) { + bik_pn_s = allocateMemory(loc_J_vis, 53); + bik_pn_r = allocateMemory(loc_J_vis, 54); + } + if (neighbors_id_ik[3] != -1) { + bik_pp_s = allocateMemory(loc_J_vis, 55); + bik_pp_r = allocateMemory(loc_J_vis, 56); + } + if (neighbors_id_ijk[0] != -1) { + bijk_nnn_s = allocateMemory(1, 57); + bijk_nnn_r = allocateMemory(1, 58); + } + if (neighbors_id_ijk[1] != -1) { + bijk_nnp_s = allocateMemory(1, 59); + bijk_nnp_r = allocateMemory(1, 60); + } + if (neighbors_id_ijk[2] != -1) { + bijk_npn_s = allocateMemory(1, 61); + bijk_npn_r = allocateMemory(1, 62); + } + if (neighbors_id_ijk[3] != -1) { + bijk_npp_s = allocateMemory(1, 63); + bijk_npp_r = allocateMemory(1, 64); + } + if (neighbors_id_ijk[4] != -1) { + bijk_pnn_s = allocateMemory(1, 65); + bijk_pnn_r = allocateMemory(1, 66); + } + if (neighbors_id_ijk[5] != -1) { + bijk_pnp_s = allocateMemory(1, 67); + bijk_pnp_r = allocateMemory(1, 68); + } + if (neighbors_id_ijk[6] != -1) { + bijk_ppn_s = allocateMemory(1, 69); + bijk_ppn_r = allocateMemory(1, 70); + } + if (neighbors_id_ijk[7] != -1) { + bijk_ppp_s = allocateMemory(1, 71); + bijk_ppp_r = allocateMemory(1, 72); + } + + // array for mpi request + mpi_send_reqs = allocateMemory(6, 731); + mpi_recv_reqs = allocateMemory(6, 732); + for (int i = 0; i < 6; i++){ + mpi_send_reqs[i] = MPI_REQUEST_NULL; + mpi_recv_reqs[i] = MPI_REQUEST_NULL; + } + + mpi_send_reqs_kosumi = allocateMemory(20, 741); + mpi_recv_reqs_kosumi = allocateMemory(20, 742); + for (int i = 0; i < 20; i++){ + mpi_send_reqs_kosumi[i] = MPI_REQUEST_NULL; + mpi_recv_reqs_kosumi[i] = MPI_REQUEST_NULL; + } + + // arrays for data output + if (subdom_main){ // only accessible by the main process of each subdomain, which store the field data + int nnodes_loc_vis = loc_I_vis * loc_J_vis * loc_K_vis; + int nelms_loc_vis = (loc_I_vis-1) * (loc_J_vis-1) * (loc_K_vis-1); + x_loc_3d = allocateMemory(nnodes_loc_vis, 75); + y_loc_3d = allocateMemory(nnodes_loc_vis, 76); + z_loc_3d = allocateMemory(nnodes_loc_vis, 77); + p_loc_3d = allocateMemory(nnodes_loc_vis, 78); + t_loc_3d = allocateMemory(nnodes_loc_vis, 79); + r_loc_3d = allocateMemory(nnodes_loc_vis, 80); + elms_conn = allocateMemory(nelms_loc_vis*9, 81); + my_proc_dump = allocateMemory(nnodes_loc_vis, 82); // DEBUG + vis_data = allocateMemory(nnodes_loc_vis, 83); // temp array for visuzulization + } + + // arrays for inversion + if (inverse_flag) { + int n_total_loc_inv_grid = n_inv_I_loc * n_inv_J_loc * n_inv_K_loc; + int n_total_loc_inv_grid_ani = n_inv_I_loc_ani * n_inv_J_loc_ani * n_inv_K_loc_ani; + + if (subdom_main){ // only accessible by the main process of each subdomain, which store the field data + Ks_loc = allocateMemory(n_total_loc_grid_points, 90); + Kxi_loc = allocateMemory(n_total_loc_grid_points, 91); + Keta_loc = allocateMemory(n_total_loc_grid_points, 92); + Ks_density_loc = allocateMemory(n_total_loc_grid_points, 93); + Kxi_density_loc = allocateMemory(n_total_loc_grid_points, 94); + Keta_density_loc = allocateMemory(n_total_loc_grid_points, 95); + + Ks_inv_loc = allocateMemory(n_total_loc_inv_grid, 96); + Kxi_inv_loc = allocateMemory(n_total_loc_inv_grid_ani, 97); + Keta_inv_loc = allocateMemory(n_total_loc_inv_grid_ani, 98); + Ks_density_inv_loc = allocateMemory(n_total_loc_inv_grid, 99); + Kxi_density_inv_loc = allocateMemory(n_total_loc_inv_grid_ani, 100); + Keta_density_inv_loc = allocateMemory(n_total_loc_inv_grid_ani, 101); + + Ks_update_loc = allocateMemory(n_total_loc_grid_points, 99); + Kxi_update_loc = allocateMemory(n_total_loc_grid_points, 100); + Keta_update_loc = allocateMemory(n_total_loc_grid_points, 101); + Ks_density_update_loc = allocateMemory(n_total_loc_grid_points, 102); + Kxi_density_update_loc = allocateMemory(n_total_loc_grid_points, 103); + Keta_density_update_loc = allocateMemory(n_total_loc_grid_points, 104); + + Ks_update_loc_previous = allocateMemory(n_total_loc_grid_points, 102); + Kxi_update_loc_previous = allocateMemory(n_total_loc_grid_points, 103); + Keta_update_loc_previous = allocateMemory(n_total_loc_grid_points, 104); + } + + if (sub_nprocs <= 1){ + Tadj_loc = allocateMemory(n_total_loc_grid_points, 105); + Tadj_density_loc = allocateMemory(n_total_loc_grid_points, 106); + } + + if (optim_method==HALVE_STEPPING_MODE) { + fac_b_loc_back = allocateMemory(n_total_loc_grid_points, 107); + fac_c_loc_back = allocateMemory(n_total_loc_grid_points, 108); + fac_f_loc_back = allocateMemory(n_total_loc_grid_points, 109); + xi_loc_back = allocateMemory(n_total_loc_grid_points, 110); + eta_loc_back = allocateMemory(n_total_loc_grid_points, 111); + fun_loc_back = allocateMemory(n_total_loc_grid_points, 112); + } + + if (optim_method==LBFGS_MODE) { + fac_b_loc_back = allocateMemory(n_total_loc_grid_points, 113); + fac_c_loc_back = allocateMemory(n_total_loc_grid_points, 114); + fac_f_loc_back = allocateMemory(n_total_loc_grid_points, 115); + xi_loc_back = allocateMemory(n_total_loc_grid_points, 116); + eta_loc_back = allocateMemory(n_total_loc_grid_points, 117); + fun_loc_back = allocateMemory(n_total_loc_grid_points, 118); + + int n_total_loc_lbfgs = n_total_loc_grid_points * Mbfgs; + Ks_descent_dir_loc = allocateMemory(n_total_loc_lbfgs, 119); + Kxi_descent_dir_loc = allocateMemory(n_total_loc_lbfgs, 120); + Keta_descent_dir_loc = allocateMemory(n_total_loc_lbfgs, 121); + // initialize + std::fill(Ks_descent_dir_loc, Ks_descent_dir_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Kxi_descent_dir_loc, Kxi_descent_dir_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Keta_descent_dir_loc, Keta_descent_dir_loc + n_total_loc_lbfgs, _0_CR); + + if (id_sim==0){ + Ks_grad_store_loc = allocateMemory(n_total_loc_lbfgs, 122); + Kxi_grad_store_loc = allocateMemory(n_total_loc_lbfgs, 123); + Keta_grad_store_loc = allocateMemory(n_total_loc_lbfgs, 124); + Ks_model_store_loc = allocateMemory(n_total_loc_lbfgs, 125); + Kxi_model_store_loc = allocateMemory(n_total_loc_lbfgs, 126); + Keta_model_store_loc = allocateMemory(n_total_loc_lbfgs, 127); + fun_gradient_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 128); + xi_gradient_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 129); + eta_gradient_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 130); + fun_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 131); + xi_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 132); + eta_regularization_penalty_loc = allocateMemory(n_total_loc_lbfgs, 133); + fun_prior_loc = allocateMemory(n_total_loc_lbfgs, 134); + xi_prior_loc = allocateMemory(n_total_loc_lbfgs, 135); + eta_prior_loc = allocateMemory(n_total_loc_lbfgs, 136); + + // initialize + std::fill(Ks_grad_store_loc, Ks_grad_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Kxi_grad_store_loc, Kxi_grad_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Keta_grad_store_loc, Keta_grad_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Ks_model_store_loc, Ks_model_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Kxi_model_store_loc, Kxi_model_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(Keta_model_store_loc, Keta_model_store_loc + n_total_loc_lbfgs, _0_CR); + std::fill(fun_gradient_regularization_penalty_loc, fun_gradient_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(xi_gradient_regularization_penalty_loc, xi_gradient_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(eta_gradient_regularization_penalty_loc, eta_gradient_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(fun_regularization_penalty_loc, fun_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(xi_regularization_penalty_loc, xi_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(eta_regularization_penalty_loc, eta_regularization_penalty_loc + n_total_loc_lbfgs, _0_CR); + std::fill(fun_prior_loc, fun_prior_loc + n_total_loc_lbfgs, _0_CR); + std::fill(xi_prior_loc, xi_prior_loc + n_total_loc_lbfgs, _0_CR); + std::fill(eta_prior_loc, eta_prior_loc + n_total_loc_lbfgs, _0_CR); + } + } + } // end of if inverse_flag + + stdout_by_main("Memory allocation done."); +} + + +void Grid::shm_memory_allocation() { + + synchronize_all_sub(); + + int n_total_loc_grid_points = loc_I * loc_J * loc_K; + if (sub_rank != 0) + n_total_loc_grid_points = 0; + + prepare_shm_array_cr(n_total_loc_grid_points, T_loc, win_T_loc); + prepare_shm_array_cr(n_total_loc_grid_points, tau_old_loc, win_tau_old_loc); + prepare_shm_array_cr(n_total_loc_grid_points, xi_loc, win_xi_loc); + prepare_shm_array_cr(n_total_loc_grid_points, eta_loc, win_eta_loc); + prepare_shm_array_cr(n_total_loc_grid_points, zeta_loc, win_zeta_loc); + + prepare_shm_array_cr(n_total_loc_grid_points, T0r_loc, win_T0r_loc); + prepare_shm_array_cr(n_total_loc_grid_points, T0t_loc, win_T0t_loc); + prepare_shm_array_cr(n_total_loc_grid_points, T0p_loc, win_T0p_loc); + prepare_shm_array_cr(n_total_loc_grid_points, T0v_loc, win_T0v_loc); + prepare_shm_array_cr(n_total_loc_grid_points, tau_loc, win_tau_loc); + prepare_shm_array_cr(n_total_loc_grid_points, fac_a_loc, win_fac_a_loc); + prepare_shm_array_cr(n_total_loc_grid_points, fac_b_loc, win_fac_b_loc); + prepare_shm_array_cr(n_total_loc_grid_points, fac_c_loc, win_fac_c_loc); + prepare_shm_array_cr(n_total_loc_grid_points, fac_f_loc, win_fac_f_loc); + prepare_shm_array_cr(n_total_loc_grid_points, fun_loc, win_fun_loc); + prepare_shm_array_bool(n_total_loc_grid_points, is_changed, win_is_changed); + + prepare_shm_array_cr(loc_I, p_loc_1d, win_p_loc_1d); + prepare_shm_array_cr(loc_J, t_loc_1d, win_t_loc_1d); + prepare_shm_array_cr(loc_K, r_loc_1d, win_r_loc_1d); + + // inversion + prepare_shm_array_cr(n_total_loc_grid_points, Tadj_loc, win_Tadj_loc); + prepare_shm_array_cr(n_total_loc_grid_points, Tadj_density_loc, win_Tadj_density_loc); +} + + +void Grid::shm_memory_deallocation() { + // Free MPI shared memory windows before MPI_Finalize to avoid Intel OneAPI errors + // These windows were allocated in shm_memory_allocation() + cleanup_mpi_wins({&win_fac_a_loc, &win_fac_b_loc, &win_fac_c_loc, &win_fac_f_loc, + &win_T0r_loc, &win_T0p_loc, &win_T0t_loc, &win_T0v_loc, + &win_tau_loc, &win_fun_loc, &win_is_changed, + &win_T_loc, &win_tau_old_loc, + &win_xi_loc, &win_eta_loc, &win_zeta_loc, + &win_r_loc_1d, &win_t_loc_1d, &win_p_loc_1d, + &win_Tadj_loc, &win_Tadj_density_loc}); +} + +// function for memory allocation, called only for subdomain. +void Grid::memory_deallocation() { + // shm array deallocation is done in shm_memory_deallocation() if shm is used + if (sub_nprocs <= 1) { + +#ifdef USE_CUDA + if(use_gpu) + cudaFree(tau_loc); + else + delete[] tau_loc; +#else + delete[] tau_loc; +#endif + delete[] xi_loc; + delete[] eta_loc; + delete[] zeta_loc; + delete[] T_loc; + delete[] tau_old_loc; + + delete[] T0r_loc; + delete[] T0t_loc; + delete[] T0p_loc; + delete[] T0v_loc; + delete[] fac_a_loc; + delete[] fac_b_loc; + delete[] fac_c_loc; + delete[] fac_f_loc; + delete[] fun_loc; + delete[] is_changed; + + delete[] t_loc_1d; + delete[] p_loc_1d; + delete[] r_loc_1d; + + } + + if(if_test) + delete[] u_loc; + + if (neighbors_id[0] != -1) { + delete[] bin_s; + delete[] bin_r; + } + if (neighbors_id[1] != -1) { + delete[] bip_s; + delete[] bip_r; + } + if (neighbors_id[2] != -1) { + delete[] bjn_s; + delete[] bjn_r; + } + if (neighbors_id[3] != -1) { + delete[] bjp_s; + delete[] bjp_r; + } + if (neighbors_id[4] != -1) { + delete[] bkn_s; + delete[] bkn_r; + } + if (neighbors_id[5] != -1) { + delete[] bkp_s; + delete[] bkp_r; + } + if (neighbors_id_ij[0] != -1) { + delete[] bij_nn_s; + delete[] bij_nn_r; + } + if (neighbors_id_ij[1] != -1) { + delete[] bij_np_s; + delete[] bij_np_r; + } + if (neighbors_id_ij[2] != -1) { + delete[] bij_pn_s; + delete[] bij_pn_r; + } + if (neighbors_id_ij[3] != -1) { + delete[] bij_pp_s; + delete[] bij_pp_r; + } + if (neighbors_id_jk[0] != -1) { + delete[] bjk_nn_s; + delete[] bjk_nn_r; + } + if (neighbors_id_jk[1] != -1) { + delete[] bjk_np_s; + delete[] bjk_np_r; + } + if (neighbors_id_jk[2] != -1) { + delete[] bjk_pn_s; + delete[] bjk_pn_r; + } + if (neighbors_id_jk[3] != -1) { + delete[] bjk_pp_s; + delete[] bjk_pp_r; + } + if (neighbors_id_ik[0] != -1) { + delete[] bik_nn_s; + delete[] bik_nn_r; + } + if (neighbors_id_ik[1] != -1) { + delete[] bik_np_s; + delete[] bik_np_r; + } + if (neighbors_id_ik[2] != -1) { + delete[] bik_pn_s; + delete[] bik_pn_r; + } + if (neighbors_id_ik[3] != -1) { + delete[] bik_pp_s; + delete[] bik_pp_r; + } + if (neighbors_id_ijk[0] != -1) { + delete[] bijk_nnn_s; + delete[] bijk_nnn_r; + } + if (neighbors_id_ijk[1] != -1) { + delete[] bijk_nnp_s; + delete[] bijk_nnp_r; + } + if (neighbors_id_ijk[2] != -1) { + delete[] bijk_npn_s; + delete[] bijk_npn_r; + } + if (neighbors_id_ijk[3] != -1) { + delete[] bijk_npp_s; + delete[] bijk_npp_r; + } + if (neighbors_id_ijk[4] != -1) { + delete[] bijk_pnn_s; + delete[] bijk_pnn_r; + } + if (neighbors_id_ijk[5] != -1) { + delete[] bijk_pnp_s; + delete[] bijk_pnp_r; + } + if (neighbors_id_ijk[6] != -1) { + delete[] bijk_ppn_s; + delete[] bijk_ppn_r; + } + if (neighbors_id_ijk[7] != -1) { + delete[] bijk_ppp_s; + delete[] bijk_ppp_r; + } + + delete[] mpi_send_reqs; + delete[] mpi_recv_reqs; + delete[] mpi_send_reqs_kosumi; + delete[] mpi_recv_reqs_kosumi; + + // delete arrays + delete[] nnodes; + delete[] nelms; + delete[] nnodes_vis; + delete[] nelms_vis; + + if (subdom_main){ + delete[] x_loc_3d; + delete[] y_loc_3d; + delete[] z_loc_3d; + delete[] p_loc_3d; + delete[] t_loc_3d; + delete[] r_loc_3d; + delete[] elms_conn; + delete[] my_proc_dump; + delete[] vis_data; + } + + // inversion arrays + if (inverse_flag){ + delete inv_grid; + + if (subdom_main){ + delete[] Ks_loc; + delete[] Kxi_loc; + delete[] Keta_loc; + delete[] Ks_density_loc; + delete[] Kxi_density_loc; + delete[] Keta_density_loc; + delete[] Ks_inv_loc; + delete[] Kxi_inv_loc; + delete[] Keta_inv_loc; + delete[] Ks_density_inv_loc; + delete[] Kxi_density_inv_loc; + delete[] Keta_density_inv_loc; + delete[] Ks_update_loc; + delete[] Kxi_update_loc; + delete[] Keta_update_loc; + delete[] Ks_density_update_loc; + delete[] Kxi_density_update_loc; + delete[] Keta_density_update_loc; + delete[] Ks_update_loc_previous; + delete[] Kxi_update_loc_previous; + delete[] Keta_update_loc_previous; + } + + if (sub_nprocs <= 1){ + delete[] Tadj_loc; + delete[] Tadj_density_loc; + } + + if (optim_method==HALVE_STEPPING_MODE) { + delete[] fac_b_loc_back; + delete[] fac_c_loc_back; + delete[] fac_f_loc_back; + delete[] fun_loc_back; + delete[] xi_loc_back; + delete[] eta_loc_back; + } + + if (optim_method==LBFGS_MODE) { + delete[] fac_b_loc_back; + delete[] fac_c_loc_back; + delete[] fac_f_loc_back; + delete[] fun_loc_back; + delete[] xi_loc_back; + delete[] eta_loc_back; + + if (id_sim==0){ + delete[] Ks_grad_store_loc; + delete[] Kxi_grad_store_loc; + delete[] Keta_grad_store_loc; + delete[] Ks_model_store_loc; + delete[] Kxi_model_store_loc; + delete[] Keta_model_store_loc; + delete[] fun_gradient_regularization_penalty_loc; + delete[] xi_gradient_regularization_penalty_loc; + delete[] eta_gradient_regularization_penalty_loc; + delete[] fun_regularization_penalty_loc; + delete[] xi_regularization_penalty_loc; + delete[] eta_regularization_penalty_loc; + delete[] fun_prior_loc; + delete[] xi_prior_loc; + delete[] eta_prior_loc; + } + } + } // end if inverse_flag + + stdout_by_main("Memory deallocation done."); +} + + +// setput the grid parameters (material and source etc.) +void Grid::setup_grid_params(InputParams &IP, IO_utils& io) { + + // setup coordinates + r_min = depth2radius(IP.get_max_dep()); // convert from depth to radius + r_max = depth2radius(IP.get_min_dep()); // convert from depth to radius + lat_min = IP.get_min_lat(); // in rad + lat_max = IP.get_max_lat(); // in rad + lon_min = IP.get_min_lon(); // in rad + lon_max = IP.get_max_lon(); // in rad + + dr = (r_max - r_min) / (ngrid_k - 1); + dlat = (lat_max - lat_min) / (ngrid_j - 1); + dlon = (lon_max - lon_min) / (ngrid_i - 1); + + dt = dlat; dp = dlon; + + // starting position in global indices including ghost layers + int tmp_offset_k = get_offset_k(); + int tmp_offset_j = get_offset_j(); + int tmp_offset_i = get_offset_i(); // offset_i - i_start_loc + + // output global grid parameters + if (inter_sub_rank == 0 && myrank == 0 && id_sim == 0) { + std::cout << "\n\n Global grid information: \n\n" << std::endl; + std::cout << " r_min r_max dr : " << r_min << " " << r_max << " " << dr << std::endl; + std::cout << " depth_min depth_max dz : " << IP.get_min_dep() << " " << IP.get_max_dep() << std::endl; + std::cout << " lat_min lat_max dlat [degree] : " << lat_min*RAD2DEG << " " << lat_max*RAD2DEG << " " << dlat*RAD2DEG << std::endl; + std::cout << " lon_min lon_max dlon [degree] : " << lon_min*RAD2DEG << " " << lon_max*RAD2DEG << " " << dlon*RAD2DEG << std::endl; + std::cout << " ngrid_i ngrid_j ngrid_k : " << ngrid_i << " " << ngrid_j << " " << ngrid_k << std::endl; + std::cout << "\n\n" << std::endl; + } + + // assign coordinates to 1d arrays + // r + for (int k = 0; k < loc_K; k++) { + r_loc_1d[k] = r_min + (tmp_offset_k + k)*dr; + } + // lat + for (int j = 0; j < loc_J; j++) { + t_loc_1d[j] = lat_min + (tmp_offset_j + j)*dlat; + } + // lon + for (int i = 0; i < loc_I; i++) { + p_loc_1d[i] = lon_min + (tmp_offset_i + i)*dlon; + } + + for (int i = 0; i < nprocs; i++) { + synchronize_all_inter(); + if (i == myrank && id_sim == 0) { + std::cout << "\n--- subdomain info ---- rank : " << i << "\n\n" << std::endl; + std::cout << " p_loc_1d min max in deg.: " << p_loc_1d[0]*RAD2DEG << " " << p_loc_1d[loc_I-1]*RAD2DEG << std::endl; + std::cout << " t_loc_1d min max in deg.: " << t_loc_1d[0]*RAD2DEG << " " << t_loc_1d[loc_J-1]*RAD2DEG << std::endl; + std::cout << " r_loc_1d min max in km : " << r_loc_1d[0] << " " << r_loc_1d[loc_K-1] << std::endl; + + std::cout << " p_loc_1d min max in rad.: " << p_loc_1d[0] << " " << p_loc_1d[loc_I-1] << std::endl; + std::cout << " t_loc_1d min max in rad.: " << t_loc_1d[0] << " " << t_loc_1d[loc_J-1] << std::endl; + + std::cout << " r_min, get_offset_k(), dr in km: " << r_min << " " << tmp_offset_k << " " << dr << std::endl; + std::cout << " lat_min, get_offset_j(), dlat in deg.: " << lat_min*RAD2DEG << " " << tmp_offset_j << " " << dlat*RAD2DEG << std::endl; + std::cout << " lon_min, get_offset_i(), dlon in deg.: " << lon_min*RAD2DEG << " " << tmp_offset_i << " " << dlon*RAD2DEG << std::endl; + std::cout << "\n" << std::endl; + } + } + + // independent read model data + if (id_sim == 0){ + // read init model + std::string f_model_path = IP.get_init_model_path(); + io.read_model(f_model_path,"xi", xi_loc, tmp_offset_i, tmp_offset_j, tmp_offset_k); + io.read_model(f_model_path,"eta", eta_loc, tmp_offset_i, tmp_offset_j, tmp_offset_k); + //io.read_model(f_model_path,"zeta", zeta_loc, tmp_offset_i, tmp_offset_j, tmp_offset_k); + io.read_model(f_model_path,"vel", fun_loc, tmp_offset_i, tmp_offset_j, tmp_offset_k); // use slowness array temprarily + if(if_test) { + // solver test + io.read_model(f_model_path, "u", u_loc, tmp_offset_i, tmp_offset_j, tmp_offset_k); + } + + // set zeta = 0 (optimization for zeta is not implemented yet) + std::fill(zeta_loc, zeta_loc + loc_I*loc_J*loc_K, _0_CR); + + // copy initial model to prior model arrays + if (optim_method==LBFGS_MODE){ + std::copy(xi_loc, xi_loc + loc_I*loc_J*loc_K, xi_prior_loc); + std::copy(eta_loc, eta_loc + loc_I*loc_J*loc_K, eta_prior_loc); + std::copy(fun_loc, fun_loc + loc_I*loc_J*loc_K, fun_prior_loc); + } + + } + + // broadcast + int n_total_loc_grid_points = loc_I * loc_J * loc_K; + broadcast_cr_inter_sim(xi_loc, n_total_loc_grid_points, 0); + broadcast_cr_inter_sim(eta_loc, n_total_loc_grid_points, 0); + broadcast_cr_inter_sim(zeta_loc, n_total_loc_grid_points, 0); + broadcast_cr_inter_sim(fun_loc, n_total_loc_grid_points, 0); // here passing velocity array + if(if_test) { + broadcast_cr_inter_sim(u_loc, n_total_loc_grid_points, 0); + } + + // center of the domain + CUSTOMREAL lon_center = (lon_min + lon_max) / 2.0; + CUSTOMREAL lat_center = (lat_min + lat_max) / 2.0; + + // initialize other necessary arrays + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + + // convert velocity to slowness + fun_loc[I2V(i_lon, j_lat, k_r)] = _1_CR / fun_loc[I2V(i_lon, j_lat, k_r)]; + + // calculate fac_a_loc, fac_b_loc, fac_c_loc, fac_f_loc + fac_a_loc[I2V(i_lon, j_lat, k_r)] = _1_CR + _2_CR * zeta_loc[I2V(i_lon, j_lat, k_r)]; + fac_b_loc[I2V(i_lon, j_lat, k_r)] = _1_CR - _2_CR * xi_loc[I2V(i_lon, j_lat, k_r)]; + fac_c_loc[I2V(i_lon, j_lat, k_r)] = _1_CR + _2_CR * xi_loc[I2V(i_lon, j_lat, k_r)]; + fac_f_loc[I2V(i_lon, j_lat, k_r)] = - _2_CR * eta_loc[I2V(i_lon, j_lat, k_r)]; + + // construct 3d coordinate arrays and node connectivity for visualization + // exclude the ghost nodes + if (i_start_vis <= i_lon && i_lon <= i_end_vis \ + && j_start_vis <= j_lat && j_lat <= j_end_vis \ + && k_start_vis <= k_r && k_r <= k_end_vis) { + int i_loc_tmp = i_lon - i_start_vis; + int j_loc_tmp = j_lat - j_start_vis; + int k_loc_tmp = k_r - k_start_vis; + + // get the coordinates of the point + CUSTOMREAL x, y, z; + //RLonLat2xyz(p_loc_1d[i_lon], t_loc_1d[j_lat], r_loc_1d[k_r], x, y, z); // complete sphere + WGS84ToCartesian(p_loc_1d[i_lon], t_loc_1d[j_lat], r_loc_1d[k_r], x, y, z, lon_center, lat_center); // WGS84 + + x_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = x; + y_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = y; + z_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = z; + p_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = p_loc_1d[i_lon]*RAD2DEG; + t_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = t_loc_1d[j_lat]*RAD2DEG; + // r_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = r_loc_1d[k_r]*M2KM; + r_loc_3d[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = r_loc_1d[k_r]; + + // dump proc id + my_proc_dump[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = myrank; + + // node connectivity + // exclude the last layers + if (i_lon < i_end_vis \ + && j_lat < j_end_vis \ + && k_r < k_end_vis) { + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9] = cell_type; + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+1] = offset_nnodes_vis+I2V_VIS(i_loc_tmp, j_loc_tmp, k_loc_tmp); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+2] = offset_nnodes_vis+I2V_VIS(i_loc_tmp+1,j_loc_tmp, k_loc_tmp); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+3] = offset_nnodes_vis+I2V_VIS(i_loc_tmp+1,j_loc_tmp+1,k_loc_tmp); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+4] = offset_nnodes_vis+I2V_VIS(i_loc_tmp, j_loc_tmp+1,k_loc_tmp); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+5] = offset_nnodes_vis+I2V_VIS(i_loc_tmp, j_loc_tmp, k_loc_tmp+1); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+6] = offset_nnodes_vis+I2V_VIS(i_loc_tmp+1,j_loc_tmp, k_loc_tmp+1); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+7] = offset_nnodes_vis+I2V_VIS(i_loc_tmp+1,j_loc_tmp+1,k_loc_tmp+1); + elms_conn[I2V_ELM_CONN(i_loc_tmp,j_loc_tmp,k_loc_tmp)*9+8] = offset_nnodes_vis+I2V_VIS(i_loc_tmp, j_loc_tmp+1,k_loc_tmp+1); + } + } + } + } + } // end of for loop + + + // check model discontinuity + if (id_sim == 0 && (!IP.get_ignore_velocity_discontinuity())){ + check_velocity_discontinuity(); + } + + + // setup parameters for inversion grids +// if (inverse_flag) +// setup_inv_grid_params(IP); + +} + + +void Grid::check_velocity_discontinuity(){ + + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++){ + for (int k_r = 0; k_r < loc_K-1; k_r++) { + CUSTOMREAL vel_bottom = 1.0/fun_loc[I2V(i_lon,j_lat,k_r)]; + CUSTOMREAL vel_top = 1.0/fun_loc[I2V(i_lon,j_lat,k_r+1)]; + if (vel_top > vel_bottom * 1.2 || vel_top < vel_bottom * 0.8){ + std::cout << "Velocity discontinuity detected at i = " << i_lon << " j = " << j_lat << " k = " << k_r << std::endl; + std::cout << "vel_loc[I2V(i,j,k)] = " << vel_bottom << std::endl; + std::cout << "vel_loc[I2V(i,j,k+1)] = " << vel_top << std::endl; + std::cout << std::endl; + std::cout << "Smoothing the input model using Gaussian filter is highly recommended." << std::endl; + std::cout << "Please set the flag ignore_velocity_discontinuity: True in the input_params.yaml file (below run_mode) if you want to solve in a model with discontinuity. " << std::endl; + std::cout << "Unexpected bias may occur in traveltime and kernel." << std::endl; + exit(1); + } + } + } + } +} + + +void Grid::initialize_kernels(){ + // initialize kernels + if (subdom_main){ + std::fill(Ks_loc, Ks_loc + loc_I*loc_J*loc_K, _0_CR); + std::fill(Kxi_loc, Kxi_loc + loc_I*loc_J*loc_K, _0_CR); + std::fill(Keta_loc, Keta_loc + loc_I*loc_J*loc_K, _0_CR); + std::fill(Ks_density_loc, Ks_density_loc + loc_I*loc_J*loc_K, _0_CR); + std::fill(Kxi_density_loc,Kxi_density_loc + loc_I*loc_J*loc_K, _0_CR); + std::fill(Keta_density_loc,Keta_density_loc + loc_I*loc_J*loc_K, _0_CR); + //for (int k = 0; k < loc_K; k++) { + // for (int j = 0; j < loc_J; j++) { + // for (int i = 0; i < loc_I; i++) { + // Ks_loc[ I2V(i,j,k)] = _0_CR; + // Kxi_loc[ I2V(i,j,k)] = _0_CR; + // Keta_loc[I2V(i,j,k)] = _0_CR; + // } + // } + //} + } +} + + +// get a part of pointers from the requested array for visualization +CUSTOMREAL* Grid::get_array_for_vis(CUSTOMREAL* arr, bool inverse_value) { + + send_recev_boundary_data(arr); + // add a routine for communication the boundary value + // with the neighbors with line/point contact + send_recev_boundary_data_kosumi(arr); + + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + if (i_start_vis <= i_lon && i_lon <= i_end_vis \ + && j_start_vis <= j_lat && j_lat <= j_end_vis \ + && k_start_vis <= k_r && k_r <= k_end_vis) { + int i_loc_tmp = i_lon - i_start_vis; + int j_loc_tmp = j_lat - j_start_vis; + int k_loc_tmp = k_r - k_start_vis; + + if(!inverse_value) + vis_data[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = arr[I2V(i_lon,j_lat,k_r)]; + else + vis_data[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = _1_CR/arr[I2V(i_lon,j_lat,k_r)]; // used for convert from slowness to velocity + } + } + } + } + + return vis_data; +} + + +// set visualization array to local array +void Grid::set_array_from_vis(CUSTOMREAL* arr) { + + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + if (i_start_vis <= i_lon && i_lon <= i_end_vis \ + && j_start_vis <= j_lat && j_lat <= j_end_vis \ + && k_start_vis <= k_r && k_r <= k_end_vis) { + int i_loc_tmp = i_lon - i_start_vis; + int j_loc_tmp = j_lat - j_start_vis; + int k_loc_tmp = k_r - k_start_vis; + + arr[I2V(i_lon,j_lat,k_r)] = vis_data[I2V_VIS(i_loc_tmp,j_loc_tmp,k_loc_tmp)]; + } + } + } + } + + // set values to ghost layer + send_recev_boundary_data(arr); + +} + + +// get a part of pointers from the requested array for visualization +void Grid::get_array_for_3d_output(const CUSTOMREAL *arr_in, CUSTOMREAL* arr_out, bool inverse_value) { + + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + int i_loc_tmp = i_lon - i_start_loc; + int j_loc_tmp = j_lat - j_start_loc; + int k_loc_tmp = k_r - k_start_loc; + if (!inverse_value) + arr_out[I2V_3D(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = arr_in[I2V(i_lon,j_lat,k_r)]; + else + arr_out[I2V_3D(i_loc_tmp,j_loc_tmp,k_loc_tmp)] = _1_CR/arr_in[I2V(i_lon,j_lat,k_r)]; // used for convert from slowness to velocity + } + } + } +} + + +void Grid::reinitialize_abcf(){ + if (subdom_main) { + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + // initialize arrays + fac_a_loc[I2V(i_lon,j_lat,k_r)] = fac_a_loc[I2V(i_lon,j_lat,k_r)]; + fac_b_loc[I2V(i_lon,j_lat,k_r)] = fac_b_loc[I2V(i_lon,j_lat,k_r)]/ my_square(r_loc_1d[k_r]); + fac_c_loc[I2V(i_lon,j_lat,k_r)] = fac_c_loc[I2V(i_lon,j_lat,k_r)]/(my_square(r_loc_1d[k_r])*my_square(std::cos(t_loc_1d[j_lat]))); + fac_f_loc[I2V(i_lon,j_lat,k_r)] = fac_f_loc[I2V(i_lon,j_lat,k_r)]/(my_square(r_loc_1d[k_r])* std::cos(t_loc_1d[j_lat])); + } + } + } + } +} + + +void Grid::rejuvenate_abcf(){ + if (subdom_main) { + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + // initialize arrays + fac_a_loc[I2V(i_lon,j_lat,k_r)] = fac_a_loc[I2V(i_lon,j_lat,k_r)]; + fac_b_loc[I2V(i_lon,j_lat,k_r)] = _1_CR - _2_CR * xi_loc[I2V(i_lon,j_lat,k_r)]; + fac_c_loc[I2V(i_lon,j_lat,k_r)] = _1_CR + _2_CR * xi_loc[I2V(i_lon,j_lat,k_r)]; + fac_f_loc[I2V(i_lon,j_lat,k_r)] = - _2_CR * eta_loc[I2V(i_lon,j_lat,k_r)]; + } + } + } + } +} + + +void Grid::setup_factors(Source &src){ + + // calculate factors for the source + a0 = src.get_fac_at_source(fac_a_loc); + b0 = src.get_fac_at_source(fac_b_loc); + c0 = src.get_fac_at_source(fac_c_loc); + f0 = src.get_fac_at_source(fac_f_loc); + fun0 = src.get_fac_at_source(fun_loc, false); // true for debug +} + + +void Grid::initialize_fields(Source& src, InputParams& IP){ + + // get source position + CUSTOMREAL src_r = src.get_src_r(); + CUSTOMREAL src_t = src.get_src_t(); + CUSTOMREAL src_p = src.get_src_p(); + + // std out src positions + CUSTOMREAL c0b0_minus_f0f0 = c0*b0 - f0*f0; + + // debug + int n_source_node = 0; + + // std::cout << a0 << ' ' << b0 << ' ' << c0 << ' ' << f0 << ' ' << std::endl; + + + + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + CUSTOMREAL dr_from_src = r_loc_1d[k_r] - src_r; + CUSTOMREAL dt_from_src = t_loc_1d[j_lat] - src_t; + CUSTOMREAL dp_from_src = p_loc_1d[i_lon] - src_p; + + T0v_loc[I2V(i_lon,j_lat,k_r)] = fun0 * std::sqrt( _1_CR/a0 *my_square(dr_from_src) \ + + c0/(c0b0_minus_f0f0) *my_square(dt_from_src) \ + + b0/(c0b0_minus_f0f0) *my_square(dp_from_src) \ + + _2_CR*f0/(c0b0_minus_f0f0)*dt_from_src*dp_from_src); + + is_changed[I2V(i_lon,j_lat,k_r)] = true; + + if (isZero(T0v_loc[I2V(i_lon,j_lat,k_r)])) { + T0r_loc[I2V(i_lon,j_lat,k_r)] = _0_CR; + T0t_loc[I2V(i_lon,j_lat,k_r)] = _0_CR; + T0p_loc[I2V(i_lon,j_lat,k_r)] = _0_CR; + } else { + T0r_loc[I2V(i_lon,j_lat,k_r)] = my_square(fun0)*(_1_CR/a0*dr_from_src)/T0v_loc[I2V(i_lon,j_lat,k_r)]; + T0t_loc[I2V(i_lon,j_lat,k_r)] = my_square(fun0)*(c0/(c0b0_minus_f0f0)*dt_from_src+f0/(c0b0_minus_f0f0)*dp_from_src)/T0v_loc[I2V(i_lon,j_lat,k_r)]; + T0p_loc[I2V(i_lon,j_lat,k_r)] = my_square(fun0)*(b0/(c0b0_minus_f0f0)*dp_from_src+f0/(c0b0_minus_f0f0)*dt_from_src)/T0v_loc[I2V(i_lon,j_lat,k_r)]; + } + + if (IP.get_stencil_order() == 1){ + source_width = _1_CR * 0.9; + } else { + source_width = _2_CR; + } + + if (std::abs(dr_from_src/dr) <= source_width \ + && std::abs(dt_from_src/dt) <= source_width \ + && std::abs(dp_from_src/dp) <= source_width) { + + tau_loc[I2V(i_lon,j_lat,k_r)] = TAU_INITIAL_VAL; + is_changed[I2V(i_lon,j_lat,k_r)] = false; + + n_source_node++; + + // std::cout << "source def " << std::endl; + // std::cout << "p_loc_1d (lon): " << p_loc_1d[i_lon]*RAD2DEG << ", id_i: " << i_lon << ", src_p: " << src_p*RAD2DEG << std::endl; + // std::cout << "t_loc_1d (lat): " << t_loc_1d[j_lat]*RAD2DEG << ", id_j: " << j_lat << ", src_t: " << src_t*RAD2DEG << std::endl; + // std::cout << "r_loc_1d (r): " << r_loc_1d[k_r] << ", id_k: " << k_r << ", src_r: " << src_r << std::endl; + + if (if_verbose) { + if ( (k_r == 0 && k_first()) || (k_r == loc_K-1 && k_last()) ) + std::cout << "Warning: source is on the boundary k of the grid.\n"; + if ( (j_lat == 0 && j_first()) || (j_lat == loc_J-1 && j_last()) ) + std::cout << "Warning: source is on the boundary j of the grid.\n"; + if ( (i_lon == 0 && i_first()) || (i_lon == loc_I-1 && i_last()) ) + std::cout << "Warning: source is on the boundary i of the grid.\n"; + } + + } else { + if (IP.get_stencil_type()==UPWIND) // upwind scheme, initial tau should be large enough + tau_loc[I2V(i_lon,j_lat,k_r)] = TAU_INF_VAL; + else + tau_loc[I2V(i_lon,j_lat,k_r)] = TAU_INITIAL_VAL; + is_changed[I2V(i_lon,j_lat,k_r)] = true; + + } + + tau_old_loc[I2V(i_lon,j_lat,k_r)] = _0_CR; + + } // end loop i + } // end loop j + } // end loop k + + // int iip_out = 6; + // int jjt_out = 41; + // int kkr_out = 49; + + // std::cout << "T0v_loc[I2V(iip_out-2,jjt_out,kkr_out)]: " << T0v_loc[I2V(iip_out-2,jjt_out,kkr_out)] << std::endl; + // std::cout << "T0v_loc[I2V(iip_out-1,jjt_out,kkr_out)]: " << T0v_loc[I2V(iip_out-1,jjt_out,kkr_out)] << std::endl; + // std::cout << "T0v_loc[I2V(iip_out ,jjt_out,kkr_out)]: " << T0v_loc[I2V(iip_out,jjt_out,kkr_out)] << std::endl; + // std::cout << "T0v_loc[I2V(iip_out+1,jjt_out,kkr_out)]: " << T0v_loc[I2V(iip_out+1,jjt_out,kkr_out)] << std::endl; + // std::cout << "T0v_loc[I2V(iip_out+2,jjt_out,kkr_out)]: " << T0v_loc[I2V(iip_out+2,jjt_out,kkr_out)] << std::endl; + // std::cout << "T0p_loc[I2V(iip_out ,jjt_out,kkr_out)]: " << T0p_loc[I2V(iip_out ,jjt_out,kkr_out)] << std::endl; + + // std::cout << "p_loc_1d (lon): " << p_loc_1d[25]*RAD2DEG << ", id_i: " << 25 + // << "t_loc_1d (lat): " << t_loc_1d[29]*RAD2DEG << ", id_j: " << 29 + // << "r_loc_1d (r): " << r_loc_1d[41] << ", id_k: " << 41 << std::endl; + + // warning if source node is not found + if( n_source_node > 0 && if_verbose ) + std::cout << "rank n_source_node: " << myrank << " " << n_source_node << std::endl; + +} + + +void Grid::initialize_fields_teleseismic(){ + CUSTOMREAL inf_T = 2000.0; + + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + is_changed[I2V(i_lon,j_lat,k_r)] = true; + T_loc[I2V(i_lon,j_lat,k_r)] = inf_T; + } + } + } + + // setup of boundary arrival time conditions is done in iterator function +} + + +// copy the tau values to tau_old +void Grid::tau2tau_old() { + std::copy(tau_loc, tau_loc+loc_I*loc_J*loc_K, tau_old_loc); +} + + +// copy the T values to tau_old +void Grid::T2tau_old() { + std::copy(T_loc, T_loc+loc_I*loc_J*loc_K, tau_old_loc); +} + + +// copy the tau values to Tadj +void Grid::update_Tadj() { + std::copy(tau_loc, tau_loc+loc_I*loc_J*loc_K, Tadj_loc); +} +void Grid::update_Tadj_density() { + std::copy(tau_loc, tau_loc+loc_I*loc_J*loc_K, Tadj_density_loc); +} + +void Grid::back_up_fun_xi_eta_bcf() { + if (!subdom_main) return; + + std::copy(fun_loc, fun_loc+loc_I*loc_J*loc_K, fun_loc_back); + std::copy(xi_loc, xi_loc +loc_I*loc_J*loc_K, xi_loc_back); + std::copy(eta_loc, eta_loc+loc_I*loc_J*loc_K, eta_loc_back); + std::copy(fac_b_loc, fac_b_loc+loc_I*loc_J*loc_K, fac_b_loc_back); + std::copy(fac_c_loc, fac_c_loc+loc_I*loc_J*loc_K, fac_c_loc_back); + std::copy(fac_f_loc, fac_f_loc+loc_I*loc_J*loc_K, fac_f_loc_back); +} + + +void Grid::restore_fun_xi_eta_bcf() { + if (!subdom_main) return; + + std::copy(fun_loc_back, fun_loc_back+loc_I*loc_J*loc_K, fun_loc); + std::copy(xi_loc_back, xi_loc_back +loc_I*loc_J*loc_K, xi_loc); + std::copy(eta_loc_back, eta_loc_back+loc_I*loc_J*loc_K, eta_loc); + std::copy(fac_b_loc_back, fac_b_loc_back+loc_I*loc_J*loc_K, fac_b_loc); + std::copy(fac_c_loc_back, fac_c_loc_back+loc_I*loc_J*loc_K, fac_c_loc); + std::copy(fac_f_loc_back, fac_f_loc_back+loc_I*loc_J*loc_K, fac_f_loc); +} + + +void Grid::calc_L1_and_Linf_diff(CUSTOMREAL& L1_diff, CUSTOMREAL& Linf_diff) { + if (subdom_main) { + L1_diff = 0.0; + Linf_diff = 0.0; + CUSTOMREAL obj_func_glob = 0.0; + + // calculate L1 error + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + L1_diff += std::abs(tau_loc[I2V(i_lon,j_lat,k_r)] - tau_old_loc[I2V(i_lon,j_lat,k_r)]) * T0v_loc[I2V(i_lon,j_lat,k_r)]; + Linf_diff = std::max(Linf_diff,std::abs(tau_loc[I2V(i_lon,j_lat,k_r)] - tau_old_loc[I2V(i_lon,j_lat,k_r)]) * T0v_loc[I2V(i_lon,j_lat,k_r)]); + // std::cout << R_earth-r_loc_3d[k_r] << ' ' << t_loc_3d[j_lat] << ' ' << p_loc_3d[i_lon] << ' ' << T0v_loc[I2V(i_lon,j_lat,k_r)] << ' ' << std::endl; + } + } + } + + // sum up the values of all processes + obj_func_glob=0.0; + allreduce_cr_single(L1_diff, obj_func_glob); + L1_diff = obj_func_glob/((ngrid_i-2)*(ngrid_j-2)*(ngrid_k-2)); + obj_func_glob=0.0; + allreduce_cr_single_max(Linf_diff, obj_func_glob); + Linf_diff = obj_func_glob;///(ngrid_i*ngrid_j*ngrid_k); + } +} + + +void Grid::calc_L1_and_Linf_diff_tele(CUSTOMREAL& L1_diff, CUSTOMREAL& Linf_diff) { + if (subdom_main) { + L1_diff = 0.0; + Linf_diff = 0.0; + CUSTOMREAL obj_func_glob = 0.0; + + // calculate L1 error + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + L1_diff += std::abs(T_loc[I2V(i_lon,j_lat,k_r)] - tau_old_loc[I2V(i_lon,j_lat,k_r)]); // tau_old is used as T_old_loc here + Linf_diff = std::max(Linf_diff,std::abs(T_loc[I2V(i_lon,j_lat,k_r)] - tau_old_loc[I2V(i_lon,j_lat,k_r)])); + } + } + } + + // sum up the values of all processes + obj_func_glob=0.0; + allreduce_cr_single(L1_diff, obj_func_glob); + L1_diff = obj_func_glob/((ngrid_i-2)*(ngrid_j-2)*(ngrid_k-2)); + obj_func_glob=0.0; + allreduce_cr_single_max(Linf_diff, obj_func_glob); + Linf_diff = obj_func_glob;///(ngrid_i*ngrid_j*ngrid_k); + } +} + + +void Grid::calc_L1_and_Linf_diff_adj(CUSTOMREAL& L1_diff, CUSTOMREAL& Linf_diff) { + + if (subdom_main) { + //L1_diff = 0.0; + Linf_diff = 0.0; + CUSTOMREAL obj_func_glob = 0.0; + CUSTOMREAL adj_factor = 1.0; + + // calculate L1 error + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + // Adjoint simulation use only Linf + Linf_diff = std::max(Linf_diff,std::abs(tau_loc[I2V(i_lon,j_lat,k_r)] - Tadj_loc[I2V(i_lon,j_lat,k_r)])); + } + } + } + + // sum up the values of all processes + obj_func_glob=0.0; + allreduce_cr_single_max(Linf_diff, obj_func_glob); + Linf_diff = obj_func_glob*adj_factor;///(ngrid_i*ngrid_j*ngrid_k); + } +} + +void Grid::calc_L1_and_Linf_diff_adj_density(CUSTOMREAL& L1_diff, CUSTOMREAL& Linf_diff) { + + if (subdom_main) { + //L1_diff = 0.0; + Linf_diff = 0.0; + CUSTOMREAL obj_func_glob = 0.0; + CUSTOMREAL adj_factor = 1.0; + + // calculate L1 error + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + // Adjoint simulation use only Linf + Linf_diff = std::max(Linf_diff,std::abs(tau_loc[I2V(i_lon,j_lat,k_r)] - Tadj_density_loc[I2V(i_lon,j_lat,k_r)])); + } + } + } + + // sum up the values of all processes + obj_func_glob=0.0; + allreduce_cr_single_max(Linf_diff, obj_func_glob); + Linf_diff = obj_func_glob*adj_factor;///(ngrid_i*ngrid_j*ngrid_k); + } +} + +void Grid::calc_L1_and_Linf_error(CUSTOMREAL& L1_error, CUSTOMREAL& Linf_error) { + L1_error = 0.0; + Linf_error = 0.0; + CUSTOMREAL obj_func_glob = 0.0; + + // calculate L1 error + for (int k_r = k_start_loc; k_r <= k_end_loc; k_r++) { + for (int j_lat = j_start_loc; j_lat <= j_end_loc; j_lat++) { + for (int i_lon = i_start_loc; i_lon <= i_end_loc; i_lon++) { + L1_error += std::abs(u_loc[I2V(i_lon,j_lat,k_r)] - T0v_loc[I2V(i_lon,j_lat,k_r)] * tau_loc[I2V(i_lon,j_lat,k_r)]); + Linf_error = std::max(Linf_error,std::abs(u_loc[I2V(i_lon,j_lat,k_r)] - T0v_loc[I2V(i_lon,j_lat,k_r)] * tau_loc[I2V(i_lon,j_lat,k_r)])); + } + } + } + + // sum up the values of all processes + obj_func_glob=0.0; + allreduce_cr_single(L1_error, obj_func_glob); + L1_error = obj_func_glob; + obj_func_glob = 0.0; + allreduce_cr_single_max(Linf_error, obj_func_glob); + Linf_error = obj_func_glob;///(ngrid_i*ngrid_j*ngrid_k); +} + + +void Grid::prepare_boundary_data_to_send(CUSTOMREAL* arr) { + // store the pointers to the ghost layer's elements to be sent / to receive + // node order should be always smaller to larger + + // j-k plane negative + if (neighbors_id[0] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + bin_s[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)] = arr[I2V(i+n_ghost_layers,j,k)]; + } + } + } + } + // j-k plane positive + if (neighbors_id[1] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + bip_s[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)] = arr[I2V(loc_I-n_ghost_layers*2+i,j,k)]; + } + } + } + } + // i-k plane negative + if (neighbors_id[2] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + bjn_s[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)] = arr[I2V(i,j+n_ghost_layers,k)]; + } + } + } + } + // i-k plane positive + if (neighbors_id[3] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + bjp_s[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)] = arr[I2V(i,loc_J-n_ghost_layers*2+j,k)]; + } + } + } + } + + // i-j plane negative + if (neighbors_id[4] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + bkn_s[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)] = arr[I2V(i,j,k+n_ghost_layers)]; + } + } + } + } + // i-j plane positive + if (neighbors_id[5] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + bkp_s[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)] = arr[I2V(i,j,loc_K-n_ghost_layers*2+k)]; + } + } + } + } + + //stdout_by_main("Preparation ghost layers done."); +} + +void Grid::assign_received_data_to_ghost(CUSTOMREAL* arr) { + // store the pointers to the ghost layer's elements to be sent / to receive + // node order should be always smaller to larger + + // j-k plane negative + if (neighbors_id[0] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + arr[I2V(i,j,k)] = bin_r[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)]; + } + } + } + } + // j-k plane positive + if (neighbors_id[1] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + arr[I2V(loc_I-n_ghost_layers+i,j,k)] = bip_r[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)]; + } + } + } + } + // i-k plane negative + if (neighbors_id[2] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,k)] = bjn_r[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]; + } + } + } + } + // i-k plane positive + if (neighbors_id[3] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,loc_J-n_ghost_layers+j,k)] = bjp_r[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]; + } + } + } + } + + // i-j plane negative + if (neighbors_id[4] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,k)] = bkn_r[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]; + } + } + } + } + // i-j plane positive + if (neighbors_id[5] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,loc_K-n_ghost_layers+k)] = bkp_r[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]; + } + } + } + } + + //stdout_by_main("Preparation ghost layers done."); +} + +void Grid::assign_received_data_to_ghost_av(CUSTOMREAL* arr) { + // store the pointers to the ghost layer's elements to be sent / to receive + // node order should be always smaller to larger + + // j-k plane negative + if (neighbors_id[0] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + arr[I2V(i,j,k)] += bin_r[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)]/_2_CR; + } + } + } + } + // j-k plane positive + if (neighbors_id[1] != -1) { + for (int i = 0; i < n_ghost_layers; i++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + arr[I2V(loc_I-n_ghost_layers+i,j,k)] += bip_r[i*loc_J_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_J_excl_ghost + (j-j_start_loc)]/_2_CR; + } + } + } + } + // i-k plane negative + if (neighbors_id[2] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,k)] += bjn_r[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]/_2_CR; + } + } + } + } + // i-k plane positive + if (neighbors_id[3] != -1) { + for (int j = 0; j < n_ghost_layers; j++) { + for (int k = k_start_loc; k <= k_end_loc; k++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,loc_J-n_ghost_layers+j,k)] += bjp_r[j*loc_I_excl_ghost*loc_K_excl_ghost + (k-k_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]/_2_CR; + } + } + } + } + + // i-j plane negative + if (neighbors_id[4] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,k)] += bkn_r[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]/_2_CR; + } + } + } + } + // i-j plane positive + if (neighbors_id[5] != -1) { + for (int k = 0; k < n_ghost_layers; k++) { + for (int j = j_start_loc; j <= j_end_loc; j++) { + for (int i = i_start_loc; i <= i_end_loc; i++) { + arr[I2V(i,j,loc_K-n_ghost_layers+k)] += bkp_r[k*loc_I_excl_ghost*loc_J_excl_ghost + (j-j_start_loc)*loc_I_excl_ghost + (i-i_start_loc)]/_2_CR; + } + } + } + } + + //stdout_by_main("Preparation ghost layers done."); +} + + + +void Grid::send_recev_boundary_data(CUSTOMREAL* arr){ + prepare_boundary_data_to_send(arr); + + // i-direction negative + if (neighbors_id[0] != -1) { + // send boundary layer to neighbor + isend_cr(bin_s, n_grid_bound_i*n_ghost_layers, neighbors_id[0], mpi_send_reqs[0]); + // receive boundary layer from neighbor + irecv_cr(bin_r, n_grid_bound_i*n_ghost_layers, neighbors_id[0], mpi_recv_reqs[0]); + } + // i-direction positive + if (neighbors_id[1] != -1) { + // send boundary layer to neighbor + isend_cr(bip_s, n_grid_bound_i*n_ghost_layers, neighbors_id[1], mpi_send_reqs[1]); + // receive boundary layer from neighbor + irecv_cr(bip_r, n_grid_bound_i*n_ghost_layers, neighbors_id[1], mpi_recv_reqs[1]); + } + // j-direction negative + if (neighbors_id[2] != -1) { + // send boundary layer to neighbor + isend_cr(bjn_s, n_grid_bound_j*n_ghost_layers, neighbors_id[2], mpi_send_reqs[2]); + // receive boundary layer from neighbor + irecv_cr(bjn_r, n_grid_bound_j*n_ghost_layers, neighbors_id[2], mpi_recv_reqs[2]); + } + // j-direction positive + if (neighbors_id[3] != -1) { + // send boundary layer to neighbor + isend_cr(bjp_s, n_grid_bound_j*n_ghost_layers, neighbors_id[3], mpi_send_reqs[3]); + // receive boundary layer from neighbor + irecv_cr(bjp_r, n_grid_bound_j*n_ghost_layers, neighbors_id[3], mpi_recv_reqs[3]); + } + // k-direction negative + if (neighbors_id[4] != -1) { + // send boundary layer to neighbor + isend_cr(bkn_s, n_grid_bound_k*n_ghost_layers, neighbors_id[4], mpi_send_reqs[4]); + // receive boundary layer from neighbor + irecv_cr(bkn_r, n_grid_bound_k*n_ghost_layers, neighbors_id[4], mpi_recv_reqs[4]); + } + // k-direction positive + if (neighbors_id[5] != -1) { + // send boundary layer to neighbor + isend_cr(bkp_s, n_grid_bound_k*n_ghost_layers, neighbors_id[5], mpi_send_reqs[5]); + // receive boundary layer from neighbor + irecv_cr(bkp_r, n_grid_bound_k*n_ghost_layers, neighbors_id[5], mpi_recv_reqs[5]); + } + + // wait for finishing communication + for (int i = 0; i < 6; i++) { + if (neighbors_id[i] != -1) { + wait_req(mpi_send_reqs[i]); + wait_req(mpi_recv_reqs[i]); + } + } + + // THIS SYNCHRONIZATION IS IMPORTANT. + synchronize_all_inter(); + + assign_received_data_to_ghost(arr); + +} + + +void Grid::send_recev_boundary_data_av(CUSTOMREAL* arr){ + prepare_boundary_data_to_send(arr); + + // i-direction negative + if (neighbors_id[0] != -1) { + // send boundary layer to neighbor + isend_cr(bin_s, n_grid_bound_i*n_ghost_layers, neighbors_id[0], mpi_send_reqs[0]); + // receive boundary layer from neighbor + irecv_cr(bin_r, n_grid_bound_i*n_ghost_layers, neighbors_id[0], mpi_recv_reqs[0]); + } + // i-direction positive + if (neighbors_id[1] != -1) { + // send boundary layer to neighbor + isend_cr(bip_s, n_grid_bound_i*n_ghost_layers, neighbors_id[1], mpi_send_reqs[1]); + // receive boundary layer from neighbor + irecv_cr(bip_r, n_grid_bound_i*n_ghost_layers, neighbors_id[1], mpi_recv_reqs[1]); + } + // j-direction negative + if (neighbors_id[2] != -1) { + // send boundary layer to neighbor + isend_cr(bjn_s, n_grid_bound_j*n_ghost_layers, neighbors_id[2], mpi_send_reqs[2]); + // receive boundary layer from neighbor + irecv_cr(bjn_r, n_grid_bound_j*n_ghost_layers, neighbors_id[2], mpi_recv_reqs[2]); + } + // j-direction positive + if (neighbors_id[3] != -1) { + // send boundary layer to neighbor + isend_cr(bjp_s, n_grid_bound_j*n_ghost_layers, neighbors_id[3], mpi_send_reqs[3]); + // receive boundary layer from neighbor + irecv_cr(bjp_r, n_grid_bound_j*n_ghost_layers, neighbors_id[3], mpi_recv_reqs[3]); + } + // k-direction negative + if (neighbors_id[4] != -1) { + // send boundary layer to neighbor + isend_cr(bkn_s, n_grid_bound_k*n_ghost_layers, neighbors_id[4], mpi_send_reqs[4]); + // receive boundary layer from neighbor + irecv_cr(bkn_r, n_grid_bound_k*n_ghost_layers, neighbors_id[4], mpi_recv_reqs[4]); + } + // k-direction positive + if (neighbors_id[5] != -1) { + // send boundary layer to neighbor + isend_cr(bkp_s, n_grid_bound_k*n_ghost_layers, neighbors_id[5], mpi_send_reqs[5]); + // receive boundary layer from neighbor + irecv_cr(bkp_r, n_grid_bound_k*n_ghost_layers, neighbors_id[5], mpi_recv_reqs[5]); + } + + // wait for finishing communication + for (int i = 0; i < 6; i++) { + if (neighbors_id[i] != -1) { + wait_req(mpi_send_reqs[i]); + wait_req(mpi_recv_reqs[i]); + } + } + + assign_received_data_to_ghost_av(arr); + +} + + +void Grid::prepare_boundary_data_to_send_kosumi(CUSTOMREAL* arr) { + // ij nn + if (neighbors_id_ij[0] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + bij_nn_s[k-k_start_loc] = arr[I2V(i_start_loc,j_start_loc,k)]; + // ij np + if (neighbors_id_ij[1] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + bij_np_s[k-k_start_loc] = arr[I2V(i_start_loc,j_end_loc,k)]; + // ij pn + if (neighbors_id_ij[2] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + bij_pn_s[k-k_start_loc] = arr[I2V(i_end_loc,j_start_loc,k)]; + // ij pp + if (neighbors_id_ij[3] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + bij_pp_s[k-k_start_loc] = arr[I2V(i_end_loc,j_end_loc,k)]; + // jk nn + if (neighbors_id_jk[0] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + bjk_nn_s[i-i_start_loc] = arr[I2V(i,j_start_loc,k_start_loc)]; + // jk np + if (neighbors_id_jk[1] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + bjk_np_s[i-i_start_loc] = arr[I2V(i,j_start_loc,k_end_loc)]; + // jk pn + if (neighbors_id_jk[2] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + bjk_pn_s[i-i_start_loc] = arr[I2V(i,j_end_loc,k_start_loc)]; + // jk pp + if (neighbors_id_jk[3] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + bjk_pp_s[i-i_start_loc] = arr[I2V(i,j_end_loc,k_end_loc)]; + // ik nn + if (neighbors_id_ik[0] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + bik_nn_s[j-j_start_loc] = arr[I2V(i_start_loc,j,k_start_loc)]; + // ik np + if (neighbors_id_ik[1] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + bik_np_s[j-j_start_loc] = arr[I2V(i_start_loc,j,k_end_loc)]; + // ik pn + if (neighbors_id_ik[2] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + bik_pn_s[j-j_start_loc] = arr[I2V(i_end_loc,j,k_start_loc)]; + // ik pp + if (neighbors_id_ik[3] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + bik_pp_s[j-j_start_loc] = arr[I2V(i_end_loc,j,k_end_loc)]; + // ijk nnn + if (neighbors_id_ijk[0] != -1) + bijk_nnn_s[0] = arr[I2V(i_start_loc,j_start_loc,k_start_loc)]; + // ijk nnp + if (neighbors_id_ijk[1] != -1) + bijk_nnp_s[0] = arr[I2V(i_start_loc,j_start_loc,k_end_loc)]; + // ijk npn + if (neighbors_id_ijk[2] != -1) + bijk_npn_s[0] = arr[I2V(i_start_loc,j_end_loc,k_start_loc)]; + // ijk npp + if (neighbors_id_ijk[3] != -1) + bijk_npp_s[0] = arr[I2V(i_start_loc,j_end_loc,k_end_loc)]; + // ijk pnn + if (neighbors_id_ijk[4] != -1) + bijk_pnn_s[0] = arr[I2V(i_end_loc,j_start_loc,k_start_loc)]; + // ijk pnp + if (neighbors_id_ijk[5] != -1) + bijk_pnp_s[0] = arr[I2V(i_end_loc,j_start_loc,k_end_loc)]; + // ijk ppn + if (neighbors_id_ijk[6] != -1) + bijk_ppn_s[0] = arr[I2V(i_end_loc,j_end_loc,k_start_loc)]; + // ijk ppp + if (neighbors_id_ijk[7] != -1) + bijk_ppp_s[0] = arr[I2V(i_end_loc,j_end_loc,k_end_loc)]; +} + + +void Grid::assign_received_data_to_ghost_kosumi(CUSTOMREAL* arr) { + // ij nn + if (neighbors_id_ij[0] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + arr[I2V(i_start_loc-1,j_start_loc-1,k)] = bij_nn_r[k-k_start_loc]; + // ij np + if (neighbors_id_ij[1] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + arr[I2V(i_start_loc-1,j_end_vis,k)] = bij_np_r[k-k_start_loc]; + // ij pn + if (neighbors_id_ij[2] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + arr[I2V(i_end_vis,j_start_loc-1,k)] = bij_pn_r[k-k_start_loc]; + // ij pp + if (neighbors_id_ij[3] != -1) + for (int k = k_start_loc; k <= k_end_vis; k++) + arr[I2V(i_end_vis,j_end_loc+1,k)] = bij_pp_r[k-k_start_loc]; + // jk nn + if (neighbors_id_jk[0] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + arr[I2V(i,j_start_loc-1,k_start_loc-1)] = bjk_nn_r[i-i_start_loc]; + // jk np + if (neighbors_id_jk[1] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + arr[I2V(i,j_start_loc-1,k_end_vis)] = bjk_np_r[i-i_start_loc]; + // jk pn + if (neighbors_id_jk[2] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + arr[I2V(i,j_end_vis,k_start_loc-1)] = bjk_pn_r[i-i_start_loc]; + // jk pp + if (neighbors_id_jk[3] != -1) + for (int i = i_start_loc; i <= i_end_vis; i++) + arr[I2V(i,j_end_vis,k_end_vis)] = bjk_pp_r[i-i_start_loc]; + // ik nn + if (neighbors_id_ik[0] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + arr[I2V(i_start_loc-1,j,k_start_loc-1)] = bik_nn_r[j-j_start_loc]; + // ik np + if (neighbors_id_ik[1] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + arr[I2V(i_start_loc-1,j,k_end_vis)] = bik_np_r[j-j_start_loc]; + // ik pn + if (neighbors_id_ik[2] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + arr[I2V(i_end_vis,j,k_start_loc-1)] = bik_pn_r[j-j_start_loc]; + // ik pp + if (neighbors_id_ik[3] != -1) + for (int j = j_start_loc; j <= j_end_vis; j++) + arr[I2V(i_end_vis,j,k_end_vis)] = bik_pp_r[j-j_start_loc]; + // ijk nnn + if (neighbors_id_ijk[0] != -1) + arr[I2V(i_start_loc-1,j_start_loc-1,k_start_loc-1)] = bijk_nnn_r[0]; + // ijk nnp + if (neighbors_id_ijk[1] != -1) + arr[I2V(i_start_loc-1,j_start_loc-1,k_end_vis)] = bijk_nnp_r[0]; + // ijk npn + if (neighbors_id_ijk[2] != -1) + arr[I2V(i_start_loc-1,j_end_vis,k_start_loc-1)] = bijk_npn_r[0]; + // ijk npp + if (neighbors_id_ijk[3] != -1) + arr[I2V(i_start_loc-1,j_end_vis,k_end_vis)] = bijk_npp_r[0]; + // ijk pnn + if (neighbors_id_ijk[4] != -1) + arr[I2V(i_end_vis,j_start_loc-1,k_start_loc-1)] = bijk_pnn_r[0]; + // ijk pnp + if (neighbors_id_ijk[5] != -1) + arr[I2V(i_end_vis,j_start_loc-1,k_end_vis)] = bijk_pnp_r[0]; + // ijk ppn + if (neighbors_id_ijk[6] != -1) + arr[I2V(i_end_vis,j_end_vis,k_start_loc-1)] = bijk_ppn_r[0]; + // ijk ppp + if (neighbors_id_ijk[7] != -1) + arr[I2V(i_end_vis,j_end_vis,k_end_vis)] = bijk_ppp_r[0]; + +} + + +void Grid::send_recev_boundary_data_kosumi(CUSTOMREAL* arr){ + + prepare_boundary_data_to_send_kosumi(arr); + + // ij nn + if (neighbors_id_ij[0] != -1){ + // send boundary layer to neighbor + isend_cr(bij_nn_s, loc_K_vis, neighbors_id_ij[0], mpi_send_reqs_kosumi[0]); + // receive boundary layer from neighbor + irecv_cr(bij_nn_r, loc_K_vis, neighbors_id_ij[0], mpi_recv_reqs_kosumi[0]); + } + // ij np + if (neighbors_id_ij[1] != -1){ + // send boundary layer to neighbor + isend_cr(bij_np_s, loc_K_vis, neighbors_id_ij[1], mpi_send_reqs_kosumi[1]); + // receive boundary layer from neighbor + irecv_cr(bij_np_r, loc_K_vis, neighbors_id_ij[1], mpi_recv_reqs_kosumi[1]); + } + // ij pn + if (neighbors_id_ij[2] != -1){ + // send boundary layer to neighbor + isend_cr(bij_pn_s, loc_K_vis, neighbors_id_ij[2], mpi_send_reqs_kosumi[2]); + // receive boundary layer from neighbor + irecv_cr(bij_pn_r, loc_K_vis, neighbors_id_ij[2], mpi_recv_reqs_kosumi[2]); + } + // ij pp + if (neighbors_id_ij[3] != -1){ + // send boundary layer to neighbor + isend_cr(bij_pp_s, loc_K_vis, neighbors_id_ij[3], mpi_send_reqs_kosumi[3]); + // receive boundary layer from neighbor + irecv_cr(bij_pp_r, loc_K_vis, neighbors_id_ij[3], mpi_recv_reqs_kosumi[3]); + } + // jk nn + if (neighbors_id_jk[0] != -1){ + // send boundary layer to neighbor + isend_cr(bjk_nn_s, loc_I_vis, neighbors_id_jk[0], mpi_send_reqs_kosumi[4]); + // receive boundary layer from neighbor + irecv_cr(bjk_nn_r, loc_I_vis, neighbors_id_jk[0], mpi_recv_reqs_kosumi[4]); + } + // jk np + if (neighbors_id_jk[1] != -1){ + // send boundary layer to neighbor + isend_cr(bjk_np_s, loc_I_vis, neighbors_id_jk[1], mpi_send_reqs_kosumi[5]); + // receive boundary layer from neighbor + irecv_cr(bjk_np_r, loc_I_vis, neighbors_id_jk[1], mpi_recv_reqs_kosumi[5]); + } + // jk pn + if (neighbors_id_jk[2] != -1){ + // send boundary layer to neighbor + isend_cr(bjk_pn_s, loc_I_vis, neighbors_id_jk[2], mpi_send_reqs_kosumi[6]); + // receive boundary layer from neighbor + irecv_cr(bjk_pn_r, loc_I_vis, neighbors_id_jk[2], mpi_recv_reqs_kosumi[6]); + } + // jk pp + if (neighbors_id_jk[3] != -1){ + // send boundary layer to neighbor + isend_cr(bjk_pp_s, loc_I_vis, neighbors_id_jk[3], mpi_send_reqs_kosumi[7]); + // receive boundary layer from neighbor + irecv_cr(bjk_pp_r, loc_I_vis, neighbors_id_jk[3], mpi_recv_reqs_kosumi[7]); + } + // ik nn + if (neighbors_id_ik[0] != -1){ + // send boundary layer to neighbor + isend_cr(bik_nn_s, loc_J_vis, neighbors_id_ik[0], mpi_send_reqs_kosumi[8]); + // receive boundary layer from neighbor + irecv_cr(bik_nn_r, loc_J_vis, neighbors_id_ik[0], mpi_recv_reqs_kosumi[8]); + } + // ik np + if (neighbors_id_ik[1] != -1){ + // send boundary layer to neighbor + isend_cr(bik_np_s, loc_J_vis, neighbors_id_ik[1], mpi_send_reqs_kosumi[9]); + // receive boundary layer from neighbor + irecv_cr(bik_np_r, loc_J_vis, neighbors_id_ik[1], mpi_recv_reqs_kosumi[9]); + } + // ik pn + if (neighbors_id_ik[2] != -1){ + // send boundary layer to neighbor + isend_cr(bik_pn_s, loc_J_vis, neighbors_id_ik[2], mpi_send_reqs_kosumi[10]); + // receive boundary layer from neighbor + irecv_cr(bik_pn_r, loc_J_vis, neighbors_id_ik[2], mpi_recv_reqs_kosumi[10]); + } + // ik pp + if (neighbors_id_ik[3] != -1){ + // send boundary layer to neighbor + isend_cr(bik_pp_s, loc_J_vis, neighbors_id_ik[3], mpi_send_reqs_kosumi[11]); + // receive boundary layer from neighbor + irecv_cr(bik_pp_r, loc_J_vis, neighbors_id_ik[3], mpi_recv_reqs_kosumi[11]); + } + // ijk nnn + if (neighbors_id_ijk[0] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_nnn_s, 1, neighbors_id_ijk[0], mpi_send_reqs_kosumi[12]); + // receive boundary layer from neighbor + irecv_cr(bijk_nnn_r, 1, neighbors_id_ijk[0], mpi_recv_reqs_kosumi[12]); + } + // ijk nnp + if (neighbors_id_ijk[1] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_nnp_s, 1, neighbors_id_ijk[1], mpi_send_reqs_kosumi[13]); + // receive boundary layer from neighbor + irecv_cr(bijk_nnp_r, 1, neighbors_id_ijk[1], mpi_recv_reqs_kosumi[13]); + } + // ijk npn + if (neighbors_id_ijk[2] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_npn_s, 1, neighbors_id_ijk[2], mpi_send_reqs_kosumi[14]); + // receive boundary layer from neighbor + irecv_cr(bijk_npn_r, 1, neighbors_id_ijk[2], mpi_recv_reqs_kosumi[14]); + } + // ijk npp + if (neighbors_id_ijk[3] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_npp_s, 1, neighbors_id_ijk[3], mpi_send_reqs_kosumi[15]); + // receive boundary layer from neighbor + irecv_cr(bijk_npp_r, 1, neighbors_id_ijk[3], mpi_recv_reqs_kosumi[15]); + } + // ijk pnn + if (neighbors_id_ijk[4] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_pnn_s, 1, neighbors_id_ijk[4], mpi_send_reqs_kosumi[16]); + // receive boundary layer from neighbor + irecv_cr(bijk_pnn_r, 1, neighbors_id_ijk[4], mpi_recv_reqs_kosumi[16]); + } + // ijk pnp + if (neighbors_id_ijk[5] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_pnp_s, 1, neighbors_id_ijk[5], mpi_send_reqs_kosumi[17]); + // receive boundary layer from neighbor + irecv_cr(bijk_pnp_r, 1, neighbors_id_ijk[5], mpi_recv_reqs_kosumi[17]); + } + // ijk ppn + if (neighbors_id_ijk[6] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_ppn_s, 1, neighbors_id_ijk[6], mpi_send_reqs_kosumi[18]); + // receive boundary layer from neighbor + irecv_cr(bijk_ppn_r, 1, neighbors_id_ijk[6], mpi_recv_reqs_kosumi[18]); + } + // ijk ppp + if (neighbors_id_ijk[7] != -1){ + // send boundary layer to neighbor + isend_cr(bijk_ppp_s, 1, neighbors_id_ijk[7], mpi_send_reqs_kosumi[19]); + // receive boundary layer from neighbor + irecv_cr(bijk_ppp_r, 1, neighbors_id_ijk[7], mpi_recv_reqs_kosumi[19]); + } + + // wait for all communication to finish + // ij nn + if (neighbors_id_ij[0] != -1){ + wait_req(mpi_send_reqs_kosumi[0]); + wait_req(mpi_recv_reqs_kosumi[0]); + } + // ij np + if (neighbors_id_ij[1] != -1){ + wait_req(mpi_send_reqs_kosumi[1]); + wait_req(mpi_recv_reqs_kosumi[1]); + } + // ij pn + if (neighbors_id_ij[2] != -1){ + wait_req(mpi_send_reqs_kosumi[2]); + wait_req(mpi_recv_reqs_kosumi[2]); + } + // ij pp + if (neighbors_id_ij[3] != -1){ + wait_req(mpi_send_reqs_kosumi[3]); + wait_req(mpi_recv_reqs_kosumi[3]); + } + // jk nn + if (neighbors_id_jk[0] != -1){ + wait_req(mpi_send_reqs_kosumi[4]); + wait_req(mpi_recv_reqs_kosumi[4]); + } + // jk np + if (neighbors_id_jk[1] != -1){ + wait_req(mpi_send_reqs_kosumi[5]); + wait_req(mpi_recv_reqs_kosumi[5]); + } + // jk pn + if (neighbors_id_jk[2] != -1){ + wait_req(mpi_send_reqs_kosumi[6]); + wait_req(mpi_recv_reqs_kosumi[6]); + } + // jk pp + if (neighbors_id_jk[3] != -1){ + wait_req(mpi_send_reqs_kosumi[7]); + wait_req(mpi_recv_reqs_kosumi[7]); + } + // ik nn + if (neighbors_id_ik[0] != -1){ + wait_req(mpi_send_reqs_kosumi[8]); + wait_req(mpi_recv_reqs_kosumi[8]); + } + // ik np + if (neighbors_id_ik[1] != -1){ + wait_req(mpi_send_reqs_kosumi[9]); + wait_req(mpi_recv_reqs_kosumi[9]); + } + // ik pn + if (neighbors_id_ik[2] != -1){ + wait_req(mpi_send_reqs_kosumi[10]); + wait_req(mpi_recv_reqs_kosumi[10]); + } + // ik pp + if (neighbors_id_ik[3] != -1){ + wait_req(mpi_send_reqs_kosumi[11]); + wait_req(mpi_recv_reqs_kosumi[11]); + } + // ijk nnn + if (neighbors_id_ijk[0] != -1){ + wait_req(mpi_send_reqs_kosumi[12]); + wait_req(mpi_recv_reqs_kosumi[12]); + } + // ijk nnp + if (neighbors_id_ijk[1] != -1){ + wait_req(mpi_send_reqs_kosumi[13]); + wait_req(mpi_recv_reqs_kosumi[13]); + } + // ijk npn + if (neighbors_id_ijk[2] != -1){ + wait_req(mpi_send_reqs_kosumi[14]); + wait_req(mpi_recv_reqs_kosumi[14]); + } + // ijk npp + if (neighbors_id_ijk[3] != -1){ + wait_req(mpi_send_reqs_kosumi[15]); + wait_req(mpi_recv_reqs_kosumi[15]); + } + // ijk pnn + if (neighbors_id_ijk[4] != -1){ + wait_req(mpi_send_reqs_kosumi[16]); + wait_req(mpi_recv_reqs_kosumi[16]); + } + // ijk pnp + if (neighbors_id_ijk[5] != -1){ + wait_req(mpi_send_reqs_kosumi[17]); + wait_req(mpi_recv_reqs_kosumi[17]); + } + // ijk ppn + if (neighbors_id_ijk[6] != -1){ + wait_req(mpi_send_reqs_kosumi[18]); + wait_req(mpi_recv_reqs_kosumi[18]); + } + // ijk ppp + if (neighbors_id_ijk[7] != -1){ + wait_req(mpi_send_reqs_kosumi[19]); + wait_req(mpi_recv_reqs_kosumi[19]); + } + + assign_received_data_to_ghost_kosumi(arr); + +} + + +void Grid::calc_T_plus_tau() { + // calculate T_plus_tau + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + // T0*tau + T_loc[I2V(i_lon,j_lat,k_r)] = T0v_loc[I2V(i_lon,j_lat,k_r)] * tau_loc[I2V(i_lon,j_lat,k_r)]; + + } + } + } +} + + +void Grid::calc_residual() { + for (int k_r = 0; k_r < loc_K; k_r++) { + for (int j_lat = 0; j_lat < loc_J; j_lat++) { + for (int i_lon = 0; i_lon < loc_I; i_lon++) { + u_loc[I2V(i_lon,j_lat,k_r)] = u_loc[I2V(i_lon,j_lat,k_r)] - T_loc[I2V(i_lon,j_lat,k_r)]; + } + } + } +} + + diff --git a/src/input_params.cpp b/src/input_params.cpp new file mode 100644 index 0000000..95edd1e --- /dev/null +++ b/src/input_params.cpp @@ -0,0 +1,3291 @@ +#include "input_params.h" +#include +#include + +// Base case of the variadic template function +template +void getNodeValue(const YAML::Node& node, const std::string& key, T& value) { + if (node[key]) { + try { + value = node[key].as(); + } catch (const YAML::Exception& e) { + std::cout << "Error parsing YAML value for key: " << key << ". " << e.what() << std::endl; + } + } else { + std::cout << "Key not found in YAML: " << key << std::endl; + } +} + +// function overload for reading array +template +void getNodeValue(const YAML::Node& node, const std::string& key, T& value, const int index) { + if (node[key]) { + try { + value = node[key][index].as(); + } catch (const YAML::Exception& e) { + std::cout << "Error parsing YAML value for key: " << key << ". " << e.what() << std::endl; + } + } else { + std::cout << "Key not found in YAML: " << key << std::endl; + } +} + + +InputParams::InputParams(std::string& input_file){ + + if (world_rank == 0) { + // parse input files + YAML::Node config = YAML::LoadFile(input_file); + + // + // domain + // + if (config["domain"]) { + // minimum and maximum depth + getNodeValue(config["domain"], "min_max_dep", min_dep, 0); + getNodeValue(config["domain"], "min_max_dep", max_dep, 1); + // minimum and maximum latitude + if (config["domain"]["min_max_lat"]) { + getNodeValue(config["domain"], "min_max_lat", min_lat, 0); + getNodeValue(config["domain"], "min_max_lat", max_lat, 1); + } + // minimum and maximum longitude + if (config["domain"]["min_max_lon"]) { + getNodeValue(config["domain"], "min_max_lon", min_lon, 0); + getNodeValue(config["domain"], "min_max_lon", max_lon, 1); + } + // number of grid nodes on each axis r(dep), t(lat), p(lon) + if (config["domain"]["n_rtp"]) { + getNodeValue(config["domain"], "n_rtp", ngrid_k, 0); + getNodeValue(config["domain"], "n_rtp", ngrid_j, 1); + getNodeValue(config["domain"], "n_rtp", ngrid_i, 2); + } + } else { + std::cout << "domain is not defined. stop." << std::endl; + exit(1); + } + + // + // source + // + if (config["source"]) { + // src rec file + if (config["source"]["src_rec_file"]) { + src_rec_file_exist = true; + getNodeValue(config["source"], "src_rec_file", src_rec_file); + } else { + std::cout << "ERROR, tag src_rec_file is not included. Please check YAML file." << std::endl; + exit(1); + } + // swap src rec + if (config["source"]["swap_src_rec"]) { + getNodeValue(config["source"], "swap_src_rec", swap_src_rec); + } + } else { + std::cout << "source is not defined. stop." << std::endl; + exit(1); + } + + // + // model + // + if (config["model"]) { + // model file path + if (config["model"]["init_model_path"]) { + getNodeValue(config["model"], "init_model_path", init_model_path); + } else { + std::cout << "WARNING: tag init_model_path is not included. Please check YAML file." << std::endl; + } + // model file path + if (config["model"]["model_1d_name"]) { + getNodeValue(config["model"], "model_1d_name", model_1d_name); + } + } else { + std::cout << "model is not defined. stop." << std::endl; + exit(1); + } + + // + // parallel + // + if (config["parallel"]) { + // number of simultaneous runs + if(config["parallel"]["n_sims"]) { + getNodeValue(config["parallel"], "n_sims", n_sims); + } + // number of subdomains + if (config["parallel"]["ndiv_rtp"]) { + getNodeValue(config["parallel"], "ndiv_rtp", ndiv_k, 0); + getNodeValue(config["parallel"], "ndiv_rtp", ndiv_j, 1); + getNodeValue(config["parallel"], "ndiv_rtp", ndiv_i, 2); + } + // number of processes in each subdomain + if (config["parallel"]["nproc_sub"]) { + getNodeValue(config["parallel"], "nproc_sub", n_subprocs); + } + // gpu flag + if (config["parallel"]["use_gpu"]) { + getNodeValue(config["parallel"], "use_gpu", use_gpu); + } + } + + // + // output setting + // + if (config["output_setting"]) { + // output path + if (config["output_setting"]["output_dir"]) + getNodeValue(config["output_setting"], "output_dir", output_dir); + + if (config["output_setting"]["output_source_field"]) + getNodeValue(config["output_setting"], "output_source_field", output_source_field); + + if (config["output_setting"]["output_kernel"]) + getNodeValue(config["output_setting"], "output_kernel", output_kernel); + + if (config["output_setting"]["verbose_output_level"]){ + getNodeValue(config["output_setting"], "verbose_output_level", verbose_output_level); + // currently only 0 or 1 is defined + if (verbose_output_level > 1) { + std::cout << "undefined verbose_output_level. stop." << std::endl; + //MPI_Finalize(); + exit(1); + } + } + + if (config["output_setting"]["output_final_model"]) + getNodeValue(config["output_setting"], "output_final_model", output_final_model); + + if (config["output_setting"]["output_middle_model"]) + getNodeValue(config["output_setting"], "output_middle_model", output_middle_model); + + if (config["output_setting"]["output_in_process"]) + getNodeValue(config["output_setting"], "output_in_process", output_in_process); + + if (config["output_setting"]["output_in_process_data"]) + getNodeValue(config["output_setting"], "output_in_process_data", output_in_process_data); + + if (config["output_setting"]["single_precision_output"]) + getNodeValue(config["output_setting"], "single_precision_output", single_precision_output); + + // output file format + if (config["output_setting"]["output_file_format"]) { + int ff_flag; + getNodeValue(config["output_setting"], "output_file_format", ff_flag); + if (ff_flag == 0){ + #if USE_HDF5 + output_format = OUTPUT_FORMAT_HDF5; + #else + std::cout << "output_file_format is 0, but the code is compiled without HDF5. stop." << std::endl; + //MPI_Finalize(); + exit(1); + #endif + } else if (ff_flag == 1){ + output_format = OUTPUT_FORMAT_ASCII; + } else { + std::cout << "undefined output_file_format. stop." << std::endl; + //MPI_Finalize(); + exit(1); + } + } + } + + // + // run mode + // + if (config["run_mode"]) { + getNodeValue(config, "run_mode", run_mode); + if (run_mode > 4) { + std::cout << "undefined run_mode. stop." << std::endl; + //MPI_Finalize(); + exit(1); + } + } + + if (config["have_tele_data"]) { + getNodeValue(config, "have_tele_data", have_tele_data); + } + + if (config["ignore_velocity_discontinuity"]) { + getNodeValue(config, "ignore_velocity_discontinuity", ignore_velocity_discontinuity); + } + + // + // model update + // + if (config["model_update"]) { + // number of max iteration for inversion + if (config["model_update"]["max_iterations"]) { + getNodeValue(config["model_update"], "max_iterations", max_iter_inv); + } + // optim_method + if (config["model_update"]["optim_method"]) { + getNodeValue(config["model_update"], "optim_method", optim_method); + if (optim_method > 2) { + std::cout << "undefined optim_method. stop." << std::endl; + //MPI_Finalize(); + exit(1); + } + } + // step_length + if (config["model_update"]["step_length"]) { + getNodeValue(config["model_update"], "step_length", step_length_init); + } + + // parameters for optim_method == 0 + if (optim_method == 0) { + // step method + if (config["model_update"]["optim_method_0"]["step_method"]) { + getNodeValue(config["model_update"]["optim_method_0"], "step_method", step_method); + } + // step length decay + if (config["model_update"]["optim_method_0"]["step_length_decay"]) { + getNodeValue(config["model_update"]["optim_method_0"], "step_length_decay", step_length_decay); + } + if (config["model_update"]["optim_method_0"]["step_length_gradient_angle"]) { + getNodeValue(config["model_update"]["optim_method_0"], "step_length_gradient_angle", step_length_gradient_angle); + } + if (config["model_update"]["optim_method_0"]["step_length_change"]) { + getNodeValue(config["model_update"]["optim_method_0"], "step_length_change", step_length_down,0); + getNodeValue(config["model_update"]["optim_method_0"], "step_length_change", step_length_up,1); + } + if (config["model_update"]["optim_method_0"]["Kdensity_coe"]) { + getNodeValue(config["model_update"]["optim_method_0"], "Kdensity_coe", Kdensity_coe); + if (Kdensity_coe < 0.0){ + Kdensity_coe = 0.0; + std::cout << std::endl; + std::cout << "Kdensity_coe: " << Kdensity_coe << " is out of range, which is set to be 0.0 in the inversion." << std::endl; + std::cout << std::endl; + } + if (Kdensity_coe > 0.95){ + Kdensity_coe = 0.95; + std::cout << std::endl; + std::cout << "Kdensity_coe: " << Kdensity_coe << " is out of range, which is set to be 0.95 in the inversion." << std::endl; + std::cout << std::endl; + } + } + } + + // parameters for optim_method == 1 or 2 + if (optim_method == 1 || optim_method == 2) { + // max_sub_iterations + if (config["model_update"]["optim_method_1_2"]["max_sub_iterations"]) { + getNodeValue(config["model_update"]["optim_method_1_2"], "max_sub_iterations", max_sub_iterations); + } + // regularization weight + if (config["model_update"]["optim_method_1_2"]["regularization_weight"]) { + getNodeValue(config["model_update"]["optim_method_1_2"], "regularization_weight", regularization_weight); + } + // regularization laplacian weights + if (config["model_update"]["optim_method_1_2"]["coefs_regulalization_rtp"]) { + getNodeValue(config["model_update"]["optim_method_1_2"], "coefs_regulalization_rtp", regul_lr, 0); + getNodeValue(config["model_update"]["optim_method_1_2"], "coefs_regulalization_rtp", regul_lt, 1); + getNodeValue(config["model_update"]["optim_method_1_2"], "coefs_regulalization_rtp", regul_lp, 2); + + // convert degree to radian + regul_lt = regul_lt * DEG2RAD; + regul_lp = regul_lp * DEG2RAD; + } + } + + // smoothing + if (config["model_update"]["smoothing"]["smooth_method"]) { + getNodeValue(config["model_update"]["smoothing"], "smooth_method", smooth_method); + if (smooth_method > 1) { + std::cout << "undefined smooth_method. stop." << std::endl; + MPI_Finalize(); + exit(1); + } + } + // l_smooth_rtp + if (config["model_update"]["smoothing"]["l_smooth_rtp"]) { + getNodeValue(config["model_update"]["smoothing"], "l_smooth_rtp", smooth_lr, 0); + getNodeValue(config["model_update"]["smoothing"], "l_smooth_rtp", smooth_lt, 1); + getNodeValue(config["model_update"]["smoothing"], "l_smooth_rtp", smooth_lp, 2); + + // convert degree to radian + smooth_lt = smooth_lt * DEG2RAD; + smooth_lp = smooth_lp * DEG2RAD; + } + // n_inversion_grid + if (config["model_update"]["n_inversion_grid"]) { + getNodeValue(config["model_update"], "n_inversion_grid", n_inversion_grid); + } + + // auto inversion grid + if (config["model_update"]["uniform_inv_grid_dep"]) { + getNodeValue(config["model_update"], "uniform_inv_grid_dep", uniform_inv_grid_dep); + } + if (config["model_update"]["uniform_inv_grid_lat"]) { + getNodeValue(config["model_update"], "uniform_inv_grid_lat", uniform_inv_grid_lat); + } + if (config["model_update"]["uniform_inv_grid_lon"]) { + getNodeValue(config["model_update"], "uniform_inv_grid_lon", uniform_inv_grid_lon); + } + + // number of inversion grid for regular grid + if (config["model_update"]["n_inv_dep_lat_lon"]) { + getNodeValue(config["model_update"], "n_inv_dep_lat_lon", n_inv_r, 0); + getNodeValue(config["model_update"], "n_inv_dep_lat_lon", n_inv_t, 1); + getNodeValue(config["model_update"], "n_inv_dep_lat_lon", n_inv_p, 2); + } + + // inversion grid positions + if (config["model_update"]["min_max_dep_inv"]) { + getNodeValue(config["model_update"], "min_max_dep_inv", min_dep_inv, 0); + getNodeValue(config["model_update"], "min_max_dep_inv", max_dep_inv, 1); + } + // minimum and maximum latitude + if (config["model_update"]["min_max_lat_inv"]) { + getNodeValue(config["model_update"], "min_max_lat_inv", min_lat_inv, 0); + getNodeValue(config["model_update"], "min_max_lat_inv", max_lat_inv, 1); + } + // minimum and maximum longitude + if (config["model_update"]["min_max_lon_inv"]) { + getNodeValue(config["model_update"], "min_max_lon_inv", min_lon_inv, 0); + getNodeValue(config["model_update"], "min_max_lon_inv", max_lon_inv, 1); + } + + + // flexible inversion grid for velocity + if (config["model_update"]["dep_inv"]){ + n_inv_r_flex = config["model_update"]["dep_inv"].size(); + dep_inv = allocateMemory(n_inv_r_flex, 5000); + for (int i = 0; i < n_inv_r_flex; i++){ + getNodeValue(config["model_update"], "dep_inv", dep_inv[i], i); + } + } else { + if (!uniform_inv_grid_dep){ + std::cout << "dep_inv is not defined. stop." << std::endl; + exit(1); + } + } + if (config["model_update"]["lat_inv"]) { + n_inv_t_flex = config["model_update"]["lat_inv"].size(); + lat_inv = allocateMemory(n_inv_t_flex, 5001); + for (int i = 0; i < n_inv_t_flex; i++){ + getNodeValue(config["model_update"], "lat_inv", lat_inv[i], i); + } + } else { + if (!uniform_inv_grid_lat){ + std::cout << "lat_inv is not defined. stop." << std::endl; + exit(1); + } + } + if (config["model_update"]["lon_inv"]) { + n_inv_p_flex = config["model_update"]["lon_inv"].size(); + lon_inv = allocateMemory(n_inv_p_flex, 5002); + for (int i = 0; i < n_inv_p_flex; i++){ + getNodeValue(config["model_update"], "lon_inv", lon_inv[i], i); + } + } else { + if (!uniform_inv_grid_lon){ + std::cout << "lon_inv is not defined. stop." << std::endl; + exit(1); + } + } + if (config["model_update"]["trapezoid"]) { + for (int i = 0; i < n_trapezoid; i++){ + getNodeValue(config["model_update"], "trapezoid", trapezoid[i], i); + } + } + + // inversion grid for anisotropy + if (config["model_update"]["invgrid_ani"]) { + getNodeValue(config["model_update"], "invgrid_ani", invgrid_ani); + } + + if (config["model_update"]["n_inv_dep_lat_lon_ani"]) { + getNodeValue(config["model_update"], "n_inv_dep_lat_lon_ani", n_inv_r_ani, 0); + getNodeValue(config["model_update"], "n_inv_dep_lat_lon_ani", n_inv_t_ani, 1); + getNodeValue(config["model_update"], "n_inv_dep_lat_lon_ani", n_inv_p_ani, 2); + } + + if (config["model_update"]["min_max_dep_inv_ani"]) { + getNodeValue(config["model_update"], "min_max_dep_inv_ani", min_dep_inv_ani, 0); + getNodeValue(config["model_update"], "min_max_dep_inv_ani", max_dep_inv_ani, 1); + } + + if (config["model_update"]["min_max_lat_inv_ani"]) { + getNodeValue(config["model_update"], "min_max_lat_inv_ani", min_lat_inv_ani, 0); + getNodeValue(config["model_update"], "min_max_lat_inv_ani", max_lat_inv_ani, 1); + } + + if (config["model_update"]["min_max_lon_inv_ani"]) { + getNodeValue(config["model_update"], "min_max_lon_inv_ani", min_lon_inv_ani, 0); + getNodeValue(config["model_update"], "min_max_lon_inv_ani", max_lon_inv_ani, 1); + } + + // flexible inversion grid for anisotropy + if (config["model_update"]["dep_inv_ani"]) { + n_inv_r_flex_ani = config["model_update"]["dep_inv_ani"].size(); + dep_inv_ani = allocateMemory(n_inv_r_flex_ani, 5003); + for (int i = 0; i < n_inv_r_flex_ani; i++){ + getNodeValue(config["model_update"], "dep_inv_ani", dep_inv_ani[i], i); + } + } + + if (config["model_update"]["lat_inv_ani"]) { + n_inv_t_flex_ani = config["model_update"]["lat_inv_ani"].size(); + lat_inv_ani = allocateMemory(n_inv_t_flex_ani, 5004); + for (int i = 0; i < n_inv_t_flex_ani; i++){ + getNodeValue(config["model_update"], "lat_inv_ani", lat_inv_ani[i], i); + } + } + if (config["model_update"]["lon_inv_ani"]) { + n_inv_p_flex_ani = config["model_update"]["lon_inv_ani"].size(); + lon_inv_ani = allocateMemory(n_inv_p_flex_ani, 5005); + for (int i = 0; i < n_inv_p_flex_ani; i++){ + getNodeValue(config["model_update"], "lon_inv_ani", lon_inv_ani[i], i); + } + } + if (config["model_update"]["trapezoid_ani"]) { + for (int i = 0; i < n_trapezoid; i++){ + getNodeValue(config["model_update"], "trapezoid_ani", trapezoid_ani[i], i); + } + } + + setup_uniform_inv_grid(); + + // if (config["model_update"]["invgrid_volume_rescale"]) { + // getNodeValue(config["model_update"], "invgrid_volume_rescale", invgrid_volume_rescale); + // } + + // station correction (now only for teleseismic data) + if (config["model_update"]["use_sta_correction"]){ + getNodeValue(config["model_update"], "use_sta_correction", use_sta_correction); + } + // sta_correction_file + if (config["model_update"]["initial_sta_correction_file"]) { + getNodeValue(config["model_update"], "initial_sta_correction_file", sta_correction_file); + if (use_sta_correction) { + sta_correction_file_exist = true; + } + } + + // date usage flags and weights + // absolute travel times + if (config["model_update"]["abs_time"]) { + getNodeValue(config["model_update"]["abs_time"], "use_abs_time", use_abs); + if (config["model_update"]["abs_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["abs_time"], "residual_weight", residual_weight_abs[i], i); + } + if (config["model_update"]["abs_time"]["distance_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["abs_time"], "distance_weight", distance_weight_abs[i], i); + } + } + + // common source diff travel times + if (config["model_update"]["cs_dif_time"]) { + getNodeValue(config["model_update"]["cs_dif_time"], "use_cs_time", use_cs); + if (config["model_update"]["cs_dif_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["cs_dif_time"], "residual_weight", residual_weight_cs[i], i); + } + if (config["model_update"]["cs_dif_time"]["azimuthal_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["cs_dif_time"], "azimuthal_weight", azimuthal_weight_cs[i], i); + } + } + + // common reciever diff travel times + if (config["model_update"]["cr_dif_time"]) { + getNodeValue(config["model_update"]["cr_dif_time"], "use_cr_time", use_cr); + if (config["model_update"]["cr_dif_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["cr_dif_time"], "residual_weight", residual_weight_cr[i], i); + } + if (config["model_update"]["cr_dif_time"]["azimuthal_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["model_update"]["cr_dif_time"], "azimuthal_weight", azimuthal_weight_cr[i], i); + } + } + + // weight of different types of data + if (config["model_update"]["global_weight"]){ + if (config["model_update"]["global_weight"]["balance_data_weight"]) { + getNodeValue(config["model_update"]["global_weight"], "balance_data_weight", balance_data_weight); + } + if (config["model_update"]["global_weight"]["abs_time_weight"]) { + getNodeValue(config["model_update"]["global_weight"], "abs_time_weight", abs_time_local_weight); + } + if (config["model_update"]["global_weight"]["cs_dif_time_local_weight"]) { + getNodeValue(config["model_update"]["global_weight"], "cs_dif_time_local_weight", cs_dif_time_local_weight); + } + if (config["model_update"]["global_weight"]["cr_dif_time_local_weight"]) { + getNodeValue(config["model_update"]["global_weight"], "cr_dif_time_local_weight", cr_dif_time_local_weight); + } + if (config["model_update"]["global_weight"]["teleseismic_weight"]) { + getNodeValue(config["model_update"]["global_weight"], "teleseismic_weight", teleseismic_weight); + } + } + + // update which model parameters + if (config["model_update"]["update_slowness"]) + getNodeValue(config["model_update"], "update_slowness", update_slowness); + if (config["model_update"]["update_azi_ani"]) + getNodeValue(config["model_update"], "update_azi_ani", update_azi_ani); + if (config["model_udpate"]["update_rad_ani"]) + getNodeValue(config["model_update"], "update_rad_ani", update_rad_ani); + + // taper kernel (now only for teleseismic tomography) + if (config["model_update"]["depth_taper"]){ + getNodeValue(config["model_update"], "depth_taper", depth_taper[0], 0); + getNodeValue(config["model_update"], "depth_taper", depth_taper[1], 1); + } + + // station correction (now only for teleseismic data) + if (config["model_update"]["use_sta_correction"]){ + getNodeValue(config["model_update"], "use_sta_correction", use_sta_correction); + } + + // station correction step length + if (config["model_update"]["step_length_sta_correction"]){ + getNodeValue(config["model_update"], "step_length_sta_correction", step_length_init_sc); + } + } // end of model_update + + // + // relocatoin + // + if (config["relocation"]) { + // the minimum number of data for relocation + if (config["relocation"]["min_Ndata"]) { + getNodeValue(config["relocation"], "min_Ndata", min_Ndata_reloc); + } + + // step size of relocation + if (config["relocation"]["step_length"]) { + getNodeValue(config["relocation"], "step_length", step_length_src_reloc); + } + // step size decay of relocation + if (config["relocation"]["step_length_decay"]) { + getNodeValue(config["relocation"], "step_length_decay", step_length_decay_src_reloc); + } + // rescaling values + if (config["relocation"]["rescaling_dep_lat_lon_ortime"]){ + getNodeValue(config["relocation"], "rescaling_dep_lat_lon_ortime", rescaling_dep, 0); + getNodeValue(config["relocation"], "rescaling_dep_lat_lon_ortime", rescaling_lat, 1); + getNodeValue(config["relocation"], "rescaling_dep_lat_lon_ortime", rescaling_lon, 2); + getNodeValue(config["relocation"], "rescaling_dep_lat_lon_ortime", rescaling_ortime, 3); + } + // max change values + if (config["relocation"]["max_change_dep_lat_lon_ortime"]) { + getNodeValue(config["relocation"], "max_change_dep_lat_lon_ortime", max_change_dep, 0); + getNodeValue(config["relocation"], "max_change_dep_lat_lon_ortime", max_change_lat, 1); + getNodeValue(config["relocation"], "max_change_dep_lat_lon_ortime", max_change_lon, 2); + getNodeValue(config["relocation"], "max_change_dep_lat_lon_ortime", max_change_ortime, 3); + } + // max iteration for relocation + if (config["relocation"]["max_iterations"]) { + getNodeValue(config["relocation"], "max_iterations", N_ITER_MAX_SRC_RELOC); + } + // norm(grad) threshold of stopping relocation + if (config["relocation"]["tol_gradient"]) { + getNodeValue(config["relocation"], "tol_gradient", TOL_SRC_RELOC); + } + // data usage + if (config["relocation"]["abs_time"]) { + getNodeValue(config["relocation"]["abs_time"], "use_abs_time", use_abs_reloc); + if (config["relocation"]["abs_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["abs_time"], "residual_weight", residual_weight_abs_reloc[i], i); + } + if (config["relocation"]["abs_time"]["distance_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["abs_time"], "distance_weight", distance_weight_abs_reloc[i], i); + } + } + if (config["relocation"]["cs_dif_time"]){ + getNodeValue(config["relocation"]["cs_dif_time"], "use_cs_time", use_cs_reloc); + if (config["relocation"]["cs_dif_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["cs_dif_time"], "residual_weight", residual_weight_cs_reloc[i], i); + } + if (config["relocation"]["cs_dif_time"]["azimuthal_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["cs_dif_time"], "azimuthal_weight", azimuthal_weight_cs_reloc[i], i); + } + } + if (config["relocation"]["cr_dif_time"]){ + getNodeValue(config["relocation"]["cr_dif_time"], "use_cr_time", use_cr_reloc); + if (config["relocation"]["cr_dif_time"]["residual_weight"]){ + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["cr_dif_time"], "residual_weight", residual_weight_cr_reloc[i], i); + } + if (config["relocation"]["cr_dif_time"]["azimuthal_weight"]) { + for (int i = 0; i < n_weight; i++) + getNodeValue(config["relocation"]["cr_dif_time"], "azimuthal_weight", azimuthal_weight_cr_reloc[i], i); + } + } + // weight of different types of data + if (config["relocation"]["global_weight"]){ + if (config["relocation"]["global_weight"]["balance_data_weight"]) { + getNodeValue(config["relocation"]["global_weight"], "balance_data_weight", balance_data_weight_reloc); + } + if (config["relocation"]["global_weight"]["abs_time_weight"]) { + getNodeValue(config["relocation"]["global_weight"], "abs_time_weight", abs_time_local_weight_reloc); + } + if (config["relocation"]["global_weight"]["cs_dif_time_local_weight"]) { + getNodeValue(config["relocation"]["global_weight"], "cs_dif_time_local_weight", cs_dif_time_local_weight_reloc); + } + if (config["relocation"]["global_weight"]["cr_dif_time_local_weight"]) { + getNodeValue(config["relocation"]["global_weight"], "cr_dif_time_local_weight", cr_dif_time_local_weight_reloc); + } + } + } // end of relocation + + // + // inversion strategy + // + if (config["inversion_strategy"]) { + // inversion mode, 0: for update model parameters and relocation iteratively + if (config["inversion_strategy"]["inv_mode"]) + getNodeValue(config["inversion_strategy"], "inv_mode", inv_mode); + + // paramters for inv_mode == 0 + if (config["inversion_strategy"]["inv_mode_0"]){ + // model_update_N_iter + if (config["inversion_strategy"]["inv_mode_0"]["model_update_N_iter"]) + getNodeValue(config["inversion_strategy"]["inv_mode_0"], "model_update_N_iter", model_update_N_iter); + // relocation_N_iter + if (config["inversion_strategy"]["inv_mode_0"]["relocation_N_iter"]) + getNodeValue(config["inversion_strategy"]["inv_mode_0"], "relocation_N_iter", relocation_N_iter); + // max_loop + if (config["inversion_strategy"]["inv_mode_0"]["max_loop"]) + getNodeValue(config["inversion_strategy"]["inv_mode_0"], "max_loop", max_loop_mode0); + } + + // paramters for inv_mode == 1 + if (config["inversion_strategy"]["inv_mode_1"]){ + // max_loop + if (config["inversion_strategy"]["inv_mode_1"]["max_loop"]) + getNodeValue(config["inversion_strategy"]["inv_mode_1"], "max_loop", max_loop_mode1); + } + } + + // + // calculation + // + if (config["calculation"]) { + // convergence tolerance + if (config["calculation"]["convergence_tolerance"]) { + getNodeValue(config["calculation"], "convergence_tolerance", conv_tol); + } + // max number of iterations + if (config["calculation"]["max_iterations"]) { + getNodeValue(config["calculation"], "max_iterations", max_iter); + } + // stencil order + if (config["calculation"]["stencil_order"]) { + getNodeValue(config["calculation"], "stencil_order", stencil_order); + // check if stencil_order == 999 : hybrid scheme + if (stencil_order == 999) { + hybrid_stencil_order = true; + stencil_order = 1; + } + } + // stencil type + if (config["calculation"]["stencil_type"]) { + getNodeValue(config["calculation"], "stencil_type", stencil_type); + } + // sweep type + if (config["calculation"]["sweep_type"]) { + getNodeValue(config["calculation"], "sweep_type", sweep_type); + } + } + + if (config["debug"]) { + if (config["debug"]["debug_mode"]) { + getNodeValue(config["debug"], "debug_mode", if_test); + } + } + + + std::cout << "min_max_dep: " << min_dep << " " << max_dep << std::endl; + std::cout << "min_max_lat: " << min_lat << " " << max_lat << std::endl; + std::cout << "min_max_lon: " << min_lon << " " << max_lon << std::endl; + std::cout << "n_rtp: " << ngrid_k << " " << ngrid_j << " " << ngrid_i << std::endl; + std::cout << "ndiv_rtp: " << ndiv_k << " " << ndiv_j << " " << ndiv_i << std::endl; + std::cout << "n_subprocs: " << n_subprocs << std::endl; + std::cout << "n_sims: " << n_sims << std::endl; + + } + + stdout_by_rank_zero("parameter file read done."); + + synchronize_all_world(); + + // broadcast all the values read + broadcast_cr_single(min_dep, 0); + broadcast_cr_single(max_dep, 0); + broadcast_cr_single(min_lat, 0); + broadcast_cr_single(max_lat, 0); + broadcast_cr_single(min_lon, 0); + broadcast_cr_single(max_lon, 0); + + broadcast_i_single(ngrid_i, 0); + broadcast_i_single(ngrid_j, 0); + broadcast_i_single(ngrid_k, 0); + + broadcast_cr_single(src_dep, 0); + broadcast_cr_single(src_lat, 0); + broadcast_cr_single(src_lon, 0); + + broadcast_bool_single(src_rec_file_exist, 0); + + // This have to be done only after broadcast src_rec_file_exist + if (src_rec_file_exist == false){ + SrcRecInfo src; + src.id = 0; + src.name = "s0"; + src.lat = src_lat; + src.lon = src_lon; + src.dep = src_dep; + src_map[src.name] = src; + SrcRecInfo rec; + rec.id = 0; + rec.name = "r0"; + rec_map[rec.name] = rec; + DataInfo data; + data_map[src.name][rec.name].push_back(data); + } + + broadcast_str(src_rec_file, 0); + broadcast_bool_single(swap_src_rec, 0); + + + broadcast_str(init_model_path, 0); + broadcast_str(model_1d_name, 0); + + broadcast_i_single(n_sims, 0); + broadcast_i_single(ndiv_i, 0); + broadcast_i_single(ndiv_j, 0); + broadcast_i_single(ndiv_k, 0); + broadcast_i_single(n_subprocs, 0); + broadcast_bool_single(use_gpu, 0); + + broadcast_str(output_dir, 0); + broadcast_bool_single(output_source_field, 0); + broadcast_bool_single(output_kernel, 0); + broadcast_i_single(verbose_output_level, 0); + broadcast_bool_single(output_final_model, 0); + broadcast_bool_single(output_middle_model, 0); + broadcast_bool_single(output_in_process, 0); + broadcast_bool_single(output_in_process_data, 0); + broadcast_bool_single(single_precision_output, 0); + broadcast_i_single(output_format, 0); + + broadcast_i_single(run_mode, 0); + broadcast_bool_single(have_tele_data, 0); + broadcast_bool_single(ignore_velocity_discontinuity, 0); + + broadcast_i_single(max_iter_inv, 0); + broadcast_i_single(optim_method, 0); + broadcast_i_single(step_method, 0); + broadcast_cr_single(step_length_init, 0); + broadcast_cr_single(step_length_decay, 0); + broadcast_cr_single(step_length_gradient_angle, 0); + broadcast_cr_single(step_length_down, 0); + broadcast_cr_single(step_length_up, 0); + broadcast_cr_single(Kdensity_coe, 0); + broadcast_i_single(max_sub_iterations, 0); + broadcast_cr_single(regularization_weight, 0); + broadcast_cr_single(regul_lr, 0); + broadcast_cr_single(regul_lt, 0); + broadcast_cr_single(regul_lp, 0); + broadcast_i_single(smooth_method, 0); + broadcast_cr_single(smooth_lr, 0); + broadcast_cr_single(smooth_lt, 0); + broadcast_cr_single(smooth_lp, 0); + + broadcast_i_single(n_inversion_grid, 0); + + broadcast_bool_single(uniform_inv_grid_dep, 0); + broadcast_bool_single(uniform_inv_grid_lon, 0); + broadcast_bool_single(uniform_inv_grid_lat, 0); + + broadcast_i_single(n_inv_r_flex, 0); + broadcast_i_single(n_inv_t_flex, 0); + broadcast_i_single(n_inv_p_flex, 0); + + broadcast_i_single(n_inv_r_flex_ani, 0); + broadcast_i_single(n_inv_t_flex_ani, 0); + broadcast_i_single(n_inv_p_flex_ani, 0); + + if (world_rank != 0) { + dep_inv = allocateMemory(n_inv_r_flex, 5012); + lat_inv = allocateMemory(n_inv_t_flex, 5013); + lon_inv = allocateMemory(n_inv_p_flex, 5014); + dep_inv_ani = allocateMemory(n_inv_r_flex_ani, 5015); + lat_inv_ani = allocateMemory(n_inv_t_flex_ani, 5016); + lon_inv_ani = allocateMemory(n_inv_p_flex_ani, 5017); + } + broadcast_cr(dep_inv,n_inv_r_flex, 0); + broadcast_cr(lat_inv,n_inv_t_flex, 0); + broadcast_cr(lon_inv,n_inv_p_flex, 0); + broadcast_cr(trapezoid,n_trapezoid, 0); + broadcast_cr(dep_inv_ani,n_inv_r_flex_ani, 0); + broadcast_cr(lat_inv_ani,n_inv_t_flex_ani, 0); + broadcast_cr(lon_inv_ani,n_inv_p_flex_ani, 0); + broadcast_cr(trapezoid_ani,n_trapezoid, 0); + + broadcast_bool_single(invgrid_ani, 0); + // broadcast_bool_single(invgrid_volume_rescale, 0); + + broadcast_bool_single(use_sta_correction, 0); + broadcast_cr_single(step_length_init_sc, 0); + broadcast_bool_single(sta_correction_file_exist, 0); + broadcast_str(sta_correction_file, 0); + + broadcast_bool_single(use_abs, 0); + broadcast_cr(residual_weight_abs, n_weight, 0); + broadcast_cr(distance_weight_abs, n_weight, 0); + broadcast_bool_single(use_cs, 0); + broadcast_cr(residual_weight_cs, n_weight, 0); + broadcast_cr(azimuthal_weight_cs, n_weight, 0); + broadcast_bool_single(use_cr, 0); + broadcast_cr(residual_weight_cr, n_weight, 0); + broadcast_cr(azimuthal_weight_cr, n_weight, 0); + + broadcast_bool_single(balance_data_weight, 0); + broadcast_cr_single(abs_time_local_weight, 0); + broadcast_cr_single(cs_dif_time_local_weight, 0); + broadcast_cr_single(cr_dif_time_local_weight, 0); + broadcast_cr_single(teleseismic_weight, 0); + + broadcast_bool_single(update_slowness, 0); + broadcast_bool_single(update_azi_ani, 0); + broadcast_bool_single(update_rad_ani, 0); + broadcast_cr(depth_taper,2,0); + + broadcast_i_single(min_Ndata_reloc, 0); + broadcast_cr_single(step_length_src_reloc, 0); + broadcast_cr_single(step_length_decay_src_reloc, 0); + broadcast_cr_single(rescaling_dep, 0); + broadcast_cr_single(rescaling_lat, 0); + broadcast_cr_single(rescaling_lon, 0); + broadcast_cr_single(rescaling_ortime, 0); + broadcast_cr_single(max_change_dep, 0); + broadcast_cr_single(max_change_lat, 0); + broadcast_cr_single(max_change_lon, 0); + broadcast_cr_single(max_change_ortime, 0); + broadcast_i_single(N_ITER_MAX_SRC_RELOC, 0); + broadcast_cr_single(TOL_SRC_RELOC, 0); + broadcast_bool_single(ortime_local_search, 0); + + broadcast_bool_single(use_abs_reloc, 0); + broadcast_cr(residual_weight_abs_reloc, n_weight, 0); + broadcast_cr(distance_weight_abs_reloc, n_weight, 0); + broadcast_bool_single(use_cs_reloc, 0); + broadcast_cr(residual_weight_cs_reloc, n_weight, 0); + broadcast_cr(azimuthal_weight_cs_reloc, n_weight, 0); + broadcast_bool_single(use_cr_reloc, 0); + broadcast_cr(residual_weight_cr_reloc, n_weight, 0); + broadcast_cr(azimuthal_weight_cr_reloc, n_weight, 0); + + broadcast_bool_single(balance_data_weight_reloc, 0); + broadcast_cr_single(abs_time_local_weight_reloc, 0); + broadcast_cr_single(cs_dif_time_local_weight_reloc, 0); + broadcast_cr_single(cr_dif_time_local_weight_reloc, 0); + + broadcast_i_single(inv_mode, 0); + broadcast_i_single(model_update_N_iter, 0); + broadcast_i_single(relocation_N_iter, 0); + broadcast_i_single(max_loop_mode0, 0); + broadcast_i_single(max_loop_mode1, 0); + + broadcast_cr_single(conv_tol, 0); + broadcast_i_single(max_iter, 0); + broadcast_i_single(stencil_order, 0); + broadcast_bool_single(hybrid_stencil_order, 0); + broadcast_i_single(stencil_type, 0); + broadcast_i_single(sweep_type, 0); + broadcast_bool_single(if_test, 0); + + // check contradictory settings + check_contradictions(); + + // write parameter file to output directory + if (world_rank == 0) + write_params_to_file(); + + // broadcast the values to all processes + stdout_by_rank_zero("read input file successfully."); + +} + + +InputParams::~InputParams(){ + // free memory + + // check allocated memory + if (dep_inv != nullptr) delete [] dep_inv; + if (lat_inv != nullptr) delete [] lat_inv; + if (lon_inv != nullptr) delete [] lon_inv; + + if (dep_inv_ani != nullptr) delete [] dep_inv_ani; + if (lat_inv_ani != nullptr) delete [] lat_inv_ani; + if (lon_inv_ani != nullptr) delete [] lon_inv_ani; + + // clear all src, rec, data + src_map.clear(); + src_map_tele.clear(); + src_map_all.clear(); + src_map_back.clear(); + src_map_tele.clear(); + rec_map.clear(); + rec_map_tele.clear(); + rec_map_all.clear(); + rec_map_back.clear(); + data_map.clear(); + data_map_tele.clear(); + data_map_all.clear(); + data_map_back.clear(); +} + + +void InputParams::write_params_to_file() { + // write all the simulation parameters in another yaml file + std::string file_name = "params_log.yaml"; + std::ofstream fout(file_name); + // print boolean as string + fout << std::boolalpha; + + fout << "version: " << 3 << std::endl; + + fout << std::endl; + + fout << "#################################################" << std::endl; + fout << "# computational domian #" << std::endl; + fout << "#################################################" << std::endl; + fout << "domain:" << std::endl; + fout << " min_max_dep: [" << min_dep << ", " << max_dep << "] # depth in km" << std::endl; + fout << " min_max_lat: [" << min_lat << ", " << max_lat << "] # latitude in degree" << std::endl; + fout << " min_max_lon: [" << min_lon << ", " << max_lon << "] # longitude in degree" << std::endl; + fout << " n_rtp: [" << ngrid_k << ", " << ngrid_j << ", " << ngrid_i << "] # number of nodes in depth,latitude,longitude direction" << std::endl; + fout << std::endl; + + fout << "#################################################" << std::endl; + fout << "# traveltime data file path #" << std::endl; + fout << "#################################################" << std::endl; + fout << "source:" << std::endl; + fout << " src_rec_file: " << src_rec_file << " # source receiver file path" << std::endl; + fout << " swap_src_rec: " << swap_src_rec << " # swap source and receiver (only valid for regional source and receiver, those of tele remain unchanged)" << std::endl; + fout << std::endl; + + fout << "#################################################" << std::endl; + fout << "# initial model file path #" << std::endl; + fout << "#################################################" << std::endl; + fout << "model:" << std::endl; + fout << " init_model_path: " << init_model_path << " # path to initial model file " << std::endl; + // check if model_1d_name has any characters + if (model_1d_name.size() > 0) + fout << " model_1d_name: " << model_1d_name; + else + fout << "# model_1d_name: " << "dummy_model_1d_name"; + fout << " # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h" << std::endl; + fout << std::endl; + + + fout << "#################################################" << std::endl; + fout << "# parallel computation settings #" << std::endl; + fout << "#################################################" << std::endl; + fout << "parallel: # parameters for parallel computation" << std::endl; + fout << " n_sims: " << n_sims << " # number of simultanoues runs (parallel the sources)" << std::endl; + fout << " ndiv_rtp: [" << ndiv_k << ", " << ndiv_j << ", " << ndiv_i << "] # number of subdivision on each direction (parallel the computional domain)" << std::endl; + fout << " nproc_sub: " << n_subprocs << " # number of processors for sweep parallelization (parallel the fast sweep method)" << std::endl; + fout << " use_gpu: " << use_gpu << " # true if use gpu (EXPERIMENTAL)" << std::endl; + fout << std::endl; + + fout << "############################################" << std::endl; + fout << "# output file setting #" << std::endl; + fout << "############################################" << std::endl; + fout << "output_setting:" << std::endl; + fout << " output_dir: " << output_dir << " # path to output director (default is ./OUTPUT_FILES/)" << std::endl; + fout << " output_source_field: " << output_source_field << " # True: output the traveltime field and adjoint field of all sources at each iteration. Default: false. File: 'out_data_sim_group_X'." << std::endl; + fout << " output_kernel: " << output_kernel << " # True: output sensitivity kernel and kernel density. Default: false. File: 'out_data_sim_group_X'." << std::endl; + fout << " output_final_model: " << output_final_model << " # True: output merged final model. This file can be used as the input model for TomoATT. Default: true. File: 'model_final.h5'." << std::endl; + fout << " output_middle_model: " << output_middle_model << " # True: output merged intermediate models during inversion. This file can be used as the input model for TomoATT. Default: false. File: 'middle_model_step_XXXX.h5'" << std::endl; + fout << " output_in_process: " << output_in_process << " # True: output at each inv iteration, otherwise, only output step 0, Niter-1, Niter. Default: true. File: 'out_data_sim_group_0'." << std::endl; + fout << " output_in_process_data: " << output_in_process_data << " # True: output src_rec_file at each inv iteration, otherwise, only output step 0, Niter-2, Niter-1. Default: true. File: 'src_rec_file_step_XXXX.dat'" << std::endl; + fout << " single_precision_output: " << single_precision_output << " # True: output results in single precision. Default: false. " << std::endl; + fout << " verbose_output_level: " << verbose_output_level << " # output internal parameters, (to do)." << std::endl; + int ff_flag=0; + if (output_format == OUTPUT_FORMAT_HDF5) ff_flag = 0; + else if (output_format == OUTPUT_FORMAT_ASCII) ff_flag = 1; + else { + std::cout << "Error: output_format is not defined!" << std::endl; + exit(1); + } + fout << " output_file_format: " << ff_flag << " # 0: hdf5, 1: ascii" << std::endl; + fout << std::endl; + fout << "# output files:" << std::endl; + fout << "# File: 'out_data_grid.h5'. Keys: ['Mesh']['elem_conn'], element index; " << std::endl; + fout << "# ['Mesh']['node_coords_p'], phi coordinates of nodes; " << std::endl; + fout << "# ['Mesh']['node_coords_t'], theta coordinates of nodes; " << std::endl; + fout << "# ['Mesh']['node_coords_r'], r coordinates of nodes;" << std::endl; + fout << "# ['Mesh']['node_coords_x'], phi coordinates of elements; " << std::endl; + fout << "# ['Mesh']['node_coords_y'], theta coordinates of elements; " << std::endl; + fout << "# ['Mesh']['node_coords_z'], r coordinates of elements; " << std::endl; + fout << "# File: 'out_data_sim_group_0'. Keys: ['model']['vel_inv_XXXX'], velocity model at iteration XXXX; " << std::endl; + fout << "# ['model']['xi_inv_XXXX'], xi model at iteration XXXX; " << std::endl; + fout << "# ['model']['eta_inv_XXXX'], eta model at iteration XXXX" << std::endl; + fout << "# ['model']['Ks_inv_XXXX'], sensitivity kernel related to slowness at iteration XXXX" << std::endl; + fout << "# ['model']['Kxi_inv_XXXX'], sensitivity kernel related to xi at iteration XXXX" << std::endl; + fout << "# ['model']['Keta_inv_XXXX'], sensitivity kernel related to eta at iteration XXXX" << std::endl; + fout << "# ['model']['Ks_density_inv_XXXX'], kernel density of Ks at iteration XXXX" << std::endl; + fout << "# ['model']['Kxi_density_inv_XXXX'], kernel density of Kxi at iteration XXXX" << std::endl; + fout << "# ['model']['Keta_density_inv_XXXX'], kernel density of Keta at iteration XXXX" << std::endl; + // fout << "# ['model']['Ks_over_Kden_inv_XXXX'], slowness kernel over kernel density at iteration XXXX" << std::endl; + // fout << "# ['model']['Kxi_over_Kden_inv_XXXX'], xi kernel over kernel density at iteration XXXX" << std::endl; + // fout << "# ['model']['Keta_over_Kden_inv_XXXX'], eta kernel over kernel density at iteration XXXX" << std::endl; + fout << "# ['model']['Ks_update_inv_XXXX'], slowness kernel smoothed by inversion grid over the samely smoothed kernel density at iteration XXXX, " << std::endl; + fout << "# ['model']['Kxi_update_inv_XXXX'], xi kernel smoothed by inversion grid over the samely smoothed kernel density at iteration XXXX" << std::endl; + fout << "# ['model']['Keta_update_inv_XXXX'], eta kernel smoothed by inversion grid over the samely smoothed kernel density at iteration XXXX" << std::endl; + fout << "# ['model']['Ks_density_update_inv_XXXX'], slowness kernel density at iteration XXXX, smoothed by inversion grid" << std::endl; + fout << "# ['model']['Kxi_density_update_inv_XXXX'], xi kernel density at iteration XXXX, smoothed by inversion grid" << std::endl; + fout << "# ['model']['Keta_density_update_inv_XXXX'], eta kernel density at iteration XXXX, smoothed by inversion grid" << std::endl; + fout << "# ['1dinv']['vel_1dinv_inv_XXXX'], 2d velocity model at iteration XXXX, in 1d inversion mode" << std::endl; + fout << "# ['1dinv']['r_1dinv'], r coordinates (depth), in 1d inversion mode" << std::endl; + fout << "# ['1dinv']['t_1dinv'], t coordinates (epicenter distance), in 1d inversion mode" << std::endl; + fout << "# File: 'src_rec_file_step_XXXX.dat' or 'src_rec_file_forward.dat'. The synthetic traveltime data file." << std::endl; + fout << "# File: 'final_model.h5'. Keys: ['eta'], ['xi'], ['vel'], the final model." << std::endl; + fout << "# File: 'middle_model_step_XXXX.h5'. Keys: ['eta'], ['xi'], ['vel'], the model at step XXXX." << std::endl; + fout << "# File: 'inversion_grid.txt'. The location of inversion grid nodes" << std::endl; + fout << "# File: 'objective_function.txt'. The objective function value at each iteration" << std::endl; + fout << "# File: 'out_data_sim_group_X'. Keys: ['src_YYYY']['time_field_inv_XXXX'], traveltime field of source YYYY at iteration XXXX;" << std::endl; + fout << "# ['src_YYYY']['adjoint_field_inv_XXXX'], adjoint field of source YYYY at iteration XXXX;" << std::endl; + fout << "# ['1dinv']['time_field_1dinv_YYYY_inv_XXXX'], 2d traveltime field of source YYYY at iteration XXXX, in 1d inversion mode" << std::endl; + fout << "# ['1dinv']['adjoint_field_1dinv_YYYY_inv_XXXX'], 2d adjoint field of source YYYY at iteration XXXX, in 1d inversion mode" << std::endl; + fout << std::endl; + fout << std::endl; + + fout << "#################################################" << std::endl; + fout << "# inversion or forward modeling #" << std::endl; + fout << "#################################################" << std::endl; + fout << "# run mode" << std::endl; + fout << "# 0 for forward simulation only," << std::endl; + fout << "# 1 for inversion" << std::endl; + fout << "# 2 for earthquake relocation" << std::endl; + fout << "# 3 for inversion + earthquake relocation" << std::endl; + fout << "# 4 for 1d model inversion" << std::endl; + fout << "run_mode: " << run_mode << std::endl; + fout << std::endl; + + fout << "have_tele_data: " << have_tele_data << " # An error will be reported if false but source out of study region is used. Default: false." << std::endl; + fout << "ignore_velocity_discontinuity: " << ignore_velocity_discontinuity << " # An error will be reported if false but there is velocity discontinuity (v[ix,iy,iz+1] > v[ix,iy,iz] * 1.2 or v[ix,iy,iz+1] < v[ix,iy,iz] * 0.8) in the input model. Default: false." << std::endl; + fout << "# velocity discontinuity will lead to unexpected bais in traveltime and kernel. Smoothing the model with Gaussian filter is highly recommended. If you really want to use the model with discontinuity, please set True. " << std::endl; + fout << std::endl; + fout << std::endl; + + fout << "###################################################" << std::endl; + fout << "# model update parameters setting #" << std::endl; + fout << "###################################################" << std::endl; + fout << "model_update:" << std::endl; + fout << " max_iterations: " << max_iter_inv << " # maximum number of inversion iterations" << std::endl; + fout << " optim_method: " << optim_method << " # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL)" << std::endl; + fout << std::endl; + fout << " #common parameters for all optim methods" << std::endl; + fout << " step_length: " << step_length_init << " # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration." << std::endl; + fout << std::endl; + fout << " # parameters for optim_method 0 (gradient_descent)" << std::endl; + fout << " optim_method_0:" << std::endl; + fout << " step_method: " << step_method << " # the method to modulate step size. 0: according to objective function; 1: according to gradient direction " << std::endl; + fout << " # if step_method:0. if objective function increase, step size -> step length * step_length_decay. " << std::endl; + fout << " step_length_decay: " << step_length_decay << " # default: 0.9" << std::endl; + fout << " # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. " << std::endl; + fout << " # otherwise, step size -> step length * step_length_change[1]. " << std::endl; + fout << " step_length_gradient_angle: " << step_length_gradient_angle << " # default: 120.0 " << std::endl; + fout << " step_length_change: [" << step_length_down << ", " << step_length_up << "] # default: [0.5,1.2] " << std::endl; + fout << " # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion" << std::endl; + fout << " # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is fully normalized. 0.5 or less is recommended if really required." << std::endl; + fout << " Kdensity_coe: " << Kdensity_coe << " # default: 0.0, limited range: 0.0 - 0.95 " << std::endl; + fout << std::endl; + fout << " # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs)" << std::endl; + fout << " optim_method_1_2:" << std::endl; + fout << " max_sub_iterations: " << max_sub_iterations << " # maximum number of each sub-iteration" << std::endl; + fout << " regularization_weight: " << regularization_weight << " # weight value for regularization (lbfgs mode only)" << std::endl; + + fout << " coefs_regulalization_rtp: [" << regul_lr << ", " << regul_lt << ", " << regul_lp << "] # regularization coefficients for rtp (lbfgs mode only)" << std::endl; + fout << std::endl; + + fout << " # smoothing" << std::endl; + fout << " smoothing:" << std::endl; + fout << " smooth_method: " << smooth_method << " # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL)" << std::endl; + fout << " l_smooth_rtp: [" << smooth_lr << ", " << smooth_lt << ", " << smooth_lp << "] # smoothing coefficients for laplacian smoothing" << std::endl; + fout << std::endl; + + fout << " # parameters for smooth method 0 (multigrid model parametrization)" << std::endl; + fout << " # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt" << std::endl; + fout << " n_inversion_grid: " << n_inversion_grid << " # number of inversion grid sets" << std::endl; + fout << std::endl; + + fout << " uniform_inv_grid_dep: " << uniform_inv_grid_dep << " # true if use uniform inversion grid for dep, false if use flexible inversion grid" << std::endl; + fout << " uniform_inv_grid_lat: " << uniform_inv_grid_lat << " # true if use uniform inversion grid for lat, false if use flexible inversion grid" << std::endl; + fout << " uniform_inv_grid_lon: " << uniform_inv_grid_lon << " # true if use uniform inversion grid for lon, false if use flexible inversion grid" << std::endl; + fout << std::endl; + + fout << " # -------------- uniform inversion grid setting -------------- " << std::endl; + fout << " # settings for uniform inversion grid" << std::endl; + fout << " n_inv_dep_lat_lon: [" << n_inv_r << ", " << n_inv_t << ", " << n_inv_p << "] # number of the base inversion grid points" << std::endl; + fout << " min_max_dep_inv: [" << min_dep_inv << ", " << max_dep_inv << "] # depth in km (Radius of the earth is defined in config.h/R_earth)" << std::endl; + fout << " min_max_lat_inv: [" << min_lat_inv << ", " << max_lat_inv << "] # latitude in degree" << std::endl; + fout << " min_max_lon_inv: [" << min_lon_inv << ", " << max_lon_inv << "] # longitude in degree" << std::endl; + fout << std::endl; + + fout << " # -------------- flexible inversion grid setting -------------- " << std::endl; + fout << " # settings for flexible inversion grid" << std::endl; + fout << " dep_inv: ["; + for (int i = 0; i < n_inv_r_flex; i++){ + fout << dep_inv[i]; + if (i != n_inv_r_flex-1) + fout << ", "; + } + fout << "] # inversion grid for vel in depth (km)" << std::endl; + fout << " lat_inv: ["; + for (int i = 0; i < n_inv_t_flex; i++){ + fout << lat_inv[i]; + if (i != n_inv_t_flex-1) + fout << ", "; + } + fout << "] # inversion grid for vel in latitude (degree)" << std::endl; + fout << " lon_inv: ["; + for (int i = 0; i < n_inv_p_flex; i++){ + fout << lon_inv[i]; + if (i != n_inv_p_flex-1) + fout << ", "; + } + fout << "] # inversion grid for vel in longitude (degree)" << std::endl; + fout << " trapezoid: ["; + for (int i = 0; i < n_trapezoid; i++){ + fout << trapezoid[i]; + if (i != n_trapezoid-1) + fout << ", "; + } + fout << "] # usually set as [1.0, 0.0, 50.0] (default)" << std::endl; + fout << std::endl; + + fout << " # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false)" << std::endl; + fout << " invgrid_ani: " << invgrid_ani << std::endl; + fout << std::endl; + + fout << " # ---------- uniform inversion grid setting for anisotropy ----------" << std::endl; + fout << " n_inv_dep_lat_lon_ani: [" << n_inv_r_ani << ", " << n_inv_t_ani << ", " << n_inv_p_ani << "] # number of the base inversion grid points" << std::endl; + fout << " min_max_dep_inv_ani: [" << min_dep_inv_ani << ", " << max_dep_inv_ani << "] # depth in km (Radius of the earth is defined in config.h/R_earth)" << std::endl; + fout << " min_max_lat_inv_ani: [" << min_lat_inv_ani << ", " << max_lat_inv_ani << "] # latitude in degree" << std::endl; + fout << " min_max_lon_inv_ani: [" << min_lon_inv_ani << ", " << max_lon_inv_ani << "] # longitude in degree" << std::endl; + fout << std::endl; + + fout << " # ---------- flexible inversion grid setting for anisotropy ----------" << std::endl; + fout << " # settings for flexible inversion grid for anisotropy" << std::endl; + fout << " dep_inv_ani: ["; + for (int i = 0; i < n_inv_r_flex_ani; i++){ + fout << dep_inv_ani[i]; + if (i != n_inv_r_flex_ani-1) + fout << ", "; + } + fout << "] # inversion grid for ani in depth (km)" << std::endl; + fout << " lat_inv_ani: ["; + for (int i = 0; i < n_inv_t_flex_ani; i++){ + fout << lat_inv_ani[i]; + if (i != n_inv_t_flex_ani-1) + fout << ", "; + } + fout << "] # inversion grid for ani in latitude (degree)" << std::endl; + fout << " lon_inv_ani: ["; + for (int i = 0; i < n_inv_p_flex_ani; i++){ + fout << lon_inv_ani[i]; + if (i != n_inv_p_flex_ani-1) + fout << ", "; + } + fout << "] # inversion grid for ani in longitude (degree)" << std::endl; + fout << " trapezoid_ani: ["; + for (int i = 0; i < n_trapezoid; i++){ + fout << trapezoid_ani[i]; + if (i != n_trapezoid-1) + fout << ", "; + } + fout << "] # usually set as [1.0, 0.0, 50.0] (default)" << std::endl; + fout << std::endl; + + fout << " # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths." << std::endl; + fout << " # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as:" << std::endl; + fout << " # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; " << std::endl; + fout << " # lat = lat_inv[j]; " << std::endl; + fout << " # dep = dep_inv[k];" << std::endl; + fout << " # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; " << std::endl; + fout << " # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; " << std::endl; + fout << " # dep = dep_inv[k];" << std::endl; + fout << " # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; " << std::endl; + fout << " # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; " << std::endl; + fout << " # dep = dep_inv[k];" << std::endl; + fout << " # The shape of trapezoid inversion gird (x) looks like:" << std::endl; + fout << " #" << std::endl; + fout << " # lon_inv[0] [1] [2] [3] [4]" << std::endl; + fout << " # |<-------- (lon_inv[end] - lon_inv[0]) ---->| " << std::endl; + fout << " # dep_inv[0] | x x x x x | " << std::endl; + fout << " # | | " << std::endl; + fout << " # dep_inv[1] | x x x x x | " << std::endl; + fout << " # | | " << std::endl; + fout << " # dep_inv[2] = trapezoid[1] / x x x x x \\ " << std::endl; + fout << " # / \\ " << std::endl; + fout << " # dep_inv[3] / x x x x x \\ " << std::endl; + fout << " # / \\ " << std::endl; + fout << " # dep_inv[4] = trapezoid[2] / x x x x x \\ " << std::endl; + fout << " # | | " << std::endl; + fout << " # dep_inv[5] | x x x x x | " << std::endl; + fout << " # | | " << std::endl; + fout << " # dep_inv[6] | x x x x x | " << std::endl; + fout << " # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| " << std::endl; + fout << std::endl; + + + // fout << " # inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh)," << std::endl; + // fout << " # this precondition may be carefully applied if the sizes of inversion grids are unbalanced" << std::endl; + // fout << " invgrid_volume_rescale: " << invgrid_volume_rescale << std::endl; + fout << std::endl; + + fout << " # path to station correction file (under development)" << std::endl; + fout << " use_sta_correction: " << use_sta_correction << std::endl; + if (sta_correction_file_exist) + fout << " initial_sta_correction_file: " << sta_correction_file; + else + fout << " # initial_sta_correction_file: " << "dummy_sta_correction_file"; + fout << " # the path of initial station correction " << std::endl; + fout << " step_length_sta_correction: " << step_length_init_sc << " # step length relate to the update of station correction terms" << std::endl; + fout << std::endl; + + fout << std::endl; + + fout << " # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient" << std::endl; + fout << " # XXX_weight : [d1,d2,w1,w2] means: " << std::endl; + fout << " # if XXX < d1, weight = w1 " << std::endl; + fout << " # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) " << std::endl; + fout << " # if d2 <= XXX , weight = w2 " << std::endl; + fout << " # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX." << std::endl; + + fout << " # -------------- using absolute traveltime data --------------" << std::endl; + fout << " abs_time:" << std::endl; + fout << " use_abs_time: " << use_abs << " # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_abs[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j})" << std::endl; + fout << " distance_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << distance_weight_abs[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is epicenter distance (km) between the source and receiver related to the data" << std::endl; + fout << std::endl; + + fout << " # -------------- using common source differential traveltime data --------------" << std::endl; + fout << " cs_dif_time:" << std::endl; + fout << " use_cs_time: " << use_cs << " # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_cs[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j})." << std::endl; + fout << " azimuthal_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << azimuthal_weight_cs[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the azimuth difference between two separate stations related to the common source." << std::endl; + fout << std::endl; + + fout << " # -------------- using common receiver differential traveltime data --------------" << std::endl; + fout << " cr_dif_time:" << std::endl; + fout << " use_cr_time: " << use_cr << " # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_cr[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i})" << std::endl; + fout << " azimuthal_weight: ["; + for (int i = 0; i < n_weight; i++){ + fout << azimuthal_weight_cr[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the azimuth difference between two separate sources related to the common receiver." << std::endl; + fout << std::endl; + + fout << " # -------------- global weight of different types of data (to balance the weight of different data) --------------" << std::endl; + fout << " global_weight:" << std::endl; + fout << " balance_data_weight: " << balance_data_weight << " # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set)" << std::endl; + fout << " abs_time_weight: " << abs_time_local_weight << " # weight of absolute traveltime data after balance, default: 1.0" << std::endl; + fout << " cs_dif_time_local_weight: " << cs_dif_time_local_weight << " # weight of common source differential traveltime data after balance, default: 1.0" << std::endl; + fout << " cr_dif_time_local_weight: " << cr_dif_time_local_weight << " # weight of common receiver differential traveltime data after balance, default: 1.0" << std::endl; + fout << " teleseismic_weight: " << teleseismic_weight << " # weight of teleseismic data after balance, default: 1.0 (exclude in this version)" << std::endl; + fout << std::endl; + + fout << " # -------------- inversion parameters --------------" << std::endl; + fout << " update_slowness : " << update_slowness << " # update slowness (velocity) or not. default: true" << std::endl; + fout << " update_azi_ani : " << update_azi_ani << " # update azimuthal anisotropy (xi, eta) or not. default: false" << std::endl; + // fout << " update_rad_ani : " << update_rad_ani << " # update radial anisotropy (in future) or not. default: false" << std::endl; + fout << std::endl; + + fout << " # -------------- for teleseismic inversion (under development) --------------" << std::endl; + fout << " # depth_taper : [d1,d2] means: " << std::endl; + fout << " # if XXX < d1, kernel <- kernel * 0.0 " << std::endl; + fout << " # if d1 <= XXX < d2, kernel <- kernel * (XXX-d1)/(d2-d1), (linear interpolation) " << std::endl; + fout << " # if d2 <= XXX , kernel <- kernel * 1.0 " << std::endl; + fout << " # You can easily set d1 = -200, d1 = -100 to remove this taper." << std::endl; + fout << " depth_taper : [" << depth_taper[0] << ", " << depth_taper[1] << "]" << std::endl; + fout << std::endl; + + fout << "#################################################" << std::endl; + fout << "# relocation parameters setting #" << std::endl; + fout << "#################################################" << std::endl; + fout << "relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3)" << std::endl; + fout << " min_Ndata: " << min_Ndata_reloc << " # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 " << std::endl; + fout << std::endl; + + fout << " # relocation_strategy" << std::endl; + fout << " step_length : " << step_length_src_reloc << " # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration." << std::endl; + fout << " step_length_decay : " << step_length_decay_src_reloc << " # if objective function increase, step size -> step length * step_length_decay. default: 0.9" << std::endl; + + fout << " rescaling_dep_lat_lon_ortime : ["; + fout << rescaling_dep << ", " << rescaling_lat << ", " << rescaling_lon << ", " << rescaling_ortime; + fout << "] # The perturbation is related to . Unit: km,km,km,second" << std::endl; + + fout << " max_change_dep_lat_lon_ortime : ["; + fout << max_change_dep << ", " << max_change_lat << ", " << max_change_lon << ", " << max_change_ortime; + fout << "] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second" << std::endl; + fout << " max_iterations : " << N_ITER_MAX_SRC_RELOC <<" # maximum number of iterations for relocation" << std::endl; + fout << " tol_gradient : " << TOL_SRC_RELOC << " # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates" << std::endl; + fout << std::endl; + + fout << " # -------------- using absolute traveltime data --------------" << std::endl; + fout << " abs_time:" << std::endl; + fout << " use_abs_time : " << use_abs_reloc << " # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_abs_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j})" << std::endl; + fout << " distance_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << distance_weight_abs_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is epicenter distance (km) between the source and receiver related to the data" << std::endl; + fout << std::endl; + + fout << " # -------------- using common source differential traveltime data --------------" << std::endl; + fout << " cs_dif_time:" << std::endl; + fout << " use_cs_time : " << use_cs_reloc <<" # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_cs_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j})." << std::endl; + fout << " azimuthal_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << azimuthal_weight_cs_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the azimuth difference between two separate stations related to the common source." << std::endl; + fout << std::endl; + + fout << " # -------------- using common receiver differential traveltime data --------------" << std::endl; + fout << " cr_dif_time:" << std::endl; + fout << " use_cr_time : " << use_cr_reloc <<" # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section)" << std::endl; + fout << " residual_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << residual_weight_cr_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i})" << std::endl; + fout << " azimuthal_weight : ["; + for (int i = 0; i < n_weight; i++){ + fout << azimuthal_weight_cr_reloc[i]; + if (i != n_weight-1) + fout << ", "; + } + fout << "] # XXX is the azimuth difference between two separate sources related to the common receiver." << std::endl; + fout << std::endl; + + fout << std::endl; + fout << " # -------------- global weight of different types of data (to balance the weight of different data) --------------" << std::endl; + fout << " global_weight:" << std::endl; + fout << " balance_data_weight: " << balance_data_weight_reloc << " # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set)" << std::endl; + fout << " abs_time_local_weight: " << abs_time_local_weight_reloc << " # weight of absolute traveltime data for relocation after balance, default: 1.0" << std::endl; + fout << " cs_dif_time_local_weight: " << cs_dif_time_local_weight_reloc << " # weight of common source differential traveltime data for relocation after balance, default: 1.0" << std::endl; + fout << " cr_dif_time_local_weight: " << cr_dif_time_local_weight_reloc << " # weight of common receiver differential traveltime data for relocation after balance, default: 1.0" << std::endl; + fout << std::endl; + + + fout << "####################################################################" << std::endl; + fout << "# inversion strategy for tomography and relocation #" << std::endl; + fout << "####################################################################" << std::endl; + fout << "inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3)" << std::endl; + fout << std::endl; + fout << " inv_mode : " << inv_mode << " # 0 for update model parameters and relocation iteratively. 1 for update model parameters and relocation simultaneously." << std::endl; + fout << std::endl; + fout << " # for inv_mode : 0, parameters below are required" << std::endl; + fout << " inv_mode_0: # update model for steps, then update location for steps, and repeat the process for loops." << std::endl; + fout << " model_update_N_iter : " << model_update_N_iter << std::endl; + fout << " relocation_N_iter : " << relocation_N_iter << std::endl; + fout << " max_loop : " << max_loop_mode0 << std::endl; + fout << std::endl; + + fout << " # for inv_mode : 1, parameters below are required" << std::endl; + fout << " inv_mode_1: # update model and location simultaneously for loops." << std::endl; + fout << " max_loop : " << max_loop_mode1 << std::endl; + fout << std::endl; + + fout << "# keep these setting unchanged, unless you are familiar with the eikonal solver in this code" << std::endl; + fout << "calculation:" << std::endl; + fout << " convergence_tolerance: " << conv_tol << " # threshold value for checking the convergence for each forward/adjoint run"<< std::endl; + fout << " max_iterations: " << max_iter << " # number of maximum iteration for each forward/adjoint run" << std::endl; + fout << " stencil_order: " << stencil_order << " # order of stencil, 1 or 3" << std::endl; + fout << " stencil_type: " << stencil_type << " # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) " << std::endl; + fout << " sweep_type: " << sweep_type << " # 0: legacy, 1: cuthill-mckee with shm parallelization" << std::endl; + fout << std::endl; + //fout << std::endl; + //fout << "debug:" << std::endl; + //fout << " debug_mode: " << int(if_test) << std::endl; + + +} + +void InputParams::setup_uniform_inv_grid() { + // set the number of inversion grid points + if (uniform_inv_grid_dep){ + if (min_dep_inv == -9999.0 || max_dep_inv == -9999.0){ + std::cout << "Error: please setup min_max_dep_inv" << std::endl; + exit(1); + } + if (max_dep_inv < min_dep_inv){ + std::cout << "Error: max_dep_inv should be larger than min_dep_inv" << std::endl; + exit(1); + } + + n_inv_r_flex = n_inv_r; + + std::vector tmp_dep_inv = linspace(min_dep_inv, max_dep_inv, n_inv_r_flex); + + if (dep_inv != nullptr) delete[] dep_inv; + + dep_inv = allocateMemory(n_inv_r_flex, 5000); + + for (int i = 0; i < n_inv_r_flex; i++){ + dep_inv[i] = tmp_dep_inv[i]; + } + + if (invgrid_ani) { + if (min_dep_inv_ani == -9999.0 || max_dep_inv_ani == -9999.0){ + std::cout << "Error: please setup min_max_dep_inv_ani" << std::endl; + exit(1); + } + if (max_dep_inv_ani < min_dep_inv_ani){ + std::cout << "Error: max_dep_inv_ani should be larger than min_dep_inv_ani" << std::endl; + exit(1); + } + + n_inv_r_flex_ani = n_inv_r_ani; + + if (dep_inv_ani != nullptr) delete[] dep_inv_ani; + + dep_inv_ani = allocateMemory(n_inv_r_flex_ani, 5003); + + tmp_dep_inv = linspace(min_dep_inv_ani, max_dep_inv_ani, n_inv_r_flex_ani); + + for (int i = 0; i < n_inv_r_flex_ani; i++){ + dep_inv_ani[i] = tmp_dep_inv[i]; + } + } + tmp_dep_inv.clear(); + + } + + + if (uniform_inv_grid_lat){ + if (min_lat_inv == -9999.0 || max_lat_inv == -9999.0){ + std::cout << "Error: please setup min_max_lat_inv_ani" << std::endl; + exit(1); + } + if (max_lat_inv < min_lat_inv){ + std::cout << "Error: max_lat_inv should be larger than min_lat_inv" << std::endl; + exit(1); + } + n_inv_t_flex = n_inv_t; + + std::vector tmp_lat_inv = linspace(min_lat_inv, max_lat_inv, n_inv_t_flex); + + if (lat_inv != nullptr) delete[] lat_inv; + + lat_inv = allocateMemory(n_inv_t_flex, 5001); + + for (int i = 0; i < n_inv_t_flex; i++){ + lat_inv[i] = tmp_lat_inv[i]; + } + + if (invgrid_ani) { + if (min_lat_inv_ani == -9999.0 || max_lat_inv_ani == -9999.0){ + std::cout << "Error: please setup min_max_lat_inv_ani" << std::endl; + exit(1); + } + if (max_lat_inv_ani < min_lat_inv_ani){ + std::cout << "Error: max_lat_inv_ani should be larger than min_lat_inv_ani" << std::endl; + exit(1); + } + + n_inv_t_flex_ani = n_inv_t_ani; + + if (lat_inv_ani != nullptr) delete[] lat_inv_ani; + + lat_inv_ani = allocateMemory(n_inv_t_flex_ani, 5004); + + tmp_lat_inv = linspace(min_lat_inv_ani, max_lat_inv_ani, n_inv_t_flex_ani); + + for (int i = 0; i < n_inv_t_flex_ani; i++){ + lat_inv_ani[i] = tmp_lat_inv[i]; + } + } + tmp_lat_inv.clear(); + } + + if (uniform_inv_grid_lon){ + if (min_lon_inv == -9999.0 || max_lon_inv == -9999.0){ + std::cout << "Error: please setup min_max_lon_inv_ani" << std::endl; + exit(1); + } + if (max_lon_inv < min_lon_inv){ + std::cout << "Error: max_lon_inv should be larger than min_lon_inv" << std::endl; + exit(1); + } + n_inv_p_flex = n_inv_p; + + std::vector tmp_lon_inv = linspace(min_lon_inv, max_lon_inv, n_inv_p_flex); + + if (lon_inv != nullptr) delete[] lon_inv; + + lon_inv = allocateMemory(n_inv_p_flex, 5002); + + for (int i = 0; i < n_inv_p_flex; i++){ + lon_inv[i] = tmp_lon_inv[i]; + } + + if (invgrid_ani) { + if (min_lon_inv_ani == -9999.0 || max_lon_inv_ani == -9999.0){ + std::cout << "Error: please setup min_max_lon_inv_ani" << std::endl; + exit(1); + } + if (max_lon_inv_ani < min_lon_inv_ani){ + std::cout << "Error: max_lon_inv_ani should be larger than min_lon_inv_ani" << std::endl; + exit(1); + } + + n_inv_p_flex_ani = n_inv_p_ani; + + if (lon_inv_ani != nullptr) delete[] lon_inv_ani; + + lon_inv_ani = allocateMemory(n_inv_p_flex_ani, 5005); + + tmp_lon_inv = linspace(min_lon_inv_ani, max_lon_inv_ani, n_inv_p_flex_ani); + + for (int i = 0; i < n_inv_p_flex_ani; i++){ + lon_inv_ani[i] = tmp_lon_inv[i]; + } + + } + tmp_lon_inv.clear(); + } +} + + + +// return radious +CUSTOMREAL InputParams::get_src_radius(const std::string& name_sim_src) { + if (src_rec_file_exist) + return depth2radius(get_src_point_bcast(name_sim_src).dep); + else + return depth2radius(src_dep); +} + + +CUSTOMREAL InputParams::get_src_lat(const std::string& name_sim_src) { + if (src_rec_file_exist) + return get_src_point_bcast(name_sim_src).lat*DEG2RAD; + else + return src_lat*DEG2RAD; +} + + +CUSTOMREAL InputParams::get_src_lon(const std::string& name_sim_src) { + if (src_rec_file_exist) + return get_src_point_bcast(name_sim_src).lon*DEG2RAD; + else + return src_lon*DEG2RAD; +} + +CUSTOMREAL InputParams::get_src_radius_2d(const std::string& name_sim_src) { + if (src_rec_file_exist) + return depth2radius(get_src_point_bcast_2d(name_sim_src).dep); + else + return depth2radius(src_dep); +} + + +CUSTOMREAL InputParams::get_src_lat_2d(const std::string& name_sim_src) { + if (src_rec_file_exist) + return get_src_point_bcast_2d(name_sim_src).lat*DEG2RAD; + else + return src_lat*DEG2RAD; +} + + +CUSTOMREAL InputParams::get_src_lon_2d(const std::string& name_sim_src) { + if (src_rec_file_exist) + return get_src_point_bcast_2d(name_sim_src).lon*DEG2RAD; + else + return src_lon*DEG2RAD; +} + + +SrcRecInfo& InputParams::get_src_point(const std::string& name_src){ + if (proc_store_srcrec) + return src_map[name_src]; + else { + // exit with error + std::cout << "Error: non-proc_store_srcrec process should not call the function get_src_point." << std::endl; + exit(1); + } +} + + +SrcRecInfo& InputParams::get_rec_point(const std::string& name_rec){ + if (proc_store_srcrec) + return rec_map[name_rec]; + else { + // exit with error + std::cout << "Error: non-proc_store_srcrec process should not call the function get_rec_point." << std::endl; + exit(1); + } +} + + +SrcRecInfo InputParams::get_src_point_bcast(const std::string& name_src){ + // + // This function returns copy of a SrcRecInfo object + // thus modifying the returned object will not affect the original object + // + + SrcRecInfo src_tmp; + + if (proc_store_srcrec) + src_tmp = src_map[name_src]; + + // broadcast + broadcast_src_info_intra_sim(src_tmp, 0); + + // return + return src_tmp; + +} + + +SrcRecInfo InputParams::get_src_point_bcast_2d(const std::string& name_src){ + // + // This function returns copy of a SrcRecInfo object + // thus modifying the returned object will not affect the original object + // + + SrcRecInfo src_tmp; + + if (proc_store_srcrec) + src_tmp = src_map_2d[name_src]; + + // broadcast + broadcast_src_info_intra_sim(src_tmp, 0); + + // return + return src_tmp; + +} + + + + + +SrcRecInfo InputParams::get_rec_point_bcast(const std::string& name_rec) { + // + // This function returns copy of a SrcRecInfo object + // thus modifying the returned object will not affect the original object + // + + SrcRecInfo rec_tmp; + + if (proc_store_srcrec) + rec_tmp = rec_map[name_rec]; + + // broadcast + broadcast_rec_info_intra_sim(rec_tmp, 0); + + return rec_tmp; + +} + + +// return source name from in-sim_group id +std::string InputParams::get_src_name(const int& local_id){ + + std::string src_name; + if (proc_store_srcrec) + src_name = src_id2name[local_id]; + + // broadcast + broadcast_str(src_name, 0); + + return src_name; +} + +std::string InputParams::get_src_name_comm(const int& local_id){ + + std::string src_name; + if (proc_store_srcrec) + src_name = src_id2name_comm_rec[local_id]; + + // broadcast + broadcast_str(src_name, 0); + + return src_name; +} + + + + +std::string InputParams::get_rec_name(const int& local_id){ + + std::string rec_name; + if (proc_store_srcrec) + rec_name = rec_id2name[local_id]; + + // broadcast + broadcast_str(rec_name, 0); + + return rec_name; +} + + +// return src global id from src name +int InputParams::get_src_id(const std::string& src_name) { + int src_id; + if (proc_store_srcrec) + src_id = src_map[src_name].id; + + // broadcast + broadcast_i_single(src_id, 0); + + return src_id; +} + + +bool InputParams::get_if_src_teleseismic(const std::string& src_name) { + bool if_src_teleseismic = false; + + if (proc_store_srcrec) + if_src_teleseismic = get_src_point(src_name).is_out_of_region; + + // broadcast to all processes within simultaneous run group + broadcast_bool_single(if_src_teleseismic, 0); + broadcast_bool_single_sub(if_src_teleseismic, 0); + + return if_src_teleseismic; +} + + +bool InputParams::get_is_T_written_into_file(const std::string& src_name) { + bool is_T_written_into_file = false; + + if (proc_store_srcrec) + is_T_written_into_file = get_src_point(src_name).is_T_written_into_file; + + // broadcast to all processes within simultaneous run group + broadcast_bool_single(is_T_written_into_file, 0); + broadcast_bool_single_sub(is_T_written_into_file, 0); + + return is_T_written_into_file; +} + + +void InputParams::prepare_src_map(){ + // + // only the + // - subdom_main process of the + // - first subdomain of the + // - first simultaneous run group + // (subdom_main==true && id_subdomain==0 && id_sim==0) reads src/rec file + // and stores entile src/rec list in src_points and rec_points + // then, the subdom_main process of each simultaneous run group (id_sim==any && subdom_main==true) retains only its own src/rec objects, + // which are actually calculated in those simultaneous run groups + // + + // assigne processor roles + proc_read_srcrec = (subdom_main && id_subdomain==0 && id_sim==0); // process which reads src/rec file (only one process per entire simulation) + proc_store_srcrec = (subdom_main && id_subdomain==0); // process which stores src/rec objects (only one process per simultaneous run group) + + // read src rec file only + if (src_rec_file_exist && proc_read_srcrec) { + + // read source and receiver data, e.g., + // event info: s0 + // data info1 (abs): r0 + // data info2 (cr_dif): r1 r2 + // data info3 (cs_dif): r3 s1 + // + // we generate the data structure: + // | abs | cs_dif | cr_dif | + // | s0 - r0 | s0 - r1 | s0 - r3 | + // | | | | | | + // | | r2 | s1 | + parse_src_rec_file(src_rec_file, \ + src_map_all, \ + rec_map_all, \ + data_map_all, \ + src_id2name_all, \ + rec_id2name_back); + + // read station correction file by all processes + if (sta_correction_file_exist) { + // store all src/rec info + parse_sta_correction_file(sta_correction_file, + rec_map_all); + } + + // copy backups (KEEPED AS THE STATE BEFORE SWAPPING SRC AND REC) + src_map_back = src_map_all; + rec_map_back = rec_map_all; + data_map_back = data_map_all; + src_id2name_back = src_id2name_all; + + // check if src positions are within the domain or not (teleseismic source) + // detected teleseismic source is separated into tele_src_points and tele_rec_points + + std::cout << std::endl << "separate regional and teleseismic src/rec points" << std::endl; + + separate_region_and_tele_src_rec_data(src_map_back, rec_map_back, data_map_back, + src_map_all, rec_map_all, data_map_all, + src_map_tele, rec_map_tele, data_map_tele, + data_type, + N_abs_local_data, + N_cr_dif_local_data, + N_cs_dif_local_data, + N_teleseismic_data, + N_data, + min_lat, max_lat, min_lon, max_lon, min_dep, max_dep, + have_tele_data); + + if (swap_src_rec) { + // we swap the source and receviver for regional earthquakes. After that, we have new data structure: + // Before: + // | abs | cs_dif | cr_dif | + // | s0 - r0 | s0 - r1 | s0 - r3 | + // | | | | | | + // | | r2 | s1 | + // + // After: + // | abs | cr_dif | cs_dif | + // | r0 - s0 | r1 - s0 r2 - s0 | r3 - s0 | + // | | | | | | | + // | | r2 r1 | s1 | + stdout_by_main("Swapping src and rec. This may take few minutes for a large dataset (only regional events will be processed)\n"); + do_swap_src_rec(src_map_all, rec_map_all, data_map_all, src_id2name_all); + int tmp = N_cr_dif_local_data; + N_cr_dif_local_data = N_cs_dif_local_data; + N_cs_dif_local_data = tmp; + } else { + // if we do not swap source and receiver, we need to process cr_dif to include the other source. After that, we have new data structure: + // Before: + // | abs | cs_dif | cr_dif | + // | s0 - r0 | s0 - r1 | s0 - r3 | + // | | | | | | + // | | r2 | s1 | + // + // After: + // | abs | cs_dif | cr_dif | + // | s0 - r0 | s0 - r1 | s0 - r3 s1 - r3 | + // | | | | | | | + // | | r2 | s1 s0 | + do_not_swap_src_rec(src_map_all, rec_map_all, data_map_all, src_id2name_all); + } + + // concatenate resional and teleseismic src/rec points + // + // src_map = src_map_all + src_map_tele + // rec_map = rec_map_all + rec_map_tele + // data_map = data_map_all + data_map_tele + // *_map_tele will be empty after this function + + std::cout << std::endl << "merge regional and teleseismic src/rec points" << std::endl; + + merge_region_and_tele_src(src_map_all, rec_map_all, data_map_all, src_id2name_all, + src_map_tele, rec_map_tele, data_map_tele); + + // abort if number of src_points are less than n_sims + int n_src_points = src_map_all.size(); + if (n_src_points < n_sims){ + std::cout << "Error: number of sources in src_rec_file is less than n_sims. Abort." << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + + } // end of if (src_rec_file_exist && proc_read_srcrec) + + // wait + synchronize_all_world(); + + + // to all the subdom_main processes of each simultaneous run group + if (src_rec_file_exist) { + + if (world_rank==0) + std::cout << "\nsource assign to simultaneous run groups\n" <>>& data_map_tmp, + std::map& src_map_comm_rec_tmp, + std::vector& src_id2name_comm_rec_tmp){ + + if (proc_store_srcrec) { + + // for earthquake having common receiver differential traveltime, the synthetic traveltime should be computed first at each iteration + for(auto iter = data_map_tmp.begin(); iter != data_map_tmp.end(); iter++){ + for (auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++){ + for (auto& data: iter2->second){ + if (data.is_src_pair){ + // add this source and turn to the next source + src_map_comm_rec_tmp[iter->first] = src_map[iter->first]; + // add this source to the list of sources that will be looped in each iteration + // if the source is not in the list, the synthetic traveltime will not be computed + if (std::find(src_id2name_comm_rec_tmp.begin(), src_id2name_comm_rec_tmp.end(), iter->first) == src_id2name_comm_rec_tmp.end()) + src_id2name_comm_rec_tmp.push_back(iter->first); + + break; + } + } + } + } + + // check if this sim group has common source double difference traveltime + if (src_map_comm_rec_tmp.size() > 0){ + src_pair_exists = true; + } + + } // end of if (proc_store_srcrec) + + // flag if any src_pair exists + allreduce_bool_inplace_inter_sim(&src_pair_exists, 1); // inter-sim + allreduce_bool_inplace(&src_pair_exists, 1); // intra-sim / inter subdom + allreduce_bool_inplace_sub(&src_pair_exists, 1); // intra-subdom + +} + +void InputParams::initialize_adjoint_source(){ + // this funtion should be called by proc_store_srcrec + if (!proc_store_srcrec){ + std::cout << "initialize_adjoint_source function is called non-proc_store_srcrec process. aborting." << std::endl; + exit(1); + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + iter->second.adjoint_source = _0_CR; + iter->second.adjoint_source_density = _0_CR; + } +} + +void InputParams::set_adjoint_source(std::string name_rec, CUSTOMREAL adjoint_source){ + + // this funtion should be called by proc_store_srcrec + if (!proc_store_srcrec){ + std::cout << "set_adjoint_source function is called non-proc_store_srcrec process. aborting." << std::endl; + exit(1); + } + + if (rec_map.find(name_rec) != rec_map.end()){ + rec_map[name_rec].adjoint_source = adjoint_source; + } else { + std::cout << "error !!!, undefined receiver name when adding adjoint source: " << name_rec << std::endl; + } +} + +void InputParams::set_adjoint_source_density(std::string name_rec, CUSTOMREAL adjoint_source_density){ + + // this funtion should be called by proc_store_srcrec + if (!proc_store_srcrec){ + std::cout << "set_adjoint_source_density function is called non-proc_store_srcrec process. aborting." << std::endl; + exit(1); + } + + if (rec_map.find(name_rec) != rec_map.end()){ + rec_map[name_rec].adjoint_source_density = adjoint_source_density; + } else { + std::cout << "error !!!, undefined receiver name when adding adjoint source: " << name_rec << std::endl; + } +} + +// gather all arrival times to main simultaneous run group +// common source double difference traveltime is also gathered here +// then store them in data_map_all +void InputParams::gather_all_arrival_times_to_main(){ + + if (proc_store_srcrec) { + + for (int id_src = 0; id_src < nsrc_total; id_src++){ + + // id of simulation group for this source + int id_sim_group = select_id_sim_for_src(id_src, n_sims); + + // broadcast source name + std::string name_src; + if (proc_read_srcrec){ + name_src = src_id2name_all[id_src]; + } + broadcast_str_inter_sim(name_src, 0); + + if (id_sim_group==0) { // the simultaneous run group == 0 is the main simultaneous run group + if (id_sim == 0) { + // copy arrival time to data_info_back + for (auto iter = data_map[name_src].begin(); iter != data_map[name_src].end(); iter++){ + for(int i_data = 0; i_data < (int)iter->second.size(); i_data++){ + // store travel time in all datainfo element of each src-rec pair + data_map_all[name_src][iter->first].at(i_data).travel_time = iter->second.at(i_data).travel_time; + // common source double difference traveltime + data_map_all[name_src][iter->first].at(i_data).cs_dif_travel_time = iter->second.at(i_data).cs_dif_travel_time; + } + } + } else { + // do nothing + } + } else { // this source is calculated in the other simultaneous run group than the main + + // the main group receives the arrival time from the other simultaneous run group + if (id_sim == 0) { + // number of receivers + int nrec; + recv_i_single_sim(&nrec, id_sim_group); + + // loop over receivers + for (int id_rec = 0; id_rec < nrec; id_rec++){ + // receive name of receiver + std::string name_rec; + recv_str_sim(name_rec, id_sim_group); /////// + + // receive number of data + int ndata; + recv_i_single_sim(&ndata, id_sim_group); + + // exit if the number of data is not the same with data_map_all + if (ndata != (int)data_map_all[name_src][name_rec].size()){ + std::cout << "ERROR: the number of data calculated sub simultaneous group is not the same with data_map_all" << std::endl; + std::cout << "name_src = " << name_src << ", name_rec = " << name_rec << std::endl; + std::cout << "ndata = " << ndata << ", data_map_all[name_src][name_rec].size() = " << data_map_all[name_src][name_rec].size() << std::endl; + exit(1); // for rec_3 src_0, ndata = 1 data_map_all[][].size() = 3 + } + + // then receive travel time (and common source double difference traveltime) + for (auto& data: data_map_all[name_src][name_rec]) { + recv_cr_single_sim(&(data.travel_time), id_sim_group); + recv_cr_single_sim(&(data.cs_dif_travel_time), id_sim_group); + } + } + + // the non-main simultaneous run group sends the arrival time to the main group + } else if (id_sim == id_sim_group) { + // send number of receivers + int nrec = data_map[name_src].size(); + send_i_single_sim(&nrec, 0); + + for (auto iter = data_map[name_src].begin(); iter != data_map[name_src].end(); iter++){ + // send name of receiver + send_str_sim(iter->first, 0); + + // send number of data + int ndata = iter->second.size(); + send_i_single_sim(&ndata, 0); + + // then send travel time (and common source double difference traveltime) + for (auto& data: iter->second){ + send_cr_single_sim(&(data.travel_time), 0); + send_cr_single_sim(&(data.cs_dif_travel_time), 0); + } + } + } else { + // do nothing + } + } + + + } // end for id_src + + } // end if (proc_store_srcrec) + + synchronize_all_world(); +} + + +// gather tau_opt to main simultaneous run group +void InputParams::gather_rec_info_to_main(){ + + if (proc_store_srcrec) { + + // broadcast total number of recenver to all procs + int nrec_total = rec_map_all.size(); + broadcast_i_single_inter_sim(nrec_total, 0); + + std::vector name_rec_all; + + if (id_sim==0){ + // assigne tau_opt to rec_map_all from its own rec_map + for (auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + rec_map_all[iter->first].tau_opt = iter->second.tau_opt; + rec_map_all[iter->first].dep = iter->second.dep; + rec_map_all[iter->first].lat = iter->second.lat; + rec_map_all[iter->first].lon = iter->second.lon; + } + + // make a list of receiver names + for (auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + name_rec_all.push_back(iter->first); + } + } + + for (int irec = 0; irec < nrec_total; irec++){ + + // broadcast name of receiver + std::string name_rec; + if (id_sim==0){ + name_rec = name_rec_all[irec]; + } + broadcast_str_inter_sim(name_rec, 0); + + int rec_counter = 0; + CUSTOMREAL tau_tmp=0.0; + CUSTOMREAL dep_tmp=0.0; + CUSTOMREAL lat_tmp=0.0; + CUSTOMREAL lon_tmp=0.0; + + // copy value if rec_map[name_rec] exists + if (rec_map.find(name_rec) != rec_map.end()){ + tau_tmp = rec_map[name_rec].tau_opt; + dep_tmp = rec_map[name_rec].dep; + lat_tmp = rec_map[name_rec].lat; + lon_tmp = rec_map[name_rec].lon; + rec_counter = 1; + } + + // reduce counter and tau_tmp + allreduce_rec_map_var(rec_counter); + allreduce_rec_map_var(tau_tmp); + allreduce_rec_map_var(dep_tmp); + allreduce_rec_map_var(lat_tmp); + allreduce_rec_map_var(lon_tmp); + + // assign tau_opt to rec_map_all + if (rec_counter > 0){ + rec_map_all[name_rec].tau_opt = tau_tmp / (CUSTOMREAL)rec_counter; + rec_map_all[name_rec].dep = dep_tmp / (CUSTOMREAL)rec_counter; + rec_map_all[name_rec].lat = lat_tmp / (CUSTOMREAL)rec_counter; + rec_map_all[name_rec].lon = lon_tmp / (CUSTOMREAL)rec_counter; + } + + } // end for irec + } // end of proc_store_srcrec +} + +// gather traveltimes and calculate synthetic common receiver differential traveltime +void InputParams::gather_traveltimes_and_calc_syn_diff(){ + + if (!src_pair_exists) return; // nothing to share + + // gather all synthetic traveltimes to main simultaneous run group + gather_all_arrival_times_to_main(); + + if(subdom_main) { + + int mpi_tag_send=9999; + int mpi_tag_end=9998; + + // main process calculates differences of synthetic data and send them to other processes + if (id_sim==0){ + // int n_total_src_pair = 0; + + // calculate differences of synthetic data + for (auto iter = data_map_all.begin(); iter != data_map_all.end(); iter++){ + for (auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++){ + for (auto& data: iter2->second){ + if (data.is_src_pair){ + data.cr_dif_travel_time = data_map_all[data.name_src_pair[0]][data.name_rec].at(0).travel_time \ + - data_map_all[data.name_src_pair[1]][data.name_rec].at(0).travel_time; + // n_total_src_pair++; + } + } + } + } + + // send differences of synthetic data to other processes + for (int id_src = 0; id_src < nsrc_total; id_src++){ // MNMN: looping over all of data.id_src_pair[0] + + // id of simulation group for this source + int id_sim_group = select_id_sim_for_src(id_src, n_sims); + + std::string name_src = src_id2name_all[id_src]; // list of src names after swap + + // iterate over receivers + for (auto iter = data_map_all[name_src].begin(); iter != data_map_all[name_src].end(); iter++){ + std::string name_rec = iter->first; + + // iterate over data + for (int i_data = 0; i_data < (int)iter->second.size(); i_data++){ + auto& data = iter->second.at(i_data); + + if (data.is_src_pair){ + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + // name_src1 should be the same as name_src for set_cr_dif_to_src_pair (replace otherwise) + if (name_src1 != name_src){ + std::string tmp = name_src1; + name_src1 = name_src2; + name_src2 = tmp; + } + + if (id_sim_group == 0) { + // this source is calculated in the main simultaneous run group + set_cr_dif_to_src_pair(data_map, name_src1, name_src2, name_rec, data.cr_dif_travel_time); + } else { + // send signal with dummy int + int dummy = 0; + MPI_Send(&dummy, 1, MPI_INT, id_sim_group, mpi_tag_send, inter_sim_comm); + + // send name_src1 + send_str_sim(name_src1, id_sim_group); + // send name_src2 + send_str_sim(name_src2, id_sim_group); + // send name_rec + send_str_sim(name_rec, id_sim_group); + // send index of data + send_i_single_sim(&i_data, id_sim_group); + // send travel time difference + send_cr_single_sim(&(data.cr_dif_travel_time), id_sim_group); + } + } + } + } + } // end for id_src + + // send end signal (start from 1 because 0 is main process) + for (int id_sim = 1; id_sim < n_sims; id_sim++){ + // send dummy integer + int dummy = 0; + MPI_Send(&dummy, 1, MPI_INT, id_sim, mpi_tag_end, inter_sim_comm); + } + + // un-main process receives differences of synthetic data from main process + } else if (id_sim!=0) { + while (true) { + + // wait with mpi probe + MPI_Status status; + MPI_Probe(0, MPI_ANY_TAG, inter_sim_comm, &status); + + // receive signal with dummy int + int dummy = 0; + MPI_Recv(&dummy, 1, MPI_INT, 0, MPI_ANY_TAG, inter_sim_comm, &status); + + // if this signal is for sending data + if (status.MPI_TAG == mpi_tag_send) { + + std::string name_src1, name_src2, name_rec; + + // receive src_name1 + recv_str_sim(name_src1, 0); + // receive src_name2 + recv_str_sim(name_src2, 0); + // receive rec_name + recv_str_sim(name_rec, 0); + // receive index of data + int i_data = 0; + recv_i_single_sim(&i_data, 0); + // receive travel time difference + CUSTOMREAL tmp_ttd = 0; + recv_cr_single_sim(&(tmp_ttd), 0); + set_cr_dif_to_src_pair(data_map, name_src1, name_src2, name_rec, tmp_ttd); + + + // if this signal is for terminating the wait loop + } else if (status.MPI_TAG == mpi_tag_end) { + break; + } + + } + } + } + + synchronize_all_world(); + +} + + + +void InputParams::write_station_correction_file(int i_inv){ + if(use_sta_correction && run_mode == DO_INVERSION) { // if apply station correction + station_correction_file_out = output_dir + "/station_correction_file_step_" + int2string_zero_fill(i_inv) +".dat"; + + std::ofstream ofs; + + if (proc_read_srcrec){ // main processor of subdomain && the first id of subdoumains + + ofs.open(station_correction_file_out); + + ofs << "# stname " << " lat " << " lon " << "elevation " << " station correction (s) " << std::endl; + for(auto iter = rec_map_back.begin(); iter != rec_map_back.end(); iter++){ + SrcRecInfo rec = iter->second; + std::string name_rec = rec.name; + + // do not consider swap for teleseismic data + CUSTOMREAL sta_correct = rec_map_all[name_rec].sta_correct; + + ofs << rec.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec.dep * -1000.0 << " " + << std::fixed << std::setprecision(6) << std::setw(9) << std::right << std::setfill(' ') << sta_correct << " " + << std::endl; + } + + ofs.close(); + + } + synchronize_all_world(); + } +} + +void InputParams::write_src_rec_file(int i_inv, int i_iter) { + + if (src_rec_file_exist){ + + std::ofstream ofs; + + // gather all arrival time info to the main process (need to call even n_sim=1) + gather_all_arrival_times_to_main(); + + // gather tau_opt, lat, lon, dep info + if (run_mode == SRC_RELOCATION || run_mode == INV_RELOC){ + gather_rec_info_to_main(); + + // modify the source location and ortime + if (proc_read_srcrec){ + for(auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + src_map_back[iter->first].lat = iter->second.lat; + src_map_back[iter->first].lon = iter->second.lon; + src_map_back[iter->first].dep = iter->second.dep; + src_map_back[iter->first].year = iter->second.year; + src_map_back[iter->first].month = iter->second.month; + src_map_back[iter->first].day = iter->second.day; + src_map_back[iter->first].hour = iter->second.hour; + src_map_back[iter->first].min = iter->second.min; + src_map_back[iter->first].sec = iter->second.sec + iter->second.tau_opt; + + // correct the output ortime: + SrcRecInfo src = src_map_back[iter->first]; + // step 1, create a time stamp + std::tm timeInfo = {}; + timeInfo.tm_year = src.year - 1900; + timeInfo.tm_mon = src.month - 1; + timeInfo.tm_mday = src.day; + timeInfo.tm_hour = src.hour; + timeInfo.tm_min = src.min; + + // std::cout << "before, src.hour = " << src.hour + // << ", src.min = " << src.min + // << ", src.sec = " << src.sec << std::endl; + + if (src.sec >= - 1.0 && src.sec < 0.0) + timeInfo.tm_sec = static_cast(src.sec) - 1.0; + else + timeInfo.tm_sec = static_cast(src.sec); + + // Convert to time_point + std::time_t rawTime = timegm(&timeInfo); // use timegm for UTC + std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(rawTime); + + // Get new time info + std::time_t timestamp = std::chrono::system_clock::to_time_t(tp); + std::tm newTimeInfo = *std::gmtime(×tamp); // use gmtime to keep it in UTC + + // step 2, correct the output ortime: + src_map_back[iter->first].year = newTimeInfo.tm_year + 1900; + src_map_back[iter->first].month = newTimeInfo.tm_mon + 1; + src_map_back[iter->first].day = newTimeInfo.tm_mday; + src_map_back[iter->first].hour = newTimeInfo.tm_hour; + src_map_back[iter->first].min = newTimeInfo.tm_min; + + if (src.sec >= - 1.0 && src.sec < 0.0) + src_map_back[iter->first].sec = newTimeInfo.tm_sec + (src.sec + 1.0 - static_cast(src.sec)); + else + src_map_back[iter->first].sec = newTimeInfo.tm_sec + (src.sec - static_cast(src.sec)); + + // std::cout << "after, src.hour = " << src_map_back[iter->first].hour + // << ", src.min = " << src_map_back[iter->first].min + // << ", src.sec = " << src_map_back[iter->first].sec << std::endl; + + } + } + } + + + + // write only by the main processor of subdomain && the first id of subdoumains + if (proc_read_srcrec){ + + if (run_mode == ONLY_FORWARD) + src_rec_file_out = output_dir + "/src_rec_file_forward.dat"; + else if (run_mode == DO_INVERSION){ + // write out source and receiver points with current inversion iteration number + src_rec_file_out = output_dir + "/src_rec_file_step_" + int2string_zero_fill(i_inv) +".dat"; + } else if (run_mode == INV_RELOC){ + src_rec_file_out = output_dir + "/src_rec_file_inv_" + int2string_zero_fill(i_inv) +"_reloc_" + int2string_zero_fill(i_iter)+".dat"; + } else if (run_mode == TELESEIS_PREPROCESS) { + src_rec_file_out = output_dir + "/src_rec_file_teleseis_pre.dat"; + } else if (run_mode == SRC_RELOCATION) { + src_rec_file_out = output_dir + "/src_rec_file_reloc_" + int2string_zero_fill(i_iter)+".dat"; + } else if (run_mode == ONED_INVERSION){ + src_rec_file_out = output_dir + "/src_rec_file_step_" + int2string_zero_fill(i_inv) +".dat"; + } else { + std::cerr << "Error: run_mode is not defined" << std::endl; + exit(1); + } + + // open file + ofs.open(src_rec_file_out); + + for (int i_src = 0; i_src < (int)src_id2name_back.size(); i_src++){ + + std::string name_src = src_id2name_back[i_src]; + SrcRecInfo src = src_map_back[name_src]; + bool is_tele = src.is_out_of_region; // true for teleseismic source + + // format should be the same as input src_rec_file + // source line : id_src year month day hour min sec lat lon dep_km mag num_recs id_event + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << src.year << " " << src.month << " " << src.day << " " + << src.hour << " " << src.min << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.sec << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.dep << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.mag << " " + << std::setw(5) << std::right << std::setfill(' ') << src.n_data << " " + << src.name << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << 1.0 // the weight of source is assigned to data + << std::endl; + + + // iterate data lines of i_src + for (auto& name_data : rec_id2name_back[i_src]){ + // name_data has one receiver (r0), or a receiver pair (r0+r1), or one source and one receiver (r0+s1) + + std::string name_rec1, name_rec2, name_src2; // receivers' (or source's) name (before swap) + + // data type flag + bool src_rec_data = false; + bool src_pair_data = false; + bool rec_pair_data = false; + + // store reference of data to be written + DataInfo& data = const_cast(data_map_back[name_src][name_data.at(0)].at(0)); // dummy copy + + if (name_data.size() == 2 && name_data.at(1) == "abs"){ // abs data + name_rec1 = name_data.at(0); + src_rec_data = true; + if (get_is_srcrec_swap() && !is_tele) + data = get_data_src_rec(data_map_all[name_rec1][name_src]); + else + data = get_data_src_rec(data_map_all[name_src][name_rec1]); + + } else if (name_data.size() == 3 && name_data.at(2) == "cs"){ // cs_dif data + name_rec1 = name_data.at(0); + name_rec2 = name_data.at(1); + rec_pair_data = true; + if (get_is_srcrec_swap() && !is_tele) // cs_dif data -> cr_dif data + data = get_data_src_pair(data_map_all, name_rec1, name_rec2, name_src); + else // cs_dif data + data = get_data_rec_pair(data_map_all, name_src, name_rec1, name_rec2); + + } else if (name_data.size() == 3 && name_data.at(2) == "cr"){ // cr_dif data + name_rec1 = name_data.at(0); + name_src2 = name_data.at(1); + src_pair_data = true; + if (get_is_srcrec_swap() && !is_tele) // cr_dif -> cs_dif + data = get_data_rec_pair(data_map_all, name_rec1, name_src, name_src2); + else // cr_dif + data = get_data_src_pair(data_map_all, name_src, name_src2, name_rec1); + + } else{ // error data type + std::cerr << "Error: incorrect data type in rec_id2name_back" << std::endl; + exit(1); + } + + + // absolute traveltime data + if (src_rec_data){ + SrcRecInfo rec = rec_map_back[name_rec1]; + CUSTOMREAL travel_time = data.travel_time; + + // receiver line : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec.id << " " + << rec.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << -1.0*rec.dep*1000.0 << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << travel_time << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + + // common source differential traveltime + } else if (rec_pair_data){ + // common source differential traveltime data + CUSTOMREAL cs_dif_travel_time; + + if (get_is_srcrec_swap() && !is_tele){ // reverse swap src and rec + cs_dif_travel_time = data.cr_dif_travel_time; + } else {// do not swap + cs_dif_travel_time = data.cs_dif_travel_time; + } + + SrcRecInfo& rec1 = rec_map_back[name_rec1]; + SrcRecInfo& rec2 = rec_map_back[name_rec2]; + + // receiver pair line : id_src id_rec1 name_rec1 lat1 lon1 elevation_m1 id_rec2 name_rec2 lat2 lon2 elevation_m2 phase differential_arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec1.id << " " + << rec1.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec1.dep*1000.0 << " " + << std::setw(5) << std::right << std::setfill(' ') << rec2.id << " " + << rec2.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec2.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec2.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec2.dep*1000.0 << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << cs_dif_travel_time << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + + // common receiver differential traveltime + } else if (src_pair_data){ + // common receiver differential traveltime data + CUSTOMREAL cr_dif_travel_time; + + if (get_is_srcrec_swap() && !is_tele){ // reverse swap src and rec + cr_dif_travel_time = data.cs_dif_travel_time; + } else {// do not swap + cr_dif_travel_time = data.cr_dif_travel_time; + } + + SrcRecInfo& rec1 = rec_map_back[name_rec1]; + SrcRecInfo& src2 = src_map_back[name_src2]; + + // receiver pair line : id_src id_rec1 name_rec1 lat1 lon1 elevation_m1 id_rec2 name_rec2 lat2 lon2 elevation_m2 phase differential_arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec1.id << " " + << rec1.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec1.dep*1000.0 << " " + << std::setw(5) << std::right << std::setfill(' ') << src2.id << " " + << src2.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.dep << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << cr_dif_travel_time << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + } + + } // end of rec loop + + } // end of for (int i_src = 0; i_src < (int)src_name_list.size(); i_src++) + + // close file + ofs.close(); + + // only for source relocation, output relocated observational data for tomography + if (run_mode == SRC_RELOCATION || run_mode == INV_RELOC) { + if (run_mode == INV_RELOC) + src_rec_file_out = output_dir + "/src_rec_file_inv_" + int2string_zero_fill(i_inv) +"_reloc_" + int2string_zero_fill(i_iter)+"_obs.dat"; + else if (run_mode == SRC_RELOCATION) + src_rec_file_out = output_dir + "/src_rec_file_reloc_" + int2string_zero_fill(i_iter)+"_obs.dat"; + + // open file + ofs.open(src_rec_file_out); + + for (int i_src = 0; i_src < (int)src_id2name_back.size(); i_src++){ + + std::string name_src = src_id2name_back[i_src]; + SrcRecInfo src = src_map_back[name_src]; + bool is_tele = src.is_out_of_region; // true for teleseismic source + + // format should be the same as input src_rec_file + // source line : id_src yearm month day hour min sec lat lon dep_km mag num_recs id_event + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << src.year << " " << src.month << " " << src.day << " " + << src.hour << " " << src.min << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.sec << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src.dep << " " + << std::fixed << std::setprecision(2) << std::setw(5) << std::right << std::setfill(' ') << src.mag << " " + << std::setw(5) << std::right << std::setfill(' ') << src.n_data << " " + << src.name << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << 1.0 // the weight of source is assigned to data + << std::endl; + + // iterate data lines of i_src + for (auto& name_data : rec_id2name_back[i_src]){ + // name_data has one receiver (r0), or a receiver pair (r0+r1), or one source and one receiver (r0+s1) + + std::string name_rec1, name_rec2, name_src2; // receivers' (or source's) name (before swap) + + // data type flag + bool src_rec_data = false; + bool src_pair_data = false; + bool rec_pair_data = false; + + // store reference of data to be written + DataInfo& data = const_cast(data_map_back[name_src][name_data.at(0)].at(0)); // dummy copy + + if (name_data.size() == 2 && name_data.at(1) == "abs"){ // abs data + name_rec1 = name_data.at(0); + src_rec_data = true; + if (get_is_srcrec_swap() && !is_tele) + data = get_data_src_rec(data_map_all[name_rec1][name_src]); // valid, for relocation, sources and receivers are always swapped + else + data = get_data_src_rec(data_map_all[name_src][name_rec1]); // invalid + } else if (name_data.size() == 3 && name_data.at(2) == "cs"){ // cs_dif data + name_rec1 = name_data.at(0); + name_rec2 = name_data.at(1); + rec_pair_data = true; + if (get_is_srcrec_swap() && !is_tele) // cs_dif data -> cr_dif data + data = get_data_src_pair(data_map_all, name_rec1, name_rec2, name_src); // valid, swapped + else // cs_dif data + data = get_data_rec_pair(data_map_all, name_src, name_rec1, name_rec2); // invalid + } else if (name_data.size() == 3 && name_data.at(2) == "cr"){ // cr_dif data + name_rec1 = name_data.at(0); + name_src2 = name_data.at(1); + src_pair_data = true; + if (get_is_srcrec_swap() && !is_tele) // cr_dif -> cs_dif + data = get_data_rec_pair(data_map_all, name_rec1, name_src, name_src2); // These data are not inverted in relocation. But we need to print them out. + else // cr_dif + data = get_data_src_pair(data_map_all, name_src, name_src2, name_rec1); // invalid + + } else{ // error data type + std::cerr << "Error: incorrect data type in rec_id2name_back" << std::endl; + exit(1); + } + + + // original absolute traveltime data + if (src_rec_data){ + + // check mandatory condition for earthquake relocation + if (!get_is_srcrec_swap()) { + std::cerr << "Error: src_rec_data is not swapped in src relocation mode!" << std::endl; + exit(1); + } + + SrcRecInfo rec = rec_map_back[name_rec1]; + CUSTOMREAL travel_time_obs = data.travel_time_obs - rec_map_all[name_src].tau_opt; + + // receiver line : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec.id << " " + << rec.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << rec.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << -1.0*rec.dep*1000.0 << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << travel_time_obs << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + + // original common source differential traveltime (not used in relocation currently, but still need to be printed out) + } else if (rec_pair_data){ + + // check mandatory condition for earthquake relocation + if (!get_is_srcrec_swap()) { + std::cerr << "Error: src_rec_data is not swapped in src relocation mode!" << std::endl; + exit(1); + } + + // common source differential traveltime data + SrcRecInfo& rec1 = rec_map_back[name_rec1]; + SrcRecInfo& rec2 = rec_map_back[name_rec2]; + CUSTOMREAL cs_dif_travel_time_obs = data.cr_dif_travel_time_obs; + + // receiver pair line : id_src id_rec1 name_rec1 lat1 lon1 elevation_m1 id_rec2 name_rec2 lat2 lon2 elevation_m2 phase differential_arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec1.id << " " + << rec1.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec1.dep*1000.0 << " " + << std::setw(5) << std::right << std::setfill(' ') << rec2.id << " " + << rec2.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec2.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec2.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec2.dep*1000.0 << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << cs_dif_travel_time_obs << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + + // common receiver differential traveltime + } else if (src_pair_data){ // common receiver differential traveltime + // check mandatory condition for earthquake relocation + if (!get_is_srcrec_swap()) { + std::cerr << "Error: src_rec_data is not swapped in src relocation mode!" << std::endl; + exit(1); + } + + // common receiver differential traveltime data + SrcRecInfo& rec1 = rec_map_back[name_rec1]; + SrcRecInfo& src2 = src_map_back[name_src2]; + CUSTOMREAL cr_dif_travel_time_obs = data.cs_dif_travel_time_obs - rec_map_all[name_src].tau_opt + rec_map_all[name_src2].tau_opt; + + + // receiver pair line : id_src id_rec1 name_rec1 lat1 lon1 elevation_m1 id_rec2 name_rec2 lat2 lon2 elevation_m2 phase differential_arival_time + ofs << std::setw(7) << std::right << std::setfill(' ') << src.id << " " + << std::setw(5) << std::right << std::setfill(' ') << rec1.id << " " + << rec1.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << rec1.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << -1.0*rec1.dep*1000.0 << " " + << std::setw(5) << std::right << std::setfill(' ') << src2.id << " " + << src2.name << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.lat << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.lon << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << src2.dep << " " + << data.phase << " " + << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << cr_dif_travel_time_obs << " " + << std::fixed << std::setprecision(4) << std::setw(6) << std::right << std::setfill(' ') << data.data_weight + << std::endl; + } + } // end of rec loop + + } // end of src loop + + // close file + ofs.close(); + + } // end of run_mode == SRC_RELOCATION + } // end if (proc_read_srcrec) + + + } // end of src_rec_file_exist + + // wait till the main process finishes to write the output file + synchronize_all_world(); ///////////////////// + +} + + +// check contradictory parameters +void InputParams::check_contradictions(){ + + // if run_mode == 0 then the max_iter should be 1 + if (run_mode == ONLY_FORWARD && max_iter_inv > 1){ + if(myrank == 0){ + std::cout << "Warning: run_mode = 0, max_iter should be 1" << std::endl; + } + max_iter_inv = 1; + } + + if (n_subprocs > 1 && sweep_type != SWEEP_TYPE_LEVEL){ + if(myrank == 0){ + std::cout << "Warning: n_subprocs > 1 but do not use SWEEP_TYPE_LEVEL, sweep_type changes to SWEEP_TYPE_LEVEL" << std::endl; + } + sweep_type = SWEEP_TYPE_LEVEL; + } + + // if run_mode == 4 (1d inversion), only source parallelization is allowed + if (run_mode == 4 && (ndiv_k > 1 || ndiv_j > 1 || ndiv_i > 1 || n_subprocs > 1)){ + if(myrank == 0){ + std::cout << "Error: run_mode = 4, only source parallelization is allowed" << std::endl; + std::cout << "Please set ndiv_rtp: [1,1,1] and nproc_sub: 1 in the input_params.yaml file" << std::endl; + } + exit(1); + } + + // if run_mode == 4, only absolute traveltime data is allowed + if (run_mode == 4){ + if(myrank == 0){ + std::cout << "Notify: since run_mode = 4, only absolute traveltime data is allowed" << std::endl; + std::cout << "use_abs_time is set to be true" << std::endl; + use_abs = true; + std::cout << "use_cs_time is set to be false" << std::endl; + use_cs = false; + std::cout << "use_cr_time is set to be false" << std::endl; + use_cr = false; + } + + } + +#ifdef USE_CUDA + if (use_gpu){ + + if (sweep_type != SWEEP_TYPE_LEVEL || n_subprocs != 1){ + if(world_rank == 0) { + std::cout << "ERROR: In GPU mode, sweep_type must be 1 and n_subprocs must be 1." << std::endl; + std::cout << "Abort." << std::endl; + } + MPI_Finalize(); + exit(1); + } + } +#else + if (use_gpu){ + if(world_rank == 0) { + std::cout << "ERROR: TOMOATT is not compiled with CUDA." << std::endl; + std::cout << "Abort." << std::endl; + } + MPI_Finalize(); + exit(1); + } +#endif +} + + + +// station correction kernel +void InputParams::station_correction_update(CUSTOMREAL stepsize){ + + if (!use_sta_correction) + return; + + // station correction kernel is generated in the main process and sent the value to all other processors + + // step 1, gather all arrival time info to the main process + gather_all_arrival_times_to_main(); + + // update station correction in rank0 (proc_read_srcrec = (id_sim = 0 && id_subdomain = 0 && subdom_main = true && )) + // update rec_map_full, which comprises all the receivers + if (proc_read_srcrec){ + + // step 2 initialize the kernel K_{\hat T_i} + for (auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + iter->second.sta_correct_kernel = 0.0; + } + + CUSTOMREAL max_kernel = 0.0; + + // step 3, calculate the kernel + for (auto it_src = data_map_all.begin(); it_src != data_map_all.end(); it_src++){ + for (auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + + for (const auto& data : it_rec->second){ + + // absolute traveltime + if (data.is_src_rec){ + std::cout << "teleseismic data, absolute traveltime is not supported now" << std::endl; + + // common receiver differential traveltime + } else if (data.is_src_pair) { + std::cout << "teleseismic data, common receiver differential traveltime is not supported now" << std::endl; + + // common source differential traveltime + } else if (data.is_rec_pair) { // here is for checking the flag (if data is swapped, is_rec_pair was originally is_src_pair) + std::string name_src = data.name_src; + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + CUSTOMREAL syn_dif_time = data.cs_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cs_dif_travel_time_obs; + rec_map_all[name_rec1].sta_correct_kernel += _2_CR *(syn_dif_time - obs_dif_time \ + + rec_map_all[name_rec1].sta_correct - rec_map_all[name_rec2].sta_correct)*data.weight; + rec_map_all[name_rec2].sta_correct_kernel -= _2_CR *(syn_dif_time - obs_dif_time \ + + rec_map_all[name_rec1].sta_correct - rec_map_all[name_rec2].sta_correct)*data.weight; + + max_kernel = std::max(max_kernel,std::abs(rec_map_all[name_rec1].sta_correct_kernel)); + max_kernel = std::max(max_kernel,std::abs(rec_map_all[name_rec2].sta_correct_kernel)); + } + + } + } + } + + // step 4, update station correction + for (auto iter = rec_map_all.begin(); iter!=rec_map_all.end(); iter++){ + iter->second.sta_correct -= iter->second.sta_correct_kernel / max_kernel * stepsize; + } + + } // end of if (proc_read_srcrec) + + // step 5, send the station correction to all procesors. So they can consider station correction when calculating obj and adj source. + if (proc_store_srcrec){ + CUSTOMREAL sta_correct = 0.0; + std::vector rec_map_all_name; + std::string sta_name; + int Nsta = 0; + // for rank0, who has rec_map_all + if (id_sim == 0){ + Nsta = rec_map_all.size(); + for (auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + rec_map_all_name.push_back(iter->first); + } + } + broadcast_i_single_inter_sim(Nsta,0); + + // loop over all receivers + for (int i = 0; i < Nsta; i++){ + // broadcast sta_name and sta_correction to all processors + if (id_sim == 0){ + sta_name = rec_map_all_name[i]; + sta_correct = rec_map_all[sta_name].sta_correct; + } + broadcast_str_inter_sim(sta_name,0); + broadcast_cr_single_inter_sim(sta_correct,0); + + // update rec_map + if (rec_map.find(sta_name) != rec_map.end()){ + rec_map[sta_name].sta_correct = sta_correct; + } + } + } +} + +void InputParams::modify_swapped_source_location() { + if (proc_store_srcrec) { + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + src_map_back[iter->first].lat = iter->second.lat; + src_map_back[iter->first].lon = iter->second.lon; + src_map_back[iter->first].dep = iter->second.dep; + src_map_back[iter->first].sec = iter->second.sec + iter->second.tau_opt; + } + } +} + + +template +void InputParams::allreduce_rec_map_var(T& var){ + + T tmp_var = (T)var; + + if (subdom_main){ + // allreduce sum the variable var of rec_map[name_rec] to all + // some process has rec_map[name_rec], some process does not have it + + // step 1, gather all the variable var + + // allreduce the variable var to the main process + // if T is CUSTOMREAL + if (std::is_same::value){ + CUSTOMREAL v = tmp_var; // for compiler warning + allreduce_cr_sim_single_inplace(v); + tmp_var = v; // for compiler warning + // if T is int + } else if (std::is_same::value){ + int v = tmp_var; // for compiler warning + allreduce_i_sim_single_inplace(v); + tmp_var = v; // for compiler warning + } else { + //error + std::cout << "error in allreduce_rec_map_var" << std::endl; + exit(1); + } + } + + // assign the value to the variable var + var = tmp_var; + +} + + +void InputParams::allreduce_rec_map_vobj_src_reloc(){ + if(proc_store_srcrec){ + // send total number of rec_map_all.size() to all processors + int n_rec_all; + std::vector name_rec_all; + if (proc_read_srcrec){ + n_rec_all = rec_map_all.size(); + for (auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + name_rec_all.push_back(iter->first); + } + } + + // broadcast n_rec_all to all processors + broadcast_i_single_inter_sim(n_rec_all,0); + + for (int i_rec = 0; i_rec < n_rec_all; i_rec++){ + // broadcast name_rec_all[i_rec] to all processors + std::string name_rec; + if (id_sim == 0) + name_rec = name_rec_all[i_rec]; + + broadcast_str_inter_sim(name_rec,0); + + // allreduce the vobj_src_reloc of rec_map_all[name_rec] to all processors + if (rec_map.find(name_rec) != rec_map.end()){ + allreduce_rec_map_var(rec_map[name_rec].vobj_src_reloc); + + } else { + CUSTOMREAL dummy = 0; + allreduce_rec_map_var(dummy); + + } + } + } +} + + +void InputParams::allreduce_rec_map_grad_src(){ + if(proc_store_srcrec){ + // send total number of rec_map_all.size() to all processors + int n_rec_all; + std::vector name_rec_all; + if (proc_read_srcrec){ + n_rec_all = rec_map_all.size(); + for (auto iter = rec_map_all.begin(); iter != rec_map_all.end(); iter++){ + name_rec_all.push_back(iter->first); + } + } + + // broadcast n_rec_all to all processors + broadcast_i_single_inter_sim(n_rec_all,0); + + for (int i_rec = 0; i_rec < n_rec_all; i_rec++){ + // broadcast name_rec_all[i_rec] to all processors + std::string name_rec; + if (id_sim == 0) + name_rec = name_rec_all[i_rec]; + + broadcast_str_inter_sim(name_rec,0); + + // allreduce the grad_chi_ijk of rec_map_all[name_rec] to all processors + if (rec_map.find(name_rec) != rec_map.end()){ + allreduce_rec_map_var(rec_map[name_rec].grad_chi_i); + allreduce_rec_map_var(rec_map[name_rec].grad_chi_j); + allreduce_rec_map_var(rec_map[name_rec].grad_chi_k); + allreduce_rec_map_var(rec_map[name_rec].grad_tau); + allreduce_rec_map_var(rec_map[name_rec].Ndata); + } else { + CUSTOMREAL dummy = 0; + allreduce_rec_map_var(dummy); + dummy = 0; + allreduce_rec_map_var(dummy); + dummy = 0; + allreduce_rec_map_var(dummy); + dummy = 0; + allreduce_rec_map_var(dummy); + int dummy_int = 0; + allreduce_rec_map_var(dummy_int); + } + } + } +} + +void InputParams::check_increasing(CUSTOMREAL* arr_inv_grid, int n_grid, std::string name){ + for (int i = 0; i < n_grid-1; i++){ + if(arr_inv_grid[i] >= arr_inv_grid[i+1]){ + std::cout << "ERROR: inversion grid of " << name << " should be monotonically increasing: " << arr_inv_grid[i] << ", " << arr_inv_grid[i+1] << std::endl; + exit(1); + } + } +} + +void InputParams::check_inv_grid(){ + // check point 1, inversion grid should be monotonically increasing + check_increasing(dep_inv, n_inv_r_flex, "depth"); + check_increasing(lat_inv, n_inv_t_flex, "latitude"); + check_increasing(lon_inv, n_inv_p_flex, "longitude"); + if(invgrid_ani){ + check_increasing(dep_inv_ani, n_inv_r_flex_ani, "depth_ani"); + check_increasing(lat_inv_ani, n_inv_t_flex_ani, "latitude_ani"); + check_increasing(lon_inv_ani, n_inv_p_flex_ani, "longitude_ani"); + } + + // check point 2, inversion grid should cover the model + if(myrank == 0 && id_sim ==0){ + std::cout << "checking the inversion grid ..." << std::endl; + std::cout << std::endl; + } + + check_lower_bound(dep_inv, n_inv_r_flex, min_dep, "depth"); + check_upper_bound(dep_inv, n_inv_r_flex, max_dep, "depth"); + check_lower_bound(lat_inv, n_inv_t_flex, min_lat, "latitude"); + check_upper_bound(lat_inv, n_inv_t_flex, max_lat, "latitude"); + check_lower_bound(lon_inv, n_inv_p_flex, min_lon, "longitude"); + check_upper_bound(lon_inv, n_inv_p_flex, max_lon, "longitude"); + if(invgrid_ani){ + check_lower_bound(dep_inv_ani, n_inv_r_flex_ani, min_dep, "depth_ani"); + check_upper_bound(dep_inv_ani, n_inv_r_flex_ani, max_dep, "depth_ani"); + check_lower_bound(lat_inv_ani, n_inv_t_flex_ani, min_lat, "latitude_ani"); + check_upper_bound(lat_inv_ani, n_inv_t_flex_ani, max_lat, "latitude_ani"); + check_lower_bound(lon_inv_ani, n_inv_p_flex_ani, min_lon, "longitude_ani"); + check_upper_bound(lon_inv_ani, n_inv_p_flex_ani, max_lon, "longitude_ani"); + } + +} + +void InputParams::check_lower_bound(CUSTOMREAL*& arr, int& n_grid, CUSTOMREAL lower_bound, std::string name){ + + if (arr[0] > lower_bound){ + + CUSTOMREAL grid2 = std::min(lower_bound, 2*arr[0] - arr[1]); + CUSTOMREAL grid1 = 2*grid2 - arr[0]; + if(myrank == 0 && id_sim ==0){ + std::cout << "lower bound of " << name << " inversion grid " << arr[0] << " is greater than computational domain " + << lower_bound << std::endl; + std::cout << "Two additional inversion grid: " << grid1 << ", " << grid2 << " are added." << std::endl; + std::cout << std::endl; + } + CUSTOMREAL* new_arr = new CUSTOMREAL[n_grid+2]; + new_arr[0] = grid1; + new_arr[1] = grid2; + for (int i = 0; i < n_grid; i++){ + new_arr[i+2] = arr[i]; + } + delete[] arr; + arr = new_arr; + n_grid += 2; + + } else if (arr[0] <= lower_bound && arr[1] > lower_bound){ + + CUSTOMREAL grid1 = 2*arr[0] - arr[1]; + if(myrank == 0 && id_sim ==0){ + std::cout << "sub lower bound of " << name << " inversion grid " << arr[1] << " is greater than computational domain " + << lower_bound << std::endl; + std::cout << "One additional inversion grid: " << grid1 << " is added." << std::endl; + std::cout << std::endl; + } + CUSTOMREAL* new_arr = new CUSTOMREAL[n_grid+1]; + new_arr[0] = grid1; + for (int i = 0; i < n_grid; i++){ + new_arr[i+1] = arr[i]; + } + delete[] arr; + arr = new_arr; + n_grid += 1; + } +} + +void InputParams::check_upper_bound(CUSTOMREAL*& arr, int& n_grid, CUSTOMREAL upper_bound, std::string name){ + if (arr[n_grid-1] < upper_bound){ + + CUSTOMREAL grid1 = std::max(upper_bound, 2*arr[n_grid-1] - arr[n_grid-2]); + CUSTOMREAL grid2 = 2*grid1 - arr[n_grid-1]; + if(myrank == 0 && id_sim ==0){ + std::cout << "upper bound of " << name << " inversion grid " << arr[n_grid-1] << " is less than computational domain " + << upper_bound << std::endl; + std::cout << "Two additional inversion grid: " << grid1 << ", " << grid2 << " are added." << std::endl; + std::cout << std::endl; + } + CUSTOMREAL* new_arr = new CUSTOMREAL[n_grid+2]; + for (int i = 0; i < n_grid; i++){ + new_arr[i] = arr[i]; + } + new_arr[n_grid] = grid1; + new_arr[n_grid+1] = grid2; + delete[] arr; + arr = new_arr; + n_grid += 2; + + } else if (arr[n_grid-1] >= upper_bound && arr[n_grid-2] < upper_bound){ + + CUSTOMREAL grid1 = 2*arr[n_grid-1] - arr[n_grid-2]; + if(myrank == 0 && id_sim ==0){ + std::cout << "sub upper bound of " << name << " inversion grid " << arr[n_grid-2] << " is less than computational domain " + << upper_bound << std::endl; + std::cout << "One additional inversion grid: " << grid1 << " is added." << std::endl; + std::cout << std::endl; + } + CUSTOMREAL* new_arr = new CUSTOMREAL[n_grid+1]; + for (int i = 0; i < n_grid; i++){ + new_arr[i] = arr[i]; + } + new_arr[n_grid] = grid1; + delete[] arr; + arr = new_arr; + n_grid += 1; + } +} diff --git a/src/inv_grid.cpp b/src/inv_grid.cpp new file mode 100644 index 0000000..ccf4a2e --- /dev/null +++ b/src/inv_grid.cpp @@ -0,0 +1,229 @@ +#include "inv_grid.h" + + +// +// utilities for inversion grid setup +// + +#define ON_R 0 +#define ON_T 1 +#define ON_P 2 + + +InvGrid1dBase inv_1d_grid_selector(InputParams& IP, const int id_axis, const int n_points) { + if (id_axis == ON_R) + return InvGrid1d(IP, n_points, IP.get_dep_inv()); // regular grid for radius + else if (id_axis == ON_T) + return InvGrid1d(IP, n_points, IP.get_lat_inv(), IP.get_trapezoid(), n_inv_K_loc, IP.get_dep_inv()); // regular grid for lat + else if (id_axis == ON_P) + return InvGrid1d(IP, n_points, IP.get_lon_inv(), IP.get_trapezoid(), n_inv_K_loc, IP.get_dep_inv()); // regular grid for lat + else { + std::cout << "unknown id_axis" << std::endl; + exit(1); + } +} + + +InvGrid1dBase inv_1d_grid_selector_ani(InputParams& IP, const int id_axis, const int n_points) { + if (id_axis == ON_R) + return InvGrid1d(IP, n_points, IP.get_dep_inv_ani()); // regular grid for radius + else if (id_axis == ON_T) + return InvGrid1d(IP, n_points, IP.get_lat_inv_ani(), IP.get_trapezoid_ani(), n_inv_K_loc_ani, IP.get_dep_inv_ani()); // regular grid for lat + else if (id_axis == ON_P) + return InvGrid1d(IP, n_points, IP.get_lon_inv_ani(), IP.get_trapezoid_ani(), n_inv_K_loc_ani, IP.get_dep_inv_ani()); // regular grid for lat + else { + std::cout << "unknown id_axis" << std::endl; + exit(1); + } +} + + +// +// Inversion grid class definition +// + + +InvGrid::InvGrid(InputParams& IP) { + + // check the inversion grid + IP.check_inv_grid(); + + // read the parameters and store them in this class + get_inv_grid_params(IP); + + // create 1D inversion grid for each dimension. + // t and p grids are not 1D but 2D grids for a trapezoidal definition of the grid. + + // r (radius) grid + r = inv_1d_grid_selector(IP, ON_R, n_inv_K_loc); + // t (latitude) grid + t = inv_1d_grid_selector(IP, ON_T, n_inv_J_loc); + // p (longitude) grid + p = inv_1d_grid_selector(IP, ON_P, n_inv_I_loc); + + // inversion grid for anisotropic parameters + if (IP.get_invgrid_ani()){ + // r (radius) grid + r_ani = inv_1d_grid_selector_ani(IP, ON_R, n_inv_K_loc_ani); + // t (latitude) grid + t_ani = inv_1d_grid_selector_ani(IP, ON_T, n_inv_J_loc_ani); + // p (longitude) grid + p_ani = inv_1d_grid_selector_ani(IP, ON_P, n_inv_I_loc_ani); + } else { + // use the same inversion grid with slowessw + r_ani = r; + t_ani = t; + p_ani = p; + } +} + + +InvGrid::~InvGrid() { +} + +void InvGrid::get_inv_grid_params(InputParams& IP) { + + n_inv_grids = IP.get_n_inversion_grid(); + + // inversion grid for velocity + n_inv_K_loc = IP.get_n_inv_r_flex(); + n_inv_J_loc = IP.get_n_inv_t_flex(); + n_inv_I_loc = IP.get_n_inv_p_flex(); + + // inversion grid for anisotropy + if(IP.get_invgrid_ani()){ + n_inv_K_loc_ani = IP.get_n_inv_r_flex_ani(); + n_inv_J_loc_ani = IP.get_n_inv_t_flex_ani(); + n_inv_I_loc_ani = IP.get_n_inv_p_flex_ani(); + } else { + // use the same inversion grid with slowessw + n_inv_I_loc_ani = n_inv_I_loc; + n_inv_J_loc_ani = n_inv_J_loc; + n_inv_K_loc_ani = n_inv_K_loc; + } +} + + +void InvGrid::write_inversion_grid_to_file(){ + if(world_rank == 0){ + std::ofstream ofs; + + std::string inversion_grid_file_out = output_dir + "/inversion_grid.txt"; + ofs.open(inversion_grid_file_out); + + // inversion grid of velocity + for(int l = 0; l < n_inv_grids; l++){ + ofs << l << " " << n_inv_K_loc << " " << n_inv_J_loc << " " << n_inv_I_loc << std::endl; // number of ivnersion grid + + for(int k = 0; k < n_inv_K_loc; k++){ + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << radius2depth(r.arr[I2V_INV_GRIDS_1DK(k,l)]) << " "; + ofs << std::endl; + for(int j =0; j < n_inv_J_loc; j++) + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << t.arr[I2V_INV_GRIDS_2DJ(j,k,l)]*RAD2DEG << " "; + ofs << std::endl; + for(int i =0; i < n_inv_I_loc; i++) + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << p.arr[I2V_INV_GRIDS_2DI(i,k,l)]*RAD2DEG << " "; + ofs << std::endl; + } + } + // inversion grid of anisotropy + for(int l = 0; l < n_inv_grids; l++){ + ofs << l << " " << n_inv_K_loc_ani << " " << n_inv_J_loc_ani << " " << n_inv_I_loc_ani << std::endl; // number of ivnersion grid + for(int k = 0; k < n_inv_K_loc_ani; k++){ + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << radius2depth(r_ani.arr[I2V_INV_ANI_GRIDS_1DK(k,l)]) << " "; + ofs << std::endl; + for(int j =0; j < n_inv_J_loc_ani; j++) + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << t_ani.arr[I2V_INV_ANI_GRIDS_1DJ(j,k,l)]*RAD2DEG << " "; + ofs << std::endl; + for(int i =0; i < n_inv_I_loc_ani; i++) + ofs << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + << p_ani.arr[I2V_INV_ANI_GRIDS_1DI(i,k,l)]*RAD2DEG << " "; + ofs << std::endl; + } + } + } +} + +// grid position for radius +InvGrid1d::InvGrid1d(InputParams& IP, const int n_inv_loc, + const CUSTOMREAL* input_pos){ + // set n + n = n_inv_loc*n_inv_grids; + + // allocate memory for the grid + arr = new CUSTOMREAL[n]; + + // create a copy array of input_pos + CUSTOMREAL* arr_input_pos = new CUSTOMREAL[n_inv_loc]; + + // dep (km) -> r (km) + for (int i = 0; i < n_inv_loc; i++) + arr_input_pos[i] = depth2radius(input_pos[i]); + + for (int i = 0; i < n_inv_loc; i++){ + if (i < n_inv_loc-1) + dinv_l = (arr_input_pos[i+1] - arr_input_pos[i]) / n_inv_grids; + else + dinv_l = (arr_input_pos[n_inv_loc-1] - arr_input_pos[n_inv_loc-2]) / n_inv_grids; + + for (int l = 0; l < n_inv_grids; l++) + arr[I2V_INV_GRIDS_1D_GENERIC(i, l, n_inv_loc)] = arr_input_pos[i] + l*dinv_l; + } + + delete[] arr_input_pos; +} + +// grid position for lat and lon +InvGrid1d::InvGrid1d(InputParams& IP, const int n_inv_loc, + const CUSTOMREAL* input_pos, const CUSTOMREAL* input_trapezoid, const int n_inv_loc_k, const CUSTOMREAL* input_dep) { + // set n + n = n_inv_loc*n_inv_loc_k*n_inv_grids; + + // allocate memory for the grid + arr = new CUSTOMREAL[n]; + + // create a copy array of input_pos + CUSTOMREAL* arr_input_pos = new CUSTOMREAL[n_inv_loc]; + + // lat,lon (deg) -> t,p (rad) + for (int i = 0; i < n_inv_loc; i++) + arr_input_pos[i] = input_pos[i]*DEG2RAD; + + // middle point of arr_input_pos + CUSTOMREAL mid_value = 0; + if (n_inv_loc%2 == 0) + mid_value = (arr_input_pos[n_inv_loc/2-1] + arr_input_pos[n_inv_loc/2])/2; + else + mid_value = arr_input_pos[(n_inv_loc-1)/2]; + + for (int i = 0; i < n_inv_loc; i++){ + if (i < n_inv_loc-1) + dinv_l = (arr_input_pos[i+1] - arr_input_pos[i]) / n_inv_grids; + else + dinv_l = (arr_input_pos[n_inv_loc-1] - arr_input_pos[n_inv_loc-2]) / n_inv_grids; + + for (int l = 0; l < n_inv_grids; l++) { + for (int k = 0; k < n_inv_loc_k; k++){ + CUSTOMREAL ratio = 1.0; + if (input_dep[k] < input_trapezoid[1]) + ratio = 1.0; + else if (input_dep[k] >= input_trapezoid[1] && input_dep[k] < input_trapezoid[2]) + ratio = 1.0 + (input_dep[k] - input_trapezoid[1]) / (input_trapezoid[2] - input_trapezoid[1]) * (input_trapezoid[0] - 1.0); + else + ratio = input_trapezoid[0]; + + arr[I2V_INV_GRIDS_2D_GENERIC(i,k,l,n_inv_loc,n_inv_loc_k)] = mid_value + (arr_input_pos[i] + l*dinv_l - mid_value) * ratio; + } + } + } + + delete[] arr_input_pos; +} + + + diff --git a/src/io.cpp b/src/io.cpp new file mode 100644 index 0000000..90509d1 --- /dev/null +++ b/src/io.cpp @@ -0,0 +1,2370 @@ +#include "io.h" + +IO_utils::IO_utils(InputParams& IP) { + if (subdom_main) { + stdout_by_main("--- IO object initialization ---"); + + // check the custom real data type + // if float, custom_real_flag = 2 + // if double, custom_real_flag = 3 + if (std::is_same::value || IP.get_if_single_precision_output()) { + custom_real_flag = 2; + } else if (std::is_same::value) { + custom_real_flag = 3; + } else { + std::cout << "Error: custom real type is not float or double" << std::endl; + std::cout << "Please check the definition of CUSTOMREAL in io.h" << std::endl; + std::cout << "Exiting..." << std::endl; + exit(1); + } + + // initialize an output file for grid data + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // grid data is output by only simulation group 0 + if(id_sim==0) + h5_create_file_by_group_main(h5_output_grid_fname); // file for grid+whole simulation data + // initialize simulation data file. + if (n_sims > 1){ + // for simultaneous run, data file is created for each simulation group + h5_output_fname = "./out_data_sim_group_" + std::to_string(id_sim) + ".h5"; + xdmf_output_fname = "./out_data_sim_group_"+std::to_string(id_sim)+".xmf"; + h5_output_fname_tmp = "./tmp_db_sim_group_" + std::to_string(id_sim) + ".h5"; + } else { + // otherwise, only one single data file is created for storing model params + h5_output_fname = "./out_data_sim_group_0.h5"; // add _groud_0 to ensure consistency + xdmf_output_fname = "./out_data_sim_group_0.xmf"; + h5_output_fname_tmp = "./tmp_db_sim_group_0.h5"; + } + + // MNMN: below is for initiliazing data file for each simulation group + // if the file is not created in here, hdf5 will try to use preexisting file and dataset structures, + // then error will occur if the dataset size for the later simulation group is larger than the previous one. + + // create data file + h5_create_file_by_group_main(h5_output_fname); + // create temporary data file + h5_create_file_by_group_main(h5_output_fname_tmp); +#else + std::cout << "Error: TOMOATT was not compiled with HDF5" << std::endl; + std::cout << "Exiting..." << std::endl; + exit(1); +#endif + } + } +} + +IO_utils::~IO_utils() { + stdout_by_main("--- IO object finalization ---"); +} + +void IO_utils::reset_source_info(const int& id_sim_src, const std::string& name_sim_src) { + + // set simulation group id and source name for output files/dataset names + set_id_src(id_sim_src); + set_name_src(name_sim_src); + +#ifdef USE_HDF5 + // change group name for source + // h5_group_name_data = "src_" + std::to_string(id_sim_src); + h5_group_name_data = "src_" + name_sim_src; +#endif +} + + +void IO_utils::change_group_name_for_model(){ +#ifdef USE_HDF5 + // change group name for model + h5_group_name_data = "model"; +#endif +} + + +void IO_utils::finalize_data_output_file(){ + if (output_format==OUTPUT_FORMAT_HDF5){ + // close file + if (subdom_main && id_subdomain==0) + finalize_xdmf_file(); + } +} + + +void IO_utils::init_data_output_file() { + if (if_verbose) stdout_by_main("--- initialize data output file ---"); + + // create output file + if (output_format==OUTPUT_FORMAT_HDF5) { +#ifdef USE_HDF5 + // h5_output_fname = "./out_data_sim_"+std::to_string(id_sim_src)+".h5"; + // xdmf_output_fname = "./out_data_sim_"+std::to_string(id_sim_src)+".xmf"; + h5_output_fname = "./out_data_sim_"+name_sim_src+".h5"; + xdmf_output_fname = "./out_data_sim_"+name_sim_src+".xmf"; + + if (subdom_main) { + // write xdmf file + if (id_subdomain == 0) + write_xdmf_file_grid(); + + // create output file + h5_create_file_by_group_main(h5_output_fname); // file for field data + } +#endif + } +} + + + +void IO_utils::write_grid(Grid& grid) { + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // share grid dimensions + int dims_ngrid[1] = {grid.get_ngrid_total_vis()}; + int dims_conn[2] = {grid.get_nelms_total_vis(), 9}; + + allreduce_i_single(dims_ngrid[0], nnodes_glob); + allreduce_i_single(dims_conn[0], nelms_glob); + + // create xdmf file for visualization of simulation data + if (id_subdomain == 0) + write_xdmf_file_grid(); + + if (id_sim == 0) { + + // open file + h5_open_file_by_group_main(h5_output_grid_fname); + + // make groups Grid and Event + h5_create_group_by_group_main(h5_group_name_grid); + h5_open_group_by_group_main(h5_group_name_grid); + + // create datasets + h5_create_dataset(h5_dset_name_node_coords_x, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_node_coords_y, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_node_coords_z, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_node_coords_p, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_node_coords_t, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_node_coords_r, 1, dims_ngrid, custom_real_flag); + h5_create_dataset(h5_dset_name_elem_conn, 2, dims_conn, 1); + h5_create_dataset(h5_dset_name_procid, 1, dims_ngrid, 1); + + // close and reopen file from all processes + h5_close_group_by_group_main(); + h5_close_file_by_group_main(); + + h5_open_file_collective(h5_output_grid_fname); + h5_open_group_collective(h5_group_name_grid); // Open group "Grid" + + // write node coordinates + h5_write_array(h5_dset_name_node_coords_x, 1, dims_ngrid, grid.get_nodes_coords_x(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_node_coords_y, 1, dims_ngrid, grid.get_nodes_coords_y(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_node_coords_z, 1, dims_ngrid, grid.get_nodes_coords_z(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_node_coords_p, 1, dims_ngrid, grid.get_nodes_coords_p(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_node_coords_t, 1, dims_ngrid, grid.get_nodes_coords_t(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_node_coords_r, 1, dims_ngrid, grid.get_nodes_coords_r(), grid.get_offset_nnodes_vis()); + h5_write_array(h5_dset_name_procid, 1, dims_ngrid, grid.get_proc_dump(), grid.get_offset_nnodes_vis()); + + // write element connectivity + //(write here as 1d element to keep compatibility with other spatial discretization data) + h5_write_array(h5_dset_name_elem_conn, 2, dims_conn, grid.get_elms_conn(), grid.get_offset_elms_vis()); + + // close group "Grid" + h5_close_group_collective(); + // close file + h5_close_file_collective(); + } +#else + std::cout << "Error: HDF5 is not enabled.\n"; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII) { + if (id_sim == 0) { + // outut grid to ASCII file + + // get data + CUSTOMREAL* nodes_coords_x = grid.get_nodes_coords_x(); + CUSTOMREAL* nodes_coords_y = grid.get_nodes_coords_y(); + CUSTOMREAL* nodes_coords_z = grid.get_nodes_coords_z(); + CUSTOMREAL* nodes_coords_p = grid.get_nodes_coords_p(); + CUSTOMREAL* nodes_coords_t = grid.get_nodes_coords_t(); + CUSTOMREAL* nodes_coords_r = grid.get_nodes_coords_r(); + int* connectivity = grid.get_elms_conn(); + + // ASCII data collective writing + std::string fname_xyz = output_dir + "/out_grid_xyz.dat"; + std::string fname_rtp = output_dir + "/out_grid_ptr.dat"; + std::string fname_conn = output_dir + "/out_grid_conn.dat"; + + for (int i_rank = 0; i_rank < n_subdomains; i_rank++){ + if (i_rank == myrank){ + std::ofstream outfile_xyz, outfile_rtp, outfile_conn; + if (i_rank == 0){ + outfile_xyz.open(fname_xyz); + outfile_rtp.open(fname_rtp); + outfile_conn.open(fname_conn); + } + else{ + outfile_xyz.open(fname_xyz, std::ios_base::app); // append + outfile_rtp.open(fname_rtp, std::ios_base::app); // append + outfile_conn.open(fname_conn, std::ios_base::app); // append + } + + // set precision + outfile_xyz.precision( ASCII_OUTPUT_PRECISION); + outfile_rtp.precision( ASCII_OUTPUT_PRECISION); + outfile_conn.precision(ASCII_OUTPUT_PRECISION); + + //if (i_rank == 0) { + // // write header + // outfile << "# node coordinates x y z radius(km) lat.(deg.) lon.(deg.)" << std::endl; + //} + + for (int k = 0; k < loc_K_vis; k++){ + for (int j = 0; j < loc_J_vis; j++){ + for (int i = 0; i < loc_I_vis; i++){ + + int idx = I2V_VIS(i,j,k); + //outfile << nodes_coords_x[idx] << " " << nodes_coords_y[idx] << " " << nodes_coords_z[idx] << " " << nodes_coords_p[idx] << " " << nodes_coords_t[idx] << " " << nodes_coords_r[idx] << "\n"; + outfile_xyz << nodes_coords_x[idx] << " " << nodes_coords_y[idx] << " " << nodes_coords_z[idx] << "\n"; + outfile_rtp << nodes_coords_p[idx] << " " << nodes_coords_t[idx] << " " << nodes_coords_r[idx] << "\n"; + + if (i < loc_I_vis-1 \ + && j < loc_J_vis-1 \ + && k < loc_K_vis-1) { + int idx_conn = I2V_ELM_CONN(i,j,k); + for (int iconn = 0; iconn < 9; iconn++){ + outfile_conn << connectivity[idx_conn*9 + iconn] << " "; + } + outfile_conn << "\n"; + } + } + } + } + + outfile_xyz.close(); + outfile_rtp.close(); + outfile_conn.close(); + } + // synchronize + synchronize_all_inter(); + + } // end for i_rank + } // end if id_sim == 0 + } // end if output_format==OUTPUT_FORMAT_ASCII + +} + + +void IO_utils::init_xdmf_file(){ + if (if_verbose) stdout_by_main("--- init xdmf file ---"); + + if (std::is_same::value) { + type_name = "Float"; + type_size = "4"; + } else { + type_name = "Double"; + type_size = "8"; + } + + doc = new tinyxml2::XMLDocument(); // TODO: delete this object somewhere at the end + + // headers + tinyxml2::XMLDeclaration* decl = doc->NewDeclaration(); + doc->InsertFirstChild(decl); + tinyxml2::XMLUnknown* doctype = doc->NewUnknown("DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []"); + doc->InsertAfterChild(decl,doctype); + + // Xdmf node + xdmf = doc->InsertEndChild( doc->NewElement( "Xdmf" ) ); + xdmf->ToElement()->SetAttribute("xmlns:xi","http://www.w3.org/2001/XInclude"); + xdmf->ToElement()->SetAttribute("Version", "3.0"); +} + + +void IO_utils::write_xdmf_file_grid() { + // write xdmf file by main process + init_xdmf_file(); + + std::string num_elm = std::to_string(nelms_glob); + std::string num_conn = std::to_string(nelms_glob) + " 9"; + std::string num_nodes = std::to_string(nnodes_glob); + + // write xdmf file + // Domain node + domain = xdmf->InsertEndChild( doc->NewElement( "Domain" ) ); + domain->ToElement()->SetAttribute("name", "Mesh"); + + // Topology node in domain + tinyxml2::XMLNode* topology = domain->InsertEndChild( doc->NewElement( "Topology" ) ); + topology->ToElement()->SetAttribute("TopologyType", "Mixed"); + topology->ToElement()->SetAttribute("NumberOfElements", num_elm.c_str()); + // DataItem node in topology + tinyxml2::XMLNode* dataItem = topology->InsertEndChild( doc->NewElement( "DataItem" ) ); + dataItem->ToElement()->SetAttribute("ItemType", "Uniform"); + dataItem->ToElement()->SetAttribute("Format", "HDF"); + dataItem->ToElement()->SetAttribute("NumberType", "Int"); + dataItem->ToElement()->SetAttribute("Precision", "4"); + dataItem->ToElement()->SetAttribute("Dimensions", num_conn.c_str()); + // set dataset path in dataItem + dataItem->InsertEndChild( doc->NewText( h5_whole_name_conn.c_str() ) ); + + // Geometry node in domain + tinyxml2::XMLNode* geometry = domain->InsertEndChild( doc->NewElement( "Geometry" ) ); + geometry->ToElement()->SetAttribute("GeometryType", "X_Y_Z"); + // DataItem node in geometry + tinyxml2::XMLNode* dataItem_coords[3] = { geometry->InsertEndChild( doc->NewElement( "DataItem" ) ), + geometry->InsertEndChild( doc->NewElement( "DataItem" ) ), + geometry->InsertEndChild( doc->NewElement( "DataItem" ) ) }; + for (int i = 0; i < 3; i++) { + dataItem_coords[i]->ToElement()->SetAttribute("ItemType", "Uniform"); + dataItem_coords[i]->ToElement()->SetAttribute("Format", "HDF"); + dataItem_coords[i]->ToElement()->SetAttribute("NumberType", type_name.c_str()); + dataItem_coords[i]->ToElement()->SetAttribute("Precision", type_size.c_str()); + dataItem_coords[i]->ToElement()->SetAttribute("Dimensions", num_nodes.c_str()); + } + // set dataset path in dataItem + dataItem_coords[0]->InsertEndChild( doc->NewText( h5_whole_name_x.c_str() ) ); + dataItem_coords[1]->InsertEndChild( doc->NewText( h5_whole_name_y.c_str() ) ); + dataItem_coords[2]->InsertEndChild( doc->NewText( h5_whole_name_z.c_str() ) ); + + // write data to file + // Grid model + grid = domain->InsertEndChild( doc->NewElement( "Grid" ) ); + grid->ToElement()->SetAttribute("Name", "Data"); + grid->ToElement()->SetAttribute("GridType", "Tree"); + + // procid Grid + tinyxml2::XMLNode* grid_proc = grid->InsertEndChild( doc->NewElement( "Grid" ) ); + grid_proc->ToElement()->SetAttribute("Name", "procid"); + grid_proc->ToElement()->SetAttribute("GridType", "Uniform"); + + // Topology node in grid + tinyxml2::XMLNode* topology_grid = grid_proc->InsertEndChild( doc->NewElement( "Topology" ) ); + topology_grid->ToElement()->SetAttribute("Reference", "/Xdmf/Domain/Topology"); + // Geometry node in grid + tinyxml2::XMLNode* geometry_grid = grid_proc->InsertEndChild( doc->NewElement( "Geometry" ) ); + geometry_grid->ToElement()->SetAttribute("Reference", "/Xdmf/Domain/Geometry"); + // Attribute node in grid + tinyxml2::XMLNode* attribute_grid = grid_proc->InsertEndChild( doc->NewElement( "Attribute" ) ); + attribute_grid->ToElement()->SetAttribute("Name", "procid"); + attribute_grid->ToElement()->SetAttribute("AttributeType", "Scalar"); + attribute_grid->ToElement()->SetAttribute("Center", "Node"); + // DataItem node in attribute + tinyxml2::XMLNode* dataItem_procid = attribute_grid->InsertEndChild( doc->NewElement( "DataItem" ) ); + dataItem_procid->ToElement()->SetAttribute("ItemType", "Uniform"); + dataItem_procid->ToElement()->SetAttribute("Format", "HDF"); + dataItem_procid->ToElement()->SetAttribute("NumberType", "Int"); + dataItem_procid->ToElement()->SetAttribute("Precision", "4"); + dataItem_procid->ToElement()->SetAttribute("Dimensions", num_nodes.c_str()); + // set dataset path in dataItem + dataItem_procid->InsertEndChild( doc->NewText( h5_whole_name_proc.c_str() ) ); + + // prepare inversion iteration collection + inversions = grid->InsertEndChild( doc->NewElement( "Grid" ) ); + inversions->ToElement()->SetAttribute("Name", "Inversions"); + inversions->ToElement()->SetAttribute("GridType", "Collection"); + inversions->ToElement()->SetAttribute("CollectionType", "Temporal"); + // close file + //finalize_xdmf_file(); +} + + +void IO_utils::update_xdmf_file() { + if (output_format==OUTPUT_FORMAT_HDF5){ + if (subdom_main && id_subdomain==0) + write_xdmf_file(); + } +} + + +void IO_utils::write_xdmf_file() +{ + if (output_format==OUTPUT_FORMAT_HDF5){ + if (subdom_main && id_subdomain==0) { + //xdmf_output_fname = xmfname_vec[i_src]; + std::string fout = output_dir+"/"+xdmf_output_fname; + doc->SaveFile(fout.c_str(), false); // true: compact format + } + } +} + + +void IO_utils::finalize_xdmf_file(){ + if (output_format==OUTPUT_FORMAT_HDF5){ + stdout_by_main("--- finalize xdmf file ---"); + + write_xdmf_file(); + } +} + +#ifdef USE_HDF5 +// function to write data to HDF5 file without merging subdomains +void IO_utils::write_data_h5(Grid& grid, std::string& str_group, std::string& str_dset, + CUSTOMREAL* array, int i_inv, bool model_data, bool for_tmp_db) { + + std::string str_dset_h5 = "dummy"; + if (!for_tmp_db) + str_dset_h5 = str_dset + "_inv_" + int2string_zero_fill(i_inv); + else + str_dset_h5 = str_dset; + + // write true solution to h5 file + if (myrank == 0 && if_verbose) + std::cout << "--- write data " << str_dset << " to h5 file " << h5_output_fname << " ---" << std::endl; + + // open h5 file + h5_open_file_by_group_main(h5_output_fname); + + // make groups Grid and Event + h5_create_group_by_group_main(str_group); + h5_open_group_by_group_main(str_group); + + // create datasets + int dims_ngrid[1] = {grid.get_ngrid_total_vis()}; + //int dims_conn[2] = {grid.get_nelms_total_vis(), 9}; + + allreduce_i_single(dims_ngrid[0], nnodes_glob); + //allreduce_i_single(dims_conn[0], nelms_glob); + + h5_create_dataset(str_dset_h5, 1, dims_ngrid, custom_real_flag); + + // close and reopen file from all processes + h5_close_group_by_group_main(); + h5_close_file_by_group_main(); + + h5_open_file_collective(h5_output_fname); + h5_open_group_collective(str_group); // Open group "Grid" + + // write datasets + h5_write_array(str_dset_h5, 1, dims_ngrid, array, grid.get_offset_nnodes_vis()); + + // close group "Grid" + h5_close_group_collective(); + // close file + h5_close_file_collective(); + + if (!for_tmp_db) { + std::string str_dset_xdmf; + if (!model_data) + str_dset_xdmf = str_dset + "_src_" + name_sim_src; // use different name for xdmf + else + str_dset_xdmf = str_dset; // use different name for xdmf + + // add xdmf file in + insert_data_xdmf(str_group, str_dset_xdmf, str_dset_h5); + } +} + +// function to write data to HDF5 file with merging subdomains +void IO_utils::write_data_merged_h5(Grid& grid,std::string& str_filename, std::string& str_group, std::string& str_dset, + CUSTOMREAL* array, bool inverse_field, bool no_group) { + + // write true solution to h5 file + if (myrank == 0 && if_verbose) + std::cout << "--- write data " << str_dset << " to h5 file " << h5_output_fname << " ---" << std::endl; + + const int ndims = 3; + // allocate temporary array + CUSTOMREAL* array_tmp = new CUSTOMREAL[loc_I_excl_ghost*loc_J_excl_ghost*loc_K_excl_ghost]; + + // get array data except ghost nodes + grid.get_array_for_3d_output(array, array_tmp, inverse_field); + + // open h5 file + h5_open_file_by_group_main(str_filename); + + if (!no_group){ + h5_create_group_by_group_main(str_group); + h5_open_group_by_group_main(str_group); + } + + // dataset size of whole domain + int dims_ngrid[ndims] = {ngrid_k, ngrid_j, ngrid_i}; + // create datasets + h5_create_dataset(str_dset, ndims, dims_ngrid, custom_real_flag, no_group); + + // close and reopen file from all processes + if(!no_group) h5_close_group_by_group_main(); + h5_close_file_by_group_main(); + + h5_open_file_collective(str_filename); + if(!no_group) h5_open_group_collective(str_group); // Open group "Grid" + + // offset info for this subdomain + int offsets[3]; + grid.get_offsets_3d(offsets); + // dimensions of this subdomain + int dims_ngrid_loc[ndims] = {loc_K_excl_ghost, loc_J_excl_ghost, loc_I_excl_ghost}; + + // write datasets + h5_write_array(str_dset, ndims, dims_ngrid_loc, array_tmp, offsets[0], offsets[1], offsets[2], no_group); + + // close group "Grid" + if(!no_group) h5_close_group_collective(); + // close file + h5_close_file_collective(); + + // add xdmf file in + //insert_data_xdmf(str_group, str_dset_xdmf, str_dset); + + delete [] array_tmp; + +} + +#endif // USE_HDF5 + + +void IO_utils::write_data_ascii(Grid& grid, std::string& fname, CUSTOMREAL* data){ + // write data in ascii file + if (myrank == 0 && if_verbose) + std::cout << "--- write data to ascii file " << fname << " ---" << std::endl; + + // independent write + for (int i_rank = 0; i_rank < n_subdomains; i_rank++) { + if (i_rank == myrank){ + std::ofstream fout; + if (i_rank == 0) + fout.open(fname.c_str()); + else + fout.open(fname.c_str(), std::ios_base::app); // append + if (!fout.is_open()) { + std::cout << "ERROR: cannot open file " << fname << std::endl; + exit(1); + } + + // set output precision + fout.precision(ASCII_OUTPUT_PRECISION); + + // iterate over nodes skipping the last layer for ignoring gap filling nodes for h5 output + for (int k = 0; k < loc_K_vis; k++){ + for (int j = 0; j < loc_J_vis; j++){ + for (int i = 0; i < loc_I_vis; i++){ + int idx = I2V_VIS(i,j,k); + fout << data[idx] << "\n"; + } + } + } + + fout.close(); + } + // synchronize + synchronize_all_inter(); + + } // end for i_rank + +} + + +bool IO_utils::node_of_this_subdomain(int* offsets, const int& i, const int& j, const int& k){ + // check if node is in this subdomain + if (i >= offsets[2] && i < offsets[2] + loc_I_excl_ghost && + j >= offsets[1] && j < offsets[1] + loc_J_excl_ghost && + k >= offsets[0] && k < offsets[0] + loc_K_excl_ghost) + return true; + else + return false; +} + +void IO_utils::write_data_merged_ascii(Grid& grid, std::string& fname){ + // write data in ascii file + if (myrank == 0 && if_verbose) + std::cout << "--- write data to ascii file " << fname << " ---" << std::endl; + + // allocate temporary array + CUSTOMREAL* array_eta = new CUSTOMREAL[loc_I_excl_ghost*loc_J_excl_ghost*loc_K_excl_ghost]; + CUSTOMREAL* array_xi = new CUSTOMREAL[loc_I_excl_ghost*loc_J_excl_ghost*loc_K_excl_ghost]; + //CUSTOMREAL* array_zeta = new CUSTOMREAL[loc_I_excl_ghost*loc_J_excl_ghost*loc_K_excl_ghost]; + CUSTOMREAL* array_vel = new CUSTOMREAL[loc_I_excl_ghost*loc_J_excl_ghost*loc_K_excl_ghost]; + + // offset info for this subdomain + int offsets[3]; + grid.get_offsets_3d(offsets); + + // get array data except ghost nodes + grid.get_array_for_3d_output(grid.eta_loc, array_eta, false); + grid.get_array_for_3d_output(grid.xi_loc, array_xi, false); + //grid.get_array_for_3d_output(grid.zeta_loc, array_zeta, false); + grid.get_array_for_3d_output(grid.fun_loc, array_vel, true); + + // create output file + std::ofstream fout; + if (myrank == 0){ + fout.open(fname.c_str()); + fout.close(); + } + + // This way of writing is not parallelized and very slow + // thus user is strongly encouraged to use h5 output + for (int k = 0; k < ngrid_k; k++){ + for (int j = 0; j < ngrid_j; j++){ + for (int i = 0; i < ngrid_i; i++){ + if (node_of_this_subdomain(offsets, i,j,k)){ + // open file + fout.open(fname.c_str(), std::ios_base::app); // append + int idx = I2V_3D(i-offsets[2],j-offsets[1],k-offsets[0]); + // write eta xi zeta vel + fout << array_eta[idx] << " " << array_xi[idx] << " " << 0.0 << " " << array_vel[idx] << "\n"; + fout.close(); + } + // synchronize + synchronize_all_inter(); + } + } + } + + delete [] array_eta; + delete [] array_xi; + //delete [] array_zeta; + delete [] array_vel; + +} + +void IO_utils::write_1dinv_field(CUSTOMREAL* field_1dinv, CUSTOMREAL* r_1dinv, CUSTOMREAL* t_1dinv, int nr_1dinv, int nt_1dinv, std::string& field_name){ + if (myrank == 0) { + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // open h5 file + std::string fout = output_dir + "/" + h5_output_fname; + hid_t tmp_file_id = H5Fopen(fout.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); + + // try to create and open group "1dinv" + if (!H5Lexists(tmp_file_id, "1dinv", H5P_DEFAULT)) { + file_id_2d = H5Gcreate(tmp_file_id, "1dinv", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + // close group + H5Gclose(file_id_2d); + } + file_id_2d = H5Gopen(tmp_file_id, "1dinv", H5P_DEFAULT); + + // force to use CUSTOMREAL type for 2D fields + int dtype = check_data_type(field_1dinv[0]); + + // create dataset and write + int dims_array[2] = {nr_1dinv, nt_1dinv}; + std::string str_dset = field_name; + + if (H5Lexists(file_id_2d, str_dset.c_str(), H5P_DEFAULT) > 0){ + H5Ldelete(file_id_2d, str_dset.c_str(), H5P_DEFAULT); // delete nit + } + h5_create_and_write_dataset_2d(str_dset, 2, dims_array, dtype, field_1dinv); + + if (H5Lexists(file_id_2d, "r_1dinv", H5P_DEFAULT) > 0){ + H5Ldelete(file_id_2d, "r_1dinv", H5P_DEFAULT); // delete nit + } + str_dset = "r_1dinv"; + h5_create_and_write_dataset_2d(str_dset, 1, &nr_1dinv, dtype, r_1dinv); + + if (H5Lexists(file_id_2d, "t_1dinv", H5P_DEFAULT) > 0){ + H5Ldelete(file_id_2d, "t_1dinv", H5P_DEFAULT); // delete nit + } + str_dset = "t_1dinv"; + h5_create_and_write_dataset_2d(str_dset, 1, &nt_1dinv, dtype, t_1dinv); + + // close groud + H5Gclose(file_id_2d); + + // close h5 file + H5Fclose(tmp_file_id); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::cout << "ERROR: ASCII is not supported for 1dinv field output now" << std::endl; + exit(1); + } + } +} + + +void IO_utils::write_2d_travel_time_field(CUSTOMREAL* T, CUSTOMREAL* r, CUSTOMREAL* t, int nr, int nt, CUSTOMREAL src_dep){ + + if (myrank == 0) { + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + auto str = std::to_string(src_dep); + std::string fname = output_dir + "/" + OUTPUT_DIR_2D + "/2d_travel_time_field_dep_" +str.substr(0,str.find(".")+4)+".h5"; + // create and open h5 file + file_id_2d = H5Fcreate(fname.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + // force to use CUSTOMREAL type for 2D fields + int dtype = check_data_type(T[0]); + + // create dataset and write + int dims_T[2] = {nr, nt}; + std::string str_dset = "T"; + h5_create_and_write_dataset_2d(str_dset, 2, dims_T, dtype, T); + str_dset = "r"; + h5_create_and_write_dataset_2d(str_dset, 1, &nr, dtype, r); + str_dset = "t"; + h5_create_and_write_dataset_2d(str_dset, 1, &nt, dtype, t); + + // close h5 file + H5Fclose(file_id_2d); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + // write out r t and T in ASCII + auto str = std::to_string(src_dep); + std::string fname = output_dir + "/" + OUTPUT_DIR_2D + "/2d_travel_time_field_dep_" +str.substr(0,str.find(".")+4)+".dat"; + std::ofstream fout(fname.c_str()); + + // set precision + fout << std::fixed << std::setprecision(ASCII_OUTPUT_PRECISION); + + for (int i=0; i> r_dummy >> t_dummy >> T[i*nt+j]; + } + } +} + + +std::string IO_utils::create_fname_ascii(std::string& dset_name){ + // std::string fname = output_dir + "/" + dset_name + // + "_src_" + int2string_zero_fill(id_sim_src) + ".dat"; + std::string fname = output_dir + "/" + dset_name \ + + "_src_" + name_sim_src + ".dat"; + return fname; +} + + +std::string IO_utils::create_fname_ascii_model(std::string& dset_name){ + std::string fname = output_dir + "/" + dset_name + ".dat"; + return fname; +} + + +void IO_utils::write_true_solution(Grid& grid) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "true_solution"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_true_solution(), 0, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "true_solution"; + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_true_solution()); + } +} + + +void IO_utils::write_vel(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "vel"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_vel(),i_inv, model_data); +#else + + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "vel_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_vel()); + } +} + + +std::vector IO_utils::get_grid_data(CUSTOMREAL* data) { + + std::vector parameter(loc_K_vis * loc_J_vis * loc_I_vis); + + for (int k = 0; k < loc_K_vis; k++){ + for (int j = 0; j < loc_J_vis; j++){ + for (int i = 0; i < loc_I_vis; i++){ + int idx = I2V_VIS(i,j,k); + parameter[idx] = data[idx]; + } + } + } + return parameter; +} + +// void IO_utils::write_concerning_parameters(Grid& grid, int i_inv, InputParams& IP) { +// std::string dset_name = "model_parameters_inv_" + int2string_zero_fill(i_inv); +// std::string fname = create_fname_ascii_model(dset_name); + +// if (myrank == 0 ) +// std::cout << "--- write data to ascii file " << fname << " ---" << std::endl; + +// // collective write +// if (subdom_main){ + +// for (int i_rank = 0; i_rank < n_subdomains; i_rank++) { +// if (i_rank == myrank){ +// std::ofstream fout; +// if (i_rank == 0){ +// fout.open(fname.c_str()); +// fout<< std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << "depth" << " " +// << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << "latitude" << " " +// << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << "longitude" << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "slowness" << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "xi" << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "eta" << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "velocity" << " " +// << std::fixed << std::setprecision(5) << std::setw(11) << std::right << std::setfill(' ') << "Traveltime" << " "; +// if (IP.get_run_mode() == DO_INVERSION || IP.get_run_mode() == INV_RELOC) { +// fout << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << "Ks" << " " +// // << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "Tadj" << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << "Ks_update" << " "; +// } +// fout << std::endl; +// } else +// fout.open(fname.c_str(), std::ios_base::app); // append +// if (!fout.is_open()) { +// std::cout << "ERROR: cannot open file " << fname << std::endl; +// exit(1); +// } + +// // iterate over nodes skipping the last layer for ignoring gap filling nodes for h5 output + +// CUSTOMREAL* nodes_coords_p = grid.get_nodes_coords_p(); // dep,lat,lon +// CUSTOMREAL* nodes_coords_t = grid.get_nodes_coords_t(); +// CUSTOMREAL* nodes_coords_r = grid.get_nodes_coords_r(); +// std::vector slowness = get_grid_data(grid.get_fun()); +// std::vector xi = get_grid_data(grid.get_xi()); +// std::vector eta = get_grid_data(grid.get_eta()); +// std::vector Ks, Ks_update; +// if (IP.get_run_mode() == DO_INVERSION || IP.get_run_mode() == INV_RELOC) { +// //std::vector Tadj = get_grid_data(grid.get_Tadj()); +// Ks = get_grid_data(grid.get_Ks()); +// Ks_update = get_grid_data(grid.get_Ks_update()); +// } +// std::vector T = get_grid_data(grid.get_T()); + +// for (int k = 0; k < loc_K_vis; k++){ +// for (int j = 0; j < loc_J_vis; j++){ +// for (int i = 0; i < loc_I_vis; i++){ +// int idx = I2V_VIS(i,j,k); +// fout<< std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << radius2depth(nodes_coords_r[idx]) << " " +// << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << nodes_coords_t[idx] << " " +// << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') << nodes_coords_p[idx] << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << slowness[idx] << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << xi[idx] << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << eta[idx] << " " +// << std::fixed << std::setprecision(7) << std::setw(9) << std::right << std::setfill(' ') << _1_CR/slowness[idx] << " " +// << std::fixed << std::setprecision(5) << std::setw(11) << std::right << std::setfill(' ') << T[idx] << " "; + +// if (IP.get_run_mode() == DO_INVERSION || IP.get_run_mode() == INV_RELOC) { +// fout << std::fixed << std::setprecision(7) << std::setw(12) << std::right << std::setfill(' ') << Ks[idx] << " " +// // << std::fixed << std::setprecision(7) << std::setw(12) << std::right << std::setfill(' ') << Tadj[idx] << " " +// << std::fixed << std::setprecision(7) << std::setw(12) << std::right << std::setfill(' ') << Ks_update[idx] << " "; +// } +// fout << std::endl; +// } +// } +// } +// fout.close(); +// } + + +// } // end for i_rank +// } // end if subdom_main + +// // synchronize +// synchronize_all_inter(); +// } + + +void IO_utils::write_T0v(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "T0v"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_T0v(), i_inv, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "T0v_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_T0v()); + } +} + + +void IO_utils::write_u(Grid& grid) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "u"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_u(), 0, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "u"; + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_u()); + } +} + + +void IO_utils::write_tau(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "tau"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_tau(), i_inv, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "tau_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_tau()); + } +} + +// +//void IO_utils::write_tmp_tau(Grid& grid, int i_iter) { +// if (output_format==OUTPUT_FORMAT_HDF5){ +//#ifdef USE_HDF5 +// std::string h5_dset_name = "tau_iter_" + std::to_string(i_iter); +// write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_tau(), i_iter); +//#else +// std::cout << "ERROR: HDF5 is not enabled" << std::endl; +// exit(1); +//#endif +// } else if (output_format==OUTPUT_FORMAT_ASCII){ +// std::string dset_name = "tau_tmp_iter_" + int2string_zero_fill(i_iter); +// std::string fname = create_fname_ascii(dset_name); +// write_data_ascii(grid, fname, grid.get_tau()); +// } +//} +// + +void IO_utils::write_T(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "time_field"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_T(), i_inv, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if(output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "time_field_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_T()); + } +} + + +void IO_utils::write_T_tmp(Grid& grid) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // temporally replice a filename for T_tmp + std::string h5_fname_back = h5_output_fname; + h5_output_fname = h5_output_fname_tmp; + + // create file if not exist + std::string out_file_full = output_dir+"/"+h5_output_fname; + if (!is_file_exist(out_file_full.c_str())) + h5_create_file_by_group_main(h5_output_fname); + + // dataset name + std::string h5_dset_name = "T_tmp"; + bool for_tmp_db = true; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_T(), 0, src_data, for_tmp_db); + + // restore filename + h5_output_fname = h5_fname_back; +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if(output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "T_tmp"; + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_T()); + } +} + + +void IO_utils::write_residual(Grid& grid) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "residual"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_residual(), 0, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + }else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "residual"; + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_residual()); + } + +} + + +void IO_utils::write_adjoint_field(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "adjoint_field"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Tadj(), i_inv, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "adjoint_field_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_Tadj()); + } +} + + +void IO_utils::write_fun(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "fun"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_fun(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "fun_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_fun()); + } +} + + +void IO_utils::write_xi(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "xi"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_xi(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "xi_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_xi()); + } +} + + +void IO_utils::write_eta(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "eta"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_eta(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "eta_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_eta()); + } +} + + +void IO_utils::write_a(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "fac_a"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_a(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "fac_a_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_a()); + } +} + + +void IO_utils::write_b(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "fac_b"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_b(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "fac_b_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_b()); + } + +} + + +void IO_utils::write_c(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "fac_c"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_c(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "fac_c_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_c()); + } +} + + +void IO_utils::write_f(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "fac_f"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_f(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "fac_f_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_f()); + } +} + + +void IO_utils::write_Ks(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks()); + } +} + + +void IO_utils::write_Kxi(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Kxi_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Kxi()); + } +} + + +void IO_utils::write_Keta(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Keta_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Keta()); + } +} + + +void IO_utils::write_Ks_density(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks_density"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks_density(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_density_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks_density()); + } +} + +void IO_utils::write_Kxi_density(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi_density"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi_density(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Kxi_density_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Kxi_density()); + } +} + +void IO_utils::write_Keta_density(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta_density"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta_density(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Keta_density_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Keta_density()); + } +} + +void IO_utils::write_Ks_over_Kden(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks_over_Kden"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_over_Kden_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks()); + } +} + +void IO_utils::write_Kxi_over_Kden(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi_over_Kden"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_over_Kden_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks()); + } +} + +void IO_utils::write_Keta_over_Kden(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta_over_Kden"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_over_Kden_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks()); + } +} + +void IO_utils::write_Ks_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks_update()); + } +} + + +void IO_utils::write_Kxi_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Kxi_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Kxi_update()); + } +} + + +void IO_utils::write_Keta_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Keta_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Keta_update()); + } +} + +void IO_utils::write_Ks_density_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks_density_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks_density_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_density_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks_density_update()); + } +} + +void IO_utils::write_Kxi_density_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi_density_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi_density_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Kxi_density_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Kxi_density_update()); + } +} + +void IO_utils::write_Keta_density_update(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta_density_update"; + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta_density_update(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Keta_density_update_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Keta_density_update()); + } +} + +void IO_utils::write_Ks_descent_dir(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Ks_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Ks_descent_dir(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Ks_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Ks_descent_dir()); + } + } + + +void IO_utils::write_Kxi_descent_dir(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Kxi_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Kxi_descent_dir(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Kxi_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Kxi_descent_dir()); + } + } + + +void IO_utils::write_Keta_descent_dir(Grid& grid, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "Keta_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_Keta_descent_dir(), i_inv, model_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "Keta_descent_dir_local_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii_model(dset_name); + write_data_ascii(grid, fname, grid.get_Keta_descent_dir()); + } + } + + +void IO_utils::write_T_merged(Grid& grid, InputParams& IP, int i_inv) { + if (!subdom_main) return; + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + std::string h5_dset_name = "time_field"; + std::string h5_dset_name_merged = "time_field_merged_inv_" + int2string_zero_fill(i_inv); + bool inverse_field = false; + write_data_merged_h5(grid, h5_output_fname, h5_group_name_data, h5_dset_name_merged, grid.get_T(), i_inv, inverse_field); + write_data_h5(grid, h5_group_name_data, h5_dset_name, grid.get_T(), i_inv, src_data); +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if(output_format==OUTPUT_FORMAT_ASCII){ + std::string dset_name = "time_field_inv_" + int2string_zero_fill(i_inv); + std::string fname = create_fname_ascii(dset_name); + write_data_ascii(grid, fname, grid.get_T()); + } +} + + +void IO_utils::write_merged_model(Grid& grid, InputParams& IP, std::string fname) { + // this function is called only from simulation group == 0 + if (id_sim == 0 && subdom_main) { + + if (output_format==OUTPUT_FORMAT_HDF5){ +#ifdef USE_HDF5 + // create file + h5_create_file_by_group_main(fname); + + std::string gname_dummy = "dummy"; + std::string dset_name = "vel"; + bool inverse_field = true; + write_data_merged_h5(grid, fname, gname_dummy, dset_name, grid.fun_loc, inverse_field); + dset_name = "eta"; + inverse_field = false; + write_data_merged_h5(grid, fname, gname_dummy, dset_name, grid.eta_loc, inverse_field); + dset_name = "xi"; + inverse_field = false; + write_data_merged_h5(grid, fname, gname_dummy, dset_name, grid.xi_loc, inverse_field); + //dset_name = "zeta"; + //inverse_field = false; + //write_data_merged_h5(grid, fname, gname_dummy, dset_name, grid.zeta_loc, inverse_field); + + +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + } else if (output_format==OUTPUT_FORMAT_ASCII){ + // check if the fname finish with .h5 + if (fname.find(".h5") != std::string::npos) { + // remove .h5 + fname.erase(fname.end()-3, fname.end()); + } + + fname = create_fname_ascii_model(fname); + write_data_merged_ascii(grid, fname); + } + + + } // end id_sim == 0 && subdom_main +} + + +void IO_utils::prepare_grid_inv_xdmf(int i_inv) { + if ((output_format==OUTPUT_FORMAT_HDF5) && id_subdomain==0 && subdom_main){ + std::string str_inv = "inv_" + int2string_zero_fill(i_inv); + + inv_grid = inversions->InsertEndChild(doc->NewElement("Grid")); + inv_grid->ToElement()->SetAttribute("Name", str_inv.c_str()); + inv_grid->ToElement()->SetAttribute("GridType", "Uniform"); + + // Topology node in grid + tinyxml2::XMLNode* topology_grid = inv_grid->InsertEndChild( doc->NewElement( "Topology" ) ); + topology_grid->ToElement()->SetAttribute("Reference", "/Xdmf/Domain/Topology"); + // Geometry node in grid + tinyxml2::XMLNode* geometry_grid = inv_grid->InsertEndChild( doc->NewElement( "Geometry" ) ); + geometry_grid->ToElement()->SetAttribute("Reference", "/Xdmf/Domain/Geometry"); + // insert time + tinyxml2::XMLNode* time = inv_grid->InsertEndChild( doc->NewElement( "Time" ) ); + time->ToElement()->SetAttribute("Value", std::to_string(i_inv).c_str()); + + } +} + + +void IO_utils::insert_data_xdmf(std::string& group_name, std::string& dset_name_xdmf, std::string& dset_name_h5) { + + if (id_subdomain==0 && subdom_main){ // only the main of each subdomain write + std::string num_nodes = std::to_string(nnodes_glob); + + // Attribute node in grid + tinyxml2::XMLNode* attribute = inv_grid->InsertEndChild( doc->NewElement( "Attribute" ) ); + attribute->ToElement()->SetAttribute("Name", dset_name_xdmf.c_str()); + attribute->ToElement()->SetAttribute("AttributeType", "Scalar"); + attribute->ToElement()->SetAttribute("Center", "Node"); + // DataItem node in attribute + tinyxml2::XMLNode* dataItem = attribute->InsertEndChild( doc->NewElement( "DataItem" ) ); + dataItem->ToElement()->SetAttribute("ItemType", "Uniform"); + dataItem->ToElement()->SetAttribute("Format", "HDF"); + dataItem->ToElement()->SetAttribute("NumberType", type_name.c_str()); + dataItem->ToElement()->SetAttribute("Precision", type_size.c_str()); + dataItem->ToElement()->SetAttribute("Dimensions", num_nodes.c_str()); + // set dataset path in dataItem + std::string h5_dset_path = h5_output_fname + ":/" + group_name + "/" + dset_name_h5; + dataItem->InsertEndChild( doc->NewText( h5_dset_path.c_str() ) ); + } +} + + +void IO_utils::read_model(std::string& model_fname, const char* dset_name_in, CUSTOMREAL* darr, \ + int offset_i, int offset_j, int offset_k) { + + std::string dset_name(dset_name_in); + + if (output_format==OUTPUT_FORMAT_HDF5){ + +#ifdef USE_HDF5 + // open h5 file + h5_open_file_collective_input(model_fname); + + if (inter_sub_rank == 0) { + std::cout << "--- read model data " << dset_name << " from h5 file ---" << std::endl; + } + + // prepare temporary buffer in float precision for reading model data + // #TODO: need to be modify here for directly read data in double precision + float* f_darr = new float[loc_I*loc_J*loc_K]; + + // read data + int dims_model[3] = {loc_I, loc_J, loc_K}; + int offset_model[3] = {offset_i, offset_j, offset_k}; + h5_read_array(dset_name, 3, dims_model, f_darr, offset_model, false); + + // copy values to darr + for (int i=0; i (f_darr[I2V(i,j,k)]); + } + } + } + // close file + h5_close_file_collective(); + + // close temporary buffer + delete[] f_darr; + +#else + std::cout << "ERROR: HDF5 is not enabled" << std::endl; + exit(1); +#endif + + } else if (output_format==OUTPUT_FORMAT_ASCII){ + + if (inter_sub_rank == 0) { + std::cout << "--- read model data " << dset_name << " from ASCII file ---" << std::endl; + } + + CUSTOMREAL tmp_eta, tmp_xi, tmp_zeta, tmp_vel; + + // read data + + std::ifstream model_file(model_fname.c_str()); + if (!model_file.is_open()) { + std::cout << "Error: cannot open model file " << model_fname << std::endl; + exit(1); + } + + int line_count = 0; + int i,j,k; + + if (if_test) { + while(model_file >> tmp_eta >> tmp_xi >> tmp_zeta >> tmp_vel) { + k = line_count / (ngrid_i*ngrid_j); + j = (line_count - k*ngrid_i*ngrid_j) / ngrid_i; + i = line_count - k*ngrid_i*ngrid_j - j*ngrid_i; + + if (i>=offset_i && i=offset_j && j=offset_k && k (tmp_xi); + else if (!dset_name.compare(std::string("eta"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_eta); + else if (!dset_name.compare(std::string("zeta"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_zeta); + else if (!dset_name.compare(std::string("vel"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_vel); + } + + line_count++; + } + } else { + while(model_file >> tmp_eta >> tmp_xi >> tmp_zeta >> tmp_vel) { + k = line_count /(ngrid_i*ngrid_j); + j = (line_count - k*ngrid_i*ngrid_j) / ngrid_i; + i = line_count - k*ngrid_i*ngrid_j - j*ngrid_i; + + if (i>=offset_i && i=offset_j && j=offset_k && k (tmp_xi); + else if (!dset_name.compare(std::string("eta"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_eta); + else if (!dset_name.compare(std::string("zeta"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_zeta); + else if (!dset_name.compare(std::string("vel"))) + darr[I2V(i-offset_i,j-offset_j,k-offset_k)] = static_cast (tmp_vel); + } + + line_count++; + } + } + } + +} + + +// read travel time data from file +void IO_utils::read_T(Grid& grid) { + if (!subdom_main) return; + + if (output_format == OUTPUT_FORMAT_HDF5) { + // read traveltime field from HDF5 file +#ifdef USE_HDF5 + // h5_group_name_data = "src_" + std::to_string(id_sim_src); + h5_group_name_data = "src_" + name_sim_src; + std::string h5_dset_name = "time_field_inv_" + int2string_zero_fill(0); + read_data_h5(grid, grid.vis_data, h5_group_name_data, h5_dset_name); +#else + std::cerr << "Error: HDF5 is not enabled." << std::endl; + exit(1); +#endif + } else if (output_format == OUTPUT_FORMAT_ASCII) { + // read traveltime field from ASCII file + std::string dset_name = "time_field_inv_" + int2string_zero_fill(0); + std::string filename = create_fname_ascii(dset_name); + + read_data_ascii(grid, filename); + } + + // set to T_loc array from grid.vis_data + grid.set_array_from_vis(grid.T_loc); +} + + +void IO_utils::read_T_tmp(Grid& grid) { + if (!subdom_main) return; + + if (output_format == OUTPUT_FORMAT_HDF5) { + // read traveltime field from HDF5 file +#ifdef USE_HDF5 + // temporally replice a filename for T_tmp + std::string h5_fname_back = h5_output_fname; + h5_output_fname = h5_output_fname_tmp; + + // h5_group_name_data = "src_" + std::to_string(id_sim_src); + h5_group_name_data = "src_" + name_sim_src; + std::string h5_dset_name = "T_tmp"; + + read_data_h5(grid, grid.vis_data, h5_group_name_data, h5_dset_name); + + // recover h5_output_fname + h5_output_fname = h5_fname_back; +#else + std::cerr << "Error: HDF5 is not enabled." << std::endl; + exit(1); +#endif + } else if (output_format == OUTPUT_FORMAT_ASCII) { + // read traveltime field from ASCII file + std::string dset_name = "T_tmp"; + std::string filename = create_fname_ascii(dset_name); + + read_data_ascii(grid, filename); + } + + // set to T_loc array from grid.vis_data + grid.set_array_from_vis(grid.T_loc); +} + + + + + +void IO_utils::read_data_ascii(Grid& grid, std::string& fname){ + // read data in ascii file + if (myrank == 0 && if_verbose) + std::cout << "--- read data from ascii file " << fname << " ---" << std::endl; + + // get offset + int offset_this_rank = grid.get_offset_nnodes_vis(); + int ngrid_this_rank = grid.get_ngrid_total_vis(); + + // collective read + for (int i_rank = 0; i_rank < n_subdomains; i_rank++) { + if (i_rank == myrank) { + std::string line; + std::ifstream in_file(fname); + + int line_count = 0; + + while (std::getline(in_file, line)) { + std::istringstream iss(line); + CUSTOMREAL v_tmp; + if (!(iss >> v_tmp)) { break; } // error + + // set to grid.vis_data + if (line_count >= offset_this_rank && line_count < offset_this_rank + ngrid_this_rank) + grid.vis_data[line_count - offset_this_rank] = v_tmp; + + line_count++; + } + + in_file.close(); + } + + // synchronize + synchronize_all_inter(); + } + +} + + +// +// hdf5 low level utilities +// + +#ifdef USE_HDF5 + + +// read data from hdf5 file, which is in output format of TomoATT +void IO_utils::read_data_h5(Grid& grid, CUSTOMREAL* arr, std::string h5_group_name, std::string h5_dset_name) { + // write true solution to h5 file + if (myrank == 0 && if_verbose) + std::cout << "--- read data " << h5_dset_name << " from h5 file " << h5_output_fname << " ---" << std::endl; + + // open file collective + h5_open_file_collective(h5_output_fname); + + // open group collective + h5_open_group_collective(h5_group_name); + + // get offset + int dims_ngrid[1] = {grid.get_ngrid_total_vis()}; + allreduce_i_single(dims_ngrid[0], nnodes_glob); + int offset_this[1] = {grid.get_offset_nnodes_vis()}; + + // read data from h5 file + h5_read_array(h5_dset_name, 1, dims_ngrid, arr, offset_this, true); + + // close group + h5_close_group_collective(); + // close file + h5_close_file_collective(); +} + + +void IO_utils::h5_create_file_by_group_main(std::string& fname) { + // initialize hdf5 + + // create file by the first rank of this mpi group + if (myrank == 0) { + plist_id = H5Pcreate(H5P_FILE_ACCESS); + //H5Pset_fapl_mpio(plist_id, inter_sub_comm, MPI_INFO_NULL); + + std::string fout = output_dir + "/" + fname; + file_id = H5Fcreate(fout.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, plist_id); + //file_id = H5Fcreate(fname.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + H5Pclose(plist_id); + H5Fclose(file_id); + } + synchronize_all_inter(); +} + +void IO_utils::h5_open_file_by_group_main(std::string& fname){ + // open file by the first rank of first mpi group + if (myrank == 0) { + plist_id = H5Pcreate(H5P_FILE_ACCESS); + std::string fout = output_dir + "/" + fname; + file_id = H5Fopen(fout.c_str(), H5F_ACC_RDWR, plist_id); + } +} + +// this function need to be read by only subdomain rank = 0 +void IO_utils::h5_open_file_collective(std::string& fname){ + // open file by all ranks + plist_id = H5Pcreate(H5P_FILE_ACCESS); + H5Pset_fapl_mpio(plist_id, inter_sub_comm, MPI_INFO_NULL); + std::string fout = output_dir + "/" + fname; + file_id = H5Fopen(fout.c_str(), H5F_ACC_RDWR, plist_id); + H5Pclose(plist_id); +} + + +void IO_utils::h5_open_file_collective_input(std::string& fname){ + // open file by all ranks + plist_id = H5Pcreate(H5P_FILE_ACCESS); + H5Pset_fapl_mpio(plist_id, inter_sub_comm, MPI_INFO_NULL); + std::string fout = fname; + file_id = H5Fopen(fout.c_str(), H5F_ACC_RDWR, plist_id); +} + + +void IO_utils::h5_close_file_by_group_main(){ + if(myrank == 0) { + H5Pclose(plist_id); + H5Fclose(file_id); + } +} + +void IO_utils::h5_close_file_collective(){ + //H5Pclose(plist_id); + H5Fclose(file_id); +} + + +void IO_utils::h5_create_group_by_group_main(std::string& group_name){ + // create group by only main rank + if (myrank == 0) { + // check if group exists + if (!H5Lexists(file_id, group_name.c_str(), H5P_DEFAULT)) { + group_id = H5Gcreate(file_id, group_name.c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + // close group + H5Gclose(group_id); + } + } +} + +void IO_utils::h5_open_group_by_group_main(std::string& group_name){ + // open group by mpi group main + if(myrank==0) + group_id = H5Gopen(file_id, group_name.c_str(), H5P_DEFAULT); +} + +void IO_utils::h5_open_group_collective(std::string& group_name){ + // open group by all ranks + group_id = H5Gopen(file_id, group_name.c_str(), H5P_DEFAULT); +} + + +void IO_utils::h5_close_group_by_group_main(){ + // close group by all ranks + if(myrank==0) + H5Gclose(group_id); +} + +void IO_utils::h5_close_group_collective(){ + // close group by all ranks + H5Gclose(group_id); +} + + +void IO_utils::h5_create_dataset(std::string& dset_name, int ndims, int* dims, int dtype, bool no_group){ + /* + create dataset in a group by all ranks + + dset_name: name of the dataset + ndims: number of dimensions + dims: number of elements in each dimension + dtype: data type 0: bool, 1: int, 2: float, 3: double + no_group: if true, create dataset in the file, not in a group + */ + + if (no_group) + group_id = file_id; // create dataset in the file + + // gather data size from all rank in this simulation group + // subdomain dependent size need to be in the first element of dims + int *dims_all = new int[ndims]; + + // for 1d array + if (ndims != 3) { + for (int i = 0; i < ndims; i++) { + if (i==0) + allreduce_i_single(dims[i], dims_all[i]); + else + dims_all[i] = dims[i]; + } + } else { + for (int i = 0; i < ndims; i++) { + dims_all[i] = dims[i]; + } + } + // dataset is created only by the main rank + // thus the file need to be opened by the main rank + if (myrank == 0) { + // create a dataspace with the fixed size + hsize_t *dims_h5 = new hsize_t[ndims]; + for (int i = 0; i < ndims; i++) { + dims_h5[i] = dims_all[i]; + } + + // check if the dataset exists + if (!H5Lexists(group_id, dset_name.c_str(), H5P_DEFAULT) ) { + space_id = H5Screate_simple(ndims, dims_h5, NULL); + + // create dataset + switch (dtype) + { + case 0: + dset_id = H5Dcreate(group_id, dset_name.c_str(), H5T_NATIVE_HBOOL, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + break; + case 1: + dset_id = H5Dcreate(group_id, dset_name.c_str(), H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + break; + case 2: + dset_id = H5Dcreate(group_id, dset_name.c_str(), H5T_NATIVE_FLOAT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + break; + case 3: + dset_id = H5Dcreate(group_id, dset_name.c_str(), H5T_NATIVE_DOUBLE, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + break; + } + + // error handle + if (dset_id < 0) { + std::cout << "Error: H5Dcreate for " << dset_name << " failed" << std::endl; + exit(1); + } + + // close dataset + H5Dclose(dset_id); + // close dataspace + H5Sclose(space_id); + } + + delete[] dims_h5; + } + + delete[] dims_all; +} + + +void IO_utils::h5_create_and_write_dataset_2d(std::string& dset_name, int ndims, int* dims, int dtype, CUSTOMREAL* data){ + /* + create dataset in a group by all ranks + + dset_name: name of the dataset + ndims: number of dimensions + dims: number of elements in each dimension + dtype: data type 0: bool, 1: int, 2: float, 3: double + */ + + hid_t space_id_2d=0, dset_id_2d=0; + + // dataset is created only by the main rank + // thus the file need to be opened by the main rank + if (myrank == 0) { + // create a dataspace with the fixed size + hsize_t *dims_h5 = new hsize_t[ndims]; + for (int i = 0; i < ndims; i++) { + dims_h5[i] = dims[i]; + } + space_id_2d = H5Screate_simple(ndims, dims_h5, NULL); + + // create dataset + switch (dtype) + { + case 0: + dset_id_2d = H5Dcreate(file_id_2d, dset_name.c_str(), H5T_NATIVE_HBOOL, space_id_2d, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset_id_2d, H5T_NATIVE_HBOOL, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 1: + dset_id_2d = H5Dcreate(file_id_2d, dset_name.c_str(), H5T_NATIVE_INT, space_id_2d, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset_id_2d, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 2: + dset_id_2d = H5Dcreate(file_id_2d, dset_name.c_str(), H5T_NATIVE_FLOAT, space_id_2d, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset_id_2d, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 3: + dset_id_2d = H5Dcreate(file_id_2d, dset_name.c_str(), H5T_NATIVE_DOUBLE, space_id_2d, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Dwrite(dset_id_2d, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + } + + // error handle + if (dset_id_2d < 0) { + std::cout << "Error: H5Dcreate for " << dset_name << " failed" << std::endl; + exit(1); + } + + // close dataset + H5Dclose(dset_id_2d); + // close dataspace + H5Sclose(space_id_2d); + + delete[] dims_h5; + } + +} + + +void IO_utils::h5_open_dataset(std::string& dset_name){ + // open dataset in a group by all ranks + dset_id = H5Dopen(group_id, dset_name.c_str(), H5P_DEFAULT); + + if (dset_id < 0) { + std::cout << "Error: H5Dopen for " << dset_name << " failed" << std::endl; + exit(1); + } +} + +void IO_utils::h5_open_dataset_no_group(std::string& dset_name){ + // open dataset in a group by all ranks + dset_id = H5Dopen(file_id, dset_name.c_str(), H5P_DEFAULT); + + if (dset_id < 0) { + std::cout << "Error: H5Dopen for " << dset_name << " failed" << std::endl; + exit(1); + } +} + +void IO_utils::h5_close_dataset(){ + // close dataset in a group by all ranks + H5Dclose(dset_id); +} + +template +void IO_utils::h5_write_array(std::string& dset_name, int rank, int* dims_in, T* data, int offset_in, int offset_in2, int offset_in3, bool no_group) { + // write a data array to a dataset by all ranks + + // use group_id as file_id if no_group is true + if (no_group) + group_id = file_id; + + hsize_t* offset = new hsize_t[rank]; + hsize_t* count = new hsize_t[rank]; + hsize_t* stride = new hsize_t[rank]; + hsize_t* block = new hsize_t[rank]; + + if (rank != 3){ + for (int i_rank = 0; i_rank < rank; i_rank++) { + if (i_rank == 0) + offset[i_rank] = offset_in; + else if (i_rank == 1) + offset[i_rank] = offset_in2; + else if (i_rank == 2) + offset[i_rank] = offset_in3; + count[i_rank] = dims_in[i_rank]; + block[i_rank] = 1; + stride[i_rank] = 1; + } + } else { + for (int i_rank = 0; i_rank < rank; i_rank++) { + if (i_rank == 0){ + offset[i_rank] = offset_in; + count[i_rank] = dims_in[0]; + } + else if (i_rank == 1){ + offset[i_rank] = offset_in2; + count[i_rank] = dims_in[1]; + } + else if (i_rank == 2){ + offset[i_rank] = offset_in3; + count[i_rank] = dims_in[2]; + } + + block[i_rank] = 1; + stride[i_rank] = 1; + } + } + + // check data type of array + int dtype = check_data_type(data[0]); + + // open dataset + h5_open_dataset(dset_name); + + // select hyperslab + mem_dspace_id = H5Screate_simple(rank, count, NULL); + file_dspace_id = H5Dget_space(dset_id); + + H5Sselect_hyperslab(file_dspace_id, H5S_SELECT_SET, offset, stride, count, block); + + // create dataset prop list + plist_id_dset = H5Pcreate(H5P_DATASET_XFER); + //H5Pset_buffer(plist_id_dset, BUF_SIZE, NULL, NULL); // this will be important for machine dependent tuning + H5Pset_dxpl_mpio(plist_id_dset, HDF5_IO_MODE); + + // check if this writing is done collectively + H5D_mpio_actual_io_mode_t actualIOMode; + H5Pget_mpio_actual_io_mode(plist_id_dset, &actualIOMode); + + if (actualIOMode == H5D_MPIO_NO_COLLECTIVE) { + if (rank == 0) { + std::cout << "Warning: Collective I/O is not enabled." << std::endl; + } + } + + // write array + switch (dtype) + { + case 0: // write bool + status = H5Dwrite(dset_id, H5T_NATIVE_HBOOL, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 1: // write int + status = H5Dwrite(dset_id, H5T_NATIVE_INT, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 2: // write float + status = H5Dwrite(dset_id, H5T_NATIVE_FLOAT, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 3: // write double + status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + } + + // close dataset prop + H5Pclose(plist_id_dset); + // close dataspace + H5Sclose(mem_dspace_id); + H5Sclose(file_dspace_id); + // close dataset + h5_close_dataset(); + + delete[] offset; + delete[] count; + delete[] stride; + delete[] block; +} + +template +void IO_utils::h5_read_array(std::string& dset_name, int rank, int* dims_in, T* data, int* offset_in, bool in_group) { + + hsize_t* offset = new hsize_t[rank]; + hsize_t* count = new hsize_t[rank]; + hsize_t* stride = new hsize_t[rank]; + hsize_t* block = new hsize_t[rank]; + + if (rank == 3){ // used for reading input model + offset[0] = offset_in[2]; + count[0] = dims_in[2]; + offset[1] = offset_in[1]; + count[1] = dims_in[1]; + offset[2] = offset_in[0]; + count[2] = dims_in[0]; + } else if (rank == 1) { // used for reading output data from TomoATT + offset[0] = offset_in[0]; + count[0] = dims_in[0]; + } + + for (int i_rank = 0; i_rank < rank; i_rank++) { + stride[i_rank] = 1; + block[i_rank] = 1; + } + + // check data type of array + int dtype = check_data_type(data[0]); + + // open dataset + if (!in_group) + h5_open_dataset_no_group(dset_name); + else + h5_open_dataset(dset_name); + + // select hyperslab + mem_dspace_id = H5Screate_simple(rank, count, NULL); + file_dspace_id = H5Dget_space(dset_id); + H5Sselect_hyperslab(file_dspace_id, H5S_SELECT_SET, offset, stride, count, block); + + // create dataset prop list + plist_id_dset = H5Pcreate(H5P_DATASET_XFER); + //H5Pset_buffer(plist_id_dset, BUF_SIZE, NULL, NULL); // this will be important for machine dependent tuning + H5Pset_dxpl_mpio(plist_id_dset, H5FD_MPIO_COLLECTIVE); + + // read array + switch (dtype) + { + case 0: // read bool + status = H5Dread(dset_id, H5T_NATIVE_HBOOL, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 1: // read int + status = H5Dread(dset_id, H5T_NATIVE_INT, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 2: // read float + status = H5Dread(dset_id, H5T_NATIVE_FLOAT, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + case 3: // read double + status = H5Dread(dset_id, H5T_NATIVE_DOUBLE, mem_dspace_id, file_dspace_id, plist_id_dset, data); + break; + } + + // close dataset prop + H5Pclose(plist_id_dset); + // close dataspace + H5Sclose(mem_dspace_id); + H5Sclose(file_dspace_id); + // close dataset + h5_close_dataset(); + + delete[] offset; + delete[] count; + delete[] stride; + delete[] block; +} + +template +void IO_utils::h5_read_array_simple(std::string& dset_name, T* data) { + + // check data type of array + int dtype = check_data_type(data[0]); + + // open dataset + h5_open_dataset_no_group(dset_name); + + switch (dtype) + { + case 0: // read bool + status = H5Dread(dset_id, H5T_NATIVE_HBOOL, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 1: // read int + status = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 2: // read float + status = H5Dread(dset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + case 3: // read double + status = H5Dread(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); + break; + } + + // close dataset + h5_close_dataset(); + +} + +#endif // USE_HDF5 \ No newline at end of file diff --git a/src/iterator.cpp b/src/iterator.cpp new file mode 100644 index 0000000..56a5bc3 --- /dev/null +++ b/src/iterator.cpp @@ -0,0 +1,3384 @@ +#include "iterator.h" + +// test no valence anymore + +Iterator::Iterator(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : is_second_run(is_second_run_in) { + + if(n_subprocs > 1) { + + // share necessary values between subprocs + np = loc_I; + nt = loc_J; + nr = loc_K; + dr = grid.dr; + dt = grid.dt; + dp = grid.dp; + + if (first_init) { + + broadcast_i_single_sub(nr,0); + broadcast_i_single_sub(nt,0); + broadcast_i_single_sub(np,0); + broadcast_cr_single_sub(dr,0); + broadcast_cr_single_sub(dt,0); + broadcast_cr_single_sub(dp,0); + + // initialize n_elms for subprocs + if (!subdom_main){ + loc_I = np; + loc_J = nt; + loc_K = nr; + grid.dr = dr; + grid.dt = dt; + grid.dp = dp; + } + } + + // check if teleseismic source + is_teleseismic = is_teleseismic_in; + //broadcast_bool_single_sub(is_teleseismic, 0); // done in IP.get_if_teleseismic() + + // check initialized values + if (if_verbose){ + std::cout << "nr: " << nr << " nt: " << nt << " np: " << np << std::endl; + std::cout << "dr: " << dr << " dt: " << dt << " dp: " << dp << std::endl; + std::cout << "loc_I: " << loc_I << " loc_J: " << loc_J << " loc_K: " << loc_K << std::endl; + } + + + } else { + np = loc_I; + nt = loc_J; + nr = loc_K; + dr = grid.dr; + dt = grid.dt; + dp = grid.dp; + is_teleseismic = is_teleseismic_in; + } + + // // set initial and end indices of level set + // if (!is_teleseismic) { + // st_level = 6; + // ed_level = nr+nt+np-3; + // } else { + // st_level = 0; + // ed_level = nr+nt+np; + // } + // if (IP.get_stencil_type() == UPWIND) { + // st_level = 0; + // ed_level = nr+nt+np-3; + // } + + st_level = 0; + ed_level = nr+nt+np-3; + + // initialize factors etc. + initialize_arrays(IP, io, grid, src, src_name); + + + +} + + +Iterator::~Iterator() { + +#if defined USE_SIMD || defined USE_CUDA + + if (simd_allocated){ + // if use_gpu == false, simd_allocated is also false here + + free(dump_c__);// center of stencil + + free_preloaded_array(vv_iip); + free_preloaded_array(vv_jjt); + free_preloaded_array(vv_kkr); + + // free vv_* preloaded arrays + free_preloaded_array(vv_i__j__k__); + free_preloaded_array(vv_ip1j__k__); + free_preloaded_array(vv_im1j__k__); + free_preloaded_array(vv_i__jp1k__); + free_preloaded_array(vv_i__jm1k__); + free_preloaded_array(vv_i__j__kp1); + free_preloaded_array(vv_i__j__km1); + + if(simd_allocated_3rd || is_teleseismic){ + free_preloaded_array(vv_ip2j__k__); + free_preloaded_array(vv_im2j__k__); + free_preloaded_array(vv_i__jp2k__); + free_preloaded_array(vv_i__jm2k__); + free_preloaded_array(vv_i__j__kp2); + free_preloaded_array(vv_i__j__km2); + } + + free_preloaded_array(vv_fac_a); + free_preloaded_array(vv_fac_b); + free_preloaded_array(vv_fac_c); + free_preloaded_array(vv_fac_f); + free_preloaded_array(vv_fun); + if (!is_teleseismic){ + free_preloaded_array(vv_T0v); + free_preloaded_array(vv_T0r); + free_preloaded_array(vv_T0t); + free_preloaded_array(vv_T0p); + } + if(!use_gpu) + free_preloaded_array(vv_change); + else + free_preloaded_array(vv_change_bl); + } +#endif + +#ifdef USE_CUDA + // free memory on device before host arrays + // otherwise the program crashes + if (use_gpu) { + // free memory on device + cuda_finalize_grid(gpu_grid); + + delete gpu_grid; + } +#endif + +} + + +void Iterator::initialize_arrays(InputParams& IP, IO_utils& io, Grid& grid, Source& src, const std::string& name_sim_src) { + if(if_verbose && myrank == 0) std::cout << "(re) initializing arrays" << std::endl; + + // std::cout << "source lat: " << src.get_src_t()*RAD2DEG << ", source lon: " << src.get_src_p()*RAD2DEG << ", source dep: " << src.get_src_r() << std::endl; + + if (!is_second_run) { // field initialization has already been done in the second run + if (subdom_main) { + if (!is_teleseismic) { + // set initial a b c and calculate a0 b0 c0 f0 + grid.setup_factors(src); + + // calculate T0 T0r T0t T0p and initialize tau + grid.initialize_fields(src, IP); + } else { + // copy T_loc arrival time on domain's boundaries. + grid.initialize_fields_teleseismic(); + + // load 2d traveltime on boundary from file + load_2d_traveltime(IP, src, grid, io); + } + } + } + + // assign processes for each sweeping level + if (IP.get_sweep_type() == SWEEP_TYPE_LEVEL) assign_processes_for_levels(grid, IP); + +#ifdef USE_CUDA + if(use_gpu){ + gpu_grid = new Grid_on_device(); + if (IP.get_stencil_order() == 1){ + cuda_initialize_grid_1st(ijk_for_this_subproc, gpu_grid, loc_I, loc_J, loc_K, dp, dt, dr, \ + vv_i__j__k__, vv_ip1j__k__, vv_im1j__k__, vv_i__jp1k__, vv_i__jm1k__, vv_i__j__kp1, vv_i__j__km1, \ + vv_fac_a, vv_fac_b, vv_fac_c, vv_fac_f, vv_T0v, vv_T0r, vv_T0t, vv_T0p, vv_fun, vv_change_bl); + } else { + cuda_initialize_grid_3rd(ijk_for_this_subproc, gpu_grid, loc_I, loc_J, loc_K, dp, dt, dr, \ + vv_i__j__k__, vv_ip1j__k__, vv_im1j__k__, vv_i__jp1k__, vv_i__jm1k__, vv_i__j__kp1, vv_i__j__km1, \ + vv_ip2j__k__, vv_im2j__k__, vv_i__jp2k__, vv_i__jm2k__, vv_i__j__kp2, vv_i__j__km2, \ + vv_fac_a, vv_fac_b, vv_fac_c, vv_fac_f, vv_T0v, vv_T0r, vv_T0t, vv_T0p, vv_fun, vv_change_bl); + } + + //std::cout << "gpu grid initialization done." << std::endl; + } +#endif + +} + + +// assign intra-node processes for each sweeping level +void Iterator::assign_processes_for_levels(Grid& grid, InputParams& IP) { + // allocate memory for process range + std::vector n_nodes_of_levels; + + // count the number of nodes on each level + for (int level = st_level; level <= ed_level; level++) { + int count_n_nodes = 0; // the number of nodes in this level + + // the range of index k (rr) + int kleft = std::max(0, level - (np-1) - (nt-1)); + int kright = std::min(nr-1, level); + + for (int kk = kleft; kk <= kright; kk++) { + + // the range of index j (tt) + int jleft = std::max(0, level - kk - (np-1)); + int jright = std::min(nt-1, level-kk); + + // now i = level - kk - jj + int n_jlines = jright - jleft + 1; + count_n_nodes += n_jlines; + } // end loop kk + + n_nodes_of_levels.push_back(count_n_nodes); // store the number of nodes of each level + } // end loop level + + + // find max in n_nodes_of_levels + max_n_nodes_plane = 0; + for (size_t i = 0; i < n_nodes_of_levels.size(); i++) + if (n_nodes_of_levels[i] > max_n_nodes_plane) + max_n_nodes_plane = n_nodes_of_levels[i]; + + + int n_grids_this_subproc = 0; // count the number of grids calculated by this subproc + + // assign nodes on each level plane to processes + for (int level = st_level; level <= ed_level; level++) { + + // the range of index k (rr) + int kleft = std::max(0, level - (np-1) - (nt-1)); + int kright = std::min(nr-1, level); + + + std::vector asigned_nodes_on_this_level; + int grid_count = 0; + + // // n grids calculated by each subproc + // int n_grids_each = static_cast(n_nodes_of_levels[level] / n_subprocs); + // int n_grids_by_this = n_grids_each; + // int i_grid_start = n_grids_each*sub_rank; + + // // add modulo for last sub_rank + // if (sub_rank == n_subprocs-1) + // n_grids_by_this += static_cast(n_nodes_of_levels[level] % n_subprocs); + + // determine the beginnig index and the number of node for each subproc + int n_grids_each = static_cast(n_nodes_of_levels[level] / n_subprocs); + int remainder = n_nodes_of_levels[level] % n_subprocs; + + int n_grids_by_this = 0; // the number of grids calculated by this subproc + int i_grid_start = 0; // the starting index of grids calculated by this subproc + if(sub_rank < remainder){ + n_grids_by_this = n_grids_each + 1; + i_grid_start = n_grids_each*sub_rank + sub_rank; + } else{ + n_grids_by_this = n_grids_each; + i_grid_start = n_grids_each*sub_rank + remainder; + } + + // std::cout << "sub_rank " << sub_rank << ", n_grids_by_this: " << n_grids_by_this << ", idx: " << i_grid_start << std::endl; + + for (int kk = kleft; kk <= kright; kk++) { + + // the range of index j (tt) + int jleft = std::max(0, level - kk - (np-1)); + int jright = std::min(nt-1, level-kk); + + for (int jj = jleft; jj <= jright; jj++) { + int ii = level - kk - jj; + + // check if this node should be assigned to this process + if (grid_count >= i_grid_start && grid_count < i_grid_start+n_grids_by_this) { + int tmp_ijk = I2V(ii,jj,kk); + asigned_nodes_on_this_level.push_back(tmp_ijk); + n_grids_this_subproc++; + } + + grid_count++; + + } // end loop jj + } // end loop kk + + // store the node ids of each level + ijk_for_this_subproc.push_back(asigned_nodes_on_this_level); + } // end loop level + + if(if_verbose) + std::cout << "n total grids calculated by sub_rank " << sub_rank << ": " << n_grids_this_subproc << std::endl; + + // std::cout << "n total grids calculated by sub_rank " << sub_rank << ": " << n_grids_this_subproc << std::endl; + + // + // TODO: upwind scheme + sweep parallelization does not support SIMD yet + // + return; + + +#if defined USE_SIMD || defined USE_CUDA + + preload_indices(vv_iip, vv_jjt, vv_kkr, 0, 0, 0); + preload_indices_1d(vv_i__j__k__, 0, 0, 0); + preload_indices_1d(vv_ip1j__k__, 1, 0, 0); + preload_indices_1d(vv_i__jp1k__, 0, 1, 0); + preload_indices_1d(vv_i__j__kp1, 0, 0, 1); + preload_indices_1d(vv_im1j__k__,-1, 0, 0); + preload_indices_1d(vv_i__jm1k__, 0,-1, 0); + preload_indices_1d(vv_i__j__km1, 0, 0,-1); + + if(IP.get_stencil_order() == 3 || is_teleseismic){ + preload_indices_1d(vv_ip2j__k__, 2, 0, 0); + preload_indices_1d(vv_i__jp2k__, 0, 2, 0); + preload_indices_1d(vv_i__j__kp2, 0, 0, 2); + preload_indices_1d(vv_im2j__k__,-2, 0, 0); + preload_indices_1d(vv_i__jm2k__, 0,-2, 0); + preload_indices_1d(vv_i__j__km2, 0, 0,-2); + simd_allocated_3rd = true; + } + + int dump_length = NSIMD; + // stencil dumps + // first orders + dump_c__ = (CUSTOMREAL*) aligned_alloc(ALIGN, dump_length*sizeof(CUSTOMREAL));// center of stencil + + // preload the stencil dumps + vv_fac_a = preload_array(grid.fac_a_loc); + vv_fac_b = preload_array(grid.fac_b_loc); + vv_fac_c = preload_array(grid.fac_c_loc); + vv_fac_f = preload_array(grid.fac_f_loc); + vv_fun = preload_array(grid.fun_loc); + if(!is_teleseismic) { + vv_T0v = preload_array(grid.T0v_loc); + vv_T0r = preload_array(grid.T0r_loc); + vv_T0t = preload_array(grid.T0t_loc); + vv_T0p = preload_array(grid.T0p_loc); + } + if(!use_gpu) + vv_change = preload_array(grid.is_changed); + else + vv_change_bl = preload_array_bl(grid.is_changed); + + // flag for preloading + simd_allocated = true; +#endif // USE_SIMD + +} + +#if defined USE_SIMD || defined USE_CUDA + +template +std::vector> Iterator::preload_array(T* a){ + + std::vector> vvv; + + for (int iswap=0; iswap<8; iswap++){ + int n_levels = ijk_for_this_subproc.size(); + std::vector vv; + + for (int i_level=0; i_level> Iterator::preload_array_bl(bool* a){ + + std::vector> vvv; + + for (int iswap=0; iswap<8; iswap++){ + int n_levels = ijk_for_this_subproc.size(); + std::vector vv; + + for (int i_level=0; i_level +void Iterator::preload_indices(std::vector> &vvvi, \ + std::vector> &vvvj, \ + std::vector> &vvvk, \ + int shift_i, int shift_j, int shift_k) { + + int iip, jjt, kkr; + for (int iswp=0; iswp < 8; iswp++){ + set_sweep_direction(iswp); + + std::vector vvi, vvj, vvk; + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc[i_level].size(); + int n_nodes_tmp; + if(!use_gpu) + n_nodes_tmp = n_nodes + ((n_nodes % NSIMD == 0) ? 0 : (NSIMD - n_nodes % NSIMD)); // length needs to be multiple of NSIMD + else + n_nodes_tmp = n_nodes; + + T* vi = (T*) aligned_alloc(ALIGN, n_nodes_tmp*sizeof(T)); + T* vj = (T*) aligned_alloc(ALIGN, n_nodes_tmp*sizeof(T)); + T* vk = (T*) aligned_alloc(ALIGN, n_nodes_tmp*sizeof(T)); + + for (int i_node = 0; i_node < n_nodes; i_node++) { + int tmp_ijk = ijk_for_this_subproc[i_level][i_node]; + V2I(tmp_ijk, iip, jjt, kkr); + if (r_dirc < 0) kkr = loc_K-kkr; //kk-1; + else kkr = kkr-1; //nr-kk; + if (t_dirc < 0) jjt = loc_J-jjt; //jj-1; + else jjt = jjt-1; //nt-jj; + if (p_dirc < 0) iip = loc_I-iip; //ii-1; + else iip = iip-1; //np-ii; + + kkr += shift_k; + jjt += shift_j; + iip += shift_i; + + if (kkr >= loc_K) kkr = 0; + if (jjt >= loc_J) jjt = 0; + if (iip >= loc_I) iip = 0; + + if (kkr < 0) kkr = 0; + if (jjt < 0) jjt = 0; + if (iip < 0) iip = 0; + + vi[i_node] = (T)iip; + vj[i_node] = (T)jjt; + vk[i_node] = (T)kkr; + + } + // assign dummy + for (int i=n_nodes; i +void Iterator::preload_indices_1d(std::vector> &vvv, \ + int shift_i, int shift_j, int shift_k) { + + int iip, jjt, kkr; + for (int iswp=0; iswp < 8; iswp++){ + set_sweep_direction(iswp); + + std::vector vv; + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc[i_level].size(); + int n_nodes_tmp; + if(!use_gpu) + n_nodes_tmp = n_nodes + ((n_nodes % NSIMD == 0) ? 0 : (NSIMD - n_nodes % NSIMD)); // length needs to be multiple of NSIMD + else + n_nodes_tmp = n_nodes; + + T* v = (T*) aligned_alloc(ALIGN, n_nodes_tmp*sizeof(T)); + + for (int i_node = 0; i_node < n_nodes; i_node++) { + int tmp_ijk = ijk_for_this_subproc[i_level][i_node]; + V2I(tmp_ijk, iip, jjt, kkr); + if (r_dirc < 0) kkr = loc_K-kkr; //kk-1; + else kkr = kkr-1; //nr-kk; + if (t_dirc < 0) jjt = loc_J-jjt; //jj-1; + else jjt = jjt-1; //nt-jj; + if (p_dirc < 0) iip = loc_I-iip; //ii-1; + else iip = iip-1; //np-ii; + + kkr += shift_k; + jjt += shift_j; + iip += shift_i; + + if (kkr >= loc_K) kkr = 0; + if (jjt >= loc_J) jjt = 0; + if (iip >= loc_I) iip = 0; + + if (kkr < 0) kkr = 0; + if (jjt < 0) jjt = 0; + if (iip < 0) iip = 0; + + v[i_node] = (T)I2V(iip, jjt, kkr); + + } + // assign dummy + for (int i=n_nodes; i -1; iswp--) { + do_sweep(iswp, grid, IP); + +#ifdef FREQ_SYNC_GHOST + // synchronize ghost cells everytime after sweeping of each direction + if (subdom_main){ + if (!is_teleseismic) + grid.send_recev_boundary_data(grid.tau_loc); + else + grid.send_recev_boundary_data(grid.T_loc); + + } +#endif + } + + +#ifndef FREQ_SYNC_GHOST + // synchronize ghost cells everytime after sweeping of all directions + // as the same method with Detrixhe2016 + if (subdom_main){ + if (!is_teleseismic) + grid.send_recev_boundary_data(grid.tau_loc); + else + grid.send_recev_boundary_data(grid.T_loc); + } +#endif + + // calculate the objective function + // if converged, break the loop + if (subdom_main) { + if (!is_teleseismic) + grid.calc_L1_and_Linf_diff(cur_diff_L1, cur_diff_Linf); + else + grid.calc_L1_and_Linf_diff_tele(cur_diff_L1, cur_diff_Linf); + + if(if_test) { + grid.calc_L1_and_Linf_error(cur_err_L1, cur_err_Linf); + //std::cout << "Theoretical difference: " << cur_err_L1 << ' ' << cur_err_Linf << std::endl; + } + } + + // broadcast the diff values + broadcast_cr_single_sub(cur_diff_L1, 0); + broadcast_cr_single_sub(cur_diff_Linf, 0); // dead lock + if (if_test) { + broadcast_cr_single_sub(cur_err_L1, 0); + broadcast_cr_single_sub(cur_err_Linf, 0); + } + + //if (iter_count==0) + // MNMN: please don't leave this line active when pushing your commit. + // MNMN: because std::cout/endl is very slow when called in the loop. + // std::cout << "id_sim, sub_rank, cur_diff_L1, cur_diff_Linf: " << id_sim << ", " << sub_rank << ", " << cur_diff_L1 << ", " << cur_diff_Linf << std::endl; + + // debug store temporal T fields + //io.write_tmp_tau_h5(grid, iter_count); + + + iter_count++; + + //if (cur_diff_L1 < IP.get_conv_tol() && cur_diff_Linf < IP.get_conv_tol()) { // MNMN: let us use only L1 because Linf stop decreasing when using numbers of subdomains. + if (cur_diff_L1 < IP.get_conv_tol()) { + //stdout_by_main("--- iteration converged. ---"); + goto iter_end; + } else if (IP.get_max_iter() <= iter_count) { + stdout_by_main("--- iteration reached to the maximum number of iterations. ---"); + goto iter_end; + } else { + if(myrank==0 && if_verbose) + std::cout << "iteration " << iter_count << ": " << cur_diff_L1 << ", " << cur_diff_Linf << ", " << timer_iter.get_t_delta() << "\n"; + } + } + +iter_end: + if (myrank==0){ + if (if_verbose){ + std::cout << "Converged at iteration " << iter_count << ": " << cur_diff_L1 << ", " << cur_diff_Linf << std::endl; + } + if (if_test) + std::cout << "errors at iteration " << iter_count << ": " << cur_err_L1 << ", " << cur_err_Linf << std::endl; + std::cout << "id_sim: " << id_sim << ", converged at iteration " << iter_count << std::endl; + } + + // calculate T + // teleseismic case will update T_loc, so T = T0*tau is not necessary. + if (subdom_main && !is_teleseismic) grid.calc_T_plus_tau(); + + // corner nodes are not used in the sweeping but used in the interpolation and visualization + if (subdom_main) grid.send_recev_boundary_data_kosumi(grid.T_loc); + + // check the time for iteration + if (inter_sub_rank==0 && subdom_main) { + timer_iter.stop_timer(); + + // output time in file + std::ofstream ofs; + ofs.open("time.txt", std::ios::app); + ofs << "Converged at iteration " << iter_count << ", L1 " << cur_diff_L1 << ", Linf " << cur_diff_Linf << ", total time[s] " << timer_iter.get_t() << std::endl; + + } + +} + + +void Iterator::run_iteration_adjoint(InputParams& IP, Grid& grid, IO_utils& io, int adj_type) { + + if(if_verbose) stdout_by_main("--- start iteration adjoint. ---"); + iter_count = 0; + CUSTOMREAL cur_diff_L1_dummy = HUGE_VAL; + cur_diff_Linf = HUGE_VAL; + + // initialize delta and Tadj_loc (here we use the array tau_old instead of delta for memory saving) + if (subdom_main){ + if (adj_type == 0) init_delta_and_Tadj(grid, IP); // run iteration for adjoint field + if (adj_type == 1) init_delta_and_Tadj_density(grid, IP); // run iteration for the density of adjoint field (adjoint source -> abs(adjoint source)) + } + + + if(if_verbose) std::cout << "checker point 1, myrank: " << myrank << ", id_sim: " << id_sim << ", id_subdomain: " << id_subdomain + << ", subdom_main:" << subdom_main << ", world_rank: " << world_rank << std::endl; + // fix the boundary of the adjoint field + if (subdom_main){ + fix_boundary_Tadj(grid); + } + + // start timer + std::string iter_str = "iteration_adjoint"; + Timer timer_iter(iter_str); + if(if_verbose) stdout_by_main("--- adjoint fast sweeping ... ---"); + + // start iteration + while (true) { + // do sweeping for all direction + for (int iswp = 0; iswp < nswp; iswp++) { + do_sweep_adj(iswp, grid, IP); + +#ifdef FREQ_SYNC_GHOST + // copy the values of communication nodes and ghost nodes + if (subdom_main) + grid.send_recev_boundary_data(grid.tau_loc); +#endif + } + +#ifndef FREQ_SYNC_GHOST + // copy the values of communication nodes and ghost nodes + if (subdom_main) + grid.send_recev_boundary_data(grid.tau_loc); +#endif + + // calculate the objective function + // if converged, break the loop + if (subdom_main) { + if(adj_type == 0) grid.calc_L1_and_Linf_diff_adj(cur_diff_L1_dummy, cur_diff_Linf); + if(adj_type == 1) grid.calc_L1_and_Linf_diff_adj_density(cur_diff_L1_dummy, cur_diff_Linf); + } + + // broadcast the diff values + //broadcast_cr_single_sub(cur_diff_L1, 0); + broadcast_cr_single_sub(cur_diff_Linf, 0); + + // debug store temporal T fields + //io.write_tmp_tau_h5(grid, iter_count); + + // store tau -> Tadj + if (subdom_main){ + if(adj_type == 0) grid.update_Tadj(); + if(adj_type == 1) grid.update_Tadj_density(); + } + + if (cur_diff_Linf < IP.get_conv_tol()) { + //stdout_by_main("--- adjoint iteration converged. ---"); + goto iter_end; + } else if (IP.get_max_iter() <= iter_count) { + stdout_by_main("--- adjoint iteration reached the maximum number of iterations. ---"); + goto iter_end; + } else { + if(myrank==0 && if_verbose) + std::cout << "iteration adj. " << iter_count << ": " << cur_diff_Linf << std::endl; + iter_count++; + } + + + } + +iter_end: + if (myrank==0){ + if (if_verbose) + std::cout << "Converged at adjoint iteration " << iter_count << ": " << cur_diff_Linf << std::endl; + if (if_test) + std::cout << "errors at iteration " << iter_count << ": " << cur_err_Linf << std::endl; + } + + // corner nodes are not used in the sweeping but used in the interpolation and visualization + if (subdom_main) { + if(adj_type == 0) grid.send_recev_boundary_data_kosumi(grid.Tadj_loc); + if(adj_type == 1) grid.send_recev_boundary_data_kosumi(grid.Tadj_density_loc); + } + + + // check the time for iteration + if (inter_sub_rank==0 && subdom_main) timer_iter.stop_timer(); + +} + + + +void Iterator::init_delta_and_Tadj(Grid& grid, InputParams& IP) { + if(if_verbose) std::cout << "initializing delta and Tadj" << std::endl; + + for (int k = 0; k < nr; k++) { + for (int j = 0; j < nt; j++) { + for (int i = 0; i < np; i++) { + grid.tau_old_loc[I2V(i,j,k)] = _0_CR; // use tau_old_loc for delta + grid.tau_loc[I2V(i,j,k)] = _0_CR; // use tau_loc for Tadj_loc (later copy to Tadj_loc) + grid.Tadj_loc[I2V(i,j,k)] = 9999999.9; + } + } + } + + // loop all receivers + for (int irec = 0; irec < IP.n_rec_this_sim_group; irec++) { + + // get receiver information + std::string rec_name = IP.get_rec_name(irec); + auto rec = IP.get_rec_point_bcast(rec_name); + + // "iter->second" is the receiver, with the class SrcRecInfo + if (rec.adjoint_source == 0){ + continue; + } + + CUSTOMREAL delta_lon = grid.get_delta_lon(); + CUSTOMREAL delta_lat = grid.get_delta_lat(); + CUSTOMREAL delta_r = grid.get_delta_r(); + + + // get positions + CUSTOMREAL rec_lon = rec.lon*DEG2RAD; + CUSTOMREAL rec_lat = rec.lat*DEG2RAD; + CUSTOMREAL rec_r = depth2radius(rec.dep); + + // check if the receiver is in this subdomain + if (grid.get_lon_min_loc() <= rec_lon && rec_lon <= grid.get_lon_max_loc() && \ + grid.get_lat_min_loc() <= rec_lat && rec_lat <= grid.get_lat_max_loc() && \ + grid.get_r_min_loc() <= rec_r && rec_r <= grid.get_r_max_loc() ) { + + // descretize receiver position (LOCAL ID) + int i_rec_loc = std::floor((rec_lon - grid.get_lon_min_loc()) / delta_lon); + int j_rec_loc = std::floor((rec_lat - grid.get_lat_min_loc()) / delta_lat); + int k_rec_loc = std::floor((rec_r - grid.get_r_min_loc()) / delta_r); + + if(i_rec_loc +1 >= loc_I) + i_rec_loc = loc_I - 2; + if(j_rec_loc + 1 >= loc_J) + j_rec_loc = loc_J - 2; + if(k_rec_loc + 1 >= loc_K) + k_rec_loc = loc_K - 2; + + // discretized receiver position + CUSTOMREAL dis_rec_lon = grid.p_loc_1d[i_rec_loc]; + CUSTOMREAL dis_rec_lat = grid.t_loc_1d[j_rec_loc]; + CUSTOMREAL dis_rec_r = grid.r_loc_1d[k_rec_loc]; + + // relative position errors + CUSTOMREAL e_lon = std::min(_1_CR,(rec_lon - dis_rec_lon)/delta_lon); + CUSTOMREAL e_lat = std::min(_1_CR,(rec_lat - dis_rec_lat)/delta_lat); + CUSTOMREAL e_r = std::min(_1_CR,(rec_r - dis_rec_r) /delta_r); + + // set delta values + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc,k_rec_loc)] += rec.adjoint_source*(1.0-e_lon)*(1.0-e_lat)*(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc,k_rec_loc+1)] += rec.adjoint_source*(1.0-e_lon)*(1.0-e_lat)* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc+1,k_rec_loc)] += rec.adjoint_source*(1.0-e_lon)* e_lat* (1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc+1,k_rec_loc+1)] += rec.adjoint_source*(1.0-e_lon)* e_lat* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc,k_rec_loc)] += rec.adjoint_source* e_lon *(1.0-e_lat)*(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc,k_rec_loc+1)] += rec.adjoint_source* e_lon *(1.0-e_lat)* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc+1,k_rec_loc)] += rec.adjoint_source* e_lon * e_lat *(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc+1,k_rec_loc+1)] += rec.adjoint_source* e_lon * e_lat * e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + } + } // end of loop all receivers + + // communicate tau_old_loc to all processors + grid.send_recev_boundary_data(grid.tau_old_loc); + +} + + +void Iterator::init_delta_and_Tadj_density(Grid& grid, InputParams& IP) { + if(if_verbose) std::cout << "initializing delta and Tadj" << std::endl; + + for (int k = 0; k < nr; k++) { + for (int j = 0; j < nt; j++) { + for (int i = 0; i < np; i++) { + grid.tau_old_loc[I2V(i,j,k)] = _0_CR; // use tau_old_loc for delta + grid.tau_loc[I2V(i,j,k)] = _0_CR; // use tau_loc for Tadj_density_loc (later copy to Tadj_density_loc) + grid.Tadj_density_loc[I2V(i,j,k)] = 9999999.9; + } + } + } + + // loop all receivers + for (int irec = 0; irec < IP.n_rec_this_sim_group; irec++) { + + // get receiver information + std::string rec_name = IP.get_rec_name(irec); + auto rec = IP.get_rec_point_bcast(rec_name); + + // "iter->second" is the receiver, with the class SrcRecInfo + if (rec.adjoint_source_density == 0){ + continue; + } + + CUSTOMREAL delta_lon = grid.get_delta_lon(); + CUSTOMREAL delta_lat = grid.get_delta_lat(); + CUSTOMREAL delta_r = grid.get_delta_r(); + + + // get positions + CUSTOMREAL rec_lon = rec.lon*DEG2RAD; + CUSTOMREAL rec_lat = rec.lat*DEG2RAD; + CUSTOMREAL rec_r = depth2radius(rec.dep); + + // check if the receiver is in this subdomain + if (grid.get_lon_min_loc() <= rec_lon && rec_lon <= grid.get_lon_max_loc() && \ + grid.get_lat_min_loc() <= rec_lat && rec_lat <= grid.get_lat_max_loc() && \ + grid.get_r_min_loc() <= rec_r && rec_r <= grid.get_r_max_loc() ) { + + // descretize receiver position (LOCAL ID) + int i_rec_loc = std::floor((rec_lon - grid.get_lon_min_loc()) / delta_lon); + int j_rec_loc = std::floor((rec_lat - grid.get_lat_min_loc()) / delta_lat); + int k_rec_loc = std::floor((rec_r - grid.get_r_min_loc()) / delta_r); + + if(i_rec_loc +1 >= loc_I) + i_rec_loc = loc_I - 2; + if(j_rec_loc + 1 >= loc_J) + j_rec_loc = loc_J - 2; + if(k_rec_loc + 1 >= loc_K) + k_rec_loc = loc_K - 2; + + // discretized receiver position + CUSTOMREAL dis_rec_lon = grid.p_loc_1d[i_rec_loc]; + CUSTOMREAL dis_rec_lat = grid.t_loc_1d[j_rec_loc]; + CUSTOMREAL dis_rec_r = grid.r_loc_1d[k_rec_loc]; + + // relative position errors + CUSTOMREAL e_lon = std::min(_1_CR,(rec_lon - dis_rec_lon)/delta_lon); + CUSTOMREAL e_lat = std::min(_1_CR,(rec_lat - dis_rec_lat)/delta_lat); + CUSTOMREAL e_r = std::min(_1_CR,(rec_r - dis_rec_r) /delta_r); + + // set delta values + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc,k_rec_loc)] += rec.adjoint_source_density*(1.0-e_lon)*(1.0-e_lat)*(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc,k_rec_loc+1)] += rec.adjoint_source_density*(1.0-e_lon)*(1.0-e_lat)* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc+1,k_rec_loc)] += rec.adjoint_source_density*(1.0-e_lon)* e_lat* (1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc,j_rec_loc+1,k_rec_loc+1)] += rec.adjoint_source_density*(1.0-e_lon)* e_lat* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc,k_rec_loc)] += rec.adjoint_source_density* e_lon *(1.0-e_lat)*(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc,k_rec_loc+1)] += rec.adjoint_source_density* e_lon *(1.0-e_lat)* e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc+1,k_rec_loc)] += rec.adjoint_source_density* e_lon * e_lat *(1.0-e_r)/(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + grid.tau_old_loc[I2V(i_rec_loc+1,j_rec_loc+1,k_rec_loc+1)] += rec.adjoint_source_density* e_lon * e_lat * e_r /(delta_lon*delta_lat*delta_r*my_square(rec_r)*std::cos(rec_lat)); + } + } // end of loop all receivers + + // communicate tau_old_loc to all processors + grid.send_recev_boundary_data(grid.tau_old_loc); + +} + +void Iterator::fix_boundary_Tadj(Grid& grid) { + + if (!is_teleseismic){ + // r, theta boundary + if (grid.i_first()) + for (int ir = 0; ir < nr; ir++) + for (int it = 0; it < nt; it++) + grid.tau_loc[I2V(0,it,ir)] = _0_CR; + if (grid.i_last()) + for (int ir = 0; ir < nr; ir++) + for (int it = 0; it < nt; it++) + grid.tau_loc[I2V(np-1,it,ir)] = _0_CR; + // r, phi boundary + if (grid.j_first()) + for (int ir = 0; ir < nr; ir++) + for (int ip = 0; ip < np; ip++) + grid.tau_loc[I2V(ip,0,ir)] = _0_CR; + if (grid.j_last()) + for (int ir = 0; ir < nr; ir++) + for (int ip = 0; ip < np; ip++) + grid.tau_loc[I2V(ip,nt-1,ir)] = _0_CR; + // theta, phi boundary + if (grid.k_first()) + for (int it = 0; it < nt; it++) + for (int ip = 0; ip < np; ip++) + grid.tau_loc[I2V(ip,it,0)] = _0_CR; + if (grid.k_last()) + for (int it = 0; it < nt; it++) + for (int ip = 0; ip < np; ip++) + grid.tau_loc[I2V(ip,it,nr-1)] = _0_CR; + } else { + for (int ir = 0; ir < nr; ir++) + for (int it = 0; it < nt; it++) + for (int ip = 0; ip < np; ip++) + calculate_boundary_nodes_adj(grid,ip,it,ir); + } + +} + + +void Iterator::calculate_stencil_1st_order_upwind(Grid&grid, int&iip, int&jjt, int&kkr){ + + bool check_out = false; + int iip_out = 24; + int jjt_out = 29; + int kkr_out = 38; + // preparations + + int ii = I2V(iip, jjt, kkr); + int ii_mp = I2V(iip-1, jjt, kkr); + int ii_pp = I2V(iip+1, jjt, kkr); + int ii_mt = I2V(iip , jjt-1, kkr); + int ii_pt = I2V(iip , jjt+1, kkr); + int ii_mr = I2V(iip , jjt, kkr-1); + int ii_pr = I2V(iip , jjt, kkr+1); + + count_cand = 0; + // forward and backward partial differential discretization + // T_p = (T0*tau)_p = T0p*tau + T0v*tau_p = ap*tau(iip, jjt, kkr)+bp; + // T_t = (T0*tau)_t = T0t*tau + T0v*tau_t = at*tau(iip, jjt, kkr)+bt; + // T_r = (T0*tau)_r = T0r*tau + T0v*tau_r = ar*tau(iip, jjt, kkr)+br; + if (iip > 0){ + ap1 = grid.T0p_loc[ii] + grid.T0v_loc[ii]/dp; + bp1 = -grid.T0v_loc[ii]/dp*grid.tau_loc[ii_mp]; + } + if (iip < np-1){ + ap2 = grid.T0p_loc[ii] - grid.T0v_loc[ii]/dp; + bp2 = grid.T0v_loc[ii]/dp*grid.tau_loc[ii_pp]; + } + + if (jjt > 0){ + at1 = grid.T0t_loc[ii] + grid.T0v_loc[ii]/dt; + bt1 = -grid.T0v_loc[ii]/dt*grid.tau_loc[ii_mt]; + } + if (jjt < nt-1){ + at2 = grid.T0t_loc[ii] - grid.T0v_loc[ii]/dt; + bt2 = grid.T0v_loc[ii]/dt*grid.tau_loc[ii_pt]; + } + + if (kkr > 0){ + ar1 = grid.T0r_loc[ii] + grid.T0v_loc[ii]/dr; + br1 = -grid.T0v_loc[ii]/dr*grid.tau_loc[ii_mr]; + } + if (kkr < nr-1){ + ar2 = grid.T0r_loc[ii] - grid.T0v_loc[ii]/dr; + br2 = grid.T0v_loc[ii]/dr*grid.tau_loc[ii_pr]; + } + bc_f2 = grid.fac_b_loc[ii]*grid.fac_c_loc[ii] - std::pow(grid.fac_f_loc[ii],_2_CR); + + // start to find candidate solutions + + // first catalog: characteristic travels through tetrahedron in 3D volume (8 cases) + for (int i_case = 0; i_case < 8; i_case++){ + + // determine discretization of T_p,T_t,T_r + switch (i_case) { + case 0: // characteristic travels from -p, -t, -r + if (iip == 0 || jjt == 0 || kkr == 0) + continue; + ap = ap1; bp = bp1; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: // characteristic travels from -p, -t, +r + if (iip == 0 || jjt == 0 || kkr == nr-1) + continue; + ap = ap1; bp = bp1; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: // characteristic travels from -p, +t, -r + if (iip == 0 || jjt == nt-1 || kkr == 0) + continue; + ap = ap1; bp = bp1; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: // characteristic travels from -p, +t, +r + if (iip == 0 || jjt == nt-1 || kkr == nr-1) + continue; + ap = ap1; bp = bp1; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + case 4: // characteristic travels from +p, -t, -r + if (iip == np-1 || jjt == 0 || kkr == 0) + continue; + ap = ap2; bp = bp2; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 5: // characteristic travels from +p, -t, +r + if (iip == np-1 || jjt == 0 || kkr == nr-1) + continue; + ap = ap2; bp = bp2; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 6: // characteristic travels from +p, +t, -r + if (iip == np-1 || jjt == nt-1 || kkr == 0) + continue; + ap = ap2; bp = bp2; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 7: // characteristic travels from +p, +t, +r + if (iip == np-1 || jjt == nt-1 || kkr == nr-1) + continue; + ap = ap2; bp = bp2; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_p, T_t, T_r into eikonal equation, solving the quadratic equation with respect to tau(iip,jjt,kkr) + // that is a*(ar*tau+br)^2 + b*(at*tau+bt)^2 + c*(ap*tau+bp)^2 - 2*f*(at*tau+bt)*(ap*tau+bp) = s^2 + eqn_a = grid.fac_a_loc[ii] * std::pow(ar, _2_CR) + grid.fac_b_loc[ii] * std::pow(at, _2_CR) + + grid.fac_c_loc[ii] * std::pow(ap, _2_CR) - _2_CR*grid.fac_f_loc[ii] * at * ap; + eqn_b = _2_CR*grid.fac_a_loc[ii] * ar * br + _2_CR*grid.fac_b_loc[ii] * at * bt + + _2_CR*grid.fac_c_loc[ii] * ap * bp - _2_CR*grid.fac_f_loc[ii] * (at*bp + bt*ap); + eqn_c = grid.fac_a_loc[ii] * std::pow(br, _2_CR) + grid.fac_b_loc[ii] * std::pow(bt, _2_CR) + + grid.fac_c_loc[ii] * std::pow(bp, _2_CR) - _2_CR*grid.fac_f_loc[ii] * bt * bp + - std::pow(grid.fun_loc[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: the characteristic passing through (iip,jjt,kkr) is in between used three sides + // characteristic direction is (dr/dt, dtheta/dt, tphi/dt) = (H_p1,H_p2,H_p3), p1 = T_r, p2 = T_t, p3 = T_p + T_r = ar*tmp_tau + br; + T_t = at*tmp_tau + bt; + T_p = ap*tmp_tau + bp; + + charact_r = grid.fac_a_loc[ii]*T_r; + charact_t = grid.fac_b_loc[ii]*T_t - grid.fac_f_loc[ii]*T_p; + charact_p = grid.fac_c_loc[ii]*T_p - grid.fac_f_loc[ii]*T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -p, -t, -r + if (charact_p >= 0 && charact_t >= 0 && charact_r >= 0 && tmp_tau > 0){ + // the additional constrains is only valid for weak anisotropy. it ensures correctness near the source. + is_causality = true; + } + break; + case 1: //characteristic travels from -p, -t, +r + if (charact_p >= 0 && charact_t >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from -p, +t, -r + if (charact_p >= 0 && charact_t <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from -p, +t, +r + if (charact_p >= 0 && charact_t <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 4: //characteristic travels from +p, -t, -r + if (charact_p <= 0 && charact_t >= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 5: //characteristic travels from +p, -t, +r + if (charact_p <= 0 && charact_t >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 6: //characteristic travels from +p, +t, -r + if (charact_p <= 0 && charact_t <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 7: //characteristic travels from +p, +t, +r + if (charact_p <= 0 && charact_t <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "body case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 0: //characteristic travels from -p, -t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 1: //characteristic travels from -p, -t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 2: //characteristic travels from -p, +t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 3: //characteristic travels from -p, +t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 4: //characteristic travels from +p, -t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + case 5: //characteristic travels from +p, -t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + case 6: //characteristic travels from +p, +t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + case 7: //characteristic travels from +p, +t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + } + + } + + + } + + } + } + + + // second catalog: characteristic travels through triangles in 2D volume (12 cases) + // case: 1-4 + // characteristic on r-t plane, force H_p3 = H_(T_p) = 0, that is, c*T_p-f*T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 + (bc-f^2)/c*T_t^2 = s^2 + for (int i_case = 0; i_case < 4; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (jjt == 0 || kkr == 0){ + continue; + } + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: //characteristic travels from -t, +r + if (jjt == 0 || kkr == nr-1){ + continue; + } + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: //characteristic travels from +t, -r + if (jjt == nt-1 || kkr == 0){ + continue; + } + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: //characteristic travels from +t, +r + if (jjt == nt-1 || kkr == nr-1){ + continue; + } + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 + (bc-f^2)/c*(at*tau+bt)^2 = s^2 + eqn_a = grid.fac_a_loc[ii] * std::pow(ar, _2_CR) + bc_f2/grid.fac_c_loc[ii] * std::pow(at, _2_CR); + eqn_b = _2_CR*grid.fac_a_loc[ii] * ar * br + _2_CR*bc_f2/grid.fac_c_loc[ii] * at * bt; + eqn_c = grid.fac_a_loc[ii] * std::pow(br, _2_CR) + bc_f2/grid.fac_c_loc[ii] * std::pow(bt, _2_CR) + - std::pow(grid.fun_loc[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_r = ar*tmp_tau + br; + T_t = at*tmp_tau + bt; + + charact_r = grid.fac_a_loc[ii]*T_r; + charact_t = bc_f2/grid.fac_c_loc[ii]*T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (charact_t >= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 1: //characteristic travels from -t, +r + if (charact_t >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from +t, -r + if (charact_t <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from +t, +r + if (charact_t <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "surface case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 0: //characteristic travels from -t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << std::endl; + break; + case 1: //characteristic travels from -t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << std::endl; + break; + case 2: //characteristic travels from +t, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << std::endl; + break; + case 3: //characteristic travels from +t, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << std::endl; + break; + } + } + + } + } + + } + + // case: 5-8 + // characteristic on r-p plane, force H_p2 = H_(T_t) = 0, that is, b*T_t-f*T_p = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 + (bc-f^2)/b*T_p^2 = s^2 + for (int i_case = 4; i_case < 8; i_case++){ + switch (i_case){ + case 4: //characteristic travels from -p, -r + if (iip == 0 || kkr == 0){ + continue; + } + ap = ap1; bp = bp1; + ar = ar1; br = br1; + break; + case 5: //characteristic travels from -p, +r + if (iip == 0 || kkr == nr-1){ + continue; + } + ap = ap1; bp = bp1; + ar = ar2; br = br2; + break; + case 6: //characteristic travels from +p, -r + if (iip == np-1 || kkr == 0){ + continue; + } + ap = ap2; bp = bp2; + ar = ar1; br = br1; + break; + case 7: //characteristic travels from +p, +r + if (iip == np-1 || kkr == nr-1){ + continue; + } + ap = ap2; bp = bp2; + ar = ar2; br = br2; + break; + } + + // plug T_p, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 + (bc-f^2)/b*(ap*tau+bp)^2 = s^2 + eqn_a = grid.fac_a_loc[ii] * std::pow(ar, _2_CR) + bc_f2/grid.fac_b_loc[ii] * std::pow(ap, _2_CR); + eqn_b = _2_CR*grid.fac_a_loc[ii] * ar * br + _2_CR*bc_f2/grid.fac_b_loc[ii] * ap * bp; + eqn_c = grid.fac_a_loc[ii] * std::pow(br, _2_CR) + bc_f2/grid.fac_b_loc[ii] * std::pow(bp, _2_CR) + - std::pow(grid.fun_loc[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_r = ar*tmp_tau + br; + T_p = ap*tmp_tau + bp; + + charact_r = grid.fac_a_loc[ii]*T_r; + charact_p = bc_f2/grid.fac_b_loc[ii]*T_p; + + is_causality = false; + switch (i_case){ + case 4: //characteristic travels from -p, -r + if (charact_p >= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 5: //characteristic travels from -p, +r + if (charact_p >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 6: //characteristic travels from +p, -r + if (charact_p <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 7: //characteristic travels from +p, +r + if (charact_p <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "surface, case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 4: // characteristic travels from -p, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 5: // characteristic travels from -p, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 6: // characteristic travels from +p, -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + case 7: // characteristic travels from +p, +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + } + } + + } + } + } + + // case: 9-12 + // characteristic on t-p plane, force H_p1 = H_(T_t) = 0, that is, T_r = 0 + // plug the constraint into eikonal equation, we have the equation: b*T_t^2 + c*T_p^2 - 2f*T_t*T_p = s^2 + for (int i_case = 8; i_case < 12; i_case++){ + switch (i_case){ + case 8: //characteristic travels from -p, -t + if (iip == 0 || jjt == 0){ + continue; + } + ap = ap1; bp = bp1; + at = at1; bt = bt1; + break; + case 9: //characteristic travels from -p, +t + if (iip == 0 || jjt == nt-1){ + continue; + } + ap = ap1; bp = bp1; + at = at2; bt = bt2; + break; + case 10: //characteristic travels from +p, -t + if (iip == np-1 || jjt == 0){ + continue; + } + ap = ap2; bp = bp2; + at = at1; bt = bt1; + break; + case 11: //characteristic travels from +p, +t + if (iip == np-1 || jjt == nt-1){ + continue; + } + ap = ap2; bp = bp2; + at = at2; bt = bt2; + break; + } + + // plug T_p, T_t into eikonal equation, solve the quadratic equation: b*(at*tau+bt)^2 + c*(ap*tau+bp)^2 - 2f*(at*tau+bt)*(ap*tau+bp) = s^2 + eqn_a = grid.fac_b_loc[ii] * std::pow(at, _2_CR) + + grid.fac_c_loc[ii] * std::pow(ap, _2_CR) - _2_CR*grid.fac_f_loc[ii] * at * ap; + eqn_b = _2_CR*grid.fac_b_loc[ii] * at * bt + + _2_CR*grid.fac_c_loc[ii] * ap * bp - _2_CR*grid.fac_f_loc[ii] * (at*bp + bt*ap); + eqn_c = grid.fac_b_loc[ii] * std::pow(bt, _2_CR) + + grid.fac_c_loc[ii] * std::pow(bp, _2_CR) - _2_CR*grid.fac_f_loc[ii] * bt * bp + - std::pow(grid.fun_loc[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_t = at*tmp_tau + bt; + T_p = ap*tmp_tau + bp; + + charact_t = grid.fac_b_loc[ii]*T_t - grid.fac_f_loc[ii]*T_p; + charact_p = grid.fac_c_loc[ii]*T_p - grid.fac_f_loc[ii]*T_t; + + is_causality = false; + switch (i_case){ + case 8: //characteristic travels from -p, -t + if (charact_p >= 0 && charact_t >= 0 && tmp_tau > 0){ + + is_causality = true; + } + break; + case 9: //characteristic travels from -p, +t + if (charact_p >= 0 && charact_t <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 10: //characteristic travels from +p, -t + if (charact_p <= 0 && charact_t >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 11: //characteristic travels from +p, +t + if (charact_p <= 0 && charact_t <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "surface case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 8: // characteristic travels from -p, -t + std::cout << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 9: // characteristic travels from -p, +t + std::cout << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " + << std::endl; + break; + case 10: // characteristic travels from +p, -t + std::cout << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << std::endl; + break; + case 11: // characteristic travels from +p, +t + std::cout << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " + << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " + << "T_t: " << T_t << ", T_p: " << T_p << ", " + << std::endl; + // // T_t = (T0v * tau)_t = + // std::cout << " check T_t. " << std::endl; + // std::cout << "T_+ = T0v_loc[I2V(iip,jjt+1,kkr)] * tau_loc[I2V(iip,jjt+1,kkr)]:" << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << std::endl; + // std::cout << "T = T0v_loc[I2V(iip,jjt,kkr)] * tmp_tau :" << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau << std::endl; + // std::cout << "T_t_1 = (T_+ - T)/dt = " + // << (grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] + // - grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau) / grid.dt << std::endl; + // std::cout << "T_t_2 = T0v * (tau_+ - tau)/dt + T0t * tau " << std::endl; + // std::cout << "T0v_+ : " << grid.T0v_loc[I2V(iip,jjt+1,kkr)] << std::endl; + // std::cout << "T0v : " << grid.T0v_loc[I2V(iip ,jjt,kkr)] << std::endl; + // std::cout << "tau_+ : " << grid.tau_loc[I2V(iip, jjt+1, kkr)] << std::endl; + // std::cout << "tau : " << tmp_tau << std::endl; + // std::cout << "T0t : " << grid.T0t_loc[I2V(iip,jjt,kkr)] << std::endl; + // std::cout << "T_t_2 = " + // << grid.T0v_loc[I2V(iip,jjt,kkr)] * (grid.tau_loc[I2V(iip, jjt+1, kkr)] - tmp_tau) / grid.dt + // + grid.T0t_loc[I2V(iip,jjt,kkr)] * tmp_tau << std::endl; + // break; + } + } + + } + } + } + + + // third catalog: characteristic travels through lines in 1D volume (6 cases) + // case: 1-2 + // characteristic travels along r-axis, force H_p2, H_p3 = 0, that is, T_p = T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 = s^2 + for (int i_case = 0; i_case < 2; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -r + if (kkr == 0){ + continue; + } + ar = ar1; br = br1; + break; + case 1: //characteristic travels from +r + if (kkr == nr-1){ + continue; + } + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)/grid.fac_a_loc[ii]) - br)/ar; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)/grid.fac_a_loc[ii]) - br)/ar; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -r (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_mr] * grid.T0v_loc[ii_mr] + && tmp_tau > grid.tau_loc[ii_mr]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 1: //characteristic travels from +r + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_pr] * grid.T0v_loc[ii_pr] + && tmp_tau > grid.tau_loc[ii_pr]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "line case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 0: //characteristic travels from -r + std::cout << "-r: " << grid.T0v_loc[I2V(iip,jjt,kkr-1)]*grid.tau_loc[I2V(iip, jjt, kkr-1)] << ", " << std::endl; + break; + case 1: //characteristic travels from +r + std::cout << "+r: " << grid.T0v_loc[I2V(iip,jjt,kkr+1)]*grid.tau_loc[I2V(iip, jjt, kkr+1)] << ", " << std::endl; + break; + } + } + + } + + } + + // case: 3-4 + // characteristic travels along t-axis, force H_p1, H_p3 = 0, that is, T_r = 0; c*T_p-f*T_t = 0 + // plug the constraint into eikonal equation, we have the equation: (bc-f^2)/c*T_t^2 = s^2 + for (int i_case = 2; i_case < 4; i_case++){ + switch (i_case){ + case 2: //characteristic travels from -t + if (jjt == 0){ + continue; + } + at = at1; bt = bt1; + break; + case 3: //characteristic travels from +t + if (jjt == nt-1){ + continue; + } + at = at2; bt = bt2; + break; + } + + // plug T_p, T_r into eikonal equation, solve the quadratic equation: (bc-f^2)/c*(at*tau+bt)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)*grid.fac_c_loc[ii]/bc_f2) - bt)/at; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)*grid.fac_c_loc[ii]/bc_f2) - bt)/at; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 2: //characteristic travels from -t (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_mt] * grid.T0v_loc[ii_mt] + && tmp_tau > grid.tau_loc[ii_mt]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 3: //characteristic travels from +t + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_pt] * grid.T0v_loc[ii_pt] + && tmp_tau > grid.tau_loc[ii_pt]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "line case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 2: //characteristic travels from -t + std::cout << "-t: " << grid.T0v_loc[I2V(iip,jjt-1,kkr)]*grid.tau_loc[I2V(iip, jjt-1, kkr)] << ", " << std::endl; + break; + case 3: //characteristic travels from +t + std::cout << "+t: " << grid.T0v_loc[I2V(iip,jjt+1,kkr)]*grid.tau_loc[I2V(iip, jjt+1, kkr)] << ", " << std::endl; + break; + } + } + + } + } + + // case: 5-6 + // characteristic travels along p-axis, force H_p1, H_p2 = 0, that is, T_r = 0; b*T_t-f*T_p = 0 + // plug the constraint into eikonal equation, we have the equation: (bc-f^2)/b*T_p^2 = s^2 + for (int i_case = 4; i_case < 6; i_case++){ + switch (i_case){ + case 4: //characteristic travels from -p + if (iip == 0){ + continue; + } + ap = ap1; bp = bp1; + break; + case 5: //characteristic travels from +p + if (iip == np-1){ + continue; + } + ap = ap2; bp = bp2; + break; + + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: (bc-f^2)/b*(ap*tau+bp)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)*grid.fac_b_loc[ii]/bc_f2) - bp)/ap; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(grid.fun_loc[ii], _2_CR)*grid.fac_b_loc[ii]/bc_f2) - bp)/ap; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 4: //characteristic travels from -p (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_mp] * grid.T0v_loc[ii_mp] + && tmp_tau > grid.tau_loc[ii_mp]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 5: //characteristic travels from +p + if (tmp_tau * grid.T0v_loc[ii] > grid.tau_loc[ii_pp] * grid.T0v_loc[ii_pp] + && tmp_tau > grid.tau_loc[ii_pp]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + + } + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "line case, i_case, i_solution, is_causality, tau, T0, tau*t0: " + << i_case << ", " << i_solution << ", " << is_causality << ", " << tmp_tau << ", " + << grid.T0v_loc[I2V(iip,jjt,kkr)] << ", " << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + << ", " << std::endl; + switch (i_case) { + case 4: //characteristic travels from -p + std::cout << "-p: " << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << ", " << std::endl; + + // T_p = (T0v * tau)_p = + std::cout << " check T_p. " << std::endl; + std::cout << "T_- = T0v_loc[I2V(iip-1,jjt,kkr)] * tau_loc[I2V(iip-1,jjt,kkr)]:" << grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)] << std::endl; + std::cout << "T = T0v_loc[I2V(iip,jjt,kkr)] * tmp_tau :" << grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau << std::endl; + std::cout << "T_p_1 = (T - T_-)/dp = " + << (grid.T0v_loc[I2V(iip,jjt,kkr)]*tmp_tau + - grid.T0v_loc[I2V(iip-1,jjt,kkr)]*grid.tau_loc[I2V(iip-1, jjt, kkr)]) / grid.dp << std::endl; + std::cout << "T_p_2 = T0v * (tau - tau_-)/dt + T0t * tau " << std::endl; + std::cout << "T0v : " << grid.T0v_loc[I2V(iip,jjt,kkr)] << std::endl; + std::cout << "T0v_- : " << grid.T0v_loc[I2V(iip-1,jjt,kkr)] << std::endl; + std::cout << "grid.dp: " << grid.dp << std::endl; + std::cout << "tau : " << tmp_tau << std::endl; + std::cout << "tau_- : " << grid.tau_loc[I2V(iip-1, jjt, kkr)] << std::endl; + std::cout << "T0p : " << grid.T0p_loc[I2V(iip,jjt,kkr)] << std::endl; + std::cout << "T_p_2 = " + << grid.T0v_loc[I2V(iip,jjt,kkr)] * (tmp_tau - grid.tau_loc[I2V(iip-1, jjt, kkr)]) / grid.dp + + grid.T0t_loc[I2V(iip,jjt,kkr)] * tmp_tau << std::endl; + break; + + + break; + case 5: //characteristic travels from +p + std::cout << "+p: " << grid.T0v_loc[I2V(iip+1,jjt,kkr)]*grid.tau_loc[I2V(iip+1, jjt, kkr)] << ", " << std::endl; + break; + } + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + } + + // final, choose the minimum candidate solution as the updated value + for (int i_cand = 0; i_cand < count_cand; i_cand++){ + grid.tau_loc[I2V(iip, jjt, kkr)] = std::min(grid.tau_loc[I2V(iip, jjt, kkr)], canditate[i_cand]); + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "tau_loc: " << grid.tau_loc[I2V(iip, jjt, kkr)] << ", i_cand: " << i_cand << ", cand: " << canditate[i_cand] << std::endl; + } + + if (grid.tau_loc[I2V(iip, jjt, kkr)] < 0 ){ + std::cout << "error, tau_loc < 0. iip: " << iip << ", jjt: " << jjt << ", kkr: " << kkr << std::endl; + exit(1); + } + + } + + + + if (check_out && iip == iip_out && jjt == jjt_out && kkr == kkr_out){ + std::cout << "tau_loc: " << grid.tau_loc[I2V(iip, jjt, kkr)] + << ", T_loc: " << grid.T0v_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip, jjt, kkr)] + << std::endl; + } +} + +void Iterator::calculate_stencil_1st_order(Grid& grid, int& iip, int& jjt, int&kkr){ + sigr = SWEEPING_COEFF*std::sqrt(grid.fac_a_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + sigt = SWEEPING_COEFF*std::sqrt(grid.fac_b_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + sigp = SWEEPING_COEFF*std::sqrt(grid.fac_c_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + pp1 = (grid.tau_loc[I2V(iip , jjt , kkr )] - grid.tau_loc[I2V(iip-1, jjt , kkr )])/dp; + pp2 = (grid.tau_loc[I2V(iip+1, jjt , kkr )] - grid.tau_loc[I2V(iip , jjt , kkr )])/dp; + + pt1 = (grid.tau_loc[I2V(iip , jjt , kkr )] - grid.tau_loc[I2V(iip , jjt-1, kkr )])/dt; + pt2 = (grid.tau_loc[I2V(iip , jjt+1, kkr )] - grid.tau_loc[I2V(iip , jjt , kkr )])/dt; + + pr1 = (grid.tau_loc[I2V(iip , jjt , kkr )] - grid.tau_loc[I2V(iip , jjt , kkr-1)])/dr; + pr2 = (grid.tau_loc[I2V(iip , jjt , kkr+1)] - grid.tau_loc[I2V(iip , jjt , kkr )])/dr; + + // LF Hamiltonian + Htau = calc_LF_Hamiltonian(grid, pp1, pp2, pt1, pt2, pr1, pr2, iip, jjt, kkr); + + grid.tau_loc[I2V(iip, jjt, kkr)] += coe*(grid.fun_loc[I2V(iip, jjt, kkr)] - Htau) \ + + coe*(sigr*(pr2-pr1)/_2_CR + sigt*(pt2-pt1)/_2_CR + sigp*(pp2-pp1)/_2_CR); + +} + + +void Iterator::calculate_stencil_3rd_order(Grid& grid, int& iip, int& jjt, int&kkr){ + sigr = SWEEPING_COEFF*std::sqrt(grid.fac_a_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + sigt = SWEEPING_COEFF*std::sqrt(grid.fac_b_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + sigp = SWEEPING_COEFF*std::sqrt(grid.fac_c_loc[I2V(iip, jjt, kkr)])*grid.T0v_loc[I2V(iip, jjt, kkr)]; + coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + + // direction p + if (iip == 1) { + pp1 = (grid.tau_loc[I2V(iip,jjt,kkr)] \ + - grid.tau_loc[I2V(iip-1,jjt,kkr)]) / dp; + + wp2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip+2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip+1,jjt,kkr)]) )) ); + + pp2 = (_1_CR - wp2) * ( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp2 * ( - _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip+2,jjt,kkr)] ) / _2_CR / dp; + + } else if (iip == np-2) { + wp1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip-2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip-1,jjt,kkr)]) )) ); + + pp1 = (_1_CR - wp1) * ( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip-2,jjt,kkr)] ) / _2_CR / dp; + + pp2 = (grid.tau_loc[I2V(iip+1,jjt,kkr)] - grid.tau_loc[I2V(iip,jjt,kkr)]) / dp; + + } else { + wp1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip-2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip-1,jjt,kkr)]) )) ); + + pp1 = (_1_CR - wp1) * ( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip-2,jjt,kkr)] ) / _2_CR / dp; + + wp2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + + grid.tau_loc[I2V(iip+2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip-1,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip+1,jjt,kkr)]) )) ); + + pp2 = (_1_CR - wp2) * ( grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp2 * ( - _3_CR * grid.tau_loc[I2V(iip ,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip+1,jjt,kkr)] \ + - grid.tau_loc[I2V(iip+2,jjt,kkr)] ) / _2_CR / dp; + + } + + // direction t + if (jjt == 1) { + pt1 = (grid.tau_loc[I2V(iip,jjt ,kkr)] \ + - grid.tau_loc[I2V(iip,jjt-1,kkr)]) / dt; + + wt2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt+2,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt+1,kkr)]) )) ); + + pt2 = (_1_CR - wt2) * ( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt2 * ( - _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt+2,kkr)] ) / _2_CR / dt; + + } else if (jjt == nt-2) { + wt1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-2,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-1,kkr)]) )) ); + + pt1 = (_1_CR - wt1) * ( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-2,kkr)] ) / _2_CR / dt; + + pt2 = (grid.tau_loc[I2V(iip,jjt+1,kkr)] - grid.tau_loc[I2V(iip,jjt,kkr)]) / dt; + + } else { + wt1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-2,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-1,kkr)]) )) ); + + pt1 = (_1_CR - wt1) * ( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt-2,kkr)] ) / _2_CR / dt; + + wt2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + + grid.tau_loc[I2V(iip,jjt+2,kkr)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt-1,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt+1,kkr)]) )) ); + + pt2 = (_1_CR - wt2) * ( grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt2 * ( - _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip,jjt+1,kkr)] \ + - grid.tau_loc[I2V(iip,jjt+2,kkr)] ) / _2_CR / dt; + + } + + // direction r + if (kkr == 1) { + pr1 = (grid.tau_loc[I2V(iip,jjt,kkr )] \ + - grid.tau_loc[I2V(iip,jjt,kkr-1)]) / dr; + + wr2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr+2)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt,kkr+1)]) )) ); + + pr2 = (_1_CR - wr2) * ( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr2 * ( - _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr+2)] ) / _2_CR / dr; + + } else if (kkr == nr - 2) { + wr1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-2)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-1)]) )) ); + + pr1 = (_1_CR - wr1) * ( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-2)] ) / _2_CR / dr; + + pr2 = (grid.tau_loc[I2V(iip,jjt,kkr+1)] - grid.tau_loc[I2V(iip,jjt,kkr)]) / dr; + + } else { + wr1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-2)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-1)]) )) ); + + pr1 = (_1_CR - wr1) * ( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr1 * ( + _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr-2)] ) / _2_CR / dr; + + wr2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + + grid.tau_loc[I2V(iip,jjt,kkr+2)]) ) \ + + / (eps + my_square( grid.tau_loc[I2V(iip,jjt,kkr-1)] \ + -_2_CR*grid.tau_loc[I2V(iip, jjt,kkr)] \ + + grid.tau_loc[I2V(iip,jjt,kkr+1)]) )) ); + + pr2 = (_1_CR - wr2) * ( grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr2 * ( - _3_CR * grid.tau_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.tau_loc[I2V(iip,jjt,kkr+1)] \ + - grid.tau_loc[I2V(iip,jjt,kkr+2)] ) / _2_CR / dr; + + } + + // LF Hamiltonian + Htau = calc_LF_Hamiltonian(grid, pp1, pp2, pt1, pt2, pr1, pr2, iip, jjt, kkr); + + // update tau + grid.tau_loc[I2V(iip,jjt,kkr)] += coe * ((grid.fun_loc[I2V(iip,jjt,kkr)] - Htau) + (sigr*(pr2-pr1) + sigt*(pt2-pt1) + sigp*(pp2-pp1))/_2_CR); + +} + + +void Iterator::calculate_stencil_adj(Grid& grid, int& iip, int& jjt, int& kkr){ + //CUSTOMREAL tmpr1 = (grid.r_loc_1d[kkr-1]+grid.r_loc_1d[kkr])/_2_CR; + //CUSTOMREAL tmpr2 = (grid.r_loc_1d[kkr+1]+grid.r_loc_1d[kkr])/_2_CR; + CUSTOMREAL tmpt1 = (grid.t_loc_1d[jjt-1]+grid.t_loc_1d[jjt])/_2_CR; + CUSTOMREAL tmpt2 = (grid.t_loc_1d[jjt] +grid.t_loc_1d[jjt+1])/_2_CR; + + CUSTOMREAL a1 = - (_1_CR+grid.zeta_loc[I2V(iip,jjt,kkr-1)]+grid.zeta_loc[I2V(iip,jjt,kkr)]) * (grid.T_loc[I2V(iip,jjt,kkr)]-grid.T_loc[I2V(iip,jjt,kkr-1)]) / dr; + CUSTOMREAL a1m = (a1 - std::abs(a1))/_2_CR; + CUSTOMREAL a1p = (a1 + std::abs(a1))/_2_CR; + + CUSTOMREAL a2 = - (_1_CR+grid.zeta_loc[I2V(iip,jjt,kkr)]+grid.zeta_loc[I2V(iip,jjt,kkr+1)]) * (grid.T_loc[I2V(iip,jjt,kkr+1)]-grid.T_loc[I2V(iip,jjt,kkr)]) / dr; + CUSTOMREAL a2m = (a2 - std::abs(a2))/_2_CR; + CUSTOMREAL a2p = (a2 + std::abs(a2))/_2_CR; + + CUSTOMREAL b1 = - (_1_CR-grid.xi_loc[ I2V(iip,jjt-1,kkr)]-grid.xi_loc[ I2V(iip,jjt,kkr)]) / my_square(grid.r_loc_1d[kkr]) * (grid.T_loc[I2V(iip,jjt,kkr)]-grid.T_loc[I2V(iip,jjt-1,kkr)]) / dt \ + - ( grid.eta_loc[I2V(iip,jjt-1,kkr)]+grid.eta_loc[I2V(iip,jjt,kkr)]) / (my_square(grid.r_loc_1d[kkr])*std::cos(tmpt1)) / (_4_CR*dp) \ + * ((grid.T_loc[I2V(iip+1,jjt-1,kkr)]-grid.T_loc[I2V(iip-1,jjt-1,kkr)]) \ + + (grid.T_loc[I2V(iip+1,jjt,kkr)] -grid.T_loc[I2V(iip-1,jjt,kkr)])); + CUSTOMREAL b1m = (b1 - std::abs(b1))/_2_CR; + CUSTOMREAL b1p = (b1 + std::abs(b1))/_2_CR; + + CUSTOMREAL b2 = - (_1_CR-grid.xi_loc[ I2V(iip,jjt,kkr)]-grid.xi_loc[ I2V(iip,jjt+1,kkr)]) / my_square(grid.r_loc_1d[kkr]) * (grid.T_loc[I2V(iip,jjt+1,kkr)]-grid.T_loc[I2V(iip,jjt,kkr)]) / dt \ + - ( grid.eta_loc[I2V(iip,jjt,kkr)]+grid.eta_loc[I2V(iip,jjt+1,kkr)]) / (my_square(grid.r_loc_1d[kkr])*std::cos(tmpt2)) / (_4_CR*dp) \ + * ((grid.T_loc[I2V(iip+1,jjt,kkr)]-grid.T_loc[I2V(iip-1,jjt,kkr)]) \ + + (grid.T_loc[I2V(iip+1,jjt+1,kkr)]-grid.T_loc[I2V(iip-1,jjt+1,kkr)])); + CUSTOMREAL b2m = (b2 - std::abs(b2))/_2_CR; + CUSTOMREAL b2p = (b2 + std::abs(b2))/_2_CR; + + CUSTOMREAL c1 = - (_1_CR+grid.xi_loc[I2V(iip-1,jjt,kkr)]+grid.xi_loc[I2V(iip,jjt,kkr)]) / (my_square(grid.r_loc_1d[kkr])*my_square(std::cos(grid.t_loc_1d[jjt]))) \ + * (grid.T_loc[I2V(iip,jjt,kkr)]-grid.T_loc[I2V(iip-1,jjt,kkr)]) / dp \ + - (grid.eta_loc[I2V(iip-1,jjt,kkr)]+grid.eta_loc[I2V(iip,jjt,kkr)]) / (my_square(grid.r_loc_1d[kkr])*std::cos(grid.t_loc_1d[jjt])) / (_4_CR*dt) \ + * ((grid.T_loc[I2V(iip-1,jjt+1,kkr)]-grid.T_loc[I2V(iip-1,jjt-1,kkr)]) \ + + (grid.T_loc[I2V(iip, jjt+1,kkr)]-grid.T_loc[I2V(iip, jjt-1,kkr)])); + CUSTOMREAL c1m = (c1 - std::abs(c1))/_2_CR; + CUSTOMREAL c1p = (c1 + std::abs(c1))/_2_CR; + + CUSTOMREAL c2 = - (_1_CR+grid.xi_loc[I2V(iip,jjt,kkr)]+grid.xi_loc[I2V(iip+1,jjt,kkr)]) / (my_square(grid.r_loc_1d[kkr])*my_square(std::cos(grid.t_loc_1d[jjt]))) \ + * (grid.T_loc[I2V(iip+1,jjt,kkr)]-grid.T_loc[I2V(iip,jjt,kkr)]) / dp \ + - (grid.eta_loc[I2V(iip,jjt,kkr)]+grid.eta_loc[I2V(iip+1,jjt,kkr)]) / (my_square(grid.r_loc_1d[kkr])*std::cos(grid.t_loc_1d[jjt])) / (_4_CR*dt) \ + * ((grid.T_loc[I2V(iip,jjt+1,kkr)]-grid.T_loc[I2V(iip,jjt-1,kkr)]) \ + + (grid.T_loc[I2V(iip+1,jjt+1,kkr)]-grid.T_loc[I2V(iip+1,jjt-1,kkr)])); + CUSTOMREAL c2m = (c2 - std::abs(c2))/_2_CR; + CUSTOMREAL c2p = (c2 + std::abs(c2))/_2_CR; + + // additional terms of divergence in spherical cooridinate + CUSTOMREAL d = - _2_CR * (_1_CR+_2_CR*grid.zeta_loc[I2V(iip,jjt,kkr)]) / grid.r_loc_1d[kkr] \ + * (grid.T_loc[I2V(iip,jjt,kkr+1)]-grid.T_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + (_1_CR-_2_CR*grid.xi_loc[I2V(iip,jjt,kkr)]) * std::sin(grid.t_loc_1d[jjt]) / (my_square(grid.r_loc_1d[kkr])*std::cos(grid.t_loc_1d[jjt])) \ + * (grid.T_loc[I2V(iip,jjt+1,kkr)]-grid.T_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + _2_CR * grid.eta_loc[I2V(iip,jjt,kkr)] * std::sin(grid.t_loc_1d[jjt]) / (my_square(grid.r_loc_1d[kkr])*my_square(std::cos(grid.t_loc_1d[jjt]))) \ + * (grid.T_loc[I2V(iip+1,jjt,kkr)]-grid.T_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp; + + // stabilize the calculation on the boundary + // if (kkr == 1 && grid.k_first() && a1p > 0 ){ + // a1m = -a1p; + // a1p = 0; + // } + + // coe + CUSTOMREAL coe = (a2p-a1m)/dr + (b2p-b1m)/dt + (c2p-c1m)/dp; + + if (isZeroAdj(coe)) { // here the traveltime is larger than surrounding + grid.tau_loc[I2V(iip,jjt,kkr)] = _0_CR; + } else { + // hamiltonian + CUSTOMREAL Hadj = (a1p*grid.tau_loc[I2V(iip,jjt,kkr-1)] - a2m*grid.tau_loc[I2V(iip,jjt,kkr+1)]) / dr \ + + (b1p*grid.tau_loc[I2V(iip,jjt-1,kkr)] - b2m*grid.tau_loc[I2V(iip,jjt+1,kkr)]) / dt \ + + (c1p*grid.tau_loc[I2V(iip-1,jjt,kkr)] - c2m*grid.tau_loc[I2V(iip+1,jjt,kkr)]) / dp; + + grid.tau_loc[I2V(iip,jjt,kkr)] = (grid.tau_old_loc[I2V(iip,jjt,kkr)] + Hadj) / (coe + d); + } +} + +// no multiplicative factorization +void Iterator::calculate_stencil_1st_order_upwind_tele(Grid&grid, int&iip, int&jjt, int&kkr){ + + // preparations + + count_cand = 0; + // forward and backward partial differential discretization + // T_p = ap*T(iip, jjt, kkr)+bp; two cases: 1/dp * T(iip,jjt,kkr) - T(iip-1,jjt,kkr)/dp or -1/dp * T(iip,jjt,kkr) + T(iip+1,jjt,kkr)/dp + // T_t = at*T(iip, jjt, kkr)+bt; + // T_r = ar*T(iip, jjt, kkr)+br; + if (iip > 0){ + ap1 = _1_CR/dp; + bp1 = -grid.T_loc[I2V(iip-1, jjt, kkr)]/dp; + } + if (iip < np-1){ + ap2 = -_1_CR/dp; + bp2 = grid.T_loc[I2V(iip+1, jjt, kkr)]/dp; + } + + if (jjt > 0){ + at1 = _1_CR/dt; + bt1 = -grid.T_loc[I2V(iip, jjt-1, kkr)]/dt; + } + if (jjt < nt-1){ + at2 = -_1_CR/dt; + bt2 = grid.T_loc[I2V(iip, jjt+1, kkr)]/dt; + } + + if (kkr > 0){ + ar1 = _1_CR/dr; + br1 = -grid.T_loc[I2V(iip, jjt, kkr-1)]/dr; + } + if (kkr < nr-1){ + ar2 = -_1_CR/dr; + br2 = grid.T_loc[I2V(iip, jjt, kkr+1)]/dr; + } + bc_f2 = grid.fac_b_loc[I2V(iip,jjt,kkr)]*grid.fac_c_loc[I2V(iip,jjt,kkr)] - std::pow(grid.fac_f_loc[I2V(iip,jjt,kkr)],_2_CR); + + // start to find candidate solutions + + // first catalog: characteristic travels through tetrahedron in 3D volume (8 cases) + for (int i_case = 0; i_case < 8; i_case++){ + + // determine discretization of T_p,T_t,T_r + switch (i_case) { + case 0: // characteristic travels from -p, -t, -r + if (iip == 0 || jjt == 0 || kkr == 0) + continue; + ap = ap1; bp = bp1; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: // characteristic travels from -p, -t, +r + if (iip == 0 || jjt == 0 || kkr == nr-1) + continue; + ap = ap1; bp = bp1; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: // characteristic travels from -p, +t, -r + if (iip == 0 || jjt == nt-1 || kkr == 0) + continue; + ap = ap1; bp = bp1; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: // characteristic travels from -p, +t, +r + if (iip == 0 || jjt == nt-1 || kkr == nr-1) + continue; + ap = ap1; bp = bp1; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + case 4: // characteristic travels from +p, -t, -r + if (iip == np-1 || jjt == 0 || kkr == 0) + continue; + ap = ap2; bp = bp2; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 5: // characteristic travels from +p, -t, +r + if (iip == np-1 || jjt == 0 || kkr == nr-1) + continue; + ap = ap2; bp = bp2; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 6: // characteristic travels from +p, +t, -r + if (iip == np-1 || jjt == nt-1 || kkr == 0) + continue; + ap = ap2; bp = bp2; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 7: // characteristic travels from +p, +t, +r + if (iip == np-1 || jjt == nt-1 || kkr == nr-1) + continue; + ap = ap2; bp = bp2; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_p, T_t, T_r into eikonal equation, solving the quadratic equation with respect to tau(iip,jjt,kkr) + // that is a*(ar*T+br)^2 + b*(at*T+bt)^2 + c*(ap*T+bp)^2 - 2*f*(at*T+bt)*(ap*T+bp) = s^2 + eqn_a = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(ar, _2_CR) + grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(at, _2_CR) + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(ap, _2_CR) - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * at * ap; + eqn_b = _2_CR*grid.fac_a_loc[I2V(iip,jjt,kkr)] * ar * br + _2_CR*grid.fac_b_loc[I2V(iip,jjt,kkr)] * at * bt + + _2_CR*grid.fac_c_loc[I2V(iip,jjt,kkr)] * ap * bp - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * (at*bp + bt*ap); + eqn_c = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(br, _2_CR) + grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(bt, _2_CR) + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(bp, _2_CR) - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * bt * bp + - std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_T = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: the characteristic passing through (iip,jjt,kkr) is in between used three sides + // characteristic direction is (dr/dt, dtheta/dt, tphi/dt) = (H_p1,H_p2,H_p3), p1 = T_r, p2 = T_t, p3 = T_p + T_r = ar*tmp_T + br; + T_t = at*tmp_T + bt; + T_p = ap*tmp_T + bp; + + charact_r = grid.fac_a_loc[I2V(iip,jjt,kkr)]*T_r; + charact_t = grid.fac_b_loc[I2V(iip,jjt,kkr)]*T_t - grid.fac_f_loc[I2V(iip,jjt,kkr)]*T_p; + charact_p = grid.fac_c_loc[I2V(iip,jjt,kkr)]*T_p - grid.fac_f_loc[I2V(iip,jjt,kkr)]*T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -p, -t, -r + if (charact_p >= 0 && charact_t >= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 1: //characteristic travels from -p, -t, +r + if (charact_p >= 0 && charact_t >= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from -p, +t, -r + if (charact_p >= 0 && charact_t <= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from -p, +t, +r + if (charact_p >= 0 && charact_t <= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 4: //characteristic travels from +p, -t, -r + if (charact_p <= 0 && charact_t >= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 5: //characteristic travels from +p, -t, +r + if (charact_p <= 0 && charact_t >= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 6: //characteristic travels from +p, +t, -r + if (charact_p <= 0 && charact_t <= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 7: //characteristic travels from +p, +t, +r + if (charact_p <= 0 && charact_t <= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd volumn icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + + } + } + + // second catalog: characteristic travels through triangles in 2D volume (12 cases) + // case: 1-4 + // characteristic on r-t plane, force H_p3 = H_(T_p) = 0, that is, c*T_p-f*T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 + (bc-f^2)/c*T_t^2 = s^2 + for (int i_case = 0; i_case < 4; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (jjt == 0 || kkr == 0){ + continue; + } + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: //characteristic travels from -t, +r + if (jjt == 0 || kkr == nr-1){ + continue; + } + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: //characteristic travels from +t, -r + if (jjt == nt-1 || kkr == 0){ + continue; + } + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: //characteristic travels from +t, +r + if (jjt == nt-1 || kkr == nr-1){ + continue; + } + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 + (bc-f^2)/c*(at*tau+bt)^2 = s^2 + eqn_a = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(ar, _2_CR) + bc_f2/grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(at, _2_CR); + eqn_b = _2_CR*grid.fac_a_loc[I2V(iip,jjt,kkr)] * ar * br + _2_CR*bc_f2/grid.fac_c_loc[I2V(iip,jjt,kkr)] * at * bt; + eqn_c = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(br, _2_CR) + bc_f2/grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(bt, _2_CR) + - std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_T = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_r = ar*tmp_T + br; + T_t = at*tmp_T + bt; + + charact_r = grid.fac_a_loc[I2V(iip,jjt,kkr)]*T_r; + charact_t = bc_f2/grid.fac_c_loc[I2V(iip,jjt,kkr)]*T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (charact_t >= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 1: //characteristic travels from -t, +r + if (charact_t >= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from +t, -r + if (charact_t <= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from +t, +r + if (charact_t <= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd plane icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + } + + } + + // case: 5-8 + // characteristic on r-p plane, force H_p2 = H_(T_t) = 0, that is, b*T_t-f*T_p = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 + (bc-f^2)/b*T_p^2 = s^2 + for (int i_case = 4; i_case < 8; i_case++){ + switch (i_case){ + case 4: //characteristic travels from -p, -r + if (iip == 0 || kkr == 0){ + continue; + } + ap = ap1; bp = bp1; + ar = ar1; br = br1; + break; + case 5: //characteristic travels from -p, +r + if (iip == 0 || kkr == nr-1){ + continue; + } + ap = ap1; bp = bp1; + ar = ar2; br = br2; + break; + case 6: //characteristic travels from +p, -r + if (iip == np-1 || kkr == 0){ + continue; + } + ap = ap2; bp = bp2; + ar = ar1; br = br1; + break; + case 7: //characteristic travels from +p, +r + if (iip == np-1 || kkr == nr-1){ + continue; + } + ap = ap2; bp = bp2; + ar = ar2; br = br2; + break; + } + + // plug T_p, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 + (bc-f^2)/b*(ap*tau+bp)^2 = s^2 + eqn_a = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(ar, _2_CR) + bc_f2/grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(ap, _2_CR); + eqn_b = _2_CR*grid.fac_a_loc[I2V(iip,jjt,kkr)] * ar * br + _2_CR*bc_f2/grid.fac_b_loc[I2V(iip,jjt,kkr)] * ap * bp; + eqn_c = grid.fac_a_loc[I2V(iip,jjt,kkr)] * std::pow(br, _2_CR) + bc_f2/grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(bp, _2_CR) + - std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_T = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_r = ar*tmp_T + br; + T_p = ap*tmp_T + bp; + + charact_r = grid.fac_a_loc[I2V(iip,jjt,kkr)]*T_r; + charact_p = bc_f2/grid.fac_b_loc[I2V(iip,jjt,kkr)]*T_p; + + is_causality = false; + switch (i_case){ + case 4: //characteristic travels from -p, -r + if (charact_p >= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 5: //characteristic travels from -p, +r + if (charact_p >= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 6: //characteristic travels from +p, -r + if (charact_p <= 0 && charact_r >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 7: //characteristic travels from +p, +r + if (charact_p <= 0 && charact_r <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd plane icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + } + } + + // case: 9-12 + // characteristic on t-p plane, force H_p1 = H_(T_t) = 0, that is, T_r = 0 + // plug the constraint into eikonal equation, we have the equation: b*T_t^2 + c*T_p^2 - 2f*T_t*T_p = s^2 + for (int i_case = 8; i_case < 12; i_case++){ + switch (i_case){ + case 8: //characteristic travels from -p, -t + if (iip == 0 || jjt == 0){ + continue; + } + ap = ap1; bp = bp1; + at = at1; bt = bt1; + break; + case 9: //characteristic travels from -p, +t + if (iip == 0 || jjt == nt-1){ + continue; + } + ap = ap1; bp = bp1; + at = at2; bt = bt2; + break; + case 10: //characteristic travels from +p, -t + if (iip == np-1 || jjt == 0){ + continue; + } + ap = ap2; bp = bp2; + at = at1; bt = bt1; + break; + case 11: //characteristic travels from +p, +t + if (iip == np-1 || jjt == nt-1){ + continue; + } + ap = ap2; bp = bp2; + at = at2; bt = bt2; + break; + } + + // plug T_p, T_t into eikonal equation, solve the quadratic equation: b*(at*tau+bt)^2 + c*(ap*tau+bp)^2 - 2f*(at*tau+bt)*(ap*tau+bp) = s^2 + eqn_a = grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(at, _2_CR) + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(ap, _2_CR) - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * at * ap; + eqn_b = _2_CR*grid.fac_b_loc[I2V(iip,jjt,kkr)] * at * bt + + _2_CR*grid.fac_c_loc[I2V(iip,jjt,kkr)] * ap * bp - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * (at*bp + bt*ap); + eqn_c = grid.fac_b_loc[I2V(iip,jjt,kkr)] * std::pow(bt, _2_CR) + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * std::pow(bp, _2_CR) - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * bt * bp + - std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_T = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: + T_t = at*tmp_T + bt; + T_p = ap*tmp_T + bp; + + charact_t = grid.fac_b_loc[I2V(iip,jjt,kkr)]*T_t - grid.fac_f_loc[I2V(iip,jjt,kkr)]*T_p; + charact_p = grid.fac_c_loc[I2V(iip,jjt,kkr)]*T_p - grid.fac_f_loc[I2V(iip,jjt,kkr)]*T_t; + + is_causality = false; + switch (i_case){ + case 8: //characteristic travels from -p, -t + if (charact_p >= 0 && charact_t >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 9: //characteristic travels from -p, +t + if (charact_p >= 0 && charact_t <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 10: //characteristic travels from +p, -t + if (charact_p <= 0 && charact_t >= 0 && tmp_T > 0){ + is_causality = true; + } + break; + case 11: //characteristic travels from +p, +t + if (charact_p <= 0 && charact_t <= 0 && tmp_T > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd plane icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + } + } + + // third catalog: characteristic travels through lines in 1D volume (6 cases) + // case: 1-2 + // characteristic travels along r-axis, force H_p2, H_p3 = 0, that is, T_p = T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 = s^2 + for (int i_case = 0; i_case < 2; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -r + if (kkr == 0){ + continue; + } + ar = ar1; br = br1; + break; + case 1: //characteristic travels from +r + if (kkr == nr-1){ + continue; + } + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: a*(ar*tau+br)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = ( std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)/grid.fac_a_loc[I2V(iip,jjt,kkr)]) - br)/ar; + break; + case 1: + tmp_T = (-std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)/grid.fac_a_loc[I2V(iip,jjt,kkr)]) - br)/ar; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -r (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_T >= grid.T_loc[I2V(iip,jjt,kkr-1)] && tmp_T > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 1: //characteristic travels from +r + if (tmp_T >= grid.T_loc[I2V(iip,jjt,kkr+1)] && tmp_T > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd line icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + + } + + // case: 3-4 + // characteristic travels along t-axis, force H_p1, H_p3 = 0, that is, T_r = 0; c*T_p-f*T_t = 0 + // plug the constraint into eikonal equation, we have the equation: (bc-f^2)/c*T_t^2 = s^2 + for (int i_case = 2; i_case < 4; i_case++){ + switch (i_case){ + case 2: //characteristic travels from -t + if (jjt == 0){ + continue; + } + at = at1; bt = bt1; + break; + case 3: //characteristic travels from +t + if (jjt == nt-1){ + continue; + } + at = at2; bt = bt2; + break; + } + + // plug T_p, T_r into eikonal equation, solve the quadratic equation: (bc-f^2)/c*(at*tau+bt)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = ( std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)*grid.fac_c_loc[I2V(iip,jjt,kkr)]/bc_f2) - bt)/at; + break; + case 1: + tmp_T = (-std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)*grid.fac_c_loc[I2V(iip,jjt,kkr)]/bc_f2) - bt)/at; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 2: //characteristic travels from -t (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_T >= grid.T_loc[I2V(iip,jjt-1,kkr)] && tmp_T > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 3: //characteristic travels from +t + if (tmp_T >= grid.T_loc[I2V(iip,jjt+1,kkr)] && tmp_T > 0){ + is_causality = true; + } + break; + + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd line icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + + } + } + + // case: 5-6 + // characteristic travels along p-axis, force H_p1, H_p2 = 0, that is, T_r = 0; b*T_t-f*T_p = 0 + // plug the constraint into eikonal equation, we have the equation: (bc-f^2)/b*T_p^2 = s^2 + for (int i_case = 4; i_case < 6; i_case++){ + switch (i_case){ + case 4: //characteristic travels from -p + if (iip == 0){ + continue; + } + ap = ap1; bp = bp1; + break; + case 5: //characteristic travels from +p + if (iip == np-1){ + continue; + } + ap = ap2; bp = bp2; + break; + + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: (bc-f^2)/b*(ap*tau+bp)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_T = ( std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)*grid.fac_b_loc[I2V(iip,jjt,kkr)]/bc_f2) - bp)/ap; + break; + case 1: + tmp_T = (-std::sqrt(std::pow(grid.fun_loc[I2V(iip,jjt,kkr)], _2_CR)*grid.fac_b_loc[I2V(iip,jjt,kkr)]/bc_f2) - bp)/ap; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 4: //characteristic travels from -p (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_T >= grid.T_loc[I2V(iip-1,jjt,kkr)] && tmp_T > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 5: //characteristic travels from +p + if (tmp_T >= grid.T_loc[I2V(iip+1,jjt,kkr)] && tmp_T > 0){ + is_causality = true; + } + break; + + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_T; + count_cand += 1; + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", cd line icase " << i_case << ": " << canditate[count_cand-1] << std::endl; + // } + } + } + } + + // final, choose the minimum candidate solution as the updated value + for (int i_cand = 0; i_cand < count_cand; i_cand++){ + grid.T_loc[I2V(iip, jjt, kkr)] = std::min(grid.T_loc[I2V(iip, jjt, kkr)], canditate[i_cand]); + } + + // if (iip == 1 && jjt ==1 && kkr ==1){ + // std::cout << "id_sim: " << id_sim << ", ckp 2, " + // << "T values: " << grid.T_loc[I2V(iip, jjt, kkr)] << ", " + // << grid.T_loc[I2V(iip-1, jjt, kkr)] << ", " + // << grid.T_loc[I2V(iip+1, jjt, kkr)] << ", " + // << grid.T_loc[I2V(iip, jjt-1, kkr)] << ", " + // << grid.T_loc[I2V(iip, jjt+1, kkr)] << ", " + // << grid.T_loc[I2V(iip, jjt, kkr-1)] << ", " + // << grid.T_loc[I2V(iip, jjt, kkr+1)] << std::endl; + // } +} + + +void Iterator::calculate_stencil_1st_order_tele(Grid& grid, int& iip, int& jjt, int&kkr){ + sigr = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_a_loc[I2V(iip, jjt, kkr)]); + sigt = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_b_loc[I2V(iip, jjt, kkr)]); + sigp = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_c_loc[I2V(iip, jjt, kkr)]); + coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + pp1 = (grid.T_loc[I2V(iip , jjt , kkr )] - grid.T_loc[I2V(iip-1, jjt , kkr )])/dp; + pp2 = (grid.T_loc[I2V(iip+1, jjt , kkr )] - grid.T_loc[I2V(iip , jjt , kkr )])/dp; + pt1 = (grid.T_loc[I2V(iip , jjt , kkr )] - grid.T_loc[I2V(iip , jjt-1, kkr )])/dt; + pt2 = (grid.T_loc[I2V(iip , jjt+1, kkr )] - grid.T_loc[I2V(iip , jjt , kkr )])/dt; + pr1 = (grid.T_loc[I2V(iip , jjt , kkr )] - grid.T_loc[I2V(iip , jjt , kkr-1)])/dr; + pr2 = (grid.T_loc[I2V(iip , jjt , kkr+1)] - grid.T_loc[I2V(iip , jjt , kkr )])/dr; + + // LF Hamiltonian + Htau = calc_LF_Hamiltonian_tele(grid, pp1, pp2, pt1, pt2, pr1, pr2, iip, jjt, kkr); + + grid.T_loc[I2V(iip, jjt, kkr)] += coe*(grid.fun_loc[I2V(iip, jjt, kkr)] - Htau) \ + + coe*(sigr*(pr2-pr1)/_2_CR + sigt*(pt2-pt1)/_2_CR + sigp*(pp2-pp1)/_2_CR); + +} + + +void Iterator::calculate_stencil_3rd_order_tele(Grid& grid, int& iip, int& jjt, int&kkr){ + sigr = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_a_loc[I2V(iip, jjt, kkr)]); + sigt = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_b_loc[I2V(iip, jjt, kkr)]); + sigp = SWEEPING_COEFF_TELE*std::sqrt(grid.fac_c_loc[I2V(iip, jjt, kkr)]); + coe = _1_CR/((sigr/dr)+(sigt/dt)+(sigp/dp)); + + // direction p + if (iip == 1) { + pp1 = (grid.T_loc[I2V(iip, jjt,kkr)] \ + - grid.T_loc[I2V(iip-1,jjt,kkr)]) / dp; + + wp2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip+1,jjt,kkr)] \ + + grid.T_loc[I2V(iip+2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip-1,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip+1,jjt,kkr)]) )) ); + + pp2 = (_1_CR - wp2) * ( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp2 * ( - _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip+2,jjt,kkr)] ) / _2_CR / dp; + + } else if (iip == np-2) { + wp1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip-1,jjt,kkr)] \ + + grid.T_loc[I2V(iip-2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip-1,jjt,kkr)]) )) ); + + pp1 = (_1_CR - wp1) * ( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip-1,jjt,kkr)] \ + + grid.T_loc[I2V(iip-2,jjt,kkr)] ) / _2_CR / dp; + + pp2 = (grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip, jjt,kkr)]) / dp; + + } else { + wp1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip-1,jjt,kkr)] \ + + grid.T_loc[I2V(iip-2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip-1,jjt,kkr)]) )) ); + + pp1 = (_1_CR - wp1) * ( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip-1,jjt,kkr)] \ + + grid.T_loc[I2V(iip-2,jjt,kkr)] ) / _2_CR / dp; + + wp2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip+1,jjt,kkr)] \ + + grid.T_loc[I2V(iip+2,jjt,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip-1,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip+1,jjt,kkr)]) )) ); + + pp2 = (_1_CR - wp2) * ( grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip-1,jjt,kkr)]) / _2_CR / dp \ + + wp2 * ( - _3_CR * grid.T_loc[I2V(iip ,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip+1,jjt,kkr)] \ + - grid.T_loc[I2V(iip+2,jjt,kkr)] ) / _2_CR / dp; + + } + + // direction t + if (jjt == 1) { + pt1 = (grid.T_loc[I2V(iip,jjt ,kkr)] \ + - grid.T_loc[I2V(iip,jjt-1,kkr)]) / dt; + + wt2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt+1,kkr)] \ + + grid.T_loc[I2V(iip,jjt+2,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt-1,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt+1,kkr)]) )) ); + + pt2 = (_1_CR - wt2) * ( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt2 * ( - _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt+2,kkr)] ) / _2_CR / dt; + + } else if (jjt == nt-2) { + wt1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt-1,kkr)] \ + + grid.T_loc[I2V(iip,jjt-2,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt-1,kkr)]) )) ); + + pt1 = (_1_CR - wt1) * ( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip,jjt-1,kkr)] \ + + grid.T_loc[I2V(iip,jjt-2,kkr)] ) / _2_CR / dt; + + pt2 = (grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt, kkr)]) / dt; + + } else { + wt1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt-1,kkr)] \ + + grid.T_loc[I2V(iip,jjt-2,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt-1,kkr)]) )) ); + + pt1 = (_1_CR - wt1) * ( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip,jjt-1,kkr)] \ + + grid.T_loc[I2V(iip,jjt-2,kkr)] ) / _2_CR / dt; + + wt2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip, jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt+1,kkr)] \ + + grid.T_loc[I2V(iip,jjt+2,kkr)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt-1,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt+1,kkr)]) )) ); + + pt2 = (_1_CR - wt2) * ( grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt-1,kkr)]) / _2_CR / dt \ + + wt2 * ( - _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip,jjt+1,kkr)] \ + - grid.T_loc[I2V(iip,jjt+2,kkr)] ) / _2_CR / dt; + + } + + // direction r + if (kkr == 1) { + pr1 = (grid.T_loc[I2V(iip,jjt,kkr )] \ + - grid.T_loc[I2V(iip,jjt,kkr-1)]) / dr; + + wr2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr+1)] \ + + grid.T_loc[I2V(iip,jjt,kkr+2)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt,kkr-1)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt,kkr+1)]) )) ); + + pr2 = (_1_CR - wr2) * ( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr2 * ( - _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr+2)] ) / _2_CR / dr; + + } else if (kkr == nr - 2) { + wr1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr-1)] \ + + grid.T_loc[I2V(iip,jjt,kkr-2)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt,kkr-1)]) )) ); + + pr1 = (_1_CR - wr1) * ( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip,jjt,kkr-1)] \ + + grid.T_loc[I2V(iip,jjt,kkr-2)] ) / _2_CR / dr; + + pr2 = (grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr)]) / dr; + + } else { + wr1 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr-1)] \ + + grid.T_loc[I2V(iip,jjt,kkr-2)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt,kkr-1)]) )) ); + + pr1 = (_1_CR - wr1) * ( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr1 * ( + _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + - _4_CR * grid.T_loc[I2V(iip,jjt,kkr-1)] \ + + grid.T_loc[I2V(iip,jjt,kkr-2)] ) / _2_CR / dr; + + wr2 = _1_CR/(_1_CR+_2_CR*my_square((eps + my_square( grid.T_loc[I2V(iip,jjt,kkr)] \ + -_2_CR*grid.T_loc[I2V(iip,jjt,kkr+1)] \ + + grid.T_loc[I2V(iip,jjt,kkr+2)]) ) \ + + / (eps + my_square( grid.T_loc[I2V(iip,jjt,kkr-1)] \ + -_2_CR*grid.T_loc[I2V(iip, jjt,kkr)] \ + + grid.T_loc[I2V(iip,jjt,kkr+1)]) )) ); + + pr2 = (_1_CR - wr2) * ( grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr-1)]) / _2_CR / dr \ + + wr2 * ( - _3_CR * grid.T_loc[I2V(iip,jjt,kkr)] \ + + _4_CR * grid.T_loc[I2V(iip,jjt,kkr+1)] \ + - grid.T_loc[I2V(iip,jjt,kkr+2)] ) / _2_CR / dr; + + } + + // LF Hamiltonian + Htau = calc_LF_Hamiltonian_tele(grid, pp1, pp2, pt1, pt2, pr1, pr2, iip, jjt, kkr); + + // update tau + grid.T_loc[I2V(iip,jjt,kkr)] += coe * (grid.fun_loc[I2V(iip,jjt,kkr)] - Htau) \ + + coe * (sigr*(pr2-pr1)/_2_CR + sigt*(pt2-pt1)/_2_CR + sigp*(pp2-pp1)/_2_CR); + + // check value + // if(kkr==1 && jjt==1 && iip==1){ + // std::cout << sigr << " " << sigt << " " << sigp << " " << coe << " " + // << grid.fun_loc[I2V(iip,jjt,kkr)] << " " << Htau << " " << grid.T_loc[I2V(iip,jjt,kkr)] << " " + // << std::endl; + // } +} + + +inline CUSTOMREAL Iterator::calc_LF_Hamiltonian(Grid& grid, \ + CUSTOMREAL& pp1, CUSTOMREAL& pp2, \ + CUSTOMREAL& pt1, CUSTOMREAL& pt2, \ + CUSTOMREAL& pr1, CUSTOMREAL& pr2, \ + int& iip, int& jjt, int& kkr) { + // LF Hamiltonian + return sqrt( + grid.fac_a_loc[I2V(iip,jjt,kkr)] * my_square(grid.T0r_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip,jjt,kkr)] + grid.T0v_loc[I2V(iip,jjt,kkr)] * (pr1+pr2)/_2_CR) \ + + grid.fac_b_loc[I2V(iip,jjt,kkr)] * my_square(grid.T0t_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip,jjt,kkr)] + grid.T0v_loc[I2V(iip,jjt,kkr)] * (pt1+pt2)/_2_CR) \ + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * my_square(grid.T0p_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip,jjt,kkr)] + grid.T0v_loc[I2V(iip,jjt,kkr)] * (pp1+pp2)/_2_CR) \ + - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * (grid.T0t_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip,jjt,kkr)] + grid.T0v_loc[I2V(iip,jjt,kkr)] * (pt1+pt2)/_2_CR) \ + * (grid.T0p_loc[I2V(iip,jjt,kkr)] * grid.tau_loc[I2V(iip,jjt,kkr)] + grid.T0v_loc[I2V(iip,jjt,kkr)] * (pp1+pp2)/_2_CR) \ + ); + +} + + +inline CUSTOMREAL Iterator::calc_LF_Hamiltonian_tele(Grid& grid, \ + CUSTOMREAL& pp1, CUSTOMREAL& pp2, \ + CUSTOMREAL& pt1, CUSTOMREAL& pt2, \ + CUSTOMREAL& pr1, CUSTOMREAL& pr2, \ + int& iip, int& jjt, int& kkr) { + // LF Hamiltonian for teleseismic source + return std::sqrt( + grid.fac_a_loc[I2V(iip,jjt,kkr)] * my_square((pr1+pr2)/_2_CR) \ + + grid.fac_b_loc[I2V(iip,jjt,kkr)] * my_square((pt1+pt2)/_2_CR) \ + + grid.fac_c_loc[I2V(iip,jjt,kkr)] * my_square((pp1+pp2)/_2_CR) \ + - _2_CR*grid.fac_f_loc[I2V(iip,jjt,kkr)] * ((pt1+pt2)/_2_CR) \ + * ((pp1+pp2)/_2_CR) \ + ); + +} + + +void Iterator::calculate_boundary_nodes(Grid& grid){ + CUSTOMREAL v0, v1; + + //plane + for (int jjt = 0; jjt < nt; jjt++){ + for (int iip = 0; iip < np; iip++){ + v0 = _2_CR * grid.tau_loc[I2V(iip,jjt,1)] - grid.tau_loc[I2V(iip,jjt,2)]; + v1 = grid.tau_loc[I2V(iip,jjt,2)]; + grid.tau_loc[I2V(iip,jjt,0)] = std::max({v0,v1}); + v0 = _2_CR * grid.tau_loc[I2V(iip,jjt,nr-2)] - grid.tau_loc[I2V(iip,jjt,nr-3)]; + v1 = grid.tau_loc[I2V(iip,jjt,nr-3)]; + grid.tau_loc[I2V(iip,jjt,nr-1)] = std::max({v0,v1}); + } + } + + for (int kkr = 0; kkr < nr; kkr++){ + for (int iip = 0; iip < np; iip++){ + v0 = _2_CR * grid.tau_loc[I2V(iip,1,kkr)] - grid.tau_loc[I2V(iip,2,kkr)]; + v1 = grid.tau_loc[I2V(iip,2,kkr)]; + grid.tau_loc[I2V(iip,0,kkr)] = std::max({v0,v1}); + v0 = _2_CR * grid.tau_loc[I2V(iip,nt-2,kkr)] - grid.tau_loc[I2V(iip,nt-3,kkr)]; + v1 = grid.tau_loc[I2V(iip,nt-3,kkr)]; + grid.tau_loc[I2V(iip,nt-1,kkr)] = std::max({v0,v1}); + } + } + + for (int kkr = 0; kkr < nr; kkr++){ + for (int jjt = 0; jjt < nt; jjt++){ + v0 = _2_CR * grid.tau_loc[I2V(1,jjt,kkr)] - grid.tau_loc[I2V(2,jjt,kkr)]; + v1 = grid.tau_loc[I2V(2,jjt,kkr)]; + grid.tau_loc[I2V(0,jjt,kkr)] = std::max({v0,v1}); + v0 = _2_CR * grid.tau_loc[I2V(np-2,jjt,kkr)] - grid.tau_loc[I2V(np-3,jjt,kkr)]; + v1 = grid.tau_loc[I2V(np-3,jjt,kkr)]; + grid.tau_loc[I2V(np-1,jjt,kkr)] = std::max({v0,v1}); + } + } + +} + + +void Iterator::calculate_boundary_nodes_tele(Grid& grid, int& iip, int& jjt, int& kkr){ + CUSTOMREAL v0, v1; + + if (grid.is_changed[I2V(iip,jjt,kkr)]) { + + // Bottom + if (kkr == 0 && grid.k_first()){ + v0 = _2_CR * grid.T_loc[I2V(iip,jjt,1)] - grid.T_loc[I2V(iip,jjt,2)]; + v1 = grid.T_loc[I2V(iip,jjt,2)]; + grid.T_loc[I2V(iip,jjt,0)] = std::max({v0,v1}); + } + + // Top + if (kkr == nr-1 && grid.k_last()){ + v0 = _2_CR * grid.T_loc[I2V(iip,jjt,nr-2)] - grid.T_loc[I2V(iip,jjt,nr-3)]; + v1 = grid.T_loc[I2V(iip,jjt,nr-3)]; + grid.T_loc[I2V(iip,jjt,nr-1)] = std::max({v0,v1}); + } + + // South + if (jjt == 0 && grid.j_first()) { + v0 = _2_CR * grid.T_loc[I2V(iip,1,kkr)] - grid.T_loc[I2V(iip,2,kkr)]; + v1 = grid.T_loc[I2V(iip,2,kkr)]; + grid.T_loc[I2V(iip,0,kkr)] = std::max({v0,v1}); + } + + // North + if (jjt == nt-1 && grid.j_last()) { + v0 = _2_CR * grid.T_loc[I2V(iip,nt-2,kkr)] - grid.T_loc[I2V(iip,nt-3,kkr)]; + v1 = grid.T_loc[I2V(iip,nt-3,kkr)]; + grid.T_loc[I2V(iip,nt-1,kkr)] = std::max({v0,v1}); + } + + // West + if (iip == 0 && grid.i_first()) { + v0 = _2_CR * grid.T_loc[I2V(1,jjt,kkr)] - grid.T_loc[I2V(2,jjt,kkr)]; + v1 = grid.T_loc[I2V(2,jjt,kkr)]; + grid.T_loc[I2V(0,jjt,kkr)] = std::max({v0,v1}); + } + + // East + if (iip == np-1 && grid.i_last()){ + v0 = _2_CR * grid.T_loc[I2V(np-2,jjt,kkr)] - grid.T_loc[I2V(np-3,jjt,kkr)]; + v1 = grid.T_loc[I2V(np-3,jjt,kkr)]; + grid.T_loc[I2V(np-1,jjt,kkr)] = std::max({v0,v1}); + } + + } // end if is_changed +} + + +void Iterator::calculate_boundary_nodes_adj(Grid& grid, int& iip, int& jjt, int& kkr){ + // West + if (iip == 0 && grid.i_first()) { + grid.tau_loc[I2V(0,jjt,kkr)] = _0_CR; + } + + // East + if (iip == np-1 && grid.i_last()) { + grid.tau_loc[I2V(np-1,jjt,kkr)] = _0_CR; + } + + // South + if (jjt == 0 && grid.j_first()) { + grid.tau_loc[I2V(iip,0,kkr)] = _0_CR; + } + + // North + if (jjt == nt-1 && grid.j_last()) { + grid.tau_loc[I2V(iip,nt-1,kkr)] = _0_CR; + } + + // Bottom + if (kkr == 0 && grid.k_first()) { + grid.tau_loc[I2V(iip,jjt,0)] = _0_CR; + } + + // Top + if (kkr == nr-1 && grid.k_last()) { + grid.tau_loc[I2V(iip,jjt,nr-1)] = _0_CR; + } +} + + +void Iterator::set_sweep_direction(int iswp) { + // set sweep direction + if (iswp == 0) { + r_dirc = -1; + t_dirc = -1; + p_dirc = -1; + } else if (iswp == 1) { + r_dirc = -1; + t_dirc = -1; + p_dirc = 1; + } else if (iswp == 2) { + r_dirc = -1; + t_dirc = 1; + p_dirc = -1; + } else if (iswp == 3) { + r_dirc = -1; + t_dirc = 1; + p_dirc = 1; + } else if (iswp == 4) { + r_dirc = 1; + t_dirc = -1; + p_dirc = -1; + } else if (iswp == 5) { + r_dirc = 1; + t_dirc = -1; + p_dirc = 1; + } else if (iswp == 6) { + r_dirc = 1; + t_dirc = 1; + p_dirc = -1; + } else if (iswp == 7) { + r_dirc = 1; + t_dirc = 1; + p_dirc = 1; + } +} + diff --git a/src/iterator_legacy.cpp b/src/iterator_legacy.cpp new file mode 100644 index 0000000..0c8a57c --- /dev/null +++ b/src/iterator_legacy.cpp @@ -0,0 +1,490 @@ +#include "iterator_legacy.h" + + +Iterator_legacy:: Iterator_legacy(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // do nothing +} + +void Iterator_legacy::do_sweep_adj(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + // set sweep direction + set_sweep_direction(iswp); + + int r_start, t_start, p_start, r_end, t_end, p_end; + + // set loop range + if (r_dirc < 0) { + r_start = nr-2; + r_end = 0; + } else { + r_start = 1; + r_end = nr-1; + } + if (t_dirc < 0) { + t_start = nt-2; + t_end = 0; + } else { + t_start = 1; + t_end = nt-1; + } + if (p_dirc < 0) { + p_start = np-2; + p_end = 0; + } else { + p_start = 1; + p_end = np-1; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + // calculate stencils + calculate_stencil_adj(grid, iip, jjt, kkr); + } + } + } + + } // end if subdom_main + +} + + +Iterator_legacy_tele::Iterator_legacy_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // do nothing +} + + +void Iterator_legacy_tele::do_sweep_adj(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + if(if_verbose) std::cout << "sweeping: " << iswp << std::endl; + // set sweep direction + set_sweep_direction(iswp); + + int r_start, t_start, p_start, r_end, t_end, p_end; + + // set loop range + if (r_dirc < 0) { + r_start = nr-1; + r_end = -1; + } else { + r_start = 0; + r_end = nr; + } + if (t_dirc < 0) { + t_start = nt-1; + t_end = -1; + } else { + t_start = 0; + t_end = nt; + } + if (p_dirc < 0) { + p_start = np-1; + p_end = -1; + } else { + p_start = 0; + p_end = np; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + if (iip != 0 && jjt != 0 && kkr != 0 \ + && iip != np-1 && jjt != nt-1 && kkr != nr-1) { + // calculate stencils + calculate_stencil_adj(grid, iip, jjt, kkr); + } else { + calculate_boundary_nodes_adj(grid, iip, jjt, kkr); + } + } + } + } + + } // end if subdom_main +} + + +Iterator_legacy_1st_order::Iterator_legacy_1st_order(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_legacy_1st_order::do_sweep(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-2; + r_end = 0; + } else { + r_start = 1; + r_end = nr-1; + } + if (t_dirc < 0) { + t_start = nt-2; + t_end = 0; + } else { + t_start = 1; + t_end = nt-1; + } + if (p_dirc < 0) { + p_start = np-2; + p_end = 0; + } else { + p_start = 1; + p_end = np-1; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + // 1st order, calculate stencils + calculate_stencil_1st_order(grid, iip, jjt, kkr); + } + } + } + } + + // update boundary + //calculate_boundary_nodes_maxmin(grid); + calculate_boundary_nodes(grid); + + } // end if subdom_main +} + + + +Iterator_legacy_3rd_order::Iterator_legacy_3rd_order(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_legacy_3rd_order::do_sweep(int iswp, Grid& grid, InputParams& IP) { + // std::cout << "cp1.5, my world rank is: " << world_rank << std::endl; + if (subdom_main) { + + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-2; + r_end = 0; + } else { + r_start = 1; + r_end = nr-1; + } + if (t_dirc < 0) { + t_start = nt-2; + t_end = 0; + } else { + t_start = 1; + t_end = nt-1; + } + if (p_dirc < 0) { + p_start = np-2; + p_end = 0; + } else { + p_start = 1; + p_end = np-1; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + // 1st order, calculate stencils + calculate_stencil_3rd_order(grid, iip, jjt, kkr); + } + } + } + } + + // update boundary + calculate_boundary_nodes(grid); + // std::cout << "cp2, my world rank is: " << world_rank << std::endl; + // for (int i_proc = 0; i_proc < world_nprocs; i_proc++){ + // std::cout << "my world rank is: " << world_rank << ", i_proc is: " << i_proc + // << ", world_nprocs: " << world_nprocs << std::endl; + + // if (i_proc == world_rank ){ + // for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + // for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + // for (int iip = p_start; iip != p_end; iip+=p_dirc) { + + // std::cout << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + // << grid.tau_loc[I2V(iip,jjt,kkr)]*grid.T0v_loc[I2V(iip,jjt,kkr)]; + // } + // std::cout << std::endl; + // } + // std::cout << std::endl; + // } + // } + // synchronize_all_world(); + // } + + } // end if subdom_main +} + + +Iterator_legacy_1st_order_upwind::Iterator_legacy_1st_order_upwind(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +void Iterator_legacy_1st_order_upwind::do_sweep(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-1; + r_end = -1; + } else { + r_start = 0; + r_end = nr; + } + if (t_dirc < 0) { + t_start = nt-1; + t_end = -1; + } else { + t_start = 0; + t_end = nt; + } + if (p_dirc < 0) { + p_start = np-1; + p_end = -1; + } else { + p_start = 0; + p_end = np; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + // 1st order, calculate stencils + calculate_stencil_1st_order_upwind(grid, iip, jjt, kkr); + } + } + } + } + // std::cout << "cp2, my world rank is: " << world_rank << std::endl; + // for (int i_proc = 0; i_proc < world_nprocs; i_proc++){ + // std::cout << "my world rank is: " << world_rank << ", i_proc is: " << i_proc + // << ", world_nprocs: " << world_nprocs << std::endl; + + // if (i_proc == world_rank ){ + // for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + // for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + // for (int iip = p_start; iip != p_end; iip+=p_dirc) { + + // std::cout << std::fixed << std::setprecision(4) << std::setw(9) << std::right << std::setfill(' ') + // << grid.tau_loc[I2V(iip,jjt,kkr)]*grid.T0v_loc[I2V(iip,jjt,kkr)]; + // } + // std::cout << std::endl; + // } + // std::cout << std::endl; + // } + // } + // // synchronize_all_world(); + // } + + + // no boundary process is needed for 1st order upwind method + // // update boundary + // calculate_boundary_nodes(grid); + + } // end if subdom_main +} + + + +Iterator_legacy_1st_order_tele::Iterator_legacy_1st_order_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +// overloading virtual function +void Iterator_legacy_1st_order_tele::do_sweep(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-1; + r_end = -1; + } else { + r_start = 0; + r_end = nr; + } + if (t_dirc < 0) { + t_start = nt-1; + t_end = -1; + } else { + t_start = 0; + t_end = nt; + } + if (p_dirc < 0) { + p_start = np-1; + p_end = -1; + } else { + p_start = 0; + p_end = np; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + // this if statement is not necessary because always only the outer layer + // is !is_changed in teleseismic case + //if (grid.is_changed[I2V(iip, jjt, kkr)]) { + if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0 && kkr != nr-1) { + // 1st order, calculate stencils + calculate_stencil_1st_order_tele(grid, iip, jjt, kkr); + } else { + // update boundary + calculate_boundary_nodes_tele(grid, iip, jjt, kkr); + } + } + } + } + + } // end if subdom_main +} + + + +Iterator_legacy_3rd_order_tele::Iterator_legacy_3rd_order_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_legacy_3rd_order_tele::do_sweep(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-1; + r_end = -1; + } else { + r_start = 0; + r_end = nr; + } + if (t_dirc < 0) { + t_start = nt-1; + t_end = -1; + } else { + t_start = 0; + t_end = nt; + } + if (p_dirc < 0) { + p_start = np-1; + p_end = -1; + } else { + p_start = 0; + p_end = np; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0 && kkr != nr-1) { + // calculate stencils and update tau + calculate_stencil_3rd_order_tele(grid, iip, jjt, kkr); + } else { + // update boundary + calculate_boundary_nodes_tele(grid, iip, jjt, kkr); + } + } + } + } + } // end if subdom_main +} + +Iterator_legacy_1st_order_upwind_tele::Iterator_legacy_1st_order_upwind_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, \ + bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_legacy_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +void Iterator_legacy_1st_order_upwind_tele::do_sweep(int iswp, Grid& grid, InputParams& IP) { + if (subdom_main) { + // set sweep direction + set_sweep_direction(iswp); + + // set loop range + int r_start, t_start, p_start, r_end, t_end, p_end; + + if (r_dirc < 0) { + r_start = nr-1; + r_end = -1; + } else { + r_start = 0; + r_end = nr; + } + if (t_dirc < 0) { + t_start = nt-1; + t_end = -1; + } else { + t_start = 0; + t_end = nt; + } + if (p_dirc < 0) { + p_start = np-1; + p_end = -1; + } else { + p_start = 0; + p_end = np; + } + + for (int kkr = r_start; kkr != r_end; kkr+=r_dirc) { + for (int jjt = t_start; jjt != t_end; jjt+=t_dirc) { + for (int iip = p_start; iip != p_end; iip+=p_dirc) { + // this if statement is not necessary because always only the outer layer + // is !is_changed in teleseismic case + // if (grid.is_changed[I2V(iip, jjt, kkr)]) { + // if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0 && kkr != nr-1) { + // 1st order, calculate stencils + if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0) { // top layer is not fixed, otherwise, the top layer will be 2000 + calculate_stencil_1st_order_upwind_tele(grid, iip, jjt, kkr); // no need to consider the boundary for upwind scheme + } + } + } + } + + } // end if subdom_main +} + diff --git a/src/iterator_level.cpp b/src/iterator_level.cpp new file mode 100644 index 0000000..56a19d0 --- /dev/null +++ b/src/iterator_level.cpp @@ -0,0 +1,1108 @@ +#include "iterator_level.h" + +#ifdef USE_SIMD +#include "vectorized_sweep.h" +#endif + + +Iterator_level::Iterator_level(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // do nothing +} + + +void Iterator_level::do_sweep_adj(int iswp, Grid& grid, InputParams& IP){ + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-1-kkr; + else kkr = kkr; + if (t_dirc < 0) jjt = nt-1-jjt; + else jjt = jjt; + if (p_dirc < 0) iip = np-1-iip; + else iip = iip; + + if(iip < 0 || jjt < 0 || kkr < 0 || iip >= np || jjt >= nt || kkr >= nr) { + std::cout << "ERROR: iip = " << iip << ", jjt = " << jjt << ", kkr = " << kkr << std::endl; + } + + // + // calculate stencils + // + if (iip != 0 && jjt != 0 && kkr != 0 \ + && iip != np-1 && jjt != nt-1 && kkr != nr-1) { + // calculate stencils + calculate_stencil_adj(grid, iip, jjt, kkr); + } else { + calculate_boundary_nodes_adj(grid, iip, jjt, kkr); + } + + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level + +} + + +Iterator_level_tele::Iterator_level_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // do nothing +} + + +void Iterator_level_tele::do_sweep_adj(int iswp, Grid& grid, InputParams& IP){ + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-1-kkr; + else kkr = kkr; + if (t_dirc < 0) jjt = nt-1-jjt; + else jjt = jjt; + if (p_dirc < 0) iip = np-1-iip; + else iip = iip; + + // + // calculate stencils + // + if (iip != 0 && jjt != 0 && kkr != 0 \ + && iip != np-1 && jjt != nt-1 && kkr != nr-1) { + // calculate stencils + calculate_stencil_adj(grid, iip, jjt, kkr); + } else { + calculate_boundary_nodes_adj(grid, iip, jjt, kkr); + } + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level + +} + + +// ERROR index!!!!!!!!!!!!! +Iterator_level_1st_order::Iterator_level_1st_order(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_level_1st_order::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + if(!use_gpu){ + +#if !defined USE_SIMD + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-kkr; //kk-1; + else kkr = kkr-1; //nr-kk; + if (t_dirc < 0) jjt = nt-jjt; //jj-1; + else jjt = jjt-1; //nt-jj; + if (p_dirc < 0) iip = np-iip; //ii-1; + else iip = iip-1; //np-ii; + + // + // calculate stencils + // + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + calculate_stencil_1st_order(grid, iip, jjt, kkr); + } // is_changed == true + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level + +#elif USE_AVX512 || USE_AVX + + // preload constants + __mT v_DP_inv = _mmT_set1_pT(1.0/dp); + __mT v_DT_inv = _mmT_set1_pT(1.0/dt); + __mT v_DR_inv = _mmT_set1_pT(1.0/dr); + __mT v_DP_inv_half = _mmT_set1_pT(1.0/dp*0.5); + __mT v_DT_inv_half = _mmT_set1_pT(1.0/dt*0.5); + __mT v_DR_inv_half = _mmT_set1_pT(1.0/dr*0.5); + + // store stencil coefs + __mT v_pp1; + __mT v_pp2; + __mT v_pt1; + __mT v_pt2; + __mT v_pr1; + __mT v_pr2; + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc.at(i_level).size(); + + int num_iter = n_nodes / NSIMD + (n_nodes % NSIMD == 0 ? 0 : 1); + + // make alias to preloaded data + __mT* v_iip = (__mT*) vv_iip.at(iswp).at(i_level); + __mT* v_jjt = (__mT*) vv_jjt.at(iswp).at(i_level); + __mT* v_kkr = (__mT*) vv_kkr.at(iswp).at(i_level); + + __mT* v_fac_a = (__mT*) vv_fac_a.at(iswp).at(i_level); + __mT* v_fac_b = (__mT*) vv_fac_b.at(iswp).at(i_level); + __mT* v_fac_c = (__mT*) vv_fac_c.at(iswp).at(i_level); + __mT* v_fac_f = (__mT*) vv_fac_f.at(iswp).at(i_level); + __mT* v_T0v = (__mT*) vv_T0v.at(iswp).at(i_level); + __mT* v_T0r = (__mT*) vv_T0r.at(iswp).at(i_level); + __mT* v_T0t = (__mT*) vv_T0t.at(iswp).at(i_level); + __mT* v_T0p = (__mT*) vv_T0p.at(iswp).at(i_level); + __mT* v_fun = (__mT*) vv_fun.at(iswp).at(i_level); + __mT* v_change = (__mT*) vv_change.at(iswp).at(i_level); + + // alias for dumped index + int* dump_ijk = vv_i__j__k__.at(iswp).at(i_level); + int* dump_ip1jk = vv_ip1j__k__.at(iswp).at(i_level); + int* dump_im1jk = vv_im1j__k__.at(iswp).at(i_level); + int* dump_ijp1k = vv_i__jp1k__.at(iswp).at(i_level); + int* dump_ijm1k = vv_i__jm1k__.at(iswp).at(i_level); + int* dump_ijkp1 = vv_i__j__kp1.at(iswp).at(i_level); + int* dump_ijkm1 = vv_i__j__km1.at(iswp).at(i_level); + + // load data of all nodes in one level on temporal aligned array + for (int _i_vec = 0; _i_vec < num_iter; _i_vec++) { + + int i_vec = _i_vec * NSIMD; + __mT v_c__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijk[i_vec]); + __mT v_p__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ip1jk[i_vec]); + __mT v_m__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_im1jk[i_vec]); + __mT v__p_ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijp1k[i_vec]); + __mT v__m_ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijm1k[i_vec]); + __mT v___p = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkp1[i_vec]); + __mT v___m = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkm1[i_vec]); + + // loop over all nodes in one level + vect_stencil_1st_pre_simd(v_iip[_i_vec], v_jjt[_i_vec], v_kkr[_i_vec], \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv, \ + v_DP_inv_half, v_DT_inv_half, v_DR_inv_half, \ + loc_I, loc_J, loc_K); + + // calculate updated value on c + vect_stencil_1st_3rd_apre_simd(v_c__, v_fac_a[_i_vec], v_fac_b[_i_vec], v_fac_c[_i_vec], v_fac_f[_i_vec], \ + v_T0v[_i_vec], v_T0p[_i_vec] , v_T0t[_i_vec] , v_T0r[_i_vec] , v_fun[_i_vec] , v_change[_i_vec], \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv); + + // store v_c__ to dump_c__ + _mmT_store_pT(dump_c__, v_c__); + + + for (int i = 0; i < NSIMD; i++) { + if(i_vec+i>=n_nodes) break; + + grid.tau_loc[dump_ijk[i_vec+i]] = dump_c__[i]; + } + + + + } // end of i_vec loop + + // mpi synchronization + synchronize_all_sub(); + + } // end of i_level loop + +#elif USE_ARM_SVE + + svbool_t pg; + // + __mT v_DP_inv = svdup_f64(1.0/dp); + __mT v_DT_inv = svdup_f64(1.0/dt); + __mT v_DR_inv = svdup_f64(1.0/dr); + __mT v_DP_inv_half = svdup_f64(1.0/dp*0.5); + __mT v_DT_inv_half = svdup_f64(1.0/dt*0.5); + __mT v_DR_inv_half = svdup_f64(1.0/dr*0.5); + + // store stencil coefs + __mT v_pp1; + __mT v_pp2; + __mT v_pt1; + __mT v_pt2; + __mT v_pr1; + __mT v_pr2; + + __mT v_c__ ; + __mT v_p__ ; + __mT v_m__ ; + __mT v__p_ ; + __mT v__m_ ; + __mT v___p ; + __mT v___m ; + + __mT v_iip_ ; + __mT v_jjt_ ; + __mT v_kkr_ ; + __mT v_fac_a_ ; + __mT v_fac_b_ ; + __mT v_fac_c_ ; + __mT v_fac_f_ ; + __mT v_T0v_ ; + __mT v_T0r_ ; + __mT v_T0t_ ; + __mT v_T0p_ ; + __mT v_fun_ ; + __mT v_change_; + + + // measure time for only loop + //auto start = std::chrono::high_resolution_clock::now(); + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc.at(i_level).size(); + //std::cout << "n_nodes = " << n_nodes << std::endl; + + int num_iter = n_nodes / NSIMD + (n_nodes % NSIMD == 0 ? 0 : 1); + + // make alias to preloaded data + CUSTOMREAL* v_iip = vv_iip.at(iswp).at(i_level); + CUSTOMREAL* v_jjt = vv_jjt.at(iswp).at(i_level); + CUSTOMREAL* v_kkr = vv_kkr.at(iswp).at(i_level); + + CUSTOMREAL* v_fac_a = vv_fac_a.at(iswp).at(i_level); + CUSTOMREAL* v_fac_b = vv_fac_b.at(iswp).at(i_level); + CUSTOMREAL* v_fac_c = vv_fac_c.at(iswp).at(i_level); + CUSTOMREAL* v_fac_f = vv_fac_f.at(iswp).at(i_level); + CUSTOMREAL* v_T0v = vv_T0v.at(iswp).at(i_level); + CUSTOMREAL* v_T0r = vv_T0r.at(iswp).at(i_level); + CUSTOMREAL* v_T0t = vv_T0t.at(iswp).at(i_level); + CUSTOMREAL* v_T0p = vv_T0p.at(iswp).at(i_level); + CUSTOMREAL* v_fun = vv_fun.at(iswp).at(i_level); + CUSTOMREAL* v_change = vv_change.at(iswp).at(i_level); + + // alias for dumped index + uint64_t* dump_ijk = vv_i__j__k__.at(iswp).at(i_level); + uint64_t* dump_ip1jk = vv_ip1j__k__.at(iswp).at(i_level); + uint64_t* dump_im1jk = vv_im1j__k__.at(iswp).at(i_level); + uint64_t* dump_ijp1k = vv_i__jp1k__.at(iswp).at(i_level); + uint64_t* dump_ijm1k = vv_i__jm1k__.at(iswp).at(i_level); + uint64_t* dump_ijkp1 = vv_i__j__kp1.at(iswp).at(i_level); + uint64_t* dump_ijkm1 = vv_i__j__km1.at(iswp).at(i_level); + + // load data of all nodes in one level on temporal aligned array + for (int _i_vec = 0; _i_vec < num_iter; _i_vec++) { + int i_vec = _i_vec * NSIMD; + + pg = svwhilelt_b64(i_vec, n_nodes); + + v_c__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijk[i_vec]); + v_p__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ip1jk[i_vec]); + v_m__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_im1jk[i_vec]); + v__p_ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijp1k[i_vec]); + v__m_ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijm1k[i_vec]); + v___p = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkp1[i_vec]); + v___m = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkm1[i_vec]); + + // load v_iip, v_jjt, v_kkr + v_iip_ = svld1_vnum_f64(pg, v_iip , _i_vec); + v_jjt_ = svld1_vnum_f64(pg, v_jjt , _i_vec); + v_kkr_ = svld1_vnum_f64(pg, v_kkr , _i_vec); + v_fac_a_ = svld1_vnum_f64(pg, v_fac_a , _i_vec); + v_fac_b_ = svld1_vnum_f64(pg, v_fac_b , _i_vec); + v_fac_c_ = svld1_vnum_f64(pg, v_fac_c , _i_vec); + v_fac_f_ = svld1_vnum_f64(pg, v_fac_f , _i_vec); + v_T0v_ = svld1_vnum_f64(pg, v_T0v , _i_vec); + v_T0r_ = svld1_vnum_f64(pg, v_T0r , _i_vec); + v_T0t_ = svld1_vnum_f64(pg, v_T0t , _i_vec); + v_T0p_ = svld1_vnum_f64(pg, v_T0p , _i_vec); + v_fun_ = svld1_vnum_f64(pg, v_fun , _i_vec); + v_change_= svld1_vnum_f64(pg, v_change, _i_vec); + + // loop over all nodes in one level + vect_stencil_1st_pre_simd(pg, v_iip_, v_jjt_, v_kkr_, \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv, \ + v_DP_inv_half, v_DT_inv_half, v_DR_inv_half, \ + loc_I, loc_J, loc_K); + + // calculate updated value on c + vect_stencil_1st_3rd_apre_simd(pg, v_c__, v_fac_a_, v_fac_b_, v_fac_c_, v_fac_f_, \ + v_T0v_, v_T0p_, v_T0t_, v_T0r_, v_fun_, v_change_, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv); + + // store v_c__ to dump_c__ + svst1_scatter_u64index_f64(pg, grid.tau_loc, svld1_u64(pg,&dump_ijk[i_vec]), v_c__); + + + } // end of i_vec loop + + // mpi synchronization + synchronize_all_sub(); + + } // end of i_level loop + +#endif // ifndef USE_SIMD + + } // end of if !use_gpu + else { // if use_gpu + +#if defined USE_CUDA + + // copy tau to device + cuda_copy_tau_to_device(gpu_grid, grid.tau_loc); + + // run iteration + cuda_run_iteration_forward(gpu_grid, iswp); + + // copy tau to host + cuda_copy_tau_to_host(gpu_grid, grid.tau_loc); + +#else // !defiend USE_CUDA + // exit code + std::cout << "Error: USE_CUDA is not defined" << std::endl; + exit(1); +#endif + + } // end of if use_gpu + + // update boundary + if (subdom_main) { + calculate_boundary_nodes(grid); + } +} + + +// ERROR index!!!!!!!!!!!!! +Iterator_level_3rd_order::Iterator_level_3rd_order(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_level_3rd_order::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + if(!use_gpu) { + +#if !defined USE_SIMD + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-kkr; //kk-1; + else kkr = kkr-1; //nr-kk; + if (t_dirc < 0) jjt = nt-jjt; //jj-1; + else jjt = jjt-1; //nt-jj; + if (p_dirc < 0) iip = np-iip; //ii-1; + else iip = iip-1; //np-ii; + + // + // calculate stencils + // + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + calculate_stencil_3rd_order(grid, iip, jjt, kkr); + } // is_changed == true + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level + +#elif USE_AVX512 || USE_AVX + + // + __mT v_DP_inv = _mmT_set1_pT(1.0/dp); + __mT v_DT_inv = _mmT_set1_pT(1.0/dt); + __mT v_DR_inv = _mmT_set1_pT(1.0/dr); + __mT v_DP_inv_half = _mmT_set1_pT(1.0/dp*0.5); + __mT v_DT_inv_half = _mmT_set1_pT(1.0/dt*0.5); + __mT v_DR_inv_half = _mmT_set1_pT(1.0/dr*0.5); + + // store stencil coefs + __mT v_pp1 = _mmT_set1_pT(0.0); + __mT v_pp2 = _mmT_set1_pT(0.0); + __mT v_pt1 = _mmT_set1_pT(0.0); + __mT v_pt2 = _mmT_set1_pT(0.0); + __mT v_pr1 = _mmT_set1_pT(0.0); + __mT v_pr2 = _mmT_set1_pT(0.0); + + // measure time for only loop + //auto start = std::chrono::high_resolution_clock::now(); + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc.at(i_level).size(); + //std::cout << "n_nodes = " << n_nodes << std::endl; + + int num_iter = n_nodes / NSIMD + (n_nodes % NSIMD == 0 ? 0 : 1); + + // make alias to preloaded data + __mT* v_iip = (__mT*) vv_iip.at(iswp).at(i_level); + __mT* v_jjt = (__mT*) vv_jjt.at(iswp).at(i_level); + __mT* v_kkr = (__mT*) vv_kkr.at(iswp).at(i_level); + + __mT* v_fac_a = (__mT*) vv_fac_a.at(iswp).at(i_level); + __mT* v_fac_b = (__mT*) vv_fac_b.at(iswp).at(i_level); + __mT* v_fac_c = (__mT*) vv_fac_c.at(iswp).at(i_level); + __mT* v_fac_f = (__mT*) vv_fac_f.at(iswp).at(i_level); + __mT* v_T0v = (__mT*) vv_T0v.at(iswp).at(i_level); + __mT* v_T0r = (__mT*) vv_T0r.at(iswp).at(i_level); + __mT* v_T0t = (__mT*) vv_T0t.at(iswp).at(i_level); + __mT* v_T0p = (__mT*) vv_T0p.at(iswp).at(i_level); + __mT* v_fun = (__mT*) vv_fun.at(iswp).at(i_level); + __mT* v_change = (__mT*) vv_change.at(iswp).at(i_level); + + // alias for dumped index + int* dump_ijk = vv_i__j__k__.at(iswp).at(i_level); + int* dump_ip1jk = vv_ip1j__k__.at(iswp).at(i_level); + int* dump_im1jk = vv_im1j__k__.at(iswp).at(i_level); + int* dump_ijp1k = vv_i__jp1k__.at(iswp).at(i_level); + int* dump_ijm1k = vv_i__jm1k__.at(iswp).at(i_level); + int* dump_ijkp1 = vv_i__j__kp1.at(iswp).at(i_level); + int* dump_ijkm1 = vv_i__j__km1.at(iswp).at(i_level); + int* dump_ip2jk = vv_ip2j__k__.at(iswp).at(i_level); + int* dump_im2jk = vv_im2j__k__.at(iswp).at(i_level); + int* dump_ijp2k = vv_i__jp2k__.at(iswp).at(i_level); + int* dump_ijm2k = vv_i__jm2k__.at(iswp).at(i_level); + int* dump_ijkp2 = vv_i__j__kp2.at(iswp).at(i_level); + int* dump_ijkm2 = vv_i__j__km2.at(iswp).at(i_level); ///////////////////////////////////// + + // load data of all nodes in one level on temporal aligned array + for (int _i_vec = 0; _i_vec < num_iter; _i_vec++) { + + int i_vec = _i_vec * NSIMD; + __mT v_c__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijk [i_vec]); + __mT v_p__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ip1jk[i_vec]); + __mT v_m__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_im1jk[i_vec]); + __mT v__p_ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijp1k[i_vec]); + __mT v__m_ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijm1k[i_vec]); + __mT v___p = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkp1[i_vec]); + __mT v___m = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkm1[i_vec]); + __mT v_pp____ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ip2jk[i_vec]); + __mT v_mm____ = load_mem_gen_to_mTd(grid.tau_loc, &dump_im2jk[i_vec]); + __mT v___pp__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijp2k[i_vec]); + __mT v___mm__ = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijm2k[i_vec]); + __mT v_____pp = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkp2[i_vec]); + __mT v_____mm = load_mem_gen_to_mTd(grid.tau_loc, &dump_ijkm2[i_vec]); + + // loop over all nodes in one level + vect_stencil_3rd_pre_simd(v_iip[_i_vec], v_jjt[_i_vec], v_kkr[_i_vec], \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp____, v_mm____, v___pp__, v___mm__, v_____pp, v_____mm, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv, \ + v_DP_inv_half, v_DT_inv_half, v_DR_inv_half, \ + loc_I, loc_J, loc_K); + + // calculate updated value on c + vect_stencil_1st_3rd_apre_simd(v_c__, v_fac_a[_i_vec], v_fac_b[_i_vec], v_fac_c[_i_vec], v_fac_f[_i_vec], \ + v_T0v[_i_vec], v_T0p[_i_vec] , v_T0t[_i_vec] , v_T0r[_i_vec] , v_fun[_i_vec] , v_change[_i_vec], \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv); + + // store v_c__ to dump_c__ + _mmT_store_pT(dump_c__, v_c__); + + + for (int i = 0; i < NSIMD; i++) { + if(i_vec+i>=n_nodes) break; + + grid.tau_loc[dump_ijk[i_vec+i]] = dump_c__[i]; + } + + + + } // end of i_vec loop + + // mpi synchronization + synchronize_all_sub(); // dead lock + + } // end of i_level loop + +#elif USE_ARM_SVE + // + svbool_t pg; + + __mT v_DP_inv = svdup_f64(1.0/dp); + __mT v_DT_inv = svdup_f64(1.0/dt); + __mT v_DR_inv = svdup_f64(1.0/dr); + __mT v_DP_inv_half = svdup_f64(1.0/dp*0.5); + __mT v_DT_inv_half = svdup_f64(1.0/dt*0.5); + __mT v_DR_inv_half = svdup_f64(1.0/dr*0.5); + + // store stencil coefs + __mT v_pp1; + __mT v_pp2; + __mT v_pt1; + __mT v_pt2; + __mT v_pr1; + __mT v_pr2; + + __mT v_c__ ; + __mT v_p__ ; + __mT v_m__ ; + __mT v__p_ ; + __mT v__m_ ; + __mT v___p ; + __mT v___m ; + __mT v_pp____; + __mT v_mm____; + __mT v___pp__; + __mT v___mm__; + __mT v_____pp; + __mT v_____mm; + + __mT v_iip_ ; + __mT v_jjt_ ; + __mT v_kkr_ ; + __mT v_fac_a_ ; + __mT v_fac_b_ ; + __mT v_fac_c_ ; + __mT v_fac_f_ ; + __mT v_T0v_ ; + __mT v_T0r_ ; + __mT v_T0t_ ; + __mT v_T0p_ ; + __mT v_fun_ ; + __mT v_change_; + + + // measure time for only loop + //auto start = std::chrono::high_resolution_clock::now(); + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc.at(i_level).size(); + //std::cout << "n_nodes = " << n_nodes << std::endl; + + int num_iter = n_nodes / NSIMD + (n_nodes % NSIMD == 0 ? 0 : 1); + + // make alias to preloaded data + CUSTOMREAL* v_iip = vv_iip.at(iswp).at(i_level); + CUSTOMREAL* v_jjt = vv_jjt.at(iswp).at(i_level); + CUSTOMREAL* v_kkr = vv_kkr.at(iswp).at(i_level); + + CUSTOMREAL* v_fac_a = vv_fac_a.at(iswp).at(i_level); + CUSTOMREAL* v_fac_b = vv_fac_b.at(iswp).at(i_level); + CUSTOMREAL* v_fac_c = vv_fac_c.at(iswp).at(i_level); + CUSTOMREAL* v_fac_f = vv_fac_f.at(iswp).at(i_level); + CUSTOMREAL* v_T0v = vv_T0v.at(iswp).at(i_level); + CUSTOMREAL* v_T0r = vv_T0r.at(iswp).at(i_level); + CUSTOMREAL* v_T0t = vv_T0t.at(iswp).at(i_level); + CUSTOMREAL* v_T0p = vv_T0p.at(iswp).at(i_level); + CUSTOMREAL* v_fun = vv_fun.at(iswp).at(i_level); + CUSTOMREAL* v_change = vv_change.at(iswp).at(i_level); + + // alias for dumped index + uint64_t* dump_ijk = vv_i__j__k__.at(iswp).at(i_level); + uint64_t* dump_ip1jk = vv_ip1j__k__.at(iswp).at(i_level); + uint64_t* dump_im1jk = vv_im1j__k__.at(iswp).at(i_level); + uint64_t* dump_ijp1k = vv_i__jp1k__.at(iswp).at(i_level); + uint64_t* dump_ijm1k = vv_i__jm1k__.at(iswp).at(i_level); + uint64_t* dump_ijkp1 = vv_i__j__kp1.at(iswp).at(i_level); + uint64_t* dump_ijkm1 = vv_i__j__km1.at(iswp).at(i_level); + uint64_t* dump_ip2jk = vv_ip2j__k__.at(iswp).at(i_level); + uint64_t* dump_im2jk = vv_im2j__k__.at(iswp).at(i_level); + uint64_t* dump_ijp2k = vv_i__jp2k__.at(iswp).at(i_level); + uint64_t* dump_ijm2k = vv_i__jm2k__.at(iswp).at(i_level); + uint64_t* dump_ijkp2 = vv_i__j__kp2.at(iswp).at(i_level); + uint64_t* dump_ijkm2 = vv_i__j__km2.at(iswp).at(i_level); + + // load data of all nodes in one level on temporal aligned array + for (int _i_vec = 0; _i_vec < num_iter; _i_vec++) { + int i_vec = _i_vec * NSIMD; + + pg = svwhilelt_b64(i_vec, n_nodes); + + v_c__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijk [i_vec]); + v_p__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ip1jk[i_vec]); + v_m__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_im1jk[i_vec]); + v__p_ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijp1k[i_vec]); + v__m_ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijm1k[i_vec]); + v___p = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkp1[i_vec]); + v___m = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkm1[i_vec]); + v_pp____ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ip2jk[i_vec]); + v_mm____ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_im2jk[i_vec]); + v___pp__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijp2k[i_vec]); + v___mm__ = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijm2k[i_vec]); + v_____pp = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkp2[i_vec]); + v_____mm = load_mem_gen_to_mTd(pg, grid.tau_loc, &dump_ijkm2[i_vec]); + + // load v_iip, v_jjt, v_kkr + v_iip_ = svld1_vnum_f64(pg, v_iip , _i_vec); + v_jjt_ = svld1_vnum_f64(pg, v_jjt , _i_vec); + v_kkr_ = svld1_vnum_f64(pg, v_kkr , _i_vec); + v_fac_a_ = svld1_vnum_f64(pg, v_fac_a , _i_vec); + v_fac_b_ = svld1_vnum_f64(pg, v_fac_b , _i_vec); + v_fac_c_ = svld1_vnum_f64(pg, v_fac_c , _i_vec); + v_fac_f_ = svld1_vnum_f64(pg, v_fac_f , _i_vec); + v_T0v_ = svld1_vnum_f64(pg, v_T0v , _i_vec); + v_T0r_ = svld1_vnum_f64(pg, v_T0r , _i_vec); + v_T0t_ = svld1_vnum_f64(pg, v_T0t , _i_vec); + v_T0p_ = svld1_vnum_f64(pg, v_T0p , _i_vec); + v_fun_ = svld1_vnum_f64(pg, v_fun , _i_vec); + v_change_= svld1_vnum_f64(pg, v_change, _i_vec); + + // loop over all nodes in one level + vect_stencil_3rd_pre_simd(pg, v_iip_, v_jjt_, v_kkr_, \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp____, v_mm____, v___pp__, v___mm__, v_____pp, v_____mm, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv, \ + v_DP_inv_half, v_DT_inv_half, v_DR_inv_half, \ + loc_I, loc_J, loc_K); + + //// calculate updated value on c + vect_stencil_1st_3rd_apre_simd(pg, v_c__, v_fac_a_, v_fac_b_, v_fac_c_, v_fac_f_, \ + v_T0v_, v_T0p_, v_T0t_, v_T0r_, v_fun_, v_change_, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv); + + // store v_c__ to dump_c__ + svst1_scatter_u64index_f64(pg, grid.tau_loc, svld1_u64(pg,&dump_ijk[i_vec]), v_c__); + } // end of i_vec loop + + // mpi synchronization + synchronize_all_sub(); + + } // end of i_level loop + +#endif // ifndef USE_SIMD + + } // end of if !use_gpu + else { // if use_gpu + +#if defined USE_CUDA + + // copy tau to device + cuda_copy_tau_to_device(gpu_grid, grid.tau_loc); + + // run iteration + cuda_run_iteration_forward(gpu_grid, iswp); + + // copy tau to host + cuda_copy_tau_to_host(gpu_grid, grid.tau_loc); + +#else // !defiend USE_CUDA + // exit code + std::cout << "Error: USE_CUDA is not defined" << std::endl; + exit(1); +#endif + + } // end of if use_gpu + + // update boundary + if (subdom_main) { + calculate_boundary_nodes(grid); + } + +} + + +Iterator_level_1st_order_upwind::Iterator_level_1st_order_upwind(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +void Iterator_level_1st_order_upwind::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-1-kkr; + else kkr = kkr; + if (t_dirc < 0) jjt = nt-1-jjt; + else jjt = jjt; + if (p_dirc < 0) iip = np-1-iip; + else iip = iip; + + // + // calculate stencils + // + if (grid.is_changed[I2V(iip, jjt, kkr)]) { + calculate_stencil_1st_order_upwind(grid, iip, jjt, kkr); + } // is_changed == true + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level +} + +// ERROR index!!!!!!!!!!!!! +Iterator_level_1st_order_tele::Iterator_level_1st_order_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +void Iterator_level_1st_order_tele::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + if(!use_gpu) { + +//#if !defined USE_SIMD + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-kkr-1; + //else kkr = kkr; + if (t_dirc < 0) jjt = nt-jjt-1; + //else jjt = jjt; + if (p_dirc < 0) iip = np-iip-1; + //else iip = iip; + + // + // calculate stencils + // + if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0 && kkr != nr-1) { + // calculate stencils + calculate_stencil_1st_order_tele(grid, iip, jjt, kkr); + } else { + // update boundary + calculate_boundary_nodes_tele(grid, iip, jjt, kkr); + } + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level + +/* +#elif USE_AVX512 || USE_AVX + + // preload constants + __mT v_DP_inv = _mmT_set1_pT(1.0/dp); + __mT v_DT_inv = _mmT_set1_pT(1.0/dt); + __mT v_DR_inv = _mmT_set1_pT(1.0/dr); + __mT v_DP_inv_half = _mmT_set1_pT(1.0/dp*0.5); + __mT v_DT_inv_half = _mmT_set1_pT(1.0/dt*0.5); + __mT v_DR_inv_half = _mmT_set1_pT(1.0/dr*0.5); + + // store stencil coefs + __mT v_pp1; + __mT v_pp2; + __mT v_pt1; + __mT v_pt2; + __mT v_pr1; + __mT v_pr2; + + int n_levels = ijk_for_this_subproc.size(); + for (int i_level = 0; i_level < n_levels; i_level++) { + int n_nodes = ijk_for_this_subproc.at(i_level).size(); + + int num_iter = n_nodes / NSIMD + (n_nodes % NSIMD == 0 ? 0 : 1); + + // make alias to preloaded data + __mT* v_iip = (__mT*) vv_iip.at(iswp).at(i_level); + __mT* v_jjt = (__mT*) vv_jjt.at(iswp).at(i_level); + __mT* v_kkr = (__mT*) vv_kkr.at(iswp).at(i_level); + + __mT* v_fac_a = (__mT*) vv_fac_a.at(iswp).at(i_level); + __mT* v_fac_b = (__mT*) vv_fac_b.at(iswp).at(i_level); + __mT* v_fac_c = (__mT*) vv_fac_c.at(iswp).at(i_level); + __mT* v_fac_f = (__mT*) vv_fac_f.at(iswp).at(i_level); + __mT* v_fun = (__mT*) vv_fun.at(iswp).at(i_level); + __mT* v_change = (__mT*) vv_change.at(iswp).at(i_level); + + // alias for dumped index + int* dump_ijk = vv_i__j__k__.at(iswp).at(i_level); + int* dump_ip1jk = vv_ip1j__k__.at(iswp).at(i_level); + int* dump_im1jk = vv_im1j__k__.at(iswp).at(i_level); + int* dump_ijp1k = vv_i__jp1k__.at(iswp).at(i_level); + int* dump_ijm1k = vv_i__jm1k__.at(iswp).at(i_level); + int* dump_ijkp1 = vv_i__j__kp1.at(iswp).at(i_level); + int* dump_ijkm1 = vv_i__j__km1.at(iswp).at(i_level); + int* dump_ip2jk = vv_ip2j__k__.at(iswp).at(i_level); + int* dump_im2jk = vv_im2j__k__.at(iswp).at(i_level); + int* dump_ijp2k = vv_i__jp2k__.at(iswp).at(i_level); + int* dump_ijm2k = vv_i__jm2k__.at(iswp).at(i_level); + int* dump_ijkp2 = vv_i__j__kp2.at(iswp).at(i_level); + int* dump_ijkm2 = vv_i__j__km2.at(iswp).at(i_level); + + // load data of all nodes in one level on temporal aligned array + for (int _i_vec = 0; _i_vec < num_iter; _i_vec++) { + + int i_vec = _i_vec * NSIMD; + __mT v_c__ = load_mem_gen_to_mTd(grid.T_loc, &dump_ijk[i_vec]); + __mT v_p__ = load_mem_gen_to_mTd(grid.T_loc, &dump_ip1jk[i_vec]); + __mT v_m__ = load_mem_gen_to_mTd(grid.T_loc, &dump_im1jk[i_vec]); + __mT v__p_ = load_mem_gen_to_mTd(grid.T_loc, &dump_ijp1k[i_vec]); + __mT v__m_ = load_mem_gen_to_mTd(grid.T_loc, &dump_ijm1k[i_vec]); + __mT v___p = load_mem_gen_to_mTd(grid.T_loc, &dump_ijkp1[i_vec]); + __mT v___m = load_mem_gen_to_mTd(grid.T_loc, &dump_ijkm1[i_vec]); + __mT v_pp____ = load_mem_gen_to_mTd(grid.T_loc, &dump_ip2jk[i_vec]); + __mT v_mm____ = load_mem_gen_to_mTd(grid.T_loc, &dump_im2jk[i_vec]); + __mT v___pp__ = load_mem_gen_to_mTd(grid.T_loc, &dump_ijp2k[i_vec]); + __mT v___mm__ = load_mem_gen_to_mTd(grid.T_loc, &dump_ijm2k[i_vec]); + __mT v_____pp = load_mem_gen_to_mTd(grid.T_loc, &dump_ijkp2[i_vec]); + __mT v_____mm = load_mem_gen_to_mTd(grid.T_loc, &dump_ijkm2[i_vec]); + + + // loop over all nodes in one level (this routine for teleseismic is same with that for local) + vect_stencil_1st_pre_simd(v_iip[_i_vec], v_jjt[_i_vec], v_kkr[_i_vec], \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv, \ + v_DP_inv_half, v_DT_inv_half, v_DR_inv_half, \ + loc_I, loc_J, loc_K); + + // calculate updated value on c + vect_stencil_1st_3rd_apre_simd_tele(v_c__, v_fac_a[_i_vec], v_fac_b[_i_vec], v_fac_c[_i_vec], v_fac_f[_i_vec], \ + v_fun[_i_vec], v_change[_i_vec], \ + v_pp1, v_pp2, v_pt1, v_pt2, v_pr1, v_pr2, \ + v_DP_inv, v_DT_inv, v_DR_inv); + + // calculate the values on boudaries + calculate_boundary_nodes_tele_simd(v_iip[_i_vec], v_jjt[_i_vec], v_kkr[_i_vec], \ + v_c__, \ + v_p__, v_m__, v__p_, v__m_, v___p, v___m, \ + v_pp____, v_mm____, v___pp__, v___mm__, v_____pp, v_____mm, \ + v_change[_i_vec], \ + loc_I, loc_J, loc_K); + + // store v_c__ to dump_c__ + _mmT_store_pT(dump_c__, v_c__); + + for (int i = 0; i < NSIMD; i++) { + if(i_vec+i>=n_nodes) break; + + grid.tau_loc[dump_ijk[i_vec+i]] = dump_c__[i]; + } + + + + } // end of i_vec loop + + // mpi synchronization + synchronize_all_sub(); + + } // end of i_level loop + + + +#elif USE_ARM_SVE + +#endif // ifndef USE_SIMD +*/ + + } // end of if !use_gpu + else { // if use_gpu + +#if defined USE_CUDA + + //// copy tau to device + //cuda_copy_tau_to_device(gpu_grid, grid.tau_loc); + + //// run iteration + //cuda_run_iteration_forward_tele(gpu_grid, iswp); + + //// copy tau to host + //cuda_copy_tau_to_host(gpu_grid, grid.tau_loc); + +#else // !defiend USE_CUDA + // exit code + std::cout << "Error: USE_CUDA is not defined" << std::endl; + exit(1); +#endif + + } // end of if use_gpu + + +} + +// ERROR index!!!!!!!!!!!!! +Iterator_level_3rd_order_tele::Iterator_level_3rd_order_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + + +void Iterator_level_3rd_order_tele::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + if(!use_gpu) { + +//#if !defined USE_SIMD + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-kkr-1; + //else kkr = kkr; + if (t_dirc < 0) jjt = nt-jjt-1; + //else jjt = jjt; + if (p_dirc < 0) iip = np-iip-1; + //else iip = iip; + + // + // calculate stencils + // + if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0 && kkr != nr-1) { + // calculate stencils + calculate_stencil_3rd_order_tele(grid, iip, jjt, kkr); + } else { + // update boundary + calculate_boundary_nodes_tele(grid, iip, jjt, kkr); + } + } // end ijk + + // mpi synchronization + synchronize_all_sub(); /////////////////////////////////////// + + } // end loop i_level + +//#elif USE_AVX512 || USE_AVX +// +//#elif USE_ARM_SVE +// +//#endif // ifndef USE_SIMD + + } // end of if !use_gpu + else { // if use_gpu + +#if defined USE_CUDA + + //// copy tau to device + //cuda_copy_tau_to_device(gpu_grid, grid.tau_loc); + + //// run iteration + //cuda_run_iteration_forward_tele(gpu_grid, iswp); + + //// copy tau to host + //cuda_copy_tau_to_host(gpu_grid, grid.tau_loc); + +#else // !defiend USE_CUDA + // exit code + std::cout << "Error: USE_CUDA is not defined" << std::endl; + exit(1); +#endif + + } // end of if use_gpu + + +} + + +Iterator_level_1st_order_upwind_tele::Iterator_level_1st_order_upwind_tele(InputParams& IP, Grid& grid, Source& src, IO_utils& io, const std::string& src_name, bool first_init, bool is_teleseismic_in, bool is_second_run_in) \ + : Iterator_level_tele(IP, grid, src, io, src_name, first_init, is_teleseismic_in, is_second_run_in) { + // initialization is done in the base class +} + +void Iterator_level_1st_order_upwind_tele::do_sweep(int iswp, Grid& grid, InputParams& IP){ + + // set sweep direction + set_sweep_direction(iswp); + + int iip, jjt, kkr; + int n_levels = ijk_for_this_subproc.size(); + + for (int i_level = 0; i_level < n_levels; i_level++) { + size_t n_nodes = ijk_for_this_subproc[i_level].size(); + + for (size_t i_node = 0; i_node < n_nodes; i_node++) { + + V2I(ijk_for_this_subproc[i_level][i_node], iip, jjt, kkr); + + if (r_dirc < 0) kkr = nr-1-kkr; + else kkr = kkr; + if (t_dirc < 0) jjt = nt-1-jjt; + else jjt = jjt; + if (p_dirc < 0) iip = np-1-iip; + else iip = iip; + + // + // calculate stencils + // + // if (iip != 0 && iip != np-1 && jjt != 0 && jjt != nt-1 && kkr != 0) { // top layer is not fixed, otherwise, the top layer will be 2000 + // calculate_stencil_1st_order_upwind_tele(grid, iip, jjt, kkr); // no need to consider the boundary for upwind scheme + // } + + calculate_stencil_1st_order_upwind_tele(grid, iip, jjt, kkr); + } // end ijk + + // mpi synchronization + synchronize_all_sub(); + + } // end loop i_level +} diff --git a/src/oneD_inversion.cpp b/src/oneD_inversion.cpp new file mode 100644 index 0000000..15c6efc --- /dev/null +++ b/src/oneD_inversion.cpp @@ -0,0 +1,1367 @@ +#include "oneD_inversion.h" + +// ############################################### +// ######## OneDInversion class ########## +// ############################################### + +OneDInversion::OneDInversion(InputParams& IP, Grid& grid) { + // constructor + // std::cout << "OneDInversion constructor" << std::endl; + + // generate 2D mesh for forward modeling and inversion + generate_2d_mesh(IP); + + // allocate arrays (slowness, fac_a, fac_b, tau, ...) + allocate_arrays(); + + // initialize arrays (slowness, fac_a, fac_b, tau, ...) + load_1d_model(grid); +} + + +OneDInversion::~OneDInversion() { + // destructor + // std::cout << "OneDInversion destructor" << std::endl; + deallocate_arrays(); +} + + +int OneDInversion::I2V_1DINV(const int& it, const int& ir) { + // convert 2D index to 1D index + return ir*nt_1dinv+it; +} + + +void OneDInversion::generate_2d_mesh(InputParams& IP) { + // generate 2D mesh for forward modeling and inversion + // std::cout << "generate_2d_mesh" << std::endl; + + // obtain the maximum epicenter distance + CUSTOMREAL tmin_3d = IP.get_min_lat(); + CUSTOMREAL tmax_3d = IP.get_max_lat(); + CUSTOMREAL pmin_3d = IP.get_min_lon(); + CUSTOMREAL pmax_3d = IP.get_max_lon(); + CUSTOMREAL rmin_3d = radius2depth(IP.get_max_dep()); + CUSTOMREAL rmax_3d = radius2depth(IP.get_min_dep()); + CUSTOMREAL max_distance; + Epicentral_distance_sphere(tmin_3d, pmin_3d, tmax_3d, pmax_3d, max_distance); + + // determine r_1dinv and t_1dinv: + // r_1dinv: from rmin_3d to rmax_3d + // t_1dinv: from -0.2*max_distance to 1.2*max_distance + // dr_1dinv = dr/2; + // dt_1dinv = dt/2; + dr_1dinv = (rmax_3d-rmin_3d)/(ngrid_k-1)/2; + dt_1dinv = (tmax_3d-tmin_3d)/(ngrid_j-1)/2; + nr_1dinv = std::floor((rmax_3d-rmin_3d)/dr_1dinv)+1; + nt_1dinv = std::floor(1.4*max_distance/dt_1dinv)+1; + // initialize arrays + r_1dinv = allocateMemory(nr_1dinv, 4000); + t_1dinv = allocateMemory(nt_1dinv, 4001); + // fill arrays + for(int i=0; i(nr_1dinv*nt_1dinv, 4000); + fac_a_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4001); + fac_b_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4002); + + // parameters on grid nodes (for eikonal solver and adjoint solver) + tau_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4003); + tau_old_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4004); + T_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4005); + Tadj_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4006); + Tadj_density_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4006); + T0v_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4007); + T0r_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4008); + T0t_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4009); + is_changed_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4010); + delta_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4011); + + // parameters on grid nodes (for inversion) + Ks_1dinv = allocateMemory(nr_1dinv, 4011); + Ks_density_1dinv = allocateMemory(nr_1dinv, 4012); + Ks_over_Kden_1dinv = allocateMemory(nr_1dinv, 4013); + Ks_multigrid_1dinv = allocateMemory(nr_1dinv, 4014); + Ks_multigrid_previous_1dinv = allocateMemory(nr_1dinv, 4015); + +} + + +void OneDInversion::load_1d_model(Grid& grid) { + + // 1. ---------------- load slowness ---------------- + CUSTOMREAL *model_1d_input; + model_1d_input = allocateMemory(loc_K, 4000); + for(int k=0; k(nr_1dinv, 4000); + linear_interpolation_1d_sorted(grid.r_loc_1d, model_1d_input, loc_K, r_1dinv, tmp_slowness, nr_1dinv); + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + slowness_1dinv[I2V_1DINV(it,ir)] = tmp_slowness[ir]; + } + } + + // 2. ---------------- initilize fac_a and fac_b ---------------- + // initialize other field + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + fac_a_1dinv[I2V_1DINV(it,ir)] = _1_CR; + fac_b_1dinv[I2V_1DINV(it,ir)] = _1_CR/my_square(r_1dinv[ir]); + } + } + + delete[] model_1d_input; + delete[] tmp_slowness; +} + + +void OneDInversion::deallocate_arrays(){ + + // grid parameters + delete[] r_1dinv; + delete[] t_1dinv; + + // parameters on grid nodes (for model) + delete[] slowness_1dinv; + delete[] fac_a_1dinv; + delete[] fac_b_1dinv; + + // parameters on grid nodes (for eikonal solver and adjoint solver) + delete[] tau_1dinv; + delete[] tau_old_1dinv; + delete[] T_1dinv; + delete[] Tadj_1dinv; + delete[] Tadj_density_1dinv; + delete[] T0v_1dinv; + delete[] T0r_1dinv; + delete[] T0t_1dinv; + delete[] is_changed_1dinv; + delete[] delta_1dinv; + + // parameters on grid nodes (for inversion) + delete[] Ks_1dinv; + delete[] Ks_density_1dinv; + delete[] Ks_over_Kden_1dinv; + delete[] Ks_multigrid_1dinv; + delete[] Ks_multigrid_previous_1dinv; + +} + +// ######################################################## +// ######## main member function ######## +// ######## run_simulation_one_step_1dinv ######## +// ######## and sub functions ######## +// ######################################################## + +std::vector OneDInversion::run_simulation_one_step_1dinv(InputParams& IP, IO_utils& io, const int& i_inv) { + + // begin from here + if(world_rank == 0) + std::cout << "computing traveltime field, adjoint field and kernel for 1d inversion ..." << std::endl; + + // initialize misfit kernel + initialize_kernel_1d(); + + // iterate over sources + for (int i_src = 0; i_src < IP.n_src_this_sim_group; i_src++){ + + const std::string name_sim_src = IP.get_src_name(i_src); + + if (myrank == 0){ + std::cout << "id_sim: " << id_sim << ", calculating source (" << i_src+1 << "/" << IP.n_src_this_sim_group + << "), name: " + << name_sim_src << ", lat: " << IP.src_map[name_sim_src].lat + << ", lon: " << IP.src_map[name_sim_src].lon << ", dep: " << IP.src_map[name_sim_src].dep + << std::endl; + } + + ///////////////// run forward ////////////////// + + // solver 2d eikonal equation for the i-th source for traveltime field + eikonal_solver_2d(IP, i_src); // now traveltime field has been stored in T_1dinv. + + // calculate synthetic traveltime and adjoint source + calculate_synthetic_traveltime_and_adjoint_source(IP, i_src); // now data in data_map, the data.traveltime has been updated. + + if(IP.get_if_output_source_field() && (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2 || i_inv == 0)){ + // write out the traveltime field + write_T_1dinv(io, IP.get_src_name(i_src), i_inv); + } + + ///////////////// run adjoint ////////////////// + + // solver for 2d adjoint field + int adj_type = 0; // 0: adjoint_field, 1: adjoint_density + adjoint_solver_2d(IP, i_src, adj_type); // now adjoint field has been stored in Tadj_1dinv. + adj_type = 1; + adjoint_solver_2d(IP, i_src, adj_type); // now adjoint field has been stored in Tadj_density_1dinv. + + if(IP.get_if_output_source_field() && (IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2 || i_inv == 0)){ + // write out the adjoint field + write_Tadj_1dinv(io, IP.get_src_name(i_src), i_src); + } + + // calculate event sensitivity kernel + calculate_kernel_1d(); + } + // synchronize all processes + synchronize_all_world(); + + // gather all the traveltime to the main process and distribute to all processes + // for calculating cr_dif + IP.gather_traveltimes_and_calc_syn_diff(); + + // calculate objective function and residual + Receiver rec; + std::vector obj_residual = rec.calculate_obj_and_residual(IP); + + // return current objective function value + return obj_residual; +} + + +void OneDInversion::eikonal_solver_2d(InputParams& IP, int& i_src){ + + // get the source r + const std::string name_sim_src = IP.get_src_name(i_src); + CUSTOMREAL src_r = IP.get_src_radius(name_sim_src); + // source in the 2D grid is r = src_r, t = 0; + + // initialize T0v_1dinv, T0r_1dinv, T0t_1dinv, tau_1dinv, tau_old_1dinv is_changed_1dinv + initialize_eikonal_array(src_r); + + // fast sweeping method for 2d space + FSM_2d(); +} + + +void OneDInversion::initialize_eikonal_array(CUSTOMREAL src_r) { + // discretize the src position + CUSTOMREAL src_t_dummy = _0_CR; + int src_r_i = std::floor((src_r - r_1dinv[0])/dr_1dinv); + int src_t_i = std::floor((src_t_dummy - t_1dinv[0])/dt_1dinv); + + // error of discretized source position + CUSTOMREAL src_r_err = std::min(_1_CR, (src_r - r_1dinv[src_r_i])/dr_1dinv); + CUSTOMREAL src_t_err = std::min(_1_CR, (src_t_dummy - t_1dinv[src_t_i])/dt_1dinv); + + // check precision error for floor + if (src_r_err == _1_CR) { + src_r_err = _0_CR; + src_r_i++; + } + if (src_t_err == _1_CR) { + src_t_err = _0_CR; + src_t_i++; + } + + // initialize the initial fields + CUSTOMREAL a0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*fac_a_1dinv[I2V_1DINV(src_t_i ,src_r_i )] \ + + (_1_CR - src_r_err)* src_t_err *fac_a_1dinv[I2V_1DINV(src_t_i+1,src_r_i )] \ + + src_r_err*(_1_CR - src_t_err)*fac_a_1dinv[I2V_1DINV(src_t_i ,src_r_i+1)] \ + + src_r_err* src_t_err *fac_a_1dinv[I2V_1DINV(src_t_i+1,src_r_i+1)]; + + CUSTOMREAL b0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*fac_b_1dinv[I2V_1DINV(src_t_i ,src_r_i )] \ + + (_1_CR - src_r_err)* src_t_err *fac_b_1dinv[I2V_1DINV(src_t_i+1,src_r_i )] \ + + src_r_err *(_1_CR - src_t_err)*fac_b_1dinv[I2V_1DINV(src_t_i ,src_r_i+1)] \ + + src_r_err * src_t_err *fac_b_1dinv[I2V_1DINV(src_t_i+1,src_r_i+1)]; + + CUSTOMREAL slowness0 = (_1_CR - src_r_err)*(_1_CR - src_t_err)*slowness_1dinv[I2V_1DINV(src_t_i ,src_r_i )] \ + + (_1_CR - src_r_err)* src_t_err *slowness_1dinv[I2V_1DINV(src_t_i+1,src_r_i )] \ + + src_r_err *(_1_CR - src_t_err)*slowness_1dinv[I2V_1DINV(src_t_i ,src_r_i+1)] \ + + src_r_err * src_t_err *slowness_1dinv[I2V_1DINV(src_t_i+1,src_r_i+1)]; + + + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + + int irt = I2V_1DINV(it,ir); + T0v_1dinv[irt] = slowness0 * std::sqrt((_1_CR/a0) * my_square((r_1dinv[ir]-src_r)) + + _1_CR/b0 * my_square((t_1dinv[it]-src_t_dummy))); + + if (isZero(T0v_1dinv[irt])) { + T0r_1dinv[irt] = _0_CR; + T0t_1dinv[irt] = _0_CR; + } else { + T0r_1dinv[irt] = my_square(slowness0) * (_1_CR/a0 * (r_1dinv[ir]-src_r)) / T0v_1dinv[irt]; + T0t_1dinv[irt] = my_square(slowness0) * (_1_CR/b0 * (t_1dinv[it]-src_t_dummy)) / T0v_1dinv[irt]; + } + + if (std::abs((r_1dinv[ir]-src_r)/dr_1dinv) <= _1_CR-0.1 \ + && std::abs((t_1dinv[it]-src_t_dummy)/dt_1dinv) <= _1_CR-0.1) { + tau_1dinv[irt] = TAU_INITIAL_VAL; + is_changed_1dinv[irt] = false; + } else { + tau_1dinv[irt] = TAU_INF_VAL; // upwind scheme, initial tau should be large enough + is_changed_1dinv[irt] = true; + } + tau_old_1dinv[irt] = _0_CR; + } + } +} + + +void OneDInversion::FSM_2d() { + if (myrank==0) + std::cout << "Running 2d eikonal solver..." << std::endl; + + CUSTOMREAL L1_dif =1000000000; + CUSTOMREAL Linf_dif=1000000000; + + int iter = 0; + + while (true) { + + // update tau_old + std::memcpy(tau_old_1dinv, tau_1dinv, sizeof(CUSTOMREAL)*nr_1dinv*nt_1dinv); + + int r_start, r_end; + int t_start, t_end; + int r_dirc, t_dirc; + + // sweep direction + for (int iswp = 0; iswp < 4; iswp++){ + if (iswp == 0){ + r_start = nr_1dinv-1; + r_end = -1; + t_start = nt_1dinv-1; + t_end = -1; + r_dirc = -1; + t_dirc = -1; + } else if (iswp==1){ + r_start = nr_1dinv-1; + r_end = -1; + t_start = 0; + t_end = nt_1dinv; + r_dirc = -1; + t_dirc = 1; + } else if (iswp==2){ + r_start = 0; + r_end = nr_1dinv; + t_start = nt_1dinv-1; + t_end = -1; + r_dirc = 1; + t_dirc = -1; + } else { + r_start = 0; + r_end = nr_1dinv; + t_start = 0; + t_end = nt_1dinv; + r_dirc = 1; + t_dirc = 1; + } + + for (int ir = r_start; ir != r_end; ir += r_dirc) { + for (int it = t_start; it != t_end; it += t_dirc) { + + if (is_changed_1dinv[I2V_1DINV(it,ir)]){ + calculate_stencil(it,ir); + } + } + } + } // end of iswp + + // calculate L1 and Linf error + L1_dif = _0_CR; + Linf_dif= _0_CR; + + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + L1_dif += std::abs(tau_1dinv[ii]-tau_old_1dinv[ii]); + Linf_dif = std::max(Linf_dif, std::abs(tau_1dinv[ii]-tau_old_1dinv[ii])); + } + L1_dif /= nr_1dinv*nt_1dinv; + + + // check convergence + if (std::abs(L1_dif) < TOL_2D_SOLVER && std::abs(Linf_dif) < TOL_2D_SOLVER){ + if (myrank==0) + std::cout << "Eikonal solver converged at iteration " << iter << std::endl; + break; + } else if (iter > MAX_ITER_2D_SOLVER){ + if (myrank==0) + std::cout << "Eikonal solver reached the maximum iteration at iteration " << iter << std::endl; + break; + } else { + if (myrank==0 && if_verbose) + std::cout << "Iteration " << iter << ": L1 dif = " << L1_dif << ", Linf dif = " << Linf_dif << std::endl; + iter++; + } + } // end of wile + + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + T_1dinv[ii] = tau_1dinv[ii]*T0v_1dinv[ii]; + } + +} + + +void OneDInversion::calculate_stencil(const int& it, const int& ir) { + + count_cand = 0; + ii = I2V_1DINV(it,ir); + ii_nr = I2V_1DINV(it,ir-1); + ii_pr = I2V_1DINV(it,ir+1); + ii_nt = I2V_1DINV(it-1,ir); + ii_pt = I2V_1DINV(it+1,ir); + + + // (T0*tau)_r = ar*tau(iix,iiy)+br; (T0*tau)_t = at*tau(iix,iiy)+bt + if (it > 0){ + at1 = T0t_1dinv[ii] + T0v_1dinv[ii]/dt_1dinv; + bt1 = -T0v_1dinv[ii]/dt_1dinv*tau_1dinv[ii_nt]; + } + if (it < nt_1dinv-1){ + at2 = T0t_1dinv[ii] - T0v_1dinv[ii]/dt_1dinv; + bt2 = T0v_1dinv[ii]/dt_1dinv*tau_1dinv[ii_pt]; + } + if (ir > 0){ + ar1 = T0r_1dinv[ii] + T0v_1dinv[ii]/dr_1dinv; + br1 = -T0v_1dinv[ii]/dr_1dinv*tau_1dinv[ii_nr]; + } + if (ir < nr_1dinv-1){ + ar2 = T0r_1dinv[ii] - T0v_1dinv[ii]/dr_1dinv; + br2 = T0v_1dinv[ii]/dr_1dinv*tau_1dinv[ii_pr]; + } + + // start to find candidate solutions + + // first catalog: characteristic travels through sector in 2D volume (4 cases) + for (int i_case = 0; i_case < 4; i_case++){ + // determine discretization of T_t,T_r + switch (i_case) { + case 0: // characteristic travels from -t, -r + if (it == 0 || ir == 0) + continue; + at = at1; bt = bt1; + ar = ar1; br = br1; + break; + case 1: // characteristic travels from -t, +r + if (it == 0 || ir == nr_1dinv-1) + continue; + at = at1; bt = bt1; + ar = ar2; br = br2; + break; + case 2: // characteristic travels from +t, -r + if (it == nt_1dinv-1 || ir == 0) + continue; + at = at2; bt = bt2; + ar = ar1; br = br1; + break; + case 3: // characteristic travels from +t, +r + if (it == nt_1dinv-1 || ir == nr_1dinv-1) + continue; + at = at2; bt = bt2; + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solving the quadratic equation with respect to tau(iip,jjt,kkr) + // that is a*(ar*tau+br)^2 + b*(at*tau+bt)^2 = s^2 + eqn_a = fac_a_1dinv[ii] * std::pow(ar, _2_CR) + fac_b_1dinv[ii] * std::pow(at, _2_CR); + eqn_b = fac_a_1dinv[ii] * _2_CR * ar * br + fac_b_1dinv[ii] * _2_CR * at * bt; + eqn_c = fac_a_1dinv[ii] * std::pow(br, _2_CR) + fac_b_1dinv[ii] * std::pow(bt, _2_CR) - std::pow(slowness_1dinv[ii], _2_CR); + eqn_Delta = std::pow(eqn_b, _2_CR) - _4_CR * eqn_a * eqn_c; + + if (eqn_Delta >= 0){ // one or two real solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = (-eqn_b + std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + case 1: + tmp_tau = (-eqn_b - std::sqrt(eqn_Delta))/(_2_CR*eqn_a); + break; + } + + // check the causality condition: the characteristic passing through (it,ir) is in between used two sides + // characteristic direction is (dr/dt, dtheta/dt, tphi/dt) = (H_p1,H_p2,H_p3), p1 = T_r, p2 = T_t, p3 = T_p + T_r = ar*tmp_tau + br; + T_t = at*tmp_tau + bt; + + charact_r = T_r; + charact_t = T_t; + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -t, -r + if (charact_t >= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 1: //characteristic travels from -t, +r + if (charact_t >= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 2: //characteristic travels from +t, -r + if (charact_t <= 0 && charact_r >= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + case 3: //characteristic travels from +t, +r + if (charact_t <= 0 && charact_r <= 0 && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + } + } + + // second catalog: characteristic travels through lines in 1D volume (4 cases) + // case: 1-2 + // characteristic travels along r-axis, force H_p2, H_p3 = 0, that is, T_t = 0 + // plug the constraint into eikonal equation, we have the equation: a*T_r^2 = s^2 + for (int i_case = 0; i_case < 2; i_case++){ + switch (i_case){ + case 0: //characteristic travels from -r + if (ir == 0){ + continue; + } + ar = ar1; br = br1; + break; + case 1: //characteristic travels from +r + if (ir == nr_1dinv-1){ + continue; + } + ar = ar2; br = br2; + break; + } + + // plug T_t, T_r into eikonal equation, solve the quadratic equation: (ar*tau+br)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(slowness_1dinv[ii],_2_CR)/fac_a_1dinv[ii]) - br)/ar; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(slowness_1dinv[ii],_2_CR)/fac_a_1dinv[ii]) - br)/ar; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 0: //characteristic travels from -r (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * T0v_1dinv[ii] > tau_1dinv[ii_nr] * T0v_1dinv[ii_nr] + && tmp_tau > tau_1dinv[ii_nr]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 1: //characteristic travels from +r + if (tmp_tau * T0v_1dinv[ii] > tau_1dinv[ii_pr] * T0v_1dinv[ii_pr] + && tmp_tau > tau_1dinv[ii_pr]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + + } + + + // case: 3-4 + // characteristic travels along t-axis, force H_p1, H_p3 = 0, that is, T_r = 0; + // plug the constraint into eikonal equation, we have the equation: T_t^2 = s^2 + for (int i_case = 2; i_case < 4; i_case++){ + switch (i_case){ + case 2: //characteristic travels from -t + if (it == 0){ + continue; + } + at = at1; bt = bt1; + break; + case 3: //characteristic travels from +t + if (it == nt_1dinv-1){ + continue; + } + at = at2; bt = bt2; + break; + } + + // plug T_t into eikonal equation, solve the quadratic equation: b*(at*tau+bt)^2 = s^2 + // simply, we have two solutions + for (int i_solution = 0; i_solution < 2; i_solution++){ + // solutions + switch (i_solution){ + case 0: + tmp_tau = ( std::sqrt(std::pow(slowness_1dinv[ii],_2_CR)/fac_b_1dinv[ii]) - bt)/at; + break; + case 1: + tmp_tau = (-std::sqrt(std::pow(slowness_1dinv[ii],_2_CR)/fac_b_1dinv[ii]) - bt)/at; + break; + } + + // check the causality condition: + + is_causality = false; + switch (i_case){ + case 2: //characteristic travels from -t (we can simply compare the traveltime, which is the same as check the direction of characteristic) + if (tmp_tau * T0v_1dinv[ii] > tau_1dinv[ii_nt] * T0v_1dinv[ii_nt] + && tmp_tau > tau_1dinv[ii_nt]/_2_CR && tmp_tau > 0){ // this additional condition ensures the causality near the source + is_causality = true; + } + break; + case 3: //characteristic travels from +t + if (tmp_tau * T0v_1dinv[ii] > tau_1dinv[ii_pt] * T0v_1dinv[ii_pt] + && tmp_tau > tau_1dinv[ii_pt]/_2_CR && tmp_tau > 0){ + is_causality = true; + } + break; + } + + // if satisfying the causility condition, retain it as a canditate solution + if (is_causality) { + canditate[count_cand] = tmp_tau; + count_cand += 1; + } + } + } + + // final, choose the minimum candidate solution as the updated value + for (int i_cand = 0; i_cand < count_cand; i_cand++){ + tau_1dinv[ii] = std::min(tau_1dinv[ii], canditate[i_cand]); + if (tau_1dinv[ii] < 0 ){ + std::cout << "error, tau_loc < 0. ir: " << ir << ", it: " << it << std::endl; + exit(1); + } + } + +} + + +void OneDInversion::calculate_synthetic_traveltime_and_adjoint_source(InputParams& IP, int& i_src) { + + // get the (r,t,p) of the real source + const std::string name_src = IP.get_src_name(i_src); + // CUSTOMREAL src_r = IP.get_src_radius(name_src); + CUSTOMREAL src_lon = IP.get_src_lon( name_src); // in radian + CUSTOMREAL src_lat = IP.get_src_lat( name_src); // in radian + + // rec.adjoint_source = 0 && rec.adjoint_source_density = 0 + IP.initialize_adjoint_source(); + + // loop all data + for (auto it_rec = IP.data_map[name_src].begin(); it_rec != IP.data_map[name_src].end(); ++it_rec) { + for (auto& data: it_rec->second){ + + ///////////////// calculate synthetic traveltime ////////////////// + + const std::string name_rec = data.name_rec; + // get position of the receiver + CUSTOMREAL rec_r = depth2radius(IP.rec_map[name_rec].dep); + CUSTOMREAL rec_lon = IP.rec_map[name_rec].lon*DEG2RAD; // in radian + CUSTOMREAL rec_lat = IP.rec_map[name_rec].lat*DEG2RAD; // in radian + + // calculate epicentral distance + CUSTOMREAL distance =0.0; + Epicentral_distance_sphere(src_lat, src_lon, rec_lat, rec_lon, distance); + + // 2d interporlation, to find the traveltime at (distance, rec_r) on the field of T_1dinv on the mesh meshgrid(t_1dinv, r_1dinv) + CUSTOMREAL traveltime = interpolate_2d_traveltime(distance, rec_r); + data.travel_time = traveltime; + + // for common source differentail arrival time, calculate differential time in addition + if (data.is_rec_pair) { + const std::string name_rec2 = data.name_rec_pair[1]; + CUSTOMREAL rec_r2 = depth2radius(IP.rec_map[name_rec2].dep); + CUSTOMREAL rec_lon2 = IP.rec_map[name_rec2].lon*DEG2RAD; // in radian + CUSTOMREAL rec_lat2 = IP.rec_map[name_rec2].lat*DEG2RAD; // in radian + + // calculate epicentral distance + CUSTOMREAL distance2 =0.0; + Epicentral_distance_sphere(src_lat, src_lon, rec_lat2, rec_lon2, distance2); + + // 2d interporlation, to find the traveltime at (distance, rec_r) on the field of T_1dinv on the mesh meshgrid(t_1dinv, r_1dinv) + CUSTOMREAL traveltime2 = interpolate_2d_traveltime(distance2, rec_r2); + data.cs_dif_travel_time = traveltime - traveltime2; + } + + + /////////////// calculate adjoint source (only consider absolute traveltime for 1d inversion) ///////////////////////// + + + // calculate adjoint source + if (data.is_src_rec){ + CUSTOMREAL syn_time = data.travel_time; + CUSTOMREAL obs_time = data.travel_time_obs; + + // assign local weight + CUSTOMREAL local_weight = _1_CR; + + // evaluate residual_weight_abs (If run_mode == DO_INVERSION, tau_opt always equal 0. But when run_mode == INV_RELOC, we need to consider the change of ortime of earthquakes (swapped receiver)) + CUSTOMREAL local_residual = abs(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + CUSTOMREAL* res_weight = IP.get_residual_weight_abs(); + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + // evaluate distance_weight_abs + CUSTOMREAL local_dis = _0_CR; + Epicentral_distance_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src).lat*DEG2RAD, IP.get_src_point(name_src).lon*DEG2RAD, local_dis); + local_dis *= R_earth; // rad to km + CUSTOMREAL* dis_weight = IP.get_distance_weight_abs(); + + if (local_dis < dis_weight[0]) local_weight *= dis_weight[2]; + else if (local_dis > dis_weight[1]) local_weight *= dis_weight[3]; + else local_weight *= ((local_dis - dis_weight[0])/(dis_weight[1] - dis_weight[0]) * (dis_weight[3] - dis_weight[2]) + dis_weight[2]); + + // assign adjoint source + CUSTOMREAL adjoint_source = IP.get_rec_point(name_rec).adjoint_source + (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight * local_weight; + IP.set_adjoint_source(name_rec, adjoint_source); // set adjoint source to rec_map[name_rec] + + // assign adjoint source density + CUSTOMREAL adjoint_source_density = IP.get_rec_point(name_rec).adjoint_source_density + _1_CR; + IP.set_adjoint_source_density(name_rec, adjoint_source_density); + } + } + } +} + + +CUSTOMREAL OneDInversion::interpolate_2d_traveltime(const CUSTOMREAL& distance, const CUSTOMREAL& r) { + + int r_index = std::floor((r - r_1dinv[0])/dr_1dinv); + int t_index = std::floor((distance - t_1dinv[0])/dt_1dinv); + + // error of discretized source position + CUSTOMREAL r_err = std::min(_1_CR, (r - r_1dinv[r_index])/dr_1dinv); + CUSTOMREAL t_err = std::min(_1_CR, (distance - t_1dinv[t_index])/dt_1dinv); + + // check precision error for floor + if (r_err == _1_CR) { + r_err = _0_CR; + r_err++; + } + if (t_err == _1_CR) { + t_err = _0_CR; + t_err++; + } + + if(t_index < 0 || t_index > nt_1dinv-2 || r_index < 0 || r_index > nr_1dinv-2){ + std::cout << "error, out of range. t_index: " << t_index << ", r_index: " << r_index << std::endl; + exit(1); + } + + // initialize the initial fields + CUSTOMREAL traveltime = (_1_CR - r_err)*(_1_CR - t_err)*T_1dinv[I2V_1DINV(t_index ,r_index )] \ + + (_1_CR - r_err)* t_err *T_1dinv[I2V_1DINV(t_index+1,r_index )] \ + + r_err *(_1_CR - t_err)*T_1dinv[I2V_1DINV(t_index ,r_index+1)] \ + + r_err * t_err *T_1dinv[I2V_1DINV(t_index+1,r_index+1)]; + + return traveltime; +} + + +void OneDInversion::adjoint_solver_2d(InputParams& IP, const int& i_src, const int& adj_type){ + + // initialize adjoint arrays: Tadj_1dinv, is_changed_1dinv, delta_1dinv + initialize_adjoint_array(IP, i_src, adj_type); + + // fast sweeping method for 2d space + FSM_2d_adjoint(adj_type); + +} + + +void OneDInversion::initialize_adjoint_array(InputParams& IP, const int& i_src, const int& adj_type) { + // adj_type: 0, adjoint_source; 1, adjoint_source_density + + // initialize adjoint field + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + tau_1dinv[I2V_1DINV(it,ir)] = _0_CR; + } + } + + // initialize is_changed_1dinv + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + is_changed_1dinv[I2V_1DINV(it,ir)] = true; + } + } + for (int ir = 0; ir < nr_1dinv; ir++){ // boundary are false + is_changed_1dinv[I2V_1DINV(0,ir)] = false; + is_changed_1dinv[I2V_1DINV(nt_1dinv-1,ir)] = false; + } + for (int it = 0; it < nt_1dinv; it++){ + is_changed_1dinv[I2V_1DINV(it,0)] = false; + is_changed_1dinv[I2V_1DINV(it,nr_1dinv-1)] = false; + } + + // initialize delta_1dinv + for (int ir = 0; ir < nr_1dinv; ir++){ + for (int it = 0; it < nt_1dinv; it++){ + delta_1dinv[I2V_1DINV(it,ir)] = _0_CR; + } + } + + // loop all receivers to assign adjoint source + + // get the (r,t,p) of the real source + const std::string name_src = IP.get_src_name(i_src); + // CUSTOMREAL src_r = IP.get_src_radius(name_src); + CUSTOMREAL src_lon = IP.get_src_lon( name_src); // in radian + CUSTOMREAL src_lat = IP.get_src_lat( name_src); // in radian + + // loop all receivers + for (int irec = 0; irec < IP.n_rec_this_sim_group; irec++) { + + // get receiver information + std::string name_rec = IP.get_rec_name(irec); + CUSTOMREAL adjoint_source; + if (adj_type == 0){ + adjoint_source = IP.rec_map[name_rec].adjoint_source; + } else if (adj_type == 1) { + adjoint_source = IP.rec_map[name_rec].adjoint_source_density; + } else { + std::cout << "error, adj_type is not defined." << std::endl; + exit(1); + } + + CUSTOMREAL rec_r = depth2radius(IP.rec_map[name_rec].dep); + CUSTOMREAL rec_lon = IP.rec_map[name_rec].lon*DEG2RAD; // in radian + CUSTOMREAL rec_lat = IP.rec_map[name_rec].lat*DEG2RAD; // in radian + + if (adjoint_source == 0){ + continue; + } + + // descretize receiver position + CUSTOMREAL distance =0.0; + Epicentral_distance_sphere(src_lat, src_lon, rec_lat, rec_lon, distance); + int r_index = std::floor((rec_r - r_1dinv[0])/dr_1dinv); + int t_index = std::floor((distance - t_1dinv[0])/dt_1dinv); + + // error of discretized source position + CUSTOMREAL r_err = std::min(_1_CR, (rec_r - r_1dinv[r_index])/dr_1dinv); + CUSTOMREAL t_err = std::min(_1_CR, (distance - t_1dinv[t_index])/dt_1dinv); + + // check precision error for floor + if (r_err == _1_CR) { + r_err = _0_CR; + r_err++; + } + if (t_err == _1_CR) { + t_err = _0_CR; + t_err++; + } + + if(t_index < 0 || t_index > nt_1dinv-2 || r_index < 0 || r_index > nr_1dinv-2){ + std::cout << "error, out of range. t_index: " << t_index << ", r_index: " << r_index << std::endl; + exit(1); + } + + // assign to delta function + delta_1dinv[I2V_1DINV(t_index ,r_index )] += adjoint_source*(1.0-r_err)*(1.0-t_err)/(dr_1dinv*dt_1dinv*rec_r); + delta_1dinv[I2V_1DINV(t_index+1,r_index )] += adjoint_source*(1.0-r_err)* t_err /(dr_1dinv*dt_1dinv*rec_r); + delta_1dinv[I2V_1DINV(t_index ,r_index+1)] += adjoint_source* r_err *(1.0-t_err)/(dr_1dinv*dt_1dinv*rec_r); + delta_1dinv[I2V_1DINV(t_index+1,r_index+1)] += adjoint_source* r_err * t_err /(dr_1dinv*dt_1dinv*rec_r); + } + +} + + +void OneDInversion::FSM_2d_adjoint(const int& adj_type) { + if (myrank==0) + std::cout << "Running 2d adjoint solver..." << std::endl; + + CUSTOMREAL L1_dif =1000000000; + CUSTOMREAL Linf_dif=1000000000; + + int iter = 0; + + while (true) { + + // update tau_old + std::memcpy(tau_old_1dinv, tau_1dinv, sizeof(CUSTOMREAL)*nr_1dinv*nt_1dinv); + + int r_start, r_end; + int t_start, t_end; + int r_dirc, t_dirc; + + // sweep direction + for (int iswp = 0; iswp < 4; iswp++){ + if (iswp == 0){ + r_start = nr_1dinv-1; + r_end = -1; + t_start = nt_1dinv-1; + t_end = -1; + r_dirc = -1; + t_dirc = -1; + } else if (iswp==1){ + r_start = nr_1dinv-1; + r_end = -1; + t_start = 0; + t_end = nt_1dinv; + r_dirc = -1; + t_dirc = 1; + } else if (iswp==2){ + r_start = 0; + r_end = nr_1dinv; + t_start = nt_1dinv-1; + t_end = -1; + r_dirc = 1; + t_dirc = -1; + } else { + r_start = 0; + r_end = nr_1dinv; + t_start = 0; + t_end = nt_1dinv; + r_dirc = 1; + t_dirc = 1; + } + + for (int ir = r_start; ir != r_end; ir += r_dirc) { + for (int it = t_start; it != t_end; it += t_dirc) { + + if (is_changed_1dinv[I2V_1DINV(it,ir)]) + calculate_stencil_adj(it,ir); + + } + } + } // end of iswp + + // calculate L1 and Linf error + L1_dif = _0_CR; + Linf_dif= _0_CR; + + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + L1_dif += std::abs(tau_1dinv[ii]-tau_old_1dinv[ii]); + Linf_dif = std::max(Linf_dif, std::abs(tau_1dinv[ii]-tau_old_1dinv[ii])); + } + L1_dif /= nr_1dinv*nt_1dinv; + + + // check convergence + if (std::abs(L1_dif) < TOL_2D_SOLVER && std::abs(Linf_dif) < TOL_2D_SOLVER){ + if (myrank==0) + std::cout << "Adjoint solver converged at iteration " << iter << std::endl; + break; + } else if (iter > MAX_ITER_2D_SOLVER){ + if (myrank==0) + std::cout << "Adjoint solver reached the maximum iteration at Iteration " << iter << std::endl; + break; + } else { + if (myrank==0 && if_verbose) + std::cout << "Iteration " << iter << ": L1 dif = " << L1_dif << ", Linf dif = " << Linf_dif << std::endl; + iter++; + } + } // end of wile + + if (adj_type == 0){ + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + Tadj_1dinv[ii] = tau_1dinv[ii]; + } + } else if (adj_type == 1){ + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + Tadj_density_1dinv[ii] = tau_1dinv[ii]; + } + } else { + std::cout << "error, adj_type is not defined." << std::endl; + exit(1); + } +} + + +void OneDInversion::calculate_stencil_adj(const int& it, const int& ir) { + // function \nabla \cdot ( P (-\nabla T) M ) = \sum delta * adj + // matrix: + // | a 0 | + // | 0 b | + + // related coefficients + CUSTOMREAL a1 = - (T_1dinv[I2V_1DINV(it ,ir )] - T_1dinv[I2V_1DINV(it ,ir-1)]) / dr_1dinv * (fac_a_1dinv[I2V_1DINV(it ,ir )] + fac_a_1dinv[I2V_1DINV(it ,ir-1)])/2.0; + CUSTOMREAL a1m = (a1 - std::abs(a1))/2.0; + CUSTOMREAL a1p = (a1 + std::abs(a1))/2.0; + + CUSTOMREAL a2 = - (T_1dinv[I2V_1DINV(it ,ir+1)] - T_1dinv[I2V_1DINV(it ,ir )]) / dr_1dinv * (fac_a_1dinv[I2V_1DINV(it ,ir )] + fac_a_1dinv[I2V_1DINV(it ,ir+1)])/2.0; + CUSTOMREAL a2m = (a2 - std::abs(a2))/2.0; + CUSTOMREAL a2p = (a2 + std::abs(a2))/2.0; + + CUSTOMREAL b1 = - (T_1dinv[I2V_1DINV(it ,ir )] - T_1dinv[I2V_1DINV(it-1,ir )]) / dt_1dinv * (fac_b_1dinv[I2V_1DINV(it ,ir )] + fac_b_1dinv[I2V_1DINV(it-1,ir )])/2.0; + CUSTOMREAL b1m = (b1 - std::abs(b1))/2.0; + CUSTOMREAL b1p = (b1 + std::abs(b1))/2.0; + + CUSTOMREAL b2 = - (T_1dinv[I2V_1DINV(it+1,ir )] - T_1dinv[I2V_1DINV(it ,ir )]) / dt_1dinv * (fac_b_1dinv[I2V_1DINV(it+1,ir )] + fac_b_1dinv[I2V_1DINV(it ,ir )])/2.0; + CUSTOMREAL b2m = (b2 - std::abs(b2))/2.0; + CUSTOMREAL b2p = (b2 + std::abs(b2))/2.0; + + CUSTOMREAL coe = (a2p - a1m)/dr_1dinv + (b2p - b1m)/dt_1dinv; + + if (isZero(coe)){ + tau_1dinv[I2V_1DINV(it,ir)] = 0.0; + } else { + // Hamiltonian + CUSTOMREAL Hadj = (a1p * tau_1dinv[I2V_1DINV(it,ir-1)] - a2m * tau_1dinv[I2V_1DINV(it,ir+1)])/dr_1dinv + + (b1p * tau_1dinv[I2V_1DINV(it-1,ir)] - b2m * tau_1dinv[I2V_1DINV(it+1,ir)])/dt_1dinv; + + tau_1dinv[I2V_1DINV(it,ir)] = (delta_1dinv[I2V_1DINV(it,ir)] + Hadj) / coe; + } +} + + +void OneDInversion::initialize_kernel_1d() { + for (int ir=0; ir= IP.get_max_iter_inv() - 2 || i_inv == 0)) { + // // store kernel only in the first src datafile + // io.change_group_name_for_model(); + + // write_Ks_1dinv(io, i_inv); + // } + + // update kernel by rank 0 + if (id_sim==0){ + // kernel processing (multi-grid parameterization, density normalization) + kernel_processing_1dinv(grid); + + // model_update + model_update_1dinv(i_inv); + + // write slowness + if(IP.get_if_output_in_process() || i_inv >= IP.get_max_iter_inv() - 2 || i_inv == 0){ + write_vel_1dinv(io, i_inv); + } + + } + + // broadcast new slowness + broadcast_cr_inter_sim(slowness_1dinv, nr_1dinv*nt_1dinv, 0); + + // generate 3d model from the 1d model + generate_3d_model(grid); + +} + + +void OneDInversion::kernel_processing_1dinv(Grid& grid) { + + // density normalization + density_normalization_1dinv(); + + // multi-grid parameterization + multi_grid_parameterization_1dinv(grid); + +} + + +void OneDInversion::density_normalization_1dinv() { + // kernel density normalization + for (int ir=0; irr.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + ratio_r = calc_ratio_between(r_1dinv[ir], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + // continue if r is out of the inversion grid + if (ratio_r < _0_CR) continue; + + CUSTOMREAL dtdr = dt_1dinv * r_1dinv[ir] * dr_1dinv; + + grid.Ks_inv_loc[I2V_INV_KNL(ref_idx_p,ref_idx_t,kdr )] += (_1_CR-ratio_r) * Ks_over_Kden_1dinv[ir] * dtdr; + grid.Ks_inv_loc[I2V_INV_KNL(ref_idx_p,ref_idx_t,kdr+1)] += (ratio_r) * Ks_over_Kden_1dinv[ir] * dtdr; + + } + + // part 2, project Ks_inv_loc back to r_1dinv + for (int ir = 0; ir < nr_1dinv; ir++) { + ratio_r = -_1_CR; + for (int ii_invr = 0; ii_invr < n_inv_K_loc-1; ii_invr++){ + // increasing or decreasing order + if (in_between(r_1dinv[ir], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)])) { + kdr = ii_invr; + ratio_r = calc_ratio_between(r_1dinv[ir], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr,i_grid)], grid.inv_grid->r.arr[I2V_INV_GRIDS_1DK(ii_invr+1,i_grid)]); + break; + } + } + // continue if r is out of the inversion grid + if (ratio_r < _0_CR) continue; + + CUSTOMREAL dtdr = dt_1dinv * r_1dinv[ir] * dr_1dinv; + + Ks_multigrid_1dinv[ir] += (_1_CR-ratio_r) * grid.Ks_inv_loc[I2V_INV_KNL(ref_idx_p,ref_idx_t,kdr )] * dtdr; + Ks_multigrid_1dinv[ir] += (ratio_r) * grid.Ks_inv_loc[I2V_INV_KNL(ref_idx_p,ref_idx_t,kdr+1)] * dtdr; + } + } + + // normalize Ks_miltigrid + CUSTOMREAL Linf_Ks = _0_CR; + for(int ir = 0; ir < nr_1dinv; ir++) { + Linf_Ks = std::max(Linf_Ks, std::abs(Ks_multigrid_1dinv[ir])); + } + if(isZero(Linf_Ks)){ + std::cout << "ERROR!!! max value of kernel = 0. Please check data and input parameter" << std::endl; + exit(1); + } + for(int ir = 0; ir < nr_1dinv; ir++) { + Ks_multigrid_1dinv[ir] /= Linf_Ks; + } +} + + +void OneDInversion::model_update_1dinv(const int& i_inv ) { + + // determine step size + determine_step_size_1dinv(i_inv); + + // update model + for (int it=0; it= old_v_obj) { + step_length_init = std::max((CUSTOMREAL)0.0001, step_length_init*step_length_decay); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The obj keep increases, from " << old_v_obj << " to " << v_obj + << ", the step length decreases from " << step_length_init/step_length_decay + << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "At the first iteration, the step length is " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else if (step_method == GRADIENT_DEFINED){ + // Option 2: we modulate the step length according to the angle between the previous and current gradient directions. + // If the angle is less than XX degree, which means the model update direction is successive, we should enlarge the step size + // Otherwise, the step length should decrease + if(i_inv != 0){ + // calculate the angle between the previous and current gradient directions + CUSTOMREAL angle = 0; + for (int ir = 0; ir < nr_1dinv; ir++){ + angle += Ks_multigrid_1dinv[ir] * Ks_multigrid_previous_1dinv[ir]; + } + angle = std::acos(angle/(norm_1dinv(Ks_multigrid_1dinv, nr_1dinv)*norm_1dinv(Ks_multigrid_previous_1dinv, nr_1dinv)))*RAD2DEG; + + if (angle > step_length_gradient_angle){ + CUSTOMREAL old_step_length = step_length_init; + step_length_init = std::max((CUSTOMREAL)0.0001, step_length_init * step_length_down); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The angle between two update darections is " << angle + << ". Because the angle is greater than " << step_length_gradient_angle << " degree, the step length decreases from " + << old_step_length << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } else if (angle <= step_length_gradient_angle) { + CUSTOMREAL old_step_length = step_length_init; + step_length_init = std::min((CUSTOMREAL)0.02, step_length_init * step_length_up); + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "The angle between two update darections is " << angle + << ". Because the angle is less than " << step_length_gradient_angle << " degree, the step length increases from " + << old_step_length << " to " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + if(myrank == 0 && id_sim == 0){ + std::cout << std::endl; + std::cout << "At the first iteration, the step length is " << step_length_init << std::endl; + std::cout << std::endl; + } + } + } else { + std::cout << std::endl; + std::cout << "No supported method for step size change, step keep the same: " << step_length_init << std::endl; + std::cout << std::endl; + } +} + + +CUSTOMREAL OneDInversion::norm_1dinv(const CUSTOMREAL* vec, const int& n) { + CUSTOMREAL norm = 0.0; + for (int i = 0; i < n; i++){ + norm += vec[i]*vec[i]; + } + norm = std::sqrt(norm); + + return norm; +} + + +void OneDInversion::generate_3d_model(Grid& grid){ + + // 1. ---------------- load slowness ---------------- + CUSTOMREAL *tmp_slowness; + tmp_slowness = allocateMemory(nr_1dinv, 4000); + for (int ir = 0; ir < nr_1dinv; ir++){ + tmp_slowness[ir] = slowness_1dinv[I2V_1DINV(0,ir)]; + } + // 1d interpolation + // interpolate slowness from (r_1dinv, slowness_1dinv) to (grid.r_loc_1d, *) + CUSTOMREAL *model_1d_output; + model_1d_output = allocateMemory(loc_K, 4000); + linear_interpolation_1d_sorted(r_1dinv, tmp_slowness, nr_1dinv, grid.r_loc_1d, model_1d_output, loc_K); + + // 1d model to 3d model + for (int k = 0; k < loc_K; k++) { + for (int j = 0; j < loc_J; j++) { + for (int i = 0; i < loc_I; i++) { + grid.fun_loc[I2V(i,j,k)] = model_1d_output[k]; + } + } + } +} + +// ######################################################## +// ######## HDF5 output functions ####### +// ######################################################## + +void OneDInversion::write_T_1dinv(IO_utils& io, const std::string& name_src, const int& i_inv) { + std::string field_name = "time_field_1dinv_" + name_src + "_inv_" + int2string_zero_fill(i_inv); + io.write_1dinv_field(T_1dinv, r_1dinv, t_1dinv, nr_1dinv, nt_1dinv, field_name); +} + + +void OneDInversion::write_Tadj_1dinv(IO_utils& io, const std::string& name_src, const int& i_inv) { + std::string field_name = "adjoint_field_1dinv_" + name_src + "_inv_" + int2string_zero_fill(i_inv); + io.write_1dinv_field(Tadj_1dinv, r_1dinv, t_1dinv, nr_1dinv, nt_1dinv, field_name); +} + + +void OneDInversion::write_vel_1dinv(IO_utils& io, const int& i_inv) { + std::string field_name = "vel_1dinv_inv_" + int2string_zero_fill(i_inv); + CUSTOMREAL *vel_1dinv; + vel_1dinv = allocateMemory(nr_1dinv*nt_1dinv, 4000); + for (int ii = 0; ii < nr_1dinv*nt_1dinv; ii++){ + vel_1dinv[ii] = _1_CR/slowness_1dinv[ii]; + } + io.write_1dinv_field(vel_1dinv, r_1dinv, t_1dinv, nr_1dinv, nt_1dinv, field_name); + delete[] vel_1dinv; +} + diff --git a/src/receiver.cpp b/src/receiver.cpp new file mode 100644 index 0000000..3d5df5a --- /dev/null +++ b/src/receiver.cpp @@ -0,0 +1,1579 @@ +#include "receiver.h" + + +Receiver::Receiver() { +} + + +Receiver::~Receiver() { +} + +void Receiver::interpolate_and_store_arrival_times_at_rec_position(InputParams& IP, Grid& grid, const std::string& name_sim_src) { + if(subdom_main){ + + int mykey_send=9999; + int mykey_end=9998; + int key = 0; + + // share the traveltime values on the corner points of the subdomains for interpolation + // this is not necessary for sweeping (as the stencil is closs shape) + grid.send_recev_boundary_data(grid.T_loc); + grid.send_recev_boundary_data_kosumi(grid.T_loc); + + if (proc_store_srcrec){ + // routine for processes which have the source and receiver data + + // calculate the travel time of the receiver by interpolation + for (auto it_rec = IP.data_map[name_sim_src].begin(); it_rec != IP.data_map[name_sim_src].end(); ++it_rec) { + for (auto& data: it_rec->second){ + + if (data.is_src_rec){ // absolute traveltime + // send receivr name as a starting signal for interpolation + + // send dummy integer with key + broadcast_i_single(mykey_send, 0); + broadcast_str(data.name_rec, 0); + + // store travel time on single receiver and double receivers (what is double receivers? by CHEN Jing) + // store travel time from name_sim_src(src_name) to it_rec->first(rec_name) + data.travel_time = interpolate_travel_time(grid, IP, name_sim_src, it_rec->first); + } else if (data.is_rec_pair) { + // store travel time from name_sim_src(src_name) to rec1_name and rec2_name + // calculate travel times for two receivers + broadcast_i_single(mykey_send, 0); + broadcast_str(data.name_rec_pair[0], 0); + CUSTOMREAL travel_time = interpolate_travel_time(grid, IP, name_sim_src, data.name_rec_pair[0]); + + broadcast_i_single(mykey_send, 0); + broadcast_str(data.name_rec_pair[1], 0); + CUSTOMREAL travel_time_2 = interpolate_travel_time(grid, IP, name_sim_src, data.name_rec_pair[1]); + + // Because name_sim_src = data.name_src; it_rec->first = name_rec = name_rec_pair[0] + // Thus data.travel_time is travel_time + data.travel_time = travel_time; + + // calculate and store travel time difference + data.cs_dif_travel_time = travel_time - travel_time_2; + } else if (data.is_src_pair) { + // store travel time from name_sim_src(src1_name) to it_rec->first(rec_name) + broadcast_i_single(mykey_send, 0); + broadcast_str(data.name_rec, 0); + data.travel_time = interpolate_travel_time(grid, IP, name_sim_src, it_rec->first); + + } else { + std::cout << "error type of data" << std::endl; + } + } + } + + // send a endind signal to the processes which do not have the source receiver data + broadcast_i_single(mykey_end, 0); + + } else { + // routine for processes which do not have the source and receiver data + + // waiting the communication from the proc_store_srcrec + while (true) { + + // receive dummy integer + broadcast_i_single(key, 0); + + // check the tag + if (key == mykey_send) { + std::string name_rec; + broadcast_str(name_rec, 0); + + CUSTOMREAL dummy_time = interpolate_travel_time(grid, IP, name_sim_src, name_rec); + (void) dummy_time; // avoid compiler warning + + } else if (key == mykey_end) { + // receive dummy integer + break; + } else { + std::cout << "error in the tag" << std::endl; + } + + } + } + } // end subdomain + + synchronize_all(); +} + + +void Receiver::calculate_adjoint_source(InputParams& IP, const std::string& name_sim_src) { + + // #TODO: run this function only by proc_store_srcrec + if (proc_store_srcrec) { + + // rec.adjoint_source = 0 && rec.adjoint_source_density = 0 + IP.initialize_adjoint_source(); + + // loop all data related to this source MNMN: use reference(auto&) to avoid copy + for (auto it_src = IP.data_map[name_sim_src].begin(); it_src != IP.data_map[name_sim_src].end(); ++it_src) { + bool is_tele = IP.src_map[name_sim_src].is_out_of_region; + + for (auto& data: it_src->second){ + // + // absolute traveltime + // + if (data.is_src_rec){ + if (!IP.get_use_abs()){ // if we do not use abs data, ignore to consider the total obj and adjoint source + continue; + } + + + std::string name_src = data.name_src; + std::string name_rec = data.name_rec; + CUSTOMREAL syn_time = data.travel_time; + CUSTOMREAL obs_time = data.travel_time_obs; + + // assign local weight + CUSTOMREAL local_weight = _1_CR; + + // evaluate residual_weight_abs (If run_mode == DO_INVERSION, tau_opt always equal 0. But when run_mode == INV_RELOC, we need to consider the change of ortime of earthquakes (swapped receiver)) + CUSTOMREAL local_residual = abs(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + CUSTOMREAL* res_weight = IP.get_residual_weight_abs(); + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + + // evaluate distance_weight_abs + CUSTOMREAL local_dis = _0_CR; + Epicentral_distance_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src).lat*DEG2RAD, IP.get_src_point(name_src).lon*DEG2RAD, local_dis); + local_dis *= R_earth; // rad to km + CUSTOMREAL* dis_weight = IP.get_distance_weight_abs(); + + if (local_dis < dis_weight[0]) local_weight *= dis_weight[2]; + else if (local_dis > dis_weight[1]) local_weight *= dis_weight[3]; + else local_weight *= ((local_dis - dis_weight[0])/(dis_weight[1] - dis_weight[0]) * (dis_weight[3] - dis_weight[2]) + dis_weight[2]); + + // assign adjoint source + CUSTOMREAL adjoint_source = IP.get_rec_point(name_rec).adjoint_source + (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight * local_weight; + IP.set_adjoint_source(name_rec, adjoint_source); // set adjoint source to rec_map[name_rec] + + // assign adjoint source density + CUSTOMREAL adjoint_source_density = IP.get_rec_point(name_rec).adjoint_source_density + _1_CR; + IP.set_adjoint_source_density(name_rec, adjoint_source_density); + + // + // common receiver differential traveltime && we use this data + // + } else if (data.is_src_pair) { + if (!((IP.get_use_cr() && !IP.get_is_srcrec_swap()) || + (IP.get_use_cs() && IP.get_is_srcrec_swap()))) + continue; // if we do not use this data (cr + not swap) or (cs + swap) or (cs + tele), ignore to consider the adjoint source + + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + std::string name_rec = data.name_rec; + + CUSTOMREAL syn_dif_time = data.cr_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cr_dif_travel_time_obs; + + // assign local weight + CUSTOMREAL local_weight = _1_CR; + + // evaluate residual_weight_abs + CUSTOMREAL local_residual = abs(syn_dif_time - obs_dif_time); + CUSTOMREAL* res_weight; + if (IP.get_is_srcrec_swap()) res_weight = IP.get_residual_weight_cs(); + else res_weight = IP.get_residual_weight_cr(); + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + + // evaluate distance_weight_abs + CUSTOMREAL local_azi1 = _0_CR; + Azimuth_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src1).lat*DEG2RAD, IP.get_src_point(name_src1).lon*DEG2RAD, local_azi1); + CUSTOMREAL local_azi2 = _0_CR; + Azimuth_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src2).lat*DEG2RAD, IP.get_src_point(name_src2).lon*DEG2RAD, local_azi2); + CUSTOMREAL local_azi = abs(local_azi1 - local_azi2)*RAD2DEG; + if(local_azi > 180.0) local_azi = 360.0 - local_azi; + + + CUSTOMREAL* azi_weight; + if (IP.get_is_srcrec_swap()) azi_weight = IP.get_azimuthal_weight_cs(); + else azi_weight = IP.get_azimuthal_weight_cr(); + + if (local_azi < azi_weight[0]) local_weight *= azi_weight[2]; + else if (local_azi > azi_weight[1]) local_weight *= azi_weight[3]; + else local_weight *= ((local_azi - azi_weight[0])/(azi_weight[1] - azi_weight[0]) * (azi_weight[3] - azi_weight[2]) + azi_weight[2]); + + + // assign adjoint source + CUSTOMREAL adjoint_source = IP.get_rec_point(name_rec).adjoint_source + (syn_dif_time - obs_dif_time) * data.weight * local_weight; + IP.set_adjoint_source(name_rec, adjoint_source); + + // assign adjoint source density + CUSTOMREAL adjoint_source_density = IP.get_rec_point(name_rec).adjoint_source_density + _1_CR; + IP.set_adjoint_source_density(name_rec, adjoint_source_density); + + + // DEGUG: error check + if (name_sim_src == name_src1){ + continue; + } else if (name_sim_src == name_src2) { // after modification, this case does not occur. since name_sim_src = data.name_src = data.name_src_pair[0] + // thus, this part indicate an error. + std::cout << "cs_dif data strcuture error occur. name_sim_src: " << name_sim_src + << ", data.name_src: " << data.name_src + << ", data.name_src_pair[0]: " << data.name_src_pair[0] + << std::endl; + } else { + std::cout << "error match of data in function: calculate_adjoint_source() " << std::endl; + } + + // + // common source differential traveltime + // + } else if (data.is_rec_pair) { + if (!((IP.get_use_cs() && !IP.get_is_srcrec_swap()) || + (IP.get_use_cr() && IP.get_is_srcrec_swap()) || + (IP.get_use_cs() && is_tele ))) + continue; // if we do not use this data (cs + not swap) or (cr + swap), ignore to consider the total obj and adjoint source + + std::string name_src = data.name_src; + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + CUSTOMREAL syn_dif_time = data.cs_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cs_dif_travel_time_obs; + + if(is_tele){ // station correction for teleseismic data + syn_dif_time = syn_dif_time + IP.rec_map[name_rec1].sta_correct - IP.rec_map[name_rec2].sta_correct; + } + + // assign local weight + CUSTOMREAL local_weight = _1_CR; + + // evaluate residual_weight_abs (see the remark in absolute traveltime data for considering tau_opt here) + CUSTOMREAL local_residual = abs(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + CUSTOMREAL* res_weight; + if (IP.get_is_srcrec_swap() && !is_tele) res_weight = IP.get_residual_weight_cr(); + else res_weight = IP.get_residual_weight_cs(); + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + + // evaluate distance_weight_abs + CUSTOMREAL local_azi1 = _0_CR; + Azimuth_sphere(IP.get_rec_point(name_rec1).lat*DEG2RAD, IP.get_rec_point(name_rec1).lon*DEG2RAD, IP.get_src_point(name_src).lat*DEG2RAD, IP.get_src_point(name_src).lon*DEG2RAD, local_azi1); + CUSTOMREAL local_azi2 = _0_CR; + Azimuth_sphere(IP.get_rec_point(name_rec2).lat*DEG2RAD, IP.get_rec_point(name_rec2).lon*DEG2RAD, IP.get_src_point(name_src).lat*DEG2RAD, IP.get_src_point(name_src).lon*DEG2RAD, local_azi2); + CUSTOMREAL local_azi = abs(local_azi1 - local_azi2)*RAD2DEG; + if(local_azi > 180.0) local_azi = 360.0 - local_azi; + + + CUSTOMREAL* azi_weight; + if (IP.get_is_srcrec_swap() && !is_tele) azi_weight = IP.get_azimuthal_weight_cr(); + else azi_weight = IP.get_azimuthal_weight_cs(); + + if (local_azi < azi_weight[0]) local_weight *= azi_weight[2]; + else if (local_azi > azi_weight[1]) local_weight *= azi_weight[3]; + else local_weight *= ((local_azi - azi_weight[0])/(azi_weight[1] - azi_weight[0]) * (azi_weight[3] - azi_weight[2]) + azi_weight[2]); + + + // assign adjoint source + CUSTOMREAL adjoint_source; + adjoint_source = IP.get_rec_point(name_rec1).adjoint_source + (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight * local_weight; + IP.set_adjoint_source(name_rec1, adjoint_source); + + adjoint_source = IP.get_rec_point(name_rec2).adjoint_source - (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight * local_weight; + IP.set_adjoint_source(name_rec2, adjoint_source); + + // assign adjoint source density + CUSTOMREAL adjoint_source_density; + adjoint_source_density = IP.get_rec_point(name_rec1).adjoint_source_density + _1_CR; + IP.set_adjoint_source_density(name_rec1, adjoint_source_density); + + adjoint_source_density = IP.get_rec_point(name_rec2).adjoint_source_density + _1_CR; + IP.set_adjoint_source_density(name_rec2, adjoint_source_density); + } + + } // end of loop over data + } // end loop receivers + + } // end proc_store_srcrec + + synchronize_all(); +} + + +std::vector Receiver:: calculate_obj_and_residual(InputParams& IP) { + + CUSTOMREAL obj = 0.0; + CUSTOMREAL obj_abs = 0.0; + CUSTOMREAL obj_cs_dif = 0.0; + CUSTOMREAL obj_cr_dif = 0.0; + CUSTOMREAL obj_tele = 0.0; + CUSTOMREAL res = 0.0; + CUSTOMREAL res_sq = 0.0; + CUSTOMREAL res_abs = 0.0; + CUSTOMREAL res_abs_sq = 0.0; + CUSTOMREAL res_cs_dif = 0.0; + CUSTOMREAL res_cs_dif_sq = 0.0; + CUSTOMREAL res_cr_dif = 0.0; + CUSTOMREAL res_cr_dif_sq = 0.0; + CUSTOMREAL res_tele = 0.0; + CUSTOMREAL res_tele_sq = 0.0; + + std::vector obj_residual; + + if (proc_store_srcrec) { + + for (int i_src = 0; i_src < (int)IP.src_id2name.size(); i_src++){ + + const std::string name_sim_src = IP.src_id2name[i_src]; + + // loop all data related to this source MNMN: use reference(auto&) to avoid copy + for (auto it_src = IP.data_map[name_sim_src].begin(); it_src != IP.data_map[name_sim_src].end(); ++it_src) { + for (auto& data: it_src->second){ + + + if (data.dual_data) continue; // dual data is not used for calculating obj and residual + + // + // absolute traveltime + // + if (data.is_src_rec){ + + // error check (data.name_src_pair must be equal to name_sim1 and name_sim2) + if (data.name_src != name_sim_src) continue; + + std::string name_src = data.name_src; + std::string name_rec = data.name_rec; + CUSTOMREAL syn_time = data.travel_time; + CUSTOMREAL obs_time = data.travel_time_obs; + + bool is_tele = (IP.get_src_point(name_src).is_out_of_region || IP.get_rec_point(name_rec).is_out_of_region); + if (is_tele){ + syn_time = syn_time + IP.rec_map[name_rec].sta_correct; // station correction for teleseismic data + } + + // contribute misfit of specific type of data + res += 1.0 * (syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + res_sq += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + + if (is_tele){ + obj_tele += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight; + res_tele += 1.0 * (syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + res_tele_sq += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + + if(!IP.get_use_abs()) + continue; // if we do not use abs data, ignore to consider the total obj + obj += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight; + } else{ + obj_abs += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight; + res_abs += 1.0 * (syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + res_abs_sq += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + + if (!IP.get_use_abs()) + continue; // if we do not use abs data, ignore to consider the total obj + obj += 1.0 * my_square(syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight; + } + + + + } else if (data.is_src_pair) { + + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + std::string name_rec = data.name_rec; + + // error check (data.name_src_pair must be equal to name_sim1 and name_sim2) + if (name_sim_src != name_src1 && name_sim_src != name_src2) continue; + + CUSTOMREAL syn_dif_time = data.cr_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cr_dif_travel_time_obs; + + bool is_tele = (IP.get_src_point(name_src1).is_out_of_region || \ + IP.get_src_point(name_src2).is_out_of_region || \ + IP.get_rec_point(name_rec).is_out_of_region); + + // contribute misfit of specific type of data + res += 1.0 * (syn_dif_time - obs_dif_time); + res_sq += 1.0 * my_square(syn_dif_time - obs_dif_time); + + if (is_tele){ + obj_tele += 1.0 * my_square(syn_dif_time - obs_dif_time)*data.weight; + res_tele += 1.0 * (syn_dif_time - obs_dif_time); + res_tele_sq += 1.0 * my_square(syn_dif_time - obs_dif_time); + + if(!IP.get_use_cr()) + continue; // if we do not use cr data, ignore to consider the total obj + obj += 1.0 * my_square(syn_dif_time - obs_dif_time)*data.weight; + } else{ + obj_cr_dif += 1.0 * my_square(syn_dif_time - obs_dif_time)*data.weight; + res_cr_dif += 1.0 * (syn_dif_time - obs_dif_time); + res_cr_dif_sq += 1.0 * my_square(syn_dif_time - obs_dif_time); + + if (!((IP.get_use_cr() && !IP.get_is_srcrec_swap()) || (IP.get_use_cs() && IP.get_is_srcrec_swap()))) + continue; // if we do not use this data (cr + not swap) or (cs + swap), ignore to consider the total obj and adjoint source + obj += 1.0 * my_square(syn_dif_time - obs_dif_time)*data.weight; + } + + } else if (data.is_rec_pair) { + + std::string name_src = data.name_src; + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + CUSTOMREAL syn_dif_time = data.cs_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cs_dif_travel_time_obs; + + bool is_tele = (IP.get_src_point(name_src).is_out_of_region || \ + IP.get_rec_point(name_rec1).is_out_of_region || \ + IP.get_rec_point(name_rec2).is_out_of_region); + if(is_tele){ + syn_dif_time = syn_dif_time + IP.rec_map[name_rec1].sta_correct - IP.rec_map[name_rec2].sta_correct; // station correction for teleseismic data + } + + // contribute misfit of specific type of data + res += 1.0 * (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + res_sq += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + if (is_tele){ + obj_tele += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt)*data.weight; + res_tele += 1.0 * (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + res_tele_sq += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + if(!IP.get_use_cs()) + continue; // if we do not use cs data, ignore to consider the total obj + obj += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight; + + } else{ + obj_cs_dif += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt)*data.weight; + res_cs_dif += 1.0 * (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + res_cs_dif_sq += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + if (!((IP.get_use_cs() && !IP.get_is_srcrec_swap()) || (IP.get_use_cr() && IP.get_is_srcrec_swap()))) + continue; // if we do not use this data (cs + not swap) or (cr + swap), ignore to consider the total obj and adjoint source + obj += 1.0 * my_square(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight; + } + } + + } // end of loop over data + } // end loop receivers + } // end loop sources + } // end proc_store_srcrec + + broadcast_cr_single_sub(obj,0); + broadcast_cr_single_sub(obj_abs,0); + broadcast_cr_single_sub(obj_cs_dif,0); + broadcast_cr_single_sub(obj_cr_dif,0); + broadcast_cr_single_sub(obj_tele,0); + broadcast_cr_single_sub(res,0); + broadcast_cr_single_sub(res_sq,0); + broadcast_cr_single_sub(res_abs,0); + broadcast_cr_single_sub(res_abs_sq,0); + broadcast_cr_single_sub(res_cs_dif,0); + broadcast_cr_single_sub(res_cs_dif_sq,0); + broadcast_cr_single_sub(res_cr_dif,0); + broadcast_cr_single_sub(res_cr_dif_sq,0); + broadcast_cr_single_sub(res_tele,0); + broadcast_cr_single_sub(res_tele_sq,0); + + broadcast_cr_single(obj,0); + broadcast_cr_single(obj_abs,0); + broadcast_cr_single(obj_cs_dif,0); + broadcast_cr_single(obj_cr_dif,0); + broadcast_cr_single(obj_tele,0); + broadcast_cr_single(res,0); + broadcast_cr_single(res_sq,0); + broadcast_cr_single(res_abs,0); + broadcast_cr_single(res_abs_sq,0); + broadcast_cr_single(res_cs_dif,0); + broadcast_cr_single(res_cs_dif_sq,0); + broadcast_cr_single(res_cr_dif,0); + broadcast_cr_single(res_cr_dif_sq,0); + broadcast_cr_single(res_tele,0); + broadcast_cr_single(res_tele_sq,0); + + obj_residual = {obj, obj_abs, obj_cs_dif, obj_cr_dif, obj_tele, res, res_sq, res_abs, res_abs_sq, res_cs_dif, res_cs_dif_sq, res_cr_dif, res_cr_dif_sq, res_tele, res_tele_sq}; + + for(int i = 0; i < (int)obj_residual.size(); i++){ + allreduce_cr_sim_single_inplace(obj_residual[i]); + } + + return obj_residual; +} + + +bool Receiver::check_if_receiver_is_in_this_subdomain(Grid& grid, const CUSTOMREAL& rec_lon, const CUSTOMREAL& rec_lat, const CUSTOMREAL& rec_r) { + + bool is_in_subdomain = false; + + if (grid.get_lon_min_loc() <= rec_lon && rec_lon < grid.get_lon_max_loc() && \ + grid.get_lat_min_loc() <= rec_lat && rec_lat < grid.get_lat_max_loc() && \ + grid.get_r_min_loc() <= rec_r && rec_r < grid.get_r_max_loc() ) { + + // check if the receiver is on the upper boundary of the subdomain + // if so, the interpolation will be failed because *_rec_p1 cannot be defined. + if (isZero(rec_lon - grid.get_lon_max_loc()) + || isZero(rec_lat - grid.get_lat_max_loc()) + || isZero(rec_r - grid.get_r_max_loc())) { + is_in_subdomain = false; + } else { + is_in_subdomain = true; + } + } + + return is_in_subdomain; +} + + +CUSTOMREAL Receiver::interpolate_travel_time(Grid& grid, InputParams& IP, std::string name_src, std::string name_rec) { + // calculate the travel time of the receiver by 3d linear interpolation + + // get the reference for a receiver + const SrcRecInfo rec = IP.get_rec_point_bcast(name_rec); + + // copy some parameters + CUSTOMREAL delta_lon = grid.get_delta_lon(); + CUSTOMREAL delta_lat = grid.get_delta_lat(); + CUSTOMREAL delta_r = grid.get_delta_r(); + + // store receiver position in radian + CUSTOMREAL rec_lon = rec.lon*DEG2RAD; + CUSTOMREAL rec_lat = rec.lat*DEG2RAD; + CUSTOMREAL rec_r = depth2radius(rec.dep); // r in km + + // check if the receiver is in this subdomain + bool is_in_subdomain = check_if_receiver_is_in_this_subdomain(grid, rec_lon, rec_lat, rec_r); + + // check the rank where the source is located + int rec_rank = -1; + int n_subdom_rec = 0; + bool* rec_flags = new bool[nprocs]; + allgather_bool_single(&is_in_subdomain, rec_flags); + for (int i = 0; i < nprocs; i++) { + if (rec_flags[i]) { + rec_rank = i; + //break; // this break means that the first subdomain is used if the receiver is in multiple subdomains (ghost layer) + n_subdom_rec++; + } + } + delete[] rec_flags; + // check if the receiver is in the global domain + if (rec_rank == -1) { + std::cout << "Error: the receiver is not in the global domain" << std::endl; + // print rec + std::cout << "name_src: " << name_src << " name_rec: " << name_rec << " depth: " << rec.dep << " lat: " << rec.lat << " lon: " << rec.lon << std::endl; + // print boundary + //std::cout << "lon min max rec: " << grid.get_lon_min_loc() << " " << grid.get_lon_max_loc() << " " << rec_lon << std::endl; + //std::cout << "lat min max rec: " << grid.get_lat_min_loc() << " " << grid.get_lat_max_loc() << " " << rec_lat << std::endl; + //std::cout << "r min max rec: " << grid.get_r_min_loc() << " " << grid.get_r_max_loc() << " " << rec_r << std::endl; + + std::cout << "lon+bound min max rec: " << (grid.get_lon_min_loc() - delta_lon)*RAD2DEG << " " << (grid.get_lon_max_loc() + delta_lon)*RAD2DEG << " " << rec_lon*RAD2DEG << std::endl; + std::cout << "lat+bound min max rec: " << (grid.get_lat_min_loc() - delta_lat)*RAD2DEG << " " << (grid.get_lat_max_loc() + delta_lat)*RAD2DEG << " " << rec_lat*RAD2DEG << std::endl; + std::cout << "r+bound min max rec: " << radius2depth(grid.get_r_min_loc() - delta_r ) << " " << radius2depth(grid.get_r_max_loc() + delta_r ) << " " << radius2depth(rec_r)<< std::endl; + exit(1); + } + + CUSTOMREAL vinterp = 0.0; + + if (is_in_subdomain) { + // calculate the interpolated travel time and broadcast it + + // descretize source position (LOCAL) ID) + int i_rec = std::floor((rec_lon - grid.get_lon_min_loc()) / delta_lon); + int j_rec = std::floor((rec_lat - grid.get_lat_min_loc()) / delta_lat); + int k_rec = std::floor((rec_r - grid.get_r_min_loc()) / delta_r); + + // discretized receiver position + CUSTOMREAL dis_rec_lon = grid.p_loc_1d[i_rec]; + CUSTOMREAL dis_rec_lat = grid.t_loc_1d[j_rec]; + CUSTOMREAL dis_rec_r = grid.r_loc_1d[k_rec]; + + // relative position errors + CUSTOMREAL e_lon = std::min({_1_CR,(rec_lon - dis_rec_lon)/delta_lon}); + CUSTOMREAL e_lat = std::min({_1_CR,(rec_lat - dis_rec_lat)/delta_lat}); + CUSTOMREAL e_r = std::min({_1_CR,(rec_r - dis_rec_r) /delta_r}); + + // numerical precision error of std::floor + if (e_lon >= _1_CR) { + e_lon = e_lon - _1_CR; + i_rec++; + } else if (e_lon < 0) { + e_lon = e_lon + _1_CR; + i_rec--; + } + + if (e_lat == _1_CR) { + e_lat = 0.0; + j_rec++; + } else if (e_lat < 0) { + e_lat = e_lat + _1_CR; + j_rec--; + } + + if (e_r == _1_CR) { + e_r = 0.0; + k_rec++; + } else if (e_r < 0) { + e_r = e_r + _1_CR; + k_rec--; + } + +// if(if_verbose){ +// std::cout << "(rec_lon - dis_rec_lon)/dlon: " << (rec_lon - dis_rec_lon)/delta_lon << std::endl; +// std::cout << "(rec_lat - dis_rec_lat)/dlat: " << (rec_lat - dis_rec_lat)/delta_lat << std::endl; +// std::cout << "(rec_r - dis_rec_r )/dr: " << (rec_r - dis_rec_r )/delta_r << std::endl; +// std::cout << "rec_lon, dis_rec_lon, delta_lon: " << rec_lon << " " << dis_rec_lon << " " << delta_lon << std::endl; +// std::cout << "rec_lat, dis_rec_lat, delta_lat: " << rec_lat << " " << dis_rec_lat << " " << delta_lat << std::endl; +// std::cout << "rec_r, dis_rec_r, delta_r : " << rec_r << ", " << dis_rec_r << ", " << delta_r << std::endl; +// std::cout << "loc_K. k_rec: " << loc_K << "," << k_rec << std::endl; +// std::cout << "r_loc_1d[loc_K-1]: " << grid.r_loc_1d[loc_K-1] << std::endl; +// } + + int i_rec_p1 = i_rec + 1; + int j_rec_p1 = j_rec + 1; + int k_rec_p1 = k_rec + 1; + + // exclude the points if they are out of the domain + if (i_rec_p1 > loc_I-1 \ + || j_rec_p1 > loc_J-1 \ + || k_rec_p1 > loc_K-1) { + // exit(1) as the source is out of the domain + std::cout << "Error: the receiver is out of the domain" << std::endl; + std::cout << "name_src: " << name_src << " name_rec: " << name_rec << " depth: " << rec.dep << " lat: " << rec.lat << " lon: " << rec.lon << std::endl; + std::cout << "lon min max rec: " << grid.get_lon_min_loc()*RAD2DEG << " " << grid.get_lon_max_loc()*RAD2DEG << " " << rec_lon*RAD2DEG << std::endl; + std::cout << "lat min max rec: " << grid.get_lat_min_loc()*RAD2DEG << " " << grid.get_lat_max_loc()*RAD2DEG << " " << rec_lat*RAD2DEG << std::endl; + std::cout << "r min max rec: " << radius2depth(grid.get_r_min_loc()) << " " << radius2depth(grid.get_r_max_loc()) << " " << radius2depth(rec_r) << std::endl; + std::cout << "i_rec: " << i_rec << " j_rec: " << j_rec << " k_rec: " << k_rec << std::endl; + std::cout << "i_rec_p1: " << i_rec_p1 << " j_rec_p1: " << j_rec_p1 << " k_rec_p1: " << k_rec_p1 << std::endl; + std::cout << "loc_I-1: " << loc_I-1 << " loc_J-1: " << loc_J-1 << " loc_K-1: " << loc_K-1 << std::endl; + //finalize_mpi(); + exit(1); + } + + + vinterp = (_1_CR - e_lon) * (_1_CR - e_lat) * (_1_CR - e_r) * grid.T_loc[I2V(i_rec, j_rec, k_rec)] \ + + e_lon * (_1_CR - e_lat) * (_1_CR - e_r) * grid.T_loc[I2V(i_rec_p1,j_rec, k_rec)] \ + + (_1_CR - e_lon) * e_lat * (_1_CR - e_r) * grid.T_loc[I2V(i_rec, j_rec_p1,k_rec)] \ + + (_1_CR - e_lon) * (_1_CR - e_lat) * e_r * grid.T_loc[I2V(i_rec, j_rec, k_rec_p1)] \ + + e_lon * e_lat * (_1_CR - e_r) * grid.T_loc[I2V(i_rec_p1,j_rec_p1,k_rec)] \ + + e_lon * (_1_CR - e_lat) * e_r * grid.T_loc[I2V(i_rec_p1,j_rec, k_rec_p1)] \ + + (_1_CR - e_lon) * e_lat * e_r * grid.T_loc[I2V(i_rec, j_rec_p1,k_rec_p1)] \ + + e_lon * e_lat * e_r * grid.T_loc[I2V(i_rec_p1,j_rec_p1,k_rec_p1)]; + + //std::cout << "DEBUG near and vinterp : " << grid.T_loc[I2V(i_rec,j_rec,k_rec)] << ", " << vinterp << std::endl; + // std::cout << "times: " << grid.T_loc[I2V(i_rec, j_rec, k_rec)] << ", " + // << grid.T_loc[I2V(i_rec_p1,j_rec, k_rec)] << ", " + // << grid.T_loc[I2V(i_rec, j_rec_p1,k_rec)] << ", " + // << grid.T_loc[I2V(i_rec, j_rec, k_rec_p1)] << ", " + // << grid.T_loc[I2V(i_rec_p1,j_rec_p1,k_rec)] << ", " + // << grid.T_loc[I2V(i_rec_p1,j_rec, k_rec_p1)] << ", " + // << grid.T_loc[I2V(i_rec, j_rec_p1,k_rec_p1)] << ", " + // << grid.T_loc[I2V(i_rec_p1,j_rec_p1,k_rec_p1)] << ", " + // << std::endl; + // std::cout << "rec: " << rec.name << ", lat: " << rec_lat + // << ", lon: " << rec_lon << ", dep: " << rec.dep + // << ", time: " << vinterp + // << std::endl; + + // broadcast interpolated travel time + //broadcast_cr_single(vinterp, rec_rank); + allreduce_cr_inplace(&vinterp, 1); + + } else { + // receive the calculated traveltime + //broadcast_cr_single(vinterp, rec_rank); + allreduce_cr_inplace(&vinterp, 1); + } + + // use an averaged value if the receiver is in multiple subdomains + vinterp /= n_subdom_rec; + + // return the calculated travel time + return vinterp; +} + + + +void Receiver::init_vars_src_reloc(InputParams& IP){ + if (proc_store_srcrec) { + + // calculate gradient of travel time at each receiver (swapped source) + for (auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++) { + if (!iter->second.is_stop){ + iter->second.grad_tau = _0_CR; + } + iter->second.grad_chi_i = _0_CR; + iter->second.grad_chi_j = _0_CR; + iter->second.grad_chi_k = _0_CR; + iter->second.Ndata = 0; + iter->second.sum_weight = _0_CR; // what does it mean? + iter->second.vobj_src_reloc_old = iter->second.vobj_src_reloc; + iter->second.vobj_src_reloc = _0_CR; + + iter->second.vobj_grad_norm_src_reloc = _0_CR; + } + + } +} + +void Receiver::calculate_T_gradient(InputParams& IP, Grid& grid, const std::string& name_sim_src){ + + if (subdom_main){ + int mykey_send = 9998; + int mykey_end = 9999; + int key = 0; + + if(proc_store_srcrec){ + // calculate gradient of travel time at each receiver (swapped source) + for (auto iter = IP.data_map[name_sim_src].begin(); iter != IP.data_map[name_sim_src].end(); iter++){ + for (auto& data: iter->second) { + // case 1: absolute traveltime for reloc + if (data.is_src_rec && IP.get_use_abs_reloc()){ // abs data && we use it + std::string name_rec = data.name_rec; + + if(IP.rec_map[name_rec].is_stop) continue; // if this receiver (swapped source) is already located + + // otherwise + CUSTOMREAL DTijk[3]; + + // send dummy integer + broadcast_i_single(mykey_send, 0); + // send reeiver name + broadcast_str(name_rec, 0); + + calculate_T_gradient_one_rec(grid, IP, name_rec, DTijk); + data.DTi = DTijk[0]; + data.DTj = DTijk[1]; + data.DTk = DTijk[2]; + + + // case 2: common receiver (swapped source) double difference (double source, or double swapped receiver) for reloc + } else if (data.is_rec_pair && IP.get_use_cr_reloc()) { // common receiver data (swapped common source) and we use it. + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + if(IP.rec_map[name_rec1].is_stop && IP.rec_map[name_rec2].is_stop) continue; // if both receivers (swapped sources) are already located + + // otherwise + CUSTOMREAL DTijk[3]; + + // send dummy integer + broadcast_i_single(mykey_send, 0); + // send reeiver name + broadcast_str(name_rec1, 0); + calculate_T_gradient_one_rec(grid, IP, name_rec1, DTijk); + data.DTi_pair[0] = DTijk[0]; + data.DTj_pair[0] = DTijk[1]; + data.DTk_pair[0] = DTijk[2]; + + // send dummy integer + broadcast_i_single(mykey_send, 0); + // send reeiver name + broadcast_str(name_rec2, 0); + calculate_T_gradient_one_rec(grid, IP, name_rec2, DTijk); + data.DTi_pair[1] = DTijk[0]; + data.DTj_pair[1] = DTijk[1]; + data.DTk_pair[1] = DTijk[2]; + + } else if (data.is_src_pair && IP.get_use_cs_reloc()) { // common source data (swapped common receiver) and we use it. + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + std::string name_rec = data.name_rec; + + if(IP.rec_map[name_rec].is_stop) continue; // if this receiver (swapped source) is already located + + // otherwise + CUSTOMREAL DTijk[3]; + + // send dummy integer + broadcast_i_single(mykey_send, 0); + // send reeiver name + broadcast_str(name_rec, 0); + calculate_T_gradient_one_rec(grid, IP, name_rec, DTijk); + data.DTi = DTijk[0]; + data.DTj = DTijk[1]; + data.DTk = DTijk[2]; + } else { + // we have some other types of data or we have three above-mentioned data but we do not use them + continue; + // std::cout << "unsupported data type for earthquake location" << std::endl; + // exit(0); + } + } + } // end loop over data + + // send dummy integer to end the idle loop + broadcast_i_single(mykey_end, 0); + + } else { + while (true) { + // receive dummy integer + broadcast_i_single(key, 0); + + if (key==mykey_send) { + // receive receiver name + std::string name_rec; + broadcast_str(name_rec, 0); + // join in the calculation + CUSTOMREAL DTijk_dummy[3]; + calculate_T_gradient_one_rec(grid, IP, name_rec, DTijk_dummy); + } else if (key==mykey_end) { + break; + } else { + std::cout << "Error: Receiver::calculate_T_gradient: key is not correct" << std::endl; + std::cout << "received key is " << key << std::endl; + exit(1); + } + } + } // end if proc_store_srcrec + } // end subdom_main + +} + + +void Receiver::calculate_T_gradient_one_rec(Grid& grid, InputParams& IP, std::string rec_name, CUSTOMREAL* DTijk){ + + // calculate the travel time of the receiver by 3d linear interpolation + + // get the reference for a receiver + const SrcRecInfo rec = IP.get_rec_point_bcast(rec_name); + + // copy some parameters + CUSTOMREAL delta_lon = grid.get_delta_lon(); + CUSTOMREAL delta_lat = grid.get_delta_lat(); + CUSTOMREAL delta_r = grid.get_delta_r(); + + // store receiver position in radian + CUSTOMREAL rec_lon = rec.lon*DEG2RAD; + CUSTOMREAL rec_lat = rec.lat*DEG2RAD; + CUSTOMREAL rec_r = depth2radius(rec.dep); // r in km + + // check if the receiver is in this subdomain + bool is_in_subdomain = check_if_receiver_is_in_this_subdomain(grid, rec_lon, rec_lat, rec_r); + + // check the rank where the source is located + int rec_rank = -1; + bool* rec_flags = new bool[nprocs]; + allgather_bool_single(&is_in_subdomain, rec_flags); + for (int i = 0; i < nprocs; i++) { + if (rec_flags[i]) { + rec_rank = i; + //break; // this break means that the first subdomain is used if the receiver is in multiple subdomains (ghost layer) + } + } + + // count the number of subdomains where the receiver is located + int ndoms_rec = 0; + for (int i = 0; i < nprocs; i++) { + if (rec_flags[i]) { + ndoms_rec++; + } + } + + // check if the receiver is in the global domain + if (rec_rank == -1) { + std::cout << "Error: the receiver is not in the global domain" << std::endl; + // print rec + std::cout << " id_rec: " << rec.id << " name: " << rec.name << " depth: " << rec.dep << " lat: " << rec.lat << " lon: " << rec.lon << std::endl; + std::cout << "lon+bound min max rec: " << (grid.get_lon_min_loc() - delta_lon)*RAD2DEG << " " << (grid.get_lon_max_loc() + delta_lon)*RAD2DEG << " " << rec_lon*RAD2DEG << std::endl; + std::cout << "lat+bound min max rec: " << (grid.get_lat_min_loc() - delta_lat)*RAD2DEG << " " << (grid.get_lat_max_loc() + delta_lat)*RAD2DEG << " " << rec_lat*RAD2DEG << std::endl; + std::cout << "r+bound min max rec: " << radius2depth(grid.get_r_min_loc() - delta_r ) << " " << radius2depth(grid.get_r_max_loc() + delta_r ) << " " << radius2depth(rec_r)<< std::endl; + exit(1); + } + + CUSTOMREAL DTi = 0.0, DTj = 0.0, DTk = 0.0; + + if (is_in_subdomain) { + + // descretized source position (LOCAL) ID) + int i_rec = std::floor((rec_lon - grid.get_lon_min_loc()) / delta_lon); + int j_rec = std::floor((rec_lat - grid.get_lat_min_loc()) / delta_lat); + int k_rec = std::floor((rec_r - grid.get_r_min_loc()) / delta_r); + + // std::cout << "lon: " << rec.lon << ", lat: " << rec.lat << ", dep: " << rec.dep << std::endl; + // std::cout << "i_rec: " << i_rec << ", j_rec: " << j_rec << ", k_rec: " << k_rec << std::endl; + + // discretized receiver position + CUSTOMREAL dis_rec_lon = grid.p_loc_1d[i_rec]; + CUSTOMREAL dis_rec_lat = grid.t_loc_1d[j_rec]; + CUSTOMREAL dis_rec_r = grid.r_loc_1d[k_rec]; + + // relative position errors + CUSTOMREAL e_lon = std::min({_1_CR,(rec_lon - dis_rec_lon)/delta_lon}); + CUSTOMREAL e_lat = std::min({_1_CR,(rec_lat - dis_rec_lat)/delta_lat}); + CUSTOMREAL e_r = std::min({_1_CR,(rec_r - dis_rec_r) /delta_r}); + + // numerical precision errors on std::floor + if (e_lon >= _1_CR) { + e_lon = e_lon - _1_CR; + i_rec++; + } else if (e_lon < 0) { + e_lon = e_lon + _1_CR; + i_rec--; + } + + if (e_lat == _1_CR) { + e_lat = 0.0; + j_rec++; + } else if (e_lat < 0) { + e_lat = e_lat + _1_CR; + j_rec--; + } + + if (e_r == _1_CR) { + e_r = 0.0; + k_rec++; + } else if (e_r < 0) { + e_r = e_r + _1_CR; + k_rec--; + } + + int i_rec_p1 = i_rec + 1; + int j_rec_p1 = j_rec + 1; + int k_rec_p1 = k_rec + 1; + int i_rec_m1 = i_rec - 1; + int j_rec_m1 = j_rec - 1; + int k_rec_m1 = k_rec - 1; + int i_rec_p1p1 = i_rec + 2; + int j_rec_p1p1 = j_rec + 2; + int k_rec_p1p1 = k_rec + 2; + + // treatment for the nodes on the bounary + // if not, sources cannot go over the subdomain boundary + if (i_rec == 0) + i_rec_m1 += 1; + if (j_rec == 0) + j_rec_m1 += 1; + if (k_rec == 0) + k_rec_m1 += 1; + if (i_rec_p1 == loc_I-1) + i_rec_p1p1 -= 1; + if (j_rec_p1 == loc_J-1) + j_rec_p1p1 -= 1; + if (k_rec_p1 == loc_K-1) + k_rec_p1p1 -= 1; + + CUSTOMREAL DT1, DT2, DT3, DT4, DT5, DT6, DT7, DT8; + DT1 = (grid.T_loc[I2V(i_rec, j_rec, k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec, k_rec_m1)]) / _2_CR / delta_r; + DT2 = (grid.T_loc[I2V(i_rec_p1, j_rec, k_rec_p1)] - grid.T_loc[I2V(i_rec_p1, j_rec, k_rec_m1)]) / _2_CR / delta_r; + DT3 = (grid.T_loc[I2V(i_rec, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec_p1, k_rec_m1)]) / _2_CR / delta_r; + DT4 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec_m1)]) / _2_CR / delta_r; + DT5 = (grid.T_loc[I2V(i_rec, j_rec, k_rec_p1p1)] - grid.T_loc[I2V(i_rec, j_rec, k_rec)]) / _2_CR / delta_r; + DT6 = (grid.T_loc[I2V(i_rec_p1, j_rec, k_rec_p1p1)] - grid.T_loc[I2V(i_rec_p1, j_rec, k_rec)]) / _2_CR / delta_r; + DT7 = (grid.T_loc[I2V(i_rec, j_rec_p1, k_rec_p1p1)] - grid.T_loc[I2V(i_rec, j_rec_p1, k_rec)]) / _2_CR / delta_r; + DT8 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec_p1p1)] - grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec)]) / _2_CR / delta_r; + + DTk = (_1_CR - e_lon) * (_1_CR - e_lat) * (_1_CR - e_r) * DT1 + + e_lon * (_1_CR - e_lat) * (_1_CR - e_r) * DT2 + + (_1_CR - e_lon) * e_lat * (_1_CR - e_r) * DT3 + + e_lon * e_lat * (_1_CR - e_r) * DT4 + + (_1_CR - e_lon) * (_1_CR - e_lat) * e_r * DT5 + + e_lon * (_1_CR - e_lat) * e_r * DT6 + + (_1_CR - e_lon) * e_lat * e_r * DT7 + + e_lon * e_lat * e_r * DT8; + + DT1 = (grid.T_loc[I2V(i_rec, j_rec_p1, k_rec )] - grid.T_loc[I2V(i_rec, j_rec_m1, k_rec )]) / _2_CR / delta_lat; + DT2 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec )] - grid.T_loc[I2V(i_rec_p1, j_rec_m1, k_rec )]) / _2_CR / delta_lat; + DT3 = (grid.T_loc[I2V(i_rec, j_rec_p1p1, k_rec )] - grid.T_loc[I2V(i_rec, j_rec, k_rec )]) / _2_CR / delta_lat; + DT4 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1p1, k_rec )] - grid.T_loc[I2V(i_rec_p1, j_rec, k_rec )]) / _2_CR / delta_lat; + DT5 = (grid.T_loc[I2V(i_rec, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec_m1, k_rec_p1)]) / _2_CR / delta_lat; + DT6 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec_p1, j_rec_m1, k_rec_p1)]) / _2_CR / delta_lat; + DT7 = (grid.T_loc[I2V(i_rec, j_rec_p1p1, k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec, k_rec_p1)]) / _2_CR / delta_lat; + DT8 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1p1, k_rec_p1)] - grid.T_loc[I2V(i_rec_p1, j_rec, k_rec_p1)]) / _2_CR / delta_lat; + + DTj = (_1_CR - e_lon) * (_1_CR - e_lat) * (_1_CR - e_r) * DT1 + + e_lon * (_1_CR - e_lat) * (_1_CR - e_r) * DT2 + + (_1_CR - e_lon) * e_lat * (_1_CR - e_r) * DT3 + + e_lon * e_lat * (_1_CR - e_r) * DT4 + + (_1_CR - e_lon) * (_1_CR - e_lat) * e_r * DT5 + + e_lon * (_1_CR - e_lat) * e_r * DT6 + + (_1_CR - e_lon) * e_lat * e_r * DT7 + + e_lon * e_lat * e_r * DT8; + + DT1 = (grid.T_loc[I2V(i_rec_p1, j_rec , k_rec )] - grid.T_loc[I2V(i_rec_m1, j_rec , k_rec )]) / _2_CR / delta_lon; + DT2 = (grid.T_loc[I2V(i_rec_p1p1, j_rec , k_rec )] - grid.T_loc[I2V(i_rec, j_rec , k_rec )]) / _2_CR / delta_lon; + DT3 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec )] - grid.T_loc[I2V(i_rec_m1, j_rec_p1, k_rec )]) / _2_CR / delta_lon; + DT4 = (grid.T_loc[I2V(i_rec_p1p1, j_rec_p1, k_rec )] - grid.T_loc[I2V(i_rec, j_rec_p1, k_rec )]) / _2_CR / delta_lon; + DT5 = (grid.T_loc[I2V(i_rec_p1, j_rec , k_rec_p1)] - grid.T_loc[I2V(i_rec_m1, j_rec , k_rec_p1)]) / _2_CR / delta_lon; + DT6 = (grid.T_loc[I2V(i_rec_p1p1, j_rec , k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec , k_rec_p1)]) / _2_CR / delta_lon; + DT7 = (grid.T_loc[I2V(i_rec_p1, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec_m1, j_rec_p1, k_rec_p1)]) / _2_CR / delta_lon; + DT8 = (grid.T_loc[I2V(i_rec_p1p1, j_rec_p1, k_rec_p1)] - grid.T_loc[I2V(i_rec, j_rec_p1, k_rec_p1)]) / _2_CR / delta_lon; + + DTi = (_1_CR - e_lon) * (_1_CR - e_lat) * (_1_CR - e_r) * DT1 + + e_lon * (_1_CR - e_lat) * (_1_CR - e_r) * DT2 + + (_1_CR - e_lon) * e_lat * (_1_CR - e_r) * DT3 + + e_lon * e_lat * (_1_CR - e_r) * DT4 + + (_1_CR - e_lon) * (_1_CR - e_lat) * e_r * DT5 + + e_lon * (_1_CR - e_lat) * e_r * DT6 + + (_1_CR - e_lon) * e_lat * e_r * DT7 + + e_lon * e_lat * e_r * DT8; + // std::cout << grid.T_loc[I2V(i_rec + 1, j_rec , k_rec )] << ", " << grid.T_loc[I2V(i_rec - 1, j_rec , k_rec )] + // << ", " << _2_CR * delta_lon << std::endl; + // std::cout << DT1 << "," << DT2 << "," << DT3 << "," << DT4 << "," << DT5 << "," << DT6 << "," << DT7 << "," << DT8 <first].is_stop) continue; // keep the completed tau_opt + +// iter->second.tau_opt /= iter->second.sum_weight; + +// //std::cout << "DEBUG1: id_sim" << id_sim << ", name: " << iter->first << ", ortime: " << iter->second.tau_opt < Receiver::calculate_obj_reloc(InputParams& IP, int i_iter){ + + CUSTOMREAL obj = 0.0; + CUSTOMREAL obj_abs = 0.0; + CUSTOMREAL obj_cs_dif = 0.0; + CUSTOMREAL obj_cr_dif = 0.0; + CUSTOMREAL obj_tele = 0.0; + CUSTOMREAL res = 0.0; + CUSTOMREAL res_sq = 0.0; + CUSTOMREAL res_abs = 0.0; + CUSTOMREAL res_abs_sq = 0.0; + CUSTOMREAL res_cs_dif = 0.0; + CUSTOMREAL res_cs_dif_sq = 0.0; + CUSTOMREAL res_cr_dif = 0.0; + CUSTOMREAL res_cr_dif_sq = 0.0; + CUSTOMREAL res_tele = 0.0; + CUSTOMREAL res_tele_sq = 0.0; + + // sum obj_residual from all sources + std::vector obj_residual; + + if (proc_store_srcrec) { + + for (auto it_src = IP.data_map.begin(); it_src != IP.data_map.end(); it_src++) { + std::string name_src = it_src->first; + for (auto it_rec = IP.data_map[name_src].begin(); it_rec != IP.data_map[name_src].end(); it_rec++) { + for (const auto& data: it_rec->second){ + + if (data.dual_data) continue; // dual data is not used for calculating obj and residual + + // case 1: absolute traveltime for reloc + if (data.is_src_rec){ // abs data && we use it + std::string name_rec = data.name_rec; + + // assign obj + if (IP.get_use_abs_reloc()){ + IP.rec_map[name_rec].vobj_src_reloc += data.weight_reloc * my_square(data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + obj += data.weight_reloc * my_square(data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + } + // assign obj + obj_abs += data.weight_reloc * my_square(data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + + // assign residual + res += (data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + res_sq += my_square(data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + + res_abs += (data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + res_abs_sq += my_square(data.travel_time - data.travel_time_obs + IP.rec_map[name_rec].tau_opt); + + // case 2: common receiver (swapped source) double difference (double source, or double swapped receiver) for reloc + } else if (data.is_rec_pair ) { // common receiver data (swapped common source) + + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + // if(IP.rec_map[name_rec1].is_stop && IP.rec_map[name_rec2].is_stop) continue; + + // assign obj (for EQ1, obj+1, for EQ2, obj+1, and for total obj also +1) + if (IP.get_use_cr_reloc()){ + IP.rec_map[name_rec1].vobj_src_reloc+= 1.0 * data.weight_reloc * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + IP.rec_map[name_rec2].vobj_src_reloc+= 1.0 * data.weight_reloc * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + obj += 1.0 * data.weight_reloc * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + } + + // assign obj + obj_cs_dif += 1.0 * data.weight_reloc * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + // assign residual + res += 1.0 * (data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + res_sq += 1.0 * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + res_cs_dif += 1.0 * (data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + res_cs_dif_sq += 1.0 * my_square(data.cs_dif_travel_time - data.cs_dif_travel_time_obs + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + + // } + + } else if (data.is_src_pair) { // we only record the obj of this kind of data + std::string name_rec = data.name_rec; + + // if(IP.rec_map[name_rec].is_stop) continue; + + // assign obj + if (IP.get_use_cs_reloc()){ + IP.rec_map[name_rec].vobj_src_reloc += 1.0 * data.weight_reloc * my_square(data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + obj += 1.0 * data.weight_reloc * my_square(data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + } + + // assign obj + obj_cr_dif += 1.0 * data.weight_reloc * my_square(data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + + // assign residual + res += 1.0 * (data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + res_sq += 1.0 * my_square(data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + + res_cr_dif += 1.0 * (data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + res_cr_dif_sq += 1.0 * my_square(data.cr_dif_travel_time - data.cr_dif_travel_time_obs); + + } else { // unsupported data (swapped common receiver, or others) + continue; + } + } + + } + } // end of loop over all sources + + // sum the obj from all sources (swapped receivers) + IP.allreduce_rec_map_vobj_src_reloc(); + + } // end of if (proc_store_srcrec) + + synchronize_all_world(); + + broadcast_cr_single(obj,0); + broadcast_cr_single(obj_abs,0); + broadcast_cr_single(obj_cs_dif,0); + broadcast_cr_single(obj_cr_dif,0); + broadcast_cr_single(obj_tele,0); + broadcast_cr_single(res,0); + broadcast_cr_single(res_sq,0); + broadcast_cr_single(res_abs,0); + broadcast_cr_single(res_abs_sq,0); + broadcast_cr_single(res_cs_dif,0); + broadcast_cr_single(res_cs_dif_sq,0); + broadcast_cr_single(res_cr_dif,0); + broadcast_cr_single(res_cr_dif_sq,0); + broadcast_cr_single(res_tele,0); + broadcast_cr_single(res_tele_sq,0); + + broadcast_cr_single_sub(obj,0); + broadcast_cr_single_sub(obj_abs,0); + broadcast_cr_single_sub(obj_cs_dif,0); + broadcast_cr_single_sub(obj_cr_dif,0); + broadcast_cr_single_sub(obj_tele,0); + broadcast_cr_single_sub(res,0); + broadcast_cr_single_sub(res_sq,0); + broadcast_cr_single_sub(res_abs,0); + broadcast_cr_single_sub(res_abs_sq,0); + broadcast_cr_single_sub(res_cs_dif,0); + broadcast_cr_single_sub(res_cs_dif_sq,0); + broadcast_cr_single_sub(res_cr_dif,0); + broadcast_cr_single_sub(res_cr_dif_sq,0); + broadcast_cr_single_sub(res_tele,0); + broadcast_cr_single_sub(res_tele_sq,0); + + + obj_residual = {obj, obj_abs, obj_cs_dif, obj_cr_dif, obj_tele, res, res_sq, res_abs, res_abs_sq, res_cs_dif, res_cs_dif_sq, res_cr_dif, res_cr_dif_sq, res_tele, res_tele_sq}; + + for(int i = 0; i < (int)obj_residual.size(); i++){ + allreduce_cr_sim_single_inplace(obj_residual[i]); + } + + if (proc_store_srcrec) { + for (auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++){ + CUSTOMREAL obj = iter->second.vobj_src_reloc; + CUSTOMREAL old_obj = iter->second.vobj_src_reloc_old; + if (i_iter != 0 && old_obj < obj){ // if obj increase, decrease the step length of this (swapped) source + // std::cout << "before, step_length_max: " << iter->second.step_length_max << "step_length_decay: " << step_length_decay << std::endl; + iter->second.step_length_max *= step_length_decay_src_reloc; + // std::cout << "after, step_length_max: " << iter->second.step_length_max << "step_length_decay: " << step_length_decay << std::endl; + } + // std::cout << "id_sim: " << id_sim << ", name: " << iter->first << ", obj: " << obj << ", old obj: " << old_obj << ", step_length_max: " << iter->second.step_length_max + // << ", step_length_decay: " << step_length_decay + // << std::endl; + } + } + + return obj_residual; +} + + +// calculate the gradient of the objective function +void Receiver::calculate_grad_obj_src_reloc(InputParams& IP, const std::string& name_sim_src) { + + if(proc_store_srcrec){ + // calculate gradient of travel time at each receiver (swapped source) + for (auto iter = IP.data_map[name_sim_src].begin(); iter != IP.data_map[name_sim_src].end(); iter++){ + for (const auto& data: iter->second) { + // case 1: absolute traveltime for reloc + if (data.is_src_rec && IP.get_use_abs_reloc()){ // abs data && we use it + std::string name_rec = data.name_rec; + + if(IP.rec_map[name_rec].is_stop) continue; // if this receiver (swapped source) is already located + + CUSTOMREAL syn_time = data.travel_time; + CUSTOMREAL obs_time = data.travel_time_obs; + + // local weight + CUSTOMREAL local_weight = 1.0; + + // evaluate residual_weight_abs_reloc + CUSTOMREAL local_residual = abs(syn_time - obs_time + IP.rec_map[name_rec].tau_opt); + CUSTOMREAL* res_weight = IP.get_residual_weight_abs_reloc(); + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + // evaluate distance_weight_abs_reloc + CUSTOMREAL local_dis = 0.0; + Epicentral_distance_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_sim_src).lat*DEG2RAD, IP.get_src_point(name_sim_src).lon*DEG2RAD, local_dis); + local_dis *= R_earth; // rad to km + CUSTOMREAL* dis_weight = IP.get_distance_weight_abs_reloc(); + + if (local_dis < dis_weight[0]) local_weight *= dis_weight[2]; + else if (local_dis > dis_weight[1]) local_weight *= dis_weight[3]; + else local_weight *= ((local_dis - dis_weight[0])/(dis_weight[1] - dis_weight[0]) * (dis_weight[3] - dis_weight[2]) + dis_weight[2]); + + // assign kernel + IP.rec_map[name_rec].grad_chi_k += (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.DTk * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_chi_j += (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.DTj * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_chi_i += (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.DTi * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_tau += (syn_time - obs_time + IP.rec_map[name_rec].tau_opt) * data.weight_reloc * local_weight; + + // count the data + IP.rec_map[name_rec].Ndata += 1; + // case 2: common receiver (swapped source) double difference (double source, or double swapped receiver) for reloc + } else if (data.is_rec_pair && IP.get_use_cr_reloc()) { // common receiver data (swapped common source) and we use it. + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + if(IP.rec_map[name_rec1].is_stop && IP.rec_map[name_rec2].is_stop) continue; // if both receivers (swapped sources) are already located + + CUSTOMREAL syn_dif_time = data.cs_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cs_dif_travel_time_obs; + + // assign local weight + CUSTOMREAL local_weight = 1.0; + + // evaluate residual_weight_abs + CUSTOMREAL local_residual = abs(syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt); + CUSTOMREAL* res_weight = IP.get_residual_weight_cr_reloc(); // common receiver when not swapped + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + // evaluate distance_weight_abs + CUSTOMREAL local_azi1 = 0.0; + Azimuth_sphere(IP.get_rec_point(name_rec1).lat*DEG2RAD, IP.get_rec_point(name_rec1).lon*DEG2RAD, IP.get_src_point(name_sim_src).lat*DEG2RAD, IP.get_src_point(name_sim_src).lon*DEG2RAD, local_azi1); + CUSTOMREAL local_azi2 = 0.0; + Azimuth_sphere(IP.get_rec_point(name_rec2).lat*DEG2RAD, IP.get_rec_point(name_rec2).lon*DEG2RAD, IP.get_src_point(name_sim_src).lat*DEG2RAD, IP.get_src_point(name_sim_src).lon*DEG2RAD, local_azi2); + CUSTOMREAL local_azi = abs(local_azi1 - local_azi2)*RAD2DEG; + if(local_azi > 180.0) local_azi = 360.0 - local_azi; + + CUSTOMREAL* azi_weight = IP.get_azimuthal_weight_cr_reloc(); + + if (local_azi < azi_weight[0]) local_weight *= azi_weight[2]; + else if (local_azi > azi_weight[1]) local_weight *= azi_weight[3]; + else local_weight *= ((local_azi - azi_weight[0])/(azi_weight[1] - azi_weight[0]) * (azi_weight[3] - azi_weight[2]) + azi_weight[2]); + + // assign kernel + if(!IP.rec_map[name_rec1].is_stop){ + IP.rec_map[name_rec1].grad_chi_k += (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTk_pair[0] * data.weight_reloc * local_weight; + IP.rec_map[name_rec1].grad_chi_j += (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTj_pair[0] * data.weight_reloc * local_weight; + IP.rec_map[name_rec1].grad_chi_i += (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTi_pair[0] * data.weight_reloc * local_weight; + IP.rec_map[name_rec1].grad_tau += (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight_reloc * local_weight; + IP.rec_map[name_rec1].Ndata += 1; + } + if(!IP.rec_map[name_rec2].is_stop){ + IP.rec_map[name_rec2].grad_chi_k -= (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTk_pair[1] * data.weight_reloc * local_weight; + IP.rec_map[name_rec2].grad_chi_j -= (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTj_pair[1] * data.weight_reloc * local_weight; + IP.rec_map[name_rec2].grad_chi_i -= (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.DTi_pair[1] * data.weight_reloc * local_weight; + IP.rec_map[name_rec2].grad_tau -= (syn_dif_time - obs_dif_time + IP.rec_map[name_rec1].tau_opt - IP.rec_map[name_rec2].tau_opt) * data.weight_reloc * local_weight; + IP.rec_map[name_rec2].Ndata += 1; + } + + // case 3: common source (swapped receiver) double difference (double receiver, or double swapped source) for reloc + } else if (data.is_src_pair && IP.get_use_cs_reloc()) { // common receiver data (swapped common source) and we use it. + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + std::string name_rec = data.name_rec; + + if(IP.rec_map[name_rec].is_stop) continue; // if both receivers (swapped sources) are already located + + CUSTOMREAL syn_dif_time = data.cr_dif_travel_time; + CUSTOMREAL obs_dif_time = data.cr_dif_travel_time_obs; + + // assign local weight + CUSTOMREAL local_weight = 1.0; + + // evaluate residual_weight_abs + CUSTOMREAL local_residual = abs(syn_dif_time - obs_dif_time); // common swapped source, so ortime is cancelled. + CUSTOMREAL* res_weight = IP.get_residual_weight_cs_reloc(); // common receiver when not swapped + + if (local_residual < res_weight[0]) local_weight *= res_weight[2]; + else if (local_residual > res_weight[1]) local_weight *= res_weight[3]; + else local_weight *= ((local_residual - res_weight[0])/(res_weight[1] - res_weight[0]) * (res_weight[3] - res_weight[2]) + res_weight[2]); + + // evaluate distance_weight_abs + CUSTOMREAL local_azi1 = 0.0; + Azimuth_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src1).lat*DEG2RAD, IP.get_src_point(name_src2).lon*DEG2RAD, local_azi1); + CUSTOMREAL local_azi2 = 0.0; + Azimuth_sphere(IP.get_rec_point(name_rec).lat*DEG2RAD, IP.get_rec_point(name_rec).lon*DEG2RAD, IP.get_src_point(name_src1).lat*DEG2RAD, IP.get_src_point(name_src2).lon*DEG2RAD, local_azi2); + CUSTOMREAL local_azi = abs(local_azi1 - local_azi2)*RAD2DEG; + if(local_azi > 180.0) local_azi = 360.0 - local_azi; + + CUSTOMREAL* azi_weight = IP.get_azimuthal_weight_cs_reloc(); + + if (local_azi < azi_weight[0]) local_weight *= azi_weight[2]; + else if (local_azi > azi_weight[1]) local_weight *= azi_weight[3]; + else local_weight *= ((local_azi - azi_weight[0])/(azi_weight[1] - azi_weight[0]) * (azi_weight[3] - azi_weight[2]) + azi_weight[2]); + + // assign kernel (we only consider the DTijk of first source (swapped receiver), because only the DTijk of the first source is calculated) + IP.rec_map[name_rec].grad_chi_k += (syn_dif_time - obs_dif_time) * data.DTk * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_chi_j += (syn_dif_time - obs_dif_time) * data.DTj * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_chi_i += (syn_dif_time - obs_dif_time) * data.DTi * data.weight_reloc * local_weight; + IP.rec_map[name_rec].grad_tau += 0; // common swapped source, so ortime is cancelled. + IP.rec_map[name_rec].Ndata += 1; + + // The DTijk of the second source (swapped receiver) will be considered when the loop goes to the other common receiver data with the other source as the key value + + } else { // unsupported data (swapped common receiver, or others) + continue; + } + } + } // end of loop over all data_map for this src + } // end of if(proc_store_srcrec) +} + +void Receiver::update_source_location(InputParams& IP, Grid& grid) { + + if (proc_store_srcrec) { + // get list of receivers from input parameters + for(auto iter = IP.rec_map.begin(); iter != IP.rec_map.end(); iter++){ + + std::string name_rec = iter->first; + + if (IP.rec_map[name_rec].is_stop){ // do not relocation + // do nothing + } else if (IP.rec_map[name_rec].Ndata < min_Ndata_reloc) { + IP.rec_map[name_rec].is_stop = true; + } else { + // Here grad_dep_km is the kernel of obj with respect to the depth (unit is km) * rescaling_dep. The same for lat,lon,ortime + CUSTOMREAL grad_dep_km = 0.0; + if (abs(max_change_dep - abs(IP.rec_map[name_rec].change_dep)) < 0.001) + grad_dep_km = 0.0; + else + grad_dep_km = - IP.rec_map[name_rec].grad_chi_k * rescaling_dep; // over rescaling_dep is rescaling + + CUSTOMREAL grad_lat_km = 0.0; + if (abs(max_change_lat - abs(IP.rec_map[name_rec].change_lat)) < 0.001) + grad_lat_km = 0.0; + else + grad_lat_km = IP.rec_map[name_rec].grad_chi_j/(R_earth) * rescaling_lat; + + CUSTOMREAL grad_lon_km = 0.0; + if (abs(max_change_lon - abs(IP.rec_map[name_rec].change_lon)) < 0.001) + grad_lon_km = 0.0; + else + grad_lon_km = IP.rec_map[name_rec].grad_chi_i/(R_earth * cos(IP.rec_map[name_rec].lat * DEG2RAD)) * rescaling_lon; + + CUSTOMREAL grad_ortime = 0.0; + if (abs(max_change_ortime - abs(IP.rec_map[name_rec].change_tau)) < 0.001) + grad_ortime = 0.0; + else + grad_ortime = IP.rec_map[name_rec].grad_tau * rescaling_ortime; + + CUSTOMREAL norm_grad; + norm_grad = std::sqrt(my_square(grad_dep_km) + my_square(grad_lat_km) + my_square(grad_lon_km) + my_square(grad_ortime)); + + // if norm is smaller than a threshold, stop update + if (norm_grad < TOL_SRC_RELOC){ + IP.rec_map[name_rec].is_stop = true; + continue; + } + + CUSTOMREAL step_length; + step_length = 0.5 * IP.rec_map[name_rec].vobj_src_reloc/my_square(norm_grad); + + // rescale update value for perturbation of dep/rescaling_dep, lat/rescaling_lat, lon/rescaling_lon, time/rescaling_ortime + CUSTOMREAL update_dep = step_length * grad_dep_km; + CUSTOMREAL update_lat = step_length * grad_lat_km; + CUSTOMREAL update_lon = step_length * grad_lon_km; + CUSTOMREAL update_ortime = step_length * grad_ortime; + + CUSTOMREAL update_max = -1.0; + CUSTOMREAL downscale = 1.0; + update_max = std::max(update_max,abs(update_dep)); + update_max = std::max(update_max,abs(update_lat)); + update_max = std::max(update_max,abs(update_lon)); + update_max = std::max(update_max,abs(update_ortime)); + if (update_max > IP.rec_map[name_rec].step_length_max){ // make sure update_max * downscale = min(step_length_max, update_max) + downscale = IP.rec_map[name_rec].step_length_max / update_max; + } + + // update value for dep (km), lat (km), lon (km), ortime (s) + CUSTOMREAL update_dep_km = - update_dep * downscale * rescaling_dep; + CUSTOMREAL update_lat_km = - update_lat * downscale * rescaling_lat; // / R_earth * RAD2DEG; + CUSTOMREAL update_lon_km = - update_lon * downscale * rescaling_lon; // / (R_earth * cos(IP.rec_map[name_rec].lat * DEG2RAD)) * RAD2DEG; + CUSTOMREAL update_ortime_s = - update_ortime * downscale * rescaling_ortime; + + + // limit the update for dep, lat, lon + if (abs(IP.rec_map[name_rec].change_dep + update_dep_km) > max_change_dep){ + if (IP.rec_map[name_rec].change_dep + update_dep_km > 0) + update_dep_km = max_change_dep - IP.rec_map[name_rec].change_dep; + else + update_dep_km = - max_change_dep - IP.rec_map[name_rec].change_dep; + + } + if (abs(IP.rec_map[name_rec].change_lat + update_lat_km) > max_change_lat){ + if (IP.rec_map[name_rec].change_lat + update_lat_km > 0) + update_lat_km = max_change_lat - IP.rec_map[name_rec].change_lat; + else + update_lat_km = - max_change_lat - IP.rec_map[name_rec].change_lat; + } + if (abs(IP.rec_map[name_rec].change_lon + update_lon_km) > max_change_lon){ + if (IP.rec_map[name_rec].change_lon + update_lon_km > 0) + update_lon_km = max_change_lon - IP.rec_map[name_rec].change_lon; + else + update_lon_km = - max_change_lon - IP.rec_map[name_rec].change_lon; + } + if (abs(IP.rec_map[name_rec].change_tau + update_ortime_s) > max_change_ortime){ + if (IP.rec_map[name_rec].change_tau + update_ortime_s > 0) + update_ortime_s = max_change_ortime - IP.rec_map[name_rec].change_tau; + else + update_ortime_s = - max_change_ortime - IP.rec_map[name_rec].change_tau; + } + // remark: in the case of local search for ortime, change of ortime need to be checked as above + // in the case of global search for ortime, update_ortime is always zero (because grad_ortime = 0), thus always satisfied + + // earthquake should be below the surface (0 km) + if (IP.rec_map[name_rec].dep + update_dep_km < 0){ + // update_dep_km = - IP.rec_map[name_rec].dep; + update_dep_km = - 2.0 * IP.rec_map[name_rec].dep - update_dep_km; + } + + + // update value for dep (km), lat (degree), lon (degree) + IP.rec_map[name_rec].vobj_grad_norm_src_reloc = norm_grad; + + IP.rec_map[name_rec].dep += update_dep_km; + IP.rec_map[name_rec].lat += update_lat_km / R_earth * RAD2DEG; + IP.rec_map[name_rec].lon += update_lon_km /(R_earth * cos(IP.rec_map[name_rec].lat * DEG2RAD)) * RAD2DEG; + IP.rec_map[name_rec].tau_opt += update_ortime_s; + + IP.rec_map[name_rec].change_dep += update_dep_km; + IP.rec_map[name_rec].change_lat += update_lat_km; + IP.rec_map[name_rec].change_lon += update_lon_km; + IP.rec_map[name_rec].change_tau += update_ortime_s; + + + // if (IP.rec_map[name_rec].step_length_max < TOL_step_length){ + // IP.rec_map[name_rec].is_stop = true; + // } + + + + + // detect nan and inf then exit the program + if (std::isnan(IP.rec_map[name_rec].dep) || std::isinf(IP.rec_map[name_rec].dep) || + std::isnan(IP.rec_map[name_rec].lat) || std::isinf(IP.rec_map[name_rec].lat) || + std::isnan(IP.rec_map[name_rec].lon) || std::isinf(IP.rec_map[name_rec].lon)){ + std::cout << "Error: nan or inf detected in source relocation!" << std::endl; + std::cout << "id_sim: " << id_sim + << ", src name: " << name_rec + << ", obj: " << IP.rec_map[name_rec].vobj_src_reloc + << ", lat: " << IP.rec_map[name_rec].lat + << ", lon: " << IP.rec_map[name_rec].lon + << ", dep: " << IP.rec_map[name_rec].dep + << ", ortime: " << IP.rec_map[name_rec].tau_opt + << ", is_stop: " << IP.rec_map[name_rec].is_stop + << ", grad_dep_km(pert): " << grad_dep_km + << ", grad_lat_km(pert): " << grad_lat_km + << ", grad_lon_km(pert): " << grad_lon_km + << ", vobj_src_reloc: " << IP.rec_map[name_rec].vobj_src_reloc + << std::endl; + + exit(1); + } + + // check if the new receiver position is within the domain + // if not then set the receiver position to the closest point on the domain + + // gap to boundary + CUSTOMREAL boundary_gap_lon = _0_5_CR * grid.get_delta_lon() * RAD2DEG; + CUSTOMREAL boundary_gap_lat = _0_5_CR * grid.get_delta_lat() * RAD2DEG; + CUSTOMREAL boundary_gap_r = _0_5_CR * grid.get_delta_r(); + + if (IP.rec_map[name_rec].lon < IP.get_min_lon()*RAD2DEG){ + IP.rec_map[name_rec].lon = IP.get_min_lon()*RAD2DEG + boundary_gap_lon; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in longitude, set the location near min_lon boundary: " << IP.get_min_lon()*RAD2DEG + boundary_gap_lon << std::endl; + } + if (IP.rec_map[name_rec].lon > IP.get_max_lon()*RAD2DEG){ + IP.rec_map[name_rec].lon = IP.get_max_lon()*RAD2DEG - boundary_gap_lon; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in longitude, set the location near max_lon boundary: " << IP.get_max_lon()*RAD2DEG - boundary_gap_lon << std::endl; + } + if (IP.rec_map[name_rec].lat < IP.get_min_lat()*RAD2DEG){ + IP.rec_map[name_rec].lat = IP.get_min_lat()*RAD2DEG + boundary_gap_lat; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in latitude, set the location near min_lat boundary: " << IP.get_min_lat()*RAD2DEG + boundary_gap_lat << std::endl; + } + if (IP.rec_map[name_rec].lat > IP.get_max_lat()*RAD2DEG){ + IP.rec_map[name_rec].lat = IP.get_max_lat()*RAD2DEG - boundary_gap_lat; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in latitude, set the location near max_lat boundary: " << IP.get_max_lat()*RAD2DEG - boundary_gap_lat << std::endl; + } + if (IP.rec_map[name_rec].dep < IP.get_min_dep()){ + IP.rec_map[name_rec].dep = IP.get_min_dep() + boundary_gap_r; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in depth, set the location near min_dep boundary: " << IP.get_min_dep() + boundary_gap_r << std::endl; + } + if (IP.rec_map[name_rec].dep > IP.get_max_dep()){ + IP.rec_map[name_rec].dep = IP.get_max_dep() - boundary_gap_r; + // report to user + std::cout << "Warning: source/receiver " << name_rec << " is out of domain in depth, set the location near max_dep boundary: " << IP.get_max_dep() - boundary_gap_r << std::endl; + } + } + + // share the flag of stop within the same simultanoue run group + //allreduce_bool_single_inplace(IP.rec_map[name_rec].is_stop); // this is done in src_rec->broadcast_rec_info_intra_sim + + } // end iter loopvobj_grad_norm_src_reloc + } // end if(proc_store_srcrec) + + //IP.allreduce_rec_map_vobj_grad_norm_src_reloc(); + +} diff --git a/src/source.cpp b/src/source.cpp new file mode 100644 index 0000000..d64b02d --- /dev/null +++ b/src/source.cpp @@ -0,0 +1,187 @@ +#include "source.h" + +void Source::set_source_position(InputParams &IP, Grid &grid, bool& is_teleseismic, const std::string& name_sim_src, bool for_2d_solver) { + + + if (subdom_main) { + if(if_verbose) stdout_by_main("--- start source initialization ---"); + + // copy some parameters + delta_lon = grid.get_delta_lon(); + delta_lat = grid.get_delta_lat(); + delta_r = grid.get_delta_r(); + + // set source position + if(!for_2d_solver){ + src_lon = IP.get_src_lon( name_sim_src); // in radian + src_lat = IP.get_src_lat( name_sim_src); // in radian + src_r = IP.get_src_radius(name_sim_src); // radious + } else { + // 2d src database (src_map_2d) is accessible from dedicated getters. + src_lon = IP.get_src_lon_2d( name_sim_src); // in radian + src_lat = IP.get_src_lat_2d( name_sim_src); // in radian + src_r = IP.get_src_radius_2d(name_sim_src); // radious + } + } + + // further initialization is not needed for teleseismic source + if (is_teleseismic) return; + + if (subdom_main) { + // descretize source position (LOCAL ID) + i_src_loc = std::floor((src_lon - grid.get_lon_min_loc()) / grid.get_delta_lon()); + j_src_loc = std::floor((src_lat - grid.get_lat_min_loc()) / grid.get_delta_lat()); + k_src_loc = std::floor((src_r - grid.get_r_min_loc()) / grid.get_delta_r()) ; + + if(i_src_loc +1 >= loc_I) + i_src_loc = loc_I - 2; + if(j_src_loc + 1 >= loc_J) + j_src_loc = loc_J - 2; + if(k_src_loc + 1 >= loc_K) + k_src_loc = loc_K - 2; + + // check if the source is in this subdomain (including the ghost nodes) + if (grid.get_lon_min_loc() <= src_lon && src_lon <= grid.get_lon_max_loc() && \ + grid.get_lat_min_loc() <= src_lat && src_lat <= grid.get_lat_max_loc() && \ + grid.get_r_min_loc() <= src_r && src_r <= grid.get_r_max_loc() ) { + is_in_subdomain = true; + } else { + // this flag should be reinitialized here + // because the src object is now reused by multiple events + // thus the flag is not reinitialized in the constructor + is_in_subdomain = false; + } + + // check the rank where the source is located + src_flags = new bool[nprocs]; + allgather_bool_single(&is_in_subdomain, src_flags); + int n_dom_src_tmp = 0; + for (int i = 0; i < nprocs; i++) { + if (src_flags[i]) { + src_rank = i; + n_dom_src_tmp++; + //break; + } + } + n_dom_src = n_dom_src_tmp; + + delete[] src_flags; + + + if (is_in_subdomain){ + // discretized source position (Global) + dis_src_lon = grid.p_loc_1d[i_src_loc]; + dis_src_lat = grid.t_loc_1d[j_src_loc]; + dis_src_r = grid.r_loc_1d[k_src_loc]; + + // position error + error_lon = (src_lon - dis_src_lon); + error_lat = (src_lat - dis_src_lat); + error_r = (src_r - dis_src_r); + + // relative position error + dis_src_err_lon = std::min(error_lon / grid.get_delta_lon(), _1_CR); + dis_src_err_lat = std::min(error_lat / grid.get_delta_lat(), _1_CR); + dis_src_err_r = std::min(error_r / grid.get_delta_r() , _1_CR); + + // precision error for std::floor + // if (dis_src_err_lon == _1_CR){ + // // i_src_loc shoud be +1 + // dis_src_err_lon = _0_CR; + // i_src_loc++; + // } + // if (dis_src_err_lat == _1_CR){ + // // j_src_loc shoud be +1 + // dis_src_err_lat = _0_CR; + // j_src_loc++; + // } + // if (dis_src_err_r == _1_CR){ + // // k_src_loc shoud be +1 + // dis_src_err_r = _0_CR; + // k_src_loc++; + // } + + // std::cout << "src_lon, dis_src_lon, dis_src_err_lon : " << src_lon*RAD2DEG << ", " << dis_src_lon*RAD2DEG << ", " << dis_src_err_lon << std::endl; + // std::cout << "src_lat, dis_src_lat, dis_src_err_lat : " << src_lat*RAD2DEG << ", " << dis_src_lat*RAD2DEG << ", " << dis_src_err_lat << std::endl; + // std::cout << "src_r, dis_src_r, dis_src_err_r : " << src_r << ", " << dis_src_r << ", " << dis_src_err_r << std::endl; + + if (if_verbose){ + std::cout << "src positions lon lat r : " << src_lon << " " << src_lat << " " << src_r << std::endl; + std::cout << "src positions lon(deg) lat(deg) depth(km): " << src_lon*RAD2DEG << " " << src_lat*RAD2DEG << " " << radius2depth(src_r) << std::endl; + std::cout << "src discretized position id i j k : " << i_src_loc << " " << j_src_loc << " " << k_src_loc << std::endl; + std::cout << "src discretized position lon lat r : " << dis_src_lon << " " << dis_src_lat << " " << dis_src_r << std::endl; + std::cout << "src position bias lon lat r : " << error_lon << " " << error_lat << " " << error_r << std::endl; + std::cout << "src relative position bias lon lat r : " << dis_src_err_lon << " " << dis_src_err_lat << " " << dis_src_err_r << std::endl; + std::cout << "delta lon lat r : " << delta_lon << " " << delta_lat << " " << delta_r << std::endl; + } + if(if_verbose) std::cout << "source is in the subdomain of rank " << myrank << std::endl; + if(if_verbose) std::cout << "local index of the source: " << i_src_loc << " " << j_src_loc << " " << k_src_loc << std::endl; + } + + if(if_verbose) stdout_by_main("--- end source initialization ---"); + } +} + + +Source::~Source() { +} + + +CUSTOMREAL Source::get_fac_at_source(CUSTOMREAL *loc_array, bool check) { + + // calculate factor by the rank where the source is located and broadcast to all + + CUSTOMREAL fac = 0.0; + + if (is_in_subdomain) { + fac = (_1_CR - dis_src_err_r)*(_1_CR - dis_src_err_lat)*(_1_CR - dis_src_err_lon) * get_fac_at_point(loc_array,0,0,0) \ + + (_1_CR - dis_src_err_r)*(_1_CR - dis_src_err_lat)* dis_src_err_lon * get_fac_at_point(loc_array,1,0,0) \ + + (_1_CR - dis_src_err_r)* dis_src_err_lat *(_1_CR - dis_src_err_lon) * get_fac_at_point(loc_array,0,1,0) \ + + (_1_CR - dis_src_err_r)* dis_src_err_lat * dis_src_err_lon * get_fac_at_point(loc_array,1,1,0) \ + + dis_src_err_r *(_1_CR - dis_src_err_lat)*(_1_CR - dis_src_err_lon) * get_fac_at_point(loc_array,0,0,1) \ + + dis_src_err_r *(_1_CR - dis_src_err_lat)* dis_src_err_lon * get_fac_at_point(loc_array,1,0,1) \ + + dis_src_err_r * dis_src_err_lat *(_1_CR - dis_src_err_lon) * get_fac_at_point(loc_array,0,1,1) \ + + dis_src_err_r * dis_src_err_lat * dis_src_err_lon * get_fac_at_point(loc_array,1,1,1); + } else { + // do nothing + } + + //if (check && fac<0 && src_rank==myrank){ + if (check && is_in_subdomain){ + std::cout << "src positions lon lat r : " << src_lon << " " << src_lat << " " << src_r << std::endl; + std::cout << "src positions lon(deg) lat(deg) depth(km): " << src_lon*RAD2DEG << " " << src_lat*RAD2DEG << " " << radius2depth(src_r) << std::endl; + std::cout << "src discretized position id i j k : " << i_src_loc << " " << j_src_loc << " " << k_src_loc << std::endl; + std::cout << "src discretized position lon lat r : " << dis_src_lon << " " << dis_src_lat << " " << dis_src_r << std::endl; + std::cout << "src position bias lon lat r : " << error_lon << " " << error_lat << " " << error_r << std::endl; + std::cout << "src relative position bias lon lat r : " << dis_src_err_lon << " " << dis_src_err_lat << " " << dis_src_err_r << std::endl; + std::cout << "delta lon lat r : " << delta_lon << " " << delta_lat << " " << delta_r << std::endl; + std::cout << "source is in the subdomain of rank " << myrank << std::endl; + + // check loc_array value + std::cout << "loc_array value: " << std::endl; + std::cout << get_fac_at_point(loc_array,0,0,0) << ' ' << get_fac_at_point(loc_array,1,0,0) << ' ' << get_fac_at_point(loc_array,0,1,0) << ' ' << get_fac_at_point(loc_array,1,1,0) << std::endl; + std::cout << get_fac_at_point(loc_array,0,0,1) << ' ' << get_fac_at_point(loc_array,1,0,1) << ' ' << get_fac_at_point(loc_array,0,1,1) << ' ' << get_fac_at_point(loc_array,1,1,1) << std::endl; + std::cout << "fac: " << fac << std::endl; + + //exit(1); + } + + //broadcast_cr_single(fac, src_rank); + // std::cout << "interp: " << dis_src_err_r << ' ' << dis_src_err_lat << ' ' << dis_src_err_lon << ' ' << get_fac_at_point(loc_array,0,0,0) << std::endl; + + allreduce_cr_inplace(&fac, 1); + fac /= n_dom_src; + + if (check) + std::cout << "n_dom_src: " << n_dom_src << ", fac at last: " << fac << std::endl; + + + return fac; + + +} + + +CUSTOMREAL Source::get_fac_at_point(CUSTOMREAL* loc_array, int iplus, int jplus, int kplus){ + return loc_array[I2V(i_src_loc+iplus, j_src_loc+jplus, k_src_loc+kplus)]; +} \ No newline at end of file diff --git a/src/src_rec.cpp b/src/src_rec.cpp new file mode 100644 index 0000000..cf71a3b --- /dev/null +++ b/src/src_rec.cpp @@ -0,0 +1,1751 @@ +#include "src_rec.h" + + +// +// functions for processing src_rec_file +// + +void parse_src_rec_file(std::string& src_rec_file, \ + std::map& src_map, \ + std::map& rec_map, \ + std::map>>& data_map, \ + std::vector& src_name_list, \ + std::vector>>& srcrec_name_list){ + + // start timer + std::string timer_name = "parse_src_rec_file"; + Timer timer(timer_name); + + std::ifstream ifs; // dummy for all processes except world_rank 0 + std::stringstream ss_whole; // for parsing the whole file + std::stringstream ss; // for parsing each line + + // only world_rank 0 reads the file + //if (sim_rank == 0){ + ifs.open(src_rec_file); + // abort if file does not exist + if (!ifs.is_open()){ + std::cerr << "Error: src_rec_file " << src_rec_file << " does not exist!" << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + ss_whole << ifs.rdbuf(); + ifs.close(); + //} + + std::string line; + int cc = 0; // count the number of lines + int i_src_now = 0; // count the number of srcs + int ndata_tmp = 0; // count the number of receivers or differential traveltime data for each source + src_map.clear(); + rec_map.clear(); + data_map.clear(); + + std::string src_name; + CUSTOMREAL src_weight = 1.0; + CUSTOMREAL rec_weight = 1.0; + int src_id = -1; + + // temporary receiver name list for each source + // this stores station name and the data type ("abs", "cr" or "cs") for each data line. + std::vector> rec_name_list; + + while (true) { + + bool end_of_file = false; + bool skip_this_line = false; + + line.clear(); // clear the line before use + + // read a line + //if (sim_rank == 0){ + if (!std::getline(ss_whole, line)) + end_of_file = true; + //} + + // broadcast end_of_file + //broadcast_bool_single(end_of_file, 0); + + if (end_of_file) + break; + + // skip comment and empty lines + if (sim_rank == 0){ + if (line[0] == '#' || line.empty()) + skip_this_line = true; + } + + //broadcast_bool_single(skip_this_line, 0); + + if (skip_this_line) + continue; + + // parse the line + //int ntokens = 0; + std::string token; + std::vector tokens; + + //if (sim_rank==0){ + // erase the trailing space + line.erase(line.find_last_not_of(" \n\r\t")+1); + + // parse the line with arbitrary number of spaces + ss.clear(); // clear the stringstream before use + ss << line; + + while (std::getline(ss, token, ' ')) { + if (token.size() > 0) // skip the first spaces and multiple spaces + tokens.push_back(token); + } + + // length of tokens + //ntokens = tokens.size(); + //} + + // broadcast ntokens + //broadcast_i_single(ntokens, 0); + // broadcast tokens + //for (int i=0; i(std::stod(tokens[6])); + src.lat = static_cast(std::stod(tokens[7])); // in degree + src.lon = static_cast(std::stod(tokens[8])); // in degree + src.dep = static_cast(std::stod(tokens[9])); // source in km + src.mag = static_cast(std::stod(tokens[10])); + src.n_data = std::stoi(tokens[11]); + src.name = tokens[12]; + cc++; + + // check if tokens[13] exists, then read weight + if (tokens.size() > 13) + src_weight = static_cast(std::stod(tokens[13])); + else + src_weight = 1.0; // default weight + + // new source detected by its name + // TODO: add error check for duplicated source name (but different event info) + // if (src_map.find(src.name) == src_map.end()) + // src_map[src.name] = src; + + // whether the src.name exists or not, overwrite it. (it can overwrite the src_info in the cr_dif data, whose source infomation (e.g., ortime, Ndata) is incomplete.) + src_map[src.name] = src; + + src_id = src.id; + src_name = src.name; + + ndata_tmp = src.n_data; + src_name_list.push_back(src_name); // store order of sources in the file + + // source with no receiver is allowed (cc = 1, ndata_tmp = 0) + if (cc > ndata_tmp) { + // go to the next source + cc = 0; + i_src_now++; + + // store the receiver name list for the source + srcrec_name_list.push_back(rec_name_list); + // clear the temporary receiver name list + rec_name_list.clear(); + + // timer + if (i_src_now % 1000 == 0 && world_rank == 0) { + std::cout << "reading source " << i_src_now << " finished in " << timer.get_t() << " seconds. dt = " << timer.get_t_delta() << " seconds. \n"; + } + } + + } else { // read receiver(s) and travel time info + + // read single receiver or differential traveltime data + if (tokens.size() < 11) { + // store receiver name of onle receiver line in src rec file + std::vector rec_name_list_one_line; + + SrcRecInfo rec; + + rec.id = std::stoi(tokens[1]); + rec.name = tokens[2]; + rec.lat = static_cast(std::stod(tokens[3])); // in degree + rec.lon = static_cast(std::stod(tokens[4])); // in degree + rec.dep = static_cast(-1.0*std::stod(tokens[5])/1000.0); // convert elevation in meter to depth in km + + // new receiver detected by its name + if(rec_map.find(rec.name) == rec_map.end()) + rec_map[rec.name] = rec; + + // store temporary receiver name list for each source + rec_name_list_one_line.push_back(rec.name); + rec_name_list_one_line.push_back("abs"); + + // traveltime data + DataInfo data; + if (tokens.size() > 8) + rec_weight = static_cast(std::stod(tokens[8])); + else + rec_weight = 1.0; // default weight + + data.data_weight = src_weight * rec_weight; + data.weight = data.data_weight * abs_time_local_weight; + data.weight_reloc= data.data_weight * abs_time_local_weight_reloc; + data.phase = tokens[6]; + + data.is_src_rec = true; + data.id_src = src_id; + data.name_src = src_name; + data.id_rec = rec.id; + data.name_rec = rec.name; + data.travel_time_obs = static_cast(std::stod(tokens[7])); // store read data + + data_map[data.name_src][data.name_rec].push_back(data); + + // store receiver name of onle receiver line in src rec file + rec_name_list.push_back(rec_name_list_one_line); + + cc++; + + } else { + // read common source differential traveltime (cs_dif) or common receiver differential traveltime (cr_dif) + + std::vector rec_name_list_one_line; + + // read differential traveltime + SrcRecInfo rec; + rec.id = std::stoi(tokens[1]); + rec.name = tokens[2]; + rec.lat = static_cast(std::stod(tokens[3])); // in degree + rec.lon = static_cast(std::stod(tokens[4])); // in degree + rec.dep = static_cast(-1.0*std::stod(tokens[5])/1000.0); // convert elevation in meter to depth in km + + // new receiver detected by its name + if(rec_map.find(rec.name) == rec_map.end()) + rec_map[rec.name] = rec; + + // store temporary receiver name list for each source + rec_name_list_one_line.push_back(rec.name); + + + // differential traveltime data + DataInfo data; + if (tokens.size() > 13) + rec_weight = static_cast(std::stod(tokens[13])); + else + rec_weight = 1.0; // default weight + + data.data_weight = src_weight * rec_weight; + data.phase = tokens[11]; + + //data.id_src_single = src_id; + //data.name_src_single = src_name; + // use common variables with src-rec data + data.id_src = src_id; + data.name_src = src_name; + + // store the id and name of the first receiver (just used for key of the data_map) + data.id_rec = rec.id; + data.name_rec = rec.name; + + // determine this data is cr_dif or cs_dif + bool is_cr_dif = tokens[11].find("cr")!=std::string::npos; + + if (is_cr_dif) { + // cr_dif data + SrcRecInfo src2; + src2.id = std::stoi(tokens[6]); + src2.name = tokens[7]; + src2.lat = static_cast(std::stod(tokens[8])); // in degree + src2.lon = static_cast(std::stod(tokens[9])); // in degree + src2.dep = static_cast(std::stod(tokens[10])); // convert elevation in meter to depth in km + + // new source detected by its name + if (src_map.find(src2.name) == src_map.end()) + src_map[src2.name] = src2; + + // store temporary receiver(source) name list for each source + rec_name_list_one_line.push_back(src2.name); + rec_name_list_one_line.push_back("cr"); + // common receiver differential traveltime data + data.is_src_pair = true; + data.id_src_pair = {src_id, src2.id}; + data.name_src_pair = {src_name, src2.name}; + data.cr_dif_travel_time_obs = static_cast(std::stod(tokens[12])); // store read data + + data.weight = data.data_weight * cr_dif_time_local_weight; + data.weight_reloc = data.data_weight * cr_dif_time_local_weight_reloc; + data_map[data.name_src_pair[0]][data.name_rec].push_back(data); // USE ONE-DATAMAP-FOR-ONE-SRCREC-LINE + } else { + // cs_dif data + SrcRecInfo rec2; + rec2.id = std::stoi(tokens[6]); + rec2.name = tokens[7]; + rec2.lat = static_cast(std::stod(tokens[8])); // in degree + rec2.lon = static_cast(std::stod(tokens[9])); // in degree + rec2.dep = static_cast(-1.0*std::stod(tokens[10])/1000.0); // convert elevation in meter to depth in km + + // new receiver detected by its name + if(rec_map.find(rec2.name) == rec_map.end()) + rec_map[rec2.name] = rec2; + + // store temporary receiver name list for each source + rec_name_list_one_line.push_back(rec2.name); + rec_name_list_one_line.push_back("cs"); + + // common source differential traveltime data + data.is_rec_pair = true; + data.id_rec_pair = {rec.id, rec2.id}; + data.name_rec_pair = {rec.name, rec2.name}; + data.cs_dif_travel_time_obs = static_cast(std::stod(tokens[12])); // store read data + + data.weight = data.data_weight * cs_dif_time_local_weight; + data.weight_reloc = data.data_weight * cs_dif_time_local_weight_reloc; + data_map[data.name_src][data.name_rec_pair[0]].push_back(data); // USE ONE-DATAMAP-FOR-ONE-SRCREC-LINE + } + + // store receiver name of one receiver line in src rec file + rec_name_list.push_back(rec_name_list_one_line); + + cc++; + } + + if (cc > ndata_tmp) { + // go to the next source + cc = 0; + i_src_now++; + + // store the receiver name list for the source + srcrec_name_list.push_back(rec_name_list); + // clear the temporary receiver name list + rec_name_list.clear(); + + // timer + if (i_src_now % 1000 == 0 && world_rank == 0) { + std::cout << "reading source " << i_src_now << " finished in " << timer.get_t() << " seconds. dt = " << timer.get_t_delta() << " seconds. \n"; + } + } + } + + } catch (std::invalid_argument& e) { + std::cout << "Error: invalid argument in src_rec_file. Abort." << std::endl; + std::cout << "problematic line: \n\n" << line << std::endl; + std::cout << "Please carefully check whether n_data is consistent with the number of data of this earthquake." << std::endl << std::endl; + exit(1); + //MPI_Abort(MPI_COMM_WORLD, 1); + } + + /* + // print for DEBUG + for (auto& t : tokens) { + std::cout << t << "---"; + } + std::cout << std::endl; + */ + + } // end of while loop + + // indicate the number of sources and receivers, data_info + if (world_rank == 0){ + std::cout << "\nReading src_rec_file finished." << std::endl; + std::cout << "number of sources: " << src_map.size() << std::endl; + std::cout << "number of receivers: " << rec_map.size() << std::endl; + // std::cout << "number of data: " << data_map.size() << "\n" << std::endl; + } + + // indicate elapsed time + std::cout << "Total elapsed time for reading src_rec_file: " << timer.get_t() << " seconds.\n"; + + // check new version of src rec data + if (if_verbose){ + for(auto iter = src_map.begin(); iter != src_map.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for (auto iter = data_map.begin(); iter != data_map.end(); iter++){ + for (auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++){ + for (const auto& data : iter2->second) { + if (data.is_src_rec) { + std::cout << "source name: " << data.name_src + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.travel_time_obs + << std::endl; + } else if (data.is_rec_pair) { + std::cout << "source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << ", traveltime: " << data.cs_dif_travel_time_obs + << std::endl; + } else if (data.is_src_pair) { + std::cout << "source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.cr_dif_travel_time_obs + << std::endl; + } else { + std::cout << "error type of data" << std::endl; + } + } + } + } + + } +} + + +void parse_sta_correction_file(std::string& sta_correction_file, \ + std::map& rec_map){ + + // read station correction file + std::ifstream ifs; + std::stringstream ss, ss_whole; + + if (sim_rank == 0){ + ifs.open(sta_correction_file); + if (!ifs.is_open()){ + std::cout << "Error: cannot open sta_correction_file. Abort." << std::endl; + MPI_Abort(MPI_COMM_WORLD, 1); + } + ss_whole << ifs.rdbuf(); + ifs.close(); + } + + std::string line; + + while(true){ + bool end_of_file = false; + bool skip_this_line = false; + + line.clear(); + + // read a line + //if (sim_rank == 0){ + if (!std::getline(ss_whole,line)){ + end_of_file = true; + } + //} + + //broadcast_bool_single(end_of_file, 0); + + if (end_of_file){ + break; + } + + // skip this line if it is a comment line + //if (sim_rank == 0){ + if (line[0] == '#' || line.empty()){ + skip_this_line = true; + } + //} + + //broadcast_bool_single(skip_this_line, 0); + + if (skip_this_line) { + continue; + } + + // parse the line + //int ntokens = 0; + std::string token; + std::vector tokens; + + //if (sim_rank == 0){ + // erase the last space + line.erase(line.find_last_not_of(" \n\r\t")+1); + + // parse the line with arbitrary number of spaces + ss.clear(); + ss << line; + + while (std::getline(ss,token,' ')) { + if (token.size() > 0) + tokens.push_back(token); + } + // number of tokens + //ntokens = tokens.size(); + //} + + // broadcast ntokens + //broadcast_i_single(ntokens, 0); + // broadcast tokens + //for (int i=0; i(std::stod(tokens[1])); // in degree + // tmp_rec.lon = static_cast(std::stod(tokens[2])); // in degree + // tmp_rec.dep = static_cast(-1.0*std::stod(tokens[3])/1000.0); // convert elevation in meter to depth in km + // tmp_rec.sta_correct = static_cast(std::stod(tokens[4])); + // tmp_rec.sta_correct_kernel = 0.0; + // rec_map[tmp_sta_name] = tmp_rec; + std::cout << "Did not find station " << tmp_sta_name << " in the src_rec file. Omit this station correction." << std::endl; + } else { + // pre exist station + rec_map[tmp_sta_name].sta_correct = static_cast(std::stod(tokens[4])); + rec_map[tmp_sta_name].sta_correct_kernel = 0.0; + } + } catch (std::invalid_argument& e) { + std::cout << "Error: invalid argument in sta_correction_file. Abort." << std::endl; + std::cout << "problematic line: \n\n" << line << std::endl; + + exit(1); + //MPI_Abort(MPI_COMM_WORLD, 1); + } + } +} + + +void separate_region_and_tele_src_rec_data(std::map &src_map_back, + std::map &rec_map_back, + std::map>> &data_map_back, + std::map &src_map, + std::map &rec_map, + std::map>> &data_map, + std::map &src_map_tele, + std::map &rec_map_tele, + std::map>> &data_map_tele, + std::map &data_type, + int &N_abs_local_data, + int &N_cr_dif_local_data, + int &N_cs_dif_local_data, + int &N_teleseismic_data, + int &N_data, + const CUSTOMREAL min_lat, const CUSTOMREAL max_lat, + const CUSTOMREAL min_lon, const CUSTOMREAL max_lon, + const CUSTOMREAL min_dep, const CUSTOMREAL max_dep, + bool have_tele_data){ + // check if the source is inside the simulation boundary + + // initialize vectors for teleseismic events + rec_map_tele.clear(); + src_map_tele.clear(); + data_map_tele.clear(); + + // clear original src, rec, data + src_map.clear(); + rec_map.clear(); + data_map.clear(); + + // divide source list + // + // src_map_back ____> src_map + // \___> src_map_tele (teleseismic events) + // + for(auto iter = src_map_back.begin(); iter != src_map_back.end(); iter++){ + SrcRecInfo src = iter->second; + if (src.lat < min_lat || src.lat > max_lat \ + || src.lon < min_lon || src.lon > max_lon \ + || src.dep < min_dep || src.dep > max_dep){ + + // out of region (teleseismic events) + src.is_out_of_region = true; + src_map_tele[iter->first] = src; + + // set a flag on backup data (for output) + src_map_back[iter->first].is_out_of_region = true; + + } else { + // within region (local events) + src.is_out_of_region = false; + src_map[iter->first] = src; + + } + } + + // check receiver location + for(auto iter = rec_map_back.begin(); iter != rec_map_back.end(); iter++){ + SrcRecInfo rec = iter->second; + if (rec.lat < min_lat || rec.lat > max_lat \ + || rec.lon < min_lon || rec.lon > max_lon \ + || rec.dep < min_dep || rec.dep > max_dep){ + + std::cout << "ERROR: receiver " << rec.name + << ", lat: " << rec.lat + << ", lon: " << rec.lon + << ", dep: " << rec.dep + << " is out of region. Please check the src_rec file." << std::endl; + exit(1); + } + } + + // divide receiver and data list + // + // rec_map_back ____> rec_map + // \___> rec_map_tele + // data_map_back____> data_map + // \___> data_map_tele + // + // iterate over event + for (auto it_src = data_map_back.begin(); it_src != data_map_back.end(); it_src++){ + std::string name_src = it_src->first; + // iterate over stations + for (auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + // loop over all data belongs to each source-receiver combination + for (auto& data: it_rec->second){ + + // absolute traveltime + if(data.is_src_rec){ + std::string name_src = data.name_src; + std::string name_rec = data.name_rec; + + // if name_src is out of region + if(src_map_tele.find(name_src) != src_map_tele.end()){ + total_teleseismic_data_weight += data.data_weight; + data.weight = data.data_weight * teleseismic_weight; + total_teleseismic_data_weight_reloc += data.data_weight; + data.weight_reloc = data.data_weight * teleseismic_weight_reloc; + data_map_tele[name_src][name_rec].push_back(data); + rec_map_tele[name_rec] = rec_map_back[name_rec]; + data_type["tele"] = 1; + + // if name_src is in the region + } else { + total_abs_local_data_weight += data.data_weight; + total_abs_local_data_weight_reloc += data.data_weight; + + data_map[name_src][name_rec].push_back(data); + rec_map[name_rec] = rec_map_back[name_rec]; + data_type["abs"] = 1; + } + + // common receiver differential traveltime + } else if (data.is_src_pair){ + std::string name_src1 = data.name_src_pair[0]; + std::string name_src2 = data.name_src_pair[1]; + std::string name_rec = data.name_rec; + + // if both sources are out of region + if(src_map_tele.find(name_src1) != src_map_tele.end() \ + && src_map_tele.find(name_src2) != src_map_tele.end()){ + total_teleseismic_data_weight += data.data_weight; + data.weight = data.data_weight * teleseismic_weight; + total_teleseismic_data_weight_reloc += data.data_weight; + data.weight_reloc = data.data_weight * teleseismic_weight_reloc; + + data_map_tele[name_src1][name_rec].push_back(data); + rec_map_tele[name_rec] = rec_map_back[name_rec]; + data_type["tele"] = 1; + + // if both sources is in the region + } else if (src_map.find(name_src1) != src_map.end() \ + && src_map.find(name_src2) != src_map.end() ) { + total_cr_dif_local_data_weight += data.data_weight; + total_cr_dif_local_data_weight_reloc += data.data_weight; + data_map[name_src1][name_rec].push_back(data); + rec_map[name_rec] = rec_map_back[name_rec]; + data_type["cr_dif"] = 1; + + } else { + std::cout << "ERROR data: common receiver differential time, but one teleseismic source, one local source"; + exit(1); + } + + // common source differential traveltime + } else if (data.is_rec_pair){ + std::string name_src = data.name_src; + std::string name_rec1 = data.name_rec_pair[0]; + std::string name_rec2 = data.name_rec_pair[1]; + + // if name_src is out of region + if(src_map_tele.find(name_src) != src_map_tele.end() ){ + total_teleseismic_data_weight += data.data_weight; + data.weight = data.data_weight * teleseismic_weight; + total_teleseismic_data_weight_reloc += data.data_weight; + data.weight_reloc = data.data_weight * teleseismic_weight_reloc; + data_map_tele[name_src][name_rec1].push_back(data); + rec_map_tele[name_rec1] = rec_map_back[name_rec1]; + rec_map_tele[name_rec2] = rec_map_back[name_rec2]; + data_type["tele"] = 1; + + // if name_src is in the region + } else { + total_cs_dif_local_data_weight += data.data_weight; + total_cs_dif_local_data_weight_reloc += data.data_weight; + data_map[name_src][name_rec1].push_back(data); + rec_map[name_rec1] = rec_map_back[name_rec1]; + rec_map[name_rec2] = rec_map_back[name_rec2]; + data_type["cs_dif"] = 1; + } + } + + } // end loop std::vector + } // end it_rec + } // end it_src + + if((!have_tele_data) && (src_map_tele.size() > 0)){ + std::cout << "ERROR: have_tele_data is false, but there are earthquakes out of study region:" << std::endl; + for(auto iter = src_map_tele.begin(); iter != src_map_tele.end(); iter++){ + std::cout << "source name: " << iter->second.name + << ", lat: " << iter->second.lat + << ", lon: " << iter->second.lon + << ", dep: " << iter->second.dep + << std::endl; + } + std::cout << "Please set have_tele_data in InputParams.yaml to be TRUE, or remove above earthquakes" << std::endl; + exit(1); + } + + if((!have_tele_data) && (rec_map_tele.size() > 0)){ + std::cout << "ERROR: have_tele_data is false, but there are stations out of study region:" << std::endl; + for(auto iter = rec_map_tele.begin(); iter != rec_map_tele.end(); iter++){ + std::cout << "receiver name: " << iter->second.name + << ", lat: " << iter->second.lat + << ", lon: " << iter->second.lon + << ", dep: " << iter->second.dep + << std::endl; + } + std::cout << "Please set have_tele_data in InputParams.yaml to be TRUE, or remove above stations" << std::endl; + exit(1); + } + + + // + // balance the data weight + // + if (balance_data_weight){ + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for(auto& data: it_rec->second){ + // absolute traveltime + if(data.is_src_rec){ + data.weight = data.weight / total_abs_local_data_weight * (total_abs_local_data_weight + total_cr_dif_local_data_weight + total_cs_dif_local_data_weight); + // common receiver differential traveltime + } else if (data.is_src_pair){ + data.weight = data.weight / total_cr_dif_local_data_weight * (total_abs_local_data_weight + total_cr_dif_local_data_weight + total_cs_dif_local_data_weight); + // common source differential traveltime + } else if (data.is_rec_pair){ + data.weight = data.weight / total_cs_dif_local_data_weight * (total_abs_local_data_weight + total_cr_dif_local_data_weight + total_cs_dif_local_data_weight); + } + } + } + } + + // teleseismic data + for(auto it_src = data_map_tele.begin(); it_src != data_map_tele.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for (auto& data: it_rec->second){ + data.weight = data.weight / total_teleseismic_data_weight; + } + } + } + } + + if (balance_data_weight_reloc){ + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for(auto& data: it_rec->second){ + // absolute traveltime + if(data.is_src_rec){ + data.weight_reloc = data.weight_reloc / total_abs_local_data_weight_reloc * (total_abs_local_data_weight_reloc + total_cr_dif_local_data_weight_reloc + total_cs_dif_local_data_weight_reloc); + + // common receiver differential traveltime + } else if (data.is_src_pair){ + data.weight_reloc = data.weight_reloc / total_cr_dif_local_data_weight_reloc * (total_abs_local_data_weight_reloc + total_cr_dif_local_data_weight_reloc + total_cs_dif_local_data_weight_reloc); + + // common source differential traveltime + } else if (data.is_rec_pair){ + data.weight_reloc = data.weight_reloc / total_cs_dif_local_data_weight_reloc * (total_abs_local_data_weight_reloc + total_cr_dif_local_data_weight_reloc + total_cs_dif_local_data_weight_reloc); + } + } + } + } + } + + // + // count the number of data + // + // local data + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for (auto& data: it_rec->second){ + // absolute traveltime + if(data.is_src_rec){ + N_abs_local_data += 1; + + // common receiver differential traveltime + } else if (data.is_src_pair){ + N_cr_dif_local_data += 1; + + // common source differential traveltime + } else if (data.is_rec_pair){ + N_cs_dif_local_data += 1; + } + } + } + } + + // teleseismic data + for(auto it_src = data_map_tele.begin(); it_src != data_map_tele.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + N_teleseismic_data += it_rec->second.size(); // add the number of data + } + } + + // N_data is the total number of data + N_data = N_abs_local_data + N_cr_dif_local_data + N_cs_dif_local_data + N_teleseismic_data; + + + // check new version of src rec data + if (if_verbose){ + std::cout << "local data: " << std::endl; + + for(auto iter = src_map.begin(); iter != src_map.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for (auto iter = data_map.begin(); iter != data_map.end(); iter++){ + for (auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++){ + for (const auto& data : iter2->second) { + if (data.is_src_rec) { + std::cout << "source name: " << data.name_src + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.travel_time_obs + << std::endl; + } else if (data.is_rec_pair) { + std::cout << "source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << ", traveltime: " << data.cs_dif_travel_time_obs + << std::endl; + } else if (data.is_src_pair) { + std::cout << "source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.cr_dif_travel_time_obs + << std::endl; + } else { + std::cout << "error type of data" << std::endl; + } + } + } + } + + std::cout << std::endl << "tele data: " << std::endl; + + for(auto iter = src_map_tele.begin(); iter != src_map_tele.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map_tele.begin(); iter != rec_map_tele.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for (auto iter = data_map_tele.begin(); iter != data_map_tele.end(); iter++){ + for (auto iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++){ + for (const auto& data : iter2->second) { + if (data.is_src_rec) { + std::cout << "source name: " << data.name_src + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.travel_time_obs + << std::endl; + } else if (data.is_rec_pair) { + std::cout << "source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << ", traveltime: " << data.cs_dif_travel_time_obs + << std::endl; + } else if (data.is_src_pair) { + std::cout << "source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << ", traveltime: " << data.cr_dif_travel_time_obs + << std::endl; + } else { + std::cout << "error type of data" << std::endl; + } + } + } + } + } + +} + + +void do_swap_src_rec(std::map &src_map, \ + std::map &rec_map, \ + std::map>> &data_map, + std::vector &src_name_list) { + + // swap src/rec points + // at this moment, all the sources are divided into src_points (regional) and tele_src_points (teleseismic) + + // Start timer + std::string timer_name = "swap_src_rec"; + Timer timer(timer_name); + + std::map tmp_src_rec_map = src_map; + src_map = rec_map; + rec_map = tmp_src_rec_map; + + std::map>> tmp_data_map;// = data_map; + + // for each element of src_map, count the number of rec_map with the same value of + + for (auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ // loop over src + for (auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ // loop over rec + for (const auto& data: it_rec->second){ // loop over datainfo + + DataInfo tmp_data = data; + + if (tmp_data.is_src_rec){ + // absolute traveltime -> absolute traveltime + // | abs | | abs | + // | s0 - r0 | -> | r0 - s0 | + // | | | | + // | | | | + + tmp_data.id_src = data.id_rec; + tmp_data.name_src = data.name_rec; + tmp_data.id_rec = data.id_src; + tmp_data.name_rec = data.name_src; + tmp_data.dual_data = false; // is not a dual data. contribute both objective function and kernel + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + + + } else if (tmp_data.is_rec_pair) { + // common source differential traveltime -> common receiver differential traveltime + // | cs_dif | | cr_dif | + // | s0 - r1 | -> | r1 - s0 r2 - s0 | + // | | | | | | | + // | r2 | | r2 r1 | + + tmp_data.is_rec_pair = false; + tmp_data.is_src_pair = true; + + tmp_data.id_src_pair = data.id_rec_pair; + tmp_data.name_src_pair = data.name_rec_pair; + + tmp_data.id_rec = data.id_src; + tmp_data.name_rec = data.name_src; + + tmp_data.cr_dif_travel_time_obs = data.cs_dif_travel_time_obs; + + tmp_data.id_rec_pair = {-1, -1}; + tmp_data.name_rec_pair = {"unknown", "unknown"}; + + // one data + tmp_data.dual_data = false; // one is not a dual data. contribute both objective function and kernel + tmp_data.name_src = tmp_data.name_src_pair[0]; + tmp_data.id_src = tmp_data.id_src_pair[0]; + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + + // the other data + // Note: name_src = cr_dif time always represent time(src, rec1) - time(src,rec2). Thus, -1.0 is necessary + // Meanwhile, name_src(key) must equal data.name_src_pair[0] and data.name_src + tmp_data.dual_data = true; // the other is a dual data. contribute kernel only + tmp_data.name_src_pair = {data.name_rec_pair[1],data.name_rec_pair[0]}; + tmp_data.cr_dif_travel_time_obs = -1.0 * data.cs_dif_travel_time_obs; + tmp_data.name_src = tmp_data.name_src_pair[0]; + tmp_data.id_src = tmp_data.id_src_pair[0]; + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + + + } else if (tmp_data.is_src_pair) { + // common receiver differential traveltime -> common source differential traveltime + // | cr_dif | | cs_dif | + // | s0 - r3 | -> | r3 - s0 | + // | | | | | | + // | s1 | | s1 | + + tmp_data.is_src_pair = false; + tmp_data.is_rec_pair = true; + + tmp_data.id_rec_pair = data.id_src_pair; + tmp_data.name_rec_pair = data.name_src_pair; + + tmp_data.id_src = data.id_rec; + tmp_data.name_src = data.name_rec; + + tmp_data.cs_dif_travel_time_obs = data.cr_dif_travel_time_obs; + + tmp_data.id_src_pair = {-1, -1}; + tmp_data.name_src_pair = {"unknown", "unknown"}; + + // only need one data for common source dif + tmp_data.dual_data = false; // one is not a dual data. contribute both objective function and kernel + tmp_data.name_rec = tmp_data.name_rec_pair[0]; + tmp_data.id_rec = tmp_data.id_rec_pair[0]; + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + + } + + } + } + } + + // replace data_map with swapped data map + // TODO tmp_data_map has strange elements here + data_map = tmp_data_map; + + // set n_data (number of receivers for each source) + for (auto it_src = src_map.begin(); it_src != src_map.end(); it_src++){ + it_src->second.n_data = data_map[it_src->second.name].size(); + } + + // swap total_data_weight + CUSTOMREAL tmp = total_cr_dif_local_data_weight; + total_cr_dif_local_data_weight = total_cs_dif_local_data_weight; + total_cs_dif_local_data_weight = tmp; + + // create new src_id2name_all from swapped src_map + src_name_list.clear(); + for (auto iter = src_map.begin(); iter != src_map.end(); iter++){ + src_name_list.push_back(iter->first); + } + + // check new version of src rec data + if (if_verbose){ + std::cout << "do swap sources and receivers" << std::endl; + + for(auto iter = src_map.begin(); iter != src_map.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for(const auto& data: it_rec->second){ + + if (data.is_src_rec){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", absolute traveltime: " << data.travel_time_obs + << ", source name: " << data.name_src + << ", receiver name: " << data.name_rec + << std::endl; + } else if (data.is_rec_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common source differential traveltime: " << data.cs_dif_travel_time_obs + << ", source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << std::endl; + } else if (data.is_src_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common receiver differential traveltime: " << data.cr_dif_travel_time_obs + << ", source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << std::endl; + } + } + } + } + std::cout << "data map size: " << data_map.size() << std::endl; + } + + // indicate elapsed time + std::cout << "Total elapsed time for swapping src rec: " << timer.get_t() << " seconds.\n"; +} + +// do not swap source and receiver, process common receiver differential traveltime data +void do_not_swap_src_rec(std::map &src_map, \ + std::map &rec_map, \ + std::map>> &data_map, + std::vector &src_name_list) { + + // do not swap src/rec points + + // Start timer + std::string timer_name = "do_not_swap_src_rec"; + Timer timer(timer_name); + + std::map>> tmp_data_map;// = data_map; + + // for each element of src_map, count the number of rec_map with the same value of + + for (auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ // loop over src + for (auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ // loop over rec + for (const auto& data: it_rec->second){ // loop over datainfo + + DataInfo tmp_data = data; + + // common receiver differential traveltime + if (tmp_data.is_src_pair) { + // keep the original data, meanwhile, add cr_dif data with the other source + // | cr_dif | | cr_dif | + // | s0 - r3 | -> | s0 - r3 s1 - r3 | + // | | | | | | | + // | s1 | | s1 s0 | + tmp_data.dual_data = false; // one is not a dual data. contribute both objective function and kernel + tmp_data_map[tmp_data.name_src_pair[0]][tmp_data.name_rec].push_back(tmp_data); // original data + + // the other data with the other source. + // Note: name_src = cr_dif time always represent time(src1, rec) - time(src2,rec). Thus, -1 is necessary + // Meanwhile, name_src(key) must equal name_src_pair[0] + tmp_data.dual_data = true; // the other is a dual data. contribute kernel only + tmp_data.name_src = data.name_src_pair[1]; + tmp_data.id_src = data.id_src_pair[1]; + tmp_data.name_src_pair = {data.name_src_pair[1],data.name_src_pair[0]}; + tmp_data.id_src_pair = {data.id_src_pair[1],data.id_src_pair[0]}; + tmp_data.cr_dif_travel_time_obs = -1.0 * data.cr_dif_travel_time_obs; + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + + } else { // abs and cs_dif data does not change + // abs data and cs_dif data remain unchanged + // | abs | cs_dif | + // | s0 - r0 | s0 - r1 | + // | | | | + // | | r2 | + tmp_data.dual_data = false; // one is not a dual data. contribute both objective function and kernel + tmp_data_map[tmp_data.name_src][tmp_data.name_rec].push_back(tmp_data); + } + + } + } + } + + // replace data_map with swapped data map + // TODO tmp_data_map has strange elements here + data_map = tmp_data_map; + + + // create new src_id2name_all from swapped src_map + src_name_list.clear(); + for (auto iter = src_map.begin(); iter != src_map.end(); iter++){ + src_name_list.push_back(iter->first); + } + + // check new version of src rec data + if (if_verbose){ + std::cout << "do not swap sources and receivers" << std::endl; + + for(auto iter = src_map.begin(); iter != src_map.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for(const auto& data: it_rec->second){ + + if (data.is_src_rec){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", absolute traveltime: " << data.travel_time_obs + << ", source name: " << data.name_src + << ", receiver name: " << data.name_rec + << std::endl; + } else if (data.is_rec_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common source differential traveltime: " << data.cs_dif_travel_time_obs + << ", source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << std::endl; + } else if (data.is_src_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common receiver differential traveltime: " << data.cr_dif_travel_time_obs + << ", source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << std::endl; + } + } + } + } + std::cout << "data map size: " << data_map.size() << std::endl; + } + + // indicate elapsed time + std::cout << "Total elapsed time for not swapping src rec: " << timer.get_t() << " seconds.\n"; +} + + + +// merge the teleseismic data lsit into the local data list +void merge_region_and_tele_src(std::map &src_map, + std::map &rec_map, + std::map>> &data_map, + std::vector &src_name_list, + std::map &src_map_tele, + std::map &rec_map_tele, + std::map>> &data_map_tele){ + if(src_map_tele.size() > 0) { + for (auto iter = src_map_tele.cbegin(); iter != src_map_tele.cend();){ + src_map[iter->first] = iter->second; + // erase pushed data + src_map_tele.erase(iter++); + } + + for (auto iter = rec_map_tele.cbegin(); iter != rec_map_tele.cend();){ + rec_map[iter->first] = iter->second; + // erase pushed data + rec_map_tele.erase(iter++); + } + + //data_map.insert(data_map_tele.begin(), data_map_tele.end()); + // instead of insert, we use manual loop to avoid unefficent memory allocation + for (auto iter = data_map_tele.cbegin(); iter != data_map_tele.cend();){ + for (auto iter2 = iter->second.cbegin(); iter2 != iter->second.cend();){ + if (data_map[iter->first][iter2->first].size()==0) { + data_map[iter->first][iter2->first] = iter2->second; + // erase pushed data + data_map_tele[iter->first].erase(iter2++); + } else { + data_map[iter->first][iter2->first].insert(data_map[iter->first][iter2->first].end(), iter2->second.begin(), iter2->second.end()); + // erase pushed data + data_map_tele[iter->first].erase(iter2++); + } + + } + // erase pushed data + data_map_tele.erase(iter++); + } + } + + // create new src_id2name_all from merged src_map + src_name_list.clear(); + for (auto iter = src_map.begin(); iter != src_map.end(); iter++){ + src_name_list.push_back(iter->first); + } + + // give new event id (accourding to the name) + int id_count = 0; + for (auto iter = src_map.begin(); iter != src_map.end(); iter ++){ + iter->second.id = id_count; + id_count += 1; + } + + if (if_verbose){ + std::cout << "merge region and tele src" << std::endl; + + for(auto iter = src_map.begin(); iter != src_map.end(); iter++){ + std::cout << "source id: " << iter->second.id + << ", source name: " << iter->second.name + << std::endl; + } + + for(auto iter = rec_map.begin(); iter != rec_map.end(); iter++){ + std::cout << "receiver id: " << iter->second.id + << ", receiver name: " << iter->second.name + << std::endl; + } + + for(auto it_src = data_map.begin(); it_src != data_map.end(); it_src++){ + for(auto it_rec = it_src->second.begin(); it_rec != it_src->second.end(); it_rec++){ + for(const auto& data: it_rec->second){ + + if (data.is_src_rec){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", absolute traveltime: " << data.travel_time_obs + << ", source name: " << data.name_src + << ", receiver name: " << data.name_rec + << std::endl; + } else if (data.is_rec_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common source differential traveltime: " << data.cs_dif_travel_time_obs + << ", source name: " << data.name_src + << ", receiver pair name: " << data.name_rec_pair[0] + << ", " << data.name_rec_pair[1] + << std::endl; + } else if (data.is_src_pair){ + std::cout << "key: it_src, it_rec: " << it_src->first << ", " << it_rec->first + << ", common receiver differential traveltime: " << data.cr_dif_travel_time_obs + << ", source pair name: " << data.name_src_pair[0] + << ", " << data.name_src_pair[1] + << ", receiver name: " << data.name_rec + << std::endl; + } + } + } + } + std::cout << "data map size: " << data_map.size() << std::endl; + } +} + + +// distribute the source/receiver list and data list to all the processors +void distribute_src_rec_data(std::map& src_map, \ + std::map& rec_map, \ + std::map>>& data_map, \ + std::vector& src_name_list, \ + std::map& src_map_this_sim, \ + std::map& rec_map_this_sim, \ + std::map>>& data_map_this_sim, \ + std::vector& src_name_list_this_sim, \ + std::vector& rec_name_list_this_sim){ + + + // this process is done by only the processes which stores the data. + if (proc_store_srcrec) { + + // number of total sources + int n_src = 0; + + // number of total sources + if (proc_read_srcrec) + n_src = src_map.size(); + + // broadcast the number of sources to all the processors + broadcast_i_single_inter_sim(n_src, 0); // inter simulutaneous run group + + // store the total number of sources + nsrc_total = n_src; + + // assign sources to each simulutaneous run group + for (int i_src = 0; i_src < n_src; i_src++) { + // id of simulutaneous run group to which the i_src-th source belongs + int dst_id_sim = select_id_sim_for_src(i_src, n_sims); + + // broadcast the source name + std::string src_name; + if (id_sim == 0 && subdom_main){ + src_name = src_name_list[i_src]; + } + + broadcast_str_inter_sim(src_name, 0); // inter simulutaneous run group + if (id_sim==0){ // sender + + if (dst_id_sim == id_sim){ // this source belongs to this simulutaneous run group + + // src + src_map_this_sim[src_name] = src_map[src_name]; + // data + for (auto iter = data_map[src_name].begin(); iter != data_map[src_name].end(); iter++){ + // rec by data + rec_map_this_sim[iter->first] = rec_map[iter->first]; + rec_name_list_this_sim.push_back(iter->first); + + for (auto& data : iter->second){ + data_map_this_sim[src_name][iter->first].push_back(data); + + // store the second receiver for rec_pair + if (data.is_rec_pair){ + rec_map_this_sim[data.name_rec_pair[1]] = rec_map[data.name_rec_pair[1]]; + rec_name_list_this_sim.push_back(data.name_rec_pair[1]); + } + } + } + + // add the source name to the source name list + src_name_list_this_sim.push_back(src_name); + + } else { // this source belongs to non-main simulutaneous run group + // send src + send_src_info_inter_sim(src_map[src_name], dst_id_sim); + + // send number of receivers belonging to src + int n_rec = data_map[src_name].size(); + send_i_single_sim(&n_rec, dst_id_sim); + + if (n_rec > 0){ + + // send data_map[name_i_src] to the main process of dst_id_sim + for (auto iter = data_map[src_name].begin(); iter != data_map[src_name].end(); iter++){ + + // send rec_map[name_i_rec] to the main process of dst_id_sim + send_rec_info_inter_sim(rec_map[iter->first], dst_id_sim); + + // send data_map[name_i_src].size() to the main process of dst_id_sim + int n_data = iter->second.size(); + send_i_single_sim(&n_data, dst_id_sim); + // send data + for (auto& data : iter->second) { + send_data_info_inter_sim(data, dst_id_sim); + + // send the second receiver for rec_pair + if (data.is_rec_pair) + send_rec_info_inter_sim(rec_map[data.name_rec_pair[1]], dst_id_sim); + } + + } + } // if (n_data > 0) + + } + } else { // receive + if (dst_id_sim == id_sim){ + + // receive src/rec_points from the main process of dst_id_sim + + // prepare SrcRecInfo object for receiving the contents + SrcRecInfo tmp_SrcInfo; + // receive src + recv_src_info_inter_sim(tmp_SrcInfo, 0); + + // add the received src_map to the src_map + src_map_this_sim[tmp_SrcInfo.name] = tmp_SrcInfo; + + // recv number of receivers belonging to src + int n_rec = 0; + recv_i_single_sim(&n_rec, 0); + + // receive data_info from the main process of dst_id_sim + for (int i_srcrec = 0; i_srcrec < n_rec; i_srcrec++){ + + // recv data_map[name_i_src].size() from the main process of dst_id_sim + SrcRecInfo tmp_RecInfo; + recv_rec_info_inter_sim(tmp_RecInfo, 0); + + rec_map_this_sim[tmp_RecInfo.name] = tmp_RecInfo; + rec_name_list_this_sim.push_back(tmp_RecInfo.name); + + int n_data = 0; + recv_i_single_sim(&n_data, 0); + + for (int i_data = 0; i_data < n_data; i_data++){ + // prepare DataInfo object for receiving the contents + DataInfo tmp_DataInfo; + // receive data_info from the main process of dst_id_sim + recv_data_info_inter_sim(tmp_DataInfo, 0); + // add the received data_info to the data_info + data_map_this_sim[tmp_DataInfo.name_src][tmp_DataInfo.name_rec].push_back(tmp_DataInfo); + + // store the second receiver for rec_pair + if (tmp_DataInfo.is_rec_pair){ + recv_rec_info_inter_sim(rec_map_this_sim[tmp_DataInfo.name_rec_pair[1]], 0); + rec_name_list_this_sim.push_back(tmp_DataInfo.name_rec_pair[1]); + } + } + + } // end of for i_srcrec + + // add the source name to the source name list + src_name_list_this_sim.push_back(src_name); + + } else { + // do nothing + } + + } // end of if (id_sim==0) + + } // end of for i_src + + + // make rec_name_list_this_sim unique using unique + std::sort(rec_name_list_this_sim.begin(), rec_name_list_this_sim.end()); + rec_name_list_this_sim.erase(std::unique(rec_name_list_this_sim.begin(), rec_name_list_this_sim.end()), rec_name_list_this_sim.end()); + + } // end of if (proc_store_srcrec) + + // check IP.src_ids_this_sim for this rank + if (myrank==0 && if_verbose) { + std::cout << id_sim << "assigned src id(name) : "; + for (auto iter = src_map_this_sim.begin(); iter != src_map_this_sim.end(); iter++){ + std::cout << iter->second.id << "(" << iter->second.name << ") "; + } + std::cout << std::endl; + } + +} + + +void prepare_src_map_for_2d_solver(std::map& src_map_all, \ + std::map& src_map, \ + std::vector& src_id2name_2d, \ + std::map& src_map_2d) { + // + // src_id2name_2d: list of src name assigned to this simultaneous run group + // src_map_2d: src map assigned to this simultaneous run group + + if (proc_store_srcrec) { + + std::map tmp_src_map_unique; + std::vector tmp_src_name_list_unique; + + // at first, make a depth-unique source list in the main process from src_map_tele + if (proc_read_srcrec) { + + for (auto iter = src_map_all.begin(); iter != src_map_all.end(); iter++){ + + // skip if this is not a teleseismic source + if (!iter->second.is_out_of_region) + continue; + + std::string tmp_name = iter->second.name; + + // check if there is no element in tmp_src_map_unique with the same iter->second.depth + bool if_unique = true; + for (auto iter2 = tmp_src_map_unique.begin(); iter2 != tmp_src_map_unique.end(); iter2++){ + if (iter2->second.dep == iter->second.dep){ + if_unique = false; + break; + } + } + + if (if_unique) { + tmp_src_map_unique[tmp_name] = iter->second; + tmp_src_name_list_unique.push_back(tmp_name); + } + } + } + + // broadcast the number of unique sources to all processes + int n_src_unique = 0; + if (proc_read_srcrec) n_src_unique = tmp_src_map_unique.size(); + broadcast_i_single_inter_sim(n_src_unique, 0); // inter simulutaneous run group + + // iterate over all the unique sources + for (int i_src_unique = 0; i_src_unique < n_src_unique; i_src_unique++){ + int dst_id_sim = select_id_sim_for_src(i_src_unique, n_sims); + + if (id_sim==0){ + if (dst_id_sim==id_sim){ + // store + src_map_2d[tmp_src_name_list_unique[i_src_unique]] = tmp_src_map_unique[tmp_src_name_list_unique[i_src_unique]]; + src_id2name_2d.push_back(tmp_src_name_list_unique[i_src_unique]); + } else { + // send to dst_id_sim + send_src_info_inter_sim(tmp_src_map_unique[tmp_src_name_list_unique[i_src_unique]], dst_id_sim); + } + } else { + if (dst_id_sim==id_sim){ + // receive from 0 + SrcRecInfo tmp_src; + recv_src_info_inter_sim(tmp_src, 0); + src_map_2d[tmp_src.name] = tmp_src; + src_id2name_2d.push_back(tmp_src.name); + } else { + // do nothing + } + } + } + } // end of if (proc_store_srcrec) + + // print the number of sources ssigned to this simultaneous run group + for (int i_sim=0; i_sim < n_sims; i_sim++){ + if (id_sim==i_sim && subdom_main && id_subdomain==0){ + std::cout << "id_sim = " << id_sim << " : " << src_map_2d.size() << " 2d-sources assigned." << std::endl; + } + synchronize_all_world(); + } + +} + + +// +// Belows are the function for send/receiving SrcRecInfo, DataInfo object +// so when you add the member in those class, it will be necessary to modify +// the functions below for sharing the new member. +// + +void send_src_info_inter_sim(SrcRecInfo &src, int dest){ + + send_i_single_sim(&src.id, dest); + send_i_single_sim(&src.year , dest); + send_i_single_sim(&src.month, dest); + send_i_single_sim(&src.day , dest); + send_i_single_sim(&src.hour , dest); + send_i_single_sim(&src.min , dest); + send_cr_single_sim(&src.sec, dest); + send_cr_single_sim(&src.lat, dest); + send_cr_single_sim(&src.lon, dest); + send_cr_single_sim(&src.dep, dest); + send_cr_single_sim(&src.mag, dest); + send_i_single_sim(&src.n_data, dest); + send_str_sim(src.name, dest); + send_bool_single_sim(&src.is_out_of_region, dest); + +} + +void recv_src_info_inter_sim(SrcRecInfo &src, int orig){ + + recv_i_single_sim(&src.id, orig); + recv_i_single_sim(&src.year , orig); + recv_i_single_sim(&src.month, orig); + recv_i_single_sim(&src.day , orig); + recv_i_single_sim(&src.hour , orig); + recv_i_single_sim(&src.min , orig); + recv_cr_single_sim(&src.sec, orig); + recv_cr_single_sim(&src.lat, orig); + recv_cr_single_sim(&src.lon, orig); + recv_cr_single_sim(&src.dep, orig); + recv_cr_single_sim(&src.mag, orig); + recv_i_single_sim(&src.n_data, orig); + recv_str_sim(src.name, orig); + recv_bool_single_sim(&src.is_out_of_region, orig); +} + + +void broadcast_src_info_intra_sim(SrcRecInfo& src, int orig){ + broadcast_i_single(src.id, orig); + //broadcast_i_single(src.year , orig); + //broadcast_i_single(src.month, orig); + //broadcast_i_single(src.day , orig); + //broadcast_i_single(src.hour , orig); + //broadcast_i_single(src.min , orig); + //broadcast_cr_single(src.sec, orig); + broadcast_cr_single(src.lat, orig); + broadcast_cr_single(src.lon, orig); + broadcast_cr_single(src.dep, orig); + //broadcast_cr_single(src.mag, orig); + broadcast_i_single(src.n_data, orig); + broadcast_str(src.name, orig); + broadcast_bool_single(src.is_out_of_region, orig); +} + + +void send_rec_info_inter_sim(SrcRecInfo &rec, int dest){ + + send_i_single_sim(&rec.id, dest); + send_str_sim(rec.name, dest); + send_cr_single_sim(&rec.lon, dest); + send_cr_single_sim(&rec.lat, dest); + send_cr_single_sim(&rec.dep, dest); +} + + +void recv_rec_info_inter_sim(SrcRecInfo &rec, int orig){ + + recv_i_single_sim(&rec.id, orig); + recv_str_sim(rec.name, orig); + recv_cr_single_sim(&rec.lon, orig); + recv_cr_single_sim(&rec.lat, orig); + recv_cr_single_sim(&rec.dep, orig); +} + + +void broadcast_rec_info_intra_sim(SrcRecInfo& rec, int orig){ + broadcast_i_single(rec.id, orig); + broadcast_str(rec.name, orig); + broadcast_cr_single(rec.lon, orig); + broadcast_cr_single(rec.lat, orig); + broadcast_cr_single(rec.dep, orig); + broadcast_cr_single(rec.adjoint_source, orig); + broadcast_cr_single(rec.adjoint_source_density, orig); + broadcast_bool_single(rec.is_stop, orig); +} + +void send_data_info_inter_sim(DataInfo &data, int dest){ + + send_cr_single_sim(&data.data_weight, dest); + send_cr_single_sim(&data.weight, dest); + send_cr_single_sim(&data.weight_reloc, dest); + send_str_sim(data.phase, dest); + + send_i_single_sim(&data.id_src, dest); + send_str_sim(data.name_src, dest); + send_i_single_sim(&data.id_rec, dest); + send_str_sim(data.name_rec, dest); + + send_bool_single_sim(&data.is_src_rec, dest); + send_bool_single_sim(&data.is_rec_pair, dest); + send_bool_single_sim(&data.is_src_pair, dest); + + send_bool_single_sim(&data.dual_data, dest); + + if (data.is_src_rec){ + send_cr_single_sim(&data.travel_time_obs, dest); + } + + if (data.is_rec_pair){ + //send_i_single_sim(&data.id_src_single, dest); + //send_str_sim(data.name_src_single, dest); + for (int ipair=0; ipair<2; ipair++){ + send_i_single_sim(&data.id_rec_pair[ipair], dest); + send_str_sim(data.name_rec_pair[ipair], dest); + } + send_cr_single_sim(&data.cs_dif_travel_time_obs, dest); + } + + if (data.is_src_pair){ + send_i_single_sim(&data.id_rec, dest); + send_str_sim(data.name_rec, dest); + for (int ipair=0; ipair<2; ipair++){ + send_i_single_sim(&data.id_src_pair[ipair], dest); + send_str_sim(data.name_src_pair[ipair], dest); + } + send_cr_single_sim(&data.cr_dif_travel_time_obs, dest); + } +} + + +void recv_data_info_inter_sim(DataInfo &data, int orig){ + + recv_cr_single_sim(&data.data_weight, orig); + recv_cr_single_sim(&data.weight, orig); + recv_cr_single_sim(&data.weight_reloc, orig); + recv_str_sim(data.phase, orig); + + recv_i_single_sim(&data.id_src, orig); + recv_str_sim(data.name_src, orig); + recv_i_single_sim(&data.id_rec, orig); + recv_str_sim(data.name_rec, orig); + + recv_bool_single_sim(&data.is_src_rec, orig); + recv_bool_single_sim(&data.is_rec_pair, orig); + recv_bool_single_sim(&data.is_src_pair, orig); + + recv_bool_single_sim(&data.dual_data, orig); + + if (data.is_src_rec){ + recv_cr_single_sim(&data.travel_time_obs, orig); + } + + if (data.is_rec_pair){ + //recv_i_single_sim(&data.id_src_single, orig); + //recv_str_sim(data.name_src_single, orig); + for (int ipair=0; ipair<2; ipair++){ + recv_i_single_sim(&data.id_rec_pair[ipair], orig); + recv_str_sim(data.name_rec_pair[ipair], orig); + } + recv_cr_single_sim(&data.cs_dif_travel_time_obs, orig); + } + + if (data.is_src_pair){ + recv_i_single_sim(&data.id_rec, orig); + recv_str_sim(data.name_rec, orig); + for (int ipair=0; ipair<2; ipair++){ + recv_i_single_sim(&data.id_src_pair[ipair], orig); + recv_str_sim(data.name_src_pair[ipair], orig); + } + recv_cr_single_sim(&data.cr_dif_travel_time_obs, orig); + } + +} diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3180ea1ec2bcd4390e9451437888814769ef7f2f GIT binary patch literal 6148 zcmeHKJ5Iwu5Pcg`#2`UR$}Q-qasv~Y9w{vnAs7LY9Y;7&`v{ze3s7?--psC|Sat-W z0EA|wnYSL#?C0&u;|1WRPx%BG0~k>S2MJA&$a~R_45CL~I_={TH6Bo5iK|YuIsPI8 zvUf+^vn8H!i|zfZQQ{f}isEiEyQ#{RPCt1){5+$qvTRXQ3r0%+C-3XGv#(_3-^g0s zZ_RFB&M^|6zydkX;F@cyY3tS+E-y~|qjt=@r@yl5ooi2IYku<=nV*RVVr_c1Pw*aQsea5^&ki6gssLvcDf{a(Z2(tu`-0b`)ez+QM9OZ`9JegAJK*^@C~ z4E!qw+%TJEQ!Xji*3ROj)_UrkDk5=Bz)cDpT8bGfrTCbtLcf;=F^$*+q=#ZZ0!o7! JW8g;__yDd_TIm1) literal 0 HcmV?d00001 diff --git a/test/clean_test.sh b/test/clean_test.sh new file mode 100755 index 0000000..39bcabe --- /dev/null +++ b/test/clean_test.sh @@ -0,0 +1,36 @@ +# target directory to be cleaned +TARGET_DIR=$1 + +if [ -z $TARGET_DIR ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ ! -d $TARGET_DIR ]; then + echo "Target directory $TARGET_DIR does not exist" exit 1 +fi + +# .h5 files +find $TARGET_DIR -name "*.h5" -exec rm {} \; +# erase test_model_* +find $TARGET_DIR -name "test_model_*" -exec rm {} \; +# erase OUTPUT_FILES directory +find $TARGET_DIR -name "OUTPUT_FILES" -exec rm -rf {} \; +# erase src_rec_test* +find $TARGET_DIR -name "src_rec_test*" -exec rm {} \; +# erase objective_function.txt +find $TARGET_DIR -name "objective_function.txt" -exec rm {} \; +# erase files in fortran_code/ega5/output/ +find $TARGET_DIR/fortran_code/ega5/output -name "*" -exec rm {} \; +# erase files in fortran_code/a.out +find $TARGET_DIR/fortran_code/a.out -name "*" -exec rm {} \; +# erase files in fortran_code/ega5/output/tele_traveltime_field +find $TARGET_DIR/fortran_code/ega5/output/tele_traveltime_field -name "*" -exec rm {} \; +# erase cuda_device_info.txt +find $TARGET_DIR -name "cuda_device_info.txt" -exec rm {} \; +# erase error_message_*.txt +find $TARGET_DIR -name "error_message_*.txt" -exec rm {} \; +# erase time*.txt +find $TARGET_DIR -name "time*.txt" -exec rm {} \; +# erase log +find $TARGET_DIR -name "log" -exec rm {} \; \ No newline at end of file diff --git a/test/inversion_small/README.md b/test/inversion_small/README.md new file mode 100644 index 0000000..18cbaf5 --- /dev/null +++ b/test/inversion_small/README.md @@ -0,0 +1,28 @@ +# Inversion test + +This is an example for inversion calculation with small grid. + +![](img/result_fun.png) + +1. Run all cells of `make_test_model.ipynb` or python script `make_test_mode.py` for creating necessary input files: + - source, receiver file (src_rec_test.dat) + - true model (test_model_true.h5) + - initial model (test_model_init.h5) + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations. +The calculated travel time at the stations is saved in the file `src_rec_test_out.dat` +Following command will run the forward simulation with the true model +``` bash +mpirun --oversubscribe -n 8 ../../build/bin/TOMOATT -i input_params_pre.yml +``` +Volumetric output data is saved in the file `OUTPUT_FILES/out_data_sim_0.h5`. +This file may be visualized by paraview with opening the index file `OUTPUT_FILES/out_data_sim_0.xmf`. + +3. run TOMOATT in inversion mode with `input_params.yml`, by the command +``` bash +mpirun --oversubscribe -n 8 ../../build/bin/TOMOATT -i input_params.yml +``` +The volumetric output data is again saved in the file `OUTPUT_FILES/out_data_sim_0.h5`. + + +4. The final output data is stored in OUTPUT_FILES/final_model.h5. This file may be visualized by e.g. check_3d_out.ipynb \ No newline at end of file diff --git a/test/inversion_small/check_3d_out.ipynb b/test/inversion_small/check_3d_out.ipynb new file mode 100644 index 0000000..bde0716 --- /dev/null +++ b/test/inversion_small/check_3d_out.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'vel_true')" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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dne7lzLaM0ZW3HMfmyDmfm98oz0zxP2RTA9xbx9JGeW6zXUMjNcXMdqjxuszPrqZWO7j3xl3Z82TcePYGzEqK+ueMOqBDzEWABlmrHMwPOJuLzO+eHFjHYSoUdLZmvK11zlwr2PQbqxzsNtPutsjudcqiBnf27DlrHdH3eskdPruz6YXcg2OYpFRuFMD7t++e7vxxhtVU1OjZcuWdd03fvx45zYf+chHdMstt0iS7r777p52sUuv37HnnntOt99+u4455pis++fMmaNHHnlE999/v9auXau3335bZ511Vq87CADAvqSlpSXr1tHR/QJiDz/8sKZMmaJzzjlHBxxwgCZNmqQ777xzQPrYq8HBrl27dP755+vOO+/Mmt7YuXOn7rrrLt100006+eSTNXnyZC1btkxPP/201q9f32edBgBgoPXVaYWamhpVVlZ23err67vd3+uvv64lS5bokEMO0apVq3TJJZfo61//un72s5/1+2vt1WmFuro6nXrqqZo+fbq+//3vd93f2NioVCql6dOnd903YcIEjR07VuvWrdPxxx+/13N1dHRkjZpaWlp60yUAAPpVXxVeampqUkVFRdf9yWT3p5R839eUKVO0YMECSdKkSZP00ksvaenSpZo9e3av+5GPHg8OGhoa9MILL+i5557bq625uVmJREIjRozIur+qqkrNzc3dPl99fb2++93v9rQbAAAMqCBkyebg79tWVFRkDQ5yGT16tI444ois+w4//HD96le/6nUf8tWjIVBTU5Muv/xy/fu//7vKyowKOHmaN2+edu7c2XVramrqk+cFAKCUTZs2TRs3bsy679VXX9W4ceP6fd89mjlobGzU9u3b9fGPf7zrvkwmoyeffFL/9m//plWrVqmzs1M7duzImj3Ytm2bqquru33OZDKZc0oFAIBi0VenFfI1Z84cnXDCCVqwYIE+//nP69lnn9Udd9yhO+64o+sx8+bN01tvvaWf//znXfdt2LBB0nvXB/71r3/Vhg0blEgk9pqFcOnR4OCUU07Riy++mHXfhRdeqAkTJuib3/ymampqFI/HtXr1ap199tmSpI0bN2rLli2qra3tya4U+J6CXKWZU1ZU0Yi7hS3JbLTb27tjRdGO3LGk6B4jrtXm3rnX7o6DeSnj4ARGaVUjyhdNuONc0XajtGynu11G2dzAKJkcuJvlG98Y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KJSiPq0wd+5czZ49W1OmTNFxxx2nRYsWqa2tTRdeeGGhu1ZUdu3apU2bNnX9vHnzZm3YsEEjR47U2LFjdcUVV+j73/++DjnkEI0fP17XXHONxowZozPOOKNwnS4SdXV1WrFihR566CENHz6861xuZWWlysvLVVlZqYsuukhz587VyJEjVVFRocsuu0y1tbU6/vjjC9z7wps3b55mzpypsWPHqrW1VStWrNCaNWu0atUqjp1h+PDhXde2vG/o0KHaf//9u+7n+KFgCh2XsPzkJz8Jxo4dGyQSieC4444L1q9fX+guFZ0//OEPgaS9brNnzw6C4L044zXXXBNUVVUFyWQyOOWUU4KNGzcWttNForvjJilYtmxZ12P27NkT/Ou//muw3377BUOGDAnOPPPMYOvWrYXrdBH5l3/5l2DcuHFBIpEIRo0aFZxyyinB7373u652jl3PfDDKGAQcPxSOFwRBUKBxCQAAKEJFe80BAAAoDAYHAAAgC4MDAACQhcEBAADIwuAAAABkYXAAAACyMDgAAABZGBwAAIAsDA4AAEAWBgcAACALgwMAAJDl/wPBdITsqw+j2QAAAABJRU5ErkJggg==", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGzCAYAAAC7ErTFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABG9klEQVR4nO3de3hU1b3/8c/MZGYSkIRLIQEJGG9cFJCCImLrjZZa8fHCUUuxUou2tXgB6tPT9CcFaQvaVkXPQRCLUNuD8UrVnipFKlCPIIrlPKIVL2CJyMUbBAJJJrP37w81x5FkfWeycxvyfj3PPDqz9tp7zZ49w8pa+7u+Id/3fQEAAHwq3NoNAAAAbQudAwAAkILOAQAASEHnAAAApKBzAAAAUtA5AAAAKegcAACAFHQOAABACjoHAAAgBZ0DoJWsWrVKoVBIq1atau2mAEAKOgdAFnnttdc0c+ZMvfPOO63dFACHMToHQBZ57bXXdPPNN9M5ANCs6BwAhynf93Xw4MHWbgaALETnAEjTI488olAopNWrVx9Sds899ygUCmnTpk2SpNdff13/9m//pq5duyo3N1fDhw/XE088Eej4S5Ys0SWXXCJJOuussxQKhVLuWTjqqKM0duxYLV++XMOHD1deXp7uuecevfPOOwqFQlqyZMkh+wyFQpo5c2bKa9u3b9f3vvc9FRYWKh6P64QTTtB9990XqO0AsktOazcAyBbnnXeejjjiCD300EM644wzUsoefPBBnXDCCTrxxBP16quvatSoUTryyCP105/+VB07dtRDDz2kCy+8UI8++qguuuiiRh3/q1/9qq6//nrddddd+tnPfqYBAwZIUt1/JWnz5s0aP368fvCDH+jqq69Wv379MjrGrl27dOqppyoUCunaa69V9+7d9dRTT2nSpEmqqKjQlClTGtV2AFnGB5C28ePH+z169PBra2vrXtuxY4cfDof9WbNm+b7v++ecc44/aNAgv6qqqm4bz/P80047zT/uuOPqXnv22Wd9Sf6zzz6b9vEffvjhBuv07dvXl+Q//fTTKa9v3brVl+QvXrz4kDqS/BkzZtQ9nzRpkt+zZ0//gw8+SNnuW9/6ll9QUOAfOHAg7bYCyF5MKwAZuOyyy7R79+6U8MNHHnlEnufpsssu00cffaS//e1vuvTSS7Vv3z598MEH+uCDD/Thhx9qzJgxevPNN7V9+/Zma19JSYnGjBnTqLq+7+vRRx/V+eefL9/369r+wQcfaMyYMdq7d69efvnlJm4xgLaIaQUgA9/4xjdUUFCgBx98UOecc46kT6YUTjrpJB1//PFav369fN/X9OnTNX369Hr3sXv3bh155JHN0r6SkpJG133//fe1Z88eLVy4UAsXLqx3m927dzd6/wCyB50DIAPxeFwXXnihli1bprvvvlu7du3S//zP/2j27NmSJM/zJEk33nhjg3/BH3vssc3Wvry8vENeC4VC9W6bTCZTnn/W9ssvv1wTJ06st87gwYMDthBANqBzAGTosssu0+9//3utXLlS//znP+X7vi677DJJ0tFHHy1JikajGj16dJMfu6F/6F26dOkiSdqzZ0/K6//6179Snnfv3l2dOnVSMplslrYDyB7ccwBkaPTo0eratasefPBBPfjggzrllFPqhvN79OihM888U/fcc4927NhxSN33338/0LE7duwo6dB/6F3y8/P1pS99SWvWrEl5/e677055HolENG7cOD366KN1IZmfF7TtALIHIwdAhqLRqC6++GKVlZWpsrJSv/3tb1PK582bp9NPP12DBg3S1VdfraOPPlq7du3S2rVr9e677+p///d/G33sk046SZFIRLfeeqv27t2reDyus88+Wz169HDWu+qqq3TLLbfoqquu0vDhw7VmzRq98cYbh2x3yy236Nlnn9WIESN09dVXa+DAgfroo4/08ssv65lnntFHH33U6LYDyCKtGywBZKcVK1b4kvxQKOSXl5cfUv7222/7V1xxhV9UVORHo1H/yCOP9MeOHes/8sgjdds0JpTR933/3nvv9Y8++mg/Eomk1O/bt69/3nnn1VvnwIED/qRJk/yCggK/U6dO/qWXXurv3r37kFBG3/f9Xbt2+ZMnT/aLi4v9aDTqFxUV+eecc46/cOHCjNoJIHuFfN/3W7d7AgAA2hLuOQAAACm45wBoAw4ePKi9e/c6t+natatisVgLtQhAe0bnAGgDHnzwQV155ZXObZ599lmdeeaZLdMgAO0a9xwAbcCOHTv06quvOrcZNmxY3ZoFANCc6BwAAIAU3JAIAABStLl7DjzP03vvvadOnTo1aqlYAED74fu+9u3bp169eikcbr6/d6uqqlRTUxN4P7FYTLm5uU3QoubV5joH7733noqLi1u7GQCA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6bnPX7Xj/Nd47uu+1mib52XPX7StqT3dkEjnAACANLSnew6YVgAAACkYOQAAIA1MKwAAgBTtaVqBzgEAAGnwA44cZFPngHsOAABACkYOAABIgy87+6lVP1vQOahPyP0RWimXrVh4z7GOgSQlow3vIBwz1gnINdYJsNYhsFIa19a6y61vjpFy2VrHQHH3+/Nz3fW9uPuS9xznXrI/O3ONi2ZN2WxcV0ase1Wt+9wdTLrL9ybznOV7wh2c5eY6BoaqsPvajAZMuVzlu6/dPcY6Bns89/vf57nP375kboNl1mdjffbmcHcWDYc3J08hhVghEQAAtEeMHAAAkAaiFQAAQArPDynUTtY5YFoBAIA2avv27br88svVrVs35eXladCgQXrppZca3H7Hjh369re/reOPP17hcFhTpkxp1HHpHAAAkAbfD/7IxMcff6xRo0YpGo3qqaee0muvvabbbrtNXbp0abBOdXW1unfvrptuuklDhgxp9HtlWgEAgDS09D0Ht956q4qLi7V48eK610pKSpx1jjrqKN15552SpPvuuy/zRn6KzkE9zKged0STjOypSkbdB/DiDQ/oeHnunYc8d9c0bIUqGimPQ7XucDCza2yFgVopl61QxQ7uUMdkrvvD8+JWmKnx2QUMdQySstlKu5uodb/3g0Yo477ahkPpJOnjREdneW7ICIM1VEXc7evgu1M+R4xgxaQxkGqlrLZCET9MHuEs/7jWff5c5/9Arfu6r0m6P/tk0vrRcxcjMxUVFSnP4/G44vFDQ2GfeOIJjRkzRpdccolWr16tI488Uj/60Y909dVXN3sbmVYAACANn40cBHlIUnFxsQoKCuoec+bMqfd4W7Zs0fz583Xcccdp+fLluuaaa3T99dfr97//fbO/V0YOAABIQ1NFK5SXlys/P7/u9fpGDSTJ8zwNHz5cs2fPliQNHTpUmzZt0oIFCzRx4sRGtyMdjBwAAJCGprohMT8/P+XRUOegZ8+eGjhwYMprAwYM0LZt25r7rdI5AACgLRo1apQ2b96c8tobb7yhvn37NvuxmVYAACANn/z1HyRaIbPtp06dqtNOO02zZ8/WpZdeqvXr12vhwoVauHBh3TalpaXavn277r///rrXNm7cKEnav3+/3n//fW3cuFGxWOyQUQgXOgcAAKShpUMZTz75ZC1btkylpaWaNWuWSkpK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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# final model\n", + "fpath_final_model = './OUTPUT_FILES/final_model.h5'\n", + "fpath_true_model = \"./test_model_true.h5\"\n", + "\n", + "import h5py\n", + "\n", + "# read vel, xi, eta dataset \n", + "with h5py.File(fpath_final_model, 'r') as f:\n", + " vel = f['vel'][:]\n", + " xi = f['xi'][:]\n", + " eta = f['eta'][:]\n", + " #zeta = f['zeta'][:]\n", + "\n", + "# read true model\n", + "with h5py.File(fpath_true_model, 'r') as f:\n", + " vel_true = f['vel'][:]\n", + " xi_true = f['xi'][:]\n", + " eta_true = f['eta'][:]\n", + " #zeta_true = f['zeta'][:]\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# plot vel\n", + "plt.figure()\n", + "plt.imshow(vel[5,:,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel')\n", + "\n", + "# plot xi\n", + "#plt.figure()\n", + "#plt.imshow(xi[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('xi')\n", + "#\n", + "## plot eta\n", + "#plt.figure()\n", + "#plt.imshow(eta[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('eta')\n", + "\n", + "# plot vel_true\n", + "plt.figure()\n", + "plt.imshow(vel_true[5,:,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel_true')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/inversion_small/data_post_process.py b/test/inversion_small/data_post_process.py new file mode 100644 index 0000000..c267e47 --- /dev/null +++ b/test/inversion_small/data_post_process.py @@ -0,0 +1,71 @@ +# This script shows how to recompose the output data for further analysis +# As the result data is collectively written out by each process, the data is composed on subgrid basis. +# the data needs to be reindexed and reassembled to a global grid. + +import numpy as np +import sys + +sys.path.append("../../utils/") +from tomoatt_data_retrieval import get_data_from_h5 + + +# +# plot calculated travel time field + +# number of grids +nx = 50 +ny = 50 +nz = 10 + +# number of subgrid +ndiv_x = 2 +ndiv_y = 2 +ndiv_z = 1 + +# read data +_src_id = 0 +_inv_id = 0 + +# filling 0 for digit +inv_id = str(_inv_id).zfill(4) +src_id = str(_src_id).zfill(4) + +# file name +#fname_data = "OUTPUT_FILES/T_res_inv_{}_src_{}.dat".format(inv_id, src_id) +fname_data = "OUTPUT_FILES/out_data_sim_{}.h5".format(_src_id) +# path for grid data +fname_grid = "OUTPUT_FILES/out_data_grid.h5" +# name dataset to be read +dataset_name = "/Data/fun_inv_{}".format(inv_id) + +data, r, t, p = get_data_from_h5(fname_data, fname_grid, dataset_name, nz, ny, nx, ndiv_z, ndiv_y, ndiv_x, verbose=True) + +# plot +import matplotlib.pyplot as plt + +fig, axs = plt.subplots(3, 1, figsize=(15, 5)) + +#axs[0].imshow(data[5,:,:], cmap='jet', interpolation='bilinear') +ir_slice=5 +axs[0].pcolormesh(p[ir_slice,0,:], t[ir_slice,:,0], data[ir_slice,:,:], shading='auto') +axs[0].set_title('lon-lat') +axs[0].set_xlabel('longitude') +axs[0].set_ylabel('latitude') +axs[0].set_aspect(1) + +it_slice=15 +axs[1].pcolormesh(p[0,it_slice,:], r[:,it_slice,0], data[:,it_slice,:], shading='auto') +axs[1].set_title('r-lon') +axs[1].set_xlabel('longitude') +axs[1].set_ylabel('latitude') +axs[1].set_aspect(10) + +ip_slice=15 +axs[2].pcolormesh(t[0,:,ip_slice], r[:,0,ip_slice], data[:,:,ip_slice], shading='auto') +axs[2].set_title('r-lat') +axs[2].set_xlabel('longitude') +axs[2].set_ylabel('latitude') +axs[2].set_aspect(10) + +plt.tight_layout() +plt.show() \ No newline at end of file diff --git a/test/inversion_small/example_to_check_result_with_pytomoatt.ipynb b/test/inversion_small/example_to_check_result_with_pytomoatt.ipynb new file mode 100644 index 0000000..dc6dafb --- /dev/null +++ b/test/inversion_small/example_to_check_result_with_pytomoatt.ipynb @@ -0,0 +1,4268 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10, 50, 50)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# read true model from hdf5 file\n", + "ftrue = \"./test_model_true.h5\"\n", + "\n", + "import h5py\n", + "\n", + "with h5py.File(ftrue, 'r') as f:\n", + " eta_true = f['eta'][:]\n", + " xi_true = f['xi'][:]\n", + " zeta_true = f['zeta'][:]\n", + " vel_true = f['vel'][:]\n", + "\n", + "# check the shape of the arrays\n", + "print(eta_true.shape)\n", + "\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "plt.imshow(eta_true[0,:,:], cmap='seismic')\n", + "# inverse y\n", + "plt.gca().invert_yaxis()\n", + "# color bar\n", + "plt.colorbar()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/mnagaso/.pyenv/versions/3.10.8/lib/python3.10/abc.py:106: FutureWarning: xarray subclass Dataset should explicitly define __slots__\n", + " cls = super().__new__(mcls, name, bases, namespace, **kwargs)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHHCAYAAACvJxw8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB04UlEQVR4nO3deXgURf4/8HfPnTskhASQS0EOAdEgGGWFBZYgeLDigaKIsuIBiOAFrgqe4IkXcngguvDDxWs9WBRBcNWIEEFQMZ4ICiEg5CDHzGSmfn/wzeiYTH2SdJJOyPv1PPMoU101NT2dSaW6692GUkqBiIiIiKpks7oDRERERI0ZB0tEREREGhwsEREREWlwsERERESkwcESERERkQYHS0REREQaHCwRERERaXCwRERERKTBwRIRERGRBgdLVC2zZ8+GYRhWd4PqyQsvvADDMLBz506ru0JE1OhwsETNymeffYbrrrsO6enpcDqd4gDwueeeQ/fu3eHxeNClSxc8+eST1X4tr9eLW2+9FW3atEFUVBT69++PNWvWmH0LR53PP/8c55xzDpKSkhAdHY2ePXviiSeeEOu9/vrryMzMRJs2beB2u3HMMcfg/PPPx5dfflnl9kVFRbjlllvQqVMnuN1utG3bFueffz5KSkpC2+zduxczZszAX//6V8TFxcEwDKxfv76u3mqN7dixA8OHD0dsbCySkpJw2WWXYf/+/WHb7NmzB5deeim6du2KuLg4JCYmol+/fli6dCl4NyuiuuGwugNEDWnVqlV49tln0bt3bxx77LH49ttvI267aNEiXHPNNRg9ejSmT5+O//3vf7j++utRUlKCW2+9VXyt8ePH45VXXsENN9yALl264IUXXsCIESPwwQcfYMCAAXX5tpqs9957D2effTZOOukk3HHHHYiNjcUPP/yAX375Ray7fft2tGjRAlOnTkXLli2Rm5uL559/Hv369UNWVhZOPPHE0LYFBQUYOHAgfvnlF0ycOBGdO3fG/v378b///Q9erxfR0dEAgJycHDzwwAPo0qULevXqhaysrHp775JffvkFZ5xxBhISEnD//ffj8OHDePjhh7F9+3Z89tlncLlcAIADBw7gl19+wfnnn4/27dvD7/djzZo1GD9+PHJycnD//fdb9h6IjhqKqBpmzZqljobDJTc3V5WUlCillJo0aVLE91RSUqKSk5PVyJEjw54fO3asiomJUQcPHtS+zsaNGxUA9dBDD4WeKy0tVccdd5zKyMgw+S5+d/jw4TppZ8mSJQqA+umnn+qkveooKChQqamp6u9//7sKBAJ10mZubq5yOBzq6quvDnv+2muvVYmJierHH3/U1i8sLFS//fabUkqplStXKgDqgw8+qJO+/REAtWTJEu021157rYqKilI///xz6Lk1a9YoAGrRokXia5x11lkqJiZGlZeXm+0uUbPH03BUyUcffYRTTjkFHo8Hxx13HBYtWhRx23/9619IT09HVFQUkpKSMGbMGOzevTtsm0GDBqFnz57Izs7GaaedhqioKHTq1AkLFy6s77dSSWpqKqKiosTtPvjgA/z222+47rrrwp6fNGkSiouL8c4772jrv/LKK7Db7Zg4cWLoOY/HgwkTJiArK6vSPqqOiuuKNmzYgOuuuw6tWrXCMcccAwD4+eefcd1116Fr166IiopCcnIyLrjggiqvQfrqq68wePBgREVF4ZhjjsG9996LYDBY4/6YtXz5cuzbtw/33XcfbDYbiouLTfejVatWiI6ORn5+fui5/Px8LFmyBBMnTkSnTp3g8/ng9XqrrB8XF4ekpKRqv151jv/aevXVV3HWWWehffv2oeeGDh2K448/Hv/+97/F+h07dkRJSQl8Pl+d9IeoOeNpOAqzfft2DBs2DCkpKZg9ezbKy8sxa9YspKamVtr2vvvuwx133IELL7wQ//jHP7B//348+eSTOOOMM7BlyxYkJiaGtj106BBGjBiBCy+8EBdffDH+/e9/49prr4XL5cKVV16p7VNBQQH8fr/Yd4/Hg9jY2Bq/56ps2bIFANC3b9+w59PT02Gz2bBlyxZceuml2vrHH3884uPjw57v168fAGDr1q1o165drfp23XXXISUlBXfeeSeKi4sBAJs2bcInn3yCMWPG4JhjjsHOnTuxYMECDBo0CF9//XXoNFNubi7++te/ory8HDNmzEBMTAwWL15crQEkcOQ6rKKiompt27JlS235+++/j/j4ePz6668YNWoUvv32W8TExOCyyy7DvHnz4PF4qvU6+fn58Pv9yM3NxWOPPYbCwkIMGTIkVP7RRx+hrKwMnTt3xvnnn4833ngDwWAQGRkZmD9/Pvr06VOt1/mzmhz/NfXrr78iLy+v0vEHHDmGVq1aVen50tJS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g2rBggXqlltuUV26dAkLYxw4cKBq06aNatWqlZoyZYp68skn1YABAxQAtXjx4gZ9fzt37lT33HOPuueee1T//v0VgNC//7zyaP78+QqAOv/889Uzzzyjxo0bpwBUWulUEdj551VTF1xwgXI4HOrmm29WixYtUqeddppyOBxqw4YN1ar/ZxUr0TZt2lSpbNy4ccput6upU6eqRYsWqfHjx6tjjjlGJScnh60S3LNnj0pOTlYtWrRQs2fPVg899JDq0qVL6PNtyFBKpZS68sorFQB14YUXqvnz56sLLrhAAVAzZ84M265iReQftWrVSl188cXqgQceUIsXL1Y333yzSkpKUh6PR3388cdh265bt07Z7XbVtWtX9eijj6pZs2apuLg4dfzxx6uioqKwbSuOhzFjxigA6sorrww990fVPf6rgmqEUu7atUslJyer4447Tj3xxBPq/vvvVy1atFC9evUKWwk3depU1bdvX3X77berxYsXq7lz56pTTjlFAVBTpkzRvgYRVQ8HS1TJhg0bVHp6unK5XOrYY49VCxcujJjg/eqrr6oBAwaomJgYFRMTo7p166YmTZqkcnJyQtsMHDhQnXDCCWrz5s0qIyNDeTwe1aFDB/XUU0815NtSSin1wQcfRFzqPnDgwErbL168WHXt2lW5XC513HHHqXnz5qlgMBi2TaTBTmlpqbrppptUWlqacrvd6pRTTlGrV6+u9Bo33nijMgxD7dixQ9t33WDp0KFD6oorrlAtW7ZUsbGxKjMzU33zzTeqQ4cOlSIVtm3bpgYOHKg8Ho9q27atuueee9Rzzz1nyWDJ5/Op2bNnqw4dOiin06k6d+6s5s2bV2m7qgZLs2bNUn379lUtWrRQDodDtWnTRo0ZM0Zt27atytdas2aNOvXUU5XH41FJSUnqsssuU3v37q20XaTjo7bHf1WqM1hSSqkvv/xSDRs2TEVHR6vExEQ1duxYlZubG7bNe++9p8466yzVpk0b5XQ6VVxcnDr99NPVkiVLKh2rRFQ7hlK80yLVr0GDBuHAgQMRb3Da3PXr1w8dOnTAypUrre4KERFVgRd4E1mosLAQX3zxBZYuXWp1V4iIKAIOlogsFB8fH/E+ZURE1DhwNRwRERGRBq9ZIiIiItLgzBIRERGRBgdLRERERBpH/QXewWAQe/bsQVxcHAzDsLo7RETUiCmlUFRUhDZt2sBmq7/5hLKysmrd81Licrng8XjqoEekc9QPlvbs2VPnt5YgIqKj2+7du3HMMcfUS9tlZWVIjopFCQLyxoK0tDT89NNPHDDVs6N+sBQXFwcA+P7bnND/15ShTN61XaovXWNv4vWNer5+X5mdrTNM/uUmvL6yCYe48PpB6NsPCvs3IH20mvpBoW5A2EA6aqRDw2z79c3s3/zSTLNNOLSlQ1/qn116AV3bYt/MvTeJVN1Wz7P49dl8UVERunTuXOvfF9Xh8/lQggDGoi1cJo5kH4JYlvsrfD4fB0v17KgfLFV8acTFxYXd/b1GbTTpwVL9/kpTpgc7HCzVti4HS+Y05sGSPBjRl3OwVBevUf8vEgUbXCa+A+1cy95gjvrBEhERUWNkNwzYTQzK7DCO3LWQ6h0HS0RERBawGYDdxASWDeBgqYEwOoCIiIhIgzNLREREFqiT03DUIDhYIiIisoDd5Gk4e911hQQcLKEaK8bqeTWbESyvfX2pb8H6XbMk/pxLoW7SShCz5dJnY9N/3diE1XRm965uxZu0Gs0vvHhAWqkntC+v5NOXBy2+mMImHJ2Goe+f9EtMWvEl1detZJLqSiu17MJ7U/W8mk5aJSqR9q3UPPOHqa5xsERERGQBnoZrOjhYIiIisgBPwzUdXA1HREREpMGZJSIiIgvwNFzTwcESERGRBQyYO73DoVLD4Wk4IiIiIo1mM7NkqGDkiACT0QDi0n+pPKAv17Zvtm/1fKNdaWm/eCNeYWm/dKNcw64vV3aXvr62FLDbndrygLD+Xrd6X1q6Xy5GC+jLzdYXowekVIt6Xl5ulw4tcfm9vtwh3MVUqm/X7D+nsDZfem9mowEae/TA0RItwNNwTUezGSwRERE1JlwN13TwNBwREZEFjgyWDBOP2r3u/Pnz0bFjR3g8HvTv3x+fffaZdvuVK1eiW7du8Hg86NWrF1atWhVW/tprr2HYsGFITk6GYRjYunVrpTYGDRoEwzDCHtdcc03t3oAFOFgiIiJqJl5++WVMnz4ds2bNwueff44TTzwRmZmZyMvLq3L7Tz75BBdffDEmTJiALVu2YNSoURg1ahS+/PLL0DbFxcUYMGAAHnjgAe1rX3XVVdi7d2/o8eCDD9bpe6tPPA1HRERkAStOwz366KO46qqrcMUVVwAAFi5ciHfeeQfPP/88ZsyYUWn7xx9/HMOHD8fNN98MALjnnnuwZs0aPPXUU1i4cCEA4LLLLgMA7Ny5U/va0dHRSEtLq0WvrceZJSIiIguYOwVX84vDfT4fsrOzMXTo0NBzNpsNQ4cORVZWVpV1srKywrYHgMzMzIjb6yxbtgwtW7ZEz549MXPmTJSUlNS4DatwZomIiKgJKywsDPu32+2G2+2utN2BAwcQCASQmpoa9nxqaiq++eabKtvOzc2tcvvc3Nwa9fGSSy5Bhw4d0KZNG2zbtg233norcnJy8Nprr9WoHatwsATUezSAUe7T1w/49fUDkeuLfQsE9G1L9euZtPQfdnPRAVI0ABzC+3d6tMXS1Kzd0PdPt4RaWJmPgHDc+oTsAZ+wtr/Erz92ysr19f1ibIK56ACJtLzcKZz/8Dj0n67Tpi93C/VdmteXYiOcQrl0asds9IBdijaA8NkLS96tjBao58MyjM3kabiKj7Fdu3Zhz8+aNQuzZ8+ufcP1YOLEiaH/79WrF1q3bo0hQ4bghx9+wHHHHWdhz6qn0ZyGmzt3LgzDwA033AAAOHjwIKZMmYKuXbsiKioK7du3x/XXX4+CggJrO0pERFQH6uo03O7du1FQUBB6zJw5s8rXa9myJex2O/bt2xf2/L59+yJeS5SWllaj7aurf//+AIDvv//eVDsNpVEMljZt2oRFixahd+/eoef27NmDPXv24OGHH8aXX36JF154AatXr8aECRMs7CkREVHjEh8fH/ao6hQcALhcLqSnp2Pt2rWh54LBINauXYuMjIwq62RkZIRtDwBr1qyJuH11VcQLtG7d2lQ7DcXy03CHDx/G2LFj8cwzz+Dee+8NPd+zZ0+8+uqroX8fd9xxuO+++3DppZeivLwcDoflXSciIqo1K1bDTZ8+HZdffjn69u2Lfv364bHHHkNxcXFoddy4cePQtm1bzJkzBwAwdepUDBw4EI888ghGjhyJFStWYPPmzVi8eHGozYMHD2LXrl3Ys2cPACAnJwfAkVmptLQ0/PDDD1i+fDlGjBiB5ORkbNu2DdOmTcMZZ5wRNknSmFk+szRp0iSMHDmy0tX2VSkoKEB8fLx2oOT1elFYWBj2ICIiamwqBktmHjV10UUX4eGHH8add96JPn36YOvWrVi9enXoIu5du3Zh7969oe1PO+00LF++HIsXL8aJJ56IV155BW+88QZ69uwZ2ubNN9/ESSedhJEjRwIAxowZg5NOOikULeByufD+++9j2LBh6NatG2688UaMHj0ab731lom917AsnZ5ZsWIFPv/8c2zatEnc9sCBA7jnnnvCLhKrypw5c3DXXXfVVReJiIiOKpMnT8bkyZOrLFu/fn2l5y644AJccMEFEdsbP348xo8fH7G8Xbt22LBhQ0272ahYNrO0e/duTJ06FcuWLYPHo19xVFhYiJEjR6JHjx7iFf4zZ84Mu9Bt9+7dddhrIiKiutHQOUtUe5bNLGVnZyMvLw8nn3xy6LlAIIAPP/wQTz31FLxeL+x2O4qKijB8+HDExcXh9ddfh9Opv8t7pHwJIiKixsQOk9csNWDMQXNn2WBpyJAh2L59e9hzV1xxBbp164Zbb70VdrsdhYWFyMzMhNvtxptvvinOQGmp4JFHpDKd+s5RKi/Tl/u9mrJSbV3l07cd9Ov7hqA+a0cJ5YZNuARRKDfcQs6RQz94Vs4ofblLKDeZQ+Vw6X/Eyk18UZrNYZJylArK9O9dqu+VcpikN2CS2ZwltxBGJOUwRTv1x7au3OPUt10uBBHpMpwA+Ys/KM5YCJ+d0D9DCjMS6td3DlNDsZmcHWos76M5sGywFBcXF3aBGADExMQgOTkZPXv2RGFhIYYNG4aSkhL861//CrtYOyUlBXYhrJCIiIioLjTa9feff/45Nm7cCADo3LlzWNlPP/2Ejh07WtArIiKiumE6OoATSw2mUQ2W/ngV/qBBg6AaMneeiIioAZm9SJsXeDccy3OWiIiIiBqzRjWzRERE1FzwNFzTwcESERGRBXgaruloPoMlpY48qmBIy8MDUrm5aACbT1j+X3Y48ksX62/nospK9OVe4bXLzUULiKToACEawIiK0Tfv0ZcbMfFC+/ryoPD+pfPcLldsxDJfQFiaL3xPBoSl+WXC0n4xWsBrLlqg1Kcv9wn9M8slLP2PctV+6T8AxAqxEXGa9s22HRDem/DW4LDpjx2lzEUTiL/kpViJeowWkGIHqHlqPoMlIiKiRsRmGKaykpiz1HA4WCIiIrKAYTdgSNNguvocLDUYroYjIiIi0uDMEhERkQVsdgM2EzNLPA3XcDhYIiIisoLdBsNm4gSPwYvRGwoHS0RERBYwbAYME2FJBjiz1FCaz2BJBY88IpVpSNECYrnfq++aJhoAAIJF+ZqyQ/q6hyPXBYBgabG2PFDm09f3C7EKAkO4s7vNqT9E7W63vn0hGsAWm6hvPyFZKG+pLZeCFexG5PfvdkRp65YFzN1ZXVqd7RWW7hcJ0QEHD+uPnaIyff1SIXpAikaQ2IXTH3Fu/bEX69GXJ0TrYy9KPZHLY4W1/VLsQ4LQNymawO3Q7xvT8xnifdCtixbgXA1VpfkMloiIiBoRm92AzcTMko0zSw2GgyUiIiILGDZz1ywZDNBsMIwOICIiItLgzBIREZEFeBqu6eBgiYiIyAKGnavhmgqehiMiIiLS4MwSERGRBY7MLJm4wBv6CAmqO81msGQoBaOWOUuQVhxIOUsBIatIyDrSZSkFCn7T1vXn52vLvYeK9PWLy7TlUg6TWTaXkLPkcWnLXXHR2nJPcoK2XJXpPxu7T79/7C2FY0uXsxSnz5ByCdP3DhNZMwAgxDih1KfPQcov8WvLDxbr88ekHCafkDUk5TBJOUtRQtZRYrT+2Eso0ecsHY6NXL9lrP6z9wvvLSh8Z0nl0q8GJeQkmT45JLQvZYgp6f1remgyvqtGeM1S08HTcEREREQazWZmiYiIqDExDAOGiRvpGkHOLDUUDpaIiIgsYLPbYDNxzZJN8eRQQ+FgiYiIyAKmowMUZ5YaCoelRERERBqcWSIiIrIAZ5aaDg6WACAoRQfoy42AfomzEpaXB4Xl6cGSyMv7ywsLtXXLfivQlpf+pq8vRQsEyvTLwwN+/fJyiXTxoyNKvzxbig7wFZVoy6NL9J+dq1z//iU2W+QfQeXULx+PcrfQlnsc+uPWaeIGnoC8dL9U+OylaIHDQrnfq28/EDCXQVPk1O+fAqF/yZpoAEC/f6R964/XHxtBYf27FAsh7boEj/5Xh7CyX2QIDdggvAHhe8OuqS/FDtQlXrPUdHBPExEREWlwZomIiMgKJk/DgafhGgwHS0RERBawGQZsJnKWpCRzqjs8DUdERESkwZklIiIiCxh2m7kb6QY539FQOFgiIiKygOkb6fJ2Jw2Gw1IiIiIiDc4sVYMh5CwhqM97UX6fvtyrz/LRlfuK9BlN3kOHteWleYe05WWH9H0rK/Rqy4M+/b4LCoEuUgaJI0p/CLvjS7Xl/mL9+wuU6T+7WJNZPk6XJ2KZzRWlrev2JGjLXcKFox6Hft86zazSAVDq0+ePlZTpy8uEHCNfqb683C8ce0IWkUPIWfKV6vvv9wrv31f7nKWA0Hck6osl0kcvnTkyDP3PpQ1CDpJN//5swiowQ9g9Jg/tOmM6lJIzSw2GgyUiIiIL8JqlpoODJSIiIgvY7DB5zVIddoa0OCwlIiIi0uDMEhERkQUMmyHe/1KqTw2DM0tEREQWsNlsoZvp1upRy5thz58/Hx07doTH40H//v3x2WefabdfuXIlunXrBo/Hg169emHVqlVh5a+99hqGDRuG5ORkGIaBrVu3VmqjrKwMkyZNQnJyMmJjYzF69Gjs27evVv23AgdLREREzcTLL7+M6dOnY9asWfj8889x4oknIjMzE3l5eVVu/8knn+Diiy/GhAkTsGXLFowaNQqjRo3Cl19+GdqmuLgYAwYMwAMPPBDxdadNm4a33noLK1euxIYNG7Bnzx6cd955df7+6gtPw1WHFB0gCerrq3L9EuigL/LydmnpuxgtICz9LzmgX3ov1fcLy8ODmuXT1SFHB7i15eXC8m8lfHaG8JedzSksoY6Oi1jmjE/S1/UWacvdjnhtuUdYGu8UpvjtJk8BBITYBWnpfVmx/ufGW6YvV8Lyeym2wuXWf7blfv2xHSiP/PpiNIBJ9hb6z066X5lT2DdO4cpju3BPM7vwlSvVV0q//4Ka6IF63vVhTEcH1KLuo48+iquuugpXXHEFAGDhwoV455138Pzzz2PGjBmVtn/88ccxfPhw3HzzzQCAe+65B2vWrMFTTz2FhQsXAgAuu+wyAMDOnTurfM2CggI899xzWL58OQYPHgwAWLJkCbp3745PP/0Up556ao3fR0PjzBIREZEFKqIDzDwAoLCwMOzh9Vb9R6zP50N2djaGDh0aes5ms2Ho0KHIysqqsk5WVlbY9gCQmZkZcfuqZGdnw+/3h7XTrVs3tG/fvkbtWImDJSIioiasXbt2SEhICD3mzJlT5XYHDhxAIBBAampq2POpqanIzc2tsk5ubm6Nto/UhsvlQmJioql2rMTTcERERBYwbDbxVL5UHwB2796N+PjfT7u73frLD6jmOFgiIiKyQMWqNjP1ASA+Pj5ssBRJy5YtYbfbK61C27dvH9LS0qqsk5aWVqPtI7Xh8/mQn58fNrtU03asxNNwREREzYDL5UJ6ejrWrl0bei4YDGLt2rXIyMiosk5GRkbY9gCwZs2aiNtXJT09HU6nM6ydnJwc7Nq1q0btWIkzS0RERFYweW848Y7GVZg+fTouv/xy9O3bF/369cNjjz2G4uLi0Oq4cePGoW3btqHrnqZOnYqBAwfikUcewciRI7FixQps3rwZixcvDrV58OBB7Nq1C3v27AFwZCAEHJlRSktLQ0JCAiZMmIDp06cjKSkJ8fHxmDJlCjIyMprESjiAg6U6YQjRAiooLI8XyoOau7frygCgvMynLfcJy699xfr6UnRAmRAdUBowt043SmhfigaQ2F12bbnDc0hb7oqP1pY7k/MjlgUPRy4DACM2RVvuiUvQlruEZcduh/69m40OkJbuS0vvfUK0gK9EH5sR8OpjMQyb/v37o2K15eV+/XUjuugEaem7RPpsXA5zsRFu4Ze0WC68fiCof/2ATb9/7BCiBbSlDcewmbyRbi2ud7rooouwf/9+3HnnncjNzUWfPn2wevXq0EXcu3btCgu7PO2007B8+XLcfvvtuO2229ClSxe88cYb6NmzZ2ibN998MzTYAoAxY8YAAGbNmoXZs2cDAObNmwebzYbRo0fD6/UiMzMTTz/9dG3etiU4WCIiIrJAXV3gXVOTJ0/G5MmTqyxbv359pecuuOACXHDBBRHbGz9+PMaPH699TY/Hg/nz52P+/Pk16WqjwWuWiIiIiDQ4s0RERGSBI8GS+tO9+vrm7oBA1cfBEhERkQUMkxd4m7o4nGqEe5qIiIhIgzNLREREFrDZbGErz2pTnxoGB0tEREQW4Gm4poODpeowTB6QQl5LfVKaLJcj5frEkYBPX9/v1V9geLhcX98nZO1IMUw+IY8F0GfxOIScKHe8PivHX1xmqlyVRs4CUj59XaNcX+4QsnKkLB2pXMrqsQt/9QaFz16ILxNzmMpLD2vL/WX6cknAp89pCpbrc66AuIglhqHf9zYhIytP+GyinPrvpCghXyxaqF8ifDZSfZdd+F4Qjg0lHLu6Q084LKmZ4mCJiIjIApxZajo4WCIiIrKAYZgMpTR71oOqjXuaiIiISIMzS0RERBbgabimg4MlIiIiC3Cw1HRwsERERGQBm90Gm4kBj5m6VDMcLNUBVc/RAvX510NQihYI6ssDytzS/1JpA4FU3WXTbxAlRCOUl+qjBwI+/RLpQJlPWx4s90csk6IDbEF932yByG0DgF1Ynu4UlqfL0QHC8ndpebcYLaDf98Fy/b4PePVL/8X2/fr2pfo6hrBv7MK+LxCW5h/06L/644TyeI9TWx7r1v9ceQP6feMJ6t+fEtJYuPyf6hoHS0RERBYwbIa51XDCoJrqDgdLREREFuA1S00H9zQRERGRBmeWiIiILMCZpaaDgyUiIiILMMG76Wg0e3ru3LkwDAM33HBD6LnFixdj0KBBiI+Ph2EYyM/Pt6x/RERE1Dw1isHSpk2bsGjRIvTu3Tvs+ZKSEgwfPhy33XabRT0jIiKqH4bdDpuJh2EXMhSozlh+Gu7w4cMYO3YsnnnmGdx7771hZRWzTOvXr6/fTgjToFKOkjgVKrQvTcPqzktL56ylcinUzMwUcV2QY5iknCchq0fImZJzqMwFumhfX8i4EsuVvtxu6L9oncJnL5VLOUvSsmcph0kSkHKWhBwrKafJsOnrSzlLhiZfrczh0tZ1CDlKTrf+qz2/RJ/BlRSjz/Aq9unLy8r1OUx+4Qdb+rkNKv2xoaSfe02xVLcu8ZqlpsPyPT1p0iSMHDkSQ4cOrZP2vF4vCgsLwx5EREREtWXpzNKKFSvw+eefY9OmTXXW5pw5c3DXXXfVWXtERET1gTNLTYdle3r37t2YOnUqli1bBo/HU2ftzpw5EwUFBaHH7t2766xtIiKiumLYbKYf1DAsm1nKzs5GXl4eTj755NBzgUAAH374IZ566il4vV7Ya3HxmtvthtvtrsuuEhER1TnOLDUdlg2WhgwZgu3bt4c9d8UVV6Bbt2649dZbazVQIiIiIqprlg2W4uLi0LNnz7DnYmJikJycHHo+NzcXubm5+P777wEA27dvR1xcHNq3b4+kpKQG7zMREVFdMWyGuZkl3ki3wVgeHaCzcOHCsIu1zzjjDADAkiVLMH78+Bq1pQwjYgSAuPRfLBeWSDv1y4AhLBO2OSIvw3V4hCXGYrn+ELC7TC4fN6Tl69IPu34Zr1Rfbl9Pjlaw8MtKWuIslBvCvnHazZVHCcvb7WKshRQ9oG9fKpcEhaX/0q84KXrAX3Y4YpndFaWt63Xrf649Xv3S/cNCdMBhrz4aoNSn3zfecv3PvV+I3AiaWPoPAEKoRqNh9rojXrPUcBrVYOnPeUqzZ8/G7NmzLekLEREREdDIBktERETNhWGzm5oBNTt7StXHwRIREZEVbPYjDzP1qUHwhCcRERGRBmeWiIiIrGCzifcOFetTg+BgiYiIyAKG3Q7DRKagmbpUM81nsGTYIkcASNEAwnlhJS39d+lv52K4hfKomIhldikaIEa/BNkVG3n5MgC4YvTt+2L1S5BjC6VFvPpyn1BdigaIEpafO6L0PwJSud2lPzZsTn19bbnZvxqVENsgNC/FQniEBqKFfeMWyh1SuRBN4BCW3/s1kRwAYBeiA8xSgcjtS7EDwYCwNN+r73u5X19e6jMXHeAPCv0T+i8UIyhEigD6n3td800ldoAaVvMZLBERETUmvMC7yeBgiYiIyAo2m8nBEq9ZaigcLBEREVmACd5NB/c0ERERkQZnloiIiKxgmLxmyeA1Sw2FgyUiIiIr8ALvJoOn4YiIiIg0ms/MkmEceVRB2YTdYNeXG0J9ZRdymKLj9PU15e4W+rq+ohJteXlxqb68VJ+3IuW92IScI2eBPk9GymuRsoCcsfosHU+iPuPKFaOv74zR15fKDV1Gl/RXo5AxZQg5S9JfSi6Hvn23Q99CrEf/c5Ecq/+5KCrS7/voOLe2vNyfoi1XQo5SuU//sxH0649dKTDQpvns6/sGqcKhgUBQn2MklQel+kJMUlDpNxCKxfLGwqoLvOfPn4+HHnoIubm5OPHEE/Hkk0+iX79+EbdfuXIl7rjjDuzcuRNdunTBAw88gBEjRoTKlVKYNWsWnnnmGeTn5+P000/HggUL0KVLl9A2HTt2xM8//xzW7pw5czBjxoxavYeGxpklIiIiK1SchjPzqKGXX34Z06dPx6xZs/D555/jxBNPRGZmJvLy8qrc/pNPPsHFF1+MCRMmYMuWLRg1ahRGjRqFL7/8MrTNgw8+iCeeeAILFy7Exo0bERMTg8zMTJSVlYW1dffdd2Pv3r2hx5QpU2rcf6twsERERNRMPProo7jqqqtwxRVXoEePHli4cCGio6Px/PPPV7n9448/juHDh+Pmm29G9+7dcc899+Dkk0/GU089BeDIrNJjjz2G22+/Heeeey569+6NF198EXv27MEbb7wR1lZcXBzS0tJCj5iYyHenaGw4WCIiIrJCRShlrR9HfoUXFhaGPbxeb5Uv5/P5kJ2djaFDh/6hCzYMHToUWVlZVdbJysoK2x4AMjMzQ9v/9NNPyM3NDdsmISEB/fv3r9Tm3LlzkZycjJNOOgkPPfQQysv1l3k0Js3nmiUiIqJGpK5upNuuXbuw52fNmoXZs2dX2v7AgQMIBAJITU0Nez41NRXffPNNla+Rm5tb5fa5ubmh8ornIm0DANdffz1OPvlkJCUl4ZNPPsHMmTOxd+9ePProo9V4p9bjYImIiKgJ2717N+Lj40P/drv1ix+sMH369ND/9+7dGy6XC1dffTXmzJnTKPv7ZzwNR0REZAWbzfwDQHx8fNgj0uCjZcuWsNvt2LdvX9jz+/btQ1paWpV10tLStNtX/LcmbQJA//79UV5ejp07d0beP41I85lZMmxHHlWRhoxSNIBDGBW79OdlbTHx2nJVFnn5v11TBgDRrfTLm4M+fd+UEA1gCNEAjij9vnPGSP3TL++WXt8Vo1+e7mmhX9of1TJaW+5O1Ec3OGOitOWGO/Lr21z6vpm9iabdJsQ6COWxLv1nmyTs+5Q4/fvLL/Fry4PS+nOBw9lWW+4rNRcdIEUT2JyR948uVgAAnG79vnc49ceGXYiFkI4NqdxqQqpG49HAoZQulwvp6elYu3YtRo0aBQAIBoNYu3YtJk+eXGWdjIwMrF27FjfccEPouTVr1iAjIwMA0KlTJ6SlpWHt2rXo06cPgCPXUG3cuBHXXnttxL5s3boVNpsNrVq1qtF7sErzGSwRERE1IobNbipTqzZ1p0+fjssvvxx9+/ZFv3798Nhjj6G4uBhXXHEFAGDcuHFo27Yt5syZAwCYOnUqBg4ciEceeQQjR47EihUrsHnzZixevPhIHwwDN9xwA+6991506dIFnTp1wh133IE2bdqEBmRZWVnYuHEj/vrXvyIuLg5ZWVmYNm0aLr30UrRo0aLW778hcbBERETUTFx00UXYv38/7rzzTuTm5qJPnz5YvXp16ALtXbt2wfaHWevTTjsNy5cvx+23347bbrsNXbp0wRtvvIGePXuGtrnllltQXFyMiRMnIj8/HwMGDMDq1avh8RyZPXa73VixYgVmz54Nr9eLTp06Ydq0aWHXMTV2HCwRERFZwbCZO50e6dISweTJkyOedlu/fn2l5y644AJccMEFkbthGLj77rtx9913V1l+8skn49NPP61VXxsLDpaIiIgsYMVpOKodroYjIiIi0uDMEhERkRUqErzN1KcGwcESERGRFWwmr1niYKnBNJvBkrI5oCLlJSl9lhDs5vJcpPZVUMhhSkiOWGYv12e9uISsl1htKWDY9T+MNiFrxxVTrC33Fev7H/AJn41Aynlyx+szsjzJCUK5PiPLlajfw7boyDlNugwmAFC1vLgz1L5Q7hCydKKd+r+IE4QsoFbCvi/1649diU3I4HK69f33e/X9KxcywAJCRpmOXfi5c3r0fZdzmPT1XQ59uZSzZJNymoSDzyYEJZnNUdLtXQ4/mr5169bho48+wt69e2Gz2XDsscfinHPOQZcuXWrdZrMZLBERETUmdXVvODoiLy8PZ599NjZv3gybzYZgMIiTTjoJr732Gm699VZMnz4dDz74YK3a5mCJiIjICg2c4H20u/7669GmTRscOnQIbrcbN910EwoLC7F582asW7cOF154Idq2bYupU6fWuG3OOBIREVmhYrBk5kEh//3vf3HvvfeG7o83d+5c/L//9/9QWFiIwYMH47HHHsOCBQtq1TYHS0RERNTkud1uGH+4oM1msyEQCKC8/Mh1waeddlqtb9zLwRIREZEFDJvN9IN+N2DAANx5550oLi6G3+/HbbfdhmOPPRZJSUkAgP3799f6XnS8ZomIiMgKhslTaQZPw/3Rww8/jGHDhiExMRGGYSAmJgYrV64Mle/YsQPjx4+vVdvNZrCkDAMq0npTswecyXWs0gJj3d8OYs+FH0SXUG5z6g8RZ4x+ebs38bC23F9cpi0PlHm15RK7R7/8W+q/W1j6L0UL2OL0f8UYMZGjBwyXEB0QKQqjolyIFhBWd4vLu+OEpffxHqe2vFWcuVgIl7C8fr9Hv39+i9HHVni9+kgPv1eIDiiXIkNqH0nicEnRAfryuGj9ZxMrRA9ESa8vzHhI0QDCRwubEHzB+Zbm6dhjj8W2bdvw0Ucfwefz4dRTT0XLli1D5bUdKAHNaLBERETUqBhGrW+GG6pPYaKjozFs2LA6b5cDcCIiIisYNvMPClNaWoqPPvoIX3/9daWysrIyvPjii7Vql3uaiIiImrxvv/0W3bt3xxlnnIFevXph4MCB2Lt3b6i8oKAAV1xxRa3a5mCJiIjIAsqwmX7Q72699Vb07NkTeXl5yMnJQVxcHE4//XTs2rXLdNu8ZomIiMgKZk+lcbAU5pNPPsH777+Pli1bomXLlnjrrbdw3XXX4S9/+Qs++OADxMTE1Lpt7mkiIiJq8kpLS+Fw/D4HZBgGFixYgLPPPhsDBw7Et99+W+u2m83MUiCoEKj1Ul39mNLu0C9PN4Ql3lK57q8Hqa7Dqe+bTViebouO07cf/5u2PKq4SFvuLyzRlgf8fm25RAptc8ZEacsdsfroAFtcoqlyu6ZcufR/BSm7S1su/dVpCCtpnEK2gLR0PynK3NeLR2g/IUqIJojXH/sFJfpjq0iIDjhcpq9f4tNHC/g00QLSd5Vd+GyihaX9CdH6Yyc5Vl8u7Xu3Q//ZeYRy6f0dNYvADMPcmzlqdkTd6NatGzZv3ozu3buHPf/UU08BAM4555xat82ZJSIiIivYbOYfFPL3v/8d/+///b8qy5566ilcfPHFUKp2kybc00RERBbgBd51a+bMmVi1alXE8qeffhrBYO3CcLmniYiI6Kjj9Xrh9Zq7C0QFDpaIiIiswFDKOrdmzRqMGDECLVq0QHR0NKKjo9GiRQuMGDEC77//fq3b5Z4mIiKyAgdLdWrp0qUYMWIEEhISMG/ePLz99tt4++23MW/ePCQmJmLEiBF46aWXatV2s1kNR0REREev++67D4899hgmTZpUqWz8+PEYMGAA7r77blx22WU1bpvDUiIiIitwZqlO7dq1C0OHDo1YPmTIEPzyyy+1arvZzCyp/3tURYpfkpYaBoT6NuGAtjuj9Q3YI2eaGE59TpJyCDlKLn3OkDMhWVseLMrXlttLCvXtlxZry1W5kLMU1GfZwKbPmzGEnCkjSp91ZPMI5TH6nCpdlpJyCzlLwmcnvXeJlHXjcejLE9xCFo9d3784ISuohV//2beK0WcFlfj1q2K85fr2i4XXLxVylnTlugwmQM5hcgk5RrEe/Ve/lKOU4NbXlz47KYfJLuQH2YV4ISlDTFcu1a1LyjBMrWhTzFkKc8IJJ+C5557Dgw8+WGX5888/jx49etSq7WYzWCIiIqKj1yOPPIKzzjoLq1evxtChQ5GamgoA2LdvH9auXYsff/wR77zzTq3a5mCJiIjICrw3XJ0aNGgQvvzySyxYsACffvopcnNzAQBpaWk488wzcc0116Bjx461apuDJSIiIivwdid1rmPHjnjggQfqvF0OloiIiOioUV5ejq+++io0s9S6dWt0794dTqf+WjwdDpaIiIiswNNwdSoYDOLOO+/E/PnzUVBQEFaWkJCAyZMn46677oKtFvfU42CJiIjIAmbv78Z7w4WbMWMGXnjhBcydOxeZmZlhF3i/9957uOOOO+Dz+Wp1mq7ZDJaCKnJEgLQMV7pHcVDKHhDp69uNyMtwnS790nSnZmk6AATLE7TlNu9hbbkR3UJbbveX6esHpGiAcqHcXHQAbPofASWVO/TTukG7fvm6crgjl4mxEJHrHnltfd+UsDxdWp7ttuu/qA3o23c79J9NrFvfvrCyHwEh8sMvZH54A/oXKBP2n5loAr/wnSL1XeIUPlzps40TogNiheiAGKHcJfRPirUQug9ddaHpumXYgFrMcoTVp5AXX3wRL730EjIzM8Oe79ixIyZOnIgOHTpg3LhxtRoscU8TERFRk1dUVIQ2bdpELG/dujWKi/XZfpFwsERERGQFJnjXqUGDBuGmm27CgQMHKpUdOHAAt956KwYNGlSrtpvNaTgiIqJGhRd416mFCxdixIgRaN26NXr16hV2zdL27dvRo0cPvP3227Vqm4MlIiIiavLatWuHL774Au+++25YKGW/fv1w//33Y9iwYbVaCQdwsERERGQNzizVOZvNhjPPPBNnnnmmuO11112Hu+++Gy1btpTbrYvOERERUc1U3Ei39g8meJvxr3/9C4WF+pu9V+BgiYiIiJodJcSL/FGzOQ0XCKqIeUpSZImU1xLQx6mI9c2wCTFFDiGvxGnTZ/m4YqL09YU/bIyATygX3oASdq5ULpGmsYVyKYdJuneTrr4SMqLEfDCT+V9Slo30R63TTH5MNZj85CH9WAaC+s9WykISYpi09cuFtr1C42a/c6TPTsppcgjHjpSjJJU7pZwl4eDUNd/gOUs8Ddck1GpPX3nllSgqKqr0fHFxMa688krTnSIiIjrqVdxI18yDGkStBktLly5FaWlppedLS0vx4osvmu4UERERUWNRo8FSYWEhCgoKoJRCUVERCgsLQ49Dhw5h1apVaNWqVa06MnfuXBiGgRtuuCH0XFlZGSZNmoTk5GTExsZi9OjR2LdvX63aJyIialQsCqWcP38+OnbsCI/Hg/79++Ozzz7Tbr9y5Up069YNHo8HvXr1wqpVq8LKlVK488470bp1a0RFRWHo0KH47rvvwrY5ePAgxo4di/j4eCQmJmLChAk4fFh/O63GpEZ7OjExEUlJSTAMA8cffzxatGgRerRs2RJXXnklJk2aVONObNq0CYsWLULv3r3Dnp82bRreeustrFy5Ehs2bMCePXtw3nnn1bh9IiKixsbcSrja3YT35ZdfxvTp0zFr1ix8/vnnOPHEE5GZmYm8vLwqt//kk09w8cUXY8KECdiyZQtGjRqFUaNG4csvvwxt8+CDD+KJJ57AwoULsXHjRsTExCAzMxNlZb/fG3Ts2LH46quvsGbNGrz99tv48MMPMXHixJrvtDp06aWXIj4+vlrbGqoGl4Nv2LABSikMHjwYr776KpKSkkJlLpcLHTp00N6XpSqHDx/GySefjKeffhr33nsv+vTpg8ceewwFBQVISUnB8uXLcf755wMAvvnmG3Tv3h1ZWVk49dRTq9V+YWEhEhIS8NMveyPulCZ9gbdQLl/gbfJCS17gLdS38AJvbalcX/q5kK4fr8lKk9qo/wu8hZvZ8gLviKy+wFt6fafm7RUWFqJD29YoKCio9i/Smqr4vbQvN9fUaxQWFiI1La1Gfe3fvz9OOeUUPPXUUwCAYDCIdu3aYcqUKZgxY0al7S+66CIUFxeHJV+feuqp6NOnDxYuXAilFNq0aYMbb7wRN910EwCgoKAAqampeOGFFzBmzBjs2LEDPXr0wKZNm9C3b18AwOrVqzFixAj88ssvNR43SDp37oxLL70Ul1xyCY4//vg6abNGw9KBAwdi0KBB+Omnn3Duuedi4MCBoUdGRkat3vCkSZMwcuRIDB06NOz57Oxs+P3+sOe7deuG9u3bIysrK2J7Xq837PRgdTMUiIiImqI//87zer1Vbufz+ZCdnR32e9Vms2Ho0KERf69mZWVV+v2cmZkZ2v6nn35Cbm5u2DYJCQno379/aJusrCwkJiaGBkoAMHToUNhsNmzcuLF2b1pj0qRJeOedd9C9e3eccsopePzxx0Np3rVVq+iADh06AABKSkqwa9cu+Hzhswd/Pp0WyYoVK/D5559j06ZNlcpyc3PhcrmQmJgY9nxqaqr2Tc+ZMwd33XVXlWWR/taS/gorF/7ENvsXpvT6uualPyClxRLSMlnpLzThD0DYhdkRu6E/BO3ScF56f0J1swwldED6A197bOgPHOmzk9bJmP3s5dcXjh0pmiAY0JdLs4pCfZGj9rOCABA09Me+7nvDJ3znSDNP0neS9L0RNDkzJX224tJ+4QfXTDQAABia+rqyunYklLL2r1dRt127dmHPz5o1C7Nnz660/YEDBxAIBEL3TKuQmpqKb775psrXyM3NrXL7it/DFf+Vtvnz9cwOhwNJSUmmBzFVmTZtGqZNm4Zvv/0Wy5Ytw/z583HTTTfhr3/9Ky699FKMGzeuxm3W6nfJ/v37cdZZZyEuLg4nnHACTjrppLBHdezevRtTp07FsmXL4PHos35qYubMmSgoKAg9du/eXWdtExER1RWlzD+AI79P//h7b+bMmda+sUbi+OOPx1133YVvv/0W//vf/7B//35cccUVtWqrVoOlG264Afn5+di4cSOioqKwevVqLF26FF26dMGbb75ZrTays7ORl5eHk08+GQ6HAw6HAxs2bMATTzwBh8OB1NRU+Hw+5Ofnh9Xbt28f0tLSIrbrdrsRHx8f9iAiIjpa/fl3ntvtrnK7li1bwm63V1pVrvu9mpaWpt2+4r/SNn++gLy8vBwHDx7U/j6vC5999hluuOEG/P3vf8e3336LCy64oFbt1GqwtG7dOjz66KPo27cvbDYbOnTogEsvvRQPPvgg5syZU602hgwZgu3bt2Pr1q2hR9++fTF27NjQ/zudTqxduzZUJycnB7t27UJGRkZtuk1ERNRoBJUy/agJl8uF9PT0sN+rwWAQa9eujfh7NSMjI2x7AFizZk1o+06dOiEtLS1sm8LCQmzcuDG0TUZGBvLz85GdnR3aZt26dQgGg+jfv3+N3kN1fPvtt5g1axaOP/54nH766dixYwceeOAB7Nu3DytWrKhVm7W6Zqm4uDh0/rFFixbYv38/jj/+ePTq1Quff/55tdqIi4tDz549w56LiYlBcnJy6PkJEyZg+vTpSEpKQnx8PKZMmYKMjIxqr4QjIiJqrBTkyxql+jU1ffp0XH755ejbty/69euHxx57DMXFxaHTU+PGjUPbtm1DEx9Tp07FwIED8cgjj2DkyJFYsWIFNm/ejMWLFwNAKB/x3nvvRZcuXdCpUyfccccdaNOmDUaNGgUA6N69O4YPH46rrroKCxcuhN/vx+TJkzFmzJg6XwkHHFkMdsopp2DSpEkYM2ZMpeupaqNWg6WuXbsiJycHHTt2xIknnohFixahY8eOWLhwIVq3bm26UxXmzZsHm82G0aNHw+v1IjMzE08//XSdtU9ERNScXHTRRdi/fz/uvPNO5Obmok+fPli9enVoQLFr1y7Y/hAdcdppp2H58uW4/fbbcdttt6FLly544403wiY7brnlFhQXF2PixInIz8/HgAEDsHr16rDrkZctW4bJkydjyJAhod/rTzzxRL28x5ycHHTp0qVO26xRzlKFf/3rXygvL8f48eORnZ2N4cOH47fffoPL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JxgMYs+ePYiLizP9l3h1FRYWol27dti9ezfi4+Mb5DWPdtyndYv7s+5xn9Ytq/anUgpFRUVo06YNbLb6WwNVVlYGn89nuh2XywWPx1MHPSKdo35myWaz4ZhjjrHktePj4/mlWce4T+sW92fd4z6tW1bsz/qaUfojj8fDQU4TwugAIiIiIg0OloiIiIg0OFiqB263G7NmzYLb7ba6K0cN7tO6xf1Z97hP6xb3JzUmR/0F3kRERERmcGaJiIiISIODJSIiIiINDpaIiIiINDhYIiIiItLgYKmW5syZg1NOOQVxcXFo1aoVRo0ahZycnLBtrr76ahx33HGIiopCSkoKzj33XHzzzTcW9bjxq84+raCUwplnngnDMPDGG280bEebkOrs00GDBsEwjLDHNddcY1GPG7fqHqNZWVkYPHgwYmJiEB8fjzPOOAOlpaUW9Ljxk/bpzp07Kx2fFY+VK1da2HNqTjhYqqUNGzZg0qRJ+PTTT7FmzRr4/X4MGzYMxcXFoW3S09OxZMkS7NixA++++y6UUhg2bBgCAd4puirV2acVHnvssQa7fU1TVt19etVVV2Hv3r2hx4MPPmhRjxu36uzPrKwsDB8+HMOGDcNnn32GTZs2YfLkyfV664ymTNqn7dq1Czs29+7di7vuuguxsbE488wzLe49NRuK6kReXp4CoDZs2BBxmy+++EIBUN9//30D9qzpirRPt2zZotq2bav27t2rAKjXX3/dmg42QVXt04EDB6qpU6da16kmrKr92b9/f3X77bdb2KumrTrfpX369FFXXnllA/aKmjv+qVNHCgoKAABJSUlVlhcXF2PJkiXo1KkT2rVr15Bda7Kq2qclJSW45JJLMH/+fKSlpVnVtSYr0nG6bNkytGzZEj179sTMmTNRUlJiRfeanD/vz7y8PGzcuBGtWrXCaaedhtTUVAwcOBAfffSRld1sUqTv0uzsbGzduhUTJkxoyG5RM8dQyjoQDAZxzjnnID8/v9KX4tNPP41bbrkFxcXF6Nq1K9555x0cd9xxFvW06Yi0T6+++moEAgE8++yzAADDMPD6669j1KhRFvW06Yi0TxcvXowOHTqgTZs22LZtG2699Vb069cPr732moW9bfyq2p+ffvopMjIykJSUhIcffhh9+vTBiy++iKeffhpffvklunTpYnGvGzfdd2mF6667DuvXr8fXX3/dwL2jZs3qqa2jwTXXXKM6dOigdu/eXaksPz9fffvtt2rDhg3q7LPPVieffLIqLS21oJdNS1X79D//+Y/q3LmzKioqCj0HnoarNt1x+kdr167l6eJqqGp/fvzxxwqAmjlzZti2vXr1UjNmzGjoLjY50jFaUlKiEhIS1MMPP9zAPaPmjoMlkyZNmqSOOeYY9eOPP4rber1eFR0drZYvX94APWu6Iu3TqVOnKsMwlN1uDz0AKJvNpgYOHGhNZ5uImhynhw8fVgDU6tWrG6BnTVOk/fnjjz8qAOqll14Ke/7CCy9Ul1xySUN2scmpzjH64osvKqfTqfLy8hqwZ0RKOayc1WrKlFKYMmUKXn/9daxfvx6dOnWqVh2lFLxebwP0sOmR9umMGTPwj3/8I+y5Xr16Yd68eTj77LMbsqtNRm2O061btwIAWrduXc+9a3qk/dmxY0e0adOmUpzAt99+y5VbEdTkGH3uuedwzjnnICUlpQF7SARwsFRLkyZNwvLly/Gf//wHcXFxyM3NBQAkJCQgKioKP/74I15++WUMGzYMKSkp+OWXXzB37lxERUVhxIgRFve+cZL2aVpaWpUXdbdv375ag4DmSNqnP/zwA5YvX44RI0YgOTkZ27Ztw7Rp03DGGWegd+/eFve+8ZH2p2EYuPnmmzFr1iyceOKJ6NOnD5YuXYpvvvkGr7zyisW9b5ykfVrh+++/x4cffohVq1ZZ1VVqziyc1WrSAFT5WLJkiVJKqV9//VWdeeaZqlWrVsrpdKpjjjlGXXLJJeqbb76xtuONmLRPI9XhNUuRSft0165d6owzzlBJSUnK7Xarzp07q5tvvlkVFBRY2/FGqrrH6Jw5c9QxxxyjoqOjVUZGhvrf//5nTYebgOru05kzZ6p27dqpQCBgTUepWeNqOCIiIiIN5iwRERERaXCwRERERKTBwRIRERGRBgdLRERERBocLBERERFpcLBEREREpMHBEhEREZEGB0tER6FBgwbhhhtusLobRERHBQ6WiIiIiDQ4WCIiIiLS4GCJ6Ch36NAhjBs3Di1atEB0dDTOPPNMfPfdd6HyF154AYmJiXj33XfRvXt3xMbGYvjw4di7d6+FvSYiajw4WCI6yo0fPx6bN2/Gm2++iaysLCilMGLECPj9/tA2JSUlePjhh/HSSy/hww8/xK5du3DTTTdZ2GsiosbDYXUHiKj+fPfdd3jzzTfx8ccf47TTTgMALFu2DO3atcMbb7yBCy64AADg9/uxcOFCHHfccQCAyZMn4+6777as30REjQlnloiOYjt27IDD4UD//v1DzyUnJ6Nr167YsWNH6Lno6OjQQAkAWrdujby8vAbtKxFRY8XBEhHB6XSG/dswDCilLOoNEVHjwsES0VGse/fuKC8vx8aNG0PP/fbbb8jJyUGPHj0s7BkRUdPBwRLRUaxLly4499xzcdVVV+Gjjz7CF198gUsvvRRt27bFueeea3X3iIiaBA6WiI5yS5YsQXp6Os466yxkZGRAKYVVq1ZVOvVGRERVMxQvTCAiIiKKiDNLRERERBocLBERERFpcLBEREREpMHBEhEREZEGB0tEREREGhwsEREREWlwsERERESkwcESERERkQYHS0REREQaHCwRERERaXCwRERERKTBwRIRERGRxv8H8U3KaBh15JQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# read the calculate values\n", + "\n", + "fres_data = \"OUTPUT_FILES/out_data_sim.h5\"\n", + "fres_grid = \"OUTPUT_FILES/out_data_grid.h5\"\n", + "\n", + "from pytomoatt.data import *\n", + "attdata = ATTData.read(fres_data,\n", + " './input_params.yml',\n", + " fres_grid, \n", + " format='hdf5')\n", + "\n", + "ax = attdata.to_xarray()\n", + "\n", + "ax['eta_inv_0029'][0,:,:].plot(x='lon', y='lat')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:       (r: 10, t: 50, p: 50)\n",
+       "Coordinates:\n",
+       "    dep           (r) float64 10.0 7.778 5.556 3.333 ... -5.556 -7.778 -10.0\n",
+       "    rad           (r) float64 6.361e+03 6.363e+03 ... 6.379e+03 6.381e+03\n",
+       "    lat           (t) float64 37.7 37.79 37.89 37.98 ... 42.02 42.11 42.21 42.3\n",
+       "    lon           (p) float64 22.7 22.79 22.89 22.98 ... 27.02 27.11 27.21 27.3\n",
+       "Dimensions without coordinates: r, t, p\n",
+       "Data variables: (12/90)\n",
+       "    eta_inv_0001  (r, t, p) float64 3.094e-05 3.827e-05 ... 2.974e-07 2.096e-07\n",
+       "    eta_inv_0002  (r, t, p) float64 6.748e-05 8.346e-05 ... 6.182e-07 4.369e-07\n",
+       "    eta_inv_0003  (r, t, p) float64 9.108e-05 0.0001125 ... 8.88e-07 6.293e-07\n",
+       "    eta_inv_0004  (r, t, p) float64 9e-05 0.0001106 ... 1.108e-06 7.869e-07\n",
+       "    eta_inv_0005  (r, t, p) float64 4.428e-05 5.273e-05 ... 1.251e-06 8.914e-07\n",
+       "    eta_inv_0006  (r, t, p) float64 -4.276e-05 -5.687e-05 ... 8.875e-07\n",
+       "    ...            ...\n",
+       "    xi_inv_0025   (r, t, p) float64 -2.307e-05 -6.187e-05 ... -2.291e-06\n",
+       "    xi_inv_0026   (r, t, p) float64 -3.233e-05 -7.32e-05 ... -2.331e-06\n",
+       "    xi_inv_0027   (r, t, p) float64 -2.429e-05 -6.387e-05 ... -2.312e-06\n",
+       "    xi_inv_0028   (r, t, p) float64 -3.359e-05 -7.502e-05 ... -2.342e-06\n",
+       "    xi_inv_0029   (r, t, p) float64 -2.636e-05 -6.656e-05 ... -2.325e-06\n",
+       "    xi_inv_0030   (r, t, p) float64 -3.402e-05 -7.566e-05 ... -2.352e-06
" + ], + "text/plain": [ + "\n", + "Dimensions: (r: 10, t: 50, p: 50)\n", + "Coordinates:\n", + " dep (r) float64 10.0 7.778 5.556 3.333 ... -5.556 -7.778 -10.0\n", + " rad (r) float64 6.361e+03 6.363e+03 ... 6.379e+03 6.381e+03\n", + " lat (t) float64 37.7 37.79 37.89 37.98 ... 42.02 42.11 42.21 42.3\n", + " lon (p) float64 22.7 22.79 22.89 22.98 ... 27.02 27.11 27.21 27.3\n", + "Dimensions without coordinates: r, t, p\n", + "Data variables: (12/90)\n", + " eta_inv_0001 (r, t, p) float64 3.094e-05 3.827e-05 ... 2.974e-07 2.096e-07\n", + " eta_inv_0002 (r, t, p) float64 6.748e-05 8.346e-05 ... 6.182e-07 4.369e-07\n", + " eta_inv_0003 (r, t, p) float64 9.108e-05 0.0001125 ... 8.88e-07 6.293e-07\n", + " eta_inv_0004 (r, t, p) float64 9e-05 0.0001106 ... 1.108e-06 7.869e-07\n", + " eta_inv_0005 (r, t, p) float64 4.428e-05 5.273e-05 ... 1.251e-06 8.914e-07\n", + " eta_inv_0006 (r, t, p) float64 -4.276e-05 -5.687e-05 ... 8.875e-07\n", + " ... ...\n", + " xi_inv_0025 (r, t, p) float64 -2.307e-05 -6.187e-05 ... -2.291e-06\n", + " xi_inv_0026 (r, t, p) float64 -3.233e-05 -7.32e-05 ... -2.331e-06\n", + " xi_inv_0027 (r, t, p) float64 -2.429e-05 -6.387e-05 ... -2.312e-06\n", + " xi_inv_0028 (r, t, p) float64 -3.359e-05 -7.502e-05 ... -2.342e-06\n", + " xi_inv_0029 (r, t, p) float64 -2.636e-05 -6.656e-05 ... -2.325e-06\n", + " xi_inv_0030 (r, t, p) float64 -3.402e-05 -7.566e-05 ... -2.352e-06" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ax" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# calculate the RMAE for each step for vel xi eta\n", + "\n", + "rmae_vel = []\n", + "rmae_xi = []\n", + "rmae_eta = []\n", + "\n", + "n_steps = 30\n", + "\n", + "for i in range(1,n_steps+1):\n", + " # get value from ax\n", + " vel = ax['vel_inv_{}'.format(str(i).zfill(4))][:,:,:].data\n", + " xi = ax['xi_inv_{}'.format(str(i).zfill(4))][:,:,:].data\n", + " eta = ax['eta_inv_{}'.format(str(i).zfill(4))][:,:,:].data\n", + "\n", + " # calculate rmae\n", + " r_vel = np.sum(np.abs(vel - vel_true))/np.sum(np.abs(vel_true)) * 100\n", + " r_xi = np.sum(np.abs(xi - xi_true))/np.sum(np.abs(xi_true)) * 100\n", + " r_eta = np.sum(np.abs(eta - eta_true))/np.sum(np.abs(eta_true)) * 100\n", + "\n", + " # append to list\n", + " rmae_vel.append(r_vel)\n", + " rmae_xi.append(r_xi)\n", + " rmae_eta.append(r_eta)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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fOYzw9KBrq4ubd68uXC8detWbdy4UU1NTZozZ47WrFmjVatWacmSJTr55JN12223KZFI6LLLLhuW1wcAAAAAAJjQ/DXOiLFqvbYLW7Zs0Y4dO2RZlt555x0df/zxI9SxwzekUE2SXnvtNW3btk3pdLqk/mMf+5ir+/zXf/2XVqxYUThes2aNJGnVqlVav369LrnkEu3du1c333yzdu3apRNPPFG/+c1v+ixeAAAAAAAAgAoMY9BTMKspnU7rM5/5jC655BItXLhQX/ziF/XKK68M+8zI4eI6VHv77bd1wQUX6JVXXpFhGLJtW5KzYIGkiiuDDuS0004r3KM/q1ev1urVq912FQAAAAAAAOPE1772NcViMd1+++2qq6vTr3/9a11++eV66KGHqt21ilw/U+3LX/6y5s+frz179qimpkZ//vOf9cQTT2jJkiV67LHHRqCLI6O9vV1tbW1aunRptbsCAAAAAAAwqT322GO67bbb9POf/1yRSEQej0c///nP9eSTT+onP/lJtbtXkWEfaphYmebmZv3+97/XCSecoGg0queee04LFy7U73//e1133XV68cUXR6qvIyIejysajSoWiykSiVS7OwAAAAAAAIclmUxq69atmj9/vkKhULW7M+YM9Pm4yYlcj1QzTVP19fWSnIBtxw7nQXdz587Vpk2b3N4OAAAAAAAAGHdcP1PtuOOO00svvaT58+dr2bJl+u53v6tAIKC77rpLCxYsGIk+AgAAAAAAAGOK61Dt61//uhKJhCTpm9/8pv77f//vOvXUUzVlyhTdf//9w95BAAAAAAAAYKxxHaqtXLmyUD7yyCP1xhtvaP/+/WpsbCysAAoAAAAAAABMZK5DtUqampqG4zYAAAAAAADAuOA6VEsmk/rxj3+sRx99VHv27JFlWSXn//SnPw1b5wAAAAAAAICxyHWo9oUvfEGPPPKILr74Yp188slM+QQAAAAAAMCk4zpUe+ihh/TrX/9ap5xyykj0Z9S0t7ervb1dpmlWuysAAAAAAAAYZzxuL5g5c6bq6+tHoi+j6qqrrtJrr72m559/vtpdAQAAAAAAwDjjOlT7/ve/r69+9at69913R6I/AAAAAAAAwJjnOlRbsmSJksmkFixYoPr6ejU1NZVsAAAAAAAAwHB77LHHZBiGDh48WO2uSBrCM9U+9alPafv27fq7v/s7TZ8+nYUKAAAAAAAAMOm4DtWefvppPfPMM1q0aNFI9AcAAAAAAACTlGVZ+s53vqO77rpLu3bt0tFHH62bbrpJS5Ys0YoVKyRJjY2NkqRVq1Zp/fr1+s1vfqNvf/vbevXVV+X1erV8+XL96Ec/0hFHHDGifXUdqh1zzDHq6ekZib4AAAAAAABgmNm2rZ5sdbKcsC/sapbjunXr9C//8i+68847ddRRR+mJJ57QZz7zGf32t7/Vv/3bv+miiy7Spk2bFIlEFA6HJUmJREJr1qzRCSecoK6uLt1888264IILtHHjRnk8rp98NmiGbdu2mwseeeQRrV27Vn/7t3+r448/Xn6/v+R8JBIZ1g6OtHg8rmg0qlgsNu76DgAAAAAAUC6ZTGrr1q2aP3++QqGQujPdWnbvsqr05dlPP6saf82g2qZSKTU1Nel3v/udli9fXqj/4he/qO7ubl155ZVasWKFDhw4oIaGhn7v09HRoalTp+qVV17Rcccd1+d8+edTzE1O5Hqk2tlnny1JOuOMM0rqbduWYRgyTdPtLQEAAAAAADDJbd68Wd3d3frIRz5SUp9Op/XBD36w3+veeust3XzzzXr22WfV0dEhy7IkSdu2basYqg0X16Hao48+OhL9AAAAAAAAwAgI+8J69tPPVu21B6urq0uS9PDDD2vmzJkl54LBoLZs2VLxuvPOO09z587VT3/6U7W2tsqyLB133HFKp9ND7/gguArVMpmMvvnNbxbmtY5n7e3tam9vZ2QdAAAAAACY0AzDGPQUzGpqa2tTMBjUtm3b9Jd/+Zd9zr/33nuSVJLl7Nu3T5s2bdJPf/pTnXrqqZKkP/zhD6PSX1ehmt/v18svvzxSfRlVV111la666qrCXFkAAAAAAABUT319va6//npde+21sixLf/EXf6FYLKannnpKkUhEZ555pgzD0EMPPaRzzz1X4XBYjY2NmjJliu666y7NmDFD27Zt0w033DAq/XW9BMJnPvMZ/Z//839Goi8AAAAAAACYxL71rW/ppptu0rp163Tsscfq7LPP1sMPP6z58+dr5syZWrt2rW644QZNnz5dq1evlsfj0X333acXXnhBxx13nK699lrdeuuto9JX16t/Xn311br77rt11FFHafHixaqtrS05/4Mf/GBYOzjSWP0TAAAAAABMJAOtbokqrv756quv6qSTTpIk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N910kySpvr5e69ev12uvvaYf/ehH+ulPf6of/vCHkqRLLrlE1113nT7wgQ8UXu+SSy7p069EIqGVK1eqsbFRzz//vH75y1/qd7/7XZ/Xf/TRR7VlyxY9+uij+ud//metX7++ENIBAACMV0z/BAAAGOOamprk9XpVX19fMv1y3bp1uvTSSwvPWTvqqKN0++236y//8i/1k5/8RKFQSJJ0+umn67rrriu559e//vVCed68ebr++ut133336Stf+YrC4bDq6urk8/kGnO557733KplM6u6771Ztba0k6Y477tB5552n73znO5o+fbokqbGxUXfccYe8Xq+OOeYYffSjH9WGDRt0xRVXDMvnAwAAUA2EagAAAOPUSy+9pJdffln33HNPoc62bVmWpa1bt+rYY4+VJC1ZsqTPtffff79uv/12bdmyRV1dXcpms4pEIq5e//XXX9eiRYsKgZoknXLKKbIsS5s2bSqEah/4wAfk9XoLbWbMmKFXXnnF1WsBAACMNYRqAAAA41RXV5f+5//8n/qrv/qrPufmzJlTKBeHXpL0zDPP6NJLL9XatWu1cuVKRaNR3Xffffr+978/Iv30+/0lx4ZhyLKsEXktAACA0UKoBgAAMA4EAgGZpllSd9JJJ+m1117TkUce6epeTz/9tObOnauvfe1rhbp33333kK9X7thjj9X69euVSCQKwd1TTz0lj8ejhQsXuuoTAADAeMNCBQAAAOPAvHnz9MQTT2j79u3q6OiQ5Kzg+fTTT2v16tXauHGj3nrrLf3qV7/qs1BAuaOOOkrbtm3Tfffdpy1btuj222/XAw880Of1tm7dqo0bN6qjo0OpVKrPfS699FKFQiGtWrVKr776qh599FFdffXV+uxnP1uY+gkAADBREaoBAACMA9/85jf1zjvv6IgjjtDUqVMlSSeccIIef/xxvfnmmzr11FP1wQ9+UDfffLNaW1sHvNfHPvYxXXvttVq9erVOPPFEPf3004VVQfMuuuginX322VqxYoWmTp2qX/ziF33uU1NTo9/+9rfav3+/li5dqosvvlhnnHGG7rjjjuF74wAAAGOUYdu2Xe1OAAAAAAAAAOMJI9UAAAAAAAAAlwjVAAAAAAAAAJcI1QAAAAAAAACXCNUAAAAAAAAAlwjVAAAAAAAAAJcI1QAAAAAAAACXCNUAAAAAAAAAlwjVAAAAAAAAAJcI1QAAAAAAAACXCNUAAAAAAAAAlwjVAAAAAAAAAJcI1QAAAAAAAACX/j/hFLDsl/fFKQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#plot rmae_* arrays\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "\n", + "plt.figure(figsize=(15, 5))\n", + "plt.plot(rmae_vel, label='vel')\n", + "plt.plot(rmae_xi, label='xi')\n", + "plt.plot(rmae_eta, label='eta')\n", + "\n", + "# y log\n", + "plt.yscale('log')\n", + "\n", + "# x axis is iteration number\n", + "plt.xlabel('iteration')\n", + "plt.ylabel('rmae %')\n", + "plt.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/inversion_small/img/result_fun.png b/test/inversion_small/img/result_fun.png new file mode 100644 index 0000000000000000000000000000000000000000..ba741b64ff23a0c7df4867f55fc7993de25afbf0 GIT binary patch literal 79670 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%0DcNKro&$#(ky7+e>OJ*b5J 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 GBmNJcq%K_m literal 0 HcmV?d00001 diff --git a/test/inversion_small/input_params.yml b/test/inversion_small/input_params.yml new file mode 100644 index 0000000..2628ff5 --- /dev/null +++ b/test/inversion_small/input_params.yml @@ -0,0 +1,259 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +################################################# +# initial model file path # +################################################# +model: + init_model_path: ./test_model_init.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs (parallel the sources) + ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) + nproc_sub: 1 # number of processors for sweep parallelization (parallel the fast sweep method) + use_gpu: false # true if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: true # output the calculated field of all sources + output_model_dat: false # output model_parameters_inv_0000.dat (data in text format) or not. + output_final_model: true # output merged final model (final_model.h5) or not. + output_in_process: true # output model at each inv iteration or not. + output_in_process_data: true # output src_rec_file at each inv iteration or not. + single_precision_output: false # output results in single precision or not. + verbose_output_level: 1 # output internal parameters, if no, only model parameters are out. + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion + earthquake relocation +run_mode: 1 + +################################################### +# model update parameters setting # +################################################### +model_update: + max_iterations: 3 # maximum number of inversion iterations + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + #common parameters for all optim methods + step_length: 0.01 # the initial step length of model perturbation. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (gradient_descent) + optim_method_0: + step_method: 1 # the method to modulate step size. 0: according to objective function; 1: according to gradient direction + # if step_method:0. if objective function increase, step size -> step length * step_length_decay. + step_length_decay: 0.9 # default: 0.9 + # if step_method:1. if the angle between the current and the previous gradients is greater than step_length_gradient_angle, step size -> step length * step_length_change[0]. + # otherwise, step size -> step length * step_length_change[1]. + step_length_gradient_angle: 120 # default: 120.0 + step_length_change: [0.5, 1.2] # default: [0.5,1.2] + # Kdensity_coe is used to rescale the final kernel: kernel -> kernel / pow(density of kernel, Kdensity_coe). if Kdensity_coe > 0, the region with less data will be enhanced during the inversion + # e.g., if Kdensity_coe = 0, kernel remains upchanged; if Kdensity_coe = 1, kernel is normalized. 0.5 or less is recommended if really required. + Kdensity_coe: 0 # default: 0.0, range: 0.0 - 1.0 + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 20 # maximum number of each sub-iteration + regularization_weight: 0.5 # weight value for regularization (lbfgs mode only) + coefs_regulalization_rtp: [1, 1, 1] # regularization coefficients for rtp (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 0.0174533, 0.0174533] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + # inversion grid can be viewed in OUTPUT_FILES/inversion_grid.txt + n_inversion_grid: 5 # number of inversion grid sets + + # settings for flexible inversion grid + dep_inv: [-10, -7.5, -5, -2.5, 0, 2.5, 5, 7.5, 10] # inversion grid for vel in depth (km) + lat_inv: [37.7, 38.16, 38.62, 39.08, 39.54, 40.0, 40.46, 40.92, 41.38, 41.84, 42.3] # inversion grid for vel in latitude (degree) + lon_inv: [22.7, 23.06, 23.42, 23.78, 24.14, 24.5, 24.86, 25.22, 25.58, 25.94, 26.3, 26.66, 27.02, 27.3] # inversion grid for vel in longitude (degree) + trapezoid: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: false + # settings for flexible inversion grid for anisotropy + dep_inv_ani: [] # inversion grid for ani in depth (km) + lat_inv_ani: [] # inversion grid for ani in latitude (degree) + lon_inv_ani: [] # inversion grid for ani in longitude (degree) + trapezoid_ani: [1, 0, 50] # usually set as [1.0, 0.0, 50.0] (default) + + # Carefully change trapezoid and trapezoid_ani, if you really want to use trapezoid inversion grid, increasing the inversion grid spacing with depth to account for the worse data coverage in greater depths. + # The trapezoid_ inversion grid with index (i,j,k) in longitude, latitude, and depth is defined as: + # if dep_inv[k] < trapezoid[1], lon = lon_inv[i]; + # lat = lat_inv[j]; + # dep = dep_inv[k]; + # if trapezoid[1] <= dep_inv[k] < trapezoid[2], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*(dep_inv[k]-trapezoid[1])/(trapezoid[2]-trapezoid[1])*trapezoid[0]; + # dep = dep_inv[k]; + # if trapezoid[2] <= dep_inv[k], lon = mid_lon_inv+(lon_inv[i]-mid_lon_inv)*trapezoid[0]; + # lat = mid_lat_inv+(lat_inv[i]-mid_lat_inv)*trapezoid[0]; + # dep = dep_inv[k]; + # The shape of trapezoid inversion gird (x) looks like: + # + # lon_inv[0] [1] [2] [3] [4] + # |<-------- (lon_inv[end] - lon_inv[0]) ---->| + # dep_inv[0] | x x x x x | + # | | + # dep_inv[1] | x x x x x | + # | | + # dep_inv[2] = trapezoid[1] / x x x x x \ + # / \ + # dep_inv[3] / x x x x x \ + # / \ + # dep_inv[4] = trapezoid[2] / x x x x x \ + # | | + # dep_inv[5] | x x x x x | + # | | + # dep_inv[6] | x x x x x | + # |<---- trapezoid[0]* (lon_inv[end] - lon_inv[0]) ------>| + + # inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh), + # this precondition may be carefully applied if the sizes of inversion grids are unbalanced + invgrid_volume_rescale: true + + # path to station correction file (under development) + use_sta_correction: false + # sta_correction_file: dummy_sta_correction_file # station correction file path + step_length_sc: 0.001 # step length relate to the update of station correction terms + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [50, 150, 1, 1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 0.1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [15, 30, 1, 0.1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1, 3, 1, 0.1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [15, 30, 1, 0.1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : true # update azimuthal anisotropy (xi, eta) or not. default: false + + # -------------- for teleseismic inversion (under development) -------------- + # depth_taper : [d1,d2] means: + # if XXX < d1, kernel <- kernel * 0.0 + # if d1 <= XXX < d2, kernel <- kernel * (XXX-d1)/(d2-d1), (linear interpolation) + # if d2 <= XXX , kernel <- kernel * 1.0 + # You can easily set d1 = -200, d1 = -100 to remove this taper. + depth_taper : [-200, -100] + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # initial step length of relocation perturbation. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10, 10, 10, 1] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [5, 5, 5, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 100 # maximum number of iterations for relocation + tol_gradient : 0.0001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : true # 'yes' for using absolute traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 0.1] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight : [50, 150, 1, 0.1] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time : false # 'yes' for using common source differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 1] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight : [100, 200, 1, 1] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update ortime and location; 'no' for not using (no need to set parameters in this section) + residual_weight : [1, 3, 1, 0.1] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight : [10, 30, 1, 0.1] # XXX is the azimuth difference between two separate sources related to the common receiver. + + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_local_weight: 1 # weight of absolute traveltime data for relocation after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data for relocation after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data for relocation after balance, default: 1.0 + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode : 0 # 0 for update model parameters and relocation iteratively. 1 for update model parameters and relocation simultaneously. + + # for inv_mode : 0, parameters below are required + inv_mode_0: # update model for steps, then update location for steps, and repeat the process for loops. + model_update_N_iter : 1 + relocation_N_iter : 1 + max_loop : 10 + + # for inv_mode : 1, parameters below are required + inv_mode_1: # update model and location simultaneously for loops. + max_loop : 10 + +# keep these setting unchanged, unless you are familiar with the eikonal solver in this code +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 1 # order of stencil, 1 or 3 + stencil_type: 1 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + diff --git a/test/inversion_small/input_params_flexible_inv_grid.yml b/test/inversion_small/input_params_flexible_inv_grid.yml new file mode 100644 index 0000000..c400e49 --- /dev/null +++ b/test/inversion_small/input_params_flexible_inv_grid.yml @@ -0,0 +1,188 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10.0, 10.0] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes + +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec: true # swap source and receiver (1: yes, 0: no) + +model: + init_model_path: ./test_model_init.h5 # path to initial model file (ignored if init_model_type is '1d_*') + +parallel: # parameters for parallel computation + n_sims: 1 # number of simultaneous run + ndiv_rtp: [1, 1, 1] # number of subdomains + nproc_sub: 2 # number of subprocess used for each subdomain + +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # output the calculated field of all sources + output_model_dat: false # output model_parameters_inv_0000.dat or not. + output_final_model: true # output merged final model or not. + output_in_process: true # output model at each inv iteration or not. + single_precision_output: false # output results in single precision or not. + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + output_file_format: 0 # in/output file format, if 0: HDF5, if 1: ASCII + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 1 + + +################################################### +# model update parameters setting # +################################################### +model_update: # update model parameters (when run_mode : 1 and 3) + max_iterations: 20 # maximum number of inversion iterations + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + # common parameters for all optim methods + step_length: 0.03 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (grad_descent) + optim_method_0: + step_length_decay: 0.7 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + step_length_sc: 0.001 # ... # use it also ? + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 10 # maximum number of each sub-iteration + regularization_weight: 100 # weight value for regularization (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + n_inversion_grid: 5 # number of inversion grid sets + + # inversion grid type + type_invgrid_dep: 1 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lat: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lon: 0 # 0: uniform inversion grid, 1: flexible grid + + # settings for uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points (ignored if type_*_inv : 1) + min_max_dep_inv: [-10.0, 10.0] # depth in km (Radius of the earth is defined in config.h/R_earth) (ignored if type_dep_inv : 1) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # settings for flexible inversion grid (if type_*_inv : 1) + dep_inv: [-15, -10, -5, 0, 5, 10, 15] # depth in km (Radius of the earth is defined in config.h/R_earth) + lat_inv: [] # latitude in degree (ignored if type_lat_inv : 0) + lon_inv: [] # longitude in degree (ignored if type_lon_inv : 0) + + # path to station correction file + use_sta_correction: false + sta_correction_file: dummy_sta_correction_file # station correction file path + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two stations. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two earthquakes. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. the obj of different data means the average data misfit; no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1.0 # weight of absolute traveltime data, default: 1.0 + cs_dif_time_local_weight: 1.0 # weight of common source differential traveltime data, default: 1.0 + cr_dif_time_local_weight: 1.0 # weight of common receiver differential traveltime data, default: 1.0 + teleseismic_weight: 1.0 # weight of teleseismic data, default: 1.0 (exclude in this version) + + # -------------- inversion parameters (exclude in this version) -------------- + update_slowness: true # update slowness (velocity) or not. default: true + update_azi_ani: false # update azimuthal anisotropy (xi, eta) or not. default: false + update_rad_ani: false # update radial anisotropy (in future) or not. default: false + + # -------------- for teleseismic inversion (exclude in this version) -------------- + depth_taper: [-200.0, -100.0] # kernel weight : depth. --> 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 1) + + # relocation_strategy + step_length: 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime: [10.0, 10.0, 10.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime: [5.0, 5.0, 5.0, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations: 100 # maximum number of iterations for relocation + tol_gradient: 0.0001 # threshold value for checking the convergence for each iteration + + # params keeped for current version of relocation but may not be required + ortime_local_search: true # true: do local search for origin time; false: do not do local search for origin time + ref_ortime_change: 0.5 # reference value for origin time change (unit: second). If the change of origin time is larger than ref_ortime_change, do local search for origin time. + step_length_ortime_rescale: 0.1 # step length for rescaling origin time + + + # more option for using different types of data is under development (following) + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [10.0, 30.0, 1.0, 0.1] # weight of azimuth (deg.) between two earthquakes. + + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode: 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # Fristly, do relocation; Subsequently, do relocation every N steps; Finally, do relocation + relocation_first: true # true: do relocation first; false: do not relocation first. default: true + relocation_first_iterations: 10 # maximum number of iterations for relocation in the beginning. default: 10 + relocation_every_N_steps: 5 # subsequently, do relocation every N steps of updating model parameters. The iteration of relocation follows in Section + relocation_final: true # true: do relocation finally; false: do not relocation finally. default: true + relocation_final_iterations: 10 # maximum number of iterations for relocation in the beginning. default: 10 + + + +# --- parameters for core solver --------------------------------------------------------- +# --- please do not change the following parameters unless you know what you are doing --- + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 1e-4 + max_iterations: 200 + stencil_order: 3 # 1 or 3 + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization diff --git a/test/inversion_small/input_params_pre.yml b/test/inversion_small/input_params_pre.yml new file mode 100644 index 0000000..581a869 --- /dev/null +++ b/test/inversion_small/input_params_pre.yml @@ -0,0 +1,57 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10.0, 10.0] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes + +source: + src_rec_file: src_rec_test.dat # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec: true # swap source and receiver (1: yes, 0: no) + +model: + init_model_path: ./test_model_true.h5 # path to initial model file (ignored if init_model_type is '1d_*') + +parallel: # parameters for parallel computation + n_sims: 1 # number of simultaneous run + ndiv_rtp: [1, 1, 1] # number of subdomains + nproc_sub: 1 # number of subprocess used for each subdomain + +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: true # output the calculated field of all sources + output_model_dat: false # output model_parameters_inv_0000.dat or not. + output_final_model: true # output merged final model or not. + output_in_process: true # output model at each inv iteration or not. + single_precision_output: false # output results in single precision or not. + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + output_file_format: 0 # in/output file format, if 0: HDF5, if 1: ASCII + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 0 + +# --- parameters for core solver --------------------------------------------------------- +# --- please do not change the following parameters unless you know what you are doing --- + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 1e-4 + max_iterations: 500 + stencil_order: 1 # 1 or 3 + stencil_type : 1 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + diff --git a/test/inversion_small/make_test_model.ipynb b/test/inversion_small/make_test_model.ipynb new file mode 100644 index 0000000..3fc066d --- /dev/null +++ b/test/inversion_small/make_test_model.ipynb @@ -0,0 +1,347 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "depminmax 10.0 -10.0\n", + "17640\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "R_earth = 6371.0\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [10,50,50]\n", + "dr = (rr2-rr1)/(n_rtp[0]-1)\n", + "dt = (tt2-tt1)/(n_rtp[1]-1)\n", + "dp = (pp2-pp1)/(n_rtp[2]-1)\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[0])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[2])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "\n", + "c=0\n", + "for ir in range(n_rtp[0]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[2]):\n", + " # already initialized above\n", + " #eta_init[ir,it,ip] = 0.0\n", + " #xi_init[ir,it,ip] = 0.0\n", + " zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2)\n", + " fun_init[ir,it,ip] = s0\n", + " vel_init[ir,it,ip] = 1.0/s0\n", + "\n", + " # true model\n", + " if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \\\n", + " and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi):\n", + " c+=1\n", + " sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi))\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + "\n", + "\n", + "#r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# write out in hdf5 format\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta', data=zeta_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta', data=zeta_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times.\n", + "Format is as follows:\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + " ....\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_srcs = [20,20,20]\n", + "n_src = n_srcs[0]*n_srcs[1]*n_srcs[2]\n", + "n_rec = [30 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "nij_src = math.sqrt(n_src)\n", + "nij_rec = math.sqrt(n_rec[0])\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " #elev_recs.append(0) # elevation in m\n", + " #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + " # regularly\n", + " elev_recs.append(0.0)\n", + " tmp_ilon = i%nij_rec\n", + " tmp_ilat = int(i/nij_rec)\n", + " lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec)\n", + " lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec)\n", + "\n", + "\n", + "\n", + "# create source coordinates\n", + "for ir in range(n_srcs[0]):\n", + " for it in range(n_srcs[1]):\n", + " for ip in range(n_srcs[2]):\n", + " i_src = ir*n_srcs[1]*n_srcs[2] + it*n_srcs[2] + ip\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " # regular\n", + " dep = (R_earth-rr1)/n_srcs[0]*ir\n", + " lon = pp1deg + ip*(pp2deg-pp1deg)/n_srcs[2]\n", + " lat = tt1deg + it*(tt2deg-tt1deg)/n_srcs[1]\n", + "\n", + " # put independent name for each source\n", + " id_dummy = \"src_\"+str(i_src)\n", + " \n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = \"rec_\"+str(rec_names[i_rec])\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + " \n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8 (main, Dec 18 2022, 17:23:16) [GCC 12.2.0]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "c8112a80bcc57e66f52aa6c921b20667122cfa5e8b1ad09e9dfbd3a3ba336bd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/inversion_small/make_test_model.py b/test/inversion_small/make_test_model.py new file mode 100644 index 0000000..710e0d1 --- /dev/null +++ b/test/inversion_small/make_test_model.py @@ -0,0 +1,240 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6371.0 + +rr1=6361 +rr2=6381 +tt1=(38.0-0.3)/180*math.pi +tt2=(42.0+0.3)/180*math.pi +pp1=(23.0-0.3)/180*math.pi +pp2=(27.0+0.3)/180*math.pi + +n_rtp = [10,50,50] +dr = (rr2-rr1)/(n_rtp[0]-1) +dt = (tt2-tt1)/(n_rtp[1]-1) +dp = (pp2-pp1)/(n_rtp[2]-1) +rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + +# initial model +gamma = 0.0 +s0 = 1.0/6.0 +slow_p=0.06 +ani_p=0.04 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + # already initialized above + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + fun_init[ir,it,ip] = s0 + vel_init[ir,it,ip] = 1.0/s0 + + # true model + if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \ + and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi): + c+=1 + sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi)) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 120.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + +#r_earth = 6378.1370 +print("depminmax {} {}".format(R_earth-rr1,R_earth-rr2)) +print(c) + + +# %% +# write out in hdf5 format +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init) +fout_init.create_dataset('xi', data=xi_init) +fout_init.create_dataset('zeta', data=zeta_init) +fout_init.create_dataset('vel', data=vel_init) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true) +fout_true.create_dataset('xi', data=xi_true) +fout_true.create_dataset('zeta', data=zeta_true) +fout_true.create_dataset('vel', data=vel_true) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times. +# Format is as follows: +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# .... +# +# ``` + +# %% +import random +random.seed(1145141919810) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +arriv_t_dummy = 0.0 +weight_dummy = 0.444 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_srcs = [10,20,20] +#n_srcs = [2,1,1] +n_src = n_srcs[0]*n_srcs[1]*n_srcs[2] +n_rec = [30 for x in range(n_src)] + +lines = [] + +nij_rec = math.sqrt(n_rec[0]) + +pos_src=[] +pos_rec=[] + + +# create receiver coordinates +elev_recs=[] +lon_recs=[] +lat_recs=[] +rec_names=[] +for i in range(n_rec[0]): + #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m + #elev_recs.append(0) # elevation in m + #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9)) + #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9)) + rec_names.append(i) + # regularly + elev_recs.append(0.0) + tmp_ilon = i%nij_rec + tmp_ilat = int(i/nij_rec) + lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec) + lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec) + + + +# create source coordinates +for ir in range(n_srcs[0]): + for it in range(n_srcs[1]): + for ip in range(n_srcs[2]): + i_src = ir*n_srcs[1]*n_srcs[2] + it*n_srcs[2] + ip + # define one point in the domain (rr1 bottom, rr2 top) + # random + #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98) + #lon = random.uniform(pp1deg,pp2deg) + #lat = random.uniform(tt1deg,tt2deg) + + # regular + dep = (R_earth-rr1)/n_srcs[0]*ir + lon = pp1deg + ip*(pp2deg-pp1deg)/n_srcs[2] + lat = tt1deg + it*(tt2deg-tt1deg)/n_srcs[1] + + # put independent name for each source + id_dummy = "src_"+str(i_src) + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy, weight_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + + # create dummy station + for i_rec in range(n_rec[i_src]): + elev_rec = elev_recs[i_rec] + lon_rec = lon_recs[i_rec] + lat_rec = lat_recs[i_rec] + st_name_dummy = "rec_"+str(rec_names[i_rec]) + + rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, arriv_t_dummy, weight_dummy] + lines.append(rec) + + pos_rec.append([lon_rec,lat_rec,elev_rec]) + + +# write out ev_arrivals file +fname = 'src_rec_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# # %% +# # draw src and rec positions +# import matplotlib.pyplot as plt + +# for i_src in range(n_src): +# plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# # %% +# # plot receivers +# for i_rec in range(n_rec[0]): +# plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + + + + diff --git a/test/inversion_small/run_this_example.sh b/test/inversion_small/run_this_example.sh new file mode 100755 index 0000000..5366e6e --- /dev/null +++ b/test/inversion_small/run_this_example.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +python make_test_model.py + +# get number of sweep parallel processes from input variable (default 1) +nproc_sweep=${1:-1} +# get number of processes for domain decomposition +nproc_dd=${2:-1} +# calculate the total number of processes +nproc_total=$((nproc_sweep*nproc_dd*nproc_dd*nproc_dd)) + +# echo the number of processes +echo "Number of sweep parallel processes: $nproc_sweep" +echo "Number of processes for domain decomposition: $nproc_dd" +echo "Total number of processes: $nproc_total" + +# modify the input_params_pre.yml file +# nproc_sub: (integer) # number of processors for sweep parallelization (parallel the fast sweep method) +pta setpar input_params_pre.yml parallel.nproc_sub ${nproc_sweep} +# ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) +pta setpar input_params_pre.yml parallel.ndiv_rtp ${nproc_dd},${nproc_dd},${nproc_dd} + +# nproc_sub: (integer) # number of processors for sweep parallelization (parallel the fast sweep method) +pta setpar input_params.yml parallel.nproc_sub ${nproc_sweep} +# ndiv_rtp: [1, 1, 1] # number of subdivision on each direction (parallel the computional domain) +pta setpar input_params.yml parallel.ndiv_rtp ${nproc_dd},${nproc_dd},${nproc_dd} + +# run for preparing true travel times +mpirun --oversubscribe -n $nproc_total ../../build/bin/TOMOATT -i input_params_pre.yml + +# run for inversion +mpirun --oversubscribe -n $nproc_total ../../build/bin/TOMOATT -i input_params.yml +#mpirun -n 8 ../../build/bin/TOMOATT -i input_params_flexible_inv_grid.yml + +# then final model can be plot by e.g. check_3d_out.ipynb +#paraview OUTPUT_FILES/out_data_sim.xmf diff --git a/test/old_tests/.DS_Store b/test/old_tests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..151dcef54ee0894be2db68648076b028a264deb5 GIT binary patch literal 10244 zcmeHM!EO^V5S=ZF2rU!}QYCJC;D9(pEnl!LL8#{-)Dvl&G!0VHjncG&1JZs$#V7D7 zy&%r;1$+V@z=1cm71fDn;}t?eWh{ATI&~0aZX1Pz6*0Rp4J#0Pk!rjWuias0ye8s=!PEULR6a zwwbeqwPxwS!K47NH8h)obL0UAlRBF@TUcwL=+kBoiGwCC#Yik1*HdM$_TR zcDtL8#-^*4{V!GVqrBBR8s+w|*B^*(xk+{buuorj@w$8lvH&TyX7smGSy zd_<%HFM(6gGZ=Zm(~FNjVPINYj1Tkj+>5c+*_Sz>s63&r7ys(Bemqj(6FIKHFB0wXUArNa>;1w~Rz%2sl^DCI&dXOKlb3;1zW~=@_U*<1xDjh>$Q;P9; z)PFFK%`zUPPusoAtEzZ`XQdbf-j(|BbXdn`Hnxwp361CwT;`*{{i})Sqi_P3NNjNBkHUI98wUs% z&zbvnz`S(v{{XN1Be2ZTKJcD1`p$3IQh$Nh5=@X!DaPYL=6$w-J8Dcl%nb9fUq)lJ zO>y4GGdRC$H0zJSCITgJib4jNMIb$XP4j)hbEQQUPz6*0Rp90;aLZCmdH?^V{Qv*W z7eX1T0{^iBNv+jx?Lq*zx4s|+@3p6>2dG@wudvoYa9|g1H{0>}!Fzj8UE3C0F1VgK zTUcx0Xg6?JyPN;_{|qq0m*&}CUZVN`Y`0FxRVwA~Lgrkl4=;bw{C|QB)Y~@@=4qD0 F{{{^X&FugH literal 0 HcmV?d00001 diff --git a/test/old_tests/heterogeneous_inv_test/input_params.yml b/test/old_tests/heterogeneous_inv_test/input_params.yml new file mode 100644 index 0000000..6947204 --- /dev/null +++ b/test/old_tests/heterogeneous_inv_test/input_params.yml @@ -0,0 +1,50 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'OUTPUT_FILES/src_rec_file_forward.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + optim_method : 2 # optimization method. 0 : "grad_descent", 1 : "halve-stepping", 2 : "lbfgs", + max_iterations_inv : 20 # maximum number of inversion iterations + step_size : 0.01 # step size for inversion + + # parameters for multiparametric inversion + n_inversion_grid : 5 # number of inversion grid sets + n_inv_dep_lat_lon : [5,20,20] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 10.0] # depth in km with R = 6371.0 + min_max_lat_inv : [37.7,43.3] # latitude in degree + min_max_lon_inv : [22.7,28.3] # longitude in degree + + # parameter for halving-stepping or lbfgs + max_sub_iterations : 10 # maximum number of sub-iterations + #regularization_weight : 0.0 # regularization weight + smooth_method: 0 + #l_smooth_rtp : [20,20,20] # + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + is_output_in_process : 1 # output the model parameters in each iteration. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/heterogeneous_inv_test/input_params_pre.yml b/test/old_tests/heterogeneous_inv_test/input_params_pre.yml new file mode 100644 index 0000000..d460c93 --- /dev/null +++ b/test/old_tests/heterogeneous_inv_test/input_params_pre.yml @@ -0,0 +1,34 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 500 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/heterogeneous_inv_test/make_test_model.ipynb b/test/old_tests/heterogeneous_inv_test/make_test_model.ipynb new file mode 100644 index 0000000..b849024 --- /dev/null +++ b/test/old_tests/heterogeneous_inv_test/make_test_model.ipynb @@ -0,0 +1,441 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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YGdnh127dmHhwoWws7ODt7c3z7kJubq6ol27dkhNTTX59zcLThOQy+WIiIjAtm3bjPfp9Xps27YNUVFRIiazfiEhIfDx8al37rVaLRISEnju75AgCJg+fTo2bdqE7du3IyQkpN7jERERsLe3r3fOz5w5g4yMDJ7zJqLX61FVVcVzbQKDBw/G8ePHceTIEeOtR48eGDt2rPH/85ybTmlpKc6fPw9fX1/Tf3/f9TBlEgRBENavXy8oFAph9erVwsmTJ4UpU6YIrq6uglqtFjuaxSspKREOHz4sHD58WAAgLFiwQDh8+LBw8eJFQRAE4eOPPxZcXV2F3377TTh27JgwYsQIISQkRKioqBA5uWWaOnWqoFKphJ07dwq5ubnGW3l5ufGYF154QQgMDBS2b98uHDp0SIiKihKioqJETG25Zs+eLezatUtIS0sTjh07JsyePVuQSCTC1q1bBUHguW4O186iEgSe86Y0a9YsYefOnUJaWpqwb98+ITo6WvDw8BDy8/MFQTDtuWbBaUJff/21EBgYKMjlcqFXr17CgQMHxI5kFXbs2CEAuO72zDPPCIJgmCr+9ttvC97e3oJCoRAGDx4snDlzRtzQFuxG5xqAsGrVKuMxFRUVwosvvii4ubkJjo6OwiOPPCLk5uaKF9qCPfvss0JQUJAgl8sFT09PYfDgwcZyIwg8183h/xccnvOmM3r0aMHX11eQy+VCq1athNGjRwupqanGx015riWCIAh3fx2IiIiIyHxwDA4RERFZHRYcIiIisjosOERERGR1WHCIiIjI6rDgEBERkdVhwSEiIiKrw4JDREREVocFh4iIiKwOCw4RERFZHRYcIiIisjosOERERGR1WHCIiIjI6vwf+rnrG2B8EHIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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QUNDA37961/jqquuwv79+/3+WTPBIaJzeuCBB7B///5+e+bkezk5Odi9ezcsFgveffdd3HXXXdi0aZPcYQWlmpoa/PznP8e6desQHh4udzhB74YbbvD+/xMnTkRhYSGGDRuGt99+GxEREX59bW5R+UBCQgK0Wu1Zld+NjY1ISUmRKarQIH2+/Ox9b9GiRVizZg0+//xzpKene7+ekpICu92O1tbWfvfnZ37p9Ho9Ro4ciYKCAixfvhx5eXn405/+xM/aD8rLy9HU1ITJkydDp9NBp9Nh06ZNeP7556HT6ZCcnMzP3I9MJhNGjx6NY8eO+f2/byY4PqDX61FQUID169d7v+ZyubB+/XoUFRXJGFnwGz58OFJSUvp99larFaWlpfzsL5Eoili0aBFWr16NDRs2YPjw4f2+X1BQgLCwsH6f+eHDh1FdXc3P3EdcLhdsNhs/az+4/vrrsW/fPuzevdt7mzJlCubOnev9//mZ+097ezuOHz+O1NRU///3fdllyiSKoiiuWrVKNBgM4sqVK8WDBw+KCxcuFE0mk2g2m+UOTfXa2trEXbt2ibt27RIBiM8995y4a9cu8eTJk6IoiuLTTz8tmkwm8YMPPhD37t0r3nrrreLw4cPFrq4umSNXp/vuu080Go3ixo0bxYaGBu+ts7PTe597771XzMzMFDds2CDu2LFDLCoqEouKimSMWr0ee+wxcdOmTWJlZaW4d+9e8bHHHhMFQRA//fRTURT5WQdC31NUosjP3JceeughcePGjWJlZaX41VdficXFxWJCQoLY1NQkiqJ/P2smOD70wgsviJmZmaJerxenTZsmbtu2Te6QgsLnn38uAjjrdtddd4mi6D4q/sQTT4jJycmiwWAQr7/+evHw4cPyBq1iA33WAMS///3v3vt0dXWJ999/vxgXFydGRkaK3/72t8WGhgb5glaxH/3oR+KwYcNEvV4vJiYmitdff703uRFFftaB8PUEh5+579xxxx1iamqqqNfrxaFDh4p33HGHeOzYMe/3/flZC6Ioipe/DkRERESkHKzBISIioqDDBIeIiIiCDhMcIiIiCjpMcIiIiCjoMMEhIiKioMMEh4iIiIIOExwiIiIKOkxwiIiIKOgwwSEiIqKgwwSHiIiIgg4THCIiIgo6THCIiIgo6Px/oczYqPli5s0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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QUNDA37961/jqquuwv79+/3+WTPBIaJzeuCBB7B///5+e+bkezk5Odi9ezcsFgveffdd3HXXXdi0aZPcYQWlmpoa/PznP8e6desQHh4udzhB74YbbvD+/xMnTkRhYSGGDRuGt99+GxEREX59bW5R+UBCQgK0Wu1Zld+NjY1ISUmRKarQIH2+/Ox9b9GiRVizZg0+//xzpKene7+ekpICu92O1tbWfvfnZ37p9Ho9Ro4ciYKCAixfvhx5eXn405/+xM/aD8rLy9HU1ITJkydDp9NBp9Nh06ZNeP7556HT6ZCcnMzP3I9MJhNGjx6NY8eO+f2/byY4PqDX61FQUID169d7v+ZyubB+/XoUFRXJGFnwGz58OFJSUvp99larFaWlpfzsL5Eoili0aBFWr16NDRs2YPjw4f2+X1BQgLCwsH6f+eHDh1FdXc3P3EdcLhdsNhs/az+4/vrrsW/fPuzevdt7mzJlCubOnev9//mZ+097ezuOHz+O1NRU///3fdllyiSKoiiuWrVKNBgM4sqVK8WDBw+KCxcuFE0mk2g2m+UOTfXa2trEXbt2ibt27RIBiM8995y4a9cu8eTJk6IoiuLTTz8tmkwm8YMPPhD37t0r3nrrreLw4cPFrq4umSNXp/vuu080Go3ixo0bxYaGBu+ts7PTe597771XzMzMFDds2CDu2LFDLCoqEouKimSMWr0ee+wxcdOmTWJlZaW4d+9e8bHHHhMFQRA//fRTURT5WQdC31NUosjP3JceeughcePGjWJlZaX41VdficXFxWJCQoLY1NQkiqJ/P2smOD70wgsviJmZmaJerxenTZsmbtu2Te6QgsLnn38uAjjrdtddd4mi6D4q/sQTT4jJycmiwWAQr7/+evHw4cPyBq1iA33WAMS///3v3vt0dXWJ999/vxgXFydGRkaK3/72t8WGhgb5glaxH/3oR+KwYcNEvV4vJiYmitdff703uRFFftaB8PUEh5+579xxxx1iamqqqNfrxaFDh4p33HGHeOzYMe/3/flZC6Ioipe/DkRERESkHKzBISIioqDDBIeIiIiCDhMcIiIiCjpMcIiIiCjoMMEhIiKioMMEh4iIiIIOExwiIiIKOkxwiIiIKOgwwSEiIqKgwwSHiIiIgg4THCIiIgo6THCIiIgo6Px/oczYqPli5s0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "depminmax 10.0 -10.0\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "R_earth = 6371.0\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [50,50,50]\n", + "dr = (rr2-rr1)/(n_rtp[0]-1)\n", + "dt = (tt2-tt1)/(n_rtp[1]-1)\n", + "dp = (pp2-pp1)/(n_rtp[2]-1)\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[0])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[2])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "n_sign_rtp = [1,2,2] # number of sign wave in each direction\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "\n", + "\n", + "def make_1d_sign_wave(n_sign_rtp, rr, tt, pp):\n", + " \"\"\"\n", + " make 1d sign wave for each direction following n_sign_rtp\n", + " n_sign_rtp: frequency of sign wave in each direction\n", + " \"\"\"\n", + "\n", + " n_r = rr.shape[0]\n", + " n_t = tt.shape[0]\n", + " n_p = pp.shape[0]\n", + "\n", + " r_1d = np.zeros(n_r)\n", + " t_1d = np.zeros(n_t)\n", + " p_1d = np.zeros(n_p)\n", + "\n", + " for ir in range(n_r):\n", + " r_1d[ir] = math.sin(2.*n_sign_rtp[0]*math.pi*ir/(n_r-1))\n", + "\n", + " for it in range(n_t):\n", + " t_1d[it] = math.sin(2.*n_sign_rtp[1]*math.pi*it/(n_t-1))\n", + "\n", + " for ip in range(n_p):\n", + " p_1d[ip] = math.sin(2.*n_sign_rtp[2]*math.pi*ip/(n_p-1))\n", + " \n", + " \n", + "\n", + " # plot 1d sign wave\n", + " import matplotlib.pyplot as plt\n", + " plt.figure()\n", + " plt.plot(r_1d)\n", + " plt.figure()\n", + " plt.plot(t_1d)\n", + " plt.figure()\n", + " plt.plot(p_1d)\n", + " plt.show()\n", + "\n", + " return r_1d, t_1d, p_1d\n", + "\n", + "# make 1d sign wave for each direction following n_sign_rtp\n", + "r_1d, t_1d, p_1d = make_1d_sign_wave(n_sign_rtp, rr, tt, pp)\n", + "\n", + "for ir in range(n_rtp[0]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[2]):\n", + " # already initialized above\n", + " #eta_init[ir,it,ip] = 0.0\n", + " #xi_init[ir,it,ip] = 0.0\n", + " zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2)\n", + " fun_init[ir,it,ip] = s0\n", + " vel_init[ir,it,ip] = 1.0/s0\n", + "\n", + " # true model\n", + " sigma = r_1d[ir]*t_1d[it]*p_1d[ip] \n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + "\n", + "\n", + "#r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# write out in hdf5 format\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta', data=zeta_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta', data=zeta_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times.\n", + "Format is as follows:\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + " ....\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_srcs = [10,20,20]\n", + "n_src = n_srcs[0]*n_srcs[1]*n_srcs[2]\n", + "n_recs = [10,10]\n", + "n_rec = n_recs[0]*n_recs[1]\n", + "\n", + "lines = []\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "n_rec_2 = 0\n", + "for i in range(n_recs[0]):\n", + " for j in range(n_recs[1]):\n", + "\n", + " if (i >= n_recs[0]/4 or j >= n_recs[1]/4) and (j % 4 != 0 or i % 4 != 0):\n", + " continue\n", + "\n", + " n_rec_2 += 1\n", + "\n", + " id_rec = i*n_recs[1]+j\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " #elev_recs.append(0) # elevation in m\n", + " #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(id_rec)\n", + " # regularly\n", + " elev_recs.append(0.0)\n", + " lon_recs.append(pp1deg + i*(pp2deg-pp1deg)/n_recs[0])\n", + " lat_recs.append(tt1deg + j*(tt2deg-tt1deg)/n_recs[1])\n", + "\n", + "\n", + "\n", + "# create source coordinates\n", + "c=0\n", + "for ir in range(n_srcs[0]):\n", + " for it in range(n_srcs[1]):\n", + " for ip in range(n_srcs[2]):\n", + "\n", + " # make the number of sources one-fourth if the position is right hand side\n", + " if (ip >= n_srcs[2]/4 or it >=n_srcs[1]/4) and (ip%4 != 0 or it%4 != 0):\n", + " continue\n", + " \n", + " if ir == 0:\n", + " c+=1\n", + "\n", + " i_src = ir*n_srcs[1]*n_srcs[2] + it*n_srcs[2] + ip\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " # regular\n", + " dep = (R_earth-rr1)/n_srcs[0]*ir\n", + " lon = pp1deg + ip*(pp2deg-pp1deg)/n_srcs[2]\n", + " lat = tt1deg + it*(tt2deg-tt1deg)/n_srcs[1]\n", + "\n", + " \n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec_2, id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec_2):\n", + " \n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = rec_names[i_rec]\n", + " \n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + " \n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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P19Dhw4N3Gxo+PDhWrVqVeD5iooK/f3f/70SEhLUvXt3XXnllVq6dOl5x33ttdfUv39/de3aVWlpafroo49asoywtUTdzz33nDweT9AyePDgli6l0c5Xc2lpqSZOnKg+ffooJiZGt912mw4cOHDecdtyr1ui5rbe5/peeukleTweTZ8+PbDu5MmTysrK0o9//GP16NFDt9xyy3nrNsbo2WefVWJioqKiojR69Gjt3r27hfe+aZyqefLkyWf1euzYsS28900Xqu5/+7d/06hRoxQTEyOPx6MjR440aqy2/L4+k1M1O/W+JtC4yOv16qWXXtK2bdv0ySef6IYbbtD48eP1v//7v5Kke+65R8XFxVqxYoU+++wzTZo0Sbfddpu2b9/e4Jhvv/22ZsyYodmzZ+vTTz/VsGHDNGbMGB08eLC1yjqvlqhbkn7yk5+ovLw8sGzatKk1ymmUc9VcWVmpzMxMeTwerV+/Xh988IG+//573XTTTaqpqWlwzLbe65aoWWrbfT7Txx9/rD/84Q8aOnRo0PpHH31U//mf/6l3331XBQUF+uabbzRp0qRzjjVnzhzNmzdPr7/+urZu3aru3btrzJgxOnnyZEuWEDYna5aksWPHBvV60aJFLbXrzdJQ3cePH9fYsWP19NNPN3qstv6+ruNkzZJD72uDNuVHP/qR+fd//3djjDHdu3c3b775ZtDzvXr1Mn/84x8bfP0111xjsrKyAo+rq6tNUlKSycnJaZkddkhz6549e7YZNmxYS+6i4+pqXrNmjenUqZPx+XyB544cOWI8Ho/Jz89v8PU29rq5NdvS56NHj5qLL77Y5Ofnm+uvv9488sgjxpjaGi+44ALz7rvvBrb94osvjCSzefPmkGPV1NSYhIQE8y//8i+BdUeOHDGRkZFm0aJFLVpHOJys2Rhj7r33XjN+/PgW3uvma6juM23YsMFIMn/961/PO54N72una3bqfc03NG1EdXW1Fi9erMrKSg0fPlySdO211+rtt9/Wd999p5qaGi1evFgnT57UqFGjQo7x/fffa9u2bRo9enRgXadOnTR69Ght3ry5NcoImxN119m9e7eSkpJ00UUX6e6779bevXtboYLw1a+5qqpKHo8n6KZTXbt2VadOnRr8V4ptvXai5jo29DkrK0s33nhjUH8kadu2bTp16lTQ+sGDB6tv374N9q2srEwVFRVBr4mNjVVaWlqb6rWTNdfZuHGj4uLiNGjQIE2bNk2HDx9ukX1vjobqbgpb3tdO1lzHifd1u/hxSpt99tlnGj58uE6ePKkePXooLy9Pl112mSTpnXfe0e23364f//jH6ty5s7p166a8vDwNHDgw5FjffvutqqurFR8fH7Q+Pj5eu3btavFawuFk3ZKUlpamBQsWaNCgQSovL9fzzz+vkSNHaufOnYqOjm6tss6poZr79Omj7t2766mnntKvfvUrGWM0c+ZMVVdXq7y8PORYtvTayZolO/q8ePFiffrpp/r444/Peq6iokJdunRRz549g9bHx8eroqIi5Hh160P1uqHXtDana5ZqDzdNmjRJKSkpKi0t1dNPP61x48Zp8+bNioiIcLqEJjlX3U1hw/va6Zol597XBBqXDRo0SDt27JDP59OSJUt07733qqCgQJdddpmeeeYZHTlyRGvXrlXv3r313nvv6bbbblNhYaEuv/xyt3e9WZyue9y4cYE/Dx06VGlpaerXr5/eeecd3X///a1V1jmdq+Z3331X06ZN07x589SpUyfdeeeduvLKK9Wpk91fojpdc1vv8759+/TII48oPz9fXbt2dXt3WkVL1XzHHXcE/nz55Zdr6NChGjBggDZu3KiMjAzH5mkqeu1czY69r5t90AqOysjIMFOnTjUlJSVGktm5c+dZzz/wwAMhX1tVVWUiIiJMXl5e0Pp77rnH3HzzzS21y45oTt0Nufrqq83MmTOd3E1H1dV8pkOHDgWOOcfHx5s5c+aEfK2tvW5OzQ1pS33Oy8szkkxERERgkWQ8Ho+JiIgwa9euDXleQd++fc2//uu/hhyztLTUSDLbt28PWp+enm4efvjhFqqk8Vqi5ob07t3bvP766w7ufdOdr+7Tp08Htm3s+SRt/X3dEjU3pCnva7v/+dcO1dTUqKqqSsePH5eks/61GhER0eBVIF26dNFVV12ldevWBY23bt26wPkpbVVz6g7l2LFjKi0tVWJioqP76aS6ms/Uu3dv9ezZU+vXr9fBgwd18803h3ytrb1uTs2htLU+Z2Rk6LPPPtOOHTsCy9VXX62777478OcLLrggqG/FxcXau3dvg31LSUlRQkJC0Gv8fr+2bt3aJnrdEjWHsn//fh0+fNiaXjflsFhbf1+3RM2hNPl93aToBEfMnDnTFBQUmLKyMlNUVGRmzpxpPB6P+e///m/z/fffm4EDB5qRI0earVu3mpKSEvOb3/zGeDwe81//9V+BMW644Qbz6quvBh4vXrzYREZGmgULFpjPP//cTJ061fTs2dNUVFS4UWJILVH3Y489ZjZu3GjKysrMBx98YEaPHm169+5tDh486EaJZzlXzcYY88Ybb5jNmzebkpIS8x//8R+mV69eZsaMGUFj2Nbrlqi5rfc5lPpXgTz44IOmb9++Zv369eaTTz4xw4cPN8OHDw96zaBBg8yyZcsCj1966SXTs2dPs3z5clNUVGTGjx9vUlJSzIkTJ1qrjLA0t+ajR4+axx9/3GzevNmUlZWZtWvXmiuvvNJcfPHF5uTJk61ZSljq111eXm62b99u/vjHPxpJ5v333zfbt283hw8fDmxj2/u6Pidqdup9TaBx0T/8wz+Yfv36mS5dupg+ffqYjIyMwP/sjTHmyy+/NJMmTTJxcXGmW7duZujQoWddztyvXz8ze/bsoHWvvvqq6du3r+nSpYu55pprzJYtW1qjnEZribpvv/12k5iYaLp06WIuvPBCc/vtt5uSkpLWKum8zlfzU089ZeLj480FF1xgLr74YvPb3/7W1NTUBI1hW69boua23udQ6v8P/8SJE+af/umfzI9+9CPTrVs3M3HiRFNeXh70GkkmNzc38LimpsY888wzJj4+3kRGRpqMjAxTXFzcShWEr7k1Hz9+3GRmZpo+ffqYCy64wPTr189MmTKlzX6o16lf9+zZs42ks5Yze2vb+7o+J2p26n3tMcYYR74jAgAAcAnn0AAAAOsRaAAAgPUINAAAwHoEGgAAYD0CDQAAsB6BBgAAWI9AAwAArEegAQAA1iPQAAAA6xFoAACA9Qg0AADAegQaAABgvf8P04yFjksl7T4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "n_src_2d = c#n_srcs[0]*n_srcs[1]*n_srcs[2]\n", + "\n", + "for i_src in range(n_src_2d):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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1iPQAAAA6xFoAACA9Qg0AADAegQaAABgPQINAACwHoEGAABYj0ADAACsR6ABAADWI9AAAADrBRVoCgsLNXr0aMXHx8vlcmnKlCmqrq4O6DNhwgQ5HI6A7b777jvjuMYYPfnkk0pOTlZcXJxycnK0c+fO4KsBAABRKahAU15eLrfbrc2bN6u0tFQnTpxQbm6u6uvrA/rdc889qqur828LFy4847gLFy7U4sWL9corr6iyslK9e/fWxIkTdfz48eArAgAAUad7MJ3XrFkT8Hrp0qVyuVyqqqpSVlaWv71Xr15KSko6pzGNMVq0aJEef/xxTZ48WZL02muvKTExUe+8845uvfXWYKYIAACiUIfuofF6vZKkfv36BbT/6U9/Uv/+/TV8+HDNnz9fR48ebXOM3bt3y+PxKCcnx9/mdDqVmZmpioqKVo9paGiQz+cL2AAAQPQK6hOaUzU1NamgoEDjxo3T8OHD/e233367Bg4cqJSUFG3btk2PPvqoqqurVVxc3Oo4Ho9HkpSYmBjQnpiY6N/XUmFhoZ5++un2Th0AAESYdgcat9ut7du3a9OmTQHts2bN8v/58ssvV3JysrKzs1VbW6uMjIz2z/QU8+fP19y5c/2vfT6f0tLSQjI2AACwT7suOeXn52vVqlVav369UlNTz9g3MzNTklRTU9Pq/pP32uzfvz+gff/+/W3ehxMbG6uEhISADQAARK+gAo0xRvn5+SopKVFZWZnS09PPeszWrVslScnJya3uT09PV1JSktatW+dv8/l8qqys1JgxY4KZHgAAiFJBBRq3263XX39dy5YtU3x8vDwejzwej44dOyZJqq2t1TPPPKOqqip99dVXWrlypWbMmKGsrCyNGDHCP86wYcNUUlIiSXI4HCooKNCzzz6rlStX6rPPPtOMGTOUkpKiKVOmhK5SAAAQsYK6h2bJkiWSmr8871RFRUWaOXOmevToobVr12rRokWqr69XWlqapk+frscffzygf3V1tf8JKUl65JFHVF9fr1mzZunw4cO65pprtGbNGvXs2bOdZQEAgGjiMMaYcE+io3w+n5xOp7xeL/fTAABgiVC+f/O7nAAAgPUINAAAwHoEGgAAYD0CDQAAsB6BBgAAWI9AAwAArEegAQAA1iPQAAAA6xFoAACA9Qg0AADAegQaAABgPQINAACwHoEGAABYj0ADAACs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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec_2):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_rec_2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "c8112a80bcc57e66f52aa6c921b20667122cfa5e8b1ad09e9dfbd3a3ba336bd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion/README.md b/test/old_tests/inversion/README.md new file mode 100644 index 0000000..2028979 --- /dev/null +++ b/test/old_tests/inversion/README.md @@ -0,0 +1,14 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file + - true model + - initial model + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_result.dat file which includes the arrival time at each station + +3. run TOMOATT in inversion mode with `input_params.yml`. + \ No newline at end of file diff --git a/test/old_tests/inversion/check_obj_func.ipynb b/test/old_tests/inversion/check_obj_func.ipynb new file mode 100644 index 0000000..4c85914 --- /dev/null +++ b/test/old_tests/inversion/check_obj_func.ipynb @@ -0,0 +1,66 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check the change of objective values\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fpath='objective_function.txt'\n", + "\n", + "objs=[]\n", + "\n", + "with open(fpath) as f:\n", + " lines = f.readlines()\n", + "\n", + " for l in lines:\n", + " if(l.startswith('i_inv')):\n", + " continue\n", + " objs.append(float(l.strip().split(',')[1]))\n", + "\n", + "\n", + "plt.xlabel('iteration')\n", + "plt.ylabel('objective function value')\n", + "plt.plot(objs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion/check_src_rec_file.ipynb b/test/old_tests/inversion/check_src_rec_file.ipynb new file mode 100644 index 0000000..42ca8e0 --- /dev/null +++ b/test/old_tests/inversion/check_src_rec_file.ipynb @@ -0,0 +1,185 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read src_rec file and check its arrival time and distance from src to rec\n", + "import numpy as np\n", + "\n", + "def read_src_rec_file(fpath):\n", + "\n", + " with open(fpath, \"r\") as f:\n", + " lines = f.readlines()\n", + "\n", + " # list to store src lon lat\n", + " src_pos = []\n", + " # list to store rec lon lat\n", + " rec_pos_tmp=[]\n", + " rec_pos = []\n", + "\n", + " for line in lines:\n", + " # src line if there are 13 elements\n", + " if len(line.split()) == 13:\n", + " # store source lon lat dep\n", + " stlon = float(line.split()[8])\n", + " stlat = float(line.split()[7])\n", + " src_pos.append([stlon, stlat])\n", + "\n", + " nrec = float(line.split()[11])\n", + " # rec line if there are 9 elements\n", + " elif len(line.split()) == 9:\n", + " # store receiver lon lat dep\n", + " rclon = float(line.split()[4])\n", + " rclat = float(line.split()[3])\n", + " rctime= float(line.split()[8])\n", + " # calc epicentral distance from src\n", + " dist = np.sqrt((stlon-rclon)**2 + (stlat-rclat)**2)\n", + " rec_pos_tmp.append([rclon, rclat, rctime, dist])\n", + "\n", + " nrec-=1\n", + " else:\n", + " raise ValueError(\"src_rec_test_out.dat file is not correct\")\n", + "\n", + " if nrec==0:\n", + " rec_pos.append(rec_pos_tmp)\n", + " # remove all rec_pos_tmp\n", + " rec_pos_tmp = []\n", + "\n", + "\n", + "\n", + " src_pos = np.array(src_pos)\n", + " rec_pos = np.array(rec_pos)\n", + "\n", + " return src_pos, rec_pos" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "src_pos_true, rec_pos_true = read_src_rec_file(\"./src_rec_test_out.dat\")\n", + "src_pos_try, rec_pos_try = read_src_rec_file(\"./src_rec_test_out_out.dat\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot rec_pos for each src_pos with color by 3rd element\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def plot_srcrec(src_pos, rec_pos):\n", + "\n", + " # selected source\n", + " id_src = 1\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10,10))\n", + " \n", + " # plot arrival time\n", + " # src\n", + " axs[0].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + " # rec\n", + " axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=10, marker='o')\n", + " \n", + " # colorbar\n", + " cbar = plt.colorbar(axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=100, marker='o'))\n", + " cbar.set_label('arrival time')\n", + " \n", + " # plot epicentral distance\n", + " # src\n", + " axs[1].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + " # rec\n", + " axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=100, marker='o')\n", + " \n", + " # colorbar\n", + " cbar = plt.colorbar(axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=10, marker='o'))\n", + " cbar.set_label('epicentral distance')\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot_srcrec(src_pos_true, rec_pos_true)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot_srcrec(src_pos_try, rec_pos_try)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_diff = rec_pos_true[:][:][2]-rec_pos_try[:][:][2]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_diff.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_true.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + }, + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion/input_params.yml b/test/old_tests/inversion/input_params.yml new file mode 100644 index 0000000..1d81708 --- /dev/null +++ b/test/old_tests/inversion/input_params.yml @@ -0,0 +1,51 @@ +version : 2 + +domain : + #min_max_dep : [-2.863,17.137] # depth in km + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test_out.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + optim_method : 0 # optimization method. 0 : "grad_descent", 2 : "lbfgs", 1 : "halve-stepping" + smooth_method : 0 # 0: multigrid parametrization, 1: laplacian smoothing with CG + max_iterations_inv : 100 # maximum number of inversion iterations + step_size : 0.01 # step size for inversion + # parameters for multiparametric inversion + n_inversion_grid : 5 # number of inversion grid sets + n_inv_dep_lat_lon : [5,10,10] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 10.0] # depth in km with R = 6371.0 + min_max_lat_inv : [37.7,42.3] # latitude in degree + min_max_lon_inv : [22.7,27.3] # longitude in degree + # parameters for laplacian smoothing + l_smooth_rtp : [10,10,10] # smoothing coefficients for each direction + regularization_weight : 1.0 # regularization weight NOTWORKING + # parameter for halving-stepping or lbfgs + max_sub_iterations : 100 # maximum number of sub-iterations + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + use_gpu : 0 # 0: CPU, 1: GPU + +calculation : + convergence_tolerance : 1e-6 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + + diff --git a/test/old_tests/inversion/input_params_pre.yml b/test/old_tests/inversion/input_params_pre.yml new file mode 100644 index 0000000..be3d80d --- /dev/null +++ b/test/old_tests/inversion/input_params_pre.yml @@ -0,0 +1,36 @@ +version : 2 + +domain : + #min_max_dep : [-2.863,17.137] # depth in km + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [2,1,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-6 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + + diff --git a/test/old_tests/inversion/make_test_model.ipynb b/test/old_tests/inversion/make_test_model.ipynb new file mode 100644 index 0000000..2cf7156 --- /dev/null +++ b/test/old_tests/inversion/make_test_model.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "#R_earth = 6378.1370\n", + "R_earth = 6371.0\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [10,50,50]\n", + "n_rtp.reverse()\n", + "dr = (rr2-rr1)/(n_rtp[2]-1)\n", + "dt = (tt2-tt1)/(n_rtp[1]-1)\n", + "dp = (pp2-pp1)/(n_rtp[0]-1)\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[2])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[0])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "a_init = np.zeros(n_rtp)\n", + "b_init = np.zeros(n_rtp)\n", + "c_init = np.zeros(n_rtp)\n", + "f_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "a_true = np.zeros(n_rtp)\n", + "b_true = np.zeros(n_rtp)\n", + "c_true = np.zeros(n_rtp)\n", + "f_true = np.zeros(n_rtp)\n", + "\n", + "c=0\n", + "for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " #eta_init[ip,it,ir] = 0.0\n", + " #xi_init[ip,it,ir] = 0.0\n", + " zeta_init[ip,it,ir] = gamma*math.sqrt(eta_init[ip,it,ir]**2 + xi_init[ip,it,ir]**2)\n", + " fun_init[ip,it,ir] = s0\n", + " vel_init[ip,it,ir] = 1.0/s0\n", + " a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir]\n", + " b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir]\n", + " c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir]\n", + " f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir]\n", + "\n", + " # true model\n", + " if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \\\n", + " and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi):\n", + " c+=1\n", + " sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi))\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2)\n", + " fun_true[ip,it,ir] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] \n", + " a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir]\n", + " b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir]\n", + " c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir]\n", + " f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir]\n", + "\n", + "\n", + "\n", + "#r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init.T)\n", + "fout_init.create_dataset('xi', data=xi_init.T)\n", + "fout_init.create_dataset('zeta', data=zeta_init.T)\n", + "fout_init.create_dataset('fun', data=fun_init.T)\n", + "fout_init.create_dataset('fac_a', data=a_init.T)\n", + "fout_init.create_dataset('fac_b', data=b_init.T)\n", + "fout_init.create_dataset('fac_c', data=c_init.T)\n", + "fout_init.create_dataset('fac_f', data=f_init.T)\n", + "fout_init.create_dataset('vel', data=vel_init.T)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true.T)\n", + "fout_true.create_dataset('xi', data=xi_true.T)\n", + "fout_true.create_dataset('zeta', data=zeta_true.T)\n", + "fout_true.create_dataset('fun', data=fun_true.T)\n", + "fout_true.create_dataset('fac_a', data=a_true.T)\n", + "fout_true.create_dataset('fac_b', data=b_true.T)\n", + "fout_true.create_dataset('fac_c', data=c_true.T)\n", + "fout_true.create_dataset('fac_f', data=f_true.T)\n", + "fout_true.create_dataset('vel', data=vel_true.T)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 500\n", + "n_rec = [30 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "nij_src = math.sqrt(n_src)\n", + "nij_rec = math.sqrt(n_rec[0])\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " #elev_recs.append(0) # elevation in m\n", + " #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + " # regularly\n", + " elev_recs.append(0.0)\n", + " tmp_ilon = i%nij_rec\n", + " tmp_ilat = int(i/nij_rec)\n", + " lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec)\n", + " lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec)\n", + "\n", + "\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " # regularl\n", + " dep = (R_earth-rr1)*0.9\n", + " tmp_ilon = i_src%nij_src\n", + " tmp_ilat = int(i_src/nij_src)\n", + " lon = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_src\n", + " lat = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_src\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = 0.0 #random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + " # regularly\n", + " #elev_rec = -10.0\n", + " #tmp_ilon = i_rec%nij_rec\n", + " #tmp_ilat = int(i_rec/nij_rec)\n", + " #lon_rec = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec\n", + " #lat_rec = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec\n", + "\n", + " # \n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = rec_names[i_rec]\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2/README.md b/test/old_tests/inversion_2/README.md new file mode 100644 index 0000000..2028979 --- /dev/null +++ b/test/old_tests/inversion_2/README.md @@ -0,0 +1,14 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file + - true model + - initial model + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_result.dat file which includes the arrival time at each station + +3. run TOMOATT in inversion mode with `input_params.yml`. + \ No newline at end of file diff --git a/test/old_tests/inversion_2/check_obj_func.ipynb b/test/old_tests/inversion_2/check_obj_func.ipynb new file mode 100644 index 0000000..9d67601 --- /dev/null +++ b/test/old_tests/inversion_2/check_obj_func.ipynb @@ -0,0 +1,62 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check the change of objective values\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fpath='objective_function.txt'\n", + "\n", + "objs=[]\n", + "\n", + "with open(fpath) as f:\n", + " lines = f.readlines()\n", + "\n", + " for l in lines:\n", + " if(l.startswith('i_inv')):\n", + " continue\n", + " objs.append(float(l.strip().split(',')[1]))\n", + "\n", + "\n", + "plt.plot(objs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + }, + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2/check_src_rec_file.ipynb b/test/old_tests/inversion_2/check_src_rec_file.ipynb new file mode 100644 index 0000000..c892c1e --- /dev/null +++ b/test/old_tests/inversion_2/check_src_rec_file.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "sys.path.append(\"../../utils/\")\n", + "\n", + "from src_rec_file_helper import read_src_rec_file\n", + "\n", + "events_true = read_src_rec_file(\"./src_rec_test_out.dat\")\n", + "events_calc = read_src_rec_file(\"./src_rec_test_out_out.dat\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check objective function value\n", + "v_obj = 0.0\n", + "for i_ev in range(len(events_true)):\n", + " for i_rec in range(len(events_true[i_ev].rec_list)):\n", + " v_obj += abs(events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time)**2/2.0\n", + "\n", + "print(\"v_obj: \", v_obj)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# calculate summation of difference of arrival times at each receiver\n", + "list_diff_v_obj = []\n", + "for i_ev in range(len(events_true)):\n", + " for i_rec in range(len(events_true[i_ev].rec_list)):\n", + " #tmp_v_obj = abs(events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time)**2/2.0\n", + " tmp_v_obj = events_true[i_ev].rec_list[i_rec].arr_time - events_calc[i_ev].rec_list[i_rec].arr_time\n", + "\n", + " if (i_ev == 0):\n", + " list_diff_v_obj.append(tmp_v_obj)\n", + " else:\n", + " list_diff_v_obj[i_rec] += tmp_v_obj\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot list_diff_v_obj on map\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# colormap by list_diff_v_obj\n", + "cmap = plt.get_cmap('viridis')\n", + "norm = plt.Normalize(vmin=min(list_diff_v_obj), vmax=max(list_diff_v_obj))\n", + "\n", + "print(\"min: \", min(list_diff_v_obj))\n", + "print(\"max: \", max(list_diff_v_obj))\n", + "\n", + "list_lon = []\n", + "list_lat = []\n", + "\n", + "for i_rec in range(len(events_true[0].rec_list)):\n", + " list_lon.append(events_true[0].rec_list[i_rec].lon)\n", + " list_lat.append(events_true[0].rec_list[i_rec].lat)\n", + "\n", + "plt.scatter(list_lon, list_lat, c=list_diff_v_obj, cmap=cmap, norm=norm)\n", + "\n", + "# color bar\n", + "plt.colorbar()\n", + "\n", + "# tight \n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2/compare_with_fortran_code.ipynb b/test/old_tests/inversion_2/compare_with_fortran_code.ipynb new file mode 100644 index 0000000..8a15f62 --- /dev/null +++ b/test/old_tests/inversion_2/compare_with_fortran_code.ipynb @@ -0,0 +1,284 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# compare result from TOMOATT and fortran code\n", + "\n", + "fpath_kernel_fort = './fortran/ega5/output/kernel_step1_sum'\n", + "fpath_synth_fort = './fortran/ega5/output/syn_step1_event1' # Table\n", + "fpath_adj_fort = './fortran/ega5/output/adj_step1_event1' # TableADJ\n", + "fpath_out_tomoatt = './out_data_sim_0.h5'\n", + "\n", + "# grid information in fortran code\n", + "nr = 55\n", + "nt = 55\n", + "np = 55\n", + "npoints = nr*nt*np\n", + "\n", + "# division\n", + "ndiv_r = 1 \n", + "ndiv_t = 1 \n", + "ndiv_p = 1 " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy\n", + "\n", + "\n", + "# read fortran test file and convert to numpy array\n", + "def read_fortran_result_file(fpath):\n", + " with open(fpath, 'r') as f:\n", + " lines = f.readlines()\n", + " lines = [line.strip() for line in lines]\n", + " lines = [line for line in lines if line]\n", + " lines = [line.split() for line in lines]\n", + " lines = numpy.array(lines, dtype=numpy.float64)\n", + " return lines\n", + "\n", + "fortran_data = read_fortran_result_file(fpath_kernel_fort)\n", + "## change dimension of fortran data\n", + "Ks_fort = fortran_data[:,3].reshape(nr, nt, np)\n", + "Kxi_fort = fortran_data[:,4].reshape(nr, nt, np)\n", + "Keta_fort = fortran_data[:,5].reshape(nr, nt, np)\n", + "\n", + "fortran_synth_data = read_fortran_result_file(fpath_synth_fort).reshape(nr, nt, np)\n", + "fortran_adj_data = read_fortran_result_file(fpath_adj_fort).reshape(nr, nt, np)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read h5 data\n", + "import sys\n", + "sys.path.append(\"../../utils/\")\n", + "\n", + "from tomoatt_data_retrieval import get_data_from_h5\n", + "\n", + "#Ks_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Ks_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n", + "#Kxi_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Kxi_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Keta_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Keta_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + "Ks_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Ks_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n", + "Kxi_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Kxi_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Keta_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Keta_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + "Syn_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/T_res_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Adj_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/adjoint_field_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot slice of Ks_inv\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.animation as animation\n", + "\n", + "\n", + "def plot_slice(data_es, data_fort, slice_ax, id_slice, contour=False, make_anime=False, tag=\"\"):\n", + "\n", + " if (slice_ax == 'r'):\n", + " data_es_v = data_es[ id_slice, :, :]\n", + " data_fort_v = data_fort[id_slice, :, :]\n", + " elif (slice_ax == 't'):\n", + " data_es_v = data_es[ :, id_slice, :]\n", + " data_fort_v = data_fort[:, id_slice, :]\n", + " elif (slice_ax == 'p'):\n", + " data_es_v = data_es[ :, :, id_slice]\n", + " data_fort_v = data_fort[:, :, id_slice]\n", + " else:\n", + " print(\"Error: slice_ax should be 'r', 't' or 'p'\")\n", + " return\n", + "\n", + " # use the same color range for both tomoatt and fortran \n", + " combined_data = numpy.array([data_es_v.flatten(),data_fort_v.flatten()])\n", + " #Get the min and max of all your data\n", + " _min, _max = numpy.amin(combined_data), numpy.amax(combined_data)\n", + " # make the color range symmetric\n", + " if (abs(_min) > abs(_max)):\n", + " if(_min < 0):\n", + " _max = -_min\n", + " else:\n", + " _min = -_max\n", + "\n", + "\n", + "\n", + " # make the color range symmetric\n", + " diff_data = data_es_v-data_fort_v\n", + " _min_diff, _max_diff = numpy.amin(diff_data), numpy.amax(diff_data)\n", + " if (abs(_min_diff) > abs(_max_diff)):\n", + " if (_min_diff < 0):\n", + " _max_diff = -_min_diff\n", + " else:\n", + " _min_diff = -_max_diff\n", + "\n", + " #cmap1=\"viridis\"\n", + " cmap1=\"seismic\"\n", + " cmap2=\"seismic\"\n", + "\n", + " plt.figure(figsize=(20,10))\n", + "\n", + " plt.subplot(1,3,1)\n", + " plt.imshow(data_es_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(data_es_v, colors='k', linewidths=0.5)\n", + " plt.title('result_tomoatt')\n", + "\n", + " plt.subplot(1,3,2)\n", + " plt.imshow(data_fort_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour): \n", + " plt.contour(data_fort_v, colors='k', linewidths=0.5)\n", + " plt.title('result_fort')\n", + " \n", + " plt.subplot(1,3,3)\n", + " plt.imshow(diff_data, cmap=cmap2, vmin=_min_diff, vmax=_max_diff)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(diff_data, colors='k', linewidths=0.5) \n", + " plt.title('tomoatt-fort')\n", + "\n", + " if (not make_anime):\n", + " plt.show()\n", + " else:\n", + " plt.savefig(\"out_\"+tag+\"_\"+slice_ax+str(id_slice).zfill(3)+\".png\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot_slice(Syn_tomoatt, fortran_synth_data, 'r', 20, contour=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def anime_slices(data_es, data_fort, slice_ax, tag):\n", + "\n", + " if (slice_ax == 'r'):\n", + " n = nr\n", + " elif (slice_ax == 't'):\n", + " n = nt\n", + " elif (slice_ax == 'p'):\n", + " n = np\n", + "\n", + " for i in range(0, n):\n", + " plot_slice(data_es, data_fort, slice_ax, i, contour=True, make_anime=True, tag=tag)\n", + "\n", + " ## make png files to gif\n", + " import subprocess\n", + " subprocess.call([\"convert\", \"-delay\", \"20\", \"-loop\", \"0\", \"out_{}_{}*.png\".format(tag,slice_ax), \"out_{}_{}.gif\".format(tag,slice_ax)])\n", + " # erase png files\n", + " for i in range(0, nr):\n", + " subprocess.call([\"rm\", \"out_{}_{}\".format(tag,slice_ax)+str(i).zfill(3)+\".png\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "anime_slices(Ks_tomoatt, Ks_fort, 'r', 'Ks')\n", + "anime_slices(Ks_tomoatt, Ks_fort, 't', 'Ks')\n", + "anime_slices(Ks_tomoatt, Ks_fort, 'p', 'Ks')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "anime_slices(Adj_tomoatt, fortran_adj_data,'r', 'Adj')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "anime_slices(Keta_tomoatt, Keta_fort, 'r', 'Keta')\n", + "anime_slices(Keta_tomoatt, Keta_fort, 't', 'Keta')\n", + "anime_slices(Keta_tomoatt, Keta_fort, 'p', 'Keta')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "anime_slices(Kxi_tomoatt, Kxi_fort, 'r', 'Kxi')\n", + "anime_slices(Kxi_tomoatt, Kxi_fort, 't', 'Kxi')\n", + "anime_slices(Kxi_tomoatt, Kxi_fort, 'p', 'Kxi')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "anime_slices(Adj_tomoatt, fortran_adj_data, 'r', 'adj')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2/fortran/Readme.txt b/test/old_tests/inversion_2/fortran/Readme.txt new file mode 100644 index 0000000..3a91b6b --- /dev/null +++ b/test/old_tests/inversion_2/fortran/Readme.txt @@ -0,0 +1,3 @@ +mpif90 ega5_sphe_3d_inversion_Tong_3Dinv.f90 -o a5.out + +mpirun -n 4 a5.out \ No newline at end of file diff --git a/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt b/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt new file mode 100644 index 0000000..ac73414 --- /dev/null +++ b/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES.txt @@ -0,0 +1,501 @@ +500 + 12.902894 37.503373 16.794572 + 17.416074 36.974148 25.587149 + 10.553441 48.572870 29.755519 + 17.050082 30.582756 20.557365 + 7.733536 30.049830 22.686053 + 2.695465 45.678252 36.050257 + 19.018349 30.835213 33.695062 + 16.538200 39.559879 22.351080 + 2.947435 37.234474 24.550463 + 15.739527 49.857044 16.506392 + 15.732578 34.182860 27.127186 + 1.296549 48.107962 29.948977 + 14.587690 39.140723 23.153653 + 18.135532 45.517829 17.105875 + 8.364121 30.479830 15.883796 + 9.211189 38.133248 17.858524 + 4.272898 31.194404 18.573422 + 6.948694 35.954361 24.462624 + 12.746088 49.850406 26.847644 + 11.313107 45.103047 16.301263 + 3.313507 46.477589 36.875331 + 10.145642 42.073024 18.769733 + 8.250413 48.900277 19.475522 + 13.804441 49.786255 16.530966 + 17.835237 45.927679 19.912836 + 11.877357 33.654921 22.852455 + 12.871971 34.707392 21.890595 + 4.097522 34.532987 27.568581 + 17.874029 34.484387 34.692491 + 3.866172 33.865449 28.496058 + 16.252330 41.105672 19.464576 + 1.213538 36.013973 17.977264 + 14.955385 45.399043 29.827500 + 17.469489 35.163250 19.273657 + 7.375320 32.817054 28.313777 + 18.585662 33.143956 25.800265 + 15.518612 34.328928 29.752072 + 18.309939 33.218516 38.096180 + 5.752131 32.762387 39.124230 + 12.471990 48.600499 37.709010 + 8.119302 41.058539 27.574594 + 13.473451 36.710096 33.310765 + 12.096579 45.910913 20.602681 + 12.291621 35.421838 19.609690 + 6.722855 34.197625 22.922348 + 19.977008 33.357824 20.801610 + 14.042122 42.609560 36.961508 + 8.278199 33.440638 35.377468 + 10.130480 41.237552 26.524442 + 9.874228 41.667609 22.900117 + 2.528995 40.838610 35.938716 + 15.334613 43.507392 36.217644 + 2.660098 44.120069 32.041887 + 1.861117 38.659778 36.102099 + 17.497575 45.676303 27.354341 + 11.287530 40.851293 33.379047 + 18.006903 38.149825 25.683572 + 9.641227 30.509291 32.005355 + 11.281402 38.301783 26.210378 + 17.511430 43.700541 20.496900 + 6.279207 49.780686 35.342213 + 10.691969 45.580664 36.011519 + 15.409820 38.320676 17.830344 + 19.051727 44.632362 37.180772 + 1.812418 37.134760 37.694988 + 4.160294 33.803068 37.492413 + 19.990846 44.087650 38.916613 + 6.919528 36.705624 30.282383 + 3.762207 33.859941 23.084520 + 6.696542 31.799267 15.983610 + 5.207515 43.495341 36.539506 + 15.760515 33.837372 18.996584 + 16.401076 40.346859 29.422924 + 3.985079 48.258603 32.826637 + 16.886675 48.716436 23.605320 + 18.974327 46.091270 22.697943 + 7.384952 38.441961 16.463244 + 4.231388 42.800608 22.558010 + 3.169625 49.753544 33.780253 + 3.741493 42.843651 38.277171 + 1.703036 35.504006 28.680233 + 2.556739 31.467144 23.718764 + 8.546980 41.234760 31.150894 + 13.221493 40.941614 33.480616 + 6.837920 34.912584 35.820479 + 7.716762 41.133360 20.876900 + 10.321416 31.362250 29.092427 + 17.855166 45.569227 19.744126 + 5.414400 45.949803 24.029219 + 10.622310 33.633958 37.349613 + 18.821079 45.259309 23.690669 + 6.400983 42.879048 20.743236 + 10.339512 44.689643 20.088403 + 14.157235 42.069607 38.833834 + 17.014583 34.928036 31.302363 + 12.827352 36.255275 22.938120 + 7.405344 48.287391 34.564176 + 3.771071 43.293532 28.422367 + 11.910684 48.348929 36.441739 + 3.053959 43.737186 36.600389 + 8.579958 40.581127 25.851314 + 11.931197 31.720220 17.810105 + 7.425585 44.628309 34.089390 + 1.517343 49.451598 36.749768 + 13.373374 37.648809 36.512094 + 4.490529 47.682461 26.286905 + 17.470296 43.349799 16.006251 + 19.343889 44.865620 31.299373 + 15.455612 39.569737 21.775167 + 13.382569 38.684806 37.606354 + 16.876219 37.640250 22.490769 + 5.007780 43.252308 31.761110 + 14.917810 48.036944 16.404019 + 18.211096 33.840776 16.319922 + 7.586946 30.429530 17.767477 + 15.527441 36.791267 32.576167 + 8.395652 47.363883 30.734555 + 8.300918 45.773041 18.973032 + 12.811946 37.078433 31.654726 + 11.271027 44.367770 23.614827 + 7.883254 33.508117 25.081344 + 9.318537 34.252752 21.126458 + 10.125988 49.407886 23.732711 + 15.231482 31.012657 38.326734 + 17.583612 46.667417 35.223383 + 3.975712 45.446574 19.293018 + 6.378385 47.601238 37.559922 + 2.237225 46.922084 15.276371 + 18.881117 47.018476 32.117860 + 7.601149 37.424848 33.048987 + 1.545623 35.528771 31.054720 + 15.305942 41.902726 32.920003 + 8.780450 43.137000 29.771781 + 15.653881 33.574476 22.550923 + 8.374878 42.226796 29.428747 + 1.649332 37.516438 29.602287 + 15.471741 42.579812 34.244173 + 14.121526 31.968351 35.539179 + 19.951984 31.884994 38.930168 + 5.686047 46.021632 37.620089 + 3.356280 35.028285 27.812111 + 17.282928 32.916989 20.503907 + 17.587365 30.437778 27.868687 + 16.846272 32.526293 23.686783 + 5.595438 46.916388 30.602188 + 10.617813 47.056847 29.509244 + 3.472421 46.734969 23.827490 + 9.450474 39.510548 26.858533 + 7.050903 31.802893 18.651294 + 16.740378 42.673295 22.941474 + 8.748832 49.086459 28.498236 + 11.101980 48.419839 33.467477 + 1.821840 40.425959 24.967524 + 18.807331 49.210102 23.627239 + 16.048152 33.431415 27.275778 + 4.156495 37.028503 23.441579 + 8.252786 43.619866 31.044609 + 6.039243 44.924797 25.445324 + 15.698418 36.891680 31.709361 + 13.305460 31.432069 28.565380 + 1.884098 33.514374 39.083138 + 19.784318 48.068758 33.412684 + 10.067793 43.703751 38.394139 + 9.332467 39.505090 19.017737 + 12.280919 46.423916 38.722269 + 18.443031 39.348801 27.023964 + 15.761264 48.206337 22.708882 + 7.403360 37.157790 15.624682 + 11.901780 46.996568 29.408969 + 19.234729 44.636488 39.127281 + 4.699343 31.480019 22.985463 + 8.029268 33.651500 17.282239 + 9.408798 39.483198 37.726002 + 2.995543 45.341282 28.914835 + 1.469270 43.894101 35.258155 + 17.054291 30.978729 17.580649 + 5.151633 42.357135 21.048084 + 11.523488 48.279981 20.451448 + 12.625369 47.910449 23.809322 + 10.805510 39.289972 33.099199 + 16.688680 31.235778 31.772384 + 5.872404 46.921761 20.735459 + 7.760370 49.248566 27.412126 + 14.981766 48.345084 22.449809 + 17.494891 42.556305 17.939339 + 16.883756 35.789221 26.232745 + 18.320859 32.768764 34.301897 + 17.639973 41.691055 20.038187 + 9.699485 49.507576 29.079033 + 18.107852 35.136726 29.376171 + 18.308439 37.395076 27.395968 + 7.807415 35.196537 36.702486 + 19.870463 31.937476 26.900138 + 3.831742 44.590580 18.565134 + 15.201851 32.646130 39.026955 + 15.828158 47.973824 36.504196 + 13.003291 37.834748 30.167337 + 6.392706 37.452325 18.574045 + 16.906282 42.459442 35.050055 + 13.809721 39.226894 19.719641 + 2.349331 48.568978 36.858088 + 13.463109 31.025621 32.611917 + 7.791103 35.619114 35.466085 + 15.908805 31.883312 36.337440 + 12.117860 40.626769 15.503395 + 17.224971 30.288926 20.225713 + 7.769806 32.781915 20.240085 + 19.515691 32.790366 18.423108 + 13.086107 35.997238 32.187432 + 19.583843 46.680117 23.645876 + 5.856651 40.007246 21.179095 + 7.862932 44.479540 23.893157 + 6.880727 30.486859 36.304971 + 12.890612 39.620341 15.500047 + 17.079175 38.401798 27.785445 + 5.828536 41.348587 16.106890 + 16.937460 42.816015 36.720915 + 3.914160 30.441916 38.949482 + 19.655249 45.167885 21.419356 + 5.977111 38.508239 20.391821 + 6.927604 39.621611 32.875926 + 18.361222 45.590869 38.069800 + 10.260030 43.346131 15.879682 + 2.192603 39.046662 33.248710 + 19.085453 37.873403 16.629225 + 12.101016 38.044051 24.990450 + 5.819428 32.772253 26.474392 + 12.724981 46.690291 27.925452 + 18.061294 42.771723 33.725329 + 14.506720 47.805098 26.622413 + 19.850651 49.189715 25.849751 + 15.219038 43.463470 25.041924 + 19.886991 34.051333 32.426005 + 7.117638 32.476564 32.376542 + 5.495352 36.502620 28.691081 + 16.996145 40.153394 37.204504 + 6.456862 33.696229 34.883926 + 2.330674 33.891702 15.484274 + 16.654256 35.373110 33.898747 + 5.038885 38.192102 27.689718 + 14.123672 33.761702 24.479974 + 1.429166 47.744844 31.788410 + 4.269137 39.186264 18.096003 + 2.289546 40.394737 27.797130 + 8.634843 49.702312 16.408445 + 4.519147 37.133705 18.956423 + 15.655447 42.736719 21.384360 + 12.749631 32.600550 38.708210 + 4.951746 46.823971 36.767247 + 9.331854 35.692199 21.771833 + 10.011062 46.663543 24.723024 + 19.949108 42.198244 27.340252 + 10.252827 47.219953 25.322984 + 16.510059 43.107901 28.874568 + 6.363226 49.090611 17.454213 + 10.635868 40.297072 33.028443 + 16.850642 38.133906 27.489172 + 1.209319 37.893652 34.507359 + 12.115913 34.227874 36.364014 + 12.821762 39.440078 33.040301 + 18.591223 39.525593 31.873724 + 8.071489 49.360508 16.522758 + 8.888324 42.368580 26.650131 + 8.889626 41.127943 35.902008 + 10.999334 37.031617 39.494656 + 18.362983 30.378271 18.297875 + 4.302350 36.174539 25.849816 + 7.203800 35.926694 33.803271 + 5.955434 30.625004 18.539309 + 18.701156 48.114168 36.495495 + 9.310080 31.778387 24.469818 + 4.443713 48.914441 17.652480 + 6.915923 33.492221 30.512492 + 12.953648 47.034138 17.407188 + 13.014381 38.565701 16.404760 + 3.750504 34.237353 36.468920 + 14.823263 48.440372 22.486555 + 15.668423 46.749729 32.080923 + 15.249817 31.028147 15.608834 + 13.264813 47.340345 31.103057 + 15.198867 35.515848 16.671581 + 9.743653 41.383808 30.090270 + 13.220311 46.330492 36.129090 + 3.174404 32.263913 36.140707 + 6.044751 33.274473 15.721678 + 11.565608 35.746820 22.653814 + 16.179206 44.677125 24.020450 + 11.327136 44.811048 32.693529 + 1.636618 40.444103 18.356178 + 10.744547 37.150505 16.214572 + 13.261026 34.105829 21.999317 + 3.868859 49.216692 21.453701 + 18.240428 30.304513 30.673916 + 7.072615 35.062618 26.710350 + 9.121655 48.655297 29.967281 + 5.855663 35.811613 27.420149 + 12.000977 43.413023 15.537291 + 6.564213 36.838226 35.870052 + 7.714274 42.313338 28.048145 + 2.081489 43.751865 27.701850 + 8.319217 33.115678 38.739537 + 14.511302 34.703210 16.585363 + 9.035614 36.808248 20.909689 + 14.228832 44.449462 15.947576 + 10.282913 49.531593 19.906303 + 17.589859 47.123318 23.446360 + 4.864052 37.595184 15.336005 + 5.554797 45.565313 38.282334 + 10.528200 42.619743 24.326508 + 11.040215 46.010982 22.617869 + 11.404083 46.772047 20.275623 + 8.466629 43.802511 26.377092 + 14.969797 31.351324 25.339695 + 14.235184 33.858954 37.025746 + 8.455785 49.863795 33.265439 + 8.889406 35.667726 17.308049 + 6.681788 37.412732 15.346280 + 8.976410 34.648739 17.568041 + 10.814533 44.752360 29.627384 + 10.199468 40.546340 32.494767 + 14.496903 45.258427 38.066645 + 3.094126 35.259604 16.746947 + 8.520395 42.659554 15.880581 + 17.611133 41.555600 18.232809 + 14.251795 33.115916 20.736805 + 7.514731 30.399115 21.351999 + 5.196915 45.397866 34.915807 + 19.166354 32.396496 21.352377 + 13.151796 40.555799 27.727383 + 5.350548 46.598504 34.378491 + 9.529635 40.571371 18.426558 + 9.126816 41.898209 17.050111 + 13.802897 32.953515 28.238527 + 15.418929 34.298935 26.833731 + 12.574792 35.492734 26.555897 + 16.938654 44.491948 25.265210 + 10.924080 48.518974 17.175958 + 7.117455 42.434404 23.654994 + 14.009338 36.036521 39.017975 + 19.349324 30.799935 19.716167 + 14.201462 37.024155 38.578311 + 2.822673 33.994394 34.302821 + 13.892456 32.962351 32.359032 + 15.995095 43.754437 29.772219 + 12.968758 32.410285 24.381215 + 1.583361 48.689008 24.016421 + 15.389693 46.555314 19.407358 + 17.453486 39.698530 32.665472 + 12.941524 30.636925 27.452996 + 13.213848 32.944137 23.119204 + 5.801494 40.680483 39.987076 + 16.748570 32.170913 15.378249 + 5.500054 38.628247 24.922452 + 9.008471 31.774374 37.808194 + 14.855098 47.897280 39.249556 + 18.168511 33.566407 22.346673 + 17.753149 42.913741 33.127159 + 19.795910 35.010497 18.833259 + 13.418894 37.999490 18.797014 + 10.696075 37.767208 37.509466 + 1.516162 41.220767 36.769994 + 9.791821 47.293788 32.327841 + 15.542095 41.085072 23.263423 + 16.094111 33.695693 15.819606 + 11.757946 39.421142 30.979153 + 16.568937 34.064155 18.969278 + 6.911632 36.546812 20.978434 + 4.881109 32.834115 39.250059 + 14.023054 45.882062 37.160694 + 9.816248 46.742746 29.781763 + 8.756145 37.174411 24.408729 + 17.588240 44.192292 26.619717 + 17.340343 41.790910 28.580176 + 12.088289 45.478525 27.897123 + 2.586683 37.906181 27.284716 + 14.494787 31.239448 15.065949 + 19.880752 30.337209 16.025088 + 12.823786 43.458027 18.855097 + 15.293022 31.406674 37.847072 + 13.980302 44.345304 18.989914 + 8.991872 32.283652 15.894826 + 10.306169 44.491996 15.351453 + 9.244054 31.064154 35.461811 + 11.066989 35.074635 21.009033 + 9.996705 35.829850 28.967240 + 11.044099 39.587919 35.338766 + 1.917792 49.787496 20.053103 + 1.898804 31.727660 26.029601 + 17.236757 44.662413 28.599031 + 8.003001 41.530145 34.147378 + 11.296640 31.640054 29.667642 + 7.470842 38.590285 16.251505 + 4.120357 40.312343 30.229225 + 8.168395 39.952977 27.957050 + 14.557243 45.490199 23.005864 + 8.675602 35.746172 28.944592 + 13.436976 32.236888 28.823008 + 17.809797 33.690628 26.829731 + 8.031168 39.495328 32.948914 + 14.566420 42.285006 32.930929 + 10.051800 39.544345 25.797573 + 15.312497 35.367693 24.154386 + 2.101328 37.582577 35.819286 + 14.200961 38.741432 22.349646 + 17.750624 33.199228 15.433538 + 5.105492 42.003092 30.932790 + 10.710424 46.645944 31.550315 + 4.863936 33.255507 39.528023 + 10.640629 37.713774 30.208056 + 3.363033 36.409599 39.058745 + 11.715459 45.522667 32.434962 + 13.464532 47.534408 37.701884 + 5.753267 33.153432 38.744854 + 18.406300 45.310872 29.325427 + 13.206913 40.476137 23.713366 + 8.022162 30.669901 22.709029 + 3.752878 32.705859 37.542413 + 1.610955 47.782385 29.385167 + 3.282363 49.872369 28.006430 + 15.645580 31.838090 35.763354 + 4.094538 33.332994 30.739124 + 19.389613 49.000040 18.201493 + 12.304495 31.002744 35.347648 + 16.636205 41.587288 38.509899 + 16.242905 37.908027 22.830238 + 5.293874 39.810962 24.214172 + 17.730042 40.807401 24.413293 + 10.848526 46.719333 35.651427 + 7.126381 30.842360 33.846795 + 5.959882 33.494248 22.053307 + 19.655118 37.249880 30.995999 + 17.472236 42.954364 33.867949 + 8.702629 44.307435 34.928355 + 14.553503 36.391143 23.208353 + 16.004125 47.562957 34.801544 + 11.432695 47.088634 33.492738 + 18.226320 43.756214 35.926311 + 3.436149 42.651048 38.536654 + 13.874327 30.831422 25.310616 + 14.802646 40.372075 29.327322 + 17.366240 48.310718 23.205411 + 18.883354 33.973377 34.189039 + 4.940024 38.820683 21.764487 + 6.389472 34.087807 31.184860 + 9.686298 46.746346 32.711941 + 14.858616 49.173689 28.350539 + 12.892325 33.920028 27.283556 + 10.997502 36.579405 32.044916 + 17.125470 47.650177 29.239499 + 10.673225 33.505780 21.271442 + 15.673616 33.342102 36.331892 + 19.150955 35.558436 38.191118 + 7.109812 49.243617 18.690492 + 6.496059 31.449753 32.600549 + 16.655108 39.629968 37.582826 + 10.026644 39.787402 21.084604 + 7.611422 40.274845 26.509155 + 19.789113 39.105677 19.207532 + 2.261065 37.897836 16.342341 + 3.544031 45.823398 29.063016 + 8.128766 31.176403 35.862979 + 1.144189 43.284815 36.664338 + 11.880560 36.253201 23.576926 + 16.624167 49.768690 39.240587 + 15.503963 36.766183 20.953801 + 17.806003 30.839724 27.752022 + 8.304373 48.787565 21.408915 + 10.181775 35.977743 18.438917 + 17.122472 34.268485 38.754985 + 5.311906 43.788904 17.804844 + 12.012478 31.562773 17.345468 + 19.961598 36.302881 28.623923 + 19.538837 36.303158 31.781007 + 4.523682 48.587788 33.198009 + 13.324998 42.192480 29.795723 + 1.123948 43.299255 23.155238 + 17.451114 45.355883 24.606045 + 4.411658 44.468014 25.506241 + 3.964021 38.375390 37.494247 + 3.342860 44.301725 24.667203 + 16.858232 33.418985 37.621960 + 17.575051 42.057543 21.681617 + 3.721699 44.550901 22.869235 + 4.536435 32.653021 20.354643 + 12.418668 47.807467 24.510958 + 3.480837 37.949268 25.698086 + 17.659928 48.015778 25.153195 + 3.404855 39.565089 37.688459 + 19.441124 45.664148 24.812879 + 15.163402 48.596491 28.147741 + 7.069610 34.859944 37.842481 + 10.350486 40.456093 36.237884 + 19.801801 40.683590 39.924546 + 7.334750 39.747428 31.758286 + 18.418554 30.115213 16.453879 + 5.771517 49.221621 20.668848 + 18.747257 49.783529 38.782999 + 12.681107 36.749221 26.025580 + 18.648049 31.794062 33.729165 + 3.086854 38.310420 27.893166 diff --git a/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES_5.txt b/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES_5.txt new file mode 100644 index 0000000..52269df --- /dev/null +++ b/test/old_tests/inversion_2/fortran/ega5/input/EARTHQUAKES_5.txt @@ -0,0 +1,6 @@ +5 + 12.902894 37.503373 16.794572 + 17.416074 36.974148 25.587149 + 10.553441 48.572870 29.755519 + 17.050082 30.582756 20.557365 + 7.733536 30.049830 22.686053 diff --git a/test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt b/test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt new file mode 100644 index 0000000..553c809 --- /dev/null +++ b/test/old_tests/inversion_2/fortran/ega5/input/STATIONS.txt @@ -0,0 +1,61 @@ +60 +0.0 36.472809 29.812050 +0.0 42.546922 16.133799 +0.0 30.991032 23.169443 +0.0 46.965102 39.508986 +0.0 47.511915 37.527905 +0.0 48.435600 20.814328 +0.0 41.863499 15.672084 +0.0 32.635381 25.986810 +0.0 38.657687 39.966088 +0.0 40.746866 34.837968 +0.0 42.548883 27.938223 +0.0 45.654715 39.054882 +0.0 35.547420 37.107352 +0.0 34.000382 19.128119 +0.0 44.563868 35.283488 +0.0 40.983368 32.490992 +0.0 41.849069 38.852775 +0.0 30.415956 28.399387 +0.0 39.547377 26.435165 +0.0 32.064886 30.332071 +0.0 42.476838 23.230493 +0.0 34.956877 26.244838 +0.0 42.093400 15.092363 +0.0 37.363268 23.303628 +0.0 41.913218 33.323567 +0.0 43.569418 26.558183 +0.0 36.206968 29.037593 +0.0 30.241436 25.506620 +0.0 44.117881 30.429571 +0.0 39.517000 34.746538 +0.0 37.361734 22.829658 +0.0 49.421317 23.380557 +0.0 35.352432 34.053354 +0.0 42.126659 22.069541 +0.0 40.290506 34.457216 +0.0 37.633977 35.795705 +0.0 42.640993 22.595143 +0.0 41.972681 38.966854 +0.0 43.073835 35.660796 +0.0 45.484914 23.240725 +0.0 44.787236 30.506240 +0.0 36.156778 18.188633 +0.0 34.670427 29.724995 +0.0 48.621299 19.602209 +0.0 35.103483 16.672438 +0.0 48.315182 37.314071 +0.0 42.367526 34.248809 +0.0 39.728066 28.578711 +0.0 44.531207 26.103171 +0.0 31.457146 27.143870 +0.0 31.580000 17.230000 +0.0 32.120000 19.330000 +0.0 49.220000 16.330000 +0.0 45.630000 18.290000 +0.0 40.870000 19.970000 +0.0 48.740000 27.460000 +0.0 47.520000 32.420000 +0.0 33.250000 33.980000 +0.0 30.990000 34.470000 +0.0 31.120000 39.100000 diff --git a/test/old_tests/inversion_2/fortran/ega5/input/STATIONS_5.txt b/test/old_tests/inversion_2/fortran/ega5/input/STATIONS_5.txt new file mode 100644 index 0000000..aaaa6c4 --- /dev/null +++ b/test/old_tests/inversion_2/fortran/ega5/input/STATIONS_5.txt @@ -0,0 +1,6 @@ +5 +0.0 36.472809 29.812050 +0.0 42.546922 16.133799 +0.0 30.991032 23.169443 +0.0 46.965102 39.508986 +0.0 47.511915 37.527905 diff --git a/test/old_tests/inversion_2/fortran/ega5_sphe_3d_inversion_Tong_3Dinv.f90 b/test/old_tests/inversion_2/fortran/ega5_sphe_3d_inversion_Tong_3Dinv.f90 new file mode 100644 index 0000000..ef6a85d --- /dev/null +++ b/test/old_tests/inversion_2/fortran/ega5_sphe_3d_inversion_Tong_3Dinv.f90 @@ -0,0 +1,737 @@ +include "eikon_solver_mpi.f90" + + +! example: 3-D 3rd order anisotropic eikonal equation in cartesian coordinate (Point source) +! parameter setting: +! domain: R * Theta * Phi = [6275, 6375] * [49^\circ, 51^\circ] * [129^\circ, 131^\circ] +! analytic solution: T = |x-x_s|/c0 +! isotropic eik equ: Tx^2 + Ty^2 + Tz^2 = s^2, +! boundary condition: T(x0,y0,z0) = 0 (point source) +! test function: 'FSM_WENO3_PS_sphe_3d' in "eikon_solver.f90" +! + +program eikonal_2d + use mpi + +! ######################### 参数声明 parameters statement ######################### + + implicit none + + ! mesh grid + integer,parameter :: nr=55,nt=55,np=55 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: rr1=6070,rr2=6400 + double precision,parameter :: tt1=(30.0-1.5)/180*pi,tt2=(50.0+1.5)/180*pi + double precision,parameter :: pp1=(15.0-1.5)/180*pi,pp2=(40.0+1.5)/180*pi + double precision :: rr(nr),tt(nt),pp(np),dr,dt,dp + + + ! source (STATIONS) & receiver (EARTHQUAKES) + integer :: nsou + double precision,allocatable :: rsou(:),tsou(:),psou(:) ! source (station) + integer :: nrec + double precision,allocatable :: rrec(:),trec(:),prec(:) ! receiver (earthquake) + + ! model parameter + double precision,parameter :: gamma = 0.0 + double precision :: xi(nr,nt,np),eta(nr,nt,np),zeta(nr,nt,np) ! syn model (ani) + double precision :: xiT(nr,nt,np),etaT(nr,nt,np),zetaT(nr,nt,np) ! true model (ani) + double precision :: sigma1,sigma2,psi + double precision,parameter :: slow_p=0.04,ani_p=0.03 + + ! Eikonal solver + double precision :: aT(nr,nt,np),bT(nr,nt,np),cT(nr,nt,np),fT(nr,nt,np),funT(nr,nt,np) ! true model 真实模型 + double precision :: a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np),fun(nr,nt,np) ! syn model 猜测模型 + double precision :: uT(nr,nt,np),TableT(nr,nt,np) !true timetable 真实走时场 + double precision :: u(nr,nt,np),Table(nr,nt,np) !syn timetable 猜测走时场 + !double precision :: T0para(8),tau(nr,nt,np) ! multiplicative factor + + ! adjoint source + double precision,allocatable :: sourceADJ(:),TtimeT(:,:),Ttime(:,:) ! adjoint source 伴随源,真实走时,合成走时 + double precision :: TableADJ(nr,nt,np) ! adjoint field 伴随场 + double precision :: Ks(nr,nt,np),Kxi(nr,nt,np),Keta(nr,nt,np) ! event kernel + integer,parameter :: nk = 3 ! number of kernels + double precision :: all_Ks(nr,nt,np),all_Kxi(nr,nt,np),all_Keta(nr,nt,np) ! sensitivity kernel + double precision :: all_Kernel(nr,nt,np,nk) ! kernels for all parameters together + !double precision,parameter :: radius = 40 ! kernel mask radius + + ! inversion grid + integer,parameter :: ninvr=11,ninvt=10,ninvp=10 ! inversion grid size (coarse) + double precision,parameter :: invr1=6070.0,invr2=6400.0 + double precision,parameter :: invt1=30.0/180*pi,invt2=50.0/180*pi + double precision,parameter :: invp1=15.0/180*pi,invp2=40.0/180*pi + integer,parameter :: ngrid=5 ! number of nultigrid (multigrid technique) + double precision :: invr(ngrid,ninvr),invt(ngrid,ninvt),invp(ngrid,ninvp),dinvr,dinvt,dinvp + double precision :: update_value(nr,nt,np,nk) ! parameter update value 更新参数的变化量 + + ! model update (optimization) + double precision :: stepsize ! stepsize + integer,parameter :: MaxIter=1 ! max iteration step + double precision :: old_obj, obj, sou_obj ! 优化目标函数 objective function + double precision,allocatable :: weight_sou(:),weight_rec(:) !weight function + double precision :: dis_ij, dis_zero !weight function + logical :: weight_sou_bool=.false. , weight_rec_bool= .false. + + ! temp var + double precision :: depth,lat,lon + + ! output file + character(Len=80) :: filename,form,form2 + + ! loop index + integer :: iir,iit,iip,idi,idj,idk,i,j,k,iter,igrid + + ! computing time + double precision :: time_begin,time_end,alpha + + ! mpi parameter + integer :: ierr,myid,nproc + + ! ############################# main work ############################# + + call mpi_init(ierr) + + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + call CPU_TIME(time_begin) ! program start + + + +! ################### read sources and receivers 读取地震台站数据 ################### + open(10,file='ega5/input/STATIONS_5.txt') + read(10,*) nsou + allocate(rsou(nsou),tsou(nsou),psou(nsou),weight_sou(nsou)) + do i=1,nsou + read(10,*) depth,lat,lon + rsou(i) = 6371.0-depth + tsou(i) = lat/180.0*pi + psou(i) = lon/180.0*pi + end do + close(10) + + open(10,file='ega5/input/EARTHQUAKES_5.txt') + read(10,*) nrec + allocate(rrec(nrec),trec(nrec),prec(nrec),weight_rec(nrec)) + do i=1,nrec + read(10,*) depth,lat,lon + rrec(i) = 6371.0-depth + trec(i) = lat/180.0*pi + prec(i) = lon/180.0*pi + end do + close(10) + + ! distance based weight -rec 台站权重 + if (weight_rec_bool) then + dis_zero = 0 + do i=1,nrec-1 + do j=i,nrec + call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij) + dis_zero = dis_zero + dis_ij + end do + end do + dis_zero = dis_zero/nrec/(nrec-1)*2 + dis_zero = dis_zero/2 + + do i=1,nrec + weight_rec(i)=0.0 + do j=1,nrec + call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij) + weight_rec(i) = weight_rec(i) + exp(-(dis_ij/dis_zero)**2) + end do + weight_rec(i) = 1.0/weight_rec(i) + end do + print *, dis_zero + end if + + if (weight_rec_bool) then + ! distance based weight - soruce 地震权重 + dis_zero = 0 + do i=1,nsou-1 + do j=i,nsou + call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij) + dis_zero = dis_zero + dis_ij + end do + end do + dis_zero = dis_zero/nsou/(nsou-1)*2 + dis_zero = dis_zero/4 + + do i=1,nsou + weight_sou(i)=0.0 + do j=1,nsou + call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij) + weight_sou(i) = weight_sou(i) + exp(-(dis_ij/dis_zero)**2) + end do + weight_sou(i) = 1.0/weight_sou(i) + end do + print *, dis_zero + end if + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (myid .eq. 0) then + open(100,file='ega5/output/STATIONS') + open(101,file='ega5/output/EARTHQUAKES') + do i=1,nsou + write(100,'(f13.7,f13.7,f13.7,f13.7)') rsou(i),tsou(i),psou(i),weight_sou(i) + end do + do i=1,nrec + write(101,'(f13.7,f13.7,f13.7,f13.7)') rrec(i),trec(i),prec(i),weight_rec(i) + end do + close(100);close(101) + end if + +! ######################### 生成网格 build mesh grid ##################################### + ! -------- forward modeling grid ---------- + dr=(rr2-rr1)/(nr-1); dt=(tt2-tt1)/(nt-1); dp=(pp2-pp1)/(np-1) + do iir=1,nr + rr(iir)=rr1+(iir-1)*dr + end do + do iit=1,nt + tt(iit)=tt1+(iit-1)*dt + end do + do iip=1,np + pp(iip)=pp1+(iip-1)*dp + end do + + ! -------- inversion multigrid ---------- + dinvr=(invr2-invr1)/(ninvr-1); dinvt=(invt2-invt1)/(ninvt-1); dinvp=(invp2-invp1)/(ninvp-1) + do igrid=1,ngrid + do iir=1,ninvr + invr(igrid,iir)=invr1+(iir-1)*dinvr-(igrid-1)*dinvr/ngrid + end do + do iit=1,ninvt + invt(igrid,iit)=invt1+(iit-1)*dinvt-(igrid-1)*dinvt/ngrid + end do + do iip=1,ninvp + invp(igrid,iip)=invp1+(iip-1)*dinvp-(igrid-1)*dinvp/ngrid + end do + end do + +! ######################### 构建背景模型 build the synthetic and true model ##################################### + + do iir=1,nr + do iit=1,nt + do iip=1,np + + ! synthetic (initial) model + eta(iir,iit,iip)=0.0; + xi(iir,iit,iip)=0.0; + zeta(iir,iit,iip)=gamma*sqrt(eta(iir,iit,iip)**2+xi(iir,iit,iip)**2) + ! if (rr(iir)>6351) then ! 6371 - 6351 20 km + ! fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + ! elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + ! elseif (rr(iir)>6251) then ! 6336 - 6251 85 km + ! fun(iir,iit,iip) = 1.0/(8.04+(6336-rr(iir))/85.0*0.01) + ! elseif (rr(iir)>6161) then ! 6251 - 6161 90 km + ! fun(iir,iit,iip) = 1.0/(8.05+(6251-rr(iir))/90.0*0.25) + ! elseif (rr(iir)>5961) then ! 6161 - 5961 200 km + ! fun(iir,iit,iip) = 1.0/(8.30+(6161-rr(iir))/200.0*0.73) + ! else + ! fun(iir,iit,iip) = 1.0/9.03 + ! end if + + if (rr(iir)>6351) then ! 6371 - 6351 20 km + fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + elseif (rr(iir)>5961) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1) + else + fun(iir,iit,iip) = 1.0/9.0 + end if + + + !read(100,*) xi(iir,iit,iip) + !read(101,*) eta(iir,iit,iip) + !read(102,*) fun(iir,iit,iip) + + a(iir,iit,iip)=1.0+2*zeta(iir,iit,iip); + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + + Table(iir,iit,iip) = 0 + + + + ! true (target) model + if (tt(iit)>=30.0/180*pi .and. tt(iit)<=50.0/180*pi .and. & + & pp(iip)>=15.0/180*pi .and. pp(iip)<=40.0/180*pi .and. & + & rr(iir)>=6211.0 .and. rr(iir)<=6371.0 ) then + sigma1 = sin(4*pi*(tt(iit)-30.0/180*pi)/(20.0/180*pi))* & + & sin(4*pi*(pp(iip)-15.0/180*pi)/(25.0/180*pi))* & + & sin(2*pi*(rr(iir)-6211)/160.0) + else + sigma1 = 0.0 + end if + + + if (sigma1<0) then + psi = 60.0/180*pi + elseif (sigma1 > 0) then + psi = 150.0/180*pi + else + psi = 0 + end if + + etaT(iir,iit,iip)=ani_p*abs(sigma1)*sin(2*psi); + xiT(iir,iit,iip)=ani_p*abs(sigma1)*cos(2*psi); + zetaT(iir,iit,iip)=gamma*sqrt(etaT(iir,iit,iip)**2+xiT(iir,iit,iip)**2) + + aT(iir,iit,iip)=1.0+2*zetaT(iir,iit,iip); + bT(iir,iit,iip)=1.0-2*xiT(iir,iit,iip); + cT(iir,iit,iip)=1.0+2*xiT(iir,iit,iip); + fT(iir,iit,iip)=-2*etaT(iir,iit,iip); + funT(iir,iit,iip) = fun(iir,iit,iip)/(1+sigma1*slow_p) + + !fun(iir,iit,iip) = funT(iir,iit,iip) + !eta(iir,iit,iip)=etaT(iir,iit,iip); + !xi(iir,iit,iip)=xiT(iir,iit,iip); + !zeta(iir,iit,iip)=zetaT(iir,iit,iip) + !a(iir,iit,iip)=aT(iir,iit,iip) + !b(iir,iit,iip)=bT(iir,iit,iip) + !c(iir,iit,iip)=cT(iir,iit,iip) + !f(iir,iit,iip)=fT(iir,iit,iip) + + TableT(iir,iit,iip) = 0 + u(iir,iit,iip) = 0 + + end do + end do + end do + + + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (myid==0) then + open(100,file='ega5/output/model_true') + open(101,file='ega5/output/model_init') + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & funT(iir,iit,iip),xiT(iir,iit,iip),etaT(iir,iit,iip) + write(101,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100);close(101) + + ! --------- 多重网格 multiple grid ------ + do igrid=1,Ngrid + select case(igrid) + case (1:9) + write(form,'(I1)') igrid + case (10:99) + write(form,'(I2)') igrid + end select + open(100,file='ega5/output/multigrid'//trim(form)) + + do iir=1,ninvr + do iit=1,ninvt + do iip=1,ninvp + write(100,'(f13.7,f13.7,f13.7)') & + & invr(igrid,iir),invt(igrid,iit),invp(igrid,iip) + end do + end do + end do + close(100) + end do + + end if + + +! ######################### 计算真实到时 calculate true traveltimes ###################### + call mpi_barrier(mpi_comm_world,ierr) + allocate(TtimeT(nsou,nrec)) ! 初始化真实到时表 initiate true traveltimes + allocate(Ttime(nsou,nrec)) ! 初始化合成到时表 initiate syn traveltimes + allocate(sourceADJ(nrec)) ! 初始化伴随源 initiate adjoint source + + if (myid==0) then + print *, ' ' + print *, '----------------- calculating true timetable ... ----------------' + print *, ' ' + end if + + do i=1,nsou ! loop sources (STATIONS) + ! -------- 求解程函方程 solve eikonal equations ------------ + call mpi_barrier(mpi_comm_world,ierr) + !rsou(i)=6371.0; tsou(i)=30.5/180.0*pi; psou(i)=15.5/180.0*pi + call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rsou(i),tsou(i),psou(i),u) + call mpi_barrier(mpi_comm_world,ierr) + ! -------- 得到真实走时 calculate true arrival time at receiver -------- + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rrec,trec,prec,TtimeT(i,:),nrec) + !if ((myid.eq.0) .and. 1>0) then + ! print *, rsou(i),tsou(i)/pi*180,psou(i)/pi*180 + ! open(100,file='ega5/output/arrivaltime') + ! do j=1,nrec + ! write(100,'(i5.3,f8.2,f6.2,f6.2,f8.3)') j, rrec(j),trec(j)/pi*180,prec(j)/pi*180,TtimeT(i,j) + ! end do + ! close(100) + !end if + end do + + print *, '----------------- calculating true timetable over ---------------- ' + +! ######################## 反演开始 inversion start ########################## + + ! ----- 初始化反演参数 initiate inversion parameters ---- + stepsize = 0.01 ! 迭代步长 stepsize + old_obj = 0; obj = 0 ! 目标函数 objective function + + + + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- inversion start ... ----------------' + print *, ' ' + end if + + + + do iter = 1,MaxIter + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- iteration ',iter,' starting ... ----------------' + end if + + ! ----- 初始化参数 initiate parameters ------ + all_Ks = 0; all_Kxi = 0; all_Keta = 0; + obj = 0; + + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/misfit_step'//trim(form) + open(998, file=trim(filename)) + end if + + + do i=1,nsou ! loop sources (STATIONS) + +! ######################## 计算合成走时场 calculate synthetic timetable ######################## + if (myid .eq. 0) then + print *, '----------------- calculating synthetic timetable ... ----------------' + end if + + Table = 20 + call mpi_barrier(mpi_comm_world,ierr) + call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,a,b,c,f,Table,fun,rsou(i),tsou(i),psou(i),u) + call mpi_barrier(mpi_comm_world,ierr) + ! -------- 得到合成走时 calculate synthetic arrival time at receiver -------- + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rrec,trec,prec,Ttime(i,:),nrec) + + ! -------- 构造伴随源 build adjoint source ------- + call Adjoint_Source_Dt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! absolute traveltime difference + if (myid .eq. 0) then + do j=1,nrec + write(998,'(f10.5)') Ttime(i,j)-TtimeT(i,j) + end do + end if + + ! weighting adjoint source + if (weight_rec_bool) then + do j=1,nrec + sourceADJ(j) = sourceADJ(j) * weight_rec(j) + end do + end if + + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/syn_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7)') Table(iir,iit,iip) + end do + end do + end do + close(100) + end if +! + + !print *, Ttime(i,:),TtimeT(i,:) + !call Adjoint_Source_Ddt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! double difference traveltime + !do j=1,nrec-1 + ! do k=j,nrec + ! write(998,'(f10.5)') (Ttime(i,j)-Ttime(i,k))-(TtimeT(i,j)-TtimeT(i,k)) + ! end do + !end do + +! ######################## 计算伴随场 adjoint field ######################## + if (myid .eq. 0) then + ! print *, '----------------- calculating adjoint field ... ----------------' + end if + call FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ) + !call FSM_O1_Adj_PS_sphe_3d(rr,tt,pp,nr,nt,np,T0para,tau,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ) + ! ---- 记录到 matlab 数据中 matlab record (adjoint field) ---- + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/adj_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7)') TableADJ(iir,iit,iip) + end do + end do + end do + close(100) + end if +! ######################## 计算敏感核 sensitivity kernel ######################## + !print *, '----------------- calculating kernel ... ----------------' + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! ------- 抹去伴随源处的大函数值 mask the source ------- + !print *, '----------------- kernel mask ----------------' + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i),radius) + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i),radius) + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i),radius) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i)) + + ! ---- 记录到 matlab 数据中 matlab record (adjoint field) ---- + if (1<0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/kernel_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & Ks(iir,iit,iip),Kxi(iir,iit,iip),Keta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + if (weight_sou_bool) then ! no weight + all_Ks = all_Ks + Ks * weight_sou(i); + all_Kxi = all_Kxi + Kxi * weight_sou(i); + all_Keta = all_Keta + Keta * weight_sou(i); + obj = obj + sou_obj !* weight_sou(i) + else ! source weighted + all_Ks = all_Ks + Ks; + all_Kxi = all_Kxi + Kxi; + all_Keta = all_Keta + Keta; + obj = obj + sou_obj + end if + + end do + + close(998) + + ! ---- 记录到 matlab 数据中 matlab record (kernel) ---- + if (1>0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/kernel_step'//trim(form)//'_sum' + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & all_Ks(iir,iit,iip),all_Kxi(iir,iit,iip),all_Keta(iir,iit,iip) + end do + end do + end do + close(100) + end if +! ##################### 模型更新 model update #################### + print *, '----------------- model updating ... ----------------' + + all_Kernel(:,:,:,1) = all_Ks; + all_Kernel(:,:,:,2) = all_Kxi; + all_Kernel(:,:,:,3) = all_Keta; + + ! ------------ 更新速度(慢度) update velocity (slowness) ------------ + call Parameter_Update_Multigrid(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + + if (1<0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/model_update_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & -fun(iir,iit,iip)*update_value(iir,iit,iip,1), & + & -update_value(iir,iit,iip,2),-update_value(iir,iit,iip,3) + end do + end do + end do + close(100) + end if + + do iir=1,nr + do iit=1,nt + do iip=1,np + fun(iir,iit,iip) = fun(iir,iit,iip)*(1-update_value(iir,iit,iip,1)) + !fun(iir,iit,iip) = fun(iir,iit,iip) + end do + end do + end do + + ! ------------ 更新xi update xi ------------ + do iir=1,nr + do iit=1,nt + do iip=1,np + xi(iir,iit,iip) = xi(iir,iit,iip)-update_value(iir,iit,iip,2) + end do + end do + end do + + ! ------------ 更新eta update eta ------------ + do iir=1,nr + do iit=1,nt + do iip=1,np + eta(iir,iit,iip) = eta(iir,iit,iip)-update_value(iir,iit,iip,3) + end do + end do + end do + + ! ----------- 更新 update eikonal solver paramater ----------------- + do iir=1,nr + do iit=1,nt + do iip=1,np + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + end do + end do + end do + + + + +! ##################### 调整下降步长 modify stepsize ############# + if (myid .eq. 0) then + print *, ' ' + end if + + if (1>0 .and. (myid .eq. 0)) then + open(999,file='ega5/output/obj',access='append') + write(999,'(f9.2,f9.6)') obj, stepsize + close(999) + end if + + if (iter == 1 ) then + if (myid .eq. 0) then + write(*,'(a,f9.2)') 'iter 1, obj is', obj + write(*,'(a,f9.6)') 'iter 1, stepsize is', stepsize + end if + elseif (iter >= 2 .and. obj < old_obj) then + !stepsize = min(0.01,stepsize*1.2) + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function decreases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + elseif (iter >= 2 .and. obj >= old_obj) then + !stepsize = max(0.002,stepsize*0.5) + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function increases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + end if + + print *, '----------------- iteration ',iter,' over ----------------' + print *, ' ' + print *, ' ' + + + old_obj = obj + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/model_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + + if (myid .eq. 0) then + call CPU_TIME(time_end) + write(*,'(f10.2)') time_end - time_begin + end if + + end do + + + call mpi_finalize(ierr) + +end program eikonal_2d + diff --git a/test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90 b/test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90 new file mode 100644 index 0000000..b83ffe8 --- /dev/null +++ b/test/old_tests/inversion_2/fortran/eikon_solver_mpi.f90 @@ -0,0 +1,2836 @@ +! 3-D third order LF scheme (point source, sphere, 2nd order accuracy, parallel) (verified by ega1) +subroutine FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,r0,t0,p0,u) + + use mpi + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: r1,r2,r3,a0,b0,c0,d0,f0,T0v(nr,nt,np),T0r(nr,nt,np),T0t(nr,nt,np),T0p(nr,nt,np) + double precision :: tau(nr,nt,np),tau_old(nr,nt,np),r0,t0,p0 + integer :: idr0,idt0,idp0 + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision :: t1,p1 + double precision,parameter :: tol = (10.0)**(-4),eps=10.0**(-12) + integer,parameter :: MaxIter=1000 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: x0,y0,z0,x,y,z,xst,yst,zst,e11,e12,e13,e21,e22,e23,e31,e32,e33 + double precision :: xstr,xstt,xstp,ystr,ystt,ystp,zstr,zstt,zstp + integer :: ileft,iright,jleft,jright,ii,jj,kk + logical :: isexit + + integer :: ierr,myid,nproc,tag,istat(mpi_status_size),iproc,ptid(nr,np,nt) + integer :: mpi_ptijk(3,np*nt),mpi_ptn,ipt,int_temp,my_npt + double precision :: mpi_ptv(np*nt),dp_temp + + integer :: ptr1,ptr2,iNumber,total_ptn,Nptn,sNptn,tpNptn + double precision :: ave_ni + integer,allocatable :: proc_irange(:,:,:) + + + isexit = .false. + tag=99 + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); idp0=floor((p0-pp(1))/dp+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); r3 = min(1.0,(p0-pp(idp0))/dp); + + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + a0=(1-r1)*(1-r2)*(1-r3)*a(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*a(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*a(idr0,idt0+1,idp0)+(1-r1)*r2*r3*a(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*a(idr0+1,idt0,idp0)+r1*(1-r2)*r3*a(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*a(idr0+1,idt0+1,idp0)+r1*r2*r3*a(idr0+1,idt0+1,idp0+1) + + b0=(1-r1)*(1-r2)*(1-r3)*b(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*b(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*b(idr0,idt0+1,idp0)+(1-r1)*r2*r3*b(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*b(idr0+1,idt0,idp0)+r1*(1-r2)*r3*b(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*b(idr0+1,idt0+1,idp0)+r1*r2*r3*b(idr0+1,idt0+1,idp0+1) + + c0=(1-r1)*(1-r2)*(1-r3)*c(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*c(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*c(idr0,idt0+1,idp0)+(1-r1)*r2*r3*c(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*c(idr0+1,idt0,idp0)+r1*(1-r2)*r3*c(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*c(idr0+1,idt0+1,idp0)+r1*r2*r3*c(idr0+1,idt0+1,idp0+1) + + f0=(1-r1)*(1-r2)*(1-r3)*f(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*f(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*f(idr0,idt0+1,idp0)+(1-r1)*r2*r3*f(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*f(idr0+1,idt0,idp0)+r1*(1-r2)*r3*f(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*f(idr0+1,idt0+1,idp0)+r1*r2*r3*f(idr0+1,idt0+1,idp0+1) + !d0=-d0 + + fun0=(1-r1)*(1-r2)*(1-r3)*fun(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*fun(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*fun(idr0,idt0+1,idp0)+(1-r1)*r2*r3*fun(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*fun(idr0+1,idt0,idp0)+r1*(1-r2)*r3*fun(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*fun(idr0+1,idt0+1,idp0)+r1*r2*r3*fun(idr0+1,idt0+1,idp0+1) + + + + ! 构造T0 + do iir=1,nr + do iit=1,nt + do iip=1,np + r1 = rr(iir) + t1 = tt(iit) + p1 = pp(iip) + + T0v(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + ischange(iir,iit,iip)=1 + if ( T0v(iir,iit,iip)==0 ) then + T0r(iir,iit,iip) = 0 + T0t(iir,iit,iip) = 0 + T0p(iir,iit,iip) = 0 + else + T0r(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v(iir,iit,iip) + T0t(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v(iir,iit,iip) + T0p(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v(iir,iit,iip) + end if + + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2 .and. abs((pp(iip)-p0)/dp)<= 2) then + tau(iir,iit,iip) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + !tau(iir,iit,iip) = u(iir,iit,iip) - T0v(iir,iit,iip) + ischange(iir,iit,iip)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt .or. iip==1 .or. iip==np) then + write(*,*) 'source on the boundary, mesh error' + print *, rr(iir),t0*180/3.1415927,iit,p0*180/3.1415927,iip + ! pause + end if + !write(*,*) iir-idr0,iit-idt0,iip-idp0,u(iir,iit,iip),T0v(iir,iit,iip),u(iir,iit,iip)-T0v(iir,iit,iip) + else + !tau(iir,iit,iip) = T(iir,iit,iip)/T0v(iir,iit,iip) + tau(iir,iit,iip) = 1 + ischange(iir,iit,iip)=1 + end if + end do + end do + end do + + + L1_err=0; Linf_err=0 + do iir=1,nr + do iit=1,nt + do iip=1,np + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)-u(iir,iit,iip))) + if(isnan(L1_err)) then + print *, u(iir,iit,iip),T0v(iir,iit,iip) + pause + end if + end do + end do + end do + L1_err = L1_err/(nr*np*nt) + !if (myid .eq. 0) then + ! write(*,*) 'T0 L1 error is ',L1_err,', T0 Linf error is', Linf_err + !end if + + allocate(proc_irange(2,nproc,nr+nt+np-3-6+1)) + + ! 给每个线程分配计算点 + Nptn=0 + sNptn=0 + + do level = 6,nr+nt+np-3 + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + iNumber = iright - ileft + 1 + + total_ptn = 0 + do ip = ileft,iright + total_ptn = total_ptn+(min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + end do + Nptn = Nptn + total_ptn ! 总点数 + ave_ni = total_ptn*1.0/nproc + + if (iNumber <= nproc) then + ! 即i的数量小于等于线程数,每个线程分配一个i就好 + tpNptn = 0 + MaxtpNptn = 0 + do ip = ileft,iright + proc_irange(:,ip-ileft+1,level-5)=(/ip,ip/) + tpNptn = (min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + MaxtpNptn = max(MaxtpNptn,tpNptn) + end do + do ip = iright+1,ileft+nproc-1 + proc_irange(:,ip-ileft+1,level-5)=(/-1,-2/) + end do + sNptn = sNptn + MaxtpNptn + else + !if (myid .eq. 0) then + ! print *, ileft,iright + !end if + !call sleep(2) + + ! i的数量大于线程数,平均分配,接近 total_ptn/nproc + int_temp = 0 + tpNptn = 0 + MaxtpNptn = 0 + ptr1 = ileft + iproc = 1 + do ptr2 = ileft,iright + int_temp = int_temp + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + tpNptn = tpNptn + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + !if (myid .eq. 0) then + ! print *, ptr2,(min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1),int_temp,ave_ni + !end if + !call sleep(2) + if ((int_temp>=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=1,nr + do iip=1,np + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=1,nr + do iit=1,nt + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + !sigr = 0; sigt=0; sigp=0 + !do iir=1,nr + ! do iit=1,nt + ! do iip=1,np + ! sigr = max(sigr,2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip)) + ! sigt = max(sigt,2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip)) + ! sigp = max(sigp,2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip)) + ! end do + ! end do + !end do + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1.0-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + if (isnan(Htau)) then + print *, iir,iit,iip + print *, a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 + print *, b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 + print *, c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 + pause + end if + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + end if + + + end do + end do + end do + + ! 处理边界 + + do iit=1,nt + do iip=1,np + !if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + !else + ! tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + !end if + !if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + !else + ! tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + !end if + end do + end do + do iir=1,nr + do iip=1,np + !if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + !else + ! tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + !end if + !if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + !else + ! tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + !end if + end do + end do + do iir=1,nr + do iit=1,nt + !if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + !else + ! tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + !end if + !if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + !else + ! tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + !end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 1 阶格式 + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + ! additive + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + ! multiplicative + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = sqrt(a(iir,iit,iip)) + sigt = sqrt(b(iir,iit,iip)) + sigp = sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! partial derivatives + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=2,nt-1 + do iip=2,np-1 + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=2,nr-1 + do iip=2,np-1 + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=2,nr-1 + do iit=2,nt-1 + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr=sqrt(a(iir,iit,iip)); sigt=sqrt(b(iir,iit,iip)); sigp=sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! forward and backward partial derivatives + + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + + ! calculate LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 ) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + if (tpT < tau(iir,iit,iip)) then + tau(iir,iit,iip) = tpT + end if + + end if + + + end do + end do + end do + + ! boundary + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)x0 ) then + idx0=iix + exit + end if + end do + do iiy=1,ny-1 + if (yy(iiy)<= y0 .and. yy(iiy+1)>y0 ) then + idy0=iiy + exit + end if + end do + do iiy=1,ny-1 + if (zz(iiz)<= z0 .and. zz(iiz+1)>z0 ) then + idz0=iiz + exit + end if + end do + + if (idx0<=0 .or. idy0<0 .or. idz0<0) then + write(*,*) 'point out of the mesh' + pause + return + end if + + dx = xx(idx0+1)-xx(idx0) + dy = yy(idy0+1)-yy(idy0) + dz = zz(idz0+1)-zz(idz0) + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) +end subroutine + +! 3-D interpolation uniform mesh +subroutine Linear_Interp_3D(xx,yy,zz,val,nx,ny,nz,x0,y0,z0,v0,n0) + integer :: nx,ny,nz,idx0,idy0,idz0,n0 + double precision :: xx(nx),yy(ny),zz(nz),val(nx,ny,nz),x0(n0),y0(n0),z0(n0),v0(n0),dx,dy,dz + double precision :: r1,r2,r3 + integer :: iix,iiy,iiz,i + + dx = xx(2)-xx(1) + dy = yy(2)-yy(1) + dz = zz(2)-zz(1) + + do i=1,n0 + idx0 = floor((x0(i)-xx(1))/dx)+1 + idy0 = floor((y0(i)-yy(1))/dy)+1 + idz0 = floor((z0(i)-zz(1))/dz)+1 + + if (idx0<1 .or. idx0>nx-1 .or. idy0<1 .or. idy0>ny-1 .or. idz0<1 .or. idz0>nz-1) then + write(*,*) 'point out of the mesh' + pause + return + end if + + r1 = min(1.0, (x0(i)-xx(idx0))/dx ) + r2 = min(1.0, (y0(i)-yy(idy0))/dy ) + r3 = min(1.0, (z0(i)-zz(idz0))/dz ) + + v0(i) = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) + end do +end subroutine + +subroutine FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + !print *, delta(idi,idj,idk),delta(idi+1,idj+1,idk+1) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) r1+(iir+0.5)*dr, t1+iit*dt, p1+iip*dp + a0 = T0para(1); b0 = T0para(2); c0 = T0para(3); f0 = T0para(4); fun0 = T0para(5); + r0 = T0para(6); t0 = T0para(7); p0 = T0para(8); + + do iir=1,nr-1 + do iit=1,nt + do iip=1,np + r1 = rr(iir)+0.5*dr; t1 = tt(iit); p1 = pp(iip) + T0v_hr(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hr(iir,iit,iip)==0 ) then + T0r_hr(iir,iit,iip) = 0 + else + T0r_hr(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v_hr(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_ht iir,iit,iip -> r1+iir*dr, t1+(iit+0.5)*dt, p1+iip*dp + do iir=1,nr + do iit=1,nt-1 + do iip=1,np + r1 = rr(iir); t1 = tt(iit)+0.5*dt; p1 = pp(iip) + T0v_ht(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_ht(iir,iit,iip)==0 ) then + T0t_ht(iir,iit,iip) = 0 + T0p_ht(iir,iit,iip) = 0 + else + T0t_ht(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_ht(iir,iit,iip) + T0p_ht(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_ht(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_hp iir,iit,iip -> r1+iir*dr, t1+iit*dt, p1+(iip+0.5)*dp + do iir=1,nr + do iit=1,nt + do iip=1,np-1 + r1 = rr(iir); t1 = tt(iit); p1 = pp(iip)+0.5*dp + T0v_hp(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hp(iir,iit,iip)==0 ) then + T0t_hp(iir,iit,iip) = 0 + T0p_hp(iir,iit,iip) = 0 + else + T0t_hp(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_hp(iir,iit,iip) + T0p_hp(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_hp(iir,iit,iip) + end if + end do + end do + end do + + + + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip)) & + & *(T0r_hr(iir-1,iit,iip)*(tau(iir,iit,iip)+tau(iir-1,iit,iip))/2 & + & + T0v_hr(iir-1,iit,iip)*(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr) + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip)) & + & *(T0r_hr(iir,iit,iip)*(tau(iir+1,iit,iip)+tau(iir,iit,iip))/2 & + & + T0v_hr(iir,iit,iip)*(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr) + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt) & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)* & + & (T0p_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit-1,iip+1)-tau(iir,iit-1,iip-1) & + & + tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/(4*dp)) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt) & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)* & + & (T0p_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1) & + & + tau(iir,iit+1,iip+1)-tau(iir,iit+1,iip-1))/(4*dp)) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit+1,iip-1)-tau(iir,iit-1,iip-1) & + & +tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/(4*dt)) & + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp) + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip) & + & +tau(iir,iit+1,iip+1)-tau(iir,iit-1,iip+1))/(4*dt)) & + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp) + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif)ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + do iik=1,nk + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + + + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + idr = floor((rr(iir)-invr(igrid,1))/dinvr)+1 ! invr(idr) <= rr(iir) < invr(idr+1) + if (idr<0 .or. idr>ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + + do iik=1,nk + pert = 0.0 + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + end if + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +subroutine Kernel_Mask(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou,radius) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + + do i=1,nr + do j=1,nt + do k=1,np + dis = sqrt((rr(i)-rsou)**2+(rsou*(tt(j)-tsou))**2+(rsou*cos(tsou)*(pp(k)-psou))**2) + if ( dis < radius) then + kernel(i,j,k) = kernel(i,j,k) * 0 + end if + end do + end do + end do +end subroutine + +subroutine Kernel_Mask_new(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + dr = rr(2)-rr(1); dt = tt(2)-tt(1); dp = pp(2)-pp(1); + do i=1,nr + do j=1,nt + do k=1,np + if ( abs(rr(i)-rsou)6351):\n", + " fun_init[ip,it,ir] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n", + " elif (rr[ir]>6336):\n", + " fun_init[ip,it,ir] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n", + " elif (rr[ir]>5961):\n", + " fun_init[ip,it,ir] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n", + " else:\n", + " fun_init[ip,it,ir] = 1.0/9.0\n", + "\n", + " vel_init[ip,it,ir] = 1.0/fun_init[ip,it,ir]\n", + " a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir]\n", + " b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir]\n", + " c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir]\n", + " f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir]\n", + "\n", + " # true model\n", + " if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \\\n", + " and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \\\n", + " and rr[ir] >= 6211.0 and rr[ir] <= 6371.0):\n", + " c+=1\n", + " sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \\\n", + " *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \\\n", + " *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0)\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 150.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2)\n", + " fun_true[ip,it,ir] = fun_init[ip,it,ir]/(1.0+sigma*slow_p)\n", + " vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] \n", + " a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir]\n", + " b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir]\n", + " c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir]\n", + " f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir]\n", + "\n", + "\n", + "\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init.T)\n", + "fout_init.create_dataset('xi', data=xi_init.T)\n", + "fout_init.create_dataset('zeta', data=zeta_init.T)\n", + "fout_init.create_dataset('fun', data=fun_init.T)\n", + "fout_init.create_dataset('fac_a', data=a_init.T)\n", + "fout_init.create_dataset('fac_b', data=b_init.T)\n", + "fout_init.create_dataset('fac_c', data=c_init.T)\n", + "fout_init.create_dataset('fac_f', data=f_init.T)\n", + "fout_init.create_dataset('vel', data=vel_init.T)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true.T)\n", + "fout_true.create_dataset('xi', data=xi_true.T)\n", + "fout_true.create_dataset('zeta', data=zeta_true.T)\n", + "fout_true.create_dataset('fun', data=fun_true.T)\n", + "fout_true.create_dataset('fac_a', data=a_true.T)\n", + "fout_true.create_dataset('fac_b', data=b_true.T)\n", + "fout_true.create_dataset('fac_c', data=c_true.T)\n", + "fout_true.create_dataset('fac_f', data=f_true.T)\n", + "fout_true.create_dataset('vel', data=vel_true.T)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 500\n", + "n_rec = [60 for x in range(n_src)]\n", + "#n_src = 10\n", + "#n_rec = [10 for x in range(n_src)]\n", + "\n", + "\n", + "\n", + "lines = []\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " elev_recs.append(0) # elevation in m\n", + " lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + "\n", + "\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " dep = random.uniform((R_earth-rr1)*0.1,(R_earth-rr1)*0.9)\n", + " lon = random.uniform(pp1deg,pp2deg)\n", + " lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = rec_names[i_rec]\n", + "\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2_one_src/README.md b/test/old_tests/inversion_2_one_src/README.md new file mode 100644 index 0000000..2028979 --- /dev/null +++ b/test/old_tests/inversion_2_one_src/README.md @@ -0,0 +1,14 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file + - true model + - initial model + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_result.dat file which includes the arrival time at each station + +3. run TOMOATT in inversion mode with `input_params.yml`. + \ No newline at end of file diff --git a/test/old_tests/inversion_2_one_src/check_obj_func.ipynb b/test/old_tests/inversion_2_one_src/check_obj_func.ipynb new file mode 100644 index 0000000..c78b61e --- /dev/null +++ b/test/old_tests/inversion_2_one_src/check_obj_func.ipynb @@ -0,0 +1,64 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check the change of objective values\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fpath='objective_function.txt'\n", + "\n", + "objs=[]\n", + "\n", + "with open(fpath) as f:\n", + " lines = f.readlines()\n", + "\n", + " for l in lines:\n", + " if(l.startswith('i_inv')):\n", + " continue\n", + " objs.append(float(l.strip().split(',')[1]))\n", + "\n", + "\n", + "plt.plot(objs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)]" + }, + "vscode": { + "interpreter": { + "hash": "cdd74c396a461f81d13d16403c726c38089d3c42a4b6e59262cdb9511d16556b" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2_one_src/compare_with_fortran_code.ipynb b/test/old_tests/inversion_2_one_src/compare_with_fortran_code.ipynb new file mode 100644 index 0000000..f22668d --- /dev/null +++ b/test/old_tests/inversion_2_one_src/compare_with_fortran_code.ipynb @@ -0,0 +1,491 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# compare result from TOMOATT and fortran code\n", + "\n", + "fpath_kernel_fort = './fortran_code/ega5/output/kernel_step1_sum'\n", + "fpath_synth_fort = './fortran_code/ega5/output/syn_step1_event1' # Table\n", + "fpath_adj_fort = './fortran_code/ega5/output/adj_step1_event1' # TableADJ\n", + "fpath_out_tomoatt = './OUTPUT_FILES/out_data_sim_0.h5'\n", + "fpath_grid_tomoatt = './OUTPUT_FILES/out_data_grid.h5'\n", + "\n", + "# grid information in fortran code\n", + "nr = 55\n", + "nt = 55\n", + "np = 55\n", + "npoints = nr*nt*np\n", + "\n", + "# division\n", + "ndiv_r = 1\n", + "ndiv_t = 2\n", + "ndiv_p = 2 \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "ename": "OSError", + "evalue": "Unable to open file (file signature not found)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/home/mnagaso/workspace/TomoATT/test/inversion_2_one_src/compare_with_fortran_code.ipynb Cell 3\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 11\u001b[0m eta \u001b[39m=\u001b[39m f[\u001b[39m'\u001b[39m\u001b[39meta\u001b[39m\u001b[39m'\u001b[39m][:]\n\u001b[1;32m 12\u001b[0m \u001b[39m#zeta = f['zeta'][:]\u001b[39;00m\n\u001b[1;32m 13\u001b[0m \n\u001b[1;32m 14\u001b[0m \u001b[39m# read true model\u001b[39;00m\n\u001b[0;32m---> 15\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[48;5;17mh5py\u001b[39m.\u001b[39;49m\u001b[48;5;17mFile\u001b[48;5;17m(\u001b[48;5;17mfpath_true_model\u001b[48;5;17m,\u001b[48;5;17m \u001b[39m'\u001b[39;49m\u001b[39mr\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[48;5;17m) \u001b[39mas\u001b[39;00m f:\n\u001b[1;32m 16\u001b[0m vel_true \u001b[39m=\u001b[39m f[\u001b[39m'\u001b[39m\u001b[39mvel\u001b[39m\u001b[39m'\u001b[39m][:]\n\u001b[1;32m 17\u001b[0m xi_true \u001b[39m=\u001b[39m f[\u001b[39m'\u001b[39m\u001b[39mxi\u001b[39m\u001b[39m'\u001b[39m][:]\n", + "File \u001b[0;32m~/.local/lib/python3.9/site-packages/h5py/_hl/files.py:507\u001b[0m, in \u001b[0;36mFile.__init__\u001b[0;34m(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, fs_strategy, fs_persist, fs_threshold, fs_page_size, page_buf_size, min_meta_keep, min_raw_keep, locking, **kwds)\u001b[0m\n\u001b[1;32m 502\u001b[0m fapl \u001b[39m=\u001b[39m make_fapl(driver, libver, rdcc_nslots, rdcc_nbytes, rdcc_w0,\n\u001b[1;32m 503\u001b[0m locking, page_buf_size, min_meta_keep, min_raw_keep, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwds)\n\u001b[1;32m 504\u001b[0m fcpl \u001b[39m=\u001b[39m make_fcpl(track_order\u001b[39m=\u001b[39mtrack_order, fs_strategy\u001b[39m=\u001b[39mfs_strategy,\n\u001b[1;32m 505\u001b[0m fs_persist\u001b[39m=\u001b[39mfs_persist, fs_threshold\u001b[39m=\u001b[39mfs_threshold,\n\u001b[1;32m 506\u001b[0m fs_page_size\u001b[39m=\u001b[39mfs_page_size)\n\u001b[0;32m--> 507\u001b[0m fid \u001b[39m=\u001b[39m \u001b[48;5;17mmake_fid\u001b[48;5;17m(\u001b[48;5;17mname\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mmode\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17muserblock_size\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mfapl\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mfcpl\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mswmr\u001b[39m=\u001b[39;49m\u001b[48;5;17mswmr\u001b[48;5;17m)\n\u001b[1;32m 509\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(libver, \u001b[39mtuple\u001b[39m):\n\u001b[1;32m 510\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_libver \u001b[39m=\u001b[39m libver\n", + "File \u001b[0;32m~/.local/lib/python3.9/site-packages/h5py/_hl/files.py:220\u001b[0m, in \u001b[0;36mmake_fid\u001b[0;34m(name, mode, userblock_size, fapl, fcpl, swmr)\u001b[0m\n\u001b[1;32m 218\u001b[0m \u001b[39mif\u001b[39;00m swmr \u001b[39mand\u001b[39;00m swmr_support:\n\u001b[1;32m 219\u001b[0m flags \u001b[39m|\u001b[39m\u001b[39m=\u001b[39m h5f\u001b[39m.\u001b[39mACC_SWMR_READ\n\u001b[0;32m--> 220\u001b[0m fid \u001b[39m=\u001b[39m \u001b[48;5;17mh5f\u001b[39m.\u001b[39;49m\u001b[48;5;17mopen\u001b[48;5;17m(\u001b[48;5;17mname\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mflags\u001b[48;5;17m,\u001b[48;5;17m \u001b[48;5;17mfapl\u001b[39m=\u001b[39;49m\u001b[48;5;17mfapl\u001b[48;5;17m)\n\u001b[1;32m 221\u001b[0m \u001b[39melif\u001b[39;00m mode \u001b[39m==\u001b[39m \u001b[39m'\u001b[39m\u001b[39mr+\u001b[39m\u001b[39m'\u001b[39m:\n\u001b[1;32m 222\u001b[0m fid \u001b[39m=\u001b[39m h5f\u001b[39m.\u001b[39mopen(name, h5f\u001b[39m.\u001b[39mACC_RDWR, fapl\u001b[39m=\u001b[39mfapl)\n", + "File \u001b[0;32mh5py/_objects.pyx:54\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mh5py/_objects.pyx:55\u001b[0m, in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mh5py/h5f.pyx:106\u001b[0m, in \u001b[0;36mh5py.h5f.open\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mOSError\u001b[0m: Unable to open file (file signature not found)" + ] + } + ], + "source": [ + "# final model\n", + "fpath_final_model = './OUTPUT_FILES/final_model.h5'\n", + "fpath_true_model = \"./test_model_true.h5\"\n", + "\n", + "import h5py\n", + "\n", + "# read vel, xi, eta dataset \n", + "with h5py.File(fpath_final_model, 'r') as f:\n", + " vel = f['vel'][:]\n", + " xi = f['xi'][:]\n", + " eta = f['eta'][:]\n", + " #zeta = f['zeta'][:]\n", + "\n", + "# read true model\n", + "with h5py.File(fpath_true_model, 'r') as f:\n", + " vel_true = f['vel'][:]\n", + " xi_true = f['xi'][:]\n", + " eta_true = f['eta'][:]\n", + " #zeta_true = f['zeta'][:]\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# plot vel\n", + "plt.figure()\n", + "plt.imshow(vel[:,5,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel')\n", + "\n", + "# plot xi\n", + "#plt.figure()\n", + "#plt.imshow(xi[:,:,10].T, origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('xi')\n", + "#\n", + "## plot eta\n", + "#plt.figure()\n", + "#plt.imshow(eta[:,:,10].T, origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('eta')\n", + "\n", + "# plot vel_true\n", + "plt.figure()\n", + "plt.imshow(vel_true[:,5,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel_true')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy\n", + "\n", + "\n", + "# read fortran test file and convert to numpy array\n", + "def read_fortran_result_file(fpath):\n", + " with open(fpath, 'r') as f:\n", + " lines = f.readlines()\n", + " lines = [line.strip() for line in lines]\n", + " lines = [line for line in lines if line]\n", + " lines = [line.split() for line in lines]\n", + " lines = numpy.array(lines, dtype=numpy.float64)\n", + " return lines\n", + "\n", + "fortran_data = read_fortran_result_file(fpath_kernel_fort)\n", + "## change dimension of fortran data\n", + "Ks_fort = fortran_data[:,3].reshape(nr, nt, np)\n", + "Kxi_fort = fortran_data[:,4].reshape(nr, nt, np)\n", + "Keta_fort = fortran_data[:,5].reshape(nr, nt, np)\n", + "\n", + "fortran_synth_data = read_fortran_result_file(fpath_synth_fort).reshape(nr, nt, np)\n", + "fortran_adj_data = read_fortran_result_file(fpath_adj_fort).reshape(nr, nt, np)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# read h5 data\n", + "import sys\n", + "sys.path.append(\"../../utils/\")\n", + "\n", + "from tomoatt_data_retrieval import get_data_from_h5\n", + "\n", + "#Ks_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Ks_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n", + "#Kxi_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Kxi_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Keta_tomoatt = get_data_from_h5(fpath_out_tomoatt, \"Data/Keta_update_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + "Ks_tomoatt ,_,_,_ = get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/Ks_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n", + "Kxi_tomoatt ,_,_,_ = get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/Kxi_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Keta_tomoatt,_,_,_ = get_data_from_h5(fpath_out_tomoatt,fpath_grid_tomoatt, \"Data/Keta_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + "Syn_tomoatt,_,_,_ = get_data_from_h5(fpath_out_tomoatt,fpath_grid_tomoatt, \"Data/T_res_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Adj_tomoatt,_,_,_ = get_data_from_h5(fpath_out_tomoatt,fpath_grid_tomoatt, \"Data/adjoint_field_src_0_inv_0000\", nr, nt, np, ndiv_r, ndiv_t, ndiv_p)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# plot slice of Ks_inv\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_slice(data_es, data_fort, slice_ax, id_slice, contour=False):\n", + "\n", + " if (slice_ax == 'r'):\n", + " data_es_v = data_es[ id_slice, :, :]\n", + " data_fort_v = data_fort[id_slice, :, :]\n", + " elif (slice_ax == 't'):\n", + " data_es_v = data_es[ :, id_slice, :]\n", + " data_fort_v = data_fort[:, id_slice, :]\n", + " elif (slice_ax == 'p'):\n", + " data_es_v = data_es[ :, :, id_slice]\n", + " data_fort_v = data_fort[:, :, id_slice]\n", + " else:\n", + " print(\"Error: slice_ax should be 'r', 't' or 'p'\")\n", + " return\n", + "\n", + " # use the same color range for both tomoatt and fortran \n", + " combined_data = numpy.array([data_es_v.flatten(),data_fort_v.flatten()])\n", + " #Get the min and max of all your data\n", + " _min, _max = numpy.amin(combined_data), numpy.amax(combined_data)\n", + "\n", + " # make the color range symmetric\n", + " diff_data = data_es_v-data_fort_v\n", + " _min_diff, _max_diff = numpy.amin(diff_data), numpy.amax(diff_data)\n", + " if (abs(_min_diff) > abs(_max_diff)):\n", + " if (_min_diff < 0):\n", + " _max_diff = -_min_diff\n", + " else:\n", + " _min_diff = -_max_diff\n", + "\n", + " cmap1=\"viridis\"\n", + " cmap2=\"seismic\"\n", + "\n", + " plt.figure(figsize=(20,10))\n", + "\n", + " plt.subplot(1,3,1)\n", + " plt.imshow(data_es_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(data_es_v, colors='k', linewidths=0.5)\n", + " plt.title('result_tomoatt')\n", + "\n", + " plt.subplot(1,3,2)\n", + " plt.imshow(data_fort_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour): \n", + " plt.contour(data_fort_v, colors='k', linewidths=0.5)\n", + " plt.title('result_fort')\n", + " \n", + " plt.subplot(1,3,3)\n", + " plt.imshow(diff_data, cmap=cmap2, vmin=_min_diff, vmax=_max_diff)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(diff_data, colors='k', linewidths=0.5) \n", + " plt.title('tomoatt-fort')\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JOocEhERERERERGRLKXOIRHJCEYHhEVEZBiqEyIiMjRlDqlzSEREREREREQki6lzSEQyg7IkRERkOKoTIiIyJHUOqXNIRERERERERCSLqXNIRNKfBRNO9iBERCRlqU6IiMiIsrtQqHNIRERERERERCSLqXNIRDKDsiRERGQ4qhMiIjIkZQ6pc0hEREREREREJIupc0hEMoMOCIuIyHBUJ0REZFjqHBIRERERERERkSylySERERERERERkSym08pEJCMYBY2KiMgwVCdERGRoCqRW55CIiIiIiIiISBZT55CIZAYdERYRkeGoToiIyLDUOSQiIiIiIiIiIllKnUMikv4sEE72IEREJGWpToiIyLBUKNQ5JCIiIiIiIiKSxdQ5JCJpz2B1FRoRERmS6oSIiIxMmUMiIiIiIiIiIpKl1DkkIplBR4RFRGQ4qhMiIjIkizqHREREREREREQka6lzSEQyg44Ii4jIcFQnRERkSOocUueQiIiIiIiIiEgWU+eQiKQ/C4STPYjjjDHbgDYihx/6rLULjTGlwAPAVGAbcJ219nCyxigiklVUJ0REZEQpVCiSQJ1DIiJj43xr7Txr7cLo7TuBZ6y1jcAz0dsiIpK9VCdERCRlqHNIRDKCSf0siauAZdHv7weeB+5I1mBERLKN6oSIiAxNmUPqHBIROTHlxpiV/b4+5rCOBZ4yxqzq9/Mqa+3e6Pf7gKpxGa2IiIw31QkREUk76hwSETkxzf1OARjKUmvtbmNMJfC0MWZd/x9aa60xJuUPYYuIyKioToiISNrR5JCIZIYUOl3AWrs7+m+TMeYh4ExgvzGmxlq71xhTAzQldZAiItlGdUJERIal08pERCRBjDF5xpiCo98DK4A1wCPATdHVbgIeTs4IRUQkmVQnREQkFalzSEQygE2lI8JVwEPGGIi8xv7cWvuEMeZ14JfGmFuA7cB1SRyjiEiWUZ0QEZHhKJBak0MiIglkrd0CnOaw/CBw4fiPSEREUonqhIiIpCJNDolI+rOk0hFhERFJNaoTIiIyouzuHFLmkIiIiIiIiIhIFlPnkIhkhnCyByAiIilNdUJERIZkyfZCoc4hEREREREREZEsps4hEckIRlkSIiIyDNUJEREZmq5Wps4hEREREREREZEsps4hEckMOiIsIiLDUZ0QEZFhqXNIRERERERERESylDqHRCT9WSCsI8IiIjIE1QkRERmWMofUOSQiIiIiIiIiksXUOSQiGcAqS0JERIahOiEiIiNR55CIiIiIiIiIiGQpTQ6JiIiIiIiIiGQxnVYmIplBpwuIiMhwVCdERGRIFggnexBJpc4hEREREREREZEsps4hEckMOiIsIiLDUZ0QEZFhKZBaRERERERERESylDqHRCT9WSCsI8IiIjIE1QkRERmWJR06h4wxpcADwFRgG3CdtfZwzDq1wENEmoG8wL9Za78/0r7VOSQiIiIiIiIikvruBJ6x1jYCz0Rvx9oLLLHWzgMWAXcaYyaMtGN1DolIBrBgs/vqAiIiMhzVCRERGU56dA4BVwHLot/fDzwP3NF/BWttb7+bOcTZFKTOIRERERERERGR8VFujFnZ7+tjJ7BtlbV2b/T7fUCV00rGmMnGmHeAncDd1to9I+1YnUMikhl0FRoRERmO6oSIiAxr3DqHmq21C4f6oTHmD0C1w4++1P+GtdYaYxyLm7V2J3Bq9HSy3xpjHrTW7h9uUJocEhERERERERFJAdba5UP9zBiz3xhTY63da4ypAZpG2NceY8wa4BzgweHW1eSQiKQ/XYVGRESGozohIiLDSpvMoUeAm4C7ov8+HLuCMWYScNBa22WMKQGWAt8aacfKHBIRERERERERSX13Ae8zxmwElkdvY4xZaIz5UXSdWcCfjTFvA38EvmGtXT3SjtU5JCKZQVkSIiIyHNUJEREZVupf1dJaexC40GH5SuDW6PdPA6ee6L7VOSQiIiIiIiIiksXUOSQimUFHhEVEZDiqEyIiMqS0yRwaM+ocEhERERERERHJYpocEhERERERERHJYjqtTEQygNXpAiIiMgzVCRERGYlOKxMRERERERERkSylziERSX8WCKf+pSdFRCRJVCdERGRYCqRW55CIiIiIiIiISBZT55CIZAZlSYiIyHBUJ0REZFjZ3WGqziERERERERERkSymziERyQw6IiwiIsNRnRARkSEpc0idQyIiIiIiIiIiWUydQyKSASyEdURYRESGojohIiLDUeeQOodERERERERERLKYOodEJP1ZsDa7ry4gIiLDUJ0QEZERqXNIRERERERERESylDqHRCQzKEtCRESGozohIiJDUuaQOodERERERERERLKYOodEJDNYHREWEZFhqE6IiMiwsjubTp1DIiIiIiIiIiJZTJNDIiIiIiIiIiJZTKeViUj6sxbC2d0GKiIiw1CdEBGRYSmQWp1DIiIiIiIiIiJZTJ1DIpIZFDQqIiLDUZ0QEZFhqXNIRERERERERESylDqHRCQjWGVJiIjIMFQnRERkaMocUueQiIiIiIiIiEgWU+eQiGQAqywJEREZhuqEiIgMR51D6hwSEREREREREcli6hwSkfRngbCOCIuIyBBUJ0REZETqHBIRERERERERkSylziERyQxWV6EREZFhqE6IiMiQLJDddUKdQyIiIiIiIiIiWUydQyKS9ixglSUhIiJDUJ0QEZGRKXNIRERERERERESylDqHRCT9WassCRERGZrqhIiIDMuiziEREREREREREclamhwSEREREREREcliOq1MRDKCgkZFRGQ4qhMiIjI0nVamziERERERERERkSymziERyQwKGhURkeGoToiIyLCyu06oc0hEREREREREJIsZa3X+tYikN2PME0D5ON1ds7X24nG6LxERSQDVCRERGY7qhCaHRERERERERESymk4rExERERERERHJYpocEhERERERERHJYpocEhERERERERHJYpocEhERERERERHJYpocEhERERERERHJYv8/kV7Fg/oRLtoAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Syn_tomoatt, fortran_synth_data, 'r', 27, contour=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Ks_tomoatt, Ks_fort, 'p', 28)\n", + "plot_slice(Ks_tomoatt, Ks_fort, 't', 21)\n", + "plot_slice(Ks_tomoatt, Ks_fort, 'r', 36)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Adj_tomoatt, fortran_adj_data, 't',22)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABH0AAAI+CAYAAAAhCnZMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABUW0lEQVR4nO39e5xk51kf+v6e6ZnRaDSSRjdkYVmWgx2MMUFOdAwEkoDBwRBssxNCnDjEzna2wz7xDpzNDpjACZdDdoCcTSAhN4F9bIKDTYyNhWPjGDAxzsbGspHvBoQvSEK2LtZIGklz7ff80SXoqrWquqenu7pq9ff7+fRHvd5eteqtVk/9ut/1rGdVay0AAAAADMu+3Z4AAAAAANvPog8AAADAAFn0AQAAABggiz4AAAAAA2TRBwAAAGCALPoAAAAADJBFH2AQquqVVXV3VX14m453tqpuHX3cvB3HBGD3yAkAZtmBnLiuqv5bVX2sqj5aVddvx3HPeR6ttd14XoBtVVV/OcnxJD/XWnv6NhzveGvtyPnPDIBFICcAmGUHcuI3k/zz1trbq+pIktXW2iPne9xzpdIHGITW2juTfG79WFV9QVX9alW9r6p+q6qeukvTA2CXyQkAZtnOnKiqpyXZ31p7++jYx3djwSex6AMM201J/rfW2l9I8n8k+Xfn8NhDVXVLVb27qr55R2YHwG6TEwDMstWc+LNJjlXVG6rqd6vqX1bVyo7Ncob9u/GkADttVEL5F5P8l6p6bPiC0df+epIf7nnYna21rx99/sTW2p1V9WeS/EZVfai19oc7PW8A5kNOADDLeebE/iR/KckzkvxRktcleXGSV+zsrLss+gBDtS/JsdbaDZNfaK29IckbZj24tXbn6L+fGF2P+4wkfpkHGA45AcAs55MTdyS5tbX2iSSpql9O8uXZhUUfl3cBg9RaezDJJ6vqbyZJrfnSzTy2qi6rqsdW8a9M8pVJPrpjkwVg7uQEALOcT04keW+So1V11Wj7WdmlnLDoAwxCVf1Ckt9O8oVVdUdVvSTJC5O8pKo+kOQjSZ6/ycN9UZJbRo97R5Ifba35ZR5gickJAGbZzpxorZ3NWg+gX6+qDyWpJD+zMzOfzS3bAQAAAAZIpQ8AAADAAGnkDCy9r/+ai9p9nzs7l+d63wdPvq219py5PBkA20JOADDLk6vaI3N6rruSueaERR9g6d33ubP5nbddN5fnWrnmD66cyxMBsG3kBACzPJLkH87puX4wmWtOWPQBll5LsprV3Z4GAAtKTgAwS2W4vW+G+roAAAAA9jSVPsAAtJxtzuACMI2cAGC2oVbEDPV1AQAAAOxpFn0AAAAABsjlXcDSW2vQ2XZ7GgAsKDkBwCwaOQMAAACwVFT6AIPgVrwAzCInAJhlqBUxQ31dAAAAAHuaSh9g6bW0nG16NQDQT04AsJGhVsQM9XUBAAAA7GkqfYBBcFcWAGaREwBM4+5dAAAAACwVlT7A0mtJzjqDC8AUcgKAjQy1ImaorwsAAABgT1PpAwyCXg0AzCInAJhGTx8AAAAAlopKH2DptSRnmzO4APSTEwBsZKgVMUN9XQAAAAB7mkofYBBWd3sCACw0OQHALLXbE9ghKn0AAAAABsiiDwAAAMAAubwLWHotLWfdiheAKeQEALNUkpXdnsQOUekDAAAAMEAqfYDl15KzTuACMI2cAGADi1IRU1WHkrwzyQVZW7N5fWvtB7Z6PIs+AAAAAIvhZJJntdaOV9WBJO+qqre21t69lYNZ9AGWXotb8QIwnZwAYJbK4lT6tNZakuOjzQOjjy3Xqy7K6wIAAAAYuiur6pZ1Hy+d3KGqVqrq1iR3J3l7a+09W30ylT7AAFTOpnZ7EgAsLDkBwGxzrIi5t7V246wdWmtnk9xQVUeTvLGqnt5a+/BWnkylDwAAAMCCaa0dS/KOJM/Z6jFU+gBLryVZdVcWAKaQEwBsZFEqYqrqqiSnW2vHqurCJM9O8mNbPZ5FHwAAAIDFcE2SV1fVStbWon6xtfbmrR7Mog8wCHo1ADCLnABgmgW7e9cHkzxju463KK8LAAAAgG2k0gdYei3O4AIwnZwAYCNDrYgZ6usC2BVVdaiqfqeqPlBVH6mqH+rZ58VVdU9V3Tr6+Ae7MVcA5k9OADBPKn2AQVhtC3MG92SSZ7XWjlfVgSTvqqq3ttbePbHf61prL9uF+QHsSXICgGlq9DFEFn0AtlFrrSU5Pto8MPpwo2AAksgJAObL5V0A5+bKqrpl3cdLJ3eoqpWqujXJ3Une3lp7T89x/kZVfbCqXl9VT9jpSQMwN3ICgIWh0gdYenNu0Hlva+3GWTu01s4muaGqjiZ5Y1U9vbX24XW7/EqSX2itnayqf5jk1UmetWMzBtjj5AQAG1nZ7QnsEJU+ADuktXYsyTuSPGdi/L7W2snR5s8m+QtznhoAC0BOALDTVPoAS6+lcnZB1rCr6qokp1trx6rqwiTPTvJjE/tc01q7a7T5vCQfm/M0AfYUOQHALJXhVsRY9AHYXtckeXVVrWQtO36xtfbmqvrhJLe01m5O8o+r6nlJziT5XJIX79psAZg3OQHA3Fj0AQZhUW7F21r7YJJn9Iz/s3Wff2+S753nvAD2OjkBwCxDrfQZ6usCAAAA2NNU+gBLb853ZQFgycgJADYy1IqYob4uAAAAgD1NpQ8wAJWzzRo2ANPICQCmG/Ldu4b6ugAAAAD2NJU+wNJrSVatYQMwhZwAYCNDTYmhvi4AAACAPU2lDzAI7soCwCxyAoBp9PQBAAAAYKmo9AGWXmvuygLAdHICgI0MtR5U+gEAAAAMkEUfAAAAgAFyeRcwCKuDLcgEYDvICQBmWdntCewQlT4AAAAAA6TSB1h6LclZa9gATCEnAJjFLdsBAAAAWCoqfYABcCteAGaREwDMNtSUGOrrAgAAANjTVPoAS68lWbWGDcAUcgKAWfT0AQAAAGCpqPQBBuFsq92eAgALTE4AMMtQK2KG+roAAAAA9jSVPsDSa6mctYYNwBRyAoCNDDUlhvq6AAAAAPY0lT7AIKw2a9gATCcnAJjG3bsAAAAAWCoqfYCl1xK9GgCYSk4AsJGh3uNR+gEAAAAMkEUfAAAAgAFyeRew9FoqZ9tQCzIBOF9yAoBZKsnKbk9ih6j0AQAAABgglT7AIKxawwZgBjkBwCxDTYmhvi4AAACAPU2lD7D0WkvONmvYAPSTEwBsZKgpMdTXBQAAALCnqfQBBqCyGndlAWAaOQHAdJXhVsQM9XUBAAAA7GkqfYCl16JXAwDTyQkANjLUlBjq6wIAAADY01T6AINw1ho2ADPICQCm0dMHAAAAgKWi0gdYei2V1eauLAD0kxMAbGSoFTFDfV0AAAAAe5pKH2AQ9GoAYBY5AcAsQ60HlX4AAAAAA2TRBwAAAGCAXN4FLL2WZLVZwwagn5wAYJZKsrLbk9gh0g8AAABggFT6AANQOTvY1msAnD85AcBsQ62IGerrAgAAANjTVPoAS0+vBgBmkRMAzFIZbkXMUF8XAAAAwJ6m0gcYBL0aAJhFTgAwy1ArYob6ugAAAAD2NJU+wNJrrfRqAGAqOQHARoaaEkN9XQAAAAB7mkofYBDOOoMLwAxyAoBp3L0LAAAAgKWi0gdYei3JqruyADCFnABgI0OtiBnq6wIAAADY01T6AANQejUAMIOcAGC2odaDSj8AAACABVBVT6iqd1TVR6vqI1X1HedzPJU+wNJrSVbbUNfmAThfcgKAWSrJym5P4k+dSfJdrbX3V9XFSd5XVW9vrX10KwdT6QOwjarqUFX9TlV9YLQy/0M9+1xQVa+rqtuq6j1Vdf0uTBWAXSAnAJiltXZXa+39o88fSvKxJI/f6vEs+gBsr5NJntVa+9IkNyR5TlV9+cQ+L0lyf2vtyUn+VZIfm+8UAdhFcgJgb7uyqm5Z9/HSaTuOFv2fkeQ9W30yl3cBg3B2QdawW2styfHR5oHRR5vY7flJfnD0+euT/HRV1eixAOwAOQHALHNMiXtbazdutFNVHUnyS0m+s7X24FafbDHSD2B5bLgyX1UrVXVrkruTvL21Nrky//gktydJa+1MkgeSXLHD8wZgPuQEAOelqg5kbcHnNa21N5zPsVT6AEuvpebZoHPDlfnW2tkkN1TV0SRvrKqnt9Y+PJfZAdAhJwCYpbI4FTFVVUlekeRjrbWfON/jLcrrAhic1tqxJO9I8pyJL92Z5AlJUlX7k1ya5L65Tg6AXScnAOjxlUm+LcmzqurW0cc3bvVgKn2AQVhdkDXsqroqyenW2rGqujDJs9NtwHlzkhcl+e0k35LkN/RpANhZcgKAWRYjJZLW2ruyVny0LSz6AGyva5K8uqpWspYdv9hae3NV/XCSW1prN2etXPM/VdVtST6X5AW7N10A5kxOADA3Fn2ApddacnZ+vRpmaq19MGu3VZwc/2frPj+R5G/Oc14Ae5mcAGCWRerps92G+roAAAAA9jSVPsAgzPGuLAAsITkBwCxDrYgZ6usCAAAA2NNU+gBLr6Wy2qxhA9BPTgAwi54+AAAAACwVlT7AIJyNXg0ATCcnAJhlqBUxQ31dAAAAAHuaSh9g6bW4KwsA08kJADYy1IqYob4uAAAA6Kg1/7+qur+qfme35wM7yaIP56SqfrOq/sFuzwOA4dhqtlTVhVX1K1X1QFX9l52YGwBrqupTVfV1uz2P9arqxVX1romxV1XVj2zw0K9K8uwk17bWnrnF525V9eStPBbmyaIPW9b3Jjtj3828+c5dVV0/esPev25s06+LRbF2K955fAA76xzfg78lydVJrmit/c0tPFcnAxgqOQGMeWKST7XWHj7XB8qMYXrslu3z+Jg3yTRQ3owA2G4LmC1PTPL7rbUz5/rABXwtAAurqv5TkuuS/EpVHa+q766q51XVR6rq2Khi84vW7f+pqvonVfXBqnq4ql5RVVdX1Vur6qGq+rWqumzd/rOO9fKq+sPR4z5aVf/TaPyLkvyHJF8xmtOxqnppkhcm+e7R2K/0vJaXJPnZdY/7odH4/1JVt1XV56rq5qr6/HWPaVX1j6rqD5L8QVW9c/SlD4yO8be277sN28uiz4CM3ly/p6o+mOThqvqqqvq/R2+AH6iqr16374ur6hOjN89PVtULR+M/WFU/v26/3rOgfW+yM+bV++ZbVV80elM/NnqTf966x7yqqv7dKBiOV9X/qKrHVdVPjq69/XhVPWP9fGYc669V1e9W1YNVdXtV/eC66T32hn1s9DxfsdnXxWJZTc3lA/aaBc6WH0ryz5L8rdG+L6mqfVX1/VX16aq6u6p+rqounXjOl1TVHyX5jfRnAAMlJ2DrWmvfluSPkjy3tXYkyS8n+YUk35nkqiRvydqC0MF1D/sbWbuE6s8meW6Styb5p6P99yX5x0lSVX92g2P9YZK/lOTSJD+U5Oer6prW2seSfHuS326tHWmtHW2t3ZTkNUl+fDT23J7X8oqJx/1AVT0ryb9I8q1Jrkny6SSvnXjoNyf5siRPa6395dHYl46O8brNfi9ZXCp9WBZ/O8lfS/JnkrwpyY8kuTzJ/5Hkl6rqqqq6KMm/TvINrbWLk/zFJLeey5P0vcnO2Lfz5ltVB5L8SpL/luTzkvxvSV5TVV+47qHfmuT7k1yZ5GSS307y/tH265P8RJJs4lgPJ/l7SY6Ovjf/a1V98+hrj71hHx3N7bc3+7oA9pBFzJYfSPJ/JnndaN9XJHnx6ONrRnM9kuSnJx76V5J8UZKvT38GALCxv5Xkv7bW3t5aO53k/5vkwqy99z/m37TWPttauzPJbyV5T2vtd1trJ5K8MckzNnOs1tp/aa39cWttdbS48gdJttSHZ4YXJnlla+39rbWTSb43aycgrl+3z79orX2utfboNj837CiLPsPzr1trtyf5u0ne0lp7y+gN8u1JbknyjaP9VpM8vaoubK3d1Vr7yJzn+eVZ+2X8R1trp1prv5HkzVn7w+Ixb2ytvW9dMJxorf1ca+1sktflT4Ni5rFaa7/ZWvvQ6PvwwaydSfgr83iRzEdrydlWc/mAPWpZsuWFSX6itfaJ1trxrP3S/oKJiqIfbK097Jf2vUVOwLb7/KxVwyRJWmurSW5P8vh1+3x23eeP9mwf2cyxqurvVdWtowrTY0menrWTwJtSVS8cVXMer6q3bvL1HE9y38TruX2zz8ny0dOHZfLYm9ETk/zNx94cR2+QX5XkmlHDsr+VtbOpd1XVf62qp855np+f5PbRm/pjPp2tB8XUY1XVl1XVO6rqnqp6IGuve9NBAcBSZcun121/Osn+rDV7foxf2gG2pq37/I+zlglJ1m6BnuQJSe7cwnGnHquqnpjkZ5K8LGtN+48m+XDyJ9dStnSNjbXWXjOq5jzSWvuGTc7hoiRXTLyevueChWfRZ3geezO6Pcl/Gl3b+tjHRa21H02S1trbWmvPzto1qx/P2ptpsnYp1OF1x3vcJp7rXOb1mD9O8oSqWv8zeF22HhSzjvWfk9yc5AmttUuz1i9i00HBcnBXFthRi5otk8Z+ac9aFpzJ+EmDNuVzBk5OwHn7bNYunU2SX0zy16rqa0etFr4ra+0Y/u8tHHfWsS7K2nv1PUlSVX8/a5U+6+d07UQvofXz3KxfSPL3q+qGqroga5cPv6e19qkZj9nK87DAVPqwbH4+yXOr6uuraqWqDlXVV1fVtbXWOf/5oxXsk0mOZ60kP1nrv/CXq+q6UfPL753xHH1vsrP2Xf+m+J4kj2StufOBUSPQ56bbMG0zNjrWxUk+11o7UVXPTPJ31j32nqy99vVzO5fXBbCXLFq2TPqFJP+vqnpSVR3Jn/b8mXZ3r74MAKDfv0jy/aMqz+dm7ZLff5Pk3tH2c1trp871oK2135t2rNbaR5P8X1nr7fnZJF+S5H+se/hvJPlIks9U1b2jsVckedqoIvWXNzmHX0vy/07yS0nuSvIFSV6wwcN+MMmrR8/zrZt5HtgNblc6UK2126vq+Ul+PGu/BJ9N8jtJ/tesLfb970l+Lmsr57eOxtNae3tVvS7JB7P2pvtjSZ43efyR9W+yq621WZdMvSLJfxmFxG+21r65qp6b5N9l7Zf/O5P8vdbax7fwWk9tcKz/Z5L/q6p+Osl/z9rZhKOjxz5SVf88yf8YnVl4zjm+LhZAS2VVHwXYcQuYLZNembVLvN6Z5FCSt2Wtuf+019PJgNbau8/h+VgScgLOX2vtTVlr5r/eG6fse/3E9t+d2P7ZrN02/bHtN8441vcl+b4pXzuVtRsNrB/7gyQ39O2/bp9XJXnVxNh/yNoVAX37d95AZu3Pclq7snAO2nwLjavN+QkBttsVX3RV+8ZXPX8uz/XzX/6K97XWbpzLkwGwLeQEALPcWNVumdOiT63drGhuOaHSBxiE1TiDC8B0cgKAqaqS/XNaHjl9ej7PM6KnD9umqj6y7naI6z9euNtzA2A5yRYAgK07r6WsqnpOkp9KspLkZx+7ewd7U2vti3d7DuxNLdGrYUHJCc6XbGE7yInFJSeAhTHQSp8tv6qqWknyb5M8O8kdSd5bVTePOqz3OlgXtEO5aKtPCQzQiTycU+2k38QHSE4A20FODNdWcuLKK69s119//ZxmCCyDT33qU7n33nvlxBTns5T1zCS3tdY+kSRV9dokz08y9U36UC7Kl9XXnsdTAkPznvbr23Kc1eZq1QUkJ4DzJicG7Zxz4vrrr88tv/M7c5oesAxufOYzz/8g8+zpM2fnk36PT3L7uu07RmNjquqlVXVLVd1yOifP4+kAWDJyAoBZzjkn7rnnnrlNDmAIdvyUR2vtptbaja21Gw/kgp1+OgCWjJwAYJb1OXHVVVft9nQAlsr51C/dmeQJ67avHY0BzFcrDToXk5wAFoOcWFRyAlgMLu/q9d4kT6mqJ1XVwSQvSHLz9kwLgAGQEwDMIicAdtiWl7Jaa2eq6mVJ3pa1Wyy+srX2kW2bGcAmtSSrcQZ30cgJYFHIicUkJ4CFMeBKn/N6Va21tyR5yzbNBYCBkRMAzCInAHbWMJeygD1HrwYAZpETAEw14EqfHb97FwAAAADzN8ylLGBPaXEGF4Dp5AQAG1LpAwAAAMCyGOZSFrDnOIMLwCxyAoCp9PQBAAAAYJkMcykL2FNayhlcAKaSEwDMpNIHAAAAgGUyzKUsYM9ZjTO4AEwnJwCYSqUPAAAAAMtkmEtZwN7S3JUFgBnkBACzqPQBAAAAYJlY9AEAAAAYoGHWLwF7SouyfQCmkxMAbMjlXQAAAAAsi2EuZQF7jjO4AMwiJwCYSiNnAAAAAJbJMJeygD2lpZzBBWAqOQHATCp9AAAAAFgmw1zKAvac5gwuADPICQCmUukDAAAAwDIZ5lIWsOesxhlcAKaTEwBMpdIHAAAAgGUyzKUsYE9pLe7KAsBUcgKADan0AQAAAGBZDHMpC9hz3JUFgFnkBABT6ekDAAAAwDIZ5lIWsMeUXg0AzCAnAJhBpQ8AAAAAy8SiDwAAAMAADbN+CdhzNOgEYBY5AcBULu8CAAAAYJkMcykL2FNasjANOqvqCUl+LsnVWZvaTa21n5rY56uTvCnJJ0dDb2it/fAcpwmwp8gJAGYacKXPMF8VwO45k+S7Wmvvr6qLk7yvqt7eWvvoxH6/1Vr7pl2YHwC7S04AMDcWfYDl15LWdnsSa1prdyW5a/T5Q1X1sSSPTzL5yzwA8yInAJhlwJU+evoAnJsrq+qWdR8vnbZjVV2f5BlJ3tPz5a+oqg9U1Vur6ot3arIAzJ2cAGBhDHMpC9hzVjO3Xg33ttZu3GinqjqS5JeSfGdr7cGJL78/yRNba8er6huT/HKSp2z7TAH4E3ICgJlU+gCwGVV1IGu/yL+mtfaGya+31h5srR0fff6WJAeq6so5TxOAXSInAJiXYS5lAXtKS9IW564sleQVST7WWvuJKfs8LslnW2utqp6ZtQX4++Y4TYA9RU4AMNNe7ulTVa+sqrur6sPrxi6vqrdX1R+M/nvZzk4TYGl8ZZJvS/Ksqrp19PGNVfXtVfXto32+JcmHq+oDSf51khe0tigtRs+dnAA4J3IicgJgmr73zPOxmaWsVyX56SQ/t27s5Ul+vbX2o1X18tH292zHhADOXWV1Qc7gttbelcxuHNFa++msva8OxasiJ4CFJid22asiJ4BFtliVPq9K9z1zyzas9GmtvTPJ5yaGn5/k1aPPX53km7djMgAsHzkBwCxyAmDzprxnbtlWl7Kubq3dNfr8M0munrbj6DaVL02SQzm8xacDmG15i94HS04AC0VOLJwt5cR11103h6kBe858K32urKpb1m3f1Fq7aaee7Lxf1ajB3NQYHU3+piS5pC4XtwB7jJwAYJZzyYkbb7xRTgDL7t7W2o3zerKtLvp8tqquaa3dVVXXJLl7OycFcK4W5a4s/Ak5ASwUObFw5ASwOBarp8+22rCnzxQ3J3nR6PMXJXnT9kwHgIGQEwDMIicA5mAzt2z/hSS/neQLq+qOqnpJkh9N8uyq+oMkXzfaBmAPkhMAzCInADZvynvmlm1Yv9Ra+9tTvvS15/PEANulNWX7u0lOAItOTuwuOQEshQW5vGvGe+aWbPXyLgAAAAAW2GIsZQGcp1VncAGYQU4AMJVGzgAAAAAsk2EuZQF7Tmu7PQMAFpmcAGAqlT4AAAAALJNhLmUBe467sgAwi5wAYCqVPgAAAAAsk2EuZQF7Sks5gwvAVHICgJlU+gAAAACwTIa5lAXsOW7KAsAscgKAmVT6AAAAALAshrmUBewtzV1ZAJhBTgAwi54+AAAAACyTYS5lAXuPZg0AzCInAJhGpQ8AAAAAy8SiDwAAAMAADbN+CdhzNOgEYBY5AcBULu8CAAAAYJkMcykL2HOaBp0AzCAnAJhKpQ8AAAAAy2SYS1nAntKiVwMA08kJADak0gcAAACAZTHMpSxgb2lJnMEFYBo5AcAsevoAAAAAsEyGuZQF7DnuygLALHICgKlU+gAAAACwTIa5lAXsPc7gAjCLnABgGpU+AAAAACyTYS5lAXtMpbkrCwBTyQkAZlDpAwAAAMAyGeZSFrD36NUAwCxyAoBpVPoAAAAAsEws+gAAAAAM0DDrl4C9pUWDTgCmkxMAbGSgl3cN81UBAAAsgzNnNtzlVA5u26EP7z+1uQcP9A9g2Gv8SwaGQYNOAGaREwBMo5EzAAAAAMtkmEtZwB6kVwMAs8gJAKZQ6QMAAADAMtlwKauqnpDk55JcnbWroW9qrf1UVV2e5HVJrk/yqSTf2lq7f+emCjCDXg27Rk7MUU1UKjQ/+LBp/rnsGjmxTk9n5ckmzX3FBgezuqljPXJm/FiHD3Uft9rTFLqv4fOZE92xThPogVZGsAft8UqfM0m+q7X2tCRfnuQfVdXTkrw8ya+31p6S5NdH2wDsPXICgFnkBMAu2XApq7V2V5K7Rp8/VFUfS/L4JM9P8tWj3V6d5DeTfM+OzBJgI87g7ho5ASwFObFr5ASw8PZ4pc+fqKrrkzwjyXuSXD16A0+Sz2StXLPvMS+tqluq6pbTOXk+cwVgwckJAGY535y455575jNRgIHY9FJWVR1J8ktJvrO19mCt6yvQWmtV1Xv+pLV2U5KbkuSSunz451gm+y3sFn0e2EtakrYg//b2MDmxSX05UVu8r8Jmf+xbTy8IOcFeIicWwnbkxI033rjUb16T/XuSbnFBb3+dM92cOHSoe6xDE8c61fO4vuMfOtQdO7h/435AJ/r6/vT0EYKlsJcrfarqQNbeoF/TWnvDaPizVXXN6OvXJLl7Z6YIwKKTEwDMIicAdseGiz61tgT/iiQfa639xLov3ZzkRaPPX5TkTds/PYDNaW0+H3TJCWAZyIndIyeAhfdYT595fMzZZp7xK5N8W5IPVdWto7F/muRHk/xiVb0kyaeTfOuOzBCARScnAJhFTgDsks3cvetdmd414Gu3dzoAW+Ts6q6RE8BSkBO7Rk4AC2/Ad+8a5quap8mGnJtsxln7NtHIs6/xZo+22vNbTF+sTh5PDTLAzttETmwqE85HTwPb3uyQEwDbp6dj8v793ebLk/oaKPc1cu5ryHz8+MbT6vu7tv9x3ec8cmR8u69pc1/z6IM5tbmJANtuG3+jBAAAAGBRWF4FhsGteAGYRU4AMM2AL+9S6QMAAAAwQMNcygL2nNJ6BIAZ5AQAUw240meYr2qnTDbjTDqNNnubca6s9ByqZ799Wyu8qtVuA7V2tqcJ9ERZczt7dnNPoJEnwOZsJif6MmGl5/2/LxP6jr8Zfe/jfRkw0dy5Nyf6bjIgJwA6TqWnaXNP8+XJxs2PnOi+/5840X1c39+np09vPK9jxzZ3rMmmzf2P3bjZc5Ks9jSw3ndGc2eYB/+qgOXX4la8AEwnJwDYyEAXHfX0AQAAABggiz7AANTa5Yvz+NhoJlVPqKp3VNVHq+ojVfUdPftUVf3rqrqtqj5YVX9+R74tAIzICQBmeKynzzw+5myY9UsAu+dMku9qrb2/qi5O8r6qentr7aPr9vmGJE8ZfXxZkn8/+i8AwycnAJgbiz7nqdO4ua9BZ89qXh3o+dZP7lc9hVh9DTR7mjZXT/PNdmaic9zpbie5/ubOmnayBBbkR7K1dleSu0afP1RVH0vy+CTrf5l/fpKfa621JO+uqqNVdc3osSyznvftycbNvU2bDxzoPq7vTNDkWN/NA/r0vLdXT3a0UxNNNc/0HL8vX1Z7/gGubvJmATAvcoKdNPl7dpKDPe/jp850M2CycfNmmzY/+mh37OTJ8e3jxzd3rL7mzn1jk02ar7yyu0/f/PscObKJ5s4D7bHCAhrw3btc3gVwbq6sqlvWfbx02o5VdX2SZyR5z8SXHp/k9nXbd4zGAFh+cgKAhTHMpSxg75nfGdx7W2s3brRTVR1J8ktJvrO19uDOTwuAmeQEANOo9AFgs6rqQNZ+kX9Na+0NPbvcmeQJ67avHY0BsAfICQDmZZhLWcDesyC9Gqqqkrwiycdaaz8xZbebk7ysql6btcacD+jTALDD5AQA0wy40meYr2o7VE/zyr7GypMNOg92G5LVBX1jF3SPNdnceV/3+VpP086+Zpx9TZpzcrwxWk12ektPE8/0NIDOlIbPmjtDknxlkm9L8qGqunU09k+TXJckrbX/kOQtSb4xyW1JHkny9+c/Tc5bT050mvun27i5LyfSkwl92ZGD4w2fW99NAfqs9jT878mJmsiJdqInJ3qyo/fGAL3z0NwZIicG6VS679l979A9v1Z3H7fJRst9DZMnj3/HHVs/ft9+k42c77mnu8/113fHLrywO9Y3/0OHxr+PncbO0yYGTOVfDLD8WpK2ybsY7bDW2ruSzJzM6G4s/2g+MwJATgCwoYEuKOrpAwAAADBAFn0AAAAABmiY9Uvboad/T03070mSmigB6+3f03MRazt8qDO2eni8p0O7oPt8vT19VrudE+pkt2/CvhMTPX2OP9rZJ4/2jfVccHvqdHduZybG9PhhjsqPG/PW1+etb+zAeB+e3v49F202J8Yz5uyhboy3/T351fN+vK8vJx4dfx/f91BPJjz8SHfskZ79+voBTQ7o8cMcyQl20sH9PT02exw61H2PPn58fLuv70/fVSeTj+sbu//+7j6f/Wx3rO9PgL4+PJOuvro71tf67dpru2NHj3bHJl/n/v3dv632ZXPfazgnA27krNIHAAAAYICGuZQF7D3O4AIwi5wAYBqVPgAAAAAsk2EuZQEAAABsxoArfYb5qs5V9TRH7muYfKD77apD4w05e5s2X3y4M3b2km6DztOXjDcqO3O4W4h19kB3Xn3z33e6W8N84OHxhpkHjnXnsHKs22B034PdLnGrfY08J/o9dxo7J5o7A8vpfHJiosF/9TVoPtKTE5d29zt1yXhT6NNHenLiYF9OdIf29TQKPfDweHPMgw9257D/vu7YvmMPdcbaSk92TNwYoPXEhObOwMLr6bR8Kt2Gw31/P/Y1aZ5sojzZ/3/a4073vIceOza+/cADG++TJHfd1R3ra8g8OY8rr+zu09fc+SlP6Y5df3137HGPG9/ub/bczb7NNtKGZVBVz0nyU0lWkvxsa+1Hz+d4Fn2AQXBXFgBmkRMATLUglT5VtZLk3yZ5dpI7kry3qm5urX10q8fU0wcAAABg9z0zyW2ttU+01k4leW2S55/PAXd/KQtgO7Se61cA4DFyAoAZVudXE3NlVd2ybvum1tpNo88fn+T2dV+7I8mXnc+TWfQBAAAAmI97W2s3zuvJLPpMU91Vvuq5xq8OjTe0bEe6jZzPHO2OnTrabfZ28ujK+Pal3TNSZw53x1Z7mr1VTx/M/Q+PH//Qse7rufDu7rwuuLv7BPvuW+mMddqnPdptqNbO9kxMc2fOVxt9wE7pyYSsdN8He3PigvEG+e2ivpzoadp8Wff9+MRlG+fE6SPdqa52D5Xq6Xm58uj467zg/u5rvOiSbiZc+Jnu2Mo93cdOfhdXVx/t7NNaz8TkBOdLTrCN+po29zlxojvW1zLk4ovHt++9t7vP8W5v/N5Gy5PH72sAfccd3bHbb++OfepTGz/nBd17wPQ2aH744e5YXyPqiT+tOttJf3PnU2c0d+b8tNb/72UX3JnkCeu2rx2NbZmePgAAAAC7771JnlJVT6qqg0lekOTm8zmgSh9gGJzBBWAWOQHAFItS6dNaO1NVL0vytqzdsv2VrbWPnM8xLfoAAAAALIDW2luSvGW7jmfRBxiEcgYXgBnkBADTLEqlz06w6JP0N20+0POt6elU1i4cHzt7cU8zzp6mzY9e0T3+iSvGG3KevKw7hdOXdhuSrV7Y0xy5p1tTnRoffOT+7k6HL+++xouPdJtxHj7Ynf9Kjc+/t3Xaoz1NO4f6rwsYtOpp5NybE4fHc+HsJZvNie7xOzlxefev2NNHe959L+q+z+470N3v7GROHOs2aD7xme77/8UXX9QZO3JBd/4HJ3Ji32p3/j29ndPO9HT71NwZ2CWbbRC8f3/3d+2+X3sfemjycX3H2tzYZOPjvqbHN9zQHeub1509rWM//vHJvzu6HZo//vFuJvze73Uz4eu+rnv8AxOx0/ca+/Q1fO75cwX2JP8UgGHw9x8As8gJAKYYcqWPu3cBAAAADJBFHwAAAIAB2vDyrqo6lOSdSS4Y7f/61toPVNWTkrw2yRVJ3pfk21prp3Zysttiop9A0t+XoXouIK1D3V4Nq0cuHNs+fbS7z4nLevoyXN6dx4krxuuOT13R7dVz4LKTnbHPO3q8M3bZoW5ThNU2/pz3PNy93vZzV1/aGTt1Sbenw5kLjnTGLpn43q709FtYPdt9Ta2np0NWe/oUwSzK9neNnFg3drjbVODsRE6curTbv+fk0e45mJOXdecx2cOnLycuuLz7/n/NZQ92xq4+/FBnbH+N96m490Q3Jz5xzRWdsfsu6+535tCFnbGjE9/bgz05Uffd3xlrD/dkQpMTnCM5sWuGlhOrPefNT5zo7tfXZ+Z499f2js1eYtLXr2dyHludwzTHjo3n4e23d/Ml+WR35JPdifzyL3/hlubw5CdvbuzUmfH/T5vtxcTetZcv7zqZ5FmttS9NckOS51TVlyf5sST/qrX25CT3J3nJjs0SgEUmJwCYRU4A7JINF33amsfWgw+MPlqSZyV5/Wj81Um+eScmCLCRavP7oEtOAItOTuwuOQEsuscaOc/jY9421dOnqlaq6tYkdyd5e5I/THKstfbYlO9I8vgpj31pVd1SVbecTvfSJACWn5wAYJbtyol77rlnLvMFGIpN3bK9tXY2yQ1VdTTJG5M8dbNP0Fq7KclNSXJJXe78B7AzWrf/CfMjJ4CFJyd21XblxI033igngG035Fu2b2rR5zGttWNV9Y4kX5HkaFXtH63OX5vkzp2Y4DzUSk/B0wXdhsytp0HnmYvH9zt5abfZ58lLu8c/dbT7lKePjjcXW7n0dGefK3qaNn/Bpfd1xp565DOdsWsOHBvbPtG6DZo/ePW1nbF3Xf5nOmP3Hb6kM9b2jTfyvPRMt1navlPd11R9zZ1PTTy2p9knsHgGkRPVfc/edE70NPw/e8l44+ZTl3ajt7eR89HuU56+dPy9cf8l3X6nV1zycGfs8Rc90Bn7kou7/zuedMHdY9sHq/v+/HtXXdMZ+9UrntYZ+/SF3f3avvEcvfzsZZ19Dpzu+Y3rdDc7Vk/KCVhGS5kTk38J7u825O/p7d/7B2TffluZwjSPe9zG+/Q1d/6qr+qO/YW/0B37woney//xP3b/dvjkJ3u6WueOzsg993Tz6md+5kvGts+c6f698vVf3z36td1p5Ej3vjOwJ214eVdVXTVakU9VXZjk2Uk+luQdSb5ltNuLkrxph+YIsLE2pw865ASwFOTErpETwKIbck+fzaw1X5Pk1VW1krVFol9srb25qj6a5LVV9SNJfjfJK3ZwngAsLjkBwCxyAmCXbLjo01r7YJJn9Ix/Iskzd2JSAOfKHVN2j5wAloGc2D1yAlh0Q+7ps6m7dwEAAACwXLbYSmyJ9TTozIFug7Dqa8Z5pDt2+pLxb+Gpi7vHP93teZzTR7qnm9qF4w0zD17QbVx5wUq3qeaBfd2xw/u6zT2/4OB4g84n7n+ws89XH/79ztifO9JtvPafLvyyztjn6qqx7ZXT3e5pl5zsvqZ9p7tzPTvZyLN1XyOMcQaXnbTZnLi42x3z1MXjjz15cfcOQqcu7j7lmcM9OXFo/L1w/4Hue+NKTznDas9di862bl4d3ffI2PbTDt7f2ecvHvpsZ+xLL/yjztjPHvpLnbH37/uCse19pw939rn80W5z530nuk1Ba+J0XBvq6Tm2j5xgi05lvHHzwXRvVrJ/f/c9teeta1OVBBdeuLl5XdZ9u8zBM+Pv472TON69MUw+/KnO0Jc99FB37LlPGtt+9rO7jfx/5Eee3Bl74xt7ukfnAz1j47nzqld9bWePnvso5ClP6Y49eXIah7r/jw7u7/6/ZO8a6q8SKn0AAAAABmjvVfoAw9P0agBgBjkBwAx6+gAAAACwVFT6AMPgDC4As8gJAKYYcqXPnlv0qZWV7tjBboPOdmG3Q9iZi7tjJy8ZP96pngadfc04Vy/oaRo2UXd19my3EOvBE905/NG+ni5uPS7YN95E+ei+Rzv7fNHB7nM+8ZI/6Ixd8QXdBnA/mfFGa/ed/LzOPgeOX9oZO/xwdx77Tpwc2149oZEzMB+bzonD3aaUZ44c7IxNNvg/faSnqfKFPTlxsOcv1ImHnjndneuxR7vzOtu6OXHibPdXgJNtfOxgfayzzzMv6DYFfc7hk52xy699a2fsx/MNY9u3nuh23jz4cM9NAI4f7YzVo+PzaGd7cqL5Kx84f5PNfh850f19ef8m/6o60n2L6/yh2XesS470/O3Q15B5cuwzn+nuc9dd3bGPfKQ7dtttG479+ac+tbPLG37y5Z2xf/rU6zpj/+JfdDMsuXVsq7X3dvZ43ev+H52xr/iK7pEe97jx7b7v68E999cwe5HLuwAAAAAGyNomMAxO6AMwi5wAYIohX96l0gcAAABggFT6AIPgVrwAzCInAJhmyJU+w1/0qfGul7XSLW6qg93Gm2cv6jbCPH2k++06fdH48c8c7k5htXv4pHUbeebU+NxO9Tzw9KPdZqIPPNh90jsPdhsmf/zi8cbKH7ny8Z19nnP0g52xv3jons7Y1x2+ozP28JPeNbb9E49+bWef+49153XwWLfB6MqDE03oTp3u7JNVzZ2BbbDVnDjcbay/5ZzovrX3/oHaTo7P7czp7rweerh7sIdWLuqMfaYnJ37vwvGc+MCV13b2efZVH+2MfeNF3YbPTz/QndtLr/nvY9s/8ucu7uxz3/3XdMYuvKc71wP3PzA+cKLbTDpNTgDnb3Xi4ojNNm3e7H6HD/U0aZ507Fh37N57Nx7ra+Tc97i+/foaRf/u745tnnrHOzq7HPz5n++M/Z/f//2dsae++rs7Yy960SUTI93Muf/+T3bGbr31SZ2xG28c3+5rog17wfAXfQAAAABmGGqlj54+AAAAAAOk0gcYBr0aAJhFTgAwhZ4+Q3Kgp3HChd3+PWePdHsRnLq4Wxh15vB4r4bW9x3t+SVj5URPT58TK2Ob1VY6u1Rfe4K+vg89u927f/xC1rdeekVnn9/+/Os7Y3/1uo93xp536fs7Y19y6Pax7a994u939nnzF/75ztjhz3YbXFz22fHreev4w519mp4+wHaoiff2zebEJduXE9XTzqEvJ1YenciJnrfBOtt9XO9+PUGxunLh2PZHLpzsrZB86PM/vzP235/0Zztjf+fq93TGnnJgvEfcX7/2dzv7/PQXH+2MHbur+/2/6q7x/eqhbu+JdlJOANvv4P7um/apM+dxAcXkX5onTnT36Rvr6/MzuV9fX57TPb0yjx7tjvU99ku+ZGzzM7/1W51dPvPQQ52xw9/zPZ2xv/c1v9oZ2/+a3xjbfuELu38PJb/TGXnzm7s9fb7qq8a3H/e4nkP1/ZW/2WZMsCT8RAPLr7krCwAzyAkAZhhypY+ePgAAAAADpNIHGAZncAGYRU4AMIVKHwAAAACWyvArfSYadNbBboPO1cPdBpGnL+l+a04f7jbHPNvt49nR14yzelYRVyZ6qq309GtbOdk9TbXvVHe/fX1NO1fHH7u60m2MdvLyyztj/+X6L++M/fZTu83Snvv4D45tX3/ovs4+V17/uc7YA3de1Rk78kdHx7ZX7u0+rp3ueeHsXc7gsk02nRMXdXPizIXd9/vVycNtsmlzb05MvO315sSJ7j+G/X3Z0XP8yYbSreeeA6d+v/u9+NAffmFn7OVP6zZ8fu6TPzy2/cWH7+zsc8N1t3fGPvTkp3TGjn5ivMn0gc9c0Nnn7MmTnTH2MDnBFu07s/HvnAc32/x3M82X+5o29zVV7ttvslThUPc9u1ff++WTn9wdm2j4fN2RI51d9r31rZ2xD3dGkjve8Y7O2N/Js8a2b/0nv9HZ51/+yzs6Y5/6VPf4H5+4F80NN3T3OdJz856DfUHN4Kn0AQAAAGCpDL/SBxi8iruyADCdnABgIyp9AAAAAFgaFn0AAAAABmjwl3fVRLPi6mlmdubibvPHU0e6TY7PHurpaDmxbNbXVHmy8WaSrDzarTE+8PDE9iPdJmL7+8ZOdLs27zvZHasz44+dbOycJG1f9zVe1tO08/5PXdMZ+/fPuGxs+6uecltnn+suub8z9r7rj3bGHr52/DmPfvJwZ5/VvoZ2Te32nuV/PVu0qZy4pJsTp3ty4kxPTkw2Q+7LhL7sOPBIX060iX02lxMrj3Trlfed6smJ05M5sblmln058cCnus0933DDl41tf/BLus04P/+iBzpjZ67rNit96Anj/0+uuK37fHnooe6YnNi7/K9ni05lvNnvZns27zvxSHew7/qRyYbMfb/j9o31mZzc4x7X3afvvXGiQfOmPf3pnaFrv7x7E5jP+4Ef6Iy9q+dwr59o7vz97+j5++ufdP8x/9qvdXe7997x7c1+C9mbNHIGAAAAYKkMvtIH2AOaBp0AzCAnAJhBpQ8AAAAAS0WlDzAMzuACMIucAGCKIVf6DH7Rp1bGi5na4W6zydOXHOiOHe5pxtnt2dlpvrlycuMGzUly8KFuc8yDD47/lO1/qNvZc98jpztjdbK7X53q7pcz40072yZ/qi/6o+734sJPX9YZO/aZo2Pb/+NzT+vsc8mTjnXGDl/RbXL30BMuHdu+9LJLuhO7+97uWOs2JgWYZTM5cebIeeTExNvx/hMbN2hOzicnejLhRE+n6N6cGD/+ZnPiwB3d+V91e7ex8pE//ryx7dvvua6zzx/d0G0weuFF3fkfv/bCse3L+nLirs92x+QEcI4O7h9/P17tuViit2nzZIPmpP+vysmxvn2O9DSr7zP52L6u01de2R3rm2ufyYbPfd2Rb7yxM3TwqU/tjD3rZS/rjN18zz1j2/+hZwo/fuylnbHff+1NnbGf//nx7WPHusfq+1YfHPxfyOw1fqSBYXAGF4BZ5AQAUwy50kdPHwAAAIABUukDDMKi3JWlql6Z5JuS3N1ae3rP1786yZuSfHI09IbW2g/PbYIAe5ScAGCaIVf6DH7Rpw4eHNtuF/X09Lm424Rh9WBnKNVtr5D9j4z/BnHwoe5vFBcc6/70HHyg259g5cHxa2nr4Uc7+7QTJ7uT6OnLsNr3E3t2oqfP2Z6+Bqub/I3ovvs7Q5ffd/nY9sHj3V4Ndz/j8s7YqT/bfZ37rh6fx+nP617HvHJb9/9bW9WrgV33qiQ/neTnZuzzW621b5rPdNjIZnLiVE9OnN1kTkz26+nr1XPBA933roP3d9/v9z04/n5Zj3R7MPTlRDvdzZx2ehM50XoyoS8nWs8Lf+DBztAFE9lx3X3dnLjr+KWdsQe/uJtz+y+fyImrDnf3WZETLKRXRU4sl4nfq3svlej73buviUxfj53Jfjp9+0z20pn2nJOP7TtWn0Pd7Osd2+j5kv4+P319hG65pTP0vL/7d8e23/9bv9XZ550/8zOdsb/87nd3xr79Vz84tv2Zz3SnAHvB4Bd9gD1iQc7gttbeWVXX7/Y8AJggJwCYYaiVPnr6AJybK6vqlnUf3VtIbOwrquoDVfXWqvribZ8hALtJTgCwMFT6AMuvZZ5ncO9trXXvRbp570/yxNba8ar6xiS/nOQp2zIzAPrJCQBmGHJPH5U+AHPUWnuwtXZ89Plbkhyoqp4L3QHYi+QEANtp05U+VbWS5JYkd7bWvqmqnpTktUmuSPK+JN/WWut2itxtF1wwtnnm0gs6u5w+3F37atU91GTT5iS54IHx5pWH7us2mzzwuUc6Y/se7I61icbN7WRPM85TPc04z3YbaPY2ae7s1NN4s3e/zZ0aO3PXeHe0i97Vnf8T7/j8ztgfP6vbtPORzx+f28OP6/5/u/Tggc5YX7NS9oZFuSvLRqrqcUk+21prVfXMrC2+37fL09oWey0n0pMTk02bk56c+Fz3W7D/vp6G9g893BlrD49nx+rJnm/n6W4ObWtObDITeg/30EPjA7/78c4+j3+g29x5/4nHdcYefNL49iNXdztrywnWkxO7b1lzYnX/+PvLvuPdRvWdZsxJf5PjzTRf7mva3Hf8vkbLR7o3P9mUzTRtTs/3Ij05scmm0Kt99Qe/+c6xzR+8vpsJueeeztCDH/pQZ+zzf/7Hx6fwD767s89m+1wzfCp91nxHko+t2/6xJP+qtfbkJPcnecl2TgxgGVXVLyT57SRfWFV3VNVLqurbq+rbR7t8S5IPV9UHkvzrJC9ovbdIWkpyAmADckJOAMzTptY2q+raJH8tyT9P8r9XVSV5VpK/M9rl1Ul+MMm/34E5AiyN1trf3uDrP521W/UOipwA2Bw5IScA5mmzBW0/meS7k1w82r4iybHW2mMFUHckeXzfA0d3LHhpkhzK4S1PFGCmoZwDXV4/GTkBLDI5sdt+MtuQE9dd13O5D8B52tOXd1XVNyW5u7X2vq08QWvtptbaja21Gw+k2ycBgOUmJwCYZTtz4qqrrtrm2QEM22Yqfb4yyfNGt4w8lOSSJD+V5GhV7R+tzl+b5M6dm+bW1eHxpmGnLuk2dTzb7f2YlW4P4lx4f7fp5aG7x3fcf+/x7hwe7I61R7pNO1cnGzf3NNncVOPN5LwabW6Xs/ff3x3sGbv29is6Y5/7+vE7kz56RXd98rKLu43qVh/uNj5lb1iWBp0DNaycuLibE6vdod6cOLSpnHios0/6cuLRbtPOTeXEas8/hm1uyLxtVrvzP3vbJztjV993rDN2wdd/4dj2icu6nbXlBOvJiV211Dmx78xEb+ljx7o7nU8j58nmy32NkPuaO/ftNzGP1UObq6DdTH/pJNl34pGNd9pkU+jeJtCTPvWpTR3rkr79br11bPPy/d0G3I+cuaQzdlBz5z1pT1f6tNa+t7V2bWvt+iQvSPIbrbUXJnlH1hrNJcmLkrxpx2YJwMKSEwDMIicAds+53L1r0vdkrQnbbVm7JvcV2zMlgC1oc/rgXMgJYHHIiUUkJ4CFcebMfD7m7ZyK11prv5nkN0effyLJM7d/SgAsKzkBwCxyAmC+XLEILD9nVwGYRU4AMMOQe/oMftGnXXTh2Pbpi7pXtO3r+Z/b14zz8B93my+v3PPA+PM90G3QufpoT9PmU6e7TzrZaHMRmmzOwdl77+uMXfqa8bH9T3pi94HVbdoJcK7aRCPn88mJC+96pDO2cu9448i+nGhyYqa+GwNc/Np3j21fJieAnTLZpLmvUfFmGjRPe+zkWF9z5D59z7mJJsqdxtRJDm72OTfZpHnurr9+47Ge79fh/ZtoJg1LbvCLPsDw1egDAPrICQBmGXKlz/k0cgYAAABgQan0AYZhb1zlAsBWyQkAplDpAwAAAMBSGXylTzuwMra970z3NM/hz/Y04/zj452xfZ/9XGds9cHxhpztVLcxWjvbPf5eab65Xc588tO7PQUWXPknxRZN5sTK6e4P0wUPdN/HD/1xtyFz9eXEQ+N5snriZM8kehpJyolzIifYiJxgy45P/F3QVw5w9Gh3bKtNjycbRydZPXS4M3YmBztjBzOeJ/vSky+bbdo8NHv1dbMpKn0AAAAAWCqWO4FhcAYXgFnkBAAzqPQBAAAAYGkMvtKnTpwe2z58V7eXwv57u/17cm+3L8PZB7v7tTOnJwacRgJYJnVy/LTOhZ/p9lLYf9/D3QfefV9naPV4dz85AbDkjhwZ3+7pudPb06evbKCvr8zEfqf2d/v3TPbqSZKDg/9LDphUVX8zyQ8m+aIkz2yt3bLRY7xVAMPg72gAZpETAEyxRI2cP5zkryf5j5t9gEUfAAAAgAXXWvtYklTVph9j0QdYfs2teAGYQU4AMMOcK32urKr1l2Xd1Fq7aaeezKIPAAAAwHzc21q7cdoXq+rXkjyu50vf11p707k+2fAXffavjG3W6bOdXerhRztjq492G7S1s93HasgJC8I/RbZqZfxGlnWm2yyzNydOdm8MICdggfmnyFZNNm6ebOyc9JYInMrBzlhfQ+bV/Qc33AfYWYvU06e19nXbeTy3bAcAAAAYoOFX+gB7gl4NAMwiJwCYZpEqfWapqv8pyb9JclWS/1pVt7bWvn7WYyz6AAAAACy41tobk7zxXB5j0QcYBmdwAZhFTgAwwzJU+mzF4Bd92sr4/evrdLcxWnv4ke7YqVPdg632NOgEYKm1fePt7fad6r7XywmAPezQofHt48c7u6xe+Xmdsc02ZN6ncTOwgwa/6APsDXo1ADCLnABgmmXp6bMV7t4FAAAAMEAqfYDl16JXAwDTyQkAZlDpAwAAAMBSGXylT1tZGduu0z0NOh99tDt2VjNOWCrO4LJVnYb/cgIGSU6wVZONmycbOyfZd6bb3P9UDnbGDqbnJgD7B/8nGSw8lT4AAAAALBWLPgAAAAADpJYQWHoVt+IFYDo5AcAsLu8CAAAAYKkMv9Lno7eNbbbV7mmedrqnoRqwXJzBZYvaR/9wfLtvHzkBy09OsFVXXrnxPj3NmA9mtW/H858PsO1U+gAAAACwVCw1A4NQzSlcAKaTEwDMotIHAAAAgKUx+EqfdvLkbk8B2GktejWwZfr1wB4gJzgfPf16gGHR0wcAAACApWLZGhiEcgYXgBnkBADTqPQBAAAAYKmo9AGGwRlcAGaREwBMMeRKn00t+lTVp5I8lORskjOttRur6vIkr0tyfZJPJfnW1tr9OzNNABaZnABgFjkBsDvO5fKur2mt3dBau3G0/fIkv95ae0qSXx9tA+yKavP5YCY5ASwsObEQ5ASwkB6r9JnHx7ydT0+f5yd59ejzVyf55vOeDQBDIicAmEVOAOywzfb0aUn+W1W1JP+xtXZTkqtba3eNvv6ZJFf3PbCqXprkpUlyKIfPc7oAUzi7utvkBLDY5MRu25acuO666+YxV2AP2tM9fZJ8VWvtzqr6vCRvr6qPr/9ia62N3sA7Rm/oNyXJJXW5uAUYJjkBwCzbkhM33nijnAA4B5u6vKu1dufov3cneWOSZyb5bFVdkySj/969U5MEYLHJCQBmkRMAu2PDRZ+quqiqLn7s8yR/NcmHk9yc5EWj3V6U5E07NUmAmebUnFODzn5yAlh4cmJXyQlg0Q25kfNmLu+6Oskbq+qx/f9za+1Xq+q9SX6xql6S5NNJvnXnpgnAApMTAMwiJwB2yYaLPq21TyT50p7x+5J87U5MCuCcObu6a+QEsBTkxK6RE8Cie6zSZ4jO55btAAAAACyozd69C2BhVfRRAGA6OQHALCp9AAAAAFgqKn2AYWhO4QIwg5wAYAqVPgAAAAAsFZU+wCDo1QDALHICgFlU+gAAAACwNFT6AMuvjT4AoI+cAGAGPX0AAAAAWCoqfYBBqNXdnsGaqnplkm9Kcndr7ek9X68kP5XkG5M8kuTFrbX3z3eWAHuPnABgGpU+AGzWq5I8Z8bXvyHJU0YfL03y7+cwJwAWx6siJwCYE5U+wDAsSK+G1to7q+r6Gbs8P8nPtdZakndX1dGquqa1dtd8ZgiwR8kJAKZQ6QPAY66sqlvWfbz0HB//+CS3r9u+YzQGwDDICQAWhkofgHNzb2vtxt2eBAALS04AsDAs+gCDUAtStr8JdyZ5wrrta0djAOwgOQHANEO+vGuuiz4P5f57f629/tNJrkxy7zyfe5uZ/+5Z5rkn5t/nidt8vEV3c5KXVdVrk3xZkgf0afhTcmJhLPP8l3nuifn3kRNy4k+8733vu7dWVuTE7lrmuSfmv9vkxJzNddGntXZVklTVLctc9mr+u2eZ556Y/45pWVueXwBV9QtJvjprPR3uSPIDSQ4kSWvtPyR5S9Zuw3tb1m7F+/d3Z6aLSU4shmWe/zLPPTH/HSMnBkNO7L5lnnti/rttkeev0geADbXW/vYGX29J/tGcpgPAgpETAMyTRR9gEJaoVwMAu0BOADDNkHv67NYt22/apefdLua/e5Z57on5w2Yt+8+a+e+eZZ57Yv6wWcv+s7bM81/muSfmv9uWff5Lp9qCXN8MsFVHLntCu+FrvmMuz/U/3vhP3reo1yED0E9OADBL1Y0t+Z05PdvKXHNityp9AAAAANhBevoAS6+iVwMA08kJAGZrSc7u9iR2xNwrfarqOVX1e1V1W1W9fN7Pf66q6pVVdXdVfXjd2OVV9faq+oPRfy/bzTlOU1VPqKp3VNVHq+ojVfUdo/Flmf+hqvqdqvrAaP4/NBp/UlW9Z/Qz9LqqOrjbc52mqlaq6ner6s2j7WWa+6eq6kNVdWtV3TIaW4qfHZabnJgfObH75AScm2XLiERO7CY5sbvkxGKY66JPVa0k+bdJviHJ05L87ap62jznsAWvSvKcibGXJ/n11tpTkvz6aHsRnUnyXa21pyX58iT/aPT9Xpb5n0zyrNbalya5IclzqurLk/xYkn/VWntykvuTvGT3prih70jysXXbyzT3JPma1toN6645Xcyfndbm98GOkhNzJyd2n5yYBzkxCEuaEYmc2E1yYvctR04kWav0mcfHfM270ueZSW5rrX2itXYqyWuTPH/OczgnrbV3JvncxPDzk7x69Pmrk3zzPOe0Wa21u1pr7x99/lDW3iwen+WZf2utHR9tHhh9tCTPSvL60fjCzr+qrk3y15L87Gi7siRzn2EpfnZYanJijuTE7pITcM6WLiMSObGb5MRCWoqfnSGZ96LP45Pcvm77jtHYsrm6tXbX6PPPJLl6NyezGVV1fZJnJHlPlmj+o3LGW5PcneTtSf4wybHW2pnRLov8M/STSb47yepo+4osz9yTtUD8b1X1vqp66WhsYX92qs3ngx0nJ3aJnNgVPxk5MTdyYhCGkhHJAv9bmUZO7IqfjJyYk5ahVvpo5HyeWmutarEjvqqOJPmlJN/ZWntwbYF4zaLPv7V2NskNVXU0yRuTPHV3Z7Q5VfVNSe5urb2vqr56l6ezVV/VWruzqj4vydur6uPrv7joPzuwKJbh34qcmD85ATxmGf6tyIn5kxNsl3kv+tyZ5Anrtq8djS2bz1bVNa21u6rqmqytGi+kqjqQtTfo17TW3jAaXpr5P6a1dqyq3pHkK5Icrar9oxXuRf0Z+sokz6uqb0xyKMklSX4qyzH3JElr7c7Rf++uqjdmraR6cX92xMVQyIk5kxO7Rk7Mm5wYgqFkRLLI/1YmyIldIyfmbnXjXZbQvC/vem+Sp4w6jh9M8oIkN895Dtvh5iQvGn3+oiRv2sW5TDW65vMVST7WWvuJdV9alvlfNVqRT1VdmOTZWbuO+B1JvmW020LOv7X2va21a1tr12ft5/w3WmsvzBLMPUmq6qKquvixz5P81SQfzpL87LDU5MQcyYndIydgS4aSEcmS/FuRE7tHTrBd5lrp01o7U1UvS/K2JCtJXtla+8g853CuquoXknx1kiur6o4kP5DkR5P8YlW9JMmnk3zr7s1wpq9M8m1JPjS6jjVJ/mmWZ/7XJHl1rd2pYV+SX2ytvbmqPprktVX1I0l+N2tBtCy+J8sx96uTvHFUurs/yX9urf1qVb03y/Gzw5KSE3MnJxaPnIApljEjEjmxy+TE7pETC6KaW0sCS+7io9e2P/+XvmMuz/XON3/3+9qf3nISgCUgJwCYpeoZba2Iah4um2tOzPvyLgAAAADmwN27gOXXkqyqWgRgCjkBwEyP3bJ9eFT6AAAAAAyQSh9gGJzABWAWOQHATCp9AAAAAFgSKn2AQShncAGYQU4AMJ2ePgAAAAAsEZU+wDA0p3ABmEFOADDT6m5PYEeo9AEAAAAYIJU+wCDo1QDALHICgOn09AEAAABgiaj0AZZfG30AQB85AcBMy1HpU1X/Mslzk5xK8odJ/n5r7disx6j0AQAAAFh8b0/y9Nban0vy+0m+d6MHqPQBll4lKXdlAWAKOQHAxha/0qe19t/Wbb47ybds9BiVPgAAAADzcWVV3bLu46VbPM7/nOStG+2k0gcAAABgPu5trd047YtV9WtJHtfzpe9rrb1ptM/3JTmT5DUbPZlFH2AYVnd7AgAsNDkBwFSL08i5tfZ1s75eVS9O8k1Jvra1ja9dtugDAAAAsOCq6jlJvjvJX2mtPbKZx1j0AQZBg04AZpETAMy2FCWhP53kgiRvr6okeXdr7dtnPcCiDwAAAMCCa609+VwfY9EHWH5t9AEAfeQEADMtTk+f7eaW7QAAAAADpNIHGICW6NUAwFRyAoCNqPQBAAAAYEmo9AEGoZzABWAGOQHAdHr6AAAAALBEVPoAw6BXAwCzyAkAplLpAwAAAMASUekDLL+W1OpuTwKAhSUnANjQMINCpQ8AAADAAKn0AYZBrwYAZpETAEylpw8AAAAAS0SlDzAMTuACMIucAGAmlT4AAAAALAmLPgAAAAAD5PIuYBBKg04AZpATAEynkTMAAAAAS0SlDzAMzuACMIucAGAmlT4AAAAALAmVPsDya0lWd3sSACwsOQHATMMNCpU+AAAAAAOk0gdYepXmriwATCUnANiYnj4AAAAALAmVPsAwOIMLwCxyAoCpWlT6AAAAALA0VPoAw+AMLgCzyAkAplLpAwAAAMASUekDLL+WZHW3JwHAwpITAGxomEGh0gcAAABggCz6AINQrc3lY1NzqXpOVf1eVd1WVS/v+fqLq+qeqrp19PEPtv0bAsAYOQHAdI/19JnHx3y5vAtgG1XVSpJ/m+TZSe5I8t6qurm19tGJXV/XWnvZ3CcIwK6SEwDMk0ofgO31zCS3tdY+0Vo7leS1SZ6/y3MCYHHICQDmxqIPMAytzecjubKqbln38dKJmTw+ye3rtu8YjU36G1X1wap6fVU9YYe+KwA8Rk4AMJPLuwBI7m2t3Xiex/iVJL/QWjtZVf8wyauTPOv8pwbAApATACwMiz7AAPzJ2dVFcGeS9Wdkrx2N/YnW2n3rNn82yY/PYV4Ae5icAGCWxxo5D4/LuwC213uTPKWqnlRVB5O8IMnN63eoqmvWbT4vycfmOD8AdpecAGBuVPoAy69lYc7gttbOVNXLkrwtyUqSV7bWPlJVP5zkltbazUn+cVU9L8mZJJ9L8uJdmzDAXiAnANjQMCt9LPoAbLPW2luSvGVi7J+t+/x7k3zvvOcFwGKQEwDMi0UfYBhWd3sCACw0OQHAVC1DDQo9fQAAAAAGSKUPMAi1IL0aAFhMcgKA6dy9CwAAAIAlotIHGAZncAGYRU4AMJNKHwAAAACWhEofYPm1JKvO4AIwhZwAYCY9fQAAAABYIip9gAFoejUAMIOcAGAjKn0AAAAAWBIWfQAAAAAGyOVdwDAo2wdgFjkBwFQtyepuT2JHqPQBAAAAGCCVPsAwOIMLwCxyAoCZNHIGAAAAYEmo9AGWX0uy6gwuAFPICQBmalHpAwAAAMDSUOkDDEBL2jC77QOwHeQEALOo9AEAAABgiaj0AYbBXVkAmEVOADCTSh8AAAAAloRKH2D5uSsLALPICQBm0tMHAAAAgCWi0gcYBr0aAJhFTgAw0zDv8qjSBwAAAGCAVPoAw+AMLgCzyAkAptLTBwAAAIAlYtEHAAAAYIBc3gUMQFO2D8AMcgKAjbi8CwAAAIAlodIHWH4tyeowb7EIwDaQEwDMpJEzAAAAAEtEpQ8wDHo1ADCLnABgpmFWhKr0AQAAABgglT7AMDiDC8AscgKAqZajp09V/X+SPD9rZUl3J3lxa+2PZz1GpQ8AAADA4vuXrbU/11q7Icmbk/yzjR6g0gcYgJasOoMLwDRyAoBZlqPSp7X24LrNi7I28Zks+gAAAADMx5VVdcu67Ztaazdt9sFV9c+T/L0kDyT5mo32t+gDLL+WtDbMbvsAbAM5AcCG5lbpc29r7cZpX6yqX0vyuJ4vfV9r7U2tte9L8n1V9b1JXpbkB2Y9mUUfAAAAgAXQWvu6Te76miRviUUfYE/QqwGAWeQEAFMtR0+fqnpKa+0PRpvPT/LxjR5j0QcAAABg8f1oVX1h1m7Z/ukk377RAyz6AMPQnMEFYAY5AcBMi9/7rbX2N871Mft2YiIAAAAA7C6LPgAAAAAD5PIuYPm1lqwufjkmALtETgAw03I0ct4KlT4AAAAAA6TSBxgGDToBmEVOADCTSh8AAAAAloRKH2AQml4NAMwgJwCYTk8fAAAAAJaISh9gAJpeDQDMICcAmEWlDwAAAABLRKUPsPxaklVncAGYQk4AsCGVPgAAAAAsCZU+wDA0d2UBYAY5AcBULckwc0KlDwAAAMAAqfQBll5L0vRqAGAKOQHAxvT0AQAAAGBJqPQBll9rejUAMJ2cAGCmFpU+AAAAACwNiz4AAAAAA+TyLmAQNOgEYBY5AcB0Lu8CYJOq6jlV9XtVdVtVvbzn6xdU1etGX39PVV2/C9MEYJfICQDmRaUPMAwL0qCzqlaS/Nskz05yR5L3VtXNrbWPrtvtJUnub609uapekOTHkvyt+c8WYA+REwDMtBg5sd1U+gBsr2cmua219onW2qkkr03y/Il9np/k1aPPX5/ka6uq5jhHAHaPnABgblT6AEvvodz/tl9rr79yTk93qKpuWbd9U2vtpnXbj09y+7rtO5J82cQx/mSf1tqZqnogyRVJ7t2B+QLseXICgNkeeFvyK/PKibm+l1v0AZZea+05uz0HABaXnABgliHnhMu7ALbXnUmesG772tFY7z5VtT/JpUnum8vsANhtcgKAubHoA7C93pvkKVX1pKo6mOQFSW6e2OfmJC8aff4tSX6jteZewgB7g5wAYG5c3gWwjUa9F16W5G1JVpK8srX2kar64SS3tNZuTvKKJP+pqm5L8rms/cIPwB4gJwCYp3LSAAAAAGB4XN4FAAAAMEAWfQAAAAAGyKIPAAAAwABZ9AEAAAAYIIs+AAAAAANk0QcAAABggCz6AAAAAAzQ/x9GPrNRIKb4RAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Keta_tomoatt, Keta_fort, 'p', 21, contour=False)\n", + "plot_slice(Keta_tomoatt, Keta_fort, 't', 21, contour=False)\n", + "plot_slice(Keta_tomoatt, Keta_fort, 'r', 21, contour=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Kxi_tomoatt, Kxi_fort, 'p', 21, contour=False)\n", + "plot_slice(Kxi_tomoatt, Kxi_fort, 't', 21, contour=False)\n", + "plot_slice(Kxi_tomoatt, Kxi_fort, 'r', 21, contour=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Ks_tomoatt, Keta_fort, 'p', 15, contour=False)\n", + "plot_slice(Ks_tomoatt, Keta_fort, 't', 15, contour=False)\n", + "plot_slice(Ks_tomoatt, Keta_fort, 'r', 25, contour=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2_one_src/fortran_code/Readme.txt b/test/old_tests/inversion_2_one_src/fortran_code/Readme.txt new file mode 100644 index 0000000..3a91b6b --- /dev/null +++ b/test/old_tests/inversion_2_one_src/fortran_code/Readme.txt @@ -0,0 +1,3 @@ +mpif90 ega5_sphe_3d_inversion_Tong_3Dinv.f90 -o a5.out + +mpirun -n 4 a5.out \ No newline at end of file diff --git a/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/EARTHQUAKES.txt b/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/EARTHQUAKES.txt new file mode 100644 index 0000000..9437b06 --- /dev/null +++ b/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/EARTHQUAKES.txt @@ -0,0 +1,2 @@ +1 + 12.902894 37.503373 16.794572 diff --git a/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/STATIONS.txt b/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/STATIONS.txt new file mode 100644 index 0000000..933c4f4 --- /dev/null +++ b/test/old_tests/inversion_2_one_src/fortran_code/ega5/input/STATIONS.txt @@ -0,0 +1,2 @@ +1 +0.0 36.472809 29.812050 diff --git a/test/old_tests/inversion_2_one_src/fortran_code/ega5_sphe_3d_kernel.f90 b/test/old_tests/inversion_2_one_src/fortran_code/ega5_sphe_3d_kernel.f90 new file mode 100644 index 0000000..ad8dfaa --- /dev/null +++ b/test/old_tests/inversion_2_one_src/fortran_code/ega5_sphe_3d_kernel.f90 @@ -0,0 +1,737 @@ +include "eikon_solver_mpi.f90" + + +! example: 3-D 3rd order anisotropic eikonal equation in cartesian coordinate (Point source) +! parameter setting: +! domain: R * Theta * Phi = [6275, 6375] * [49^\circ, 51^\circ] * [129^\circ, 131^\circ] +! analytic solution: T = |x-x_s|/c0 +! isotropic eik equ: Tx^2 + Ty^2 + Tz^2 = s^2, +! boundary condition: T(x0,y0,z0) = 0 (point source) +! test function: 'FSM_WENO3_PS_sphe_3d' in "eikon_solver.f90" +! + +program eikonal_2d + use mpi + +! ######################### 参数声明 parameters statement ######################### + + implicit none + + ! mesh grid + integer,parameter :: nr=55,nt=55,np=55 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: rr1=6070,rr2=6400 + double precision,parameter :: tt1=(30.0-1.5)/180*pi,tt2=(50.0+1.5)/180*pi + double precision,parameter :: pp1=(15.0-1.5)/180*pi,pp2=(40.0+1.5)/180*pi + double precision :: rr(nr),tt(nt),pp(np),dr,dt,dp + + + ! source (STATIONS) & receiver (EARTHQUAKES) + integer :: nsou + double precision,allocatable :: rsou(:),tsou(:),psou(:) ! source (station) + integer :: nrec + double precision,allocatable :: rrec(:),trec(:),prec(:) ! receiver (earthquake) + + ! model parameter + double precision,parameter :: gamma = 0.0 + double precision :: xi(nr,nt,np),eta(nr,nt,np),zeta(nr,nt,np) ! syn model (ani) + double precision :: xiT(nr,nt,np),etaT(nr,nt,np),zetaT(nr,nt,np) ! true model (ani) + double precision :: sigma1,sigma2,psi + double precision,parameter :: slow_p=0.04,ani_p=0.03 + + ! Eikonal solver + double precision :: aT(nr,nt,np),bT(nr,nt,np),cT(nr,nt,np),fT(nr,nt,np),funT(nr,nt,np) ! true model 真实模型 + double precision :: a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np),fun(nr,nt,np) ! syn model 猜测模型 + double precision :: uT(nr,nt,np),TableT(nr,nt,np) !true timetable 真实走时场 + double precision :: u(nr,nt,np),Table(nr,nt,np) !syn timetable 猜测走时场 + !double precision :: T0para(8),tau(nr,nt,np) ! multiplicative factor + + ! adjoint source + double precision,allocatable :: sourceADJ(:),TtimeT(:,:),Ttime(:,:) ! adjoint source 伴随源,真实走时,合成走时 + double precision :: TableADJ(nr,nt,np) ! adjoint field 伴随场 + double precision :: Ks(nr,nt,np),Kxi(nr,nt,np),Keta(nr,nt,np) ! event kernel + integer,parameter :: nk = 3 ! number of kernels + double precision :: all_Ks(nr,nt,np),all_Kxi(nr,nt,np),all_Keta(nr,nt,np) ! sensitivity kernel + double precision :: all_Kernel(nr,nt,np,nk) ! kernels for all parameters together + !double precision,parameter :: radius = 40 ! kernel mask radius + + ! inversion grid + integer,parameter :: ninvr=11,ninvt=10,ninvp=10 ! inversion grid size (coarse) + double precision,parameter :: invr1=6070.0,invr2=6400.0 + double precision,parameter :: invt1=30.0/180*pi,invt2=50.0/180*pi + double precision,parameter :: invp1=15.0/180*pi,invp2=40.0/180*pi + integer,parameter :: ngrid=5 ! number of nultigrid (multigrid technique) + double precision :: invr(ngrid,ninvr),invt(ngrid,ninvt),invp(ngrid,ninvp),dinvr,dinvt,dinvp + double precision :: update_value(nr,nt,np,nk) ! parameter update value 更新参数的变化量 + + ! model update (optimization) + double precision :: stepsize ! stepsize + integer,parameter :: MaxIter=1 ! max iteration step + double precision :: old_obj, obj, sou_obj ! 优化目标函数 objective function + double precision,allocatable :: weight_sou(:),weight_rec(:) !weight function + double precision :: dis_ij, dis_zero !weight function + logical :: weight_sou_bool=.false. , weight_rec_bool= .false. + + ! temp var + double precision :: depth,lat,lon + + ! output file + character(Len=80) :: filename,form,form2 + + ! loop index + integer :: iir,iit,iip,idi,idj,idk,i,j,k,iter,igrid + + ! computing time + double precision :: time_begin,time_end,alpha + + ! mpi parameter + integer :: ierr,myid,nproc + + ! ############################# main work ############################# + + call mpi_init(ierr) + + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + call CPU_TIME(time_begin) ! program start + + + +! ################### read sources and receivers 读取地震台站数据 ################### + open(10,file='ega5/input/STATIONS.txt') + read(10,*) nsou + allocate(rsou(nsou),tsou(nsou),psou(nsou),weight_sou(nsou)) + do i=1,nsou + read(10,*) depth,lat,lon + rsou(i) = 6371.0-depth + tsou(i) = lat/180.0*pi + psou(i) = lon/180.0*pi + end do + close(10) + + open(10,file='ega5/input/EARTHQUAKES.txt') + read(10,*) nrec + allocate(rrec(nrec),trec(nrec),prec(nrec),weight_rec(nrec)) + do i=1,nrec + read(10,*) depth,lat,lon + rrec(i) = 6371.0-depth + trec(i) = lat/180.0*pi + prec(i) = lon/180.0*pi + end do + close(10) + + ! distance based weight -rec 台站权重 + if (weight_rec_bool) then + dis_zero = 0 + do i=1,nrec-1 + do j=i,nrec + call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij) + dis_zero = dis_zero + dis_ij + end do + end do + dis_zero = dis_zero/nrec/(nrec-1)*2 + dis_zero = dis_zero/2 + + do i=1,nrec + weight_rec(i)=0.0 + do j=1,nrec + call Epicenter_Distance(trec(i),prec(i),trec(j),prec(j),dis_ij) + weight_rec(i) = weight_rec(i) + exp(-(dis_ij/dis_zero)**2) + end do + weight_rec(i) = 1.0/weight_rec(i) + end do + print *, dis_zero + end if + + if (weight_rec_bool) then + ! distance based weight - soruce 地震权重 + dis_zero = 0 + do i=1,nsou-1 + do j=i,nsou + call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij) + dis_zero = dis_zero + dis_ij + end do + end do + dis_zero = dis_zero/nsou/(nsou-1)*2 + dis_zero = dis_zero/4 + + do i=1,nsou + weight_sou(i)=0.0 + do j=1,nsou + call Epicenter_Distance(tsou(i),psou(i),tsou(j),psou(j),dis_ij) + weight_sou(i) = weight_sou(i) + exp(-(dis_ij/dis_zero)**2) + end do + weight_sou(i) = 1.0/weight_sou(i) + end do + print *, dis_zero + end if + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (myid .eq. 0) then + open(100,file='ega5/output/STATIONS') + open(101,file='ega5/output/EARTHQUAKES') + do i=1,nsou + write(100,'(f13.7,f13.7,f13.7,f13.7)') rsou(i),tsou(i),psou(i),weight_sou(i) + end do + do i=1,nrec + write(101,'(f13.7,f13.7,f13.7,f13.7)') rrec(i),trec(i),prec(i),weight_rec(i) + end do + close(100);close(101) + end if + +! ######################### 生成网格 build mesh grid ##################################### + ! -------- forward modeling grid ---------- + dr=(rr2-rr1)/(nr-1); dt=(tt2-tt1)/(nt-1); dp=(pp2-pp1)/(np-1) + do iir=1,nr + rr(iir)=rr1+(iir-1)*dr + end do + do iit=1,nt + tt(iit)=tt1+(iit-1)*dt + end do + do iip=1,np + pp(iip)=pp1+(iip-1)*dp + end do + + ! -------- inversion multigrid ---------- + dinvr=(invr2-invr1)/(ninvr-1); dinvt=(invt2-invt1)/(ninvt-1); dinvp=(invp2-invp1)/(ninvp-1) + do igrid=1,ngrid + do iir=1,ninvr + invr(igrid,iir)=invr1+(iir-1)*dinvr-(igrid-1)*dinvr/ngrid + end do + do iit=1,ninvt + invt(igrid,iit)=invt1+(iit-1)*dinvt-(igrid-1)*dinvt/ngrid + end do + do iip=1,ninvp + invp(igrid,iip)=invp1+(iip-1)*dinvp-(igrid-1)*dinvp/ngrid + end do + end do + +! ######################### 构建背景模型 build the synthetic and true model ##################################### + + do iir=1,nr + do iit=1,nt + do iip=1,np + + ! synthetic (initial) model + eta(iir,iit,iip)=0.0; + xi(iir,iit,iip)=0.0; + zeta(iir,iit,iip)=gamma*sqrt(eta(iir,iit,iip)**2+xi(iir,iit,iip)**2) + ! if (rr(iir)>6351) then ! 6371 - 6351 20 km + ! fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + ! elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + ! elseif (rr(iir)>6251) then ! 6336 - 6251 85 km + ! fun(iir,iit,iip) = 1.0/(8.04+(6336-rr(iir))/85.0*0.01) + ! elseif (rr(iir)>6161) then ! 6251 - 6161 90 km + ! fun(iir,iit,iip) = 1.0/(8.05+(6251-rr(iir))/90.0*0.25) + ! elseif (rr(iir)>5961) then ! 6161 - 5961 200 km + ! fun(iir,iit,iip) = 1.0/(8.30+(6161-rr(iir))/200.0*0.73) + ! else + ! fun(iir,iit,iip) = 1.0/9.03 + ! end if + + if (rr(iir)>6351) then ! 6371 - 6351 20 km + fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + elseif (rr(iir)>5961) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1) + else + fun(iir,iit,iip) = 1.0/9.0 + end if + + + !read(100,*) xi(iir,iit,iip) + !read(101,*) eta(iir,iit,iip) + !read(102,*) fun(iir,iit,iip) + + a(iir,iit,iip)=1.0+2*zeta(iir,iit,iip); + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + + Table(iir,iit,iip) = 0 + + + + ! true (target) model + if (tt(iit)>=30.0/180*pi .and. tt(iit)<=50.0/180*pi .and. & + & pp(iip)>=15.0/180*pi .and. pp(iip)<=40.0/180*pi .and. & + & rr(iir)>=6211.0 .and. rr(iir)<=6371.0 ) then + sigma1 = sin(4*pi*(tt(iit)-30.0/180*pi)/(20.0/180*pi))* & + & sin(4*pi*(pp(iip)-15.0/180*pi)/(25.0/180*pi))* & + & sin(2*pi*(rr(iir)-6211)/160.0) + else + sigma1 = 0.0 + end if + + + if (sigma1<0) then + psi = 60.0/180*pi + elseif (sigma1 > 0) then + psi = 150.0/180*pi + else + psi = 0 + end if + + etaT(iir,iit,iip)=ani_p*abs(sigma1)*sin(2*psi); + xiT(iir,iit,iip)=ani_p*abs(sigma1)*cos(2*psi); + zetaT(iir,iit,iip)=gamma*sqrt(etaT(iir,iit,iip)**2+xiT(iir,iit,iip)**2) + + aT(iir,iit,iip)=1.0+2*zetaT(iir,iit,iip); + bT(iir,iit,iip)=1.0-2*xiT(iir,iit,iip); + cT(iir,iit,iip)=1.0+2*xiT(iir,iit,iip); + fT(iir,iit,iip)=-2*etaT(iir,iit,iip); + funT(iir,iit,iip) = fun(iir,iit,iip)/(1+sigma1*slow_p) + + !fun(iir,iit,iip) = funT(iir,iit,iip) + !eta(iir,iit,iip)=etaT(iir,iit,iip); + !xi(iir,iit,iip)=xiT(iir,iit,iip); + !zeta(iir,iit,iip)=zetaT(iir,iit,iip) + !a(iir,iit,iip)=aT(iir,iit,iip) + !b(iir,iit,iip)=bT(iir,iit,iip) + !c(iir,iit,iip)=cT(iir,iit,iip) + !f(iir,iit,iip)=fT(iir,iit,iip) + + TableT(iir,iit,iip) = 0 + u(iir,iit,iip) = 0 + + end do + end do + end do + + + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (myid==0) then + open(100,file='ega5/output/model_true') + open(101,file='ega5/output/model_init') + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & funT(iir,iit,iip),xiT(iir,iit,iip),etaT(iir,iit,iip) + write(101,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100);close(101) + + ! --------- 多重网格 multiple grid ------ + do igrid=1,Ngrid + select case(igrid) + case (1:9) + write(form,'(I1)') igrid + case (10:99) + write(form,'(I2)') igrid + end select + open(100,file='ega5/output/multigrid'//trim(form)) + + do iir=1,ninvr + do iit=1,ninvt + do iip=1,ninvp + write(100,'(f13.7,f13.7,f13.7)') & + & invr(igrid,iir),invt(igrid,iit),invp(igrid,iip) + end do + end do + end do + close(100) + end do + + end if + + +! ######################### 计算真实到时 calculate true traveltimes ###################### + call mpi_barrier(mpi_comm_world,ierr) + allocate(TtimeT(nsou,nrec)) ! 初始化真实到时表 initiate true traveltimes + allocate(Ttime(nsou,nrec)) ! 初始化合成到时表 initiate syn traveltimes + allocate(sourceADJ(nrec)) ! 初始化伴随源 initiate adjoint source + + if (myid==0) then + print *, ' ' + print *, '----------------- calculating true timetable ... ----------------' + print *, ' ' + end if + + do i=1,nsou ! loop sources (STATIONS) + ! -------- 求解程函方程 solve eikonal equations ------------ + call mpi_barrier(mpi_comm_world,ierr) + !rsou(i)=6371.0; tsou(i)=30.5/180.0*pi; psou(i)=15.5/180.0*pi + call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rsou(i),tsou(i),psou(i),u) + call mpi_barrier(mpi_comm_world,ierr) + ! -------- 得到真实走时 calculate true arrival time at receiver -------- + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rrec,trec,prec,TtimeT(i,:),nrec) + !if ((myid.eq.0) .and. 1>0) then + ! print *, rsou(i),tsou(i)/pi*180,psou(i)/pi*180 + ! open(100,file='ega5/output/arrivaltime') + ! do j=1,nrec + ! write(100,'(i5.3,f8.2,f6.2,f6.2,f8.3)') j, rrec(j),trec(j)/pi*180,prec(j)/pi*180,TtimeT(i,j) + ! end do + ! close(100) + !end if + end do + + print *, '----------------- calculating true timetable over ---------------- ' + +! ######################## 反演开始 inversion start ########################## + + ! ----- 初始化反演参数 initiate inversion parameters ---- + stepsize = 0.01 ! 迭代步长 stepsize + old_obj = 0; obj = 0 ! 目标函数 objective function + + + + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- inversion start ... ----------------' + print *, ' ' + end if + + + + do iter = 1,MaxIter + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- iteration ',iter,' starting ... ----------------' + end if + + ! ----- 初始化参数 initiate parameters ------ + all_Ks = 0; all_Kxi = 0; all_Keta = 0; + obj = 0; + + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/misfit_step'//trim(form) + open(998, file=trim(filename)) + end if + + + do i=1,nsou ! loop sources (STATIONS) + +! ######################## 计算合成走时场 calculate synthetic timetable ######################## + if (myid .eq. 0) then + print *, '----------------- calculating synthetic timetable ... ----------------' + end if + + Table = 20 + call mpi_barrier(mpi_comm_world,ierr) + call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,a,b,c,f,Table,fun,rsou(i),tsou(i),psou(i),u) + call mpi_barrier(mpi_comm_world,ierr) + ! -------- 得到合成走时 calculate synthetic arrival time at receiver -------- + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rrec,trec,prec,Ttime(i,:),nrec) + + ! -------- 构造伴随源 build adjoint source ------- + call Adjoint_Source_Dt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! absolute traveltime difference + if (myid .eq. 0) then + do j=1,nrec + write(998,'(f10.5)') Ttime(i,j)-TtimeT(i,j) + end do + end if + + ! weighting adjoint source + if (weight_rec_bool) then + do j=1,nrec + sourceADJ(j) = sourceADJ(j) * weight_rec(j) + end do + end if + + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/syn_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7)') Table(iir,iit,iip) + end do + end do + end do + close(100) + end if +! + + !print *, Ttime(i,:),TtimeT(i,:) + !call Adjoint_Source_Ddt(Ttime(i,:),TtimeT(i,:),nrec,sourceADJ,sou_obj) ! double difference traveltime + !do j=1,nrec-1 + ! do k=j,nrec + ! write(998,'(f10.5)') (Ttime(i,j)-Ttime(i,k))-(TtimeT(i,j)-TtimeT(i,k)) + ! end do + !end do + +! ######################## 计算伴随场 adjoint field ######################## + if (myid .eq. 0) then + ! print *, '----------------- calculating adjoint field ... ----------------' + end if + call FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ) + !call FSM_O1_Adj_PS_sphe_3d(rr,tt,pp,nr,nt,np,T0para,tau,TableADJ,zeta,xi,eta,nrec,rrec,trec,prec,sourceADJ) + ! ---- 记录到 matlab 数据中 matlab record (adjoint field) ---- + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/adj_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7)') TableADJ(iir,iit,iip) + end do + end do + end do + close(100) + end if +! ######################## 计算敏感核 sensitivity kernel ######################## + !print *, '----------------- calculating kernel ... ----------------' + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! ------- 抹去伴随源处的大函数值 mask the source ------- + !print *, '----------------- kernel mask ----------------' + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i),radius) + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i),radius) + !call Kernel_Mask(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i),radius) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Ks,rsou(i),tsou(i),psou(i)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Kxi,rsou(i),tsou(i),psou(i)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Keta,rsou(i),tsou(i),psou(i)) + + ! ---- 记录到 matlab 数据中 matlab record (adjoint field) ---- + if (1<0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename='ega5/output/kernel_step'//trim(form)//'_event'//trim(form2) + open(100,file=trim(filename)) + + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & Ks(iir,iit,iip),Kxi(iir,iit,iip),Keta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + if (weight_sou_bool) then ! no weight + all_Ks = all_Ks + Ks * weight_sou(i); + all_Kxi = all_Kxi + Kxi * weight_sou(i); + all_Keta = all_Keta + Keta * weight_sou(i); + obj = obj + sou_obj !* weight_sou(i) + else ! source weighted + all_Ks = all_Ks + Ks; + all_Kxi = all_Kxi + Kxi; + all_Keta = all_Keta + Keta; + obj = obj + sou_obj + end if + + end do + + close(998) + + ! ---- 记录到 matlab 数据中 matlab record (kernel) ---- + if (1>0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/kernel_step'//trim(form)//'_sum' + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & all_Ks(iir,iit,iip),all_Kxi(iir,iit,iip),all_Keta(iir,iit,iip) + end do + end do + end do + close(100) + end if +! ##################### 模型更新 model update #################### + print *, '----------------- model updating ... ----------------' + + all_Kernel(:,:,:,1) = all_Ks; + all_Kernel(:,:,:,2) = all_Kxi; + all_Kernel(:,:,:,3) = all_Keta; + + ! ------------ 更新速度(慢度) update velocity (slowness) ------------ + call Parameter_Update_Multigrid(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + + if (1<0 .and. myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/model_update_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & -fun(iir,iit,iip)*update_value(iir,iit,iip,1), & + & -update_value(iir,iit,iip,2),-update_value(iir,iit,iip,3) + end do + end do + end do + close(100) + end if + + do iir=1,nr + do iit=1,nt + do iip=1,np + fun(iir,iit,iip) = fun(iir,iit,iip)*(1-update_value(iir,iit,iip,1)) + !fun(iir,iit,iip) = fun(iir,iit,iip) + end do + end do + end do + + ! ------------ 更新xi update xi ------------ + do iir=1,nr + do iit=1,nt + do iip=1,np + xi(iir,iit,iip) = xi(iir,iit,iip)-update_value(iir,iit,iip,2) + end do + end do + end do + + ! ------------ 更新eta update eta ------------ + do iir=1,nr + do iit=1,nt + do iip=1,np + eta(iir,iit,iip) = eta(iir,iit,iip)-update_value(iir,iit,iip,3) + end do + end do + end do + + ! ----------- 更新 update eikonal solver paramater ----------------- + do iir=1,nr + do iit=1,nt + do iip=1,np + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + end do + end do + end do + + + + +! ##################### 调整下降步长 modify stepsize ############# + if (myid .eq. 0) then + print *, ' ' + end if + + if (1>0 .and. (myid .eq. 0)) then + open(999,file='ega5/output/obj',access='append') + write(999,'(f9.2,f9.6)') obj, stepsize + close(999) + end if + + if (iter == 1 ) then + if (myid .eq. 0) then + write(*,'(a,f9.2)') 'iter 1, obj is', obj + write(*,'(a,f9.6)') 'iter 1, stepsize is', stepsize + end if + elseif (iter >= 2 .and. obj < old_obj) then + !stepsize = min(0.01,stepsize*1.2) + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function decreases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + elseif (iter >= 2 .and. obj >= old_obj) then + !stepsize = max(0.002,stepsize*0.5) + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function increases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + end if + + print *, '----------------- iteration ',iter,' over ----------------' + print *, ' ' + print *, ' ' + + + old_obj = obj + + ! ---- 记录到 matlab 数据中 matlab record ---- + if (1>0 .and. (myid .eq. 0)) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + end select + filename='ega5/output/model_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & rr(iir),tt(iit),pp(iip), & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + + if (myid .eq. 0) then + call CPU_TIME(time_end) + write(*,'(f10.2)') time_end - time_begin + end if + + end do + + + call mpi_finalize(ierr) + +end program eikonal_2d + diff --git a/test/old_tests/inversion_2_one_src/fortran_code/eikon_solver_mpi.f90 b/test/old_tests/inversion_2_one_src/fortran_code/eikon_solver_mpi.f90 new file mode 100644 index 0000000..1622bb4 --- /dev/null +++ b/test/old_tests/inversion_2_one_src/fortran_code/eikon_solver_mpi.f90 @@ -0,0 +1,2838 @@ +! 3-D third order LF scheme (point source, sphere, 2nd order accuracy, parallel) (verified by ega1) +subroutine FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,r0,t0,p0,u) + + use mpi + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: r1,r2,r3,a0,b0,c0,d0,f0,T0v(nr,nt,np),T0r(nr,nt,np),T0t(nr,nt,np),T0p(nr,nt,np) + double precision :: tau(nr,nt,np),tau_old(nr,nt,np),r0,t0,p0 + integer :: idr0,idt0,idp0 + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision :: t1,p1 + double precision,parameter :: tol = (10.0)**(-4),eps=10.0**(-12) + integer,parameter :: MaxIter=1000 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: x0,y0,z0,x,y,z,xst,yst,zst,e11,e12,e13,e21,e22,e23,e31,e32,e33 + double precision :: xstr,xstt,xstp,ystr,ystt,ystp,zstr,zstt,zstp + integer :: ileft,iright,jleft,jright,ii,jj,kk + logical :: isexit + + integer :: ierr,myid,nproc,tag,istat(mpi_status_size),iproc,ptid(nr,np,nt) + integer :: mpi_ptijk(3,np*nt),mpi_ptn,ipt,int_temp,my_npt + double precision :: mpi_ptv(np*nt),dp_temp + + integer :: ptr1,ptr2,iNumber,total_ptn,Nptn,sNptn,tpNptn + double precision :: ave_ni + integer,allocatable :: proc_irange(:,:,:) + + + isexit = .false. + tag=99 + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); idp0=floor((p0-pp(1))/dp+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); r3 = min(1.0,(p0-pp(idp0))/dp); + + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + a0=(1-r1)*(1-r2)*(1-r3)*a(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*a(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*a(idr0,idt0+1,idp0)+(1-r1)*r2*r3*a(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*a(idr0+1,idt0,idp0)+r1*(1-r2)*r3*a(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*a(idr0+1,idt0+1,idp0)+r1*r2*r3*a(idr0+1,idt0+1,idp0+1) + + b0=(1-r1)*(1-r2)*(1-r3)*b(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*b(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*b(idr0,idt0+1,idp0)+(1-r1)*r2*r3*b(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*b(idr0+1,idt0,idp0)+r1*(1-r2)*r3*b(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*b(idr0+1,idt0+1,idp0)+r1*r2*r3*b(idr0+1,idt0+1,idp0+1) + + c0=(1-r1)*(1-r2)*(1-r3)*c(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*c(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*c(idr0,idt0+1,idp0)+(1-r1)*r2*r3*c(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*c(idr0+1,idt0,idp0)+r1*(1-r2)*r3*c(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*c(idr0+1,idt0+1,idp0)+r1*r2*r3*c(idr0+1,idt0+1,idp0+1) + + f0=(1-r1)*(1-r2)*(1-r3)*f(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*f(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*f(idr0,idt0+1,idp0)+(1-r1)*r2*r3*f(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*f(idr0+1,idt0,idp0)+r1*(1-r2)*r3*f(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*f(idr0+1,idt0+1,idp0)+r1*r2*r3*f(idr0+1,idt0+1,idp0+1) + !d0=-d0 + + fun0=(1-r1)*(1-r2)*(1-r3)*fun(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*fun(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*fun(idr0,idt0+1,idp0)+(1-r1)*r2*r3*fun(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*fun(idr0+1,idt0,idp0)+r1*(1-r2)*r3*fun(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*fun(idr0+1,idt0+1,idp0)+r1*r2*r3*fun(idr0+1,idt0+1,idp0+1) + + + + ! 构造T0 + do iir=1,nr + do iit=1,nt + do iip=1,np + r1 = rr(iir) + t1 = tt(iit) + p1 = pp(iip) + + T0v(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + ischange(iir,iit,iip)=1 + if ( T0v(iir,iit,iip)==0 ) then + T0r(iir,iit,iip) = 0 + T0t(iir,iit,iip) = 0 + T0p(iir,iit,iip) = 0 + else + T0r(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v(iir,iit,iip) + T0t(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v(iir,iit,iip) + T0p(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v(iir,iit,iip) + end if + + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2 .and. abs((pp(iip)-p0)/dp)<= 2) then + tau(iir,iit,iip) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + !tau(iir,iit,iip) = u(iir,iit,iip) - T0v(iir,iit,iip) + ischange(iir,iit,iip)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt .or. iip==1 .or. iip==np) then + write(*,*) 'source on the boundary, mesh error' + print *, rr(iir),t0*180/3.1415927,iit,p0*180/3.1415927,iip + ! pause + end if + !write(*,*) iir-idr0,iit-idt0,iip-idp0,u(iir,iit,iip),T0v(iir,iit,iip),u(iir,iit,iip)-T0v(iir,iit,iip) + else + !tau(iir,iit,iip) = T(iir,iit,iip)/T0v(iir,iit,iip) + tau(iir,iit,iip) = 1 + ischange(iir,iit,iip)=1 + end if + end do + end do + end do + + + L1_err=0; Linf_err=0 + do iir=1,nr + do iit=1,nt + do iip=1,np + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)-u(iir,iit,iip))) + if(isnan(L1_err)) then + print *, u(iir,iit,iip),T0v(iir,iit,iip) + pause + end if + end do + end do + end do + L1_err = L1_err/(nr*np*nt) + !if (myid .eq. 0) then + ! write(*,*) 'T0 L1 error is ',L1_err,', T0 Linf error is', Linf_err + !end if + + allocate(proc_irange(2,nproc,nr+nt+np-3-6+1)) + + ! 给每个线程分配计算点 + Nptn=0 + sNptn=0 + + do level = 6,nr+nt+np-3 + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + iNumber = iright - ileft + 1 + + total_ptn = 0 + do ip = ileft,iright + total_ptn = total_ptn+(min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + end do + Nptn = Nptn + total_ptn ! 总点数 + ave_ni = total_ptn*1.0/nproc + + if (iNumber <= nproc) then + ! 即i的数量小于等于线程数,每个线程分配一个i就好 + tpNptn = 0 + MaxtpNptn = 0 + do ip = ileft,iright + proc_irange(:,ip-ileft+1,level-5)=(/ip,ip/) + tpNptn = (min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + MaxtpNptn = max(MaxtpNptn,tpNptn) + end do + do ip = iright+1,ileft+nproc-1 + proc_irange(:,ip-ileft+1,level-5)=(/-1,-2/) + end do + sNptn = sNptn + MaxtpNptn + else + !if (myid .eq. 0) then + ! print *, ileft,iright + !end if + !call sleep(2) + + ! i的数量大于线程数,平均分配,接近 total_ptn/nproc + int_temp = 0 + tpNptn = 0 + MaxtpNptn = 0 + ptr1 = ileft + iproc = 1 + do ptr2 = ileft,iright + int_temp = int_temp + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + tpNptn = tpNptn + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + !if (myid .eq. 0) then + ! print *, ptr2,(min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1),int_temp,ave_ni + !end if + !call sleep(2) + if ((int_temp>=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 1.0*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 1.0*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 1.0*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=1,nr + do iip=1,np + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=1,nr + do iit=1,nt + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + !sigr = 0; sigt=0; sigp=0 + !do iir=1,nr + ! do iit=1,nt + ! do iip=1,np + ! sigr = max(sigr,2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip)) + ! sigt = max(sigt,2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip)) + ! sigp = max(sigp,2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip)) + ! end do + ! end do + !end do + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1.0-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + if (isnan(Htau)) then + print *, iir,iit,iip + print *, a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 + print *, b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 + print *, c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 + pause + end if + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + end if + + + end do + end do + end do + + ! 处理边界 + + do iit=1,nt + do iip=1,np + !if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + !else + ! tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + !end if + !if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + !else + ! tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + !end if + end do + end do + do iir=1,nr + do iip=1,np + !if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + !else + ! tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + !end if + !if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + !else + ! tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + !end if + end do + end do + do iir=1,nr + do iit=1,nt + !if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + !else + ! tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + !end if + !if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + !else + ! tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + !end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 1 阶格式 + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + ! additive + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + ! multiplicative + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = sqrt(a(iir,iit,iip)) + sigt = sqrt(b(iir,iit,iip)) + sigp = sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! partial derivatives + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=2,nt-1 + do iip=2,np-1 + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=2,nr-1 + do iip=2,np-1 + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=2,nr-1 + do iit=2,nt-1 + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr=sqrt(a(iir,iit,iip)); sigt=sqrt(b(iir,iit,iip)); sigp=sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! forward and backward partial derivatives + + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + + ! calculate LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 ) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + if (tpT < tau(iir,iit,iip)) then + tau(iir,iit,iip) = tpT + end if + + end if + + + end do + end do + end do + + ! boundary + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)x0 ) then + idx0=iix + exit + end if + end do + do iiy=1,ny-1 + if (yy(iiy)<= y0 .and. yy(iiy+1)>y0 ) then + idy0=iiy + exit + end if + end do + do iiy=1,ny-1 + if (zz(iiz)<= z0 .and. zz(iiz+1)>z0 ) then + idz0=iiz + exit + end if + end do + + if (idx0<=0 .or. idy0<0 .or. idz0<0) then + write(*,*) 'point out of the mesh' + pause + return + end if + + dx = xx(idx0+1)-xx(idx0) + dy = yy(idy0+1)-yy(idy0) + dz = zz(idz0+1)-zz(idz0) + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) +end subroutine + +! 3-D interpolation uniform mesh +subroutine Linear_Interp_3D(xx,yy,zz,val,nx,ny,nz,x0,y0,z0,v0,n0) + integer :: nx,ny,nz,idx0,idy0,idz0,n0 + double precision :: xx(nx),yy(ny),zz(nz),val(nx,ny,nz),x0(n0),y0(n0),z0(n0),v0(n0),dx,dy,dz + double precision :: r1,r2,r3 + integer :: iix,iiy,iiz,i + + dx = xx(2)-xx(1) + dy = yy(2)-yy(1) + dz = zz(2)-zz(1) + + do i=1,n0 + idx0 = floor((x0(i)-xx(1))/dx)+1 + idy0 = floor((y0(i)-yy(1))/dy)+1 + idz0 = floor((z0(i)-zz(1))/dz)+1 + + if (idx0<1 .or. idx0>nx-1 .or. idy0<1 .or. idy0>ny-1 .or. idz0<1 .or. idz0>nz-1) then + write(*,*) 'point out of the mesh' + pause + return + end if + + r1 = min(1.0, (x0(i)-xx(idx0))/dx ) + r2 = min(1.0, (y0(i)-yy(idy0))/dy ) + r3 = min(1.0, (z0(i)-zz(idz0))/dz ) + + v0(i) = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) + end do +end subroutine + +subroutine FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + !print *, delta(idi,idj,idk),delta(idi+1,idj+1,idk+1) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + !tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit+1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) r1+(iir+0.5)*dr, t1+iit*dt, p1+iip*dp + a0 = T0para(1); b0 = T0para(2); c0 = T0para(3); f0 = T0para(4); fun0 = T0para(5); + r0 = T0para(6); t0 = T0para(7); p0 = T0para(8); + + do iir=1,nr-1 + do iit=1,nt + do iip=1,np + r1 = rr(iir)+0.5*dr; t1 = tt(iit); p1 = pp(iip) + T0v_hr(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hr(iir,iit,iip)==0 ) then + T0r_hr(iir,iit,iip) = 0 + else + T0r_hr(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v_hr(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_ht iir,iit,iip -> r1+iir*dr, t1+(iit+0.5)*dt, p1+iip*dp + do iir=1,nr + do iit=1,nt-1 + do iip=1,np + r1 = rr(iir); t1 = tt(iit)+0.5*dt; p1 = pp(iip) + T0v_ht(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_ht(iir,iit,iip)==0 ) then + T0t_ht(iir,iit,iip) = 0 + T0p_ht(iir,iit,iip) = 0 + else + T0t_ht(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_ht(iir,iit,iip) + T0p_ht(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_ht(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_hp iir,iit,iip -> r1+iir*dr, t1+iit*dt, p1+(iip+0.5)*dp + do iir=1,nr + do iit=1,nt + do iip=1,np-1 + r1 = rr(iir); t1 = tt(iit); p1 = pp(iip)+0.5*dp + T0v_hp(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hp(iir,iit,iip)==0 ) then + T0t_hp(iir,iit,iip) = 0 + T0p_hp(iir,iit,iip) = 0 + else + T0t_hp(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_hp(iir,iit,iip) + T0p_hp(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_hp(iir,iit,iip) + end if + end do + end do + end do + + + + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip)) & + & *(T0r_hr(iir-1,iit,iip)*(tau(iir,iit,iip)+tau(iir-1,iit,iip))/2 & + & + T0v_hr(iir-1,iit,iip)*(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr) + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip)) & + & *(T0r_hr(iir,iit,iip)*(tau(iir+1,iit,iip)+tau(iir,iit,iip))/2 & + & + T0v_hr(iir,iit,iip)*(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr) + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt) & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)* & + & (T0p_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit-1,iip+1)-tau(iir,iit-1,iip-1) & + & + tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/(4*dp)) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt) & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)* & + & (T0p_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1) & + & + tau(iir,iit+1,iip+1)-tau(iir,iit+1,iip-1))/(4*dp)) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit+1,iip-1)-tau(iir,iit-1,iip-1) & + & +tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/(4*dt)) & + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp) + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip) & + & +tau(iir,iit+1,iip+1)-tau(iir,iit-1,iip+1))/(4*dt)) & + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp) + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif)ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + do iik=1,nk + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + + + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + idr = floor((rr(iir)-invr(igrid,1))/dinvr)+1 ! invr(idr) <= rr(iir) < invr(idr+1) + if (idr<0 .or. idr>ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + + do iik=1,nk + pert = 0.0 + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + end if + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +subroutine Kernel_Mask(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou,radius) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + + do i=1,nr + do j=1,nt + do k=1,np + dis = sqrt((rr(i)-rsou)**2+(rsou*(tt(j)-tsou))**2+(rsou*cos(tsou)*(pp(k)-psou))**2) + if ( dis < radius) then + kernel(i,j,k) = kernel(i,j,k) * 0 + end if + end do + end do + end do +end subroutine + +subroutine Kernel_Mask_new(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + dr = rr(2)-rr(1); dt = tt(2)-tt(1); dp = pp(2)-pp(1); + do i=1,nr + do j=1,nt + do k=1,np + if ( abs(rr(i)-rsou)6351):\n", + " fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n", + " elif (rr[ir]>6336):\n", + " fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n", + " elif (rr[ir]>5961):\n", + " fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n", + " else:\n", + " fun_init[ir,it,ip] = 1.0/9.0\n", + "\n", + " vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip]\n", + "\n", + " # true model\n", + " if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \\\n", + " and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \\\n", + " and rr[ir] >= 6211.0 and rr[ir] <= 6371.0):\n", + " c+=1\n", + " sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \\\n", + " *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \\\n", + " *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0)\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 150.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + "\n", + "\n", + "r_earth = R_earth #6378.1370\n", + "print(\"depminmax {} {}\".format(r_earth-rr1,r_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta',data=zeta_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta',data=zeta_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(123456789)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 1\n", + "n_rec = [1 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "dep_srcs=[12.902894]\n", + "lon_srcs=[16.794572]\n", + "lat_srcs=[37.503373]\n", + "\n", + "elev_recs = [0.0]\n", + "lon_recs = [29.812050]\n", + "lat_recs = [36.472809]\n", + "\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " dep = dep_srcs[i_src]\n", + " lon = lon_srcs[i_src]\n", + " lat = lat_srcs[i_src]\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy+\"_\"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]])\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_2_one_src/make_test_model.py b/test/old_tests/inversion_2_one_src/make_test_model.py new file mode 100644 index 0000000..f1dec64 --- /dev/null +++ b/test/old_tests/inversion_2_one_src/make_test_model.py @@ -0,0 +1,215 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6371.0 #6378.1370 + +rr1=6070 +rr2=6400 +tt1=(30.0-1.5)/180*math.pi +tt2=(50.0+1.5)/180*math.pi +pp1=(15.0-1.5)/180*math.pi +pp2=(40.0+1.5)/180*math.pi + +n_rtp = [55,55,55] +dr = (rr2-rr1)/(n_rtp[0]-1) +dt = (tt2-tt1)/(n_rtp[1]-1) +dp = (pp2-pp1)/(n_rtp[2]-1) +rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + +# initial model +gamma = 0.0 +#s0 = 1.0/6.0 +slow_p=0.04 +ani_p=0.03 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + + if (rr[ir]>6351): + fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7) + elif (rr[ir]>6336): + fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6) + elif (rr[ir]>5961): + fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) + else: + fun_init[ir,it,ip] = 1.0/9.0 + + vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip] + + # true model + if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \ + and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \ + and rr[ir] >= 6211.0 and rr[ir] <= 6371.0): + c+=1 + sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \ + *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \ + *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 150.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + + +r_earth = R_earth #6378.1370 +print("depminmax {} {}".format(r_earth-rr1,r_earth-rr2)) +print(c) + + +# %% +# write out +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init) +fout_init.create_dataset('xi', data=xi_init) +fout_init.create_dataset('zeta',data=zeta_init) +fout_init.create_dataset('vel', data=vel_init) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true) +fout_true.create_dataset('xi', data=xi_true) +fout_true.create_dataset('zeta',data=zeta_true) +fout_true.create_dataset('vel', data=vel_true) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# +# ``` + +# %% +import random +random.seed(123456789) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +arriv_t_dummy = 0.0 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_src = 1 +n_rec = [1 for x in range(n_src)] + + +lines = [] + +pos_src=[] +pos_rec=[] + +dep_srcs=[12.902894] +lon_srcs=[16.794572] +lat_srcs=[37.503373] + +elev_recs = [0.0] +lon_recs = [29.812050] +lat_recs = [36.472809] + + +# create dummy src +for i_src in range(n_src): + # define one point in the domain (rr1 bottom, rr2 top) + dep = dep_srcs[i_src] + lon = lon_srcs[i_src] + lat = lat_srcs[i_src] + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + # create dummy station + for i_rec in range(n_rec[i_src]): + #elev_rec = random.uniform(0.0,-10.0) # elevation in m + #lon_rec = random.uniform(pp1deg,pp2deg) + #lat_rec = random.uniform(tt1deg,tt2deg) + + rec = [i_src, i_rec, st_name_dummy+"_"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, arriv_t_dummy] + lines.append(rec) + + pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]]) + +# write out ev_arrivals file +fname = 'src_rec_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# %% +# draw src and rec positions +import matplotlib.pyplot as plt + +for i_src in range(n_src): + plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# %% +# plot receivers +for i_rec in range(n_rec[0]): + plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + + diff --git a/test/old_tests/inversion_ASCII/README.md b/test/old_tests/inversion_ASCII/README.md new file mode 100644 index 0000000..2028979 --- /dev/null +++ b/test/old_tests/inversion_ASCII/README.md @@ -0,0 +1,14 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file + - true model + - initial model + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_result.dat file which includes the arrival time at each station + +3. run TOMOATT in inversion mode with `input_params.yml`. + \ No newline at end of file diff --git a/test/old_tests/inversion_ASCII/check_obj_func.ipynb b/test/old_tests/inversion_ASCII/check_obj_func.ipynb new file mode 100644 index 0000000..1d854f4 --- /dev/null +++ b/test/old_tests/inversion_ASCII/check_obj_func.ipynb @@ -0,0 +1,66 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# check the change of objective values\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fpath='objective_function.txt'\n", + "\n", + "objs=[]\n", + "\n", + "with open(fpath) as f:\n", + " lines = f.readlines()\n", + "\n", + " for l in lines:\n", + " if(l.startswith('i_inv')):\n", + " continue\n", + " objs.append(float(l.strip().split(',')[1]))\n", + "\n", + "\n", + "plt.xlabel('iteration')\n", + "plt.ylabel('objective function value')\n", + "plt.plot(objs)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_ASCII/check_src_rec_file.ipynb b/test/old_tests/inversion_ASCII/check_src_rec_file.ipynb new file mode 100644 index 0000000..42ca8e0 --- /dev/null +++ b/test/old_tests/inversion_ASCII/check_src_rec_file.ipynb @@ -0,0 +1,185 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read src_rec file and check its arrival time and distance from src to rec\n", + "import numpy as np\n", + "\n", + "def read_src_rec_file(fpath):\n", + "\n", + " with open(fpath, \"r\") as f:\n", + " lines = f.readlines()\n", + "\n", + " # list to store src lon lat\n", + " src_pos = []\n", + " # list to store rec lon lat\n", + " rec_pos_tmp=[]\n", + " rec_pos = []\n", + "\n", + " for line in lines:\n", + " # src line if there are 13 elements\n", + " if len(line.split()) == 13:\n", + " # store source lon lat dep\n", + " stlon = float(line.split()[8])\n", + " stlat = float(line.split()[7])\n", + " src_pos.append([stlon, stlat])\n", + "\n", + " nrec = float(line.split()[11])\n", + " # rec line if there are 9 elements\n", + " elif len(line.split()) == 9:\n", + " # store receiver lon lat dep\n", + " rclon = float(line.split()[4])\n", + " rclat = float(line.split()[3])\n", + " rctime= float(line.split()[8])\n", + " # calc epicentral distance from src\n", + " dist = np.sqrt((stlon-rclon)**2 + (stlat-rclat)**2)\n", + " rec_pos_tmp.append([rclon, rclat, rctime, dist])\n", + "\n", + " nrec-=1\n", + " else:\n", + " raise ValueError(\"src_rec_test_out.dat file is not correct\")\n", + "\n", + " if nrec==0:\n", + " rec_pos.append(rec_pos_tmp)\n", + " # remove all rec_pos_tmp\n", + " rec_pos_tmp = []\n", + "\n", + "\n", + "\n", + " src_pos = np.array(src_pos)\n", + " rec_pos = np.array(rec_pos)\n", + "\n", + " return src_pos, rec_pos" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "src_pos_true, rec_pos_true = read_src_rec_file(\"./src_rec_test_out.dat\")\n", + "src_pos_try, rec_pos_try = read_src_rec_file(\"./src_rec_test_out_out.dat\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot rec_pos for each src_pos with color by 3rd element\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def plot_srcrec(src_pos, rec_pos):\n", + "\n", + " # selected source\n", + " id_src = 1\n", + " \n", + " fig, axs = plt.subplots(2,1,figsize=(10,10))\n", + " \n", + " # plot arrival time\n", + " # src\n", + " axs[0].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + " # rec\n", + " axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=10, marker='o')\n", + " \n", + " # colorbar\n", + " cbar = plt.colorbar(axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=100, marker='o'))\n", + " cbar.set_label('arrival time')\n", + " \n", + " # plot epicentral distance\n", + " # src\n", + " axs[1].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + " # rec\n", + " axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=100, marker='o')\n", + " \n", + " # colorbar\n", + " cbar = plt.colorbar(axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=10, marker='o'))\n", + " cbar.set_label('epicentral distance')\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot_srcrec(src_pos_true, rec_pos_true)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot_srcrec(src_pos_try, rec_pos_try)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_diff = rec_pos_true[:][:][2]-rec_pos_try[:][:][2]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_diff.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos_true.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + }, + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_ASCII/input_params.yml b/test/old_tests/inversion_ASCII/input_params.yml new file mode 100644 index 0000000..3296760 --- /dev/null +++ b/test/old_tests/inversion_ASCII/input_params.yml @@ -0,0 +1,51 @@ +version : 2 + +domain : + #min_max_dep : [-2.863,17.137] # depth in km + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test_out.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + optim_method : 0 # optimization method. 0 : "grad_descent", 1 : "lbfgs", 2 : "halve-stepping" + smooth_method : 0 # 0: multigrid parametrization, 1: laplacian smoothing with CG + max_iterations_inv : 100 # maximum number of inversion iterations + step_size : 0.01 # step size for inversion + # parameters for multiparametric inversion + n_inversion_grid : 5 # number of inversion grid sets + n_inv_dep_lat_lon : [5,10,10] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 10.0] # depth in km with R = 6371.0 + min_max_lat_inv : [37.7,42.3] # latitude in degree + min_max_lon_inv : [22.7,27.3] # longitude in degree + # parameters for laplacian smoothing + l_smooth_rtp : [10,10,10] # smoothing coefficients for each direction + regularization_weight : 1.0 # regularization weight NOTWORKING + # parameter for halving-stepping or lbfgs + max_sub_iterations : 100 # maximum number of sub-iterations + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + use_gpu : 0 # 0: CPU, 1: GPU + +calculation : + convergence_tolerance : 1e-6 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + + diff --git a/test/old_tests/inversion_ASCII/input_params_pre.yml b/test/old_tests/inversion_ASCII/input_params_pre.yml new file mode 100644 index 0000000..72f1eb7 --- /dev/null +++ b/test/old_tests/inversion_ASCII/input_params_pre.yml @@ -0,0 +1,37 @@ +version : 2 + +domain : + #min_max_dep : [-2.863,17.137] # depth in km + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_true.dat' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [2,1,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-6 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + output_file_format : 1 # 0: hdf5, 1: ascii + + diff --git a/test/old_tests/inversion_ASCII/make_test_model.ipynb b/test/old_tests/inversion_ASCII/make_test_model.ipynb new file mode 100644 index 0000000..be1d0e5 --- /dev/null +++ b/test/old_tests/inversion_ASCII/make_test_model.ipynb @@ -0,0 +1,338 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "#R_earth = 6378.1370\n", + "R_earth = 6371.0\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [10,50,50]\n", + "n_rtp.reverse()\n", + "dr = (rr2-rr1)/(n_rtp[2]-1)\n", + "dt = (tt2-tt1)/(n_rtp[1]-1)\n", + "dp = (pp2-pp1)/(n_rtp[0]-1)\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[2])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[0])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "a_init = np.zeros(n_rtp)\n", + "b_init = np.zeros(n_rtp)\n", + "c_init = np.zeros(n_rtp)\n", + "f_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "a_true = np.zeros(n_rtp)\n", + "b_true = np.zeros(n_rtp)\n", + "c_true = np.zeros(n_rtp)\n", + "f_true = np.zeros(n_rtp)\n", + "\n", + "c=0\n", + "for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " #eta_init[ip,it,ir] = 0.0\n", + " #xi_init[ip,it,ir] = 0.0\n", + " zeta_init[ip,it,ir] = gamma*math.sqrt(eta_init[ip,it,ir]**2 + xi_init[ip,it,ir]**2)\n", + " fun_init[ip,it,ir] = s0\n", + " vel_init[ip,it,ir] = 1.0/s0\n", + " a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir]\n", + " b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir]\n", + " c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir]\n", + " f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir]\n", + "\n", + " # true model\n", + " if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \\\n", + " and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi):\n", + " c+=1\n", + " sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi))\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2)\n", + " fun_true[ip,it,ir] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] \n", + " a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir]\n", + " b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir]\n", + " c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir]\n", + " f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir]\n", + "\n", + "\n", + "\n", + "#r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out in ASCIII\n", + "\n", + "#\n", + "\n", + "fname_init = 'test_model_init.dat'\n", + "fname_true = 'test_model_true.dat'\n", + "\n", + "\n", + "# write init model\n", + "with open(fname_init, 'w') as f:\n", + " # write nodes in rtp\n", + " for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " # write out eta xi zeta fun fac_a fac_b fac_c fac_f\n", + " f.write(\"{} {} {} {} {} {} {} {} {}\\n\".format(eta_init[ip,it,ir],xi_init[ip,it,ir],zeta_init[ip,it,ir],fun_init[ip,it,ir],vel_init[ip,it,ir],a_init[ip,it,ir],b_init[ip,it,ir],c_init[ip,it,ir],f_init[ip,it,ir]))\n", + "\n", + "\n", + "# write true model\n", + "with open(fname_true, 'w') as f:\n", + " # write nodes in rtp\n", + " for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " # write out eta xi zeta fun fac_a fac_b fac_c fac_f\n", + " f.write(\"{} {} {} {} {} {} {} {} {}\\n\".format(eta_true[ip,it,ir],xi_true[ip,it,ir],zeta_true[ip,it,ir],fun_true[ip,it,ir],vel_true[ip,it,ir],a_true[ip,it,ir],b_true[ip,it,ir],c_true[ip,it,ir],f_true[ip,it,ir]))\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 500\n", + "n_rec = [30 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "nij_src = math.sqrt(n_src)\n", + "nij_rec = math.sqrt(n_rec[0])\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " #elev_recs.append(0) # elevation in m\n", + " #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + " # regularly\n", + " elev_recs.append(0.0)\n", + " tmp_ilon = i%nij_rec\n", + " tmp_ilat = int(i/nij_rec)\n", + " lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec)\n", + " lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec)\n", + "\n", + "\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " # regularl\n", + " dep = (R_earth-rr1)*0.9\n", + " tmp_ilon = i_src%nij_src\n", + " tmp_ilat = int(i_src/nij_src)\n", + " lon = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_src\n", + " lat = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_src\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = 0.0 #random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + " # regularly\n", + " #elev_rec = -10.0\n", + " #tmp_ilon = i_rec%nij_rec\n", + " #tmp_ilat = int(i_rec/nij_rec)\n", + " #lon_rec = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec\n", + " #lat_rec = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec\n", + "\n", + " # \n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = rec_names[i_rec]\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_ASCII/view_result.ipynb b/test/old_tests/inversion_ASCII/view_result.ipynb new file mode 100644 index 0000000..96d1743 --- /dev/null +++ b/test/old_tests/inversion_ASCII/view_result.ipynb @@ -0,0 +1,94 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np \n", + "import sys\n", + "sys.path.append(\"../../utils/\")\n", + "\n", + "from tomoatt_data_retrieval import get_data_from_ascii\n", + "\n", + "#\n", + "# plot calculated travel time field\n", + "\n", + "# number of grids\n", + "nx = 50 \n", + "ny = 50\n", + "nz = 10\n", + "\n", + "# read coordiantes from file\n", + "fname_grid = \"OUTPUT_FILES/out_grid.out\"\n", + "\n", + "\n", + "# read data\n", + "_src_id = 0\n", + "_inv_id = 0\n", + "\n", + "# filling 0 for digit\n", + "inv_id = str(_inv_id).zfill(4)\n", + "src_id = str(_src_id).zfill(4)\n", + "fname_data = \"OUTPUT_FILES/T_res_inv_{}_src_{}.dat\".format(inv_id, src_id)\n", + "\n", + "data = get_data_from_ascii(fname_data, fname_grid, nz, ny, nx, 2, 1,2, verbose=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot\n", + "import matplotlib.pyplot as plt\n", + "\n", + "fig, axs = plt.subplots(3, 1, figsize=(15, 5))\n", + "\n", + "axs[0].imshow(data[5,:,:], cmap='jet', interpolation='nearest')\n", + "axs[0].set_title('lon-lat')\n", + "\n", + "axs[1].imshow(data[:,25,:], cmap='jet', interpolation='nearest')\n", + "axs[1].set_title('r-lon')\n", + "\n", + "axs[2].imshow(data[:,:,25], cmap='jet', interpolation='nearest')\n", + "axs[2].set_title('r-lat')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_one_src/README.md b/test/old_tests/inversion_one_src/README.md new file mode 100644 index 0000000..5dd900a --- /dev/null +++ b/test/old_tests/inversion_one_src/README.md @@ -0,0 +1,30 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` or `make_test_model.py` for creating + - source, receiver file (src_rec_test.dat) + - true model (test_model_true.h5) + - initial model (test_model_init.h5) + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_test_out.dat file which includes the true arrival times +```bash +mpirun --oversubscribe -np 8 ../../build/TOMOATT ./input_params_pre.yml +``` + +3. run TOMOATT in inversion mode with `input_params.yml`. +-> this will output src_rec_test_out.dat file which includes the true arrival times +```bash +mpirun --oversubscribe -np 8 ../../build/TOMOATT ./input_params_pre.yml +``` + +4. for visualizing the result files +```bash +paraview out_data_sim_0.xmf +``` + +0 is the source id. The kernel and model fields are output in the file of 0th source. + + + \ No newline at end of file diff --git a/test/old_tests/inversion_one_src/input_params.yml b/test/old_tests/inversion_one_src/input_params.yml new file mode 100644 index 0000000..85cedc2 --- /dev/null +++ b/test/old_tests/inversion_one_src/input_params.yml @@ -0,0 +1,44 @@ +version : 2 + +domain : + min_max_dep : [-2.863,17.137] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [20,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test_out.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 0 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 4 # number of inversion grid sets + n_inv_dep_lat_lon : [5,10,10] # number of the base inversion grid points + optim_method : 0 # optimization method. 0 : "grad_descent" or 1 : "lbfgs" + max_iterations_inv : 2 # maximum number of inversion iterations + step_size : 0.01 # initial step size for inversion + # parameters for laplacian iterative smoothing + l_smooth_rtp : [0.9,0.9,0.9] # smoothing coefficients for each direction + # parameters for lbfgs + regularization_weight : 20.0 # regularization weight + max_sub_iterations : 1 # maximum number of sub-iterations + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-10 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + + diff --git a/test/old_tests/inversion_one_src/input_params_pre.yml b/test/old_tests/inversion_one_src/input_params_pre.yml new file mode 100644 index 0000000..4011b72 --- /dev/null +++ b/test/old_tests/inversion_one_src/input_params_pre.yml @@ -0,0 +1,35 @@ +version : 2 + +domain : + min_max_dep : [-2.863,17.137] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [20,50,50] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 0 # swap source and receiver (1: yes, 0: no) + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,2,2] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-10 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 2 # 0: legacy, 1: cuthill-mckee with shm parallelization + + diff --git a/test/old_tests/inversion_one_src/make_test_model.ipynb b/test/old_tests/inversion_one_src/make_test_model.ipynb new file mode 100644 index 0000000..8450fa8 --- /dev/null +++ b/test/old_tests/inversion_one_src/make_test_model.ipynb @@ -0,0 +1,319 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "R_earth = 6378.1370\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [20,50,50]\n", + "n_rtp.reverse()\n", + "dr = (rr2-rr1)/n_rtp[2]\n", + "dt = (tt2-tt1)/n_rtp[1]\n", + "dp = (pp2-pp1)/n_rtp[0]\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[2])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[0])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "a_init = np.zeros(n_rtp)\n", + "b_init = np.zeros(n_rtp)\n", + "c_init = np.zeros(n_rtp)\n", + "f_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "a_true = np.zeros(n_rtp)\n", + "b_true = np.zeros(n_rtp)\n", + "c_true = np.zeros(n_rtp)\n", + "f_true = np.zeros(n_rtp)\n", + "\n", + "c=0\n", + "for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " #eta_init[ip,it,ir] = 0.0\n", + " #xi_init[ip,it,ir] = 0.0\n", + " zeta_init[ip,it,ir] = gamma*math.sqrt(eta_init[ip,it,ir]**2 + xi_init[ip,it,ir]**2)\n", + " fun_init[ip,it,ir] = s0\n", + " vel_init[ip,it,ir] = 1.0/s0\n", + " a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir]\n", + " b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir]\n", + " c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir]\n", + " f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir]\n", + "\n", + " # true model\n", + " if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \\\n", + " and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi):\n", + " c+=1\n", + " sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi))\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2)\n", + " fun_true[ip,it,ir] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] \n", + " a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir]\n", + " b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir]\n", + " c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir]\n", + " f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir]\n", + "\n", + "\n", + "\n", + "r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(r_earth-rr1,r_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init.T)\n", + "fout_init.create_dataset('xi', data=xi_init.T)\n", + "fout_init.create_dataset('zeta', data=zeta_init.T)\n", + "fout_init.create_dataset('fun', data=fun_init.T)\n", + "fout_init.create_dataset('fac_a', data=a_init.T)\n", + "fout_init.create_dataset('fac_b', data=b_init.T)\n", + "fout_init.create_dataset('fac_c', data=c_init.T)\n", + "fout_init.create_dataset('fac_f', data=f_init.T)\n", + "fout_init.create_dataset('vel', data=vel_init.T)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true.T)\n", + "fout_true.create_dataset('xi', data=xi_true.T)\n", + "fout_true.create_dataset('zeta', data=zeta_true.T)\n", + "fout_true.create_dataset('fun', data=fun_true.T)\n", + "fout_true.create_dataset('fac_a', data=a_true.T)\n", + "fout_true.create_dataset('fac_b', data=b_true.T)\n", + "fout_true.create_dataset('fac_c', data=c_true.T)\n", + "fout_true.create_dataset('fac_f', data=f_true.T)\n", + "fout_true.create_dataset('vel', data=vel_true.T)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 1\n", + "n_rec = [1 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "nij_src = math.sqrt(n_src)\n", + "nij_rec = math.sqrt(n_rec[0])\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.95,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + " # regularl\n", + " dep = (R_earth-rr1)*0.9\n", + " tmp_ilon = i_src%nij_src\n", + " tmp_ilat = int(i_src/nij_src)\n", + " lon = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_src\n", + " lat = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_src\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " elev_rec = random.uniform(0.0,-10.0) # elevation in m\n", + " lon_rec = random.uniform(pp1deg,pp2deg)\n", + " lat_rec = random.uniform(tt1deg,tt2deg)\n", + " # regularly\n", + " #elev_rec = -10.0\n", + " #tmp_ilon = i_rec%nij_rec\n", + " #tmp_ilat = int(i_rec/nij_rec)\n", + " #lon_rec = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec\n", + " #lat_rec = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy+str(i_rec), lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_one_src/make_test_model.py b/test/old_tests/inversion_one_src/make_test_model.py new file mode 100644 index 0000000..92e3922 --- /dev/null +++ b/test/old_tests/inversion_one_src/make_test_model.py @@ -0,0 +1,246 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6378.1370 + +rr1=6361 +rr2=6381 +tt1=(38.0-0.3)/180*math.pi +tt2=(42.0+0.3)/180*math.pi +pp1=(23.0-0.3)/180*math.pi +pp2=(27.0+0.3)/180*math.pi + +n_rtp = [20,50,50] +n_rtp.reverse() +dr = (rr2-rr1)/n_rtp[2] +dt = (tt2-tt1)/n_rtp[1] +dp = (pp2-pp1)/n_rtp[0] +rr = np.array([rr1 + x*dr for x in range(n_rtp[2])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[0])]) + +# initial model +gamma = 0.0 +s0 = 1.0/6.0 +slow_p=0.06 +ani_p=0.04 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) +a_init = np.zeros(n_rtp) +b_init = np.zeros(n_rtp) +c_init = np.zeros(n_rtp) +f_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) +a_true = np.zeros(n_rtp) +b_true = np.zeros(n_rtp) +c_true = np.zeros(n_rtp) +f_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + #eta_init[ip,it,ir] = 0.0 + #xi_init[ip,it,ir] = 0.0 + zeta_init[ip,it,ir] = gamma*math.sqrt(eta_init[ip,it,ir]**2 + xi_init[ip,it,ir]**2) + fun_init[ip,it,ir] = s0 + vel_init[ip,it,ir] = 1.0/s0 + a_init[ip,it,ir] = 1.0 + 2.0*zeta_init[ip,it,ir] + b_init[ip,it,ir] = 1.0 - 2.0*xi_init[ip,it,ir] + c_init[ip,it,ir] = 1.0 + 2.0*xi_init[ip,it,ir] + f_init[ip,it,ir] = -2.0 * eta_init[ip,it,ir] + + # true model + if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \ + and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi): + c+=1 + sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi)) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 120.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ip,it,ir] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ip,it,ir] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ip,it,ir] = gamma*math.sqrt(eta_true[ip,it,ir]**2 + xi_true[ip,it,ir]**2) + fun_true[ip,it,ir] = s0/(1.0+sigma*slow_p) + vel_true[ip,it,ir] = 1.0/fun_true[ip,it,ir] + a_true[ip,it,ir] = 1.0 + 2.0*zeta_true[ip,it,ir] + b_true[ip,it,ir] = 1.0 - 2.0*xi_true[ip,it,ir] + c_true[ip,it,ir] = 1.0 + 2.0*xi_true[ip,it,ir] + f_true[ip,it,ir] = -2.0 * eta_true[ip,it,ir] + + + +r_earth = 6378.1370 +print("depminmax {} {}".format(r_earth-rr1,r_earth-rr2)) +print(c) + + +# %% + + +# %% +# write out +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init.T) +fout_init.create_dataset('xi', data=xi_init.T) +fout_init.create_dataset('zeta', data=zeta_init.T) +fout_init.create_dataset('fun', data=fun_init.T) +fout_init.create_dataset('fac_a', data=a_init.T) +fout_init.create_dataset('fac_b', data=b_init.T) +fout_init.create_dataset('fac_c', data=c_init.T) +fout_init.create_dataset('fac_f', data=f_init.T) +fout_init.create_dataset('vel', data=vel_init.T) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true.T) +fout_true.create_dataset('xi', data=xi_true.T) +fout_true.create_dataset('zeta', data=zeta_true.T) +fout_true.create_dataset('fun', data=fun_true.T) +fout_true.create_dataset('fac_a', data=a_true.T) +fout_true.create_dataset('fac_b', data=b_true.T) +fout_true.create_dataset('fac_c', data=c_true.T) +fout_true.create_dataset('fac_f', data=f_true.T) +fout_true.create_dataset('vel', data=vel_true.T) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# +# ``` + +# %% +import random +random.seed(1145141919810) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +dist_dummy = 100.0 +arriv_t_dummy = 0.0 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_src = 1 +n_rec = [60 for x in range(n_src)] + + +lines = [] + +nij_src = math.sqrt(n_src) +nij_rec = math.sqrt(n_rec[0]) + +pos_src=[] +pos_rec=[] + +# create dummy src +for i_src in range(n_src): + # define one point in the domain (rr1 bottom, rr2 top) + # random + #dep = random.uniform((R_earth-rr1)*0.95,(R_earth-rr1)*0.98) + #lon = random.uniform(pp1deg,pp2deg) + #lat = random.uniform(tt1deg,tt2deg) + # regularl + dep = (R_earth-rr1)*0.9 + tmp_ilon = i_src%nij_src + tmp_ilat = int(i_src/nij_src) + lon = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_src + lat = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_src + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + + # create dummy station + for i_rec in range(n_rec[i_src]): + #elev_rec = random.uniform(0.0,-10.0) # elevation in m + #lon_rec = random.uniform(pp1deg,pp2deg) + #lat_rec = random.uniform(tt1deg,tt2deg) + # regularly + elev_rec = -10.0 + tmp_ilon = i_rec%nij_rec + tmp_ilat = int(i_rec/nij_rec) + lon_rec = pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec + lat_rec = tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec + + rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy] + lines.append(rec) + + pos_rec.append([lon_rec,lat_rec,elev_rec]) + + +# write out ev_arrivals file +fname = 'src_rec_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# %% +# draw src and rec positions +import matplotlib.pyplot as plt + +for i_src in range(n_src): + plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# %% +# plot receivers +for i_rec in range(n_rec[0]): + plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + +# %% + + + diff --git a/test/old_tests/inversion_tele/1d_ak135.txt b/test/old_tests/inversion_tele/1d_ak135.txt new file mode 100644 index 0000000..58f131c --- /dev/null +++ b/test/old_tests/inversion_tele/1d_ak135.txt @@ -0,0 +1,136 @@ + 0.000, 5.8000 + 20.000, 5.8000 + 20.000, 6.5000 + 35.000, 6.5000 + 35.000, 8.0400 + 77.500, 8.0450 + 120.000, 8.0500 + 165.000, 8.1750 + 210.000, 8.3000 + 210.000, 8.3000 + 260.000, 8.4825 + 310.000, 8.6650 + 360.000, 8.8475 + 410.000, 9.0300 + 410.000, 9.3600 + 460.000, 9.5280 + 510.000, 9.6960 + 560.000, 9.8640 + 610.000, 10.0320 + 660.000, 10.2000 + 660.000, 10.7900 + 710.000, 10.9229 + 760.000, 11.0558 + 809.500, 11.1353 + 859.000, 11.2221 + 908.500, 11.3068 + 958.000, 11.3896 +1007.500, 11.4705 +1057.000, 11.5495 +1106.500, 11.6269 +1156.000, 11.7026 +1205.500, 11.7766 +1255.000, 11.8491 +1304.500, 11.9200 +1354.000, 11.9895 +1403.500, 12.0577 +1453.000, 12.1245 +1502.500, 12.1912 +1552.000, 12.2550 +1601.500, 12.3185 +1651.000, 12.3819 +1700.500, 12.4426 +1750.000, 12.5031 +1799.500, 12.5631 +1849.000, 12.6221 +1898.500, 12.6804 +1948.000, 12.7382 +1997.500, 12.7956 +2047.000, 12.8526 +2096.500, 12.9096 +2146.000, 12.9668 +2195.500, 13.0222 +2245.000, 13.0783 +2294.500, 13.1336 +2344.000, 13.1894 +2393.500, 13.2465 +2443.000, 13.3018 +2492.500, 13.3585 +2542.000, 13.4156 +2591.500, 13.4741 +2640.000, 13.5312 +2690.000, 13.5900 +2740.000, 13.6494 +2740.000, 13.6494 +2789.670, 13.6530 +2839.330, 13.6566 +2891.500, 13.6602 +2891.500, 8.0000 +2939.330, 8.0382 +2989.660, 8.1283 +3039.990, 8.2213 +3090.320, 8.3122 +3140.660, 8.4001 +3190.990, 8.4861 +3241.320, 8.5692 +3291.650, 8.6496 +3341.980, 8.7283 +3392.310, 8.8036 +3442.640, 8.8761 +3492.970, 8.9461 +3543.300, 9.0138 +3593.640, 9.0792 +3643.970, 9.1426 +3694.300, 9.2042 +3744.630, 9.2634 +3794.960, 9.3205 +3845.290, 9.3760 +3895.620, 9.4297 +3945.950, 9.4814 +3996.280, 9.5306 +4046.620, 9.5777 +4096.950, 9.6232 +4147.280, 9.6673 +4197.610, 9.7100 +4247.940, 9.7513 +4298.270, 9.7914 +4348.600, 9.8304 +4398.930, 9.8682 +4449.260, 9.9051 +4499.600, 9.9410 +4549.930, 9.9761 +4600.260, 10.0103 +4650.590, 10.0439 +4700.920, 10.0768 +4801.580, 10.1415 +4851.910, 10.1739 +4902.240, 10.2049 +4952.580, 10.2329 +5002.910, 10.2565 +5053.240, 10.2745 +5103.570, 10.2854 +5153.500, 10.2890 +5153.500, 11.0427 +5204.610, 11.0585 +5255.320, 11.0718 +5306.040, 11.0850 +5356.750, 11.0983 +5407.460, 11.1166 +5458.170, 11.1316 +5508.890, 11.1457 +5559.600, 11.1590 +5610.310, 11.1715 +5661.020, 11.1832 +5711.740, 11.1941 +5813.160, 11.2134 +5863.870, 11.2219 +5914.590, 11.2295 +5965.300, 11.2364 +6016.010, 11.2424 +6066.720, 11.2477 +6117.440, 11.2521 +6168.150, 11.2557 +6218.860, 11.2586 +6269.570, 11.2606 +6320.290, 11.2618 +6371.000, 11.2622 \ No newline at end of file diff --git a/test/old_tests/inversion_tele/1d_model.txt b/test/old_tests/inversion_tele/1d_model.txt new file mode 100644 index 0000000..e8ae686 --- /dev/null +++ b/test/old_tests/inversion_tele/1d_model.txt @@ -0,0 +1,158 @@ +5463, 11.3059 +5473, 11.2888 +5483, 11.2717 +5493, 11.2546 +5503, 11.2375 +5513, 11.2203 +5523, 11.2028 +5533, 11.1853 +5543, 11.1677 +5553, 11.1502 +5563, 11.1329 +5573, 11.1168 +5583, 11.1008 +5593, 11.0847 +5603, 11.0686 +5613, 11.0505 +5623, 11.0239 +5633, 10.9973 +5643, 10.9707 +5653, 10.9442 +5663, 10.9176 +5673, 10.891 +5683, 10.8644 +5693, 10.8378 +5703, 10.8113 +5713, 10.1933 +5723, 10.1597 +5733, 10.1261 +5743, 10.0925 +5753, 10.0589 +5763, 10.0253 +5773, 9.99168 +5783, 9.95808 +5793, 9.92448 +5803, 9.89088 +5813, 9.85728 +5823, 9.82368 +5833, 9.79008 +5843, 9.75648 +5853, 9.72288 +5863, 9.68928 +5873, 9.65568 +5883, 9.62208 +5893, 9.58848 +5903, 9.55488 +5913, 9.52128 +5923, 9.48768 +5933, 9.45408 +5943, 9.42048 +5953, 9.38688 +5963, 9.0227 +5973, 8.9862 +5983, 8.9497 +5993, 8.9132 +6003, 8.8767 +6013, 8.8402 +6023, 8.8037 +6033, 8.7672 +6043, 8.7307 +6053, 8.6942 +6063, 8.6577 +6073, 8.6212 +6083, 8.5847 +6093, 8.5482 +6103, 8.5117 +6113, 8.4752 +6123, 8.4387 +6133, 8.4022 +6143, 8.3657 +6153, 8.3292 +6163, 8.29444 +6173, 8.26667 +6183, 8.23889 +6193, 8.21111 +6203, 8.18333 +6213, 8.15556 +6223, 8.12778 +6233, 8.1 +6243, 8.07222 +6253, 8.04976 +6263, 8.04859 +6273, 8.04741 +6283, 8.04624 +6293, 8.04506 +6303, 8.04388 +6313, 8.04271 +6323, 8.04153 +6333, 8.04035 +6343, 6.5 +6353, 5.8 +6363, 5.8 +6373, 5.8 +6383, 5.8 +6393, 5.8 +6403, 5.8 +6413, 5.8 +6423, 5.8 +6433, 5.8 +6443, 5.8 +6453, 5.8 +6463, 5.8 +6473, 5.8 +6483, 5.8 +6493, 5.8 +6503, 5.8 +6513, 5.8 +6523, 5.8 +6533, 5.8 +6543, 5.8 +6553, 5.8 +6563, 5.8 +6573, 5.8 +6583, 5.8 +6593, 5.8 +6603, 5.8 +6613, 5.8 +6623, 5.8 +6633, 5.8 +6643, 5.8 +6653, 5.8 +6663, 5.8 +6673, 5.8 +6683, 5.8 +6693, 5.8 +6703, 5.8 +6713, 5.8 +6723, 5.8 +6733, 5.8 +6743, 5.8 +6753, 5.8 +6763, 5.8 +6773, 5.8 +6783, 5.8 +6793, 5.8 +6803, 5.8 +6813, 5.8 +6823, 5.8 +6833, 5.8 +6843, 5.8 +6853, 5.8 +6863, 5.8 +6873, 5.8 +6883, 5.8 +6893, 5.8 +6903, 5.8 +6913, 5.8 +6923, 5.8 +6933, 5.8 +6943, 5.8 +6953, 5.8 +6963, 5.8 +6973, 5.8 +6983, 5.8 +6993, 5.8 +7003, 5.8 +7013, 5.8 +7023, 5.8 +7033, 5.8 diff --git a/test/old_tests/inversion_tele/README.md b/test/old_tests/inversion_tele/README.md new file mode 100644 index 0000000..e26c4ac --- /dev/null +++ b/test/old_tests/inversion_tele/README.md @@ -0,0 +1,30 @@ +# Inversion test + +This is a test setup for inversion calculation with teleseismic events. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file (src_rec_test.dat) + - true model (test_model_true.h5) + - initial model (test_model_init.h5) + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +At first, TOMOATT calculates 2d traveltime field for each teleseismic event. +TOMOATT will find the event source is teleseismic if the event origin is outside of the simulation domain. +Calculated 2d traveltime field is saved in OUTPUT_FILES directory with 2d_travel_time_field_{src_id}.h5 +2D solver run will be skipped if this file is found by TOMOATT. +Result travel time at the stations is saved in the file `src_rec_test_out.dat` +Following command will run the forward simulation with the true model +``` bash +mpirun -n 8 ../../build/TOMOATT -i input_params_pre.yml +``` +Volumetric output data is saved in the file `OUTPUT_FILES/out_data_sim_0.h5`. +This file may be visualized by paraview with opening the index file `OUTPUT_FILES/out_data_sim_0.xmf`. + +3. run TOMOATT in inversion mode with `input_params.yml`, by the command +``` bash +mpirun -n 8 ../../build/TOMOATT -i input_params.yml +``` +The volumetric output data is saved in the file `OUTPUT_FILES/out_data_sim_0.h5`. + + +4. For retrieving the output data from *.h5, please use the python script `utils/tomoatt_data_retrieval.py` \ No newline at end of file diff --git a/test/old_tests/inversion_tele/check_1d_model_and_Tfield.ipynb b/test/old_tests/inversion_tele/check_1d_model_and_Tfield.ipynb new file mode 100644 index 0000000..9bafa64 --- /dev/null +++ b/test/old_tests/inversion_tele/check_1d_model_and_Tfield.ipynb @@ -0,0 +1,111 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot 1d_model.txt\n", + "fname_gen='1d_model.txt'\n", + "fname_ori='1d_ak135.txt'\n", + "\n", + "r_earth = 6371.0\n", + "\n", + "# read file\n", + "\n", + "dep_gen=[]\n", + "vp_gen=[]\n", + "\n", + "with open(fname_gen, 'r') as f:\n", + " lines = f.readlines()\n", + "\n", + " for line in lines:\n", + " line = line.strip()\n", + " if line.startswith('#'):\n", + " continue\n", + " else:\n", + " line = line.split(\",\")\n", + " dep_gen.append(r_earth-float(line[0]))\n", + " vp_gen.append(float(line[1]))\n", + "\n", + "dep_ori=[]\n", + "vp_ori=[]\n", + "\n", + "with open(fname_ori,'r') as f:\n", + " lines = f.readlines()\n", + "\n", + " for line in lines:\n", + " line = line.strip()\n", + " if line.startswith('#'):\n", + " continue\n", + " else:\n", + " line = line.split(\",\")\n", + " dep_ori.append(float(line[0]))\n", + " vp_ori.append(float(line[1]))\n", + "\n", + "\n", + "# plot dep and vp\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(dep_gen, vp_gen, linewidth=10)\n", + "plt.plot(dep_ori, vp_ori)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read 2D traveltime field and plot\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "\n", + "fname_Tfield='OUTPUT_FILES/2d_travel_time_field_0.h5'\n", + "\n", + "with h5py.File(fname_Tfield, 'r') as f:\n", + " T_2d = f['T'][:,:]\n", + " t_1d = f['t'][:]\n", + " r_1d = f['r'][:]\n", + "\n", + "plt.imshow(T_2d, extent=[t_1d[0], t_1d[-1], r_1d[0], r_1d[-1]], aspect='auto') \n", + "plt.colorbar()\n", + "#plt.imshow(T_2d)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_region b/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_region new file mode 100644 index 0000000..8276b54 --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_region @@ -0,0 +1,201 @@ +200 + 11.802 0.000 120.430 + 10.977 0.000 112.347 + 14.799 0.000 116.441 + 13.870 0.000 114.593 + 2.238 0.000 118.621 + 18.077 0.000 111.279 + 15.485 0.000 128.750 + 5.138 0.000 129.964 + 1.021 0.000 117.016 + 16.461 0.000 124.992 + 12.131 0.000 127.582 + 1.691 0.000 129.371 + 14.213 0.000 120.983 + 12.474 0.000 125.122 + 10.740 0.000 129.356 + 15.138 0.000 119.121 + 16.849 0.000 113.748 + 10.421 0.000 127.899 + 8.083 0.000 113.566 + 7.194 0.000 127.568 + 15.695 0.000 129.820 + 15.755 0.000 128.741 + 4.287 0.000 119.474 + 3.368 0.000 116.248 + 16.400 0.000 110.836 + 2.200 0.000 126.318 + 8.136 0.000 128.447 + 14.206 0.000 127.036 + 11.432 0.000 126.942 + 8.027 0.000 118.581 + 2.233 0.000 126.321 + 2.856 0.000 128.286 + 15.194 0.000 111.542 + 19.468 0.000 114.427 + 18.235 0.000 116.594 + 11.378 0.000 117.484 + 7.172 0.000 113.442 + 15.956 0.000 125.590 + 2.810 0.000 114.026 + 12.895 0.000 127.486 + 8.131 0.000 125.399 + 9.603 0.000 127.463 + 9.059 0.000 127.470 + 15.437 0.000 117.213 + 4.344 0.000 120.949 + 8.399 0.000 112.079 + 6.747 0.000 114.103 + 8.264 0.000 119.535 + 8.660 0.000 125.041 + 12.518 0.000 111.975 + 1.344 0.000 115.458 + 14.245 0.000 122.863 + 14.446 0.000 127.582 + 7.296 0.000 123.609 + 15.986 0.000 118.914 + 2.741 0.000 128.433 + 2.776 0.000 114.310 + 10.058 0.000 118.660 + 4.767 0.000 112.640 + 6.614 0.000 123.114 + 18.459 0.000 128.929 + 5.942 0.000 112.869 + 9.770 0.000 123.277 + 11.403 0.000 128.818 + 10.440 0.000 127.002 + 11.587 0.000 122.665 + 13.228 0.000 127.416 + 2.504 0.000 110.861 + 3.837 0.000 120.637 + 15.225 0.000 112.534 + 12.590 0.000 123.332 + 9.117 0.000 122.897 + 15.230 0.000 125.084 + 6.218 0.000 129.723 + 17.309 0.000 125.024 + 2.178 0.000 120.731 + 13.611 0.000 112.946 + 2.805 0.000 123.454 + 4.944 0.000 115.870 + 14.004 0.000 125.492 + 4.209 0.000 125.665 + 13.779 0.000 123.429 + 2.183 0.000 118.440 + 5.357 0.000 123.154 + 13.240 0.000 116.284 + 18.648 0.000 121.295 + 19.219 0.000 115.919 + 1.486 0.000 121.474 + 2.457 0.000 119.333 + 16.288 0.000 127.138 + 5.268 0.000 121.570 + 5.623 0.000 122.193 + 12.494 0.000 112.512 + 1.649 0.000 120.953 + 18.253 0.000 113.672 + 4.109 0.000 115.474 + 15.850 0.000 121.814 + 6.920 0.000 115.925 + 3.525 0.000 127.491 + 7.125 0.000 127.679 + 8.291 0.000 129.702 + 2.453 0.000 116.388 + 10.126 0.000 114.561 + 16.671 0.000 115.128 + 9.499 0.000 115.955 + 7.057 0.000 114.557 + 9.537 0.000 118.136 + 17.129 0.000 127.229 + 13.159 0.000 123.202 + 18.156 0.000 112.430 + 12.148 0.000 127.744 + 4.707 0.000 118.976 + 12.066 0.000 113.261 + 9.917 0.000 112.249 + 4.562 0.000 115.574 + 9.033 0.000 111.773 + 2.664 0.000 115.781 + 3.620 0.000 113.157 + 8.536 0.000 124.149 + 12.984 0.000 118.287 + 11.377 0.000 114.723 + 14.438 0.000 117.563 + 6.770 0.000 117.346 + 19.103 0.000 122.253 + 11.890 0.000 120.057 + 1.882 0.000 125.606 + 6.826 0.000 120.949 + 1.447 0.000 124.624 + 11.237 0.000 114.481 + 18.727 0.000 124.695 + 16.117 0.000 125.042 + 9.385 0.000 111.953 + 2.156 0.000 110.976 + 17.274 0.000 110.739 + 11.901 0.000 116.806 + 3.311 0.000 112.308 + 16.118 0.000 129.010 + 14.839 0.000 111.311 + 14.383 0.000 114.445 + 4.545 0.000 110.627 + 6.887 0.000 111.142 + 15.771 0.000 129.508 + 16.464 0.000 111.184 + 5.103 0.000 113.133 + 5.517 0.000 111.094 + 11.793 0.000 121.722 + 9.895 0.000 127.312 + 2.327 0.000 117.660 + 9.218 0.000 127.343 + 17.444 0.000 120.635 + 13.747 0.000 115.551 + 14.244 0.000 112.432 + 7.793 0.000 123.270 + 2.825 0.000 128.950 + 17.617 0.000 127.288 + 2.807 0.000 126.756 + 15.653 0.000 126.819 + 17.047 0.000 120.984 + 5.550 0.000 128.964 + 18.377 0.000 111.008 + 9.899 0.000 124.873 + 17.878 0.000 126.725 + 9.937 0.000 121.221 + 9.665 0.000 127.646 + 11.705 0.000 118.606 + 8.598 0.000 123.095 + 9.381 0.000 112.372 + 12.011 0.000 111.390 + 9.745 0.000 126.383 + 6.575 0.000 112.135 + 1.758 0.000 125.892 + 14.843 0.000 114.231 + 2.378 0.000 115.137 + 13.871 0.000 121.657 + 17.999 0.000 127.665 + 11.245 0.000 120.451 + 2.764 0.000 112.762 + 15.920 0.000 111.560 + 12.590 0.000 115.623 + 10.907 0.000 128.019 + 14.613 0.000 125.835 + 11.296 0.000 120.752 + 5.326 0.000 115.745 + 8.918 0.000 125.743 + 14.636 0.000 122.201 + 10.490 0.000 126.751 + 13.210 0.000 129.310 + 14.389 0.000 122.314 + 10.010 0.000 112.866 + 2.412 0.000 122.699 + 10.634 0.000 129.658 + 15.328 0.000 116.282 + 17.949 0.000 117.036 + 10.058 0.000 129.116 + 10.862 0.000 126.679 + 5.712 0.000 113.093 + 7.001 0.000 119.322 + 17.848 0.000 129.814 + 2.726 0.000 123.738 + 2.228 0.000 123.016 diff --git a/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_tele b/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_tele new file mode 100644 index 0000000..464a4e7 --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5/input/EARTHQUAKES_tele @@ -0,0 +1,31 @@ +30 + 93.754 0.000 167.742 90.000 47.742 + 91.741 0.000 76.894 270.000 43.106 + 28.520 0.000 192.245 90.000 72.245 + 99.877 0.000 171.239 90.000 51.239 + 29.960 0.000 68.069 270.000 51.931 + 63.202 0.000 57.747 270.000 62.253 + 25.908 0.000 199.894 90.000 79.894 + 60.869 0.000 72.681 270.000 47.319 + 58.767 0.000 77.051 270.000 42.949 + 12.108 0.000 189.167 90.000 69.167 + 46.008 0.000 43.608 270.000 76.392 + 10.170 0.000 74.481 270.000 45.519 + 89.800 0.000 175.250 90.000 55.250 + 31.693 0.000 166.363 90.000 46.363 + 93.750 0.000 68.855 270.000 51.145 + 51.260 0.000 193.542 90.000 73.542 + 86.110 0.000 172.078 90.000 52.078 + 10.661 0.000 191.059 90.000 71.059 + 22.843 0.000 56.609 270.000 63.391 + 61.437 0.000 176.890 90.000 56.890 + 62.972 0.000 58.230 270.000 61.770 + 39.053 0.000 185.517 90.000 65.517 + 32.690 0.000 167.737 90.000 47.737 + 78.764 0.000 190.265 90.000 70.265 + 76.323 0.000 184.958 90.000 64.958 + 33.802 0.000 47.777 270.000 72.223 + 25.489 0.000 62.227 270.000 57.773 + 51.580 0.000 195.428 90.000 75.428 + 64.127 0.000 171.087 90.000 51.087 + 92.574 0.000 73.692 270.000 46.308 diff --git a/test/old_tests/inversion_tele/fortran_code/ega5/input/STATIONS b/test/old_tests/inversion_tele/fortran_code/ega5/input/STATIONS new file mode 100644 index 0000000..1df466e --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5/input/STATIONS @@ -0,0 +1,41 @@ +40 + 0.000 0.000 110.250 + 0.000 0.000 110.750 + 0.000 0.000 111.250 + 0.000 0.000 111.750 + 0.000 0.000 112.250 + 0.000 0.000 112.750 + 0.000 0.000 113.250 + 0.000 0.000 113.750 + 0.000 0.000 114.250 + 0.000 0.000 114.750 + 0.000 0.000 115.250 + 0.000 0.000 115.750 + 0.000 0.000 116.250 + 0.000 0.000 116.750 + 0.000 0.000 117.250 + 0.000 0.000 117.750 + 0.000 0.000 118.250 + 0.000 0.000 118.750 + 0.000 0.000 119.250 + 0.000 0.000 119.750 + 0.000 0.000 120.250 + 0.000 0.000 120.750 + 0.000 0.000 121.250 + 0.000 0.000 121.750 + 0.000 0.000 122.250 + 0.000 0.000 122.750 + 0.000 0.000 123.250 + 0.000 0.000 123.750 + 0.000 0.000 124.250 + 0.000 0.000 124.750 + 0.000 0.000 125.250 + 0.000 0.000 125.750 + 0.000 0.000 126.250 + 0.000 0.000 126.750 + 0.000 0.000 127.250 + 0.000 0.000 127.750 + 0.000 0.000 128.250 + 0.000 0.000 128.750 + 0.000 0.000 129.250 + 0.000 0.000 129.750 diff --git a/test/old_tests/inversion_tele/fortran_code/ega5/input/inputdata.ipynb b/test/old_tests/inversion_tele/fortran_code/ega5/input/inputdata.ipynb new file mode 100644 index 0000000..ca5563c --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5/input/inputdata.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import random\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#震中距函数\n", + "def cal_dis(lat1, lon1,lat2, lon2):\n", + " latitude1 = (math.pi/180)*lat1\n", + " latitude2 = (math.pi/180)*lat2\n", + " longitude1 = (math.pi/180)*lon1\n", + " longitude2= (math.pi/180)*lon2\n", + " #因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R\n", + " #地球半径\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.0001):\n", + " return 0\n", + "\n", + " d = math.acos(math.sin(latitude1)*math.sin(latitude2)+ math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))/math.pi*180.0\n", + " return d\n", + "\n", + "#方位角函数\n", + "def cal_azimuth(lat1, lon1, lat2, lon2):\n", + " lat1_rad = lat1 * math.pi / 180\n", + " lon1_rad = lon1 * math.pi / 180\n", + " lat2_rad = lat2 * math.pi / 180\n", + " lon2_rad = lon2 * math.pi / 180\n", + " \n", + " y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad)\n", + " x = math.cos(lat1_rad) * math.sin(lat2_rad) - math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad)\n", + " brng = math.atan2(y, x) * 180 / math.pi\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.0001):\n", + " return 0\n", + " return float((brng + 360.0) % 360.0)\n", + "\n", + "\n", + "\n", + "# 研究区域范围\n", + "dep1 = 0; dep2 = 800; \n", + "lat1 = -1.0; lat2 = 1.0; \n", + "lon1 = 110.0; lon2 = 130.0; \n", + "clat = (lat1+lat2)/2.0; \n", + "clon = (lon1+lon2)/2.0; \n", + "\n", + "\n", + "# 生成一定数量的台站\n", + "Nst = 40; \n", + "pos_st=[]; \n", + "# 台站的范围\n", + "dep_st1 = -0.5; dep_st2 = 0.5; \n", + "lat_st1 = 0.0; lat_st2 = 0.0; \n", + "lon_st1 = 110.0; lon_st2 = 130.0; \n", + "\n", + "# 生成一定数量的地震\n", + "Nev_region = 200; \n", + "pos_ev_region=[]; \n", + "# 局部地震的范围\n", + "dep_ev_region1 = 1.0; dep_ev_region2 = 20.0; \n", + "lat_ev_region1 = 0.0; lat_ev_region2 = 0.0; \n", + "lon_ev_region1 = 110.0; lon_ev_region2 = 130.0; \n", + "\n", + "# 生成一定数量的远震\n", + "Nev_tele = 30; \n", + "pos_ev_tele=[]; \n", + "# 远震的范围\n", + "azi1 = 0.0; azi2 = 360.0; \n", + "degree1 = 40.0; degree2 = 80.0; \n", + "dep_ev_tele1 = 10.0; dep_ev_tele2 = 100.0; \n", + "\n", + "# 随机种子\n", + "random.seed(631)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 225.9511468651809 105.95114686518092 90.0\n", + "0.0 134.37263128921603 14.372631289216041 90.0\n", + "0.0 221.86291452364492 101.86291452364495 90.0\n", + "0.0 135.0265809510972 15.026580951097205 90.0\n", + "0.0 205.6327554209649 85.63275542096493 90.0\n", + "0.0 132.91673845591365 12.916738455913654 90.0\n", + "0.0 16.258737495319888 103.74126250468011 270.0\n", + "0.0 236.91222080019207 116.9122208001921 90.0\n", + "0.0 231.60534307538006 111.60534307538009 90.0\n", + "0.0 127.76937738221575 7.76937738221574 90.0\n", + "0.0 296.7089619188061 176.70896191880615 90.0\n", + "0.0 109.987388485231 10.012611514768977 270.0\n", + "0.0 167.7421462765811 47.74214627658114 90.0\n", + "0.0 143.53357078698778 23.53357078698778 90.0\n", + "0.0 76.89393688373681 43.10606311626317 270.0\n", + "0.0 243.99003464620372 123.99003464620375 90.0\n", + "0.0 107.72864961420355 12.271350385796454 270.0\n", + "0.0 192.24495483877945 72.24495483877948 90.0\n", + "0.0 131.78390165243425 11.783901652434272 90.0\n", + "0.0 28.764512000200227 91.23548799979977 270.0\n", + "0.0 334.7755278165224 145.2244721834776 270.0\n", + "0.0 210.25490259109463 90.25490259109465 90.0\n", + "0.0 339.62165350972003 140.37834649027994 270.0\n", + "0.0 356.65953464944505 123.34046535055498 270.0\n", + "0.0 310.73064432466316 169.26935567533684 270.0\n", + "0.0 14.362593311061245 105.63740668893875 270.0\n", + "0.0 219.55849454012824 99.55849454012825 90.0\n", + "0.0 216.37171778796466 96.37171778796468 90.0\n", + "0.0 17.888701551321237 102.11129844867875 270.0\n", + "0.0 171.2386125573614 51.23861255736139 90.0\n", + "0.0 341.33064526380423 138.66935473619577 270.0\n", + "0.0 210.8077223236536 90.8077223236536 90.0\n", + "0.0 289.112673508994 169.11267350899402 90.0\n", + "0.0 298.08845278767177 178.08845278767174 90.0\n", + "0.0 272.45026020019355 152.45026020019355 90.0\n", + "0.0 144.07425671018817 24.07425671018818 90.0\n", + "0.0 68.06864484053433 51.93135515946566 270.0\n", + "0.0 136.29773319963272 16.297733199632727 90.0\n", + "0.0 147.8123908849427 27.812390884942708 90.0\n", + "0.0 57.74720760152299 62.252792398477006 270.0\n", + "0.0 15.652724958883866 104.34727504111613 270.0\n", + "0.0 144.72146631701912 24.721466317019132 90.0\n", + "0.0 27.083088365413673 92.91691163458631 270.0\n", + "0.0 264.3101344354792 144.31013443547923 90.0\n", + "0.0 341.08957840202356 138.91042159797647 270.0\n", + "0.0 116.10814242841248 3.891857571587484 270.0\n", + "0.0 130.7610096663694 10.761009666369436 90.0\n", + "0.0 86.20775751226536 33.79224248773463 270.0\n", + "0.0 199.89381975746232 79.89381975746234 90.0\n", + "0.0 72.68053962138247 47.31946037861752 270.0\n", + "0.0 77.05144953292259 42.948550467077396 270.0\n", + "0.0 266.39229908576056 146.39229908576056 90.0\n", + "0.0 336.08487636106537 143.91512363893463 270.0\n", + "0.0 315.4798829868885 164.52011701311147 270.0\n", + "0.0 83.03381783702551 36.966182162974484 270.0\n", + "0.0 275.99647488706177 155.99647488706177 90.0\n", + "0.0 116.23838021530406 3.761619784695913 270.0\n", + "0.0 118.52414477992758 1.4758552200723425 270.0\n", + "0.0 220.74310560698524 100.74310560698525 90.0\n", + "0.0 338.40097536399816 141.59902463600184 270.0\n", + "0.0 203.62740080582384 83.62740080582384 90.0\n", + "0.0 355.8080215395081 124.1919784604919 270.0\n", + "0.0 9.404231671969384 110.5957683280306 270.0\n", + "0.0 343.5534959818642 136.4465040181358 270.0\n", + "0.0 6.66339734732301 113.33660265267699 270.0\n", + "0.0 358.0037637181944 121.99623628180552 270.0\n", + "0.0 247.98908263067963 127.98908263067965 90.0\n", + "0.0 97.64127642203272 22.358723577967275 270.0\n", + "0.0 99.53081429245076 20.46918570754922 270.0\n", + "0.0 128.9499990799955 8.949999079995527 90.0\n", + "0.0 261.6643380104868 141.6643380104868 90.0\n", + "0.0 329.5615005848541 150.43849941514588 270.0\n", + "0.0 217.67290357735305 97.67290357735308 90.0\n", + "0.0 205.18903585853536 85.18903585853536 90.0\n", + "0.0 228.97693699706412 108.97693699706413 90.0\n", + "0.0 8.881693318871182 111.11830668112881 270.0\n", + "0.0 356.57170393774953 123.42829606225041 270.0\n", + "0.0 189.16694569680052 69.16694569680054 90.0\n", + "0.0 121.50245011182267 1.5024501118226716 90.0\n", + "0.0 333.93797255055347 146.06202744944653 270.0\n", + "0.0 100.13308707398681 19.866912926013175 270.0\n", + "0.0 43.6084015041731 76.3915984958269 270.0\n", + "0.0 111.05944610086928 8.940553899130707 270.0\n", + "0.0 74.48107242651632 45.518927573483666 270.0\n", + "0.0 312.0462723650521 167.95372763494788 270.0\n", + "0.0 322.947704942887 157.05229505711299 270.0\n", + "0.0 208.95113264150558 88.9511326415056 90.0\n", + "0.0 175.24970913034872 55.24970913034874 90.0\n", + "0.0 140.9614395734827 20.961439573482696 90.0\n", + "0.0 166.3626290086637 46.3626290086637 90.0\n", + "0.0 90.41872798898056 29.581272011019415 270.0\n", + "0.0 222.8793862747397 102.8793862747397 90.0\n", + "0.0 68.85476821721676 51.14523178278323 270.0\n", + "0.0 28.214387666817153 91.78561233318284 270.0\n", + "0.0 91.48103529832157 28.518964701678417 270.0\n", + "0.0 89.50523941860742 30.494760581392573 270.0\n", + "0.0 193.54150713960806 73.54150713960807 90.0\n", + "0.0 7.161329384662456 112.83867061533753 270.0\n", + "0.0 213.18842190537316 93.18842190537318 90.0\n", + "0.0 172.07812140684445 52.07812140684447 90.0\n", + "0.0 334.8353619985278 145.1646380014722 270.0\n", + "0.0 191.0593578794778 71.0593578794778 90.0\n", + "0.0 56.60854133537719 63.39145866462279 270.0\n", + "0.0 92.26165787695894 27.738342123041054 270.0\n", + "0.0 286.9224658393914 166.9224658393914 90.0\n", + "0.0 176.89046670533634 56.890466705336365 90.0\n", + "0.0 276.0389970910487 156.0389970910487 90.0\n", + "0.0 137.64747685530494 17.647476855304948 90.0\n", + "0.0 1.4308610934428856 118.56913890655709 270.0\n", + "0.0 110.88137345107941 9.118626548920576 270.0\n", + "0.0 137.09485329193856 17.094853291938563 90.0\n", + "0.0 135.5690155005423 15.569015500542301 90.0\n", + "0.0 126.14097870235523 6.140978702355242 90.0\n", + "0.0 323.5471905278929 156.4528094721071 270.0\n", + "0.0 322.23762188343517 157.76237811656483 270.0\n", + "0.0 88.32263639560081 31.677363604399194 270.0\n", + "0.0 338.27038239137386 141.72961760862614 270.0\n", + "0.0 93.32529519621555 26.67470480378444 270.0\n", + "0.0 204.0513824389116 84.05138243891159 90.0\n", + "0.0 58.230491293900585 61.7695087060994 270.0\n", + "0.0 34.17234176219371 85.82765823780629 270.0\n", + "0.0 20.355778278035714 99.64422172196426 270.0\n", + "0.0 185.5169105695217 65.51691056952171 90.0\n", + "0.0 330.35248244149466 149.6475175585053 270.0\n", + "0.0 276.63332567163 156.63332567163005 90.0\n", + "0.0 358.5496625205124 121.45033747948762 270.0\n", + "0.0 7.590891759615754 112.40910824038424 270.0\n", + "0.0 167.7368613892805 47.73686138928051 90.0\n", + "0.0 244.68032032578964 124.68032032578965 90.0\n", + "0.0 156.8417344482591 36.84173444825912 90.0\n", + "0.0 269.4204866261951 149.42048662619513 90.0\n", + "0.0 190.265203959195 70.265203959195 90.0\n", + "0.0 136.57685361968288 16.57685361968289 90.0\n", + "0.0 260.9555979708692 140.95559797086918 90.0\n", + "0.0 103.67335828401178 16.32664171598821 270.0\n", + "0.0 184.95848872928786 64.95848872928788 90.0\n", + "0.0 47.777009530082694 72.22299046991728 270.0\n", + "0.0 62.22725457147253 57.772745428527465 270.0\n", + "0.0 278.7120149718238 158.71201497182383 90.0\n", + "0.0 195.428361258955 75.42836125895501 90.0\n", + "0.0 239.0927285144889 119.09272851448891 90.0\n", + "0.0 230.62021224665406 110.62021224665409 90.0\n", + "0.0 107.11731376192003 12.882686238079954 270.0\n", + "0.0 157.35907039424248 37.35907039424247 90.0\n", + "0.0 135.4058798399319 15.40587983993192 90.0\n", + "0.0 130.24064313799508 10.240643137995084 90.0\n", + "0.0 1.892581816404899 118.1074181835951 270.0\n", + "0.0 207.37075291430313 87.37075291430315 90.0\n", + "0.0 171.0869519017806 51.08695190178061 90.0\n", + "0.0 278.1067962102084 158.10679621020842 90.0\n", + "0.0 254.71648464073405 134.71648464073405 90.0\n", + "0.0 299.9432308787044 179.94323087870285 90.0\n", + "0.0 22.921838498505068 97.07816150149492 270.0\n", + "0.0 7.89398472687715 112.10601527312285 270.0\n", + "0.0 73.69196142088225 46.30803857911775 270.0\n" + ] + } + ], + "source": [ + "# -------------------- 数据生成 ------------------------\n", + "\n", + "# 首先生成台站\n", + "doc_st=open('STATIONS','w')\n", + "doc_st.write('%d \\n'%(Nst))\n", + "for i in range(Nst):\n", + " # dep_st = random.uniform(dep_st1,dep_st2); \n", + " dep_st = 0.0\n", + " lat_st = random.uniform(lat_st1,lat_st2); \n", + " # lon_st = random.uniform(lon_st1,lon_st2); \n", + " lon_st = (lon_st2-lon_st1)/(Nst)*(i+0.5)+lon_st1\n", + " doc_st.write('%8.3f %8.3f %8.3f \\n'%(dep_st,lat_st,lon_st))\n", + " pos_st.append((dep_st,lat_st,lon_st))\n", + "doc_st.close()\n", + "\n", + "# 生成区域地震\n", + "doc_ev_region = open('EARTHQUAKES_region','w')\n", + "doc_ev_region.write('%d \\n'%(Nev_region))\n", + "for i in range(Nev_region):\n", + " dep_ev = random.uniform(dep_ev_region1,dep_ev_region2); \n", + " lat_ev = random.uniform(lat_ev_region1,lat_ev_region2); \n", + " lon_ev = random.uniform(lon_ev_region1,lon_ev_region2); \n", + " doc_ev_region.write('%8.3f %8.3f %8.3f \\n'%(dep_ev,lat_ev,lon_ev))\n", + " pos_ev_region.append((dep_ev,lat_ev,lon_ev))\n", + "doc_ev_region.close()\n", + "\n", + "# 生成远震\n", + "doc_ev_tele = open('EARTHQUAKES_tele','w')\n", + "doc_ev_tele.write('%d \\n'%(Nev_tele))\n", + "count = 0\n", + "while (count < Nev_tele):\n", + " lat_ev = 0.0\n", + " lon_ev = random.uniform(0,360.0)\n", + " dep_ev = random.uniform(dep_ev_tele1,dep_ev_tele2)\n", + " degree = cal_dis(clat,clon,lat_ev,lon_ev)\n", + " azi = cal_azimuth(clat,clon,lat_ev,lon_ev)\n", + " print(lat_ev,lon_ev,degree,azi)\n", + " if (degree > degree1 and degree < degree2 and azi > azi1 and azi < azi2):\n", + " doc_ev_tele.write('%8.3f %8.3f %8.3f %8.3f %8.3f \\n'%(dep_ev,lat_ev,lon_ev,azi,degree))\n", + " count = count+1; \n", + " pos_ev_tele.append((dep_ev,degree,azi))\n", + "doc_ev_tele.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-2.5, 2.5)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 台站分布\n", + "plt.figure(1)\n", + "for i in range(Nst):\n", + " plt.scatter(pos_st[i][2],pos_st[i][1],c='r',marker='o')\n", + "plt.xlabel('Longitude')\n", + "plt.ylabel('Latitude')\n", + "plt.xlim([lon1-1.5,lon2+1.5])\n", + "plt.ylim([lat1-1.5,lat2+1.5])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-2.5, 2.5)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 地震分布\n", + "plt.figure(2)\n", + "for i in range(Nev_region):\n", + " plt.scatter(pos_ev_region[i][2],pos_ev_region[i][1],c='b',marker='p')\n", + "plt.xlabel('Longitude')\n", + "plt.ylabel('Latitude')\n", + "plt.xlim([lon1-1.5,lon2+1.5])\n", + "plt.ylim([lat1-1.5,lat2+1.5])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(93.75424024443853, 47.74214627658114, 90.0)\n", + "(91.74147058170392, 43.10606311626317, 270.0)\n", + "(28.519975785125162, 72.24495483877948, 90.0)\n", + "(99.8767124683807, 51.23861255736139, 90.0)\n", + "(29.960132387638367, 51.93135515946566, 270.0)\n", + "(63.20184963246517, 62.252792398477006, 270.0)\n", + "(25.90818571587431, 79.89381975746234, 90.0)\n", + "(60.869382359315146, 47.31946037861752, 270.0)\n", + "(58.76663282089372, 42.948550467077396, 270.0)\n", + "(12.108262720166383, 69.16694569680054, 90.0)\n", + "(46.00751259206518, 76.3915984958269, 270.0)\n", + "(10.170098357139967, 45.518927573483666, 270.0)\n", + "(89.79967671929133, 55.24970913034874, 90.0)\n", + "(31.693028518129445, 46.3626290086637, 90.0)\n", + "(93.75025622172483, 51.14523178278323, 270.0)\n", + "(51.259680088140676, 73.54150713960807, 90.0)\n", + "(86.11028572151156, 52.07812140684447, 90.0)\n", + "(10.66109955772044, 71.0593578794778, 90.0)\n", + "(22.843331848633156, 63.39145866462279, 270.0)\n", + "(61.43688934548696, 56.890466705336365, 90.0)\n", + "(62.97234405157307, 61.7695087060994, 270.0)\n", + "(39.05312782429853, 65.51691056952171, 90.0)\n", + "(32.690103384326115, 47.73686138928051, 90.0)\n", + "(78.76430267593933, 70.265203959195, 90.0)\n", + "(76.32278204224933, 64.95848872928788, 90.0)\n", + "(33.802179523988485, 72.22299046991728, 270.0)\n", + "(25.48858050569794, 57.772745428527465, 270.0)\n", + "(51.5795080124909, 75.42836125895501, 90.0)\n", + "(64.12652782728235, 51.08695190178061, 90.0)\n", + "(92.5735521149096, 46.30803857911775, 270.0)\n" + ] + }, + { + "data": { + "text/plain": [ + "(-80.0, 80.0)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 远震分布\n", + "plt.figure(3)\n", + "for i in range(Nev_tele):\n", + " print(pos_ev_tele[i])\n", + " x = pos_ev_tele[i][1]*math.cos(pos_ev_tele[i][2]/180*math.pi)\n", + " y = pos_ev_tele[i][1]*math.sin(pos_ev_tele[i][2]/180*math.pi)\n", + " plt.scatter(x,y,c='g',marker='p')\n", + "# plt.xlabel('Longitude')\n", + "# plt.ylabel('Latitude')\n", + "plt.xlim([-80,80])\n", + "plt.ylim([-80,80])" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "cdd74c396a461f81d13d16403c726c38089d3c42a4b6e59262cdb9511d16556b" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele/fortran_code/ega5/input/prem_model.txt b/test/old_tests/inversion_tele/fortran_code/ega5/input/prem_model.txt new file mode 100644 index 0000000..96a6218 --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5/input/prem_model.txt @@ -0,0 +1,89 @@ +88 + 0.00 5.80000 3.20000 2.60000 1456.0 600.0 + 15.00 5.80000 3.20000 2.60000 1456.0 600.0 + 15.00 6.80000 3.90000 2.90000 1350.0 600.0 + 24.40 6.80000 3.90000 2.90000 1350.0 600.0 + 24.40 8.11061 4.49094 3.38076 1446.0 600.0 + 40.00 8.10119 4.48486 3.37906 1446.0 600.0 + 60.00 8.08907 4.47715 3.37688 1447.0 600.0 + 80.00 8.07688 4.46953 3.37471 195.0 80.0 + 115.00 8.05540 4.45643 3.37091 195.0 80.0 + 150.00 8.03370 4.44361 3.36710 195.0 80.0 + 185.00 8.01180 4.43108 3.36330 195.0 80.0 + 220.00 7.98970 4.41885 3.35950 195.0 80.0 + 220.00 8.55896 4.64391 3.43578 362.0 143.0 + 265.00 8.64552 4.67540 3.46264 365.0 143.0 + 310.00 8.73209 4.70690 3.48951 367.0 143.0 + 355.00 8.81867 4.73840 3.51639 370.0 143.0 + 400.00 8.90522 4.76989 3.54325 372.0 143.0 + 400.00 9.13397 4.93259 3.72378 366.0 143.0 + 450.00 9.38990 5.07842 3.78678 365.0 143.0 + 500.00 9.64588 5.22428 3.84980 364.0 143.0 + 550.00 9.90185 5.37014 3.91282 363.0 143.0 + 600.00 10.15782 5.51602 3.97584 362.0 143.0 + 635.00 10.21203 5.54311 3.98399 362.0 143.0 + 670.00 10.26622 5.57020 3.99214 362.0 143.0 + 670.00 10.75131 5.94508 4.38071 759.0 312.0 + 721.00 10.91005 6.09418 4.41241 744.0 312.0 + 771.00 11.06557 6.24046 4.44317 730.0 312.0 + 871.00 11.24490 6.31091 4.50372 737.0 312.0 + 971.00 11.41560 6.37813 4.56307 743.0 312.0 + 1071.00 11.57828 6.44232 4.62129 750.0 312.0 + 1171.00 11.73357 6.50370 4.67844 755.0 312.0 + 1271.00 11.88209 6.56250 4.73460 761.0 312.0 + 1371.00 12.02445 6.61891 4.78983 766.0 312.0 + 1471.00 12.16126 6.67317 4.84422 770.0 312.0 + 1571.00 12.29316 6.72548 4.89783 775.0 312.0 + 1671.00 12.42075 6.77606 4.95073 779.0 312.0 + 1771.00 12.54466 6.82512 5.00299 784.0 312.0 + 1871.00 12.66550 6.87289 5.05469 788.0 312.0 + 1971.00 12.78389 6.91957 5.10590 792.0 312.0 + 2071.00 12.90045 6.96538 5.15669 795.0 312.0 + 2171.00 13.01579 7.01053 5.20713 799.0 312.0 + 2271.00 13.13055 7.05525 5.25729 803.0 312.0 + 2371.00 13.24532 7.09974 5.30724 807.0 312.0 + 2471.00 13.36074 7.14423 5.35706 811.0 312.0 + 2571.00 13.47742 7.18892 5.40681 815.0 312.0 + 2671.00 13.59597 7.23403 5.45657 819.0 312.0 + 2741.00 13.68041 7.26597 5.49145 822.0 312.0 + 2771.00 13.68753 7.26575 5.50642 823.0 312.0 + 2871.00 13.71168 7.26486 5.55641 826.0 312.0 + 2891.00 13.71660 7.26466 5.56645 826.0 312.0 + 2891.00 8.06482 0.00000 9.90349 57822.0 0.0 + 2971.00 8.19939 0.00000 10.02940 57822.0 0.0 + 3071.00 8.36019 0.00000 10.18134 57822.0 0.0 + 3171.00 8.51298 0.00000 10.32726 57822.0 0.0 + 3271.00 8.65805 0.00000 10.46727 57822.0 0.0 + 3371.00 8.79573 0.00000 10.60152 57822.0 0.0 + 3471.00 8.92632 0.00000 10.73012 57822.0 0.0 + 3571.00 9.05015 0.00000 10.85321 57822.0 0.0 + 3671.00 9.16752 0.00000 10.97091 57822.0 0.0 + 3771.00 9.27867 0.00000 11.08335 57822.0 0.0 + 3871.00 9.38418 0.00000 11.19067 57822.0 0.0 + 3971.00 9.48409 0.00000 11.29298 57822.0 0.0 + 4071.00 9.57881 0.00000 11.39042 57822.0 0.0 + 4171.00 9.66865 0.00000 11.48311 57822.0 0.0 + 4271.00 9.75393 0.00000 11.57119 57822.0 0.0 + 4371.00 9.83496 0.00000 11.65478 57822.0 0.0 + 4471.00 9.91206 0.00000 11.73401 57822.0 0.0 + 4571.00 9.98554 0.00000 11.80900 57822.0 0.0 + 4671.00 10.05572 0.00000 11.87990 57822.0 0.0 + 4771.00 10.12291 0.00000 11.94682 57822.0 0.0 + 4871.00 10.18743 0.00000 12.00989 57822.0 0.0 + 4971.00 10.24959 0.00000 12.06924 57822.0 0.0 + 5071.00 10.30971 0.00000 12.12500 57822.0 0.0 + 5149.50 10.35568 0.00000 12.16634 57822.0 0.0 + 5149.50 11.02827 3.50432 12.76360 445.0 85.0 + 5171.00 11.03643 3.51002 12.77493 445.0 85.0 + 5271.00 11.07249 3.53522 12.82501 443.0 85.0 + 5371.00 11.10542 3.55823 12.87073 440.0 85.0 + 5471.00 11.13521 3.57905 12.91211 439.0 85.0 + 5571.00 11.16186 3.59767 12.94912 437.0 85.0 + 5671.00 11.18538 3.61411 12.98178 436.0 85.0 + 5771.00 11.20576 3.62835 13.01009 434.0 85.0 + 5871.00 11.22301 3.64041 13.03404 433.0 85.0 + 5971.00 11.23712 3.65027 13.05364 432.0 85.0 + 6071.00 11.24809 3.65794 13.06888 432.0 85.0 + 6171.00 11.25593 3.66342 13.07977 431.0 85.0 + 6271.00 11.26064 3.66670 13.08630 431.0 85.0 + 6371.00 11.26220 3.66780 13.08848 431.0 85.0 diff --git a/test/old_tests/inversion_tele/fortran_code/ega5_sphe_3d_kernel.f90 b/test/old_tests/inversion_tele/fortran_code/ega5_sphe_3d_kernel.f90 new file mode 100644 index 0000000..957574c --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/ega5_sphe_3d_kernel.f90 @@ -0,0 +1,1016 @@ +include "eikon_solver_mpi.f90" + + +! example: 3-D 3rd order anisotropic eikonal equation in cartesian coordinate (Point source) +! parameter setting: +! domain: R * Theta * Phi = [6275, 6375] * [49^\circ, 51^\circ] * [129^\circ, 131^\circ] +! analytic solution: T = |x-x_s|/c0 +! isotropic eik equ: Tx^2 + Ty^2 + Tz^2 = s^2, +! boundary condition: T(x0,y0,z0) = 0 (point source) +! test function: 'FSM_WENO3_PS_sphe_3d' in "eikon_solver.f90" +! + +program eikonal_2d + use mpi + +! ######################### 参数声明 parameters statement ######################### + + implicit none + + ! mesh grid + integer :: nr,nt,np + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: Earth_Radius = 6371.0 + double precision :: rr1,rr2,tt1,tt2,pp1,pp2 + double precision,allocatable :: rr(:),tt(:),pp(:) + double precision :: dr,dt,dp + + ! STATIONS & EARTHQUAKES + integer :: nev + double precision,allocatable :: rev(:),tev(:),pev(:) ! earthquake (event) + integer :: nst + double precision,allocatable :: rst(:),tst(:),pst(:) ! station + integer :: nev_tele + double precision,allocatable :: rev_tele(:),tev_tele(:),pev_tele(:) ! tele seismic event + + ! model parameter + double precision,parameter :: gamma = 0.0 + double precision :: slow_p,ani_p + double precision,allocatable :: xi(:,:,:),eta(:,:,:),zeta(:,:,:) ! syn model (ani) + double precision,allocatable :: a(:,:,:),b(:,:,:),c(:,:,:),f(:,:,:),fun(:,:,:) ! syn model 猜测模型 + double precision,allocatable :: xiT(:,:,:),etaT(:,:,:),zetaT(:,:,:) ! true model (ani) + double precision,allocatable :: aT(:,:,:),bT(:,:,:),cT(:,:,:),fT(:,:,:),funT(:,:,:) ! true model 真实模型 + double precision :: sigma1,sigma2,psi + + ! teleseismic modeling + double precision,allocatable :: bd_N(:,:,:),bd_S(:,:,:),bd_W(:,:,:),bd_E(:,:,:),bd_B(:,:,:),bd_T(:,:,:) ! boundary conditions + double precision,allocatable :: bd_N_l(:,:,:),bd_S_l(:,:,:),bd_W_l(:,:,:),bd_E_l(:,:,:),bd_B_l(:,:,:),bd_T_l(:,:,:) ! local boundary conditions + + logical,allocatable :: isbd(:,:) + double precision :: max_deg,deg + + ! tele and regional control + double precision :: region_ratio, tele_ratio ! the ratio of regional kernel over tele kernel + logical :: is_region, is_tele + + + ! Eikonal solver + double precision,allocatable :: uT(:,:,:),TableT(:,:,:) !true timetable 真实走时场 + double precision,allocatable :: u(:,:,:),Table(:,:,:) !syn timetable 猜测走时场 + double precision,allocatable :: TableADJ(:,:,:) ! adjoint field 伴随场 + + ! adjoint source + double precision,allocatable :: TtimeT(:,:),Ttime_teleT(:,:),Ttime(:,:),Ttime_tele(:,:) ! 真实走时,合成走时 + double precision,allocatable :: TtimeT_l(:,:),Ttime_teleT_l(:,:),Ttime_l(:,:),Ttime_tele_l(:,:) ! 真实走时,合成走时 + double precision,allocatable :: sourceADJ(:) ! adjoint source 伴随源 + + ! sensitivity kernel + integer :: nk ! number of kernels + double precision,allocatable :: all_Ks_region(:,:,:),all_Kxi_region(:,:,:),all_Keta_region(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_region_l(:,:,:),all_Kxi_region_l(:,:,:),all_Keta_region_l(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_tele(:,:,:),all_Kxi_tele(:,:,:),all_Keta_tele(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_tele_l(:,:,:),all_Kxi_tele_l(:,:,:),all_Keta_tele_l(:,:,:) ! sensitivity kernel + double precision,allocatable :: Ks(:,:,:),Kxi(:,:,:),Keta(:,:,:) ! event kernel + double precision,allocatable :: all_Kernel(:,:,:,:) ! kernels for all parameters together + + ! inversion parameterization + integer :: ninvr,ninvt,ninvp + double precision :: invr1,invr2,invt1,invt2,invp1,invp2 + integer :: ngrid ! number of nultigrid (multigrid technique) + double precision,allocatable :: invr(:,:),invt(:,:),invp(:,:) + double precision,allocatable :: inv_dep(:) + double precision :: dinvr,dinvt,dinvp + double precision,allocatable :: update_value(:,:,:,:) ! parameter update value 更新参数的变化量 + + ! model update (optimization) + double precision :: stepsize ! stepsize + integer :: stIter, edIter ! max iteration step + double precision :: old_obj, obj, obj_region, obj_region_l, obj_tele, obj_tele_l, tmp_obj ! 优化目标函数 objective function + double precision,allocatable :: weight_st(:),weight_ev(:),weight_ev_tele(:) !weight function + double precision :: dis_ij, dis_zero !weight function + logical :: weight_sou_bool=.false. , weight_rec_bool= .false. + + ! temp var + double precision :: depth,lat,lon + double precision :: tmp_dp,tmp_int + + ! input and output file + character(Len=80) :: filename,form,form2,TTfield_path + character(Len=80) :: input_path,output_path + logical :: isfile + logical :: isread_model + character(Len=80) :: read_model_name + + ! loop index + integer :: iir,iit,iip,idi,idj,idk,i,j,k,iter,igrid + + ! computing time + double precision :: time_begin,time_end,alpha + + ! mpi parameter + integer :: ierr,myid,nproc,tag,istat(mpi_status_size) + integer,allocatable :: my_tele_source_range(:,:),my_region_source_range(:,:) ! 负载平衡,当前 processor 负责的 最小最大震源序号 + integer :: iproc ! proc 循环index + double precision,allocatable :: dp_3d(:,:,:), dp_2d(:,:), dp_1d(:,:), dp_0d + + +! ############################# input parameters ############################## + ! this can be included in a input_parameter file later + + ! 正演网格 forward mesh + nr = 101; nt = 9; np = 101 ! number of grid for forward modeling + rr1 = 5550; rr2 = 6400 ! 6371 - 5571; 800 km depth + tt1 = (0.0-1.0)/180*pi; tt2 = (0.0+1.0)/180*pi + pp1 = (110.0-1.5)/180*pi; pp2 = (130.0+1.5)/180*pi + + ! 反演网格 + ninvr = 15; ninvt = 3; ninvp = 19 ! inversion grid size (coarse) + invr1 = rr1; invr2 = rr2 + invt1 = tt1 - 1.0/180*pi; invt2 = tt2 + 1.0/180*pi + invp1 = pp1 - 1.5/180*pi; invp2 = pp2 + 1.5/180*pi + ngrid = 5 + nk = 3 ! number of typies of kernel + allocate(inv_dep(ninvr)) + inv_dep = [-25,0,25,50,75,100,150,200,300,400,500,600,700,800,900] + + + ! 迭代进程 iterative control + ! ############### 迭代中途开始反演,以下每个参数都值得仔细考虑和修改 + ! ############### allow starting from one iteration at any step. Please check all following parameters before start the inversion + stIter = 1; edIter = 50 ! 迭代次数 + isread_model = .false. + read_model_name = 'ega5/output/model_step100' + stepsize = 0.01 ! 初始迭代步长 + + + ! 反演相关参数 parameters for inversion + max_deg = 2.5/180.0*pi ! the distance threshold of stations for tele seismic inversion + slow_p=0.04; ani_p=0.00 ! 检测板异常大小 amplitude of checkerboard anomaly + + region_ratio = 1.0 ! 远近震比例 ratio for regional misfit + tele_ratio = 1.0 ! ratio for teleseismic misfit + is_region = .false. ! invert regional tarveltime data or not + is_tele = .true. ! invert teleseismic tarveltime data or not + + input_path = 'ega5/input' ! input and output path + output_path = 'ega5/output' + + +! ############################# Preparation ############################# + + ! -------------------- iteration check ------------------- + ! 如果当前目录下有生成的文件,暂停程序 if the velocity model file exists, pause + select case (stIter) + case (1:9) + write(form,'(I1)') stIter + case (10:99) + write(form,'(I2)') stIter + case (100:999) + write(form,'(I3)') stIter + end select + filename=trim(output_path)//'/model_step'//trim(form) + inquire(file=filename,exist = isfile) + if (isfile) then ! velocity model file exists, pause + print *, 'file exists, please check the output folder' + pause + end if + + ! -------------------- mpi initialization ------------------- + call mpi_init(ierr) + + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + call CPU_TIME(time_begin) ! program start + + tag = 1 ! communcation tag + +! ################### read sources and receivers 读取地震台站数据 ################### + open(10,file=trim(input_path)//'/STATIONS') + read(10,*) nst + allocate(rst(nst),tst(nst),pst(nst),weight_st(nst)) + do i=1,nst + read(10,*) depth,lat,lon + rst(i) = Earth_Radius-depth + tst(i) = lat/180.0*pi + pst(i) = lon/180.0*pi + end do + close(10) + + if (is_region) then + open(10,file=trim(input_path)//'/EARTHQUAKES_region') + read(10,*) nev + allocate(rev(nev),tev(nev),pev(nev),weight_ev(nev)) + do i=1,nev + read(10,*) depth,lat,lon + rev(i) = Earth_Radius-depth + tev(i) = lat/180.0*pi + pev(i) = lon/180.0*pi + end do + close(10) + end if + + if (is_tele) then + open(10,file=trim(input_path)//'/EARTHQUAKES_tele') + read(10,*) nev_tele + allocate(rev_tele(nev_tele),tev_tele(nev_tele),pev_tele(nev_tele),weight_ev_tele(nev_tele)) + do i=1,nev_tele + read(10,*) depth,lat,lon + rev_tele(i) = Earth_Radius-depth + tev_tele(i) = lat/180.0*pi + pev_tele(i) = lon/180.0*pi + end do + close(10) + end if + ! ---- 数据记录 data record (earthquakes and stations) ---- + if (myid .eq. 0) then + open(100,file=trim(output_path)//'/STATIONS') + do i=1,nst + write(100,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rst(i),tst(i)*180.0/pi,pst(i)*180.0/pi + end do + close(100); + if (is_region) then + open(101,file=trim(output_path)//'/EARTHQUAKES_region') + do i=1,nev + write(101,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rev(i),tev(i)*180.0/pi,pev(i)*180.0/pi + end do + close(101); + end if + if (is_tele) then + open(102,file=trim(output_path)//'/EARTHQUAKES_tele') + do i=1,nev_tele + write(102,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rev_tele(i),tev_tele(i)*180.0/pi,pev_tele(i)*180.0/pi + end do + close(102) + end if + end if + + +! ######################### 生成网格 build mesh grid ##################################### + ! -------- forward modeling grid ---------- + dr=(rr2-rr1)/(nr-1); dt=(tt2-tt1)/(nt-1); dp=(pp2-pp1)/(np-1) + allocate(rr(nr),tt(nt),pp(np)) + do iir=1,nr + rr(iir)=rr1+(iir-1)*dr + end do + do iit=1,nt + tt(iit)=tt1+(iit-1)*dt + end do + do iip=1,np + pp(iip)=pp1+(iip-1)*dp + end do + + ! -------- inversion multigrid ---------- + dinvr=(invr2-invr1)/(ninvr-1); dinvt=(invt2-invt1)/(ninvt-1); dinvp=(invp2-invp1)/(ninvp-1) + allocate(invr(ngrid,ninvr),invt(ngrid,ninvt),invp(ngrid,ninvp)) + + + do igrid=1,ngrid + do iir=1,ninvr + if (iir .eq. 1) then + dinvr = inv_dep(ninvr)-inv_dep(ninvr-1) + else + dinvr = inv_dep(ninvr+1-iir+1)-inv_dep(ninvr+1-iir) + end if + invr(igrid,iir)=Earth_Radius-inv_dep(ninvr+1-iir)-(igrid-1)*dinvr/ngrid + end do + do iit=1,ninvt + invt(igrid,iit)=invt1+(iit-1)*dinvt-(igrid-1)*dinvt/ngrid + end do + do iip=1,ninvp + invp(igrid,iip)=invp1+(iip-1)*dinvp-(igrid-1)*dinvp/ngrid + end do + end do + + ! ------------ 数据记录 data record (multi grid for inversion) ------------- + if (myid==0) then + open(100,file=trim(output_path)//'/multigrid') + do igrid=1,Ngrid + write(100,'(i4,i4,i4,i4)') & + & igrid,ninvr,ninvt,ninvp + do iir=1,ninvr + do iit=1,ninvt + do iip=1,ninvp + write(100,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-invr(igrid,iir),invt(igrid,iit)*180.0/pi,invp(igrid,iip)*180.0/pi + end do + end do + end do + end do + close(100) + end if + +! ######################### 构建背景模型 build the synthetic and true model ##################################### + ! ----------- allocation --------------- + allocate(xi(nr,nt,np),eta(nr,nt,np),zeta(nr,nt,np)) + allocate(a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np),fun(nr,nt,np)) + allocate(xiT(nr,nt,np),etaT(nr,nt,np),zetaT(nr,nt,np)) + allocate(aT(nr,nt,np),bT(nr,nt,np),cT(nr,nt,np),fT(nr,nt,np),funT(nr,nt,np)) + + + filename = trim(input_path)//'/prem_model.txt' + call Read_1D_velocity_3d(filename,rr,nr,nt,np,fun) + + do iir=1,nr + do iit=1,nt + do iip=1,np + + ! ! ega5 test velocity + ! if (rr(iir)>6351) then ! 6371 - 6351 20 km + ! fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + ! elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + ! elseif (rr(iir)>5961) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1) + ! else + ! fun(iir,iit,iip) = 1.0/9.0 + ! end if + + + ! synthetic (initial) model + eta(iir,iit,iip)=0.0; + xi(iir,iit,iip)=0.0; + zeta(iir,iit,iip)=gamma*sqrt(eta(iir,iit,iip)**2+xi(iir,iit,iip)**2) + a(iir,iit,iip)=1.0+2*zeta(iir,iit,iip); + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + + ! true (target) model + if (pp(iip)>=110.0/180*pi .and. pp(iip)<=130.0/180*pi .and. & + & Earth_Radius-rr(iir)>=0.0 .and. Earth_Radius-rr(iir)<=100.0 ) then + sigma1 = sin(7*pi*(pp(iip)-110.0/180*pi)/(20.0/180*pi))* & + & sin(1*pi*(rr(iir)-6271)/50.0) + elseif (pp(iip)>=110.0/180*pi .and. pp(iip)<=130.0/180*pi .and. & + & Earth_Radius-rr(iir)>=100.0 .and. Earth_Radius-rr(iir)<=200.0 ) then + sigma1 = sin(7*pi*(pp(iip)-110.0/180*pi)/(20.0/180*pi))* & + & sin(pi+1*pi*(rr(iir)-6171)/100.0) + elseif (pp(iip)>=110.0/180*pi .and. pp(iip)<=130.0/180*pi .and. & + & Earth_Radius-rr(iir)>=200.0 .and. Earth_Radius-rr(iir)<=800.0 ) then + sigma1 = sin(7*pi*(pp(iip)-110.0/180*pi)/(20.0/180*pi))* & + & sin(1*pi*(rr(iir)-5571)/200.0) + else + sigma1 = 0.0 + end if + + + if (sigma1<0) then + psi = 60.0/180*pi + elseif (sigma1 > 0) then + psi = 150.0/180*pi + else + psi = 0 + end if + + etaT(iir,iit,iip)=ani_p*abs(sigma1)*sin(2*psi); + xiT(iir,iit,iip)=ani_p*abs(sigma1)*cos(2*psi); + zetaT(iir,iit,iip)=gamma*sqrt(etaT(iir,iit,iip)**2+xiT(iir,iit,iip)**2) + + aT(iir,iit,iip)=1.0+2*zetaT(iir,iit,iip); + bT(iir,iit,iip)=1.0-2*xiT(iir,iit,iip); + cT(iir,iit,iip)=1.0+2*xiT(iir,iit,iip); + fT(iir,iit,iip)=-2*etaT(iir,iit,iip); + funT(iir,iit,iip) = fun(iir,iit,iip)/(1+sigma1*slow_p) + end do + end do + end do + + ! 从外部读取模型文件,一般用于从迭代中途开始 + ! if we start the inversion from an input model: + if (isread_model) then + call read_model_3d(read_model_name,nr,nt,np,fun,xi,eta,zeta,a,b,c,f) + else + ! ---- 数据记录 data record (true and initial model)---- + if (myid .eq. 0) then + open(100,file=trim(output_path)//'/model_true') + open(101,file=trim(output_path)//'/model_init') + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & funT(iir,iit,iip),xiT(iir,iit,iip),etaT(iir,iit,iip) + write(101,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100);close(101) + end if + end if + +! ###################### 震源并行, 负载平衡 load balancing ################################## + if (is_region) then + allocate(my_region_source_range(nproc,3)) + ! 分配,每个线程计算那些震源对应的到时 + do iproc=1,nproc + ! 前 k 个 processor 负责的总震源数,应该接近 震源总数的第k个nproc等分点 + my_region_source_range(iproc,1) = (nst*(iproc-1)/nproc)+1 + my_region_source_range(iproc,2) = (nst*(iproc)/nproc) + my_region_source_range(iproc,3) = my_region_source_range(iproc,2)-my_region_source_range(iproc,1)+1 + end do + end if + if (is_tele) then + allocate(my_tele_source_range(nproc,3)) + ! 分配,每个线程计算那些震源对应的到时 + do iproc=1,nproc + ! 前 k 个 processor 负责的总震源数,应该接近 震源总数的第k个nproc等分点 + my_tele_source_range(iproc,1) = (nev_tele*(iproc-1)/nproc)+1 + my_tele_source_range(iproc,2) = (nev_tele*(iproc)/nproc) + my_tele_source_range(iproc,3) = my_tele_source_range(iproc,2)-my_tele_source_range(iproc,1)+1 + end do + end if +! ###################### 计算远震波到达区域的边界 calculate the traveltime of teleseismic events on the boundary ##################### + + if (is_tele) then + allocate(bd_N(nev_tele,nr,np),bd_S(nev_tele,nr,np),bd_W(nev_tele,nr,nt), & + & bd_E(nev_tele,nr,nt),bd_B(nev_tele,nr,np),bd_T(nev_tele,nr,np)) + allocate(bd_N_l(nev_tele,nr,np),bd_S_l(nev_tele,nr,np),bd_W_l(nev_tele,nr,nt), & + & bd_E_l(nev_tele,nr,nt),bd_B_l(nev_tele,nr,np),bd_T_l(nev_tele,nr,np)) + allocate(isbd(nev_tele,5)) + bd_N = 0.0; bd_S = 0.0; bd_W = 0.0; bd_E = 0.0; bd_B = 0.0; bd_T = 0.0; isbd = .false. + bd_N_l = 0.0; bd_S_l = 0.0; bd_W_l = 0.0; bd_E_l = 0.0; bd_B_l = 0.0; bd_T_l = 0.0; + filename = trim(input_path)//'/prem_model.txt' + TTfield_path = trim(output_path)//'/tele_traveltime_field' + + ! calculate the boundary on each processor + do i = my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) + print *, '----------------- calculating tele 2d timetable ... evid: ',i,'----------------' + call eikonal_boundary_traveltime(rr,tt,pp,nr,nt,np,rev_tele(i),tev_tele(i),pev_tele(i) & + & ,filename,TTfield_path,isbd(i,:), & + & bd_N_l(i,:,:),bd_S_l(i,:,:),bd_W_l(i,:,:),bd_E_l(i,:,:),bd_B_l(i,:,:),bd_T_l(i,:,:)) + end do + + + ! processor communication + ! 数据通信 步骤1, 其他线程传输给主线程 + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then ! 负责接受数据 myid .eq. 0, receiver data + do iproc=1,nproc-1 + call mpi_recv(isbd(my_tele_source_range(iproc+1,1):my_tele_source_range(iproc+1,2),:), & + & my_tele_source_range(iproc+1,3)*5,mpi_logical,iproc,tag-1,mpi_comm_world,istat,ierr) + end do + else ! 负责发送数据 myid .ne. 0, send data + call mpi_send(isbd(my_tele_source_range(myid+1,1):my_tele_source_range(myid+1,2),:), & + & my_tele_source_range(myid+1,3)*5,mpi_logical,0,tag-1,mpi_comm_world,ierr) + end if + call mpi_allreduce(bd_N_l,bd_N,nev_tele*nr*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_S_l,bd_S,nev_tele*nr*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_W_l,bd_W,nev_tele*nr*nt,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_E_l,bd_E,nev_tele*nr*nt,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_B_l,bd_B,nev_tele*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_T_l,bd_T,nev_tele*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + call mpi_bcast(isbd,nev_tele*5,mpi_logical,0,mpi_comm_world,ierr) + end if + + +! ######################### 计算真实区域地震到时 regional event true traveltime ###################### + call mpi_barrier(mpi_comm_world,ierr) + allocate(TableT(nr,nt,np),uT(nr,nt,np)) ! 初始化走时场 initial the true timetable + + if (is_region) then + allocate(TtimeT(nev,nst),TtimeT_l(nev,nst)) ! 初始化区域地震真实到时表 initiate true traveltimes + TtimeT = 0.0; TtimeT_l = 0.0 + do j=my_region_source_range(myid+1,1),my_region_source_range(myid+1,2) ! loop STATIONS + ! -------- 求解程函方程 solve eikonal equations ------------ + print *, '----------------- calculating regional true timetable ... evid: ',j,'----------------' + + call FSM_WENO3_PS_sphe_3d_mul(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rst(j),tst(j),pst(j),uT) + ! call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rst(j),tst(j),pst(j),uT) + ! -------- 得到真实走时 calculate true arrival time -------- + do i=1,nev + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rev(i),tev(i),pev(i),TtimeT_l(i,j)) + end do + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(TtimeT_l,TtimeT,nev*nst,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + + ! data record (traveltime from source to receiver) + if ((myid.eq.0) .and. .true.) then + open(100,file=trim(output_path)//'/traveltime_region') + do i=1,nev + do j=1,nst + write(100,'(i4,f8.3,f8.3,f8.3,i4,f8.3,f8.3,f8.3,f8.3)') & + & i,Earth_Radius-rev(i),tev(i)/pi*180,pev(i)/pi*180, & + & j,Earth_Radius-rst(j),tst(j)/pi*180,pst(j)/pi*180, TtimeT(i,j) + end do + end do + close(100) + end if + end if +! ######################### 计算真实远震到时 tele seismic event true traveltime ###################### + if (is_tele) then + allocate(Ttime_teleT(nev_tele,nst),Ttime_teleT_l(nev_tele,nst)); ! 初始化远震真实到时表 initiate true traveltimes + Ttime_teleT = 0.0; Ttime_teleT_l = 0.0 + + do i=my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) ! loop ev_tele + ! -------- 求解远震程函方程 solve eikonal equations ------------ + print *, '----------------- calculating tele true timetable ... evid: ',i,'----------------' + call FSM_WENO3_tele_sphe_3d_ver2(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,funT,isbd(i,:) & + & ,bd_N(i,:,:),bd_S(i,:,:),bd_W(i,:,:),bd_E(i,:,:),bd_B(i,:,:),TableT) + ! -------- 得到真实走时 calculate true arrival time -------- + do j=1,nst + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rst(j),tst(j),pst(j),Ttime_teleT_l(i,j)) + end do + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(Ttime_teleT_l,Ttime_teleT,nev_tele*nst,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + ! data record (traveltime from source to receiver) + if ((myid.eq.0) .and. .true.) then + open(100,file=trim(output_path)//'/traveltime_tele') + do i=1,nev_tele + do j=1,nst + write(100,'(i4,f8.3,f8.3,f8.3,i4,f8.3,f8.3,f8.3,f8.3)') & + & i,Earth_Radius-rev_tele(i),tev_tele(i)/pi*180,pev_tele(i)/pi*180, & + & j,Earth_Radius-rst(j),tst(j)/pi*180,pst(j)/pi*180, Ttime_teleT(i,j) + end do + end do + close(100) + end if + end if +! ######################## 反演开始 inversion start ########################## + ! ----- 初始化反演参数 initiate inversion parameters ---- + old_obj = 0; obj = 0; obj_region=0; obj_tele=0; obj_tele_l=0;! 目标函数 objective function + + if (is_region) then + allocate(all_Ks_region(nr,nt,np),all_Kxi_region(nr,nt,np),all_Keta_region(nr,nt,np)) + allocate(Ttime(nev,nst)) + Ttime = 0.0; all_Ks_region = 0.0; all_Kxi_region = 0.0; all_Keta_region = 0.0 + allocate(all_Ks_region_l(nr,nt,np),all_Kxi_region_l(nr,nt,np),all_Keta_region_l(nr,nt,np)) + allocate(Ttime_l(nev,nst)) + Ttime_l = 0.0; all_Ks_region_l = 0.0; all_Kxi_region_l = 0.0; all_Keta_region_l = 0.0 + end if + if (is_tele) then + allocate(all_Ks_tele(nr,nt,np),all_Kxi_tele(nr,nt,np),all_Keta_tele(nr,nt,np)) + allocate(Ttime_tele(nev_tele,nst)) + Ttime_tele = 0.0; all_Ks_tele = 0.0; all_Kxi_tele = 0.0; all_Keta_tele = 0.0 + allocate(all_Ks_tele_l(nr,nt,np),all_Kxi_tele_l(nr,nt,np),all_Keta_tele_l(nr,nt,np)) + allocate(Ttime_tele_l(nev_tele,nst)) + Ttime_tele_l = 0.0; all_Ks_tele_l = 0.0; all_Kxi_tele_l = 0.0; all_Keta_tele_l = 0.0 + + end if + + allocate(Ks(nr,nt,np),Kxi(nr,nt,np),Keta(nr,nt,np)) + allocate(Table(nr,nt,np),u(nr,nt,np),TableADJ(nr,nt,np)) + allocate(all_Kernel(nr,nt,np,3),update_value(nr,nt,np,3)) + Ks = 0.0; Kxi = 0.0; Keta = 0.0; Table = 0.0; u = 0.0; TableADJ = 0.0; + all_Kernel = 0.0; update_value = 0.0; + + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- inversion start ... ----------------' + print *, ' ' + end if + + do iter = stIter,edIter ! loop iterations + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- iteration ',iter,' starting ... ----------------' + end if + + ! ----- 初始化参数 initiate parameters ------ + obj = 0.0; obj_region=0.0; obj_region_l=0.0; obj_tele=0.0; obj_tele_l=0; + all_Kernel = 0.0; update_value = 0.0; + +! ######################## 区域地震敏感核计算 calculate sensitivity kernel for regional events ########################## + if (is_region) then + call mpi_barrier(mpi_comm_world,ierr) + ! ----- 初始化参数 initiate parameters ------ + all_Ks_region_l = 0; all_Kxi_region_l = 0; all_Keta_region_l = 0; + all_Ks_region = 0; all_Kxi_region = 0; all_Keta_region = 0; + + do j=my_region_source_range(myid+1,1),my_region_source_range(myid+1,2) ! loop STATIONS + ! ######################## 计算合成走时场 calculate synthetic timetable ######################## + print *, '----------------- calculating regional synthetic timetable and kernel ... evid: ',j,'----------------' + + call FSM_WENO3_PS_sphe_3d_mul(rr,tt,pp,nr,nt,np,a,b,c,f,Table,fun,rst(j),tst(j),pst(j),u) + + ! -------- 得到合成走时 calculate synthetic arrival time at receiver -------- + do i=1,nev + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rev(i),tev(i),pev(i),Ttime_l(i,j)) + end do + + ! ######################## 计算伴随场 calculate adjoint timetable ######################## + + ! -------- 构造伴随源 build adjoint source (absolute traveltime difference) ------- + allocate(sourceADJ(nev)) + call Adjoint_Source_Dt(Ttime_l(:,j),TtimeT(:,j),nev,sourceADJ,tmp_obj) ! absolute traveltime difference + + call FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,nev,rev,tev,pev,sourceADJ) + + deallocate(sourceADJ) + ! ######################## 计算敏感核 calculate sensitivity kernel ######################## + + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! ------- 抹去伴随源处的大函数值 mask the source ------- + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Ks,rst(j),tst(j),pst(j)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Kxi,rst(j),tst(j),pst(j)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Keta,rst(j),tst(j),pst(j)) + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + all_Ks_region_l = all_Ks_region_l + Ks; + all_Kxi_region_l = all_Kxi_region_l + Kxi; + all_Keta_region_l = all_Keta_region_l + Keta; + obj_region_l = obj_region_l + tmp_obj + + ! ----- data recored (local event kernel) ------ + if (.false. .and. myid .eq. 0) then + select case (j) + case (1:9) + write(form2,'(I1)') j + case (10:99) + write(form2,'(I2)') j + end select + filename=trim(output_path)//'/region_event_kernel_ev'//trim(form2) + open(100*(myid+1),file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(Ks(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Kxi(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Keta(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & Ks(iir,iit,iip)/tmp_dp,Kxi(iir,iit,iip)/tmp_dp,Keta(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100*(myid+1)) + end if + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约,把所有进程的kernel和obj求和,传输给所有进程 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(all_Ks_region_l,all_Ks_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Kxi_region_l,all_Kxi_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Keta_region_l,all_Keta_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(obj_region_l,obj_region,1,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(Ttime_l,Ttime,nev*nst,mpi_double_precision,mpi_max,mpi_comm_world,ierr) + + + + ! ----- data recored (regional traveltime misfit at each iteration) ------ + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + filename=trim(output_path)//'/misfit_step'//trim(form)//'_region' + open(998, file=trim(filename)) + do i=1,nev + do j=1,nst + write(998,'(f10.5,f10.5,f10.5)') & + & Ttime(i,j)-TtimeT(i,j), Ttime(i,j), TtimeT(i,j) + end do + end do + close(998) + end if + + ! ----- data recored (region misfit kernel) ------ + if (.false. .and. myid .eq. 0) then + filename=trim(output_path)//'/region_misfit_kernel' + open(100,file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(all_Ks_region(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Kxi_region(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Keta_region(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & all_Ks_region(iir,iit,iip)/tmp_dp,all_Kxi_region(iir,iit,iip)/tmp_dp, & + & all_Keta_region(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100) + end if + + end if +! ######################## 远震敏感核计算 calculate sensitivity kernel for teleseismic events ########################## + if (is_tele) then + call mpi_barrier(mpi_comm_world,ierr) + ! ----- 初始化参数 initiate parameters ------ + all_Ks_tele_l = 0; all_Kxi_tele_l = 0; all_Keta_tele_l = 0; + all_Ks_tele = 0; all_Kxi_tele = 0; all_Keta_tele = 0; + + do i=my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) + ! ######################## 计算合成走时场 calculate synthetic timetable ######################## + ! -------- 求解远震程函方程 solve eikonal equations ------------ + print *, '----------------- calculating tele synthetic timetable and kernel ... evid: ',i,' ----------------' + + call FSM_WENO3_tele_sphe_3d_ver2(rr,tt,pp,nr,nt,np,a,b,c,f,fun,isbd(i,:) & + & ,bd_N(i,:,:),bd_S(i,:,:),bd_W(i,:,:),bd_E(i,:,:),bd_B(i,:,:),Table) + ! -------- 得到真实走时 calculate true arrival time -------- + do j=1,nst + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rst(j),tst(j),pst(j),Ttime_tele_l(i,j)) + end do + + ! ######################## 计算伴随场 calculate adjoint timetable ######################## + + allocate(sourceADJ(nst)) + call Adjoint_Source_DDt(Ttime_tele_l(i,:),Ttime_teleT(i,:),tst,pst,nst,max_deg,sourceADJ,tmp_obj) ! absolute traveltime difference + + call FSM_O1_Adj_tele_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nst,rst,tst,pst,sourceADJ,isbd) + deallocate(sourceADJ) + + ! ######################## 计算敏感核 calculate sensitivity kernel ######################## + + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + all_Ks_tele_l = all_Ks_tele_l + Ks; + all_Kxi_tele_l = all_Kxi_tele_l + Kxi; + all_Keta_tele_l = all_Keta_tele_l + Keta; + obj_tele_l = obj_tele_l + tmp_obj + + ! ----- data recored (tele event kernel) ------ + if (.false. .and. myid .eq. 0) then + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename=trim(output_path)//'/tele_event_kernel_ev'//trim(form2) + open(100*(myid+1),file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(Ks(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Kxi(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Keta(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & Ks(iir,iit,iip)/tmp_dp,Kxi(iir,iit,iip)/tmp_dp,Keta(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100*(myid+1)) + end if + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约,把所有进程的kernel和obj求和,传输给所有进程 + ! sum kernels and objective functions + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(all_Ks_tele_l,all_Ks_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Kxi_tele_l,all_Kxi_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Keta_tele_l,all_Keta_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(obj_tele_l,obj_tele,1,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(Ttime_tele_l,Ttime_tele,nev_tele*nst,mpi_double_precision,mpi_max,mpi_comm_world,ierr) + + + + + ! ----- data recored (teleseismic traveltime misfit at each iteration) ------ + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + filename=trim(output_path)//'/misfit_step'//trim(form)//'_tele' + open(998, file=trim(filename)) + do i=1,nev_tele + do j=1,nst-1 + do k=j+1,nst + call Epicenter_Distance_sphere(tst(j),pst(j),tst(k),pst(k),deg) + if (deg < max_deg) then + write(998,'(f10.5,f10.5,f10.5,f10.5,f10.5)') & + & (Ttime_tele(i,j)-Ttime_tele(i,k))-(Ttime_teleT(i,j)-Ttime_teleT(i,k)), & + & Ttime_tele(i,j), Ttime_tele(i,k), Ttime_teleT(i,j), Ttime_teleT(i,k) + end if + end do + end do + end do + close(998) + end if + + ! ----- data recored (tele misfit kernel) ------ + if (.false. .and. myid .eq. 0) then + filename=trim(output_path)//'/tele_misfit_kernel' + open(100,file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(all_Ks_tele(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Kxi_tele(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Keta_tele(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & all_Ks_tele(iir,iit,iip)/tmp_dp,all_Kxi_tele(iir,iit,iip)/tmp_dp, & + & all_Keta_tele(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100) + end if + + end if + +! ################################### 模型更新 model update ########################################## + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- model update ... iter: ',iter,' ----------------' + end if + + ! ---- 更新目标函数 update objective function ------- + obj = region_ratio * obj_region + tele_ratio * obj_tele + + ! ----- data recored (misfit and step size at each iteration) ------ + if ((myid .eq. 0)) then + if (iter .eq. 1) then + open(999,file=trim(output_path)//'/obj') + else + open(999,file=trim(output_path)//'/obj',access='append') + end if + write(999,'(f11.2,f11.2,f11.2,f9.6)') obj, obj_region,obj_tele,stepsize + close(999) + end if + + ! --------- 整合kernel (sum kernels) --------------------- + if (is_region) then + all_Kernel(:,:,:,1) = all_Kernel(:,:,:,1) + region_ratio * all_Ks_region + all_Kernel(:,:,:,2) = all_Kernel(:,:,:,2) + region_ratio * all_Kxi_region + all_Kernel(:,:,:,3) = all_Kernel(:,:,:,3) + region_ratio * all_Keta_region + end if + if (is_tele) then + all_Kernel(:,:,:,1) = all_Kernel(:,:,:,1) + tele_ratio * all_Ks_tele + all_Kernel(:,:,:,2) = all_Kernel(:,:,:,2) + tele_ratio * all_Kxi_tele + all_Kernel(:,:,:,3) = all_Kernel(:,:,:,3) + tele_ratio * all_Keta_tele + end if + + + ! ------------ multiple grid parameterization ------------ + ! call Parameter_Update_Multigrid(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + ! & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + call Parameter_Update_Multigrid_ver2(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + do iir=1,nr + do iit=1,nt + do iip=1,np + ! model parameter update + fun(iir,iit,iip) = fun(iir,iit,iip)*(1-update_value(iir,iit,iip,1)) + xi(iir,iit,iip) = xi(iir,iit,iip)-update_value(iir,iit,iip,2) + eta(iir,iit,iip) = eta(iir,iit,iip)-update_value(iir,iit,iip,3) + + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + end do + end do + end do + +! ################################## 调整下降步长 modify stepsize ############################## + + if (iter == 1 ) then + if (myid .eq. 0) then + write(*,'(a,f9.2)') 'iter 1, obj is', obj + write(*,'(a,f9.6)') 'iter 1, stepsize is', stepsize + end if + elseif (iter >= 2 .and. obj < old_obj) then + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function decreases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + elseif (iter >= 2 .and. obj >= old_obj) then + stepsize = max(0.003,stepsize*0.97) ! ega5 会注释掉步长变化 + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function increases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + end if + +! ################################## 迭代结束 iteration over ############################## + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- iteration ',iter,' over ----------------' + print *, ' ' + end if + + old_obj = obj + + ! ---- data recored (parameters at each iteration) ---- + if ((myid .eq. 0) .and. .true.) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + + filename=trim(output_path)//'/model_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + + if (myid .eq. 0) then + call CPU_TIME(time_end) + write(*,'(a,f10.2,a)') 'runtime is: ',time_end - time_begin, 'second' + end if + + + + end do + +! 储存释放 release space + if (is_tele) then + deallocate(rev_tele,tev_tele,pev_tele,weight_ev_tele) + deallocate(bd_N,bd_S,bd_W,bd_E,bd_B,bd_T,isbd) + deallocate(Ttime_teleT,Ttime_tele) + deallocate(Ttime_teleT_l,Ttime_tele_l) + deallocate(all_Ks_tele,all_Kxi_tele,all_Keta_tele) + deallocate(all_Ks_tele_l,all_Kxi_tele_l,all_Keta_tele_l) + deallocate(my_tele_source_range) + end if + if (is_region) then + deallocate(rev,tev,pev,weight_ev) + deallocate(TtimeT,Ttime) + deallocate(TtimeT_l,Ttime_l) + deallocate(all_Ks_region,all_Kxi_region,all_Keta_region) + deallocate(all_Ks_region_l,all_Kxi_region_l,all_Keta_region_l) + deallocate(my_region_source_range) + end if + + deallocate(rst,tst,pst,weight_st) + deallocate(rr,tt,pp,invr,invt,invp) + deallocate(xi,eta,zeta) + deallocate(a,b,c,f,fun) + deallocate(xiT,etaT,zetaT) + deallocate(aT,bT,cT,fT,funT) + deallocate(TableT,uT,Table,u,TableADJ) + + deallocate(Ks,Kxi,Keta) + deallocate(all_kernel,update_value) + + deallocate(inv_dep) + + + call mpi_finalize(ierr) + +end program eikonal_2d + diff --git a/test/old_tests/inversion_tele/fortran_code/eikon_solver_mpi.f90 b/test/old_tests/inversion_tele/fortran_code/eikon_solver_mpi.f90 new file mode 100644 index 0000000..18d9e09 --- /dev/null +++ b/test/old_tests/inversion_tele/fortran_code/eikon_solver_mpi.f90 @@ -0,0 +1,5333 @@ +subroutine FSM_WENO3_tele_sphe_3d(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,u,ischange) + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: T_old(nr,nt,np) + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision,parameter :: tol = (10.0)**(-5),eps=10.0**(-12) + integer,parameter :: MaxIter=500 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: tmp + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 build eikonal matrix ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + ! 正式迭代,更新 iteration start, update T + do iter =1,MaxIter + T_old = T + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr <-> 1, y: nt <-> 1, z: np <-> 1 + + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + + if(ischange(iir,iit,iip)==1) then + if( iir>1 .and. iir1 .and. iit1 .and. iip0) then + T(i,j,1) = bd_W_interp(i,j) + u(i,j,1) = bd_W_interp(i,j) + ischange(i,j,1) = 0 + else + T(i,j,1) = infT + ischange(i,j,1) = 1 + end if + else + if (bd_W_interp(i,j)>0) then + u(i,j,1) = bd_W_interp(i,j) + end if + end if + + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_tt,bd_W) + + + + ! #--------------------------- 东 E 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_E') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_E(ni,nj),bd_rr(ni),bd_tt(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_E(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dt = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_tt(j) = y1 + (j-1)*bd_dt + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_tt,ni,nj,bd_E,rr,tt,nr,nt,bd_E_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,nt + if (isE) then + if (bd_E_interp(i,j)>0) then + T(i,j,np) = bd_E_interp(i,j) + u(i,j,np) = bd_E_interp(i,j) + ischange(i,j,np) = 0 + else + T(i,j,np) = infT + ischange(i,j,np) = 1 + end if + else + if (bd_E_interp(i,j)>0) then + u(i,j,np) = bd_E_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_tt,bd_E) + + + + ! #--------------------------- 北 N 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_N') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_N(ni,nj),bd_rr(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_N(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_pp,ni,nj,bd_N,rr,pp,nr,np,bd_N_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,np + if (isN) then + if (bd_N_interp(i,j)>0) then + T(i,nt,j) = bd_N_interp(i,j) + u(i,nt,j) = bd_N_interp(i,j) + ischange(i,nt,j) = 0 + else + T(i,nt,j) = infT + ischange(i,nt,j) = 1 + end if + else + if (bd_N_interp(i,j)>0) then + u(i,nt,j) = bd_N_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_pp,bd_N) + + + + ! #--------------------------- 南 S 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_S') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_S(ni,nj),bd_rr(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_S(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_pp,ni,nj,bd_S,rr,pp,nr,np,bd_S_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,np + if (isS) then + if (bd_S_interp(i,j)>0) then + T(i,1,j) = bd_S_interp(i,j) + u(i,1,j) = bd_S_interp(i,j) + ischange(i,1,j) = 0 + else + T(i,1,j) = infT + ischange(i,1,j) = 1 + end if + else + if (bd_S_interp(i,j)>0) then + u(i,1,j) = bd_S_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_pp,bd_S) + + + ! #--------------------------- 顶 Top 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_T') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_T(ni,nj),bd_tt(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_T(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dt = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_tt(i) = x1 + (i-1)*bd_dt + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_tt,bd_pp,ni,nj,bd_T,tt,pp,nt,np,bd_T_interp) + + ! 赋值给 走时场T + do i=1,nt + do j=1,np + if (isT) then + if (bd_T_interp(i,j)>0) then + T(nr,i,j) = bd_T_interp(i,j) + ischange(nr,i,j) = 0 + surface(i,j) = bd_T_interp(i,j) + else + T(nr,i,j) = infT + ischange(nr,i,j) = 1 + end if + else + if (bd_T_interp(i,j)>0) then + surface(i,j) = bd_T_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_tt,bd_pp,bd_T) + + + ! #--------------------------- 底 Bottom 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_B') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_B(ni,nj),bd_tt(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_B(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dt = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_tt(i) = x1 + (i-1)*bd_dt + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_tt,bd_pp,ni,nj,bd_B,tt,pp,nt,np,bd_B_interp) + + ! 赋值给 走时场T + do i=1,nt + do j=1,np + if (isB) then + if (bd_T_interp(i,j)>0) then + T(1,i,j) = bd_B_interp(i,j) + u(1,i,j) = bd_B_interp(i,j) + ischange(1,i,j) = 0 + else + T(1,i,j) = infT + ischange(1,i,j) = 1 + end if + else + if (bd_T_interp(i,j)>0) then + u(1,i,j) = bd_B_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_tt,bd_pp,bd_B) + +end subroutine + +subroutine boundary_interp(xx1,yy1,nx1,ny1,val1,xx2,yy2,nx2,ny2,val2) + ! 将 1 套网格的值 插值到 2套网格上,允许外插 + integer :: nx1,ny1,nx2,ny2 + double precision :: xx1(nx1),yy1(ny1),xx2(nx2),yy2(ny2) + double precision :: dx1,dy1,val1(nx1,ny1),val2(nx2,ny2) + double precision :: r1,r2 + integer i,j,idx0,idy0 + dx1 = xx1(2)-xx1(1) + dy1 = yy1(2)-yy1(1) + + + + do i=1,nx2 + do j=1,ny2 + idx0 = floor((xx2(i)-xx1(1))/dx1)+1 + idy0 = floor((yy2(j)-yy1(1))/dy1)+1 + + if (idx0<1 .or. idx0>nx1-1 .or. idy0<1 .or. idy0>ny1-1) then + ! 允许外插 + idx0 = min(nx1-1,max(1,idx0)) + idy0 = min(ny1-1,max(1,idy0)) + end if + + + r1 = min(1.0, (xx2(i)-xx1(idx0))/dx1 ) + r2 = min(1.0, (yy2(j)-yy1(idy0))/dy1 ) + + val2(i,j) = (1-r1)*(1-r2)*val1(idx0,idy0) + (1-r1)*(r2)*val1(idx0,idy0+1) & + & + (r1)*(1-r2)*val1(idx0+1,idy0) + (r1)*(r2)*val1(idx0+1,idy0+1) + + end do + end do +end subroutine + +subroutine tele_error_estimation(rr,tt,pp,nr,nt,np,T,filename,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + character(Len=80) :: filename + + double precision,allocatable :: tauP_solution(:,:),tauP_tt(:),tauP_pp(:) + double precision :: tauP_dt,tauP_dp,tauP_solution_interp(nt,np) + + double precision :: L1_err, Linf_err + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取指定文件 + open(10, file=filename) + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(tauP_solution(ni,nj),tauP_tt(ni),tauP_pp(nj)) + + + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, tauP_solution(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + tauP_dt = (x2-x1)/(ni-1) + tauP_dp = (y2-y1)/(nj-1) + do i=1,ni + tauP_tt(i) = x1 + (i-1)*tauP_dt + end do + do j=1,nj + tauP_pp(j) = y1 + (j-1)*tauP_dp + end do + + ! 远震到时 插值到 计算区域 + call boundary_interp(tauP_tt,tauP_pp,ni,nj,tauP_solution,tt,pp,nt,np,tauP_solution_interp) + + ! 走时场 T 插值到指定深度 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + error(iit,iip,1) = tauP_solution_interp(iit,iip) + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + end do + end do + L1_err = L1_err/(nt*np) + ! 释放动态数组 + deallocate(tauP_solution,tauP_tt,tauP_pp) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + +end subroutine +! ----------------------- end for ega1 ---------------------- + + +! ----------------------- for ega2 ---------------------- +subroutine load_boundary(rr,tt,pp,nr,nt,np,T,ischange,taup_fn,isbd,tele_location) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np),ischange(nr,nt,np) + double precision,parameter :: Radius = 6371.0,pi=3.14159265358979323846264338327950288 + logical :: isbd(6),isN,isS,isW,isE,isT,isB ! N S W E T B + double precision :: tele_location(3) + + ! tauP database + character(Len=80) :: taup_fn + integer :: taup_nsrc_dep,taup_nrec_dep,taup_ndegree + double precision,allocatable :: taup_time(:,:,:),taup_src_dep(:),taup_rec_dep(:),taup_degree(:) + double precision :: tmp_read ! useless for read + + ! boundary points + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: r1,r2,r3 ! linear interpolation + double precision :: src,rec,dis + integer :: id1,id2,id3 + ! otheres + integer :: i,j,k !iterative index + + + ! 读取 tauP 数据库 三列分别是 震源深度,台站深度,和震中距 + open(10, file=taup_fn) + read(10, *) taup_nsrc_dep,taup_nrec_dep,taup_ndegree + + allocate(taup_time(taup_nsrc_dep,taup_nrec_dep,taup_ndegree)) + allocate(taup_src_dep(taup_nsrc_dep),taup_rec_dep(taup_nrec_dep),taup_degree(taup_ndegree)) + + read(10, *) taup_src_dep + read(10, *) taup_rec_dep + read(10, *) taup_degree + + do i=1,taup_nsrc_dep + do j=1,taup_nrec_dep + do k=1,taup_ndegree + read(10, *) tmp_read,tmp_read,tmp_read,taup_time(i,j,k) + end do + end do + end do + close(10) + ! 插值边界 + + isN=isbd(1);isS=isbd(2) + isW=isbd(3);isE=isbd(4) + isT=isbd(5);isB=isbd(6) + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + + ! 北边界 North + if (isN) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(nt,j), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(nt,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,nt,j)) + ischange(i,nt,j) = 0 + end do + end do + end if + + ! 南边界 South + if (isS) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(1,j), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(1,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,1,j)) + ischange(i,1,j) = 0 + end do + end do + end if + + ! 西边界 West + if (isW) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,1), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(j,1) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,j,1)) + ischange(i,j,1) = 0 + end do + end do + end if + + ! 东边界 East + if (isE) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,np), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(j,np) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,j,np)) + ischange(i,j,np) = 0 + end do + end do + end if + + ! 上边界 top (一般是不插值的,遂略去) + + ! 下边界 bottom + if (isB) then + do i=1,nt + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(1),震中距:epicenter_dis(i,j), + src = tele_location(1) + rec = Radius-rr(1) + dis = epicenter_dis(i,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(1,i,j)) + ischange(1,i,j) = 0 + end do + end do + end if + + + deallocate(taup_time,taup_src_dep,taup_rec_dep,taup_degree) + +end subroutine + +subroutine taup_data_interp(src,rec,deg,time,ns,nr,nd,s,r,d,v) + integer :: ns,nr,nd + double precision :: time(ns,nr,nd),src(ns),rec(nr),deg(nd) + double precision :: s,r,d,v + + integer :: id1,id2,id3,k + double precision :: r1,r2,r3 + ! 震源插值 + ! do k=1,ns-1 + ! if (src(k)<= s .and. src(k+1) > s ) then + ! id1=k + ! exit + ! elseif (src(1) > s) then + ! id1=1 + ! exit + ! elseif (src(ns) <= s) then + ! id1=ns-1 + ! exit + ! end if + ! end do + ! r1 = (s - src(id1)) / (src(id1+1)-src(id1)) + + id1 = 1 + + ! 台站插值 (允许外插) + do k=1,nr-1 + if (rec(k)<= r .and. rec(k+1) > r ) then + id2=k + exit + elseif (rec(1) > r) then + id2=1 + exit + elseif (rec(nr) <= r) then + id2=nr-1 + exit + end if + end do + r2 = (r - rec(id2)) / (rec(id2+1)-rec(id2)) + + ! 震中距插值 (允许外插) + do k=1,nd-1 + if (deg(k)<= d .and. deg(k+1) > d ) then + id3=k + exit + elseif (deg(1) > d) then + id3=1 + exit + elseif (deg(nd) <= d) then + id3=nd-1 + exit + end if + end do + r3 = (d - deg(id3)) / (deg(id3+1)-deg(id3)) + + ! v = (1-r1)*(1-r2)*(1-r3)*time(id1,id2,id3) + (1-r1)*(1-r2)*(r3)*time(id1,id2,id3+1) & + ! & + (1-r1)*(r2)*(1-r3)*time(id1,id2+1,id3) + (1-r1)*(r2)*(r3)*time(id1,id2+1,id3+1) & + ! & + (r1)*(1-r2)*(1-r3)*time(id1+1,id2,id3) + (r1)*(1-r2)*(r3)*time(id1+1,id2,id3+1) & + ! & + (r1)*(r2)*(1-r3)*time(id1+1,id2+1,id3) + (r1)*(r2)*(r3)*time(id1+1,id2+1,id3+1) + + v = (1-r2)*(1-r3)*time(id1,id2,id3) + (1-r2)*(r3)*time(id1,id2,id3+1) & + & + (r2)*(1-r3)*time(id1,id2+1,id3) + (r2)*(r3)*time(id1,id2+1,id3+1) + + +end subroutine + +subroutine tele_error_estimation_ver2(rr,tt,pp,nr,nt,np,T,taup_fn,tele_location,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep,tele_location(3) + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + ! tauP database + character(Len=80) :: taup_fn + integer :: taup_nsrc_dep,taup_nrec_dep,taup_ndegree + double precision,allocatable :: taup_time(:,:,:),taup_src_dep(:),taup_rec_dep(:),taup_degree(:) + double precision :: tmp_read ! useless for read + + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: src,rec,dis,traveltime + + double precision :: L1_err, Linf_err + + + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,k,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取 tauP 数据库 三列分别是 震源深度,台站深度,和震中距 + open(10, file=taup_fn) + read(10, *) taup_nsrc_dep,taup_nrec_dep,taup_ndegree + + allocate(taup_time(taup_nsrc_dep,taup_nrec_dep,taup_ndegree)) + allocate(taup_src_dep(taup_nsrc_dep),taup_rec_dep(taup_nrec_dep),taup_degree(taup_ndegree)) + + read(10, *) taup_src_dep + read(10, *) taup_rec_dep + read(10, *) taup_degree + + do i=1,taup_nsrc_dep + do j=1,taup_nrec_dep + do k=1,taup_ndegree + read(10, *) tmp_read,tmp_read,tmp_read,taup_time(i,j,k) + end do + end do + end do + close(10) + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + ! 指定深度 tauP 走时 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-dep,震中距:epicenter_dis(iit,iip), + src = tele_location(1) + rec = dep + dis = epicenter_dis(iit,iip) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,traveltime) + + error(iit,iip,1) = traveltime + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + + end do + end do + L1_err = L1_err/(nt*np) + + ! 释放动态数组 + deallocate(taup_time,taup_src_dep,taup_rec_dep,taup_degree) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + +end subroutine +! ----------------------- end for ega2 ---------------------- + + +! ----------------------- for ega3 ---------------------- + +subroutine FSM_WENO3_PS_sphe_2d(rr,tt,nr,nt,spha,sphb,T,fun,r0,t0,u) + integer :: nr,nt + double precision :: spha(nr,nt),sphb(nr,nt) + double precision :: rr(nr),tt(nt),a(nr,nt),b(nr,nt),T(nr,nt),fun(nr,nt),r0,t0,ischange(nr,nt),u(nr,nt) + double precision :: dr,dt,T0v(nr,nt),T0r(nr,nt),T0t(nr,nt),a0,b0,fun0 + double precision :: tau(nr,nt),px1,px2,py1,py2,tpT,Htau,wx1,wx2,wy1,wy2 + integer :: iir,iit,iter,xdirec,ydirec + double precision :: L1_dif,Linf_dif,L1_err,Linf_err,tau_old(nr,nt),sigr,sigt + integer,parameter :: MaxIter = 2000 + double precision,parameter :: tol=(10.0)**(-4),eps=(10.0)**(-12) + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); + + do iir=1,nr + do iit=1,nt + a(iir,iit) = spha(iir,iit) + b(iir,iit) = sphb(iir,iit)/(rr(iir)**2) + end do + end do + + a0=(1-r1)*(1-r2)*a(idr0,idt0)+(1-r1)*r2*a(idr0,idt0+1) & + & +r1*(1-r2)*a(idr0+1,idt0)+r1*r2*a(idr0+1,idt0+1) + + b0=(1-r1)*(1-r2)*b(idr0,idt0)+(1-r1)*r2*b(idr0,idt0+1) & + & +r1*(1-r2)*b(idr0+1,idt0)+r1*r2*b(idr0+1,idt0+1) + + fun0=(1-r1)*(1-r2)*fun(idr0,idt0)+(1-r1)*r2*fun(idr0,idt0+1) & + & +r1*(1-r2)*fun(idr0+1,idt0)+r1*r2*fun(idr0+1,idt0+1) + + do iir=1,nr + do iit=1,nt + T0v(iir,iit) = fun0*sqrt((1.0/a0)*(rr(iir)-r0)**2 + 1.0/b0*(tt(iit)-t0)**2) + if (T0v(iir,iit) .eq. 0) then + T0r(iir,iit) = 0 + T0t(iir,iit) = 0 + else + T0r(iir,iit) = fun0**2*(1.0/a0*(rr(iir)-r0))/T0v(iir,iit) + T0t(iir,iit) = fun0**2*(1.0/b0*(tt(iit)-y0))/T0v(iir,iit) + end if + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2) then + tau(iir,iit) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + ischange(iir,iit)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt) then + write(*,*) 'source on the boundary, mesh error' + pause + end if + else + tau(iir,iit) = 1 + ischange(iir,iit)=1 + end if + + end do + end do + + ! step 2, solve Tau, H(tau) = a tau_x^2+ b tau_y^2 + (2aTx-2cTy) tau_x + (2bTy-2cTx) tau_y + ! -2c tau_x tau_y + (aTx^2+bTy^2-2cTxTy) = f^2 + + do iter =1,MaxIter + L1_dif=10000; Linf_dif=10000;L1_err=0;Linf_err=0; + tau_old = tau + do xdirec = -1,1,2 + do ydirec = -1,1,2 + ! iter 1 x: 1 -> nr, y: 1 -> nt + ! iter 2 x: 1 -> nr, y: nt -> 1 + ! iter 3 x: nr -> 1, y: 1 -> nt + ! iter 4 x: nr -> 1, y: nt -> 1 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*xdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*xdirec),-xdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*ydirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*ydirec),-ydirec + if(ischange(iir,iit)==1) then + + sigr=sqrt(a(iir,iit))*T0v(iir,iit);sigt=sqrt(b(iir,iit))*T0v(iir,iit) + coe=1.0/((sigr/dr)+(sigt/dt)) + + if(iir==2) then + px1=(tau(iir,iit)-tau(iir-1,iit))/dr; + wx2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir+1,iit)+tau(iir+2,iit))**2)/ & + & (eps+(tau(iir-1,iit)-2*tau(iir,iit)+tau(iir+1,iit))**2))**2) + px2=(1-wx2)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx2*(-3*tau(iir,iit)+4*tau(iir+1,iit)-tau(iir+2,iit))/2/dr; + elseif (iir==nr-1) then + wx1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir-1,iit)+tau(iir-2,iit))**2)/ & + & (eps+(tau(iir+1,iit)-2*tau(iir,iit)+tau(iir-1,iit))**2))**2) + px1=(1-wx1)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx1*(3*tau(iir,iit)-4*tau(iir-1,iit)+tau(iir-2,iit))/2/dr; + px2=(tau(iir+1,iit)-tau(iir,iit))/dr; + else + wx1=1.0/(1.0+2*((eps+(tau(iir,iit)-2*tau(iir-1,iit)+tau(iir-2,iit))**2)/ & + & (eps+(tau(iir+1,iit)-2*tau(iir,iit)+tau(iir-1,iit))**2))**2) + px1=(1.0-wx1)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx1*(3*tau(iir,iit)-4*tau(iir-1,iit)+tau(iir-2,iit))/2/dr; + wx2=1.0/(1.0+2*((eps+(tau(iir,iit)-2*tau(iir+1,iit)+tau(iir+2,iit))**2)/ & + & (eps+(tau(iir-1,iit)-2*tau(iir,iit)+tau(iir+1,iit))**2))**2) + px2=(1.0-wx2)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx2*(-3*tau(iir,iit)+4*tau(iir+1,iit)-tau(iir+2,iit))/2/dr; + end if + + + if(iit==2) then + py1=(tau(iir,iit)-tau(iir,iit-1))/dt; + wy2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit+1)+tau(iir,iit+2))**2)/ & + & (eps+(tau(iir,iit-1)-2*tau(iir,iit)+tau(iir,iit+1))**2))**2) + py2=(1-wy2)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy2*(-3*tau(iir,iit)+4*tau(iir,iit+1)-tau(iir,iit+2))/2/dt; + elseif (iit==nt-1) then + wy1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit-1)+tau(iir,iit-2))**2)/ & + & (eps+(tau(iir,iit+1)-2*tau(iir,iit)+tau(iir,iit-1))**2))**2) + py1=(1-wy1)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy1*(3*tau(iir,iit)-4*tau(iir,iit-1)+tau(iir,iit-2))/2/dt; + py2=(tau(iir,iit+1)-tau(iir,iit))/dt; + else + wy1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit-1)+tau(iir,iit-2))**2)/ & + & (eps+(tau(iir,iit+1)-2*tau(iir,iit)+tau(iir,iit-1))**2))**2) + py1=(1-wy1)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy1*(3*tau(iir,iit)-4*tau(iir,iit-1)+tau(iir,iit-2))/2/dt; + wy2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit+1)+tau(iir,iit+2))**2)/ & + & (eps+(tau(iir,iit-1)-2*tau(iir,iit)+tau(iir,iit+1))**2))**2) + py2=(1-wy2)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy2*(-3*tau(iir,iit)+4*tau(iir,iit+1)-tau(iir,iit+2))/2/dt; + end if + + + + Htau = sqrt( a(iir,iit)*(T0r(iir,iit)*tau(iir,iit)+T0v(iir,iit)*(px1+px2)/2)**2 & + & + b(iir,iit)*(T0t(iir,iit)*tau(iir,iit)+T0v(iir,iit)*(py1+py2)/2)**2 ) + + tpT=coe*(fun(iir,iit)-Htau) + coe*(sigr*(px2-px1)/2+sigt*(py2-py1)/2)+tau(iir,iit); + + tau(iir,iit)=tpT + + + end if + + end do + end do + + ! 处理边界 + do iit=1,nt + tau(1,iit) = max(2*tau(2,iit)-tau(3,iit),tau(3,iit)) + tau(nr,iit) = max(2*tau(nr-1,iit)-tau(nr-2,iit),tau(nr-2,iit)) + end do + do iir=1,nr + tau(iir,1) = max(2*tau(iir,2)-tau(iir,3),tau(iir,3)) + tau(iir,nt) = max(2*tau(iir,nt-1)-tau(iir,nt-2),tau(iir,nt-2)) + end do + + end do + end do + + L1_dif=0; Linf_dif=0 + do iir=1,nr + do iit=1,nt + L1_dif=L1_dif+abs(tau(iir,iit)-tau_old(iir,iit)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit)-tau_old(iir,iit))) + end do + end do + L1_dif = L1_dif/(nr*nt) + + do iir=3,nr-2 + do iit=3,nt-2 + L1_err=L1_err+abs(tau(iir,iit)*T0v(iir,iit)-u(iir,iit)) + Linf_err=max(Linf_err,abs(tau(iir,iit)*T0v(iir,iit)-u(iir,iit))) + end do + end do + L1_err = L1_err/(nr-4)/(nt-4) + + + if (abs(L1_dif)= layer_dep(nlayer)) then + vel = layer_vel(nlayer) + else + do i=1,nlayer-1 + if ( layer_dep(i)+small_eps <= dep .and. layer_dep(i+1) > dep-small_eps ) then + vel = (dep-layer_dep(i))/(layer_dep(i+1)-layer_dep(i))*(layer_vel(i+1)-layer_vel(i))+layer_vel(i) + exit + end if + end do + end if + + do iit=1,nt + fun(iir,iit) = 1.0/vel + end do + + end do + + close(10) + deallocate(layer_dep,layer_vel) + + +end subroutine + +subroutine Read_1D_velocity_3d(filename,rr,nr,nt,np,fun) + integer :: nr,nt,np + double precision :: fun(nr,nt,np),rr(nr) + character(len=80) filename + + ! input velocity file + integer :: nlayer + double precision,allocatable :: layer_dep(:), layer_vel(:) + double precision,parameter :: Radius = 6371.0, small_eps=0.001 + + ! others + integer i,iir,iit,iip ! iterative index + double precision :: read_tmp,dep,vel ! read temp variable + + + + open(10,file=trim(filename)) + read(10,*) nlayer + allocate(layer_dep(nlayer),layer_vel(nlayer)) + + do i=1,nlayer + read(10,*) layer_dep(i),layer_vel(i) + end do + + do iir=1,nr + ! 计算 dep 处的速度 + dep = Radius - rr(iir) + if (dep < layer_dep(1)) then + vel = layer_vel(1) + elseif (dep >= layer_dep(nlayer)) then + vel = layer_vel(nlayer) + else + do i=1,nlayer-1 + if ( layer_dep(i)+small_eps <= dep .and. layer_dep(i+1) > dep-small_eps ) then + vel = (dep-layer_dep(i))/(layer_dep(i+1)-layer_dep(i))*(layer_vel(i+1)-layer_vel(i))+layer_vel(i) + exit + end if + end do + end if + + do iit=1,nt + do iip=1,np + fun(iir,iit,iip) = 1.0/vel + end do + end do + + end do + + close(10) + deallocate(layer_dep,layer_vel) + + +end subroutine + +subroutine Ray_tracing_sphe_2d(rr,tt,nr,nt,T,recr,rect,srcr,srct,time,filename) + integer :: nr,nt + double precision :: rr(nr),tt(nt),T(nr,nt) + double precision :: srcr,srct,recr,rect,time + character(len=80) :: filename + + integer :: Ntime,traceid + double precision,allocatable :: trace(:,:) + double precision :: dt,grad_r,grad_t,Tgrad_r(nr,nt),Tgrad_t(nr,nt) + double precision :: tol + + integer :: iir,iit,it ! 循环 index + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + + + dtime=0.1; + Ntime = int(time*1.5/dtime) ! 总时间 + allocate(trace(Ntime,2)) + + ! 初始化 + trace(1,1) = recr; trace(1,2) = rect; ! 起始点 + + dr = rr(2)-rr(1); dt=tt(2)-tt(1) + tol = sqrt(dr**2+(dt*srcr)**2) + + + ! 梯度场 + do iir=2,nr-1 + do iit=2,nt-1 + Tgrad_r(iir,iit) = (T(iir+1,iit) - T(iir-1,iit))/dr/2 + Tgrad_t(iir,iit) = (T(iir,iit+1) - T(iir,iit-1))/dt/2 + end do + end do + do iir=1,nr + Tgrad_t(iir,1) = (T(iir,2) - T(iir,1))/dt + Tgrad_t(iir,nt) = (T(iir,nt) - T(iir,nt-1))/dt + end do + do iit=1,nt + Tgrad_r(1,iit) = (T(2,iit) - T(1,iit))/dr + Tgrad_r(nr,iit) = (T(nr,iit) - T(nr-1,iit))/dr + end do + + traceid=-1 + + + + ! 主循环 + do it=1,Ntime-1 + + ! 该点位置 trace(it,1), trace(it,2) + if ( trace(it,1)<=rr(1) .or. trace(it,1)>=rr(nr) .or. trace(it,2)<=tt(1) .or. trace(it,2)>=tt(nt)) then + print *, 'ray out of region, stop' + exit + end if + + ! 如果当前点离震源非常近,判定收敛 + if ( (trace(it,1)-srcr)**2+(trace(it,2)-srct)**2*trace(it,1)**2 < tol**2 ) then + print *, 'ray arrive source' + trace(it+1,1) = srcr + trace(it+1,2) = srct + traceid = it+1 + exit + end if + + + ! 计算该点的梯度 + call interp2d(rr,tt,nr,nt,Tgrad_r,trace(it,1),trace(it,2),grad_r) + call interp2d(rr,tt,nr,nt,Tgrad_t,trace(it,1),trace(it,2),grad_t) + + slowness_squared = grad_r**2 + grad_t**2/trace(it,1)**2 + ! 沿负梯度走 dtime 长度 r = r- dtime*Tr/(s^2); theta = theta - dtime*Ttheta/(r^2 s^2) + trace(it+1,1) = trace(it,1) - dtime*grad_r / slowness_squared + trace(it+1,2) = trace(it,2) - dtime*grad_t / slowness_squared / ((trace(it,1)+trace(it+1,1))**2/4) + + !print *, trace(it+1,1),trace(it+1,2),xsou,ysou + + end do + + if (traceid<0) then + ! 没打到震源,存在问题 + print *, filename, 'not arrive' + open(10,file=trim(filename)//'_NotArrive') + do it=1,Ntime + write(10,*) trace(it,1),trace(it,2)*180.0/pi,dtime*(it-1) + end do + close(10) + else + ! 达到震源,输出射线路径 + open(10,file=trim(filename)) + do it=1,traceid + write(10,*) trace(it,1),trace(it,2)*180.0/pi,dtime*(it-1) + end do + close(10) + end if + + + + deallocate(trace) +end subroutine + +subroutine interp2d(xx,yy,nx,ny,val,x0,y0,v0) + integer :: nx,ny,idx0,idy0 + double precision :: xx(nx),yy(ny),val(nx,ny),x0,y0,v0,dx,dy,r1,r2 + integer :: iix,iiy + + dx=xx(2)-xx(1); dy=yy(2)-yy(1) + + + if ( x0<=xx(1) .or. x0>=xx(nx) .or. y0<=yy(1) .or. y0>=yy(ny)) then + print *, x0,xx(1),xx(nx),y0,yy(1),yy(ny) + print *, 'out of mesh' + pause + end if + + idx0 = floor((x0-xx(1))/dx)+1 + idy0 = floor((y0-yy(1))/dy)+1 + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + + v0 = (1-r1)*(1-r2)*val(idx0,idy0) + (1-r1)*r2*val(idx0,idy0+1) & + & + r1*(1-r2)*val(idx0+1,idy0) + r1*r2*val(idx0+1,idy0+1) + + +end subroutine + +subroutine load_boundary_ver2(rr,tt,pp,nr,nt,np,T,ischange,bd_fn,isbd,tele_location) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np),ischange(nr,nt,np) + double precision,parameter :: Radius = 6371.0,pi=3.14159265358979323846264338327950288 + logical :: isbd(6),isN,isS,isW,isE,isT,isB ! N S W E T B + double precision :: tele_location(3) + + ! boundary database + character(Len=80) :: bd_fn + integer :: bd_nr,bd_nt + double precision :: bd_srcr + double precision,allocatable :: bd_time(:,:),bd_r(:),bd_t(:) + double precision :: tmp_read ! useless for read + + ! boundary points + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: r1,r2,r3 ! linear interpolation + double precision :: rec,dis + integer :: id1,id2,id3 + ! otheres + integer :: i,j,k !iterative index + + ! 读取 2d eikonal 计算的到时数据 + open(10, file=bd_fn) + read(10, *) bd_srcr + if (abs(bd_srcr - tele_location(1))>0.1) then + print *, 'source depth is not consistent with the boundary data' + pause + end if + + read(10, *) bd_nr,bd_nt + + allocate(bd_time(bd_nr,bd_nt),bd_r(bd_nr),bd_t(bd_nt)) + + read(10, *) bd_r + read(10, *) bd_t + + do i=1,bd_nr + do j=1,bd_nt + read(10, *) bd_time(i,j) + end do + end do + close(10) + ! 插值边界 + + + + isN=isbd(1);isS=isbd(2) + isW=isbd(3);isE=isbd(4) + isT=isbd(5);isB=isbd(6) + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + + ! 北边界 North + if (isN) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(nt,j), + rec = rr(i) + dis = epicenter_dis(nt,j) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,nt,j)) + ischange(i,nt,j) = 0 + end do + end do + end if + + ! 南边界 South + if (isS) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(1,j), + rec = rr(i) + dis = epicenter_dis(1,j) + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,1,j)) + ischange(i,1,j) = 0 + end do + end do + end if + + ! 西边界 West + if (isW) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,1), + rec = rr(i) + dis = epicenter_dis(j,1) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,j,1)) + + ischange(i,j,1) = 0 + end do + end do + end if + + ! 东边界 East + if (isE) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,np), + rec = rr(i) + dis = epicenter_dis(j,np) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,j,np)) + + ischange(i,j,np) = 0 + end do + end do + end if + + ! 上边界 top (一般是不插值的,遂略去) + + ! 下边界 bottom + if (isB) then + do i=1,nt + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(1),震中距:epicenter_dis(i,j), + rec = rr(1) + dis = epicenter_dis(i,j) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(1,i,j)) + + ischange(1,i,j) = 0 + end do + end do + end if + + + deallocate(bd_time,bd_r,bd_t) + +end subroutine + +subroutine tele_error_estimation_ver3(rr,tt,pp,nr,nt,np,T,bd_fn,tele_location,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep,tele_location(3) + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + ! boundary database + character(Len=80) :: bd_fn + integer :: bd_nr,bd_nt + double precision :: bd_srcr + double precision,allocatable :: bd_time(:,:),bd_r(:),bd_t(:) + double precision :: tmp_read ! useless for read + + + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: src,rec,dis,traveltime + double precision :: L1_err, Linf_err + + + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,k,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取 2d eikonal 计算的到时数据 + open(10, file=bd_fn) + read(10, *) bd_srcr + if (abs(bd_srcr - tele_location(1))>0.1) then + print *, 'source depth is not consistent with the boundary data' + pause + end if + + read(10, *) bd_nr,bd_nt + + allocate(bd_time(bd_nr,bd_nt),bd_r(bd_nr),bd_t(bd_nt)) + + read(10, *) bd_r + read(10, *) bd_t + + do i=1,bd_nr + do j=1,bd_nt + read(10, *) bd_time(i,j) + end do + end do + close(10) + + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + ! 指定深度 计算 走时 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-dep,震中距:epicenter_dis(iit,iip), + rec = Radius-dep + dis = epicenter_dis(iit,iip) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,traveltime) + + error(iit,iip,1) = traveltime + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + end do + end do + L1_err = L1_err/(nt*np) + + ! dep = 6071.0 + ! do iit=1,10 + ! call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,dep+iit,epicenter_dis(3,3),traveltime) + ! print *, dep+iit,traveltime + ! end do + + ! 释放动态数组 + deallocate(bd_time,bd_r,bd_t) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + + + +end subroutine +! ----------------------- end for ega3 ---------------------- + +! ----------------------- for ega4 ---------------------- +subroutine eikonal_boundary_traveltime(rr,tt,pp,nr,nt,np,r0,t0,p0,velo_1d_fn,TTfield_path,isbd,bd_N,bd_S,bd_W,bd_E,bd_B,bd_T) + ! input parameter + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np) + double precision :: r0,t0,p0 + character(len=80) :: velo_1d_fn,TTfield_path + + ! output parameter + double precision :: bd_N(nr,np),bd_S(nr,np),bd_W(nr,nt),bd_E(nr,nt),bd_B(nt,np),bd_T(nt,np) + logical :: isbd(5) + + ! + double precision :: degree(4),azimuthal(4) + double precision :: maxdegree + double precision :: epicenter_dis(nt,np) ! epicenter distance from tele source to study region + + ! mesh for 2d eikonal + integer :: nr_2d,nt_2d + double precision :: rr1_2d,rr2_2d,tt1_2d,tt2_2d,dr_2d,dt_2d,r0_2d,t0_2d + double precision,allocatable :: rr_2d(:),tt_2d(:),spha_2d(:,:),sphb_2d(:,:) + double precision,allocatable :: fun_2d(:,:),u_2d(:,:),T_2d(:,:) + character(len=80) :: filename,form1,form2 + logical :: isfile,iscal + integer :: file_nr_2d,file_nt_2d + double precision,allocatable :: file_rr_2d(:),file_tt_2d(:) + + + ! others + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: Earth_Radius = 6371.0 + double precision,parameter :: tol=0.001 + integer :: iir,iit,iip,iter ! iteration index + + + ! ---------- 首先,确定二维程函方程的计算范围 first, determine the region for 2d eikonal -------------------- + + ! calculate the degree and azimuthal from the tele-source to the region + ! S-W + call Epicenter_Distance_sphere(tt(1),pp(1),t0,p0,degree(1)) + call Azimuthal_sphere(tt(1),pp(1),t0,p0,azimuthal(1)) + ! S-E + call Epicenter_Distance_sphere(tt(1),pp(np),t0,p0,degree(2)) + call Azimuthal_sphere(tt(1),pp(np),t0,p0,azimuthal(2)) + ! N-W + call Epicenter_Distance_sphere(tt(nt),pp(1),t0,p0,degree(3)) + call Azimuthal_sphere(tt(nt),pp(1),t0,p0,azimuthal(3)) + ! N-E + call Epicenter_Distance_sphere(tt(nt),pp(np),t0,p0,degree(4)) + call Azimuthal_sphere(tt(nt),pp(np),t0,p0,azimuthal(4)) + + ! print *, 'source (lat,lon) = ', t0*180/pi, ' ', p0*180/pi + ! print *, 'degree is ', degree*180/pi + ! print *, 'azimuthal is ', azimuthal*180/pi + + ! ---------- 然后,根据震中距和方位角,确定计算哪些边界,只有4种情况,出现其他情况,请报错 ------------ + ! ---------- determine to activate which boundaries. Only 4 cases, otherwise print error ------------ + maxdegree = max(degree(1),degree(2),degree(3),degree(4)) + if (maxdegree== degree(1)) then + ! N + E + isbd = [ .true. , .false. , .false. , .true. , .true. ] ! isbd: N,S,W,E,B + else if (maxdegree == degree(2)) then + ! N + W + isbd = [ .true. , .false. , .true. , .false. , .true. ] + else if (maxdegree == degree(3)) then + ! S + E + isbd = [ .false. , .true. , .false. , .true. , .true. ] + else if (maxdegree == degree(4)) then + ! S + W + isbd = [ .false. , .true. , .true. , .false. , .true. ] + end if + + ! ---------- if source is on the west or ease direction, N and S boundaries are deactivated + if (t0 > tt(1) .and. t0 < tt(nt)) then + isbd(1) = .false. + isbd(2) = .false. + end if + ! ---------- if source is on the north or south direction, west and east boundaries are deactivated + if (p0 > pp(1) .and. p0 < pp(np)) then + isbd(3) = .false. + isbd(4) = .false. + end if + + + ! ---------- 生成二维网格 ---------------------- + ! ---------- generate 2d mesh ---------------------- + dr_2d = 2.0; dt_2d = pi/1000; + rr1_2d = Earth_Radius-3000; rr2_2d = Earth_Radius+100; + tt1_2d = -10.0/180.0*pi; tt2_2d = 100.0/180.0*pi; + nr_2d = floor((rr2_2d-rr1_2d)/dr_2d)+1; + nt_2d = floor((tt2_2d-tt1_2d)/dt_2d)+1; + + allocate(rr_2d(nr_2d),tt_2d(nt_2d)) + + do iir=1,nr_2d + rr_2d(iir)=rr1_2d+(iir-1)*dr_2d + end do + do iit=1,nt_2d + tt_2d(iit)=tt1_2d+(iit-1)*dt_2d + end do + + + + ! ----------- 读取一维速度文件,产生速度场 ----------------------- + ! ----------- read the 1d velocity file ----------------------- + allocate(fun_2d(nr_2d,nt_2d),spha_2d(nr_2d,nt_2d),sphb_2d(nr_2d,nt_2d),u_2d(nr_2d,nt_2d),T_2d(nr_2d,nt_2d)) + + call Read_1D_velocity_2d(velo_1d_fn,rr_2d,nr_2d,nt_2d,fun_2d) + do iir=1,nr_2d + do iit=1,nt_2d + spha_2d(iir,iit)=1.0; + sphb_2d(iir,iit)=1.0; + u_2d(iir,iit) = 0.0 + T_2d(iir,iit) = 0.0 + end do + end do + ! --------- 速度场文件输出 output 2d velocity file ------------- + filename=trim(TTfield_path)//'/model2d' + inquire(file=filename, exist=isfile) + if (.not. isfile) then + open(10,file=filename) + write(10,*) nr_2d,' ',nt_2d + write(10,*) rr_2d + write(10,*) tt_2d + do iir =1,nr_2d + do iit =1,nt_2d + write(10,*) 1.0/fun_2d(iir,iit) + end do + print *, Earth_Radius - rr_2d(iir), 1.0/fun_2d(iir,1) + end do + close(10) + end if + + ! ----------- 核心,计算对应远震产生的二维走时场 ------------------- + ! ----------- calculate the 2d traveltime field ----------------- + r0_2d = r0; t0_2d = 0.0 + write(*,'(a)') & + & 'calculating 2d traveltime field, region: ' + write(*,'(a, f7.2,a,f7.2,a)') & + & 'Depth: ', Earth_Radius-rr2_2d, ' km - ' ,Earth_Radius-rr1_2d, ' km' + write(*,'(a, f7.2,a,f7.2)') & + & 'Epicenter dis: ', tt1_2d*180.0/pi, ' - ' ,tt2_2d*180.0/pi + write(*,'(a,f7.2,f7.2,i5,i5)') & + & '(dr,dt,nr,nt) = ', dr_2d,dt_2d*180.0/pi,nr_2d,nt_2d + + ! determine the 2d time file name + write(form1,'(i4)') floor(r0) + write(form2,'(i3)') int((r0-floor(r0))*1000) + filename=trim(TTfield_path)//'/traveltime2d_'//trim(form1)//'_'//trim(form2) + + + ! load or calculate the traveltime + inquire(file=filename, exist=isfile) + if (isfile) then + ! if the traveltime file exist, just read it + write(*,'(a,a)') 'file exist, loading ... :', filename + open(10,file=filename) + read(10,*) file_nr_2d,file_nt_2d + allocate(file_rr_2d(file_nr_2d),file_tt_2d(file_nt_2d)) + read(10,*) file_rr_2d + read(10,*) file_tt_2d + if (file_nr_2d == nr_2d .and. file_nt_2d == nt_2d .and. & + & abs(file_rr_2d(1)-rr_2d(1)) old_L1_dif) then + stop_count = stop_count+1 + end if + old_L1_dif = L1_dif + L1_dif=0; Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr <-> 1, y: nt <-> 1, z: np <-> 1 + + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + + if(ischange(iir,iit,iip)==1) then + if( iir>1 .and. iir1 .and. iit1 .and. iip= 5) then + write(*,*) 'iter ',iter,', T is oscillating' + exit + else + ! write(*,*) 'iter ',iter,', T is changing, L1 dif = ', L1_dif,'L inf dif = ', Linf_dif + end if + + if (iter==MaxIter) then + write(*,*) 'iter ',iter,', max iteration steps' + end if + + end do + +end subroutine + +subroutine FSM_O1_Adj_tele_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ,isbd) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + logical :: isbd(5) + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + + + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + if (iir == 1) then + ! bottom boundary + if (isbd(5)) then + if (TableADJ(3,iit,iip)>=0) then + TableADJ(1,iit,iip) = max(0.0,2*TableADJ(2,iit,iip)-TableADJ(3,iit,iip)) + else + TableADJ(1,iit,iip) = min(0.0,2*TableADJ(2,iit,iip)-TableADJ(3,iit,iip)) + end if + else + TableADJ(1,iit,iip) = 0.0 + end if + + elseif (iir == nr) then + ! Top boundary + TableADJ(nr,iit,iip) = 0.0 + + elseif (iit == 1) then + ! south boundary + if (isbd(2)) then + if (TableADJ(iir,3,iip)>=0) then + TableADJ(iir,1,iip) = max(0.0,2*TableADJ(iir,2,iip)-TableADJ(iir,3,iip)) + else + TableADJ(iir,1,iip) = min(0.0,2*TableADJ(iir,2,iip)-TableADJ(iir,3,iip)) + end if + else + TableADJ(iir,1,iip) = 0.0 + end if + + elseif (iit == nt) then + ! north boundary + if (isbd(1)) then + if (TableADJ(iir,nt-2,iip)>=0) then + TableADJ(iir,nt,iip) = max(0.0,2*TableADJ(iir,nt-1,iip)-TableADJ(iir,nt-2,iip)) + else + TableADJ(iir,nt,iip) = min(0.0,2*TableADJ(iir,nt-1,iip)-TableADJ(iir,nt-2,iip)) + end if + else + TableADJ(iir,nt,iip) = 0.0 + end if + + elseif (iip == 1) then + ! west boundary + if (isbd(3)) then + if (TableADJ(iir,iit,3)>=0) then + TableADJ(iir,iit,1) = max(0.0,2*TableADJ(iir,iit,2)-TableADJ(iir,iit,3)) + else + TableADJ(iir,iit,1) = min(0.0,2*TableADJ(iir,iit,2)-TableADJ(iir,iit,3)) + end if + else + TableADJ(iir,iit,1) = 0.0 + end if + elseif (iip == np) then + ! east boundary + if (isbd(4)) then + if (TableADJ(iir,iit,np-2)>=0) then + TableADJ(iir,iit,np) = max(0.0,2*TableADJ(iir,iit,np-1)-TableADJ(iir,iit,np-2)) + else + TableADJ(iir,iit,np) = min(0.0,2*TableADJ(iir,iit,np-1)-TableADJ(iir,iit,np-2)) + end if + else + TableADJ(iir,iit,np) = 0.0 + end if + else + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr = 1.0*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 1.0*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 1.0*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1.0-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + if (isnan(Htau)) then + print *, iir,iit,iip + print *, a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 + print *, b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 + print *, c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 + pause + end if + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + end if + + + end do + end do + end do + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-2)*(nt-2)*(np-2)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (abs(L1_dif) invr(igrid,ii_invr) .and. rr(iir)<=invr(igrid,ii_invr+1)) then + idr = ii_invr + r1 = (rr(iir) - invr(igrid,idr)) / (invr(igrid,idr+1) - invr(igrid,idr)) ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + exit + end if + end do + if (r1 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + + do iit=1,nt + + r2 = -1 + do ii_invt = 1,ninvt-1 + if (tt(iit)> invt(igrid,ii_invt) .and. tt(iit)<=invt(igrid,ii_invt+1)) then + idt = ii_invt + r2 = (tt(iit) - invt(igrid,idt)) / (invt(igrid,idt+1) - invt(igrid,idt)) ! r2=0 -> t=invt(idt); r2=1 -> t=invt(idt+1) + exit + end if + end do + if (r2 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if t is out of inversion grid invt, turn to next point + end if + + do iip=1,np + r3 = -1 + do ii_invp = 1,ninvp-1 + if (pp(iip)> invp(igrid,ii_invp) .and. pp(iip)<=invp(igrid,ii_invp+1)) then + idp = ii_invp + r3 = (pp(iip) - invp(igrid,idp)) / (invp(igrid,idp+1) - invp(igrid,idp)) ! r3=0 -> p=invp(idp); r3=1 -> p=invp(idp+1) + exit + end if + end do + if (r3 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if p is out of inversion grid invp, turn to next point + end if + + do iik=1,nk + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + r1 = -1 + do ii_invr = 1,ninvr-1 + if (rr(iir)> invr(igrid,ii_invr) .and. rr(iir)<=invr(igrid,ii_invr+1)) then + idr = ii_invr + r1 = (rr(iir) - invr(igrid,idr)) / (invr(igrid,idr+1) - invr(igrid,idr)) ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + exit + end if + end do + if (r1 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + + do iit=1,nt + r2 = -1 + do ii_invt = 1,ninvt-1 + if (tt(iit)> invt(igrid,ii_invt) .and. tt(iit)<=invt(igrid,ii_invt+1)) then + idt = ii_invt + r2 = (tt(iit) - invt(igrid,idt)) / (invt(igrid,idt+1) - invt(igrid,idt)) ! r2=0 -> t=invt(idt); r2=1 -> t=invt(idt+1) + exit + end if + end do + if (r2 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if t is out of inversion grid invt, turn to next point + end if + + do iip=1,np + r3 = -1 + do ii_invp = 1,ninvp-1 + if (pp(iip)> invp(igrid,ii_invp) .and. pp(iip)<=invp(igrid,ii_invp+1)) then + idp = ii_invp + r3 = (pp(iip) - invp(igrid,idp)) / (invp(igrid,idp+1) - invp(igrid,idp)) ! r3=0 -> p=invp(idp); r3=1 -> p=invp(idp+1) + exit + end if + end do + if (r3 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if p is out of inversion grid invp, turn to next point + end if + + + do iik=1,nk + pert = 0.0 + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +! ----------------------- end for ega4 ---------------------- + +! 并行版本 +subroutine FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,r0,t0,p0,u) + + use mpi + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: r1,r2,r3,a0,b0,c0,d0,f0,T0v(nr,nt,np),T0r(nr,nt,np),T0t(nr,nt,np),T0p(nr,nt,np) + double precision :: tau(nr,nt,np),tau_old(nr,nt,np),r0,t0,p0 + integer :: idr0,idt0,idp0 + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision :: t1,p1 + double precision,parameter :: tol = (10.0)**(-5),eps=10.0**(-12) + integer,parameter :: MaxIter=1000 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: x0,y0,z0,x,y,z,xst,yst,zst,e11,e12,e13,e21,e22,e23,e31,e32,e33 + double precision :: xstr,xstt,xstp,ystr,ystt,ystp,zstr,zstt,zstp + integer :: ileft,iright,jleft,jright,ii,jj,kk + logical :: isexit + + integer :: ierr,myid,nproc,tag,istat(mpi_status_size),iproc,ptid(nr,np,nt) + integer :: mpi_ptijk(3,np*nt),mpi_ptn,ipt,int_temp,my_npt + double precision :: mpi_ptv(np*nt),dp_temp + + integer :: ptr1,ptr2,iNumber,total_ptn,Nptn,sNptn,tpNptn + double precision :: ave_ni + integer,allocatable :: proc_irange(:,:,:) + + + isexit = .false. + tag=99 + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); idp0=floor((p0-pp(1))/dp+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); r3 = min(1.0,(p0-pp(idp0))/dp); + + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + a0=(1-r1)*(1-r2)*(1-r3)*a(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*a(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*a(idr0,idt0+1,idp0)+(1-r1)*r2*r3*a(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*a(idr0+1,idt0,idp0)+r1*(1-r2)*r3*a(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*a(idr0+1,idt0+1,idp0)+r1*r2*r3*a(idr0+1,idt0+1,idp0+1) + + b0=(1-r1)*(1-r2)*(1-r3)*b(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*b(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*b(idr0,idt0+1,idp0)+(1-r1)*r2*r3*b(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*b(idr0+1,idt0,idp0)+r1*(1-r2)*r3*b(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*b(idr0+1,idt0+1,idp0)+r1*r2*r3*b(idr0+1,idt0+1,idp0+1) + + c0=(1-r1)*(1-r2)*(1-r3)*c(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*c(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*c(idr0,idt0+1,idp0)+(1-r1)*r2*r3*c(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*c(idr0+1,idt0,idp0)+r1*(1-r2)*r3*c(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*c(idr0+1,idt0+1,idp0)+r1*r2*r3*c(idr0+1,idt0+1,idp0+1) + + f0=(1-r1)*(1-r2)*(1-r3)*f(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*f(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*f(idr0,idt0+1,idp0)+(1-r1)*r2*r3*f(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*f(idr0+1,idt0,idp0)+r1*(1-r2)*r3*f(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*f(idr0+1,idt0+1,idp0)+r1*r2*r3*f(idr0+1,idt0+1,idp0+1) + !d0=-d0 + + fun0=(1-r1)*(1-r2)*(1-r3)*fun(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*fun(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*fun(idr0,idt0+1,idp0)+(1-r1)*r2*r3*fun(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*fun(idr0+1,idt0,idp0)+r1*(1-r2)*r3*fun(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*fun(idr0+1,idt0+1,idp0)+r1*r2*r3*fun(idr0+1,idt0+1,idp0+1) + + + + ! 构造T0 + do iir=1,nr + do iit=1,nt + do iip=1,np + r1 = rr(iir) + t1 = tt(iit) + p1 = pp(iip) + + T0v(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + ischange(iir,iit,iip)=1 + if ( T0v(iir,iit,iip)==0 ) then + T0r(iir,iit,iip) = 0 + T0t(iir,iit,iip) = 0 + T0p(iir,iit,iip) = 0 + else + T0r(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v(iir,iit,iip) + T0t(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v(iir,iit,iip) + T0p(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v(iir,iit,iip) + end if + + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2 .and. abs((pp(iip)-p0)/dp)<= 2) then + tau(iir,iit,iip) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + !tau(iir,iit,iip) = u(iir,iit,iip) - T0v(iir,iit,iip) + ischange(iir,iit,iip)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt .or. iip==1 .or. iip==np) then + write(*,*) 'source on the boundary, mesh error' + print *, rr(iir),iir,t0*180/3.1415927,iit,p0*180/3.1415927,iip + ! pause + end if + !write(*,*) iir-idr0,iit-idt0,iip-idp0,u(iir,iit,iip),T0v(iir,iit,iip),u(iir,iit,iip)-T0v(iir,iit,iip) + else + !tau(iir,iit,iip) = T(iir,iit,iip)/T0v(iir,iit,iip) + tau(iir,iit,iip) = 1 + ischange(iir,iit,iip)=1 + end if + end do + end do + end do + + L1_err=0; Linf_err=0 + do iir=1,nr + do iit=1,nt + do iip=1,np + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)-u(iir,iit,iip))) + if(isnan(L1_err)) then + print *, u(iir,iit,iip),T0v(iir,iit,iip) + pause + end if + end do + end do + end do + L1_err = L1_err/(nr*np*nt) + print *, L1_err + + + allocate(proc_irange(2,nproc,nr+nt+np-3-6+1)) + + ! 给每个线程分配计算点 + Nptn=0 + sNptn=0 + + do level = 6,nr+nt+np-3 + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + iNumber = iright - ileft + 1 + + total_ptn = 0 + do ip = ileft,iright + total_ptn = total_ptn+(min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + end do + Nptn = Nptn + total_ptn ! 总点数 + ave_ni = total_ptn*1.0/nproc + + if (iNumber <= nproc) then + ! 即i的数量小于等于线程数,每个线程分配一个i就好 + tpNptn = 0 + MaxtpNptn = 0 + do ip = ileft,iright + proc_irange(:,ip-ileft+1,level-5)=(/ip,ip/) + tpNptn = (min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + MaxtpNptn = max(MaxtpNptn,tpNptn) + end do + do ip = iright+1,ileft+nproc-1 + proc_irange(:,ip-ileft+1,level-5)=(/-1,-2/) + end do + sNptn = sNptn + MaxtpNptn + else + !if (myid .eq. 0) then + ! print *, ileft,iright + !end if + !call sleep(2) + + ! i的数量大于线程数,平均分配,接近 total_ptn/nproc + int_temp = 0 + tpNptn = 0 + MaxtpNptn = 0 + ptr1 = ileft + iproc = 1 + do ptr2 = ileft,iright + int_temp = int_temp + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + tpNptn = tpNptn + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + !if (myid .eq. 0) then + ! print *, ptr2,(min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1),int_temp,ave_ni + !end if + !call sleep(2) + if ((int_temp>=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 1.0*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 1.0*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 1.0*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=1,nr + do iip=1,np + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=1,nr + do iit=1,nt + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 1 阶格式 + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + ! additive + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + ! multiplicative + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = sqrt(a(iir,iit,iip)) + sigt = sqrt(b(iir,iit,iip)) + sigp = sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! partial derivatives + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=2,nt-1 + do iip=2,np-1 + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=2,nr-1 + do iip=2,np-1 + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=2,nr-1 + do iit=2,nt-1 + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr=sqrt(a(iir,iit,iip)); sigt=sqrt(b(iir,iit,iip)); sigp=sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! forward and backward partial derivatives + + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + + ! calculate LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 ) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + if (tpT < tau(iir,iit,iip)) then + tau(iir,iit,iip) = tpT + end if + + end if + + + end do + end do + end do + + ! boundary + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)x0 ) then + idx0=iix + exit + end if + end do + do iiy=1,ny-1 + if (yy(iiy)<= y0 .and. yy(iiy+1)>y0 ) then + idy0=iiy + exit + end if + end do + do iiy=1,ny-1 + if (zz(iiz)<= z0 .and. zz(iiz+1)>z0 ) then + idz0=iiz + exit + end if + end do + + if (idx0<=0 .or. idy0<0 .or. idz0<0) then + write(*,*) 'point out of the mesh' + pause + return + end if + + dx = xx(idx0+1)-xx(idx0) + dy = yy(idy0+1)-yy(idy0) + dz = zz(idz0+1)-zz(idz0) + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) +end subroutine + +! 3-D interpolation uniform mesh +subroutine Linear_Interp_3D(xx,yy,zz,val,nx,ny,nz,x0,y0,z0,v0) + integer :: nx,ny,nz,idx0,idy0,idz0 + double precision :: xx(nx),yy(ny),zz(nz),val(nx,ny,nz),x0,y0,z0,v0,dx,dy,dz + double precision :: r1,r2,r3 + integer :: iix,iiy,iiz + + dx = xx(2)-xx(1) + dy = yy(2)-yy(1) + dz = zz(2)-zz(1) + + idx0 = floor((x0-xx(1))/dx)+1 + idy0 = floor((y0-yy(1))/dy)+1 + idz0 = floor((z0-zz(1))/dz)+1 + + if (idx0<1 .or. idx0>nx-1 .or. idy0<1 .or. idy0>ny-1 .or. idz0<1 .or. idz0>nz-1) then + write(*,*) 'point out of the mesh' + pause + return + end if + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) + +end subroutine + +subroutine FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + !print *, delta(idi,idj,idk),delta(idi+1,idj+1,idk+1) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) r1+(iir+0.5)*dr, t1+iit*dt, p1+iip*dp + a0 = T0para(1); b0 = T0para(2); c0 = T0para(3); f0 = T0para(4); fun0 = T0para(5); + r0 = T0para(6); t0 = T0para(7); p0 = T0para(8); + + do iir=1,nr-1 + do iit=1,nt + do iip=1,np + r1 = rr(iir)+0.5*dr; t1 = tt(iit); p1 = pp(iip) + T0v_hr(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hr(iir,iit,iip)==0 ) then + T0r_hr(iir,iit,iip) = 0 + else + T0r_hr(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v_hr(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_ht iir,iit,iip -> r1+iir*dr, t1+(iit+0.5)*dt, p1+iip*dp + do iir=1,nr + do iit=1,nt-1 + do iip=1,np + r1 = rr(iir); t1 = tt(iit)+0.5*dt; p1 = pp(iip) + T0v_ht(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_ht(iir,iit,iip)==0 ) then + T0t_ht(iir,iit,iip) = 0 + T0p_ht(iir,iit,iip) = 0 + else + T0t_ht(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_ht(iir,iit,iip) + T0p_ht(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_ht(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_hp iir,iit,iip -> r1+iir*dr, t1+iit*dt, p1+(iip+0.5)*dp + do iir=1,nr + do iit=1,nt + do iip=1,np-1 + r1 = rr(iir); t1 = tt(iit); p1 = pp(iip)+0.5*dp + T0v_hp(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hp(iir,iit,iip)==0 ) then + T0t_hp(iir,iit,iip) = 0 + T0p_hp(iir,iit,iip) = 0 + else + T0t_hp(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_hp(iir,iit,iip) + T0p_hp(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_hp(iir,iit,iip) + end if + end do + end do + end do + + + + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip)) & + & *(T0r_hr(iir-1,iit,iip)*(tau(iir,iit,iip)+tau(iir-1,iit,iip))/2 & + & + T0v_hr(iir-1,iit,iip)*(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr) + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip)) & + & *(T0r_hr(iir,iit,iip)*(tau(iir+1,iit,iip)+tau(iir,iit,iip))/2 & + & + T0v_hr(iir,iit,iip)*(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr) + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt) & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)* & + & (T0p_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit-1,iip+1)-tau(iir,iit-1,iip-1) & + & + tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/(4*dp)) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt) & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)* & + & (T0p_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1) & + & + tau(iir,iit+1,iip+1)-tau(iir,iit+1,iip-1))/(4*dp)) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit+1,iip-1)-tau(iir,iit-1,iip-1) & + & +tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/(4*dt)) & + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp) + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip) & + & +tau(iir,iit+1,iip+1)-tau(iir,iit-1,iip+1))/(4*dt)) & + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp) + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif)ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + do iik=1,nk + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + + + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + idr = floor((rr(iir)-invr(igrid,1))/dinvr)+1 ! invr(idr) <= rr(iir) < invr(idr+1) + if (idr<0 .or. idr>ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + + do iik=1,nk + pert = 0.0 + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + end if + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +subroutine Kernel_Mask(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou,radius) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + + do i=1,nr + do j=1,nt + do k=1,np + dis = sqrt((rr(i)-rsou)**2+(rsou*(tt(j)-tsou))**2+(rsou*cos(tsou)*(pp(k)-psou))**2) + if ( dis < radius) then + kernel(i,j,k) = kernel(i,j,k) * 0 + end if + end do + end do + end do +end subroutine + +subroutine Kernel_Mask_new(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + dr = rr(2)-rr(1); dt = tt(2)-tt(1); dp = pp(2)-pp(1); + do i=1,nr + do j=1,nt + do k=1,np + if ( abs(rr(i)-rsou)6351):\n", + " fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n", + " elif (rr[ir]>6336):\n", + " fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n", + " elif (rr[ir]>5961):\n", + " fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n", + " else:\n", + " fun_init[ir,it,ip] = 1.0/9.0\n", + "\n", + " vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip]\n", + " a_init[ir,it,ip] = 1.0 + 2.0*zeta_init[ir,it,ip]\n", + " b_init[ir,it,ip] = 1.0 - 2.0*xi_init[ir,it,ip]\n", + " c_init[ir,it,ip] = 1.0 + 2.0*xi_init[ir,it,ip]\n", + " f_init[ir,it,ip] = -2.0 * eta_init[ir,it,ip]\n", + "\n", + " # true model\n", + " if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \\\n", + " and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \\\n", + " and rr[ir] >= 6211.0 and rr[ir] <= 6371.0):\n", + " c+=1\n", + " sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \\\n", + " *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \\\n", + " *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0)\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 150.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + " a_true[ir,it,ip] = 1.0 + 2.0*zeta_true[ir,it,ip]\n", + " b_true[ir,it,ip] = 1.0 - 2.0*xi_true[ir,it,ip]\n", + " c_true[ir,it,ip] = 1.0 + 2.0*xi_true[ir,it,ip]\n", + " f_true[ir,it,ip] = -2.0 * eta_true[ir,it,ip]\n", + "\n", + "\n", + "\n", + "r_earth = R_earth #6378.1370\n", + "print(\"depminmax {} {}\".format(r_earth-rr1,r_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta',data=zeta_init)\n", + "fout_init.create_dataset('fun', data=fun_init)\n", + "fout_init.create_dataset('fac_a', data=a_init)\n", + "fout_init.create_dataset('fac_b', data=b_init)\n", + "fout_init.create_dataset('fac_c', data=c_init)\n", + "fout_init.create_dataset('fac_f', data=f_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta',data=zeta_true)\n", + "fout_true.create_dataset('fun', data=fun_true)\n", + "fout_true.create_dataset('fac_a', data=a_true)\n", + "fout_true.create_dataset('fac_b', data=b_true)\n", + "fout_true.create_dataset('fac_c', data=c_true)\n", + "fout_true.create_dataset('fac_f', data=f_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(123456789)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 1\n", + "n_rec = [1 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "# one source outside of the region\n", + "dep_srcs=[]\n", + "lon_srcs=[]\n", + "lat_srcs=[]\n", + "\n", + "# teleseismic events\n", + "n_src_tele = 10\n", + "center_lon = (pp2deg+pp1deg)/2.0\n", + "center_lat = (tt2deg+tt1deg)/2.0\n", + "r_src = 40 # deg\n", + "d_r = 360.0/n_src_tele\n", + "\n", + "for i in range(n_src_tele):\n", + " dep = 50.0\n", + " lon = math.cos(d_r*i/180.0*math.pi)*r_src + center_lon\n", + " lat = math.sin(d_r*i/180.0*math.pi)*r_src + center_lat\n", + " dep_srcs.append(dep)\n", + " lon_srcs.append(lon)\n", + " lat_srcs.append(lat)\n", + "\n", + "# regional events\n", + "n_src_reg = 0\n", + "for i in range(n_src_reg):\n", + " dep = random.uniform(r_earth-rr1,r_earth-rr2)\n", + " lon = random.uniform(pp1deg,pp2deg)\n", + " lat = random.uniform(tt1deg,tt2deg)\n", + " dep_srcs.append(dep)\n", + " lon_srcs.append(lon)\n", + " lat_srcs.append(lat)\n", + "\n", + "n_src = n_src_tele + n_src_reg\n", + "\n", + "# create receiver coordinates\n", + "n_rec = [20 for i in range(n_src)]\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " elev_recs.append(0) # elevation in m\n", + " lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + "\n", + "\n", + "\n", + "# create dummy src\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " dep = dep_srcs[i_src]\n", + " lon = lon_srcs[i_src]\n", + " lat = lat_srcs[i_src]\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy+\"_\"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]])\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele_one_src/1d_ak135.txt b/test/old_tests/inversion_tele_one_src/1d_ak135.txt new file mode 100644 index 0000000..58f131c --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/1d_ak135.txt @@ -0,0 +1,136 @@ + 0.000, 5.8000 + 20.000, 5.8000 + 20.000, 6.5000 + 35.000, 6.5000 + 35.000, 8.0400 + 77.500, 8.0450 + 120.000, 8.0500 + 165.000, 8.1750 + 210.000, 8.3000 + 210.000, 8.3000 + 260.000, 8.4825 + 310.000, 8.6650 + 360.000, 8.8475 + 410.000, 9.0300 + 410.000, 9.3600 + 460.000, 9.5280 + 510.000, 9.6960 + 560.000, 9.8640 + 610.000, 10.0320 + 660.000, 10.2000 + 660.000, 10.7900 + 710.000, 10.9229 + 760.000, 11.0558 + 809.500, 11.1353 + 859.000, 11.2221 + 908.500, 11.3068 + 958.000, 11.3896 +1007.500, 11.4705 +1057.000, 11.5495 +1106.500, 11.6269 +1156.000, 11.7026 +1205.500, 11.7766 +1255.000, 11.8491 +1304.500, 11.9200 +1354.000, 11.9895 +1403.500, 12.0577 +1453.000, 12.1245 +1502.500, 12.1912 +1552.000, 12.2550 +1601.500, 12.3185 +1651.000, 12.3819 +1700.500, 12.4426 +1750.000, 12.5031 +1799.500, 12.5631 +1849.000, 12.6221 +1898.500, 12.6804 +1948.000, 12.7382 +1997.500, 12.7956 +2047.000, 12.8526 +2096.500, 12.9096 +2146.000, 12.9668 +2195.500, 13.0222 +2245.000, 13.0783 +2294.500, 13.1336 +2344.000, 13.1894 +2393.500, 13.2465 +2443.000, 13.3018 +2492.500, 13.3585 +2542.000, 13.4156 +2591.500, 13.4741 +2640.000, 13.5312 +2690.000, 13.5900 +2740.000, 13.6494 +2740.000, 13.6494 +2789.670, 13.6530 +2839.330, 13.6566 +2891.500, 13.6602 +2891.500, 8.0000 +2939.330, 8.0382 +2989.660, 8.1283 +3039.990, 8.2213 +3090.320, 8.3122 +3140.660, 8.4001 +3190.990, 8.4861 +3241.320, 8.5692 +3291.650, 8.6496 +3341.980, 8.7283 +3392.310, 8.8036 +3442.640, 8.8761 +3492.970, 8.9461 +3543.300, 9.0138 +3593.640, 9.0792 +3643.970, 9.1426 +3694.300, 9.2042 +3744.630, 9.2634 +3794.960, 9.3205 +3845.290, 9.3760 +3895.620, 9.4297 +3945.950, 9.4814 +3996.280, 9.5306 +4046.620, 9.5777 +4096.950, 9.6232 +4147.280, 9.6673 +4197.610, 9.7100 +4247.940, 9.7513 +4298.270, 9.7914 +4348.600, 9.8304 +4398.930, 9.8682 +4449.260, 9.9051 +4499.600, 9.9410 +4549.930, 9.9761 +4600.260, 10.0103 +4650.590, 10.0439 +4700.920, 10.0768 +4801.580, 10.1415 +4851.910, 10.1739 +4902.240, 10.2049 +4952.580, 10.2329 +5002.910, 10.2565 +5053.240, 10.2745 +5103.570, 10.2854 +5153.500, 10.2890 +5153.500, 11.0427 +5204.610, 11.0585 +5255.320, 11.0718 +5306.040, 11.0850 +5356.750, 11.0983 +5407.460, 11.1166 +5458.170, 11.1316 +5508.890, 11.1457 +5559.600, 11.1590 +5610.310, 11.1715 +5661.020, 11.1832 +5711.740, 11.1941 +5813.160, 11.2134 +5863.870, 11.2219 +5914.590, 11.2295 +5965.300, 11.2364 +6016.010, 11.2424 +6066.720, 11.2477 +6117.440, 11.2521 +6168.150, 11.2557 +6218.860, 11.2586 +6269.570, 11.2606 +6320.290, 11.2618 +6371.000, 11.2622 \ No newline at end of file diff --git a/test/old_tests/inversion_tele_one_src/1d_model.txt b/test/old_tests/inversion_tele_one_src/1d_model.txt new file mode 100644 index 0000000..d35a8cd --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/1d_model.txt @@ -0,0 +1,789 @@ +5463, 11.3081 +5465, 11.3046 +5467, 11.3012 +5469, 11.2978 +5471, 11.2944 +5473, 11.291 +5475, 11.2876 +5477, 11.2842 +5479, 11.2807 +5481, 11.2773 +5483, 11.2739 +5485, 11.2705 +5487, 11.2671 +5489, 11.2637 +5491, 11.2603 +5493, 11.2568 +5495, 11.2534 +5497, 11.25 +5499, 11.2466 +5501, 11.2431 +5503, 11.2395 +5505, 11.2359 +5507, 11.2323 +5509, 11.2288 +5511, 11.2252 +5513, 11.2216 +5515, 11.218 +5517, 11.2144 +5519, 11.2108 +5521, 11.2072 +5523, 11.2037 +5525, 11.2001 +5527, 11.1965 +5529, 11.1929 +5531, 11.1893 +5533, 11.1857 +5535, 11.1821 +5537, 11.1785 +5539, 11.175 +5541, 11.1714 +5543, 11.1678 +5545, 11.1642 +5547, 11.1606 +5549, 11.157 +5551, 11.1534 +5553, 11.1499 +5555, 11.1463 +5557, 11.1427 +5559, 11.1391 +5561, 11.1355 +5563, 11.1319 +5565, 11.1283 +5567, 11.1247 +5569, 11.1212 +5571, 11.1176 +5573, 11.114 +5575, 11.1104 +5577, 11.1068 +5579, 11.1032 +5581, 11.0996 +5583, 11.0961 +5585, 11.0925 +5587, 11.0889 +5589, 11.0853 +5591, 11.0817 +5593, 11.0781 +5595, 11.0745 +5597, 11.0709 +5599, 11.0674 +5601, 11.0625 +5603, 11.0562 +5605, 11.05 +5607, 11.0438 +5609, 11.0376 +5611, 11.0314 +5613, 11.0251 +5615, 11.0189 +5617, 11.0127 +5619, 11.0065 +5621, 11.0003 +5623, 10.994 +5625, 10.9878 +5627, 10.9816 +5629, 10.9754 +5631, 10.9691 +5633, 10.9629 +5635, 10.9567 +5637, 10.9505 +5639, 10.9443 +5641, 10.938 +5643, 10.9318 +5645, 10.9256 +5647, 10.9194 +5649, 10.9132 +5651, 10.9069 +5653, 10.9007 +5655, 10.8945 +5657, 10.8883 +5659, 10.882 +5661, 10.8758 +5663, 10.8696 +5665, 10.8634 +5667, 10.8571 +5669, 10.8509 +5671, 10.8447 +5673, 10.8385 +5675, 10.8322 +5677, 10.826 +5679, 10.8198 +5681, 10.8136 +5683, 10.8073 +5685, 10.8011 +5687, 10.7949 +5689, 10.7887 +5691, 10.7824 +5693, 10.7762 +5695, 10.77 +5697, 10.7638 +5699, 10.7575 +5701, 10.7513 +5703, 10.2631 +5705, 10.26 +5707, 10.2569 +5709, 10.2538 +5711, 10.2507 +5713, 10.2476 +5715, 10.2445 +5717, 10.2414 +5719, 10.2384 +5721, 10.2353 +5723, 10.2322 +5725, 10.2291 +5727, 10.226 +5729, 10.2229 +5731, 10.2198 +5733, 10.2167 +5735, 10.2136 +5737, 10.2105 +5739, 10.2074 +5741, 10.2043 +5743, 10.2012 +5745, 10.1981 +5747, 10.195 +5749, 10.1919 +5751, 10.1888 +5753, 10.1857 +5755, 10.1826 +5757, 10.1795 +5759, 10.1764 +5761, 10.1733 +5763, 10.1702 +5765, 10.1671 +5767, 10.164 +5769, 10.1609 +5771, 10.1578 +5773, 10.1476 +5775, 10.1373 +5777, 10.1271 +5779, 10.1169 +5781, 10.1066 +5783, 10.0964 +5785, 10.0861 +5787, 10.0759 +5789, 10.0657 +5791, 10.0554 +5793, 10.0452 +5795, 10.035 +5797, 10.0247 +5799, 10.0145 +5801, 10.0042 +5803, 9.994 +5805, 9.98376 +5807, 9.97352 +5809, 9.96328 +5811, 9.95304 +5813, 9.94281 +5815, 9.93257 +5817, 9.92233 +5819, 9.91209 +5821, 9.90185 +5823, 9.89161 +5825, 9.88137 +5827, 9.87113 +5829, 9.86089 +5831, 9.85066 +5833, 9.84042 +5835, 9.83018 +5837, 9.81994 +5839, 9.8097 +5841, 9.79946 +5843, 9.78922 +5845, 9.77898 +5847, 9.76875 +5849, 9.75851 +5851, 9.74827 +5853, 9.73803 +5855, 9.72779 +5857, 9.71755 +5859, 9.70731 +5861, 9.69707 +5863, 9.68684 +5865, 9.6766 +5867, 9.66636 +5869, 9.65612 +5871, 9.64588 +5873, 9.63564 +5875, 9.6254 +5877, 9.61516 +5879, 9.60492 +5881, 9.59468 +5883, 9.58444 +5885, 9.57421 +5887, 9.56397 +5889, 9.55373 +5891, 9.54349 +5893, 9.53325 +5895, 9.52301 +5897, 9.51277 +5899, 9.50253 +5901, 9.49229 +5903, 9.48205 +5905, 9.47181 +5907, 9.46157 +5909, 9.45134 +5911, 9.4411 +5913, 9.43086 +5915, 9.42062 +5917, 9.41038 +5919, 9.40014 +5921, 9.3899 +5923, 9.37966 +5925, 9.36943 +5927, 9.35919 +5929, 9.34895 +5931, 9.33871 +5933, 9.32848 +5935, 9.31824 +5937, 9.308 +5939, 9.29777 +5941, 9.28753 +5943, 9.27729 +5945, 9.26705 +5947, 9.25682 +5949, 9.24658 +5951, 9.23634 +5953, 9.2261 +5955, 9.21587 +5957, 9.20563 +5959, 9.19539 +5961, 9.18516 +5963, 9.17492 +5965, 9.16468 +5967, 9.15444 +5969, 9.14421 +5971, 9.13397 +5973, 8.90137 +5975, 8.89753 +5977, 8.89368 +5979, 8.88983 +5981, 8.88599 +5983, 8.88214 +5985, 8.87829 +5987, 8.87445 +5989, 8.8706 +5991, 8.86675 +5993, 8.86291 +5995, 8.85906 +5997, 8.85521 +5999, 8.85137 +6001, 8.84752 +6003, 8.84367 +6005, 8.83983 +6007, 8.83598 +6009, 8.83213 +6011, 8.82829 +6013, 8.82444 +6015, 8.82059 +6017, 8.81675 +6019, 8.8129 +6021, 8.80905 +6023, 8.8052 +6025, 8.80135 +6027, 8.79751 +6029, 8.79366 +6031, 8.78981 +6033, 8.78596 +6035, 8.78211 +6037, 8.77827 +6039, 8.77442 +6041, 8.77057 +6043, 8.76672 +6045, 8.76287 +6047, 8.75903 +6049, 8.75518 +6051, 8.75133 +6053, 8.74748 +6055, 8.74363 +6057, 8.73979 +6059, 8.73594 +6061, 8.73209 +6063, 8.72824 +6065, 8.72439 +6067, 8.72055 +6069, 8.7167 +6071, 8.71285 +6073, 8.709 +6075, 8.70516 +6077, 8.70131 +6079, 8.69746 +6081, 8.69361 +6083, 8.68977 +6085, 8.68592 +6087, 8.68207 +6089, 8.67822 +6091, 8.67438 +6093, 8.67053 +6095, 8.66668 +6097, 8.66283 +6099, 8.65899 +6101, 8.65514 +6103, 8.65129 +6105, 8.64744 +6107, 8.6436 +6109, 8.63975 +6111, 8.6359 +6113, 8.63206 +6115, 8.62821 +6117, 8.62436 +6119, 8.62051 +6121, 8.61667 +6123, 8.61282 +6125, 8.60897 +6127, 8.60513 +6129, 8.60128 +6131, 8.59743 +6133, 8.59358 +6135, 8.58974 +6137, 8.58589 +6139, 8.58204 +6141, 8.5782 +6143, 8.57435 +6145, 8.5705 +6147, 8.56665 +6149, 8.56281 +6151, 8.55896 +6153, 7.99096 +6155, 7.99223 +6157, 7.99349 +6159, 7.99475 +6161, 7.99601 +6163, 7.99728 +6165, 7.99854 +6167, 7.9998 +6169, 8.00107 +6171, 8.00233 +6173, 8.00359 +6175, 8.00485 +6177, 8.00612 +6179, 8.00738 +6181, 8.00864 +6183, 8.00991 +6185, 8.01117 +6187, 8.01243 +6189, 8.01368 +6191, 8.01493 +6193, 8.01618 +6195, 8.01743 +6197, 8.01868 +6199, 8.01993 +6201, 8.02119 +6203, 8.02244 +6205, 8.02369 +6207, 8.02494 +6209, 8.02619 +6211, 8.02744 +6213, 8.02869 +6215, 8.02995 +6217, 8.0312 +6219, 8.03245 +6221, 8.0337 +6223, 8.03494 +6225, 8.03618 +6227, 8.03742 +6229, 8.03866 +6231, 8.0399 +6233, 8.04114 +6235, 8.04238 +6237, 8.04362 +6239, 8.04486 +6241, 8.0461 +6243, 8.04734 +6245, 8.04858 +6247, 8.04982 +6249, 8.05106 +6251, 8.0523 +6253, 8.05354 +6255, 8.05478 +6257, 8.05601 +6259, 8.05724 +6261, 8.05847 +6263, 8.0597 +6265, 8.06092 +6267, 8.06215 +6269, 8.06338 +6271, 8.06461 +6273, 8.06583 +6275, 8.06706 +6277, 8.06829 +6279, 8.06952 +6281, 8.07074 +6283, 8.07197 +6285, 8.0732 +6287, 8.07443 +6289, 8.07565 +6291, 8.07688 +6293, 8.0781 +6295, 8.07932 +6297, 8.08054 +6299, 8.08176 +6301, 8.08297 +6303, 8.08419 +6305, 8.08541 +6307, 8.08663 +6309, 8.08785 +6311, 8.08907 +6313, 8.09028 +6315, 8.09149 +6317, 8.09271 +6319, 8.09392 +6321, 8.09513 +6323, 8.09634 +6325, 8.09755 +6327, 8.09877 +6329, 8.09998 +6331, 8.10119 +6333, 8.1024 +6335, 8.10361 +6337, 8.10481 +6339, 8.10602 +6341, 8.10723 +6343, 8.10844 +6345, 8.10964 +6347, 6.8 +6349, 6.8 +6351, 6.8 +6353, 6.8 +6355, 6.8 +6357, 5.8 +6359, 5.8 +6361, 5.8 +6363, 5.8 +6365, 5.8 +6367, 5.8 +6369, 5.8 +6371, 5.8 +6373, 5.8 +6375, 5.8 +6377, 5.8 +6379, 5.8 +6381, 5.8 +6383, 5.8 +6385, 5.8 +6387, 5.8 +6389, 5.8 +6391, 5.8 +6393, 5.8 +6395, 5.8 +6397, 5.8 +6399, 5.8 +6401, 5.8 +6403, 5.8 +6405, 5.8 +6407, 5.8 +6409, 5.8 +6411, 5.8 +6413, 5.8 +6415, 5.8 +6417, 5.8 +6419, 5.8 +6421, 5.8 +6423, 5.8 +6425, 5.8 +6427, 5.8 +6429, 5.8 +6431, 5.8 +6433, 5.8 +6435, 5.8 +6437, 5.8 +6439, 5.8 +6441, 5.8 +6443, 5.8 +6445, 5.8 +6447, 5.8 +6449, 5.8 +6451, 5.8 +6453, 5.8 +6455, 5.8 +6457, 5.8 +6459, 5.8 +6461, 5.8 +6463, 5.8 +6465, 5.8 +6467, 5.8 +6469, 5.8 +6471, 5.8 +6473, 5.8 +6475, 5.8 +6477, 5.8 +6479, 5.8 +6481, 5.8 +6483, 5.8 +6485, 5.8 +6487, 5.8 +6489, 5.8 +6491, 5.8 +6493, 5.8 +6495, 5.8 +6497, 5.8 +6499, 5.8 +6501, 5.8 +6503, 5.8 +6505, 5.8 +6507, 5.8 +6509, 5.8 +6511, 5.8 +6513, 5.8 +6515, 5.8 +6517, 5.8 +6519, 5.8 +6521, 5.8 +6523, 5.8 +6525, 5.8 +6527, 5.8 +6529, 5.8 +6531, 5.8 +6533, 5.8 +6535, 5.8 +6537, 5.8 +6539, 5.8 +6541, 5.8 +6543, 5.8 +6545, 5.8 +6547, 5.8 +6549, 5.8 +6551, 5.8 +6553, 5.8 +6555, 5.8 +6557, 5.8 +6559, 5.8 +6561, 5.8 +6563, 5.8 +6565, 5.8 +6567, 5.8 +6569, 5.8 +6571, 5.8 +6573, 5.8 +6575, 5.8 +6577, 5.8 +6579, 5.8 +6581, 5.8 +6583, 5.8 +6585, 5.8 +6587, 5.8 +6589, 5.8 +6591, 5.8 +6593, 5.8 +6595, 5.8 +6597, 5.8 +6599, 5.8 +6601, 5.8 +6603, 5.8 +6605, 5.8 +6607, 5.8 +6609, 5.8 +6611, 5.8 +6613, 5.8 +6615, 5.8 +6617, 5.8 +6619, 5.8 +6621, 5.8 +6623, 5.8 +6625, 5.8 +6627, 5.8 +6629, 5.8 +6631, 5.8 +6633, 5.8 +6635, 5.8 +6637, 5.8 +6639, 5.8 +6641, 5.8 +6643, 5.8 +6645, 5.8 +6647, 5.8 +6649, 5.8 +6651, 5.8 +6653, 5.8 +6655, 5.8 +6657, 5.8 +6659, 5.8 +6661, 5.8 +6663, 5.8 +6665, 5.8 +6667, 5.8 +6669, 5.8 +6671, 5.8 +6673, 5.8 +6675, 5.8 +6677, 5.8 +6679, 5.8 +6681, 5.8 +6683, 5.8 +6685, 5.8 +6687, 5.8 +6689, 5.8 +6691, 5.8 +6693, 5.8 +6695, 5.8 +6697, 5.8 +6699, 5.8 +6701, 5.8 +6703, 5.8 +6705, 5.8 +6707, 5.8 +6709, 5.8 +6711, 5.8 +6713, 5.8 +6715, 5.8 +6717, 5.8 +6719, 5.8 +6721, 5.8 +6723, 5.8 +6725, 5.8 +6727, 5.8 +6729, 5.8 +6731, 5.8 +6733, 5.8 +6735, 5.8 +6737, 5.8 +6739, 5.8 +6741, 5.8 +6743, 5.8 +6745, 5.8 +6747, 5.8 +6749, 5.8 +6751, 5.8 +6753, 5.8 +6755, 5.8 +6757, 5.8 +6759, 5.8 +6761, 5.8 +6763, 5.8 +6765, 5.8 +6767, 5.8 +6769, 5.8 +6771, 5.8 +6773, 5.8 +6775, 5.8 +6777, 5.8 +6779, 5.8 +6781, 5.8 +6783, 5.8 +6785, 5.8 +6787, 5.8 +6789, 5.8 +6791, 5.8 +6793, 5.8 +6795, 5.8 +6797, 5.8 +6799, 5.8 +6801, 5.8 +6803, 5.8 +6805, 5.8 +6807, 5.8 +6809, 5.8 +6811, 5.8 +6813, 5.8 +6815, 5.8 +6817, 5.8 +6819, 5.8 +6821, 5.8 +6823, 5.8 +6825, 5.8 +6827, 5.8 +6829, 5.8 +6831, 5.8 +6833, 5.8 +6835, 5.8 +6837, 5.8 +6839, 5.8 +6841, 5.8 +6843, 5.8 +6845, 5.8 +6847, 5.8 +6849, 5.8 +6851, 5.8 +6853, 5.8 +6855, 5.8 +6857, 5.8 +6859, 5.8 +6861, 5.8 +6863, 5.8 +6865, 5.8 +6867, 5.8 +6869, 5.8 +6871, 5.8 +6873, 5.8 +6875, 5.8 +6877, 5.8 +6879, 5.8 +6881, 5.8 +6883, 5.8 +6885, 5.8 +6887, 5.8 +6889, 5.8 +6891, 5.8 +6893, 5.8 +6895, 5.8 +6897, 5.8 +6899, 5.8 +6901, 5.8 +6903, 5.8 +6905, 5.8 +6907, 5.8 +6909, 5.8 +6911, 5.8 +6913, 5.8 +6915, 5.8 +6917, 5.8 +6919, 5.8 +6921, 5.8 +6923, 5.8 +6925, 5.8 +6927, 5.8 +6929, 5.8 +6931, 5.8 +6933, 5.8 +6935, 5.8 +6937, 5.8 +6939, 5.8 +6941, 5.8 +6943, 5.8 +6945, 5.8 +6947, 5.8 +6949, 5.8 +6951, 5.8 +6953, 5.8 +6955, 5.8 +6957, 5.8 +6959, 5.8 +6961, 5.8 +6963, 5.8 +6965, 5.8 +6967, 5.8 +6969, 5.8 +6971, 5.8 +6973, 5.8 +6975, 5.8 +6977, 5.8 +6979, 5.8 +6981, 5.8 +6983, 5.8 +6985, 5.8 +6987, 5.8 +6989, 5.8 +6991, 5.8 +6993, 5.8 +6995, 5.8 +6997, 5.8 +6999, 5.8 +7001, 5.8 +7003, 5.8 +7005, 5.8 +7007, 5.8 +7009, 5.8 +7011, 5.8 +7013, 5.8 +7015, 5.8 +7017, 5.8 +7019, 5.8 +7021, 5.8 +7023, 5.8 +7025, 5.8 +7027, 5.8 +7029, 5.8 +7031, 5.8 +7033, 5.8 +7035, 5.8 +7037, 5.8 +7039, 5.8 diff --git a/test/old_tests/inversion_tele_one_src/EARTHQUAKES_tele b/test/old_tests/inversion_tele_one_src/EARTHQUAKES_tele new file mode 100644 index 0000000..baca2e4 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/EARTHQUAKES_tele @@ -0,0 +1,2 @@ +1 +50.0 40.0 67.5 diff --git a/test/old_tests/inversion_tele_one_src/README.md b/test/old_tests/inversion_tele_one_src/README.md new file mode 100644 index 0000000..e05d104 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/README.md @@ -0,0 +1,19 @@ +# Inversion test + +This is a test setup for inversion calculation. + +1. Run all cells of `make_test_model.ipynb` for creating + - source, receiver file + - true model + - initial model + +2. then run TOMOATT forward with `input_params_pre.yml` for calculating the true arrival times at the stations +-> this will output src_rec_result.dat file which includes the arrival time at each station + +3. run TOMOATT in inversion mode with `input_params.yml`. + +4. at first, TOMOATT calculates 2d traveltime field for each teleseismic event. +TOMOATT will find the event source is teleseismic if the event origin is outside of the simulation domain. +Calculated 2d traveltime field is saved in OUTPUT_FILES directory with 2d_travel_time_field_{src_id}.h5 +2D solver run will be skipped if this file is found by TOMOATT. + \ No newline at end of file diff --git a/test/old_tests/inversion_tele_one_src/STATIONS b/test/old_tests/inversion_tele_one_src/STATIONS new file mode 100644 index 0000000..45b9ebc --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/STATIONS @@ -0,0 +1,51 @@ +50 +0.0 39.48283902145424 29.281513864182138 +0.0 43.998782050303745 37.19643899137363 +0.0 37.30760565117001 33.11401338760367 +0.0 41.68653979748724 35.934639928020964 +0.0 36.61537788634567 23.78498599183464 +0.0 39.53372622366508 23.841070463667265 +0.0 40.35236327081236 19.52357011656586 +0.0 40.521021601341126 15.382805946506043 +0.0 40.652338638485574 15.43974831654911 +0.0 36.06181789303116 31.492644232896822 +0.0 40.220383199721056 30.131592405768828 +0.0 32.690556139214564 29.12155270260603 +0.0 41.38557105851774 21.887079844236876 +0.0 31.5803169410531 15.828284584124932 +0.0 39.72076150617663 29.444060586520337 +0.0 39.153291824326395 15.348344308914173 +0.0 37.3196743759749 24.882795770531047 +0.0 45.38532464248119 31.54872211314764 +0.0 35.027710629652205 20.71225367598449 +0.0 34.73430718282967 30.761114486702205 +0.0 41.62771310002017 20.964465183242254 +0.0 41.96541753785979 22.638041556854436 +0.0 34.18819520502442 31.526202657153434 +0.0 33.289630995715136 26.11544195974523 +0.0 44.99003971165912 31.18999369792465 +0.0 43.71764805530941 27.09889711083143 +0.0 39.149408331767305 24.672389827246107 +0.0 40.94054916696042 19.539882515019904 +0.0 39.55054219303491 17.883860634990157 +0.0 45.51670367081901 35.889274144396786 +0.0 45.09106334932971 23.658196610348384 +0.0 45.3510270418072 33.647693941540325 +0.0 38.04870033400669 25.845480891830285 +0.0 40.2502568580665 27.674022408814878 +0.0 38.91110035012384 23.488821700130032 +0.0 33.038736736209884 31.45966132466628 +0.0 45.13288373382176 32.43630443882502 +0.0 38.95996799830328 24.837368712391495 +0.0 43.491229999719096 29.79312700226344 +0.0 35.465004203274056 33.62459653703114 +0.0 40.21403161430093 17.72710938876384 +0.0 39.55239238847392 19.234971464234178 +0.0 35.94933583184151 22.513051849149996 +0.0 44.119556199620654 20.89644919626955 +0.0 35.522471813078226 19.309847752271143 +0.0 41.32129208930305 29.532291144989525 +0.0 38.64267131605151 25.351066793111908 +0.0 34.925624689463994 33.227497100537946 +0.0 33.199759796131325 22.212825309023625 +0.0 34.47881106709583 28.51463648501263 diff --git a/test/old_tests/inversion_tele_one_src/check_1d_model_and_Tfield.ipynb b/test/old_tests/inversion_tele_one_src/check_1d_model_and_Tfield.ipynb new file mode 100644 index 0000000..242fb28 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/check_1d_model_and_Tfield.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'P-wave velocity (km/s)')" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEJCAYAAACT/UyFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA2A0lEQVR4nO3dd3xVVbbA8d9KIZHeQlHEgChFuoiAUgQFFAQLjiIIiIpgxZnRwT76ZubpzBsb6igzNBXbYAFhRBRF1MFCB6WEEhCUFgg9pNz1/jiHkHKTHJLbkru+n08+uXefc89ZuVxWdvbZZ21RVYwxxkSPmHAHYIwxJrQs8RtjTJSxxG+MMVHGEr8xxkQZS/zGGBNlLPEbY0yUCVriF5EpIrJbRNb42fY7EVERqRus8xtjjPEvmD3+aUD/go0icibQF9gWxHMbY4wpQlywDqyqi0Qk2c+mZ4EHgFlej1W3bl1NTvZ3KGOMMUVZunTpXlVNKtgetMTvj4gMBnao6koR8fy65ORklixZErzAjDGmAhKRrf7aQ5b4RaQy8BDOMI+X/ccAYwAaN24cxMiMMSa6hHJWz9lAE2CliKQCjYBlItLA386qOklVO6lqp6SkQn+pGGOMKaWQ9fhVdTVQ78RzN/l3UtW9oYrBGGNMEBO/iLwF9ALqish24HFVnRys8xkTLbKysti+fTsZGRnhDsVEiMTERBo1akR8fLyn/YM5q2doCduTg3VuYyqy7du3U61aNZKTkzmVSRKmYlJV0tLS2L59O02aNPH0Grtz15hyJiMjgzp16ljSNwCICHXq1DmlvwAt8RtTDlnSN3md6uchpPP4jSm3VOHXFXA0DTKPQtYxyDrifM88Co06wdmXBD2M5Alz3Uebg36uvFKfGhDS85ngssRvTEkO74GP7oX1c4vep35rGPdN6GIKs9GjRzNnzhzq1avHmjWFynEBkJqaysCBA4vcHihVq1bl8OHDpdqnW7du/Pe//w1WaBHLEr8xxVn7EXw0Ho4fgkufgLO6QfxpEF8ZKlVxHn94B6RtCnekITVq1CjuuusuRowYEe5QyqQsST87O5u4uPKZQm2M3xh/Mg7AB+PgneFQ4wy4fRFcPB7O7AwN2kCds6FaA0isARJ9/4169OhB7dq1C7UvXbqUdu3a0a5dO1566SW/r124cCE9e/Zk8ODBNG3alAkTJjBjxgw6d+5MmzZt2LTJ+SWamppK7969adu2LX369GHbNqeu45YtW+jatStt2rThkUceyXfsv/3tb1xwwQW0bduWxx9/vMSfo2rVqrkx9erViyFDhtCiRQuGDRuGqhbav1evXowfP55OnTrx/PPPM2rUKGbOnFnq44VL9H1ijSlJyqfwUhdY9Q70/APcugDqtQh3VOXCzTffzMSJE1m5cmWx+61cuZJXXnmFtWvX8vrrr7Nhwwa+//57br31ViZOnAjA3XffzciRI1m1ahXDhg3jnnvuAeDee+9l3LhxrF69moYNG+Yec/78+aSkpPD999+zYsUKli5dyqJFizzHvnz5cp577jl++uknNm/ezDff+B+6y8zMZMmSJfzud78LyPHCwRK/MSccS4dZd8KMIZBYHW79FC55CGK93RQT7dLT00lPT6dHjx4A3HTTTUXue8EFF9CwYUMSEhI4++yz6dvXKeHVpk0bUlNTAVi8eDE33nhj7rG+/vprAL755huGDh1a6Bzz589n/vz5dOjQgY4dO7Ju3TpSUlI8x9+5c2caNWpETEwM7du3z42joOuvvz6gxwuH8jlAZUygpXwKs++Bwzvh4t9CrwkQlxDuqCqshIST721MTEzu85iYGLKzs0t8vb/pi6rKgw8+yO23317mmGJjY4uMo0qVKrmP4+Li8Pl8APh8PjIzM0/5eOFgPX4T3Y6lw4d5e/mfwaWPW9IvhZo1a1KzZs3cnvmMGTPKdLxu3brx9ttv5x6re/fuAFx00UX52k/o168fU6ZMyZ29s2PHDnbv3l2mGEqSnJzM0qVLAZg9ezZZWVlBPV+gWOI30WvDfHi5K6x8C7r/zrmAe8b54Y6qXBg6dChdu3Zl/fr1NGrUiMmTnTJcU6dO5c4776R9+/Zlvpg5ceJEpk6dStu2bXn99dd5/vnnAXj++ed56aWXaNOmDTt27Mjdv2/fvtx44425F36HDBnCoUOHyhRDSW677Ta+/PJL2rVrx+LFi/P9NRDJJJKuNBelU6dOaguxmIA5lg6fPAQrZkBSS7jqZTijY+mP985NsDcF7vw2YCEW5eQNXKFlN3BFvrVr19KyZct8bSKyVFU7FdzXxvhNdNkwHz66Bw7vdnr5Pf9QroZ1Up8a4Pc/uDGnwhK/iQ4Fe/k3vFm2Xr4x5ZglflPxbfjEKblQTnv5xgSaJX5TcR3bD/MegpVvWi/fmDyCuQLXFGAgsFtVW7tt/wMMBnzAbmCUqv4SrBhMFMvXy/899HzAevnGuII5nXMa0L9A299Uta2qtgfmAI8F8fwmGh3bDx+MhTd/A6fVcubl93nUkr4xeQQt8avqImBfgbaDeZ5WASJ/LqkpPzZ84szLX/Wu08sfs9CGdsLshRdeoGXLlgwbNizcoRSpf//+1KxZk4EDBxa5z8KFC4vdHgipqam0bt26zPt4EfIxfhH5MzACOAAEf+UKU/EdS4d5Dzpj+fVa2Vh+CKkqqkpMjP8+5Msvv8xnn31Go0aNPB0vHKWO77//fo4ePcqrr74a0vOGU8jv3FXVh1X1TGAGcFdR+4nIGBFZIiJL9uzZE7oATfmyYT687FbStF5+SKSmptK8eXNGjBhB69at+fnnn/2WQx47diybN2/m8ssv59lnn+XIkSOMHj2azp0706FDB2bNmgXAtGnTGDRoEL1796ZPnz7F7nfNNdfQv39/zjnnHB544IHcmObNm0fHjh1p164dffr0ASjyOAX16dOHatWqFWqfN28eLVq0oGPHjrz//vt+Xztt2jSuuuoqLrvsMpKTk3nxxRd55pln6NChA126dGHfPmfQY8WKFXTp0oW2bdty9dVXs3//fqDoMtY5OTncf//9ue9poH8phXNWzwzgP4DfotmqOgmYBM6duyGMy5QHx9Lhk4dhxRuQ1CJ6e/kfT4CdqwN7zAZt4PKnit0lJSWF6dOn06VLl3zlkFWVQYMGsWjRIl555RXmzZvHF198Qd26dXnooYfo3bs3U6ZMIT09nc6dO3PppZcCsGzZMlatWkXt2rWL3W/FihUsX76chIQEmjdvzt13301iYiK33XYbixYtokmTJrnJ9s9//rPf43gpq5CRkcFtt93G559/TrNmzYqtyLlmzRqWL19ORkYGzZo14+mnn2b58uXcd999vPbaa4wfP54RI0YwceJEevbsyWOPPcYTTzzBc889x80338yLL75Ijx49uP/++3OPOXnyZGrUqMEPP/zA8ePHueiii+jbt2/A1loOaY9fRM7J83QwsC6U5zcVRMpnbo2dN51Kmrcvis6kH0ZnnXUWXbp0AbyXQ54/fz5PPfUU7du3p1evXmRkZOQurnLZZZflLuxS3H59+vShRo0aJCYm0qpVK7Zu3cq3335Ljx49aNKkCYCn45Rk3bp1NGnShHPOOQcRYfjw4UXue8kll1CtWjWSkpKoUaMGV155JXCyxPSBAwdIT0+nZ8+eAIwcOZJFixYVW8Z6/vz5vPbaa7Rv354LL7yQtLS0UyoxXZJgTud8C+gF1BWR7Tg9+ytEpDnOdM6twNhgnd9UQBkHnF7+8tehbnO4/g1oFOVF1UromQdL3l6z13LIqsp7771H8+bN87V/9913hY5X1H6nUuq4qOMEWllLTPujqkycOJF+/frlaw9UTf9gzuoZqqoNVTVeVRup6mRVvVZVW7tTOq9U1R0lH8kYYOMCp5e/YgZcNN7p5Ud70o8QXssh9+vXj4kTJ+ZW7Vy+fHmRx/Oy3wldunRh0aJFbNmyBSB3qOdUj5NXixYtSE1NzV0G8q233vL82oJq1KhBrVq1+OqrrwB4/fXX6dmzZ7FlrPv168c//vGP3DLPGzZs4MiRI6WOoSC7c9dEtoyDMP8RWDYd6p4Lt3wKjQoVGzRh1LdvX9auXUvXrl0BZ93ZN954g3r16uXb79FHH2X8+PG0bdsWn89HkyZNmDNnTqHjed3vhKSkJCZNmsQ111yDz+ejXr16fPrpp56P0717d9atW8fhw4dzS0z369ePSZMmMWDAACpXrkz37t3LVOJ5+vTpjB07lqNHj9K0aVOmTp0KOGWsR48ejYjkrkIGcOutt5KamkrHjh1RVZKSkvjwww9Lff6CrCyziVybvoDZd8PBHdD1LrjkYYhPDHdUhYWwLDP4L79rjJVlNuVb5hH49DH44V9QpxmM/gTO7BzuqIypMCzxm8iyYym8PwbSNkKXO51yC/GnhTsqYyoUS/wmMuRkw1d/hy+fhmoNYcRsaNoz3FFFLFUN2JxuU/6d6pC9JX4Tfmmb4IPbYfsP0OY3cMXf4LSa4Y4qYiUmJpKWlkadOnUs+RtUlbS0NBITvV//ssRvwkfVma0z7yGIjYMhU6D1teGOKuI1atSI7du3Y6VMzAmJiYme6yGBJX4TLof3ODN2NnwMTXrCVf+AGmeEO6pyIT4+PvcuVWNKwxK/Cb2Uz+DDsc4c/X7/CxeOhSKqOxpjAs8Svwmd7Ez4/En470Sod55zAbd+q3BHZUzUscRvQmPfFnjvFme6ZqdboN+fbZqmMWFiid8E35r34KPxgMBvXoNWg8MdkTFRzRK/CZ7MozBvgjNzp9EFcO1kqHVWuKMyJupZ4jfBkbbJqWGz+ye4+D6nzk5sfLijMsZgid8Ew9qP4MM7ICYWhs+EZpeGOyJjTB6W+E3g5GTDgifgvy/A6R3hN9OhZuNwR2WMKSBok6dFZIqI7BaRNXna/iYi60RklYh8ICI1g3V+E2KHdsJrg5yk3+kWGD3Pkr4xESqYd81MA/oXaPsUaK2qbYENwINBPL8Jla3/hVd7wI5lcPWrMPAZiEso+XXGmLAI5tKLi4B9Bdrmq+qJRSi/BbwXlzCRRxW+/ydMGwiVqsJtC6DdDeGOyhhTgnCO8Y8G3gnj+U1ZZGfCx/fD0mlwTj+49p+QWCPcURljPAhL4heRh4FsYEYx+4wBxgA0bmxjxRHl8B549ybYthgu/i30fsSZwWOMKRdCnvhFZBQwEOijxaweoKqTgEngrLkbmuhMiX5dCW8PgyN7nBuy2gwJd0TGmFMU0sQvIv2BB4Ceqno0lOc2AbDmfWd+fuXazqyd0zuEOyJjTCkUm/hFpBFwA9AdOB04BqwB5gIfq6qvmNe+BfQC6orIduBxnFk8CcCn7spB36rq2LL/GCaoVJ0lERf+L5zZBa5/HarWC3dUxphSKjLxi8hU4AxgDvA0sBtIBM7Fmab5sIhMcGfvFKKqQ/00Ty5zxCa0sjPho3th5ZvQ7ka48jmbqmlMOVdcj//vqrrGT/sa4H0RqQTYVdeK7Fi6cxF3yyLo9RD0fABsjVdjyr0iE7+/pC8itYAzVXWVqmYCG4MZnAmj9J9hxnWQlgJXvQLt/f0BZ4wpj0q8uCsiC4FB7r5Lgd0i8l9VvS/IsZlw+WUFvPkbyMqA4e9D057hjsgYE0Be7tytoaoHgWuA11T1QqBPcMMyYbNhPky9AmIrwS2fWNI3pgLykvjjRKQh8BucC72molr5Drx1A9Q5G279DOq1DHdExpgg8JL4nwQ+ATaq6g8i0hRICW5YJhh+ST/GrBU7/G/87lX4YAyc1Q1u/g9UaxDa4IwxIVPcdM6hwHxV/Tfw7xPtqroZuDYEsZkA2n0wgxv/+S2paUc5eCyLm7omOxtU4cu/wsK/QPMBMGQKxCeGNVZjTHAVd3G3MfBvEYkHFgAfA98XV2bBRKa0w8cZ9q/vSE1zbpZ+dNaPHM/2cetFyfDJg/DdK84c/UETIdbW5jGmoityqEdVn1bV3sAVwEqcaprLRORNERkhIvVDFaQpvfSjmQyf/D0puw/na//fuWtY98pwJ+l3uQMGv2RJ35goUeIYv6oeUtUPVPV2Ve0A/AlIAl4LenSmTA5mZDFiyves/fVgvvYEMnkl/jla7J7L12fejvb9M8QEc00eY0wk8fS/XUTaisggEbkGaAFsUdV+wQ3NlMWR49ncPPUHVm0/kK89gUxejX+Wy2KX8ljWSIan9OQvH6/DRvCMiR5ebuCaArQFfgROFGVT4P0gxmXKICMrh1unL2Hp1v352hPIZFL8M3SPWc0DWbfxbs4lAPzzqy0cz/bxxyvPIybGSjIYU9F5GdTtoqqtgh6JCYjj2TmMeX0pizen5WvPm/T/kH0b/87plW/7e0u3c/NFTWhSt0oIozUmivlyIPMIZB2DnOPOc18OaA74st3n2c59NQFe3c5L4l8sIq1U9aeAntkEXFaOjztnLGfRhj352hPI5J/xf+fimDV+k35ifAxTRl1gSd+Y0jh+CA7thEO/wqFdcDQNju0v/JVxALKO5k/2Xgx/D5pdGtCQvST+13CS/07gOCCAqmrbgEZiyiQ7x8f4t1fw2dpd+drzJv0HsscwMyd/CYZKcTH8a8QFXNi0TijDNaZ8yDwC6dtgfyrs3woHt7tJ/kSi3wmZh/2/NrEGJNaE02o5XzUaQaWqEH8aVKoM8VVOPo5NgJg4ZwnTmFiQ2JPPG7QL+I/lJfFPBm4CVnNyjN9EmKc+Xsfc1b/ma8ub9O/Pup33fD3ybY+PFV4dfj4Xn1M3lKEaE1lyspyknpYCe1Pc7xshbSMc2Z1/39gEqN4QqjaA+q2h2WXOXe7VGrrfG0CVJCfpR/A61F4S/x5VnR30SEypLd26j399vSVfWxWOMSn+GbrG/OQ36cfGCBOHduSSFraSlokix/bDztXw6yrYucr5npbijKWfULkO1DkHzu0LtZpArWTnq+ZZUKVuhViTwkviXy4ibwIf4Qz1AKCqxc7qcWcDDQR2q2prt+064I9AS6Czqi4pZdzGpar8ae7afG01OcS0Sk/TWlK5L2scs3wX59seI/Ds9e3p39rq8ZgKyOeDAz/DnnXO194USNvkJPgjea5/VWsIDdpC8/5Ooq97DtRp5qwpXcF5Sfyn4ST8vnnavEznnAa8SP4bvdbglHd+1XuIpjj/Wb2T5dvSc5/Hkc30Sk/TQn5mbNZ9fOY7v9Br/jqkHYPanR7CKI0JgcUvw+p3Yc8GyDpysr1KktuD7+8k9/rnOePmVZPCF2uYeUn8v1PVfXkbRKRJSS9S1UUiklygba37+lOJ0RQhM9vH0/PW5WsbEzuXdjGbGZd5r9+k/6erWjPk/EahCtGY0Pn+VcjJho4joF4LSGoBSc2dC6smHy+J/yMRudxdjAURaYlTrbN1MAMTkTHAGIDGjW1pX39e/3Yr2/YdzX3eVH7h3rj3mZvTmY99Fxba/9GBrRje5axQhmhMaCVfBJc/Fe4oIp6Xkg1/wUn+VUXkfGAmMDy4YYGqTlLVTqraKSkpev8kK8qBY1lM/PzksgiCj6fi/8kxKvHHrFGF9r+7dzNuubjEP9SMMVGgxB6/qs51SzPPB6oBV6vqhqBHZor18hcbST+alft8WOwCOses5/dZt7OHmvn2bVy7Mnf1bhbiCI0xkaq4hVgm4lzEPaEGsAm4S0RQ1XuCHZzx7+d9R5n6TWru89PZy4S4t1iU04aZOT0K7f9A/+YkxEXunGJjTGgV1+MvONVy6akcWETeAnoBdUVkO/A4sA+YiFPWea6IrLAqn6du8tdbyMw5WS/vT/FTEJSHsm/FubH6pPZn1mRAm4Yhj9EYE7mKTPyqOr0sB1bVoUVs+qAsxzXw+bqTdxM2lt30jl3BX7N+w3YtfC3kkQEtbRaVMSafIi/uishHInKlO75fcFtTEXlSREYHNzzjz68HjuU+jse543CbFl4Qrf95DeiUXPFvRjHGnJrihnpuA34LPCci+4A9QCLQBNgIvKiqs4IfoikoK8fboikP9G8e5EiMMeVRcUM9O4EHgAfcG7EaAseADap6tKjXmeDy+bwlfRFomlQ1yNEYY8ojT6trq2oqkBrUSIwn2R4Tf5ytpGWMKYKtsF3O5HhM/DF2QdcYUwRL/OVMjsdF0a3Hb4wpSomJ353ZY78gIkSOxwu7sZb4jTFF8JLQrwdSROSvItIi2AGZ4nnt8VviN8YUpcTEr6rDgQ445RqmichiERkjItWCHp0pJNvnbfXL2Bj7I80Y45+n7OCWZJ4JvI0zrfNqYJmI3B3E2IwfHvM+sZb3jTFF8DLGP1hEPgAWAvE4SyZeDrQDfhfc8ExBy7bt97RfnPX4jTFF8DKP/xrgWVVdlLdRVY+KyC3BCcv4883GvdwxY5mnfW2M31RYPh/s3eAslr4/FdK3QcYBOLQr3JGVG14S/86CSV9EnlbVP6jqgiDFZQpI3XuE21/3XiDVpnOaCuXQLkiZDxvmweYvIfPQyW1V6zvLK9Zr6ayra0rkJfFfBvyhQNvlftpMEL3weQqHj2d73r9pUpUgRmNMCBz8BVa9A2s/gh1up6d6I2hzLTTqDKd3gNpNIT4xvHGWQ8UtxDIOuAM4W0RW5dlUDfgm2IGZk44cz+Y/q3/1u61jjLP8YhrV87Wff5ZV5TTlUOZRWDcXVsyAzQsBhTPOh96POL35+q2dQlSmTIrr8b8JfAz8LzAhT/shVd0X1KhMPp+v201GVuHpPPFkc0/sB6zyNWGxr1Vue3KdytzU1RZVN+WEKmxbDCvehB8/dIZxajSGng9AuxucXr0JqOISv6pqqojcWXCDiNQuKfmLyBRgILBbVVufeB3wDpCMU/TtN6rqbZpKFJu7yn9v/7rYLzkzZg+PZo7ixMpb1RPjePHGjlRN8FR/z5jw2b8VVr4NK990LtLGV4HzroJ2Q+Gsi8BmpgVNST3+gThLLir51/RToKRfw9OAF4HX8rRNABao6lMiMsF9btcKinH4eDZfrN9dqD2BTO6K+4BlvmYs9LXPbZ85rhvn1rd760yEyjrm9OqXvwFbvwYEmnSHnhOg5ZWQYKXEQ6G4evwD3e9NSnNgVV3k1vHPazDOOrwA03HuDbDEX4wFa3dxPLvwMM8NsV9wuuzj/qzbOfE7+dWbzrekbyLT7nWwdCqsfMuZelm7qTNu3/YGqHlmuKOLOiWOB4jI1cDnqnrAfV4T6KWqH5bifPVV9cS4xU6g8HqBJ887BhgD0Lhx41KcqmLwN8yTyHHujJvFd74WfONrDUDj2pXp26rIt9OY0Ms6Bj/NgqXTnDH8mHhoNQjOvxmSL7aLtGHkZSD4cVXNXSBdVdNF5HHgw7KcWFVVRIqsOKaqk4BJAJ06dfJWmayCOZSRxcINewq1D4/9jHqSzl2Zd3Oitz+gbUNbVN1Ehj3rnWS/4k3ISHd695c9Ce2HQZW64Y7O4C3x+7vCUtorh7tEpKGq/ioiDYHCg9cm14K1u8ksMMxTmQzGxc3mq5zWfK8tc9sHtGkY6vCMOcnng42fwrcvO9MwY+KdMfvzR0Fyd7tQG2G8JPAlIvIM8JL7/E6cC76lMRsYCTzlfrfF2osxx88wz6jYT6gjh3gm+7rctuQ6lTnv9OqF9jUm6I4fdsbtv/0H7NsE1U6HPo9BhxFQNSnc0ZkieEn8dwOP4kzDBPgUJ/kXS0TewrmQW1dEtgOP4yT8d90aP1uB35Qi5qhwKCOLRQWGeapxlDFxc/g8pz3L9ZzcdhvmMSGXvg2+nwRLX4PjB5ybrK6dDK0GQ2x8uKMzJSgx8avqEWCCW39fVfWwlwOr6tAiNvU5hfii1mdrd5GZk3+YZ3Tsx9SUIzyTPSRf+4A2p4cyNBPN9myAr5+F1e86N161Ggxd7oAzLwh3ZOYUeJnV0wZnLn5t9/leYKSqrglybFGt4GyeGhzmlrj/8ElOJ9boyVsomtatQsuGNoXTBNmvK+Grv8NPsyEuETqPga53Qo1G4Y7MlIKXoZ5Xgd+q6hcAItILZ7ZNt+CFFd0OHMti0Ya9+dpui5tLdTnGswV6+1e0sWEeE0RbFzsJf+OnkFAduv8Ouoyz2TnlnJfEX+VE0gdQ1YUiYqUfg+izn/IP89TiIDfHzmNOThfWaf57Gga0tdk8Jgh2LIUFTzozdCrXdS7YXnArJNYId2QmALwk/s0i8ijwuvt8OLA5eCGZuQUqcd4eN4dEMnk2+9p87U2TqtCigQ3zmADavQ6++JNTCrlyHej7Z+g0GipVDndkJoC8JP7RwBPA++7zr9w2EwQHjmbxVcrJ2TxJpDMydj6zfBexSc/It+9AG+YxgbJ/Kyx8Cla97RRL6/UQdL0DEqxjURF5mdWzH7gnBLEYYP5PO8nKOXmj8ri42cSTzfPZ1xTad0Bbm81jyujYflj4NPzwL5AYZ4bOxb+FKnXCHZkJouIWYvkIpwqnX6o6KCgRRbm8wzwNSGNY7ALey+nBVm2Qb79m9apybn2rZGhKyZfjlFX4/E9OWYUOw6HnH2yWTpQorsf/fyGLwgCQfjSTr1NOzua5M24Wgo+JOVcX2neADfOY0kr9Bj7+A+xaDWddDJc/BQ3ahDsqE0LFlWX+8sRjETkNaKyq60MSVZSa/+Musn3OH1lnsIfrY7/g3ZxebNfCt77bbB5zyo6kwfyHnRIL1RvBkKlw3tVWJTMKebmB60qc3n8loImItAeetKGewJuTZ5jn7rgPUGJ4MfuqQvudW7+q1d033qk6i5bPexCOH3Tm4nf/vc3UiWJeZvX8EeiMs2gKqrpCREq1OIsp2v4jmXyz8eQwz5Wxi/kw5yJ2Uvgim5VoMJ7t2wwfjYctX0KjznDl81C/VYkvMxWbl8SfpaoHCownR2V9/GD65Med5PhOvq1x+NiH/179gLYN/LYbk8vngyWT4dPHICYOBvwdzh9t5ZEN4C3x/ygiNwKxInIOztTO/wY3rOhT8KatorRoUI1m9WyYxxRj/1aYdSekfgXNLoUrX4AaZ5T8OhM1vPz6vxs4DziOswD7AWB8EGOKOmmHj/PfTWme9rUFV0yRVGHJFPhHN/hlBQyaCMNmWtI3hXjp8bdQ1YeBh4MdTLRasG53vmGe4lxhs3mMP0f3way7YP1caNoLBr1oi5ibInlJ/H8XkQbATOAdK8cceD/uOOBpv5YNq3N2kt20ZQrYsgjeHwNH9kK/v8CF42ws3xSrxE+Hql4CXALsAV4VkdUi8khZTioi94rIGhH5UUTGl+VYFcGew8c97TegjV3UNXnkZMFnT8D0QVCpKty2wKmRb0nflMDTJ0RVd6rqC8BYYAXwWGlPKCKtgdtwpoi2AwaKSLPSHq8iOJ7lK3knsLn75qSDv8L0K+HrZ6DjTXD7l9CwXbijMuVEiYlfRFqKyB9FZDUwEWdGT1kKerQEvlPVo6qaDXwJFK5AFkUKLrF4GhnEkoOP/HdUJsTHhjIsE6m2LIJXuzurYl3zL+cibiVbIsN452WMfwrwNtBPVX8JwDnXAH8WkTrAMeAKYEnBnURkDDAGoHHjxgU3VygFe/w3xH5BnPhYkNMxX3ulWPsTPqr5fPDNc/D5/0CdZjByDtRrEe6oTDnkpSxz10CeUFXXisjTwHzgCM7QUY6f/SbhLPFIp06dKuwNY8u27WfVjvTc5/Fkc1vcXL7ztWCZnptv34R4S/xR6/gh+GAsrJsD510Dg16wWvmm1MKSSVR1sqqer6o9gP3AhnDEEW6b9hzmlmk/kJGnxz849htOl328nD240P7W449S+1Nhcl9Y/zH0fwqGTLGkb8rEy1BPwIlIPVXdLSKNccb3u4QjjnDafTCDkVO+Z//RrNw2wcfY2I/40XcWX/raFnpNUrWEUIZoIsGWr+DdEaA5MPw9OPuScEdkKgDPiV9EKqvq0QCd9z13jD8LuFNV0wN03HLhUEYWo6b+wPb9x/K1941ZSrOYX7gr824ocGG3fvUE6ldPDGGUJuyWTIH/3A+1m8LQt6HO2eGOyFQQXsoydwP+BVQFGotIO+B2Vb2jtCdV1e6lfW15l5ntY+wbS/np14MFtijj4maR6qvPx77OhV43rqf9p48aPh8seMK5kNvsMhgyGRJrhDsqU4F4GTR+FugHpAGo6kqgRzCDqqh8PuX+mSv5ZmPhujzdYn6kfcxmXs0ZSA75p212bVqHm7omhyhKE1bZmfDhWCfpdxrt9PQt6ZsA8zTUo6o/FyjLXGgWjinZU/PWMWuF/xmx42Jns0tr8l5O/t+pLRpU49UR5xMbY6skVXgZB+Hdm2DzQuj9iLNYiq2OZYLAS+L/2R3uURGJB+4F1gY3rIpn1oodTFq02e+2NrKZ7rFr+EvWUDKJz20/o+ZpTB/dmeqJ8X5fZyqQQ7tgxrWw6ycY/DJ0GBbuiEwF5iXxjwWeB84AduDMv78zmEFVNEczs/mfOUX/rhwXN5sDWpk3c/rkttU4LZ7poy+wC7rRIH0bvDbYSf43vgvnXBruiEwF5yXxi6pa96MMVm0/wN4iCrGdLTvoH/MDL+UM5jDOGqgJcTFMHtnJFlyJBntTnKSfeRhGfAhnFr6wb0ygebm4+42IzBeRW0SkZrADqohSdh0qctvtsXM4TjxTs/sDECPwwtAOdEquHarwTLjsXA1T+kP2caf8giV9EyJeyjKfCzyCswrXMhGZIyLDgx5ZBXI823/1zYakcVXs17yT04t9VAfgycGt6XeelV+u8H7+AaYNgLgEGD0PGha+Yc+YYPFalvl7Vf0tTinlfcD0oEZVwWgRlYZujfsPMSj/zB4AwKB2pzO8y1khjMyExY6l8PrVcFptuPljqHtOuCMyUcZLWebqIjJSRD7GKcn8K84vAOORUjjz1+QQQ2M/Z5avGztIApy7c00Ft3M1vH4NVK4No+ZCLftFb0LPy8XdlcCHwJOquji44VRM/pbTHRX3CZXlOK9kD8pti7E52xXb7nXOhdxKVWDkR7YIugkbL4m/qWpRgxXGi4LvXmUyGBX7CfNzzidF86xpY3m/4krbBK8Ngpg4J+lbT9+EkZfEX1dEHsC5uJs7qVxVewctqnLuwLEsMrN91K1aCRHBVyDz3xi7gJpyhH/k6e2D9fgrrP2pzjKJvmwY9R8rtmbCzkvinwG8AwzEuZlrJM7C66aAz9ft4q/z1rN+1yFUnZuwep6bxI70k1U4k9jPPXHvsyinDcs1/0U9S/sV0IEdzmLomUdglK2YZSKDl8RfR1Uni8i9qvol8KWI/BDswMqblxdu5K/z1udrO3Asi9kr89fmeTT+DRLI5rHsUYWOYT3+CubQTqenf2w/jJgFDdqEOyJjAG+J/8RKIb+KyADgF8DuLsrjp18O8sz8khcR6x6zikGxi3k261pStWGh7VaHrQI5stctw7ATbvoAzuhY8muMCREvif9PIlID+B0wEagO3BfUqMqZd5f8TLa/qTt5JJDJ/8RNZZOvIf/IGeR/J+vxVwzH9sPrVzlj+8NmQuMLwx2RMfl4SfyfqWoGcAAIyLpvInIfcCugwGrgZvcc5dKPvxwocZ874z4kOWYXQzMfzleBMy/r8VcAGQfhjWthz3qnln6TqF1zyEQwL4l/jYjsAr5yv75W1ZIzXRFE5AzgHqCVqh4TkXeBG4BppT1muKXnWTf3hNPZy+myl5pyhHqSztjYj3g/52IW+84r8jg2xl/OHT8MM66DX1fC9W9Asz4lv8aYMCgx8atqM3dR9O7AAOAlEUlX1fZlPO9pIpIFVMa5blBuFRzkOYM9fJN4b762nVqLv2QVX+TU0n45dvAXeOlCOPQLDJkKzS8Pd0TGFMnLmruNgItwEn874Efg69KeUFV3iMj/AduAY8B8VZ1f2uNFgoL3t1UXZ036Z7Ou5XNfBw5QhV1ai+NUKvY4MTbWUz5VqgLHD0CD1nDVy9C0Z7gjMqZYXoZ6tgE/AH9R1bFlPaGI1AIGA02AdODfIjJcVd8osN8YYAxA48aNy3raoCrqvuZ12pjV2tTzcc6sXTlAEZmQuuxJ6HqXk/iNKQe8VOfsALwG3Cgii0XkNRG5pQznvBTYoqp7VDULeB/oVnAnVZ2kqp1UtVNSUlIZThd8gapn0b5RzQAdyYRU1XqW9E254mWMf6WIbAI24Qz3DAd6ApNLec5tQBcRqYwz1NMHWFLKY0WEQJQyGt6lMY3rWI/fGBN8Xsb4lwAJOCWZvwJ6qOrW0p5QVb8TkZnAMiAbWA5MKu3xIkEJU/hLdGnL+ky4vGVggjHGmBJ4GeO/XFUDWptHVR8HHg/kMcPJX719fz64oxtrdhxg+c/pbE07StO6VejVvB5XtGmA2FROY0yIeBnqyU36IjJHVQcGN6Tyx+tIT50qCdzUNZmbugY3HmOMKY6npRfzsJUj/PCa+K1Tb4yJBKea+JcHJYpyzuvFXUv8xphIUORQj4gk4tTfb4ZTT2eyqo4OVWDliddruzaOb4yJBMX1+KcDnXCS/uXA30MSUTlUcIWtotiNucaYSFDcxd1WqtoGQEQmA9+HJqTyx/MYv1XjMcZEgOJ6/LklJ1U1OwSxlFveh3qCGoYxxnhSXI+/nYgcdB8LTjXNg+5jVdXqQY+unLCLu8aY8qTIxK+qsaEMpDyzoR5jTHlyqtM5jR821GOMKU8s8QeA91k9lvmNMeFniT8AvA/1GGNM+FniDwCvF3etx2+MiQSW+APAczl+y/vGmAhgiT8A7OKuMaY8scQfADbUY4wpT0Ke+EWkuYisyPN1UETGhzqOQPK6ApelfWNMJPCyAldAqep6oD2AiMQCO4APQh1HIHldgcs6/MaYSBDuoZ4+wKayrOEbCbxe3LWhHmNMJAh34r8BeCvMMZSZ51k9xhgTAcKW+EWkEjAI+HcR28eIyBIRWbJnT0DXeg84G+oxxpQn4ezxXw4sU9Vd/jaq6iRV7aSqnZKSkkIc2qnJyrFZPcaY8iOciX8oFWCY51RY2jfGRIKwJH4RqQJcBrwfjvMHUkZWjud9bc1dY0wkCPl0TgBVPQLUCce5A23DrkOe97W0b4yJBOGe1VPuHcrwvipljK22boyJAJb4y8hrLX5jjIkUlvjLyGu5hiZ1qwQ3EGOM8cgSfxl5LdDWuHblIEdijDHeWOIvI+/lGoIbhzHGeGWJv4y8jvHbVE5jTKSwxF9G/sb4O8akFGqzHr8xJlJY4i8jf2P8t8bOBWCn1sptsx6/MSZSWOIvI389/mzi+CKnHSu1WW6b9fiNMZHCEn8Z+evxK3CUhHxtYvftGmMihCX+MvI6jz/G3mljTISwdFRGNqvHGFPeWOIvI68FG6wWvzEmUljiLyOvd+5a2jfGRApL/GXkdajHZvUYYyKFJf4y8vm87WdDPcaYSBGuFbhqishMEVknImtFpGs44ggEu7hrjClvwrICF/A8ME9Vh4hIJaDclq70enHX8r4xJlKEPPGLSA2gBzAKQFUzgcxQxxEoXi/u2hi/MSZShKPH3wTYA0wVkXbAUuBedx3eMkk/mkmO1zuqAsTr0os2xm+MiRThSPxxQEfgblX9TkSeByYAj+bdSUTGAGMAGjdu7OnA172ymJTdhwMbbYDYGL8xJlKE4+LudmC7qn7nPp+J84sgH1WdpKqdVLVTUlJSSAMMBsv7xphIEfLEr6o7gZ9FpLnb1Af4KdRxhJqN8RtjIkW4ZvXcDcxwZ/RsBm4OUxwhY2P8xphIEZbEr6orgE7hOHewPRk3lXNjdpCSc0a+dkv7xphIYXfuBtivWoe5OZ35d06vfO2n1zwtPAEZY0wB4RrqqbD+kTMIcgq3t21UM+SxGGOMP9bjD4GuTetwYZPa4Q7DGGMAS/xBd069qvzturbE2LQeY0yEqFBDPTVOi6d2lUrhDoPYGOHc+lXpdnZdbu3ehIS42HCHZIwxuSpU4p85rlu4QzDGmIhnQz3GGBNlLPEbY0yUscRvjDFRxhK/McZEGfG6kEg4icge4AiwN9yxeFQXizVYylO8FmtwWKzenaWqhcobl4vEDyAiS1S1XNT3sViDpzzFa7EGh8VadjbUY4wxUcYSvzHGRJnylPgnhTuAU2CxBk95itdiDQ6LtYzKzRi/McaYwChPPX5jjDEBEBGJX0SuE5EfRcQnIp0KbHtQRDaKyHoR6Zenvb/btlFEJuRpbyIi37nt77jLO4byZ/EbV4hjmCIiu0VkTZ622iLyqYikuN9rue0iIi+48a4SkY55XjPS3T9FREYGKdYzReQLEfnJ/QzcG6nxikiiiHwvIivdWJ9w2/1+5kQkwX2+0d2enOdYfj/XQYg5VkSWi8icchBrqoisFpEVIrLEbYu4z4F7jpoiMlNE1onIWhHpGqmx+qWqYf8CWgLNgYVApzztrYCVQALQBNgExLpfm4CmQCV3n1bua94FbnAfvwKMC+HPUWRcIX4/ewAdgTV52v4KTHAfTwCedh9fAXyMszpkF+A7t702znrItYFa7uNaQYi1IdDRfVwN2OD+u0dcvO45q7qP44Hv3Bj8fuaAO4BX3Mc3AO8U97kO0mfht8CbwBz3eSTHmgrULdAWcZ8D9zzTgVvdx5WAmpEaq9/4Q3GSU3gzF5I/8T8IPJjn+SdAV/frk4L7uW/sXiDObc+3Xwji9xtXmN7LZPIn/vVAQ/dxQ2C9+/hVYGjB/YChwKt52vPtF8S4ZwGXRXq8QGVgGXBhUZ+5E59X93Gcu58U9bkOQoyNgAVAb2BOcf8/wh2re+xUCif+iPscADWALbjXSCM51qK+ImKopxhnAD/neb7dbSuqvQ6QrqrZBdpDpai4IkF9Vf3VfbwTqO8+PtX3OGjc4YUOOD3piIzXHTpZAewGPsXpARf1mcuNyd1+AOczGqr39jngAcDnPi/u/0e4YwVQYL6ILBWRMW5bJH4OmgB7gKnuMNq/RKRKhMbqV8jq8YvIZ0ADP5seVtVZoYrDgKqqiETUdC4RqQq8B4xX1YMiJ1csi6R4VTUHaC8iNYEPgBbhjcg/ERkI7FbVpSLSK8zheHWxqu4QkXrApyKyLu/GCPocxOEMpd6tqt+JyPM4Qzu5IihWv0LW41fVS1W1tZ+v4pL+DuDMPM8buW1FtacBNUUkrkB7qBQVVyTYJSINAdzvu932U32PA05E4nGS/gxVfT/S4wVQ1XTgC5zhkqI+c7kxudtr4HxGQxHrRcAgEUkF3sYZ7nk+QmMFQFV3uN934/xS7Uxkfg62A9tV9Tv3+UycXwSRGKtfkT7UMxu4wZ1x0AQ4B/ge+AE4x52hUAnnYtRsdQbKvgCGuK8fiTNmHCp+4wrh+YszG+f9gPzvy2xghDvzoAtwwP1z9ROgr4jUcmcn9HXbAkqcrv1kYK2qPhPJ8YpIktvTR0ROw7kWsZaiP3N5f4YhwOfuZ7Soz3XAqOqDqtpIVZNxPoefq+qwSIwVQESqiEi1E49x/v3WEIGfA1XdCfwsIs3dpj7AT5EYa3E/RNi/gKtxfoseB3aR/wLpwzjjqOuBy/O0X4EzA2QTznDRifamOB/MjcC/gYQQ/yx+4wpxDG8BvwJZ7vt6C8547QIgBfgMqO3uK8BLbryryX9xfbT7Pm4Ebg5SrBfjjO2uAla4X1dEYrxAW2C5G+sa4LHiPnNAovt8o7u9aUmf6yC9x704OasnImN141rpfv144v9OJH4O3HO0B5a4n4UPcWblRGSs/r7szl1jjIkykT7UY4wxJsAs8RtjTJSxxG+MMVHGEr8xxkQZS/zGGBNlLPGbCk9E/igivy/la9uLyBWneix3zvbnIlJdRJIlT6XUUsTwfyLSu7SvN6YgS/zGFK89zn0Fp+oKYKWqHgxADBMpUBLAmLKwxG8qJBF5WEQ2iMjXOCW/T7SfLSLz3EJgX4lIC7d9moi8IiJL3NcNdO++fhK4Xpwa8de7h2klIgtFZLOI3FNECMPwc9e4iDR1C3tdICKjRORDcWq3p4rIXSLyW3f7tyJSG0BVtwJ1RMRfrStjTpklflPhiMj5OGUK2uP0vC/Is3kSTnGt84HfAy/n2ZaMUx9mAE6t+hjgMZza9O1V9R13vxZAP3ffx91aQwVdBCwtEFdznJpEo1T1B7e5NXCNG+OfgaOq2gFYDIzI8/Jl7jGNKbOQVec0JoS6Ax+o6lEAEZntfq8KdAP+LSerfybked27quoDUkRkM0VX3pyrqseB4yKyG6f87vYC+9RW1UN5nifh/AVwjar+lKf9C3e/QyJyAPjIbV+NUyLihN3A6SX83MZ4YonfRJMYnHr07YvYXrB+SVH1TI7neZyD//9H2SIS4/4iAae+/Tac2kR5E3/eY/nyPPcVOG4icKyIeIw5JTbUYyqiRcBVInKaW/HxSgD3QusWEbkOcmfetMvzuutEJEZEzsYpGrYeOISzJOSpWu8e44RMnGKEI0TkxlIc71ycwnDGlJklflPhqOoy4B2cSo8f45TLPmEYcIuInKgCOTjPtm04lSk/BsaqagZOGeNWBS7uejEXpypm3riOAAOB+0RkkNcDudcQmuFUgzSmzKw6pzE4s3pwShfPDNDxGgKvqeplATjW1TgL0j9a9siMsR6/MUGhzkIb/xSR6gE4XBzw9wAcxxjAevzGGBN1rMdvjDFRxhK/McZEGUv8xhgTZSzxG2NMlLHEb4wxUcYSvzHGRJn/BzChtmKCarVyAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# plot 1d_model.txt\n", + "fname_gen='1d_model.txt'\n", + "fname_ori='1d_ak135.txt'\n", + "\n", + "r_earth = 6371.0\n", + "\n", + "# read file\n", + "\n", + "dep_gen=[]\n", + "vp_gen=[]\n", + "\n", + "with open(fname_gen, 'r') as f:\n", + " lines = f.readlines()\n", + "\n", + " for line in lines:\n", + " line = line.strip()\n", + " if line.startswith('#'):\n", + " continue\n", + " else:\n", + " line = line.split(\",\")\n", + " dep_gen.append(r_earth-float(line[0]))\n", + " vp_gen.append(float(line[1]))\n", + "\n", + "dep_ori=[]\n", + "vp_ori=[]\n", + "\n", + "with open(fname_ori,'r') as f:\n", + " lines = f.readlines()\n", + "\n", + " for line in lines:\n", + " line = line.strip()\n", + " if line.startswith('#'):\n", + " continue\n", + " else:\n", + " line = line.split(\",\")\n", + " dep_ori.append(float(line[0]))\n", + " vp_ori.append(float(line[1]))\n", + "\n", + "\n", + "# plot dep and vp\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(dep_gen, vp_gen, linewidth=10, label=\"1d model in run\")\n", + "plt.plot(dep_ori, vp_ori, label=\"reference 1d model\")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"depth (km)\")\n", + "plt.ylabel(\"P-wave velocity (km/s)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "OSError", + "evalue": "Unable to open file (unable to open file: name = 'OUTPUT_FILES/2d_travel_time_field_0.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mfname_Tfield\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'OUTPUT_FILES/2d_travel_time_field_0.h5'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mh5py\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname_Tfield\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mT_2d\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'T'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mt_1d\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m't'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.9.1/lib/python3.9/site-packages/h5py/_hl/files.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, fs_strategy, fs_persist, fs_threshold, **kwds)\u001b[0m\n\u001b[1;32m 422\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mphil\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 423\u001b[0m \u001b[0mfapl\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmake_fapl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdriver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlibver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrdcc_nslots\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrdcc_nbytes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrdcc_w0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 424\u001b[0;31m fid = make_fid(name, mode, userblock_size,\n\u001b[0m\u001b[1;32m 425\u001b[0m fapl, fcpl=make_fcpl(track_order=track_order, fs_strategy=fs_strategy,\n\u001b[1;32m 426\u001b[0m fs_persist=fs_persist, fs_threshold=fs_threshold),\n", + "\u001b[0;32m~/.pyenv/versions/3.9.1/lib/python3.9/site-packages/h5py/_hl/files.py\u001b[0m in \u001b[0;36mmake_fid\u001b[0;34m(name, mode, userblock_size, fapl, fcpl, swmr)\u001b[0m\n\u001b[1;32m 188\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mswmr\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mswmr_support\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[0mflags\u001b[0m \u001b[0;34m|=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mACC_SWMR_READ\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 190\u001b[0;31m \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflags\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfapl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfapl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 191\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r+'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[0mfid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mh5f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mACC_RDWR\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfapl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfapl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32mh5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mh5py/_objects.pyx\u001b[0m in \u001b[0;36mh5py._objects.with_phil.wrapper\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mh5py/h5f.pyx\u001b[0m in \u001b[0;36mh5py.h5f.open\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mOSError\u001b[0m: Unable to open file (unable to open file: name = 'OUTPUT_FILES/2d_travel_time_field_0.h5', errno = 2, error message = 'No such file or directory', flags = 0, o_flags = 0)" + ] + } + ], + "source": [ + "# read 2D traveltime field and plot\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "\n", + "fname_Tfield='OUTPUT_FILES/2D_TRAVEL_TIME_FIELD/2d_travel_time_field_0.h5'\n", + "\n", + "with h5py.File(fname_Tfield, 'r') as f:\n", + " T_2d = f['T'][:,:]\n", + " t_1d = f['t'][:]\n", + " r_1d = f['r'][:]\n", + "\n", + "plt.imshow(T_2d, extent=[t_1d[0], t_1d[-1], r_1d[0], r_1d[-1]], aspect='auto')\n", + "plt.xlabel(\"epicentral distance (rad.)\")\n", + "plt.ylabel(\"depth (km)\")\n", + "plt.colorbar()\n", + "#plt.imshow(T_2d)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele_one_src/compare_with_fortran_code.ipynb b/test/old_tests/inversion_tele_one_src/compare_with_fortran_code.ipynb new file mode 100644 index 0000000..241ba88 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/compare_with_fortran_code.ipynb @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# compare result from TOMOATT and fortran code\n", + "\n", + "fpath_kernel_fort = './fortran_code/ega5/output/tele_event_kernel_ev1'\n", + "#fpath_synth_fort = './fortran_code/ega5/output/syn_step1_event1' # Table\n", + "#fpath_adj_fort = './fortran_code/ega5/output/adj_step1_event1' # TableADJ\n", + "\n", + "# HDF5 output\n", + "fpath_out_tomoatt = './OUTPUT_FILES/out_data_sim_0.h5'\n", + "fpath_grid_tomoatt = './OUTPUT_FILES/out_data_grid.h5'\n", + "# ASCII output\n", + "fpath_out_tomoatt_ascii_Ks = './OUTPUT_FILES/Ks_inv_0000.dat'\n", + "fpath_out_tomoatt_ascii_Keta = './OUTPUT_FILES/Keta_inv_0000.dat'\n", + "fpath_out_tomoatt_ascii_Kxi = './OUTPUT_FILES/Kxi_inv_0000.dat'\n", + "fpath_out_tomoatt_ascii_T = './OUTPUT_FILES/T_res_inv_0000_src_0000.dat'\n", + "fpath_out_tomoatt_ascii_adj = './OUTPUT_FILES/adjoint_field_inv_0000_src_0000.dat'\n", + "\n", + "# grid information in fortran code\n", + "nr = 55\n", + "nt = 55\n", + "np = 55\n", + "npoints = nr*nt*np\n", + "\n", + "# division\n", + "ndiv_r = 1 \n", + "ndiv_t = 2 \n", + "ndiv_p = 2 " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy\n", + "\n", + "\n", + "# read fortran test file and convert to numpy array\n", + "def read_fortran_result_file(fpath):\n", + " with open(fpath, 'r') as f:\n", + " lines = f.readlines()\n", + " lines = [line.strip() for line in lines]\n", + " lines = [line for line in lines if line]\n", + " lines = [line.split() for line in lines]\n", + " lines = numpy.array(lines, dtype=numpy.float64)\n", + " return lines\n", + "\n", + "fortran_data = read_fortran_result_file(fpath_kernel_fort)\n", + "## change dimension of fortran data\n", + "Ks_fort = fortran_data[:,3].reshape(nr, nt, np)\n", + "Kxi_fort = fortran_data[:,4].reshape(nr, nt, np)\n", + "Keta_fort = fortran_data[:,5].reshape(nr, nt, np)\n", + "Syn_fort = fortran_data[:,6].reshape(nr, nt, np)\n", + "Adj_fort = fortran_data[:,7].reshape(nr, nt, np)\n", + "\n", + "#fortran_synth_data = read_fortran_result_file(fpath_synth_fort).reshape(nr, nt, np)\n", + "#fortran_adj_data = read_fortran_result_file(fpath_adj_fort).reshape(nr, nt, np)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# read h5 data\n", + "import sys\n", + "sys.path.append(\"../../utils/\")\n", + "\n", + "from tomoatt_data_retrieval import get_data_from_h5\n", + "from tomoatt_data_retrieval import get_data_from_ascii\n", + "\n", + "\n", + "## from h5\n", + "i_inv=0\n", + "# fill 0 at flont of i_inv\n", + "str_i_inv = str(i_inv).zfill(4)\n", + "Ks_tomoatt ,_,_,_= get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/Ks_inv_{}\".format(str_i_inv), nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True)\n", + "Kxi_tomoatt ,_,_,_= get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/Kxi_inv_{}\".format(str_i_inv), nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Keta_tomoatt ,_,_,_= get_data_from_h5(fpath_out_tomoatt,fpath_grid_tomoatt, \"Data/Keta_inv_{}\".format(str_i_inv), nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Syn_tomoatt ,_,_,_= get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/T_res_src_0_inv_{}\".format(str_i_inv), nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "Adj_tomoatt ,_,_,_= get_data_from_h5(fpath_out_tomoatt, fpath_grid_tomoatt, \"Data/adjoint_field_src_0_inv_{}\".format(str_i_inv), nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + "## from ascii\n", + "#Ks_tomoatt = get_data_from_ascii(fpath_out_tomoatt_ascii_Ks, nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Kxi_tomoatt = get_data_from_ascii(fpath_out_tomoatt_ascii_Kxi, nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Keta_tomoatt = get_data_from_ascii(fpath_out_tomoatt_ascii_Keta, nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Syn_tomoatt = get_data_from_ascii(fpath_out_tomoatt_ascii_T, nr, nt, np, ndiv_r, ndiv_t, ndiv_p)\n", + "#Adj_tomoatt = get_data_from_ascii(fpath_out_tomoatt_ascii_adj, nr, nt, np, ndiv_r, ndiv_t, ndiv_p)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# normalize Ks_tomoatt and Kxi_tomoatt and Keta_tomoatt\n", + "Ks_tomoatt /= numpy.max(Ks_tomoatt)\n", + "Kxi_tomoatt /= numpy.max(Kxi_tomoatt)\n", + "Keta_tomoatt /= numpy.max(Keta_tomoatt)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# plot slice of Ks_inv\n", + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_slice(data_es, data_fort, slice_ax, id_slice, contour=False):\n", + "\n", + " if (slice_ax == 'r'):\n", + " data_es_v = data_es[ id_slice, :, :]\n", + " data_fort_v = data_fort[id_slice, :, :]\n", + " elif (slice_ax == 't'):\n", + " data_es_v = data_es[ :, id_slice, :]\n", + " data_fort_v = data_fort[:, id_slice, :]\n", + " elif (slice_ax == 'p'):\n", + " data_es_v = data_es[ :, :, id_slice]\n", + " data_fort_v = data_fort[:, :, id_slice]\n", + " else:\n", + " print(\"Error: slice_ax should be 'r', 't' or 'p'\")\n", + " return\n", + "\n", + " # use the same color range for both tomoatt and fortran \n", + " combined_data = numpy.array([data_es_v.flatten(),data_fort_v.flatten()])\n", + " #Get the min and max of all your data\n", + " _min, _max = numpy.amin(combined_data), numpy.amax(combined_data)\n", + "\n", + " # make the color range symmetric\n", + " diff_data = data_es_v-data_fort_v\n", + " _min_diff, _max_diff = numpy.amin(diff_data), numpy.amax(diff_data)\n", + " if (abs(_min_diff) > abs(_max_diff)):\n", + " if (_min_diff < 0):\n", + " _max_diff = -_min_diff\n", + " else:\n", + " _min_diff = -_max_diff\n", + "\n", + " cmap1=\"viridis\"\n", + " cmap2=\"seismic\"\n", + "\n", + " plt.figure(figsize=(20,10))\n", + "\n", + " plt.subplot(1,3,1)\n", + " plt.imshow(data_es_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(data_es_v, colors='k', linewidths=0.5)\n", + " plt.title('result_tomoatt')\n", + "\n", + " plt.subplot(1,3,2)\n", + " plt.imshow(data_fort_v, cmap=cmap1, vmin=_min, vmax=_max)\n", + " plt.colorbar()\n", + " if(contour): \n", + " plt.contour(data_fort_v, colors='k', linewidths=0.5)\n", + " plt.title('result_fort')\n", + " \n", + " plt.subplot(1,3,3)\n", + " plt.imshow(diff_data, cmap=cmap2, vmin=_min_diff, vmax=_max_diff)\n", + " plt.colorbar()\n", + " if(contour):\n", + " plt.contour(diff_data, colors='k', linewidths=0.5) \n", + " plt.title('tomoatt-fort')\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Ks_tomoatt, Ks_fort, 'p', 28)\n", + "plot_slice(Ks_tomoatt, Ks_fort, 't', 21)\n", + "plot_slice(Ks_tomoatt, Ks_fort, 'r', 36)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Keta_tomoatt, Keta_fort, 'p', 21, contour=False)\n", + "plot_slice(Keta_tomoatt, Keta_fort, 't', 21, contour=False)\n", + "plot_slice(Keta_tomoatt, Keta_fort, 'r', 21, contour=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Kxi_tomoatt, Kxi_fort, 'p', 21, contour=False)\n", + "plot_slice(Kxi_tomoatt, Kxi_fort, 't', 21, contour=False)\n", + "plot_slice(Kxi_tomoatt, Kxi_fort, 'r', 21, contour=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Syn_tomoatt, Syn_fort, 'p', 21, contour=False)\n", + "plot_slice(Syn_tomoatt, Syn_fort, 't', 21, contour=False)\n", + "plot_slice(Syn_tomoatt, Syn_fort, 'r', 21, contour=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_slice(Adj_tomoatt, Adj_fort, 'p', 21, contour=False)\n", + "plot_slice(Adj_tomoatt, Adj_fort, 't', 21, contour=False)\n", + "plot_slice(Adj_tomoatt, Adj_fort, 'r', 21, contour=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_region b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_region new file mode 100644 index 0000000..1874828 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_region @@ -0,0 +1 @@ +0 diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_tele b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_tele new file mode 100644 index 0000000..baca2e4 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/EARTHQUAKES_tele @@ -0,0 +1,2 @@ +1 +50.0 40.0 67.5 diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/STATIONS b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/STATIONS new file mode 100644 index 0000000..ec7ffee --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/STATIONS @@ -0,0 +1,51 @@ +50 +0 39.48283902145424 29.281513864182138 +0 43.998782050303745 37.19643899137363 +0 37.30760565117001 33.11401338760367 +0 41.68653979748724 35.934639928020964 +0 36.61537788634567 23.78498599183464 +0 39.53372622366508 23.841070463667265 +0 40.35236327081236 19.52357011656586 +0 40.521021601341126 15.382805946506043 +0 40.652338638485574 15.43974831654911 +0 36.06181789303116 31.492644232896822 +0 40.220383199721056 30.131592405768828 +0 32.690556139214564 29.12155270260603 +0 41.38557105851774 21.887079844236876 +0 31.5803169410531 15.828284584124932 +0 39.72076150617663 29.444060586520337 +0 39.153291824326395 15.348344308914173 +0 37.3196743759749 24.882795770531047 +0 45.38532464248119 31.54872211314764 +0 35.027710629652205 20.71225367598449 +0 34.73430718282967 30.761114486702205 +0 41.62771310002017 20.964465183242254 +0 41.96541753785979 22.638041556854436 +0 34.18819520502442 31.526202657153434 +0 33.289630995715136 26.11544195974523 +0 44.99003971165912 31.18999369792465 +0 43.71764805530941 27.09889711083143 +0 39.149408331767305 24.672389827246107 +0 40.94054916696042 19.539882515019904 +0 39.55054219303491 17.883860634990157 +0 45.51670367081901 35.889274144396786 +0 45.09106334932971 23.658196610348384 +0 45.3510270418072 33.647693941540325 +0 38.04870033400669 25.845480891830285 +0 40.2502568580665 27.674022408814878 +0 38.91110035012384 23.488821700130032 +0 33.038736736209884 31.45966132466628 +0 45.13288373382176 32.43630443882502 +0 38.95996799830328 24.837368712391495 +0 43.491229999719096 29.79312700226344 +0 35.465004203274056 33.62459653703114 +0 40.21403161430093 17.72710938876384 +0 39.55239238847392 19.234971464234178 +0 35.94933583184151 22.513051849149996 +0 44.119556199620654 20.89644919626955 +0 35.522471813078226 19.309847752271143 +0 41.32129208930305 29.532291144989525 +0 38.64267131605151 25.351066793111908 +0 34.925624689463994 33.227497100537946 +0 33.199759796131325 22.212825309023625 +0 34.47881106709583 28.51463648501263 diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/inputdata.ipynb b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/inputdata.ipynb new file mode 100644 index 0000000..ca5563c --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/inputdata.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import random\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#震中距函数\n", + "def cal_dis(lat1, lon1,lat2, lon2):\n", + " latitude1 = (math.pi/180)*lat1\n", + " latitude2 = (math.pi/180)*lat2\n", + " longitude1 = (math.pi/180)*lon1\n", + " longitude2= (math.pi/180)*lon2\n", + " #因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R\n", + " #地球半径\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.0001):\n", + " return 0\n", + "\n", + " d = math.acos(math.sin(latitude1)*math.sin(latitude2)+ math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))/math.pi*180.0\n", + " return d\n", + "\n", + "#方位角函数\n", + "def cal_azimuth(lat1, lon1, lat2, lon2):\n", + " lat1_rad = lat1 * math.pi / 180\n", + " lon1_rad = lon1 * math.pi / 180\n", + " lat2_rad = lat2 * math.pi / 180\n", + " lon2_rad = lon2 * math.pi / 180\n", + " \n", + " y = math.sin(lon2_rad - lon1_rad) * math.cos(lat2_rad)\n", + " x = math.cos(lat1_rad) * math.sin(lat2_rad) - math.sin(lat1_rad) * math.cos(lat2_rad) * math.cos(lon2_rad - lon1_rad)\n", + " brng = math.atan2(y, x) * 180 / math.pi\n", + " if((lat1-lat2)**2+(lon1-lon2)**2<0.0001):\n", + " return 0\n", + " return float((brng + 360.0) % 360.0)\n", + "\n", + "\n", + "\n", + "# 研究区域范围\n", + "dep1 = 0; dep2 = 800; \n", + "lat1 = -1.0; lat2 = 1.0; \n", + "lon1 = 110.0; lon2 = 130.0; \n", + "clat = (lat1+lat2)/2.0; \n", + "clon = (lon1+lon2)/2.0; \n", + "\n", + "\n", + "# 生成一定数量的台站\n", + "Nst = 40; \n", + "pos_st=[]; \n", + "# 台站的范围\n", + "dep_st1 = -0.5; dep_st2 = 0.5; \n", + "lat_st1 = 0.0; lat_st2 = 0.0; \n", + "lon_st1 = 110.0; lon_st2 = 130.0; \n", + "\n", + "# 生成一定数量的地震\n", + "Nev_region = 200; \n", + "pos_ev_region=[]; \n", + "# 局部地震的范围\n", + "dep_ev_region1 = 1.0; dep_ev_region2 = 20.0; \n", + "lat_ev_region1 = 0.0; lat_ev_region2 = 0.0; \n", + "lon_ev_region1 = 110.0; lon_ev_region2 = 130.0; \n", + "\n", + "# 生成一定数量的远震\n", + "Nev_tele = 30; \n", + "pos_ev_tele=[]; \n", + "# 远震的范围\n", + "azi1 = 0.0; azi2 = 360.0; \n", + "degree1 = 40.0; degree2 = 80.0; \n", + "dep_ev_tele1 = 10.0; dep_ev_tele2 = 100.0; \n", + "\n", + "# 随机种子\n", + "random.seed(631)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 225.9511468651809 105.95114686518092 90.0\n", + "0.0 134.37263128921603 14.372631289216041 90.0\n", + "0.0 221.86291452364492 101.86291452364495 90.0\n", + "0.0 135.0265809510972 15.026580951097205 90.0\n", + "0.0 205.6327554209649 85.63275542096493 90.0\n", + "0.0 132.91673845591365 12.916738455913654 90.0\n", + "0.0 16.258737495319888 103.74126250468011 270.0\n", + "0.0 236.91222080019207 116.9122208001921 90.0\n", + "0.0 231.60534307538006 111.60534307538009 90.0\n", + "0.0 127.76937738221575 7.76937738221574 90.0\n", + "0.0 296.7089619188061 176.70896191880615 90.0\n", + "0.0 109.987388485231 10.012611514768977 270.0\n", + "0.0 167.7421462765811 47.74214627658114 90.0\n", + "0.0 143.53357078698778 23.53357078698778 90.0\n", + "0.0 76.89393688373681 43.10606311626317 270.0\n", + "0.0 243.99003464620372 123.99003464620375 90.0\n", + "0.0 107.72864961420355 12.271350385796454 270.0\n", + "0.0 192.24495483877945 72.24495483877948 90.0\n", + "0.0 131.78390165243425 11.783901652434272 90.0\n", + "0.0 28.764512000200227 91.23548799979977 270.0\n", + "0.0 334.7755278165224 145.2244721834776 270.0\n", + "0.0 210.25490259109463 90.25490259109465 90.0\n", + "0.0 339.62165350972003 140.37834649027994 270.0\n", + "0.0 356.65953464944505 123.34046535055498 270.0\n", + "0.0 310.73064432466316 169.26935567533684 270.0\n", + "0.0 14.362593311061245 105.63740668893875 270.0\n", + "0.0 219.55849454012824 99.55849454012825 90.0\n", + "0.0 216.37171778796466 96.37171778796468 90.0\n", + "0.0 17.888701551321237 102.11129844867875 270.0\n", + "0.0 171.2386125573614 51.23861255736139 90.0\n", + "0.0 341.33064526380423 138.66935473619577 270.0\n", + "0.0 210.8077223236536 90.8077223236536 90.0\n", + "0.0 289.112673508994 169.11267350899402 90.0\n", + "0.0 298.08845278767177 178.08845278767174 90.0\n", + "0.0 272.45026020019355 152.45026020019355 90.0\n", + "0.0 144.07425671018817 24.07425671018818 90.0\n", + "0.0 68.06864484053433 51.93135515946566 270.0\n", + "0.0 136.29773319963272 16.297733199632727 90.0\n", + "0.0 147.8123908849427 27.812390884942708 90.0\n", + "0.0 57.74720760152299 62.252792398477006 270.0\n", + "0.0 15.652724958883866 104.34727504111613 270.0\n", + "0.0 144.72146631701912 24.721466317019132 90.0\n", + "0.0 27.083088365413673 92.91691163458631 270.0\n", + "0.0 264.3101344354792 144.31013443547923 90.0\n", + "0.0 341.08957840202356 138.91042159797647 270.0\n", + "0.0 116.10814242841248 3.891857571587484 270.0\n", + "0.0 130.7610096663694 10.761009666369436 90.0\n", + "0.0 86.20775751226536 33.79224248773463 270.0\n", + "0.0 199.89381975746232 79.89381975746234 90.0\n", + "0.0 72.68053962138247 47.31946037861752 270.0\n", + "0.0 77.05144953292259 42.948550467077396 270.0\n", + "0.0 266.39229908576056 146.39229908576056 90.0\n", + "0.0 336.08487636106537 143.91512363893463 270.0\n", + "0.0 315.4798829868885 164.52011701311147 270.0\n", + "0.0 83.03381783702551 36.966182162974484 270.0\n", + "0.0 275.99647488706177 155.99647488706177 90.0\n", + "0.0 116.23838021530406 3.761619784695913 270.0\n", + "0.0 118.52414477992758 1.4758552200723425 270.0\n", + "0.0 220.74310560698524 100.74310560698525 90.0\n", + "0.0 338.40097536399816 141.59902463600184 270.0\n", + "0.0 203.62740080582384 83.62740080582384 90.0\n", + "0.0 355.8080215395081 124.1919784604919 270.0\n", + "0.0 9.404231671969384 110.5957683280306 270.0\n", + "0.0 343.5534959818642 136.4465040181358 270.0\n", + "0.0 6.66339734732301 113.33660265267699 270.0\n", + "0.0 358.0037637181944 121.99623628180552 270.0\n", + "0.0 247.98908263067963 127.98908263067965 90.0\n", + "0.0 97.64127642203272 22.358723577967275 270.0\n", + "0.0 99.53081429245076 20.46918570754922 270.0\n", + "0.0 128.9499990799955 8.949999079995527 90.0\n", + "0.0 261.6643380104868 141.6643380104868 90.0\n", + "0.0 329.5615005848541 150.43849941514588 270.0\n", + "0.0 217.67290357735305 97.67290357735308 90.0\n", + "0.0 205.18903585853536 85.18903585853536 90.0\n", + "0.0 228.97693699706412 108.97693699706413 90.0\n", + "0.0 8.881693318871182 111.11830668112881 270.0\n", + "0.0 356.57170393774953 123.42829606225041 270.0\n", + "0.0 189.16694569680052 69.16694569680054 90.0\n", + "0.0 121.50245011182267 1.5024501118226716 90.0\n", + "0.0 333.93797255055347 146.06202744944653 270.0\n", + "0.0 100.13308707398681 19.866912926013175 270.0\n", + "0.0 43.6084015041731 76.3915984958269 270.0\n", + "0.0 111.05944610086928 8.940553899130707 270.0\n", + "0.0 74.48107242651632 45.518927573483666 270.0\n", + "0.0 312.0462723650521 167.95372763494788 270.0\n", + "0.0 322.947704942887 157.05229505711299 270.0\n", + "0.0 208.95113264150558 88.9511326415056 90.0\n", + "0.0 175.24970913034872 55.24970913034874 90.0\n", + "0.0 140.9614395734827 20.961439573482696 90.0\n", + "0.0 166.3626290086637 46.3626290086637 90.0\n", + "0.0 90.41872798898056 29.581272011019415 270.0\n", + "0.0 222.8793862747397 102.8793862747397 90.0\n", + "0.0 68.85476821721676 51.14523178278323 270.0\n", + "0.0 28.214387666817153 91.78561233318284 270.0\n", + "0.0 91.48103529832157 28.518964701678417 270.0\n", + "0.0 89.50523941860742 30.494760581392573 270.0\n", + "0.0 193.54150713960806 73.54150713960807 90.0\n", + "0.0 7.161329384662456 112.83867061533753 270.0\n", + "0.0 213.18842190537316 93.18842190537318 90.0\n", + "0.0 172.07812140684445 52.07812140684447 90.0\n", + "0.0 334.8353619985278 145.1646380014722 270.0\n", + "0.0 191.0593578794778 71.0593578794778 90.0\n", + "0.0 56.60854133537719 63.39145866462279 270.0\n", + "0.0 92.26165787695894 27.738342123041054 270.0\n", + "0.0 286.9224658393914 166.9224658393914 90.0\n", + "0.0 176.89046670533634 56.890466705336365 90.0\n", + "0.0 276.0389970910487 156.0389970910487 90.0\n", + "0.0 137.64747685530494 17.647476855304948 90.0\n", + "0.0 1.4308610934428856 118.56913890655709 270.0\n", + "0.0 110.88137345107941 9.118626548920576 270.0\n", + "0.0 137.09485329193856 17.094853291938563 90.0\n", + "0.0 135.5690155005423 15.569015500542301 90.0\n", + "0.0 126.14097870235523 6.140978702355242 90.0\n", + "0.0 323.5471905278929 156.4528094721071 270.0\n", + "0.0 322.23762188343517 157.76237811656483 270.0\n", + "0.0 88.32263639560081 31.677363604399194 270.0\n", + "0.0 338.27038239137386 141.72961760862614 270.0\n", + "0.0 93.32529519621555 26.67470480378444 270.0\n", + "0.0 204.0513824389116 84.05138243891159 90.0\n", + "0.0 58.230491293900585 61.7695087060994 270.0\n", + "0.0 34.17234176219371 85.82765823780629 270.0\n", + "0.0 20.355778278035714 99.64422172196426 270.0\n", + "0.0 185.5169105695217 65.51691056952171 90.0\n", + "0.0 330.35248244149466 149.6475175585053 270.0\n", + "0.0 276.63332567163 156.63332567163005 90.0\n", + "0.0 358.5496625205124 121.45033747948762 270.0\n", + "0.0 7.590891759615754 112.40910824038424 270.0\n", + "0.0 167.7368613892805 47.73686138928051 90.0\n", + "0.0 244.68032032578964 124.68032032578965 90.0\n", + "0.0 156.8417344482591 36.84173444825912 90.0\n", + "0.0 269.4204866261951 149.42048662619513 90.0\n", + "0.0 190.265203959195 70.265203959195 90.0\n", + "0.0 136.57685361968288 16.57685361968289 90.0\n", + "0.0 260.9555979708692 140.95559797086918 90.0\n", + "0.0 103.67335828401178 16.32664171598821 270.0\n", + "0.0 184.95848872928786 64.95848872928788 90.0\n", + "0.0 47.777009530082694 72.22299046991728 270.0\n", + "0.0 62.22725457147253 57.772745428527465 270.0\n", + "0.0 278.7120149718238 158.71201497182383 90.0\n", + "0.0 195.428361258955 75.42836125895501 90.0\n", + "0.0 239.0927285144889 119.09272851448891 90.0\n", + "0.0 230.62021224665406 110.62021224665409 90.0\n", + "0.0 107.11731376192003 12.882686238079954 270.0\n", + "0.0 157.35907039424248 37.35907039424247 90.0\n", + "0.0 135.4058798399319 15.40587983993192 90.0\n", + "0.0 130.24064313799508 10.240643137995084 90.0\n", + "0.0 1.892581816404899 118.1074181835951 270.0\n", + "0.0 207.37075291430313 87.37075291430315 90.0\n", + "0.0 171.0869519017806 51.08695190178061 90.0\n", + "0.0 278.1067962102084 158.10679621020842 90.0\n", + "0.0 254.71648464073405 134.71648464073405 90.0\n", + "0.0 299.9432308787044 179.94323087870285 90.0\n", + "0.0 22.921838498505068 97.07816150149492 270.0\n", + "0.0 7.89398472687715 112.10601527312285 270.0\n", + "0.0 73.69196142088225 46.30803857911775 270.0\n" + ] + } + ], + "source": [ + "# -------------------- 数据生成 ------------------------\n", + "\n", + "# 首先生成台站\n", + "doc_st=open('STATIONS','w')\n", + "doc_st.write('%d \\n'%(Nst))\n", + "for i in range(Nst):\n", + " # dep_st = random.uniform(dep_st1,dep_st2); \n", + " dep_st = 0.0\n", + " lat_st = random.uniform(lat_st1,lat_st2); \n", + " # lon_st = random.uniform(lon_st1,lon_st2); \n", + " lon_st = (lon_st2-lon_st1)/(Nst)*(i+0.5)+lon_st1\n", + " doc_st.write('%8.3f %8.3f %8.3f \\n'%(dep_st,lat_st,lon_st))\n", + " pos_st.append((dep_st,lat_st,lon_st))\n", + "doc_st.close()\n", + "\n", + "# 生成区域地震\n", + "doc_ev_region = open('EARTHQUAKES_region','w')\n", + "doc_ev_region.write('%d \\n'%(Nev_region))\n", + "for i in range(Nev_region):\n", + " dep_ev = random.uniform(dep_ev_region1,dep_ev_region2); \n", + " lat_ev = random.uniform(lat_ev_region1,lat_ev_region2); \n", + " lon_ev = random.uniform(lon_ev_region1,lon_ev_region2); \n", + " doc_ev_region.write('%8.3f %8.3f %8.3f \\n'%(dep_ev,lat_ev,lon_ev))\n", + " pos_ev_region.append((dep_ev,lat_ev,lon_ev))\n", + "doc_ev_region.close()\n", + "\n", + "# 生成远震\n", + "doc_ev_tele = open('EARTHQUAKES_tele','w')\n", + "doc_ev_tele.write('%d \\n'%(Nev_tele))\n", + "count = 0\n", + "while (count < Nev_tele):\n", + " lat_ev = 0.0\n", + " lon_ev = random.uniform(0,360.0)\n", + " dep_ev = random.uniform(dep_ev_tele1,dep_ev_tele2)\n", + " degree = cal_dis(clat,clon,lat_ev,lon_ev)\n", + " azi = cal_azimuth(clat,clon,lat_ev,lon_ev)\n", + " print(lat_ev,lon_ev,degree,azi)\n", + " if (degree > degree1 and degree < degree2 and azi > azi1 and azi < azi2):\n", + " doc_ev_tele.write('%8.3f %8.3f %8.3f %8.3f %8.3f \\n'%(dep_ev,lat_ev,lon_ev,azi,degree))\n", + " count = count+1; \n", + " pos_ev_tele.append((dep_ev,degree,azi))\n", + "doc_ev_tele.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-2.5, 2.5)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 台站分布\n", + "plt.figure(1)\n", + "for i in range(Nst):\n", + " plt.scatter(pos_st[i][2],pos_st[i][1],c='r',marker='o')\n", + "plt.xlabel('Longitude')\n", + "plt.ylabel('Latitude')\n", + "plt.xlim([lon1-1.5,lon2+1.5])\n", + "plt.ylim([lat1-1.5,lat2+1.5])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-2.5, 2.5)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 地震分布\n", + "plt.figure(2)\n", + "for i in range(Nev_region):\n", + " plt.scatter(pos_ev_region[i][2],pos_ev_region[i][1],c='b',marker='p')\n", + "plt.xlabel('Longitude')\n", + "plt.ylabel('Latitude')\n", + "plt.xlim([lon1-1.5,lon2+1.5])\n", + "plt.ylim([lat1-1.5,lat2+1.5])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(93.75424024443853, 47.74214627658114, 90.0)\n", + "(91.74147058170392, 43.10606311626317, 270.0)\n", + "(28.519975785125162, 72.24495483877948, 90.0)\n", + "(99.8767124683807, 51.23861255736139, 90.0)\n", + "(29.960132387638367, 51.93135515946566, 270.0)\n", + "(63.20184963246517, 62.252792398477006, 270.0)\n", + "(25.90818571587431, 79.89381975746234, 90.0)\n", + "(60.869382359315146, 47.31946037861752, 270.0)\n", + "(58.76663282089372, 42.948550467077396, 270.0)\n", + "(12.108262720166383, 69.16694569680054, 90.0)\n", + "(46.00751259206518, 76.3915984958269, 270.0)\n", + "(10.170098357139967, 45.518927573483666, 270.0)\n", + "(89.79967671929133, 55.24970913034874, 90.0)\n", + "(31.693028518129445, 46.3626290086637, 90.0)\n", + "(93.75025622172483, 51.14523178278323, 270.0)\n", + "(51.259680088140676, 73.54150713960807, 90.0)\n", + "(86.11028572151156, 52.07812140684447, 90.0)\n", + "(10.66109955772044, 71.0593578794778, 90.0)\n", + "(22.843331848633156, 63.39145866462279, 270.0)\n", + "(61.43688934548696, 56.890466705336365, 90.0)\n", + "(62.97234405157307, 61.7695087060994, 270.0)\n", + "(39.05312782429853, 65.51691056952171, 90.0)\n", + "(32.690103384326115, 47.73686138928051, 90.0)\n", + "(78.76430267593933, 70.265203959195, 90.0)\n", + "(76.32278204224933, 64.95848872928788, 90.0)\n", + "(33.802179523988485, 72.22299046991728, 270.0)\n", + "(25.48858050569794, 57.772745428527465, 270.0)\n", + "(51.5795080124909, 75.42836125895501, 90.0)\n", + "(64.12652782728235, 51.08695190178061, 90.0)\n", + "(92.5735521149096, 46.30803857911775, 270.0)\n" + ] + }, + { + "data": { + "text/plain": [ + "(-80.0, 80.0)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 远震分布\n", + "plt.figure(3)\n", + "for i in range(Nev_tele):\n", + " print(pos_ev_tele[i])\n", + " x = pos_ev_tele[i][1]*math.cos(pos_ev_tele[i][2]/180*math.pi)\n", + " y = pos_ev_tele[i][1]*math.sin(pos_ev_tele[i][2]/180*math.pi)\n", + " plt.scatter(x,y,c='g',marker='p')\n", + "# plt.xlabel('Longitude')\n", + "# plt.ylabel('Latitude')\n", + "plt.xlim([-80,80])\n", + "plt.ylim([-80,80])" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "cdd74c396a461f81d13d16403c726c38089d3c42a4b6e59262cdb9511d16556b" + }, + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.4" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/prem_model.txt b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/prem_model.txt new file mode 100644 index 0000000..96a6218 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5/input/prem_model.txt @@ -0,0 +1,89 @@ +88 + 0.00 5.80000 3.20000 2.60000 1456.0 600.0 + 15.00 5.80000 3.20000 2.60000 1456.0 600.0 + 15.00 6.80000 3.90000 2.90000 1350.0 600.0 + 24.40 6.80000 3.90000 2.90000 1350.0 600.0 + 24.40 8.11061 4.49094 3.38076 1446.0 600.0 + 40.00 8.10119 4.48486 3.37906 1446.0 600.0 + 60.00 8.08907 4.47715 3.37688 1447.0 600.0 + 80.00 8.07688 4.46953 3.37471 195.0 80.0 + 115.00 8.05540 4.45643 3.37091 195.0 80.0 + 150.00 8.03370 4.44361 3.36710 195.0 80.0 + 185.00 8.01180 4.43108 3.36330 195.0 80.0 + 220.00 7.98970 4.41885 3.35950 195.0 80.0 + 220.00 8.55896 4.64391 3.43578 362.0 143.0 + 265.00 8.64552 4.67540 3.46264 365.0 143.0 + 310.00 8.73209 4.70690 3.48951 367.0 143.0 + 355.00 8.81867 4.73840 3.51639 370.0 143.0 + 400.00 8.90522 4.76989 3.54325 372.0 143.0 + 400.00 9.13397 4.93259 3.72378 366.0 143.0 + 450.00 9.38990 5.07842 3.78678 365.0 143.0 + 500.00 9.64588 5.22428 3.84980 364.0 143.0 + 550.00 9.90185 5.37014 3.91282 363.0 143.0 + 600.00 10.15782 5.51602 3.97584 362.0 143.0 + 635.00 10.21203 5.54311 3.98399 362.0 143.0 + 670.00 10.26622 5.57020 3.99214 362.0 143.0 + 670.00 10.75131 5.94508 4.38071 759.0 312.0 + 721.00 10.91005 6.09418 4.41241 744.0 312.0 + 771.00 11.06557 6.24046 4.44317 730.0 312.0 + 871.00 11.24490 6.31091 4.50372 737.0 312.0 + 971.00 11.41560 6.37813 4.56307 743.0 312.0 + 1071.00 11.57828 6.44232 4.62129 750.0 312.0 + 1171.00 11.73357 6.50370 4.67844 755.0 312.0 + 1271.00 11.88209 6.56250 4.73460 761.0 312.0 + 1371.00 12.02445 6.61891 4.78983 766.0 312.0 + 1471.00 12.16126 6.67317 4.84422 770.0 312.0 + 1571.00 12.29316 6.72548 4.89783 775.0 312.0 + 1671.00 12.42075 6.77606 4.95073 779.0 312.0 + 1771.00 12.54466 6.82512 5.00299 784.0 312.0 + 1871.00 12.66550 6.87289 5.05469 788.0 312.0 + 1971.00 12.78389 6.91957 5.10590 792.0 312.0 + 2071.00 12.90045 6.96538 5.15669 795.0 312.0 + 2171.00 13.01579 7.01053 5.20713 799.0 312.0 + 2271.00 13.13055 7.05525 5.25729 803.0 312.0 + 2371.00 13.24532 7.09974 5.30724 807.0 312.0 + 2471.00 13.36074 7.14423 5.35706 811.0 312.0 + 2571.00 13.47742 7.18892 5.40681 815.0 312.0 + 2671.00 13.59597 7.23403 5.45657 819.0 312.0 + 2741.00 13.68041 7.26597 5.49145 822.0 312.0 + 2771.00 13.68753 7.26575 5.50642 823.0 312.0 + 2871.00 13.71168 7.26486 5.55641 826.0 312.0 + 2891.00 13.71660 7.26466 5.56645 826.0 312.0 + 2891.00 8.06482 0.00000 9.90349 57822.0 0.0 + 2971.00 8.19939 0.00000 10.02940 57822.0 0.0 + 3071.00 8.36019 0.00000 10.18134 57822.0 0.0 + 3171.00 8.51298 0.00000 10.32726 57822.0 0.0 + 3271.00 8.65805 0.00000 10.46727 57822.0 0.0 + 3371.00 8.79573 0.00000 10.60152 57822.0 0.0 + 3471.00 8.92632 0.00000 10.73012 57822.0 0.0 + 3571.00 9.05015 0.00000 10.85321 57822.0 0.0 + 3671.00 9.16752 0.00000 10.97091 57822.0 0.0 + 3771.00 9.27867 0.00000 11.08335 57822.0 0.0 + 3871.00 9.38418 0.00000 11.19067 57822.0 0.0 + 3971.00 9.48409 0.00000 11.29298 57822.0 0.0 + 4071.00 9.57881 0.00000 11.39042 57822.0 0.0 + 4171.00 9.66865 0.00000 11.48311 57822.0 0.0 + 4271.00 9.75393 0.00000 11.57119 57822.0 0.0 + 4371.00 9.83496 0.00000 11.65478 57822.0 0.0 + 4471.00 9.91206 0.00000 11.73401 57822.0 0.0 + 4571.00 9.98554 0.00000 11.80900 57822.0 0.0 + 4671.00 10.05572 0.00000 11.87990 57822.0 0.0 + 4771.00 10.12291 0.00000 11.94682 57822.0 0.0 + 4871.00 10.18743 0.00000 12.00989 57822.0 0.0 + 4971.00 10.24959 0.00000 12.06924 57822.0 0.0 + 5071.00 10.30971 0.00000 12.12500 57822.0 0.0 + 5149.50 10.35568 0.00000 12.16634 57822.0 0.0 + 5149.50 11.02827 3.50432 12.76360 445.0 85.0 + 5171.00 11.03643 3.51002 12.77493 445.0 85.0 + 5271.00 11.07249 3.53522 12.82501 443.0 85.0 + 5371.00 11.10542 3.55823 12.87073 440.0 85.0 + 5471.00 11.13521 3.57905 12.91211 439.0 85.0 + 5571.00 11.16186 3.59767 12.94912 437.0 85.0 + 5671.00 11.18538 3.61411 12.98178 436.0 85.0 + 5771.00 11.20576 3.62835 13.01009 434.0 85.0 + 5871.00 11.22301 3.64041 13.03404 433.0 85.0 + 5971.00 11.23712 3.65027 13.05364 432.0 85.0 + 6071.00 11.24809 3.65794 13.06888 432.0 85.0 + 6171.00 11.25593 3.66342 13.07977 431.0 85.0 + 6271.00 11.26064 3.66670 13.08630 431.0 85.0 + 6371.00 11.26220 3.66780 13.08848 431.0 85.0 diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/ega5_sphe_3d_kernel.f90 b/test/old_tests/inversion_tele_one_src/fortran_code/ega5_sphe_3d_kernel.f90 new file mode 100644 index 0000000..4eae3d0 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/ega5_sphe_3d_kernel.f90 @@ -0,0 +1,1022 @@ +include "eikon_solver_mpi.f90" + + +! example: 3-D 3rd order anisotropic eikonal equation in cartesian coordinate (Point source) +! parameter setting: +! domain: R * Theta * Phi = [6275, 6375] * [49^\circ, 51^\circ] * [129^\circ, 131^\circ] +! analytic solution: T = |x-x_s|/c0 +! isotropic eik equ: Tx^2 + Ty^2 + Tz^2 = s^2, +! boundary condition: T(x0,y0,z0) = 0 (point source) +! test function: 'FSM_WENO3_PS_sphe_3d' in "eikon_solver.f90" +! + +program eikonal_2d + use mpi + +! ######################### 参数声明 parameters statement ######################### + + implicit none + + ! mesh grid + integer :: nr,nt,np + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: Earth_Radius = 6371.0 + double precision :: rr1,rr2,tt1,tt2,pp1,pp2 + double precision,allocatable :: rr(:),tt(:),pp(:) + double precision :: dr,dt,dp + + ! STATIONS & EARTHQUAKES + integer :: nev + double precision,allocatable :: rev(:),tev(:),pev(:) ! earthquake (event) + integer :: nst + double precision,allocatable :: rst(:),tst(:),pst(:) ! station + integer :: nev_tele + double precision,allocatable :: rev_tele(:),tev_tele(:),pev_tele(:) ! tele seismic event + + ! model parameter + double precision,parameter :: gamma = 0.0 + double precision :: slow_p,ani_p + double precision,allocatable :: xi(:,:,:),eta(:,:,:),zeta(:,:,:) ! syn model (ani) + double precision,allocatable :: a(:,:,:),b(:,:,:),c(:,:,:),f(:,:,:),fun(:,:,:) ! syn model 猜测模型 + double precision,allocatable :: xiT(:,:,:),etaT(:,:,:),zetaT(:,:,:) ! true model (ani) + double precision,allocatable :: aT(:,:,:),bT(:,:,:),cT(:,:,:),fT(:,:,:),funT(:,:,:) ! true model 真实模型 + double precision :: sigma1,sigma2,psi + + ! teleseismic modeling + double precision,allocatable :: bd_N(:,:,:),bd_S(:,:,:),bd_W(:,:,:),bd_E(:,:,:),bd_B(:,:,:),bd_T(:,:,:) ! boundary conditions + double precision,allocatable :: bd_N_l(:,:,:),bd_S_l(:,:,:),bd_W_l(:,:,:),bd_E_l(:,:,:),bd_B_l(:,:,:),bd_T_l(:,:,:) ! local boundary conditions + + logical,allocatable :: isbd(:,:) + double precision :: max_deg,deg + + ! tele and regional control + double precision :: region_ratio, tele_ratio ! the ratio of regional kernel over tele kernel + logical :: is_region, is_tele + + + ! Eikonal solver + double precision,allocatable :: uT(:,:,:),TableT(:,:,:) !true timetable 真实走时场 + double precision,allocatable :: u(:,:,:),Table(:,:,:) !syn timetable 猜测走时场 + double precision,allocatable :: TableADJ(:,:,:) ! adjoint field 伴随场 + + ! adjoint source + double precision,allocatable :: TtimeT(:,:),Ttime_teleT(:,:),Ttime(:,:),Ttime_tele(:,:) ! 真实走时,合成走时 + double precision,allocatable :: TtimeT_l(:,:),Ttime_teleT_l(:,:),Ttime_l(:,:),Ttime_tele_l(:,:) ! 真实走时,合成走时 + double precision,allocatable :: sourceADJ(:) ! adjoint source 伴随源 + + ! sensitivity kernel + integer :: nk ! number of kernels + double precision,allocatable :: all_Ks_region(:,:,:),all_Kxi_region(:,:,:),all_Keta_region(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_region_l(:,:,:),all_Kxi_region_l(:,:,:),all_Keta_region_l(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_tele(:,:,:),all_Kxi_tele(:,:,:),all_Keta_tele(:,:,:) ! sensitivity kernel + double precision,allocatable :: all_Ks_tele_l(:,:,:),all_Kxi_tele_l(:,:,:),all_Keta_tele_l(:,:,:) ! sensitivity kernel + double precision,allocatable :: Ks(:,:,:),Kxi(:,:,:),Keta(:,:,:) ! event kernel + double precision,allocatable :: all_Kernel(:,:,:,:) ! kernels for all parameters together + + ! inversion parameterization + integer :: ninvr,ninvt,ninvp + double precision :: invr1,invr2,invt1,invt2,invp1,invp2 + integer :: ngrid ! number of nultigrid (multigrid technique) + double precision,allocatable :: invr(:,:),invt(:,:),invp(:,:) + double precision,allocatable :: inv_dep(:) + double precision :: dinvr,dinvt,dinvp + double precision,allocatable :: update_value(:,:,:,:) ! parameter update value 更新参数的变化量 + + ! model update (optimization) + double precision :: stepsize ! stepsize + integer :: stIter, edIter ! max iteration step + double precision :: old_obj, obj, obj_region, obj_region_l, obj_tele, obj_tele_l, tmp_obj ! 优化目标函数 objective function + double precision,allocatable :: weight_st(:),weight_ev(:),weight_ev_tele(:) !weight function + double precision :: dis_ij, dis_zero !weight function + logical :: weight_sou_bool=.false. , weight_rec_bool= .false. + + ! temp var + double precision :: depth,lat,lon + double precision :: tmp_dp,tmp_int + + ! input and output file + character(Len=80) :: filename,form,form2,TTfield_path + character(Len=80) :: input_path,output_path + logical :: isfile + logical :: isread_model + character(Len=80) :: read_model_name + + ! loop index + integer :: iir,iit,iip,idi,idj,idk,i,j,k,iter,igrid + + ! computing time + double precision :: time_begin,time_end,alpha + + ! mpi parameter + integer :: ierr,myid,nproc,tag,istat(mpi_status_size) + integer,allocatable :: my_tele_source_range(:,:),my_region_source_range(:,:) ! 负载平衡,当前 processor 负责的 最小最大震源序号 + integer :: iproc ! proc 循环index + double precision,allocatable :: dp_3d(:,:,:), dp_2d(:,:), dp_1d(:,:), dp_0d + + +! ############################# input parameters ############################## + ! this can be included in a input_parameter file later + + ! 正演网格 forward mesh + nr = 55; nt = 55; np = 55 ! number of grid for forward modeling + rr1 = 6070; rr2 = 6400 ! 6371 - 5571; 800 km depth + tt1 = (30.0 - 1.5)/180*pi; tt2 = (50.0 + 1.5)/180*pi + pp1 = (15.0 - 1.5)/180*pi; pp2 = (40.0 + 1.5)/180*pi + + ! 反演网格 + ninvr = 11; ninvt = 10; ninvp = 10 ! inversion grid size (coarse) + invr1 = rr1; invr2 = rr2 + invt1 = 30.0/180*pi; invt2 = 50.0/180*pi + invp1 = 15.0/180*pi; invp2 = 40.0/180*pi + ngrid = 5 + nk = 3 ! number of typies of kernel + allocate(inv_dep(ninvr)) + do i=1,ninvr + inv_dep(i) = (i-1)*(invr2-invr1)/(ninvr-1) + invr1 + enddo + + ! 迭代进程 iterative control + ! ############### 迭代中途开始反演,以下每个参数都值得仔细考虑和修改 + ! ############### allow starting from one iteration at any step. Please check all following parameters before start the inversion + stIter = 1; edIter = 1 ! 迭代次数 + isread_model = .false. + read_model_name = 'ega5/output/model_step100' + stepsize = 0.01 ! 初始迭代步长 + + + ! 反演相关参数 parameters for inversion + max_deg = 2.5/180.0*pi ! the distance threshold of stations for tele seismic inversion + slow_p=0.04; ani_p=0.03 ! 检测板异常大小 amplitude of checkerboard anomaly + + region_ratio = 1.0 ! 远近震比例 ratio for regional misfit + tele_ratio = 1.0 ! ratio for teleseismic misfit + is_region = .false. ! invert regional tarveltime data or not + is_tele = .true. ! invert teleseismic tarveltime data or not + + input_path = 'ega5/input' ! input and output path + output_path = 'ega5/output' + + +! ############################# Preparation ############################# + + ! -------------------- iteration check ------------------- + ! 如果当前目录下有生成的文件,暂停程序 if the velocity model file exists, pause + select case (stIter) + case (1:9) + write(form,'(I1)') stIter + case (10:99) + write(form,'(I2)') stIter + case (100:999) + write(form,'(I3)') stIter + end select + filename=trim(output_path)//'/model_step'//trim(form) + inquire(file=filename,exist = isfile) + if (isfile) then ! velocity model file exists, pause + print *, 'file exists, please check the output folder' + pause + end if + + ! -------------------- mpi initialization ------------------- + call mpi_init(ierr) + + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + call CPU_TIME(time_begin) ! program start + + tag = 1 ! communcation tag + +! ################### read sources and receivers 读取地震台站数据 ################### + open(10,file=trim(input_path)//'/STATIONS') + read(10,*) nst + allocate(rst(nst),tst(nst),pst(nst),weight_st(nst)) + do i=1,nst + read(10,*) depth,lat,lon + rst(i) = Earth_Radius-depth + tst(i) = lat/180.0*pi + pst(i) = lon/180.0*pi + end do + close(10) + + if (is_region) then + open(10,file=trim(input_path)//'/EARTHQUAKES_region') + read(10,*) nev + allocate(rev(nev),tev(nev),pev(nev),weight_ev(nev)) + do i=1,nev + read(10,*) depth,lat,lon + rev(i) = Earth_Radius-depth + tev(i) = lat/180.0*pi + pev(i) = lon/180.0*pi + end do + close(10) + end if + + if (is_tele) then + open(10,file=trim(input_path)//'/EARTHQUAKES_tele') + read(10,*) nev_tele + allocate(rev_tele(nev_tele),tev_tele(nev_tele),pev_tele(nev_tele),weight_ev_tele(nev_tele)) + do i=1,nev_tele + read(10,*) depth,lat,lon + rev_tele(i) = Earth_Radius-depth + tev_tele(i) = lat/180.0*pi + pev_tele(i) = lon/180.0*pi + end do + close(10) + end if + ! ---- 数据记录 data record (earthquakes and stations) ---- + if (myid .eq. 0) then + open(100,file=trim(output_path)//'/STATIONS') + do i=1,nst + write(100,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rst(i),tst(i)*180.0/pi,pst(i)*180.0/pi + end do + close(100); + if (is_region) then + open(101,file=trim(output_path)//'/EARTHQUAKES_region') + do i=1,nev + write(101,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rev(i),tev(i)*180.0/pi,pev(i)*180.0/pi + end do + close(101); + end if + if (is_tele) then + open(102,file=trim(output_path)//'/EARTHQUAKES_tele') + do i=1,nev_tele + write(102,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-rev_tele(i),tev_tele(i)*180.0/pi,pev_tele(i)*180.0/pi + end do + close(102) + end if + end if + + +! ######################### 生成网格 build mesh grid ##################################### + ! -------- forward modeling grid ---------- + dr=(rr2-rr1)/(nr-1); dt=(tt2-tt1)/(nt-1); dp=(pp2-pp1)/(np-1) + allocate(rr(nr),tt(nt),pp(np)) + do iir=1,nr + rr(iir)=rr1+(iir-1)*dr + end do + do iit=1,nt + tt(iit)=tt1+(iit-1)*dt + end do + do iip=1,np + pp(iip)=pp1+(iip-1)*dp + end do + + ! -------- inversion multigrid ---------- + dinvr=(invr2-invr1)/(ninvr-1); dinvt=(invt2-invt1)/(ninvt-1); dinvp=(invp2-invp1)/(ninvp-1) + allocate(invr(ngrid,ninvr),invt(ngrid,ninvt),invp(ngrid,ninvp)) + + + do igrid=1,ngrid + do iir=1,ninvr + if (iir .eq. 1) then + dinvr = inv_dep(ninvr)-inv_dep(ninvr-1) + else + dinvr = inv_dep(ninvr+1-iir+1)-inv_dep(ninvr+1-iir) + end if + invr(igrid,iir)=Earth_Radius-inv_dep(ninvr+1-iir)-(igrid-1)*dinvr/ngrid + end do + do iit=1,ninvt + invt(igrid,iit)=invt1+(iit-1)*dinvt-(igrid-1)*dinvt/ngrid + end do + do iip=1,ninvp + invp(igrid,iip)=invp1+(iip-1)*dinvp-(igrid-1)*dinvp/ngrid + end do + end do + + ! ------------ 数据记录 data record (multi grid for inversion) ------------- + if (myid==0) then + open(100,file=trim(output_path)//'/multigrid') + do igrid=1,Ngrid + write(100,'(i4,i4,i4,i4)') & + & igrid,ninvr,ninvt,ninvp + do iir=1,ninvr + do iit=1,ninvt + do iip=1,ninvp + write(100,'(f13.7,f13.7,f13.7)') & + & Earth_Radius-invr(igrid,iir),invt(igrid,iit)*180.0/pi,invp(igrid,iip)*180.0/pi + end do + end do + end do + end do + close(100) + end if + +! ######################### 构建背景模型 build the synthetic and true model ##################################### + ! ----------- allocation --------------- + allocate(xi(nr,nt,np),eta(nr,nt,np),zeta(nr,nt,np)) + allocate(a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np),fun(nr,nt,np)) + allocate(xiT(nr,nt,np),etaT(nr,nt,np),zetaT(nr,nt,np)) + allocate(aT(nr,nt,np),bT(nr,nt,np),cT(nr,nt,np),fT(nr,nt,np),funT(nr,nt,np)) + + + filename = trim(input_path)//'/prem_model.txt' + call Read_1D_velocity_3d(filename,rr,nr,nt,np,fun) + + do iir=1,nr + do iit=1,nt + do iip=1,np + + ! ! ega5 test velocity + ! if (rr(iir)>6351) then ! 6371 - 6351 20 km + ! fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + ! elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + ! elseif (rr(iir)>5961) then ! 6351 - 6336 15 km + ! fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1) + ! else + ! fun(iir,iit,iip) = 1.0/9.0 + ! end if + + + ! synthetic (initial) model + eta(iir,iit,iip)=0.0; + xi(iir,iit,iip)=0.0; + zeta(iir,iit,iip)=gamma*sqrt(eta(iir,iit,iip)**2+xi(iir,iit,iip)**2) + + if (rr(iir)>6351) then ! 6371 - 6351 20 km + fun(iir,iit,iip) = 1.0/(5.8+(6371-rr(iir))/20.0*0.7) + elseif (rr(iir)>6336) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(6.5+(6351-rr(iir))/15.0*0.6) + elseif (rr(iir)>5961) then ! 6351 - 6336 15 km + fun(iir,iit,iip) = 1.0/(8.0+(6336-rr(iir))/375.0*1) + else + fun(iir,iit,iip) = 1.0/9.0 + end if + + a(iir,iit,iip)=1.0+2*zeta(iir,iit,iip); + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + + ! true (target) model + if (tt(iit)>=30.0/180*pi .and. tt(iit)<=50.0/180*pi .and. & + & pp(iip)>=15.0/180*pi .and. pp(iip)<=40.0/180*pi .and. & + & rr(iir)>=6211.0 .and. rr(iir)<=6371.0 ) then + sigma1 = sin(4*pi*(tt(iit)-30.0/180*pi)/(20.0/180*pi))* & + & sin(4*pi*(pp(iip)-15.0/180*pi)/(25.0/180*pi))* & + & sin(2*pi*(rr(iir)-6211)/160.0) + else + sigma1 = 0.0 + end if + + if (sigma1<0) then + psi = 60.0/180*pi + elseif (sigma1 > 0) then + psi = 150.0/180*pi + else + psi = 0 + end if + + etaT(iir,iit,iip)=ani_p*abs(sigma1)*sin(2*psi); + xiT(iir,iit,iip)=ani_p*abs(sigma1)*cos(2*psi); + zetaT(iir,iit,iip)=gamma*sqrt(etaT(iir,iit,iip)**2+xiT(iir,iit,iip)**2) + + aT(iir,iit,iip)=1.0+2*zetaT(iir,iit,iip); + bT(iir,iit,iip)=1.0-2*xiT(iir,iit,iip); + cT(iir,iit,iip)=1.0+2*xiT(iir,iit,iip); + fT(iir,iit,iip)=-2*etaT(iir,iit,iip); + funT(iir,iit,iip) = fun(iir,iit,iip)/(1+sigma1*slow_p) + end do + end do + end do + + ! 从外部读取模型文件,一般用于从迭代中途开始 + ! if we start the inversion from an input model: + if (isread_model) then + call read_model_3d(read_model_name,nr,nt,np,fun,xi,eta,zeta,a,b,c,f) + else + ! ---- 数据记录 data record (true and initial model)---- + if (myid .eq. 0) then + open(100,file=trim(output_path)//'/model_true') + open(101,file=trim(output_path)//'/model_init') + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & funT(iir,iit,iip),xiT(iir,iit,iip),etaT(iir,iit,iip) + write(101,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100);close(101) + end if + end if + +! ###################### 震源并行, 负载平衡 load balancing ################################## + if (is_region) then + allocate(my_region_source_range(nproc,3)) + ! 分配,每个线程计算那些震源对应的到时 + do iproc=1,nproc + ! 前 k 个 processor 负责的总震源数,应该接近 震源总数的第k个nproc等分点 + my_region_source_range(iproc,1) = (nst*(iproc-1)/nproc)+1 + my_region_source_range(iproc,2) = (nst*(iproc)/nproc) + my_region_source_range(iproc,3) = my_region_source_range(iproc,2)-my_region_source_range(iproc,1)+1 + end do + end if + if (is_tele) then + allocate(my_tele_source_range(nproc,3)) + ! 分配,每个线程计算那些震源对应的到时 + do iproc=1,nproc + ! 前 k 个 processor 负责的总震源数,应该接近 震源总数的第k个nproc等分点 + my_tele_source_range(iproc,1) = (nev_tele*(iproc-1)/nproc)+1 + my_tele_source_range(iproc,2) = (nev_tele*(iproc)/nproc) + my_tele_source_range(iproc,3) = my_tele_source_range(iproc,2)-my_tele_source_range(iproc,1)+1 + end do + end if +! ###################### 计算远震波到达区域的边界 calculate the traveltime of teleseismic events on the boundary ##################### + + if (is_tele) then + allocate(bd_N(nev_tele,nr,np),bd_S(nev_tele,nr,np),bd_W(nev_tele,nr,nt), & + & bd_E(nev_tele,nr,nt),bd_B(nev_tele,nr,np),bd_T(nev_tele,nr,np)) + allocate(bd_N_l(nev_tele,nr,np),bd_S_l(nev_tele,nr,np),bd_W_l(nev_tele,nr,nt), & + & bd_E_l(nev_tele,nr,nt),bd_B_l(nev_tele,nr,np),bd_T_l(nev_tele,nr,np)) + allocate(isbd(nev_tele,5)) + bd_N = 0.0; bd_S = 0.0; bd_W = 0.0; bd_E = 0.0; bd_B = 0.0; bd_T = 0.0; isbd = .false. + bd_N_l = 0.0; bd_S_l = 0.0; bd_W_l = 0.0; bd_E_l = 0.0; bd_B_l = 0.0; bd_T_l = 0.0; + filename = trim(input_path)//'/prem_model.txt' + TTfield_path = trim(output_path)//'/tele_traveltime_field' + + ! calculate the boundary on each processor + do i = my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) + print *, '----------------- calculating tele 2d timetable ... evid: ',i,'----------------' + call eikonal_boundary_traveltime(rr,tt,pp,nr,nt,np,rev_tele(i),tev_tele(i),pev_tele(i) & + & ,filename,TTfield_path,isbd(i,:), & + & bd_N_l(i,:,:),bd_S_l(i,:,:),bd_W_l(i,:,:),bd_E_l(i,:,:),bd_B_l(i,:,:),bd_T_l(i,:,:)) + end do + + + ! processor communication + ! 数据通信 步骤1, 其他线程传输给主线程 + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then ! 负责接受数据 myid .eq. 0, receiver data + do iproc=1,nproc-1 + call mpi_recv(isbd(my_tele_source_range(iproc+1,1):my_tele_source_range(iproc+1,2),:), & + & my_tele_source_range(iproc+1,3)*5,mpi_logical,iproc,tag-1,mpi_comm_world,istat,ierr) + end do + else ! 负责发送数据 myid .ne. 0, send data + call mpi_send(isbd(my_tele_source_range(myid+1,1):my_tele_source_range(myid+1,2),:), & + & my_tele_source_range(myid+1,3)*5,mpi_logical,0,tag-1,mpi_comm_world,ierr) + end if + call mpi_allreduce(bd_N_l,bd_N,nev_tele*nr*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_S_l,bd_S,nev_tele*nr*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_W_l,bd_W,nev_tele*nr*nt,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_E_l,bd_E,nev_tele*nr*nt,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_B_l,bd_B,nev_tele*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(bd_T_l,bd_T,nev_tele*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + call mpi_bcast(isbd,nev_tele*5,mpi_logical,0,mpi_comm_world,ierr) + end if + + +! ######################### 计算真实区域地震到时 regional event true traveltime ###################### + call mpi_barrier(mpi_comm_world,ierr) + allocate(TableT(nr,nt,np),uT(nr,nt,np)) ! 初始化走时场 initial the true timetable + + if (is_region) then + allocate(TtimeT(nev,nst),TtimeT_l(nev,nst)) ! 初始化区域地震真实到时表 initiate true traveltimes + TtimeT = 0.0; TtimeT_l = 0.0 + do j=my_region_source_range(myid+1,1),my_region_source_range(myid+1,2) ! loop STATIONS + ! -------- 求解程函方程 solve eikonal equations ------------ + print *, '----------------- calculating regional true timetable ... evid: ',j,'----------------' + + call FSM_WENO3_PS_sphe_3d_mul(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rst(j),tst(j),pst(j),uT) + ! call FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,TableT,funT,rst(j),tst(j),pst(j),uT) + ! -------- 得到真实走时 calculate true arrival time -------- + do i=1,nev + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rev(i),tev(i),pev(i),TtimeT_l(i,j)) + end do + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(TtimeT_l,TtimeT,nev*nst,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + + ! data record (traveltime from source to receiver) + if ((myid.eq.0) .and. .true.) then + open(100,file=trim(output_path)//'/traveltime_region') + do i=1,nev + do j=1,nst + write(100,'(i4,f8.3,f8.3,f8.3,i4,f8.3,f8.3,f8.3,f8.3)') & + & i,Earth_Radius-rev(i),tev(i)/pi*180,pev(i)/pi*180, & + & j,Earth_Radius-rst(j),tst(j)/pi*180,pst(j)/pi*180, TtimeT(i,j) + end do + end do + close(100) + end if + end if +! ######################### 计算真实远震到时 tele seismic event true traveltime ###################### + if (is_tele) then + allocate(Ttime_teleT(nev_tele,nst),Ttime_teleT_l(nev_tele,nst)); ! 初始化远震真实到时表 initiate true traveltimes + Ttime_teleT = 0.0; Ttime_teleT_l = 0.0 + + do i=my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) ! loop ev_tele + ! -------- 求解远震程函方程 solve eikonal equations ------------ + print *, '----------------- calculating tele true timetable ... evid: ',i,'----------------' + call FSM_WENO3_tele_sphe_3d_ver2(rr,tt,pp,nr,nt,np,aT,bT,cT,fT,funT,isbd(i,:) & + & ,bd_N(i,:,:),bd_S(i,:,:),bd_W(i,:,:),bd_E(i,:,:),bd_B(i,:,:),TableT) + ! -------- 得到真实走时 calculate true arrival time -------- + do j=1,nst + call Linear_Interp_3D(rr,tt,pp,TableT,nr,nt,np,rst(j),tst(j),pst(j),Ttime_teleT_l(i,j)) + end do + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(Ttime_teleT_l,Ttime_teleT,nev_tele*nst,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + + ! data record (traveltime from source to receiver) + if ((myid.eq.0) .and. .true.) then + open(100,file=trim(output_path)//'/traveltime_tele') + do i=1,nev_tele + do j=1,nst + write(100,'(i4,f8.3,f8.3,f8.3,i4,f8.3,f8.3,f8.3,f8.3)') & + & i,Earth_Radius-rev_tele(i),tev_tele(i)/pi*180,pev_tele(i)/pi*180, & + & j,Earth_Radius-rst(j),tst(j)/pi*180,pst(j)/pi*180, Ttime_teleT(i,j) + end do + end do + close(100) + end if + end if +! ######################## 反演开始 inversion start ########################## + ! ----- 初始化反演参数 initiate inversion parameters ---- + old_obj = 0; obj = 0; obj_region=0; obj_tele=0; obj_tele_l=0;! 目标函数 objective function + + if (is_region) then + allocate(all_Ks_region(nr,nt,np),all_Kxi_region(nr,nt,np),all_Keta_region(nr,nt,np)) + allocate(Ttime(nev,nst)) + Ttime = 0.0; all_Ks_region = 0.0; all_Kxi_region = 0.0; all_Keta_region = 0.0 + allocate(all_Ks_region_l(nr,nt,np),all_Kxi_region_l(nr,nt,np),all_Keta_region_l(nr,nt,np)) + allocate(Ttime_l(nev,nst)) + Ttime_l = 0.0; all_Ks_region_l = 0.0; all_Kxi_region_l = 0.0; all_Keta_region_l = 0.0 + end if + if (is_tele) then + allocate(all_Ks_tele(nr,nt,np),all_Kxi_tele(nr,nt,np),all_Keta_tele(nr,nt,np)) + allocate(Ttime_tele(nev_tele,nst)) + Ttime_tele = 0.0; all_Ks_tele = 0.0; all_Kxi_tele = 0.0; all_Keta_tele = 0.0 + allocate(all_Ks_tele_l(nr,nt,np),all_Kxi_tele_l(nr,nt,np),all_Keta_tele_l(nr,nt,np)) + allocate(Ttime_tele_l(nev_tele,nst)) + Ttime_tele_l = 0.0; all_Ks_tele_l = 0.0; all_Kxi_tele_l = 0.0; all_Keta_tele_l = 0.0 + + end if + + allocate(Ks(nr,nt,np),Kxi(nr,nt,np),Keta(nr,nt,np)) + allocate(Table(nr,nt,np),u(nr,nt,np),TableADJ(nr,nt,np)) + allocate(all_Kernel(nr,nt,np,3),update_value(nr,nt,np,3)) + Ks = 0.0; Kxi = 0.0; Keta = 0.0; Table = 0.0; u = 0.0; TableADJ = 0.0; + all_Kernel = 0.0; update_value = 0.0; + + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- inversion start ... ----------------' + print *, ' ' + end if + + do iter = stIter,edIter ! loop iterations + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- iteration ',iter,' starting ... ----------------' + end if + + ! ----- 初始化参数 initiate parameters ------ + obj = 0.0; obj_region=0.0; obj_region_l=0.0; obj_tele=0.0; obj_tele_l=0; + all_Kernel = 0.0; update_value = 0.0; + +! ######################## 区域地震敏感核计算 calculate sensitivity kernel for regional events ########################## + if (is_region) then + call mpi_barrier(mpi_comm_world,ierr) + ! ----- 初始化参数 initiate parameters ------ + all_Ks_region_l = 0; all_Kxi_region_l = 0; all_Keta_region_l = 0; + all_Ks_region = 0; all_Kxi_region = 0; all_Keta_region = 0; + + do j=my_region_source_range(myid+1,1),my_region_source_range(myid+1,2) ! loop STATIONS + ! ######################## 计算合成走时场 calculate synthetic timetable ######################## + print *, '----------------- calculating regional synthetic timetable and kernel ... evid: ',j,'----------------' + + call FSM_WENO3_PS_sphe_3d_mul(rr,tt,pp,nr,nt,np,a,b,c,f,Table,fun,rst(j),tst(j),pst(j),u) + + ! -------- 得到合成走时 calculate synthetic arrival time at receiver -------- + do i=1,nev + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rev(i),tev(i),pev(i),Ttime_l(i,j)) + end do + + ! ######################## 计算伴随场 calculate adjoint timetable ######################## + + ! -------- 构造伴随源 build adjoint source (absolute traveltime difference) ------- + allocate(sourceADJ(nev)) + call Adjoint_Source_Dt(Ttime_l(:,j),TtimeT(:,j),nev,sourceADJ,tmp_obj) ! absolute traveltime difference + + call FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,nev,rev,tev,pev,sourceADJ) + + deallocate(sourceADJ) + ! ######################## 计算敏感核 calculate sensitivity kernel ######################## + + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! ------- 抹去伴随源处的大函数值 mask the source ------- + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Ks,rst(j),tst(j),pst(j)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Kxi,rst(j),tst(j),pst(j)) + call Kernel_Mask_new(rr,tt,pp,nr,nt,np,Keta,rst(j),tst(j),pst(j)) + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + all_Ks_region_l = all_Ks_region_l + Ks; + all_Kxi_region_l = all_Kxi_region_l + Kxi; + all_Keta_region_l = all_Keta_region_l + Keta; + obj_region_l = obj_region_l + tmp_obj + + ! ----- data recored (local event kernel) ------ + if (.false. .and. myid .eq. 0) then + select case (j) + case (1:9) + write(form2,'(I1)') j + case (10:99) + write(form2,'(I2)') j + end select + filename=trim(output_path)//'/region_event_kernel_ev'//trim(form2) + open(100*(myid+1),file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(Ks(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Kxi(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Keta(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & Ks(iir,iit,iip)/tmp_dp,Kxi(iir,iit,iip)/tmp_dp,Keta(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100*(myid+1)) + end if + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约,把所有进程的kernel和obj求和,传输给所有进程 + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(all_Ks_region_l,all_Ks_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Kxi_region_l,all_Kxi_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Keta_region_l,all_Keta_region,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(obj_region_l,obj_region,1,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(Ttime_l,Ttime,nev*nst,mpi_double_precision,mpi_max,mpi_comm_world,ierr) + + + + ! ----- data recored (regional traveltime misfit at each iteration) ------ + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + filename=trim(output_path)//'/misfit_step'//trim(form)//'_region' + open(998, file=trim(filename)) + do i=1,nev + do j=1,nst + write(998,'(f10.5,f10.5,f10.5)') & + & Ttime(i,j)-TtimeT(i,j), Ttime(i,j), TtimeT(i,j) + end do + end do + close(998) + end if + + ! ----- data recored (region misfit kernel) ------ + if (.false. .and. myid .eq. 0) then + filename=trim(output_path)//'/region_misfit_kernel' + open(100,file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(all_Ks_region(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Kxi_region(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Keta_region(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & all_Ks_region(iir,iit,iip)/tmp_dp,all_Kxi_region(iir,iit,iip)/tmp_dp, & + & all_Keta_region(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100) + end if + + end if +! ######################## 远震敏感核计算 calculate sensitivity kernel for teleseismic events ########################## + if (is_tele) then + call mpi_barrier(mpi_comm_world,ierr) + ! ----- 初始化参数 initiate parameters ------ + all_Ks_tele_l = 0; all_Kxi_tele_l = 0; all_Keta_tele_l = 0; + all_Ks_tele = 0; all_Kxi_tele = 0; all_Keta_tele = 0; + + do i=my_tele_source_range(myid+1,1),my_tele_source_range(myid+1,2) + ! ######################## 计算合成走时场 calculate synthetic timetable ######################## + ! -------- 求解远震程函方程 solve eikonal equations ------------ + print *, '----------------- calculating tele synthetic timetable and kernel ... evid: ',i,' ----------------' + + call FSM_WENO3_tele_sphe_3d_ver2(rr,tt,pp,nr,nt,np,a,b,c,f,fun,isbd(i,:) & + & ,bd_N(i,:,:),bd_S(i,:,:),bd_W(i,:,:),bd_E(i,:,:),bd_B(i,:,:),Table) + ! -------- 得到真实走时 calculate true arrival time -------- + do j=1,nst + call Linear_Interp_3D(rr,tt,pp,Table,nr,nt,np,rst(j),tst(j),pst(j),Ttime_tele_l(i,j)) + end do + + ! ######################## 计算伴随场 calculate adjoint timetable ######################## + + allocate(sourceADJ(nst)) + call Adjoint_Source_DDt(Ttime_tele_l(i,:),Ttime_teleT(i,:),tst,pst,nst,max_deg,sourceADJ,tmp_obj) ! absolute traveltime difference + + call FSM_O1_Adj_tele_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nst,rst,tst,pst,sourceADJ,isbd) + deallocate(sourceADJ) + + ! ######################## 计算敏感核 calculate sensitivity kernel ######################## + + call Sensitivity_Kernel(rr,tt,pp,nr,nt,np,Table,TableADJ,gamma,xi,eta,fun,Ks,Kxi,Keta) + + ! --------- 敏感核,obj叠加 sum kernels and objective function ------- + all_Ks_tele_l = all_Ks_tele_l + Ks; + all_Kxi_tele_l = all_Kxi_tele_l + Kxi; + all_Keta_tele_l = all_Keta_tele_l + Keta; + obj_tele_l = obj_tele_l + tmp_obj + + ! ----- data recored (tele event kernel) ------ + if (.true. .and. myid .eq. 0) then + select case (i) + case (1:9) + write(form2,'(I1)') i + case (10:99) + write(form2,'(I2)') i + end select + filename=trim(output_path)//'/tele_event_kernel_ev'//trim(form2) + open(100*(myid+1),file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(Ks(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Kxi(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(Keta(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & Ks(iir,iit,iip)/tmp_dp,Kxi(iir,iit,iip)/tmp_dp,Keta(iir,iit,iip)/tmp_dp, & + & Table(iir,iit,iip),TableADJ(iir,iit,iip) + end do + end do + end do + close(100*(myid+1)) + end if + end do + + ! processor communication (true traveltime at stations) + ! 数据通信 归约,把所有进程的kernel和obj求和,传输给所有进程 + ! sum kernels and objective functions + call mpi_barrier(mpi_comm_world,ierr) + call mpi_allreduce(all_Ks_tele_l,all_Ks_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Kxi_tele_l,all_Kxi_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(all_Keta_tele_l,all_Keta_tele,nr*nt*np,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(obj_tele_l,obj_tele,1,mpi_double_precision,mpi_sum,mpi_comm_world,ierr) + call mpi_allreduce(Ttime_tele_l,Ttime_tele,nev_tele*nst,mpi_double_precision,mpi_max,mpi_comm_world,ierr) + + + + + ! ----- data recored (teleseismic traveltime misfit at each iteration) ------ + if (myid .eq. 0) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + filename=trim(output_path)//'/misfit_step'//trim(form)//'_tele' + open(998, file=trim(filename)) + do i=1,nev_tele + do j=1,nst-1 + do k=j+1,nst + call Epicenter_Distance_sphere(tst(j),pst(j),tst(k),pst(k),deg) + if (deg < max_deg) then + write(998,'(f10.5,f10.5,f10.5,f10.5,f10.5)') & + & (Ttime_tele(i,j)-Ttime_tele(i,k))-(Ttime_teleT(i,j)-Ttime_teleT(i,k)), & + & Ttime_tele(i,j), Ttime_tele(i,k), Ttime_teleT(i,j), Ttime_teleT(i,k) + end if + end do + end do + end do + close(998) + end if + + ! ----- data recored (tele misfit kernel) ------ + if (.true. .and. myid .eq. 0) then + filename=trim(output_path)//'/tele_misfit_kernel' + open(100,file=trim(filename)) + tmp_dp = 0 + do iir=1,nr + do iit=1,nt + do iip=1,np + tmp_dp=max(tmp_dp,abs(all_Ks_tele(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Kxi_tele(iir,iit,iip))) + tmp_dp=max(tmp_dp,abs(all_Keta_tele(iir,iit,iip))) + end do + end do + end do + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180/pi,pp(iip)*180/pi, & + & all_Ks_tele(iir,iit,iip)/tmp_dp,all_Kxi_tele(iir,iit,iip)/tmp_dp, & + & all_Keta_tele(iir,iit,iip)/tmp_dp + end do + end do + end do + close(100) + end if + + end if + +! ################################### 模型更新 model update ########################################## + call mpi_barrier(mpi_comm_world,ierr) + if (myid .eq. 0) then + print *, '----------------- model update ... iter: ',iter,' ----------------' + end if + + ! ---- 更新目标函数 update objective function ------- + obj = region_ratio * obj_region + tele_ratio * obj_tele + + ! ----- data recored (misfit and step size at each iteration) ------ + if ((myid .eq. 0)) then + if (iter .eq. 1) then + open(999,file=trim(output_path)//'/obj') + else + open(999,file=trim(output_path)//'/obj',access='append') + end if + write(999,'(f11.2,f11.2,f11.2,f9.6)') obj, obj_region,obj_tele,stepsize + close(999) + end if + + ! --------- 整合kernel (sum kernels) --------------------- + if (is_region) then + all_Kernel(:,:,:,1) = all_Kernel(:,:,:,1) + region_ratio * all_Ks_region + all_Kernel(:,:,:,2) = all_Kernel(:,:,:,2) + region_ratio * all_Kxi_region + all_Kernel(:,:,:,3) = all_Kernel(:,:,:,3) + region_ratio * all_Keta_region + end if + if (is_tele) then + all_Kernel(:,:,:,1) = all_Kernel(:,:,:,1) + tele_ratio * all_Ks_tele + all_Kernel(:,:,:,2) = all_Kernel(:,:,:,2) + tele_ratio * all_Kxi_tele + all_Kernel(:,:,:,3) = all_Kernel(:,:,:,3) + tele_ratio * all_Keta_tele + end if + + + ! ------------ multiple grid parameterization ------------ + ! call Parameter_Update_Multigrid(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + ! & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + call Parameter_Update_Multigrid_ver2(rr,tt,pp,nr,nt,np,all_Kernel,nk, & + & invr,invt,invp,ninvr,ninvt,ninvp,ngrid,stepsize,update_value) + do iir=1,nr + do iit=1,nt + do iip=1,np + ! model parameter update + fun(iir,iit,iip) = fun(iir,iit,iip)*(1-update_value(iir,iit,iip,1)) + xi(iir,iit,iip) = xi(iir,iit,iip)-update_value(iir,iit,iip,2) + eta(iir,iit,iip) = eta(iir,iit,iip)-update_value(iir,iit,iip,3) + + b(iir,iit,iip)=1.0-2*xi(iir,iit,iip); + c(iir,iit,iip)=1.0+2*xi(iir,iit,iip); + f(iir,iit,iip)=-2*eta(iir,iit,iip); + end do + end do + end do + +! ################################## 调整下降步长 modify stepsize ############################## + + if (iter == 1 ) then + if (myid .eq. 0) then + write(*,'(a,f9.2)') 'iter 1, obj is', obj + write(*,'(a,f9.6)') 'iter 1, stepsize is', stepsize + end if + elseif (iter >= 2 .and. obj < old_obj) then + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function decreases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + elseif (iter >= 2 .and. obj >= old_obj) then + stepsize = max(0.003,stepsize*0.97) ! ega5 会注释掉步长变化 + if (myid .eq. 0) then + write(*,'(a,f9.2,a,f9.2)') 'objective function increases, from', old_obj, ' to', obj + write(*,'(a,f9.6)') 'new stepsize is ', stepsize + end if + end if + +! ################################## 迭代结束 iteration over ############################## + if (myid .eq. 0) then + print *, ' ' + print *, '----------------- iteration ',iter,' over ----------------' + print *, ' ' + end if + + old_obj = obj + + ! ---- data recored (parameters at each iteration) ---- + if ((myid .eq. 0) .and. .true.) then + select case (iter) + case (1:9) + write(form,'(I1)') iter + case (10:99) + write(form,'(I2)') iter + case (100:999) + write(form,'(I3)') iter + end select + + filename=trim(output_path)//'/model_step'//trim(form) + open(100,file=trim(filename)) + do iir=1,nr + do iit=1,nt + do iip=1,np + write(100,'(f13.7,f13.7,f13.7,f13.7,f13.7,f13.7)') & + & Earth_Radius-rr(iir),tt(iit)*180.0/pi,pp(iip)*180.0/pi, & + & fun(iir,iit,iip),xi(iir,iit,iip),eta(iir,iit,iip) + end do + end do + end do + close(100) + end if + + + if (myid .eq. 0) then + call CPU_TIME(time_end) + write(*,'(a,f10.2,a)') 'runtime is: ',time_end - time_begin, 'second' + end if + + + + end do + +! 储存释放 release space + if (is_tele) then + deallocate(rev_tele,tev_tele,pev_tele,weight_ev_tele) + deallocate(bd_N,bd_S,bd_W,bd_E,bd_B,bd_T,isbd) + deallocate(Ttime_teleT,Ttime_tele) + deallocate(Ttime_teleT_l,Ttime_tele_l) + deallocate(all_Ks_tele,all_Kxi_tele,all_Keta_tele) + deallocate(all_Ks_tele_l,all_Kxi_tele_l,all_Keta_tele_l) + deallocate(my_tele_source_range) + end if + if (is_region) then + deallocate(rev,tev,pev,weight_ev) + deallocate(TtimeT,Ttime) + deallocate(TtimeT_l,Ttime_l) + deallocate(all_Ks_region,all_Kxi_region,all_Keta_region) + deallocate(all_Ks_region_l,all_Kxi_region_l,all_Keta_region_l) + deallocate(my_region_source_range) + end if + + deallocate(rst,tst,pst,weight_st) + deallocate(rr,tt,pp,invr,invt,invp) + deallocate(xi,eta,zeta) + deallocate(a,b,c,f,fun) + deallocate(xiT,etaT,zetaT) + deallocate(aT,bT,cT,fT,funT) + deallocate(TableT,uT,Table,u,TableADJ) + + deallocate(Ks,Kxi,Keta) + deallocate(all_kernel,update_value) + + deallocate(inv_dep) + + + call mpi_finalize(ierr) + +end program eikonal_2d + diff --git a/test/old_tests/inversion_tele_one_src/fortran_code/eikon_solver_mpi.f90 b/test/old_tests/inversion_tele_one_src/fortran_code/eikon_solver_mpi.f90 new file mode 100644 index 0000000..b982886 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/fortran_code/eikon_solver_mpi.f90 @@ -0,0 +1,5333 @@ +subroutine FSM_WENO3_tele_sphe_3d(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,u,ischange) + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: T_old(nr,nt,np) + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision,parameter :: tol = (10.0)**(-5),eps=10.0**(-12) + integer,parameter :: MaxIter=500 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: tmp + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 build eikonal matrix ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + ! 正式迭代,更新 iteration start, update T + do iter =1,MaxIter + T_old = T + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr <-> 1, y: nt <-> 1, z: np <-> 1 + + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + + if(ischange(iir,iit,iip)==1) then + if( iir>1 .and. iir1 .and. iit1 .and. iip0) then + T(i,j,1) = bd_W_interp(i,j) + u(i,j,1) = bd_W_interp(i,j) + ischange(i,j,1) = 0 + else + T(i,j,1) = infT + ischange(i,j,1) = 1 + end if + else + if (bd_W_interp(i,j)>0) then + u(i,j,1) = bd_W_interp(i,j) + end if + end if + + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_tt,bd_W) + + + + ! #--------------------------- 东 E 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_E') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_E(ni,nj),bd_rr(ni),bd_tt(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_E(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dt = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_tt(j) = y1 + (j-1)*bd_dt + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_tt,ni,nj,bd_E,rr,tt,nr,nt,bd_E_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,nt + if (isE) then + if (bd_E_interp(i,j)>0) then + T(i,j,np) = bd_E_interp(i,j) + u(i,j,np) = bd_E_interp(i,j) + ischange(i,j,np) = 0 + else + T(i,j,np) = infT + ischange(i,j,np) = 1 + end if + else + if (bd_E_interp(i,j)>0) then + u(i,j,np) = bd_E_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_tt,bd_E) + + + + ! #--------------------------- 北 N 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_N') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_N(ni,nj),bd_rr(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_N(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_pp,ni,nj,bd_N,rr,pp,nr,np,bd_N_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,np + if (isN) then + if (bd_N_interp(i,j)>0) then + T(i,nt,j) = bd_N_interp(i,j) + u(i,nt,j) = bd_N_interp(i,j) + ischange(i,nt,j) = 0 + else + T(i,nt,j) = infT + ischange(i,nt,j) = 1 + end if + else + if (bd_N_interp(i,j)>0) then + u(i,nt,j) = bd_N_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_pp,bd_N) + + + + ! #--------------------------- 南 S 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_S') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_S(ni,nj),bd_rr(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_S(i,j), read_tmp, read_tmp + end do + end do + x1 = Radius - x1 + x2 = Radius - x2 + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dr = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_rr(i) = x1 + (i-1)*bd_dr + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_rr,bd_pp,ni,nj,bd_S,rr,pp,nr,np,bd_S_interp) + + ! 赋值给 走时场T + do i=1,nr + do j=1,np + if (isS) then + if (bd_S_interp(i,j)>0) then + T(i,1,j) = bd_S_interp(i,j) + u(i,1,j) = bd_S_interp(i,j) + ischange(i,1,j) = 0 + else + T(i,1,j) = infT + ischange(i,1,j) = 1 + end if + else + if (bd_S_interp(i,j)>0) then + u(i,1,j) = bd_S_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_rr,bd_pp,bd_S) + + + ! #--------------------------- 顶 Top 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_T') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_T(ni,nj),bd_tt(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_T(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dt = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_tt(i) = x1 + (i-1)*bd_dt + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_tt,bd_pp,ni,nj,bd_T,tt,pp,nt,np,bd_T_interp) + + ! 赋值给 走时场T + do i=1,nt + do j=1,np + if (isT) then + if (bd_T_interp(i,j)>0) then + T(nr,i,j) = bd_T_interp(i,j) + ischange(nr,i,j) = 0 + surface(i,j) = bd_T_interp(i,j) + else + T(nr,i,j) = infT + ischange(nr,i,j) = 1 + end if + else + if (bd_T_interp(i,j)>0) then + surface(i,j) = bd_T_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_tt,bd_pp,bd_T) + + + ! #--------------------------- 底 Bottom 边界 ---------------------------# + open(10, file='ega1/input/boundary_condition_B') + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(bd_B(ni,nj),bd_tt(ni),bd_pp(nj)) + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, bd_B(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + bd_dt = (x2-x1)/(ni-1) + bd_dp = (y2-y1)/(nj-1) + do i=1,ni + bd_tt(i) = x1 + (i-1)*bd_dt + end do + do j=1,nj + bd_pp(j) = y1 + (j-1)*bd_dp + end do + + ! 远震到时 插值到 计算区域边界 + call boundary_interp(bd_tt,bd_pp,ni,nj,bd_B,tt,pp,nt,np,bd_B_interp) + + ! 赋值给 走时场T + do i=1,nt + do j=1,np + if (isB) then + if (bd_T_interp(i,j)>0) then + T(1,i,j) = bd_B_interp(i,j) + u(1,i,j) = bd_B_interp(i,j) + ischange(1,i,j) = 0 + else + T(1,i,j) = infT + ischange(1,i,j) = 1 + end if + else + if (bd_T_interp(i,j)>0) then + u(1,i,j) = bd_B_interp(i,j) + end if + end if + end do + end do + + ! 释放动态数组 + deallocate(bd_tt,bd_pp,bd_B) + +end subroutine + +subroutine boundary_interp(xx1,yy1,nx1,ny1,val1,xx2,yy2,nx2,ny2,val2) + ! 将 1 套网格的值 插值到 2套网格上,允许外插 + integer :: nx1,ny1,nx2,ny2 + double precision :: xx1(nx1),yy1(ny1),xx2(nx2),yy2(ny2) + double precision :: dx1,dy1,val1(nx1,ny1),val2(nx2,ny2) + double precision :: r1,r2 + integer i,j,idx0,idy0 + dx1 = xx1(2)-xx1(1) + dy1 = yy1(2)-yy1(1) + + + + do i=1,nx2 + do j=1,ny2 + idx0 = floor((xx2(i)-xx1(1))/dx1)+1 + idy0 = floor((yy2(j)-yy1(1))/dy1)+1 + + if (idx0<1 .or. idx0>nx1-1 .or. idy0<1 .or. idy0>ny1-1) then + ! 允许外插 + idx0 = min(nx1-1,max(1,idx0)) + idy0 = min(ny1-1,max(1,idy0)) + end if + + + r1 = min(1.0, (xx2(i)-xx1(idx0))/dx1 ) + r2 = min(1.0, (yy2(j)-yy1(idy0))/dy1 ) + + val2(i,j) = (1-r1)*(1-r2)*val1(idx0,idy0) + (1-r1)*(r2)*val1(idx0,idy0+1) & + & + (r1)*(1-r2)*val1(idx0+1,idy0) + (r1)*(r2)*val1(idx0+1,idy0+1) + + end do + end do +end subroutine + +subroutine tele_error_estimation(rr,tt,pp,nr,nt,np,T,filename,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + character(Len=80) :: filename + + double precision,allocatable :: tauP_solution(:,:),tauP_tt(:),tauP_pp(:) + double precision :: tauP_dt,tauP_dp,tauP_solution_interp(nt,np) + + double precision :: L1_err, Linf_err + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取指定文件 + open(10, file=filename) + read(10, *) ni,nj,x1,x2,y1,y2 + allocate(tauP_solution(ni,nj),tauP_tt(ni),tauP_pp(nj)) + + + do i=1,ni + do j=1,nj + read(10, *) read_tmp, read_tmp, read_tmp, tauP_solution(i,j), read_tmp, read_tmp + end do + end do + x1 = x1/180*pi + x2 = x2/180*pi + y1 = y1/180*pi + y2 = y2/180*pi + + tauP_dt = (x2-x1)/(ni-1) + tauP_dp = (y2-y1)/(nj-1) + do i=1,ni + tauP_tt(i) = x1 + (i-1)*tauP_dt + end do + do j=1,nj + tauP_pp(j) = y1 + (j-1)*tauP_dp + end do + + ! 远震到时 插值到 计算区域 + call boundary_interp(tauP_tt,tauP_pp,ni,nj,tauP_solution,tt,pp,nt,np,tauP_solution_interp) + + ! 走时场 T 插值到指定深度 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + error(iit,iip,1) = tauP_solution_interp(iit,iip) + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + end do + end do + L1_err = L1_err/(nt*np) + ! 释放动态数组 + deallocate(tauP_solution,tauP_tt,tauP_pp) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + +end subroutine +! ----------------------- end for ega1 ---------------------- + + +! ----------------------- for ega2 ---------------------- +subroutine load_boundary(rr,tt,pp,nr,nt,np,T,ischange,taup_fn,isbd,tele_location) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np),ischange(nr,nt,np) + double precision,parameter :: Radius = 6371.0,pi=3.14159265358979323846264338327950288 + logical :: isbd(6),isN,isS,isW,isE,isT,isB ! N S W E T B + double precision :: tele_location(3) + + ! tauP database + character(Len=80) :: taup_fn + integer :: taup_nsrc_dep,taup_nrec_dep,taup_ndegree + double precision,allocatable :: taup_time(:,:,:),taup_src_dep(:),taup_rec_dep(:),taup_degree(:) + double precision :: tmp_read ! useless for read + + ! boundary points + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: r1,r2,r3 ! linear interpolation + double precision :: src,rec,dis + integer :: id1,id2,id3 + ! otheres + integer :: i,j,k !iterative index + + + ! 读取 tauP 数据库 三列分别是 震源深度,台站深度,和震中距 + open(10, file=taup_fn) + read(10, *) taup_nsrc_dep,taup_nrec_dep,taup_ndegree + + allocate(taup_time(taup_nsrc_dep,taup_nrec_dep,taup_ndegree)) + allocate(taup_src_dep(taup_nsrc_dep),taup_rec_dep(taup_nrec_dep),taup_degree(taup_ndegree)) + + read(10, *) taup_src_dep + read(10, *) taup_rec_dep + read(10, *) taup_degree + + do i=1,taup_nsrc_dep + do j=1,taup_nrec_dep + do k=1,taup_ndegree + read(10, *) tmp_read,tmp_read,tmp_read,taup_time(i,j,k) + end do + end do + end do + close(10) + ! 插值边界 + + isN=isbd(1);isS=isbd(2) + isW=isbd(3);isE=isbd(4) + isT=isbd(5);isB=isbd(6) + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + + ! 北边界 North + if (isN) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(nt,j), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(nt,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,nt,j)) + ischange(i,nt,j) = 0 + end do + end do + end if + + ! 南边界 South + if (isS) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(1,j), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(1,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,1,j)) + ischange(i,1,j) = 0 + end do + end do + end if + + ! 西边界 West + if (isW) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,1), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(j,1) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,j,1)) + ischange(i,j,1) = 0 + end do + end do + end if + + ! 东边界 East + if (isE) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,np), + src = tele_location(1) + rec = Radius-rr(i) + dis = epicenter_dis(j,np) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(i,j,np)) + ischange(i,j,np) = 0 + end do + end do + end if + + ! 上边界 top (一般是不插值的,遂略去) + + ! 下边界 bottom + if (isB) then + do i=1,nt + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(1),震中距:epicenter_dis(i,j), + src = tele_location(1) + rec = Radius-rr(1) + dis = epicenter_dis(i,j) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,T(1,i,j)) + ischange(1,i,j) = 0 + end do + end do + end if + + + deallocate(taup_time,taup_src_dep,taup_rec_dep,taup_degree) + +end subroutine + +subroutine taup_data_interp(src,rec,deg,time,ns,nr,nd,s,r,d,v) + integer :: ns,nr,nd + double precision :: time(ns,nr,nd),src(ns),rec(nr),deg(nd) + double precision :: s,r,d,v + + integer :: id1,id2,id3,k + double precision :: r1,r2,r3 + ! 震源插值 + ! do k=1,ns-1 + ! if (src(k)<= s .and. src(k+1) > s ) then + ! id1=k + ! exit + ! elseif (src(1) > s) then + ! id1=1 + ! exit + ! elseif (src(ns) <= s) then + ! id1=ns-1 + ! exit + ! end if + ! end do + ! r1 = (s - src(id1)) / (src(id1+1)-src(id1)) + + id1 = 1 + + ! 台站插值 (允许外插) + do k=1,nr-1 + if (rec(k)<= r .and. rec(k+1) > r ) then + id2=k + exit + elseif (rec(1) > r) then + id2=1 + exit + elseif (rec(nr) <= r) then + id2=nr-1 + exit + end if + end do + r2 = (r - rec(id2)) / (rec(id2+1)-rec(id2)) + + ! 震中距插值 (允许外插) + do k=1,nd-1 + if (deg(k)<= d .and. deg(k+1) > d ) then + id3=k + exit + elseif (deg(1) > d) then + id3=1 + exit + elseif (deg(nd) <= d) then + id3=nd-1 + exit + end if + end do + r3 = (d - deg(id3)) / (deg(id3+1)-deg(id3)) + + ! v = (1-r1)*(1-r2)*(1-r3)*time(id1,id2,id3) + (1-r1)*(1-r2)*(r3)*time(id1,id2,id3+1) & + ! & + (1-r1)*(r2)*(1-r3)*time(id1,id2+1,id3) + (1-r1)*(r2)*(r3)*time(id1,id2+1,id3+1) & + ! & + (r1)*(1-r2)*(1-r3)*time(id1+1,id2,id3) + (r1)*(1-r2)*(r3)*time(id1+1,id2,id3+1) & + ! & + (r1)*(r2)*(1-r3)*time(id1+1,id2+1,id3) + (r1)*(r2)*(r3)*time(id1+1,id2+1,id3+1) + + v = (1-r2)*(1-r3)*time(id1,id2,id3) + (1-r2)*(r3)*time(id1,id2,id3+1) & + & + (r2)*(1-r3)*time(id1,id2+1,id3) + (r2)*(r3)*time(id1,id2+1,id3+1) + + +end subroutine + +subroutine tele_error_estimation_ver2(rr,tt,pp,nr,nt,np,T,taup_fn,tele_location,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep,tele_location(3) + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + ! tauP database + character(Len=80) :: taup_fn + integer :: taup_nsrc_dep,taup_nrec_dep,taup_ndegree + double precision,allocatable :: taup_time(:,:,:),taup_src_dep(:),taup_rec_dep(:),taup_degree(:) + double precision :: tmp_read ! useless for read + + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: src,rec,dis,traveltime + + double precision :: L1_err, Linf_err + + + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,k,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取 tauP 数据库 三列分别是 震源深度,台站深度,和震中距 + open(10, file=taup_fn) + read(10, *) taup_nsrc_dep,taup_nrec_dep,taup_ndegree + + allocate(taup_time(taup_nsrc_dep,taup_nrec_dep,taup_ndegree)) + allocate(taup_src_dep(taup_nsrc_dep),taup_rec_dep(taup_nrec_dep),taup_degree(taup_ndegree)) + + read(10, *) taup_src_dep + read(10, *) taup_rec_dep + read(10, *) taup_degree + + do i=1,taup_nsrc_dep + do j=1,taup_nrec_dep + do k=1,taup_ndegree + read(10, *) tmp_read,tmp_read,tmp_read,taup_time(i,j,k) + end do + end do + end do + close(10) + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + ! 指定深度 tauP 走时 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-dep,震中距:epicenter_dis(iit,iip), + src = tele_location(1) + rec = dep + dis = epicenter_dis(iit,iip) + + call taup_data_interp(taup_src_dep,taup_rec_dep,taup_degree, & + & taup_time,taup_nsrc_dep,taup_nrec_dep,taup_ndegree,src,rec,dis,traveltime) + + error(iit,iip,1) = traveltime + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + + end do + end do + L1_err = L1_err/(nt*np) + + ! 释放动态数组 + deallocate(taup_time,taup_src_dep,taup_rec_dep,taup_degree) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + +end subroutine +! ----------------------- end for ega2 ---------------------- + + +! ----------------------- for ega3 ---------------------- + +subroutine FSM_WENO3_PS_sphe_2d(rr,tt,nr,nt,spha,sphb,T,fun,r0,t0,u) + integer :: nr,nt + double precision :: spha(nr,nt),sphb(nr,nt) + double precision :: rr(nr),tt(nt),a(nr,nt),b(nr,nt),T(nr,nt),fun(nr,nt),r0,t0,ischange(nr,nt),u(nr,nt) + double precision :: dr,dt,T0v(nr,nt),T0r(nr,nt),T0t(nr,nt),a0,b0,fun0 + double precision :: tau(nr,nt),px1,px2,py1,py2,tpT,Htau,wx1,wx2,wy1,wy2 + integer :: iir,iit,iter,xdirec,ydirec + double precision :: L1_dif,Linf_dif,L1_err,Linf_err,tau_old(nr,nt),sigr,sigt + integer,parameter :: MaxIter = 2000 + double precision,parameter :: tol=(10.0)**(-4),eps=(10.0)**(-12) + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); + + do iir=1,nr + do iit=1,nt + a(iir,iit) = spha(iir,iit) + b(iir,iit) = sphb(iir,iit)/(rr(iir)**2) + end do + end do + + a0=(1-r1)*(1-r2)*a(idr0,idt0)+(1-r1)*r2*a(idr0,idt0+1) & + & +r1*(1-r2)*a(idr0+1,idt0)+r1*r2*a(idr0+1,idt0+1) + + b0=(1-r1)*(1-r2)*b(idr0,idt0)+(1-r1)*r2*b(idr0,idt0+1) & + & +r1*(1-r2)*b(idr0+1,idt0)+r1*r2*b(idr0+1,idt0+1) + + fun0=(1-r1)*(1-r2)*fun(idr0,idt0)+(1-r1)*r2*fun(idr0,idt0+1) & + & +r1*(1-r2)*fun(idr0+1,idt0)+r1*r2*fun(idr0+1,idt0+1) + + do iir=1,nr + do iit=1,nt + T0v(iir,iit) = fun0*sqrt((1.0/a0)*(rr(iir)-r0)**2 + 1.0/b0*(tt(iit)-t0)**2) + if (T0v(iir,iit) .eq. 0) then + T0r(iir,iit) = 0 + T0t(iir,iit) = 0 + else + T0r(iir,iit) = fun0**2*(1.0/a0*(rr(iir)-r0))/T0v(iir,iit) + T0t(iir,iit) = fun0**2*(1.0/b0*(tt(iit)-y0))/T0v(iir,iit) + end if + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2) then + tau(iir,iit) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + ischange(iir,iit)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt) then + write(*,*) 'source on the boundary, mesh error' + pause + end if + else + tau(iir,iit) = 1 + ischange(iir,iit)=1 + end if + + end do + end do + + ! step 2, solve Tau, H(tau) = a tau_x^2+ b tau_y^2 + (2aTx-2cTy) tau_x + (2bTy-2cTx) tau_y + ! -2c tau_x tau_y + (aTx^2+bTy^2-2cTxTy) = f^2 + + do iter =1,MaxIter + L1_dif=10000; Linf_dif=10000;L1_err=0;Linf_err=0; + tau_old = tau + do xdirec = -1,1,2 + do ydirec = -1,1,2 + ! iter 1 x: 1 -> nr, y: 1 -> nt + ! iter 2 x: 1 -> nr, y: nt -> 1 + ! iter 3 x: nr -> 1, y: 1 -> nt + ! iter 4 x: nr -> 1, y: nt -> 1 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*xdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*xdirec),-xdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*ydirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*ydirec),-ydirec + if(ischange(iir,iit)==1) then + + sigr=sqrt(a(iir,iit))*T0v(iir,iit);sigt=sqrt(b(iir,iit))*T0v(iir,iit) + coe=1.0/((sigr/dr)+(sigt/dt)) + + if(iir==2) then + px1=(tau(iir,iit)-tau(iir-1,iit))/dr; + wx2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir+1,iit)+tau(iir+2,iit))**2)/ & + & (eps+(tau(iir-1,iit)-2*tau(iir,iit)+tau(iir+1,iit))**2))**2) + px2=(1-wx2)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx2*(-3*tau(iir,iit)+4*tau(iir+1,iit)-tau(iir+2,iit))/2/dr; + elseif (iir==nr-1) then + wx1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir-1,iit)+tau(iir-2,iit))**2)/ & + & (eps+(tau(iir+1,iit)-2*tau(iir,iit)+tau(iir-1,iit))**2))**2) + px1=(1-wx1)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx1*(3*tau(iir,iit)-4*tau(iir-1,iit)+tau(iir-2,iit))/2/dr; + px2=(tau(iir+1,iit)-tau(iir,iit))/dr; + else + wx1=1.0/(1.0+2*((eps+(tau(iir,iit)-2*tau(iir-1,iit)+tau(iir-2,iit))**2)/ & + & (eps+(tau(iir+1,iit)-2*tau(iir,iit)+tau(iir-1,iit))**2))**2) + px1=(1.0-wx1)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx1*(3*tau(iir,iit)-4*tau(iir-1,iit)+tau(iir-2,iit))/2/dr; + wx2=1.0/(1.0+2*((eps+(tau(iir,iit)-2*tau(iir+1,iit)+tau(iir+2,iit))**2)/ & + & (eps+(tau(iir-1,iit)-2*tau(iir,iit)+tau(iir+1,iit))**2))**2) + px2=(1.0-wx2)*(tau(iir+1,iit)-tau(iir-1,iit))/2/dr+ & + & wx2*(-3*tau(iir,iit)+4*tau(iir+1,iit)-tau(iir+2,iit))/2/dr; + end if + + + if(iit==2) then + py1=(tau(iir,iit)-tau(iir,iit-1))/dt; + wy2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit+1)+tau(iir,iit+2))**2)/ & + & (eps+(tau(iir,iit-1)-2*tau(iir,iit)+tau(iir,iit+1))**2))**2) + py2=(1-wy2)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy2*(-3*tau(iir,iit)+4*tau(iir,iit+1)-tau(iir,iit+2))/2/dt; + elseif (iit==nt-1) then + wy1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit-1)+tau(iir,iit-2))**2)/ & + & (eps+(tau(iir,iit+1)-2*tau(iir,iit)+tau(iir,iit-1))**2))**2) + py1=(1-wy1)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy1*(3*tau(iir,iit)-4*tau(iir,iit-1)+tau(iir,iit-2))/2/dt; + py2=(tau(iir,iit+1)-tau(iir,iit))/dt; + else + wy1=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit-1)+tau(iir,iit-2))**2)/ & + & (eps+(tau(iir,iit+1)-2*tau(iir,iit)+tau(iir,iit-1))**2))**2) + py1=(1-wy1)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy1*(3*tau(iir,iit)-4*tau(iir,iit-1)+tau(iir,iit-2))/2/dt; + wy2=1.0/(1+2*((eps+(tau(iir,iit)-2*tau(iir,iit+1)+tau(iir,iit+2))**2)/ & + & (eps+(tau(iir,iit-1)-2*tau(iir,iit)+tau(iir,iit+1))**2))**2) + py2=(1-wy2)*(tau(iir,iit+1)-tau(iir,iit-1))/2/dt+ & + & wy2*(-3*tau(iir,iit)+4*tau(iir,iit+1)-tau(iir,iit+2))/2/dt; + end if + + + + Htau = sqrt( a(iir,iit)*(T0r(iir,iit)*tau(iir,iit)+T0v(iir,iit)*(px1+px2)/2)**2 & + & + b(iir,iit)*(T0t(iir,iit)*tau(iir,iit)+T0v(iir,iit)*(py1+py2)/2)**2 ) + + tpT=coe*(fun(iir,iit)-Htau) + coe*(sigr*(px2-px1)/2+sigt*(py2-py1)/2)+tau(iir,iit); + + tau(iir,iit)=tpT + + + end if + + end do + end do + + ! 处理边界 + do iit=1,nt + tau(1,iit) = max(2*tau(2,iit)-tau(3,iit),tau(3,iit)) + tau(nr,iit) = max(2*tau(nr-1,iit)-tau(nr-2,iit),tau(nr-2,iit)) + end do + do iir=1,nr + tau(iir,1) = max(2*tau(iir,2)-tau(iir,3),tau(iir,3)) + tau(iir,nt) = max(2*tau(iir,nt-1)-tau(iir,nt-2),tau(iir,nt-2)) + end do + + end do + end do + + L1_dif=0; Linf_dif=0 + do iir=1,nr + do iit=1,nt + L1_dif=L1_dif+abs(tau(iir,iit)-tau_old(iir,iit)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit)-tau_old(iir,iit))) + end do + end do + L1_dif = L1_dif/(nr*nt) + + do iir=3,nr-2 + do iit=3,nt-2 + L1_err=L1_err+abs(tau(iir,iit)*T0v(iir,iit)-u(iir,iit)) + Linf_err=max(Linf_err,abs(tau(iir,iit)*T0v(iir,iit)-u(iir,iit))) + end do + end do + L1_err = L1_err/(nr-4)/(nt-4) + + + if (abs(L1_dif)= layer_dep(nlayer)) then + vel = layer_vel(nlayer) + else + do i=1,nlayer-1 + if ( layer_dep(i)+small_eps <= dep .and. layer_dep(i+1) > dep-small_eps ) then + vel = (dep-layer_dep(i))/(layer_dep(i+1)-layer_dep(i))*(layer_vel(i+1)-layer_vel(i))+layer_vel(i) + exit + end if + end do + end if + + do iit=1,nt + fun(iir,iit) = 1.0/vel + end do + + end do + + close(10) + deallocate(layer_dep,layer_vel) + + +end subroutine + +subroutine Read_1D_velocity_3d(filename,rr,nr,nt,np,fun) + integer :: nr,nt,np + double precision :: fun(nr,nt,np),rr(nr) + character(len=80) filename + + ! input velocity file + integer :: nlayer + double precision,allocatable :: layer_dep(:), layer_vel(:) + double precision,parameter :: Radius = 6371.0, small_eps=0.001 + + ! others + integer i,iir,iit,iip ! iterative index + double precision :: read_tmp,dep,vel ! read temp variable + + + + open(10,file=trim(filename)) + read(10,*) nlayer + allocate(layer_dep(nlayer),layer_vel(nlayer)) + + do i=1,nlayer + read(10,*) layer_dep(i),layer_vel(i) + end do + + do iir=1,nr + ! 计算 dep 处的速度 + dep = Radius - rr(iir) + if (dep < layer_dep(1)) then + vel = layer_vel(1) + elseif (dep >= layer_dep(nlayer)) then + vel = layer_vel(nlayer) + else + do i=1,nlayer-1 + if ( layer_dep(i)+small_eps <= dep .and. layer_dep(i+1) > dep-small_eps ) then + vel = (dep-layer_dep(i))/(layer_dep(i+1)-layer_dep(i))*(layer_vel(i+1)-layer_vel(i))+layer_vel(i) + exit + end if + end do + end if + + do iit=1,nt + do iip=1,np + fun(iir,iit,iip) = 1.0/vel + end do + end do + + end do + + close(10) + deallocate(layer_dep,layer_vel) + + +end subroutine + +subroutine Ray_tracing_sphe_2d(rr,tt,nr,nt,T,recr,rect,srcr,srct,time,filename) + integer :: nr,nt + double precision :: rr(nr),tt(nt),T(nr,nt) + double precision :: srcr,srct,recr,rect,time + character(len=80) :: filename + + integer :: Ntime,traceid + double precision,allocatable :: trace(:,:) + double precision :: dt,grad_r,grad_t,Tgrad_r(nr,nt),Tgrad_t(nr,nt) + double precision :: tol + + integer :: iir,iit,it ! 循环 index + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + + + dtime=0.1; + Ntime = int(time*1.5/dtime) ! 总时间 + allocate(trace(Ntime,2)) + + ! 初始化 + trace(1,1) = recr; trace(1,2) = rect; ! 起始点 + + dr = rr(2)-rr(1); dt=tt(2)-tt(1) + tol = sqrt(dr**2+(dt*srcr)**2) + + + ! 梯度场 + do iir=2,nr-1 + do iit=2,nt-1 + Tgrad_r(iir,iit) = (T(iir+1,iit) - T(iir-1,iit))/dr/2 + Tgrad_t(iir,iit) = (T(iir,iit+1) - T(iir,iit-1))/dt/2 + end do + end do + do iir=1,nr + Tgrad_t(iir,1) = (T(iir,2) - T(iir,1))/dt + Tgrad_t(iir,nt) = (T(iir,nt) - T(iir,nt-1))/dt + end do + do iit=1,nt + Tgrad_r(1,iit) = (T(2,iit) - T(1,iit))/dr + Tgrad_r(nr,iit) = (T(nr,iit) - T(nr-1,iit))/dr + end do + + traceid=-1 + + + + ! 主循环 + do it=1,Ntime-1 + + ! 该点位置 trace(it,1), trace(it,2) + if ( trace(it,1)<=rr(1) .or. trace(it,1)>=rr(nr) .or. trace(it,2)<=tt(1) .or. trace(it,2)>=tt(nt)) then + print *, 'ray out of region, stop' + exit + end if + + ! 如果当前点离震源非常近,判定收敛 + if ( (trace(it,1)-srcr)**2+(trace(it,2)-srct)**2*trace(it,1)**2 < tol**2 ) then + print *, 'ray arrive source' + trace(it+1,1) = srcr + trace(it+1,2) = srct + traceid = it+1 + exit + end if + + + ! 计算该点的梯度 + call interp2d(rr,tt,nr,nt,Tgrad_r,trace(it,1),trace(it,2),grad_r) + call interp2d(rr,tt,nr,nt,Tgrad_t,trace(it,1),trace(it,2),grad_t) + + slowness_squared = grad_r**2 + grad_t**2/trace(it,1)**2 + ! 沿负梯度走 dtime 长度 r = r- dtime*Tr/(s^2); theta = theta - dtime*Ttheta/(r^2 s^2) + trace(it+1,1) = trace(it,1) - dtime*grad_r / slowness_squared + trace(it+1,2) = trace(it,2) - dtime*grad_t / slowness_squared / ((trace(it,1)+trace(it+1,1))**2/4) + + !print *, trace(it+1,1),trace(it+1,2),xsou,ysou + + end do + + if (traceid<0) then + ! 没打到震源,存在问题 + print *, filename, 'not arrive' + open(10,file=trim(filename)//'_NotArrive') + do it=1,Ntime + write(10,*) trace(it,1),trace(it,2)*180.0/pi,dtime*(it-1) + end do + close(10) + else + ! 达到震源,输出射线路径 + open(10,file=trim(filename)) + do it=1,traceid + write(10,*) trace(it,1),trace(it,2)*180.0/pi,dtime*(it-1) + end do + close(10) + end if + + + + deallocate(trace) +end subroutine + +subroutine interp2d(xx,yy,nx,ny,val,x0,y0,v0) + integer :: nx,ny,idx0,idy0 + double precision :: xx(nx),yy(ny),val(nx,ny),x0,y0,v0,dx,dy,r1,r2 + integer :: iix,iiy + + dx=xx(2)-xx(1); dy=yy(2)-yy(1) + + + if ( x0<=xx(1) .or. x0>=xx(nx) .or. y0<=yy(1) .or. y0>=yy(ny)) then + print *, x0,xx(1),xx(nx),y0,yy(1),yy(ny) + print *, 'out of mesh' + pause + end if + + idx0 = floor((x0-xx(1))/dx)+1 + idy0 = floor((y0-yy(1))/dy)+1 + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + + v0 = (1-r1)*(1-r2)*val(idx0,idy0) + (1-r1)*r2*val(idx0,idy0+1) & + & + r1*(1-r2)*val(idx0+1,idy0) + r1*r2*val(idx0+1,idy0+1) + + +end subroutine + +subroutine load_boundary_ver2(rr,tt,pp,nr,nt,np,T,ischange,bd_fn,isbd,tele_location) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np),ischange(nr,nt,np) + double precision,parameter :: Radius = 6371.0,pi=3.14159265358979323846264338327950288 + logical :: isbd(6),isN,isS,isW,isE,isT,isB ! N S W E T B + double precision :: tele_location(3) + + ! boundary database + character(Len=80) :: bd_fn + integer :: bd_nr,bd_nt + double precision :: bd_srcr + double precision,allocatable :: bd_time(:,:),bd_r(:),bd_t(:) + double precision :: tmp_read ! useless for read + + ! boundary points + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: r1,r2,r3 ! linear interpolation + double precision :: rec,dis + integer :: id1,id2,id3 + ! otheres + integer :: i,j,k !iterative index + + ! 读取 2d eikonal 计算的到时数据 + open(10, file=bd_fn) + read(10, *) bd_srcr + if (abs(bd_srcr - tele_location(1))>0.1) then + print *, 'source depth is not consistent with the boundary data' + pause + end if + + read(10, *) bd_nr,bd_nt + + allocate(bd_time(bd_nr,bd_nt),bd_r(bd_nr),bd_t(bd_nt)) + + read(10, *) bd_r + read(10, *) bd_t + + do i=1,bd_nr + do j=1,bd_nt + read(10, *) bd_time(i,j) + end do + end do + close(10) + ! 插值边界 + + + + isN=isbd(1);isS=isbd(2) + isW=isbd(3);isE=isbd(4) + isT=isbd(5);isB=isbd(6) + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + + ! 北边界 North + if (isN) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(nt,j), + rec = rr(i) + dis = epicenter_dis(nt,j) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,nt,j)) + ischange(i,nt,j) = 0 + end do + end do + end if + + ! 南边界 South + if (isS) then + do i=1,nr + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(1,j), + rec = rr(i) + dis = epicenter_dis(1,j) + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,1,j)) + ischange(i,1,j) = 0 + end do + end do + end if + + ! 西边界 West + if (isW) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,1), + rec = rr(i) + dis = epicenter_dis(j,1) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,j,1)) + + ischange(i,j,1) = 0 + end do + end do + end if + + ! 东边界 East + if (isE) then + do i=1,nr + do j=1,nt + ! 震源位置: tele_location(1), 台站位置 Radius-rr(i),震中距:epicenter_dis(j,np), + rec = rr(i) + dis = epicenter_dis(j,np) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(i,j,np)) + + ischange(i,j,np) = 0 + end do + end do + end if + + ! 上边界 top (一般是不插值的,遂略去) + + ! 下边界 bottom + if (isB) then + do i=1,nt + do j=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-rr(1),震中距:epicenter_dis(i,j), + rec = rr(1) + dis = epicenter_dis(i,j) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,T(1,i,j)) + + ischange(1,i,j) = 0 + end do + end do + end if + + + deallocate(bd_time,bd_r,bd_t) + +end subroutine + +subroutine tele_error_estimation_ver3(rr,tt,pp,nr,nt,np,T,bd_fn,tele_location,dep,error) + integer :: nr,nt,np + double precision :: T(nr,nt,np),rr(nr),tt(nt),pp(np) + double precision :: error(nt,np,3),dep,tele_location(3) + double precision,parameter :: Radius = 6371.0 + double precision,parameter :: pi=3.14159265358979323846264338327950288 + + ! boundary database + character(Len=80) :: bd_fn + integer :: bd_nr,bd_nt + double precision :: bd_srcr + double precision,allocatable :: bd_time(:,:),bd_r(:),bd_t(:) + double precision :: tmp_read ! useless for read + + + double precision :: epicenter_dis(nt,np),lat1,lon1,lat2,lon2 + double precision :: src,rec,dis,traveltime + double precision :: L1_err, Linf_err + + + + ! 边界的index + integer :: ni,nj + double precision :: x1,x2,y1,y2,r1 + integer :: i,j,k,idx0,iit,iip + double precision :: read_tmp + + dr = rr(2)-rr(1) + + + ! 读取 2d eikonal 计算的到时数据 + open(10, file=bd_fn) + read(10, *) bd_srcr + if (abs(bd_srcr - tele_location(1))>0.1) then + print *, 'source depth is not consistent with the boundary data' + pause + end if + + read(10, *) bd_nr,bd_nt + + allocate(bd_time(bd_nr,bd_nt),bd_r(bd_nr),bd_t(bd_nt)) + + read(10, *) bd_r + read(10, *) bd_t + + do i=1,bd_nr + do j=1,bd_nt + read(10, *) bd_time(i,j) + end do + end do + close(10) + + + ! 统一计算震中距 + do i=1,nt + do j=1,np + lat1 = tt(i); lon1 = pp(j) + lat2 = tele_location(2); lon2 = tele_location(3); + epicenter_dis(i,j)=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))/pi*180 + end do + end do + + ! 指定深度 计算 走时 + idx0 = floor(((Radius-dep) -rr(1))/dr)+1 + r1 = min(1.0,((Radius-dep)-rr(idx0))/dr ) + L1_err=0; Linf_err=0 + + do iit=1,nt + do iip=1,np + ! 震源位置: tele_location(1), 台站位置 Radius-dep,震中距:epicenter_dis(iit,iip), + rec = Radius-dep + dis = epicenter_dis(iit,iip) + + call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,rec,dis,traveltime) + + error(iit,iip,1) = traveltime + error(iit,iip,2) = (1-r1)*T(idx0,iit,iip)+r1*T(idx0+1,iit,iip) + error(iit,iip,3) = error(iit,iip,1) - error(iit,iip,2) + L1_err = L1_err + abs(error(iit,iip,3)) + Linf_err = max(Linf_err, abs(error(iit,iip,3))) + end do + end do + L1_err = L1_err/(nt*np) + + ! dep = 6071.0 + ! do iit=1,10 + ! call interp2d(bd_r,bd_t,bd_nr,bd_nt,bd_time,dep+iit,epicenter_dis(3,3),traveltime) + ! print *, dep+iit,traveltime + ! end do + + ! 释放动态数组 + deallocate(bd_time,bd_r,bd_t) + + write(*,'(a,f5.1,a,es10.3,a,es10.3,a)') 'L1 and Linf errors at depth ', dep, 'km are ', L1_err, ' s and ', Linf_err,' s.' + + + + +end subroutine +! ----------------------- end for ega3 ---------------------- + +! ----------------------- for ega4 ---------------------- +subroutine eikonal_boundary_traveltime(rr,tt,pp,nr,nt,np,r0,t0,p0,velo_1d_fn,TTfield_path,isbd,bd_N,bd_S,bd_W,bd_E,bd_B,bd_T) + ! input parameter + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np) + double precision :: r0,t0,p0 + character(len=80) :: velo_1d_fn,TTfield_path + + ! output parameter + double precision :: bd_N(nr,np),bd_S(nr,np),bd_W(nr,nt),bd_E(nr,nt),bd_B(nt,np),bd_T(nt,np) + logical :: isbd(5) + + ! + double precision :: degree(4),azimuthal(4) + double precision :: maxdegree + double precision :: epicenter_dis(nt,np) ! epicenter distance from tele source to study region + + ! mesh for 2d eikonal + integer :: nr_2d,nt_2d + double precision :: rr1_2d,rr2_2d,tt1_2d,tt2_2d,dr_2d,dt_2d,r0_2d,t0_2d + double precision,allocatable :: rr_2d(:),tt_2d(:),spha_2d(:,:),sphb_2d(:,:) + double precision,allocatable :: fun_2d(:,:),u_2d(:,:),T_2d(:,:) + character(len=80) :: filename,form1,form2 + logical :: isfile,iscal + integer :: file_nr_2d,file_nt_2d + double precision,allocatable :: file_rr_2d(:),file_tt_2d(:) + + + ! others + double precision,parameter :: pi=3.14159265358979323846264338327950288 + double precision,parameter :: Earth_Radius = 6371.0 + double precision,parameter :: tol=0.001 + integer :: iir,iit,iip,iter ! iteration index + + + ! ---------- 首先,确定二维程函方程的计算范围 first, determine the region for 2d eikonal -------------------- + + ! calculate the degree and azimuthal from the tele-source to the region + ! S-W + call Epicenter_Distance_sphere(tt(1),pp(1),t0,p0,degree(1)) + call Azimuthal_sphere(tt(1),pp(1),t0,p0,azimuthal(1)) + ! S-E + call Epicenter_Distance_sphere(tt(1),pp(np),t0,p0,degree(2)) + call Azimuthal_sphere(tt(1),pp(np),t0,p0,azimuthal(2)) + ! N-W + call Epicenter_Distance_sphere(tt(nt),pp(1),t0,p0,degree(3)) + call Azimuthal_sphere(tt(nt),pp(1),t0,p0,azimuthal(3)) + ! N-E + call Epicenter_Distance_sphere(tt(nt),pp(np),t0,p0,degree(4)) + call Azimuthal_sphere(tt(nt),pp(np),t0,p0,azimuthal(4)) + + ! print *, 'source (lat,lon) = ', t0*180/pi, ' ', p0*180/pi + ! print *, 'degree is ', degree*180/pi + ! print *, 'azimuthal is ', azimuthal*180/pi + + ! ---------- 然后,根据震中距和方位角,确定计算哪些边界,只有4种情况,出现其他情况,请报错 ------------ + ! ---------- determine to activate which boundaries. Only 4 cases, otherwise print error ------------ + maxdegree = max(degree(1),degree(2),degree(3),degree(4)) + if (maxdegree== degree(1)) then + ! N + E + isbd = [ .true. , .false. , .false. , .true. , .true. ] ! isbd: N,S,W,E,B + else if (maxdegree == degree(2)) then + ! N + W + isbd = [ .true. , .false. , .true. , .false. , .true. ] + else if (maxdegree == degree(3)) then + ! S + E + isbd = [ .false. , .true. , .false. , .true. , .true. ] + else if (maxdegree == degree(4)) then + ! S + W + isbd = [ .false. , .true. , .true. , .false. , .true. ] + end if + + ! ---------- if source is on the west or ease direction, N and S boundaries are deactivated + if (t0 > tt(1) .and. t0 < tt(nt)) then + isbd(1) = .false. + isbd(2) = .false. + end if + ! ---------- if source is on the north or south direction, west and east boundaries are deactivated + if (p0 > pp(1) .and. p0 < pp(np)) then + isbd(3) = .false. + isbd(4) = .false. + end if + + + ! ---------- 生成二维网格 ---------------------- + ! ---------- generate 2d mesh ---------------------- + dr_2d = 2.0; dt_2d = pi/1000; + rr1_2d = Earth_Radius-3000; rr2_2d = Earth_Radius+100; + tt1_2d = -10.0/180.0*pi; tt2_2d = 100.0/180.0*pi; + nr_2d = floor((rr2_2d-rr1_2d)/dr_2d)+1; + nt_2d = floor((tt2_2d-tt1_2d)/dt_2d)+1; + + allocate(rr_2d(nr_2d),tt_2d(nt_2d)) + + do iir=1,nr_2d + rr_2d(iir)=rr1_2d+(iir-1)*dr_2d + end do + do iit=1,nt_2d + tt_2d(iit)=tt1_2d+(iit-1)*dt_2d + end do + + + + ! ----------- 读取一维速度文件,产生速度场 ----------------------- + ! ----------- read the 1d velocity file ----------------------- + allocate(fun_2d(nr_2d,nt_2d),spha_2d(nr_2d,nt_2d),sphb_2d(nr_2d,nt_2d),u_2d(nr_2d,nt_2d),T_2d(nr_2d,nt_2d)) + + call Read_1D_velocity_2d(velo_1d_fn,rr_2d,nr_2d,nt_2d,fun_2d) + do iir=1,nr_2d + do iit=1,nt_2d + spha_2d(iir,iit)=1.0; + sphb_2d(iir,iit)=1.0; + u_2d(iir,iit) = 0.0 + T_2d(iir,iit) = 0.0 + end do + end do + ! --------- 速度场文件输出 output 2d velocity file ------------- + filename=trim(TTfield_path)//'/model2d' + inquire(file=filename, exist=isfile) + if (.not. isfile) then + open(10,file=filename) + write(10,*) nr_2d,' ',nt_2d + write(10,*) rr_2d + write(10,*) tt_2d + do iir =1,nr_2d + do iit =1,nt_2d + write(10,*) 1.0/fun_2d(iir,iit) + end do + print *, Earth_Radius - rr_2d(iir), 1.0/fun_2d(iir,1) + end do + close(10) + end if + + ! ----------- 核心,计算对应远震产生的二维走时场 ------------------- + ! ----------- calculate the 2d traveltime field ----------------- + r0_2d = r0; t0_2d = 0.0 + write(*,'(a)') & + & 'calculating 2d traveltime field, region: ' + write(*,'(a, f7.2,a,f7.2,a)') & + & 'Depth: ', Earth_Radius-rr2_2d, ' km - ' ,Earth_Radius-rr1_2d, ' km' + write(*,'(a, f7.2,a,f7.2)') & + & 'Epicenter dis: ', tt1_2d*180.0/pi, ' - ' ,tt2_2d*180.0/pi + write(*,'(a,f7.2,f7.2,i5,i5)') & + & '(dr,dt,nr,nt) = ', dr_2d,dt_2d*180.0/pi,nr_2d,nt_2d + + ! determine the 2d time file name + write(form1,'(i4)') floor(r0) + write(form2,'(i3)') int((r0-floor(r0))*1000) + filename=trim(TTfield_path)//'/traveltime2d_'//trim(form1)//'_'//trim(form2) + + + ! load or calculate the traveltime + inquire(file=filename, exist=isfile) + if (isfile) then + ! if the traveltime file exist, just read it + write(*,'(a,a)') 'file exist, loading ... :', filename + open(10,file=filename) + read(10,*) file_nr_2d,file_nt_2d + allocate(file_rr_2d(file_nr_2d),file_tt_2d(file_nt_2d)) + read(10,*) file_rr_2d + read(10,*) file_tt_2d + if (file_nr_2d == nr_2d .and. file_nt_2d == nt_2d .and. & + & abs(file_rr_2d(1)-rr_2d(1)) old_L1_dif) then + stop_count = stop_count+1 + end if + old_L1_dif = L1_dif + L1_dif=0; Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr <-> 1, y: nt <-> 1, z: np <-> 1 + + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + + if(ischange(iir,iit,iip)==1) then + if( iir>1 .and. iir1 .and. iit1 .and. iip= 5) then + write(*,*) 'iter ',iter,', T is oscillating' + exit + else + ! write(*,*) 'iter ',iter,', T is changing, L1 dif = ', L1_dif,'L inf dif = ', Linf_dif + end if + + if (iter==MaxIter) then + write(*,*) 'iter ',iter,', max iteration steps' + end if + + end do + +end subroutine + +subroutine FSM_O1_Adj_tele_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ,isbd) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + logical :: isbd(5) + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + + + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-0.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+0.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-0.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+0.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-0.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+0.5)*pdirec),-pdirec + + if (iir == 1) then + ! bottom boundary + if (isbd(5)) then + if (TableADJ(3,iit,iip)>=0) then + TableADJ(1,iit,iip) = max(0.0,2*TableADJ(2,iit,iip)-TableADJ(3,iit,iip)) + else + TableADJ(1,iit,iip) = min(0.0,2*TableADJ(2,iit,iip)-TableADJ(3,iit,iip)) + end if + else + TableADJ(1,iit,iip) = 0.0 + end if + + elseif (iir == nr) then + ! Top boundary + TableADJ(nr,iit,iip) = 0.0 + + elseif (iit == 1) then + ! south boundary + if (isbd(2)) then + if (TableADJ(iir,3,iip)>=0) then + TableADJ(iir,1,iip) = max(0.0,2*TableADJ(iir,2,iip)-TableADJ(iir,3,iip)) + else + TableADJ(iir,1,iip) = min(0.0,2*TableADJ(iir,2,iip)-TableADJ(iir,3,iip)) + end if + else + TableADJ(iir,1,iip) = 0.0 + end if + + elseif (iit == nt) then + ! north boundary + if (isbd(1)) then + if (TableADJ(iir,nt-2,iip)>=0) then + TableADJ(iir,nt,iip) = max(0.0,2*TableADJ(iir,nt-1,iip)-TableADJ(iir,nt-2,iip)) + else + TableADJ(iir,nt,iip) = min(0.0,2*TableADJ(iir,nt-1,iip)-TableADJ(iir,nt-2,iip)) + end if + else + TableADJ(iir,nt,iip) = 0.0 + end if + + elseif (iip == 1) then + ! west boundary + if (isbd(3)) then + if (TableADJ(iir,iit,3)>=0) then + TableADJ(iir,iit,1) = max(0.0,2*TableADJ(iir,iit,2)-TableADJ(iir,iit,3)) + else + TableADJ(iir,iit,1) = min(0.0,2*TableADJ(iir,iit,2)-TableADJ(iir,iit,3)) + end if + else + TableADJ(iir,iit,1) = 0.0 + end if + elseif (iip == np) then + ! east boundary + if (isbd(4)) then + if (TableADJ(iir,iit,np-2)>=0) then + TableADJ(iir,iit,np) = max(0.0,2*TableADJ(iir,iit,np-1)-TableADJ(iir,iit,np-2)) + else + TableADJ(iir,iit,np) = min(0.0,2*TableADJ(iir,iit,np-1)-TableADJ(iir,iit,np-2)) + end if + else + TableADJ(iir,iit,np) = 0.0 + end if + else + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr = 1.0*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 1.0*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 1.0*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1.0-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1.0-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1.0-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1.0-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + if (isnan(Htau)) then + print *, iir,iit,iip + print *, a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 + print *, b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 + print *, c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 + pause + end if + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + end if + + + end do + end do + end do + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-2)*(nt-2)*(np-2)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (abs(L1_dif) invr(igrid,ii_invr) .and. rr(iir)<=invr(igrid,ii_invr+1)) then + idr = ii_invr + r1 = (rr(iir) - invr(igrid,idr)) / (invr(igrid,idr+1) - invr(igrid,idr)) ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + exit + end if + end do + if (r1 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + + do iit=1,nt + + r2 = -1 + do ii_invt = 1,ninvt-1 + if (tt(iit)> invt(igrid,ii_invt) .and. tt(iit)<=invt(igrid,ii_invt+1)) then + idt = ii_invt + r2 = (tt(iit) - invt(igrid,idt)) / (invt(igrid,idt+1) - invt(igrid,idt)) ! r2=0 -> t=invt(idt); r2=1 -> t=invt(idt+1) + exit + end if + end do + if (r2 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if t is out of inversion grid invt, turn to next point + end if + + do iip=1,np + r3 = -1 + do ii_invp = 1,ninvp-1 + if (pp(iip)> invp(igrid,ii_invp) .and. pp(iip)<=invp(igrid,ii_invp+1)) then + idp = ii_invp + r3 = (pp(iip) - invp(igrid,idp)) / (invp(igrid,idp+1) - invp(igrid,idp)) ! r3=0 -> p=invp(idp); r3=1 -> p=invp(idp+1) + exit + end if + end do + if (r3 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if p is out of inversion grid invp, turn to next point + end if + + do iik=1,nk + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + r1 = -1 + do ii_invr = 1,ninvr-1 + if (rr(iir)> invr(igrid,ii_invr) .and. rr(iir)<=invr(igrid,ii_invr+1)) then + idr = ii_invr + r1 = (rr(iir) - invr(igrid,idr)) / (invr(igrid,idr+1) - invr(igrid,idr)) ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + exit + end if + end do + if (r1 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + + do iit=1,nt + r2 = -1 + do ii_invt = 1,ninvt-1 + if (tt(iit)> invt(igrid,ii_invt) .and. tt(iit)<=invt(igrid,ii_invt+1)) then + idt = ii_invt + r2 = (tt(iit) - invt(igrid,idt)) / (invt(igrid,idt+1) - invt(igrid,idt)) ! r2=0 -> t=invt(idt); r2=1 -> t=invt(idt+1) + exit + end if + end do + if (r2 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if t is out of inversion grid invt, turn to next point + end if + + do iip=1,np + r3 = -1 + do ii_invp = 1,ninvp-1 + if (pp(iip)> invp(igrid,ii_invp) .and. pp(iip)<=invp(igrid,ii_invp+1)) then + idp = ii_invp + r3 = (pp(iip) - invp(igrid,idp)) / (invp(igrid,idp+1) - invp(igrid,idp)) ! r3=0 -> p=invp(idp); r3=1 -> p=invp(idp+1) + exit + end if + end do + if (r3 < 0) then + cycle ! 如果与反演网格点无关,考察下一个点 if p is out of inversion grid invp, turn to next point + end if + + + do iik=1,nk + pert = 0.0 + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +! ----------------------- end for ega4 ---------------------- + +! 并行版本 +subroutine FSM_WENO3_PS_sphe_3d_mul_mpi(rr,tt,pp,nr,nt,np,spha,sphb,sphc,sphf,T,fun,r0,t0,p0,u) + + use mpi + ! a -d -e + ! -d b -f + ! -e -f c + integer nr,nt,np + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np),a(nr,nt,np),b(nr,nt,np),c(nr,nt,np),f(nr,nt,np) + double precision :: spha(nr,nt,np),sphb(nr,nt,np),sphc(nr,nt,np),sphf(nr,nt,np) + double precision :: fun(nr,nt,np),T(nr,nt,np),ischange(nr,nt,np),u(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: r1,r2,r3,a0,b0,c0,d0,f0,T0v(nr,nt,np),T0r(nr,nt,np),T0t(nr,nt,np),T0p(nr,nt,np) + double precision :: tau(nr,nt,np),tau_old(nr,nt,np),r0,t0,p0 + integer :: idr0,idt0,idp0 + double precision :: sigr,sigt,sigp,coe,pr1,pr2,wr1,wr2,pt1,pt2,wt1,wt2,pp1,pp2,wp1,wp2,tpT + double precision :: L1_dif,Linf_dif,L1_err,Linf_err + double precision :: t1,p1 + double precision,parameter :: tol = (10.0)**(-5),eps=10.0**(-12) + integer,parameter :: MaxIter=1000 + integer iter,rdirec,tdirec,pdirec,iir,iit,iip + double precision :: x0,y0,z0,x,y,z,xst,yst,zst,e11,e12,e13,e21,e22,e23,e31,e32,e33 + double precision :: xstr,xstt,xstp,ystr,ystt,ystp,zstr,zstt,zstp + integer :: ileft,iright,jleft,jright,ii,jj,kk + logical :: isexit + + integer :: ierr,myid,nproc,tag,istat(mpi_status_size),iproc,ptid(nr,np,nt) + integer :: mpi_ptijk(3,np*nt),mpi_ptn,ipt,int_temp,my_npt + double precision :: mpi_ptv(np*nt),dp_temp + + integer :: ptr1,ptr2,iNumber,total_ptn,Nptn,sNptn,tpNptn + double precision :: ave_ni + integer,allocatable :: proc_irange(:,:,:) + + + isexit = .false. + tag=99 + call mpi_comm_rank(mpi_comm_world,myid,ierr) + call mpi_comm_size(mpi_comm_world,nproc,ierr) + + + ! ------------------------ 构造网格 ------------------------ + dr=rr(2)-rr(1); dt=tt(2)-tt(1); dp=pp(2)-pp(1) + + ! ------------------------ 构造矩阵 ------------------------- + ! a -d -e + ! -d b -f + ! -e -f c + + ! ------------------------ 构造 T0 ------------------------ + + ! 震源处参数离散化 + idr0=floor((r0-rr(1))/dr+1); idt0=floor((t0-tt(1))/dt+1); idp0=floor((p0-pp(1))/dp+1); + r1 = min(1.0,(r0-rr(idr0))/dr); r2 = min(1.0,(t0-tt(idt0))/dt); r3 = min(1.0,(p0-pp(idp0))/dp); + + do iir=1,nr + do iit=1,nt + do iip=1,np + a(iir,iit,iip) = spha(iir,iit,iip) + b(iir,iit,iip) = sphb(iir,iit,iip)/(rr(iir)**2) + c(iir,iit,iip) = sphc(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))**2) + f(iir,iit,iip) = sphf(iir,iit,iip)/(rr(iir)**2*cos(tt(iit))) + end do + end do + end do + + a0=(1-r1)*(1-r2)*(1-r3)*a(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*a(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*a(idr0,idt0+1,idp0)+(1-r1)*r2*r3*a(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*a(idr0+1,idt0,idp0)+r1*(1-r2)*r3*a(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*a(idr0+1,idt0+1,idp0)+r1*r2*r3*a(idr0+1,idt0+1,idp0+1) + + b0=(1-r1)*(1-r2)*(1-r3)*b(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*b(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*b(idr0,idt0+1,idp0)+(1-r1)*r2*r3*b(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*b(idr0+1,idt0,idp0)+r1*(1-r2)*r3*b(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*b(idr0+1,idt0+1,idp0)+r1*r2*r3*b(idr0+1,idt0+1,idp0+1) + + c0=(1-r1)*(1-r2)*(1-r3)*c(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*c(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*c(idr0,idt0+1,idp0)+(1-r1)*r2*r3*c(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*c(idr0+1,idt0,idp0)+r1*(1-r2)*r3*c(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*c(idr0+1,idt0+1,idp0)+r1*r2*r3*c(idr0+1,idt0+1,idp0+1) + + f0=(1-r1)*(1-r2)*(1-r3)*f(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*f(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*f(idr0,idt0+1,idp0)+(1-r1)*r2*r3*f(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*f(idr0+1,idt0,idp0)+r1*(1-r2)*r3*f(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*f(idr0+1,idt0+1,idp0)+r1*r2*r3*f(idr0+1,idt0+1,idp0+1) + !d0=-d0 + + fun0=(1-r1)*(1-r2)*(1-r3)*fun(idr0,idt0,idp0)+(1-r1)*(1-r2)*r3*fun(idr0,idt0,idp0+1) & + & +(1-r1)*r2*(1-r3)*fun(idr0,idt0+1,idp0)+(1-r1)*r2*r3*fun(idr0,idt0+1,idp0+1) & + & +r1*(1-r2)*(1-r3)*fun(idr0+1,idt0,idp0)+r1*(1-r2)*r3*fun(idr0+1,idt0,idp0+1) & + & +r1*r2*(1-r3)*fun(idr0+1,idt0+1,idp0)+r1*r2*r3*fun(idr0+1,idt0+1,idp0+1) + + + + ! 构造T0 + do iir=1,nr + do iit=1,nt + do iip=1,np + r1 = rr(iir) + t1 = tt(iit) + p1 = pp(iip) + + T0v(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + ischange(iir,iit,iip)=1 + if ( T0v(iir,iit,iip)==0 ) then + T0r(iir,iit,iip) = 0 + T0t(iir,iit,iip) = 0 + T0p(iir,iit,iip) = 0 + else + T0r(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v(iir,iit,iip) + T0t(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v(iir,iit,iip) + T0p(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v(iir,iit,iip) + end if + + + if ( abs((rr(iir)-r0)/dr)<=2 .and. abs((tt(iit)-t0)/dt)<=2 .and. abs((pp(iip)-p0)/dp)<= 2) then + tau(iir,iit,iip) = 1 !震源周围几个点,直接认为是常速度结构,给出解析解,即和T0相等 + !tau(iir,iit,iip) = u(iir,iit,iip) - T0v(iir,iit,iip) + ischange(iir,iit,iip)=0 + if (iir==1 .or. iir==nr .or. iit==1 .or. iit==nt .or. iip==1 .or. iip==np) then + write(*,*) 'source on the boundary, mesh error' + print *, rr(iir),iir,t0*180/3.1415927,iit,p0*180/3.1415927,iip + ! pause + end if + !write(*,*) iir-idr0,iit-idt0,iip-idp0,u(iir,iit,iip),T0v(iir,iit,iip),u(iir,iit,iip)-T0v(iir,iit,iip) + else + !tau(iir,iit,iip) = T(iir,iit,iip)/T0v(iir,iit,iip) + tau(iir,iit,iip) = 1 + ischange(iir,iit,iip)=1 + end if + end do + end do + end do + + L1_err=0; Linf_err=0 + do iir=1,nr + do iit=1,nt + do iip=1,np + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)-u(iir,iit,iip))) + if(isnan(L1_err)) then + print *, u(iir,iit,iip),T0v(iir,iit,iip) + pause + end if + end do + end do + end do + L1_err = L1_err/(nr*np*nt) + print *, L1_err + + + allocate(proc_irange(2,nproc,nr+nt+np-3-6+1)) + + ! 给每个线程分配计算点 + Nptn=0 + sNptn=0 + + do level = 6,nr+nt+np-3 + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + iNumber = iright - ileft + 1 + + total_ptn = 0 + do ip = ileft,iright + total_ptn = total_ptn+(min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + end do + Nptn = Nptn + total_ptn ! 总点数 + ave_ni = total_ptn*1.0/nproc + + if (iNumber <= nproc) then + ! 即i的数量小于等于线程数,每个线程分配一个i就好 + tpNptn = 0 + MaxtpNptn = 0 + do ip = ileft,iright + proc_irange(:,ip-ileft+1,level-5)=(/ip,ip/) + tpNptn = (min(level-ip-2,nt-1)-max(2,level-ip-np+1)+1) + MaxtpNptn = max(MaxtpNptn,tpNptn) + end do + do ip = iright+1,ileft+nproc-1 + proc_irange(:,ip-ileft+1,level-5)=(/-1,-2/) + end do + sNptn = sNptn + MaxtpNptn + else + !if (myid .eq. 0) then + ! print *, ileft,iright + !end if + !call sleep(2) + + ! i的数量大于线程数,平均分配,接近 total_ptn/nproc + int_temp = 0 + tpNptn = 0 + MaxtpNptn = 0 + ptr1 = ileft + iproc = 1 + do ptr2 = ileft,iright + int_temp = int_temp + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + tpNptn = tpNptn + (min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1) + !if (myid .eq. 0) then + ! print *, ptr2,(min(level-ptr2-2,nt-1)-max(2,level-ptr2-np+1)+1),int_temp,ave_ni + !end if + !call sleep(2) + if ((int_temp>=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 1.0*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 1.0*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 1.0*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 3阶 WENO 格式 + + if (iir==2) then + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + wr2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + elseif (iir==nr-1) then + wr1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + else + wr1=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))**2)/ & + & (eps+(tau(iir+1,iit,iip)-2*tau(iir,iit,iip)+tau(iir-1,iit,iip))**2))**2) + pr1=(1.0-wr1)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr1*(3*tau(iir,iit,iip)-4*tau(iir-1,iit,iip)+tau(iir-2,iit,iip))/2/dr; + wr2=1.0/(1.0+2*((eps+(tau(iir,iit,iip)-2*tau(iir+1,iit,iip)+tau(iir+2,iit,iip))**2)/ & + & (eps+(tau(iir-1,iit,iip)-2*tau(iir,iit,iip)+tau(iir+1,iit,iip))**2))**2) + pr2=(1.0-wr2)*(tau(iir+1,iit,iip)-tau(iir-1,iit,iip))/2/dr+ & + & wr2*(-3*tau(iir,iit,iip)+4*tau(iir+1,iit,iip)-tau(iir+2,iit,iip))/2/dr; + end if + + if (iit==2) then + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + elseif (iit==nt-1) then + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + else + wt1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))**2)/ & + & (eps+(tau(iir,iit+1,iip)-2*tau(iir,iit,iip)+tau(iir,iit-1,iip))**2))**2) + pt1=(1-wt1)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt1*(3*tau(iir,iit,iip)-4*tau(iir,iit-1,iip)+tau(iir,iit-2,iip))/2/dt; + wt2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit+1,iip)+tau(iir,iit+2,iip))**2)/ & + & (eps+(tau(iir,iit-1,iip)-2*tau(iir,iit,iip)+tau(iir,iit+1,iip))**2))**2) + pt2=(1-wt2)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/2/dt+ & + & wt2*(-3*tau(iir,iit,iip)+4*tau(iir,iit+1,iip)-tau(iir,iit+2,iip))/2/dt; + end if + + if (iip==2) then + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + elseif (iip==np-1) then + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + else + wp1=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))**2)/ & + & (eps+(tau(iir,iit,iip+1)-2*tau(iir,iit,iip)+tau(iir,iit,iip-1))**2))**2) + pp1=(1-wp1)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp1*(3*tau(iir,iit,iip)-4*tau(iir,iit,iip-1)+tau(iir,iit,iip-2))/2/dp; + wp2=1.0/(1+2*((eps+(tau(iir,iit,iip)-2*tau(iir,iit,iip+1)+tau(iir,iit,iip+2))**2)/ & + & (eps+(tau(iir,iit,iip-1)-2*tau(iir,iit,iip)+tau(iir,iit,iip+1))**2))**2) + pp2=(1-wp2)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/2/dp+ & + & wp2*(-3*tau(iir,iit,iip)+4*tau(iir,iit,iip+1)-tau(iir,iit,iip+2))/2/dp; + end if + + !计算 LF Hamiltonian + + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=1,nr + do iip=1,np + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=1,nr + do iit=1,nt + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + !if (iproc>nproc) then + ! print *, iproc,nproc + !end if + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + !call sleep(2) + end if + !if (myid .eq. 0) then + ! print *, proc_irange(1,:,level-5) + ! print *, proc_irange(2,:,level-5) + ! print *, ' ' + !end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = 2*sqrt(a(iir,iit,iip))*T0v(iir,iit,iip) + sigt = 2*sqrt(b(iir,iit,iip))*T0v(iir,iit,iip) + sigp = 2*sqrt(c(iir,iit,iip))*T0v(iir,iit,iip) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! 构造单方向梯度 1 阶格式 + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + ! additive + !Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + !& + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 & + !& + a(iir,iit,iip)*(pr1+pr2)*T0r(iir,iit,iip) & + !& + b(iir,iit,iip)*(pt1+pt2)*T0t(iir,iit,iip) - f(iir,iit,iip)*(pt1+pt2)*T0p(iir,iit,iip) & + !& + c(iir,iit,iip)*(pp1+pp2)*T0p(iir,iit,iip) - f(iir,iit,iip)*(pp1+pp2)*T0t(iir,iit,iip) & + !& + a(iir,iit,iip)*T0r(iir,iit,iip)**2 & + !& + b(iir,iit,iip)*T0t(iir,iit,iip)**2 + c(iir,iit,iip)*T0p(iir,iit,iip)**2 & + !& - 2*f(iir,iit,iip)*T0t(iir,iit,iip)*T0p(iir,iit,iip) ) + + ! multiplicative + Htau = sqrt( & + & a(iir,iit,iip)*(T0r(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pr1+pr2)/2)**2 & + & + b(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2)**2 & + &-2*f(iir,iit,iip)*(T0t(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pt1+pt2)/2) & + & *(T0p(iir,iit,iip)*tau(iir,iit,iip)+T0v(iir,iit,iip)*(pp1+pp2)/2) ) + + + ! 更新 timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))*T0v(iir,iit,iip)) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-T0v(iir,iit,iip)*tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(T0v(iir,iit,iip)*tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)=ave_ni*iproc) .or. (ptr2 .eq.iright)) then + + proc_irange(:,iproc,level-5) = (/ptr1,ptr2/) + ptr1 = ptr2+1 + iproc = iproc +1 + MaxtpNptn = max(MaxtpNptn,tpNptn) + tpNptn = 0 + end if + end do + sNptn = sNptn + MaxtpNptn + end if + end do + + ! print *, Nptn*1.0/sNptn + + + ! 正式迭代,更新tau + do iter =1,MaxIter + tau_old = tau + L1_dif=0; Linf_dif=0;L1_err=0;Linf_err=0; + + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + my_npt = 0 + do level = 6,nr+nt+np-3 + ! 2<= ir <= nr-1; 2<= it <= nr-1; 2<=ip <=np-1 + + ileft = max(2,level-np-nt+2) + iright = min(level-4,nr-1) + + mpi_ptn=0 + do ii = proc_irange(1,myid+1,level-5),proc_irange(2,myid+1,level-5) + + jleft = max(2,level-ii-np+1) + jright = min(level-ii-2,nt-1) + do jj = jleft,jright + + kk = level-ii-jj + + if(rdirec<0) then + iir=ii + else + iir=nr+1-ii + end if + if(tdirec<0) then + iit=jj + else + iit=nt+1-jj + end if + if(pdirec<0) then + iip=kk + else + iip=np+1-kk + end if + + + if(ischange(iir,iit,iip)==1) then + + + !sigr=2*sqrt(a(iir,iit,iip)); sigt=2*sqrt(b(iir,iit,iip)); sigp=2*sqrt(c(iir,iit,iip)) + !coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + sigr = sqrt(a(iir,iit,iip)) + sigt = sqrt(b(iir,iit,iip)) + sigp = sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! partial derivatives + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + !计算 LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + tau(iir,iit,iip) = tpT + + + mpi_ptn=mpi_ptn+1 + mpi_ptijk(:,mpi_ptn) = (/iir,iit,iip/) + mpi_ptv(mpi_ptn) = tpT + my_npt = my_npt + 1 + end if + end do + end do + + !if (1>2) then + ! 数据通信 步骤1, 其他线程传输给主线程 + if (myid .eq. 0) then + ! 负责接受数据 + do iproc=1,nproc-1 + call mpi_recv(int_temp,1,mpi_integer,iproc,tag,mpi_comm_world,istat,ierr) + if (int_temp .ne. 0) then + call mpi_recv(mpi_ptijk(1,mpi_ptn+1),int_temp*3,mpi_integer,iproc,tag+1, & + & mpi_comm_world,istat,ierr) + call mpi_recv(mpi_ptv(mpi_ptn+1),int_temp,mpi_double_precision,iproc,tag+2, & + & mpi_comm_world,istat,ierr) + ! 接收完数据,赋值 + do ipt=mpi_ptn+1,mpi_ptn+int_temp + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + mpi_ptn = mpi_ptn + int_temp + end if + end do + else + ! 负责发送数据 + call mpi_send(mpi_ptn,1,mpi_integer,0,tag,mpi_comm_world,ierr) + !print *, mpi_ptn, mpi_ptijk(:,1:mpi_ptn), mpi_ptv(1:mpi_ptn) + if (mpi_ptn .ne. 0) then + call mpi_send(mpi_ptijk,3*mpi_ptn,mpi_integer,0,tag+1,mpi_comm_world,ierr) + call mpi_send(mpi_ptv,mpi_ptn,mpi_double_precision,0,tag+2,mpi_comm_world,ierr) + end if + end if + + ! 数据通信 步骤2, 主线程将更新后的level数据广播到其他线程 + + call mpi_bcast(mpi_ptn,1,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptijk,3*mpi_ptn,mpi_integer,0,mpi_comm_world,ierr) + call mpi_bcast(mpi_ptv,mpi_ptn,mpi_double_precision,0,mpi_comm_world,ierr) + + ! 数据广播完成,开始赋值 + if (myid .ne. 0) then + do ipt=1,mpi_ptn + tau(mpi_ptijk(1,ipt),mpi_ptijk(2,ipt),mpi_ptijk(3,ipt)) = mpi_ptv(ipt) + end do + end if + + call mpi_barrier(mpi_comm_world,ierr) + !end if + end do + + ! print *, my_npt, Nptn + + ! 处理边界 + + do iit=2,nt-1 + do iip=2,np-1 + if (tau(3,iit,iip)>0) then + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + else + tau(1,iit,iip) = min(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + end if + if (tau(nr-2,iit,iip)>0) then + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + else + tau(nr,iit,iip) = min(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end if + end do + end do + do iir=2,nr-1 + do iip=2,np-1 + if (tau(iir,3,iip)>0) then + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + else + tau(iir,1,iip) = min(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + end if + if (tau(iir,nt-2,iip)>0) then + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + else + tau(iir,nt,iip) = min(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end if + end do + end do + do iir=2,nr-1 + do iit=2,nt-1 + if (tau(iir,iit,3)>0) then + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + else + tau(iir,iit,1) = min(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + end if + if (tau(iir,iit,np-2)>0) then + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + else + tau(iir,iit,np) = min(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end if + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif) 2, y: nt-1 <-> 2, z: np-1 <-> 2 + + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + if(ischange(iir,iit,iip)==1) then + sigr=sqrt(a(iir,iit,iip)); sigt=sqrt(b(iir,iit,iip)); sigp=sqrt(c(iir,iit,iip)) + coe=1.0/((sigr/dr)+(sigt/dt)+(sigp/dp)) + + ! forward and backward partial derivatives + + + pr1=(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr; + pr2=(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr; + + pt1=(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt; + pt2=(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt; + + pp1=(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp; + pp2=(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp; + + + ! calculate LF Hamiltonian + + Htau=sqrt( a(iir,iit,iip)*((pr1+pr2)/2)**2 + b(iir,iit,iip)*((pt1+pt2)/2)**2 & + & + c(iir,iit,iip)*((pp1+pp2)/2)**2 -2*f(iir,iit,iip)*(pt1+pt2)/2*(pp1+pp2)/2 ) + + ! 更新 update timetable + tpT=coe*(fun(iir,iit,iip)-Htau) & + & +coe*(sigr*(pr2-pr1)/2+sigt*(pt2-pt1)/2+sigp*(pp2-pp1)/2)+tau(iir,iit,iip); + + !write(*,*) fun(iir,iit,iip),Htau + + if (tpT < tau(iir,iit,iip)) then + tau(iir,iit,iip) = tpT + end if + + end if + + + end do + end do + end do + + ! boundary + + do iit=1,nt + do iip=1,np + tau(1,iit,iip) = max(2*tau(2,iit,iip)-tau(3,iit,iip),tau(3,iit,iip)) + tau(nr,iit,iip) = max(2*tau(nr-1,iit,iip)-tau(nr-2,iit,iip),tau(nr-2,iit,iip)) + end do + end do + do iir=1,nr + do iip=1,np + tau(iir,1,iip) = max(2*tau(iir,2,iip)-tau(iir,3,iip),tau(iir,3,iip)) + tau(iir,nt,iip) = max(2*tau(iir,nt-1,iip)-tau(iir,nt-2,iip),tau(iir,nt-2,iip)) + end do + end do + do iir=1,nr + do iit=1,nt + tau(iir,iit,1) = max(2*tau(iir,iit,2)-tau(iir,iit,3),tau(iir,iit,3)) + tau(iir,iit,np) = max(2*tau(iir,iit,np-1)-tau(iir,iit,np-2),tau(iir,iit,np-2)) + end do + end do + + + end do + end do + end do + + + + ! 统计误差,判断迭代终止条件 + do iir=2,nr-1 + do iit=2,nt-1 + do iip=2,np-1 + L1_dif=L1_dif+abs(tau(iir,iit,iip)-tau_old(iir,iit,iip)) + Linf_dif=max(Linf_dif,abs(tau(iir,iit,iip)-tau_old(iir,iit,iip))) + end do + end do + end do + + do iir=3,nr-2 + do iit=3,nt-2 + do iip=3,np-2 + L1_err=L1_err+abs(u(iir,iit,iip)-tau(iir,iit,iip)) + Linf_err=max(Linf_err,abs(tau(iir,iit,iip)-u(iir,iit,iip))) + end do + end do + end do + L1_err=L1_err/((nr-4)*(nt-4)*(np-4)) + L1_dif=L1_dif/((nr-2)*(nt-2)*(np-2)) + + if (myid .eq. 0) then + ! ################ iteration information ################# + if (abs(L1_dif)x0 ) then + idx0=iix + exit + end if + end do + do iiy=1,ny-1 + if (yy(iiy)<= y0 .and. yy(iiy+1)>y0 ) then + idy0=iiy + exit + end if + end do + do iiy=1,ny-1 + if (zz(iiz)<= z0 .and. zz(iiz+1)>z0 ) then + idz0=iiz + exit + end if + end do + + if (idx0<=0 .or. idy0<0 .or. idz0<0) then + write(*,*) 'point out of the mesh' + pause + return + end if + + dx = xx(idx0+1)-xx(idx0) + dy = yy(idy0+1)-yy(idy0) + dz = zz(idz0+1)-zz(idz0) + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) +end subroutine + +! 3-D interpolation uniform mesh +subroutine Linear_Interp_3D(xx,yy,zz,val,nx,ny,nz,x0,y0,z0,v0) + integer :: nx,ny,nz,idx0,idy0,idz0 + double precision :: xx(nx),yy(ny),zz(nz),val(nx,ny,nz),x0,y0,z0,v0,dx,dy,dz + double precision :: r1,r2,r3 + integer :: iix,iiy,iiz + + dx = xx(2)-xx(1) + dy = yy(2)-yy(1) + dz = zz(2)-zz(1) + + idx0 = floor((x0-xx(1))/dx)+1 + idy0 = floor((y0-yy(1))/dy)+1 + idz0 = floor((z0-zz(1))/dz)+1 + + if (idx0<1 .or. idx0>nx-1 .or. idy0<1 .or. idy0>ny-1 .or. idz0<1 .or. idz0>nz-1) then + write(*,*) 'point out of the mesh' + pause + return + end if + + r1 = min(1.0, (x0-xx(idx0))/dx ) + r2 = min(1.0, (y0-yy(idy0))/dy ) + r3 = min(1.0, (z0-zz(idz0))/dz ) + + v0 = (1-r1)*(1-r2)*(1-r3)*val(idx0,idy0,idz0) + (1-r1)*(1-r2)*r3*val(idx0,idy0,idz0+1) & + & + (1-r1)*r2*(1-r3)*val(idx0,idy0+1,idz0) + (1-r1)*r2*r3*val(idx0,idy0+1,idz0+1) & + & + r1*(1-r2)*(1-r3)*val(idx0+1,idy0,idz0) + r1*(1-r2)*r3*val(idx0+1,idy0,idz0+1) & + & + r1*r2*(1-r3)*val(idx0+1,idy0+1,idz0) + r1*r2*r3*val(idx0+1,idy0+1,idz0+1) + +end subroutine + +subroutine FSM_O1_Adj_sphe_3d(rr,tt,pp,nr,nt,np,Table,TableADJ,zeta,xi,eta,Nrec,rrec,trec,prec,sourceADJ) + + integer :: nr,nt,np,Nrec + double precision :: dr,dt,dp,rr(nr),tt(nt),pp(np) + double precision :: Table(nr,nt,np),TableADJ(nr,nt,np),delta(nr,nt,np) + double precision :: zeta(nr,nt,np),xi(nr,nt,np),eta(nr,nt,np) + double precision :: rrec(Nrec),trec(Nrec),prec(Nrec),sourceADJ(Nrec) + double precision :: a1,a1m(nr,nt,np),a1p(nr,nt,np),a2,a2m(nr,nt,np),a2p(nr,nt,np) + double precision :: b1,b1m(nr,nt,np),b1p(nr,nt,np),b2,b2m(nr,nt,np),b2p(nr,nt,np) + double precision :: c1,c1m(nr,nt,np),c1p(nr,nt,np),c2,c2m(nr,nt,np),c2p(nr,nt,np) + double precision :: coe + + integer,parameter :: MaxIter=100 + double precision,parameter :: tol=10.0**(-6),eps=10.0**(-6) + + integer :: iir,iit,iip,idi,idj,idk,rdirec,tdirec,pdirec + double precision :: r1,r2,r3,Linf_dif,tpTabldADJ,Hamilton + double precision :: tmpr1,tmpr2,tmpt1,tmpt2 + + ! ####### 网格间距 mesh size ######## + dr = rr(2)-rr(1) + dt = tt(2)-tt(1) + dp = pp(2)-pp(1) + + ! ################# 构造源项 build the sourece term, the delta function ################# + do iir = 1,nr + do iit = 1,nt + do iip= 1,np + delta(iir,iit,iip) = 0 + TableADJ(iir,iit,iip) = 0 + end do + end do + end do + + ! ------- 遍历每个台站,给予delta函数贡献 loop each station to contribute the delta function ------- + do ir=1,Nrec + idi=floor((rrec(ir)-rr(1))/dr+1); + idj=floor((trec(ir)-tt(1))/dt+1); + idk=floor((prec(ir)-pp(1))/dp+1); + + r1 = min(1.0,(rrec(ir)-rr(idi))/dr); + r2 = min(1.0,(trec(ir)-tt(idj))/dt); + r3 = min(1.0,(prec(ir)-pp(idk))/dp); + + delta(idi,idj,idk) = delta(idi,idj,idk) + sourceADJ(ir)*(1-r1)*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk) = delta(idi+1,idj,idk) + sourceADJ(ir)*r1*(1-r2)*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk) = delta(idi,idj+1,idk) + sourceADJ(ir)*(1-r1)*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk) = delta(idi+1,idj+1,idk) + sourceADJ(ir)*r1*r2*(1-r3)/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj,idk+1) = delta(idi,idj,idk+1) + sourceADJ(ir)*(1-r1)*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj,idk+1) = delta(idi+1,idj,idk+1) + sourceADJ(ir)*r1*(1-r2)*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi,idj+1,idk+1) = delta(idi,idj+1,idk+1) + sourceADJ(ir)*(1-r1)*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + delta(idi+1,idj+1,idk+1) = delta(idi+1,idj+1,idk+1) + sourceADJ(ir)*r1*r2*r3/(dr*dp*dt*rrec(ir)**2*cos(trec(ir))) + !print *, delta(idi,idj,idk),delta(idi+1,idj+1,idk+1) + end do + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpr1 = (rr(iir-1)+rr(iir))/2; tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpr2 = (rr(iir)+rr(iir+1))/2; tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip))*(Table(iir,iit,iip)-Table(iir-1,iit,iip))/dr + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip))*(Table(iir+1,iit,iip)-Table(iir,iit,iip))/dr + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + !b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + ! & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dp) & + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit-1,iip))/dt & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit-1,iip+1)-Table(iir,iit-1,iip-1))+(Table(iir,iit,iip+1)-Table(iir,iit,iip-1))) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + + !b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(tmpr2**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + ! & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*tmpr2**2)/(4*dp) & + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)*(Table(iir,iit+1,iip)-Table(iir,iit,iip))/dt & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)/(4*dp) & + & *((Table(iir,iit,iip+1)-Table(iir,iit,iip-1))+(Table(iir,iit+1,iip+1)-Table(iir,iit+1,iip-1))) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + !c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tmpt1)*tmpr1**2)/(4*dt) & + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip-1)-Table(iir,iit-1,iip-1))+(Table(iir,iit+1,iip)-Table(iir,iit-1,iip))) & + ! & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tmpt1)**2*tmpr1**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/ & + & (cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip)-Table(iir,iit,iip-1))/dp + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + + !c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tmpt2)*tmpr2**2)/(4*dt) & + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)/(4*dt) & + & *((Table(iir,iit+1,iip)-Table(iir,iit-1,iip))+(Table(iir,iit+1,iip+1)-Table(iir,iit-1,iip+1))) & + ! & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tmpt2)**2*tmpr2**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1)) & + & /(cos(tt(iit))**2*rr(iir)**2)*(Table(iir,iit,iip+1)-Table(iir,iit,iip))/dp + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif) r1+(iir+0.5)*dr, t1+iit*dt, p1+iip*dp + a0 = T0para(1); b0 = T0para(2); c0 = T0para(3); f0 = T0para(4); fun0 = T0para(5); + r0 = T0para(6); t0 = T0para(7); p0 = T0para(8); + + do iir=1,nr-1 + do iit=1,nt + do iip=1,np + r1 = rr(iir)+0.5*dr; t1 = tt(iit); p1 = pp(iip) + T0v_hr(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hr(iir,iit,iip)==0 ) then + T0r_hr(iir,iit,iip) = 0 + else + T0r_hr(iir,iit,iip) = fun0**2*(1.0/a0*(r1-r0))/T0v_hr(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_ht iir,iit,iip -> r1+iir*dr, t1+(iit+0.5)*dt, p1+iip*dp + do iir=1,nr + do iit=1,nt-1 + do iip=1,np + r1 = rr(iir); t1 = tt(iit)+0.5*dt; p1 = pp(iip) + T0v_ht(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_ht(iir,iit,iip)==0 ) then + T0t_ht(iir,iit,iip) = 0 + T0p_ht(iir,iit,iip) = 0 + else + T0t_ht(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_ht(iir,iit,iip) + T0p_ht(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_ht(iir,iit,iip) + end if + end do + end do + end do + ! 构造T0_hp iir,iit,iip -> r1+iir*dr, t1+iit*dt, p1+(iip+0.5)*dp + do iir=1,nr + do iit=1,nt + do iip=1,np-1 + r1 = rr(iir); t1 = tt(iit); p1 = pp(iip)+0.5*dp + T0v_hp(iir,iit,iip) = fun0*sqrt( 1.0/a0*(r1-r0)**2 + c0/(c0*b0-f0**2)*(t1-t0)**2 & + & + b0/(c0*b0-f0**2)*(p1-p0)**2 + 2*f0/(c0*b0-f0**2)*(t1-t0)*(p1-p0) ) + if ( T0v_hp(iir,iit,iip)==0 ) then + T0t_hp(iir,iit,iip) = 0 + T0p_hp(iir,iit,iip) = 0 + else + T0t_hp(iir,iit,iip) = fun0**2*(c0/(c0*b0-f0**2)*(t1-t0)+f0/(c0*b0-f0**2)*(p1-p0))/T0v_hp(iir,iit,iip) + T0p_hp(iir,iit,iip) = fun0**2*(b0/(c0*b0-f0**2)*(p1-p0)+f0/(c0*b0-f0**2)*(t1-t0))/T0v_hp(iir,iit,iip) + end if + end do + end do + end do + + + + + ! ################# 构造方程系数 calculate coefficients of equations ################# + do iir = 2,nr-1 + do iit = 2,nt-1 + do iip= 2,np-1 + tmpt1 = (tt(iit-1)+tt(iit))/2; + tmpt2 = (tt(iit)+tt(iit-1))/2; + + a1 = -(1+zeta(iir-1,iit,iip)+zeta(iir,iit,iip)) & + & *(T0r_hr(iir-1,iit,iip)*(tau(iir,iit,iip)+tau(iir-1,iit,iip))/2 & + & + T0v_hr(iir-1,iit,iip)*(tau(iir,iit,iip)-tau(iir-1,iit,iip))/dr) + a1m(iir,iit,iip) = (a1-abs(a1))/2; a1p(iir,iit,iip) = (a1+abs(a1))/2; + a2 = -(1+zeta(iir,iit,iip)+zeta(iir+1,iit,iip)) & + & *(T0r_hr(iir,iit,iip)*(tau(iir+1,iit,iip)+tau(iir,iit,iip))/2 & + & + T0v_hr(iir,iit,iip)*(tau(iir+1,iit,iip)-tau(iir,iit,iip))/dr) + a2m(iir,iit,iip) = (a2-abs(a2))/2; a2p(iir,iit,iip) = (a2+abs(a2))/2; + + b1 = -(1-xi(iir,iit-1,iip)-xi(iir,iit,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit,iip)-tau(iir,iit-1,iip))/dt) & + & -(eta(iir,iit-1,iip)+eta(iir,iit,iip))/(cos(tmpt1)*rr(iir)**2)* & + & (T0p_ht(iir,iit-1,iip)*(tau(iir,iit,iip)+tau(iir,iit-1,iip))/2 & + & + T0v_ht(iir,iit-1,iip)*(tau(iir,iit-1,iip+1)-tau(iir,iit-1,iip-1) & + & + tau(iir,iit,iip+1)-tau(iir,iit,iip-1))/(4*dp)) + b1m(iir,iit,iip) = (b1-abs(b1))/2; b1p(iir,iit,iip) = (b1+abs(b1))/2; + b2 = -(1-xi(iir,iit,iip)-xi(iir,iit+1,iip))/(rr(iir)**2)* & + & (T0t_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit,iip))/dt) & + & -(eta(iir,iit,iip)+eta(iir,iit+1,iip))/(cos(tmpt2)*rr(iir)**2)* & + & (T0p_ht(iir,iit,iip)*(tau(iir,iit+1,iip)+tau(iir,iit,iip))/2 & + & + T0v_ht(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip-1) & + & + tau(iir,iit+1,iip+1)-tau(iir,iit+1,iip-1))/(4*dp)) + b2m(iir,iit,iip) = (b2-abs(b2))/2; b2p(iir,iit,iip) = (b2+abs(b2))/2; + + c1 = -(eta(iir,iit,iip-1)+eta(iir,iit,iip))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit+1,iip-1)-tau(iir,iit-1,iip-1) & + & +tau(iir,iit+1,iip)-tau(iir,iit-1,iip))/(4*dt)) & + & -(1+xi(iir,iit,iip-1)+xi(iir,iit,iip))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip-1)*(tau(iir,iit,iip)+tau(iir,iit,iip-1))/2 & + & + T0v_hp(iir,iit,iip-1)*(tau(iir,iit,iip)-tau(iir,iit,iip-1))/dp) + c1m(iir,iit,iip) = (c1-abs(c1))/2; c1p(iir,iit,iip) = (c1+abs(c1))/2; + c2 = -(eta(iir,iit,iip)+eta(iir,iit,iip+1))/(cos(tt(iit))*rr(iir)**2)* & + & (T0t_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit+1,iip)-tau(iir,iit-1,iip) & + & +tau(iir,iit+1,iip+1)-tau(iir,iit-1,iip+1))/(4*dt)) & + & -(1+xi(iir,iit,iip)+xi(iir,iit,iip+1))/(cos(tt(iit))**2*rr(iir)**2)* & + & (T0p_hp(iir,iit,iip)*(tau(iir,iit,iip+1)+tau(iir,iit,iip))/2 & + & + T0v_hp(iir,iit,iip)*(tau(iir,iit,iip+1)-tau(iir,iit,iip))/dp) + c2m(iir,iit,iip) = (c2-abs(c2))/2; c2p(iir,iit,iip) = (c2+abs(c2))/2; + + end do + end do + end do + + + ! ################# 固定伴随场边界条件 fix the boundary of the adjoint field ###################### + ! -------- R,Theta boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,iit,1) = 0 + TableADJ(iir,iit,np) = 0 + end do + end do + ! -------- R,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(iir,1,iip) = 0 + TableADJ(iir,nt,iip) = 0 + end do + end do + ! -------- Theta,Phi boundary----- + do iir=1,nr + do iit=1,nt + TableADJ(1,iit,iip) = 0 + TableADJ(nr,iit,iip) = 0 + end do + end do + + + + + ! ################ 使用FSM计算伴随场 calculate adjoint field by FSM ###################### + + do iter =1,MaxIter + Linf_dif=0; + do rdirec = -1,1,2 + do tdirec = -1,1,2 + do pdirec = -1,1,2 + + !x: nr-1 <-> 2, y: nt-1 <-> 2, z: np-1 <-> 2 + do iir=nint(0.5+nr/2.0+(nr/2.0-1.5)*rdirec),nint(0.5+nr/2.0+(-nr/2.0+1.5)*rdirec),-rdirec + do iit=nint(0.5+nt/2.0+(nt/2.0-1.5)*tdirec),nint(0.5+nt/2.0+(-nt/2.0+1.5)*tdirec),-tdirec + do iip=nint(0.5+np/2.0+(np/2.0-1.5)*pdirec),nint(0.5+np/2.0+(-np/2.0+1.5)*pdirec),-pdirec + + + coe = (a2p(iir,iit,iip)-a1m(iir,iit,iip))/dr & + & +(b2p(iir,iit,iip)-b1m(iir,iit,iip))/dt & + & +(c2p(iir,iit,iip)-c1m(iir,iit,iip))/dp + + if (abs(coe)Linf_dif) then + ! print *, iir,iit,iip,tpTableADJ,TableADJ(iir,iit,iip) + !end if + Linf_dif = max(Linf_dif, abs(tpTableADJ-TableADJ(iir,iit,iip))) + + TableADJ(iir,iit,iip) = tpTableADJ + end if + + end do + end do + end do + + end do + end do + end do + + + + if (abs(Linf_dif)ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + do iik=1,nk + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt,idp,iik) = invkernel(idr,idt,idp,iik) & + & + (1-r1)*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt,idp,iik) = invkernel(idr+1,idt,idp,iik) & + & + r1*(1-r2)*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr,idt+1,idp,iik) = invkernel(idr,idt+1,idp,iik) & + & + (1-r1)*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + invkernel(idr+1,idt+1,idp,iik) = invkernel(idr+1,idt+1,idp,iik) & + & + r1*r2*(1-r3)*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt,idp+1,iik) = invkernel(idr,idt,idp+1,iik) & + & + (1-r1)*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt,idp+1,iik) = invkernel(idr+1,idt,idp+1,iik) & + & + r1*(1-r2)*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr,idt+1,idp+1,iik) = invkernel(idr,idt+1,idp+1,iik) & + & + (1-r1)*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + invkernel(idr+1,idt+1,idp+1,iik) = invkernel(idr+1,idt+1,idp+1,iik) & + & + r1*r2*r3*all_Kernel(iir,iit,iip,iik) + end if + + + end do + + end do + end do + end do + + ! build update value + do iir=1,nr + idr = floor((rr(iir)-invr(igrid,1))/dinvr)+1 ! invr(idr) <= rr(iir) < invr(idr+1) + if (idr<0 .or. idr>ninvr) then + cycle ! 如果与反演网格点无关,考察下一个点 if r is out of inversion grid invr, turn to next point + end if + r1 = (rr(iir)-invr(igrid,1)-(idr-1)*dinvr)/dinvr ! r1=0 -> r=invr(idr); r1=1 -> r=invr(idr+1) + + do iit=1,nt + idt = floor((tt(iit)-invt(igrid,1))/dinvt)+1 + if (idt<0 .or. idt>ninvt) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r2 = (tt(iit)-invt(igrid,1)-(idt-1)*dinvt)/dinvt + + do iip=1,np + idp = floor((pp(iip)-invp(igrid,1))/dinvp)+1 + if (idp<0 .or. idp>ninvp) then + cycle ! 如果与反演网格点无关,考察下一个点 + end if + r3 = (pp(iip)-invp(igrid,1)-(idp-1)*dinvp)/dinvp + + if (r1<0 .or. r1>1 .or. r2<0 .or. r2>1 .or. r3<0 .or. r3>1) then + print *, 'error ratio' + pause + end if + + + do iik=1,nk + pert = 0.0 + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt,idp,iik)*(1-r1)*(1-r2)*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp,iik)*r1*(1-r2)*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp,iik)*(1-r1)*r2*(1-r3) + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp>=1 .and. idp<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp,iik)*r1*r2*(1-r3) + end if + if (idr>=1 .and. idr<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt,idp+1,iik)*(1-r1)*(1-r2)*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt>=1 .and. idt<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt,idp+1,iik)*r1*(1-r2)*r3 + end if + if (idr>=1 .and. idr<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr,idt+1,idp+1,iik)*(1-r1)*r2*r3 + end if + if (idr+1>=1 .and. idr+1<=ninvr .and. idt+1>=1 .and. idt+1<=ninvt .and.idp+1>=1 .and. idp+1<=ninvp) then + pert = pert + invkernel(idr+1,idt+1,idp+1,iik)*r1*r2*r3 + end if + para(iir,iit,iip,iik) = para(iir,iit,iip,iik)+pert + end do + + + end do + end do + end do + + + end do + + + ! rescale + Linf = 0.0 + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + if (Linf < abs(para(iir,iit,iip,iik))) then + Linf = abs(para(iir,iit,iip,iik)) + end if + end do + end do + end do + end do + + do iir=1,nr + do iit=1,nt + do iip=1,np + do iik=1,nk + update_value(iir,iit,iip,iik) = para(iir,iit,iip,iik)/Linf*stepsize + end do + end do + end do + end do + +end subroutine + +subroutine Kernel_Mask(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou,radius) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + + do i=1,nr + do j=1,nt + do k=1,np + dis = sqrt((rr(i)-rsou)**2+(rsou*(tt(j)-tsou))**2+(rsou*cos(tsou)*(pp(k)-psou))**2) + if ( dis < radius) then + kernel(i,j,k) = kernel(i,j,k) * 0 + end if + end do + end do + end do +end subroutine + +subroutine Kernel_Mask_new(rr,tt,pp,nr,nt,np,kernel,rsou,tsou,psou) + integer :: nr,nt,np + double precision :: rr(nr),tt(nt),pp(np),rsou,tsou,psou,radius + double precision :: kernel(nr,nt,np),dis + integer :: i,j,k + dr = rr(2)-rr(1); dt = tt(2)-tt(1); dp = pp(2)-pp(1); + do i=1,nr + do j=1,nt + do k=1,np + if ( abs(rr(i)-rsou)6351):\n", + " fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7)\n", + " elif (rr[ir]>6336):\n", + " fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6)\n", + " elif (rr[ir]>5961):\n", + " fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) \n", + " else:\n", + " fun_init[ir,it,ip] = 1.0/9.0\n", + "\n", + " vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip]\n", + "\n", + " # true model\n", + " if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \\\n", + " and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \\\n", + " and rr[ir] >= 6211.0 and rr[ir] <= 6371.0):\n", + " c+=1\n", + " sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \\\n", + " *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \\\n", + " *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0)\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 150.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + "\n", + "\n", + "\n", + "r_earth = R_earth #6378.1370\n", + "print(\"depminmax {} {}\".format(r_earth-rr1,r_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta',data=zeta_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta',data=zeta_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(123456789)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_src = 1\n", + "n_rec = [1 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "# teleseismic events\n", + "n_src_tele = 1\n", + "center_lon = (pp2deg+pp1deg)/2.0\n", + "center_lat = (tt2deg+tt1deg)/2.0\n", + "r_src = 40 # deg\n", + "d_r = 360.0/n_src_tele\n", + "\n", + "# use fixed coordinate for test\n", + "dep_srcs = [50.0]\n", + "lon_srcs = [67.5]\n", + "lat_srcs = [40.0]\n", + "\n", + "elev_recs = []\n", + "lon_recs = []\n", + "lat_recs = []\n", + "\n", + "# read STATIONS\n", + "f = open('fortran_code/ega5/input/STATIONS', 'r')\n", + "for line in f:\n", + " lines.append(line)\n", + "f.close()\n", + "\n", + "n_rec_tmp=0\n", + "for l in lines:\n", + " if l[0] == '#':\n", + " continue\n", + " else:\n", + " items = l.split()\n", + " if (len(items) == 3):\n", + " elev_recs.append(float(items[0]))\n", + " lat_recs.append(float(items[1]))\n", + " lon_recs.append(float(items[2]))\n", + " n_rec_tmp += 1\n", + "\n", + "n_rec[0] = n_rec_tmp\n", + "\n", + "#for i in range(n_src_tele):\n", + "# dep = 50.0\n", + "# lon = math.cos(d_r*i/180.0*math.pi)*r_src + center_lon\n", + "# lat = math.sin(d_r*i/180.0*math.pi)*r_src + center_lat\n", + "# dep_srcs.append(dep)\n", + "# lon_srcs.append(lon)\n", + "# lat_srcs.append(lat)\n", + "#\n", + "## regional events\n", + "#n_src_reg = 0\n", + "#for i in range(n_src_reg):\n", + "# dep = random.uniform(r_earth-rr1,r_earth-rr2)\n", + "# lon = random.uniform(pp1deg,pp2deg)\n", + "# lat = random.uniform(tt1deg,tt2deg)\n", + "# dep_srcs.append(dep)\n", + "# lon_srcs.append(lon)\n", + "# lat_srcs.append(lat)\n", + "#\n", + "#n_src = n_src_tele + n_src_reg\n", + "#\n", + "## create receiver coordinates\n", + "#n_rec = [50 for i in range(n_src)]\n", + "#elev_recs=[]\n", + "#lon_recs=[]\n", + "#lat_recs=[]\n", + "#rec_names=[]\n", + "#for i in range(n_rec[0]):\n", + "# #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + "# elev_recs.append(0) # elevation in m\n", + "# lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + "# lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + "# rec_names.append(i)\n", + "\n", + "\n", + "\n", + "# create dummy src\n", + "lines=[]\n", + "for i_src in range(n_src):\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " dep = dep_srcs[i_src]\n", + " lon = lon_srcs[i_src]\n", + " lat = lat_srcs[i_src]\n", + "\n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " #elev_rec = random.uniform(0.0,-10.0) # elevation in m\n", + " #lon_rec = random.uniform(pp1deg,pp2deg)\n", + " #lat_rec = random.uniform(tt1deg,tt2deg)\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy+\"_\"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + "\n", + " pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]])\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# output source and receiver file for fortran code\n", + "fname_source = \"EARTHQUAKES_tele\"\n", + "fname_station=\"STATIONS\"\n", + "\n", + "# write out number of sources\n", + "with open(fname_source, 'w') as f:\n", + " f.write('{}\\n'.format(n_src))\n", + " # write out depth lat lon \n", + " for i_src in range(n_src):\n", + " f.write('{} {} {}\\n'.format(dep_srcs[i_src],lat_srcs[i_src],lon_srcs[i_src]))\n", + "\n", + "\n", + "# write out number of stations\n", + "with open(fname_station, 'w') as f:\n", + " f.write('{}\\n'.format(n_rec[0]))\n", + " # write out depth lat lon (convert elevation to depth)\n", + " for i_rec in range(n_rec[0]):\n", + " f.write('{} {} {}\\n'.format(elev_recs[i_rec],lat_recs[i_rec],lon_recs[i_rec]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# write out in ASCIII\n", + "\n", + "#\n", + "\n", + "fname_init = 'test_model_init.dat'\n", + "fname_true = 'test_model_true.dat'\n", + "\n", + "\n", + "# write init model\n", + "with open(fname_init, 'w') as f:\n", + " # write nodes in rtp\n", + " for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " # write out eta xi zeta fun fac_a fac_b fac_c fac_f\n", + " f.write(\"{:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f}\\n\".format(eta_init[ir,it,ip],xi_init[ir,it,ip],zeta_init[ir,it,ip],fun_init[ir,it,ip],vel_init[ir,it,ip],a_init[ir,it,ip],b_init[ir,it,ip],c_init[ir,it,ip],f_init[ir,it,ip]))\n", + "\n", + "\n", + "# write true model\n", + "with open(fname_true, 'w') as f:\n", + " # write nodes in rtp\n", + " for ir in range(n_rtp[2]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[0]):\n", + " # write out eta xi zeta fun fac_a fac_b fac_c fac_f\n", + " f.write(\"{:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f}\\n\".format(eta_true[ir,it,ip],xi_true[ir,it,ip],zeta_true[ir,it,ip],fun_true[ir,it,ip],vel_true[ir,it,ip],a_true[ir,it,ip],b_true[ir,it,ip],c_true[ir,it,ip],f_true[ir,it,ip]))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "fbd0b2a7df497f398d93ab2f589d8a5daa3108cfb7ff2b90736653cca3aeadc0" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/inversion_tele_one_src/make_test_model.py b/test/old_tests/inversion_tele_one_src/make_test_model.py new file mode 100644 index 0000000..f6ed5e2 --- /dev/null +++ b/test/old_tests/inversion_tele_one_src/make_test_model.py @@ -0,0 +1,331 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6371.0 #6378.1370 + +rr1=6070 +rr2=6400 +tt1=(30.0-1.5)/180*math.pi +tt2=(50.0+1.5)/180*math.pi +pp1=(15.0-1.5)/180*math.pi +pp2=(40.0+1.5)/180*math.pi + +n_rtp = [55,55,55] +dr = (rr2-rr1)/(n_rtp[0]-1) +dt = (tt2-tt1)/(n_rtp[1]-1) +dp = (pp2-pp1)/(n_rtp[2]-1) +rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + +# initial model +gamma = 0.0 +#s0 = 1.0/6.0 +slow_p=0.04 +ani_p=0.03 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + + if (rr[ir]>6351): + fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7) + elif (rr[ir]>6336): + fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6) + elif (rr[ir]>5961): + fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) + else: + fun_init[ir,it,ip] = 1.0/9.0 + + vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip] + + # true model + if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \ + and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \ + and rr[ir] >= 6211.0 and rr[ir] <= 6371.0): + c+=1 + sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \ + *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \ + *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 150.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + + +r_earth = R_earth #6378.1370 +print("depminmax {} {}".format(r_earth-rr1,r_earth-rr2)) +print(c) + + +# %% +# write out +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init) +fout_init.create_dataset('xi', data=xi_init) +fout_init.create_dataset('zeta',data=zeta_init) +fout_init.create_dataset('vel', data=vel_init) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true) +fout_true.create_dataset('xi', data=xi_true) +fout_true.create_dataset('zeta',data=zeta_true) +fout_true.create_dataset('vel', data=vel_true) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# +# ``` + +# %% +import random +random.seed(123456789) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +arriv_t_dummy = 0.0 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_src = 1 +n_rec = [1 for x in range(n_src)] + + +lines = [] + +pos_src=[] +pos_rec=[] + +# teleseismic events +n_src_tele = 1 +center_lon = (pp2deg+pp1deg)/2.0 +center_lat = (tt2deg+tt1deg)/2.0 +r_src = 40 # deg +d_r = 360.0/n_src_tele + +# use fixed coordinate for test +dep_srcs = [50.0] +lon_srcs = [67.5] +lat_srcs = [40.0] + +elev_recs = [] +lon_recs = [] +lat_recs = [] + +# read STATIONS +f = open('fortran_code/ega5/input/STATIONS', 'r') +for line in f: + lines.append(line) +f.close() + +n_rec_tmp=0 +for l in lines: + if l[0] == '#': + continue + else: + items = l.split() + if (len(items) == 3): + elev_recs.append(float(items[0])) + lat_recs.append(float(items[1])) + lon_recs.append(float(items[2])) + n_rec_tmp += 1 + +n_rec[0] = n_rec_tmp + +#for i in range(n_src_tele): +# dep = 50.0 +# lon = math.cos(d_r*i/180.0*math.pi)*r_src + center_lon +# lat = math.sin(d_r*i/180.0*math.pi)*r_src + center_lat +# dep_srcs.append(dep) +# lon_srcs.append(lon) +# lat_srcs.append(lat) +# +## regional events +#n_src_reg = 0 +#for i in range(n_src_reg): +# dep = random.uniform(r_earth-rr1,r_earth-rr2) +# lon = random.uniform(pp1deg,pp2deg) +# lat = random.uniform(tt1deg,tt2deg) +# dep_srcs.append(dep) +# lon_srcs.append(lon) +# lat_srcs.append(lat) +# +#n_src = n_src_tele + n_src_reg +# +## create receiver coordinates +#n_rec = [50 for i in range(n_src)] +#elev_recs=[] +#lon_recs=[] +#lat_recs=[] +#rec_names=[] +#for i in range(n_rec[0]): +# #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m +# elev_recs.append(0) # elevation in m +# lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9)) +# lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9)) +# rec_names.append(i) + + + +# create dummy src +lines=[] +for i_src in range(n_src): + # define one point in the domain (rr1 bottom, rr2 top) + dep = dep_srcs[i_src] + lon = lon_srcs[i_src] + lat = lat_srcs[i_src] + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + # create dummy station + for i_rec in range(n_rec[i_src]): + #elev_rec = random.uniform(0.0,-10.0) # elevation in m + #lon_rec = random.uniform(pp1deg,pp2deg) + #lat_rec = random.uniform(tt1deg,tt2deg) + + rec = [i_src, i_rec, st_name_dummy+"_"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, arriv_t_dummy] + lines.append(rec) + + pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]]) + +# write out ev_arrivals file +fname = 'src_rec_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# %% +# draw src and rec positions +import matplotlib.pyplot as plt + +for i_src in range(n_src): + plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# %% +# plot receivers +for i_rec in range(n_rec[0]): + plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + +# %% +# output source and receiver file for fortran code +fname_source = "EARTHQUAKES_tele" +fname_station="STATIONS" + +# write out number of sources +with open(fname_source, 'w') as f: + f.write('{}\n'.format(n_src)) + # write out depth lat lon + for i_src in range(n_src): + f.write('{} {} {}\n'.format(dep_srcs[i_src],lat_srcs[i_src],lon_srcs[i_src])) + + +# write out number of stations +with open(fname_station, 'w') as f: + f.write('{}\n'.format(n_rec[0])) + # write out depth lat lon (convert elevation to depth) + for i_rec in range(n_rec[0]): + f.write('{} {} {}\n'.format(elev_recs[i_rec],lat_recs[i_rec],lon_recs[i_rec])) + +# %% +# write out in ASCIII + +# + +fname_init = 'test_model_init.dat' +fname_true = 'test_model_true.dat' + + +# write init model +with open(fname_init, 'w') as f: + # write nodes in rtp + for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + # write out eta xi zeta fun fac_a fac_b fac_c fac_f + f.write("{:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f}\n".format(eta_init[ir,it,ip],xi_init[ir,it,ip],zeta_init[ir,it,ip],fun_init[ir,it,ip],vel_init[ir,it,ip],a_init[ir,it,ip],b_init[ir,it,ip],c_init[ir,it,ip],f_init[ir,it,ip])) + + +# write true model +with open(fname_true, 'w') as f: + # write nodes in rtp + for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + # write out eta xi zeta fun fac_a fac_b fac_c fac_f + f.write("{:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f} {:.16f}\n".format(eta_true[ir,it,ip],xi_true[ir,it,ip],zeta_true[ir,it,ip],fun_true[ir,it,ip],vel_true[ir,it,ip],a_true[ir,it,ip],b_true[ir,it,ip],c_true[ir,it,ip],f_true[ir,it,ip])) + + + +# %% + + + diff --git a/test/old_tests/only_source/README.md b/test/old_tests/only_source/README.md new file mode 100644 index 0000000..bf55104 --- /dev/null +++ b/test/old_tests/only_source/README.md @@ -0,0 +1,52 @@ +# Example for Solver only mode + +This example shows how to use the Solver only mode of the tool. + +## compile TOMOATT with solver_only executable + +Uncomment "src/TOMOATT_solver_only.cxx" and "src/TOMOATT_2d_precalc.cxx" in CMakeLists.txt to compile the solver_only executable as below. + +```cmake +# add one by one +set(APP_SOURCES + src/TOMOATT.cxx + src/TOMOATT_solver_only.cxx + src/TOMOATT_2d_precalc.cxx + #src/SrcRecWeight.cxx + ) +``` + +Then recompile the code in the build directory. + + +## pre calculation of source boudary conditions + +As the 2d solver is not parallelized for one single teleseismic source yet, what user can do is calculate multiple teleseismic sources at the same time using simultaneous run. +The precalculation of source boundary conditions can be done by running the following command: + +```bash +mpirun -n 8 ../../build/bin/TOMOATT_2d_precalc -i input_params_pre.yml +``` + +## run the solver_only executable + +Before running the solver_only executable, you need to prepare the input files by running: + +```python +python make_test_model.py +``` + +This creates a src_only_test.dat which includes 8 sources without any receiver. + +Then run the solver_only executable as below. + +```bash +mpirun -n 8 ../../build/bin/TOMOATT_solver_only -i src_only_test.dat +``` + +## check the output files +The result file can be visualize with paraview: +```bash +paraview OUTPUT_FILES/out_data_sim.xmf +``` +or directly open with python etc. Please refer the check_3d_out.ipynb for more details. \ No newline at end of file diff --git a/test/old_tests/only_source/check_3d_out.ipynb b/test/old_tests/only_source/check_3d_out.ipynb new file mode 100644 index 0000000..a8e12b0 --- /dev/null +++ b/test/old_tests/only_source/check_3d_out.ipynb @@ -0,0 +1,91 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'T for source 1')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# final model\n", + "fpath_T = './OUTPUT_FILES/out_data_sim.h5'\n", + "\n", + "import h5py\n", + "\n", + "# source id to be retrieved\n", + "i_src = 0\n", + "# dataset name\n", + "dsetname = 'T_res_merged_inv_0000'\n", + "\n", + "# read vel, xi, eta dataset \n", + "with h5py.File(fpath_T, 'r') as f:\n", + " T = f['src_{}'.format(i_src)][dsetname][:]\n", + "\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# plot T\n", + "plt.figure()\n", + "plt.imshow(T[5,:,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('T for source {}'.format(i_src))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/only_source/input_params.yml b/test/old_tests/only_source/input_params.yml new file mode 100644 index 0000000..de2d117 --- /dev/null +++ b/test/old_tests/only_source/input_params.yml @@ -0,0 +1,33 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'src_only_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 0 # swap source and receiver # SHOLD BE 0 FOR SOURCE ONLY RUN + +model : + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [2,1,1] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 500 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 1 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/only_source/input_params_pre.yml b/test/old_tests/only_source/input_params_pre.yml new file mode 100644 index 0000000..92b7482 --- /dev/null +++ b/test/old_tests/only_source/input_params_pre.yml @@ -0,0 +1,33 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'src_only_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 0 # swap source and receiver # SHOLD BE 0 FOR SOURCE ONLY RUN + +model : + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + +parallel : # no mean for 2d pre calculation + n_sims : 8 # number of simultaneous run. use as much as possible for 2d source preparation + ndiv_rtp : [1,1,1] # number of subdomains + nproc_sub : 1 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 500 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 1 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/only_source/make_test_model.py b/test/old_tests/only_source/make_test_model.py new file mode 100644 index 0000000..15c3e40 --- /dev/null +++ b/test/old_tests/only_source/make_test_model.py @@ -0,0 +1,200 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6371.0 + +rr1=6361 +rr2=6381 +tt1=(38.0-0.3)/180*math.pi +tt2=(42.0+0.3)/180*math.pi +pp1=(23.0-0.3)/180*math.pi +pp2=(27.0+0.3)/180*math.pi + +n_rtp = [10,50,50] +dr = (rr2-rr1)/(n_rtp[0]-1) +dt = (tt2-tt1)/(n_rtp[1]-1) +dp = (pp2-pp1)/(n_rtp[2]-1) +rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + +# initial model +gamma = 0.0 +s0 = 1.0/6.0 +slow_p=0.06 +ani_p=0.04 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + # already initialized above + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + fun_init[ir,it,ip] = s0 + vel_init[ir,it,ip] = 1.0/s0 + + # true model + if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \ + and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi): + c+=1 + sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi)) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 120.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + +#r_earth = 6378.1370 +print("depminmax {} {}".format(R_earth-rr1,R_earth-rr2)) +print(c) + + +# %% +# write out in hdf5 format +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init) +fout_init.create_dataset('xi', data=xi_init) +fout_init.create_dataset('zeta', data=zeta_init) +fout_init.create_dataset('vel', data=vel_init) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true) +fout_true.create_dataset('xi', data=xi_true) +fout_true.create_dataset('zeta', data=zeta_true) +fout_true.create_dataset('vel', data=vel_true) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times. +# Format is as follows: +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# .... +# +# ``` + +# %% +import random +random.seed(1145141919810) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +arriv_t_dummy = 0.0 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_srcs = 8 # source will be placed around the domain +r_src = 15 # radius of the source in degree + +lines = [] + +#nij_rec = math.sqrt(n_rec[0]) + +pos_src=[] +#pos_rec=[] + +# center of the domain +lon_c = (pp1deg+pp2deg)/2.0 +lat_c = (tt1deg+tt2deg)/2.0 + +# step of angle in degree = 360.0/n_srcs +d_deg = 360.0/n_srcs + +for i_src in range(n_srcs): + + i_deg = i_src*d_deg + lon = lon_c + r_src*math.cos(i_deg/180.0*math.pi) + lat = lat_c + r_src*math.sin(i_deg/180.0*math.pi) + # depth of the source + dep = 10.0 + 0.5*i_src + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, 0, id_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + +# write out ev_arrivals file +fname = 'src_only_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# %% +# draw src and rec positions +import matplotlib.pyplot as plt + +for i_src in range(n_srcs): + plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# %% +# plot receivers +#for i_rec in range(n_rec[0]): +# plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + +# %% + + + diff --git a/test/old_tests/solver_performance/analysis_iter.ipynb b/test/old_tests/solver_performance/analysis_iter.ipynb new file mode 100644 index 0000000..a6fd33a --- /dev/null +++ b/test/old_tests/solver_performance/analysis_iter.ipynb @@ -0,0 +1,98 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "fcuda = \"iter_cuda.txt\"\n", + "fcpu = \"iter.txt\"\n", + "\n", + "v_cuda = []\n", + "v_cpu = []\n", + "t_cuda = []\n", + "t_cpu = []\n", + "\n", + "\n", + "# open file and read\n", + "with open(fcuda, \"r\") as f:\n", + " cuda = f.readlines()\n", + " t = 0\n", + " for line in cuda:\n", + " v = float(line.split(',')[0].split(\":\")[1])\n", + " v_cuda.append(v)\n", + " t += float(line.split(',')[-1])\n", + " t_cuda.append(t)\n", + "\n", + "with open(fcpu, \"r\") as f:\n", + " cpu = f.readlines()\n", + " t = 0\n", + " for line in cpu:\n", + " v = float(line.split(',')[0].split(\":\")[1])\n", + " v_cpu.append(v)\n", + " t += float(line.split(',')[-1])\n", + " t_cpu.append(t)\n", + "\n", + "# plot\n", + "plt.scatter(t_cuda, v_cuda, label=\"cuda\")\n", + "plt.scatter(t_cpu, v_cpu, label=\"cpu\")\n", + "#plt.plot(v_cuda, label=\"cuda\")\n", + "#plt.plot(v_cpu, label=\"cpu\")\n", + "\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/solver_performance/check_3d_out.ipynb b/test/old_tests/solver_performance/check_3d_out.ipynb new file mode 100644 index 0000000..7928dfe --- /dev/null +++ b/test/old_tests/solver_performance/check_3d_out.ipynb @@ -0,0 +1,126 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'vel_init')" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# final model\n", + "fpath_final_model = './OUTPUT_FILES/final_model.h5'\n", + "fpath_true_model = \"./test_model_init_100-100-100.h5\"\n", + "\n", + "import h5py\n", + "\n", + "# read vel, xi, eta dataset \n", + "with h5py.File(fpath_final_model, 'r') as f:\n", + " vel = f['vel'][:]\n", + " xi = f['xi'][:]\n", + " eta = f['eta'][:]\n", + " #zeta = f['zeta'][:]\n", + "\n", + "# read true model\n", + "with h5py.File(fpath_true_model, 'r') as f:\n", + " vel_true = f['vel'][:]\n", + " xi_true = f['xi'][:]\n", + " eta_true = f['eta'][:]\n", + " #zeta_true = f['zeta'][:]\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# plot vel\n", + "plt.figure()\n", + "plt.imshow(vel[:,:,5], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel')\n", + "\n", + "# plot xi\n", + "#plt.figure()\n", + "#plt.imshow(xi[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('xi')\n", + "#\n", + "## plot eta\n", + "#plt.figure()\n", + "#plt.imshow(eta[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('eta')\n", + "\n", + "# plot vel_true\n", + "plt.figure()\n", + "plt.imshow(vel_true[:,:,5], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel_init')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/solver_performance/check_src_rec_file.ipynb b/test/old_tests/solver_performance/check_src_rec_file.ipynb new file mode 100644 index 0000000..6424d3b --- /dev/null +++ b/test/old_tests/solver_performance/check_src_rec_file.ipynb @@ -0,0 +1,145 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# read src_rec file and check its arrival time and distance from src to rec\n", + "import numpy as np\n", + "\n", + "# read file\n", + "fpath = \"./src_rec_test_out.dat\"\n", + "\n", + "with open(fpath, \"r\") as f:\n", + " lines = f.readlines()\n", + "\n", + " # list to store src lon lat\n", + " src_pos = []\n", + " # list to store rec lon lat\n", + " rec_pos_tmp=[]\n", + " rec_pos = []\n", + "\n", + " for line in lines:\n", + " # src line if there are 13 elements\n", + " if len(line.split()) == 13:\n", + " # store source lon lat dep\n", + " stlon = float(line.split()[8])\n", + " stlat = float(line.split()[7])\n", + " src_pos.append([stlon, stlat])\n", + "\n", + " nrec = float(line.split()[11])\n", + " # rec line if there are 9 elements\n", + " elif len(line.split()) == 9:\n", + " # store receiver lon lat dep\n", + " rclon = float(line.split()[4])\n", + " rclat = float(line.split()[3])\n", + " rctime= float(line.split()[8])\n", + " # calc epicentral distance from src\n", + " dist = np.sqrt((stlon-rclon)**2 + (stlat-rclat)**2)\n", + " rec_pos_tmp.append([rclon, rclat, rctime, dist])\n", + "\n", + " nrec-=1\n", + " else:\n", + " raise ValueError(\"src_rec_test_out.dat file is not correct\")\n", + "\n", + " if nrec==0:\n", + " rec_pos.append(rec_pos_tmp)\n", + " # remove all rec_pos_tmp\n", + " rec_pos_tmp = []\n", + "\n", + "\n", + "\n", + "src_pos = np.array(src_pos)\n", + "rec_pos = np.array(rec_pos)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plot rec_pos for each src_pos with color by 3rd element\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# selected source\n", + "id_src = 0\n", + "\n", + "fig, axs = plt.subplots(2,1,figsize=(10,10))\n", + "\n", + "# plot arrival time\n", + "# src\n", + "axs[0].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + "# rec\n", + "axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=10, marker='o')\n", + "\n", + "# colorbar\n", + "cbar = plt.colorbar(axs[0].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,2], s=10, marker='o'))\n", + "cbar.set_label('arrival time')\n", + "\n", + "# plot epicentral distance\n", + "# src\n", + "axs[1].scatter(src_pos[id_src,0], src_pos[id_src,1], c='r', marker='o', s=100)\n", + "# rec\n", + "\n", + "axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=10, marker='o')\n", + "\n", + "# colorbar\n", + "cbar = plt.colorbar(axs[1].scatter(rec_pos[id_src][:,0], rec_pos[id_src][:,1], c=rec_pos[id_src][:,3], s=10, marker='o'))\n", + "cbar.set_label('epicentral distance')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rec_pos.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "min(rec_pos[id_src][:,2])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + }, + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/solver_performance/iter.txt b/test/old_tests/solver_performance/iter.txt new file mode 100644 index 0000000..99a05b4 --- /dev/null +++ b/test/old_tests/solver_performance/iter.txt @@ -0,0 +1,59 @@ +iteration 0: 2.68606, 6.23229, 0.226239 +iteration 1: 2.66762, 4.63719, 0.214316 +iteration 2: 2.73238, 4.08102, 0.213379 +iteration 3: 2.77977, 4.02757, 0.215531 +iteration 4: 2.75503, 3.96133, 0.213489 +iteration 5: 2.70629, 3.89322, 0.215038 +iteration 6: 2.64874, 3.82701, 0.228276 +iteration 7: 2.58487, 3.76405, 0.212526 +iteration 8: 2.5151, 3.70497, 0.210962 +iteration 9: 2.43957, 3.65005, 0.212779 +iteration 10: 2.35845, 3.59922, 0.215859 +iteration 11: 2.27194, 3.55211, 0.218057 +iteration 12: 2.18033, 3.50805, 0.223463 +iteration 13: 2.08403, 3.46617, 0.218698 +iteration 14: 1.98362, 3.42552, 0.215489 +iteration 15: 1.87984, 3.38526, 0.21415 +iteration 16: 1.77353, 3.34488, 0.211472 +iteration 17: 1.66557, 3.30434, 0.214 +iteration 18: 1.55685, 3.26406, 0.221782 +iteration 19: 1.44815, 3.22471, 0.21206 +iteration 20: 1.34022, 3.18704, 0.216203 +iteration 21: 1.23371, 3.15168, 0.212569 +iteration 22: 1.12917, 3.11898, 0.213464 +iteration 23: 1.02721, 3.08897, 0.213914 +iteration 24: 0.928483, 3.06131, 0.214082 +iteration 25: 0.833576, 3.03521, 0.214501 +iteration 26: 0.742987, 3.00939, 0.213422 +iteration 27: 0.657363, 2.98204, 0.221331 +iteration 28: 0.577238, 2.95076, 0.215693 +iteration 29: 0.502953, 2.9126, 0.223062 +iteration 30: 0.434765, 2.86425, 0.217287 +iteration 31: 0.372809, 2.811, 0.22508 +iteration 32: 0.317086, 2.74301, 0.213147 +iteration 33: 0.267455, 2.65645, 0.213563 +iteration 34: 0.223675, 2.55053, 0.214785 +iteration 35: 0.185412, 2.42585, 0.214462 +iteration 36: 0.152346, 2.28442, 0.213213 +iteration 37: 0.124075, 2.12939, 0.215673 +iteration 38: 0.100158, 1.96561, 0.214523 +iteration 39: 0.080066, 1.76634, 0.213322 +iteration 40: 0.0633697, 1.58065, 0.248635 +iteration 41: 0.0496571, 1.41768, 0.227537 +iteration 42: 0.0385206, 1.26136, 0.214846 +iteration 43: 0.0295813, 1.06553, 0.212869 +iteration 44: 0.0224539, 0.922364, 0.215505 +iteration 45: 0.0168533, 0.801121, 0.215831 +iteration 46: 0.012518, 0.676654, 0.222596 +iteration 47: 0.00919207, 0.572065, 0.212897 +iteration 48: 0.00666999, 0.473973, 0.215161 +iteration 49: 0.00478044, 0.388867, 0.214475 +iteration 50: 0.00338263, 0.313598, 0.212979 +iteration 51: 0.00236278, 0.246673, 0.213896 +iteration 52: 0.00162948, 0.185409, 0.216258 +iteration 53: 0.00111072, 0.122625, 0.220116 +iteration 54: 0.000747838, 0.0897312, 0.214795 +iteration 55: 0.000496874, 0.0652654, 0.214746 +iteration 56: 0.000325716, 0.0467522, 0.214539 +iteration 57: 0.000210643, 0.0329173, 0.222138 +iteration 58: 0.000134388, 0.0227652, 0.216016 diff --git a/test/old_tests/solver_performance/iter_cuda.txt b/test/old_tests/solver_performance/iter_cuda.txt new file mode 100644 index 0000000..a1de9f2 --- /dev/null +++ b/test/old_tests/solver_performance/iter_cuda.txt @@ -0,0 +1,100 @@ +iteration 0: 2.43339, 3.96179, 0.159862 +iteration 1: 2.44192, 3.78108, 0.154897 +iteration 2: 2.5263, 3.76444, 0.154628 +iteration 3: 2.63063, 3.75984, 0.155039 +iteration 4: 2.67147, 3.74936, 0.154697 +iteration 5: 2.69534, 3.72929, 0.15431 +iteration 6: 2.71752, 3.70022, 0.153941 +iteration 7: 2.73461, 3.70193, 0.153911 +iteration 8: 2.739, 3.95594, 0.152974 +iteration 9: 2.72188, 4.19984, 0.153161 +iteration 10: 2.67363, 4.43216, 0.153304 +iteration 11: 2.5887, 4.64604, 0.153101 +iteration 12: 2.46947, 4.72927, 0.152961 +iteration 13: 2.32484, 4.78864, 0.153142 +iteration 14: 2.16648, 4.85847, 0.152842 +iteration 15: 2.00464, 4.78123, 0.152974 +iteration 16: 1.84584, 4.55547, 0.153136 +iteration 17: 1.69311, 4.41426, 0.153256 +iteration 18: 1.54733, 4.18296, 0.152845 +iteration 19: 1.40845, 4.0995, 0.153227 +iteration 20: 1.27643, 4.03077, 0.152958 +iteration 21: 1.15168, 3.96649, 0.152978 +iteration 22: 1.03503, 3.90766, 0.153147 +iteration 23: 0.927456, 3.87121, 0.153028 +iteration 24: 0.829742, 3.77373, 0.15331 +iteration 25: 0.742219, 3.6127, 0.153352 +iteration 26: 0.664713, 3.40771, 0.153238 +iteration 27: 0.596583, 3.17937, 0.152994 +iteration 28: 0.536932, 2.9447, 0.153596 +iteration 29: 0.484754, 2.71571, 0.153629 +iteration 30: 0.439041, 2.49966, 0.15342 +iteration 31: 0.398856, 2.30025, 0.153487 +iteration 32: 0.363395, 2.11871, 0.153484 +iteration 33: 0.331981, 1.95478, 0.153198 +iteration 34: 0.304034, 1.80739, 0.152914 +iteration 35: 0.27906, 1.67506, 0.153539 +iteration 36: 0.256656, 1.55623, 0.152955 +iteration 37: 0.236486, 1.44935, 0.153024 +iteration 38: 0.218247, 1.35301, 0.153084 +iteration 39: 0.201717, 1.26594, 0.15378 +iteration 40: 0.186682, 1.187, 0.154371 +iteration 41: 0.172982, 1.11523, 0.15392 +iteration 42: 0.16048, 1.04978, 0.153982 +iteration 43: 0.14905, 0.989915, 0.153204 +iteration 44: 0.138585, 0.924638, 0.153238 +iteration 45: 0.128997, 0.856952, 0.153877 +iteration 46: 0.120206, 0.810159, 0.152934 +iteration 47: 0.112133, 0.767564, 0.152937 +iteration 48: 0.104707, 0.728427, 0.153035 +iteration 49: 0.097869, 0.692264, 0.15315 +iteration 50: 0.0915679, 0.658715, 0.152971 +iteration 51: 0.0857542, 0.6275, 0.153151 +iteration 52: 0.0803839, 0.598383, 0.153117 +iteration 53: 0.075418, 0.571163, 0.153092 +iteration 54: 0.0708228, 0.545663, 0.153108 +iteration 55: 0.0665671, 0.521722, 0.152929 +iteration 56: 0.0626222, 0.499192, 0.153113 +iteration 57: 0.0589632, 0.477937, 0.15294 +iteration 58: 0.0555681, 0.457812, 0.15317 +iteration 59: 0.0524166, 0.440694, 0.153242 +iteration 60: 0.0494894, 0.420541, 0.153075 +iteration 61: 0.046768, 0.400276, 0.152928 +iteration 62: 0.0442361, 0.383639, 0.153059 +iteration 63: 0.0418792, 0.368117, 0.153116 +iteration 64: 0.0396837, 0.353607, 0.153163 +iteration 65: 0.0376369, 0.339252, 0.152713 +iteration 66: 0.0357276, 0.324887, 0.152917 +iteration 67: 0.0339456, 0.312162, 0.153061 +iteration 68: 0.0322809, 0.300005, 0.153249 +iteration 69: 0.0307245, 0.288393, 0.153127 +iteration 70: 0.0292682, 0.277323, 0.153116 +iteration 71: 0.0279043, 0.266659, 0.153007 +iteration 72: 0.026626, 0.256528, 0.152774 +iteration 73: 0.0254269, 0.246895, 0.152918 +iteration 74: 0.0243012, 0.237501, 0.153007 +iteration 75: 0.0232433, 0.228719, 0.153019 +iteration 76: 0.0222484, 0.219205, 0.152934 +iteration 77: 0.0213118, 0.203637, 0.153179 +iteration 78: 0.0204296, 0.195446, 0.152973 +iteration 79: 0.0195979, 0.187844, 0.152942 +iteration 80: 0.0188131, 0.180718, 0.152817 +iteration 81: 0.0180721, 0.174, 0.15292 +iteration 82: 0.0173716, 0.167641, 0.152875 +iteration 83: 0.0167088, 0.161606, 0.153251 +iteration 84: 0.016081, 0.155857, 0.152889 +iteration 85: 0.0154857, 0.150374, 0.153223 +iteration 86: 0.0149207, 0.145136, 0.153109 +iteration 87: 0.014384, 0.140125, 0.153087 +iteration 88: 0.0138737, 0.135328, 0.152957 +iteration 89: 0.0133879, 0.130732, 0.152905 +iteration 90: 0.0129251, 0.126323, 0.153395 +iteration 91: 0.0124838, 0.122094, 0.153812 +iteration 92: 0.0120626, 0.118033, 0.153761 +iteration 93: 0.0116603, 0.114132, 0.153533 +iteration 94: 0.0112756, 0.110382, 0.153376 +iteration 95: 0.0109075, 0.106777, 0.153344 +iteration 96: 0.010555, 0.103309, 0.153178 +iteration 97: 0.0102171, 0.0999714, 0.153041 +iteration 98: 0.00989304, 0.0967585, 0.153617 +iteration 99: 0.00958196, 0.0936645, 0.153021 \ No newline at end of file diff --git a/test/old_tests/solver_performance/log_val b/test/old_tests/solver_performance/log_val new file mode 100644 index 0000000..9857711 --- /dev/null +++ b/test/old_tests/solver_performance/log_val @@ -0,0 +1,478 @@ +==24162== Memcheck, a memory error detector +==24162== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. +==24162== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info +==24162== Command: ../../build/TOMOATT -i input_params_100-100-100_1-1-1-1_gpu.yml +==24162== Parent PID: 24158 +==24162== +==24162== Warning: noted but unhandled ioctl 0x30000001 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x27 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x25 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x37 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x17 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: set address range perms: large range [0x200000000, 0x300200000) (noaccess) +==24162== Warning: set address range perms: large range [0x8fa5000, 0x28fa4000) (noaccess) +==24162== Warning: noted but unhandled ioctl 0x19 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: set address range perms: large range [0x10006000000, 0x10106000000) (noaccess) +==24162== Warning: noted but unhandled ioctl 0x49 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x21 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x1b with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: noted but unhandled ioctl 0x44 with no size/direction hints. +==24162== This could cause spurious value errors to appear. +==24162== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper. +==24162== Warning: set address range perms: large range [0x10006000000, 0x10106000000) (noaccess) +==24162== +==24162== HEAP SUMMARY: +==24162== in use at exit: 1,079,727 bytes in 174 blocks +==24162== total heap usage: 108,062 allocs, 107,888 frees, 2,182,558,459 bytes allocated +==24162== +==24162== 1 bytes in 1 blocks are definitely lost in loss record 1 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x53C960E: strdup (strdup.c:42) +==24162== by 0x75E2534: ??? +==24162== by 0x75DB373: ??? +==24162== by 0x568F61F: mca_base_framework_components_register (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x568F9B5: mca_base_framework_register (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x568FA13: mca_base_framework_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x503CBD3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 5 bytes in 1 blocks are definitely lost in loss record 4 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x53C960E: strdup (strdup.c:42) +==24162== by 0x5690090: opal_argv_append_nosize (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x56901B8: opal_argv_append (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x5690351: opal_argv_split_inter (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75F3FA7: ??? +==24162== by 0x75F5B26: ??? +==24162== by 0x56A76B1: mca_btl_base_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75C91B7: ??? +==24162== by 0x4FED533: mca_bml_base_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CBB3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== +==24162== 8 bytes in 1 blocks are definitely lost in loss record 8 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x56A9469: dlopen_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75A955F: ??? +==24162== by 0x75D434D: ??? +==24162== by 0x56A76B1: mca_btl_base_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75C91B7: ??? +==24162== by 0x4FED533: mca_bml_base_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CBB3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 8 bytes in 1 blocks are definitely lost in loss record 9 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x56A9469: dlopen_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75A955F: ??? +==24162== by 0x75F5834: ??? +==24162== by 0x56A76B1: mca_btl_base_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75C91B7: ??? +==24162== by 0x4FED533: mca_bml_base_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CBB3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 13 bytes in 1 blocks are definitely lost in loss record 10 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x53C960E: strdup (strdup.c:42) +==24162== by 0x75A95EC: ??? +==24162== by 0x75D434D: ??? +==24162== by 0x56A76B1: mca_btl_base_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75C91B7: ??? +==24162== by 0x4FED533: mca_bml_base_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CBB3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 13 bytes in 1 blocks are definitely lost in loss record 11 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x53C960E: strdup (strdup.c:42) +==24162== by 0x75A95EC: ??? +==24162== by 0x75F5834: ??? +==24162== by 0x56A76B1: mca_btl_base_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x75C91B7: ??? +==24162== by 0x4FED533: mca_bml_base_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CBB3: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 72 bytes in 1 blocks are possibly lost in loss record 59 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x79BE805: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7893A0A: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC07B9: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== +==24162== 72 bytes in 1 blocks are possibly lost in loss record 60 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x7890E34: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7892B41: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78932B9: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC12D7: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== +==24162== 79 (64 direct, 15 indirect) bytes in 1 blocks are definitely lost in loss record 61 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x75C117A: ??? +==24162== by 0x568544E: mca_base_framework_components_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x56F3E45: mca_mpool_base_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x568FA88: mca_base_framework_open (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libopen-pal.so.40.30.2) +==24162== by 0x503CB74: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 93 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC044A: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== by 0x1FECA9: main (main.cpp:42) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 94 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0479: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== by 0x1FECA9: main (main.cpp:42) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 95 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A12519: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A1264D: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A00E5B: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0827: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 96 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A12519: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A1264D: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7A00E81: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0827: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 97 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0C01: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== by 0x1FECA9: main (main.cpp:42) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 98 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7893021: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78932D4: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC12D7: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 99 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0CB2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== by 0x1FECA9: main (main.cpp:42) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 100 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0D4C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== by 0x1FECA9: main (main.cpp:42) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 101 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x799F135: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0DC7: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 102 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x799F155: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0DC7: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== +==24162== 152 bytes in 1 blocks are possibly lost in loss record 103 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x794043C: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x799F175: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC0DC7: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2C8370: cudaGetDeviceCount (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x1FE548: initialize_cuda() (cuda_initialize.cuh:39) +==24162== +==24162== 320 bytes in 1 blocks are possibly lost in loss record 114 of 151 +==24162== at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x40147D9: calloc (rtld-malloc.h:44) +==24162== by 0x40147D9: allocate_dtv (dl-tls.c:375) +==24162== by 0x40147D9: _dl_allocate_tls (dl-tls.c:634) +==24162== by 0x53B6834: allocate_stack (allocatestack.c:430) +==24162== by 0x53B6834: pthread_create@@GLIBC_2.34 (pthread_create.c:647) +==24162== by 0x789EC26: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x794C75E: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x7AC1A49: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x78AAAA2: ??? (in /usr/lib/x86_64-linux-gnu/libcuda.so.515.65.01) +==24162== by 0x2A8482: __cudart516 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x2A8547: __cudart1336 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x53BAF67: __pthread_once_slow (pthread_once.c:116) +==24162== by 0x2F6AE8: __cudart1612 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== by 0x29F0E6: __cudart514 (in /home/masarunagaso/workspace/TomoATT/build/TOMOATT) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 122 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EAB3: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 123 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EAB3: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 124 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EB7A: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 125 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EB7A: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 126 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EC26: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 127 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EC26: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 128 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9ECD4: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 129 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9ECD4: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 130 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EE36: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 131 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EE36: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 132 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EF96: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 133 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9EF96: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 134 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x502A9B6: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9F0F4: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== 688 bytes in 1 blocks are definitely lost in loss record 135 of 151 +==24162== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) +==24162== by 0x756D41B: ??? +==24162== by 0x502ACAE: ompi_op_base_op_select (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4F9F0F4: ompi_op_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x503CB0D: ompi_mpi_init (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x4FD0878: PMPI_Init_thread (in /home/masarunagaso/workspace/TomoATT/external_libs/local_mpi_hdf5/lib/libmpi.so.40.30.3) +==24162== by 0x20EE52: initialize_mpi() (mpi_funcs.h:68) +==24162== by 0x1FEC1D: main (main.cpp:28) +==24162== +==24162== LEAK SUMMARY: +==24162== definitely lost: 9,744 bytes in 21 blocks +==24162== indirectly lost: 15 bytes in 1 blocks +==24162== possibly lost: 2,136 bytes in 14 blocks +==24162== still reachable: 1,067,832 bytes in 138 blocks +==24162== suppressed: 0 bytes in 0 blocks +==24162== Reachable blocks (those to which a pointer was found) are not shown. +==24162== To see them, rerun with: --leak-check=full --show-leak-kinds=all +==24162== +==24162== For lists of detected and suppressed errors, rerun with: -s +==24162== ERROR SUMMARY: 35 errors from 35 contexts (suppressed: 0 from 0) diff --git a/test/old_tests/solver_performance/make_test_model.py b/test/old_tests/solver_performance/make_test_model.py new file mode 100644 index 0000000..5c1c563 --- /dev/null +++ b/test/old_tests/solver_performance/make_test_model.py @@ -0,0 +1,298 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +if __name__ == "__main__": + + # get arguments + import argparse + parser = argparse.ArgumentParser() + parser.add_argument("--n_rtp", type=int, nargs=3, default=[55,55,55]) + # n_sweep + parser.add_argument("--n_sweep", type=int, default=1) + # ndiv_rtp + parser.add_argument("--ndiv_rtp", type=int, nargs=3, default=[1,1,1]) + # use_gpu + parser.add_argument("--use_gpu", type=int, default=0) + + + n_rtp = parser.parse_args().n_rtp + n_sweep = parser.parse_args().n_sweep + ndiv_rtp = parser.parse_args().ndiv_rtp + use_gpu = parser.parse_args().use_gpu + + # + # create model file if not exists + # + + # filename + str_nrtp = str(n_rtp[0])+"-"+str(n_rtp[1])+"-"+str(n_rtp[2]) + fname_init = 'test_model_init_{}.h5'.format(str_nrtp) + fname_true = 'test_model_true_{}.h5'.format(str_nrtp) + + # grid params + R_earth = 6371.0 #6378.1370 + rr1=6070 + rr2=6400 + tt1=(30.0-1.5)/180*math.pi + tt2=(50.0+1.5)/180*math.pi + pp1=(15.0-1.5)/180*math.pi + pp2=(40.0+1.5)/180*math.pi + + import os + if not os.path.exists(fname_true): + + #n_rtp = [55,55,55] + dr = (rr2-rr1)/(n_rtp[0]-1) + dt = (tt2-tt1)/(n_rtp[1]-1) + dp = (pp2-pp1)/(n_rtp[2]-1) + rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) + tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) + pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + + # initial model + gamma = 0.0 + #s0 = 1.0/6.0 + slow_p=0.04 + ani_p=0.03 + + eta_init = np.zeros(n_rtp) + xi_init = np.zeros(n_rtp) + zeta_init = np.zeros(n_rtp) + fun_init = np.zeros(n_rtp) + vel_init = np.zeros(n_rtp) + + # true model + eta_true = np.zeros(n_rtp) + xi_true = np.zeros(n_rtp) + zeta_true = np.zeros(n_rtp) + fun_true = np.zeros(n_rtp) + vel_true = np.zeros(n_rtp) + + c=0 + for ir in range(n_rtp[2]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[0]): + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + + if (rr[ir]>6351): + fun_init[ir,it,ip] = 1.0/(5.8+(6371-rr[ir])/20.0*0.7) + elif (rr[ir]>6336): + fun_init[ir,it,ip] = 1.0/(6.5+(6351-rr[ir])/15.0*0.6) + elif (rr[ir]>5961): + fun_init[ir,it,ip] = 1.0/(8.0+(6336-rr[ir])/375.0*1) + else: + fun_init[ir,it,ip] = 1.0/9.0 + + vel_init[ir,it,ip] = 1.0/fun_init[ir,it,ip] + + # true model + if (tt[it] >= 30.0/180.0*math.pi and tt[it] <= 50.0/180.0*math.pi \ + and pp[ip] >= 15.0/180.0*math.pi and pp[ip] <= 40.0/180.0*math.pi \ + and rr[ir] >= 6211.0 and rr[ir] <= 6371.0): + c+=1 + sigma = math.sin(4.0*math.pi*(tt[it]-30.0/180.0*math.pi)/(20.0/180.0*math.pi)) \ + *math.sin(4.0*math.pi*(pp[ip]-15.0/180.0*math.pi)/(25.0/180.0*math.pi)) \ + *math.sin(2.0*math.pi*(rr[ir]-6211.0)/160.0) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 150.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = fun_init[ir,it,ip]/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + + + r_earth = R_earth #6378.1370 + print("depminmax {} {}".format(r_earth-rr1,r_earth-rr2)) + print(c) + + + # %% + # write out + import h5py + + # n_rtp to storing + fout_init = h5py.File(fname_init, 'w') + fout_true = h5py.File(fname_true, 'w') + + # write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init + fout_init.create_dataset('eta', data=eta_init) + fout_init.create_dataset('xi', data=xi_init) + fout_init.create_dataset('zeta',data=zeta_init) + fout_init.create_dataset('vel', data=vel_init) + + # writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true + fout_true.create_dataset('eta', data=eta_true) + fout_true.create_dataset('xi', data=xi_true) + fout_true.create_dataset('zeta',data=zeta_true) + fout_true.create_dataset('vel', data=vel_true) + + fout_init.close() + fout_true.close() + + # + # create src rec file + + # %% [markdown] + # # prepare src station file + # + # ``` + # 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event + # 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec + # 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 + # 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 + # + # ``` + + # %% + #import random + #random.seed(123456789) + + # dummys + year_dummy = 1998 + month_dummy = 1 + day_dummy = 1 + hour_dummy = 0 + minute_dummy = 0 + second_dummy = 0 + mag_dummy = 3.0 + id_dummy = 1000 + st_name_dummy = 'AAAA' + phase_dummy = 'P' + arriv_t_dummy = 0.0 + + tt1deg = tt1 * 180.0/math.pi + tt2deg = tt2 * 180.0/math.pi + pp1deg = pp1 * 180.0/math.pi + pp2deg = pp2 * 180.0/math.pi + + + n_src = 1 + n_rec = [1 for x in range(n_src)] + + + lines = [] + + pos_src=[] + pos_rec=[] + + dep_srcs=[12.902894] + lon_srcs=[16.794572] + lat_srcs=[37.503373] + + elev_recs = [0.0] + lon_recs = [29.812050] + lat_recs = [36.472809] + + + # create dummy src + for i_src in range(n_src): + # define one point in the domain (rr1 bottom, rr2 top) + dep = dep_srcs[i_src] + lon = lon_srcs[i_src] + lat = lat_srcs[i_src] + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + # create dummy station + for i_rec in range(n_rec[i_src]): + #elev_rec = random.uniform(0.0,-10.0) # elevation in m + #lon_rec = random.uniform(pp1deg,pp2deg) + #lat_rec = random.uniform(tt1deg,tt2deg) + + rec = [i_src, i_rec, st_name_dummy+"_"+str(i_rec), lat_recs[i_rec], lon_recs[i_rec], elev_recs[i_rec], phase_dummy, arriv_t_dummy] + lines.append(rec) + + pos_rec.append([lon_recs[i_rec],lat_recs[i_rec],elev_recs[i_rec]]) + + # write out ev_arrivals file + fname = 'src_rec_test.dat' + + with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + + # %% + # draw src and rec positions + #import matplotlib.pyplot as plt + # + #for i_src in range(n_src): + # plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + # + ## %% + ## plot receivers + #for i_rec in range(n_rec[0]): + # plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + + +str_input_file = """version : 2 + +domain : + #min_max_dep : [-21.863,308.8137] # depth in km + min_max_dep : [-29.0, 301.0] # depth in km with R = 6371.0 + min_max_lat : [28.5,51.5] # latitude in degree + min_max_lon : [13.5,41.5] # longitude in degree + n_rtp : [{},{},{}] # number of nodes + +source : + #src_dep_lat_lon : [5.0,40.0,24.0] # source depth in km, latitude, longitude in degree + #src_dep_lat_lon : [5750.6370,46.0,36.0] # source depth in km, latitude, longitude in degree + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver + +model : + init_model_type : '' # 'fd' (input file) or '1d_ak135' + init_model_path : './test_model_true_{}-{}-{}.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [{},{},{}] # number of subdomains + nproc_sub : {} # number of subprocess used for each subdomain + use_gpu : {} + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + +""".format(n_rtp[0],n_rtp[1],n_rtp[2],n_rtp[0],n_rtp[1],n_rtp[2], ndiv_rtp[0],ndiv_rtp[1],ndiv_rtp[2], n_sweep, use_gpu) + +str_nsweep_ndiv_rtp = str(n_sweep) + '-' + str(ndiv_rtp[0]) + '-' + str(ndiv_rtp[1]) + '-' + str(ndiv_rtp[2]) + +# write out +with open('input_params_{}_{}.yml'.format(str_nrtp, str_nsweep_ndiv_rtp), 'w') as f: + f.write(str_input_file) + + diff --git a/test/old_tests/solver_performance/plot_SIMD_effect.ipynb b/test/old_tests/solver_performance/plot_SIMD_effect.ipynb new file mode 100644 index 0000000..0ca2bae --- /dev/null +++ b/test/old_tests/solver_performance/plot_SIMD_effect.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# notebook for plotting the effect of SIMD on the solver performance\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# data is the fastest time among more than 10 iteration\n", + "# grid size is 100 x 100 x 100\n", + "\n", + "\n", + "t_local_no_simd=0.955768\n", + "t_local_avx=0.281595\n", + "t_fugaku_no_simd=5.10849\n", + "t_fugaku_avx=2.58907\n", + "t_local_cuda=0.058076\n", + "\n", + "speedup_local = t_local_no_simd / t_local_avx\n", + "speedup_fugaku = t_fugaku_no_simd / t_fugaku_avx\n", + "speedup_cuda = t_local_no_simd / t_local_cuda\n", + "\n", + "# plot\n", + "\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.set_title('Solver performance: 100x100x100 on single core')\n", + "#ax.set_xlabel('Grid size')\n", + "ax.set_ylabel('Elapsed time 1 iteration (best) [s]')\n", + "ax.set_xticks([0, 1, 2])\n", + "ax.set_xticklabels(['intel core i7', 'Fujitsu A64FX', 'NVIDIA GeForce GTX 1070'])\n", + "ax.set_ylim(0, 10)\n", + "ax.bar(0, t_local_no_simd, color='r', label='local (no SIMD)')\n", + "ax.bar(0, t_local_avx, color='b', label='local (AVX+FMA 256bits)')\n", + "ax.bar(1, t_fugaku_no_simd, color='r', label='Fugaku (no SIMD)')\n", + "ax.bar(1, t_fugaku_avx, color='b', label='Fugaku (ARM SVE+FMA 512bits)')\n", + "ax.bar(2, t_local_no_simd, color='r', label='local (no SIMD)')\n", + "ax.bar(2, t_local_cuda, color='b', label='local (CUDA NVIDIA GeForce GTX 1070)')\n", + "ax.legend()\n", + "\n", + "# add text speed up large font\n", + "ax.text(0, 1.4, 'speed up: {:.2f}x'.format(speedup_local), fontsize=15, ha='center')\n", + "ax.text(1, 5.5, 'speed up: {:.2f}x'.format(speedup_fugaku), fontsize=15, ha='center')\n", + "ax.text(2, 1.4, 'speed up: {:.2f}x'.format(speedup_cuda), fontsize=15, ha='center')\n", + "\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3Lt3T6783r170jJlxo0bh9TUVOl169atDxonERERUUkptYmcg4MDrK2tceDAAaksLS0Nx44dg7u7e77r6ejowMjISO5FRERE9Ckq0Wvk0tPTce3aNel9UlIS4uPjYWpqiooVKyI4OBjTp09HtWrV4ODggAkTJsDW1hYdOnQouaCJiIiISokSTeROnjyJr776Sno/YsQIAIC/vz8iIiIwevRoZGRkoH///nj69Cm+/PJL7NmzB7q6uiUVMhEREVGpIRNCiJIO4kNKS0uDsbExUlNTeZqViIggmyIr6RBIzYlJHzZ1UiV3KbXXyBERERFRwZjIEREREakpJnJEREREaoqJHBEREZGaYiJHREREpKaYyBERERGpKSZyRERERGqKiRwRERGRmmIiR0RERKSmmMgRERERqSkmckRERERqiokcERERkZpiIkdERESkppjIEREREakpJnJEREREaoqJHBEREZGaYiJHREREpKaYyBERERGpKSZyRERERGqKiRwRERGRmmIiR0RERKSmmMgRERERqSkmckRERERqiokcERERkZpiIkdERESkprRKOgAiKr1kspKOgNSdECUdAdGnjSNyRERERGqKiRwRERGRmmIiR0RERKSmmMgRERERqSkmckRERERqiokcERERkZpiIkdERESkppjIEREREakpJnJEREREaoqJHBEREZGaYiJHREREpKaYyBERERGpKSZyRERERGqKiRwRERGRmmIiR0RERKSmmMgRERERqSkmckRERERqiokcERERkZpiIkdERESkpkp1Ijd58mTIZDK5l5OTU0mHRURERFQqaJV0AIVxdXXF/v37pfdaWqU+ZCIiIqKPotRnRVpaWrC2ti7pMIiIiIhKnVJ9ahUArl69CltbW1SuXBk9evRAcnJySYdEREREVCqU6hG5hg0bIiIiAtWrV0dKSgqmTJmCpk2b4sKFCzA0NFS6TlZWFrKysqT3aWlpHytcIiIioo+qVCdyPj4+0v/XqlULDRs2RKVKlbBt2zYEBgYqXWfWrFmYMmXKxwqRiIiIqMSU+lOrbzIxMYGjoyOuXbuWb51x48YhNTVVet26desjRkhERET08ahVIpeeno7r16/DxsYm3zo6OjowMjKSexERERF9ikp1Ijdq1ChER0fjxo0bOHLkCL799ltoamrC19e3pEMjIiIiKnGl+hq5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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot speed up for 200 200 200 grid\n", + "\n", + "t_local_no_simd=186.571/10\n", + "t_local_avx=25.903/10\n", + "t_gpu=5.45952/10\n", + "\n", + "speedup_local = 1.0\n", + "speedup_avx = t_local_no_simd / t_local_avx\n", + "speedup_cuda = t_local_no_simd / t_gpu\n", + "\n", + "\n", + "fig, ax = plt.subplots()\n", + "\n", + "ax.set_title('Speed up ratio for forward simulation with 200x200x200 grid')\n", + "\n", + "ax.set_ylabel('Speed up ratio')\n", + "ax.set_xticks([0, 1, 2])\n", + "ax.set_xticklabels(['baseline', 'intel core i7 with SIMD', 'NVIDIA GeForce GTX 1070'])\n", + "\n", + "\n", + "#ax.set_ylim(0, 10)\n", + "ax.bar(0, 1, color='r', label='baseline (intel core i7 no SIMD)') \n", + "ax.bar(1, speedup_avx, color='b', label='intel core i7 + \\nmemory relocation\\n + SIMD (AVX+FMA 256bits)')\n", + "ax.bar(2, speedup_cuda, color='g', label='memory relocation \\n+ gpu (CUDA NVIDIA GeForce GTX 1070)')\n", + "ax.legend()\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig('speedup_200x200x200.png', dpi=300)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "1472887337ddd1717660a5ad84f7170e87aa3d39bd2f4b7d54c31e0901f516a9" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/solver_performance/pvpython_test.py b/test/old_tests/solver_performance/pvpython_test.py new file mode 100644 index 0000000..276b7fb --- /dev/null +++ b/test/old_tests/solver_performance/pvpython_test.py @@ -0,0 +1,139 @@ +from paraview.simple import * + + +if __name__ == '__main__': + # get args + args = sys.argv + if len(args) != 3: + print("Usage: pvpython draw_slice.py ") + sys.exit(1) + + # get data + fpath = args[1] + name_dset = args[2] + + + #fpath = "OUTPUT_FILES/out_data_sim_0.xmf" + #name_dset = 'fun_inv_0000' + + # create a new 'XDMF Reader' + out_data_sim_0xmf = XDMFReader(registrationName=fpath.split('/')[-1], FileNames=[fpath]) + + # Limit the data array to be read + # Properties modified on out_data_sim_0xmf + out_data_sim_0xmf.PointArrayStatus = [name_dset] + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + ## show data in view + #out_data_sim_0xmfDisplay = Show(out_data_sim_0xmf, renderView1, 'UnstructuredGridRepresentation') + + ## trace defaults for the display properties. + #out_data_sim_0xmfDisplay.Representation = 'Surface' + + # reset view to fit data + #renderView1.ResetCamera(False) + + # get the material library + materialLibrary1 = GetMaterialLibrary() + + # get color transfer function/color map for 'T_res_src_0_inv_0000' + name_dsetLUT = GetColorTransferFunction(name_dset) + + # get opacity transfer function/opacity map for 'T_res_src_0_inv_0000' + name_dsetPWF = GetOpacityTransferFunction(name_dset) + + + # show color bar/color legend + #out_data_sim_0xmfDisplay.SetScalarBarVisibility(renderView1, True) + + # update the view to ensure updated data information + #renderView1.Update() + + # create a new 'Slice' + slice1 = Slice(registrationName='Slice1', Input=out_data_sim_0xmf) + + # Properties modified on slice1.SliceType + slice1.SliceType.Normal = [0.0, 0.0, 1.0] + + # show data in view + slice1Display = Show(slice1, renderView1, 'GeometryRepresentation') + + # trace defaults for the display properties. + slice1Display.Representation = 'Surface' + + # hide data in view + Hide(out_data_sim_0xmf, renderView1) + + # show color bar/color legend + slice1Display.SetScalarBarVisibility(renderView1, True) + + # trace defaults for the display properties. + slice1Display.Representation = 'Surface' + + + # rescale color and/or opacity maps used to include current data range + slice1Display.RescaleTransferFunctionToDataRange(True, False) + + # show color bar/color legend + slice1Display.SetScalarBarVisibility(renderView1, True) + + + # + # change the position of color bar + # + # Properties modified on slice1Display.DataAxesGrid + slice1Display.DataAxesGrid.GridAxesVisibility = 1 + + # get color legend/bar for t_res_src_0_inv_0000LUT in view renderView1 + name_dsetLUTColorBar = GetScalarBar(name_dsetLUT, renderView1) + + # change scalar bar placement + name_dsetLUTColorBar.Orientation = 'Horizontal' + name_dsetLUTColorBar.WindowLocation = 'Any Location' + name_dsetLUTColorBar.Position = [0.33262344353799916, 0.24363636363636363] + name_dsetLUTColorBar.ScalarBarLength = 0.3299999999999998 + + + + # update the view to ensure updated data information + #renderView1.Update() + + + # + # axis options + # + + # toggle 3D widget visibility (only when running from the GUI) + Hide3DWidgets(proxy=slice1.SliceType) + + # Properties modified on slice1Display.DataAxesGrid + slice1Display.DataAxesGrid.GridAxesVisibility = 1 + + + # + # window layout and camera settings + # + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(1280, 980) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [6086.06543558693, 0.0, 7825.811009542308] + renderView1.CameraFocalPoint = [6086.06543558693, 0.0, -3.410605131648481e-13] + renderView1.CameraViewUp = [1.0, 2.220446049250313e-16, 0.0] + renderView1.CameraParallelScale = 2025.468932642534 + + # save screenshot + SaveScreenshot('test_screenshot.png', renderView1, ImageResolution=[2560,1280]) + + Render() + Interact() \ No newline at end of file diff --git a/test/old_tests/solver_performance/pyscript_written_by_paraview.py b/test/old_tests/solver_performance/pyscript_written_by_paraview.py new file mode 100644 index 0000000..5677639 --- /dev/null +++ b/test/old_tests/solver_performance/pyscript_written_by_paraview.py @@ -0,0 +1,115 @@ +# trace generated using paraview version 5.10.1 +#import paraview +#paraview.compatibility.major = 5 +#paraview.compatibility.minor = 10 + +#### import the simple module from the paraview +from paraview.simple import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + +# create a new 'XDMF Reader' +out_data_sim_0xmf = XDMFReader(registrationName='out_data_sim_0.xmf', FileNames=['/home/masarunagaso/workspace/TomoATT/test/solver_performance/OUTPUT_FILES/out_data_sim_0.xmf']) + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +out_data_sim_0xmfDisplay = Show(out_data_sim_0xmf, renderView1, 'UnstructuredGridRepresentation') + +# trace defaults for the display properties. +out_data_sim_0xmfDisplay.Representation = 'Surface' + +# reset view to fit data +renderView1.ResetCamera(False) + +# get the material library +materialLibrary1 = GetMaterialLibrary() + +# show color bar/color legend +out_data_sim_0xmfDisplay.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# get color transfer function/color map for 'procid' +procidLUT = GetColorTransferFunction('procid') + +# get opacity transfer function/opacity map for 'procid' +procidPWF = GetOpacityTransferFunction('procid') + +# create a new 'Slice' +slice1 = Slice(registrationName='Slice1', Input=out_data_sim_0xmf) + +# show data in view +slice1Display = Show(slice1, renderView1, 'GeometryRepresentation') + +# trace defaults for the display properties. +slice1Display.Representation = 'Surface' + +# hide data in view +Hide(out_data_sim_0xmf, renderView1) + +# show color bar/color legend +slice1Display.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on slice1.SliceType +slice1.SliceType.Normal = [0.0, 0.0, 1.0] + +# update the view to ensure updated data information +renderView1.Update() + +# set scalar coloring +ColorBy(slice1Display, ('POINTS', 'T_res_src_0_inv_0000')) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(procidLUT, renderView1) + +# rescale color and/or opacity maps used to include current data range +slice1Display.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +slice1Display.SetScalarBarVisibility(renderView1, True) + +# get color transfer function/color map for 'T_res_src_0_inv_0000' +t_res_src_0_inv_0000LUT = GetColorTransferFunction('T_res_src_0_inv_0000') + +# get opacity transfer function/opacity map for 'T_res_src_0_inv_0000' +t_res_src_0_inv_0000PWF = GetOpacityTransferFunction('T_res_src_0_inv_0000') + +# toggle 3D widget visibility (only when running from the GUI) +Hide3DWidgets(proxy=slice1.SliceType) + +# Properties modified on slice1Display.DataAxesGrid +slice1Display.DataAxesGrid.GridAxesVisibility = 1 + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# get layout +layout1 = GetLayout() + +#-------------------------------- +# saving layout sizes for layouts + +# layout/tab size in pixels +layout1.SetSize(2329, 1650) + +#----------------------------------- +# saving camera placements for views + +# current camera placement for renderView1 +renderView1.CameraPosition = [6086.06543558693, 0.0, 7825.811009542308] +renderView1.CameraFocalPoint = [6086.06543558693, 0.0, -3.410605131648481e-13] +renderView1.CameraViewUp = [1.0, 2.220446049250313e-16, 0.0] +renderView1.CameraParallelScale = 2025.468932642534 + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file diff --git a/test/old_tests/solver_performance/pyscript_written_by_paraview2.py b/test/old_tests/solver_performance/pyscript_written_by_paraview2.py new file mode 100644 index 0000000..d35365e --- /dev/null +++ b/test/old_tests/solver_performance/pyscript_written_by_paraview2.py @@ -0,0 +1,106 @@ +# trace generated using paraview version 5.10.1 +#import paraview +#paraview.compatibility.major = 5 +#paraview.compatibility.minor = 10 + +#### import the simple module from the paraview +from paraview.simple import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + +# create a new 'XDMF Reader' +out_data_sim_0xmf = XDMFReader(registrationName='out_data_sim_0.xmf', FileNames=['/home/masarunagaso/workspace/TomoATT/test/solver_performance/OUTPUT_FILES/out_data_sim_0.xmf']) + +# Properties modified on out_data_sim_0xmf +out_data_sim_0xmf.PointArrayStatus = ['T_res_src_0_inv_0000'] + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +out_data_sim_0xmfDisplay = Show(out_data_sim_0xmf, renderView1, 'UnstructuredGridRepresentation') + +# trace defaults for the display properties. +out_data_sim_0xmfDisplay.Representation = 'Surface' + +# reset view to fit data +renderView1.ResetCamera(False) + +# get the material library +materialLibrary1 = GetMaterialLibrary() + +# show color bar/color legend +out_data_sim_0xmfDisplay.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# get color transfer function/color map for 'T_res_src_0_inv_0000' +t_res_src_0_inv_0000LUT = GetColorTransferFunction('T_res_src_0_inv_0000') + +# get opacity transfer function/opacity map for 'T_res_src_0_inv_0000' +t_res_src_0_inv_0000PWF = GetOpacityTransferFunction('T_res_src_0_inv_0000') + +# create a new 'Slice' +slice1 = Slice(registrationName='Slice1', Input=out_data_sim_0xmf) + +# Properties modified on slice1.SliceType +slice1.SliceType.Normal = [0.0, 0.0, 1.0] + +# show data in view +slice1Display = Show(slice1, renderView1, 'GeometryRepresentation') + +# trace defaults for the display properties. +slice1Display.Representation = 'Surface' + +# hide data in view +Hide(out_data_sim_0xmf, renderView1) + +# show color bar/color legend +slice1Display.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# toggle 3D widget visibility (only when running from the GUI) +Hide3DWidgets(proxy=slice1.SliceType) + +# Properties modified on slice1Display.DataAxesGrid +slice1Display.DataAxesGrid.GridAxesVisibility = 1 + +# get color legend/bar for t_res_src_0_inv_0000LUT in view renderView1 +t_res_src_0_inv_0000LUTColorBar = GetScalarBar(t_res_src_0_inv_0000LUT, renderView1) + +# change scalar bar placement +t_res_src_0_inv_0000LUTColorBar.Orientation = 'Horizontal' +t_res_src_0_inv_0000LUTColorBar.WindowLocation = 'Any Location' +t_res_src_0_inv_0000LUTColorBar.Position = [0.33262344353799916, 0.34363636363636363] +t_res_src_0_inv_0000LUTColorBar.ScalarBarLength = 0.3299999999999998 + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# get layout +layout1 = GetLayout() + +#-------------------------------- +# saving layout sizes for layouts + +# layout/tab size in pixels +layout1.SetSize(2329, 1650) + +#----------------------------------- +# saving camera placements for views + +# current camera placement for renderView1 +renderView1.CameraPosition = [6086.06543558693, 0.0, 7825.811009542308] +renderView1.CameraFocalPoint = [6086.06543558693, 0.0, -3.410605131648481e-13] +renderView1.CameraViewUp = [1.0, 2.220446049250313e-16, 0.0] +renderView1.CameraParallelScale = 2025.468932642534 + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file diff --git a/test/old_tests/solver_performance/run_performance_test.ipynb b/test/old_tests/solver_performance/run_performance_test.ipynb new file mode 100644 index 0000000..c4dc4a3 --- /dev/null +++ b/test/old_tests/solver_performance/run_performance_test.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# grid size\n", + "\n", + "def run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p, use_gpu=False, run_on_hpc=False):\n", + " print(\"start test ngrid = {}, n_sweep = {}, ndiv_r = {}, ndiv_t = {}, ndiv_p = {}\".format(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + "\n", + " # create simulation file by running make_test_model.py\n", + " import os\n", + " if (use_gpu == False):\n", + " os.system('python3 make_test_model.py --n_rtp {} {} {} --n_sweep {} --ndiv_rtp {} {} {}'. format(n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + " else:\n", + " os.system('python3 make_test_model.py --n_rtp {} {} {} --n_sweep {} --ndiv_rtp {} {} {} --use_gpu 1'. format(n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + " \n", + "\n", + " #\n", + " # run simulatoin and store time file\n", + " #\n", + " total_nprocs = n_sweep * ndiv_r * ndiv_t * ndiv_p\n", + " print('total number of processes: {}'.format(total_nprocs))\n", + "\n", + " if (run_on_hpc == False):\n", + " # run simulation\n", + " tomo_exec = \"../../build/TOMOATT\"\n", + " mpi_path = \"../../external_libs/local_mpi_hdf5/bin/\"\n", + " os.system('{}/mpirun --use-hwthread-cpus -np {} {} -i input_params_{}-{}-{}_{}-{}-{}-{}.yml'.format(mpi_path,total_nprocs, tomo_exec, n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + "\n", + " # change filename of time.txt to time_{}-{}-{}_{}-{}-{}-{}.txt\n", + " os.system('mv time.txt time_{}-{}-{}_{}-{}-{}-{}.txt'.format(n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + " else:\n", + " # total number of processes\n", + " total_nprocs = n_sweep * ndiv_r * ndiv_t * ndiv_p\n", + "\n", + " # write out job script (append)\n", + " job_script = open('job_script.sh', 'a')\n", + " job_script.write('''\n", + "# run simulation \n", + "mpirun -np {0} $EXEC -i input_params_{1}-{2}-{3}_{4}-{5}-{6}-{7}.yml\n", + "# change filename of time.txt to time_{1}-{2}-{3}_{4}-{5}-{6}-{7}.txt\n", + "mv time.txt time_{1}-{2}-{3}_{4}-{5}-{6}-{7}.txt\n", + "\n", + " '''.format(total_nprocs,n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + "\n", + " job_script.close()\n", + "\n", + " # modify the jobscript file name\n", + " import os\n", + " os.system('mv job_script.sh job_script_{}-{}-{}_{}-{}-{}-{}.sh'.format(n_grid, n_grid, n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p))\n", + "\n", + "def prepare_job_script_header(nnodes, nprocs, id_proj, path_TATT):\n", + " job_script = open('job_script.sh', 'w')\n", + "\n", + " aspire = False\n", + " fugaku = True\n", + "\n", + " if (aspire):\n", + " # for aspire 1\n", + " # normal queue has 24 cores per node, 4GB per core or 96GB per node\n", + " job_script.write('''\n", + "#!/bin/bash\n", + "#PBS -q normal\n", + "#PBS -l select={0}:ncpus={1}:mpiprocs={1}\n", + "#PBS -l walltime=05:00:00\n", + "#PBS -N tomoatt\n", + "#PBS -j oe\n", + "#PBS -o tomoatt.out\n", + "#PBS -P {2}\n", + "\n", + "module load intel/2018.3\n", + "module load intelmpi/2018.3\n", + "module load hdf5/1.10.4\n", + "\n", + "cd $PBS_O_WORKDIR\n", + "\n", + "EXEC={3}\n", + "\n", + "\n", + " '''.format(nnodes, nprocs, id_proj, path_TATT))\n", + "\n", + " if (fugaku):\n", + " # for Fugaku\n", + " # normal queue has 48 cores per node \n", + " job_script.write('''\n", + "#!/bin/bash\n", + "#PJM -L \"node={0}\" # number of nodes\n", + "#PJM -L \"rscgrp=small-s1\" # resource group\n", + "#PJM -L \"elapse=01:00:00\" # elapse time limit\n", + "#PJM --mpi \"max-proc-per-node={1}\" # number of processes for each node\n", + "#PJM -x PJM_LLIO_GFSCACHE=/vol0004 # use temporal data directory for large output\n", + "#PJM -g {2} # specify the group\n", + "#PJM -S # output statistics file\n", + "\n", + "export OMP_NUM_THREADS=1\n", + "\n", + ". /vol0004/apps/oss/spack/share/spack/setup-env.sh\n", + "spack load /jfzaut5\n", + "\n", + "EXEC={3}\n", + "\n", + "\n", + " '''.format(nnodes, (int)(nprocs/nnodes), id_proj, path_TATT))\n", + "\n", + "def assign_procs(nprocs, nnodes):\n", + "\n", + " # assersion if nprocs is not divisible by nnodes\n", + " assert (nprocs % nnodes == 0), \"nprocs is not divisible by nnodes\"\n", + "\n", + " if nnodes == 1:\n", + " return nprocs, 1,1,1\n", + "\n", + " if nnodes == 2:\n", + " return (int)(nprocs/2), 2,1,1\n", + " \n", + " if nnodes == 4:\n", + " return (int)(nprocs/4), 2,2,1\n", + "\n", + " if nnodes == 8:\n", + " return (int)(nprocs/8), 2,2,2\n", + "\n", + " if nnodes == 16:\n", + " return (int)(nprocs/16), 2,2,4\n", + " \n", + " if nnodes == 32:\n", + " return (int)(nprocs/32), 2,4,4\n", + "\n", + " if nnodes == 64:\n", + " return (int)(nprocs/64), 4,4,4\n", + " \n", + " else:\n", + " #error\n", + " print (\"error: nnodes = {}\".format(nnodes))\n", + " return 0,0,0,0\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "start test ngrid = 100, n_sweep = 1, ndiv_r = 1, ndiv_t = 1, ndiv_p = 1\n", + "total number of processes: 1\n", + "start test ngrid = 100, n_sweep = 12, ndiv_r = 1, ndiv_t = 1, ndiv_p = 1\n", + "total number of processes: 12\n", + "start test ngrid = 100, n_sweep = 12, ndiv_r = 2, ndiv_t = 1, ndiv_p = 1\n", + "total number of processes: 24\n", + "start test ngrid = 100, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 1\n", + "total number of processes: 48\n", + "start test ngrid = 200, n_sweep = 12, ndiv_r = 2, ndiv_t = 1, ndiv_p = 1\n", + "total number of processes: 24\n", + "start test ngrid = 200, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 1\n", + "total number of processes: 48\n", + "start test ngrid = 200, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 2\n", + "total number of processes: 96\n", + "start test ngrid = 200, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 4\n", + "total number of processes: 192\n", + "start test ngrid = 400, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 2\n", + "total number of processes: 96\n", + "start test ngrid = 400, n_sweep = 12, ndiv_r = 2, ndiv_t = 2, ndiv_p = 4\n", + "total number of processes: 192\n", + "start test ngrid = 400, n_sweep = 12, ndiv_r = 2, ndiv_t = 4, ndiv_p = 4\n", + "total number of processes: 384\n", + "start test ngrid = 400, n_sweep = 12, ndiv_r = 4, ndiv_t = 4, ndiv_p = 4\n", + "total number of processes: 768\n" + ] + } + ], + "source": [ + "#n_grids = [10,50,100,150]\n", + "n_grids = [100, 200, 400]\n", + "\n", + "hpc_analysis = True # output for hpc analysis\n", + "\n", + "if hpc_analysis == True:\n", + "\n", + " #\n", + " # ASPIRE 1 @ NSCC (24 processes per node)\n", + " #\n", + " #id_proj = \"...\"\n", + " #path_TATT = \"/home/.../tomoatt\"\n", + "\n", + " #n_procs = [[1,6,12,24], # single node\n", + " # [24,48,96,8], # 1-4 nodes\n", + " # [48,96,192,384]] # 2-16 nodes\n", + " \n", + " # calculate required nodes for each grid and n_procs\n", + " #n_nodes = [[1,1,1,1],\n", + " # [1,2,4,8],\n", + " # [2,4,8,16]]\n", + "\n", + " #\n", + " # Fugaku @ RIKEN (48 processes per node, but it becomes 12 when using sve)\n", + " #\n", + " id_proj = \"hp220155\" # project ID\n", + " path_TATT = \"/home/u10304/TomoATT/build/TOMOATT\" # path to tomoatt executable on Fugaku\n", + "\n", + " n_procs = [[1,12,24,48], # 1-4 nodes\n", + " [24,48,96,192], # 2-16 nodes\n", + " [96,192,384,768]] # 4-32 nodes\n", + " \n", + " # calculate required nodes for each grid and n_procs\n", + " n_nodes = [[1,1,2,4],\n", + " [2,4,8,16],\n", + " [8,16,32,64]]\n", + "\n", + "\n", + "for i, n_grid in enumerate(n_grids):\n", + "\n", + " n_sweep = 1\n", + " ndiv_r = 1\n", + " ndiv_t = 1\n", + " ndiv_p = 1 \n", + "\n", + " # test on local\n", + " if (hpc_analysis == False): \n", + "\n", + " # baseline\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p, use_gpu=False)\n", + "\n", + " # parallel on sweep\n", + " n_sweep = 2\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " n_sweep = 4\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " n_sweep = 8\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " n_sweep = 12\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + " # reset n_sweep\n", + " n_sweep = 1\n", + "\n", + " # parallel on rtp\n", + " ndiv_r = 2 # total 2 procs\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " ndiv_t = 2 # total 4 procs\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " ndiv_p = 2 # total 8 procs\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " ndiv_r = 2; ndiv_t = 2; ndiv_p = 3 # total 12 procs\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + "\n", + " # test on hpc\n", + " else:\n", + " for j, n_proc in enumerate(n_procs[i]):\n", + " nnode = n_nodes[i][j]\n", + " prepare_job_script_header(nnode, n_proc, id_proj, path_TATT)\n", + " n_sweep, ndiv_r, ndiv_t, ndiv_p = assign_procs(n_proc, nnode)\n", + " run_single_test(n_grid, n_sweep, ndiv_r, ndiv_t, ndiv_p, run_on_hpc=True)\n", + "\n", + "\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "./bench_fugaku/time_100-100-100_1-1-1-1.txt\n", + "./bench_fugaku/time_100-100-100_12-1-1-1.txt\n", + "./bench_fugaku/time_100-100-100_12-2-1-1.txt\n", + "./bench_fugaku/time_100-100-100_12-2-2-1.txt\n", + "./bench_fugaku/time_200-200-200_12-2-1-1.txt\n", + "./bench_fugaku/time_200-200-200_12-2-2-1.txt\n", + "./bench_fugaku/time_200-200-200_12-2-2-2.txt\n", + "./bench_fugaku/time_200-200-200_12-2-2-4.txt\n", + "./bench_fugaku/time_400-400-400_12-2-2-2.txt\n", + "./bench_fugaku/time_400-400-400_12-2-2-4.txt\n", + "./bench_fugaku/time_400-400-400_12-2-4-4.txt\n", + "./bench_fugaku/time_400-400-400_12-4-4-4.txt\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAIjCAYAAAAZajMiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1QU1/v48fcusHRQigIqxYq9oChqosaCvcSuScTea6z5GLCbGDUajRo1YiOxxG7sRpKo2MVYEBuKDTsgHXbv7w9+zNcVUDDqgrmvc/Ycd+bOzDNb5Nk7d56rEkIIJEmSJEmSJOkDoDZ0AJIkSZIkSZL0tsjkVpIkSZIkSfpgyORWkiRJkiRJ+mDI5FaSJEmSJEn6YMjkVpIkSZIkSfpgyORWkiRJkiRJ+mDI5FaSJEmSJEn6YMjkVpIkSZIkSfpgyORWkiRJkiRJ+mDI5FaSpCwFBwejUqn47bffDB1KjkyaNAmVSsXjx48NHcq/tnLlSlQqFTdv3jR0KNJLmjdvTt++fQ0dRo75+flhZWX11vZXq1Ytxo4d+9b2J0nvgkxuJckAMpKXFx+FChWiQYMG7N6929DhSXnQokWLWLlypaHDyFZYWBgqlQozMzOio6OzbafT6Vi8eDFVqlTB3Nwce3t7PvnkE86dO5ftNkFBQahUqiyTtPr162f6LmU8Ll++DMDEiRNRqVQEBwdn2n7dunWoVCoWLlz42nM8cuQI+/btY9y4ccqyjB+BWT26dOny2n3mN+PGjePHH38kKirK0KFIUraMDR2AJP2XTZkyBQ8PD4QQPHjwgJUrV9K8eXN27NhBy5YtDR2elIcsWrQIBwcH/Pz8DB1KltauXYuTkxPPnj3jt99+o0+fPlm269WrF0FBQXzxxRcMGTKE+Ph4zp49y8OHD7NsHxcXx9ixY7G0tMz22EWLFmXmzJmZlru4uADpye26desYMGAA//zzDxqNBoDo6GhGjhxJjRo1GDRo0GvP8bvvvqNhw4aULFky07phw4ZRo0YNvWXu7u6v3Wd+06ZNG2xsbFi0aBFTpkwxdDiSlCWZ3EqSATVr1ozq1asrz3v37k3hwoX59ddfZXKbQ/Hx8a9MfPLafj9EQgh++eUXunXrRkREBEFBQVkmtxs2bGDVqlVs3ryZdu3a5Wjf06ZNw9ramgYNGrB169Ys29ja2vLZZ59luw8zMzMWL15MkyZNmDlzJgEBAQCMHz+eR48esXv3btTqV1/IfPjwIb///jtLlizJcv1HH31Ehw4dcnRO+ZlaraZDhw6sXr2ayZMno1KpDB2SJGUihyVIUh5SoEABzM3NMTbW/92p0+mYN28e5cuXx8zMjMKFC9O/f3+ePXum187d3Z2WLVty+PBhvL29MTMzo3jx4qxevTrTsTJ6rdzd3TE1NaVo0aJ88cUXmcas6nQ6pk+fTtGiRTEzM6Nhw4Zcu3ZNr039+vWpUKEC//zzD/Xq1cPCwoKSJUsq43X//PNPatasibm5OWXKlOHAgQN629+6dYtBgwZRpkwZ5VJ1x44dM405zRjO8eeffzJo0CAKFSpE0aJFs309b926RcmSJalQoQIPHjzItl3GeN1Lly7RrVs3ChYsSN26dZX1a9euxcvLC3Nzc+zs7OjSpQu3b9/W28fVq1dp3749Tk5OmJmZUbRoUbp06UJMTAwAN2/eRKVSZTm0QKVSMWnSpGzjc3d35+LFi/z555/KJe/69etn2x7Sk/Mvv/ySYsWKYWpqSpkyZZg9ezZCiEzHHjJkCFu3bqVChQqYmppSvnx59uzZ88r9v+jIkSPcvHmTLl260KVLF/766y/u3LmTqd3cuXPx9vamXbt26HQ64uPjX7nfq1ev8v333zN37txM34ncaty4Md26dWPmzJlcuXKFkJAQli5dyvDhw6lSpcprt//9999JS0ujUaNGuT62u7t7lj3u9evXz/Q+3rp1i9atW2NpaUmhQoUYOXIke/fuzTSs4u+//6Zjx464urpiampKsWLFGDlyJImJia+NJzQ0FEdHR+rXr09cXJzy+X9ZdmO/GzduzK1btwgNDc3B2UvS+yd7biXJgGJiYnj8+DFCCB4+fMiCBQuIi4vL1AvVv39/Vq5cSc+ePRk2bBgREREsXLiQs2fPcuTIEUxMTJS2165do0OHDvTu3ZsePXqwYsUK/Pz88PLyonz58kD6pd6PPvqIsLAwevXqRbVq1Xj8+DHbt2/nzp07ODg4KPv75ptvUKvVjB49mpiYGGbNmkX37t05fvy4XozPnj2jZcuWdOnShY4dO7J48WK6dOlCUFAQI0aMYMCAAXTr1o3vvvuODh06cPv2baytrQE4efIkR48epUuXLhQtWpSbN2+yePFi6tevz6VLl7CwsNA71qBBg3B0dMTf3z/bBOn69et88skn2NnZsX//fr1zyk7Hjh0pVaoUM2bMUJLA6dOn8/XXX9OpUyf69OnDo0ePWLBgAR9//DFnz56lQIECpKSk4OvrS3JyMkOHDsXJyYm7d++yc+dOoqOjsbW1fe2xX2XevHkMHToUKysr/ve//wFQuHDhbNsLIWjdujWHDh2id+/eVKlShb179zJmzBju3r3L999/r9f+8OHDbN68mUGDBmFtbc0PP/xA+/btiYyMxN7e/rXxBQUFUaJECWrUqEGFChWwsLDg119/ZcyYMUqb2NhYTpw4waBBg/jqq6+Uz7qHhwfffPMNnTp1yrTfESNG0KBBA5o3b86GDRuyPb5Wq830o8zMzCzTGN25c+eye/du+vfvz5MnTyhatCiTJ09+7fkBHD16FHt7e9zc3LJc//z580wx2NnZvbZH+EXx8fF88skn3L9/n+HDh+Pk5MQvv/zCoUOHMrXduHEjCQkJDBw4EHt7e06cOMGCBQu4c+cOGzduzPYYJ0+exNfXl+rVq7Nt2zbMzc1zHF8GLy8vIP1HTdWqVXO9vSS9c0KSpPcuMDBQAJkepqamYuXKlXpt//77bwGIoKAgveV79uzJtNzNzU0A4q+//lKWPXz4UJiamoovv/xSWebv7y8AsXnz5kyx6XQ6IYQQhw4dEoAoW7asSE5OVtbPnz9fAOL8+fPKsnr16glA/PLLL8qyy5cvC0Co1Wpx7NgxZfnevXsFIAIDA5VlCQkJmeIICQkRgFi9enWm161u3boiLS1Nr31AQIAAxKNHj0RYWJhwcXERNWrUEE+fPs2075dlbNu1a1e95Tdv3hRGRkZi+vTpesvPnz8vjI2NleVnz54VgNi4cWO2x4iIiMh03hkAERAQkOk8IyIilGXly5cX9erVe+25CCHE1q1bBSCmTZumt7xDhw5CpVKJa9eu6R1bo9HoLTt37pwAxIIFC157rJSUFGFvby/+97//Kcu6desmKleurNfuzJkzAhD29vaicOHCYtGiRSIoKEh4e3sLlUoldu/erdd+586dwtjYWFy8eFEIIUSPHj2EpaVlpuNnfPZefvTo0SPLeH/66SelzdatW197fhnq1q0rvLy8Mi3P+J5k9ch4/9zc3LKMp169enrv6Zw5czLFlZiYKDw9PQUgDh06pCzP6jszc+ZMoVKpxK1bt5RlL75uhw8fFjY2NqJFixYiKSlJaZPx+X9ZVp/DDBqNRgwcODDTcknKC+SwBEkyoB9//JH9+/ezf/9+1q5dS4MGDejTpw+bN29W2mzcuBFbW1saN27M48ePlYeXlxdWVlaZenXKlSvHRx99pDx3dHSkTJky3LhxQ1m2adMmKleunOW4x5cvT/bs2VO5AQdQ9v3i/gCsrKz07g4vU6YMBQoUoGzZstSsWVNZnvHvF7d/sfcoNTWVJ0+eULJkSQoUKMCZM2cyxdi3b1+MjIwyLQe4cOEC9erVw93dnQMHDlCwYMEs22VlwIABes83b96MTqejU6dOeq+9k5MTpUqVUl77jJ7ZvXv3kpCQkOPjvSu7du3CyMiIYcOG6S3/8ssvEUJkqsjRqFEjSpQooTyvVKkSNjY2md7jrOzevZsnT57QtWtXZVnXrl05d+4cFy9eVJbFxcUB8OTJE7Zt28bAgQPp1q0bBw8exN7enmnTpiltU1JSGDlyJAMGDKBcuXKvjcHd3V35HmU8sitXldGDb2FhoTf05HWePHnyys+Sv79/phicnJxyvH+APXv2UKRIEVq3bq0sMzMzy7L02Ivfmfj4eB4/fkzt2rURQnD27NlM7Q8dOoSvry8NGzZk8+bNmJqa5iq2lxUsWPCDKLsnfZjksARJMiBvb2+9G8q6du1K1apVGTJkCC1btkSj0XD16lViYmIoVKhQlvt4+S5zV1fXTG0KFiyoNz73+vXrtG/fPkcxvry/jD/wL4/3LVq0aKbE2NbWlmLFimVa9vL2iYmJzJw5k8DAQO7evas3LjRjzOqLPDw8so23VatWFC5cmL179+a6vufL+7169SpCCEqVKpVl+4zhIB4eHowaNYq5c+cSFBTERx99ROvWrfnss8/+9ZCEN3Hr1i1cXFyUYR8ZypYtq6x/UU4+M9lZu3YtHh4emJqaKmOxS5QogYWFBUFBQcyYMQP4v2TMw8ND78eOlZUVrVq1Yu3ataSlpWFsbMz333/P48ePczxkwNLSMkdjYZ8/f86wYcMoU6YM169fZ9y4cSxfvjxHxwAyjVd+UcWKFd9oPO6Lbt26RYkSJTJ9j7KqzhAZGYm/vz/bt2/P9D69/J1JSkqiRYsWeHl5sWHDhn89fhnSXwt5M5mUV8nkVpLyELVaTYMGDZg/fz5Xr16lfPny6HQ6ChUqRFBQUJbbODo66j3PrkfzVX+YXyWn+8uuXU62Hzp0KIGBgYwYMQIfHx9sbW2VOqE6nS7Ttq8aJ9i+fXtWrVpFUFAQ/fv3z7ZdVl7er06nQ6VSsXv37izP48Xkec6cOfj5+bFt2zb27dvHsGHDmDlzJseOHcsy8c+g1WpzFeO78KafmdjYWHbs2EFSUlKWPwB++eUXpk+fjkqlUspyZTVWuFChQqSmpirjp6dNm8agQYOIjY0lNjYWSO/5FUJw8+ZNLCwssv2x9yr/+9//iIqK4sSJE6xbt47Zs2fTs2dP6tSp89pt7e3tc5TsZ+VV7312r/2raLVaGjduzNOnTxk3bhyenp5YWlpy9+5d/Pz8Mn1nTE1Nad68Odu2bWPPnj2ZKrG8yWczOjo6R+PYJckQZHIrSXlMWloa8H+XcUuUKMGBAweoU6fOG938kZUSJUpw4cKFt7Kvt+G3336jR48ezJkzR1mWlJT0yskAsvPdd99hbGys3BzVrVu3N46rRIkSCCHw8PCgdOnSr21fsWJFKlasyMSJEzl69Ch16tRhyZIlTJs2TenxfvmcXu5FzU5uesnc3Nw4cOAAz58/1+u9zZjUILubonJr8+bNJCUlsXjx4kyJTnh4OBMnTuTIkSPUrVsXFxcX5Ua7l927dw8zMzOsra2JjIwkLi6OWbNmMWvWrExtPTw8aNOmTbZlwbJz6tQpfvzxR4YOHUq1atUoU6YM69evZ8CAAZw9e/a1vZmenp5s2rQpV8fMULBgwSw/y7du3aJ48eLKczc3Ny5dupSpV/Tl6iTnz5/nypUrrFq1ii+++EJZvn///iyPr1KpCAoKok2bNnTs2JHdu3frVWl48bNZoEABvfiycvfuXVJSUpQrAZKU18gxt5KUh6SmprJv3z40Go3yh6NTp05otVqmTp2aqX1aWtobJYDt27fn3LlzbNmyJdO6N+3h/TeMjIwyHXfBggVv1KupUqlYunQpHTp0oEePHmzfvv2N4/r0008xMjJi8uTJmeITQvDkyRMgvQcz40dJhooVK6JWq0lOTgbAxsYGBwcH/vrrL712ixYtylEslpaWOX6vmzdvjlarzTTr1vfff49KpaJZs2Y52s/rrF27luLFizNgwAA6dOig9xg9ejRWVlZ6Vxw6d+7M7du39ZKwx48fs23bNj755BPUajWFChViy5YtmR4NGjTAzMyMLVu2MGHChFzFqdVq6d+/P87Ozsr3yNLSkgULFnDhwoVM1SOy4uPjw7Nnz3I0DvllJUqU4NixY6SkpCjLdu7cmamcnK+vL3fv3tX7zCYlJbFs2TK9dhm9vS9+JoUQzJ8/P9sYNBoNmzdvpkaNGrRq1YoTJ07oxQfofTbj4+NZtWpVlvs6ffo0ALVr1872eJJkSLLnVpIMaPfu3Upv2sOHD/nll1+4evUq48ePx8bGBoB69erRv39/Zs6cSWhoKE2aNMHExISrV6+yceNG5s+fn+vi8WPGjOG3336jY8eO9OrVCy8vL54+fcr27dtZsmQJlStXfuvn+iotW7ZkzZo12NraUq5cOUJCQjhw4ECOylBlRa1Ws3btWtq2bUunTp3YtWsXn3zySa73U6JECaZNm8aECRO4efMmbdu2xdramoiICLZs2UK/fv0YPXo0f/zxB0OGDKFjx46ULl2atLQ01qxZg5GRkd7Y5j59+vDNN9/Qp08fqlevzl9//cWVK1dyFIuXlxeLFy9m2rRplCxZkkKFCmV7Tq1ataJBgwb873//4+bNm1SuXJl9+/axbds2RowYoXfz2Ju6d+8ehw4dynTTWgZTU1N8fX3ZuHEjP/zwAyYmJkyYMIENGzbQvn17Ro0aha2tLUuWLCE1NVUZm2thYUHbtm0z7W/r1q2cOHEiy3Wv88MPP3DmzBk2bdqk15PdunVrWrduzeTJk+ncuXOWY48ztGjRAmNjYw4cOEC/fv1ydfw+ffrw22+/0bRpUzp16sT169dZu3Ztpvehf//+LFy4kK5duzJ8+HCcnZ0JCgrCzMwM+L/ee09PT0qUKMHo0aO5e/cuNjY2bNq06bXDJszNzdm5cyeffPIJzZo1488//6RChQo0adIEV1dXevfuzZgxYzAyMmLFihU4OjoSGRmZaT/79+/H1dVVlgGT8q73XJ1BkiSRdSkwMzMzUaVKFbF48WKlHNeLli5dKry8vIS5ubmwtrYWFStWFGPHjhX37t1T2ri5uYkWLVpk2vblkkNCCPHkyRMxZMgQUaRIEaHRaETRokVFjx49xOPHj4UQ/1fi6OXyVlmVtKpXr54oX758puNmFw8gBg8erDx/9uyZ6Nmzp3BwcBBWVlbC19dXXL58OVMJpYzX7eTJk5n2+WIpsAwJCQmiXr16wsrKSq8cWU62fdGmTZtE3bp1haWlpbC0tBSenp5i8ODBIjw8XAghxI0bN0SvXr1EiRIlhJmZmbCzsxMNGjQQBw4c0NtPQkKC6N27t7C1tRXW1taiU6dO4uHDhzkqBRYVFSVatGghrK2tBfDasmDPnz8XI0eOFC4uLsLExESUKlVKfPfdd5k+Wy+/FxmyK1+VIaNs1cGDB7Nts3LlSgGIbdu2KcuuX78u2rVrJ2xsbIS5ubn45JNPxIkTJ155LkK8uhRYVp+9DLdv3xZWVlaiZcuWWa6/deuWsLS0FK1bt35tDK1btxYNGzbUW5bd9+Rlc+bMEUWKFBGmpqaiTp064tSpU1l+L2/cuCFatGghzM3NhaOjo/jyyy/Fpk2bBKD3Gb506ZJo1KiRsLKyEg4ODqJv375KCbcXv5tZvW6PHz8W5cqVE05OTuLq1atCCCFOnz4tatasKTQajXB1dRVz587N8nOo1WqFs7OzmDhx4mtfL0kyFJUQBrgGKUmSJEn5zN9//039+vW5fPlythU03oV58+YxcuRI7ty5Q5EiRd7bcbOydetWunXrxvXr13F2djZoLJKUHZncSpIkSVIONWvWjKJFi2YaB/u2JCYm6t04mpSURNWqVdFqtTkewvIu+fj48NFHH2V5s58k5RUyuZUkSZKkPKJZs2a4urpSpUoVYmJiWLt2LRcvXiQoKOhfVf6QpP8SeUOZJEmSJOURvr6+LF++nKCgILRaLeXKlWPdunV07tzZ0KFJUr4he24lSZIkSZKkD4ascytJkiRJkiR9MGRyK0mSJEmSJH0wDDrmVqvVMmnSJNauXUtUVBQuLi74+fkxceJEpVi1EIKAgACWLVtGdHQ0derUYfHixXplWJ4+fcrQoUPZsWMHarWa9u3bM3/+fL15319Fp9Nx7949rK2tczXFpSRJkiRJkvR+CCF4/vw5Li4uqNWv6J81VIFdIYSYPn26sLe3Fzt37hQRERFi48aNwsrKSsyfP19p88033whbW1uxdetWce7cOdG6dWvh4eEhEhMTlTZNmzYVlStXFseOHRN///23KFmypOjatWuO47h9+3amgvryIR/yIR/yIR/yIR/ykfcet2/ffmVeZ9Abylq2bEnhwoX5+eeflWXt27fH3NyctWvXIoTAxcWFL7/8ktGjRwMQExND4cKFWblyJV26dCEsLIxy5cpx8uRJqlevDsCePXto3rw5d+7cwcXF5bVxxMTEUKBAAW7fvq1MeSpJkiRJkiTlHbGxsRQrVozo6GhsbW2zbWfQYQm1a9dm6dKlXLlyhdKlS3Pu3DkOHz7M3LlzAYiIiCAqKopGjRop29ja2lKzZk1CQkLo0qULISEhFChQQElsARo1aoRareb48eO0a9cu03GTk5NJTk5Wnj9//hwAGxsbmdxKkiRJkiTlYa8bQmrQ5Hb8+PHExsbi6emJkZERWq2W6dOn0717dwCioqIAKFy4sN52hQsXVtZFRUVRqFAhvfXGxsbY2dkpbV42c+ZMJk+e/LZPR5IkSZIkSTIwg1ZL2LBhA0FBQfzyyy+cOXOGVatWMXv2bFatWvVOjzthwgRiYmKUx+3bt9/p8SRJkiRJkqT3w6A9t2PGjGH8+PF06dIFgIoVK3Lr1i1mzpxJjx49cHJyAuDBgwc4Ozsr2z148IAqVaoA4OTkxMOHD/X2m5aWxtOnT5XtX2Zqaoqpqek7OCNJkiRJkiTJkAya3CYkJGQq5WBkZIROpwPAw8MDJycnDh48qCSzsbGxHD9+nIEDBwLg4+NDdHQ0p0+fxsvLC4A//vgDnU5HzZo131qsWq2W1NTUt7Y/SZLeDyMjI4yNjWWZP0mSpP8Igya3rVq1Yvr06bi6ulK+fHnOnj3L3Llz6dWrF5A+YHjEiBFMmzaNUqVK4eHhwddff42Liwtt27YFoGzZsjRt2pS+ffuyZMkSUlNTGTJkCF26dMlRpYSciIuL486dOxiwsIQkSf+ChYUFzs7OaDQaQ4ciSZIkvWMGLQX2/Plzvv76a7Zs2cLDhw9xcXGha9eu+Pv7K3+ExP+fxGHp0qVER0dTt25dFi1aROnSpZX9PH36lCFDhuhN4vDDDz/keBKH2NhYbG1tiYmJyVQtQavVcvXqVSwsLHB0dJS9P5KUjwghSElJ4dGjR2i1WkqVKvXqwt+SJElSnvWqfO1FBk1u84pXvVhJSUlERETg7u6Oubm5gSKUJOnfSEhI4NatW3h4eGBmZmbocCRJkqQ3kNPkVnZh5JDssZWk/Ev21kqSJP13yP/xJUmSJEmSpA+GTG4lSZIkSZKkD4ZMbt8TrU4Qcv0J20LvEnL9CVrdhzXU2c/PT6lg8bbVr1+fESNGvLKNu7s78+bNeyfHzxAcHIxKpSI6OvqdHkeSJEmSpDcnk9v3YM+F+9T99g+6LjvG8HWhdF12jLrf/sGeC/ff2TFzkhC+ze3epc2bNzN16lRDh0Ht2rW5f/8+tra2Od7mXSb9kH7Do5+fHxUrVsTY2DjbYwUHB1OtWjVMTU0pWbIkK1euzNTmxx9/xN3dHTMzM2rWrMmJEycyHWvw4MHY29tjZWVF+/btefDggV6byMhIWrRogYWFBYUKFWLMmDGkpaW99VgkSZIkKTsyuX3H9ly4z8C1Z7gfk6S3PComiYFrz7zTBDe/S0lJAcDOzg5ra2sDRwMajQYnJ6c8dXOhVqvF3NycYcOG0ahRoyzbRERE0KJFCxo0aEBoaCgjRoygT58+7N27V2mzfv16Ro0aRUBAAGfOnKFy5cr4+vrqzf43cuRIduzYwcaNG/nzzz+5d+8en376qV4sLVq0ICUlhaNHj7Jq1SpWrlyJv7//W49FkiRJkrIlJBETEyMAERMTk2ldYmKiuHTpkkhMTBRCCKHT6UR8cmqOHrGJKcJ7+n7hNm5nlg/3cTtFzekHRGxiSo72p9PpcnQ+PXr0EIDeIyIiQgghRHBwsKhRo4bQaDTCyclJjBs3TqSmpr5yu7S0NNGrVy/h7u4uzMzMROnSpcW8efMyHbNNmzavjGvp0qWiaNGiwtzcXLRt21bMmTNH2NraKusDAgJE5cqVxbJly4S7u7tQqVRCCCHq1asnhg8frrR78OCBaNmypTAzMxPu7u5i7dq1ws3NTXz//fevfE3atGkjJk2aJBwcHIS1tbXo37+/SE5OVtokJSWJoUOHCkdHR2Fqairq1KkjTpw4oaw/dOiQAMSzZ8+EEEIEBgYKW1tbsWfPHuHp6SksLS2Fr6+vuHfvnnI+L7+ehw4dEsnJyWLw4MHCyclJmJqaCldXVzFjxoxXvnY5kd17MHbsWFG+fHm9ZZ07dxa+vr7Kc29vbzF48GDluVarFS4uLmLmzJlCCCGio6OFiYmJ2Lhxo9ImLCxMACIkJEQIIcSuXbuEWq0WUVFRSpvFixcLGxsb5XV+G7G8iZe/x5IkSVL+86p87UUGnaEsP0pM1VLOf+/rG+aAAKJik6g4aV+O2l+a4ouF5vVv2fz587ly5QoVKlRgypQpADg6OnL37l2aN2+On58fq1ev5vLly/Tt2xczMzMmTZqU7XY6nY6iRYuyceNG7O3tOXr0KP369cPZ2ZlOnTrlKPYjR44wYMAAvv32W1q3bs2BAwf4+uuvM7W7du0amzZtYvPmzRgZGWW5Lz8/P+7du8ehQ4cwMTFh2LBhOerVO3jwIGZmZgQHB3Pz5k169uyJvb0906dPB2Ds2LFs2rSJVatW4ebmxqxZs/D19eXatWvY2dlluc+EhARmz57NmjVrUKvVfPbZZ4wePZqgoCBGjx5NWFgYsbGxBAYGAum90D/88APbt29nw4YNuLq6cvv2bW7fvq3ss1mzZvz999/ZnoebmxsXL1587flmCAkJydSr6+vrqww/SUlJ4fTp00yYMEFZr1aradSoESEhIQCcPn2a1NRUvf14enri6upKSEgItWrVIiQkhIoVK1K4cGG94wwcOJCLFy9StWrVtxKLJEmSJL2KTG4/QLa2tmg0GiwsLHByclKWL1q0iGLFirFw4UJUKhWenp7cu3ePcePG4e/vn+12RkZGTJ48WXnu4eFBSEgIGzZsyHFyu2DBApo1a8bo0aMBKF26NEePHmXnzp167VJSUli9ejWOjo5Z7ufKlSvs3r2bEydOUKNGDQB+/vlnypYt+9oYNBoNK1aswMLCgvLlyzNlyhTGjBnD1KlTSUxMZPHixaxcuZJmzZoBsGzZMvbv38/PP//MmDFjstxnamoqS5YsoUSJEgAMGTJE+WFgZWWFubk5ycnJeq9nZGQkpUqVom7duqhUKtzc3PT2uXz5chITE7M9DxMTk9ee64uioqL0Ek6AwoULExsbS2JiIs+ePUOr1WbZ5vLly8o+NBoNBQoUyNQmKirqlcfJWPe2YpEkSZKkV5HJbS6ZmxhxaYpvjtqeiHiKX+DJ17Zb2bMG3h5Z9wy+fOx/IywsDB8fH70xo3Xq1CEuLo47d+7g6uqa7bY//vgjK1asIDIyksTERFJSUqhSpUqOjx0eHk67du30lnl7e2dKbt3c3LJNbDPOwdjYGC8vL2WZp6dnpqQrK5UrV8bCwkJ57uPjQ1xcHLdv3yYmJobU1FTq1KmjrDcxMcHb25uwsLBs92lhYaEktgDOzs6v7UX28/OjcePGlClThqZNm9KyZUuaNGmirC9SpMhrz0WSJEmSDCktLQ1j47yZRsobynJJpVJhoTHO0eOjUo4425qR3e1HKsDZ1oyPSjnmaH+GupFp3bp1jB49mt69e7Nv3z5CQ0Pp2bOncsPX22RpafnW9/kuvdyLqlKpEK+Z0bpatWpEREQoPcadOnWiQ4cOyvpmzZphZWWV7aN8+fK5itHJySlTVYMHDx5gY2ODubk5Dg4OGBkZZdkmo8fZycmJlJSUTGXQXm6T1T4y1r2tWCRJkiTDCgsLo1q1amzbts3QoWRJJrfvkJFaRUCrcgCZEtyM5wGtymGkfvtJq0ajQavV6i0rW7YsISEhesnXkSNHsLa2pmjRotlud+TIEWrXrs2gQYOoWrUqJUuW5Pr167mKp0yZMpw8qd+L/fLznPD09CQtLY3Tp08ry8LDw3NUe/bcuXN6l/uPHTuGlZUVxYoVo0SJEmg0Go4cOaKsT01N5eTJk5QrVy7XcWbI6vUEsLGxoXPnzixbtoz169ezadMmnj59CqQPSwgNDc32sWvXrlzF4OPjw8GDB/WW7d+/Hx8fHyVGLy8vvTY6nY6DBw8qbby8vDAxMdFrEx4eTmRkpNLGx8eH8+fP6/Vc79+/HxsbG+U1fBuxSJIkSYazevVqqlevzvnz5xk/fnyWf+MMLW/2J39AmlZwZvFn1Zi845JeOTAnWzMCWpWjaQXnd3Jcd3d3jh8/zs2bN7GyssLOzo5BgwYxb948hg4dypAhQwgPDycgIIBRo0ahVquz3a5UqVKsXr2avXv34uHhwZo1azh58iQeHh45jmfo0KF8/PHHzJ07l1atWvHHH3+we/fuXPdGZ1zK79+/P4sXL8bY2JgRI0Zgbm7+2m1TUlLo3bs3EydO5ObNmwQEBDBkyBDUajWWlpYMHDiQMWPGYGdnh6urK7NmzSIhIYHevXvnKsYXubu7s3fvXsLDw7G3t8fW1pYFCxbg7OxM1apVUavVbNy4EScnJ2VoRW6HJVy6dImUlBSePn3K8+fPCQ0NBVCGjQwYMICFCxcyduxYevXqxR9//MGGDRv4/ffflX2MGjWKHj16UL16dby9vZk3bx7x8fH07NkTSB/H3bt3b0aNGoWdnR02NjYMHToUHx8fatWqBUCTJk0oV64cn3/+ObNmzSIqKoqJEycyePBgTE1N31oskiRJ0vsXHx/PkCFDlNrkn3zyCUFBQdne/G1Q76V2Qx6Xm1JgbypNqxNHrz0WW8/eEUevPRZp2pyV9XpT4eHholatWsLc3DzHpcCy2y4pKUn4+fkJW1tbUaBAATFw4EAxfvx4UblyZWW7nJYCK1KkiFIKbNq0acLJyUlZn1EK7GUvlwK7f/++aNGihVJGa/Xq1TkuBebv7y/s7e2FlZWV6Nu3r0hKSlLaJCYmiqFDhwoHB4dclQJ70ZYtW8SLX6uHDx+Kxo0bCysrK6UU2NKlS0WVKlWEpaWlsLGxEQ0bNhRnzpx55Wv3Km5ubplKjr381T506JCoUqWK0Gg0onjx4iIwMDDTfhYsWCBcXV2FRqMR3t7e4tixY3rrExMTxaBBg0TBggWFhYWFaNeunbh//75em5s3b4pmzZoJc3Nz4eDgIL788ku9z9fbiiW3ZCkwSZKkN3fhwgVRrlw5AQi1Wi2mTJki0tLS3nscOS0FphLiNQME/wNiY2OxtbUlJiYGGxsbvXVJSUlERETg4eGBmZmZgSL8MPXt25fLly+/suzV2+Ln50d0dDRbt25958eS8h75PZYkSXpzn376KVu2bMHFxYVffvmFevXqGSSOV+VrL5LDEqT3Zvbs2TRu3BhLS0t2797NqlWrWLRokaHDkiRJkiTpFZYsWYK1tTWzZ89+ZUWjvELeUCa9NydOnKBx48ZUrFiRJUuW8MMPP9CnTx9DhyVJkiRJ0gtCQ0OZNGmS8rxQoUKsWrUqXyS2IHtupfdow4YNBjt2xgB4SZIkSZKyJoRgyZIljBw5kuTkZMqWLUvnzp0NHVauyeRWkiRJkiTpPy4mJoa+ffuyceNGAFq2bJlpuvT8Qg5LkCRJkiRJ+g87deoU1apVY+PGjRgbGzNnzhy2b9+Ovb29oUN7I7LnVpIkSZIk6T/q559/ZuDAgaSmpuLm5sb69eupWbOmocP6V2TPrSRJkiRJ0n+Ui4sLqamptG3blrNnz+b7xBZkz60kSZIkSdJ/SlxcHFZWVgA0a9aMw4cPU7t27VzPGppXyZ5bSZIkSZKk/wAhBHPmzKF48eLcvHlTWV6nTp0PJrEFmdy+e9G34V5o9o/o2wYM7u3x8/Ojbdu272Tf9evXZ8SIEa9s4+7uzrx5897J8TMEBwejUqmIjo5+p8eRJEmSpLftyZMntG7dmtGjR/Po0aMPukSmTG7fpejbsNALltbL/rHQ650kuDlJCN/mdu/S5s2bmTp1qqHDoHbt2ty/fx9bW9scb/Muk/4Me/fupVatWlhbW+Po6Ej79u31fpFDemJerVo1TE1NKVmyZJb/qf3444+4u7tjZmZGzZo1OXHihN76pKQkBg8ejL29PVZWVrRv354HDx7otYmMjKRFixZYWFhQqFAhxowZQ1pa2luPRZIkScq5I0eOUKVKFXbu3ImpqSmLFy8mICDA0GG9MzK5fZcSnkBa8qvbpCWnt5MySUlJAcDOzg5ra2sDRwMajQYnJ6c8dekmIiKCNm3a8MknnxAaGsrevXt5/Pgxn376qV6bFi1a0KBBA0JDQxkxYgR9+vRh7969Spv169czatQoAgICOHPmDJUrV8bX15eHDx8qbUaOHMmOHTvYuHEjf/75J/fu3dM7jlarpUWLFqSkpHD06FFWrVrFypUr8ff3f+uxSJIkSa+n0+n45ptvqFevHnfu3KFUqVIcO3aMAQMG5Km/ZW+dkERMTIwARExMTKZ1iYmJ4tKlSyIxMTF9gU4nRHJczh63jgoRYPP6x62jOdufTpej8+nRo4cA9B4RERFCCCGCg4NFjRo1hEajEU5OTmLcuHEiNTX1ldulpaWJXr16CXd3d2FmZiZKly4t5s2bl+mYbdq0eWVcS5cuFUWLFhXm5uaibdu2Ys6cOcLW1lZZHxAQICpXriyWLVsm3N3dhUqlEkIIUa9ePTF8+HCl3YMHD0TLli2FmZmZcHd3F2vXrhVubm7i+++/f+Vr0qZNGzFp0iTh4OAgrK2tRf/+/UVycrLSJikpSQwdOlQ4OjoKU1NTUadOHXHixAll/aFDhwQgnj17JoQQIjAwUNja2oo9e/YIT09PYWlpKXx9fcW9e/eU83n59Tx06JBITk4WgwcPFk5OTsLU1FS4urqKGTNmvPK1y87GjRuFsbGx0Gq1yrLt27cLlUolUlJShBBCjB07VpQvX15vu86dOwtfX1/lube3txg8eLDyXKvVChcXFzFz5kwhhBDR0dHCxMREbNy4UWkTFhYmABESEiKEEGLXrl1CrVaLqKgopc3ixYuFjY2N8jq/jVjeRKbvsSRJ0n/Ajz/+qPz96datm4iNjTV0SP/Kq/K1F8lqCbmVmgAzXN7uPlc0zVm7r+6BxvK1zebPn8+VK1eoUKECU6ZMAcDR0ZG7d+/SvHlz/Pz8WL16NZcvX6Zv376YmZkxadKkbLfT6XQULVqUjRs3Ym9vz9GjR+nXrx/Ozs506tQpR6EfOXKEAQMG8O2339K6dWsOHDjA119/nandtWvX2LRpE5s3b8bIyCjLffn5+XHv3j0OHTqEiYkJw4YNy1Gv3sGDBzEzMyM4OJibN2/Ss2dP7O3tmT59OgBjx45l06ZNrFq1Cjc3N2bNmoWvry/Xrl3Dzs4uy30mJCQwe/Zs1qxZg1qt5rPPPmP06NEEBQUxevRowsLCiI2NJTAwEEjvhf7hhx/Yvn07GzZswNXVldu3b3P79v8NTWnWrBl///13tufh5ubGxYsXAfDy8kKtVhMYGIifnx9xcXGsWbOGRo0aYWJiAkBISEimWWZ8fX2V4ScpKSmcPn2aCRMmKOvVajWNGjUiJCQEgNOnT5Oamqq3H09PT1xdXQkJCaFWrVqEhIRQsWJFChcurHecgQMHcvHiRapWrfpWYpEkSZJyplevXvzyyy/07NmTXr16fdi9tS+Qye0HyNbWFo1Gg4WFBU5OTsryRYsWUaxYMRYuXIhKpcLT05N79+4xbtw4/P39s93OyMiIyZMnK889PDwICQlhw4YNOU5uFyxYQLNmzRg9ejQApUuX5ujRo+zcuVOvXUpKCqtXr8bR0THL/Vy5coXdu3dz4sQJatSoAaQXoC5btuxrY9BoNKxYsQILCwvKly/PlClTGDNmDFOnTiUxMZHFixezcuVKmjVrBsCyZcvYv38/P//8M2PGjMlyn6mpqSxZsoQSJUoAMGTIEOWHgZWVFebm5iQnJ+u9npGRkZQqVYq6deuiUqlwc3PT2+fy5ctJTEzM9jwyklZIfy/27dtHp06d6N+/P1qtFh8fH3bt2qW0iYqK0ks4AQoXLkxsbCyJiYk8e/YMrVabZZvLly8r+9BoNBQoUCBTm6ioqFceJ2Pd24pFkiRJyppWq2XNmjV8/vnnGBkZYWZmxl9//YVa/d8ahSqT29wysUjvQc2JqH9y1ivbaw84VcrZsf+FsLAwfHx89H651alTh7i4OO7cuYOrq2u22/7444+sWLGCyMhIEhMTSUlJoUqVKjk+dnh4OO3atdNb5u3tnSm5dXNzyzaxzTgHY2NjvLy8lGWenp6Zkq6sVK5cGQuL/3sNfXx8iIuL4/bt28TExJCamkqdOnWU9SYmJnh7exMWFpbtPi0sLJTEFsDZ2fm1vch+fn40btyYMmXK0LRpU1q2bEmTJk2U9UWKFHntuWSIioqib9++9OjRg65du/L8+XP8/f3p0KED+/fv/8/8SpckSfqvi4qK4rPPPuPgwYNEREQonVL/tcQWZHKbeypVjoYGAGBsnvN2Od2nAaxbt47Ro0czZ84cfHx8sLa25rvvvuP48eNv/ViWlnn3dcjKi72oACqVCiHEK7epVq0aERER7N69mwMHDtCpUycaNWrEb7/9BuRuWMKPP/6Ira0ts2bNUtavXbuWYsWKcfz4cWrVqoWTk1OmqgYPHjzAxsYGc3NzjIyMMDIyyrJNRo+zk5MTKSkpREdH6/2QeLnNy1UNMvb5Ypt/G4skSZKk7+DBg3Tv3p0HDx5gYWFByZIlDR2SQf330vn/CI1Gg1ar1VtWtmxZQkJC9JKvI0eOYG1tTdGiRbPd7siRI9SuXZtBgwZRtWpVSpYsyfXr13MVT5kyZTh58qTespef54SnpydpaWmcPn1aWRYeHp6j2rPnzp3Tu9x/7NgxrKysKFasGCVKlECj0XDkyBFlfWpqKidPnqRcuXK5jjNDVq8ngI2NDZ07d2bZsmWsX7+eTZs28fTpUyB9WEJoaGi2jxeHHCQkJGT6VZ4xVlmn0wHpPdQHDx7Ua7N//358fHyUGL28vPTa6HQ6Dh48qLTx8vLCxMREr014eDiRkZFKGx8fH86fP6/Xc71//35sbGyU1/BtxCJJkiSl02q1+Pv707hxYx48eEDFihU5ffo0n3/+uaFDMyjZc/suWdiDsemry4EZm6a3e8vc3d05fvw4N2/exMrKCjs7OwYNGsS8efMYOnQoQ4YMITw8nICAAEaNGqUkSFltV6pUKVavXs3evXvx8PBgzZo1nDx5Eg8PjxzHM3ToUD7++GPmzp1Lq1at+OOPP9i9e3euL5tnXMrv378/ixcvxtjYmBEjRmBu/vpe8pSUFHr37s3EiRO5efMmAQEBDBkyBLVajaWlJQMHDmTMmDHY2dnh6urKrFmzSEhIoHfv3rmK8UXu7u7s3buX8PBw7O3tsbW1ZcGCBTg7O1O1alXUajUbN27EyclJ6RHNzbCEFi1a8P333zNlyhRlWMJXX32Fm5sbVatWBWDAgAEsXLiQsWPH0qtXL/744w82bNjA77//ruxn1KhR9OjRg+rVq+Pt7c28efOIj4+nZ8+eQPo47t69ezNq1Cjs7OywsbFh6NCh+Pj4UKtWLQCaNGlCuXLl+Pzzz5k1axZRUVFMnDiRwYMHY2pq+tZikSRJkuDevXt069aNP//8E4C+ffsyf/78HP09/OC9l9oNeVyuSoHl1rNIIe6ezf7xLPJNw36l8PBwUatWLWFubp7jUmDZbZeUlCT8/PyEra2tKFCggBg4cKAYP368qFy5srJdTkuBFSlSRCkFNm3aNOHk5KSszygF9rKXS4Hdv39ftGjRQimjtXr16hyXAvP39xf29vbCyspK9O3bVyQlJSltEhMTxdChQ4WDg0OuSoG9aMuWLeLFr9XDhw9F48aNhZWVlVIKbOnSpaJKlSrC0tJS2NjYiIYNG4ozZ8688rV7lV9//VVUrVpVWFpaCkdHR9G6dWsRFham1+bQoUOiSpUqQqPRiOLFi4vAwMBM+1mwYIFwdXUVGo1GeHt7i2PHjumtT0xMFIMGDRIFCxYUFhYWol27duL+/ft6bW7evCmaNWsmzM3NhYODg/jyyy/1Pl9vK5bckqXAJEn60Jw/f16Ym5sLKysr8csvvxg6nPcip6XAVEK8ZoDgf0BsbCy2trbExMRgY2Ojty4pKYmIiAg8PDwwMzMzUIQfpr59+3L58uVXji99W/z8/IiOjmbr1q3v/FhS3iO/x5IkfQiEEHpXPLdu3Ur58uUpVaqUAaN6f16Vr71IjrmV3pvZs2dz7tw5rl27xoIFC1i1ahU9evQwdFiSJEmSlOfdvn2bBg0acPToUWVZ27Zt/zOJbW7IMbfSe3PixAlmzZrF8+fPKV68OD/88AN9+vQxdFiSJEmSlKft2LEDPz8/nj59Sv/+/Tl37tx/ssRXTsnkVnpvNmzYYLBjr1y50mDHliRJkqQ3kZKSwoQJE5g7dy4A1atXZ/369TKxfQ2Z3EqSJEmSJOUxERERdOnSRakfPnz4cL799lul+oyUPZncSpIkSZIk5SHXr1/Hy8uLmJgYChQoQGBgIG3btjV0WPmGTG4lSZIkSZLykOLFi9OgQQOioqJYt24dbm5uhg4pX5HJrSRJkiRJkoFdv34dR0dHbGxsUKlUrF69GjMzs0zTvEuvJ0ckS5IkSZIkGdCGDRuoWrUq/fv3J2P6AWtra5nYviGDJrfu7u6oVKpMj8GDBwPphdcHDx6Mvb09VlZWtG/fngcPHujtIzIykhYtWmBhYUGhQoUYM2YMaWlphjgdSZIkSZKkHEtKSmLgwIF07tyZ58+fc/v2beLj4w0dVr5n0OT25MmT3L9/X3ns378fgI4dOwIwcuRIduzYwcaNG/nzzz+5d+8en376qbK9VqulRYsWpKSkcPToUVatWsXKlSvx9/c3yPlkJSo+iktPLmX7iIqPMnSIb4Wfn987G+xev359RowY8co27u7uzJs3750cP0NwcDAqlYro6Oh3ehxJkiTpw3flyhVq1arFkiVLAJgwYQLBwcFYWVkZOLIPwHuYCjjHhg8fLkqUKCF0Op2Ijo4WJiYmYuPGjcr6sLAwAYiQkBAhhBC7du0SarVaREVFKW0WL14sbGxsRHJyco6P+6q5iv/NnPTJacmi3rp6osLKCtk+6q2rJ5LTch5rTtWrV08MHz78vW3Xo0cP0aZNm1xvlxNPnjwRsbGxr2zj5uYmvv/++3dy/AzJycni/v37QqfT5Xibd/m6ZNDpdOK7774TpUqVEhqNRri4uIhp06Zl2fbw4cPCyMhIVK5cOdO6hQsXCjc3N2Fqaiq8vb3F8ePH9dYnJiaKQYMGCTs7O2FpaSk+/fRTve+eEELcunVLNG/eXJibmwtHR0cxevRokZqaqtfm0KFDomrVqkKj0YgSJUqIwMDAdxLLy+3f9HssSZL0tq1du1ZYWloKQDg6Ooo9e/YYOqR84VX52ovyzJjblJQU1q5dS69evVCpVJw+fZrU1FQaNWqktPH09MTV1ZWQkBAAQkJCqFixIoULF1ba+Pr6Ehsby8WLF7M9VnJyMrGxsXqPd8FEbYKTpRMqVFmuV6HCydIJE7UcU5OVlJQUAOzs7LC2tjZwNKDRaHByctKb1zsvGD58OMuXL2f27NlcvnyZ7du34+3tnalddHQ0X3zxBQ0bNsy0bv369YwaNYqAgADOnDlD5cqV8fX15eHDh0qbt3ElJSIighYtWtCgQQNCQ0MZMWIEffr0Ye/evW81FkmSpLzq+fPnjBkzhvj4eOrXr09oaCi+vr6GDuvD8p6S7ddav369MDIyEnfv3hVCCBEUFCQ0Gk2mdjVq1BBjx44VQgjRt29f0aRJE7318fHxAhC7du3K9lgBAQECyPTISc+tTqcT8SnxOX4cvHnwlT23B28ezPG+ctpj2KNHj0znFhERIYQQIjg4WNSoUUNoNBrh5OQkxo0bp/SsZbddWlqa6NWrl3B3dxdmZmaidOnSYt68eZmO+boeyqVLl4qiRYsKc3Nz0bZtWzFnzhxha2ur975UrlxZLFu2TLi7uwuVSiWEyNyb/ODBA9GyZUthZmYm3N3dxdq1a1/bc5sR36RJk4SDg4OwtrYW/fv31+vhT0pKEkOHDhWOjo7C1NRU1KlTR5w4cUJZf+jQIQGIZ8+eCSGECAwMFLa2tmLPnj3C09NTWFpaCl9fX3Hv3j3lfF5+PQ8dOiSSk5PF4MGDhZOTkzA1NRWurq5ixowZr3ztsnPp0iVhbGwsLl++/Nq2nTt3FhMnTlRe5xd5e3uLwYMHK8+1Wq1wcXERM2fOFEKIt3YlZezYsaJ8+fKZ4vL19X2rsbxM9txKkpSXHDp0SPj7+4u0tDRDh5Kv5LTnNs+UAvv5559p1qwZLi4u7/xYEyZMYNSoUcrz2NhYihUrlqNtE9MSqflLzbcWy/Dg4Tlue7zbcSxMLF7bbv78+Vy5coUKFSowZcoUABwdHbl79y7NmzfHz8+P1atXc/nyZfr27YuZmRmTJk3KdjudTkfRokXZuHEj9vb2HD16lH79+uHs7EynTp1yFPuRI0cYMGAA3377La1bt+bAgQN8/fXXmdpdu3aNTZs2sXnzZoyMjLLcl5+fH/fu3ePQoUOYmJgwbNgwvV697Bw8eBAzMzOCg4O5efMmPXv2xN7enunTpwMwduxYNm3axKpVq3Bzc2PWrFn4+vpy7do17OzsstxnQkICs2fPZs2aNajVaj777DNGjx5NUFAQo0ePJiwsjNjYWAIDA4H0XugffviB7du3s2HDBlxdXbl9+za3b99W9tmsWTP+/vvvbM/Dzc1NuTKxY8cOihcvzs6dO2natClCCBo1asSsWbP0Yg4MDOTGjRusXbuWadOm6e0vJSWF06dPM2HCBGWZWq2mUaNGylWS111JqVWrVrZXUgYOHMjFixepWrUqISEhevvIaJMxpvptxSJJkpSXrFy5EnNzczp37gyk30tSv359wwb1AcsTye2tW7c4cOAAmzdvVpY5OTmRkpJCdHQ0BQoUUJY/ePAAJycnpU3GtHQvrs9Ylx1TU9MPevo6W1tbNBoNFhYWeq/DokWLKFasGAsXLkSlUuHp6cm9e/cYN24c/v7+2W5nZGTE5MmTleceHh6EhISwYcOGHCe3CxYsoFmzZowePRqA0qVLc/ToUXbu3KnXLiUlhdWrV+Po6Jjlfq5cucLu3bs5ceIENWrUANJ/GJUtW/a1MWg0GlasWIGFhQXly5dnypQpjBkzhqlTp5KYmMjixYtZuXIlzZo1A2DZsmXs37+fn3/+mTFjxmS5z9TUVJYsWUKJEiUAGDJkiPLDwMrKCnNzc5KTk/Vez8jISEqVKkXdunVRqVSZinMvX76cxMTEbM/jxdIwN27c4NatW2zcuJHVq1ej1WoZOXIkHTp04I8//gDg6tWrjB8/nr///htj48xf+cePH6PVavWSUoDChQtz+fJlAKKiotBoNHrfxYw2UVFRSpus9pGx7lVtYmNjSUxM5NmzZ28lFkmSpLwgLi6OwYMHs3r1aqysrKhZsybu7u6GDuuDlyeS28DAQAoVKkSLFi2UZV5eXpiYmHDw4EHat28PQHh4OJGRkfj4+ADg4+PD9OnTefjwIYUKFQJg//792NjYUK5cuXcSq7mxOce7Hc/VNkIIeu7tSfizcHRCh1qlpkzBMgT6BuZq/Ka5sXluw9UTFhaGj4+P3jHr1KlDXFwcd+7cwdXVNdttf/zxR1asWEFkZCSJiYmkpKRQpUqVHB87PDycdu3a6S3z9vbOlNy6ubllm9hmnIOxsTFeXl7KMk9Pz0yJTlYqV66MhcX/9Xz7+PgQFxfH7du3iYmJITU1lTp16ijrTUxM8Pb2JiwsLNt9WlhYKIktgLOz82t7kf38/GjcuDFlypShadOmtGzZkiZNmijrixQp8tpzyaDT6UhOTmb16tWULl0aSE/2vby8CA8Pp2TJknTr1o3Jkycr6yVJkqR37/z583Tq1InLly+jVqsZP358jq8S5wc6nQ61Os/cuqXH4MmtTqcjMDCQHj166PUq2dra0rt3b0aNGoWdnR02NjYMHToUHx8f5bJjkyZNKFeuHJ9//jmzZs0iKiqKiRMnMnjw4HfWM6tSqXI0NOBlw6sNZ8CBAQDohI7h1YZjqbF82+G9E+vWrWP06NHMmTMHHx8frK2t+e677zh+PHdJfk5YWuaP1yTDywW2VSqVUoA7O9WqVSMiIoLdu3dz4MABOnXqRKNGjfjtt9+A3A1LcHZ2xtjYWC9xzejFjoyMpHDhwpw6dYqzZ88yZMgQIP07J4TA2NiYffv2UbduXYyMjDLVkH75KsnbuJLi5OSU5XFsbGwwNzfHyMjorcQiSZJkKEIIli9fzrBhw0hKSsLFxYVff/2Vjz/+2NChvTX3799n27ZtfPLJJ3my48TgKfeBAweIjIykV69emdZ9//33tGzZkvbt2/Pxxx/j5OSkN3TByMiInTt3YmRkhI+PD5999hlffPGFclk4L6ntUpvy9uUBKG9fntoutd/p8TQaDVqtVm9Z2bJlCQkJ0Uu+jhw5grW1NUWLFs12uyNHjlC7dm0GDRpE1apVKVmyJNevX89VPGXKlOHkyZN6y15+nhOenp6kpaVx+vRpZVl4eHiOas+eO3dO73L/sWPHsLKyolixYpQoUQKNRsORI0eU9ampqZw8efJfXQXI6vUEsLGxoXPnzixbtoz169ezadMmnj59CqQPSwgNDc32sWvXLmU/derUIS0tTe/9uHLlCpCeBNvY2HD+/Hm97QcMGECZMmUIDQ2lZs2aaDQavLy8OHjwoLIPnU7HwYMHlaskL15JyZDVlZTz58/r9Vy/fCXFx8dHbx8ZbTL28bZikSRJMgSdTsfnn39Ov379SEpKolmzZoSGhn4wia1WqyU4OJjly5fz4MED/vjjj9d26BjEu76zLT94V3VuX3b07lHRektrcfTu0X+9r9fp27evqFGjhoiIiBCPHj0SWq1W3LlzR1hYWIjBgweLsLAwsXXrVuHg4CACAgJeud38+fOFjY2N2LNnjwgPDxcTJ04UNjY2enfcv65awuHDh4VarRZz5swRV65cEUuWLBH29vaiQIECSpus7uIXInO1hKZNm4qqVauKY8eOiVOnTom6desKc3Pz11ZLsLKyEl27dhUXL14Uv//+uyhcuLAYP3680mb48OHCxcVF7N69W1y8eFH06NFDFCxYUDx9+lQIkX21hBdt2bJFvPi1mj59unB1dRWXL18Wjx49EikpKWLOnDnil19+EWFhYSI8PFz07t1bODk5Ca1Wm2382dFqtaJatWri448/FmfOnBGnTp0SNWvWFI0bN852m6xe53Xr1glTU1OxcuVKcenSJdGvXz9RoEABvcoHAwYMEK6uruKPP/4Qp06dEj4+PsLHx0dZn5aWJipUqCCaNGkiQkNDxZ49e4Sjo6OYMGGC0ubGjRvCwsJCjBkzRoSFhYkff/xRGBkZ6dV4fBuxvExWS5Ak6X0ZM2aMMDIyErNmzXqj/9fzqufPn4slS5aISZMmiUmTJon169eLuLi49xpDTqslyORWvL/k9n0KDw8XtWrVEubm5jkuBZbddklJScLPz0/Y2tqKAgUKiIEDB4rx48fnKrkVIr0UWJEiRZRSYNOmTRNOTk7K+pwmt/fv3xctWrRQymitXr06x6XA/P39hb29vbCyshJ9+/YVSUlJSpvExEQxdOhQ4eDgkKtSYC96Obl9+PChaNy4sbCyslJKgS1dulRUqVJFWFpaChsbG9GwYUNx5syZV752r3L37l3x6aefCisrK1G4cGHh5+cnnjx5km377F7nBQsWCFdXV6HRaIS3t7c4duyY3vqMiRMKFiwoLCwsRLt27cT9+/f12ty8eVM0a9ZMmJubCwcHB/Hll19mOYlDlSpVhEajEcWLF89yEoe3EcvL7fPj91iSpLxPp9Pp5Q8pKSni9OnTBozo3dBqtWL58uXi22+/FefPn8/VhEZvS06TW5UQebE/+f2KjY3F1taWmJgYbGxs9NYlJSURERGBh4cHZmZmBorww9S3b18uX778yvGlb4ufnx/R0dFs3br1nR9Lynvk91iSpHchJiaGPn36cPv2bf766y80Go2hQ3qrHj58SMGCBZX7S549e4aJiYnBpgh+Vb72IoPfUCb9d8yePZvGjRtjaWnJ7t27WbVqFYsWLTJ0WJIkSZKUaydPnqRz585ERERgYmLCsWPHPpixtTqdjiNHjhAcHEzNmjWVij7JmmTuJ92H5Ky3szOzw8nS8Df2yuRWem9OnDjBrFmzeP78OcWLF+eHH36gT58+hg5LkiRJknJMCMH8+fMZO3YsqampuLu7s379+iynPc+PHj16xNatW7l37x6Q3lsrhCBVl0qXnV14kvQk223tzezZ12EfGiPD9mDL5FZ6bzZs2GCwY69cudJgx5YkSZI+DE+fPqVnz55s374dgE8//ZSff/45R7XW8zqdTsfRo0cJDg5Gq9ViZmZG06ZNqVSpEiqVChO1CU6WTjxNeoog84hWFSqcLJ0wUZtksff3Sya3kiRJkiRJOdCrVy+2b9+ORqNhzpw5DB48OFeTMeVVT58+ZfPmzdy9exeAUqVK0apVK6ytrZU2KpWKoVWHKjX7XyYQDK06NE+8HjK5lSRJkiRJyoHvvvuOyMhIli9fTrVq1QwdzltjZGTEo0ePMDU1pWnTplSuXDnLJDWjZn/Y0zB0QqcsV6vUlLUr+85r+OeUTG4lSZIkSZKy8PjxYw4cOECXLl2A9B7N06dP54neyX8rPj5emRXU1taWjh07UqhQoVdWIQCoW6QuF59c1FumE7o802sLMrmVJEmSJEnK5O+//6Zr167cu3ePQoUK8cknnwDkmQTuTel0Oo4fP84ff/xBly5dKFGiBAAlS5Z85Xb34u4x4/gM/rzzp97yvNZrC3lg+l1JkiRJkqS8QqfTMWPGDBo0aMDdu3cpXbo0Dg4Ohg7rrXjy5AkrV65k3759pKWlceHChdduk6pLJfBCIG23teXPO39irDamqXtTZX1e67UF2XMrSZIkSZIEpE9a8Pnnn7Nv3z4APvvsMxYvXmywSQveFiEEx48f5+DBg6SlpaHRaGjSpMlrxw2fe3SOKSFTuPLsCgDVClXD38ef4rbFuf38NhefXKS8ffk81WsLsudWekOTJk2icOHCqFSqD2bWr+DgYFQqFdHR0UB6+bAPobyLJEmS9HrBwcFUrlyZffv2YW5uzooVK1i9enW+T2yfPn3KqlWr2Lt3L2lpaXh4eDBw4EC8vLyy7W2NTYllashUPt/1OVeeXcHW1JYptacQ2DSQEgVKoFKpGF5tOMVtizO82vA81WsLsudWegNhYWFMnjyZLVu2UKtWLQoWLPiv9zlp0iS2bt1KaGjovw/wLencuTPNmzc3dBiSJEnSe3Dt2jWioqIoV64cGzZsoHz58oYO6a24f/8+t27dwsTEhCZNmrwyqRVCsOfmHr498a0yWUPrEq35svqX2JnZ6bX1cfFhW9tt7zz+NyGTWynHtFotKpWK69evA9CmTZs892vtbTI3N8fc3NzQYUiSJEnviBBC+TvWu3dvhBB069ZNqSKQX2m1WoyMjAAoX748T58+pUKFCq/sjLode5tpx6dx9N5RANxt3PH38aeGU433EvPbJIclvKH4+PhsH0lJSTlum5iYmKO2uVW/fn2GDBnCkCFDsLW1xcHBga+//hoh/m9WkeTkZEaPHk2RIkWwtLSkZs2aBAcHK+szLstv376dcuXKYWpqSq9evWjVqhUAarVaL7ldvnw5ZcuWxczMDE9PTxYtWqQX0507d+jatSt2dnZYWlpSvXp1jh8/zsqVK5k8eTLnzp1DpVKhUqmynVEsODgYb29vLC0tKVCgAHXq1OHWrVvK+h07dlCjRg3MzMxwcHCgXbt2yro1a9ZQvXp1rK2tcXJyolu3bjx8+DDb1/DlYQmTJk2iSpUqrFmzBnd3d2xtbenSpQvPnz9X2jx//pzu3btjaWmJs7Mz33//PfXr12fEiBHZHkeSJEl6//bv30/NmjV5+vQpkF4FoW/fvvk6sRVCcPLkSRYuXKiXO3z00UfZJrap2lSW/bOMdtvbcfTeUTRqDYOqDGJT6035MrEF2XP7xl41Bqd58+b8/vvvyvNChQqRkJCQZdt69erpJZTu7u48fvw4U7sXk9KcWrVqFb179+bEiROcOnWKfv364erqSt++fQEYMmQIly5dYt26dbi4uLBlyxaaNm3K+fPnKVWqFAAJCQl8++23LF++HHt7e5ydnalfvz49e/bk/v37yrGCgoLw9/dn4cKFVK1albNnzyr/SfTo0YO4uDjq1atHkSJF2L59O05OTpw5cwadTkfnzp25cOECe/bs4cCBA0B6zb2XpaWl0bZtW/r27cuvv/5KSkoKJ06cUBLs33//nXbt2vG///2P1atXk5KSwq5du5TtU1NTmTp1KmXKlOHhw4eMGjUKPz8/vTavc/36dbZu3crOnTt59uwZnTp14ptvvmH69OkAjBo1iiNHjrB9+3YKFy6Mv78/Z86coUqVKrl78yRJkqR3Ii0tjUmTJjFjxgyEEEybNo25c+caOqx/LTo6mu3btxMREQHAiRMnaNCgwSu3Of3gNFNDpnI9Jv2KbE3nmnxd62vcbNzeebzvlJBETEyMAERMTEymdYmJieLSpUsiMTFRbzmQ7aN58+Z6bS0sLLJtW69ePb22Dg4OWbbLrXr16omyZcsKnU6nLBs3bpwoW7asEEKIW7duCSMjI3H37l297Ro2bCgmTJgghBAiMDBQACI0NFSvzZYtWzLFVKJECfHLL7/oLZs6darw8fERQgjx008/CWtra/HkyZMs4w0ICBCVK1d+5Tk9efJEACI4ODjL9T4+PqJ79+6v3MeLTp48KQDx/PlzIYQQhw4dEoB49uyZECL9/G1tbfVitLCwELGxscqyMWPGiJo1awohhIiNjRUmJiZi48aNyvro6GhhYWEhhg8fnuO4pLcvu++xJEn/Lbdv3xYfffSR8re1X79+IiEhwdBh/Ss6nU6cOnVKzJgxQ0yaNElMmzZNHDt2TO/v/8ueJT4TXx/+WlRYWUFUWFlBfLzuY7Hj+o5XbpMXvCpfe5HsuX1DcXFx2a7LGOeS4VWXvtVq/ZEhN2/e/FdxvahWrVp6wwZ8fHyYM2cOWq2W8+fPo9VqKV26tN42ycnJ2NvbK881Gg2VKlV65XHi4+O5fv06vXv3VnqFIf3XcUYPbGhoKFWrVsXOzi673byWnZ0dfn5++Pr60rhxYxo1akSnTp1wdnZWjvHi8V92+vRpJk2axLlz53j27Bk6XfrUgZGRkZQrVy5HMbi7u+vNte3s7Ky8vzdu3CA1NRVvb29lva2tLWXKlMn1uUqSJElv1+7du/n888958uQJ1tbWLF26VJl5LL+KiYlh+/bt3LhxA4BixYrRpk0bvb/jLxJCsOPGDmafnM2z5GcAtC/VnpFeI7E1zXzFNL+Sye0bys2YnHfV9t+Ii4vDyMiI06dPZ0rGXxxyYW5u/tqbxjIS/WXLllGzZk29dRn7fls3ZgUGBjJs2DD27NnD+vXrmThxIvv376dWrVqvPEZ8fDy+vr74+voSFBSEo6MjkZGR+Pr6kpKSkuPjm5iY6D1XqVRKkixJkiTlTWvXruXzzz8HoFq1aqxfv/61M3LlB0eOHOHGjRsYGxvzySefULNmzUydZhkiYiKYdmwaJ6JOAFCyQEn8ffypWqjq+wz5vZDJ7Qfs+PHjes+PHTtGqVKlMDIyomrVqmi1Wh4+fMhHH330r45TuHBhXFxcuHHjBt27d8+yTaVKlVi+fDlPnz7NsvdWo9Gg1WpzdLyqVatStWpVJkyYgI+PD7/88gu1atWiUqVKHDx4kJ49e2ba5vLlyzx58oRvvvmGYsWKAXDq1KlcnOXrFS9eHBMTE06ePImrqyuQ/qv6ypUrfPzxx2/1WJIkSVLONW/eHDc3N1q3bs13332HqampoUN6Kxo2bEh8fDwNGjTIdha1ZG0yP5//meXnl5OqS8XMyIz+lfvTo1wPTIxMstwmv5PJ7QcsMjKSUaNG0b9/f86cOcOCBQuYM2cOAKVLl6Z79+588cUXzJkzh6pVq/Lo0SMOHjxIpUqVaNGiRa6ONXnyZIYNG4atrS1NmzYlOTmZU6dO8ezZM0aNGkXXrl2ZMWMGbdu2ZebMmTg7O3P27FlcXFzw8fHB3d2diIgIQkNDKVq0KNbW1pn+84mIiGDp0qW0bt0aFxcXwsPDuXr1Kl988QUAAQEBNGzYkBIlStClSxfS0tLYtWsX48aNw9XVFY1Gw4IFCxgwYAAXLlxg6tSpb+eF/v+sra3p0aMHY8aMwc7OjkKFChEQEJCpqoQkSZL07p06dUqp6WpnZ0doaGi+nphHCMG5c+e4evUqHTp0QKVSYWpqSseOHbPd5vj940w9NpVbselVheoWqcv/av6PotZF31fYBiFLgX3AvvjiCxITE/H29mbw4MEMHz6cfv36KesDAwP54osv+PLLLylTpgxt27bV63XMjT59+rB8+XICAwOpWLEi9erVY+XKlXh4eADpPbP79u2jUKFCNG/enIoVK/LNN98owxbat29P06ZNadCgAY6Ojvz666+ZjmFhYcHly5dp3749pUuXpl+/fgwePJj+/fsD6eXPNm7cyPbt26lSpQqffPIJJ06kX35xdHRk5cqVbNy4kXLlyvHNN98we/bsXJ/n68ydOxcfHx9atmxJo0aNqFOnjlIeTZIkSXr3UlJSGDVqFDVq1ODnn39WlufnxPb58+f8+uuvbNu2jUuXLnHp0qVXtn+S+IQJf0+gz74+3Iq9hYO5A7PrzWZRw0UffGILoBLiDWpMfWBiY2OxtbUlJiYGGxsbvXVJSUlERETg4eGRrxKU+vXrU6VKFebNm2foUP7T4uPjKVKkCHPmzKF3796GDuc/K79+jyVJyp2IiAg6d+7MyZMnAZgwYQIzZswwcFRvTgjBP//8w549e0hKSsLIyIj69etTu3btLMfW6oSOLVe3MPf0XGJTYlGhonOZzgyrNgxrjXUWR8hfXpWvvUgOS5Ckt+js2bNcvnwZb29vYmJimDJlCpA+m5skSZL07mzevJlevXoRExNDwYIFWblyJa1btzZ0WG8sLi6OnTt3Eh4eDoCLiwtt2rShUKFCWba/9uwaU45N4ezDswB42nniX8ufio4V31vMeYVMbiXpLZs9ezbh4eFoNBq8vLz4+++/sx3oL0mSJP07SUlJjBkzhoULFwLpZS/XrVv3RkPs8pINGzZw+/Zt1Go19evXp06dOln21iamJfLTuZ9YdXEVaSINc2NzBlcZTPey3TFW/zfTvP/mWf8HvDjrmfT+VK1aldOnTxs6DEmSpP+Ms2fPKtO9jx07lmnTpmUq25gfNWnShN27d9O6dWsKFy6cZZvDdw8z7dg07sbdBaBBsQZM8J6As5Xz+ww1z5HJrSRJkiRJ+ZaPjw/fffcdnp6eNG/e3NDhvBEhBBcvXiQxMZEaNWoAULRoUfr06ZNltZ1HCY/49uS37L25F4DCFoWZUHMCDV0bvte48yqZ3EqSJEmSlG8kJiYyfvx4hgwZQqlSpQAYNWqUgaN6c/Hx8fz++++EhYVhZGSEh4eHMpTt5cRWq9Oy4coGfjjzA3GpcahVarqX7c7gKoOxNHk/k0DlBzK5lSRJkiQpX7h8+TKdOnXi/PnzHD58mJMnT2Y7I1d+cPHiRXbt2kVCQgJqtZq6detSsGDBLNtefnqZKSFTOP/4PAAV7Cvg7+NPWfuy7zPkfEEmt5IkSZIk5Xlr1qxh4MCBxMfHU6hQIb755pt8m9gmJCSwa9cuLl68CEChQoVo27Ytzs6Zx8ompCbwY+iPBIUFoRVaLE0sGV5tOJ1Kd8JIbfS+Q88XZHIrSZIkSVKeFR8fz9ChQwkMDASgQYMGBAUFZZkI5gdpaWn89NNPxMbGolKp+Oijj/j444+VSY1e9EfkH8w8MZOo+CgAmrg1YZz3OApZZF0OTEonk1tJkiRJkvKku3fv0qRJEy5duoRarSYgIID//e9/WSaC+YWxsTE1atTgn3/+oW3btri4uGRqExUfxczjM/nj9h8AFLEqwlc1v+Ljoh+/73DzpfzZny9JL1i6dCnFihVDrVZ/MDOy3bx5E5VKRWhoKJBe2k2lUhEdHW3QuCRJkt6nQoUKYWNjg5OTEwcPHsTf3z9fJraXL1/m3r17yvPatWvTr1+/TIltmi6N1RdX02ZrG/64/QfGKmN6VejFljZbZGKbCzK5/UA9f/6cESNG4Obmhrm5ObVr11amI8wghMDf3x9nZ2fMzc1p1KgRV69eVdYnJyfz+eefY2NjQ+nSpTlw4IDe9t999x1Dhw59L+eTndjYWIYMGcK4ceO4e/cu/fr1+9f7XLlyZZ6bg7x27drcv38fW1tbQ4ciSZL0TsXFxZGamgqAiYkJGzZs4Ny5c9SvX9+wgb2BxMREtmzZwvr169m6dStpaWkAqNVqjI31L55feHyBbr9347tT35GQlkAVxyqsb7WekV4jMTc2N0T4+ZYclvCB6tOnDxcuXGDNmjW4uLiwdu1aGjVqxKVLlyhSpAgAs2bN4ocffmDVqlV4eHjw9ddf4+vry6VLlzAzM2Pp0qWcPn2akJAQdu/eTbdu3Xjw4AEqlYqIiAiWLVvGqVOnDHJ+Qgi0Wi2RkZGkpqbSokWLfDv+Kic0Gg1OTk6GDkOSJOmd+ueff+jUqROtW7dm1qxZABQrVszAUb2ZK1eusGPHDuLi4lCpVJQuXTrLds9TnrPg7ALWXV6HQGCtsWaU1yg+LfUpapXsg3wT8lV7QykpKdk+Mn6Z5aRtxq/T17XNjcTERDZt2sSsWbP4+OOPKVmyJJMmTaJkyZIsXrwYSE8O582bx8SJE2nTpg2VKlVi9erV3Lt3j61btwIQFhZG69atKV++PIMHD+bRo0c8fvwYgIEDB/Ltt99iY2Pz2nj8/Pxo27YtkydPxtHRERsbGwYMGKB3XjqdjpkzZ+Lh4YG5uTmVK1fmt99+U9ZnXJbfvXs3Xl5emJqasnbtWipWTJ8zu3jx4qhUKm7evAnAtm3bqFatGmZmZhQvXpzJkyfrvS/R0dH079+fwoULY2ZmRoUKFdi5cyfBwcH07NmTmJgYVCoVKpWKSZMmZXle586do0GDBlhbW2NjY4OXl5desn/kyBHq16+PhYUFBQsWxNfXl2fPngGwZ88e6tatS4ECBbC3t6dly5Zcv34929fw5WEJGb3Le/fupWzZslhZWdG0aVPu37+vbJOWlsawYcOUY4wbN44ePXrQtm3b175nkiRJ75MQgp9++glvb2/Cw8P59ddfiY2NNXRYbyQpKYmtW7fy66+/EhcXh729Pb169aJRo0Z6vbVCCPbd3EebrW349fKvCAQtirdge9vtdCjdQSa2/4LsuX1DM2fOzHZdqVKl6Natm/J89uzZmZLYDG5ubvj5+SnP58+fT0JCQqZ2AQEBOY4tLS0NrVaLmZmZ3nJzc3MOHz4MQEREBFFRUTRq1EhZb2trS82aNQkJCaFLly5UrlyZNWvWkJiYyN69e3F2dsbBwYGgoCDMzMxo165djmM6ePAgZmZmBAcHc/PmTXr27Im9vT3Tp08H0l/PtWvXsmTJEkqVKsVff/3FZ599hqOjI/Xq1VP2M378eGbPnk3x4sUxMzPjwIEDNGrUiBMnTlCsWDEcHR35+++/+eKLL/jhhx/46KOPuH79ujJcISAgAJ1OR7NmzXj+/Dlr166lRIkSXLp0CSMjI2rXrs28efPw9/cnPDwcACsrqyzPqXv37lStWpXFixdjZGREaGioMuVjaGgoDRs2pFevXsyfPx9jY2MOHTqEVqsF0u/+HTVqFJUqVSIuLg5/f3/atWtHaGhojkvbJCQkMHv2bNasWYNareazzz5j9OjRBAUFAfDtt98SFBREYGAgZcuWZf78+WzdupUGDRrk+H2TJEl612JjY+nXrx/r168HoHnz5qxatSpHnSd5TXR0NCtWrOD58+dA+uxpDRo0yDQd8N24u0w/Np2/7/4NgKu1KxNrTcTHxee9x/whksntB8ja2hofHx+mTp1K2bJlKVy4ML/++ishISGULFkSgKio9LIiL89XXbhwYWVdr169+OeffyhXrhwODg5s2LCBZ8+e4e/vT3BwMBMnTmTdunWUKFGCFStWKMMdsqLRaFixYgUWFhaUL1+eKVOmMGbMGKZOnUpqaiozZszgwIED+Pikf7GLFy/O4cOH+emnn/SS2ylTptC4cWPl+aNHjwBwdHRULttPnjyZ8ePH06NHD2VfU6dOZezYsQQEBHDgwAFOnDhBWFiYcpmoePHiyj5tbW1RqVSvHQYQGRnJmDFj8PT0BFBmyoH0IR/Vq1dX5jsHKF++vPLv9u3b6+1rxYoVODo6cunSJSpUqPDK42ZITU1lyZIllChRAoAhQ4YwZcoUZf2CBQuYMGGC8iNk4cKF7Nq1K0f7liRJeh/OnDlD586duXbtGsbGxsyYMYMvv/wy39avtbW1xcHBARMTE9q2bZtpSEWqLpXVF1ez5NwSkrRJGKuN6VOxD30q9sHUyNRAUX94ZHL7hiZMmJDtupe/lKNHj8627ctT6w0fPvzfBfb/rVmzhl69elGkSBGMjIyoVq0aXbt25fTp0zneh4mJCT/++KPesp49ezJs2DDOnj3L1q1bOXfuHLNmzWLYsGFs2rQp231VrlwZCwsL5bmPjw9xcXHcvn2buLg4EhIS9JJWSB+iUbVqVb1l1atXf23c586d48iRI0qvMIBWqyUpKYmEhARCQ0MpWrRotuOfcmrUqFH06dOHNWvW0KhRIzp27KgkmqGhoXTs2DHbba9evYq/vz/Hjx/n8ePH6HQ6ID1hzmlya2FhoRwPwNnZmYcPHwIQExPDgwcP8Pb2VtYbGRnh5eWlHEuSJMmQ4uPjadKkCU+ePMHV1ZV169YpHRz5yY0bNyhSpAimpqaoVCo+/fRTTE1NM/XWhj4MZXLIZK5FXwOgeuHqfO3zNcVti2e1W+lfkMntG9JoNAZv+yolSpTgzz//JD4+ntjYWJydnencubPSQ5nRK/ngwQO9G7EePHhAlSpVstznoUOHuHjxIsuXL2fMmDE0b94cS0tLOnXqxMKFC9841ri4OAB+//33TL2/pqb6v2QtLV8/d3ZcXByTJ0/m008/zbTOzMwMc/O3c9fppEmT6NatG7///ju7d+8mICCAdevW0a5du9ceo1WrVri5ubFs2TJcXFzQ6XRUqFAhV+OrX/6PU6VSIYR4o3ORJEl63ywtLfnhhx/YsGEDK1aswM7OztAh5UpycjJ79+7l7NmzVK9enRYtWgCZh7LFJMcw78w8fruSfh9JAdMCjK4+mtYlWmfq4JLejvzZ7y/lmKWlJc7Ozjx79oy9e/fSpk0bADw8PJS6gRliY2M5fvx4lr+ck5KSGDx4MD/99BNGRkZotVplHHFqaqoyljQ7586dIzExUXl+7NgxrKysKFasGOXKlcPU1JTIyEhKliyp93iTu2SrVatGeHh4pn2VLFkStVpNpUqVuHPnDleuXMlye41G89rzyVC6dGlGjhzJvn37+PTTT5UZdCpVqqT32r7oyZMnhIeHM3HiRBo2bEjZsmWVG83eFltbWwoXLqxX/k2r1XLmzJm3ehxJkqTcOHnypHLvB0C3bt3YsmVLvktsb9y4waJFizh79iyQfmXs5c4FIQS/3/id1ltbK4ltu5Lt2NF2B21KtsmXie3z58/Zv39/jv9GGorsuf1A7d27FyEEZcqU4dq1a8rY0J49ewLpvXwjRoxg2rRplCpVSikF5uLikuXd9FOnTqV58+bKMIE6deowZswYevbsycKFC6lTp84r40lJSaF3795MnDiRmzdvEhAQwJAhQ1Cr1VhbWzN69GhGjhyJTqejbt26xMTEcOTIEWxsbJSxsznl7+9Py5YtcXV1pUOHDqjVas6dO8eFCxeYNm0a9erV4+OPP6Z9+/bMnTuXkiVLcvnyZVQqFU2bNsXd3Z24uDgOHjyoDKd4cUgFpFekGDNmDB06dMDDw4M7d+5w8uRJZSzthAkTqFixIoMGDWLAgAFoNBoOHTpEx44dsbOzw97enqVLl+Ls7ExkZCTjx4/P1TnmxNChQ5k5cyYlS5bE09OTBQsW8OzZs3z5H6okSfmbEIL58+czduxYHBwcCA0NpVCh9Clk89P/ScnJyezfv18Z4lewYEFat26Nu7u7XrvI2EimHpvKsfvHAChuW5yva31NdafXD63Lq3Q6HYGBgTx79gxLS0tq165t6JCyJZPbD1RMTAwTJkzgzp072NnZ0b59e6ZPn653KXvs2LHEx8fTr18/oqOjqVu3Lnv27MlUZeHChQts2LBBmS0LoEOHDgQHB/PRRx9RpkwZfvnll1fG07BhQ0qVKsXHH39McnIyXbt21SuxNXXqVBwdHZk5cyY3btygQIECVKtWja+++irX5+7r68vOnTuZMmUK3377LSYmJnh6etKnTx+lzaZNmxg9ejRdu3YlPj6ekiVL8s033wDpEyYMGDCAzp078+TJEwICAjKVAzMyMuLJkyd88cUXPHjwAAcHBz799FMmT54MpPfo7tu3j6+++gpvb2/Mzc2pWbMmXbt2Ra1Ws27dOoYNG0aFChUoU6YMP/zww1svUD5u3DiioqL44osvMDIyol+/fvj6+ubL2X0kScq/nj59Ss+ePdm+fTuQ3jny8pCz/OD+/fusX7+emJgYAGrUqEGjRo30hhOmaFNYcWEFy/5ZRoouBY1aQ//K/elZvicmRibZ7TpfUKvVfPTRR5w+fTpTMp/XqIQcpEdsbCy2trbExMRkKj2SlJREREQEHh4emZI+KWf8/PyIjo5W6udKhqHT6ShbtiydOnVi6tSphg7nvZLfY0kyjKNHj9KlSxdu376Nqakp33//PQMGDMhXvbUZ4uLiWLRoEaamprRu3RoPDw+99SejTjL12FQiYiIA8HH2YWKtibjauBoi3H8tNjaW/fv34+3trQwRzEgZDfX+vSpfe5HBx9zevXuXzz77DHt7e8zNzalYsaJeIfzXTREL6b8Ku3fvjo2NDQUKFKB3797KTUqS9F9169Ytli1bxpUrVzh//jwDBw4kIiJCrwazJEnSuyCEUCYSun37NqVKleLYsWMMHDgwXyW2GeUmIf1Gse7duzNgwAC9xPZZ0jMmHp5Ir729iIiJwN7Mnm8/+pafGv+UbxNbgL/++osLFy6wZ88evaQ2P7x/Bk1unz17Rp06dTAxMWH37t1cunSJOXPmULBgQaVNxhSxS5Ys4fjx41haWuLr60tSUpLSpnv37ly8eJH9+/ezc+dO/vrrL6VovyT9V6nValauXEmNGjWoU6cO58+f58CBA5QtW9bQoUmS9B9w9uxZtFqtUoYyu0o8eVFqaip79uxh0aJFhIWFKcszSn5BegK/5eoWWm9tzbbr2wDoWLoj29puo3nx5vkiCXzZi6UiGzRoQMmSJWnZsmW+OxeDDksYP348R44c4e+//85yvRACFxcXvvzyS6VWbExMDIULF2blypV06dKFsLAwypUrx8mTJ5UaqHv27KF58+bcuXMHFxeX18YhhyVI0odNfo8l6f0QQiiJUGxsLNu3b6d79+75KjmKjIxk27ZtPH36FEgfI/zibJ4AN6JvMOXYFE4/SL+xrFTBUvjX8qdKoSrvO9y3Ijo6mn379mFlZUXz5s0NHU628sWwhO3bt1O9enU6duxIoUKFqFq1KsuWLVPWv26KWICQkBAKFCigV9y/UaNGqNVqjh8/nuVxk5OTiY2N1XtIkiRJkvRmtFot06ZNo2PHjsolbBsbGz777LN8k9impqayd+9eAgMDefr0KTY2NnTv3l0vB0lKS2LB2QW039Ge0w9OY25sziivUaxvuT7fJraQfiU9LCyMM2fOfBDDOg1aLeHGjRssXryYUaNG8dVXX3Hy5EmGDRuGRqOhR48eOZoiNioqSiknksHY2Bg7Ozulzctmzpyp3NUuSZIkSdKbe/DgAZ999hkHDhwA0ktRNm3a1MBR5c6dO3fYunUrT548AaBKlSr4+vrqXek5eu8o045N4/bz2wB8XPRjvqr5FUWssp96Pi+Lj49XJkby8PDgk08+oUyZMpkmociPDJrc6nQ6qlevzowZMwCoWrUqFy5cYMmSJbmubZobEyZMYNSoUcrz2NjYN5osQJIkSZL+y/744w+6devGgwcPsLCw4Mcff8x3iS2k1y5/8uQJ1tbWtGrVilKlSinrHic+5ruT37ErYhcAhcwLMb7meBq5Nso3vdIvio+PZ/v27dy/f58hQ4Yopcw++ugjA0f29hg0uXV2dqZcuXJ6y8qWLcumTZuAnE0R6+TkxMOHD/X2kZaWxtOnT5XtX2Zqapova+xJkiRJUl6g1WqZMmUKU6dORQhB+fLl2bBhQ6a/6XlZUlKS0jNbqlQpWrdujaenpzJ9uk7o+O3Kb8w7M4/nKc9Rq9R09ezKkCpDsNLk395NU1NTHj16RHx8PLdu3dJL5D8UBk1u69SpQ3h4uN6yK1eu4ObmBuhPEZuRzGZMETtw4EAAfHx8iI6O5vTp03h5eQHpvyR1Oh01a9Z8fycjSZIkSf8RPXv2ZM2aNQD07t2bH374IdNMjnlVWloawcHBnDlzhgEDBig3JmXMwAlw5dkVpoRM4dyjcwCUtStLgE8A5R3KGyTmf0MIwe3bt3F1TS9LZmxsTLt27TAzM8PR0dHA0b0bBk1uR44cSe3atZkxYwadOnXixIkTLF26lKVLlwI5myK2bNmyNG3alL59+7JkyRJSU1MZMmQIXbp0yVGlBEmSJEmScmfAgAHs2LGDhQsX0r17d0OHk2N3795l27ZtSv3aixcv4uPjo6xPSE1gyT9LWH1xNVqhxcLYgqFVh9LFswvG6vw3qasQgvXr1xMeHk6XLl0oU6YMwAc/FNOg1RJq1KjBli1b+PXXX6lQoQJTp05l3rx5el+UsWPHMnToUPr160eNGjWIi4vLNEVsUFAQnp6eNGzYkObNm1O3bl0lQZY+fEuXLqVYsWKo1WrmzZtn6HDeips3b6JSqZQpj4ODg1GpVERHRxs0LkmS/pvS0tI4efKk8rx27drcunUr3yS2aWlpHDx4kJ9//plHjx5haWlJ586d9RLbv+78Rbtt7Qi8EIhWaGnk2ohtbbfxWbnP8mViC+mdhA4ODhgZGf2n/n7I6Xf5MOvcarVaJk2axNq1a4mKisLFxQU/Pz8mTpyoDIAXQhAQEMCyZcuIjo6mTp06LF68WBl/k5ycTJ8+fdi2bRtOTk4sWrRIryTKd999R2RkJAsWLDDIOUL6e+fg4MDcuXNp3749tra2//rS2MqVKxkxYoRB/yO4efMmHh4enD17lipVqpCSksLTp08pXLhwvryBwdDy6/dYkvKCO3fuKBMxnDhxggoVKhg6pFy5f/8+W7duVe7PqVChAs2aNVP+VjxMeMg3J75h/639ADhbOvNVza+oX6y+oUJ+Y0IILl26RNGiRbG1tQUgJSWF58+fY29vb+Do/r2c1rnNnz9FpNf69ttvWbx4MatWraJ8+fKcOnWKnj17Ymtry7Bhw4D/m/1t1apVypAPX19fLl26hJmZGUuXLuX06dOEhISwe/du5Y5YlUpFREQEy5Yt05sq+X0SQqDVaomMjCQ1NZUWLVro3XT4odFoNNneIClJkvSu/P777/To0UOpJBAZGZnvktt//vmHhw8fYmFhQYsWLZSb3rQ6LevC17Hg7ALiU+MxUhnxebnPGVh5IBYm+WP88Mv2799PSEgI5cuXp0OHDkD6348PIbHNFSGJmJgYAYiYmJhM6xITE8WlS5dEYmKi3vLk5GSRnJwsdDqdsiwtLU0kJyeL1NTUt942t1q0aCF69eqlt+zTTz8V3bt3F0IIodPphJOTk/juu++U9dHR0cLU1FT8+uuvQgghBg4cKMaNGyeEECIhIUEA4uHDh0IIIXx9fcXmzZtzFEuPHj1EmzZtxKRJk4SDg4OwtrYW/fv3F8nJyUobrVYrZsyYIdzd3YWZmZmoVKmS2Lhxo7L+0KFDAhC7du0S1apVEyYmJiIwMFAAeo+IiAghhBBbt24VVatWFaampsLDw0NMmjRJ77V+9uyZ6NevnyhUqJAwNTUV5cuXFzt27FCO8+IjICAgy/MKDQ0V9evXF1ZWVsLa2lpUq1ZNnDx5Ull/+PBhUa9ePWFubi4KFCggmjRpIp4+fSqEEGL37t2iTp06wtbWVtjZ2YkWLVqIa9euKdtGREQIQJw9e1bv/J89eyaEECIwMFDY2tqKPXv2CE9PT2FpaSl8fX3FvXv3lH2kpqaKoUOHKscYO3as+OKLL0SbNm1y9L59SLL7HkuSlLWUlBQxevRo5f/BatWqiatXrxo6rBzTarXKv1NSUsTu3btFXFycsuzi44ui847OosLKCqLCygqi285u4vKTy4YI9a26f/++mD59ujh06JBeHvGheFW+9iKDjrnNz2bOnMnMmTNJSEhQlh05coSZM2eya9cuvbazZ89m5syZxMTEKMtOnjzJzJkz2b59u17b+fPnM3PmTGWwO6CMu8yN2rVrc/DgQa5cuQLAuXPnOHz4MM2aNQNyNvtb5cqVOXz4MImJiezduxdnZ2ccHBwICgrCzMyMdu3a5TiegwcPEhYWRnBwML/++iubN2/Wm0hj5syZrF69miVLlnDx4kVGjhzJZ599xp9//qm3n/Hjx/PNN98QFhZG48aNlaLhJ06c4P79+xQrVoy///6bL774guHDh3Pp0iV++uknVq5cyfTp04H0+srNmjXjyJEjrF27lkuXLvHNN99gZGRE7dq1mTdvHjY2Nty/f5/79+8rUz+/rHv37hQtWpSTJ09y+vRpxo8fj4mJCZD+njVs2JBy5coREhLC4cOHadWqFVqtFkivMzhq1ChOnTrFwYMHUavVtGvXTm9e79dJSEhg9uzZrFmzhr/++ovIyEi9WL/99luCgoIIDAzkyJEjxMbGsnXr1hzvX5Kk/6Zbt27x8ccfM3v2bACGDh3K0aNHKVmypIEjez2tVktwcDBr1qxR/j81MTGhadOmWFpaEp8az7cnvqXr7125+OQi1ibWTKw5kdXNVlPGroyBo88dIQTnz5/XyxGcnJwYNWoU9evX/08PYZPDEj5Q48ePJzY2Fk9PT4yMjNBqtUyfPl0Z/J+T2d969erFP//8Q7ly5XBwcGDDhg08e/YMf39/goODmThxIuvWraNEiRKsWLGCIkWyn6VFo9GwYsUKLCwsKF++PFOmTGHMmDFMnTqV1NRUZsyYwYEDB5TB/cWLF+fw4cP89NNP1KtXT9nPlClTaNy4sfI840eAo6Ojctl+8uTJjB8/XpkIpHjx4kydOpWxY8cSEBDAgQMHOHHiBGFhYZQuXVppk8HW1haVSvXaYQCRkZGMGTMGT09PAL1agbNmzaJ69eosWrRIWVa+/P+VkGnfvr3evlasWIGjoyOXLl3K8SW/1NRUlixZQokSJQAYMmQIU6ZMUdYvWLCACRMmKD9CFi5cmOmHlyRJ0svWrl3LsWPHKFCgACtWrMhVR4YhRUVFsW3bNuVv2JUrV5T/n4UQ/BH5BzNPzORBwgMAmrk3Y6z3WBzMHQwW878RFhbG5s2bMTU1pVSpUspsY/K+ApncvrEJEyYAKD11kF63t1atWqjV+h3iGb1pL7atUaMG1apVy9R2+PDhmdpm1PjNjQ0bNhAUFMQvv/xC+fLlCQ0NZcSIEbi4uOR49jcTExN+/PFHvWU9e/Zk2LBhnD17lq1bt3Lu3DlmzZrFsGHDlMk3slK5cmW9G718fHyIi4vj9u3bxMXFkZCQoJe0Qvog+BfrDgJUr179tXGfO3eOI0eOKD21kP5rPikpiYSEBEJDQylatKiS2L6pUaNG0adPH9asWUOjRo3o2LGjkmiGhobSsWPHbLe9evUq/v7+HD9+nMePHys9DLkZz2ZhYaEcD9InRcm4YSImJoYHDx7g7e2trDcyMsLLyytXvcOSJP33jB8/nocPHzJy5Ejc3d0NHc5rabVaDh8+zF9//YVOp8Pc3JzmzZsrZa/ux91nxvEZBN8JBqCoVVEm1ppInSJ1DBj1v+fp6YmrqyslSpSQE1O9RCa3byhjuroXGRkZYWRk9E7a5taYMWMYP348Xbp0AaBixYrcunWLmTNn0qNHjxzN/vayQ4cOcfHiRZYvX86YMWNo3rw5lpaWdOrUiYULF+Y6xgxxcXFA+o0LL/f+vvyFzfhl+rr9TZ48mU8//TTTOjMzM2X2mX9r0qRJdOvWjd9//53du3cTEBDAunXraNeu3WuP0apVK9zc3Fi2bBkuLi7odDoqVKhASkpKjo//4g8gSC/5ImTxE0mScunGjRtMmzaNRYsWYWZmhpGREfPnzzd0WDny8OFDtm7dyv3794H0hK9FixZYWVmRpksj6FIQP4b+SGJaIsZqY3qW70m/Sv0wM85fvZtCCM6dO8fly5fp3LkzKpUKtVqNn5/ff3r4QXZkcvuBSkhIyNQrbGRkpPTa5WT2txclJSUxePBggoKClGEOGYlUamqqMpY0O+fOnSMxMVFJ+o4dO4aVlRXFihXDzs4OU1NTIiMj9YYgvKlq1aoRHh6e7fiwSpUqcefOHa5cuZJl761Go3nt+WQoXbo0pUuXZuTIkXTt2pXAwEDatWtHpUqVOHjwoN644gxPnjwhPDycZcuWKXN5Hz58OBdn+Hq2trYULlyYkydP8vHHHwPpvRtnzpx5oysBkiR9mH777Td69+5NbGws9vb2fPfdd4YOKceEEOzYsYP79+9jZmZG8+bNqVChAiqVin8e/cOUkCmEP0ufBbVaoWr4+/hTokCJ1+w1b4qPj2f37t2kpKRw4cIFKlasCCAT22zI5PYD1apVK6ZPn46rqyvly5fn7NmzzJ07l169egE5m/3tRVOnTqV58+bKMIE6deowZswYevbsycKFC6lT59WXd1JSUujduzcTJ07k5s2bBAQEMGTIENRqNdbW1owePZqRI0ei0+moW7cuMTExHDlyBBsbmxwPo8jg7+9Py5YtcXV1pUOHDqjVas6dO8eFCxeYNm0a9erV4+OPP6Z9+/bMnTuXkiVLcvnyZVQqFU2bNsXd3Z24uDgOHjyoDKd4uXZuYmIiY8aMoUOHDnh4eHDnzh1OnjypjKWdMGECFStWZNCgQQwYMACNRsOhQ4fo2LEjdnZ22Nvbs3TpUpydnYmMjGT8+PG5OsecGDp0KDNnzqRkyZJ4enqyYMECnj17Jv8zlCSJpKQkvvzyS+W+gDp16ihlIvMLlUpFy5Yt+fPPP2nWrBnW1tY8T3nO/DPz2RC+AYHA1tSWUV6jaFuyLWpV/rqHXqvVKlduraysaNiwIampqUopM+kV3nndhnzgTUqB5XWxsbFi+PDhwtXVVZiZmYnixYuL//3vf3rlt3Q6nfj6669F4cKFhampqWjYsKEIDw/PtK/z58+LkiVL6pVR0Wq1YuDAgcLGxkbUqFHjlSViMkqB+fv7C3t7e2FlZSX69u0rkpKS9GKZN2+eKFOmjDAxMRGOjo7C19dX/Pnnn0KIzKWwMpw9e1avBFiGPXv2iNq1awtzc3NhY2MjvL29xdKlS5X1T548ET179hT29vbCzMxMVKhQQezcuVNZP2DAAGFvb59tKbDk5GTRpUsXUaxYMaHRaISLi4sYMmSI3uckODhY1K5dW5iamooCBQoIX19fJf79+/eLsmXLClNTU1GpUiURHBwsALFlyxYhRM5Lgb1oy5Yt4sWvdGpqqhgyZIiwsbERBQsWFOPGjRMdO3YUXbp0ye6t+mDl1++xJL0LV65cEVWqVFHKfE2YMEGkpKQYOqzX0mq14u+//xZ//fVXpnU6nU7svrFb1F9fXynv9dXfX4kniU8MEOm/o9PpxKlTp8Ts2bOV8ptSupyWApMzlPFhzlCWl/j5+REdHS3LUBmYTqejbNmydOrUialTpxo6nPdKfo8lKd3evXvp0KEDcXFxODg4sHbtWnx9fQ0d1ms9fvyYrVu3cvfuXdRqNYMGDVImJrj9/DbTj0/nyN0jALjbuDOx1kRqOtc0ZMj/yrp16wgPD6datWq0atXK0OHkGXKGMkn6j7t16xb79u2jXr16JCcns3DhQiIiIujWrZuhQ5MkyUDKlCmDsbEx9erV45dffsHFxcXQIb2STqfj2LFj/PHHH2i1WkxNTWnatCl2dnakalNZeXElP/3zE8naZEzUJvSt2JfeFXujMcp8c3ZeFh8fj0ajUW4U9vX1xc3NTa/ijZRzMrmVpA+UWq1m5cqVjB49GiEEFSpU4MCBA5QtW9bQoUmS9B49efJE6eV0d3fn8OHDSpKblz158oStW7dy584dAEqWLEmrVq2wsbHhzIMzTAmZwvWY6wDUdKrJxFoTcbd1N2DEb+b8+fPs2rULb29vGjRoAEDBggWVuu9S7uXtT7b0QVi5cqWhQ/hPKlasGEeOHDF0GJIkGdCqVasYMmQIGzZsUGaofHFCmbwqJSWFn3/+mcTERDQaDb6+vlStWpXYlFgCjgaw+epmAOzM7BhdfTQti7fMtzfLGhkZkZSUxI0bN6hXr16mSkdS7snkVpIkSZI+MPHx8QwePJhVq1YB6UluRnKbH2g0GurVq8eVK1do3bo1NjY27Lyxk9mnZvM06SkA7Uu1Z6TXSGxNbQ0cbe7ExcURFxen1JvPuBeiTJkyMrF9S2Rym0PyvjtJyr/krGzSf8mFCxfo1KkTYWFhqNVqJk2axFdffWXosF5JCMHx48dxdnbGzc0NAG9vb7y9vbkVe4sv933J8ajjAJQsUJKva31NtcLVDBnyG7l16xa//vorVlZWDBw4ECMjI1QqlRwu9pbJ5PY1TExMUKlUPHr0CEdHx3x72UOS/ouEEKSkpPDo0SPUanWWMwBK0odCCMHPP//M0KFDSUpKwtnZmV9//fWtTI7zLj19+pTt27dz69YtChYsyMCBAzExMSFVl8rP539m2fllpOpSMTUyZUDlAfQo1wMTI5PX7zgPKly4MMbGxmg0GuLi4rC1zV+9zvmFLAXG60tLxMXFcefOHdl7K0n5lIWFBc7OzjK5lT5ohw8fVmY99PX1ZfXq1RQqVMjAUWVPCMHJkyc5cOAAqampmJiY0KRJE7y8vDgZdZKpx6ZyM/YmAHWK1OF/Nf9HMetihg06l54/f054eDjVq1dXlj158oSCBQvKIQhvQJYCe4usrKwoVaoUqamphg5FkqRcMjIywtjYWF51kT54devWpV+/fnh4eDB27Ng8nTw9e/aM7du3c/PmTSC9ikPr1q0R5oL/Hf4fO27sAMDB3IFx3uPwdfPNd9/hhIQEfvzxR5KTkylUqBCurq4ASuUK6d2RyW0OGRkZKdPgSZIkSZKhCSFYsWIFrVq1UnpolyxZkueTwCdPnvDTTz8pvbWNGjXCq7oX265vY86pOcSmxKJCRacynRhWbRg2mux76PIyCwsLypcvz8OHDzE1NTV0OP8pMrmVJEmSpHwmJiaGfv36sWHDBnx9fdm1axdqtTrPJ7YAdnZ2eHh4kJSURJs2bXiqekqvvb048/AMAGUKlsHfx59KjpUMHGnuxMTEEBwcTOPGjbGwsACgadOm8sqRAcjkVpIkSZLykVOnTtG5c2du3LiBsbExTZo0ydPJkxCCc+fOUaZMGczNzVGpVHz66afo1DqWnV9G4IVA0kQa5sbmDK4ymO5lu2Oszn/pyW+//cadO3cwNjamRYsWAMqMY9L7lf8+PZIkSZL0HySEYMGCBYwePZrU1FTc3NxYv349NWvWNHRo2YqJiWHHjh1cv36dSpUq0a5dOwBOPT7FtGPTuBOXPvtY/WL1+cr7K5ytnA0Zbq4JIZQfFo0aNeKPP/7Qu3lMMgyZ3EqSJElSHhcdHU2vXr3YsmULAG3btmXFihUULFjQwJFlTQjB2bNn2bdvH8nJyRgbG+Pk5MTD+Id8d+o79tzcA0Ahi0J8VfMrGro2NHDEufPs2TP27t1LuXLlqFQpffiEm5sbfn5+eboX/b9CJreSJEmSlMep1Wr++ecfTExMmD17NkOHDs2zSVRsbCw7duzg2rVrABQtWpRWrVtx6Mkhvtz2Jc9Tn6NWqenm2Y0hVYdgaWJp4Ihz78KFC4SHh3P//n0qVKigVKbIq+/Jf41MbiVJkiQpD8qora5SqbCxseG3334jLS0tT1/2zpiBKzk5GSMjIz755BMKli7IyOMj+efxPwCUty+Pv48/5ezLGTja3Mmo7gDg4+PD06dPqV27dp4uufZfJZNbSZIkScpjnjx5gp+fH02aNGHo0KEAVKlSxbBB5UChQoUwMTHBwcEB3xa+rL+znrW71qIVWixNLBlWdRidy3TGSJ1/SmtGR0eza9cudDod3bt3R6VSYWxsTJs2bQwdmpQNmdxKkiRJUh5y5MgRunbtyu3bt/nrr7/4/PPPKVCggKHDypIQgoiICDw8PFCpVJibm+Pn58c/cf/Q+0hv7sffB6CxW2PG1RhHYcvCBo4497RaLTdu3EAIwePHj3F0dDR0SNJryORWkiRJkvIAnU7HrFmzmDhxIlqtltKlS7Nhw4Y8m9jGxcWxc+dOwsPDadu2LZUrVyYqPopv/vmGg5EHAXCxdOF/tf7Hx0U/NnC0OSeE4OnTp8pMYvb29rRq1YoiRYrg4OBg4OiknJDJrSRJkiQZ2MOHD/niiy/Yu3cvAN27d2fx4sVYW1sbOLLMhBBcuHCB3bt3k5iYiFqtJj4hnjWX1rDw7EIS0hIwVhnzefnPGVBpABYmFoYOOceSkpLYuHEjkZGRDBkyBFtbWwAqV65s4Mik3JDJrSRJkiQZUEJCAjVq1CAyMhJzc3MWLFhAr1698uSd93Fxcfz+++9cvnwZAGdnZyrUq8C8K/MIuxIGQGXHyvj7+FO6YGlDhvpGTE1N0Wq1CCG4ffu2ktxK+YtMbiVJkiTJgCz+H3v3HR1VufVx/Htm0jvpCQQIndBDCaH30Kv0ohRRJKAiingF6Sjq1WvDBogCIqhIBxGlh95bIEhP73WSzMx5/8jL3BsBTSDJJGF/1mIt58wp+yAZfjzznP3Y2fHCCy+wcuVK1q1bR/369c1d0gNduXKFX375xTRa27J1S47ZHmPSkUkYVSOOVo683PRlBtUchEYpGx0EVFXlypUr1KhRA61Wi6Io9OnTB0VRcHV1NXd54hEp6r1eI0+w1NRUnJ2dSUlJwcnJydzlCCGEKOeio6NJTU2lVq280U2j0YhOp8POrvR+hX/jxg1WrlyJt7c3ns09+STiE2KzYgHo6d+TV5u/irtt2ZqTun79ei5evEhISAgtW7Y0dzniHxQ0r8nIrRBCCFGCfvvtN0aNGoWbmxtHjx7F3t4ejUZTKoNtcnKy6YG2qlWrEjIwhO+iv2PfuX0AVHaszL9a/otWvq3MWOWjq1atGleuXEHG+coXCbdCCCFECdDr9cydO5eFCxeiqioeHh7Ex8djb1/6VujKzMxk27ZtXLlyheeffx5HF0e+u/gdn5/9nCx9FhYaC8bXH8+EBhOwsbAxd7kFoqoq586dw93dHV9fXwACAwOpUaOGzK0tZyTcCiGEEMXs7t27jBgxgn378kY8n332Wf7zn/9ga2tr5srud+nSJbZu3UpGRgaKonDg/AG+Sf6Gq0lXAWjq1ZTZLWdTzaWamSstnAMHDvD777/j6+vLhAkTUBQFRVEk2JZDEm6FEEKIYrRjxw5Gjx5NfHw8Dg4OfPnllwwfPtzcZd0nMzOT7du3c/78eQDc3N1IqJHAm9ffREXFxdqFV5q9Qr/q/UplJ4d/0qRJE44ePUqdOnUwGo1otWVnlTRROPJAGfJAmRBCiOKhqiqdO3fmjz/+oHHjxqxbt46aNWuau6z7hIeHs3nzZtNorVc9L77P+Z6EnAQA+lXvxyvNXqGCTQUzV1owqqpy+vRpUlJS6NChg2m7Xq/HwkLG9coqeaBMCCGEMDNFUVi1ahUffvgh8+bNw8amdM5PjYyMJCMjA2dXZ676XmV9+noA/J39mdVyFs29m5u5wsK5c+cOmzZtQlEUAgIC8PT0BJBg+4SQ/8tCCCFEEdqyZQtHjhxh/vz5APj6+rJkyRIzV3W/nJwcrKysAGjZuiWnEk6xOmM1unQdVhorJjacyNj6Y7HSWpm50oJRVdU0XcLPz4/GjRvj4eFhWkZXPDkk3AohhBBFICcnh5kzZ/Lvf/8bgLZt29KtWzczV3U/nU7Hzp07iYmJYfz48ZyKO8W8w/O4nnEdgJY+LZnVchaVnSqbudKCMRqNnDx5khMnTjB27FhTYO/Xr5+ZKxPmIuFWCCGEeEw3btxg6NChHD16FIAXX3yR9u3bm7mq+0VERLBp0ybS0tIAmLt1LhuSNgDgauPKa81fo6d/zzL1wJjBYODgwYMkJydz4sQJgoODzV2SMDMJt0IIIcRj2LBhA+PGjTMteLBixQr69+9v7rLy0el0/Prrr5w6dQoAK0crDroc5GbSTQAG1xrMi4Ev4mxdNtpi6XQ60/xlS0tLevbsSWJiIs2bl625waJ4SLgVQgghHtGbb77JwoULAWjZsiVr166lSpUqZq4qv2vXrrFp0yZSU1MBSPVOZbfVbgwaAzVcavBW8Fs09mxs3iIL4fjx4+zevZuBAweaOk+Uxg4Uwnwk3AohhBCPKDAwEIBXX32VhQsXYmlpaeaK8lNVlb1795KamorGTsNe573EWMdgo7VhauOpjA4YjaWmdNX8TxITE9HpdJw+fVpCrXggjTkvPmfOHNMKIfd+1alTx/S+Tqdj8uTJuLm54eDgwKBBg4iJicl3jlu3btGrVy/s7Ozw9PTk1VdfRa/Xl/StCCGEeELExsaa/nvgwIGcP3+eJUuWlKpge6+FvaIoVG5ZmWi3aH5y/4kY6xjaVmzLhn4bGFd/XJkItunp6aSnp5tet2/fnj59+jBo0CAzViVKM7OP3NarV4/ffvvN9Pp/e9C9/PLLbN26lfXr1+Ps7ExoaCgDBw7k4MGDQN4k8l69euHt7c2hQ4eIiopizJgxWFpasmjRohK/FyGEEOWXTqdj2rRp/Pjjj5w+fRpfX18g7++x0iI7O5tdu3ZhZWVFYNtA3jv+Hlv/3AqO4GnryYwWM+hapWuZeWDswoULbNq0iVq1apnCrLW1tWnEXIgHMXu4tbCwwNvb+77tKSkpLFu2jDVr1tCpUycAVqxYQd26dTl8+DAtW7bk119/5eLFi/z22294eXnRuHFj5s+fz4wZM5gzZ46pHchfZWdnk52dbXp9bx6SEEII8SBXrlxhyJAhnDlzBshbUnfcuHFmriq/69evs2nTJpKTk0GBd6LfIVaNRUFheJ3hTGkyBQcrB3OXWSgVKlQgJyeHpKQkcnNzS9XouCi9zDotAeDq1av4+vpSrVo1Ro4cya1btwA4ceIEubm5dOnSxbRvnTp1qFy5MmFhYQCEhYXRoEEDvLy8TPuEhISQmprKhQsXHnrNxYsX4+zsbPrl5+dXTHcnhBCirFu9ejWBgYGcOXMGDw+PUhdsc3Jy2LZtG99++y3JycnkWuWy13MvsWosdV3rsqbXGmYGzSwTwTY1NZVr166ZXvv6+jJ27FjGjx8vwVYUmFlHboOCgvjmm2+oXbs2UVFRzJ07l7Zt23L+/Hmio6OxsrLCxcUl3zFeXl5ER0cDEB0dnS/Y3nv/3nsPM3PmTKZNm2Z6nZqaKgFXCCFEPpmZmUydOpVly5YB0KFDB1avXm2ajlAa3Lx5k40bN5KUlATAdcfrnKlwBisrK15r8hrD6wzHQmP2L2kLJCoqihUrVqDVapkyZQp2dnYAVK5cNhaTEKWHWf/E9+jRw/TfDRs2JCgoiCpVqrBu3TpsbW2L7brW1tZYW1sX2/mFEEKUfW+//TbLli1DURRmz57NrFmz0Gq15i7LJDs7m7Vr16LT6ci2zOaI6xFibWPp5NeJmUEz8ba/f8pfaebl5YWrqytWVlbodDpTuBWisErVP+dcXFyoVasWERERdO3alZycHFNT7HtiYmJMc3S9vb1Nq8H87/v33hNCCCEe1euvv05YWBgzZ840PftRmqQYUkisnEh0ZDRnXc/i7ujORy0+omPljuYurUCSk5M5efIkHTt2RFEUNBoNo0aNwt7evsw88CZKJ7PPuf1f6enpXLt2DR8fH5o2bYqlpSW7d+82vR8eHs6tW7dMS+sFBwdz7ty5fG1Zdu3ahZOTEwEBASVevxBCiLIrPT2dDz74AKPRCICdnR27du0qNcE2NzeXnTt3cuXKFdZcWkPfX/qyLWcbZzzOMLL+SDb221hmgq1er+err75i//79nD171rTdwcFBgq14bGYduZ0+fTp9+vShSpUqREZG8tZbb6HVahk+fDjOzs6MHz+eadOm4erqipOTE1OmTCE4OJiWLVsC0K1bNwICAhg9ejRLliwhOjqaN998k8mTJ8u0AyGEEAV27tw5hgwZwuXLl8nJyWHGjBnmLimf27dvs3HjRhISEth/Yj+bfTZj1Bhp4N6A2cGzqeNa559PUopYWFgQHBxMREQEPj4+5i5HlDNmDbd37txh+PDhJCQk4OHhQZs2bTh8+DAeHh4AfPDBB2g0GgYNGkR2djYhISF89tlnpuO1Wi1btmxh0qRJBAcHY29vz9NPP828efPMdUtCCCHKEFVV+frrr5k6dSo6nQ5fX1/Tt4OlQW5uLn/88QeHDx9GVVWytFmcqHACO2s7Xgx8kcG1BqPVlJ55wA+TlJTEr7/+SufOnXF3dwegVatWtG7dWkZqRZFT1HvLmDzBUlNTcXZ2JiUlBScnJ3OXI4QQogSkpqby3HPPsXbtWiDvIeeVK1eaBljM7c6dO2zcuJH4+HgAbtjf4IzrGTpX78xrzV/Dw6501FkQ69at49KlS9SoUYORI0eauxxRRhU0r5WqB8qEEEKIknDmzBmeeuopIiIi0Gq1LFq0iOnTp6PRlI5HUeLi4li+fLlptPak20k0nho+avkRbSq2MXd5/0hVVVRVNf1+dunSBb1eT9euXc1cmXgSSLgVQgjxxNHr9dy6dQs/Pz/Wrl1Lq1atzF2Sid6oZ1vsNu7Y30Gv6jnvdp6RjUYyseFEbC2Kr01mUUlISGDHjh1UqlSJ9u3bA+Dq6sqIESPMXJl4Uki4FUII8UQwGAymPrVNmzbl559/Jjg4GFdXVzNXlhe2Dx48iF1VO5acXcLlxMsobgpNvJqwpuUaalSoYe4SCyw6OpqIiAhu375Ny5Yt5QFvUeIk3AohhCj3jh07xtNPP82qVasIDAwEoFevXmauKk9UVBQ/bfiJhLgE7trd5bLHZZysnXil2Sv0r9EfjVI6pko8jKqqZGZmYm9vD0BAQABt27alUaNGEmyFWcgDZcgDZUIIUV6pqsp//vMfXnvtNXJzc+nSpQu7du0yd1lA3kjy3r172X9gP6ig0+g45XaKwAaBvNLsFdxs3cxd4j9KSUlh48aNpKWl8fzzz5eqFdxE+SMPlAkhhHiiJSYmMnbsWDZt2gTAwIEDWbZsmZmryhMdHc36n9aTGJ8IwG2728RXjWdum7kE+QSZubqCs7a2JiYmhuzsbCIjI/Hz8zN3SUJIuBVCCFH+hIWFMWzYMG7duoWVlRXvv/8+kydPLhU9VS+FX2LdD+tAhWxNNmfdz9IzuCfjG4zHWlu6v8ZXVZU7d+6YQqyNjQ2DBg2iQoUKVKhQwczVCZFHwq0QQohy5ciRI7Rr1w69Xk/16tVZt26daZ6tuZ2KPcWCCwuorqlOknUS1IWP236Mv7O/uUv7RwaDgVWrVnHjxg3GjRtnCrjVqlUzc2VC5CfhVgghRLnSvHlzOnfujIuLC19++aXZn6UwGAwcPXWUndk7+SniJwCSqyYzteVU+lbvWypGkwtCq9Xi4uKChYUFCQkJMgVBlFryQBnyQJkQQpR1hw8fpmHDhtjZ2QGQmZmJra2t2YNjTEwMK9etJCsxi5OuJ/nT6U8G1hzIy4Ev42LjYtba/omqqpw7d46aNWtia5vXXzczM5Pc3FycnZ3NXJ14EhU0r5Xu/iJCCCHE3zAajSxatIg2bdowdepU03Y7OzuzBluj0cjmXZtZ+sVSshKzyNHkUMGxAt90/4a5reaW+mALsGnTJjZs2MAff/xh2mZnZyfBVpR6Mi1BCCFEmRQbG8vo0aP59ddfAdDpdOj1eiwszPtXW2R0JCt+WIE+WY+CQrRdNI3aN2JO0zlYai3NWlthNGzYkAsXLuDi4mLuUoQoFJmWgExLEEKIsmbPnj2MGDGCqKgobG1t+eSTTxg7dqzZpyFs2LuB03tPo1E15GhyyKyWycu9X6ayc2Wz1vVPVFXl1KlT2NnZUadOHdP2rKws05QEIcxN+twKIYQodwwGAwsWLGDevHkYjUYCAgJYt24d9erVM2tdibpE3j/+PvvD99NJ7USCfQKde3Smb0DZeGDs5MmTbNmyBUdHR/z9/U0ri0mwFWWRhFshhBBlRlxcHJ988glGo5GxY8fy8ccfm5Z9NQeDwcDao2tZenMpKdkpKNYK2mAt89vPx9m67MxNbdSoEcePH6dRo0Zmn9YhxOOSP8FCCCHKDG9vb7777jvi4uIYPXq0WWs5df0U635eh2W6JaqvSi2vWswOnk0jj0ZmreufGI1GTpw4wZ07dxgwYAAAFhYWTJw4sUyMMgvxTyTcCiGEKLX0ej1z5syhadOmpiDWvXt3s9aUmZPJJxs/If1SOjaqDblKLiOrjOTZLs9iqSn9D4wlJyezY8cOjEYjDRs2pHr16gASbEW5IeFWCCFEqXTnzh1GjBjB/v37cXFxoV27dri5uZm1pt8u/sb2rdtxynRCi5YclxyeHvw0tXxrmbWuf2IwGNBqtQC4urrSoUMHrK2t8fcv/SujCVFYEm6FEEKUOtu2bWPMmDEkJCTg6OjI0qVLzRps47Pi+feGf6ON0OKkOqHX6KkTVIfhXYaj0ZTelvFGo5GjR49y6NAhxo8fb+pR27ZtWzNXJkTxKb0/kUIIIZ44ubm5vPbaa/Tq1YuEhAQCAwM5efIkw4YNM0s9RtXIuvB19N3QlyvxV7BQLdC4aZj0/CRGdhtZqoMt5E01uHTpEmlpaRw7dszc5QhRImTkVgghRKmg0+no1KkTYWFhAEyZMoV3333X1JaqpF1OuMyiA4s4lXwKAK2/lqAWQYQEhZTq+alpaWnY29uj0WhQFIUePXpw584dAgMDzV2aECVCwq0QQohSwcbGhsDAQC5evMjy5csZOHCgWerIzM3ks7DPuBF2Aw+DB46VHZncdDLDag9Dq9GapaaCOn78OLt27aJTp04EBQUBeR0mvL29zVyZECWndH+fIoQQolzLyckhISHB9Pq9997j9OnTZgu2e27t4fkVz5OyJwUPnQeOBkc+a/EZI+uOLPXB9p6cnBwiIiKQBUjFk0pGboUQQpjF9evXGTp0KHZ2duzevRutVouNjQ1Vq1Yt8VqiM6JZsm8JurM6quvyWmM5ezkzZsgYXF1dS7yegkpJSSE3Nxd3d3cAAgMDsbOzo27duqV66oQQxUnCrRBCiBL3888/M27cOFJSUqhQoQLh4eEEBASUeB0Go4HvL3/PL3t+oU58HZxVZ9BAp86daBPcplQHxPDwcH766Sc8PT0ZP348iqKg0WjM8vsoRGnySOE2KSmJZcuWcenSJQDq1q3LuHHjSvW/boUQQpifTqfj1Vdf5ZNPPgEgODiYtWvXUrly5RKv5ULCBeaFzeNi/EXaprXFUrXE3cedYYOGmb2fbkH4+vqaAm1WVhZ2dnbmLkmIUkFRCzkpZ9++ffTt2xcnJyeaNWsGwIkTJ0hOTmbz5s20a9euWAotTqmpqTg7O5OSkoKTk5O5yxFCiHIpIiKCIUOGcOpUXveB1157jQULFmBpWbKreqXnpPPxqY/54fIPGDDgaOnI5DqTqZZdjaCgoFLb3is5OZkbN27QuHFj07b4+Hjc3NxK9QizEEWloHmt0OG2QYMGBAcHs3TpUtNqJwaDgRdeeIFDhw5x7ty5x6vcDCTcCiFE8VJVleDgYI4cOYKbmxvffvstPXv2LPEadt/azfsH36fKnSpkajPxbu7Na81fw93WvURrKaykpCQ+++wzDAYDzz//PJ6enuYuSYgSV9C8VuhpCREREfz444+mYAug1WqZNm0a33777aNVK4QQolxTFIWvv/6a6dOn8/XXX1OpUqUSvX5keiSLDi/iRvgNAhMCsVKt0Gg1TG00FWdb5xKt5VFUqFCBGjVqoNPp8v39K4S4X6HDbWBgIJcuXaJ27dr5tl+6dIlGjRoVWWFCCCHKtvDwcI4cOcKYMWMAqF+/Pjt27CjRGnKNuay6uIrlJ5YTEBNA86zmAPj4+DBgwADTcrSlTWJiIvv376dnz56maRsDBgzA0tJSpiAI8Q8KHW6nTp3Kiy++SEREBC1btgTg8OHDfPrpp7z99tucPXvWtG/Dhg2LrlIhhBBlxqpVq3j++efR6XTUrFmT4ODgEq/hTNwZ5h2ah+6OjnaJ7bAy5o3WduzQkVatWpXaubWqqrJmzRoSEhJwcnKiY8eOAFhZWZm5MiHKhkLPuf2nDwNFUVBVFUVRMBgMj1VcSZE5t0IIUTQyMjKYMmUKK1asAKBjx46sXr0aHx+fEqshNSeV/5z4D+uvrMfCYEGPyB5YGazw8fGhf//+pXK+6r2/N++5ePEiJ06coEePHqYetkI86Yptzu3169cfqzAhhBDl04ULFxgyZAgXL15EURTeeust3nzzzRKbI6qqKtuvb2fJsSUk6PJWPetRqwf9AvuRnZZN69atS+VobXx8PDt27CA4OJjq1fMWkKhbt64sxCDEIyp0uK1SpUpx1CGEEKIMW7lyJZMmTSIrKwtvb2/WrFlj+jq9JNxOvc2CIws4cfsETRKa4Ofhx9TuU2nu3bzEanhUJ06c4Nq1a6Snp1OtWjUURZFQK8RjKHS4/aeOCPceHBBCCPHkSE5OJisri65du7Jq1aoS++o/15DLigsr+PLsl3iketAtoRvWRmscEh1o4t6kRGooLFVV0ev1pgfF2rdvT2ZmJu3bt5dQK0QRKPSc2woVKuR7nZubS2ZmJlZWVtjZ2ZGYmFikBZYEmXMrhBCFp9frsbDIGyNRVZX169fz1FNPldhX/ydiTjAvbB53Eu/kjdZm+gHg5eVF//798fb2LpE6CiM+Pp6tW7fi5OTEgAEDzF2OEGVKQfNaoT+BkpKS8v1KT08nPDycNm3a8P333z9W0UIIIUo/VVX58ssvCQwMJDU1Fch7mHjIkCElEmyTdcnMPjibZ3Y8Q3ZkNt0ju+OX6YeiKLRr145nn322VAZbgOzsbG7cuMHFixdJS0szdzlClEuFHrl9mOPHjzNq1CguX75cFKcrUTJyK4QQBZOamspzzz3H2rVrAXj33XeZPn16iVxbVVU2XdvE+8ffJyk7CedsZ7pGdQXA09OT/v37l2hXhoJQVZWkpCRcXV1N244fP06NGjVwcXExX2FClEHF1i3hoSeysCAyMrKoTieEEKKUOXnyJEOHDiUiIgILCwsWL17MtGnTSuTa11OuM//wfI5FHwOghksNZgfP5u7Ru9jZ2dGuXTvTFInSIj09nfXr1xMXF0doaCh2dnYANGvWzMyVCVG+FfqTYNOmTfleq6pKVFQUn3zyCa1bty6ywoQQQpQOqqry6aef8sorr5CTk0PlypX54YcfTAv5FKdsQzZfn/uaZeeWoeQqtEhuQYvWLRjXfByWGksa92pcah/CsrOzQ6fTodfriYyMpEaNGuYuSYgnQqHDbf/+/fO9VhQFDw8POnXqxPvvv19UdQkhhCgl3n77bd544w0A+vXrx/Lly/N9zV5cDkcdZsHhBdxMvYlPpg8tk1qizdXieM0Ry6C8TgOlKdiqqsqVK1eoVasWiqKg0WgYOHAgNjY2pXaZXyHKo0KHW6PRWBx1CCGEKKXGjRvHF198wcsvv8zUqVOLPVAmZCXw3vH32PLnFiwNlrRJbYN3St4DYu7u7rRv375Yr/8oVFXlu+++4/r16wwYMMC0/LyXl5eZKxPiyVO6JigJIYQwO1VV2bVrF926dQPyAtrly5exsbEp1usaVSMbrm7g3yf+TWpOKj6ZPrROaQ3ZeSO0wcHBdOzYsdTNrYW8+vz9/bl79y56vd7c5QjxRCs16xC+/fbbKIrCSy+9ZNqm0+mYPHkybm5uODg4MGjQIGJiYvIdd+vWLXr16oWdnR2enp68+uqr8sEihBCPKDExkX79+hESEsKaNWtM24s72EYkRfDMjmeYEzaH1JxUWtCC1rF5wdbNzY2xY8fStWvXUhNsjUYjx48fJyEhwbQtODiY0NBQAgMDzViZEKJUfEocO3aML774wvQ1zj0vv/wyW7duZf369Tg7OxMaGsrAgQM5ePAgAAaDgV69euHt7c2hQ4eIiopizJgxWFpasmjRInPcihBClFmHDh1i2LBh3L59GysrKzIzM4v9mln6LL448wUrL6xEr+qxtbAltHEog2sMZvnXy6lZsyYdO3Y0reZVWuzatYvDhw9TvXp1Ro4ciaIoWFhY4OjoaO7ShHjiFVmf20eVnp5OYGAgn332GQsWLKBx48Z8+OGHpKSk4OHhwZo1a3jqqacAuHz5MnXr1iUsLIyWLVuyfft2evfuTWRkpGle0+eff86MGTOIi4vDysqqQDVIn1shxJPMaDTy3nvv8cYbb2AwGKhRowbr1q2jSZPiXb52/539LDyykLvpd7EwWtBN040XB76Ir6MvkLcCZmkLtfckJCSwYsUK2rZtS4sWLUrVg21ClFfFtkJZUZs8eTK9evWiS5cu+bafOHGC3NzcfNvr1KlD5cqVCQsLAyAsLIwGDRrkm7AfEhJCamoqFy5ceOg1s7OzSU1NzfdLCCGeRHFxcfTu3ZsZM2ZgMBgYPnw4J0+eLNZgG5cZx/S903lh9wvcTb9LHbUOQ+KHYHfDjhvnbpj2Ky3B1mg0cvToUQ4fPmza5ubmxksvvURQUJAEWyFKmQJNSzh79myBT/jXqQV/Z+3atZw8eZJjx47d9150dDRWVlb3reDi5eVFdHS0aZ+/Pol67/W9fR5k8eLFzJ07t8B1CiFEeXXy5Em2b9+OjY0NH330ERMmTCi2sGYwGlh3ZR0fnfyI9Nx0rFQrBhgHYLhtIIccKlSoQMWKFYvl2o/j6tWrbN++HQsLC+rWrWtq61Va5v8KIfIr0E9m48Z5TbJVVf3HDz2DwVCgC9++fZsXX3yRXbt2FfuDCn81c+bMfKvqpKam4ufnV6I1CCFEaRASEsIHH3xAp06dCjU4UViXEy8zL2we5+LPAdDCsgV1ouuQmZY3r7dFixZ07ty5wNPJitv//n1Xq1Yt6tSpQ7Vq1WROrRBlQIHC7fXr103/ferUKaZPn86rr75KcHAwkDc94P3332fJkiUFvvCJEyeIjY3N91SpwWBg3759fPLJJ+zcuZOcnBySk5Pzjd7GxMTg7Z3X79Db25ujR4/mO++9bgr39nkQa2trrK2tC1yrEEKUFzExMYSGhvLee+9RpUoVgHxdaopaZm4mn57+lNWXVmNQDThYOjDKbhTxZ+LJJBMXFxf69etH1apVi62GwjAYDBw9epSLFy/yzDPPoNVqURSFoUOHmrs0IUQBFSjc3vsABBg8eDAfffQRPXv2NG1r2LAhfn5+zJo1674VzB6mc+fOnDt3Lt+2sWPHUqdOHWbMmIGfnx+Wlpbs3r2bQYMGARAeHs6tW7dMoTo4OJiFCxcSGxuLp6cnkPcEq5OTEwEBAQWqQwghnhS///47I0eOJDo6mqSkJH777bfivd6t31l8dDHRGXnTxEKqhvBa89dQ01S+Ov8VTZo0oWvXrqVmtBYgJyeHAwcOkJmZyfnz52nUqJG5SxJCFFKhJwydO3cOf3//+7b7+/tz8eLFAp/H0dGR+vXr59tmb2+Pm5ubafv48eOZNm0arq6uODk5MWXKFIKDg03rmXfr1o2AgABGjx7NkiVLiI6O5s0332Ty5MkyMiuEEP/PYDAwb9485s+fj6qq1KtXj48++qjYrhedEc2iI4v44/YfAPjZ+fFsxWcZ0GpA3g52MGXKlFKzJG12drbp7wxbW1u6d+9Obm5usU7TEEIUn0KH27p167J48WK+/vpr07+2c3JyWLx4MXXr1i3S4j744AM0Gg2DBg0iOzubkJAQPvvsM9P7Wq2WLVu2MGnSJIKDg7G3t+fpp59m3rx5RVqHEEKUVZGRkYwcOZI9e/YAeYMGH330EXZ2dkV+Lb1Rz5pLa/jk9Cdk6bOwUCwY6T0Sy0uWnLt0jqCqQfj65rX5Kg3BVlVVDh06xL59+xgzZozpYbYGDRqYuTIhxOModJ/bo0eP0qdPH1RVNf2r9uzZsyiKwubNm2nRokWxFFqcpM+tEKI8On/+PJ06dSIuLg57e3u++OILRo4cWTzXij/PvLB5XEq8BEAT1yb0MPTgypkrADg5OTFo0CAqV65cLNd/VL/88gtnzpyhadOm9O7d29zlCCH+RkHz2iMt4pCRkcHq1au5fPkykDeaO2LECOzt7R+9YjOScCuEKI90Op1pGte6deuoVatWkV8jLSeNj099zNrLa1FRcbRy5LnKz5F6MpXExEQAmjRpQkhISKmYLpaSkoK1tbWpS096ejrXrl2jYcOG0q9WiFKuWMNteSPhVghRXkRFReHp6YlWqwXgzp07uLu7F3nLRVVV+fXmr7xz9B3isuIA6F2tN22y2nA87DiQN1rbp08fatSoUaTXflT3evoGBgbSo0cPc5cjhCikYl2h7LvvvqNNmzb4+vpy8+ZNIG9+7MaNGx+tWiGEEI9t27ZtNGjQgAULFpi2VapUqciD7d30u0zePZnpe6cTlxVHFacqfNn1Sxa3XYyHiweQ1x990qRJpSbYAri4uKDX64mLi8NoNJq7HCFEMSl0uF26dCnTpk2jR48eJCUlmRZtqFChAh9++GFR1yeEEOIf5Obm8tprr9GrVy8SEhLYtm0bubm5RX8dYy7Lzi2j/y/92X93P5YaS56r/xxftf6KYN+8Fo3Nmzdn7Nix9OvXr8QX6PmrpKQk0wAMQLVq1XjmmWcYPXo0Go3ZV58XQhSTQv90f/zxx3z11Vf861//yrf0YLNmze7rWyuEEKJ43bx5k3bt2vHuu+8CMHXqVPbt24elpWWRXud07GmGbB7Chyc/RGfQ0dy7OUubL0U5rLDu+3Xk5OQAoChKqXho7MaNG3z66af8/PPPptogr2+7zK0VonwrdCuw69ev06RJk/u2W1tbk5GRUSRFCSGE+GcbN25k7NixJCUl4eLiwvLlyxkwYECRXiMlO4UPT37Ij1d+BMDF2oVXAl/B4ZYDO9ftRFVVHBwcSExM/NuVIUtaxYoVcXR0pEKFCuh0ulK1UIQQongVOtz6+/tz+vTpfKuWAezYsaPI+9wKIYR4sOjoaIYPH05WVhYtWrTghx9+KNIlbFVVZev1rbx77F0SdXldDwbUGMAI3xH8vv134uLyHiJr2LAh3bt3x9bWtsiu/SgSEhK4cOEC7dq1A8DS0pJx48bh4OAgI7VCPGEKHW6nTZvG5MmT0el0qKrK0aNH+f77700LOwghhCh+3t7efPTRR1y+fJlFixYV6cjkzdSbLDi8gMNRhwGo5lyNN1u8SdrlNNZ9tw5VVbG3t6d3797UqVOnyK77qLKysvjiiy/Izc3Fx8eHmjVrAnkrYQohnjyFDrcTJkzA1taWN998k8zMTEaMGIGvry//+c9/GDZsWHHUKIQQAvjxxx+pVKmSqXfthAkTivT8OYYclp9fzldnvyLHmIO11pqJDScytt5YLDQW/LDvB1RVpX79+vTo0aNYVjl7FLa2tjRr1ozY2FhcXV3NXY4Qwsweq89tZmYm6enpeHp6FmVNJU763AohSjOdTse0adNYunQplStX5vTp01SoUKFIr3Es+hjzwuZxI/UGAK18WzGz2Ux87HxMiy+kp6dz+/Zts09Bi4uLY/fu3fTs2dP0mW00GlEURaYgCFGOFTSvFXrkFkCv17Nnzx6uXbvGiBEjgLz1y52cnHBwcHi0ioUQQtzn6tWrDBkyhNOnTwMwYsSIIv2cTdIl8f7x99l4La9PuZuNGzNazKCxTWM2/rART09PBg4cCICDg4PZgy3A1q1buXnzJtbW1qYH6KS1lxDinkKH25s3b9K9e3du3bpFdnY2Xbt2xdHRkXfeeYfs7Gw+//zz4qhTCCGeON9//z0TJ04kPT0dd3d3vvvuO7p3714k51ZVlV8ifuHfJ/5NcnYyCgqDaw0mtHEoZ46c4ev9X2M0GklLSyM9Pd2sAxf3vmC8NyobEhLC3r176dChg9lqEkKUXoUOty+++CLNmjXjzJkzuLm5mbYPGDCAZ599tkiLE0KIJ1FOTg6TJ082PaTbrl071qxZQ8WKFYvk/H8m/8m8w/M4EXMCgFoVajE7eDbeRm/WfbuO6OhoAOrWrUuvXr2wt7cvkus+itjYWLZt20a9evVo3rw5AD4+PvKMhxDioQodbvfv38+hQ4fuezK3atWq3L17t8gKE0KIJ5WlpSVxcXEoisKbb77J7Nmz8y2a86h0eh1fnfuK5eeXozfqsbWwZVKjSQyvPZyjYUfZtHcTRqMRW1tbevbsSb169cw+h/XGjRvcvHmTxMREAgMD0Wq1Zq1HCFH6FfrT0mg0mpbc/V937tyRtitCCPEYcnNzsbS0RFEUli9fzpkzZ+jYsWOBjo3OiDb1o32Q6ynX+fT0p9xOuw1Au0rt+FfQv/B18CUrK4vjx49jNBqpXbs2vXv3Nts0BFVVycrKMnViaNasGcnJybRo0UKCrRCiQArdLWHo0KE4Ozvz5Zdf4ujoyNmzZ/Hw8KBfv35UrlyZFStWFFetxUa6JQghzCkjI4PQ0FBycnJYtWpVoUdLcww5dPuxGwm6hH/c19PWk9eDXqdTpU5oNBrTtSIiIsjMzKRBgwZmG61NSEjgl19+QVEUxo4da/ZRYyFE6VJs3RLef/99QkJCCAgIQKfTMWLECK5evYq7uzvff//9YxUthBBPmvPnzzNkyBAuXbqERqNh+vTpD1zi/O9YaizxtvcmUZeIysPHK0bUGcGUJlPISsli+fLltGjRgkaNGgFQo0aNx7qPomBpaUlMTAyQ1+6rrLeZFEKYxyP1udXr9axdu5azZ8+Snp5OYGAgI0eONPvyi49KRm6FECVNVVWWLVvGlClT0Ol0+Pj4sGbNmkfuAHDw7kGe/+35h74/s8VMhtUexqFDh9izZw8GgwEXFxdCQ0PN9nW/qqpERkbme1AuPDwcHx8f+SwWQtynWPvcWlhYMGrUqEcuTgghnmRpaWk8//zzrFmzBshrbfXtt98+1khlK99WBLgFcCnhUr7RWwWFALcAurp3Zfny5aYHf2vWrEnv3r3NFmyzs7P59ttviY6OZtKkSbi7uwNQu3Zts9QjhCg/HinchoeH8/HHH3Pp0iUgr11MaGhoqVhjXAghSjNVVenTpw979+5Fq9WyYMECXnvttcdehOBy4mVSs1Pvm5agqip9tX354osvMBgMWFtb0717dxo1amTWOa3W1tY4ODhgYWFBXFycKdwKIcTjKvS0hJ9++olhw4bRrFkzgoODATh8+DDHjh1j7dq1DBo0qFgKLU4yLUEIUZJ+//13xo0bx6pVq2jTps1jnSvHkMPnZz5n+fnlGFQDWkWLUTWioqJRNDSxboL/ZX8gb15tnz59zPI5ZzQaOXPmDPXr18fS0hLI++zVaDSysqUQokAKmtcKHW6rV6/OyJEjmTdvXr7tb731FqtWreLatWuPVrEZSbgVQhSnlJQUzp49S9u2bU3bsrOzsba2fqzznos7x+xDs4lIjgCgW5VudK7SmRn7Zpj2+bzL52SHZ+Pi4kKTJk3MNlq7du1awsPDad++vawsJoR4JMU25zYqKooxY8bct33UqFG8++67hT2dEEKUaydOnGDIkCHExsZy8uRJatasCfBYwVan1/HZ6c9YeXElRtWIq40rb7Z8k65VupKQkED3xO7sd9xPVe+qtPJthVLR/C21GjRowI0bN6QfuhCi2BU63Hbo0IH9+/ff1zbmwIED+UYlhBDiSaaqKp988gnTp08nJyeHKlWqkJaW9tjnPR17mlkHZ3Ej9QYAvar1YkbzGbhYu3DkyBF+++03HPQOtFJbMbjnYLOM1BqNRo4dO4anpyf+/nlTIgICAqhWrVqZ7aojhCg7Ch1u+/bty4wZMzhx4gQtW7YE8ubcrl+/nrlz57Jp06Z8+wohxJMmKSmJ8ePHs2HDBgD69+/P8uXLqVChwiOfMzM3k49PfczqS6tRUfGw9WBWy1l0rNyRpKQkVq5dyc2bNwHw9/enb9++uLi4FMXtFNrBgwf5/fffcXd35/nnn0er1aIoigRbIUSJKPSc24I+0asoygOX6S2NZM6tEKKoHDlyhGHDhnHjxg2srKx47733CA0NfawR1GPRx3jr0FumpXP71+jP9GbTcbJy4tixY/z222+mpXu7du1Ks2bNzNoJQafTsWzZMlq2bEmTJk0euxOEEEJAMc65NRqNj1WYEEKUZz/99BM3btygWrVqrFu3jqZNmz7yuTJyM/jgxAf8EP4DAF52XsxpNYc2FfM6LJw8eZLt27cDULVqVfr27ftYo8OPwmAwcOTIEVJSUujRowcANjY2vPDCC7J8rhDCLB6pz60QQogHW7hwITY2Nrzyyis4Ozs/8nkORR5i7qG5RGZEAvBUrad4pekrOFj9t21Wo0aNOH36NPXr16d58+ZmCZMxMTHs2rULgMaNG+Pj4wMgwVYIYTYF/q4oLCyMLVu25Nv27bff4u/vj6enJxMnTiQ7O7vICxRCiNLs4MGDDBkyhNzcXAAsLS2ZN2/eIwfbtJw05hyaw3O7niMyI5KKDhX5qttXvBX8FvpMPdu2bTNN+dJqtYwdO5YWLVqUaJj83ylnvr6+tGrVir59++Lt7V1iNQghxMMUONzOmzePCxcumF6fO3eO8ePH06VLF15//XU2b97M4sWLi6VIIYQobYxGI4sXL6Z9+/asX7+e999//7HPue/OPvpv7M9PV38CYHid4fzc92eCvIM4ceIES5cu5dixYxw4cMB0TEmH2v379/Pxxx+TlZVl2t61a1ez9tAVQoj/VeBpCadPn2b+/Pmm12vXriUoKIivvvoKAD8/P9566y3mzJlT5EUKIURpEhsby5gxY9i5cycAI0aMYPLkyY98vpTsFJYcW8Kma3ndZio7VmZuq7k0825GSkoKP2/+2bRAjp+fH/Xr13/8m3hE586dIyUlhVOnTtGqVSuz1SGEEA9T4HCblJSEl5eX6fXevXtNDw8ANG/enNu3bxdtdUIIUcrs3buX4cOHExUVhY2NDZ988gnjxo175FHL3bd2s+DwAuKz4lFQGB0wmtAmodhobTh16hQ7d+4kOzsbCwsLOnXqRFBQUIl2H0hLS8PBwQFFUdBqtfTq1YuUlBQaNGhQYjUIIURhFDjcenl5cf36dfz8/MjJyeHkyZPMnTvX9H5aWpppvXAhhCiPli1bxsSJEzEajdStW5d169Y98ihqki6JxUcWs/1GXrcDf2d/5rWaR2PPxgDs3r3bNP2gUqVK9OvXD3d39yK5j4I6ePAge/bsoV+/fqb7rFKlSonWIIQQhVXgcNuzZ09ef/113nnnHX755Rfs7OzyrUh29uxZqlevXixFCiFEadC2bVvs7OwYNGgQn376Kfb29o90np03drLoyCISdYloFA1j641lUuNJWGv/uyRv48aNOX78OG3atCE4ONgsvWL1ej16vZ4rV66YdSqEEEIURoEXcYiPj2fgwIEcOHAABwcHVq5cyYABA0zvd+7cmZYtW7Jw4cJiK7a4yCIOQoiHuXnzZr7Ryhs3blC1atVHOld8VjyLjixi18281lk1XGqwoPUC6rnXIy0tjYiICJo0aWLaPzs7G2tr64edrsglJiai0WhMK5vp9XquXr1KnTp15GExIYTZFTSvFXqFspSUFBwcHNBqtfm2JyYm4uDggJWV1aNVbEYSboUQf6XX65k3bx6LFy9m165ddOjQ4ZHPpaoqW69v5e2jb5OSnYKFYsGEhhOY2GAiFhoLzp07x/bt29HpdDzzzDNm+er/7NmzbNq0iWrVqjF8+HAJs0KIUqfYVih7WO9GV1fXwp5KCCFKpcjISIYPH86+ffsA+PXXXx853MZkxLDg8AL23NkDQF3XusxrPY86rnVIT0/npy0/ER4eDoCPjw+2trZFcQuFVrFiRVRVxWAwkJubWyYHKoQQAmSFMiGEyGfHjh2MHj2a+Ph4HBwc+PLLLxk+fHihz6OqKr9E/MK7x94lLTcNC40FkxpNYmz9sVgo/x2tzcrKQqPR0L59e1q3bn3ft2LFJT4+npiYGOrVqweAm5sbzz//PO7u7jJqK4Qo0yTcCiEEkJuby+zZs3n77beBvAe6fvjhB2rVqlXoc0WlRzE3bC4HIw8CUN+tPvNbz6dGhRoAbNy4kdOnTwPg7e1N//7987VaLG7R0dF89dVXaLVaKlWqZPpGzsPDo8RqEEKI4iLhVgghgM2bN5uC7QsvvMD777+PjY1Noc6hqirrr6zn3yf+TUZuBlYaKyY3mcyYgDFYaP77cVulShXOnj1Lu3btaNOmTYmN1t7j5eVFpUqVSvRhNSGEKCmFfqCsPJIHyoQQqqoyadIkOnfuzODBgwt9/O2028w9NJcj0UcAaOzRmHmt5+Hv7E9GRgbJyclUrFjRdK3ExETc3NyK9B4eJjY2liNHjtCrVy9TS7GS7sQghBCPq9geKBNCiPIgJyeHd955h9DQUCpUqICiKHz++eeFPo9RNfL95e/5z8n/kKXPwkZrw9TAqYyoMwKtRsvFixfZunUrWq2WSZMmYWtri6IoJRZs9Xo93377LRkZGXh6ehIUFAQgwVYIUW5JuBVCPHFu3LjBsGHDOHLkCKdOneKnn356pIeobqbeZPbB2ZyMPQlAM69mzGs1Dz8nPzIzM9m+fTvnz58HwNPTk8zMzBLvhmBhYUGHDh2IiIh4pPnDQghR1ki4FUI8UTZs2MC4ceNITk7GxcWFMWPGFDrYGowGVl1axcenPibbkI2thS3Tmk5jSO0haBQNly9fZsuWLWRkZKAoCm3atKFdu3ZYWBT/R250dDQ7duygW7du+Pr6AtC0aVOaNWtW7NcWQojSoOTXc/wfS5cupWHDhjg5OeHk5ERwcDDbt283va/T6Zg8eTJubm44ODgwaNAgYmJi8p3j1q1b9OrVCzs7Ozw9PXn11VfR6/UlfStCiFIuOzubqVOnMnDgQJKTk2nZsiWnT5+mf//+hTrPn8l/MmbHGN47/h7Zhmxa+rRkQ78NDKszDNWo8vPPP/PDDz+QkZGBh4cHEyZMoFOnTiUSbAHCwsK4efMmu3btMm2T1l5CiCeJWUduK1WqxNtvv03NmjVRVZWVK1fSr18/Tp06Rb169Xj55ZfZunUr69evx9nZmdDQUAYOHMjBg3ntdQwGA7169cLb25tDhw4RFRXFmDFjsLS0ZNGiRea8NSFEKXLr1i0GDhzIiRMnAHj11VdZuHAhlpaWBT6H3qjnmwvf8Nnpz8g15uJg6cD0ZtMZWHOgKTze63qgKAqtWrWiQ4cOxR5q7y28cO86Xbp0AaBTp07Fel0hhCitSl23BFdXV959912eeuopPDw8WLNmDU899RQAly9fpm7duoSFhdGyZUu2b99O7969iYyMNPWI/Pzzz5kxYwZxcXEFXmFHuiUIUb4lJibSuHFjMjMzWblyJb169SrU8VeSrjDr4CwuJlwEoG3FtswOno23vTdZWVkYjUbs7e0ByMzMJDExkUqVKhX5ffxVdHQ0W7dupVKlSoSEhBT79YQQwpwKmtfMOi3hfxkMBtauXUtGRgbBwcGcOHGC3Nxc0ygEQJ06dahcuTJhYWFA3tdvDRo0yNf8PCQkhNTUVC5cuPDQa2VnZ5OamprvlxCifMnJyeHev91dXV1NCycUJtjmGnJZemYpQ7cM5WLCRRytHFnYZiGfdv4Ub3tvrly5wtKlS9myZYvpWnZ2diUSbAHS09O5c+cOp0+fRqfTlcg1hRCitDP7A2Xnzp0jODgYnU6Hg4MDGzZsICAggNOnT2NlZYWLi0u+/b28vIiOjgbyRi3+uqrPvdf39nmQxYsXM3fu3KK9ESFEqXHlyhWGDBnC1KlTGTduHABNmjQp1DkuJlxk1sFZXEm6AkBHv47MajkLDzsPdDodO3fuNK0yFhcXR1ZWFnZ2dkV6H39lNBpJSUmhQoUKANSoUYOQkBACAgIKveCEEEKUV2YPt7Vr1+b06dOkpKTw448/8vTTT7N3795ivebMmTOZNm2a6XVqaip+fn7Fek0hRMlYvXo1zz33HBkZGcybN4+RI0cWqqdrjiGHz898zvLzyzGoBlysXXgj6A26V+2OoihERESwadMm0tLSAAgODqZjx46Fmr/7KJKSkvjxxx/JyMhg8uTJpuu1bNmyWK8rhBBljdnDrZWVFTVq5K233rRpU44dO8Z//vMfhg4dSk5Ojqldzz0xMTF4e3sDeWuyHz16NN/57nVTuLfPg1hbW0sDcyHKmczMTKZOncqyZcsA6NChA6tXry7Uz/q5uHPMOjiLaynXAOhWpRtvBL2Bm60b2dnZ7Ny5k1OnTgF5Ux369etH5cqVi/5mHsDBwYGMjAx0Oh3R0dHyD3IhhHgIs4fbvzIajWRnZ9O0aVMsLS3ZvXs3gwYNAiA8PJxbt24RHBwM5I2YLFy4kNjYWDw9PQHYtWsXTk5OBAQEmO0ehBAl6+LFiwwZMoQLFy6gKAqzZ89m1qxZpu4F/0Sn1/HZ6c9YeXElRtWIq40rb7Z8k65Vupr2URSF69evAxAUFETnzp2LdbTWaDTmW3jB0tKSwYMH4+zsjIODQ7FdVwghyjqzhtuZM2fSo0cPKleuTFpaGmvWrGHPnj3s3LkTZ2dnxo8fz7Rp03B1dcXJyYkpU6YQHBxs+hquW7duBAQEMHr0aJYsWUJ0dDRvvvkmkydPlpFZIZ4QcXFxBAUFkZ6ejre3N6tXry5UG6xTsaeYfXA2N1JvANCrWi9eb/46LjYu5OTkYGlpiaIoWFlZMWDAAFRVpUqVKsV0N3kMBgPLly8nMjKSUaNGUb16dQAqVqxYrNcVQojywKzhNjY2ljFjxhAVFYWzszMNGzZk586ddO2aN1rywQcfoNFoGDRoENnZ2YSEhPDZZ5+ZjtdqtWzZsoVJkyYRHByMvb09Tz/9NPPmzTPXLQkhSpiHhwcvv/wyYWFhrFq16r6HTB8mMzeTj099zOpLq1FR8bT1ZFbwLDr4dQDgzz//ZNOmTbRu3ZrmzZsDlNgUBK1Wi5+fH4mJiWRlZZXINYUQorwodX1uzUH63ApRtpw7dw5bW1vTfH2DwYCiKGg0BetueCz6GLMPzuZO+h0A+tfoz6vNX8XJyomcnBx27drF8ePHAfD09OS5554r8LkfhcFg4NixY9SrVw9HR0cgr2WhwWAo9g4MQghRVhQ0r5W6ObdCCPEwqqry9ddfM3XqVOrWrcuhQ4ewsbEp8NzajNwMPjjxAT+E/wCAt703bwW/RZuKbQC4fv06mzZtIjk5GYBmzZrRtWvXYg22AJs2beLs2bNERUUxYMAAAJlaJYQQj0jCrRCiTEhNTeW5555j7dq1QF5P66ysrAL3dz109xBzwuYQlREFwOBag5nWdBoOVg7k5OTw22+/cezYMQCcnZ3p168f/v7+xXMzf9GiRQuuXbtW7HN5hRDiSSDhVghR6p06dYohQ4YQERGBVqtl0aJFTJ8+vUAjqmk5abx3/D1+vvozABUdKjKn1Rxa+vy3P2x8fLxpGkLTpk3p2rVrsY2cGgwGDh8+jL29PY0bN86rqWJFXnrpJSws5CNZCCEel3ySCiFKLVVVWbp0KS+//DI5OTn4+fmxdu1aWrVqVaDj993Zx9ywucRmxgIwos4IXgx8ETtLO1RVRVEUAHx9fenWrRseHh6mzgTF5ezZs/z222/Y2tpSu3ZtbG1tASTYCiFEEZFPUyFEqaXX6/n222/JycmhT58+fPPNN7i6uv7jcSnZKbxz9B02/7kZgMqOlZnXeh5NvZoCcOvWLbZs2cJTTz1l6pFdnCt9/W+QbtSoEefPn6dBgwayZK4QQhQD6ZaAdEsQojS7ceMGmzZtYsqUKaaA+Hd239rNgsMLiM+KR0FhTMAYJjeZjK2FLbm5ufz+++8cPnwYyFv+e9iwYcVWu16v59ChQ9y6dYuRI0cWqH4hhBAPJt0ShBBljqqqfPTRRyQkJJj6VVetWpWpU6f+47GJukTePvI2229sB8Df2Z/5refTyKMRALdv32bjxo0kJCQA0LhxY0JCQorpTvJkZGRw4MABcnNziYiIoGbNmsV6PSGEEBJuhRClRGJiIuPGjWPjxo0A9O3bl2bNmv3jcaqqsvPmThYfWUyiLhGtouWZes8wqfEkrLXW5Obm8scff3D48GFUVcXR0ZE+ffoUW9DMzs42PYzm7OxMt27dsLa2NvXkFUIIUbwk3AohzO7w4cMMHTqUW7duYWVlxfvvv0/Tpk3/8bj4rHgWHl7Ib7d+A6BmhZrMbzWfeu71TPucOXOGsLAwIG++a0hIiOkhrqJkNBrZt28fhw8f5tlnn8XNzQ2gQAFdCCFE0ZFwK4QwG6PRyPvvv88bb7yBXq+nevXq/PDDD/8YbFVVZcufW3jn2DukZKdgoVgwoeEEJjaYiKXWMt++gYGBXLt2jcaNG1O7du1iuxdFUYiMjCQ7O5szZ87QqVOnYruWEEKIh5MHypAHyoQwl+HDh5sWZRgyZAhfffXVP/4MxmTEMP/wfPbe2QtAXde6zGs9jzqudQC4e/cuBw4cYODAgVhaWv7dqR5bQkICzs7OpjZeiYmJREVFERAQIA+PCSFEEStoXiveNSWFEOJv9OrVC2traz7//HPWrl37tx9Wqqqy4eoGBmwcwN47e7HUWDKlyRRW91pNHdc66PV6du/ezbJly7h8+TIHDhwo1trDwsJYunQphw4dMm1zdXWlXr16EmyFEMKMZFqCEKLEGI1Gbt26RdWqVQEYNWoU7du3x8/P72+Pi0qPYk7YHA5F5gXJ+m71md96PjUq5D2kFRUVxS+//EJsbN5iDfXr1ycoKKj4bgRwcHDAYDAQFRWVr4+tEEII85JwK4QoEbGxsYwePZpz585x5swZPDw8AP422BpVIz9e+ZH3j79Ppj4TK40VoU1CGR0wGguNBQaDgX379rF//35UVcXOzo5evXoREBBQ5PXHxcWRm5uLr68vkBegHR0dqVKligRbIYQoRSTcCiGK3Z49exgxYgRRUVHY2tpy8uTJf+wxezvtNnMOzeFo9FEAGns0Zl7refg7+5v22blzJ8eOHQMgICCAnj17Ym9vX+T1X758mfXr1+Pm5sZzzz2HVqtFURTTCLQQQojSQ8KtEKLYGAwGFixYwLx58zAajQQEBLBu3Trq1av30GOMqpHvL3/Pf07+hyx9FjZaG14MfJHhdYaj1Wjz7du6dWsiIiLo3Lnz357zcVWpUgUbGxsqVKhAdnY2dnZ2xXYtIYQQj0e6JSDdEoQoDtHR0YwcOZLff/8dgHHjxvHxxx//bTC8mXqT2QdnczL2JADNvJoxr9U8/Jzypi7ExMQQERFB69atTccYjUY0mqJ9NjY2NpY///yTli1bmralpaXh6OhYpNcRQghRcLL8rhDCrObOncvvv/+Ovb09S5cuZfTo0Q/d12A0sOrSKj4+9THZhmzsLOyY1nQag2sPRqNoMBqNHDhwgL1792I0GvH29qZ69eoARR5sU1JS+OKLLzAajVSqVIlKlSoBSLAVQogyQsKtEKJYvPPOO8TExLBo0SLq1Knz0P2uJV9j9sHZnI0/C0CwTzBzWs3B1yHvwa3Y2Fh++eUXoqKiAKhduzZeXl7FVrezszMNGjQgJydHAq0QQpRBMi0BmZYgRFG4c+cOy5YtY/bs2QXqHqA36vnmwjd8dvozco25OFg68GrzVxlQYwCKomA0Gjl06BB79uzBYDBgY2NDjx49aNCgQZF2J4iOjmbPnj30798fGxsbIG+usFar/YcjhRBClCSZliCEKDHbtm1jzJgxJCQk4O7uzuTJk/92//DEcGYdnMWlxEsAtK3YltnBs/G29zbt88MPP3DlyhUAatWqRe/evYt8JFVVVTZs2EBsbCx79+41dXCQYCuEEGWXhFshxCPLzc3lX//6F++++y4AgYGBf9viK9eQy9fnvubLc1+iN+pxtHLk9Rav06dan/tGYxs2bMjNmzfp3r07jRo1KrLR2ntfVimKgqIohISEcPLkSYKDg4vk/EIIIcxLpiUg0xKEeBS3bt1i2LBhhIWFARAaGsp7772HtbX1A/e/mHCRWQdncSUpbzS2k18n3mz5Jh52eYs5xMfHk5qaSrVq1UzHZGZmFmnbrcjISLZt20ZwcHCxtg4TQghR9GRaghCi2OzYsYMRI0aQlJSEs7Mzy5YtY9CgQQ/cN8eQw+dnPmf5+eUYVAMu1i68EfQG3at2N82tPXz4MH/88QdWVla88MILpoUYirqf7JUrV7h79y579+4lICBAVhYTQohySMKtEKLQHB0dSU1NpXnz5vzwww/4+/s/cL+zcWeZdXAWf6b8CUBI1RBmtpiJm60bAAkJCWzcuJHbt28DeYslGI3GIqvTaDSSnZ2Nra0tkLfog06no3Xr1hJshRCinJJpCci0BCEKIjs7O9+Ug927d9O2bVusrKzu21en1/Hp6U/59uK3GFUjrjauzGo5iy5VugB5816PHDnC7t270ev1WFlZERISQpMmTYosdEZHR7Nx40acnJwYPnx4kZxTCCGE+ci0BCFEkfn5558JDQ1l165dprmqnTt3fuC+p2JPMfvgbG6k3gCgd7XezGg+AxcbFwD0ej2rVq3i5s2bAFSrVo2+ffvi7OxcpDVrtVpiY2NJSkoiJSWlyM8vhBCidJJwK4R4KJ1Ox6uvvsonn3wCwHvvvceKFSseuG9mbiYfnfqINZfWoKLiaevJ7ODZtPdrn28/CwsL3NzciIyMpFu3bjRt2rRIRmuNRiMxMTH4+PgA4OHhwaBBg6hSpYppDq8QQojyT6YlINMShHiQiIgIhgwZwqlTpwB47bXXWLBgAZaWlvftezTqKG8deos76XcAGFBjANObT8fJKu/nKSkpCa1Wa/r5ys7OJjMzkwoVKhRJrenp6Xz33XckJSURGhoqP8dCCFEOybQEIcQj++GHH3j22WdJS0vDzc2Nb7/9lp49e963X0ZuBv8+/m/WXVkHgLe9N3OC59C6Ymsgb27t8ePH2bVrF35+fowaNQpFUbC2tn5oy7BHYW9vj5WVFRYWFsTHx0u4FUKIJ5iEWyFEPps2bWLYsGEAtGnThu+//55KlSrdt9+hu4eYEzaHqIwoAAbXGsy0ptNwsHIAIDk5mU2bNnH9+nUgb0nb7Oxs0xK3j8NgMHD27FkaNWqERqNBURQGDBiAjY1NkbcPE0IIUbZIuBVC5NOzZ086dOhA69atmTNnDhYW+T8mUnNSee/Ye2yI2ABARYeKzG01lyCfICBvtPbEiRPs2rWLnJwcLCws6NKlCy1atCiSubWqqrJy5Upu375Nbm4uLVq0AMDV1fWxzy2EEKLsk3ArhGDjxo10794da2trLCws2LVr132hFmDfnX3MDZtLbGYsACPqjODFwBexs8wbLc3IyODnn3/mzz/z+tpWrlyZfv36FWnwVBSF+vXrk5CQYOpfK4QQQtwj4VaIJ1hmZiahoaGsWLGCKVOm8NFHHwHcF2xTslN4++jbbPlzCwBVnKowt9Vcmno1zbeflZUVKSkpWFhY0LlzZ4KCgh57tFav13P48GGqV69u6oTQrFkzGjZsWCRTHIQQQpQvEm6FeEJduHCBIUOGcPHiRTQaDe7u7qiqel8Y3X1zN/MPzydBl4BG0TC67mgmN5mMrUXeqGlaWhr29vZoNBosLS156qmnsLS0xM3NrUjq3L17N4cPHyY8PJxx48ahKAoajUaCrRBCiAeScCvEE0ZVVb755hsmT55MVlYWPj4+rFmzhg4dOuTbL1GXyOIji9lxYwcA1ZyrMa/1PBp5NDKd5/Tp0+zcuZN27drRqlUrALy9vYu03uDgYK5cuUKzZs2K9LxCCCHKJwm3QjxB0tPTeeGFF/juu+8A6NatG9999x2enp6mfVRVZeeNnSw6soik7CS0ipax9cfyfKPnsdbmte9KTU1l8+bNREREAHD16lWCg4OLZArCwYMHMRqNdOzYEQAnJydCQ0OLbFleIYQQ5ZuEWyGeIPHx8WzatAmtVsv8+fOZMWMGGo3mv+9nxbPg8AJ239oNQM0KNZnfej713PKW3FVVlTNnzrBjxw6ys7PRarV07NixSIItwM2bN9mzZw8ajYbGjRubFnmQYCuEEKKgJNwK8QSpWrUqq1atwsXFhTZt2pi2q6rKlj+38PbRt0nNScVCseDZhs/ybINnsdTmrUiWlpbGli1buHLlCgC+vr70798fDw+Px6rJYDCg1WoBqF69OoGBgfj7++Pi4vJY5xVCCPFkknArRDmWmprKc889x9NPP0337t0B6N27d759YjJimH94Pnvv7AWgrmtd5reeT23X2vn2y8rKIiIiAq1WS4cOHWjVqlW+Ud/Cys3NZf/+/Vy6dImJEyealvXt06fPI59TCCGEkHArRDl18uRJhgwZwrVr19i7dy9//vlnvg4DqqqyIWID7x57l/TcdCw1lkxqNIln6j+DpSYvaObm5ppCp6enJ3379sXHxyffHN1HdW+KQ2pqKhcuXKBx48aPfU4hhBBCwq0Q5Yyqqnz66ae88sor5OTkULlyZdauXZsv2EamRzI3bC6HIg8B0MC9AfNazaNGhRqmc5w/f56dO3cyfPhwKlasCECjRo0eq7a0tDQcHR2BvJ64vXr1wmAwUKdOncc6rxBCCHGPhFshypHk5GTGjx/Pzz//DEDfvn1ZsWKFaYUwo2pkffh6/n3i32TqM7HWWhPaOJRRAaOw0OR9HGRkZLB161YuXboEwOHDhxk0aNBj1/b7779z8OBBRo4cSbVq1QCoVavWY59XCCGE+F8SboUoJxITE2natCk3btzA0tKSd999l6lTp5o6DdxOu82cQ3M4Gn0UgCaeTZjXah5VnauaznHhwgW2bdtGZmYmGo2Gdu3a5Xvw7HFkZ2djNBoJDw83hVshhBCiqD360yBFYPHixTRv3hxHR0c8PT3p378/4eHh+fbR6XRMnjwZNzc3HBwcGDRoEDExMfn2uXXrFr169cLOzg5PT09effVV9Hp9Sd6KEGbn6upKx44d8ff35+DBg7z44osoioJRNbL60moGbRrE0eij2FrY8nqL11kRssIUbDMyMli/fj0//vgjmZmZeHl58eyzz9K+fXtTJ4PCiouLIz093fS6Y8eODBs2zPRgmxBCCFEczDpyu3fvXiZPnkzz5s3R6/W88cYbdOvWjYsXL2Jvbw/Ayy+/zNatW1m/fj3Ozs6EhoYycOBADh48COS1EerVqxfe3t4cOnSIqKgoxowZg6WlJYsWLTLn7QlR7BITEzEajbi7uwPw8ccfk5uba2qjdSPlBrMPzeZU7CkAmns3Z27wXPyc/PKd5/Lly1y8eBFFUWjbti3t2rV75FALcPToUXbu3EmDBg3o378/ADY2NtSuXfvvDxRCCCEek6KqqmruIu6Ji4vD09OTvXv30q5dO1JSUvDw8GDNmjU89dRTQN5fwnXr1iUsLIyWLVuyfft2evfuTWRkJF5eXgB8/vnnzJgxg7i4OKysrP7xuqmpqTg7O5OSkoKTk1Ox3qMQReXQoUMMGzaM+vXrs2XLlnxtuQxGA99d/I5PTn9CtiEbOws7Xmn2Ck/VegqNkrefqqqmKQuqqrJt2zaaNGmCr6/vY9d2584dli1bRp06dRg8ePBjtQwTQgghoOB5rVT9jZOSkgJgevjlxIkT5Obm0qVLF9M+derUoXLlyoSFhQEQFhZGgwYNTMEWICQkxNRe6EGys7NJTU3N90uIssJoNLJkyRLatWvH7du3uXr1ar6pOteSrzF6+2jeP/E+2YZsgn2C2dBvA0NqDzEF28uXL7N8+XJycnKAvBXAevXq9cjBNiYmxrS4A0ClSpWYNGkSQ4cOlWArhBCiRJWaB8qMRiMvvfQSrVu3pn79+gBER0djZWV130pFXl5eREdHm/b532B77/177z3I4sWLmTt3bhHfgRDFLy4ujqeffprt27cDMHz4cL744gscHR3JNebyzflvWHpmKbnGXBwsHXi1+asMqDHANEKblZXF9u3bOXfuHJA3+tuhQ4fHqun69et899132NraEhoaiq2tLUCR9MIVQgghCqvUhNvJkydz/vx5Dhw4UOzXmjlzJtOmTTO9Tk1Nxc/P72+OEML89u3bx/Dhw4mMjMTGxoaPPvqICRMmoCgK4YnhzDo4i0uJee272lZsy+zg2Xjbe5uODw8PZ8uWLaSnp6MoCq1atSqSTgiVK1fG3d0dDw8PDAbDY59PCCGEeBylItyGhoayZcsW9u3bR6VKlUzbvb29ycnJITk5Od/obUxMDN7e3qZ9jh49mu98976ivbfPX1lbW2NtbV3EdyFE8dHr9Tz77LNERkZSu3Zt1q1bR8OGDck15PLVua/46uxX6FU9TlZOvN7idXpX651vtHbHjh2cPXsWAHd3d/r165fvZ60wIiMjOXv2LCEhISiKglarZfz48fIzJYQQolQw62Q4VVUJDQ1lw4YN/P777/j7++d7v2nTplhaWrJ7927TtvDwcG7dukVwcDAAwcHBnDt3jtjYWNM+u3btwsnJiYCAgJK5ESGKmYWFBWvWrGHcuHEcP36chg0bciHhAsO2DmPpmaXoVT2d/DrxS79f6FO9jynYQt7Pw9mzZ02jtc8999wjB1udTsfKlSs5cuQI58+fN22XYCuEEKK0MGu3hBdeeIE1a9awcePGfC2CnJ2dTfP2Jk2axLZt2/jmm29wcnJiypQpQN5cQchrBda4cWN8fX1ZsmQJ0dHRjB49mgkTJhS4FZh0SxClTXRGNNt+3UbU3SgGDB+Q771cQy5br29lXfg6DKqBCtYVeCPoDUKqhuQLtfekp6ezbt06unbtWiTTb/bt20d8fDxdu3Y1LaUrhBBCFLeC5jWzhtsH/UUMsGLFCp555hkgb6TolVde4fvvvyc7O5uQkBA+++yzfFMObt68yaRJk9izZw/29vY8/fTTvP3221hYFGzWhYRbUZpk5WRRd0Rdbv58E0WrUG12NWwr2z5w3+5VuzMzaCauNq6mbREREVy7do2QkJDHruXu3bv8+uuv9OvXz9TF5H9biAkhhBAlpUyE29JCwq0oLSIjIxk5ciR79uwBoEK7CviM9EFjnX8GkVbR8l679+hS9b9t8nQ6Hb/++iunTuUt2DB8+HBq1ar1WPWsXr2aiIgIAgICGDx48GOdSwghhHgcBc1rpeKBMiEE/Prrr4waNYq4uDhs7W1xG+WGS7DLA/d9p+07+YLttWvX2LRpk6lnc1BQ0H1z2AvCaDSiqqppdbLu3btz4MABOnfuXPgbEkIIIcxAuqsLUQrMnj2bkJAQ4uLiaNSoEadOnKJV71Yo5P/6X0Ghnls9ulXtBuQtSLJ582ZWrVpFamoqFSpU4JlnnqF79+5YWloWqoY7d+7w5ZdfmuazA7i5udGvXz8cHBwe/yaFEEKIEiDhVohS4H8foDx8+DB6dz1JWUmo5J81pKIypckUFEVBVVVWr17NyZMnAWjRogXPP/88VapUeaQaEhMTiYmJ4fjx49KvVgghRJkl0xKEMJOsrCxTqJ0xYwZBQUG07dCWr85+xZdnv8SgGtAqWoyqERUVjaKhrmtdWvm2AvIeyGzbti3btm2jX79+VK1atVDXNxgMpKen4+zsDECDBg1ITU0lMDDQNC1BCCGEKGtk5FaIEpabm8urr75KixYtyMzMBECj0VC5SWVGbh3J0jNLMagGulXpxjtt3zGN3hpVIyO9RnL58mXTuWrWrMnkyZMLHWzj4uL48ssvWbNmDUajEcgLy23atMHOzq5oblQIIYQwAxm5FaIE3bx5k6FDh3LkyBEANm3axOAhg/n24rd8fOpjco25OFs782aD5+leoT6qqlLPyZ/Lybdon9Gak9tOcsHqLBUdBuHkVwegwC3v/pe9vT1paWkAxMfH4+npWXQ3KYQQQpiRhFshSsgvv/zC2LFjTctJL1++nKadmzJ251hOxea172pXqR1z6k3E4+uuoM9GAcZYVeWAsSvWhrwFE+pnn8D6m89gymFwKdiiDAaDgevXr1OjRg0A7OzsGDp0KJ6enqapEUIIIUR5IOFWiGKWk5PDa6+9xn/+8x8g78Gv79d+z9Hsozy1+Smy9FnYW9ozo/kM+tfojxJ1BvTZ5GLBbtpwLKcJ1oqCk5pKX36lOrfAAGQmFCjc5uTk8NVXXxEfH8+zzz6Lr68vwCM/eCaEEEKUZhJuhShm06ZN49NPPwXglVdeYeq/pjL/2HwORx0GoIV3C+a1nkdFh4qmY3Kx4AtGkaDkrQrWRD1HN/ZiQ06hr29lZYWvry+ZmZmkp6cXwR0JIYQQpZeEWyGK2cyZM/ntt99YsmQJaoDK0O1DSc9Nx0Zrw0tNX2J4neFolPzPdlqipybXyVEt6csuanCjwNfT6/UcPXqUwMBAbGxsAAgJCaFHjx6m10IIIUR5JeFWiCKm0+nYsmULTz31FAAVK1Zk7/G9LDi6gD0H9wDQ0KMhC1svpKpzVdNxt2/fxt7eHtf/f92Jg7TnMDZkF+r669at4+rVq6SlpRESEgIgHRCEEEI8MSTcClGErl69ypAhQzh9+jQbNmygf//+/HrjV+Yfnk9ydjIWGgsmN57MM/WewUKT9+On1+v5448/CAsLo5K3B89YbkVD3uitJfpC1xAUFERUVBQVK1b8552FEEKIckbCrRBF5Pvvv2fixImkp6fj7u6OaqHy2r7X2H59OwC1K9RmYZuF1HatbTrm7t27/PLLL8THxwNQIXo/emMYVgW8Zm5uLgcPHsTb25s6dfJag1WvXp2pU6cWevldIYQQojyQcCvEY8rKyuLFF1/kq6++AqBdu3ZMfW8qH1//mLiEOLSKlvENxvN8w+ex1OYFTr1ez549ezh06BCqquKgZNHbuJPa6p/g0wSiThXo2keOHGHv3r04OztTvXp1U6CVYCuEEOJJJeFWiMdw+fJlBg8ezPnz51EUhddmvoZViBVzLs4BwN/Zn4WtF9LAo4HpmJSUFFavXk1cXBwADdRLdFf/wM7RFUKWQ6Xm8Ekz0D94rq0KKBbWYOdGUFA9rly5QlBQ0CMt5iCEEEKUN/K3oRCP4cKFC5w/fx4vLy9mfTSLzdrN3L1+FwWFUQGjmNpkKjYW+TsUOFgpaDLjsCeTXupv1NXchFah0HY6WDvk7RR6Iq+P7f/IydWz//QVklIzeapPCLj4YQmMGzeuhO5WCCGEKP0k3ArxGAYNGsSHH31IXI04Po/9HICKDhWZ33o+zb2bm/aLiYnB3c0NbfhmtDv/xeD0DGzRYVe9NfT4Adxr5D+xi999CzQkx8Zy8Mw2VFWlZbpCJZfivjshhBCi7JFwK0QhnD9/nilTprBmzRp8fHw4G3eW3yr9xo3YGwA8Vesppjebjr2lPZC37O2+ffs4cGA/bRzv0jF5LQBuLpWh+2dQuycoykOvl5OTg5VV3uNlnp6edO7cGTc3N+mEIIQQQjyEhFshCkBVVZYvX05oaCg6nY6XXn6J1q+1Ztn5ZRhVI562nsxtPZc2FduYjomOjuaXDT8TE5s3tzYxORVVY43S9mVo8xJY2j70evfag506dYpJkybh6OgIQOvWrYv1PoUQQoiyTsKtEP8gLS2NSZMmsXr1agDadGpDes90vjqX1x2hV7VezGwxE2drZyBvtPbAgQPs27sHowq2aha92E292jUh5Ai4+v/jNbVaLTdv3iQrK4vz588THBxcfDcohBBClCMSboX4G2fOnGHIkCFcuXIFrVZL38l9+TPwT5LVZCpYV2BW8Cy6Vulq2j8+Pp6ff1hNVHwyAHXUq/RyuYZDr0VQs+tDrvLfY11dXdFoNCiKQq9evUhLS6NWrVrFeYtCCCFEuSLhVoiH+OOPP+jRowfZ2dn4VPSh/ov1uep5FYBOfp2YHTwbN1u3/x6QlYRm7zvExVtjoxroqT1A/fb9UFotAwvrf7zW/v376dmzJ82aNQPAx8cHHx+fYrs/IYQQojyScCvEQ7Ro0YJq1aph7WmNOlQlyi4KR0tHZgbNpHe13ij//yBYRloa9ld+ht1zcc1MYDD++NRqimOv78G5UoGuZWdnh6qqREVFFectCSGEEOWehFsh/kd4eDg1a9ZEo9GQrCbT6K1GnMs6h6IotPJtxdxWc/G29wbAaDRyaPt69h6/wCj1R6qQAB51qNVjCVRr/7fXiY6ORqvV4uHhAUDz5s3x8vKiatWqxX2LQgghRLkm4VYI8rohfPLJJ0yfPp358+dTvX91lhxbQqY+EztLO6Y3m87gWoNNo7Vxt66w8YdvuZtpCWg5r61PlS6TocVE0P790renT59m06ZN+Pn58cwzz6AoChqNRoKtEEIIUQQk3IonXlJSEuPHj2fDhg0AfLn1S2w8bVAUhUDPQBa0XoCfU96CCsbcHMJ++pQ/whMxYIm1qqO7XxaNBn8ETt4Fup6/vz8WFhY4OjqSm5tr6mMrhBBCiMcn4VY80Y4cOcLQoUO5efMmFlYW+A33w6aDDdZaa6YGTmVU3VFoNVoA4s/+xsbNW7mjdwEsqGEVT59+A3EK6Pi317h79y7R0dE0bdoUAGdnZ0JDQ3FycirmuxNCCCGePBJuxRPJaDTywQcf8Prrr6PX63H2dcZ9oju2VW0JcAtgUZtFVHepnrdzWjTsms2ds+e4o3THmhxC6nvSuP+/ULR//yMUExPD119/jUajoUqVKri7uwNIsBVCCCGKiYRb8US6cuUKM2fORK/X497SHY8xHljbWzOx0UQmNJiApcYSDLkYwj5Hu+8dyEmjEQopPu1o3Od5nH3+eSEGyFsyt2bNmtja2mJjY1PMdyWEEEIICbfiieRbzZdOUzpxLv4cFTpWoGaFmixss5AAtwAA1Gt/cOTnpRzNqMiz5GDrG4jS8z3aV2r6t+e9ffs2YWFhDBw4EAsLCxRFYejQoWi12pK4LSGEEOKJJ+FWPBGMRiPvvvsu3bp1Q+elY9bBWcQ0jMENN56p/wyhjUOx0lpByh0SN7/FxggNt5R6oMDJum/S+qlQ0Gj+9hoGg4H169eTlpZGWFgYbdu2BZBgK4QQQpQgCbei3IuNjWXMmDHs3LmTdz99F69ZXmisNFR2rMzCNgtp7NkY9Nmoe9/l6L5f2W0IIlexxFKj0q1LJ5q2bAv/3wLsr1RVNbUH02q1dOvWjWvXrhEYGFiCdyiEEEKIeyTcinJt7969DB8+nKioKDRWGqy7WKNYKgyvM5yXAl/CztIOru4iacscNqbU5abSBhSo6utB36eGU6FChYee++bNm2zfvp2QkBD8/fPm4NavX5/69euX1O0JIYQQ4i8k3IpyyWAwsHDhQubOnYvRaMTa1xq/F/yoWrsq81rNI9g3GBKvw843IHwb++jGTcUPS61C127dada8uWlE9mEuXLhATEwMe/bsMYVbIYQQQpiXhFtR7qSkpDBo0CB2794NgEsbF3xH+zKw3kBea/4ajooF/LEIDnwIhmzQWNCtaS1y0mrSJaTHQ0drDQYDer0ea2trADp27IhGo6Fdu3YldWtCCCGE+AcSbkW5Y2Nvw92Mu2isNPg87UONzjV4K/gtOvp1gMtbUXfM5ESKM7foxICqmSg9l2DrWYfBf3POO3fusGnTJipWrEi/fv0AsLW1pXv37iVyT0IIIYQoGAm3olzQ6/Xo9Xru6u7yxoE3YARU61uNvsF9ebPlm1RIj4dVg0i+dpTNdONPpQoA9YOHUcuz9j+eX1VV4uLiyMzMRKfTSc9aIYQQopSScCvKvMjISIYNH4bioZDeL50cYw5uHm682ftNuvu2gX3voh76lFNqbXYqT5ODFRYWFnTu3JmatWo98JwGg4H4+Hi8vLwA8PPzY8CAAdSsWVOCrRBCCFGKSbgVZdqOHTsYOWokiQmJaGw01GhVgy6NujCn5Vt4XN8PnzQnNS2VTfThmlIVyAuq/fr1w83N7YHnTEpKYvXq1WRlZTFlyhRTmG3YsGFJ3ZYQQgghHpGEW1Em6fV63nzzTd555x0AbPxsqPViLeb0mUN/x1oo68fBjf2owPfasUQbK6DVauncuTNBQUFo/mZBBicnJxRFQVEU4uPjqVSpUgndlRBCCCEel4RbUebcvn2bQUMHcSzsGACunVzp/VJvFrWaScVjK+HIeFANYGGD0vYVQir2Z/fe/fTr1w93d/f7zqfX6zl//jyNGjVCURS0Wi1DhgzB0dFRpiAIIYQQZYyEW1Gm6PV6gjsEc/fPu2hsNVQdX5V5k+YyPFtBs7w3akYcZwhA9WlMkyGvQ4UqVAXGVa/5wL61RqORL7/8kri4OCwtLalXrx4AHh4eJXtjQgghhCgSEm5FmRGfFc/8sPlY9LXAdqMtXf7VhY/av0DVvf+G20dIw54tViO4kuuNZYIl/oozLv9/7MMWZNBoNAQEBHDy5EksLOTHQQghhCjrFFVVVXMXYW6pqak4OzuTkpKCk5OTucsRf3Hjxg3Wh61ns7KZpOwkLDQWTKr7DOOirmNx4htUVM5pG7Nd0xmdXkWr1dKhQwdatWp139za3NxcDh48SKNGjUyLNej1egwGg2lxBiGEEEKUPgXNaw9/qqYE7Nu3jz59+uDr64uiKPzyyy/53ldVldmzZ+Pj44OtrS1dunTh6tWr+fZJTExk5MiRODk54eLiwvjx40lPTy/BuxDFadW6VdRpUIfXJ7xOzN0YaleoxVr/4Uzc/SEWJ1aQji0/OD3PBmMndHoVHx8fJk6cSJs2bR740NjWrVvZu3cvO3bsMG2zsLCQYCuEEEKUE2b9HjYjI4NGjRoxbtw4Bg4ceN/7S5Ys4aOPPmLlypX4+/sza9YsQkJCuHjxoulBn5EjRxIVFcWuXbvIzc1l7NixTJw4kTVr1pT07YhHEJ0RTaIu8b7tOdk5zHhtBr+u/hUAu+p2jPDrwhvR57E8uTBvH48GfJ7ei4y0HDQaDe3bt6d169ZotdqHXq9169bcunWLRo0aoarqQ6crCCGEEKJsKjXTEhRFYcOGDfTv3x/IG7X19fXllVdeYfr06QCkpKTg5eXFN998w7Bhw7h06RIBAQEcO3aMZs2aAXl9T3v27MmdO3fw9fV94LWys7PJzs42vU5NTcXPz0+mJZSwHEMO3X7sRoIuId/27Nhsbn92G90NHQDV+vqzfkQwgZe25O1g7QQd34DmE/h9736uXr1K//79TQsumM6fk8O+ffuwt7cnODjYtN1oNP5tKzAhhBBClD5lYlrC37l+/TrR0dF06dLFtM3Z2ZmgoCDCwsIACAsLw8XFxRRsAbp06YJGo+HIkSMPPffixYtxdnY2/fLz8yu+GxEPZamxxNvGFYX/jp6mHE3h2uxr6G7o0DpoqT+tBudb6k3B9kLVccQM+xVaTgKtJe3bt2fChAn3BVuA8PBwDh48yB9//EFGRoZpuwRbIYQQovwqtX/LR0dHA9wXWry8vEzvRUdH4+npme99CwsLXF1dTfs8yMyZM0lJSTH9un37dhFXLwpCSbnDlKtHUfnvlwcZlzMw6ozY1bKjxrwafO6Zim12ChlezVjvv4Qfb7rwy6/7MBgMAGi12nzTEIxGo+m/69evT4MGDRg0aBB2dnYld2NCCCGEMJsnsveRtbW1PEBUGmQm0Co9jQBHWy5ZW6MqCt7DvLHytsKjkysBhlxapei4WHcaW2/ZkRkbjaIo1KpV675TZWdns3fvXm7evMn48ePRaDQoivLAudxCCCGEKL9K7citt7c3ADExMfm2x8TEmN7z9vYmNjY23/t6vZ7ExETTPqJ0W3M2l8j/3ML4/4O3GisN7t3cUS00PJeo42d6sv4yZGZm4unpyYQJE+jYseN9D43p9XpOnTpFZGTkfR01hBBCCPHkKLXh1t/fH29vb3bv3m3alpqaypEjR0wPBwUHB5OcnMyJEydM+/z+++8YjUaCgoJKvGZRcJmZmUyYPpdRG7I4cCkHuz1xaP7/2UaNqtI4w4oTumGcV+qgKApt27bl2WefzfeQYFpamum/7e3t6dWrFyNGjKB27dolfj9CCCGEKB3MOi0hPT2diIgI0+vr169z+vRpXF1dqVy5Mi+99BILFiygZs2aplZgvr6+po4KdevWpXv37jz77LN8/vnn5ObmEhoayrBhwx7aKUGY38WLFxkyZAgXLlxAAWa3t6JTHZXJ/9+Wy6goPJd6lyskY6dm0a//QCo26mg6XlVVduzYwfHjx5kwYQI+Pj5A3hxbIYQQQjzZzBpujx8/TseO/w0t06ZNA+Dpp5/mm2++4bXXXiMjI4OJEyeSnJxMmzZt2LFjh6nHLcDq1asJDQ2lc+fOaDQaBg0axEcffVTi9yIK5ptvvmHy5MlkZmbi7WTJ6v6WdPK3QM3OpkVqBY47pFA3N4vWuiwasQVbdFh4jM93DkVRyMzMxGg0Eh4ebgq3QgghhBClps+tOcnyuyXjrbfeYt68eQB0qW7Jqv7WeDloyMKanXTgjFKPGPtLjNb/TrDuv32ImbiXKMULV1dX04OAqampxMfHU61aNXPcihBCCCFKWJnvcyvKn6e6BOFgrWVBR2t2jLDBq04QV/FnKU9zRqkHqsqA9HRa/m+wBfadCufLL79k7969pm1OTk4SbIUQQghxnyeyFZgoGaqqcv78eRrUqwfHvqbBvre4PtUWdxcndJ3ms+W2Dafv5nU2cFMT6cdO/IjKfxILa3x8/YDLZGZmypK5QgghhPhbEm5FsUhLS+O5555j/fr17H+9BS215wFwD2jPnaA5rN+xn9TUvMUzWjaoTqdmvbG0GAvAndhE9HojVX3dwc6Nmi5+PO9b/YGrkAkhhBBC/C8Jt6LInTp1iiFDhhAREYFWA+dOn6RlSxfoOg+ajccxLY3s7N9wdXWlX79+VK5c2XTsxYsXWb9xPy4uLrzwwgtYWloC969UJ4QQQgjxIBJuRZFRVZWlS5fy8ssvk5OTg5+TwtqnbGnVuh1x7RbhUaMJAM7OzowaNQovLy9TeL2nRo0aODk5UaVKFfR6/X3vCyGEEEL8HemWgHRLKAopKSlMmDCBH3/8EYA+tSxYMcgFhx6z2ZVclRMnTzJy5Ehq1KiR77hbt25x9epVOnfubNqm0+nytXsTQgghhJBuCaJE/fDNl/z4449YaODf3azZOL0dqUN+ZukJAydOngTg7t27+Y5JTU1l5cqVHDhwgD///NO0XYKtEEIIIR6VTEsQj0dV4dx6ns38mLPNLRnTxI7Gw99iW0ZNjm/8HQAXFxf69u2Lv79/vkOdnJxo3rw5OTk5MqdWCCGEEEVCpiUg0xIeRVJSEm+98SoLW6TieHNn3kafxtwMms8ve0+RnJwMQNOmTenatSvW1tbcuHGDP/74g8GDB+Pg4AAgrb2EEEIIUSAFzWsycisK7fDhwwwb1JebkXGkhlnyzUAnaD8D2rxERvhVkpOTcXZ2pm/fvqaFFlRVZdeuXURGRrJ371569eoFIMFWCCGEEEVKwq0oMKPRyL/fns/M2XPRG1SqV1CY2iMA3dPLsKnSFICAgAD69OlDvXr1sLCwMI3MKopCjx49OH36NJ06dTLznQghhBCivJJwKwokPj6eZ57qwda9xwEYWs+STxe9zjHLlvy+/g8mTaqDvb09AIGBgVy/fp1t27YRHBxMYGAgAJUqVaJSpUpmuwchhBBClH/SLUH8o1OH9tC4dhW27j2OtRa+GObPOyu3seamB0eOHiMjI4NLly7lOyY6Opr4+HgOHz6MTOsWQgghREmRkVvx967sxHfnCxhysqjtpuH7hROJq9KXb7YcBMDR0ZE+ffrg7+9PWloajo6OALRo0YLc3FxatGgh82qFEEIIUWKkWwLSLeFB0uLu4HhwMZxeBcBZXUVser/Nr6dvkZCQAEDjxo0JCQkhISGBn3/+GUdHR55++mkJs0IIIYQoctItQTxY8m3ITHj4+3Zu/LFlHSMnv86/u1oyrL4VBE+mYac32bJzNwkJCTg4ONCnTx9q1aoFgL29PampqeTk5Jj+4AkhhBBCmIOE2ydJ8m34pCnosx/4tsGosmB/LvP26jCq8OFxKwYv2Yq2WmsAunbtioWFBa1atTKN3kLeIg3Dhw+nYsWKWFtbl8itCCGEEEI8iDxQ9iTJTHhosI1KM9JtVSZz9uQF27HdGvLWJ9+zNuyG6YEwa2tr2rZty4oVK1i9enW+gFutWjUJtkIIIYQwOxm5Fey6pmfUhixiM1TsLeHDf00ix6M+R0+cAuD69eumxRjs7Oxwc3PDaDSSnp6Om5ubOUsXQgghhMhHwu0T7mqCge6rMzGq0Mjbkn+N7sQlxRs1Lg57e3tCQkKIioqicuXKWFhYoCgK/fr1w9raGisrK3OXL4QQQgiRj4TbJ1xNNy0vt7RCZ+tFQJu+XNR4gKpSv359unfvzvfff8/du3cxGo20bdsWwNTuSwghhBCitJE5t0+g7VdzuZViNL1+p6s19dv2JU7jgZ2ayeAuzRk0aBD29va0aNECZ2dnPD09zVixEEIIIUTByMjtEyQ39ir/2qXj3UM5BFfSsvcZOyy1ClpFoQ+7OKA2w5EM7G26mo5p0KABdevWxdLS0oyVCyGEEEIUjIzcPiFu7fyM9n1H8O6hHDQaDW3atuOw0tT0fkWicSWFY0oTth06h9GYN7KrKIoEWyGEEEKUGTJyW97ps9k0byjPvLuRJB1Uq+TJxJED0dl6s1fVU5+rVCANgNYc4yaVademKxqN/LtHCCGEEGWPhNtyLCc2gtdHdOSD3XfQaDQMH9CDuo1boFNVrK0scHZyZb3lm7RsXJd6FZ2wUxTG27qiVKhs7tKFEEIIIR6JhNvy6upvGH8Yz+7zkXh4ePDchLFYWNthVFVcfKrwe6wdgfGXUFUYdd0Deyc9b/UJoHt9H3NXLoQQQgjxyBT13vJTT7DU1FScnZ1JSUnBycnJ3OU8HqMBdc/bKPveBVTOKfX4RdMdo1HF2tqaSg1bMWtfKioKTSzuEmN0INLojPL/hy8dFSgBVwghhBClTkHzmkysLEd0CXeZElKThQvmAyo0G0eDf/1B27btcHZ2xsLCgi9OZ6H+f5Q9pa9IpNEZ8vYGYO7mixiMT/y/d4QQQghRRsm0hLIk+TZkJjzwrYhjvzNk8hucjsyhdatgQgKeonnvlwFo06YN58+fJyUlBeucaMD9gedQgagUHUevJxJcXZbVFUIIIUTZI+G2rEi+DZ80BX32fW/9cD6XZzdnYeXoxnPPDsDbtxKHojQ0zs3F0tISCwsL+vTpw64LkUTsS/zHS8Wm6YrjDoQQQgghip2E27IiM+G+YJuVq/LyTh1fntTTsmUwXTp3QmthiVarJTk5matXrxIQEEBEbDrLT6ay/nhSgS7l6WhTHHcghBBCCFHsJNyWUUZVpePKTK5mOTN2bH8qV85r31W9ogfulapx5MgRjpy/ypIj6ewJjzMdZ6FR0D9kTq0CeDvb0MLftSRuQQghhBCiyEm4LaM0isLoVr5E1RqDpaUllmo2IeyjXtf/sCGqAufsclhxUgvEoSjQpa4X49v4k5SRwwurTwL/fYgMMHVLeKtPAFqN8tfLCSGEEEKUCRJuy5CMHJU7qUZqu2sBmFQ3mY9IIwVXKhNFU84xcuVxDmZWArTYWWkZ0syPZ1pVpaq7vek8S0cFMnfzRaJS/ju31tvZRvrcCiGEEKLMk3BbRlwIv8aQrzPwrdWYVa1v4GWrR6MoDGIH36hDcSQdAxqSs3Kp6GLL062qMLR5ZZxtLe87V/f6PnQN8Obo9URi03R4OuZNRZARWyGEEEKUdbKIA6V7EQdVVVmxYgX/euMNuvfoQdWqVXHT3STU+ifTPik44Ew6AHs7/Ejrtp2x0EoLYyGEEEKUHwXNazJyW8oYjKppRNVBo2fFkje5ciWccePHY2VlBUCydUXSsMeRDABTsAWoYGclwVYIIYQQTywJt6XIjvNRprmwObF/kvP7p/RqH0SvXr0AqKTeQY8lFYnGAsN9x+tUS6L1djQs6cKFEEIIIUoJCbelxI7zUUxaddLUwaDCn7/Rf+QgrKysyDXCCb0fKYYquCppqASwlE73nSNJdeR9r2olW7gQQgghRCki4bYUMBhV5m6+mK81l9p4EJaWfwJwxuDLZYMXDjYWROk8eNAkaelRK4QQQggBMjmzFDh6PZEb4edwOPcj957vy7Rx47Tel0t6D8L1nqjAhDZ5o7J/7WkgPWqFEEIIIfJIuC1hBqNK2LUENp6+S9i1BPQGIyu/+oy+1pcY3KIqNeMPmvY9ra/I4dwq5Pz/AHtVdzuWjgrE2zn/8rjezjYsHRUoPWqFEEII8cQrN9MSPv30U959912io6Np1KgRH3/8MS1atDB3Wfn87wNjAEZdGn5Xf6Zdw+rY+PoCUNfXmYjcBx/v6WhDcHU36VErhBBCCPEQ5SLc/vDDD0ybNo3PP/+coKAgPvzwQ0JCQggPD8fT09Pc5QH3PzBmFXuRIONlarSoB0BMWg4pNj4c1Ve+79i/zqfVahSCq7uVUOVCCCGEEGVHuZiW8O9//5tnn32WsWPHEhAQwOeff46dnR3Lly83d2nA/Q+M1Y3fx3C/dGr4V0av13M4wZoDDm05pPdHjzbfsTKfVgghhBCi4Mp8uM3JyeHEiRN06dLFtE2j0dClSxfCwsIeeEx2djapqan5fhWno9cTTVMRADQ29mg0GvQGI5szqnPJrgGpOgMvdakl82mFEEIIIR5DmZ+WEB8fj8FgwMvLK992Ly8vLl++/MBjFi9ezNy5c0uiPABi03T5Xl9wCMQm+SxnrALQW1matld1t+PAjE4yn1YIIYQQ4hGV+XD7KGbOnMm0adNMr1NTU/Hz8yu263k62vxli8IJ60YP3E/m0wohhBBCPLoyH27d3d3RarXExMTk2x4TE4O3t/cDj7G2tsba2rokygOghb8rPs42RKfoZAEGIYQQQohiVObn3FpZWdG0aVN2795t2mY0Gtm9ezfBwcFmrOy/tBqFt/oEALIAgxBCCCFEcSrz4RZg2rRpfPXVV6xcuZJLly4xadIkMjIyGDt2rLlLM+le30cWYBBCCCGEKGZlfloCwNChQ4mLi2P27NlER0fTuHFjduzYcd9DZubWvb6PLMAghBBCCFGMFFVVHzQN9ImSmpqKs7MzKSkpODk5mbscIYQQQgjxFwXNa+ViWoIQQgghhBAg4VYIIYQQQpQjEm6FEEIIIUS5IeFWCCGEEEKUGxJuhRBCCCFEuSHhVgghhBBClBsSboUQQgghRLkh4VYIIYQQQpQbEm6FEEIIIUS5IeFWCCGEEEKUGxJuhRBCCCFEuSHhVgghhBBClBsSboUQQgghRLlhYe4CSgNVVQFITU01cyVCCCGEEOJB7uW0e7ntYSTcAmlpaQD4+fmZuRIhhBBCCPF30tLScHZ2fuj7ivpP8fcJYDQaiYyMxNHREUVRiv16qamp+Pn5cfv2bZycnAr9fkH3edw6Slppq6e0kN8XUVjyZ0YIUdzM8TmjqippaWn4+vqi0Tx8Zq2M3AIajYZKlSqV+HWdnJz+9g/EP71f0H0et46SVtrqKS3k90UUlvyZEUIUt5L+nPm7Edt75IEyIYQQQghRbki4FUIIIYQQ5YaEWzOwtrbmrbfewtra+pHeL+g+j1tHSStt9ZQW8vsiCkv+zAghiltp/pyRB8qEEEIIIUS5ISO3QgghhBCi3JBwK4QQQgghyg0Jt0IIIYQQotyQcCuEEEIIIcoNCbclaN++ffTp0wdfX18URWHhwoX5Xv/yyy+mfXNzc2nfvj12dnYoioJWq8XPz499+/Y98NyqqtKjR4/7zvNXb7/9Noqi8NJLL5m2RUdHM3r0aLy9vbG3tycwMJCffvqpiO76fmlpabz00ktUqVIFW1tbWrVqxbFjx/Ltc+nSJfr27YuzszP29vY0b96cW7duFVtN5vDXPw9//f8WExPDM888g6+vL3Z2dnTv3p2rV6+a3k9MTGTKlCnUrl0bW1tbKleuzNSpU0lJSSnhOxElYenSpTRs2NDUMD04OJjt27eb3i/Mz3F2djaNGzdGURROnz5dQncghCjtqlatiqIo9/2aPHmyaZ+wsDA6deqEvb09Tk5OtGvXjqysLNP7V65coV+/fri7u+Pk5ESbNm34448/SvQ+JNyWoIyMDBo1asSnn34KgE6ny/f6f2VmZnLhwgWeeeYZNm/ezDfffENaWhpdu3YlIyPjvv0//PDDf1w6+NixY3zxxRc0bNgw3/YxY8YQHh7Opk2bOHfuHAMHDmTIkCGcOnXqMe724SZMmMCuXbv47rvvOHfuHN26daNLly7cvXsXgGvXrtGmTRvq1KnDnj17OHv2LLNmzcLGxqZY6jGXv/55+F+qqtK/f3/+/PNPNm7cyKlTp6hSpQpdunQx/f+PjIwkMjKS9957j/Pnz/PNN9+wY8cOxo8fX9K3IkpApUqVePvttzlx4gTHjx+nU6dO9OvXjwsXLgCF+zl+7bXX8PX1LelbEEKUcseOHSMqKsr0a9euXQAMHjwYyAu23bt3p1u3bhw9epRjx44RGhqabync3r17o9fr+f333zlx4gSNGjWid+/eREdHl9yNqMIsAHXDhg0Pff0gO3fuVAF13bp1+bafOnVKrVixohoVFfXQ86Slpak1a9ZUd+3apbZv31598cUXTe/Z29ur3377bb79XV1d1a+++qqwt/WPMjMzVa1Wq27ZsiXf9sDAQPVf//qXqqqqOnToUHXUqFFFfu3S7K//38LDw1VAPX/+79QLxQAAEixJREFUvGmbwWBQPTw8/vb/y7p161QrKys1Nze3OMsVpUSFChXUr7/+WlXVgv8cb9u2Ta1Tp4564cIFFf6vnXuPiqp6+wD+nRnkqoggiIYDKnIT5OKNSz+hMAiVZFlS2gqUEkpcYhIhLZBbKrpEFNN0mRfEVMyEvKR4xVuEihCoMKDiJSUlb6goCPO8f/Ryfp0AxV4Bmff5rDVrMXufvc+zD3NmntmzzwEVFBS0V7iMsU4mLCyMBgwYQEqlkoiIRowYQdHR0S1uX1VVRQDo6NGjQll1dTUBoP3797d5vI145rYTqaysBAD07dtXKKupqcGkSZOwfPlyGBsbt9g2NDQUY8aMwahRo5rUubq6IiMjA3fu3IFSqcSWLVvw5MkTeHh4vPQx1NfXo6GhocksrJaWFo4fPw6lUondu3fDwsIC3t7eMDIywogRI5651EIV1dbWAoDoOEmlUmhoaOD48eMttrt//z50dXWhpqbW5jGyjtPQ0IAtW7bg0aNHcHFxAdC68/jmzZuYOnUq0tPToa2t3UHRM8Y6g7q6OmzcuBFBQUGQSCS4desW8vLyYGRkBFdXV/Tq1Qvu7u6izyQDAwNYWlpiw4YNePToEerr67Fq1SoYGRlhyJAh7Rd8u6XRTAQvOHP76NEj0tXVJUNDQ1F5cHAwffzxx8/sZ/PmzWRra0uPHz8mImoyc3v37l3y8vIiAKSmpka6urqUnZ39r8f2PC4uLuTu7k7Xr1+n+vp6Sk9PJ6lUShYWFsLss7a2Ni1evJgKCgpo/vz5JJFIKCcnp81i6mj//L/V1dWRXC6nCRMm0J07d6i2tpaSkpIIAHl5eTXbR1VVFcnlcvrqq6/aKWrW3oqKikhHR4dkMhl1796ddu/eLdQ97zxWKpX09ttvU2JiIhERVVRU8MwtY6xFGRkZJJPJ6Pr160RElJubSwBIX1+f1q5dS2fOnKGZM2eSuro6lZWVCe2uXbtGQ4YMIYlEQjKZjHr37k1nzpxp19h55rYTePr0KWxsbPDkyRMcOXJEKN+xYwcOHTqEJUuWtNj22rVrCAsLw/fff9/imtWYmBjcu3cPBw4cwOnTpzFr1iz4+/ujuLj4ZQ8FAJCeng4iwmuvvQYNDQ2kpqZi4sSJkEqlUCqVAIBx48bh888/h4ODA2bPno2xY8di5cqVbRLPq6hLly7Yvn07ysrKoK+vD21tbRw+fBg+Pj6itU2NqqurMWbMGNjY2CAuLq79A2btwtLSEoWFhcjLy8Nnn32GwMBAnD9/HsDzz+Nly5bhwYMHiIqK6sghMMY6iTVr1sDHx0dYn9/4+RwSEoIpU6bA0dERKSkpsLS0xNq1awH8db1IaGgojIyMcOzYMZw8eRJ+fn7w9fUVfn1uF+2aSjMBWjlzW1dXR/369aMuXbpQfn6+qC4sLEz4ZtT4AEBSqZTc3d2JiCgzM5MANNmmsd2FCxearO0kIvL09KSQkJCXPWyRhw8f0o0bN4iIyN/fn0aPHk21tbWkpqYmzC41+vLLL8nV1bVN4+lILf3/iYju3btHt27dIiKi4cOH07Rp00T11dXV5OLiQp6ensLsPPv/wdPTk4KDg1t1Ho8bN46kUmmT9wKZTEYBAQEdET5j7BV1+fJlkkqllJWVJZRdunSJAFB6erpoW39/f5o0aRIRER04cICkUindv39ftI25uTnNnz+/7QP/X7ww7xVWV1cHKysrXLt2DcePH4eTk5Oofvbs2fjkk09EZXZ2dkhJSYGvry8AwNPTs8kM7JQpU2BlZYXIyEjU1NQAQJPZQJlMJnxLays6OjrQ0dHB3bt3kZ2djYULF0JdXR3Dhg2DQqEQbVtWVgZTU9M2jedV1b17dwBAeXk5Tp8+jcTERKGuuroa3t7e0NDQwI4dO1TujhLs2ZRKJWpra1t1HqempuLrr78W6m7cuAFvb29kZGRgxIgR7Rc0Y+yVt27dOhgZGWHMmDFCmZmZGfr06dPs57OPjw8AtPhe9PdfZtsDJ7ft6OHDh7hw4YLwvLS0FBkZGdDV1QUAVFRUoLCwEPr6+ujduzcsLS1x5coVrF69GlpaWigqKgIAmJqaonv37jA2Nm72IjK5XI5+/foBALp16wZbW1tRvY6ODgwMDGBra4unT5/C3NwcISEhWLRoEQwMDJCVlYX9+/dj165dbXIcsrOzQUSwtLTEhQsXEBERASsrK0yZMgUAEBERgffffx8jR47EG2+8gb1792Lnzp3Iyclpk3g6yj9fD3///8vlcvzwww8wNDSEXC5HcXExwsLC4OfnBy8vLwB/JbZeXl6oqanBxo0bUV1djerqagCAoaEhZDJZh4yLtY2oqCj4+PhALpfjwYMH2LRpE3JycpCdnQ0rK6vnnsdyuVzUX9euXQEAAwYMgImJSbuPhzH2alIqlVi3bh0CAwNFFydLJBJEREQgNjYW9vb2cHBwQFpaGkpLS7Ft2zYAgIuLC3r06IHAwEDMmTMHWlpaWL16NSoqKkSJcptrtzliRocPHyYAz30EBgYKF3s094iMjGxxH2jFLcX+eUFZWVkZjR8/noyMjEhbW5sGDx7c5JZCL1NGRgb179+f1NXVydjYmEJDQ+nevXuibdasWUPm5uakqalJ9vb2op9GVEVLr4fAwEAiIlq6dCmZmJhQly5dSC6XU3R0NNXW1j63PQCqqKjomEGxNhMUFESmpqakrq5OhoaG5OnpSfv27RPqX/Q85gvKGGPNabztqEKhaLZ+/vz5ZGJiQtra2uTi4kLHjh0T1Z86dYq8vLxIX1+funXrRs7OzvTzzz+3R+gCCRFRu2TRjDHGGGOMtTG+WwJjjDHGGFMZnNwyxhhjjDGVwcktY4wxxhhTGZzcMsYYY4wxlcHJLWOMMcYYUxmc3DLGGGOMMZXByS1jjDHGGFMZnNwyxhhjjDGVwcktY4z9C5cvX4ZEIkFhYWFHhyIoLS2Fs7MzNDU14eDg0NHhMMZYh+DkljHWKU2ePBkSiQRJSUmi8qysLEgkkg6KqmPFxsZCR0cHCoUCBw8e7OhwGGOsQ3ByyxjrtDQ1NbFgwQLcvXu3o0N5aerq6v5124sXL+L111+HqakpDAwMXomYGGOsvXFyyxjrtEaNGgVjY2PMnz+/xW3i4uKa/ES/ZMkSmJmZCc8nT54MPz8/zJs3D7169YKenh4SEhJQX1+PiIgI6Ovrw8TEBOvWrWvSf2lpKVxdXaGpqQlbW1scOXJEVH/27Fn4+Piga9eu6NWrFz766CP8+eefQr2HhwemT5+OmTNnomfPnvD29m52HEqlEgkJCTAxMYGGhgYcHBywd+9eoV4ikSA/Px8JCQmQSCSIi4trtp/G/U2fPh3du3dHz549ERMTAyIStjEzM0NiYiICAgKgq6uL4OBgAMCPP/6IQYMGQUNDA2ZmZkhOThb1XVtbi8jISPTt2xcaGhowNzfHmjVrWn0stm3bBjs7O2hpacHAwACjRo3Co0ePAAA5OTkYPnw4dHR0oKenBzc3N1y5ckVo+9NPP8HJyQmampro378/4uPjUV9fDwAgIsTFxUEul0NDQwN9+vTBjBkzmj0+jLHOj5NbxlinJZPJMG/ePCxbtgy///77/6mvQ4cO4caNGzh69CgWL16M2NhYjB07Fj169EBeXh4+/fRThISENNlPREQEwsPDUVBQABcXF/j6+uL27dsAgHv37uHNN9+Eo6MjTp8+jb179+LmzZvw9/cX9ZGWlgZ1dXWcOHECK1eubDa+pUuXIjk5GYsWLUJRURG8vb3xzjvvoLy8HABQWVmJQYMGITw8HJWVlfjiiy9aHGtaWhrU1NRw8uRJLF26FIsXL8Z3330n2mbRokWwt7dHQUEBYmJikJ+fD39/f3zwwQcoLi5GXFwcYmJisH79eqFNQEAANm/ejNTUVJSUlGDVqlXo2rVrq45FZWUlJk6ciKCgIJSUlCAnJwfjx48HEaG+vh5+fn5wd3dHUVERcnNzERwcLCw/OXbsGAICAhAWFobz589j1apVWL9+PebOnQvgr6Q8JSUFq1atQnl5ObKysmBnZ/fM1wNjrBMjxhjrhAIDA2ncuHFEROTs7ExBQUFERJSZmUl/f2uLjY0le3t7UduUlBQyNTUV9WVqakoNDQ1CmaWlJf3nP/8RntfX15OOjg5t3ryZiIgqKioIACUlJQnbPH36lExMTGjBggVERJSYmEheXl6ifV+7do0AkEKhICIid3d3cnR0fO54+/TpQ3PnzhWVDRs2jKZNmyY8t7e3p9jY2Gf24+7uTtbW1qRUKoWyyMhIsra2Fp6bmpqSn5+fqN2kSZPorbfeEpVFRESQjY0NEREpFAoCQPv37292v887Fvn5+QSALl++3KTt7du3CQDl5OQ027enpyfNmzdPVJaenk69e/cmIqLk5GSysLCgurq6ZtszxlQLz9wyxjq9BQsWIC0tDSUlJf+6j0GDBkEq/e9bYq9evUSzezKZDAYGBrh165aonYuLi/C3mpoahg4dKsTx22+/4fDhw+jatavwsLKyAvDX+thGQ4YMeWZs1dXVuHHjBtzc3ETlbm5u/2rMzs7OoovuXFxcUF5ejoaGBqFs6NChojYlJSXN7r+xXWFhIWQyGdzd3Zvd5/OOhb29PTw9PWFnZ4cJEyZg9erVwlpqfX19TJ48Gd7e3vD19cXSpUtRWVkp6jshIUHU99SpU1FZWYmamhpMmDABjx8/Rv/+/TF16lRkZmYKSxYYY6qHk1vGWKc3cuRIeHt7IyoqqkmdVCoVrScFgKdPnzbZrkuXLqLnEomk2TKlUtnquB4+fAhfX18UFhaKHuXl5Rg5cqSwnY6OTqv7bC8vGpOWltYz6593LGQyGfbv3489e/bAxsYGy5Ytg6WlJSoqKgAA69atQ25uLlxdXZGRkQELCwv8+uuvQt/x8fGifouLi1FeXg5NTU307dsXCoUCK1asgJaWFqZNm4aRI0c2+zpgjHV+nNwyxlRCUlISdu7cidzcXFG5oaEh/vjjD1GC+zLvTduYYAFAfX098vPzYW1tDQBwcnLCuXPnYGZmBnNzc9HjRZJHXV1d9OnTBydOnBCVnzhxAjY2Ni8cc15eXpMxDBw4EDKZrMU21tbWze7fwsICMpkMdnZ2UCqVTS6oa9SaYyGRSODm5ob4+HgUFBRAXV0dmZmZQh+Ojo6IiorCL7/8AltbW2zatEnoW6FQNOnX3NxcmI3X0tKCr68vUlNTkZOTg9zcXBQXF7/wsWOMvfo4uWWMqQQ7Ozt8+OGHSE1NFZV7eHigqqoKCxcuxMWLF7F8+XLs2bPnpe13+fLlyMzMRGlpKUJDQ3H37l0EBQUBAEJDQ3Hnzh1MnDgRp06dwsWLF5GdnY0pU6aIlgC0RkREBBYsWICMjAwoFArMnj0bhYWFCAsLe+GYr169ilmzZkGhUGDz5s1YtmzZc/sJDw/HwYMHkZiYiLKyMqSlpeGbb74RLlwzMzNDYGAggoKCkJWVhYqKCuTk5GDr1q2tOhZ5eXmYN28eTp8+jatXr2L79u2oqqqCtbU1KioqEBUVhdzcXFy5cgX79u1DeXm58CVizpw52LBhA+Lj43Hu3DmUlJRgy5YtiI6OBgCsX78ea9aswdmzZ3Hp0iVs3LgRWlpaMDU1feFjxxh79XFyyxhTGQkJCU2WDVhbW2PFihVYvnw57O3tcfLkyWfeSeBFJSUlISkpCfb29jh+/Dh27NiBnj17AoAw29rQ0AAvLy/Y2dlh5syZ0NPTE63vbY0ZM2Zg1qxZCA8Ph52dHfbu3YsdO3Zg4MCBLxxzQEAAHj9+jOHDhyM0NBRhYWHC7b5a4uTkhK1bt2LLli2wtbXFnDlzkJCQgMmTJwvbfPvtt3jvvfcwbdo0WFlZYerUqcKtvJ53LHR1dXH06FGMHj0aFhYWiI6ORnJyMnx8fKCtrY3S0lK8++67sLCwQHBwMEJDQxESEgIA8Pb2xq5du7Bv3z4MGzYMzs7OSElJEZJXPT09rF69Gm5ubhg8eDAOHDiAnTt3vtR7ATPGXh0S+udiNMYYYyrLw8MDDg4OWLJkSUeHwhhjbYJnbhljjDHGmMrg5JYxxhhjjKkMXpbAGGOMMcZUBs/cMsYYY4wxlcHJLWOMMcYYUxmc3DLGGGOMMZXByS1jjDHGGFMZnNwyxhhjjDGVwcktY4wxxhhTGZzcMsYYY4wxlcHJLWOMMcYYUxn/A8VwTrYk/UH6AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# read results from text_*.txt\n", + "import glob\n", + "\n", + "n_grids = [100, 200, 400]\n", + "\n", + "n_procs = [[1,12,24,48], # 1-4 nodes\n", + " [24,48,96,192], # 2-16 nodes\n", + " [96,192,384,768]] # 4-32 nodes\n", + "\n", + "# calculate required nodes for each grid and n_procs\n", + "n_nodes = [[1,1,2,4],\n", + " [2,4,8,16],\n", + " [8,16,32,64]]\n", + "\n", + "times = [[],[],[]]\n", + "spups = [[],[],[]]\n", + "\n", + "\n", + "path_dir = \"./bench_fugaku\"\n", + "for i, ngrid in enumerate(n_grids):\n", + " for j, nproc in enumerate(n_procs[i]):\n", + " nnode = n_nodes[i][j]\n", + " n_sweep, ndiv_r, ndiv_t, ndiv_p = assign_procs(nproc, nnode)\n", + " \n", + " fname = path_dir + \"/time_{0}-{0}-{0}_{1}-{2}-{3}-{4}.txt\".format(ngrid, n_sweep, ndiv_r, ndiv_t, ndiv_p)\n", + " print(fname)\n", + "\n", + " with open(fname, \"r\") as f:\n", + " lines = f.readlines()\n", + " line = lines[0]\n", + " n_iters = int(line.split(',')[0].split(' ')[-1])\n", + " l1 = float(line.split(',')[1].split(' ')[-1])\n", + " linf = float(line.split(',')[2].split(' ')[-1])\n", + " time = float(line.split(',')[3].split(' ')[-1])\n", + "\n", + " times[i].append(time)\n", + " spups[i].append(1/(times[i][-1]/(times[i][0]*n_procs[i][0])))\n", + "\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", + "\n", + "markers = ['o', 's', 'v', 'd', 'p', 'h', 'x', 'D', 'H', '8', 'P', 'X', 'd', 'p', 'h', 'x', 'D', 'H', '8', 'P', 'X']\n", + "\n", + "# plot speed up\n", + "for i, ngrid in enumerate(n_grids):\n", + " #print(n_procs[i])\n", + " #print(times[i])\n", + " ntotal = ngrid**3\n", + " ax.plot(n_procs[i], spups[i], marker=markers[i], label=\"total grid points={0}\".format(ntotal))\n", + "\n", + "# log x \n", + "#ax.set_xscale('log')\n", + "# log y\n", + "#ax.set_yscale('log')\n", + "# y axis title speed up\n", + "ax.set_ylabel(\"Speed up\")\n", + "# x axis title number of processes\n", + "ax.set_xlabel(\"Number of processes\")\n", + "\n", + "nprocs_total = np.unique(np.array(n_procs).flatten())\n", + "#speedup_total = np.unique(np.array(spups).flatten())\n", + "# set ticks\n", + "ax.set_xticks(nprocs_total)\n", + "#ax.set_yticks(speedup_total)\n", + "\n", + "# write perfect scaling\n", + "ax.plot(nprocs_total, nprocs_total, linestyle='dashed', color='black', label=\"perfect scaling\")\n", + "# 90% perfect scaling\n", + "ax.plot(nprocs_total, nprocs_total*0.9, linestyle='dashed', color='gray', label=\"90% perfect scaling\")\n", + "# 80% perfect scaling\n", + "ax.plot(nprocs_total, nprocs_total*0.8, linestyle=':', color='gray', label=\"80% perfect scaling\")\n", + "\n", + "# legend\n", + "ax.legend()\n", + "\n", + "# title\n", + "ax.set_title(\"Benchmark result on A64FX (Fugaku)\")\n", + "\n", + "# save figure\n", + "fig.savefig(\"tomoatt_bench_fugaku.png\", dpi=300)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13 (main, Dec 4 2022, 14:57:02) \n[GCC 12.2.0]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "1472887337ddd1717660a5ad84f7170e87aa3d39bd2f4b7d54c31e0901f516a9" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/solver_performance/speedup_200x200x200.png b/test/old_tests/solver_performance/speedup_200x200x200.png new file mode 100644 index 0000000000000000000000000000000000000000..f60c1a101a8635822913e5cf82103ee77a31d630 GIT binary patch literal 146719 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

Y`Rl-eI=?*u%wMe7u( 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

kK8XYtx<6)i!@4l^TXn}mgEB|TQErR+}mNI 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 DF_+Gi literal 0 HcmV?d00001 diff --git a/test/old_tests/solver_performance/test_screenshot.png b/test/old_tests/solver_performance/test_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fe78426e0292958978fabcc6635a62f6d17a0398 GIT binary patch literal 43942 zcmeEtXH-*L`zKzna#aLD=}l2Vx`5Q6Tm?b8AVmTs(mMeHgpOB4I!N!J(xikQLI?qr z-g{_CXi`H$Cv+zFz5jRC%&b|n=EHoL5AUbFv)0MZKF{+j&$G`-#A_Y3o7Xw6)6me| zRDY$SPeXHsI=wvh$8Xdj@aS?Lb-3gC@~!7{H#cVoD+^Bth%3!&3l9q;2OC(@ha^K9 zn!7aWD$fmkKpXh(#0OJ>bCg;C!KZv4@V>G@(oK8}p@rxD?{ZlZjBI*iuc2uY8P-n{ z)uH1tcHEw0&o4dTXJ+Wp@N4s0EgHHv5g{YgPp=n&-QwRKOwk34;{iVNWdjA>! z6Nmrc;6FV0j}H7t2mYf2|IvZ}=)iw;;6FO>|CbKPU7ihGA)lcqN?;XmQOpGyvyCSN zoGl0MEN;ThOxT)BJcu2RXUdmo-q*aKxlH4Bb*GPj!PrK#Fv7=YAoy)U+(sV4@9am+ z6K%rLK(;!svPzphe(hj+g#)-N#X<94DkZD-G7XK~)C$sQ29*Fx^Bou*~#aA)4g6`xsw@A5dAV%1eEcaa&TrIbe;1}Ooak(-XDV?HDBAa76H$vK74 z2wPb{UT*TzQQ>f?Mg$Hy7j~?QH&3%UI8Ya~{No)B&A=xp`LJF|c4EV;X50FV`W*v} zGi+GJ#k|tV;XbYG$XFv~;3?xaA^6}()~WOc$$O=HV&*JJj1LO$I6vR+z!K09{P`T3 zlKyu__W^0o99RS#a>aJruUNy1u>u|5sp=^!ax1 z$W8J_-3lv^vT1&DoQZc!JVGs}GRRUGVwKKUV~Aj|Z$lNp&yI#>PJWw}8i)a{lkaFW z%yW_)?Ho*u$t0ZQo}HHBG4~m#2rj|LQ;Dh>ICM>2<&bmTNb}LJ-A>)Q3a~j=H6q-L z41f@VPT&BC1U8qX3^y=!O<##iS83)%0?)^f4^nr3;V1i@8a*r%l8DN~ES7mw<;ItFmA;s=B(ep}HPDbG~G! zOV0pctz=5CO&guvOcyUCcOZlz7+)tB8+WIZxy0s+>WN;R=E@qN@J zyH0ViXtmFn$!zPs_czUep`4MncC(hVp0Xeh+j)!IeO;_$1;L5w#gOKj-4F-wptqNO z)R!>~!JZ?}Xa@9}bE7CoNVzMCi>D4S?rpWl@GNNe7_qd!k2wn&z|1&NHqFkC*T@3F z7fT}}xN$@QCgdPHGmjJLO`qleBe!@_7)52xa!hhe|JlVRFAoUa;B&G(JsN|#@isyW z*cXDH(1A9uRHZe7IJ>ZtY*~zxZ4*0 zW@PXl0RXEoH}~7j_SbD93_$&RLbJy?ezV%6C|f0t}}`tbn(pp<625+?mV^*PPuRLC#!9(BuS z=Ue+A@f$OvPxSb1?Dp%()?h==5+6takr``U9TB`2d#XkYX4_l^M@P%>OyL6&S|U1C_gZ7dlwdrXsc^%7m*M>lJO%34JT)7cMyiqi4iU(lwB zL9Fb7KSs+5Z=dg5gsh+RARyz=n%SuMm~7Wgc8UkbesXx%&lkiz3QujEU+(#_ddd=? zhtDL6nysyWWeds1h=Mv9MjUTM75Tbe%p1pDYzZ{)_kxw4DUi*7aa;!(kgCJwR{YOS znT$N9{)+{}hn55TLBYH2qq70qwSE*2C3y=8s%xE^?ZRbULFCp#VBf+EA{sJ_X%qkM z_>hVse^>?RR5m@HR^83y@B5238*4pmOYWOSKBFmWGx_pYy4&t?@`0Xs*4v%TeY|e) z*?v*;xu4U?m)s?Pe>E!I7nZOw$+)QlJqm#&ExvQuoic1|y=WXK1Kw#%*iRM_tEHwZ zpdxTAaL@W=u2ODoiMkz2Bfi!s`K7a*SxXfaCrs^_qx6V3`sBbAd2)8Ty+~5c0R7_l zP#ce{4|*x+;F3T>8@%FR+lX1iW=%K~b) zD!ZZnxU~rV)blIJD+l$X#v1=Cr&v{KE=zqKcl7k18g@rEZP$-d;ZBu?et1aUBH?EM z)dRL$DZFw5RQ2JmLz5QCT^)IOU*ooZTNm~{ftw2V-f(h?Diyv#)pGubshPiXG63$< zu=bHCI;G2^-ctT3NnE@iY;JnIdNxspXg)t(8+NB8-2jwI|30r{Y|N?@u-ODXj|$@? zh$X#bccjg~Ua<=NkE+<*#@Jlx;*J*lZl``1;1wssGHS{7#hdsDJ+ zqAoqw_86gWLF#9u#SwyCp#B%biKOEL6sjYx>EeJeKP;ehBB|a-tviseWmM5AhmeD* z)#~|=Dha=UJWA@R<9<|>)SjBn|7lADmY}NH5ASQ*e`l+>3m=0K8j}l`iACsrQpYOQ zDg(W|zE1RyJVC+yN$1(6y0Qo7r$tHt@*W5sjG20}$Qh$IN?x@rgM*3*Acg;nACgj| zS!AyL?{1aFdD^cpxKDBWwru$1?VL&I~ELHS}nCy=P>4eW9y^ zI3acvHr3PPv41d9mFDp8z`pq>kFx*Hk*hb$ZsZxu?^*J{u~l&VZ@eZyi77rbba~;$ z?n<-I*x=3+X^^#p!+`t*(T;D#6^1a1x&cR_mb*HPq@K=;4Ngr@C$EzVtRzPJ1}y){ zQ`*14K>Z=9f4~zhvOInw`iC4;k(R9@1J(>x6F%x~K0cz#E+J_5Amn6%!T{jg*$%7V zm(p>$^}Xelk+xM_1IpW=+k^-U2fqG92@< z95J3YHolO}FSCO=sBfu=`g*sOgZTJdAjgT&3uC?@Ysx4mAh-{=GcrCiadEVH;k`2F_VaxG zO0Ij6ieV{SCi#NK@bq$6h2A%y<_#xg#f6>Hxn5D=F9g{dC8a9XEu#2N=-#l^;%ZnXK#<`iglDKK?qz*el+JV)5@qdn;ZgBp{cXbJYa#(0!r z1XK0{er>Oe^(WFXpB!WoZAWW?YdAAWrCc!)5keFGF!f@+GoyIPmy7Vg{QUh%wi&U` zID&lHy0MBvHaV|Tm-lHb)Cq9EpYS#RElrnKF9#!=D)_FRF5Wizla1R=4I z6g~>{ha^Ee>^GxXAklgtrzHedBl_Umo@<3TU(9&!9s>mp0K1%qH5&j`B4Z6zAKui{ ze#oc6$#{RH?3>Zr&I?iKewTxuK)-YH0bgKzlQl^(u~Bp!65kzn?$8`KiTA5LLS9UC z!K0Z*nH(ZsE#ULjH@4(DrhcHuHIon5`(#5zjoSQXnZ*w#XROxz#Q6y7R@;=5uoFC{ z0((IgSNRpA7A#6IDavA9%7PO73d#^VStHXxBI1n(VC7|*{bJc}NggN4zLcr7_I9Fp z?T%9~xQxIW??fV*ahCSY<3^^Qy#tN>+wB@|nD#}$_7*QzVbi3%*46`oU`lU%X#?im z4jcqsZoU#Ddg;*n{`>8cqvOo%P}Fh^(U{=BLO#$rkp(~N-~EvbMAk7>hz#1LKXryF z;LoXbAa*~QGK*=h89iT^_p5;9D&pCvl+6z2mf6sFs+iOiz(%?hG2>BLwIv71A#%ChnCPjeBO>*-_R>!LUy zJ4QprQNZ;kfAb%9F31uefhU#GB%^%DcHMEU849g`ahGtk{-RzzoaBi1+015DZ=?_u zHsLT6_uFWqY;F*2QHl|Q(I4;?AMo9_%-$hHv2L~lX5TmzYKf_rYc;xqmWb=F?Nqhu8}8&Cxz9WmrS<3M>YbVM{@g7y#0 zNF;6ph&Xptx~(@0v|QLko}lYehw>!F;MLZagRGjfUlBexK1`F~e-`wZVY)0IBzBK*scL6wL)O};dS`BZ4c%P4hg}(Z&Jc$5QeWdkB z=I8T;y6DrS>TD1kn|FTBQ4GKr$%p{ETeVBfe0=<)#d->v%_xooI<&t#AD^fXazTwoNMufZAbf#kD{;*6AR2=CZ>-X6BV3{M(vzbh4R zi&0QxI!a%kXGml}$q>;Cj0!i_NpEwSd27yCe2lC>fYS^1g)$acMPCL*PILC=tL-bH#@)p1UBNFQ-Y19o=3?~!0_^AvzO*@WvN73f2HsAK z)?Jo?afGSeoCSNDLuwfXI_&Qkdw`s>S5>HVHrD<_E4%hZg=1cF%EAj1)PA8MznQsn zya(-!5~!a2!<#6v24p?zdYCM$w6KOs#E9Qexk3^=+<2bw(rKvxhtimp)QDo?)(UYN z1&Z>?Y_27bPajmR!sA?sUjem&_0B~)ennR+!+)88Q*^k1I@jjnyWP(4Uwii-A26{z zkv!iAh3fWtyxJ~_p?x!JscSr5k;K~g@zjuSAc8`O_`c&jHDJh0%DydbVYgkr0XA-P zd1SHD`oZPGXC51ApuTbXPL}w|2~}okiu3pVfyVjf%Fj^hNU{^NGpBt^I`XN$q_S{? zQEhcO+%#}}Rb155wd^TXWhPyarcwG*I|ZH*wktDH)Sg4kR)Y12NV}!M_x>-|JD{Ms zM(|}pIfeDC+TM0*Ct}uP8I9;~oaj42-w>`KDFRPzcc(i(9aWsKGMvvU4Q6(P@2UzA zBC!s9gi;msEu?~jP(jl0Hx(y%jDD+4X^fZ}qCru_L`Ap&VPBvUHbdWFtWvAjP&Vbk zM%)Rqa(P*s!uJaCh!LLrG0=0Buwb;HED&b?QYHVK{C0{3neY`kdRcA|YSO4bOCIlX zRmKyEHvs{PwOR{B9b4b~mc8fY3*#LZ=7;!{cg_d zXg$Xy$AeOdS?8ZQ%pA%#2_d8F$@z*{ZR3NrJnCNlY+z? zY0luili+PTQ(4zq2>8O0biO_e5_i~3D8y_TM>Zru#78UB9R8<(j}1yPc2}R~a}WM` zvdVYID5_9*eR>FK*cMqW zHah=#@pJWlEO)e<;kHuzSEp8Zk1BVhA#o)e?;WoIfgu^1-jB7hwRu@m1s(1~yrX9gkheZ)|Fiy;4Y61GTkntR znt>C?d^5%D`YZte=fV_#__GQt1GACm9Gx-^g!?|6bqCP$x}FOSnvoGmf~g&J?YpY3 zte>W4HfJe=@uvA2muI4?xJ$RZTr)&m{C&F?R3Zx11y*`*%yfya@rz>b%Llz;3%Zrf zr{k>u)mMu*rwM0=oS~K`4s!ZjNCTuz=?9QwoIQlerdC!pVkE-b&&B>@X$&@^{Md*+ z@N_S#U`F`syQt^oMm?*R&YZDtvB2)3J|p(0C}#wZwF@&+BQ$;ei$m!b?((US>==)R zw`S6-lO=k+A4DrS@H_{+k>izd;bWtfEazP!)M$jZ)f;m2M+ zo0>xd+1T*rR92gLHdD;s!l$tg2h@U@F(Eo)u*qpWNjBAb6%;_ie+AOZiYvj(r?u7D zkv0Mo_f342Ec`K9z0P91kDKZ{7lI8Rp8)02->OPq9qFRs4Qqp>o* zZY&IIO|5JEn0j&G@rl|yveu+Uo$g=udHCO-W!x4K>AQekkb-w-FBmQsheJ=>Su3LB zd(6GL;TT=5l9$4E`tW47yjndC!R*z~^*xWc#lCxd6oWn)Jv#v!343`;kpD6C-cA=zXj)bgs&K zzx}+OajdCcJsH6lq5z*Y>QF^1KUCa%-XRu^vtB@00VXOGGzVWfN(UG_?&S!80rNlI zC`P6o-hXg9-JbK{HRNeE1DVb=H<%qjnFo9P4MSbse-wYN)|Y`wyV2iNH0xdZj9UN2 zmrTpq`VO^jEvu+IK)RctEC3K6@DtGIk|ANdEa5QytOQ|(-33bxGv2!ZV&ne3ICGwi zDN|xLYo`2)*RskIR^IE&%0OidBWKVV4T$MB)!vqTL6|G5BHlAlUzixN-({nZv^j`! zRW?m@bV(W}Zm(zwf>k&CTk;hQ`S}(={SQ)r8o3&pUMIg>JyPGw#js zrO^(mdSm4U+8s*Gy#l<#f5i`P19Rlj7P45Sw-;l!ScRoBWI7QrIt(937S85$%C4PK z2jXj!IfD#aZ~ZG=vxa|rmPyn3@lN=VS%p+8jHQ}@RsM*`ULdynw0>>6(Z*eq{ii z>uPT)5k({-8QEjocI4r$Ir2Ai{KloC`#p5)HR1@}L(fXQNp}N#V-TVtrpdWIj!_lf z-#O6rM&m*-Yjj2>W_{(kRM-t0tdZ6H4;J@(X+-GqJg~gLL;fjG{?1#0xR)NH?^{{y z1Xw+!mFv8LJpRNs^upbBTm(#P&rMn(htMGgqc-_qBxmNp5za65NMtvC^l2_nML7?? z!8@r=q1&uTULc&gIf(isismZlGosEfitS_SE8j|rb&x;I9bz{OOE%&kzqyzsp(-B; zed5{ryccml1t9~B9*Gc)eXG;6cQXX%Q7+sdH)i5+J0~0<@7}u&k?4A=J-hxKms990 zU`u*6YIFo-m@ZK&wdN*G0^1s%XVc5D_+!0qbiZjf!{@J$P(>S6^{knj4iX08yWP=v zf0F^T(qpRq#AsOj)l;I5N?e(P&r1AE?59$?gNmZfcc03x0*qw^HD^*~%Sck5Q>naP z8eFQ(CuB>6LV9CtWQx`ZvtVtZ1(Qaw&Mn-GBt}9jVXXkNPYj`6_6LIS1NU7A&X0M*WLyZ7~(ELqxC1vET$;01!wpCT8bgt$*q>9wt7FO-G%DjY!YM=B9o0s zmz9A&gN2oNHCAJrg7zP|c#WWRLWHi~68w$r&pTJ4_fvH!KaT-!5BV3n$G_EuMK<8L+07o&i}E~=d z>9yU#TYXElHEEEWw#`h{SXNX~NgLdUazqnb5wpO8S9yR5$2IZIW4^55ADo~M@xhD5x!2zI`{x?Rqk)2O zFW=vGwmiKGR57`Bq9uVI#NG-fxOV)IYJ{X^Wb?%%c)I~uIOH{@{lXZ*B}T`c zZ(gzV%}ZG*b&8A0xTMN$^_OHq!TK-12XQRb;oqM#$FWwk$V$W^7-mY>+`Z;JT|5;> zIxIe!$y6E?!OL&PB*WShW8loPG7@6+>0;n=LB-BV1-spC_o{wpuUq>Xw%PbTSs8Ps z!A5tCVy~gv$iez}Yvx2O#|^cZBN6p0G@yIGKYkCvAo8+98`1R$Od|&I<>Z-!_M(_7v9Qn)zaxmY{qE(Yj9-v%7am*Y$+5!|SZ>9^`Ah0X7A=Okldh}L6 z=2XbF-B%E#IPSL+S)449V7i$F!55tc37mI5Yua<+XU>7S14uzwL@15zS}&s5h$IX z^6*mhUj0=a6QxtG=3&^y_wAEF_n^=(b>Fh~2s-V!wEVNaHl~v$wPx7 z4yxSaSW#;CD=GZr4J~Wc+Zwizg30;w`yFj;5)mUB2|MzK`#L;yiOJuA4<^F8_tkgW zUOaQ*5tb!%Xf$3|UaXQavTQZ3@DSsAV;&nG^|eY&r@|)er;oLz8J8p}>1MxkZ?n$S z{PXQ!Lgj;z=C-{nOs1KD)Tv|~zDE{6y01t{AAMG1GEujGy4|xr4|gJYp4X#VzEC52 zO=c1h^K(3M#{a_lHD1tbQ~-M8Ov=i%c! z`<9i<*f(u&l_V*o9?eAEL$M4{_@M+=W{F?t>0)GAsdI!!X6wX8n!*Y=B`zZ9_+ z&jKQ4unSS#KP|=ynsTuX4R=9D)Hwb0`Pt_4>$T&GYG?aPX8-MjHX&~mT&I4i=XsTA z>EwY6+ntL2?0y;CXiU)Tk`CH6C?7~lmX6K7`goE00;1H{46>LK-i$!7XV0unP+dn1 ztNKGnSFLpf_#M)AQ0PJq()!pVmo~b>ru%~vhU)tM)#ZXZ%Wn{_YzMKmfHp1ge z9^U{=4Pqa+C*>xNs(oHg&G&dM$ss|gmp__bFX*hA8k=<;V-@rkT*Oca849*x2s6;I z6)?Sh@nj_vv2y%l@MnAO;`)-IUAF>Qe0P?7w0OiGr<^*Y$iOOU9679|NB`6T%Bt?r{=tb>c{c~Sl?{el_0e@498R13AKfJ+==X`A6i^(j z42JIPEr!fd47$}7##Mv6Ussq@N9VTa!rU5bk#!2z)268ucrOVkcd|FCZD+3Z##eR| z2zA@<_yH$sMO^Bmr!sWu?M7XyA4ynOHgeZMy6wS;y?tIgPFri*Kvm$Tlw5+m^gNy6 z{0EKO1qdA`!^VYjJ@swe56kbRrBaWH#c)&Zma^Vmy<}x`@bB>WAKfWo^ycOK4dXRX z%mhJ~ZN(^p_|iA{#S)8eKxA8g*;`>OGpztca>WCZZM<-jj>Oue-zf4&ATB4UWd-7L zj%XFTkrJ;5XMBTo2JTkoQrveGe<&X5Q5$7GRB}#N?JN3VeN9ha4d;^xHY(Sbm5rf#|q^g?d^M$ zH@Q`~ZQBVGrS)?2M*EEm>r!s zS|&bEXL^Ek<&t5go*!>tT&Hm(P?5%Jz2p-tp#&n}8mjgYl0q(PPvUppE!#@tr6UCC z-|0kCHzyNu4P}}G?@@HBE$zjM=AfN^66t*5Q7Ce;>4agYRH}e!IlXy~+%Wvbgs(K) z%JI$vLy$AuJWCC(IGI!C)9fp#Fe+J*g4M7MBru5ovA+9b3%i1yZtCB?rpBLZGMh8r znZD2%LZZ{=N&qYDD+V6!fR>vlZglLfDUpg!47AQiDhWV=z<9yXtOwIiw5V`1V7o66 zp|8OXPxz!0BdMC8@=%rOO;(wvAn$9d*_1#(@H~5k`Vk87QFTw5!D*!bn7`|oIpe6|-1^t( ztg|)B+I$5*TTgwuevI&zY?ckSIfc^G*u~OZbrWMjla@dyJ;%q%+5IV1>LrN=Bh*G9 z6W!iR%J?J^QCx`Tmll!^5g>EGf6ABsEZz7-z6p2g%O5Uhgk!MnzGmv(r!wTQO-}8@x5~GpF_8`}(ugXfa=Euad215tC(|ipw1(B)7Ev5fTCjx7ly#p_n`!B1u(G1XDqMLK3yXkW~Ie%%p4;ih_sUXcS z&HvH0^^sM{ZKL8Rf&*`o)4t*iH4;3JUaFy%&2k2Aa*OU@1TNa1i5_VAnJOGa)DG``Vs76<9!Ha0hVC-jGyn zTxz55+LeYSl$qAg?9$zHfh_glrs&iQ+NMdR`Mo&IXyH!8#pgt<{C4SxjZ9`jCs26w zG2E8#8;5pweusZ9f5X&}dP#K313h&~Pc5%)&lnGT=UQI*48O+`JX{)2J;8iutJ zR0N83Zd>UWB;^;YGbM9egJ?79bV_q{EQaZ4UgTl`#CR^v(YDiVE-~BX6CNHOMs{}8 zro5r~xVgDhOv&2%I-_Sn%Ezmo_x`-~0KXqYbMwI}>#B~@^Oiq9KW6*$!|&HdpK@p` zC$5&4m#j@o3fD+VNwQG>m^Gexm7~1AkT$$lx9uhYZJ0T^J0Jd}C_Z=C!8PCvp!nod zUDSA=>9&EEs@+`ej}HS%j~*+$aq$9ltP|Q(Yh2nn+n=w!-%&w# z8}H^1v3}jUJWt!i=4MXzDlp47_#)`?Ufl^t40GPOFdI=dc^Qm8Ch7(Nerb0()NFrl zs%juiN}?Q!ot@dN(`2C3r!>Y29ot{W0$!uv7FbHYIup-(ry@k&i}dGnhm||9T)nDZ zXiKG zH$l=lCZQk#D(@AnM2H}jCjTqo9gf7?&4qS^**hTt*Q9QsZ@)2TZ^e;_2XyaJE)^er zH^5??*EN_D6dA7%b2n_z-boP8U(vYt+dKu7ohh+u>z~qb4MTsH{}sYT)OyI}*J=66 zwle?WNSE8=RXgAasChu)_U!9x*HB-a%gSY4_peyFN{%iRb~}fe@(YBBlu9K{Kk1ek zznN8D8)YaY6a86=?>g$oLdbU%W5-W7yWhQFTwY%azs7R3J05yA>TxxHtGC(Uy{;83S9L6#gyZ%^;O*~>+kBgNVoxe#1out@~k z_^K3a(KX-!)N|bRR%WC;oypj=A@ohLdYX-oFUFM(v_>o`1H7ZDd7%6G^ViLIapek8 zV@Ge@N>$Kx-b3 zKQvM|L$Y&8$=(}`6~#PAnhx0GeqH<_R) z-|M>lb%sgu0hK@Ep}dEnO`C?|8rSKih(~HY+KTWAgE2q9J4^*0*Lz>9tg-w4M!d^@ z;P;8iGuAZQT2sAL!%Tg9>MelHKW9sEcvh^=d9*go#(mThceluK+VQZ~D?KugQ@UO4 zb?MjPt7zvturOU1M?3!7_Ye!KqP$nQiHAHq5jGny7XGAnVN@%A8~&$sWZu0|{exfg zFE_h_eea&S@~8&0y<5LWb6G1sN3TDY*`t?ha?vKG+W@!J_xNZj%W(L!Z6X--V`g@4 zX}M*)&-gaPlSKYZcI~pZ=&vy#zakEX4QqNV>< z=j>{N^JbHxEBfiuTPe~?)~PQj7q%^H*6Z`*Xdh;7uc{jT%i?3B)CWJeRG$_^+h1IA zj?lkFU)v)zqt`C6&B+jP(Xim)ZJ%b# ztM{2I*0&{l8$1{*x^EItNfeJ)Qk&p&QOuPaC&yAPn$&Z)sJ`PZC(tYtU=kDx{k8}Y_TeucV{^k-}Ygx0kaov|vXvQ&Bsvtikx-BI3m}ot21mRVGkChVVcl#NpRyjm_e>58EvU8+CqauTAS5 zrf}YAHWGh3Y zn16>9%=UYvIojXrF|-Ul!wOrhk)VAJ6S8d{opwQ99=!44@gAnduws!DYuQwYN{2top+3Na*m%V+x>78aM9QvQ}T?0leUt6-KsV?+TA0uUOZKvOsP^-C=- zf6>snEqYy*;pN83Pu|M}7}-xn&n^`%sz9Zoom$yG0Lq*+0BYne#WBKFN!E@y<}X`^ zY?ZWWe$DVoFD@=wm>_r1N>MuThp%kCFy))^#4F{jA0?g9`jIUzC)-$ZS~a=tgKM3g zV1&SNhW^X=+MULhZ9yBoE4`_@i8d$Qwo&~VVc%_abj(Z^9IIcNah$jDg}B!lh$v58 zH>3U!qW7V86o5G@vuwdFgfq6EE7L@#m>7w+DvGGed4(e}f!XB(eMKemh93XMgU?92 zLMAUPj1nluK1TjJ`2Dm>U4~;LtIzu zuiScnNpc~pv_c=mZV0&aHz=~jH%T3|GN$xWo8tyBB-9EN1zUEkDf zpogDr;a4HI&}-#%i(qwgH0Mp*SQyL@=Y<)%J?7edmo8Ar&2)rfGe~E+7>;(Ras9M= zPN%EKG&pwKfj`VZvN_9{AB~u?;yMw1oJ|B)yoO5`Fb-1FUYRIRv6MS~Dq(W`cj z31+pJg zG?%TdGt2_B`viuZ(a$!eQ|Kwi3?Ml}+jMIMMUKfnmp3sk!YzDr+ys zk!;rK)Nvcqq7~U8)yV{DIcyR3QIqx=*M^~`q}1LRUNNSXLRXQ?lm41Xc=7!PY_!w7 zzg^!JZ(z5s@u}$b$dorr8+`MqW8?bIm^XcDt)B%FA-OLsN4&U6Y}wLVm~nBp3Zm+GdZ zDowOO?OFp`I<^AGOmmvOwUVC52=(g zOkPRc3@c}CaAEAKBx%fRB1v{@!zBuz?qiAijf zXMzvj6+H#k?mCAJFqYp=fOaf8PszFT6x`Eg*A&u;Y|9aNx~cJCnI9^Y;;CxO@{_xSfcvn@Jfyf1U_QaGYC2^l8;Eo}N_yCf36d`-YCSk>l-b37N3YKx%M^R2{XpPFFkz-tm&& z92x$x{^Q0B|BOt1dtZ}`xH09CB+9}hHFd|kLngEBEpl`QqZXf061n@i>T|l@0*QUR zEZt}P^YTD&D`%r|hm_{d@4lc_UyD+IR=&Yx_6q#Csg}~^)vQNq`l4mly(RMZT|X&= z3A$=4uU%C36tk>CJ+jzkXK?Aqr!k!{p-epNKvoc5IiMc;< z1Db0(1F}yZ8w%s{0CGw4PkhJQ%!b zF2410uHmnh>l4gDrYaTY!sK<4#AQ##?EqP^@t;Y8tIO&rhhEO_;a+rKE^Z5&-9s0g z@}ElHhJITP`H-Xx6ubq z9$MypTq!T(o2=1%mBB=Sa`h9td8hFBeU1p@Pa;$=xwZd*uzDTD{&@u~<70EH!DS6K z0v(OB!@gC$_#LS9U{zc_@n%Eubz=M~w=#D+H4-nfg0uQhC7k+C)w?&PQJzEG9NgM}1HHc?q(DtJtU$mv^iKJ$^0!_Lr*>4-%Ul^$ z)K}PDqosM|vrA)bJ!7;d9lwaygx4&EVD`^kN`G2fWeOKssV2%md!L95h?FAxd*w~A zHklI!PeH1Ebn?xTzR4UjTxed1X9%CeR$CkAN7XMpjg8^3mMla41Y#mFEQhtu^yhBp zj#2MBVm2-GR^TlnpTo^`e_IZEH9_v-vm`r$*NJSa26385D^{7$r@9- za9mmVW|I-%1U(u!Uf3DgApDqG6!5oO(H=0l2)R6XnQJDpi9Y|uX3r0D#}Ao`jM)DA z{=O4w*UUmIP^^o$R)_X-8^23kAEOK5Gt^RX;~Zx5PHM60WP9fjAMxQc)s%T8OXUA} ztGf_08)E#*(LYr=V@7lh^%GjKS)kq+al=0M=YM1Gt)rss!oJbLLIpuYX+cy#IwgmA z5F{j&Zlt@r29<6EX&4%$yJJ*JYRI7m2I*#~p=bDReBM~=JMUTNk8{p{-z*t#7IWXT z_qDISetTcmPz4)~g1qo@Qle(<%*pH~&DUm-CsvBKZ-y&kGcxHr->N)`wSE)kfS(Zv z&S~z{32v)34%qKh+3$Srq#Q9-t%zKxH_<2tQ}O6m^)7E3bOtw*J1Ntevr&i|q;gZj z<{w4KEdJ^HXq9`BnX2fm<}yV-Qak#Y^#*euYtGlvUr$C!33flvPP?>8)OVt0+H&he zUi@-g+`v~{X1n`mRT31e8%o)|6|<{F=3nKLL#u6&s;~8ZXD1W4IH`>CUju;Wb63-x z?d=UszUbY)Lvk7MtCgimx;d{E+zh#)-MqH$rq|xsQ06`ES0K&w^{tfvmLuAoGP>=l z*Y>)Rx&y7^C6b&q!lc?o6{03-DOO$fs^7*}qr6)OA`Sak!wj3~98PwncuYmZGyyRU zU?qJmBWj==yQYeKAS$p2-e|U#tqEN%m5*-umX3ThB=ux4#$d3^azI-X7TKtv+??0M zL~6!r&~rMG{?CV&E%)JGpJ~(6?85MBl8gr%6<$XRUmIKAPV(f0+bS-7hGlhs3uk&7 zCbMQV>7g&)96nVGgu3+|PeYLW4Nor^UhI zf?#q<+NXxC`<5X<1MX$fpubGW-HGp-p?JqZ)3u||jxe18|3AaG!>BqY3-hni>G}kq_pE#NeLC(2{P2pca_8hl9HrfeV%%7i*94v0*qeZoJGp-i< zGnU5A1(Z*IRUT$v^XiCP1~0#Wt|(a8Lo_pV6T@%Py{(Y1;|Ax{*~e#v|M~E?PN$1+ z&;bo;I@*HO+L;T_&K678XgT$mrt`l3JzcK`o8(dq;C)l)&R*hg>+<_-#V*`f^Dx@- zurIa?pTDQDZ1c`scGx85x7(XZ0=35f`oC)6d@JT^26F&q)HtF8M@5>IwfvB5SxZg*HnDr-{r52sE6j&m#^K9*;Q9KRJN}BscNCP{U2HY zxmq@f<_W-^$17*r)3xtg9{$AE)kGwsJveBJ5$Ph-5i(3}lcc<_*Uq9j%_OAC>Mc?k zElL-)%8nE8!$MsOXz6pT>#Bi+H>#@z1q5`<1ZC(TYi+4}@R+tkRhW~v85wK;roxP^ zep{Bnxwo6G%lBQiPS5Y=<;DTX*3a^-bNm&AIaPxJOcg3g2Yo+c@tSCx45sYy%gGz< zKFoBM)DT87?ONLl$2sp4WjuZTe&*l~iz$OsilLHu5G;_HI~rR+N5Ff^|#qDY# zTM9ht2^yktQ=QSfYDrqh(cgAwP2{Ll-k($(jiD7-pSqgI?+#>}4YJJ~MjT%r9B<8^ zWi1X24ni(RkTNobAu@$!8UW-@@Z!&$=6!L38;xd;S{-((Wx_-CF;IKD`}6>5ebFKg zcJ^#yNU@hWI)i8HSWO)}^nSePJb9FPi$9P&a%AKB0i5jdEKLZ?i@yl|%Tbnm$ZS+FBgXT*OTRoev(qIgSo44CChNr>k~B^y?HEXq?Q78Svm zalPQ$C3~-G`$aeVL2?^^$d=X(OdV9FD)$%ZBwDH2n0N8BL>u+&iqotZ+20!ZXoa#P z@+haFMbT(9XfJ-=CW?)Y`4+ufmG{eWyV{6;V*V9+vX?=MD4Y7&{_D+J^+8Cx(MQ)2j@O z0sZ_A4+)c7`!K)i-<2hzFP7^A*X~v9ln_^@hiR_0^6sngIN?e2c1JVs7HB8RIt(4j zsw>BUhoVfsYs=8rnK|ks*<*UQ@iJb0XIB47SzqE3XcN5L+BPp)v#+J<1b@4K`rOHw zwg4xZn-PNW)rlg|WH-}fL-J=7TWPD6={yOcL9QzmbmjgWjqFP8V2d;#4HpOz(Ih&I z{R*&v`RS(YhD0S-mIN0i%oa%5UCdvaUzHdZ3)M=}Z_lKwXVh4%wrhK%MF8r^aRe7yIXG?^3GxOK}d$ChWH4m%e|U&sl3G;s~xD%cLI^Y(SF@^>^S z(h|r04BG{@$pJ7g3ZoTYI4bv-CyWmB4!#0k5_)FRm@uxodhWEQEDl2*c>wi_`Q?*QF}O^HHNie|NSeNW0RdU`Mp z(48je?1m3l^Lc|z%`{_<_t>2M1g-6KfJN12OP0V#&6(Dbsnu6E`?F5ETW=y;cih*T zjdGdCf0#Fv`32-~GodkD&rifO2X5e zWwkQW#-FweYwlqY(PDv*JU*=2>Zx(js$QF>iD_eJbNJT~PW*TM@5hm4!A|Z9Ql>hy zMakBcM+$?kG`T922%2bnkpXSKGFP;$)!VoaYt{>=W*r|Wc2nMLjp;j7ZK#~Q%$x80 zFVh|v3&YO24+UgG+OZpJZN%r2kmIgHD1KKKKE8De^t@S>Nr<O4|h$OB?#-Q*yoGqohG{bO8feZc`Y2UsOT64Uke?~`Hbq*(awf(&*9h29 zQwAGRdF02{y?eRJkj@PROAAYWs7DAfZ;fgUMreJv5Jk`crH-Q1Cp|pu#e+wBLJ9@A!d%5@$hZ#S;6T}+g~P&-*YyTO92Qo{3v|*J+Bafmr%WSH>2G#c%xpr zhJJ>f^ZYyQ6K@CUMa9|JoQB6AMhRlZW?g})ghNC{tL@5V=vl-1FP(WY;h%IO6^=vwjh)~i2PeN{g0BnxH378uEWE#;ba*Pl4xBUZzvr=K#)6E^TUGu-P) ziy-JOn(4|9@1)e}oJ6Qco}W%me1jX7-VyTeo7KA!i6SyP>^3(h)UD zYkzr!hKY&V5b8W28Ogvf^e+y15QVV6zdLjiCOh};VBeKOo%!-swRt=Am)|$TB znlZh~sjRg(RCyZDz4QH-vs>}Or~}{rC(f7jYrWk;_)BU)D;IW75J^C1w5rsYTi5^mm7-m;NTHr4s5!VWW!4di2{d}G;C=PyOF0zs zc&j@j49_$GL}<3ZJdL}yObrI}=X07ON?kfS>1RiWC@TsIURp7&2DZb&Ni=S52u9OL z3)d>y;TYiL>0WH$WJ%w)+*EVWbbqe85Rq!NrsAS9$OS_!sGqH^PmHELm}A}^oF z2oLrzSq>9$A`OSDgsoMO3`VJ>GCaXjJ+~4d>AjRm!ioau1T+Qm+G27?+?78u=ho(z60`^Z;uI=~l?-cCuts_or3r+$dqRMv-Cx&LE zI+MA1*VI@Tm%0Z^)t$a?QkeTw?837dTHRZAMiFB%#&eCl+@EY8e#&O^H3T-n)p*P| z`@6TF9#iWgIb*gkC}v#4Zn>j57*g$V0(b7JpMfe%RkT+dxRnmUynB=PchgR0%Ke=+ zGBb)e*v3&_CN_}rbK8r(8cuH}@qr<7o^yGri;KdDE!|C`HWh;=?GJ4m_|GjH%yM^& zV}@+QlHNkU&xLlDRLLInT1r_&gyZ7A6@VBJeJ}ns7vE`KN5%?~KQW7Qay?+Y+Poh# zYZVjA_F3D4bf)AfHu_y;PfCqb@W*uVC*-tYZUH z2aQh*xYD9XA@6oSL2*N$l>`iD`z(FVT-z9M%1~o7kB5a{)uNW67^JD0XQ*j^)h6xn zXoZ+hJ(uB9`V+_t5qhbkgiv>=Slw!aUXrgIdjoHTdJDsBBBzvu_8au+Oskw%{in{f zBP`LNU{a%yvnR!ttTw45#yq%9zNfL}iHpICtRGsAJy%QtBw6R()!cqO;! zd^U2N7p*Z9{EKC&Lev&_yQTAuu?aSB0fl8uReQmd9-{gn5ssuuTsYG%f!IGBsp?HH zRxfg29WE9Q?&@{2T-#8^e1l#yLFs=mfz+30Qz)VH^|lcI6Lk9{KmQq5nysI02t)tl z@xx2=8ti%krh*psjmNSDlDh%f>X3<~%!J_d?%qtCGzGt6c2S&9^#d zHL9Pxk69e}mu^H1+UbRi9r`W>RWUyd?`o4tv(n6(NJl|6s z`)-_7I~jdPYg*X$^8@IH^ruB#-b&)(ZZ-e8ybI}VXWer<IC>8DO~g3KnF%^KE)0{ISlU>Qe|mQwz8@-r*UW}R+{tXwc4NH5XtX?n}T(Igm!=*rv z;M6nse7mmRGQTN~eKkBNOnUS89XyJ@UtE!ZW~x>^Ov)7V+d)JTqx`Z~>DA^}(o@p? z&M*;$L&Qo-)U5AnJopne64%Ci29OT6Pcz4DcoQy8Gz?q8AC!yKGnj^m;P5m$|Gmwb zh@d%ad^VCJ^rg)Y=8@R=yaAK6cTi8aIDwPqijO1rvd0O9d=o)Lsu;&2V~p1`y?VUQv*5(6K% z7la*#e&=d~>AtQi;w_fAKNslvmKI;<2}hQRA;|tIkb|A+yWGVwlk`6G#Ez^UY|Kt; z2k=5&`#wZ!qvM;gemU6|;!Bo?sMPCVf5T2`L@zte+DIA}$2#gD%gnO4nHN-hpM^c2 zyERtVp2mkwv64pd>Q&#~1$e)5Qu(*n(tc$jlPEVL)QmxY7-66Vdz4X%geAk@_NRwL zP%_Vv2V1l$TVC4#OriKhbZt2YMc%EE502Hmr3i*HK~4}6b%@*D!m5lEreJ?3nocp6 zz`F*!ndN2d<>dpJQ2uCT4ke(>(}w-C+pUtjQ8$AcTf--&v$eJ3aDahlMFgqaS0pih zC<}tNC7VM=#Wk#h-5r9%6O2YN{N=XQEPEE ze6XYF&O7o^8d|F0p6$f+Fua$5nymJ`H08v>eDE#y=MxNlF*#_;qYa15t}B78J%ATK zTxoRJ8f+U3eN4L-f};NF>6Sgzxh{7e1YqywYe8W`@0rxC+2d>Jr7hF}o08Xtd1s|j zZc5aArfNUIPMp;8QZb&`lS>DeDT_yjr4Dn_D6?KXIWo5jl^F_mNo#D3T?K=(1OfEYZR+H{J~D4oUJ2uR1-(yv^*QUM;kD#1c6Qt? zD>Qmz-73UaR$qP0s`X-oxr(dG7X6shl}%J~`;@QLALbB}XGul5f2=Ujos!ml)Bkq9 zJvp(VL5=#m00@)KTjLC{LO{Ir0U2pS0t<0Wkx)82;Z2DT0Cb=`e{a}F1c-aRW&OFM z*bPQ?EliEI1+ebtrZc+|Mb$EQHXx>xYX##%I`mF_3APvP${E5kw#~8N^SM0o7=oeh z+l7mtF)Q|uw{DF;j$mL=-_%uK@MfA<>tle(4{gr%r-ti_3dvyv z??)Mh``1flOejZ@vkYx+ELJtUuW!vM=x!Irla0!sxG;~uwm*MMF^}sd)xO9t=ItmT zCBArkPsjsId+hTpJ1hM(}wjqgr&%|@-RobS>)<1&fELY}SOM=lPwC&Z<46(3549Cet8iS-mL zT*8o4bN1}TLg|Oq3qgBKw?ILXpgXTnKRkWjAOTiQ4YL{63+AgwWH<0LsLy8TO(?>$ z8$09O6q`lBZTn?H2|4cLuA@=D%=x1H*T_r@)}jgUqSol#2S7ejzU()uI^o{#2kLfO z9qzqM>&TrctVD^U@l#iK5h*O$M8-CZ5JSvpSu1r0vp9Xq?`c z>4)Jzi@Cfo6rhaG^B>Q@Uz=BDKKNvHup4-E<-BaJvrVd6dcy}jy_dAAv`PjY>*K|9 zG#u7>e4xj70V;ZSIHQxh`I*c%@+8t+$&wrI%$ddUk7rl0P+80>)-0CuZN>DbaJzaG z1>ewo{T{9zwe5I>bzED$+*VJIODQ2d!s_t}TZ+lJ ztFa0~o6+e_uMGuMXJhj`f{r=EH4h}A1IR>|uCci2z4lz3X!LMeGC%2ar%@~5>{5?J zxf%J8?&4R9vx*6Bavm4l%##(SvNuTPM1@r7SvS6}Nw086Px7eWpZ_fU;k{~c0E^I@ zV>#cQ^9r-hVpk2G?F2^H_s_5|Dg}#bUz39ijpt-bH9spwXj%Mrbxu``4;d@>m!c>r z@sVUA)#mK=EaSuM*ynvCV9C{*aW z=}%c8-!=IttfnqBo}8j7VY!f4xnIsE+Rw(5;?AdE08AlL|K1yi#Sojt8{cZfb|tC$ zEtyc<-E(|48m>z17gjs93qY1NuIyAwIw47h(s`p(VY@4u*{V?Zd}Tk1=G<2q9jhagow@Z@ zW0wuQyIEH8&Zka(@!pYy&V_aCfO2HN#^K!{wR|h%Y@(x;%k0N-nXid|b-tW_u|JrT z66;bQU2}VhZD*0M$n#IdL^hrV=OYVS67sJhq!n}=^+M@hd9KaMd>~okYqDw#WIhd> zkHDSiNIE!YDe6hAMe(K3lNOE9MGilE z{(>)ZIBS?o()@eH=bw`1x6*GHFbfhSlTfg&Lr$E%cq9XUb9FcBGBOfI#fD100Nx|H z_`XzLy#DylZ_^)vTxLJM#0GsP31riG%dVVF@+c@<<1P(jhf%B$?-tEam=mAni+)+}5OAX2a`UMs)f=)uQj@bQdJN?o%+nfsW+Gv6#^FekoEcyB&_BiLL!uU8C*2tDOO) zpaTHVkR1D=%H7rub>k5ygT?TcT&uT@>L{aJ*_^X_aG}&_;^d2=f{P7&;-`_fS=xCp z^TV%7+Nq!aOw@q0mE|~RE$+uo(cEIYt969VQ+Hpdsj_+lz?RgEh1IJgm3RBdBF73A zU85FhObVIip3}bZ7ZhSAb|BiS@cQ%24)luVS_RFG52w}M$>`K|oXvk6CZG;gKvDbg zfP+*t5S+-j7aMs&Qt7uN<(}9G5eUYAD2T$>@4i1pHcJ#t;{0OSiYUyJf~Y*tj3f6u zjbjl>0-){H?s;{lePE(qv!W`DYW#*{Zldb)_DT-^o2psHIjYdY9rr6CE`kVIt3abq zz1QiNP?z#{d1ic$O6#l3A6SjcuLId0RHPNCnOA0&3aBTV`T7QO>MDBmgBV%xBwZA5 zuh);1Wd&yrcGW$t3H2rctEZsbA7}jEgvC|Lck%pb=gME^`NQ)^g@2_+o53WRcg((UZyNVJy!H+C#NRsHU9hMk_8pws_A&`X% z{^vRi#ixitxV0JeAN7pe5VXn3)dJ-MaifCpZ$)GpM?hw*GF!I(TYqF$yh9UTQ>`N1 z8QG`tOi1#}gAn%Nq*!)(FQ%98$O2y!e4;wnK=gKZ-C1%fTwHwN6iv3jeCYVuDEV!< z*HKR!8~~MEdu6d-%?{SLEK}Y%ly|=CHR9twB1`mqJ@Lj$()_?CMy`%4pZP_cJLy+j z=E>za7b_m4)KPv>42$7OLI{%1kudEJM{(>JF^B@NP0wD8@r3=Ze*2(Bx8f3OaJYo)>3QNE z|7-n$Vr$W&S#uEPe(1Y8oNRCwGR;}hiYNQLSx))(r!U+uObaSy2`|expG5q4{M>;b zP8J!V*mcgFG|D!s`W6ZtOX77(mDUkv5cloh6yG&;h^LwymU zkam7g)n87!=9BCUhP9}g!{l>ses54$kRAQXjaga7B*rA72NW^h4Ad9(oQm{{^kgwpruu&*u4T=E+uhL799!djw$*#L5U^Ps=`pC5tClBw-{qMY;;7B=LC z@@0I>lLZi#3G|~iYmyjxVhc((QD^G&7x^-V{NTt{VEqVzL|8+-*#Qt-uKZcwK7*5x zq%h9U=(X3hH@5P%csL%P_M)b};#~^P{`??**;AiWk=p&(+d*Ry5tGWCI6h?$M8PE3 z(ugbqkT3;-E!k9}vJ{`onJ4ZecvlU~_Q-}Gf=No(qHXV9t;7usISCiikqQEZ%_g97 zL1rAhf1WFn*k!m4{Vua>#{tB92bWzVL;h!{7#R%bUqg_ye6WEXgfr2Q>BGn0xgAg2iPqr*H`$)q26GM0j6KPc`XxaCVO#Tbn z!Jl5^;CE^1<#ZfyLR(q}_upTEZ+N-bmwS7o(I3Yah{-3I@nf zBCHesl{$FUpxhAD5(rJ+j!fs|z?4R#TYfi#90RlpDiuDs%^XVSEpkg64}ujss(14a z9E(>SH@}X~7zvK7kHv&#{09k;t(bFt^I=2(gN?DB4gp#_u|^mf7@1ilH00sSd=sd& ziH`9JnLO#Su8XI8`5d0&9T-}S=-cdD?CV>co!#Ev9=N>RM*Cf0mzHYA#txU_YZlzP z^i0wOHa7B-#NEV-fjF^kkU5nVux3DLIFZKVRgN<{m%me@74zaoFEaaClf#Q^V`xQbXr|bUZS$u`ps)g3#!9go}Be zB>Wlza2=F16OKr=5_ru{ZXq&6@^>K;fBpil8zQqdn5bK#!)PIS2NBNhOCM<40)+=i zb;m$XfdCwpmXQI}$%Nc3hDU&D%w5;Umw+O1l;sx2yJo}^K|MI+e=-QeF0XC=%-^hu zU&Z3pxv$)7J43b#lc+KIZnC}cPJ6La_tjt`pVg_sPPg6coMv+C#*gvP{6zvxC}A=u z+fc)dfwcIeu|2hPp+`v^#4$BOVDG#ml^w4mwErpA0ft>Iso||lN!i@CW%t(0fLxx+ zBo)$?uj%XYZDG1msGqz28OB3j;*@zo_EgtZ>R(e#y0TJ_Z)I=Y>rS@Q%~^rNHNJ3_ z3Lss|is1o+8W$Bf%>13Xq5AJPeXmffG5$wb*tx$LP%ixFia)iQbWezVz} z9gdfQ3-geJ!*$M$$6KHh@%F0~*!l9=aX*yEv8(Dj&6=6+3dssezg;)Ofj7$m2pW=x zCUd^6rgr5_gfklLP)3`nM?-7q*uDFIt?_RBt?_n>4d|2|AMVVpAzLB{Trl2Cm#w&( z%qw##QK`<9KMKEpu(_-wdNYAh*~yM*C&W>BaK}-CvL0f;Ci8VGZ4svf(3jE#Ah-{+ zW3_M*w4l(iAmHoV@0|wzEjd81{=~GaRtRu#Y{E`g)_Y zI2e)C!>exLXSa|c&=4KHWhg%FrtfcY;%Q#sY+<)Q*RV@RHwp8qU-MQu{JFk4PdjKX za-RBo(an(K2%OBiuOhjwNSFigiA_r017_ip99Jju7b$q4ZjO$rje)PHGlz}`!L=P+ zn3aW*qzCv$S_?`39u!7L8$JJ7{>=9rJ|?r-jus3p63#X>SRl$kRm027F8CD@|JzE`}P5< zc+8!x!DZ|n2=uB7C%b)?xFy2w@rZp<^1$)nMwsr1JrVJ}j%*X6WbQn}V!%?bhg^FJ z&F`S+siC|-Q@;JP_Ehs=IIZ#Cs8(29vggR3+n`22+x`Z2|8joRwdwWT9yDs>8c3mW z!gJL7?;~?3c95jZ`1^oQkRqKMpLC<6-Q$%OdTJ||Ux&gWmOx|7PPC+k5 zJW!A{@)Fwr>BS_4w<1T0Qj3Na{r(Nm4@H5O#G1PH(z3LMJh)!L=+#Ok3MDr@E|Qeh zgd`Bi>e?M9zxCNFwS0?#-LuHJfoiA!!!R%zps=1~htfb;rRfQD0R6{i+4jL~FCCf^ z%v*$aS1TbDiA6ykj%qP&&pwu0^nW6@~2`WgFc9fmjm;Fmu- zW}Yy>@#Faegh2BZ##a+N=wovBXJPd)ByC6_k$BY_lfH36=XZsai%=j6r~D31cohHUrS2(jW z1K;Z|(?(}cqxR97xK5){D^3t&4j~imznqova8&L}NX>Njn$GRVx-mCllyqmdQhm=S}8!K&v6kCm!A zm36PK(aejaWi}-%q zVrjMxvJl({eG=5W2~Zy$5pKf7j_6;mX8K9gk}8YsJwu{1oETwP)bzxReU;{+Ine8i z!mrK!fBu4_51He-HZ3C|ZdXj0P~|hi%neEZ;K1FxVyNnM-9mW zjl+IxS2~x`?UAV83E$9!8uzK*%TA{M`@Ybps_-wdkBt1>lr}yXH5vx`nzQU(rLOFE&&mUYpT_ z<`Cn9Of=I@v_jUK3<*9dT%4-YG4rxAa(7=H>F@!}rIo-pvb9;hCacuM-j*({XuIs> zzg%>;i|_+f{(EOva-x-PB7_@?CNP}s`**kt&X1RhjoWA1*P4s-K7|Sj@Fx;i+uc3< zh_`HXIh}bWJ<0>(n)1J-!);v7vH^QXth5WPQVV(&;Z40lCh0ES6l*uTwQpq`IkV>V z-=lwUKjB>8w zP2#!xMM9oA0Qd6QImREyi8H$*#go7n2Ds?S!G7*x1Bwp!2RNzO|FEHl z$-?ZEKp?yc^*@uoC>-w-7|?y?Dc@A&H=0qEw;^ccwWnu+Y!SaWa|mWvef*d=(wtj_ z^Vt7j%$8lRYA>F{AL9Jj;(v0OT;(hTO@~$IRW$u-t!1n`= z`7C$-#+I*I0JnL4tL_bV$9Eoh-@|hGzucqtAYa(^g97Y77f!R-81(TLU{0z<#DpT+ z4Mczev*Z%ab^WU=l<*rBLOA}L`xfNY3IB%ajyK1*wC$e=G6I~wl7IWTb;DfV?Vj>~ zmD-%U=#VDn+dpk6Dejy9E`-^6*SlADK%+o@sS%GVN@MhSe1P#C9ldmA9aG7FSvqyl z-D}f|Pv=^8u9eew1(@eOfDGP%gbPTteaI1K$xZ&8nAAU-4(OLa<6s*;-Ibz3lx0rx z=fC2R&4XQJczhGI0howy8Fspc;*iwZ@nv5OMs|LJ(2>cHZ!?XE8Ay3LpDg6@Cm z^{~JS3Waj8!x`8G={XH|**OLn*wo6VW}BnfEyX0!%nO6#ySo6Ka$ki(g_J)>c`Sq3z#zW@q#u7g1%z^FC&f z@(F97awdiN`FWikFUP6iM;OgtLOxi8NJX3X8rFlBjT3IbrvqhjH`sQtG?7Qf%@5 zm$;IGUU-Jxo&V|)z^NnU8kO*BGgMzMb$U*ut=#wyZSAD`fJ8y>)w&P*E==8NYIM}L z4Fw%=xB3mA)-rqyX)&(xK+OU;7CZjAd+792BbToS8xB#(oHt&1vRHW(tpK$K0?H7m9jN~7oK~s?x6^f@TDlE$ zx`CU>FoT~>OD~~T59XrsIq6`RX_>fa?o^2f_jw})4ChPLGdSD5NrLG~M5lDx66L?0 zlK8lzn#<>SwzJw2jqi9@)(NYY_+kckfgXNtW!B2JEqtbHrEKu>3J&m`*lCvobO5f# z*y`dcPBo=ML9QJGfBZe*INtK*61@-?jmpqGNWocll>e@2;1tFSn{o zBH3DElDQA9p6;OAS1n}*U^9pLm|wfg^2OrVynRL4!1eA8-Z1&^6%>P_Tm{CDJGg+) z(}_>diwpYHyHwT-uT3SI8%ZM`rev11VY(-JtzHO6G?&YNM~AxE9yS9yFF-@)3Ys$D zUgRrM2o8CWu=+qf&X6bn9HR>*E;#Vjx+y^m23}J@!BrQ#$|Gt_YF;9_cqOLggVU zbZb*xGtUV;?Zn-H<{tfP0@mU?K`zH-F?8&laL67iK>Tu7x1`^tptmCb(Mogl6lBt8 zcyoQ8H-4HU!C~#&S|#%kb@5A>sXS(@0ZgZ`a#nfgUtMiDWcW?-T0-7TVh~G-W>iwV zuL}{!`Gn&K1y;`8EYXO=KR+;ATSYJLjtkvESi>`-x^m;2x59eWB>lQ9?L8E_UJ)GD z1$5LzVS@Y*daj-k_LBd6=^;A{K;6vlU@=UYIP}$|a*XmO@ovT7kUB8H=7|^e^BCG% z;qwSN@3%&MH7>JJ78}A=&OTZvtO7D~@I&O`pYwb4 zh_#%9O>AA)S;}0Ss-Y}qPQJ^&c2)<$BSgycUBh;PfZh~|@unp_)K?i-4O1x*qHDX7 zFWC`=RIgp+jMyq?J=$b_>(XMv^0tc2#k}AEBjDqYae!cONa9^vHfV;xU)louP@r~n zqH|)8CB*=CMtPuw!NLwo%g;7EqGYzYCfxwya+;SS0qBSbKz1WpnVvNubj`Jy6Z*jY zIJiA_(r4^jSw^w}4u$u9DJL;o4yDRosTSZ2A7AgE4pCEuy7PdHK^4Vvs8k zM}7N3MVUV^IN5mJTm%Q~nz{RB7<1W%<(sMtQw=Xf*U~TDtfW%E6%%UldqQmfJM9|KyF72bzu26cE(%hX*zDc2}n% zbU>eB_uLJo>fq?u$SGLZtGkkuq?7M^-RP>YTpF3qnDz7JeUYRiiBDk$Oa7 z^&Uh*OQOVLeh^?!U#}+vAS>e7g%Hf!i!=DwX3o1Lh+?=YOLoaMKkHg`%_IHgqx*p*$@O9@low|;BQIxSs+6OxEKxZ>7S4wmu84(q_ABI z<}GTe87~5D>)JAsddviE17imh-vvAEIJ}}aty!TA{_wv^w>co)`R|LS>?R%fko)*) z><*Cf8Fy?z$Kl(tj3V_!a*KKYlYbr#*JN}=c(RZv)8&eJkD7HNS7|8>xuwRfeE^-6u+jwNilybxR+i@8)|6>$eR%!K zI``eX8Z^vB{O&IRQa(u?kD|twuY~S6?cm$x;6!;-c2u-IlqiYP4qCJO4&N21!65yI zKh>asVg5aES|ffHkq7iI{`;~A0}Jx+r79lY-{!zTfOq2t&^-D2rEvS!$G;b#p$6pY|6YA60xA@LuR#C%110cK5SK07g!K^&5D;{`TZMm> z46y)i8J`Z=O>pGT>TKc1+|B~r{0azyK_CgdK+XpKBq0j`ak<}Z-7naHvB4;yF#uwaUe*bZUq8dO3RRW{m~?S8F!lff7om62QP; zb;nzTNZyGt&^`&e+)SH;qJ^U|e^4wR*1aG#(~zUS=J2{}UYi3jcI&9Qgth=)%3D&V zx~qWjENP|JFe#t-R0DJXUBhibp!bo_?xreM=(x?+&(mqcFbgj_xWv4#7GkdUdx+^u zb;x9kC{yTnovI;t>P1MQLtFhB3VAXDbfyNqx>f%7zkwt} znCIHy{6+6j`?goQi@Edh$|NULOk7aNu9R&MHLazi4do>a2t`3mwoda5(u!tb4d;t1 zVczm(n_w?@M|afaX@KUW0o(R&=8^q1tEl`k{01=8eN~5AWhH8IjKtbaA^;7#w7#P?y_N5`*C1+gXzg!P$+~@kYo%a84k^)TN|69@fKM(wW zufF~d4gU`fuX*7A$?E-7&;dU6=Z??X&Ll2g{OSaa(!UzID!CG~nr6dwT^)$yCa;eC zJr7)&tbUFQuKDBWu<`R3#}`{RKs>yA>7RMIZHPlKnVge>KtH}+8`e*{Hcm#nunVB6 z<<+Gj8h|#{A&8@(%%-n-G07@@;}bR;d}5;;0pbZVNpxEz*tmo zTw8YgGJ$ztPlyK48}#aU7cADdiK07ANeL8v`O>!U`EyI{qk8o%#6*4sVq!wak=5F+ z&RSjGfgFvPvBqe&=(RNI*=@DCl}t<+?-=V>hBuDSJ!g6Kz4YG0FA_KK;!@7A++4vA zd5jYo(@!qCw!B1#gyvn$4VZXVJ8A~z&B<7NPn5)VsH37bB-KUiew}hJ9aH+j$I%lA zySwzITG}<9R*0dB*7bIL+NXk!5*O}eTH0ghX?UOXgMB{XO}*BK^lIX^s12!vUH=@3 zls7L;(1koKn0G>a7Y%-0cD7wbcX2Fj2;WhLEfw!C9SdLetJ*j29#EIJT-uB&(Y>F5 z1$i}KB5XLGirLC;b#R`}P!^_N7Mb7VJoP4s^2$A?;720_T#Q~9Ry&)yVKznI?xJ?} z@jy91s-)89{AYr|tY<$RIfu@1P))nrgjW(73o(7517s)S^=k(|bO`Kpf5?H2MIL(^ zLVkpvufWionPF9n)V4a%Y5P+$;s@xn>W7kEUK@DmOu;3zaxK{Eu30{Vo7+~}>++Ja zEzQw}xt1FsDIopxaZ=3?R@DwM5zZ(t(>K&bf-maUe}+I?m*76+?B%|gI)RGIjS5Xz z-R}1n;%b(|NO!)={G>I9smlGVn3ty0;0r&PyPAV-=@`rRAU8Z7={(=crF)YpfeWR&=xemV4&mh=L>#*ezB8Z ztn3O^>WpcM1*uo!!U^)`HPi0s`=Eyau2)E8Jdu89Aq?$v(Ut^xAINGVcSxf`N59S5?ZUkdrv&<_`5bifVMJkO z%Hh2D8BDInZ@aTs22pAt;xaL2GcmDSw-ze7G&6XUSPXKU!h{>bG?23p(g$W5_#NJh zk4beNpuX1b)crah`$21w(>5_k$i<}iteZa|zsyWeRX-T; zUvzmjq1?T~$}2F^mc@U*d^_emoA8Hb$i9R^R=XJ9B{>)lW9lZY6(|H&4-090x?&*e zx-F24syS(-rpaYvTl*QE#jGlzVkZ|HC+Zqyv+WHnmPrV~#Y$o@-(fEkZeQ~50`!7b=;PHr{HKlcnYi=!&jJ@Z zLLhs8P86{*=(19Sr;=J#)r@HmGDS9$wPQqE{G5Km{BA$F{9KP^05t=(mQY!3t6pX% zf9uOeZZk862r^CV88k!(oW^Y(V{~ZX$9vN9QORtjZ*vpj6FKX5F^~38-)X#yzb)lQ&ebpc~;j@ zI{#kWK6AtZD%O-|I8W*CpQCN2Z6&9#f7q`&iI~8!Zcyip7(@)WcvQH+!TSZeXoHsW z`uBE|2#%7f$@Q<9xMdPR1X1o|F%zX_ewM4M9!fCI4ESTJ$(7oE>jB^84FXO<8{8LZ zm$f#?9~`Mn4Ap+gRZGoqmKON<^ibK>r{ofv8(d~+2vc4A=(mVhD+{_~?1W1yyu>c} zU#=d*mWfzdHG$To-7)2-=c8t9?AttwsA zQN__ybVFNfZE1t5)_Pi1dsDR?OQtW@+l#Ohdkas9 zReXKC%Sm$xXEMi4S9Wtt5B`01b4NK5H zwonVDB|$YA-y2sYD)cK-Hl;W2kqY%Q{cUZ<^QO@~|9N8uy*Nb!nO1=+2)mxb7VYS6*a0FdDJ41f*vSWvJ zUL&D4Gn*1DY=c_chfdEP6uhl(^OJyY5HO?UGxM%h!Ae_2wdL zgIevbf^og`UM!j=p^=|O-hMlBpQu`Z7duXRaFO4gj_nm0!4|TEwmfLOF@%wI{3hp7 z4HRUX3tOoj;_O%*E6Khcl_+IKI|@bL?a1{dYXyBWYdx54Zs5ZKZxFbOU?9?QJjyI+@A~LuyptBkeI@^Khz0_+e~6qCy40}c*}GVAT7lbW%YxR;jCs_e zt4f-uFO;;WEito2(vcuzE7-mZUQTQ5P(yXv&nEXT7kIvl2A%R#lm#`{*7UaS_r~D4 z-j?H0=icatOgVhm?77(9*B4(8;gi=MB}EYIf@L)%_0utEDB{}WRulA`7wBO zUeP#R>8_Vv&mxmPcz=#A8Bz{HQ!t3~f=AVc=XC@%xs>ggs`TIi)gwoaAeHh((*q!K zR}Ix&tug>8fP7!2@i>x;hyI}WGXJ3Rgut(det;K*u#-p|^V|sRZ7odsk+xeeitA0b z{bKS1IKktcemLVH;Zu;l9YwdGCu0pGg$|H)`J`g6$oOc~H0$2M4Bb7S?9z!b{HBi< zila)%#66L_?xA6DzO1s4ecJP6`}5y92gqFbvDly@A=t69!Bp!&xoqTyI`VC1Q}V2gYY%<9+Fv(o~y!vSRJZS!$Ll zhCJtPXmME zf{j*ZMqiNKk=2fuJT<(1y9{7C_GXf*E9-jraHrdc^b#!K%(-Tt7t$m18QTB0lHHLHQsL73;y%*9BiV{(CU^;JcwV zy8wN)Z}(T)*uF-5TM)`MBd*$=u+D@@`>II>Lhk=T3jZ5!{JRhO??cT$heYiWhD<+< zTqYJ=)KdXF_m1o@>xgfUT`FckhOjwXb?F0ebNy?e<;uos`cIHHwSUw~!K(gg?fz?D z_}?nU3&){MDU7oe2*ZWf6tqh+35AwMdiVR$BB_2LlI#Y0zm?opeO;W(IL+Qj(~6Qc z{yC^=+}q|O66+J10%j6Fer__$75#evE0TEDjlqZ!W2$C} zsR$!zFI;G;a?Jglgfl?}@2acU9vWfNpqpGLol`BX^29ZQP=lj|O_GKpFN{-n*JDq_ zr-e*x8ETJkUl^h|2Y0RP9T8+{_uPR4%d&J%o9Bo{gX|a@&Ewps&j7nQTIMxm#&1Um z{T!mGPsEwZfrgpSTJ>0G9q;E{z-WaT%RrE6F?vmGUK7?3m<=W>YKg~Fse`S)uaX_L z_}2yQKV1Cw*O(acjSzmIr0l^k4HKR72_RBHDCEBlw|BiVWZ=PMzUSeEOVvE0e%SsB z5Hfl9JPBy|I)1kUX#HU={NIjg|8&%-UdlS3{MYVe8mj-RuJu^liFh&sSo-(7dgwha zs!hqhA!0B!zZM)oT?!{BsiZ7~0jW+}8l}TmSvlo4)mu^kD5KiCz#b-@wwcuH1Z-wl zoVsKCyqSK;_cru3dkm@66z=TizuWgzGP9>b-+-i@oh?1S{i;ulR?zCtfP4#i%-afz zo&S3Xm(h@&uCWj=72#GwB08<4I1z=%9i6fFVdgz8n9wC$;$`G(iAkPP)ofLy>WrME zsnyM15`o~0&)81#8gSO(Gl4FRuEv91pP!w6$bw9?Zy2YZ^#`FO#n1d@lC3w}f)z?% zo3IPWM#qX5>c2Zj8XRKcd+Qb$ajGKn8_TlLqp;jO%O#Sk5u)q>FWA6E_SVCvYUsd` zz*JSP>)k%M8!wZH%ZuD3yEM|9GI5+UZ<<&@O!E$IlawiUbq3CNi7OcJQiAfqX=#@d{y zR?<7FXL!iUl*X3%q-q2O2lok~8iGNB@>^EmEj7swv()KE1;=Y4l*_gEAno=u!GIIl zMB_IZZAUHy&ZUf3Tz=-+n`S~%R(30{*{nMJk!SL}zWb~dBHCx5oHd^!5o9j&Tb%QC zmW(lfN6u`Ku{;^CYDDtf0H*(4trj>!j}Lk1O=#DhuYgke<`2;7(49;A1t#5ER?8pt zqc^Kd1I+l~@P$ko9F-{_G0#5v@hWdQ*w?wHmnSoolr;(bz@n;#wzNy{A~EHDzg zip*OJtiR9RUU~8^S&!7=IGB?kf6YlIWa~+!V)Jv!gPLo5fa8t%eTCTE=q{yKPqnr* zMC>L@Xu(jZfcf{rayy4Zd!Eo!ov$lanUF4kX-La}{TwAR2yYw0OMrBBD^>pb8d@#Y zGXp__{~9?la9%26h}bw#nGt-2Uk4N>Db#+C@2}bXhbv9Lz=8Obq1jquq;F%4AdS=f z>y%Xz8Hv&S=}rp9KrnJ)Ax7;-knRKlosZmI3)5YGLq8w^Uacdep6jWQ$egD z&C<-`%uN5=P2h+RL#QF`O%z}t5RH)%VyeQ3fm;MupD&CyJ&f3IF#>s!%{Lqz%FE6r z7~?05zFZ5`l03rSZ4=bt_sCtn_~L%B0*_vSpXQ~uHe1$*YF~$vQ-+9vE6mD5ixSft zhoY+L7Dh)+ZH`6?@INv2U3=sd^K&w@|4mu7nypQ${Hd!V!rAM~$=3MI(b3Fh{bzl| zGVklB5?oh$hVp#XlgY=sCUw>04RP@`Tw33&-(9XKD`ly8$fw{nQC}UD@@at! zS=wT|UM3{IOiTo?5ki3Uu&u4~2W;wiYXPEWrUT6YYQ8S@6befZxW_$c@(girXFz|h zSw@DGlE(H_ftcr-{OHyI2s!sNFCIk4HIZNZPUL0(s;QmZ)NoFITeWk^RWn-k zttp3>r>Nt1zCDhav%huY7l@>Uj4i4OTg3A|ivOStWI{>hFcj)+^{Q+7Bqf={F}1RC z@xqC{6g_uBF*9M}wm{3%6N9wQ_*yW)1u=LAGT~v+Af?ITCeCe}9mJiMA#d;0Z#R59 zuT>8$p+96-)^l2&IL~8W{D~@T2XZ1&1ve#@dj|$tq8cPd(Z-$xWYs9eA;5on;6uK^ z6OXzn7gMJXQj-or&g(NSzW_-yr~gcxF1vcj(j~I?g@$!?K~5#a^Xoi)lz_v9t#;cg zJec*r$J#EE53XOoInFN(M%EYqaRTB$v8(@c8RbW198mNBFhJ%VY5D)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#plot\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10,10))\n", + "plt.subplot(1,2,1)\n", + "plt.imshow(data_in[:,25,:], origin='lower', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Input')\n", + "plt.subplot(1,2,2)\n", + "plt.imshow(data_out[:,25,:], origin='lower', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Output')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/test_cg_smooth/smooth_test.h b/test/old_tests/test_cg_smooth/smooth_test.h new file mode 100644 index 0000000..7828f12 --- /dev/null +++ b/test/old_tests/test_cg_smooth/smooth_test.h @@ -0,0 +1,200 @@ +#ifndef SMOOTH_H +#define SMOOTH_H + +#include +#include "../../include/config.h" +#include "../../include/utils.h" + + +void calc_inversed_laplacian(CUSTOMREAL* d, CUSTOMREAL* Ap, + const int i, const int j, const int k, + const CUSTOMREAL lr, const CUSTOMREAL lt, const CUSTOMREAL lp, + const CUSTOMREAL dr, const CUSTOMREAL dt, const CUSTOMREAL dp) { + // calculate inversed laplacian operator + CUSTOMREAL termx = _0_CR, termy = _0_CR, termz = _0_CR; + + if (i==0) { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i+1,j,k)])); + } else if (i==loc_I-1) { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i-1,j,k)])); + } else { + termx = dp*lp/3.0 * (1/(lp*dp)*(d[I2V(i,j,k)]) - lp/(dp*dp*dp)*(-2.0*d[I2V(i,j,k)]+d[I2V(i-1,j,k)]+d[I2V(i+1,j,k)])); + } + + if (j==0) { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i,j+1,k)])); + } else if (j==loc_J-1) { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i,j-1,k)])); + } else { + termy = dt*lt/3.0 * (1/(lt*dt)*(d[I2V(i,j,k)]) - lt/(dt*dt*dt)*(-2.0*d[I2V(i,j,k)]+d[I2V(i,j-1,k)]+d[I2V(i,j+1,k)])); + } + + if (k==0) { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i,j,k+1)])); + } else if (k==loc_K-1) { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+2*d[I2V(i,j,k-1)])); + } else { + termz = dr*lr/3.0 * (1/(lr*dr)*(d[I2V(i,j,k)]) - lr/(dr*dr*dr)*(-2.0*d[I2V(i,j,k)]+d[I2V(i,j,k-1)]+d[I2V(i,j,k+1)])); + } + + Ap[I2V(i,j,k)] = termx+termy+termz; +} + + +void CG_smooth(CUSTOMREAL* arr_in, CUSTOMREAL* arr_out, CUSTOMREAL lr, CUSTOMREAL lt, CUSTOMREAL lp) { + // arr: array to be smoothed + // lr: smooth length on r + // lt: smooth length on theta + // lp: smooth length on phi + + // arrays : + // x_array model + // g_array gradient + // d_array descent direction + // Ap stiffness scalar (laplacian) + // pAp = d_array*Ap + // rr = g_array * g_array (dot product) + + const int max_iter_cg = 1000; + const CUSTOMREAL xtol = 0.001; + const bool use_scaling = true; + + CUSTOMREAL dr=1, dt=100, dp=100; + + // allocate memory + CUSTOMREAL* x_array = new CUSTOMREAL[loc_I*loc_J*loc_K]; + CUSTOMREAL* r_array = new CUSTOMREAL[loc_I*loc_J*loc_K]; + CUSTOMREAL* p_array = new CUSTOMREAL[loc_I*loc_J*loc_K]; + CUSTOMREAL* Ap = new CUSTOMREAL[loc_I*loc_J*loc_K]; + CUSTOMREAL pAp=_0_CR, rr_0=_0_CR, rr=_0_CR, rr_new=_0_CR, aa=_0_CR, bb=_0_CR, tmp=_0_CR; + + CUSTOMREAL scaling_A=_1_CR, scaling_coeff = _1_CR; + + if (use_scaling) { + // calculate scaling factor + //scaling_A = std::sqrt(_1_CR / (_8_CR * PI * lr * lt * lp)); + // scaling coefficient for gradient + scaling_coeff = find_absmax(arr_in, loc_I*loc_J*loc_K); + //tmp = scaling_coeff; + //allreduce_cr_single_max(tmp, scaling_coeff); + //if (scaling_coeff == _0_CR) + if (isZero(scaling_coeff)) + scaling_coeff = _1_CR; + } + // std out scaling factors + //if (myrank == 0) { + std::cout << "scaling_A = " << scaling_A << std::endl; + std::cout << "scaling_coeff = " << scaling_coeff << std::endl; + //} + + + // array initialization + for (int i=0; i +#include "smooth_test.h" +#include "../../include/config.h" + + +void out_file(CUSTOMREAL* arr, std::string fname){ + // output initial and final grid in file + std::ofstream out_file; + out_file.open(fname); + for (int k=0; k" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGzCAYAAAC7ErTFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABG9klEQVR4nO3de3hU1b3/8c/MZGYSkIRLIQEJGG9cFJCCImLrjZZa8fHCUUuxUou2tXgB6tPT9CcFaQvaVkXPQRCLUNuD8UrVnipFKlCPIIrlPKIVL2CJyMUbBAJJJrP37w81x5FkfWeycxvyfj3PPDqz9tp7zZ49w8pa+7u+Id/3fQEAAHwq3NoNAAAAbQudAwAAkILOAQAASEHnAAAApKBzAAAAUtA5AAAAKegcAACAFHQOAABACjoHAAAgBZ0DoJWsWrVKoVBIq1atau2mAEAKOgdAFnnttdc0c+ZMvfPOO63dFACHMToHQBZ57bXXdPPNN9M5ANCs6BwAhynf93Xw4MHWbgaALETnAEjTI488olAopNWrVx9Sds899ygUCmnTpk2SpNdff13/9m//pq5duyo3N1fDhw/XE088Eej4S5Ys0SWXXCJJOuussxQKhVLuWTjqqKM0duxYLV++XMOHD1deXp7uuecevfPOOwqFQlqyZMkh+wyFQpo5c2bKa9u3b9f3vvc9FRYWKh6P64QTTtB9990XqO0AsktOazcAyBbnnXeejjjiCD300EM644wzUsoefPBBnXDCCTrxxBP16quvatSoUTryyCP105/+VB07dtRDDz2kCy+8UI8++qguuuiiRh3/q1/9qq6//nrddddd+tnPfqYBAwZIUt1/JWnz5s0aP368fvCDH+jqq69Wv379MjrGrl27dOqppyoUCunaa69V9+7d9dRTT2nSpEmqqKjQlClTGtV2AFnGB5C28ePH+z169PBra2vrXtuxY4cfDof9WbNm+b7v++ecc44/aNAgv6qqqm4bz/P80047zT/uuOPqXnv22Wd9Sf6zzz6b9vEffvjhBuv07dvXl+Q//fTTKa9v3brVl+QvXrz4kDqS/BkzZtQ9nzRpkt+zZ0//gw8+SNnuW9/6ll9QUOAfOHAg7bYCyF5MKwAZuOyyy7R79+6U8MNHHnlEnufpsssu00cffaS//e1vuvTSS7Vv3z598MEH+uCDD/Thhx9qzJgxevPNN7V9+/Zma19JSYnGjBnTqLq+7+vRRx/V+eefL9/369r+wQcfaMyYMdq7d69efvnlJm4xgLaIaQUgA9/4xjdUUFCgBx98UOecc46kT6YUTjrpJB1//PFav369fN/X9OnTNX369Hr3sXv3bh155JHN0r6SkpJG133//fe1Z88eLVy4UAsXLqx3m927dzd6/wCyB50DIAPxeFwXXnihli1bprvvvlu7du3S//zP/2j27NmSJM/zJEk33nhjg3/BH3vssc3Wvry8vENeC4VC9W6bTCZTnn/W9ssvv1wTJ06st87gwYMDthBANqBzAGTosssu0+9//3utXLlS//znP+X7vi677DJJ0tFHHy1JikajGj16dJMfu6F/6F26dOkiSdqzZ0/K6//6179Snnfv3l2dOnVSMplslrYDyB7ccwBkaPTo0eratasefPBBPfjggzrllFPqhvN79OihM888U/fcc4927NhxSN33338/0LE7duwo6dB/6F3y8/P1pS99SWvWrEl5/e677055HolENG7cOD366KN1IZmfF7TtALIHIwdAhqLRqC6++GKVlZWpsrJSv/3tb1PK582bp9NPP12DBg3S1VdfraOPPlq7du3S2rVr9e677+p///d/G33sk046SZFIRLfeeqv27t2reDyus88+Wz169HDWu+qqq3TLLbfoqquu0vDhw7VmzRq98cYbh2x3yy236Nlnn9WIESN09dVXa+DAgfroo4/08ssv65lnntFHH33U6LYDyCKtGywBZKcVK1b4kvxQKOSXl5cfUv7222/7V1xxhV9UVORHo1H/yCOP9MeOHes/8sgjdds0JpTR933/3nvv9Y8++mg/Eomk1O/bt69/3nnn1VvnwIED/qRJk/yCggK/U6dO/qWXXurv3r37kFBG3/f9Xbt2+ZMnT/aLi4v9aDTqFxUV+eecc46/cOHCjNoJIHuFfN/3W7d7AgAA2hLuOQAAACm45wBoAw4ePKi9e/c6t+natatisVgLtQhAe0bnAGgDHnzwQV155ZXObZ599lmdeeaZLdMgAO0a9xwAbcCOHTv06quvOrcZNmxY3ZoFANCc6BwAAIAU3JAIAABStLl7DjzP03vvvadOnTo1aqlYAED74fu+9u3bp169eikcbr6/d6uqqlRTUxN4P7FYTLm5uU3QoubV5joH7733noqLi1u7GQCA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6bnPX7Xj/Nd47uu+1mib52XPX7StqT3dkEjnAACANLSnew6YVgAAACkYOQAAIA1MKwAAgBTtaVqBzgEAAGnwA44cZFPngHsOAABACkYOAABIgy87+6lVP1vQOahPyP0RWimXrVh4z7GOgSQlow3vIBwz1gnINdYJsNYhsFIa19a6y61vjpFy2VrHQHH3+/Nz3fW9uPuS9xznXrI/O3ONi2ZN2WxcV0ase1Wt+9wdTLrL9ybznOV7wh2c5eY6BoaqsPvajAZMuVzlu6/dPcY6Bns89/vf57nP375kboNl1mdjffbmcHcWDYc3J08hhVghEQAAtEeMHAAAkAaiFQAAQArPDynUTtY5YFoBAIA2avv27br88svVrVs35eXladCgQXrppZca3H7Hjh369re/reOPP17hcFhTpkxp1HHpHAAAkAbfD/7IxMcff6xRo0YpGo3qqaee0muvvabbbrtNXbp0abBOdXW1unfvrptuuklDhgxp9HtlWgEAgDS09D0Ht956q4qLi7V48eK610pKSpx1jjrqKN15552SpPvuuy/zRn6KzkE9zKged0STjOypSkbdB/DiDQ/oeHnunYc8d9c0bIUqGimPQ7XucDCza2yFgVopl61QxQ7uUMdkrvvD8+JWmKnx2QUMdQySstlKu5uodb/3g0Yo477ahkPpJOnjREdneW7ICIM1VEXc7evgu1M+R4xgxaQxkGqlrLZCET9MHuEs/7jWff5c5/9Arfu6r0m6P/tk0vrRcxcjMxUVFSnP4/G44vFDQ2GfeOIJjRkzRpdccolWr16tI488Uj/60Y909dVXN3sbmVYAACANn40cBHlIUnFxsQoKCuoec+bMqfd4W7Zs0fz583Xcccdp+fLluuaaa3T99dfr97//fbO/V0YOAABIQ1NFK5SXlys/P7/u9fpGDSTJ8zwNHz5cs2fPliQNHTpUmzZt0oIFCzRx4sRGtyMdjBwAAJCGprohMT8/P+XRUOegZ8+eGjhwYMprAwYM0LZt25r7rdI5AACgLRo1apQ2b96c8tobb7yhvn37NvuxmVYAACANn/z1HyRaIbPtp06dqtNOO02zZ8/WpZdeqvXr12vhwoVauHBh3TalpaXavn277r///rrXNm7cKEnav3+/3n//fW3cuFGxWOyQUQgXOgcAAKShpUMZTz75ZC1btkylpaWaNWuWSkpK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", + "text/plain": [ + "

" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# final model\n", + "fpath_final_model = './OUTPUT_FILES/final_model.h5'\n", + "fpath_true_model = \"./test_model_true.h5\"\n", + "\n", + "import h5py\n", + "\n", + "# read vel, xi, eta dataset \n", + "with h5py.File(fpath_final_model, 'r') as f:\n", + " vel = f['vel'][:]\n", + " xi = f['xi'][:]\n", + " eta = f['eta'][:]\n", + " #zeta = f['zeta'][:]\n", + "\n", + "# read true model\n", + "with h5py.File(fpath_true_model, 'r') as f:\n", + " vel_true = f['vel'][:]\n", + " xi_true = f['xi'][:]\n", + " eta_true = f['eta'][:]\n", + " #zeta_true = f['zeta'][:]\n", + "# plot\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# plot vel\n", + "plt.figure()\n", + "plt.imshow(vel[5,:,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel')\n", + "\n", + "# plot xi\n", + "#plt.figure()\n", + "#plt.imshow(xi[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('xi')\n", + "#\n", + "## plot eta\n", + "#plt.figure()\n", + "#plt.imshow(eta[:,:,10], origin='lower', aspect='auto')\n", + "#plt.colorbar()\n", + "#plt.title('eta')\n", + "\n", + "# plot vel_true\n", + "plt.figure()\n", + "plt.imshow(vel_true[5,:,:], origin='lower', aspect='auto')\n", + "plt.colorbar()\n", + "plt.title('vel_true')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "vscode": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/update_input_file/convert_param_file_2to3.py b/test/old_tests/update_input_file/convert_param_file_2to3.py new file mode 100644 index 0000000..51a82d6 --- /dev/null +++ b/test/old_tests/update_input_file/convert_param_file_2to3.py @@ -0,0 +1,181 @@ +import argparse +from ruamel.yaml import YAML +from contextlib import suppress + +def map_value_to_bool(params_in, target_key, orig_key=None): + """ + Map an integer value to a boolean and update the target key in params_in. + + Parameters: + params_in (dict): The input dictionary. + target_key (str): The key whose value needs to be mapped to a boolean. + + Returns: + None + """ + if orig_key is None: + orig_key = target_key + print('key name {} is changed to {}'.format(orig_key, target_key)) + + value = params_in.get(orig_key, None) + if value is not None: + params_in[target_key] = bool(value) + print('value {} type is changed from int to bool'.format(target_key)) + + # remove the old key + if orig_key != target_key: + params_in.pop(orig_key, None) + + +def move_value(params_out, params_in): + try: + params_out = params_in + except KeyError: + print('Cannot move value from {} to {}'.format(params_in, params_out)) + + +if __name__ == '__main__': + # parse the argument for the input file + parser = argparse.ArgumentParser(description='Convert a parameter file from version 2 to version 3') + parser.add_argument('-i', '--input', help='Input file name', required=True) + + args = parser.parse_args() + infile = args.input + + # path to the v3 model file + v3_model_file = './params_model_v3.yaml' + + yaml = YAML() + + # read the input file + try: + with open(infile, 'r') as f: + str_in = f.read() + params_in = yaml.load(str_in) + + except IOError: + raise ValueError('Cannot read the input file') + + # read the v3 model file + try: + with open(v3_model_file, 'r') as f: + str_v3 = f.read() + params_v3 = yaml.load(str_v3) + except IOError: + raise ValueError('Cannot read the v3 model file') + + # check the version of the input file + if params_in['version'] != 2: + raise ValueError('The input file is not version 2') + + # change version to 3 + params_v3['version'] = 3 + + # copy the values in the input file to the output file + # + # domain section + # + params_v3['domain'] = params_in['domain'] + + # + # source section + # + params_v3['source'] = params_in['source'] + map_value_to_bool(params_v3['source'], 'swap_src_rec') + + # + # model section + # + params_v3['model'] = params_in['model'] + + # + # parallel section + # + params_v3['parallel'] = params_in['parallel'] + + # change parallel->use_gpu from 0,1 to false,true + map_value_to_bool(params_v3['parallel'], 'use_gpu') + + # + # output_setting section + # + move_value(params_v3['output_setting']['output_dir'],params_in['inversion']['output_dir']) + + map_value_to_bool(params_v3['output_setting'], 'output_source_field', 'is_output_source_field') + map_value_to_bool(params_v3['output_setting'], 'output_model_dat', 'is_output_model_dat') + map_value_to_bool(params_v3['output_setting'], 'output_final_model', 'is_output_final_model') + map_value_to_bool(params_v3['output_setting'], 'output_in_process', 'is_output_in_process') + map_value_to_bool(params_v3['output_setting'], 'single_precision_output', 'is_single_precision_output') + + # remove the old key 'output_setting'->'is_verbose_output' + params_v3['output_setting'].pop('is_verbose_output', None) + + move_value(params_v3['output_setting']['output_file_format'], params_in['calculation']['output_file_format']) + + # + # run_mode section + # + move_value(params_v3['run_mode'], params_in['inversion']['run_mode']) + + # + # model_update section + # + move_value(params_v3['model_update']['max_iterations'], params_in['inversion']['max_iterations_inv']) + move_value(params_v3['model_update']['optim_method'], params_in['inversion']['optim_method']) + move_value(params_v3['model_update']['step_length'], params_in['inversion']['step_size']) + move_value(params_v3['model_update']['optim_method_0']['step_length_decay'], params_in['inversion']['step_size_decay']) + move_value(params_v3['model_update']['optim_method_0']['step_length_sc'], params_in['inversion']['step_size_sc']) + move_value(params_v3['model_update']['optim_method_1_2']['max_sub_iterations'], params_in['inversion']['max_sub_iterations']) + move_value(params_v3['model_update']['optim_method_1_2']['regularization_weight'], params_in['inversion']['regularization_weight']) + move_value(params_v3['model_update']['smoothing']['smooth_method'], params_in['inversion']['smooth_method']) + move_value(params_v3['model_update']['smoothing']['l_smooth_rtp'], params_in['inversion']['l_smooth_rtp']) + move_value(params_v3['model_update']['n_inversion_grid'], params_in['inversion']['n_inversion_grid']) + with suppress(KeyError) : move_value(params_v3['model_update']['type_invgrid_dep'], params_in['inversion']['type_dep_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['type_invgrid_lat'], params_in['inversion']['type_lat_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['type_invgrid_lon'], params_in['inversion']['type_lon_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['n_inv_dep_lat_lon'], params_in['inversion']['n_inv_dep_lat_lon']) + with suppress(KeyError) : move_value(params_v3['model_update']['min_max_dep_inv'], params_in['inversion']['min_max_dep_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['min_max_lat_inv'], params_in['inversion']['min_max_lat_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['min_max_lon_inv'], params_in['inversion']['min_max_lon_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['dep_inv'], params_in['inversion']['dep_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['lat_inv'], params_in['inversion']['lat_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['lon_inv'], params_in['inversion']['lon_inv']) + with suppress(KeyError) : move_value(params_v3['model_update']['sta_correction_file'], params_in['inversion']['sta_correction_file']) + with suppress(KeyError) : move_value(params_v3['model_update']['update_slowness'], params_in['inv_strategy']['is_inv_slowness']) + with suppress(KeyError) : move_value(params_v3['model_update']['update_azi_ani'], params_in['inv_strategy']['is_inv_azi_ani']) + with suppress(KeyError) : move_value(params_v3['model_update']['update_rad_ani'], params_in['inv_strategy']['is_inv_rad_ani']) + map_value_to_bool(params_v3['model_update'], 'update_slowness') + map_value_to_bool(params_v3['model_update'], 'update_azi_ani') + map_value_to_bool(params_v3['model_update'], 'update_rad_ani') + + with suppress(KeyError) : move_value(params_v3['model_update']['depth_taper'], params_in['inv_strategy']['kernel_taper']) + with suppress(KeyError) : move_value(params_v3['model_update']['use_sta_correction'], params_in['inv_strategy']['is_sta_correction']) + map_value_to_bool(params_v3['model_update'], 'use_sta_correction') + + + # + # relocation section + # + # replocation section is completely new in v3, so we don't need to move any value + + # + # inversion_strategy section + # + # inversion_strategy section is completely new in v3, so we don't need to move any value + + # + # calculation section + # + move_value(params_v3['calculation'], params_in['calculation']) + + + # write the output file with adding .v3 to the file name + outfile = infile + '.v3.yaml' + with open(outfile, 'w') as f: + yaml.dump(params_v3, f) + + + + + + diff --git a/test/old_tests/update_input_file/data_post_process.py b/test/old_tests/update_input_file/data_post_process.py new file mode 100644 index 0000000..c267e47 --- /dev/null +++ b/test/old_tests/update_input_file/data_post_process.py @@ -0,0 +1,71 @@ +# This script shows how to recompose the output data for further analysis +# As the result data is collectively written out by each process, the data is composed on subgrid basis. +# the data needs to be reindexed and reassembled to a global grid. + +import numpy as np +import sys + +sys.path.append("../../utils/") +from tomoatt_data_retrieval import get_data_from_h5 + + +# +# plot calculated travel time field + +# number of grids +nx = 50 +ny = 50 +nz = 10 + +# number of subgrid +ndiv_x = 2 +ndiv_y = 2 +ndiv_z = 1 + +# read data +_src_id = 0 +_inv_id = 0 + +# filling 0 for digit +inv_id = str(_inv_id).zfill(4) +src_id = str(_src_id).zfill(4) + +# file name +#fname_data = "OUTPUT_FILES/T_res_inv_{}_src_{}.dat".format(inv_id, src_id) +fname_data = "OUTPUT_FILES/out_data_sim_{}.h5".format(_src_id) +# path for grid data +fname_grid = "OUTPUT_FILES/out_data_grid.h5" +# name dataset to be read +dataset_name = "/Data/fun_inv_{}".format(inv_id) + +data, r, t, p = get_data_from_h5(fname_data, fname_grid, dataset_name, nz, ny, nx, ndiv_z, ndiv_y, ndiv_x, verbose=True) + +# plot +import matplotlib.pyplot as plt + +fig, axs = plt.subplots(3, 1, figsize=(15, 5)) + +#axs[0].imshow(data[5,:,:], cmap='jet', interpolation='bilinear') +ir_slice=5 +axs[0].pcolormesh(p[ir_slice,0,:], t[ir_slice,:,0], data[ir_slice,:,:], shading='auto') +axs[0].set_title('lon-lat') +axs[0].set_xlabel('longitude') +axs[0].set_ylabel('latitude') +axs[0].set_aspect(1) + +it_slice=15 +axs[1].pcolormesh(p[0,it_slice,:], r[:,it_slice,0], data[:,it_slice,:], shading='auto') +axs[1].set_title('r-lon') +axs[1].set_xlabel('longitude') +axs[1].set_ylabel('latitude') +axs[1].set_aspect(10) + +ip_slice=15 +axs[2].pcolormesh(t[0,:,ip_slice], r[:,0,ip_slice], data[:,:,ip_slice], shading='auto') +axs[2].set_title('r-lat') +axs[2].set_xlabel('longitude') +axs[2].set_ylabel('latitude') +axs[2].set_aspect(10) + +plt.tight_layout() +plt.show() \ No newline at end of file diff --git a/test/old_tests/update_input_file/input_params.yml b/test/old_tests/update_input_file/input_params.yml new file mode 100644 index 0000000..d7bb5a3 --- /dev/null +++ b/test/old_tests/update_input_file/input_params.yml @@ -0,0 +1,49 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'OUTPUT_FILES/src_rec_file_forward.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + optim_method : 1 # optimization method. 0 : "grad_descent", 1 : "halve-stepping", 2 : "lbfgs", + max_iterations_inv : 3 # maximum number of inversion iterations + step_size : 0.001 # step size for inversion + + # parameters for multiparametric inversion + n_inversion_grid : 5 # number of inversion grid sets + n_inv_dep_lat_lon : [5,10,10] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 10.0] # depth in km with R = 6371.0 + min_max_lat_inv : [37.7,42.3] # latitude in degree + min_max_lon_inv : [22.7,27.3] # longitude in degree + + # parameter for halving-stepping or lbfgs + max_sub_iterations : 10 # maximum number of sub-iterations + regularization_weight : 100.0 # regularization weight + #l_smooth_rtp : [10,10,10] # + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,1,1] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 500 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + diff --git a/test/old_tests/update_input_file/input_params_flexible_inv_grid.yml b/test/old_tests/update_input_file/input_params_flexible_inv_grid.yml new file mode 100644 index 0000000..6dc3a6b --- /dev/null +++ b/test/old_tests/update_input_file/input_params_flexible_inv_grid.yml @@ -0,0 +1,56 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'OUTPUT_FILES/src_rec_file_forward.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_path : './test_model_init.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 1 # 0 for forward simulation only, 1 for inversion + max_iterations_inv : 20 # maximum number of inversion iterations + step_size : 0.03 # step size for inversion + step_size_decay : 0.7 # if objective function increase, step size -> step size * step_size_decay. default: 0.9 + + #output_dir : './OUTPUT_FILES_inversion_asc' # default: "./OUTPUT_FILES/" + + # parameters for multiparametric inversion + n_inversion_grid : 5 # number of inversion grid sets + n_inv_dep_lat_lon : [5,10,10] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 10.0] # depth in km with R = 6371.0 + min_max_lat_inv : [37.7,42.3] # latitude in degree + min_max_lon_inv : [22.7,27.3] # longitude in degree + + + type_dep_inv : 1 # 0: uniform inversion grid (above), 1: flexible grid, manually designed (following) + dep_inv : [-15,-10,-5,0,5,10,15] + type_lat_inv : 0 # 0: uniform inversion grid (above), 1: flexible grid, manually designed (following) + lat_inv : [] + type_lon_inv : 0 # 0: uniform inversion grid (above), 1: flexible grid, manually designed (following) + lon_inv : [] + + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [2,2,2] # number of subdomains + nproc_sub : 1 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 200 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + output_file_format : 0 # 0: hdf5, 1: ascii + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + #is_output_in_process : 0 # output the model file in process or not. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/update_input_file/input_params_pre.yml b/test/old_tests/update_input_file/input_params_pre.yml new file mode 100644 index 0000000..0d73cc1 --- /dev/null +++ b/test/old_tests/update_input_file/input_params_pre.yml @@ -0,0 +1,34 @@ +version : 2 + +domain : + min_max_dep : [-10.0, 10.0] # depth in km + min_max_lat : [37.7,42.3] # latitude in degree + min_max_lon : [22.7,27.3] # longitude in degree + n_rtp : [10,50,50] # number of nodes + +source : + src_rec_file : 'src_rec_test.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 1 # swap source and receiver (1: yes, 0: no) + +model : + init_model_path : './test_model_true.h5' # path to initial model file (ignored if init_model_type is '1d_*') + +inversion : + run_mode : 0 # 0 for forward simulation only, 1 for inversion + n_inversion_grid : 1 + +parallel : + n_sims : 1 # number of simultaneous run + ndiv_rtp : [1,1,1] # number of subdomains + nproc_sub : 2 # number of subprocess used for each subdomain + +calculation : + convergence_tolerance : 1e-4 + max_iterations : 500 + stencil_order : 3 # 1 or 3 + sweep_type : 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + +output_setting : + is_output_source_field : 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_verbose_output : 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_model_dat : 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 diff --git a/test/old_tests/update_input_file/input_params_ver3.yml b/test/old_tests/update_input_file/input_params_ver3.yml new file mode 100644 index 0000000..74f2724 --- /dev/null +++ b/test/old_tests/update_input_file/input_params_ver3.yml @@ -0,0 +1,182 @@ +version : 3 # the third version of input parameters + +################################################# +# computational domian # +################################################# +domain : # computational domain for forward simulation and inversion + min_max_dep : [-10.0, 50.0] # depth in km + min_max_lat : [34.5,40.5] # latitude in degree + min_max_lon : [34.5,40.5] # longitude in degree + n_rtp : [61,61,61] # number of nodes for forward modeling. 'ntp' represents dep,lat,lon + + +################################################# +# traveltime data file path # +################################################# +source : + src_rec_file : 'src_rec.dat' # source receiver file (if found, src_dep_lat_lon is ignored) + swap_src_rec : 0 # swap source and receiver (1: yes, 0: no) + + +################################################# +# initial model file path # +################################################# +model : + init_model_path : 'model_init_N61_61_61.h5' # path to initial model file (ignored if init_model_type is '1d_*') + + +################################################# +# parallel setting for HPC # +################################################# +parallel : + n_sims : 5 # number of simultaneous run: (highest parallel efficiency) parallel the source, usually less than Number of sources over 4 + ndiv_rtp : [1,1,1] # number of subdomains in depth, latitude, longitude: (moderate parallel efficiency) use domain decomposition to parallel the computational of traveltime field of each source + nproc_sub : 1 # number of subprocess used for each subdomain (low parallel efficiency, usually set 1) + use_gpu: 0 # 1 if use gpu (EXPERIMENTAL) + +############################################ +# output file setting # +############################################ +output_setting : + output_dir : 'progrma_test/2-local_image/OUTPUT_FILES_abs_single' # default: "./OUTPUT_FILES/" + is_output_source_field : no # output the calculated field of all sources default: yes + is_output_model_dat : yes # output model_parameters_inv_0000.dat (txt format) or not (high I/O cost). default: no + is_output_final_model: yes # output merged final model or not. default: yes + is_output_in_process: yes # output model at each inv iteration or not. default: yes + is_single_precision_output: no # output results in single precision or not. default: no + verbose_output_level : 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + + +################################################# +# inversion or forward modeling # +################################################# +run_mode : 1 # 0 for forward simulation only, 1 for inversion and location + + +################################################### +# model update parameters setting # +################################################### +model_update : # update model parameters (when run_mode : 1) + yes_or_no : yes # 'yes' for updating model parameters; 'no' for not updating model paramters (no need to set parameters in this section); + + # -------------- model_update_strategy ----------------- + max_iterations : 5 # maximum number of iterations for model update + + optim_method: 0 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + optim_method_0: # for gradient descent method + step_length : 0.01 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + + optim_method_1_2: # for halve-stepping or lbfgs method + max_sub_iterations: 20 # maximum number of each sub-iteration + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + regularization_weight: 0.5 # weight value for regularization (lbfgs mode only) + + + # -------------- multigrid model parameterization ----------------- + n_inversion_grid : 5 # number of inversion grid sets + # flexible inversion grid (if type_*_inv : 1) + type_dep_inv : 1 # 0: use to generate uniform inversion grid for depth, 1: use to generate flexible inversion grid for depth + dep_inv : [-7.0, -3.0, 0.0, 3.0, 7.0, 12.0, 18.0, 25.0, 33.0, 42.0, 52.0, 63.0] + type_lat_inv : 0 # 0: use to generate uniform inversion grid for latitude, 1: use to generate flexible inversion grid for latitude + lat_inv : [0.0, 1.0] + type_lon_inv : 0 # 0: use to generate uniform inversion grid for longitude, 1: use to generate flexible inversion grid for longitude + lon_inv : [0.0, 1.0] + # uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon : [10,10,10] # number of the base inversion grid points + min_max_dep_inv : [-10.0, 40.0] # depth in km with R = 6371.0 + min_max_lat_inv : [34.5,40.5] # latitude in degree + min_max_lon_inv : [34.5,40.5] # longitude in degree + + + # -------------- using absolute traveltime data -------------- + abs_time: + yes_or_no : yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight : [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + yes_or_no : yes # 'yes' for using common source differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight : [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two stations. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + yes_or_no : yes # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight : [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two earthquakes. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + is_balance_data_weight : yes # yes: over the total weight of the each type of the data. the obj of different data means the average data misfit; no: use original weight (below weight for each type of data needs to be set) + abs_time_weight : 1.0 # weight of absolute traveltime data, default: 1.0 + cs_dif_time_local_weight : 1.0 # weight of common source differential traveltime data, default: 1.0 + cr_dif_time_local_weight : 1.0 # weight of common receiver differential traveltime data, default: 1.0 + teleseismic_weight : 1.0 # weight of teleseismic data, default: 1.0 (exclude in this version) + + # -------------- inversion parameters (exclude in this version) -------------- + is_inv_slowness : yes # update slowness (velocity) or not. default: yes + is_inv_azi_ani : no # update azimuthal anisotropy (xi, eta) or not. default: no + is_inv_rad_ani : no # update radial anisotropy (in future) or not. default: no + + # -------------- for teleseismic inversion (exclude in this version) -------------- + depth_taper : [-200.0, -100.0] # kernel weight : depth. --> 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 1) + yes_or_no : yes # 'yes' for relocating earthquakes; 'no' for not relocating earthquakes (no need to set parameters in this section); + + # relocation_strategy + step_length : 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10.0, 10.0, 10.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [5.0, 5.0, 5.0, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 100 # maximum number of iterations for relocation + + # more option for using different types of data is under development (following) + # -------------- using absolute traveltime data -------------- + abs_time: + yes_or_no : yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight : [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + yes_or_no : yes # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + distance_weight : [10.0, 30.0, 1.0, 0.1] # weight of distance (km) between two earthquakes. + + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # if both update model parameters (yes) and relocation (yes), set inversion strategies here + inv_mode : 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # Fristly, do relocation; Subsequently, do relocation every N steps; Finally, do relocation + relocation_first : yes # yes: do relocation first; no: do not relocation first. default: yes + relocation_first_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + relocation_every_N_steps : 5 # subsequently, do relocation every N steps of updating model parameters. The iteration of relocation follows in Section + relocation_final : yes # yes: do relocation finally; no: do not relocation finally. default: yes + relocation_final_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation : # prefer not to change the default value unless well know the detail + convergence_tolerance : 1e-6 # threshold for determining the convergence of the eikonal solver, default: 1e-6 + max_iterations : 500 # max itertions of the eikonal solver default: 500 + stencil_order : 1 # 1 for first order discretization; 3 for 3rd order WENO discretization. default: 1 + stencil_type : 1 # 0 for no upwind scheme; 1 for upwind scheme; default: 1 + sweep_type : 0 # 0: legacy, 1: cuthill-mckee with shm parallelization default: 0 + + + + diff --git a/test/old_tests/update_input_file/make_test_model.ipynb b/test/old_tests/update_input_file/make_test_model.ipynb new file mode 100644 index 0000000..3fc066d --- /dev/null +++ b/test/old_tests/update_input_file/make_test_model.ipynb @@ -0,0 +1,347 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# notebook for create init and true test model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "depminmax 10.0 -10.0\n", + "17640\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import math\n", + "\n", + "# grid\n", + "R_earth = 6371.0\n", + "\n", + "rr1=6361 \n", + "rr2=6381\n", + "tt1=(38.0-0.3)/180*math.pi\n", + "tt2=(42.0+0.3)/180*math.pi\n", + "pp1=(23.0-0.3)/180*math.pi\n", + "pp2=(27.0+0.3)/180*math.pi\n", + "\n", + "n_rtp = [10,50,50]\n", + "dr = (rr2-rr1)/(n_rtp[0]-1)\n", + "dt = (tt2-tt1)/(n_rtp[1]-1)\n", + "dp = (pp2-pp1)/(n_rtp[2]-1)\n", + "rr = np.array([rr1 + x*dr for x in range(n_rtp[0])])\n", + "tt = np.array([tt1 + x*dt for x in range(n_rtp[1])])\n", + "pp = np.array([pp1 + x*dp for x in range(n_rtp[2])])\n", + "\n", + "# initial model\n", + "gamma = 0.0\n", + "s0 = 1.0/6.0\n", + "slow_p=0.06\n", + "ani_p=0.04\n", + "\n", + "eta_init = np.zeros(n_rtp)\n", + "xi_init = np.zeros(n_rtp)\n", + "zeta_init = np.zeros(n_rtp)\n", + "fun_init = np.zeros(n_rtp)\n", + "vel_init = np.zeros(n_rtp)\n", + "\n", + "# true model\n", + "eta_true = np.zeros(n_rtp)\n", + "xi_true = np.zeros(n_rtp)\n", + "zeta_true = np.zeros(n_rtp)\n", + "fun_true = np.zeros(n_rtp)\n", + "vel_true = np.zeros(n_rtp)\n", + "\n", + "c=0\n", + "for ir in range(n_rtp[0]):\n", + " for it in range(n_rtp[1]):\n", + " for ip in range(n_rtp[2]):\n", + " # already initialized above\n", + " #eta_init[ir,it,ip] = 0.0\n", + " #xi_init[ir,it,ip] = 0.0\n", + " zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2)\n", + " fun_init[ir,it,ip] = s0\n", + " vel_init[ir,it,ip] = 1.0/s0\n", + "\n", + " # true model\n", + " if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \\\n", + " and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi):\n", + " c+=1\n", + " sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi))\n", + " else:\n", + " sigma = 0.0\n", + "\n", + " if sigma < 0:\n", + " psi = 60.0/180.0*math.pi\n", + " elif sigma > 0:\n", + " psi = 120.0/180.0*math.pi\n", + " else:\n", + " psi = 0.0\n", + "\n", + " eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi)\n", + " xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi)\n", + " zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2)\n", + " fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p)\n", + " vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] \n", + "\n", + "\n", + "#r_earth = 6378.1370\n", + "print(\"depminmax {} {}\".format(R_earth-rr1,R_earth-rr2))\n", + "print(c)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# write out in hdf5 format\n", + "import h5py\n", + "\n", + "fout_init = h5py.File('test_model_init.h5', 'w')\n", + "fout_true = h5py.File('test_model_true.h5', 'w')\n", + "\n", + "# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init\n", + "fout_init.create_dataset('eta', data=eta_init)\n", + "fout_init.create_dataset('xi', data=xi_init)\n", + "fout_init.create_dataset('zeta', data=zeta_init)\n", + "fout_init.create_dataset('vel', data=vel_init)\n", + "\n", + "# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true\n", + "fout_true.create_dataset('eta', data=eta_true)\n", + "fout_true.create_dataset('xi', data=xi_true)\n", + "fout_true.create_dataset('zeta', data=zeta_true)\n", + "fout_true.create_dataset('vel', data=vel_true)\n", + "\n", + "fout_init.close()\n", + "fout_true.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# prepare src station file\n", + "\n", + "The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times.\n", + "Format is as follows:\n", + "\n", + "```\n", + " 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event\n", + " 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec\n", + " 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400\n", + " 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200\n", + " ....\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "random.seed(1145141919810)\n", + "\n", + "# dummys\n", + "year_dummy = 1998\n", + "month_dummy = 1\n", + "day_dummy = 1\n", + "hour_dummy = 0\n", + "minute_dummy = 0\n", + "second_dummy = 0\n", + "mag_dummy = 3.0\n", + "id_dummy = 1000\n", + "st_name_dummy = 'AAAA'\n", + "phase_dummy = 'P'\n", + "dist_dummy = 100.0\n", + "arriv_t_dummy = 0.0\n", + "\n", + "tt1deg = tt1 * 180.0/math.pi\n", + "tt2deg = tt2 * 180.0/math.pi\n", + "pp1deg = pp1 * 180.0/math.pi\n", + "pp2deg = pp2 * 180.0/math.pi\n", + "\n", + "\n", + "n_srcs = [20,20,20]\n", + "n_src = n_srcs[0]*n_srcs[1]*n_srcs[2]\n", + "n_rec = [30 for x in range(n_src)]\n", + "\n", + "\n", + "lines = []\n", + "\n", + "nij_src = math.sqrt(n_src)\n", + "nij_rec = math.sqrt(n_rec[0])\n", + "\n", + "pos_src=[]\n", + "pos_rec=[]\n", + "\n", + "\n", + "# create receiver coordinates\n", + "elev_recs=[]\n", + "lon_recs=[]\n", + "lat_recs=[]\n", + "rec_names=[]\n", + "for i in range(n_rec[0]):\n", + " #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m\n", + " #elev_recs.append(0) # elevation in m\n", + " #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9))\n", + " #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9))\n", + " rec_names.append(i)\n", + " # regularly\n", + " elev_recs.append(0.0)\n", + " tmp_ilon = i%nij_rec\n", + " tmp_ilat = int(i/nij_rec)\n", + " lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec)\n", + " lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec)\n", + "\n", + "\n", + "\n", + "# create source coordinates\n", + "for ir in range(n_srcs[0]):\n", + " for it in range(n_srcs[1]):\n", + " for ip in range(n_srcs[2]):\n", + " i_src = ir*n_srcs[1]*n_srcs[2] + it*n_srcs[2] + ip\n", + " # define one point in the domain (rr1 bottom, rr2 top)\n", + " # random\n", + " #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98)\n", + " #lon = random.uniform(pp1deg,pp2deg)\n", + " #lat = random.uniform(tt1deg,tt2deg)\n", + "\n", + " # regular\n", + " dep = (R_earth-rr1)/n_srcs[0]*ir\n", + " lon = pp1deg + ip*(pp2deg-pp1deg)/n_srcs[2]\n", + " lat = tt1deg + it*(tt2deg-tt1deg)/n_srcs[1]\n", + "\n", + " # put independent name for each source\n", + " id_dummy = \"src_\"+str(i_src)\n", + " \n", + " src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy]\n", + " lines.append(src)\n", + "\n", + " pos_src.append([lon,lat,dep])\n", + "\n", + "\n", + " # create dummy station\n", + " for i_rec in range(n_rec[i_src]):\n", + " elev_rec = elev_recs[i_rec]\n", + " lon_rec = lon_recs[i_rec]\n", + " lat_rec = lat_recs[i_rec]\n", + " st_name_dummy = \"rec_\"+str(rec_names[i_rec])\n", + "\n", + " rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, dist_dummy, arriv_t_dummy]\n", + " lines.append(rec)\n", + " \n", + " pos_rec.append([lon_rec,lat_rec,elev_rec])\n", + "\n", + "\n", + "# write out ev_arrivals file\n", + "fname = 'src_rec_test.dat'\n", + "\n", + "with open(fname, 'w') as f:\n", + " for line in lines:\n", + " for elem in line:\n", + " f.write('{} '.format(elem))\n", + " f.write('\\n')\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# draw src and rec positions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "for i_src in range(n_src):\n", + " plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# plot receivers\n", + "for i_rec in range(n_rec[0]):\n", + " plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8 (main, Dec 18 2022, 17:23:16) [GCC 12.2.0]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "c8112a80bcc57e66f52aa6c921b20667122cfa5e8b1ad09e9dfbd3a3ba336bd6" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/update_input_file/make_test_model.py b/test/old_tests/update_input_file/make_test_model.py new file mode 100644 index 0000000..6f195e6 --- /dev/null +++ b/test/old_tests/update_input_file/make_test_model.py @@ -0,0 +1,241 @@ +# %% [markdown] +# # notebook for create init and true test model + +# %% +import numpy as np +import math + +# grid +R_earth = 6371.0 + +rr1=6361 +rr2=6381 +tt1=(38.0-0.3)/180*math.pi +tt2=(42.0+0.3)/180*math.pi +pp1=(23.0-0.3)/180*math.pi +pp2=(27.0+0.3)/180*math.pi + +n_rtp = [10,50,50] +dr = (rr2-rr1)/(n_rtp[0]-1) +dt = (tt2-tt1)/(n_rtp[1]-1) +dp = (pp2-pp1)/(n_rtp[2]-1) +rr = np.array([rr1 + x*dr for x in range(n_rtp[0])]) +tt = np.array([tt1 + x*dt for x in range(n_rtp[1])]) +pp = np.array([pp1 + x*dp for x in range(n_rtp[2])]) + +# initial model +gamma = 0.0 +s0 = 1.0/6.0 +slow_p=0.06 +ani_p=0.04 + +eta_init = np.zeros(n_rtp) +xi_init = np.zeros(n_rtp) +zeta_init = np.zeros(n_rtp) +fun_init = np.zeros(n_rtp) +vel_init = np.zeros(n_rtp) + +# true model +eta_true = np.zeros(n_rtp) +xi_true = np.zeros(n_rtp) +zeta_true = np.zeros(n_rtp) +fun_true = np.zeros(n_rtp) +vel_true = np.zeros(n_rtp) + +c=0 +for ir in range(n_rtp[0]): + for it in range(n_rtp[1]): + for ip in range(n_rtp[2]): + # already initialized above + #eta_init[ir,it,ip] = 0.0 + #xi_init[ir,it,ip] = 0.0 + zeta_init[ir,it,ip] = gamma*math.sqrt(eta_init[ir,it,ip]**2 + xi_init[ir,it,ip]**2) + fun_init[ir,it,ip] = s0 + vel_init[ir,it,ip] = 1.0/s0 + + # true model + if (tt[it] >= 38.0/180.0*math.pi and tt[it] <= 42.0/180.0*math.pi \ + and pp[ip] >= 23.0/180.0*math.pi and pp[ip] <= 27.0/180.0*math.pi): + c+=1 + sigma = math.sin(2.0*math.pi*(tt[it]-38.0/180.0*math.pi)/(4.0/180.0*math.pi))*math.sin(2.0*math.pi*(pp[ip]-23.0/180.0*math.pi)/(4.0/180.0*math.pi)) + else: + sigma = 0.0 + + if sigma < 0: + psi = 60.0/180.0*math.pi + elif sigma > 0: + psi = 120.0/180.0*math.pi + else: + psi = 0.0 + + eta_true[ir,it,ip] = ani_p*abs(sigma)*math.sin(2.0*psi) + xi_true[ir,it,ip] = ani_p*abs(sigma)*math.cos(2.0*psi) + zeta_true[ir,it,ip] = gamma*math.sqrt(eta_true[ir,it,ip]**2 + xi_true[ir,it,ip]**2) + fun_true[ir,it,ip] = s0/(1.0+sigma*slow_p) + vel_true[ir,it,ip] = 1.0/fun_true[ir,it,ip] + + +#r_earth = 6378.1370 +print("depminmax {} {}".format(R_earth-rr1,R_earth-rr2)) +print(c) + + +# %% +# write out in hdf5 format +import h5py + +fout_init = h5py.File('test_model_init.h5', 'w') +fout_true = h5py.File('test_model_true.h5', 'w') + +# write out the arrays eta_init, xi_init, zeta_init, fun_init, a_init, b_init, c_init, f_init +fout_init.create_dataset('eta', data=eta_init) +fout_init.create_dataset('xi', data=xi_init) +fout_init.create_dataset('zeta', data=zeta_init) +fout_init.create_dataset('vel', data=vel_init) + +# writeout the arrays eta_true, xi_true, zeta_true, fun_true, a_true, b_true, c_true, f_true +fout_true.create_dataset('eta', data=eta_true) +fout_true.create_dataset('xi', data=xi_true) +fout_true.create_dataset('zeta', data=zeta_true) +fout_true.create_dataset('vel', data=vel_true) + +fout_init.close() +fout_true.close() + + +# %% [markdown] +# # prepare src station file +# +# The following code creates a src_rec_file for the inversion, which describes the source and receiver positions and arrival times. +# Format is as follows: +# +# ``` +# 26 1992 1 1 2 43 56.900 1.8000 98.9000 137.00 2.80 8 305644 <- src  : id_src year month day hour min sec lat lon dep_km mag num_recs id_event +# 26 1 PCBI 1.8900 98.9253 1000.0000 P 10.40 18.000 <- arrival : id_src id_rec name_rec lat lon elevation_m phase epicentral_distance_km arrival_time_sec +# 26 2 MRPI 1.6125 99.3172 1100.0000 P 50.84 19.400 +# 26 3 HUTI 2.3153 98.9711 1600.0000 P 57.84 19.200 +# .... +# +# ``` + +# %% +import random +random.seed(1145141919810) + +# dummys +year_dummy = 1998 +month_dummy = 1 +day_dummy = 1 +hour_dummy = 0 +minute_dummy = 0 +second_dummy = 0 +mag_dummy = 3.0 +id_dummy = 1000 +st_name_dummy = 'AAAA' +phase_dummy = 'P' +arriv_t_dummy = 0.0 +weight_dummy = 0.444 + +tt1deg = tt1 * 180.0/math.pi +tt2deg = tt2 * 180.0/math.pi +pp1deg = pp1 * 180.0/math.pi +pp2deg = pp2 * 180.0/math.pi + + +n_srcs = [10,20,20] +#n_srcs = [2,1,1] +n_src = n_srcs[0]*n_srcs[1]*n_srcs[2] +n_rec = [30 for x in range(n_src)] + +lines = [] + +nij_rec = math.sqrt(n_rec[0]) + +pos_src=[] +pos_rec=[] + + +# create receiver coordinates +elev_recs=[] +lon_recs=[] +lat_recs=[] +rec_names=[] +for i in range(n_rec[0]): + #elev_recs.append(random.uniform(-100.0,-100.0)) # elevation in m + #elev_recs.append(0) # elevation in m + #lon_recs .append(random.uniform(pp1deg*1.1,pp2deg*0.9)) + #lat_recs .append(random.uniform(tt1deg*1.1,tt2deg*0.9)) + rec_names.append(i) + # regularly + elev_recs.append(0.0) + tmp_ilon = i%nij_rec + tmp_ilat = int(i/nij_rec) + lon_recs.append(pp1deg + tmp_ilon*(pp2deg-pp1deg)/nij_rec) + lat_recs.append(tt1deg + tmp_ilat*(tt2deg-tt1deg)/nij_rec) + + + +# create source coordinates +for ir in range(n_srcs[0]): + for it in range(n_srcs[1]): + for ip in range(n_srcs[2]): + i_src = ir*n_srcs[1]*n_srcs[2] + it*n_srcs[2] + ip + # define one point in the domain (rr1 bottom, rr2 top) + # random + #dep = random.uniform((R_earth-rr1)*0.5,(R_earth-rr1)*0.98) + #lon = random.uniform(pp1deg,pp2deg) + #lat = random.uniform(tt1deg,tt2deg) + + # regular + dep = (R_earth-rr1)/n_srcs[0]*ir + lon = pp1deg + ip*(pp2deg-pp1deg)/n_srcs[2] + lat = tt1deg + it*(tt2deg-tt1deg)/n_srcs[1] + + # put independent name for each source + id_dummy = "src_"+str(i_src) + + src = [i_src, year_dummy, month_dummy, day_dummy, hour_dummy, minute_dummy, second_dummy, lat, lon, dep, mag_dummy, n_rec[i_src], id_dummy, weight_dummy] + lines.append(src) + + pos_src.append([lon,lat,dep]) + + + # create dummy station + for i_rec in range(n_rec[i_src]): + elev_rec = elev_recs[i_rec] + lon_rec = lon_recs[i_rec] + lat_rec = lat_recs[i_rec] + st_name_dummy = "rec_"+str(rec_names[i_rec]) + + rec = [i_src, i_rec, st_name_dummy, lat_rec, lon_rec, elev_rec, phase_dummy, arriv_t_dummy, weight_dummy] + lines.append(rec) + + pos_rec.append([lon_rec,lat_rec,elev_rec]) + + +# write out ev_arrivals file +fname = 'src_rec_test.dat' + +with open(fname, 'w') as f: + for line in lines: + for elem in line: + f.write('{} '.format(elem)) + f.write('\n') + + +# %% +# draw src and rec positions +import matplotlib.pyplot as plt + +for i_src in range(n_src): + plt.scatter(pos_src[i_src][1],pos_src[i_src][0],c='r',marker='o') + +# %% +# plot receivers +for i_rec in range(n_rec[0]): + plt.scatter(pos_rec[i_rec][1],pos_rec[i_rec][0],c='b',marker='o') + +# %% + + + diff --git a/test/old_tests/update_input_file/params_log.yaml b/test/old_tests/update_input_file/params_log.yaml new file mode 100644 index 0000000..b70a224 --- /dev/null +++ b/test/old_tests/update_input_file/params_log.yaml @@ -0,0 +1,236 @@ +version: 2 + +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file path + swap_src_rec: true # swap source and receiver + +model: + init_model_path: ./test_model_init.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs + ndiv_rtp: [1, 2, 2] # number of subdivision on each direction + nproc_sub: 2 # number of processors for sweep parallelization + use_gpu: true # 1 if use gpu (EXPERIMENTAL) + +output_setting: + ######### moved to here + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + + output_source_field: false # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + output_model_dat: false # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + ######is_verbose_output: 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + output_final_model: true # output merged final model or not. 1 for yes; 0 for no; default: 1 + output_in_process: true # output model at each inv iteration or not. 1 for yes; 0 for no; default: 1 + single_precision_output: false # output results in single precision or not. 1 for yes; 0 for no; default: 0 + ##### new feature !!! + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + + output_file_format: 0 + +##### moved to here!! +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 1 + +##### new section +# parameters for model update (inversion) +# ignored if run_mode is not 1 or 3 +model_update: + #run_or_not: true # true for run model update, false for not model update + #### name slighly changed !!! + max_iterations: 3 # maximum number of inversion iterations + + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + # common parameters for all optim methods + step_length: 0.01 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (grad_descent) + optim_method_0: + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + #####step_size_sc: 0.001 # ... # use it also ? + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 10 # maximum number of each sub-iteration + regularization_weight: 100 # weight value for regularization (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + n_inversion_grid: 5 # number of inversion grid sets + + # inversion grid type + type_invgrid_dep: 1 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lat: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lon: 0 # 0: uniform inversion grid, 1: flexible grid + + # settings for uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points (ignored if type_*_inv : 1) + min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) (ignored if type_dep_inv : 1) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # settings for flexible inversion grid (if type_*_inv : 1) + dep_inv: [-10.0, -7.5, -5.0, -2.5, 0.0, 2.5, 5.0, 7.5, 10.0] # depth in km (Radius of the earth is defined in config.h/R_earth) + lat_inv: [0.0, 1.0] # latitude in degree (ignored if type_lat_inv : 0) + lon_inv: [0.0, 1.0] # longitude in degree (ignored if type_lon_inv : 0) + + # path to station correction file + sta_correction_file: dummy_sta_correction_file # station correction file path + + ## + ## new feature !!! + ## + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two stations. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two earthquakes. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. the obj of different data means the average data misfit; no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1.0 # weight of absolute traveltime data, default: 1.0 + cs_dif_time_local_weight: 1.0 # weight of common source differential traveltime data, default: 1.0 + cr_dif_time_local_weight: 1.0 # weight of common receiver differential traveltime data, default: 1.0 + teleseismic_weight: 1.0 # weight of teleseismic data, default: 1.0 (exclude in this version) + + # -------------- inversion parameters (exclude in this version) -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false + update_rad_ani : false # update radial anisotropy (in future) or not. default: false + + # -------------- for teleseismic inversion (exclude in this version) -------------- + ## changed from kernel_taper + depth_taper : [-200.0, -100.0] # kernel weight : depth. --> 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + + +# this top tag is not necessary +########inversion: + ###########run_mode: 1 # 0 for forward simulation only, 1 for inversion + ###########output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + ###########optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + ####max_iterations_inv: 3 # maximum number of inversion iterations + #####step_size: 0.001 # initial step size for model update + #####step_size_sc: 0.001 # ... + #####step_size_decay: 0.9 # ... + #####smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + + # parameters for multiparametric inversion + ######n_inversion_grid: 5 # number of inversion grid sets + #######n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points + ########sta_correction_file: dummy_sta_correction_file # station correction file path + #######type_dep_inv: 0 # 0: uniform inversion grid, 1: flexible grid + #######type_lat_inv: 0 # 0: uniform inversion grid, 1: flexible grid + #######type_lon_inv: 0 # 0: uniform inversion grid, 1: flexible grid + + # parameters for uniform inversion grid + #####min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) + #####min_max_lat_inv: [37.7, 42.3] # latitude in degree + #####min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # parameters for flexible inversion grid +# n_inv_r_flex: 3 +# dep_inv: [1, 1, 1] +# n_inv_t_flex: 3 +# lat_inv: [1, 1, 1] +# n_inv_p_flex: 3 +# lon_inv: [1, 1, 1] + +# parameters for halve-stepping or lbfg mode +####max_sub_iterations: 10 # maximum number of each sub-iteration +######l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing +######regularization_weight: 100 # weight value for regularization (lbfgs mode only) + +### new section !!! +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 1) + ###yes_or_no : yes # 'yes' for relocating earthquakes; 'no' for not relocating earthquakes (no need to set parameters in this section); + + # relocation_strategy + step_length : 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10.0, 10.0, 10.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [5.0, 5.0, 5.0, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 100 # maximum number of iterations for relocation + + # more option for using different types of data is under development (following) + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight : [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + distance_weight : [10.0, 30.0, 1.0, 0.1] # weight of distance (km) between two earthquakes. + + + +#### the name of this tag is changed !!! +#inv_strategy: # flags for selecting the target parameters to be inversed +inversion_strategy: + + # this flag is not used, because the function is duplicated with "run_mode" + #inv_mode : 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + ####is_inv_slowness: true # 1: slowness value will be calculated in inversion, 0: will not be calculated + ####is_inv_azi_ani: true # 1: azimuth anisotropy value will be calculated in inversion, 0: will not be calculated + ####is_inv_rad_ani: 0 # flag for radial anisotropy (Not implemented yet) + ####kernel_taper: [-1e+07, -1e+07] + ####is_sta_correction: 0 + + inv_mode : 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # Fristly, do relocation; Subsequently, do relocation every N steps; Finally, do relocation + relocation_first : true # yes: do relocation first; no: do not relocation first. default: yes + relocation_first_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + relocation_every_N_steps : 5 # subsequently, do relocation every N steps of updating model parameters. The iteration of relocation follows in Section + relocation_final : true # yes: do relocation finally; no: do not relocation finally. default: yes + relocation_final_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + + + + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 3 # order of stencil, 1 or 3 + stencil_type: 0 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + #######output_file_format: 0 diff --git a/test/old_tests/update_input_file/params_log_old.yaml b/test/old_tests/update_input_file/params_log_old.yaml new file mode 100644 index 0000000..bc702fb --- /dev/null +++ b/test/old_tests/update_input_file/params_log_old.yaml @@ -0,0 +1,80 @@ +version: 2 + +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file path + swap_src_rec: 1 # swap source and receiver (1: yes, 0: no) + +model: + init_model_path: ./test_model_init.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +inversion: + run_mode: 1 # 0 for forward simulation only, 1 for inversion + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + max_iterations_inv: 3 # maximum number of inversion iterations + step_size: 0.001 # initial step size for model update + step_size_sc: 0.001 # ... + step_size_decay: 0.9 # ... + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + + # parameters for multiparametric inversion + n_inversion_grid: 5 # number of inversion grid sets + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points +# sta_correction_file: dummy_sta_correction_file # station correction file path + type_dep_inv: 0 # 0: uniform inversion grid, 1: flexible grid + type_lat_inv: 0 # 0: uniform inversion grid, 1: flexible grid + type_lon_inv: 0 # 0: uniform inversion grid, 1: flexible grid + + # parameters for uniform inversion grid + min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # parameters for flexible inversion grid +# n_inv_r_flex: 3 +# dep_inv: [1, 1, 1] +# n_inv_t_flex: 3 +# lat_inv: [1, 1, 1] +# n_inv_p_flex: 3 +# lon_inv: [1, 1, 1] + + # parameters for halve-stepping or lbfg mode + max_sub_iterations: 10 # maximum number of each sub-iteration + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + regularization_weight: 100 # weight value for regularization (lbfgs mode only) + +inv_strategy: # flags for selecting the target parameters to be inversed + is_inv_slowness: 1 # 1: slowness value will be calculated in inversion, 0: will not be calculated + is_inv_azi_ani: 1 # 1: azimuth anisotropy value will be calculated in inversion, 0: will not be calculated + is_inv_rad_ani: 0 # flag for radial anisotropy (Not implemented yet) + kernel_taper: [-1e+07, -1e+07] + is_sta_correction: 0 + +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs + ndiv_rtp: [1, 2, 2] # number of subdivision on each direction + nproc_sub: 2 # number of processors for sweep parallelization + use_gpu: 0 # 1 if use gpu (EXPERIMENTAL) + +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 3 # order of stencil, 1 or 3 + stencil_type: 0 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization + output_file_format: 0 + +output_setting: + is_output_source_field: 0 # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + is_output_model_dat: 0 # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + is_verbose_output: 0 # output internal parameters, if no, only model parameters are out. 1 for yes; 0 for no; default: 0 + is_output_final_model: 1 # output merged final model or not. 1 for yes; 0 for no; default: 1 + is_output_in_process: 1 # output model at each inv iteration or not. 1 for yes; 0 for no; default: 1 + is_single_precision_output: 0 # output results in single precision or not. 1 for yes; 0 for no; default: 0 diff --git a/test/old_tests/update_input_file/params_log_old.yaml.v3.yaml b/test/old_tests/update_input_file/params_log_old.yaml.v3.yaml new file mode 100644 index 0000000..a6d5722 --- /dev/null +++ b/test/old_tests/update_input_file/params_log_old.yaml.v3.yaml @@ -0,0 +1,182 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat # source receiver file path + swap_src_rec: 1 # swap source and receiver (1: yes, 0: no) + +model: + init_model_path: ./test_model_init.h5 # path to initial model file +# model_1d_name: dummy_model_1d_name # 1D model name used in teleseismic 2D solver (iasp91, ak135, user_defined is available), defined in include/1d_model.h + +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs + ndiv_rtp: [1, 2, 2] # number of subdivision on each direction + nproc_sub: 2 # number of processors for sweep parallelization + use_gpu: false # 1 if use gpu (EXPERIMENTAL) + +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + output_model_dat: false # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + output_final_model: true # output merged final model or not. 1 for yes; 0 for no; default: 1 + output_in_process: true # output model at each inv iteration or not. 1 for yes; 0 for no; default: 1 + single_precision_output: false # output results in single precision or not. 1 for yes; 0 for no; default: 0 + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + output_file_format: 0 + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 1 + + +################################################### +# model update parameters setting # +################################################### +model_update: # update model parameters (when run_mode : 1 and 3) + max_iterations: 3 # maximum number of inversion iterations + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + # common parameters for all optim methods + step_length: 0.01 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (grad_descent) + optim_method_0: + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + step_length_sc: 0.001 # ... # use it also ? + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 10 # maximum number of each sub-iteration + regularization_weight: 100 # weight value for regularization (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + n_inversion_grid: 5 # number of inversion grid sets + + # inversion grid type + type_invgrid_dep: 1 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lat: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lon: 0 # 0: uniform inversion grid, 1: flexible grid + + # settings for uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points (ignored if type_*_inv : 1) + min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) (ignored if type_dep_inv : 1) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # settings for flexible inversion grid (if type_*_inv : 1) + dep_inv: [-10.0, -7.5, -5.0, -2.5, 0.0, 2.5, 5.0, 7.5, 10.0] # depth in km (Radius of the earth is defined in config.h/R_earth) + lat_inv: [0.0, 1.0] # latitude in degree (ignored if type_lat_inv : 0) + lon_inv: [0.0, 1.0] # longitude in degree (ignored if type_lon_inv : 0) + + # path to station correction file + sta_correction_file: dummy_sta_correction_file # station correction file path + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two stations. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two earthquakes. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. the obj of different data means the average data misfit; no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1.0 # weight of absolute traveltime data, default: 1.0 + cs_dif_time_local_weight: 1.0 # weight of common source differential traveltime data, default: 1.0 + cr_dif_time_local_weight: 1.0 # weight of common receiver differential traveltime data, default: 1.0 + teleseismic_weight: 1.0 # weight of teleseismic data, default: 1.0 (exclude in this version) + + # -------------- inversion parameters (exclude in this version) -------------- + update_slowness: true # update slowness (velocity) or not. default: true + update_azi_ani: false # update azimuthal anisotropy (xi, eta) or not. default: false + update_rad_ani: false # update radial anisotropy (in future) or not. default: false + + # -------------- for teleseismic inversion (exclude in this version) -------------- + depth_taper: [-200.0, -100.0] # kernel weight : depth. --> 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 1) + + # relocation_strategy + step_length: 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime: [10.0, 10.0, 10.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime: [5.0, 5.0, 5.0, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations: 100 # maximum number of iterations for relocation + + # more option for using different types of data is under development (following) + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + distance_weight: [10.0, 30.0, 1.0, 0.1] # weight of distance (km) between two earthquakes. + + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode: 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # Fristly, do relocation; Subsequently, do relocation every N steps; Finally, do relocation + relocation_first: true # yes: do relocation first; no: do not relocation first. default: yes + relocation_first_iterations: 10 # maximum number of iterations for relocation in the beginning. default: 10 + relocation_every_N_steps: 5 # subsequently, do relocation every N steps of updating model parameters. The iteration of relocation follows in Section + relocation_final: true # yes: do relocation finally; no: do not relocation finally. default: yes + relocation_final_iterations: 10 # maximum number of iterations for relocation in the beginning. default: 10 + + + +# --- parameters for core solver --------------------------------------------------------- +# --- please do not change the following parameters unless you know what you are doing --- + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 3 # order of stencil, 1 or 3 + stencil_type: 0 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization diff --git a/test/old_tests/update_input_file/params_model_v3.yaml b/test/old_tests/update_input_file/params_model_v3.yaml new file mode 100644 index 0000000..f02aa14 --- /dev/null +++ b/test/old_tests/update_input_file/params_model_v3.yaml @@ -0,0 +1,206 @@ +version: 2 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat ### source receiver file path + swap_src_rec: true # swap source and receiver + + +################################################# +# initial model file path # +################################################# +model: + init_model_path: ./test_model_init.h5 # path to initial model file + + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs + ndiv_rtp: [1, 2, 2] # number of subdivision on each direction + nproc_sub: 2 # number of processors for sweep parallelization + use_gpu: true # true if use gpu (EXPERIMENTAL) + + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # output the calculated field of all sources 1 for yes; 0 for no; default: 1 + output_model_dat: false # output model_parameters_inv_0000.dat or not. 1 for yes; 0 for no; default: 1 + output_final_model: true # output merged final model or not. 1 for yes; 0 for no; default: 1 + output_in_process: true # output model at each inv iteration or not. 1 for yes; 0 for no; default: 1 + single_precision_output: false # output results in single precision or not. 1 for yes; 0 for no; default: 0 + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + output_file_format: 0 # in/output file format, if 0: HDF5, if 1: ASCII + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 1 + + +################################################### +# model update parameters setting # +################################################### +model_update: # update model parameters (when run_mode : 1 and 3) + max_iterations: 3 # maximum number of inversion iterations + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + # common parameters for all optim methods + step_length: 0.01 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (grad_descent) + optim_method_0: + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + step_length_sc: 0.001 # ... # use it also ? + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 10 # maximum number of each sub-iteration + regularization_weight: 100 # weight value for regularization (lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [1, 1, 1] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + n_inversion_grid: 5 # number of inversion grid sets + + # inversion grid type + type_invgrid_dep: 1 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lat: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lon: 0 # 0: uniform inversion grid, 1: flexible grid + + # settings for uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points (ignored if type_*_inv : 1) + min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) (ignored if type_dep_inv : 1) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # settings for flexible inversion grid (if type_*_inv : 1) + dep_inv: [-10.0, -7.5, -5.0, -2.5, 0.0, 2.5, 5.0, 7.5, 10.0] # depth in km (Radius of the earth is defined in config.h/R_earth) + lat_inv: [0.0, 1.0] # latitude in degree (ignored if type_lat_inv : 0) + lon_inv: [0.0, 1.0] # longitude in degree (ignored if type_lon_inv : 0) + + # path to station correction file + use_sta_correction: false + sta_correction_file: dummy_sta_correction_file # station correction file path + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight: [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: true # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two stations. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: true # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight: [15.0, 30.0, 1.0, 0.1] # weight of azimuth between two earthquakes. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: true # yes: over the total weight of the each type of the data. the obj of different data means the average data misfit; no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1.0 # weight of absolute traveltime data, default: 1.0 + cs_dif_time_local_weight: 1.0 # weight of common source differential traveltime data, default: 1.0 + cr_dif_time_local_weight: 1.0 # weight of common receiver differential traveltime data, default: 1.0 + teleseismic_weight: 1.0 # weight of teleseismic data, default: 1.0 (exclude in this version) + + # -------------- inversion parameters (exclude in this version) -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false + update_rad_ani : false # update radial anisotropy (in future) or not. default: false + + # -------------- for teleseismic inversion (exclude in this version) -------------- + depth_taper : [-200.0, -100.0] # kernel weight : depth. --> 0: -inf ~ taper[0]; 0 ~ 1 : taper[0] ~ taper[1]; 1 : taper[1] ~ inf + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 1) + + # relocation_strategy + step_length : 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10.0, 10.0, 10.0, 1.0] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [5.0, 5.0, 5.0, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 100 # maximum number of iterations for relocation + tol_gradient : 0.0001 # threshold value for checking the convergence for each iteration + + # params keeped for current version of relocation but may not be required + ortime_local_search : true # true: do local search for origin time; false: do not do local search for origin time + ref_ortime_change : 0.5 # reference value for origin time change (unit: second). If the change of origin time is larger than ref_ortime_change, do local search for origin time. + step_length_ortime_rescale : 0.1 # step length for rescaling origin time + + + # more option for using different types of data is under development (following) + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : yes # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. wt = residual_weight[2] for res < residual_weight[0]. wt = residual_weight[3] for res > residual_weight[1], and linear weight in between. + distance_weight : [50.0, 150.0, 1.0, 0.1] # weight of epicenter distance. wt = distance_weight[2] for dis < distance_weight[0]. wt = distance_weight[3] for dis > distance_weight[1], and linear weight in between. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : true # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [1.0, 3.0, 1.0, 0.1] # weight (wt) of residual. + azimuthal_weight : [10.0, 30.0, 1.0, 0.1] # weight of azimuth (deg.) between two earthquakes. + + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode : 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # Fristly, do relocation; Subsequently, do relocation every N steps; Finally, do relocation + relocation_first : true # true: do relocation first; false: do not relocation first. default: true + relocation_first_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + relocation_every_N_steps : 5 # subsequently, do relocation every N steps of updating model parameters. The iteration of relocation follows in Section + relocation_final : true # true: do relocation finally; false: do not relocation finally. default: true + relocation_final_iterations : 10 # maximum number of iterations for relocation in the beginning. default: 10 + + + +# --- parameters for core solver --------------------------------------------------------- +# --- please do not change the following parameters unless you know what you are doing --- + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 3 # order of stencil, 1 or 3 + stencil_type: 0 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization diff --git a/test/old_tests/update_input_file/run_this_example.sh b/test/old_tests/update_input_file/run_this_example.sh new file mode 100755 index 0000000..82830eb --- /dev/null +++ b/test/old_tests/update_input_file/run_this_example.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +python make_test_model.py + +# run for preparing true travel times +mpirun -n 2 ../../build/bin/TOMOATT -i input_params_pre.yml + +# run for inversion +mpirun -n 2 ../../build/bin/TOMOATT -i input_params.yml +#mpirun -n 8 ../../build/bin/TOMOATT -i input_params_flexible_inv_grid.yml + +# then final model can be plot by e.g. check_3d_out.ipynb +#paraview OUTPUT_FILES/out_data_sim.xmf diff --git a/test/old_tests/update_input_file/test.ipynb b/test/old_tests/update_input_file/test.ipynb new file mode 100644 index 0000000..255e98c --- /dev/null +++ b/test/old_tests/update_input_file/test.ipynb @@ -0,0 +1,312 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [], + "source": [ + "# load yaml files with ruamel.yaml\n", + "import sys\n", + "from ruamel.yaml import YAML\n", + "\n", + "yaml=YAML()\n", + "\n", + "fold = \"./params_log_old.yaml\"\n", + "fnew = \"./params_model_v3.yaml\"\n", + "\n", + "# load the old file as string\n", + "with open(fold, 'r') as f:\n", + " str_old = f.read()\n", + " params_in = yaml.load(str_old)\n", + "\n", + "# load the new file as string\n", + "with open(fnew, 'r') as f:\n", + " str_new = f.read()\n", + " params_v3 = yaml.load(str_new)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": {}, + "outputs": [], + "source": [ + "params_v3['domain'] = params_in['domain']" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [], + "source": [ + "params_v3['source'] = params_in['source']" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [], + "source": [ + "params_v3['model'] = params_in['model']" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [], + "source": [ + "params_v3['parallel'] = params_in['parallel']" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'n_sims': 1, 'ndiv_rtp': [1, 2, 2], 'nproc_sub': 2, 'use_gpu': 0}" + ] + }, + "execution_count": 170, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_v3['parallel']" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [], + "source": [ + "params_v3['parallel']['use_gpu'] = True" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'n_sims': 1, 'ndiv_rtp': [1, 2, 2], 'nproc_sub': 2, 'use_gpu': True}" + ] + }, + "execution_count": 172, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_v3['parallel']" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": {}, + "outputs": [], + "source": [ + "# dump params_v3 as a new file\n", + "fout = fold+\".v3.yaml\"\n", + "\n", + "with open(fout, 'w') as fp:\n", + " yaml.dump(params_v3, fp)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'src_rec_file': 'OUTPUT_FILES/src_rec_file_forward.dat', 'swap_src_rec': 1}" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_v3['source']" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'src_rec_file': 'OUTPUT_FILES/src_rec_file_forward.dat', 'swap_src_rec': 1}" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_in['source']" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'min_max_dep': [-10, 10],\n", + " 'min_max_lat': [37.7, 42.3],\n", + " 'min_max_lon': [22.7, 27.3],\n", + " 'n_rtp': [10, 50, 50]}" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params_in['domain']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.8" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/old_tests/update_input_file/time.txt b/test/old_tests/update_input_file/time.txt new file mode 100644 index 0000000..2fbd9bb --- /dev/null +++ b/test/old_tests/update_input_file/time.txt @@ -0,0 +1,34561 @@ +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.206752 +Converged at iteration 38, L1 9.21847e-05, Linf 0.0175603, total time[s] 0.228053 +Converged at iteration 30, L1 5.49574e-05, Linf 0.00759999, total time[s] 0.169244 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.218334 +Converged at iteration 23, L1 7.44298e-05, Linf 0.00681255, total time[s] 0.110601 +Converged at iteration 25, L1 6.29886e-05, Linf 0.00475444, total time[s] 0.165025 +Converged at iteration 28, L1 9.26739e-05, Linf 0.0162405, total time[s] 0.142694 +Converged at iteration 25, L1 5.41452e-05, Linf 0.00674061, total time[s] 0.143725 +Converged at iteration 29, L1 7.33528e-05, Linf 0.00911797, total time[s] 0.141193 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.148687 +Converged at iteration 21, L1 7.24063e-05, Linf 0.00386858, total time[s] 0.110028 +Converged at iteration 26, L1 9.15716e-05, Linf 0.0102676, total time[s] 0.167497 +Converged at iteration 23, L1 6.26362e-05, Linf 0.00569336, total time[s] 0.181866 +Converged at iteration 32, L1 6.42488e-05, Linf 0.00580398, total time[s] 0.18281 +Converged at iteration 35, L1 8.37157e-05, Linf 0.00775608, total time[s] 0.315682 +Converged at iteration 30, L1 7.41106e-05, Linf 0.00884236, total time[s] 0.185328 +Converged at iteration 27, L1 6.48901e-05, Linf 0.00743368, total time[s] 0.163285 +Converged at iteration 28, L1 8.05975e-05, Linf 0.00540306, total time[s] 0.157304 +Converged at iteration 29, L1 8.01748e-05, Linf 0.00450107, total time[s] 0.147741 +Converged at iteration 27, L1 8.6927e-05, Linf 0.00461716, total time[s] 0.124029 +Converged at iteration 37, L1 9.16411e-05, Linf 0.00737832, total time[s] 0.264089 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.157887 +Converged at iteration 34, L1 4.57576e-05, Linf 0.00751586, total time[s] 0.231009 +Converged at iteration 35, L1 9.40656e-05, Linf 0.00568961, total time[s] 0.161483 +Converged at iteration 36, L1 7.19972e-05, Linf 0.00699143, total time[s] 0.247116 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.156635 +Converged at iteration 33, L1 4.86311e-05, Linf 0.00836183, total time[s] 0.176122 +Converged at iteration 37, L1 6.09595e-05, Linf 0.0156775, total time[s] 0.171018 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.15328 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.235173 +Converged at iteration 35, L1 7.32632e-05, Linf 0.00328763, total time[s] 0.155084 +Converged at iteration 39, L1 9.80774e-05, Linf 0.00419203, total time[s] 0.180077 +Converged at iteration 31, L1 6.02421e-05, Linf 0.00496108, total time[s] 0.143241 +Converged at iteration 30, L1 9.37224e-05, Linf 0.00423518, total time[s] 0.138056 +Converged at iteration 22, L1 8.40505e-05, Linf 0.00446709, total time[s] 0.097747 +Converged at iteration 27, L1 6.1254e-05, Linf 0.00495794, total time[s] 0.152451 +Converged at iteration 24, L1 8.64275e-05, Linf 0.00479291, total time[s] 0.121408 +Converged at iteration 20, L1 9.34896e-05, Linf 0.0039534, total time[s] 0.09453 +Converged at iteration 26, L1 7.71676e-05, Linf 0.00536056, total time[s] 0.124622 +Converged at iteration 28, L1 7.15015e-05, Linf 0.00439544, total time[s] 0.122362 +Converged at iteration 19, L1 6.18591e-05, Linf 0.00384773, total time[s] 0.091729 +Converged at iteration 22, L1 7.10648e-05, Linf 0.00506896, total time[s] 0.105769 +Converged at iteration 20, L1 7.92957e-05, Linf 0.00447797, total time[s] 0.097436 +Converged at iteration 30, L1 7.47316e-05, Linf 0.0031698, total time[s] 0.151117 +Converged at iteration 31, L1 8.31401e-05, Linf 0.00538843, total time[s] 0.147199 +Converged at iteration 24, L1 6.53786e-05, Linf 0.00455289, total time[s] 0.10675 +Converged at iteration 24, L1 8.2642e-05, Linf 0.00444846, total time[s] 0.115126 +Converged at iteration 27, L1 9.26856e-05, Linf 0.00545834, total time[s] 0.118452 +Converged at iteration 26, L1 6.79241e-05, Linf 0.0042593, total time[s] 0.117244 +Converged at iteration 23, L1 8.71856e-05, Linf 0.00393248, total time[s] 0.107356 +Converged at iteration 33, L1 9.79803e-05, Linf 0.00481788, total time[s] 0.146323 +Converged at iteration 29, L1 7.33944e-05, Linf 0.00459106, total time[s] 0.155115 +Converged at iteration 28, L1 8.8278e-05, Linf 0.00301638, total time[s] 0.121668 +Converged at iteration 30, L1 8.99922e-05, Linf 0.00425831, total time[s] 0.146182 +Converged at iteration 37, L1 7.14867e-05, Linf 0.0031975, total time[s] 0.162136 +Converged at iteration 32, L1 8.97978e-05, Linf 0.00361223, total time[s] 0.162216 +Converged at iteration 28, L1 9.31858e-05, Linf 0.00419491, total time[s] 0.132478 +Converged at iteration 26, L1 8.59308e-05, Linf 0.00370952, total time[s] 0.1221 +Converged at iteration 33, L1 8.26796e-05, Linf 0.0046157, total time[s] 0.161335 +Converged at iteration 24, L1 8.25016e-05, Linf 0.00315268, total time[s] 0.098503 +Converged at iteration 35, L1 9.56299e-05, Linf 0.00636877, total time[s] 0.155892 +Converged at iteration 39, L1 5.8581e-05, Linf 0.0067558, total time[s] 0.180012 +Converged at iteration 30, L1 9.22524e-05, Linf 0.00593171, total time[s] 0.133701 +Converged at iteration 24, L1 7.54719e-05, Linf 0.00443952, total time[s] 0.118026 +Converged at iteration 21, L1 7.74136e-05, Linf 0.00409756, total time[s] 0.096807 +Converged at iteration 24, L1 8.1595e-05, Linf 0.00560002, total time[s] 0.107314 +Converged at iteration 19, L1 5.0347e-05, Linf 0.00464904, total time[s] 0.088007 +Converged at iteration 21, L1 3.53929e-05, Linf 0.00569443, total time[s] 0.09809 +Converged at iteration 23, L1 9.88082e-05, Linf 0.00626928, total time[s] 0.105478 +Converged at iteration 24, L1 6.09705e-05, Linf 0.00475574, total time[s] 0.114936 +Converged at iteration 20, L1 5.68793e-05, Linf 0.00530747, total time[s] 0.090439 +Converged at iteration 16, L1 8.92829e-05, Linf 0.00347308, total time[s] 0.084666 +Converged at iteration 19, L1 9.35951e-05, Linf 0.00700141, total time[s] 0.106061 +Converged at iteration 31, L1 7.28474e-05, Linf 0.00274743, total time[s] 0.142654 +Converged at iteration 26, L1 5.4562e-05, Linf 0.00496172, total time[s] 0.123168 +Converged at iteration 23, L1 7.17846e-05, Linf 0.00687562, total time[s] 0.10912 +Converged at iteration 20, L1 5.51942e-05, Linf 0.00356682, total time[s] 0.12177 +Converged at iteration 23, L1 4.99051e-05, Linf 0.00338349, total time[s] 0.103803 +Converged at iteration 22, L1 9.57456e-05, Linf 0.00486089, total time[s] 0.103482 +Converged at iteration 25, L1 8.51961e-05, Linf 0.00451546, total time[s] 0.123063 +Converged at iteration 28, L1 6.58443e-05, Linf 0.00333225, total time[s] 0.125331 +Converged at iteration 29, L1 6.54508e-05, Linf 0.00617529, total time[s] 0.144613 +Converged at iteration 27, L1 6.91984e-05, Linf 0.00379722, total time[s] 0.121697 +Converged at iteration 29, L1 6.31764e-05, Linf 0.0037093, total time[s] 0.14091 +Converged at iteration 29, L1 7.76869e-05, Linf 0.00282334, total time[s] 0.169268 +Converged at iteration 27, L1 9.62136e-05, Linf 0.00290939, total time[s] 0.121821 +Converged at iteration 32, L1 7.55118e-05, Linf 0.00661927, total time[s] 0.166984 +Converged at iteration 26, L1 7.20402e-05, Linf 0.00295121, total time[s] 0.161834 +Converged at iteration 25, L1 7.4973e-05, Linf 0.00244029, total time[s] 0.140945 +Converged at iteration 23, L1 6.52474e-05, Linf 0.00279665, total time[s] 0.185158 +Converged at iteration 35, L1 5.93939e-05, Linf 0.00946085, total time[s] 0.165407 +Converged at iteration 38, L1 6.12505e-05, Linf 0.011002, total time[s] 0.180286 +Converged at iteration 25, L1 4.75377e-05, Linf 0.00657587, total time[s] 0.116737 +Converged at iteration 30, L1 5.73495e-05, Linf 0.00586596, total time[s] 0.14266 +Converged at iteration 23, L1 5.06247e-05, Linf 0.00349052, total time[s] 0.113526 +Converged at iteration 22, L1 5.95477e-05, Linf 0.00477834, total time[s] 0.105776 +Converged at iteration 21, L1 5.38108e-05, Linf 0.00532297, total time[s] 0.101156 +Converged at iteration 19, L1 7.26704e-05, Linf 0.00727005, total time[s] 0.096084 +Converged at iteration 22, L1 6.03668e-05, Linf 0.00541518, total time[s] 0.106047 +Converged at iteration 23, L1 5.28349e-05, Linf 0.00372311, total time[s] 0.112128 +Converged at iteration 17, L1 9.26194e-05, Linf 0.00197894, total time[s] 0.085679 +Converged at iteration 20, L1 5.44158e-05, Linf 0.00432323, total time[s] 0.093576 +Converged at iteration 19, L1 9.33096e-05, Linf 0.00662314, total time[s] 0.096183 +Converged at iteration 31, L1 5.34956e-05, Linf 0.00505112, total time[s] 0.14564 +Converged at iteration 25, L1 8.76661e-05, Linf 0.00548242, total time[s] 0.136877 +Converged at iteration 22, L1 9.07936e-05, Linf 0.00658955, total time[s] 0.120082 +Converged at iteration 22, L1 6.66444e-05, Linf 0.00190822, total time[s] 0.122745 +Converged at iteration 24, L1 9.13523e-05, Linf 0.0030977, total time[s] 0.116508 +Converged at iteration 25, L1 7.31293e-05, Linf 0.00308859, total time[s] 0.131651 +Converged at iteration 23, L1 6.78589e-05, Linf 0.00278705, total time[s] 0.107891 +Converged at iteration 26, L1 7.58542e-05, Linf 0.00328977, total time[s] 0.129277 +Converged at iteration 30, L1 4.9913e-05, Linf 0.00355054, total time[s] 0.167637 +Converged at iteration 28, L1 8.53923e-05, Linf 0.00258764, total time[s] 0.13223 +Converged at iteration 29, L1 8.99289e-05, Linf 0.00543438, total time[s] 0.14581 +Converged at iteration 29, L1 8.58523e-05, Linf 0.00210003, total time[s] 0.187551 +Converged at iteration 29, L1 6.83462e-05, Linf 0.00256661, total time[s] 0.151716 +Converged at iteration 32, L1 5.42237e-05, Linf 0.00866026, total time[s] 0.171208 +Converged at iteration 26, L1 6.86562e-05, Linf 0.00398928, total time[s] 0.179841 +Converged at iteration 25, L1 8.8837e-05, Linf 0.00383863, total time[s] 0.120048 +Converged at iteration 23, L1 8.16061e-05, Linf 0.00365245, total time[s] 0.107156 +Converged at iteration 35, L1 3.95729e-05, Linf 0.0120517, total time[s] 0.169475 +Converged at iteration 37, L1 8.08597e-05, Linf 0.0175058, total time[s] 0.184164 +Converged at iteration 25, L1 6.78587e-05, Linf 0.00944575, total time[s] 0.122121 +Converged at iteration 28, L1 9.92812e-05, Linf 0.00827531, total time[s] 0.138618 +Converged at iteration 22, L1 4.73599e-05, Linf 0.00472631, total time[s] 0.106925 +Converged at iteration 22, L1 8.54219e-05, Linf 0.00406096, total time[s] 0.121589 +Converged at iteration 21, L1 8.77303e-05, Linf 0.00630079, total time[s] 0.108894 +Converged at iteration 20, L1 3.55671e-05, Linf 0.00576936, total time[s] 0.103626 +Converged at iteration 22, L1 6.68824e-05, Linf 0.00321947, total time[s] 0.118948 +Converged at iteration 23, L1 6.04812e-05, Linf 0.00326221, total time[s] 0.121837 +Converged at iteration 20, L1 9.14177e-05, Linf 0.00312112, total time[s] 0.090499 +Converged at iteration 18, L1 9.22643e-05, Linf 0.00308715, total time[s] 0.147685 +Converged at iteration 19, L1 9.31198e-05, Linf 0.00534201, total time[s] 0.101767 +Converged at iteration 31, L1 5.73703e-05, Linf 0.00694234, total time[s] 0.154034 +Converged at iteration 26, L1 5.04184e-05, Linf 0.00457167, total time[s] 0.133684 +Converged at iteration 22, L1 7.80172e-05, Linf 0.00507117, total time[s] 0.118917 +Converged at iteration 23, L1 6.32207e-05, Linf 0.00200875, total time[s] 0.111336 +Converged at iteration 25, L1 9.52579e-05, Linf 0.00331006, total time[s] 0.124864 +Converged at iteration 23, L1 7.83055e-05, Linf 0.00271869, total time[s] 0.108238 +Converged at iteration 24, L1 9.72831e-05, Linf 0.00394965, total time[s] 0.169713 +Converged at iteration 24, L1 6.80206e-05, Linf 0.00289292, total time[s] 0.112584 +Converged at iteration 31, L1 7.48217e-05, Linf 0.00447001, total time[s] 0.165091 +Converged at iteration 29, L1 8.56842e-05, Linf 0.00322109, total time[s] 0.14723 +Converged at iteration 30, L1 5.27263e-05, Linf 0.00552693, total time[s] 0.1376 +Converged at iteration 30, L1 5.94824e-05, Linf 0.00192502, total time[s] 0.139279 +Converged at iteration 31, L1 6.97355e-05, Linf 0.00349693, total time[s] 0.135414 +Converged at iteration 32, L1 4.79024e-05, Linf 0.0117912, total time[s] 0.148531 +Converged at iteration 24, L1 6.17473e-05, Linf 0.00446385, total time[s] 0.121003 +Converged at iteration 25, L1 8.51533e-05, Linf 0.00453752, total time[s] 0.116948 +Converged at iteration 24, L1 6.54649e-05, Linf 0.0029654, total time[s] 0.132109 +Converged at iteration 35, L1 4.3174e-05, Linf 0.0144629, total time[s] 0.162914 +Converged at iteration 37, L1 5.22618e-05, Linf 0.0192627, total time[s] 0.177691 +Converged at iteration 28, L1 6.29676e-05, Linf 0.00754555, total time[s] 0.136713 +Converged at iteration 25, L1 7.01891e-05, Linf 0.0101207, total time[s] 0.138074 +Converged at iteration 21, L1 8.32619e-05, Linf 0.00895717, total time[s] 0.103809 +Converged at iteration 22, L1 9.82689e-05, Linf 0.00441436, total time[s] 0.109435 +Converged at iteration 20, L1 5.93549e-05, Linf 0.00912361, total time[s] 0.131695 +Converged at iteration 22, L1 3.48519e-05, Linf 0.00320961, total time[s] 0.158579 +Converged at iteration 23, L1 7.46997e-05, Linf 0.00365999, total time[s] 0.174895 +Converged at iteration 23, L1 7.54855e-05, Linf 0.00294913, total time[s] 0.150145 +Converged at iteration 21, L1 7.01447e-05, Linf 0.00236251, total time[s] 0.113676 +Converged at iteration 19, L1 6.43291e-05, Linf 0.00331403, total time[s] 0.097727 +Converged at iteration 20, L1 5.81346e-05, Linf 0.00374722, total time[s] 0.106702 +Converged at iteration 31, L1 5.83327e-05, Linf 0.00857564, total time[s] 0.199403 +Converged at iteration 26, L1 4.92843e-05, Linf 0.00381928, total time[s] 0.146081 +Converged at iteration 22, L1 7.63046e-05, Linf 0.00501169, total time[s] 0.137336 +Converged at iteration 23, L1 8.42829e-05, Linf 0.00262704, total time[s] 0.139537 +Converged at iteration 26, L1 7.85438e-05, Linf 0.002714, total time[s] 0.122756 +Converged at iteration 23, L1 9.15225e-05, Linf 0.00274453, total time[s] 0.111709 +Converged at iteration 24, L1 8.18634e-05, Linf 0.00387576, total time[s] 0.214205 +Converged at iteration 23, L1 7.25029e-05, Linf 0.00114801, total time[s] 0.103743 +Converged at iteration 32, L1 5.0867e-05, Linf 0.00408134, total time[s] 0.238362 +Converged at iteration 30, L1 6.25066e-05, Linf 0.00251724, total time[s] 0.158985 +Converged at iteration 30, L1 6.54323e-05, Linf 0.00805307, total time[s] 0.179671 +Converged at iteration 30, L1 7.68596e-05, Linf 0.00327952, total time[s] 0.161115 +Converged at iteration 32, L1 3.75383e-05, Linf 0.00250371, total time[s] 0.205604 +Converged at iteration 32, L1 4.7634e-05, Linf 0.0154585, total time[s] 0.190902 +Converged at iteration 25, L1 8.07719e-05, Linf 0.00463342, total time[s] 0.117984 +Converged at iteration 25, L1 8.6462e-05, Linf 0.00290642, total time[s] 0.134429 +Converged at iteration 24, L1 9.50757e-05, Linf 0.00545624, total time[s] 0.145934 +Converged at iteration 37, L1 4.12906e-05, Linf 0.0200494, total time[s] 0.185557 +Converged at iteration 35, L1 5.76022e-05, Linf 0.018222, total time[s] 0.201288 +Converged at iteration 25, L1 6.75561e-05, Linf 0.00984571, total time[s] 0.117325 +Converged at iteration 27, L1 8.94647e-05, Linf 0.00892078, total time[s] 0.132911 +Converged at iteration 23, L1 6.96152e-05, Linf 0.00402439, total time[s] 0.115373 +Converged at iteration 21, L1 6.93247e-05, Linf 0.00812086, total time[s] 0.118493 +Converged at iteration 20, L1 9.24658e-05, Linf 0.0131671, total time[s] 0.092963 +Converged at iteration 22, L1 4.40129e-05, Linf 0.00437325, total time[s] 0.121712 +Converged at iteration 24, L1 4.76857e-05, Linf 0.00245455, total time[s] 0.108118 +Converged at iteration 24, L1 6.69535e-05, Linf 0.00409492, total time[s] 0.124199 +Converged at iteration 21, L1 9.85936e-05, Linf 0.00305193, total time[s] 0.100981 +Converged at iteration 19, L1 8.21128e-05, Linf 0.00439962, total time[s] 0.096242 +Converged at iteration 31, L1 7.03235e-05, Linf 0.00841183, total time[s] 0.137752 +Converged at iteration 20, L1 6.47817e-05, Linf 0.00393172, total time[s] 0.133642 +Converged at iteration 22, L1 8.15155e-05, Linf 0.00468968, total time[s] 0.112485 +Converged at iteration 26, L1 6.68713e-05, Linf 0.00426344, total time[s] 0.144049 +Converged at iteration 27, L1 5.80952e-05, Linf 0.00182778, total time[s] 0.125956 +Converged at iteration 24, L1 5.02869e-05, Linf 0.00167246, total time[s] 0.131727 +Converged at iteration 23, L1 9.35283e-05, Linf 0.00285861, total time[s] 0.126694 +Converged at iteration 24, L1 6.72179e-05, Linf 0.0035396, total time[s] 0.123366 +Converged at iteration 25, L1 9.77472e-05, Linf 0.00341196, total time[s] 0.107911 +Converged at iteration 32, L1 6.71046e-05, Linf 0.00495125, total time[s] 0.184057 +Converged at iteration 30, L1 7.63731e-05, Linf 0.0027775, total time[s] 0.133872 +Converged at iteration 30, L1 8.21456e-05, Linf 0.00989983, total time[s] 0.154447 +Converged at iteration 31, L1 5.46593e-05, Linf 0.00360771, total time[s] 0.160288 +Converged at iteration 32, L1 5.22213e-05, Linf 0.0197042, total time[s] 0.147443 +Converged at iteration 32, L1 5.80535e-05, Linf 0.00349202, total time[s] 0.203034 +Converged at iteration 25, L1 7.21548e-05, Linf 0.00350287, total time[s] 0.123718 +Converged at iteration 27, L1 5.45911e-05, Linf 0.00552487, total time[s] 0.153968 +Converged at iteration 25, L1 7.11829e-05, Linf 0.0053406, total time[s] 0.111866 +Converged at iteration 35, L1 6.69705e-05, Linf 0.0235334, total time[s] 0.166102 +Converged at iteration 37, L1 3.95917e-05, Linf 0.0208762, total time[s] 0.168913 +Converged at iteration 27, L1 6.75017e-05, Linf 0.00778746, total time[s] 0.128589 +Converged at iteration 25, L1 6.50938e-05, Linf 0.00943879, total time[s] 0.126917 +Converged at iteration 21, L1 6.15803e-05, Linf 0.00699754, total time[s] 0.101305 +Converged at iteration 23, L1 6.69117e-05, Linf 0.00381559, total time[s] 0.112053 +Converged at iteration 22, L1 6.94778e-05, Linf 0.00762634, total time[s] 0.104534 +Converged at iteration 21, L1 3.38972e-05, Linf 0.00647348, total time[s] 0.10101 +Converged at iteration 24, L1 9.84807e-05, Linf 0.00670125, total time[s] 0.113131 +Converged at iteration 24, L1 7.25617e-05, Linf 0.00479134, total time[s] 0.127368 +Converged at iteration 19, L1 9.43622e-05, Linf 0.00518928, total time[s] 0.085769 +Converged at iteration 22, L1 6.62384e-05, Linf 0.0028432, total time[s] 0.104424 +Converged at iteration 20, L1 7.95365e-05, Linf 0.00458636, total time[s] 0.089064 +Converged at iteration 31, L1 9.13049e-05, Linf 0.0101269, total time[s] 0.153343 +Converged at iteration 26, L1 9.80087e-05, Linf 0.00408361, total time[s] 0.118663 +Converged at iteration 22, L1 9.80063e-05, Linf 0.00550017, total time[s] 0.096744 +Converged at iteration 24, L1 6.46136e-05, Linf 0.00203344, total time[s] 0.110567 +Converged at iteration 27, L1 7.69337e-05, Linf 0.00246688, total time[s] 0.136105 +Converged at iteration 23, L1 9.74445e-05, Linf 0.00520546, total time[s] 0.104762 +Converged at iteration 23, L1 9.07638e-05, Linf 0.00314887, total time[s] 0.127179 +Converged at iteration 32, L1 8.93105e-05, Linf 0.00937399, total time[s] 0.154974 +Converged at iteration 27, L1 6.57619e-05, Linf 0.00432275, total time[s] 0.132283 +Converged at iteration 30, L1 9.73776e-05, Linf 0.0139998, total time[s] 0.151751 +Converged at iteration 30, L1 8.52506e-05, Linf 0.00279566, total time[s] 0.187461 +Converged at iteration 32, L1 8.30189e-05, Linf 0.00492965, total time[s] 0.185204 +Converged at iteration 31, L1 7.33958e-05, Linf 0.00528352, total time[s] 0.14601 +Converged at iteration 27, L1 6.77599e-05, Linf 0.00733834, total time[s] 0.118529 +Converged at iteration 32, L1 6.32181e-05, Linf 0.024638, total time[s] 0.15126 +Converged at iteration 26, L1 5.15587e-05, Linf 0.00484237, total time[s] 0.116206 +Converged at iteration 25, L1 6.7525e-05, Linf 0.00353224, total time[s] 0.101878 +Converged at iteration 35, L1 7.72863e-05, Linf 0.0268312, total time[s] 0.182688 +Converged at iteration 37, L1 5.02259e-05, Linf 0.0241002, total time[s] 0.200796 +Converged at iteration 25, L1 6.56999e-05, Linf 0.00984284, total time[s] 0.128315 +Converged at iteration 27, L1 4.8002e-05, Linf 0.00631026, total time[s] 0.154284 +Converged at iteration 21, L1 6.25528e-05, Linf 0.00624135, total time[s] 0.119223 +Converged at iteration 22, L1 6.41207e-05, Linf 0.00249868, total time[s] 0.15869 +Converged at iteration 23, L1 4.54588e-05, Linf 0.00662395, total time[s] 0.135641 +Converged at iteration 21, L1 4.35663e-05, Linf 0.00784772, total time[s] 0.130799 +Converged at iteration 25, L1 6.19939e-05, Linf 0.0058434, total time[s] 0.187791 +Converged at iteration 25, L1 5.16353e-05, Linf 0.00509538, total time[s] 0.14972 +Converged at iteration 19, L1 9.53237e-05, Linf 0.00532987, total time[s] 0.15967 +Converged at iteration 22, L1 8.06127e-05, Linf 0.00384772, total time[s] 0.209019 +Converged at iteration 20, L1 9.55532e-05, Linf 0.00557951, total time[s] 0.102381 +Converged at iteration 32, L1 3.28961e-05, Linf 0.00537098, total time[s] 0.223024 +Converged at iteration 27, L1 8.22281e-05, Linf 0.00252794, total time[s] 0.218271 +Converged at iteration 23, L1 6.82264e-05, Linf 0.004598, total time[s] 0.158942 +Converged at iteration 24, L1 8.132e-05, Linf 0.00304434, total time[s] 0.192765 +Converged at iteration 27, L1 9.40442e-05, Linf 0.00307904, total time[s] 0.23369 +Converged at iteration 23, L1 9.57974e-05, Linf 0.00603097, total time[s] 0.205583 +Converged at iteration 24, L1 5.7451e-05, Linf 0.00240847, total time[s] 0.176432 +Converged at iteration 33, L1 5.20859e-05, Linf 0.00529488, total time[s] 0.213804 +Converged at iteration 27, L1 9.75755e-05, Linf 0.00574228, total time[s] 0.180981 +Converged at iteration 31, L1 4.23576e-05, Linf 0.00728041, total time[s] 0.175504 +Converged at iteration 30, L1 8.80844e-05, Linf 0.00252322, total time[s] 0.225976 +Converged at iteration 33, L1 4.24238e-05, Linf 0.00368859, total time[s] 0.175438 +Converged at iteration 31, L1 8.81639e-05, Linf 0.0067371, total time[s] 0.213326 +Converged at iteration 27, L1 5.7641e-05, Linf 0.0068364, total time[s] 0.184815 +Converged at iteration 26, L1 6.98268e-05, Linf 0.00680034, total time[s] 0.176811 +Converged at iteration 32, L1 9.06995e-05, Linf 0.0299527, total time[s] 0.190183 +Converged at iteration 25, L1 7.48252e-05, Linf 0.00569669, total time[s] 0.11582 +Converged at iteration 36, L1 2.39165e-05, Linf 0.0106404, total time[s] 0.169377 +Converged at iteration 37, L1 9.99983e-05, Linf 0.0303431, total time[s] 0.183849 +Converged at iteration 26, L1 7.924e-05, Linf 0.00727624, total time[s] 0.125489 +Converged at iteration 25, L1 7.58915e-05, Linf 0.0105731, total time[s] 0.127932 +Converged at iteration 21, L1 6.23398e-05, Linf 0.00594465, total time[s] 0.096763 +Converged at iteration 21, L1 9.30062e-05, Linf 0.00346562, total time[s] 0.102653 +Converged at iteration 23, L1 7.53846e-05, Linf 0.0108131, total time[s] 0.113175 +Converged at iteration 21, L1 4.97076e-05, Linf 0.00795149, total time[s] 0.137654 +Converged at iteration 25, L1 6.90849e-05, Linf 0.00741874, total time[s] 0.18561 +Converged at iteration 25, L1 7.37969e-05, Linf 0.00830976, total time[s] 0.205613 +Converged at iteration 19, L1 9.27621e-05, Linf 0.00491126, total time[s] 0.185608 +Converged at iteration 22, L1 9.02271e-05, Linf 0.00479164, total time[s] 0.125266 +Converged at iteration 32, L1 3.58623e-05, Linf 0.00525933, total time[s] 0.197497 +Converged at iteration 21, L1 6.46018e-05, Linf 0.0046448, total time[s] 0.21513 +Converged at iteration 23, L1 8.47422e-05, Linf 0.00550169, total time[s] 0.123222 +Converged at iteration 27, L1 9.63207e-05, Linf 0.00301858, total time[s] 0.136242 +Converged at iteration 28, L1 5.84218e-05, Linf 0.00217642, total time[s] 0.134878 +Converged at iteration 25, L1 5.08327e-05, Linf 0.00305491, total time[s] 0.134648 +Converged at iteration 24, L1 6.74106e-05, Linf 0.00270237, total time[s] 0.146397 +Converged at iteration 24, L1 6.86144e-05, Linf 0.00536374, total time[s] 0.186269 +Converged at iteration 28, L1 7.93351e-05, Linf 0.00552078, total time[s] 0.22159 +Converged at iteration 33, L1 6.56481e-05, Linf 0.00616298, total time[s] 0.186185 +Converged at iteration 30, L1 8.85202e-05, Linf 0.00223219, total time[s] 0.213453 +Converged at iteration 30, L1 9.81601e-05, Linf 0.0165813, total time[s] 0.154093 +Converged at iteration 31, L1 9.11779e-05, Linf 0.00712863, total time[s] 0.14597 +Converged at iteration 33, L1 5.30424e-05, Linf 0.00460957, total time[s] 0.146781 +Converged at iteration 33, L1 3.99048e-05, Linf 0.0222754, total time[s] 0.149408 +Converged at iteration 27, L1 4.44481e-05, Linf 0.0051892, total time[s] 0.120883 +Converged at iteration 25, L1 8.2013e-05, Linf 0.00731899, total time[s] 0.117668 +Converged at iteration 26, L1 8.79714e-05, Linf 0.00860378, total time[s] 0.114956 +Converged at iteration 36, L1 4.14989e-05, Linf 0.0147561, total time[s] 0.164049 +Converged at iteration 38, L1 6.95096e-05, Linf 0.0230451, total time[s] 0.174923 +Converged at iteration 25, L1 9.31471e-05, Linf 0.0108171, total time[s] 0.117549 +Converged at iteration 27, L1 4.12526e-05, Linf 0.00536485, total time[s] 0.124575 +Converged at iteration 21, L1 6.86785e-05, Linf 0.00623095, total time[s] 0.099669 +Converged at iteration 22, L1 9.55113e-05, Linf 0.00408457, total time[s] 0.10621 +Converged at iteration 24, L1 4.04087e-05, Linf 0.00742269, total time[s] 0.116292 +Converged at iteration 21, L1 5.09449e-05, Linf 0.00626751, total time[s] 0.099429 +Converged at iteration 25, L1 8.48528e-05, Linf 0.010236, total time[s] 0.112341 +Converged at iteration 25, L1 6.88932e-05, Linf 0.00774202, total time[s] 0.137959 +Converged at iteration 22, L1 9.38285e-05, Linf 0.00555657, total time[s] 0.099791 +Converged at iteration 19, L1 8.97849e-05, Linf 0.00398879, total time[s] 0.090686 +Converged at iteration 21, L1 7.54993e-05, Linf 0.00522575, total time[s] 0.102253 +Converged at iteration 32, L1 3.6155e-05, Linf 0.00449932, total time[s] 0.143421 +Converged at iteration 27, L1 8.50623e-05, Linf 0.00292286, total time[s] 0.12662 +Converged at iteration 23, L1 9.99002e-05, Linf 0.00602144, total time[s] 0.112621 +Converged at iteration 25, L1 6.40371e-05, Linf 0.00510941, total time[s] 0.124631 +Converged at iteration 28, L1 6.3865e-05, Linf 0.00251341, total time[s] 0.140631 +Converged at iteration 25, L1 6.11966e-05, Linf 0.00508183, total time[s] 0.150524 +Converged at iteration 24, L1 7.65837e-05, Linf 0.0030812, total time[s] 0.134283 +Converged at iteration 29, L1 6.55111e-05, Linf 0.00505338, total time[s] 0.142819 +Converged at iteration 33, L1 6.8141e-05, Linf 0.0057289, total time[s] 0.159496 +Converged at iteration 30, L1 8.52411e-05, Linf 0.00184375, total time[s] 0.165582 +Converged at iteration 30, L1 8.22005e-05, Linf 0.014535, total time[s] 0.15749 +Converged at iteration 31, L1 7.64039e-05, Linf 0.00533123, total time[s] 0.148155 +Converged at iteration 33, L1 5.90296e-05, Linf 0.00492671, total time[s] 0.227163 +Converged at iteration 34, L1 2.32545e-05, Linf 0.0158842, total time[s] 0.151141 +Converged at iteration 26, L1 6.67433e-05, Linf 0.00435786, total time[s] 0.125799 +Converged at iteration 25, L1 8.87154e-05, Linf 0.00839726, total time[s] 0.14414 +Converged at iteration 26, L1 9.86653e-05, Linf 0.00990828, total time[s] 0.157878 +Converged at iteration 36, L1 6.00428e-05, Linf 0.0169755, total time[s] 0.16042 +Converged at iteration 39, L1 4.04946e-05, Linf 0.0158424, total time[s] 0.204871 +Converged at iteration 27, L1 9.36684e-05, Linf 0.00646011, total time[s] 0.129328 +Converged at iteration 25, L1 7.5657e-05, Linf 0.00960712, total time[s] 0.164716 +Converged at iteration 21, L1 8.52589e-05, Linf 0.00664966, total time[s] 0.108414 +Converged at iteration 23, L1 6.28331e-05, Linf 0.00347774, total time[s] 0.145651 +Converged at iteration 24, L1 4.61223e-05, Linf 0.00909485, total time[s] 0.139576 +Converged at iteration 21, L1 5.35987e-05, Linf 0.00457672, total time[s] 0.113091 +Converged at iteration 25, L1 6.79938e-05, Linf 0.00803958, total time[s] 0.130519 +Converged at iteration 25, L1 8.60762e-05, Linf 0.0111156, total time[s] 0.122039 +Converged at iteration 19, L1 9.41807e-05, Linf 0.00332076, total time[s] 0.090876 +Converged at iteration 21, L1 9.06453e-05, Linf 0.00569908, total time[s] 0.100119 +Converged at iteration 22, L1 9.94556e-05, Linf 0.00654892, total time[s] 0.12381 +Converged at iteration 27, L1 6.97688e-05, Linf 0.00238288, total time[s] 0.134409 +Converged at iteration 32, L1 3.77376e-05, Linf 0.00509364, total time[s] 0.171398 +Converged at iteration 24, L1 6.12487e-05, Linf 0.0042523, total time[s] 0.11369 +Converged at iteration 25, L1 7.63906e-05, Linf 0.00711265, total time[s] 0.150968 +Converged at iteration 28, L1 6.63152e-05, Linf 0.00272715, total time[s] 0.128642 +Converged at iteration 25, L1 8.27187e-05, Linf 0.00638817, total time[s] 0.190044 +Converged at iteration 24, L1 8.06925e-05, Linf 0.00333386, total time[s] 0.141569 +Converged at iteration 33, L1 6.91068e-05, Linf 0.00599081, total time[s] 0.151626 +Converged at iteration 30, L1 5.85196e-05, Linf 0.00477303, total time[s] 0.139959 +Converged at iteration 30, L1 6.40548e-05, Linf 0.0118804, total time[s] 0.153395 +Converged at iteration 30, L1 9.04661e-05, Linf 0.00209011, total time[s] 0.183926 +Converged at iteration 33, L1 6.27883e-05, Linf 0.00476832, total time[s] 0.151975 +Converged at iteration 31, L1 5.8362e-05, Linf 0.00355532, total time[s] 0.155869 +Converged at iteration 26, L1 5.46959e-05, Linf 0.00320966, total time[s] 0.136609 +Converged at iteration 34, L1 5.12534e-05, Linf 0.0209744, total time[s] 0.193956 +Converged at iteration 27, L1 5.51607e-05, Linf 0.00615459, total time[s] 0.16926 +Converged at iteration 25, L1 9.48188e-05, Linf 0.0091232, total time[s] 0.127908 +Converged at iteration 36, L1 4.87094e-05, Linf 0.0133979, total time[s] 0.169766 +Converged at iteration 39, L1 5.52161e-05, Linf 0.0144834, total time[s] 0.182034 +Converged at iteration 27, L1 5.63033e-05, Linf 0.00432825, total time[s] 0.123599 +Converged at iteration 25, L1 5.55439e-05, Linf 0.00924898, total time[s] 0.115059 +Converged at iteration 22, L1 6.49857e-05, Linf 0.00458989, total time[s] 0.101524 +Converged at iteration 24, L1 6.88941e-05, Linf 0.00378371, total time[s] 0.106548 +Converged at iteration 24, L1 3.80451e-05, Linf 0.0108259, total time[s] 0.11774 +Converged at iteration 21, L1 3.99663e-05, Linf 0.00448027, total time[s] 0.106743 +Converged at iteration 25, L1 5.42776e-05, Linf 0.00652263, total time[s] 0.117683 +Converged at iteration 25, L1 7.3571e-05, Linf 0.00927602, total time[s] 0.119045 +Converged at iteration 19, L1 6.2979e-05, Linf 0.00228376, total time[s] 0.09411 +Converged at iteration 22, L1 8.20331e-05, Linf 0.00641525, total time[s] 0.105478 +Converged at iteration 22, L1 6.17064e-05, Linf 0.0049964, total time[s] 0.110817 +Converged at iteration 31, L1 9.24563e-05, Linf 0.00794568, total time[s] 0.17104 +Converged at iteration 26, L1 7.88911e-05, Linf 0.00737181, total time[s] 0.129413 +Converged at iteration 24, L1 7.19945e-05, Linf 0.00546369, total time[s] 0.107309 +Converged at iteration 25, L1 7.18469e-05, Linf 0.00805291, total time[s] 0.117258 +Converged at iteration 28, L1 5.46841e-05, Linf 0.0026133, total time[s] 0.165924 +Converged at iteration 27, L1 6.87112e-05, Linf 0.00530574, total time[s] 0.129811 +Converged at iteration 33, L1 7.49817e-05, Linf 0.0076345, total time[s] 0.154567 +Converged at iteration 25, L1 6.72533e-05, Linf 0.00319192, total time[s] 0.138235 +Converged at iteration 29, L1 7.47368e-05, Linf 0.00336738, total time[s] 0.162207 +Converged at iteration 30, L1 4.4458e-05, Linf 0.00744249, total time[s] 0.141118 +Converged at iteration 33, L1 6.48571e-05, Linf 0.00533399, total time[s] 0.166247 +Converged at iteration 31, L1 5.94295e-05, Linf 0.00168708, total time[s] 0.184476 +Converged at iteration 26, L1 5.46868e-05, Linf 0.00292791, total time[s] 0.130982 +Converged at iteration 29, L1 9.44349e-05, Linf 0.00843857, total time[s] 0.134814 +Converged at iteration 26, L1 9.48766e-05, Linf 0.0103126, total time[s] 0.133787 +Converged at iteration 34, L1 7.19284e-05, Linf 0.0185398, total time[s] 0.141726 +Converged at iteration 25, L1 9.90445e-05, Linf 0.00864, total time[s] 0.105049 +Converged at iteration 36, L1 7.10015e-05, Linf 0.0162177, total time[s] 0.162985 +Converged at iteration 39, L1 7.87666e-05, Linf 0.0173467, total time[s] 0.171056 +Converged at iteration 27, L1 8.88646e-05, Linf 0.00547725, total time[s] 0.122474 +Converged at iteration 25, L1 5.45357e-05, Linf 0.00812095, total time[s] 0.125149 +Converged at iteration 22, L1 6.00036e-05, Linf 0.0043928, total time[s] 0.101912 +Converged at iteration 23, L1 9.31943e-05, Linf 0.00434301, total time[s] 0.113782 +Converged at iteration 24, L1 4.6371e-05, Linf 0.0109527, total time[s] 0.109816 +Converged at iteration 21, L1 4.80055e-05, Linf 0.00516234, total time[s] 0.129148 +Converged at iteration 25, L1 5.77352e-05, Linf 0.00737348, total time[s] 0.114298 +Converged at iteration 25, L1 7.87604e-05, Linf 0.0101381, total time[s] 0.116282 +Converged at iteration 19, L1 6.75366e-05, Linf 0.00270609, total time[s] 0.089703 +Converged at iteration 22, L1 8.95139e-05, Linf 0.0072816, total time[s] 0.110619 +Converged at iteration 22, L1 6.06187e-05, Linf 0.00492439, total time[s] 0.103245 +Converged at iteration 32, L1 5.18252e-05, Linf 0.00554886, total time[s] 0.157547 +Converged at iteration 26, L1 8.35001e-05, Linf 0.00777124, total time[s] 0.119565 +Converged at iteration 24, L1 7.71474e-05, Linf 0.00506441, total time[s] 0.112955 +Converged at iteration 25, L1 8.29948e-05, Linf 0.00897507, total time[s] 0.112404 +Converged at iteration 26, L1 9.64613e-05, Linf 0.00650145, total time[s] 0.117497 +Converged at iteration 28, L1 5.82959e-05, Linf 0.00327422, total time[s] 0.130739 +Converged at iteration 25, L1 5.84998e-05, Linf 0.002914, total time[s] 0.116967 +Converged at iteration 33, L1 8.02878e-05, Linf 0.00820958, total time[s] 0.151552 +Converged at iteration 30, L1 6.29038e-05, Linf 0.00403792, total time[s] 0.143365 +Converged at iteration 30, L1 4.61339e-05, Linf 0.00809822, total time[s] 0.135048 +Converged at iteration 30, L1 9.9725e-05, Linf 0.00236626, total time[s] 0.140373 +Converged at iteration 33, L1 6.83859e-05, Linf 0.00544297, total time[s] 0.154868 +Converged at iteration 30, L1 5.18691e-05, Linf 0.00359651, total time[s] 0.139441 +Converged at iteration 26, L1 4.43347e-05, Linf 0.0020176, total time[s] 0.116423 +Converged at iteration 27, L1 5.38292e-05, Linf 0.00628627, total time[s] 0.124771 +Converged at iteration 34, L1 8.30813e-05, Linf 0.0209341, total time[s] 0.155131 +Converged at iteration 26, L1 4.22233e-05, Linf 0.00345182, total time[s] 0.102609 +Converged at iteration 36, L1 8.96062e-05, Linf 0.0177842, total time[s] 0.162638 +Converged at iteration 39, L1 8.37321e-05, Linf 0.0175545, total time[s] 0.175797 +Converged at iteration 28, L1 6.03309e-05, Linf 0.00543763, total time[s] 0.126331 +Converged at iteration 25, L1 6.12689e-05, Linf 0.00651782, total time[s] 0.11432 +Converged at iteration 22, L1 5.37537e-05, Linf 0.004174, total time[s] 0.100485 +Converged at iteration 23, L1 7.64077e-05, Linf 0.00394378, total time[s] 0.102501 +Converged at iteration 24, L1 6.0057e-05, Linf 0.0123705, total time[s] 0.110212 +Converged at iteration 21, L1 6.21865e-05, Linf 0.0060012, total time[s] 0.097879 +Converged at iteration 25, L1 8.46235e-05, Linf 0.0108617, total time[s] 0.117142 +Converged at iteration 25, L1 6.0793e-05, Linf 0.00828773, total time[s] 0.130094 +Converged at iteration 19, L1 7.95197e-05, Linf 0.00315183, total time[s] 0.095551 +Converged at iteration 22, L1 9.87503e-05, Linf 0.0087843, total time[s] 0.10383 +Converged at iteration 22, L1 5.80224e-05, Linf 0.00506091, total time[s] 0.103577 +Converged at iteration 32, L1 6.64762e-05, Linf 0.00830451, total time[s] 0.140124 +Converged at iteration 26, L1 9.43721e-05, Linf 0.00998503, total time[s] 0.117549 +Converged at iteration 24, L1 7.52819e-05, Linf 0.00494378, total time[s] 0.108173 +Converged at iteration 25, L1 9.90173e-05, Linf 0.0105511, total time[s] 0.132597 +Converged at iteration 28, L1 6.11829e-05, Linf 0.00291157, total time[s] 0.126819 +Converged at iteration 24, L1 9.02715e-05, Linf 0.00393677, total time[s] 0.108008 +Converged at iteration 26, L1 8.32002e-05, Linf 0.00607656, total time[s] 0.131971 +Converged at iteration 30, L1 7.35792e-05, Linf 0.0049034, total time[s] 0.137396 +Converged at iteration 33, L1 8.48018e-05, Linf 0.00827242, total time[s] 0.159272 +Converged at iteration 30, L1 9.23624e-05, Linf 0.00223966, total time[s] 0.142638 +Converged at iteration 30, L1 4.59355e-05, Linf 0.00636766, total time[s] 0.139793 +Converged at iteration 29, L1 9.48877e-05, Linf 0.00666087, total time[s] 0.135197 +Converged at iteration 33, L1 7.33926e-05, Linf 0.00572206, total time[s] 0.147702 +Converged at iteration 26, L1 9.82953e-05, Linf 0.0041176, total time[s] 0.124906 +Converged at iteration 34, L1 9.44813e-05, Linf 0.0224745, total time[s] 0.155396 +Converged at iteration 27, L1 5.83202e-05, Linf 0.0070212, total time[s] 0.13774 +Converged at iteration 26, L1 4.2769e-05, Linf 0.00369225, total time[s] 0.127027 +Converged at iteration 36, L1 7.11392e-05, Linf 0.0158828, total time[s] 0.161155 +Converged at iteration 39, L1 7.97427e-05, Linf 0.017295, total time[s] 0.175959 +Converged at iteration 25, L1 5.70467e-05, Linf 0.00702643, total time[s] 0.115379 +Converged at iteration 27, L1 7.64774e-05, Linf 0.00496537, total time[s] 0.137448 +Converged at iteration 24, L1 5.93917e-05, Linf 0.00344832, total time[s] 0.105754 +Converged at iteration 22, L1 6.21996e-05, Linf 0.00462555, total time[s] 0.11497 +Converged at iteration 21, L1 5.03232e-05, Linf 0.00550407, total time[s] 0.092213 +Converged at iteration 24, L1 5.01161e-05, Linf 0.0135418, total time[s] 0.113524 +Converged at iteration 25, L1 7.7374e-05, Linf 0.00973372, total time[s] 0.113187 +Converged at iteration 25, L1 5.45399e-05, Linf 0.00741219, total time[s] 0.129121 +Converged at iteration 22, L1 8.91853e-05, Linf 0.00804432, total time[s] 0.098187 +Converged at iteration 19, L1 6.3424e-05, Linf 0.00263719, total time[s] 0.091194 +Converged at iteration 22, L1 6.24477e-05, Linf 0.00504423, total time[s] 0.101817 +Converged at iteration 32, L1 5.21375e-05, Linf 0.00655265, total time[s] 0.133958 +Converged at iteration 26, L1 8.83245e-05, Linf 0.00903849, total time[s] 0.119186 +Converged at iteration 24, L1 7.86662e-05, Linf 0.00518844, total time[s] 0.105973 +Converged at iteration 25, L1 8.91655e-05, Linf 0.0101107, total time[s] 0.13274 +Converged at iteration 28, L1 5.51152e-05, Linf 0.00346328, total time[s] 0.135216 +Converged at iteration 27, L1 6.30165e-05, Linf 0.00508829, total time[s] 0.123645 +Converged at iteration 25, L1 6.36878e-05, Linf 0.00316783, total time[s] 0.112282 +Converged at iteration 33, L1 8.85433e-05, Linf 0.00969366, total time[s] 0.151842 +Converged at iteration 29, L1 9.59773e-05, Linf 0.00463616, total time[s] 0.131965 +Converged at iteration 30, L1 3.93277e-05, Linf 0.00658077, total time[s] 0.164888 +Converged at iteration 31, L1 6.0318e-05, Linf 0.00181175, total time[s] 0.137772 +Converged at iteration 33, L1 7.0209e-05, Linf 0.00562325, total time[s] 0.144994 +Converged at iteration 29, L1 9.113e-05, Linf 0.00744686, total time[s] 0.128695 +Converged at iteration 26, L1 4.65958e-05, Linf 0.0019998, total time[s] 0.116946 +Converged at iteration 34, L1 8.38503e-05, Linf 0.0202569, total time[s] 0.148252 +Converged at iteration 27, L1 5.47378e-05, Linf 0.00648116, total time[s] 0.124245 +Converged at iteration 26, L1 4.34117e-05, Linf 0.00365001, total time[s] 0.114 +Converged at iteration 39, L1 8.22154e-05, Linf 0.0168321, total time[s] 0.175762 +Converged at iteration 36, L1 8.27524e-05, Linf 0.0168538, total time[s] 0.174745 +Converged at iteration 25, L1 7.34758e-05, Linf 0.00592364, total time[s] 0.112971 +Converged at iteration 28, L1 5.09057e-05, Linf 0.00472701, total time[s] 0.128486 +Converged at iteration 23, L1 8.42125e-05, Linf 0.00417526, total time[s] 0.105708 +Converged at iteration 22, L1 5.79026e-05, Linf 0.00441003, total time[s] 0.103275 +Converged at iteration 21, L1 6.14156e-05, Linf 0.00592565, total time[s] 0.095648 +Converged at iteration 24, L1 6.13467e-05, Linf 0.0149195, total time[s] 0.115064 +Converged at iteration 25, L1 8.34807e-05, Linf 0.0104497, total time[s] 0.114643 +Converged at iteration 25, L1 5.88802e-05, Linf 0.0083246, total time[s] 0.121486 +Converged at iteration 22, L1 9.73295e-05, Linf 0.00933049, total time[s] 0.098787 +Converged at iteration 19, L1 7.19714e-05, Linf 0.00293532, total time[s] 0.098624 +Converged at iteration 22, L1 5.9325e-05, Linf 0.00517865, total time[s] 0.103139 +Converged at iteration 32, L1 6.79872e-05, Linf 0.00724679, total time[s] 0.151527 +Converged at iteration 26, L1 9.50549e-05, Linf 0.0110438, total time[s] 0.124192 +Converged at iteration 24, L1 7.74413e-05, Linf 0.00502941, total time[s] 0.130325 +Converged at iteration 26, L1 4.7864e-05, Linf 0.00619401, total time[s] 0.116915 +Converged at iteration 28, L1 5.90021e-05, Linf 0.00297209, total time[s] 0.128233 +Converged at iteration 26, L1 9.34289e-05, Linf 0.00650858, total time[s] 0.125507 +Converged at iteration 24, L1 9.8363e-05, Linf 0.00426338, total time[s] 0.110703 +Converged at iteration 33, L1 8.82388e-05, Linf 0.00849629, total time[s] 0.153692 +Converged at iteration 30, L1 6.83782e-05, Linf 0.00453909, total time[s] 0.133075 +Converged at iteration 30, L1 9.88207e-05, Linf 0.0025054, total time[s] 0.138215 +Converged at iteration 30, L1 3.92981e-05, Linf 0.00458732, total time[s] 0.137316 +Converged at iteration 29, L1 8.07039e-05, Linf 0.00663503, total time[s] 0.137522 +Converged at iteration 33, L1 7.43785e-05, Linf 0.00605147, total time[s] 0.148816 +Converged at iteration 26, L1 9.79564e-05, Linf 0.00428126, total time[s] 0.121449 +Converged at iteration 34, L1 9.34544e-05, Linf 0.0218366, total time[s] 0.165651 +Converged at iteration 27, L1 5.72853e-05, Linf 0.00704866, total time[s] 0.125612 +Converged at iteration 26, L1 4.66402e-05, Linf 0.00318423, total time[s] 0.120307 +Converged at iteration 36, L1 6.93652e-05, Linf 0.0153316, total time[s] 0.161949 +Converged at iteration 39, L1 7.75008e-05, Linf 0.0162682, total time[s] 0.17634 +Converged at iteration 27, L1 6.9059e-05, Linf 0.00470913, total time[s] 0.122984 +Converged at iteration 25, L1 7.78914e-05, Linf 0.00621682, total time[s] 0.119471 +Converged at iteration 22, L1 6.42203e-05, Linf 0.00477494, total time[s] 0.101464 +Converged at iteration 24, L1 6.29038e-05, Linf 0.0036439, total time[s] 0.1085 +Converged at iteration 21, L1 5.14762e-05, Linf 0.00560895, total time[s] 0.096153 +Converged at iteration 24, L1 5.15281e-05, Linf 0.0117318, total time[s] 0.109313 +Converged at iteration 25, L1 7.69206e-05, Linf 0.00930662, total time[s] 0.112644 +Converged at iteration 25, L1 5.32348e-05, Linf 0.00740806, total time[s] 0.114586 +Converged at iteration 19, L1 5.86525e-05, Linf 0.00246641, total time[s] 0.089586 +Converged at iteration 22, L1 8.89401e-05, Linf 0.00860857, total time[s] 0.101385 +Converged at iteration 22, L1 6.30939e-05, Linf 0.00513066, total time[s] 0.10138 +Converged at iteration 32, L1 5.17349e-05, Linf 0.00647197, total time[s] 0.144508 +Converged at iteration 26, L1 9.97122e-05, Linf 0.0103033, total time[s] 0.116081 +Converged at iteration 24, L1 7.92791e-05, Linf 0.00528055, total time[s] 0.122948 +Converged at iteration 25, L1 9.35072e-05, Linf 0.0109753, total time[s] 0.119169 +Converged at iteration 28, L1 5.26956e-05, Linf 0.00351132, total time[s] 0.124482 +Converged at iteration 27, L1 6.99648e-05, Linf 0.0054369, total time[s] 0.124638 +Converged at iteration 25, L1 6.87143e-05, Linf 0.00338033, total time[s] 0.114215 +Converged at iteration 33, L1 9.44182e-05, Linf 0.0101744, total time[s] 0.147386 +Converged at iteration 29, L1 8.89802e-05, Linf 0.00415237, total time[s] 0.128258 +Converged at iteration 30, L1 3.7421e-05, Linf 0.00464793, total time[s] 0.132307 +Converged at iteration 31, L1 6.46451e-05, Linf 0.00203179, total time[s] 0.139267 +Converged at iteration 33, L1 7.25887e-05, Linf 0.00578367, total time[s] 0.141494 +Converged at iteration 30, L1 3.73436e-05, Linf 0.00344957, total time[s] 0.137921 +Converged at iteration 26, L1 4.95255e-05, Linf 0.00211576, total time[s] 0.127836 +Converged at iteration 34, L1 8.23221e-05, Linf 0.0194363, total time[s] 0.171505 +Converged at iteration 27, L1 5.37124e-05, Linf 0.00647592, total time[s] 0.122076 +Converged at iteration 26, L1 4.41376e-05, Linf 0.00370449, total time[s] 0.116939 +Converged at iteration 36, L1 7.7199e-05, Linf 0.0159577, total time[s] 0.163758 +Converged at iteration 39, L1 8.20806e-05, Linf 0.0171644, total time[s] 0.178987 +Converged at iteration 28, L1 4.09714e-05, Linf 0.00421247, total time[s] 0.127953 +Converged at iteration 25, L1 9.50018e-05, Linf 0.00542886, total time[s] 0.117031 +Converged at iteration 22, L1 6.18797e-05, Linf 0.00461972, total time[s] 0.102194 +Converged at iteration 23, L1 9.30937e-05, Linf 0.00440505, total time[s] 0.106285 +Converged at iteration 24, L1 6.11408e-05, Linf 0.0144329, total time[s] 0.110898 +Converged at iteration 21, L1 5.9499e-05, Linf 0.00582897, total time[s] 0.098329 +Converged at iteration 25, L1 5.69715e-05, Linf 0.00816651, total time[s] 0.111683 +Converged at iteration 25, L1 8.17205e-05, Linf 0.0099718, total time[s] 0.11448 +Converged at iteration 19, L1 6.37003e-05, Linf 0.00269807, total time[s] 0.088926 +Converged at iteration 22, L1 9.49935e-05, Linf 0.00955815, total time[s] 0.102159 +Converged at iteration 22, L1 6.13546e-05, Linf 0.00527978, total time[s] 0.095702 +Converged at iteration 32, L1 6.61557e-05, Linf 0.00728083, total time[s] 0.148275 +Converged at iteration 27, L1 5.03036e-05, Linf 0.00728239, total time[s] 0.116203 +Converged at iteration 24, L1 7.98041e-05, Linf 0.00512209, total time[s] 0.112196 +Converged at iteration 26, L1 4.79117e-05, Linf 0.00653371, total time[s] 0.116266 +Converged at iteration 28, L1 5.60906e-05, Linf 0.00391298, total time[s] 0.163687 +Converged at iteration 27, L1 6.17075e-05, Linf 0.00496168, total time[s] 0.11908 +Converged at iteration 25, L1 5.97421e-05, Linf 0.00310542, total time[s] 0.129736 +Converged at iteration 33, L1 9.32771e-05, Linf 0.00906414, total time[s] 0.144734 +Converged at iteration 30, L1 6.30718e-05, Linf 0.00413918, total time[s] 0.136443 +Converged at iteration 30, L1 3.59714e-05, Linf 0.00383224, total time[s] 0.131507 +Converged at iteration 31, L1 5.97164e-05, Linf 0.00187746, total time[s] 0.134561 +Converged at iteration 33, L1 7.36637e-05, Linf 0.00596084, total time[s] 0.143072 +Converged at iteration 29, L1 8.84206e-05, Linf 0.00728639, total time[s] 0.128058 +Converged at iteration 26, L1 9.10872e-05, Linf 0.00413382, total time[s] 0.114816 +Converged at iteration 34, L1 9.01127e-05, Linf 0.0209345, total time[s] 0.164982 +Converged at iteration 27, L1 5.65591e-05, Linf 0.00713511, total time[s] 0.121945 +Converged at iteration 26, L1 5.03759e-05, Linf 0.00284605, total time[s] 0.103414 +Converged at iteration 36, L1 6.58105e-05, Linf 0.0145177, total time[s] 0.159721 +Converged at iteration 39, L1 7.43702e-05, Linf 0.0158802, total time[s] 0.186262 +Converged at iteration 27, L1 5.89292e-05, Linf 0.00419521, total time[s] 0.121359 +Converged at iteration 26, L1 8.58494e-05, Linf 0.00341946, total time[s] 0.118564 +Converged at iteration 22, L1 7.22758e-05, Linf 0.00496795, total time[s] 0.098565 +Converged at iteration 24, L1 7.12181e-05, Linf 0.00387511, total time[s] 0.107119 +Converged at iteration 24, L1 5.55048e-05, Linf 0.0109088, total time[s] 0.113395 +Converged at iteration 21, L1 5.45295e-05, Linf 0.00584762, total time[s] 0.094141 +Converged at iteration 25, L1 5.05403e-05, Linf 0.00749037, total time[s] 0.11708 +Converged at iteration 25, L1 7.79222e-05, Linf 0.00861741, total time[s] 0.115394 +Converged at iteration 19, L1 5.45391e-05, Linf 0.00223894, total time[s] 0.088713 +Converged at iteration 22, L1 9.08446e-05, Linf 0.00939019, total time[s] 0.09729 +Converged at iteration 22, L1 6.4148e-05, Linf 0.00521593, total time[s] 0.09965 +Converged at iteration 32, L1 4.72417e-05, Linf 0.00489242, total time[s] 0.15632 +Converged at iteration 27, L1 6.33665e-05, Linf 0.00692182, total time[s] 0.12875 +Converged at iteration 24, L1 8.00806e-05, Linf 0.00537307, total time[s] 0.120394 +Converged at iteration 26, L1 4.80097e-05, Linf 0.00701095, total time[s] 0.116349 +Converged at iteration 28, L1 5.10449e-05, Linf 0.00343781, total time[s] 0.123703 +Converged at iteration 27, L1 8.15685e-05, Linf 0.00586366, total time[s] 0.120154 +Converged at iteration 25, L1 7.49559e-05, Linf 0.00363459, total time[s] 0.12271 +Converged at iteration 34, L1 5.42497e-05, Linf 0.0082434, total time[s] 0.149122 +Converged at iteration 29, L1 7.8227e-05, Linf 0.00346627, total time[s] 0.132984 +Converged at iteration 29, L1 9.12514e-05, Linf 0.00963694, total time[s] 0.126454 +Converged at iteration 31, L1 7.32948e-05, Linf 0.00241892, total time[s] 0.144922 +Converged at iteration 33, L1 7.36477e-05, Linf 0.00588296, total time[s] 0.147813 +Converged at iteration 30, L1 5.23023e-05, Linf 0.00335462, total time[s] 0.138993 +Converged at iteration 26, L1 5.51358e-05, Linf 0.00256083, total time[s] 0.113886 +Converged at iteration 34, L1 7.8687e-05, Linf 0.0183609, total time[s] 0.161443 +Converged at iteration 27, L1 5.2566e-05, Linf 0.00662367, total time[s] 0.123295 +Converged at iteration 26, L1 4.24777e-05, Linf 0.00268826, total time[s] 0.103578 +Converged at iteration 36, L1 7.6962e-05, Linf 0.0154069, total time[s] 0.163517 +Converged at iteration 39, L1 8.53235e-05, Linf 0.017346, total time[s] 0.175892 +Converged at iteration 27, L1 7.98147e-05, Linf 0.0051377, total time[s] 0.119729 +Converged at iteration 26, L1 9.86599e-05, Linf 0.00368212, total time[s] 0.131183 +Converged at iteration 22, L1 6.73363e-05, Linf 0.00485036, total time[s] 0.099125 +Converged at iteration 24, L1 6.00612e-05, Linf 0.00354001, total time[s] 0.114007 +Converged at iteration 24, L1 6.22046e-05, Linf 0.0121192, total time[s] 0.108524 +Converged at iteration 21, L1 6.02859e-05, Linf 0.00586999, total time[s] 0.108863 +Converged at iteration 25, L1 5.27195e-05, Linf 0.00802311, total time[s] 0.117887 +Converged at iteration 25, L1 8.17611e-05, Linf 0.00921171, total time[s] 0.113449 +Converged at iteration 19, L1 5.57572e-05, Linf 0.00238922, total time[s] 0.089395 +Converged at iteration 22, L1 9.25301e-05, Linf 0.00984744, total time[s] 0.10806 +Converged at iteration 22, L1 6.39242e-05, Linf 0.00539124, total time[s] 0.099467 +Converged at iteration 32, L1 6.25893e-05, Linf 0.00722829, total time[s] 0.167755 +Converged at iteration 27, L1 6.20673e-05, Linf 0.00799288, total time[s] 0.118737 +Converged at iteration 24, L1 8.24634e-05, Linf 0.00521479, total time[s] 0.106313 +Converged at iteration 26, L1 5.10313e-05, Linf 0.00723839, total time[s] 0.1269 +Converged at iteration 28, L1 5.17592e-05, Linf 0.00377224, total time[s] 0.129356 +Converged at iteration 27, L1 6.93724e-05, Linf 0.00545733, total time[s] 0.142273 +Converged at iteration 25, L1 6.69104e-05, Linf 0.00346628, total time[s] 0.120208 +Converged at iteration 34, L1 5.24695e-05, Linf 0.00613927, total time[s] 0.184945 +Converged at iteration 29, L1 9.32676e-05, Linf 0.00456844, total time[s] 0.134735 +Converged at iteration 29, L1 9.43164e-05, Linf 0.00912029, total time[s] 0.148415 +Converged at iteration 31, L1 6.82594e-05, Linf 0.00220564, total time[s] 0.142947 +Converged at iteration 33, L1 7.3384e-05, Linf 0.00593647, total time[s] 0.139328 +Converged at iteration 30, L1 4.79272e-05, Linf 0.00333249, total time[s] 0.13263 +Converged at iteration 26, L1 8.50994e-05, Linf 0.00390844, total time[s] 0.115458 +Converged at iteration 34, L1 8.61754e-05, Linf 0.019825, total time[s] 0.15222 +Converged at iteration 27, L1 5.59869e-05, Linf 0.007355, total time[s] 0.118878 +Converged at iteration 26, L1 4.85362e-05, Linf 0.00263415, total time[s] 0.10997 +Converged at iteration 38, L1 9.21848e-05, Linf 0.0175603, total time[s] 0.568919 +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.563622 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.519471 +Converged at iteration 30, L1 5.49574e-05, Linf 0.00759999, total time[s] 0.511813 +Converged at iteration 23, L1 7.44314e-05, Linf 0.00681256, total time[s] 0.384278 +Converged at iteration 25, L1 6.29886e-05, Linf 0.00475444, total time[s] 0.396374 +Converged at iteration 25, L1 5.41452e-05, Linf 0.00674061, total time[s] 0.36998 +Converged at iteration 28, L1 9.26739e-05, Linf 0.0162405, total time[s] 0.433416 +Converged at iteration 29, L1 7.33557e-05, Linf 0.00913521, total time[s] 0.437405 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.460875 +Converged at iteration 21, L1 7.2407e-05, Linf 0.00386858, total time[s] 0.336296 +Converged at iteration 26, L1 9.15716e-05, Linf 0.0102676, total time[s] 0.380443 +Converged at iteration 23, L1 6.26382e-05, Linf 0.00569336, total time[s] 0.361055 +Converged at iteration 35, L1 8.37158e-05, Linf 0.00775608, total time[s] 0.509544 +Converged at iteration 32, L1 6.4239e-05, Linf 0.00574874, total time[s] 0.493464 +Converged at iteration 27, L1 6.48901e-05, Linf 0.00743368, total time[s] 0.413829 +Converged at iteration 30, L1 7.41226e-05, Linf 0.00886432, total time[s] 0.45263 +Converged at iteration 29, L1 8.01769e-05, Linf 0.00451561, total time[s] 0.431939 +Converged at iteration 28, L1 8.06124e-05, Linf 0.00540179, total time[s] 0.430083 +Converged at iteration 27, L1 8.69299e-05, Linf 0.00463287, total time[s] 0.412676 +Converged at iteration 37, L1 9.16377e-05, Linf 0.00735545, total time[s] 0.542117 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.555449 +Converged at iteration 34, L1 4.57574e-05, Linf 0.00751586, total time[s] 0.543224 +Converged at iteration 35, L1 9.40393e-05, Linf 0.00568958, total time[s] 0.526049 +Converged at iteration 36, L1 7.20186e-05, Linf 0.00713034, total time[s] 0.54755 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.522561 +Converged at iteration 33, L1 4.86312e-05, Linf 0.00836183, total time[s] 0.482531 +Converged at iteration 37, L1 6.09595e-05, Linf 0.0156775, total time[s] 0.54774 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.464431 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.430922 +Converged at iteration 35, L1 7.32632e-05, Linf 0.00328763, total time[s] 0.474128 +Converged at iteration 39, L1 9.80774e-05, Linf 0.00419203, total time[s] 0.539777 +Converged at iteration 31, L1 6.02421e-05, Linf 0.00496108, total time[s] 0.433647 +Converged at iteration 30, L1 9.37224e-05, Linf 0.00423518, total time[s] 0.416162 +Converged at iteration 22, L1 8.40505e-05, Linf 0.00446709, total time[s] 0.338409 +Converged at iteration 27, L1 6.12541e-05, Linf 0.00495794, total time[s] 0.3918 +Converged at iteration 24, L1 8.64275e-05, Linf 0.00479291, total time[s] 0.339176 +Converged at iteration 20, L1 9.34896e-05, Linf 0.0039534, total time[s] 0.288433 +Converged at iteration 26, L1 7.71676e-05, Linf 0.00536053, total time[s] 0.363231 +Converged at iteration 28, L1 7.15015e-05, Linf 0.00439544, total time[s] 0.402484 +Converged at iteration 19, L1 6.18591e-05, Linf 0.00384773, total time[s] 0.272635 +Converged at iteration 22, L1 7.10646e-05, Linf 0.00506904, total time[s] 0.333258 +Converged at iteration 20, L1 7.92971e-05, Linf 0.00448337, total time[s] 0.287741 +Converged at iteration 30, L1 7.47342e-05, Linf 0.00316981, total time[s] 0.445307 +Converged at iteration 31, L1 8.31402e-05, Linf 0.0053885, total time[s] 0.480851 +Converged at iteration 24, L1 6.53789e-05, Linf 0.00455187, total time[s] 0.431876 +Converged at iteration 24, L1 8.26279e-05, Linf 0.00436298, total time[s] 0.36166 +Converged at iteration 27, L1 9.2689e-05, Linf 0.00548065, total time[s] 0.438934 +Converged at iteration 26, L1 6.79241e-05, Linf 0.0042593, total time[s] 0.405181 +Converged at iteration 23, L1 8.7186e-05, Linf 0.00393227, total time[s] 0.366889 +Converged at iteration 33, L1 9.79805e-05, Linf 0.00481908, total time[s] 0.492921 +Converged at iteration 29, L1 7.33936e-05, Linf 0.00458546, total time[s] 0.440658 +Converged at iteration 28, L1 8.82753e-05, Linf 0.00299779, total time[s] 0.42539 +Converged at iteration 30, L1 8.99922e-05, Linf 0.00425831, total time[s] 0.474939 +Converged at iteration 37, L1 7.14866e-05, Linf 0.00319747, total time[s] 0.53484 +Converged at iteration 32, L1 8.97961e-05, Linf 0.00361214, total time[s] 0.463961 +Converged at iteration 28, L1 9.3186e-05, Linf 0.00419491, total time[s] 0.424886 +Converged at iteration 33, L1 8.26796e-05, Linf 0.0046157, total time[s] 0.476201 +Converged at iteration 26, L1 8.59343e-05, Linf 0.00372938, total time[s] 0.387788 +Converged at iteration 24, L1 8.25016e-05, Linf 0.00315268, total time[s] 0.346402 +Converged at iteration 35, L1 9.56299e-05, Linf 0.00636877, total time[s] 0.513146 +Converged at iteration 39, L1 5.85809e-05, Linf 0.0067558, total time[s] 0.542537 +Converged at iteration 24, L1 7.54888e-05, Linf 0.00443921, total time[s] 0.342713 +Converged at iteration 30, L1 9.22532e-05, Linf 0.00593171, total time[s] 0.460135 +Converged at iteration 24, L1 8.15962e-05, Linf 0.00560002, total time[s] 0.369805 +Converged at iteration 21, L1 7.74134e-05, Linf 0.00409757, total time[s] 0.339068 +Converged at iteration 19, L1 5.03476e-05, Linf 0.00464904, total time[s] 0.292355 +Converged at iteration 21, L1 3.53929e-05, Linf 0.00569443, total time[s] 0.312878 +Converged at iteration 23, L1 9.88106e-05, Linf 0.00626925, total time[s] 0.364706 +Converged at iteration 24, L1 6.09737e-05, Linf 0.00475574, total time[s] 0.367819 +Converged at iteration 16, L1 8.92834e-05, Linf 0.00347308, total time[s] 0.268893 +Converged at iteration 20, L1 5.68814e-05, Linf 0.00530747, total time[s] 0.326866 +Converged at iteration 19, L1 9.35961e-05, Linf 0.00700141, total time[s] 0.286078 +Converged at iteration 31, L1 7.28481e-05, Linf 0.00274743, total time[s] 0.452826 +Converged at iteration 26, L1 5.45595e-05, Linf 0.0049271, total time[s] 0.393388 +Converged at iteration 23, L1 7.17846e-05, Linf 0.00687562, total time[s] 0.33056 +Converged at iteration 20, L1 5.51893e-05, Linf 0.00354046, total time[s] 0.30449 +Converged at iteration 23, L1 4.98986e-05, Linf 0.00334627, total time[s] 0.366299 +Converged at iteration 25, L1 8.51977e-05, Linf 0.00451546, total time[s] 0.381228 +Converged at iteration 22, L1 9.57504e-05, Linf 0.00487476, total time[s] 0.319489 +Converged at iteration 29, L1 6.54495e-05, Linf 0.00614583, total time[s] 0.434549 +Converged at iteration 28, L1 6.58442e-05, Linf 0.00333225, total time[s] 0.400804 +Converged at iteration 29, L1 6.31758e-05, Linf 0.0037093, total time[s] 0.427888 +Converged at iteration 27, L1 6.91983e-05, Linf 0.00379722, total time[s] 0.39327 +Converged at iteration 27, L1 9.62143e-05, Linf 0.00290939, total time[s] 0.424092 +Converged at iteration 29, L1 7.76869e-05, Linf 0.00282334, total time[s] 0.410595 +Converged at iteration 26, L1 7.20264e-05, Linf 0.00295112, total time[s] 0.424664 +Converged at iteration 32, L1 7.55118e-05, Linf 0.00661927, total time[s] 0.459965 +Converged at iteration 23, L1 6.52474e-05, Linf 0.00279665, total time[s] 0.384553 +Converged at iteration 25, L1 7.49716e-05, Linf 0.00244029, total time[s] 0.357085 +Converged at iteration 35, L1 5.93939e-05, Linf 0.00946085, total time[s] 0.529365 +Converged at iteration 38, L1 6.12505e-05, Linf 0.011002, total time[s] 0.534081 +Converged at iteration 25, L1 4.75377e-05, Linf 0.00657587, total time[s] 0.358983 +Converged at iteration 30, L1 5.73496e-05, Linf 0.00586596, total time[s] 0.426772 +Converged at iteration 23, L1 5.06257e-05, Linf 0.00349052, total time[s] 0.343305 +Converged at iteration 22, L1 5.95477e-05, Linf 0.00477834, total time[s] 0.36054 +Converged at iteration 19, L1 7.26698e-05, Linf 0.00727005, total time[s] 0.284469 +Converged at iteration 21, L1 5.38191e-05, Linf 0.00532297, total time[s] 0.354083 +Converged at iteration 23, L1 5.29243e-05, Linf 0.00409513, total time[s] 0.364848 +Converged at iteration 22, L1 6.03667e-05, Linf 0.00541518, total time[s] 0.329435 +Converged at iteration 20, L1 5.44156e-05, Linf 0.00432323, total time[s] 0.339008 +Converged at iteration 17, L1 9.26206e-05, Linf 0.00197835, total time[s] 0.266593 +Converged at iteration 19, L1 9.33102e-05, Linf 0.00662331, total time[s] 0.333285 +Converged at iteration 31, L1 5.34959e-05, Linf 0.00505112, total time[s] 0.495644 +Converged at iteration 25, L1 8.7665e-05, Linf 0.00548508, total time[s] 0.421894 +Converged at iteration 22, L1 9.07936e-05, Linf 0.00658955, total time[s] 0.367304 +Converged at iteration 24, L1 9.13523e-05, Linf 0.0030977, total time[s] 0.385299 +Converged at iteration 22, L1 6.66447e-05, Linf 0.00190824, total time[s] 0.401103 +Converged at iteration 23, L1 6.7863e-05, Linf 0.00278686, total time[s] 0.346703 +Converged at iteration 25, L1 7.31372e-05, Linf 0.00310018, total time[s] 0.376841 +Converged at iteration 26, L1 7.58543e-05, Linf 0.00328966, total time[s] 0.402617 +Converged at iteration 30, L1 4.9913e-05, Linf 0.00355054, total time[s] 0.444864 +Converged at iteration 28, L1 8.53923e-05, Linf 0.00258764, total time[s] 0.440902 +Converged at iteration 29, L1 8.9922e-05, Linf 0.00539248, total time[s] 0.463444 +Converged at iteration 29, L1 8.58523e-05, Linf 0.00210003, total time[s] 0.61989 +Converged at iteration 29, L1 6.83463e-05, Linf 0.00256826, total time[s] 0.593328 +Converged at iteration 32, L1 5.42237e-05, Linf 0.00866026, total time[s] 0.535988 +Converged at iteration 26, L1 6.86562e-05, Linf 0.00398784, total time[s] 0.407735 +Converged at iteration 23, L1 8.1606e-05, Linf 0.00365245, total time[s] 0.346427 +Converged at iteration 25, L1 8.8837e-05, Linf 0.00383863, total time[s] 0.400221 +Converged at iteration 35, L1 3.95729e-05, Linf 0.0120517, total time[s] 0.556948 +Converged at iteration 37, L1 8.08597e-05, Linf 0.0175058, total time[s] 0.607415 +Converged at iteration 25, L1 6.78587e-05, Linf 0.00944575, total time[s] 0.386444 +Converged at iteration 28, L1 9.92812e-05, Linf 0.00827531, total time[s] 0.442115 +Converged at iteration 22, L1 8.54223e-05, Linf 0.00406096, total time[s] 0.381916 +Converged at iteration 22, L1 4.73595e-05, Linf 0.00472631, total time[s] 0.374979 +Converged at iteration 20, L1 3.55671e-05, Linf 0.00576936, total time[s] 0.367139 +Converged at iteration 21, L1 8.77298e-05, Linf 0.00630078, total time[s] 0.337146 +Converged at iteration 23, L1 6.04815e-05, Linf 0.00326221, total time[s] 0.402537 +Converged at iteration 22, L1 6.6358e-05, Linf 0.00183848, total time[s] 0.334211 +Converged at iteration 20, L1 9.14174e-05, Linf 0.00312112, total time[s] 0.412407 +Converged at iteration 18, L1 9.22642e-05, Linf 0.00308715, total time[s] 0.380381 +Converged at iteration 19, L1 9.31198e-05, Linf 0.00534201, total time[s] 0.329763 +Converged at iteration 31, L1 5.73703e-05, Linf 0.00694234, total time[s] 0.507259 +Converged at iteration 26, L1 5.04184e-05, Linf 0.00457167, total time[s] 0.447774 +Converged at iteration 22, L1 7.80176e-05, Linf 0.00507117, total time[s] 0.341948 +Converged at iteration 23, L1 6.32176e-05, Linf 0.00200144, total time[s] 0.323199 +Converged at iteration 25, L1 9.52583e-05, Linf 0.00331006, total time[s] 0.362847 +Converged at iteration 24, L1 9.72818e-05, Linf 0.00394336, total time[s] 0.360562 +Converged at iteration 23, L1 7.83073e-05, Linf 0.00271863, total time[s] 0.322977 +Converged at iteration 24, L1 6.80202e-05, Linf 0.00289314, total time[s] 0.343303 +Converged at iteration 31, L1 7.48219e-05, Linf 0.00447001, total time[s] 0.450467 +Converged at iteration 29, L1 8.56867e-05, Linf 0.0032223, total time[s] 0.40535 +Converged at iteration 30, L1 5.27259e-05, Linf 0.00552633, total time[s] 0.432015 +Converged at iteration 30, L1 5.94826e-05, Linf 0.00192502, total time[s] 0.42306 +Converged at iteration 31, L1 6.97355e-05, Linf 0.00349686, total time[s] 0.447576 +Converged at iteration 24, L1 6.17497e-05, Linf 0.00446387, total time[s] 0.334839 +Converged at iteration 32, L1 4.79024e-05, Linf 0.0117912, total time[s] 0.449714 +Converged at iteration 24, L1 6.5466e-05, Linf 0.00296875, total time[s] 0.355809 +Converged at iteration 25, L1 8.51533e-05, Linf 0.00453752, total time[s] 0.361908 +Converged at iteration 37, L1 5.22618e-05, Linf 0.0192627, total time[s] 0.500794 +Converged at iteration 35, L1 4.3174e-05, Linf 0.0144629, total time[s] 0.515461 +Converged at iteration 28, L1 6.29676e-05, Linf 0.00754555, total time[s] 0.422577 +Converged at iteration 25, L1 7.01893e-05, Linf 0.0101207, total time[s] 0.422148 +Converged at iteration 21, L1 8.32607e-05, Linf 0.0089572, total time[s] 0.318915 +Converged at iteration 22, L1 9.8271e-05, Linf 0.00441436, total time[s] 0.36922 +Converged at iteration 22, L1 3.48523e-05, Linf 0.00320961, total time[s] 0.35125 +Converged at iteration 20, L1 5.93551e-05, Linf 0.00912361, total time[s] 0.346489 +Converged at iteration 38, L1 9.21847e-05, Linf 0.0175603, total time[s] 0.169416 +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.19616 +Converged at iteration 30, L1 5.86046e-05, Linf 0.00930135, total time[s] 0.139435 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.166806 +Converged at iteration 23, L1 7.44314e-05, Linf 0.00681256, total time[s] 0.10472 +Converged at iteration 25, L1 6.29721e-05, Linf 0.00472528, total time[s] 0.143604 +Converged at iteration 28, L1 9.26687e-05, Linf 0.0162042, total time[s] 0.147562 +Converged at iteration 25, L1 5.41452e-05, Linf 0.00674061, total time[s] 0.144994 +Converged at iteration 29, L1 7.33528e-05, Linf 0.00911797, total time[s] 0.147617 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.158256 +Converged at iteration 21, L1 7.24063e-05, Linf 0.00386858, total time[s] 0.116656 +Converged at iteration 26, L1 9.15715e-05, Linf 0.0102676, total time[s] 0.153246 +Converged at iteration 23, L1 6.26362e-05, Linf 0.00569336, total time[s] 0.125427 +Converged at iteration 35, L1 8.37144e-05, Linf 0.00775608, total time[s] 0.17602 +Converged at iteration 32, L1 6.42487e-05, Linf 0.00580398, total time[s] 0.172347 +Converged at iteration 27, L1 6.48901e-05, Linf 0.00743368, total time[s] 0.128375 +Converged at iteration 30, L1 7.41106e-05, Linf 0.00884234, total time[s] 0.149522 +Converged at iteration 29, L1 8.01748e-05, Linf 0.00450107, total time[s] 0.172209 +Converged at iteration 28, L1 8.06011e-05, Linf 0.00540179, total time[s] 0.146979 +Converged at iteration 27, L1 8.69266e-05, Linf 0.00461717, total time[s] 0.135765 +Converged at iteration 37, L1 9.16407e-05, Linf 0.00738147, total time[s] 0.218396 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.216692 +Converged at iteration 34, L1 4.57576e-05, Linf 0.00751586, total time[s] 0.178231 +Converged at iteration 36, L1 7.20186e-05, Linf 0.00713034, total time[s] 0.176452 +Converged at iteration 35, L1 9.40656e-05, Linf 0.0056896, total time[s] 0.32334 +Converged at iteration 33, L1 4.86312e-05, Linf 0.00836183, total time[s] 0.217196 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.175779 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.153354 +Converged at iteration 37, L1 6.09587e-05, Linf 0.0156776, total time[s] 0.182277 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.176059 +Converged at iteration 35, L1 7.32632e-05, Linf 0.00328763, total time[s] 0.162753 +Converged at iteration 39, L1 9.80774e-05, Linf 0.00419203, total time[s] 0.168667 +Converged at iteration 31, L1 6.02421e-05, Linf 0.00496108, total time[s] 0.131898 +Converged at iteration 30, L1 9.37224e-05, Linf 0.00423518, total time[s] 0.144865 +Converged at iteration 22, L1 8.40508e-05, Linf 0.00446709, total time[s] 0.198288 +Converged at iteration 27, L1 6.1254e-05, Linf 0.00495794, total time[s] 0.130156 +Converged at iteration 24, L1 8.64275e-05, Linf 0.00479291, total time[s] 0.132668 +Converged at iteration 20, L1 9.34895e-05, Linf 0.0039534, total time[s] 0.097099 +Converged at iteration 26, L1 7.7167e-05, Linf 0.00535821, total time[s] 0.141569 +Converged at iteration 28, L1 7.1476e-05, Linf 0.00441772, total time[s] 0.128419 +Converged at iteration 19, L1 6.18591e-05, Linf 0.00384773, total time[s] 0.100128 +Converged at iteration 22, L1 7.10648e-05, Linf 0.00506899, total time[s] 0.101309 +Converged at iteration 20, L1 7.92957e-05, Linf 0.00447797, total time[s] 0.096518 +Converged at iteration 30, L1 7.47339e-05, Linf 0.0031698, total time[s] 0.139872 +Converged at iteration 31, L1 8.31398e-05, Linf 0.00538805, total time[s] 0.186055 +Converged at iteration 24, L1 6.53789e-05, Linf 0.00455187, total time[s] 0.114103 +Converged at iteration 27, L1 9.26856e-05, Linf 0.00545834, total time[s] 0.147065 +Converged at iteration 24, L1 8.26421e-05, Linf 0.00444871, total time[s] 0.119762 +Converged at iteration 26, L1 6.79403e-05, Linf 0.00435057, total time[s] 0.131795 +Converged at iteration 23, L1 8.71857e-05, Linf 0.00393227, total time[s] 0.159264 +Converged at iteration 33, L1 9.79803e-05, Linf 0.00481788, total time[s] 0.161208 +Converged at iteration 29, L1 7.33979e-05, Linf 0.0046089, total time[s] 0.138751 +Converged at iteration 30, L1 9.00052e-05, Linf 0.00433799, total time[s] 0.146837 +Converged at iteration 28, L1 8.82752e-05, Linf 0.00299779, total time[s] 0.1448 +Converged at iteration 37, L1 7.14867e-05, Linf 0.00319747, total time[s] 0.18554 +Converged at iteration 32, L1 8.97965e-05, Linf 0.00361214, total time[s] 0.185911 +Converged at iteration 28, L1 9.3186e-05, Linf 0.00419491, total time[s] 0.180868 +Converged at iteration 33, L1 8.26796e-05, Linf 0.0046157, total time[s] 0.160411 +Converged at iteration 24, L1 8.25016e-05, Linf 0.00315268, total time[s] 0.125182 +Converged at iteration 26, L1 8.59343e-05, Linf 0.00372938, total time[s] 0.169538 +Converged at iteration 35, L1 9.56299e-05, Linf 0.00636877, total time[s] 0.201193 +Converged at iteration 39, L1 5.85812e-05, Linf 0.0067558, total time[s] 0.236495 +Converged at iteration 24, L1 7.54888e-05, Linf 0.00443921, total time[s] 0.127445 +Converged at iteration 30, L1 9.22525e-05, Linf 0.00593171, total time[s] 0.174575 +Converged at iteration 21, L1 7.74134e-05, Linf 0.00409757, total time[s] 0.143286 +Converged at iteration 24, L1 8.1595e-05, Linf 0.00560002, total time[s] 0.170403 +Converged at iteration 21, L1 3.53929e-05, Linf 0.00569444, total time[s] 0.169079 +Converged at iteration 19, L1 5.03477e-05, Linf 0.00464904, total time[s] 0.130863 +Converged at iteration 23, L1 9.88106e-05, Linf 0.00626925, total time[s] 0.11146 +Converged at iteration 24, L1 6.09707e-05, Linf 0.00475574, total time[s] 0.151361 +Converged at iteration 16, L1 8.92829e-05, Linf 0.00347308, total time[s] 0.084729 +Converged at iteration 20, L1 5.68793e-05, Linf 0.00530747, total time[s] 0.122407 +Converged at iteration 19, L1 9.35958e-05, Linf 0.00700309, total time[s] 0.109826 +Converged at iteration 31, L1 7.28481e-05, Linf 0.00274743, total time[s] 0.213599 +Converged at iteration 26, L1 5.4562e-05, Linf 0.00496172, total time[s] 0.129559 +Converged at iteration 23, L1 7.17846e-05, Linf 0.00687562, total time[s] 0.105954 +Converged at iteration 20, L1 5.5194e-05, Linf 0.00356682, total time[s] 0.111548 +Converged at iteration 23, L1 4.98979e-05, Linf 0.00334628, total time[s] 0.112767 +Converged at iteration 25, L1 8.51964e-05, Linf 0.00451546, total time[s] 0.132975 +Converged at iteration 22, L1 9.57456e-05, Linf 0.00486089, total time[s] 0.160474 +Converged at iteration 29, L1 6.5457e-05, Linf 0.00618707, total time[s] 0.190355 +Converged at iteration 28, L1 6.58445e-05, Linf 0.00333223, total time[s] 0.174437 +Converged at iteration 29, L1 6.31764e-05, Linf 0.00370929, total time[s] 0.156564 +Converged at iteration 27, L1 6.91988e-05, Linf 0.00379722, total time[s] 0.242879 +Converged at iteration 27, L1 9.62141e-05, Linf 0.00290939, total time[s] 0.180313 +Converged at iteration 29, L1 7.76869e-05, Linf 0.00282334, total time[s] 0.146291 +Converged at iteration 26, L1 7.2027e-05, Linf 0.00295109, total time[s] 0.134583 +Converged at iteration 32, L1 7.55118e-05, Linf 0.00661927, total time[s] 0.146612 +Converged at iteration 23, L1 6.52474e-05, Linf 0.00279665, total time[s] 0.154623 +Converged at iteration 25, L1 7.49716e-05, Linf 0.00244029, total time[s] 0.114699 +Converged at iteration 35, L1 5.93939e-05, Linf 0.00946085, total time[s] 0.216115 +Converged at iteration 38, L1 6.12505e-05, Linf 0.011002, total time[s] 0.270431 +Converged at iteration 30, L1 5.73542e-05, Linf 0.00586593, total time[s] 0.226258 +Converged at iteration 25, L1 4.75373e-05, Linf 0.00657587, total time[s] 0.133913 +Converged at iteration 23, L1 5.06257e-05, Linf 0.00349052, total time[s] 0.150184 +Converged at iteration 22, L1 5.95509e-05, Linf 0.0047788, total time[s] 0.178781 +Converged at iteration 21, L1 5.38086e-05, Linf 0.005323, total time[s] 0.137748 +Converged at iteration 19, L1 7.26676e-05, Linf 0.00727005, total time[s] 0.139669 +Converged at iteration 22, L1 6.03667e-05, Linf 0.00541518, total time[s] 0.202945 +Converged at iteration 23, L1 5.28349e-05, Linf 0.00372311, total time[s] 0.199155 +Converged at iteration 17, L1 9.26194e-05, Linf 0.00197894, total time[s] 0.113482 +Converged at iteration 20, L1 5.44168e-05, Linf 0.00432325, total time[s] 0.219204 +Converged at iteration 19, L1 9.33048e-05, Linf 0.00660479, total time[s] 0.120667 +Converged at iteration 25, L1 8.76661e-05, Linf 0.00548242, total time[s] 0.119791 +Converged at iteration 31, L1 5.34958e-05, Linf 0.00505112, total time[s] 0.148288 +Converged at iteration 22, L1 6.66445e-05, Linf 0.00190824, total time[s] 0.116352 +Converged at iteration 22, L1 9.07936e-05, Linf 0.00658955, total time[s] 0.132347 +Converged at iteration 24, L1 9.13518e-05, Linf 0.0030977, total time[s] 0.11787 +Converged at iteration 25, L1 7.31297e-05, Linf 0.00308859, total time[s] 0.173663 +Converged at iteration 23, L1 6.78576e-05, Linf 0.00278686, total time[s] 0.144607 +Converged at iteration 30, L1 4.99157e-05, Linf 0.00355575, total time[s] 0.178801 +Converged at iteration 26, L1 7.58536e-05, Linf 0.00328966, total time[s] 0.197287 +Converged at iteration 29, L1 8.99215e-05, Linf 0.00539248, total time[s] 0.279423 +Converged at iteration 28, L1 8.53935e-05, Linf 0.00258828, total time[s] 0.304732 +Converged at iteration 29, L1 8.58525e-05, Linf 0.00210003, total time[s] 0.168868 +Converged at iteration 29, L1 6.83461e-05, Linf 0.00256828, total time[s] 0.24857 +Converged at iteration 32, L1 5.42237e-05, Linf 0.00866026, total time[s] 0.164854 +Converged at iteration 26, L1 6.8656e-05, Linf 0.00398786, total time[s] 0.212914 +Converged at iteration 25, L1 8.8903e-05, Linf 0.00383863, total time[s] 0.217131 +Converged at iteration 23, L1 8.1606e-05, Linf 0.00365245, total time[s] 0.16037 +Converged at iteration 37, L1 8.08597e-05, Linf 0.0175058, total time[s] 0.261095 +Converged at iteration 35, L1 3.95729e-05, Linf 0.0120517, total time[s] 0.333416 +Converged at iteration 28, L1 9.92812e-05, Linf 0.00827531, total time[s] 0.208309 +Converged at iteration 25, L1 6.78593e-05, Linf 0.0094451, total time[s] 0.232493 +Converged at iteration 22, L1 4.73617e-05, Linf 0.00472756, total time[s] 0.215946 +Converged at iteration 22, L1 8.54218e-05, Linf 0.00406096, total time[s] 0.149627 +Converged at iteration 20, L1 3.55671e-05, Linf 0.00576936, total time[s] 0.134801 +Converged at iteration 21, L1 8.77298e-05, Linf 0.00630078, total time[s] 0.113602 +Converged at iteration 22, L1 6.63576e-05, Linf 0.00183848, total time[s] 0.103553 +Converged at iteration 23, L1 6.07165e-05, Linf 0.00326221, total time[s] 0.222362 +Converged at iteration 18, L1 9.22676e-05, Linf 0.00308715, total time[s] 0.090442 +Converged at iteration 20, L1 9.14168e-05, Linf 0.00312112, total time[s] 0.104077 +Converged at iteration 19, L1 9.31201e-05, Linf 0.00534046, total time[s] 0.182935 +Converged at iteration 31, L1 5.73703e-05, Linf 0.00694234, total time[s] 0.148597 +Converged at iteration 22, L1 7.85203e-05, Linf 0.00507118, total time[s] 0.159667 +Converged at iteration 26, L1 5.04185e-05, Linf 0.00457167, total time[s] 0.19089 +Converged at iteration 25, L1 9.52579e-05, Linf 0.00331006, total time[s] 0.186366 +Converged at iteration 23, L1 6.32206e-05, Linf 0.00200875, total time[s] 0.205975 +Converged at iteration 23, L1 7.83068e-05, Linf 0.00272719, total time[s] 0.133735 +Converged at iteration 24, L1 9.72832e-05, Linf 0.00394965, total time[s] 0.191699 +Converged at iteration 24, L1 6.80204e-05, Linf 0.00289279, total time[s] 0.222249 +Converged at iteration 31, L1 7.48222e-05, Linf 0.00447001, total time[s] 0.231585 +Converged at iteration 29, L1 8.56852e-05, Linf 0.00322261, total time[s] 0.182758 +Converged at iteration 30, L1 5.27262e-05, Linf 0.00552633, total time[s] 0.230571 +Converged at iteration 30, L1 5.94824e-05, Linf 0.00192502, total time[s] 0.166811 +Converged at iteration 31, L1 6.97355e-05, Linf 0.00349686, total time[s] 0.252663 +Converged at iteration 32, L1 4.79327e-05, Linf 0.0120107, total time[s] 0.176205 +Converged at iteration 24, L1 6.1748e-05, Linf 0.00446388, total time[s] 0.134438 +Converged at iteration 25, L1 8.51533e-05, Linf 0.00453751, total time[s] 0.277573 +Converged at iteration 24, L1 6.5466e-05, Linf 0.00296875, total time[s] 0.17958 +Converged at iteration 35, L1 4.31742e-05, Linf 0.0144629, total time[s] 0.177618 +Converged at iteration 37, L1 5.22618e-05, Linf 0.0192627, total time[s] 0.179091 +Converged at iteration 28, L1 6.29676e-05, Linf 0.00754555, total time[s] 0.20137 +Converged at iteration 25, L1 7.02097e-05, Linf 0.0101207, total time[s] 0.174003 +Converged at iteration 21, L1 8.32607e-05, Linf 0.0089572, total time[s] 0.115966 +Converged at iteration 22, L1 9.82707e-05, Linf 0.00441436, total time[s] 0.139813 +Converged at iteration 22, L1 3.48523e-05, Linf 0.0032096, total time[s] 0.201869 +Converged at iteration 20, L1 5.93545e-05, Linf 0.00912361, total time[s] 0.117546 +Converged at iteration 23, L1 7.54855e-05, Linf 0.00294913, total time[s] 0.226987 +Converged at iteration 23, L1 7.47045e-05, Linf 0.00365997, total time[s] 0.120055 +Converged at iteration 19, L1 6.43283e-05, Linf 0.00331403, total time[s] 0.099604 +Converged at iteration 21, L1 7.01447e-05, Linf 0.00236251, total time[s] 0.209042 +Converged at iteration 20, L1 5.81346e-05, Linf 0.00374722, total time[s] 0.127323 +Converged at iteration 26, L1 4.9284e-05, Linf 0.00381928, total time[s] 0.141232 +Converged at iteration 31, L1 5.83323e-05, Linf 0.00857564, total time[s] 0.27523 +Converged at iteration 23, L1 8.42829e-05, Linf 0.00262704, total time[s] 0.125256 +Converged at iteration 22, L1 7.63226e-05, Linf 0.00508047, total time[s] 0.111199 +Converged at iteration 24, L1 8.18635e-05, Linf 0.00387576, total time[s] 0.128623 +Converged at iteration 26, L1 7.85438e-05, Linf 0.002714, total time[s] 0.222139 +Converged at iteration 32, L1 5.08669e-05, Linf 0.00408132, total time[s] 0.211462 +Converged at iteration 30, L1 6.54318e-05, Linf 0.00805305, total time[s] 0.14822 +Converged at iteration 23, L1 9.15227e-05, Linf 0.00274453, total time[s] 0.23948 +Converged at iteration 23, L1 7.25039e-05, Linf 0.00114801, total time[s] 0.151764 +Converged at iteration 32, L1 3.75377e-05, Linf 0.00250364, total time[s] 0.227428 +Converged at iteration 25, L1 8.6462e-05, Linf 0.00290642, total time[s] 0.135521 +Converged at iteration 30, L1 6.25038e-05, Linf 0.00251732, total time[s] 0.22904 +Converged at iteration 24, L1 9.50757e-05, Linf 0.00545624, total time[s] 0.118699 +Converged at iteration 30, L1 7.686e-05, Linf 0.00327952, total time[s] 0.157295 +Converged at iteration 32, L1 4.76343e-05, Linf 0.0154585, total time[s] 0.149265 +Converged at iteration 25, L1 8.07719e-05, Linf 0.00463342, total time[s] 0.139589 +Converged at iteration 35, L1 5.76022e-05, Linf 0.018222, total time[s] 0.179177 +Converged at iteration 37, L1 4.12906e-05, Linf 0.0200494, total time[s] 0.222499 +Converged at iteration 27, L1 8.95353e-05, Linf 0.00892078, total time[s] 0.141009 +Converged at iteration 25, L1 6.75563e-05, Linf 0.00984571, total time[s] 0.138535 +Converged at iteration 21, L1 6.93247e-05, Linf 0.00812086, total time[s] 0.115688 +Converged at iteration 23, L1 6.96147e-05, Linf 0.00402439, total time[s] 0.144577 +Converged at iteration 22, L1 4.40138e-05, Linf 0.00437362, total time[s] 0.10863 +Converged at iteration 20, L1 9.24702e-05, Linf 0.0131671, total time[s] 0.133896 +Converged at iteration 24, L1 6.69535e-05, Linf 0.00409492, total time[s] 0.152583 +Converged at iteration 19, L1 8.2113e-05, Linf 0.00439962, total time[s] 0.09873 +Converged at iteration 24, L1 4.76876e-05, Linf 0.00245617, total time[s] 0.235756 +Converged at iteration 21, L1 9.85936e-05, Linf 0.00305193, total time[s] 0.110798 +Converged at iteration 20, L1 6.47898e-05, Linf 0.00396388, total time[s] 0.176322 +Converged at iteration 26, L1 6.68721e-05, Linf 0.00426344, total time[s] 0.165908 +Converged at iteration 31, L1 7.03253e-05, Linf 0.00841183, total time[s] 0.160805 +Converged at iteration 22, L1 8.15163e-05, Linf 0.00468969, total time[s] 0.127771 +Converged at iteration 24, L1 5.02872e-05, Linf 0.00167246, total time[s] 0.168317 +Converged at iteration 27, L1 5.80952e-05, Linf 0.00182778, total time[s] 0.118991 +Converged at iteration 24, L1 6.72262e-05, Linf 0.00353976, total time[s] 0.164527 +Converged at iteration 23, L1 9.35297e-05, Linf 0.0028586, total time[s] 0.15531 +Converged at iteration 25, L1 9.77478e-05, Linf 0.00341165, total time[s] 0.113671 +Converged at iteration 32, L1 6.71046e-05, Linf 0.00495125, total time[s] 0.219713 +Converged at iteration 30, L1 7.63731e-05, Linf 0.0027775, total time[s] 0.138167 +Converged at iteration 30, L1 8.21484e-05, Linf 0.00990598, total time[s] 0.159151 +Converged at iteration 31, L1 5.46541e-05, Linf 0.00359684, total time[s] 0.205789 +Converged at iteration 32, L1 5.80523e-05, Linf 0.00349103, total time[s] 0.172967 +Converged at iteration 32, L1 5.22213e-05, Linf 0.0197042, total time[s] 0.162372 +Converged at iteration 27, L1 5.46e-05, Linf 0.00552487, total time[s] 0.1274 +Converged at iteration 25, L1 7.21548e-05, Linf 0.00350287, total time[s] 0.204914 +Converged at iteration 25, L1 7.11829e-05, Linf 0.0053406, total time[s] 0.17878 +Converged at iteration 35, L1 6.69706e-05, Linf 0.0235334, total time[s] 0.176053 +Converged at iteration 37, L1 3.95917e-05, Linf 0.0208762, total time[s] 0.185478 +Converged at iteration 27, L1 6.75017e-05, Linf 0.00778747, total time[s] 0.129184 +Converged at iteration 25, L1 6.50938e-05, Linf 0.00943879, total time[s] 0.124536 +Converged at iteration 21, L1 6.15818e-05, Linf 0.00699697, total time[s] 0.108928 +Converged at iteration 23, L1 6.69114e-05, Linf 0.00381559, total time[s] 0.176912 +Converged at iteration 22, L1 6.94782e-05, Linf 0.00763226, total time[s] 0.131727 +Converged at iteration 21, L1 3.38933e-05, Linf 0.00647297, total time[s] 0.098679 +Converged at iteration 24, L1 9.84806e-05, Linf 0.00670125, total time[s] 0.120765 +Converged at iteration 24, L1 7.25611e-05, Linf 0.00478253, total time[s] 0.148799 +Converged at iteration 19, L1 9.43624e-05, Linf 0.00518928, total time[s] 0.094872 +Converged at iteration 22, L1 6.62384e-05, Linf 0.0028432, total time[s] 0.093228 +Converged at iteration 20, L1 7.94932e-05, Linf 0.0045934, total time[s] 0.118656 +Converged at iteration 31, L1 9.13043e-05, Linf 0.0101269, total time[s] 0.140812 +Converged at iteration 26, L1 9.80088e-05, Linf 0.00408361, total time[s] 0.119535 +Converged at iteration 22, L1 9.80061e-05, Linf 0.00550021, total time[s] 0.124299 +Converged at iteration 24, L1 6.46181e-05, Linf 0.0020411, total time[s] 0.111397 +Converged at iteration 27, L1 7.6934e-05, Linf 0.00246688, total time[s] 0.14823 +Converged at iteration 23, L1 9.74444e-05, Linf 0.00520546, total time[s] 0.105821 +Converged at iteration 23, L1 9.07639e-05, Linf 0.00314887, total time[s] 0.132637 +Converged at iteration 32, L1 8.93101e-05, Linf 0.00937405, total time[s] 0.162965 +Converged at iteration 27, L1 6.57619e-05, Linf 0.00432275, total time[s] 0.215432 +Converged at iteration 30, L1 9.73891e-05, Linf 0.0139995, total time[s] 0.137832 +Converged at iteration 30, L1 8.52508e-05, Linf 0.00279566, total time[s] 0.154452 +Converged at iteration 32, L1 8.30164e-05, Linf 0.00492969, total time[s] 0.143271 +Converged at iteration 27, L1 6.77599e-05, Linf 0.00733834, total time[s] 0.194309 +Converged at iteration 31, L1 7.33936e-05, Linf 0.00528352, total time[s] 0.229985 +Converged at iteration 26, L1 5.15587e-05, Linf 0.00484237, total time[s] 0.124715 +Converged at iteration 32, L1 6.32181e-05, Linf 0.024638, total time[s] 0.148846 +Converged at iteration 25, L1 6.7525e-05, Linf 0.00353224, total time[s] 0.105154 +Converged at iteration 35, L1 7.72861e-05, Linf 0.0268312, total time[s] 0.156688 +Converged at iteration 37, L1 5.02259e-05, Linf 0.0241002, total time[s] 0.192656 +Converged at iteration 27, L1 4.8002e-05, Linf 0.00631026, total time[s] 0.162634 +Converged at iteration 25, L1 6.56993e-05, Linf 0.00984284, total time[s] 0.12825 +Converged at iteration 21, L1 6.25528e-05, Linf 0.00624135, total time[s] 0.114405 +Converged at iteration 22, L1 6.41207e-05, Linf 0.00249868, total time[s] 0.157738 +Converged at iteration 23, L1 4.54588e-05, Linf 0.00662395, total time[s] 0.102786 +Converged at iteration 21, L1 4.35663e-05, Linf 0.00784771, total time[s] 0.09802 +Converged at iteration 25, L1 6.19942e-05, Linf 0.0058434, total time[s] 0.138277 +Converged at iteration 25, L1 5.164e-05, Linf 0.00509535, total time[s] 0.120313 +Converged at iteration 19, L1 9.53244e-05, Linf 0.00532987, total time[s] 0.093768 +Converged at iteration 22, L1 8.06128e-05, Linf 0.00384772, total time[s] 0.11153 +Converged at iteration 20, L1 9.5553e-05, Linf 0.00557956, total time[s] 0.115333 +Converged at iteration 32, L1 3.2896e-05, Linf 0.00537098, total time[s] 0.15282 +Converged at iteration 27, L1 8.22283e-05, Linf 0.00252794, total time[s] 0.163397 +Converged at iteration 23, L1 6.82265e-05, Linf 0.004598, total time[s] 0.124274 +Converged at iteration 24, L1 8.1322e-05, Linf 0.00305248, total time[s] 0.153216 +Converged at iteration 27, L1 9.40437e-05, Linf 0.00307904, total time[s] 0.163673 +Converged at iteration 23, L1 9.57976e-05, Linf 0.00602953, total time[s] 0.119348 +Converged at iteration 24, L1 5.7451e-05, Linf 0.00240847, total time[s] 0.113887 +Converged at iteration 33, L1 5.20859e-05, Linf 0.00529486, total time[s] 0.150424 +Converged at iteration 27, L1 9.7578e-05, Linf 0.00573914, total time[s] 0.153642 +Converged at iteration 31, L1 4.23672e-05, Linf 0.00728982, total time[s] 0.151836 +Converged at iteration 30, L1 8.80842e-05, Linf 0.00252322, total time[s] 0.171187 +Converged at iteration 33, L1 4.24202e-05, Linf 0.00368859, total time[s] 0.189204 +Converged at iteration 31, L1 8.81646e-05, Linf 0.00673725, total time[s] 0.192584 +Converged at iteration 27, L1 5.7641e-05, Linf 0.0068364, total time[s] 0.172478 +Converged at iteration 32, L1 9.06995e-05, Linf 0.0299527, total time[s] 0.150261 +Converged at iteration 26, L1 6.98264e-05, Linf 0.00679955, total time[s] 0.200137 +Converged at iteration 25, L1 7.48248e-05, Linf 0.00569326, total time[s] 0.115872 +Converged at iteration 37, L1 9.99983e-05, Linf 0.0303431, total time[s] 0.199249 +Converged at iteration 36, L1 2.39165e-05, Linf 0.0106404, total time[s] 0.192123 +Converged at iteration 26, L1 7.924e-05, Linf 0.00727624, total time[s] 0.169564 +Converged at iteration 25, L1 7.58898e-05, Linf 0.0105731, total time[s] 0.168581 +Converged at iteration 21, L1 6.23416e-05, Linf 0.00594463, total time[s] 0.103582 +Converged at iteration 21, L1 9.30046e-05, Linf 0.00346562, total time[s] 0.107175 +Converged at iteration 21, L1 4.97077e-05, Linf 0.00795149, total time[s] 0.131868 +Converged at iteration 23, L1 7.53832e-05, Linf 0.0108045, total time[s] 0.15527 +Converged at iteration 25, L1 6.90848e-05, Linf 0.00741874, total time[s] 0.12253 +Converged at iteration 25, L1 7.38163e-05, Linf 0.00831039, total time[s] 0.140888 +Converged at iteration 19, L1 9.27607e-05, Linf 0.00491052, total time[s] 0.103381 +Converged at iteration 22, L1 9.02273e-05, Linf 0.00479166, total time[s] 0.124116 +Converged at iteration 21, L1 6.46014e-05, Linf 0.00464479, total time[s] 0.144685 +Converged at iteration 32, L1 3.58623e-05, Linf 0.00525933, total time[s] 0.170343 +Converged at iteration 27, L1 9.63207e-05, Linf 0.00301858, total time[s] 0.177029 +Converged at iteration 23, L1 8.60625e-05, Linf 0.00550125, total time[s] 0.234909 +Converged at iteration 25, L1 5.08327e-05, Linf 0.00305491, total time[s] 0.187356 +Converged at iteration 28, L1 5.84218e-05, Linf 0.00217642, total time[s] 0.134448 +Converged at iteration 24, L1 6.74108e-05, Linf 0.00270237, total time[s] 0.125332 +Converged at iteration 24, L1 6.86144e-05, Linf 0.00536374, total time[s] 0.139019 +Converged at iteration 28, L1 7.93365e-05, Linf 0.00551972, total time[s] 0.136677 +Converged at iteration 33, L1 6.56482e-05, Linf 0.00616297, total time[s] 0.19794 +Converged at iteration 30, L1 8.85204e-05, Linf 0.00223219, total time[s] 0.196812 +Converged at iteration 30, L1 9.81582e-05, Linf 0.0165813, total time[s] 0.238766 +Converged at iteration 31, L1 9.11777e-05, Linf 0.00712863, total time[s] 0.150418 +Converged at iteration 33, L1 5.30417e-05, Linf 0.00460964, total time[s] 0.188441 +Converged at iteration 33, L1 3.99048e-05, Linf 0.0222754, total time[s] 0.181317 +Converged at iteration 25, L1 8.20135e-05, Linf 0.0073245, total time[s] 0.126455 +Converged at iteration 27, L1 4.44482e-05, Linf 0.0051892, total time[s] 0.156844 +Converged at iteration 26, L1 8.79722e-05, Linf 0.00860547, total time[s] 0.128899 +Converged at iteration 38, L1 6.95096e-05, Linf 0.0230451, total time[s] 0.197558 +Converged at iteration 36, L1 4.14989e-05, Linf 0.0147561, total time[s] 0.204093 +Converged at iteration 25, L1 9.31468e-05, Linf 0.0108171, total time[s] 0.118496 +Converged at iteration 27, L1 4.12525e-05, Linf 0.00536485, total time[s] 0.1526 +Converged at iteration 21, L1 6.86785e-05, Linf 0.00623095, total time[s] 0.112943 +Converged at iteration 22, L1 9.55119e-05, Linf 0.00408457, total time[s] 0.145411 +Converged at iteration 24, L1 4.04089e-05, Linf 0.00742347, total time[s] 0.150371 +Converged at iteration 21, L1 5.09434e-05, Linf 0.00626751, total time[s] 0.132982 +Converged at iteration 25, L1 8.48587e-05, Linf 0.0102341, total time[s] 0.162954 +Converged at iteration 25, L1 6.88932e-05, Linf 0.00774202, total time[s] 0.229606 +Converged at iteration 22, L1 9.38282e-05, Linf 0.00555657, total time[s] 0.105696 +Converged at iteration 19, L1 8.97845e-05, Linf 0.00398879, total time[s] 0.112609 +Converged at iteration 32, L1 3.61514e-05, Linf 0.00449934, total time[s] 0.156119 +Converged at iteration 21, L1 7.54989e-05, Linf 0.0052275, total time[s] 0.113771 +Converged at iteration 23, L1 9.99228e-05, Linf 0.0061944, total time[s] 0.152621 +Converged at iteration 27, L1 8.50623e-05, Linf 0.00292286, total time[s] 0.190462 +Converged at iteration 25, L1 6.40274e-05, Linf 0.00510928, total time[s] 0.12443 +Converged at iteration 36, L1 9.6171e-05, Linf 0.00105974, total time[s] 0.253449 +Converged at iteration 25, L1 6.11966e-05, Linf 0.00508183, total time[s] 0.203308 +Converged at iteration 24, L1 7.65837e-05, Linf 0.0030812, total time[s] 0.265288 +Converged at iteration 34, L1 7.64519e-05, Linf 0.00155546, total time[s] 0.18344 +Converged at iteration 29, L1 6.55111e-05, Linf 0.00505338, total time[s] 0.132802 +Converged at iteration 30, L1 8.22005e-05, Linf 0.014535, total time[s] 0.136911 +Converged at iteration 30, L1 8.5238e-05, Linf 0.00184375, total time[s] 0.144509 +Converged at iteration 31, L1 7.6404e-05, Linf 0.00533123, total time[s] 0.164232 +Converged at iteration 33, L1 5.90313e-05, Linf 0.00492675, total time[s] 0.21094 +Converged at iteration 26, L1 6.67433e-05, Linf 0.00435786, total time[s] 0.15644 +Converged at iteration 34, L1 2.32545e-05, Linf 0.0158842, total time[s] 0.166186 +Converged at iteration 26, L1 9.86653e-05, Linf 0.00990828, total time[s] 0.127281 +Converged at iteration 25, L1 8.87155e-05, Linf 0.00839726, total time[s] 0.145286 +Converged at iteration 39, L1 2.77781e-05, Linf 0.013433, total time[s] 0.188206 +Converged at iteration 36, L1 5.47293e-05, Linf 0.0165166, total time[s] 0.258651 +Converged at iteration 25, L1 9.98248e-05, Linf 0.00981068, total time[s] 0.14604 +Converged at iteration 27, L1 8.41981e-05, Linf 0.0061147, total time[s] 0.148512 +Converged at iteration 22, L1 9.63194e-05, Linf 0.00394783, total time[s] 0.109559 +Converged at iteration 21, L1 7.78172e-05, Linf 0.00711862, total time[s] 0.105221 +Converged at iteration 21, L1 5.218e-05, Linf 0.0071329, total time[s] 0.127827 +Converged at iteration 24, L1 3.73347e-05, Linf 0.00881695, total time[s] 0.121637 +Converged at iteration 25, L1 8.99044e-05, Linf 0.0114716, total time[s] 0.157704 +Converged at iteration 25, L1 6.8455e-05, Linf 0.00864098, total time[s] 0.106996 +Converged at iteration 19, L1 8.19585e-05, Linf 0.00334177, total time[s] 0.083829 +Converged at iteration 22, L1 8.45333e-05, Linf 0.00565977, total time[s] 0.177577 +Converged at iteration 21, L1 8.71e-05, Linf 0.00551204, total time[s] 0.092242 +Converged at iteration 27, L1 8.49387e-05, Linf 0.00312668, total time[s] 0.119648 +Converged at iteration 32, L1 4.2828e-05, Linf 0.00594954, total time[s] 0.170392 +Converged at iteration 25, L1 8.06031e-05, Linf 0.00621518, total time[s] 0.16181 +Converged at iteration 24, L1 5.9757e-05, Linf 0.00421275, total time[s] 0.112831 +Converged at iteration 25, L1 7.43417e-05, Linf 0.00574647, total time[s] 0.125571 +Converged at iteration 28, L1 6.80508e-05, Linf 0.00284641, total time[s] 0.152201 +Converged at iteration 24, L1 8.12148e-05, Linf 0.00330567, total time[s] 0.112483 +Converged at iteration 33, L1 5.42725e-05, Linf 0.00550201, total time[s] 0.221655 +Converged at iteration 29, L1 9.1473e-05, Linf 0.00624531, total time[s] 0.18277 +Converged at iteration 30, L1 7.61678e-05, Linf 0.0149527, total time[s] 0.133377 +Converged at iteration 30, L1 8.69621e-05, Linf 0.00205903, total time[s] 0.282599 +Converged at iteration 33, L1 5.68812e-05, Linf 0.00685946, total time[s] 0.180007 +Converged at iteration 26, L1 7.74806e-05, Linf 0.00478198, total time[s] 0.115778 +Converged at iteration 31, L1 6.84423e-05, Linf 0.00488363, total time[s] 0.162516 +Converged at iteration 34, L1 3.98029e-05, Linf 0.0195552, total time[s] 0.15271 +Converged at iteration 27, L1 4.95325e-05, Linf 0.00654556, total time[s] 0.123448 +Converged at iteration 25, L1 9.00689e-05, Linf 0.0073987, total time[s] 0.117105 +Converged at iteration 36, L1 5.2967e-05, Linf 0.0155319, total time[s] 0.173051 +Converged at iteration 39, L1 3.25454e-05, Linf 0.0150568, total time[s] 0.201712 +Converged at iteration 25, L1 9.85189e-05, Linf 0.0105822, total time[s] 0.128633 +Converged at iteration 27, L1 5.84715e-05, Linf 0.00435494, total time[s] 0.19392 +Converged at iteration 23, L1 7.89778e-05, Linf 0.00389702, total time[s] 0.113141 +Converged at iteration 21, L1 9.62351e-05, Linf 0.00483638, total time[s] 0.109721 +Converged at iteration 21, L1 3.53234e-05, Linf 0.00458276, total time[s] 0.126356 +Converged at iteration 23, L1 9.01829e-05, Linf 0.0154575, total time[s] 0.129497 +Converged at iteration 25, L1 6.10969e-05, Linf 0.00705648, total time[s] 0.118124 +Converged at iteration 25, L1 7.86583e-05, Linf 0.00974341, total time[s] 0.122425 +Converged at iteration 19, L1 6.55961e-05, Linf 0.00290995, total time[s] 0.095192 +Converged at iteration 22, L1 7.67019e-05, Linf 0.00498351, total time[s] 0.130553 +Converged at iteration 21, L1 9.54985e-05, Linf 0.00592343, total time[s] 0.125898 +Converged at iteration 32, L1 3.74753e-05, Linf 0.00529019, total time[s] 0.198215 +Converged at iteration 26, L1 9.91734e-05, Linf 0.00607516, total time[s] 0.128485 +Converged at iteration 24, L1 6.37785e-05, Linf 0.00463423, total time[s] 0.106107 +Converged at iteration 28, L1 6.01738e-05, Linf 0.00287093, total time[s] 0.135024 +Converged at iteration 25, L1 6.69318e-05, Linf 0.00584743, total time[s] 0.163477 +Converged at iteration 26, L1 5.96427e-05, Linf 0.00494171, total time[s] 0.120997 +Converged at iteration 25, L1 5.506e-05, Linf 0.00257665, total time[s] 0.173618 +Converged at iteration 33, L1 6.00183e-05, Linf 0.00587224, total time[s] 0.185141 +Converged at iteration 29, L1 8.58698e-05, Linf 0.00529227, total time[s] 0.181842 +Converged at iteration 30, L1 6.22886e-05, Linf 0.0105568, total time[s] 0.196475 +Converged at iteration 30, L1 9.15256e-05, Linf 0.00203635, total time[s] 0.139781 +Converged at iteration 33, L1 5.31206e-05, Linf 0.00461634, total time[s] 0.213743 +Converged at iteration 30, L1 9.72445e-05, Linf 0.0047468, total time[s] 0.138655 +Converged at iteration 25, L1 9.21588e-05, Linf 0.0038799, total time[s] 0.162021 +Converged at iteration 34, L1 4.801e-05, Linf 0.0197829, total time[s] 0.190122 +Converged at iteration 26, L1 8.39773e-05, Linf 0.00930704, total time[s] 0.147796 +Converged at iteration 25, L1 8.54195e-05, Linf 0.0064543, total time[s] 0.11522 +Converged at iteration 36, L1 8.4102e-05, Linf 0.0205942, total time[s] 0.173855 +Converged at iteration 39, L1 4.79524e-05, Linf 0.0170395, total time[s] 0.170544 +Converged at iteration 25, L1 8.3438e-05, Linf 0.00922836, total time[s] 0.114381 +Converged at iteration 27, L1 9.44887e-05, Linf 0.00632773, total time[s] 0.152365 +Converged at iteration 21, L1 8.56302e-05, Linf 0.0069095, total time[s] 0.118197 +Converged at iteration 23, L1 5.66212e-05, Linf 0.00327272, total time[s] 0.16866 +Converged at iteration 24, L1 3.86171e-05, Linf 0.00841463, total time[s] 0.123151 +Converged at iteration 21, L1 4.06769e-05, Linf 0.00356765, total time[s] 0.111445 +Converged at iteration 25, L1 8.40535e-05, Linf 0.010561, total time[s] 0.123841 +Converged at iteration 25, L1 6.60944e-05, Linf 0.00805138, total time[s] 0.130209 +Converged at iteration 19, L1 7.37188e-05, Linf 0.00278381, total time[s] 0.102561 +Converged at iteration 22, L1 8.53156e-05, Linf 0.00605288, total time[s] 0.122885 +Converged at iteration 21, L1 9.5231e-05, Linf 0.0058596, total time[s] 0.118192 +Converged at iteration 32, L1 6.247e-05, Linf 0.00739109, total time[s] 0.154149 +Converged at iteration 24, L1 6.22958e-05, Linf 0.00430393, total time[s] 0.143281 +Converged at iteration 27, L1 6.57858e-05, Linf 0.00286119, total time[s] 0.172668 +Converged at iteration 25, L1 8.17784e-05, Linf 0.0069748, total time[s] 0.117074 +Converged at iteration 28, L1 6.36531e-05, Linf 0.00283122, total time[s] 0.163418 +Converged at iteration 25, L1 7.77541e-05, Linf 0.00600499, total time[s] 0.113555 +Converged at iteration 24, L1 8.19018e-05, Linf 0.00337909, total time[s] 0.104945 +Converged at iteration 33, L1 6.63387e-05, Linf 0.00727304, total time[s] 0.208454 +Converged at iteration 30, L1 6.71396e-05, Linf 0.0053458, total time[s] 0.156589 +Converged at iteration 30, L1 6.09409e-05, Linf 0.0114066, total time[s] 0.142697 +Converged at iteration 30, L1 9.53829e-05, Linf 0.00209446, total time[s] 0.157427 +Converged at iteration 30, L1 9.89881e-05, Linf 0.00514385, total time[s] 0.128798 +Converged at iteration 33, L1 6.37317e-05, Linf 0.00513862, total time[s] 0.232233 +Converged at iteration 26, L1 8.27162e-05, Linf 0.0046461, total time[s] 0.131392 +Converged at iteration 34, L1 5.994e-05, Linf 0.0223694, total time[s] 0.182901 +Converged at iteration 25, L1 9.22607e-05, Linf 0.00739317, total time[s] 0.113287 +Converged at iteration 26, L1 9.76461e-05, Linf 0.0106999, total time[s] 0.146152 +Converged at iteration 39, L1 5.64854e-05, Linf 0.0170141, total time[s] 0.169334 +Converged at iteration 36, L1 5.7034e-05, Linf 0.0153282, total time[s] 0.18107 +Converged at iteration 25, L1 6.71677e-05, Linf 0.00950714, total time[s] 0.118878 +Converged at iteration 27, L1 5.73265e-05, Linf 0.00436013, total time[s] 0.126481 +Converged at iteration 23, L1 9.56562e-05, Linf 0.00432096, total time[s] 0.107465 +Converged at iteration 22, L1 5.56697e-05, Linf 0.00415259, total time[s] 0.138329 +Converged at iteration 20, L1 9.85367e-05, Linf 0.00884208, total time[s] 0.090564 +Converged at iteration 24, L1 3.7048e-05, Linf 0.00977108, total time[s] 0.145572 +Converged at iteration 25, L1 7.79829e-05, Linf 0.00957227, total time[s] 0.114192 +Converged at iteration 25, L1 6.0515e-05, Linf 0.00706531, total time[s] 0.15095 +Converged at iteration 22, L1 8.03647e-05, Linf 0.00577389, total time[s] 0.157704 +Converged at iteration 19, L1 5.33707e-05, Linf 0.00214232, total time[s] 0.102552 +Converged at iteration 22, L1 5.78706e-05, Linf 0.00474851, total time[s] 0.134422 +Converged at iteration 32, L1 4.32945e-05, Linf 0.00493667, total time[s] 0.147449 +Converged at iteration 26, L1 9.52195e-05, Linf 0.00725222, total time[s] 0.134451 +Converged at iteration 24, L1 7.03679e-05, Linf 0.00507143, total time[s] 0.133214 +Converged at iteration 25, L1 7.16361e-05, Linf 0.00703434, total time[s] 0.110091 +Converged at iteration 28, L1 5.87423e-05, Linf 0.00307846, total time[s] 0.163998 +Converged at iteration 26, L1 8.3804e-05, Linf 0.00598904, total time[s] 0.123667 +Converged at iteration 25, L1 6.22031e-05, Linf 0.00288409, total time[s] 0.108142 +Converged at iteration 29, L1 9.22154e-05, Linf 0.00453066, total time[s] 0.134565 +Converged at iteration 33, L1 7.07914e-05, Linf 0.0066264, total time[s] 0.275609 +Converged at iteration 31, L1 5.9411e-05, Linf 0.00159147, total time[s] 0.146445 +Converged at iteration 30, L1 5.00896e-05, Linf 0.0087558, total time[s] 0.155182 +Converged at iteration 30, L1 7.58359e-05, Linf 0.00388476, total time[s] 0.133629 +Converged at iteration 33, L1 6.20729e-05, Linf 0.00507538, total time[s] 0.228164 +Converged at iteration 34, L1 7.12564e-05, Linf 0.0205037, total time[s] 0.19125 +Converged at iteration 25, L1 8.31497e-05, Linf 0.00304048, total time[s] 0.125005 +Converged at iteration 25, L1 8.89637e-05, Linf 0.00693554, total time[s] 0.139238 +Converged at iteration 26, L1 8.93012e-05, Linf 0.00968362, total time[s] 0.135135 +Converged at iteration 36, L1 8.39653e-05, Linf 0.0182951, total time[s] 0.174292 +Converged at iteration 39, L1 7.82648e-05, Linf 0.0183394, total time[s] 0.192347 +Converged at iteration 27, L1 9.92865e-05, Linf 0.00588331, total time[s] 0.137439 +Converged at iteration 25, L1 6.37735e-05, Linf 0.00848547, total time[s] 0.136828 +Converged at iteration 23, L1 7.52783e-05, Linf 0.00388691, total time[s] 0.13596 +Converged at iteration 22, L1 5.18872e-05, Linf 0.00386781, total time[s] 0.105229 +Converged at iteration 21, L1 3.81835e-05, Linf 0.00380355, total time[s] 0.107329 +Converged at iteration 24, L1 4.34955e-05, Linf 0.0102983, total time[s] 0.110769 +Converged at iteration 25, L1 8.259e-05, Linf 0.0103131, total time[s] 0.106472 +Converged at iteration 25, L1 6.2314e-05, Linf 0.00782851, total time[s] 0.174778 +Converged at iteration 22, L1 8.4757e-05, Linf 0.00648693, total time[s] 0.097559 +Converged at iteration 19, L1 5.66675e-05, Linf 0.00184698, total time[s] 0.109233 +Converged at iteration 32, L1 6.65632e-05, Linf 0.00868445, total time[s] 0.180168 +Converged at iteration 22, L1 5.65456e-05, Linf 0.00481964, total time[s] 0.100297 +Converged at iteration 24, L1 7.12898e-05, Linf 0.00473908, total time[s] 0.12533 +Converged at iteration 27, L1 5.69164e-05, Linf 0.00434493, total time[s] 0.141084 +Converged at iteration 28, L1 6.22297e-05, Linf 0.00292214, total time[s] 0.156307 +Converged at iteration 25, L1 8.4285e-05, Linf 0.00799223, total time[s] 0.131321 +Converged at iteration 24, L1 9.53848e-05, Linf 0.00388508, total time[s] 0.113634 +Converged at iteration 26, L1 6.94539e-05, Linf 0.00533709, total time[s] 0.158437 +Converged at iteration 30, L1 7.16959e-05, Linf 0.00477654, total time[s] 0.144841 +Converged at iteration 31, L1 5.71953e-05, Linf 0.00155486, total time[s] 0.167686 +Converged at iteration 33, L1 7.75182e-05, Linf 0.00818422, total time[s] 0.219844 +Converged at iteration 30, L1 5.38672e-05, Linf 0.00962331, total time[s] 0.14878 +Converged at iteration 30, L1 7.66907e-05, Linf 0.00349224, total time[s] 0.171189 +Converged at iteration 33, L1 6.95605e-05, Linf 0.00554116, total time[s] 0.190063 +Converged at iteration 34, L1 8.55412e-05, Linf 0.0227639, total time[s] 0.180228 +Converged at iteration 25, L1 9.08313e-05, Linf 0.00756713, total time[s] 0.130364 +Converged at iteration 26, L1 6.81678e-05, Linf 0.0033697, total time[s] 0.174701 +Converged at iteration 27, L1 4.92503e-05, Linf 0.00576441, total time[s] 0.119535 +Converged at iteration 36, L1 6.68549e-05, Linf 0.0158089, total time[s] 0.160937 +Converged at iteration 39, L1 7.68051e-05, Linf 0.0165765, total time[s] 0.181737 +Converged at iteration 27, L1 6.85761e-05, Linf 0.00459711, total time[s] 0.116505 +Converged at iteration 25, L1 6.82916e-05, Linf 0.00705774, total time[s] 0.154809 +Converged at iteration 22, L1 6.15687e-05, Linf 0.0046034, total time[s] 0.138468 +Converged at iteration 24, L1 5.95805e-05, Linf 0.00346574, total time[s] 0.150481 +Converged at iteration 24, L1 4.86992e-05, Linf 0.0127794, total time[s] 0.151324 +Converged at iteration 21, L1 4.24501e-05, Linf 0.00451493, total time[s] 0.139715 +Converged at iteration 25, L1 5.73334e-05, Linf 0.00733097, total time[s] 0.123462 +Converged at iteration 25, L1 7.95621e-05, Linf 0.00945853, total time[s] 0.119864 +Converged at iteration 18, L1 9.77313e-05, Linf 0.00261836, total time[s] 0.0973 +Converged at iteration 22, L1 6.19498e-05, Linf 0.00501153, total time[s] 0.109591 +Converged at iteration 22, L1 8.59445e-05, Linf 0.0073997, total time[s] 0.17355 +Converged at iteration 27, L1 5.28994e-05, Linf 0.00501365, total time[s] 0.202236 +Converged at iteration 32, L1 5.00629e-05, Linf 0.00670452, total time[s] 0.215274 +Converged at iteration 25, L1 9.06431e-05, Linf 0.00956431, total time[s] 0.120414 +Converged at iteration 24, L1 7.62981e-05, Linf 0.00514121, total time[s] 0.141508 +Converged at iteration 27, L1 6.21178e-05, Linf 0.00504009, total time[s] 0.121434 +Converged at iteration 28, L1 5.77213e-05, Linf 0.00345607, total time[s] 0.178947 +Converged at iteration 33, L1 9.87644e-05, Linf 0.010003, total time[s] 0.207139 +Converged at iteration 25, L1 6.54976e-05, Linf 0.00315121, total time[s] 0.141467 +Converged at iteration 30, L1 3.96943e-05, Linf 0.00684911, total time[s] 0.143243 +Converged at iteration 29, L1 9.35509e-05, Linf 0.00437073, total time[s] 0.180206 +Converged at iteration 33, L1 7.93178e-05, Linf 0.00598629, total time[s] 0.174826 +Converged at iteration 25, L1 9.79342e-05, Linf 0.00351324, total time[s] 0.175131 +Converged at iteration 31, L1 6.75937e-05, Linf 0.0019576, total time[s] 0.182207 +Converged at iteration 27, L1 4.96183e-05, Linf 0.00559305, total time[s] 0.123433 +Converged at iteration 29, L1 9.41937e-05, Linf 0.0075622, total time[s] 0.130944 +Converged at iteration 34, L1 8.60403e-05, Linf 0.0205471, total time[s] 0.141864 +Converged at iteration 25, L1 9.73781e-05, Linf 0.00824142, total time[s] 0.113591 +Converged at iteration 36, L1 9.03551e-05, Linf 0.0176877, total time[s] 0.199785 +Converged at iteration 39, L1 9.393e-05, Linf 0.0179195, total time[s] 0.249719 +Converged at iteration 25, L1 8.19512e-05, Linf 0.00617666, total time[s] 0.134857 +Converged at iteration 28, L1 4.28341e-05, Linf 0.00425564, total time[s] 0.216566 +Converged at iteration 22, L1 5.82527e-05, Linf 0.00439387, total time[s] 0.119289 +Converged at iteration 23, L1 8.66697e-05, Linf 0.00422822, total time[s] 0.143153 +Converged at iteration 24, L1 5.46471e-05, Linf 0.0139895, total time[s] 0.134891 +Converged at iteration 21, L1 4.91281e-05, Linf 0.0048286, total time[s] 0.121819 +Converged at iteration 25, L1 8.58775e-05, Linf 0.0102306, total time[s] 0.133167 +Converged at iteration 25, L1 5.9157e-05, Linf 0.00798683, total time[s] 0.145018 +Converged at iteration 22, L1 9.04813e-05, Linf 0.00802259, total time[s] 0.104953 +Converged at iteration 19, L1 4.77048e-05, Linf 0.00140937, total time[s] 0.105096 +Converged at iteration 22, L1 5.94121e-05, Linf 0.00518795, total time[s] 0.159194 +Converged at iteration 32, L1 6.72298e-05, Linf 0.0072381, total time[s] 0.266952 +Converged at iteration 27, L1 5.57212e-05, Linf 0.00646934, total time[s] 0.161676 +Converged at iteration 24, L1 7.53607e-05, Linf 0.00494887, total time[s] 0.144866 +Converged at iteration 25, L1 9.90831e-05, Linf 0.0101452, total time[s] 0.108596 +Converged at iteration 28, L1 5.87395e-05, Linf 0.00360684, total time[s] 0.151421 +Converged at iteration 26, L1 9.65776e-05, Linf 0.00646795, total time[s] 0.113775 +Converged at iteration 25, L1 5.56542e-05, Linf 0.00284701, total time[s] 0.135769 +Converged at iteration 34, L1 5.27393e-05, Linf 0.00565887, total time[s] 0.152245 +Converged at iteration 30, L1 6.82154e-05, Linf 0.00442676, total time[s] 0.135908 +Converged at iteration 30, L1 4.15373e-05, Linf 0.00543871, total time[s] 0.166863 +Converged at iteration 31, L1 6.25797e-05, Linf 0.0017655, total time[s] 0.149112 +Converged at iteration 33, L1 8.473e-05, Linf 0.0063612, total time[s] 0.20376 +Converged at iteration 26, L1 8.98887e-05, Linf 0.00383181, total time[s] 0.130604 +Converged at iteration 29, L1 9.76264e-05, Linf 0.0075208, total time[s] 0.16001 +Converged at iteration 34, L1 9.82771e-05, Linf 0.0222865, total time[s] 0.140617 +Converged at iteration 27, L1 5.23506e-05, Linf 0.00619743, total time[s] 0.149098 +Converged at iteration 26, L1 4.22456e-05, Linf 0.00294123, total time[s] 0.130554 +Converged at iteration 39, L1 6.77241e-05, Linf 0.015388, total time[s] 0.264155 +Converged at iteration 36, L1 6.04132e-05, Linf 0.0140286, total time[s] 0.393802 +Converged at iteration 27, L1 5.74998e-05, Linf 0.00362839, total time[s] 0.159331 +Converged at iteration 27, L1 5.80272e-05, Linf 0.004084, total time[s] 0.138132 +Converged at iteration 24, L1 7.34266e-05, Linf 0.00391736, total time[s] 0.147117 +Converged at iteration 22, L1 7.35233e-05, Linf 0.00494545, total time[s] 0.110073 +Converged at iteration 21, L1 4.60831e-05, Linf 0.00473284, total time[s] 0.135061 +Converged at iteration 24, L1 5.2985e-05, Linf 0.0101897, total time[s] 0.125177 +Converged at iteration 25, L1 5.20897e-05, Linf 0.00729566, total time[s] 0.153222 +Converged at iteration 25, L1 8.12604e-05, Linf 0.00862273, total time[s] 0.147446 +Converged at iteration 18, L1 8.2937e-05, Linf 0.00226766, total time[s] 0.091093 +Converged at iteration 22, L1 8.78193e-05, Linf 0.00837657, total time[s] 0.154418 +Converged at iteration 22, L1 6.50133e-05, Linf 0.00460415, total time[s] 0.148228 +Converged at iteration 32, L1 4.30856e-05, Linf 0.0046839, total time[s] 0.169957 +Converged at iteration 27, L1 6.64897e-05, Linf 0.00737521, total time[s] 0.143475 +Converged at iteration 25, L1 9.82716e-05, Linf 0.0111681, total time[s] 0.115106 +Converged at iteration 24, L1 7.81982e-05, Linf 0.00536496, total time[s] 0.207737 +Converged at iteration 27, L1 8.08222e-05, Linf 0.00586848, total time[s] 0.147295 +Converged at iteration 28, L1 5.29115e-05, Linf 0.00313479, total time[s] 0.157153 +Converged at iteration 34, L1 5.85991e-05, Linf 0.00753912, total time[s] 0.219717 +Converged at iteration 25, L1 7.47062e-05, Linf 0.00360855, total time[s] 0.170284 +Converged at iteration 29, L1 7.74756e-05, Linf 0.00338921, total time[s] 0.140963 +Converged at iteration 29, L1 9.35951e-05, Linf 0.010468, total time[s] 0.152005 +Converged at iteration 31, L1 7.829e-05, Linf 0.00244495, total time[s] 0.151854 +Converged at iteration 33, L1 8.2189e-05, Linf 0.00609308, total time[s] 0.247534 +Converged at iteration 30, L1 4.53553e-05, Linf 0.00347923, total time[s] 0.160958 +Converged at iteration 26, L1 5.44812e-05, Linf 0.00274957, total time[s] 0.126315 +Converged at iteration 34, L1 7.7123e-05, Linf 0.0182186, total time[s] 0.163214 +Converged at iteration 27, L1 4.89442e-05, Linf 0.00587867, total time[s] 0.16366 +Converged at iteration 26, L1 3.88435e-05, Linf 0.0024582, total time[s] 0.113758 +Converged at iteration 36, L1 7.80246e-05, Linf 0.0156875, total time[s] 0.184754 +Converged at iteration 39, L1 8.40185e-05, Linf 0.0173019, total time[s] 0.191259 +Converged at iteration 27, L1 7.59747e-05, Linf 0.00501441, total time[s] 0.145329 +Converged at iteration 27, L1 6.28467e-05, Linf 0.00377642, total time[s] 0.162725 +Converged at iteration 22, L1 6.59153e-05, Linf 0.00482253, total time[s] 0.117166 +Converged at iteration 24, L1 6.02139e-05, Linf 0.00351372, total time[s] 0.165773 +Converged at iteration 24, L1 5.77766e-05, Linf 0.0112373, total time[s] 0.190678 +Converged at iteration 21, L1 4.9848e-05, Linf 0.0046329, total time[s] 0.122908 +Converged at iteration 25, L1 8.56361e-05, Linf 0.00916574, total time[s] 0.149094 +Converged at iteration 25, L1 5.3908e-05, Linf 0.00795356, total time[s] 0.22086 +Converged at iteration 22, L1 9.04486e-05, Linf 0.00891365, total time[s] 0.101403 +Converged at iteration 18, L1 7.99396e-05, Linf 0.00209241, total time[s] 0.145696 +Converged at iteration 32, L1 6.44291e-05, Linf 0.0074866, total time[s] 0.151995 +Converged at iteration 22, L1 6.33353e-05, Linf 0.00543108, total time[s] 0.135291 +Converged at iteration 24, L1 7.96847e-05, Linf 0.00514938, total time[s] 0.118471 +Converged at iteration 27, L1 6.34621e-05, Linf 0.00785139, total time[s] 0.2057 +Converged at iteration 28, L1 5.33847e-05, Linf 0.0037293, total time[s] 0.168509 +Converged at iteration 26, L1 4.9002e-05, Linf 0.00641582, total time[s] 0.174652 +Converged at iteration 25, L1 6.80273e-05, Linf 0.0034611, total time[s] 0.168645 +Converged at iteration 27, L1 6.96403e-05, Linf 0.00547215, total time[s] 0.21319 +Converged at iteration 29, L1 9.43231e-05, Linf 0.00455536, total time[s] 0.1855 +Converged at iteration 31, L1 7.14712e-05, Linf 0.00221593, total time[s] 0.163066 +Converged at iteration 34, L1 5.92891e-05, Linf 0.00669002, total time[s] 0.2103 +Converged at iteration 30, L1 4.28769e-05, Linf 0.00360756, total time[s] 0.14027 +Converged at iteration 29, L1 9.7932e-05, Linf 0.0103537, total time[s] 0.195166 +Converged at iteration 34, L1 8.62934e-05, Linf 0.0198868, total time[s] 0.175785 +Converged at iteration 33, L1 8.38539e-05, Linf 0.00626505, total time[s] 0.185175 +Converged at iteration 26, L1 4.51449e-05, Linf 0.00225458, total time[s] 0.1301 +Converged at iteration 26, L1 7.63268e-05, Linf 0.00349642, total time[s] 0.144268 +Converged at iteration 27, L1 5.32419e-05, Linf 0.00660909, total time[s] 0.144417 +Converged at iteration 39, L1 7.92654e-05, Linf 0.0161891, total time[s] 0.182195 +Converged at iteration 36, L1 7.67385e-05, Linf 0.0159528, total time[s] 0.215272 +Converged at iteration 27, L1 7.65989e-05, Linf 0.00428044, total time[s] 0.207094 +Converged at iteration 28, L1 4.22934e-05, Linf 0.00446755, total time[s] 0.185496 +Converged at iteration 23, L1 9.2055e-05, Linf 0.00440225, total time[s] 0.124082 +Converged at iteration 22, L1 6.32922e-05, Linf 0.00470005, total time[s] 0.129871 +Converged at iteration 21, L1 5.56028e-05, Linf 0.00517394, total time[s] 0.119754 +Converged at iteration 24, L1 6.65257e-05, Linf 0.0131201, total time[s] 0.127149 +Converged at iteration 25, L1 5.49961e-05, Linf 0.00848677, total time[s] 0.12106 +Converged at iteration 25, L1 8.85818e-05, Linf 0.00966204, total time[s] 0.129077 +Converged at iteration 18, L1 8.61967e-05, Linf 0.00225765, total time[s] 0.107509 +Converged at iteration 22, L1 9.33791e-05, Linf 0.00954361, total time[s] 0.150714 +Converged at iteration 22, L1 6.1763e-05, Linf 0.00542668, total time[s] 0.147105 +Converged at iteration 32, L1 7.32534e-05, Linf 0.00745826, total time[s] 0.151985 +Converged at iteration 27, L1 6.32137e-05, Linf 0.00959244, total time[s] 0.151368 +Converged at iteration 24, L1 7.77498e-05, Linf 0.00508465, total time[s] 0.129176 +Converged at iteration 26, L1 5.26051e-05, Linf 0.00676754, total time[s] 0.207656 +Converged at iteration 28, L1 5.39739e-05, Linf 0.00334564, total time[s] 0.133871 +Converged at iteration 27, L1 6.14855e-05, Linf 0.00509824, total time[s] 0.168219 +Converged at iteration 25, L1 5.96629e-05, Linf 0.00319721, total time[s] 0.202493 +Converged at iteration 34, L1 5.8214e-05, Linf 0.00592772, total time[s] 0.186843 +Converged at iteration 30, L1 6.3464e-05, Linf 0.00423142, total time[s] 0.223887 +Converged at iteration 30, L1 3.78653e-05, Linf 0.00360417, total time[s] 0.147332 +Converged at iteration 31, L1 6.92716e-05, Linf 0.00209113, total time[s] 0.155186 +Converged at iteration 33, L1 8.58544e-05, Linf 0.00810039, total time[s] 0.23519 +Converged at iteration 30, L1 3.90301e-05, Linf 0.00353103, total time[s] 0.187223 +Converged at iteration 27, L1 7.87866e-05, Linf 0.0044632, total time[s] 0.188569 +Converged at iteration 34, L1 8.97437e-05, Linf 0.0207987, total time[s] 0.206054 +Converged at iteration 27, L1 5.32965e-05, Linf 0.00701203, total time[s] 0.189028 +Converged at iteration 26, L1 4.83374e-05, Linf 0.00234303, total time[s] 0.182076 +Converged at iteration 40, L1 6.80987e-05, Linf 0.00367448, total time[s] 0.121588 +Converged at iteration 35, L1 7.63623e-05, Linf 0.00339995, total time[s] 0.097265 +Converged at iteration 30, L1 9.65888e-05, Linf 0.00432839, total time[s] 0.084147 +Converged at iteration 31, L1 6.19818e-05, Linf 0.00502563, total time[s] 0.090612 +Converged at iteration 27, L1 6.25989e-05, Linf 0.00499707, total time[s] 0.107242 +Converged at iteration 22, L1 8.58653e-05, Linf 0.00448845, total time[s] 0.075419 +Converged at iteration 20, L1 9.60171e-05, Linf 0.0039784, total time[s] 0.060785 +Converged at iteration 24, L1 8.84436e-05, Linf 0.00482826, total time[s] 0.070504 +Converged at iteration 28, L1 7.38687e-05, Linf 0.00444863, total time[s] 0.109026 +Converged at iteration 26, L1 8.13413e-05, Linf 0.00547005, total time[s] 0.097296 +Converged at iteration 22, L1 7.39251e-05, Linf 0.00508712, total time[s] 0.073928 +Converged at iteration 19, L1 6.62813e-05, Linf 0.0039314, total time[s] 0.05095 +Converged at iteration 30, L1 8.01833e-05, Linf 0.00330254, total time[s] 0.078573 +Converged at iteration 20, L1 8.44326e-05, Linf 0.00455558, total time[s] 0.067974 +Converged at iteration 24, L1 7.10761e-05, Linf 0.00468283, total time[s] 0.105814 +Converged at iteration 31, L1 8.93422e-05, Linf 0.00570434, total time[s] 0.115651 +Converged at iteration 27, L1 9.91417e-05, Linf 0.00569817, total time[s] 0.103001 +Converged at iteration 24, L1 8.796e-05, Linf 0.00465006, total time[s] 0.107148 +Converged at iteration 23, L1 9.2505e-05, Linf 0.00420574, total time[s] 0.060211 +Converged at iteration 26, L1 7.21879e-05, Linf 0.0044609, total time[s] 0.121702 +Converged at iteration 29, L1 7.81431e-05, Linf 0.00479558, total time[s] 0.127943 +Converged at iteration 34, L1 7.22002e-05, Linf 0.00412691, total time[s] 0.138827 +Converged at iteration 30, L1 9.39499e-05, Linf 0.00442587, total time[s] 0.101527 +Converged at iteration 28, L1 9.49869e-05, Linf 0.00310981, total time[s] 0.084328 +Converged at iteration 32, L1 9.39346e-05, Linf 0.00374081, total time[s] 0.097114 +Converged at iteration 37, L1 7.34635e-05, Linf 0.00327705, total time[s] 0.143913 +Converged at iteration 33, L1 8.44815e-05, Linf 0.00469113, total time[s] 0.088686 +Converged at iteration 28, L1 9.65542e-05, Linf 0.00430189, total time[s] 0.07362 +Converged at iteration 24, L1 8.82982e-05, Linf 0.0032848, total time[s] 0.078783 +Converged at iteration 26, L1 8.99003e-05, Linf 0.00384009, total time[s] 0.090266 +Converged at iteration 38, L1 7.00697e-05, Linf 0.0118371, total time[s] 0.115234 +Converged at iteration 35, L1 6.96088e-05, Linf 0.0109062, total time[s] 0.102454 +Converged at iteration 26, L1 6.08125e-05, Linf 0.00500386, total time[s] 0.070437 +Converged at iteration 30, L1 6.60819e-05, Linf 0.00633573, total time[s] 0.113302 +Converged at iteration 23, L1 5.21955e-05, Linf 0.00426227, total time[s] 0.069467 +Converged at iteration 22, L1 5.72867e-05, Linf 0.0032391, total time[s] 0.185888 +Converged at iteration 19, L1 7.57606e-05, Linf 0.00812781, total time[s] 0.102965 +Converged at iteration 21, L1 9.74315e-05, Linf 0.00763171, total time[s] 0.107 +Converged at iteration 23, L1 5.11392e-05, Linf 0.00367666, total time[s] 0.080198 +Converged at iteration 22, L1 7.04963e-05, Linf 0.00585137, total time[s] 0.07415 +Converged at iteration 19, L1 7.69628e-05, Linf 0.00423732, total time[s] 0.073666 +Converged at iteration 18, L1 5.95107e-05, Linf 0.00462749, total time[s] 0.060097 +Converged at iteration 31, L1 9.05253e-05, Linf 0.00515662, total time[s] 0.166999 +Converged at iteration 19, L1 9.4044e-05, Linf 0.00675785, total time[s] 0.149172 +Converged at iteration 22, L1 8.1083e-05, Linf 0.00598488, total time[s] 0.088744 +Converged at iteration 25, L1 9.98448e-05, Linf 0.00689859, total time[s] 0.123716 +Converged at iteration 25, L1 5.95926e-05, Linf 0.00242975, total time[s] 0.10884 +Converged at iteration 22, L1 7.0706e-05, Linf 0.00215168, total time[s] 0.103028 +Converged at iteration 23, L1 7.60544e-05, Linf 0.00294183, total time[s] 0.106128 +Converged at iteration 25, L1 6.8774e-05, Linf 0.00298907, total time[s] 0.130087 +Converged at iteration 26, L1 6.52626e-05, Linf 0.0029511, total time[s] 0.229719 +Converged at iteration 30, L1 5.8405e-05, Linf 0.00438528, total time[s] 0.131723 +Converged at iteration 28, L1 6.15701e-05, Linf 0.00163078, total time[s] 0.090826 +Converged at iteration 29, L1 7.55029e-05, Linf 0.00535136, total time[s] 0.118362 +Converged at iteration 29, L1 7.18482e-05, Linf 0.00217447, total time[s] 0.084304 +Converged at iteration 29, L1 4.13989e-05, Linf 0.00233999, total time[s] 0.083473 +Converged at iteration 32, L1 5.20278e-05, Linf 0.00886905, total time[s] 0.082795 +Converged at iteration 26, L1 8.15695e-05, Linf 0.00453761, total time[s] 0.071341 +Converged at iteration 25, L1 6.83147e-05, Linf 0.00358075, total time[s] 0.089884 +Converged at iteration 23, L1 7.49867e-05, Linf 0.0059413, total time[s] 0.08415 +Converged at iteration 38, L1 4.13714e-05, Linf 0.0196735, total time[s] 0.163041 +Converged at iteration 36, L1 6.89502e-05, Linf 0.0199175, total time[s] 0.147344 +Converged at iteration 25, L1 9.95569e-05, Linf 0.0108885, total time[s] 0.181498 +Converged at iteration 28, L1 4.60177e-05, Linf 0.00794641, total time[s] 0.104501 +Converged at iteration 24, L1 5.06883e-05, Linf 0.0066121, total time[s] 0.12121 +Converged at iteration 21, L1 5.75998e-05, Linf 0.00795432, total time[s] 0.053921 +Converged at iteration 20, L1 5.803e-05, Linf 0.00670077, total time[s] 0.088219 +Converged at iteration 22, L1 4.84967e-05, Linf 0.00310809, total time[s] 0.118517 +Converged at iteration 24, L1 7.22622e-05, Linf 0.00236747, total time[s] 0.113588 +Converged at iteration 24, L1 8.61168e-05, Linf 0.00255284, total time[s] 0.068402 +Converged at iteration 21, L1 9.25309e-05, Linf 0.00246942, total time[s] 0.086525 +Converged at iteration 19, L1 4.85565e-05, Linf 0.00479329, total time[s] 0.061417 +Converged at iteration 32, L1 4.83522e-05, Linf 0.00669399, total time[s] 0.117589 +Converged at iteration 20, L1 8.3122e-05, Linf 0.00450354, total time[s] 0.07638 +Converged at iteration 23, L1 6.11259e-05, Linf 0.00339398, total time[s] 0.070077 +Converged at iteration 27, L1 5.53702e-05, Linf 0.00260564, total time[s] 0.100034 +Converged at iteration 27, L1 6.6075e-05, Linf 0.00220177, total time[s] 0.09775 +Converged at iteration 23, L1 8.09046e-05, Linf 0.00339147, total time[s] 0.084851 +Converged at iteration 24, L1 6.45261e-05, Linf 0.00187832, total time[s] 0.074327 +Converged at iteration 24, L1 9.21967e-05, Linf 0.00372798, total time[s] 0.21751 +Converged at iteration 27, L1 8.55877e-05, Linf 0.00500117, total time[s] 0.152229 +Converged at iteration 33, L1 6.73729e-05, Linf 0.00510726, total time[s] 0.141707 +Converged at iteration 31, L1 6.75445e-05, Linf 0.00283284, total time[s] 0.16124 +Converged at iteration 31, L1 3.86497e-05, Linf 0.00780113, total time[s] 0.134273 +Converged at iteration 31, L1 7.52971e-05, Linf 0.00294879, total time[s] 0.157887 +Converged at iteration 33, L1 8.27894e-05, Linf 0.00518914, total time[s] 0.138576 +Converged at iteration 33, L1 2.56296e-05, Linf 0.0155469, total time[s] 0.124364 +Converged at iteration 25, L1 7.83131e-05, Linf 0.00341207, total time[s] 0.080709 +Converged at iteration 25, L1 5.33464e-05, Linf 0.0028285, total time[s] 0.097535 +Converged at iteration 26, L1 6.22253e-05, Linf 0.00346869, total time[s] 0.082076 +Converged at iteration 38, L1 4.68225e-05, Linf 0.018997, total time[s] 0.104752 +Converged at iteration 36, L1 6.27653e-05, Linf 0.0173984, total time[s] 0.153951 +Converged at iteration 25, L1 6.63428e-05, Linf 0.00927572, total time[s] 0.102686 +Converged at iteration 26, L1 7.44854e-05, Linf 0.0064932, total time[s] 0.103783 +Converged at iteration 22, L1 8.31986e-05, Linf 0.00299735, total time[s] 0.065349 +Converged at iteration 21, L1 9.36267e-05, Linf 0.00744318, total time[s] 0.072755 +Converged at iteration 21, L1 2.88758e-05, Linf 0.00555469, total time[s] 0.091366 +Converged at iteration 23, L1 6.14299e-05, Linf 0.00917326, total time[s] 0.110592 +Converged at iteration 25, L1 8.32821e-05, Linf 0.0111926, total time[s] 0.169015 +Converged at iteration 25, L1 7.36715e-05, Linf 0.00596689, total time[s] 0.154247 +Converged at iteration 22, L1 5.59887e-05, Linf 0.00312953, total time[s] 0.186616 +Converged at iteration 18, L1 7.15469e-05, Linf 0.00456997, total time[s] 0.052657 +Converged at iteration 32, L1 6.9327e-05, Linf 0.00912846, total time[s] 0.087067 +Converged at iteration 21, L1 8.11702e-05, Linf 0.00574536, total time[s] 0.096308 +Converged at iteration 23, L1 9.25344e-05, Linf 0.00593902, total time[s] 0.086828 +Converged at iteration 27, L1 9.53225e-05, Linf 0.00385901, total time[s] 0.161924 +Converged at iteration 27, L1 9.48877e-05, Linf 0.00403826, total time[s] 0.089713 +Converged at iteration 24, L1 6.78942e-05, Linf 0.00754139, total time[s] 0.089969 +Converged at iteration 24, L1 7.12105e-05, Linf 0.0034626, total time[s] 0.106634 +Converged at iteration 24, L1 9.48987e-05, Linf 0.00596608, total time[s] 0.067656 +Converged at iteration 28, L1 9.12369e-05, Linf 0.00589469, total time[s] 0.105835 +Converged at iteration 32, L1 8.04009e-05, Linf 0.00739362, total time[s] 0.148139 +Converged at iteration 30, L1 6.95427e-05, Linf 0.00208183, total time[s] 0.094911 +Converged at iteration 30, L1 8.68068e-05, Linf 0.0157275, total time[s] 0.081621 +Converged at iteration 31, L1 7.54963e-05, Linf 0.00835936, total time[s] 0.12178 +Converged at iteration 32, L1 9.29826e-05, Linf 0.006654, total time[s] 0.104618 +Converged at iteration 33, L1 8.72193e-05, Linf 0.0269212, total time[s] 0.144774 +Converged at iteration 25, L1 8.56088e-05, Linf 0.00434214, total time[s] 0.219838 +Converged at iteration 25, L1 7.94294e-05, Linf 0.00423912, total time[s] 0.205719 +Converged at iteration 26, L1 8.34938e-05, Linf 0.00955517, total time[s] 0.091357 +Converged at iteration 39, L1 3.53729e-05, Linf 0.00954757, total time[s] 0.148304 +Converged at iteration 37, L1 3.59748e-05, Linf 0.00911032, total time[s] 0.129573 +Converged at iteration 26, L1 3.94934e-05, Linf 0.00449758, total time[s] 0.114784 +Converged at iteration 28, L1 6.04679e-05, Linf 0.00713057, total time[s] 0.147792 +Converged at iteration 22, L1 6.01658e-05, Linf 0.00279874, total time[s] 0.090046 +Converged at iteration 22, L1 7.1903e-05, Linf 0.0048931, total time[s] 0.124804 +Converged at iteration 21, L1 3.63518e-05, Linf 0.00299062, total time[s] 0.109407 +Converged at iteration 24, L1 4.91687e-05, Linf 0.010515, total time[s] 0.099626 +Converged at iteration 26, L1 4.81621e-05, Linf 0.00569047, total time[s] 0.088641 +Converged at iteration 25, L1 7.5769e-05, Linf 0.00754578, total time[s] 0.07114 +Converged at iteration 22, L1 7.26283e-05, Linf 0.00475431, total time[s] 0.111909 +Converged at iteration 18, L1 6.8427e-05, Linf 0.0027483, total time[s] 0.094637 +Converged at iteration 33, L1 4.23871e-05, Linf 0.00505452, total time[s] 0.146735 +Converged at iteration 21, L1 7.97526e-05, Linf 0.00541925, total time[s] 0.096449 +Converged at iteration 23, L1 9.82655e-05, Linf 0.0055622, total time[s] 0.08022 +Converged at iteration 27, L1 8.22028e-05, Linf 0.00376904, total time[s] 0.115323 +Converged at iteration 28, L1 6.58445e-05, Linf 0.00351631, total time[s] 0.109736 +Converged at iteration 25, L1 7.45746e-05, Linf 0.00782787, total time[s] 0.075639 +Converged at iteration 23, L1 9.30885e-05, Linf 0.00372719, total time[s] 0.124108 +Converged at iteration 25, L1 6.91372e-05, Linf 0.0050502, total time[s] 0.106213 +Converged at iteration 30, L1 6.47622e-05, Linf 0.00521629, total time[s] 0.081707 +Converged at iteration 33, L1 5.98561e-05, Linf 0.00538526, total time[s] 0.102995 +Converged at iteration 30, L1 6.47113e-05, Linf 0.00181396, total time[s] 0.082981 +Converged at iteration 30, L1 7.78671e-05, Linf 0.0139472, total time[s] 0.089096 +Converged at iteration 31, L1 7.08357e-05, Linf 0.00681322, total time[s] 0.127654 +Converged at iteration 33, L1 6.45196e-05, Linf 0.00631382, total time[s] 0.091221 +Converged at iteration 34, L1 5.32661e-05, Linf 0.0207529, total time[s] 0.099339 +Converged at iteration 27, L1 7.91616e-05, Linf 0.00392667, total time[s] 0.094996 +Converged at iteration 25, L1 7.87775e-05, Linf 0.00533819, total time[s] 0.096063 +Converged at iteration 27, L1 4.99082e-05, Linf 0.00769802, total time[s] 0.091813 +Converged at iteration 39, L1 5.21038e-05, Linf 0.0155437, total time[s] 0.122351 +Converged at iteration 36, L1 7.15038e-05, Linf 0.013808, total time[s] 0.151069 +Converged at iteration 25, L1 9.84435e-05, Linf 0.0110821, total time[s] 0.148824 +Converged at iteration 27, L1 9.05727e-05, Linf 0.00703848, total time[s] 0.166429 +Converged at iteration 23, L1 8.94587e-05, Linf 0.00430566, total time[s] 0.145309 +Converged at iteration 22, L1 7.18081e-05, Linf 0.00414344, total time[s] 0.113969 +Converged at iteration 20, L1 5.35415e-05, Linf 0.00718373, total time[s] 0.090288 +Converged at iteration 24, L1 3.63304e-05, Linf 0.00791313, total time[s] 0.103458 +Converged at iteration 25, L1 9.01509e-05, Linf 0.0117583, total time[s] 0.158869 +Converged at iteration 25, L1 6.15598e-05, Linf 0.00553003, total time[s] 0.173833 +Converged at iteration 22, L1 6.12929e-05, Linf 0.00374883, total time[s] 0.118534 +Converged at iteration 17, L1 9.45026e-05, Linf 0.00342995, total time[s] 0.06531 +Converged at iteration 32, L1 6.89498e-05, Linf 0.00606072, total time[s] 0.129842 +Converged at iteration 22, L1 6.01669e-05, Linf 0.00502293, total time[s] 0.081923 +Converged at iteration 24, L1 6.16228e-05, Linf 0.00468703, total time[s] 0.105912 +Converged at iteration 26, L1 9.33172e-05, Linf 0.00705506, total time[s] 0.108101 +Converged at iteration 28, L1 5.43143e-05, Linf 0.00302573, total time[s] 0.11676 +Converged at iteration 25, L1 6.17993e-05, Linf 0.00736146, total time[s] 0.126837 +Converged at iteration 25, L1 5.774e-05, Linf 0.0121264, total time[s] 0.144205 +Converged at iteration 26, L1 7.94475e-05, Linf 0.00544192, total time[s] 0.144233 +Converged at iteration 29, L1 7.03408e-05, Linf 0.00405156, total time[s] 0.142129 +Converged at iteration 33, L1 6.30423e-05, Linf 0.00581094, total time[s] 0.140221 +Converged at iteration 30, L1 8.9272e-05, Linf 0.00244053, total time[s] 0.113105 +Converged at iteration 30, L1 5.73652e-05, Linf 0.0100293, total time[s] 0.179931 +Converged at iteration 31, L1 6.08384e-05, Linf 0.00386229, total time[s] 0.102215 +Converged at iteration 33, L1 6.83153e-05, Linf 0.0051782, total time[s] 0.10184 +Converged at iteration 34, L1 7.81095e-05, Linf 0.0206268, total time[s] 0.16929 +Converged at iteration 25, L1 7.9719e-05, Linf 0.00475017, total time[s] 0.073144 +Converged at iteration 25, L1 8.74142e-05, Linf 0.00492491, total time[s] 0.164273 +Converged at iteration 26, L1 8.93586e-05, Linf 0.0101013, total time[s] 0.14019 +Converged at iteration 39, L1 3.58659e-05, Linf 0.0107495, total time[s] 0.117896 +Converged at iteration 36, L1 6.41744e-05, Linf 0.0133334, total time[s] 0.172341 +Converged at iteration 25, L1 9.68818e-05, Linf 0.00894861, total time[s] 0.083294 +Converged at iteration 29, L1 3.84267e-05, Linf 0.00533494, total time[s] 0.160632 +Converged at iteration 23, L1 6.11054e-05, Linf 0.00329676, total time[s] 0.070738 +Converged at iteration 22, L1 7.24695e-05, Linf 0.00432665, total time[s] 0.101505 +Converged at iteration 20, L1 5.90653e-05, Linf 0.0054826, total time[s] 0.116125 +Converged at iteration 24, L1 5.10801e-05, Linf 0.0111678, total time[s] 0.076641 +Converged at iteration 26, L1 4.60311e-05, Linf 0.00597481, total time[s] 0.084879 +Converged at iteration 25, L1 7.07752e-05, Linf 0.00735729, total time[s] 0.125256 +Converged at iteration 22, L1 6.77286e-05, Linf 0.0048485, total time[s] 0.113232 +Converged at iteration 18, L1 8.50142e-05, Linf 0.00408191, total time[s] 0.081461 +Converged at iteration 32, L1 7.60935e-05, Linf 0.00807242, total time[s] 0.120941 +Converged at iteration 22, L1 5.45335e-05, Linf 0.0043998, total time[s] 0.09154 +Converged at iteration 24, L1 6.49536e-05, Linf 0.00453706, total time[s] 0.084255 +Converged at iteration 27, L1 6.7871e-05, Linf 0.00298068, total time[s] 0.16584 +Converged at iteration 28, L1 5.72922e-05, Linf 0.00329161, total time[s] 0.094929 +Converged at iteration 25, L1 7.60364e-05, Linf 0.00929569, total time[s] 0.071452 +Converged at iteration 24, L1 7.79858e-05, Linf 0.00356419, total time[s] 0.071007 +Converged at iteration 26, L1 5.75582e-05, Linf 0.00470574, total time[s] 0.113717 +Converged at iteration 30, L1 6.92464e-05, Linf 0.00530472, total time[s] 0.088472 +Converged at iteration 33, L1 6.66279e-05, Linf 0.00627638, total time[s] 0.113556 +Converged at iteration 30, L1 7.1339e-05, Linf 0.00218788, total time[s] 0.08455 +Converged at iteration 30, L1 6.59887e-05, Linf 0.0118466, total time[s] 0.130612 +Converged at iteration 31, L1 6.00181e-05, Linf 0.00432465, total time[s] 0.14362 +Converged at iteration 33, L1 7.06577e-05, Linf 0.00544859, total time[s] 0.125538 +Converged at iteration 34, L1 5.4495e-05, Linf 0.0190801, total time[s] 0.10797 +Converged at iteration 26, L1 6.30347e-05, Linf 0.0027561, total time[s] 0.070409 +Converged at iteration 26, L1 5.25617e-05, Linf 0.00317843, total time[s] 0.099045 +Converged at iteration 26, L1 9.91685e-05, Linf 0.0119745, total time[s] 0.085713 +Converged at iteration 39, L1 7.18476e-05, Linf 0.0156492, total time[s] 0.14205 +Converged at iteration 36, L1 7.25057e-05, Linf 0.0137551, total time[s] 0.104293 +Converged at iteration 25, L1 8.22297e-05, Linf 0.0100339, total time[s] 0.065618 +Converged at iteration 28, L1 4.99317e-05, Linf 0.00435441, total time[s] 0.097568 +Converged at iteration 24, L1 6.69907e-05, Linf 0.00709139, total time[s] 0.086999 +Converged at iteration 22, L1 7.87011e-05, Linf 0.004283, total time[s] 0.06926 +Converged at iteration 20, L1 5.13835e-05, Linf 0.00482607, total time[s] 0.059956 +Converged at iteration 24, L1 4.25533e-05, Linf 0.00961414, total time[s] 0.104445 +Converged at iteration 25, L1 9.94773e-05, Linf 0.0124522, total time[s] 0.100396 +Converged at iteration 25, L1 5.97039e-05, Linf 0.0061165, total time[s] 0.11279 +Converged at iteration 22, L1 6.45356e-05, Linf 0.00441411, total time[s] 0.071825 +Converged at iteration 18, L1 6.61015e-05, Linf 0.0038938, total time[s] 0.07796 +Converged at iteration 32, L1 6.41684e-05, Linf 0.00569057, total time[s] 0.138195 +Converged at iteration 22, L1 5.87933e-05, Linf 0.00493979, total time[s] 0.071538 +Converged at iteration 24, L1 6.72199e-05, Linf 0.00466913, total time[s] 0.098154 +Converged at iteration 27, L1 5.32927e-05, Linf 0.00516077, total time[s] 0.110694 +Converged at iteration 28, L1 5.39929e-05, Linf 0.00365733, total time[s] 0.085218 +Converged at iteration 25, L1 7.21468e-05, Linf 0.00865479, total time[s] 0.066402 +Converged at iteration 25, L1 5.65906e-05, Linf 0.00304632, total time[s] 0.093396 +Converged at iteration 26, L1 8.56021e-05, Linf 0.0057411, total time[s] 0.122042 +Converged at iteration 29, L1 9.24976e-05, Linf 0.00512689, total time[s] 0.096067 +Converged at iteration 33, L1 7.31524e-05, Linf 0.00688735, total time[s] 0.115743 +Converged at iteration 30, L1 8.39729e-05, Linf 0.0024385, total time[s] 0.115717 +Converged at iteration 30, L1 5.2981e-05, Linf 0.00941547, total time[s] 0.144778 +Converged at iteration 30, L1 9.31461e-05, Linf 0.00476372, total time[s] 0.097737 +Converged at iteration 33, L1 7.85466e-05, Linf 0.00569093, total time[s] 0.126764 +Converged at iteration 34, L1 7.95099e-05, Linf 0.020231, total time[s] 0.110205 +Converged at iteration 25, L1 8.47356e-05, Linf 0.00372216, total time[s] 0.143948 +Converged at iteration 26, L1 4.82003e-05, Linf 0.00325511, total time[s] 0.160811 +Converged at iteration 26, L1 9.13088e-05, Linf 0.0108938, total time[s] 0.088629 +Converged at iteration 39, L1 5.27604e-05, Linf 0.0138911, total time[s] 0.117634 +Converged at iteration 36, L1 7.25218e-05, Linf 0.0138729, total time[s] 0.104456 +Converged at iteration 25, L1 7.50734e-05, Linf 0.00831195, total time[s] 0.076989 +Converged at iteration 28, L1 8.03619e-05, Linf 0.00624205, total time[s] 0.108454 +Converged at iteration 23, L1 8.51214e-05, Linf 0.00415623, total time[s] 0.0819 +Converged at iteration 22, L1 5.66564e-05, Linf 0.00425783, total time[s] 0.060009 +Converged at iteration 20, L1 6.58339e-05, Linf 0.00694799, total time[s] 0.069546 +Converged at iteration 24, L1 5.77094e-05, Linf 0.0125509, total time[s] 0.09879 +Converged at iteration 26, L1 4.23621e-05, Linf 0.00514706, total time[s] 0.121697 +Converged at iteration 25, L1 6.41982e-05, Linf 0.00724288, total time[s] 0.073593 +Converged at iteration 22, L1 7.06564e-05, Linf 0.00546171, total time[s] 0.089038 +Converged at iteration 18, L1 8.60576e-05, Linf 0.00548625, total time[s] 0.057792 +Converged at iteration 32, L1 6.95435e-05, Linf 0.00663319, total time[s] 0.121629 +Converged at iteration 22, L1 5.6888e-05, Linf 0.00474834, total time[s] 0.119193 +Converged at iteration 24, L1 7.11028e-05, Linf 0.00482742, total time[s] 0.079807 +Converged at iteration 27, L1 5.63854e-05, Linf 0.00421149, total time[s] 0.080958 +Converged at iteration 28, L1 5.62866e-05, Linf 0.00328912, total time[s] 0.116489 +Converged at iteration 25, L1 8.54522e-05, Linf 0.0106061, total time[s] 0.090451 +Converged at iteration 24, L1 9.29232e-05, Linf 0.00424611, total time[s] 0.078078 +Converged at iteration 26, L1 7.8612e-05, Linf 0.00555661, total time[s] 0.079134 +Converged at iteration 30, L1 6.97645e-05, Linf 0.00507436, total time[s] 0.124099 +Converged at iteration 33, L1 7.62534e-05, Linf 0.00740267, total time[s] 0.100929 +Converged at iteration 30, L1 8.05251e-05, Linf 0.00229735, total time[s] 0.09537 +Converged at iteration 30, L1 5.59877e-05, Linf 0.0101959, total time[s] 0.116775 +Converged at iteration 30, L1 8.0995e-05, Linf 0.00432371, total time[s] 0.119038 +Converged at iteration 33, L1 7.76882e-05, Linf 0.00598562, total time[s] 0.122377 +Converged at iteration 34, L1 7.22805e-05, Linf 0.0200886, total time[s] 0.113937 +Converged at iteration 26, L1 5.83529e-05, Linf 0.00441748, total time[s] 0.116607 +Converged at iteration 26, L1 5.79595e-05, Linf 0.00331629, total time[s] 0.083286 +Converged at iteration 26, L1 9.92752e-05, Linf 0.0121141, total time[s] 0.11043 +Converged at iteration 39, L1 6.43829e-05, Linf 0.0158964, total time[s] 0.123692 +Converged at iteration 36, L1 6.7672e-05, Linf 0.0137001, total time[s] 0.095627 +Converged at iteration 25, L1 7.35005e-05, Linf 0.00901436, total time[s] 0.087499 +Converged at iteration 28, L1 4.55993e-05, Linf 0.00403802, total time[s] 0.076093 +Converged at iteration 24, L1 5.83664e-05, Linf 0.0036535, total time[s] 0.08075 +Converged at iteration 22, L1 6.44394e-05, Linf 0.00438921, total time[s] 0.059715 +Converged at iteration 20, L1 5.96374e-05, Linf 0.00617922, total time[s] 0.109205 +Converged at iteration 24, L1 5.28483e-05, Linf 0.0117328, total time[s] 0.084503 +Converged at iteration 25, L1 9.46007e-05, Linf 0.0117345, total time[s] 0.115941 +Converged at iteration 25, L1 5.78771e-05, Linf 0.00632793, total time[s] 0.087663 +Converged at iteration 22, L1 6.84439e-05, Linf 0.00523509, total time[s] 0.098043 +Converged at iteration 18, L1 8.19822e-05, Linf 0.00537882, total time[s] 0.067805 +Converged at iteration 32, L1 5.77363e-05, Linf 0.00683285, total time[s] 0.139723 +Converged at iteration 22, L1 6.43031e-05, Linf 0.00501989, total time[s] 0.068838 +Converged at iteration 24, L1 7.15765e-05, Linf 0.00477774, total time[s] 0.108395 +Converged at iteration 27, L1 5.44363e-05, Linf 0.00754775, total time[s] 0.103568 +Converged at iteration 28, L1 5.45888e-05, Linf 0.00354933, total time[s] 0.104313 +Converged at iteration 25, L1 8.20152e-05, Linf 0.0102304, total time[s] 0.094093 +Converged at iteration 25, L1 6.22242e-05, Linf 0.00322687, total time[s] 0.082316 +Converged at iteration 26, L1 9.22908e-05, Linf 0.00622596, total time[s] 0.126301 +Converged at iteration 29, L1 9.99497e-05, Linf 0.00520292, total time[s] 0.113595 +Converged at iteration 33, L1 8.35923e-05, Linf 0.00788418, total time[s] 0.128908 +Converged at iteration 30, L1 8.88148e-05, Linf 0.00235301, total time[s] 0.10334 +Converged at iteration 30, L1 5.01199e-05, Linf 0.00850402, total time[s] 0.097993 +Converged at iteration 30, L1 6.96996e-05, Linf 0.00399673, total time[s] 0.100893 +Converged at iteration 33, L1 7.95012e-05, Linf 0.00596925, total time[s] 0.102843 +Converged at iteration 34, L1 8.01451e-05, Linf 0.0196895, total time[s] 0.127501 +Converged at iteration 25, L1 9.5714e-05, Linf 0.00624849, total time[s] 0.113788 +Converged at iteration 26, L1 5.28677e-05, Linf 0.00333905, total time[s] 0.10278 +Converged at iteration 26, L1 9.79866e-05, Linf 0.0115984, total time[s] 0.092627 +Converged at iteration 39, L1 7.71771e-05, Linf 0.0160581, total time[s] 0.125298 +Converged at iteration 36, L1 8.10137e-05, Linf 0.014698, total time[s] 0.136371 +Converged at iteration 25, L1 9.81915e-05, Linf 0.0072544, total time[s] 0.107 +Converged at iteration 28, L1 6.39513e-05, Linf 0.00514806, total time[s] 0.116089 +Converged at iteration 23, L1 9.48625e-05, Linf 0.00449527, total time[s] 0.134379 +Converged at iteration 22, L1 6.03929e-05, Linf 0.00432626, total time[s] 0.087995 +Converged at iteration 20, L1 7.65949e-05, Linf 0.00822611, total time[s] 0.082738 +Converged at iteration 24, L1 6.39954e-05, Linf 0.0136968, total time[s] 0.124434 +Converged at iteration 25, L1 9.56883e-05, Linf 0.0123356, total time[s] 0.08822 +Converged at iteration 25, L1 6.00494e-05, Linf 0.00722741, total time[s] 0.106293 +Converged at iteration 22, L1 7.3545e-05, Linf 0.0063049, total time[s] 0.069086 +Converged at iteration 18, L1 8.46129e-05, Linf 0.00635524, total time[s] 0.08399 +Converged at iteration 32, L1 6.75095e-05, Linf 0.00697284, total time[s] 0.098065 +Converged at iteration 22, L1 5.98248e-05, Linf 0.00498892, total time[s] 0.067886 +Converged at iteration 24, L1 7.54946e-05, Linf 0.0061852, total time[s] 0.115138 +Converged at iteration 27, L1 5.50566e-05, Linf 0.00705132, total time[s] 0.10596 +Converged at iteration 28, L1 5.49366e-05, Linf 0.00330527, total time[s] 0.096312 +Converged at iteration 25, L1 9.41076e-05, Linf 0.0120566, total time[s] 0.112215 +Converged at iteration 25, L1 5.73497e-05, Linf 0.00302479, total time[s] 0.077517 +Converged at iteration 26, L1 9.05042e-05, Linf 0.00620135, total time[s] 0.098343 +Converged at iteration 30, L1 6.77923e-05, Linf 0.00478591, total time[s] 0.111289 +Converged at iteration 33, L1 8.79795e-05, Linf 0.00948201, total time[s] 0.126939 +Converged at iteration 30, L1 8.84138e-05, Linf 0.00223251, total time[s] 0.113919 +Converged at iteration 30, L1 4.91824e-05, Linf 0.0083988, total time[s] 0.105987 +Converged at iteration 30, L1 6.03966e-05, Linf 0.00350001, total time[s] 0.097671 +Converged at iteration 33, L1 7.78184e-05, Linf 0.0061585, total time[s] 0.099799 +Converged at iteration 34, L1 8.69078e-05, Linf 0.0203787, total time[s] 0.11378 +Converged at iteration 25, L1 8.89582e-05, Linf 0.00370487, total time[s] 0.066459 +Converged at iteration 26, L1 5.69441e-05, Linf 0.00338396, total time[s] 0.068132 +Converged at iteration 26, L1 9.95461e-05, Linf 0.0124678, total time[s] 0.102501 +Converged at iteration 39, L1 6.55492e-05, Linf 0.0161439, total time[s] 0.192202 +Converged at iteration 36, L1 6.36754e-05, Linf 0.0139168, total time[s] 0.157998 +Converged at iteration 26, L1 8.30268e-05, Linf 0.00292986, total time[s] 0.081727 +Converged at iteration 27, L1 8.99266e-05, Linf 0.00471922, total time[s] 0.094123 +Converged at iteration 24, L1 6.18113e-05, Linf 0.00393506, total time[s] 0.10787 +Converged at iteration 22, L1 6.61948e-05, Linf 0.00451294, total time[s] 0.081383 +Converged at iteration 20, L1 7.25647e-05, Linf 0.00739918, total time[s] 0.073818 +Converged at iteration 24, L1 5.82491e-05, Linf 0.013025, total time[s] 0.084156 +Converged at iteration 25, L1 8.9288e-05, Linf 0.0107393, total time[s] 0.09984 +Converged at iteration 25, L1 5.62814e-05, Linf 0.00666262, total time[s] 0.066859 +Converged at iteration 22, L1 7.15874e-05, Linf 0.00610859, total time[s] 0.065777 +Converged at iteration 18, L1 8.52465e-05, Linf 0.00632525, total time[s] 0.087997 +Converged at iteration 32, L1 5.05542e-05, Linf 0.00575341, total time[s] 0.103541 +Converged at iteration 22, L1 6.57299e-05, Linf 0.00519106, total time[s] 0.115792 +Converged at iteration 24, L1 7.20515e-05, Linf 0.00482022, total time[s] 0.07322 +Converged at iteration 27, L1 5.58938e-05, Linf 0.00845361, total time[s] 0.079415 +Converged at iteration 28, L1 5.27228e-05, Linf 0.00396253, total time[s] 0.097019 +Converged at iteration 25, L1 8.98467e-05, Linf 0.0118329, total time[s] 0.072447 +Converged at iteration 25, L1 6.24543e-05, Linf 0.00338083, total time[s] 0.097552 +Converged at iteration 26, L1 9.84353e-05, Linf 0.00665704, total time[s] 0.098508 +Converged at iteration 29, L1 9.96393e-05, Linf 0.00504852, total time[s] 0.094267 +Converged at iteration 33, L1 9.14987e-05, Linf 0.00882642, total time[s] 0.132629 +Converged at iteration 30, L1 9.46213e-05, Linf 0.00243214, total time[s] 0.101942 +Converged at iteration 30, L1 4.08759e-05, Linf 0.00744612, total time[s] 0.093037 +Converged at iteration 30, L1 5.04269e-05, Linf 0.00377294, total time[s] 0.099234 +Converged at iteration 33, L1 8.14007e-05, Linf 0.00613144, total time[s] 0.135356 +Converged at iteration 34, L1 7.95541e-05, Linf 0.0197976, total time[s] 0.107301 +Converged at iteration 25, L1 9.84325e-05, Linf 0.00399219, total time[s] 0.090842 +Converged at iteration 26, L1 4.97513e-05, Linf 0.00333562, total time[s] 0.079657 +Converged at iteration 27, L1 4.78406e-05, Linf 0.00640501, total time[s] 0.12374 +Converged at iteration 39, L1 7.57506e-05, Linf 0.01673, total time[s] 0.105533 +Converged at iteration 36, L1 8.60044e-05, Linf 0.0152092, total time[s] 0.13911 +Converged at iteration 27, L1 6.54081e-05, Linf 0.00305729, total time[s] 0.104391 +Converged at iteration 28, L1 5.17428e-05, Linf 0.00451085, total time[s] 0.122473 +Converged at iteration 23, L1 9.88363e-05, Linf 0.00469615, total time[s] 0.08372 +Converged at iteration 22, L1 6.33232e-05, Linf 0.00449806, total time[s] 0.065901 +Converged at iteration 20, L1 8.43545e-05, Linf 0.00967893, total time[s] 0.069336 +Converged at iteration 24, L1 6.46246e-05, Linf 0.0142547, total time[s] 0.131733 +Converged at iteration 25, L1 9.2833e-05, Linf 0.0110888, total time[s] 0.108764 +Converged at iteration 25, L1 5.71469e-05, Linf 0.00729889, total time[s] 0.088873 +Converged at iteration 22, L1 7.66311e-05, Linf 0.00695647, total time[s] 0.075223 +Converged at iteration 18, L1 8.73508e-05, Linf 0.00687466, total time[s] 0.063786 +Converged at iteration 32, L1 6.32104e-05, Linf 0.00669401, total time[s] 0.129596 +Converged at iteration 22, L1 6.35396e-05, Linf 0.0052189, total time[s] 0.064771 +Converged at iteration 24, L1 7.4533e-05, Linf 0.00496796, total time[s] 0.076386 +Converged at iteration 27, L1 5.8903e-05, Linf 0.010538, total time[s] 0.106305 +Converged at iteration 28, L1 5.38279e-05, Linf 0.00328807, total time[s] 0.14387 +Converged at iteration 26, L1 4.78864e-05, Linf 0.00743004, total time[s] 0.125314 +Converged at iteration 25, L1 6.09946e-05, Linf 0.00320625, total time[s] 0.077314 +Converged at iteration 26, L1 9.91632e-05, Linf 0.00654858, total time[s] 0.112458 +Converged at iteration 30, L1 6.78093e-05, Linf 0.00454968, total time[s] 0.113294 +Converged at iteration 33, L1 9.47911e-05, Linf 0.0104135, total time[s] 0.090967 +Converged at iteration 30, L1 9.61104e-05, Linf 0.00241553, total time[s] 0.097914 +Converged at iteration 30, L1 4.18222e-05, Linf 0.00746894, total time[s] 0.077481 +Converged at iteration 30, L1 4.66815e-05, Linf 0.00339049, total time[s] 0.102022 +Converged at iteration 33, L1 7.76594e-05, Linf 0.00627132, total time[s] 0.117345 +Converged at iteration 34, L1 8.90986e-05, Linf 0.0201448, total time[s] 0.15855 +Converged at iteration 25, L1 8.72416e-05, Linf 0.00541641, total time[s] 0.068567 +Converged at iteration 26, L1 5.713e-05, Linf 0.00313189, total time[s] 0.087474 +Converged at iteration 27, L1 4.68365e-05, Linf 0.00672637, total time[s] 0.077412 +Converged at iteration 39, L1 6.63867e-05, Linf 0.0163666, total time[s] 0.216761 +Converged at iteration 36, L1 6.30791e-05, Linf 0.0140307, total time[s] 0.114022 +Converged at iteration 27, L1 7.21624e-05, Linf 0.00346021, total time[s] 0.156775 +Converged at iteration 41, L1 8.97574e-05, Linf 0.00286368, total time[s] 0.184145 +Converged at iteration 24, L1 6.34004e-05, Linf 0.00398832, total time[s] 0.076174 +Converged at iteration 22, L1 7.15344e-05, Linf 0.00463373, total time[s] 0.08527 +Converged at iteration 20, L1 8.35966e-05, Linf 0.00825135, total time[s] 0.079001 +Converged at iteration 24, L1 6.23062e-05, Linf 0.0138555, total time[s] 0.100145 +Converged at iteration 25, L1 8.80153e-05, Linf 0.00988498, total time[s] 0.073689 +Converged at iteration 25, L1 5.48391e-05, Linf 0.00695634, total time[s] 0.094832 +Converged at iteration 22, L1 7.4711e-05, Linf 0.00695509, total time[s] 0.063576 +Converged at iteration 18, L1 8.33829e-05, Linf 0.00692194, total time[s] 0.055684 +Converged at iteration 32, L1 4.63924e-05, Linf 0.00455813, total time[s] 0.113755 +Converged at iteration 22, L1 6.64624e-05, Linf 0.0053658, total time[s] 0.06138 +Converged at iteration 24, L1 7.38831e-05, Linf 0.00488378, total time[s] 0.112533 +Converged at iteration 27, L1 6.25991e-05, Linf 0.00916967, total time[s] 0.078183 +Converged at iteration 28, L1 5.18801e-05, Linf 0.00425141, total time[s] 0.098593 +Converged at iteration 25, L1 9.87363e-05, Linf 0.0129363, total time[s] 0.097355 +Converged at iteration 25, L1 6.46065e-05, Linf 0.00344188, total time[s] 0.115957 +Converged at iteration 27, L1 6.45688e-05, Linf 0.0048542, total time[s] 0.086223 +Converged at iteration 29, L1 9.89774e-05, Linf 0.0049263, total time[s] 0.140879 +Converged at iteration 33, L1 9.73506e-05, Linf 0.0104491, total time[s] 0.098506 +Converged at iteration 31, L1 5.82789e-05, Linf 0.0017789, total time[s] 0.145855 +Converged at iteration 30, L1 4.19924e-05, Linf 0.00686634, total time[s] 0.123559 +Converged at iteration 29, L1 9.33955e-05, Linf 0.00761576, total time[s] 0.080736 +Converged at iteration 33, L1 8.11448e-05, Linf 0.00620679, total time[s] 0.118458 +Converged at iteration 34, L1 8.29763e-05, Linf 0.0191578, total time[s] 0.116971 +Converged at iteration 26, L1 5.74857e-05, Linf 0.00286957, total time[s] 0.090959 +Converged at iteration 26, L1 5.05696e-05, Linf 0.0030953, total time[s] 0.081653 +Converged at iteration 27, L1 4.96597e-05, Linf 0.00665773, total time[s] 0.120433 +Converged at iteration 39, L1 6.13097e-05, Linf 0.0166822, total time[s] 0.13284 +Converged at iteration 36, L1 6.82728e-05, Linf 0.014255, total time[s] 0.124496 +Converged at iteration 27, L1 7.7371e-05, Linf 0.0038464, total time[s] 0.080018 +Converged at iteration 27, L1 5.97682e-05, Linf 0.00441985, total time[s] 0.105476 +Converged at iteration 24, L1 7.0645e-05, Linf 0.00418509, total time[s] 0.10699 +Converged at iteration 22, L1 6.8981e-05, Linf 0.00464342, total time[s] 0.144735 +Converged at iteration 20, L1 8.72289e-05, Linf 0.00930962, total time[s] 0.063013 +Converged at iteration 24, L1 6.47002e-05, Linf 0.0147126, total time[s] 0.107568 +Converged at iteration 25, L1 8.85293e-05, Linf 0.0097566, total time[s] 0.119084 +Converged at iteration 25, L1 5.27957e-05, Linf 0.0072862, total time[s] 0.11766 +Converged at iteration 22, L1 7.54809e-05, Linf 0.00747228, total time[s] 0.126021 +Converged at iteration 18, L1 8.7005e-05, Linf 0.00732791, total time[s] 0.081649 +Converged at iteration 32, L1 5.23604e-05, Linf 0.00570992, total time[s] 0.133712 +Converged at iteration 22, L1 6.58397e-05, Linf 0.0055422, total time[s] 0.114989 +Converged at iteration 24, L1 7.78061e-05, Linf 0.0145106, total time[s] 0.076359 +Converged at iteration 27, L1 6.31833e-05, Linf 0.00962347, total time[s] 0.107199 +Converged at iteration 28, L1 5.06199e-05, Linf 0.00348668, total time[s] 0.135864 +Converged at iteration 26, L1 4.7752e-05, Linf 0.00780453, total time[s] 0.114784 +Converged at iteration 25, L1 7.45376e-05, Linf 0.0036765, total time[s] 0.149912 +Converged at iteration 27, L1 6.43097e-05, Linf 0.0051755, total time[s] 0.142466 +Converged at iteration 29, L1 9.73415e-05, Linf 0.00480021, total time[s] 0.094023 +Converged at iteration 33, L1 9.68359e-05, Linf 0.0111845, total time[s] 0.104098 +Converged at iteration 31, L1 5.88151e-05, Linf 0.00201526, total time[s] 0.116267 +Converged at iteration 30, L1 4.11884e-05, Linf 0.00688691, total time[s] 0.141583 +Converged at iteration 29, L1 9.41554e-05, Linf 0.00762589, total time[s] 0.143728 +Converged at iteration 33, L1 7.76905e-05, Linf 0.00618494, total time[s] 0.094612 +Converged at iteration 34, L1 6.93122e-05, Linf 0.0179431, total time[s] 0.113908 +Converged at iteration 25, L1 9.92741e-05, Linf 0.00414128, total time[s] 0.092612 +Converged at iteration 26, L1 5.4218e-05, Linf 0.00298003, total time[s] 0.098968 +Converged at iteration 27, L1 4.6003e-05, Linf 0.00658436, total time[s] 0.129837 +Converged at iteration 39, L1 6.16975e-05, Linf 0.0149737, total time[s] 0.116433 +Converged at iteration 36, L1 6.8812e-05, Linf 0.0140107, total time[s] 0.177377 +Converged at iteration 27, L1 9.17366e-05, Linf 0.0045994, total time[s] 0.095707 +Converged at iteration 27, L1 9.97076e-05, Linf 0.00596237, total time[s] 0.176991 +Converged at iteration 24, L1 6.67063e-05, Linf 0.004002, total time[s] 0.127158 +Converged at iteration 22, L1 7.53249e-05, Linf 0.0045586, total time[s] 0.070625 +Converged at iteration 20, L1 9.66456e-05, Linf 0.0102943, total time[s] 0.081675 +Converged at iteration 24, L1 6.65662e-05, Linf 0.0157789, total time[s] 0.094696 +Converged at iteration 25, L1 8.9847e-05, Linf 0.0096384, total time[s] 0.098285 +Converged at iteration 25, L1 5.26053e-05, Linf 0.00751589, total time[s] 0.120717 +Converged at iteration 22, L1 7.76733e-05, Linf 0.0077816, total time[s] 0.079433 +Converged at iteration 18, L1 9.35856e-05, Linf 0.00789312, total time[s] 0.052167 +Converged at iteration 32, L1 5.74059e-05, Linf 0.0042902, total time[s] 0.14981 +Converged at iteration 22, L1 6.48036e-05, Linf 0.00550422, total time[s] 0.084469 +Converged at iteration 24, L1 7.46588e-05, Linf 0.00502471, total time[s] 0.085333 +Converged at iteration 27, L1 6.60753e-05, Linf 0.00989379, total time[s] 0.07689 +Converged at iteration 28, L1 5.02798e-05, Linf 0.00373581, total time[s] 0.120466 +Converged at iteration 26, L1 5.29213e-05, Linf 0.00822638, total time[s] 0.12439 +Converged at iteration 25, L1 7.13917e-05, Linf 0.00370345, total time[s] 0.072467 +Converged at iteration 27, L1 6.65321e-05, Linf 0.00522455, total time[s] 0.084034 +Converged at iteration 29, L1 9.99215e-05, Linf 0.00515467, total time[s] 0.085058 +Converged at iteration 34, L1 5.11799e-05, Linf 0.00913589, total time[s] 0.126008 +Converged at iteration 31, L1 6.31175e-05, Linf 0.00216221, total time[s] 0.157597 +Converged at iteration 30, L1 3.86872e-05, Linf 0.00652271, total time[s] 0.115275 +Converged at iteration 29, L1 9.87479e-05, Linf 0.00786541, total time[s] 0.182992 +Converged at iteration 33, L1 7.6468e-05, Linf 0.00630253, total time[s] 0.164202 +Converged at iteration 34, L1 7.04106e-05, Linf 0.0181436, total time[s] 0.145618 +Converged at iteration 26, L1 5.19104e-05, Linf 0.00469077, total time[s] 0.137633 +Converged at iteration 26, L1 5.45444e-05, Linf 0.003286, total time[s] 0.10156 +Converged at iteration 27, L1 4.81287e-05, Linf 0.00692071, total time[s] 0.083733 +Converged at iteration 39, L1 5.43209e-05, Linf 0.014478, total time[s] 0.178874 +Converged at iteration 36, L1 5.15598e-05, Linf 0.0122533, total time[s] 0.182527 +Converged at iteration 28, L1 5.27852e-05, Linf 0.00463337, total time[s] 0.159886 +Converged at iteration 27, L1 8.40083e-05, Linf 0.00492479, total time[s] 0.093774 +Converged at iteration 24, L1 7.09954e-05, Linf 0.00427229, total time[s] 0.111389 +Converged at iteration 22, L1 7.05203e-05, Linf 0.00475699, total time[s] 0.07923 +Converged at iteration 20, L1 9.54018e-05, Linf 0.00916778, total time[s] 0.096113 +Converged at iteration 24, L1 6.62585e-05, Linf 0.0169845, total time[s] 0.110134 +Converged at iteration 25, L1 8.9412e-05, Linf 0.00858537, total time[s] 0.093488 +Converged at iteration 25, L1 5.07107e-05, Linf 0.00746532, total time[s] 0.08752 +Converged at iteration 22, L1 7.9628e-05, Linf 0.00816113, total time[s] 0.106888 +Converged at iteration 18, L1 9.03967e-05, Linf 0.00795176, total time[s] 0.050996 +Converged at iteration 32, L1 3.65281e-05, Linf 0.00499653, total time[s] 0.130353 +Converged at iteration 22, L1 6.73631e-05, Linf 0.00557466, total time[s] 0.101924 +Converged at iteration 24, L1 7.33984e-05, Linf 0.004926, total time[s] 0.077629 +Converged at iteration 27, L1 7.72196e-05, Linf 0.0100353, total time[s] 0.102025 +Converged at iteration 28, L1 4.88288e-05, Linf 0.00406882, total time[s] 0.108557 +Converged at iteration 26, L1 5.1275e-05, Linf 0.00855469, total time[s] 0.112462 +Converged at iteration 25, L1 7.49966e-05, Linf 0.00392751, total time[s] 0.075682 +Converged at iteration 27, L1 7.22544e-05, Linf 0.00557271, total time[s] 0.132461 +Converged at iteration 29, L1 9.18165e-05, Linf 0.00433698, total time[s] 0.139645 +Converged at iteration 34, L1 5.2749e-05, Linf 0.00984172, total time[s] 0.132576 +Converged at iteration 31, L1 6.45918e-05, Linf 0.00239978, total time[s] 0.098049 +Converged at iteration 30, L1 3.47605e-05, Linf 0.00613923, total time[s] 0.118928 +Converged at iteration 30, L1 4.01407e-05, Linf 0.00357672, total time[s] 0.130424 +Converged at iteration 33, L1 7.62503e-05, Linf 0.00617401, total time[s] 0.148162 +Converged at iteration 34, L1 6.36123e-05, Linf 0.0171836, total time[s] 0.139208 +Converged at iteration 26, L1 6.14668e-05, Linf 0.0030361, total time[s] 0.145341 +Converged at iteration 26, L1 4.85813e-05, Linf 0.00294901, total time[s] 0.125796 +Converged at iteration 27, L1 4.87596e-05, Linf 0.00701129, total time[s] 0.151206 +Converged at iteration 39, L1 5.91471e-05, Linf 0.0147195, total time[s] 0.119074 +Converged at iteration 36, L1 5.76512e-05, Linf 0.0131831, total time[s] 0.097847 +Converged at iteration 28, L1 5.48676e-05, Linf 0.0047825, total time[s] 0.07593 +Converged at iteration 27, L1 9.6363e-05, Linf 0.00536979, total time[s] 0.071737 +Converged at iteration 24, L1 7.10696e-05, Linf 0.00415518, total time[s] 0.069738 +Converged at iteration 22, L1 6.66168e-05, Linf 0.00470653, total time[s] 0.097654 +Converged at iteration 21, L1 3.99792e-05, Linf 0.00492263, total time[s] 0.115523 +Converged at iteration 24, L1 6.82306e-05, Linf 0.0174539, total time[s] 0.088065 +Converged at iteration 25, L1 8.66669e-05, Linf 0.00873258, total time[s] 0.073206 +Converged at iteration 25, L1 5.15184e-05, Linf 0.00770677, total time[s] 0.076857 +Converged at iteration 22, L1 8.1288e-05, Linf 0.00834751, total time[s] 0.112583 +Converged at iteration 18, L1 9.21331e-05, Linf 0.00802712, total time[s] 0.082501 +Converged at iteration 32, L1 4.21363e-05, Linf 0.00526352, total time[s] 0.111429 +Converged at iteration 22, L1 6.59845e-05, Linf 0.00559055, total time[s] 0.065747 +Converged at iteration 24, L1 7.39762e-05, Linf 0.00495798, total time[s] 0.093495 +Converged at iteration 27, L1 7.97791e-05, Linf 0.0104476, total time[s] 0.103802 +Converged at iteration 28, L1 4.95728e-05, Linf 0.00466449, total time[s] 0.149938 +Converged at iteration 26, L1 5.40212e-05, Linf 0.00871591, total time[s] 0.136811 +Converged at iteration 25, L1 7.41402e-05, Linf 0.00386131, total time[s] 0.086293 +Converged at iteration 27, L1 7.03349e-05, Linf 0.00543796, total time[s] 0.094761 +Converged at iteration 29, L1 9.60932e-05, Linf 0.00476394, total time[s] 0.083135 +Converged at iteration 34, L1 5.23382e-05, Linf 0.00921263, total time[s] 0.144624 +Converged at iteration 31, L1 6.39971e-05, Linf 0.00247194, total time[s] 0.12618 +Converged at iteration 30, L1 3.46955e-05, Linf 0.00629009, total time[s] 0.127277 +Converged at iteration 30, L1 3.9781e-05, Linf 0.00366792, total time[s] 0.088155 +Converged at iteration 33, L1 7.48721e-05, Linf 0.00619033, total time[s] 0.131466 +Converged at iteration 34, L1 6.80731e-05, Linf 0.0182107, total time[s] 0.118181 +Converged at iteration 26, L1 5.53738e-05, Linf 0.00283479, total time[s] 0.081772 +Converged at iteration 26, L1 4.98682e-05, Linf 0.00306817, total time[s] 0.136137 +Converged at iteration 27, L1 4.90369e-05, Linf 0.00720893, total time[s] 0.178796 +Converged at iteration 39, L1 7.14072e-05, Linf 0.0149719, total time[s] 0.192367 +Converged at iteration 36, L1 7.326e-05, Linf 0.0139594, total time[s] 0.165614 +Converged at iteration 28, L1 6.15479e-05, Linf 0.00531515, total time[s] 0.086288 +Converged at iteration 27, L1 9.85153e-05, Linf 0.00565777, total time[s] 0.095904 +Converged at iteration 24, L1 6.78041e-05, Linf 0.00407637, total time[s] 0.081153 +Converged at iteration 22, L1 7.4874e-05, Linf 0.00470681, total time[s] 0.089975 +Converged at iteration 21, L1 4.22371e-05, Linf 0.0052216, total time[s] 0.075897 +Converged at iteration 24, L1 7.14176e-05, Linf 0.0180154, total time[s] 0.09857 +Converged at iteration 25, L1 8.63764e-05, Linf 0.00854849, total time[s] 0.079353 +Converged at iteration 25, L1 5.11798e-05, Linf 0.00794692, total time[s] 0.070861 +Converged at iteration 22, L1 8.41638e-05, Linf 0.00864719, total time[s] 0.070343 +Converged at iteration 18, L1 9.51561e-05, Linf 0.00810877, total time[s] 0.091746 +Converged at iteration 32, L1 5.45574e-05, Linf 0.00536891, total time[s] 0.114259 +Converged at iteration 22, L1 6.52428e-05, Linf 0.00554111, total time[s] 0.071521 +Converged at iteration 24, L1 7.44063e-05, Linf 0.0049821, total time[s] 0.09798 +Converged at iteration 27, L1 8.53736e-05, Linf 0.0111545, total time[s] 0.109758 +Converged at iteration 28, L1 5.05623e-05, Linf 0.0104725, total time[s] 0.076466 +Converged at iteration 26, L1 5.58246e-05, Linf 0.00900408, total time[s] 0.104862 +Converged at iteration 25, L1 7.74475e-05, Linf 0.0186077, total time[s] 0.102657 +Converged at iteration 27, L1 7.40574e-05, Linf 0.00536513, total time[s] 0.097551 +Converged at iteration 30, L1 5.99297e-05, Linf 0.00392762, total time[s] 0.105914 +Converged at iteration 34, L1 5.27185e-05, Linf 0.00845048, total time[s] 0.144943 +Converged at iteration 31, L1 6.657e-05, Linf 0.00263262, total time[s] 0.101786 +Converged at iteration 30, L1 3.43104e-05, Linf 0.00632214, total time[s] 0.164575 +Converged at iteration 30, L1 4.23697e-05, Linf 0.00389416, total time[s] 0.173537 +Converged at iteration 33, L1 7.32893e-05, Linf 0.00740847, total time[s] 0.261717 +Converged at iteration 34, L1 7.08153e-05, Linf 0.0182165, total time[s] 0.177562 +Converged at iteration 26, L1 6.13051e-05, Linf 0.00263342, total time[s] 0.099447 +Converged at iteration 26, L1 5.10901e-05, Linf 0.00307092, total time[s] 0.119648 +Converged at iteration 27, L1 5.00595e-05, Linf 0.00758508, total time[s] 0.096088 +Converged at iteration 39, L1 5.72534e-05, Linf 0.0147069, total time[s] 0.132205 +Converged at iteration 36, L1 5.31082e-05, Linf 0.0129204, total time[s] 0.121073 +Converged at iteration 28, L1 6.77995e-05, Linf 0.00567167, total time[s] 0.157164 +Converged at iteration 27, L1 8.71022e-05, Linf 0.00501157, total time[s] 0.107579 +Converged at iteration 24, L1 7.15912e-05, Linf 0.00422795, total time[s] 0.129914 +Converged at iteration 22, L1 7.11619e-05, Linf 0.00479695, total time[s] 0.110959 +Converged at iteration 21, L1 4.25271e-05, Linf 0.00526394, total time[s] 0.069897 +Converged at iteration 24, L1 7.0952e-05, Linf 0.0169573, total time[s] 0.089019 +Converged at iteration 25, L1 8.60352e-05, Linf 0.00828042, total time[s] 0.094207 +Converged at iteration 25, L1 4.97578e-05, Linf 0.00782692, total time[s] 0.153979 +Converged at iteration 22, L1 8.3748e-05, Linf 0.00880469, total time[s] 0.185537 +Converged at iteration 18, L1 9.22844e-05, Linf 0.0081366, total time[s] 0.126054 +Converged at iteration 32, L1 3.76349e-05, Linf 0.00502357, total time[s] 0.198072 +Converged at iteration 22, L1 6.66314e-05, Linf 0.00560827, total time[s] 0.125131 +Converged at iteration 24, L1 7.32506e-05, Linf 0.00491892, total time[s] 0.143874 +Converged at iteration 27, L1 9.13523e-05, Linf 0.0109815, total time[s] 0.157895 +Converged at iteration 27, L1 9.82981e-05, Linf 0.00811559, total time[s] 0.171332 +Converged at iteration 26, L1 5.53407e-05, Linf 0.00908601, total time[s] 0.172634 +Converged at iteration 25, L1 7.42628e-05, Linf 0.00389111, total time[s] 0.162291 +Converged at iteration 27, L1 7.44076e-05, Linf 0.00555059, total time[s] 0.127692 +Converged at iteration 29, L1 9.17871e-05, Linf 0.00449085, total time[s] 0.092007 +Converged at iteration 34, L1 5.67171e-05, Linf 0.00924651, total time[s] 0.134393 +Converged at iteration 31, L1 6.8526e-05, Linf 0.00275474, total time[s] 0.13692 +Converged at iteration 29, L1 9.86716e-05, Linf 0.0160302, total time[s] 0.111712 +Converged at iteration 30, L1 4.67256e-05, Linf 0.00380639, total time[s] 0.115098 +Converged at iteration 33, L1 7.41671e-05, Linf 0.00611876, total time[s] 0.134203 +Converged at iteration 34, L1 6.81854e-05, Linf 0.0179419, total time[s] 0.141065 +Converged at iteration 26, L1 6.0269e-05, Linf 0.00579321, total time[s] 0.111494 +Converged at iteration 26, L1 5.07937e-05, Linf 0.0030914, total time[s] 0.091487 +Converged at iteration 27, L1 5.10807e-05, Linf 0.00761419, total time[s] 0.094267 +Converged at iteration 35, L1 7.32632e-05, Linf 0.00328763, total time[s] 0.19142 +Converged at iteration 39, L1 9.80774e-05, Linf 0.00419203, total time[s] 0.195639 +Converged at iteration 31, L1 6.02417e-05, Linf 0.00496108, total time[s] 0.181852 +Converged at iteration 30, L1 9.37224e-05, Linf 0.00423518, total time[s] 0.188172 +Converged at iteration 22, L1 8.40505e-05, Linf 0.00446709, total time[s] 0.175739 +Converged at iteration 27, L1 6.1254e-05, Linf 0.00495794, total time[s] 0.178134 +Converged at iteration 20, L1 9.34922e-05, Linf 0.0039534, total time[s] 0.092908 +Converged at iteration 24, L1 8.64237e-05, Linf 0.00476734, total time[s] 0.159932 +Converged at iteration 28, L1 7.15008e-05, Linf 0.00438504, total time[s] 0.170095 +Converged at iteration 26, L1 7.71676e-05, Linf 0.00536056, total time[s] 0.120292 +Converged at iteration 19, L1 6.18591e-05, Linf 0.00384773, total time[s] 0.121562 +Converged at iteration 22, L1 7.10648e-05, Linf 0.00506896, total time[s] 0.122785 +Converged at iteration 20, L1 7.92957e-05, Linf 0.00447797, total time[s] 0.098064 +Converged at iteration 30, L1 7.47338e-05, Linf 0.0031698, total time[s] 0.144965 +Converged at iteration 31, L1 8.31366e-05, Linf 0.00538838, total time[s] 0.17406 +Converged at iteration 24, L1 6.53789e-05, Linf 0.00455187, total time[s] 0.143778 +Converged at iteration 24, L1 8.2628e-05, Linf 0.00436301, total time[s] 0.134418 +Converged at iteration 27, L1 9.26856e-05, Linf 0.00545834, total time[s] 0.148854 +Converged at iteration 26, L1 6.79241e-05, Linf 0.0042593, total time[s] 0.16 +Converged at iteration 23, L1 8.71856e-05, Linf 0.00393227, total time[s] 0.121521 +Converged at iteration 33, L1 9.79803e-05, Linf 0.00481789, total time[s] 0.195496 +Converged at iteration 29, L1 7.33936e-05, Linf 0.00458546, total time[s] 0.147382 +Converged at iteration 28, L1 8.82752e-05, Linf 0.00299779, total time[s] 0.155028 +Converged at iteration 30, L1 8.99922e-05, Linf 0.00425831, total time[s] 0.207187 +Converged at iteration 37, L1 7.14866e-05, Linf 0.00319747, total time[s] 0.183187 +Converged at iteration 32, L1 8.97961e-05, Linf 0.00361214, total time[s] 0.151143 +Converged at iteration 28, L1 9.31861e-05, Linf 0.00419491, total time[s] 0.149793 +Converged at iteration 33, L1 8.26796e-05, Linf 0.0046157, total time[s] 0.149438 +Converged at iteration 26, L1 8.59339e-05, Linf 0.00372938, total time[s] 0.122184 +Converged at iteration 24, L1 8.25034e-05, Linf 0.00315268, total time[s] 0.155729 +Converged at iteration 35, L1 9.56299e-05, Linf 0.00636877, total time[s] 0.163032 +Converged at iteration 39, L1 5.85809e-05, Linf 0.0067558, total time[s] 0.192966 +Converged at iteration 30, L1 9.22524e-05, Linf 0.00593171, total time[s] 0.170884 +Converged at iteration 24, L1 7.54888e-05, Linf 0.00443921, total time[s] 0.111552 +Converged at iteration 21, L1 7.74134e-05, Linf 0.00409757, total time[s] 0.111687 +Converged at iteration 24, L1 8.1595e-05, Linf 0.00560002, total time[s] 0.117201 +Converged at iteration 19, L1 5.03476e-05, Linf 0.00464904, total time[s] 0.106983 +Converged at iteration 21, L1 3.53929e-05, Linf 0.00569443, total time[s] 0.171737 +Converged at iteration 23, L1 9.88108e-05, Linf 0.0062692, total time[s] 0.139894 +Converged at iteration 24, L1 6.09705e-05, Linf 0.00475574, total time[s] 0.144288 +Converged at iteration 20, L1 5.68793e-05, Linf 0.00530745, total time[s] 0.092232 +Converged at iteration 16, L1 8.92788e-05, Linf 0.00347308, total time[s] 0.080358 +Converged at iteration 19, L1 9.35948e-05, Linf 0.00700141, total time[s] 0.105146 +Converged at iteration 31, L1 7.28464e-05, Linf 0.00277597, total time[s] 0.148433 +Converged at iteration 23, L1 7.17847e-05, Linf 0.00687562, total time[s] 0.116541 +Converged at iteration 26, L1 5.45673e-05, Linf 0.00497236, total time[s] 0.14333 +Converged at iteration 23, L1 4.98982e-05, Linf 0.00334627, total time[s] 0.194053 +Converged at iteration 20, L1 5.51947e-05, Linf 0.00356662, total time[s] 0.150268 +Converged at iteration 25, L1 8.51979e-05, Linf 0.00451546, total time[s] 0.13354 +Converged at iteration 22, L1 9.57543e-05, Linf 0.00487476, total time[s] 0.152165 +Converged at iteration 29, L1 6.54508e-05, Linf 0.00617529, total time[s] 0.167183 +Converged at iteration 28, L1 6.58565e-05, Linf 0.00333023, total time[s] 0.159178 +Converged at iteration 27, L1 6.91984e-05, Linf 0.00379722, total time[s] 0.131497 +Converged at iteration 29, L1 6.31757e-05, Linf 0.0037093, total time[s] 0.164909 +Converged at iteration 29, L1 7.76869e-05, Linf 0.00282334, total time[s] 0.168143 +Converged at iteration 27, L1 9.62141e-05, Linf 0.00290939, total time[s] 0.168318 +Converged at iteration 32, L1 7.55118e-05, Linf 0.00661927, total time[s] 0.15816 +Converged at iteration 26, L1 7.20263e-05, Linf 0.00295111, total time[s] 0.133688 +Converged at iteration 25, L1 7.49716e-05, Linf 0.00244029, total time[s] 0.128805 +Converged at iteration 23, L1 6.52791e-05, Linf 0.00279665, total time[s] 0.098269 +Converged at iteration 38, L1 6.12505e-05, Linf 0.011002, total time[s] 0.178831 +Converged at iteration 35, L1 5.93939e-05, Linf 0.00946085, total time[s] 0.179546 +Converged at iteration 30, L1 5.73495e-05, Linf 0.00586596, total time[s] 0.163717 +Converged at iteration 25, L1 4.75666e-05, Linf 0.00675263, total time[s] 0.174059 +Converged at iteration 22, L1 5.95477e-05, Linf 0.00477834, total time[s] 0.103508 +Converged at iteration 23, L1 5.06258e-05, Linf 0.00349052, total time[s] 0.145798 +Converged at iteration 21, L1 5.38191e-05, Linf 0.00532297, total time[s] 0.098626 +Converged at iteration 19, L1 7.26156e-05, Linf 0.00728026, total time[s] 0.094006 +Converged at iteration 22, L1 6.03667e-05, Linf 0.00541518, total time[s] 0.103503 +Converged at iteration 23, L1 5.28351e-05, Linf 0.00372311, total time[s] 0.144507 +Converged at iteration 17, L1 9.26191e-05, Linf 0.00197883, total time[s] 0.084499 +Converged at iteration 19, L1 9.33086e-05, Linf 0.00662331, total time[s] 0.090932 +Converged at iteration 20, L1 5.45103e-05, Linf 0.00432323, total time[s] 0.121342 +Converged at iteration 25, L1 8.76661e-05, Linf 0.00548242, total time[s] 0.140269 +Converged at iteration 31, L1 5.34956e-05, Linf 0.00505112, total time[s] 0.151883 +Converged at iteration 22, L1 9.07936e-05, Linf 0.00658955, total time[s] 0.109618 +Converged at iteration 22, L1 6.66444e-05, Linf 0.0019082, total time[s] 0.151626 +Converged at iteration 24, L1 9.13501e-05, Linf 0.0030977, total time[s] 0.116745 +Converged at iteration 25, L1 7.31312e-05, Linf 0.00308859, total time[s] 0.119204 +Converged at iteration 30, L1 4.99131e-05, Linf 0.00355054, total time[s] 0.25763 +Converged at iteration 23, L1 6.7863e-05, Linf 0.00278686, total time[s] 0.192115 +Converged at iteration 29, L1 8.99214e-05, Linf 0.00539248, total time[s] 0.153222 +Converged at iteration 26, L1 7.58546e-05, Linf 0.00328966, total time[s] 0.149905 +Converged at iteration 29, L1 6.83464e-05, Linf 0.00256826, total time[s] 0.163544 +Converged at iteration 28, L1 8.53843e-05, Linf 0.00258023, total time[s] 0.151791 +Converged at iteration 26, L1 6.8656e-05, Linf 0.00398786, total time[s] 0.131033 +Converged at iteration 29, L1 8.58523e-05, Linf 0.00210003, total time[s] 0.161662 +Converged at iteration 23, L1 8.16057e-05, Linf 0.00365213, total time[s] 0.144463 +Converged at iteration 32, L1 5.42237e-05, Linf 0.00866026, total time[s] 0.176479 +Converged at iteration 25, L1 8.8837e-05, Linf 0.00383863, total time[s] 0.11222 +Converged at iteration 35, L1 3.95729e-05, Linf 0.0120517, total time[s] 0.173363 +Converged at iteration 37, L1 8.08597e-05, Linf 0.0175058, total time[s] 0.203979 +Converged at iteration 25, L1 6.78588e-05, Linf 0.00944575, total time[s] 0.119745 +Converged at iteration 28, L1 9.92812e-05, Linf 0.00827531, total time[s] 0.17228 +Converged at iteration 22, L1 8.54221e-05, Linf 0.00406096, total time[s] 0.103889 +Converged at iteration 22, L1 4.73595e-05, Linf 0.00472631, total time[s] 0.117098 +Converged at iteration 20, L1 3.5567e-05, Linf 0.00576936, total time[s] 0.093127 +Converged at iteration 21, L1 8.77358e-05, Linf 0.00630078, total time[s] 0.101833 +Converged at iteration 23, L1 6.04798e-05, Linf 0.00326221, total time[s] 0.106609 +Converged at iteration 22, L1 6.63578e-05, Linf 0.00183848, total time[s] 0.129867 +Converged at iteration 20, L1 9.14215e-05, Linf 0.00312112, total time[s] 0.092724 +Converged at iteration 18, L1 9.2268e-05, Linf 0.00308715, total time[s] 0.120329 +Converged at iteration 31, L1 5.73705e-05, Linf 0.00694234, total time[s] 0.139883 +Converged at iteration 19, L1 9.31198e-05, Linf 0.00534205, total time[s] 0.106384 +Converged at iteration 22, L1 7.80451e-05, Linf 0.00518417, total time[s] 0.105735 +Converged at iteration 26, L1 5.04185e-05, Linf 0.00457167, total time[s] 0.130965 +Converged at iteration 25, L1 9.52579e-05, Linf 0.00331006, total time[s] 0.115589 +Converged at iteration 23, L1 6.32207e-05, Linf 0.00200875, total time[s] 0.108475 +Converged at iteration 23, L1 7.83055e-05, Linf 0.00271869, total time[s] 0.105178 +Converged at iteration 24, L1 6.80205e-05, Linf 0.00289292, total time[s] 0.111391 +Converged at iteration 24, L1 9.73419e-05, Linf 0.00394965, total time[s] 0.131715 +Converged at iteration 29, L1 8.56842e-05, Linf 0.00322109, total time[s] 0.14654 +Converged at iteration 31, L1 7.48219e-05, Linf 0.00447001, total time[s] 0.141297 +Converged at iteration 30, L1 5.94824e-05, Linf 0.00192502, total time[s] 0.139876 +Converged at iteration 30, L1 5.2726e-05, Linf 0.00552633, total time[s] 0.140353 +Converged at iteration 32, L1 4.79024e-05, Linf 0.0117912, total time[s] 0.142735 +Converged at iteration 31, L1 6.97364e-05, Linf 0.00349688, total time[s] 0.182845 +Converged at iteration 25, L1 8.51533e-05, Linf 0.00453751, total time[s] 0.115745 +Converged at iteration 24, L1 6.17493e-05, Linf 0.00446395, total time[s] 0.188852 +Converged at iteration 24, L1 6.5466e-05, Linf 0.00296875, total time[s] 0.098831 +Converged at iteration 35, L1 4.3174e-05, Linf 0.0144629, total time[s] 0.170838 +Converged at iteration 37, L1 5.22619e-05, Linf 0.0192627, total time[s] 0.180708 +Converged at iteration 25, L1 7.01893e-05, Linf 0.0101207, total time[s] 0.117835 +Converged at iteration 28, L1 6.29679e-05, Linf 0.00754554, total time[s] 0.206443 +Converged at iteration 22, L1 9.82709e-05, Linf 0.00441436, total time[s] 0.104801 +Converged at iteration 21, L1 8.32606e-05, Linf 0.00895721, total time[s] 0.108521 +Converged at iteration 20, L1 5.93586e-05, Linf 0.00912361, total time[s] 0.130467 +Converged at iteration 22, L1 3.48522e-05, Linf 0.00320961, total time[s] 0.113062 +Converged at iteration 23, L1 7.54855e-05, Linf 0.00294913, total time[s] 0.131642 +Converged at iteration 23, L1 7.47046e-05, Linf 0.00365999, total time[s] 0.197066 +Converged at iteration 19, L1 6.43241e-05, Linf 0.00329253, total time[s] 0.095629 +Converged at iteration 21, L1 7.01445e-05, Linf 0.00236251, total time[s] 0.154953 +Converged at iteration 20, L1 5.81411e-05, Linf 0.00372971, total time[s] 0.1063 +Converged at iteration 26, L1 4.92843e-05, Linf 0.00381928, total time[s] 0.173417 +Converged at iteration 31, L1 5.83327e-05, Linf 0.00857564, total time[s] 0.291446 +Converged at iteration 22, L1 7.63046e-05, Linf 0.00501169, total time[s] 0.110404 +Converged at iteration 23, L1 8.42829e-05, Linf 0.00262704, total time[s] 0.159653 +Converged at iteration 24, L1 8.18635e-05, Linf 0.00387576, total time[s] 0.122251 +Converged at iteration 26, L1 7.85438e-05, Linf 0.002714, total time[s] 0.144703 +Converged at iteration 23, L1 9.15225e-05, Linf 0.00274453, total time[s] 0.125241 +Converged at iteration 32, L1 5.0867e-05, Linf 0.00408135, total time[s] 0.171104 +Converged at iteration 23, L1 7.25029e-05, Linf 0.00114801, total time[s] 0.116472 +Converged at iteration 30, L1 6.54204e-05, Linf 0.00799514, total time[s] 0.164146 +Converged at iteration 30, L1 6.25067e-05, Linf 0.00251724, total time[s] 0.199632 +Converged at iteration 32, L1 3.75377e-05, Linf 0.00250364, total time[s] 0.173246 +Converged at iteration 30, L1 7.68596e-05, Linf 0.00327935, total time[s] 0.199727 +Converged at iteration 25, L1 8.6462e-05, Linf 0.00290642, total time[s] 0.183082 +Converged at iteration 24, L1 9.50757e-05, Linf 0.00545624, total time[s] 0.169737 +Converged at iteration 32, L1 4.7634e-05, Linf 0.0154585, total time[s] 0.185352 +Converged at iteration 25, L1 8.07719e-05, Linf 0.00463342, total time[s] 0.152257 +Converged at iteration 35, L1 5.76022e-05, Linf 0.018222, total time[s] 0.212488 +Converged at iteration 37, L1 4.12691e-05, Linf 0.0198888, total time[s] 0.262218 +Converged at iteration 27, L1 8.94648e-05, Linf 0.00892078, total time[s] 0.146161 +Converged at iteration 25, L1 6.75562e-05, Linf 0.00984571, total time[s] 0.165252 +Converged at iteration 21, L1 6.93249e-05, Linf 0.00812086, total time[s] 0.137721 +Converged at iteration 23, L1 6.96149e-05, Linf 0.00402439, total time[s] 0.141786 +Converged at iteration 22, L1 4.40117e-05, Linf 0.00438499, total time[s] 0.120933 +Converged at iteration 20, L1 9.24701e-05, Linf 0.0131671, total time[s] 0.144955 +Converged at iteration 24, L1 6.69533e-05, Linf 0.00409492, total time[s] 0.164964 +Converged at iteration 24, L1 4.76852e-05, Linf 0.00245548, total time[s] 0.16375 +Converged at iteration 19, L1 8.21132e-05, Linf 0.00439962, total time[s] 0.125034 +Converged at iteration 21, L1 9.85934e-05, Linf 0.00305193, total time[s] 0.144604 +Converged at iteration 20, L1 6.47816e-05, Linf 0.00393172, total time[s] 0.171451 +Converged at iteration 31, L1 7.03262e-05, Linf 0.00841183, total time[s] 0.190543 +Converged at iteration 26, L1 6.68721e-05, Linf 0.00426344, total time[s] 0.148347 +Converged at iteration 22, L1 8.15778e-05, Linf 0.00468968, total time[s] 0.151375 +Converged at iteration 24, L1 5.02865e-05, Linf 0.0016713, total time[s] 0.129024 +Converged at iteration 27, L1 5.80952e-05, Linf 0.00182778, total time[s] 0.134855 +Converged at iteration 24, L1 6.72238e-05, Linf 0.00353849, total time[s] 0.130927 +Converged at iteration 23, L1 9.34763e-05, Linf 0.00437802, total time[s] 0.236176 +Converged at iteration 32, L1 6.71045e-05, Linf 0.00495125, total time[s] 0.241309 +Converged at iteration 25, L1 9.77463e-05, Linf 0.00341495, total time[s] 0.150663 +Converged at iteration 30, L1 8.21461e-05, Linf 0.0099012, total time[s] 0.140006 +Converged at iteration 30, L1 7.63731e-05, Linf 0.0027775, total time[s] 0.155986 +Converged at iteration 32, L1 5.80535e-05, Linf 0.003492, total time[s] 0.183536 +Converged at iteration 31, L1 5.4655e-05, Linf 0.00359678, total time[s] 0.167587 +Converged at iteration 27, L1 5.46001e-05, Linf 0.00552487, total time[s] 0.125531 +Converged at iteration 32, L1 5.22213e-05, Linf 0.0197042, total time[s] 0.164635 +Converged at iteration 25, L1 7.11831e-05, Linf 0.00533863, total time[s] 0.17646 +Converged at iteration 25, L1 7.2143e-05, Linf 0.00338478, total time[s] 0.133395 +Converged at iteration 35, L1 6.69705e-05, Linf 0.0235334, total time[s] 0.191635 +Converged at iteration 37, L1 3.95917e-05, Linf 0.0208762, total time[s] 0.211251 +Converged at iteration 27, L1 6.75017e-05, Linf 0.00778746, total time[s] 0.16378 +Converged at iteration 25, L1 6.50938e-05, Linf 0.0094388, total time[s] 0.215527 +Converged at iteration 21, L1 6.15806e-05, Linf 0.00699705, total time[s] 0.12434 +Converged at iteration 22, L1 6.94783e-05, Linf 0.00763264, total time[s] 0.105127 +Converged at iteration 23, L1 6.69125e-05, Linf 0.00381559, total time[s] 0.127059 +Converged at iteration 24, L1 9.84807e-05, Linf 0.00670125, total time[s] 0.13311 +Converged at iteration 21, L1 3.38972e-05, Linf 0.00647348, total time[s] 0.099259 +Converged at iteration 19, L1 9.43641e-05, Linf 0.00518925, total time[s] 0.12974 +Converged at iteration 24, L1 7.25782e-05, Linf 0.00485416, total time[s] 0.147017 +Converged at iteration 20, L1 7.94797e-05, Linf 0.00458636, total time[s] 0.133607 +Converged at iteration 22, L1 6.62383e-05, Linf 0.0028432, total time[s] 0.14424 +Converged at iteration 26, L1 9.80091e-05, Linf 0.00408361, total time[s] 0.139118 +Converged at iteration 31, L1 9.13293e-05, Linf 0.0101269, total time[s] 0.20205 +Converged at iteration 24, L1 6.46136e-05, Linf 0.00203344, total time[s] 0.13421 +Converged at iteration 22, L1 9.80064e-05, Linf 0.00550775, total time[s] 0.158541 +Converged at iteration 23, L1 9.7442e-05, Linf 0.00520358, total time[s] 0.122953 +Converged at iteration 27, L1 7.69337e-05, Linf 0.00246688, total time[s] 0.214695 +Converged at iteration 32, L1 8.93096e-05, Linf 0.00937315, total time[s] 0.1799 +Converged at iteration 23, L1 9.07638e-05, Linf 0.00314887, total time[s] 0.118063 +Converged at iteration 30, L1 9.73773e-05, Linf 0.0139997, total time[s] 0.21606 +Converged at iteration 27, L1 6.57618e-05, Linf 0.00432275, total time[s] 0.132953 +Converged at iteration 30, L1 8.52505e-05, Linf 0.00279566, total time[s] 0.156096 +Converged at iteration 32, L1 8.30188e-05, Linf 0.00492965, total time[s] 0.141795 +Converged at iteration 31, L1 7.33958e-05, Linf 0.00528352, total time[s] 0.156077 +Converged at iteration 27, L1 6.77599e-05, Linf 0.00733834, total time[s] 0.167628 +Converged at iteration 26, L1 5.15587e-05, Linf 0.00484237, total time[s] 0.145783 +Converged at iteration 32, L1 6.3218e-05, Linf 0.0246386, total time[s] 0.179534 +Converged at iteration 25, L1 6.75249e-05, Linf 0.00353224, total time[s] 0.132562 +Converged at iteration 37, L1 5.02259e-05, Linf 0.0241002, total time[s] 0.171289 +Converged at iteration 35, L1 7.72861e-05, Linf 0.0268312, total time[s] 0.191977 +Converged at iteration 25, L1 6.57002e-05, Linf 0.00984284, total time[s] 0.117302 +Converged at iteration 27, L1 4.8002e-05, Linf 0.00631026, total time[s] 0.182433 +Converged at iteration 22, L1 6.41205e-05, Linf 0.00249868, total time[s] 0.110936 +Converged at iteration 21, L1 6.24788e-05, Linf 0.00576635, total time[s] 0.104509 +Converged at iteration 21, L1 4.35663e-05, Linf 0.00784772, total time[s] 0.098725 +Converged at iteration 25, L1 5.16359e-05, Linf 0.00509538, total time[s] 0.1199 +Converged at iteration 23, L1 4.60928e-05, Linf 0.00670891, total time[s] 0.172061 +Converged at iteration 22, L1 8.06122e-05, Linf 0.00384621, total time[s] 0.134187 +Converged at iteration 25, L1 6.19879e-05, Linf 0.0058258, total time[s] 0.202284 +Converged at iteration 19, L1 9.53248e-05, Linf 0.00532987, total time[s] 0.106145 +Converged at iteration 32, L1 3.2896e-05, Linf 0.00537098, total time[s] 0.223784 +Converged at iteration 20, L1 9.55541e-05, Linf 0.00558198, total time[s] 0.102261 +Converged at iteration 23, L1 6.82266e-05, Linf 0.004598, total time[s] 0.113404 +Converged at iteration 27, L1 8.22285e-05, Linf 0.00252794, total time[s] 0.138494 +Converged at iteration 24, L1 8.13202e-05, Linf 0.00304495, total time[s] 0.112607 +Converged at iteration 27, L1 9.40441e-05, Linf 0.00307904, total time[s] 0.234971 +Converged at iteration 23, L1 9.57985e-05, Linf 0.00603097, total time[s] 0.107345 +Converged at iteration 24, L1 5.74509e-05, Linf 0.00240847, total time[s] 0.139381 +Converged at iteration 27, L1 9.75755e-05, Linf 0.00574228, total time[s] 0.13736 +Converged at iteration 33, L1 5.20863e-05, Linf 0.00529502, total time[s] 0.181055 +Converged at iteration 30, L1 8.80842e-05, Linf 0.00252322, total time[s] 0.148612 +Converged at iteration 31, L1 4.23678e-05, Linf 0.00728982, total time[s] 0.162884 +Converged at iteration 31, L1 8.8164e-05, Linf 0.00673725, total time[s] 0.168831 +Converged at iteration 33, L1 4.24239e-05, Linf 0.00368859, total time[s] 0.228509 +Converged at iteration 32, L1 9.06995e-05, Linf 0.0299527, total time[s] 0.173867 +Converged at iteration 27, L1 5.7641e-05, Linf 0.0068364, total time[s] 0.163756 +Converged at iteration 25, L1 7.48005e-05, Linf 0.00561264, total time[s] 0.128413 +Converged at iteration 26, L1 6.98268e-05, Linf 0.00680034, total time[s] 0.131196 +Converged at iteration 36, L1 2.39165e-05, Linf 0.0106404, total time[s] 0.2547 +Converged at iteration 37, L1 9.99984e-05, Linf 0.0303431, total time[s] 0.284526 +Converged at iteration 26, L1 7.924e-05, Linf 0.00727624, total time[s] 0.180359 +Converged at iteration 25, L1 7.58943e-05, Linf 0.0105684, total time[s] 0.184994 +Converged at iteration 21, L1 6.23404e-05, Linf 0.00594463, total time[s] 0.103923 +Converged at iteration 21, L1 9.3003e-05, Linf 0.00346563, total time[s] 0.148475 +Converged at iteration 23, L1 7.53838e-05, Linf 0.0108059, total time[s] 0.201626 +Converged at iteration 21, L1 4.97075e-05, Linf 0.00795149, total time[s] 0.101627 +Converged at iteration 25, L1 6.90849e-05, Linf 0.00741874, total time[s] 0.134895 +Converged at iteration 25, L1 7.37969e-05, Linf 0.00831039, total time[s] 0.153541 +Converged at iteration 19, L1 9.2761e-05, Linf 0.00491052, total time[s] 0.093148 +Converged at iteration 22, L1 9.0227e-05, Linf 0.00479166, total time[s] 0.13335 +Converged at iteration 21, L1 6.46018e-05, Linf 0.00464479, total time[s] 0.104755 +Converged at iteration 27, L1 9.63209e-05, Linf 0.00301861, total time[s] 0.15499 +Converged at iteration 32, L1 3.58623e-05, Linf 0.00525933, total time[s] 0.185716 +Converged at iteration 25, L1 5.08327e-05, Linf 0.00305491, total time[s] 0.139248 +Converged at iteration 23, L1 8.47429e-05, Linf 0.00550562, total time[s] 0.150596 +Converged at iteration 28, L1 5.84218e-05, Linf 0.00217642, total time[s] 0.181049 +Converged at iteration 24, L1 6.86143e-05, Linf 0.00536374, total time[s] 0.146046 +Converged at iteration 33, L1 6.56481e-05, Linf 0.00616297, total time[s] 0.151858 +Converged at iteration 24, L1 6.74108e-05, Linf 0.00270237, total time[s] 0.17023 +Converged at iteration 30, L1 9.81553e-05, Linf 0.0165734, total time[s] 0.207035 +Converged at iteration 28, L1 7.93361e-05, Linf 0.0055197, total time[s] 0.220928 +Converged at iteration 30, L1 8.852e-05, Linf 0.00223219, total time[s] 0.16956 +Converged at iteration 33, L1 5.30415e-05, Linf 0.00460963, total time[s] 0.175204 +Converged at iteration 31, L1 9.11779e-05, Linf 0.00712863, total time[s] 0.19836 +Converged at iteration 27, L1 4.44481e-05, Linf 0.0051892, total time[s] 0.168541 +Converged at iteration 33, L1 3.99048e-05, Linf 0.0222754, total time[s] 0.169001 +Converged at iteration 26, L1 8.79725e-05, Linf 0.00860843, total time[s] 0.160892 +Converged at iteration 25, L1 8.20137e-05, Linf 0.00732397, total time[s] 0.113277 +Converged at iteration 38, L1 6.95096e-05, Linf 0.0230451, total time[s] 0.175209 +Converged at iteration 36, L1 4.14988e-05, Linf 0.0147561, total time[s] 0.167371 +Converged at iteration 27, L1 4.12527e-05, Linf 0.00536485, total time[s] 0.13086 +Converged at iteration 25, L1 9.31463e-05, Linf 0.0108171, total time[s] 0.140497 +Converged at iteration 22, L1 9.55113e-05, Linf 0.00408457, total time[s] 0.108327 +Converged at iteration 21, L1 6.86785e-05, Linf 0.00623098, total time[s] 0.137545 +Converged at iteration 21, L1 5.09453e-05, Linf 0.00626707, total time[s] 0.153137 +Converged at iteration 24, L1 4.04089e-05, Linf 0.00742347, total time[s] 0.125446 +Converged at iteration 25, L1 8.48529e-05, Linf 0.0102163, total time[s] 0.131226 +Converged at iteration 25, L1 6.8896e-05, Linf 0.00774876, total time[s] 0.122772 +Converged at iteration 22, L1 9.38286e-05, Linf 0.00555657, total time[s] 0.118528 +Converged at iteration 19, L1 8.97873e-05, Linf 0.00398879, total time[s] 0.098947 +Converged at iteration 21, L1 7.54984e-05, Linf 0.0052275, total time[s] 0.130584 +Converged at iteration 32, L1 3.61551e-05, Linf 0.00449932, total time[s] 0.163822 +Converged at iteration 27, L1 8.50645e-05, Linf 0.00292286, total time[s] 0.165636 +Converged at iteration 23, L1 9.98971e-05, Linf 0.00602118, total time[s] 0.160382 +Converged at iteration 25, L1 6.40266e-05, Linf 0.00510763, total time[s] 0.229313 +Converged at iteration 28, L1 6.38652e-05, Linf 0.00251341, total time[s] 0.249543 +Converged at iteration 25, L1 6.11966e-05, Linf 0.00508183, total time[s] 0.189657 +Converged at iteration 24, L1 7.6583e-05, Linf 0.0030812, total time[s] 0.153531 +Converged at iteration 29, L1 6.55111e-05, Linf 0.00505338, total time[s] 0.141471 +Converged at iteration 33, L1 6.8141e-05, Linf 0.00572936, total time[s] 0.219983 +Converged at iteration 30, L1 8.52411e-05, Linf 0.00184375, total time[s] 0.172979 +Converged at iteration 30, L1 8.22e-05, Linf 0.014535, total time[s] 0.22788 +Converged at iteration 31, L1 7.64041e-05, Linf 0.00533123, total time[s] 0.146587 +Converged at iteration 33, L1 5.96393e-05, Linf 0.00492675, total time[s] 0.166464 +Converged at iteration 26, L1 6.67433e-05, Linf 0.00435786, total time[s] 0.12179 +Converged at iteration 34, L1 2.32545e-05, Linf 0.0158842, total time[s] 0.1592 +Converged at iteration 26, L1 9.86653e-05, Linf 0.00990828, total time[s] 0.125225 +Converged at iteration 25, L1 8.87154e-05, Linf 0.00839651, total time[s] 0.157235 +Converged at iteration 39, L1 4.04946e-05, Linf 0.0158424, total time[s] 0.186888 +Converged at iteration 36, L1 6.00428e-05, Linf 0.0169755, total time[s] 0.194874 +Converged at iteration 25, L1 7.5643e-05, Linf 0.00960661, total time[s] 0.15433 +Converged at iteration 27, L1 9.36681e-05, Linf 0.00646011, total time[s] 0.143918 +Converged at iteration 23, L1 6.28331e-05, Linf 0.00347774, total time[s] 0.107391 +Converged at iteration 21, L1 8.5232e-05, Linf 0.00665764, total time[s] 0.136359 +Converged at iteration 21, L1 5.36098e-05, Linf 0.00457669, total time[s] 0.113006 +Converged at iteration 24, L1 4.61222e-05, Linf 0.0090947, total time[s] 0.144508 +Converged at iteration 25, L1 8.60765e-05, Linf 0.0111156, total time[s] 0.114309 +Converged at iteration 25, L1 6.79966e-05, Linf 0.00803951, total time[s] 0.161305 +Converged at iteration 22, L1 9.94555e-05, Linf 0.00654892, total time[s] 0.11293 +Converged at iteration 19, L1 9.41805e-05, Linf 0.00332076, total time[s] 0.093488 +Converged at iteration 32, L1 3.77347e-05, Linf 0.00509365, total time[s] 0.144511 +Converged at iteration 22, L1 6.0125e-05, Linf 0.00381498, total time[s] 0.141699 +Converged at iteration 24, L1 6.12487e-05, Linf 0.0042523, total time[s] 0.125513 +Converged at iteration 27, L1 6.97687e-05, Linf 0.00238288, total time[s] 0.133628 +Converged at iteration 28, L1 6.63151e-05, Linf 0.00272716, total time[s] 0.260448 +Converged at iteration 25, L1 7.63906e-05, Linf 0.00711271, total time[s] 0.113693 +Converged at iteration 25, L1 8.26767e-05, Linf 0.00616908, total time[s] 0.12404 +Converged at iteration 24, L1 8.06926e-05, Linf 0.00333301, total time[s] 0.190497 +Converged at iteration 33, L1 6.91064e-05, Linf 0.00599049, total time[s] 0.160016 +Converged at iteration 30, L1 5.85196e-05, Linf 0.00477303, total time[s] 0.151787 +Converged at iteration 30, L1 6.40478e-05, Linf 0.0118618, total time[s] 0.166833 +Converged at iteration 30, L1 9.04662e-05, Linf 0.00209011, total time[s] 0.161888 +Converged at iteration 33, L1 6.27883e-05, Linf 0.00476812, total time[s] 0.186321 +Converged at iteration 31, L1 5.83618e-05, Linf 0.00355516, total time[s] 0.165777 +Converged at iteration 26, L1 5.46959e-05, Linf 0.00320966, total time[s] 0.283925 +Converged at iteration 34, L1 5.12534e-05, Linf 0.0209744, total time[s] 0.155861 +Converged at iteration 27, L1 5.51607e-05, Linf 0.00615459, total time[s] 0.148001 +Converged at iteration 25, L1 9.48183e-05, Linf 0.00912213, total time[s] 0.159179 +Converged at iteration 39, L1 5.48284e-05, Linf 0.013327, total time[s] 0.176232 +Converged at iteration 36, L1 4.50739e-05, Linf 0.0129457, total time[s] 0.182311 +Converged at iteration 25, L1 5.66426e-05, Linf 0.00970762, total time[s] 0.128406 +Converged at iteration 27, L1 5.83139e-05, Linf 0.00440891, total time[s] 0.140265 +Converged at iteration 24, L1 6.59998e-05, Linf 0.00369388, total time[s] 0.138467 +Converged at iteration 22, L1 6.33777e-05, Linf 0.00446717, total time[s] 0.125005 +Converged at iteration 21, L1 4.20097e-05, Linf 0.00433716, total time[s] 0.175899 +Converged at iteration 24, L1 3.9084e-05, Linf 0.00944649, total time[s] 0.25709 +Converged at iteration 25, L1 7.38915e-05, Linf 0.00939113, total time[s] 0.151929 +Converged at iteration 25, L1 5.56356e-05, Linf 0.00651042, total time[s] 0.174033 +Converged at iteration 22, L1 8.37607e-05, Linf 0.00638657, total time[s] 0.139927 +Converged at iteration 19, L1 6.43667e-05, Linf 0.00225958, total time[s] 0.132336 +Converged at iteration 31, L1 6.88562e-05, Linf 0.00768661, total time[s] 0.152154 +Converged at iteration 22, L1 5.75034e-05, Linf 0.00477772, total time[s] 0.112227 +Converged at iteration 24, L1 7.09194e-05, Linf 0.00554965, total time[s] 0.132366 +Converged at iteration 26, L1 7.83768e-05, Linf 0.00712677, total time[s] 0.121701 +Converged at iteration 28, L1 5.57851e-05, Linf 0.00265251, total time[s] 0.125399 +Converged at iteration 25, L1 7.06718e-05, Linf 0.00772665, total time[s] 0.110968 +Converged at iteration 25, L1 6.56055e-05, Linf 0.00311386, total time[s] 0.130368 +Converged at iteration 27, L1 6.33688e-05, Linf 0.00509204, total time[s] 0.129539 +Converged at iteration 29, L1 7.19928e-05, Linf 0.00334052, total time[s] 0.138852 +Converged at iteration 31, L1 5.78301e-05, Linf 0.00160036, total time[s] 0.142641 +Converged at iteration 33, L1 7.38766e-05, Linf 0.00741874, total time[s] 0.213054 +Converged at iteration 29, L1 9.3043e-05, Linf 0.0084195, total time[s] 0.141694 +Converged at iteration 30, L1 4.67554e-05, Linf 0.00766396, total time[s] 0.150504 +Converged at iteration 34, L1 7.32951e-05, Linf 0.0191561, total time[s] 0.186121 +Converged at iteration 33, L1 6.63701e-05, Linf 0.0053795, total time[s] 0.18888 +Converged at iteration 25, L1 9.99401e-05, Linf 0.0088125, total time[s] 0.126455 +Converged at iteration 26, L1 5.28639e-05, Linf 0.00270099, total time[s] 0.12072 +Converged at iteration 26, L1 9.78284e-05, Linf 0.0106376, total time[s] 0.122842 +Converged at iteration 36, L1 6.7055e-05, Linf 0.016459, total time[s] 0.184947 +Converged at iteration 39, L1 7.98006e-05, Linf 0.017354, total time[s] 0.178339 +Converged at iteration 27, L1 9.08953e-05, Linf 0.00550985, total time[s] 0.125312 +Converged at iteration 25, L1 5.66571e-05, Linf 0.0084803, total time[s] 0.15098 +Converged at iteration 22, L1 5.69779e-05, Linf 0.00422018, total time[s] 0.122591 +Converged at iteration 23, L1 9.1018e-05, Linf 0.00429166, total time[s] 0.120739 +Converged at iteration 24, L1 4.71469e-05, Linf 0.0108197, total time[s] 0.140378 +Converged at iteration 21, L1 5.14218e-05, Linf 0.00572862, total time[s] 0.150049 +Converged at iteration 25, L1 5.86959e-05, Linf 0.0074616, total time[s] 0.135623 +Converged at iteration 19, L1 7.12646e-05, Linf 0.00270959, total time[s] 0.095219 +Converged at iteration 25, L1 7.96272e-05, Linf 0.0103209, total time[s] 0.126269 +Converged at iteration 22, L1 5.72543e-05, Linf 0.00475777, total time[s] 0.19668 +Converged at iteration 22, L1 9.19151e-05, Linf 0.00725529, total time[s] 0.111374 +Converged at iteration 26, L1 8.4126e-05, Linf 0.00786395, total time[s] 0.165637 +Converged at iteration 32, L1 3.92299e-05, Linf 0.00565376, total time[s] 0.147335 +Converged at iteration 25, L1 8.32043e-05, Linf 0.00872418, total time[s] 0.156321 +Converged at iteration 24, L1 7.61939e-05, Linf 0.00503318, total time[s] 0.143081 +Converged at iteration 26, L1 8.69712e-05, Linf 0.00618774, total time[s] 0.114992 +Converged at iteration 28, L1 5.98356e-05, Linf 0.00334598, total time[s] 0.188503 +Converged at iteration 33, L1 7.90516e-05, Linf 0.00798012, total time[s] 0.183042 +Converged at iteration 25, L1 5.58886e-05, Linf 0.00278236, total time[s] 0.175114 +Converged at iteration 30, L1 4.92714e-05, Linf 0.00831303, total time[s] 0.144973 +Converged at iteration 30, L1 6.35959e-05, Linf 0.00414268, total time[s] 0.16298 +Converged at iteration 33, L1 6.65973e-05, Linf 0.00544955, total time[s] 0.155137 +Converged at iteration 30, L1 9.79725e-05, Linf 0.0022769, total time[s] 0.142939 +Converged at iteration 25, L1 9.61997e-05, Linf 0.00401533, total time[s] 0.150735 +Converged at iteration 30, L1 5.25248e-05, Linf 0.00344548, total time[s] 0.180025 +Converged at iteration 27, L1 5.54058e-05, Linf 0.00643548, total time[s] 0.172654 +Converged at iteration 34, L1 8.45973e-05, Linf 0.0214744, total time[s] 0.141011 +Converged at iteration 25, L1 9.82978e-05, Linf 0.0093914, total time[s] 0.103787 +Converged at iteration 39, L1 9.55536e-05, Linf 0.019211, total time[s] 0.266454 +Converged at iteration 36, L1 9.3146e-05, Linf 0.01892, total time[s] 0.273029 +Converged at iteration 25, L1 6.37217e-05, Linf 0.00661921, total time[s] 0.123487 +Converged at iteration 28, L1 5.76581e-05, Linf 0.00521022, total time[s] 0.156715 +Converged at iteration 22, L1 5.2355e-05, Linf 0.00398212, total time[s] 0.108019 +Converged at iteration 23, L1 7.4504e-05, Linf 0.00389981, total time[s] 0.12811 +Converged at iteration 24, L1 6.25846e-05, Linf 0.0128265, total time[s] 0.13231 +Converged at iteration 21, L1 6.62098e-05, Linf 0.0062667, total time[s] 0.12341 +Converged at iteration 25, L1 6.11399e-05, Linf 0.00824968, total time[s] 0.135572 +Converged at iteration 25, L1 8.57915e-05, Linf 0.0111208, total time[s] 0.130575 +Converged at iteration 19, L1 8.62815e-05, Linf 0.0032428, total time[s] 0.087035 +Converged at iteration 23, L1 4.69894e-05, Linf 0.00423635, total time[s] 0.106833 +Converged at iteration 22, L1 5.51039e-05, Linf 0.00487356, total time[s] 0.120454 +Converged at iteration 32, L1 5.34499e-05, Linf 0.00704754, total time[s] 0.165051 +Converged at iteration 26, L1 9.37059e-05, Linf 0.0110811, total time[s] 0.129938 +Converged at iteration 24, L1 7.30007e-05, Linf 0.00483135, total time[s] 0.140679 +Converged at iteration 25, L1 9.86276e-05, Linf 0.0102252, total time[s] 0.111726 +Converged at iteration 26, L1 7.31241e-05, Linf 0.00560823, total time[s] 0.138669 +Converged at iteration 28, L1 6.1631e-05, Linf 0.00286056, total time[s] 0.255095 +Converged at iteration 33, L1 8.41762e-05, Linf 0.00840949, total time[s] 0.185287 +Converged at iteration 24, L1 8.76555e-05, Linf 0.00384034, total time[s] 0.137714 +Converged at iteration 30, L1 4.62939e-05, Linf 0.00668129, total time[s] 0.133436 +Converged at iteration 30, L1 7.77881e-05, Linf 0.00516198, total time[s] 0.165422 +Converged at iteration 33, L1 6.83789e-05, Linf 0.00559295, total time[s] 0.178921 +Converged at iteration 30, L1 9.02218e-05, Linf 0.00214202, total time[s] 0.23825 +Converged at iteration 26, L1 9.08242e-05, Linf 0.00383449, total time[s] 0.163258 +Converged at iteration 29, L1 9.30831e-05, Linf 0.00627805, total time[s] 0.140254 +Converged at iteration 27, L1 5.92185e-05, Linf 0.00705035, total time[s] 0.12724 +Converged at iteration 34, L1 9.70217e-05, Linf 0.02294, total time[s] 0.194929 +Converged at iteration 26, L1 4.14674e-05, Linf 0.00379457, total time[s] 0.121555 +Converged at iteration 36, L1 6.9107e-05, Linf 0.0161381, total time[s] 0.16102 +Converged at iteration 39, L1 8.16459e-05, Linf 0.0178509, total time[s] 0.260582 +Converged at iteration 27, L1 7.68521e-05, Linf 0.00495132, total time[s] 0.115994 +Converged at iteration 25, L1 6.28075e-05, Linf 0.00715938, total time[s] 0.133988 +Converged at iteration 22, L1 6.12222e-05, Linf 0.00454618, total time[s] 0.156643 +Converged at iteration 23, L1 9.88929e-05, Linf 0.00446695, total time[s] 0.109912 +Converged at iteration 24, L1 5.1212e-05, Linf 0.0131818, total time[s] 0.111672 +Converged at iteration 21, L1 5.24458e-05, Linf 0.00580381, total time[s] 0.153154 +Converged at iteration 25, L1 5.51839e-05, Linf 0.00751965, total time[s] 0.154862 +Converged at iteration 25, L1 7.81431e-05, Linf 0.00993087, total time[s] 0.14749 +Converged at iteration 19, L1 6.76553e-05, Linf 0.00273661, total time[s] 0.093651 +Converged at iteration 22, L1 9.01644e-05, Linf 0.00794956, total time[s] 0.103277 +Converged at iteration 22, L1 6.01958e-05, Linf 0.00491948, total time[s] 0.110796 +Converged at iteration 32, L1 4.34791e-05, Linf 0.00604109, total time[s] 0.213349 +Converged at iteration 26, L1 8.72293e-05, Linf 0.0089594, total time[s] 0.134981 +Converged at iteration 24, L1 7.82675e-05, Linf 0.00515126, total time[s] 0.156867 +Converged at iteration 25, L1 8.9055e-05, Linf 0.00980281, total time[s] 0.127571 +Converged at iteration 27, L1 5.82763e-05, Linf 0.00487802, total time[s] 0.147072 +Converged at iteration 28, L1 5.56983e-05, Linf 0.00341964, total time[s] 0.177242 +Converged at iteration 33, L1 8.75245e-05, Linf 0.00950769, total time[s] 0.146693 +Converged at iteration 25, L1 6.19475e-05, Linf 0.00308676, total time[s] 0.137001 +Converged at iteration 30, L1 3.98271e-05, Linf 0.00667089, total time[s] 0.169613 +Converged at iteration 29, L1 9.99631e-05, Linf 0.00487066, total time[s] 0.151927 +Converged at iteration 31, L1 5.91008e-05, Linf 0.00174875, total time[s] 0.138166 +Converged at iteration 33, L1 6.68541e-05, Linf 0.00555709, total time[s] 0.193012 +Converged at iteration 25, L1 9.98344e-05, Linf 0.00371834, total time[s] 0.149883 +Converged at iteration 29, L1 8.49593e-05, Linf 0.00707369, total time[s] 0.149972 +Converged at iteration 27, L1 5.51909e-05, Linf 0.00653584, total time[s] 0.179369 +Converged at iteration 34, L1 8.5111e-05, Linf 0.0206014, total time[s] 0.153054 +Converged at iteration 26, L1 4.10658e-05, Linf 0.00366037, total time[s] 0.10598 +Converged at iteration 36, L1 9.34482e-05, Linf 0.0181715, total time[s] 0.186717 +Converged at iteration 39, L1 9.15187e-05, Linf 0.01831, total time[s] 0.178168 +Converged at iteration 28, L1 5.20563e-05, Linf 0.00483322, total time[s] 0.125537 +Converged at iteration 25, L1 7.64117e-05, Linf 0.00601775, total time[s] 0.121777 +Converged at iteration 22, L1 5.60939e-05, Linf 0.00429818, total time[s] 0.13285 +Converged at iteration 23, L1 8.20106e-05, Linf 0.00412742, total time[s] 0.11943 +Converged at iteration 24, L1 6.33323e-05, Linf 0.0136397, total time[s] 0.118661 +Converged at iteration 21, L1 6.47477e-05, Linf 0.00619942, total time[s] 0.128674 +Converged at iteration 25, L1 5.9365e-05, Linf 0.00833503, total time[s] 0.132732 +Converged at iteration 19, L1 7.75672e-05, Linf 0.003075, total time[s] 0.119165 +Converged at iteration 25, L1 8.40577e-05, Linf 0.0106197, total time[s] 0.194283 +Converged at iteration 22, L1 5.6551e-05, Linf 0.00502733, total time[s] 0.105209 +Converged at iteration 22, L1 9.78904e-05, Linf 0.00915217, total time[s] 0.120443 +Converged at iteration 26, L1 9.40473e-05, Linf 0.0109024, total time[s] 0.172774 +Converged at iteration 32, L1 5.73711e-05, Linf 0.00641225, total time[s] 0.155116 +Converged at iteration 24, L1 7.5962e-05, Linf 0.004973, total time[s] 0.136376 +Converged at iteration 26, L1 4.77684e-05, Linf 0.00600032, total time[s] 0.143208 +Converged at iteration 26, L1 8.72907e-05, Linf 0.00624737, total time[s] 0.124391 +Converged at iteration 28, L1 5.93619e-05, Linf 0.00291367, total time[s] 0.198949 +Converged at iteration 33, L1 8.7301e-05, Linf 0.008357, total time[s] 0.204348 +Converged at iteration 24, L1 9.5041e-05, Linf 0.00414257, total time[s] 0.167701 +Converged at iteration 30, L1 3.94195e-05, Linf 0.00458961, total time[s] 0.155671 +Converged at iteration 30, L1 7.13928e-05, Linf 0.00476707, total time[s] 0.175248 +Converged at iteration 33, L1 7.03088e-05, Linf 0.00660761, total time[s] 0.19427 +Converged at iteration 30, L1 9.74146e-05, Linf 0.00243515, total time[s] 0.20137 +Converged at iteration 26, L1 9.3776e-05, Linf 0.00399802, total time[s] 0.173378 +Converged at iteration 29, L1 7.52795e-05, Linf 0.00637225, total time[s] 0.250646 +Converged at iteration 27, L1 5.86471e-05, Linf 0.00712894, total time[s] 0.162991 +Converged at iteration 34, L1 9.77941e-05, Linf 0.0224322, total time[s] 0.169938 +Converged at iteration 26, L1 4.3124e-05, Linf 0.00315123, total time[s] 0.12906 +Converged at iteration 36, L1 6.91228e-05, Linf 0.0155923, total time[s] 0.184374 +Converged at iteration 39, L1 7.93631e-05, Linf 0.0167787, total time[s] 0.186734 +Converged at iteration 25, L1 8.07557e-05, Linf 0.0063606, total time[s] 0.125921 +Converged at iteration 27, L1 6.93963e-05, Linf 0.00474248, total time[s] 0.135366 +Converged at iteration 24, L1 6.21392e-05, Linf 0.00361882, total time[s] 0.144648 +Converged at iteration 22, L1 6.35676e-05, Linf 0.00476232, total time[s] 0.142956 +Converged at iteration 21, L1 5.28255e-05, Linf 0.00584852, total time[s] 0.140323 +Converged at iteration 24, L1 5.27421e-05, Linf 0.0135309, total time[s] 0.133104 +Converged at iteration 25, L1 5.36074e-05, Linf 0.00740936, total time[s] 0.171019 +Converged at iteration 25, L1 7.724e-05, Linf 0.00940461, total time[s] 0.240845 +Converged at iteration 19, L1 6.14291e-05, Linf 0.00255579, total time[s] 0.207264 +Converged at iteration 22, L1 8.93794e-05, Linf 0.00849265, total time[s] 0.152838 +Converged at iteration 22, L1 6.14161e-05, Linf 0.00502294, total time[s] 0.194056 +Converged at iteration 32, L1 4.51197e-05, Linf 0.00597484, total time[s] 0.27039 +Converged at iteration 26, L1 9.71912e-05, Linf 0.0101316, total time[s] 0.273747 +Converged at iteration 24, L1 7.93403e-05, Linf 0.00530263, total time[s] 0.128362 +Converged at iteration 25, L1 9.25565e-05, Linf 0.0106326, total time[s] 0.207759 +Converged at iteration 28, L1 5.29106e-05, Linf 0.00349081, total time[s] 0.2423 +Converged at iteration 27, L1 6.64239e-05, Linf 0.00530052, total time[s] 0.190357 +Converged at iteration 25, L1 6.75409e-05, Linf 0.00332445, total time[s] 0.112166 +Converged at iteration 29, L1 9.02764e-05, Linf 0.00430396, total time[s] 0.162799 +Converged at iteration 33, L1 9.29619e-05, Linf 0.0097943, total time[s] 0.204443 +Converged at iteration 31, L1 6.38293e-05, Linf 0.00198311, total time[s] 0.180973 +Converged at iteration 30, L1 3.76579e-05, Linf 0.00470726, total time[s] 0.154598 +Converged at iteration 29, L1 9.70674e-05, Linf 0.00730341, total time[s] 0.167395 +Converged at iteration 33, L1 6.86806e-05, Linf 0.00572157, total time[s] 0.203877 +Converged at iteration 34, L1 8.41366e-05, Linf 0.0197262, total time[s] 0.22132 +Converged at iteration 26, L1 4.66495e-05, Linf 0.00209448, total time[s] 0.261345 +Converged at iteration 26, L1 4.14944e-05, Linf 0.00375043, total time[s] 0.142292 +Converged at iteration 27, L1 5.40834e-05, Linf 0.00651351, total time[s] 0.21891 +Converged at iteration 36, L1 8.57117e-05, Linf 0.0169344, total time[s] 0.17271 +Converged at iteration 39, L1 8.79632e-05, Linf 0.0175442, total time[s] 0.202262 +Converged at iteration 28, L1 4.14897e-05, Linf 0.00420931, total time[s] 0.245733 +Converged at iteration 25, L1 9.69171e-05, Linf 0.00555971, total time[s] 0.161415 +Converged at iteration 22, L1 6.10846e-05, Linf 0.00456942, total time[s] 0.155367 +Converged at iteration 23, L1 9.21505e-05, Linf 0.00437906, total time[s] 0.190528 +Converged at iteration 24, L1 6.30198e-05, Linf 0.0156527, total time[s] 0.170438 +Converged at iteration 21, L1 6.17597e-05, Linf 0.00603358, total time[s] 0.16785 +Converged at iteration 25, L1 5.74718e-05, Linf 0.00817711, total time[s] 0.144078 +Converged at iteration 25, L1 8.20826e-05, Linf 0.0101274, total time[s] 0.11451 +Converged at iteration 19, L1 6.78228e-05, Linf 0.00281887, total time[s] 0.093466 +Converged at iteration 22, L1 9.53051e-05, Linf 0.00951413, total time[s] 0.152533 +Converged at iteration 22, L1 5.90396e-05, Linf 0.00515616, total time[s] 0.119308 +Converged at iteration 32, L1 5.90094e-05, Linf 0.00711175, total time[s] 0.186054 +Converged at iteration 27, L1 4.99229e-05, Linf 0.00709011, total time[s] 0.135847 +Converged at iteration 26, L1 4.80041e-05, Linf 0.00626812, total time[s] 0.12117 +Converged at iteration 24, L1 7.79695e-05, Linf 0.0050567, total time[s] 0.18882 +Converged at iteration 27, L1 5.82011e-05, Linf 0.00480491, total time[s] 0.124634 +Converged at iteration 28, L1 5.63988e-05, Linf 0.00324941, total time[s] 0.157657 +Converged at iteration 33, L1 9.24789e-05, Linf 0.00890889, total time[s] 0.223152 +Converged at iteration 25, L1 5.74553e-05, Linf 0.00302427, total time[s] 0.124559 +Converged at iteration 30, L1 3.52685e-05, Linf 0.00388909, total time[s] 0.214928 +Converged at iteration 30, L1 6.52076e-05, Linf 0.00434006, total time[s] 0.232129 +Converged at iteration 33, L1 7.03553e-05, Linf 0.00583894, total time[s] 0.15147 +Converged at iteration 31, L1 5.88883e-05, Linf 0.00182868, total time[s] 0.201281 +Converged at iteration 26, L1 8.62359e-05, Linf 0.00395329, total time[s] 0.210399 +Converged at iteration 29, L1 7.82108e-05, Linf 0.00668874, total time[s] 0.187634 +Converged at iteration 27, L1 5.68106e-05, Linf 0.00712797, total time[s] 0.193805 +Converged at iteration 34, L1 9.36712e-05, Linf 0.0213677, total time[s] 0.179013 +Converged at iteration 26, L1 4.60856e-05, Linf 0.00286474, total time[s] 0.12082 +Converged at iteration 36, L1 6.72864e-05, Linf 0.0147249, total time[s] 0.228713 +Converged at iteration 39, L1 7.58341e-05, Linf 0.0159945, total time[s] 0.292779 +Converged at iteration 27, L1 5.94647e-05, Linf 0.00427082, total time[s] 0.178277 +Converged at iteration 26, L1 8.0798e-05, Linf 0.00334303, total time[s] 0.158403 +Converged at iteration 22, L1 7.22865e-05, Linf 0.00497249, total time[s] 0.126605 +Converged at iteration 24, L1 7.11676e-05, Linf 0.00387759, total time[s] 0.118162 +Converged at iteration 24, L1 5.5352e-05, Linf 0.0112299, total time[s] 0.112994 +Converged at iteration 21, L1 5.46819e-05, Linf 0.00601543, total time[s] 0.134363 +Converged at iteration 25, L1 5.06907e-05, Linf 0.00750049, total time[s] 0.11209 +Converged at iteration 19, L1 5.64274e-05, Linf 0.00231643, total time[s] 0.116196 +Converged at iteration 25, L1 7.74125e-05, Linf 0.0087137, total time[s] 0.124757 +Converged at iteration 22, L1 9.0544e-05, Linf 0.00928396, total time[s] 0.104194 +Converged at iteration 22, L1 6.22875e-05, Linf 0.00514211, total time[s] 0.113437 +Converged at iteration 32, L1 4.44866e-05, Linf 0.00481898, total time[s] 0.157023 +Converged at iteration 27, L1 6.11626e-05, Linf 0.00671321, total time[s] 0.142529 +Converged at iteration 25, L1 9.9581e-05, Linf 0.0117574, total time[s] 0.115358 +Converged at iteration 24, L1 8.03268e-05, Linf 0.00540703, total time[s] 0.155957 +Converged at iteration 27, L1 7.91325e-05, Linf 0.00577331, total time[s] 0.169244 +Converged at iteration 28, L1 5.1135e-05, Linf 0.00344653, total time[s] 0.244949 +Converged at iteration 34, L1 5.31385e-05, Linf 0.00761341, total time[s] 0.187404 +Converged at iteration 25, L1 7.41179e-05, Linf 0.00359526, total time[s] 0.262412 +Converged at iteration 29, L1 9.20627e-05, Linf 0.00990346, total time[s] 0.140894 +Converged at iteration 29, L1 7.9945e-05, Linf 0.00360734, total time[s] 0.147053 +Converged at iteration 33, L1 7.03007e-05, Linf 0.00583446, total time[s] 0.193838 +Converged at iteration 31, L1 7.17147e-05, Linf 0.00234449, total time[s] 0.152024 +Converged at iteration 26, L1 5.44116e-05, Linf 0.00255813, total time[s] 0.222525 +Converged at iteration 30, L1 4.90116e-05, Linf 0.00326783, total time[s] 0.130155 +Converged at iteration 27, L1 5.19243e-05, Linf 0.00656265, total time[s] 0.169485 +Converged at iteration 34, L1 8.04207e-05, Linf 0.0186181, total time[s] 0.179881 +Converged at iteration 26, L1 4.06076e-05, Linf 0.00279782, total time[s] 0.122399 +Converged at iteration 39, L1 8.71439e-05, Linf 0.0175911, total time[s] 0.185553 +Converged at iteration 36, L1 8.00057e-05, Linf 0.0158105, total time[s] 0.207272 +Converged at iteration 27, L1 8.17525e-05, Linf 0.00520309, total time[s] 0.135959 +Converged at iteration 26, L1 9.37319e-05, Linf 0.00361357, total time[s] 0.156257 +Converged at iteration 22, L1 6.74725e-05, Linf 0.00484416, total time[s] 0.129882 +Converged at iteration 24, L1 5.97367e-05, Linf 0.00352475, total time[s] 0.111514 +Converged at iteration 21, L1 6.08228e-05, Linf 0.00603234, total time[s] 0.103588 +Converged at iteration 24, L1 6.27751e-05, Linf 0.0131263, total time[s] 0.171992 +Converged at iteration 25, L1 8.11618e-05, Linf 0.00934911, total time[s] 0.186528 +Converged at iteration 25, L1 5.32705e-05, Linf 0.00803537, total time[s] 0.156182 +Converged at iteration 22, L1 9.26786e-05, Linf 0.00977778, total time[s] 0.112535 +Converged at iteration 19, L1 5.80258e-05, Linf 0.00248972, total time[s] 0.109557 +Converged at iteration 22, L1 6.13266e-05, Linf 0.00528852, total time[s] 0.109795 +Converged at iteration 32, L1 5.88327e-05, Linf 0.00728728, total time[s] 0.171172 +Converged at iteration 27, L1 6.01257e-05, Linf 0.00791954, total time[s] 0.128276 +Converged at iteration 24, L1 8.20783e-05, Linf 0.00520237, total time[s] 0.128273 +Converged at iteration 26, L1 5.05327e-05, Linf 0.00698015, total time[s] 0.127145 +Converged at iteration 28, L1 5.2084e-05, Linf 0.00371252, total time[s] 0.154707 +Converged at iteration 27, L1 6.68061e-05, Linf 0.00534713, total time[s] 0.143417 +Converged at iteration 25, L1 6.54448e-05, Linf 0.00341072, total time[s] 0.13349 +Converged at iteration 34, L1 5.1281e-05, Linf 0.00576211, total time[s] 0.16343 +Converged at iteration 29, L1 9.59869e-05, Linf 0.00478271, total time[s] 0.271564 +Converged at iteration 29, L1 9.46356e-05, Linf 0.00934069, total time[s] 0.211025 +Converged at iteration 31, L1 6.66719e-05, Linf 0.00212742, total time[s] 0.210536 +Converged at iteration 33, L1 7.07131e-05, Linf 0.00588914, total time[s] 0.187595 +Converged at iteration 30, L1 4.44219e-05, Linf 0.0030196, total time[s] 0.258298 +Converged at iteration 26, L1 8.3157e-05, Linf 0.00383766, total time[s] 0.171016 +Converged at iteration 34, L1 8.81395e-05, Linf 0.0201117, total time[s] 0.177815 +Converged at iteration 27, L1 5.7164e-05, Linf 0.00735912, total time[s] 0.199954 +Converged at iteration 26, L1 4.56736e-05, Linf 0.00246806, total time[s] 0.126163 +Converged at iteration 39, L1 9.80774e-05, Linf 0.00419203, total time[s] 0.179539 +Converged at iteration 35, L1 7.32632e-05, Linf 0.00328763, total time[s] 0.18305 +Converged at iteration 30, L1 9.37224e-05, Linf 0.00423518, total time[s] 0.141892 +Converged at iteration 31, L1 6.02426e-05, Linf 0.00496108, total time[s] 0.154065 +Converged at iteration 22, L1 8.40505e-05, Linf 0.00446709, total time[s] 0.119775 +Converged at iteration 27, L1 6.12478e-05, Linf 0.00495797, total time[s] 0.12375 +Converged at iteration 24, L1 8.66253e-05, Linf 0.00479353, total time[s] 0.137471 +Converged at iteration 20, L1 9.34908e-05, Linf 0.00395394, total time[s] 0.157076 +Converged at iteration 26, L1 7.71676e-05, Linf 0.00536055, total time[s] 0.15371 +Converged at iteration 28, L1 7.15016e-05, Linf 0.00439544, total time[s] 0.147662 +Converged at iteration 19, L1 6.18515e-05, Linf 0.00384773, total time[s] 0.087284 +Converged at iteration 22, L1 7.10648e-05, Linf 0.00506896, total time[s] 0.106242 +Converged at iteration 20, L1 7.92957e-05, Linf 0.00447797, total time[s] 0.097924 +Converged at iteration 30, L1 7.47338e-05, Linf 0.0031698, total time[s] 0.165126 +Converged at iteration 31, L1 8.31402e-05, Linf 0.0053885, total time[s] 0.17195 +Converged at iteration 24, L1 6.53789e-05, Linf 0.00455187, total time[s] 0.141808 +Converged at iteration 24, L1 8.2642e-05, Linf 0.00444846, total time[s] 0.126936 +Converged at iteration 27, L1 9.26856e-05, Linf 0.00545834, total time[s] 0.159004 +Converged at iteration 26, L1 6.79242e-05, Linf 0.0042593, total time[s] 0.150022 +Converged at iteration 23, L1 8.71856e-05, Linf 0.00393227, total time[s] 0.106432 +Converged at iteration 29, L1 7.33936e-05, Linf 0.00458546, total time[s] 0.133424 +Converged at iteration 33, L1 9.7983e-05, Linf 0.00481788, total time[s] 0.257247 +Converged at iteration 30, L1 8.99922e-05, Linf 0.00425831, total time[s] 0.142987 +Converged at iteration 28, L1 8.82755e-05, Linf 0.00299779, total time[s] 0.15235 +Converged at iteration 32, L1 8.97961e-05, Linf 0.00361214, total time[s] 0.178443 +Converged at iteration 37, L1 7.14866e-05, Linf 0.00319747, total time[s] 0.245768 +Converged at iteration 33, L1 8.28528e-05, Linf 0.0046157, total time[s] 0.160976 +Converged at iteration 28, L1 9.3186e-05, Linf 0.00419491, total time[s] 0.130174 +Converged at iteration 24, L1 8.25016e-05, Linf 0.00315268, total time[s] 0.188048 +Converged at iteration 26, L1 8.59343e-05, Linf 0.00372938, total time[s] 0.185253 +Converged at iteration 35, L1 9.56299e-05, Linf 0.00636877, total time[s] 0.161182 +Converged at iteration 39, L1 5.85809e-05, Linf 0.0067558, total time[s] 0.265574 +Converged at iteration 30, L1 9.22524e-05, Linf 0.00593171, total time[s] 0.138422 +Converged at iteration 24, L1 7.54823e-05, Linf 0.00443921, total time[s] 0.131255 +Converged at iteration 21, L1 7.74134e-05, Linf 0.00409757, total time[s] 0.113605 +Converged at iteration 24, L1 8.15947e-05, Linf 0.00560002, total time[s] 0.141962 +Converged at iteration 21, L1 3.53926e-05, Linf 0.00569443, total time[s] 0.154406 +Converged at iteration 19, L1 5.03475e-05, Linf 0.00464903, total time[s] 0.0929 +Converged at iteration 24, L1 6.09708e-05, Linf 0.00475574, total time[s] 0.134329 +Converged at iteration 23, L1 9.88106e-05, Linf 0.00626925, total time[s] 0.16416 +Converged at iteration 16, L1 8.92829e-05, Linf 0.00347308, total time[s] 0.09103 +Converged at iteration 20, L1 5.68793e-05, Linf 0.00530747, total time[s] 0.098274 +Converged at iteration 19, L1 9.35947e-05, Linf 0.00700141, total time[s] 0.090711 +Converged at iteration 31, L1 7.28482e-05, Linf 0.00274743, total time[s] 0.142229 +Converged at iteration 26, L1 5.45673e-05, Linf 0.00497236, total time[s] 0.121734 +Converged at iteration 23, L1 7.17846e-05, Linf 0.00687562, total time[s] 0.108491 +Converged at iteration 20, L1 5.5194e-05, Linf 0.00356682, total time[s] 0.096384 +Converged at iteration 23, L1 4.98982e-05, Linf 0.00334627, total time[s] 0.111687 +Converged at iteration 25, L1 8.51966e-05, Linf 0.00451682, total time[s] 0.124252 +Converged at iteration 22, L1 9.57445e-05, Linf 0.00486088, total time[s] 0.105032 +Converged at iteration 29, L1 6.54508e-05, Linf 0.00617529, total time[s] 0.134006 +Converged at iteration 28, L1 6.58443e-05, Linf 0.00333225, total time[s] 0.130231 +Converged at iteration 40, L1 6.82107e-05, Linf 0.00381355, total time[s] 0.116503 +Converged at iteration 35, L1 7.61001e-05, Linf 0.00339743, total time[s] 0.092203 +Converged at iteration 30, L1 9.64677e-05, Linf 0.00430101, total time[s] 0.084492 +Converged at iteration 31, L1 6.27409e-05, Linf 0.00502563, total time[s] 0.10267 +Converged at iteration 27, L1 6.25942e-05, Linf 0.00499524, total time[s] 0.086759 +Converged at iteration 22, L1 8.59502e-05, Linf 0.00449036, total time[s] 0.096841 +Converged at iteration 20, L1 9.60333e-05, Linf 0.00395746, total time[s] 0.117052 +Converged at iteration 24, L1 8.84114e-05, Linf 0.00480226, total time[s] 0.101323 +Converged at iteration 28, L1 7.40844e-05, Linf 0.0044487, total time[s] 0.08706 +Converged at iteration 26, L1 8.17396e-05, Linf 0.00546773, total time[s] 0.095523 +Converged at iteration 22, L1 7.4104e-05, Linf 0.00508718, total time[s] 0.067701 +Converged at iteration 19, L1 6.65465e-05, Linf 0.00393099, total time[s] 0.065766 +Converged at iteration 30, L1 8.00439e-05, Linf 0.00333226, total time[s] 0.09488 +Converged at iteration 20, L1 8.44297e-05, Linf 0.00455028, total time[s] 0.069916 +Converged at iteration 24, L1 7.17685e-05, Linf 0.00464509, total time[s] 0.143059 +Converged at iteration 31, L1 9.14839e-05, Linf 0.00569631, total time[s] 0.101586 +Converged at iteration 27, L1 9.91594e-05, Linf 0.00568011, total time[s] 0.135847 +Converged at iteration 24, L1 8.97886e-05, Linf 0.00826276, total time[s] 0.153411 +Converged at iteration 23, L1 9.24913e-05, Linf 0.00410197, total time[s] 0.182466 +Converged at iteration 26, L1 7.21976e-05, Linf 0.00446074, total time[s] 0.077884 +Converged at iteration 29, L1 7.82313e-05, Linf 0.00479592, total time[s] 0.119826 +Converged at iteration 34, L1 7.08506e-05, Linf 0.00422648, total time[s] 0.097327 +Converged at iteration 30, L1 9.39966e-05, Linf 0.00442544, total time[s] 0.109079 +Converged at iteration 28, L1 9.49833e-05, Linf 0.0031098, total time[s] 0.118593 +Converged at iteration 32, L1 9.39318e-05, Linf 0.0037409, total time[s] 0.094598 +Converged at iteration 37, L1 7.45797e-05, Linf 0.0032779, total time[s] 0.155568 +Converged at iteration 33, L1 8.45589e-05, Linf 0.00469817, total time[s] 0.096274 +Converged at iteration 28, L1 9.66984e-05, Linf 0.00430182, total time[s] 0.115447 +Converged at iteration 24, L1 8.83204e-05, Linf 0.00325069, total time[s] 0.132319 +Converged at iteration 26, L1 9.0876e-05, Linf 0.00381996, total time[s] 0.135545 +Converged at iteration 39, L1 6.25873e-05, Linf 0.00638076, total time[s] 0.122929 +Converged at iteration 35, L1 9.51186e-05, Linf 0.00591004, total time[s] 0.148023 +Converged at iteration 24, L1 8.89713e-05, Linf 0.00492856, total time[s] 0.090845 +Converged at iteration 30, L1 9.8873e-05, Linf 0.00611069, total time[s] 0.114941 +Converged at iteration 25, L1 6.6714e-05, Linf 0.00541796, total time[s] 0.079233 +Converged at iteration 20, L1 9.55936e-05, Linf 0.00401942, total time[s] 0.137368 +Converged at iteration 19, L1 5.7701e-05, Linf 0.00426747, total time[s] 0.144472 +Converged at iteration 20, L1 9.42471e-05, Linf 0.00666708, total time[s] 0.08083 +Converged at iteration 24, L1 6.48962e-05, Linf 0.0047242, total time[s] 0.124411 +Converged at iteration 24, L1 7.238e-05, Linf 0.0049349, total time[s] 0.120901 +Converged at iteration 20, L1 5.47608e-05, Linf 0.00503872, total time[s] 0.108644 +Converged at iteration 16, L1 9.55974e-05, Linf 0.0048573, total time[s] 0.057908 +Converged at iteration 31, L1 8.35301e-05, Linf 0.0028305, total time[s] 0.127536 +Converged at iteration 19, L1 9.92962e-05, Linf 0.00711751, total time[s] 0.083416 +Converged at iteration 23, L1 7.86911e-05, Linf 0.00696182, total time[s] 0.079974 +Converged at iteration 26, L1 7.18942e-05, Linf 0.00607997, total time[s] 0.074806 +Converged at iteration 23, L1 5.22097e-05, Linf 0.00567689, total time[s] 0.122233 +Converged at iteration 20, L1 7.07713e-05, Linf 0.00535818, total time[s] 0.100416 +Converged at iteration 23, L1 6.23618e-05, Linf 0.00333184, total time[s] 0.07667 +Converged at iteration 25, L1 9.11788e-05, Linf 0.00540832, total time[s] 0.108864 +Converged at iteration 28, L1 7.70053e-05, Linf 0.00559284, total time[s] 0.130131 +Converged at iteration 29, L1 7.07589e-05, Linf 0.00666515, total time[s] 0.14634 +Converged at iteration 27, L1 7.10067e-05, Linf 0.00416484, total time[s] 0.136122 +Converged at iteration 29, L1 6.57215e-05, Linf 0.00377649, total time[s] 0.160079 +Converged at iteration 29, L1 8.65927e-05, Linf 0.00296568, total time[s] 0.086471 +Converged at iteration 28, L1 7.56826e-05, Linf 0.00262732, total time[s] 0.074266 +Converged at iteration 32, L1 7.98447e-05, Linf 0.00659976, total time[s] 0.146063 +Converged at iteration 26, L1 8.62056e-05, Linf 0.002958, total time[s] 0.110849 +Converged at iteration 25, L1 6.93622e-05, Linf 0.00213013, total time[s] 0.082571 +Converged at iteration 23, L1 7.88473e-05, Linf 0.0033052, total time[s] 0.061452 +Converged at iteration 38, L1 7.22551e-05, Linf 0.0102374, total time[s] 0.128183 +Converged at iteration 35, L1 6.57531e-05, Linf 0.00863871, total time[s] 0.140757 +Converged at iteration 25, L1 4.29448e-05, Linf 0.00527426, total time[s] 0.074551 +Converged at iteration 30, L1 6.88972e-05, Linf 0.00592415, total time[s] 0.121786 +Converged at iteration 23, L1 9.27413e-05, Linf 0.00594857, total time[s] 0.081505 +Converged at iteration 22, L1 5.71629e-05, Linf 0.00469851, total time[s] 0.062228 +Converged at iteration 19, L1 7.64136e-05, Linf 0.00711778, total time[s] 0.074276 +Converged at iteration 21, L1 4.1105e-05, Linf 0.00422629, total time[s] 0.076159 +Converged at iteration 23, L1 5.55434e-05, Linf 0.0036114, total time[s] 0.099862 +Converged at iteration 22, L1 9.55697e-05, Linf 0.00635844, total time[s] 0.082357 +Converged at iteration 19, L1 8.25656e-05, Linf 0.00577791, total time[s] 0.070023 +Converged at iteration 17, L1 7.36916e-05, Linf 0.00202736, total time[s] 0.062443 +Converged at iteration 31, L1 5.96682e-05, Linf 0.00464181, total time[s] 0.157279 +Converged at iteration 19, L1 9.46782e-05, Linf 0.00625437, total time[s] 0.108352 +Converged at iteration 22, L1 9.77017e-05, Linf 0.00749958, total time[s] 0.115401 +Converged at iteration 25, L1 9.91654e-05, Linf 0.00560724, total time[s] 0.085673 +Converged at iteration 24, L1 6.85082e-05, Linf 0.00495746, total time[s] 0.115654 +Converged at iteration 21, L1 7.64932e-05, Linf 0.00229893, total time[s] 0.084689 +Converged at iteration 23, L1 6.6313e-05, Linf 0.00284448, total time[s] 0.14326 +Converged at iteration 25, L1 7.72388e-05, Linf 0.00319843, total time[s] 0.075971 +Converged at iteration 26, L1 9.65753e-05, Linf 0.00379438, total time[s] 0.101753 +Converged at iteration 29, L1 8.16221e-05, Linf 0.00661, total time[s] 0.095179 +Converged at iteration 28, L1 6.63901e-05, Linf 0.00257721, total time[s] 0.105203 +Converged at iteration 29, L1 8.61188e-05, Linf 0.00495708, total time[s] 0.109359 +Converged at iteration 29, L1 8.53577e-05, Linf 0.00229393, total time[s] 0.095369 +Converged at iteration 29, L1 4.73213e-05, Linf 0.00155363, total time[s] 0.094072 +Converged at iteration 32, L1 5.62005e-05, Linf 0.00809776, total time[s] 0.102772 +Converged at iteration 26, L1 7.9618e-05, Linf 0.00412615, total time[s] 0.124853 +Converged at iteration 25, L1 8.41893e-05, Linf 0.00337803, total time[s] 0.120491 +Converged at iteration 23, L1 8.73186e-05, Linf 0.00367285, total time[s] 0.132657 +Converged at iteration 37, L1 8.89167e-05, Linf 0.0159971, total time[s] 0.110712 +Converged at iteration 35, L1 3.94899e-05, Linf 0.0103058, total time[s] 0.159707 +Converged at iteration 25, L1 6.82581e-05, Linf 0.00926579, total time[s] 0.081697 +Converged at iteration 29, L1 6.28255e-05, Linf 0.00697278, total time[s] 0.083785 +Converged at iteration 23, L1 8.62257e-05, Linf 0.00607101, total time[s] 0.059559 +Converged at iteration 21, L1 9.74536e-05, Linf 0.00821036, total time[s] 0.054346 +Converged at iteration 20, L1 4.10804e-05, Linf 0.00736835, total time[s] 0.052222 +Converged at iteration 21, L1 7.60321e-05, Linf 0.00529006, total time[s] 0.058747 +Converged at iteration 23, L1 5.80888e-05, Linf 0.00367739, total time[s] 0.060045 +Converged at iteration 22, L1 5.79908e-05, Linf 0.00302653, total time[s] 0.058731 +Converged at iteration 20, L1 6.77318e-05, Linf 0.00243159, total time[s] 0.052445 +Converged at iteration 18, L1 8.08839e-05, Linf 0.00238006, total time[s] 0.04765 +Converged at iteration 40, L1 6.77628e-05, Linf 0.0036721, total time[s] 0.121431 +Converged at iteration 35, L1 7.61031e-05, Linf 0.00347335, total time[s] 0.109244 +Converged at iteration 30, L1 9.66244e-05, Linf 0.00432956, total time[s] 0.103473 +Converged at iteration 31, L1 6.19923e-05, Linf 0.00502562, total time[s] 0.095115 +Converged at iteration 27, L1 6.27211e-05, Linf 0.00499532, total time[s] 0.083922 +Converged at iteration 22, L1 8.59886e-05, Linf 0.00449024, total time[s] 0.065179 +Converged at iteration 20, L1 9.60153e-05, Linf 0.00397839, total time[s] 0.060626 +Converged at iteration 24, L1 8.84254e-05, Linf 0.00482845, total time[s] 0.064374 +Converged at iteration 28, L1 7.39289e-05, Linf 0.0044591, total time[s] 0.09719 +Converged at iteration 26, L1 8.11736e-05, Linf 0.00546752, total time[s] 0.076266 +Converged at iteration 22, L1 7.40861e-05, Linf 0.00508589, total time[s] 0.061595 +Converged at iteration 19, L1 6.63347e-05, Linf 0.00393096, total time[s] 0.076121 +Converged at iteration 30, L1 7.98665e-05, Linf 0.00329637, total time[s] 0.106467 +Converged at iteration 20, L1 8.44343e-05, Linf 0.00455035, total time[s] 0.063827 +Converged at iteration 24, L1 7.23197e-05, Linf 0.00621211, total time[s] 0.090764 +Converged at iteration 31, L1 9.00946e-05, Linf 0.00573773, total time[s] 0.103151 +Converged at iteration 27, L1 9.91626e-05, Linf 0.0056982, total time[s] 0.076112 +Converged at iteration 24, L1 8.79045e-05, Linf 0.00465012, total time[s] 0.088656 +Converged at iteration 23, L1 9.21983e-05, Linf 0.00410194, total time[s] 0.067129 +Converged at iteration 26, L1 7.22155e-05, Linf 0.00446076, total time[s] 0.10447 +Converged at iteration 29, L1 7.81524e-05, Linf 0.00479559, total time[s] 0.083763 +Converged at iteration 34, L1 7.09255e-05, Linf 0.00422699, total time[s] 0.094854 +Converged at iteration 30, L1 9.3942e-05, Linf 0.00442617, total time[s] 0.08063 +Converged at iteration 28, L1 9.49864e-05, Linf 0.00312523, total time[s] 0.157844 +Converged at iteration 32, L1 9.39946e-05, Linf 0.00376588, total time[s] 0.080424 +Converged at iteration 37, L1 7.36491e-05, Linf 0.00327476, total time[s] 0.089456 +Converged at iteration 33, L1 8.45059e-05, Linf 0.00469132, total time[s] 0.080749 +Converged at iteration 28, L1 9.6529e-05, Linf 0.00430378, total time[s] 0.069488 +Converged at iteration 24, L1 8.82926e-05, Linf 0.00325072, total time[s] 0.05993 +Converged at iteration 26, L1 8.99644e-05, Linf 0.00386287, total time[s] 0.064673 +Converged at iteration 38, L1 9.21847e-05, Linf 0.0175603, total time[s] 0.182155 +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.19186 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.146478 +Converged at iteration 30, L1 5.49574e-05, Linf 0.00759999, total time[s] 0.155264 +Converged at iteration 25, L1 6.29882e-05, Linf 0.00475444, total time[s] 0.118038 +Converged at iteration 23, L1 7.44314e-05, Linf 0.00681256, total time[s] 0.1167 +Converged at iteration 28, L1 9.26739e-05, Linf 0.0162405, total time[s] 0.136577 +Converged at iteration 25, L1 5.41463e-05, Linf 0.00674058, total time[s] 0.139503 +Converged at iteration 29, L1 7.33528e-05, Linf 0.00911797, total time[s] 0.154325 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.155754 +Converged at iteration 21, L1 7.24063e-05, Linf 0.00386858, total time[s] 0.113436 +Converged at iteration 26, L1 9.15716e-05, Linf 0.0102676, total time[s] 0.129757 +Converged at iteration 23, L1 6.26362e-05, Linf 0.00569336, total time[s] 0.137664 +Converged at iteration 35, L1 8.3711e-05, Linf 0.00775608, total time[s] 0.157209 +Converged at iteration 27, L1 6.48914e-05, Linf 0.00744385, total time[s] 0.139358 +Converged at iteration 32, L1 6.42487e-05, Linf 0.00580398, total time[s] 0.179843 +Converged at iteration 30, L1 7.41081e-05, Linf 0.0088476, total time[s] 0.142029 +Converged at iteration 29, L1 8.01748e-05, Linf 0.00450106, total time[s] 0.135241 +Converged at iteration 27, L1 8.6927e-05, Linf 0.00461716, total time[s] 0.131769 +Converged at iteration 28, L1 8.06e-05, Linf 0.00540233, total time[s] 0.202465 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.16893 +Converged at iteration 37, L1 9.1641e-05, Linf 0.00737832, total time[s] 0.182386 +Converged at iteration 35, L1 9.40656e-05, Linf 0.00568961, total time[s] 0.183051 +Converged at iteration 34, L1 4.57575e-05, Linf 0.00751586, total time[s] 0.194582 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.227957 +Converged at iteration 36, L1 7.20186e-05, Linf 0.00713034, total time[s] 0.164561 +Converged at iteration 37, L1 6.09595e-05, Linf 0.0156775, total time[s] 0.168579 +Converged at iteration 33, L1 4.86311e-05, Linf 0.00836183, total time[s] 0.2044 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.142556 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.210701 +Converged at iteration 40, L1 6.70243e-05, Linf 0.00371661, total time[s] 0.123091 +Converged at iteration 35, L1 7.60919e-05, Linf 0.00339915, total time[s] 0.100989 +Converged at iteration 30, L1 9.62383e-05, Linf 0.00432711, total time[s] 0.24605 +Converged at iteration 31, L1 6.22051e-05, Linf 0.00500251, total time[s] 0.08677 +Converged at iteration 27, L1 6.2593e-05, Linf 0.00499545, total time[s] 0.098894 +Converged at iteration 22, L1 8.58698e-05, Linf 0.00448843, total time[s] 0.074741 +Converged at iteration 20, L1 9.60415e-05, Linf 0.00397842, total time[s] 0.085706 +Converged at iteration 24, L1 8.84246e-05, Linf 0.00482767, total time[s] 0.096193 +Converged at iteration 28, L1 7.39268e-05, Linf 0.00445902, total time[s] 0.082847 +Converged at iteration 26, L1 8.11955e-05, Linf 0.0055489, total time[s] 0.148578 +Converged at iteration 22, L1 7.38689e-05, Linf 0.0050854, total time[s] 0.108483 +Converged at iteration 19, L1 6.63267e-05, Linf 0.003931, total time[s] 0.067534 +Converged at iteration 30, L1 7.98725e-05, Linf 0.00329634, total time[s] 0.099935 +Converged at iteration 20, L1 8.44245e-05, Linf 0.00455019, total time[s] 0.094565 +Converged at iteration 24, L1 7.10871e-05, Linf 0.00462902, total time[s] 0.099908 +Converged at iteration 31, L1 8.92316e-05, Linf 0.00569366, total time[s] 0.111747 +Converged at iteration 27, L1 9.915e-05, Linf 0.00569833, total time[s] 0.109582 +Converged at iteration 24, L1 8.79049e-05, Linf 0.00465011, total time[s] 0.071626 +Converged at iteration 24, L1 8.3772e-05, Linf 0.00315667, total time[s] 0.100112 +Converged at iteration 26, L1 7.22238e-05, Linf 0.00446033, total time[s] 0.076165 +Converged at iteration 29, L1 7.80867e-05, Linf 0.00479529, total time[s] 0.097854 +Converged at iteration 34, L1 7.07835e-05, Linf 0.00422664, total time[s] 0.113088 +Converged at iteration 30, L1 9.39176e-05, Linf 0.00441922, total time[s] 0.13109 +Converged at iteration 28, L1 9.49904e-05, Linf 0.00310996, total time[s] 0.109787 +Converged at iteration 32, L1 9.42126e-05, Linf 0.00374039, total time[s] 0.117227 +Converged at iteration 37, L1 7.33738e-05, Linf 0.00327838, total time[s] 0.119931 +Converged at iteration 33, L1 8.45408e-05, Linf 0.0046909, total time[s] 0.090711 +Converged at iteration 28, L1 9.66287e-05, Linf 0.00430165, total time[s] 0.083429 +Converged at iteration 24, L1 8.83362e-05, Linf 0.00325069, total time[s] 0.070405 +Converged at iteration 26, L1 9.01731e-05, Linf 0.00383975, total time[s] 0.099006 +Converged at iteration 39, L1 6.01629e-05, Linf 0.00638193, total time[s] 0.121227 +Converged at iteration 35, L1 9.49939e-05, Linf 0.00590904, total time[s] 0.136469 +Converged at iteration 24, L1 8.89868e-05, Linf 0.00492327, total time[s] 0.070829 +Converged at iteration 30, L1 9.79788e-05, Linf 0.00610593, total time[s] 0.161645 +Converged at iteration 25, L1 6.63164e-05, Linf 0.00547693, total time[s] 0.079089 +Converged at iteration 20, L1 9.54219e-05, Linf 0.00402054, total time[s] 0.056474 +Converged at iteration 19, L1 5.76357e-05, Linf 0.00426761, total time[s] 0.086795 +Converged at iteration 20, L1 9.43057e-05, Linf 0.00668558, total time[s] 0.062697 +Converged at iteration 24, L1 6.49761e-05, Linf 0.00472251, total time[s] 0.088608 +Converged at iteration 24, L1 7.10242e-05, Linf 0.00490268, total time[s] 0.114351 +Converged at iteration 20, L1 5.42786e-05, Linf 0.005037, total time[s] 0.074136 +Converged at iteration 16, L1 9.56541e-05, Linf 0.0048456, total time[s] 0.051539 +Converged at iteration 31, L1 8.35179e-05, Linf 0.00283212, total time[s] 0.15501 +Converged at iteration 19, L1 9.89666e-05, Linf 0.00711642, total time[s] 0.065158 +Converged at iteration 23, L1 7.83834e-05, Linf 0.00696171, total time[s] 0.096943 +Converged at iteration 26, L1 7.16651e-05, Linf 0.00606774, total time[s] 0.074137 +Converged at iteration 23, L1 5.22353e-05, Linf 0.00569477, total time[s] 0.092485 +Converged at iteration 20, L1 7.02105e-05, Linf 0.00536213, total time[s] 0.060131 +Converged at iteration 23, L1 6.24487e-05, Linf 0.00333331, total time[s] 0.070424 +Converged at iteration 25, L1 9.12779e-05, Linf 0.00540421, total time[s] 0.133377 +Converged at iteration 28, L1 7.73837e-05, Linf 0.00631991, total time[s] 0.116086 +Converged at iteration 29, L1 7.02393e-05, Linf 0.00666831, total time[s] 0.112357 +Converged at iteration 27, L1 7.01677e-05, Linf 0.00417341, total time[s] 0.119018 +Converged at iteration 29, L1 6.52154e-05, Linf 0.0037998, total time[s] 0.103184 +Converged at iteration 29, L1 8.60251e-05, Linf 0.00296597, total time[s] 0.116807 +Converged at iteration 28, L1 7.59563e-05, Linf 0.00262767, total time[s] 0.150765 +Converged at iteration 32, L1 7.94545e-05, Linf 0.00659628, total time[s] 0.165412 +Converged at iteration 26, L1 8.53106e-05, Linf 0.00299819, total time[s] 0.109915 +Converged at iteration 24, L1 9.96461e-05, Linf 0.00277465, total time[s] 0.098579 +Converged at iteration 23, L1 7.86641e-05, Linf 0.00328454, total time[s] 0.080111 +Converged at iteration 38, L1 7.19766e-05, Linf 0.0102225, total time[s] 0.136004 +Converged at iteration 35, L1 6.56769e-05, Linf 0.00864167, total time[s] 0.120805 +Converged at iteration 25, L1 4.29279e-05, Linf 0.00524603, total time[s] 0.09407 +Converged at iteration 30, L1 6.7938e-05, Linf 0.00591833, total time[s] 0.100813 +Converged at iteration 23, L1 9.23862e-05, Linf 0.00594343, total time[s] 0.130585 +Converged at iteration 22, L1 5.71916e-05, Linf 0.00469937, total time[s] 0.092196 +Converged at iteration 19, L1 7.64168e-05, Linf 0.00697784, total time[s] 0.051055 +Converged at iteration 21, L1 4.11334e-05, Linf 0.00425062, total time[s] 0.068989 +Converged at iteration 23, L1 5.55424e-05, Linf 0.00361135, total time[s] 0.091693 +Converged at iteration 22, L1 9.5567e-05, Linf 0.00631469, total time[s] 0.072517 +Converged at iteration 19, L1 8.25133e-05, Linf 0.00577639, total time[s] 0.091617 +Converged at iteration 17, L1 7.38784e-05, Linf 0.00203105, total time[s] 0.085832 +Converged at iteration 31, L1 6.08074e-05, Linf 0.00462833, total time[s] 0.179551 +Converged at iteration 19, L1 9.57609e-05, Linf 0.00602107, total time[s] 0.126775 +Converged at iteration 22, L1 9.76645e-05, Linf 0.00749426, total time[s] 0.148643 +Converged at iteration 25, L1 9.95009e-05, Linf 0.00559843, total time[s] 0.13294 +Converged at iteration 24, L1 6.77876e-05, Linf 0.00240364, total time[s] 0.151531 +Converged at iteration 21, L1 7.65547e-05, Linf 0.00229867, total time[s] 0.060591 +Converged at iteration 23, L1 6.63375e-05, Linf 0.00284515, total time[s] 0.103167 +Converged at iteration 25, L1 7.77631e-05, Linf 0.00319842, total time[s] 0.10407 +Converged at iteration 26, L1 9.73037e-05, Linf 0.00381791, total time[s] 0.100183 +Converged at iteration 29, L1 8.17075e-05, Linf 0.00660873, total time[s] 0.098682 +Converged at iteration 28, L1 6.63351e-05, Linf 0.00257707, total time[s] 0.119658 +Converged at iteration 29, L1 8.73661e-05, Linf 0.00495766, total time[s] 0.094358 +Converged at iteration 29, L1 8.57915e-05, Linf 0.00229408, total time[s] 0.13043 +Converged at iteration 29, L1 4.73492e-05, Linf 0.00154189, total time[s] 0.079913 +Converged at iteration 32, L1 5.62318e-05, Linf 0.00809345, total time[s] 0.097146 +Converged at iteration 26, L1 7.86281e-05, Linf 0.00412266, total time[s] 0.099468 +Converged at iteration 25, L1 8.35472e-05, Linf 0.00338121, total time[s] 0.088909 +Converged at iteration 23, L1 8.73069e-05, Linf 0.00367082, total time[s] 0.071433 +Converged at iteration 37, L1 8.90338e-05, Linf 0.0159936, total time[s] 0.102016 +Converged at iteration 35, L1 3.90197e-05, Linf 0.0103073, total time[s] 0.132816 +Converged at iteration 25, L1 6.82507e-05, Linf 0.00926712, total time[s] 0.080734 +Converged at iteration 29, L1 6.27583e-05, Linf 0.0069678, total time[s] 0.113263 +Converged at iteration 23, L1 8.61471e-05, Linf 0.00606451, total time[s] 0.078625 +Converged at iteration 21, L1 9.75101e-05, Linf 0.00821117, total time[s] 0.085361 +Converged at iteration 20, L1 4.11373e-05, Linf 0.00738425, total time[s] 0.062594 +Converged at iteration 21, L1 7.60274e-05, Linf 0.00529012, total time[s] 0.109212 +Converged at iteration 23, L1 5.80893e-05, Linf 0.00367769, total time[s] 0.076354 +Converged at iteration 22, L1 5.79616e-05, Linf 0.00302412, total time[s] 0.08462 +Converged at iteration 20, L1 6.77193e-05, Linf 0.00243141, total time[s] 0.071422 +Converged at iteration 18, L1 8.09336e-05, Linf 0.00238428, total time[s] 0.097297 +Converged at iteration 31, L1 6.46147e-05, Linf 0.00709598, total time[s] 0.098179 +Converged at iteration 19, L1 8.49197e-05, Linf 0.00532709, total time[s] 0.065611 +Converged at iteration 22, L1 7.88189e-05, Linf 0.00500064, total time[s] 0.06096 +Converged at iteration 26, L1 5.56311e-05, Linf 0.00474238, total time[s] 0.075057 +Converged at iteration 25, L1 7.94468e-05, Linf 0.00296312, total time[s] 0.088264 +Converged at iteration 22, L1 9.10571e-05, Linf 0.00324985, total time[s] 0.069102 +Converged at iteration 23, L1 6.87067e-05, Linf 0.00264968, total time[s] 0.065078 +Converged at iteration 24, L1 9.62444e-05, Linf 0.00371853, total time[s] 0.063318 +Converged at iteration 24, L1 9.46468e-05, Linf 0.00332171, total time[s] 0.069814 +Converged at iteration 31, L1 6.0253e-05, Linf 0.00363158, total time[s] 0.099585 +Converged at iteration 29, L1 7.26275e-05, Linf 0.00295576, total time[s] 0.107303 +Converged at iteration 30, L1 5.47038e-05, Linf 0.00539224, total time[s] 0.108642 +Converged at iteration 30, L1 5.8277e-05, Linf 0.00183702, total time[s] 0.139822 +Converged at iteration 31, L1 5.37462e-05, Linf 0.00277726, total time[s] 0.132285 +Converged at iteration 32, L1 4.63238e-05, Linf 0.0106781, total time[s] 0.106732 +Converged at iteration 24, L1 8.40787e-05, Linf 0.00554667, total time[s] 0.084714 +Converged at iteration 25, L1 8.20831e-05, Linf 0.00393725, total time[s] 0.109332 +Converged at iteration 24, L1 6.59242e-05, Linf 0.00275399, total time[s] 0.090738 +Converged at iteration 37, L1 5.35815e-05, Linf 0.0172108, total time[s] 0.100061 +Converged at iteration 35, L1 3.6639e-05, Linf 0.0130696, total time[s] 0.094747 +Converged at iteration 25, L1 7.16368e-05, Linf 0.010923, total time[s] 0.085234 +Converged at iteration 28, L1 6.95452e-05, Linf 0.0080854, total time[s] 0.101497 +Converged at iteration 24, L1 6.00107e-05, Linf 0.00585294, total time[s] 0.086845 +Converged at iteration 21, L1 8.5481e-05, Linf 0.00870492, total time[s] 0.069108 +Converged at iteration 20, L1 7.54321e-05, Linf 0.0116747, total time[s] 0.092753 +Converged at iteration 21, L1 9.2911e-05, Linf 0.00664952, total time[s] 0.065592 +Converged at iteration 23, L1 7.33039e-05, Linf 0.00350028, total time[s] 0.074719 +Converged at iteration 23, L1 8.19467e-05, Linf 0.00180531, total time[s] 0.084473 +Converged at iteration 21, L1 5.78466e-05, Linf 0.00208431, total time[s] 0.099522 +Converged at iteration 19, L1 5.96336e-05, Linf 0.00298093, total time[s] 0.068887 +Converged at iteration 31, L1 6.15514e-05, Linf 0.00898773, total time[s] 0.142784 +Converged at iteration 19, L1 8.17519e-05, Linf 0.00497614, total time[s] 0.150925 +Converged at iteration 22, L1 7.24055e-05, Linf 0.00475106, total time[s] 0.120578 +Converged at iteration 26, L1 5.42529e-05, Linf 0.0034243, total time[s] 0.098601 +Converged at iteration 26, L1 7.07362e-05, Linf 0.00263029, total time[s] 0.097127 +Converged at iteration 23, L1 7.10519e-05, Linf 0.00268916, total time[s] 0.08656 +Converged at iteration 23, L1 7.89369e-05, Linf 0.00254789, total time[s] 0.107497 +Converged at iteration 24, L1 7.48762e-05, Linf 0.00356214, total time[s] 0.163525 +Converged at iteration 22, L1 8.66032e-05, Linf 0.00143938, total time[s] 0.097569 +Converged at iteration 31, L1 8.8121e-05, Linf 0.0070506, total time[s] 0.161439 +Converged at iteration 29, L1 9.50629e-05, Linf 0.00356125, total time[s] 0.082657 +Converged at iteration 30, L1 6.71631e-05, Linf 0.00819013, total time[s] 0.136215 +Converged at iteration 30, L1 7.56657e-05, Linf 0.00277892, total time[s] 0.093226 +Converged at iteration 31, L1 9.71284e-05, Linf 0.00493604, total time[s] 0.103097 +Converged at iteration 32, L1 4.29544e-05, Linf 0.0141312, total time[s] 0.105509 +Converged at iteration 25, L1 8.78453e-05, Linf 0.00281298, total time[s] 0.10998 +Converged at iteration 25, L1 8.17761e-05, Linf 0.00423205, total time[s] 0.098132 +Converged at iteration 24, L1 9.5731e-05, Linf 0.00565744, total time[s] 0.101985 +Converged at iteration 37, L1 3.68427e-05, Linf 0.0168186, total time[s] 0.123778 +Converged at iteration 35, L1 4.8373e-05, Linf 0.0137354, total time[s] 0.147426 +Converged at iteration 25, L1 7.33124e-05, Linf 0.0102397, total time[s] 0.087494 +Converged at iteration 27, L1 9.32758e-05, Linf 0.00931387, total time[s] 0.113867 +Converged at iteration 24, L1 7.89681e-05, Linf 0.0070769, total time[s] 0.081837 +Converged at iteration 21, L1 5.63907e-05, Linf 0.00762224, total time[s] 0.075904 +Converged at iteration 21, L1 3.07377e-05, Linf 0.00713174, total time[s] 0.069121 +Converged at iteration 22, L1 3.708e-05, Linf 0.00369718, total time[s] 0.06412 +Converged at iteration 24, L1 4.75875e-05, Linf 0.0023377, total time[s] 0.069344 +Converged at iteration 24, L1 8.30014e-05, Linf 0.0125936, total time[s] 0.113817 +Converged at iteration 21, L1 8.6508e-05, Linf 0.00240112, total time[s] 0.072436 +Converged at iteration 19, L1 8.18947e-05, Linf 0.00424446, total time[s] 0.073439 +Converged at iteration 31, L1 6.72283e-05, Linf 0.0103079, total time[s] 0.141129 +Converged at iteration 19, L1 9.31581e-05, Linf 0.00497126, total time[s] 0.097859 +Converged at iteration 22, L1 7.12587e-05, Linf 0.00463176, total time[s] 0.089901 +Converged at iteration 26, L1 7.68699e-05, Linf 0.00350991, total time[s] 0.099593 +Converged at iteration 27, L1 5.47356e-05, Linf 0.00176977, total time[s] 0.105864 +Converged at iteration 23, L1 9.76513e-05, Linf 0.00325803, total time[s] 0.068321 +Converged at iteration 23, L1 8.50352e-05, Linf 0.00255873, total time[s] 0.06667 +Converged at iteration 24, L1 5.76123e-05, Linf 0.00290454, total time[s] 0.066375 +Converged at iteration 25, L1 8.734e-05, Linf 0.0036193, total time[s] 0.076829 +Converged at iteration 32, L1 5.45636e-05, Linf 0.00425646, total time[s] 0.128536 +Converged at iteration 30, L1 6.5827e-05, Linf 0.00265373, total time[s] 0.108531 +Converged at iteration 30, L1 8.96948e-05, Linf 0.0106082, total time[s] 0.135064 +Converged at iteration 30, L1 9.9131e-05, Linf 0.0047997, total time[s] 0.109571 +Converged at iteration 32, L1 5.41946e-05, Linf 0.00324097, total time[s] 0.12352 +Converged at iteration 32, L1 4.49738e-05, Linf 0.0177175, total time[s] 0.119895 +Converged at iteration 27, L1 6.56239e-05, Linf 0.00574862, total time[s] 0.114036 +Converged at iteration 25, L1 7.38237e-05, Linf 0.00372581, total time[s] 0.066183 +Converged at iteration 25, L1 7.26833e-05, Linf 0.00565651, total time[s] 0.0845 +Converged at iteration 37, L1 3.28124e-05, Linf 0.0170399, total time[s] 0.13844 +Converged at iteration 35, L1 5.87466e-05, Linf 0.0221045, total time[s] 0.220587 +Converged at iteration 25, L1 7.3327e-05, Linf 0.00934298, total time[s] 0.12096 +Converged at iteration 27, L1 6.86445e-05, Linf 0.00795893, total time[s] 0.095328 +Converged at iteration 24, L1 7.84104e-05, Linf 0.0181732, total time[s] 0.089275 +Converged at iteration 21, L1 5.95256e-05, Linf 0.00642674, total time[s] 0.105742 +Converged at iteration 21, L1 4.53092e-05, Linf 0.00972398, total time[s] 0.085897 +Converged at iteration 22, L1 5.99984e-05, Linf 0.00690466, total time[s] 0.079741 +Converged at iteration 24, L1 8.06719e-05, Linf 0.00525052, total time[s] 0.107761 +Converged at iteration 25, L1 7.08325e-05, Linf 0.00375284, total time[s] 0.112933 +Converged at iteration 22, L1 6.31206e-05, Linf 0.00230097, total time[s] 0.093867 +Converged at iteration 19, L1 9.5683e-05, Linf 0.00513993, total time[s] 0.058403 +Converged at iteration 31, L1 7.88218e-05, Linf 0.0081296, total time[s] 0.132967 +Converged at iteration 20, L1 5.89986e-05, Linf 0.00372751, total time[s] 0.073877 +Converged at iteration 22, L1 8.22347e-05, Linf 0.00502013, total time[s] 0.073755 +Converged at iteration 27, L1 7.52264e-05, Linf 0.00272413, total time[s] 0.099987 +Converged at iteration 27, L1 7.50903e-05, Linf 0.00250281, total time[s] 0.094398 +Converged at iteration 24, L1 6.32184e-05, Linf 0.00211599, total time[s] 0.132784 +Converged at iteration 23, L1 8.02054e-05, Linf 0.00282572, total time[s] 0.06829 +Converged at iteration 23, L1 7.75654e-05, Linf 0.0042196, total time[s] 0.098246 +Converged at iteration 26, L1 9.86487e-05, Linf 0.00534562, total time[s] 0.166805 +Converged at iteration 32, L1 7.68998e-05, Linf 0.00838278, total time[s] 0.111431 +Converged at iteration 30, L1 7.82727e-05, Linf 0.00271269, total time[s] 0.102465 +Converged at iteration 31, L1 5.00765e-05, Linf 0.00684972, total time[s] 0.151747 +Converged at iteration 31, L1 8.31396e-05, Linf 0.00524077, total time[s] 0.131492 +Converged at iteration 32, L1 7.7364e-05, Linf 0.00466349, total time[s] 0.121477 +Converged at iteration 32, L1 5.02904e-05, Linf 0.0209519, total time[s] 0.139197 +Converged at iteration 27, L1 8.1699e-05, Linf 0.00790129, total time[s] 0.111928 +Converged at iteration 25, L1 6.50807e-05, Linf 0.00365894, total time[s] 0.067454 +Converged at iteration 26, L1 5.25181e-05, Linf 0.00527462, total time[s] 0.118833 +Converged at iteration 37, L1 3.80638e-05, Linf 0.0198902, total time[s] 0.115343 +Converged at iteration 35, L1 6.85353e-05, Linf 0.0252956, total time[s] 0.136549 +Converged at iteration 25, L1 7.82696e-05, Linf 0.00943607, total time[s] 0.073833 +Converged at iteration 27, L1 5.04314e-05, Linf 0.00618493, total time[s] 0.088283 +Converged at iteration 23, L1 8.29017e-05, Linf 0.00496961, total time[s] 0.091767 +Converged at iteration 21, L1 5.46443e-05, Linf 0.00584957, total time[s] 0.054318 +Converged at iteration 21, L1 5.80295e-05, Linf 0.0112377, total time[s] 0.054662 +Converged at iteration 23, L1 4.53395e-05, Linf 0.00667477, total time[s] 0.059008 +Converged at iteration 25, L1 6.35234e-05, Linf 0.00654426, total time[s] 0.063517 +Converged at iteration 25, L1 8.97471e-05, Linf 0.00579118, total time[s] 0.063697 +Converged at iteration 22, L1 7.66126e-05, Linf 0.00326764, total time[s] 0.054631 +Converged at iteration 19, L1 9.90476e-05, Linf 0.00523553, total time[s] 0.04769 +Converged at iteration 31, L1 9.41933e-05, Linf 0.0100334, total time[s] 0.074959 +Converged at iteration 20, L1 7.30855e-05, Linf 0.00498255, total time[s] 0.049896 +Converged at iteration 23, L1 5.70764e-05, Linf 0.00413616, total time[s] 0.056944 +Converged at iteration 38, L1 9.21847e-05, Linf 0.0175603, total time[s] 0.201796 +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.199678 +Converged at iteration 30, L1 5.49574e-05, Linf 0.00759999, total time[s] 0.174606 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.18558 +Converged at iteration 23, L1 7.44314e-05, Linf 0.00681256, total time[s] 0.116084 +Converged at iteration 25, L1 6.299e-05, Linf 0.00475444, total time[s] 0.140782 +Converged at iteration 28, L1 9.26739e-05, Linf 0.0162405, total time[s] 0.183533 +Converged at iteration 25, L1 5.41453e-05, Linf 0.00674062, total time[s] 0.160055 +Converged at iteration 29, L1 7.33526e-05, Linf 0.00911765, total time[s] 0.183088 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.167799 +Converged at iteration 21, L1 7.24063e-05, Linf 0.00386858, total time[s] 0.109865 +Converged at iteration 26, L1 9.15717e-05, Linf 0.0102676, total time[s] 0.122389 +Converged at iteration 23, L1 6.26364e-05, Linf 0.00569336, total time[s] 0.119361 +Converged at iteration 35, L1 8.37137e-05, Linf 0.00775608, total time[s] 0.165717 +Converged at iteration 32, L1 6.42487e-05, Linf 0.005804, total time[s] 0.146073 +Converged at iteration 27, L1 6.48761e-05, Linf 0.00741463, total time[s] 0.128438 +Converged at iteration 30, L1 7.41106e-05, Linf 0.00884236, total time[s] 0.139088 +Converged at iteration 29, L1 8.01747e-05, Linf 0.00450107, total time[s] 0.14543 +Converged at iteration 28, L1 8.06009e-05, Linf 0.0054018, total time[s] 0.163706 +Converged at iteration 27, L1 8.69268e-05, Linf 0.00461716, total time[s] 0.127493 +Converged at iteration 37, L1 9.1641e-05, Linf 0.00737833, total time[s] 0.169843 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.156785 +Converged at iteration 34, L1 4.57606e-05, Linf 0.00751589, total time[s] 0.157483 +Converged at iteration 35, L1 9.40645e-05, Linf 0.00568962, total time[s] 0.16047 +Converged at iteration 36, L1 7.20186e-05, Linf 0.00713034, total time[s] 0.166576 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.150728 +Converged at iteration 33, L1 4.86312e-05, Linf 0.00836183, total time[s] 0.154491 +Converged at iteration 37, L1 6.09595e-05, Linf 0.0156775, total time[s] 0.164304 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.144287 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.107183 +Converged at iteration 38, L1 9.21847e-05, Linf 0.0175603, total time[s] 0.170005 +Converged at iteration 41, L1 7.42432e-05, Linf 0.0183869, total time[s] 0.190288 +Converged at iteration 30, L1 5.49574e-05, Linf 0.00759999, total time[s] 0.137166 +Converged at iteration 33, L1 7.20087e-05, Linf 0.0072676, total time[s] 0.245813 +Converged at iteration 23, L1 7.44313e-05, Linf 0.00681256, total time[s] 0.110185 +Converged at iteration 25, L1 6.29886e-05, Linf 0.00475444, total time[s] 0.145499 +Converged at iteration 28, L1 9.26757e-05, Linf 0.0162408, total time[s] 0.215901 +Converged at iteration 25, L1 5.41463e-05, Linf 0.00674058, total time[s] 0.143627 +Converged at iteration 29, L1 7.33526e-05, Linf 0.00911761, total time[s] 0.143892 +Converged at iteration 21, L1 7.2407e-05, Linf 0.00386845, total time[s] 0.098361 +Converged at iteration 29, L1 7.1909e-05, Linf 0.0041999, total time[s] 0.143318 +Converged at iteration 26, L1 9.15716e-05, Linf 0.0102676, total time[s] 0.137604 +Converged at iteration 23, L1 6.27156e-05, Linf 0.00599132, total time[s] 0.113652 +Converged at iteration 35, L1 8.3717e-05, Linf 0.00775608, total time[s] 0.178681 +Converged at iteration 32, L1 6.42488e-05, Linf 0.00580398, total time[s] 0.201728 +Converged at iteration 27, L1 6.48865e-05, Linf 0.00743169, total time[s] 0.133572 +Converged at iteration 30, L1 7.41106e-05, Linf 0.00884236, total time[s] 0.180067 +Converged at iteration 29, L1 8.01747e-05, Linf 0.00450107, total time[s] 0.153162 +Converged at iteration 28, L1 8.06032e-05, Linf 0.00540179, total time[s] 0.157025 +Converged at iteration 27, L1 8.6927e-05, Linf 0.00461716, total time[s] 0.153978 +Converged at iteration 37, L1 9.16478e-05, Linf 0.00741963, total time[s] 0.187882 +Converged at iteration 34, L1 6.56961e-05, Linf 0.00580949, total time[s] 0.158475 +Converged at iteration 34, L1 4.57573e-05, Linf 0.00751585, total time[s] 0.157876 +Converged at iteration 35, L1 9.40656e-05, Linf 0.00568962, total time[s] 0.177646 +Converged at iteration 36, L1 7.20186e-05, Linf 0.00713034, total time[s] 0.196344 +Converged at iteration 34, L1 5.3822e-05, Linf 0.00595232, total time[s] 0.232811 +Converged at iteration 33, L1 4.86312e-05, Linf 0.00836183, total time[s] 0.178658 +Converged at iteration 37, L1 6.09595e-05, Linf 0.0156775, total time[s] 0.212461 +Converged at iteration 31, L1 8.20304e-05, Linf 0.0103058, total time[s] 0.171025 +Converged at iteration 29, L1 9.69467e-05, Linf 0.0123414, total time[s] 0.13192 +Converged at iteration 40, L1 6.7935e-05, Linf 0.00367452, total time[s] 0.134952 +Converged at iteration 35, L1 7.64878e-05, Linf 0.00339579, total time[s] 0.094371 +Converged at iteration 30, L1 9.67458e-05, Linf 0.00432823, total time[s] 0.082446 +Converged at iteration 31, L1 6.20154e-05, Linf 0.00502563, total time[s] 0.085167 +Converged at iteration 27, L1 6.36241e-05, Linf 0.00499529, total time[s] 0.077497 +Converged at iteration 22, L1 8.58454e-05, Linf 0.00444492, total time[s] 0.095841 +Converged at iteration 20, L1 9.59996e-05, Linf 0.0039782, total time[s] 0.08833 +Converged at iteration 24, L1 8.84983e-05, Linf 0.00482795, total time[s] 0.08107 +Converged at iteration 28, L1 7.39236e-05, Linf 0.0044591, total time[s] 0.071588 +Converged at iteration 26, L1 8.11739e-05, Linf 0.00546755, total time[s] 0.067669 +Converged at iteration 22, L1 7.3956e-05, Linf 0.00508661, total time[s] 0.058437 +Converged at iteration 19, L1 6.63287e-05, Linf 0.00393092, total time[s] 0.051497 +Converged at iteration 30, L1 8.01624e-05, Linf 0.00330345, total time[s] 0.092013 +Converged at iteration 20, L1 8.43474e-05, Linf 0.00455073, total time[s] 0.098574 +Converged at iteration 24, L1 7.10875e-05, Linf 0.00463331, total time[s] 0.07178 +Converged at iteration 31, L1 8.95397e-05, Linf 0.00569133, total time[s] 0.081142 +Converged at iteration 27, L1 9.91665e-05, Linf 0.00569826, total time[s] 0.069306 +Converged at iteration 24, L1 8.79223e-05, Linf 0.00465082, total time[s] 0.068887 +Converged at iteration 23, L1 9.21865e-05, Linf 0.0041019, total time[s] 0.059478 +Converged at iteration 26, L1 7.22343e-05, Linf 0.0044612, total time[s] 0.066374 +Converged at iteration 29, L1 7.8161e-05, Linf 0.00479606, total time[s] 0.074118 +Converged at iteration 34, L1 7.09676e-05, Linf 0.00422719, total time[s] 0.111638 +Converged at iteration 30, L1 9.39654e-05, Linf 0.00442562, total time[s] 0.12044 +Converged at iteration 28, L1 9.51746e-05, Linf 0.00311002, total time[s] 0.091355 +Converged at iteration 32, L1 9.39331e-05, Linf 0.00374081, total time[s] 0.096487 +Converged at iteration 37, L1 7.33857e-05, Linf 0.00327813, total time[s] 0.097066 +Converged at iteration 33, L1 8.44797e-05, Linf 0.00469103, total time[s] 0.084982 +Converged at iteration 28, L1 9.65489e-05, Linf 0.00430184, total time[s] 0.079333 +Converged at iteration 24, L1 8.8336e-05, Linf 0.00325079, total time[s] 0.095997 +Converged at iteration 26, L1 8.98032e-05, Linf 0.00381986, total time[s] 0.10318 +Converged at iteration 41, L1 8.17906e-05, Linf 0.0184755, total time[s] 0.113593 +Converged at iteration 39, L1 3.97285e-05, Linf 0.0104374, total time[s] 0.119492 +Converged at iteration 33, L1 7.68236e-05, Linf 0.00779997, total time[s] 0.127388 +Converged at iteration 30, L1 6.34722e-05, Linf 0.00813607, total time[s] 0.104509 +Converged at iteration 25, L1 6.04095e-05, Linf 0.00476718, total time[s] 0.130229 +Converged at iteration 23, L1 7.41144e-05, Linf 0.00686045, total time[s] 0.122009 +Converged at iteration 25, L1 5.55404e-05, Linf 0.00693651, total time[s] 0.10734 +Converged at iteration 28, L1 9.63446e-05, Linf 0.0165904, total time[s] 0.101648 +Converged at iteration 29, L1 8.45537e-05, Linf 0.00474117, total time[s] 0.124654 +Converged at iteration 29, L1 7.09941e-05, Linf 0.00881791, total time[s] 0.101169 +Converged at iteration 26, L1 9.72065e-05, Linf 0.0102485, total time[s] 0.09588 +Converged at iteration 21, L1 7.19449e-05, Linf 0.00386695, total time[s] 0.060364 +Converged at iteration 35, L1 9.36727e-05, Linf 0.0086044, total time[s] 0.119323 +Converged at iteration 23, L1 6.21737e-05, Linf 0.00566546, total time[s] 0.092079 +Converged at iteration 27, L1 6.30542e-05, Linf 0.00621734, total time[s] 0.123124 +Converged at iteration 32, L1 6.81354e-05, Linf 0.0061266, total time[s] 0.107487 +Converged at iteration 29, L1 7.94022e-05, Linf 0.00429911, total time[s] 0.0912 +Converged at iteration 30, L1 7.56018e-05, Linf 0.009374, total time[s] 0.085439 +Converged at iteration 27, L1 9.22808e-05, Linf 0.00517026, total time[s] 0.095509 +Converged at iteration 28, L1 8.01418e-05, Linf 0.00540946, total time[s] 0.07889 +Converged at iteration 34, L1 7.28396e-05, Linf 0.00623089, total time[s] 0.094702 +Converged at iteration 37, L1 8.74981e-05, Linf 0.00737896, total time[s] 0.149381 +Converged at iteration 35, L1 9.24733e-05, Linf 0.0215687, total time[s] 0.132163 +Converged at iteration 34, L1 5.20771e-05, Linf 0.00780141, total time[s] 0.096415 +Converged at iteration 34, L1 5.67923e-05, Linf 0.00562505, total time[s] 0.125756 +Converged at iteration 36, L1 7.91786e-05, Linf 0.0072769, total time[s] 0.10129 +Converged at iteration 37, L1 6.38368e-05, Linf 0.015987, total time[s] 0.145575 +Converged at iteration 33, L1 5.76711e-05, Linf 0.00852976, total time[s] 0.105334 +Converged at iteration 30, L1 4.6981e-05, Linf 0.0078333, total time[s] 0.110777 +Converged at iteration 31, L1 8.67568e-05, Linf 0.0106345, total time[s] 0.11256 +Converged at iteration 40, L1 6.71394e-05, Linf 0.00367472, total time[s] 0.118699 +Converged at iteration 35, L1 7.60946e-05, Linf 0.00339712, total time[s] 0.096582 +Converged at iteration 30, L1 9.64091e-05, Linf 0.00432939, total time[s] 0.104715 +Converged at iteration 31, L1 6.23714e-05, Linf 0.00502563, total time[s] 0.088589 +Converged at iteration 27, L1 6.28194e-05, Linf 0.00499695, total time[s] 0.079394 +Converged at iteration 22, L1 8.58691e-05, Linf 0.00448835, total time[s] 0.06079 +Converged at iteration 20, L1 9.61444e-05, Linf 0.00397892, total time[s] 0.083564 +Converged at iteration 24, L1 8.84441e-05, Linf 0.00482826, total time[s] 0.064643 +Converged at iteration 28, L1 7.38326e-05, Linf 0.00445905, total time[s] 0.080874 +Converged at iteration 26, L1 8.1181e-05, Linf 0.00548226, total time[s] 0.072124 +Converged at iteration 22, L1 7.39266e-05, Linf 0.00508686, total time[s] 0.07842 +Converged at iteration 19, L1 6.63293e-05, Linf 0.00393099, total time[s] 0.070618 +Converged at iteration 30, L1 7.98872e-05, Linf 0.00329686, total time[s] 0.099109 +Converged at iteration 20, L1 8.44283e-05, Linf 0.00455628, total time[s] 0.056467 +Converged at iteration 24, L1 7.10862e-05, Linf 0.00463288, total time[s] 0.091563 +Converged at iteration 31, L1 8.9382e-05, Linf 0.00569224, total time[s] 0.113812 +Converged at iteration 27, L1 9.91901e-05, Linf 0.0056983, total time[s] 0.075612 +Converged at iteration 24, L1 8.79143e-05, Linf 0.00465021, total time[s] 0.11751 +Converged at iteration 23, L1 9.21853e-05, Linf 0.00410192, total time[s] 0.078771 +Converged at iteration 26, L1 7.21599e-05, Linf 0.00445957, total time[s] 0.107417 +Converged at iteration 29, L1 7.81635e-05, Linf 0.00479606, total time[s] 0.101435 +Converged at iteration 34, L1 7.09358e-05, Linf 0.00422668, total time[s] 0.122989 +Converged at iteration 30, L1 9.68425e-05, Linf 0.00442672, total time[s] 0.107163 +Converged at iteration 28, L1 9.49847e-05, Linf 0.00311274, total time[s] 0.076207 +Converged at iteration 32, L1 9.47772e-05, Linf 0.0037653, total time[s] 0.104547 +Converged at iteration 37, L1 7.34239e-05, Linf 0.00328238, total time[s] 0.133131 +Converged at iteration 33, L1 8.45185e-05, Linf 0.00469111, total time[s] 0.090253 +Converged at iteration 28, L1 9.66137e-05, Linf 0.00430191, total time[s] 0.087304 +Converged at iteration 24, L1 8.82879e-05, Linf 0.00325077, total time[s] 0.088864 +Converged at iteration 26, L1 8.99449e-05, Linf 0.00383972, total time[s] 0.087629 +Converged at iteration 39, L1 6.05074e-05, Linf 0.00638132, total time[s] 0.107146 +Converged at iteration 35, L1 9.48512e-05, Linf 0.00590628, total time[s] 0.10466 +Converged at iteration 24, L1 8.92818e-05, Linf 0.00490699, total time[s] 0.065221 +Converged at iteration 30, L1 9.77805e-05, Linf 0.00610883, total time[s] 0.08117 +Converged at iteration 25, L1 6.63479e-05, Linf 0.00548651, total time[s] 0.11505 +Converged at iteration 20, L1 9.57678e-05, Linf 0.0040137, total time[s] 0.081875 +Converged at iteration 19, L1 5.80843e-05, Linf 0.00427057, total time[s] 0.086442 +Converged at iteration 20, L1 9.45266e-05, Linf 0.0067124, total time[s] 0.089147 +Converged at iteration 24, L1 6.52393e-05, Linf 0.00471399, total time[s] 0.118761 +Converged at iteration 24, L1 7.09971e-05, Linf 0.00490433, total time[s] 0.077259 +Converged at iteration 20, L1 5.45116e-05, Linf 0.00504449, total time[s] 0.054962 +Converged at iteration 16, L1 9.55257e-05, Linf 0.00487801, total time[s] 0.04534 +Converged at iteration 31, L1 8.32424e-05, Linf 0.00282817, total time[s] 0.131277 +Converged at iteration 19, L1 9.90191e-05, Linf 0.00712735, total time[s] 0.088104 +Converged at iteration 23, L1 7.84575e-05, Linf 0.00696207, total time[s] 0.092445 +Converged at iteration 26, L1 7.17194e-05, Linf 0.00607061, total time[s] 0.090944 +Converged at iteration 23, L1 5.21706e-05, Linf 0.00567921, total time[s] 0.122702 +Converged at iteration 20, L1 7.02072e-05, Linf 0.00535039, total time[s] 0.070889 +Converged at iteration 23, L1 6.33317e-05, Linf 0.00386286, total time[s] 0.11934 +Converged at iteration 25, L1 9.09224e-05, Linf 0.00540705, total time[s] 0.076233 +Converged at iteration 28, L1 7.59925e-05, Linf 0.00382357, total time[s] 0.113522 +Converged at iteration 29, L1 7.02336e-05, Linf 0.00666779, total time[s] 0.136995 +Converged at iteration 27, L1 6.99986e-05, Linf 0.00416127, total time[s] 0.117235 +Converged at iteration 29, L1 6.52852e-05, Linf 0.00376515, total time[s] 0.130051 +Converged at iteration 29, L1 8.64599e-05, Linf 0.00296306, total time[s] 0.108181 +Converged at iteration 28, L1 7.56468e-05, Linf 0.00262264, total time[s] 0.078648 +Converged at iteration 32, L1 7.93903e-05, Linf 0.00659956, total time[s] 0.14786 +Converged at iteration 26, L1 8.532e-05, Linf 0.00297002, total time[s] 0.096644 +Converged at iteration 24, L1 9.94095e-05, Linf 0.00276892, total time[s] 0.100317 +Converged at iteration 23, L1 7.84743e-05, Linf 0.00329549, total time[s] 0.067858 +Converged at iteration 38, L1 7.1906e-05, Linf 0.0102236, total time[s] 0.110352 +Converged at iteration 35, L1 6.56845e-05, Linf 0.00855411, total time[s] 0.104123 +Converged at iteration 25, L1 4.29669e-05, Linf 0.00532723, total time[s] 0.095224 +Converged at iteration 30, L1 6.78186e-05, Linf 0.00591782, total time[s] 0.087923 +Converged at iteration 23, L1 9.26157e-05, Linf 0.00596327, total time[s] 0.06973 +Converged at iteration 22, L1 5.79387e-05, Linf 0.0046894, total time[s] 0.080152 +Converged at iteration 19, L1 7.62869e-05, Linf 0.00693007, total time[s] 0.08402 +Converged at iteration 21, L1 4.11836e-05, Linf 0.00425326, total time[s] 0.073179 +Converged at iteration 23, L1 5.58921e-05, Linf 0.00362109, total time[s] 0.107023 +Converged at iteration 22, L1 9.54438e-05, Linf 0.00635793, total time[s] 0.096579 +Converged at iteration 19, L1 8.29267e-05, Linf 0.00579375, total time[s] 0.068118 +Converged at iteration 17, L1 7.34807e-05, Linf 0.00202393, total time[s] 0.094136 +Converged at iteration 31, L1 5.94903e-05, Linf 0.00461872, total time[s] 0.127776 +Converged at iteration 19, L1 9.46588e-05, Linf 0.00619467, total time[s] 0.058337 +Converged at iteration 22, L1 9.86506e-05, Linf 0.00751002, total time[s] 0.095782 +Converged at iteration 25, L1 9.93701e-05, Linf 0.00560976, total time[s] 0.118377 +Converged at iteration 24, L1 6.77434e-05, Linf 0.00240384, total time[s] 0.077616 +Converged at iteration 21, L1 7.62049e-05, Linf 0.00228887, total time[s] 0.073807 +Converged at iteration 23, L1 6.66272e-05, Linf 0.00284552, total time[s] 0.062254 +Converged at iteration 25, L1 7.77096e-05, Linf 0.00320328, total time[s] 0.069647 +Converged at iteration 26, L1 9.7966e-05, Linf 0.00508877, total time[s] 0.089124 +Converged at iteration 29, L1 8.36407e-05, Linf 0.00801189, total time[s] 0.08303 +Converged at iteration 28, L1 6.65205e-05, Linf 0.00257763, total time[s] 0.089001 +Converged at iteration 29, L1 8.57754e-05, Linf 0.00493374, total time[s] 0.084695 +Converged at iteration 29, L1 8.46988e-05, Linf 0.00229095, total time[s] 0.089234 +Converged at iteration 28, L1 9.99196e-05, Linf 0.00259998, total time[s] 0.091367 +Converged at iteration 32, L1 5.64326e-05, Linf 0.0080118, total time[s] 0.12467 +Converged at iteration 26, L1 7.86023e-05, Linf 0.00412831, total time[s] 0.069309 +Converged at iteration 25, L1 8.32997e-05, Linf 0.0033763, total time[s] 0.074673 +Converged at iteration 23, L1 8.75664e-05, Linf 0.00366924, total time[s] 0.064543 +Converged at iteration 37, L1 8.9569e-05, Linf 0.0159879, total time[s] 0.13095 +Converged at iteration 35, L1 3.90997e-05, Linf 0.0102983, total time[s] 0.10236 +Converged at iteration 25, L1 6.83759e-05, Linf 0.00937899, total time[s] 0.078658 +Converged at iteration 29, L1 6.27101e-05, Linf 0.00696422, total time[s] 0.078721 +Converged at iteration 23, L1 8.64694e-05, Linf 0.0061001, total time[s] 0.0764 +Converged at iteration 21, L1 9.73966e-05, Linf 0.00819948, total time[s] 0.065382 +Converged at iteration 20, L1 4.10742e-05, Linf 0.00736242, total time[s] 0.06653 +Converged at iteration 21, L1 7.64526e-05, Linf 0.00530621, total time[s] 0.092448 +Converged at iteration 23, L1 5.82817e-05, Linf 0.00369251, total time[s] 0.079108 +Converged at iteration 22, L1 5.77732e-05, Linf 0.00302418, total time[s] 0.066685 +Converged at iteration 20, L1 6.77659e-05, Linf 0.00243607, total time[s] 0.073824 +Converged at iteration 18, L1 8.05391e-05, Linf 0.00235888, total time[s] 0.04902 +Converged at iteration 31, L1 6.41079e-05, Linf 0.00705235, total time[s] 0.116171 +Converged at iteration 19, L1 8.51492e-05, Linf 0.00540969, total time[s] 0.087765 +Converged at iteration 22, L1 7.91203e-05, Linf 0.00500677, total time[s] 0.098993 +Converged at iteration 26, L1 5.57998e-05, Linf 0.00475867, total time[s] 0.094599 +Converged at iteration 25, L1 7.94127e-05, Linf 0.00296066, total time[s] 0.069757 +Converged at iteration 22, L1 9.11087e-05, Linf 0.00323632, total time[s] 0.066613 +Converged at iteration 23, L1 6.89095e-05, Linf 0.0026503, total time[s] 0.059645 +Converged at iteration 24, L1 9.62052e-05, Linf 0.00371766, total time[s] 0.070149 +Converged at iteration 24, L1 9.50911e-05, Linf 0.00332151, total time[s] 0.106483 +Converged at iteration 31, L1 6.02033e-05, Linf 0.00363649, total time[s] 0.092319 +Converged at iteration 29, L1 7.25804e-05, Linf 0.00295194, total time[s] 0.080767 +Converged at iteration 30, L1 5.44304e-05, Linf 0.00533316, total time[s] 0.081323 +Converged at iteration 30, L1 5.85473e-05, Linf 0.00183589, total time[s] 0.093776 +Converged at iteration 31, L1 5.39082e-05, Linf 0.00278041, total time[s] 0.13461 +Converged at iteration 32, L1 4.64847e-05, Linf 0.0106737, total time[s] 0.130952 +Converged at iteration 24, L1 8.91965e-05, Linf 0.00559048, total time[s] 0.069735 +Converged at iteration 25, L1 8.28265e-05, Linf 0.0040277, total time[s] 0.105647 +Converged at iteration 24, L1 6.72414e-05, Linf 0.0027624, total time[s] 0.102801 +Converged at iteration 37, L1 5.36788e-05, Linf 0.0172113, total time[s] 0.100035 +Converged at iteration 35, L1 3.66252e-05, Linf 0.0133581, total time[s] 0.124053 +Converged at iteration 25, L1 7.18722e-05, Linf 0.0108129, total time[s] 0.106138 +Converged at iteration 28, L1 6.90572e-05, Linf 0.00793334, total time[s] 0.089855 +Converged at iteration 24, L1 6.01287e-05, Linf 0.00588518, total time[s] 0.085246 +Converged at iteration 21, L1 7.77052e-05, Linf 0.00869432, total time[s] 0.055382 +Converged at iteration 20, L1 7.56882e-05, Linf 0.011667, total time[s] 0.082891 +Converged at iteration 21, L1 9.34193e-05, Linf 0.00668687, total time[s] 0.091816 +Converged at iteration 23, L1 7.37914e-05, Linf 0.00350074, total time[s] 0.062051 +Converged at iteration 23, L1 8.20321e-05, Linf 0.00179794, total time[s] 0.07675 +Converged at iteration 21, L1 5.78729e-05, Linf 0.00209043, total time[s] 0.066908 +Converged at iteration 19, L1 5.98049e-05, Linf 0.00296415, total time[s] 0.069754 +Converged at iteration 31, L1 6.09816e-05, Linf 0.00891079, total time[s] 0.099492 +Converged at iteration 19, L1 8.12465e-05, Linf 0.00497651, total time[s] 0.089807 +Converged at iteration 22, L1 7.21048e-05, Linf 0.00475806, total time[s] 0.081629 +Converged at iteration 26, L1 5.42046e-05, Linf 0.00345318, total time[s] 0.066122 +Converged at iteration 26, L1 7.05727e-05, Linf 0.002628, total time[s] 0.078453 +Converged at iteration 23, L1 7.00011e-05, Linf 0.0026796, total time[s] 0.075922 +Converged at iteration 23, L1 7.8335e-05, Linf 0.00254784, total time[s] 0.110529 +Converged at iteration 24, L1 7.43404e-05, Linf 0.00352778, total time[s] 0.115197 +Converged at iteration 22, L1 8.64213e-05, Linf 0.00143762, total time[s] 0.058786 +Converged at iteration 31, L1 8.76647e-05, Linf 0.00669597, total time[s] 0.124831 +Converged at iteration 29, L1 9.52616e-05, Linf 0.00355824, total time[s] 0.134147 +Converged at iteration 30, L1 6.67544e-05, Linf 0.0081352, total time[s] 0.110625 +Converged at iteration 30, L1 7.55309e-05, Linf 0.00275854, total time[s] 0.10081 +Converged at iteration 31, L1 9.74568e-05, Linf 0.00494389, total time[s] 0.100269 +Converged at iteration 32, L1 4.30255e-05, Linf 0.0138476, total time[s] 0.089878 +Converged at iteration 25, L1 8.42666e-05, Linf 0.00274206, total time[s] 0.072848 +Converged at iteration 25, L1 8.23451e-05, Linf 0.00422843, total time[s] 0.116346 +Converged at iteration 24, L1 9.5194e-05, Linf 0.00563699, total time[s] 0.090426 +Converged at iteration 37, L1 3.69045e-05, Linf 0.0168775, total time[s] 0.102553 +Converged at iteration 35, L1 4.85428e-05, Linf 0.0137656, total time[s] 0.103085 +Converged at iteration 25, L1 7.34932e-05, Linf 0.0103282, total time[s] 0.110148 +Converged at iteration 27, L1 9.34996e-05, Linf 0.00931852, total time[s] 0.091865 +Converged at iteration 24, L1 7.91491e-05, Linf 0.00712129, total time[s] 0.081259 +Converged at iteration 21, L1 5.66841e-05, Linf 0.00762333, total time[s] 0.080099 +Converged at iteration 21, L1 3.11014e-05, Linf 0.00722501, total time[s] 0.076905 +Converged at iteration 22, L1 3.72425e-05, Linf 0.00369899, total time[s] 0.071782 +Converged at iteration 24, L1 4.84177e-05, Linf 0.00233845, total time[s] 0.138116 +Converged at iteration 24, L1 8.02563e-05, Linf 0.00337463, total time[s] 0.090579 +Converged at iteration 21, L1 8.65173e-05, Linf 0.00241441, total time[s] 0.063156 +Converged at iteration 19, L1 8.20011e-05, Linf 0.00422654, total time[s] 0.073051 +Converged at iteration 31, L1 6.53168e-05, Linf 0.0100905, total time[s] 0.093528 +Converged at iteration 19, L1 9.25553e-05, Linf 0.00496663, total time[s] 0.059109 +Converged at iteration 22, L1 7.15394e-05, Linf 0.00467393, total time[s] 0.116697 +Converged at iteration 26, L1 7.68819e-05, Linf 0.00352165, total time[s] 0.0992 +Converged at iteration 27, L1 5.32453e-05, Linf 0.00177061, total time[s] 0.08256 +Converged at iteration 23, L1 9.75172e-05, Linf 0.00324626, total time[s] 0.064274 +Converged at iteration 23, L1 8.39421e-05, Linf 0.00254607, total time[s] 0.096071 +Converged at iteration 24, L1 5.83734e-05, Linf 0.00292186, total time[s] 0.092573 +Converged at iteration 25, L1 8.68001e-05, Linf 0.00362579, total time[s] 0.101931 +Converged at iteration 32, L1 5.50491e-05, Linf 0.00426654, total time[s] 0.137087 +Converged at iteration 30, L1 6.65014e-05, Linf 0.00264861, total time[s] 0.117415 +Converged at iteration 30, L1 8.63431e-05, Linf 0.0106431, total time[s] 0.08729 +Converged at iteration 30, L1 9.89292e-05, Linf 0.00478493, total time[s] 0.104673 +Converged at iteration 32, L1 5.27845e-05, Linf 0.00325327, total time[s] 0.101271 +Converged at iteration 32, L1 4.46181e-05, Linf 0.0169169, total time[s] 0.119092 +Converged at iteration 27, L1 6.27388e-05, Linf 0.00572276, total time[s] 0.117807 +Converged at iteration 25, L1 7.51098e-05, Linf 0.00376196, total time[s] 0.124549 +Converged at iteration 25, L1 7.41382e-05, Linf 0.00567155, total time[s] 0.075144 +Converged at iteration 37, L1 3.3053e-05, Linf 0.0171921, total time[s] 0.232019 +Converged at iteration 35, L1 5.89156e-05, Linf 0.0217147, total time[s] 0.144142 +Converged at iteration 25, L1 7.34394e-05, Linf 0.00935001, total time[s] 0.141804 +Converged at iteration 27, L1 7.35631e-05, Linf 0.00772011, total time[s] 0.140862 +Converged at iteration 24, L1 7.63831e-05, Linf 0.00681395, total time[s] 0.174309 +Converged at iteration 21, L1 5.27301e-05, Linf 0.0060023, total time[s] 0.097904 +Converged at iteration 21, L1 4.52957e-05, Linf 0.00996352, total time[s] 0.069068 +Converged at iteration 22, L1 6.0941e-05, Linf 0.00678045, total time[s] 0.131559 +Converged at iteration 24, L1 8.13124e-05, Linf 0.00543491, total time[s] 0.106253 +Converged at iteration 25, L1 7.02532e-05, Linf 0.00375166, total time[s] 0.107334 +Converged at iteration 22, L1 6.2657e-05, Linf 0.0023029, total time[s] 0.072686 +Converged at iteration 19, L1 9.54186e-05, Linf 0.00512169, total time[s] 0.100688 +Converged at iteration 31, L1 7.90724e-05, Linf 0.00819443, total time[s] 0.128229 +Converged at iteration 20, L1 5.99783e-05, Linf 0.00372542, total time[s] 0.065645 +Converged at iteration 22, L1 8.21834e-05, Linf 0.00501872, total time[s] 0.117318 +Converged at iteration 27, L1 7.43519e-05, Linf 0.00271099, total time[s] 0.105609 +Converged at iteration 27, L1 7.48939e-05, Linf 0.00249936, total time[s] 0.094215 +Converged at iteration 24, L1 6.28277e-05, Linf 0.00210714, total time[s] 0.076548 +Converged at iteration 23, L1 8.03905e-05, Linf 0.00282278, total time[s] 0.066062 +Converged at iteration 23, L1 7.69694e-05, Linf 0.00420893, total time[s] 0.095468 +Converged at iteration 26, L1 9.77271e-05, Linf 0.00551756, total time[s] 0.141081 +Converged at iteration 32, L1 7.72169e-05, Linf 0.00851457, total time[s] 0.157662 +Converged at iteration 30, L1 7.78762e-05, Linf 0.00270717, total time[s] 0.157206 +Converged at iteration 31, L1 4.77345e-05, Linf 0.00924976, total time[s] 0.097216 +Converged at iteration 31, L1 7.38363e-05, Linf 0.0052266, total time[s] 0.098866 +Converged at iteration 32, L1 7.79444e-05, Linf 0.00466933, total time[s] 0.140817 +Converged at iteration 32, L1 5.02974e-05, Linf 0.0220051, total time[s] 0.118059 +Converged at iteration 27, L1 8.2056e-05, Linf 0.00787456, total time[s] 0.101632 +Converged at iteration 25, L1 7.38805e-05, Linf 0.00360516, total time[s] 0.12182 +Converged at iteration 26, L1 5.42166e-05, Linf 0.0052496, total time[s] 0.095082 +Converged at iteration 37, L1 3.8156e-05, Linf 0.0201449, total time[s] 0.245808 +Converged at iteration 35, L1 6.98312e-05, Linf 0.0253778, total time[s] 0.156349 +Converged at iteration 25, L1 7.88038e-05, Linf 0.00958675, total time[s] 0.072608 +Converged at iteration 27, L1 5.18386e-05, Linf 0.00623627, total time[s] 0.10239 +Converged at iteration 23, L1 8.48597e-05, Linf 0.00508465, total time[s] 0.101971 +Converged at iteration 21, L1 7.29721e-05, Linf 0.00583506, total time[s] 0.073973 +Converged at iteration 21, L1 5.8166e-05, Linf 0.0111937, total time[s] 0.089134 +Converged at iteration 23, L1 4.58403e-05, Linf 0.00661017, total time[s] 0.066662 +Converged at iteration 25, L1 6.46626e-05, Linf 0.00664867, total time[s] 0.146287 +Converged at iteration 25, L1 9.27821e-05, Linf 0.00579686, total time[s] 0.116115 +Converged at iteration 22, L1 7.72215e-05, Linf 0.0032686, total time[s] 0.067088 +Converged at iteration 19, L1 9.86682e-05, Linf 0.00525095, total time[s] 0.126304 +Converged at iteration 49, L1 9.99464e-05, Linf 0.00228015, total time[s] 0.216658 +Converged at iteration 20, L1 7.5375e-05, Linf 0.00504637, total time[s] 0.071425 +Converged at iteration 23, L1 5.72401e-05, Linf 0.00413247, total time[s] 0.138727 +Converged at iteration 28, L1 6.43632e-05, Linf 0.00217836, total time[s] 0.199853 +Converged at iteration 27, L1 9.70446e-05, Linf 0.00320943, total time[s] 0.200278 +Converged at iteration 24, L1 8.1269e-05, Linf 0.00338412, total time[s] 0.186726 +Converged at iteration 23, L1 9.34647e-05, Linf 0.0033256, total time[s] 0.134624 +Converged at iteration 23, L1 7.1597e-05, Linf 0.00511944, total time[s] 0.083234 +Converged at iteration 27, L1 8.39263e-05, Linf 0.0057321, total time[s] 0.111492 +Converged at iteration 33, L1 4.81069e-05, Linf 0.00498586, total time[s] 0.156317 +Converged at iteration 30, L1 8.16795e-05, Linf 0.0024321, total time[s] 0.138154 +Converged at iteration 31, L1 5.51539e-05, Linf 0.00862667, total time[s] 0.188797 +Converged at iteration 31, L1 9.10263e-05, Linf 0.00677941, total time[s] 0.185362 +Converged at iteration 33, L1 4.44282e-05, Linf 0.00362317, total time[s] 0.190834 +Converged at iteration 32, L1 6.70315e-05, Linf 0.0261785, total time[s] 0.121761 +Converged at iteration 27, L1 7.28059e-05, Linf 0.00750135, total time[s] 0.114514 +Converged at iteration 25, L1 6.95794e-05, Linf 0.00611641, total time[s] 0.091164 +Converged at iteration 26, L1 7.16459e-05, Linf 0.00739838, total time[s] 0.093823 +Converged at iteration 37, L1 8.75192e-05, Linf 0.0292901, total time[s] 0.100524 +Converged at iteration 36, L1 2.94635e-05, Linf 0.012481, total time[s] 0.097696 +Converged at iteration 25, L1 9.23638e-05, Linf 0.0102532, total time[s] 0.068381 +Converged at iteration 26, L1 8.71548e-05, Linf 0.0073477, total time[s] 0.071738 +Converged at iteration 22, L1 7.44072e-05, Linf 0.00298801, total time[s] 0.063283 +Converged at iteration 21, L1 6.12018e-05, Linf 0.00607247, total time[s] 0.079595 +Converged at iteration 21, L1 5.95264e-05, Linf 0.0101796, total time[s] 0.069004 +Converged at iteration 23, L1 7.25652e-05, Linf 0.0104656, total time[s] 0.070958 +Converged at iteration 25, L1 8.86847e-05, Linf 0.0107526, total time[s] 0.103443 +Converged at iteration 26, L1 5.85947e-05, Linf 0.00392284, total time[s] 0.099002 +Converged at iteration 22, L1 8.80876e-05, Linf 0.00420894, total time[s] 0.069415 +Converged at iteration 19, L1 9.59163e-05, Linf 0.00502656, total time[s] 0.079512 +Converged at iteration 31, L1 9.97333e-05, Linf 0.00961633, total time[s] 0.078109 +Converged at iteration 20, L1 9.95238e-05, Linf 0.00589148, total time[s] 0.06542 +Converged at iteration 23, L1 7.40357e-05, Linf 0.00502244, total time[s] 0.093877 +Converged at iteration 28, L1 8.02207e-05, Linf 0.00304609, total time[s] 0.096878 +Converged at iteration 28, L1 6.01394e-05, Linf 0.00232921, total time[s] 0.082875 +Converged at iteration 25, L1 5.43349e-05, Linf 0.00336205, total time[s] 0.081074 +Converged at iteration 24, L1 6.46357e-05, Linf 0.00250252, total time[s] 0.104364 +Converged at iteration 24, L1 6.814e-05, Linf 0.00509681, total time[s] 0.068084 +Converged at iteration 28, L1 6.73324e-05, Linf 0.00488491, total time[s] 0.102995 +Converged at iteration 33, L1 5.71576e-05, Linf 0.00561086, total time[s] 0.135238 +Converged at iteration 30, L1 7.90295e-05, Linf 0.0021887, total time[s] 0.106335 +Converged at iteration 31, L1 4.55629e-05, Linf 0.00808743, total time[s] 0.081116 +Converged at iteration 31, L1 9.99936e-05, Linf 0.00775758, total time[s] 0.09121 +Converged at iteration 33, L1 5.21597e-05, Linf 0.00442507, total time[s] 0.117293 +Converged at iteration 33, L1 3.18215e-05, Linf 0.0195796, total time[s] 0.110377 +Converged at iteration 27, L1 5.8371e-05, Linf 0.00573019, total time[s] 0.07572 +Converged at iteration 25, L1 8.53359e-05, Linf 0.00865315, total time[s] 0.130186 +Converged at iteration 26, L1 9.38445e-05, Linf 0.0095129, total time[s] 0.095884 +Converged at iteration 38, L1 4.53679e-05, Linf 0.0209106, total time[s] 0.149601 +Converged at iteration 36, L1 5.53461e-05, Linf 0.0188065, total time[s] 0.117185 +Converged at iteration 26, L1 4.24186e-05, Linf 0.00430008, total time[s] 0.084878 +Converged at iteration 26, L1 8.6809e-05, Linf 0.00506659, total time[s] 0.10073 +Converged at iteration 22, L1 8.77752e-05, Linf 0.00366815, total time[s] 0.073543 +Converged at iteration 21, L1 6.06194e-05, Linf 0.00621118, total time[s] 0.061713 +Converged at iteration 21, L1 6.45992e-05, Linf 0.00978463, total time[s] 0.071121 +Converged at iteration 24, L1 4.05044e-05, Linf 0.00766546, total time[s] 0.09469 +Converged at iteration 26, L1 4.8471e-05, Linf 0.00560463, total time[s] 0.168302 +Converged at iteration 25, L1 8.20018e-05, Linf 0.00687103, total time[s] 0.114312 +Converged at iteration 22, L1 8.51183e-05, Linf 0.00441248, total time[s] 0.070113 +Converged at iteration 19, L1 8.79174e-05, Linf 0.00347894, total time[s] 0.060816 +Converged at iteration 31, L1 9.56131e-05, Linf 0.00943974, total time[s] 0.114637 +Converged at iteration 21, L1 6.81014e-05, Linf 0.00495476, total time[s] 0.063008 +Converged at iteration 23, L1 9.23641e-05, Linf 0.0128226, total time[s] 0.076151 +Converged at iteration 27, L1 7.85479e-05, Linf 0.00258238, total time[s] 0.120479 +Converged at iteration 28, L1 6.05168e-05, Linf 0.00238044, total time[s] 0.080699 +Converged at iteration 25, L1 6.51408e-05, Linf 0.00559788, total time[s] 0.074062 +Converged at iteration 24, L1 7.5031e-05, Linf 0.00303213, total time[s] 0.096851 +Converged at iteration 24, L1 8.45107e-05, Linf 0.00616232, total time[s] 0.10557 +Converged at iteration 29, L1 6.51226e-05, Linf 0.00551986, total time[s] 0.108861 +Converged at iteration 33, L1 6.59431e-05, Linf 0.00835035, total time[s] 0.166129 +Converged at iteration 30, L1 7.88143e-05, Linf 0.00181499, total time[s] 0.099482 +Converged at iteration 30, L1 8.87164e-05, Linf 0.0141921, total time[s] 0.099517 +Converged at iteration 31, L1 7.77373e-05, Linf 0.00537516, total time[s] 0.102964 +Converged at iteration 33, L1 6.01703e-05, Linf 0.00504559, total time[s] 0.132166 +Converged at iteration 33, L1 7.82801e-05, Linf 0.0267416, total time[s] 0.103217 +Converged at iteration 26, L1 6.94079e-05, Linf 0.0041834, total time[s] 0.148551 +Converged at iteration 25, L1 8.36194e-05, Linf 0.00769836, total time[s] 0.130785 +Converged at iteration 26, L1 8.8591e-05, Linf 0.00950772, total time[s] 0.146394 +Converged at iteration 40, L1 6.84967e-05, Linf 0.00367517, total time[s] 0.112853 +Converged at iteration 35, L1 7.60918e-05, Linf 0.00339717, total time[s] 0.095786 +Converged at iteration 30, L1 9.65185e-05, Linf 0.00430085, total time[s] 0.096848 +Converged at iteration 31, L1 6.19921e-05, Linf 0.00502563, total time[s] 0.10025 +Converged at iteration 27, L1 6.26172e-05, Linf 0.00499702, total time[s] 0.075036 +Converged at iteration 22, L1 8.58667e-05, Linf 0.00448844, total time[s] 0.059962 +Converged at iteration 20, L1 9.60641e-05, Linf 0.00395687, total time[s] 0.058957 +Converged at iteration 24, L1 8.84828e-05, Linf 0.00485406, total time[s] 0.103948 +Converged at iteration 28, L1 7.38386e-05, Linf 0.00444863, total time[s] 0.081193 +Converged at iteration 26, L1 8.11737e-05, Linf 0.00546791, total time[s] 0.09876 +Converged at iteration 22, L1 7.44642e-05, Linf 0.00508719, total time[s] 0.079543 +Converged at iteration 19, L1 6.63191e-05, Linf 0.00393106, total time[s] 0.054033 +Converged at iteration 30, L1 7.99453e-05, Linf 0.00329636, total time[s] 0.117578 +Converged at iteration 20, L1 8.44973e-05, Linf 0.00455033, total time[s] 0.066203 +Converged at iteration 24, L1 7.123e-05, Linf 0.00463293, total time[s] 0.072405 +Converged at iteration 31, L1 8.92834e-05, Linf 0.00569105, total time[s] 0.099688 +Converged at iteration 27, L1 9.91454e-05, Linf 0.00569815, total time[s] 0.074267 +Converged at iteration 24, L1 8.83535e-05, Linf 0.00465017, total time[s] 0.108787 +Converged at iteration 23, L1 9.21875e-05, Linf 0.00410192, total time[s] 0.112541 +Converged at iteration 26, L1 7.22174e-05, Linf 0.00446796, total time[s] 0.074506 +Converged at iteration 29, L1 7.86399e-05, Linf 0.00479089, total time[s] 0.088119 +Converged at iteration 34, L1 7.09445e-05, Linf 0.00422696, total time[s] 0.093794 +Converged at iteration 30, L1 9.4116e-05, Linf 0.00442606, total time[s] 0.078571 +Converged at iteration 28, L1 9.49883e-05, Linf 0.00310979, total time[s] 0.085915 +Converged at iteration 32, L1 9.40583e-05, Linf 0.00373961, total time[s] 0.092661 +Converged at iteration 37, L1 7.38231e-05, Linf 0.00330022, total time[s] 0.105811 +Converged at iteration 33, L1 8.44924e-05, Linf 0.00469118, total time[s] 0.089285 +Converged at iteration 28, L1 9.66554e-05, Linf 0.00430163, total time[s] 0.079108 +Converged at iteration 24, L1 8.82867e-05, Linf 0.00325072, total time[s] 0.082136 +Converged at iteration 26, L1 8.98086e-05, Linf 0.00383975, total time[s] 0.0869 +Converged at iteration 39, L1 6.01562e-05, Linf 0.00635201, total time[s] 0.105723 +Converged at iteration 35, L1 9.52787e-05, Linf 0.00580468, total time[s] 0.095037 +Converged at iteration 24, L1 8.85793e-05, Linf 0.00495396, total time[s] 0.070556 +Converged at iteration 30, L1 9.73634e-05, Linf 0.00610535, total time[s] 0.113002 +Converged at iteration 25, L1 6.67117e-05, Linf 0.00545633, total time[s] 0.089392 +Converged at iteration 20, L1 9.55688e-05, Linf 0.0040193, total time[s] 0.069054 +Converged at iteration 19, L1 5.59869e-05, Linf 0.00422929, total time[s] 0.060937 +Converged at iteration 20, L1 9.21577e-05, Linf 0.00664842, total time[s] 0.056796 +Converged at iteration 24, L1 6.97545e-05, Linf 0.00470942, total time[s] 0.105844 +Converged at iteration 24, L1 7.10728e-05, Linf 0.00489838, total time[s] 0.070551 +Converged at iteration 20, L1 5.41171e-05, Linf 0.00505222, total time[s] 0.059291 +Converged at iteration 16, L1 9.47542e-05, Linf 0.00487966, total time[s] 0.065624 +Converged at iteration 31, L1 8.22983e-05, Linf 0.00281052, total time[s] 0.083818 +Converged at iteration 19, L1 9.89812e-05, Linf 0.00712677, total time[s] 0.053477 +Converged at iteration 23, L1 7.8548e-05, Linf 0.00696046, total time[s] 0.07723 +Converged at iteration 26, L1 7.08994e-05, Linf 0.00537784, total time[s] 0.076809 +Converged at iteration 23, L1 5.14507e-05, Linf 0.00480162, total time[s] 0.070589 +Converged at iteration 20, L1 7.00657e-05, Linf 0.00498432, total time[s] 0.057625 +Converged at iteration 22, L1 9.98217e-05, Linf 0.00559292, total time[s] 0.062788 +Converged at iteration 25, L1 9.09176e-05, Linf 0.00541855, total time[s] 0.07397 +Converged at iteration 28, L1 7.95918e-05, Linf 0.00403046, total time[s] 0.078894 +Converged at iteration 29, L1 6.06631e-05, Linf 0.00547984, total time[s] 0.083466 +Converged at iteration 27, L1 6.37562e-05, Linf 0.00351357, total time[s] 0.087743 +Converged at iteration 28, L1 9.96031e-05, Linf 0.00446809, total time[s] 0.076442 +Converged at iteration 29, L1 8.54605e-05, Linf 0.00296308, total time[s] 0.074652 +Converged at iteration 28, L1 8.01145e-05, Linf 0.0027902, total time[s] 0.074227 +Converged at iteration 32, L1 7.91426e-05, Linf 0.00656414, total time[s] 0.084291 +Converged at iteration 26, L1 8.4809e-05, Linf 0.00293927, total time[s] 0.070557 +Converged at iteration 25, L1 6.99744e-05, Linf 0.0021963, total time[s] 0.069333 +Converged at iteration 23, L1 7.76058e-05, Linf 0.00326073, total time[s] 0.064762 +Converged at iteration 38, L1 7.31807e-05, Linf 0.0101654, total time[s] 0.140922 +Converged at iteration 35, L1 6.61495e-05, Linf 0.00873934, total time[s] 0.096607 +Converged at iteration 25, L1 4.21049e-05, Linf 0.00526126, total time[s] 0.067277 +Converged at iteration 30, L1 6.75964e-05, Linf 0.00576709, total time[s] 0.081131 +Converged at iteration 23, L1 9.21431e-05, Linf 0.00594433, total time[s] 0.06399 +Converged at iteration 22, L1 5.83664e-05, Linf 0.00489931, total time[s] 0.062639 +Converged at iteration 19, L1 7.22639e-05, Linf 0.00690557, total time[s] 0.053035 +Converged at iteration 21, L1 4.06382e-05, Linf 0.00429591, total time[s] 0.085451 +Converged at iteration 23, L1 6.2295e-05, Linf 0.00360952, total time[s] 0.075401 +Converged at iteration 22, L1 9.70435e-05, Linf 0.00630355, total time[s] 0.087541 +Converged at iteration 19, L1 8.30622e-05, Linf 0.00568657, total time[s] 0.053347 +Converged at iteration 17, L1 7.36641e-05, Linf 0.00363624, total time[s] 0.047073 +Converged at iteration 31, L1 5.91647e-05, Linf 0.00467767, total time[s] 0.092669 +Converged at iteration 19, L1 9.53345e-05, Linf 0.00619365, total time[s] 0.059975 +Converged at iteration 22, L1 9.8574e-05, Linf 0.00753411, total time[s] 0.064134 +Converged at iteration 25, L1 9.9947e-05, Linf 0.00575357, total time[s] 0.07578 +Converged at iteration 24, L1 6.84314e-05, Linf 0.00244981, total time[s] 0.066022 +Converged at iteration 21, L1 7.52236e-05, Linf 0.00228038, total time[s] 0.07548 +Converged at iteration 23, L1 6.82636e-05, Linf 0.00285954, total time[s] 0.06183 +Converged at iteration 25, L1 7.7596e-05, Linf 0.00319584, total time[s] 0.099923 +Converged at iteration 27, L1 7.16647e-05, Linf 0.00330891, total time[s] 0.080706 +Converged at iteration 29, L1 6.58938e-05, Linf 0.00576895, total time[s] 0.090988 +Converged at iteration 28, L1 5.89595e-05, Linf 0.00213677, total time[s] 0.08213 +Converged at iteration 29, L1 8.66303e-05, Linf 0.00488781, total time[s] 0.09193 +Converged at iteration 29, L1 8.52621e-05, Linf 0.00237354, total time[s] 0.075415 +Converged at iteration 28, L1 7.99744e-05, Linf 0.0019585, total time[s] 0.076349 +Converged at iteration 32, L1 5.61442e-05, Linf 0.0080066, total time[s] 0.097019 +Converged at iteration 26, L1 7.82713e-05, Linf 0.00418758, total time[s] 0.080972 +Converged at iteration 25, L1 9.09411e-05, Linf 0.00352971, total time[s] 0.105476 +Converged at iteration 23, L1 8.78825e-05, Linf 0.00344458, total time[s] 0.070985 +Converged at iteration 37, L1 8.93967e-05, Linf 0.016263, total time[s] 0.107918 +Converged at iteration 35, L1 3.96517e-05, Linf 0.0103673, total time[s] 0.090002 +Converged at iteration 25, L1 6.6296e-05, Linf 0.00912848, total time[s] 0.072499 +Converged at iteration 29, L1 6.36191e-05, Linf 0.00667625, total time[s] 0.103431 +Converged at iteration 23, L1 8.65211e-05, Linf 0.00609216, total time[s] 0.060429 +Converged at iteration 22, L1 5.21031e-05, Linf 0.00547493, total time[s] 0.058605 +Converged at iteration 20, L1 3.61274e-05, Linf 0.00703876, total time[s] 0.05304 +Converged at iteration 21, L1 7.66246e-05, Linf 0.00581481, total time[s] 0.060282 +Converged at iteration 23, L1 6.36574e-05, Linf 0.0032633, total time[s] 0.060322 +Converged at iteration 22, L1 5.90569e-05, Linf 0.00306671, total time[s] 0.05833 +Converged at iteration 20, L1 6.79559e-05, Linf 0.00256171, total time[s] 0.056208 +Converged at iteration 18, L1 8.0826e-05, Linf 0.00302059, total time[s] 0.071304 +Converged at iteration 31, L1 6.17249e-05, Linf 0.00734697, total time[s] 0.094851 +Converged at iteration 19, L1 8.68713e-05, Linf 0.00538036, total time[s] 0.054494 +Converged at iteration 22, L1 8.05056e-05, Linf 0.00503789, total time[s] 0.064357 +Converged at iteration 26, L1 5.66406e-05, Linf 0.00468461, total time[s] 0.080381 +Converged at iteration 25, L1 8.00766e-05, Linf 0.00308483, total time[s] 0.098091 +Converged at iteration 22, L1 8.89326e-05, Linf 0.00320775, total time[s] 0.070374 +Converged at iteration 23, L1 7.85283e-05, Linf 0.00268594, total time[s] 0.09151 +Converged at iteration 24, L1 9.8402e-05, Linf 0.00371787, total time[s] 0.07126 +Converged at iteration 25, L1 8.92269e-05, Linf 0.00325775, total time[s] 0.073462 +Converged at iteration 30, L1 9.96071e-05, Linf 0.00533685, total time[s] 0.099229 +Converged at iteration 29, L1 6.30951e-05, Linf 0.00267693, total time[s] 0.087999 +Converged at iteration 30, L1 5.91128e-05, Linf 0.00549493, total time[s] 0.086634 +Converged at iteration 30, L1 6.02117e-05, Linf 0.00175875, total time[s] 0.080661 +Converged at iteration 31, L1 3.8265e-05, Linf 0.00234093, total time[s] 0.115571 +Converged at iteration 32, L1 4.77043e-05, Linf 0.0106199, total time[s] 0.096297 +Converged at iteration 24, L1 8.81265e-05, Linf 0.00564989, total time[s] 0.069704 +Converged at iteration 25, L1 9.91057e-05, Linf 0.00478096, total time[s] 0.100223 +Converged at iteration 24, L1 6.78081e-05, Linf 0.00259502, total time[s] 0.066517 +Converged at iteration 37, L1 5.39266e-05, Linf 0.0173739, total time[s] 0.10835 +Converged at iteration 35, L1 3.65188e-05, Linf 0.0126984, total time[s] 0.095321 +Converged at iteration 25, L1 6.96613e-05, Linf 0.0105818, total time[s] 0.092109 +Converged at iteration 28, L1 7.58023e-05, Linf 0.00782473, total time[s] 0.093045 +Converged at iteration 24, L1 6.48325e-05, Linf 0.00588684, total time[s] 0.062683 +Converged at iteration 21, L1 8.16417e-05, Linf 0.00908607, total time[s] 0.055633 +Converged at iteration 20, L1 6.3949e-05, Linf 0.0110502, total time[s] 0.053375 +Converged at iteration 21, L1 9.7393e-05, Linf 0.00746471, total time[s] 0.054961 +Converged at iteration 23, L1 7.87635e-05, Linf 0.0036582, total time[s] 0.060778 +Converged at iteration 23, L1 8.43945e-05, Linf 0.00192861, total time[s] 0.060408 +Converged at iteration 21, L1 6.01214e-05, Linf 0.00641217, total time[s] 0.070291 +Converged at iteration 19, L1 5.94737e-05, Linf 0.00294307, total time[s] 0.073343 +Converged at iteration 31, L1 6.52276e-05, Linf 0.00964227, total time[s] 0.103764 +Converged at iteration 19, L1 8.38228e-05, Linf 0.00501655, total time[s] 0.072347 +Converged at iteration 22, L1 7.48899e-05, Linf 0.0047765, total time[s] 0.063447 +Converged at iteration 26, L1 5.89075e-05, Linf 0.011424, total time[s] 0.121735 +Converged at iteration 26, L1 7.22597e-05, Linf 0.00270825, total time[s] 0.10398 +Converged at iteration 23, L1 7.05492e-05, Linf 0.00263972, total time[s] 0.09845 +Converged at iteration 23, L1 8.86013e-05, Linf 0.00259563, total time[s] 0.086446 +Converged at iteration 24, L1 7.46113e-05, Linf 0.00351545, total time[s] 0.088121 +Converged at iteration 23, L1 7.03023e-05, Linf 0.00201839, total time[s] 0.095917 +Converged at iteration 31, L1 6.83745e-05, Linf 0.00544168, total time[s] 0.125267 +Converged at iteration 29, L1 8.28962e-05, Linf 0.00311355, total time[s] 0.096386 +Converged at iteration 30, L1 7.13215e-05, Linf 0.00660294, total time[s] 0.105735 +Converged at iteration 30, L1 7.61134e-05, Linf 0.00246836, total time[s] 0.102549 +Converged at iteration 31, L1 6.62752e-05, Linf 0.0032531, total time[s] 0.113582 +Converged at iteration 32, L1 4.36514e-05, Linf 0.0141129, total time[s] 0.085902 +Converged at iteration 25, L1 8.51586e-05, Linf 0.00284876, total time[s] 0.067484 +Converged at iteration 25, L1 9.39026e-05, Linf 0.00552064, total time[s] 0.083274 +Converged at iteration 24, L1 9.86191e-05, Linf 0.00478836, total time[s] 0.068649 +Converged at iteration 37, L1 3.6801e-05, Linf 0.0168663, total time[s] 0.092646 +Converged at iteration 35, L1 4.77115e-05, Linf 0.013379, total time[s] 0.151316 +Converged at iteration 25, L1 6.68575e-05, Linf 0.01016, total time[s] 0.077939 +Converged at iteration 27, L1 9.44868e-05, Linf 0.00904856, total time[s] 0.107542 +Converged at iteration 24, L1 8.06168e-05, Linf 0.0071882, total time[s] 0.079307 +Converged at iteration 21, L1 5.86539e-05, Linf 0.00819474, total time[s] 0.085565 +Converged at iteration 21, L1 2.36798e-05, Linf 0.0061889, total time[s] 0.071632 +Converged at iteration 22, L1 3.95075e-05, Linf 0.00291026, total time[s] 0.083476 +Converged at iteration 24, L1 5.46255e-05, Linf 0.00266177, total time[s] 0.098919 +Converged at iteration 24, L1 8.35476e-05, Linf 0.0027547, total time[s] 0.109866 +Converged at iteration 21, L1 8.87821e-05, Linf 0.0026779, total time[s] 0.117691 +Converged at iteration 19, L1 7.76725e-05, Linf 0.00419698, total time[s] 0.083614 +Converged at iteration 31, L1 6.7498e-05, Linf 0.0119348, total time[s] 0.113895 +Converged at iteration 19, L1 9.71696e-05, Linf 0.00500893, total time[s] 0.060624 +Converged at iteration 22, L1 7.51736e-05, Linf 0.0047488, total time[s] 0.104213 +Converged at iteration 26, L1 7.66949e-05, Linf 0.00372284, total time[s] 0.094799 +Converged at iteration 27, L1 5.69197e-05, Linf 0.00192266, total time[s] 0.120153 +Converged at iteration 23, L1 9.94601e-05, Linf 0.00318065, total time[s] 0.075224 +Converged at iteration 23, L1 9.09828e-05, Linf 0.00259644, total time[s] 0.063198 +Converged at iteration 24, L1 5.54534e-05, Linf 0.00287404, total time[s] 0.076832 +Converged at iteration 24, L1 6.65068e-05, Linf 0.00200697, total time[s] 0.075857 +Converged at iteration 31, L1 9.09114e-05, Linf 0.00641092, total time[s] 0.087048 +Converged at iteration 30, L1 5.82403e-05, Linf 0.00226547, total time[s] 0.080947 +Converged at iteration 30, L1 9.93355e-05, Linf 0.00853478, total time[s] 0.179473 +Converged at iteration 31, L1 5.46233e-05, Linf 0.00261558, total time[s] 0.099376 +Converged at iteration 32, L1 3.77641e-05, Linf 0.0024514, total time[s] 0.090919 +Converged at iteration 32, L1 4.55504e-05, Linf 0.0175344, total time[s] 0.104533 +Converged at iteration 27, L1 6.19396e-05, Linf 0.00582894, total time[s] 0.071466 +Converged at iteration 25, L1 6.94113e-05, Linf 0.00412993, total time[s] 0.089851 +Converged at iteration 25, L1 7.58076e-05, Linf 0.0046015, total time[s] 0.068316 +Converged at iteration 37, L1 3.23447e-05, Linf 0.0169652, total time[s] 0.107359 +Converged at iteration 35, L1 5.62883e-05, Linf 0.0215595, total time[s] 0.092772 +Converged at iteration 25, L1 5.93668e-05, Linf 0.00905912, total time[s] 0.066816 +Converged at iteration 27, L1 6.7432e-05, Linf 0.00793647, total time[s] 0.093009 +Converged at iteration 24, L1 7.90942e-05, Linf 0.00698305, total time[s] 0.079631 +Converged at iteration 21, L1 4.92273e-05, Linf 0.00696132, total time[s] 0.060249 +Converged at iteration 21, L1 3.44012e-05, Linf 0.00873411, total time[s] 0.064338 +Converged at iteration 22, L1 6.57896e-05, Linf 0.00639682, total time[s] 0.060265 +Converged at iteration 24, L1 9.49185e-05, Linf 0.00599872, total time[s] 0.066086 +Converged at iteration 25, L1 7.35967e-05, Linf 0.00320721, total time[s] 0.077723 +Converged at iteration 22, L1 6.5286e-05, Linf 0.00268957, total time[s] 0.060741 +Converged at iteration 19, L1 9.08686e-05, Linf 0.00507853, total time[s] 0.05973 +Converged at iteration 31, L1 7.90758e-05, Linf 0.00777897, total time[s] 0.101266 +Converged at iteration 20, L1 6.0628e-05, Linf 0.00373079, total time[s] 0.062613 +Converged at iteration 22, L1 8.5573e-05, Linf 0.00504882, total time[s] 0.090661 +Converged at iteration 27, L1 7.66579e-05, Linf 0.00269164, total time[s] 0.082966 +Converged at iteration 27, L1 7.84308e-05, Linf 0.00253372, total time[s] 0.086776 +Converged at iteration 24, L1 6.348e-05, Linf 0.00203508, total time[s] 0.068135 +Converged at iteration 23, L1 8.64272e-05, Linf 0.00283543, total time[s] 0.106221 +Converged at iteration 23, L1 7.55236e-05, Linf 0.00411992, total time[s] 0.064283 +Converged at iteration 26, L1 6.20566e-05, Linf 0.00363382, total time[s] 0.084585 +Converged at iteration 32, L1 6.34387e-05, Linf 0.0069693, total time[s] 0.093066 +Converged at iteration 30, L1 6.82016e-05, Linf 0.00222664, total time[s] 0.087523 +Converged at iteration 31, L1 4.79948e-05, Linf 0.0044913, total time[s] 0.08249 +Converged at iteration 31, L1 9.49664e-05, Linf 0.00489754, total time[s] 0.081437 +Converged at iteration 32, L1 6.87319e-05, Linf 0.00400785, total time[s] 0.083606 +Converged at iteration 32, L1 5.07198e-05, Linf 0.0212923, total time[s] 0.086106 +Converged at iteration 27, L1 9.01539e-05, Linf 0.0080223, total time[s] 0.089483 +Converged at iteration 25, L1 6.29026e-05, Linf 0.00284523, total time[s] 0.070082 +Converged at iteration 26, L1 5.85031e-05, Linf 0.00389882, total time[s] 0.072389 +Converged at iteration 37, L1 3.61913e-05, Linf 0.0198037, total time[s] 0.102762 +Converged at iteration 35, L1 6.67178e-05, Linf 0.0251212, total time[s] 0.094774 +Converged at iteration 25, L1 6.2659e-05, Linf 0.00882374, total time[s] 0.104643 +Converged at iteration 27, L1 5.24721e-05, Linf 0.00621499, total time[s] 0.074132 +Converged at iteration 23, L1 8.92511e-05, Linf 0.00521279, total time[s] 0.068714 +Converged at iteration 21, L1 5.81815e-05, Linf 0.00655374, total time[s] 0.076601 +Converged at iteration 21, L1 4.36357e-05, Linf 0.00980821, total time[s] 0.071911 +Converged at iteration 23, L1 4.62146e-05, Linf 0.00579959, total time[s] 0.087133 +Converged at iteration 25, L1 7.3818e-05, Linf 0.00625722, total time[s] 0.073728 +Converged at iteration 25, L1 9.37264e-05, Linf 0.00462796, total time[s] 0.078044 +Converged at iteration 22, L1 8.10757e-05, Linf 0.00373335, total time[s] 0.082336 +Converged at iteration 19, L1 9.45379e-05, Linf 0.0051848, total time[s] 0.057296 +Converged at iteration 31, L1 9.5727e-05, Linf 0.00969834, total time[s] 0.080684 +Converged at iteration 20, L1 7.57177e-05, Linf 0.00500001, total time[s] 0.053433 +Converged at iteration 23, L1 5.9219e-05, Linf 0.00418272, total time[s] 0.061946 +Converged at iteration 28, L1 6.67897e-05, Linf 0.00222036, total time[s] 0.091501 +Converged at iteration 28, L1 5.37296e-05, Linf 0.00216231, total time[s] 0.093335 +Converged at iteration 24, L1 8.13775e-05, Linf 0.00321664, total time[s] 0.08919 +Converged at iteration 23, L1 8.8723e-05, Linf 0.00331465, total time[s] 0.068795 +Converged at iteration 23, L1 6.91782e-05, Linf 0.0050646, total time[s] 0.077108 +Converged at iteration 26, L1 9.24057e-05, Linf 0.00494178, total time[s] 0.08129 +Converged at iteration 32, L1 8.69462e-05, Linf 0.00780146, total time[s] 0.104236 +Converged at iteration 30, L1 6.91188e-05, Linf 0.00187299, total time[s] 0.082346 +Converged at iteration 31, L1 5.27508e-05, Linf 0.00686382, total time[s] 0.09513 +Converged at iteration 31, L1 9.53479e-05, Linf 0.00542698, total time[s] 0.091999 +Converged at iteration 32, L1 9.20773e-05, Linf 0.00472068, total time[s] 0.086875 +Converged at iteration 32, L1 6.8877e-05, Linf 0.0264066, total time[s] 0.093476 +Converged at iteration 27, L1 7.33585e-05, Linf 0.00766725, total time[s] 0.073028 +Converged at iteration 25, L1 6.77943e-05, Linf 0.00422791, total time[s] 0.082205 +Converged at iteration 26, L1 7.68056e-05, Linf 0.00586698, total time[s] 0.086806 +Converged at iteration 37, L1 7.98896e-05, Linf 0.0280942, total time[s] 0.100025 +Converged at iteration 35, L1 9.34134e-05, Linf 0.028282, total time[s] 0.102481 +Converged at iteration 25, L1 7.79414e-05, Linf 0.00961136, total time[s] 0.079263 +Converged at iteration 26, L1 8.04185e-05, Linf 0.00671734, total time[s] 0.076622 +Converged at iteration 22, L1 5.79979e-05, Linf 0.0022071, total time[s] 0.072833 +Converged at iteration 21, L1 6.57176e-05, Linf 0.00649037, total time[s] 0.059634 +Converged at iteration 21, L1 5.25055e-05, Linf 0.00998875, total time[s] 0.067315 +Converged at iteration 23, L1 7.99602e-05, Linf 0.0109627, total time[s] 0.073858 +Converged at iteration 26, L1 4.77115e-05, Linf 0.00526976, total time[s] 0.070814 +Converged at iteration 26, L1 5.88617e-05, Linf 0.00436434, total time[s] 0.06888 +Converged at iteration 22, L1 9.54319e-05, Linf 0.00446323, total time[s] 0.05978 +Converged at iteration 19, L1 9.24452e-05, Linf 0.00470116, total time[s] 0.052816 +Converged at iteration 32, L1 3.77348e-05, Linf 0.00464674, total time[s] 0.101683 +Converged at iteration 20, L1 9.18462e-05, Linf 0.00581754, total time[s] 0.061991 +Converged at iteration 23, L1 7.58234e-05, Linf 0.00494423, total time[s] 0.068259 +Converged at iteration 28, L1 7.58691e-05, Linf 0.00308047, total time[s] 0.075659 +Converged at iteration 28, L1 6.7878e-05, Linf 0.0026236, total time[s] 0.078008 +Converged at iteration 25, L1 5.75211e-05, Linf 0.00296457, total time[s] 0.069914 +Converged at iteration 24, L1 6.10293e-05, Linf 0.00248091, total time[s] 0.068195 +Converged at iteration 23, L1 9.74969e-05, Linf 0.00638876, total time[s] 0.089168 +Converged at iteration 27, L1 8.02539e-05, Linf 0.0048809, total time[s] 0.075582 +Converged at iteration 33, L1 4.89432e-05, Linf 0.0043374, total time[s] 0.090183 +Converged at iteration 30, L1 6.91141e-05, Linf 0.00186651, total time[s] 0.102303 +Converged at iteration 31, L1 4.93612e-05, Linf 0.00643496, total time[s] 0.086906 +Converged at iteration 32, L1 5.50531e-05, Linf 0.0042798, total time[s] 0.087327 +Converged at iteration 33, L1 5.12308e-05, Linf 0.00314969, total time[s] 0.090303 +Converged at iteration 33, L1 2.87465e-05, Linf 0.0184935, total time[s] 0.107256 +Converged at iteration 27, L1 5.86381e-05, Linf 0.006061, total time[s] 0.080619 +Converged at iteration 25, L1 8.17107e-05, Linf 0.00612724, total time[s] 0.075397 +Converged at iteration 26, L1 9.77579e-05, Linf 0.00785452, total time[s] 0.070197 +Converged at iteration 38, L1 4.93164e-05, Linf 0.0212121, total time[s] 0.11199 +Converged at iteration 36, L1 3.55591e-05, Linf 0.014963, total time[s] 0.104124 +Converged at iteration 25, L1 9.16229e-05, Linf 0.0102772, total time[s] 0.075319 +Converged at iteration 26, L1 9.67573e-05, Linf 0.00702655, total time[s] 0.071999 +Converged at iteration 22, L1 6.19125e-05, Linf 0.00266536, total time[s] 0.06183 +Converged at iteration 21, L1 6.36159e-05, Linf 0.00702353, total time[s] 0.067116 +Converged at iteration 21, L1 5.54342e-05, Linf 0.00768004, total time[s] 0.056953 +Converged at iteration 24, L1 3.60788e-05, Linf 0.00590979, total time[s] 0.07003 +Converged at iteration 26, L1 5.4342e-05, Linf 0.00609287, total time[s] 0.099732 +Converged at iteration 26, L1 5.42322e-05, Linf 0.00476579, total time[s] 0.085441 +Converged at iteration 22, L1 9.94696e-05, Linf 0.00513597, total time[s] 0.070896 +Converged at iteration 19, L1 9.41507e-05, Linf 0.00395366, total time[s] 0.067267 +Converged at iteration 32, L1 3.78933e-05, Linf 0.00434045, total time[s] 0.11059 +Converged at iteration 21, L1 6.0177e-05, Linf 0.00471536, total time[s] 0.059807 +Converged at iteration 23, L1 8.75999e-05, Linf 0.00537343, total time[s] 0.103422 +Converged at iteration 28, L1 6.76711e-05, Linf 0.00268888, total time[s] 0.089278 +Converged at iteration 28, L1 7.25354e-05, Linf 0.00740527, total time[s] 0.071188 +Converged at iteration 25, L1 7.30768e-05, Linf 0.00378977, total time[s] 0.085776 +Converged at iteration 24, L1 7.4209e-05, Linf 0.00740009, total time[s] 0.063934 +Converged at iteration 24, L1 8.91034e-05, Linf 0.00617037, total time[s] 0.074275 +Converged at iteration 28, L1 6.51639e-05, Linf 0.00449807, total time[s] 0.087823 +Converged at iteration 33, L1 5.36355e-05, Linf 0.0041134, total time[s] 0.119156 +Converged at iteration 30, L1 7.024e-05, Linf 0.00185195, total time[s] 0.080019 +Converged at iteration 31, L1 4.77615e-05, Linf 0.00536367, total time[s] 0.091375 +Converged at iteration 31, L1 9.19837e-05, Linf 0.00497924, total time[s] 0.092553 +Converged at iteration 33, L1 5.91038e-05, Linf 0.00364162, total time[s] 0.09182 +Converged at iteration 33, L1 7.81909e-05, Linf 0.0271761, total time[s] 0.086973 +Converged at iteration 26, L1 8.6684e-05, Linf 0.00567869, total time[s] 0.069298 +Converged at iteration 25, L1 9.59218e-05, Linf 0.00656905, total time[s] 0.072123 +Converged at iteration 27, L1 5.59382e-05, Linf 0.00514454, total time[s] 0.086373 +Converged at iteration 40, L1 6.74734e-05, Linf 0.00363966, total time[s] 0.125459 +Converged at iteration 35, L1 7.62479e-05, Linf 0.00339568, total time[s] 0.130277 +Converged at iteration 30, L1 9.6319e-05, Linf 0.00433009, total time[s] 0.108441 +Converged at iteration 31, L1 6.22107e-05, Linf 0.00502562, total time[s] 0.091383 +Converged at iteration 27, L1 6.26251e-05, Linf 0.00499539, total time[s] 0.087029 +Converged at iteration 22, L1 8.58678e-05, Linf 0.00448837, total time[s] 0.057684 +Converged at iteration 20, L1 9.59781e-05, Linf 0.00392247, total time[s] 0.061618 +Converged at iteration 24, L1 8.84488e-05, Linf 0.00482835, total time[s] 0.085668 +Converged at iteration 28, L1 7.39116e-05, Linf 0.0044486, total time[s] 0.086613 +Converged at iteration 26, L1 8.14038e-05, Linf 0.00546629, total time[s] 0.085424 +Converged at iteration 22, L1 7.44818e-05, Linf 0.00508676, total time[s] 0.060493 +Converged at iteration 19, L1 6.63252e-05, Linf 0.00389314, total time[s] 0.071235 +Converged at iteration 30, L1 7.98665e-05, Linf 0.00329631, total time[s] 0.093122 +Converged at iteration 20, L1 8.44305e-05, Linf 0.00455028, total time[s] 0.056013 +Converged at iteration 24, L1 7.13671e-05, Linf 0.00463258, total time[s] 0.079927 +Converged at iteration 31, L1 8.95714e-05, Linf 0.00564123, total time[s] 0.103716 +Converged at iteration 27, L1 9.91286e-05, Linf 0.00569759, total time[s] 0.135324 +Converged at iteration 24, L1 8.79026e-05, Linf 0.00465021, total time[s] 0.096278 +Converged at iteration 23, L1 9.2187e-05, Linf 0.00410193, total time[s] 0.068494 +Converged at iteration 26, L1 7.22073e-05, Linf 0.0044607, total time[s] 0.096458 +Converged at iteration 29, L1 7.81554e-05, Linf 0.00479605, total time[s] 0.105742 +Converged at iteration 34, L1 7.09351e-05, Linf 0.0042265, total time[s] 0.106713 +Converged at iteration 30, L1 9.39611e-05, Linf 0.00442579, total time[s] 0.080766 +Converged at iteration 28, L1 9.49899e-05, Linf 0.00311063, total time[s] 0.076049 +Converged at iteration 32, L1 9.39302e-05, Linf 0.00374079, total time[s] 0.083683 +Converged at iteration 37, L1 7.33841e-05, Linf 0.00327812, total time[s] 0.105916 +Converged at iteration 33, L1 8.44872e-05, Linf 0.00469108, total time[s] 0.089641 +Converged at iteration 28, L1 9.65519e-05, Linf 0.00430197, total time[s] 0.101638 +Converged at iteration 24, L1 8.82887e-05, Linf 0.0032507, total time[s] 0.066504 +Converged at iteration 26, L1 8.98076e-05, Linf 0.00383974, total time[s] 0.074456 +Converged at iteration 39, L1 7.00689e-05, Linf 0.00709997, total time[s] 0.131759 +Converged at iteration 36, L1 7.12613e-05, Linf 0.00594676, total time[s] 0.105304 +Converged at iteration 24, L1 5.98495e-05, Linf 0.00281886, total time[s] 0.072113 +Converged at iteration 31, L1 5.69745e-05, Linf 0.00509051, total time[s] 0.085731 +Converged at iteration 25, L1 7.04127e-05, Linf 0.00532496, total time[s] 0.070291 +Converged at iteration 21, L1 6.60705e-05, Linf 0.00391074, total time[s] 0.059309 +Converged at iteration 19, L1 5.73882e-05, Linf 0.00452007, total time[s] 0.074582 +Converged at iteration 20, L1 7.59289e-05, Linf 0.00631522, total time[s] 0.05769 +Converged at iteration 24, L1 5.21085e-05, Linf 0.00410828, total time[s] 0.066469 +Converged at iteration 24, L1 6.26988e-05, Linf 0.0047833, total time[s] 0.065948 +Converged at iteration 20, L1 5.30391e-05, Linf 0.00521673, total time[s] 0.057532 +Converged at iteration 16, L1 9.02937e-05, Linf 0.00340806, total time[s] 0.04504 +Converged at iteration 32, L1 6.7813e-05, Linf 0.00271472, total time[s] 0.083741 +Converged at iteration 19, L1 9.07323e-05, Linf 0.00657443, total time[s] 0.061556 +Converged at iteration 23, L1 7.13269e-05, Linf 0.00629964, total time[s] 0.079211 +Converged at iteration 26, L1 6.39669e-05, Linf 0.00535742, total time[s] 0.093122 +Converged at iteration 23, L1 5.49189e-05, Linf 0.00496352, total time[s] 0.082153 +Converged at iteration 20, L1 6.77904e-05, Linf 0.00475977, total time[s] 0.067025 +Converged at iteration 22, L1 9.64916e-05, Linf 0.0041127, total time[s] 0.058451 +Converged at iteration 25, L1 8.07519e-05, Linf 0.00365374, total time[s] 0.083354 +Converged at iteration 28, L1 7.05572e-05, Linf 0.00363947, total time[s] 0.075859 +Converged at iteration 29, L1 6.62614e-05, Linf 0.00594826, total time[s] 0.074775 +Converged at iteration 27, L1 6.47445e-05, Linf 0.00385032, total time[s] 0.075542 +Converged at iteration 29, L1 7.44841e-05, Linf 0.00402981, total time[s] 0.099516 +Converged at iteration 29, L1 8.23361e-05, Linf 0.0026991, total time[s] 0.082608 +Converged at iteration 28, L1 6.4084e-05, Linf 0.00217838, total time[s] 0.07524 +Converged at iteration 33, L1 5.69934e-05, Linf 0.00610192, total time[s] 0.102117 +Converged at iteration 26, L1 9.01565e-05, Linf 0.00337711, total time[s] 0.07004 +Converged at iteration 25, L1 7.06631e-05, Linf 0.00201339, total time[s] 0.069244 +Converged at iteration 23, L1 5.82478e-05, Linf 0.00259017, total time[s] 0.071039 +Converged at iteration 38, L1 8.58601e-05, Linf 0.0120271, total time[s] 0.103788 +Converged at iteration 36, L1 4.92792e-05, Linf 0.00859216, total time[s] 0.101129 +Converged at iteration 24, L1 8.61217e-05, Linf 0.00734381, total time[s] 0.070105 +Converged at iteration 30, L1 7.69388e-05, Linf 0.00662811, total time[s] 0.092009 +Converged at iteration 24, L1 5.55739e-05, Linf 0.00471484, total time[s] 0.06386 +Converged at iteration 22, L1 5.8625e-05, Linf 0.00490994, total time[s] 0.072426 +Converged at iteration 19, L1 6.07594e-05, Linf 0.00697605, total time[s] 0.06172 +Converged at iteration 21, L1 4.05932e-05, Linf 0.00373027, total time[s] 0.062933 +Converged at iteration 23, L1 5.98102e-05, Linf 0.00310511, total time[s] 0.087628 +Converged at iteration 22, L1 8.10075e-05, Linf 0.00578665, total time[s] 0.063354 +Converged at iteration 19, L1 8.45959e-05, Linf 0.0050384, total time[s] 0.050205 +Converged at iteration 17, L1 6.41633e-05, Linf 0.00376762, total time[s] 0.072053 +Converged at iteration 32, L1 5.57051e-05, Linf 0.00435926, total time[s] 0.09584 +Converged at iteration 19, L1 9.17375e-05, Linf 0.00523875, total time[s] 0.050829 +Converged at iteration 22, L1 9.16159e-05, Linf 0.00547075, total time[s] 0.060973 +Converged at iteration 26, L1 6.43549e-05, Linf 0.00423631, total time[s] 0.139185 +Converged at iteration 24, L1 5.60556e-05, Linf 0.00235231, total time[s] 0.107838 +Converged at iteration 21, L1 5.22511e-05, Linf 0.00220947, total time[s] 0.083568 +Converged at iteration 23, L1 7.53648e-05, Linf 0.00278896, total time[s] 0.076342 +Converged at iteration 25, L1 6.99203e-05, Linf 0.00282339, total time[s] 0.095738 +Converged at iteration 26, L1 9.24583e-05, Linf 0.00359688, total time[s] 0.110166 +Converged at iteration 30, L1 5.19155e-05, Linf 0.00445917, total time[s] 0.102864 +Converged at iteration 28, L1 7.65007e-05, Linf 0.00278707, total time[s] 0.093143 +Converged at iteration 30, L1 5.70151e-05, Linf 0.00433377, total time[s] 0.10509 +Converged at iteration 29, L1 9.0294e-05, Linf 0.00240959, total time[s] 0.078751 +Converged at iteration 29, L1 6.46193e-05, Linf 0.00202009, total time[s] 0.078528 +Converged at iteration 32, L1 8.46631e-05, Linf 0.0098699, total time[s] 0.095658 +Converged at iteration 25, L1 7.13287e-05, Linf 0.00398398, total time[s] 0.08528 +Converged at iteration 25, L1 9.95133e-05, Linf 0.00385133, total time[s] 0.067335 +Converged at iteration 23, L1 7.41311e-05, Linf 0.00279894, total time[s] 0.067067 +Converged at iteration 38, L1 4.45725e-05, Linf 0.0140045, total time[s] 0.106774 +Converged at iteration 35, L1 9.35395e-05, Linf 0.0162696, total time[s] 0.098071 +Converged at iteration 24, L1 9.5845e-05, Linf 0.0116789, total time[s] 0.09241 +Converged at iteration 29, L1 8.13615e-05, Linf 0.0076168, total time[s] 0.078268 +Converged at iteration 23, L1 8.67382e-05, Linf 0.00579191, total time[s] 0.063038 +Converged at iteration 22, L1 4.91557e-05, Linf 0.00561134, total time[s] 0.064873 +Converged at iteration 19, L1 9.61475e-05, Linf 0.0119642, total time[s] 0.053225 +Converged at iteration 21, L1 7.01161e-05, Linf 0.00580179, total time[s] 0.062875 +Converged at iteration 23, L1 6.58572e-05, Linf 0.00304361, total time[s] 0.081212 +Converged at iteration 21, L1 9.17295e-05, Linf 0.00335577, total time[s] 0.076228 +Converged at iteration 20, L1 6.41532e-05, Linf 0.00282097, total time[s] 0.05768 +Converged at iteration 18, L1 5.68024e-05, Linf 0.00174188, total time[s] 0.059858 +Converged at iteration 32, L1 4.84733e-05, Linf 0.00624984, total time[s] 0.087762 +Converged at iteration 19, L1 8.74106e-05, Linf 0.00525965, total time[s] 0.05722 +Converged at iteration 22, L1 8.01042e-05, Linf 0.00475967, total time[s] 0.070934 +Converged at iteration 26, L1 8.07467e-05, Linf 0.00649086, total time[s] 0.071315 +Converged at iteration 25, L1 6.11378e-05, Linf 0.00305135, total time[s] 0.074101 +Converged at iteration 21, L1 8.92786e-05, Linf 0.00485558, total time[s] 0.060649 +Converged at iteration 23, L1 9.12793e-05, Linf 0.00276082, total time[s] 0.092065 +Converged at iteration 24, L1 9.46579e-05, Linf 0.00354391, total time[s] 0.085762 +Converged at iteration 25, L1 6.4318e-05, Linf 0.002503, total time[s] 0.083612 +Converged at iteration 31, L1 6.72842e-05, Linf 0.00417606, total time[s] 0.09759 +Converged at iteration 29, L1 7.45132e-05, Linf 0.00331136, total time[s] 0.091216 +Converged at iteration 30, L1 7.17675e-05, Linf 0.00754131, total time[s] 0.101203 +Converged at iteration 30, L1 6.10464e-05, Linf 0.00172573, total time[s] 0.08997 +Converged at iteration 31, L1 7.44512e-05, Linf 0.00354863, total time[s] 0.109252 +Converged at iteration 32, L1 7.93883e-05, Linf 0.013842, total time[s] 0.108244 +Converged at iteration 24, L1 8.08142e-05, Linf 0.00186788, total time[s] 0.078435 +Converged at iteration 26, L1 5.75207e-05, Linf 0.00386786, total time[s] 0.096765 +Converged at iteration 24, L1 6.71194e-05, Linf 0.00238495, total time[s] 0.07488 +Converged at iteration 37, L1 9.22704e-05, Linf 0.0241773, total time[s] 0.123625 +Converged at iteration 35, L1 9.55775e-05, Linf 0.0224025, total time[s] 0.110352 +Converged at iteration 25, L1 2.83044e-05, Linf 0.00801925, total time[s] 0.066639 +Converged at iteration 28, L1 9.21051e-05, Linf 0.00907246, total time[s] 0.08722 +Converged at iteration 24, L1 5.30153e-05, Linf 0.00541722, total time[s] 0.079286 +Converged at iteration 21, L1 8.54663e-05, Linf 0.010225, total time[s] 0.094902 +Converged at iteration 20, L1 3.96089e-05, Linf 0.0082587, total time[s] 0.078212 +Converged at iteration 21, L1 9.34065e-05, Linf 0.00807703, total time[s] 0.087304 +Converged at iteration 23, L1 8.91836e-05, Linf 0.00394386, total time[s] 0.102853 +Converged at iteration 23, L1 8.68023e-05, Linf 0.00244896, total time[s] 0.087162 +Converged at iteration 21, L1 5.83621e-05, Linf 0.00232188, total time[s] 0.076667 +Converged at iteration 18, L1 8.58454e-05, Linf 0.003761, total time[s] 0.074556 +Converged at iteration 32, L1 4.44502e-05, Linf 0.00746381, total time[s] 0.106339 +Converged at iteration 19, L1 9.43993e-05, Linf 0.00535799, total time[s] 0.089248 +Converged at iteration 22, L1 7.90583e-05, Linf 0.00457378, total time[s] 0.082412 +Converged at iteration 26, L1 5.81998e-05, Linf 0.00460517, total time[s] 0.111941 +Converged at iteration 26, L1 5.39788e-05, Linf 0.00254955, total time[s] 0.07741 +Converged at iteration 22, L1 6.9102e-05, Linf 0.00412184, total time[s] 0.067182 +Converged at iteration 23, L1 9.77603e-05, Linf 0.00269562, total time[s] 0.066475 +Converged at iteration 24, L1 7.38877e-05, Linf 0.00340778, total time[s] 0.08982 +Converged at iteration 22, L1 8.71341e-05, Linf 0.00127642, total time[s] 0.078052 +Converged at iteration 31, L1 9.7486e-05, Linf 0.00766555, total time[s] 0.100397 +Converged at iteration 29, L1 9.53741e-05, Linf 0.00384137, total time[s] 0.077987 +Converged at iteration 30, L1 9.51045e-05, Linf 0.0114325, total time[s] 0.101743 +Converged at iteration 30, L1 7.84469e-05, Linf 0.00272262, total time[s] 0.089295 +Converged at iteration 32, L1 3.96792e-05, Linf 0.00214926, total time[s] 0.12711 +Converged at iteration 32, L1 8.11189e-05, Linf 0.019209, total time[s] 0.088706 +Converged at iteration 27, L1 6.50919e-05, Linf 0.00496798, total time[s] 0.083879 +Converged at iteration 25, L1 8.89678e-05, Linf 0.00610447, total time[s] 0.069986 +Converged at iteration 25, L1 5.84559e-05, Linf 0.00284375, total time[s] 0.097048 +Converged at iteration 37, L1 6.5023e-05, Linf 0.0240592, total time[s] 0.106845 +Converged at iteration 36, L1 2.6872e-05, Linf 0.0137416, total time[s] 0.096051 +Converged at iteration 25, L1 3.51896e-05, Linf 0.00746497, total time[s] 0.080987 +Converged at iteration 28, L1 5.74802e-05, Linf 0.00799915, total time[s] 0.100299 +Converged at iteration 24, L1 6.03228e-05, Linf 0.00600496, total time[s] 0.064502 +Converged at iteration 21, L1 7.16191e-05, Linf 0.00905611, total time[s] 0.055783 +Converged at iteration 20, L1 6.69068e-05, Linf 0.0134222, total time[s] 0.055335 +Converged at iteration 22, L1 4.65427e-05, Linf 0.0037553, total time[s] 0.059785 +Converged at iteration 24, L1 6.84475e-05, Linf 0.00374503, total time[s] 0.06494 +Converged at iteration 24, L1 8.56614e-05, Linf 0.00370234, total time[s] 0.064033 +Converged at iteration 21, L1 9.08527e-05, Linf 0.00326252, total time[s] 0.060738 +Converged at iteration 19, L1 4.6512e-05, Linf 0.00309888, total time[s] 0.052514 +Converged at iteration 32, L1 4.35708e-05, Linf 0.00438975, total time[s] 0.099534 +Converged at iteration 20, L1 6.02036e-05, Linf 0.00398716, total time[s] 0.063523 +Converged at iteration 22, L1 8.68401e-05, Linf 0.0046915, total time[s] 0.059816 +Converged at iteration 26, L1 5.55972e-05, Linf 0.0049249, total time[s] 0.109511 +Converged at iteration 26, L1 8.75693e-05, Linf 0.00383538, total time[s] 0.085874 +Converged at iteration 23, L1 6.17178e-05, Linf 0.00255129, total time[s] 0.07383 +Converged at iteration 23, L1 9.33077e-05, Linf 0.0027743, total time[s] 0.08374 +Converged at iteration 24, L1 5.73551e-05, Linf 0.00306516, total time[s] 0.069689 +Converged at iteration 25, L1 8.15749e-05, Linf 0.00345334, total time[s] 0.106938 +Converged at iteration 32, L1 6.20884e-05, Linf 0.00548462, total time[s] 0.144825 +Converged at iteration 30, L1 6.27654e-05, Linf 0.00268705, total time[s] 0.106939 +Converged at iteration 31, L1 4.9165e-05, Linf 0.0051319, total time[s] 0.092326 +Converged at iteration 31, L1 5.72643e-05, Linf 0.00311528, total time[s] 0.107176 +Converged at iteration 32, L1 7.24225e-05, Linf 0.00425343, total time[s] 0.092264 +Converged at iteration 32, L1 9.15022e-05, Linf 0.0246457, total time[s] 0.097624 +Converged at iteration 28, L1 4.54095e-05, Linf 0.00704731, total time[s] 0.121331 +Converged at iteration 25, L1 6.40728e-05, Linf 0.00276312, total time[s] 0.107443 +Converged at iteration 25, L1 9.33932e-05, Linf 0.0057442, total time[s] 0.103666 +Converged at iteration 37, L1 5.09952e-05, Linf 0.0220554, total time[s] 0.136265 +Converged at iteration 35, L1 9.19219e-05, Linf 0.0259421, total time[s] 0.124454 +Converged at iteration 25, L1 4.5329e-05, Linf 0.00676622, total time[s] 0.118382 +Converged at iteration 27, L1 8.18315e-05, Linf 0.00807772, total time[s] 0.104307 +Converged at iteration 23, L1 7.04807e-05, Linf 0.00476429, total time[s] 0.08079 +Converged at iteration 21, L1 7.11099e-05, Linf 0.00871594, total time[s] 0.060728 +Converged at iteration 21, L1 2.62195e-05, Linf 0.00563139, total time[s] 0.095864 +Converged at iteration 23, L1 4.0263e-05, Linf 0.00557116, total time[s] 0.107742 +Converged at iteration 25, L1 6.53933e-05, Linf 0.00539789, total time[s] 0.111342 +Converged at iteration 25, L1 7.00211e-05, Linf 0.00397282, total time[s] 0.069575 +Converged at iteration 22, L1 6.78656e-05, Linf 0.00318976, total time[s] 0.117088 +Converged at iteration 19, L1 5.00966e-05, Linf 0.00372737, total time[s] 0.075291 +Converged at iteration 32, L1 4.50692e-05, Linf 0.00434385, total time[s] 0.125398 +Converged at iteration 20, L1 7.481e-05, Linf 0.00484972, total time[s] 0.072633 +Converged at iteration 23, L1 5.78573e-05, Linf 0.00407195, total time[s] 0.092138 +Converged at iteration 26, L1 8.40773e-05, Linf 0.00544451, total time[s] 0.118783 +Converged at iteration 27, L1 6.9197e-05, Linf 0.00324944, total time[s] 0.098229 +Converged at iteration 23, L1 9.49295e-05, Linf 0.0045497, total time[s] 0.099346 +Converged at iteration 23, L1 7.63319e-05, Linf 0.00315615, total time[s] 0.074698 +Converged at iteration 23, L1 9.49686e-05, Linf 0.00507574, total time[s] 0.080962 +Converged at iteration 26, L1 8.22361e-05, Linf 0.00460683, total time[s] 0.095585 +Converged at iteration 32, L1 9.61323e-05, Linf 0.00922645, total time[s] 0.128203 +Converged at iteration 30, L1 6.22438e-05, Linf 0.00230703, total time[s] 0.12116 +Converged at iteration 31, L1 5.90775e-05, Linf 0.00814569, total time[s] 0.114593 +Converged at iteration 31, L1 7.152e-05, Linf 0.00477287, total time[s] 0.150011 +Converged at iteration 33, L1 3.86304e-05, Linf 0.00224592, total time[s] 0.104973 +Converged at iteration 33, L1 2.60678e-05, Linf 0.0146919, total time[s] 0.122406 +Converged at iteration 28, L1 4.50721e-05, Linf 0.00750335, total time[s] 0.120079 +Converged at iteration 25, L1 6.58225e-05, Linf 0.00351829, total time[s] 0.116161 +Converged at iteration 26, L1 7.0872e-05, Linf 0.00550568, total time[s] 0.102724 +Converged at iteration 37, L1 5.59929e-05, Linf 0.0226799, total time[s] 0.136085 +Converged at iteration 35, L1 9.02721e-05, Linf 0.0258229, total time[s] 0.119929 +Converged at iteration 25, L1 5.51097e-05, Linf 0.00700842, total time[s] 0.068802 +Converged at iteration 27, L1 4.95835e-05, Linf 0.00602557, total time[s] 0.080602 +Converged at iteration 22, L1 5.15609e-05, Linf 0.00217843, total time[s] 0.068795 +Converged at iteration 21, L1 7.14605e-05, Linf 0.00802937, total time[s] 0.065772 +Converged at iteration 21, L1 3.67058e-05, Linf 0.00640545, total time[s] 0.074108 +Converged at iteration 23, L1 8.17361e-05, Linf 0.010248, total time[s] 0.076288 +Converged at iteration 26, L1 4.91038e-05, Linf 0.00533311, total time[s] 0.074136 +Converged at iteration 25, L1 9.47435e-05, Linf 0.00618676, total time[s] 0.07955 +Converged at iteration 22, L1 9.09634e-05, Linf 0.00465042, total time[s] 0.080021 +Converged at iteration 19, L1 5.1794e-05, Linf 0.00387696, total time[s] 0.087701 +Converged at iteration 32, L1 4.29088e-05, Linf 0.00358033, total time[s] 0.143643 +Converged at iteration 20, L1 8.56495e-05, Linf 0.00544045, total time[s] 0.058967 +Converged at iteration 23, L1 6.88364e-05, Linf 0.00480462, total time[s] 0.07107 +Converged at iteration 27, L1 6.46131e-05, Linf 0.00283737, total time[s] 0.096613 +Converged at iteration 28, L1 5.07868e-05, Linf 0.00260886, total time[s] 0.076781 +Converged at iteration 24, L1 8.40702e-05, Linf 0.00489912, total time[s] 0.08687 +Converged at iteration 23, L1 8.1343e-05, Linf 0.00346724, total time[s] 0.094161 +Converged at iteration 24, L1 6.03298e-05, Linf 0.00433711, total time[s] 0.081958 +Converged at iteration 27, L1 6.65732e-05, Linf 0.0046871, total time[s] 0.104669 +Converged at iteration 33, L1 5.6812e-05, Linf 0.00561235, total time[s] 0.09007 +Converged at iteration 29, L1 9.5044e-05, Linf 0.00301365, total time[s] 0.090132 +Converged at iteration 31, L1 7.13615e-05, Linf 0.0112142, total time[s] 0.087178 +Converged at iteration 31, L1 8.20418e-05, Linf 0.00563723, total time[s] 0.084864 +Converged at iteration 33, L1 6.13546e-05, Linf 0.00353786, total time[s] 0.102314 +Converged at iteration 33, L1 3.69868e-05, Linf 0.0191222, total time[s] 0.090905 +Converged at iteration 27, L1 9.1046e-05, Linf 0.00812379, total time[s] 0.076453 +Converged at iteration 25, L1 7.50724e-05, Linf 0.00531621, total time[s] 0.070637 +Converged at iteration 26, L1 9.67291e-05, Linf 0.0089639, total time[s] 0.07469 +Converged at iteration 38, L1 2.08229e-05, Linf 0.0126998, total time[s] 0.105812 +Converged at iteration 36, L1 2.79518e-05, Linf 0.0108384, total time[s] 0.101977 +Converged at iteration 25, L1 7.15529e-05, Linf 0.0080437, total time[s] 0.08083 +Converged at iteration 27, L1 4.9802e-05, Linf 0.00602228, total time[s] 0.081909 +Converged at iteration 22, L1 8.43102e-05, Linf 0.00328472, total time[s] 0.067805 +Converged at iteration 21, L1 7.37454e-05, Linf 0.00796841, total time[s] 0.092848 +Converged at iteration 21, L1 4.42627e-05, Linf 0.00546094, total time[s] 0.066397 +Converged at iteration 24, L1 4.01325e-05, Linf 0.00729417, total time[s] 0.08922 +Converged at iteration 26, L1 6.31102e-05, Linf 0.00698976, total time[s] 0.075079 +Converged at iteration 26, L1 5.71867e-05, Linf 0.00524167, total time[s] 0.076236 +Converged at iteration 23, L1 5.07835e-05, Linf 0.00441112, total time[s] 0.061401 +Converged at iteration 19, L1 6.27494e-05, Linf 0.00385261, total time[s] 0.055332 +Converged at iteration 32, L1 4.10549e-05, Linf 0.00270413, total time[s] 0.090685 +Converged at iteration 20, L1 8.47712e-05, Linf 0.00574372, total time[s] 0.071839 +Converged at iteration 23, L1 7.29273e-05, Linf 0.00496422, total time[s] 0.077718 +Converged at iteration 27, L1 6.99806e-05, Linf 0.00422941, total time[s] 0.086298 +Converged at iteration 28, L1 6.52652e-05, Linf 0.00356231, total time[s] 0.105797 +Converged at iteration 25, L1 6.27197e-05, Linf 0.00402878, total time[s] 0.077362 +Converged at iteration 23, L1 9.40896e-05, Linf 0.00365213, total time[s] 0.060889 +Converged at iteration 24, L1 7.59138e-05, Linf 0.0054684, total time[s] 0.087327 +Converged at iteration 27, L1 8.07972e-05, Linf 0.00503376, total time[s] 0.074631 +Converged at iteration 33, L1 6.03385e-05, Linf 0.00524386, total time[s] 0.084829 +Converged at iteration 29, L1 9.87783e-05, Linf 0.00332365, total time[s] 0.080923 +Converged at iteration 31, L1 6.75776e-05, Linf 0.00925808, total time[s] 0.083507 +Converged at iteration 31, L1 7.37885e-05, Linf 0.00487231, total time[s] 0.08452 +Converged at iteration 33, L1 6.94407e-05, Linf 0.00396164, total time[s] 0.103496 +Converged at iteration 33, L1 5.69747e-05, Linf 0.0232124, total time[s] 0.09598 +Converged at iteration 27, L1 6.17698e-05, Linf 0.00505404, total time[s] 0.09059 +Converged at iteration 25, L1 8.7631e-05, Linf 0.00687729, total time[s] 0.098175 +Converged at iteration 27, L1 5.35888e-05, Linf 0.00581161, total time[s] 0.08719 +Converged at iteration 38, L1 4.42777e-05, Linf 0.020901, total time[s] 0.125039 +Converged at iteration 36, L1 3.20688e-05, Linf 0.0127365, total time[s] 0.102678 +Converged at iteration 25, L1 7.07994e-05, Linf 0.00650356, total time[s] 0.076333 +Converged at iteration 27, L1 6.41132e-05, Linf 0.00667178, total time[s] 0.080162 +Converged at iteration 23, L1 5.51904e-05, Linf 0.00293109, total time[s] 0.082985 +Converged at iteration 21, L1 6.96934e-05, Linf 0.00705179, total time[s] 0.081169 +Converged at iteration 21, L1 6.16997e-05, Linf 0.00557151, total time[s] 0.066206 +Converged at iteration 24, L1 5.90069e-05, Linf 0.0109945, total time[s] 0.086559 +Converged at iteration 26, L1 7.30809e-05, Linf 0.00825991, total time[s] 0.079058 +Converged at iteration 26, L1 6.49465e-05, Linf 0.00552908, total time[s] 0.075861 +Converged at iteration 23, L1 6.05685e-05, Linf 0.00465045, total time[s] 0.079402 +Converged at iteration 19, L1 8.53831e-05, Linf 0.00385087, total time[s] 0.075839 +Converged at iteration 32, L1 4.17375e-05, Linf 0.00269133, total time[s] 0.088341 +Converged at iteration 20, L1 8.7233e-05, Linf 0.00566082, total time[s] 0.086988 +Converged at iteration 23, L1 7.84151e-05, Linf 0.00473772, total time[s] 0.068531 +Converged at iteration 27, L1 8.1426e-05, Linf 0.0151929, total time[s] 0.083689 +Converged at iteration 28, L1 7.58797e-05, Linf 0.00421779, total time[s] 0.080743 +Converged at iteration 25, L1 8.5174e-05, Linf 0.00543446, total time[s] 0.116593 +Converged at iteration 23, L1 9.94738e-05, Linf 0.00359617, total time[s] 0.077902 +Converged at iteration 24, L1 8.22763e-05, Linf 0.00591294, total time[s] 0.081054 +Converged at iteration 27, L1 9.61866e-05, Linf 0.00624935, total time[s] 0.092084 +Converged at iteration 33, L1 7.31086e-05, Linf 0.00951591, total time[s] 0.119534 +Converged at iteration 29, L1 9.09241e-05, Linf 0.00294527, total time[s] 0.104785 +Converged at iteration 31, L1 5.62091e-05, Linf 0.00790403, total time[s] 0.102806 +Converged at iteration 31, L1 6.28711e-05, Linf 0.00445478, total time[s] 0.100704 +Converged at iteration 33, L1 8.35664e-05, Linf 0.0056907, total time[s] 0.097863 +Converged at iteration 33, L1 6.79712e-05, Linf 0.026105, total time[s] 0.090305 +Converged at iteration 26, L1 8.68175e-05, Linf 0.00547809, total time[s] 0.090262 +Converged at iteration 25, L1 9.39175e-05, Linf 0.00829054, total time[s] 0.140628 +Converged at iteration 27, L1 6.2037e-05, Linf 0.00628342, total time[s] 0.109408 +Converged at iteration 40, L1 6.79871e-05, Linf 0.00367618, total time[s] 0.126214 +Converged at iteration 35, L1 7.63519e-05, Linf 0.00339899, total time[s] 0.101144 +Converged at iteration 30, L1 9.71649e-05, Linf 0.0042294, total time[s] 0.104328 +Converged at iteration 31, L1 6.21049e-05, Linf 0.00502563, total time[s] 0.08751 +Converged at iteration 27, L1 6.26105e-05, Linf 0.00499536, total time[s] 0.08975 +Converged at iteration 22, L1 8.59167e-05, Linf 0.00448836, total time[s] 0.066513 +Converged at iteration 20, L1 9.61429e-05, Linf 0.00397748, total time[s] 0.070979 +Converged at iteration 24, L1 8.84153e-05, Linf 0.00482699, total time[s] 0.079974 +Converged at iteration 28, L1 7.3844e-05, Linf 0.00445903, total time[s] 0.084865 +Converged at iteration 26, L1 8.11973e-05, Linf 0.00554107, total time[s] 0.076903 +Converged at iteration 22, L1 7.40025e-05, Linf 0.00508775, total time[s] 0.059133 +Converged at iteration 19, L1 6.63072e-05, Linf 0.00385086, total time[s] 0.064064 +Converged at iteration 30, L1 7.99278e-05, Linf 0.00329632, total time[s] 0.095829 +Converged at iteration 20, L1 8.53047e-05, Linf 0.00498249, total time[s] 0.074696 +Converged at iteration 24, L1 7.12285e-05, Linf 0.00463852, total time[s] 0.095634 +Converged at iteration 31, L1 8.93537e-05, Linf 0.00569154, total time[s] 0.09503 +Converged at iteration 27, L1 9.91538e-05, Linf 0.00569905, total time[s] 0.078746 +Converged at iteration 24, L1 8.7901e-05, Linf 0.00465016, total time[s] 0.080369 +Converged at iteration 23, L1 9.21786e-05, Linf 0.0041019, total time[s] 0.077543 +Converged at iteration 26, L1 7.22241e-05, Linf 0.00446099, total time[s] 0.082183 +Converged at iteration 29, L1 7.90569e-05, Linf 0.006352, total time[s] 0.114058 +Converged at iteration 34, L1 7.40014e-05, Linf 0.00422778, total time[s] 0.189139 +Converged at iteration 30, L1 9.39304e-05, Linf 0.00442541, total time[s] 0.102574 +Converged at iteration 28, L1 9.49833e-05, Linf 0.00309348, total time[s] 0.082342 +Converged at iteration 32, L1 9.47854e-05, Linf 0.0037446, total time[s] 0.112929 +Converged at iteration 37, L1 7.48208e-05, Linf 0.0032915, total time[s] 0.183311 +Converged at iteration 33, L1 8.46747e-05, Linf 0.00474287, total time[s] 0.108401 +Converged at iteration 28, L1 9.65657e-05, Linf 0.0043018, total time[s] 0.093428 +Converged at iteration 24, L1 8.83324e-05, Linf 0.00325071, total time[s] 0.079883 +Converged at iteration 26, L1 8.98147e-05, Linf 0.00383961, total time[s] 0.078241 +Converged at iteration 39, L1 2.86128e-05, Linf 0.0166768, total time[s] 0.104362 +Converged at iteration 37, L1 5.95299e-05, Linf 0.0250118, total time[s] 0.102124 +Converged at iteration 26, L1 5.52525e-05, Linf 0.0131866, total time[s] 0.0759 +Converged at iteration 28, L1 9.84241e-05, Linf 0.0144894, total time[s] 0.083892 +Converged at iteration 22, L1 4.784e-05, Linf 0.00339441, total time[s] 0.074132 +Converged at iteration 21, L1 7.62816e-05, Linf 0.00566142, total time[s] 0.070249 +Converged at iteration 21, L1 4.20319e-05, Linf 0.0060761, total time[s] 0.061963 +Converged at iteration 22, L1 6.96701e-05, Linf 0.00770762, total time[s] 0.062844 +Converged at iteration 23, L1 7.40928e-05, Linf 0.00320382, total time[s] 0.064289 +Converged at iteration 24, L1 6.18737e-05, Linf 0.00467768, total time[s] 0.075867 +Converged at iteration 22, L1 5.45921e-05, Linf 0.00392156, total time[s] 0.069118 +Converged at iteration 20, L1 8.97497e-05, Linf 0.00638866, total time[s] 0.062879 +Converged at iteration 34, L1 3.32934e-05, Linf 0.00663663, total time[s] 0.133614 +Converged at iteration 21, L1 6.69656e-05, Linf 0.0041882, total time[s] 0.060548 +Converged at iteration 23, L1 6.41195e-05, Linf 0.0033512, total time[s] 0.059325 +Converged at iteration 26, L1 5.49709e-05, Linf 0.00288854, total time[s] 0.075305 +Converged at iteration 27, L1 7.82495e-05, Linf 0.0052097, total time[s] 0.072824 +Converged at iteration 24, L1 6.2679e-05, Linf 0.00321773, total time[s] 0.084452 +Converged at iteration 24, L1 9.06039e-05, Linf 0.00471041, total time[s] 0.072718 +Converged at iteration 25, L1 6.76381e-05, Linf 0.00543162, total time[s] 0.078296 +Converged at iteration 28, L1 6.29963e-05, Linf 0.00434535, total time[s] 0.077784 +Converged at iteration 30, L1 8.41865e-05, Linf 0.00897732, total time[s] 0.107907 +Converged at iteration 29, L1 6.30307e-05, Linf 0.00449045, total time[s] 0.083069 +Converged at iteration 31, L1 4.51177e-05, Linf 0.010371, total time[s] 0.080279 +Converged at iteration 31, L1 5.84281e-05, Linf 0.00545889, total time[s] 0.102907 +Converged at iteration 31, L1 5.63005e-05, Linf 0.00748801, total time[s] 0.089637 +Converged at iteration 33, L1 8.42406e-05, Linf 0.0268697, total time[s] 0.095108 +Converged at iteration 24, L1 9.16793e-05, Linf 0.00650356, total time[s] 0.072076 +Converged at iteration 25, L1 7.73736e-05, Linf 0.00381914, total time[s] 0.069472 +Converged at iteration 26, L1 6.77278e-05, Linf 0.00595322, total time[s] 0.093929 +Converged at iteration 39, L1 2.65431e-05, Linf 0.0163458, total time[s] 0.126456 +Converged at iteration 37, L1 4.09972e-05, Linf 0.0170436, total time[s] 0.106565 +Converged at iteration 26, L1 4.19101e-05, Linf 0.0108902, total time[s] 0.081797 +Converged at iteration 29, L1 4.71051e-05, Linf 0.00844508, total time[s] 0.101596 +Converged at iteration 22, L1 5.23103e-05, Linf 0.00480934, total time[s] 0.092547 +Converged at iteration 21, L1 7.00532e-05, Linf 0.00423236, total time[s] 0.062768 +Converged at iteration 20, L1 7.92951e-05, Linf 0.0112104, total time[s] 0.065032 +Converged at iteration 22, L1 5.79344e-05, Linf 0.00584069, total time[s] 0.072608 +Converged at iteration 23, L1 6.95511e-05, Linf 0.00301505, total time[s] 0.093243 +Converged at iteration 23, L1 7.73398e-05, Linf 0.00406145, total time[s] 0.070014 +Converged at iteration 21, L1 9.11077e-05, Linf 0.00486244, total time[s] 0.068658 +Converged at iteration 20, L1 6.89339e-05, Linf 0.0040932, total time[s] 0.055078 +Converged at iteration 33, L1 7.72207e-05, Linf 0.0112989, total time[s] 0.118992 +Converged at iteration 20, L1 9.5991e-05, Linf 0.0050376, total time[s] 0.080139 +Converged at iteration 22, L1 9.03184e-05, Linf 0.00462336, total time[s] 0.073064 +Converged at iteration 26, L1 5.07783e-05, Linf 0.0084139, total time[s] 0.38798 +Converged at iteration 27, L1 7.00348e-05, Linf 0.004148, total time[s] 0.082728 +Converged at iteration 24, L1 5.84245e-05, Linf 0.00287694, total time[s] 0.097608 +Converged at iteration 24, L1 8.8929e-05, Linf 0.00261635, total time[s] 0.073016 +Converged at iteration 25, L1 6.44125e-05, Linf 0.00312611, total time[s] 0.073187 +Converged at iteration 26, L1 8.33679e-05, Linf 0.00410536, total time[s] 0.087034 +Converged at iteration 31, L1 5.26434e-05, Linf 0.0062737, total time[s] 0.085986 +Converged at iteration 29, L1 8.46743e-05, Linf 0.0072447, total time[s] 0.106204 +Converged at iteration 30, L1 9.94991e-05, Linf 0.0146548, total time[s] 0.08863 +Converged at iteration 30, L1 8.43482e-05, Linf 0.00476093, total time[s] 0.083377 +Converged at iteration 31, L1 6.96449e-05, Linf 0.00937411, total time[s] 0.088208 +Converged at iteration 33, L1 5.33634e-05, Linf 0.0212641, total time[s] 0.105317 +Converged at iteration 23, L1 5.95617e-05, Linf 0.00252876, total time[s] 0.063384 +Converged at iteration 25, L1 7.11551e-05, Linf 0.00335403, total time[s] 0.068993 +Converged at iteration 26, L1 6.0766e-05, Linf 0.00556545, total time[s] 0.068485 +Converged at iteration 38, L1 9.5451e-05, Linf 0.0271666, total time[s] 0.109647 +Converged at iteration 36, L1 9.43784e-05, Linf 0.0239934, total time[s] 0.095167 +Converged at iteration 26, L1 3.9274e-05, Linf 0.00874604, total time[s] 0.071637 +Converged at iteration 29, L1 6.38178e-05, Linf 0.00845844, total time[s] 0.091665 +Converged at iteration 22, L1 5.68302e-05, Linf 0.00374327, total time[s] 0.075811 +Converged at iteration 21, L1 7.71226e-05, Linf 0.00469019, total time[s] 0.071629 +Converged at iteration 20, L1 7.82629e-05, Linf 0.0095898, total time[s] 0.054203 +Converged at iteration 22, L1 5.98548e-05, Linf 0.00549067, total time[s] 0.066773 +Converged at iteration 23, L1 6.9422e-05, Linf 0.00284961, total time[s] 0.075713 +Converged at iteration 22, L1 9.22859e-05, Linf 0.00280621, total time[s] 0.064584 +Converged at iteration 21, L1 7.2167e-05, Linf 0.00374752, total time[s] 0.08619 +Converged at iteration 20, L1 5.57881e-05, Linf 0.00336201, total time[s] 0.064456 +Converged at iteration 33, L1 5.64071e-05, Linf 0.00807779, total time[s] 0.127308 +Converged at iteration 20, L1 7.41976e-05, Linf 0.00454267, total time[s] 0.081891 +Converged at iteration 22, L1 7.3832e-05, Linf 0.00440573, total time[s] 0.06713 +Converged at iteration 26, L1 6.71586e-05, Linf 0.014985, total time[s] 0.067897 +Converged at iteration 27, L1 6.09076e-05, Linf 0.00328537, total time[s] 0.073816 +Converged at iteration 24, L1 5.6367e-05, Linf 0.00279729, total time[s] 0.089628 +Converged at iteration 24, L1 7.69394e-05, Linf 0.00230411, total time[s] 0.074013 +Converged at iteration 24, L1 9.62518e-05, Linf 0.00406057, total time[s] 0.092424 +Converged at iteration 23, L1 8.09891e-05, Linf 0.00171632, total time[s] 0.068919 +Converged at iteration 31, L1 7.13776e-05, Linf 0.0105371, total time[s] 0.082781 +Converged at iteration 30, L1 6.22574e-05, Linf 0.00665659, total time[s] 0.081592 +Converged at iteration 30, L1 8.89519e-05, Linf 0.0117719, total time[s] 0.097628 +Converged at iteration 30, L1 7.34534e-05, Linf 0.00350593, total time[s] 0.082224 +Converged at iteration 31, L1 9.98801e-05, Linf 0.0131595, total time[s] 0.093887 +Converged at iteration 33, L1 3.34851e-05, Linf 0.0160693, total time[s] 0.098624 +Converged at iteration 23, L1 8.01158e-05, Linf 0.00396244, total time[s] 0.063318 +Converged at iteration 25, L1 6.17607e-05, Linf 0.00297735, total time[s] 0.069716 +Converged at iteration 25, L1 9.70054e-05, Linf 0.00718483, total time[s] 0.069744 +Converged at iteration 38, L1 7.67984e-05, Linf 0.0227488, total time[s] 0.11342 +Converged at iteration 36, L1 5.71396e-05, Linf 0.018481, total time[s] 0.108703 +Converged at iteration 26, L1 4.01946e-05, Linf 0.00675795, total time[s] 0.112188 +Converged at iteration 29, L1 8.32802e-05, Linf 0.00846829, total time[s] 0.086879 +Converged at iteration 22, L1 6.66294e-05, Linf 0.0039275, total time[s] 0.068998 +Converged at iteration 21, L1 8.34326e-05, Linf 0.00507855, total time[s] 0.057603 +Converged at iteration 20, L1 8.23469e-05, Linf 0.00827892, total time[s] 0.073411 +Converged at iteration 22, L1 6.86092e-05, Linf 0.00556268, total time[s] 0.059524 +Converged at iteration 23, L1 6.62951e-05, Linf 0.00287757, total time[s] 0.068272 +Converged at iteration 22, L1 5.92364e-05, Linf 0.00262219, total time[s] 0.064466 +Converged at iteration 20, L1 9.95136e-05, Linf 0.00574558, total time[s] 0.064601 +Converged at iteration 19, L1 9.0353e-05, Linf 0.00481857, total time[s] 0.057976 +Converged at iteration 33, L1 3.98091e-05, Linf 0.00621409, total time[s] 0.112957 +Converged at iteration 19, L1 9.96985e-05, Linf 0.00567417, total time[s] 0.056694 +Converged at iteration 22, L1 6.30006e-05, Linf 0.00442267, total time[s] 0.076364 +Converged at iteration 26, L1 9.55108e-05, Linf 0.0167519, total time[s] 0.15893 +Converged at iteration 26, L1 8.77201e-05, Linf 0.00350745, total time[s] 0.087792 +Converged at iteration 23, L1 9.30331e-05, Linf 0.00271061, total time[s] 0.070135 +Converged at iteration 24, L1 5.95542e-05, Linf 0.00204259, total time[s] 0.073013 +Converged at iteration 24, L1 8.11978e-05, Linf 0.00385404, total time[s] 0.066973 +Converged at iteration 22, L1 8.92162e-05, Linf 0.00301888, total time[s] 0.076782 +Converged at iteration 32, L1 5.29465e-05, Linf 0.00925386, total time[s] 0.108615 +Converged at iteration 30, L1 7.0867e-05, Linf 0.00628115, total time[s] 0.113837 +Converged at iteration 30, L1 7.50941e-05, Linf 0.00943466, total time[s] 0.088398 +Converged at iteration 30, L1 7.61218e-05, Linf 0.00426606, total time[s] 0.078002 +Converged at iteration 32, L1 7.26464e-05, Linf 0.0100028, total time[s] 0.086091 +Converged at iteration 32, L1 8.88088e-05, Linf 0.0175874, total time[s] 0.093031 +Converged at iteration 24, L1 8.99994e-05, Linf 0.0150333, total time[s] 0.066844 +Converged at iteration 25, L1 5.94665e-05, Linf 0.00267925, total time[s] 0.070554 +Converged at iteration 25, L1 9.09208e-05, Linf 0.00726945, total time[s] 0.084067 +Converged at iteration 38, L1 7.3568e-05, Linf 0.0179152, total time[s] 0.115246 +Converged at iteration 36, L1 4.43195e-05, Linf 0.0129201, total time[s] 0.096893 +Converged at iteration 26, L1 4.26923e-05, Linf 0.00498286, total time[s] 0.085772 +Converged at iteration 29, L1 9.91946e-05, Linf 0.00848632, total time[s] 0.07811 +Converged at iteration 22, L1 8.28292e-05, Linf 0.00497427, total time[s] 0.092911 +Converged at iteration 21, L1 8.81968e-05, Linf 0.00534197, total time[s] 0.071016 +Converged at iteration 20, L1 8.31196e-05, Linf 0.00767254, total time[s] 0.053275 +Converged at iteration 22, L1 7.02106e-05, Linf 0.00551122, total time[s] 0.061616 +Converged at iteration 23, L1 6.09942e-05, Linf 0.00257916, total time[s] 0.063591 +Converged at iteration 21, L1 8.21346e-05, Linf 0.00549654, total time[s] 0.067741 +Converged at iteration 20, L1 7.11839e-05, Linf 0.00683884, total time[s] 0.057077 +Converged at iteration 19, L1 7.62163e-05, Linf 0.00425222, total time[s] 0.057068 +Converged at iteration 32, L1 8.13118e-05, Linf 0.00680531, total time[s] 0.091577 +Converged at iteration 19, L1 8.22803e-05, Linf 0.00539437, total time[s] 0.056619 +Converged at iteration 22, L1 6.14908e-05, Linf 0.00443084, total time[s] 0.071668 +Converged at iteration 27, L1 5.21285e-05, Linf 0.0101054, total time[s] 0.092906 +Converged at iteration 26, L1 6.50924e-05, Linf 0.00252451, total time[s] 0.087534 +Converged at iteration 23, L1 6.42893e-05, Linf 0.00211794, total time[s] 0.086445 +Converged at iteration 23, L1 7.69043e-05, Linf 0.00279712, total time[s] 0.069142 +Converged at iteration 24, L1 7.65467e-05, Linf 0.00398512, total time[s] 0.075548 +Converged at iteration 24, L1 8.37581e-05, Linf 0.00318703, total time[s] 0.073407 +Converged at iteration 32, L1 7.24975e-05, Linf 0.0103839, total time[s] 0.090907 +Converged at iteration 29, L1 9.52977e-05, Linf 0.00514994, total time[s] 0.089403 +Converged at iteration 30, L1 6.01509e-05, Linf 0.00724808, total time[s] 0.091151 +Converged at iteration 30, L1 6.36415e-05, Linf 0.00442109, total time[s] 0.089014 +Converged at iteration 32, L1 8.25521e-05, Linf 0.0101746, total time[s] 0.084128 +Converged at iteration 32, L1 8.18473e-05, Linf 0.014102, total time[s] 0.087272 +Converged at iteration 25, L1 6.12301e-05, Linf 0.00327245, total time[s] 0.075888 +Converged at iteration 25, L1 5.64878e-05, Linf 0.00256007, total time[s] 0.07189 +Converged at iteration 25, L1 7.34047e-05, Linf 0.00712025, total time[s] 0.068259 +Converged at iteration 38, L1 8.43955e-05, Linf 0.0153275, total time[s] 0.112406 +Converged at iteration 36, L1 4.49139e-05, Linf 0.010725, total time[s] 0.107486 +Converged at iteration 25, L1 9.09295e-05, Linf 0.00839152, total time[s] 0.070268 +Converged at iteration 30, L1 6.55449e-05, Linf 0.00664492, total time[s] 0.09239 +Converged at iteration 23, L1 5.13932e-05, Linf 0.00411955, total time[s] 0.062056 +Converged at iteration 21, L1 9.13137e-05, Linf 0.00538135, total time[s] 0.057953 +Converged at iteration 20, L1 7.15046e-05, Linf 0.00728618, total time[s] 0.058343 +Converged at iteration 22, L1 6.59729e-05, Linf 0.00524491, total time[s] 0.084795 +Converged at iteration 23, L1 5.2076e-05, Linf 0.00311951, total time[s] 0.073906 +Converged at iteration 21, L1 8.51161e-05, Linf 0.00595617, total time[s] 0.065486 +Converged at iteration 20, L1 4.67371e-05, Linf 0.00315287, total time[s] 0.061025 +Converged at iteration 19, L1 6.34966e-05, Linf 0.0035685, total time[s] 0.057238 +Converged at iteration 32, L1 6.85068e-05, Linf 0.00517631, total time[s] 0.087347 +Converged at iteration 19, L1 7.14225e-05, Linf 0.00511162, total time[s] 0.054758 +Converged at iteration 22, L1 6.82201e-05, Linf 0.0045564, total time[s] 0.064116 +Converged at iteration 26, L1 9.36731e-05, Linf 0.00981782, total time[s] 0.090287 +Converged at iteration 25, L1 9.04069e-05, Linf 0.0055874, total time[s] 0.073851 +Converged at iteration 22, L1 7.6695e-05, Linf 0.0027512, total time[s] 0.060537 +Converged at iteration 23, L1 6.10544e-05, Linf 0.0026838, total time[s] 0.120294 +Converged at iteration 24, L1 8.43821e-05, Linf 0.00358221, total time[s] 0.0648 +Converged at iteration 25, L1 8.19114e-05, Linf 0.00327863, total time[s] 0.074797 +Converged at iteration 32, L1 7.00606e-05, Linf 0.00599741, total time[s] 0.103715 +Converged at iteration 28, L1 9.77376e-05, Linf 0.00357087, total time[s] 0.092483 +Converged at iteration 29, L1 9.908e-05, Linf 0.0077809, total time[s] 0.098756 +Converged at iteration 29, L1 8.83053e-05, Linf 0.00267424, total time[s] 0.083863 +Converged at iteration 31, L1 9.02657e-05, Linf 0.00610233, total time[s] 0.082536 +Converged at iteration 32, L1 8.28004e-05, Linf 0.0120508, total time[s] 0.092969 +Converged at iteration 25, L1 7.5101e-05, Linf 0.00389422, total time[s] 0.072159 +Converged at iteration 24, L1 9.93411e-05, Linf 0.00506646, total time[s] 0.087212 +Converged at iteration 24, L1 8.57582e-05, Linf 0.00753142, total time[s] 0.105 +Converged at iteration 38, L1 9.70441e-05, Linf 0.0135136, total time[s] 0.147004 +Converged at iteration 36, L1 5.21437e-05, Linf 0.00970941, total time[s] 0.125232 +Converged at iteration 25, L1 8.40052e-05, Linf 0.00621406, total time[s] 0.132693 +Converged at iteration 30, L1 7.68433e-05, Linf 0.00670791, total time[s] 0.12868 +Converged at iteration 23, L1 6.96125e-05, Linf 0.00502656, total time[s] 0.069961 +Converged at iteration 21, L1 9.28629e-05, Linf 0.00535077, total time[s] 0.088051 +Converged at iteration 19, L1 8.61909e-05, Linf 0.00856871, total time[s] 0.060719 +Converged at iteration 22, L1 4.73274e-05, Linf 0.00469024, total time[s] 0.083528 +Converged at iteration 22, L1 9.63585e-05, Linf 0.00489549, total time[s] 0.085474 +Converged at iteration 22, L1 5.2825e-05, Linf 0.00541543, total time[s] 0.061131 +Converged at iteration 19, L1 8.02386e-05, Linf 0.00409587, total time[s] 0.055473 +Converged at iteration 18, L1 6.04428e-05, Linf 0.00402895, total time[s] 0.051301 +Converged at iteration 32, L1 6.81344e-05, Linf 0.00417124, total time[s] 0.082581 +Converged at iteration 19, L1 7.5637e-05, Linf 0.0049884, total time[s] 0.055172 +Converged at iteration 22, L1 7.63207e-05, Linf 0.00465062, total time[s] 0.092363 +Converged at iteration 26, L1 6.53092e-05, Linf 0.0049595, total time[s] 0.101111 +Converged at iteration 25, L1 5.76629e-05, Linf 0.00256448, total time[s] 0.066576 +Converged at iteration 21, L1 8.02705e-05, Linf 0.00312876, total time[s] 0.058654 +Converged at iteration 22, L1 8.83146e-05, Linf 0.00360796, total time[s] 0.062584 +Converged at iteration 24, L1 9.18582e-05, Linf 0.00355001, total time[s] 0.075932 +Converged at iteration 26, L1 7.14632e-05, Linf 0.00307464, total time[s] 0.094242 +Converged at iteration 30, L1 8.99965e-05, Linf 0.00578546, total time[s] 0.091719 +Converged at iteration 27, L1 9.48079e-05, Linf 0.0033261, total time[s] 0.081187 +Converged at iteration 29, L1 8.15521e-05, Linf 0.00621589, total time[s] 0.084485 +Converged at iteration 29, L1 6.48666e-05, Linf 0.00184747, total time[s] 0.08165 +Converged at iteration 29, L1 7.33178e-05, Linf 0.00337563, total time[s] 0.078649 +Converged at iteration 32, L1 8.47572e-05, Linf 0.0105538, total time[s] 0.088893 +Converged at iteration 25, L1 7.99272e-05, Linf 0.00421953, total time[s] 0.092697 +Converged at iteration 24, L1 9.9869e-05, Linf 0.00485499, total time[s] 0.095964 +Converged at iteration 23, L1 8.58702e-05, Linf 0.00744719, total time[s] 0.072253 +Converged at iteration 39, L1 4.63126e-05, Linf 0.00945929, total time[s] 0.098127 +Converged at iteration 36, L1 5.91256e-05, Linf 0.00879777, total time[s] 0.129902 +Converged at iteration 25, L1 4.52178e-05, Linf 0.00435206, total time[s] 0.087891 +Converged at iteration 30, L1 8.53525e-05, Linf 0.00664341, total time[s] 0.103257 +Converged at iteration 23, L1 9.52143e-05, Linf 0.00579644, total time[s] 0.091939 +Converged at iteration 21, L1 9.1304e-05, Linf 0.00516679, total time[s] 0.060682 +Converged at iteration 19, L1 5.23876e-05, Linf 0.00633463, total time[s] 0.070516 +Converged at iteration 21, L1 4.48488e-05, Linf 0.00426563, total time[s] 0.062977 +Converged at iteration 22, L1 9.74455e-05, Linf 0.00533623, total time[s] 0.064403 +Converged at iteration 22, L1 7.54677e-05, Linf 0.0063078, total time[s] 0.075323 +Converged at iteration 19, L1 7.83408e-05, Linf 0.0051278, total time[s] 0.066791 +Converged at iteration 17, L1 5.49185e-05, Linf 0.00197322, total time[s] 0.050038 +Converged at iteration 32, L1 6.83419e-05, Linf 0.00363675, total time[s] 0.109732 +Converged at iteration 19, L1 8.02478e-05, Linf 0.00608142, total time[s] 0.085163 +Converged at iteration 22, L1 8.46951e-05, Linf 0.00537455, total time[s] 0.071723 +Converged at iteration 26, L1 4.2713e-05, Linf 0.00300422, total time[s] 0.077107 +Converged at iteration 24, L1 6.00587e-05, Linf 0.00230638, total time[s] 0.071953 +Converged at iteration 21, L1 5.39046e-05, Linf 0.00203235, total time[s] 0.057716 +Converged at iteration 22, L1 8.61957e-05, Linf 0.00356608, total time[s] 0.059988 +Converged at iteration 24, L1 9.93539e-05, Linf 0.00374441, total time[s] 0.067393 +Converged at iteration 26, L1 9.08344e-05, Linf 0.00369912, total time[s] 0.074309 +Converged at iteration 29, L1 7.72928e-05, Linf 0.00764333, total time[s] 0.11207 +Converged at iteration 27, L1 6.27249e-05, Linf 0.0029438, total time[s] 0.079502 +Converged at iteration 29, L1 7.78342e-05, Linf 0.00519392, total time[s] 0.092095 +Converged at iteration 29, L1 6.21829e-05, Linf 0.00231848, total time[s] 0.080213 +Converged at iteration 28, L1 4.89881e-05, Linf 0.00268957, total time[s] 0.074679 +Converged at iteration 32, L1 8.74563e-05, Linf 0.00942227, total time[s] 0.104598 +Converged at iteration 25, L1 7.91812e-05, Linf 0.00407964, total time[s] 0.077543 +Converged at iteration 25, L1 6.18592e-05, Linf 0.00253158, total time[s] 0.069112 +Converged at iteration 22, L1 9.02856e-05, Linf 0.00424607, total time[s] 0.094324 +Converged at iteration 39, L1 5.29526e-05, Linf 0.00863597, total time[s] 0.117013 +Converged at iteration 36, L1 6.41398e-05, Linf 0.0079386, total time[s] 0.164445 +Converged at iteration 24, L1 6.52495e-05, Linf 0.00505838, total time[s] 0.119329 +Converged at iteration 30, L1 9.24919e-05, Linf 0.00646243, total time[s] 0.101868 +Converged at iteration 24, L1 6.91701e-05, Linf 0.00522526, total time[s] 0.063366 +Converged at iteration 21, L1 8.76081e-05, Linf 0.00487116, total time[s] 0.071541 +Converged at iteration 19, L1 4.89937e-05, Linf 0.00556842, total time[s] 0.078048 +Converged at iteration 20, L1 9.62356e-05, Linf 0.00745597, total time[s] 0.066211 +Converged at iteration 23, L1 5.36969e-05, Linf 0.00318165, total time[s] 0.079166 +Converged at iteration 23, L1 6.10719e-05, Linf 0.00537627, total time[s] 0.073065 +Converged at iteration 19, L1 8.51701e-05, Linf 0.00580568, total time[s] 0.057813 +Converged at iteration 16, L1 8.42733e-05, Linf 0.00273145, total time[s] 0.064118 +Converged at iteration 32, L1 7.00141e-05, Linf 0.00325686, total time[s] 0.09346 +Converged at iteration 19, L1 8.46342e-05, Linf 0.00513135, total time[s] 0.050694 +Converged at iteration 22, L1 9.43472e-05, Linf 0.00681813, total time[s] 0.079489 +Converged at iteration 25, L1 8.99348e-05, Linf 0.00844493, total time[s] 0.068954 +Converged at iteration 23, L1 7.66205e-05, Linf 0.00672064, total time[s] 0.063942 +Converged at iteration 20, L1 7.57603e-05, Linf 0.00205352, total time[s] 0.053149 +Converged at iteration 22, L1 8.88182e-05, Linf 0.00358804, total time[s] 0.060702 +Converged at iteration 25, L1 6.84696e-05, Linf 0.00308125, total time[s] 0.079752 +Converged at iteration 27, L1 7.36679e-05, Linf 0.00333375, total time[s] 0.08577 +Converged at iteration 29, L1 6.03697e-05, Linf 0.00643654, total time[s] 0.109125 +Converged at iteration 27, L1 5.59423e-05, Linf 0.00446145, total time[s] 0.072364 +Converged at iteration 29, L1 7.67752e-05, Linf 0.00461364, total time[s] 0.073725 +Converged at iteration 29, L1 6.77404e-05, Linf 0.00238991, total time[s] 0.075985 +Converged at iteration 27, L1 7.9599e-05, Linf 0.0015728, total time[s] 0.067491 +Converged at iteration 32, L1 9.08593e-05, Linf 0.00857425, total time[s] 0.078045 +Converged at iteration 25, L1 8.81319e-05, Linf 0.00371276, total time[s] 0.068868 +Converged at iteration 25, L1 6.63964e-05, Linf 0.00242662, total time[s] 0.080407 +Converged at iteration 22, L1 8.25034e-05, Linf 0.00346684, total time[s] 0.09246 +Converged at iteration 39, L1 6.21573e-05, Linf 0.00773314, total time[s] 0.098501 +Converged at iteration 36, L1 7.01111e-05, Linf 0.00713169, total time[s] 0.103701 +Converged at iteration 24, L1 5.30202e-05, Linf 0.00288522, total time[s] 0.065856 +Converged at iteration 30, L1 9.81234e-05, Linf 0.0063997, total time[s] 0.086871 +Converged at iteration 24, L1 9.10831e-05, Linf 0.00574168, total time[s] 0.066797 +Converged at iteration 21, L1 8.30671e-05, Linf 0.00453999, total time[s] 0.07694 +Converged at iteration 19, L1 5.01302e-05, Linf 0.00555587, total time[s] 0.060092 +Converged at iteration 20, L1 7.92742e-05, Linf 0.00697702, total time[s] 0.070372 +Converged at iteration 23, L1 6.8967e-05, Linf 0.00467715, total time[s] 0.088817 +Converged at iteration 23, L1 8.75652e-05, Linf 0.00571552, total time[s] 0.092405 +Converged at iteration 19, L1 9.50763e-05, Linf 0.00627579, total time[s] 0.064895 +Converged at iteration 16, L1 8.04394e-05, Linf 0.00289493, total time[s] 0.069926 +Converged at iteration 32, L1 6.91489e-05, Linf 0.00295128, total time[s] 0.214598 +Converged at iteration 19, L1 8.66425e-05, Linf 0.00586232, total time[s] 0.060075 +Converged at iteration 23, L1 6.4478e-05, Linf 0.00461045, total time[s] 0.061433 +Converged at iteration 26, L1 4.53897e-05, Linf 0.00398946, total time[s] 0.095429 +Converged at iteration 23, L1 6.13158e-05, Linf 0.00465816, total time[s] 0.072724 +Converged at iteration 20, L1 6.09304e-05, Linf 0.00349386, total time[s] 0.070155 +Converged at iteration 22, L1 9.13622e-05, Linf 0.00364806, total time[s] 0.093414 +Converged at iteration 25, L1 7.43284e-05, Linf 0.0032692, total time[s] 0.078647 +Converged at iteration 27, L1 8.78242e-05, Linf 0.00368984, total time[s] 0.082488 +Converged at iteration 29, L1 5.74331e-05, Linf 0.00608945, total time[s] 0.077791 +Converged at iteration 27, L1 5.61056e-05, Linf 0.00401146, total time[s] 0.082472 +Converged at iteration 29, L1 7.49998e-05, Linf 0.00431923, total time[s] 0.098618 +Converged at iteration 29, L1 7.26572e-05, Linf 0.00249109, total time[s] 0.079908 +Converged at iteration 27, L1 8.3499e-05, Linf 0.00210709, total time[s] 0.087427 +Converged at iteration 32, L1 9.40382e-05, Linf 0.00791349, total time[s] 0.085346 +Converged at iteration 26, L1 6.46733e-05, Linf 0.00238302, total time[s] 0.069546 +Converged at iteration 25, L1 6.83797e-05, Linf 0.00226061, total time[s] 0.065269 +Converged at iteration 22, L1 8.42233e-05, Linf 0.0033988, total time[s] 0.137179 +Converged at iteration 39, L1 2.22539e-05, Linf 0.0171784, total time[s] 0.141988 +Converged at iteration 37, L1 7.30708e-05, Linf 0.0337815, total time[s] 0.105012 +Converged at iteration 27, L1 6.93215e-05, Linf 0.00565363, total time[s] 0.082906 +Converged at iteration 28, L1 3.64453e-05, Linf 0.0131747, total time[s] 0.074205 +Converged at iteration 24, L1 7.25481e-05, Linf 0.0122068, total time[s] 0.088868 +Converged at iteration 21, L1 5.17418e-05, Linf 0.00356011, total time[s] 0.083573 +Converged at iteration 21, L1 7.76508e-05, Linf 0.00862066, total time[s] 0.089226 +Converged at iteration 23, L1 7.61815e-05, Linf 0.0112646, total time[s] 0.070366 +Converged at iteration 24, L1 6.98104e-05, Linf 0.00492191, total time[s] 0.079409 +Converged at iteration 26, L1 5.80819e-05, Linf 0.00413138, total time[s] 0.085829 +Converged at iteration 24, L1 5.13732e-05, Linf 0.00454543, total time[s] 0.077118 +Converged at iteration 21, L1 4.73525e-05, Linf 0.00217079, total time[s] 0.060095 +Converged at iteration 34, L1 3.87077e-05, Linf 0.00862933, total time[s] 0.108076 +Converged at iteration 20, L1 7.942e-05, Linf 0.00449134, total time[s] 0.062922 +Converged at iteration 22, L1 9.58451e-05, Linf 0.00492751, total time[s] 0.070876 +Converged at iteration 29, L1 6.15499e-05, Linf 0.00408929, total time[s] 0.095448 +Converged at iteration 29, L1 7.28041e-05, Linf 0.00473934, total time[s] 0.097373 +Converged at iteration 25, L1 7.89032e-05, Linf 0.00317444, total time[s] 0.082245 +Converged at iteration 24, L1 5.71954e-05, Linf 0.00220283, total time[s] 0.064531 +Converged at iteration 23, L1 6.12061e-05, Linf 0.00184999, total time[s] 0.073779 +Converged at iteration 29, L1 6.71612e-05, Linf 0.00623301, total time[s] 0.086942 +Converged at iteration 33, L1 8.3589e-05, Linf 0.00672574, total time[s] 0.086683 +Converged at iteration 30, L1 9.13993e-05, Linf 0.00297203, total time[s] 0.087306 +Converged at iteration 31, L1 7.04306e-05, Linf 0.00816535, total time[s] 0.092455 +Converged at iteration 33, L1 4.94704e-05, Linf 0.00407602, total time[s] 0.118611 +Converged at iteration 34, L1 5.86318e-05, Linf 0.00338281, total time[s] 0.098808 +Converged at iteration 34, L1 3.20396e-05, Linf 0.0183044, total time[s] 0.114379 +Converged at iteration 29, L1 6.53222e-05, Linf 0.0132745, total time[s] 0.08089 +Converged at iteration 25, L1 8.79304e-05, Linf 0.00460005, total time[s] 0.093012 +Converged at iteration 28, L1 6.8491e-05, Linf 0.00866122, total time[s] 0.083591 +Converged at iteration 38, L1 9.12683e-05, Linf 0.0374064, total time[s] 0.121781 +Converged at iteration 37, L1 4.66811e-05, Linf 0.0200126, total time[s] 0.167292 +Converged at iteration 26, L1 8.39058e-05, Linf 0.00839113, total time[s] 0.071713 +Converged at iteration 28, L1 5.62866e-05, Linf 0.0116447, total time[s] 0.110713 +Converged at iteration 24, L1 5.95353e-05, Linf 0.00845717, total time[s] 0.086562 +Converged at iteration 21, L1 5.40878e-05, Linf 0.00614232, total time[s] 0.082672 +Converged at iteration 21, L1 4.70115e-05, Linf 0.00534522, total time[s] 0.076213 +Converged at iteration 23, L1 4.35614e-05, Linf 0.00563266, total time[s] 0.093513 +Converged at iteration 24, L1 5.60828e-05, Linf 0.00239022, total time[s] 0.078706 +Converged at iteration 25, L1 8.47718e-05, Linf 0.00470314, total time[s] 0.08078 +Converged at iteration 23, L1 6.75873e-05, Linf 0.00439805, total time[s] 0.064703 +Converged at iteration 20, L1 8.42421e-05, Linf 0.00417398, total time[s] 0.06661 +Converged at iteration 33, L1 6.29129e-05, Linf 0.0112689, total time[s] 0.104708 +Converged at iteration 20, L1 7.36699e-05, Linf 0.00407756, total time[s] 0.06458 +Converged at iteration 22, L1 7.96576e-05, Linf 0.00427852, total time[s] 0.072121 +Converged at iteration 28, L1 7.15324e-05, Linf 0.00271844, total time[s] 0.073412 +Converged at iteration 28, L1 8.76694e-05, Linf 0.00355127, total time[s] 0.081546 +Converged at iteration 25, L1 5.64417e-05, Linf 0.001827, total time[s] 0.117526 +Converged at iteration 24, L1 6.48498e-05, Linf 0.00202497, total time[s] 0.079322 +Converged at iteration 23, L1 8.49394e-05, Linf 0.00301337, total time[s] 0.070339 +Converged at iteration 28, L1 7.24623e-05, Linf 0.00699371, total time[s] 0.078475 +Converged at iteration 33, L1 6.5639e-05, Linf 0.00742003, total time[s] 0.096416 +Converged at iteration 30, L1 9.17685e-05, Linf 0.00359312, total time[s] 0.114302 +Converged at iteration 31, L1 6.03503e-05, Linf 0.00648443, total time[s] 0.088295 +Converged at iteration 32, L1 7.13608e-05, Linf 0.00455851, total time[s] 0.094786 +Converged at iteration 33, L1 9.14108e-05, Linf 0.00531917, total time[s] 0.091563 +Converged at iteration 33, L1 7.31811e-05, Linf 0.0328099, total time[s] 0.107468 +Converged at iteration 28, L1 4.76281e-05, Linf 0.0104288, total time[s] 0.082926 +Converged at iteration 25, L1 6.02238e-05, Linf 0.00337719, total time[s] 0.081248 +Converged at iteration 27, L1 7.88905e-05, Linf 0.00823383, total time[s] 0.076525 +Converged at iteration 38, L1 6.09556e-05, Linf 0.0277699, total time[s] 0.106182 +Converged at iteration 37, L1 2.59547e-05, Linf 0.0124652, total time[s] 0.127939 +Converged at iteration 26, L1 5.38449e-05, Linf 0.00735595, total time[s] 0.088972 +Converged at iteration 28, L1 4.77557e-05, Linf 0.0106233, total time[s] 0.078539 +Converged at iteration 24, L1 5.11723e-05, Linf 0.00635205, total time[s] 0.065441 +Converged at iteration 21, L1 6.01263e-05, Linf 0.00878547, total time[s] 0.07094 +Converged at iteration 20, L1 9.09293e-05, Linf 0.0121981, total time[s] 0.054956 +Converged at iteration 22, L1 6.77647e-05, Linf 0.00571247, total time[s] 0.060358 +Converged at iteration 24, L1 4.81575e-05, Linf 0.0019996, total time[s] 0.117246 +Converged at iteration 25, L1 6.80841e-05, Linf 0.00328033, total time[s] 0.081339 +Converged at iteration 22, L1 9.13258e-05, Linf 0.00313048, total time[s] 0.081024 +Converged at iteration 20, L1 6.10116e-05, Linf 0.00341857, total time[s] 0.064589 +Converged at iteration 32, L1 9.80338e-05, Linf 0.0136925, total time[s] 0.097482 +Converged at iteration 20, L1 5.87139e-05, Linf 0.00352652, total time[s] 0.083568 +Converged at iteration 22, L1 6.34612e-05, Linf 0.00389881, total time[s] 0.063086 +Converged at iteration 27, L1 7.0988e-05, Linf 0.002484, total time[s] 0.081767 +Converged at iteration 28, L1 5.63882e-05, Linf 0.00252312, total time[s] 0.077711 +Converged at iteration 24, L1 7.28028e-05, Linf 0.0026785, total time[s] 0.067602 +Converged at iteration 24, L1 6.08721e-05, Linf 0.00167488, total time[s] 0.069157 +Converged at iteration 23, L1 9.75985e-05, Linf 0.003347, total time[s] 0.061694 +Converged at iteration 27, L1 6.69903e-05, Linf 0.00613623, total time[s] 0.074723 +Converged at iteration 32, L1 9.18306e-05, Linf 0.00939844, total time[s] 0.119798 +Converged at iteration 30, L1 8.64383e-05, Linf 0.00337378, total time[s] 0.081491 +Converged at iteration 31, L1 5.56262e-05, Linf 0.00958091, total time[s] 0.086809 +Converged at iteration 31, L1 9.38759e-05, Linf 0.00461018, total time[s] 0.112554 +Converged at iteration 33, L1 5.97475e-05, Linf 0.0036029, total time[s] 0.106339 +Converged at iteration 33, L1 3.55095e-05, Linf 0.0225057, total time[s] 0.103933 +Converged at iteration 27, L1 7.97662e-05, Linf 0.00950188, total time[s] 0.094479 +Converged at iteration 25, L1 6.17584e-05, Linf 0.00298305, total time[s] 0.088181 +Converged at iteration 26, L1 9.38609e-05, Linf 0.00782341, total time[s] 0.116152 +Converged at iteration 38, L1 3.87733e-05, Linf 0.0216477, total time[s] 0.157423 +Converged at iteration 36, L1 6.12922e-05, Linf 0.0230178, total time[s] 0.14055 +Converged at iteration 25, L1 9.55965e-05, Linf 0.0159468, total time[s] 0.073104 +Converged at iteration 28, L1 6.29269e-05, Linf 0.0102959, total time[s] 0.088655 +Converged at iteration 23, L1 8.72795e-05, Linf 0.00675438, total time[s] 0.0737 +Converged at iteration 21, L1 8.25976e-05, Linf 0.0102103, total time[s] 0.065022 +Converged at iteration 20, L1 6.01179e-05, Linf 0.0095131, total time[s] 0.054177 +Converged at iteration 22, L1 4.31514e-05, Linf 0.00296601, total time[s] 0.058864 +Converged at iteration 23, L1 8.95384e-05, Linf 0.00327787, total time[s] 0.060647 +Converged at iteration 24, L1 8.6198e-05, Linf 0.00335692, total time[s] 0.064457 +Converged at iteration 22, L1 6.41926e-05, Linf 0.00235936, total time[s] 0.059491 +Converged at iteration 20, L1 4.45772e-05, Linf 0.00263707, total time[s] 0.055426 +Converged at iteration 32, L1 6.38761e-05, Linf 0.00752527, total time[s] 0.087708 +Converged at iteration 19, L1 9.03282e-05, Linf 0.00456129, total time[s] 0.056099 +Converged at iteration 22, L1 6.06753e-05, Linf 0.00378712, total time[s] 0.058559 +Converged at iteration 40, L1 6.85309e-05, Linf 0.00367472, total time[s] 0.105917 +Converged at iteration 35, L1 7.62191e-05, Linf 0.00339721, total time[s] 0.100995 +Converged at iteration 30, L1 9.62667e-05, Linf 0.00430182, total time[s] 0.089644 +Converged at iteration 31, L1 6.3428e-05, Linf 0.00704284, total time[s] 0.095795 +Converged at iteration 27, L1 6.26041e-05, Linf 0.00499531, total time[s] 0.09147 +Converged at iteration 22, L1 8.58577e-05, Linf 0.00448845, total time[s] 0.088731 +Converged at iteration 20, L1 9.61615e-05, Linf 0.00397882, total time[s] 0.088961 +Converged at iteration 24, L1 8.84067e-05, Linf 0.00482834, total time[s] 0.081458 +Converged at iteration 28, L1 7.40271e-05, Linf 0.00445902, total time[s] 0.094975 +Converged at iteration 26, L1 8.13208e-05, Linf 0.00546789, total time[s] 0.126999 +Converged at iteration 22, L1 7.39244e-05, Linf 0.00508659, total time[s] 0.065416 +Converged at iteration 19, L1 6.66572e-05, Linf 0.00385018, total time[s] 0.097558 +Converged at iteration 30, L1 7.98742e-05, Linf 0.00329636, total time[s] 0.090504 +Converged at iteration 20, L1 8.44285e-05, Linf 0.00455022, total time[s] 0.061663 +Converged at iteration 24, L1 7.10779e-05, Linf 0.00463282, total time[s] 0.06995 +Converged at iteration 31, L1 8.93592e-05, Linf 0.0056915, total time[s] 0.111858 +Converged at iteration 27, L1 9.91165e-05, Linf 0.00569871, total time[s] 0.089419 +Converged at iteration 24, L1 8.79688e-05, Linf 0.00465021, total time[s] 0.084156 +Converged at iteration 23, L1 9.21844e-05, Linf 0.00410989, total time[s] 0.062622 +Converged at iteration 26, L1 7.22112e-05, Linf 0.00446088, total time[s] 0.075313 +Converged at iteration 29, L1 7.81474e-05, Linf 0.004796, total time[s] 0.094292 +Converged at iteration 34, L1 7.09138e-05, Linf 0.0042267, total time[s] 0.106344 +Converged at iteration 30, L1 9.39234e-05, Linf 0.00442609, total time[s] 0.076679 +Converged at iteration 28, L1 9.49907e-05, Linf 0.00310978, total time[s] 0.08045 +Converged at iteration 32, L1 9.39328e-05, Linf 0.00374081, total time[s] 0.092242 +Converged at iteration 37, L1 7.33834e-05, Linf 0.00325897, total time[s] 0.110411 +Converged at iteration 33, L1 8.448e-05, Linf 0.0046912, total time[s] 0.10712 +Converged at iteration 28, L1 9.65511e-05, Linf 0.00430177, total time[s] 0.082049 +Converged at iteration 24, L1 8.82921e-05, Linf 0.00325069, total time[s] 0.068747 +Converged at iteration 26, L1 8.98106e-05, Linf 0.00383982, total time[s] 0.069726 +Converged at iteration 39, L1 7.00069e-05, Linf 0.00710297, total time[s] 0.11168 +Converged at iteration 36, L1 7.13472e-05, Linf 0.00594623, total time[s] 0.107054 +Converged at iteration 24, L1 5.98084e-05, Linf 0.00281384, total time[s] 0.082104 +Converged at iteration 31, L1 5.65461e-05, Linf 0.00509051, total time[s] 0.084124 +Converged at iteration 25, L1 7.04266e-05, Linf 0.00532508, total time[s] 0.072368 +Converged at iteration 21, L1 6.60386e-05, Linf 0.00391079, total time[s] 0.085889 +Converged at iteration 19, L1 5.73794e-05, Linf 0.00452007, total time[s] 0.054849 +Converged at iteration 20, L1 7.6147e-05, Linf 0.0063152, total time[s] 0.064545 +Converged at iteration 24, L1 5.20528e-05, Linf 0.00410823, total time[s] 0.075487 +Converged at iteration 24, L1 6.26749e-05, Linf 0.00475262, total time[s] 0.079992 +Converged at iteration 20, L1 5.30382e-05, Linf 0.00521673, total time[s] 0.06487 +Converged at iteration 16, L1 9.02759e-05, Linf 0.00340809, total time[s] 0.046387 +Converged at iteration 32, L1 6.80323e-05, Linf 0.00271482, total time[s] 0.087834 +Converged at iteration 19, L1 9.04731e-05, Linf 0.00657441, total time[s] 0.051306 +Converged at iteration 23, L1 7.1836e-05, Linf 0.00650296, total time[s] 0.075241 +Converged at iteration 26, L1 6.39615e-05, Linf 0.0053593, total time[s] 0.109758 +Converged at iteration 23, L1 5.40127e-05, Linf 0.00495627, total time[s] 0.06606 +Converged at iteration 20, L1 6.70576e-05, Linf 0.00476008, total time[s] 0.059384 +Converged at iteration 22, L1 9.58666e-05, Linf 0.00411254, total time[s] 0.062112 +Converged at iteration 25, L1 8.04249e-05, Linf 0.0036523, total time[s] 0.075067 +Converged at iteration 28, L1 7.00513e-05, Linf 0.00350077, total time[s] 0.085841 +Converged at iteration 29, L1 6.43794e-05, Linf 0.00595087, total time[s] 0.086819 +Converged at iteration 27, L1 6.44224e-05, Linf 0.00387917, total time[s] 0.078363 +Converged at iteration 29, L1 7.44808e-05, Linf 0.00402977, total time[s] 0.088674 +Converged at iteration 29, L1 8.23257e-05, Linf 0.0026991, total time[s] 0.084273 +Converged at iteration 28, L1 6.40828e-05, Linf 0.00217838, total time[s] 0.07474 +Converged at iteration 33, L1 5.67324e-05, Linf 0.00610017, total time[s] 0.098245 +Converged at iteration 26, L1 9.01025e-05, Linf 0.00337739, total time[s] 0.066719 +Converged at iteration 25, L1 7.06514e-05, Linf 0.00201446, total time[s] 0.063628 +Converged at iteration 23, L1 5.82411e-05, Linf 0.00259018, total time[s] 0.06216 +Converged at iteration 39, L1 7.64839e-05, Linf 0.00659695, total time[s] 0.097321 +Converged at iteration 36, L1 7.3095e-05, Linf 0.00526706, total time[s] 0.093953 +Converged at iteration 24, L1 7.51197e-05, Linf 0.00411598, total time[s] 0.067415 +Converged at iteration 31, L1 5.7966e-05, Linf 0.00509165, total time[s] 0.089706 +Converged at iteration 25, L1 8.669e-05, Linf 0.00571596, total time[s] 0.087885 +Converged at iteration 20, L1 9.15634e-05, Linf 0.00380207, total time[s] 0.052805 +Converged at iteration 19, L1 6.59563e-05, Linf 0.0044136, total time[s] 0.052898 +Converged at iteration 20, L1 9.17177e-05, Linf 0.00658115, total time[s] 0.104587 +Converged at iteration 24, L1 7.94261e-05, Linf 0.00495817, total time[s] 0.075972 +Converged at iteration 24, L1 7.58267e-05, Linf 0.00492114, total time[s] 0.084564 +Converged at iteration 20, L1 6.05445e-05, Linf 0.00519213, total time[s] 0.054306 +Converged at iteration 17, L1 5.19465e-05, Linf 0.00242839, total time[s] 0.08575 +Converged at iteration 32, L1 6.88604e-05, Linf 0.0025374, total time[s] 0.111034 +Converged at iteration 19, L1 9.39695e-05, Linf 0.00706809, total time[s] 0.066609 +Converged at iteration 23, L1 7.86251e-05, Linf 0.00711305, total time[s] 0.099788 +Converged at iteration 26, L1 8.14188e-05, Linf 0.00603278, total time[s] 0.104695 +Converged at iteration 23, L1 5.79509e-05, Linf 0.00603998, total time[s] 0.067007 +Converged at iteration 20, L1 8.30729e-05, Linf 0.00552733, total time[s] 0.056972 +Converged at iteration 22, L1 9.95074e-05, Linf 0.00498697, total time[s] 0.068779 +Converged at iteration 25, L1 8.47484e-05, Linf 0.00439968, total time[s] 0.090515 +Converged at iteration 28, L1 7.82087e-05, Linf 0.00366787, total time[s] 0.08534 +Converged at iteration 29, L1 7.48417e-05, Linf 0.00612096, total time[s] 0.096618 +Converged at iteration 27, L1 7.34865e-05, Linf 0.0040198, total time[s] 0.099743 +Converged at iteration 29, L1 7.65083e-05, Linf 0.00380595, total time[s] 0.091276 +Converged at iteration 29, L1 9.17947e-05, Linf 0.00277217, total time[s] 0.077337 +Converged at iteration 28, L1 8.32244e-05, Linf 0.00273874, total time[s] 0.071484 +Converged at iteration 33, L1 6.17907e-05, Linf 0.00584892, total time[s] 0.082806 +Converged at iteration 27, L1 6.87647e-05, Linf 0.00334615, total time[s] 0.070526 +Converged at iteration 24, L1 9.65835e-05, Linf 0.00239084, total time[s] 0.082846 +Converged at iteration 23, L1 7.56431e-05, Linf 0.00328303, total time[s] 0.08884 +Converged at iteration 39, L1 8.28584e-05, Linf 0.00624744, total time[s] 0.17341 +Converged at iteration 35, L1 8.39617e-05, Linf 0.0051159, total time[s] 0.18672 +Converged at iteration 25, L1 5.00352e-05, Linf 0.00412328, total time[s] 0.076239 +Converged at iteration 31, L1 5.89966e-05, Linf 0.00510734, total time[s] 0.093567 +Converged at iteration 26, L1 5.9281e-05, Linf 0.00512096, total time[s] 0.09023 +Converged at iteration 20, L1 9.81079e-05, Linf 0.00342713, total time[s] 0.066675 +Converged at iteration 19, L1 7.95343e-05, Linf 0.00550211, total time[s] 0.087885 +Converged at iteration 21, L1 5.09224e-05, Linf 0.00593335, total time[s] 0.07489 +Converged at iteration 25, L1 6.64064e-05, Linf 0.0055188, total time[s] 0.087418 +Converged at iteration 24, L1 9.06093e-05, Linf 0.00505163, total time[s] 0.064319 +Converged at iteration 20, L1 6.73159e-05, Linf 0.00542703, total time[s] 0.061283 +Converged at iteration 17, L1 5.95768e-05, Linf 0.00279912, total time[s] 0.05381 +Converged at iteration 32, L1 6.82571e-05, Linf 0.00238432, total time[s] 0.100478 +Converged at iteration 19, L1 9.59517e-05, Linf 0.00705533, total time[s] 0.065983 +Converged at iteration 23, L1 8.59412e-05, Linf 0.00691489, total time[s] 0.078018 +Converged at iteration 27, L1 5.78809e-05, Linf 0.00468078, total time[s] 0.07816 +Converged at iteration 23, L1 6.68429e-05, Linf 0.00654908, total time[s] 0.06353 +Converged at iteration 21, L1 5.85765e-05, Linf 0.00464347, total time[s] 0.062668 +Converged at iteration 23, L1 6.71926e-05, Linf 0.00319001, total time[s] 0.063819 +Converged at iteration 25, L1 8.9437e-05, Linf 0.00555772, total time[s] 0.082563 +Converged at iteration 28, L1 8.70471e-05, Linf 0.00640556, total time[s] 0.088825 +Converged at iteration 29, L1 8.59703e-05, Linf 0.00634771, total time[s] 0.090725 +Converged at iteration 27, L1 8.54316e-05, Linf 0.00414255, total time[s] 0.089452 +Converged at iteration 29, L1 7.89796e-05, Linf 0.0036089, total time[s] 0.09475 +Converged at iteration 30, L1 6.93989e-05, Linf 0.00225297, total time[s] 0.081734 +Converged at iteration 29, L1 7.59723e-05, Linf 0.00260283, total time[s] 0.086029 +Converged at iteration 33, L1 6.65026e-05, Linf 0.00564207, total time[s] 0.110021 +Converged at iteration 27, L1 8.46848e-05, Linf 0.00382908, total time[s] 0.087039 +Converged at iteration 24, L1 8.91247e-05, Linf 0.00203167, total time[s] 0.081147 +Converged at iteration 24, L1 6.0209e-05, Linf 0.00295511, total time[s] 0.078847 +Converged at iteration 39, L1 8.86475e-05, Linf 0.00580937, total time[s] 0.144598 +Converged at iteration 36, L1 7.3783e-05, Linf 0.00423593, total time[s] 0.102659 +Converged at iteration 25, L1 9.40534e-05, Linf 0.0075172, total time[s] 0.069335 +Converged at iteration 31, L1 6.07755e-05, Linf 0.00509418, total time[s] 0.081587 +Converged at iteration 26, L1 6.90905e-05, Linf 0.0063548, total time[s] 0.072869 +Converged at iteration 21, L1 6.1659e-05, Linf 0.00323807, total time[s] 0.066427 +Converged at iteration 19, L1 9.84869e-05, Linf 0.00640293, total time[s] 0.051962 +Converged at iteration 21, L1 8.7177e-05, Linf 0.00868987, total time[s] 0.054302 +Converged at iteration 26, L1 5.87769e-05, Linf 0.00555886, total time[s] 0.079215 +Converged at iteration 25, L1 5.91542e-05, Linf 0.0040197, total time[s] 0.064727 +Converged at iteration 20, L1 7.58981e-05, Linf 0.0054571, total time[s] 0.053438 +Converged at iteration 17, L1 7.13087e-05, Linf 0.00339197, total time[s] 0.059813 +Converged at iteration 31, L1 9.92673e-05, Linf 0.00280683, total time[s] 0.080222 +Converged at iteration 20, L1 6.12557e-05, Linf 0.00529692, total time[s] 0.052141 +Converged at iteration 23, L1 9.48604e-05, Linf 0.0065254, total time[s] 0.074651 +Converged at iteration 27, L1 7.86016e-05, Linf 0.00511702, total time[s] 0.106229 +Converged at iteration 23, L1 7.95657e-05, Linf 0.00694885, total time[s] 0.071325 +Converged at iteration 21, L1 7.51916e-05, Linf 0.0047906, total time[s] 0.061116 +Converged at iteration 23, L1 7.13058e-05, Linf 0.0036116, total time[s] 0.084953 +Converged at iteration 25, L1 9.45631e-05, Linf 0.00625071, total time[s] 0.087934 +Converged at iteration 28, L1 9.23407e-05, Linf 0.00532018, total time[s] 0.074325 +Converged at iteration 29, L1 9.82709e-05, Linf 0.00645729, total time[s] 0.080728 +Converged at iteration 28, L1 6.27745e-05, Linf 0.00325688, total time[s] 0.099009 +Converged at iteration 29, L1 8.42722e-05, Linf 0.00347189, total time[s] 0.090454 +Converged at iteration 30, L1 8.23505e-05, Linf 0.00285317, total time[s] 0.077546 +Converged at iteration 30, L1 7.68351e-05, Linf 0.00253106, total time[s] 0.096459 +Converged at iteration 33, L1 7.04209e-05, Linf 0.00546753, total time[s] 0.108584 +Converged at iteration 27, L1 9.78546e-05, Linf 0.00411023, total time[s] 0.079301 +Converged at iteration 24, L1 8.83896e-05, Linf 0.00182782, total time[s] 0.065475 +Converged at iteration 24, L1 8.17903e-05, Linf 0.00424006, total time[s] 0.094231 +Converged at iteration 39, L1 9.3879e-05, Linf 0.00551637, total time[s] 0.11988 +Converged at iteration 36, L1 7.25411e-05, Linf 0.00387754, total time[s] 0.094091 +Converged at iteration 26, L1 9.6053e-05, Linf 0.00734294, total time[s] 0.086875 +Converged at iteration 31, L1 6.06459e-05, Linf 0.00509013, total time[s] 0.100875 +Converged at iteration 26, L1 7.61351e-05, Linf 0.00542949, total time[s] 0.093074 +Converged at iteration 21, L1 7.0664e-05, Linf 0.00376249, total time[s] 0.067443 +Converged at iteration 20, L1 6.69113e-05, Linf 0.00497178, total time[s] 0.053339 +Converged at iteration 22, L1 7.04159e-05, Linf 0.00742589, total time[s] 0.062129 +Converged at iteration 26, L1 9.35913e-05, Linf 0.00647123, total time[s] 0.069328 +Converged at iteration 25, L1 7.27706e-05, Linf 0.00411515, total time[s] 0.100956 +Converged at iteration 20, L1 8.72493e-05, Linf 0.00558098, total time[s] 0.064162 +Converged at iteration 17, L1 8.37622e-05, Linf 0.0039564, total time[s] 0.051506 +Converged at iteration 31, L1 9.20819e-05, Linf 0.00277449, total time[s] 0.079654 +Converged at iteration 20, L1 6.57668e-05, Linf 0.0054025, total time[s] 0.061816 +Converged at iteration 24, L1 6.16531e-05, Linf 0.00552764, total time[s] 0.073394 +Converged at iteration 28, L1 6.79859e-05, Linf 0.00370171, total time[s] 0.090838 +Converged at iteration 23, L1 9.36869e-05, Linf 0.00710928, total time[s] 0.079467 +Converged at iteration 21, L1 9.13548e-05, Linf 0.00484482, total time[s] 0.074873 +Converged at iteration 23, L1 7.79586e-05, Linf 0.00410246, total time[s] 0.067292 +Converged at iteration 25, L1 9.91314e-05, Linf 0.00627107, total time[s] 0.072066 +Converged at iteration 28, L1 9.77492e-05, Linf 0.00582945, total time[s] 0.074735 +Converged at iteration 30, L1 6.71989e-05, Linf 0.00490447, total time[s] 0.115738 +Converged at iteration 28, L1 8.06964e-05, Linf 0.00347916, total time[s] 0.104796 +Converged at iteration 29, L1 8.82258e-05, Linf 0.0033139, total time[s] 0.076883 +Converged at iteration 30, L1 9.89196e-05, Linf 0.00359558, total time[s] 0.091361 +Converged at iteration 31, L1 8.50684e-05, Linf 0.00428835, total time[s] 0.084322 +Converged at iteration 33, L1 7.38767e-05, Linf 0.00512802, total time[s] 0.087878 +Converged at iteration 28, L1 6.93578e-05, Linf 0.00368138, total time[s] 0.073226 +Converged at iteration 24, L1 8.80276e-05, Linf 0.00184143, total time[s] 0.069461 +Converged at iteration 25, L1 6.73728e-05, Linf 0.00414443, total time[s] 0.064923 +Converged at iteration 39, L1 9.61803e-05, Linf 0.00527692, total time[s] 0.107677 +Converged at iteration 36, L1 7.05883e-05, Linf 0.0036055, total time[s] 0.102213 +Converged at iteration 28, L1 5.88861e-05, Linf 0.00543092, total time[s] 0.074015 +Converged at iteration 31, L1 6.11053e-05, Linf 0.0050791, total time[s] 0.082725 +Converged at iteration 26, L1 8.17487e-05, Linf 0.00554264, total time[s] 0.076216 +Converged at iteration 21, L1 7.9884e-05, Linf 0.00412687, total time[s] 0.06254 +Converged at iteration 20, L1 8.66814e-05, Linf 0.00530052, total time[s] 0.088416 +Converged at iteration 23, L1 6.40792e-05, Linf 0.00640201, total time[s] 0.078687 +Converged at iteration 27, L1 7.67134e-05, Linf 0.00547301, total time[s] 0.079524 +Converged at iteration 25, L1 9.03725e-05, Linf 0.0041931, total time[s] 0.093353 +Converged at iteration 21, L1 5.00174e-05, Linf 0.00420758, total time[s] 0.069653 +Converged at iteration 17, L1 9.74383e-05, Linf 0.00424854, total time[s] 0.056934 +Converged at iteration 31, L1 8.60738e-05, Linf 0.00274178, total time[s] 0.08216 +Converged at iteration 20, L1 7.28797e-05, Linf 0.00525792, total time[s] 0.059113 +Converged at iteration 24, L1 6.54536e-05, Linf 0.0054133, total time[s] 0.084558 +Converged at iteration 28, L1 9.49175e-05, Linf 0.00397579, total time[s] 0.096754 +Converged at iteration 24, L1 6.72429e-05, Linf 0.00558606, total time[s] 0.064745 +Converged at iteration 22, L1 6.68962e-05, Linf 0.00421648, total time[s] 0.087189 +Converged at iteration 23, L1 8.59323e-05, Linf 0.00445833, total time[s] 0.07158 +Converged at iteration 26, L1 6.53472e-05, Linf 0.00482243, total time[s] 0.085115 +Converged at iteration 29, L1 6.65048e-05, Linf 0.00421742, total time[s] 0.075569 +Converged at iteration 30, L1 8.41207e-05, Linf 0.00477704, total time[s] 0.078594 +Converged at iteration 29, L1 7.08366e-05, Linf 0.00307504, total time[s] 0.078978 +Converged at iteration 29, L1 8.53448e-05, Linf 0.00315095, total time[s] 0.078629 +Converged at iteration 31, L1 8.30356e-05, Linf 0.00348455, total time[s] 0.0869 +Converged at iteration 33, L1 6.75175e-05, Linf 0.00407859, total time[s] 0.093004 +Converged at iteration 33, L1 7.65569e-05, Linf 0.00519967, total time[s] 0.093385 +Converged at iteration 28, L1 7.51766e-05, Linf 0.00380699, total time[s] 0.104682 +Converged at iteration 24, L1 8.37894e-05, Linf 0.00211886, total time[s] 0.067353 +Converged at iteration 25, L1 8.98077e-05, Linf 0.004812, total time[s] 0.066256 +Converged at iteration 39, L1 9.86701e-05, Linf 0.00508398, total time[s] 0.141805 +Converged at iteration 36, L1 6.8268e-05, Linf 0.00340332, total time[s] 0.101128 +Converged at iteration 29, L1 6.91489e-05, Linf 0.00494317, total time[s] 0.090311 +Converged at iteration 31, L1 6.1607e-05, Linf 0.00507072, total time[s] 0.11782 +Converged at iteration 26, L1 8.72814e-05, Linf 0.00562261, total time[s] 0.083658 +Converged at iteration 21, L1 8.74098e-05, Linf 0.00438737, total time[s] 0.085908 +Converged at iteration 21, L1 6.10364e-05, Linf 0.00408315, total time[s] 0.056993 +Converged at iteration 24, L1 5.89933e-05, Linf 0.00531273, total time[s] 0.072578 +Converged at iteration 27, L1 9.70024e-05, Linf 0.00551555, total time[s] 0.072003 +Converged at iteration 26, L1 6.50024e-05, Linf 0.00355562, total time[s] 0.068879 +Converged at iteration 21, L1 6.14291e-05, Linf 0.00427713, total time[s] 0.067514 +Converged at iteration 18, L1 5.80661e-05, Linf 0.00275446, total time[s] 0.0586 +Converged at iteration 31, L1 8.07079e-05, Linf 0.00271029, total time[s] 0.08748 +Converged at iteration 20, L1 7.93673e-05, Linf 0.00509573, total time[s] 0.060643 +Converged at iteration 24, L1 6.72778e-05, Linf 0.00519445, total time[s] 0.074443 +Converged at iteration 29, L1 8.93904e-05, Linf 0.0034083, total time[s] 0.094514 +Converged at iteration 24, L1 8.90984e-05, Linf 0.00556752, total time[s] 0.06822 +Converged at iteration 22, L1 8.47566e-05, Linf 0.004261, total time[s] 0.067296 +Converged at iteration 23, L1 9.34056e-05, Linf 0.00459372, total time[s] 0.108925 +Converged at iteration 26, L1 6.69999e-05, Linf 0.00498647, total time[s] 0.084088 +Converged at iteration 29, L1 6.89691e-05, Linf 0.00466029, total time[s] 0.086398 +Converged at iteration 31, L1 7.33119e-05, Linf 0.00379285, total time[s] 0.097614 +Converged at iteration 29, L1 9.98908e-05, Linf 0.00348589, total time[s] 0.096478 +Converged at iteration 29, L1 8.10686e-05, Linf 0.00302793, total time[s] 0.086268 +Converged at iteration 31, L1 9.79976e-05, Linf 0.00394167, total time[s] 0.093162 +Converged at iteration 34, L1 8.52297e-05, Linf 0.00442714, total time[s] 0.093866 +Converged at iteration 33, L1 7.86611e-05, Linf 0.00504374, total time[s] 0.101598 +Converged at iteration 28, L1 8.01988e-05, Linf 0.00390388, total time[s] 0.095651 +Converged at iteration 24, L1 7.9169e-05, Linf 0.00234517, total time[s] 0.065473 +Converged at iteration 26, L1 7.31402e-05, Linf 0.00407999, total time[s] 0.117472 +Converged at iteration 39, L1 9.98803e-05, Linf 0.00492138, total time[s] 0.17158 +Converged at iteration 35, L1 9.71145e-05, Linf 0.00384588, total time[s] 0.126249 +Converged at iteration 30, L1 7.13207e-05, Linf 0.00420522, total time[s] 0.125153 +Converged at iteration 31, L1 6.13285e-05, Linf 0.0050657, total time[s] 0.093178 +Converged at iteration 26, L1 9.03496e-05, Linf 0.00567998, total time[s] 0.080538 +Converged at iteration 21, L1 9.45018e-05, Linf 0.00457796, total time[s] 0.077877 +Converged at iteration 21, L1 6.86341e-05, Linf 0.00397007, total time[s] 0.075895 +Converged at iteration 24, L1 8.01615e-05, Linf 0.00522335, total time[s] 0.090948 +Converged at iteration 28, L1 6.74247e-05, Linf 0.00440909, total time[s] 0.076039 +Converged at iteration 26, L1 8.00692e-05, Linf 0.00416865, total time[s] 0.068258 +Converged at iteration 21, L1 8.04258e-05, Linf 0.00432884, total time[s] 0.060177 +Converged at iteration 18, L1 7.05673e-05, Linf 0.00287711, total time[s] 0.050939 +Converged at iteration 31, L1 7.58512e-05, Linf 0.00268641, total time[s] 0.089667 +Converged at iteration 20, L1 8.15855e-05, Linf 0.00496865, total time[s] 0.096059 +Converged at iteration 24, L1 6.84878e-05, Linf 0.00502946, total time[s] 0.077294 +Converged at iteration 30, L1 8.77962e-05, Linf 0.00333026, total time[s] 0.082735 +Converged at iteration 25, L1 8.23007e-05, Linf 0.00457537, total time[s] 0.092415 +Converged at iteration 23, L1 7.73066e-05, Linf 0.00384566, total time[s] 0.070306 +Converged at iteration 23, L1 9.34573e-05, Linf 0.00457355, total time[s] 0.06214 +Converged at iteration 26, L1 6.86202e-05, Linf 0.00503537, total time[s] 0.070477 +Converged at iteration 29, L1 7.08878e-05, Linf 0.0047443, total time[s] 0.090662 +Converged at iteration 32, L1 7.68689e-05, Linf 0.00340193, total time[s] 0.118948 +Converged at iteration 30, L1 9.78582e-05, Linf 0.00344818, total time[s] 0.103469 +Converged at iteration 29, L1 7.8025e-05, Linf 0.00293057, total time[s] 0.093029 +Converged at iteration 32, L1 7.52033e-05, Linf 0.00336346, total time[s] 0.086137 +Converged at iteration 35, L1 9.15512e-05, Linf 0.00403282, total time[s] 0.093585 +Converged at iteration 33, L1 8.03332e-05, Linf 0.00501639, total time[s] 0.089727 +Converged at iteration 28, L1 8.37231e-05, Linf 0.00397535, total time[s] 0.088943 +Converged at iteration 24, L1 7.80253e-05, Linf 0.00252756, total time[s] 0.062717 +Converged at iteration 26, L1 8.38205e-05, Linf 0.00407334, total time[s] 0.080547 +Converged at iteration 40, L1 6.48862e-05, Linf 0.00410754, total time[s] 0.105694 +Converged at iteration 35, L1 9.34265e-05, Linf 0.00377203, total time[s] 0.100041 +Converged at iteration 30, L1 8.82786e-05, Linf 0.00418868, total time[s] 0.101226 +Converged at iteration 31, L1 6.14539e-05, Linf 0.0050602, total time[s] 0.105082 +Converged at iteration 26, L1 9.35049e-05, Linf 0.00572065, total time[s] 0.077157 +Converged at iteration 22, L1 6.23712e-05, Linf 0.00400747, total time[s] 0.071468 +Converged at iteration 21, L1 6.85076e-05, Linf 0.00377803, total time[s] 0.077617 +Converged at iteration 24, L1 8.86623e-05, Linf 0.00510403, total time[s] 0.07624 +Converged at iteration 28, L1 6.95605e-05, Linf 0.00441599, total time[s] 0.075169 +Converged at iteration 26, L1 8.19891e-05, Linf 0.00473387, total time[s] 0.07062 +Converged at iteration 22, L1 5.70841e-05, Linf 0.00335886, total time[s] 0.065793 +Converged at iteration 18, L1 8.39994e-05, Linf 0.00338185, total time[s] 0.047931 +Converged at iteration 31, L1 7.16348e-05, Linf 0.00267017, total time[s] 0.101858 +Converged at iteration 20, L1 8.23962e-05, Linf 0.00479842, total time[s] 0.066628 +Converged at iteration 24, L1 6.96703e-05, Linf 0.00491097, total time[s] 0.062545 +Converged at iteration 31, L1 8.59063e-05, Linf 0.00344922, total time[s] 0.084729 +Converged at iteration 26, L1 8.58068e-05, Linf 0.00408717, total time[s] 0.084489 +Converged at iteration 24, L1 7.15331e-05, Linf 0.00361142, total time[s] 0.093882 +Converged at iteration 23, L1 9.23206e-05, Linf 0.00438607, total time[s] 0.060272 +Converged at iteration 26, L1 6.9773e-05, Linf 0.00474211, total time[s] 0.100787 +Converged at iteration 29, L1 7.25506e-05, Linf 0.00493138, total time[s] 0.088425 +Converged at iteration 33, L1 8.84314e-05, Linf 0.003339, total time[s] 0.084884 +Converged at iteration 31, L1 7.71476e-05, Linf 0.00330122, total time[s] 0.095868 +Converged at iteration 29, L1 7.52753e-05, Linf 0.00285076, total time[s] 0.106708 +Converged at iteration 32, L1 7.69122e-05, Linf 0.00341842, total time[s] 0.094221 +Converged at iteration 36, L1 7.48079e-05, Linf 0.00338833, total time[s] 0.094809 +Converged at iteration 33, L1 8.15888e-05, Linf 0.00495197, total time[s] 0.089405 +Converged at iteration 28, L1 8.6554e-05, Linf 0.00403212, total time[s] 0.082971 +Converged at iteration 24, L1 7.84627e-05, Linf 0.00267391, total time[s] 0.066258 +Converged at iteration 26, L1 8.26932e-05, Linf 0.00399991, total time[s] 0.070172 +Converged at iteration 40, L1 6.57027e-05, Linf 0.00402195, total time[s] 0.103128 +Converged at iteration 35, L1 9.01375e-05, Linf 0.00368713, total time[s] 0.08973 +Converged at iteration 30, L1 8.93291e-05, Linf 0.00419269, total time[s] 0.081 +Converged at iteration 31, L1 6.15759e-05, Linf 0.00505402, total time[s] 0.080925 +Converged at iteration 26, L1 9.58915e-05, Linf 0.00574936, total time[s] 0.072062 +Converged at iteration 22, L1 6.70087e-05, Linf 0.0040725, total time[s] 0.068284 +Converged at iteration 21, L1 6.59534e-05, Linf 0.00362247, total time[s] 0.057788 +Converged at iteration 24, L1 8.90183e-05, Linf 0.00501871, total time[s] 0.087544 +Converged at iteration 28, L1 7.13177e-05, Linf 0.0044234, total time[s] 0.085781 +Converged at iteration 26, L1 8.074e-05, Linf 0.0050987, total time[s] 0.069512 +Converged at iteration 22, L1 6.72137e-05, Linf 0.00762723, total time[s] 0.078035 +Converged at iteration 18, L1 9.42365e-05, Linf 0.00381303, total time[s] 0.053592 +Converged at iteration 31, L1 6.7907e-05, Linf 0.00265912, total time[s] 0.099557 +Converged at iteration 20, L1 8.31228e-05, Linf 0.00479579, total time[s] 0.053586 +Converged at iteration 24, L1 7.07065e-05, Linf 0.00482942, total time[s] 0.06302 +Converged at iteration 31, L1 9.45144e-05, Linf 0.00413536, total time[s] 0.098103 +Converged at iteration 27, L1 8.20748e-05, Linf 0.00395654, total time[s] 0.08794 +Converged at iteration 24, L1 8.14762e-05, Linf 0.00397452, total time[s] 0.072325 +Converged at iteration 23, L1 9.36342e-05, Linf 0.0058288, total time[s] 0.067133 +Converged at iteration 26, L1 7.06298e-05, Linf 0.00474864, total time[s] 0.068131 +Converged at iteration 29, L1 7.38259e-05, Linf 0.00491247, total time[s] 0.076868 +Converged at iteration 34, L1 7.96744e-05, Linf 0.00346231, total time[s] 0.107291 +Converged at iteration 31, L1 7.50534e-05, Linf 0.00346867, total time[s] 0.093021 +Converged at iteration 29, L1 7.28489e-05, Linf 0.00278733, total time[s] 0.082674 +Converged at iteration 32, L1 7.9151e-05, Linf 0.00348095, total time[s] 0.091507 +Converged at iteration 36, L1 7.93597e-05, Linf 0.00347039, total time[s] 0.12307 +Converged at iteration 33, L1 8.24713e-05, Linf 0.00495613, total time[s] 0.098617 +Converged at iteration 28, L1 8.88453e-05, Linf 0.00407985, total time[s] 0.083413 +Converged at iteration 24, L1 7.91524e-05, Linf 0.00279065, total time[s] 0.13427 +Converged at iteration 26, L1 8.24872e-05, Linf 0.00395632, total time[s] 0.074291 +Converged at iteration 39, L1 6.57223e-05, Linf 0.00735465, total time[s] 0.129562 +Converged at iteration 36, L1 6.95884e-05, Linf 0.00635362, total time[s] 0.09689 +Converged at iteration 24, L1 6.16922e-05, Linf 0.00259381, total time[s] 0.064435 +Converged at iteration 30, L1 9.94031e-05, Linf 0.00628144, total time[s] 0.086013 +Converged at iteration 25, L1 6.2951e-05, Linf 0.00510741, total time[s] 0.09273 +Converged at iteration 21, L1 7.68301e-05, Linf 0.00428498, total time[s] 0.065696 +Converged at iteration 19, L1 5.78835e-05, Linf 0.00504082, total time[s] 0.052479 +Converged at iteration 20, L1 8.13826e-05, Linf 0.00708948, total time[s] 0.073286 +Converged at iteration 23, L1 9.17128e-05, Linf 0.00475014, total time[s] 0.067927 +Converged at iteration 24, L1 5.80522e-05, Linf 0.00462575, total time[s] 0.076804 +Converged at iteration 20, L1 4.9607e-05, Linf 0.00522162, total time[s] 0.05169 +Converged at iteration 16, L1 9.4598e-05, Linf 0.00354456, total time[s] 0.046613 +Converged at iteration 32, L1 6.79393e-05, Linf 0.00284125, total time[s] 0.096706 +Converged at iteration 19, L1 9.16114e-05, Linf 0.00638748, total time[s] 0.049419 +Converged at iteration 23, L1 7.11354e-05, Linf 0.00572832, total time[s] 0.080266 +Converged at iteration 26, L1 5.72073e-05, Linf 0.00437984, total time[s] 0.098243 +Converged at iteration 23, L1 5.31923e-05, Linf 0.00367878, total time[s] 0.078101 +Converged at iteration 20, L1 5.98508e-05, Linf 0.00413397, total time[s] 0.059815 +Converged at iteration 23, L1 6.45934e-05, Linf 0.00280977, total time[s] 0.088882 +Converged at iteration 25, L1 8.08559e-05, Linf 0.00343693, total time[s] 0.109621 +Converged at iteration 28, L1 6.68894e-05, Linf 0.00314054, total time[s] 0.076408 +Converged at iteration 29, L1 6.12339e-05, Linf 0.00563394, total time[s] 0.08927 +Converged at iteration 27, L1 6.54311e-05, Linf 0.00339911, total time[s] 0.090731 +Converged at iteration 29, L1 7.85356e-05, Linf 0.00412443, total time[s] 0.092844 +Converged at iteration 29, L1 8.32509e-05, Linf 0.00268125, total time[s] 0.096979 +Converged at iteration 28, L1 6.24412e-05, Linf 0.00185428, total time[s] 0.075753 +Converged at iteration 32, L1 9.75943e-05, Linf 0.00740926, total time[s] 0.096074 +Converged at iteration 26, L1 8.17397e-05, Linf 0.00311525, total time[s] 0.09564 +Converged at iteration 25, L1 7.94271e-05, Linf 0.00228846, total time[s] 0.070132 +Converged at iteration 23, L1 5.83121e-05, Linf 0.00254623, total time[s] 0.069938 +Converged at iteration 39, L1 7.16767e-05, Linf 0.00687492, total time[s] 0.118881 +Converged at iteration 36, L1 7.1925e-05, Linf 0.00567005, total time[s] 0.112755 +Converged at iteration 24, L1 7.18719e-05, Linf 0.00308688, total time[s] 0.067571 +Converged at iteration 31, L1 5.69072e-05, Linf 0.00504003, total time[s] 0.102131 +Converged at iteration 25, L1 7.73341e-05, Linf 0.00550514, total time[s] 0.089776 +Converged at iteration 21, L1 6.38169e-05, Linf 0.00375479, total time[s] 0.071124 +Converged at iteration 19, L1 6.61202e-05, Linf 0.00444944, total time[s] 0.0553 +Converged at iteration 20, L1 8.91736e-05, Linf 0.00646016, total time[s] 0.058911 +Converged at iteration 24, L1 6.31216e-05, Linf 0.00361088, total time[s] 0.070073 +Converged at iteration 24, L1 7.04781e-05, Linf 0.00481267, total time[s] 0.072384 +Converged at iteration 20, L1 5.54462e-05, Linf 0.00524224, total time[s] 0.063416 +Converged at iteration 17, L1 5.18434e-05, Linf 0.00222529, total time[s] 0.050879 +Converged at iteration 32, L1 6.77135e-05, Linf 0.00262126, total time[s] 0.092875 +Converged at iteration 19, L1 9.43166e-05, Linf 0.00682308, total time[s] 0.05524 +Converged at iteration 23, L1 7.56997e-05, Linf 0.00680903, total time[s] 0.073498 +Converged at iteration 26, L1 7.334e-05, Linf 0.00547325, total time[s] 0.088589 +Converged at iteration 23, L1 5.39151e-05, Linf 0.00536243, total time[s] 0.065995 +Converged at iteration 20, L1 7.15636e-05, Linf 0.00509636, total time[s] 0.058807 +Converged at iteration 23, L1 6.67942e-05, Linf 0.00287992, total time[s] 0.063978 +Converged at iteration 25, L1 8.44227e-05, Linf 0.00392665, total time[s] 0.075262 +Converged at iteration 28, L1 7.45989e-05, Linf 0.00386555, total time[s] 0.083019 +Converged at iteration 29, L1 7.10178e-05, Linf 0.00608423, total time[s] 0.090437 +Converged at iteration 27, L1 7.36409e-05, Linf 0.00374939, total time[s] 0.131018 +Converged at iteration 29, L1 7.93896e-05, Linf 0.00391417, total time[s] 0.129495 +Converged at iteration 29, L1 9.04395e-05, Linf 0.00274409, total time[s] 0.090191 +Converged at iteration 28, L1 7.81384e-05, Linf 0.00238766, total time[s] 0.094063 +Converged at iteration 33, L1 5.88275e-05, Linf 0.00599735, total time[s] 0.100635 +Converged at iteration 27, L1 6.08405e-05, Linf 0.0030791, total time[s] 0.081349 +Converged at iteration 25, L1 7.77148e-05, Linf 0.00209187, total time[s] 0.086543 +Converged at iteration 23, L1 7.14921e-05, Linf 0.00309666, total time[s] 0.061416 +Converged at iteration 39, L1 7.89145e-05, Linf 0.00646046, total time[s] 0.121124 +Converged at iteration 36, L1 7.31386e-05, Linf 0.0051123, total time[s] 0.110759 +Converged at iteration 24, L1 8.98779e-05, Linf 0.00425124, total time[s] 0.070677 +Converged at iteration 31, L1 5.80177e-05, Linf 0.00508334, total time[s] 0.094228 +Converged at iteration 25, L1 9.10137e-05, Linf 0.00574353, total time[s] 0.073051 +Converged at iteration 20, L1 9.75701e-05, Linf 0.00367084, total time[s] 0.154989 +Converged at iteration 19, L1 7.4963e-05, Linf 0.00501808, total time[s] 0.077469 +Converged at iteration 21, L1 4.12095e-05, Linf 0.00442431, total time[s] 0.079628 +Converged at iteration 24, L1 9.1504e-05, Linf 0.00597126, total time[s] 0.085989 +Converged at iteration 24, L1 8.25756e-05, Linf 0.0049478, total time[s] 0.092668 +Converged at iteration 20, L1 6.1755e-05, Linf 0.00527501, total time[s] 0.074826 +Converged at iteration 17, L1 5.74588e-05, Linf 0.00257391, total time[s] 0.048734 +Converged at iteration 32, L1 6.85269e-05, Linf 0.00246338, total time[s] 0.107493 +Converged at iteration 19, L1 9.62319e-05, Linf 0.00715294, total time[s] 0.055229 +Converged at iteration 23, L1 8.15791e-05, Linf 0.00714587, total time[s] 0.075978 +Converged at iteration 26, L1 9.06088e-05, Linf 0.00591376, total time[s] 0.064555 +Converged at iteration 23, L1 5.89831e-05, Linf 0.00610748, total time[s] 0.05835 +Converged at iteration 20, L1 8.65835e-05, Linf 0.00563883, total time[s] 0.050999 +Converged at iteration 23, L1 6.84701e-05, Linf 0.00302906, total time[s] 0.05799 +Converged at iteration 25, L1 8.79711e-05, Linf 0.00464863, total time[s] 0.066935 +Converged at iteration 28, L1 8.14227e-05, Linf 0.00388678, total time[s] 0.075354 +Converged at iteration 29, L1 8.1154e-05, Linf 0.0061392, total time[s] 0.076416 +Converged at iteration 40, L1 6.71429e-05, Linf 0.00367456, total time[s] 0.116135 +Converged at iteration 35, L1 7.6093e-05, Linf 0.00339723, total time[s] 0.110086 +Converged at iteration 30, L1 9.63576e-05, Linf 0.00435415, total time[s] 0.084456 +Converged at iteration 31, L1 6.19673e-05, Linf 0.00502563, total time[s] 0.083303 +Converged at iteration 27, L1 6.25983e-05, Linf 0.00499539, total time[s] 0.073589 +Converged at iteration 22, L1 8.58645e-05, Linf 0.00448833, total time[s] 0.060814 +Converged at iteration 20, L1 9.60193e-05, Linf 0.00397841, total time[s] 0.078217 +Converged at iteration 24, L1 8.84241e-05, Linf 0.00482827, total time[s] 0.084087 +Converged at iteration 28, L1 7.389e-05, Linf 0.00445904, total time[s] 0.090452 +Converged at iteration 26, L1 8.11739e-05, Linf 0.00546555, total time[s] 0.089271 +Converged at iteration 22, L1 7.39233e-05, Linf 0.00508659, total time[s] 0.092219 +Converged at iteration 19, L1 6.63243e-05, Linf 0.00393106, total time[s] 0.085325 +Converged at iteration 30, L1 7.98729e-05, Linf 0.00329634, total time[s] 0.15466 +Converged at iteration 20, L1 8.44921e-05, Linf 0.00454995, total time[s] 0.09217 +Converged at iteration 24, L1 7.10829e-05, Linf 0.00463288, total time[s] 0.099241 +Converged at iteration 31, L1 8.93623e-05, Linf 0.00558545, total time[s] 0.109274 +Converged at iteration 27, L1 9.91818e-05, Linf 0.00564796, total time[s] 0.101622 +Converged at iteration 24, L1 8.792e-05, Linf 0.00465025, total time[s] 0.076534 +Converged at iteration 23, L1 9.22736e-05, Linf 0.00420573, total time[s] 0.074895 +Converged at iteration 26, L1 7.22272e-05, Linf 0.00446107, total time[s] 0.105909 +Converged at iteration 29, L1 7.82205e-05, Linf 0.00479587, total time[s] 0.095185 +Converged at iteration 34, L1 7.0941e-05, Linf 0.00422667, total time[s] 0.10074 +Converged at iteration 30, L1 9.39458e-05, Linf 0.00442621, total time[s] 0.089524 +Converged at iteration 28, L1 9.49932e-05, Linf 0.00310977, total time[s] 0.096275 +Converged at iteration 32, L1 9.39491e-05, Linf 0.0037408, total time[s] 0.135218 +Converged at iteration 37, L1 7.33956e-05, Linf 0.00327802, total time[s] 0.112725 +Converged at iteration 33, L1 8.44817e-05, Linf 0.00469106, total time[s] 0.087464 +Converged at iteration 28, L1 9.69531e-05, Linf 0.00430192, total time[s] 0.077292 +Converged at iteration 24, L1 8.82891e-05, Linf 0.00325071, total time[s] 0.063185 +Converged at iteration 26, L1 8.98069e-05, Linf 0.00383965, total time[s] 0.069526 +Converged at iteration 39, L1 8.94011e-05, Linf 0.00577539, total time[s] 0.10359 +Converged at iteration 36, L1 7.35942e-05, Linf 0.00419495, total time[s] 0.092806 +Converged at iteration 26, L1 4.72094e-05, Linf 0.00518437, total time[s] 0.067374 +Converged at iteration 31, L1 6.18636e-05, Linf 0.00509384, total time[s] 0.083125 +Converged at iteration 26, L1 6.89611e-05, Linf 0.0052903, total time[s] 0.075825 +Converged at iteration 21, L1 6.22425e-05, Linf 0.00330357, total time[s] 0.061782 +Converged at iteration 20, L1 5.25731e-05, Linf 0.00427268, total time[s] 0.084668 +Converged at iteration 21, L1 9.23378e-05, Linf 0.00865091, total time[s] 0.068148 +Converged at iteration 26, L1 6.23111e-05, Linf 0.00570809, total time[s] 0.089087 +Converged at iteration 25, L1 6.14197e-05, Linf 0.00403108, total time[s] 0.066227 +Converged at iteration 20, L1 7.90299e-05, Linf 0.00656382, total time[s] 0.055638 +Converged at iteration 17, L1 7.2724e-05, Linf 0.00346037, total time[s] 0.052173 +Converged at iteration 31, L1 9.84878e-05, Linf 0.00280287, total time[s] 0.090548 +Converged at iteration 20, L1 6.16498e-05, Linf 0.00533252, total time[s] 0.058627 +Converged at iteration 23, L1 9.58202e-05, Linf 0.00649359, total time[s] 0.065794 +Converged at iteration 27, L1 8.11387e-05, Linf 0.00513633, total time[s] 0.092153 +Converged at iteration 23, L1 8.21849e-05, Linf 0.00838955, total time[s] 0.07255 +Converged at iteration 21, L1 7.76946e-05, Linf 0.00479891, total time[s] 0.076931 +Converged at iteration 23, L1 7.22892e-05, Linf 0.00366404, total time[s] 0.066762 +Converged at iteration 26, L1 6.71256e-05, Linf 0.00339763, total time[s] 0.088582 +Converged at iteration 28, L1 9.29935e-05, Linf 0.00537232, total time[s] 0.080023 +Converged at iteration 29, L1 9.96985e-05, Linf 0.00643899, total time[s] 0.089261 +Converged at iteration 28, L1 6.43433e-05, Linf 0.00331086, total time[s] 0.10873 +Converged at iteration 29, L1 8.47445e-05, Linf 0.00346172, total time[s] 0.081734 +Converged at iteration 30, L1 8.39522e-05, Linf 0.00292011, total time[s] 0.149722 +Converged at iteration 30, L1 8.0887e-05, Linf 0.00268004, total time[s] 0.087744 +Converged at iteration 33, L1 7.07895e-05, Linf 0.00539218, total time[s] 0.098024 +Converged at iteration 27, L1 9.859e-05, Linf 0.00413877, total time[s] 0.082305 +Converged at iteration 24, L1 8.83245e-05, Linf 0.00181034, total time[s] 0.08214 +Converged at iteration 24, L1 8.44289e-05, Linf 0.00441133, total time[s] 0.069034 +Converged at iteration 39, L1 9.33915e-05, Linf 0.0054887, total time[s] 0.106705 +Converged at iteration 36, L1 7.23703e-05, Linf 0.00384484, total time[s] 0.126063 +Converged at iteration 27, L1 5.19171e-05, Linf 0.00565748, total time[s] 0.104778 +Converged at iteration 31, L1 6.20618e-05, Linf 0.0080565, total time[s] 0.10595 +Converged at iteration 26, L1 7.66923e-05, Linf 0.00538587, total time[s] 0.067256 +Converged at iteration 21, L1 7.22168e-05, Linf 0.00374029, total time[s] 0.064571 +Converged at iteration 20, L1 6.90619e-05, Linf 0.00499097, total time[s] 0.07486 +Converged at iteration 22, L1 7.53872e-05, Linf 0.00751934, total time[s] 0.069769 +Converged at iteration 26, L1 9.72422e-05, Linf 0.00651815, total time[s] 0.085276 +Converged at iteration 25, L1 7.44413e-05, Linf 0.00412524, total time[s] 0.082282 +Converged at iteration 20, L1 8.84205e-05, Linf 0.00555823, total time[s] 0.055305 +Converged at iteration 17, L1 8.52498e-05, Linf 0.00400215, total time[s] 0.056388 +Converged at iteration 31, L1 9.14604e-05, Linf 0.00277119, total time[s] 0.093301 +Converged at iteration 20, L1 6.65166e-05, Linf 0.00539273, total time[s] 0.05772 +Converged at iteration 24, L1 6.21083e-05, Linf 0.00552684, total time[s] 0.075785 +Converged at iteration 28, L1 7.08115e-05, Linf 0.003739, total time[s] 0.079779 +Converged at iteration 23, L1 9.56377e-05, Linf 0.00711669, total time[s] 0.090612 +Converged at iteration 21, L1 9.29369e-05, Linf 0.00485117, total time[s] 0.096341 +Converged at iteration 23, L1 7.86347e-05, Linf 0.00414958, total time[s] 0.072549 +Converged at iteration 25, L1 9.9432e-05, Linf 0.0062558, total time[s] 0.068039 +Converged at iteration 28, L1 9.82674e-05, Linf 0.00586765, total time[s] 0.081044 +Converged at iteration 30, L1 6.86252e-05, Linf 0.00488173, total time[s] 0.078776 +Converged at iteration 28, L1 8.30367e-05, Linf 0.0035021, total time[s] 0.071707 +Converged at iteration 29, L1 8.82908e-05, Linf 0.00329485, total time[s] 0.075679 +Converged at iteration 31, L1 6.93368e-05, Linf 0.00290639, total time[s] 0.08527 +Converged at iteration 31, L1 9.11244e-05, Linf 0.00460461, total time[s] 0.098139 +Converged at iteration 33, L1 7.40814e-05, Linf 0.00530591, total time[s] 0.085278 +Converged at iteration 28, L1 6.99522e-05, Linf 0.00368893, total time[s] 0.072618 +Converged at iteration 24, L1 8.78554e-05, Linf 0.00186797, total time[s] 0.063137 +Converged at iteration 25, L1 6.96069e-05, Linf 0.00424555, total time[s] 0.063722 +Converged at iteration 39, L1 9.64673e-05, Linf 0.0052541, total time[s] 0.104471 +Converged at iteration 36, L1 7.04914e-05, Linf 0.00357919, total time[s] 0.109096 +Converged at iteration 28, L1 6.47049e-05, Linf 0.00554167, total time[s] 0.101168 +Converged at iteration 31, L1 6.18828e-05, Linf 0.00510781, total time[s] 0.081213 +Converged at iteration 26, L1 8.23972e-05, Linf 0.00555219, total time[s] 0.066703 +Converged at iteration 21, L1 8.08459e-05, Linf 0.00411399, total time[s] 0.064504 +Converged at iteration 20, L1 8.89329e-05, Linf 0.00531226, total time[s] 0.070235 +Converged at iteration 23, L1 6.79561e-05, Linf 0.00653276, total time[s] 0.07791 +Converged at iteration 27, L1 7.91815e-05, Linf 0.0054803, total time[s] 0.138848 +Converged at iteration 25, L1 9.26319e-05, Linf 0.00420028, total time[s] 0.096587 +Converged at iteration 21, L1 5.09662e-05, Linf 0.00421422, total time[s] 0.081492 +Converged at iteration 17, L1 9.891e-05, Linf 0.00426108, total time[s] 0.063367 +Converged at iteration 31, L1 8.5504e-05, Linf 0.00273817, total time[s] 0.117786 +Converged at iteration 20, L1 7.36181e-05, Linf 0.00523993, total time[s] 0.056622 +Converged at iteration 24, L1 6.55966e-05, Linf 0.00539235, total time[s] 0.069618 +Converged at iteration 28, L1 9.75046e-05, Linf 0.00400377, total time[s] 0.081177 +Converged at iteration 24, L1 6.91154e-05, Linf 0.00558203, total time[s] 0.063917 +Converged at iteration 22, L1 6.75893e-05, Linf 0.00401563, total time[s] 0.063404 +Converged at iteration 23, L1 8.69723e-05, Linf 0.00448288, total time[s] 0.07824 +Converged at iteration 26, L1 6.55638e-05, Linf 0.0048569, total time[s] 0.092698 +Converged at iteration 29, L1 6.71074e-05, Linf 0.00427271, total time[s] 0.186005 +Converged at iteration 30, L1 8.6113e-05, Linf 0.00477607, total time[s] 0.093465 +Converged at iteration 29, L1 7.32486e-05, Linf 0.00311722, total time[s] 0.080847 +Converged at iteration 29, L1 8.46904e-05, Linf 0.00313619, total time[s] 0.079439 +Converged at iteration 31, L1 8.43382e-05, Linf 0.00354956, total time[s] 0.089639 +Converged at iteration 33, L1 7.32312e-05, Linf 0.00428568, total time[s] 0.08818 +Converged at iteration 33, L1 7.67607e-05, Linf 0.00518536, total time[s] 0.085413 +Converged at iteration 28, L1 7.57602e-05, Linf 0.00381922, total time[s] 0.080539 +Converged at iteration 24, L1 8.30459e-05, Linf 0.0021453, total time[s] 0.069525 +Converged at iteration 25, L1 9.26645e-05, Linf 0.00484611, total time[s] 0.098393 +Converged at iteration 40, L1 6.44746e-05, Linf 0.00432722, total time[s] 0.125094 +Converged at iteration 36, L1 6.85782e-05, Linf 0.00338648, total time[s] 0.103156 +Converged at iteration 29, L1 7.3696e-05, Linf 0.00502876, total time[s] 0.09313 +Converged at iteration 31, L1 6.13886e-05, Linf 0.00507009, total time[s] 0.085921 +Converged at iteration 26, L1 8.70977e-05, Linf 0.00557277, total time[s] 0.081571 +Converged at iteration 21, L1 8.84215e-05, Linf 0.00436324, total time[s] 0.068427 +Converged at iteration 21, L1 6.22393e-05, Linf 0.00407404, total time[s] 0.05944 +Converged at iteration 24, L1 6.20202e-05, Linf 0.0053098, total time[s] 0.118971 +Converged at iteration 27, L1 9.87625e-05, Linf 0.00552012, total time[s] 0.07402 +Converged at iteration 26, L1 6.69021e-05, Linf 0.00364783, total time[s] 0.087452 +Converged at iteration 21, L1 6.32579e-05, Linf 0.00428383, total time[s] 0.057039 +Converged at iteration 18, L1 5.9273e-05, Linf 0.00276492, total time[s] 0.066039 +Converged at iteration 31, L1 8.05694e-05, Linf 0.0027075, total time[s] 0.095399 +Converged at iteration 20, L1 7.99943e-05, Linf 0.00508057, total time[s] 0.067643 +Converged at iteration 24, L1 6.74512e-05, Linf 0.00517737, total time[s] 0.064352 +Converged at iteration 29, L1 9.24144e-05, Linf 0.00345857, total time[s] 0.090888 +Converged at iteration 24, L1 9.2391e-05, Linf 0.0056111, total time[s] 0.089022 +Converged at iteration 22, L1 8.77678e-05, Linf 0.00429428, total time[s] 0.074715 +Converged at iteration 23, L1 9.35013e-05, Linf 0.0045969, total time[s] 0.066313 +Converged at iteration 26, L1 6.71871e-05, Linf 0.00498739, total time[s] 0.070619 +Converged at iteration 29, L1 6.91925e-05, Linf 0.0046935, total time[s] 0.093325 +Converged at iteration 31, L1 7.67223e-05, Linf 0.00382226, total time[s] 0.108157 +Converged at iteration 30, L1 7.13836e-05, Linf 0.00302968, total time[s] 0.090469 +Converged at iteration 29, L1 8.07703e-05, Linf 0.0030167, total time[s] 0.099502 +Converged at iteration 31, L1 9.99114e-05, Linf 0.0039803, total time[s] 0.101026 +Converged at iteration 34, L1 9.07203e-05, Linf 0.00451831, total time[s] 0.103895 +Converged at iteration 33, L1 7.88581e-05, Linf 0.00508766, total time[s] 0.106936 +Converged at iteration 28, L1 8.03116e-05, Linf 0.00391084, total time[s] 0.07831 +Converged at iteration 24, L1 7.88655e-05, Linf 0.00236718, total time[s] 0.081458 +Converged at iteration 26, L1 7.47073e-05, Linf 0.00409379, total time[s] 0.067312 +Converged at iteration 39, L1 9.98572e-05, Linf 0.00490653, total time[s] 0.111638 +Converged at iteration 35, L1 9.67207e-05, Linf 0.0038326, total time[s] 0.128807 +Converged at iteration 30, L1 7.38008e-05, Linf 0.00420902, total time[s] 0.07913 +Converged at iteration 31, L1 6.13431e-05, Linf 0.00506517, total time[s] 0.078016 +Converged at iteration 26, L1 9.07063e-05, Linf 0.00568492, total time[s] 0.066554 +Converged at iteration 21, L1 9.52835e-05, Linf 0.00459527, total time[s] 0.059059 +Converged at iteration 21, L1 6.88921e-05, Linf 0.00395068, total time[s] 0.056973 +Converged at iteration 24, L1 8.14971e-05, Linf 0.00521382, total time[s] 0.064489 +Converged at iteration 28, L1 6.78662e-05, Linf 0.00441169, total time[s] 0.07382 +Converged at iteration 26, L1 8.07784e-05, Linf 0.00432154, total time[s] 0.068978 +Converged at iteration 21, L1 8.2851e-05, Linf 0.00433312, total time[s] 0.056979 +Converged at iteration 18, L1 7.22055e-05, Linf 0.00292389, total time[s] 0.049627 +Converged at iteration 40, L1 6.74044e-05, Linf 0.00364081, total time[s] 0.144452 +Converged at iteration 35, L1 7.63022e-05, Linf 0.00339595, total time[s] 0.110838 +Converged at iteration 30, L1 9.64267e-05, Linf 0.00430061, total time[s] 0.098227 +Converged at iteration 31, L1 6.19969e-05, Linf 0.00502564, total time[s] 0.104925 +Converged at iteration 27, L1 6.2617e-05, Linf 0.00504582, total time[s] 0.07621 +Converged at iteration 22, L1 8.60745e-05, Linf 0.00448665, total time[s] 0.101778 +Converged at iteration 20, L1 9.6011e-05, Linf 0.00397837, total time[s] 0.081083 +Converged at iteration 24, L1 8.84414e-05, Linf 0.00485468, total time[s] 0.184954 +Converged at iteration 28, L1 7.40682e-05, Linf 0.0044591, total time[s] 0.104291 +Converged at iteration 26, L1 8.17927e-05, Linf 0.00546882, total time[s] 0.113294 +Converged at iteration 22, L1 7.39725e-05, Linf 0.00508622, total time[s] 0.089849 +Converged at iteration 19, L1 6.64689e-05, Linf 0.00393099, total time[s] 0.066652 +Converged at iteration 30, L1 7.98732e-05, Linf 0.00329635, total time[s] 0.095126 +Converged at iteration 20, L1 8.43915e-05, Linf 0.00455037, total time[s] 0.057728 +Converged at iteration 24, L1 7.10361e-05, Linf 0.00463254, total time[s] 0.101999 +Converged at iteration 31, L1 8.93467e-05, Linf 0.00569127, total time[s] 0.099186 +Converged at iteration 27, L1 9.91273e-05, Linf 0.00569865, total time[s] 0.101165 +Converged at iteration 24, L1 8.78999e-05, Linf 0.00465019, total time[s] 0.069261 +Converged at iteration 23, L1 9.21846e-05, Linf 0.00410189, total time[s] 0.111873 +Converged at iteration 26, L1 7.2238e-05, Linf 0.00446779, total time[s] 0.092714 +Converged at iteration 29, L1 7.81922e-05, Linf 0.00489918, total time[s] 0.096539 +Converged at iteration 34, L1 7.08695e-05, Linf 0.00423336, total time[s] 0.112141 +Converged at iteration 30, L1 9.39098e-05, Linf 0.00441896, total time[s] 0.139935 +Converged at iteration 28, L1 9.4986e-05, Linf 0.00309342, total time[s] 0.095728 +Converged at iteration 32, L1 9.4698e-05, Linf 0.00376632, total time[s] 0.091317 +Converged at iteration 37, L1 7.45541e-05, Linf 0.00328156, total time[s] 0.162562 +Converged at iteration 33, L1 8.45245e-05, Linf 0.00464534, total time[s] 0.154359 +Converged at iteration 28, L1 9.65691e-05, Linf 0.00430169, total time[s] 0.105523 +Converged at iteration 24, L1 8.82889e-05, Linf 0.00325072, total time[s] 0.067388 +Converged at iteration 26, L1 8.98108e-05, Linf 0.00383971, total time[s] 0.076993 +Converged at iteration 39, L1 9.02234e-05, Linf 0.00577518, total time[s] 0.114019 +Converged at iteration 36, L1 7.35926e-05, Linf 0.00419491, total time[s] 0.099275 +Converged at iteration 26, L1 4.71795e-05, Linf 0.00518393, total time[s] 0.130021 +Converged at iteration 31, L1 6.09307e-05, Linf 0.00506854, total time[s] 0.151828 +Converged at iteration 26, L1 6.89115e-05, Linf 0.00529027, total time[s] 0.385223 +Converged at iteration 21, L1 6.2381e-05, Linf 0.00330438, total time[s] 0.170156 +Converged at iteration 20, L1 5.23322e-05, Linf 0.00427323, total time[s] 0.064311 +Converged at iteration 21, L1 9.21274e-05, Linf 0.00865083, total time[s] 0.075359 +Converged at iteration 26, L1 6.2231e-05, Linf 0.00570811, total time[s] 0.07919 +Converged at iteration 25, L1 6.035e-05, Linf 0.00403108, total time[s] 0.08037 +Converged at iteration 20, L1 7.69262e-05, Linf 0.00545682, total time[s] 0.064676 +Converged at iteration 17, L1 7.27424e-05, Linf 0.00346039, total time[s] 0.094597 +Converged at iteration 31, L1 9.88223e-05, Linf 0.00280312, total time[s] 0.141608 +Converged at iteration 20, L1 6.15739e-05, Linf 0.00533148, total time[s] 0.071654 +Converged at iteration 23, L1 9.58142e-05, Linf 0.00649358, total time[s] 0.069759 +Converged at iteration 27, L1 8.11245e-05, Linf 0.00513246, total time[s] 0.125223 +Converged at iteration 23, L1 8.10111e-05, Linf 0.00694982, total time[s] 0.090344 +Converged at iteration 21, L1 7.70741e-05, Linf 0.00479901, total time[s] 0.073818 +Converged at iteration 23, L1 7.2114e-05, Linf 0.00366407, total time[s] 0.089068 +Converged at iteration 25, L1 9.51647e-05, Linf 0.00627612, total time[s] 0.093917 +Converged at iteration 28, L1 9.29641e-05, Linf 0.00538355, total time[s] 0.08141 +Converged at iteration 29, L1 9.97332e-05, Linf 0.00643962, total time[s] 0.086409 +Converged at iteration 28, L1 6.43564e-05, Linf 0.00327767, total time[s] 0.122053 +Converged at iteration 29, L1 8.48002e-05, Linf 0.00346173, total time[s] 0.111797 +Converged at iteration 30, L1 8.41003e-05, Linf 0.00292011, total time[s] 0.091144 +Converged at iteration 30, L1 8.08859e-05, Linf 0.00267876, total time[s] 0.09087 +Converged at iteration 33, L1 7.08178e-05, Linf 0.00545094, total time[s] 0.108585 +Converged at iteration 27, L1 9.85872e-05, Linf 0.00414087, total time[s] 0.086168 +Converged at iteration 24, L1 8.84379e-05, Linf 0.00181, total time[s] 0.065706 +Converged at iteration 24, L1 8.49377e-05, Linf 0.0043995, total time[s] 0.090035 +Converged at iteration 40, L1 6.6029e-05, Linf 0.00543169, total time[s] 0.112835 +Converged at iteration 36, L1 6.86993e-05, Linf 0.00336942, total time[s] 0.147012 +Converged at iteration 29, L1 7.85825e-05, Linf 0.00500813, total time[s] 0.13505 +Converged at iteration 31, L1 6.22686e-05, Linf 0.00506942, total time[s] 0.113439 +Converged at iteration 26, L1 8.78356e-05, Linf 0.00563675, total time[s] 0.079379 +Converged at iteration 21, L1 8.8878e-05, Linf 0.00443264, total time[s] 0.058932 +Converged at iteration 21, L1 6.3433e-05, Linf 0.00407007, total time[s] 0.073448 +Converged at iteration 24, L1 6.47634e-05, Linf 0.00531483, total time[s] 0.095112 +Converged at iteration 28, L1 6.09032e-05, Linf 0.00440534, total time[s] 0.115211 +Converged at iteration 26, L1 7.00634e-05, Linf 0.00369971, total time[s] 0.083768 +Converged at iteration 21, L1 6.54479e-05, Linf 0.00427976, total time[s] 0.107914 +Converged at iteration 18, L1 6.04239e-05, Linf 0.00272323, total time[s] 0.050209 +Converged at iteration 31, L1 7.96798e-05, Linf 0.00269898, total time[s] 0.11588 +Converged at iteration 20, L1 8.02351e-05, Linf 0.00506592, total time[s] 0.060322 +Converged at iteration 24, L1 6.8163e-05, Linf 0.00515744, total time[s] 0.077546 +Converged at iteration 29, L1 9.58184e-05, Linf 0.00348629, total time[s] 0.099278 +Converged at iteration 24, L1 9.56702e-05, Linf 0.00562298, total time[s] 0.090871 +Converged at iteration 22, L1 9.0206e-05, Linf 0.00432845, total time[s] 0.096142 +Converged at iteration 23, L1 9.35635e-05, Linf 0.00459843, total time[s] 0.063954 +Converged at iteration 26, L1 6.73619e-05, Linf 0.00498702, total time[s] 0.0974 +Converged at iteration 29, L1 6.94516e-05, Linf 0.00472236, total time[s] 0.108079 +Converged at iteration 31, L1 8.03827e-05, Linf 0.00385394, total time[s] 0.087752 +Converged at iteration 30, L1 7.45168e-05, Linf 0.0030809, total time[s] 0.084711 +Converged at iteration 29, L1 8.06601e-05, Linf 0.00299154, total time[s] 0.128351 +Converged at iteration 32, L1 7.07082e-05, Linf 0.00329424, total time[s] 0.14035 +Converged at iteration 34, L1 9.63522e-05, Linf 0.00459743, total time[s] 0.127393 +Converged at iteration 33, L1 7.91302e-05, Linf 0.00507747, total time[s] 0.090093 +Converged at iteration 28, L1 8.11092e-05, Linf 0.00391823, total time[s] 0.099957 +Converged at iteration 24, L1 7.86939e-05, Linf 0.0023873, total time[s] 0.083811 +Converged at iteration 26, L1 7.63937e-05, Linf 0.00409935, total time[s] 0.094587 +Converged at iteration 40, L1 6.58963e-05, Linf 0.00399844, total time[s] 0.118605 +Converged at iteration 35, L1 8.97989e-05, Linf 0.0036635, total time[s] 0.110433 +Converged at iteration 30, L1 9.05297e-05, Linf 0.00417096, total time[s] 0.119781 +Converged at iteration 31, L1 6.16403e-05, Linf 0.00505214, total time[s] 0.167456 +Converged at iteration 26, L1 9.65824e-05, Linf 0.00575715, total time[s] 0.117365 +Converged at iteration 22, L1 6.82772e-05, Linf 0.00414863, total time[s] 0.096083 +Converged at iteration 21, L1 6.53775e-05, Linf 0.00358359, total time[s] 0.106764 +Converged at iteration 24, L1 8.90101e-05, Linf 0.00499909, total time[s] 0.10886 +Converged at iteration 28, L1 7.21545e-05, Linf 0.00442602, total time[s] 0.153902 +Converged at iteration 26, L1 8.04619e-05, Linf 0.00515935, total time[s] 0.073004 +Converged at iteration 22, L1 6.84884e-05, Linf 0.00403869, total time[s] 0.138051 +Converged at iteration 18, L1 9.71689e-05, Linf 0.0039309, total time[s] 0.071123 +Converged at iteration 30, L1 9.94449e-05, Linf 0.00331101, total time[s] 0.119246 +Converged at iteration 20, L1 8.33744e-05, Linf 0.00477644, total time[s] 0.058107 +Converged at iteration 24, L1 7.07469e-05, Linf 0.00480592, total time[s] 0.065468 +Converged at iteration 31, L1 9.5195e-05, Linf 0.00433706, total time[s] 0.088767 +Converged at iteration 27, L1 8.64406e-05, Linf 0.00414561, total time[s] 0.077477 +Converged at iteration 24, L1 8.29026e-05, Linf 0.0040657, total time[s] 0.073329 +Converged at iteration 23, L1 9.21501e-05, Linf 0.00438864, total time[s] 0.074285 +Converged at iteration 26, L1 7.08254e-05, Linf 0.00472167, total time[s] 0.084719 +Converged at iteration 29, L1 7.42841e-05, Linf 0.00490549, total time[s] 0.094854 +Converged at iteration 34, L1 8.12706e-05, Linf 0.00364271, total time[s] 0.102986 +Converged at iteration 31, L1 7.40334e-05, Linf 0.00349883, total time[s] 0.08912 +Converged at iteration 29, L1 7.21493e-05, Linf 0.00277009, total time[s] 0.077668 +Converged at iteration 32, L1 8.01953e-05, Linf 0.00349795, total time[s] 0.114326 +Converged at iteration 36, L1 8.12536e-05, Linf 0.00349809, total time[s] 0.095146 +Converged at iteration 33, L1 8.26924e-05, Linf 0.00488621, total time[s] 0.089276 +Converged at iteration 28, L1 8.9563e-05, Linf 0.00409345, total time[s] 0.076425 +Converged at iteration 24, L1 7.94065e-05, Linf 0.00282256, total time[s] 0.080954 +Converged at iteration 26, L1 8.27184e-05, Linf 0.00394561, total time[s] 0.082763 +Converged at iteration 40, L1 6.692e-05, Linf 0.00383715, total time[s] 0.117977 +Converged at iteration 35, L1 8.27981e-05, Linf 0.00352444, total time[s] 0.130144 +Converged at iteration 30, L1 9.60032e-05, Linf 0.00421835, total time[s] 0.089647 +Converged at iteration 31, L1 6.29413e-05, Linf 0.00723279, total time[s] 0.096142 +Converged at iteration 27, L1 5.99454e-05, Linf 0.00493875, total time[s] 0.092616 +Converged at iteration 22, L1 7.67651e-05, Linf 0.00430361, total time[s] 0.075029 +Converged at iteration 21, L1 6.28528e-05, Linf 0.00335237, total time[s] 0.070704 +Converged at iteration 24, L1 9.0534e-05, Linf 0.00489152, total time[s] 0.0745 +Converged at iteration 28, L1 7.43463e-05, Linf 0.00444309, total time[s] 0.113803 +Converged at iteration 26, L1 8.04546e-05, Linf 0.0055076, total time[s] 0.089922 +Converged at iteration 22, L1 7.2287e-05, Linf 0.00481345, total time[s] 0.089798 +Converged at iteration 19, L1 5.88709e-05, Linf 0.00360067, total time[s] 0.093006 +Converged at iteration 30, L1 8.89436e-05, Linf 0.00330342, total time[s] 0.080413 +Converged at iteration 20, L1 8.58828e-05, Linf 0.00465697, total time[s] 0.058487 +Converged at iteration 24, L1 7.13395e-05, Linf 0.00468125, total time[s] 0.116203 +Converged at iteration 31, L1 9.33151e-05, Linf 0.00529273, total time[s] 0.118434 +Converged at iteration 27, L1 9.8776e-05, Linf 0.00536229, total time[s] 0.08549 +Converged at iteration 24, L1 8.6744e-05, Linf 0.00450241, total time[s] 0.074115 +Converged at iteration 23, L1 9.25706e-05, Linf 0.0042255, total time[s] 0.061158 +Converged at iteration 26, L1 7.18329e-05, Linf 0.0046731, total time[s] 0.078643 +Converged at iteration 29, L1 7.63073e-05, Linf 0.00477989, total time[s] 0.093844 +Converged at iteration 34, L1 7.88151e-05, Linf 0.00433079, total time[s] 0.100032 +Converged at iteration 31, L1 6.93364e-05, Linf 0.00361263, total time[s] 0.091545 +Converged at iteration 28, L1 9.87206e-05, Linf 0.00321549, total time[s] 0.109828 +Converged at iteration 32, L1 8.55569e-05, Linf 0.00361737, total time[s] 0.083056 +Converged at iteration 36, L1 9.51259e-05, Linf 0.00370709, total time[s] 0.107636 +Converged at iteration 33, L1 8.40449e-05, Linf 0.00478892, total time[s] 0.125704 +Converged at iteration 28, L1 9.32419e-05, Linf 0.00419101, total time[s] 0.092745 +Converged at iteration 24, L1 8.20234e-05, Linf 0.00303752, total time[s] 0.063699 +Converged at iteration 26, L1 8.73533e-05, Linf 0.00388234, total time[s] 0.088054 +Converged at iteration 40, L1 6.75182e-05, Linf 0.00375587, total time[s] 0.107096 +Converged at iteration 35, L1 7.92887e-05, Linf 0.00342947, total time[s] 0.129329 +Converged at iteration 30, L1 9.70614e-05, Linf 0.00426601, total time[s] 0.086447 +Converged at iteration 31, L1 6.27866e-05, Linf 0.00503207, total time[s] 0.094321 +Converged at iteration 27, L1 6.13016e-05, Linf 0.00496825, total time[s] 0.086865 +Converged at iteration 22, L1 8.12406e-05, Linf 0.00439407, total time[s] 0.08128 +Converged at iteration 20, L1 9.87422e-05, Linf 0.00411004, total time[s] 0.05516 +Converged at iteration 24, L1 9.04234e-05, Linf 0.00485541, total time[s] 0.085808 +Converged at iteration 28, L1 7.5075e-05, Linf 0.00445185, total time[s] 0.086444 +Converged at iteration 26, L1 8.07954e-05, Linf 0.00565062, total time[s] 0.093249 +Converged at iteration 22, L1 7.45524e-05, Linf 0.00498361, total time[s] 0.134657 +Converged at iteration 19, L1 6.288e-05, Linf 0.00377695, total time[s] 0.062816 +Converged at iteration 30, L1 8.40446e-05, Linf 0.00327262, total time[s] 0.121208 +Converged at iteration 20, L1 8.49465e-05, Linf 0.00460265, total time[s] 0.085773 +Converged at iteration 24, L1 7.18711e-05, Linf 0.00464667, total time[s] 0.146882 +Converged at iteration 31, L1 9.1316e-05, Linf 0.00554836, total time[s] 0.083484 +Converged at iteration 27, L1 9.93868e-05, Linf 0.00561494, total time[s] 0.073818 +Converged at iteration 24, L1 8.75978e-05, Linf 0.00459581, total time[s] 0.070827 +Converged at iteration 23, L1 9.30547e-05, Linf 0.00415978, total time[s] 0.071171 +Converged at iteration 26, L1 7.21082e-05, Linf 0.00444588, total time[s] 0.074301 +Converged at iteration 29, L1 7.74412e-05, Linf 0.00482545, total time[s] 0.08987 +Converged at iteration 34, L1 7.54285e-05, Linf 0.00428679, total time[s] 0.092645 +Converged at iteration 30, L1 9.73481e-05, Linf 0.00440779, total time[s] 0.091689 +Converged at iteration 28, L1 9.64373e-05, Linf 0.00316225, total time[s] 0.097986 +Converged at iteration 32, L1 8.94986e-05, Linf 0.0037025, total time[s] 0.097066 +Converged at iteration 37, L1 7.08287e-05, Linf 0.0031323, total time[s] 0.10913 +Converged at iteration 33, L1 8.42391e-05, Linf 0.0047402, total time[s] 0.100851 +Converged at iteration 28, L1 9.51033e-05, Linf 0.00424268, total time[s] 0.083544 +Converged at iteration 24, L1 8.44255e-05, Linf 0.00317737, total time[s] 0.073738 +Converged at iteration 26, L1 8.84957e-05, Linf 0.00386902, total time[s] 0.069234 +Converged at iteration 40, L1 6.83251e-05, Linf 0.00383457, total time[s] 0.114576 +Converged at iteration 35, L1 8.26318e-05, Linf 0.0035243, total time[s] 0.110125 +Converged at iteration 30, L1 9.61864e-05, Linf 0.00421711, total time[s] 0.08565 +Converged at iteration 31, L1 6.18223e-05, Linf 0.0050151, total time[s] 0.089687 +Converged at iteration 27, L1 6.08002e-05, Linf 0.00502859, total time[s] 0.099644 +Converged at iteration 22, L1 7.67318e-05, Linf 0.00429896, total time[s] 0.063132 +Converged at iteration 21, L1 6.28628e-05, Linf 0.00335434, total time[s] 0.058252 +Converged at iteration 24, L1 9.03227e-05, Linf 0.00489148, total time[s] 0.067524 +Converged at iteration 28, L1 7.4547e-05, Linf 0.00444225, total time[s] 0.077993 +Converged at iteration 26, L1 8.05285e-05, Linf 0.00550644, total time[s] 0.077013 +Converged at iteration 22, L1 7.22038e-05, Linf 0.00481221, total time[s] 0.067302 +Converged at iteration 19, L1 5.89062e-05, Linf 0.00359863, total time[s] 0.11142 +Converged at iteration 30, L1 8.89556e-05, Linf 0.00330295, total time[s] 0.106308 +Converged at iteration 20, L1 8.56237e-05, Linf 0.00465648, total time[s] 0.07627 +Converged at iteration 24, L1 7.16162e-05, Linf 0.00468147, total time[s] 0.112478 +Converged at iteration 31, L1 9.38081e-05, Linf 0.00529294, total time[s] 0.110273 +Converged at iteration 27, L1 9.99989e-05, Linf 0.00533117, total time[s] 0.079717 +Converged at iteration 24, L1 8.69058e-05, Linf 0.0045022, total time[s] 0.072284 +Converged at iteration 23, L1 9.26478e-05, Linf 0.00422582, total time[s] 0.066347 +Converged at iteration 26, L1 7.18685e-05, Linf 0.00457249, total time[s] 0.083105 +Converged at iteration 29, L1 7.6438e-05, Linf 0.00485752, total time[s] 0.093479 +Converged at iteration 34, L1 7.89738e-05, Linf 0.00426379, total time[s] 0.102455 +Converged at iteration 31, L1 6.94174e-05, Linf 0.00361734, total time[s] 0.119195 +Converged at iteration 28, L1 9.86969e-05, Linf 0.00321524, total time[s] 0.087035 +Converged at iteration 32, L1 8.54904e-05, Linf 0.00361583, total time[s] 0.097762 +Converged at iteration 36, L1 9.50123e-05, Linf 0.00368374, total time[s] 0.100399 +Converged at iteration 33, L1 8.38496e-05, Linf 0.00478924, total time[s] 0.089126 +Converged at iteration 28, L1 9.32355e-05, Linf 0.00419104, total time[s] 0.096659 +Converged at iteration 24, L1 8.19975e-05, Linf 0.003037, total time[s] 0.07213 +Converged at iteration 26, L1 8.67712e-05, Linf 0.00389709, total time[s] 0.08548 +Converged at iteration 40, L1 6.68568e-05, Linf 0.00388058, total time[s] 0.14469 +Converged at iteration 35, L1 8.60175e-05, Linf 0.00364519, total time[s] 0.102881 +Converged at iteration 30, L1 9.23799e-05, Linf 0.00419846, total time[s] 0.084132 +Converged at iteration 31, L1 6.25529e-05, Linf 0.00504497, total time[s] 0.115606 +Converged at iteration 26, L1 9.89332e-05, Linf 0.00578042, total time[s] 0.134771 +Converged at iteration 22, L1 7.24312e-05, Linf 0.00420203, total time[s] 0.072046 +Converged at iteration 21, L1 6.39256e-05, Linf 0.00346724, total time[s] 0.057416 +Converged at iteration 24, L1 8.95136e-05, Linf 0.00493989, total time[s] 0.109599 +Converged at iteration 28, L1 7.33674e-05, Linf 0.0044251, total time[s] 0.083526 +Converged at iteration 26, L1 8.03798e-05, Linf 0.00540056, total time[s] 0.081539 +Converged at iteration 22, L1 7.13204e-05, Linf 0.00450425, total time[s] 0.062791 +Converged at iteration 19, L1 5.5755e-05, Linf 0.00336843, total time[s] 0.066681 +Converged at iteration 30, L1 9.41475e-05, Linf 0.00330587, total time[s] 0.078562 +Converged at iteration 20, L1 8.45381e-05, Linf 0.00471561, total time[s] 0.054867 +Converged at iteration 24, L1 7.14469e-05, Linf 0.00473959, total time[s] 0.068368 +Converged at iteration 31, L1 9.39445e-05, Linf 0.00493134, total time[s] 0.116163 +Converged at iteration 27, L1 9.59785e-05, Linf 0.00481282, total time[s] 0.07438 +Converged at iteration 24, L1 8.61009e-05, Linf 0.00432593, total time[s] 0.078463 +Converged at iteration 24, L1 8.46364e-05, Linf 0.00227652, total time[s] 0.104055 +Converged at iteration 26, L1 7.14707e-05, Linf 0.0046392, total time[s] 0.103999 +Converged at iteration 29, L1 7.54312e-05, Linf 0.00488176, total time[s] 0.103726 +Converged at iteration 34, L1 8.14191e-05, Linf 0.00415478, total time[s] 0.108091 +Converged at iteration 31, L1 7.16752e-05, Linf 0.00356566, total time[s] 0.089319 +Converged at iteration 29, L1 6.98954e-05, Linf 0.00271539, total time[s] 0.141841 +Converged at iteration 32, L1 8.36079e-05, Linf 0.00355646, total time[s] 0.100189 +Converged at iteration 36, L1 8.93935e-05, Linf 0.0035855, total time[s] 0.11876 +Converged at iteration 33, L1 8.34918e-05, Linf 0.00483897, total time[s] 0.112144 +Converged at iteration 28, L1 9.17732e-05, Linf 0.00414201, total time[s] 0.082331 +Converged at iteration 24, L1 8.05112e-05, Linf 0.00292868, total time[s] 0.07821 +Converged at iteration 26, L1 8.47705e-05, Linf 0.00393713, total time[s] 0.069836 +Converged at iteration 40, L1 6.73114e-05, Linf 0.00399773, total time[s] 0.100656 +Converged at iteration 35, L1 8.94472e-05, Linf 0.00366624, total time[s] 0.108067 +Converged at iteration 30, L1 9.06436e-05, Linf 0.00417089, total time[s] 0.095993 +Converged at iteration 31, L1 6.17015e-05, Linf 0.00505082, total time[s] 0.092526 +Converged at iteration 26, L1 9.6546e-05, Linf 0.00575648, total time[s] 0.0707 +Converged at iteration 22, L1 6.84414e-05, Linf 0.00410087, total time[s] 0.066441 +Converged at iteration 21, L1 6.56066e-05, Linf 0.00359228, total time[s] 0.069882 +Converged at iteration 24, L1 8.90516e-05, Linf 0.00499859, total time[s] 0.083305 +Converged at iteration 28, L1 7.16728e-05, Linf 0.00440835, total time[s] 0.088347 +Converged at iteration 26, L1 8.08865e-05, Linf 0.00522054, total time[s] 0.074822 +Converged at iteration 22, L1 6.77749e-05, Linf 0.00403062, total time[s] 0.095668 +Converged at iteration 18, L1 9.67422e-05, Linf 0.00391732, total time[s] 0.071606 +Converged at iteration 30, L1 9.95161e-05, Linf 0.00330961, total time[s] 0.099626 +Converged at iteration 20, L1 8.35214e-05, Linf 0.00477826, total time[s] 0.054303 +Converged at iteration 24, L1 7.14371e-05, Linf 0.00481113, total time[s] 0.074909 +Converged at iteration 31, L1 9.57924e-05, Linf 0.00434749, total time[s] 0.114863 +Converged at iteration 27, L1 8.70302e-05, Linf 0.00414582, total time[s] 0.076115 +Converged at iteration 24, L1 8.33955e-05, Linf 0.0040645, total time[s] 0.077647 +Converged at iteration 23, L1 9.26062e-05, Linf 0.00439069, total time[s] 0.064287 +Converged at iteration 26, L1 7.09774e-05, Linf 0.0047229, total time[s] 0.079931 +Converged at iteration 29, L1 7.43759e-05, Linf 0.00490629, total time[s] 0.091846 +Converged at iteration 34, L1 8.22058e-05, Linf 0.00365117, total time[s] 0.100259 +Converged at iteration 31, L1 7.48996e-05, Linf 0.00350342, total time[s] 0.110943 +Converged at iteration 29, L1 7.21637e-05, Linf 0.00276873, total time[s] 0.077731 +Converged at iteration 32, L1 7.97555e-05, Linf 0.00347642, total time[s] 0.108771 +Converged at iteration 36, L1 8.14517e-05, Linf 0.00348861, total time[s] 0.103732 +Converged at iteration 33, L1 8.26244e-05, Linf 0.00488613, total time[s] 0.109582 +Converged at iteration 28, L1 8.93976e-05, Linf 0.00409321, total time[s] 0.091578 +Converged at iteration 24, L1 7.93652e-05, Linf 0.00281931, total time[s] 0.064615 +Converged at iteration 26, L1 8.24386e-05, Linf 0.00394243, total time[s] 0.095915 +Converged at iteration 40, L1 6.61788e-05, Linf 0.00407554, total time[s] 0.125093 +Converged at iteration 35, L1 9.22931e-05, Linf 0.00374196, total time[s] 0.10299 +Converged at iteration 30, L1 8.81633e-05, Linf 0.00417606, total time[s] 0.088904 +Converged at iteration 31, L1 6.17166e-05, Linf 0.00505621, total time[s] 0.091643 +Converged at iteration 26, L1 9.42732e-05, Linf 0.00573039, total time[s] 0.088134 +Converged at iteration 22, L1 6.38512e-05, Linf 0.00400071, total time[s] 0.066926 +Converged at iteration 21, L1 6.75016e-05, Linf 0.0037354, total time[s] 0.056279 +Converged at iteration 24, L1 8.86207e-05, Linf 0.00507746, total time[s] 0.080108 +Converged at iteration 28, L1 6.99048e-05, Linf 0.00440635, total time[s] 0.077686 +Converged at iteration 26, L1 8.23972e-05, Linf 0.0048918, total time[s] 0.084971 +Converged at iteration 22, L1 6.11757e-05, Linf 0.00352658, total time[s] 0.073575 +Converged at iteration 18, L1 8.80167e-05, Linf 0.00351118, total time[s] 0.060449 +Converged at iteration 31, L1 7.03663e-05, Linf 0.00266444, total time[s] 0.082813 +Converged at iteration 20, L1 8.30842e-05, Linf 0.00484565, total time[s] 0.05753 +Converged at iteration 24, L1 7.01063e-05, Linf 0.00488093, total time[s] 0.065063 +Converged at iteration 31, L1 9.15789e-05, Linf 0.00368807, total time[s] 0.110861 +Converged at iteration 26, L1 9.91287e-05, Linf 0.00427237, total time[s] 0.082083 +Converged at iteration 24, L1 7.70357e-05, Linf 0.00374178, total time[s] 0.068172 +Converged at iteration 23, L1 9.29891e-05, Linf 0.00447282, total time[s] 0.071495 +Converged at iteration 26, L1 7.03526e-05, Linf 0.00481516, total time[s] 0.081905 +Converged at iteration 29, L1 7.30997e-05, Linf 0.00492908, total time[s] 0.081174 +Converged at iteration 33, L1 9.96528e-05, Linf 0.00355311, total time[s] 0.095492 +Converged at iteration 31, L1 7.82408e-05, Linf 0.00337965, total time[s] 0.100624 +Converged at iteration 29, L1 7.44448e-05, Linf 0.00281193, total time[s] 0.086267 +Converged at iteration 32, L1 7.73644e-05, Linf 0.00342538, total time[s] 0.09537 +Converged at iteration 36, L1 7.56862e-05, Linf 0.00340169, total time[s] 0.10406 +Converged at iteration 33, L1 8.17892e-05, Linf 0.00493448, total time[s] 0.104279 +Converged at iteration 28, L1 8.71887e-05, Linf 0.00404996, total time[s] 0.075922 +Converged at iteration 24, L1 7.87399e-05, Linf 0.00273692, total time[s] 0.066921 +Converged at iteration 26, L1 8.23083e-05, Linf 0.00398468, total time[s] 0.078198 +Converged at iteration 40, L1 6.49389e-05, Linf 0.00415693, total time[s] 0.118956 +Converged at iteration 35, L1 9.51864e-05, Linf 0.00382342, total time[s] 0.094368 +Converged at iteration 35, L1 8.19217e-05, Linf 0.00208719, total time[s] 0.103903 +Converged at iteration 31, L1 6.13058e-05, Linf 0.00508891, total time[s] 0.102772 +Converged at iteration 26, L1 9.18437e-05, Linf 0.00570342, total time[s] 0.076512 +Converged at iteration 21, L1 9.7989e-05, Linf 0.00465745, total time[s] 0.070237 +Converged at iteration 21, L1 6.8997e-05, Linf 0.00388223, total time[s] 0.06316 +Converged at iteration 24, L1 8.41798e-05, Linf 0.00516445, total time[s] 0.083354 +Converged at iteration 28, L1 6.83003e-05, Linf 0.00440455, total time[s] 0.101642 +Converged at iteration 26, L1 8.26222e-05, Linf 0.00451452, total time[s] 0.078079 +Converged at iteration 21, L1 9.2817e-05, Linf 0.00434763, total time[s] 0.07734 +Converged at iteration 18, L1 7.8265e-05, Linf 0.00313444, total time[s] 0.058977 +Converged at iteration 31, L1 7.37087e-05, Linf 0.00267481, total time[s] 0.110389 +Converged at iteration 20, L1 8.25022e-05, Linf 0.00491822, total time[s] 0.069453 +Converged at iteration 24, L1 6.93716e-05, Linf 0.00496483, total time[s] 0.071554 +Converged at iteration 31, L1 7.39489e-05, Linf 0.00319526, total time[s] 0.132677 +Converged at iteration 26, L1 7.1089e-05, Linf 0.00384311, total time[s] 0.139967 +Converged at iteration 23, L1 9.50765e-05, Linf 0.00405756, total time[s] 0.080048 +Converged at iteration 23, L1 9.52442e-05, Linf 0.0052048, total time[s] 0.093188 +Converged at iteration 26, L1 6.94712e-05, Linf 0.00489816, total time[s] 0.091031 +Converged at iteration 29, L1 7.2016e-05, Linf 0.00492479, total time[s] 0.089609 +Converged at iteration 33, L1 7.00493e-05, Linf 0.00310873, total time[s] 0.223147 +Converged at iteration 31, L1 7.71272e-05, Linf 0.00311954, total time[s] 0.182651 +Converged at iteration 29, L1 7.6621e-05, Linf 0.00288502, total time[s] 0.125485 +Converged at iteration 32, L1 7.56802e-05, Linf 0.00337545, total time[s] 0.153077 +Converged at iteration 36, L1 7.11565e-05, Linf 0.00333986, total time[s] 0.176813 +Converged at iteration 33, L1 8.08576e-05, Linf 0.00498245, total time[s] 0.114117 +Converged at iteration 28, L1 8.50425e-05, Linf 0.00400425, total time[s] 0.100672 +Converged at iteration 24, L1 7.84052e-05, Linf 0.00259614, total time[s] 0.077967 +Converged at iteration 26, L1 8.29362e-05, Linf 0.00403009, total time[s] 0.069034 +Converged at iteration 40, L1 6.46535e-05, Linf 0.00411762, total time[s] 0.166008 +Converged at iteration 35, L1 9.45811e-05, Linf 0.00374777, total time[s] 0.12118 +Converged at iteration 30, L1 8.62979e-05, Linf 0.0041833, total time[s] 0.097646 +Converged at iteration 31, L1 6.13976e-05, Linf 0.0050584, total time[s] 0.089087 +Converged at iteration 26, L1 9.2955e-05, Linf 0.00571634, total time[s] 0.089454 +Converged at iteration 22, L1 6.16131e-05, Linf 0.00394786, total time[s] 0.064213 +Converged at iteration 21, L1 6.87623e-05, Linf 0.00381365, total time[s] 0.088695 +Converged at iteration 24, L1 8.74131e-05, Linf 0.0051206, total time[s] 0.067307 +Converged at iteration 28, L1 6.91414e-05, Linf 0.00440753, total time[s] 0.086847 +Converged at iteration 26, L1 8.26467e-05, Linf 0.0047041, total time[s] 0.073299 +Converged at iteration 22, L1 5.60522e-05, Linf 0.00328545, total time[s] 0.063183 +Converged at iteration 18, L1 8.32009e-05, Linf 0.00331745, total time[s] 0.061641 +Converged at iteration 31, L1 7.20345e-05, Linf 0.00266945, total time[s] 0.105006 +Converged at iteration 20, L1 8.26722e-05, Linf 0.00488153, total time[s] 0.061482 +Converged at iteration 24, L1 6.97552e-05, Linf 0.00488139, total time[s] 0.081165 +Converged at iteration 31, L1 8.45178e-05, Linf 0.00339978, total time[s] 0.08444 +Converged at iteration 26, L1 8.39666e-05, Linf 0.00404003, total time[s] 0.076839 +Converged at iteration 24, L1 7.09845e-05, Linf 0.00357597, total time[s] 0.064941 +Converged at iteration 23, L1 9.36321e-05, Linf 0.00451053, total time[s] 0.059604 +Converged at iteration 26, L1 6.99756e-05, Linf 0.0048585, total time[s] 0.069696 +Converged at iteration 29, L1 7.26355e-05, Linf 0.00493365, total time[s] 0.085699 +Converged at iteration 33, L1 8.51992e-05, Linf 0.00331574, total time[s] 0.104622 +Converged at iteration 31, L1 7.80032e-05, Linf 0.00328622, total time[s] 0.09574 +Converged at iteration 29, L1 7.5549e-05, Linf 0.0028558, total time[s] 0.096618 +Converged at iteration 32, L1 7.64622e-05, Linf 0.00339845, total time[s] 0.090692 +Converged at iteration 36, L1 7.40412e-05, Linf 0.0033702, total time[s] 0.091482 +Converged at iteration 33, L1 8.132e-05, Linf 0.00495861, total time[s] 0.084859 +Converged at iteration 28, L1 8.61309e-05, Linf 0.00398591, total time[s] 0.093476 +Converged at iteration 24, L1 7.85274e-05, Linf 0.00268021, total time[s] 0.064583 +Converged at iteration 26, L1 8.24457e-05, Linf 0.00400681, total time[s] 0.069359 +Converged at iteration 40, L1 6.50881e-05, Linf 0.00415896, total time[s] 0.108878 +Converged at iteration 35, L1 9.51959e-05, Linf 0.00382354, total time[s] 0.112798 +Converged at iteration 30, L1 7.97751e-05, Linf 0.00418545, total time[s] 0.099611 +Converged at iteration 31, L1 6.22516e-05, Linf 0.00506016, total time[s] 0.079612 +Converged at iteration 26, L1 9.18073e-05, Linf 0.00570318, total time[s] 0.092745 +Converged at iteration 21, L1 9.80556e-05, Linf 0.00465746, total time[s] 0.076662 +Converged at iteration 21, L1 6.89819e-05, Linf 0.00389119, total time[s] 0.057204 +Converged at iteration 24, L1 8.415e-05, Linf 0.00516456, total time[s] 0.079206 +Converged at iteration 28, L1 6.82982e-05, Linf 0.0044044, total time[s] 0.082358 +Converged at iteration 26, L1 8.29328e-05, Linf 0.0044904, total time[s] 0.106885 +Converged at iteration 21, L1 9.46361e-05, Linf 0.00750012, total time[s] 0.070458 +Converged at iteration 18, L1 7.82777e-05, Linf 0.00313441, total time[s] 0.050285 +Converged at iteration 31, L1 7.365e-05, Linf 0.00267476, total time[s] 0.086436 +Converged at iteration 20, L1 8.23918e-05, Linf 0.00491833, total time[s] 0.062248 +Converged at iteration 24, L1 6.93575e-05, Linf 0.00468689, total time[s] 0.068389 +Converged at iteration 31, L1 7.4094e-05, Linf 0.0031949, total time[s] 0.100982 +Converged at iteration 26, L1 7.09709e-05, Linf 0.00383689, total time[s] 0.095562 +Converged at iteration 23, L1 9.51957e-05, Linf 0.0040638, total time[s] 0.064975 +Converged at iteration 23, L1 9.46936e-05, Linf 0.00454481, total time[s] 0.075773 +Converged at iteration 26, L1 6.97479e-05, Linf 0.00489961, total time[s] 0.070443 +Converged at iteration 29, L1 7.21889e-05, Linf 0.00492378, total time[s] 0.075582 +Converged at iteration 33, L1 6.9914e-05, Linf 0.00312146, total time[s] 0.117918 +Converged at iteration 31, L1 7.64405e-05, Linf 0.00318234, total time[s] 0.11128 +Converged at iteration 29, L1 7.66008e-05, Linf 0.00288492, total time[s] 0.111274 +Converged at iteration 32, L1 7.58307e-05, Linf 0.00337513, total time[s] 0.093695 +Converged at iteration 36, L1 7.11253e-05, Linf 0.00333971, total time[s] 0.098343 +Converged at iteration 33, L1 8.08351e-05, Linf 0.00498249, total time[s] 0.085891 +Converged at iteration 28, L1 8.50361e-05, Linf 0.00400425, total time[s] 0.080831 +Converged at iteration 24, L1 7.84166e-05, Linf 0.00259805, total time[s] 0.075393 +Converged at iteration 26, L1 8.27409e-05, Linf 0.00402909, total time[s] 0.091857 +Converged at iteration 39, L1 9.98261e-05, Linf 0.00490256, total time[s] 0.123092 +Converged at iteration 35, L1 9.65036e-05, Linf 0.00386579, total time[s] 0.100284 +Converged at iteration 30, L1 7.14773e-05, Linf 0.00416604, total time[s] 0.095457 +Converged at iteration 31, L1 6.12379e-05, Linf 0.00506149, total time[s] 0.08978 +Converged at iteration 26, L1 9.0613e-05, Linf 0.00568589, total time[s] 0.082421 +Converged at iteration 21, L1 9.56587e-05, Linf 0.00460343, total time[s] 0.057467 +Converged at iteration 21, L1 6.81012e-05, Linf 0.00394678, total time[s] 0.059839 +Converged at iteration 24, L1 7.94881e-05, Linf 0.00513054, total time[s] 0.062199 +Converged at iteration 28, L1 6.75176e-05, Linf 0.0043937, total time[s] 0.098306 +Converged at iteration 26, L1 8.2057e-05, Linf 0.00428358, total time[s] 0.078939 +Converged at iteration 21, L1 8.52762e-05, Linf 0.00433439, total time[s] 0.059102 +Converged at iteration 18, L1 7.33881e-05, Linf 0.00296128, total time[s] 0.053059 +Converged at iteration 31, L1 7.53474e-05, Linf 0.00268045, total time[s] 0.084553 +Converged at iteration 20, L1 8.21693e-05, Linf 0.00495594, total time[s] 0.070573 +Converged at iteration 24, L1 6.89849e-05, Linf 0.005009, total time[s] 0.085559 +Converged at iteration 30, L1 9.41318e-05, Linf 0.00347743, total time[s] 0.092235 +Converged at iteration 25, L1 9.27391e-05, Linf 0.0046261, total time[s] 0.083301 +Converged at iteration 23, L1 8.53883e-05, Linf 0.00392282, total time[s] 0.090391 +Converged at iteration 23, L1 9.50795e-05, Linf 0.00457381, total time[s] 0.07474 +Converged at iteration 26, L1 6.92307e-05, Linf 0.00502049, total time[s] 0.079826 +Converged at iteration 29, L1 7.14427e-05, Linf 0.00490579, total time[s] 0.083317 +Converged at iteration 32, L1 8.68053e-05, Linf 0.003502, total time[s] 0.094441 +Converged at iteration 31, L1 7.27035e-05, Linf 0.00303803, total time[s] 0.108783 +Converged at iteration 29, L1 7.80019e-05, Linf 0.00291857, total time[s] 0.073705 +Converged at iteration 32, L1 7.58144e-05, Linf 0.00335442, total time[s] 0.087985 +Converged at iteration 35, L1 9.27219e-05, Linf 0.00402065, total time[s] 0.125239 +Converged at iteration 33, L1 8.03842e-05, Linf 0.0048867, total time[s] 0.086585 +Converged at iteration 28, L1 8.46463e-05, Linf 0.00398469, total time[s] 0.084986 +Converged at iteration 24, L1 7.85284e-05, Linf 0.0025395, total time[s] 0.074373 +Converged at iteration 26, L1 8.31549e-05, Linf 0.00406241, total time[s] 0.091344 +Converged at iteration 39, L1 9.93325e-05, Linf 0.00495925, total time[s] 0.108017 +Converged at iteration 35, L1 9.81874e-05, Linf 0.00391745, total time[s] 0.110158 +Converged at iteration 29, L1 9.70133e-05, Linf 0.00504534, total time[s] 0.086304 +Converged at iteration 31, L1 6.12581e-05, Linf 0.0050915, total time[s] 0.091123 +Converged at iteration 26, L1 8.94842e-05, Linf 0.00583618, total time[s] 0.080011 +Converged at iteration 21, L1 9.41284e-05, Linf 0.00455553, total time[s] 0.06643 +Converged at iteration 21, L1 6.62395e-05, Linf 0.00400002, total time[s] 0.061859 +Converged at iteration 24, L1 7.39161e-05, Linf 0.00524424, total time[s] 0.075829 +Converged at iteration 28, L1 6.55896e-05, Linf 0.00440025, total time[s] 0.094333 +Converged at iteration 26, L1 7.90281e-05, Linf 0.00408191, total time[s] 0.077795 +Converged at iteration 21, L1 7.83393e-05, Linf 0.00434519, total time[s] 0.059478 +Converged at iteration 18, L1 6.88464e-05, Linf 0.00284987, total time[s] 0.055929 +Converged at iteration 31, L1 7.71334e-05, Linf 0.00268404, total time[s] 0.093135 +Converged at iteration 20, L1 8.19443e-05, Linf 0.00499326, total time[s] 0.05373 +Converged at iteration 24, L1 6.89186e-05, Linf 0.00505648, total time[s] 0.068465 +Converged at iteration 30, L1 8.46155e-05, Linf 0.00329742, total time[s] 0.097679 +Converged at iteration 25, L1 8.1264e-05, Linf 0.00449031, total time[s] 0.086177 +Converged at iteration 23, L1 7.69926e-05, Linf 0.00380211, total time[s] 0.072123 +Converged at iteration 23, L1 9.57416e-05, Linf 0.00459558, total time[s] 0.0605 +Converged at iteration 26, L1 6.87562e-05, Linf 0.00496279, total time[s] 0.07889 +Converged at iteration 29, L1 7.19862e-05, Linf 0.00488383, total time[s] 0.088383 +Converged at iteration 32, L1 7.42484e-05, Linf 0.00336282, total time[s] 0.097949 +Converged at iteration 30, L1 9.4522e-05, Linf 0.00340476, total time[s] 0.101265 +Converged at iteration 29, L1 7.85233e-05, Linf 0.00294254, total time[s] 0.085565 +Converged at iteration 32, L1 7.42633e-05, Linf 0.00333423, total time[s] 0.106274 +Converged at iteration 35, L1 8.21718e-05, Linf 0.00391444, total time[s] 0.128002 +Converged at iteration 33, L1 7.98614e-05, Linf 0.00503117, total time[s] 0.09659 +Converged at iteration 28, L1 8.29965e-05, Linf 0.00396159, total time[s] 0.090542 +Converged at iteration 24, L1 7.86889e-05, Linf 0.00248295, total time[s] 0.077725 +Converged at iteration 26, L1 8.08955e-05, Linf 0.00406479, total time[s] 0.107501 +Converged at iteration 39, L1 9.89749e-05, Linf 0.00499839, total time[s] 0.123056 +Converged at iteration 35, L1 9.90552e-05, Linf 0.00395392, total time[s] 0.105816 +Converged at iteration 29, L1 8.50747e-05, Linf 0.00499814, total time[s] 0.090438 +Converged at iteration 31, L1 6.21708e-05, Linf 0.00509255, total time[s] 0.088171 +Converged at iteration 26, L1 8.94089e-05, Linf 0.00565475, total time[s] 0.079576 +Converged at iteration 21, L1 9.1472e-05, Linf 0.00454805, total time[s] 0.062005 +Converged at iteration 21, L1 6.4192e-05, Linf 0.00403617, total time[s] 0.072117 +Converged at iteration 24, L1 6.7864e-05, Linf 0.00527465, total time[s] 0.065617 +Converged at iteration 28, L1 6.26293e-05, Linf 0.00439765, total time[s] 0.086787 +Converged at iteration 26, L1 7.53656e-05, Linf 0.00390338, total time[s] 0.069427 +Converged at iteration 21, L1 7.35659e-05, Linf 0.00737185, total time[s] 0.065961 +Converged at iteration 18, L1 6.48573e-05, Linf 0.00281422, total time[s] 0.050945 +Converged at iteration 31, L1 7.81797e-05, Linf 0.00269279, total time[s] 0.079339 +Converged at iteration 20, L1 8.10763e-05, Linf 0.00503132, total time[s] 0.054003 +Converged at iteration 24, L1 6.83253e-05, Linf 0.00509939, total time[s] 0.075751 +Converged at iteration 30, L1 7.69405e-05, Linf 0.00311588, total time[s] 0.076793 +Converged at iteration 25, L1 7.24974e-05, Linf 0.00436685, total time[s] 0.088585 +Converged at iteration 23, L1 6.92746e-05, Linf 0.00369045, total time[s] 0.060999 +Converged at iteration 23, L1 9.6145e-05, Linf 0.00461165, total time[s] 0.090033 +Converged at iteration 26, L1 6.84567e-05, Linf 0.00498709, total time[s] 0.075754 +Converged at iteration 29, L1 7.071e-05, Linf 0.00480289, total time[s] 0.08737 +Converged at iteration 32, L1 6.73114e-05, Linf 0.00322494, total time[s] 0.083482 +Converged at iteration 30, L1 8.81578e-05, Linf 0.00324648, total time[s] 0.090952 +Converged at iteration 29, L1 7.94834e-05, Linf 0.00295661, total time[s] 0.078121 +Converged at iteration 32, L1 7.17478e-05, Linf 0.00330529, total time[s] 0.096824 +Converged at iteration 35, L1 7.00159e-05, Linf 0.00376151, total time[s] 0.092369 +Converged at iteration 33, L1 7.9305e-05, Linf 0.00505535, total time[s] 0.123686 +Converged at iteration 28, L1 8.16786e-05, Linf 0.00393968, total time[s] 0.077472 +Converged at iteration 24, L1 7.92784e-05, Linf 0.00242638, total time[s] 0.082379 +Converged at iteration 26, L1 7.78025e-05, Linf 0.00407115, total time[s] 0.076347 +Converged at iteration 39, L1 9.84993e-05, Linf 0.00504679, total time[s] 0.116434 +Converged at iteration 36, L1 6.76779e-05, Linf 0.00337199, total time[s] 0.124442 +Converged at iteration 29, L1 7.32176e-05, Linf 0.00492238, total time[s] 0.088115 +Converged at iteration 31, L1 6.11216e-05, Linf 0.00503974, total time[s] 0.089764 +Converged at iteration 26, L1 8.8024e-05, Linf 0.00564262, total time[s] 0.139643 +Converged at iteration 21, L1 8.9121e-05, Linf 0.00443545, total time[s] 0.139185 +Converged at iteration 21, L1 6.15739e-05, Linf 0.00405981, total time[s] 0.063552 +Converged at iteration 24, L1 6.11962e-05, Linf 0.00527378, total time[s] 0.114735 +Converged at iteration 27, L1 9.85612e-05, Linf 0.00549639, total time[s] 0.167334 +Converged at iteration 26, L1 6.90883e-05, Linf 0.00372584, total time[s] 0.075314 +Converged at iteration 21, L1 6.74193e-05, Linf 0.00428965, total time[s] 0.081465 +Converged at iteration 18, L1 6.07878e-05, Linf 0.00278932, total time[s] 0.052415 +Converged at iteration 31, L1 7.99081e-05, Linf 0.00269938, total time[s] 0.081236 +Converged at iteration 20, L1 8.04309e-05, Linf 0.00506957, total time[s] 0.057526 +Converged at iteration 24, L1 6.79493e-05, Linf 0.00534434, total time[s] 0.071222 +Converged at iteration 29, L1 9.9944e-05, Linf 0.00355822, total time[s] 0.100747 +Converged at iteration 25, L1 6.45917e-05, Linf 0.00426263, total time[s] 0.092995 +Converged at iteration 22, L1 9.90241e-05, Linf 0.00435059, total time[s] 0.058608 +Converged at iteration 23, L1 9.59783e-05, Linf 0.00461839, total time[s] 0.077633 +Converged at iteration 26, L1 6.80154e-05, Linf 0.00500582, total time[s] 0.072299 +Converged at iteration 29, L1 6.97703e-05, Linf 0.00473174, total time[s] 0.078172 +Converged at iteration 31, L1 8.66643e-05, Linf 0.00386741, total time[s] 0.084315 +Converged at iteration 30, L1 7.87537e-05, Linf 0.0031127, total time[s] 0.113582 +Converged at iteration 29, L1 8.05503e-05, Linf 0.00299854, total time[s] 0.093205 +Converged at iteration 31, L1 9.92845e-05, Linf 0.00394683, total time[s] 0.103647 +Converged at iteration 34, L1 9.01352e-05, Linf 0.00446544, total time[s] 0.113141 +Converged at iteration 33, L1 7.87717e-05, Linf 0.0050795, total time[s] 0.09533 +Converged at iteration 28, L1 8.05361e-05, Linf 0.00391791, total time[s] 0.076342 +Converged at iteration 24, L1 8.00989e-05, Linf 0.00236977, total time[s] 0.080684 +Converged at iteration 26, L1 7.33013e-05, Linf 0.00404205, total time[s] 0.078946 +Converged at iteration 39, L1 9.79321e-05, Linf 0.0051537, total time[s] 0.104248 +Converged at iteration 36, L1 6.83282e-05, Linf 0.00341924, total time[s] 0.100573 +Converged at iteration 29, L1 6.17796e-05, Linf 0.00481831, total time[s] 0.082931 +Converged at iteration 31, L1 6.09158e-05, Linf 0.00506496, total time[s] 0.081064 +Converged at iteration 26, L1 8.58684e-05, Linf 0.00561725, total time[s] 0.080254 +Converged at iteration 21, L1 8.72658e-05, Linf 0.00437818, total time[s] 0.063581 +Converged at iteration 21, L1 5.86991e-05, Linf 0.00405808, total time[s] 0.079879 +Converged at iteration 23, L1 9.45224e-05, Linf 0.00643392, total time[s] 0.063386 +Converged at iteration 27, L1 9.36804e-05, Linf 0.00549438, total time[s] 0.078721 +Converged at iteration 26, L1 6.44873e-05, Linf 0.00358721, total time[s] 0.083885 +Converged at iteration 21, L1 6.3063e-05, Linf 0.0042725, total time[s] 0.07175 +Converged at iteration 18, L1 5.70865e-05, Linf 0.00276438, total time[s] 0.080144 +Converged at iteration 31, L1 8.09603e-05, Linf 0.00270615, total time[s] 0.090723 +Converged at iteration 20, L1 7.91042e-05, Linf 0.0051086, total time[s] 0.081086 +Converged at iteration 24, L1 6.75601e-05, Linf 0.00520823, total time[s] 0.078237 +Converged at iteration 29, L1 9.28546e-05, Linf 0.0034241, total time[s] 0.083404 +Converged at iteration 24, L1 9.40222e-05, Linf 0.00546757, total time[s] 0.084146 +Converged at iteration 22, L1 9.16192e-05, Linf 0.00426708, total time[s] 0.0629 +Converged at iteration 23, L1 9.6605e-05, Linf 0.00461457, total time[s] 0.065637 +Converged at iteration 26, L1 6.80334e-05, Linf 0.00499813, total time[s] 0.076426 +Converged at iteration 29, L1 6.9278e-05, Linf 0.0046568, total time[s] 0.124932 +Converged at iteration 31, L1 7.7699e-05, Linf 0.00378203, total time[s] 0.099457 +Converged at iteration 30, L1 7.16408e-05, Linf 0.00299396, total time[s] 0.095393 +Converged at iteration 29, L1 8.16095e-05, Linf 0.0030266, total time[s] 0.089846 +Converged at iteration 31, L1 9.53957e-05, Linf 0.00386252, total time[s] 0.102642 +Converged at iteration 34, L1 7.65141e-05, Linf 0.00421843, total time[s] 0.103558 +Converged at iteration 33, L1 7.82327e-05, Linf 0.00510389, total time[s] 0.094419 +Converged at iteration 28, L1 7.93969e-05, Linf 0.00389611, total time[s] 0.084448 +Converged at iteration 24, L1 8.12748e-05, Linf 0.0023132, total time[s] 0.068572 +Converged at iteration 26, L1 6.87745e-05, Linf 0.00398763, total time[s] 0.076599 +Converged at iteration 39, L1 9.74319e-05, Linf 0.00508788, total time[s] 0.117817 +Converged at iteration 36, L1 6.89364e-05, Linf 0.00346746, total time[s] 0.123727 +Converged at iteration 28, L1 9.00771e-05, Linf 0.00582253, total time[s] 0.090203 +Converged at iteration 31, L1 6.13322e-05, Linf 0.00507087, total time[s] 0.096186 +Converged at iteration 26, L1 8.48926e-05, Linf 0.00566196, total time[s] 0.090767 +Converged at iteration 21, L1 8.55448e-05, Linf 0.00431832, total time[s] 0.066407 +Converged at iteration 20, L1 9.71755e-05, Linf 0.00535105, total time[s] 0.061955 +Converged at iteration 23, L1 8.53398e-05, Linf 0.00644671, total time[s] 0.093488 +Converged at iteration 27, L1 8.86284e-05, Linf 0.00548561, total time[s] 0.08443 +Converged at iteration 26, L1 6.07168e-05, Linf 0.00344014, total time[s] 0.085012 +Converged at iteration 21, L1 5.96098e-05, Linf 0.00425466, total time[s] 0.080371 +Converged at iteration 18, L1 5.42439e-05, Linf 0.00273937, total time[s] 0.068121 +Converged at iteration 31, L1 8.2554e-05, Linf 0.0027207, total time[s] 0.114995 +Converged at iteration 20, L1 7.76793e-05, Linf 0.00514799, total time[s] 0.056705 +Converged at iteration 24, L1 6.72771e-05, Linf 0.0052623, total time[s] 0.067235 +Converged at iteration 29, L1 8.58637e-05, Linf 0.00329232, total time[s] 0.081631 +Converged at iteration 24, L1 8.71674e-05, Linf 0.00542551, total time[s] 0.078005 +Converged at iteration 22, L1 8.51692e-05, Linf 0.00418744, total time[s] 0.066071 +Converged at iteration 23, L1 9.49145e-05, Linf 0.00460236, total time[s] 0.067688 +Converged at iteration 26, L1 6.72975e-05, Linf 0.00498697, total time[s] 0.068916 +Converged at iteration 29, L1 6.98566e-05, Linf 0.00604597, total time[s] 0.088646 +Converged at iteration 31, L1 7.35007e-05, Linf 0.00370519, total time[s] 0.110786 +Converged at iteration 29, L1 9.67438e-05, Linf 0.00341346, total time[s] 0.099618 +Converged at iteration 29, L1 8.26916e-05, Linf 0.00305526, total time[s] 0.087928 +Converged at iteration 31, L1 9.31365e-05, Linf 0.00375751, total time[s] 0.090852 +Converged at iteration 34, L1 6.50863e-05, Linf 0.00390285, total time[s] 0.101309 +Converged at iteration 33, L1 7.77581e-05, Linf 0.00512838, total time[s] 0.109659 +Converged at iteration 28, L1 7.88026e-05, Linf 0.00387278, total time[s] 0.076064 +Converged at iteration 24, L1 8.26668e-05, Linf 0.00225666, total time[s] 0.079801 +Converged at iteration 26, L1 6.4494e-05, Linf 0.00390895, total time[s] 0.087842 +Converged at iteration 39, L1 9.75177e-05, Linf 0.00518944, total time[s] 0.157291 +Converged at iteration 36, L1 6.96762e-05, Linf 0.00351737, total time[s] 0.101052 +Converged at iteration 28, L1 7.75447e-05, Linf 0.00569681, total time[s] 0.09685 +Converged at iteration 31, L1 6.19702e-05, Linf 0.00506708, total time[s] 0.125708 +Converged at iteration 26, L1 8.34843e-05, Linf 0.00557913, total time[s] 0.079319 +Converged at iteration 21, L1 8.37261e-05, Linf 0.00425688, total time[s] 0.055727 +Converged at iteration 20, L1 9.31929e-05, Linf 0.00534821, total time[s] 0.071986 +Converged at iteration 23, L1 7.62247e-05, Linf 0.00640967, total time[s] 0.081255 +Converged at iteration 27, L1 8.3548e-05, Linf 0.00547181, total time[s] 0.101675 +Converged at iteration 26, L1 5.77556e-05, Linf 0.00329779, total time[s] 0.128826 +Converged at iteration 21, L1 5.68956e-05, Linf 0.0042625, total time[s] 0.075769 +Converged at iteration 18, L1 5.14964e-05, Linf 0.00271434, total time[s] 0.061195 +Converged at iteration 31, L1 8.35981e-05, Linf 0.00271977, total time[s] 0.126581 +Converged at iteration 20, L1 7.66253e-05, Linf 0.00518853, total time[s] 0.06303 +Converged at iteration 24, L1 6.75706e-05, Linf 0.00531268, total time[s] 0.079128 +Converged at iteration 29, L1 7.97233e-05, Linf 0.0031726, total time[s] 0.080452 +Converged at iteration 24, L1 8.16523e-05, Linf 0.0053911, total time[s] 0.076777 +Converged at iteration 22, L1 7.97394e-05, Linf 0.00411289, total time[s] 0.076192 +Converged at iteration 23, L1 9.33523e-05, Linf 0.00457841, total time[s] 0.067624 +Converged at iteration 26, L1 6.69704e-05, Linf 0.00495521, total time[s] 0.081798 +Converged at iteration 29, L1 6.8291e-05, Linf 0.00444801, total time[s] 0.088758 +Converged at iteration 31, L1 6.53912e-05, Linf 0.00363478, total time[s] 0.084158 +Converged at iteration 29, L1 8.95763e-05, Linf 0.00335141, total time[s] 0.08501 +Converged at iteration 29, L1 8.39688e-05, Linf 0.00308357, total time[s] 0.081835 +Converged at iteration 31, L1 8.89622e-05, Linf 0.00363976, total time[s] 0.1186 +Converged at iteration 33, L1 8.60706e-05, Linf 0.00464628, total time[s] 0.093858 +Converged at iteration 33, L1 7.74255e-05, Linf 0.00515186, total time[s] 0.092467 +Converged at iteration 28, L1 7.77931e-05, Linf 0.00385022, total time[s] 0.077282 +Converged at iteration 24, L1 8.4022e-05, Linf 0.00220012, total time[s] 0.083356 +Converged at iteration 25, L1 9.46745e-05, Linf 0.00483635, total time[s] 0.090074 +Converged at iteration 39, L1 9.69496e-05, Linf 0.00523584, total time[s] 0.167815 +Converged at iteration 36, L1 7.00456e-05, Linf 0.00356731, total time[s] 0.124699 +Converged at iteration 28, L1 6.61073e-05, Linf 0.00553256, total time[s] 0.085561 +Converged at iteration 31, L1 6.08942e-05, Linf 0.00506841, total time[s] 0.100354 +Converged at iteration 26, L1 8.23489e-05, Linf 0.00555919, total time[s] 0.07713 +Converged at iteration 21, L1 8.20697e-05, Linf 0.00419376, total time[s] 0.07326 +Converged at iteration 20, L1 8.92502e-05, Linf 0.00537705, total time[s] 0.115619 +Converged at iteration 23, L1 6.81123e-05, Linf 0.00642405, total time[s] 0.074216 +Converged at iteration 27, L1 7.85478e-05, Linf 0.00544932, total time[s] 0.16708 +Converged at iteration 25, L1 9.5568e-05, Linf 0.00419456, total time[s] 0.08847 +Converged at iteration 21, L1 5.42022e-05, Linf 0.00422124, total time[s] 0.073995 +Converged at iteration 17, L1 9.93845e-05, Linf 0.0042369, total time[s] 0.058206 +Converged at iteration 31, L1 8.47674e-05, Linf 0.00272807, total time[s] 0.088747 +Converged at iteration 20, L1 7.43627e-05, Linf 0.00522828, total time[s] 0.076254 +Converged at iteration 24, L1 6.65485e-05, Linf 0.00529001, total time[s] 0.07591 +Converged at iteration 29, L1 7.46211e-05, Linf 0.0030527, total time[s] 0.086459 +Converged at iteration 24, L1 7.67551e-05, Linf 0.00536443, total time[s] 0.079819 +Converged at iteration 22, L1 7.51506e-05, Linf 0.00404215, total time[s] 0.085045 +Converged at iteration 23, L1 9.10689e-05, Linf 0.00454445, total time[s] 0.068977 +Converged at iteration 26, L1 6.67693e-05, Linf 0.00490853, total time[s] 0.075725 +Converged at iteration 29, L1 6.7837e-05, Linf 0.00433455, total time[s] 0.154639 +Converged at iteration 30, L1 9.71264e-05, Linf 0.00468991, total time[s] 0.084782 +Converged at iteration 29, L1 8.37515e-05, Linf 0.00323255, total time[s] 0.151474 +Converged at iteration 29, L1 8.46629e-05, Linf 0.00311102, total time[s] 0.094732 +Converged at iteration 31, L1 8.51783e-05, Linf 0.00349928, total time[s] 0.109713 +Converged at iteration 33, L1 7.32421e-05, Linf 0.00427115, total time[s] 0.141879 +Converged at iteration 33, L1 7.65754e-05, Linf 0.00517686, total time[s] 0.125434 +Converged at iteration 28, L1 7.60249e-05, Linf 0.00382802, total time[s] 0.161576 +Converged at iteration 24, L1 8.56827e-05, Linf 0.00214352, total time[s] 0.127496 +Converged at iteration 25, L1 8.91014e-05, Linf 0.004753, total time[s] 0.132015 +Converged at iteration 39, L1 9.56002e-05, Linf 0.00528293, total time[s] 0.105857 +Converged at iteration 36, L1 7.05009e-05, Linf 0.00362804, total time[s] 0.110476 +Converged at iteration 28, L1 5.57159e-05, Linf 0.00533866, total time[s] 0.078792 +Converged at iteration 31, L1 6.05747e-05, Linf 0.00506984, total time[s] 0.142967 +Converged at iteration 26, L1 8.1068e-05, Linf 0.00553876, total time[s] 0.118181 +Converged at iteration 21, L1 8.05716e-05, Linf 0.00412901, total time[s] 0.063069 +Converged at iteration 20, L1 8.55292e-05, Linf 0.00536627, total time[s] 0.101773 +Converged at iteration 23, L1 6.04455e-05, Linf 0.00635653, total time[s] 0.097309 +Converged at iteration 27, L1 7.35223e-05, Linf 0.0054172, total time[s] 0.084236 +Converged at iteration 25, L1 9.19153e-05, Linf 0.0041788, total time[s] 0.070373 +Converged at iteration 21, L1 5.18773e-05, Linf 0.00420787, total time[s] 0.058598 +Converged at iteration 17, L1 9.61583e-05, Linf 0.00420345, total time[s] 0.06175 +Converged at iteration 31, L1 8.59511e-05, Linf 0.00273262, total time[s] 0.104038 +Converged at iteration 20, L1 7.34193e-05, Linf 0.00526656, total time[s] 0.069491 +Converged at iteration 24, L1 6.57617e-05, Linf 0.00542839, total time[s] 0.071871 +Converged at iteration 29, L1 6.97971e-05, Linf 0.00294501, total time[s] 0.100052 +Converged at iteration 24, L1 7.25e-05, Linf 0.00534051, total time[s] 0.072276 +Converged at iteration 22, L1 7.22655e-05, Linf 0.00397418, total time[s] 0.121812 +Converged at iteration 23, L1 8.91658e-05, Linf 0.0045014, total time[s] 0.130972 +Converged at iteration 26, L1 6.63213e-05, Linf 0.00484591, total time[s] 0.079894 +Converged at iteration 29, L1 6.70065e-05, Linf 0.00422124, total time[s] 0.102992 +Converged at iteration 30, L1 9.22044e-05, Linf 0.00463087, total time[s] 0.098821 +Converged at iteration 29, L1 7.81434e-05, Linf 0.00315172, total time[s] 0.091563 +Converged at iteration 29, L1 8.58259e-05, Linf 0.00314018, total time[s] 0.087668 +Converged at iteration 31, L1 8.19585e-05, Linf 0.00335999, total time[s] 0.08126 +Converged at iteration 32, L1 9.98116e-05, Linf 0.00510979, total time[s] 0.115854 +Converged at iteration 33, L1 7.61256e-05, Linf 0.0052013, total time[s] 0.099842 +Converged at iteration 28, L1 7.51885e-05, Linf 0.00380512, total time[s] 0.124865 +Converged at iteration 24, L1 8.74704e-05, Linf 0.00208679, total time[s] 0.090034 +Converged at iteration 25, L1 8.41264e-05, Linf 0.00464679, total time[s] 0.086135 +Converged at iteration 39, L1 9.60652e-05, Linf 0.0053301, total time[s] 0.143243 +Converged at iteration 36, L1 7.09005e-05, Linf 0.00367117, total time[s] 0.141721 +Converged at iteration 27, L1 8.81738e-05, Linf 0.00647482, total time[s] 0.091852 +Converged at iteration 31, L1 6.04649e-05, Linf 0.00507127, total time[s] 0.085572 +Converged at iteration 26, L1 7.98376e-05, Linf 0.00546051, total time[s] 0.098281 +Converged at iteration 21, L1 7.91615e-05, Linf 0.00406243, total time[s] 0.057474 +Converged at iteration 20, L1 8.21306e-05, Linf 0.00534089, total time[s] 0.08281 +Converged at iteration 23, L1 5.39174e-05, Linf 0.00628394, total time[s] 0.075274 +Converged at iteration 27, L1 6.86353e-05, Linf 0.00538875, total time[s] 0.075466 +Converged at iteration 25, L1 8.82629e-05, Linf 0.00416293, total time[s] 0.073962 +Converged at iteration 21, L1 4.9507e-05, Linf 0.00419764, total time[s] 0.066974 +Converged at iteration 17, L1 9.32932e-05, Linf 0.00415717, total time[s] 0.049678 +Converged at iteration 31, L1 8.76186e-05, Linf 0.00276892, total time[s] 0.128299 +Converged at iteration 20, L1 7.18304e-05, Linf 0.00528993, total time[s] 0.06195 +Converged at iteration 24, L1 6.61376e-05, Linf 0.00528639, total time[s] 0.066182 +Converged at iteration 28, L1 9.80689e-05, Linf 0.00374858, total time[s] 0.084796 +Converged at iteration 24, L1 6.88557e-05, Linf 0.00531899, total time[s] 0.064904 +Converged at iteration 22, L1 6.82706e-05, Linf 0.00391028, total time[s] 0.06235 +Converged at iteration 23, L1 8.7672e-05, Linf 0.00444966, total time[s] 0.0723 +Converged at iteration 26, L1 6.59518e-05, Linf 0.00476655, total time[s] 0.088451 +Converged at iteration 29, L1 6.68233e-05, Linf 0.00411577, total time[s] 0.125166 +Converged at iteration 30, L1 8.77771e-05, Linf 0.00462004, total time[s] 0.09984 +Converged at iteration 29, L1 7.33707e-05, Linf 0.00307686, total time[s] 0.087367 +Converged at iteration 29, L1 8.66677e-05, Linf 0.00315668, total time[s] 0.105718 +Converged at iteration 31, L1 7.89089e-05, Linf 0.00322083, total time[s] 0.099936 +Converged at iteration 32, L1 8.68946e-05, Linf 0.00466208, total time[s] 0.108131 +Converged at iteration 33, L1 7.54947e-05, Linf 0.00522545, total time[s] 0.091416 +Converged at iteration 28, L1 7.36152e-05, Linf 0.00374258, total time[s] 0.088242 +Converged at iteration 24, L1 8.93917e-05, Linf 0.0020377, total time[s] 0.077811 +Converged at iteration 25, L1 7.95223e-05, Linf 0.00455362, total time[s] 0.072626 +Converged at iteration 39, L1 9.42774e-05, Linf 0.00537626, total time[s] 0.12418 +Converged at iteration 36, L1 7.18508e-05, Linf 0.00372457, total time[s] 0.13024 +Converged at iteration 27, L1 7.57613e-05, Linf 0.00624076, total time[s] 0.07476 +Converged at iteration 31, L1 6.0554e-05, Linf 0.00507259, total time[s] 0.091933 +Converged at iteration 26, L1 7.86492e-05, Linf 0.00549652, total time[s] 0.078686 +Converged at iteration 21, L1 7.76078e-05, Linf 0.00399475, total time[s] 0.076048 +Converged at iteration 20, L1 7.82362e-05, Linf 0.0053028, total time[s] 0.06378 +Converged at iteration 22, L1 9.59038e-05, Linf 0.00777165, total time[s] 0.096268 +Converged at iteration 27, L1 6.35928e-05, Linf 0.00530451, total time[s] 0.080365 +Converged at iteration 25, L1 8.60061e-05, Linf 0.00414693, total time[s] 0.081632 +Converged at iteration 20, L1 9.77199e-05, Linf 0.00557921, total time[s] 0.05755 +Converged at iteration 17, L1 9.08536e-05, Linf 0.00410456, total time[s] 0.052113 +Converged at iteration 31, L1 8.84233e-05, Linf 0.002723, total time[s] 0.120169 +Converged at iteration 20, L1 6.99648e-05, Linf 0.00533872, total time[s] 0.054309 +Converged at iteration 24, L1 6.49825e-05, Linf 0.00550175, total time[s] 0.167935 +Converged at iteration 28, L1 9.26468e-05, Linf 0.00369368, total time[s] 0.098104 +Converged at iteration 24, L1 6.54528e-05, Linf 0.00530136, total time[s] 0.067993 +Converged at iteration 22, L1 6.54105e-05, Linf 0.00384816, total time[s] 0.069409 +Converged at iteration 23, L1 8.63247e-05, Linf 0.0043907, total time[s] 0.068277 +Converged at iteration 26, L1 6.55981e-05, Linf 0.00467845, total time[s] 0.095255 +Converged at iteration 29, L1 6.61721e-05, Linf 0.00401949, total time[s] 0.088021 +Converged at iteration 30, L1 8.39655e-05, Linf 0.00461203, total time[s] 0.112365 +Converged at iteration 29, L1 6.93259e-05, Linf 0.00300516, total time[s] 0.111062 +Converged at iteration 29, L1 8.82373e-05, Linf 0.00321319, total time[s] 0.111574 +Converged at iteration 31, L1 7.64277e-05, Linf 0.00309853, total time[s] 0.111479 +Converged at iteration 32, L1 7.6978e-05, Linf 0.00420647, total time[s] 0.107226 +Converged at iteration 33, L1 7.52159e-05, Linf 0.00526023, total time[s] 0.090553 +Converged at iteration 28, L1 7.24613e-05, Linf 0.00380043, total time[s] 0.088345 +Converged at iteration 24, L1 9.12518e-05, Linf 0.0019724, total time[s] 0.073273 +Converged at iteration 25, L1 7.53381e-05, Linf 0.00444407, total time[s] 0.114153 +Converged at iteration 39, L1 9.36375e-05, Linf 0.00542285, total time[s] 0.103609 +Converged at iteration 36, L1 7.20388e-05, Linf 0.00377914, total time[s] 0.10421 +Converged at iteration 27, L1 6.52225e-05, Linf 0.00598581, total time[s] 0.087222 +Converged at iteration 31, L1 6.09634e-05, Linf 0.0050737, total time[s] 0.096692 +Converged at iteration 26, L1 7.76467e-05, Linf 0.00547478, total time[s] 0.089542 +Converged at iteration 21, L1 7.58828e-05, Linf 0.00392501, total time[s] 0.067048 +Converged at iteration 20, L1 7.46988e-05, Linf 0.00521703, total time[s] 0.061098 +Converged at iteration 22, L1 8.7557e-05, Linf 0.00764225, total time[s] 0.062419 +Converged at iteration 27, L1 5.89432e-05, Linf 0.00522016, total time[s] 0.089226 +Converged at iteration 25, L1 8.25953e-05, Linf 0.00413087, total time[s] 0.097098 +Converged at iteration 20, L1 9.49745e-05, Linf 0.00560614, total time[s] 0.130142 +Converged at iteration 17, L1 8.83037e-05, Linf 0.00402853, total time[s] 0.070428 +Converged at iteration 31, L1 8.93473e-05, Linf 0.00274905, total time[s] 0.133698 +Converged at iteration 20, L1 6.88478e-05, Linf 0.0053706, total time[s] 0.074899 +Converged at iteration 24, L1 6.44674e-05, Linf 0.00545792, total time[s] 0.108886 +Converged at iteration 28, L1 8.76978e-05, Linf 0.00361918, total time[s] 0.084187 +Converged at iteration 24, L1 6.23084e-05, Linf 0.00528279, total time[s] 0.088797 +Converged at iteration 22, L1 6.31303e-05, Linf 0.00378868, total time[s] 0.072157 +Converged at iteration 23, L1 8.5464e-05, Linf 0.00432605, total time[s] 0.091573 +Converged at iteration 26, L1 6.52351e-05, Linf 0.00457978, total time[s] 0.089953 +Converged at iteration 29, L1 6.56112e-05, Linf 0.00393616, total time[s] 0.083534 +Converged at iteration 30, L1 8.09608e-05, Linf 0.00457233, total time[s] 0.083834 +Converged at iteration 29, L1 6.59294e-05, Linf 0.0029393, total time[s] 0.106122 +Converged at iteration 29, L1 8.8786e-05, Linf 0.0032311, total time[s] 0.08845 +Converged at iteration 31, L1 7.32737e-05, Linf 0.00298251, total time[s] 0.100031 +Converged at iteration 32, L1 6.73012e-05, Linf 0.00374869, total time[s] 0.152491 +Converged at iteration 33, L1 7.55985e-05, Linf 0.0052737, total time[s] 0.104823 +Converged at iteration 28, L1 7.13325e-05, Linf 0.00372937, total time[s] 0.097047 +Converged at iteration 24, L1 9.29261e-05, Linf 0.00191465, total time[s] 0.072766 +Converged at iteration 25, L1 7.12938e-05, Linf 0.00431468, total time[s] 0.066197 +Converged at iteration 39, L1 9.30544e-05, Linf 0.0054679, total time[s] 0.118093 +Converged at iteration 36, L1 7.19902e-05, Linf 0.00387895, total time[s] 0.14476 +Converged at iteration 27, L1 5.62745e-05, Linf 0.00574301, total time[s] 0.157165 +Converged at iteration 31, L1 6.01135e-05, Linf 0.00507455, total time[s] 0.213231 +Converged at iteration 26, L1 7.62064e-05, Linf 0.00545193, total time[s] 0.093247 +Converged at iteration 21, L1 7.44955e-05, Linf 0.00385372, total time[s] 0.091723 +Converged at iteration 20, L1 7.16584e-05, Linf 0.00521785, total time[s] 0.068529 +Converged at iteration 22, L1 7.93391e-05, Linf 0.00755949, total time[s] 0.091479 +Converged at iteration 26, L1 9.66686e-05, Linf 0.00647117, total time[s] 0.099103 +Converged at iteration 25, L1 7.88269e-05, Linf 0.00411476, total time[s] 0.12439 +Converged at iteration 20, L1 9.229e-05, Linf 0.00557037, total time[s] 0.074044 +Converged at iteration 17, L1 8.59616e-05, Linf 0.00394934, total time[s] 0.052703 +Converged at iteration 31, L1 9.06167e-05, Linf 0.00275361, total time[s] 0.114672 +Converged at iteration 20, L1 6.76911e-05, Linf 0.00539793, total time[s] 0.115911 +Converged at iteration 24, L1 6.32036e-05, Linf 0.00554169, total time[s] 0.11745 +Converged at iteration 28, L1 8.34001e-05, Linf 0.00354489, total time[s] 0.098455 +Converged at iteration 24, L1 5.94242e-05, Linf 0.00526135, total time[s] 0.073325 +Converged at iteration 21, L1 9.94038e-05, Linf 0.00470673, total time[s] 0.072836 +Converged at iteration 23, L1 8.3751e-05, Linf 0.00425679, total time[s] 0.066247 +Converged at iteration 26, L1 6.49104e-05, Linf 0.00447267, total time[s] 0.135699 +Converged at iteration 28, L1 9.99786e-05, Linf 0.00589907, total time[s] 0.124955 +Converged at iteration 30, L1 7.84979e-05, Linf 0.00460852, total time[s] 0.107677 +Converged at iteration 28, L1 9.76935e-05, Linf 0.00357581, total time[s] 0.096613 +Converged at iteration 29, L1 8.9477e-05, Linf 0.00326288, total time[s] 0.113435 +Converged at iteration 31, L1 7.0895e-05, Linf 0.00286806, total time[s] 0.089716 +Converged at iteration 31, L1 9.59611e-05, Linf 0.00462244, total time[s] 0.176579 +Converged at iteration 33, L1 7.44952e-05, Linf 0.00529773, total time[s] 0.148405 +Converged at iteration 28, L1 7.00589e-05, Linf 0.00370451, total time[s] 0.124324 +Converged at iteration 24, L1 9.36897e-05, Linf 0.00185644, total time[s] 0.071506 +Converged at iteration 25, L1 6.75211e-05, Linf 0.00417216, total time[s] 0.09138 +Converged at iteration 40, L1 6.80645e-05, Linf 0.00367696, total time[s] 0.11813 +Converged at iteration 35, L1 7.63574e-05, Linf 0.00339723, total time[s] 0.107045 +Converged at iteration 30, L1 9.67628e-05, Linf 0.00435567, total time[s] 0.105042 +Converged at iteration 31, L1 6.22321e-05, Linf 0.0050025, total time[s] 0.100497 +Converged at iteration 27, L1 6.26183e-05, Linf 0.00499557, total time[s] 0.074756 +Converged at iteration 22, L1 8.58754e-05, Linf 0.00448863, total time[s] 0.061292 +Converged at iteration 20, L1 9.60225e-05, Linf 0.00397846, total time[s] 0.053149 +Converged at iteration 24, L1 8.83998e-05, Linf 0.00480209, total time[s] 0.062723 +Converged at iteration 28, L1 7.40237e-05, Linf 0.00444859, total time[s] 0.092617 +Converged at iteration 26, L1 8.1351e-05, Linf 0.00546683, total time[s] 0.095175 +Converged at iteration 22, L1 7.40085e-05, Linf 0.00508705, total time[s] 0.06397 +Converged at iteration 19, L1 6.63296e-05, Linf 0.00393093, total time[s] 0.054311 +Converged at iteration 30, L1 7.97954e-05, Linf 0.00329635, total time[s] 0.095393 +Converged at iteration 20, L1 8.4765e-05, Linf 0.00454706, total time[s] 0.077125 +Converged at iteration 24, L1 7.10837e-05, Linf 0.00463275, total time[s] 0.084028 +Converged at iteration 31, L1 8.93551e-05, Linf 0.00569497, total time[s] 0.097956 +Converged at iteration 27, L1 9.91608e-05, Linf 0.00569798, total time[s] 0.11853 +Converged at iteration 24, L1 8.79025e-05, Linf 0.00465047, total time[s] 0.074744 +Converged at iteration 23, L1 9.22566e-05, Linf 0.00410189, total time[s] 0.079663 +Converged at iteration 26, L1 7.22312e-05, Linf 0.00446076, total time[s] 0.086652 +Converged at iteration 29, L1 7.81437e-05, Linf 0.00479524, total time[s] 0.123815 +Converged at iteration 34, L1 7.09534e-05, Linf 0.00422675, total time[s] 0.150126 +Converged at iteration 30, L1 9.3949e-05, Linf 0.00442584, total time[s] 0.107631 +Converged at iteration 28, L1 9.49895e-05, Linf 0.00311064, total time[s] 0.107644 +Converged at iteration 32, L1 9.39571e-05, Linf 0.00374072, total time[s] 0.116238 +Converged at iteration 37, L1 7.33871e-05, Linf 0.00327869, total time[s] 0.146543 +Converged at iteration 33, L1 8.45263e-05, Linf 0.00469105, total time[s] 0.15253 +Converged at iteration 28, L1 9.65497e-05, Linf 0.00430199, total time[s] 0.0729 +Converged at iteration 24, L1 8.82903e-05, Linf 0.00325073, total time[s] 0.083017 +Converged at iteration 26, L1 8.98149e-05, Linf 0.00383999, total time[s] 0.103607 +Converged at iteration 40, L1 6.70912e-05, Linf 0.00383054, total time[s] 0.113887 +Converged at iteration 35, L1 8.23637e-05, Linf 0.00351907, total time[s] 0.12542 +Converged at iteration 30, L1 9.62115e-05, Linf 0.00422176, total time[s] 0.089029 +Converged at iteration 31, L1 6.18364e-05, Linf 0.00501467, total time[s] 0.100103 +Converged at iteration 27, L1 6.00641e-05, Linf 0.00494139, total time[s] 0.08257 +Converged at iteration 22, L1 7.71088e-05, Linf 0.00430645, total time[s] 0.072719 +Converged at iteration 21, L1 6.27967e-05, Linf 0.0033629, total time[s] 0.056108 +Converged at iteration 24, L1 9.04796e-05, Linf 0.00488886, total time[s] 0.071794 +Converged at iteration 28, L1 7.43179e-05, Linf 0.00444376, total time[s] 0.090568 +Converged at iteration 26, L1 8.16686e-05, Linf 0.00550849, total time[s] 0.104679 +Converged at iteration 22, L1 7.26954e-05, Linf 0.00482878, total time[s] 0.065709 +Converged at iteration 19, L1 5.91174e-05, Linf 0.00361616, total time[s] 0.061531 +Converged at iteration 30, L1 8.85315e-05, Linf 0.00330314, total time[s] 0.088023 +Converged at iteration 20, L1 8.51824e-05, Linf 0.00465237, total time[s] 0.056156 +Converged at iteration 24, L1 7.19914e-05, Linf 0.00468216, total time[s] 0.089491 +Converged at iteration 31, L1 9.33346e-05, Linf 0.00531398, total time[s] 0.089561 +Converged at iteration 27, L1 9.88938e-05, Linf 0.00537766, total time[s] 0.219083 +Converged at iteration 24, L1 8.68449e-05, Linf 0.00451261, total time[s] 0.071777 +Converged at iteration 23, L1 9.25849e-05, Linf 0.00421968, total time[s] 0.063642 +Converged at iteration 26, L1 7.18915e-05, Linf 0.00456738, total time[s] 0.083692 +Converged at iteration 29, L1 7.63166e-05, Linf 0.00485466, total time[s] 0.134506 +Converged at iteration 34, L1 7.857e-05, Linf 0.00426167, total time[s] 0.169528 +Converged at iteration 31, L1 6.91663e-05, Linf 0.00361748, total time[s] 0.097326 +Converged at iteration 28, L1 9.86167e-05, Linf 0.00321119, total time[s] 0.083982 +Converged at iteration 32, L1 8.58024e-05, Linf 0.00362295, total time[s] 0.135321 +Converged at iteration 36, L1 9.57578e-05, Linf 0.00369313, total time[s] 0.120796 +Converged at iteration 33, L1 8.39661e-05, Linf 0.00478543, total time[s] 0.097991 +Converged at iteration 28, L1 9.33353e-05, Linf 0.00419564, total time[s] 0.085124 +Converged at iteration 24, L1 8.21743e-05, Linf 0.00304608, total time[s] 0.075039 +Converged at iteration 26, L1 8.69622e-05, Linf 0.00389474, total time[s] 0.069133 +Converged at iteration 40, L1 6.83898e-05, Linf 0.00375256, total time[s] 0.119977 +Converged at iteration 35, L1 7.91603e-05, Linf 0.00345687, total time[s] 0.107085 +Converged at iteration 30, L1 9.77009e-05, Linf 0.00426847, total time[s] 0.171381 +Converged at iteration 31, L1 6.20206e-05, Linf 0.00503181, total time[s] 0.130021 +Converged at iteration 27, L1 6.15932e-05, Linf 0.00496935, total time[s] 0.130422 +Converged at iteration 22, L1 8.14295e-05, Linf 0.00439807, total time[s] 0.111154 +Converged at iteration 20, L1 9.86139e-05, Linf 0.00415913, total time[s] 0.069288 +Converged at iteration 24, L1 9.07162e-05, Linf 0.00485526, total time[s] 0.118639 +Converged at iteration 28, L1 7.41426e-05, Linf 0.0044521, total time[s] 0.095905 +Converged at iteration 26, L1 8.06072e-05, Linf 0.00550187, total time[s] 0.132328 +Converged at iteration 22, L1 7.26463e-05, Linf 0.00495074, total time[s] 0.080642 +Converged at iteration 19, L1 6.30626e-05, Linf 0.00378338, total time[s] 0.081869 +Converged at iteration 30, L1 8.38715e-05, Linf 0.00330001, total time[s] 0.120007 +Converged at iteration 20, L1 8.47852e-05, Linf 0.00460054, total time[s] 0.060246 +Converged at iteration 24, L1 7.18115e-05, Linf 0.00464818, total time[s] 0.149479 +Converged at iteration 31, L1 9.12118e-05, Linf 0.00556177, total time[s] 0.100896 +Converged at iteration 27, L1 9.94057e-05, Linf 0.00562166, total time[s] 0.111375 +Converged at iteration 24, L1 8.76212e-05, Linf 0.00459823, total time[s] 0.097563 +Converged at iteration 23, L1 9.25101e-05, Linf 0.00415735, total time[s] 0.073562 +Converged at iteration 26, L1 7.20924e-05, Linf 0.00451198, total time[s] 0.073414 +Converged at iteration 29, L1 7.74071e-05, Linf 0.00482513, total time[s] 0.075985 +Converged at iteration 34, L1 7.53198e-05, Linf 0.00428332, total time[s] 0.137773 +Converged at iteration 30, L1 9.72594e-05, Linf 0.00446032, total time[s] 0.113766 +Converged at iteration 28, L1 9.63641e-05, Linf 0.00316014, total time[s] 0.097144 +Converged at iteration 32, L1 8.95264e-05, Linf 0.00368201, total time[s] 0.122194 +Converged at iteration 37, L1 7.16346e-05, Linf 0.00315484, total time[s] 0.128984 +Converged at iteration 33, L1 8.42741e-05, Linf 0.00479011, total time[s] 0.125561 +Converged at iteration 28, L1 9.50782e-05, Linf 0.00424725, total time[s] 0.086225 +Converged at iteration 24, L1 8.45472e-05, Linf 0.00314838, total time[s] 0.08127 +Converged at iteration 26, L1 8.85956e-05, Linf 0.00386847, total time[s] 0.104759 +Converged at iteration 40, L1 6.73954e-05, Linf 0.00535013, total time[s] 0.150123 +Converged at iteration 35, L1 8.60205e-05, Linf 0.00362237, total time[s] 0.458712 +Converged at iteration 30, L1 9.26889e-05, Linf 0.00418561, total time[s] 0.123941 +Converged at iteration 31, L1 6.26456e-05, Linf 0.00504427, total time[s] 0.107241 +Converged at iteration 26, L1 9.90916e-05, Linf 0.00572902, total time[s] 0.14451 +Converged at iteration 22, L1 7.29641e-05, Linf 0.00421379, total time[s] 0.070938 +Converged at iteration 21, L1 6.38155e-05, Linf 0.00342575, total time[s] 0.083377 +Converged at iteration 24, L1 8.96716e-05, Linf 0.00495203, total time[s] 0.095434 +Converged at iteration 28, L1 7.38185e-05, Linf 0.00442701, total time[s] 0.105272 +Converged at iteration 26, L1 8.02925e-05, Linf 0.00539943, total time[s] 0.098574 +Converged at iteration 22, L1 7.12504e-05, Linf 0.00455776, total time[s] 0.080678 +Converged at iteration 19, L1 5.62134e-05, Linf 0.00340163, total time[s] 0.054795 +Converged at iteration 30, L1 9.4052e-05, Linf 0.00330569, total time[s] 0.12525 +Converged at iteration 20, L1 8.46414e-05, Linf 0.00470819, total time[s] 0.065082 +Converged at iteration 24, L1 7.12389e-05, Linf 0.00476415, total time[s] 0.11795 +Converged at iteration 31, L1 9.36986e-05, Linf 0.00498534, total time[s] 0.145093 +Converged at iteration 27, L1 9.64789e-05, Linf 0.00490685, total time[s] 0.128969 +Converged at iteration 24, L1 8.60472e-05, Linf 0.00435257, total time[s] 0.072823 +Converged at iteration 23, L1 9.27364e-05, Linf 0.00429536, total time[s] 0.085051 +Converged at iteration 26, L1 7.17754e-05, Linf 0.00463025, total time[s] 0.086646 +Converged at iteration 29, L1 7.55466e-05, Linf 0.00487908, total time[s] 0.112739 +Converged at iteration 34, L1 8.10967e-05, Linf 0.00418099, total time[s] 0.0928 +Converged at iteration 31, L1 7.1295e-05, Linf 0.0035707, total time[s] 0.141108 +Converged at iteration 29, L1 6.99016e-05, Linf 0.00271597, total time[s] 0.092521 +Converged at iteration 32, L1 8.358e-05, Linf 0.00356412, total time[s] 0.15047 +Converged at iteration 36, L1 8.9363e-05, Linf 0.00360517, total time[s] 0.116784 +Converged at iteration 33, L1 8.34262e-05, Linf 0.00483692, total time[s] 0.106384 +Converged at iteration 28, L1 9.17476e-05, Linf 0.00419565, total time[s] 0.139575 +Converged at iteration 24, L1 8.06081e-05, Linf 0.00294224, total time[s] 0.138396 +Converged at iteration 26, L1 8.46892e-05, Linf 0.00391634, total time[s] 0.173263 +Converged at iteration 38, L1 9.36777e-05, Linf 0.00153914, total time[s] 0.280299 +Converged at iteration 35, L1 8.3521e-05, Linf 0.00348377, total time[s] 0.105681 +Converged at iteration 30, L1 9.65748e-05, Linf 0.00424382, total time[s] 0.078562 +Converged at iteration 31, L1 6.18699e-05, Linf 0.00501452, total time[s] 0.090437 +Converged at iteration 27, L1 6.01594e-05, Linf 0.00494107, total time[s] 0.113075 +Converged at iteration 22, L1 7.71567e-05, Linf 0.00430569, total time[s] 0.098908 +Converged at iteration 21, L1 6.27943e-05, Linf 0.00334582, total time[s] 0.077511 +Converged at iteration 24, L1 9.04021e-05, Linf 0.0048884, total time[s] 0.122407 +Converged at iteration 28, L1 7.44435e-05, Linf 0.00444298, total time[s] 0.108958 +Converged at iteration 26, L1 8.05167e-05, Linf 0.00538475, total time[s] 0.082448 +Converged at iteration 22, L1 7.22806e-05, Linf 0.00482965, total time[s] 0.06028 +Converged at iteration 19, L1 5.91414e-05, Linf 0.00361467, total time[s] 0.067059 +Converged at iteration 30, L1 8.88997e-05, Linf 0.00330289, total time[s] 0.087088 +Converged at iteration 20, L1 8.51862e-05, Linf 0.00465281, total time[s] 0.053658 +Converged at iteration 24, L1 7.15192e-05, Linf 0.00467796, total time[s] 0.119611 +Converged at iteration 31, L1 9.34202e-05, Linf 0.0053134, total time[s] 0.103716 +Converged at iteration 27, L1 9.96248e-05, Linf 0.00537913, total time[s] 0.08542 +Converged at iteration 24, L1 8.73791e-05, Linf 0.00451227, total time[s] 0.084093 +Converged at iteration 23, L1 9.26389e-05, Linf 0.00422085, total time[s] 0.071851 +Converged at iteration 26, L1 7.18684e-05, Linf 0.00456739, total time[s] 0.075982 +Converged at iteration 29, L1 7.65666e-05, Linf 0.00485431, total time[s] 0.13237 +Converged at iteration 34, L1 7.85892e-05, Linf 0.00433689, total time[s] 0.138513 +Converged at iteration 31, L1 6.92556e-05, Linf 0.00361828, total time[s] 0.107999 +Converged at iteration 28, L1 9.84961e-05, Linf 0.00321094, total time[s] 0.077777 +Converged at iteration 32, L1 8.57493e-05, Linf 0.00362186, total time[s] 0.100235 +Converged at iteration 36, L1 9.5491e-05, Linf 0.00367427, total time[s] 0.11625 +Converged at iteration 33, L1 8.39302e-05, Linf 0.00478538, total time[s] 0.085734 +Converged at iteration 28, L1 9.33789e-05, Linf 0.00419557, total time[s] 0.099609 +Converged at iteration 24, L1 8.21454e-05, Linf 0.00304558, total time[s] 0.069125 +Converged at iteration 26, L1 8.72472e-05, Linf 0.00391445, total time[s] 0.076341 +Converged at iteration 40, L1 6.70543e-05, Linf 0.00379157, total time[s] 0.121527 +Converged at iteration 35, L1 8.074e-05, Linf 0.0034876, total time[s] 0.106752 +Converged at iteration 30, L1 9.70148e-05, Linf 0.00424058, total time[s] 0.095919 +Converged at iteration 31, L1 6.18961e-05, Linf 0.0050349, total time[s] 0.086247 +Converged at iteration 27, L1 6.0773e-05, Linf 0.00495577, total time[s] 0.074059 +Converged at iteration 22, L1 7.9233e-05, Linf 0.00439981, total time[s] 0.076962 +Converged at iteration 20, L1 9.95885e-05, Linf 0.00417032, total time[s] 0.068696 +Converged at iteration 24, L1 9.0608e-05, Linf 0.00487017, total time[s] 0.096426 +Converged at iteration 28, L1 7.45265e-05, Linf 0.00445597, total time[s] 0.133627 +Converged at iteration 26, L1 8.27662e-05, Linf 0.00976606, total time[s] 0.110926 +Converged at iteration 22, L1 7.25796e-05, Linf 0.00491876, total time[s] 0.065807 +Converged at iteration 19, L1 6.15012e-05, Linf 0.00370252, total time[s] 0.051465 +Converged at iteration 30, L1 8.614e-05, Linf 0.00330158, total time[s] 0.082186 +Converged at iteration 20, L1 8.52328e-05, Linf 0.00462288, total time[s] 0.073169 +Converged at iteration 24, L1 7.15289e-05, Linf 0.00466365, total time[s] 0.066908 +Converged at iteration 31, L1 9.23626e-05, Linf 0.00536744, total time[s] 0.08098 +Converged at iteration 27, L1 9.93658e-05, Linf 0.0055292, total time[s] 0.086526 +Converged at iteration 24, L1 8.73046e-05, Linf 0.0045623, total time[s] 0.069995 +Converged at iteration 23, L1 9.34465e-05, Linf 0.00518401, total time[s] 0.085224 +Converged at iteration 26, L1 7.20263e-05, Linf 0.00463503, total time[s] 0.07301 +Converged at iteration 29, L1 7.69866e-05, Linf 0.00484019, total time[s] 0.077653 +Converged at iteration 34, L1 7.71294e-05, Linf 0.00431828, total time[s] 0.089625 +Converged at iteration 30, L1 9.87865e-05, Linf 0.00440175, total time[s] 0.091527 +Converged at iteration 28, L1 9.73556e-05, Linf 0.00318542, total time[s] 0.101253 +Converged at iteration 32, L1 8.7401e-05, Linf 0.00363281, total time[s] 0.090303 +Converged at iteration 36, L1 9.81126e-05, Linf 0.0037402, total time[s] 0.102712 +Converged at iteration 33, L1 8.4076e-05, Linf 0.00476182, total time[s] 0.097896 +Converged at iteration 28, L1 9.42441e-05, Linf 0.00422029, total time[s] 0.086469 +Converged at iteration 24, L1 8.32171e-05, Linf 0.00309705, total time[s] 0.081318 +Converged at iteration 26, L1 8.78281e-05, Linf 0.00388152, total time[s] 0.093987 +Converged at iteration 40, L1 6.72794e-05, Linf 0.00386951, total time[s] 0.133157 +Converged at iteration 35, L1 8.48227e-05, Linf 0.00355099, total time[s] 0.115498 +Converged at iteration 30, L1 9.51257e-05, Linf 0.00420093, total time[s] 0.149402 +Converged at iteration 31, L1 6.1875e-05, Linf 0.00504113, total time[s] 0.081647 +Converged at iteration 27, L1 5.94604e-05, Linf 0.00492628, total time[s] 0.10044 +Converged at iteration 22, L1 7.49913e-05, Linf 0.00426051, total time[s] 0.057834 +Converged at iteration 21, L1 6.3214e-05, Linf 0.00339814, total time[s] 0.075932 +Converged at iteration 24, L1 8.99275e-05, Linf 0.00490944, total time[s] 0.099327 +Converged at iteration 28, L1 7.40175e-05, Linf 0.00443841, total time[s] 0.08874 +Converged at iteration 26, L1 8.10111e-05, Linf 0.00546115, total time[s] 0.089238 +Converged at iteration 22, L1 7.17642e-05, Linf 0.00471318, total time[s] 0.061214 +Converged at iteration 19, L1 5.78268e-05, Linf 0.00345828, total time[s] 0.069367 +Converged at iteration 30, L1 9.1116e-05, Linf 0.00330411, total time[s] 0.083895 +Converged at iteration 20, L1 8.50184e-05, Linf 0.00468019, total time[s] 0.075072 +Converged at iteration 24, L1 7.15424e-05, Linf 0.00471147, total time[s] 0.07472 +Converged at iteration 31, L1 9.41191e-05, Linf 0.00518073, total time[s] 0.133369 +Converged at iteration 27, L1 9.81357e-05, Linf 0.00516117, total time[s] 0.107534 +Converged at iteration 24, L1 8.66878e-05, Linf 0.00444334, total time[s] 0.067975 +Converged at iteration 23, L1 9.27128e-05, Linf 0.00425622, total time[s] 0.074937 +Converged at iteration 26, L1 7.1893e-05, Linf 0.00459742, total time[s] 0.0689 +Converged at iteration 29, L1 7.59872e-05, Linf 0.00486811, total time[s] 0.085922 +Converged at iteration 34, L1 8.00903e-05, Linf 0.00429594, total time[s] 0.123283 +Converged at iteration 31, L1 7.03433e-05, Linf 0.00359464, total time[s] 0.084205 +Converged at iteration 28, L1 9.97474e-05, Linf 0.00323656, total time[s] 0.079182 +Converged at iteration 32, L1 8.47189e-05, Linf 0.00359195, total time[s] 0.087775 +Converged at iteration 36, L1 9.26936e-05, Linf 0.00364969, total time[s] 0.119616 +Converged at iteration 33, L1 8.36457e-05, Linf 0.00480874, total time[s] 0.096615 +Converged at iteration 28, L1 9.2566e-05, Linf 0.00417054, total time[s] 0.08013 +Converged at iteration 24, L1 8.13048e-05, Linf 0.00299373, total time[s] 0.06608 +Converged at iteration 26, L1 8.58553e-05, Linf 0.00388719, total time[s] 0.139236 +Converged at iteration 40, L1 6.7087e-05, Linf 0.00402623, total time[s] 0.209992 +Converged at iteration 35, L1 9.09125e-05, Linf 0.00368999, total time[s] 0.186902 +Converged at iteration 30, L1 8.97777e-05, Linf 0.00415819, total time[s] 0.137571 +Converged at iteration 31, L1 6.15305e-05, Linf 0.00505306, total time[s] 0.110608 +Converged at iteration 26, L1 9.57557e-05, Linf 0.00575294, total time[s] 0.111931 +Converged at iteration 22, L1 6.67884e-05, Linf 0.00407055, total time[s] 0.080546 +Converged at iteration 21, L1 6.61053e-05, Linf 0.00363679, total time[s] 0.055534 +Converged at iteration 24, L1 8.89221e-05, Linf 0.00502425, total time[s] 0.064852 +Converged at iteration 28, L1 7.11012e-05, Linf 0.00441835, total time[s] 0.082618 +Converged at iteration 26, L1 8.12323e-05, Linf 0.00509879, total time[s] 0.071093 +Converged at iteration 22, L1 6.6284e-05, Linf 0.00386942, total time[s] 0.064392 +Converged at iteration 18, L1 9.41133e-05, Linf 0.00378975, total time[s] 0.051579 +Converged at iteration 31, L1 6.80546e-05, Linf 0.00265846, total time[s] 0.092917 +Converged at iteration 20, L1 8.32688e-05, Linf 0.0047988, total time[s] 0.0552 +Converged at iteration 24, L1 7.06223e-05, Linf 0.00482643, total time[s] 0.082536 +Converged at iteration 31, L1 9.51843e-05, Linf 0.00413058, total time[s] 0.101793 +Converged at iteration 27, L1 8.24284e-05, Linf 0.00394389, total time[s] 0.085409 +Converged at iteration 24, L1 8.19106e-05, Linf 0.00396603, total time[s] 0.065592 +Converged at iteration 23, L1 9.25576e-05, Linf 0.00441745, total time[s] 0.061531 +Converged at iteration 26, L1 7.07732e-05, Linf 0.00475236, total time[s] 0.094861 +Converged at iteration 29, L1 7.38904e-05, Linf 0.00491368, total time[s] 0.080628 +Converged at iteration 34, L1 8.01967e-05, Linf 0.00345615, total time[s] 0.094075 +Converged at iteration 31, L1 7.61364e-05, Linf 0.00347212, total time[s] 0.085333 +Converged at iteration 29, L1 7.29123e-05, Linf 0.00277281, total time[s] 0.08537 +Converged at iteration 32, L1 7.97733e-05, Linf 0.00351329, total time[s] 0.096218 +Converged at iteration 36, L1 7.88347e-05, Linf 0.0034424, total time[s] 0.103834 +Converged at iteration 33, L1 8.25455e-05, Linf 0.00490196, total time[s] 0.092432 +Converged at iteration 28, L1 8.91404e-05, Linf 0.00412641, total time[s] 0.0955 +Converged at iteration 24, L1 7.91571e-05, Linf 0.00281655, total time[s] 0.102714 +Converged at iteration 26, L1 8.26275e-05, Linf 0.00395687, total time[s] 0.070785 +Converged at iteration 40, L1 6.7857e-05, Linf 0.0038473, total time[s] 0.106153 +Converged at iteration 35, L1 8.78898e-05, Linf 0.00366049, total time[s] 0.108964 +Converged at iteration 30, L1 9.18653e-05, Linf 0.00417464, total time[s] 0.082374 +Converged at iteration 31, L1 6.17721e-05, Linf 0.00504713, total time[s] 0.10902 +Converged at iteration 26, L1 9.79538e-05, Linf 0.00577249, total time[s] 0.069968 +Converged at iteration 22, L1 7.09867e-05, Linf 0.00416686, total time[s] 0.072246 +Converged at iteration 21, L1 6.44559e-05, Linf 0.00351198, total time[s] 0.066086 +Converged at iteration 24, L1 8.97277e-05, Linf 0.0049613, total time[s] 0.065034 +Converged at iteration 28, L1 7.28475e-05, Linf 0.00442862, total time[s] 0.07844 +Converged at iteration 26, L1 8.04927e-05, Linf 0.00532239, total time[s] 0.074609 +Converged at iteration 22, L1 7.00499e-05, Linf 0.00434472, total time[s] 0.06244 +Converged at iteration 19, L1 5.43403e-05, Linf 0.00326754, total time[s] 0.053478 +Converged at iteration 30, L1 9.60261e-05, Linf 0.00330695, total time[s] 0.079692 +Converged at iteration 20, L1 8.41379e-05, Linf 0.00473763, total time[s] 0.055297 +Converged at iteration 24, L1 7.11882e-05, Linf 0.00476282, total time[s] 0.068165 +Converged at iteration 31, L1 9.52444e-05, Linf 0.00473809, total time[s] 0.0843 +Converged at iteration 27, L1 9.33689e-05, Linf 0.00457632, total time[s] 0.074812 +Converged at iteration 24, L1 8.5277e-05, Linf 0.0042402, total time[s] 0.069421 +Converged at iteration 23, L1 9.27244e-05, Linf 0.00433571, total time[s] 0.065944 +Converged at iteration 26, L1 7.12866e-05, Linf 0.00465751, total time[s] 0.091934 +Converged at iteration 29, L1 7.51252e-05, Linf 0.00488884, total time[s] 0.100559 +Converged at iteration 34, L1 8.23264e-05, Linf 0.00399565, total time[s] 0.103395 +Converged at iteration 31, L1 7.2608e-05, Linf 0.00354662, total time[s] 0.095064 +Converged at iteration 29, L1 7.06462e-05, Linf 0.00274862, total time[s] 0.0757 +Converged at iteration 32, L1 8.16211e-05, Linf 0.00353138, total time[s] 0.08659 +Converged at iteration 36, L1 8.56235e-05, Linf 0.00357312, total time[s] 0.111256 +Converged at iteration 33, L1 8.30869e-05, Linf 0.00491225, total time[s] 0.108075 +Converged at iteration 28, L1 9.06903e-05, Linf 0.00416903, total time[s] 0.091313 +Converged at iteration 24, L1 7.99912e-05, Linf 0.00288972, total time[s] 0.081938 +Converged at iteration 26, L1 8.38266e-05, Linf 0.00392523, total time[s] 0.073416 +Converged at iteration 40, L1 6.48565e-05, Linf 0.00410038, total time[s] 0.129438 +Converged at iteration 35, L1 9.32112e-05, Linf 0.0037632, total time[s] 0.115441 +Converged at iteration 30, L1 8.77446e-05, Linf 0.00418014, total time[s] 0.094213 +Converged at iteration 31, L1 6.13971e-05, Linf 0.00505788, total time[s] 0.083655 +Converged at iteration 26, L1 9.34899e-05, Linf 0.00572351, total time[s] 0.074986 +Converged at iteration 22, L1 6.26385e-05, Linf 0.0039712, total time[s] 0.068857 +Converged at iteration 21, L1 6.81541e-05, Linf 0.0037779, total time[s] 0.06491 +Converged at iteration 24, L1 8.82771e-05, Linf 0.00510076, total time[s] 0.0732 +Converged at iteration 28, L1 6.96326e-05, Linf 0.00440956, total time[s] 0.087147 +Converged at iteration 26, L1 8.25813e-05, Linf 0.00478682, total time[s] 0.086096 +Converged at iteration 22, L1 5.83331e-05, Linf 0.0033905, total time[s] 0.071828 +Converged at iteration 18, L1 8.5311e-05, Linf 0.00340258, total time[s] 0.056913 +Converged at iteration 31, L1 7.14693e-05, Linf 0.0026672, total time[s] 0.114503 +Converged at iteration 20, L1 8.27663e-05, Linf 0.00486523, total time[s] 0.058506 +Converged at iteration 24, L1 7.01836e-05, Linf 0.0049044, total time[s] 0.076633 +Converged at iteration 31, L1 8.79527e-05, Linf 0.00351355, total time[s] 0.092749 +Converged at iteration 26, L1 9.02103e-05, Linf 0.00413806, total time[s] 0.079134 +Converged at iteration 24, L1 7.38501e-05, Linf 0.00364724, total time[s] 0.071597 +Converged at iteration 23, L1 9.32105e-05, Linf 0.00449388, total time[s] 0.06074 +Converged at iteration 26, L1 7.01051e-05, Linf 0.00483995, total time[s] 0.073519 +Converged at iteration 29, L1 7.29042e-05, Linf 0.00493263, total time[s] 0.112785 +Converged at iteration 33, L1 9.19532e-05, Linf 0.00341157, total time[s] 0.094049 +Converged at iteration 31, L1 7.81971e-05, Linf 0.00332897, total time[s] 0.089551 +Converged at iteration 29, L1 7.50645e-05, Linf 0.00282832, total time[s] 0.080631 +Converged at iteration 32, L1 7.68583e-05, Linf 0.00341038, total time[s] 0.084164 +Converged at iteration 36, L1 7.4784e-05, Linf 0.00338432, total time[s] 0.103761 +Converged at iteration 33, L1 8.15384e-05, Linf 0.00494828, total time[s] 0.101197 +Converged at iteration 28, L1 8.70105e-05, Linf 0.00403544, total time[s] 0.078247 +Converged at iteration 24, L1 7.86057e-05, Linf 0.00267735, total time[s] 0.071069 +Converged at iteration 26, L1 8.24108e-05, Linf 0.00399674, total time[s] 0.078191 +Converged at iteration 40, L1 6.64482e-05, Linf 0.00402406, total time[s] 0.100616 +Converged at iteration 35, L1 9.04501e-05, Linf 0.00368911, total time[s] 0.101314 +Converged at iteration 30, L1 8.9433e-05, Linf 0.00417425, total time[s] 0.08659 +Converged at iteration 31, L1 6.28703e-05, Linf 0.00502906, total time[s] 0.086502 +Converged at iteration 26, L1 9.61831e-05, Linf 0.00574918, total time[s] 0.091357 +Converged at iteration 22, L1 6.6904e-05, Linf 0.00407055, total time[s] 0.058608 +Converged at iteration 21, L1 6.63732e-05, Linf 0.00363824, total time[s] 0.066276 +Converged at iteration 24, L1 8.90462e-05, Linf 0.00502484, total time[s] 0.064558 +Converged at iteration 28, L1 7.12967e-05, Linf 0.00441772, total time[s] 0.0946 +Converged at iteration 26, L1 8.27414e-05, Linf 0.0050996, total time[s] 0.079071 +Converged at iteration 22, L1 6.63599e-05, Linf 0.00386804, total time[s] 0.065959 +Converged at iteration 18, L1 9.43406e-05, Linf 0.00378833, total time[s] 0.048037 +Converged at iteration 31, L1 6.84192e-05, Linf 0.0026579, total time[s] 0.085978 +Converged at iteration 20, L1 8.33236e-05, Linf 0.00479883, total time[s] 0.053736 +Converged at iteration 24, L1 7.07565e-05, Linf 0.00483014, total time[s] 0.067617 +Converged at iteration 31, L1 9.51588e-05, Linf 0.00413425, total time[s] 0.090331 +Converged at iteration 27, L1 8.23419e-05, Linf 0.00394304, total time[s] 0.070103 +Converged at iteration 24, L1 8.20293e-05, Linf 0.00396598, total time[s] 0.082521 +Converged at iteration 23, L1 9.25503e-05, Linf 0.00441811, total time[s] 0.099106 +Converged at iteration 26, L1 7.0814e-05, Linf 0.00475209, total time[s] 0.114181 +Converged at iteration 29, L1 7.41646e-05, Linf 0.0049135, total time[s] 0.080644 +Converged at iteration 34, L1 8.03296e-05, Linf 0.00345716, total time[s] 0.148412 +Converged at iteration 31, L1 7.63102e-05, Linf 0.00347309, total time[s] 0.108228 +Converged at iteration 29, L1 7.29474e-05, Linf 0.00278713, total time[s] 0.087338 +Converged at iteration 32, L1 7.94514e-05, Linf 0.00348746, total time[s] 0.129504 +Converged at iteration 36, L1 7.88199e-05, Linf 0.00345685, total time[s] 0.171634 +Converged at iteration 33, L1 8.23917e-05, Linf 0.0049579, total time[s] 0.125078 +Converged at iteration 28, L1 8.89738e-05, Linf 0.0039835, total time[s] 0.141197 +Converged at iteration 24, L1 7.91126e-05, Linf 0.00276091, total time[s] 0.11899 +Converged at iteration 26, L1 8.26933e-05, Linf 0.00395628, total time[s] 0.071385 +Converged at iteration 39, L1 9.98439e-05, Linf 0.00487731, total time[s] 0.104186 +Converged at iteration 35, L1 9.5847e-05, Linf 0.00384339, total time[s] 0.095565 +Converged at iteration 30, L1 7.61035e-05, Linf 0.00417987, total time[s] 0.077293 +Converged at iteration 31, L1 6.19548e-05, Linf 0.00506129, total time[s] 0.082474 +Converged at iteration 26, L1 9.1257e-05, Linf 0.00569451, total time[s] 0.08082 +Converged at iteration 21, L1 9.67785e-05, Linf 0.00463162, total time[s] 0.059368 +Converged at iteration 21, L1 6.86179e-05, Linf 0.00392328, total time[s] 0.057698 +Converged at iteration 24, L1 8.21951e-05, Linf 0.00518468, total time[s] 0.122693 +Converged at iteration 28, L1 6.82888e-05, Linf 0.00440084, total time[s] 0.078802 +Converged at iteration 26, L1 8.23774e-05, Linf 0.00439316, total time[s] 0.0791 +Converged at iteration 21, L1 8.89711e-05, Linf 0.00434159, total time[s] 0.057542 +Converged at iteration 18, L1 7.58306e-05, Linf 0.00305019, total time[s] 0.05018 +Converged at iteration 31, L1 7.4399e-05, Linf 0.00267749, total time[s] 0.082977 +Converged at iteration 20, L1 8.22503e-05, Linf 0.00493571, total time[s] 0.070954 +Converged at iteration 24, L1 6.91912e-05, Linf 0.00498613, total time[s] 0.068781 +Converged at iteration 30, L1 9.91102e-05, Linf 0.00356807, total time[s] 0.099969 +Converged at iteration 25, L1 9.93754e-05, Linf 0.00470099, total time[s] 0.075038 +Converged at iteration 23, L1 9.00135e-05, Linf 0.00398973, total time[s] 0.068195 +Converged at iteration 23, L1 9.4633e-05, Linf 0.00455875, total time[s] 0.062182 +Converged at iteration 26, L1 6.93476e-05, Linf 0.0049172, total time[s] 0.107143 +Converged at iteration 29, L1 7.17163e-05, Linf 0.00491443, total time[s] 0.08428 +Converged at iteration 32, L1 9.39781e-05, Linf 0.00357658, total time[s] 0.102337 +Converged at iteration 31, L1 7.49533e-05, Linf 0.00310661, total time[s] 0.085432 +Converged at iteration 29, L1 7.70806e-05, Linf 0.00289907, total time[s] 0.091679 +Converged at iteration 32, L1 7.57203e-05, Linf 0.00336635, total time[s] 0.086626 +Converged at iteration 35, L1 9.785e-05, Linf 0.00405649, total time[s] 0.113151 +Converged at iteration 33, L1 8.066e-05, Linf 0.00499457, total time[s] 0.086844 +Converged at iteration 28, L1 8.45067e-05, Linf 0.00399379, total time[s] 0.075321 +Converged at iteration 24, L1 7.83745e-05, Linf 0.00256945, total time[s] 0.073567 +Converged at iteration 26, L1 8.28466e-05, Linf 0.0040309, total time[s] 0.085486 +Converged at iteration 40, L1 6.61338e-05, Linf 0.004101, total time[s] 0.111476 +Converged at iteration 35, L1 9.33918e-05, Linf 0.00372235, total time[s] 0.113252 +Converged at iteration 30, L1 8.82931e-05, Linf 0.00417861, total time[s] 0.111089 +Converged at iteration 31, L1 6.17805e-05, Linf 0.00505773, total time[s] 0.086629 +Converged at iteration 26, L1 9.37454e-05, Linf 0.00572328, total time[s] 0.10145 +Converged at iteration 22, L1 6.25562e-05, Linf 0.00397108, total time[s] 0.083776 +Converged at iteration 21, L1 6.81294e-05, Linf 0.00377918, total time[s] 0.060022 +Converged at iteration 24, L1 8.81634e-05, Linf 0.00510126, total time[s] 0.084572 +Converged at iteration 28, L1 6.94649e-05, Linf 0.00440888, total time[s] 0.083727 +Converged at iteration 26, L1 8.25839e-05, Linf 0.00478848, total time[s] 0.09326 +Converged at iteration 22, L1 5.83776e-05, Linf 0.00338934, total time[s] 0.058555 +Converged at iteration 18, L1 8.5418e-05, Linf 0.00340171, total time[s] 0.080459 +Converged at iteration 31, L1 7.13109e-05, Linf 0.0026672, total time[s] 0.110622 +Converged at iteration 20, L1 8.27987e-05, Linf 0.00486612, total time[s] 0.074908 +Converged at iteration 24, L1 6.99356e-05, Linf 0.00490439, total time[s] 0.077034 +Converged at iteration 31, L1 8.81463e-05, Linf 0.00352135, total time[s] 0.12298 +Converged at iteration 26, L1 9.04249e-05, Linf 0.00411772, total time[s] 0.083147 +Converged at iteration 24, L1 7.40058e-05, Linf 0.00364795, total time[s] 0.067706 +Converged at iteration 23, L1 9.33061e-05, Linf 0.00449433, total time[s] 0.063649 +Converged at iteration 26, L1 7.01332e-05, Linf 0.00484051, total time[s] 0.076124 +Converged at iteration 29, L1 7.3211e-05, Linf 0.00500952, total time[s] 0.094726 +Converged at iteration 33, L1 9.20662e-05, Linf 0.00341448, total time[s] 0.100395 +Converged at iteration 31, L1 7.83083e-05, Linf 0.00333017, total time[s] 0.112265 +Converged at iteration 29, L1 7.50682e-05, Linf 0.00284309, total time[s] 0.087699 +Converged at iteration 32, L1 7.68321e-05, Linf 0.00340973, total time[s] 0.083461 +Converged at iteration 36, L1 7.47502e-05, Linf 0.00338329, total time[s] 0.097614 +Converged at iteration 33, L1 8.15566e-05, Linf 0.00494839, total time[s] 0.10937 +Converged at iteration 28, L1 8.66362e-05, Linf 0.00403536, total time[s] 0.081457 +Converged at iteration 24, L1 7.86046e-05, Linf 0.00267672, total time[s] 0.069177 +Converged at iteration 26, L1 8.23865e-05, Linf 0.00399563, total time[s] 0.096575 +Converged at iteration 39, L1 9.92127e-05, Linf 0.00496974, total time[s] 0.116056 +Converged at iteration 35, L1 9.8629e-05, Linf 0.00392675, total time[s] 0.117461 +Converged at iteration 29, L1 9.25777e-05, Linf 0.00503147, total time[s] 0.076314 +Converged at iteration 31, L1 6.13869e-05, Linf 0.00506335, total time[s] 0.111819 +Converged at iteration 26, L1 8.9467e-05, Linf 0.00572693, total time[s] 0.09709 +Converged at iteration 21, L1 9.23246e-05, Linf 0.00452899, total time[s] 0.066269 +Converged at iteration 21, L1 6.55198e-05, Linf 0.00401641, total time[s] 0.067763 +Converged at iteration 24, L1 7.18149e-05, Linf 0.00525863, total time[s] 0.08529 +Converged at iteration 28, L1 6.45789e-05, Linf 0.00439983, total time[s] 0.079384 +Converged at iteration 26, L1 7.7716e-05, Linf 0.00400281, total time[s] 0.082616 +Converged at iteration 21, L1 7.58028e-05, Linf 0.00431478, total time[s] 0.09402 +Converged at iteration 18, L1 6.7076e-05, Linf 0.00282795, total time[s] 0.050129 +Converged at iteration 31, L1 7.73174e-05, Linf 0.00268916, total time[s] 0.079714 +Converged at iteration 20, L1 8.17202e-05, Linf 0.00500795, total time[s] 0.064804 +Converged at iteration 24, L1 6.84621e-05, Linf 0.0050747, total time[s] 0.074197 +Converged at iteration 30, L1 8.14563e-05, Linf 0.00321573, total time[s] 0.10212 +Converged at iteration 25, L1 7.70736e-05, Linf 0.0044385, total time[s] 0.101052 +Converged at iteration 23, L1 7.34996e-05, Linf 0.00375503, total time[s] 0.074419 +Converged at iteration 23, L1 9.55942e-05, Linf 0.00468508, total time[s] 0.064483 +Converged at iteration 26, L1 6.86193e-05, Linf 0.00497417, total time[s] 0.072041 +Converged at iteration 29, L1 7.11393e-05, Linf 0.0048352, total time[s] 0.108946 +Converged at iteration 32, L1 6.96053e-05, Linf 0.00328946, total time[s] 0.093671 +Converged at iteration 30, L1 9.1026e-05, Linf 0.00332906, total time[s] 0.085404 +Converged at iteration 29, L1 7.88869e-05, Linf 0.00295435, total time[s] 0.098208 +Converged at iteration 32, L1 7.38634e-05, Linf 0.00331624, total time[s] 0.086084 +Converged at iteration 35, L1 7.75417e-05, Linf 0.00386429, total time[s] 0.102319 +Converged at iteration 33, L1 7.97491e-05, Linf 0.00504114, total time[s] 0.10607 +Converged at iteration 28, L1 8.23553e-05, Linf 0.00395249, total time[s] 0.073853 +Converged at iteration 24, L1 7.87998e-05, Linf 0.00246105, total time[s] 0.098622 +Converged at iteration 26, L1 7.98697e-05, Linf 0.00408265, total time[s] 0.080888 +Converged at iteration 39, L1 9.98354e-05, Linf 0.00482755, total time[s] 0.115377 +Converged at iteration 35, L1 9.58508e-05, Linf 0.00384384, total time[s] 0.10263 +Converged at iteration 30, L1 7.59865e-05, Linf 0.00418092, total time[s] 0.086862 +Converged at iteration 31, L1 6.19011e-05, Linf 0.00506111, total time[s] 0.101202 +Converged at iteration 26, L1 9.14221e-05, Linf 0.00569445, total time[s] 0.080662 +Converged at iteration 21, L1 9.67632e-05, Linf 0.00463173, total time[s] 0.066109 +Converged at iteration 21, L1 6.85306e-05, Linf 0.00392342, total time[s] 0.072108 +Converged at iteration 24, L1 8.2102e-05, Linf 0.00518506, total time[s] 0.081291 +Converged at iteration 28, L1 6.79725e-05, Linf 0.00440324, total time[s] 0.106973 +Converged at iteration 26, L1 8.24348e-05, Linf 0.00438094, total time[s] 0.074292 +Converged at iteration 21, L1 8.89936e-05, Linf 0.00434157, total time[s] 0.069071 +Converged at iteration 18, L1 7.58742e-05, Linf 0.00304013, total time[s] 0.050266 +Converged at iteration 31, L1 7.43945e-05, Linf 0.00267729, total time[s] 0.108098 +Converged at iteration 20, L1 8.23712e-05, Linf 0.00493751, total time[s] 0.065353 +Converged at iteration 24, L1 6.98429e-05, Linf 0.0049861, total time[s] 0.066868 +Converged at iteration 30, L1 9.93862e-05, Linf 0.00357137, total time[s] 0.080365 +Converged at iteration 25, L1 9.9713e-05, Linf 0.00470156, total time[s] 0.078635 +Converged at iteration 23, L1 9.02136e-05, Linf 0.00396996, total time[s] 0.065608 +Converged at iteration 23, L1 9.47125e-05, Linf 0.00465225, total time[s] 0.075152 +Converged at iteration 26, L1 6.94e-05, Linf 0.00491676, total time[s] 0.074978 +Converged at iteration 29, L1 7.26174e-05, Linf 0.00494195, total time[s] 0.104501 +Converged at iteration 32, L1 9.41724e-05, Linf 0.00357867, total time[s] 0.097027 +Converged at iteration 31, L1 7.50269e-05, Linf 0.00310767, total time[s] 0.103034 +Converged at iteration 29, L1 7.70835e-05, Linf 0.00289882, total time[s] 0.092626 +Converged at iteration 32, L1 7.54818e-05, Linf 0.00337877, total time[s] 0.088067 +Converged at iteration 35, L1 9.7683e-05, Linf 0.00405485, total time[s] 0.100593 +Converged at iteration 33, L1 8.06078e-05, Linf 0.00499463, total time[s] 0.106535 +Converged at iteration 28, L1 8.46317e-05, Linf 0.00404173, total time[s] 0.075165 +Converged at iteration 24, L1 7.83988e-05, Linf 0.00256877, total time[s] 0.066563 +Converged at iteration 26, L1 8.28135e-05, Linf 0.00404089, total time[s] 0.069066 +Converged at iteration 39, L1 9.83644e-05, Linf 0.00506134, total time[s] 0.103369 +Converged at iteration 36, L1 6.78959e-05, Linf 0.00338639, total time[s] 0.093848 +Converged at iteration 29, L1 6.97438e-05, Linf 0.00489692, total time[s] 0.077042 +Converged at iteration 31, L1 6.09953e-05, Linf 0.00506478, total time[s] 0.092064 +Converged at iteration 26, L1 8.66951e-05, Linf 0.00563037, total time[s] 0.080822 +Converged at iteration 21, L1 8.84864e-05, Linf 0.00441773, total time[s] 0.063027 +Converged at iteration 21, L1 6.08022e-05, Linf 0.00406652, total time[s] 0.06254 +Converged at iteration 24, L1 5.92049e-05, Linf 0.00529135, total time[s] 0.094259 +Converged at iteration 27, L1 9.70667e-05, Linf 0.00549917, total time[s] 0.07385 +Converged at iteration 26, L1 6.74875e-05, Linf 0.00368779, total time[s] 0.08401 +Converged at iteration 21, L1 6.58281e-05, Linf 0.00428453, total time[s] 0.064446 +Converged at iteration 18, L1 5.95818e-05, Linf 0.00278035, total time[s] 0.064295 +Converged at iteration 31, L1 8.01292e-05, Linf 0.00272824, total time[s] 0.143679 +Converged at iteration 20, L1 8.06024e-05, Linf 0.00507784, total time[s] 0.063136 +Converged at iteration 24, L1 6.79237e-05, Linf 0.00516809, total time[s] 0.112766 +Converged at iteration 29, L1 9.70752e-05, Linf 0.00351173, total time[s] 0.15431 +Converged at iteration 24, L1 9.8997e-05, Linf 0.00550622, total time[s] 0.068948 +Converged at iteration 22, L1 9.60177e-05, Linf 0.00431342, total time[s] 0.077388 +Converged at iteration 24, L1 6.98002e-05, Linf 0.00273967, total time[s] 0.102974 +Converged at iteration 26, L1 6.79387e-05, Linf 0.00486716, total time[s] 0.085957 +Converged at iteration 29, L1 6.96544e-05, Linf 0.00470864, total time[s] 0.108521 +Converged at iteration 31, L1 8.33317e-05, Linf 0.00383676, total time[s] 0.106846 +Converged at iteration 30, L1 7.62184e-05, Linf 0.00308325, total time[s] 0.175901 +Converged at iteration 29, L1 8.12123e-05, Linf 0.00300841, total time[s] 0.108157 +Converged at iteration 31, L1 9.80337e-05, Linf 0.00391561, total time[s] 0.126876 +Converged at iteration 34, L1 8.59338e-05, Linf 0.00439671, total time[s] 0.154097 +Converged at iteration 33, L1 7.86678e-05, Linf 0.00503659, total time[s] 0.167074 +Converged at iteration 28, L1 8.06704e-05, Linf 0.00391085, total time[s] 0.095825 +Converged at iteration 24, L1 8.06087e-05, Linf 0.00235245, total time[s] 0.140559 +Converged at iteration 26, L1 7.24531e-05, Linf 0.00402953, total time[s] 0.091502 +Converged at iteration 40, L1 6.6958e-05, Linf 0.00421415, total time[s] 0.173 +Converged at iteration 35, L1 9.87051e-05, Linf 0.00392698, total time[s] 0.154709 +Converged at iteration 29, L1 9.22402e-05, Linf 0.00502759, total time[s] 0.11428 +Converged at iteration 31, L1 6.20183e-05, Linf 0.00503892, total time[s] 0.128414 +Converged at iteration 26, L1 8.92947e-05, Linf 0.00566349, total time[s] 0.151488 +Converged at iteration 21, L1 9.23307e-05, Linf 0.00452686, total time[s] 0.086484 +Converged at iteration 21, L1 6.54502e-05, Linf 0.0040163, total time[s] 0.114524 +Converged at iteration 24, L1 7.16475e-05, Linf 0.0052575, total time[s] 0.073791 +Converged at iteration 28, L1 6.43825e-05, Linf 0.00439742, total time[s] 0.093984 +Converged at iteration 26, L1 7.7334e-05, Linf 0.00408896, total time[s] 0.087605 +Converged at iteration 21, L1 7.59441e-05, Linf 0.00431476, total time[s] 0.058025 +Converged at iteration 18, L1 6.71263e-05, Linf 0.0028284, total time[s] 0.051039 +Converged at iteration 31, L1 7.73845e-05, Linf 0.00268882, total time[s] 0.099178 +Converged at iteration 20, L1 8.17426e-05, Linf 0.00501468, total time[s] 0.067469 +Converged at iteration 24, L1 6.84733e-05, Linf 0.0050747, total time[s] 0.091259 +Converged at iteration 30, L1 8.15447e-05, Linf 0.00322555, total time[s] 0.102394 +Converged at iteration 25, L1 7.73317e-05, Linf 0.00443976, total time[s] 0.082904 +Converged at iteration 23, L1 7.371e-05, Linf 0.00376488, total time[s] 0.091278 +Converged at iteration 23, L1 9.55435e-05, Linf 0.00460319, total time[s] 0.074729 +Converged at iteration 26, L1 6.86386e-05, Linf 0.00497429, total time[s] 0.093789 +Converged at iteration 29, L1 7.07292e-05, Linf 0.00483523, total time[s] 0.086322 +Converged at iteration 32, L1 6.98163e-05, Linf 0.00330758, total time[s] 0.109232 +Converged at iteration 30, L1 9.11413e-05, Linf 0.00333027, total time[s] 0.087542 +Converged at iteration 29, L1 7.88905e-05, Linf 0.00295393, total time[s] 0.097383 +Converged at iteration 32, L1 7.33889e-05, Linf 0.00331331, total time[s] 0.110304 +Converged at iteration 35, L1 7.70518e-05, Linf 0.00386203, total time[s] 0.096562 +Converged at iteration 33, L1 7.96309e-05, Linf 0.00498893, total time[s] 0.086908 +Converged at iteration 28, L1 8.27956e-05, Linf 0.0039525, total time[s] 0.10351 +Converged at iteration 24, L1 7.89551e-05, Linf 0.00246038, total time[s] 0.081521 +Converged at iteration 26, L1 7.98791e-05, Linf 0.00407561, total time[s] 0.085079 +Converged at iteration 39, L1 9.73233e-05, Linf 0.00515273, total time[s] 0.124564 +Converged at iteration 36, L1 6.90857e-05, Linf 0.00357906, total time[s] 0.113094 +Converged at iteration 28, L1 8.71847e-05, Linf 0.00580297, total time[s] 0.0956 +Converged at iteration 31, L1 6.10731e-05, Linf 0.0050421, total time[s] 0.089073 +Converged at iteration 26, L1 8.44685e-05, Linf 0.00559451, total time[s] 0.06894 +Converged at iteration 21, L1 8.51493e-05, Linf 0.0043052, total time[s] 0.062578 +Converged at iteration 20, L1 9.64352e-05, Linf 0.00533474, total time[s] 0.054575 +Converged at iteration 23, L1 8.33399e-05, Linf 0.00644655, total time[s] 0.067815 +Converged at iteration 27, L1 8.75072e-05, Linf 0.00548377, total time[s] 0.097758 +Converged at iteration 26, L1 5.98695e-05, Linf 0.00340387, total time[s] 0.087968 +Converged at iteration 21, L1 5.87419e-05, Linf 0.00427594, total time[s] 0.070557 +Converged at iteration 18, L1 5.33572e-05, Linf 0.00273244, total time[s] 0.05301 +Converged at iteration 31, L1 8.24434e-05, Linf 0.00271971, total time[s] 0.089596 +Converged at iteration 20, L1 7.7339e-05, Linf 0.00515731, total time[s] 0.057025 +Converged at iteration 24, L1 6.70844e-05, Linf 0.0052749, total time[s] 0.065314 +Converged at iteration 29, L1 8.40587e-05, Linf 0.00325986, total time[s] 0.086415 +Converged at iteration 24, L1 8.5214e-05, Linf 0.0054252, total time[s] 0.098892 +Converged at iteration 22, L1 8.47062e-05, Linf 0.00416898, total time[s] 0.080605 +Converged at iteration 23, L1 9.45307e-05, Linf 0.00459621, total time[s] 0.068745 +Converged at iteration 26, L1 6.73413e-05, Linf 0.00484185, total time[s] 0.096592 +Converged at iteration 29, L1 6.88948e-05, Linf 0.00453013, total time[s] 0.086079 +Converged at iteration 31, L1 6.92047e-05, Linf 0.00368598, total time[s] 0.111964 +Converged at iteration 29, L1 9.45823e-05, Linf 0.00336311, total time[s] 0.075963 +Converged at iteration 29, L1 8.32765e-05, Linf 0.0030608, total time[s] 0.093918 +Converged at iteration 31, L1 9.13909e-05, Linf 0.00373929, total time[s] 0.128884 +Converged at iteration 33, L1 9.79683e-05, Linf 0.00491424, total time[s] 0.121854 +Converged at iteration 33, L1 7.7787e-05, Linf 0.00514692, total time[s] 0.120913 +Converged at iteration 28, L1 7.84628e-05, Linf 0.00382912, total time[s] 0.101273 +Converged at iteration 24, L1 8.30721e-05, Linf 0.0022458, total time[s] 0.071797 +Converged at iteration 25, L1 9.97792e-05, Linf 0.00487916, total time[s] 0.076667 +Converged at iteration 40, L1 6.41555e-05, Linf 0.00432013, total time[s] 0.127816 +Converged at iteration 36, L1 6.79591e-05, Linf 0.00339204, total time[s] 0.104166 +Converged at iteration 29, L1 6.96577e-05, Linf 0.00490021, total time[s] 0.087948 +Converged at iteration 31, L1 6.11347e-05, Linf 0.00506471, total time[s] 0.095938 +Converged at iteration 26, L1 8.66831e-05, Linf 0.00563004, total time[s] 0.074424 +Converged at iteration 21, L1 8.84916e-05, Linf 0.00441678, total time[s] 0.085985 +Converged at iteration 21, L1 6.07406e-05, Linf 0.00406539, total time[s] 0.067154 +Converged at iteration 24, L1 5.98431e-05, Linf 0.0052744, total time[s] 0.066838 +Converged at iteration 27, L1 9.70204e-05, Linf 0.00550276, total time[s] 0.084521 +Converged at iteration 26, L1 6.76209e-05, Linf 0.00367522, total time[s] 0.106331 +Converged at iteration 21, L1 6.59172e-05, Linf 0.00426436, total time[s] 0.069548 +Converged at iteration 18, L1 5.96001e-05, Linf 0.00278069, total time[s] 0.063136 +Converged at iteration 31, L1 8.00254e-05, Linf 0.00270142, total time[s] 0.091811 +Converged at iteration 20, L1 7.99644e-05, Linf 0.0050815, total time[s] 0.054929 +Converged at iteration 24, L1 6.80528e-05, Linf 0.00517209, total time[s] 0.084772 +Converged at iteration 29, L1 9.72017e-05, Linf 0.00351532, total time[s] 0.103004 +Converged at iteration 24, L1 9.92329e-05, Linf 0.00550552, total time[s] 0.078291 +Converged at iteration 22, L1 9.62942e-05, Linf 0.00432271, total time[s] 0.077438 +Converged at iteration 23, L1 9.59484e-05, Linf 0.004618, total time[s] 0.064918 +Converged at iteration 26, L1 6.78516e-05, Linf 0.00500055, total time[s] 0.069257 +Converged at iteration 29, L1 6.96499e-05, Linf 0.00470821, total time[s] 0.082605 +Converged at iteration 31, L1 8.35523e-05, Linf 0.00387418, total time[s] 0.099866 +Converged at iteration 30, L1 7.63578e-05, Linf 0.00308525, total time[s] 0.08748 +Converged at iteration 29, L1 8.08879e-05, Linf 0.00300728, total time[s] 0.08992 +Converged at iteration 31, L1 9.79353e-05, Linf 0.00392398, total time[s] 0.088619 +Converged at iteration 34, L1 8.5742e-05, Linf 0.00439267, total time[s] 0.086047 +Converged at iteration 33, L1 7.86133e-05, Linf 0.00508832, total time[s] 0.084007 +Converged at iteration 28, L1 8.01743e-05, Linf 0.00391055, total time[s] 0.080942 +Converged at iteration 24, L1 8.04062e-05, Linf 0.00235193, total time[s] 0.063443 +Converged at iteration 26, L1 7.19253e-05, Linf 0.00402928, total time[s] 0.091055 +Converged at iteration 39, L1 9.6172e-05, Linf 0.00530567, total time[s] 0.107218 +Converged at iteration 36, L1 7.03797e-05, Linf 0.00357442, total time[s] 0.101942 +Converged at iteration 28, L1 6.46302e-05, Linf 0.00550733, total time[s] 0.077292 +Converged at iteration 31, L1 6.08016e-05, Linf 0.00506921, total time[s] 0.085047 +Converged at iteration 26, L1 8.22304e-05, Linf 0.00555693, total time[s] 0.103428 +Converged at iteration 21, L1 8.19788e-05, Linf 0.00418355, total time[s] 0.056824 +Converged at iteration 20, L1 8.87492e-05, Linf 0.00537856, total time[s] 0.071416 +Converged at iteration 23, L1 6.69589e-05, Linf 0.00641975, total time[s] 0.061942 +Converged at iteration 27, L1 7.7806e-05, Linf 0.00544636, total time[s] 0.092925 +Converged at iteration 25, L1 9.49267e-05, Linf 0.00419283, total time[s] 0.070226 +Converged at iteration 21, L1 5.37588e-05, Linf 0.00421917, total time[s] 0.071238 +Converged at iteration 17, L1 9.89144e-05, Linf 0.00423375, total time[s] 0.046407 +Converged at iteration 31, L1 8.51181e-05, Linf 0.00272745, total time[s] 0.108027 +Converged at iteration 20, L1 7.4105e-05, Linf 0.00512776, total time[s] 0.057877 +Converged at iteration 24, L1 6.62574e-05, Linf 0.00537637, total time[s] 0.069458 +Converged at iteration 29, L1 7.36633e-05, Linf 0.00303115, total time[s] 0.084979 +Converged at iteration 24, L1 7.57365e-05, Linf 0.00536325, total time[s] 0.070236 +Converged at iteration 22, L1 7.42344e-05, Linf 0.00402881, total time[s] 0.06949 +Converged at iteration 23, L1 9.09654e-05, Linf 0.0045366, total time[s] 0.070426 +Converged at iteration 26, L1 6.65882e-05, Linf 0.00489863, total time[s] 0.07644 +Converged at iteration 29, L1 6.75844e-05, Linf 0.00443976, total time[s] 0.129486 +Converged at iteration 30, L1 9.5941e-05, Linf 0.00464461, total time[s] 0.093558 +Converged at iteration 29, L1 8.22133e-05, Linf 0.0032149, total time[s] 0.081794 +Converged at iteration 29, L1 8.56679e-05, Linf 0.003131, total time[s] 0.112009 +Converged at iteration 31, L1 8.53327e-05, Linf 0.00347789, total time[s] 0.104231 +Converged at iteration 33, L1 7.23233e-05, Linf 0.00422644, total time[s] 0.106822 +Converged at iteration 33, L1 7.69642e-05, Linf 0.00525066, total time[s] 0.091706 +Converged at iteration 28, L1 7.63831e-05, Linf 0.0038242, total time[s] 0.080407 +Converged at iteration 24, L1 8.61221e-05, Linf 0.00213551, total time[s] 0.071196 +Converged at iteration 25, L1 8.88006e-05, Linf 0.00473874, total time[s] 0.081759 +Converged at iteration 39, L1 9.94847e-05, Linf 0.00515148, total time[s] 0.114714 +Converged at iteration 36, L1 7.04473e-05, Linf 0.00347768, total time[s] 0.100144 +Converged at iteration 28, L1 8.7071e-05, Linf 0.00586007, total time[s] 0.102182 +Converged at iteration 31, L1 6.16547e-05, Linf 0.00506656, total time[s] 0.095806 +Converged at iteration 26, L1 8.46162e-05, Linf 0.0056021, total time[s] 0.074648 +Converged at iteration 21, L1 8.54985e-05, Linf 0.0043022, total time[s] 0.108158 +Converged at iteration 20, L1 9.66946e-05, Linf 0.00534859, total time[s] 0.092418 +Converged at iteration 23, L1 8.33093e-05, Linf 0.00644098, total time[s] 0.079048 +Converged at iteration 27, L1 8.75584e-05, Linf 0.00548948, total time[s] 0.086197 +Converged at iteration 26, L1 6.01562e-05, Linf 0.00339269, total time[s] 0.121904 +Converged at iteration 21, L1 5.87976e-05, Linf 0.00427591, total time[s] 0.329885 +Converged at iteration 18, L1 5.33664e-05, Linf 0.00273264, total time[s] 0.077557 +Converged at iteration 31, L1 8.28903e-05, Linf 0.00272029, total time[s] 0.122454 +Converged at iteration 20, L1 7.83102e-05, Linf 0.00515784, total time[s] 0.062337 +Converged at iteration 24, L1 6.67172e-05, Linf 0.00495879, total time[s] 0.072029 +Converged at iteration 29, L1 8.45624e-05, Linf 0.00326049, total time[s] 0.132797 +Converged at iteration 24, L1 8.52854e-05, Linf 0.0054111, total time[s] 0.073257 +Converged at iteration 22, L1 8.49005e-05, Linf 0.00476312, total time[s] 0.061986 +Converged at iteration 23, L1 9.48398e-05, Linf 0.00468544, total time[s] 0.063018 +Converged at iteration 26, L1 6.80529e-05, Linf 0.00497984, total time[s] 0.073327 +Converged at iteration 29, L1 6.86721e-05, Linf 0.00453024, total time[s] 0.094343 +Converged at iteration 31, L1 7.20807e-05, Linf 0.00368591, total time[s] 0.095685 +Converged at iteration 29, L1 9.47138e-05, Linf 0.00338816, total time[s] 0.098662 +Converged at iteration 29, L1 8.29403e-05, Linf 0.00306067, total time[s] 0.092786 +Converged at iteration 31, L1 9.11118e-05, Linf 0.00372363, total time[s] 0.089269 +Converged at iteration 33, L1 9.67601e-05, Linf 0.00491213, total time[s] 0.08876 +Converged at iteration 33, L1 7.75479e-05, Linf 0.00513433, total time[s] 0.100415 +Converged at iteration 28, L1 7.80012e-05, Linf 0.00386813, total time[s] 0.100286 +Converged at iteration 24, L1 8.28634e-05, Linf 0.00224341, total time[s] 0.066182 +Converged at iteration 25, L1 9.91842e-05, Linf 0.00488217, total time[s] 0.080232 +Converged at iteration 39, L1 9.5354e-05, Linf 0.00533048, total time[s] 0.123514 +Converged at iteration 36, L1 7.09395e-05, Linf 0.00367436, total time[s] 0.155194 +Converged at iteration 27, L1 8.73049e-05, Linf 0.0064213, total time[s] 0.08833 +Converged at iteration 31, L1 6.09442e-05, Linf 0.00507198, total time[s] 0.088378 +Converged at iteration 26, L1 7.98382e-05, Linf 0.00551706, total time[s] 0.088032 +Converged at iteration 21, L1 7.90091e-05, Linf 0.00405696, total time[s] 0.070168 +Converged at iteration 20, L1 8.18765e-05, Linf 0.00534041, total time[s] 0.056552 +Converged at iteration 23, L1 5.3223e-05, Linf 0.00622585, total time[s] 0.069204 +Converged at iteration 27, L1 6.8258e-05, Linf 0.00536862, total time[s] 0.08444 +Converged at iteration 25, L1 8.79486e-05, Linf 0.0041625, total time[s] 0.076926 +Converged at iteration 21, L1 4.95914e-05, Linf 0.00420295, total time[s] 0.080202 +Converged at iteration 17, L1 9.31259e-05, Linf 0.0041549, total time[s] 0.048888 +Converged at iteration 31, L1 8.75003e-05, Linf 0.00276953, total time[s] 0.094194 +Converged at iteration 20, L1 7.11697e-05, Linf 0.00530554, total time[s] 0.05624 +Converged at iteration 24, L1 6.51673e-05, Linf 0.00546377, total time[s] 0.090647 +Converged at iteration 28, L1 9.70767e-05, Linf 0.00376873, total time[s] 0.086645 +Converged at iteration 24, L1 6.83489e-05, Linf 0.0053271, total time[s] 0.087491 +Converged at iteration 22, L1 6.79117e-05, Linf 0.00388145, total time[s] 0.080958 +Converged at iteration 23, L1 8.74505e-05, Linf 0.00444367, total time[s] 0.073252 +Converged at iteration 26, L1 6.59104e-05, Linf 0.00476007, total time[s] 0.093256 +Converged at iteration 29, L1 6.73597e-05, Linf 0.00410435, total time[s] 0.090588 +Converged at iteration 30, L1 8.71013e-05, Linf 0.00458582, total time[s] 0.106747 +Converged at iteration 29, L1 7.27341e-05, Linf 0.00306574, total time[s] 0.087377 +Converged at iteration 30, L1 9.54592e-05, Linf 0.000492012, total time[s] 0.09036 +Converged at iteration 31, L1 7.90647e-05, Linf 0.00321501, total time[s] 0.099067 +Converged at iteration 32, L1 8.6606e-05, Linf 0.00464608, total time[s] 0.115252 +Converged at iteration 33, L1 7.5781e-05, Linf 0.00522753, total time[s] 0.125737 +Converged at iteration 28, L1 7.44169e-05, Linf 0.00388736, total time[s] 0.166672 +Converged at iteration 24, L1 8.93883e-05, Linf 0.00202638, total time[s] 0.171059 +Converged at iteration 25, L1 7.99582e-05, Linf 0.00454208, total time[s] 0.300312 +Converged at iteration 39, L1 9.26198e-05, Linf 0.00568202, total time[s] 0.143092 +Converged at iteration 36, L1 7.30728e-05, Linf 0.00406291, total time[s] 0.134137 +Converged at iteration 26, L1 6.52014e-05, Linf 0.00607866, total time[s] 0.096975 +Converged at iteration 31, L1 6.03465e-05, Linf 0.00506365, total time[s] 0.088492 +Converged at iteration 26, L1 7.0515e-05, Linf 0.00534133, total time[s] 0.107205 +Converged at iteration 21, L1 6.74274e-05, Linf 0.00352548, total time[s] 0.115883 +Converged at iteration 20, L1 5.95974e-05, Linf 0.0047938, total time[s] 0.122032 +Converged at iteration 22, L1 5.17108e-05, Linf 0.00778675, total time[s] 0.071042 +Converged at iteration 26, L1 6.92129e-05, Linf 0.00592017, total time[s] 0.119753 +Converged at iteration 25, L1 6.77514e-05, Linf 0.0040396, total time[s] 0.122082 +Converged at iteration 20, L1 8.22742e-05, Linf 0.00548574, total time[s] 0.085309 +Converged at iteration 17, L1 7.76286e-05, Linf 0.00350592, total time[s] 0.083247 +Converged at iteration 31, L1 9.61391e-05, Linf 0.00275959, total time[s] 0.103595 +Converged at iteration 20, L1 6.4146e-05, Linf 0.00543411, total time[s] 0.065745 +Converged at iteration 23, L1 9.94291e-05, Linf 0.00640324, total time[s] 0.081016 +Converged at iteration 28, L1 6.64826e-05, Linf 0.00321521, total time[s] 0.088608 +Converged at iteration 23, L1 8.94376e-05, Linf 0.00689625, total time[s] 0.070345 +Converged at iteration 21, L1 8.62261e-05, Linf 0.00454534, total time[s] 0.074704 +Converged at iteration 23, L1 7.92171e-05, Linf 0.00388924, total time[s] 0.112263 +Converged at iteration 25, L1 9.92174e-05, Linf 0.00633234, total time[s] 0.114197 +Converged at iteration 28, L1 9.63161e-05, Linf 0.00556191, total time[s] 0.095442 +Converged at iteration 30, L1 6.87006e-05, Linf 0.00462279, total time[s] 0.106107 +Converged at iteration 28, L1 8.2623e-05, Linf 0.00336113, total time[s] 0.086063 +Converged at iteration 29, L1 8.72467e-05, Linf 0.00340969, total time[s] 0.083394 +Converged at iteration 30, L1 9.10865e-05, Linf 0.00306281, total time[s] 0.143977 +Converged at iteration 30, L1 9.97315e-05, Linf 0.00349731, total time[s] 0.153725 +Converged at iteration 33, L1 7.12781e-05, Linf 0.00541236, total time[s] 0.166855 +Converged at iteration 28, L1 6.50093e-05, Linf 0.0036132, total time[s] 0.084238 +Converged at iteration 24, L1 9.68038e-05, Linf 0.00193838, total time[s] 0.108976 +Converged at iteration 24, L1 9.10966e-05, Linf 0.0047894, total time[s] 0.074394 +Converged at iteration 39, L1 9.23266e-05, Linf 0.00552265, total time[s] 0.113279 +Converged at iteration 36, L1 7.24623e-05, Linf 0.00388539, total time[s] 0.111071 +Converged at iteration 26, L1 9.95308e-05, Linf 0.00727326, total time[s] 0.081132 +Converged at iteration 31, L1 6.06382e-05, Linf 0.00507605, total time[s] 0.093536 +Converged at iteration 26, L1 7.51388e-05, Linf 0.00543478, total time[s] 0.071295 +Converged at iteration 21, L1 7.23213e-05, Linf 0.0037818, total time[s] 0.076029 +Converged at iteration 20, L1 6.90843e-05, Linf 0.00513517, total time[s] 0.058831 +Converged at iteration 22, L1 7.30217e-05, Linf 0.00741924, total time[s] 0.077053 +Converged at iteration 26, L1 9.0752e-05, Linf 0.00639644, total time[s] 0.079111 +Converged at iteration 25, L1 7.63834e-05, Linf 0.00410605, total time[s] 0.076294 +Converged at iteration 20, L1 9.02693e-05, Linf 0.00555981, total time[s] 0.0562 +Converged at iteration 17, L1 8.4114e-05, Linf 0.00387382, total time[s] 0.053372 +Converged at iteration 31, L1 9.1773e-05, Linf 0.00276295, total time[s] 0.099241 +Converged at iteration 20, L1 6.69217e-05, Linf 0.00541693, total time[s] 0.079022 +Converged at iteration 24, L1 6.24923e-05, Linf 0.00554806, total time[s] 0.08626 +Converged at iteration 28, L1 7.88703e-05, Linf 0.00348066, total time[s] 0.092952 +Converged at iteration 23, L1 9.90997e-05, Linf 0.00687185, total time[s] 0.075231 +Converged at iteration 21, L1 9.63191e-05, Linf 0.00467508, total time[s] 0.124673 +Converged at iteration 23, L1 8.24546e-05, Linf 0.0041849, total time[s] 0.06377 +Converged at iteration 26, L1 6.46364e-05, Linf 0.00436839, total time[s] 0.075222 +Converged at iteration 29, L1 6.48055e-05, Linf 0.00381229, total time[s] 0.093008 +Converged at iteration 30, L1 7.59719e-05, Linf 0.00461044, total time[s] 0.09736 +Converged at iteration 28, L1 9.32537e-05, Linf 0.00352821, total time[s] 0.073481 +Converged at iteration 29, L1 8.9282e-05, Linf 0.00329567, total time[s] 0.133462 +Converged at iteration 31, L1 6.89733e-05, Linf 0.00277633, total time[s] 0.105597 +Converged at iteration 31, L1 8.73108e-05, Linf 0.00412964, total time[s] 0.108858 +Converged at iteration 33, L1 7.34706e-05, Linf 0.0053893, total time[s] 0.125744 +Converged at iteration 28, L1 6.98466e-05, Linf 0.0036768, total time[s] 0.14862 +Converged at iteration 24, L1 9.41905e-05, Linf 0.00178928, total time[s] 0.092138 +Converged at iteration 25, L1 6.50548e-05, Linf 0.00405359, total time[s] 0.123442 +Converged at iteration 39, L1 9.60853e-05, Linf 0.00542773, total time[s] 0.160577 +Converged at iteration 36, L1 7.20838e-05, Linf 0.00378032, total time[s] 0.134891 +Converged at iteration 27, L1 6.54268e-05, Linf 0.00599703, total time[s] 0.116798 +Converged at iteration 31, L1 6.04202e-05, Linf 0.00509332, total time[s] 0.172209 +Converged at iteration 26, L1 7.77971e-05, Linf 0.00554052, total time[s] 0.116981 +Converged at iteration 21, L1 7.6378e-05, Linf 0.00392145, total time[s] 0.102533 +Converged at iteration 20, L1 7.49154e-05, Linf 0.00524267, total time[s] 0.052612 +Converged at iteration 22, L1 8.8009e-05, Linf 0.0078331, total time[s] 0.122641 +Converged at iteration 27, L1 5.89663e-05, Linf 0.00523576, total time[s] 0.131504 +Converged at iteration 25, L1 8.18523e-05, Linf 0.00413182, total time[s] 0.090425 +Converged at iteration 20, L1 9.48249e-05, Linf 0.00557664, total time[s] 0.060824 +Converged at iteration 17, L1 8.83211e-05, Linf 0.00403074, total time[s] 0.05624 +Converged at iteration 31, L1 8.97806e-05, Linf 0.00275174, total time[s] 0.11399 +Converged at iteration 20, L1 6.93935e-05, Linf 0.00536962, total time[s] 0.057426 +Converged at iteration 24, L1 6.50938e-05, Linf 0.00609064, total time[s] 0.108395 +Converged at iteration 28, L1 8.73491e-05, Linf 0.00362105, total time[s] 0.082553 +Converged at iteration 24, L1 6.22014e-05, Linf 0.00529059, total time[s] 0.087644 +Converged at iteration 22, L1 6.43757e-05, Linf 0.00469137, total time[s] 0.108441 +Converged at iteration 23, L1 8.48388e-05, Linf 0.00433104, total time[s] 0.110883 +Converged at iteration 26, L1 6.51944e-05, Linf 0.00457769, total time[s] 0.123226 +Converged at iteration 29, L1 6.59197e-05, Linf 0.00393093, total time[s] 0.152403 +Converged at iteration 30, L1 8.03976e-05, Linf 0.00460604, total time[s] 0.278393 +Converged at iteration 29, L1 6.56607e-05, Linf 0.00293445, total time[s] 0.172096 +Converged at iteration 29, L1 8.89636e-05, Linf 0.00323275, total time[s] 0.109173 +Converged at iteration 31, L1 7.33923e-05, Linf 0.00298915, total time[s] 0.098199 +Converged at iteration 32, L1 6.75135e-05, Linf 0.003761, total time[s] 0.087265 +Converged at iteration 33, L1 7.44281e-05, Linf 0.00527438, total time[s] 0.103642 +Converged at iteration 28, L1 7.13571e-05, Linf 0.00373021, total time[s] 0.117219 +Converged at iteration 24, L1 9.29883e-05, Linf 0.00191001, total time[s] 0.097865 +Converged at iteration 25, L1 7.15377e-05, Linf 0.00432422, total time[s] 0.085395 +Converged at iteration 39, L1 9.54079e-05, Linf 0.00537808, total time[s] 0.119956 +Converged at iteration 36, L1 7.13169e-05, Linf 0.00373269, total time[s] 0.127623 +Converged at iteration 27, L1 7.55874e-05, Linf 0.00623548, total time[s] 0.103617 +Converged at iteration 31, L1 6.06725e-05, Linf 0.00504839, total time[s] 0.14047 +Converged at iteration 26, L1 7.88958e-05, Linf 0.00544088, total time[s] 0.093063 +Converged at iteration 21, L1 7.75133e-05, Linf 0.00399058, total time[s] 0.061394 +Converged at iteration 20, L1 7.82771e-05, Linf 0.00530329, total time[s] 0.065126 +Converged at iteration 22, L1 9.58052e-05, Linf 0.00777379, total time[s] 0.087871 +Converged at iteration 27, L1 6.3472e-05, Linf 0.00530366, total time[s] 0.098154 +Converged at iteration 25, L1 8.52281e-05, Linf 0.00412727, total time[s] 0.088622 +Converged at iteration 20, L1 9.75054e-05, Linf 0.00557908, total time[s] 0.064513 +Converged at iteration 17, L1 9.06769e-05, Linf 0.00409804, total time[s] 0.049117 +Converged at iteration 31, L1 8.83388e-05, Linf 0.00277253, total time[s] 0.085502 +Converged at iteration 20, L1 6.9887e-05, Linf 0.00533914, total time[s] 0.068029 +Converged at iteration 24, L1 6.4686e-05, Linf 0.00550368, total time[s] 0.100803 +Converged at iteration 28, L1 9.21419e-05, Linf 0.00372581, total time[s] 0.085846 +Converged at iteration 24, L1 6.50259e-05, Linf 0.00530677, total time[s] 0.070215 +Converged at iteration 22, L1 6.50931e-05, Linf 0.00384467, total time[s] 0.085746 +Converged at iteration 23, L1 8.61298e-05, Linf 0.00438585, total time[s] 0.062218 +Converged at iteration 26, L1 6.5548e-05, Linf 0.00467338, total time[s] 0.068725 +Converged at iteration 29, L1 6.6154e-05, Linf 0.00416062, total time[s] 0.076041 +Converged at iteration 30, L1 8.34671e-05, Linf 0.00461508, total time[s] 0.078923 +Converged at iteration 29, L1 6.89025e-05, Linf 0.00299756, total time[s] 0.096127 +Converged at iteration 29, L1 8.789e-05, Linf 0.00320228, total time[s] 0.076081 +Converged at iteration 31, L1 7.61287e-05, Linf 0.00309947, total time[s] 0.081565 +Converged at iteration 32, L1 7.60103e-05, Linf 0.00421492, total time[s] 0.085187 +Converged at iteration 40, L1 6.7839e-05, Linf 0.00363846, total time[s] 0.116854 +Converged at iteration 35, L1 7.65766e-05, Linf 0.00339577, total time[s] 0.104521 +Converged at iteration 30, L1 9.66914e-05, Linf 0.00438527, total time[s] 0.082735 +Converged at iteration 31, L1 6.22604e-05, Linf 0.0050025, total time[s] 0.082463 +Converged at iteration 27, L1 6.26798e-05, Linf 0.00499535, total time[s] 0.083626 +Converged at iteration 22, L1 8.63469e-05, Linf 0.004488, total time[s] 0.104912 +Converged at iteration 20, L1 9.61377e-05, Linf 0.00395696, total time[s] 0.06152 +Converged at iteration 24, L1 8.84047e-05, Linf 0.00476336, total time[s] 0.075617 +Converged at iteration 28, L1 7.39039e-05, Linf 0.00445381, total time[s] 0.095402 +Converged at iteration 26, L1 8.11828e-05, Linf 0.00545398, total time[s] 0.079278 +Converged at iteration 22, L1 7.39267e-05, Linf 0.00508662, total time[s] 0.056713 +Converged at iteration 19, L1 6.63467e-05, Linf 0.00393098, total time[s] 0.058906 +Converged at iteration 30, L1 8.00048e-05, Linf 0.00329632, total time[s] 0.087612 +Converged at iteration 20, L1 8.44516e-05, Linf 0.00455032, total time[s] 0.102033 +Converged at iteration 24, L1 7.10869e-05, Linf 0.00463289, total time[s] 0.067919 +Converged at iteration 31, L1 8.95443e-05, Linf 0.00569146, total time[s] 0.102818 +Converged at iteration 27, L1 9.91697e-05, Linf 0.00569854, total time[s] 0.074873 +Converged at iteration 24, L1 8.79666e-05, Linf 0.0046505, total time[s] 0.081413 +Converged at iteration 23, L1 9.34847e-05, Linf 0.00616467, total time[s] 0.123297 +Converged at iteration 26, L1 7.22115e-05, Linf 0.00446142, total time[s] 0.080467 +Converged at iteration 29, L1 7.81342e-05, Linf 0.00479595, total time[s] 0.100834 +Converged at iteration 34, L1 7.09142e-05, Linf 0.00422732, total time[s] 0.168132 +Converged at iteration 30, L1 9.39289e-05, Linf 0.00442598, total time[s] 0.145804 +Converged at iteration 28, L1 9.49833e-05, Linf 0.00310979, total time[s] 0.090699 +Converged at iteration 32, L1 9.39433e-05, Linf 0.00374119, total time[s] 0.12795 +Converged at iteration 37, L1 7.39038e-05, Linf 0.00328085, total time[s] 0.146252 +Converged at iteration 33, L1 8.44941e-05, Linf 0.00469111, total time[s] 0.092654 +Converged at iteration 28, L1 9.66974e-05, Linf 0.00426154, total time[s] 0.098788 +Converged at iteration 24, L1 8.83221e-05, Linf 0.0032507, total time[s] 0.081606 +Converged at iteration 26, L1 8.98068e-05, Linf 0.00383972, total time[s] 0.086556 +Converged at iteration 40, L1 6.69953e-05, Linf 0.00379351, total time[s] 0.125025 +Converged at iteration 35, L1 8.29951e-05, Linf 0.00351908, total time[s] 0.110463 +Converged at iteration 30, L1 9.62038e-05, Linf 0.0042219, total time[s] 0.095077 +Converged at iteration 31, L1 6.1869e-05, Linf 0.0050382, total time[s] 0.094138 +Converged at iteration 27, L1 6.02361e-05, Linf 0.00494117, total time[s] 0.111731 +Converged at iteration 22, L1 7.71102e-05, Linf 0.00430667, total time[s] 0.07697 +Converged at iteration 21, L1 6.28138e-05, Linf 0.00336284, total time[s] 0.160889 +Converged at iteration 24, L1 9.04134e-05, Linf 0.00488808, total time[s] 0.069943 +Converged at iteration 28, L1 7.43848e-05, Linf 0.00444377, total time[s] 0.121002 +Converged at iteration 26, L1 8.06121e-05, Linf 0.00551257, total time[s] 0.111824 +Converged at iteration 22, L1 7.22129e-05, Linf 0.00483189, total time[s] 0.107948 +Converged at iteration 19, L1 5.91184e-05, Linf 0.00361611, total time[s] 0.066424 +Converged at iteration 20, L1 8.49751e-05, Linf 0.00114939, total time[s] 0.063842 +Converged at iteration 20, L1 8.53534e-05, Linf 0.0046527, total time[s] 0.059428 +Converged at iteration 24, L1 7.16168e-05, Linf 0.00468177, total time[s] 0.07741 +Converged at iteration 31, L1 9.50604e-05, Linf 0.01068, total time[s] 0.104522 +Converged at iteration 27, L1 9.89174e-05, Linf 0.00537714, total time[s] 0.077575 +Converged at iteration 24, L1 8.68919e-05, Linf 0.00451261, total time[s] 0.077819 +Converged at iteration 23, L1 9.25871e-05, Linf 0.00430957, total time[s] 0.109641 +Converged at iteration 26, L1 7.20435e-05, Linf 0.00456628, total time[s] 0.102107 +Converged at iteration 29, L1 7.63628e-05, Linf 0.00485516, total time[s] 0.101007 +Converged at iteration 34, L1 7.8586e-05, Linf 0.00434162, total time[s] 0.112864 +Converged at iteration 31, L1 6.91619e-05, Linf 0.00361747, total time[s] 0.093086 +Converged at iteration 28, L1 9.85044e-05, Linf 0.00321118, total time[s] 0.091824 +Converged at iteration 32, L1 8.58507e-05, Linf 0.00362206, total time[s] 0.114718 +Converged at iteration 36, L1 9.6296e-05, Linf 0.00371593, total time[s] 0.107951 +Converged at iteration 33, L1 8.39011e-05, Linf 0.00483854, total time[s] 0.092097 +Converged at iteration 28, L1 9.33857e-05, Linf 0.00420304, total time[s] 0.075393 +Converged at iteration 24, L1 8.21843e-05, Linf 0.00304609, total time[s] 0.081698 +Converged at iteration 26, L1 8.71964e-05, Linf 0.00391667, total time[s] 0.075797 +Converged at iteration 40, L1 6.71208e-05, Linf 0.00375265, total time[s] 0.122877 +Converged at iteration 35, L1 7.91683e-05, Linf 0.00345697, total time[s] 0.108017 +Converged at iteration 30, L1 9.70611e-05, Linf 0.00426873, total time[s] 0.085977 +Converged at iteration 31, L1 6.35129e-05, Linf 0.00714005, total time[s] 0.085527 +Converged at iteration 27, L1 6.1347e-05, Linf 0.0049695, total time[s] 0.080047 +Converged at iteration 22, L1 8.14067e-05, Linf 0.00439786, total time[s] 0.071575 +Converged at iteration 20, L1 9.85721e-05, Linf 0.00410416, total time[s] 0.058387 +Converged at iteration 24, L1 9.03064e-05, Linf 0.00485461, total time[s] 0.063271 +Converged at iteration 28, L1 7.42462e-05, Linf 0.00445206, total time[s] 0.091842 +Converged at iteration 26, L1 8.09496e-05, Linf 0.0055005, total time[s] 0.077929 +Converged at iteration 22, L1 7.27859e-05, Linf 0.00501158, total time[s] 0.068551 +Converged at iteration 19, L1 6.31029e-05, Linf 0.00378284, total time[s] 0.053819 +Converged at iteration 30, L1 8.38613e-05, Linf 0.00329997, total time[s] 0.077109 +Converged at iteration 20, L1 8.47893e-05, Linf 0.00460047, total time[s] 0.054713 +Converged at iteration 24, L1 7.20021e-05, Linf 0.00464984, total time[s] 0.090728 +Converged at iteration 31, L1 9.13888e-05, Linf 0.00556092, total time[s] 0.081848 +Converged at iteration 27, L1 9.94037e-05, Linf 0.0056216, total time[s] 0.068848 +Converged at iteration 24, L1 8.76336e-05, Linf 0.00459854, total time[s] 0.084411 +Converged at iteration 23, L1 9.24812e-05, Linf 0.00415742, total time[s] 0.064611 +Converged at iteration 26, L1 7.2114e-05, Linf 0.00451189, total time[s] 0.071283 +Converged at iteration 29, L1 7.74117e-05, Linf 0.00482512, total time[s] 0.077866 +Converged at iteration 34, L1 7.53213e-05, Linf 0.00428326, total time[s] 0.094807 +Converged at iteration 30, L1 9.7229e-05, Linf 0.00440844, total time[s] 0.085894 +Converged at iteration 28, L1 9.63642e-05, Linf 0.00316012, total time[s] 0.078557 +Converged at iteration 32, L1 8.94257e-05, Linf 0.00370489, total time[s] 0.086025 +Converged at iteration 37, L1 7.09543e-05, Linf 0.00313471, total time[s] 0.101741 +Converged at iteration 33, L1 8.42426e-05, Linf 0.00473825, total time[s] 0.096442 +Converged at iteration 28, L1 9.53232e-05, Linf 0.00424684, total time[s] 0.087253 +Converged at iteration 24, L1 8.45451e-05, Linf 0.00314839, total time[s] 0.081946 +Converged at iteration 26, L1 8.88757e-05, Linf 0.00384757, total time[s] 0.103897 +Converged at iteration 40, L1 6.68167e-05, Linf 0.00387591, total time[s] 0.124557 +Converged at iteration 35, L1 8.43022e-05, Linf 0.0035578, total time[s] 0.107252 +Converged at iteration 30, L1 9.43951e-05, Linf 0.00419751, total time[s] 0.097414 +Converged at iteration 31, L1 6.18274e-05, Linf 0.00504185, total time[s] 0.09013 +Converged at iteration 26, L1 9.98425e-05, Linf 0.00579147, total time[s] 0.070962 +Converged at iteration 22, L1 7.45766e-05, Linf 0.00425087, total time[s] 0.08477 +Converged at iteration 21, L1 6.32973e-05, Linf 0.00340805, total time[s] 0.062028 +Converged at iteration 24, L1 8.9875e-05, Linf 0.00491427, total time[s] 0.067183 +Converged at iteration 28, L1 7.41554e-05, Linf 0.00443796, total time[s] 0.079908 +Converged at iteration 26, L1 8.03135e-05, Linf 0.00545083, total time[s] 0.072206 +Converged at iteration 22, L1 7.16339e-05, Linf 0.0046905, total time[s] 0.076272 +Converged at iteration 19, L1 5.75328e-05, Linf 0.00349385, total time[s] 0.072196 +Converged at iteration 30, L1 9.14449e-05, Linf 0.00333812, total time[s] 0.089572 +Converged at iteration 20, L1 8.49607e-05, Linf 0.00468561, total time[s] 0.063108 +Converged at iteration 24, L1 7.20437e-05, Linf 0.0047099, total time[s] 0.069139 +Converged at iteration 31, L1 9.36031e-05, Linf 0.00515366, total time[s] 0.095579 +Converged at iteration 27, L1 9.78196e-05, Linf 0.00511091, total time[s] 0.079238 +Converged at iteration 24, L1 8.66156e-05, Linf 0.00442687, total time[s] 0.070189 +Converged at iteration 23, L1 9.28502e-05, Linf 0.0042635, total time[s] 0.077984 +Converged at iteration 26, L1 7.16817e-05, Linf 0.00460361, total time[s] 0.10521 +Converged at iteration 29, L1 7.58833e-05, Linf 0.00487006, total time[s] 0.097273 +Converged at iteration 34, L1 8.02381e-05, Linf 0.00430103, total time[s] 0.097904 +Converged at iteration 31, L1 7.04941e-05, Linf 0.00358988, total time[s] 0.088102 +Converged at iteration 29, L1 6.86517e-05, Linf 0.00268415, total time[s] 0.083486 +Converged at iteration 32, L1 8.40121e-05, Linf 0.00358539, total time[s] 0.084704 +Converged at iteration 36, L1 9.19967e-05, Linf 0.00365831, total time[s] 0.117445 +Converged at iteration 33, L1 8.36128e-05, Linf 0.00481885, total time[s] 0.107951 +Converged at iteration 28, L1 9.24768e-05, Linf 0.00416598, total time[s] 0.082762 +Converged at iteration 24, L1 8.11649e-05, Linf 0.00301565, total time[s] 0.072207 +Converged at iteration 26, L1 8.61042e-05, Linf 0.00390841, total time[s] 0.084244 +Converged at iteration 40, L1 6.61411e-05, Linf 0.00412085, total time[s] 0.108293 +Converged at iteration 35, L1 9.21921e-05, Linf 0.00373793, total time[s] 0.130168 +Converged at iteration 30, L1 8.83411e-05, Linf 0.00417746, total time[s] 0.095906 +Converged at iteration 31, L1 6.14467e-05, Linf 0.00505667, total time[s] 0.102084 +Converged at iteration 26, L1 9.44009e-05, Linf 0.00595287, total time[s] 0.087516 +Converged at iteration 22, L1 6.40412e-05, Linf 0.00405232, total time[s] 0.069499 +Converged at iteration 21, L1 6.762e-05, Linf 0.00371403, total time[s] 0.071262 +Converged at iteration 24, L1 8.87308e-05, Linf 0.00507276, total time[s] 0.0649 +Converged at iteration 28, L1 7.00325e-05, Linf 0.00441317, total time[s] 0.076895 +Converged at iteration 26, L1 8.22441e-05, Linf 0.0049187, total time[s] 0.081007 +Converged at iteration 22, L1 6.14904e-05, Linf 0.00355169, total time[s] 0.071506 +Converged at iteration 18, L1 8.83975e-05, Linf 0.00353297, total time[s] 0.057179 +Converged at iteration 31, L1 7.03573e-05, Linf 0.00269065, total time[s] 0.088308 +Converged at iteration 20, L1 8.28988e-05, Linf 0.00484174, total time[s] 0.057627 +Converged at iteration 24, L1 7.01658e-05, Linf 0.00487469, total time[s] 0.069395 +Converged at iteration 31, L1 9.27602e-05, Linf 0.00373472, total time[s] 0.113875 +Converged at iteration 27, L1 6.86538e-05, Linf 0.00358491, total time[s] 0.088444 +Converged at iteration 24, L1 7.73665e-05, Linf 0.00375639, total time[s] 0.080884 +Converged at iteration 23, L1 9.27166e-05, Linf 0.00446792, total time[s] 0.099166 +Converged at iteration 26, L1 7.03334e-05, Linf 0.0048107, total time[s] 0.06869 +Converged at iteration 29, L1 7.32458e-05, Linf 0.00492796, total time[s] 0.078999 +Converged at iteration 34, L1 7.11944e-05, Linf 0.00308605, total time[s] 0.121599 +Converged at iteration 31, L1 7.79666e-05, Linf 0.00338518, total time[s] 0.112464 +Converged at iteration 29, L1 7.475e-05, Linf 0.00284117, total time[s] 0.097757 +Converged at iteration 32, L1 7.78173e-05, Linf 0.00343143, total time[s] 0.097256 +Converged at iteration 36, L1 7.78067e-05, Linf 0.00341215, total time[s] 0.095684 +Converged at iteration 33, L1 8.20439e-05, Linf 0.00493266, total time[s] 0.089966 +Converged at iteration 28, L1 8.76218e-05, Linf 0.00409556, total time[s] 0.082741 +Converged at iteration 24, L1 7.87646e-05, Linf 0.00274384, total time[s] 0.063374 +Converged at iteration 26, L1 8.25297e-05, Linf 0.00399629, total time[s] 0.066398 +Converged at iteration 40, L1 6.76935e-05, Linf 0.00409359, total time[s] 0.111753 +Converged at iteration 35, L1 8.83791e-05, Linf 0.00361712, total time[s] 0.101344 +Converged at iteration 30, L1 9.07271e-05, Linf 0.00417474, total time[s] 0.088235 +Converged at iteration 31, L1 6.17101e-05, Linf 0.00503923, total time[s] 0.110365 +Converged at iteration 26, L1 9.71207e-05, Linf 0.00576403, total time[s] 0.081357 +Converged at iteration 22, L1 6.97324e-05, Linf 0.00412984, total time[s] 0.076704 +Converged at iteration 21, L1 6.49918e-05, Linf 0.00355704, total time[s] 0.059905 +Converged at iteration 24, L1 8.91833e-05, Linf 0.00498343, total time[s] 0.069622 +Converged at iteration 28, L1 7.22148e-05, Linf 0.00442492, total time[s] 0.091893 +Converged at iteration 26, L1 8.12786e-05, Linf 0.00524392, total time[s] 0.08879 +Converged at iteration 23, L1 7.77461e-05, Linf 0.00527216, total time[s] 0.064178 +Converged at iteration 18, L1 9.86655e-05, Linf 0.0040276, total time[s] 0.063054 +Converged at iteration 30, L1 9.80244e-05, Linf 0.00330847, total time[s] 0.096338 +Converged at iteration 20, L1 8.37181e-05, Linf 0.00476021, total time[s] 0.068343 +Converged at iteration 24, L1 7.10852e-05, Linf 0.00478407, total time[s] 0.124702 +Converged at iteration 31, L1 9.62683e-05, Linf 0.00451928, total time[s] 0.121967 +Converged at iteration 27, L1 9.00638e-05, Linf 0.0043296, total time[s] 0.080424 +Converged at iteration 24, L1 8.43065e-05, Linf 0.0041441, total time[s] 0.087895 +Converged at iteration 23, L1 9.25773e-05, Linf 0.00436692, total time[s] 0.078686 +Converged at iteration 26, L1 7.1126e-05, Linf 0.00469839, total time[s] 0.080666 +Converged at iteration 29, L1 7.47591e-05, Linf 0.00489909, total time[s] 0.079571 +Converged at iteration 34, L1 8.25391e-05, Linf 0.00380842, total time[s] 0.107973 +Converged at iteration 31, L1 7.46266e-05, Linf 0.00352326, total time[s] 0.087548 +Converged at iteration 29, L1 7.17354e-05, Linf 0.00273883, total time[s] 0.074794 +Converged at iteration 32, L1 8.14201e-05, Linf 0.00349599, total time[s] 0.095012 +Converged at iteration 36, L1 8.44461e-05, Linf 0.00353428, total time[s] 0.105755 +Converged at iteration 33, L1 8.33132e-05, Linf 0.00487357, total time[s] 0.116008 +Converged at iteration 28, L1 9.04258e-05, Linf 0.00410774, total time[s] 0.08255 +Converged at iteration 24, L1 7.97259e-05, Linf 0.00287996, total time[s] 0.06853 +Converged at iteration 26, L1 8.37553e-05, Linf 0.00394215, total time[s] 0.082893 +Converged at iteration 40, L1 6.67203e-05, Linf 0.00417998, total time[s] 0.13587 +Converged at iteration 35, L1 9.5036e-05, Linf 0.00380571, total time[s] 0.103621 +Converged at iteration 30, L1 8.4874e-05, Linf 0.00423165, total time[s] 0.111116 +Converged at iteration 31, L1 6.14963e-05, Linf 0.00505987, total time[s] 0.089304 +Converged at iteration 26, L1 9.25548e-05, Linf 0.00571117, total time[s] 0.070902 +Converged at iteration 21, L1 9.96829e-05, Linf 0.00468783, total time[s] 0.062259 +Converged at iteration 21, L1 6.99422e-05, Linf 0.00384158, total time[s] 0.060455 +Converged at iteration 24, L1 8.6555e-05, Linf 0.00505549, total time[s] 0.064839 +Converged at iteration 28, L1 6.91024e-05, Linf 0.00440718, total time[s] 0.081806 +Converged at iteration 26, L1 8.31061e-05, Linf 0.00461167, total time[s] 0.084244 +Converged at iteration 21, L1 9.7824e-05, Linf 0.00435515, total time[s] 0.060408 +Converged at iteration 18, L1 8.13315e-05, Linf 0.00324776, total time[s] 0.051856 +Converged at iteration 31, L1 7.26714e-05, Linf 0.00267194, total time[s] 0.086842 +Converged at iteration 20, L1 8.25382e-05, Linf 0.00490162, total time[s] 0.061915 +Converged at iteration 24, L1 6.98505e-05, Linf 0.00493864, total time[s] 0.080398 +Converged at iteration 31, L1 8.03741e-05, Linf 0.00331422, total time[s] 0.08146 +Converged at iteration 26, L1 7.83972e-05, Linf 0.00395686, total time[s] 0.068066 +Converged at iteration 24, L1 6.77209e-05, Linf 0.00351246, total time[s] 0.079068 +Converged at iteration 23, L1 9.3729e-05, Linf 0.00452316, total time[s] 0.063606 +Converged at iteration 26, L1 6.9726e-05, Linf 0.00487398, total time[s] 0.083456 +Converged at iteration 29, L1 7.23831e-05, Linf 0.00493197, total time[s] 0.076733 +Converged at iteration 33, L1 7.9143e-05, Linf 0.00322962, total time[s] 0.101818 +Converged at iteration 31, L1 7.74531e-05, Linf 0.00324263, total time[s] 0.093864 +Converged at iteration 29, L1 7.59762e-05, Linf 0.00288495, total time[s] 0.080847 +Converged at iteration 32, L1 7.62689e-05, Linf 0.00339359, total time[s] 0.123974 +Converged at iteration 36, L1 7.35439e-05, Linf 0.00336112, total time[s] 0.093886 +Converged at iteration 33, L1 8.11505e-05, Linf 0.00496837, total time[s] 0.103911 +Converged at iteration 28, L1 8.57579e-05, Linf 0.00402325, total time[s] 0.113068 +Converged at iteration 24, L1 7.84254e-05, Linf 0.00263113, total time[s] 0.067805 +Converged at iteration 26, L1 8.27023e-05, Linf 0.00401639, total time[s] 0.124016 +Converged at iteration 40, L1 6.52752e-05, Linf 0.00405513, total time[s] 0.149174 +Converged at iteration 35, L1 9.14115e-05, Linf 0.00371927, total time[s] 0.114183 +Converged at iteration 30, L1 8.88695e-05, Linf 0.00417542, total time[s] 0.129094 +Converged at iteration 31, L1 6.15081e-05, Linf 0.00505968, total time[s] 0.119054 +Converged at iteration 26, L1 9.48908e-05, Linf 0.00579792, total time[s] 0.071169 +Converged at iteration 22, L1 6.53185e-05, Linf 0.00407217, total time[s] 0.074922 +Converged at iteration 21, L1 6.71715e-05, Linf 0.00369224, total time[s] 0.056307 +Converged at iteration 24, L1 8.8786e-05, Linf 0.00505368, total time[s] 0.075716 +Converged at iteration 28, L1 7.0466e-05, Linf 0.00441435, total time[s] 0.0844 +Converged at iteration 26, L1 8.19589e-05, Linf 0.00498599, total time[s] 0.075685 +Converged at iteration 22, L1 6.36945e-05, Linf 0.00369785, total time[s] 0.092217 +Converged at iteration 18, L1 9.07158e-05, Linf 0.00362997, total time[s] 0.054491 +Converged at iteration 31, L1 6.9752e-05, Linf 0.00267205, total time[s] 0.088801 +Converged at iteration 20, L1 8.3188e-05, Linf 0.00482507, total time[s] 0.071427 +Converged at iteration 24, L1 7.0486e-05, Linf 0.00485941, total time[s] 0.068068 +Converged at iteration 31, L1 9.36812e-05, Linf 0.0038732, total time[s] 0.120565 +Converged at iteration 27, L1 7.4712e-05, Linf 0.00371965, total time[s] 0.076015 +Converged at iteration 24, L1 7.95187e-05, Linf 0.00383975, total time[s] 0.074675 +Converged at iteration 23, L1 9.27499e-05, Linf 0.00444944, total time[s] 0.081108 +Converged at iteration 26, L1 7.05526e-05, Linf 0.00478899, total time[s] 0.093584 +Converged at iteration 29, L1 7.35294e-05, Linf 0.00481753, total time[s] 0.086494 +Converged at iteration 34, L1 7.66691e-05, Linf 0.00322536, total time[s] 0.098222 +Converged at iteration 31, L1 7.76221e-05, Linf 0.00342369, total time[s] 0.08123 +Converged at iteration 29, L1 7.38855e-05, Linf 0.00281023, total time[s] 0.090648 +Converged at iteration 32, L1 7.80044e-05, Linf 0.00344741, total time[s] 0.08919 +Converged at iteration 36, L1 7.75778e-05, Linf 0.00340886, total time[s] 0.100205 +Converged at iteration 33, L1 8.20508e-05, Linf 0.00492098, total time[s] 0.102911 +Converged at iteration 28, L1 8.78353e-05, Linf 0.0040609, total time[s] 0.079618 +Converged at iteration 24, L1 7.88695e-05, Linf 0.00274069, total time[s] 0.077773 +Converged at iteration 26, L1 8.2272e-05, Linf 0.0039723, total time[s] 0.083051 +Converged at iteration 40, L1 6.63482e-05, Linf 0.00417935, total time[s] 0.122412 +Converged at iteration 35, L1 9.59554e-05, Linf 0.00384692, total time[s] 0.11093 +Converged at iteration 30, L1 7.56701e-05, Linf 0.00417889, total time[s] 0.087504 +Converged at iteration 31, L1 6.13593e-05, Linf 0.00506153, total time[s] 0.099587 +Converged at iteration 26, L1 9.11531e-05, Linf 0.00569339, total time[s] 0.072381 +Converged at iteration 21, L1 9.67675e-05, Linf 0.00462658, total time[s] 0.080683 +Converged at iteration 21, L1 6.8552e-05, Linf 0.00392844, total time[s] 0.079191 +Converged at iteration 24, L1 8.1839e-05, Linf 0.00518827, total time[s] 0.072045 +Converged at iteration 28, L1 6.82823e-05, Linf 0.00440361, total time[s] 0.090089 +Converged at iteration 26, L1 8.24326e-05, Linf 0.00439291, total time[s] 0.076421 +Converged at iteration 21, L1 8.82821e-05, Linf 0.00431994, total time[s] 0.065475 +Converged at iteration 18, L1 7.54182e-05, Linf 0.00303618, total time[s] 0.050846 +Converged at iteration 31, L1 7.47627e-05, Linf 0.00267801, total time[s] 0.125573 +Converged at iteration 20, L1 8.22138e-05, Linf 0.00493877, total time[s] 0.065373 +Converged at iteration 24, L1 6.91989e-05, Linf 0.00498966, total time[s] 0.068161 +Converged at iteration 30, L1 9.83034e-05, Linf 0.00355261, total time[s] 0.083029 +Converged at iteration 25, L1 9.94453e-05, Linf 0.00473009, total time[s] 0.087128 +Converged at iteration 23, L1 8.9176e-05, Linf 0.00397856, total time[s] 0.086511 +Converged at iteration 23, L1 9.46607e-05, Linf 0.00456098, total time[s] 0.069832 +Converged at iteration 26, L1 6.934e-05, Linf 0.0049196, total time[s] 0.070146 +Converged at iteration 29, L1 7.16566e-05, Linf 0.00491193, total time[s] 0.092749 +Converged at iteration 32, L1 9.26842e-05, Linf 0.00356391, total time[s] 0.112001 +Converged at iteration 31, L1 7.46309e-05, Linf 0.00309557, total time[s] 0.093448 +Converged at iteration 29, L1 7.73018e-05, Linf 0.0029044, total time[s] 0.088841 +Converged at iteration 32, L1 7.56783e-05, Linf 0.0033619, total time[s] 0.088185 +Converged at iteration 35, L1 9.70821e-05, Linf 0.00405261, total time[s] 0.102144 +Converged at iteration 33, L1 8.05858e-05, Linf 0.00499747, total time[s] 0.091927 +Converged at iteration 28, L1 8.45988e-05, Linf 0.00399222, total time[s] 0.084441 +Converged at iteration 24, L1 7.83719e-05, Linf 0.00256464, total time[s] 0.072373 +Converged at iteration 26, L1 8.30164e-05, Linf 0.00403228, total time[s] 0.09659 +Converged at iteration 39, L1 9.77988e-05, Linf 0.00512078, total time[s] 0.110672 +Converged at iteration 36, L1 6.91682e-05, Linf 0.00348211, total time[s] 0.113189 +Converged at iteration 28, L1 9.59197e-05, Linf 0.00588921, total time[s] 0.0778 +Converged at iteration 31, L1 6.09075e-05, Linf 0.00506654, total time[s] 0.082033 +Converged at iteration 26, L1 8.52464e-05, Linf 0.00560712, total time[s] 0.087772 +Converged at iteration 21, L1 8.62958e-05, Linf 0.00434152, total time[s] 0.059473 +Converged at iteration 20, L1 9.90924e-05, Linf 0.00535175, total time[s] 0.058384 +Converged at iteration 23, L1 8.9423e-05, Linf 0.00644539, total time[s] 0.069654 +Converged at iteration 27, L1 9.10879e-05, Linf 0.0054826, total time[s] 0.101533 +Converged at iteration 26, L1 6.24473e-05, Linf 0.00350788, total time[s] 0.081444 +Converged at iteration 21, L1 6.08295e-05, Linf 0.00426188, total time[s] 0.072048 +Converged at iteration 18, L1 5.51405e-05, Linf 0.00272165, total time[s] 0.082543 +Converged at iteration 31, L1 8.17668e-05, Linf 0.00271079, total time[s] 0.10365 +Converged at iteration 20, L1 7.82648e-05, Linf 0.00513098, total time[s] 0.074529 +Converged at iteration 24, L1 6.80405e-05, Linf 0.00523538, total time[s] 0.073608 +Converged at iteration 29, L1 8.83044e-05, Linf 0.00333609, total time[s] 0.103888 +Converged at iteration 24, L1 8.90997e-05, Linf 0.00545068, total time[s] 0.078417 +Converged at iteration 22, L1 8.66885e-05, Linf 0.00421438, total time[s] 0.073555 +Converged at iteration 23, L1 9.51138e-05, Linf 0.00460574, total time[s] 0.069017 +Converged at iteration 26, L1 6.7419e-05, Linf 0.00499099, total time[s] 0.099789 +Converged at iteration 29, L1 6.89182e-05, Linf 0.00459502, total time[s] 0.101968 +Converged at iteration 31, L1 7.26135e-05, Linf 0.00373104, total time[s] 0.102086 +Converged at iteration 29, L1 9.90206e-05, Linf 0.00344524, total time[s] 0.077273 +Converged at iteration 29, L1 8.23011e-05, Linf 0.00304373, total time[s] 0.089785 +Converged at iteration 31, L1 9.33599e-05, Linf 0.00381147, total time[s] 0.111587 +Converged at iteration 34, L1 6.97146e-05, Linf 0.0040587, total time[s] 0.094123 +Converged at iteration 33, L1 7.79817e-05, Linf 0.00511857, total time[s] 0.116502 +Converged at iteration 28, L1 7.87604e-05, Linf 0.00388283, total time[s] 0.074165 +Converged at iteration 24, L1 8.1829e-05, Linf 0.00228147, total time[s] 0.15817 +Converged at iteration 26, L1 6.70944e-05, Linf 0.00395348, total time[s] 0.108126 +Converged at iteration 39, L1 9.91454e-05, Linf 0.00499926, total time[s] 0.109493 +Converged at iteration 35, L1 9.91418e-05, Linf 0.00395718, total time[s] 0.114574 +Converged at iteration 29, L1 8.44665e-05, Linf 0.00499822, total time[s] 0.090135 +Converged at iteration 31, L1 6.11554e-05, Linf 0.00506408, total time[s] 0.081554 +Converged at iteration 26, L1 8.81663e-05, Linf 0.00559527, total time[s] 0.086631 +Converged at iteration 21, L1 9.08851e-05, Linf 0.00448805, total time[s] 0.066436 +Converged at iteration 21, L1 6.40821e-05, Linf 0.00403609, total time[s] 0.074905 +Converged at iteration 24, L1 6.7538e-05, Linf 0.00527782, total time[s] 0.074898 +Converged at iteration 28, L1 6.23572e-05, Linf 0.00439816, total time[s] 0.084533 +Converged at iteration 26, L1 7.42333e-05, Linf 0.00388752, total time[s] 0.078658 +Converged at iteration 21, L1 7.19696e-05, Linf 0.00430415, total time[s] 0.069048 +Converged at iteration 18, L1 6.42951e-05, Linf 0.00281093, total time[s] 0.068539 +Converged at iteration 31, L1 7.83288e-05, Linf 0.00269362, total time[s] 0.129169 +Converged at iteration 20, L1 8.11734e-05, Linf 0.00503369, total time[s] 0.0962 +Converged at iteration 24, L1 6.82146e-05, Linf 0.00510923, total time[s] 0.125492 +Converged at iteration 30, L1 7.57866e-05, Linf 0.00307278, total time[s] 0.11349 +Converged at iteration 25, L1 7.10689e-05, Linf 0.00439518, total time[s] 0.069847 +Converged at iteration 23, L1 6.84698e-05, Linf 0.00367968, total time[s] 0.074571 +Converged at iteration 23, L1 9.57602e-05, Linf 0.00461118, total time[s] 0.101264 +Converged at iteration 26, L1 6.85981e-05, Linf 0.00507093, total time[s] 0.078339 +Converged at iteration 29, L1 7.09991e-05, Linf 0.0048035, total time[s] 0.120743 +Converged at iteration 31, L1 9.59972e-05, Linf 0.00395004, total time[s] 0.097168 +Converged at iteration 30, L1 8.78501e-05, Linf 0.00323342, total time[s] 0.082362 +Converged at iteration 29, L1 7.95789e-05, Linf 0.00299009, total time[s] 0.077393 +Converged at iteration 32, L1 7.17363e-05, Linf 0.0033126, total time[s] 0.085321 +Converged at iteration 35, L1 6.95922e-05, Linf 0.00375214, total time[s] 0.092014 +Converged at iteration 33, L1 7.9295e-05, Linf 0.0050586, total time[s] 0.091708 +Converged at iteration 28, L1 8.1643e-05, Linf 0.0039833, total time[s] 0.077376 +Converged at iteration 24, L1 7.92438e-05, Linf 0.0024226, total time[s] 0.062396 +Converged at iteration 26, L1 7.73606e-05, Linf 0.00407264, total time[s] 0.075401 +Converged at iteration 39, L1 9.7417e-05, Linf 0.00525457, total time[s] 0.113928 +Converged at iteration 36, L1 6.95335e-05, Linf 0.00352124, total time[s] 0.098814 +Converged at iteration 28, L1 7.68272e-05, Linf 0.00569234, total time[s] 0.084323 +Converged at iteration 31, L1 6.1632e-05, Linf 0.00507327, total time[s] 0.089766 +Converged at iteration 26, L1 8.38082e-05, Linf 0.00564139, total time[s] 0.07359 +Converged at iteration 21, L1 8.36544e-05, Linf 0.00424933, total time[s] 0.069354 +Converged at iteration 20, L1 9.30209e-05, Linf 0.00535129, total time[s] 0.053565 +Converged at iteration 23, L1 7.57687e-05, Linf 0.00644424, total time[s] 0.061147 +Converged at iteration 27, L1 8.32545e-05, Linf 0.00547963, total time[s] 0.10682 +Converged at iteration 25, L1 9.91491e-05, Linf 0.00420982, total time[s] 0.070396 +Converged at iteration 21, L1 5.6284e-05, Linf 0.00423528, total time[s] 0.058386 +Converged at iteration 18, L1 5.12856e-05, Linf 0.00271008, total time[s] 0.058237 +Converged at iteration 31, L1 8.37615e-05, Linf 0.00272086, total time[s] 0.097657 +Converged at iteration 20, L1 7.61265e-05, Linf 0.00519204, total time[s] 0.059707 +Converged at iteration 24, L1 6.72986e-05, Linf 0.00531806, total time[s] 0.089581 +Converged at iteration 29, L1 7.94889e-05, Linf 0.00313278, total time[s] 0.10646 +Converged at iteration 24, L1 8.15041e-05, Linf 0.00539613, total time[s] 0.070409 +Converged at iteration 22, L1 7.85507e-05, Linf 0.0041014, total time[s] 0.066433 +Converged at iteration 23, L1 9.29528e-05, Linf 0.0045722, total time[s] 0.066523 +Converged at iteration 26, L1 6.68608e-05, Linf 0.00494923, total time[s] 0.097096 +Converged at iteration 29, L1 6.81887e-05, Linf 0.00443484, total time[s] 0.098375 +Converged at iteration 31, L1 6.43635e-05, Linf 0.003624, total time[s] 0.092328 +Converged at iteration 29, L1 8.82737e-05, Linf 0.00330268, total time[s] 0.090016 +Converged at iteration 29, L1 8.37741e-05, Linf 0.00308641, total time[s] 0.098803 +Converged at iteration 31, L1 8.85593e-05, Linf 0.00363128, total time[s] 0.082805 +Converged at iteration 33, L1 8.47949e-05, Linf 0.00463237, total time[s] 0.10667 +Converged at iteration 33, L1 7.71076e-05, Linf 0.00515529, total time[s] 0.088514 +Converged at iteration 28, L1 7.70613e-05, Linf 0.00384903, total time[s] 0.085882 +Converged at iteration 24, L1 8.40536e-05, Linf 0.0021957, total time[s] 0.07224 +Converged at iteration 25, L1 9.44633e-05, Linf 0.00483521, total time[s] 0.080474 +Converged at iteration 39, L1 9.7981e-05, Linf 0.00509795, total time[s] 0.139979 +Converged at iteration 36, L1 6.83906e-05, Linf 0.00342315, total time[s] 0.101937 +Converged at iteration 29, L1 6.11564e-05, Linf 0.00486398, total time[s] 0.117312 +Converged at iteration 31, L1 6.09193e-05, Linf 0.00506577, total time[s] 0.089151 +Converged at iteration 26, L1 8.59018e-05, Linf 0.00561599, total time[s] 0.085235 +Converged at iteration 21, L1 8.70855e-05, Linf 0.0043717, total time[s] 0.060191 +Converged at iteration 21, L1 5.85537e-05, Linf 0.00407003, total time[s] 0.060142 +Converged at iteration 23, L1 9.38298e-05, Linf 0.00643677, total time[s] 0.072849 +Converged at iteration 27, L1 9.34397e-05, Linf 0.00548597, total time[s] 0.07323 +Converged at iteration 26, L1 6.40975e-05, Linf 0.00356873, total time[s] 0.076728 +Converged at iteration 21, L1 6.25399e-05, Linf 0.00427075, total time[s] 0.066015 +Converged at iteration 18, L1 5.67887e-05, Linf 0.00276068, total time[s] 0.050145 +Converged at iteration 31, L1 8.1068e-05, Linf 0.00271286, total time[s] 0.161168 +Converged at iteration 20, L1 7.90417e-05, Linf 0.00511156, total time[s] 0.074242 +Converged at iteration 24, L1 6.79526e-05, Linf 0.00521332, total time[s] 0.122676 +Converged at iteration 29, L1 9.20404e-05, Linf 0.00340925, total time[s] 0.090976 +Converged at iteration 24, L1 9.29161e-05, Linf 0.00546907, total time[s] 0.070233 +Converged at iteration 22, L1 9.03576e-05, Linf 0.004257, total time[s] 0.061539 +Converged at iteration 23, L1 9.56498e-05, Linf 0.00461282, total time[s] 0.074702 +Converged at iteration 26, L1 6.76087e-05, Linf 0.00499786, total time[s] 0.078134 +Converged at iteration 29, L1 6.92182e-05, Linf 0.00464247, total time[s] 0.079467 +Converged at iteration 31, L1 7.65575e-05, Linf 0.00377263, total time[s] 0.101553 +Converged at iteration 30, L1 7.07297e-05, Linf 0.00299802, total time[s] 0.278075 +Converged at iteration 29, L1 8.17126e-05, Linf 0.00302937, total time[s] 0.086979 +Converged at iteration 31, L1 9.51615e-05, Linf 0.00385807, total time[s] 0.084236 +Converged at iteration 34, L1 7.57182e-05, Linf 0.00420291, total time[s] 0.115275 +Converged at iteration 33, L1 7.82268e-05, Linf 0.00510748, total time[s] 0.093456 +Converged at iteration 28, L1 7.93277e-05, Linf 0.0038937, total time[s] 0.079321 +Converged at iteration 24, L1 8.1262e-05, Linf 0.00230878, total time[s] 0.068094 +Converged at iteration 26, L1 6.85831e-05, Linf 0.00398611, total time[s] 0.071662 +Converged at iteration 39, L1 9.60792e-05, Linf 0.00525059, total time[s] 0.105039 +Converged at iteration 36, L1 7.04433e-05, Linf 0.00354859, total time[s] 0.104148 +Converged at iteration 28, L1 6.30848e-05, Linf 0.00547984, total time[s] 0.087627 +Converged at iteration 31, L1 6.08899e-05, Linf 0.00506963, total time[s] 0.101077 +Converged at iteration 26, L1 8.20494e-05, Linf 0.00555355, total time[s] 0.081313 +Converged at iteration 21, L1 8.15909e-05, Linf 0.00417166, total time[s] 0.088506 +Converged at iteration 20, L1 8.82039e-05, Linf 0.00539522, total time[s] 0.08136 +Converged at iteration 23, L1 6.58143e-05, Linf 0.00641291, total time[s] 0.069859 +Converged at iteration 27, L1 7.70611e-05, Linf 0.00544273, total time[s] 0.095296 +Converged at iteration 25, L1 9.43535e-05, Linf 0.00419063, total time[s] 0.110047 +Converged at iteration 21, L1 5.32601e-05, Linf 0.00421662, total time[s] 0.085071 +Converged at iteration 17, L1 9.84528e-05, Linf 0.00422978, total time[s] 0.047619 +Converged at iteration 31, L1 8.52616e-05, Linf 0.00270814, total time[s] 0.130767 +Converged at iteration 20, L1 7.38818e-05, Linf 0.00523975, total time[s] 0.069345 +Converged at iteration 24, L1 6.61302e-05, Linf 0.00538324, total time[s] 0.078188 +Converged at iteration 29, L1 7.28209e-05, Linf 0.00301162, total time[s] 0.138033 +Converged at iteration 24, L1 7.49173e-05, Linf 0.00536278, total time[s] 0.090469 +Converged at iteration 22, L1 7.35506e-05, Linf 0.00399612, total time[s] 0.128661 +Converged at iteration 23, L1 9.0194e-05, Linf 0.00452891, total time[s] 0.066552 +Converged at iteration 26, L1 6.65314e-05, Linf 0.00488897, total time[s] 0.084946 +Converged at iteration 29, L1 6.76077e-05, Linf 0.00429773, total time[s] 0.085758 +Converged at iteration 30, L1 9.71693e-05, Linf 0.00463246, total time[s] 0.150606 +Converged at iteration 29, L1 8.1058e-05, Linf 0.00319996, total time[s] 0.101214 +Converged at iteration 29, L1 8.4966e-05, Linf 0.00313544, total time[s] 0.08004 +Converged at iteration 31, L1 8.4248e-05, Linf 0.0034623, total time[s] 0.095168 +Converged at iteration 33, L1 7.03621e-05, Linf 0.00416497, total time[s] 0.097241 +Converged at iteration 33, L1 7.68895e-05, Linf 0.0051287, total time[s] 0.11156 +Converged at iteration 28, L1 7.56941e-05, Linf 0.0038213, total time[s] 0.101651 +Converged at iteration 24, L1 8.62046e-05, Linf 0.00212738, total time[s] 0.085223 +Converged at iteration 25, L1 8.78136e-05, Linf 0.00473595, total time[s] 0.12442 +Converged at iteration 39, L1 9.71986e-05, Linf 0.00517453, total time[s] 0.123844 +Converged at iteration 36, L1 7.12369e-05, Linf 0.00350677, total time[s] 0.11696 +Converged at iteration 28, L1 8.18317e-05, Linf 0.00576754, total time[s] 0.079653 +Converged at iteration 31, L1 6.08299e-05, Linf 0.00509713, total time[s] 0.083693 +Converged at iteration 26, L1 8.42e-05, Linf 0.00580834, total time[s] 0.28476 +Converged at iteration 21, L1 8.54166e-05, Linf 0.004231, total time[s] 0.070334 +Converged at iteration 20, L1 9.46307e-05, Linf 0.00536877, total time[s] 0.058469 +Converged at iteration 23, L1 7.92655e-05, Linf 0.00641435, total time[s] 0.066168 +Converged at iteration 27, L1 8.6194e-05, Linf 0.00547791, total time[s] 0.14194 +Converged at iteration 26, L1 5.89954e-05, Linf 0.00333865, total time[s] 0.078511 +Converged at iteration 21, L1 5.76858e-05, Linf 0.00424201, total time[s] 0.062617 +Converged at iteration 18, L1 5.23056e-05, Linf 0.00275625, total time[s] 0.0779 +Converged at iteration 31, L1 8.31848e-05, Linf 0.00271802, total time[s] 0.10631 +Converged at iteration 20, L1 7.66834e-05, Linf 0.00518806, total time[s] 0.070734 +Converged at iteration 24, L1 6.76131e-05, Linf 0.00531262, total time[s] 0.079293 +Converged at iteration 29, L1 8.12848e-05, Linf 0.00320378, total time[s] 0.123786 +Converged at iteration 24, L1 8.52197e-05, Linf 0.00540458, total time[s] 0.078231 +Converged at iteration 22, L1 8.07961e-05, Linf 0.00415851, total time[s] 0.071387 +Converged at iteration 23, L1 9.37286e-05, Linf 0.00459192, total time[s] 0.085593 +Converged at iteration 26, L1 6.70192e-05, Linf 0.00496462, total time[s] 0.096338 +Converged at iteration 29, L1 6.84039e-05, Linf 0.00447851, total time[s] 0.093507 +Converged at iteration 31, L1 6.65874e-05, Linf 0.00362667, total time[s] 0.135635 +Converged at iteration 29, L1 9.18598e-05, Linf 0.00365181, total time[s] 0.107211 +Converged at iteration 29, L1 8.36349e-05, Linf 0.00307465, total time[s] 0.122814 +Converged at iteration 31, L1 8.95831e-05, Linf 0.00367951, total time[s] 0.12871 +Converged at iteration 33, L1 9.05382e-05, Linf 0.0047529, total time[s] 0.129785 +Converged at iteration 33, L1 7.74092e-05, Linf 0.00514575, total time[s] 0.106895 +Converged at iteration 28, L1 7.75186e-05, Linf 0.00385743, total time[s] 0.104642 +Converged at iteration 24, L1 8.34461e-05, Linf 0.00221805, total time[s] 0.081265 +Converged at iteration 25, L1 9.66685e-05, Linf 0.00485352, total time[s] 0.088733 +Converged at iteration 39, L1 9.72094e-05, Linf 0.00529585, total time[s] 0.139209 +Converged at iteration 36, L1 7.06191e-05, Linf 0.00363228, total time[s] 0.1141 +Converged at iteration 27, L1 9.85966e-05, Linf 0.00665359, total time[s] 0.100607 +Converged at iteration 31, L1 6.11388e-05, Linf 0.00507107, total time[s] 0.104616 +Converged at iteration 26, L1 8.07642e-05, Linf 0.00553559, total time[s] 0.086913 +Converged at iteration 21, L1 8.03378e-05, Linf 0.0041096, total time[s] 0.117343 +Converged at iteration 20, L1 8.47304e-05, Linf 0.00536266, total time[s] 0.084074 +Converged at iteration 23, L1 5.8752e-05, Linf 0.00629449, total time[s] 0.088554 +Converged at iteration 27, L1 7.2986e-05, Linf 0.00541852, total time[s] 0.114407 +Converged at iteration 25, L1 9.08127e-05, Linf 0.00415531, total time[s] 0.086891 +Converged at iteration 21, L1 5.10924e-05, Linf 0.00420459, total time[s] 0.079245 +Converged at iteration 17, L1 9.53672e-05, Linf 0.00418832, total time[s] 0.066104 +Converged at iteration 31, L1 8.62938e-05, Linf 0.00273476, total time[s] 0.096451 +Converged at iteration 20, L1 7.23243e-05, Linf 0.00527635, total time[s] 0.082264 +Converged at iteration 24, L1 6.59143e-05, Linf 0.00508257, total time[s] 0.085433 +Converged at iteration 29, L1 6.84709e-05, Linf 0.00288654, total time[s] 0.096555 +Converged at iteration 24, L1 7.10506e-05, Linf 0.00534392, total time[s] 0.067564 +Converged at iteration 22, L1 7.02744e-05, Linf 0.00395394, total time[s] 0.069445 +Converged at iteration 23, L1 8.86094e-05, Linf 0.0044848, total time[s] 0.068008 +Converged at iteration 26, L1 6.61838e-05, Linf 0.00482354, total time[s] 0.10838 +Converged at iteration 29, L1 6.69237e-05, Linf 0.00419068, total time[s] 0.104955 +Converged at iteration 30, L1 9.0413e-05, Linf 0.00463142, total time[s] 0.108837 +Converged at iteration 29, L1 7.63981e-05, Linf 0.00312476, total time[s] 0.101789 +Converged at iteration 29, L1 8.59313e-05, Linf 0.00314945, total time[s] 0.159916 +Converged at iteration 31, L1 8.09877e-05, Linf 0.00332375, total time[s] 0.361235 +Converged at iteration 32, L1 9.65686e-05, Linf 0.00500642, total time[s] 0.167356 +Converged at iteration 33, L1 7.58955e-05, Linf 0.0051532, total time[s] 0.148467 +Converged at iteration 28, L1 7.46764e-05, Linf 0.00380033, total time[s] 0.131625 +Converged at iteration 24, L1 8.77727e-05, Linf 0.00205701, total time[s] 0.114694 +Converged at iteration 25, L1 8.36052e-05, Linf 0.00462421, total time[s] 0.110767 +Converged at iteration 39, L1 9.48284e-05, Linf 0.00555155, total time[s] 0.114173 +Converged at iteration 36, L1 7.20485e-05, Linf 0.00385516, total time[s] 0.11998 +Converged at iteration 27, L1 5.32822e-05, Linf 0.00559797, total time[s] 0.094709 +Converged at iteration 31, L1 6.00264e-05, Linf 0.00507593, total time[s] 0.106765 +Converged at iteration 26, L1 7.57588e-05, Linf 0.00538576, total time[s] 0.100447 +Converged at iteration 21, L1 7.33036e-05, Linf 0.00382345, total time[s] 0.074821 +Converged at iteration 20, L1 7.05517e-05, Linf 0.00516577, total time[s] 0.062588 +Converged at iteration 22, L1 7.66046e-05, Linf 0.00744705, total time[s] 0.099142 +Converged at iteration 26, L1 9.4048e-05, Linf 0.00644281, total time[s] 0.081451 +Converged at iteration 25, L1 7.76901e-05, Linf 0.00410962, total time[s] 0.143178 +Converged at iteration 20, L1 9.1299e-05, Linf 0.00556601, total time[s] 0.061464 +Converged at iteration 17, L1 8.515e-05, Linf 0.00392012, total time[s] 0.051973 +Converged at iteration 31, L1 9.08773e-05, Linf 0.002756, total time[s] 0.121175 +Converged at iteration 20, L1 6.7166e-05, Linf 0.0054072, total time[s] 0.058021 +Converged at iteration 24, L1 6.29859e-05, Linf 0.00581609, total time[s] 0.089349 +Converged at iteration 28, L1 8.10948e-05, Linf 0.00352057, total time[s] 0.117947 +Converged at iteration 24, L1 5.78505e-05, Linf 0.00526551, total time[s] 0.112871 +Converged at iteration 21, L1 9.76678e-05, Linf 0.00469458, total time[s] 0.06884 +Converged at iteration 23, L1 8.3022e-05, Linf 0.00422561, total time[s] 0.066151 +Converged at iteration 26, L1 6.47544e-05, Linf 0.00442678, total time[s] 0.06734 +Converged at iteration 29, L1 6.54225e-05, Linf 0.00380989, total time[s] 0.098188 +Converged at iteration 30, L1 7.70184e-05, Linf 0.004616, total time[s] 0.102485 +Converged at iteration 28, L1 9.49155e-05, Linf 0.00355117, total time[s] 0.08342 +Converged at iteration 29, L1 8.91055e-05, Linf 0.00329742, total time[s] 0.095909 +Converged at iteration 31, L1 6.99109e-05, Linf 0.00282791, total time[s] 0.098943 +Converged at iteration 31, L1 9.1914e-05, Linf 0.00445822, total time[s] 0.094253 +Converged at iteration 33, L1 7.37373e-05, Linf 0.00537337, total time[s] 0.107355 +Converged at iteration 28, L1 6.96197e-05, Linf 0.0036915, total time[s] 0.074173 +Converged at iteration 24, L1 9.34951e-05, Linf 0.00183474, total time[s] 0.078312 +Converged at iteration 25, L1 6.67641e-05, Linf 0.00412759, total time[s] 0.090327 +Converged at iteration 39, L1 9.45954e-05, Linf 0.00525435, total time[s] 0.124184 +Converged at iteration 36, L1 7.21781e-05, Linf 0.00370557, total time[s] 0.106729 +Converged at iteration 27, L1 7.24948e-05, Linf 0.00616478, total time[s] 0.075607 +Converged at iteration 31, L1 6.05004e-05, Linf 0.00510401, total time[s] 0.104196 +Converged at iteration 26, L1 7.85902e-05, Linf 0.00543182, total time[s] 0.088044 +Converged at iteration 21, L1 7.69892e-05, Linf 0.00397003, total time[s] 0.094868 +Converged at iteration 20, L1 7.71147e-05, Linf 0.00528872, total time[s] 0.082349 +Converged at iteration 22, L1 9.33428e-05, Linf 0.00775534, total time[s] 0.076593 +Converged at iteration 27, L1 6.20815e-05, Linf 0.00528103, total time[s] 0.083905 +Converged at iteration 25, L1 8.40554e-05, Linf 0.00414245, total time[s] 0.07449 +Converged at iteration 20, L1 9.6659e-05, Linf 0.00555259, total time[s] 0.061344 +Converged at iteration 17, L1 8.9972e-05, Linf 0.00407886, total time[s] 0.075005 +Converged at iteration 31, L1 8.86209e-05, Linf 0.00272652, total time[s] 0.098303 +Converged at iteration 20, L1 6.94813e-05, Linf 0.00534931, total time[s] 0.063623 +Converged at iteration 24, L1 6.42779e-05, Linf 0.00553765, total time[s] 0.069842 +Converged at iteration 28, L1 9.06345e-05, Linf 0.00366757, total time[s] 0.121516 +Converged at iteration 24, L1 6.39267e-05, Linf 0.00530621, total time[s] 0.075491 +Converged at iteration 22, L1 6.43055e-05, Linf 0.00382633, total time[s] 0.071054 +Converged at iteration 23, L1 8.57328e-05, Linf 0.00436601, total time[s] 0.073933 +Converged at iteration 26, L1 6.54217e-05, Linf 0.00464276, total time[s] 0.081358 +Converged at iteration 29, L1 6.59482e-05, Linf 0.00413448, total time[s] 0.102265 +Converged at iteration 30, L1 8.23552e-05, Linf 0.00461567, total time[s] 0.108401 +Converged at iteration 29, L1 6.76614e-05, Linf 0.00297577, total time[s] 0.147446 +Converged at iteration 29, L1 8.88746e-05, Linf 0.00322444, total time[s] 0.131465 +Converged at iteration 31, L1 7.58544e-05, Linf 0.00306238, total time[s] 0.103977 +Converged at iteration 32, L1 7.42555e-05, Linf 0.00407026, total time[s] 0.098928 +Converged at iteration 33, L1 7.51367e-05, Linf 0.00525854, total time[s] 0.101251 +Converged at iteration 28, L1 7.29239e-05, Linf 0.00374912, total time[s] 0.102313 +Converged at iteration 24, L1 9.18887e-05, Linf 0.00197332, total time[s] 0.07903 +Converged at iteration 25, L1 7.45538e-05, Linf 0.00439763, total time[s] 0.075009 +Converged at iteration 39, L1 9.41216e-05, Linf 0.00548583, total time[s] 0.126124 +Converged at iteration 36, L1 7.32633e-05, Linf 0.00392288, total time[s] 0.151068 +Converged at iteration 26, L1 9.16503e-05, Linf 0.00703899, total time[s] 0.08695 +Converged at iteration 31, L1 5.98827e-05, Linf 0.00507619, total time[s] 0.090301 +Converged at iteration 26, L1 7.44543e-05, Linf 0.00541456, total time[s] 0.091409 +Converged at iteration 21, L1 7.11053e-05, Linf 0.0037316, total time[s] 0.071729 +Converged at iteration 20, L1 6.70073e-05, Linf 0.00510395, total time[s] 0.063258 +Converged at iteration 22, L1 6.82813e-05, Linf 0.00725313, total time[s] 0.079925 +Converged at iteration 26, L1 8.62691e-05, Linf 0.00632531, total time[s] 0.09642 +Converged at iteration 25, L1 7.4525e-05, Linf 0.00408938, total time[s] 0.071772 +Converged at iteration 20, L1 8.86551e-05, Linf 0.00554869, total time[s] 0.066491 +Converged at iteration 17, L1 8.26879e-05, Linf 0.00381026, total time[s] 0.05827 +Converged at iteration 31, L1 9.22989e-05, Linf 0.00273932, total time[s] 0.10737 +Converged at iteration 20, L1 6.60707e-05, Linf 0.00542973, total time[s] 0.095552 +Converged at iteration 24, L1 6.23837e-05, Linf 0.0055481, total time[s] 0.074991 +Converged at iteration 28, L1 7.68432e-05, Linf 0.00343194, total time[s] 0.098501 +Converged at iteration 23, L1 9.97292e-05, Linf 0.00755615, total time[s] 0.11022 +Converged at iteration 21, L1 9.44231e-05, Linf 0.00464943, total time[s] 0.069609 +Converged at iteration 23, L1 8.18011e-05, Linf 0.00413266, total time[s] 0.109899 +Converged at iteration 26, L1 6.44499e-05, Linf 0.00418289, total time[s] 0.085338 +Converged at iteration 28, L1 9.86645e-05, Linf 0.00580193, total time[s] 0.091009 +Converged at iteration 30, L1 7.49573e-05, Linf 0.0046114, total time[s] 0.090341 +Converged at iteration 28, L1 9.08581e-05, Linf 0.00349457, total time[s] 0.096966 +Converged at iteration 29, L1 8.85455e-05, Linf 0.0033156, total time[s] 0.096397 +Converged at iteration 30, L1 9.83992e-05, Linf 0.00340478, total time[s] 0.097352 +Converged at iteration 31, L1 8.24075e-05, Linf 0.00373983, total time[s] 0.11218 +Converged at iteration 33, L1 7.29407e-05, Linf 0.00533732, total time[s] 0.106133 +Converged at iteration 28, L1 6.81476e-05, Linf 0.00365643, total time[s] 0.095756 +Converged at iteration 24, L1 9.42766e-05, Linf 0.00177223, total time[s] 0.127124 +Converged at iteration 25, L1 6.26847e-05, Linf 0.00388886, total time[s] 0.074122 +Converged at iteration 39, L1 9.31665e-05, Linf 0.00546919, total time[s] 0.108382 +Converged at iteration 36, L1 7.2079e-05, Linf 0.00383274, total time[s] 0.115035 +Converged at iteration 27, L1 5.64504e-05, Linf 0.00571972, total time[s] 0.079962 +Converged at iteration 31, L1 6.00722e-05, Linf 0.00507546, total time[s] 0.101615 +Converged at iteration 26, L1 7.63927e-05, Linf 0.00545272, total time[s] 0.079148 +Converged at iteration 21, L1 7.41223e-05, Linf 0.00385262, total time[s] 0.062544 +Converged at iteration 20, L1 7.17393e-05, Linf 0.00519406, total time[s] 0.066405 +Converged at iteration 22, L1 7.95473e-05, Linf 0.00756525, total time[s] 0.084464 +Converged at iteration 26, L1 9.65327e-05, Linf 0.00647531, total time[s] 0.091258 +Converged at iteration 25, L1 7.91588e-05, Linf 0.00411593, total time[s] 0.085432 +Converged at iteration 20, L1 9.22082e-05, Linf 0.00556997, total time[s] 0.064763 +Converged at iteration 17, L1 8.6009e-05, Linf 0.00395352, total time[s] 0.056906 +Converged at iteration 31, L1 9.04195e-05, Linf 0.00275406, total time[s] 0.10627 +Converged at iteration 20, L1 6.78289e-05, Linf 0.00539705, total time[s] 0.108918 +Converged at iteration 24, L1 6.34061e-05, Linf 0.00554086, total time[s] 0.074722 +Converged at iteration 28, L1 8.30709e-05, Linf 0.00354713, total time[s] 0.100944 +Converged at iteration 24, L1 5.91071e-05, Linf 0.00527208, total time[s] 0.062792 +Converged at iteration 21, L1 9.9098e-05, Linf 0.00470941, total time[s] 0.058644 +Converged at iteration 23, L1 8.35936e-05, Linf 0.00425433, total time[s] 0.067573 +Converged at iteration 26, L1 6.48784e-05, Linf 0.00447249, total time[s] 0.082503 +Converged at iteration 28, L1 9.98704e-05, Linf 0.0059, total time[s] 0.0879 +Converged at iteration 30, L1 7.94643e-05, Linf 0.0046167, total time[s] 0.086593 +Converged at iteration 28, L1 9.67401e-05, Linf 0.0035719, total time[s] 0.08775 +Converged at iteration 29, L1 8.95907e-05, Linf 0.00327492, total time[s] 0.08601 +Converged at iteration 31, L1 7.08979e-05, Linf 0.00287588, total time[s] 0.084181 +Converged at iteration 31, L1 9.57309e-05, Linf 0.00463906, total time[s] 0.095507 +Converged at iteration 33, L1 7.3875e-05, Linf 0.00529815, total time[s] 0.112234 +Converged at iteration 28, L1 7.0088e-05, Linf 0.00370283, total time[s] 0.090117 +Converged at iteration 24, L1 9.34467e-05, Linf 0.00185807, total time[s] 0.069115 +Converged at iteration 25, L1 6.78247e-05, Linf 0.00416819, total time[s] 0.094654 +Converged at iteration 39, L1 9.17376e-05, Linf 0.0056593, total time[s] 0.147884 +Converged at iteration 36, L1 7.26007e-05, Linf 0.00398216, total time[s] 0.107111 +Converged at iteration 26, L1 8.16499e-05, Linf 0.00676482, total time[s] 0.072595 +Converged at iteration 31, L1 5.97737e-05, Linf 0.00507593, total time[s] 0.08157 +Converged at iteration 26, L1 7.30821e-05, Linf 0.0053909, total time[s] 0.081623 +Converged at iteration 21, L1 6.98695e-05, Linf 0.00365623, total time[s] 0.114649 +Converged at iteration 20, L1 6.44317e-05, Linf 0.0049888, total time[s] 0.1049 +Converged at iteration 22, L1 6.23596e-05, Linf 0.00707221, total time[s] 0.067343 +Converged at iteration 26, L1 8.04669e-05, Linf 0.00620737, total time[s] 0.076328 +Converged at iteration 25, L1 7.22774e-05, Linf 0.00407302, total time[s] 0.072588 +Converged at iteration 20, L1 8.68319e-05, Linf 0.0055291, total time[s] 0.060314 +Converged at iteration 17, L1 8.10131e-05, Linf 0.00371616, total time[s] 0.054548 +Converged at iteration 31, L1 9.33242e-05, Linf 0.00276437, total time[s] 0.119598 +Converged at iteration 20, L1 6.54449e-05, Linf 0.00544072, total time[s] 0.062652 +Converged at iteration 24, L1 6.138e-05, Linf 0.00554313, total time[s] 0.072931 +Converged at iteration 28, L1 7.40587e-05, Linf 0.00336816, total time[s] 0.076019 +Converged at iteration 23, L1 9.48041e-05, Linf 0.00687957, total time[s] 0.070861 +Converged at iteration 21, L1 9.17638e-05, Linf 0.00465694, total time[s] 0.097303 +Converged at iteration 23, L1 8.10246e-05, Linf 0.00405695, total time[s] 0.073717 +Converged at iteration 26, L1 6.41475e-05, Linf 0.00417243, total time[s] 0.075225 +Converged at iteration 28, L1 9.77818e-05, Linf 0.00573617, total time[s] 0.077469 +Converged at iteration 30, L1 7.33768e-05, Linf 0.00461171, total time[s] 0.11987 +Converged at iteration 28, L1 8.82533e-05, Linf 0.00345467, total time[s] 0.087579 +Converged at iteration 29, L1 8.81436e-05, Linf 0.00334495, total time[s] 0.07778 +Converged at iteration 30, L1 9.5693e-05, Linf 0.00328061, total time[s] 0.094237 +Converged at iteration 31, L1 7.43676e-05, Linf 0.00308556, total time[s] 0.085675 +Converged at iteration 33, L1 7.24391e-05, Linf 0.00536132, total time[s] 0.112652 +Converged at iteration 28, L1 6.69404e-05, Linf 0.00362926, total time[s] 0.083621 +Converged at iteration 24, L1 9.49549e-05, Linf 0.00181199, total time[s] 0.069332 +Converged at iteration 24, L1 9.83777e-05, Linf 0.00513156, total time[s] 0.078465 +Converged at iteration 39, L1 8.84174e-05, Linf 0.00578771, total time[s] 0.128275 +Converged at iteration 36, L1 7.31401e-05, Linf 0.00423031, total time[s] 0.105304 +Converged at iteration 26, L1 5.20573e-05, Linf 0.00508058, total time[s] 0.119162 +Converged at iteration 31, L1 5.91975e-05, Linf 0.00507221, total time[s] 0.080439 +Converged at iteration 26, L1 6.7878e-05, Linf 0.00528512, total time[s] 0.075494 +Converged at iteration 21, L1 6.43982e-05, Linf 0.00331144, total time[s] 0.055175 +Converged at iteration 20, L1 5.50482e-05, Linf 0.00451232, total time[s] 0.056254 +Converged at iteration 21, L1 9.8271e-05, Linf 0.00877139, total time[s] 0.063925 +Converged at iteration 26, L1 5.88977e-05, Linf 0.00552945, total time[s] 0.089751 +Converged at iteration 25, L1 6.36674e-05, Linf 0.00400268, total time[s] 0.071829 +Converged at iteration 20, L1 7.94431e-05, Linf 0.00547534, total time[s] 0.064491 +Converged at iteration 17, L1 7.41465e-05, Linf 0.0032915, total time[s] 0.082047 +Converged at iteration 31, L1 9.77317e-05, Linf 0.00277937, total time[s] 0.109313 +Converged at iteration 20, L1 6.3423e-05, Linf 0.00538287, total time[s] 0.065034 +Converged at iteration 23, L1 9.70623e-05, Linf 0.00648372, total time[s] 0.074502 +Converged at iteration 27, L1 9.61571e-05, Linf 0.00458143, total time[s] 0.110506 +Converged at iteration 23, L1 8.55474e-05, Linf 0.00687524, total time[s] 0.068992 +Converged at iteration 21, L1 8.23979e-05, Linf 0.00446421, total time[s] 0.061456 +Converged at iteration 23, L1 7.78058e-05, Linf 0.00374377, total time[s] 0.085869 +Converged at iteration 25, L1 9.7828e-05, Linf 0.00630354, total time[s] 0.088582 +Converged at iteration 28, L1 9.47888e-05, Linf 0.00537364, total time[s] 0.092708 +Converged at iteration 30, L1 6.69001e-05, Linf 0.00462306, total time[s] 0.09789 +Converged at iteration 28, L1 7.92374e-05, Linf 0.00329054, total time[s] 0.08285 +Converged at iteration 29, L1 8.50401e-05, Linf 0.00345618, total time[s] 0.080683 +Converged at iteration 30, L1 8.71442e-05, Linf 0.00282157, total time[s] 0.078222 +Converged at iteration 30, L1 8.73512e-05, Linf 0.00257348, total time[s] 0.083102 +Converged at iteration 33, L1 7.00856e-05, Linf 0.00546072, total time[s] 0.096004 +Converged at iteration 27, L1 9.70556e-05, Linf 0.00413426, total time[s] 0.077644 +Converged at iteration 24, L1 9.73513e-05, Linf 0.00199646, total time[s] 0.075106 +Converged at iteration 24, L1 8.39271e-05, Linf 0.0043582, total time[s] 0.082903 +Converged at iteration 39, L1 9.18292e-05, Linf 0.00568812, total time[s] 0.128145 +Converged at iteration 36, L1 7.29498e-05, Linf 0.00410557, total time[s] 0.128733 +Converged at iteration 26, L1 6.43172e-05, Linf 0.00596899, total time[s] 0.109023 +Converged at iteration 31, L1 5.96659e-05, Linf 0.00510521, total time[s] 0.087588 +Converged at iteration 26, L1 7.05691e-05, Linf 0.00533891, total time[s] 0.073358 +Converged at iteration 21, L1 6.72485e-05, Linf 0.00348717, total time[s] 0.058314 +Converged at iteration 20, L1 5.94206e-05, Linf 0.00481362, total time[s] 0.075382 +Converged at iteration 22, L1 5.19548e-05, Linf 0.00768808, total time[s] 0.069495 +Converged at iteration 26, L1 6.90945e-05, Linf 0.00591532, total time[s] 0.077766 +Converged at iteration 25, L1 6.96455e-05, Linf 0.00958207, total time[s] 0.077901 +Converged at iteration 20, L1 8.24614e-05, Linf 0.00548658, total time[s] 0.053799 +Converged at iteration 17, L1 7.76858e-05, Linf 0.0035046, total time[s] 0.052424 +Converged at iteration 31, L1 9.56067e-05, Linf 0.00277152, total time[s] 0.089784 +Converged at iteration 20, L1 6.42991e-05, Linf 0.00543507, total time[s] 0.064859 +Converged at iteration 23, L1 9.94551e-05, Linf 0.00607271, total time[s] 0.091404 +Converged at iteration 28, L1 6.70762e-05, Linf 0.00322199, total time[s] 0.075048 +Converged at iteration 23, L1 9.02963e-05, Linf 0.00694191, total time[s] 0.070684 +Converged at iteration 21, L1 8.68319e-05, Linf 0.0045383, total time[s] 0.068705 +Converged at iteration 23, L1 7.95494e-05, Linf 0.00389566, total time[s] 0.069655 +Converged at iteration 25, L1 9.93763e-05, Linf 0.00633351, total time[s] 0.107416 +Converged at iteration 28, L1 9.6447e-05, Linf 0.00556226, total time[s] 0.090816 +Converged at iteration 30, L1 6.95193e-05, Linf 0.00458411, total time[s] 0.08129 +Converged at iteration 28, L1 8.33315e-05, Linf 0.00340318, total time[s] 0.076699 +Converged at iteration 29, L1 8.69276e-05, Linf 0.00340238, total time[s] 0.08955 +Converged at iteration 30, L1 9.0553e-05, Linf 0.00304226, total time[s] 0.083094 +Converged at iteration 30, L1 9.90579e-05, Linf 0.00347477, total time[s] 0.078935 +Converged at iteration 33, L1 7.12251e-05, Linf 0.00541143, total time[s] 0.089987 +Converged at iteration 28, L1 6.42761e-05, Linf 0.0035659, total time[s] 0.082766 +Converged at iteration 24, L1 9.62852e-05, Linf 0.00191422, total time[s] 0.069409 +Converged at iteration 24, L1 9.03513e-05, Linf 0.00473239, total time[s] 0.089721 +Converged at iteration 39, L1 8.86361e-05, Linf 0.00584215, total time[s] 0.127066 +Converged at iteration 36, L1 7.31895e-05, Linf 0.00430695, total time[s] 0.101008 +Converged at iteration 25, L1 9.77812e-05, Linf 0.00709459, total time[s] 0.076233 +Converged at iteration 31, L1 5.89975e-05, Linf 0.00507072, total time[s] 0.089309 +Converged at iteration 26, L1 6.63819e-05, Linf 0.00525182, total time[s] 0.074573 +Converged at iteration 21, L1 6.30319e-05, Linf 0.00319932, total time[s] 0.080073 +Converged at iteration 20, L1 5.28074e-05, Linf 0.00440045, total time[s] 0.060011 +Converged at iteration 21, L1 9.13054e-05, Linf 0.00908385, total time[s] 0.065619 +Converged at iteration 26, L1 5.34073e-05, Linf 0.00523025, total time[s] 0.073406 +Converged at iteration 25, L1 6.2003e-05, Linf 0.00398937, total time[s] 0.075646 +Converged at iteration 20, L1 7.7717e-05, Linf 0.00548595, total time[s] 0.062731 +Converged at iteration 17, L1 7.21112e-05, Linf 0.00316672, total time[s] 0.049077 +Converged at iteration 31, L1 9.89616e-05, Linf 0.00278615, total time[s] 0.086679 +Converged at iteration 20, L1 6.30245e-05, Linf 0.00517813, total time[s] 0.063458 +Converged at iteration 23, L1 9.56412e-05, Linf 0.00653632, total time[s] 0.070387 +Converged at iteration 27, L1 9.21336e-05, Linf 0.00451299, total time[s] 0.086877 +Converged at iteration 23, L1 8.36568e-05, Linf 0.00684274, total time[s] 0.069093 +Converged at iteration 21, L1 8.01447e-05, Linf 0.00441964, total time[s] 0.056415 +Converged at iteration 23, L1 7.70205e-05, Linf 0.0036573, total time[s] 0.062184 +Converged at iteration 25, L1 9.69305e-05, Linf 0.00625843, total time[s] 0.088376 +Converged at iteration 28, L1 9.38297e-05, Linf 0.0050671, total time[s] 0.08882 +Converged at iteration 30, L1 6.56448e-05, Linf 0.00461936, total time[s] 0.080599 +Converged at iteration 28, L1 7.76155e-05, Linf 0.00325057, total time[s] 0.076664 +Converged at iteration 29, L1 8.39949e-05, Linf 0.00348331, total time[s] 0.085456 +Converged at iteration 30, L1 8.39267e-05, Linf 0.00268878, total time[s] 0.118764 +Converged at iteration 30, L1 8.07693e-05, Linf 0.00240817, total time[s] 0.164954 +Converged at iteration 33, L1 6.94827e-05, Linf 0.00549085, total time[s] 0.103737 +Converged at iteration 27, L1 9.55199e-05, Linf 0.00408643, total time[s] 0.083359 +Converged at iteration 24, L1 9.85362e-05, Linf 0.00199979, total time[s] 0.065001 +Converged at iteration 24, L1 8.07435e-05, Linf 0.00411981, total time[s] 0.067566 +Converged at iteration 39, L1 8.90342e-05, Linf 0.00576557, total time[s] 0.114082 +Converged at iteration 36, L1 7.30999e-05, Linf 0.00420571, total time[s] 0.116477 +Converged at iteration 26, L1 5.40576e-05, Linf 0.00522625, total time[s] 0.09177 +Converged at iteration 31, L1 5.97492e-05, Linf 0.00507242, total time[s] 0.102435 +Converged at iteration 26, L1 6.96248e-05, Linf 0.00612881, total time[s] 0.099914 +Converged at iteration 21, L1 6.56221e-05, Linf 0.00334811, total time[s] 0.074816 +Converged at iteration 20, L1 5.5958e-05, Linf 0.00459054, total time[s] 0.146515 +Converged at iteration 22, L1 4.41879e-05, Linf 0.00655915, total time[s] 0.088934 +Converged at iteration 26, L1 6.0833e-05, Linf 0.00564097, total time[s] 0.113776 +Converged at iteration 25, L1 6.57161e-05, Linf 0.00402743, total time[s] 0.096882 +Converged at iteration 20, L1 7.99175e-05, Linf 0.00547458, total time[s] 0.072155 +Converged at iteration 17, L1 7.48466e-05, Linf 0.00333274, total time[s] 0.058454 +Converged at iteration 31, L1 9.73803e-05, Linf 0.00277752, total time[s] 0.123032 +Converged at iteration 20, L1 6.35478e-05, Linf 0.0053974, total time[s] 0.078955 +Converged at iteration 23, L1 9.75833e-05, Linf 0.00646714, total time[s] 0.068039 +Converged at iteration 27, L1 9.76374e-05, Linf 0.00458578, total time[s] 0.080869 +Converged at iteration 23, L1 8.6862e-05, Linf 0.00687521, total time[s] 0.078493 +Converged at iteration 21, L1 8.33588e-05, Linf 0.00447858, total time[s] 0.07474 +Converged at iteration 23, L1 7.82633e-05, Linf 0.00377215, total time[s] 0.085268 +Converged at iteration 25, L1 9.81426e-05, Linf 0.00625273, total time[s] 0.089202 +Converged at iteration 28, L1 9.52977e-05, Linf 0.00541012, total time[s] 0.089521 +Converged at iteration 30, L1 6.75001e-05, Linf 0.00461963, total time[s] 0.171841 +Converged at iteration 28, L1 8.00064e-05, Linf 0.00330611, total time[s] 0.115135 +Converged at iteration 29, L1 8.5643e-05, Linf 0.0034473, total time[s] 0.151923 +Converged at iteration 30, L1 8.7388e-05, Linf 0.00286424, total time[s] 0.100083 +Converged at iteration 30, L1 8.91031e-05, Linf 0.00272051, total time[s] 0.091643 +Converged at iteration 33, L1 7.02882e-05, Linf 0.00539232, total time[s] 0.085986 +Converged at iteration 27, L1 9.76373e-05, Linf 0.00420064, total time[s] 0.070739 +Converged at iteration 24, L1 9.72681e-05, Linf 0.00197947, total time[s] 0.077377 +Converged at iteration 24, L1 8.50305e-05, Linf 0.00444355, total time[s] 0.090115 +Converged at iteration 39, L1 8.62026e-05, Linf 0.00588829, total time[s] 0.124491 +Converged at iteration 36, L1 7.35189e-05, Linf 0.00436697, total time[s] 0.106059 +Converged at iteration 25, L1 9.1044e-05, Linf 0.00668698, total time[s] 0.068213 +Converged at iteration 31, L1 5.93575e-05, Linf 0.00506964, total time[s] 0.117688 +Converged at iteration 26, L1 6.53298e-05, Linf 0.00522464, total time[s] 0.079441 +Converged at iteration 21, L1 6.19423e-05, Linf 0.00310739, total time[s] 0.059867 +Converged at iteration 20, L1 5.0918e-05, Linf 0.00430772, total time[s] 0.067045 +Converged at iteration 21, L1 8.60705e-05, Linf 0.00953025, total time[s] 0.078439 +Converged at iteration 25, L1 9.48667e-05, Linf 0.00686619, total time[s] 0.075895 +Converged at iteration 25, L1 5.96768e-05, Linf 0.00396362, total time[s] 0.090721 +Converged at iteration 20, L1 7.64372e-05, Linf 0.00549702, total time[s] 0.074145 +Converged at iteration 17, L1 7.05537e-05, Linf 0.00321369, total time[s] 0.053824 +Converged at iteration 31, L1 9.993e-05, Linf 0.00278929, total time[s] 0.085267 +Converged at iteration 20, L1 6.45674e-05, Linf 0.00527479, total time[s] 0.06417 +Converged at iteration 23, L1 9.46525e-05, Linf 0.00658091, total time[s] 0.101069 +Converged at iteration 27, L1 8.95813e-05, Linf 0.00446634, total time[s] 0.084994 +Converged at iteration 23, L1 8.19584e-05, Linf 0.00685173, total time[s] 0.063576 +Converged at iteration 21, L1 7.84251e-05, Linf 0.00438593, total time[s] 0.062962 +Converged at iteration 23, L1 7.66117e-05, Linf 0.00376212, total time[s] 0.070356 +Converged at iteration 25, L1 9.62596e-05, Linf 0.00620616, total time[s] 0.074413 +Converged at iteration 28, L1 9.30191e-05, Linf 0.0051805, total time[s] 0.088737 +Converged at iteration 30, L1 6.47399e-05, Linf 0.00461364, total time[s] 0.095008 +Converged at iteration 28, L1 7.63964e-05, Linf 0.00321852, total time[s] 0.083716 +Converged at iteration 29, L1 8.31882e-05, Linf 0.00350779, total time[s] 0.101662 +Converged at iteration 30, L1 8.24267e-05, Linf 0.00262295, total time[s] 0.084449 +Converged at iteration 30, L1 7.64371e-05, Linf 0.00233032, total time[s] 0.08426 +Converged at iteration 33, L1 6.90633e-05, Linf 0.00551431, total time[s] 0.100883 +Converged at iteration 27, L1 9.35588e-05, Linf 0.00404699, total time[s] 0.073826 +Converged at iteration 24, L1 9.88706e-05, Linf 0.00206652, total time[s] 0.0667 +Converged at iteration 24, L1 7.76022e-05, Linf 0.00395219, total time[s] 0.079168 +Converged at iteration 39, L1 8.26288e-05, Linf 0.00608314, total time[s] 0.119563 +Converged at iteration 36, L1 7.31214e-05, Linf 0.00463274, total time[s] 0.100817 +Converged at iteration 25, L1 6.94847e-05, Linf 0.00485718, total time[s] 0.076776 +Converged at iteration 31, L1 5.81802e-05, Linf 0.00506992, total time[s] 0.091004 +Converged at iteration 26, L1 6.02387e-05, Linf 0.00510644, total time[s] 0.09465 +Converged at iteration 21, L1 5.85636e-05, Linf 0.00277794, total time[s] 0.059668 +Converged at iteration 19, L1 9.26845e-05, Linf 0.00619753, total time[s] 0.078908 +Converged at iteration 21, L1 6.70891e-05, Linf 0.00694087, total time[s] 0.056422 +Converged at iteration 25, L1 7.30663e-05, Linf 0.00591105, total time[s] 0.080577 +Converged at iteration 25, L1 5.34694e-05, Linf 0.0038913, total time[s] 0.083446 +Converged at iteration 20, L1 7.13867e-05, Linf 0.00546085, total time[s] 0.062223 +Converged at iteration 17, L1 6.54377e-05, Linf 0.00288762, total time[s] 0.050424 +Converged at iteration 32, L1 6.57354e-05, Linf 0.00233949, total time[s] 0.095483 +Converged at iteration 20, L1 6.19594e-05, Linf 0.00492256, total time[s] 0.088788 +Converged at iteration 23, L1 9.02547e-05, Linf 0.00679497, total time[s] 0.087581 +Converged at iteration 27, L1 7.8777e-05, Linf 0.00424908, total time[s] 0.09243 +Converged at iteration 23, L1 7.57667e-05, Linf 0.0066627, total time[s] 0.063947 +Converged at iteration 21, L1 7.08312e-05, Linf 0.00425225, total time[s] 0.060296 +Converged at iteration 23, L1 7.54933e-05, Linf 0.00336012, total time[s] 0.095683 +Converged at iteration 25, L1 9.44971e-05, Linf 0.00582803, total time[s] 0.07585 +Converged at iteration 28, L1 8.93556e-05, Linf 0.0047259, total time[s] 0.081935 +Converged at iteration 30, L1 6.12325e-05, Linf 0.00460909, total time[s] 0.131409 +Converged at iteration 28, L1 7.22498e-05, Linf 0.00308969, total time[s] 0.117943 +Converged at iteration 29, L1 8.10373e-05, Linf 0.00358913, total time[s] 0.108449 +Converged at iteration 30, L1 7.72171e-05, Linf 0.00234984, total time[s] 0.108564 +Converged at iteration 29, L1 9.61879e-05, Linf 0.00269614, total time[s] 0.105876 +Converged at iteration 33, L1 6.65906e-05, Linf 0.00561561, total time[s] 0.087923 +Converged at iteration 27, L1 8.59921e-05, Linf 0.00387295, total time[s] 0.103557 +Converged at iteration 25, L1 7.06175e-05, Linf 0.00172132, total time[s] 0.14596 +Converged at iteration 24, L1 6.85575e-05, Linf 0.00329161, total time[s] 0.108629 +Converged at iteration 39, L1 8.43194e-05, Linf 0.00598651, total time[s] 0.118251 +Converged at iteration 36, L1 7.35882e-05, Linf 0.00449692, total time[s] 0.168895 +Converged at iteration 25, L1 7.87132e-05, Linf 0.00569838, total time[s] 0.103357 +Converged at iteration 31, L1 5.89784e-05, Linf 0.00506871, total time[s] 0.103589 +Converged at iteration 26, L1 6.27256e-05, Linf 0.00516634, total time[s] 0.068804 +Converged at iteration 21, L1 6.10955e-05, Linf 0.00289857, total time[s] 0.07425 +Converged at iteration 19, L1 9.64951e-05, Linf 0.00642454, total time[s] 0.049856 +Converged at iteration 21, L1 7.59025e-05, Linf 0.00789721, total time[s] 0.068309 +Converged at iteration 25, L1 8.34354e-05, Linf 0.00649003, total time[s] 0.110523 +Converged at iteration 25, L1 5.66011e-05, Linf 0.00392722, total time[s] 0.0671 +Converged at iteration 20, L1 7.34638e-05, Linf 0.00550278, total time[s] 0.065315 +Converged at iteration 17, L1 6.7587e-05, Linf 0.00299181, total time[s] 0.073144 +Converged at iteration 32, L1 6.48425e-05, Linf 0.00231081, total time[s] 0.194275 +Converged at iteration 20, L1 6.24498e-05, Linf 0.00511827, total time[s] 0.066244 +Converged at iteration 23, L1 9.25981e-05, Linf 0.00668284, total time[s] 0.082239 +Converged at iteration 27, L1 8.43441e-05, Linf 0.00436262, total time[s] 0.098536 +Converged at iteration 23, L1 7.85292e-05, Linf 0.00683037, total time[s] 0.07603 +Converged at iteration 21, L1 7.42964e-05, Linf 0.00431469, total time[s] 0.062635 +Converged at iteration 23, L1 7.59769e-05, Linf 0.00346829, total time[s] 0.072748 +Converged at iteration 25, L1 9.52171e-05, Linf 0.00604357, total time[s] 0.074052 +Converged at iteration 28, L1 9.098e-05, Linf 0.00499626, total time[s] 0.077822 +Converged at iteration 30, L1 6.29907e-05, Linf 0.00461231, total time[s] 0.088603 +Converged at iteration 28, L1 7.40966e-05, Linf 0.00318428, total time[s] 0.081115 +Converged at iteration 29, L1 8.14635e-05, Linf 0.00355348, total time[s] 0.09195 +Converged at iteration 30, L1 7.98383e-05, Linf 0.00248209, total time[s] 0.10931 +Converged at iteration 30, L1 6.80568e-05, Linf 0.00216623, total time[s] 0.086136 +Converged at iteration 33, L1 6.77496e-05, Linf 0.00556441, total time[s] 0.102914 +Converged at iteration 27, L1 8.94245e-05, Linf 0.00396138, total time[s] 0.090301 +Converged at iteration 25, L1 6.86482e-05, Linf 0.00163881, total time[s] 0.07673 +Converged at iteration 24, L1 7.27367e-05, Linf 0.00357034, total time[s] 0.072576 +Converged at iteration 39, L1 8.16502e-05, Linf 0.00614171, total time[s] 0.108777 +Converged at iteration 36, L1 7.30899e-05, Linf 0.00471372, total time[s] 0.100034 +Converged at iteration 25, L1 6.49421e-05, Linf 0.00445695, total time[s] 0.07046 +Converged at iteration 31, L1 5.91858e-05, Linf 0.00507063, total time[s] 0.096978 +Converged at iteration 26, L1 5.87713e-05, Linf 0.00506967, total time[s] 0.07451 +Converged at iteration 21, L1 5.77247e-05, Linf 0.00286862, total time[s] 0.058857 +Converged at iteration 19, L1 9.03613e-05, Linf 0.00608137, total time[s] 0.05577 +Converged at iteration 21, L1 6.28963e-05, Linf 0.00620331, total time[s] 0.0568 +Converged at iteration 25, L1 6.75353e-05, Linf 0.00548802, total time[s] 0.084369 +Converged at iteration 24, L1 9.89571e-05, Linf 0.00502212, total time[s] 0.078089 +Converged at iteration 20, L1 7.03181e-05, Linf 0.00541859, total time[s] 0.06922 +Converged at iteration 17, L1 6.44791e-05, Linf 0.00287218, total time[s] 0.052235 +Converged at iteration 32, L1 6.61537e-05, Linf 0.00235801, total time[s] 0.092156 +Converged at iteration 20, L1 6.29187e-05, Linf 0.0047981, total time[s] 0.062829 +Converged at iteration 23, L1 8.91122e-05, Linf 0.00686625, total time[s] 0.093427 +Converged at iteration 27, L1 7.58955e-05, Linf 0.00417163, total time[s] 0.084286 +Converged at iteration 23, L1 7.47839e-05, Linf 0.0065694, total time[s] 0.078578 +Converged at iteration 21, L1 6.90609e-05, Linf 0.00421305, total time[s] 0.06031 +Converged at iteration 23, L1 7.59607e-05, Linf 0.00377983, total time[s] 0.0743 +Converged at iteration 25, L1 9.36058e-05, Linf 0.00568163, total time[s] 0.064453 +Converged at iteration 28, L1 8.83485e-05, Linf 0.00462293, total time[s] 0.092879 +Converged at iteration 30, L1 6.05635e-05, Linf 0.00459331, total time[s] 0.091795 +Converged at iteration 28, L1 7.16535e-05, Linf 0.00306553, total time[s] 0.098963 +Converged at iteration 29, L1 8.10977e-05, Linf 0.00361972, total time[s] 0.114657 +Converged at iteration 30, L1 7.57996e-05, Linf 0.00228542, total time[s] 0.130489 +Converged at iteration 29, L1 9.2162e-05, Linf 0.00260377, total time[s] 0.120304 +Converged at iteration 33, L1 6.59016e-05, Linf 0.00564416, total time[s] 0.113055 +Converged at iteration 27, L1 8.40025e-05, Linf 0.00381943, total time[s] 0.095791 +Converged at iteration 25, L1 7.19923e-05, Linf 0.0017608, total time[s] 0.073226 +Converged at iteration 24, L1 6.58047e-05, Linf 0.00321732, total time[s] 0.097469 +Converged at iteration 39, L1 8.29238e-05, Linf 0.0059979, total time[s] 0.134641 +Converged at iteration 36, L1 7.31391e-05, Linf 0.00455951, total time[s] 0.106728 +Converged at iteration 25, L1 7.12035e-05, Linf 0.00500485, total time[s] 0.086781 +Converged at iteration 31, L1 5.90382e-05, Linf 0.00506936, total time[s] 0.106581 +Converged at iteration 26, L1 6.20295e-05, Linf 0.0066183, total time[s] 0.093818 +Converged at iteration 21, L1 5.87985e-05, Linf 0.00274726, total time[s] 0.067301 +Converged at iteration 19, L1 9.32803e-05, Linf 0.00624538, total time[s] 0.052165 +Converged at iteration 21, L1 6.87664e-05, Linf 0.00715322, total time[s] 0.059346 +Converged at iteration 25, L1 7.5061e-05, Linf 0.0060323, total time[s] 0.072925 +Converged at iteration 25, L1 5.39821e-05, Linf 0.00387934, total time[s] 0.070071 +Converged at iteration 20, L1 7.17516e-05, Linf 0.00547418, total time[s] 0.062629 +Converged at iteration 17, L1 6.5817e-05, Linf 0.00293257, total time[s] 0.048844 +Converged at iteration 32, L1 6.55262e-05, Linf 0.00233354, total time[s] 0.087815 +Converged at iteration 20, L1 6.20914e-05, Linf 0.00496288, total time[s] 0.062388 +Converged at iteration 23, L1 9.06762e-05, Linf 0.00677148, total time[s] 0.070397 +Converged at iteration 27, L1 8.00204e-05, Linf 0.00426952, total time[s] 0.072412 +Converged at iteration 23, L1 7.63393e-05, Linf 0.00669619, total time[s] 0.080317 +Converged at iteration 21, L1 7.15889e-05, Linf 0.00426406, total time[s] 0.065628 +Converged at iteration 23, L1 7.56417e-05, Linf 0.00339057, total time[s] 0.062013 +Converged at iteration 25, L1 9.44065e-05, Linf 0.00587116, total time[s] 0.071306 +Converged at iteration 28, L1 9.09e-05, Linf 0.00465824, total time[s] 0.089412 +Converged at iteration 30, L1 6.16421e-05, Linf 0.00460893, total time[s] 0.082778 +Converged at iteration 28, L1 7.26948e-05, Linf 0.00308141, total time[s] 0.104634 +Converged at iteration 29, L1 8.08917e-05, Linf 0.00358195, total time[s] 0.140555 +Converged at iteration 30, L1 7.76058e-05, Linf 0.00237353, total time[s] 0.082426 +Converged at iteration 29, L1 9.80279e-05, Linf 0.00273136, total time[s] 0.099502 +Converged at iteration 33, L1 6.69566e-05, Linf 0.00560452, total time[s] 0.098602 +Converged at iteration 27, L1 8.66276e-05, Linf 0.0038902, total time[s] 0.080375 +Converged at iteration 25, L1 7.06423e-05, Linf 0.00241553, total time[s] 0.092266 +Converged at iteration 24, L1 6.90701e-05, Linf 0.00340787, total time[s] 0.084107 +Converged at iteration 39, L1 8.23073e-05, Linf 0.006191, total time[s] 0.110744 +Converged at iteration 36, L1 7.47922e-05, Linf 0.00479074, total time[s] 0.162306 +Converged at iteration 25, L1 6.18765e-05, Linf 0.0040997, total time[s] 0.091217 +Converged at iteration 31, L1 5.80321e-05, Linf 0.0051028, total time[s] 0.087975 +Converged at iteration 25, L1 9.95957e-05, Linf 0.00593263, total time[s] 0.10331 +Converged at iteration 21, L1 5.8359e-05, Linf 0.00294822, total time[s] 0.074634 +Converged at iteration 19, L1 8.84235e-05, Linf 0.00597626, total time[s] 0.072735 +Converged at iteration 21, L1 5.97927e-05, Linf 0.0056814, total time[s] 0.066707 +Converged at iteration 25, L1 6.3491e-05, Linf 0.00512161, total time[s] 0.197254 +Converged at iteration 24, L1 9.71882e-05, Linf 0.00500772, total time[s] 0.081481 +Converged at iteration 20, L1 6.9387e-05, Linf 0.00538113, total time[s] 0.066079 +Converged at iteration 17, L1 6.40137e-05, Linf 0.00287477, total time[s] 0.048674 +Converged at iteration 32, L1 6.66737e-05, Linf 0.00237329, total time[s] 0.116579 +Converged at iteration 20, L1 6.16841e-05, Linf 0.0046995, total time[s] 0.056111 +Converged at iteration 23, L1 8.82766e-05, Linf 0.0069234, total time[s] 0.060597 +Converged at iteration 27, L1 7.42166e-05, Linf 0.004114, total time[s] 0.075882 +Converged at iteration 23, L1 7.4044e-05, Linf 0.00649594, total time[s] 0.076563 +Converged at iteration 21, L1 6.77112e-05, Linf 0.00417929, total time[s] 0.07886 +Converged at iteration 23, L1 7.50011e-05, Linf 0.00326162, total time[s] 0.061869 +Converged at iteration 25, L1 9.32512e-05, Linf 0.00555029, total time[s] 0.077159 +Converged at iteration 28, L1 8.78435e-05, Linf 0.00467869, total time[s] 0.081906 +Converged at iteration 30, L1 6.00761e-05, Linf 0.00458164, total time[s] 0.130104 +Converged at iteration 28, L1 7.10413e-05, Linf 0.00304825, total time[s] 0.165787 +Converged at iteration 29, L1 8.11648e-05, Linf 0.00364194, total time[s] 0.140736 +Converged at iteration 30, L1 7.56639e-05, Linf 0.00225472, total time[s] 0.118248 +Converged at iteration 29, L1 8.85971e-05, Linf 0.00254054, total time[s] 0.162997 +Converged at iteration 33, L1 6.53633e-05, Linf 0.00566738, total time[s] 0.160243 +Converged at iteration 27, L1 8.24761e-05, Linf 0.00377539, total time[s] 0.091495 +Converged at iteration 25, L1 7.32742e-05, Linf 0.00179919, total time[s] 0.141346 +Converged at iteration 24, L1 6.41098e-05, Linf 0.00312886, total time[s] 0.105938 +Converged at iteration 39, L1 8.28932e-05, Linf 0.0060579, total time[s] 0.182247 +Converged at iteration 36, L1 7.32198e-05, Linf 0.00464751, total time[s] 0.136686 +Converged at iteration 25, L1 6.62256e-05, Linf 0.00455595, total time[s] 0.136107 +Converged at iteration 31, L1 5.79981e-05, Linf 0.00510211, total time[s] 0.134723 +Converged at iteration 26, L1 5.91203e-05, Linf 0.00507941, total time[s] 0.105307 +Converged at iteration 21, L1 5.79722e-05, Linf 0.00284613, total time[s] 0.062047 +Converged at iteration 19, L1 9.09782e-05, Linf 0.0061083, total time[s] 0.059347 +Converged at iteration 21, L1 6.39714e-05, Linf 0.00639324, total time[s] 0.110864 +Converged at iteration 25, L1 6.89556e-05, Linf 0.00560328, total time[s] 0.068855 +Converged at iteration 24, L1 9.94093e-05, Linf 0.00502667, total time[s] 0.087617 +Converged at iteration 20, L1 7.06404e-05, Linf 0.00543106, total time[s] 0.078527 +Converged at iteration 17, L1 6.46977e-05, Linf 0.0028843, total time[s] 0.060529 +Converged at iteration 32, L1 6.59264e-05, Linf 0.00235305, total time[s] 0.114696 +Converged at iteration 20, L1 6.1854e-05, Linf 0.00483068, total time[s] 0.067069 +Converged at iteration 23, L1 8.94092e-05, Linf 0.00684663, total time[s] 0.071116 +Converged at iteration 27, L1 7.68023e-05, Linf 0.00419096, total time[s] 0.070117 +Converged at iteration 23, L1 7.51142e-05, Linf 0.00659533, total time[s] 0.067254 +Converged at iteration 21, L1 6.97274e-05, Linf 0.00422265, total time[s] 0.05722 +Converged at iteration 23, L1 7.52469e-05, Linf 0.0033175, total time[s] 0.061293 +Converged at iteration 25, L1 9.38165e-05, Linf 0.00571491, total time[s] 0.092678 +Converged at iteration 28, L1 8.85561e-05, Linf 0.00452626, total time[s] 0.113872 +Converged at iteration 30, L1 6.08414e-05, Linf 0.00459705, total time[s] 0.153982 +Converged at iteration 28, L1 7.19769e-05, Linf 0.00306709, total time[s] 0.138386 +Converged at iteration 29, L1 8.13253e-05, Linf 0.00361209, total time[s] 0.094481 +Converged at iteration 30, L1 7.61419e-05, Linf 0.00230172, total time[s] 0.089911 +Converged at iteration 29, L1 9.37184e-05, Linf 0.00262624, total time[s] 0.096836 +Converged at iteration 33, L1 6.65575e-05, Linf 0.00571424, total time[s] 0.117403 +Converged at iteration 27, L1 8.45172e-05, Linf 0.00383395, total time[s] 0.092398 +Converged at iteration 25, L1 7.20518e-05, Linf 0.00175015, total time[s] 0.097664 +Converged at iteration 24, L1 6.66765e-05, Linf 0.00323639, total time[s] 0.10881 +Converged at iteration 39, L1 8.02278e-05, Linf 0.00622872, total time[s] 0.163238 +Converged at iteration 36, L1 7.29528e-05, Linf 0.00482875, total time[s] 0.248533 +Converged at iteration 25, L1 6.01519e-05, Linf 0.00379502, total time[s] 0.118828 +Converged at iteration 31, L1 5.82107e-05, Linf 0.00507057, total time[s] 0.155205 +Converged at iteration 25, L1 9.84422e-05, Linf 0.00597565, total time[s] 0.100711 +Converged at iteration 21, L1 5.78707e-05, Linf 0.00301015, total time[s] 0.088814 +Converged at iteration 19, L1 8.70124e-05, Linf 0.00588418, total time[s] 0.068897 +Converged at iteration 21, L1 5.75809e-05, Linf 0.00527013, total time[s] 0.097712 +Converged at iteration 25, L1 6.07688e-05, Linf 0.00483181, total time[s] 0.094003 +Converged at iteration 24, L1 9.66656e-05, Linf 0.00497156, total time[s] 0.082428 +Converged at iteration 20, L1 6.96593e-05, Linf 0.00535621, total time[s] 0.062704 +Converged at iteration 17, L1 6.3788e-05, Linf 0.0028061, total time[s] 0.059437 +Converged at iteration 32, L1 6.66169e-05, Linf 0.00238702, total time[s] 0.109868 +Converged at iteration 20, L1 6.1623e-05, Linf 0.00462996, total time[s] 0.064122 +Converged at iteration 23, L1 8.76898e-05, Linf 0.00723204, total time[s] 0.070359 +Converged at iteration 27, L1 7.30687e-05, Linf 0.00406954, total time[s] 0.093825 +Converged at iteration 23, L1 7.35944e-05, Linf 0.00643513, total time[s] 0.077318 +Converged at iteration 21, L1 6.66723e-05, Linf 0.00415058, total time[s] 0.056266 +Converged at iteration 23, L1 7.48917e-05, Linf 0.00323117, total time[s] 0.078938 +Converged at iteration 25, L1 9.28834e-05, Linf 0.00544162, total time[s] 0.084111 +Converged at iteration 28, L1 8.69791e-05, Linf 0.00438899, total time[s] 0.102244 +Converged at iteration 30, L1 5.98232e-05, Linf 0.00457418, total time[s] 0.109439 +Converged at iteration 28, L1 7.08601e-05, Linf 0.00303618, total time[s] 0.129423 +Converged at iteration 29, L1 8.1051e-05, Linf 0.00366244, total time[s] 0.110543 +Converged at iteration 30, L1 7.38577e-05, Linf 0.00217464, total time[s] 0.133774 +Converged at iteration 29, L1 8.5414e-05, Linf 0.00249295, total time[s] 0.14798 +Converged at iteration 33, L1 6.53466e-05, Linf 0.005687, total time[s] 0.198422 +Converged at iteration 27, L1 8.15687e-05, Linf 0.0037811, total time[s] 0.274776 +Converged at iteration 25, L1 7.40583e-05, Linf 0.00182872, total time[s] 0.160545 +Converged at iteration 24, L1 6.34842e-05, Linf 0.00302138, total time[s] 0.216021 +Converged at iteration 39, L1 7.79686e-05, Linf 0.00630536, total time[s] 0.191063 +Converged at iteration 36, L1 7.29078e-05, Linf 0.00505501, total time[s] 0.18625 +Converged at iteration 25, L1 5.25672e-05, Linf 0.00232862, total time[s] 0.131525 +Converged at iteration 31, L1 5.76213e-05, Linf 0.00505781, total time[s] 0.149517 +Converged at iteration 25, L1 9.28672e-05, Linf 0.00587347, total time[s] 0.108229 +Converged at iteration 21, L1 5.79757e-05, Linf 0.0032427, total time[s] 0.13379 +Converged at iteration 19, L1 8.2262e-05, Linf 0.0055194, total time[s] 0.153117 +Converged at iteration 21, L1 5.05529e-05, Linf 0.00433151, total time[s] 0.166071 +Converged at iteration 24, L1 9.95707e-05, Linf 0.00647436, total time[s] 0.225987 +Converged at iteration 24, L1 9.12245e-05, Linf 0.00493085, total time[s] 0.071842 +Converged at iteration 20, L1 6.66288e-05, Linf 0.00528052, total time[s] 0.057064 +Converged at iteration 17, L1 6.30122e-05, Linf 0.00267888, total time[s] 0.082042 +Converged at iteration 32, L1 6.609e-05, Linf 0.00243934, total time[s] 0.136656 +Converged at iteration 19, L1 9.98218e-05, Linf 0.00715559, total time[s] 0.06799 +Converged at iteration 23, L1 8.46975e-05, Linf 0.00712359, total time[s] 0.091021 +Converged at iteration 27, L1 6.79444e-05, Linf 0.00390055, total time[s] 0.122178 +Converged at iteration 23, L1 7.17809e-05, Linf 0.00617111, total time[s] 0.093401 +Converged at iteration 21, L1 6.28899e-05, Linf 0.00403867, total time[s] 0.064757 +Converged at iteration 23, L1 7.46066e-05, Linf 0.00312364, total time[s] 0.072433 +Converged at iteration 25, L1 9.14751e-05, Linf 0.00498871, total time[s] 0.077369 +Converged at iteration 28, L1 8.44636e-05, Linf 0.0041614, total time[s] 0.097949 +Converged at iteration 30, L1 5.88529e-05, Linf 0.00455987, total time[s] 0.096854 +Converged at iteration 28, L1 6.95196e-05, Linf 0.00296523, total time[s] 0.099721 +Converged at iteration 29, L1 8.20983e-05, Linf 0.00374382, total time[s] 0.17238 +Converged at iteration 30, L1 7.05481e-05, Linf 0.00218171, total time[s] 0.082597 +Converged at iteration 29, L1 7.54709e-05, Linf 0.00228991, total time[s] 0.096034 +Converged at iteration 33, L1 6.30708e-05, Linf 0.0057682, total time[s] 0.105832 +Converged at iteration 27, L1 7.59422e-05, Linf 0.00359136, total time[s] 0.070106 +Converged at iteration 25, L1 7.74903e-05, Linf 0.00195677, total time[s] 0.068134 +Converged at iteration 23, L1 9.99984e-05, Linf 0.00412078, total time[s] 0.088546 +Converged at iteration 39, L1 7.88867e-05, Linf 0.00630689, total time[s] 0.130072 +Converged at iteration 36, L1 7.33044e-05, Linf 0.00492576, total time[s] 0.112332 +Converged at iteration 25, L1 5.59204e-05, Linf 0.00283598, total time[s] 0.101744 +Converged at iteration 31, L1 5.76171e-05, Linf 0.00506661, total time[s] 0.109924 +Converged at iteration 25, L1 9.54421e-05, Linf 0.00592474, total time[s] 0.072161 +Converged at iteration 21, L1 5.66509e-05, Linf 0.00313176, total time[s] 0.074039 +Converged at iteration 19, L1 8.43698e-05, Linf 0.00561757, total time[s] 0.098929 +Converged at iteration 21, L1 5.37202e-05, Linf 0.00466121, total time[s] 0.092308 +Converged at iteration 25, L1 5.49828e-05, Linf 0.00417148, total time[s] 0.111321 +Converged at iteration 24, L1 9.42622e-05, Linf 0.0049771, total time[s] 0.124257 +Converged at iteration 20, L1 6.75313e-05, Linf 0.00532054, total time[s] 0.088242 +Converged at iteration 17, L1 6.32616e-05, Linf 0.00271547, total time[s] 0.12795 +Converged at iteration 32, L1 6.65362e-05, Linf 0.00241276, total time[s] 0.133025 +Converged at iteration 20, L1 6.24723e-05, Linf 0.00447353, total time[s] 0.090689 +Converged at iteration 23, L1 8.66575e-05, Linf 0.00705529, total time[s] 0.120983 +Converged at iteration 27, L1 7.03894e-05, Linf 0.0039754, total time[s] 0.1108 +Converged at iteration 23, L1 7.2726e-05, Linf 0.00629763, total time[s] 0.094684 +Converged at iteration 21, L1 6.45691e-05, Linf 0.00409214, total time[s] 0.087782 +Converged at iteration 23, L1 7.48143e-05, Linf 0.00317324, total time[s] 0.09356 +Converged at iteration 25, L1 9.21988e-05, Linf 0.00521619, total time[s] 0.101847 +Converged at iteration 28, L1 8.57446e-05, Linf 0.00436631, total time[s] 0.104129 +Converged at iteration 30, L1 5.94768e-05, Linf 0.00456006, total time[s] 0.123215 +Converged at iteration 28, L1 6.9981e-05, Linf 0.00299934, total time[s] 0.093893 +Converged at iteration 29, L1 8.14341e-05, Linf 0.00369481, total time[s] 0.137932 +Converged at iteration 30, L1 7.25264e-05, Linf 0.00217168, total time[s] 0.117445 +Converged at iteration 29, L1 8.06348e-05, Linf 0.00239349, total time[s] 0.086432 +Converged at iteration 33, L1 6.41388e-05, Linf 0.0057309, total time[s] 0.123964 +Converged at iteration 27, L1 7.85512e-05, Linf 0.0036656, total time[s] 0.099182 +Converged at iteration 25, L1 7.65185e-05, Linf 0.00189358, total time[s] 0.106744 +Converged at iteration 24, L1 6.04606e-05, Linf 0.00290338, total time[s] 0.138229 +Converged at iteration 39, L1 7.66283e-05, Linf 0.00642795, total time[s] 0.337598 +Converged at iteration 36, L1 7.20725e-05, Linf 0.00513609, total time[s] 0.148225 +Converged at iteration 25, L1 5.09543e-05, Linf 0.00203883, total time[s] 0.100611 +Converged at iteration 31, L1 5.68105e-05, Linf 0.00505066, total time[s] 0.116611 +Converged at iteration 25, L1 9.12038e-05, Linf 0.00584237, total time[s] 0.078277 +Converged at iteration 21, L1 5.65969e-05, Linf 0.00330654, total time[s] 0.069647 +Converged at iteration 19, L1 8.09803e-05, Linf 0.00531987, total time[s] 0.054373 +Converged at iteration 21, L1 4.9068e-05, Linf 0.0046818, total time[s] 0.095333 +Converged at iteration 24, L1 9.52393e-05, Linf 0.00610265, total time[s] 0.09737 +Converged at iteration 24, L1 8.88164e-05, Linf 0.00493079, total time[s] 0.126348 +Converged at iteration 20, L1 6.52441e-05, Linf 0.00530151, total time[s] 0.056637 +Converged at iteration 17, L1 6.22659e-05, Linf 0.00264013, total time[s] 0.135739 +Converged at iteration 32, L1 6.59161e-05, Linf 0.00245494, total time[s] 0.258947 +Converged at iteration 19, L1 9.97763e-05, Linf 0.00716273, total time[s] 0.060263 +Converged at iteration 23, L1 8.49016e-05, Linf 0.00669281, total time[s] 0.093069 +Converged at iteration 27, L1 6.65488e-05, Linf 0.00386184, total time[s] 0.12518 +Converged at iteration 23, L1 7.14127e-05, Linf 0.00610758, total time[s] 0.072689 +Converged at iteration 21, L1 6.27213e-05, Linf 0.00400742, total time[s] 0.079012 +Converged at iteration 23, L1 7.45613e-05, Linf 0.0030981, total time[s] 0.071961 +Converged at iteration 25, L1 9.1022e-05, Linf 0.00474473, total time[s] 0.092986 +Converged at iteration 28, L1 8.37111e-05, Linf 0.00398394, total time[s] 0.085 +Converged at iteration 30, L1 5.84935e-05, Linf 0.0045613, total time[s] 0.081788 +Converged at iteration 28, L1 6.93574e-05, Linf 0.00294216, total time[s] 0.08748 +Converged at iteration 29, L1 8.18288e-05, Linf 0.00377223, total time[s] 0.090144 +Converged at iteration 30, L1 7.01598e-05, Linf 0.00218885, total time[s] 0.114573 +Converged at iteration 29, L1 7.34372e-05, Linf 0.00222031, total time[s] 0.088104 +Converged at iteration 33, L1 6.27336e-05, Linf 0.00598156, total time[s] 0.087632 +Converged at iteration 27, L1 7.41746e-05, Linf 0.00355764, total time[s] 0.077393 +Converged at iteration 25, L1 7.86385e-05, Linf 0.0019957, total time[s] 0.065977 +Converged at iteration 23, L1 9.82443e-05, Linf 0.00402899, total time[s] 0.061195 +Converged at iteration 39, L1 7.77154e-05, Linf 0.00636643, total time[s] 0.106989 +Converged at iteration 36, L1 7.24299e-05, Linf 0.00502576, total time[s] 0.132278 +Converged at iteration 25, L1 5.32497e-05, Linf 0.00239107, total time[s] 0.06502 +Converged at iteration 31, L1 5.69947e-05, Linf 0.00505973, total time[s] 0.081493 +Converged at iteration 25, L1 9.33167e-05, Linf 0.00588379, total time[s] 0.07028 +Converged at iteration 21, L1 5.65297e-05, Linf 0.00322197, total time[s] 0.069247 +Converged at iteration 19, L1 8.26265e-05, Linf 0.00560485, total time[s] 0.076659 +Converged at iteration 21, L1 5.11007e-05, Linf 0.00438124, total time[s] 0.05838 +Converged at iteration 25, L1 5.13083e-05, Linf 0.00377296, total time[s] 0.076597 +Converged at iteration 24, L1 9.07552e-05, Linf 0.0049512, total time[s] 0.06834 +Converged at iteration 20, L1 6.61598e-05, Linf 0.00530882, total time[s] 0.085203 +Converged at iteration 17, L1 6.28036e-05, Linf 0.00269166, total time[s] 0.057566 +Converged at iteration 32, L1 6.62031e-05, Linf 0.00243416, total time[s] 0.088709 +Converged at iteration 19, L1 9.98717e-05, Linf 0.0071516, total time[s] 0.072478 +Converged at iteration 23, L1 8.50622e-05, Linf 0.00711205, total time[s] 0.074826 +Converged at iteration 27, L1 6.85108e-05, Linf 0.00391293, total time[s] 0.075305 +Converged at iteration 23, L1 7.20043e-05, Linf 0.00619112, total time[s] 0.063884 +Converged at iteration 21, L1 6.32031e-05, Linf 0.00404869, total time[s] 0.071415 +Converged at iteration 23, L1 7.46175e-05, Linf 0.00313303, total time[s] 0.070651 +Converged at iteration 25, L1 9.1589e-05, Linf 0.00503146, total time[s] 0.06898 +Converged at iteration 28, L1 8.46832e-05, Linf 0.00421759, total time[s] 0.080107 +Converged at iteration 30, L1 5.91076e-05, Linf 0.00455818, total time[s] 0.085616 +Converged at iteration 28, L1 6.97334e-05, Linf 0.00297345, total time[s] 0.076911 +Converged at iteration 29, L1 8.23183e-05, Linf 0.00373231, total time[s] 0.081353 +Converged at iteration 30, L1 7.15838e-05, Linf 0.00217916, total time[s] 0.084503 +Converged at iteration 29, L1 7.68981e-05, Linf 0.00231314, total time[s] 0.086945 +Converged at iteration 33, L1 6.33336e-05, Linf 0.00576298, total time[s] 0.091502 +Converged at iteration 27, L1 7.78362e-05, Linf 0.00360487, total time[s] 0.079395 +Converged at iteration 25, L1 7.77921e-05, Linf 0.00194587, total time[s] 0.076738 +Converged at iteration 24, L1 5.89333e-05, Linf 0.00283512, total time[s] 0.067485 +Converged at iteration 39, L1 7.58844e-05, Linf 0.00646531, total time[s] 0.12089 +Converged at iteration 36, L1 7.18787e-05, Linf 0.00515956, total time[s] 0.107211 +Converged at iteration 25, L1 4.97077e-05, Linf 0.0019701, total time[s] 0.091262 +Converged at iteration 31, L1 5.70915e-05, Linf 0.00504469, total time[s] 0.106679 +Converged at iteration 25, L1 8.99328e-05, Linf 0.00581682, total time[s] 0.070816 +Converged at iteration 21, L1 5.70913e-05, Linf 0.00335926, total time[s] 0.057459 +Converged at iteration 19, L1 7.9997e-05, Linf 0.00532023, total time[s] 0.060177 +Converged at iteration 21, L1 4.79429e-05, Linf 0.00442424, total time[s] 0.06864 +Converged at iteration 24, L1 9.20155e-05, Linf 0.00577567, total time[s] 0.0745 +Converged at iteration 24, L1 8.88088e-05, Linf 0.00491827, total time[s] 0.063114 +Converged at iteration 20, L1 6.45141e-05, Linf 0.0052961, total time[s] 0.057483 +Converged at iteration 17, L1 6.18789e-05, Linf 0.00260901, total time[s] 0.054344 +Converged at iteration 32, L1 6.56206e-05, Linf 0.00246714, total time[s] 0.13817 +Converged at iteration 19, L1 9.96452e-05, Linf 0.00716172, total time[s] 0.05487 +Converged at iteration 23, L1 8.36249e-05, Linf 0.0071656, total time[s] 0.120751 +Converged at iteration 27, L1 6.55332e-05, Linf 0.00382572, total time[s] 0.151109 +Converged at iteration 23, L1 7.12088e-05, Linf 0.00605894, total time[s] 0.074953 +Converged at iteration 21, L1 6.19071e-05, Linf 0.00398569, total time[s] 0.072287 +Converged at iteration 23, L1 7.47266e-05, Linf 0.00307827, total time[s] 0.064199 +Converged at iteration 25, L1 9.09063e-05, Linf 0.00475233, total time[s] 0.105085 +Converged at iteration 28, L1 8.33722e-05, Linf 0.00385313, total time[s] 0.083639 +Converged at iteration 30, L1 5.82882e-05, Linf 0.00456134, total time[s] 0.084999 +Converged at iteration 28, L1 6.92903e-05, Linf 0.00292385, total time[s] 0.077451 +Converged at iteration 29, L1 8.15804e-05, Linf 0.00379143, total time[s] 0.086515 +Converged at iteration 30, L1 6.92583e-05, Linf 0.00219141, total time[s] 0.098036 +Converged at iteration 29, L1 7.12775e-05, Linf 0.00216676, total time[s] 0.080434 +Converged at iteration 33, L1 6.21856e-05, Linf 0.0058109, total time[s] 0.11897 +Converged at iteration 27, L1 7.27443e-05, Linf 0.00351188, total time[s] 0.075043 +Converged at iteration 25, L1 7.91832e-05, Linf 0.00202777, total time[s] 0.092696 +Converged at iteration 23, L1 9.69169e-05, Linf 0.003957, total time[s] 0.068655 +Converged at iteration 39, L1 7.2988e-05, Linf 0.00662142, total time[s] 0.110376 +Converged at iteration 36, L1 7.10644e-05, Linf 0.00537702, total time[s] 0.111468 +Converged at iteration 24, L1 9.99138e-05, Linf 0.00333473, total time[s] 0.064074 +Converged at iteration 31, L1 5.59509e-05, Linf 0.00502669, total time[s] 0.082518 +Converged at iteration 25, L1 8.46498e-05, Linf 0.00570654, total time[s] 0.079956 +Converged at iteration 21, L1 5.84429e-05, Linf 0.00358796, total time[s] 0.05633 +Converged at iteration 19, L1 7.73152e-05, Linf 0.00499454, total time[s] 0.069929 +Converged at iteration 21, L1 4.42168e-05, Linf 0.00426792, total time[s] 0.086453 +Converged at iteration 24, L1 8.02635e-05, Linf 0.00456587, total time[s] 0.191472 +Converged at iteration 24, L1 8.44782e-05, Linf 0.00487332, total time[s] 0.129311 +Converged at iteration 20, L1 6.19743e-05, Linf 0.00514923, total time[s] 0.126148 +Converged at iteration 17, L1 6.02732e-05, Linf 0.00245209, total time[s] 0.090231 +Converged at iteration 32, L1 6.4275e-05, Linf 0.00249504, total time[s] 0.107048 +Converged at iteration 19, L1 9.93628e-05, Linf 0.00707727, total time[s] 0.061844 +Converged at iteration 23, L1 8.17202e-05, Linf 0.00714645, total time[s] 0.080707 +Converged at iteration 27, L1 6.12138e-05, Linf 0.00368224, total time[s] 0.09032 +Converged at iteration 23, L1 7.04569e-05, Linf 0.00586377, total time[s] 0.096061 +Converged at iteration 21, L1 5.89546e-05, Linf 0.00387121, total time[s] 0.083781 +Converged at iteration 23, L1 7.46213e-05, Linf 0.00301033, total time[s] 0.088555 +Converged at iteration 25, L1 8.96572e-05, Linf 0.00437718, total time[s] 0.073865 +Converged at iteration 28, L1 8.06131e-05, Linf 0.00355306, total time[s] 0.078305 +Converged at iteration 30, L1 5.77076e-05, Linf 0.00455029, total time[s] 0.086671 +Converged at iteration 28, L1 6.88957e-05, Linf 0.00288057, total time[s] 0.077502 +Converged at iteration 29, L1 8.21335e-05, Linf 0.0038771, total time[s] 0.086146 +Converged at iteration 30, L1 6.71466e-05, Linf 0.00219436, total time[s] 0.085531 +Converged at iteration 29, L1 6.52496e-05, Linf 0.00196301, total time[s] 0.085985 +Converged at iteration 33, L1 6.03041e-05, Linf 0.00589534, total time[s] 0.09929 +Converged at iteration 27, L1 6.71667e-05, Linf 0.00340544, total time[s] 0.070979 +Converged at iteration 25, L1 8.27283e-05, Linf 0.00210119, total time[s] 0.08238 +Converged at iteration 23, L1 9.1418e-05, Linf 0.0037029, total time[s] 0.068577 +Converged at iteration 39, L1 7.5229e-05, Linf 0.00654561, total time[s] 0.111388 +Converged at iteration 36, L1 7.15967e-05, Linf 0.00527366, total time[s] 0.109395 +Converged at iteration 25, L1 4.7863e-05, Linf 0.001852, total time[s] 0.063561 +Converged at iteration 31, L1 5.62733e-05, Linf 0.00503405, total time[s] 0.077964 +Converged at iteration 25, L1 8.72594e-05, Linf 0.00555557, total time[s] 0.064154 +Converged at iteration 21, L1 5.74522e-05, Linf 0.00347727, total time[s] 0.056706 +Converged at iteration 19, L1 7.87102e-05, Linf 0.00520229, total time[s] 0.0491 +Converged at iteration 21, L1 4.57775e-05, Linf 0.00459289, total time[s] 0.053645 +Converged at iteration 24, L1 8.59033e-05, Linf 0.00514356, total time[s] 0.06103 +Converged at iteration 24, L1 8.54513e-05, Linf 0.00490057, total time[s] 0.061543 +Converged at iteration 20, L1 6.31368e-05, Linf 0.00523185, total time[s] 0.05772 +Converged at iteration 17, L1 6.1098e-05, Linf 0.00251938, total time[s] 0.045456 +Converged at iteration 32, L1 6.49191e-05, Linf 0.00249181, total time[s] 0.079524 +Converged at iteration 19, L1 9.95254e-05, Linf 0.00713523, total time[s] 0.050999 +Converged at iteration 23, L1 8.27179e-05, Linf 0.00703627, total time[s] 0.05836 +Converged at iteration 27, L1 6.331e-05, Linf 0.00375384, total time[s] 0.067572 +Converged at iteration 23, L1 7.09373e-05, Linf 0.00591953, total time[s] 0.059242 +Converged at iteration 21, L1 6.03627e-05, Linf 0.00393179, total time[s] 0.054095 +Converged at iteration 23, L1 7.45723e-05, Linf 0.00304911, total time[s] 0.059382 +Converged at iteration 25, L1 9.02946e-05, Linf 0.0046647, total time[s] 0.063807 +Converged at iteration 28, L1 8.18389e-05, Linf 0.00383912, total time[s] 0.072041 +Converged at iteration 30, L1 5.78149e-05, Linf 0.00455776, total time[s] 0.074889 +Converged at iteration 28, L1 6.9221e-05, Linf 0.00287491, total time[s] 0.073651 +Converged at iteration 29, L1 8.21557e-05, Linf 0.00382907, total time[s] 0.072592 +Converged at iteration 30, L1 6.82776e-05, Linf 0.00219476, total time[s] 0.084862 +Converged at iteration 29, L1 6.84382e-05, Linf 0.00205907, total time[s] 0.072588 +Converged at iteration 33, L1 6.13246e-05, Linf 0.00585598, total time[s] 0.081993 +Converged at iteration 27, L1 7.03081e-05, Linf 0.0034374, total time[s] 0.071238 +Converged at iteration 25, L1 8.10027e-05, Linf 0.00206091, total time[s] 0.066338 +Converged at iteration 23, L1 9.42801e-05, Linf 0.00375164, total time[s] 0.060716 +Converged at iteration 39, L1 7.32604e-05, Linf 0.00666723, total time[s] 0.120368 +Converged at iteration 36, L1 7.08807e-05, Linf 0.00546106, total time[s] 0.090997 +Converged at iteration 24, L1 9.87495e-05, Linf 0.00316463, total time[s] 0.074567 +Converged at iteration 31, L1 5.64619e-05, Linf 0.00502331, total time[s] 0.079747 +Converged at iteration 25, L1 8.31242e-05, Linf 0.00567271, total time[s] 0.064877 +Converged at iteration 21, L1 5.92282e-05, Linf 0.00365247, total time[s] 0.056414 +Converged at iteration 19, L1 7.64456e-05, Linf 0.00491658, total time[s] 0.057131 +Converged at iteration 21, L1 4.33806e-05, Linf 0.00443299, total time[s] 0.057881 +Converged at iteration 24, L1 7.70383e-05, Linf 0.00431079, total time[s] 0.072606 +Converged at iteration 24, L1 8.15356e-05, Linf 0.00484676, total time[s] 0.083407 +Converged at iteration 20, L1 6.16029e-05, Linf 0.00510304, total time[s] 0.084335 +Converged at iteration 17, L1 5.98073e-05, Linf 0.00243533, total time[s] 0.068155 +Converged at iteration 32, L1 6.41114e-05, Linf 0.00252975, total time[s] 0.191055 +Converged at iteration 19, L1 9.9802e-05, Linf 0.00704026, total time[s] 0.071696 +Converged at iteration 23, L1 8.12434e-05, Linf 0.00712063, total time[s] 0.118568 +Converged at iteration 27, L1 6.06251e-05, Linf 0.00363718, total time[s] 0.074431 +Converged at iteration 23, L1 7.04194e-05, Linf 0.00581177, total time[s] 0.061766 +Converged at iteration 20, L1 9.9458e-05, Linf 0.00506209, total time[s] 0.065405 +Converged at iteration 23, L1 7.4749e-05, Linf 0.00299365, total time[s] 0.063542 +Converged at iteration 25, L1 8.94379e-05, Linf 0.00428182, total time[s] 0.078927 +Converged at iteration 28, L1 7.97725e-05, Linf 0.00349184, total time[s] 0.08685 +Converged at iteration 30, L1 5.75686e-05, Linf 0.00454335, total time[s] 0.095274 +Converged at iteration 28, L1 6.89905e-05, Linf 0.00287609, total time[s] 0.093785 +Converged at iteration 29, L1 8.24344e-05, Linf 0.0039003, total time[s] 0.096976 +Converged at iteration 30, L1 6.66728e-05, Linf 0.0021908, total time[s] 0.089366 +Converged at iteration 29, L1 6.38029e-05, Linf 0.0019189, total time[s] 0.075594 +Converged at iteration 33, L1 5.97192e-05, Linf 0.0059204, total time[s] 0.085633 +Converged at iteration 27, L1 6.61988e-05, Linf 0.00332, total time[s] 0.071608 +Converged at iteration 25, L1 8.32892e-05, Linf 0.00213725, total time[s] 0.071023 +Converged at iteration 23, L1 8.97876e-05, Linf 0.00365658, total time[s] 0.06521 +Converged at iteration 39, L1 7.32519e-05, Linf 0.00660564, total time[s] 0.100112 +Converged at iteration 36, L1 7.12258e-05, Linf 0.00536355, total time[s] 0.097806 +Converged at iteration 25, L1 4.66172e-05, Linf 0.00175863, total time[s] 0.069762 +Converged at iteration 31, L1 5.60083e-05, Linf 0.00502775, total time[s] 0.082332 +Converged at iteration 25, L1 8.51772e-05, Linf 0.00571759, total time[s] 0.06878 +Converged at iteration 21, L1 5.8185e-05, Linf 0.0035669, total time[s] 0.057333 +Converged at iteration 19, L1 7.75229e-05, Linf 0.00502237, total time[s] 0.051591 +Converged at iteration 21, L1 4.44928e-05, Linf 0.00423433, total time[s] 0.059715 +Converged at iteration 24, L1 8.16121e-05, Linf 0.00471962, total time[s] 0.074853 +Converged at iteration 24, L1 8.34165e-05, Linf 0.00486915, total time[s] 0.063584 +Converged at iteration 20, L1 6.21123e-05, Linf 0.00516525, total time[s] 0.053748 +Converged at iteration 17, L1 6.04565e-05, Linf 0.0024884, total time[s] 0.049346 +Converged at iteration 32, L1 6.43475e-05, Linf 0.00251086, total time[s] 0.084088 +Converged at iteration 19, L1 9.94122e-05, Linf 0.00708991, total time[s] 0.053779 +Converged at iteration 23, L1 8.21975e-05, Linf 0.0071568, total time[s] 0.069251 +Converged at iteration 27, L1 6.29566e-05, Linf 0.00937642, total time[s] 0.069295 +Converged at iteration 23, L1 7.06281e-05, Linf 0.00588142, total time[s] 0.060375 +Converged at iteration 21, L1 5.9313e-05, Linf 0.00388376, total time[s] 0.063668 +Converged at iteration 23, L1 7.47593e-05, Linf 0.00300821, total time[s] 0.059688 +Converged at iteration 25, L1 9.09017e-05, Linf 0.00450468, total time[s] 0.06543 +Converged at iteration 28, L1 8.08335e-05, Linf 0.00357474, total time[s] 0.071513 +Converged at iteration 30, L1 5.88976e-05, Linf 0.00618351, total time[s] 0.078797 +Converged at iteration 28, L1 6.90327e-05, Linf 0.00288328, total time[s] 0.080991 +Converged at iteration 29, L1 8.22445e-05, Linf 0.00386874, total time[s] 0.084015 +Converged at iteration 30, L1 6.73397e-05, Linf 0.00219512, total time[s] 0.07451 +Converged at iteration 29, L1 6.57768e-05, Linf 0.00198068, total time[s] 0.075121 +Converged at iteration 33, L1 6.04548e-05, Linf 0.00582206, total time[s] 0.09243 +Converged at iteration 27, L1 6.85601e-05, Linf 0.00338692, total time[s] 0.071339 +Converged at iteration 25, L1 8.24224e-05, Linf 0.00209096, total time[s] 0.066125 +Converged at iteration 23, L1 9.21291e-05, Linf 0.00372187, total time[s] 0.062585 +Converged at iteration 39, L1 7.19876e-05, Linf 0.00662766, total time[s] 0.109811 +Converged at iteration 36, L1 7.09259e-05, Linf 0.00551741, total time[s] 0.099316 +Converged at iteration 24, L1 9.79404e-05, Linf 0.00312391, total time[s] 0.064572 +Converged at iteration 31, L1 5.55952e-05, Linf 0.00502051, total time[s] 0.084417 +Converged at iteration 25, L1 8.18707e-05, Linf 0.00564534, total time[s] 0.065889 +Converged at iteration 21, L1 6.00358e-05, Linf 0.00370273, total time[s] 0.057518 +Converged at iteration 19, L1 7.58454e-05, Linf 0.00490013, total time[s] 0.052404 +Converged at iteration 21, L1 4.27012e-05, Linf 0.00426342, total time[s] 0.057326 +Converged at iteration 24, L1 7.47415e-05, Linf 0.00405673, total time[s] 0.064822 +Converged at iteration 24, L1 8.01386e-05, Linf 0.00483291, total time[s] 0.065494 +Converged at iteration 20, L1 6.13162e-05, Linf 0.00508665, total time[s] 0.053987 +Converged at iteration 17, L1 5.93587e-05, Linf 0.00240352, total time[s] 0.046069 +Converged at iteration 32, L1 6.34389e-05, Linf 0.0025411, total time[s] 0.085125 +Converged at iteration 19, L1 9.91393e-05, Linf 0.00701074, total time[s] 0.05101 +Converged at iteration 23, L1 8.08051e-05, Linf 0.0070958, total time[s] 0.063338 +Converged at iteration 27, L1 6.0338e-05, Linf 0.00359932, total time[s] 0.081294 +Converged at iteration 23, L1 7.06619e-05, Linf 0.00572996, total time[s] 0.070918 +Converged at iteration 20, L1 9.85471e-05, Linf 0.00505733, total time[s] 0.079769 +Converged at iteration 23, L1 7.47992e-05, Linf 0.00298129, total time[s] 0.168247 +Converged at iteration 25, L1 8.94158e-05, Linf 0.00421035, total time[s] 0.125053 +Converged at iteration 28, L1 7.93114e-05, Linf 0.00353946, total time[s] 0.093096 +Converged at iteration 30, L1 5.75668e-05, Linf 0.00453417, total time[s] 0.093087 +Converged at iteration 28, L1 6.95073e-05, Linf 0.00287279, total time[s] 0.08061 +Converged at iteration 29, L1 8.30657e-05, Linf 0.00391754, total time[s] 0.086858 +Converged at iteration 30, L1 6.63468e-05, Linf 0.00218678, total time[s] 0.092765 +Converged at iteration 28, L1 9.86743e-05, Linf 0.00256227, total time[s] 0.111782 +Converged at iteration 33, L1 5.94522e-05, Linf 0.00594125, total time[s] 0.091357 +Converged at iteration 27, L1 6.5031e-05, Linf 0.00328491, total time[s] 0.071138 +Converged at iteration 25, L1 8.45424e-05, Linf 0.00216487, total time[s] 0.071232 +Converged at iteration 23, L1 8.8597e-05, Linf 0.00366577, total time[s] 0.082376 +Converged at iteration 39, L1 6.87422e-05, Linf 0.006859, total time[s] 0.150935 +Converged at iteration 36, L1 6.98233e-05, Linf 0.00572884, total time[s] 0.09412 +Converged at iteration 24, L1 9.4819e-05, Linf 0.00294568, total time[s] 0.067411 +Converged at iteration 30, L1 9.94608e-05, Linf 0.00614903, total time[s] 0.078227 +Converged at iteration 25, L1 7.69949e-05, Linf 0.00552794, total time[s] 0.06401 +Converged at iteration 21, L1 6.40897e-05, Linf 0.00390378, total time[s] 0.054748 +Converged at iteration 19, L1 7.35897e-05, Linf 0.00469935, total time[s] 0.05057 +Converged at iteration 21, L1 4.08068e-05, Linf 0.00396683, total time[s] 0.054927 +Converged at iteration 24, L1 6.65803e-05, Linf 0.00373425, total time[s] 0.061755 +Converged at iteration 24, L1 7.55155e-05, Linf 0.00477249, total time[s] 0.06238 +Converged at iteration 20, L1 5.8717e-05, Linf 0.00537351, total time[s] 0.054522 +Converged at iteration 17, L1 5.76827e-05, Linf 0.00226578, total time[s] 0.046739 +Converged at iteration 32, L1 6.17969e-05, Linf 0.00259604, total time[s] 0.081569 +Converged at iteration 19, L1 9.89293e-05, Linf 0.00701611, total time[s] 0.051092 +Converged at iteration 23, L1 7.93472e-05, Linf 0.0073266, total time[s] 0.060844 +Converged at iteration 27, L1 5.81348e-05, Linf 0.00343247, total time[s] 0.076643 +Converged at iteration 23, L1 7.07684e-05, Linf 0.00555084, total time[s] 0.065874 +Converged at iteration 20, L1 9.57572e-05, Linf 0.00503578, total time[s] 0.056999 +Converged at iteration 23, L1 7.53898e-05, Linf 0.00293785, total time[s] 0.070508 +Converged at iteration 25, L1 8.84922e-05, Linf 0.0039589, total time[s] 0.071417 +Converged at iteration 28, L1 7.72444e-05, Linf 0.00385628, total time[s] 0.10537 +Converged at iteration 30, L1 5.76599e-05, Linf 0.00451646, total time[s] 0.081805 +Converged at iteration 28, L1 6.95472e-05, Linf 0.00285154, total time[s] 0.077637 +Converged at iteration 29, L1 8.37739e-05, Linf 0.00400456, total time[s] 0.079327 +Converged at iteration 30, L1 6.46712e-05, Linf 0.00217599, total time[s] 0.093399 +Converged at iteration 28, L1 9.26644e-05, Linf 0.0024534, total time[s] 0.134183 +Converged at iteration 33, L1 5.75237e-05, Linf 0.00610909, total time[s] 0.129989 +Converged at iteration 27, L1 6.01079e-05, Linf 0.0031547, total time[s] 0.101717 +Converged at iteration 25, L1 8.61809e-05, Linf 0.00227857, total time[s] 0.111886 +Converged at iteration 23, L1 8.4379e-05, Linf 0.00349855, total time[s] 0.079454 +Converged at iteration 39, L1 7.00627e-05, Linf 0.00687403, total time[s] 0.112538 +Converged at iteration 36, L1 6.98007e-05, Linf 0.00561428, total time[s] 0.102308 +Converged at iteration 24, L1 9.62936e-05, Linf 0.0030683, total time[s] 0.084334 +Converged at iteration 30, L1 9.99516e-05, Linf 0.006145, total time[s] 0.101902 +Converged at iteration 25, L1 8.12108e-05, Linf 0.00655904, total time[s] 0.092331 +Converged at iteration 21, L1 6.41267e-05, Linf 0.00380558, total time[s] 0.071559 +Converged at iteration 19, L1 7.47874e-05, Linf 0.00465758, total time[s] 0.07438 +Converged at iteration 21, L1 4.14602e-05, Linf 0.0042247, total time[s] 0.084785 +Converged at iteration 24, L1 7.05535e-05, Linf 0.00390777, total time[s] 0.091957 +Converged at iteration 24, L1 7.77612e-05, Linf 0.00480198, total time[s] 0.077906 +Converged at iteration 20, L1 5.95606e-05, Linf 0.0051463, total time[s] 0.064912 +Converged at iteration 17, L1 5.84781e-05, Linf 0.00233495, total time[s] 0.045323 +Converged at iteration 32, L1 6.29313e-05, Linf 0.00256721, total time[s] 0.132451 +Converged at iteration 19, L1 9.90603e-05, Linf 0.00693571, total time[s] 0.102824 +Converged at iteration 23, L1 7.97594e-05, Linf 0.00701777, total time[s] 0.134896 +Converged at iteration 27, L1 5.9482e-05, Linf 0.00353404, total time[s] 0.125528 +Converged at iteration 23, L1 7.04135e-05, Linf 0.00568133, total time[s] 0.109131 +Converged at iteration 20, L1 9.69151e-05, Linf 0.00504276, total time[s] 0.088113 +Converged at iteration 23, L1 7.49568e-05, Linf 0.00293574, total time[s] 0.064055 +Converged at iteration 25, L1 8.89484e-05, Linf 0.00428999, total time[s] 0.07045 +Converged at iteration 28, L1 7.85855e-05, Linf 0.00369097, total time[s] 0.095631 +Converged at iteration 30, L1 5.75696e-05, Linf 0.00450409, total time[s] 0.108895 +Converged at iteration 28, L1 6.97229e-05, Linf 0.00286715, total time[s] 0.105163 +Converged at iteration 29, L1 8.33215e-05, Linf 0.00395948, total time[s] 0.212759 +Converged at iteration 30, L1 6.583e-05, Linf 0.0021815, total time[s] 0.080496 +Converged at iteration 28, L1 9.56919e-05, Linf 0.00250285, total time[s] 0.072933 +Converged at iteration 33, L1 5.85057e-05, Linf 0.00598359, total time[s] 0.086193 +Converged at iteration 27, L1 6.24068e-05, Linf 0.00321199, total time[s] 0.091327 +Converged at iteration 25, L1 8.51477e-05, Linf 0.00222401, total time[s] 0.197641 +Converged at iteration 23, L1 8.64742e-05, Linf 0.00355841, total time[s] 0.09566 +Converged at iteration 39, L1 6.79628e-05, Linf 0.00690459, total time[s] 0.175551 +Converged at iteration 36, L1 6.90295e-05, Linf 0.00579723, total time[s] 0.103461 +Converged at iteration 24, L1 9.40572e-05, Linf 0.0029198, total time[s] 0.099204 +Converged at iteration 30, L1 9.91407e-05, Linf 0.00615641, total time[s] 0.079713 +Converged at iteration 25, L1 7.54347e-05, Linf 0.00549253, total time[s] 0.083827 +Converged at iteration 21, L1 6.67582e-05, Linf 0.00396198, total time[s] 0.117055 +Converged at iteration 19, L1 7.2779e-05, Linf 0.00476379, total time[s] 0.111746 +Converged at iteration 21, L1 4.01182e-05, Linf 0.00388029, total time[s] 0.090493 +Converged at iteration 24, L1 6.48282e-05, Linf 0.00322877, total time[s] 0.09104 +Converged at iteration 24, L1 7.68965e-05, Linf 0.00472851, total time[s] 0.100857 +Converged at iteration 20, L1 5.82113e-05, Linf 0.00535013, total time[s] 0.107032 +Converged at iteration 17, L1 5.73301e-05, Linf 0.00222411, total time[s] 0.064464 +Converged at iteration 32, L1 6.16358e-05, Linf 0.00271624, total time[s] 0.156991 +Converged at iteration 19, L1 9.88158e-05, Linf 0.00680058, total time[s] 0.093795 +Converged at iteration 23, L1 7.89134e-05, Linf 0.00648596, total time[s] 0.102354 +Converged at iteration 27, L1 5.79346e-05, Linf 0.00340126, total time[s] 0.08711 +Converged at iteration 23, L1 7.10812e-05, Linf 0.00553208, total time[s] 0.063622 +Converged at iteration 20, L1 9.51705e-05, Linf 0.00503325, total time[s] 0.05342 +Converged at iteration 23, L1 7.63872e-05, Linf 0.00350597, total time[s] 0.077722 +Converged at iteration 25, L1 8.83093e-05, Linf 0.00408532, total time[s] 0.10403 +Converged at iteration 28, L1 7.80295e-05, Linf 0.00391868, total time[s] 0.074681 +Converged at iteration 30, L1 5.78318e-05, Linf 0.00445766, total time[s] 0.084997 +Converged at iteration 28, L1 6.98641e-05, Linf 0.00284178, total time[s] 0.081887 +Converged at iteration 29, L1 8.39854e-05, Linf 0.00402468, total time[s] 0.080547 +Converged at iteration 30, L1 6.50303e-05, Linf 0.00217468, total time[s] 0.082075 +Converged at iteration 28, L1 9.14026e-05, Linf 0.00241702, total time[s] 0.079278 +Converged at iteration 33, L1 5.72059e-05, Linf 0.00614729, total time[s] 0.081017 +Converged at iteration 26, L1 9.992e-05, Linf 0.00364074, total time[s] 0.066621 +Converged at iteration 25, L1 8.72507e-05, Linf 0.00231447, total time[s] 0.066684 +Converged at iteration 23, L1 8.35643e-05, Linf 0.00341911, total time[s] 0.064476 +Converged at iteration 39, L1 6.94503e-05, Linf 0.00684384, total time[s] 0.097084 +Converged at iteration 36, L1 6.98039e-05, Linf 0.00570621, total time[s] 0.120885 +Converged at iteration 24, L1 9.54288e-05, Linf 0.00299037, total time[s] 0.084777 +Converged at iteration 30, L1 9.948e-05, Linf 0.00614827, total time[s] 0.088876 +Converged at iteration 25, L1 7.7375e-05, Linf 0.00553982, total time[s] 0.077173 +Converged at iteration 21, L1 6.3662e-05, Linf 0.00388504, total time[s] 0.064882 +Converged at iteration 19, L1 7.3637e-05, Linf 0.00467887, total time[s] 0.059925 +Converged at iteration 21, L1 4.07637e-05, Linf 0.00400599, total time[s] 0.096529 +Converged at iteration 24, L1 6.72791e-05, Linf 0.00388413, total time[s] 0.076971 +Converged at iteration 24, L1 7.58852e-05, Linf 0.00477845, total time[s] 0.097003 +Converged at iteration 20, L1 5.93376e-05, Linf 0.00533015, total time[s] 0.077367 +Converged at iteration 17, L1 5.78163e-05, Linf 0.00227962, total time[s] 0.050131 +Converged at iteration 32, L1 6.19353e-05, Linf 0.00256964, total time[s] 0.093882 +Converged at iteration 19, L1 9.89741e-05, Linf 0.00686912, total time[s] 0.057548 +Converged at iteration 23, L1 7.95746e-05, Linf 0.00693836, total time[s] 0.071986 +Converged at iteration 27, L1 5.83941e-05, Linf 0.00343819, total time[s] 0.083686 +Converged at iteration 23, L1 7.07684e-05, Linf 0.00560366, total time[s] 0.064263 +Converged at iteration 20, L1 9.60412e-05, Linf 0.00503575, total time[s] 0.073632 +Converged at iteration 23, L1 7.53346e-05, Linf 0.0029417, total time[s] 0.065268 +Converged at iteration 25, L1 8.8602e-05, Linf 0.00412873, total time[s] 0.074962 +Converged at iteration 28, L1 7.71035e-05, Linf 0.00377322, total time[s] 0.072262 +Converged at iteration 30, L1 5.7698e-05, Linf 0.00448135, total time[s] 0.08244 +Converged at iteration 28, L1 6.95382e-05, Linf 0.00285576, total time[s] 0.070764 +Converged at iteration 29, L1 8.37592e-05, Linf 0.00399583, total time[s] 0.072958 +Converged at iteration 30, L1 6.45173e-05, Linf 0.0021771, total time[s] 0.075304 +Converged at iteration 28, L1 9.32301e-05, Linf 0.00246354, total time[s] 0.070035 +Converged at iteration 33, L1 5.76712e-05, Linf 0.00601842, total time[s] 0.081999 +Converged at iteration 27, L1 6.05063e-05, Linf 0.00316712, total time[s] 0.068127 +Converged at iteration 25, L1 8.5933e-05, Linf 0.00226953, total time[s] 0.065578 +Converged at iteration 23, L1 8.47427e-05, Linf 0.00348044, total time[s] 0.068125 +Converged at iteration 39, L1 6.75807e-05, Linf 0.00694167, total time[s] 0.105487 +Converged at iteration 36, L1 6.87682e-05, Linf 0.00584973, total time[s] 0.088492 +Converged at iteration 24, L1 9.34179e-05, Linf 0.00289896, total time[s] 0.060902 +Converged at iteration 30, L1 9.85192e-05, Linf 0.00615011, total time[s] 0.076387 +Converged at iteration 25, L1 7.42045e-05, Linf 0.00546401, total time[s] 0.062984 +Converged at iteration 21, L1 6.66265e-05, Linf 0.00400774, total time[s] 0.054086 +Converged at iteration 19, L1 7.2192e-05, Linf 0.00481598, total time[s] 0.0502 +Converged at iteration 21, L1 3.96829e-05, Linf 0.00379987, total time[s] 0.112597 +Converged at iteration 24, L1 6.27565e-05, Linf 0.00315536, total time[s] 0.112588 +Converged at iteration 24, L1 7.35194e-05, Linf 0.0047381, total time[s] 0.089744 +Converged at iteration 20, L1 5.77576e-05, Linf 0.00533121, total time[s] 0.112792 +Converged at iteration 17, L1 5.70316e-05, Linf 0.00219075, total time[s] 0.089437 +Converged at iteration 32, L1 6.07798e-05, Linf 0.00263035, total time[s] 0.084496 +Converged at iteration 19, L1 9.87592e-05, Linf 0.00675506, total time[s] 0.05019 +Converged at iteration 23, L1 7.85002e-05, Linf 0.00685896, total time[s] 0.060517 +Converged at iteration 27, L1 5.75827e-05, Linf 0.00329859, total time[s] 0.08659 +Converged at iteration 23, L1 7.133e-05, Linf 0.005461, total time[s] 0.060087 +Converged at iteration 20, L1 9.47695e-05, Linf 0.00505412, total time[s] 0.051884 +Converged at iteration 23, L1 7.58258e-05, Linf 0.00291961, total time[s] 0.060173 +Converged at iteration 25, L1 8.80638e-05, Linf 0.00380094, total time[s] 0.065212 +Converged at iteration 28, L1 7.55607e-05, Linf 0.00388272, total time[s] 0.073905 +Converged at iteration 30, L1 5.78969e-05, Linf 0.00449232, total time[s] 0.078802 +Converged at iteration 28, L1 7.00715e-05, Linf 0.00285848, total time[s] 0.070419 +Converged at iteration 29, L1 8.42461e-05, Linf 0.00405444, total time[s] 0.073301 +Converged at iteration 30, L1 6.36806e-05, Linf 0.00217266, total time[s] 0.077262 +Converged at iteration 28, L1 8.98565e-05, Linf 0.00238323, total time[s] 0.070911 +Converged at iteration 33, L1 5.65687e-05, Linf 0.00607388, total time[s] 0.082235 +Converged at iteration 26, L1 9.85028e-05, Linf 0.00361151, total time[s] 0.066564 +Converged at iteration 25, L1 8.74708e-05, Linf 0.00233995, total time[s] 0.065182 +Converged at iteration 23, L1 8.25729e-05, Linf 0.00332612, total time[s] 0.059387 +Converged at iteration 39, L1 6.47897e-05, Linf 0.00709571, total time[s] 0.100688 +Converged at iteration 36, L1 6.742e-05, Linf 0.00609027, total time[s] 0.090371 +Converged at iteration 24, L1 9.10549e-05, Linf 0.00264763, total time[s] 0.061564 +Converged at iteration 30, L1 9.71965e-05, Linf 0.00616169, total time[s] 0.07578 +Converged at iteration 25, L1 6.96299e-05, Linf 0.00534191, total time[s] 0.063403 +Converged at iteration 21, L1 7.12762e-05, Linf 0.00421311, total time[s] 0.054434 +Converged at iteration 19, L1 7.03058e-05, Linf 0.00504218, total time[s] 0.053549 +Converged at iteration 21, L1 3.84088e-05, Linf 0.00331922, total time[s] 0.055514 +Converged at iteration 24, L1 5.68576e-05, Linf 0.00302671, total time[s] 0.063336 +Converged at iteration 24, L1 6.91086e-05, Linf 0.00467043, total time[s] 0.065215 +Converged at iteration 20, L1 5.54317e-05, Linf 0.0052484, total time[s] 0.057548 +Converged at iteration 17, L1 5.61596e-05, Linf 0.0020933, total time[s] 0.045581 +Converged at iteration 32, L1 5.93639e-05, Linf 0.00269274, total time[s] 0.081852 +Converged at iteration 19, L1 9.85759e-05, Linf 0.00661797, total time[s] 0.049965 +Converged at iteration 23, L1 7.69637e-05, Linf 0.00699701, total time[s] 0.058164 +Converged at iteration 26, L1 9.72202e-05, Linf 0.00517816, total time[s] 0.067538 +Converged at iteration 23, L1 7.24996e-05, Linf 0.00527106, total time[s] 0.058743 +Converged at iteration 20, L1 9.31605e-05, Linf 0.00489805, total time[s] 0.051657 +Converged at iteration 23, L1 7.61502e-05, Linf 0.00290238, total time[s] 0.059682 +Converged at iteration 25, L1 8.72827e-05, Linf 0.00368449, total time[s] 0.06413 +Converged at iteration 28, L1 7.31396e-05, Linf 0.00346471, total time[s] 0.082816 +Converged at iteration 30, L1 5.84087e-05, Linf 0.00458006, total time[s] 0.077367 +Converged at iteration 28, L1 7.12336e-05, Linf 0.00274447, total time[s] 0.082467 +Converged at iteration 29, L1 8.53336e-05, Linf 0.00414048, total time[s] 0.092676 +Converged at iteration 30, L1 6.26953e-05, Linf 0.00215517, total time[s] 0.089746 +Converged at iteration 28, L1 8.5734e-05, Linf 0.00222006, total time[s] 0.071876 +Converged at iteration 32, L1 9.8263e-05, Linf 0.00728511, total time[s] 0.080251 +Converged at iteration 26, L1 9.45331e-05, Linf 0.00347671, total time[s] 0.066314 +Converged at iteration 25, L1 8.93023e-05, Linf 0.00244867, total time[s] 0.063205 +Converged at iteration 23, L1 8.01116e-05, Linf 0.00322011, total time[s] 0.05901 +Converged at iteration 39, L1 6.73749e-05, Linf 0.00701803, total time[s] 0.10071 +Converged at iteration 36, L1 6.82813e-05, Linf 0.00605023, total time[s] 0.088751 +Converged at iteration 24, L1 9.21159e-05, Linf 0.00275385, total time[s] 0.062203 +Converged at iteration 30, L1 9.78545e-05, Linf 0.00611874, total time[s] 0.074496 +Converged at iteration 25, L1 7.18918e-05, Linf 0.0054031, total time[s] 0.063123 +Converged at iteration 21, L1 6.95009e-05, Linf 0.00411085, total time[s] 0.053805 +Converged at iteration 19, L1 7.14885e-05, Linf 0.00494326, total time[s] 0.049367 +Converged at iteration 21, L1 3.89085e-05, Linf 0.0035726, total time[s] 0.053704 +Converged at iteration 24, L1 5.96187e-05, Linf 0.00356209, total time[s] 0.06123 +Converged at iteration 24, L1 7.1551e-05, Linf 0.00473531, total time[s] 0.060445 +Converged at iteration 20, L1 5.64039e-05, Linf 0.00529021, total time[s] 0.05213 +Converged at iteration 17, L1 5.65576e-05, Linf 0.00212146, total time[s] 0.046363 +Converged at iteration 32, L1 5.99524e-05, Linf 0.00264396, total time[s] 0.116473 +Converged at iteration 19, L1 9.87092e-05, Linf 0.00667165, total time[s] 0.067556 +Converged at iteration 23, L1 7.74429e-05, Linf 0.00661794, total time[s] 0.066091 +Converged at iteration 26, L1 9.89223e-05, Linf 0.00521336, total time[s] 0.067623 +Converged at iteration 23, L1 7.17692e-05, Linf 0.0053738, total time[s] 0.060094 +Converged at iteration 20, L1 9.38061e-05, Linf 0.00496141, total time[s] 0.092635 +Converged at iteration 23, L1 7.60621e-05, Linf 0.00290517, total time[s] 0.064411 +Converged at iteration 25, L1 8.76056e-05, Linf 0.00376253, total time[s] 0.066954 +Converged at iteration 28, L1 7.51969e-05, Linf 0.0036694, total time[s] 0.073466 +Converged at iteration 30, L1 5.81263e-05, Linf 0.0044674, total time[s] 0.076662 +Converged at iteration 28, L1 7.07248e-05, Linf 0.00279483, total time[s] 0.08083 +Converged at iteration 29, L1 8.45796e-05, Linf 0.00409655, total time[s] 0.078192 +Converged at iteration 30, L1 6.26905e-05, Linf 0.00216543, total time[s] 0.082581 +Converged at iteration 28, L1 8.80159e-05, Linf 0.00229453, total time[s] 0.082774 +Converged at iteration 32, L1 9.9109e-05, Linf 0.0072237, total time[s] 0.088967 +Converged at iteration 26, L1 9.65725e-05, Linf 0.00354297, total time[s] 0.071811 +Converged at iteration 25, L1 8.84947e-05, Linf 0.00239535, total time[s] 0.068867 +Converged at iteration 23, L1 8.10363e-05, Linf 0.00330871, total time[s] 0.063741 +Converged at iteration 39, L1 6.43158e-05, Linf 0.00714487, total time[s] 0.098744 +Converged at iteration 36, L1 6.69393e-05, Linf 0.00616043, total time[s] 0.092612 +Converged at iteration 24, L1 9.08755e-05, Linf 0.00266733, total time[s] 0.066398 +Converged at iteration 30, L1 9.68399e-05, Linf 0.00613579, total time[s] 0.084289 +Converged at iteration 25, L1 6.82458e-05, Linf 0.00530539, total time[s] 0.071879 +Converged at iteration 21, L1 7.34904e-05, Linf 0.00427352, total time[s] 0.085118 +Converged at iteration 19, L1 6.98196e-05, Linf 0.00511282, total time[s] 0.054262 +Converged at iteration 21, L1 3.83086e-05, Linf 0.00324221, total time[s] 0.060307 +Converged at iteration 24, L1 5.53654e-05, Linf 0.00288189, total time[s] 0.070362 +Converged at iteration 24, L1 6.80746e-05, Linf 0.00464894, total time[s] 0.064049 +Converged at iteration 20, L1 5.49122e-05, Linf 0.00522264, total time[s] 0.057617 +Converged at iteration 17, L1 5.59273e-05, Linf 0.00207976, total time[s] 0.046846 +Converged at iteration 32, L1 5.90757e-05, Linf 0.00270843, total time[s] 0.082577 +Converged at iteration 19, L1 9.86006e-05, Linf 0.00658844, total time[s] 0.051188 +Converged at iteration 23, L1 7.66576e-05, Linf 0.00634936, total time[s] 0.061154 +Converged at iteration 26, L1 9.61133e-05, Linf 0.00513548, total time[s] 0.113798 +Converged at iteration 23, L1 7.31271e-05, Linf 0.00521823, total time[s] 0.122749 +Converged at iteration 20, L1 9.27219e-05, Linf 0.0048378, total time[s] 0.090848 +Converged at iteration 23, L1 7.62774e-05, Linf 0.00288859, total time[s] 0.076577 +Converged at iteration 25, L1 8.72633e-05, Linf 0.00364202, total time[s] 0.078601 +Converged at iteration 28, L1 7.24669e-05, Linf 0.0033356, total time[s] 0.092369 +Converged at iteration 30, L1 5.86918e-05, Linf 0.00453148, total time[s] 0.096524 +Converged at iteration 28, L1 7.15384e-05, Linf 0.00269318, total time[s] 0.233614 +Converged at iteration 29, L1 8.51059e-05, Linf 0.00416011, total time[s] 0.0889 +Converged at iteration 30, L1 6.1636e-05, Linf 0.00215192, total time[s] 0.110774 +Converged at iteration 28, L1 8.46455e-05, Linf 0.00216611, total time[s] 0.088296 +Converged at iteration 32, L1 9.77811e-05, Linf 0.00732478, total time[s] 0.103513 +Converged at iteration 26, L1 9.23433e-05, Linf 0.00343619, total time[s] 0.105004 +Converged at iteration 25, L1 8.98003e-05, Linf 0.00247964, total time[s] 0.081841 +Converged at iteration 23, L1 7.89921e-05, Linf 0.00319812, total time[s] 0.084448 +Converged at iteration 39, L1 6.60229e-05, Linf 0.00708148, total time[s] 0.108468 +Converged at iteration 36, L1 6.75583e-05, Linf 0.00606892, total time[s] 0.098489 +Converged at iteration 24, L1 9.12304e-05, Linf 0.00266247, total time[s] 0.065507 +Converged at iteration 30, L1 9.74684e-05, Linf 0.00615912, total time[s] 0.088066 +Converged at iteration 25, L1 7.02058e-05, Linf 0.00535427, total time[s] 0.079937 +Converged at iteration 21, L1 7.12433e-05, Linf 0.00419347, total time[s] 0.071589 +Converged at iteration 19, L1 7.05085e-05, Linf 0.00508602, total time[s] 0.057635 +Converged at iteration 21, L1 3.84801e-05, Linf 0.00333934, total time[s] 0.063094 +Converged at iteration 24, L1 5.73803e-05, Linf 0.0031765, total time[s] 0.098207 +Converged at iteration 24, L1 6.94983e-05, Linf 0.00467706, total time[s] 0.093364 +Converged at iteration 20, L1 5.55294e-05, Linf 0.00525683, total time[s] 0.0655 +Converged at iteration 17, L1 5.62897e-05, Linf 0.00209744, total time[s] 0.069613 +Converged at iteration 32, L1 5.96971e-05, Linf 0.00268725, total time[s] 0.08533 +Converged at iteration 19, L1 9.91754e-05, Linf 0.00661782, total time[s] 0.050995 +Converged at iteration 23, L1 7.69204e-05, Linf 0.00648667, total time[s] 0.063069 +Converged at iteration 26, L1 9.76427e-05, Linf 0.00517595, total time[s] 0.068505 +Converged at iteration 23, L1 7.23257e-05, Linf 0.0052853, total time[s] 0.062938 +Converged at iteration 20, L1 9.32851e-05, Linf 0.00489823, total time[s] 0.058168 +Converged at iteration 23, L1 7.61499e-05, Linf 0.00289576, total time[s] 0.073881 +Converged at iteration 25, L1 8.75951e-05, Linf 0.00385921, total time[s] 0.085186 +Converged at iteration 28, L1 7.35396e-05, Linf 0.00349977, total time[s] 0.096714 +Converged at iteration 30, L1 5.84917e-05, Linf 0.00452722, total time[s] 0.091021 +Converged at iteration 28, L1 7.10659e-05, Linf 0.00275664, total time[s] 0.112497 +Converged at iteration 29, L1 8.56746e-05, Linf 0.00413506, total time[s] 0.095941 +Converged at iteration 30, L1 6.28428e-05, Linf 0.00215783, total time[s] 0.095512 +Converged at iteration 28, L1 8.62636e-05, Linf 0.00223734, total time[s] 0.088116 +Converged at iteration 32, L1 9.84934e-05, Linf 0.00736111, total time[s] 0.093593 +Converged at iteration 26, L1 9.40551e-05, Linf 0.00348862, total time[s] 0.072698 +Converged at iteration 25, L1 8.98111e-05, Linf 0.00243821, total time[s] 0.171219 +Converged at iteration 23, L1 8.04714e-05, Linf 0.003241, total time[s] 0.065581 +Converged at iteration 39, L1 6.48906e-05, Linf 0.00717614, total time[s] 0.110671 +Converged at iteration 36, L1 6.69885e-05, Linf 0.00629824, total time[s] 0.096912 +Converged at iteration 24, L1 9.0792e-05, Linf 0.0026891, total time[s] 0.068406 +Converged at iteration 30, L1 9.71905e-05, Linf 0.0061752, total time[s] 0.115887 +Converged at iteration 25, L1 6.72296e-05, Linf 0.00527581, total time[s] 0.093926 +Converged at iteration 21, L1 7.38156e-05, Linf 0.00432156, total time[s] 0.091569 +Converged at iteration 19, L1 6.94352e-05, Linf 0.00517005, total time[s] 0.066444 +Converged at iteration 21, L1 3.81329e-05, Linf 0.00317215, total time[s] 0.0727 +Converged at iteration 24, L1 5.43094e-05, Linf 0.00284992, total time[s] 0.112628 +Converged at iteration 24, L1 6.72297e-05, Linf 0.00463153, total time[s] 0.073229 +Converged at iteration 20, L1 5.42501e-05, Linf 0.0052022, total time[s] 0.0551 +Converged at iteration 17, L1 5.56945e-05, Linf 0.00206819, total time[s] 0.086772 +Converged at iteration 32, L1 5.91358e-05, Linf 0.00271927, total time[s] 0.099042 +Converged at iteration 19, L1 9.84196e-05, Linf 0.00655781, total time[s] 0.058254 +Converged at iteration 23, L1 7.65286e-05, Linf 0.0063186, total time[s] 0.104163 +Converged at iteration 26, L1 9.71103e-05, Linf 0.00510525, total time[s] 0.10586 +Converged at iteration 23, L1 7.36949e-05, Linf 0.00517521, total time[s] 0.086996 +Converged at iteration 20, L1 9.24423e-05, Linf 0.0047426, total time[s] 0.096331 +Converged at iteration 23, L1 7.76072e-05, Linf 0.00288211, total time[s] 0.127867 +Converged at iteration 25, L1 8.7062e-05, Linf 0.00361252, total time[s] 0.08203 +Converged at iteration 28, L1 7.20076e-05, Linf 0.00324611, total time[s] 0.136547 +Converged at iteration 30, L1 5.89313e-05, Linf 0.00450659, total time[s] 0.121264 +Converged at iteration 28, L1 7.16261e-05, Linf 0.0026436, total time[s] 0.117354 +Converged at iteration 29, L1 8.5338e-05, Linf 0.00417072, total time[s] 0.12368 +Converged at iteration 30, L1 6.16039e-05, Linf 0.00215071, total time[s] 0.10554 +Converged at iteration 28, L1 8.41322e-05, Linf 0.00211812, total time[s] 0.125598 +Converged at iteration 32, L1 9.74279e-05, Linf 0.00726955, total time[s] 0.09624 +Converged at iteration 26, L1 9.21895e-05, Linf 0.00340116, total time[s] 0.109598 +Converged at iteration 25, L1 9.06172e-05, Linf 0.00250464, total time[s] 0.099523 +Converged at iteration 23, L1 7.84365e-05, Linf 0.00317974, total time[s] 0.076635 +Converged at iteration 39, L1 6.12131e-05, Linf 0.00744489, total time[s] 0.110929 +Converged at iteration 36, L1 6.61335e-05, Linf 0.00645263, total time[s] 0.101692 +Converged at iteration 24, L1 8.98921e-05, Linf 0.00279155, total time[s] 0.075535 +Converged at iteration 30, L1 9.57102e-05, Linf 0.00620252, total time[s] 0.091852 +Converged at iteration 25, L1 6.313e-05, Linf 0.00515225, total time[s] 0.097323 +Converged at iteration 21, L1 7.88263e-05, Linf 0.0045184, total time[s] 0.080327 +Converged at iteration 19, L1 6.81099e-05, Linf 0.00536894, total time[s] 0.064274 +Converged at iteration 21, L1 3.77566e-05, Linf 0.00311642, total time[s] 0.085632 +Converged at iteration 24, L1 5.06537e-05, Linf 0.00269217, total time[s] 0.1241 +Converged at iteration 24, L1 6.32929e-05, Linf 0.00458395, total time[s] 0.076625 +Converged at iteration 20, L1 5.25549e-05, Linf 0.00512663, total time[s] 0.057934 +Converged at iteration 17, L1 5.49753e-05, Linf 0.00200939, total time[s] 0.053728 +Converged at iteration 32, L1 5.78509e-05, Linf 0.0027269, total time[s] 0.114183 +Converged at iteration 19, L1 9.81274e-05, Linf 0.00648299, total time[s] 0.063669 +Converged at iteration 23, L1 7.46e-05, Linf 0.00590179, total time[s] 0.081066 +Converged at iteration 26, L1 9.57408e-05, Linf 0.00497341, total time[s] 0.088186 +Converged at iteration 23, L1 7.62085e-05, Linf 0.00495703, total time[s] 0.073644 +Converged at iteration 20, L1 9.15189e-05, Linf 0.00447916, total time[s] 0.069513 +Converged at iteration 23, L1 7.70285e-05, Linf 0.00287377, total time[s] 0.062945 +Converged at iteration 25, L1 8.62744e-05, Linf 0.00351201, total time[s] 0.065526 +Converged at iteration 28, L1 6.9267e-05, Linf 0.00315071, total time[s] 0.074451 +Converged at iteration 30, L1 5.97886e-05, Linf 0.00439822, total time[s] 0.078176 +Converged at iteration 28, L1 7.28857e-05, Linf 0.00251035, total time[s] 0.072911 +Converged at iteration 29, L1 8.69182e-05, Linf 0.00424128, total time[s] 0.076378 +Converged at iteration 30, L1 6.02086e-05, Linf 0.00214143, total time[s] 0.080913 +Converged at iteration 28, L1 8.26359e-05, Linf 0.00190565, total time[s] 0.074365 +Converged at iteration 32, L1 9.59255e-05, Linf 0.00758839, total time[s] 0.085017 +Converged at iteration 26, L1 8.60892e-05, Linf 0.00325606, total time[s] 0.095301 +Converged at iteration 25, L1 9.23167e-05, Linf 0.00260384, total time[s] 0.083592 +Converged at iteration 23, L1 7.67076e-05, Linf 0.00303544, total time[s] 0.071212 +Converged at iteration 39, L1 6.1925e-05, Linf 0.00725504, total time[s] 0.116707 +Converged at iteration 36, L1 6.58192e-05, Linf 0.0063349, total time[s] 0.094016 +Converged at iteration 24, L1 9.02288e-05, Linf 0.00273591, total time[s] 0.064861 +Converged at iteration 30, L1 9.65783e-05, Linf 0.00618711, total time[s] 0.079946 +Converged at iteration 25, L1 6.50564e-05, Linf 0.00515012, total time[s] 0.07216 +Converged at iteration 21, L1 7.6771e-05, Linf 0.0044214, total time[s] 0.08607 +Converged at iteration 19, L1 6.8739e-05, Linf 0.00529404, total time[s] 0.076384 +Converged at iteration 21, L1 3.78621e-05, Linf 0.00306951, total time[s] 0.060208 +Converged at iteration 24, L1 5.23525e-05, Linf 0.00309115, total time[s] 0.092042 +Converged at iteration 24, L1 6.4776e-05, Linf 0.00459253, total time[s] 0.090011 +Converged at iteration 20, L1 5.3326e-05, Linf 0.00510307, total time[s] 0.088078 +Converged at iteration 17, L1 5.52956e-05, Linf 0.00204089, total time[s] 0.114081 +Converged at iteration 32, L1 5.83683e-05, Linf 0.00273663, total time[s] 0.134188 +Converged at iteration 19, L1 9.82211e-05, Linf 0.00652023, total time[s] 0.311685 +Converged at iteration 23, L1 7.51283e-05, Linf 0.00608813, total time[s] 0.188314 +Converged at iteration 26, L1 9.5854e-05, Linf 0.00503721, total time[s] 0.136331 +Converged at iteration 23, L1 7.55476e-05, Linf 0.00509874, total time[s] 0.071567 +Converged at iteration 20, L1 9.18327e-05, Linf 0.00462887, total time[s] 0.056506 +Converged at iteration 23, L1 7.67227e-05, Linf 0.0028853, total time[s] 0.078156 +Converged at iteration 25, L1 8.69285e-05, Linf 0.00364821, total time[s] 0.075164 +Converged at iteration 28, L1 7.05506e-05, Linf 0.00319218, total time[s] 0.086938 +Converged at iteration 30, L1 5.94433e-05, Linf 0.00446596, total time[s] 0.083794 +Converged at iteration 28, L1 7.2209e-05, Linf 0.00245727, total time[s] 0.078511 +Converged at iteration 29, L1 8.60582e-05, Linf 0.00419893, total time[s] 0.090588 +Converged at iteration 30, L1 6.0797e-05, Linf 0.00214795, total time[s] 0.088138 +Converged at iteration 28, L1 8.31478e-05, Linf 0.00200843, total time[s] 0.09601 +Converged at iteration 32, L1 9.66716e-05, Linf 0.00751749, total time[s] 0.101588 +Converged at iteration 26, L1 8.83389e-05, Linf 0.00333089, total time[s] 0.078641 +Converged at iteration 25, L1 9.0908e-05, Linf 0.00255547, total time[s] 0.065983 +Converged at iteration 23, L1 7.72734e-05, Linf 0.00312342, total time[s] 0.061324 +Converged at iteration 39, L1 5.96856e-05, Linf 0.00729773, total time[s] 0.126407 +Converged at iteration 36, L1 6.57477e-05, Linf 0.00651953, total time[s] 0.10594 +Converged at iteration 24, L1 8.96509e-05, Linf 0.00282432, total time[s] 0.066036 +Converged at iteration 30, L1 9.52299e-05, Linf 0.00619615, total time[s] 0.089154 +Converged at iteration 25, L1 6.18277e-05, Linf 0.0051128, total time[s] 0.079758 +Converged at iteration 21, L1 7.90742e-05, Linf 0.00457675, total time[s] 0.089509 +Converged at iteration 19, L1 6.77357e-05, Linf 0.00549927, total time[s] 0.056982 +Converged at iteration 21, L1 3.77621e-05, Linf 0.00313001, total time[s] 0.093031 +Converged at iteration 23, L1 9.90453e-05, Linf 0.00408337, total time[s] 0.076358 +Converged at iteration 24, L1 6.19777e-05, Linf 0.00453042, total time[s] 0.078917 +Converged at iteration 20, L1 5.18805e-05, Linf 0.00508406, total time[s] 0.053961 +Converged at iteration 17, L1 5.48362e-05, Linf 0.00198819, total time[s] 0.048449 +Converged at iteration 32, L1 5.75974e-05, Linf 0.0027522, total time[s] 0.092054 +Converged at iteration 19, L1 9.80959e-05, Linf 0.00646618, total time[s] 0.052314 +Converged at iteration 23, L1 7.42988e-05, Linf 0.00579304, total time[s] 0.065037 +Converged at iteration 26, L1 9.38104e-05, Linf 0.00495534, total time[s] 0.092717 +Converged at iteration 23, L1 7.6832e-05, Linf 0.00489071, total time[s] 0.06513 +Converged at iteration 20, L1 9.14267e-05, Linf 0.00436883, total time[s] 0.052855 +Converged at iteration 23, L1 7.68314e-05, Linf 0.00292998, total time[s] 0.067925 +Converged at iteration 25, L1 8.59588e-05, Linf 0.00360117, total time[s] 0.065385 +Converged at iteration 28, L1 6.85827e-05, Linf 0.00313685, total time[s] 0.077063 +Converged at iteration 30, L1 6.00897e-05, Linf 0.00433205, total time[s] 0.078595 +Converged at iteration 28, L1 7.33918e-05, Linf 0.00256721, total time[s] 0.073277 +Converged at iteration 29, L1 8.72965e-05, Linf 0.00422238, total time[s] 0.075885 +Converged at iteration 30, L1 5.98836e-05, Linf 0.00213399, total time[s] 0.08212 +Converged at iteration 28, L1 8.25554e-05, Linf 0.00187237, total time[s] 0.073837 +Converged at iteration 32, L1 9.59247e-05, Linf 0.0076314, total time[s] 0.085142 +Converged at iteration 26, L1 8.63808e-05, Linf 0.00321025, total time[s] 0.068641 +Converged at iteration 25, L1 9.25652e-05, Linf 0.00263233, total time[s] 0.066053 +Converged at iteration 23, L1 7.61078e-05, Linf 0.00300591, total time[s] 0.062722 +Converged at iteration 39, L1 6.17795e-05, Linf 0.00731914, total time[s] 0.099498 +Converged at iteration 36, L1 6.5657e-05, Linf 0.00643433, total time[s] 0.126069 +Converged at iteration 24, L1 9.01552e-05, Linf 0.00277668, total time[s] 0.064799 +Converged at iteration 30, L1 9.61395e-05, Linf 0.00619456, total time[s] 0.077791 +Converged at iteration 25, L1 6.33978e-05, Linf 0.00516286, total time[s] 0.066359 +Converged at iteration 21, L1 7.75466e-05, Linf 0.00449975, total time[s] 0.056715 +Converged at iteration 19, L1 6.81499e-05, Linf 0.0053957, total time[s] 0.051566 +Converged at iteration 21, L1 3.78317e-05, Linf 0.0031098, total time[s] 0.056999 +Converged at iteration 24, L1 5.09172e-05, Linf 0.00270906, total time[s] 0.065032 +Converged at iteration 24, L1 6.38086e-05, Linf 0.00456235, total time[s] 0.064735 +Converged at iteration 20, L1 5.27497e-05, Linf 0.00512105, total time[s] 0.055561 +Converged at iteration 17, L1 5.50874e-05, Linf 0.00201638, total time[s] 0.046666 +Converged at iteration 32, L1 5.80612e-05, Linf 0.00274598, total time[s] 0.082973 +Converged at iteration 19, L1 9.82994e-05, Linf 0.00669765, total time[s] 0.052149 +Converged at iteration 23, L1 7.51857e-05, Linf 0.00630544, total time[s] 0.067145 +Converged at iteration 26, L1 9.48061e-05, Linf 0.00498527, total time[s] 0.071579 +Converged at iteration 23, L1 7.59246e-05, Linf 0.0049789, total time[s] 0.062931 +Converged at iteration 20, L1 9.15926e-05, Linf 0.00447718, total time[s] 0.058198 +Converged at iteration 23, L1 7.66809e-05, Linf 0.00287448, total time[s] 0.069969 +Converged at iteration 25, L1 8.63289e-05, Linf 0.00351958, total time[s] 0.089231 +Converged at iteration 28, L1 6.95197e-05, Linf 0.00315804, total time[s] 0.076497 +Converged at iteration 30, L1 5.97248e-05, Linf 0.00442753, total time[s] 0.128834 +Converged at iteration 28, L1 7.28028e-05, Linf 0.0025012, total time[s] 0.079318 +Converged at iteration 29, L1 8.81906e-05, Linf 0.00417746, total time[s] 0.090943 +Converged at iteration 30, L1 6.15921e-05, Linf 0.00214386, total time[s] 0.097454 +Converged at iteration 28, L1 8.27939e-05, Linf 0.00192635, total time[s] 0.076588 +Converged at iteration 32, L1 9.60632e-05, Linf 0.0075744, total time[s] 0.095899 +Converged at iteration 26, L1 8.65061e-05, Linf 0.00327109, total time[s] 0.112152 +Converged at iteration 25, L1 9.14936e-05, Linf 0.00259222, total time[s] 0.122572 +Converged at iteration 23, L1 7.65239e-05, Linf 0.00303272, total time[s] 0.095477 +Converged at iteration 39, L1 5.90585e-05, Linf 0.00741261, total time[s] 0.13434 +Converged at iteration 36, L1 6.47799e-05, Linf 0.0065731, total time[s] 0.13068 +Converged at iteration 24, L1 8.95555e-05, Linf 0.00285292, total time[s] 0.103492 +Converged at iteration 30, L1 9.48516e-05, Linf 0.0061935, total time[s] 0.12779 +Converged at iteration 25, L1 6.10071e-05, Linf 0.00508271, total time[s] 0.084997 +Converged at iteration 21, L1 8.08704e-05, Linf 0.0046229, total time[s] 0.069637 +Converged at iteration 19, L1 6.75485e-05, Linf 0.00563837, total time[s] 0.063241 +Converged at iteration 21, L1 3.78176e-05, Linf 0.00312676, total time[s] 0.066678 +Converged at iteration 23, L1 9.75814e-05, Linf 0.00416629, total time[s] 0.064493 +Converged at iteration 24, L1 6.08354e-05, Linf 0.00451056, total time[s] 0.077709 +Converged at iteration 20, L1 5.14956e-05, Linf 0.00506163, total time[s] 0.060464 +Converged at iteration 17, L1 5.47108e-05, Linf 0.00196991, total time[s] 0.05792 +Converged at iteration 32, L1 5.74031e-05, Linf 0.00273397, total time[s] 0.105203 +Converged at iteration 19, L1 9.80556e-05, Linf 0.00663593, total time[s] 0.055432 +Converged at iteration 23, L1 7.40805e-05, Linf 0.00570692, total time[s] 0.071486 +Converged at iteration 26, L1 9.37117e-05, Linf 0.00490656, total time[s] 0.088417 +Converged at iteration 23, L1 7.73726e-05, Linf 0.00483606, total time[s] 0.075141 +Converged at iteration 20, L1 9.14919e-05, Linf 0.0043183, total time[s] 0.071443 +Converged at iteration 23, L1 7.72254e-05, Linf 0.00287122, total time[s] 0.071948 +Converged at iteration 25, L1 8.59636e-05, Linf 0.00347668, total time[s] 0.07382 +Converged at iteration 28, L1 6.82137e-05, Linf 0.00311601, total time[s] 0.079507 +Converged at iteration 30, L1 6.04033e-05, Linf 0.00428225, total time[s] 0.079302 +Converged at iteration 28, L1 7.38095e-05, Linf 0.00274674, total time[s] 0.097408 +Converged at iteration 29, L1 8.76822e-05, Linf 0.00430327, total time[s] 0.087801 +Converged at iteration 30, L1 5.96528e-05, Linf 0.0021272, total time[s] 0.141619 +Converged at iteration 28, L1 8.29124e-05, Linf 0.00184931, total time[s] 0.11077 +Converged at iteration 32, L1 9.52764e-05, Linf 0.00777593, total time[s] 0.17441 +Converged at iteration 26, L1 8.3204e-05, Linf 0.00317231, total time[s] 0.100233 +Converged at iteration 25, L1 9.27488e-05, Linf 0.00265502, total time[s] 0.100285 +Converged at iteration 23, L1 7.51299e-05, Linf 0.00297938, total time[s] 0.081156 +Converged at iteration 39, L1 6.09965e-05, Linf 0.00737287, total time[s] 0.128034 +Converged at iteration 36, L1 6.64805e-05, Linf 0.0067471, total time[s] 0.158852 +Converged at iteration 24, L1 8.98623e-05, Linf 0.00281495, total time[s] 0.068916 +Converged at iteration 30, L1 9.52537e-05, Linf 0.0061628, total time[s] 0.088367 +Converged at iteration 25, L1 6.37929e-05, Linf 0.0054298, total time[s] 0.069169 +Converged at iteration 21, L1 7.99627e-05, Linf 0.00456158, total time[s] 0.074253 +Converged at iteration 19, L1 6.78218e-05, Linf 0.0055606, total time[s] 0.061778 +Converged at iteration 21, L1 3.78363e-05, Linf 0.00313052, total time[s] 0.062386 +Converged at iteration 23, L1 9.93718e-05, Linf 0.00409547, total time[s] 0.090966 +Converged at iteration 24, L1 6.21006e-05, Linf 0.00453558, total time[s] 0.071168 +Converged at iteration 20, L1 5.19162e-05, Linf 0.00524165, total time[s] 0.094098 +Converged at iteration 17, L1 5.49194e-05, Linf 0.00199392, total time[s] 0.05595 +Converged at iteration 32, L1 5.76313e-05, Linf 0.00275111, total time[s] 0.100515 +Converged at iteration 19, L1 9.81082e-05, Linf 0.00646272, total time[s] 0.061531 +Converged at iteration 23, L1 7.43889e-05, Linf 0.00582184, total time[s] 0.077255 +Converged at iteration 26, L1 9.39465e-05, Linf 0.00495093, total time[s] 0.073296 +Converged at iteration 23, L1 7.66566e-05, Linf 0.00491165, total time[s] 0.088387 +Converged at iteration 20, L1 9.16049e-05, Linf 0.00441457, total time[s] 0.067912 +Converged at iteration 23, L1 7.70173e-05, Linf 0.00294229, total time[s] 0.059829 +Converged at iteration 25, L1 8.62181e-05, Linf 0.00349694, total time[s] 0.072265 +Converged at iteration 28, L1 6.87777e-05, Linf 0.00313527, total time[s] 0.10867 +Converged at iteration 30, L1 6.00511e-05, Linf 0.00435083, total time[s] 0.079065 +Converged at iteration 28, L1 7.32946e-05, Linf 0.00252731, total time[s] 0.07233 +Converged at iteration 29, L1 8.72317e-05, Linf 0.00426648, total time[s] 0.074841 +Converged at iteration 30, L1 6.00209e-05, Linf 0.0021363, total time[s] 0.078908 +Converged at iteration 28, L1 8.27476e-05, Linf 0.00187974, total time[s] 0.073388 +Converged at iteration 32, L1 9.64136e-05, Linf 0.00753093, total time[s] 0.083156 +Converged at iteration 26, L1 8.63447e-05, Linf 0.0032226, total time[s] 0.07099 +Converged at iteration 25, L1 9.21566e-05, Linf 0.00262515, total time[s] 0.074952 +Converged at iteration 23, L1 7.59477e-05, Linf 0.00301514, total time[s] 0.06343 +Converged at iteration 39, L1 5.87655e-05, Linf 0.00743709, total time[s] 0.105963 +Converged at iteration 36, L1 6.45271e-05, Linf 0.00655204, total time[s] 0.113979 +Converged at iteration 24, L1 8.95205e-05, Linf 0.00287475, total time[s] 0.091385 +Converged at iteration 30, L1 9.4204e-05, Linf 0.00623009, total time[s] 0.097545 +Converged at iteration 25, L1 6.01708e-05, Linf 0.00505882, total time[s] 0.070828 +Converged at iteration 21, L1 8.06822e-05, Linf 0.00465935, total time[s] 0.060793 +Converged at iteration 19, L1 6.73892e-05, Linf 0.00563408, total time[s] 0.054917 +Converged at iteration 21, L1 3.77934e-05, Linf 0.00312006, total time[s] 0.063288 +Converged at iteration 23, L1 9.66616e-05, Linf 0.00435201, total time[s] 0.064943 +Converged at iteration 24, L1 5.9951e-05, Linf 0.00447156, total time[s] 0.091308 +Converged at iteration 20, L1 5.13609e-05, Linf 0.00504359, total time[s] 0.05557 +Converged at iteration 17, L1 5.46778e-05, Linf 0.00195454, total time[s] 0.057106 +Converged at iteration 32, L1 5.71103e-05, Linf 0.00275671, total time[s] 0.095465 +Converged at iteration 19, L1 9.79957e-05, Linf 0.00640242, total time[s] 0.062716 +Converged at iteration 23, L1 7.38133e-05, Linf 0.00563914, total time[s] 0.067495 +Converged at iteration 26, L1 9.35251e-05, Linf 0.0049124, total time[s] 0.076224 +Converged at iteration 23, L1 7.78403e-05, Linf 0.00479603, total time[s] 0.086787 +Converged at iteration 20, L1 9.14904e-05, Linf 0.00426204, total time[s] 0.064844 +Converged at iteration 23, L1 7.78584e-05, Linf 0.00287083, total time[s] 0.11073 +Converged at iteration 25, L1 8.55273e-05, Linf 0.00346646, total time[s] 0.114919 +Converged at iteration 28, L1 6.78417e-05, Linf 0.00310581, total time[s] 0.100352 +Converged at iteration 30, L1 6.06046e-05, Linf 0.00424326, total time[s] 0.144527 +Converged at iteration 28, L1 7.42178e-05, Linf 0.00291054, total time[s] 0.080795 +Converged at iteration 29, L1 8.79306e-05, Linf 0.00432782, total time[s] 0.098585 +Converged at iteration 30, L1 5.9492e-05, Linf 0.00212187, total time[s] 0.090825 +Converged at iteration 28, L1 8.32396e-05, Linf 0.0018319, total time[s] 0.082593 +Converged at iteration 32, L1 9.51316e-05, Linf 0.00769643, total time[s] 0.114098 +Converged at iteration 26, L1 8.28187e-05, Linf 0.0031423, total time[s] 0.124518 +Converged at iteration 25, L1 9.37837e-05, Linf 0.00267317, total time[s] 0.101301 +Converged at iteration 23, L1 7.52114e-05, Linf 0.00297344, total time[s] 0.081227 +Converged at iteration 39, L1 5.61015e-05, Linf 0.00756058, total time[s] 0.158297 +Converged at iteration 36, L1 6.33014e-05, Linf 0.00678736, total time[s] 0.100948 +Converged at iteration 24, L1 8.91692e-05, Linf 0.0029638, total time[s] 0.093819 +Converged at iteration 30, L1 9.33782e-05, Linf 0.00617665, total time[s] 0.094856 +Converged at iteration 25, L1 5.72532e-05, Linf 0.0049573, total time[s] 0.091209 +Converged at iteration 21, L1 8.40323e-05, Linf 0.00481154, total time[s] 0.070566 +Converged at iteration 19, L1 6.69852e-05, Linf 0.00583849, total time[s] 0.062778 +Converged at iteration 21, L1 3.8211e-05, Linf 0.00311469, total time[s] 0.06322 +Converged at iteration 23, L1 9.27544e-05, Linf 0.00394268, total time[s] 0.066498 +Converged at iteration 24, L1 5.62667e-05, Linf 0.0044239, total time[s] 0.066914 +Converged at iteration 20, L1 5.01009e-05, Linf 0.00496508, total time[s] 0.055386 +Converged at iteration 17, L1 5.44917e-05, Linf 0.00188179, total time[s] 0.04893 +Converged at iteration 32, L1 5.65226e-05, Linf 0.00276832, total time[s] 0.085732 +Converged at iteration 19, L1 9.76986e-05, Linf 0.00627305, total time[s] 0.057022 +Converged at iteration 23, L1 7.32869e-05, Linf 0.00537519, total time[s] 0.067033 +Converged at iteration 26, L1 9.34965e-05, Linf 0.00486539, total time[s] 0.083999 +Converged at iteration 23, L1 7.90986e-05, Linf 0.00460256, total time[s] 0.064161 +Converged at iteration 20, L1 9.16898e-05, Linf 0.00409208, total time[s] 0.060715 +Converged at iteration 23, L1 7.75367e-05, Linf 0.00287094, total time[s] 0.062825 +Converged at iteration 25, L1 8.47826e-05, Linf 0.00342071, total time[s] 0.074281 +Converged at iteration 27, L1 9.91709e-05, Linf 0.00394053, total time[s] 0.075304 +Converged at iteration 30, L1 6.16368e-05, Linf 0.00415871, total time[s] 0.08445 +Converged at iteration 28, L1 7.61537e-05, Linf 0.00405854, total time[s] 0.075369 +Converged at iteration 29, L1 8.90474e-05, Linf 0.00441319, total time[s] 0.07983 +Converged at iteration 29, L1 9.99022e-05, Linf 0.00275824, total time[s] 0.076685 +Converged at iteration 28, L1 8.581e-05, Linf 0.00176042, total time[s] 0.077428 +Converged at iteration 32, L1 9.38511e-05, Linf 0.00781579, total time[s] 0.096508 +Converged at iteration 26, L1 7.92515e-05, Linf 0.00300991, total time[s] 0.075123 +Converged at iteration 25, L1 9.33668e-05, Linf 0.00274415, total time[s] 0.072348 +Converged at iteration 23, L1 7.34858e-05, Linf 0.00288022, total time[s] 0.073306 +Converged at iteration 39, L1 5.73063e-05, Linf 0.0075018, total time[s] 0.105491 +Converged at iteration 36, L1 6.39214e-05, Linf 0.00679336, total time[s] 0.104086 +Converged at iteration 24, L1 8.93056e-05, Linf 0.00292186, total time[s] 0.069543 +Converged at iteration 30, L1 9.35645e-05, Linf 0.00617931, total time[s] 0.081489 +Converged at iteration 25, L1 5.8645e-05, Linf 0.00500796, total time[s] 0.067149 +Converged at iteration 21, L1 8.21337e-05, Linf 0.00473637, total time[s] 0.064572 +Converged at iteration 19, L1 6.6997e-05, Linf 0.00572578, total time[s] 0.058496 +Converged at iteration 21, L1 3.79023e-05, Linf 0.00308922, total time[s] 0.076881 +Converged at iteration 23, L1 9.45976e-05, Linf 0.00423921, total time[s] 0.070293 +Converged at iteration 24, L1 5.7916e-05, Linf 0.00445838, total time[s] 0.084921 +Converged at iteration 20, L1 5.06673e-05, Linf 0.00500567, total time[s] 0.063128 +Converged at iteration 17, L1 5.47886e-05, Linf 0.00305516, total time[s] 0.067605 +Converged at iteration 32, L1 5.66473e-05, Linf 0.00276155, total time[s] 0.092636 +Converged at iteration 19, L1 9.78315e-05, Linf 0.00631478, total time[s] 0.05381 +Converged at iteration 23, L1 7.37418e-05, Linf 0.00549977, total time[s] 0.067969 +Converged at iteration 26, L1 9.33351e-05, Linf 0.00488779, total time[s] 0.089252 +Converged at iteration 23, L1 7.91347e-05, Linf 0.0047027, total time[s] 0.103548 +Converged at iteration 20, L1 9.22198e-05, Linf 0.00452727, total time[s] 0.065162 +Converged at iteration 23, L1 7.76246e-05, Linf 0.00287053, total time[s] 0.094455 +Converged at iteration 25, L1 8.50431e-05, Linf 0.00344342, total time[s] 0.085202 +Converged at iteration 28, L1 6.66423e-05, Linf 0.00308716, total time[s] 0.120491 +Converged at iteration 30, L1 6.11438e-05, Linf 0.00416434, total time[s] 0.127321 +Converged at iteration 28, L1 7.50969e-05, Linf 0.00323635, total time[s] 0.078063 +Converged at iteration 29, L1 8.84789e-05, Linf 0.00437504, total time[s] 0.103708 +Converged at iteration 29, L1 9.99385e-05, Linf 0.00275181, total time[s] 0.085637 +Converged at iteration 28, L1 8.42703e-05, Linf 0.00179933, total time[s] 0.085286 +Converged at iteration 32, L1 9.43789e-05, Linf 0.00775514, total time[s] 0.11082 +Converged at iteration 26, L1 8.1015e-05, Linf 0.00307649, total time[s] 0.089397 +Converged at iteration 25, L1 9.30101e-05, Linf 0.00270921, total time[s] 0.067159 +Converged at iteration 23, L1 7.41028e-05, Linf 0.00290707, total time[s] 0.062987 +Converged at iteration 39, L1 5.54978e-05, Linf 0.00759646, total time[s] 0.118683 +Converged at iteration 36, L1 6.30246e-05, Linf 0.00683569, total time[s] 0.112618 +Converged at iteration 24, L1 8.91141e-05, Linf 0.00298776, total time[s] 0.077532 +Converged at iteration 30, L1 9.28296e-05, Linf 0.00622, total time[s] 0.102668 +Converged at iteration 25, L1 5.6482e-05, Linf 0.00488005, total time[s] 0.074077 +Converged at iteration 21, L1 8.55661e-05, Linf 0.00485802, total time[s] 0.104705 +Converged at iteration 19, L1 6.65142e-05, Linf 0.00598852, total time[s] 0.078713 +Converged at iteration 21, L1 3.83678e-05, Linf 0.00312722, total time[s] 0.104927 +Converged at iteration 23, L1 9.1696e-05, Linf 0.00391581, total time[s] 0.10691 +Converged at iteration 24, L1 5.52575e-05, Linf 0.00440167, total time[s] 0.072089 +Converged at iteration 20, L1 4.93641e-05, Linf 0.00494111, total time[s] 0.061881 +Converged at iteration 17, L1 5.43792e-05, Linf 0.00185775, total time[s] 0.05586 +Converged at iteration 32, L1 5.58853e-05, Linf 0.00277306, total time[s] 0.099731 +Converged at iteration 19, L1 9.76457e-05, Linf 0.00623307, total time[s] 0.054994 +Converged at iteration 23, L1 7.25354e-05, Linf 0.00528361, total time[s] 0.063839 +Converged at iteration 26, L1 9.36271e-05, Linf 0.00485691, total time[s] 0.06794 +Converged at iteration 23, L1 7.93312e-05, Linf 0.00454977, total time[s] 0.076129 +Converged at iteration 20, L1 9.18766e-05, Linf 0.00404778, total time[s] 0.062967 +Converged at iteration 23, L1 7.76598e-05, Linf 0.00287161, total time[s] 0.06059 +Converged at iteration 25, L1 8.46883e-05, Linf 0.00340805, total time[s] 0.073921 +Converged at iteration 27, L1 9.80754e-05, Linf 0.00389474, total time[s] 0.118877 +Converged at iteration 30, L1 6.21268e-05, Linf 0.00415396, total time[s] 0.088675 +Converged at iteration 28, L1 7.70464e-05, Linf 0.00437423, total time[s] 0.077375 +Converged at iteration 29, L1 8.93686e-05, Linf 0.00443516, total time[s] 0.076705 +Converged at iteration 29, L1 9.97654e-05, Linf 0.00276268, total time[s] 0.077201 +Converged at iteration 28, L1 8.71366e-05, Linf 0.00173333, total time[s] 0.077988 +Converged at iteration 32, L1 9.35676e-05, Linf 0.00785254, total time[s] 0.084868 +Converged at iteration 26, L1 7.82525e-05, Linf 0.00296808, total time[s] 0.070283 +Converged at iteration 25, L1 9.36206e-05, Linf 0.00277256, total time[s] 0.069123 +Converged at iteration 23, L1 7.32906e-05, Linf 0.00286765, total time[s] 0.067368 +Converged at iteration 39, L1 5.64009e-05, Linf 0.00754979, total time[s] 0.1111 +Converged at iteration 36, L1 6.35093e-05, Linf 0.00677048, total time[s] 0.109316 +Converged at iteration 24, L1 8.92249e-05, Linf 0.00295589, total time[s] 0.065646 +Converged at iteration 30, L1 9.53582e-05, Linf 0.0061426, total time[s] 0.088979 +Converged at iteration 25, L1 5.75299e-05, Linf 0.00496759, total time[s] 0.081986 +Converged at iteration 21, L1 8.39957e-05, Linf 0.00479703, total time[s] 0.062168 +Converged at iteration 19, L1 6.67327e-05, Linf 0.00563126, total time[s] 0.086313 +Converged at iteration 21, L1 3.81917e-05, Linf 0.00310491, total time[s] 0.069232 +Converged at iteration 23, L1 9.31068e-05, Linf 0.00395167, total time[s] 0.081853 +Converged at iteration 24, L1 5.6644e-05, Linf 0.00443094, total time[s] 0.089219 +Converged at iteration 20, L1 5.01134e-05, Linf 0.00504304, total time[s] 0.081147 +Converged at iteration 17, L1 5.45174e-05, Linf 0.00188949, total time[s] 0.066669 +Converged at iteration 32, L1 5.67811e-05, Linf 0.00277472, total time[s] 0.116625 +Converged at iteration 19, L1 9.76351e-05, Linf 0.00628723, total time[s] 0.057005 +Converged at iteration 23, L1 7.35528e-05, Linf 0.00538991, total time[s] 0.068048 +Converged at iteration 26, L1 9.35062e-05, Linf 0.00486933, total time[s] 0.070971 +Converged at iteration 23, L1 7.89946e-05, Linf 0.00462592, total time[s] 0.062278 +Converged at iteration 20, L1 9.17162e-05, Linf 0.00410713, total time[s] 0.068561 +Converged at iteration 23, L1 7.75127e-05, Linf 0.00286422, total time[s] 0.062416 +Converged at iteration 25, L1 8.48346e-05, Linf 0.0034262, total time[s] 0.069706 +Converged at iteration 27, L1 9.9242e-05, Linf 0.00396243, total time[s] 0.071158 +Converged at iteration 30, L1 6.16843e-05, Linf 0.0041606, total time[s] 0.089554 +Converged at iteration 28, L1 7.59584e-05, Linf 0.0039136, total time[s] 0.080516 +Converged at iteration 29, L1 9.03166e-05, Linf 0.00439221, total time[s] 0.079454 +Converged at iteration 30, L1 6.05613e-05, Linf 0.00210116, total time[s] 0.081487 +Converged at iteration 28, L1 8.76847e-05, Linf 0.00176897, total time[s] 0.076568 +Converged at iteration 32, L1 9.44944e-05, Linf 0.00780962, total time[s] 0.087057 +Converged at iteration 26, L1 8.1952e-05, Linf 0.00301958, total time[s] 0.068625 +Converged at iteration 25, L1 9.37363e-05, Linf 0.00273875, total time[s] 0.070214 +Converged at iteration 23, L1 7.41633e-05, Linf 0.00287567, total time[s] 0.073153 +Converged at iteration 39, L1 5.61754e-05, Linf 0.00762535, total time[s] 0.163857 +Converged at iteration 36, L1 6.36335e-05, Linf 0.00687161, total time[s] 0.098102 +Converged at iteration 24, L1 8.92684e-05, Linf 0.00300714, total time[s] 0.06471 +Converged at iteration 30, L1 9.3187e-05, Linf 0.00618572, total time[s] 0.090878 +Converged at iteration 25, L1 5.57385e-05, Linf 0.00490326, total time[s] 0.076662 +Converged at iteration 21, L1 8.7529e-05, Linf 0.00489416, total time[s] 0.092278 +Converged at iteration 19, L1 6.66337e-05, Linf 0.00596316, total time[s] 0.052371 +Converged at iteration 21, L1 3.85134e-05, Linf 0.00313058, total time[s] 0.056978 +Converged at iteration 23, L1 9.09261e-05, Linf 0.0038933, total time[s] 0.061069 +Converged at iteration 24, L1 5.46872e-05, Linf 0.00438348, total time[s] 0.079332 +Converged at iteration 20, L1 4.89645e-05, Linf 0.00492177, total time[s] 0.056369 +Converged at iteration 17, L1 5.43411e-05, Linf 0.0018379, total time[s] 0.047655 +Converged at iteration 32, L1 5.62072e-05, Linf 0.00278934, total time[s] 0.083225 +Converged at iteration 19, L1 9.78963e-05, Linf 0.00620253, total time[s] 0.047999 +Converged at iteration 23, L1 7.22429e-05, Linf 0.00535252, total time[s] 0.057376 +Converged at iteration 40, L1 6.76829e-05, Linf 0.00367287, total time[s] 0.106046 +Converged at iteration 35, L1 7.60481e-05, Linf 0.00339721, total time[s] 0.092276 +Converged at iteration 30, L1 9.62346e-05, Linf 0.00432614, total time[s] 0.081134 +Converged at iteration 31, L1 6.19651e-05, Linf 0.00502563, total time[s] 0.079745 +Converged at iteration 27, L1 6.25941e-05, Linf 0.00499544, total time[s] 0.074579 +Converged at iteration 22, L1 8.59539e-05, Linf 0.00448846, total time[s] 0.060299 +Converged at iteration 20, L1 9.6016e-05, Linf 0.00395689, total time[s] 0.053389 +Converged at iteration 24, L1 8.84181e-05, Linf 0.00482797, total time[s] 0.064043 +Converged at iteration 28, L1 7.38758e-05, Linf 0.00445905, total time[s] 0.076158 +Converged at iteration 26, L1 8.11287e-05, Linf 0.00546561, total time[s] 0.069463 +Converged at iteration 22, L1 7.39266e-05, Linf 0.00508739, total time[s] 0.059404 +Converged at iteration 19, L1 6.63324e-05, Linf 0.00393099, total time[s] 0.051787 +Converged at iteration 30, L1 7.98592e-05, Linf 0.00329634, total time[s] 0.078525 +Converged at iteration 20, L1 8.4429e-05, Linf 0.00455021, total time[s] 0.05642 +Converged at iteration 24, L1 7.11264e-05, Linf 0.00463289, total time[s] 0.07072 +Converged at iteration 31, L1 9.02751e-05, Linf 0.00564113, total time[s] 0.110888 +Converged at iteration 27, L1 9.91501e-05, Linf 0.00569839, total time[s] 0.107299 +Converged at iteration 24, L1 8.80478e-05, Linf 0.00465026, total time[s] 0.070825 +Converged at iteration 23, L1 9.2198e-05, Linf 0.00409548, total time[s] 0.073447 +Converged at iteration 26, L1 7.2167e-05, Linf 0.00446014, total time[s] 0.070867 +Converged at iteration 29, L1 7.86743e-05, Linf 0.00479522, total time[s] 0.084984 +Converged at iteration 34, L1 7.09321e-05, Linf 0.0042284, total time[s] 0.085489 +Converged at iteration 30, L1 9.39379e-05, Linf 0.00442595, total time[s] 0.076075 +Converged at iteration 28, L1 9.49892e-05, Linf 0.00310981, total time[s] 0.070733 +Converged at iteration 32, L1 9.39337e-05, Linf 0.00374071, total time[s] 0.084572 +Converged at iteration 37, L1 7.34014e-05, Linf 0.00327801, total time[s] 0.092218 +Converged at iteration 33, L1 8.44767e-05, Linf 0.00469297, total time[s] 0.085685 +Converged at iteration 28, L1 9.65754e-05, Linf 0.00430174, total time[s] 0.07663 +Converged at iteration 24, L1 8.82916e-05, Linf 0.00325071, total time[s] 0.06098 +Converged at iteration 26, L1 8.98488e-05, Linf 0.00383948, total time[s] 0.065146 +Converged at iteration 40, L1 6.69481e-05, Linf 0.00383047, total time[s] 0.099406 +Converged at iteration 35, L1 8.23656e-05, Linf 0.00351906, total time[s] 0.086499 +Converged at iteration 30, L1 9.61754e-05, Linf 0.00422119, total time[s] 0.074773 +Converged at iteration 31, L1 6.20174e-05, Linf 0.0050382, total time[s] 0.080362 +Converged at iteration 27, L1 6.02171e-05, Linf 0.00494126, total time[s] 0.083414 +Converged at iteration 22, L1 7.71114e-05, Linf 0.00430646, total time[s] 0.056777 +Converged at iteration 21, L1 6.29025e-05, Linf 0.00334444, total time[s] 0.056269 +Converged at iteration 24, L1 9.0485e-05, Linf 0.00488737, total time[s] 0.064218 +Converged at iteration 28, L1 7.42181e-05, Linf 0.00444369, total time[s] 0.070428 +Converged at iteration 26, L1 8.0507e-05, Linf 0.00549569, total time[s] 0.06708 +Converged at iteration 22, L1 7.31759e-05, Linf 0.00480527, total time[s] 0.058265 +Converged at iteration 19, L1 5.92071e-05, Linf 0.00361622, total time[s] 0.050648 +Converged at iteration 30, L1 8.85324e-05, Linf 0.00330313, total time[s] 0.075591 +Converged at iteration 20, L1 8.5194e-05, Linf 0.00465249, total time[s] 0.053864 +Converged at iteration 24, L1 7.16161e-05, Linf 0.00468176, total time[s] 0.063249 +Converged at iteration 31, L1 9.33151e-05, Linf 0.00531009, total time[s] 0.080455 +Converged at iteration 27, L1 9.88838e-05, Linf 0.00536007, total time[s] 0.070783 +Converged at iteration 24, L1 8.68325e-05, Linf 0.00451235, total time[s] 0.06335 +Converged at iteration 23, L1 9.25828e-05, Linf 0.00421974, total time[s] 0.061467 +Converged at iteration 26, L1 7.23655e-05, Linf 0.00450537, total time[s] 0.071749 +Converged at iteration 29, L1 7.63645e-05, Linf 0.00485527, total time[s] 0.081101 +Converged at iteration 34, L1 7.85979e-05, Linf 0.00433272, total time[s] 0.096329 +Converged at iteration 31, L1 6.91565e-05, Linf 0.00361695, total time[s] 0.114224 +Converged at iteration 28, L1 9.85051e-05, Linf 0.00321117, total time[s] 0.0731 +Converged at iteration 32, L1 8.5794e-05, Linf 0.00362206, total time[s] 0.087064 +Converged at iteration 36, L1 9.55454e-05, Linf 0.0036931, total time[s] 0.093253 +Converged at iteration 33, L1 8.38957e-05, Linf 0.00473742, total time[s] 0.083557 +Converged at iteration 28, L1 9.33898e-05, Linf 0.00419549, total time[s] 0.071915 +Converged at iteration 24, L1 8.21781e-05, Linf 0.00304608, total time[s] 0.063936 +Converged at iteration 26, L1 8.69596e-05, Linf 0.00389471, total time[s] 0.069119 +Converged at iteration 40, L1 6.75969e-05, Linf 0.00375266, total time[s] 0.101325 +Converged at iteration 35, L1 7.91605e-05, Linf 0.00345684, total time[s] 0.088449 +Converged at iteration 30, L1 9.70543e-05, Linf 0.00426872, total time[s] 0.076695 +Converged at iteration 31, L1 6.20858e-05, Linf 0.0050318, total time[s] 0.080036 +Converged at iteration 27, L1 6.14459e-05, Linf 0.00496954, total time[s] 0.07362 +Converged at iteration 22, L1 8.13766e-05, Linf 0.00439818, total time[s] 0.059643 +Converged at iteration 20, L1 9.8566e-05, Linf 0.0041041, total time[s] 0.053091 +Converged at iteration 24, L1 9.02829e-05, Linf 0.00485367, total time[s] 0.064691 +Converged at iteration 28, L1 7.41574e-05, Linf 0.00446128, total time[s] 0.072733 +Converged at iteration 26, L1 8.09572e-05, Linf 0.00555934, total time[s] 0.070771 +Converged at iteration 22, L1 7.26584e-05, Linf 0.00498787, total time[s] 0.060919 +Converged at iteration 19, L1 6.30662e-05, Linf 0.00378336, total time[s] 0.058098 +Converged at iteration 30, L1 8.38684e-05, Linf 0.0033, total time[s] 0.079002 +Converged at iteration 20, L1 8.47921e-05, Linf 0.00460051, total time[s] 0.055559 +Converged at iteration 24, L1 7.18104e-05, Linf 0.00465576, total time[s] 0.080381 +Converged at iteration 31, L1 9.10581e-05, Linf 0.0055644, total time[s] 0.082077 +Converged at iteration 27, L1 9.94186e-05, Linf 0.00562074, total time[s] 0.071052 +Converged at iteration 24, L1 8.76361e-05, Linf 0.00459838, total time[s] 0.064143 +Converged at iteration 23, L1 9.25101e-05, Linf 0.00415744, total time[s] 0.064345 +Converged at iteration 26, L1 7.20891e-05, Linf 0.00451122, total time[s] 0.084805 +Converged at iteration 29, L1 7.75955e-05, Linf 0.00482879, total time[s] 0.075117 +Converged at iteration 34, L1 7.52622e-05, Linf 0.00428285, total time[s] 0.084852 +Converged at iteration 30, L1 9.75923e-05, Linf 0.00440148, total time[s] 0.078463 +Converged at iteration 28, L1 9.63626e-05, Linf 0.00316014, total time[s] 0.080816 +Converged at iteration 32, L1 8.93374e-05, Linf 0.00368233, total time[s] 0.081217 +Converged at iteration 37, L1 7.09643e-05, Linf 0.00315293, total time[s] 0.093749 +Converged at iteration 33, L1 8.42439e-05, Linf 0.00473832, total time[s] 0.083775 +Converged at iteration 28, L1 9.50592e-05, Linf 0.00424612, total time[s] 0.071052 +Converged at iteration 24, L1 8.45475e-05, Linf 0.00314838, total time[s] 0.064289 +Converged at iteration 26, L1 8.85901e-05, Linf 0.00386784, total time[s] 0.06689 +Converged at iteration 40, L1 6.68772e-05, Linf 0.00384646, total time[s] 0.117358 +Converged at iteration 35, L1 8.30141e-05, Linf 0.00353186, total time[s] 0.109334 +Converged at iteration 30, L1 9.56692e-05, Linf 0.00421245, total time[s] 0.079183 +Converged at iteration 31, L1 6.18171e-05, Linf 0.0050393, total time[s] 0.10396 +Converged at iteration 27, L1 5.98679e-05, Linf 0.00493538, total time[s] 0.071798 +Converged at iteration 22, L1 7.6253e-05, Linf 0.00428829, total time[s] 0.064596 +Converged at iteration 21, L1 6.29546e-05, Linf 0.00336618, total time[s] 0.061981 +Converged at iteration 24, L1 9.02627e-05, Linf 0.00489646, total time[s] 0.074189 +Converged at iteration 28, L1 7.44636e-05, Linf 0.00444127, total time[s] 0.08593 +Converged at iteration 26, L1 8.08297e-05, Linf 0.0053758, total time[s] 0.073866 +Converged at iteration 22, L1 7.2723e-05, Linf 0.00478744, total time[s] 0.063587 +Converged at iteration 19, L1 5.86115e-05, Linf 0.00357621, total time[s] 0.053995 +Converged at iteration 30, L1 8.95174e-05, Linf 0.00330344, total time[s] 0.079715 +Converged at iteration 20, L1 8.51901e-05, Linf 0.00466351, total time[s] 0.059833 +Converged at iteration 24, L1 7.15797e-05, Linf 0.00469055, total time[s] 0.064452 +Converged at iteration 31, L1 9.37558e-05, Linf 0.00526804, total time[s] 0.080705 +Converged at iteration 27, L1 9.87313e-05, Linf 0.00530146, total time[s] 0.07195 +Converged at iteration 24, L1 8.68384e-05, Linf 0.00445821, total time[s] 0.064108 +Converged at iteration 23, L1 9.29749e-05, Linf 0.00423402, total time[s] 0.116827 +Converged at iteration 26, L1 7.18388e-05, Linf 0.00457871, total time[s] 0.074249 +Converged at iteration 29, L1 7.62135e-05, Linf 0.00486051, total time[s] 0.091276 +Converged at iteration 34, L1 7.93011e-05, Linf 0.00432689, total time[s] 0.092909 +Converged at iteration 31, L1 6.9679e-05, Linf 0.00360808, total time[s] 0.096726 +Converged at iteration 28, L1 9.89825e-05, Linf 0.00320418, total time[s] 0.091038 +Converged at iteration 32, L1 8.58502e-05, Linf 0.0036322, total time[s] 0.084224 +Converged at iteration 36, L1 9.47961e-05, Linf 0.0036727, total time[s] 0.089728 +Converged at iteration 33, L1 8.38014e-05, Linf 0.00474962, total time[s] 0.099107 +Converged at iteration 28, L1 9.4016e-05, Linf 0.00419277, total time[s] 0.07633 +Converged at iteration 24, L1 8.1802e-05, Linf 0.00299958, total time[s] 0.061999 +Converged at iteration 26, L1 8.66827e-05, Linf 0.00389915, total time[s] 0.067603 +Converged at iteration 40, L1 6.72115e-05, Linf 0.00400175, total time[s] 0.104993 +Converged at iteration 35, L1 8.83234e-05, Linf 0.00355156, total time[s] 0.09354 +Converged at iteration 30, L1 9.07809e-05, Linf 0.00417236, total time[s] 0.077866 +Converged at iteration 31, L1 6.16845e-05, Linf 0.00504814, total time[s] 0.079415 +Converged at iteration 26, L1 9.7719e-05, Linf 0.00582773, total time[s] 0.067154 +Converged at iteration 22, L1 7.05539e-05, Linf 0.00427988, total time[s] 0.059201 +Converged at iteration 21, L1 6.46461e-05, Linf 0.00352756, total time[s] 0.05743 +Converged at iteration 24, L1 8.92872e-05, Linf 0.0049823, total time[s] 0.068181 +Converged at iteration 28, L1 7.27208e-05, Linf 0.00442593, total time[s] 0.076856 +Converged at iteration 26, L1 8.1014e-05, Linf 0.00530959, total time[s] 0.080176 +Converged at iteration 22, L1 6.94099e-05, Linf 0.00427766, total time[s] 0.06716 +Converged at iteration 19, L1 5.37268e-05, Linf 0.00321999, total time[s] 0.069242 +Converged at iteration 30, L1 9.67957e-05, Linf 0.00330762, total time[s] 0.085338 +Converged at iteration 20, L1 8.398e-05, Linf 0.00474661, total time[s] 0.060481 +Converged at iteration 24, L1 7.10553e-05, Linf 0.00454263, total time[s] 0.066587 +Converged at iteration 31, L1 9.56003e-05, Linf 0.00465896, total time[s] 0.085768 +Converged at iteration 27, L1 9.21985e-05, Linf 0.00448595, total time[s] 0.069759 +Converged at iteration 24, L1 8.49269e-05, Linf 0.00420606, total time[s] 0.061727 +Converged at iteration 23, L1 9.26071e-05, Linf 0.00443341, total time[s] 0.060255 +Converged at iteration 26, L1 7.12595e-05, Linf 0.00469749, total time[s] 0.06642 +Converged at iteration 29, L1 7.50181e-05, Linf 0.00489294, total time[s] 0.073334 +Converged at iteration 34, L1 8.24523e-05, Linf 0.00391379, total time[s] 0.084899 +Converged at iteration 31, L1 7.29468e-05, Linf 0.00347028, total time[s] 0.078043 +Converged at iteration 29, L1 7.09575e-05, Linf 0.0027564, total time[s] 0.073816 +Converged at iteration 32, L1 8.12221e-05, Linf 0.00352447, total time[s] 0.080395 +Converged at iteration 36, L1 8.45801e-05, Linf 0.00354193, total time[s] 0.088821 +Converged at iteration 33, L1 8.29949e-05, Linf 0.00481293, total time[s] 0.083068 +Converged at iteration 28, L1 9.04274e-05, Linf 0.00411702, total time[s] 0.070661 +Converged at iteration 24, L1 7.98846e-05, Linf 0.00285158, total time[s] 0.061768 +Converged at iteration 26, L1 8.32301e-05, Linf 0.00391067, total time[s] 0.06614 +Converged at iteration 40, L1 6.49161e-05, Linf 0.00409059, total time[s] 0.103764 +Converged at iteration 35, L1 9.28433e-05, Linf 0.0037535, total time[s] 0.104295 +Converged at iteration 30, L1 8.79866e-05, Linf 0.00417861, total time[s] 0.076285 +Converged at iteration 31, L1 6.14122e-05, Linf 0.00505736, total time[s] 0.078571 +Converged at iteration 26, L1 9.3791e-05, Linf 0.00572694, total time[s] 0.067047 +Converged at iteration 22, L1 6.31438e-05, Linf 0.00398437, total time[s] 0.059723 +Converged at iteration 21, L1 6.78668e-05, Linf 0.00375828, total time[s] 0.056935 +Converged at iteration 24, L1 8.85432e-05, Linf 0.00508587, total time[s] 0.067327 +Converged at iteration 28, L1 6.97051e-05, Linf 0.0044106, total time[s] 0.081639 +Converged at iteration 26, L1 8.25532e-05, Linf 0.00483348, total time[s] 0.074261 +Converged at iteration 22, L1 6.06015e-05, Linf 0.00368405, total time[s] 0.068643 +Converged at iteration 18, L1 8.65154e-05, Linf 0.00345202, total time[s] 0.049359 +Converged at iteration 31, L1 7.11566e-05, Linf 0.00269215, total time[s] 0.086736 +Converged at iteration 20, L1 8.28448e-05, Linf 0.00485616, total time[s] 0.055424 +Converged at iteration 24, L1 7.02087e-05, Linf 0.00489418, total time[s] 0.065089 +Converged at iteration 31, L1 8.98984e-05, Linf 0.00359262, total time[s] 0.083899 +Converged at iteration 26, L1 9.416e-05, Linf 0.00419735, total time[s] 0.066822 +Converged at iteration 24, L1 7.53112e-05, Linf 0.00368964, total time[s] 0.062607 +Converged at iteration 23, L1 9.30592e-05, Linf 0.00456951, total time[s] 0.060209 +Converged at iteration 26, L1 7.01786e-05, Linf 0.00481542, total time[s] 0.067023 +Converged at iteration 29, L1 7.295e-05, Linf 0.00501419, total time[s] 0.077701 +Converged at iteration 33, L1 9.55636e-05, Linf 0.00347378, total time[s] 0.083869 +Converged at iteration 31, L1 7.82456e-05, Linf 0.00335227, total time[s] 0.078667 +Converged at iteration 29, L1 7.48679e-05, Linf 0.00283578, total time[s] 0.074649 +Converged at iteration 32, L1 7.74094e-05, Linf 0.00340004, total time[s] 0.082456 +Converged at iteration 36, L1 7.51981e-05, Linf 0.00339264, total time[s] 0.090574 +Converged at iteration 33, L1 8.16579e-05, Linf 0.00494219, total time[s] 0.083717 +Converged at iteration 28, L1 8.6935e-05, Linf 0.00404104, total time[s] 0.071709 +Converged at iteration 24, L1 7.866e-05, Linf 0.0026916, total time[s] 0.062353 +Converged at iteration 26, L1 8.23944e-05, Linf 0.0039919, total time[s] 0.068525 +Converged at iteration 39, L1 9.92705e-05, Linf 0.00496425, total time[s] 0.104231 +Converged at iteration 35, L1 9.85159e-05, Linf 0.00392163, total time[s] 0.102024 +Converged at iteration 29, L1 9.4095e-05, Linf 0.00503953, total time[s] 0.074453 +Converged at iteration 31, L1 6.11673e-05, Linf 0.00506346, total time[s] 0.081697 +Converged at iteration 26, L1 8.91065e-05, Linf 0.00566559, total time[s] 0.066513 +Converged at iteration 21, L1 9.25592e-05, Linf 0.00453284, total time[s] 0.0554 +Converged at iteration 21, L1 6.58839e-05, Linf 0.00401266, total time[s] 0.057703 +Converged at iteration 24, L1 7.26883e-05, Linf 0.00524784, total time[s] 0.066576 +Converged at iteration 28, L1 6.47779e-05, Linf 0.00439889, total time[s] 0.087146 +Converged at iteration 26, L1 7.84955e-05, Linf 0.00402455, total time[s] 0.075943 +Converged at iteration 21, L1 7.65904e-05, Linf 0.00431643, total time[s] 0.059453 +Converged at iteration 18, L1 6.74776e-05, Linf 0.00283015, total time[s] 0.065609 +Converged at iteration 31, L1 7.7143e-05, Linf 0.00268851, total time[s] 0.083501 +Converged at iteration 20, L1 8.18181e-05, Linf 0.00500354, total time[s] 0.05982 +Converged at iteration 24, L1 6.84138e-05, Linf 0.00477775, total time[s] 0.061237 +Converged at iteration 30, L1 8.21496e-05, Linf 0.00323306, total time[s] 0.075128 +Converged at iteration 25, L1 7.78228e-05, Linf 0.00445292, total time[s] 0.063459 +Converged at iteration 23, L1 7.40452e-05, Linf 0.00376535, total time[s] 0.061883 +Converged at iteration 23, L1 9.53113e-05, Linf 0.00468245, total time[s] 0.061897 +Converged at iteration 26, L1 6.86375e-05, Linf 0.00493957, total time[s] 0.068736 +Converged at iteration 29, L1 7.07269e-05, Linf 0.00470598, total time[s] 0.076345 +Converged at iteration 32, L1 7.05018e-05, Linf 0.00334352, total time[s] 0.080853 +Converged at iteration 30, L1 9.18179e-05, Linf 0.00335022, total time[s] 0.079995 +Converged at iteration 29, L1 7.87499e-05, Linf 0.00295131, total time[s] 0.072829 +Converged at iteration 32, L1 7.38543e-05, Linf 0.00333351, total time[s] 0.079347 +Converged at iteration 35, L1 7.87873e-05, Linf 0.0038867, total time[s] 0.086651 +Converged at iteration 33, L1 7.96995e-05, Linf 0.00503825, total time[s] 0.082183 +Converged at iteration 28, L1 8.25187e-05, Linf 0.00396069, total time[s] 0.070909 +Converged at iteration 24, L1 7.86982e-05, Linf 0.00246813, total time[s] 0.061409 +Converged at iteration 26, L1 8.03073e-05, Linf 0.00407815, total time[s] 0.066078 +Converged at iteration 39, L1 9.98946e-05, Linf 0.0048685, total time[s] 0.096514 +Converged at iteration 35, L1 9.55941e-05, Linf 0.0038357, total time[s] 0.110669 +Converged at iteration 30, L1 7.75987e-05, Linf 0.00418336, total time[s] 0.080203 +Converged at iteration 31, L1 6.12853e-05, Linf 0.00506095, total time[s] 0.078383 +Converged at iteration 26, L1 9.14471e-05, Linf 0.00569741, total time[s] 0.067139 +Converged at iteration 21, L1 9.72311e-05, Linf 0.0046413, total time[s] 0.058188 +Converged at iteration 21, L1 6.88819e-05, Linf 0.00391133, total time[s] 0.062243 +Converged at iteration 24, L1 8.30306e-05, Linf 0.00517708, total time[s] 0.064619 +Converged at iteration 28, L1 6.81271e-05, Linf 0.00440421, total time[s] 0.093123 +Converged at iteration 26, L1 8.2776e-05, Linf 0.00453119, total time[s] 0.072255 +Converged at iteration 21, L1 9.0331e-05, Linf 0.00434398, total time[s] 0.05907 +Converged at iteration 18, L1 7.67356e-05, Linf 0.00308358, total time[s] 0.049156 +Converged at iteration 31, L1 7.41213e-05, Linf 0.0027051, total time[s] 0.084185 +Converged at iteration 20, L1 8.22944e-05, Linf 0.00492894, total time[s] 0.056014 +Converged at iteration 24, L1 6.92468e-05, Linf 0.00498127, total time[s] 0.066493 +Converged at iteration 31, L1 7.1016e-05, Linf 0.00313286, total time[s] 0.082173 +Converged at iteration 26, L1 6.75831e-05, Linf 0.00380059, total time[s] 0.067539 +Converged at iteration 23, L1 9.18681e-05, Linf 0.00401733, total time[s] 0.061542 +Converged at iteration 23, L1 9.44952e-05, Linf 0.00455325, total time[s] 0.067882 +Converged at iteration 26, L1 6.94422e-05, Linf 0.00491, total time[s] 0.069428 +Converged at iteration 29, L1 7.18137e-05, Linf 0.00491866, total time[s] 0.074673 +Converged at iteration 32, L1 9.68573e-05, Linf 0.00363653, total time[s] 0.090835 +Converged at iteration 31, L1 7.55599e-05, Linf 0.00314408, total time[s] 0.081807 +Converged at iteration 29, L1 7.70928e-05, Linf 0.00289558, total time[s] 0.075031 +Converged at iteration 32, L1 7.54946e-05, Linf 0.0033701, total time[s] 0.081996 +Converged at iteration 35, L1 9.94975e-05, Linf 0.004065, total time[s] 0.087989 +Converged at iteration 33, L1 8.07979e-05, Linf 0.00499232, total time[s] 0.083722 +Converged at iteration 28, L1 8.48853e-05, Linf 0.00404331, total time[s] 0.073346 +Converged at iteration 24, L1 7.83692e-05, Linf 0.00258185, total time[s] 0.063256 +Converged at iteration 26, L1 8.27651e-05, Linf 0.00403687, total time[s] 0.067389 +Converged at iteration 40, L1 6.3922e-05, Linf 0.00422058, total time[s] 0.100677 +Converged at iteration 35, L1 9.86699e-05, Linf 0.00393965, total time[s] 0.095548 +Converged at iteration 29, L1 8.92968e-05, Linf 0.00501492, total time[s] 0.074955 +Converged at iteration 31, L1 6.11358e-05, Linf 0.00506366, total time[s] 0.079606 +Converged at iteration 26, L1 8.86431e-05, Linf 0.00572054, total time[s] 0.068706 +Converged at iteration 21, L1 9.17106e-05, Linf 0.00451548, total time[s] 0.05692 +Converged at iteration 21, L1 6.49674e-05, Linf 0.00402418, total time[s] 0.058156 +Converged at iteration 24, L1 7.01602e-05, Linf 0.00527386, total time[s] 0.069713 +Converged at iteration 28, L1 6.36312e-05, Linf 0.00439615, total time[s] 0.079214 +Converged at iteration 26, L1 7.60502e-05, Linf 0.00397611, total time[s] 0.075149 +Converged at iteration 21, L1 7.42151e-05, Linf 0.00431512, total time[s] 0.05887 +Converged at iteration 18, L1 6.58908e-05, Linf 0.00279404, total time[s] 0.051075 +Converged at iteration 31, L1 7.77829e-05, Linf 0.00269099, total time[s] 0.096412 +Converged at iteration 20, L1 8.15906e-05, Linf 0.00501879, total time[s] 0.055098 +Converged at iteration 24, L1 6.83592e-05, Linf 0.00508877, total time[s] 0.063791 +Converged at iteration 30, L1 7.90854e-05, Linf 0.00316291, total time[s] 0.076953 +Converged at iteration 25, L1 7.44326e-05, Linf 0.00440424, total time[s] 0.06583 +Converged at iteration 23, L1 7.12794e-05, Linf 0.00372469, total time[s] 0.061125 +Converged at iteration 23, L1 9.5561e-05, Linf 0.00460661, total time[s] 0.063117 +Converged at iteration 26, L1 6.84903e-05, Linf 0.00498019, total time[s] 0.068673 +Converged at iteration 29, L1 7.05469e-05, Linf 0.00481887, total time[s] 0.075433 +Converged at iteration 32, L1 6.65057e-05, Linf 0.00326463, total time[s] 0.082361 +Converged at iteration 30, L1 8.87091e-05, Linf 0.00329043, total time[s] 0.077987 +Converged at iteration 29, L1 7.91669e-05, Linf 0.00297885, total time[s] 0.075511 +Converged at iteration 32, L1 7.27483e-05, Linf 0.00330647, total time[s] 0.082132 +Converged at iteration 35, L1 7.40385e-05, Linf 0.00382597, total time[s] 0.089536 +Converged at iteration 33, L1 7.94997e-05, Linf 0.00504804, total time[s] 0.084879 +Converged at iteration 28, L1 8.20141e-05, Linf 0.00394624, total time[s] 0.074425 +Converged at iteration 24, L1 7.89728e-05, Linf 0.00244497, total time[s] 0.063817 +Converged at iteration 26, L1 7.89374e-05, Linf 0.00407691, total time[s] 0.068167 +Converged at iteration 39, L1 9.94036e-05, Linf 0.00512024, total time[s] 0.105964 +Converged at iteration 36, L1 6.89578e-05, Linf 0.00344521, total time[s] 0.100801 +Converged at iteration 28, L1 9.61754e-05, Linf 0.00586836, total time[s] 0.074664 +Converged at iteration 31, L1 6.08777e-05, Linf 0.00506613, total time[s] 0.088559 +Converged at iteration 26, L1 8.52473e-05, Linf 0.00560774, total time[s] 0.06717 +Converged at iteration 21, L1 8.65309e-05, Linf 0.0043447, total time[s] 0.061446 +Converged at iteration 20, L1 9.91095e-05, Linf 0.00533812, total time[s] 0.057786 +Converged at iteration 23, L1 8.95885e-05, Linf 0.00644484, total time[s] 0.06851 +Converged at iteration 27, L1 9.11257e-05, Linf 0.00549147, total time[s] 0.07578 +Converged at iteration 26, L1 6.2787e-05, Linf 0.00350318, total time[s] 0.074034 +Converged at iteration 21, L1 6.10615e-05, Linf 0.00428813, total time[s] 0.064162 +Converged at iteration 18, L1 5.5279e-05, Linf 0.0027492, total time[s] 0.054692 +Converged at iteration 31, L1 8.16955e-05, Linf 0.0027101, total time[s] 0.099797 +Converged at iteration 20, L1 7.83559e-05, Linf 0.00512962, total time[s] 0.054805 +Converged at iteration 24, L1 6.76289e-05, Linf 0.00523806, total time[s] 0.063049 +Converged at iteration 29, L1 8.9001e-05, Linf 0.00334289, total time[s] 0.074769 +Converged at iteration 24, L1 8.97094e-05, Linf 0.00544958, total time[s] 0.062113 +Converged at iteration 22, L1 8.73125e-05, Linf 0.00421963, total time[s] 0.057686 +Converged at iteration 23, L1 9.52924e-05, Linf 0.00460765, total time[s] 0.060635 +Converged at iteration 26, L1 6.73988e-05, Linf 0.00499251, total time[s] 0.066992 +Converged at iteration 29, L1 6.89646e-05, Linf 0.00459965, total time[s] 0.07499 +Converged at iteration 31, L1 7.31948e-05, Linf 0.00373615, total time[s] 0.079735 +Converged at iteration 29, L1 9.96899e-05, Linf 0.00345273, total time[s] 0.075262 +Converged at iteration 29, L1 8.21949e-05, Linf 0.00304171, total time[s] 0.074932 +Converged at iteration 31, L1 9.34232e-05, Linf 0.00381295, total time[s] 0.079912 +Converged at iteration 34, L1 6.99795e-05, Linf 0.004064, total time[s] 0.087119 +Converged at iteration 33, L1 7.80909e-05, Linf 0.00511655, total time[s] 0.084534 +Converged at iteration 28, L1 7.87924e-05, Linf 0.0038836, total time[s] 0.072708 +Converged at iteration 24, L1 8.18568e-05, Linf 0.00228313, total time[s] 0.065926 +Converged at iteration 26, L1 6.65888e-05, Linf 0.00395581, total time[s] 0.067914 +Converged at iteration 39, L1 9.60232e-05, Linf 0.00527944, total time[s] 0.104752 +Converged at iteration 36, L1 7.07027e-05, Linf 0.00361796, total time[s] 0.101583 +Converged at iteration 28, L1 5.61933e-05, Linf 0.00533077, total time[s] 0.086239 +Converged at iteration 31, L1 6.15348e-05, Linf 0.00507067, total time[s] 0.085032 +Converged at iteration 26, L1 8.11214e-05, Linf 0.00553978, total time[s] 0.072869 +Converged at iteration 21, L1 8.05419e-05, Linf 0.00412913, total time[s] 0.08496 +Converged at iteration 20, L1 8.57438e-05, Linf 0.00538823, total time[s] 0.059454 +Converged at iteration 23, L1 6.08167e-05, Linf 0.00636058, total time[s] 0.067187 +Converged at iteration 27, L1 7.37414e-05, Linf 0.00540716, total time[s] 0.076345 +Converged at iteration 25, L1 9.22527e-05, Linf 0.00418002, total time[s] 0.074927 +Converged at iteration 21, L1 5.17622e-05, Linf 0.00420813, total time[s] 0.059569 +Converged at iteration 17, L1 9.62726e-05, Linf 0.00420647, total time[s] 0.04912 +Converged at iteration 31, L1 8.59627e-05, Linf 0.00273296, total time[s] 0.091357 +Converged at iteration 20, L1 7.27807e-05, Linf 0.00526541, total time[s] 0.056373 +Converged at iteration 24, L1 6.57999e-05, Linf 0.00541679, total time[s] 0.063821 +Converged at iteration 29, L1 6.93614e-05, Linf 0.00293723, total time[s] 0.075397 +Converged at iteration 24, L1 7.20696e-05, Linf 0.00535273, total time[s] 0.064573 +Converged at iteration 22, L1 7.11127e-05, Linf 0.00397145, total time[s] 0.058632 +Converged at iteration 23, L1 8.90338e-05, Linf 0.00450639, total time[s] 0.060815 +Converged at iteration 26, L1 6.62591e-05, Linf 0.00485057, total time[s] 0.068461 +Converged at iteration 29, L1 6.70557e-05, Linf 0.00422298, total time[s] 0.074948 +Converged at iteration 30, L1 9.16649e-05, Linf 0.00463485, total time[s] 0.077121 +Converged at iteration 29, L1 7.77229e-05, Linf 0.00314494, total time[s] 0.07459 +Converged at iteration 29, L1 8.56934e-05, Linf 0.00312689, total time[s] 0.075066 +Converged at iteration 31, L1 8.21952e-05, Linf 0.00336537, total time[s] 0.079645 +Converged at iteration 33, L1 6.3455e-05, Linf 0.00385937, total time[s] 0.083991 +Converged at iteration 33, L1 7.61375e-05, Linf 0.00520101, total time[s] 0.084835 +Converged at iteration 28, L1 7.48546e-05, Linf 0.00380507, total time[s] 0.072896 +Converged at iteration 24, L1 8.71806e-05, Linf 0.00208894, total time[s] 0.063439 +Converged at iteration 25, L1 8.46404e-05, Linf 0.00465753, total time[s] 0.066205 +Converged at iteration 39, L1 9.67113e-05, Linf 0.00520157, total time[s] 0.098332 +Converged at iteration 36, L1 6.98507e-05, Linf 0.00352992, total time[s] 0.097617 +Converged at iteration 28, L1 7.47695e-05, Linf 0.00565704, total time[s] 0.074343 +Converged at iteration 31, L1 6.07413e-05, Linf 0.00506812, total time[s] 0.080117 +Converged at iteration 26, L1 8.33213e-05, Linf 0.00557438, total time[s] 0.067606 +Converged at iteration 21, L1 8.3371e-05, Linf 0.00429091, total time[s] 0.056788 +Converged at iteration 20, L1 9.22562e-05, Linf 0.00537652, total time[s] 0.054759 +Converged at iteration 23, L1 7.41786e-05, Linf 0.00640937, total time[s] 0.065857 +Converged at iteration 27, L1 8.23254e-05, Linf 0.00546441, total time[s] 0.080713 +Converged at iteration 25, L1 9.88212e-05, Linf 0.00420691, total time[s] 0.069749 +Converged at iteration 21, L1 5.58178e-05, Linf 0.00423282, total time[s] 0.059033 +Converged at iteration 18, L1 5.09534e-05, Linf 0.00270608, total time[s] 0.058782 +Converged at iteration 31, L1 8.40214e-05, Linf 0.00272182, total time[s] 0.086819 +Converged at iteration 20, L1 7.56024e-05, Linf 0.00519902, total time[s] 0.056274 +Converged at iteration 24, L1 6.6831e-05, Linf 0.00533073, total time[s] 0.066468 +Converged at iteration 29, L1 7.80263e-05, Linf 0.00313417, total time[s] 0.074851 +Converged at iteration 24, L1 7.98086e-05, Linf 0.0053908, total time[s] 0.062954 +Converged at iteration 22, L1 7.79464e-05, Linf 0.00409054, total time[s] 0.059581 +Converged at iteration 23, L1 9.25793e-05, Linf 0.00457549, total time[s] 0.062168 +Converged at iteration 26, L1 6.68281e-05, Linf 0.00494294, total time[s] 0.06844 +Converged at iteration 29, L1 6.80947e-05, Linf 0.00441711, total time[s] 0.074806 +Converged at iteration 31, L1 6.37067e-05, Linf 0.00361451, total time[s] 0.08078 +Converged at iteration 29, L1 8.73478e-05, Linf 0.0032899, total time[s] 0.075262 +Converged at iteration 29, L1 8.41942e-05, Linf 0.00309119, total time[s] 0.079331 +Converged at iteration 31, L1 8.75543e-05, Linf 0.00360952, total time[s] 0.079324 +Converged at iteration 33, L1 8.29331e-05, Linf 0.00457257, total time[s] 0.084051 +Converged at iteration 33, L1 7.70209e-05, Linf 0.00515933, total time[s] 0.084198 +Converged at iteration 28, L1 7.69799e-05, Linf 0.00384509, total time[s] 0.072713 +Converged at iteration 24, L1 8.44424e-05, Linf 0.00220809, total time[s] 0.06432 +Converged at iteration 25, L1 9.34198e-05, Linf 0.00481954, total time[s] 0.06544 +Converged at iteration 39, L1 9.54219e-05, Linf 0.00529846, total time[s] 0.105831 +Converged at iteration 36, L1 7.06502e-05, Linf 0.00363899, total time[s] 0.101832 +Converged at iteration 27, L1 9.78329e-05, Linf 0.00660479, total time[s] 0.070579 +Converged at iteration 31, L1 6.09262e-05, Linf 0.00507105, total time[s] 0.079355 +Converged at iteration 26, L1 8.07207e-05, Linf 0.00553251, total time[s] 0.067769 +Converged at iteration 21, L1 8.02047e-05, Linf 0.0040622, total time[s] 0.058378 +Converged at iteration 20, L1 8.46312e-05, Linf 0.00535137, total time[s] 0.064202 +Converged at iteration 23, L1 5.89837e-05, Linf 0.00628692, total time[s] 0.065525 +Converged at iteration 27, L1 7.2023e-05, Linf 0.00541616, total time[s] 0.075825 +Converged at iteration 25, L1 9.09646e-05, Linf 0.0041744, total time[s] 0.072706 +Converged at iteration 21, L1 5.10228e-05, Linf 0.00420414, total time[s] 0.061964 +Converged at iteration 17, L1 9.52019e-05, Linf 0.00419182, total time[s] 0.0489 +Converged at iteration 31, L1 8.6303e-05, Linf 0.00271399, total time[s] 0.08976 +Converged at iteration 20, L1 7.22495e-05, Linf 0.00527846, total time[s] 0.054583 +Converged at iteration 24, L1 6.55364e-05, Linf 0.00543261, total time[s] 0.065517 +Converged at iteration 29, L1 6.82365e-05, Linf 0.00290541, total time[s] 0.07672 +Converged at iteration 24, L1 7.08412e-05, Linf 0.00534396, total time[s] 0.0643 +Converged at iteration 22, L1 7.00806e-05, Linf 0.00395247, total time[s] 0.057915 +Converged at iteration 23, L1 8.85276e-05, Linf 0.00448228, total time[s] 0.060585 +Converged at iteration 26, L1 6.62703e-05, Linf 0.00481961, total time[s] 0.100872 +Converged at iteration 29, L1 6.68895e-05, Linf 0.00418518, total time[s] 0.085407 +Converged at iteration 30, L1 9.01514e-05, Linf 0.00463118, total time[s] 0.075814 +Converged at iteration 29, L1 7.61304e-05, Linf 0.00312046, total time[s] 0.07289 +Converged at iteration 29, L1 8.62838e-05, Linf 0.00313721, total time[s] 0.073031 +Converged at iteration 31, L1 8.12441e-05, Linf 0.00331592, total time[s] 0.079441 +Converged at iteration 32, L1 9.61032e-05, Linf 0.00497514, total time[s] 0.07972 +Converged at iteration 33, L1 7.59293e-05, Linf 0.00520876, total time[s] 0.08571 +Converged at iteration 28, L1 7.45806e-05, Linf 0.00379688, total time[s] 0.071475 +Converged at iteration 24, L1 8.78764e-05, Linf 0.00205406, total time[s] 0.063807 +Converged at iteration 25, L1 8.28419e-05, Linf 0.00462629, total time[s] 0.065668 +Converged at iteration 39, L1 9.4011e-05, Linf 0.00541404, total time[s] 0.101765 +Converged at iteration 36, L1 7.21295e-05, Linf 0.00376762, total time[s] 0.102015 +Converged at iteration 27, L1 6.74583e-05, Linf 0.00607937, total time[s] 0.074402 +Converged at iteration 31, L1 6.15233e-05, Linf 0.00808296, total time[s] 0.077341 +Converged at iteration 26, L1 7.78173e-05, Linf 0.00547925, total time[s] 0.066129 +Converged at iteration 21, L1 7.6314e-05, Linf 0.00393731, total time[s] 0.058069 +Converged at iteration 20, L1 7.56256e-05, Linf 0.00526402, total time[s] 0.05579 +Converged at iteration 22, L1 8.93546e-05, Linf 0.00771646, total time[s] 0.06142 +Converged at iteration 27, L1 5.98812e-05, Linf 0.00523792, total time[s] 0.076418 +Converged at iteration 25, L1 8.2417e-05, Linf 0.00413491, total time[s] 0.070263 +Converged at iteration 20, L1 9.55866e-05, Linf 0.00557714, total time[s] 0.055628 +Converged at iteration 17, L1 8.8773e-05, Linf 0.00393287, total time[s] 0.046763 +Converged at iteration 31, L1 8.92852e-05, Linf 0.00274854, total time[s] 0.093673 +Converged at iteration 20, L1 6.89648e-05, Linf 0.00536434, total time[s] 0.061734 +Converged at iteration 24, L1 6.4015e-05, Linf 0.00551945, total time[s] 0.062954 +Converged at iteration 28, L1 8.81149e-05, Linf 0.00363631, total time[s] 0.072924 +Converged at iteration 24, L1 6.25026e-05, Linf 0.00529858, total time[s] 0.063319 +Converged at iteration 22, L1 6.3229e-05, Linf 0.00379873, total time[s] 0.057483 +Converged at iteration 23, L1 8.5098e-05, Linf 0.00433577, total time[s] 0.059298 +Converged at iteration 26, L1 6.5238e-05, Linf 0.0044717, total time[s] 0.066513 +Converged at iteration 29, L1 6.56776e-05, Linf 0.00395021, total time[s] 0.077299 +Converged at iteration 30, L1 8.10062e-05, Linf 0.00461407, total time[s] 0.0758 +Converged at iteration 29, L1 6.61385e-05, Linf 0.00294496, total time[s] 0.073928 +Converged at iteration 29, L1 8.88623e-05, Linf 0.00322584, total time[s] 0.07472 +Converged at iteration 31, L1 7.42442e-05, Linf 0.00300405, total time[s] 0.077852 +Converged at iteration 32, L1 6.9111e-05, Linf 0.00386465, total time[s] 0.087194 +Converged at iteration 33, L1 7.45436e-05, Linf 0.00526905, total time[s] 0.082688 +Converged at iteration 28, L1 7.17054e-05, Linf 0.00373237, total time[s] 0.072502 +Converged at iteration 24, L1 9.23963e-05, Linf 0.00192691, total time[s] 0.062044 +Converged at iteration 25, L1 7.22761e-05, Linf 0.0043546, total time[s] 0.065972 +Converged at iteration 39, L1 9.27698e-05, Linf 0.00555157, total time[s] 0.106125 +Converged at iteration 36, L1 7.26416e-05, Linf 0.00393356, total time[s] 0.107193 +Converged at iteration 26, L1 9.00956e-05, Linf 0.00699219, total time[s] 0.077428 +Converged at iteration 31, L1 5.98873e-05, Linf 0.00507608, total time[s] 0.081856 +Converged at iteration 26, L1 7.41021e-05, Linf 0.00541313, total time[s] 0.069134 +Converged at iteration 21, L1 7.1356e-05, Linf 0.00368237, total time[s] 0.063853 +Converged at iteration 20, L1 6.65899e-05, Linf 0.0050596, total time[s] 0.088747 +Converged at iteration 22, L1 6.7432e-05, Linf 0.0073177, total time[s] 0.05938 +Converged at iteration 26, L1 8.54252e-05, Linf 0.00630952, total time[s] 0.074839 +Converged at iteration 25, L1 7.4185e-05, Linf 0.00408697, total time[s] 0.06993 +Converged at iteration 20, L1 8.84638e-05, Linf 0.00554639, total time[s] 0.056555 +Converged at iteration 17, L1 8.24239e-05, Linf 0.00380351, total time[s] 0.048408 +Converged at iteration 31, L1 9.23884e-05, Linf 0.00276126, total time[s] 0.082266 +Converged at iteration 20, L1 6.60947e-05, Linf 0.00543173, total time[s] 0.054246 +Converged at iteration 24, L1 6.19049e-05, Linf 0.00554809, total time[s] 0.065111 +Converged at iteration 28, L1 7.63688e-05, Linf 0.0034254, total time[s] 0.072869 +Converged at iteration 23, L1 9.68957e-05, Linf 0.00687855, total time[s] 0.062334 +Converged at iteration 21, L1 9.39464e-05, Linf 0.00464378, total time[s] 0.056974 +Converged at iteration 23, L1 8.16741e-05, Linf 0.004122, total time[s] 0.061111 +Converged at iteration 26, L1 6.4412e-05, Linf 0.00427108, total time[s] 0.069116 +Converged at iteration 28, L1 9.85998e-05, Linf 0.00579147, total time[s] 0.072839 +Converged at iteration 30, L1 7.4714e-05, Linf 0.00461099, total time[s] 0.078331 +Converged at iteration 28, L1 9.04439e-05, Linf 0.00345894, total time[s] 0.072518 +Converged at iteration 29, L1 8.84882e-05, Linf 0.00331948, total time[s] 0.07547 +Converged at iteration 30, L1 9.80084e-05, Linf 0.00338785, total time[s] 0.077682 +Converged at iteration 31, L1 8.02479e-05, Linf 0.0036251, total time[s] 0.079909 +Converged at iteration 33, L1 7.28515e-05, Linf 0.00534082, total time[s] 0.084944 +Converged at iteration 28, L1 6.82936e-05, Linf 0.00365279, total time[s] 0.073374 +Converged at iteration 24, L1 9.43774e-05, Linf 0.00177811, total time[s] 0.06349 +Converged at iteration 25, L1 6.21712e-05, Linf 0.00387887, total time[s] 0.065972 +Converged at iteration 39, L1 9.28777e-05, Linf 0.00548366, total time[s] 0.09615 +Converged at iteration 36, L1 7.21678e-05, Linf 0.00384982, total time[s] 0.093917 +Converged at iteration 27, L1 5.39943e-05, Linf 0.00562566, total time[s] 0.070716 +Converged at iteration 31, L1 6.00476e-05, Linf 0.00507558, total time[s] 0.080005 +Converged at iteration 26, L1 7.58876e-05, Linf 0.00544561, total time[s] 0.068522 +Converged at iteration 21, L1 7.35382e-05, Linf 0.00383139, total time[s] 0.056866 +Converged at iteration 20, L1 7.08211e-05, Linf 0.00517338, total time[s] 0.054578 +Converged at iteration 22, L1 7.75387e-05, Linf 0.00752098, total time[s] 0.05926 +Converged at iteration 26, L1 9.4586e-05, Linf 0.00645043, total time[s] 0.075545 +Converged at iteration 25, L1 7.79599e-05, Linf 0.00411097, total time[s] 0.07717 +Converged at iteration 20, L1 9.15629e-05, Linf 0.0055674, total time[s] 0.053902 +Converged at iteration 17, L1 8.53605e-05, Linf 0.00392837, total time[s] 0.047564 +Converged at iteration 31, L1 9.07518e-05, Linf 0.00275531, total time[s] 0.080454 +Converged at iteration 20, L1 6.73587e-05, Linf 0.00540427, total time[s] 0.055807 +Converged at iteration 24, L1 6.29684e-05, Linf 0.00554484, total time[s] 0.06313 +Converged at iteration 28, L1 8.16554e-05, Linf 0.00352541, total time[s] 0.073868 +Converged at iteration 24, L1 5.82487e-05, Linf 0.00526565, total time[s] 0.063202 +Converged at iteration 21, L1 9.81899e-05, Linf 0.00469785, total time[s] 0.056037 +Converged at iteration 23, L1 8.32598e-05, Linf 0.00423264, total time[s] 0.061409 +Converged at iteration 26, L1 6.4896e-05, Linf 0.00443976, total time[s] 0.068049 +Converged at iteration 28, L1 9.96774e-05, Linf 0.00588285, total time[s] 0.072677 +Converged at iteration 30, L1 7.74141e-05, Linf 0.00458005, total time[s] 0.078689 +Converged at iteration 28, L1 9.55195e-05, Linf 0.00355771, total time[s] 0.073797 +Converged at iteration 29, L1 8.92482e-05, Linf 0.00327308, total time[s] 0.076988 +Converged at iteration 31, L1 7.02991e-05, Linf 0.00283821, total time[s] 0.079797 +Converged at iteration 31, L1 9.26948e-05, Linf 0.00449402, total time[s] 0.080363 +Converged at iteration 33, L1 7.36813e-05, Linf 0.00530511, total time[s] 0.085218 +Converged at iteration 28, L1 7.01312e-05, Linf 0.00369423, total time[s] 0.073772 +Converged at iteration 24, L1 9.35384e-05, Linf 0.00184033, total time[s] 0.066407 +Converged at iteration 25, L1 6.67641e-05, Linf 0.00413868, total time[s] 0.06624 +Converged at iteration 39, L1 9.15907e-05, Linf 0.00556564, total time[s] 0.099726 +Converged at iteration 36, L1 7.26718e-05, Linf 0.00395095, total time[s] 0.096267 +Converged at iteration 26, L1 8.69947e-05, Linf 0.00691921, total time[s] 0.069628 +Converged at iteration 31, L1 6.0124e-05, Linf 0.00507595, total time[s] 0.079992 +Converged at iteration 26, L1 7.36912e-05, Linf 0.0054039, total time[s] 0.070687 +Converged at iteration 21, L1 7.06727e-05, Linf 0.00369868, total time[s] 0.056944 +Converged at iteration 20, L1 6.58486e-05, Linf 0.00503619, total time[s] 0.054452 +Converged at iteration 22, L1 6.55797e-05, Linf 0.00710565, total time[s] 0.059048 +Converged at iteration 26, L1 8.35786e-05, Linf 0.0062749, total time[s] 0.068222 +Converged at iteration 25, L1 7.35183e-05, Linf 0.00408194, total time[s] 0.066116 +Converged at iteration 20, L1 8.77853e-05, Linf 0.00554058, total time[s] 0.05515 +Converged at iteration 17, L1 8.19133e-05, Linf 0.00376895, total time[s] 0.047939 +Converged at iteration 31, L1 9.27103e-05, Linf 0.00276225, total time[s] 0.080345 +Converged at iteration 20, L1 6.58131e-05, Linf 0.00543563, total time[s] 0.053472 +Converged at iteration 24, L1 6.17054e-05, Linf 0.00554645, total time[s] 0.065318 +Converged at iteration 28, L1 7.55771e-05, Linf 0.00340624, total time[s] 0.073445 +Converged at iteration 23, L1 9.61964e-05, Linf 0.0068775, total time[s] 0.061193 +Converged at iteration 21, L1 9.32963e-05, Linf 0.00463224, total time[s] 0.05646 +Converged at iteration 23, L1 8.14752e-05, Linf 0.00409934, total time[s] 0.059602 +Converged at iteration 26, L1 6.43169e-05, Linf 0.00423687, total time[s] 0.070732 +Converged at iteration 28, L1 9.83406e-05, Linf 0.00577191, total time[s] 0.073032 +Converged at iteration 30, L1 7.4325e-05, Linf 0.00461002, total time[s] 0.082899 +Converged at iteration 28, L1 8.96635e-05, Linf 0.00347889, total time[s] 0.074577 +Converged at iteration 29, L1 8.84195e-05, Linf 0.00332844, total time[s] 0.075216 +Converged at iteration 30, L1 9.71912e-05, Linf 0.00335168, total time[s] 0.078143 +Converged at iteration 31, L1 7.81341e-05, Linf 0.00342233, total time[s] 0.10292 +Converged at iteration 33, L1 7.27195e-05, Linf 0.00534843, total time[s] 0.112613 +Converged at iteration 28, L1 6.75779e-05, Linf 0.00364428, total time[s] 0.080475 +Converged at iteration 24, L1 9.46115e-05, Linf 0.00179145, total time[s] 0.06252 +Converged at iteration 25, L1 6.12465e-05, Linf 0.00381881, total time[s] 0.064149 +Converged at iteration 39, L1 9.00387e-05, Linf 0.00566408, total time[s] 0.101718 +Converged at iteration 36, L1 7.28839e-05, Linf 0.00407501, total time[s] 0.09104 +Converged at iteration 26, L1 6.81163e-05, Linf 0.00623164, total time[s] 0.066744 +Converged at iteration 31, L1 5.9809e-05, Linf 0.00507471, total time[s] 0.077625 +Converged at iteration 26, L1 7.1142e-05, Linf 0.00535191, total time[s] 0.066216 +Converged at iteration 21, L1 6.75716e-05, Linf 0.00353133, total time[s] 0.054698 +Converged at iteration 20, L1 6.07632e-05, Linf 0.00483624, total time[s] 0.062434 +Converged at iteration 22, L1 5.40971e-05, Linf 0.00748374, total time[s] 0.057041 +Converged at iteration 26, L1 7.18689e-05, Linf 0.00599639, total time[s] 0.069177 +Converged at iteration 25, L1 6.88887e-05, Linf 0.0040466, total time[s] 0.064063 +Converged at iteration 20, L1 8.3367e-05, Linf 0.00549537, total time[s] 0.052337 +Converged at iteration 17, L1 7.84819e-05, Linf 0.00360018, total time[s] 0.05422 +Converged at iteration 31, L1 9.5023e-05, Linf 0.00276962, total time[s] 0.081808 +Converged at iteration 20, L1 6.44995e-05, Linf 0.00544116, total time[s] 0.05239 +Converged at iteration 24, L1 6.06022e-05, Linf 0.0058439, total time[s] 0.063787 +Converged at iteration 28, L1 6.88266e-05, Linf 0.00325642, total time[s] 0.074218 +Converged at iteration 23, L1 9.13419e-05, Linf 0.00688315, total time[s] 0.059632 +Converged at iteration 21, L1 8.86634e-05, Linf 0.00455507, total time[s] 0.054905 +Converged at iteration 23, L1 8.00059e-05, Linf 0.0040945, total time[s] 0.059193 +Converged at iteration 25, L1 9.97164e-05, Linf 0.00634212, total time[s] 0.064376 +Converged at iteration 28, L1 9.68264e-05, Linf 0.00560722, total time[s] 0.070569 +Converged at iteration 30, L1 7.03456e-05, Linf 0.00459103, total time[s] 0.075806 +Converged at iteration 28, L1 8.4377e-05, Linf 0.00339223, total time[s] 0.07067 +Converged at iteration 29, L1 8.72358e-05, Linf 0.00338929, total time[s] 0.072712 +Converged at iteration 30, L1 9.1574e-05, Linf 0.00310257, total time[s] 0.07599 +Converged at iteration 31, L1 6.53944e-05, Linf 0.00235747, total time[s] 0.078254 +Converged at iteration 33, L1 7.14976e-05, Linf 0.00539886, total time[s] 0.085441 +Converged at iteration 28, L1 6.49365e-05, Linf 0.00358159, total time[s] 0.071089 +Converged at iteration 24, L1 9.59739e-05, Linf 0.00188985, total time[s] 0.062221 +Converged at iteration 24, L1 9.19734e-05, Linf 0.00485582, total time[s] 0.061954 +Converged at iteration 39, L1 8.80087e-05, Linf 0.00578176, total time[s] 0.110054 +Converged at iteration 36, L1 7.31415e-05, Linf 0.00422792, total time[s] 0.096556 +Converged at iteration 26, L1 5.22186e-05, Linf 0.00511033, total time[s] 0.067619 +Converged at iteration 31, L1 5.92015e-05, Linf 0.00507194, total time[s] 0.090799 +Converged at iteration 26, L1 6.79284e-05, Linf 0.00528652, total time[s] 0.068003 +Converged at iteration 21, L1 6.44947e-05, Linf 0.00331786, total time[s] 0.055045 +Converged at iteration 20, L1 5.51376e-05, Linf 0.00456624, total time[s] 0.052592 +Converged at iteration 21, L1 9.86464e-05, Linf 0.00876491, total time[s] 0.055451 +Converged at iteration 26, L1 5.90849e-05, Linf 0.00554024, total time[s] 0.066482 +Converged at iteration 25, L1 6.37839e-05, Linf 0.00400333, total time[s] 0.064121 +Converged at iteration 20, L1 7.93786e-05, Linf 0.00547553, total time[s] 0.054528 +Converged at iteration 17, L1 7.42614e-05, Linf 0.00329704, total time[s] 0.045662 +Converged at iteration 31, L1 9.76521e-05, Linf 0.00277884, total time[s] 0.077826 +Converged at iteration 20, L1 6.34667e-05, Linf 0.00538532, total time[s] 0.052772 +Converged at iteration 23, L1 9.71704e-05, Linf 0.00648064, total time[s] 0.061344 +Converged at iteration 27, L1 9.63446e-05, Linf 0.00456839, total time[s] 0.072571 +Converged at iteration 23, L1 8.61625e-05, Linf 0.00687305, total time[s] 0.059801 +Converged at iteration 21, L1 8.26175e-05, Linf 0.00446572, total time[s] 0.058781 +Converged at iteration 23, L1 7.79055e-05, Linf 0.0037473, total time[s] 0.06501 +Converged at iteration 25, L1 9.78913e-05, Linf 0.00630575, total time[s] 0.069733 +Converged at iteration 28, L1 9.47357e-05, Linf 0.0055279, total time[s] 0.072759 +Converged at iteration 30, L1 6.71218e-05, Linf 0.00462172, total time[s] 0.075691 +Converged at iteration 28, L1 7.94899e-05, Linf 0.00329436, total time[s] 0.071076 +Converged at iteration 29, L1 8.52654e-05, Linf 0.00345578, total time[s] 0.073692 +Converged at iteration 30, L1 8.65243e-05, Linf 0.0028314, total time[s] 0.07593 +Converged at iteration 30, L1 8.73462e-05, Linf 0.00258845, total time[s] 0.076177 +Converged at iteration 33, L1 7.02786e-05, Linf 0.00545988, total time[s] 0.083259 +Converged at iteration 27, L1 9.73535e-05, Linf 0.00413673, total time[s] 0.073396 +Converged at iteration 24, L1 9.78155e-05, Linf 0.00199537, total time[s] 0.063745 +Converged at iteration 24, L1 8.41865e-05, Linf 0.00436406, total time[s] 0.062423 +Converged at iteration 39, L1 8.63793e-05, Linf 0.00592495, total time[s] 0.100591 +Converged at iteration 36, L1 7.38361e-05, Linf 0.00441302, total time[s] 0.093448 +Converged at iteration 25, L1 8.62055e-05, Linf 0.00633241, total time[s] 0.06478 +Converged at iteration 31, L1 5.88701e-05, Linf 0.00506905, total time[s] 0.078139 +Converged at iteration 26, L1 6.44493e-05, Linf 0.00520471, total time[s] 0.067119 +Converged at iteration 21, L1 6.17448e-05, Linf 0.0030366, total time[s] 0.055517 +Converged at iteration 19, L1 9.97194e-05, Linf 0.00652352, total time[s] 0.049933 +Converged at iteration 21, L1 8.24585e-05, Linf 0.00919113, total time[s] 0.0556 +Converged at iteration 25, L1 9.06801e-05, Linf 0.00669845, total time[s] 0.064722 +Converged at iteration 25, L1 5.87966e-05, Linf 0.00395123, total time[s] 0.064648 +Converged at iteration 20, L1 7.54194e-05, Linf 0.00550323, total time[s] 0.052736 +Converged at iteration 17, L1 6.93899e-05, Linf 0.00303985, total time[s] 0.049511 +Converged at iteration 32, L1 6.42354e-05, Linf 0.00229354, total time[s] 0.082046 +Converged at iteration 20, L1 6.25557e-05, Linf 0.00523337, total time[s] 0.054184 +Converged at iteration 23, L1 9.37889e-05, Linf 0.00624053, total time[s] 0.060457 +Converged at iteration 27, L1 8.78481e-05, Linf 0.00443144, total time[s] 0.069814 +Converged at iteration 23, L1 8.06735e-05, Linf 0.00684612, total time[s] 0.064067 +Converged at iteration 21, L1 7.76315e-05, Linf 0.00436135, total time[s] 0.057183 +Converged at iteration 23, L1 7.63157e-05, Linf 0.00354928, total time[s] 0.06018 +Converged at iteration 25, L1 9.59152e-05, Linf 0.00615743, total time[s] 0.063812 +Converged at iteration 28, L1 9.23165e-05, Linf 0.0049191, total time[s] 0.072187 +Converged at iteration 30, L1 6.40008e-05, Linf 0.00461286, total time[s] 0.076197 +Converged at iteration 28, L1 7.54447e-05, Linf 0.00319903, total time[s] 0.071464 +Converged at iteration 29, L1 8.28452e-05, Linf 0.00352296, total time[s] 0.073978 +Converged at iteration 30, L1 8.23806e-05, Linf 0.00259876, total time[s] 0.085036 +Converged at iteration 30, L1 7.41084e-05, Linf 0.00227499, total time[s] 0.084227 +Converged at iteration 33, L1 6.8605e-05, Linf 0.0055337, total time[s] 0.083429 +Converged at iteration 27, L1 9.26451e-05, Linf 0.00401896, total time[s] 0.069462 +Converged at iteration 24, L1 9.95849e-05, Linf 0.00208606, total time[s] 0.062014 +Converged at iteration 24, L1 7.5911e-05, Linf 0.00385815, total time[s] 0.062693 +Converged at iteration 39, L1 8.83479e-05, Linf 0.00585565, total time[s] 0.098311 +Converged at iteration 36, L1 7.34576e-05, Linf 0.00432005, total time[s] 0.094619 +Converged at iteration 25, L1 9.63103e-05, Linf 0.00693363, total time[s] 0.06817 +Converged at iteration 31, L1 5.9048e-05, Linf 0.00507026, total time[s] 0.078031 +Converged at iteration 26, L1 6.62238e-05, Linf 0.00524585, total time[s] 0.067062 +Converged at iteration 21, L1 6.33833e-05, Linf 0.00317907, total time[s] 0.056397 +Converged at iteration 20, L1 5.26007e-05, Linf 0.00432871, total time[s] 0.05465 +Converged at iteration 21, L1 9.0154e-05, Linf 0.00919979, total time[s] 0.055089 +Converged at iteration 25, L1 9.94356e-05, Linf 0.00699704, total time[s] 0.064754 +Converged at iteration 25, L1 6.18312e-05, Linf 0.00397708, total time[s] 0.064153 +Converged at iteration 20, L1 7.75833e-05, Linf 0.00548855, total time[s] 0.053769 +Converged at iteration 17, L1 7.17583e-05, Linf 0.00314636, total time[s] 0.045287 +Converged at iteration 31, L1 9.91772e-05, Linf 0.00278532, total time[s] 0.078359 +Converged at iteration 20, L1 6.31022e-05, Linf 0.00531931, total time[s] 0.055122 +Converged at iteration 23, L1 9.54305e-05, Linf 0.00654499, total time[s] 0.060625 +Converged at iteration 27, L1 9.16621e-05, Linf 0.00449989, total time[s] 0.072087 +Converged at iteration 23, L1 8.33814e-05, Linf 0.0068589, total time[s] 0.06005 +Converged at iteration 21, L1 7.98452e-05, Linf 0.00441179, total time[s] 0.055256 +Converged at iteration 23, L1 7.70428e-05, Linf 0.00364399, total time[s] 0.060243 +Converged at iteration 25, L1 9.67864e-05, Linf 0.00624839, total time[s] 0.070272 +Converged at iteration 28, L1 9.34898e-05, Linf 0.00525558, total time[s] 0.085981 +Converged at iteration 30, L1 6.55465e-05, Linf 0.00463217, total time[s] 0.075667 +Converged at iteration 28, L1 7.7402e-05, Linf 0.00325382, total time[s] 0.071517 +Converged at iteration 29, L1 8.41968e-05, Linf 0.00349198, total time[s] 0.075463 +Converged at iteration 30, L1 8.4213e-05, Linf 0.00266943, total time[s] 0.077719 +Converged at iteration 30, L1 7.99513e-05, Linf 0.00239037, total time[s] 0.076729 +Converged at iteration 33, L1 6.94772e-05, Linf 0.00549577, total time[s] 0.082728 +Converged at iteration 27, L1 9.53836e-05, Linf 0.00407543, total time[s] 0.069707 +Converged at iteration 24, L1 9.88967e-05, Linf 0.00204616, total time[s] 0.062657 +Converged at iteration 24, L1 7.99179e-05, Linf 0.00407104, total time[s] 0.06458 +Converged at iteration 39, L1 8.64985e-05, Linf 0.00593637, total time[s] 0.098444 +Converged at iteration 36, L1 7.36941e-05, Linf 0.00443201, total time[s] 0.09301 +Converged at iteration 25, L1 8.44141e-05, Linf 0.0061896, total time[s] 0.064689 +Converged at iteration 31, L1 5.88589e-05, Linf 0.00506878, total time[s] 0.078306 +Converged at iteration 26, L1 6.40085e-05, Linf 0.00519645, total time[s] 0.067304 +Converged at iteration 21, L1 6.15598e-05, Linf 0.00300838, total time[s] 0.055524 +Converged at iteration 19, L1 9.90209e-05, Linf 0.00656924, total time[s] 0.050368 +Converged at iteration 21, L1 8.09823e-05, Linf 0.00894349, total time[s] 0.055759 +Converged at iteration 25, L1 8.90222e-05, Linf 0.00670607, total time[s] 0.066486 +Converged at iteration 25, L1 5.8019e-05, Linf 0.00394586, total time[s] 0.065225 +Converged at iteration 20, L1 7.49644e-05, Linf 0.00550442, total time[s] 0.053866 +Converged at iteration 17, L1 6.89626e-05, Linf 0.00302948, total time[s] 0.046431 +Converged at iteration 32, L1 6.44059e-05, Linf 0.00229713, total time[s] 0.080785 +Converged at iteration 20, L1 6.24982e-05, Linf 0.00520521, total time[s] 0.052924 +Converged at iteration 23, L1 9.39622e-05, Linf 0.00662886, total time[s] 0.061146 +Converged at iteration 27, L1 8.69319e-05, Linf 0.00439046, total time[s] 0.070611 +Converged at iteration 23, L1 8.02504e-05, Linf 0.00684212, total time[s] 0.06005 +Converged at iteration 21, L1 7.65366e-05, Linf 0.00435314, total time[s] 0.055781 +Converged at iteration 23, L1 7.62307e-05, Linf 0.00345564, total time[s] 0.060445 +Converged at iteration 25, L1 9.57944e-05, Linf 0.00595734, total time[s] 0.074592 +Converged at iteration 28, L1 9.20647e-05, Linf 0.00510153, total time[s] 0.070143 +Converged at iteration 30, L1 6.41172e-05, Linf 0.00461254, total time[s] 0.073685 +Converged at iteration 28, L1 7.5331e-05, Linf 0.00318678, total time[s] 0.070204 +Converged at iteration 29, L1 8.27479e-05, Linf 0.00352882, total time[s] 0.072443 +Converged at iteration 30, L1 8.29254e-05, Linf 0.00251924, total time[s] 0.087483 +Converged at iteration 30, L1 7.34207e-05, Linf 0.00225106, total time[s] 0.081993 +Converged at iteration 33, L1 6.86803e-05, Linf 0.00548453, total time[s] 0.089419 +Converged at iteration 27, L1 9.22027e-05, Linf 0.0040152, total time[s] 0.081293 +Converged at iteration 24, L1 9.98605e-05, Linf 0.00209153, total time[s] 0.073475 +Converged at iteration 24, L1 7.54453e-05, Linf 0.00376891, total time[s] 0.079636 +Converged at iteration 39, L1 8.36563e-05, Linf 0.00604106, total time[s] 0.107918 +Converged at iteration 36, L1 7.4266e-05, Linf 0.00452278, total time[s] 0.09116 +Converged at iteration 25, L1 7.39479e-05, Linf 0.00520451, total time[s] 0.064973 +Converged at iteration 31, L1 5.88046e-05, Linf 0.00507503, total time[s] 0.080622 +Converged at iteration 26, L1 6.15123e-05, Linf 0.00520232, total time[s] 0.067178 +Converged at iteration 21, L1 5.98691e-05, Linf 0.00273528, total time[s] 0.061618 +Converged at iteration 19, L1 9.43974e-05, Linf 0.00628966, total time[s] 0.058956 +Converged at iteration 21, L1 7.12768e-05, Linf 0.00739633, total time[s] 0.076963 +Converged at iteration 25, L1 7.81284e-05, Linf 0.00620625, total time[s] 0.112855 +Converged at iteration 25, L1 5.51749e-05, Linf 0.00390851, total time[s] 0.08714 +Converged at iteration 20, L1 7.35037e-05, Linf 0.00548724, total time[s] 0.084176 +Converged at iteration 17, L1 6.64338e-05, Linf 0.00296556, total time[s] 0.06204 +Converged at iteration 32, L1 6.55116e-05, Linf 0.0023307, total time[s] 0.103128 +Converged at iteration 20, L1 6.22698e-05, Linf 0.0050213, total time[s] 0.105917 +Converged at iteration 23, L1 9.18465e-05, Linf 0.00683563, total time[s] 0.087421 +Converged at iteration 27, L1 8.16628e-05, Linf 0.00430311, total time[s] 0.1154 +Converged at iteration 23, L1 7.70888e-05, Linf 0.0067562, total time[s] 0.077286 +Converged at iteration 21, L1 7.26389e-05, Linf 0.00428199, total time[s] 0.095938 +Converged at iteration 23, L1 7.60081e-05, Linf 0.00341104, total time[s] 0.072327 +Converged at iteration 25, L1 9.47229e-05, Linf 0.00593764, total time[s] 0.073704 +Converged at iteration 28, L1 9.00853e-05, Linf 0.00487472, total time[s] 0.079176 +Converged at iteration 30, L1 6.20939e-05, Linf 0.00461186, total time[s] 0.078477 +Converged at iteration 28, L1 7.31997e-05, Linf 0.00310214, total time[s] 0.075188 +Converged at iteration 29, L1 8.15107e-05, Linf 0.00356736, total time[s] 0.142357 +Converged at iteration 30, L1 7.83351e-05, Linf 0.00241251, total time[s] 0.103665 +Converged at iteration 30, L1 6.42088e-05, Linf 0.00208518, total time[s] 0.086892 +Converged at iteration 33, L1 6.71673e-05, Linf 0.00560051, total time[s] 0.117541 +Converged at iteration 27, L1 8.77097e-05, Linf 0.00387486, total time[s] 0.106292 +Converged at iteration 25, L1 6.9974e-05, Linf 0.0016778, total time[s] 0.114611 +Converged at iteration 24, L1 7.03864e-05, Linf 0.00347336, total time[s] 0.127575 +Converged at iteration 39, L1 8.30491e-05, Linf 0.00623215, total time[s] 0.163085 +Converged at iteration 36, L1 7.37771e-05, Linf 0.00473525, total time[s] 0.113553 +Converged at iteration 25, L1 6.41773e-05, Linf 0.00436457, total time[s] 0.082123 +Converged at iteration 31, L1 5.84933e-05, Linf 0.00504502, total time[s] 0.132588 +Converged at iteration 26, L1 5.88686e-05, Linf 0.00506053, total time[s] 0.098724 +Converged at iteration 21, L1 5.75763e-05, Linf 0.00289245, total time[s] 0.089494 +Converged at iteration 19, L1 8.97354e-05, Linf 0.00604979, total time[s] 0.056368 +Converged at iteration 21, L1 6.19392e-05, Linf 0.00602742, total time[s] 0.068776 +Converged at iteration 25, L1 6.63192e-05, Linf 0.00534716, total time[s] 0.078322 +Converged at iteration 24, L1 9.88398e-05, Linf 0.00501769, total time[s] 0.072759 +Converged at iteration 20, L1 7.00787e-05, Linf 0.00540732, total time[s] 0.065011 +Converged at iteration 17, L1 6.43008e-05, Linf 0.00286129, total time[s] 0.057801 +Converged at iteration 32, L1 6.62302e-05, Linf 0.00236244, total time[s] 0.093234 +Converged at iteration 20, L1 6.25937e-05, Linf 0.00477574, total time[s] 0.062792 +Converged at iteration 23, L1 8.88696e-05, Linf 0.00688311, total time[s] 0.062307 +Converged at iteration 27, L1 7.5775e-05, Linf 0.0041539, total time[s] 0.073621 +Converged at iteration 23, L1 7.46052e-05, Linf 0.00654775, total time[s] 0.07096 +Converged at iteration 21, L1 6.87089e-05, Linf 0.00420318, total time[s] 0.066334 +Converged at iteration 23, L1 7.52545e-05, Linf 0.00339977, total time[s] 0.069961 +Converged at iteration 25, L1 9.34996e-05, Linf 0.00564346, total time[s] 0.078396 +Converged at iteration 28, L1 8.81126e-05, Linf 0.00457755, total time[s] 0.086933 +Converged at iteration 30, L1 6.04831e-05, Linf 0.00458872, total time[s] 0.089638 +Converged at iteration 28, L1 7.27058e-05, Linf 0.00306102, total time[s] 0.311679 +Converged at iteration 29, L1 8.18237e-05, Linf 0.00363266, total time[s] 0.167227 +Converged at iteration 30, L1 7.59967e-05, Linf 0.00227037, total time[s] 0.082006 +Converged at iteration 29, L1 9.03167e-05, Linf 0.00258287, total time[s] 0.074036 +Converged at iteration 33, L1 6.57086e-05, Linf 0.00559171, total time[s] 0.087975 +Converged at iteration 27, L1 8.4465e-05, Linf 0.0038778, total time[s] 0.072151 +Converged at iteration 25, L1 7.26672e-05, Linf 0.00177299, total time[s] 0.075167 +Converged at iteration 24, L1 6.52436e-05, Linf 0.00318219, total time[s] 0.071254 +Converged at iteration 39, L1 7.96728e-05, Linf 0.00629751, total time[s] 0.130717 +Converged at iteration 36, L1 7.2784e-05, Linf 0.00492562, total time[s] 0.146089 +Converged at iteration 25, L1 5.62513e-05, Linf 0.0028682, total time[s] 0.097491 +Converged at iteration 31, L1 5.82052e-05, Linf 0.00509916, total time[s] 0.10036 +Converged at iteration 25, L1 9.57409e-05, Linf 0.00595676, total time[s] 0.092466 +Converged at iteration 21, L1 5.70672e-05, Linf 0.00312171, total time[s] 0.059433 +Converged at iteration 19, L1 8.46016e-05, Linf 0.00571952, total time[s] 0.060821 +Converged at iteration 21, L1 5.40144e-05, Linf 0.00467605, total time[s] 0.066457 +Converged at iteration 25, L1 5.54902e-05, Linf 0.00425886, total time[s] 0.072942 +Converged at iteration 24, L1 9.38887e-05, Linf 0.00494886, total time[s] 0.064916 +Converged at iteration 20, L1 6.78751e-05, Linf 0.00538166, total time[s] 0.052633 +Converged at iteration 17, L1 6.37201e-05, Linf 0.00272031, total time[s] 0.045543 +Converged at iteration 32, L1 6.66291e-05, Linf 0.00243614, total time[s] 0.08033 +Converged at iteration 20, L1 6.20695e-05, Linf 0.00448473, total time[s] 0.053805 +Converged at iteration 23, L1 8.62804e-05, Linf 0.00709605, total time[s] 0.064033 +Converged at iteration 27, L1 7.05764e-05, Linf 0.00398375, total time[s] 0.074353 +Converged at iteration 23, L1 7.32207e-05, Linf 0.00630723, total time[s] 0.074597 +Converged at iteration 21, L1 6.46758e-05, Linf 0.004097, total time[s] 0.054443 +Converged at iteration 23, L1 7.47657e-05, Linf 0.00318619, total time[s] 0.062637 +Converged at iteration 25, L1 9.21627e-05, Linf 0.00528716, total time[s] 0.074731 +Converged at iteration 28, L1 8.59708e-05, Linf 0.00442667, total time[s] 0.076779 +Converged at iteration 30, L1 5.9407e-05, Linf 0.00455961, total time[s] 0.078332 +Converged at iteration 28, L1 6.99604e-05, Linf 0.00300099, total time[s] 0.072384 +Converged at iteration 29, L1 8.16379e-05, Linf 0.00369166, total time[s] 0.078095 +Converged at iteration 30, L1 7.22935e-05, Linf 0.00217074, total time[s] 0.091522 +Converged at iteration 29, L1 8.06029e-05, Linf 0.00240076, total time[s] 0.079315 +Converged at iteration 33, L1 6.41711e-05, Linf 0.00572763, total time[s] 0.092176 +Converged at iteration 27, L1 7.92225e-05, Linf 0.00372005, total time[s] 0.073088 +Converged at iteration 25, L1 7.60061e-05, Linf 0.00188699, total time[s] 0.067768 +Converged at iteration 24, L1 6.06437e-05, Linf 0.00295066, total time[s] 0.071673 +Converged at iteration 39, L1 8.09836e-05, Linf 0.00624199, total time[s] 0.110439 +Converged at iteration 36, L1 7.30318e-05, Linf 0.00483134, total time[s] 0.120664 +Converged at iteration 25, L1 5.96078e-05, Linf 0.00379542, total time[s] 0.078286 +Converged at iteration 31, L1 5.75749e-05, Linf 0.00507047, total time[s] 0.081656 +Converged at iteration 25, L1 9.82131e-05, Linf 0.00597463, total time[s] 0.073372 +Converged at iteration 21, L1 5.70644e-05, Linf 0.00301188, total time[s] 0.088437 +Converged at iteration 19, L1 8.69512e-05, Linf 0.00588041, total time[s] 0.064148 +Converged at iteration 21, L1 5.74926e-05, Linf 0.0052852, total time[s] 0.061163 +Converged at iteration 25, L1 6.03936e-05, Linf 0.00481047, total time[s] 0.0846 +Converged at iteration 24, L1 9.57444e-05, Linf 0.00499561, total time[s] 0.077387 +Converged at iteration 20, L1 6.93768e-05, Linf 0.00532846, total time[s] 0.073506 +Converged at iteration 17, L1 6.37767e-05, Linf 0.00277641, total time[s] 0.057105 +Converged at iteration 32, L1 6.66232e-05, Linf 0.00238628, total time[s] 0.124639 +Converged at iteration 20, L1 6.17208e-05, Linf 0.00462683, total time[s] 0.059084 +Converged at iteration 23, L1 8.75629e-05, Linf 0.00697081, total time[s] 0.068795 +Converged at iteration 27, L1 7.30214e-05, Linf 0.00404672, total time[s] 0.082554 +Converged at iteration 23, L1 7.35955e-05, Linf 0.0064319, total time[s] 0.129977 +Converged at iteration 21, L1 6.66232e-05, Linf 0.00414917, total time[s] 0.092751 +Converged at iteration 23, L1 7.49257e-05, Linf 0.00339825, total time[s] 0.08712 +Converged at iteration 25, L1 9.29449e-05, Linf 0.00544237, total time[s] 0.072771 +Converged at iteration 28, L1 8.69605e-05, Linf 0.00429082, total time[s] 0.082145 +Converged at iteration 30, L1 5.98082e-05, Linf 0.00457425, total time[s] 0.080856 +Converged at iteration 28, L1 7.07413e-05, Linf 0.00303214, total time[s] 0.073449 +Converged at iteration 29, L1 8.15848e-05, Linf 0.00365538, total time[s] 0.080262 +Converged at iteration 30, L1 7.45784e-05, Linf 0.00217194, total time[s] 0.215085 +Converged at iteration 29, L1 8.56576e-05, Linf 0.00249049, total time[s] 0.212061 +Converged at iteration 33, L1 6.50029e-05, Linf 0.00569977, total time[s] 0.097905 +Converged at iteration 27, L1 8.2094e-05, Linf 0.00374139, total time[s] 0.071134 +Converged at iteration 25, L1 7.42641e-05, Linf 0.00182976, total time[s] 0.075076 +Converged at iteration 24, L1 6.32215e-05, Linf 0.00303763, total time[s] 0.068889 +Converged at iteration 39, L1 8.11131e-05, Linf 0.00631159, total time[s] 0.12058 +Converged at iteration 36, L1 7.34788e-05, Linf 0.00494839, total time[s] 0.094914 +Converged at iteration 25, L1 5.58631e-05, Linf 0.00279032, total time[s] 0.06261 +Converged at iteration 31, L1 5.73634e-05, Linf 0.00504004, total time[s] 0.076283 +Converged at iteration 25, L1 9.5196e-05, Linf 0.00592791, total time[s] 0.064186 +Converged at iteration 21, L1 5.78222e-05, Linf 0.00314248, total time[s] 0.053845 +Converged at iteration 19, L1 8.42318e-05, Linf 0.00565339, total time[s] 0.05011 +Converged at iteration 21, L1 5.33473e-05, Linf 0.00473797, total time[s] 0.056808 +Converged at iteration 25, L1 5.46204e-05, Linf 0.00417204, total time[s] 0.06641 +Converged at iteration 24, L1 9.29336e-05, Linf 0.00499907, total time[s] 0.060562 +Converged at iteration 20, L1 6.73023e-05, Linf 0.00531975, total time[s] 0.051211 +Converged at iteration 17, L1 6.32385e-05, Linf 0.00274856, total time[s] 0.045527 +Converged at iteration 32, L1 6.72567e-05, Linf 0.00242011, total time[s] 0.079607 +Converged at iteration 20, L1 6.21696e-05, Linf 0.00446009, total time[s] 0.052537 +Converged at iteration 23, L1 8.58388e-05, Linf 0.00706338, total time[s] 0.058366 +Converged at iteration 27, L1 7.01209e-05, Linf 0.00396666, total time[s] 0.066869 +Converged at iteration 23, L1 7.26693e-05, Linf 0.00628259, total time[s] 0.058604 +Converged at iteration 21, L1 6.43477e-05, Linf 0.0040865, total time[s] 0.054269 +Converged at iteration 23, L1 7.46832e-05, Linf 0.00316827, total time[s] 0.058925 +Converged at iteration 25, L1 9.20652e-05, Linf 0.00519515, total time[s] 0.062079 +Converged at iteration 28, L1 8.5624e-05, Linf 0.00436817, total time[s] 0.072203 +Converged at iteration 30, L1 5.94435e-05, Linf 0.00455975, total time[s] 0.075153 +Converged at iteration 28, L1 6.99041e-05, Linf 0.00299612, total time[s] 0.069859 +Converged at iteration 29, L1 8.19919e-05, Linf 0.00369799, total time[s] 0.071854 +Converged at iteration 30, L1 7.29116e-05, Linf 0.00217222, total time[s] 0.07392 +Converged at iteration 29, L1 8.00842e-05, Linf 0.00238338, total time[s] 0.072095 +Converged at iteration 33, L1 6.40709e-05, Linf 0.00581452, total time[s] 0.081177 +Converged at iteration 27, L1 8.00842e-05, Linf 0.00365365, total time[s] 0.079607 +Converged at iteration 25, L1 7.63433e-05, Linf 0.00189927, total time[s] 0.078254 +Converged at iteration 24, L1 6.07751e-05, Linf 0.00293134, total time[s] 0.060429 +Converged at iteration 39, L1 7.82991e-05, Linf 0.00650738, total time[s] 0.097624 +Converged at iteration 36, L1 7.21633e-05, Linf 0.00509847, total time[s] 0.094551 +Converged at iteration 25, L1 5.16983e-05, Linf 0.00215995, total time[s] 0.06217 +Converged at iteration 31, L1 5.69828e-05, Linf 0.00502718, total time[s] 0.07703 +Converged at iteration 25, L1 9.17698e-05, Linf 0.00586334, total time[s] 0.063455 +Converged at iteration 21, L1 5.80813e-05, Linf 0.00328545, total time[s] 0.054183 +Converged at iteration 19, L1 8.142e-05, Linf 0.00540436, total time[s] 0.056058 +Converged at iteration 21, L1 4.95222e-05, Linf 0.00460691, total time[s] 0.058805 +Converged at iteration 24, L1 9.66608e-05, Linf 0.00622772, total time[s] 0.064186 +Converged at iteration 24, L1 8.91716e-05, Linf 0.00496526, total time[s] 0.060396 +Converged at iteration 20, L1 6.54963e-05, Linf 0.00524011, total time[s] 0.053779 +Converged at iteration 17, L1 6.24152e-05, Linf 0.00274072, total time[s] 0.062332 +Converged at iteration 32, L1 6.62212e-05, Linf 0.00245013, total time[s] 0.079317 +Converged at iteration 19, L1 9.97711e-05, Linf 0.00727968, total time[s] 0.052179 +Converged at iteration 23, L1 8.44086e-05, Linf 0.00701404, total time[s] 0.058919 +Converged at iteration 27, L1 6.69914e-05, Linf 0.00387387, total time[s] 0.069145 +Converged at iteration 23, L1 7.37499e-05, Linf 0.00612814, total time[s] 0.058405 +Converged at iteration 21, L1 6.25915e-05, Linf 0.00405614, total time[s] 0.057085 +Converged at iteration 23, L1 7.46468e-05, Linf 0.00321864, total time[s] 0.06092 +Converged at iteration 25, L1 9.11934e-05, Linf 0.00479706, total time[s] 0.063914 +Converged at iteration 28, L1 8.40409e-05, Linf 0.00430199, total time[s] 0.070463 +Converged at iteration 30, L1 5.86447e-05, Linf 0.00456066, total time[s] 0.076644 +Converged at iteration 28, L1 6.93504e-05, Linf 0.00295034, total time[s] 0.070255 +Converged at iteration 29, L1 8.2906e-05, Linf 0.0037606, total time[s] 0.073503 +Converged at iteration 30, L1 7.12028e-05, Linf 0.00218697, total time[s] 0.074641 +Converged at iteration 29, L1 7.50923e-05, Linf 0.00224255, total time[s] 0.073208 +Converged at iteration 33, L1 6.28349e-05, Linf 0.00578625, total time[s] 0.082236 +Converged at iteration 27, L1 7.59763e-05, Linf 0.00355989, total time[s] 0.068546 +Converged at iteration 25, L1 7.90731e-05, Linf 0.0019844, total time[s] 0.063045 +Converged at iteration 23, L1 9.89353e-05, Linf 0.00399127, total time[s] 0.058587 +Converged at iteration 39, L1 7.59068e-05, Linf 0.00653416, total time[s] 0.106289 +Converged at iteration 36, L1 7.25111e-05, Linf 0.00520112, total time[s] 0.126455 +Converged at iteration 25, L1 4.83674e-05, Linf 0.00186954, total time[s] 0.072566 +Converged at iteration 31, L1 5.63655e-05, Linf 0.00503533, total time[s] 0.076497 +Converged at iteration 25, L1 8.7722e-05, Linf 0.00576977, total time[s] 0.063224 +Converged at iteration 21, L1 5.76608e-05, Linf 0.00346032, total time[s] 0.055487 +Converged at iteration 19, L1 7.89519e-05, Linf 0.00512412, total time[s] 0.050313 +Converged at iteration 21, L1 4.60483e-05, Linf 0.0045676, total time[s] 0.054427 +Converged at iteration 24, L1 8.67186e-05, Linf 0.00523799, total time[s] 0.061106 +Converged at iteration 24, L1 8.66691e-05, Linf 0.00489516, total time[s] 0.060718 +Converged at iteration 20, L1 6.36558e-05, Linf 0.00524398, total time[s] 0.053609 +Converged at iteration 17, L1 6.12404e-05, Linf 0.00255148, total time[s] 0.049455 +Converged at iteration 32, L1 6.49525e-05, Linf 0.00248845, total time[s] 0.085253 +Converged at iteration 19, L1 9.95681e-05, Linf 0.00714128, total time[s] 0.05151 +Converged at iteration 23, L1 8.28935e-05, Linf 0.00718279, total time[s] 0.060698 +Converged at iteration 27, L1 6.36628e-05, Linf 0.00376291, total time[s] 0.070424 +Converged at iteration 23, L1 7.22722e-05, Linf 0.00596929, total time[s] 0.061715 +Converged at iteration 21, L1 6.10468e-05, Linf 0.00393913, total time[s] 0.058423 +Converged at iteration 23, L1 7.47462e-05, Linf 0.00304647, total time[s] 0.063155 +Converged at iteration 25, L1 9.04559e-05, Linf 0.00457978, total time[s] 0.065595 +Converged at iteration 28, L1 8.19849e-05, Linf 0.00392045, total time[s] 0.072431 +Converged at iteration 30, L1 5.78925e-05, Linf 0.00455706, total time[s] 0.077497 +Converged at iteration 28, L1 6.92344e-05, Linf 0.00289559, total time[s] 0.074551 +Converged at iteration 29, L1 8.17609e-05, Linf 0.00382216, total time[s] 0.074976 +Converged at iteration 30, L1 6.81623e-05, Linf 0.00219411, total time[s] 0.076949 +Converged at iteration 29, L1 6.84192e-05, Linf 0.00207343, total time[s] 0.080401 +Converged at iteration 33, L1 6.12898e-05, Linf 0.00584828, total time[s] 0.084028 +Converged at iteration 27, L1 7.03266e-05, Linf 0.0034476, total time[s] 0.069814 +Converged at iteration 25, L1 8.07643e-05, Linf 0.00205715, total time[s] 0.067321 +Converged at iteration 23, L1 9.4548e-05, Linf 0.00383114, total time[s] 0.06156 +Converged at iteration 39, L1 7.5744e-05, Linf 0.00647323, total time[s] 0.09916 +Converged at iteration 36, L1 7.18694e-05, Linf 0.00517368, total time[s] 0.099267 +Converged at iteration 25, L1 4.94665e-05, Linf 0.00195499, total time[s] 0.068003 +Converged at iteration 31, L1 5.6544e-05, Linf 0.00504342, total time[s] 0.079291 +Converged at iteration 25, L1 8.96731e-05, Linf 0.00581137, total time[s] 0.065417 +Converged at iteration 21, L1 5.70079e-05, Linf 0.00337083, total time[s] 0.059495 +Converged at iteration 19, L1 7.98279e-05, Linf 0.00530255, total time[s] 0.052424 +Converged at iteration 21, L1 4.77278e-05, Linf 0.00436711, total time[s] 0.056403 +Converged at iteration 24, L1 9.13375e-05, Linf 0.00571671, total time[s] 0.065475 +Converged at iteration 24, L1 8.75218e-05, Linf 0.0049156, total time[s] 0.063831 +Converged at iteration 20, L1 6.45172e-05, Linf 0.00529431, total time[s] 0.0542 +Converged at iteration 17, L1 6.1814e-05, Linf 0.00260238, total time[s] 0.052214 +Converged at iteration 32, L1 6.54478e-05, Linf 0.00246961, total time[s] 0.08363 +Converged at iteration 19, L1 9.9667e-05, Linf 0.00716178, total time[s] 0.050431 +Converged at iteration 23, L1 8.37008e-05, Linf 0.00716792, total time[s] 0.06163 +Converged at iteration 27, L1 6.52753e-05, Linf 0.0038183, total time[s] 0.078144 +Converged at iteration 23, L1 7.12326e-05, Linf 0.00604688, total time[s] 0.061123 +Converged at iteration 21, L1 6.17673e-05, Linf 0.00397774, total time[s] 0.056184 +Converged at iteration 23, L1 7.46703e-05, Linf 0.00307445, total time[s] 0.062041 +Converged at iteration 25, L1 9.08625e-05, Linf 0.00474184, total time[s] 0.065969 +Converged at iteration 28, L1 8.31271e-05, Linf 0.00407019, total time[s] 0.073569 +Converged at iteration 30, L1 5.82368e-05, Linf 0.00456143, total time[s] 0.076975 +Converged at iteration 28, L1 6.92573e-05, Linf 0.00291997, total time[s] 0.075161 +Converged at iteration 29, L1 8.16926e-05, Linf 0.00379442, total time[s] 0.07657 +Converged at iteration 30, L1 6.90647e-05, Linf 0.00219153, total time[s] 0.077957 +Converged at iteration 29, L1 7.09237e-05, Linf 0.0021555, total time[s] 0.07472 +Converged at iteration 33, L1 6.19846e-05, Linf 0.00581615, total time[s] 0.084669 +Converged at iteration 27, L1 7.2381e-05, Linf 0.00350451, total time[s] 0.06973 +Converged at iteration 25, L1 7.95217e-05, Linf 0.00203335, total time[s] 0.064943 +Converged at iteration 23, L1 9.66142e-05, Linf 0.00394111, total time[s] 0.060499 +Converged at iteration 39, L1 7.44187e-05, Linf 0.00654784, total time[s] 0.101002 +Converged at iteration 36, L1 7.16796e-05, Linf 0.00527513, total time[s] 0.096469 +Converged at iteration 25, L1 4.79047e-05, Linf 0.00184793, total time[s] 0.067734 +Converged at iteration 31, L1 5.64628e-05, Linf 0.00503383, total time[s] 0.080568 +Converged at iteration 25, L1 8.7274e-05, Linf 0.00576139, total time[s] 0.065651 +Converged at iteration 21, L1 5.77445e-05, Linf 0.00347834, total time[s] 0.056875 +Converged at iteration 19, L1 7.84853e-05, Linf 0.00514214, total time[s] 0.051523 +Converged at iteration 21, L1 4.57914e-05, Linf 0.00458768, total time[s] 0.056872 +Converged at iteration 24, L1 8.58274e-05, Linf 0.00516514, total time[s] 0.064562 +Converged at iteration 24, L1 8.58556e-05, Linf 0.00489088, total time[s] 0.063493 +Converged at iteration 20, L1 6.32673e-05, Linf 0.0052312, total time[s] 0.053606 +Converged at iteration 17, L1 6.10896e-05, Linf 0.00254118, total time[s] 0.047035 +Converged at iteration 32, L1 6.48283e-05, Linf 0.00249214, total time[s] 0.081966 +Converged at iteration 19, L1 9.97102e-05, Linf 0.00727603, total time[s] 0.051101 +Converged at iteration 23, L1 8.29166e-05, Linf 0.00721308, total time[s] 0.060147 +Converged at iteration 27, L1 6.3288e-05, Linf 0.00375274, total time[s] 0.070005 +Converged at iteration 23, L1 7.09417e-05, Linf 0.00595495, total time[s] 0.061473 +Converged at iteration 21, L1 6.03496e-05, Linf 0.00393073, total time[s] 0.056188 +Converged at iteration 23, L1 7.45581e-05, Linf 0.00300066, total time[s] 0.06096 +Converged at iteration 25, L1 9.02502e-05, Linf 0.00446149, total time[s] 0.065845 +Converged at iteration 28, L1 8.19492e-05, Linf 0.00392585, total time[s] 0.071557 +Converged at iteration 30, L1 5.78427e-05, Linf 0.00455732, total time[s] 0.078156 +Converged at iteration 28, L1 6.9215e-05, Linf 0.00289308, total time[s] 0.07191 +Converged at iteration 29, L1 8.18163e-05, Linf 0.00382946, total time[s] 0.074613 +Converged at iteration 30, L1 6.80141e-05, Linf 0.00219453, total time[s] 0.077231 +Converged at iteration 29, L1 6.79717e-05, Linf 0.00205789, total time[s] 0.076085 +Converged at iteration 33, L1 6.11427e-05, Linf 0.00585395, total time[s] 0.145776 +Converged at iteration 27, L1 6.99205e-05, Linf 0.00343622, total time[s] 0.080227 +Converged at iteration 25, L1 8.10177e-05, Linf 0.00206107, total time[s] 0.06652 +Converged at iteration 23, L1 9.43236e-05, Linf 0.00380928, total time[s] 0.061275 +Converged at iteration 39, L1 7.57591e-05, Linf 0.00663173, total time[s] 0.105131 +Converged at iteration 36, L1 7.09932e-05, Linf 0.00538934, total time[s] 0.095657 +Converged at iteration 24, L1 9.9709e-05, Linf 0.00328575, total time[s] 0.063325 +Converged at iteration 31, L1 5.63113e-05, Linf 0.00502573, total time[s] 0.079483 +Converged at iteration 25, L1 8.46135e-05, Linf 0.00570043, total time[s] 0.065959 +Converged at iteration 21, L1 5.89647e-05, Linf 0.00360002, total time[s] 0.056545 +Converged at iteration 19, L1 7.70907e-05, Linf 0.00498327, total time[s] 0.051599 +Converged at iteration 21, L1 4.40838e-05, Linf 0.00433659, total time[s] 0.056971 +Converged at iteration 24, L1 7.96414e-05, Linf 0.00455742, total time[s] 0.066158 +Converged at iteration 24, L1 8.3205e-05, Linf 0.00486052, total time[s] 0.063035 +Converged at iteration 20, L1 6.18576e-05, Linf 0.0051396, total time[s] 0.054813 +Converged at iteration 17, L1 6.02091e-05, Linf 0.00246789, total time[s] 0.053833 +Converged at iteration 32, L1 6.41234e-05, Linf 0.00251797, total time[s] 0.087676 +Converged at iteration 19, L1 9.93477e-05, Linf 0.00707005, total time[s] 0.051195 +Converged at iteration 23, L1 8.16264e-05, Linf 0.00714559, total time[s] 0.079565 +Converged at iteration 27, L1 6.11282e-05, Linf 0.00367518, total time[s] 0.072324 +Converged at iteration 23, L1 7.0562e-05, Linf 0.00585548, total time[s] 0.061317 +Converged at iteration 21, L1 5.87998e-05, Linf 0.0038646, total time[s] 0.060484 +Converged at iteration 23, L1 7.46921e-05, Linf 0.00300741, total time[s] 0.067323 +Converged at iteration 25, L1 8.96091e-05, Linf 0.00435912, total time[s] 0.064884 +Converged at iteration 28, L1 8.04967e-05, Linf 0.00373345, total time[s] 0.077322 +Converged at iteration 30, L1 5.76711e-05, Linf 0.00455014, total time[s] 0.077817 +Converged at iteration 28, L1 6.89537e-05, Linf 0.00286181, total time[s] 0.072814 +Converged at iteration 29, L1 8.22117e-05, Linf 0.00388184, total time[s] 0.074783 +Converged at iteration 30, L1 6.70501e-05, Linf 0.002194, total time[s] 0.085882 +Converged at iteration 29, L1 6.4985e-05, Linf 0.001954, total time[s] 0.075514 +Converged at iteration 33, L1 6.01607e-05, Linf 0.00589989, total time[s] 0.084356 +Converged at iteration 27, L1 6.72145e-05, Linf 0.0033559, total time[s] 0.070244 +Converged at iteration 25, L1 8.26391e-05, Linf 0.00210835, total time[s] 0.065918 +Converged at iteration 23, L1 9.10866e-05, Linf 0.00369128, total time[s] 0.061095 +Converged at iteration 39, L1 7.09565e-05, Linf 0.006735, total time[s] 0.107208 +Converged at iteration 36, L1 7.01745e-05, Linf 0.00553971, total time[s] 0.098131 +Converged at iteration 24, L1 9.73695e-05, Linf 0.00306887, total time[s] 0.063491 +Converged at iteration 31, L1 5.61826e-05, Linf 0.00501842, total time[s] 0.080766 +Converged at iteration 25, L1 8.09794e-05, Linf 0.00562597, total time[s] 0.06554 +Converged at iteration 21, L1 6.17532e-05, Linf 0.00373736, total time[s] 0.057365 +Converged at iteration 19, L1 7.55942e-05, Linf 0.00472665, total time[s] 0.05195 +Converged at iteration 21, L1 4.22841e-05, Linf 0.00413316, total time[s] 0.056523 +Converged at iteration 24, L1 7.3378e-05, Linf 0.0038414, total time[s] 0.063185 +Converged at iteration 24, L1 7.97551e-05, Linf 0.00482298, total time[s] 0.063065 +Converged at iteration 20, L1 6.09762e-05, Linf 0.00507516, total time[s] 0.053413 +Converged at iteration 17, L1 5.90683e-05, Linf 0.00238058, total time[s] 0.048905 +Converged at iteration 32, L1 6.31316e-05, Linf 0.00254947, total time[s] 0.082276 +Converged at iteration 19, L1 9.93023e-05, Linf 0.00698591, total time[s] 0.052192 +Converged at iteration 23, L1 8.0564e-05, Linf 0.00707377, total time[s] 0.061039 +Converged at iteration 27, L1 6.02212e-05, Linf 0.00356328, total time[s] 0.070738 +Converged at iteration 23, L1 7.03838e-05, Linf 0.00573878, total time[s] 0.061678 +Converged at iteration 20, L1 9.79897e-05, Linf 0.00505227, total time[s] 0.05392 +Converged at iteration 23, L1 7.47144e-05, Linf 0.00297317, total time[s] 0.060976 +Converged at iteration 25, L1 8.9224e-05, Linf 0.00416277, total time[s] 0.068399 +Converged at iteration 28, L1 7.88086e-05, Linf 0.00358929, total time[s] 0.080538 +Converged at iteration 30, L1 5.75362e-05, Linf 0.00452467, total time[s] 0.07802 +Converged at iteration 28, L1 6.9201e-05, Linf 0.00286952, total time[s] 0.073147 +Converged at iteration 29, L1 8.29108e-05, Linf 0.00393031, total time[s] 0.074781 +Converged at iteration 30, L1 6.58828e-05, Linf 0.00218399, total time[s] 0.077231 +Converged at iteration 28, L1 9.76896e-05, Linf 0.00253437, total time[s] 0.072682 +Converged at iteration 33, L1 5.89697e-05, Linf 0.00595505, total time[s] 0.084537 +Converged at iteration 27, L1 6.38069e-05, Linf 0.0032596, total time[s] 0.070276 +Converged at iteration 25, L1 8.42204e-05, Linf 0.00218483, total time[s] 0.065961 +Converged at iteration 23, L1 8.77774e-05, Linf 0.00360433, total time[s] 0.060861 +Converged at iteration 39, L1 6.88776e-05, Linf 0.00684999, total time[s] 0.105073 +Converged at iteration 36, L1 7.02235e-05, Linf 0.0057089, total time[s] 0.10082 +Converged at iteration 24, L1 9.4994e-05, Linf 0.00296705, total time[s] 0.064616 +Converged at iteration 30, L1 9.93249e-05, Linf 0.00614853, total time[s] 0.080576 +Converged at iteration 25, L1 7.71667e-05, Linf 0.00553529, total time[s] 0.066803 +Converged at iteration 21, L1 6.45714e-05, Linf 0.00389183, total time[s] 0.057631 +Converged at iteration 19, L1 7.3549e-05, Linf 0.00468672, total time[s] 0.053115 +Converged at iteration 21, L1 4.07052e-05, Linf 0.00398398, total time[s] 0.056741 +Converged at iteration 24, L1 6.69794e-05, Linf 0.00382845, total time[s] 0.066835 +Converged at iteration 24, L1 7.5625e-05, Linf 0.00477616, total time[s] 0.064358 +Converged at iteration 20, L1 5.8871e-05, Linf 0.00534713, total time[s] 0.055056 +Converged at iteration 17, L1 5.77713e-05, Linf 0.00227425, total time[s] 0.072809 +Converged at iteration 32, L1 6.19747e-05, Linf 0.00259238, total time[s] 0.10349 +Converged at iteration 19, L1 9.91428e-05, Linf 0.0068629, total time[s] 0.051723 +Converged at iteration 23, L1 7.9336e-05, Linf 0.00692533, total time[s] 0.060775 +Converged at iteration 27, L1 5.82621e-05, Linf 0.00343001, total time[s] 0.070727 +Converged at iteration 23, L1 7.07554e-05, Linf 0.00559698, total time[s] 0.061316 +Converged at iteration 20, L1 9.58987e-05, Linf 0.00502671, total time[s] 0.054021 +Converged at iteration 23, L1 7.53521e-05, Linf 0.00294031, total time[s] 0.060985 +Converged at iteration 25, L1 8.85383e-05, Linf 0.00397282, total time[s] 0.068272 +Converged at iteration 28, L1 7.69958e-05, Linf 0.00383816, total time[s] 0.072891 +Converged at iteration 30, L1 5.76592e-05, Linf 0.00447756, total time[s] 0.078066 +Converged at iteration 28, L1 6.95676e-05, Linf 0.00285466, total time[s] 0.07288 +Converged at iteration 29, L1 8.37202e-05, Linf 0.0039986, total time[s] 0.075461 +Converged at iteration 30, L1 6.44028e-05, Linf 0.00217636, total time[s] 0.076993 +Converged at iteration 28, L1 9.30009e-05, Linf 0.00245957, total time[s] 0.073402 +Converged at iteration 33, L1 5.76601e-05, Linf 0.00602132, total time[s] 0.084207 +Converged at iteration 27, L1 6.08885e-05, Linf 0.0031623, total time[s] 0.070852 +Converged at iteration 25, L1 8.6008e-05, Linf 0.00227283, total time[s] 0.068239 +Converged at iteration 23, L1 8.49939e-05, Linf 0.00347399, total time[s] 0.060877 +Converged at iteration 39, L1 7.01163e-05, Linf 0.00678459, total time[s] 0.100042 +Converged at iteration 36, L1 7.02006e-05, Linf 0.00562707, total time[s] 0.096229 +Converged at iteration 24, L1 9.62418e-05, Linf 0.00306887, total time[s] 0.063722 +Converged at iteration 30, L1 9.97413e-05, Linf 0.00614548, total time[s] 0.077374 +Converged at iteration 25, L1 7.90567e-05, Linf 0.00558075, total time[s] 0.06569 +Converged at iteration 21, L1 6.26562e-05, Linf 0.00381603, total time[s] 0.055853 +Converged at iteration 19, L1 7.44612e-05, Linf 0.00470714, total time[s] 0.051661 +Converged at iteration 21, L1 4.13321e-05, Linf 0.00420019, total time[s] 0.05637 +Converged at iteration 24, L1 7.01991e-05, Linf 0.00394284, total time[s] 0.064038 +Converged at iteration 24, L1 7.75652e-05, Linf 0.00479977, total time[s] 0.063896 +Converged at iteration 20, L1 5.94911e-05, Linf 0.00517062, total time[s] 0.054291 +Converged at iteration 17, L1 5.83888e-05, Linf 0.00232759, total time[s] 0.04725 +Converged at iteration 32, L1 6.25194e-05, Linf 0.00257008, total time[s] 0.086741 +Converged at iteration 19, L1 9.91014e-05, Linf 0.00692623, total time[s] 0.059842 +Converged at iteration 23, L1 8.01562e-05, Linf 0.00700766, total time[s] 0.071101 +Converged at iteration 27, L1 5.93216e-05, Linf 0.00349269, total time[s] 0.073041 +Converged at iteration 23, L1 7.05353e-05, Linf 0.00566625, total time[s] 0.061479 +Converged at iteration 20, L1 9.68067e-05, Linf 0.00504189, total time[s] 0.053766 +Converged at iteration 23, L1 7.51123e-05, Linf 0.00295581, total time[s] 0.065442 +Converged at iteration 25, L1 8.90231e-05, Linf 0.0040622, total time[s] 0.06599 +Converged at iteration 28, L1 7.7919e-05, Linf 0.00370989, total time[s] 0.072641 +Converged at iteration 30, L1 5.76033e-05, Linf 0.00450239, total time[s] 0.078122 +Converged at iteration 28, L1 6.93446e-05, Linf 0.00286254, total time[s] 0.072622 +Converged at iteration 29, L1 8.33217e-05, Linf 0.00396377, total time[s] 0.074953 +Converged at iteration 30, L1 6.51595e-05, Linf 0.00218079, total time[s] 0.077453 +Converged at iteration 28, L1 9.51632e-05, Linf 0.00249793, total time[s] 0.072483 +Converged at iteration 33, L1 5.82758e-05, Linf 0.00598799, total time[s] 0.084894 +Converged at iteration 27, L1 6.19813e-05, Linf 0.00320791, total time[s] 0.070726 +Converged at iteration 25, L1 8.53164e-05, Linf 0.00222949, total time[s] 0.065422 +Converged at iteration 23, L1 8.60819e-05, Linf 0.00354936, total time[s] 0.060944 +Converged at iteration 39, L1 7.03905e-05, Linf 0.00685599, total time[s] 0.101839 +Converged at iteration 36, L1 6.92942e-05, Linf 0.00573176, total time[s] 0.107472 +Converged at iteration 24, L1 9.48193e-05, Linf 0.00293749, total time[s] 0.066516 +Converged at iteration 30, L1 9.9207e-05, Linf 0.00614884, total time[s] 0.077558 +Converged at iteration 25, L1 7.67712e-05, Linf 0.00552618, total time[s] 0.065648 +Converged at iteration 21, L1 6.4115e-05, Linf 0.00390722, total time[s] 0.056432 +Converged at iteration 19, L1 7.33572e-05, Linf 0.00470339, total time[s] 0.051704 +Converged at iteration 21, L1 4.06104e-05, Linf 0.0039608, total time[s] 0.059216 +Converged at iteration 24, L1 6.6439e-05, Linf 0.00370307, total time[s] 0.065489 +Converged at iteration 24, L1 7.55747e-05, Linf 0.00477126, total time[s] 0.063973 +Converged at iteration 20, L1 5.8707e-05, Linf 0.00537262, total time[s] 0.055389 +Converged at iteration 17, L1 5.76461e-05, Linf 0.00226356, total time[s] 0.047865 +Converged at iteration 32, L1 6.1842e-05, Linf 0.00259713, total time[s] 0.089143 +Converged at iteration 19, L1 9.911e-05, Linf 0.00684979, total time[s] 0.051904 +Converged at iteration 23, L1 7.9269e-05, Linf 0.00690712, total time[s] 0.06162 +Converged at iteration 27, L1 5.81665e-05, Linf 0.00342049, total time[s] 0.071097 +Converged at iteration 23, L1 7.08883e-05, Linf 0.00558387, total time[s] 0.06326 +Converged at iteration 20, L1 9.57841e-05, Linf 0.00503465, total time[s] 0.054227 +Converged at iteration 23, L1 7.54342e-05, Linf 0.00293746, total time[s] 0.061757 +Converged at iteration 25, L1 8.84902e-05, Linf 0.00395559, total time[s] 0.066009 +Converged at iteration 28, L1 7.68623e-05, Linf 0.00386604, total time[s] 0.073661 +Converged at iteration 30, L1 5.77172e-05, Linf 0.00447523, total time[s] 0.079533 +Converged at iteration 28, L1 6.96171e-05, Linf 0.00285232, total time[s] 0.073932 +Converged at iteration 29, L1 8.3788e-05, Linf 0.00400623, total time[s] 0.076808 +Converged at iteration 30, L1 6.42862e-05, Linf 0.00217595, total time[s] 0.080424 +Converged at iteration 28, L1 9.25888e-05, Linf 0.00245061, total time[s] 0.073593 +Converged at iteration 33, L1 5.74662e-05, Linf 0.00602805, total time[s] 0.085179 +Converged at iteration 27, L1 6.01757e-05, Linf 0.00315291, total time[s] 0.0701 +Converged at iteration 25, L1 8.62996e-05, Linf 0.00228204, total time[s] 0.065607 +Converged at iteration 23, L1 8.43287e-05, Linf 0.00346119, total time[s] 0.061045 +Converged at iteration 39, L1 6.72784e-05, Linf 0.00694587, total time[s] 0.100865 +Converged at iteration 36, L1 6.87221e-05, Linf 0.00585808, total time[s] 0.104589 +Converged at iteration 24, L1 9.36882e-05, Linf 0.0028662, total time[s] 0.0655 +Converged at iteration 30, L1 9.84757e-05, Linf 0.00615004, total time[s] 0.078951 +Converged at iteration 25, L1 7.40503e-05, Linf 0.00546047, total time[s] 0.065561 +Converged at iteration 21, L1 6.67574e-05, Linf 0.00401319, total time[s] 0.057234 +Converged at iteration 19, L1 7.21613e-05, Linf 0.00482256, total time[s] 0.052108 +Converged at iteration 21, L1 3.96247e-05, Linf 0.00378839, total time[s] 0.056512 +Converged at iteration 24, L1 6.25755e-05, Linf 0.00318365, total time[s] 0.064198 +Converged at iteration 24, L1 7.41673e-05, Linf 0.00473612, total time[s] 0.065084 +Converged at iteration 20, L1 5.74504e-05, Linf 0.0052737, total time[s] 0.053896 +Converged at iteration 17, L1 5.70069e-05, Linf 0.00218654, total time[s] 0.049571 +Converged at iteration 32, L1 6.07287e-05, Linf 0.00263223, total time[s] 0.109646 +Converged at iteration 19, L1 9.87661e-05, Linf 0.00674965, total time[s] 0.056235 +Converged at iteration 23, L1 7.84326e-05, Linf 0.00676131, total time[s] 0.061012 +Converged at iteration 27, L1 5.754e-05, Linf 0.00331195, total time[s] 0.070354 +Converged at iteration 23, L1 7.13712e-05, Linf 0.00548233, total time[s] 0.062368 +Converged at iteration 20, L1 9.47058e-05, Linf 0.00503583, total time[s] 0.054247 +Converged at iteration 23, L1 7.58476e-05, Linf 0.0029188, total time[s] 0.060945 +Converged at iteration 25, L1 8.80415e-05, Linf 0.00384571, total time[s] 0.065901 +Converged at iteration 28, L1 7.55672e-05, Linf 0.00387137, total time[s] 0.073269 +Converged at iteration 30, L1 5.79087e-05, Linf 0.00444984, total time[s] 0.079632 +Converged at iteration 28, L1 7.00983e-05, Linf 0.00283046, total time[s] 0.077468 +Converged at iteration 29, L1 8.42611e-05, Linf 0.00405643, total time[s] 0.074991 +Converged at iteration 30, L1 6.34347e-05, Linf 0.00217217, total time[s] 0.077325 +Converged at iteration 28, L1 8.96905e-05, Linf 0.00237823, total time[s] 0.072814 +Converged at iteration 33, L1 5.65595e-05, Linf 0.00607569, total time[s] 0.084853 +Converged at iteration 26, L1 9.91171e-05, Linf 0.00360756, total time[s] 0.067879 +Converged at iteration 25, L1 8.7539e-05, Linf 0.00234352, total time[s] 0.065503 +Converged at iteration 23, L1 8.24751e-05, Linf 0.00337336, total time[s] 0.061315 +Converged at iteration 39, L1 6.67417e-05, Linf 0.00704521, total time[s] 0.113524 +Converged at iteration 36, L1 6.81311e-05, Linf 0.00601718, total time[s] 0.098037 +Converged at iteration 24, L1 9.1791e-05, Linf 0.00270389, total time[s] 0.06359 +Converged at iteration 30, L1 9.79809e-05, Linf 0.00615459, total time[s] 0.077518 +Converged at iteration 25, L1 7.10643e-05, Linf 0.00538125, total time[s] 0.06955 +Converged at iteration 21, L1 7.02498e-05, Linf 0.00414784, total time[s] 0.064622 +Converged at iteration 19, L1 7.09312e-05, Linf 0.00496903, total time[s] 0.053342 +Converged at iteration 21, L1 3.87066e-05, Linf 0.00347343, total time[s] 0.055471 +Converged at iteration 24, L1 5.86157e-05, Linf 0.00349971, total time[s] 0.072504 +Converged at iteration 24, L1 7.15582e-05, Linf 0.00469241, total time[s] 0.066984 +Converged at iteration 20, L1 5.6251e-05, Linf 0.00527563, total time[s] 0.054384 +Converged at iteration 17, L1 5.64025e-05, Linf 0.00210945, total time[s] 0.048295 +Converged at iteration 32, L1 5.97387e-05, Linf 0.00267401, total time[s] 0.08316 +Converged at iteration 19, L1 9.88859e-05, Linf 0.00664597, total time[s] 0.052101 +Converged at iteration 23, L1 7.75007e-05, Linf 0.00655974, total time[s] 0.062937 +Converged at iteration 26, L1 9.8669e-05, Linf 0.00519239, total time[s] 0.068809 +Converged at iteration 23, L1 7.19964e-05, Linf 0.00533622, total time[s] 0.064452 +Converged at iteration 20, L1 9.35318e-05, Linf 0.00493437, total time[s] 0.052989 +Converged at iteration 23, L1 7.59106e-05, Linf 0.00298853, total time[s] 0.062292 +Converged at iteration 25, L1 8.75171e-05, Linf 0.00391015, total time[s] 0.064982 +Converged at iteration 28, L1 7.39894e-05, Linf 0.00363768, total time[s] 0.071065 +Converged at iteration 30, L1 5.82281e-05, Linf 0.00449429, total time[s] 0.076381 +Converged at iteration 28, L1 7.08822e-05, Linf 0.00277856, total time[s] 0.07153 +Converged at iteration 29, L1 8.48484e-05, Linf 0.00407036, total time[s] 0.076579 +Converged at iteration 30, L1 6.24077e-05, Linf 0.00216167, total time[s] 0.081469 +Converged at iteration 28, L1 8.71134e-05, Linf 0.00227134, total time[s] 0.075397 +Converged at iteration 32, L1 9.90681e-05, Linf 0.00733109, total time[s] 0.084199 +Converged at iteration 26, L1 9.52104e-05, Linf 0.00352017, total time[s] 0.068157 +Converged at iteration 25, L1 8.87992e-05, Linf 0.00241457, total time[s] 0.069908 +Converged at iteration 23, L1 8.05268e-05, Linf 0.00328243, total time[s] 0.062276 +Converged at iteration 39, L1 6.36089e-05, Linf 0.00716548, total time[s] 0.101615 +Converged at iteration 36, L1 6.66797e-05, Linf 0.0061979, total time[s] 0.096823 +Converged at iteration 24, L1 9.06365e-05, Linf 0.0026818, total time[s] 0.064321 +Converged at iteration 30, L1 9.66603e-05, Linf 0.00617342, total time[s] 0.077952 +Converged at iteration 25, L1 6.75779e-05, Linf 0.00528567, total time[s] 0.066793 +Converged at iteration 21, L1 7.33639e-05, Linf 0.00430504, total time[s] 0.057511 +Converged at iteration 19, L1 6.95576e-05, Linf 0.00515077, total time[s] 0.052393 +Converged at iteration 21, L1 3.82283e-05, Linf 0.00319747, total time[s] 0.056437 +Converged at iteration 24, L1 5.46285e-05, Linf 0.00286018, total time[s] 0.063891 +Converged at iteration 24, L1 6.78579e-05, Linf 0.00463744, total time[s] 0.064663 +Converged at iteration 20, L1 5.44524e-05, Linf 0.00520965, total time[s] 0.055046 +Converged at iteration 17, L1 5.58171e-05, Linf 0.0020747, total time[s] 0.047048 +Converged at iteration 32, L1 5.89459e-05, Linf 0.00271572, total time[s] 0.083728 +Converged at iteration 19, L1 9.84823e-05, Linf 0.00656396, total time[s] 0.052487 +Converged at iteration 23, L1 7.65682e-05, Linf 0.00629339, total time[s] 0.061799 +Converged at iteration 26, L1 9.57441e-05, Linf 0.00510067, total time[s] 0.068733 +Converged at iteration 23, L1 7.34103e-05, Linf 0.00520351, total time[s] 0.062523 +Converged at iteration 20, L1 9.24979e-05, Linf 0.00479396, total time[s] 0.054542 +Converged at iteration 23, L1 7.62301e-05, Linf 0.00288553, total time[s] 0.062647 +Converged at iteration 25, L1 8.69495e-05, Linf 0.00362111, total time[s] 0.066665 +Converged at iteration 28, L1 7.20694e-05, Linf 0.00326942, total time[s] 0.074264 +Converged at iteration 30, L1 5.88391e-05, Linf 0.00451524, total time[s] 0.083171 +Converged at iteration 28, L1 7.15283e-05, Linf 0.00264475, total time[s] 0.072843 +Converged at iteration 29, L1 8.52294e-05, Linf 0.0041664, total time[s] 0.075586 +Converged at iteration 30, L1 6.14269e-05, Linf 0.00215073, total time[s] 0.077375 +Converged at iteration 28, L1 8.4275e-05, Linf 0.00213382, total time[s] 0.07443 +Converged at iteration 32, L1 9.75257e-05, Linf 0.00734963, total time[s] 0.083025 +Converged at iteration 26, L1 9.10285e-05, Linf 0.00341531, total time[s] 0.068772 +Converged at iteration 25, L1 9.00312e-05, Linf 0.00249578, total time[s] 0.065777 +Converged at iteration 23, L1 7.86088e-05, Linf 0.00315723, total time[s] 0.061239 +Converged at iteration 39, L1 6.45743e-05, Linf 0.00702898, total time[s] 0.098259 +Converged at iteration 36, L1 6.79013e-05, Linf 0.00619216, total time[s] 0.094461 +Converged at iteration 24, L1 9.09987e-05, Linf 0.00265144, total time[s] 0.0625 +Converged at iteration 30, L1 9.71007e-05, Linf 0.00616327, total time[s] 0.082214 +Converged at iteration 25, L1 6.9306e-05, Linf 0.00540995, total time[s] 0.06723 +Converged at iteration 21, L1 7.22215e-05, Linf 0.0042275, total time[s] 0.056835 +Converged at iteration 19, L1 7.02804e-05, Linf 0.00505926, total time[s] 0.051343 +Converged at iteration 21, L1 3.83816e-05, Linf 0.00330122, total time[s] 0.056517 +Converged at iteration 24, L1 5.65365e-05, Linf 0.00291495, total time[s] 0.068288 +Converged at iteration 24, L1 6.93065e-05, Linf 0.00469581, total time[s] 0.062586 +Converged at iteration 20, L1 5.52483e-05, Linf 0.00531086, total time[s] 0.053807 +Converged at iteration 17, L1 5.61106e-05, Linf 0.00209029, total time[s] 0.046844 +Converged at iteration 32, L1 5.9898e-05, Linf 0.00269685, total time[s] 0.082368 +Converged at iteration 19, L1 9.85608e-05, Linf 0.00659911, total time[s] 0.05094 +Converged at iteration 23, L1 7.68604e-05, Linf 0.00642884, total time[s] 0.060276 +Converged at iteration 26, L1 9.70178e-05, Linf 0.00517254, total time[s] 0.067738 +Converged at iteration 23, L1 7.27015e-05, Linf 0.00524291, total time[s] 0.060041 +Converged at iteration 20, L1 9.30962e-05, Linf 0.00487464, total time[s] 0.055925 +Converged at iteration 23, L1 7.61018e-05, Linf 0.00289293, total time[s] 0.060289 +Converged at iteration 25, L1 8.71476e-05, Linf 0.00367556, total time[s] 0.064306 +Converged at iteration 28, L1 7.29796e-05, Linf 0.00342901, total time[s] 0.071714 +Converged at iteration 30, L1 5.85251e-05, Linf 0.00452635, total time[s] 0.076017 +Converged at iteration 28, L1 7.13791e-05, Linf 0.00273878, total time[s] 0.071113 +Converged at iteration 29, L1 8.56313e-05, Linf 0.00410275, total time[s] 0.074036 +Converged at iteration 30, L1 6.24853e-05, Linf 0.00215446, total time[s] 0.075659 +Converged at iteration 28, L1 8.62324e-05, Linf 0.002208, total time[s] 0.071216 +Converged at iteration 32, L1 9.85798e-05, Linf 0.00749225, total time[s] 0.081239 +Converged at iteration 26, L1 9.27624e-05, Linf 0.00346622, total time[s] 0.068218 +Converged at iteration 25, L1 9.0323e-05, Linf 0.00245515, total time[s] 0.06436 +Converged at iteration 23, L1 8.01925e-05, Linf 0.00323491, total time[s] 0.060116 +Converged at iteration 39, L1 6.52522e-05, Linf 0.00717338, total time[s] 0.111918 +Converged at iteration 36, L1 6.68981e-05, Linf 0.00621427, total time[s] 0.093024 +Converged at iteration 24, L1 9.07065e-05, Linf 0.0026888, total time[s] 0.064965 +Converged at iteration 30, L1 9.67838e-05, Linf 0.00614154, total time[s] 0.075901 +Converged at iteration 25, L1 6.72256e-05, Linf 0.00527591, total time[s] 0.066476 +Converged at iteration 21, L1 7.37084e-05, Linf 0.00432078, total time[s] 0.056213 +Converged at iteration 19, L1 6.94511e-05, Linf 0.00516976, total time[s] 0.052796 +Converged at iteration 21, L1 3.81381e-05, Linf 0.00317241, total time[s] 0.056906 +Converged at iteration 24, L1 5.43031e-05, Linf 0.00285016, total time[s] 0.064083 +Converged at iteration 24, L1 6.75712e-05, Linf 0.00463163, total time[s] 0.063543 +Converged at iteration 20, L1 5.43406e-05, Linf 0.00520269, total time[s] 0.058351 +Converged at iteration 17, L1 5.57192e-05, Linf 0.00206871, total time[s] 0.047796 +Converged at iteration 32, L1 5.88472e-05, Linf 0.00271925, total time[s] 0.083992 +Converged at iteration 19, L1 9.84184e-05, Linf 0.00655815, total time[s] 0.051819 +Converged at iteration 23, L1 7.65244e-05, Linf 0.00626601, total time[s] 0.061508 +Converged at iteration 26, L1 9.57313e-05, Linf 0.00510358, total time[s] 0.068887 +Converged at iteration 23, L1 7.36292e-05, Linf 0.00517092, total time[s] 0.064106 +Converged at iteration 20, L1 9.24303e-05, Linf 0.00477297, total time[s] 0.054565 +Converged at iteration 23, L1 7.62761e-05, Linf 0.00288441, total time[s] 0.065745 +Converged at iteration 25, L1 8.69057e-05, Linf 0.00361161, total time[s] 0.067896 +Converged at iteration 28, L1 7.18906e-05, Linf 0.00324537, total time[s] 0.074629 +Converged at iteration 30, L1 5.89536e-05, Linf 0.00450808, total time[s] 0.0804 +Converged at iteration 28, L1 7.16243e-05, Linf 0.00267114, total time[s] 0.074731 +Converged at iteration 29, L1 8.56126e-05, Linf 0.0041703, total time[s] 0.07631 +Converged at iteration 30, L1 6.13586e-05, Linf 0.00215056, total time[s] 0.079406 +Converged at iteration 28, L1 8.4114e-05, Linf 0.00211821, total time[s] 0.073883 +Converged at iteration 32, L1 9.74645e-05, Linf 0.00744637, total time[s] 0.082331 +Converged at iteration 26, L1 9.06156e-05, Linf 0.00340353, total time[s] 0.068006 +Converged at iteration 25, L1 9.06991e-05, Linf 0.00250394, total time[s] 0.066586 +Converged at iteration 23, L1 7.87248e-05, Linf 0.00313234, total time[s] 0.061436 +Converged at iteration 39, L1 6.18075e-05, Linf 0.0072624, total time[s] 0.10346 +Converged at iteration 36, L1 6.59343e-05, Linf 0.00634606, total time[s] 0.095459 +Converged at iteration 24, L1 9.01912e-05, Linf 0.00273994, total time[s] 0.064259 +Converged at iteration 30, L1 9.59185e-05, Linf 0.00618806, total time[s] 0.0783 +Converged at iteration 25, L1 6.48773e-05, Linf 0.00520719, total time[s] 0.067142 +Converged at iteration 21, L1 7.84424e-05, Linf 0.00443057, total time[s] 0.061925 +Converged at iteration 19, L1 6.88437e-05, Linf 0.00530594, total time[s] 0.052128 +Converged at iteration 21, L1 3.78468e-05, Linf 0.00306765, total time[s] 0.057223 +Converged at iteration 24, L1 5.21653e-05, Linf 0.00303296, total time[s] 0.064004 +Converged at iteration 24, L1 6.45021e-05, Linf 0.00458997, total time[s] 0.063685 +Converged at iteration 20, L1 5.32643e-05, Linf 0.00515358, total time[s] 0.054714 +Converged at iteration 17, L1 5.52963e-05, Linf 0.0020389, total time[s] 0.047013 +Converged at iteration 32, L1 5.83691e-05, Linf 0.00273784, total time[s] 0.083088 +Converged at iteration 19, L1 9.82263e-05, Linf 0.00651686, total time[s] 0.052153 +Converged at iteration 23, L1 7.51165e-05, Linf 0.00606669, total time[s] 0.061271 +Converged at iteration 26, L1 9.52896e-05, Linf 0.00503525, total time[s] 0.068101 +Converged at iteration 23, L1 7.51207e-05, Linf 0.00506094, total time[s] 0.061341 +Converged at iteration 20, L1 9.23917e-05, Linf 0.00461463, total time[s] 0.054519 +Converged at iteration 23, L1 7.66463e-05, Linf 0.00287757, total time[s] 0.06162 +Converged at iteration 25, L1 8.65125e-05, Linf 0.00354986, total time[s] 0.066004 +Converged at iteration 28, L1 7.04344e-05, Linf 0.0031875, total time[s] 0.077095 +Converged at iteration 30, L1 5.94302e-05, Linf 0.00446108, total time[s] 0.078472 +Converged at iteration 28, L1 7.23087e-05, Linf 0.00246337, total time[s] 0.073175 +Converged at iteration 29, L1 8.67117e-05, Linf 0.00420221, total time[s] 0.085948 +Converged at iteration 30, L1 6.22204e-05, Linf 0.00214758, total time[s] 0.106301 +Converged at iteration 28, L1 8.33796e-05, Linf 0.0019983, total time[s] 0.108698 +Converged at iteration 32, L1 9.66206e-05, Linf 0.0075234, total time[s] 0.085787 +Converged at iteration 26, L1 8.81494e-05, Linf 0.00332394, total time[s] 0.074484 +Converged at iteration 25, L1 9.09621e-05, Linf 0.00255998, total time[s] 0.070793 +Converged at iteration 23, L1 7.71509e-05, Linf 0.00311748, total time[s] 0.078628 +Converged at iteration 39, L1 5.99545e-05, Linf 0.00736249, total time[s] 0.167505 +Converged at iteration 36, L1 6.50866e-05, Linf 0.00649792, total time[s] 0.096056 +Converged at iteration 24, L1 8.96926e-05, Linf 0.00281411, total time[s] 0.071928 +Converged at iteration 30, L1 9.51327e-05, Linf 0.0062035, total time[s] 0.081267 +Converged at iteration 25, L1 6.21987e-05, Linf 0.00512461, total time[s] 0.067111 +Converged at iteration 21, L1 7.87043e-05, Linf 0.00455853, total time[s] 0.058039 +Converged at iteration 19, L1 6.78046e-05, Linf 0.0054224, total time[s] 0.052618 +Converged at iteration 21, L1 3.78227e-05, Linf 0.00312773, total time[s] 0.057107 +Converged at iteration 23, L1 9.94506e-05, Linf 0.00409699, total time[s] 0.061928 +Converged at iteration 24, L1 6.35675e-05, Linf 0.00736617, total time[s] 0.064143 +Converged at iteration 20, L1 5.20089e-05, Linf 0.0051624, total time[s] 0.054861 +Converged at iteration 17, L1 5.49031e-05, Linf 0.00199514, total time[s] 0.048085 +Converged at iteration 32, L1 5.76497e-05, Linf 0.0027508, total time[s] 0.083415 +Converged at iteration 19, L1 9.83225e-05, Linf 0.00646353, total time[s] 0.052141 +Converged at iteration 23, L1 7.43974e-05, Linf 0.00583054, total time[s] 0.067099 +Converged at iteration 26, L1 9.39611e-05, Linf 0.0049515, total time[s] 0.069018 +Converged at iteration 23, L1 7.66212e-05, Linf 0.00491614, total time[s] 0.062182 +Converged at iteration 20, L1 9.14938e-05, Linf 0.00441827, total time[s] 0.053608 +Converged at iteration 23, L1 7.68121e-05, Linf 0.00287264, total time[s] 0.062735 +Converged at iteration 25, L1 8.58756e-05, Linf 0.00349795, total time[s] 0.066612 +Converged at iteration 28, L1 6.88132e-05, Linf 0.00313656, total time[s] 0.074049 +Converged at iteration 30, L1 6.00146e-05, Linf 0.00435342, total time[s] 0.078253 +Converged at iteration 28, L1 7.32693e-05, Linf 0.00251994, total time[s] 0.073645 +Converged at iteration 29, L1 8.72485e-05, Linf 0.00426386, total time[s] 0.075381 +Converged at iteration 30, L1 5.99765e-05, Linf 0.00213645, total time[s] 0.077998 +Converged at iteration 28, L1 8.25951e-05, Linf 0.00188109, total time[s] 0.073822 +Converged at iteration 32, L1 9.56321e-05, Linf 0.00761831, total time[s] 0.0833 +Converged at iteration 26, L1 8.51466e-05, Linf 0.00322394, total time[s] 0.0689 +Converged at iteration 25, L1 9.1854e-05, Linf 0.00262348, total time[s] 0.067753 +Converged at iteration 23, L1 7.57171e-05, Linf 0.00301867, total time[s] 0.061614 +Converged at iteration 39, L1 6.08796e-05, Linf 0.00731124, total time[s] 0.099139 +Converged at iteration 36, L1 6.54136e-05, Linf 0.00642255, total time[s] 0.09313 +Converged at iteration 24, L1 8.99701e-05, Linf 0.00277493, total time[s] 0.064254 +Converged at iteration 30, L1 9.5512e-05, Linf 0.00619394, total time[s] 0.082292 +Converged at iteration 25, L1 6.34834e-05, Linf 0.00516594, total time[s] 0.071279 +Converged at iteration 21, L1 7.74944e-05, Linf 0.00449499, total time[s] 0.059434 +Converged at iteration 19, L1 6.81849e-05, Linf 0.00538981, total time[s] 0.052902 +Converged at iteration 21, L1 3.78517e-05, Linf 0.00310804, total time[s] 0.070581 +Converged at iteration 24, L1 5.09967e-05, Linf 0.00271299, total time[s] 0.065021 +Converged at iteration 24, L1 6.35511e-05, Linf 0.00456421, total time[s] 0.063473 +Converged at iteration 20, L1 5.25786e-05, Linf 0.00512361, total time[s] 0.054106 +Converged at iteration 17, L1 5.50256e-05, Linf 0.00201771, total time[s] 0.048461 +Converged at iteration 32, L1 5.79553e-05, Linf 0.00274541, total time[s] 0.086747 +Converged at iteration 19, L1 9.81516e-05, Linf 0.0064695, total time[s] 0.051799 +Converged at iteration 23, L1 7.4883e-05, Linf 0.00594347, total time[s] 0.061826 +Converged at iteration 26, L1 9.48328e-05, Linf 0.00498978, total time[s] 0.072061 +Converged at iteration 23, L1 7.58596e-05, Linf 0.00499099, total time[s] 0.061573 +Converged at iteration 20, L1 9.15719e-05, Linf 0.00451628, total time[s] 0.057479 +Converged at iteration 23, L1 7.68194e-05, Linf 0.00287507, total time[s] 0.065699 +Converged at iteration 25, L1 8.63298e-05, Linf 0.00352097, total time[s] 0.066927 +Converged at iteration 28, L1 6.95861e-05, Linf 0.00315982, total time[s] 0.073117 +Converged at iteration 30, L1 5.97477e-05, Linf 0.00443831, total time[s] 0.078492 +Converged at iteration 28, L1 7.27574e-05, Linf 0.00249849, total time[s] 0.073429 +Converged at iteration 29, L1 8.66535e-05, Linf 0.00422952, total time[s] 0.07768 +Converged at iteration 30, L1 6.03389e-05, Linf 0.00214395, total time[s] 0.078381 +Converged at iteration 28, L1 8.2817e-05, Linf 0.00193086, total time[s] 0.073277 +Converged at iteration 32, L1 9.60876e-05, Linf 0.00747901, total time[s] 0.082237 +Converged at iteration 26, L1 8.6633e-05, Linf 0.00327491, total time[s] 0.068999 +Converged at iteration 25, L1 9.14381e-05, Linf 0.00259219, total time[s] 0.067964 +Converged at iteration 23, L1 7.64076e-05, Linf 0.0030767, total time[s] 0.06178 +Converged at iteration 39, L1 5.97563e-05, Linf 0.00737507, total time[s] 0.104572 +Converged at iteration 36, L1 6.50186e-05, Linf 0.00651319, total time[s] 0.094709 +Converged at iteration 24, L1 8.96796e-05, Linf 0.00281846, total time[s] 0.065242 +Converged at iteration 30, L1 9.58813e-05, Linf 0.00619611, total time[s] 0.079301 +Converged at iteration 25, L1 6.19244e-05, Linf 0.00511649, total time[s] 0.066015 +Converged at iteration 21, L1 7.89684e-05, Linf 0.00457138, total time[s] 0.057916 +Converged at iteration 19, L1 6.77309e-05, Linf 0.00549223, total time[s] 0.056506 +Converged at iteration 21, L1 3.77798e-05, Linf 0.00312987, total time[s] 0.057106 +Converged at iteration 23, L1 9.90343e-05, Linf 0.00408795, total time[s] 0.063295 +Converged at iteration 24, L1 6.17729e-05, Linf 0.00450947, total time[s] 0.07323 +Converged at iteration 20, L1 5.20069e-05, Linf 0.00510206, total time[s] 0.058198 +Converged at iteration 17, L1 5.51432e-05, Linf 0.00199035, total time[s] 0.047319 +Converged at iteration 32, L1 5.75811e-05, Linf 0.00275161, total time[s] 0.083846 +Converged at iteration 19, L1 9.81123e-05, Linf 0.00645756, total time[s] 0.052599 +Converged at iteration 23, L1 7.4338e-05, Linf 0.0058035, total time[s] 0.061199 +Converged at iteration 26, L1 9.38555e-05, Linf 0.00494733, total time[s] 0.070122 +Converged at iteration 23, L1 7.67885e-05, Linf 0.00490036, total time[s] 0.08289 +Converged at iteration 20, L1 9.14597e-05, Linf 0.00439899, total time[s] 0.05828 +Converged at iteration 23, L1 7.68447e-05, Linf 0.00287894, total time[s] 0.06266 +Converged at iteration 25, L1 8.59332e-05, Linf 0.00349291, total time[s] 0.068253 +Converged at iteration 28, L1 6.86682e-05, Linf 0.0031322, total time[s] 0.073723 +Converged at iteration 30, L1 6.00909e-05, Linf 0.00433972, total time[s] 0.078452 +Converged at iteration 28, L1 7.33797e-05, Linf 0.00255309, total time[s] 0.073876 +Converged at iteration 29, L1 8.7303e-05, Linf 0.00427171, total time[s] 0.075153 +Converged at iteration 30, L1 5.99209e-05, Linf 0.00213473, total time[s] 0.078271 +Converged at iteration 28, L1 8.26626e-05, Linf 0.00187487, total time[s] 0.073152 +Converged at iteration 32, L1 9.55425e-05, Linf 0.00762762, total time[s] 0.085239 +Converged at iteration 26, L1 8.56676e-05, Linf 0.00321468, total time[s] 0.071699 +Converged at iteration 25, L1 9.1965e-05, Linf 0.00262999, total time[s] 0.06697 +Converged at iteration 23, L1 7.55945e-05, Linf 0.0030099, total time[s] 0.061971 +Converged at iteration 39, L1 5.84595e-05, Linf 0.00744728, total time[s] 0.099405 +Converged at iteration 36, L1 6.44274e-05, Linf 0.00655493, total time[s] 0.096627 +Converged at iteration 24, L1 8.94822e-05, Linf 0.00287707, total time[s] 0.066714 +Converged at iteration 30, L1 9.45127e-05, Linf 0.00618937, total time[s] 0.078583 +Converged at iteration 25, L1 6.01152e-05, Linf 0.00505722, total time[s] 0.074885 +Converged at iteration 21, L1 8.0724e-05, Linf 0.00466169, total time[s] 0.05664 +Converged at iteration 19, L1 6.73452e-05, Linf 0.00562092, total time[s] 0.053565 +Converged at iteration 21, L1 3.77957e-05, Linf 0.00311912, total time[s] 0.05737 +Converged at iteration 23, L1 9.64643e-05, Linf 0.00436464, total time[s] 0.066417 +Converged at iteration 24, L1 5.95416e-05, Linf 0.00449224, total time[s] 0.066705 +Converged at iteration 20, L1 5.11365e-05, Linf 0.00504269, total time[s] 0.056886 +Converged at iteration 17, L1 5.46577e-05, Linf 0.00195361, total time[s] 0.048365 +Converged at iteration 32, L1 5.70708e-05, Linf 0.00275719, total time[s] 0.08189 +Converged at iteration 19, L1 9.79894e-05, Linf 0.00639711, total time[s] 0.051138 +Converged at iteration 23, L1 7.37685e-05, Linf 0.00563478, total time[s] 0.061632 +Converged at iteration 26, L1 9.37401e-05, Linf 0.00491121, total time[s] 0.068037 +Converged at iteration 23, L1 7.78707e-05, Linf 0.0047943, total time[s] 0.060531 +Converged at iteration 20, L1 9.15547e-05, Linf 0.00425848, total time[s] 0.053235 +Converged at iteration 23, L1 7.70804e-05, Linf 0.0028769, total time[s] 0.062885 +Converged at iteration 25, L1 8.54157e-05, Linf 0.00346522, total time[s] 0.065586 +Converged at iteration 28, L1 6.75453e-05, Linf 0.00310519, total time[s] 0.076629 +Converged at iteration 30, L1 6.06304e-05, Linf 0.00424078, total time[s] 0.080168 +Converged at iteration 28, L1 7.42633e-05, Linf 0.00292523, total time[s] 0.072872 +Converged at iteration 29, L1 8.79411e-05, Linf 0.00432908, total time[s] 0.074683 +Converged at iteration 30, L1 5.94796e-05, Linf 0.00212134, total time[s] 0.078887 +Converged at iteration 28, L1 8.32593e-05, Linf 0.00183062, total time[s] 0.072151 +Converged at iteration 32, L1 9.5003e-05, Linf 0.00769539, total time[s] 0.081497 +Converged at iteration 26, L1 8.37442e-05, Linf 0.00314018, total time[s] 0.068597 +Converged at iteration 25, L1 9.25566e-05, Linf 0.00267357, total time[s] 0.068638 +Converged at iteration 23, L1 7.46469e-05, Linf 0.00295413, total time[s] 0.061378 +Converged at iteration 39, L1 5.70422e-05, Linf 0.00753091, total time[s] 0.09742 +Converged at iteration 36, L1 6.37049e-05, Linf 0.00673935, total time[s] 0.093389 +Converged at iteration 24, L1 8.93178e-05, Linf 0.00293951, total time[s] 0.062833 +Converged at iteration 30, L1 9.32782e-05, Linf 0.00617657, total time[s] 0.077712 +Converged at iteration 25, L1 5.81775e-05, Linf 0.00498679, total time[s] 0.066557 +Converged at iteration 21, L1 8.26867e-05, Linf 0.00476815, total time[s] 0.056339 +Converged at iteration 19, L1 6.68435e-05, Linf 0.00577317, total time[s] 0.05265 +Converged at iteration 21, L1 3.79935e-05, Linf 0.00309303, total time[s] 0.056171 +Converged at iteration 23, L1 9.38115e-05, Linf 0.00404965, total time[s] 0.062169 +Converged at iteration 24, L1 5.72145e-05, Linf 0.00444465, total time[s] 0.063779 +Converged at iteration 20, L1 5.03914e-05, Linf 0.00498841, total time[s] 0.054684 +Converged at iteration 17, L1 5.45302e-05, Linf 0.0019042, total time[s] 0.046324 +Converged at iteration 32, L1 5.64653e-05, Linf 0.00276391, total time[s] 0.084332 +Converged at iteration 19, L1 9.77421e-05, Linf 0.00631148, total time[s] 0.051285 +Converged at iteration 23, L1 7.36751e-05, Linf 0.00544077, total time[s] 0.060812 +Converged at iteration 26, L1 9.3371e-05, Linf 0.00487734, total time[s] 0.069076 +Converged at iteration 23, L1 7.87477e-05, Linf 0.00466209, total time[s] 0.06153 +Converged at iteration 20, L1 9.15663e-05, Linf 0.00413356, total time[s] 0.05382 +Converged at iteration 23, L1 7.74405e-05, Linf 0.00287068, total time[s] 0.0625 +Converged at iteration 25, L1 8.48751e-05, Linf 0.00343458, total time[s] 0.068401 +Converged at iteration 27, L1 9.97847e-05, Linf 0.00399673, total time[s] 0.070156 +Converged at iteration 30, L1 6.13563e-05, Linf 0.00416217, total time[s] 0.078833 +Converged at iteration 28, L1 7.55306e-05, Linf 0.00358342, total time[s] 0.072472 +Converged at iteration 29, L1 8.87182e-05, Linf 0.00439147, total time[s] 0.074437 +Converged at iteration 29, L1 9.98703e-05, Linf 0.00275401, total time[s] 0.076502 +Converged at iteration 28, L1 8.49952e-05, Linf 0.00178385, total time[s] 0.072169 +Converged at iteration 32, L1 9.41527e-05, Linf 0.00778043, total time[s] 0.085805 +Converged at iteration 26, L1 8.10042e-05, Linf 0.0030481, total time[s] 0.068008 +Converged at iteration 25, L1 9.31659e-05, Linf 0.00272422, total time[s] 0.065228 +Converged at iteration 23, L1 7.3935e-05, Linf 0.00289638, total time[s] 0.06064 +Converged at iteration 39, L1 5.49611e-05, Linf 0.00762491, total time[s] 0.105495 +Converged at iteration 36, L1 6.26398e-05, Linf 0.00696833, total time[s] 0.097454 +Converged at iteration 24, L1 8.90973e-05, Linf 0.00300686, total time[s] 0.068648 +Converged at iteration 30, L1 9.22099e-05, Linf 0.00618581, total time[s] 0.079967 +Converged at iteration 25, L1 5.60247e-05, Linf 0.00490312, total time[s] 0.065265 +Converged at iteration 21, L1 8.49102e-05, Linf 0.00489371, total time[s] 0.057305 +Converged at iteration 19, L1 6.64156e-05, Linf 0.00596364, total time[s] 0.051021 +Converged at iteration 21, L1 3.84799e-05, Linf 0.00312984, total time[s] 0.057044 +Converged at iteration 23, L1 9.09253e-05, Linf 0.00389251, total time[s] 0.063826 +Converged at iteration 24, L1 5.46778e-05, Linf 0.00438334, total time[s] 0.065269 +Converged at iteration 20, L1 4.89588e-05, Linf 0.00492188, total time[s] 0.053766 +Converged at iteration 17, L1 5.43077e-05, Linf 0.00183779, total time[s] 0.086497 +Converged at iteration 32, L1 5.56963e-05, Linf 0.00279903, total time[s] 0.082839 +Converged at iteration 19, L1 9.75643e-05, Linf 0.00603414, total time[s] 0.050304 +Converged at iteration 23, L1 7.28887e-05, Linf 0.00522602, total time[s] 0.06222 +Converged at iteration 26, L1 9.3567e-05, Linf 0.00485362, total time[s] 0.066437 +Converged at iteration 23, L1 7.96259e-05, Linf 0.00450746, total time[s] 0.059579 +Converged at iteration 20, L1 9.19978e-05, Linf 0.00400665, total time[s] 0.05507 +Converged at iteration 23, L1 7.77614e-05, Linf 0.00287234, total time[s] 0.060934 +Converged at iteration 25, L1 8.45755e-05, Linf 0.00339684, total time[s] 0.064981 +Converged at iteration 27, L1 9.73903e-05, Linf 0.00385682, total time[s] 0.069508 +Converged at iteration 30, L1 6.25735e-05, Linf 0.00416844, total time[s] 0.077051 +Converged at iteration 28, L1 7.72548e-05, Linf 0.00426757, total time[s] 0.072499 +Converged at iteration 29, L1 8.96031e-05, Linf 0.00445287, total time[s] 0.075953 +Converged at iteration 29, L1 9.97149e-05, Linf 0.0027652, total time[s] 0.0743 +Converged at iteration 28, L1 8.82778e-05, Linf 0.00170895, total time[s] 0.071916 +Converged at iteration 32, L1 9.32805e-05, Linf 0.00788244, total time[s] 0.082903 +Converged at iteration 26, L1 7.74507e-05, Linf 0.00293429, total time[s] 0.070673 +Converged at iteration 25, L1 9.41619e-05, Linf 0.00279502, total time[s] 0.067672 +Converged at iteration 23, L1 7.28962e-05, Linf 0.00285583, total time[s] 0.061416 +Converged at iteration 39, L1 5.58826e-05, Linf 0.00757629, total time[s] 0.101523 +Converged at iteration 36, L1 6.35283e-05, Linf 0.00680845, total time[s] 0.094125 +Converged at iteration 24, L1 8.91355e-05, Linf 0.00297416, total time[s] 0.06292 +Converged at iteration 30, L1 9.27398e-05, Linf 0.00617748, total time[s] 0.07846 +Converged at iteration 25, L1 5.69053e-05, Linf 0.00494726, total time[s] 0.065363 +Converged at iteration 21, L1 8.42652e-05, Linf 0.00483112, total time[s] 0.058939 +Converged at iteration 19, L1 6.66023e-05, Linf 0.00586806, total time[s] 0.051327 +Converged at iteration 21, L1 3.82574e-05, Linf 0.0031226, total time[s] 0.05586 +Converged at iteration 23, L1 9.22882e-05, Linf 0.00393161, total time[s] 0.060254 +Converged at iteration 24, L1 5.57889e-05, Linf 0.0044144, total time[s] 0.06437 +Converged at iteration 20, L1 4.97305e-05, Linf 0.00495533, total time[s] 0.053727 +Converged at iteration 17, L1 5.44843e-05, Linf 0.00187184, total time[s] 0.046811 +Converged at iteration 32, L1 5.6058e-05, Linf 0.00277001, total time[s] 0.082252 +Converged at iteration 19, L1 9.76811e-05, Linf 0.00625651, total time[s] 0.051451 +Converged at iteration 23, L1 7.26614e-05, Linf 0.00533018, total time[s] 0.061914 +Converged at iteration 26, L1 9.35906e-05, Linf 0.00486305, total time[s] 0.067745 +Converged at iteration 23, L1 7.92491e-05, Linf 0.00458124, total time[s] 0.060534 +Converged at iteration 20, L1 9.17801e-05, Linf 0.00407419, total time[s] 0.053461 +Converged at iteration 23, L1 7.75982e-05, Linf 0.00287131, total time[s] 0.061299 +Converged at iteration 25, L1 8.47499e-05, Linf 0.00341591, total time[s] 0.065308 +Converged at iteration 27, L1 9.85682e-05, Linf 0.00392281, total time[s] 0.070526 +Converged at iteration 30, L1 6.18392e-05, Linf 0.00415843, total time[s] 0.077129 +Converged at iteration 28, L1 7.64496e-05, Linf 0.00424188, total time[s] 0.071974 +Converged at iteration 29, L1 8.97781e-05, Linf 0.00442224, total time[s] 0.074582 +Converged at iteration 29, L1 9.97813e-05, Linf 0.00276008, total time[s] 0.074812 +Converged at iteration 28, L1 8.64347e-05, Linf 0.00174896, total time[s] 0.072754 +Converged at iteration 32, L1 9.37124e-05, Linf 0.00783164, total time[s] 0.083374 +Converged at iteration 26, L1 7.88393e-05, Linf 0.00299205, total time[s] 0.068742 +Converged at iteration 25, L1 9.37591e-05, Linf 0.0027569, total time[s] 0.065259 +Converged at iteration 23, L1 7.33482e-05, Linf 0.00287263, total time[s] 0.060651 +Converged at iteration 39, L1 5.4789e-05, Linf 0.00763527, total time[s] 0.105579 +Converged at iteration 36, L1 6.24805e-05, Linf 0.00688724, total time[s] 0.092338 +Converged at iteration 24, L1 8.91356e-05, Linf 0.00301291, total time[s] 0.063037 +Converged at iteration 30, L1 9.20981e-05, Linf 0.00618829, total time[s] 0.077257 +Converged at iteration 25, L1 5.54272e-05, Linf 0.00489482, total time[s] 0.065712 +Converged at iteration 21, L1 8.50693e-05, Linf 0.00490639, total time[s] 0.054282 +Converged at iteration 19, L1 6.64325e-05, Linf 0.00598334, total time[s] 0.059902 +Converged at iteration 21, L1 3.85223e-05, Linf 0.00313056, total time[s] 0.061169 +Converged at iteration 23, L1 9.06733e-05, Linf 0.00388478, total time[s] 0.059658 +Converged at iteration 24, L1 5.49228e-05, Linf 0.00437682, total time[s] 0.061471 +Converged at iteration 20, L1 4.88613e-05, Linf 0.00491513, total time[s] 0.053834 +Converged at iteration 17, L1 5.42642e-05, Linf 0.00183071, total time[s] 0.046388 +Converged at iteration 32, L1 5.56147e-05, Linf 0.00281002, total time[s] 0.085462 +Converged at iteration 19, L1 9.76253e-05, Linf 0.00622334, total time[s] 0.049764 +Converged at iteration 23, L1 7.24864e-05, Linf 0.00520564, total time[s] 0.061889 +Converged at iteration 26, L1 9.351e-05, Linf 0.00483851, total time[s] 0.072308 +Converged at iteration 23, L1 7.97558e-05, Linf 0.00449589, total time[s] 0.060582 +Converged at iteration 20, L1 9.21299e-05, Linf 0.00399125, total time[s] 0.054483 +Converged at iteration 23, L1 7.78093e-05, Linf 0.00287268, total time[s] 0.061572 +Converged at iteration 25, L1 8.45385e-05, Linf 0.00339273, total time[s] 0.065182 +Converged at iteration 27, L1 9.71697e-05, Linf 0.00384446, total time[s] 0.07076 +Converged at iteration 30, L1 6.27713e-05, Linf 0.00415481, total time[s] 0.07869 +Converged at iteration 28, L1 7.7467e-05, Linf 0.0042497, total time[s] 0.072209 +Converged at iteration 29, L1 8.96786e-05, Linf 0.00445956, total time[s] 0.074906 +Converged at iteration 29, L1 9.97247e-05, Linf 0.002766, total time[s] 0.075028 +Converged at iteration 28, L1 8.86901e-05, Linf 0.00170006, total time[s] 0.076519 +Converged at iteration 32, L1 9.32439e-05, Linf 0.00789284, total time[s] 0.08318 +Converged at iteration 26, L1 7.71618e-05, Linf 0.00292281, total time[s] 0.069203 +Converged at iteration 25, L1 9.38185e-05, Linf 0.00280303, total time[s] 0.066605 +Converged at iteration 23, L1 7.28034e-05, Linf 0.00285055, total time[s] 0.060598 +Converged at iteration 39, L1 5.33911e-05, Linf 0.00770369, total time[s] 0.10335 +Converged at iteration 36, L1 6.16172e-05, Linf 0.00697772, total time[s] 0.097413 +Converged at iteration 24, L1 8.91031e-05, Linf 0.00305523, total time[s] 0.062405 +Converged at iteration 30, L1 9.12772e-05, Linf 0.00620768, total time[s] 0.082946 +Converged at iteration 24, L1 9.79802e-05, Linf 0.00591941, total time[s] 0.083924 +Converged at iteration 21, L1 8.69147e-05, Linf 0.00499568, total time[s] 0.055901 +Converged at iteration 19, L1 6.61316e-05, Linf 0.00612224, total time[s] 0.051514 +Converged at iteration 21, L1 3.8723e-05, Linf 0.00312165, total time[s] 0.05484 +Converged at iteration 23, L1 8.8654e-05, Linf 0.00384006, total time[s] 0.060056 +Converged at iteration 24, L1 5.30916e-05, Linf 0.00432952, total time[s] 0.060946 +Converged at iteration 20, L1 4.85111e-05, Linf 0.00486621, total time[s] 0.054111 +Converged at iteration 17, L1 5.40956e-05, Linf 0.00177833, total time[s] 0.045036 +Converged at iteration 32, L1 5.51652e-05, Linf 0.00288853, total time[s] 0.083144 +Converged at iteration 19, L1 9.7537e-05, Linf 0.00610091, total time[s] 0.050409 +Converged at iteration 23, L1 7.18325e-05, Linf 0.00547354, total time[s] 0.059132 +Converged at iteration 26, L1 9.24794e-05, Linf 0.00486213, total time[s] 0.066046 +Converged at iteration 23, L1 8.04459e-05, Linf 0.00438996, total time[s] 0.060383 +Converged at iteration 20, L1 9.26769e-05, Linf 0.00388668, total time[s] 0.052205 +Converged at iteration 23, L1 7.82546e-05, Linf 0.00287064, total time[s] 0.064948 +Converged at iteration 25, L1 8.45378e-05, Linf 0.00334981, total time[s] 0.065203 +Converged at iteration 27, L1 9.5605e-05, Linf 0.00376924, total time[s] 0.069418 +Converged at iteration 30, L1 6.39233e-05, Linf 0.00416206, total time[s] 0.076762 +Converged at iteration 28, L1 7.97474e-05, Linf 0.0042455, total time[s] 0.089783 +Converged at iteration 29, L1 9.03061e-05, Linf 0.00450589, total time[s] 0.07225 +Converged at iteration 29, L1 9.97852e-05, Linf 0.00276771, total time[s] 0.074014 +Converged at iteration 28, L1 9.18387e-05, Linf 0.00162664, total time[s] 0.071686 +Converged at iteration 32, L1 9.26327e-05, Linf 0.00796823, total time[s] 0.080089 +Converged at iteration 26, L1 7.51464e-05, Linf 0.00283936, total time[s] 0.065808 +Converged at iteration 25, L1 9.42214e-05, Linf 0.00285808, total time[s] 0.063524 +Converged at iteration 23, L1 7.22696e-05, Linf 0.00281622, total time[s] 0.058944 +Converged at iteration 39, L1 5.18869e-05, Linf 0.00778436, total time[s] 0.102389 +Converged at iteration 36, L1 6.07557e-05, Linf 0.00695276, total time[s] 0.100197 +Converged at iteration 24, L1 8.92232e-05, Linf 0.00312411, total time[s] 0.078538 +Converged at iteration 30, L1 9.40523e-05, Linf 0.00905288, total time[s] 0.077102 +Converged at iteration 24, L1 9.50206e-05, Linf 0.00586841, total time[s] 0.070427 +Converged at iteration 21, L1 8.80219e-05, Linf 0.00510119, total time[s] 0.056255 +Converged at iteration 19, L1 6.60737e-05, Linf 0.00628902, total time[s] 0.050163 +Converged at iteration 21, L1 3.91642e-05, Linf 0.00309331, total time[s] 0.055692 +Converged at iteration 23, L1 8.5986e-05, Linf 0.003795, total time[s] 0.064905 +Converged at iteration 23, L1 9.702e-05, Linf 0.00556833, total time[s] 0.060417 +Converged at iteration 20, L1 4.73695e-05, Linf 0.00480654, total time[s] 0.053836 +Converged at iteration 17, L1 5.39018e-05, Linf 0.00171147, total time[s] 0.046403 +Converged at iteration 32, L1 5.46333e-05, Linf 0.0029809, total time[s] 0.081368 +Converged at iteration 19, L1 9.74485e-05, Linf 0.00599196, total time[s] 0.049889 +Converged at iteration 23, L1 7.11839e-05, Linf 0.00491928, total time[s] 0.062938 +Converged at iteration 26, L1 9.21314e-05, Linf 0.00490219, total time[s] 0.068458 +Converged at iteration 23, L1 8.16824e-05, Linf 0.00432383, total time[s] 0.060395 +Converged at iteration 20, L1 9.33916e-05, Linf 0.00375712, total time[s] 0.053213 +Converged at iteration 23, L1 7.80932e-05, Linf 0.00287829, total time[s] 0.060153 +Converged at iteration 25, L1 8.387e-05, Linf 0.00331991, total time[s] 0.065666 +Converged at iteration 27, L1 9.36031e-05, Linf 0.00369937, total time[s] 0.069628 +Converged at iteration 30, L1 6.5511e-05, Linf 0.00421442, total time[s] 0.076488 +Converged at iteration 28, L1 7.98841e-05, Linf 0.00426894, total time[s] 0.071878 +Converged at iteration 29, L1 9.09686e-05, Linf 0.00454862, total time[s] 0.074058 +Converged at iteration 29, L1 9.98915e-05, Linf 0.00276574, total time[s] 0.075058 +Converged at iteration 28, L1 9.61479e-05, Linf 0.00167469, total time[s] 0.072053 +Converged at iteration 32, L1 9.19373e-05, Linf 0.00805991, total time[s] 0.081574 +Converged at iteration 26, L1 7.28545e-05, Linf 0.00273785, total time[s] 0.067809 +Converged at iteration 25, L1 9.47195e-05, Linf 0.00292423, total time[s] 0.065339 +Converged at iteration 23, L1 7.14866e-05, Linf 0.00278168, total time[s] 0.062914 +Converged at iteration 39, L1 4.98733e-05, Linf 0.00787773, total time[s] 0.102143 +Converged at iteration 36, L1 5.97152e-05, Linf 0.00719107, total time[s] 0.09246 +Converged at iteration 24, L1 8.92001e-05, Linf 0.00334368, total time[s] 0.062751 +Converged at iteration 30, L1 8.89145e-05, Linf 0.00622682, total time[s] 0.077266 +Converged at iteration 24, L1 9.20232e-05, Linf 0.00580432, total time[s] 0.063005 +Converged at iteration 21, L1 8.97341e-05, Linf 0.00522605, total time[s] 0.055829 +Converged at iteration 19, L1 6.59386e-05, Linf 0.00648981, total time[s] 0.051365 +Converged at iteration 21, L1 3.95028e-05, Linf 0.00305784, total time[s] 0.061702 +Converged at iteration 23, L1 8.35702e-05, Linf 0.00373858, total time[s] 0.060833 +Converged at iteration 23, L1 9.20994e-05, Linf 0.00550427, total time[s] 0.061374 +Converged at iteration 20, L1 4.68947e-05, Linf 0.00473381, total time[s] 0.053573 +Converged at iteration 17, L1 5.40401e-05, Linf 0.00162602, total time[s] 0.046499 +Converged at iteration 32, L1 5.39636e-05, Linf 0.00309224, total time[s] 0.082229 +Converged at iteration 19, L1 9.74498e-05, Linf 0.00614187, total time[s] 0.050614 +Converged at iteration 23, L1 7.07928e-05, Linf 0.00477779, total time[s] 0.061102 +Converged at iteration 26, L1 9.35068e-05, Linf 0.00495102, total time[s] 0.067483 +Converged at iteration 23, L1 8.33766e-05, Linf 0.00424522, total time[s] 0.060396 +Converged at iteration 20, L1 9.41359e-05, Linf 0.00360169, total time[s] 0.053213 +Converged at iteration 23, L1 7.84596e-05, Linf 0.00291521, total time[s] 0.06046 +Converged at iteration 25, L1 8.33329e-05, Linf 0.00329799, total time[s] 0.065394 +Converged at iteration 27, L1 9.12274e-05, Linf 0.00375454, total time[s] 0.071973 +Converged at iteration 30, L1 6.69545e-05, Linf 0.00432273, total time[s] 0.077069 +Converged at iteration 28, L1 8.09064e-05, Linf 0.00406534, total time[s] 0.072339 +Converged at iteration 29, L1 9.18237e-05, Linf 0.00461016, total time[s] 0.075524 +Converged at iteration 30, L1 5.81335e-05, Linf 0.00200901, total time[s] 0.077001 +Converged at iteration 29, L1 5.48384e-05, Linf 0.00111875, total time[s] 0.074552 +Converged at iteration 32, L1 9.11759e-05, Linf 0.00817158, total time[s] 0.081765 +Converged at iteration 26, L1 7.08909e-05, Linf 0.00261608, total time[s] 0.067412 +Converged at iteration 25, L1 9.52729e-05, Linf 0.00300082, total time[s] 0.065126 +Converged at iteration 23, L1 7.08228e-05, Linf 0.00276267, total time[s] 0.061872 +Converged at iteration 39, L1 5.08286e-05, Linf 0.00783195, total time[s] 0.144326 +Converged at iteration 36, L1 6.013e-05, Linf 0.00713564, total time[s] 0.093461 +Converged at iteration 24, L1 8.91804e-05, Linf 0.00325633, total time[s] 0.064645 +Converged at iteration 30, L1 8.95788e-05, Linf 0.0062255, total time[s] 0.076577 +Converged at iteration 24, L1 9.34774e-05, Linf 0.00583563, total time[s] 0.062655 +Converged at iteration 21, L1 8.89076e-05, Linf 0.00516403, total time[s] 0.05486 +Converged at iteration 19, L1 6.59817e-05, Linf 0.00638949, total time[s] 0.051801 +Converged at iteration 21, L1 3.92071e-05, Linf 0.00307113, total time[s] 0.056392 +Converged at iteration 23, L1 8.49395e-05, Linf 0.00376365, total time[s] 0.062154 +Converged at iteration 23, L1 9.45371e-05, Linf 0.00553665, total time[s] 0.060552 +Converged at iteration 20, L1 4.70993e-05, Linf 0.00484062, total time[s] 0.053515 +Converged at iteration 17, L1 5.38939e-05, Linf 0.00166939, total time[s] 0.044825 +Converged at iteration 32, L1 5.43061e-05, Linf 0.00303678, total time[s] 0.083899 +Converged at iteration 19, L1 9.7322e-05, Linf 0.00585819, total time[s] 0.051497 +Converged at iteration 23, L1 7.11442e-05, Linf 0.00529369, total time[s] 0.060579 +Converged at iteration 26, L1 9.27378e-05, Linf 0.00492583, total time[s] 0.067523 +Converged at iteration 23, L1 8.26142e-05, Linf 0.00428683, total time[s] 0.060668 +Converged at iteration 20, L1 9.38767e-05, Linf 0.00368032, total time[s] 0.053318 +Converged at iteration 23, L1 7.82505e-05, Linf 0.00291821, total time[s] 0.061072 +Converged at iteration 25, L1 8.36076e-05, Linf 0.0033178, total time[s] 0.06534 +Converged at iteration 27, L1 9.2408e-05, Linf 0.00366606, total time[s] 0.070561 +Converged at iteration 30, L1 6.63239e-05, Linf 0.00426024, total time[s] 0.07755 +Converged at iteration 28, L1 8.03977e-05, Linf 0.00420721, total time[s] 0.073868 +Converged at iteration 29, L1 9.1424e-05, Linf 0.0045776, total time[s] 0.074763 +Converged at iteration 30, L1 5.82465e-05, Linf 0.00201995, total time[s] 0.078047 +Converged at iteration 28, L1 9.91178e-05, Linf 0.00176932, total time[s] 0.07241 +Converged at iteration 32, L1 9.15498e-05, Linf 0.00811554, total time[s] 0.081408 +Converged at iteration 26, L1 7.15018e-05, Linf 0.00267581, total time[s] 0.067787 +Converged at iteration 25, L1 9.4994e-05, Linf 0.00296511, total time[s] 0.067371 +Converged at iteration 23, L1 7.12653e-05, Linf 0.0027649, total time[s] 0.061276 +Converged at iteration 39, L1 4.97836e-05, Linf 0.0078886, total time[s] 0.10356 +Converged at iteration 36, L1 6.00177e-05, Linf 0.0072019, total time[s] 0.093734 +Converged at iteration 24, L1 8.92328e-05, Linf 0.00335782, total time[s] 0.06305 +Converged at iteration 30, L1 8.87721e-05, Linf 0.00622781, total time[s] 0.078079 +Converged at iteration 24, L1 9.17422e-05, Linf 0.00579831, total time[s] 0.063953 +Converged at iteration 21, L1 9.03502e-05, Linf 0.00523866, total time[s] 0.05804 +Converged at iteration 19, L1 6.59435e-05, Linf 0.00651067, total time[s] 0.053081 +Converged at iteration 21, L1 3.95427e-05, Linf 0.00305945, total time[s] 0.060043 +Converged at iteration 23, L1 8.32193e-05, Linf 0.00373391, total time[s] 0.061263 +Converged at iteration 23, L1 9.15748e-05, Linf 0.00549752, total time[s] 0.060408 +Converged at iteration 20, L1 4.68149e-05, Linf 0.00472647, total time[s] 0.054805 +Converged at iteration 17, L1 5.40322e-05, Linf 0.0016171, total time[s] 0.046176 +Converged at iteration 32, L1 5.38516e-05, Linf 0.00310364, total time[s] 0.08182 +Converged at iteration 19, L1 9.74589e-05, Linf 0.00606865, total time[s] 0.051146 +Converged at iteration 23, L1 7.06356e-05, Linf 0.00480797, total time[s] 0.060011 +Converged at iteration 26, L1 9.36026e-05, Linf 0.00495634, total time[s] 0.071121 +Converged at iteration 23, L1 8.35706e-05, Linf 0.00423571, total time[s] 0.060011 +Converged at iteration 20, L1 9.42137e-05, Linf 0.00358687, total time[s] 0.063201 +Converged at iteration 23, L1 7.85359e-05, Linf 0.00291041, total time[s] 0.071034 +Converged at iteration 25, L1 8.33027e-05, Linf 0.00334529, total time[s] 0.067491 +Converged at iteration 27, L1 9.09599e-05, Linf 0.0036267, total time[s] 0.070711 +Converged at iteration 30, L1 6.70813e-05, Linf 0.00433861, total time[s] 0.077576 +Converged at iteration 28, L1 8.10429e-05, Linf 0.00403471, total time[s] 0.072626 +Converged at iteration 29, L1 9.19651e-05, Linf 0.00461785, total time[s] 0.078906 +Converged at iteration 30, L1 5.81132e-05, Linf 0.00200676, total time[s] 0.077421 +Converged at iteration 29, L1 5.5149e-05, Linf 0.00113156, total time[s] 0.076468 +Converged at iteration 32, L1 9.11157e-05, Linf 0.00818345, total time[s] 0.083236 +Converged at iteration 26, L1 7.00475e-05, Linf 0.00260442, total time[s] 0.069392 +Converged at iteration 25, L1 9.53417e-05, Linf 0.00300999, total time[s] 0.068798 +Converged at iteration 23, L1 7.07771e-05, Linf 0.00276421, total time[s] 0.061708 +Converged at iteration 39, L1 4.83119e-05, Linf 0.00795496, total time[s] 0.107867 +Converged at iteration 36, L1 5.90407e-05, Linf 0.00728013, total time[s] 0.097103 +Converged at iteration 24, L1 8.9139e-05, Linf 0.00377068, total time[s] 0.065098 +Converged at iteration 30, L1 8.77854e-05, Linf 0.00623041, total time[s] 0.079282 +Converged at iteration 24, L1 8.9679e-05, Linf 0.00575411, total time[s] 0.065301 +Converged at iteration 21, L1 9.1001e-05, Linf 0.00532735, total time[s] 0.058366 +Converged at iteration 19, L1 6.5922e-05, Linf 0.00666774, total time[s] 0.055181 +Converged at iteration 21, L1 3.98299e-05, Linf 0.00308934, total time[s] 0.057324 +Converged at iteration 23, L1 8.17401e-05, Linf 0.00370632, total time[s] 0.065928 +Converged at iteration 23, L1 8.85864e-05, Linf 0.00545649, total time[s] 0.062121 +Converged at iteration 20, L1 4.61448e-05, Linf 0.00467393, total time[s] 0.054613 +Converged at iteration 17, L1 5.44539e-05, Linf 0.00155197, total time[s] 0.04904 +Converged at iteration 32, L1 5.33979e-05, Linf 0.00318427, total time[s] 0.116168 +Converged at iteration 19, L1 9.73651e-05, Linf 0.00597121, total time[s] 0.054675 +Converged at iteration 23, L1 6.99194e-05, Linf 0.00465888, total time[s] 0.061496 +Converged at iteration 26, L1 9.29758e-05, Linf 0.0049784, total time[s] 0.075312 +Converged at iteration 23, L1 8.47615e-05, Linf 0.00417251, total time[s] 0.062908 +Converged at iteration 20, L1 9.45077e-05, Linf 0.00347407, total time[s] 0.055824 +Converged at iteration 23, L1 7.89156e-05, Linf 0.00288702, total time[s] 0.06277 +Converged at iteration 25, L1 8.28579e-05, Linf 0.00326514, total time[s] 0.066417 +Converged at iteration 27, L1 8.92098e-05, Linf 0.00358194, total time[s] 0.072038 +Converged at iteration 30, L1 6.81681e-05, Linf 0.00445148, total time[s] 0.078498 +Converged at iteration 28, L1 8.15213e-05, Linf 0.0039266, total time[s] 0.074868 +Converged at iteration 29, L1 9.25801e-05, Linf 0.00467225, total time[s] 0.076529 +Converged at iteration 30, L1 5.79072e-05, Linf 0.00198798, total time[s] 0.079713 +Converged at iteration 29, L1 5.75145e-05, Linf 0.00121572, total time[s] 0.076244 +Converged at iteration 32, L1 9.05978e-05, Linf 0.0082651, total time[s] 0.083697 +Converged at iteration 26, L1 6.82259e-05, Linf 0.00251753, total time[s] 0.06969 +Converged at iteration 25, L1 9.57903e-05, Linf 0.00306941, total time[s] 0.068392 +Converged at iteration 23, L1 7.04882e-05, Linf 0.00276669, total time[s] 0.062385 +Converged at iteration 38, L1 9.93544e-05, Linf 0.00987856, total time[s] 0.109871 +Converged at iteration 36, L1 5.81545e-05, Linf 0.00746247, total time[s] 0.091382 +Converged at iteration 24, L1 8.91436e-05, Linf 0.00392871, total time[s] 0.065404 +Converged at iteration 30, L1 8.65623e-05, Linf 0.00621451, total time[s] 0.079406 +Converged at iteration 24, L1 8.73681e-05, Linf 0.00570194, total time[s] 0.065035 +Converged at iteration 21, L1 9.22687e-05, Linf 0.0054319, total time[s] 0.058478 +Converged at iteration 19, L1 6.59977e-05, Linf 0.00695741, total time[s] 0.054177 +Converged at iteration 21, L1 4.02247e-05, Linf 0.00305432, total time[s] 0.05801 +Converged at iteration 23, L1 8.07492e-05, Linf 0.00367312, total time[s] 0.062584 +Converged at iteration 23, L1 8.44949e-05, Linf 0.00538703, total time[s] 0.06366 +Converged at iteration 20, L1 4.58773e-05, Linf 0.00455916, total time[s] 0.058572 +Converged at iteration 17, L1 5.44608e-05, Linf 0.00147056, total time[s] 0.046392 +Converged at iteration 32, L1 5.29447e-05, Linf 0.00328074, total time[s] 0.085605 +Converged at iteration 19, L1 9.76038e-05, Linf 0.00572841, total time[s] 0.052723 +Converged at iteration 23, L1 6.98292e-05, Linf 0.0045567, total time[s] 0.06649 +Converged at iteration 26, L1 9.12428e-05, Linf 0.0049884, total time[s] 0.068927 +Converged at iteration 23, L1 8.63353e-05, Linf 0.00408464, total time[s] 0.063215 +Converged at iteration 20, L1 9.51548e-05, Linf 0.00334381, total time[s] 0.054792 +Converged at iteration 23, L1 7.90067e-05, Linf 0.00289108, total time[s] 0.062423 +Converged at iteration 25, L1 8.2228e-05, Linf 0.00323511, total time[s] 0.066724 +Converged at iteration 27, L1 8.78393e-05, Linf 0.00473532, total time[s] 0.072397 +Converged at iteration 30, L1 6.92386e-05, Linf 0.00458587, total time[s] 0.079786 +Converged at iteration 28, L1 8.22251e-05, Linf 0.00379709, total time[s] 0.408768 +Converged at iteration 29, L1 9.34921e-05, Linf 0.00473939, total time[s] 0.099359 +Converged at iteration 30, L1 5.75912e-05, Linf 0.00195888, total time[s] 0.077201 +Converged at iteration 29, L1 6.0638e-05, Linf 0.00138393, total time[s] 0.075121 +Converged at iteration 32, L1 9.00205e-05, Linf 0.00836488, total time[s] 0.081745 +Converged at iteration 26, L1 6.60665e-05, Linf 0.00241583, total time[s] 0.069834 +Converged at iteration 25, L1 9.6319e-05, Linf 0.00313737, total time[s] 0.065417 +Converged at iteration 23, L1 7.02605e-05, Linf 0.00276444, total time[s] 0.061532 +Converged at iteration 39, L1 4.757e-05, Linf 0.00798604, total time[s] 0.097968 +Converged at iteration 36, L1 5.86176e-05, Linf 0.00732452, total time[s] 0.091384 +Converged at iteration 24, L1 8.91475e-05, Linf 0.00385082, total time[s] 0.062406 +Converged at iteration 30, L1 8.80327e-05, Linf 0.00622435, total time[s] 0.077597 +Converged at iteration 24, L1 8.85314e-05, Linf 0.00572786, total time[s] 0.063159 +Converged at iteration 21, L1 9.27676e-05, Linf 0.00537991, total time[s] 0.055853 +Converged at iteration 19, L1 6.59357e-05, Linf 0.00678554, total time[s] 0.050395 +Converged at iteration 21, L1 4.00343e-05, Linf 0.00306273, total time[s] 0.055326 +Converged at iteration 23, L1 8.10607e-05, Linf 0.00369264, total time[s] 0.061208 +Converged at iteration 23, L1 8.6535e-05, Linf 0.00541875, total time[s] 0.063633 +Converged at iteration 20, L1 4.54564e-05, Linf 0.00464093, total time[s] 0.052708 +Converged at iteration 17, L1 5.44061e-05, Linf 0.00151163, total time[s] 0.046158 +Converged at iteration 32, L1 5.31642e-05, Linf 0.00323268, total time[s] 0.084913 +Converged at iteration 19, L1 9.73184e-05, Linf 0.00585008, total time[s] 0.051083 +Converged at iteration 23, L1 6.9713e-05, Linf 0.00460677, total time[s] 0.06061 +Converged at iteration 26, L1 9.20308e-05, Linf 0.00499065, total time[s] 0.070498 +Converged at iteration 23, L1 8.55269e-05, Linf 0.00413754, total time[s] 0.060565 +Converged at iteration 20, L1 9.47759e-05, Linf 0.00339224, total time[s] 0.053308 +Converged at iteration 23, L1 7.88298e-05, Linf 0.00289239, total time[s] 0.060746 +Converged at iteration 25, L1 8.25757e-05, Linf 0.00325626, total time[s] 0.065241 +Converged at iteration 27, L1 8.8212e-05, Linf 0.00367763, total time[s] 0.069444 +Converged at iteration 30, L1 6.88432e-05, Linf 0.00452106, total time[s] 0.076224 +Converged at iteration 28, L1 8.18201e-05, Linf 0.00394271, total time[s] 0.074074 +Converged at iteration 29, L1 9.36159e-05, Linf 0.0047055, total time[s] 0.074857 +Converged at iteration 30, L1 5.78825e-05, Linf 0.00197407, total time[s] 0.076433 +Converged at iteration 29, L1 5.90601e-05, Linf 0.0012626, total time[s] 0.074695 +Converged at iteration 32, L1 9.02962e-05, Linf 0.00831476, total time[s] 0.082054 +Converged at iteration 26, L1 6.71699e-05, Linf 0.00246661, total time[s] 0.066806 +Converged at iteration 25, L1 9.6054e-05, Linf 0.00310333, total time[s] 0.066074 +Converged at iteration 23, L1 7.03365e-05, Linf 0.00276223, total time[s] 0.059556 +Converged at iteration 38, L1 9.91819e-05, Linf 0.00989197, total time[s] 0.099873 +Converged at iteration 36, L1 5.80475e-05, Linf 0.00747157, total time[s] 0.095253 +Converged at iteration 24, L1 8.9175e-05, Linf 0.00394283, total time[s] 0.062338 +Converged at iteration 30, L1 8.64301e-05, Linf 0.00621267, total time[s] 0.118675 +Converged at iteration 24, L1 8.72726e-05, Linf 0.00569737, total time[s] 0.067334 +Converged at iteration 21, L1 9.2505e-05, Linf 0.00544257, total time[s] 0.057308 +Converged at iteration 19, L1 6.60211e-05, Linf 0.00699767, total time[s] 0.052801 +Converged at iteration 21, L1 4.02668e-05, Linf 0.00305054, total time[s] 0.057054 +Converged at iteration 23, L1 8.06901e-05, Linf 0.00366931, total time[s] 0.064022 +Converged at iteration 23, L1 8.33868e-05, Linf 0.00535236, total time[s] 0.059755 +Converged at iteration 20, L1 4.5164e-05, Linf 0.0046727, total time[s] 0.052708 +Converged at iteration 17, L1 5.44859e-05, Linf 0.00146521, total time[s] 0.050881 +Converged at iteration 32, L1 5.28967e-05, Linf 0.00329062, total time[s] 0.080212 +Converged at iteration 19, L1 9.72663e-05, Linf 0.00570415, total time[s] 0.049015 +Converged at iteration 23, L1 6.94069e-05, Linf 0.00486105, total time[s] 0.059794 +Converged at iteration 26, L1 9.11489e-05, Linf 0.00501557, total time[s] 0.066796 +Converged at iteration 23, L1 8.65059e-05, Linf 0.00407812, total time[s] 0.059695 +Converged at iteration 20, L1 9.52424e-05, Linf 0.00331468, total time[s] 0.054377 +Converged at iteration 23, L1 7.8917e-05, Linf 0.00291435, total time[s] 0.061167 +Converged at iteration 25, L1 8.21752e-05, Linf 0.00323621, total time[s] 0.064399 +Converged at iteration 27, L1 8.6993e-05, Linf 0.00352406, total time[s] 0.068691 +Converged at iteration 30, L1 6.92955e-05, Linf 0.00462998, total time[s] 0.076282 +Converged at iteration 28, L1 8.23363e-05, Linf 0.00372625, total time[s] 0.071808 +Converged at iteration 29, L1 9.35473e-05, Linf 0.00474688, total time[s] 0.073447 +Converged at iteration 29, L1 9.99829e-05, Linf 0.00273902, total time[s] 0.074028 +Converged at iteration 29, L1 6.09426e-05, Linf 0.00140842, total time[s] 0.073945 +Converged at iteration 32, L1 8.99661e-05, Linf 0.00837505, total time[s] 0.080324 +Converged at iteration 26, L1 6.58547e-05, Linf 0.00240605, total time[s] 0.068591 +Converged at iteration 25, L1 9.63843e-05, Linf 0.00314934, total time[s] 0.070469 +Converged at iteration 23, L1 7.02491e-05, Linf 0.00276424, total time[s] 0.062127 +Converged at iteration 38, L1 9.91549e-05, Linf 0.00997146, total time[s] 0.10311 +Converged at iteration 36, L1 5.79386e-05, Linf 0.00743692, total time[s] 0.09729 +Converged at iteration 24, L1 8.91373e-05, Linf 0.0040603, total time[s] 0.061873 +Converged at iteration 30, L1 8.62043e-05, Linf 0.00620424, total time[s] 0.076352 +Converged at iteration 24, L1 8.54931e-05, Linf 0.00565986, total time[s] 0.06124 +Converged at iteration 21, L1 9.48628e-05, Linf 0.00551491, total time[s] 0.054593 +Converged at iteration 19, L1 6.62506e-05, Linf 0.00744303, total time[s] 0.049003 +Converged at iteration 21, L1 4.05384e-05, Linf 0.0030341, total time[s] 0.055084 +Converged at iteration 23, L1 7.89961e-05, Linf 0.00364648, total time[s] 0.059464 +Converged at iteration 23, L1 8.0294e-05, Linf 0.00533564, total time[s] 0.060129 +Converged at iteration 20, L1 4.54959e-05, Linf 0.00462408, total time[s] 0.053652 +Converged at iteration 17, L1 5.45861e-05, Linf 0.00140097, total time[s] 0.048361 +Converged at iteration 32, L1 5.31723e-05, Linf 0.00335885, total time[s] 0.07999 +Converged at iteration 19, L1 9.72622e-05, Linf 0.00554147, total time[s] 0.049869 +Converged at iteration 23, L1 6.90342e-05, Linf 0.00448095, total time[s] 0.061623 +Converged at iteration 26, L1 9.0792e-05, Linf 0.00505474, total time[s] 0.06583 +Converged at iteration 23, L1 8.77509e-05, Linf 0.00406534, total time[s] 0.062931 +Converged at iteration 20, L1 9.58728e-05, Linf 0.0032521, total time[s] 0.054822 +Converged at iteration 23, L1 7.89625e-05, Linf 0.0028943, total time[s] 0.059981 +Converged at iteration 25, L1 8.16165e-05, Linf 0.00321851, total time[s] 0.065359 +Converged at iteration 27, L1 8.57062e-05, Linf 0.00348762, total time[s] 0.070916 +Converged at iteration 30, L1 6.99094e-05, Linf 0.00470855, total time[s] 0.076774 +Converged at iteration 28, L1 8.29893e-05, Linf 0.00353821, total time[s] 0.073472 +Converged at iteration 29, L1 9.48331e-05, Linf 0.00485483, total time[s] 0.074899 +Converged at iteration 30, L1 5.75983e-05, Linf 0.00193541, total time[s] 0.076759 +Converged at iteration 29, L1 6.43765e-05, Linf 0.00170971, total time[s] 0.074031 +Converged at iteration 32, L1 8.99566e-05, Linf 0.00846045, total time[s] 0.082512 +Converged at iteration 26, L1 6.53242e-05, Linf 0.00233971, total time[s] 0.066942 +Converged at iteration 25, L1 9.67334e-05, Linf 0.00319192, total time[s] 0.06691 +Converged at iteration 23, L1 7.0793e-05, Linf 0.00276283, total time[s] 0.060879 +Converged at iteration 38, L1 9.72567e-05, Linf 0.0101074, total time[s] 0.099087 +Converged at iteration 36, L1 5.76866e-05, Linf 0.00749074, total time[s] 0.091831 +Converged at iteration 24, L1 8.92624e-05, Linf 0.00420367, total time[s] 0.062925 +Converged at iteration 30, L1 8.55022e-05, Linf 0.00621503, total time[s] 0.076275 +Converged at iteration 24, L1 8.363e-05, Linf 0.00561724, total time[s] 0.062893 +Converged at iteration 21, L1 9.7142e-05, Linf 0.00560685, total time[s] 0.056147 +Converged at iteration 19, L1 6.67759e-05, Linf 0.00810626, total time[s] 0.052084 +Converged at iteration 21, L1 4.07206e-05, Linf 0.00300673, total time[s] 0.056536 +Converged at iteration 23, L1 7.81007e-05, Linf 0.0036128, total time[s] 0.061021 +Converged at iteration 23, L1 7.67831e-05, Linf 0.00527786, total time[s] 0.065019 +Converged at iteration 20, L1 4.48776e-05, Linf 0.00449656, total time[s] 0.0542 +Converged at iteration 17, L1 5.48357e-05, Linf 0.00141751, total time[s] 0.048721 +Converged at iteration 32, L1 5.27651e-05, Linf 0.00344003, total time[s] 0.084666 +Converged at iteration 19, L1 9.71179e-05, Linf 0.00546168, total time[s] 0.052071 +Converged at iteration 23, L1 6.90801e-05, Linf 0.00441084, total time[s] 0.061192 +Converged at iteration 26, L1 9.12529e-05, Linf 0.00507559, total time[s] 0.075536 +Converged at iteration 23, L1 8.92769e-05, Linf 0.00395757, total time[s] 0.061395 +Converged at iteration 20, L1 9.65878e-05, Linf 0.00326218, total time[s] 0.05382 +Converged at iteration 23, L1 7.91488e-05, Linf 0.00289722, total time[s] 0.061563 +Converged at iteration 25, L1 8.0395e-05, Linf 0.00319811, total time[s] 0.064989 +Converged at iteration 27, L1 8.41923e-05, Linf 0.00344783, total time[s] 0.0698 +Converged at iteration 30, L1 7.08977e-05, Linf 0.00481994, total time[s] 0.076885 +Converged at iteration 28, L1 8.38762e-05, Linf 0.00335585, total time[s] 0.101859 +Converged at iteration 29, L1 9.51124e-05, Linf 0.00489529, total time[s] 0.079487 +Converged at iteration 30, L1 5.74264e-05, Linf 0.00191336, total time[s] 0.077849 +Converged at iteration 29, L1 6.65239e-05, Linf 0.00212542, total time[s] 0.075643 +Converged at iteration 32, L1 8.9175e-05, Linf 0.00853685, total time[s] 0.082402 +Converged at iteration 26, L1 6.23471e-05, Linf 0.00225878, total time[s] 0.068099 +Converged at iteration 25, L1 9.75768e-05, Linf 0.00325125, total time[s] 0.068635 +Converged at iteration 23, L1 7.03729e-05, Linf 0.00277875, total time[s] 0.064534 +Converged at iteration 38, L1 9.53256e-05, Linf 0.010219, total time[s] 0.101875 +Converged at iteration 36, L1 5.52234e-05, Linf 0.00757083, total time[s] 0.101247 +Converged at iteration 24, L1 8.93455e-05, Linf 0.00438409, total time[s] 0.063862 +Converged at iteration 30, L1 8.33412e-05, Linf 0.00624888, total time[s] 0.078808 +Converged at iteration 24, L1 8.13039e-05, Linf 0.00556542, total time[s] 0.064557 +Converged at iteration 21, L1 9.50986e-05, Linf 0.00570822, total time[s] 0.057332 +Converged at iteration 19, L1 6.72147e-05, Linf 0.00807857, total time[s] 0.053103 +Converged at iteration 21, L1 4.11204e-05, Linf 0.00307287, total time[s] 0.058572 +Converged at iteration 23, L1 7.69109e-05, Linf 0.00359146, total time[s] 0.064371 +Converged at iteration 23, L1 7.25617e-05, Linf 0.00520421, total time[s] 0.06106 +Converged at iteration 20, L1 4.36495e-05, Linf 0.0044254, total time[s] 0.05428 +Converged at iteration 17, L1 5.53095e-05, Linf 0.00145621, total time[s] 0.047164 +Converged at iteration 32, L1 5.17407e-05, Linf 0.00353993, total time[s] 0.084069 +Converged at iteration 19, L1 9.68166e-05, Linf 0.00539658, total time[s] 0.051624 +Converged at iteration 23, L1 6.77121e-05, Linf 0.00433115, total time[s] 0.068816 +Converged at iteration 26, L1 9.2186e-05, Linf 0.00512032, total time[s] 0.070362 +Converged at iteration 23, L1 9.07333e-05, Linf 0.00392532, total time[s] 0.062324 +Converged at iteration 20, L1 9.766e-05, Linf 0.00323518, total time[s] 0.071944 +Converged at iteration 23, L1 7.94162e-05, Linf 0.00290016, total time[s] 0.080513 +Converged at iteration 25, L1 8.02696e-05, Linf 0.00317932, total time[s] 0.0678 +Converged at iteration 27, L1 8.17667e-05, Linf 0.00340579, total time[s] 0.076449 +Converged at iteration 30, L1 7.21982e-05, Linf 0.00493523, total time[s] 0.090177 +Converged at iteration 28, L1 8.47861e-05, Linf 0.0032299, total time[s] 0.089468 +Converged at iteration 29, L1 9.68755e-05, Linf 0.00494142, total time[s] 0.073537 +Converged at iteration 30, L1 5.80102e-05, Linf 0.00188632, total time[s] 0.077528 +Converged at iteration 29, L1 7.08477e-05, Linf 0.00250796, total time[s] 0.083345 +Converged at iteration 32, L1 8.87092e-05, Linf 0.00864515, total time[s] 0.093003 +Converged at iteration 26, L1 6.01682e-05, Linf 0.00217381, total time[s] 0.068789 +Converged at iteration 25, L1 9.7738e-05, Linf 0.00331692, total time[s] 0.06617 +Converged at iteration 23, L1 7.04426e-05, Linf 0.00279407, total time[s] 0.063423 +Converged at iteration 38, L1 9.55627e-05, Linf 0.0103124, total time[s] 0.095705 +Converged at iteration 36, L1 5.57711e-05, Linf 0.00763857, total time[s] 0.093514 +Converged at iteration 24, L1 8.92452e-05, Linf 0.00429257, total time[s] 0.064788 +Converged at iteration 30, L1 8.42623e-05, Linf 0.00623548, total time[s] 0.07757 +Converged at iteration 24, L1 8.2636e-05, Linf 0.00559064, total time[s] 0.063039 +Converged at iteration 21, L1 9.45945e-05, Linf 0.00565675, total time[s] 0.056455 +Converged at iteration 19, L1 6.69752e-05, Linf 0.00824297, total time[s] 0.051755 +Converged at iteration 21, L1 4.09046e-05, Linf 0.00303994, total time[s] 0.056482 +Converged at iteration 23, L1 7.69473e-05, Linf 0.00360383, total time[s] 0.063696 +Converged at iteration 23, L1 7.48239e-05, Linf 0.00524065, total time[s] 0.064286 +Converged at iteration 20, L1 4.41227e-05, Linf 0.00446102, total time[s] 0.057706 +Converged at iteration 17, L1 5.5008e-05, Linf 0.00143722, total time[s] 0.049117 +Converged at iteration 32, L1 5.19939e-05, Linf 0.0034921, total time[s] 0.084363 +Converged at iteration 19, L1 9.68823e-05, Linf 0.00542821, total time[s] 0.053025 +Converged at iteration 23, L1 6.83559e-05, Linf 0.00436866, total time[s] 0.062639 +Converged at iteration 26, L1 9.15956e-05, Linf 0.00507392, total time[s] 0.070008 +Converged at iteration 23, L1 8.9978e-05, Linf 0.00394056, total time[s] 0.062248 +Converged at iteration 20, L1 9.7099e-05, Linf 0.00325043, total time[s] 0.05574 +Converged at iteration 23, L1 7.92717e-05, Linf 0.00289878, total time[s] 0.062794 +Converged at iteration 25, L1 8.02361e-05, Linf 0.00318691, total time[s] 0.067469 +Converged at iteration 27, L1 8.28244e-05, Linf 0.00343233, total time[s] 0.075458 +Converged at iteration 30, L1 7.16259e-05, Linf 0.00487703, total time[s] 0.078131 +Converged at iteration 28, L1 8.42904e-05, Linf 0.00331225, total time[s] 0.073682 +Converged at iteration 29, L1 9.54993e-05, Linf 0.00494769, total time[s] 0.075102 +Converged at iteration 29, L1 9.99079e-05, Linf 0.00271694, total time[s] 0.080116 +Converged at iteration 29, L1 6.82548e-05, Linf 0.00232992, total time[s] 0.075611 +Converged at iteration 32, L1 8.89204e-05, Linf 0.0085907, total time[s] 0.082635 +Converged at iteration 26, L1 6.12306e-05, Linf 0.00221478, total time[s] 0.069028 +Converged at iteration 25, L1 9.74651e-05, Linf 0.00327479, total time[s] 0.065695 +Converged at iteration 23, L1 7.05542e-05, Linf 0.00278636, total time[s] 0.062674 +Converged at iteration 38, L1 9.45246e-05, Linf 0.0102438, total time[s] 0.098276 +Converged at iteration 36, L1 5.51028e-05, Linf 0.00768375, total time[s] 0.094868 +Converged at iteration 24, L1 8.94043e-05, Linf 0.00440086, total time[s] 0.062047 +Converged at iteration 30, L1 8.32426e-05, Linf 0.00625123, total time[s] 0.076641 +Converged at iteration 24, L1 8.12297e-05, Linf 0.00556055, total time[s] 0.062358 +Converged at iteration 21, L1 9.56428e-05, Linf 0.00571839, total time[s] 0.05584 +Converged at iteration 19, L1 6.74182e-05, Linf 0.00814539, total time[s] 0.05133 +Converged at iteration 21, L1 4.11834e-05, Linf 0.00308028, total time[s] 0.055135 +Converged at iteration 23, L1 7.713e-05, Linf 0.00358749, total time[s] 0.06145 +Converged at iteration 23, L1 7.25678e-05, Linf 0.00519535, total time[s] 0.06104 +Converged at iteration 20, L1 4.36602e-05, Linf 0.00441829, total time[s] 0.053295 +Converged at iteration 17, L1 5.53147e-05, Linf 0.00145925, total time[s] 0.076019 +Converged at iteration 32, L1 5.17155e-05, Linf 0.00354968, total time[s] 0.084754 +Converged at iteration 19, L1 9.71819e-05, Linf 0.0053909, total time[s] 0.052721 +Converged at iteration 23, L1 6.77795e-05, Linf 0.00432674, total time[s] 0.062701 +Converged at iteration 26, L1 9.24424e-05, Linf 0.00512918, total time[s] 0.068493 +Converged at iteration 23, L1 9.13356e-05, Linf 0.00392298, total time[s] 0.061171 +Converged at iteration 20, L1 9.79181e-05, Linf 0.00323248, total time[s] 0.055412 +Converged at iteration 23, L1 7.95716e-05, Linf 0.0029006, total time[s] 0.062321 +Converged at iteration 25, L1 8.00544e-05, Linf 0.0031761, total time[s] 0.067471 +Converged at iteration 27, L1 8.16115e-05, Linf 0.00340159, total time[s] 0.071058 +Converged at iteration 30, L1 7.23403e-05, Linf 0.00495283, total time[s] 0.078614 +Converged at iteration 28, L1 8.48751e-05, Linf 0.00321939, total time[s] 0.073543 +Converged at iteration 29, L1 9.60477e-05, Linf 0.00495297, total time[s] 0.079457 +Converged at iteration 29, L1 9.99198e-05, Linf 0.00270765, total time[s] 0.075846 +Converged at iteration 29, L1 7.05675e-05, Linf 0.00251126, total time[s] 0.074937 +Converged at iteration 32, L1 8.86487e-05, Linf 0.008656, total time[s] 0.083663 +Converged at iteration 26, L1 5.9945e-05, Linf 0.00216603, total time[s] 0.068731 +Converged at iteration 25, L1 9.77887e-05, Linf 0.0033263, total time[s] 0.06638 +Converged at iteration 23, L1 7.04699e-05, Linf 0.00279598, total time[s] 0.061909 +Converged at iteration 38, L1 9.3248e-05, Linf 0.0103329, total time[s] 0.097549 +Converged at iteration 36, L1 5.42774e-05, Linf 0.00762965, total time[s] 0.100748 +Converged at iteration 24, L1 8.93863e-05, Linf 0.00453613, total time[s] 0.064066 +Converged at iteration 30, L1 8.21611e-05, Linf 0.00625408, total time[s] 0.07789 +Converged at iteration 24, L1 7.95835e-05, Linf 0.00552525, total time[s] 0.063706 +Converged at iteration 21, L1 9.58542e-05, Linf 0.00579153, total time[s] 0.056817 +Converged at iteration 19, L1 6.76751e-05, Linf 0.00755084, total time[s] 0.052148 +Converged at iteration 21, L1 4.14373e-05, Linf 0.00312922, total time[s] 0.056098 +Converged at iteration 23, L1 7.56784e-05, Linf 0.00359024, total time[s] 0.061904 +Converged at iteration 23, L1 6.92023e-05, Linf 0.00514015, total time[s] 0.06104 +Converged at iteration 19, L1 9.97781e-05, Linf 0.00607841, total time[s] 0.051863 +Converged at iteration 17, L1 5.57284e-05, Linf 0.0014852, total time[s] 0.047401 +Converged at iteration 32, L1 5.13489e-05, Linf 0.00361764, total time[s] 0.081998 +Converged at iteration 19, L1 9.67005e-05, Linf 0.00534668, total time[s] 0.05666 +Converged at iteration 23, L1 6.73163e-05, Linf 0.00427293, total time[s] 0.062574 +Converged at iteration 26, L1 9.37225e-05, Linf 0.0051417, total time[s] 0.069429 +Converged at iteration 23, L1 9.20707e-05, Linf 0.00391467, total time[s] 0.062316 +Converged at iteration 20, L1 9.8714e-05, Linf 0.00320927, total time[s] 0.054076 +Converged at iteration 23, L1 7.96961e-05, Linf 0.00290229, total time[s] 0.061372 +Converged at iteration 25, L1 7.96578e-05, Linf 0.00316272, total time[s] 0.065737 +Converged at iteration 27, L1 8.02122e-05, Linf 0.00337595, total time[s] 0.070874 +Converged at iteration 30, L1 7.33493e-05, Linf 0.00503315, total time[s] 0.076809 +Converged at iteration 28, L1 8.54383e-05, Linf 0.00316632, total time[s] 0.07262 +Converged at iteration 29, L1 9.67005e-05, Linf 0.00506723, total time[s] 0.07496 +Converged at iteration 29, L1 9.98844e-05, Linf 0.0026981, total time[s] 0.074745 +Converged at iteration 29, L1 7.34779e-05, Linf 0.00265299, total time[s] 0.074856 +Converged at iteration 32, L1 8.83559e-05, Linf 0.00873536, total time[s] 0.082441 +Converged at iteration 25, L1 9.86236e-05, Linf 0.00335959, total time[s] 0.066125 +Converged at iteration 25, L1 9.89641e-05, Linf 0.00337834, total time[s] 0.065553 +Converged at iteration 23, L1 7.07875e-05, Linf 0.00280894, total time[s] 0.061958 +Converged at iteration 38, L1 9.16716e-05, Linf 0.0104457, total time[s] 0.096928 +Converged at iteration 36, L1 5.39123e-05, Linf 0.00769002, total time[s] 0.093062 +Converged at iteration 24, L1 8.94736e-05, Linf 0.00470057, total time[s] 0.06269 +Converged at iteration 30, L1 8.09758e-05, Linf 0.00618485, total time[s] 0.075984 +Converged at iteration 24, L1 7.79731e-05, Linf 0.00548426, total time[s] 0.064096 +Converged at iteration 21, L1 9.66005e-05, Linf 0.00587711, total time[s] 0.055263 +Converged at iteration 19, L1 6.79667e-05, Linf 0.00663074, total time[s] 0.051856 +Converged at iteration 21, L1 4.19084e-05, Linf 0.00318942, total time[s] 0.056593 +Converged at iteration 23, L1 7.50759e-05, Linf 0.00356827, total time[s] 0.061672 +Converged at iteration 23, L1 6.57245e-05, Linf 0.00507035, total time[s] 0.060804 +Converged at iteration 19, L1 9.90293e-05, Linf 0.00602851, total time[s] 0.053797 +Converged at iteration 17, L1 5.64829e-05, Linf 0.00151865, total time[s] 0.046823 +Converged at iteration 32, L1 5.10501e-05, Linf 0.00369811, total time[s] 0.081893 +Converged at iteration 19, L1 9.66553e-05, Linf 0.00529375, total time[s] 0.051822 +Converged at iteration 23, L1 6.66858e-05, Linf 0.00422102, total time[s] 0.061232 +Converged at iteration 26, L1 9.48713e-05, Linf 0.00511045, total time[s] 0.068165 +Converged at iteration 23, L1 9.35394e-05, Linf 0.00390147, total time[s] 0.060552 +Converged at iteration 20, L1 9.95576e-05, Linf 0.00317753, total time[s] 0.053422 +Converged at iteration 23, L1 7.9938e-05, Linf 0.00290398, total time[s] 0.060312 +Converged at iteration 25, L1 7.90286e-05, Linf 0.00314706, total time[s] 0.065125 +Converged at iteration 27, L1 7.85464e-05, Linf 0.00334223, total time[s] 0.070205 +Converged at iteration 30, L1 7.47614e-05, Linf 0.00516439, total time[s] 0.077271 +Converged at iteration 28, L1 8.61683e-05, Linf 0.00310592, total time[s] 0.073244 +Converged at iteration 29, L1 9.76859e-05, Linf 0.00513575, total time[s] 0.079487 +Converged at iteration 30, L1 5.70899e-05, Linf 0.00182577, total time[s] 0.076839 +Converged at iteration 29, L1 7.71546e-05, Linf 0.00273077, total time[s] 0.074976 +Converged at iteration 32, L1 8.79462e-05, Linf 0.00883066, total time[s] 0.082245 +Converged at iteration 25, L1 9.59909e-05, Linf 0.00335634, total time[s] 0.065814 +Converged at iteration 25, L1 9.85893e-05, Linf 0.00343799, total time[s] 0.0655 +Converged at iteration 23, L1 7.08374e-05, Linf 0.00282731, total time[s] 0.061393 +Converged at iteration 38, L1 8.98043e-05, Linf 0.0105816, total time[s] 0.097118 +Converged at iteration 36, L1 5.23181e-05, Linf 0.00775855, total time[s] 0.092606 +Converged at iteration 24, L1 8.98151e-05, Linf 0.00490355, total time[s] 0.06341 +Converged at iteration 30, L1 7.9625e-05, Linf 0.00608947, total time[s] 0.109433 +Converged at iteration 24, L1 7.60578e-05, Linf 0.00543708, total time[s] 0.065676 +Converged at iteration 21, L1 9.74563e-05, Linf 0.00597704, total time[s] 0.058308 +Converged at iteration 19, L1 6.82731e-05, Linf 0.00639494, total time[s] 0.051188 +Converged at iteration 21, L1 4.25164e-05, Linf 0.00326381, total time[s] 0.058581 +Converged at iteration 23, L1 7.39712e-05, Linf 0.00354715, total time[s] 0.061398 +Converged at iteration 23, L1 6.17166e-05, Linf 0.00498263, total time[s] 0.062933 +Converged at iteration 19, L1 9.84126e-05, Linf 0.00596731, total time[s] 0.051017 +Converged at iteration 17, L1 5.77344e-05, Linf 0.0015588, total time[s] 0.047348 +Converged at iteration 32, L1 5.06638e-05, Linf 0.00379543, total time[s] 0.085503 +Converged at iteration 19, L1 9.6653e-05, Linf 0.00540782, total time[s] 0.052919 +Converged at iteration 23, L1 6.64021e-05, Linf 0.00416468, total time[s] 0.06729 +Converged at iteration 26, L1 9.52352e-05, Linf 0.00763424, total time[s] 0.068204 +Converged at iteration 23, L1 9.59256e-05, Linf 0.00386929, total time[s] 0.060473 +Converged at iteration 21, L1 5.11197e-05, Linf 0.00222679, total time[s] 0.056851 +Converged at iteration 23, L1 8.00057e-05, Linf 0.00290515, total time[s] 0.060471 +Converged at iteration 25, L1 7.90592e-05, Linf 0.00312725, total time[s] 0.069296 +Converged at iteration 27, L1 7.69186e-05, Linf 0.003305, total time[s] 0.084023 +Converged at iteration 30, L1 7.72323e-05, Linf 0.00533148, total time[s] 0.078871 +Converged at iteration 28, L1 8.75308e-05, Linf 0.00326249, total time[s] 0.071526 +Converged at iteration 29, L1 9.85586e-05, Linf 0.0052039, total time[s] 0.073316 +Converged at iteration 29, L1 9.99344e-05, Linf 0.00269156, total time[s] 0.07377 +Converged at iteration 29, L1 8.23198e-05, Linf 0.00271929, total time[s] 0.074203 +Converged at iteration 32, L1 8.75687e-05, Linf 0.00894865, total time[s] 0.080687 +Converged at iteration 25, L1 9.29757e-05, Linf 0.00334308, total time[s] 0.064737 +Converged at iteration 25, L1 9.98658e-05, Linf 0.00350978, total time[s] 0.066394 +Converged at iteration 23, L1 7.12509e-05, Linf 0.00285122, total time[s] 0.060711 +Converged at iteration 38, L1 9.07942e-05, Linf 0.0105281, total time[s] 0.096928 +Converged at iteration 36, L1 5.30253e-05, Linf 0.00772196, total time[s] 0.09536 +Converged at iteration 24, L1 8.96712e-05, Linf 0.0048004, total time[s] 0.063069 +Converged at iteration 30, L1 8.09274e-05, Linf 0.00613456, total time[s] 0.078223 +Converged at iteration 24, L1 7.75758e-05, Linf 0.00545917, total time[s] 0.062876 +Converged at iteration 21, L1 9.71431e-05, Linf 0.00592774, total time[s] 0.058153 +Converged at iteration 19, L1 6.81277e-05, Linf 0.00650387, total time[s] 0.052938 +Converged at iteration 21, L1 4.213e-05, Linf 0.00322635, total time[s] 0.057357 +Converged at iteration 23, L1 7.45875e-05, Linf 0.00358554, total time[s] 0.060412 +Converged at iteration 23, L1 6.42829e-05, Linf 0.00502596, total time[s] 0.060499 +Converged at iteration 19, L1 9.93732e-05, Linf 0.00599809, total time[s] 0.051944 +Converged at iteration 17, L1 5.71992e-05, Linf 0.00153885, total time[s] 0.047526 +Converged at iteration 32, L1 5.09093e-05, Linf 0.00374701, total time[s] 0.081182 +Converged at iteration 19, L1 9.67552e-05, Linf 0.00528981, total time[s] 0.050231 +Converged at iteration 23, L1 6.67923e-05, Linf 0.00419413, total time[s] 0.063099 +Converged at iteration 26, L1 9.44694e-05, Linf 0.00510242, total time[s] 0.068569 +Converged at iteration 23, L1 9.5508e-05, Linf 0.00388016, total time[s] 0.06011 +Converged at iteration 21, L1 5.12116e-05, Linf 0.00194317, total time[s] 0.055429 +Converged at iteration 23, L1 8.0348e-05, Linf 0.00290461, total time[s] 0.059999 +Converged at iteration 25, L1 7.93843e-05, Linf 0.00313893, total time[s] 0.064538 +Converged at iteration 27, L1 7.78172e-05, Linf 0.00332499, total time[s] 0.069959 +Converged at iteration 30, L1 7.69662e-05, Linf 0.00525818, total time[s] 0.076806 +Converged at iteration 28, L1 8.68371e-05, Linf 0.00317304, total time[s] 0.072098 +Converged at iteration 29, L1 9.80697e-05, Linf 0.00517083, total time[s] 0.074339 +Converged at iteration 29, L1 9.99047e-05, Linf 0.0026911, total time[s] 0.075884 +Converged at iteration 29, L1 7.97346e-05, Linf 0.00273324, total time[s] 0.073928 +Converged at iteration 32, L1 8.7943e-05, Linf 0.00888982, total time[s] 0.082062 +Converged at iteration 25, L1 9.52592e-05, Linf 0.003351, total time[s] 0.064935 +Converged at iteration 25, L1 9.88002e-05, Linf 0.00347288, total time[s] 0.065219 +Converged at iteration 23, L1 7.1043e-05, Linf 0.00283915, total time[s] 0.060513 +Converged at iteration 38, L1 8.97741e-05, Linf 0.0110896, total time[s] 0.098654 +Converged at iteration 36, L1 5.22493e-05, Linf 0.00769047, total time[s] 0.095429 +Converged at iteration 24, L1 8.98274e-05, Linf 0.00492134, total time[s] 0.062554 +Converged at iteration 30, L1 8.05161e-05, Linf 0.00608081, total time[s] 0.076717 +Converged at iteration 24, L1 7.65875e-05, Linf 0.00543251, total time[s] 0.062581 +Converged at iteration 21, L1 9.94115e-05, Linf 0.00598744, total time[s] 0.056288 +Converged at iteration 19, L1 6.83006e-05, Linf 0.00634706, total time[s] 0.051614 +Converged at iteration 21, L1 4.25849e-05, Linf 0.00327224, total time[s] 0.056138 +Converged at iteration 23, L1 7.36932e-05, Linf 0.00355578, total time[s] 0.062595 +Converged at iteration 23, L1 6.17737e-05, Linf 0.0049733, total time[s] 0.06201 +Converged at iteration 19, L1 9.84017e-05, Linf 0.00605006, total time[s] 0.051433 +Converged at iteration 17, L1 5.79751e-05, Linf 0.00156304, total time[s] 0.046273 +Converged at iteration 32, L1 5.0624e-05, Linf 0.00380534, total time[s] 0.080658 +Converged at iteration 19, L1 9.66474e-05, Linf 0.0054311, total time[s] 0.051281 +Converged at iteration 23, L1 6.63271e-05, Linf 0.00415987, total time[s] 0.060355 +Converged at iteration 26, L1 9.45322e-05, Linf 0.00513186, total time[s] 0.067525 +Converged at iteration 23, L1 9.55328e-05, Linf 0.00386572, total time[s] 0.061756 +Converged at iteration 21, L1 5.12292e-05, Linf 0.00228235, total time[s] 0.055583 +Converged at iteration 23, L1 8.04324e-05, Linf 0.00290501, total time[s] 0.060871 +Converged at iteration 25, L1 7.93212e-05, Linf 0.00312617, total time[s] 0.067291 +Converged at iteration 27, L1 7.65217e-05, Linf 0.00330044, total time[s] 0.071058 +Converged at iteration 30, L1 7.73644e-05, Linf 0.00535094, total time[s] 0.077 +Converged at iteration 28, L1 8.78767e-05, Linf 0.00322822, total time[s] 0.071751 +Converged at iteration 29, L1 9.87336e-05, Linf 0.00521068, total time[s] 0.073164 +Converged at iteration 30, L1 5.75137e-05, Linf 0.00178225, total time[s] 0.075325 +Converged at iteration 29, L1 8.28564e-05, Linf 0.00267253, total time[s] 0.074002 +Converged at iteration 32, L1 8.76394e-05, Linf 0.00898646, total time[s] 0.100989 +Converged at iteration 25, L1 9.34751e-05, Linf 0.00333254, total time[s] 0.067672 +Converged at iteration 25, L1 9.91746e-05, Linf 0.00352529, total time[s] 0.064005 +Converged at iteration 23, L1 7.12414e-05, Linf 0.00285399, total time[s] 0.061599 +Converged at iteration 38, L1 8.84632e-05, Linf 0.0106907, total time[s] 0.09817 +Converged at iteration 36, L1 5.21237e-05, Linf 0.00781445, total time[s] 0.091775 +Converged at iteration 24, L1 8.98022e-05, Linf 0.005075, total time[s] 0.062822 +Converged at iteration 30, L1 8.02159e-05, Linf 0.00612387, total time[s] 0.076541 +Converged at iteration 24, L1 7.53313e-05, Linf 0.00539986, total time[s] 0.0625 +Converged at iteration 21, L1 9.95458e-05, Linf 0.00605683, total time[s] 0.055881 +Converged at iteration 19, L1 6.87435e-05, Linf 0.00622679, total time[s] 0.051328 +Converged at iteration 21, L1 4.30666e-05, Linf 0.0033288, total time[s] 0.055062 +Converged at iteration 23, L1 7.36263e-05, Linf 0.00356204, total time[s] 0.061123 +Converged at iteration 23, L1 5.91596e-05, Linf 0.00490497, total time[s] 0.060608 +Converged at iteration 19, L1 9.78271e-05, Linf 0.00591621, total time[s] 0.051421 +Converged at iteration 17, L1 5.87716e-05, Linf 0.00159157, total time[s] 0.046535 +Converged at iteration 32, L1 5.03267e-05, Linf 0.0038751, total time[s] 0.081696 +Converged at iteration 19, L1 9.65214e-05, Linf 0.00548011, total time[s] 0.053124 +Converged at iteration 23, L1 6.56321e-05, Linf 0.00412121, total time[s] 0.063119 +Converged at iteration 26, L1 9.53821e-05, Linf 0.0051924, total time[s] 0.072261 +Converged at iteration 23, L1 9.70439e-05, Linf 0.00385239, total time[s] 0.060174 +Converged at iteration 21, L1 5.12354e-05, Linf 0.0021992, total time[s] 0.056044 +Converged at iteration 23, L1 8.09518e-05, Linf 0.00290536, total time[s] 0.060835 +Converged at iteration 25, L1 7.78488e-05, Linf 0.00310809, total time[s] 0.065213 +Converged at iteration 27, L1 7.51792e-05, Linf 0.00327225, total time[s] 0.070223 +Converged at iteration 30, L1 7.83316e-05, Linf 0.00544195, total time[s] 0.077221 +Converged at iteration 28, L1 8.81279e-05, Linf 0.00314739, total time[s] 0.071585 +Converged at iteration 29, L1 9.95345e-05, Linf 0.00525753, total time[s] 0.07399 +Converged at iteration 29, L1 9.98642e-05, Linf 0.00269063, total time[s] 0.073771 +Converged at iteration 29, L1 8.68725e-05, Linf 0.00273817, total time[s] 0.074404 +Converged at iteration 32, L1 8.72871e-05, Linf 0.00904671, total time[s] 0.080747 +Converged at iteration 25, L1 9.10189e-05, Linf 0.00331629, total time[s] 0.065271 +Converged at iteration 25, L1 9.98435e-05, Linf 0.00356669, total time[s] 0.065154 +Converged at iteration 23, L1 7.15625e-05, Linf 0.00287281, total time[s] 0.063011 +Converged at iteration 38, L1 8.66431e-05, Linf 0.0108076, total time[s] 0.097978 +Converged at iteration 36, L1 5.07749e-05, Linf 0.00787614, total time[s] 0.090689 +Converged at iteration 24, L1 8.9675e-05, Linf 0.00526217, total time[s] 0.063024 +Converged at iteration 30, L1 7.99524e-05, Linf 0.00981686, total time[s] 0.075952 +Converged at iteration 24, L1 7.35959e-05, Linf 0.00536462, total time[s] 0.078203 +Converged at iteration 22, L1 5.49997e-05, Linf 0.00452163, total time[s] 0.057802 +Converged at iteration 19, L1 6.92933e-05, Linf 0.00642198, total time[s] 0.051244 +Converged at iteration 21, L1 4.35901e-05, Linf 0.00339771, total time[s] 0.057169 +Converged at iteration 23, L1 7.2677e-05, Linf 0.00354728, total time[s] 0.059547 +Converged at iteration 23, L1 5.59289e-05, Linf 0.00481841, total time[s] 0.060872 +Converged at iteration 19, L1 9.76015e-05, Linf 0.0058613, total time[s] 0.054783 +Converged at iteration 17, L1 5.98059e-05, Linf 0.00162505, total time[s] 0.047656 +Converged at iteration 32, L1 5.0108e-05, Linf 0.00395905, total time[s] 0.080379 +Converged at iteration 19, L1 9.65388e-05, Linf 0.0058257, total time[s] 0.050876 +Converged at iteration 23, L1 6.49735e-05, Linf 0.00407836, total time[s] 0.059677 +Converged at iteration 26, L1 9.62629e-05, Linf 0.00526369, total time[s] 0.068364 +Converged at iteration 23, L1 9.8896e-05, Linf 0.00382426, total time[s] 0.06057 +Converged at iteration 21, L1 5.19294e-05, Linf 0.00207567, total time[s] 0.05548 +Converged at iteration 23, L1 8.09801e-05, Linf 0.00290549, total time[s] 0.060833 +Converged at iteration 25, L1 7.89522e-05, Linf 0.00408451, total time[s] 0.065481 +Converged at iteration 27, L1 7.34756e-05, Linf 0.00323828, total time[s] 0.069804 +Converged at iteration 30, L1 7.98474e-05, Linf 0.00553749, total time[s] 0.077731 +Converged at iteration 28, L1 8.94646e-05, Linf 0.00320327, total time[s] 0.075003 +Converged at iteration 30, L1 5.69345e-05, Linf 0.00407532, total time[s] 0.087179 +Converged at iteration 29, L1 9.98435e-05, Linf 0.00267774, total time[s] 0.079216 +Converged at iteration 29, L1 9.1396e-05, Linf 0.00284912, total time[s] 0.074173 +Converged at iteration 32, L1 8.71886e-05, Linf 0.00915121, total time[s] 0.080816 +Converged at iteration 25, L1 8.86504e-05, Linf 0.00329233, total time[s] 0.064682 +Converged at iteration 25, L1 9.98308e-05, Linf 0.00366077, total time[s] 0.065399 +Converged at iteration 23, L1 7.22549e-05, Linf 0.00289851, total time[s] 0.060856 +Converged at iteration 38, L1 8.76199e-05, Linf 0.0107449, total time[s] 0.095481 +Converged at iteration 36, L1 5.1415e-05, Linf 0.00784372, total time[s] 0.091765 +Converged at iteration 24, L1 8.98791e-05, Linf 0.00516754, total time[s] 0.063083 +Converged at iteration 30, L1 8.0018e-05, Linf 0.00611637, total time[s] 0.077791 +Converged at iteration 24, L1 7.41234e-05, Linf 0.00538062, total time[s] 0.06368 +Converged at iteration 21, L1 9.85472e-05, Linf 0.00609768, total time[s] 0.055728 +Converged at iteration 19, L1 6.92526e-05, Linf 0.00631768, total time[s] 0.054438 +Converged at iteration 21, L1 4.33429e-05, Linf 0.0033635, total time[s] 0.056996 +Converged at iteration 23, L1 7.3408e-05, Linf 0.00352597, total time[s] 0.063703 +Converged at iteration 23, L1 5.73294e-05, Linf 0.0048622, total time[s] 0.058987 +Converged at iteration 19, L1 9.77068e-05, Linf 0.0058889, total time[s] 0.049393 +Converged at iteration 17, L1 5.94073e-05, Linf 0.00160848, total time[s] 0.046701 +Converged at iteration 32, L1 5.02028e-05, Linf 0.00391719, total time[s] 0.116193 +Converged at iteration 19, L1 9.64572e-05, Linf 0.00571385, total time[s] 0.052959 +Converged at iteration 23, L1 6.52268e-05, Linf 0.00409962, total time[s] 0.061395 +Converged at iteration 26, L1 9.59332e-05, Linf 0.00522536, total time[s] 0.069407 +Converged at iteration 23, L1 9.79687e-05, Linf 0.00384104, total time[s] 0.060436 +Converged at iteration 21, L1 5.15961e-05, Linf 0.00210447, total time[s] 0.055957 +Converged at iteration 23, L1 8.05078e-05, Linf 0.00290562, total time[s] 0.060552 +Converged at iteration 25, L1 7.809e-05, Linf 0.00309246, total time[s] 0.065489 +Converged at iteration 27, L1 7.41694e-05, Linf 0.0032552, total time[s] 0.07591 +Converged at iteration 30, L1 7.89385e-05, Linf 0.00548437, total time[s] 0.076568 +Converged at iteration 28, L1 8.85837e-05, Linf 0.0031941, total time[s] 0.072132 +Converged at iteration 30, L1 5.60281e-05, Linf 0.00405844, total time[s] 0.077466 +Converged at iteration 29, L1 9.99126e-05, Linf 0.00268566, total time[s] 0.074951 +Converged at iteration 29, L1 8.89217e-05, Linf 0.00278795, total time[s] 0.074291 +Converged at iteration 32, L1 8.712e-05, Linf 0.00910609, total time[s] 0.0809 +Converged at iteration 25, L1 9.03322e-05, Linf 0.003307, total time[s] 0.065414 +Converged at iteration 25, L1 9.97817e-05, Linf 0.00359854, total time[s] 0.064726 +Converged at iteration 23, L1 7.17747e-05, Linf 0.00288516, total time[s] 0.059995 +Converged at iteration 38, L1 8.6383e-05, Linf 0.0108273, total time[s] 0.099639 +Converged at iteration 36, L1 5.07839e-05, Linf 0.00780556, total time[s] 0.093691 +Converged at iteration 24, L1 8.97412e-05, Linf 0.0052801, total time[s] 0.063351 +Converged at iteration 30, L1 7.73819e-05, Linf 0.00610721, total time[s] 0.077175 +Converged at iteration 24, L1 7.32858e-05, Linf 0.00535886, total time[s] 0.06268 +Converged at iteration 22, L1 5.47523e-05, Linf 0.0045302, total time[s] 0.05897 +Converged at iteration 19, L1 6.9335e-05, Linf 0.00645522, total time[s] 0.052244 +Converged at iteration 21, L1 4.36223e-05, Linf 0.00340463, total time[s] 0.056809 +Converged at iteration 23, L1 7.27069e-05, Linf 0.00355058, total time[s] 0.060634 +Converged at iteration 23, L1 5.61301e-05, Linf 0.00480927, total time[s] 0.066554 +Converged at iteration 19, L1 9.76844e-05, Linf 0.00585582, total time[s] 0.051076 +Converged at iteration 17, L1 5.99478e-05, Linf 0.00162882, total time[s] 0.046647 +Converged at iteration 32, L1 4.99867e-05, Linf 0.00396763, total time[s] 0.080954 +Converged at iteration 19, L1 9.63908e-05, Linf 0.00584912, total time[s] 0.051411 +Converged at iteration 23, L1 6.48163e-05, Linf 0.00407775, total time[s] 0.060288 +Converged at iteration 27, L1 5.30764e-05, Linf 0.00285803, total time[s] 0.070943 +Converged at iteration 23, L1 9.90552e-05, Linf 0.00382426, total time[s] 0.060268 +Converged at iteration 21, L1 5.1851e-05, Linf 0.00209191, total time[s] 0.059486 +Converged at iteration 23, L1 8.08918e-05, Linf 0.00290545, total time[s] 0.060274 +Converged at iteration 25, L1 7.77074e-05, Linf 0.00307986, total time[s] 0.066035 +Converged at iteration 27, L1 7.36101e-05, Linf 0.0032359, total time[s] 0.069926 +Converged at iteration 30, L1 8.00181e-05, Linf 0.00554256, total time[s] 0.077345 +Converged at iteration 28, L1 8.95516e-05, Linf 0.00320333, total time[s] 0.07241 +Converged at iteration 30, L1 5.62612e-05, Linf 0.00407883, total time[s] 0.075099 +Converged at iteration 29, L1 9.99266e-05, Linf 0.00267595, total time[s] 0.073807 +Converged at iteration 29, L1 9.19541e-05, Linf 0.00286632, total time[s] 0.07407 +Converged at iteration 32, L1 8.69334e-05, Linf 0.0091614, total time[s] 0.081701 +Converged at iteration 25, L1 8.789e-05, Linf 0.00328882, total time[s] 0.066064 +Converged at iteration 26, L1 5.91036e-05, Linf 0.00254432, total time[s] 0.067487 +Converged at iteration 23, L1 7.20782e-05, Linf 0.00290128, total time[s] 0.060564 +Converged at iteration 38, L1 8.51813e-05, Linf 0.0109163, total time[s] 0.09882 +Converged at iteration 36, L1 5.00437e-05, Linf 0.00792298, total time[s] 0.090965 +Converged at iteration 24, L1 8.9792e-05, Linf 0.00541639, total time[s] 0.062458 +Converged at iteration 30, L1 7.67478e-05, Linf 0.00609602, total time[s] 0.077506 +Converged at iteration 24, L1 7.24916e-05, Linf 0.00533364, total time[s] 0.06326 +Converged at iteration 22, L1 5.42602e-05, Linf 0.00456808, total time[s] 0.058278 +Converged at iteration 19, L1 6.99873e-05, Linf 0.0065839, total time[s] 0.050892 +Converged at iteration 21, L1 4.39208e-05, Linf 0.00345353, total time[s] 0.055886 +Converged at iteration 23, L1 7.19212e-05, Linf 0.00353475, total time[s] 0.060715 +Converged at iteration 23, L1 5.34602e-05, Linf 0.00474365, total time[s] 0.064112 +Converged at iteration 19, L1 9.72545e-05, Linf 0.00581562, total time[s] 0.051506 +Converged at iteration 17, L1 6.07243e-05, Linf 0.00165288, total time[s] 0.045928 +Converged at iteration 32, L1 4.98793e-05, Linf 0.00402748, total time[s] 0.082227 +Converged at iteration 19, L1 9.69199e-05, Linf 0.00600959, total time[s] 0.05118 +Converged at iteration 23, L1 6.44282e-05, Linf 0.00404798, total time[s] 0.067239 +Converged at iteration 26, L1 9.5687e-05, Linf 0.00532268, total time[s] 0.067349 +Converged at iteration 24, L1 5.20333e-05, Linf 0.00182118, total time[s] 0.063523 +Converged at iteration 21, L1 5.28302e-05, Linf 0.00368877, total time[s] 0.056229 +Converged at iteration 23, L1 8.14039e-05, Linf 0.00290482, total time[s] 0.062788 +Converged at iteration 25, L1 7.74108e-05, Linf 0.00305714, total time[s] 0.065431 +Converged at iteration 27, L1 7.24096e-05, Linf 0.00320911, total time[s] 0.069751 +Converged at iteration 30, L1 8.09354e-05, Linf 0.00561097, total time[s] 0.07759 +Converged at iteration 28, L1 9.00759e-05, Linf 0.00320036, total time[s] 0.072972 +Converged at iteration 30, L1 5.65334e-05, Linf 0.004108, total time[s] 0.07645 +Converged at iteration 29, L1 9.99561e-05, Linf 0.00266073, total time[s] 0.075599 +Converged at iteration 29, L1 9.55963e-05, Linf 0.00299442, total time[s] 0.074296 +Converged at iteration 32, L1 8.67103e-05, Linf 0.00923762, total time[s] 0.083075 +Converged at iteration 25, L1 8.6068e-05, Linf 0.00325992, total time[s] 0.065441 +Converged at iteration 26, L1 5.86304e-05, Linf 0.00256201, total time[s] 0.067874 +Converged at iteration 23, L1 7.23908e-05, Linf 0.0029223, total time[s] 0.060445 +Converged at iteration 38, L1 8.37522e-05, Linf 0.0109995, total time[s] 0.0977 +Converged at iteration 36, L1 4.94115e-05, Linf 0.0079658, total time[s] 0.107035 +Converged at iteration 24, L1 8.98382e-05, Linf 0.0055806, total time[s] 0.062926 +Converged at iteration 30, L1 7.54644e-05, Linf 0.00608224, total time[s] 0.076503 +Converged at iteration 24, L1 7.1418e-05, Linf 0.00530266, total time[s] 0.061999 +Converged at iteration 21, L1 9.95968e-05, Linf 0.00629893, total time[s] 0.056095 +Converged at iteration 19, L1 7.04355e-05, Linf 0.00672241, total time[s] 0.053341 +Converged at iteration 21, L1 4.44032e-05, Linf 0.00351136, total time[s] 0.055006 +Converged at iteration 23, L1 7.08594e-05, Linf 0.00351269, total time[s] 0.060431 +Converged at iteration 23, L1 5.17105e-05, Linf 0.00466137, total time[s] 0.061234 +Converged at iteration 19, L1 9.66451e-05, Linf 0.00576669, total time[s] 0.051398 +Converged at iteration 17, L1 6.15897e-05, Linf 0.0016819, total time[s] 0.047197 +Converged at iteration 32, L1 4.96636e-05, Linf 0.00409721, total time[s] 0.080956 +Converged at iteration 19, L1 9.64304e-05, Linf 0.00620787, total time[s] 0.050776 +Converged at iteration 23, L1 6.41847e-05, Linf 0.00402958, total time[s] 0.061948 +Converged at iteration 26, L1 9.3216e-05, Linf 0.00538777, total time[s] 0.070105 +Converged at iteration 24, L1 5.24906e-05, Linf 0.00187708, total time[s] 0.062886 +Converged at iteration 21, L1 5.25954e-05, Linf 0.00207054, total time[s] 0.055594 +Converged at iteration 23, L1 8.12063e-05, Linf 0.00290436, total time[s] 0.060557 +Converged at iteration 25, L1 7.76876e-05, Linf 0.00303266, total time[s] 0.065766 +Converged at iteration 27, L1 7.10802e-05, Linf 0.00317515, total time[s] 0.0699 +Converged at iteration 30, L1 8.22465e-05, Linf 0.00568381, total time[s] 0.076791 +Converged at iteration 28, L1 9.07106e-05, Linf 0.00315153, total time[s] 0.072976 +Converged at iteration 30, L1 5.731e-05, Linf 0.00415552, total time[s] 0.076786 +Converged at iteration 29, L1 9.99914e-05, Linf 0.00264116, total time[s] 0.073858 +Converged at iteration 30, L1 4.55717e-05, Linf 0.0019385, total time[s] 0.076402 +Converged at iteration 32, L1 8.64544e-05, Linf 0.00932991, total time[s] 0.08092 +Converged at iteration 25, L1 8.4e-05, Linf 0.00321843, total time[s] 0.064629 +Converged at iteration 26, L1 5.90048e-05, Linf 0.00258219, total time[s] 0.067487 +Converged at iteration 23, L1 7.30487e-05, Linf 0.00295063, total time[s] 0.060051 +Converged at iteration 38, L1 8.25117e-05, Linf 0.0111144, total time[s] 0.096927 +Converged at iteration 36, L1 4.83351e-05, Linf 0.00803343, total time[s] 0.09123 +Converged at iteration 24, L1 8.98793e-05, Linf 0.00577799, total time[s] 0.06412 +Converged at iteration 30, L1 7.54814e-05, Linf 0.00606527, total time[s] 0.076465 +Converged at iteration 24, L1 6.99631e-05, Linf 0.00526887, total time[s] 0.06212 +Converged at iteration 22, L1 5.62098e-05, Linf 0.00466269, total time[s] 0.059083 +Converged at iteration 19, L1 7.13545e-05, Linf 0.00690055, total time[s] 0.05426 +Converged at iteration 21, L1 4.48952e-05, Linf 0.00357627, total time[s] 0.058198 +Converged at iteration 23, L1 7.06141e-05, Linf 0.00350826, total time[s] 0.07043 +Converged at iteration 22, L1 9.99457e-05, Linf 0.00608824, total time[s] 0.058119 +Converged at iteration 19, L1 9.57989e-05, Linf 0.00572843, total time[s] 0.050732 +Converged at iteration 17, L1 6.26166e-05, Linf 0.00171631, total time[s] 0.046354 +Converged at iteration 32, L1 4.94372e-05, Linf 0.00417866, total time[s] 0.0789 +Converged at iteration 19, L1 9.63141e-05, Linf 0.00630299, total time[s] 0.05197 +Converged at iteration 23, L1 6.34994e-05, Linf 0.00401399, total time[s] 0.060325 +Converged at iteration 26, L1 9.22616e-05, Linf 0.00546379, total time[s] 0.066978 +Converged at iteration 24, L1 5.32509e-05, Linf 0.00194318, total time[s] 0.063804 +Converged at iteration 21, L1 5.26612e-05, Linf 0.00208315, total time[s] 0.057015 +Converged at iteration 23, L1 8.15556e-05, Linf 0.00290261, total time[s] 0.063547 +Converged at iteration 25, L1 7.59535e-05, Linf 0.00300755, total time[s] 0.068909 +Converged at iteration 27, L1 6.91158e-05, Linf 0.00313235, total time[s] 0.069392 +Converged at iteration 30, L1 8.42071e-05, Linf 0.00579713, total time[s] 0.076366 +Converged at iteration 28, L1 9.16962e-05, Linf 0.00315235, total time[s] 0.072921 +Converged at iteration 30, L1 5.72362e-05, Linf 0.0042269, total time[s] 0.07585 +Converged at iteration 29, L1 9.99656e-05, Linf 0.00261815, total time[s] 0.073727 +Converged at iteration 30, L1 4.81014e-05, Linf 0.00209499, total time[s] 0.076366 +Converged at iteration 32, L1 8.6403e-05, Linf 0.00932366, total time[s] 0.08076 +Converged at iteration 25, L1 8.12695e-05, Linf 0.0032015, total time[s] 0.064691 +Converged at iteration 26, L1 5.87553e-05, Linf 0.00260817, total time[s] 0.06831 +Converged at iteration 23, L1 7.44062e-05, Linf 0.00298887, total time[s] 0.060269 +Converged at iteration 38, L1 8.27552e-05, Linf 0.0106591, total time[s] 0.094899 +Converged at iteration 36, L1 4.90036e-05, Linf 0.00811489, total time[s] 0.09211 +Converged at iteration 24, L1 8.98188e-05, Linf 0.00562476, total time[s] 0.062234 +Converged at iteration 30, L1 7.49277e-05, Linf 0.00607436, total time[s] 0.076384 +Converged at iteration 24, L1 7.03471e-05, Linf 0.0052835, total time[s] 0.063165 +Converged at iteration 22, L1 5.48582e-05, Linf 0.00463775, total time[s] 0.06098 +Converged at iteration 19, L1 7.08619e-05, Linf 0.00687022, total time[s] 0.052716 +Converged at iteration 21, L1 4.46604e-05, Linf 0.00354098, total time[s] 0.057158 +Converged at iteration 23, L1 7.06516e-05, Linf 0.00351787, total time[s] 0.062225 +Converged at iteration 23, L1 4.91647e-05, Linf 0.00464325, total time[s] 0.060948 +Converged at iteration 19, L1 9.62864e-05, Linf 0.00575771, total time[s] 0.052289 +Converged at iteration 17, L1 6.21556e-05, Linf 0.00169912, total time[s] 0.052886 +Converged at iteration 32, L1 4.96259e-05, Linf 0.00411037, total time[s] 0.081407 +Converged at iteration 19, L1 9.62459e-05, Linf 0.00622225, total time[s] 0.051356 +Converged at iteration 23, L1 6.37347e-05, Linf 0.00401922, total time[s] 0.062124 +Converged at iteration 26, L1 9.22088e-05, Linf 0.00542537, total time[s] 0.071296 +Converged at iteration 24, L1 5.28025e-05, Linf 0.00191005, total time[s] 0.066052 +Converged at iteration 21, L1 5.25242e-05, Linf 0.00204394, total time[s] 0.061149 +Converged at iteration 23, L1 8.13291e-05, Linf 0.00290327, total time[s] 0.062963 +Converged at iteration 25, L1 7.62139e-05, Linf 0.00301826, total time[s] 0.066457 +Converged at iteration 27, L1 6.99461e-05, Linf 0.0031542, total time[s] 0.088011 +Converged at iteration 30, L1 8.32041e-05, Linf 0.00574511, total time[s] 0.081303 +Converged at iteration 28, L1 9.11682e-05, Linf 0.00315422, total time[s] 0.077301 +Converged at iteration 30, L1 5.69414e-05, Linf 0.00421383, total time[s] 0.079344 +Converged at iteration 30, L1 5.63707e-05, Linf 0.00166756, total time[s] 0.077263 +Converged at iteration 30, L1 4.76413e-05, Linf 0.00202295, total time[s] 0.075918 +Converged at iteration 32, L1 8.63928e-05, Linf 0.00953689, total time[s] 0.080511 +Converged at iteration 25, L1 8.28502e-05, Linf 0.00318938, total time[s] 0.064376 +Converged at iteration 26, L1 5.90893e-05, Linf 0.0025959, total time[s] 0.066798 +Converged at iteration 23, L1 7.38051e-05, Linf 0.00296943, total time[s] 0.061062 +Converged at iteration 38, L1 8.17813e-05, Linf 0.0109985, total time[s] 0.09959 +Converged at iteration 36, L1 4.88215e-05, Linf 0.00816181, total time[s] 0.091587 +Converged at iteration 24, L1 8.98143e-05, Linf 0.00579803, total time[s] 0.062045 +Converged at iteration 30, L1 7.46171e-05, Linf 0.00618003, total time[s] 0.076448 +Converged at iteration 24, L1 6.96851e-05, Linf 0.00526353, total time[s] 0.063985 +Converged at iteration 22, L1 5.40713e-05, Linf 0.00466717, total time[s] 0.057624 +Converged at iteration 19, L1 7.14473e-05, Linf 0.00691793, total time[s] 0.050913 +Converged at iteration 21, L1 4.50703e-05, Linf 0.00357903, total time[s] 0.055802 +Converged at iteration 23, L1 7.06973e-05, Linf 0.00350436, total time[s] 0.060209 +Converged at iteration 22, L1 9.91283e-05, Linf 0.00608818, total time[s] 0.057424 +Converged at iteration 19, L1 9.5609e-05, Linf 0.00561399, total time[s] 0.051599 +Converged at iteration 17, L1 6.27836e-05, Linf 0.00171951, total time[s] 0.04655 +Converged at iteration 32, L1 4.94163e-05, Linf 0.00418514, total time[s] 0.082155 +Converged at iteration 19, L1 9.67933e-05, Linf 0.00628153, total time[s] 0.05067 +Converged at iteration 23, L1 6.36333e-05, Linf 0.00418226, total time[s] 0.059918 +Converged at iteration 26, L1 9.22741e-05, Linf 0.0054696, total time[s] 0.067262 +Converged at iteration 24, L1 5.33602e-05, Linf 0.00194988, total time[s] 0.063482 +Converged at iteration 21, L1 5.26896e-05, Linf 0.00209933, total time[s] 0.058457 +Converged at iteration 23, L1 8.18505e-05, Linf 0.00290644, total time[s] 0.070339 +Converged at iteration 25, L1 7.63668e-05, Linf 0.00301025, total time[s] 0.070421 +Converged at iteration 27, L1 6.9202e-05, Linf 0.00312861, total time[s] 0.067703 +Converged at iteration 30, L1 8.44222e-05, Linf 0.00580447, total time[s] 0.074119 +Converged at iteration 28, L1 9.19138e-05, Linf 0.00319629, total time[s] 0.07019 +Converged at iteration 30, L1 5.72401e-05, Linf 0.00423473, total time[s] 0.074294 +Converged at iteration 30, L1 5.61209e-05, Linf 0.00165552, total time[s] 0.076836 +Converged at iteration 30, L1 4.81931e-05, Linf 0.00210265, total time[s] 0.076144 +Converged at iteration 32, L1 8.62568e-05, Linf 0.00948812, total time[s] 0.07926 +Converged at iteration 25, L1 8.20277e-05, Linf 0.00318321, total time[s] 0.062552 +Converged at iteration 26, L1 5.90542e-05, Linf 0.00261043, total time[s] 0.065954 +Converged at iteration 23, L1 7.3744e-05, Linf 0.00299316, total time[s] 0.058314 +Converged at iteration 38, L1 8.05859e-05, Linf 0.0112116, total time[s] 0.103366 +Converged at iteration 36, L1 4.74747e-05, Linf 0.00800886, total time[s] 0.091083 +Converged at iteration 24, L1 9.01266e-05, Linf 0.00588987, total time[s] 0.060447 +Converged at iteration 30, L1 7.52905e-05, Linf 0.00627942, total time[s] 0.073782 +Converged at iteration 24, L1 6.90011e-05, Linf 0.00524235, total time[s] 0.06102 +Converged at iteration 22, L1 5.46067e-05, Linf 0.0047026, total time[s] 0.05568 +Converged at iteration 19, L1 7.21755e-05, Linf 0.00709223, total time[s] 0.04966 +Converged at iteration 21, L1 4.55296e-05, Linf 0.00363304, total time[s] 0.054828 +Converged at iteration 23, L1 7.05093e-05, Linf 0.00347554, total time[s] 0.059025 +Converged at iteration 22, L1 9.70844e-05, Linf 0.00605287, total time[s] 0.056682 +Converged at iteration 19, L1 9.5308e-05, Linf 0.00558931, total time[s] 0.050378 +Converged at iteration 17, L1 6.35148e-05, Linf 0.00174481, total time[s] 0.044933 +Converged at iteration 32, L1 4.94959e-05, Linf 0.0042449, total time[s] 0.078597 +Converged at iteration 19, L1 9.67419e-05, Linf 0.00614092, total time[s] 0.049209 +Converged at iteration 23, L1 6.33515e-05, Linf 0.00405226, total time[s] 0.058526 +Converged at iteration 26, L1 9.26574e-05, Linf 0.0055215, total time[s] 0.068831 +Converged at iteration 24, L1 5.42526e-05, Linf 0.00199782, total time[s] 0.060674 +Converged at iteration 21, L1 5.28873e-05, Linf 0.00205251, total time[s] 0.054712 +Converged at iteration 23, L1 8.17679e-05, Linf 0.00290078, total time[s] 0.059141 +Converged at iteration 25, L1 7.58436e-05, Linf 0.00299197, total time[s] 0.064061 +Converged at iteration 27, L1 6.77635e-05, Linf 0.00309676, total time[s] 0.068138 +Converged at iteration 30, L1 8.58897e-05, Linf 0.00594264, total time[s] 0.074571 +Converged at iteration 28, L1 9.28276e-05, Linf 0.00325841, total time[s] 0.069618 +Converged at iteration 30, L1 5.76414e-05, Linf 0.00429178, total time[s] 0.074294 +Converged at iteration 30, L1 5.59402e-05, Linf 0.00163443, total time[s] 0.073807 +Converged at iteration 30, L1 4.98534e-05, Linf 0.0021553, total time[s] 0.074079 +Converged at iteration 32, L1 8.59975e-05, Linf 0.00941141, total time[s] 0.078388 +Converged at iteration 25, L1 7.98908e-05, Linf 0.00310371, total time[s] 0.063339 +Converged at iteration 26, L1 5.89999e-05, Linf 0.0026469, total time[s] 0.065633 +Converged at iteration 23, L1 7.43451e-05, Linf 0.0030231, total time[s] 0.058528 +Converged at iteration 38, L1 7.91519e-05, Linf 0.0114916, total time[s] 0.091899 +Converged at iteration 36, L1 4.68276e-05, Linf 0.0082558, total time[s] 0.089143 +Converged at iteration 24, L1 9.04694e-05, Linf 0.00610054, total time[s] 0.061051 +Converged at iteration 30, L1 7.32314e-05, Linf 0.00648334, total time[s] 0.074152 +Converged at iteration 24, L1 6.88638e-05, Linf 0.00521586, total time[s] 0.060391 +Converged at iteration 22, L1 5.56581e-05, Linf 0.00473935, total time[s] 0.056067 +Converged at iteration 19, L1 7.33368e-05, Linf 0.00722931, total time[s] 0.04897 +Converged at iteration 21, L1 4.57826e-05, Linf 0.00367908, total time[s] 0.056026 +Converged at iteration 23, L1 7.0205e-05, Linf 0.00348918, total time[s] 0.072817 +Converged at iteration 22, L1 9.26201e-05, Linf 0.005928, total time[s] 0.058934 +Converged at iteration 19, L1 9.57423e-05, Linf 0.00562971, total time[s] 0.050682 +Converged at iteration 17, L1 6.43306e-05, Linf 0.00177447, total time[s] 0.046177 +Converged at iteration 32, L1 4.91598e-05, Linf 0.00431428, total time[s] 0.080085 +Converged at iteration 19, L1 9.63958e-05, Linf 0.00597449, total time[s] 0.050618 +Converged at iteration 23, L1 6.26108e-05, Linf 0.00399528, total time[s] 0.059236 +Converged at iteration 26, L1 9.26004e-05, Linf 0.00559181, total time[s] 0.065925 +Converged at iteration 24, L1 5.51158e-05, Linf 0.00206036, total time[s] 0.062004 +Converged at iteration 21, L1 5.42514e-05, Linf 0.00205947, total time[s] 0.055056 +Converged at iteration 23, L1 8.19298e-05, Linf 0.00289789, total time[s] 0.060421 +Converged at iteration 25, L1 7.57687e-05, Linf 0.00297734, total time[s] 0.064686 +Converged at iteration 27, L1 6.69435e-05, Linf 0.00305908, total time[s] 0.068592 +Converged at iteration 30, L1 8.72623e-05, Linf 0.00599172, total time[s] 0.076478 +Converged at iteration 28, L1 9.34493e-05, Linf 0.00322118, total time[s] 0.071675 +Converged at iteration 30, L1 5.78457e-05, Linf 0.00435866, total time[s] 0.076705 +Converged at iteration 30, L1 5.56844e-05, Linf 0.00160385, total time[s] 0.077266 +Converged at iteration 30, L1 5.19974e-05, Linf 0.00223524, total time[s] 0.076819 +Converged at iteration 32, L1 8.58876e-05, Linf 0.00963474, total time[s] 0.081674 +Converged at iteration 25, L1 7.80091e-05, Linf 0.00303248, total time[s] 0.071233 +Converged at iteration 26, L1 5.84234e-05, Linf 0.00264908, total time[s] 0.068574 +Converged at iteration 23, L1 7.50318e-05, Linf 0.00305984, total time[s] 0.061518 +Converged at iteration 38, L1 7.71501e-05, Linf 0.0114232, total time[s] 0.098012 +Converged at iteration 36, L1 4.56447e-05, Linf 0.00818489, total time[s] 0.091577 +Converged at iteration 24, L1 9.01783e-05, Linf 0.00631553, total time[s] 0.063852 +Converged at iteration 30, L1 7.3571e-05, Linf 0.00637269, total time[s] 0.07817 +Converged at iteration 24, L1 6.70453e-05, Linf 0.00518596, total time[s] 0.075293 +Converged at iteration 22, L1 5.34885e-05, Linf 0.00478575, total time[s] 0.057515 +Converged at iteration 19, L1 7.42456e-05, Linf 0.00732612, total time[s] 0.051058 +Converged at iteration 21, L1 4.68275e-05, Linf 0.00376889, total time[s] 0.058303 +Converged at iteration 23, L1 6.98822e-05, Linf 0.00346537, total time[s] 0.061524 +Converged at iteration 22, L1 8.90419e-05, Linf 0.00579096, total time[s] 0.059812 +Converged at iteration 19, L1 9.59058e-05, Linf 0.00554037, total time[s] 0.050643 +Converged at iteration 17, L1 6.55557e-05, Linf 0.00181055, total time[s] 0.047629 +Converged at iteration 32, L1 4.88931e-05, Linf 0.00442693, total time[s] 0.081742 +Converged at iteration 19, L1 9.65427e-05, Linf 0.00577414, total time[s] 0.051391 +Converged at iteration 23, L1 6.22214e-05, Linf 0.00398292, total time[s] 0.063149 +Converged at iteration 26, L1 9.28908e-05, Linf 0.00567095, total time[s] 0.068071 +Converged at iteration 24, L1 5.61146e-05, Linf 0.00213552, total time[s] 0.063348 +Converged at iteration 21, L1 5.42256e-05, Linf 0.00207218, total time[s] 0.056277 +Converged at iteration 23, L1 8.27996e-05, Linf 0.00289447, total time[s] 0.061023 +Converged at iteration 25, L1 7.55248e-05, Linf 0.00295635, total time[s] 0.064622 +Converged at iteration 26, L1 9.95103e-05, Linf 0.00369589, total time[s] 0.068213 +Converged at iteration 30, L1 8.88825e-05, Linf 0.00612024, total time[s] 0.07612 +Converged at iteration 28, L1 9.46977e-05, Linf 0.00328985, total time[s] 0.072338 +Converged at iteration 30, L1 5.82073e-05, Linf 0.00445135, total time[s] 0.076771 +Converged at iteration 30, L1 5.55482e-05, Linf 0.00157057, total time[s] 0.076595 +Converged at iteration 30, L1 5.49431e-05, Linf 0.00235457, total time[s] 0.07665 +Converged at iteration 32, L1 8.59655e-05, Linf 0.00975536, total time[s] 0.081203 +Converged at iteration 25, L1 7.76268e-05, Linf 0.00305382, total time[s] 0.065064 +Converged at iteration 26, L1 5.85414e-05, Linf 0.00267916, total time[s] 0.068779 +Converged at iteration 23, L1 7.62041e-05, Linf 0.00310502, total time[s] 0.06116 +Converged at iteration 38, L1 7.81669e-05, Linf 0.0113728, total time[s] 0.095952 +Converged at iteration 36, L1 4.61423e-05, Linf 0.00815623, total time[s] 0.092156 +Converged at iteration 24, L1 9.04131e-05, Linf 0.006214, total time[s] 0.063109 +Converged at iteration 30, L1 7.369e-05, Linf 0.00630467, total time[s] 0.076845 +Converged at iteration 24, L1 6.80285e-05, Linf 0.00520097, total time[s] 0.064416 +Converged at iteration 22, L1 5.35673e-05, Linf 0.00476395, total time[s] 0.058119 +Converged at iteration 19, L1 7.38307e-05, Linf 0.00725185, total time[s] 0.051434 +Converged at iteration 21, L1 4.67692e-05, Linf 0.00372178, total time[s] 0.056231 +Converged at iteration 23, L1 7.038e-05, Linf 0.00348166, total time[s] 0.064878 +Converged at iteration 22, L1 9.09425e-05, Linf 0.00587563, total time[s] 0.058326 +Converged at iteration 19, L1 9.57067e-05, Linf 0.00557267, total time[s] 0.051242 +Converged at iteration 17, L1 6.47953e-05, Linf 0.0017926, total time[s] 0.047613 +Converged at iteration 32, L1 4.89716e-05, Linf 0.00435596, total time[s] 0.082601 +Converged at iteration 19, L1 9.66211e-05, Linf 0.00587402, total time[s] 0.051996 +Converged at iteration 23, L1 6.27066e-05, Linf 0.00398938, total time[s] 0.060801 +Converged at iteration 26, L1 9.50432e-05, Linf 0.00563191, total time[s] 0.068938 +Converged at iteration 24, L1 5.56361e-05, Linf 0.00209801, total time[s] 0.068105 +Converged at iteration 21, L1 5.38034e-05, Linf 0.00205177, total time[s] 0.090332 +Converged at iteration 23, L1 8.25757e-05, Linf 0.0028968, total time[s] 0.070784 +Converged at iteration 25, L1 7.56518e-05, Linf 0.00296451, total time[s] 0.064312 +Converged at iteration 27, L1 6.59153e-05, Linf 0.00303112, total time[s] 0.0693 +Converged at iteration 30, L1 8.7719e-05, Linf 0.00606135, total time[s] 0.076245 +Converged at iteration 28, L1 9.42455e-05, Linf 0.00325838, total time[s] 0.071824 +Converged at iteration 30, L1 5.89824e-05, Linf 0.00440367, total time[s] 0.076544 +Converged at iteration 30, L1 5.5641e-05, Linf 0.00158679, total time[s] 0.076221 +Converged at iteration 30, L1 5.34961e-05, Linf 0.00229086, total time[s] 0.106574 +Converged at iteration 32, L1 8.57664e-05, Linf 0.0097051, total time[s] 0.121044 +Converged at iteration 25, L1 7.72438e-05, Linf 0.00298617, total time[s] 0.070021 +Converged at iteration 26, L1 5.83653e-05, Linf 0.00266144, total time[s] 0.094721 +Converged at iteration 23, L1 7.57713e-05, Linf 0.00308257, total time[s] 0.076307 +Converged at iteration 38, L1 7.69475e-05, Linf 0.0114866, total time[s] 0.109957 +Converged at iteration 36, L1 4.55396e-05, Linf 0.00818855, total time[s] 0.097731 +Converged at iteration 24, L1 9.0449e-05, Linf 0.00633616, total time[s] 0.069288 +Converged at iteration 30, L1 7.09686e-05, Linf 0.00637108, total time[s] 0.07599 +Converged at iteration 24, L1 6.65765e-05, Linf 0.0051838, total time[s] 0.061805 +Converged at iteration 22, L1 5.47901e-05, Linf 0.00478976, total time[s] 0.059587 +Converged at iteration 19, L1 7.43611e-05, Linf 0.00734402, total time[s] 0.053496 +Converged at iteration 21, L1 4.71271e-05, Linf 0.00377731, total time[s] 0.055384 +Converged at iteration 23, L1 6.9979e-05, Linf 0.00345254, total time[s] 0.059999 +Converged at iteration 22, L1 8.8302e-05, Linf 0.00581163, total time[s] 0.059092 +Converged at iteration 19, L1 9.6136e-05, Linf 0.005534, total time[s] 0.053149 +Converged at iteration 17, L1 6.55663e-05, Linf 0.00181416, total time[s] 0.052171 +Converged at iteration 32, L1 4.88536e-05, Linf 0.00440711, total time[s] 0.082835 +Converged at iteration 19, L1 9.65536e-05, Linf 0.00625187, total time[s] 0.052084 +Converged at iteration 22, L1 9.98117e-05, Linf 0.00597066, total time[s] 0.061315 +Converged at iteration 26, L1 9.25927e-05, Linf 0.0056749, total time[s] 0.068352 +Converged at iteration 24, L1 5.63169e-05, Linf 0.0021431, total time[s] 0.062412 +Converged at iteration 21, L1 5.42942e-05, Linf 0.0020815, total time[s] 0.056762 +Converged at iteration 23, L1 8.31466e-05, Linf 0.00289858, total time[s] 0.063169 +Converged at iteration 25, L1 7.43927e-05, Linf 0.00296071, total time[s] 0.065409 +Converged at iteration 26, L1 9.90288e-05, Linf 0.00373596, total time[s] 0.067245 +Converged at iteration 30, L1 8.87087e-05, Linf 0.00614335, total time[s] 0.076661 +Converged at iteration 28, L1 9.45971e-05, Linf 0.00329681, total time[s] 0.07196 +Converged at iteration 30, L1 5.82444e-05, Linf 0.00446162, total time[s] 0.082558 +Converged at iteration 30, L1 5.56031e-05, Linf 0.0015672, total time[s] 0.077462 +Converged at iteration 30, L1 5.52402e-05, Linf 0.00236672, total time[s] 0.076134 +Converged at iteration 32, L1 8.55664e-05, Linf 0.00976809, total time[s] 0.08075 +Converged at iteration 25, L1 7.57113e-05, Linf 0.00294201, total time[s] 0.06567 +Converged at iteration 26, L1 5.82906e-05, Linf 0.00267994, total time[s] 0.066791 +Converged at iteration 23, L1 7.61061e-05, Linf 0.00310963, total time[s] 0.059914 +Converged at iteration 38, L1 7.56416e-05, Linf 0.0115138, total time[s] 0.099193 +Converged at iteration 36, L1 4.49465e-05, Linf 0.00823264, total time[s] 0.091499 +Converged at iteration 24, L1 9.03316e-05, Linf 0.00648237, total time[s] 0.069854 +Converged at iteration 30, L1 7.03999e-05, Linf 0.00635995, total time[s] 0.076323 +Converged at iteration 24, L1 6.58782e-05, Linf 0.00516426, total time[s] 0.063951 +Converged at iteration 22, L1 5.33761e-05, Linf 0.00481904, total time[s] 0.057747 +Converged at iteration 19, L1 7.51796e-05, Linf 0.00745727, total time[s] 0.050595 +Converged at iteration 21, L1 4.71559e-05, Linf 0.00381697, total time[s] 0.055255 +Converged at iteration 23, L1 6.96532e-05, Linf 0.00347857, total time[s] 0.062882 +Converged at iteration 22, L1 8.45277e-05, Linf 0.00573299, total time[s] 0.057936 +Converged at iteration 19, L1 9.60018e-05, Linf 0.0054872, total time[s] 0.051288 +Converged at iteration 17, L1 6.65278e-05, Linf 0.00184047, total time[s] 0.046772 +Converged at iteration 32, L1 4.87164e-05, Linf 0.00446848, total time[s] 0.081627 +Converged at iteration 19, L1 9.61545e-05, Linf 0.0056054, total time[s] 0.052104 +Converged at iteration 22, L1 9.92825e-05, Linf 0.00590766, total time[s] 0.058678 +Converged at iteration 26, L1 9.25595e-05, Linf 0.0057392, total time[s] 0.069622 +Converged at iteration 24, L1 5.68672e-05, Linf 0.00219677, total time[s] 0.063348 +Converged at iteration 21, L1 5.49307e-05, Linf 0.00216625, total time[s] 0.056127 +Converged at iteration 23, L1 8.30404e-05, Linf 0.00289168, total time[s] 0.061135 +Converged at iteration 25, L1 7.41239e-05, Linf 0.00293798, total time[s] 0.066337 +Converged at iteration 26, L1 9.74028e-05, Linf 0.00367352, total time[s] 0.068543 +Converged at iteration 30, L1 9.00357e-05, Linf 0.0061813, total time[s] 0.079269 +Converged at iteration 28, L1 9.55295e-05, Linf 0.00334023, total time[s] 0.076846 +Converged at iteration 30, L1 5.84447e-05, Linf 0.00452919, total time[s] 0.094326 +Converged at iteration 30, L1 5.5528e-05, Linf 0.00154115, total time[s] 0.081077 +Converged at iteration 30, L1 5.74442e-05, Linf 0.0025016, total time[s] 0.082235 +Converged at iteration 32, L1 8.54143e-05, Linf 0.0098561, total time[s] 0.090632 +Converged at iteration 25, L1 7.43927e-05, Linf 0.00288963, total time[s] 0.066534 +Converged at iteration 26, L1 5.80151e-05, Linf 0.00270823, total time[s] 0.068058 +Converged at iteration 23, L1 7.69474e-05, Linf 0.00314205, total time[s] 0.086033 +Converged at iteration 38, L1 7.41431e-05, Linf 0.0116097, total time[s] 0.099219 +Converged at iteration 36, L1 4.4292e-05, Linf 0.00828228, total time[s] 0.093664 +Converged at iteration 24, L1 9.1238e-05, Linf 0.0066556, total time[s] 0.062658 +Converged at iteration 30, L1 7.08088e-05, Linf 0.00634619, total time[s] 0.07681 +Converged at iteration 24, L1 6.53419e-05, Linf 0.00514251, total time[s] 0.063246 +Converged at iteration 22, L1 5.33767e-05, Linf 0.00485208, total time[s] 0.060445 +Converged at iteration 19, L1 7.63758e-05, Linf 0.00754066, total time[s] 0.054053 +Converged at iteration 21, L1 4.8297e-05, Linf 0.00389942, total time[s] 0.057974 +Converged at iteration 23, L1 6.9672e-05, Linf 0.00346957, total time[s] 0.06125 +Converged at iteration 22, L1 8.31848e-05, Linf 0.00764692, total time[s] 0.05792 +Converged at iteration 19, L1 9.70309e-05, Linf 0.00543008, total time[s] 0.051165 +Converged at iteration 17, L1 6.78817e-05, Linf 0.00187089, total time[s] 0.046479 +Converged at iteration 32, L1 4.84881e-05, Linf 0.00454262, total time[s] 0.080645 +Converged at iteration 19, L1 9.60814e-05, Linf 0.00545113, total time[s] 0.051144 +Converged at iteration 22, L1 9.89215e-05, Linf 0.00584484, total time[s] 0.061355 +Converged at iteration 26, L1 9.25948e-05, Linf 0.00579029, total time[s] 0.068797 +Converged at iteration 24, L1 5.7952e-05, Linf 0.00226242, total time[s] 0.062541 +Converged at iteration 21, L1 5.57269e-05, Linf 0.0025212, total time[s] 0.056612 +Converged at iteration 23, L1 8.39033e-05, Linf 0.00288791, total time[s] 0.06051 +Converged at iteration 25, L1 7.50965e-05, Linf 0.00291977, total time[s] 0.065302 +Converged at iteration 26, L1 9.55146e-05, Linf 0.00364772, total time[s] 0.068989 +Converged at iteration 30, L1 9.18294e-05, Linf 0.00617062, total time[s] 0.076654 +Converged at iteration 28, L1 9.72204e-05, Linf 0.0033865, total time[s] 0.071265 +Converged at iteration 30, L1 5.88624e-05, Linf 0.0046016, total time[s] 0.075711 +Converged at iteration 30, L1 5.54427e-05, Linf 0.00152545, total time[s] 0.075552 +Converged at iteration 30, L1 6.01298e-05, Linf 0.00266841, total time[s] 0.076455 +Converged at iteration 32, L1 8.53192e-05, Linf 0.00996279, total time[s] 0.081032 +Converged at iteration 25, L1 7.28971e-05, Linf 0.00281675, total time[s] 0.065406 +Converged at iteration 26, L1 5.80361e-05, Linf 0.00273343, total time[s] 0.067593 +Converged at iteration 23, L1 7.7781e-05, Linf 0.00318173, total time[s] 0.060363 +Converged at iteration 38, L1 7.51231e-05, Linf 0.0115629, total time[s] 0.096408 +Converged at iteration 36, L1 4.46111e-05, Linf 0.00825766, total time[s] 0.092618 +Converged at iteration 24, L1 9.01531e-05, Linf 0.00656894, total time[s] 0.062752 +Converged at iteration 30, L1 7.27945e-05, Linf 0.00635306, total time[s] 0.078275 +Converged at iteration 24, L1 6.62555e-05, Linf 0.00515331, total time[s] 0.063556 +Converged at iteration 22, L1 5.35276e-05, Linf 0.00483599, total time[s] 0.05963 +Converged at iteration 19, L1 7.57142e-05, Linf 0.00752564, total time[s] 0.055884 +Converged at iteration 21, L1 4.7908e-05, Linf 0.00385512, total time[s] 0.058373 +Converged at iteration 23, L1 6.95793e-05, Linf 0.00347338, total time[s] 0.062785 +Converged at iteration 22, L1 8.29412e-05, Linf 0.00568471, total time[s] 0.060225 +Converged at iteration 19, L1 9.59913e-05, Linf 0.00545871, total time[s] 0.052369 +Converged at iteration 17, L1 6.71763e-05, Linf 0.00185607, total time[s] 0.047532 +Converged at iteration 32, L1 4.85885e-05, Linf 0.00450553, total time[s] 0.083717 +Converged at iteration 19, L1 9.67701e-05, Linf 0.00544827, total time[s] 0.052728 +Converged at iteration 22, L1 9.91537e-05, Linf 0.0058955, total time[s] 0.060792 +Converged at iteration 26, L1 9.25549e-05, Linf 0.00576499, total time[s] 0.068957 +Converged at iteration 24, L1 5.73886e-05, Linf 0.00222926, total time[s] 0.0655 +Converged at iteration 21, L1 5.52307e-05, Linf 0.00220924, total time[s] 0.057734 +Converged at iteration 23, L1 8.32269e-05, Linf 0.00289093, total time[s] 0.062005 +Converged at iteration 25, L1 7.38336e-05, Linf 0.00292863, total time[s] 0.067188 +Converged at iteration 26, L1 9.64513e-05, Linf 0.00367273, total time[s] 0.0702 +Converged at iteration 30, L1 9.08447e-05, Linf 0.00617043, total time[s] 0.078568 +Converged at iteration 28, L1 9.63522e-05, Linf 0.00336505, total time[s] 0.073587 +Converged at iteration 30, L1 5.86172e-05, Linf 0.00456592, total time[s] 0.078269 +Converged at iteration 30, L1 5.54873e-05, Linf 0.00152449, total time[s] 0.07858 +Converged at iteration 30, L1 5.87678e-05, Linf 0.0025867, total time[s] 0.078442 +Converged at iteration 32, L1 8.53735e-05, Linf 0.00990937, total time[s] 0.083167 +Converged at iteration 25, L1 7.35928e-05, Linf 0.00285437, total time[s] 0.067124 +Converged at iteration 26, L1 5.8089e-05, Linf 0.00272009, total time[s] 0.069713 +Converged at iteration 23, L1 7.73302e-05, Linf 0.00316225, total time[s] 0.062297 +Converged at iteration 38, L1 7.39532e-05, Linf 0.0116186, total time[s] 0.099005 +Converged at iteration 36, L1 4.44799e-05, Linf 0.00828794, total time[s] 0.093513 +Converged at iteration 24, L1 9.13186e-05, Linf 0.00667377, total time[s] 0.063861 +Converged at iteration 30, L1 6.89756e-05, Linf 0.00634469, total time[s] 0.085758 +Converged at iteration 24, L1 6.49012e-05, Linf 0.0051405, total time[s] 0.064577 +Converged at iteration 22, L1 5.32034e-05, Linf 0.00485503, total time[s] 0.060839 +Converged at iteration 19, L1 7.65281e-05, Linf 0.00760666, total time[s] 0.052944 +Converged at iteration 21, L1 4.83967e-05, Linf 0.00390821, total time[s] 0.05733 +Converged at iteration 23, L1 6.96635e-05, Linf 0.00347031, total time[s] 0.062369 +Converged at iteration 22, L1 8.1175e-05, Linf 0.00562506, total time[s] 0.060629 +Converged at iteration 19, L1 9.58809e-05, Linf 0.00542443, total time[s] 0.052476 +Converged at iteration 17, L1 6.79995e-05, Linf 0.00187424, total time[s] 0.049834 +Converged at iteration 32, L1 4.84604e-05, Linf 0.00455028, total time[s] 0.099658 +Converged at iteration 19, L1 9.63303e-05, Linf 0.00541074, total time[s] 0.217813 +Converged at iteration 22, L1 9.85396e-05, Linf 0.00568215, total time[s] 0.106393 +Converged at iteration 26, L1 9.27155e-05, Linf 0.00580374, total time[s] 0.084305 +Converged at iteration 24, L1 5.79969e-05, Linf 0.00226914, total time[s] 0.063925 +Converged at iteration 21, L1 5.52986e-05, Linf 0.00224412, total time[s] 0.057167 +Converged at iteration 23, L1 8.38224e-05, Linf 0.00289402, total time[s] 0.062997 +Converged at iteration 25, L1 7.36344e-05, Linf 0.00292289, total time[s] 0.066687 +Converged at iteration 26, L1 9.53512e-05, Linf 0.00364416, total time[s] 0.068307 +Converged at iteration 30, L1 9.18762e-05, Linf 0.00619434, total time[s] 0.080705 +Converged at iteration 28, L1 9.71782e-05, Linf 0.00339103, total time[s] 0.070893 +Converged at iteration 30, L1 5.89949e-05, Linf 0.0046088, total time[s] 0.0772 +Converged at iteration 30, L1 5.57039e-05, Linf 0.00152652, total time[s] 0.076904 +Converged at iteration 30, L1 6.04369e-05, Linf 0.00268659, total time[s] 0.075801 +Converged at iteration 32, L1 8.52433e-05, Linf 0.00997378, total time[s] 0.081915 +Converged at iteration 25, L1 7.26611e-05, Linf 0.00273086, total time[s] 0.064253 +Converged at iteration 26, L1 5.78972e-05, Linf 0.00273799, total time[s] 0.068314 +Converged at iteration 23, L1 7.78848e-05, Linf 0.00318588, total time[s] 0.060109 +Converged at iteration 38, L1 7.31254e-05, Linf 0.0116854, total time[s] 0.099312 +Converged at iteration 36, L1 4.38263e-05, Linf 0.00831883, total time[s] 0.106501 +Converged at iteration 24, L1 9.05816e-05, Linf 0.00679402, total time[s] 0.097008 +Converged at iteration 30, L1 6.82084e-05, Linf 0.00633437, total time[s] 0.082444 +Converged at iteration 24, L1 6.42795e-05, Linf 0.00512632, total time[s] 0.063104 +Converged at iteration 22, L1 5.31411e-05, Linf 0.00487677, total time[s] 0.058163 +Converged at iteration 19, L1 7.76642e-05, Linf 0.00770537, total time[s] 0.051307 +Converged at iteration 21, L1 4.87247e-05, Linf 0.00394899, total time[s] 0.056313 +Converged at iteration 23, L1 6.95292e-05, Linf 0.0034631, total time[s] 0.06223 +Converged at iteration 22, L1 7.85759e-05, Linf 0.00552137, total time[s] 0.058536 +Converged at iteration 19, L1 9.55694e-05, Linf 0.0053822, total time[s] 0.050783 +Converged at iteration 17, L1 6.92061e-05, Linf 0.00189729, total time[s] 0.046162 +Converged at iteration 32, L1 4.82949e-05, Linf 0.00460462, total time[s] 0.081642 +Converged at iteration 19, L1 9.63308e-05, Linf 0.00533181, total time[s] 0.051426 +Converged at iteration 22, L1 9.82271e-05, Linf 0.00579922, total time[s] 0.059686 +Converged at iteration 26, L1 9.33303e-05, Linf 0.00585788, total time[s] 0.075855 +Converged at iteration 24, L1 5.8785e-05, Linf 0.00231697, total time[s] 0.063123 +Converged at iteration 21, L1 5.54779e-05, Linf 0.00229617, total time[s] 0.060204 +Converged at iteration 23, L1 8.40058e-05, Linf 0.00288499, total time[s] 0.064537 +Converged at iteration 25, L1 7.33738e-05, Linf 0.00290585, total time[s] 0.065237 +Converged at iteration 26, L1 9.40612e-05, Linf 0.00361777, total time[s] 0.072741 +Converged at iteration 30, L1 9.31097e-05, Linf 0.00634251, total time[s] 0.077264 +Converged at iteration 28, L1 9.8235e-05, Linf 0.00341422, total time[s] 0.072319 +Converged at iteration 30, L1 5.91565e-05, Linf 0.00466011, total time[s] 0.077952 +Converged at iteration 30, L1 5.53923e-05, Linf 0.00153305, total time[s] 0.078053 +Converged at iteration 30, L1 6.24687e-05, Linf 0.00280739, total time[s] 0.07765 +Converged at iteration 32, L1 8.5132e-05, Linf 0.010052, total time[s] 0.082276 +Converged at iteration 25, L1 7.30449e-05, Linf 0.00264691, total time[s] 0.06638 +Converged at iteration 26, L1 5.7852e-05, Linf 0.00275302, total time[s] 0.069716 +Converged at iteration 23, L1 7.8619e-05, Linf 0.00321459, total time[s] 0.060418 +Converged at iteration 38, L1 7.15493e-05, Linf 0.0116388, total time[s] 0.098197 +Converged at iteration 36, L1 4.30131e-05, Linf 0.0083593, total time[s] 0.095971 +Converged at iteration 24, L1 9.10934e-05, Linf 0.00694755, total time[s] 0.06345 +Converged at iteration 30, L1 6.73293e-05, Linf 0.00641839, total time[s] 0.077354 +Converged at iteration 24, L1 6.34981e-05, Linf 0.0051119, total time[s] 0.063124 +Converged at iteration 22, L1 5.52874e-05, Linf 0.00490846, total time[s] 0.058446 +Converged at iteration 19, L1 7.8903e-05, Linf 0.00782826, total time[s] 0.051457 +Converged at iteration 21, L1 4.91228e-05, Linf 0.00400242, total time[s] 0.057254 +Converged at iteration 23, L1 6.87374e-05, Linf 0.00346456, total time[s] 0.061623 +Converged at iteration 22, L1 7.58983e-05, Linf 0.00546051, total time[s] 0.0584 +Converged at iteration 19, L1 9.53937e-05, Linf 0.00533269, total time[s] 0.051542 +Converged at iteration 17, L1 7.03625e-05, Linf 0.00192397, total time[s] 0.049587 +Converged at iteration 32, L1 4.81628e-05, Linf 0.00467131, total time[s] 0.082141 +Converged at iteration 19, L1 9.55604e-05, Linf 0.00529991, total time[s] 0.050339 +Converged at iteration 22, L1 9.75513e-05, Linf 0.0057479, total time[s] 0.062162 +Converged at iteration 26, L1 9.43194e-05, Linf 0.00590296, total time[s] 0.069785 +Converged at iteration 24, L1 5.9779e-05, Linf 0.00237385, total time[s] 0.063838 +Converged at iteration 21, L1 5.57842e-05, Linf 0.00231199, total time[s] 0.05617 +Converged at iteration 23, L1 8.44473e-05, Linf 0.00288165, total time[s] 0.064539 +Converged at iteration 25, L1 7.28183e-05, Linf 0.00289301, total time[s] 0.066209 +Converged at iteration 26, L1 9.25062e-05, Linf 0.00357508, total time[s] 0.068925 +Converged at iteration 30, L1 9.44772e-05, Linf 0.00655204, total time[s] 0.079018 +Converged at iteration 28, L1 9.93674e-05, Linf 0.00346091, total time[s] 0.073355 +Converged at iteration 30, L1 5.94476e-05, Linf 0.00471997, total time[s] 0.077623 +Converged at iteration 30, L1 5.54964e-05, Linf 0.00154142, total time[s] 0.078963 +Converged at iteration 30, L1 6.51795e-05, Linf 0.00290332, total time[s] 0.078071 +Converged at iteration 32, L1 8.50108e-05, Linf 0.0101459, total time[s] 0.082331 +Converged at iteration 25, L1 7.2421e-05, Linf 0.00255045, total time[s] 0.065783 +Converged at iteration 26, L1 5.83287e-05, Linf 0.00274548, total time[s] 0.068503 +Converged at iteration 23, L1 8.02715e-05, Linf 0.00324878, total time[s] 0.06183 +Converged at iteration 38, L1 7.12112e-05, Linf 0.011856, total time[s] 0.108346 +Converged at iteration 36, L1 4.22466e-05, Linf 0.00840008, total time[s] 0.095345 +Converged at iteration 24, L1 9.15106e-05, Linf 0.00712676, total time[s] 0.063278 +Converged at iteration 30, L1 6.62695e-05, Linf 0.00630589, total time[s] 0.077615 +Converged at iteration 24, L1 6.27626e-05, Linf 0.00509294, total time[s] 0.063276 +Converged at iteration 22, L1 5.54433e-05, Linf 0.00493381, total time[s] 0.059037 +Converged at iteration 19, L1 8.0324e-05, Linf 0.00799628, total time[s] 0.055163 +Converged at iteration 21, L1 4.96315e-05, Linf 0.00408082, total time[s] 0.062154 +Converged at iteration 23, L1 6.82423e-05, Linf 0.00345422, total time[s] 0.060975 +Converged at iteration 22, L1 7.27583e-05, Linf 0.00534798, total time[s] 0.058492 +Converged at iteration 19, L1 9.50062e-05, Linf 0.00530173, total time[s] 0.051274 +Converged at iteration 17, L1 7.21223e-05, Linf 0.00195615, total time[s] 0.052022 +Converged at iteration 32, L1 4.84515e-05, Linf 0.00471609, total time[s] 0.098536 +Converged at iteration 19, L1 9.63424e-05, Linf 0.00526473, total time[s] 0.05175 +Converged at iteration 22, L1 9.69284e-05, Linf 0.00568098, total time[s] 0.058325 +Converged at iteration 26, L1 9.50735e-05, Linf 0.00597291, total time[s] 0.068548 +Converged at iteration 24, L1 6.0981e-05, Linf 0.00244198, total time[s] 0.064899 +Converged at iteration 21, L1 5.61291e-05, Linf 0.00230453, total time[s] 0.056152 +Converged at iteration 23, L1 8.49035e-05, Linf 0.00287836, total time[s] 0.060945 +Converged at iteration 25, L1 7.25865e-05, Linf 0.00286551, total time[s] 0.066795 +Converged at iteration 26, L1 9.06782e-05, Linf 0.00350711, total time[s] 0.069154 +Converged at iteration 30, L1 9.64539e-05, Linf 0.00700004, total time[s] 0.081376 +Converged at iteration 29, L1 5.78118e-05, Linf 0.00240152, total time[s] 0.076251 +Converged at iteration 30, L1 5.97676e-05, Linf 0.00478293, total time[s] 0.080103 +Converged at iteration 30, L1 5.54252e-05, Linf 0.00154892, total time[s] 0.077693 +Converged at iteration 30, L1 6.84052e-05, Linf 0.00277053, total time[s] 0.078236 +Converged at iteration 32, L1 8.5667e-05, Linf 0.0102602, total time[s] 0.083863 +Converged at iteration 25, L1 6.92986e-05, Linf 0.00254738, total time[s] 0.066589 +Converged at iteration 26, L1 5.88886e-05, Linf 0.00281008, total time[s] 0.070828 +Converged at iteration 23, L1 8.07066e-05, Linf 0.00328968, total time[s] 0.061082 +Converged at iteration 38, L1 7.07959e-05, Linf 0.0116777, total time[s] 0.099336 +Converged at iteration 36, L1 4.26216e-05, Linf 0.00838107, total time[s] 0.093062 +Converged at iteration 24, L1 9.07784e-05, Linf 0.00708827, total time[s] 0.063639 +Converged at iteration 30, L1 6.68098e-05, Linf 0.00631488, total time[s] 0.077634 +Converged at iteration 24, L1 6.31579e-05, Linf 0.00510158, total time[s] 0.063927 +Converged at iteration 22, L1 5.30054e-05, Linf 0.00491406, total time[s] 0.058493 +Converged at iteration 19, L1 7.9545e-05, Linf 0.00790941, total time[s] 0.051497 +Converged at iteration 21, L1 4.92336e-05, Linf 0.00403764, total time[s] 0.056527 +Converged at iteration 23, L1 6.84499e-05, Linf 0.00345974, total time[s] 0.061171 +Converged at iteration 22, L1 7.42579e-05, Linf 0.0054047, total time[s] 0.058423 +Converged at iteration 19, L1 9.51107e-05, Linf 0.00530212, total time[s] 0.051349 +Converged at iteration 17, L1 7.11657e-05, Linf 0.00194009, total time[s] 0.046705 +Converged at iteration 32, L1 4.80923e-05, Linf 0.00471213, total time[s] 0.082929 +Converged at iteration 19, L1 9.54413e-05, Linf 0.00528197, total time[s] 0.052223 +Converged at iteration 22, L1 9.71539e-05, Linf 0.00571562, total time[s] 0.069262 +Converged at iteration 26, L1 9.48238e-05, Linf 0.00593766, total time[s] 0.070759 +Converged at iteration 24, L1 6.03893e-05, Linf 0.00240799, total time[s] 0.072844 +Converged at iteration 21, L1 5.59582e-05, Linf 0.00231748, total time[s] 0.071312 +Converged at iteration 23, L1 8.4795e-05, Linf 0.00287939, total time[s] 0.064823 +Converged at iteration 25, L1 7.25727e-05, Linf 0.00287595, total time[s] 0.073941 +Converged at iteration 26, L1 9.15189e-05, Linf 0.00354346, total time[s] 0.06826 +Converged at iteration 30, L1 9.54252e-05, Linf 0.00674284, total time[s] 0.077841 +Converged at iteration 28, L1 9.98746e-05, Linf 0.00348744, total time[s] 0.07288 +Converged at iteration 30, L1 5.96065e-05, Linf 0.00475319, total time[s] 0.077536 +Converged at iteration 30, L1 5.53805e-05, Linf 0.00154595, total time[s] 0.077637 +Converged at iteration 30, L1 6.66489e-05, Linf 0.0028349, total time[s] 0.083461 +Converged at iteration 32, L1 8.49496e-05, Linf 0.0102038, total time[s] 0.081537 +Converged at iteration 25, L1 6.98854e-05, Linf 0.00261811, total time[s] 0.065278 +Converged at iteration 26, L1 5.75806e-05, Linf 0.00279067, total time[s] 0.066806 +Converged at iteration 23, L1 8.04892e-05, Linf 0.00326922, total time[s] 0.0607 +Converged at iteration 38, L1 6.99462e-05, Linf 0.0118744, total time[s] 0.107817 +Converged at iteration 36, L1 4.21421e-05, Linf 0.00840505, total time[s] 0.095051 +Converged at iteration 24, L1 9.13125e-05, Linf 0.00714502, total time[s] 0.063573 +Converged at iteration 30, L1 6.68511e-05, Linf 0.00630418, total time[s] 0.077501 +Converged at iteration 24, L1 6.2962e-05, Linf 0.0050923, total time[s] 0.066964 +Converged at iteration 22, L1 5.42863e-05, Linf 0.00492897, total time[s] 0.05864 +Converged at iteration 19, L1 8.02548e-05, Linf 0.00801583, total time[s] 0.05162 +Converged at iteration 21, L1 4.98074e-05, Linf 0.00409039, total time[s] 0.056115 +Converged at iteration 23, L1 6.82203e-05, Linf 0.00345298, total time[s] 0.061146 +Converged at iteration 22, L1 7.24434e-05, Linf 0.00533624, total time[s] 0.058537 +Converged at iteration 19, L1 9.49903e-05, Linf 0.00526518, total time[s] 0.057187 +Converged at iteration 17, L1 7.22474e-05, Linf 0.00195932, total time[s] 0.052034 +Converged at iteration 32, L1 4.80104e-05, Linf 0.00476186, total time[s] 0.084917 +Converged at iteration 19, L1 9.54473e-05, Linf 0.00555454, total time[s] 0.051992 +Converged at iteration 22, L1 9.68349e-05, Linf 0.00606011, total time[s] 0.058573 +Converged at iteration 26, L1 9.50776e-05, Linf 0.00597451, total time[s] 0.067894 +Converged at iteration 24, L1 6.09715e-05, Linf 0.00244889, total time[s] 0.063778 +Converged at iteration 21, L1 5.61805e-05, Linf 0.00230322, total time[s] 0.057196 +Converged at iteration 23, L1 8.54214e-05, Linf 0.00288199, total time[s] 0.060656 +Converged at iteration 25, L1 7.2046e-05, Linf 0.00286533, total time[s] 0.065356 +Converged at iteration 26, L1 9.05966e-05, Linf 0.0035114, total time[s] 0.068604 +Converged at iteration 30, L1 9.69428e-05, Linf 0.00704903, total time[s] 0.07777 +Converged at iteration 29, L1 5.78132e-05, Linf 0.00239904, total time[s] 0.075356 +Converged at iteration 30, L1 5.99205e-05, Linf 0.00478862, total time[s] 0.081514 +Converged at iteration 30, L1 5.54418e-05, Linf 0.00154951, total time[s] 0.078807 +Converged at iteration 30, L1 6.87614e-05, Linf 0.00275738, total time[s] 0.077139 +Converged at iteration 32, L1 8.48265e-05, Linf 0.0102731, total time[s] 0.08202 +Converged at iteration 25, L1 6.91936e-05, Linf 0.0025535, total time[s] 0.065723 +Converged at iteration 26, L1 5.74517e-05, Linf 0.00280575, total time[s] 0.069172 +Converged at iteration 23, L1 8.09503e-05, Linf 0.00329434, total time[s] 0.062476 +Converged at iteration 38, L1 6.91872e-05, Linf 0.0119225, total time[s] 0.108411 +Converged at iteration 36, L1 4.15747e-05, Linf 0.00843949, total time[s] 0.092212 +Converged at iteration 24, L1 9.14214e-05, Linf 0.00727401, total time[s] 0.063246 +Converged at iteration 30, L1 6.54221e-05, Linf 0.00629249, total time[s] 0.103888 +Converged at iteration 24, L1 6.21875e-05, Linf 0.00508191, total time[s] 0.066585 +Converged at iteration 22, L1 5.28749e-05, Linf 0.0049462, total time[s] 0.059021 +Converged at iteration 19, L1 8.10077e-05, Linf 0.00817989, total time[s] 0.050849 +Converged at iteration 21, L1 5.01417e-05, Linf 0.00412932, total time[s] 0.055423 +Converged at iteration 23, L1 6.80788e-05, Linf 0.00344367, total time[s] 0.060038 +Converged at iteration 22, L1 7.03718e-05, Linf 0.00525264, total time[s] 0.059119 +Converged at iteration 19, L1 9.49754e-05, Linf 0.0052204, total time[s] 0.060544 +Converged at iteration 17, L1 7.37081e-05, Linf 0.00198172, total time[s] 0.064234 +Converged at iteration 32, L1 4.79004e-05, Linf 0.00482184, total time[s] 0.092648 +Converged at iteration 19, L1 9.54742e-05, Linf 0.00529327, total time[s] 0.072216 +Converged at iteration 22, L1 9.65988e-05, Linf 0.00612775, total time[s] 0.058947 +Converged at iteration 26, L1 9.52925e-05, Linf 0.00602199, total time[s] 0.067204 +Converged at iteration 24, L1 6.17836e-05, Linf 0.00249782, total time[s] 0.070321 +Converged at iteration 21, L1 5.66137e-05, Linf 0.00233738, total time[s] 0.055118 +Converged at iteration 23, L1 8.56919e-05, Linf 0.00287402, total time[s] 0.061694 +Converged at iteration 25, L1 7.17971e-05, Linf 0.00286124, total time[s] 0.06605 +Converged at iteration 26, L1 8.91143e-05, Linf 0.00345702, total time[s] 0.067127 +Converged at iteration 30, L1 9.76777e-05, Linf 0.00735605, total time[s] 0.08428 +Converged at iteration 29, L1 5.7948e-05, Linf 0.00239264, total time[s] 0.07449 +Converged at iteration 30, L1 5.99994e-05, Linf 0.00482765, total time[s] 0.082227 +Converged at iteration 30, L1 5.54644e-05, Linf 0.00155293, total time[s] 0.077283 +Converged at iteration 30, L1 7.10672e-05, Linf 0.00267147, total time[s] 0.077959 +Converged at iteration 32, L1 8.47463e-05, Linf 0.0103568, total time[s] 0.085774 +Converged at iteration 25, L1 7.20747e-05, Linf 0.00247147, total time[s] 0.067297 +Converged at iteration 26, L1 5.73476e-05, Linf 0.00282267, total time[s] 0.071328 +Converged at iteration 23, L1 8.19411e-05, Linf 0.0033236, total time[s] 0.062402 +Converged at iteration 38, L1 6.77181e-05, Linf 0.0118703, total time[s] 0.117416 +Converged at iteration 36, L1 4.09883e-05, Linf 0.00848084, total time[s] 0.099846 +Converged at iteration 24, L1 9.12951e-05, Linf 0.00742773, total time[s] 0.063531 +Converged at iteration 30, L1 6.45354e-05, Linf 0.00627822, total time[s] 0.076627 +Converged at iteration 24, L1 6.16522e-05, Linf 0.00507061, total time[s] 0.062352 +Converged at iteration 22, L1 5.27621e-05, Linf 0.00496582, total time[s] 0.058509 +Converged at iteration 19, L1 8.2242e-05, Linf 0.00842344, total time[s] 0.053088 +Converged at iteration 21, L1 5.0551e-05, Linf 0.00418382, total time[s] 0.059575 +Converged at iteration 23, L1 6.8031e-05, Linf 0.0034342, total time[s] 0.062736 +Converged at iteration 22, L1 6.79385e-05, Linf 0.00514835, total time[s] 0.06003 +Converged at iteration 19, L1 9.53173e-05, Linf 0.00516622, total time[s] 0.052307 +Converged at iteration 17, L1 7.51031e-05, Linf 0.00200813, total time[s] 0.04899 +Converged at iteration 32, L1 4.78189e-05, Linf 0.00489288, total time[s] 0.085122 +Converged at iteration 19, L1 9.54781e-05, Linf 0.00522949, total time[s] 0.053208 +Converged at iteration 22, L1 9.57935e-05, Linf 0.0055596, total time[s] 0.061609 +Converged at iteration 26, L1 9.54761e-05, Linf 0.00606776, total time[s] 0.070794 +Converged at iteration 24, L1 6.2716e-05, Linf 0.00255614, total time[s] 0.064456 +Converged at iteration 21, L1 5.76825e-05, Linf 0.00239872, total time[s] 0.057912 +Converged at iteration 23, L1 8.62293e-05, Linf 0.00287047, total time[s] 0.070928 +Converged at iteration 25, L1 7.14636e-05, Linf 0.002842, total time[s] 0.066987 +Converged at iteration 26, L1 8.75142e-05, Linf 0.00337014, total time[s] 0.069213 +Converged at iteration 30, L1 9.86052e-05, Linf 0.00734665, total time[s] 0.079874 +Converged at iteration 29, L1 5.8695e-05, Linf 0.00239787, total time[s] 0.075865 +Converged at iteration 30, L1 6.03686e-05, Linf 0.00487226, total time[s] 0.078237 +Converged at iteration 30, L1 5.56055e-05, Linf 0.00155694, total time[s] 0.079849 +Converged at iteration 30, L1 7.38718e-05, Linf 0.00269345, total time[s] 0.078359 +Converged at iteration 32, L1 8.47336e-05, Linf 0.0104584, total time[s] 0.083597 +Converged at iteration 25, L1 6.95303e-05, Linf 0.00236857, total time[s] 0.067422 +Converged at iteration 26, L1 5.77421e-05, Linf 0.00284278, total time[s] 0.068988 +Converged at iteration 23, L1 8.34028e-05, Linf 0.0033588, total time[s] 0.062705 +Converged at iteration 38, L1 6.60587e-05, Linf 0.0120839, total time[s] 0.098803 +Converged at iteration 36, L1 4.0337e-05, Linf 0.00853227, total time[s] 0.094814 +Converged at iteration 24, L1 9.15426e-05, Linf 0.00761137, total time[s] 0.065589 +Converged at iteration 30, L1 6.34502e-05, Linf 0.00626063, total time[s] 0.078197 +Converged at iteration 24, L1 6.12797e-05, Linf 0.00505929, total time[s] 0.06436 +Converged at iteration 22, L1 5.26282e-05, Linf 0.00499966, total time[s] 0.05975 +Converged at iteration 19, L1 8.36007e-05, Linf 0.00868721, total time[s] 0.052304 +Converged at iteration 21, L1 5.12806e-05, Linf 0.00425831, total time[s] 0.05707 +Converged at iteration 23, L1 6.7435e-05, Linf 0.00342536, total time[s] 0.062531 +Converged at iteration 22, L1 6.50588e-05, Linf 0.005021, total time[s] 0.060238 +Converged at iteration 19, L1 9.61312e-05, Linf 0.00509968, total time[s] 0.052777 +Converged at iteration 17, L1 7.7103e-05, Linf 0.00203976, total time[s] 0.047332 +Converged at iteration 32, L1 4.77887e-05, Linf 0.0049748, total time[s] 0.086539 +Converged at iteration 19, L1 9.55427e-05, Linf 0.00517892, total time[s] 0.053057 +Converged at iteration 22, L1 9.5155e-05, Linf 0.00547689, total time[s] 0.060685 +Converged at iteration 26, L1 9.58993e-05, Linf 0.00612468, total time[s] 0.071874 +Converged at iteration 24, L1 6.3955e-05, Linf 0.00262662, total time[s] 0.065117 +Converged at iteration 21, L1 5.91579e-05, Linf 0.00248137, total time[s] 0.05787 +Converged at iteration 23, L1 8.65112e-05, Linf 0.00286731, total time[s] 0.062068 +Converged at iteration 25, L1 7.09602e-05, Linf 0.00283179, total time[s] 0.066474 +Converged at iteration 26, L1 8.56271e-05, Linf 0.0032931, total time[s] 0.071466 +Converged at iteration 30, L1 9.98848e-05, Linf 0.00693144, total time[s] 0.079414 +Converged at iteration 29, L1 5.94674e-05, Linf 0.00243941, total time[s] 0.077015 +Converged at iteration 30, L1 6.06371e-05, Linf 0.00491473, total time[s] 0.079621 +Converged at iteration 30, L1 5.56543e-05, Linf 0.00156123, total time[s] 0.078506 +Converged at iteration 30, L1 7.84295e-05, Linf 0.00289117, total time[s] 0.078461 +Converged at iteration 32, L1 8.46122e-05, Linf 0.0105814, total time[s] 0.087867 +Converged at iteration 25, L1 6.69571e-05, Linf 0.00223901, total time[s] 0.067499 +Converged at iteration 26, L1 5.70779e-05, Linf 0.00286555, total time[s] 0.069778 +Converged at iteration 23, L1 8.39318e-05, Linf 0.00340071, total time[s] 0.061372 +Converged at iteration 38, L1 6.67607e-05, Linf 0.0120442, total time[s] 0.1235 +Converged at iteration 36, L1 4.06376e-05, Linf 0.0084285, total time[s] 0.093517 +Converged at iteration 24, L1 9.11987e-05, Linf 0.00751983, total time[s] 0.064559 +Converged at iteration 30, L1 6.40745e-05, Linf 0.00626945, total time[s] 0.078678 +Converged at iteration 24, L1 6.13697e-05, Linf 0.00506466, total time[s] 0.065075 +Converged at iteration 22, L1 5.42822e-05, Linf 0.00498292, total time[s] 0.059682 +Converged at iteration 19, L1 8.29969e-05, Linf 0.00856425, total time[s] 0.053303 +Converged at iteration 21, L1 5.07783e-05, Linf 0.00422132, total time[s] 0.057307 +Converged at iteration 23, L1 6.74072e-05, Linf 0.00342996, total time[s] 0.062283 +Converged at iteration 22, L1 6.64469e-05, Linf 0.00508569, total time[s] 0.059833 +Converged at iteration 19, L1 9.56027e-05, Linf 0.00513302, total time[s] 0.05459 +Converged at iteration 17, L1 7.60948e-05, Linf 0.00202404, total time[s] 0.048441 +Converged at iteration 32, L1 4.79973e-05, Linf 0.00493456, total time[s] 0.083268 +Converged at iteration 19, L1 9.55523e-05, Linf 0.00519125, total time[s] 0.052778 +Converged at iteration 22, L1 9.55319e-05, Linf 0.00551792, total time[s] 0.060054 +Converged at iteration 26, L1 9.55948e-05, Linf 0.0060967, total time[s] 0.069151 +Converged at iteration 24, L1 6.33476e-05, Linf 0.00259148, total time[s] 0.065806 +Converged at iteration 21, L1 5.83759e-05, Linf 0.00244001, total time[s] 0.058551 +Converged at iteration 23, L1 8.65269e-05, Linf 0.00286831, total time[s] 0.062759 +Converged at iteration 25, L1 7.10294e-05, Linf 0.00283878, total time[s] 0.066937 +Converged at iteration 26, L1 8.65792e-05, Linf 0.00333139, total time[s] 0.069836 +Converged at iteration 30, L1 9.91209e-05, Linf 0.00714842, total time[s] 0.079378 +Converged at iteration 29, L1 5.91201e-05, Linf 0.00241431, total time[s] 0.076619 +Converged at iteration 30, L1 6.00221e-05, Linf 0.00489513, total time[s] 0.078182 +Converged at iteration 30, L1 5.55598e-05, Linf 0.00155889, total time[s] 0.078744 +Converged at iteration 30, L1 7.53181e-05, Linf 0.00278987, total time[s] 0.079437 +Converged at iteration 32, L1 8.4665e-05, Linf 0.0105197, total time[s] 0.083058 +Converged at iteration 25, L1 6.89847e-05, Linf 0.00233419, total time[s] 0.067209 +Converged at iteration 26, L1 5.6996e-05, Linf 0.00285436, total time[s] 0.072103 +Converged at iteration 23, L1 8.3364e-05, Linf 0.00337992, total time[s] 0.061598 +Converged at iteration 38, L1 6.60566e-05, Linf 0.0120915, total time[s] 0.101666 +Converged at iteration 36, L1 4.03694e-05, Linf 0.00854064, total time[s] 0.101144 +Converged at iteration 24, L1 9.16143e-05, Linf 0.00762998, total time[s] 0.064305 +Converged at iteration 30, L1 6.34189e-05, Linf 0.00625876, total time[s] 0.077187 +Converged at iteration 24, L1 6.11053e-05, Linf 0.00505832, total time[s] 0.062941 +Converged at iteration 22, L1 5.26017e-05, Linf 0.00500306, total time[s] 0.059669 +Converged at iteration 19, L1 8.37363e-05, Linf 0.00871008, total time[s] 0.054848 +Converged at iteration 21, L1 5.13407e-05, Linf 0.00426583, total time[s] 0.058977 +Converged at iteration 23, L1 6.73621e-05, Linf 0.00342425, total time[s] 0.060314 +Converged at iteration 22, L1 6.47995e-05, Linf 0.00500757, total time[s] 0.057468 +Converged at iteration 19, L1 9.62641e-05, Linf 0.00509307, total time[s] 0.05077 +Converged at iteration 17, L1 7.72908e-05, Linf 0.00204326, total time[s] 0.045974 +Converged at iteration 32, L1 4.81142e-05, Linf 0.00498293, total time[s] 0.083352 +Converged at iteration 19, L1 9.58198e-05, Linf 0.00517575, total time[s] 0.052052 +Converged at iteration 22, L1 9.51312e-05, Linf 0.00546849, total time[s] 0.058723 +Converged at iteration 26, L1 9.59204e-05, Linf 0.00613264, total time[s] 0.071432 +Converged at iteration 24, L1 6.40796e-05, Linf 0.00263373, total time[s] 0.063991 +Converged at iteration 21, L1 5.93228e-05, Linf 0.00248966, total time[s] 0.057691 +Converged at iteration 23, L1 8.68648e-05, Linf 0.00286589, total time[s] 0.061398 +Converged at iteration 25, L1 7.08348e-05, Linf 0.00282802, total time[s] 0.066942 +Converged at iteration 26, L1 8.54105e-05, Linf 0.00328649, total time[s] 0.071823 +Converged at iteration 31, L1 5.00056e-05, Linf 0.00453364, total time[s] 0.0805 +Converged at iteration 29, L1 5.9517e-05, Linf 0.00244463, total time[s] 0.075445 +Converged at iteration 30, L1 6.0905e-05, Linf 0.00491923, total time[s] 0.077789 +Converged at iteration 30, L1 5.55821e-05, Linf 0.00156194, total time[s] 0.077825 +Converged at iteration 30, L1 7.97242e-05, Linf 0.00291355, total time[s] 0.079459 +Converged at iteration 32, L1 8.46141e-05, Linf 0.0105935, total time[s] 0.082801 +Converged at iteration 25, L1 6.72846e-05, Linf 0.00221844, total time[s] 0.066081 +Converged at iteration 26, L1 5.77945e-05, Linf 0.00287491, total time[s] 0.068856 +Converged at iteration 23, L1 8.40768e-05, Linf 0.00340504, total time[s] 0.06235 +Converged at iteration 38, L1 6.53344e-05, Linf 0.0121558, total time[s] 0.105778 +Converged at iteration 36, L1 4.02003e-05, Linf 0.00892742, total time[s] 0.092638 +Converged at iteration 24, L1 9.18036e-05, Linf 0.00776196, total time[s] 0.063672 +Converged at iteration 30, L1 6.25556e-05, Linf 0.00624563, total time[s] 0.07805 +Converged at iteration 24, L1 6.07229e-05, Linf 0.0050519, total time[s] 0.063612 +Converged at iteration 22, L1 5.39622e-05, Linf 0.00502398, total time[s] 0.058589 +Converged at iteration 19, L1 8.4752e-05, Linf 0.00884196, total time[s] 0.052409 +Converged at iteration 21, L1 5.15319e-05, Linf 0.00426981, total time[s] 0.056846 +Converged at iteration 23, L1 6.73578e-05, Linf 0.00341946, total time[s] 0.061751 +Converged at iteration 22, L1 6.31813e-05, Linf 0.00491105, total time[s] 0.059397 +Converged at iteration 19, L1 9.7312e-05, Linf 0.00504462, total time[s] 0.056508 +Converged at iteration 17, L1 7.88006e-05, Linf 0.00206619, total time[s] 0.04561 +Converged at iteration 32, L1 4.77546e-05, Linf 0.00503876, total time[s] 0.085655 +Converged at iteration 19, L1 9.61166e-05, Linf 0.00515721, total time[s] 0.05134 +Converged at iteration 22, L1 9.47189e-05, Linf 0.00540637, total time[s] 0.059172 +Converged at iteration 26, L1 9.60106e-05, Linf 0.00616895, total time[s] 0.071572 +Converged at iteration 24, L1 6.49716e-05, Linf 0.00268409, total time[s] 0.063733 +Converged at iteration 21, L1 6.03943e-05, Linf 0.00254909, total time[s] 0.056482 +Converged at iteration 23, L1 8.72295e-05, Linf 0.00286308, total time[s] 0.061699 +Converged at iteration 25, L1 7.12971e-05, Linf 0.00279664, total time[s] 0.083744 +Converged at iteration 26, L1 8.40562e-05, Linf 0.0032396, total time[s] 0.067261 +Converged at iteration 31, L1 5.03077e-05, Linf 0.00444242, total time[s] 0.078182 +Converged at iteration 29, L1 5.98231e-05, Linf 0.00247711, total time[s] 0.074155 +Converged at iteration 30, L1 6.11443e-05, Linf 0.00495239, total time[s] 0.077074 +Converged at iteration 30, L1 5.55608e-05, Linf 0.00156979, total time[s] 0.076605 +Converged at iteration 30, L1 8.05139e-05, Linf 0.0030534, total time[s] 0.07606 +Converged at iteration 32, L1 8.4543e-05, Linf 0.0106836, total time[s] 0.080441 +Converged at iteration 25, L1 6.65379e-05, Linf 0.00212588, total time[s] 0.063887 +Converged at iteration 26, L1 5.67441e-05, Linf 0.00288312, total time[s] 0.067018 +Converged at iteration 23, L1 8.49939e-05, Linf 0.00343482, total time[s] 0.061007 +Converged at iteration 38, L1 6.4326e-05, Linf 0.0122188, total time[s] 0.099064 +Converged at iteration 36, L1 4.02626e-05, Linf 0.00861763, total time[s] 0.093609 +Converged at iteration 24, L1 9.13952e-05, Linf 0.00791852, total time[s] 0.063518 +Converged at iteration 30, L1 6.16083e-05, Linf 0.0062296, total time[s] 0.077661 +Converged at iteration 24, L1 6.03802e-05, Linf 0.00504328, total time[s] 0.064507 +Converged at iteration 22, L1 5.53952e-05, Linf 0.00505024, total time[s] 0.06919 +Converged at iteration 19, L1 8.60478e-05, Linf 0.00892679, total time[s] 0.052485 +Converged at iteration 21, L1 5.12445e-05, Linf 0.00420291, total time[s] 0.05641 +Converged at iteration 23, L1 6.70651e-05, Linf 0.00341537, total time[s] 0.060942 +Converged at iteration 22, L1 6.08843e-05, Linf 0.00479037, total time[s] 0.058846 +Converged at iteration 19, L1 9.78307e-05, Linf 0.00498579, total time[s] 0.051604 +Converged at iteration 17, L1 8.05811e-05, Linf 0.00209322, total time[s] 0.046493 +Converged at iteration 32, L1 4.77622e-05, Linf 0.00510319, total time[s] 0.082343 +Converged at iteration 19, L1 9.56155e-05, Linf 0.00513862, total time[s] 0.050806 +Converged at iteration 22, L1 9.41604e-05, Linf 0.00533181, total time[s] 0.061568 +Converged at iteration 26, L1 9.44299e-05, Linf 0.00621241, total time[s] 0.069138 +Converged at iteration 24, L1 6.60403e-05, Linf 0.00274421, total time[s] 0.063065 +Converged at iteration 21, L1 6.10083e-05, Linf 0.00262017, total time[s] 0.055992 +Converged at iteration 23, L1 8.7687e-05, Linf 0.00286008, total time[s] 0.061609 +Converged at iteration 25, L1 7.04414e-05, Linf 0.00277712, total time[s] 0.067891 +Converged at iteration 26, L1 8.24346e-05, Linf 0.00319287, total time[s] 0.067889 +Converged at iteration 31, L1 5.0857e-05, Linf 0.0043122, total time[s] 0.080749 +Converged at iteration 29, L1 6.01512e-05, Linf 0.0025068, total time[s] 0.075778 +Converged at iteration 30, L1 6.13399e-05, Linf 0.00500178, total time[s] 0.077928 +Converged at iteration 30, L1 5.59008e-05, Linf 0.00158309, total time[s] 0.081424 +Converged at iteration 30, L1 8.41087e-05, Linf 0.00322177, total time[s] 0.077326 +Converged at iteration 32, L1 8.44873e-05, Linf 0.0107924, total time[s] 0.082068 +Converged at iteration 25, L1 6.62372e-05, Linf 0.00200485, total time[s] 0.065476 +Converged at iteration 26, L1 5.65807e-05, Linf 0.00289552, total time[s] 0.068926 +Converged at iteration 23, L1 8.60924e-05, Linf 0.00346964, total time[s] 0.061895 +Converged at iteration 38, L1 6.4112e-05, Linf 0.0121805, total time[s] 0.094055 +Converged at iteration 36, L1 3.95718e-05, Linf 0.00859397, total time[s] 0.093033 +Converged at iteration 24, L1 9.11738e-05, Linf 0.00784033, total time[s] 0.06317 +Converged at iteration 30, L1 6.20802e-05, Linf 0.00623765, total time[s] 0.077562 +Converged at iteration 24, L1 6.05304e-05, Linf 0.00504884, total time[s] 0.062095 +Converged at iteration 22, L1 5.24046e-05, Linf 0.00503783, total time[s] 0.05872 +Converged at iteration 19, L1 8.53722e-05, Linf 0.00889595, total time[s] 0.051627 +Converged at iteration 21, L1 5.12691e-05, Linf 0.00419204, total time[s] 0.056233 +Converged at iteration 23, L1 6.70844e-05, Linf 0.00341726, total time[s] 0.062087 +Converged at iteration 22, L1 6.19682e-05, Linf 0.00485126, total time[s] 0.058724 +Converged at iteration 19, L1 9.75841e-05, Linf 0.00501533, total time[s] 0.050991 +Converged at iteration 17, L1 7.96512e-05, Linf 0.00207955, total time[s] 0.048338 +Converged at iteration 32, L1 4.77385e-05, Linf 0.00507169, total time[s] 0.082135 +Converged at iteration 19, L1 9.58499e-05, Linf 0.00536903, total time[s] 0.051355 +Converged at iteration 22, L1 9.45454e-05, Linf 0.00545699, total time[s] 0.060035 +Converged at iteration 26, L1 9.53601e-05, Linf 0.00619428, total time[s] 0.068275 +Converged at iteration 24, L1 6.54988e-05, Linf 0.00271426, total time[s] 0.06335 +Converged at iteration 21, L1 6.07646e-05, Linf 0.00258467, total time[s] 0.05784 +Converged at iteration 23, L1 8.74607e-05, Linf 0.00286154, total time[s] 0.062541 +Converged at iteration 25, L1 7.02937e-05, Linf 0.00278769, total time[s] 0.065676 +Converged at iteration 26, L1 8.32451e-05, Linf 0.00321477, total time[s] 0.073157 +Converged at iteration 31, L1 5.05753e-05, Linf 0.00439248, total time[s] 0.080587 +Converged at iteration 29, L1 5.99841e-05, Linf 0.00249312, total time[s] 0.075477 +Converged at iteration 30, L1 6.10741e-05, Linf 0.00497575, total time[s] 0.078572 +Converged at iteration 30, L1 5.55659e-05, Linf 0.00157659, total time[s] 0.07754 +Converged at iteration 30, L1 8.19054e-05, Linf 0.00314242, total time[s] 0.077198 +Converged at iteration 32, L1 8.4527e-05, Linf 0.0107382, total time[s] 0.082078 +Converged at iteration 25, L1 6.7116e-05, Linf 0.00206594, total time[s] 0.065383 +Converged at iteration 26, L1 5.65423e-05, Linf 0.00289499, total time[s] 0.0681 +Converged at iteration 23, L1 8.55333e-05, Linf 0.00345238, total time[s] 0.060826 +Converged at iteration 38, L1 6.34106e-05, Linf 0.0122213, total time[s] 0.098337 +Converged at iteration 36, L1 4.03377e-05, Linf 0.00862023, total time[s] 0.097015 +Converged at iteration 24, L1 9.14319e-05, Linf 0.00793478, total time[s] 0.063505 +Converged at iteration 30, L1 6.1715e-05, Linf 0.0062279, total time[s] 0.077513 +Converged at iteration 24, L1 6.04432e-05, Linf 0.00504494, total time[s] 0.072976 +Converged at iteration 22, L1 5.61015e-05, Linf 0.0050528, total time[s] 0.059958 +Converged at iteration 19, L1 8.62315e-05, Linf 0.00893262, total time[s] 0.050882 +Converged at iteration 21, L1 5.15872e-05, Linf 0.00421131, total time[s] 0.055117 +Converged at iteration 23, L1 6.72581e-05, Linf 0.00341541, total time[s] 0.066733 +Converged at iteration 22, L1 6.06758e-05, Linf 0.00477776, total time[s] 0.060176 +Converged at iteration 19, L1 9.78583e-05, Linf 0.00497996, total time[s] 0.051203 +Converged at iteration 17, L1 8.07344e-05, Linf 0.00209587, total time[s] 0.053218 +Converged at iteration 32, L1 4.83312e-05, Linf 0.00505758, total time[s] 0.080778 +Converged at iteration 19, L1 9.62164e-05, Linf 0.00513693, total time[s] 0.051911 +Converged at iteration 22, L1 9.41271e-05, Linf 0.00532447, total time[s] 0.057842 +Converged at iteration 26, L1 9.42634e-05, Linf 0.00622025, total time[s] 0.067281 +Converged at iteration 24, L1 6.61497e-05, Linf 0.00275023, total time[s] 0.062905 +Converged at iteration 21, L1 6.10548e-05, Linf 0.0026273, total time[s] 0.055542 +Converged at iteration 23, L1 8.79251e-05, Linf 0.00286006, total time[s] 0.061356 +Converged at iteration 25, L1 7.00747e-05, Linf 0.00277071, total time[s] 0.065277 +Converged at iteration 26, L1 8.22498e-05, Linf 0.00318876, total time[s] 0.069325 +Converged at iteration 31, L1 5.09452e-05, Linf 0.00429393, total time[s] 0.079271 +Converged at iteration 29, L1 6.02195e-05, Linf 0.00250907, total time[s] 0.073435 +Converged at iteration 30, L1 6.37658e-05, Linf 0.00500977, total time[s] 0.077416 +Converged at iteration 30, L1 5.7201e-05, Linf 0.00158429, total time[s] 0.073915 +Converged at iteration 30, L1 8.46357e-05, Linf 0.00323493, total time[s] 0.074744 +Converged at iteration 32, L1 8.51817e-05, Linf 0.0108017, total time[s] 0.079603 +Converged at iteration 25, L1 6.90312e-05, Linf 0.00198579, total time[s] 0.0637 +Converged at iteration 26, L1 5.86876e-05, Linf 0.00294978, total time[s] 0.070626 +Converged at iteration 23, L1 8.75351e-05, Linf 0.00347312, total time[s] 0.05879 +Converged at iteration 38, L1 6.32263e-05, Linf 0.0122874, total time[s] 0.09317 +Converged at iteration 36, L1 3.93847e-05, Linf 0.00866512, total time[s] 0.089831 +Converged at iteration 24, L1 9.21923e-05, Linf 0.00804925, total time[s] 0.061575 +Converged at iteration 30, L1 6.30615e-05, Linf 0.00621608, total time[s] 0.077438 +Converged at iteration 24, L1 6.23129e-05, Linf 0.0102069, total time[s] 0.062662 +Converged at iteration 22, L1 5.71713e-05, Linf 0.00506684, total time[s] 0.058233 +Converged at iteration 19, L1 8.68819e-05, Linf 0.00900438, total time[s] 0.051058 +Converged at iteration 21, L1 5.20576e-05, Linf 0.0042699, total time[s] 0.055385 +Converged at iteration 23, L1 6.73588e-05, Linf 0.00341153, total time[s] 0.061781 +Converged at iteration 22, L1 6.05984e-05, Linf 0.00468755, total time[s] 0.057171 +Converged at iteration 19, L1 9.87919e-05, Linf 0.00505413, total time[s] 0.050567 +Converged at iteration 17, L1 8.19803e-05, Linf 0.00211507, total time[s] 0.045167 +Converged at iteration 32, L1 4.87304e-05, Linf 0.00507536, total time[s] 0.079669 +Converged at iteration 19, L1 9.61855e-05, Linf 0.0051266, total time[s] 0.079888 +Converged at iteration 22, L1 9.36462e-05, Linf 0.00527237, total time[s] 0.059938 +Converged at iteration 26, L1 9.30159e-05, Linf 0.00625197, total time[s] 0.082364 +Converged at iteration 24, L1 6.69387e-05, Linf 0.00279312, total time[s] 0.079876 +Converged at iteration 21, L1 6.13082e-05, Linf 0.00267837, total time[s] 0.07155 +Converged at iteration 23, L1 8.81277e-05, Linf 0.00285796, total time[s] 0.075728 +Converged at iteration 25, L1 6.98284e-05, Linf 0.00276027, total time[s] 0.108182 +Converged at iteration 26, L1 8.10638e-05, Linf 0.00316212, total time[s] 0.073234 +Converged at iteration 31, L1 5.16083e-05, Linf 0.00416074, total time[s] 0.082244 +Converged at iteration 29, L1 6.05595e-05, Linf 0.00252555, total time[s] 0.086159 +Converged at iteration 30, L1 6.15655e-05, Linf 0.0050448, total time[s] 0.080115 +Converged at iteration 30, L1 5.55572e-05, Linf 0.00159072, total time[s] 0.08297 +Converged at iteration 30, L1 8.68649e-05, Linf 0.00335931, total time[s] 0.078841 +Converged at iteration 32, L1 8.44455e-05, Linf 0.0108829, total time[s] 0.082365 +Converged at iteration 25, L1 6.61048e-05, Linf 0.00186982, total time[s] 0.065575 +Converged at iteration 26, L1 5.6446e-05, Linf 0.00284841, total time[s] 0.06827 +Converged at iteration 23, L1 8.70507e-05, Linf 0.00349705, total time[s] 0.061091 +Converged at iteration 38, L1 6.14e-05, Linf 0.0123196, total time[s] 0.100038 +Converged at iteration 35, L1 9.93701e-05, Linf 0.0123904, total time[s] 0.091286 +Converged at iteration 24, L1 9.16361e-05, Linf 0.00818794, total time[s] 0.06489 +Converged at iteration 30, L1 6.03703e-05, Linf 0.00620188, total time[s] 0.078931 +Converged at iteration 24, L1 5.98518e-05, Linf 0.00504038, total time[s] 0.063833 +Converged at iteration 22, L1 5.20517e-05, Linf 0.00508471, total time[s] 0.061814 +Converged at iteration 19, L1 8.7899e-05, Linf 0.00918067, total time[s] 0.052652 +Converged at iteration 21, L1 5.27945e-05, Linf 0.0042992, total time[s] 0.058522 +Converged at iteration 23, L1 6.71862e-05, Linf 0.00340332, total time[s] 0.065335 +Converged at iteration 22, L1 5.80175e-05, Linf 0.00457603, total time[s] 0.061701 +Converged at iteration 19, L1 9.83662e-05, Linf 0.00488529, total time[s] 0.053557 +Converged at iteration 17, L1 8.34889e-05, Linf 0.00213849, total time[s] 0.049719 +Converged at iteration 32, L1 4.76165e-05, Linf 0.00520944, total time[s] 0.086948 +Converged at iteration 19, L1 9.56866e-05, Linf 0.00511466, total time[s] 0.052862 +Converged at iteration 22, L1 9.34134e-05, Linf 0.00521304, total time[s] 0.059644 +Converged at iteration 26, L1 9.20602e-05, Linf 0.00628613, total time[s] 0.072794 +Converged at iteration 24, L1 6.78509e-05, Linf 0.00284403, total time[s] 0.064766 +Converged at iteration 21, L1 6.13611e-05, Linf 0.00273955, total time[s] 0.057954 +Converged at iteration 23, L1 8.84326e-05, Linf 0.00285562, total time[s] 0.062981 +Converged at iteration 25, L1 6.9355e-05, Linf 0.00274062, total time[s] 0.067566 +Converged at iteration 26, L1 7.96569e-05, Linf 0.00313336, total time[s] 0.070026 +Converged at iteration 31, L1 5.2046e-05, Linf 0.00399778, total time[s] 0.082177 +Converged at iteration 29, L1 6.07511e-05, Linf 0.00254721, total time[s] 0.07781 +Converged at iteration 30, L1 6.21914e-05, Linf 0.00508361, total time[s] 0.079019 +Converged at iteration 30, L1 5.55661e-05, Linf 0.00159611, total time[s] 0.079106 +Converged at iteration 30, L1 8.95886e-05, Linf 0.00350123, total time[s] 0.079155 +Converged at iteration 32, L1 8.4395e-05, Linf 0.0109784, total time[s] 0.084447 +Converged at iteration 25, L1 6.59946e-05, Linf 0.00170386, total time[s] 0.066641 +Converged at iteration 26, L1 5.62239e-05, Linf 0.00285576, total time[s] 0.069929 +Converged at iteration 23, L1 8.80381e-05, Linf 0.0035229, total time[s] 0.062697 +Converged at iteration 38, L1 6.01287e-05, Linf 0.0123833, total time[s] 0.099418 +Converged at iteration 35, L1 9.87185e-05, Linf 0.0125163, total time[s] 0.132765 +Converged at iteration 24, L1 9.22187e-05, Linf 0.00842187, total time[s] 0.067646 +Converged at iteration 30, L1 5.90183e-05, Linf 0.00611322, total time[s] 0.080178 +Converged at iteration 24, L1 5.95446e-05, Linf 0.00503713, total time[s] 0.06533 +Converged at iteration 22, L1 5.17632e-05, Linf 0.00510323, total time[s] 0.063319 +Converged at iteration 19, L1 8.91719e-05, Linf 0.00940641, total time[s] 0.054133 +Converged at iteration 21, L1 5.39779e-05, Linf 0.00441171, total time[s] 0.056702 +Converged at iteration 23, L1 6.65933e-05, Linf 0.0033987, total time[s] 0.063247 +Converged at iteration 22, L1 5.58371e-05, Linf 0.00443774, total time[s] 0.0604 +Converged at iteration 19, L1 9.88958e-05, Linf 0.00482187, total time[s] 0.055554 +Converged at iteration 17, L1 8.54158e-05, Linf 0.00216682, total time[s] 0.056302 +Converged at iteration 32, L1 4.75646e-05, Linf 0.00526978, total time[s] 0.085051 +Converged at iteration 19, L1 9.49726e-05, Linf 0.00510237, total time[s] 0.053798 +Converged at iteration 22, L1 9.26697e-05, Linf 0.00522996, total time[s] 0.061788 +Converged at iteration 26, L1 9.16009e-05, Linf 0.00632283, total time[s] 0.068917 +Converged at iteration 24, L1 6.90289e-05, Linf 0.00290674, total time[s] 0.064558 +Converged at iteration 21, L1 6.13826e-05, Linf 0.00281281, total time[s] 0.058367 +Converged at iteration 23, L1 8.86711e-05, Linf 0.00285389, total time[s] 0.062161 +Converged at iteration 25, L1 6.86768e-05, Linf 0.00273198, total time[s] 0.068773 +Converged at iteration 26, L1 7.80805e-05, Linf 0.00310035, total time[s] 0.071232 +Converged at iteration 31, L1 5.27993e-05, Linf 0.0042018, total time[s] 0.088191 +Converged at iteration 29, L1 6.116e-05, Linf 0.00258485, total time[s] 0.076712 +Converged at iteration 30, L1 6.22193e-05, Linf 0.00514488, total time[s] 0.079026 +Converged at iteration 30, L1 5.56119e-05, Linf 0.0016015, total time[s] 0.08022 +Converged at iteration 30, L1 9.34365e-05, Linf 0.00367039, total time[s] 0.079372 +Converged at iteration 32, L1 8.43381e-05, Linf 0.011094, total time[s] 0.081791 +Converged at iteration 24, L1 9.98204e-05, Linf 0.00365491, total time[s] 0.062424 +Converged at iteration 26, L1 5.62315e-05, Linf 0.00295347, total time[s] 0.067974 +Converged at iteration 23, L1 8.93384e-05, Linf 0.00354899, total time[s] 0.062271 +Converged at iteration 38, L1 6.07774e-05, Linf 0.0123464, total time[s] 0.095933 +Converged at iteration 35, L1 9.90123e-05, Linf 0.0124543, total time[s] 0.09502 +Converged at iteration 24, L1 9.19145e-05, Linf 0.00827028, total time[s] 0.06529 +Converged at iteration 30, L1 6.02921e-05, Linf 0.00619314, total time[s] 0.080996 +Converged at iteration 24, L1 5.96783e-05, Linf 0.00503803, total time[s] 0.065537 +Converged at iteration 22, L1 5.21219e-05, Linf 0.00509428, total time[s] 0.059854 +Converged at iteration 19, L1 8.86212e-05, Linf 0.009291, total time[s] 0.053358 +Converged at iteration 21, L1 5.28767e-05, Linf 0.00432762, total time[s] 0.059815 +Converged at iteration 23, L1 6.72202e-05, Linf 0.00340022, total time[s] 0.063666 +Converged at iteration 22, L1 5.69036e-05, Linf 0.00450735, total time[s] 0.060079 +Converged at iteration 19, L1 9.8577e-05, Linf 0.00485363, total time[s] 0.055992 +Converged at iteration 17, L1 8.43521e-05, Linf 0.00215209, total time[s] 0.048803 +Converged at iteration 32, L1 4.75857e-05, Linf 0.00524018, total time[s] 0.083978 +Converged at iteration 19, L1 9.55201e-05, Linf 0.00501742, total time[s] 0.053232 +Converged at iteration 22, L1 9.31624e-05, Linf 0.00517907, total time[s] 0.062199 +Converged at iteration 26, L1 9.173e-05, Linf 0.00630086, total time[s] 0.070737 +Converged at iteration 24, L1 6.8442e-05, Linf 0.00287487, total time[s] 0.069268 +Converged at iteration 21, L1 6.13834e-05, Linf 0.00277621, total time[s] 0.058021 +Converged at iteration 23, L1 8.86576e-05, Linf 0.00285472, total time[s] 0.063258 +Converged at iteration 25, L1 6.89811e-05, Linf 0.00273508, total time[s] 0.068155 +Converged at iteration 26, L1 7.8884e-05, Linf 0.00311696, total time[s] 0.07005 +Converged at iteration 31, L1 5.24602e-05, Linf 0.00408352, total time[s] 0.082658 +Converged at iteration 29, L1 6.09236e-05, Linf 0.00256251, total time[s] 0.076838 +Converged at iteration 30, L1 6.20316e-05, Linf 0.0051119, total time[s] 0.080862 +Converged at iteration 30, L1 5.55768e-05, Linf 0.00159887, total time[s] 0.080893 +Converged at iteration 30, L1 9.06228e-05, Linf 0.00358637, total time[s] 0.07934 +Converged at iteration 32, L1 8.43733e-05, Linf 0.0110365, total time[s] 0.084016 +Converged at iteration 25, L1 6.60059e-05, Linf 0.00172589, total time[s] 0.067146 +Converged at iteration 26, L1 5.62827e-05, Linf 0.00294411, total time[s] 0.069711 +Converged at iteration 23, L1 8.86398e-05, Linf 0.0035367, total time[s] 0.062704 +Converged at iteration 38, L1 6.00155e-05, Linf 0.0123841, total time[s] 0.101005 +Converged at iteration 35, L1 9.85757e-05, Linf 0.0125306, total time[s] 0.091379 +Converged at iteration 24, L1 9.22422e-05, Linf 0.0083675, total time[s] 0.064791 +Converged at iteration 30, L1 5.89273e-05, Linf 0.00618269, total time[s] 0.083729 +Converged at iteration 24, L1 5.94824e-05, Linf 0.00503708, total time[s] 0.064681 +Converged at iteration 22, L1 5.17385e-05, Linf 0.00510362, total time[s] 0.060319 +Converged at iteration 19, L1 8.93137e-05, Linf 0.00941945, total time[s] 0.053613 +Converged at iteration 21, L1 5.418e-05, Linf 0.00442828, total time[s] 0.058489 +Converged at iteration 23, L1 6.66274e-05, Linf 0.00346654, total time[s] 0.063726 +Converged at iteration 22, L1 5.56649e-05, Linf 0.00442219, total time[s] 0.058173 +Converged at iteration 19, L1 9.89483e-05, Linf 0.00481567, total time[s] 0.053818 +Converged at iteration 17, L1 8.53312e-05, Linf 0.00216947, total time[s] 0.048857 +Converged at iteration 32, L1 4.75608e-05, Linf 0.00527576, total time[s] 0.117216 +Converged at iteration 19, L1 9.49833e-05, Linf 0.00507037, total time[s] 0.052238 +Converged at iteration 22, L1 9.27055e-05, Linf 0.00560423, total time[s] 0.067597 +Converged at iteration 26, L1 9.15134e-05, Linf 0.00632353, total time[s] 0.067197 +Converged at iteration 24, L1 6.91479e-05, Linf 0.00291322, total time[s] 0.068188 +Converged at iteration 21, L1 6.13702e-05, Linf 0.00282015, total time[s] 0.055236 +Converged at iteration 23, L1 8.88486e-05, Linf 0.00285367, total time[s] 0.062704 +Converged at iteration 25, L1 6.87073e-05, Linf 0.00273048, total time[s] 0.064966 +Converged at iteration 26, L1 7.78359e-05, Linf 0.00309706, total time[s] 0.068114 +Converged at iteration 31, L1 5.28584e-05, Linf 0.00423347, total time[s] 0.08158 +Converged at iteration 29, L1 6.122e-05, Linf 0.00259273, total time[s] 0.076064 +Converged at iteration 30, L1 6.2268e-05, Linf 0.00515262, total time[s] 0.077907 +Converged at iteration 30, L1 5.56237e-05, Linf 0.00160211, total time[s] 0.081654 +Converged at iteration 30, L1 9.40019e-05, Linf 0.00368697, total time[s] 0.078305 +Converged at iteration 32, L1 8.43453e-05, Linf 0.0111062, total time[s] 0.084024 +Converged at iteration 24, L1 9.97671e-05, Linf 0.00362586, total time[s] 0.062902 +Converged at iteration 26, L1 5.62063e-05, Linf 0.00286846, total time[s] 0.069209 +Converged at iteration 23, L1 8.94162e-05, Linf 0.00355146, total time[s] 0.069477 +Converged at iteration 38, L1 5.91309e-05, Linf 0.0124284, total time[s] 0.105818 +Converged at iteration 35, L1 9.80395e-05, Linf 0.0126237, total time[s] 0.112614 +Converged at iteration 24, L1 9.23435e-05, Linf 0.00840674, total time[s] 0.064112 +Converged at iteration 30, L1 5.90321e-05, Linf 0.00626907, total time[s] 0.079016 +Converged at iteration 24, L1 5.92712e-05, Linf 0.00503676, total time[s] 0.070924 +Converged at iteration 22, L1 5.15528e-05, Linf 0.00511455, total time[s] 0.072959 +Converged at iteration 19, L1 9.02931e-05, Linf 0.00956721, total time[s] 0.051975 +Converged at iteration 21, L1 5.48835e-05, Linf 0.00449093, total time[s] 0.055884 +Converged at iteration 23, L1 6.65676e-05, Linf 0.00339481, total time[s] 0.061039 +Converged at iteration 22, L1 5.47195e-05, Linf 0.00432072, total time[s] 0.058872 +Converged at iteration 19, L1 9.96192e-05, Linf 0.00476952, total time[s] 0.050876 +Converged at iteration 17, L1 8.66357e-05, Linf 0.00219134, total time[s] 0.04677 +Converged at iteration 32, L1 4.75152e-05, Linf 0.00531657, total time[s] 0.095163 +Converged at iteration 19, L1 9.52352e-05, Linf 0.0050938, total time[s] 0.052397 +Converged at iteration 22, L1 9.23256e-05, Linf 0.00548369, total time[s] 0.066105 +Converged at iteration 26, L1 9.15174e-05, Linf 0.00634974, total time[s] 0.072532 +Converged at iteration 24, L1 7.0137e-05, Linf 0.0029608, total time[s] 0.065741 +Converged at iteration 21, L1 6.15356e-05, Linf 0.00287286, total time[s] 0.065679 +Converged at iteration 23, L1 8.89758e-05, Linf 0.0028522, total time[s] 0.074242 +Converged at iteration 25, L1 6.8296e-05, Linf 0.00272436, total time[s] 0.067671 +Converged at iteration 26, L1 7.66479e-05, Linf 0.00305814, total time[s] 0.070222 +Converged at iteration 31, L1 5.32447e-05, Linf 0.00426307, total time[s] 0.081672 +Converged at iteration 29, L1 6.15971e-05, Linf 0.0026238, total time[s] 0.076925 +Converged at iteration 30, L1 6.25157e-05, Linf 0.00521089, total time[s] 0.079478 +Converged at iteration 30, L1 5.5663e-05, Linf 0.00160596, total time[s] 0.079472 +Converged at iteration 30, L1 9.65662e-05, Linf 0.00380878, total time[s] 0.079203 +Converged at iteration 32, L1 8.43197e-05, Linf 0.0111909, total time[s] 0.083739 +Converged at iteration 24, L1 9.91643e-05, Linf 0.00352813, total time[s] 0.067326 +Converged at iteration 26, L1 5.61492e-05, Linf 0.00296967, total time[s] 0.068996 +Converged at iteration 23, L1 9.0328e-05, Linf 0.00356607, total time[s] 0.066603 +Converged at iteration 38, L1 5.80632e-05, Linf 0.012472, total time[s] 0.098814 +Converged at iteration 35, L1 9.72815e-05, Linf 0.0127309, total time[s] 0.092488 +Converged at iteration 24, L1 9.14624e-05, Linf 0.00862692, total time[s] 0.063708 +Converged at iteration 30, L1 5.73366e-05, Linf 0.00615465, total time[s] 0.080445 +Converged at iteration 24, L1 5.90325e-05, Linf 0.00503743, total time[s] 0.064498 +Converged at iteration 22, L1 5.13477e-05, Linf 0.00512442, total time[s] 0.060461 +Converged at iteration 19, L1 9.14387e-05, Linf 0.00975369, total time[s] 0.052298 +Converged at iteration 21, L1 5.54702e-05, Linf 0.00450046, total time[s] 0.061053 +Converged at iteration 23, L1 6.68632e-05, Linf 0.00339102, total time[s] 0.067736 +Converged at iteration 22, L1 5.33627e-05, Linf 0.00419612, total time[s] 0.05997 +Converged at iteration 19, L1 9.92932e-05, Linf 0.00471361, total time[s] 0.05444 +Converged at iteration 17, L1 8.81487e-05, Linf 0.00221613, total time[s] 0.050199 +Converged at iteration 32, L1 4.74874e-05, Linf 0.00536315, total time[s] 0.084875 +Converged at iteration 19, L1 9.51517e-05, Linf 0.0050848, total time[s] 0.052732 +Converged at iteration 22, L1 9.18334e-05, Linf 0.00505193, total time[s] 0.060269 +Converged at iteration 26, L1 9.12664e-05, Linf 0.00637955, total time[s] 0.069439 +Converged at iteration 24, L1 7.12966e-05, Linf 0.00302168, total time[s] 0.06687 +Converged at iteration 21, L1 6.21499e-05, Linf 0.00293602, total time[s] 0.061178 +Converged at iteration 23, L1 8.92253e-05, Linf 0.00285073, total time[s] 0.063046 +Converged at iteration 25, L1 6.782e-05, Linf 0.0027192, total time[s] 0.067478 +Converged at iteration 26, L1 7.52373e-05, Linf 0.00303392, total time[s] 0.069694 +Converged at iteration 31, L1 5.38015e-05, Linf 0.00414926, total time[s] 0.082278 +Converged at iteration 29, L1 6.21286e-05, Linf 0.00266209, total time[s] 0.077896 +Converged at iteration 30, L1 6.28034e-05, Linf 0.00527928, total time[s] 0.079156 +Converged at iteration 30, L1 5.57326e-05, Linf 0.00160972, total time[s] 0.079138 +Converged at iteration 30, L1 9.97925e-05, Linf 0.00395377, total time[s] 0.079348 +Converged at iteration 32, L1 8.42822e-05, Linf 0.0112933, total time[s] 0.084183 +Converged at iteration 24, L1 9.85283e-05, Linf 0.00338902, total time[s] 0.066555 +Converged at iteration 26, L1 5.60404e-05, Linf 0.00298667, total time[s] 0.067722 +Converged at iteration 23, L1 9.14905e-05, Linf 0.00358007, total time[s] 0.060755 +Converged at iteration 38, L1 5.68436e-05, Linf 0.0127317, total time[s] 0.108318 +Converged at iteration 35, L1 9.65115e-05, Linf 0.0128659, total time[s] 0.161503 +Converged at iteration 24, L1 9.18687e-05, Linf 0.00879922, total time[s] 0.063402 +Converged at iteration 30, L1 5.62679e-05, Linf 0.00613748, total time[s] 0.078279 +Converged at iteration 24, L1 5.88099e-05, Linf 0.00503908, total time[s] 0.06476 +Converged at iteration 22, L1 5.10618e-05, Linf 0.00513373, total time[s] 0.059813 +Converged at iteration 19, L1 9.28886e-05, Linf 0.0106138, total time[s] 0.052702 +Converged at iteration 21, L1 5.63999e-05, Linf 0.00465234, total time[s] 0.057348 +Converged at iteration 23, L1 6.69225e-05, Linf 0.00340281, total time[s] 0.065339 +Converged at iteration 22, L1 5.18229e-05, Linf 0.00404337, total time[s] 0.060259 +Converged at iteration 19, L1 9.98244e-05, Linf 0.00464596, total time[s] 0.0543 +Converged at iteration 17, L1 9.00694e-05, Linf 0.00224733, total time[s] 0.048585 +Converged at iteration 32, L1 4.74828e-05, Linf 0.00541647, total time[s] 0.086127 +Converged at iteration 19, L1 9.47554e-05, Linf 0.00507619, total time[s] 0.052302 +Converged at iteration 22, L1 9.15768e-05, Linf 0.00507747, total time[s] 0.060322 +Converged at iteration 26, L1 9.10501e-05, Linf 0.00641381, total time[s] 0.069957 +Converged at iteration 24, L1 7.25943e-05, Linf 0.00309443, total time[s] 0.0656 +Converged at iteration 21, L1 6.29208e-05, Linf 0.00301174, total time[s] 0.058684 +Converged at iteration 23, L1 8.94518e-05, Linf 0.00284521, total time[s] 0.065591 +Converged at iteration 25, L1 6.74152e-05, Linf 0.00271415, total time[s] 0.06911 +Converged at iteration 26, L1 7.34397e-05, Linf 0.00300122, total time[s] 0.072144 +Converged at iteration 31, L1 5.45936e-05, Linf 0.00394934, total time[s] 0.082117 +Converged at iteration 29, L1 6.27199e-05, Linf 0.00270735, total time[s] 0.076472 +Converged at iteration 30, L1 6.31774e-05, Linf 0.00537543, total time[s] 0.079111 +Converged at iteration 30, L1 5.58209e-05, Linf 0.00161236, total time[s] 0.079126 +Converged at iteration 31, L1 3.91965e-05, Linf 0.00183768, total time[s] 0.081013 +Converged at iteration 32, L1 8.42566e-05, Linf 0.0114163, total time[s] 0.084002 +Converged at iteration 24, L1 9.98246e-05, Linf 0.00320448, total time[s] 0.064302 +Converged at iteration 26, L1 5.5956e-05, Linf 0.0028925, total time[s] 0.069744 +Converged at iteration 23, L1 9.2886e-05, Linf 0.00359236, total time[s] 0.061798 +Converged at iteration 38, L1 5.74449e-05, Linf 0.0125026, total time[s] 0.099128 +Converged at iteration 35, L1 9.69038e-05, Linf 0.0128018, total time[s] 0.091846 +Converged at iteration 24, L1 9.1606e-05, Linf 0.00871193, total time[s] 0.065493 +Converged at iteration 30, L1 5.69083e-05, Linf 0.00614528, total time[s] 0.07835 +Converged at iteration 24, L1 5.90279e-05, Linf 0.00503835, total time[s] 0.064532 +Converged at iteration 22, L1 5.12032e-05, Linf 0.00513013, total time[s] 0.060252 +Converged at iteration 19, L1 9.20732e-05, Linf 0.0100498, total time[s] 0.053484 +Converged at iteration 21, L1 5.55746e-05, Linf 0.00457312, total time[s] 0.057564 +Converged at iteration 23, L1 6.71043e-05, Linf 0.00338836, total time[s] 0.062465 +Converged at iteration 22, L1 5.25289e-05, Linf 0.00411993, total time[s] 0.060383 +Converged at iteration 19, L1 9.93648e-05, Linf 0.00467987, total time[s] 0.053216 +Converged at iteration 17, L1 8.91681e-05, Linf 0.00223231, total time[s] 0.05298 +Converged at iteration 32, L1 4.74773e-05, Linf 0.00539021, total time[s] 0.093247 +Converged at iteration 19, L1 9.50008e-05, Linf 0.00508026, total time[s] 0.054756 +Converged at iteration 22, L1 9.17183e-05, Linf 0.00502624, total time[s] 0.065591 +Converged at iteration 26, L1 9.12633e-05, Linf 0.00639782, total time[s] 0.071149 +Converged at iteration 24, L1 7.1891e-05, Linf 0.00305813, total time[s] 0.064809 +Converged at iteration 21, L1 6.24776e-05, Linf 0.00297391, total time[s] 0.057646 +Converged at iteration 23, L1 8.93414e-05, Linf 0.00285, total time[s] 0.063477 +Converged at iteration 25, L1 6.76043e-05, Linf 0.0027185, total time[s] 0.071047 +Converged at iteration 26, L1 7.43236e-05, Linf 0.00300989, total time[s] 0.07047 +Converged at iteration 31, L1 5.41854e-05, Linf 0.00403632, total time[s] 0.081794 +Converged at iteration 29, L1 6.24222e-05, Linf 0.00268433, total time[s] 0.076761 +Converged at iteration 30, L1 6.2982e-05, Linf 0.00532582, total time[s] 0.078693 +Converged at iteration 30, L1 5.57942e-05, Linf 0.00161138, total time[s] 0.078856 +Converged at iteration 31, L1 3.93772e-05, Linf 0.00178626, total time[s] 0.08167 +Converged at iteration 32, L1 8.42936e-05, Linf 0.0115529, total time[s] 0.08441 +Converged at iteration 24, L1 9.81793e-05, Linf 0.00329624, total time[s] 0.065797 +Converged at iteration 26, L1 5.59914e-05, Linf 0.00290419, total time[s] 0.08163 +Converged at iteration 23, L1 9.21892e-05, Linf 0.00358706, total time[s] 0.069241 +Converged at iteration 38, L1 5.68368e-05, Linf 0.012528, total time[s] 0.274829 +Converged at iteration 35, L1 9.74778e-05, Linf 0.0128777, total time[s] 0.242349 +Converged at iteration 24, L1 9.18433e-05, Linf 0.00881672, total time[s] 0.077907 +Converged at iteration 30, L1 5.62862e-05, Linf 0.00613393, total time[s] 0.081782 +Converged at iteration 24, L1 5.94967e-05, Linf 0.00504043, total time[s] 0.06856 +Converged at iteration 22, L1 5.11565e-05, Linf 0.00513369, total time[s] 0.059261 +Converged at iteration 19, L1 9.3103e-05, Linf 0.0105408, total time[s] 0.052778 +Converged at iteration 21, L1 5.6349e-05, Linf 0.00466448, total time[s] 0.056959 +Converged at iteration 23, L1 6.68545e-05, Linf 0.00338609, total time[s] 0.061794 +Converged at iteration 22, L1 5.16949e-05, Linf 0.00402754, total time[s] 0.060529 +Converged at iteration 19, L1 9.99309e-05, Linf 0.00463896, total time[s] 0.052102 +Converged at iteration 17, L1 9.02167e-05, Linf 0.0022496, total time[s] 0.050016 +Converged at iteration 32, L1 4.7701e-05, Linf 0.00542183, total time[s] 0.085111 +Converged at iteration 19, L1 9.51476e-05, Linf 0.00508396, total time[s] 0.052336 +Converged at iteration 22, L1 9.14837e-05, Linf 0.00499854, total time[s] 0.067283 +Converged at iteration 26, L1 9.10347e-05, Linf 0.00641702, total time[s] 0.070279 +Converged at iteration 24, L1 7.28854e-05, Linf 0.00310181, total time[s] 0.064273 +Converged at iteration 21, L1 6.30169e-05, Linf 0.00301934, total time[s] 0.057879 +Converged at iteration 23, L1 8.95476e-05, Linf 0.0028492, total time[s] 0.062431 +Converged at iteration 25, L1 6.73964e-05, Linf 0.00272095, total time[s] 0.067056 +Converged at iteration 26, L1 7.32494e-05, Linf 0.0029789, total time[s] 0.070682 +Converged at iteration 31, L1 5.47802e-05, Linf 0.00394927, total time[s] 0.080602 +Converged at iteration 29, L1 6.29086e-05, Linf 0.00271271, total time[s] 0.073956 +Converged at iteration 30, L1 6.32316e-05, Linf 0.00538593, total time[s] 0.076215 +Converged at iteration 30, L1 5.58578e-05, Linf 0.001613, total time[s] 0.076152 +Converged at iteration 31, L1 3.97159e-05, Linf 0.00184826, total time[s] 0.078308 +Converged at iteration 32, L1 8.42701e-05, Linf 0.0114289, total time[s] 0.080603 +Converged at iteration 24, L1 9.78175e-05, Linf 0.00319601, total time[s] 0.063165 +Converged at iteration 26, L1 5.59798e-05, Linf 0.0030095, total time[s] 0.11408 +Converged at iteration 23, L1 9.30222e-05, Linf 0.00359333, total time[s] 0.063004 +Converged at iteration 38, L1 5.57895e-05, Linf 0.0125602, total time[s] 0.096485 +Converged at iteration 35, L1 9.60822e-05, Linf 0.0129747, total time[s] 0.09415 +Converged at iteration 24, L1 9.15978e-05, Linf 0.00894075, total time[s] 0.063132 +Converged at iteration 30, L1 5.57558e-05, Linf 0.00612022, total time[s] 0.076711 +Converged at iteration 24, L1 5.8754e-05, Linf 0.0050434, total time[s] 0.063082 +Converged at iteration 22, L1 5.08671e-05, Linf 0.00513763, total time[s] 0.05781 +Converged at iteration 19, L1 9.42123e-05, Linf 0.0108401, total time[s] 0.050606 +Converged at iteration 21, L1 5.69943e-05, Linf 0.00474999, total time[s] 0.056166 +Converged at iteration 23, L1 6.66948e-05, Linf 0.00338536, total time[s] 0.06096 +Converged at iteration 22, L1 5.08735e-05, Linf 0.00391506, total time[s] 0.058859 +Converged at iteration 20, L1 4.83496e-05, Linf 0.0024567, total time[s] 0.05352 +Converged at iteration 17, L1 9.16295e-05, Linf 0.00227066, total time[s] 0.045838 +Converged at iteration 32, L1 4.75092e-05, Linf 0.00545892, total time[s] 0.080927 +Converged at iteration 19, L1 9.53967e-05, Linf 0.00507333, total time[s] 0.050432 +Converged at iteration 22, L1 9.12589e-05, Linf 0.00496782, total time[s] 0.057593 +Converged at iteration 26, L1 9.08455e-05, Linf 0.00643964, total time[s] 0.06727 +Converged at iteration 24, L1 7.4645e-05, Linf 0.00573772, total time[s] 0.063028 +Converged at iteration 21, L1 6.35664e-05, Linf 0.0030717, total time[s] 0.055807 +Converged at iteration 23, L1 9.04255e-05, Linf 0.00284863, total time[s] 0.059842 +Converged at iteration 25, L1 6.75618e-05, Linf 0.00273391, total time[s] 0.064432 +Converged at iteration 26, L1 7.20086e-05, Linf 0.00295799, total time[s] 0.068915 +Converged at iteration 31, L1 5.53342e-05, Linf 0.00382167, total time[s] 0.082207 +Converged at iteration 29, L1 6.31905e-05, Linf 0.0027432, total time[s] 0.076364 +Converged at iteration 30, L1 6.35e-05, Linf 0.00546308, total time[s] 0.078718 +Converged at iteration 30, L1 5.59386e-05, Linf 0.00161476, total time[s] 0.077011 +Converged at iteration 31, L1 4.06799e-05, Linf 0.00192285, total time[s] 0.080613 +Converged at iteration 32, L1 8.42218e-05, Linf 0.0115201, total time[s] 0.085231 +Converged at iteration 24, L1 9.74485e-05, Linf 0.00306437, total time[s] 0.064553 +Converged at iteration 26, L1 5.69292e-05, Linf 0.0030296, total time[s] 0.069651 +Converged at iteration 23, L1 9.41837e-05, Linf 0.00359892, total time[s] 0.063194 +Converged at iteration 38, L1 5.47188e-05, Linf 0.0126003, total time[s] 0.100106 +Converged at iteration 35, L1 9.55297e-05, Linf 0.0130984, total time[s] 0.092581 +Converged at iteration 24, L1 9.10874e-05, Linf 0.00908908, total time[s] 0.06477 +Converged at iteration 29, L1 9.93349e-05, Linf 0.00753601, total time[s] 0.07763 +Converged at iteration 24, L1 5.84562e-05, Linf 0.00504833, total time[s] 0.065279 +Converged at iteration 22, L1 5.05861e-05, Linf 0.00513931, total time[s] 0.060419 +Converged at iteration 19, L1 9.57902e-05, Linf 0.0109954, total time[s] 0.052937 +Converged at iteration 21, L1 5.7456e-05, Linf 0.00479166, total time[s] 0.057724 +Converged at iteration 23, L1 6.71039e-05, Linf 0.00338644, total time[s] 0.062219 +Converged at iteration 22, L1 4.96327e-05, Linf 0.00377894, total time[s] 0.060469 +Converged at iteration 20, L1 4.82694e-05, Linf 0.00238879, total time[s] 0.055703 +Converged at iteration 17, L1 9.33336e-05, Linf 0.00229838, total time[s] 0.048671 +Converged at iteration 32, L1 4.75314e-05, Linf 0.00550283, total time[s] 0.084089 +Converged at iteration 19, L1 9.44384e-05, Linf 0.00506505, total time[s] 0.053113 +Converged at iteration 22, L1 9.08557e-05, Linf 0.00493894, total time[s] 0.060599 +Converged at iteration 26, L1 9.04946e-05, Linf 0.00646166, total time[s] 0.0698 +Converged at iteration 24, L1 7.5012e-05, Linf 0.003218, total time[s] 0.064737 +Converged at iteration 21, L1 6.38705e-05, Linf 0.003119, total time[s] 0.057821 +Converged at iteration 23, L1 8.9917e-05, Linf 0.00284775, total time[s] 0.062474 +Converged at iteration 25, L1 6.66522e-05, Linf 0.00277601, total time[s] 0.067356 +Converged at iteration 26, L1 7.05085e-05, Linf 0.00289509, total time[s] 0.069862 +Converged at iteration 31, L1 5.62015e-05, Linf 0.00417639, total time[s] 0.081088 +Converged at iteration 29, L1 6.37035e-05, Linf 0.00277634, total time[s] 0.075899 +Converged at iteration 30, L1 6.38185e-05, Linf 0.00555343, total time[s] 0.080663 +Converged at iteration 30, L1 5.60479e-05, Linf 0.00161684, total time[s] 0.078362 +Converged at iteration 31, L1 4.2888e-05, Linf 0.00201424, total time[s] 0.081759 +Converged at iteration 32, L1 8.42118e-05, Linf 0.0116291, total time[s] 0.0918 +Converged at iteration 24, L1 9.74989e-05, Linf 0.00290201, total time[s] 0.068513 +Converged at iteration 26, L1 5.59941e-05, Linf 0.0030421, total time[s] 0.071861 +Converged at iteration 23, L1 9.55026e-05, Linf 0.00360582, total time[s] 0.062637 +Converged at iteration 38, L1 5.52628e-05, Linf 0.0125828, total time[s] 0.098161 +Converged at iteration 35, L1 9.62905e-05, Linf 0.0130375, total time[s] 0.093404 +Converged at iteration 24, L1 9.1357e-05, Linf 0.00901507, total time[s] 0.064946 +Converged at iteration 30, L1 5.49976e-05, Linf 0.00611185, total time[s] 0.079038 +Converged at iteration 24, L1 5.85476e-05, Linf 0.00504562, total time[s] 0.064867 +Converged at iteration 22, L1 5.28261e-05, Linf 0.00513848, total time[s] 0.061174 +Converged at iteration 19, L1 9.51958e-05, Linf 0.0109175, total time[s] 0.055295 +Converged at iteration 21, L1 5.73403e-05, Linf 0.00477708, total time[s] 0.067984 +Converged at iteration 23, L1 6.68471e-05, Linf 0.00338527, total time[s] 0.069322 +Converged at iteration 22, L1 5.01887e-05, Linf 0.00384707, total time[s] 0.061736 +Converged at iteration 20, L1 4.90857e-05, Linf 0.00497152, total time[s] 0.055159 +Converged at iteration 17, L1 9.24176e-05, Linf 0.00228444, total time[s] 0.053806 +Converged at iteration 32, L1 4.75151e-05, Linf 0.00548094, total time[s] 0.08373 +Converged at iteration 19, L1 9.46241e-05, Linf 0.00506751, total time[s] 0.054102 +Converged at iteration 22, L1 9.10678e-05, Linf 0.00495315, total time[s] 0.057857 +Converged at iteration 26, L1 9.06538e-05, Linf 0.00644987, total time[s] 0.066893 +Converged at iteration 24, L1 7.43767e-05, Linf 0.00318616, total time[s] 0.062281 +Converged at iteration 21, L1 6.36913e-05, Linf 0.00311586, total time[s] 0.056957 +Converged at iteration 23, L1 8.99583e-05, Linf 0.00284803, total time[s] 0.066329 +Converged at iteration 25, L1 6.72356e-05, Linf 0.00276003, total time[s] 0.066642 +Converged at iteration 26, L1 7.1189e-05, Linf 0.00290263, total time[s] 0.06979 +Converged at iteration 31, L1 5.57454e-05, Linf 0.00395851, total time[s] 0.08228 +Converged at iteration 29, L1 6.34471e-05, Linf 0.00276043, total time[s] 0.075059 +Converged at iteration 30, L1 6.38861e-05, Linf 0.00550874, total time[s] 0.076707 +Converged at iteration 30, L1 5.60818e-05, Linf 0.00161576, total time[s] 0.076995 +Converged at iteration 31, L1 4.20491e-05, Linf 0.00196872, total time[s] 0.079178 +Converged at iteration 32, L1 8.42472e-05, Linf 0.011778, total time[s] 0.081346 +Converged at iteration 24, L1 9.76295e-05, Linf 0.00297997, total time[s] 0.063358 +Converged at iteration 26, L1 5.6676e-05, Linf 0.00290274, total time[s] 0.068385 +Converged at iteration 23, L1 9.52495e-05, Linf 0.00360213, total time[s] 0.061685 +Converged at iteration 38, L1 5.57899e-05, Linf 0.012606, total time[s] 0.124819 +Converged at iteration 35, L1 9.56761e-05, Linf 0.0131036, total time[s] 0.091053 +Converged at iteration 24, L1 9.11674e-05, Linf 0.00909668, total time[s] 0.065329 +Converged at iteration 29, L1 9.91946e-05, Linf 0.00753519, total time[s] 0.075583 +Converged at iteration 24, L1 5.84619e-05, Linf 0.00504902, total time[s] 0.064384 +Converged at iteration 22, L1 5.23161e-05, Linf 0.00513831, total time[s] 0.058063 +Converged at iteration 19, L1 9.59227e-05, Linf 0.0110118, total time[s] 0.050723 +Converged at iteration 21, L1 5.74847e-05, Linf 0.0047925, total time[s] 0.05612 +Converged at iteration 23, L1 6.72346e-05, Linf 0.00338724, total time[s] 0.060161 +Converged at iteration 22, L1 4.95525e-05, Linf 0.00376497, total time[s] 0.057709 +Converged at iteration 20, L1 4.8255e-05, Linf 0.00238208, total time[s] 0.053261 +Converged at iteration 17, L1 9.35113e-05, Linf 0.00230099, total time[s] 0.045427 +Converged at iteration 32, L1 4.75386e-05, Linf 0.00550732, total time[s] 0.080982 +Converged at iteration 19, L1 9.44381e-05, Linf 0.00507297, total time[s] 0.051114 +Converged at iteration 22, L1 9.08844e-05, Linf 0.00515492, total time[s] 0.058281 +Converged at iteration 26, L1 9.04636e-05, Linf 0.00646522, total time[s] 0.066957 +Converged at iteration 24, L1 7.5156e-05, Linf 0.0032245, total time[s] 0.062346 +Converged at iteration 21, L1 6.39158e-05, Linf 0.00315495, total time[s] 0.055941 +Converged at iteration 23, L1 8.99532e-05, Linf 0.0028431, total time[s] 0.060988 +Converged at iteration 25, L1 6.66172e-05, Linf 0.0027993, total time[s] 0.064526 +Converged at iteration 26, L1 7.04102e-05, Linf 0.00287547, total time[s] 0.066826 +Converged at iteration 31, L1 5.63034e-05, Linf 0.00419135, total time[s] 0.07932 +Converged at iteration 29, L1 6.37687e-05, Linf 0.00277921, total time[s] 0.073759 +Converged at iteration 30, L1 6.42206e-05, Linf 0.00552155, total time[s] 0.075926 +Converged at iteration 30, L1 5.62626e-05, Linf 0.00161679, total time[s] 0.077378 +Converged at iteration 31, L1 4.43165e-05, Linf 0.00202466, total time[s] 0.079438 +Converged at iteration 32, L1 8.44134e-05, Linf 0.0116413, total time[s] 0.081193 +Converged at iteration 25, L1 6.99528e-05, Linf 0.00175391, total time[s] 0.064734 +Converged at iteration 26, L1 5.65515e-05, Linf 0.00304456, total time[s] 0.067613 +Converged at iteration 23, L1 9.61766e-05, Linf 0.00360662, total time[s] 0.060616 +Converged at iteration 38, L1 5.40074e-05, Linf 0.0126407, total time[s] 0.099311 +Converged at iteration 35, L1 9.51476e-05, Linf 0.0131987, total time[s] 0.100957 +Converged at iteration 24, L1 9.01122e-05, Linf 0.00921026, total time[s] 0.064046 +Converged at iteration 29, L1 9.82538e-05, Linf 0.00752956, total time[s] 0.073852 +Converged at iteration 24, L1 5.83292e-05, Linf 0.00505342, total time[s] 0.062208 +Converged at iteration 22, L1 5.41218e-05, Linf 0.00513975, total time[s] 0.057782 +Converged at iteration 19, L1 9.65764e-05, Linf 0.0111272, total time[s] 0.0509 +Converged at iteration 21, L1 5.77037e-05, Linf 0.00482534, total time[s] 0.058853 +Converged at iteration 23, L1 6.73975e-05, Linf 0.00338922, total time[s] 0.063762 +Converged at iteration 22, L1 4.91219e-05, Linf 0.00366587, total time[s] 0.059577 +Converged at iteration 20, L1 4.80836e-05, Linf 0.00237965, total time[s] 0.053678 +Converged at iteration 17, L1 9.46436e-05, Linf 0.00231858, total time[s] 0.04991 +Converged at iteration 32, L1 4.77415e-05, Linf 0.00550408, total time[s] 0.094652 +Converged at iteration 19, L1 9.50648e-05, Linf 0.00506967, total time[s] 0.058099 +Converged at iteration 22, L1 9.07278e-05, Linf 0.00491806, total time[s] 0.061152 +Converged at iteration 26, L1 9.03311e-05, Linf 0.00647864, total time[s] 0.070444 +Converged at iteration 24, L1 7.61973e-05, Linf 0.00327088, total time[s] 0.062509 +Converged at iteration 21, L1 6.43015e-05, Linf 0.0031926, total time[s] 0.056995 +Converged at iteration 23, L1 9.07698e-05, Linf 0.00284702, total time[s] 0.060368 +Converged at iteration 25, L1 6.6574e-05, Linf 0.00285084, total time[s] 0.065444 +Converged at iteration 26, L1 6.94693e-05, Linf 0.00286002, total time[s] 0.067043 +Converged at iteration 31, L1 5.6991e-05, Linf 0.00406284, total time[s] 0.078304 +Converged at iteration 29, L1 6.43061e-05, Linf 0.00279967, total time[s] 0.073458 +Converged at iteration 30, L1 6.48081e-05, Linf 0.00558887, total time[s] 0.076079 +Converged at iteration 30, L1 5.68168e-05, Linf 0.0016183, total time[s] 0.076372 +Converged at iteration 31, L1 4.43887e-05, Linf 0.00208551, total time[s] 0.079855 +Converged at iteration 32, L1 8.44895e-05, Linf 0.0117193, total time[s] 0.081512 +Converged at iteration 24, L1 9.75829e-05, Linf 0.00276423, total time[s] 0.061809 +Converged at iteration 26, L1 5.69016e-05, Linf 0.00305477, total time[s] 0.066436 +Converged at iteration 23, L1 9.72643e-05, Linf 0.00361253, total time[s] 0.060391 +Converged at iteration 38, L1 5.30995e-05, Linf 0.0126709, total time[s] 0.099013 +Converged at iteration 35, L1 9.47963e-05, Linf 0.0133048, total time[s] 0.089397 +Converged at iteration 24, L1 9.07626e-05, Linf 0.00933751, total time[s] 0.062145 +Converged at iteration 29, L1 9.79671e-05, Linf 0.00752256, total time[s] 0.073363 +Converged at iteration 24, L1 5.81832e-05, Linf 0.00506018, total time[s] 0.062578 +Converged at iteration 22, L1 5.20174e-05, Linf 0.00513793, total time[s] 0.061695 +Converged at iteration 19, L1 9.79891e-05, Linf 0.0112668, total time[s] 0.056377 +Converged at iteration 21, L1 5.81594e-05, Linf 0.00490547, total time[s] 0.059772 +Converged at iteration 23, L1 6.7795e-05, Linf 0.00343518, total time[s] 0.059752 +Converged at iteration 22, L1 4.87073e-05, Linf 0.00354668, total time[s] 0.057096 +Converged at iteration 20, L1 4.79503e-05, Linf 0.0022761, total time[s] 0.053128 +Converged at iteration 17, L1 9.64467e-05, Linf 0.0041443, total time[s] 0.092192 +Converged at iteration 32, L1 4.75996e-05, Linf 0.00562329, total time[s] 0.086182 +Converged at iteration 19, L1 9.61507e-05, Linf 0.00506015, total time[s] 0.051176 +Converged at iteration 22, L1 9.03113e-05, Linf 0.00489977, total time[s] 0.058404 +Converged at iteration 26, L1 9.00655e-05, Linf 0.0064979, total time[s] 0.067136 +Converged at iteration 24, L1 7.7462e-05, Linf 0.003327, total time[s] 0.062431 +Converged at iteration 21, L1 6.48442e-05, Linf 0.0032494, total time[s] 0.055126 +Converged at iteration 23, L1 9.01391e-05, Linf 0.0028479, total time[s] 0.059998 +Converged at iteration 25, L1 6.62253e-05, Linf 0.00289443, total time[s] 0.065091 +Converged at iteration 26, L1 6.83282e-05, Linf 0.00282554, total time[s] 0.067953 +Converged at iteration 31, L1 5.74604e-05, Linf 0.00416624, total time[s] 0.081318 +Converged at iteration 29, L1 6.45963e-05, Linf 0.00282356, total time[s] 0.0745 +Converged at iteration 30, L1 6.50987e-05, Linf 0.00572233, total time[s] 0.076749 +Converged at iteration 30, L1 5.66452e-05, Linf 0.00161925, total time[s] 0.075921 +Converged at iteration 31, L1 4.54355e-05, Linf 0.00216142, total time[s] 0.077642 +Converged at iteration 32, L1 8.4172e-05, Linf 0.0118156, total time[s] 0.080532 +Converged at iteration 24, L1 9.95251e-05, Linf 0.00260322, total time[s] 0.063335 +Converged at iteration 26, L1 5.72254e-05, Linf 0.00311041, total time[s] 0.066737 +Converged at iteration 23, L1 9.84776e-05, Linf 0.00362053, total time[s] 0.065091 +Converged at iteration 38, L1 5.19259e-05, Linf 0.0129102, total time[s] 0.099059 +Converged at iteration 35, L1 9.44227e-05, Linf 0.0132792, total time[s] 0.091899 +Converged at iteration 24, L1 9.03745e-05, Linf 0.00948855, total time[s] 0.061856 +Converged at iteration 29, L1 9.62948e-05, Linf 0.00751402, total time[s] 0.073642 +Converged at iteration 24, L1 5.88846e-05, Linf 0.00506936, total time[s] 0.062888 +Converged at iteration 22, L1 5.1931e-05, Linf 0.00513442, total time[s] 0.064183 +Converged at iteration 19, L1 9.89365e-05, Linf 0.0114341, total time[s] 0.051559 +Converged at iteration 21, L1 5.89938e-05, Linf 0.0050044, total time[s] 0.055817 +Converged at iteration 23, L1 6.8214e-05, Linf 0.00344745, total time[s] 0.063262 +Converged at iteration 22, L1 4.77327e-05, Linf 0.00340318, total time[s] 0.057612 +Converged at iteration 20, L1 4.81593e-05, Linf 0.00220772, total time[s] 0.055214 +Converged at iteration 17, L1 9.77447e-05, Linf 0.00236668, total time[s] 0.04555 +Converged at iteration 32, L1 4.76654e-05, Linf 0.00562498, total time[s] 0.080995 +Converged at iteration 19, L1 9.48918e-05, Linf 0.00506203, total time[s] 0.050335 +Converged at iteration 22, L1 8.98028e-05, Linf 0.00488232, total time[s] 0.057302 +Converged at iteration 26, L1 8.96471e-05, Linf 0.0065138, total time[s] 0.06656 +Converged at iteration 24, L1 7.9125e-05, Linf 0.00339349, total time[s] 0.064368 +Converged at iteration 21, L1 6.58491e-05, Linf 0.00331592, total time[s] 0.055794 +Converged at iteration 23, L1 9.06784e-05, Linf 0.0028474, total time[s] 0.060183 +Converged at iteration 25, L1 6.56219e-05, Linf 0.00291705, total time[s] 0.064739 +Converged at iteration 26, L1 6.75384e-05, Linf 0.00278738, total time[s] 0.067009 +Converged at iteration 31, L1 5.80868e-05, Linf 0.00399134, total time[s] 0.08236 +Converged at iteration 29, L1 6.52685e-05, Linf 0.00285266, total time[s] 0.075666 +Converged at iteration 30, L1 6.68358e-05, Linf 0.00583013, total time[s] 0.078681 +Converged at iteration 30, L1 5.65351e-05, Linf 0.00161921, total time[s] 0.079445 +Converged at iteration 31, L1 4.70827e-05, Linf 0.00225484, total time[s] 0.081491 +Converged at iteration 32, L1 8.41805e-05, Linf 0.0117721, total time[s] 0.082758 +Converged at iteration 24, L1 9.87155e-05, Linf 0.00244731, total time[s] 0.065107 +Converged at iteration 26, L1 5.59872e-05, Linf 0.00301178, total time[s] 0.068895 +Converged at iteration 23, L1 9.95338e-05, Linf 0.00363136, total time[s] 0.061636 +Converged at iteration 38, L1 5.23679e-05, Linf 0.0125525, total time[s] 0.097356 +Converged at iteration 35, L1 9.44407e-05, Linf 0.0132141, total time[s] 0.093143 +Converged at iteration 24, L1 9.0816e-05, Linf 0.00941146, total time[s] 0.063461 +Converged at iteration 29, L1 9.64153e-05, Linf 0.00764266, total time[s] 0.076836 +Converged at iteration 24, L1 5.81046e-05, Linf 0.00506563, total time[s] 0.064909 +Converged at iteration 22, L1 5.00503e-05, Linf 0.00513706, total time[s] 0.061993 +Converged at iteration 19, L1 9.82313e-05, Linf 0.0113896, total time[s] 0.060739 +Converged at iteration 21, L1 5.86443e-05, Linf 0.00495774, total time[s] 0.057399 +Converged at iteration 23, L1 6.79763e-05, Linf 0.00344499, total time[s] 0.061611 +Converged at iteration 22, L1 4.79363e-05, Linf 0.0034743, total time[s] 0.059311 +Converged at iteration 20, L1 4.80239e-05, Linf 0.00224195, total time[s] 0.055519 +Converged at iteration 17, L1 9.69312e-05, Linf 0.00235456, total time[s] 0.049523 +Converged at iteration 32, L1 4.75937e-05, Linf 0.00560135, total time[s] 0.082743 +Converged at iteration 19, L1 9.50037e-05, Linf 0.00505995, total time[s] 0.052469 +Converged at iteration 22, L1 9.03677e-05, Linf 0.0048907, total time[s] 0.059443 +Converged at iteration 26, L1 8.98354e-05, Linf 0.00650733, total time[s] 0.068214 +Converged at iteration 24, L1 7.82702e-05, Linf 0.00336049, total time[s] 0.06369 +Converged at iteration 21, L1 6.52441e-05, Linf 0.00328263, total time[s] 0.056725 +Converged at iteration 23, L1 9.05032e-05, Linf 0.00284723, total time[s] 0.062863 +Converged at iteration 25, L1 6.58462e-05, Linf 0.00290319, total time[s] 0.069772 +Converged at iteration 26, L1 6.72874e-05, Linf 0.00280618, total time[s] 0.068723 +Converged at iteration 31, L1 5.77203e-05, Linf 0.00397445, total time[s] 0.080605 +Converged at iteration 29, L1 6.48722e-05, Linf 0.00283797, total time[s] 0.079358 +Converged at iteration 30, L1 6.44841e-05, Linf 0.00578165, total time[s] 0.078673 +Converged at iteration 30, L1 5.63181e-05, Linf 0.00161903, total time[s] 0.077846 +Converged at iteration 31, L1 4.62767e-05, Linf 0.00220686, total time[s] 0.080194 +Converged at iteration 32, L1 8.4244e-05, Linf 0.0117141, total time[s] 0.083676 +Converged at iteration 24, L1 9.80429e-05, Linf 0.0025136, total time[s] 0.064831 +Converged at iteration 26, L1 5.69321e-05, Linf 0.00299995, total time[s] 0.069701 +Converged at iteration 23, L1 9.89133e-05, Linf 0.0036258, total time[s] 0.062135 +Converged at iteration 38, L1 5.17671e-05, Linf 0.012688, total time[s] 0.104875 +Converged at iteration 35, L1 9.43034e-05, Linf 0.0134549, total time[s] 0.096721 +Converged at iteration 24, L1 9.02893e-05, Linf 0.00950535, total time[s] 0.064332 +Converged at iteration 29, L1 9.55819e-05, Linf 0.0076388, total time[s] 0.096346 +Converged at iteration 24, L1 5.80287e-05, Linf 0.0050697, total time[s] 0.063223 +Converged at iteration 21, L1 9.9913e-05, Linf 0.00786397, total time[s] 0.057818 +Converged at iteration 19, L1 9.90673e-05, Linf 0.0114475, total time[s] 0.053648 +Converged at iteration 21, L1 5.9055e-05, Linf 0.005011, total time[s] 0.056851 +Converged at iteration 23, L1 6.8266e-05, Linf 0.00345073, total time[s] 0.061672 +Converged at iteration 22, L1 4.7982e-05, Linf 0.00338852, total time[s] 0.060652 +Converged at iteration 20, L1 4.81345e-05, Linf 0.00224703, total time[s] 0.054193 +Converged at iteration 17, L1 9.79437e-05, Linf 0.00237028, total time[s] 0.047069 +Converged at iteration 32, L1 4.75813e-05, Linf 0.00562968, total time[s] 0.083321 +Converged at iteration 19, L1 9.519e-05, Linf 0.0050599, total time[s] 0.052238 +Converged at iteration 22, L1 8.98573e-05, Linf 0.00488066, total time[s] 0.059327 +Converged at iteration 26, L1 8.9623e-05, Linf 0.00651812, total time[s] 0.070566 +Converged at iteration 24, L1 7.92435e-05, Linf 0.00340022, total time[s] 0.064595 +Converged at iteration 21, L1 6.59298e-05, Linf 0.0033231, total time[s] 0.058064 +Converged at iteration 23, L1 9.03408e-05, Linf 0.0028426, total time[s] 0.062016 +Converged at iteration 25, L1 6.5624e-05, Linf 0.00292002, total time[s] 0.066679 +Converged at iteration 26, L1 6.6335e-05, Linf 0.00276771, total time[s] 0.068552 +Converged at iteration 31, L1 5.81247e-05, Linf 0.0039895, total time[s] 0.08062 +Converged at iteration 29, L1 6.51802e-05, Linf 0.00285451, total time[s] 0.075583 +Converged at iteration 30, L1 6.4661e-05, Linf 0.00585594, total time[s] 0.079106 +Converged at iteration 30, L1 5.6401e-05, Linf 0.00161902, total time[s] 0.078127 +Converged at iteration 31, L1 4.72472e-05, Linf 0.00226147, total time[s] 0.080708 +Converged at iteration 32, L1 8.41571e-05, Linf 0.0119448, total time[s] 0.082976 +Converged at iteration 24, L1 9.87137e-05, Linf 0.00242042, total time[s] 0.064529 +Converged at iteration 26, L1 5.5978e-05, Linf 0.0030187, total time[s] 0.070214 +Converged at iteration 23, L1 9.96902e-05, Linf 0.00363274, total time[s] 0.061697 +Converged at iteration 38, L1 5.09952e-05, Linf 0.0127201, total time[s] 0.114515 +Converged at iteration 35, L1 9.41268e-05, Linf 0.0135417, total time[s] 0.092437 +Converged at iteration 24, L1 9.02005e-05, Linf 0.0097053, total time[s] 0.064466 +Converged at iteration 29, L1 9.45313e-05, Linf 0.00740821, total time[s] 0.076274 +Converged at iteration 24, L1 5.79265e-05, Linf 0.00507835, total time[s] 0.065871 +Converged at iteration 22, L1 5.03308e-05, Linf 0.00512638, total time[s] 0.062863 +Converged at iteration 20, L1 2.59043e-05, Linf 0.00575278, total time[s] 0.056262 +Converged at iteration 21, L1 5.94327e-05, Linf 0.00506678, total time[s] 0.058891 +Converged at iteration 23, L1 6.86774e-05, Linf 0.00342195, total time[s] 0.061624 +Converged at iteration 21, L1 9.92319e-05, Linf 0.00536448, total time[s] 0.057079 +Converged at iteration 20, L1 4.84067e-05, Linf 0.00215239, total time[s] 0.054364 +Converged at iteration 17, L1 9.94557e-05, Linf 0.00238883, total time[s] 0.047204 +Converged at iteration 32, L1 4.75749e-05, Linf 0.00566418, total time[s] 0.08207 +Converged at iteration 19, L1 9.44853e-05, Linf 0.0050628, total time[s] 0.051216 +Converged at iteration 22, L1 8.97408e-05, Linf 0.00488043, total time[s] 0.059661 +Converged at iteration 26, L1 8.9411e-05, Linf 0.00653347, total time[s] 0.07051 +Converged at iteration 24, L1 8.03041e-05, Linf 0.00344687, total time[s] 0.064611 +Converged at iteration 21, L1 6.68965e-05, Linf 0.00337159, total time[s] 0.059295 +Converged at iteration 23, L1 9.09292e-05, Linf 0.00284994, total time[s] 0.061267 +Converged at iteration 25, L1 6.53251e-05, Linf 0.00293903, total time[s] 0.066225 +Converged at iteration 26, L1 6.5315e-05, Linf 0.00275924, total time[s] 0.068964 +Converged at iteration 31, L1 5.8745e-05, Linf 0.00399471, total time[s] 0.080425 +Converged at iteration 29, L1 6.55977e-05, Linf 0.00287491, total time[s] 0.076153 +Converged at iteration 30, L1 6.4874e-05, Linf 0.00594579, total time[s] 0.078026 +Converged at iteration 30, L1 5.64979e-05, Linf 0.00161775, total time[s] 0.07807 +Converged at iteration 31, L1 4.86395e-05, Linf 0.00232542, total time[s] 0.082528 +Converged at iteration 32, L1 8.41533e-05, Linf 0.0120294, total time[s] 0.083497 +Converged at iteration 24, L1 9.94273e-05, Linf 0.00230911, total time[s] 0.064544 +Converged at iteration 26, L1 5.5973e-05, Linf 0.00310365, total time[s] 0.069255 +Converged at iteration 24, L1 5.40382e-05, Linf 0.00191192, total time[s] 0.063732 +Converged at iteration 38, L1 4.99884e-05, Linf 0.0127229, total time[s] 0.109681 +Converged at iteration 35, L1 9.37972e-05, Linf 0.0136642, total time[s] 0.128426 +Converged at iteration 24, L1 9.01364e-05, Linf 0.00974619, total time[s] 0.081878 +Converged at iteration 29, L1 9.45717e-05, Linf 0.007499, total time[s] 0.083094 +Converged at iteration 24, L1 5.80158e-05, Linf 0.00508925, total time[s] 0.071743 +Converged at iteration 22, L1 5.56871e-05, Linf 0.00511979, total time[s] 0.075004 +Converged at iteration 20, L1 2.61814e-05, Linf 0.00579984, total time[s] 0.076672 +Converged at iteration 21, L1 5.99289e-05, Linf 0.00511233, total time[s] 0.055225 +Converged at iteration 23, L1 6.90029e-05, Linf 0.00340855, total time[s] 0.059889 +Converged at iteration 21, L1 9.82624e-05, Linf 0.00524907, total time[s] 0.052929 +Converged at iteration 20, L1 4.89221e-05, Linf 0.00217449, total time[s] 0.05317 +Converged at iteration 18, L1 4.75944e-05, Linf 0.00123661, total time[s] 0.054562 +Converged at iteration 32, L1 4.76707e-05, Linf 0.00575258, total time[s] 0.082157 +Converged at iteration 19, L1 9.43001e-05, Linf 0.0051055, total time[s] 0.052734 +Converged at iteration 22, L1 8.9657e-05, Linf 0.00491264, total time[s] 0.058556 +Converged at iteration 26, L1 8.92577e-05, Linf 0.0065463, total time[s] 0.067261 +Converged at iteration 24, L1 8.17203e-05, Linf 0.00350176, total time[s] 0.062051 +Converged at iteration 21, L1 6.78503e-05, Linf 0.00342983, total time[s] 0.056965 +Converged at iteration 23, L1 9.12137e-05, Linf 0.00284804, total time[s] 0.068495 +Converged at iteration 25, L1 6.51203e-05, Linf 0.00294975, total time[s] 0.065088 +Converged at iteration 25, L1 9.97393e-05, Linf 0.0034483, total time[s] 0.066309 +Converged at iteration 31, L1 5.94656e-05, Linf 0.003969, total time[s] 0.080884 +Converged at iteration 29, L1 6.62579e-05, Linf 0.00290213, total time[s] 0.074817 +Converged at iteration 30, L1 6.47737e-05, Linf 0.00604935, total time[s] 0.07862 +Converged at iteration 30, L1 5.6857e-05, Linf 0.00161547, total time[s] 0.076022 +Converged at iteration 31, L1 4.9915e-05, Linf 0.00240082, total time[s] 0.07866 +Converged at iteration 32, L1 8.45634e-05, Linf 0.0121322, total time[s] 0.081708 +Converged at iteration 25, L1 7.48558e-05, Linf 0.00193244, total time[s] 0.066043 +Converged at iteration 26, L1 5.59536e-05, Linf 0.00311913, total time[s] 0.069775 +Converged at iteration 24, L1 5.48499e-05, Linf 0.00193858, total time[s] 0.066478 +Converged at iteration 38, L1 4.8904e-05, Linf 0.012738, total time[s] 0.106923 +Converged at iteration 35, L1 9.33148e-05, Linf 0.0138109, total time[s] 0.094923 +Converged at iteration 24, L1 8.98993e-05, Linf 0.00990056, total time[s] 0.067785 +Converged at iteration 29, L1 9.19006e-05, Linf 0.00748952, total time[s] 0.076762 +Converged at iteration 24, L1 5.7777e-05, Linf 0.00510192, total time[s] 0.063827 +Converged at iteration 22, L1 5.12048e-05, Linf 0.00511031, total time[s] 0.05926 +Converged at iteration 20, L1 2.63516e-05, Linf 0.00585825, total time[s] 0.054789 +Converged at iteration 21, L1 6.06348e-05, Linf 0.00515639, total time[s] 0.056898 +Converged at iteration 23, L1 6.96261e-05, Linf 0.00341828, total time[s] 0.061677 +Converged at iteration 21, L1 9.63913e-05, Linf 0.00510544, total time[s] 0.057994 +Converged at iteration 20, L1 4.96088e-05, Linf 0.00221691, total time[s] 0.05516 +Converged at iteration 18, L1 4.84951e-05, Linf 0.00125032, total time[s] 0.050446 +Converged at iteration 32, L1 4.74746e-05, Linf 0.00573995, total time[s] 0.083064 +Converged at iteration 19, L1 9.38178e-05, Linf 0.00506093, total time[s] 0.062608 +Converged at iteration 22, L1 8.89492e-05, Linf 0.00485299, total time[s] 0.05978 +Converged at iteration 26, L1 8.92017e-05, Linf 0.00656009, total time[s] 0.069155 +Converged at iteration 24, L1 8.32601e-05, Linf 0.00356517, total time[s] 0.078788 +Converged at iteration 21, L1 6.88445e-05, Linf 0.00351264, total time[s] 0.056214 +Converged at iteration 23, L1 9.15777e-05, Linf 0.00284858, total time[s] 0.062705 +Converged at iteration 25, L1 6.45509e-05, Linf 0.00289575, total time[s] 0.070981 +Converged at iteration 25, L1 9.75716e-05, Linf 0.0033965, total time[s] 0.067212 +Converged at iteration 31, L1 6.02989e-05, Linf 0.00390357, total time[s] 0.081766 +Converged at iteration 29, L1 6.73384e-05, Linf 0.00293628, total time[s] 0.076338 +Converged at iteration 30, L1 6.55609e-05, Linf 0.00616849, total time[s] 0.078579 +Converged at iteration 30, L1 5.68285e-05, Linf 0.00161052, total time[s] 0.078172 +Converged at iteration 31, L1 5.16065e-05, Linf 0.0024909, total time[s] 0.081068 +Converged at iteration 32, L1 8.41066e-05, Linf 0.0122559, total time[s] 0.083392 +Converged at iteration 25, L1 7.38807e-05, Linf 0.00197743, total time[s] 0.066916 +Converged at iteration 26, L1 5.5931e-05, Linf 0.00313663, total time[s] 0.069045 +Converged at iteration 24, L1 5.55517e-05, Linf 0.00196312, total time[s] 0.064015 +Converged at iteration 38, L1 4.94244e-05, Linf 0.0127326, total time[s] 0.09454 +Converged at iteration 35, L1 9.34859e-05, Linf 0.0137387, total time[s] 0.091778 +Converged at iteration 24, L1 8.99869e-05, Linf 0.00982509, total time[s] 0.067337 +Converged at iteration 29, L1 9.40718e-05, Linf 0.00749425, total time[s] 0.07635 +Converged at iteration 24, L1 5.78162e-05, Linf 0.00509517, total time[s] 0.064477 +Converged at iteration 21, L1 9.94828e-05, Linf 0.0079715, total time[s] 0.057652 +Converged at iteration 20, L1 2.61868e-05, Linf 0.00582959, total time[s] 0.059839 +Converged at iteration 21, L1 6.03122e-05, Linf 0.00513382, total time[s] 0.057841 +Converged at iteration 23, L1 6.94223e-05, Linf 0.00341415, total time[s] 0.062481 +Converged at iteration 21, L1 9.73163e-05, Linf 0.00517782, total time[s] 0.057394 +Converged at iteration 20, L1 4.92612e-05, Linf 0.00219569, total time[s] 0.055836 +Converged at iteration 18, L1 4.80644e-05, Linf 0.00124345, total time[s] 0.050381 +Converged at iteration 32, L1 4.75191e-05, Linf 0.0057332, total time[s] 0.084785 +Converged at iteration 19, L1 9.40584e-05, Linf 0.00519039, total time[s] 0.053578 +Converged at iteration 22, L1 8.92904e-05, Linf 0.00485656, total time[s] 0.060421 +Converged at iteration 26, L1 8.91961e-05, Linf 0.0065484, total time[s] 0.070055 +Converged at iteration 24, L1 8.24867e-05, Linf 0.00353403, total time[s] 0.064069 +Converged at iteration 21, L1 6.83637e-05, Linf 0.00346477, total time[s] 0.05872 +Converged at iteration 23, L1 9.13924e-05, Linf 0.00284832, total time[s] 0.062338 +Converged at iteration 25, L1 6.47871e-05, Linf 0.00292299, total time[s] 0.067142 +Converged at iteration 25, L1 9.86702e-05, Linf 0.0034221, total time[s] 0.066759 +Converged at iteration 31, L1 6.0163e-05, Linf 0.00393145, total time[s] 0.080871 +Converged at iteration 29, L1 6.67024e-05, Linf 0.00291882, total time[s] 0.077931 +Converged at iteration 30, L1 6.53299e-05, Linf 0.00610837, total time[s] 0.078919 +Converged at iteration 30, L1 5.67171e-05, Linf 0.00161323, total time[s] 0.078188 +Converged at iteration 31, L1 5.19299e-05, Linf 0.00244987, total time[s] 0.085092 +Converged at iteration 32, L1 8.47294e-05, Linf 0.0127013, total time[s] 0.102479 +Converged at iteration 25, L1 7.29706e-05, Linf 0.0019564, total time[s] 0.107366 +Converged at iteration 26, L1 5.59394e-05, Linf 0.00312776, total time[s] 0.076242 +Converged at iteration 24, L1 5.57437e-05, Linf 0.00195467, total time[s] 0.063806 +Converged at iteration 38, L1 4.87139e-05, Linf 0.0127419, total time[s] 0.097115 +Converged at iteration 35, L1 9.32881e-05, Linf 0.0138251, total time[s] 0.090426 +Converged at iteration 24, L1 8.98217e-05, Linf 0.00991928, total time[s] 0.06316 +Converged at iteration 29, L1 9.22187e-05, Linf 0.00748847, total time[s] 0.075708 +Converged at iteration 24, L1 5.77152e-05, Linf 0.00510338, total time[s] 0.062263 +Converged at iteration 21, L1 9.90206e-05, Linf 0.00800936, total time[s] 0.055989 +Converged at iteration 20, L1 2.63854e-05, Linf 0.00586446, total time[s] 0.054506 +Converged at iteration 21, L1 6.06354e-05, Linf 0.00516198, total time[s] 0.056585 +Converged at iteration 23, L1 6.95796e-05, Linf 0.0034193, total time[s] 0.061569 +Converged at iteration 21, L1 9.68621e-05, Linf 0.00506427, total time[s] 0.055998 +Converged at iteration 20, L1 4.96897e-05, Linf 0.00222124, total time[s] 0.054794 +Converged at iteration 18, L1 4.85531e-05, Linf 0.00125143, total time[s] 0.06918 +Converged at iteration 32, L1 4.7477e-05, Linf 0.00574482, total time[s] 0.1016 +Converged at iteration 19, L1 9.42968e-05, Linf 0.00507184, total time[s] 0.05135 +Converged at iteration 22, L1 8.90759e-05, Linf 0.00485242, total time[s] 0.059169 +Converged at iteration 26, L1 8.94097e-05, Linf 0.00656112, total time[s] 0.066393 +Converged at iteration 24, L1 8.34179e-05, Linf 0.00357136, total time[s] 0.061447 +Converged at iteration 21, L1 6.89344e-05, Linf 0.00350669, total time[s] 0.054726 +Converged at iteration 23, L1 9.14774e-05, Linf 0.0028493, total time[s] 0.059334 +Converged at iteration 25, L1 6.45063e-05, Linf 0.00289284, total time[s] 0.064653 +Converged at iteration 25, L1 9.74534e-05, Linf 0.00339054, total time[s] 0.063995 +Converged at iteration 31, L1 6.03902e-05, Linf 0.00391082, total time[s] 0.078355 +Converged at iteration 29, L1 6.71752e-05, Linf 0.00293903, total time[s] 0.07268 +Converged at iteration 30, L1 6.76397e-05, Linf 0.00619675, total time[s] 0.074898 +Converged at iteration 30, L1 6.11279e-05, Linf 0.00160989, total time[s] 0.07427 +Converged at iteration 31, L1 5.27549e-05, Linf 0.00250111, total time[s] 0.077275 +Converged at iteration 32, L1 8.4219e-05, Linf 0.0124998, total time[s] 0.082873 +Converged at iteration 25, L1 7.41825e-05, Linf 0.00198647, total time[s] 0.069076 +Converged at iteration 26, L1 5.59296e-05, Linf 0.00313825, total time[s] 0.085883 +Converged at iteration 24, L1 5.56387e-05, Linf 0.00197421, total time[s] 0.072436 +Converged at iteration 38, L1 4.79126e-05, Linf 0.0127486, total time[s] 0.105917 +Converged at iteration 35, L1 9.3133e-05, Linf 0.0139351, total time[s] 0.09168 +Converged at iteration 24, L1 8.86527e-05, Linf 0.0100326, total time[s] 0.06367 +Converged at iteration 29, L1 9.06774e-05, Linf 0.00748129, total time[s] 0.075085 +Converged at iteration 24, L1 5.76655e-05, Linf 0.00511366, total time[s] 0.065344 +Converged at iteration 21, L1 9.88233e-05, Linf 0.00805375, total time[s] 0.056263 +Converged at iteration 20, L1 2.66972e-05, Linf 0.00590801, total time[s] 0.056367 +Converged at iteration 21, L1 6.10256e-05, Linf 0.00519311, total time[s] 0.058103 +Converged at iteration 23, L1 6.99899e-05, Linf 0.00342546, total time[s] 0.073756 +Converged at iteration 21, L1 9.48859e-05, Linf 0.00498188, total time[s] 0.057859 +Converged at iteration 20, L1 5.02197e-05, Linf 0.00225205, total time[s] 0.072633 +Converged at iteration 18, L1 4.92242e-05, Linf 0.00127115, total time[s] 0.051098 +Converged at iteration 32, L1 4.74649e-05, Linf 0.00580061, total time[s] 0.083735 +Converged at iteration 19, L1 9.35307e-05, Linf 0.00507341, total time[s] 0.053257 +Converged at iteration 22, L1 8.89251e-05, Linf 0.00484872, total time[s] 0.061999 +Converged at iteration 26, L1 8.92906e-05, Linf 0.00657164, total time[s] 0.067576 +Converged at iteration 24, L1 8.45058e-05, Linf 0.00361433, total time[s] 0.063241 +Converged at iteration 21, L1 6.95394e-05, Linf 0.00355699, total time[s] 0.055733 +Converged at iteration 23, L1 9.18669e-05, Linf 0.00284943, total time[s] 0.060087 +Converged at iteration 25, L1 6.42925e-05, Linf 0.00287407, total time[s] 0.064846 +Converged at iteration 25, L1 9.60191e-05, Linf 0.00335444, total time[s] 0.066038 +Converged at iteration 31, L1 6.09618e-05, Linf 0.00397123, total time[s] 0.079464 +Converged at iteration 29, L1 6.76135e-05, Linf 0.00296192, total time[s] 0.074072 +Converged at iteration 30, L1 6.57748e-05, Linf 0.00625945, total time[s] 0.076351 +Converged at iteration 30, L1 5.69874e-05, Linf 0.00160488, total time[s] 0.076716 +Converged at iteration 31, L1 5.25533e-05, Linf 0.00256217, total time[s] 0.079443 +Converged at iteration 32, L1 8.41018e-05, Linf 0.0123601, total time[s] 0.081835 +Converged at iteration 25, L1 7.57336e-05, Linf 0.00202535, total time[s] 0.06523 +Converged at iteration 26, L1 5.59177e-05, Linf 0.0031543, total time[s] 0.070171 +Converged at iteration 24, L1 5.65875e-05, Linf 0.00199578, total time[s] 0.062697 +Converged at iteration 38, L1 4.69493e-05, Linf 0.0127565, total time[s] 0.095727 +Converged at iteration 35, L1 9.30629e-05, Linf 0.0140635, total time[s] 0.090248 +Converged at iteration 24, L1 8.91886e-05, Linf 0.0101675, total time[s] 0.063778 +Converged at iteration 29, L1 8.93826e-05, Linf 0.00747242, total time[s] 0.074762 +Converged at iteration 24, L1 5.76233e-05, Linf 0.00512724, total time[s] 0.062986 +Converged at iteration 21, L1 9.85198e-05, Linf 0.00810541, total time[s] 0.056359 +Converged at iteration 20, L1 2.68894e-05, Linf 0.00596239, total time[s] 0.062637 +Converged at iteration 21, L1 6.1759e-05, Linf 0.00523673, total time[s] 0.057527 +Converged at iteration 23, L1 7.02089e-05, Linf 0.00343206, total time[s] 0.062071 +Converged at iteration 21, L1 9.38678e-05, Linf 0.0048497, total time[s] 0.057859 +Converged at iteration 20, L1 5.09944e-05, Linf 0.0022892, total time[s] 0.055751 +Converged at iteration 18, L1 5.01198e-05, Linf 0.00200507, total time[s] 0.049992 +Converged at iteration 32, L1 4.73731e-05, Linf 0.0058529, total time[s] 0.083536 +Converged at iteration 19, L1 9.39535e-05, Linf 0.00508005, total time[s] 0.052317 +Converged at iteration 22, L1 8.91301e-05, Linf 0.00484657, total time[s] 0.062377 +Converged at iteration 26, L1 8.92191e-05, Linf 0.00658142, total time[s] 0.071637 +Converged at iteration 24, L1 8.57001e-05, Linf 0.00366298, total time[s] 0.064433 +Converged at iteration 21, L1 7.03125e-05, Linf 0.00362737, total time[s] 0.055952 +Converged at iteration 23, L1 9.19594e-05, Linf 0.00285043, total time[s] 0.060637 +Converged at iteration 25, L1 6.38425e-05, Linf 0.00285714, total time[s] 0.065083 +Converged at iteration 25, L1 9.37984e-05, Linf 0.00331219, total time[s] 0.066357 +Converged at iteration 31, L1 6.16594e-05, Linf 0.00380974, total time[s] 0.079658 +Converged at iteration 29, L1 6.81706e-05, Linf 0.00298734, total time[s] 0.074379 +Converged at iteration 30, L1 6.60267e-05, Linf 0.00635639, total time[s] 0.080523 +Converged at iteration 30, L1 5.72055e-05, Linf 0.00159765, total time[s] 0.079421 +Converged at iteration 31, L1 5.43458e-05, Linf 0.00263729, total time[s] 0.078389 +Converged at iteration 32, L1 8.41154e-05, Linf 0.0124691, total time[s] 0.083252 +Converged at iteration 25, L1 7.7689e-05, Linf 0.00206983, total time[s] 0.065361 +Converged at iteration 26, L1 5.58629e-05, Linf 0.00318501, total time[s] 0.066893 +Converged at iteration 24, L1 5.69632e-05, Linf 0.00202673, total time[s] 0.062428 +Converged at iteration 38, L1 4.73972e-05, Linf 0.0127525, total time[s] 0.094756 +Converged at iteration 35, L1 9.30897e-05, Linf 0.0140009, total time[s] 0.104518 +Converged at iteration 24, L1 8.92062e-05, Linf 0.0101013, total time[s] 0.070313 +Converged at iteration 29, L1 9.00298e-05, Linf 0.00747683, total time[s] 0.074855 +Converged at iteration 24, L1 5.76414e-05, Linf 0.00511968, total time[s] 0.062255 +Converged at iteration 21, L1 9.86902e-05, Linf 0.00807986, total time[s] 0.054913 +Converged at iteration 20, L1 2.67575e-05, Linf 0.00593499, total time[s] 0.054706 +Converged at iteration 21, L1 6.14327e-05, Linf 0.00521734, total time[s] 0.056602 +Converged at iteration 23, L1 6.99753e-05, Linf 0.0034291, total time[s] 0.06337 +Converged at iteration 21, L1 9.43268e-05, Linf 0.00491569, total time[s] 0.058421 +Converged at iteration 20, L1 5.06618e-05, Linf 0.00227063, total time[s] 0.05472 +Converged at iteration 18, L1 4.94875e-05, Linf 0.00129711, total time[s] 0.048876 +Converged at iteration 32, L1 4.76347e-05, Linf 0.00582921, total time[s] 0.086872 +Converged at iteration 19, L1 9.38376e-05, Linf 0.00507664, total time[s] 0.053519 +Converged at iteration 22, L1 8.87488e-05, Linf 0.00484741, total time[s] 0.058726 +Converged at iteration 26, L1 8.93078e-05, Linf 0.00657539, total time[s] 0.069279 +Converged at iteration 24, L1 8.51004e-05, Linf 0.00363916, total time[s] 0.064983 +Converged at iteration 21, L1 6.99212e-05, Linf 0.00358721, total time[s] 0.059047 +Converged at iteration 23, L1 9.18578e-05, Linf 0.00284993, total time[s] 0.062764 +Converged at iteration 25, L1 6.40622e-05, Linf 0.00286599, total time[s] 0.064993 +Converged at iteration 25, L1 9.51011e-05, Linf 0.00333278, total time[s] 0.065891 +Converged at iteration 31, L1 6.13027e-05, Linf 0.00383478, total time[s] 0.079682 +Converged at iteration 29, L1 6.78842e-05, Linf 0.00297485, total time[s] 0.075364 +Converged at iteration 30, L1 6.59026e-05, Linf 0.00630388, total time[s] 0.076989 +Converged at iteration 30, L1 5.70945e-05, Linf 0.00160142, total time[s] 0.078097 +Converged at iteration 31, L1 5.33437e-05, Linf 0.00260017, total time[s] 0.07964 +Converged at iteration 32, L1 8.41318e-05, Linf 0.0124143, total time[s] 0.08211 +Converged at iteration 25, L1 7.67932e-05, Linf 0.00204731, total time[s] 0.064926 +Converged at iteration 26, L1 5.58941e-05, Linf 0.00316969, total time[s] 0.067821 +Converged at iteration 24, L1 5.66118e-05, Linf 0.00201228, total time[s] 0.063025 +Converged at iteration 38, L1 4.68571e-05, Linf 0.0127568, total time[s] 0.100359 +Converged at iteration 35, L1 9.30222e-05, Linf 0.0140776, total time[s] 0.093361 +Converged at iteration 24, L1 8.9265e-05, Linf 0.0101814, total time[s] 0.065812 +Converged at iteration 29, L1 8.92948e-05, Linf 0.00747146, total time[s] 0.078123 +Converged at iteration 24, L1 5.77884e-05, Linf 0.00512889, total time[s] 0.065558 +Converged at iteration 22, L1 5.24651e-05, Linf 0.00507452, total time[s] 0.061092 +Converged at iteration 20, L1 2.69089e-05, Linf 0.00593674, total time[s] 0.055611 +Converged at iteration 21, L1 6.17878e-05, Linf 0.00523985, total time[s] 0.05707 +Converged at iteration 23, L1 7.01763e-05, Linf 0.00343295, total time[s] 0.060628 +Converged at iteration 21, L1 9.38472e-05, Linf 0.00483585, total time[s] 0.056283 +Converged at iteration 20, L1 5.10824e-05, Linf 0.00229297, total time[s] 0.054753 +Converged at iteration 18, L1 4.9898e-05, Linf 0.00132863, total time[s] 0.049863 +Converged at iteration 32, L1 4.74095e-05, Linf 0.00585773, total time[s] 0.08232 +Converged at iteration 19, L1 9.39483e-05, Linf 0.00508084, total time[s] 0.051336 +Converged at iteration 22, L1 8.85627e-05, Linf 0.00484657, total time[s] 0.058276 +Converged at iteration 26, L1 8.9199e-05, Linf 0.00658001, total time[s] 0.067907 +Converged at iteration 24, L1 8.58263e-05, Linf 0.00366768, total time[s] 0.063113 +Converged at iteration 21, L1 7.03919e-05, Linf 0.0036235, total time[s] 0.056775 +Converged at iteration 23, L1 9.19856e-05, Linf 0.00285055, total time[s] 0.06407 +Converged at iteration 25, L1 6.38325e-05, Linf 0.00285628, total time[s] 0.065486 +Converged at iteration 25, L1 9.35034e-05, Linf 0.00330769, total time[s] 0.069799 +Converged at iteration 31, L1 6.1742e-05, Linf 0.00380432, total time[s] 0.079558 +Converged at iteration 29, L1 6.82272e-05, Linf 0.00298993, total time[s] 0.075161 +Converged at iteration 30, L1 6.60513e-05, Linf 0.00636774, total time[s] 0.076588 +Converged at iteration 30, L1 5.72298e-05, Linf 0.00159684, total time[s] 0.076904 +Converged at iteration 31, L1 5.45604e-05, Linf 0.00264526, total time[s] 0.080566 +Converged at iteration 32, L1 8.41176e-05, Linf 0.0124801, total time[s] 0.081997 +Converged at iteration 25, L1 7.79276e-05, Linf 0.00207478, total time[s] 0.06542 +Converged at iteration 26, L1 5.65553e-05, Linf 0.00318977, total time[s] 0.067861 +Converged at iteration 24, L1 5.70738e-05, Linf 0.00203143, total time[s] 0.063033 +Converged at iteration 40, L1 6.79636e-05, Linf 0.00367458, total time[s] 0.201998 +Converged at iteration 35, L1 7.6152e-05, Linf 0.00337106, total time[s] 0.120737 +Converged at iteration 30, L1 9.62549e-05, Linf 0.0043262, total time[s] 0.080843 +Converged at iteration 31, L1 6.2572e-05, Linf 0.00502562, total time[s] 0.07987 +Converged at iteration 27, L1 6.26015e-05, Linf 0.00499565, total time[s] 0.070333 +Converged at iteration 22, L1 8.62388e-05, Linf 0.00448845, total time[s] 0.057653 +Converged at iteration 20, L1 9.60209e-05, Linf 0.00397839, total time[s] 0.055804 +Converged at iteration 24, L1 8.84315e-05, Linf 0.00482886, total time[s] 0.064926 +Converged at iteration 28, L1 7.3868e-05, Linf 0.00445903, total time[s] 0.071253 +Converged at iteration 26, L1 8.11456e-05, Linf 0.00547989, total time[s] 0.066985 +Converged at iteration 22, L1 7.46685e-05, Linf 0.0050474, total time[s] 0.059334 +Converged at iteration 19, L1 6.63261e-05, Linf 0.00393082, total time[s] 0.051753 +Converged at iteration 30, L1 7.98737e-05, Linf 0.00329631, total time[s] 0.077557 +Converged at iteration 20, L1 8.45263e-05, Linf 0.00455007, total time[s] 0.053189 +Converged at iteration 24, L1 7.12295e-05, Linf 0.00485243, total time[s] 0.066382 +Converged at iteration 31, L1 8.93451e-05, Linf 0.00570025, total time[s] 0.081266 +Converged at iteration 27, L1 9.91819e-05, Linf 0.0056995, total time[s] 0.070344 +Converged at iteration 24, L1 8.84726e-05, Linf 0.00464951, total time[s] 0.065224 +Converged at iteration 23, L1 9.21937e-05, Linf 0.00419665, total time[s] 0.060129 +Converged at iteration 26, L1 7.22327e-05, Linf 0.00446093, total time[s] 0.067625 +Converged at iteration 29, L1 7.8132e-05, Linf 0.00479632, total time[s] 0.074774 +Converged at iteration 34, L1 7.0831e-05, Linf 0.00422642, total time[s] 0.086745 +Converged at iteration 30, L1 9.41216e-05, Linf 0.00442613, total time[s] 0.077353 +Converged at iteration 28, L1 9.49882e-05, Linf 0.00310979, total time[s] 0.071884 +Converged at iteration 32, L1 9.40639e-05, Linf 0.00374097, total time[s] 0.081879 +Converged at iteration 37, L1 7.34001e-05, Linf 0.00327841, total time[s] 0.093261 +Converged at iteration 33, L1 8.4477e-05, Linf 0.00469109, total time[s] 0.08391 +Converged at iteration 28, L1 9.67016e-05, Linf 0.0043004, total time[s] 0.07208 +Converged at iteration 24, L1 8.82898e-05, Linf 0.00325072, total time[s] 0.063486 +Converged at iteration 26, L1 8.97483e-05, Linf 0.00383935, total time[s] 0.067678 +Converged at iteration 40, L1 6.69987e-05, Linf 0.0038296, total time[s] 0.102832 +Converged at iteration 35, L1 8.23637e-05, Linf 0.00351908, total time[s] 0.087608 +Converged at iteration 30, L1 9.61837e-05, Linf 0.00422173, total time[s] 0.07525 +Converged at iteration 31, L1 6.18331e-05, Linf 0.00503819, total time[s] 0.079768 +Converged at iteration 27, L1 6.00597e-05, Linf 0.00494137, total time[s] 0.069203 +Converged at iteration 22, L1 7.71051e-05, Linf 0.00421259, total time[s] 0.062472 +Converged at iteration 21, L1 6.27901e-05, Linf 0.00334451, total time[s] 0.05694 +Converged at iteration 24, L1 9.0434e-05, Linf 0.00488807, total time[s] 0.063887 +Converged at iteration 28, L1 7.42008e-05, Linf 0.00444376, total time[s] 0.073932 +Converged at iteration 26, L1 8.04801e-05, Linf 0.00549633, total time[s] 0.068601 +Converged at iteration 22, L1 7.22082e-05, Linf 0.00483104, total time[s] 0.05936 +Converged at iteration 19, L1 5.91174e-05, Linf 0.00361615, total time[s] 0.051801 +Converged at iteration 30, L1 8.86651e-05, Linf 0.00330561, total time[s] 0.078838 +Converged at iteration 20, L1 8.60981e-05, Linf 0.00498263, total time[s] 0.057385 +Converged at iteration 24, L1 7.17991e-05, Linf 0.0046801, total time[s] 0.071125 +Converged at iteration 31, L1 9.34528e-05, Linf 0.00531548, total time[s] 0.079452 +Converged at iteration 27, L1 9.88801e-05, Linf 0.00537794, total time[s] 0.069772 +Converged at iteration 24, L1 8.69878e-05, Linf 0.00450382, total time[s] 0.064519 +Converged at iteration 23, L1 9.25793e-05, Linf 0.00421971, total time[s] 0.061131 +Converged at iteration 26, L1 7.18525e-05, Linf 0.00456702, total time[s] 0.068789 +Converged at iteration 29, L1 7.63194e-05, Linf 0.00485522, total time[s] 0.080833 +Converged at iteration 34, L1 7.86096e-05, Linf 0.004333, total time[s] 0.089441 +Converged at iteration 31, L1 6.91585e-05, Linf 0.00361739, total time[s] 0.096084 +Converged at iteration 28, L1 9.86951e-05, Linf 0.00321118, total time[s] 0.087246 +Converged at iteration 32, L1 8.62959e-05, Linf 0.00362273, total time[s] 0.083206 +Converged at iteration 36, L1 9.57581e-05, Linf 0.0036728, total time[s] 0.0952 +Converged at iteration 33, L1 8.39313e-05, Linf 0.00484038, total time[s] 0.0852 +Converged at iteration 28, L1 9.36352e-05, Linf 0.0042049, total time[s] 0.072394 +Converged at iteration 24, L1 8.21782e-05, Linf 0.00304608, total time[s] 0.066853 +Converged at iteration 26, L1 8.69621e-05, Linf 0.00389535, total time[s] 0.081868 +Converged at iteration 40, L1 6.60143e-05, Linf 0.00398565, total time[s] 0.100052 +Converged at iteration 35, L1 8.8701e-05, Linf 0.00365315, total time[s] 0.096621 +Converged at iteration 30, L1 9.00496e-05, Linf 0.00417718, total time[s] 0.077266 +Converged at iteration 31, L1 6.16485e-05, Linf 0.00505099, total time[s] 0.088764 +Converged at iteration 26, L1 9.69241e-05, Linf 0.00576117, total time[s] 0.066639 +Converged at iteration 22, L1 6.8929e-05, Linf 0.00411832, total time[s] 0.060429 +Converged at iteration 21, L1 6.50743e-05, Linf 0.00356311, total time[s] 0.056521 +Converged at iteration 24, L1 8.90401e-05, Linf 0.004988, total time[s] 0.067019 +Converged at iteration 28, L1 7.21883e-05, Linf 0.00442746, total time[s] 0.074818 +Converged at iteration 26, L1 8.0455e-05, Linf 0.00521295, total time[s] 0.067048 +Converged at iteration 22, L1 6.98386e-05, Linf 0.00765948, total time[s] 0.057757 +Converged at iteration 18, L1 9.77843e-05, Linf 0.00399384, total time[s] 0.054296 +Converged at iteration 30, L1 9.84801e-05, Linf 0.00331017, total time[s] 0.076116 +Converged at iteration 20, L1 8.34598e-05, Linf 0.00469571, total time[s] 0.053266 +Converged at iteration 24, L1 7.08748e-05, Linf 0.00479558, total time[s] 0.064246 +Converged at iteration 31, L1 9.50575e-05, Linf 0.00443953, total time[s] 0.084809 +Converged at iteration 27, L1 8.86696e-05, Linf 0.0042534, total time[s] 0.07034 +Converged at iteration 24, L1 8.34616e-05, Linf 0.00411275, total time[s] 0.065334 +Converged at iteration 23, L1 9.22168e-05, Linf 0.00437517, total time[s] 0.075402 +Converged at iteration 26, L1 7.09247e-05, Linf 0.00470743, total time[s] 0.088646 +Converged at iteration 29, L1 7.50291e-05, Linf 0.00490087, total time[s] 0.077815 +Converged at iteration 34, L1 8.32356e-05, Linf 0.00373673, total time[s] 0.088151 +Converged at iteration 31, L1 7.31899e-05, Linf 0.00351135, total time[s] 0.079445 +Converged at iteration 29, L1 7.18317e-05, Linf 0.00276078, total time[s] 0.075633 +Converged at iteration 32, L1 8.04843e-05, Linf 0.00350839, total time[s] 0.082498 +Converged at iteration 36, L1 8.24112e-05, Linf 0.00351373, total time[s] 0.098239 +Converged at iteration 33, L1 8.27821e-05, Linf 0.00470129, total time[s] 0.085167 +Converged at iteration 28, L1 9.03284e-05, Linf 0.00410072, total time[s] 0.081445 +Converged at iteration 24, L1 7.95705e-05, Linf 0.00283993, total time[s] 0.066895 +Converged at iteration 26, L1 8.32428e-05, Linf 0.00394022, total time[s] 0.074288 +Converged at iteration 39, L1 9.9111e-05, Linf 0.00501372, total time[s] 0.099085 +Converged at iteration 36, L1 6.78593e-05, Linf 0.00333828, total time[s] 0.098107 +Converged at iteration 29, L1 8.70942e-05, Linf 0.00578143, total time[s] 0.075832 +Converged at iteration 31, L1 6.27791e-05, Linf 0.00506858, total time[s] 0.079291 +Converged at iteration 26, L1 8.93859e-05, Linf 0.00564757, total time[s] 0.07427 +Converged at iteration 21, L1 9.01959e-05, Linf 0.00446951, total time[s] 0.05955 +Converged at iteration 21, L1 6.51217e-05, Linf 0.00406165, total time[s] 0.057393 +Converged at iteration 24, L1 6.99354e-05, Linf 0.005303, total time[s] 0.064814 +Converged at iteration 28, L1 6.26417e-05, Linf 0.00441021, total time[s] 0.072851 +Converged at iteration 26, L1 7.34343e-05, Linf 0.00374109, total time[s] 0.074638 +Converged at iteration 21, L1 6.96433e-05, Linf 0.00787548, total time[s] 0.058263 +Converged at iteration 18, L1 6.28773e-05, Linf 0.00279219, total time[s] 0.049966 +Converged at iteration 31, L1 7.87189e-05, Linf 0.00269982, total time[s] 0.081346 +Converged at iteration 20, L1 8.11706e-05, Linf 0.00504168, total time[s] 0.054147 +Converged at iteration 24, L1 6.82646e-05, Linf 0.00493035, total time[s] 0.064463 +Converged at iteration 30, L1 7.14736e-05, Linf 0.00295393, total time[s] 0.079794 +Converged at iteration 25, L1 6.42898e-05, Linf 0.00436278, total time[s] 0.064841 +Converged at iteration 22, L1 9.63596e-05, Linf 0.00438881, total time[s] 0.058004 +Converged at iteration 23, L1 9.36121e-05, Linf 0.00460607, total time[s] 0.060218 +Converged at iteration 26, L1 6.76514e-05, Linf 0.00485355, total time[s] 0.068276 +Converged at iteration 29, L1 6.98651e-05, Linf 0.00476997, total time[s] 0.072705 +Converged at iteration 31, L1 8.70331e-05, Linf 0.00390643, total time[s] 0.078488 +Converged at iteration 30, L1 8.03089e-05, Linf 0.00316845, total time[s] 0.075741 +Converged at iteration 29, L1 7.96839e-05, Linf 0.00298731, total time[s] 0.072934 +Converged at iteration 32, L1 7.22057e-05, Linf 0.00331809, total time[s] 0.079993 +Converged at iteration 35, L1 7.04451e-05, Linf 0.00380859, total time[s] 0.087618 +Converged at iteration 33, L1 7.96e-05, Linf 0.0048777, total time[s] 0.081848 +Converged at iteration 28, L1 8.15494e-05, Linf 0.00389268, total time[s] 0.071623 +Converged at iteration 24, L1 7.83679e-05, Linf 0.00242248, total time[s] 0.062076 +Converged at iteration 26, L1 7.89099e-05, Linf 0.00410381, total time[s] 0.065815 +Converged at iteration 39, L1 9.01435e-05, Linf 0.00571845, total time[s] 0.097038 +Converged at iteration 36, L1 7.35109e-05, Linf 0.0040825, total time[s] 0.09177 +Converged at iteration 26, L1 5.47006e-05, Linf 0.00580012, total time[s] 0.066477 +Converged at iteration 31, L1 6.20225e-05, Linf 0.00836929, total time[s] 0.079488 +Converged at iteration 26, L1 7.09507e-05, Linf 0.00533279, total time[s] 0.066669 +Converged at iteration 21, L1 6.39688e-05, Linf 0.00341145, total time[s] 0.054699 +Converged at iteration 20, L1 5.51814e-05, Linf 0.00444398, total time[s] 0.054093 +Converged at iteration 22, L1 4.42738e-05, Linf 0.00764432, total time[s] 0.105046 +Converged at iteration 26, L1 6.85007e-05, Linf 0.00593038, total time[s] 0.075309 +Converged at iteration 25, L1 6.24235e-05, Linf 0.00405001, total time[s] 0.073236 +Converged at iteration 20, L1 7.90689e-05, Linf 0.00549734, total time[s] 0.069216 +Converged at iteration 17, L1 7.55467e-05, Linf 0.00405403, total time[s] 0.070155 +Converged at iteration 31, L1 9.71281e-05, Linf 0.00279655, total time[s] 0.080776 +Converged at iteration 20, L1 6.21566e-05, Linf 0.00521842, total time[s] 0.05204 +Converged at iteration 23, L1 9.74253e-05, Linf 0.00670132, total time[s] 0.060499 +Converged at iteration 27, L1 8.57288e-05, Linf 0.00521378, total time[s] 0.069677 +Converged at iteration 23, L1 8.32969e-05, Linf 0.00705363, total time[s] 0.059859 +Converged at iteration 21, L1 8.00117e-05, Linf 0.00481008, total time[s] 0.057359 +Converged at iteration 23, L1 7.32195e-05, Linf 0.00375605, total time[s] 0.061221 +Converged at iteration 25, L1 9.63644e-05, Linf 0.00631097, total time[s] 0.065988 +Converged at iteration 28, L1 9.41833e-05, Linf 0.00547337, total time[s] 0.072643 +Converged at iteration 30, L1 5.87455e-05, Linf 0.00493004, total time[s] 0.077568 +Converged at iteration 28, L1 6.73861e-05, Linf 0.00331994, total time[s] 0.072625 +Converged at iteration 29, L1 8.61646e-05, Linf 0.00343145, total time[s] 0.073831 +Converged at iteration 30, L1 8.65915e-05, Linf 0.00304732, total time[s] 0.077736 +Converged at iteration 30, L1 8.91879e-05, Linf 0.00326482, total time[s] 0.076375 +Converged at iteration 33, L1 7.14384e-05, Linf 0.00542243, total time[s] 0.08329 +Converged at iteration 28, L1 6.41702e-05, Linf 0.00353976, total time[s] 0.071549 +Converged at iteration 24, L1 8.83208e-05, Linf 0.00177425, total time[s] 0.062898 +Converged at iteration 24, L1 8.9397e-05, Linf 0.00467984, total time[s] 0.063247 +Converged at iteration 39, L1 7.11923e-05, Linf 0.00700335, total time[s] 0.098592 +Converged at iteration 36, L1 7.16339e-05, Linf 0.00581403, total time[s] 0.093892 +Converged at iteration 24, L1 6.16041e-05, Linf 0.0028624, total time[s] 0.068338 +Converged at iteration 31, L1 5.69912e-05, Linf 0.00508744, total time[s] 0.087622 +Converged at iteration 25, L1 7.34729e-05, Linf 0.00540444, total time[s] 0.065235 +Converged at iteration 20, L1 9.81883e-05, Linf 0.00429005, total time[s] 0.054542 +Converged at iteration 19, L1 5.8817e-05, Linf 0.0044147, total time[s] 0.051528 +Converged at iteration 20, L1 7.77201e-05, Linf 0.00669256, total time[s] 0.053233 +Converged at iteration 24, L1 5.60371e-05, Linf 0.00384941, total time[s] 0.063607 +Converged at iteration 24, L1 6.51935e-05, Linf 0.00478766, total time[s] 0.064407 +Converged at iteration 20, L1 5.38675e-05, Linf 0.00527045, total time[s] 0.053457 +Converged at iteration 16, L1 9.22952e-05, Linf 0.00350083, total time[s] 0.044855 +Converged at iteration 32, L1 6.81865e-05, Linf 0.00267633, total time[s] 0.081772 +Converged at iteration 19, L1 9.10045e-05, Linf 0.00666417, total time[s] 0.053889 +Converged at iteration 23, L1 7.25209e-05, Linf 0.00651743, total time[s] 0.063122 +Converged at iteration 26, L1 6.72841e-05, Linf 0.0055199, total time[s] 0.068913 +Converged at iteration 23, L1 5.44002e-05, Linf 0.00523321, total time[s] 0.061602 +Converged at iteration 20, L1 6.9737e-05, Linf 0.00498689, total time[s] 0.055173 +Converged at iteration 22, L1 9.64203e-05, Linf 0.00421046, total time[s] 0.058899 +Converged at iteration 25, L1 8.13299e-05, Linf 0.00375222, total time[s] 0.067472 +Converged at iteration 28, L1 7.15717e-05, Linf 0.00375838, total time[s] 0.072413 +Converged at iteration 29, L1 6.61214e-05, Linf 0.00599597, total time[s] 0.07582 +Converged at iteration 27, L1 6.57594e-05, Linf 0.00389127, total time[s] 0.070385 +Converged at iteration 29, L1 7.48223e-05, Linf 0.00398896, total time[s] 0.07628 +Converged at iteration 29, L1 8.37793e-05, Linf 0.00274492, total time[s] 0.079453 +Converged at iteration 28, L1 6.66474e-05, Linf 0.00227464, total time[s] 0.07453 +Converged at iteration 33, L1 5.76527e-05, Linf 0.00604969, total time[s] 0.084416 +Converged at iteration 26, L1 9.40898e-05, Linf 0.00347859, total time[s] 0.067176 +Converged at iteration 25, L1 7.06137e-05, Linf 0.00197686, total time[s] 0.068116 +Converged at iteration 23, L1 6.10104e-05, Linf 0.00273805, total time[s] 0.06915 +Converged at iteration 39, L1 7.05223e-05, Linf 0.00700899, total time[s] 0.099499 +Converged at iteration 36, L1 7.07876e-05, Linf 0.00585204, total time[s] 0.09461 +Converged at iteration 24, L1 6.20075e-05, Linf 0.00283904, total time[s] 0.062843 +Converged at iteration 31, L1 5.6878e-05, Linf 0.00507791, total time[s] 0.07846 +Converged at iteration 25, L1 7.43183e-05, Linf 0.00547897, total time[s] 0.076013 +Converged at iteration 20, L1 9.97887e-05, Linf 0.00432898, total time[s] 0.055145 +Converged at iteration 19, L1 5.80128e-05, Linf 0.00438082, total time[s] 0.050923 +Converged at iteration 20, L1 7.7591e-05, Linf 0.00653708, total time[s] 0.087702 +Converged at iteration 24, L1 5.52443e-05, Linf 0.00400709, total time[s] 0.101635 +Converged at iteration 24, L1 6.608e-05, Linf 0.0048025, total time[s] 0.084221 +Converged at iteration 20, L1 5.49543e-05, Linf 0.00527434, total time[s] 0.087869 +Converged at iteration 16, L1 9.14833e-05, Linf 0.00361822, total time[s] 0.061333 +Converged at iteration 32, L1 6.81203e-05, Linf 0.00269926, total time[s] 0.105297 +Converged at iteration 19, L1 9.1201e-05, Linf 0.00663134, total time[s] 0.058982 +Converged at iteration 23, L1 7.23019e-05, Linf 0.00643717, total time[s] 0.070072 +Converged at iteration 26, L1 6.73588e-05, Linf 0.00545487, total time[s] 0.071822 +Converged at iteration 23, L1 5.38779e-05, Linf 0.00517484, total time[s] 0.062574 +Converged at iteration 20, L1 6.96146e-05, Linf 0.00496579, total time[s] 0.054959 +Converged at iteration 22, L1 9.68261e-05, Linf 0.00414127, total time[s] 0.065565 +Converged at iteration 25, L1 8.10898e-05, Linf 0.0036811, total time[s] 0.067708 +Converged at iteration 28, L1 7.17695e-05, Linf 0.00365739, total time[s] 0.069038 +Converged at iteration 29, L1 6.59409e-05, Linf 0.00599151, total time[s] 0.071836 +Converged at iteration 27, L1 6.58713e-05, Linf 0.00385045, total time[s] 0.069346 +Converged at iteration 29, L1 7.56021e-05, Linf 0.00400728, total time[s] 0.073557 +Converged at iteration 29, L1 8.41055e-05, Linf 0.00274454, total time[s] 0.075403 +Converged at iteration 28, L1 6.65456e-05, Linf 0.00225801, total time[s] 0.073658 +Converged at iteration 32, L1 9.98928e-05, Linf 0.00721957, total time[s] 0.099811 +Converged at iteration 26, L1 9.44832e-05, Linf 0.00353784, total time[s] 0.073491 +Converged at iteration 25, L1 7.20267e-05, Linf 0.00200844, total time[s] 0.066479 +Converged at iteration 23, L1 6.08352e-05, Linf 0.00271379, total time[s] 0.062062 +Converged at iteration 39, L1 6.89328e-05, Linf 0.00701381, total time[s] 0.102131 +Converged at iteration 36, L1 6.97068e-05, Linf 0.00589474, total time[s] 0.093345 +Converged at iteration 24, L1 6.17054e-05, Linf 0.00285698, total time[s] 0.06412 +Converged at iteration 31, L1 5.5656e-05, Linf 0.00506006, total time[s] 0.079629 +Converged at iteration 25, L1 7.49422e-05, Linf 0.00557498, total time[s] 0.066261 +Converged at iteration 20, L1 9.95093e-05, Linf 0.00435966, total time[s] 0.060002 +Converged at iteration 19, L1 5.67509e-05, Linf 0.00436309, total time[s] 0.052943 +Converged at iteration 20, L1 7.72936e-05, Linf 0.00633053, total time[s] 0.056238 +Converged at iteration 24, L1 5.48152e-05, Linf 0.00409046, total time[s] 0.068878 +Converged at iteration 24, L1 6.78764e-05, Linf 0.00487698, total time[s] 0.064536 +Converged at iteration 20, L1 5.55177e-05, Linf 0.00523765, total time[s] 0.056007 +Converged at iteration 16, L1 9.05944e-05, Linf 0.00371645, total time[s] 0.04585 +Converged at iteration 32, L1 6.78744e-05, Linf 0.00271882, total time[s] 0.083695 +Converged at iteration 19, L1 9.12072e-05, Linf 0.00661658, total time[s] 0.051624 +Converged at iteration 23, L1 7.2309e-05, Linf 0.00634875, total time[s] 0.062608 +Converged at iteration 26, L1 6.66744e-05, Linf 0.00540701, total time[s] 0.07228 +Converged at iteration 23, L1 5.37174e-05, Linf 0.00516172, total time[s] 0.063765 +Converged at iteration 20, L1 6.99441e-05, Linf 0.00492282, total time[s] 0.054933 +Converged at iteration 22, L1 9.83118e-05, Linf 0.00428445, total time[s] 0.073572 +Converged at iteration 25, L1 8.05719e-05, Linf 0.00362352, total time[s] 0.06617 +Converged at iteration 28, L1 7.10293e-05, Linf 0.00357349, total time[s] 0.073857 +Converged at iteration 29, L1 6.65244e-05, Linf 0.00602667, total time[s] 0.076732 +Converged at iteration 27, L1 6.65132e-05, Linf 0.00386733, total time[s] 0.073181 +Converged at iteration 29, L1 7.65299e-05, Linf 0.0040385, total time[s] 0.077934 +Converged at iteration 29, L1 8.47225e-05, Linf 0.00275099, total time[s] 0.075497 +Converged at iteration 28, L1 6.67082e-05, Linf 0.00223909, total time[s] 0.074082 +Converged at iteration 32, L1 9.88992e-05, Linf 0.00723406, total time[s] 0.082981 +Converged at iteration 26, L1 9.52586e-05, Linf 0.00361139, total time[s] 0.068101 +Converged at iteration 25, L1 7.38257e-05, Linf 0.0020657, total time[s] 0.066492 +Converged at iteration 23, L1 6.07189e-05, Linf 0.00268479, total time[s] 0.066291 +Converged at iteration 39, L1 6.7946e-05, Linf 0.00700638, total time[s] 0.099583 +Converged at iteration 36, L1 6.86902e-05, Linf 0.00593327, total time[s] 0.093843 +Converged at iteration 24, L1 6.18979e-05, Linf 0.002843, total time[s] 0.06324 +Converged at iteration 30, L1 9.93533e-05, Linf 0.00621026, total time[s] 0.078645 +Converged at iteration 25, L1 7.75644e-05, Linf 0.0057454, total time[s] 0.066575 +Converged at iteration 20, L1 9.96653e-05, Linf 0.00435735, total time[s] 0.054882 +Converged at iteration 19, L1 5.57546e-05, Linf 0.00436476, total time[s] 0.052726 +Converged at iteration 20, L1 7.6739e-05, Linf 0.0063572, total time[s] 0.054754 +Converged at iteration 24, L1 5.38491e-05, Linf 0.0036643, total time[s] 0.064674 +Converged at iteration 24, L1 6.85538e-05, Linf 0.00496755, total time[s] 0.064572 +Converged at iteration 20, L1 5.72552e-05, Linf 0.00534503, total time[s] 0.053477 +Converged at iteration 16, L1 9.03209e-05, Linf 0.00382927, total time[s] 0.045364 +Converged at iteration 32, L1 6.72867e-05, Linf 0.00273723, total time[s] 0.082419 +Converged at iteration 19, L1 9.16785e-05, Linf 0.00650792, total time[s] 0.053396 +Converged at iteration 23, L1 7.23127e-05, Linf 0.00599827, total time[s] 0.061913 +Converged at iteration 26, L1 6.71498e-05, Linf 0.0054061, total time[s] 0.069296 +Converged at iteration 23, L1 5.33126e-05, Linf 0.00513775, total time[s] 0.062029 +Converged at iteration 20, L1 7.0381e-05, Linf 0.004926, total time[s] 0.055333 +Converged at iteration 23, L1 6.3406e-05, Linf 0.00275522, total time[s] 0.06177 +Converged at iteration 25, L1 8.08647e-05, Linf 0.00356875, total time[s] 0.066947 +Converged at iteration 28, L1 7.14603e-05, Linf 0.00351123, total time[s] 0.07354 +Converged at iteration 29, L1 6.74076e-05, Linf 0.0060545, total time[s] 0.076012 +Converged at iteration 27, L1 6.72518e-05, Linf 0.00388176, total time[s] 0.071516 +Converged at iteration 29, L1 7.74326e-05, Linf 0.00407895, total time[s] 0.075736 +Converged at iteration 29, L1 8.52371e-05, Linf 0.00275707, total time[s] 0.076558 +Converged at iteration 28, L1 6.68567e-05, Linf 0.00221625, total time[s] 0.074502 +Converged at iteration 32, L1 9.73771e-05, Linf 0.00723313, total time[s] 0.085222 +Converged at iteration 26, L1 9.75926e-05, Linf 0.0037537, total time[s] 0.077826 +Converged at iteration 25, L1 7.47177e-05, Linf 0.00212498, total time[s] 0.065121 +Converged at iteration 23, L1 6.09916e-05, Linf 0.00255924, total time[s] 0.204616 +Converged at iteration 39, L1 6.68459e-05, Linf 0.00698627, total time[s] 0.122099 +Converged at iteration 36, L1 6.71149e-05, Linf 0.00596269, total time[s] 0.090649 +Converged at iteration 24, L1 6.23551e-05, Linf 0.00278688, total time[s] 0.062366 +Converged at iteration 30, L1 9.84191e-05, Linf 0.00618071, total time[s] 0.075147 +Converged at iteration 25, L1 8.20085e-05, Linf 0.0059976, total time[s] 0.065362 +Converged at iteration 21, L1 5.98872e-05, Linf 0.00385112, total time[s] 0.054965 +Converged at iteration 19, L1 5.53405e-05, Linf 0.00437875, total time[s] 0.049837 +Converged at iteration 20, L1 7.57613e-05, Linf 0.00675627, total time[s] 0.053842 +Converged at iteration 24, L1 5.2871e-05, Linf 0.00316163, total time[s] 0.063163 +Converged at iteration 24, L1 7.27665e-05, Linf 0.00510487, total time[s] 0.062873 +Converged at iteration 20, L1 6.09289e-05, Linf 0.00542554, total time[s] 0.057122 +Converged at iteration 16, L1 8.99974e-05, Linf 0.00397809, total time[s] 0.081856 +Converged at iteration 32, L1 6.64847e-05, Linf 0.00275664, total time[s] 0.087459 +Converged at iteration 19, L1 9.21232e-05, Linf 0.00648723, total time[s] 0.050759 +Converged at iteration 23, L1 7.26182e-05, Linf 0.00614718, total time[s] 0.063984 +Converged at iteration 26, L1 6.78713e-05, Linf 0.00536595, total time[s] 0.076405 +Converged at iteration 23, L1 5.29247e-05, Linf 0.00511411, total time[s] 0.059332 +Converged at iteration 20, L1 7.14295e-05, Linf 0.00496445, total time[s] 0.05347 +Converged at iteration 23, L1 6.63028e-05, Linf 0.00372038, total time[s] 0.060142 +Converged at iteration 25, L1 8.16055e-05, Linf 0.00351885, total time[s] 0.065004 +Converged at iteration 28, L1 7.25679e-05, Linf 0.00345934, total time[s] 0.071886 +Converged at iteration 29, L1 6.89678e-05, Linf 0.00611671, total time[s] 0.07318 +Converged at iteration 27, L1 6.86755e-05, Linf 0.00390899, total time[s] 0.068325 +Converged at iteration 29, L1 7.88323e-05, Linf 0.00413058, total time[s] 0.07256 +Converged at iteration 29, L1 8.57548e-05, Linf 0.0027634, total time[s] 0.072996 +Converged at iteration 28, L1 6.71513e-05, Linf 0.00218439, total time[s] 0.071282 +Converged at iteration 32, L1 9.57133e-05, Linf 0.00721308, total time[s] 0.080235 +Converged at iteration 27, L1 6.05217e-05, Linf 0.00339324, total time[s] 0.068462 +Converged at iteration 25, L1 7.55276e-05, Linf 0.00219146, total time[s] 0.063737 +Converged at iteration 23, L1 6.19932e-05, Linf 0.00253549, total time[s] 0.060862 +Converged at iteration 39, L1 6.56758e-05, Linf 0.00695812, total time[s] 0.099362 +Converged at iteration 36, L1 6.5119e-05, Linf 0.00599361, total time[s] 0.098682 +Converged at iteration 24, L1 6.36689e-05, Linf 0.00273112, total time[s] 0.063311 +Converged at iteration 30, L1 9.66363e-05, Linf 0.00614716, total time[s] 0.076972 +Converged at iteration 25, L1 8.6949e-05, Linf 0.00632786, total time[s] 0.065492 +Converged at iteration 21, L1 5.97416e-05, Linf 0.00376484, total time[s] 0.056121 +Converged at iteration 19, L1 5.50557e-05, Linf 0.00439439, total time[s] 0.051122 +Converged at iteration 20, L1 7.44824e-05, Linf 0.0064266, total time[s] 0.053281 +Converged at iteration 24, L1 5.14297e-05, Linf 0.0035294, total time[s] 0.075187 +Converged at iteration 24, L1 7.59309e-05, Linf 0.00528499, total time[s] 0.065769 +Converged at iteration 20, L1 6.32436e-05, Linf 0.00552666, total time[s] 0.053587 +Converged at iteration 16, L1 9.00194e-05, Linf 0.00418454, total time[s] 0.044437 +Converged at iteration 32, L1 6.4601e-05, Linf 0.00277656, total time[s] 0.090606 +Converged at iteration 19, L1 9.14563e-05, Linf 0.00640463, total time[s] 0.053055 +Converged at iteration 23, L1 7.20552e-05, Linf 0.00599671, total time[s] 0.062006 +Converged at iteration 26, L1 6.83017e-05, Linf 0.00536554, total time[s] 0.06969 +Converged at iteration 23, L1 5.27787e-05, Linf 0.00511065, total time[s] 0.062141 +Converged at iteration 20, L1 7.3236e-05, Linf 0.00498623, total time[s] 0.054138 +Converged at iteration 23, L1 6.70026e-05, Linf 0.00267498, total time[s] 0.062512 +Converged at iteration 25, L1 8.26639e-05, Linf 0.00345051, total time[s] 0.067375 +Converged at iteration 28, L1 7.35899e-05, Linf 0.00340841, total time[s] 0.073397 +Converged at iteration 29, L1 7.1155e-05, Linf 0.00615283, total time[s] 0.076548 +Converged at iteration 27, L1 7.07547e-05, Linf 0.00391115, total time[s] 0.071026 +Converged at iteration 29, L1 8.07328e-05, Linf 0.00419067, total time[s] 0.076179 +Converged at iteration 29, L1 8.59947e-05, Linf 0.00278122, total time[s] 0.075343 +Converged at iteration 28, L1 6.74487e-05, Linf 0.00214397, total time[s] 0.074586 +Converged at iteration 32, L1 9.38729e-05, Linf 0.00717759, total time[s] 0.082941 +Converged at iteration 27, L1 6.48025e-05, Linf 0.00368841, total time[s] 0.071318 +Converged at iteration 25, L1 7.41918e-05, Linf 0.002246, total time[s] 0.066199 +Converged at iteration 23, L1 6.33846e-05, Linf 0.00248015, total time[s] 0.061976 +Converged at iteration 39, L1 6.49326e-05, Linf 0.00691747, total time[s] 0.101511 +Converged at iteration 36, L1 6.35385e-05, Linf 0.00600889, total time[s] 0.09585 +Converged at iteration 24, L1 6.55815e-05, Linf 0.00271402, total time[s] 0.063672 +Converged at iteration 30, L1 9.52568e-05, Linf 0.00610857, total time[s] 0.079318 +Converged at iteration 25, L1 9.28381e-05, Linf 0.00670845, total time[s] 0.067336 +Converged at iteration 21, L1 6.4951e-05, Linf 0.00367324, total time[s] 0.060492 +Converged at iteration 19, L1 5.45294e-05, Linf 0.00442131, total time[s] 0.054413 +Converged at iteration 20, L1 7.35388e-05, Linf 0.00617018, total time[s] 0.05461 +Converged at iteration 23, L1 9.84053e-05, Linf 0.00489762, total time[s] 0.064145 +Converged at iteration 24, L1 8.00979e-05, Linf 0.00548957, total time[s] 0.064596 +Converged at iteration 20, L1 6.76113e-05, Linf 0.0056405, total time[s] 0.055415 +Converged at iteration 16, L1 8.99583e-05, Linf 0.00442769, total time[s] 0.045173 +Converged at iteration 32, L1 6.27482e-05, Linf 0.00278382, total time[s] 0.087272 +Converged at iteration 19, L1 9.06743e-05, Linf 0.00631067, total time[s] 0.053504 +Converged at iteration 23, L1 7.11931e-05, Linf 0.00584381, total time[s] 0.063857 +Converged at iteration 26, L1 6.90732e-05, Linf 0.00533455, total time[s] 0.068788 +Converged at iteration 23, L1 5.30143e-05, Linf 0.00510073, total time[s] 0.062443 +Converged at iteration 20, L1 7.54539e-05, Linf 0.00502925, total time[s] 0.05535 +Converged at iteration 23, L1 6.87526e-05, Linf 0.00262507, total time[s] 0.063037 +Converged at iteration 25, L1 8.36874e-05, Linf 0.00339557, total time[s] 0.070303 +Converged at iteration 28, L1 7.50537e-05, Linf 0.0034621, total time[s] 0.073821 +Converged at iteration 29, L1 7.38324e-05, Linf 0.00621187, total time[s] 0.075643 +Converged at iteration 27, L1 7.28941e-05, Linf 0.00388705, total time[s] 0.072477 +Converged at iteration 29, L1 8.21823e-05, Linf 0.00425794, total time[s] 0.075835 +Converged at iteration 29, L1 8.68831e-05, Linf 0.00280067, total time[s] 0.075661 +Converged at iteration 28, L1 6.80444e-05, Linf 0.00210389, total time[s] 0.073158 +Converged at iteration 32, L1 9.20625e-05, Linf 0.00712791, total time[s] 0.08412 +Converged at iteration 27, L1 6.82761e-05, Linf 0.00402608, total time[s] 0.071629 +Converged at iteration 24, L1 9.99708e-05, Linf 0.00279766, total time[s] 0.064838 +Converged at iteration 23, L1 6.49234e-05, Linf 0.00242185, total time[s] 0.06224 +Converged at iteration 39, L1 6.41335e-05, Linf 0.00687435, total time[s] 0.100953 +Converged at iteration 36, L1 6.11254e-05, Linf 0.00600244, total time[s] 0.098334 +Converged at iteration 24, L1 6.78417e-05, Linf 0.00272104, total time[s] 0.063994 +Converged at iteration 30, L1 9.4498e-05, Linf 0.00606473, total time[s] 0.077034 +Converged at iteration 25, L1 9.95282e-05, Linf 0.00714157, total time[s] 0.064953 +Converged at iteration 21, L1 7.43744e-05, Linf 0.00352749, total time[s] 0.055987 +Converged at iteration 19, L1 5.45652e-05, Linf 0.00441375, total time[s] 0.051239 +Converged at iteration 20, L1 7.22966e-05, Linf 0.00628243, total time[s] 0.053688 +Converged at iteration 23, L1 9.54026e-05, Linf 0.00454475, total time[s] 0.062202 +Converged at iteration 24, L1 8.45747e-05, Linf 0.00571498, total time[s] 0.06317 +Converged at iteration 20, L1 7.28286e-05, Linf 0.0057633, total time[s] 0.053725 +Converged at iteration 16, L1 8.98114e-05, Linf 0.0047197, total time[s] 0.044101 +Converged at iteration 32, L1 6.01176e-05, Linf 0.00276727, total time[s] 0.082078 +Converged at iteration 19, L1 9.01082e-05, Linf 0.00620936, total time[s] 0.050719 +Converged at iteration 23, L1 7.03866e-05, Linf 0.00567777, total time[s] 0.067433 +Converged at iteration 26, L1 7.01791e-05, Linf 0.00529939, total time[s] 0.071912 +Converged at iteration 23, L1 5.34612e-05, Linf 0.00509585, total time[s] 0.061208 +Converged at iteration 20, L1 7.86885e-05, Linf 0.00508358, total time[s] 0.056133 +Converged at iteration 23, L1 6.99411e-05, Linf 0.00256698, total time[s] 0.059032 +Converged at iteration 25, L1 8.50524e-05, Linf 0.00334953, total time[s] 0.065567 +Converged at iteration 28, L1 7.67558e-05, Linf 0.00354111, total time[s] 0.072459 +Converged at iteration 29, L1 7.66676e-05, Linf 0.00629344, total time[s] 0.075605 +Converged at iteration 27, L1 7.55734e-05, Linf 0.00376124, total time[s] 0.071064 +Converged at iteration 29, L1 8.41408e-05, Linf 0.0043308, total time[s] 0.076263 +Converged at iteration 29, L1 8.77477e-05, Linf 0.00283489, total time[s] 0.080657 +Converged at iteration 28, L1 6.87355e-05, Linf 0.00206753, total time[s] 0.073041 +Converged at iteration 32, L1 8.98022e-05, Linf 0.00706054, total time[s] 0.082123 +Converged at iteration 27, L1 7.24239e-05, Linf 0.00442611, total time[s] 0.069788 +Converged at iteration 24, L1 9.45189e-05, Linf 0.00274233, total time[s] 0.063508 +Converged at iteration 23, L1 6.67908e-05, Linf 0.00241361, total time[s] 0.06042 +Converged at iteration 39, L1 6.35013e-05, Linf 0.00681992, total time[s] 0.123555 +Converged at iteration 36, L1 5.82933e-05, Linf 0.00593547, total time[s] 0.111389 +Converged at iteration 24, L1 7.0387e-05, Linf 0.00278454, total time[s] 0.069281 +Converged at iteration 30, L1 9.21721e-05, Linf 0.00601269, total time[s] 0.090643 +Converged at iteration 26, L1 5.94848e-05, Linf 0.00634967, total time[s] 0.070393 +Converged at iteration 21, L1 8.78424e-05, Linf 0.00408936, total time[s] 0.059109 +Converged at iteration 19, L1 5.58972e-05, Linf 0.00451146, total time[s] 0.053789 +Converged at iteration 20, L1 7.09117e-05, Linf 0.00582226, total time[s] 0.054457 +Converged at iteration 23, L1 9.30533e-05, Linf 0.00477458, total time[s] 0.064396 +Converged at iteration 24, L1 8.8093e-05, Linf 0.00595678, total time[s] 0.06535 +Converged at iteration 20, L1 7.8733e-05, Linf 0.00583475, total time[s] 0.055023 +Converged at iteration 16, L1 9.00458e-05, Linf 0.00503349, total time[s] 0.045295 +Converged at iteration 32, L1 5.51378e-05, Linf 0.0027192, total time[s] 0.082192 +Converged at iteration 19, L1 8.91542e-05, Linf 0.00607599, total time[s] 0.053486 +Converged at iteration 23, L1 6.9024e-05, Linf 0.00549401, total time[s] 0.061255 +Converged at iteration 26, L1 7.14748e-05, Linf 0.00526633, total time[s] 0.069019 +Converged at iteration 23, L1 5.38226e-05, Linf 0.00513982, total time[s] 0.063382 +Converged at iteration 20, L1 8.27271e-05, Linf 0.00515892, total time[s] 0.054754 +Converged at iteration 23, L1 7.09423e-05, Linf 0.00249431, total time[s] 0.061261 +Converged at iteration 25, L1 8.66314e-05, Linf 0.00331117, total time[s] 0.066729 +Converged at iteration 28, L1 7.87119e-05, Linf 0.0036648, total time[s] 0.072956 +Converged at iteration 29, L1 8.02187e-05, Linf 0.00642133, total time[s] 0.074758 +Converged at iteration 27, L1 7.77449e-05, Linf 0.00352411, total time[s] 0.070093 +Converged at iteration 29, L1 8.55774e-05, Linf 0.004411, total time[s] 0.074164 +Converged at iteration 29, L1 9.03763e-05, Linf 0.00285746, total time[s] 0.074492 +Converged at iteration 28, L1 7.02185e-05, Linf 0.00201947, total time[s] 0.073477 +Converged at iteration 32, L1 8.68678e-05, Linf 0.00696828, total time[s] 0.082578 +Converged at iteration 27, L1 7.86671e-05, Linf 0.00489619, total time[s] 0.070281 +Converged at iteration 24, L1 9.45629e-05, Linf 0.00274391, total time[s] 0.063523 +Converged at iteration 23, L1 6.91461e-05, Linf 0.00243562, total time[s] 0.061656 +Converged at iteration 39, L1 6.27556e-05, Linf 0.00674657, total time[s] 0.09889 +Converged at iteration 36, L1 5.37831e-05, Linf 0.00574102, total time[s] 0.095016 +Converged at iteration 24, L1 7.48027e-05, Linf 0.00291553, total time[s] 0.063257 +Converged at iteration 30, L1 8.9657e-05, Linf 0.00595459, total time[s] 0.076716 +Converged at iteration 26, L1 6.39874e-05, Linf 0.00669151, total time[s] 0.067942 +Converged at iteration 22, L1 5.41672e-05, Linf 0.0040638, total time[s] 0.058725 +Converged at iteration 19, L1 5.64679e-05, Linf 0.00458748, total time[s] 0.052631 +Converged at iteration 20, L1 6.94471e-05, Linf 0.0056015, total time[s] 0.054607 +Converged at iteration 23, L1 9.05514e-05, Linf 0.00429993, total time[s] 0.060999 +Converged at iteration 24, L1 9.45589e-05, Linf 0.00620022, total time[s] 0.064817 +Converged at iteration 20, L1 8.51671e-05, Linf 0.00596709, total time[s] 0.054754 +Converged at iteration 16, L1 9.05121e-05, Linf 0.00534722, total time[s] 0.045999 +Converged at iteration 31, L1 9.35131e-05, Linf 0.00338308, total time[s] 0.081603 +Converged at iteration 19, L1 8.72549e-05, Linf 0.00607173, total time[s] 0.052089 +Converged at iteration 23, L1 6.74905e-05, Linf 0.00529664, total time[s] 0.06665 +Converged at iteration 26, L1 7.29763e-05, Linf 0.00522717, total time[s] 0.073826 +Converged at iteration 23, L1 5.39143e-05, Linf 0.00521501, total time[s] 0.062151 +Converged at iteration 20, L1 8.8085e-05, Linf 0.00526506, total time[s] 0.055005 +Converged at iteration 23, L1 7.12305e-05, Linf 0.0024018, total time[s] 0.063179 +Converged at iteration 25, L1 8.65798e-05, Linf 0.00326249, total time[s] 0.069061 +Converged at iteration 28, L1 8.12827e-05, Linf 0.00382895, total time[s] 0.074714 +Converged at iteration 29, L1 8.37671e-05, Linf 0.00658271, total time[s] 0.074363 +Converged at iteration 27, L1 7.95119e-05, Linf 0.0034518, total time[s] 0.069349 +Converged at iteration 29, L1 8.67892e-05, Linf 0.00450876, total time[s] 0.074312 +Converged at iteration 29, L1 8.97299e-05, Linf 0.00290293, total time[s] 0.074502 +Converged at iteration 28, L1 7.17049e-05, Linf 0.00200333, total time[s] 0.072653 +Converged at iteration 32, L1 8.28262e-05, Linf 0.00695439, total time[s] 0.082756 +Converged at iteration 27, L1 8.60183e-05, Linf 0.00538833, total time[s] 0.07008 +Converged at iteration 24, L1 9.72315e-05, Linf 0.00269298, total time[s] 0.062816 +Converged at iteration 23, L1 7.27467e-05, Linf 0.00249646, total time[s] 0.061699 +Converged at iteration 39, L1 6.15391e-05, Linf 0.00665493, total time[s] 0.099253 +Converged at iteration 35, L1 9.19489e-05, Linf 0.00678254, total time[s] 0.092555 +Converged at iteration 24, L1 7.91475e-05, Linf 0.0030437, total time[s] 0.063132 +Converged at iteration 30, L1 8.61933e-05, Linf 0.00589105, total time[s] 0.076718 +Converged at iteration 26, L1 6.88925e-05, Linf 0.00712876, total time[s] 0.067238 +Converged at iteration 22, L1 6.86943e-05, Linf 0.00498016, total time[s] 0.058315 +Converged at iteration 19, L1 5.85657e-05, Linf 0.00469049, total time[s] 0.052299 +Converged at iteration 20, L1 6.79042e-05, Linf 0.00518921, total time[s] 0.054722 +Converged at iteration 23, L1 8.83552e-05, Linf 0.00430906, total time[s] 0.061266 +Converged at iteration 24, L1 9.86852e-05, Linf 0.00643087, total time[s] 0.066579 +Converged at iteration 20, L1 9.16522e-05, Linf 0.00615458, total time[s] 0.055568 +Converged at iteration 16, L1 9.09855e-05, Linf 0.00562812, total time[s] 0.045416 +Converged at iteration 31, L1 8.68888e-05, Linf 0.0034576, total time[s] 0.078244 +Converged at iteration 19, L1 8.22722e-05, Linf 0.00567895, total time[s] 0.051503 +Converged at iteration 23, L1 6.56905e-05, Linf 0.00509163, total time[s] 0.062072 +Converged at iteration 26, L1 7.42159e-05, Linf 0.00519742, total time[s] 0.068104 +Converged at iteration 23, L1 5.44391e-05, Linf 0.00530759, total time[s] 0.061868 +Converged at iteration 20, L1 9.38492e-05, Linf 0.00539618, total time[s] 0.054912 +Converged at iteration 23, L1 7.05851e-05, Linf 0.00229099, total time[s] 0.060565 +Converged at iteration 25, L1 8.6351e-05, Linf 0.00322162, total time[s] 0.066509 +Converged at iteration 28, L1 8.42311e-05, Linf 0.00403965, total time[s] 0.07277 +Converged at iteration 29, L1 8.79112e-05, Linf 0.00675791, total time[s] 0.078309 +Converged at iteration 27, L1 8.20612e-05, Linf 0.00370547, total time[s] 0.072294 +Converged at iteration 29, L1 8.92639e-05, Linf 0.00453995, total time[s] 0.074963 +Converged at iteration 29, L1 9.0304e-05, Linf 0.00290869, total time[s] 0.074558 +Converged at iteration 28, L1 7.39609e-05, Linf 0.00199779, total time[s] 0.072953 +Converged at iteration 32, L1 7.8058e-05, Linf 0.00649525, total time[s] 0.084323 +Converged at iteration 27, L1 9.16511e-05, Linf 0.00587208, total time[s] 0.070431 +Converged at iteration 25, L1 6.18291e-05, Linf 0.00238826, total time[s] 0.065705 +Converged at iteration 23, L1 7.77696e-05, Linf 0.00257061, total time[s] 0.061019 +Converged at iteration 39, L1 5.85708e-05, Linf 0.00653759, total time[s] 0.101034 +Converged at iteration 35, L1 8.34922e-05, Linf 0.00678618, total time[s] 0.119644 +Converged at iteration 24, L1 8.3373e-05, Linf 0.00316012, total time[s] 0.092409 +Converged at iteration 30, L1 8.0346e-05, Linf 0.00582468, total time[s] 0.081978 +Converged at iteration 26, L1 7.2602e-05, Linf 0.00757008, total time[s] 0.077113 +Converged at iteration 22, L1 8.4356e-05, Linf 0.00589515, total time[s] 0.062279 +Converged at iteration 19, L1 6.20873e-05, Linf 0.00477022, total time[s] 0.05845 +Converged at iteration 20, L1 6.63412e-05, Linf 0.0046499, total time[s] 0.069887 +Converged at iteration 23, L1 8.61304e-05, Linf 0.00432836, total time[s] 0.063002 +Converged at iteration 25, L1 5.53008e-05, Linf 0.00539088, total time[s] 0.065051 +Converged at iteration 20, L1 9.81203e-05, Linf 0.00627243, total time[s] 0.058573 +Converged at iteration 16, L1 9.14487e-05, Linf 0.00573105, total time[s] 0.049114 +Converged at iteration 31, L1 8.29785e-05, Linf 0.00352287, total time[s] 0.083057 +Converged at iteration 19, L1 7.78759e-05, Linf 0.00542763, total time[s] 0.053857 +Converged at iteration 23, L1 6.33351e-05, Linf 0.00511802, total time[s] 0.064251 +Converged at iteration 26, L1 7.64997e-05, Linf 0.00519948, total time[s] 0.067259 +Converged at iteration 23, L1 5.49594e-05, Linf 0.00543099, total time[s] 0.059446 +Converged at iteration 21, L1 5.02691e-05, Linf 0.0038031, total time[s] 0.054821 +Converged at iteration 23, L1 6.97629e-05, Linf 0.00216435, total time[s] 0.061526 +Converged at iteration 25, L1 8.73216e-05, Linf 0.00319241, total time[s] 0.077081 +Converged at iteration 28, L1 8.70785e-05, Linf 0.00428566, total time[s] 0.079855 +Converged at iteration 29, L1 9.18255e-05, Linf 0.00695557, total time[s] 0.077212 +Converged at iteration 27, L1 8.49206e-05, Linf 0.00405519, total time[s] 0.070997 +Converged at iteration 29, L1 9.23309e-05, Linf 0.00469338, total time[s] 0.075135 +Converged at iteration 29, L1 9.14047e-05, Linf 0.00296175, total time[s] 0.073235 +Converged at iteration 28, L1 7.61702e-05, Linf 0.00205378, total time[s] 0.073031 +Converged at iteration 32, L1 7.32829e-05, Linf 0.00663186, total time[s] 0.082383 +Converged at iteration 27, L1 9.50228e-05, Linf 0.00639497, total time[s] 0.068938 +Converged at iteration 25, L1 6.64099e-05, Linf 0.00295991, total time[s] 0.064818 +Converged at iteration 23, L1 8.20381e-05, Linf 0.00265597, total time[s] 0.059187 +Converged at iteration 39, L1 5.45066e-05, Linf 0.00641942, total time[s] 0.096961 +Converged at iteration 35, L1 7.704e-05, Linf 0.00663902, total time[s] 0.092649 +Converged at iteration 24, L1 8.66884e-05, Linf 0.00326271, total time[s] 0.065186 +Converged at iteration 30, L1 7.63175e-05, Linf 0.00575834, total time[s] 0.076101 +Converged at iteration 26, L1 7.66161e-05, Linf 0.00800815, total time[s] 0.066743 +Converged at iteration 23, L1 5.56903e-05, Linf 0.00559606, total time[s] 0.062688 +Converged at iteration 19, L1 6.6161e-05, Linf 0.00497389, total time[s] 0.052198 +Converged at iteration 20, L1 6.4587e-05, Linf 0.00454005, total time[s] 0.053488 +Converged at iteration 23, L1 8.38642e-05, Linf 0.00435744, total time[s] 0.060426 +Converged at iteration 25, L1 5.88543e-05, Linf 0.00561014, total time[s] 0.065081 +Converged at iteration 21, L1 5.31096e-05, Linf 0.00532813, total time[s] 0.055522 +Converged at iteration 16, L1 9.27602e-05, Linf 0.00605881, total time[s] 0.042524 +Converged at iteration 31, L1 8.14637e-05, Linf 0.00362326, total time[s] 0.07886 +Converged at iteration 19, L1 7.17357e-05, Linf 0.00512395, total time[s] 0.049388 +Converged at iteration 22, L1 9.68555e-05, Linf 0.00634965, total time[s] 0.061762 +Converged at iteration 26, L1 7.95353e-05, Linf 0.00519712, total time[s] 0.066889 +Converged at iteration 23, L1 5.55542e-05, Linf 0.00555851, total time[s] 0.060419 +Converged at iteration 21, L1 5.38515e-05, Linf 0.00370978, total time[s] 0.055448 +Converged at iteration 23, L1 6.86384e-05, Linf 0.00202146, total time[s] 0.064928 +Converged at iteration 25, L1 8.82052e-05, Linf 0.00326204, total time[s] 0.064899 +Converged at iteration 28, L1 8.89714e-05, Linf 0.00507354, total time[s] 0.072489 +Converged at iteration 29, L1 9.5476e-05, Linf 0.00714025, total time[s] 0.073188 +Converged at iteration 27, L1 8.79154e-05, Linf 0.0050397, total time[s] 0.069781 +Converged at iteration 29, L1 9.59984e-05, Linf 0.00480447, total time[s] 0.073182 +Converged at iteration 29, L1 9.27686e-05, Linf 0.00300456, total time[s] 0.077062 +Converged at iteration 28, L1 7.90341e-05, Linf 0.00208917, total time[s] 0.072392 +Converged at iteration 32, L1 6.90391e-05, Linf 0.00650536, total time[s] 0.082408 +Converged at iteration 27, L1 9.90502e-05, Linf 0.00696126, total time[s] 0.070095 +Converged at iteration 25, L1 7.22285e-05, Linf 0.00354641, total time[s] 0.064569 +Converged at iteration 23, L1 8.67849e-05, Linf 0.0027851, total time[s] 0.061754 +Converged at iteration 39, L1 5.21943e-05, Linf 0.00640738, total time[s] 0.098198 +Converged at iteration 35, L1 6.73505e-05, Linf 0.00633154, total time[s] 0.094197 +Converged at iteration 24, L1 8.97384e-05, Linf 0.00335502, total time[s] 0.062986 +Converged at iteration 30, L1 7.22248e-05, Linf 0.00569862, total time[s] 0.076851 +Converged at iteration 26, L1 8.03672e-05, Linf 0.00844535, total time[s] 0.067252 +Converged at iteration 23, L1 6.70592e-05, Linf 0.00640529, total time[s] 0.059545 +Converged at iteration 19, L1 6.95597e-05, Linf 0.00528028, total time[s] 0.052923 +Converged at iteration 20, L1 6.29149e-05, Linf 0.00438662, total time[s] 0.054091 +Converged at iteration 23, L1 8.27224e-05, Linf 0.00438901, total time[s] 0.06261 +Converged at iteration 25, L1 6.08367e-05, Linf 0.00581669, total time[s] 0.074135 +Converged at iteration 21, L1 5.77092e-05, Linf 0.00545662, total time[s] 0.054782 +Converged at iteration 16, L1 9.31974e-05, Linf 0.00618808, total time[s] 0.051156 +Converged at iteration 31, L1 7.92269e-05, Linf 0.0037002, total time[s] 0.081146 +Converged at iteration 19, L1 6.57988e-05, Linf 0.00480386, total time[s] 0.050312 +Converged at iteration 22, L1 9.1389e-05, Linf 0.00601977, total time[s] 0.057205 +Converged at iteration 26, L1 8.34217e-05, Linf 0.00517152, total time[s] 0.06837 +Converged at iteration 23, L1 5.6866e-05, Linf 0.00567518, total time[s] 0.059766 +Converged at iteration 21, L1 5.74317e-05, Linf 0.00360522, total time[s] 0.054991 +Converged at iteration 23, L1 6.75498e-05, Linf 0.00329676, total time[s] 0.060752 +Converged at iteration 25, L1 8.80562e-05, Linf 0.00308631, total time[s] 0.066296 +Converged at iteration 28, L1 9.14744e-05, Linf 0.00489923, total time[s] 0.07251 +Converged at iteration 29, L1 9.95806e-05, Linf 0.00731737, total time[s] 0.074935 +Converged at iteration 27, L1 9.10813e-05, Linf 0.00571424, total time[s] 0.073177 +Converged at iteration 29, L1 9.87239e-05, Linf 0.00492801, total time[s] 0.073675 +Converged at iteration 29, L1 9.69227e-05, Linf 0.00302678, total time[s] 0.080976 +Converged at iteration 28, L1 8.24409e-05, Linf 0.00208275, total time[s] 0.071707 +Converged at iteration 32, L1 6.22664e-05, Linf 0.00631699, total time[s] 0.081989 +Converged at iteration 28, L1 6.15858e-05, Linf 0.00632425, total time[s] 0.071335 +Converged at iteration 25, L1 7.89108e-05, Linf 0.00414649, total time[s] 0.079255 +Converged at iteration 23, L1 9.20055e-05, Linf 0.00291792, total time[s] 0.05996 +Converged at iteration 38, L1 9.44609e-05, Linf 0.0074602, total time[s] 0.097362 +Converged at iteration 35, L1 5.73576e-05, Linf 0.00598141, total time[s] 0.090687 +Converged at iteration 24, L1 9.2894e-05, Linf 0.00342838, total time[s] 0.062273 +Converged at iteration 30, L1 6.79028e-05, Linf 0.00563633, total time[s] 0.075938 +Converged at iteration 26, L1 8.50484e-05, Linf 0.00888445, total time[s] 0.069451 +Converged at iteration 23, L1 7.94665e-05, Linf 0.00719009, total time[s] 0.060526 +Converged at iteration 19, L1 7.43881e-05, Linf 0.00550574, total time[s] 0.051209 +Converged at iteration 20, L1 6.04046e-05, Linf 0.00436873, total time[s] 0.054299 +Converged at iteration 23, L1 8.30933e-05, Linf 0.00443575, total time[s] 0.060892 +Converged at iteration 25, L1 6.36197e-05, Linf 0.00601145, total time[s] 0.065707 +Converged at iteration 21, L1 6.07252e-05, Linf 0.00556985, total time[s] 0.057948 +Converged at iteration 16, L1 9.46001e-05, Linf 0.0062629, total time[s] 0.045683 +Converged at iteration 31, L1 7.68789e-05, Linf 0.00378902, total time[s] 0.079429 +Converged at iteration 18, L1 9.88646e-05, Linf 0.00618632, total time[s] 0.047636 +Converged at iteration 22, L1 8.53094e-05, Linf 0.00536158, total time[s] 0.063899 +Converged at iteration 26, L1 8.64802e-05, Linf 0.00513443, total time[s] 0.080224 +Converged at iteration 23, L1 5.85671e-05, Linf 0.00577725, total time[s] 0.059834 +Converged at iteration 21, L1 6.17424e-05, Linf 0.00352157, total time[s] 0.054842 +Converged at iteration 23, L1 6.522e-05, Linf 0.00165607, total time[s] 0.060105 +Converged at iteration 25, L1 8.66734e-05, Linf 0.00296696, total time[s] 0.065379 +Converged at iteration 28, L1 9.54413e-05, Linf 0.00581353, total time[s] 0.071068 +Converged at iteration 30, L1 4.95396e-05, Linf 0.00390751, total time[s] 0.076113 +Converged at iteration 27, L1 9.26246e-05, Linf 0.00542579, total time[s] 0.068776 +Converged at iteration 30, L1 6.12859e-05, Linf 0.00407982, total time[s] 0.075395 +Converged at iteration 29, L1 9.54242e-05, Linf 0.00302924, total time[s] 0.081727 +Converged at iteration 28, L1 8.63142e-05, Linf 0.00202975, total time[s] 0.073862 +Converged at iteration 31, L1 9.90255e-05, Linf 0.00759772, total time[s] 0.078433 +Converged at iteration 28, L1 7.00497e-05, Linf 0.00684617, total time[s] 0.070909 +Converged at iteration 25, L1 8.69972e-05, Linf 0.00476233, total time[s] 0.064507 +Converged at iteration 23, L1 9.72084e-05, Linf 0.00303964, total time[s] 0.060029 +Converged at iteration 38, L1 8.71434e-05, Linf 0.00726273, total time[s] 0.09821 +Converged at iteration 34, L1 9.66663e-05, Linf 0.00726301, total time[s] 0.092136 +Converged at iteration 24, L1 9.4811e-05, Linf 0.00348945, total time[s] 0.061692 +Converged at iteration 30, L1 6.65951e-05, Linf 0.00556995, total time[s] 0.07565 +Converged at iteration 26, L1 8.9911e-05, Linf 0.00932402, total time[s] 0.067397 +Converged at iteration 23, L1 9.18066e-05, Linf 0.00806442, total time[s] 0.059776 +Converged at iteration 19, L1 7.96674e-05, Linf 0.00632283, total time[s] 0.050181 +Converged at iteration 20, L1 5.81758e-05, Linf 0.00422434, total time[s] 0.052576 +Converged at iteration 23, L1 8.4139e-05, Linf 0.00448925, total time[s] 0.059697 +Converged at iteration 25, L1 6.58022e-05, Linf 0.00619261, total time[s] 0.06504 +Converged at iteration 21, L1 6.53821e-05, Linf 0.0056673, total time[s] 0.055259 +Converged at iteration 16, L1 9.58552e-05, Linf 0.00628756, total time[s] 0.046819 +Converged at iteration 31, L1 7.50483e-05, Linf 0.00389064, total time[s] 0.084295 +Converged at iteration 18, L1 8.8392e-05, Linf 0.00579031, total time[s] 0.050643 +Converged at iteration 22, L1 7.9193e-05, Linf 0.00462181, total time[s] 0.058171 +Converged at iteration 26, L1 8.96406e-05, Linf 0.00510846, total time[s] 0.066697 +Converged at iteration 23, L1 6.06441e-05, Linf 0.00590054, total time[s] 0.063013 +Converged at iteration 21, L1 6.60974e-05, Linf 0.00350922, total time[s] 0.059648 +Converged at iteration 23, L1 6.29996e-05, Linf 0.00165194, total time[s] 0.062122 +Converged at iteration 25, L1 8.41267e-05, Linf 0.00280877, total time[s] 0.068861 +Converged at iteration 28, L1 9.91918e-05, Linf 0.00568514, total time[s] 0.074837 +Converged at iteration 30, L1 5.37006e-05, Linf 0.00405793, total time[s] 0.082156 +Converged at iteration 27, L1 9.39924e-05, Linf 0.00499806, total time[s] 0.071319 +Converged at iteration 30, L1 6.27393e-05, Linf 0.00419857, total time[s] 0.07813 +Converged at iteration 29, L1 9.53899e-05, Linf 0.00299628, total time[s] 0.076876 +Converged at iteration 28, L1 9.00622e-05, Linf 0.00195155, total time[s] 0.073987 +Converged at iteration 31, L1 8.80966e-05, Linf 0.00747006, total time[s] 0.081795 +Converged at iteration 28, L1 7.78082e-05, Linf 0.00733621, total time[s] 0.073452 +Converged at iteration 25, L1 9.6848e-05, Linf 0.00539594, total time[s] 0.066878 +Converged at iteration 24, L1 5.70336e-05, Linf 0.00223691, total time[s] 0.063752 +Converged at iteration 38, L1 7.87587e-05, Linf 0.00703672, total time[s] 0.101959 +Converged at iteration 34, L1 8.59268e-05, Linf 0.00708594, total time[s] 0.089817 +Converged at iteration 24, L1 9.6744e-05, Linf 0.00354151, total time[s] 0.064302 +Converged at iteration 30, L1 6.17883e-05, Linf 0.00550086, total time[s] 0.078506 +Converged at iteration 26, L1 9.50141e-05, Linf 0.00976688, total time[s] 0.070948 +Converged at iteration 24, L1 5.39503e-05, Linf 0.00727347, total time[s] 0.06485 +Converged at iteration 19, L1 8.55407e-05, Linf 0.00598844, total time[s] 0.064466 +Converged at iteration 20, L1 5.66114e-05, Linf 0.00398082, total time[s] 0.054908 +Converged at iteration 23, L1 8.48486e-05, Linf 0.00455469, total time[s] 0.062667 +Converged at iteration 25, L1 6.98884e-05, Linf 0.00636236, total time[s] 0.066375 +Converged at iteration 21, L1 6.8542e-05, Linf 0.00575159, total time[s] 0.057594 +Converged at iteration 16, L1 9.74401e-05, Linf 0.00626982, total time[s] 0.044065 +Converged at iteration 31, L1 7.38292e-05, Linf 0.00397583, total time[s] 0.081347 +Converged at iteration 18, L1 7.70845e-05, Linf 0.00534521, total time[s] 0.058675 +Converged at iteration 22, L1 7.1739e-05, Linf 0.00453153, total time[s] 0.059878 +Converged at iteration 26, L1 9.38387e-05, Linf 0.00511563, total time[s] 0.06899 +Converged at iteration 23, L1 6.34705e-05, Linf 0.00598064, total time[s] 0.063827 +Converged at iteration 21, L1 7.05444e-05, Linf 0.00362971, total time[s] 0.058382 +Converged at iteration 22, L1 9.72408e-05, Linf 0.00242724, total time[s] 0.060008 +Converged at iteration 25, L1 8.18489e-05, Linf 0.00266543, total time[s] 0.066794 +Converged at iteration 29, L1 6.5871e-05, Linf 0.00390088, total time[s] 0.080154 +Converged at iteration 30, L1 5.53708e-05, Linf 0.00420327, total time[s] 0.077826 +Converged at iteration 27, L1 9.55837e-05, Linf 0.00464874, total time[s] 0.07193 +Converged at iteration 30, L1 6.45232e-05, Linf 0.00432604, total time[s] 0.078379 +Converged at iteration 29, L1 9.57946e-05, Linf 0.00296581, total time[s] 0.07676 +Converged at iteration 28, L1 9.46025e-05, Linf 0.00186004, total time[s] 0.073532 +Converged at iteration 31, L1 8.05071e-05, Linf 0.00737341, total time[s] 0.080405 +Converged at iteration 28, L1 8.43261e-05, Linf 0.00781922, total time[s] 0.073526 +Converged at iteration 26, L1 6.05564e-05, Linf 0.00472533, total time[s] 0.069468 +Converged at iteration 24, L1 6.0446e-05, Linf 0.00234801, total time[s] 0.064374 +Converged at iteration 38, L1 7.05548e-05, Linf 0.0068373, total time[s] 0.101813 +Converged at iteration 34, L1 8.05644e-05, Linf 0.00695022, total time[s] 0.092826 +Converged at iteration 24, L1 9.78392e-05, Linf 0.00358167, total time[s] 0.076259 +Converged at iteration 30, L1 5.97158e-05, Linf 0.00542655, total time[s] 0.075918 +Converged at iteration 26, L1 9.97809e-05, Linf 0.0102026, total time[s] 0.067154 +Converged at iteration 24, L1 6.22425e-05, Linf 0.00787453, total time[s] 0.064365 +Converged at iteration 19, L1 9.15264e-05, Linf 0.005638, total time[s] 0.051639 +Converged at iteration 20, L1 5.52937e-05, Linf 0.00385649, total time[s] 0.054119 +Converged at iteration 23, L1 8.54218e-05, Linf 0.00461788, total time[s] 0.066417 +Converged at iteration 25, L1 7.32387e-05, Linf 0.00651921, total time[s] 0.066372 +Converged at iteration 21, L1 7.27042e-05, Linf 0.00582169, total time[s] 0.056914 +Converged at iteration 16, L1 9.87956e-05, Linf 0.00604382, total time[s] 0.04446 +Converged at iteration 31, L1 7.2653e-05, Linf 0.00406034, total time[s] 0.082248 +Converged at iteration 18, L1 6.51939e-05, Linf 0.00492797, total time[s] 0.04909 +Converged at iteration 21, L1 9.80016e-05, Linf 0.00478292, total time[s] 0.057021 +Converged at iteration 26, L1 9.80485e-05, Linf 0.00512781, total time[s] 0.069314 +Converged at iteration 23, L1 6.67364e-05, Linf 0.00613318, total time[s] 0.060605 +Converged at iteration 21, L1 7.58722e-05, Linf 0.00385414, total time[s] 0.056806 +Converged at iteration 22, L1 9.20421e-05, Linf 0.00247613, total time[s] 0.058466 +Converged at iteration 25, L1 8.01229e-05, Linf 0.0025337, total time[s] 0.06519 +Converged at iteration 29, L1 6.70524e-05, Linf 0.00411154, total time[s] 0.073993 +Converged at iteration 30, L1 5.77312e-05, Linf 0.004379, total time[s] 0.077429 +Converged at iteration 27, L1 9.6833e-05, Linf 0.00438279, total time[s] 0.07408 +Converged at iteration 30, L1 6.75298e-05, Linf 0.00438131, total time[s] 0.084122 +Converged at iteration 29, L1 9.82028e-05, Linf 0.0029767, total time[s] 0.078016 +Converged at iteration 29, L1 5.87575e-05, Linf 0.00122866, total time[s] 0.07511 +Converged at iteration 31, L1 7.80248e-05, Linf 0.0072697, total time[s] 0.079857 +Converged at iteration 28, L1 9.19389e-05, Linf 0.00830325, total time[s] 0.071859 +Converged at iteration 26, L1 6.83209e-05, Linf 0.0052966, total time[s] 0.067591 +Converged at iteration 24, L1 6.42051e-05, Linf 0.00245872, total time[s] 0.061796 +Converged at iteration 38, L1 6.49788e-05, Linf 0.00668541, total time[s] 0.129767 +Converged at iteration 34, L1 7.77701e-05, Linf 0.0067948, total time[s] 0.092131 +Converged at iteration 24, L1 9.84869e-05, Linf 0.00362297, total time[s] 0.063019 +Converged at iteration 30, L1 5.74777e-05, Linf 0.00535626, total time[s] 0.076545 +Converged at iteration 27, L1 5.13653e-05, Linf 0.00827915, total time[s] 0.069318 +Converged at iteration 24, L1 6.88448e-05, Linf 0.00859347, total time[s] 0.063591 +Converged at iteration 19, L1 9.63004e-05, Linf 0.0054303, total time[s] 0.051492 +Converged at iteration 20, L1 5.41447e-05, Linf 0.00371094, total time[s] 0.052913 +Converged at iteration 23, L1 8.59212e-05, Linf 0.0046587, total time[s] 0.062812 +Converged at iteration 25, L1 7.58175e-05, Linf 0.00666396, total time[s] 0.065611 +Converged at iteration 21, L1 7.46524e-05, Linf 0.00564342, total time[s] 0.055087 +Converged at iteration 16, L1 9.98907e-05, Linf 0.00613156, total time[s] 0.045449 +Converged at iteration 31, L1 7.06807e-05, Linf 0.0041309, total time[s] 0.078277 +Converged at iteration 17, L1 9.07309e-05, Linf 0.00638982, total time[s] 0.045778 +Converged at iteration 21, L1 8.62821e-05, Linf 0.00426651, total time[s] 0.056539 +Converged at iteration 27, L1 5.14547e-05, Linf 0.00226281, total time[s] 0.070006 +Converged at iteration 23, L1 6.90377e-05, Linf 0.00622111, total time[s] 0.060792 +Converged at iteration 21, L1 8.08606e-05, Linf 0.00398331, total time[s] 0.056798 +Converged at iteration 22, L1 8.57917e-05, Linf 0.00256861, total time[s] 0.058635 +Converged at iteration 25, L1 7.80935e-05, Linf 0.00244171, total time[s] 0.066123 +Converged at iteration 29, L1 6.71868e-05, Linf 0.00433593, total time[s] 0.074651 +Converged at iteration 30, L1 6.07085e-05, Linf 0.00457501, total time[s] 0.07693 +Converged at iteration 27, L1 9.81405e-05, Linf 0.00421363, total time[s] 0.069867 +Converged at iteration 30, L1 6.81411e-05, Linf 0.00457351, total time[s] 0.07706 +Converged at iteration 29, L1 9.83598e-05, Linf 0.00301975, total time[s] 0.074493 +Converged at iteration 29, L1 6.0947e-05, Linf 0.00122851, total time[s] 0.074116 +Converged at iteration 31, L1 7.31232e-05, Linf 0.00711261, total time[s] 0.080115 +Converged at iteration 28, L1 9.64008e-05, Linf 0.00880785, total time[s] 0.073474 +Converged at iteration 26, L1 7.56227e-05, Linf 0.00589397, total time[s] 0.068092 +Converged at iteration 24, L1 6.76382e-05, Linf 0.00256511, total time[s] 0.064014 +Converged at iteration 38, L1 6.05803e-05, Linf 0.0065172, total time[s] 0.098329 +Converged at iteration 34, L1 7.56461e-05, Linf 0.00657793, total time[s] 0.088967 +Converged at iteration 25, L1 4.14288e-05, Linf 0.0023032, total time[s] 0.065065 +Converged at iteration 30, L1 5.62267e-05, Linf 0.00527548, total time[s] 0.076622 +Converged at iteration 27, L1 5.25309e-05, Linf 0.00862642, total time[s] 0.071644 +Converged at iteration 24, L1 7.6864e-05, Linf 0.00933505, total time[s] 0.063461 +Converged at iteration 20, L1 4.02475e-05, Linf 0.00360989, total time[s] 0.057532 +Converged at iteration 20, L1 5.2976e-05, Linf 0.00373713, total time[s] 0.053318 +Converged at iteration 23, L1 8.63482e-05, Linf 0.00469938, total time[s] 0.061065 +Converged at iteration 25, L1 7.8972e-05, Linf 0.00680179, total time[s] 0.066938 +Converged at iteration 21, L1 7.69222e-05, Linf 0.00568502, total time[s] 0.056818 +Converged at iteration 17, L1 5.29327e-05, Linf 0.0036204, total time[s] 0.055655 +Converged at iteration 31, L1 6.93577e-05, Linf 0.00424632, total time[s] 0.092763 +Converged at iteration 17, L1 7.15615e-05, Linf 0.00585865, total time[s] 0.049025 +Converged at iteration 21, L1 7.22695e-05, Linf 0.00368608, total time[s] 0.055174 +Converged at iteration 27, L1 5.25312e-05, Linf 0.00237712, total time[s] 0.069078 +Converged at iteration 23, L1 7.19243e-05, Linf 0.00631347, total time[s] 0.061537 +Converged at iteration 21, L1 8.67305e-05, Linf 0.0041018, total time[s] 0.056968 +Converged at iteration 22, L1 7.90414e-05, Linf 0.0028414, total time[s] 0.060032 +Converged at iteration 25, L1 7.63854e-05, Linf 0.00215308, total time[s] 0.067272 +Converged at iteration 29, L1 6.82377e-05, Linf 0.00460796, total time[s] 0.078307 +Converged at iteration 30, L1 6.32414e-05, Linf 0.00474069, total time[s] 0.078816 +Converged at iteration 27, L1 9.94421e-05, Linf 0.00404556, total time[s] 0.070547 +Converged at iteration 30, L1 7.07404e-05, Linf 0.00470574, total time[s] 0.07683 +Converged at iteration 29, L1 9.92215e-05, Linf 0.0030518, total time[s] 0.074596 +Converged at iteration 29, L1 6.31248e-05, Linf 0.00123403, total time[s] 0.075051 +Converged at iteration 31, L1 6.71417e-05, Linf 0.00692238, total time[s] 0.082359 +Converged at iteration 29, L1 4.91279e-05, Linf 0.00752854, total time[s] 0.074851 +Converged at iteration 26, L1 8.48248e-05, Linf 0.00655012, total time[s] 0.068185 +Converged at iteration 24, L1 7.09007e-05, Linf 0.002704, total time[s] 0.062918 +Converged at iteration 38, L1 5.74904e-05, Linf 0.00630043, total time[s] 0.098825 +Converged at iteration 34, L1 7.34041e-05, Linf 0.00632733, total time[s] 0.092963 +Converged at iteration 25, L1 4.18204e-05, Linf 0.0023179, total time[s] 0.065289 +Converged at iteration 30, L1 5.65328e-05, Linf 0.00517579, total time[s] 0.077569 +Converged at iteration 27, L1 5.43483e-05, Linf 0.00890218, total time[s] 0.069722 +Converged at iteration 24, L1 8.52475e-05, Linf 0.0100961, total time[s] 0.065368 +Converged at iteration 20, L1 4.36065e-05, Linf 0.00409389, total time[s] 0.056087 +Converged at iteration 20, L1 5.09735e-05, Linf 0.00375018, total time[s] 0.054845 +Converged at iteration 23, L1 8.67888e-05, Linf 0.0047528, total time[s] 0.06184 +Converged at iteration 25, L1 8.16548e-05, Linf 0.00693251, total time[s] 0.070936 +Converged at iteration 21, L1 7.89322e-05, Linf 0.00569627, total time[s] 0.057739 +Converged at iteration 17, L1 5.36121e-05, Linf 0.00356434, total time[s] 0.048508 +Converged at iteration 31, L1 6.75564e-05, Linf 0.00436175, total time[s] 0.081388 +Converged at iteration 17, L1 5.7558e-05, Linf 0.00527028, total time[s] 0.047478 +Converged at iteration 20, L1 8.81813e-05, Linf 0.00371998, total time[s] 0.05507 +Converged at iteration 27, L1 5.63495e-05, Linf 0.00253919, total time[s] 0.071347 +Converged at iteration 23, L1 7.47924e-05, Linf 0.00642468, total time[s] 0.062111 +Converged at iteration 21, L1 9.20782e-05, Linf 0.00425404, total time[s] 0.057382 +Converged at iteration 22, L1 7.27365e-05, Linf 0.00309708, total time[s] 0.059587 +Converged at iteration 25, L1 7.45114e-05, Linf 0.00216237, total time[s] 0.069626 +Converged at iteration 29, L1 6.99334e-05, Linf 0.00486036, total time[s] 0.075864 +Converged at iteration 30, L1 6.63975e-05, Linf 0.00493934, total time[s] 0.0791 +Converged at iteration 28, L1 5.85797e-05, Linf 0.00301006, total time[s] 0.074681 +Converged at iteration 30, L1 7.16915e-05, Linf 0.00483944, total time[s] 0.078169 +Converged at iteration 30, L1 6.20497e-05, Linf 0.00230693, total time[s] 0.078081 +Converged at iteration 29, L1 6.536e-05, Linf 0.00122783, total time[s] 0.075112 +Converged at iteration 31, L1 5.99506e-05, Linf 0.00671531, total time[s] 0.080624 +Converged at iteration 29, L1 5.17472e-05, Linf 0.00797731, total time[s] 0.075988 +Converged at iteration 26, L1 9.49464e-05, Linf 0.00730132, total time[s] 0.070654 +Converged at iteration 24, L1 7.54497e-05, Linf 0.00278382, total time[s] 0.073413 +Converged at iteration 38, L1 5.47525e-05, Linf 0.00614055, total time[s] 0.108391 +Converged at iteration 34, L1 7.01509e-05, Linf 0.00607558, total time[s] 0.10224 +Converged at iteration 25, L1 4.24155e-05, Linf 0.00232539, total time[s] 0.094476 +Converged at iteration 30, L1 5.75084e-05, Linf 0.00512645, total time[s] 0.347053 +Converged at iteration 27, L1 5.70578e-05, Linf 0.00937862, total time[s] 0.080846 +Converged at iteration 24, L1 9.44288e-05, Linf 0.0108924, total time[s] 0.06517 +Converged at iteration 20, L1 4.702e-05, Linf 0.00435996, total time[s] 0.052816 +Converged at iteration 20, L1 4.94925e-05, Linf 0.00377403, total time[s] 0.064221 +Converged at iteration 23, L1 8.93889e-05, Linf 0.00479041, total time[s] 0.07541 +Converged at iteration 25, L1 8.39252e-05, Linf 0.00706021, total time[s] 0.078581 +Converged at iteration 21, L1 7.91129e-05, Linf 0.0057716, total time[s] 0.066403 +Converged at iteration 17, L1 5.50493e-05, Linf 0.00346934, total time[s] 0.047675 +Converged at iteration 31, L1 6.54887e-05, Linf 0.00449737, total time[s] 0.081826 +Converged at iteration 16, L1 9.61823e-05, Linf 0.00749431, total time[s] 0.04281 +Converged at iteration 20, L1 6.55863e-05, Linf 0.00291172, total time[s] 0.058178 +Converged at iteration 27, L1 5.77061e-05, Linf 0.0027102, total time[s] 0.072545 +Converged at iteration 23, L1 7.76264e-05, Linf 0.00659015, total time[s] 0.062304 +Converged at iteration 21, L1 9.83353e-05, Linf 0.00460625, total time[s] 0.057731 +Converged at iteration 22, L1 7.44211e-05, Linf 0.00301647, total time[s] 0.061985 +Converged at iteration 25, L1 7.23746e-05, Linf 0.00220624, total time[s] 0.070088 +Converged at iteration 29, L1 7.13616e-05, Linf 0.00502768, total time[s] 0.076417 +Converged at iteration 30, L1 7.00868e-05, Linf 0.00514242, total time[s] 0.078385 +Converged at iteration 28, L1 5.88131e-05, Linf 0.00299015, total time[s] 0.073701 +Converged at iteration 30, L1 7.39236e-05, Linf 0.00498099, total time[s] 0.078331 +Converged at iteration 30, L1 6.29588e-05, Linf 0.00230255, total time[s] 0.07867 +Converged at iteration 29, L1 6.86858e-05, Linf 0.00122535, total time[s] 0.076797 +Converged at iteration 30, L1 9.79958e-05, Linf 0.00845097, total time[s] 0.07789 +Converged at iteration 29, L1 5.48959e-05, Linf 0.0084671, total time[s] 0.07639 +Converged at iteration 27, L1 5.56089e-05, Linf 0.00625813, total time[s] 0.071851 +Converged at iteration 24, L1 7.90706e-05, Linf 0.00289645, total time[s] 0.063286 +Converged at iteration 37, L1 9.87601e-05, Linf 0.00722549, total time[s] 0.099249 +Converged at iteration 34, L1 6.60963e-05, Linf 0.00583975, total time[s] 0.095971 +Converged at iteration 25, L1 4.41941e-05, Linf 0.00232676, total time[s] 0.067642 +Converged at iteration 29, L1 9.38722e-05, Linf 0.00665011, total time[s] 0.081932 +Converged at iteration 27, L1 5.85112e-05, Linf 0.00978603, total time[s] 0.071363 +Converged at iteration 25, L1 4.41472e-05, Linf 0.00942458, total time[s] 0.067192 +Converged at iteration 20, L1 5.15732e-05, Linf 0.00453958, total time[s] 0.055386 +Converged at iteration 20, L1 4.74876e-05, Linf 0.00379614, total time[s] 0.055467 +Converged at iteration 23, L1 9.09617e-05, Linf 0.00482183, total time[s] 0.063067 +Converged at iteration 25, L1 8.44617e-05, Linf 0.00718602, total time[s] 0.066899 +Converged at iteration 21, L1 7.95777e-05, Linf 0.00574344, total time[s] 0.056974 +Converged at iteration 17, L1 5.67834e-05, Linf 0.00333495, total time[s] 0.050047 +Converged at iteration 31, L1 6.33376e-05, Linf 0.00465318, total time[s] 0.080916 +Converged at iteration 16, L1 9.77561e-05, Linf 0.00682273, total time[s] 0.046656 +Converged at iteration 19, L1 6.61518e-05, Linf 0.00285677, total time[s] 0.053077 +Converged at iteration 27, L1 5.98417e-05, Linf 0.00285641, total time[s] 0.072061 +Converged at iteration 23, L1 8.18862e-05, Linf 0.00676579, total time[s] 0.062101 +Converged at iteration 22, L1 5.45831e-05, Linf 0.00357475, total time[s] 0.06207 +Converged at iteration 22, L1 7.99973e-05, Linf 0.00303227, total time[s] 0.06047 +Converged at iteration 25, L1 6.99696e-05, Linf 0.00202955, total time[s] 0.072336 +Converged at iteration 29, L1 7.23559e-05, Linf 0.00468617, total time[s] 0.075089 +Converged at iteration 30, L1 7.44724e-05, Linf 0.00527609, total time[s] 0.078497 +Converged at iteration 28, L1 5.91985e-05, Linf 0.00284371, total time[s] 0.073267 +Converged at iteration 30, L1 7.67649e-05, Linf 0.00513779, total time[s] 0.07861 +Converged at iteration 30, L1 6.43023e-05, Linf 0.00230858, total time[s] 0.078149 +Converged at iteration 29, L1 7.25487e-05, Linf 0.00125974, total time[s] 0.075225 +Converged at iteration 30, L1 8.87636e-05, Linf 0.00820221, total time[s] 0.079534 +Converged at iteration 29, L1 5.90997e-05, Linf 0.00898826, total time[s] 0.075849 +Converged at iteration 27, L1 6.35814e-05, Linf 0.00672983, total time[s] 0.071516 +Converged at iteration 24, L1 8.22024e-05, Linf 0.00300877, total time[s] 0.064098 +Converged at iteration 37, L1 9.35061e-05, Linf 0.00694146, total time[s] 0.09684 +Converged at iteration 34, L1 6.12435e-05, Linf 0.005623, total time[s] 0.094495 +Converged at iteration 25, L1 4.58998e-05, Linf 0.00230822, total time[s] 0.066013 +Converged at iteration 29, L1 8.79203e-05, Linf 0.00654658, total time[s] 0.075935 +Converged at iteration 27, L1 6.14916e-05, Linf 0.0103267, total time[s] 0.071363 +Converged at iteration 25, L1 4.92316e-05, Linf 0.0102166, total time[s] 0.066752 +Converged at iteration 20, L1 5.56053e-05, Linf 0.00473945, total time[s] 0.054863 +Converged at iteration 20, L1 4.54475e-05, Linf 0.00380564, total time[s] 0.054843 +Converged at iteration 23, L1 9.11559e-05, Linf 0.00482519, total time[s] 0.06294 +Converged at iteration 25, L1 7.91707e-05, Linf 0.00730833, total time[s] 0.066555 +Converged at iteration 21, L1 8.01393e-05, Linf 0.0056916, total time[s] 0.057638 +Converged at iteration 17, L1 5.97843e-05, Linf 0.00315195, total time[s] 0.048039 +Converged at iteration 31, L1 6.12067e-05, Linf 0.00482895, total time[s] 0.081837 +Converged at iteration 17, L1 7.20682e-05, Linf 0.00303298, total time[s] 0.050374 +Converged at iteration 18, L1 7.84443e-05, Linf 0.0030283, total time[s] 0.060214 +Converged at iteration 27, L1 6.33622e-05, Linf 0.0030009, total time[s] 0.072644 +Converged at iteration 23, L1 8.52828e-05, Linf 0.00699311, total time[s] 0.062551 +Converged at iteration 22, L1 5.75429e-05, Linf 0.00386477, total time[s] 0.06139 +Converged at iteration 22, L1 8.72962e-05, Linf 0.00299182, total time[s] 0.062277 +Converged at iteration 25, L1 6.69595e-05, Linf 0.00182256, total time[s] 0.072059 +Converged at iteration 29, L1 7.32109e-05, Linf 0.00511902, total time[s] 0.07672 +Converged at iteration 30, L1 7.72246e-05, Linf 0.00549479, total time[s] 0.085276 +Converged at iteration 28, L1 5.93137e-05, Linf 0.00276103, total time[s] 0.08206 +Converged at iteration 30, L1 7.94085e-05, Linf 0.00530529, total time[s] 0.079092 +Converged at iteration 30, L1 6.69069e-05, Linf 0.0023451, total time[s] 0.079097 +Converged at iteration 29, L1 7.74202e-05, Linf 0.00139495, total time[s] 0.075671 +Converged at iteration 30, L1 8.05178e-05, Linf 0.00813863, total time[s] 0.080338 +Converged at iteration 29, L1 6.42464e-05, Linf 0.00955189, total time[s] 0.076778 +Converged at iteration 27, L1 7.27549e-05, Linf 0.0075744, total time[s] 0.0703 +Converged at iteration 24, L1 8.4837e-05, Linf 0.00312623, total time[s] 0.063421 +Converged at iteration 37, L1 8.78564e-05, Linf 0.0066668, total time[s] 0.099353 +Converged at iteration 34, L1 5.62764e-05, Linf 0.00542173, total time[s] 0.091969 +Converged at iteration 25, L1 4.71976e-05, Linf 0.00230944, total time[s] 0.066263 +Converged at iteration 29, L1 8.2864e-05, Linf 0.00646077, total time[s] 0.075721 +Converged at iteration 27, L1 6.39079e-05, Linf 0.0106717, total time[s] 0.071237 +Converged at iteration 25, L1 5.48845e-05, Linf 0.011033, total time[s] 0.066904 +Converged at iteration 20, L1 5.96794e-05, Linf 0.00500773, total time[s] 0.058787 +Converged at iteration 20, L1 4.28293e-05, Linf 0.00378371, total time[s] 0.057489 +Converged at iteration 23, L1 9.53378e-05, Linf 0.00487648, total time[s] 0.063272 +Converged at iteration 25, L1 6.93655e-05, Linf 0.00741276, total time[s] 0.066741 +Converged at iteration 21, L1 8.03005e-05, Linf 0.00564309, total time[s] 0.05749 +Converged at iteration 17, L1 6.22257e-05, Linf 0.00291817, total time[s] 0.04818 +Converged at iteration 31, L1 5.88391e-05, Linf 0.00502142, total time[s] 0.082455 +Converged at iteration 17, L1 9.31075e-05, Linf 0.0022876, total time[s] 0.046725 +Converged at iteration 18, L1 9.30229e-05, Linf 0.00179997, total time[s] 0.048621 +Converged at iteration 27, L1 6.72584e-05, Linf 0.00317644, total time[s] 0.073917 +Converged at iteration 23, L1 9.06875e-05, Linf 0.00728368, total time[s] 0.067237 +Converged at iteration 22, L1 6.19972e-05, Linf 0.00414585, total time[s] 0.060111 +Converged at iteration 22, L1 9.67388e-05, Linf 0.00321907, total time[s] 0.060267 +Converged at iteration 24, L1 9.67294e-05, Linf 0.00167787, total time[s] 0.064482 +Converged at iteration 29, L1 7.31827e-05, Linf 0.00530995, total time[s] 0.11469 +Converged at iteration 30, L1 8.14043e-05, Linf 0.00572577, total time[s] 0.080569 +Converged at iteration 28, L1 5.91676e-05, Linf 0.00271955, total time[s] 0.101263 +Converged at iteration 30, L1 8.24374e-05, Linf 0.00548781, total time[s] 0.110726 +Converged at iteration 30, L1 7.08506e-05, Linf 0.00241501, total time[s] 0.079017 +Converged at iteration 29, L1 8.24489e-05, Linf 0.00155323, total time[s] 0.07587 +Converged at iteration 30, L1 7.41181e-05, Linf 0.0079903, total time[s] 0.08148 +Converged at iteration 29, L1 7.06386e-05, Linf 0.0101986, total time[s] 0.08578 +Converged at iteration 27, L1 8.27371e-05, Linf 0.00826381, total time[s] 0.109527 +Converged at iteration 24, L1 8.83088e-05, Linf 0.00324806, total time[s] 0.076959 +Converged at iteration 37, L1 8.27056e-05, Linf 0.00641511, total time[s] 0.1028 +Converged at iteration 34, L1 5.16209e-05, Linf 0.00527631, total time[s] 0.105708 +Converged at iteration 25, L1 4.87249e-05, Linf 0.00229215, total time[s] 0.076393 +Converged at iteration 29, L1 7.90322e-05, Linf 0.00628488, total time[s] 0.088286 +Converged at iteration 27, L1 6.70499e-05, Linf 0.011018, total time[s] 0.075518 +Converged at iteration 25, L1 6.07574e-05, Linf 0.011789, total time[s] 0.093251 +Converged at iteration 20, L1 6.37791e-05, Linf 0.00531053, total time[s] 0.076898 +Converged at iteration 20, L1 4.0496e-05, Linf 0.00376548, total time[s] 0.078566 +Converged at iteration 23, L1 9.71369e-05, Linf 0.00490631, total time[s] 0.069902 +Converged at iteration 25, L1 5.97539e-05, Linf 0.00748868, total time[s] 0.072778 +Converged at iteration 21, L1 7.93764e-05, Linf 0.00559697, total time[s] 0.060631 +Converged at iteration 17, L1 6.63541e-05, Linf 0.00264107, total time[s] 0.047512 +Converged at iteration 31, L1 5.6268e-05, Linf 0.00520704, total time[s] 0.088009 +Converged at iteration 18, L1 8.0664e-05, Linf 0.00170836, total time[s] 0.054869 +Converged at iteration 19, L1 8.55612e-05, Linf 0.00193169, total time[s] 0.053692 +Converged at iteration 27, L1 7.07095e-05, Linf 0.00336551, total time[s] 0.069932 +Converged at iteration 23, L1 9.66633e-05, Linf 0.00757522, total time[s] 0.062512 +Converged at iteration 22, L1 6.56336e-05, Linf 0.00441223, total time[s] 0.06836 +Converged at iteration 23, L1 6.36051e-05, Linf 0.00236392, total time[s] 0.069942 +Converged at iteration 24, L1 9.18369e-05, Linf 0.00166707, total time[s] 0.064397 +Converged at iteration 29, L1 7.32992e-05, Linf 0.00483076, total time[s] 0.084852 +Converged at iteration 30, L1 8.59634e-05, Linf 0.00595411, total time[s] 0.087228 +Converged at iteration 28, L1 5.96316e-05, Linf 0.00270416, total time[s] 0.08331 +Converged at iteration 30, L1 8.60755e-05, Linf 0.00576019, total time[s] 0.07821 +Converged at iteration 30, L1 7.28713e-05, Linf 0.00249471, total time[s] 0.077931 +Converged at iteration 29, L1 8.75406e-05, Linf 0.00170909, total time[s] 0.07402 +Converged at iteration 30, L1 6.91059e-05, Linf 0.00784692, total time[s] 0.077537 +Converged at iteration 29, L1 7.59665e-05, Linf 0.0108065, total time[s] 0.075729 +Converged at iteration 27, L1 9.34759e-05, Linf 0.0089608, total time[s] 0.069765 +Converged at iteration 24, L1 9.26063e-05, Linf 0.00339036, total time[s] 0.06752 +Converged at iteration 37, L1 7.66381e-05, Linf 0.00619197, total time[s] 0.103544 +Converged at iteration 33, L1 9.85058e-05, Linf 0.00628383, total time[s] 0.117768 +Converged at iteration 25, L1 5.08136e-05, Linf 0.00226871, total time[s] 0.088654 +Converged at iteration 29, L1 7.91256e-05, Linf 0.00626541, total time[s] 0.087926 +Converged at iteration 27, L1 7.25399e-05, Linf 0.0115178, total time[s] 0.085905 +Converged at iteration 25, L1 6.7208e-05, Linf 0.0123734, total time[s] 0.079166 +Converged at iteration 20, L1 6.82646e-05, Linf 0.00574295, total time[s] 0.05964 +Converged at iteration 19, L1 9.85301e-05, Linf 0.00568842, total time[s] 0.064373 +Converged at iteration 23, L1 9.83663e-05, Linf 0.00491783, total time[s] 0.073818 +Converged at iteration 25, L1 5.29583e-05, Linf 0.00751617, total time[s] 0.072555 +Converged at iteration 21, L1 7.80436e-05, Linf 0.00560137, total time[s] 0.059466 +Converged at iteration 17, L1 7.12441e-05, Linf 0.00231695, total time[s] 0.048126 +Converged at iteration 31, L1 5.46057e-05, Linf 0.0054462, total time[s] 0.098352 +Converged at iteration 18, L1 9.85541e-05, Linf 0.00221581, total time[s] 0.049233 +Converged at iteration 20, L1 7.55276e-05, Linf 0.00237022, total time[s] 0.054077 +Converged at iteration 27, L1 7.24265e-05, Linf 0.00354354, total time[s] 0.069974 +Converged at iteration 24, L1 4.55801e-05, Linf 0.00377858, total time[s] 0.062864 +Converged at iteration 22, L1 6.9828e-05, Linf 0.00461969, total time[s] 0.058441 +Converged at iteration 23, L1 7.13501e-05, Linf 0.0026214, total time[s] 0.061952 +Converged at iteration 24, L1 8.53733e-05, Linf 0.00167204, total time[s] 0.065035 +Converged at iteration 29, L1 7.22034e-05, Linf 0.00527646, total time[s] 0.074466 +Converged at iteration 30, L1 9.08062e-05, Linf 0.00615608, total time[s] 0.077113 +Converged at iteration 28, L1 5.93894e-05, Linf 0.00270227, total time[s] 0.073013 +Converged at iteration 30, L1 8.80026e-05, Linf 0.00589359, total time[s] 0.077276 +Converged at iteration 30, L1 7.49233e-05, Linf 0.00251665, total time[s] 0.078927 +Converged at iteration 29, L1 9.30679e-05, Linf 0.00186396, total time[s] 0.074414 +Converged at iteration 30, L1 6.50124e-05, Linf 0.00770779, total time[s] 0.078236 +Converged at iteration 29, L1 8.21547e-05, Linf 0.0115105, total time[s] 0.074903 +Converged at iteration 28, L1 4.85195e-05, Linf 0.00761983, total time[s] 0.073416 +Converged at iteration 24, L1 9.42009e-05, Linf 0.00346709, total time[s] 0.064341 +Converged at iteration 37, L1 7.10995e-05, Linf 0.00599484, total time[s] 0.119574 +Converged at iteration 33, L1 9.2691e-05, Linf 0.00597314, total time[s] 0.096063 +Converged at iteration 25, L1 5.16796e-05, Linf 0.00224104, total time[s] 0.066166 +Converged at iteration 29, L1 7.3803e-05, Linf 0.00620666, total time[s] 0.074345 +Converged at iteration 27, L1 7.48469e-05, Linf 0.0118688, total time[s] 0.06925 +Converged at iteration 25, L1 7.2604e-05, Linf 0.013208, total time[s] 0.066763 +Converged at iteration 20, L1 7.25984e-05, Linf 0.00613898, total time[s] 0.054336 +Converged at iteration 19, L1 9.28977e-05, Linf 0.00570944, total time[s] 0.058728 +Converged at iteration 23, L1 9.80029e-05, Linf 0.00491152, total time[s] 0.091016 +Converged at iteration 24, L1 9.90499e-05, Linf 0.00989215, total time[s] 0.071642 +Converged at iteration 21, L1 7.61655e-05, Linf 0.00558875, total time[s] 0.059282 +Converged at iteration 17, L1 7.8438e-05, Linf 0.00194958, total time[s] 0.048641 +Converged at iteration 31, L1 5.4112e-05, Linf 0.00569298, total time[s] 0.094352 +Converged at iteration 19, L1 7.37335e-05, Linf 0.00247281, total time[s] 0.054865 +Converged at iteration 20, L1 9.96133e-05, Linf 0.00317868, total time[s] 0.056114 +Converged at iteration 27, L1 7.36089e-05, Linf 0.00368533, total time[s] 0.072594 +Converged at iteration 24, L1 4.87763e-05, Linf 0.00399194, total time[s] 0.062826 +Converged at iteration 22, L1 7.36629e-05, Linf 0.00472947, total time[s] 0.058675 +Converged at iteration 23, L1 7.92928e-05, Linf 0.0030779, total time[s] 0.060313 +Converged at iteration 24, L1 7.85793e-05, Linf 0.00168535, total time[s] 0.064445 +Converged at iteration 29, L1 7.08097e-05, Linf 0.00513956, total time[s] 0.081118 +Converged at iteration 30, L1 9.53316e-05, Linf 0.00641274, total time[s] 0.077535 +Converged at iteration 28, L1 5.95337e-05, Linf 0.00258973, total time[s] 0.073196 +Converged at iteration 30, L1 9.07884e-05, Linf 0.00611545, total time[s] 0.07877 +Converged at iteration 30, L1 7.75929e-05, Linf 0.00260369, total time[s] 0.077297 +Converged at iteration 29, L1 9.86972e-05, Linf 0.00201, total time[s] 0.075168 +Converged at iteration 30, L1 6.15283e-05, Linf 0.00757573, total time[s] 0.077926 +Converged at iteration 29, L1 8.91439e-05, Linf 0.0122495, total time[s] 0.076769 +Converged at iteration 28, L1 5.46822e-05, Linf 0.00824168, total time[s] 0.072097 +Converged at iteration 24, L1 9.75588e-05, Linf 0.00344016, total time[s] 0.064294 +Converged at iteration 37, L1 6.56946e-05, Linf 0.00582364, total time[s] 0.097942 +Converged at iteration 33, L1 8.84864e-05, Linf 0.00564947, total time[s] 0.095693 +Converged at iteration 25, L1 5.29759e-05, Linf 0.0022709, total time[s] 0.067211 +Converged at iteration 29, L1 6.76925e-05, Linf 0.00617757, total time[s] 0.074388 +Converged at iteration 27, L1 7.72789e-05, Linf 0.012163, total time[s] 0.070846 +Converged at iteration 25, L1 7.82638e-05, Linf 0.0138883, total time[s] 0.071314 +Converged at iteration 20, L1 7.68742e-05, Linf 0.00651317, total time[s] 0.054741 +Converged at iteration 19, L1 8.97959e-05, Linf 0.00573623, total time[s] 0.05504 +Converged at iteration 23, L1 9.94279e-05, Linf 0.00488716, total time[s] 0.067292 +Converged at iteration 24, L1 8.46804e-05, Linf 0.00991909, total time[s] 0.065275 +Converged at iteration 21, L1 7.35327e-05, Linf 0.0055859, total time[s] 0.057631 +Converged at iteration 17, L1 8.53305e-05, Linf 0.00169059, total time[s] 0.047668 +Converged at iteration 31, L1 5.3943e-05, Linf 0.00592266, total time[s] 0.129143 +Converged at iteration 19, L1 8.4242e-05, Linf 0.0030984, total time[s] 0.098475 +Converged at iteration 21, L1 7.86482e-05, Linf 0.00359075, total time[s] 0.070794 +Converged at iteration 27, L1 7.33233e-05, Linf 0.00373108, total time[s] 0.075567 +Converged at iteration 24, L1 5.23677e-05, Linf 0.00417031, total time[s] 0.081471 +Converged at iteration 22, L1 7.76862e-05, Linf 0.00481827, total time[s] 0.060346 +Converged at iteration 23, L1 9.00308e-05, Linf 0.00354621, total time[s] 0.062216 +Converged at iteration 24, L1 7.15688e-05, Linf 0.00167562, total time[s] 0.075759 +Converged at iteration 29, L1 6.94269e-05, Linf 0.00516351, total time[s] 0.090452 +Converged at iteration 31, L1 5.20229e-05, Linf 0.00372246, total time[s] 0.089646 +Converged at iteration 28, L1 5.95583e-05, Linf 0.00259376, total time[s] 0.07678 +Converged at iteration 30, L1 9.25958e-05, Linf 0.00634757, total time[s] 0.081172 +Converged at iteration 30, L1 8.03441e-05, Linf 0.00267252, total time[s] 0.079527 +Converged at iteration 30, L1 5.22309e-05, Linf 0.00122012, total time[s] 0.078926 +Converged at iteration 30, L1 5.88385e-05, Linf 0.00744125, total time[s] 0.078964 +Converged at iteration 29, L1 9.61942e-05, Linf 0.0130375, total time[s] 0.080193 +Converged at iteration 28, L1 6.14613e-05, Linf 0.00887002, total time[s] 0.079764 +Converged at iteration 25, L1 5.36834e-05, Linf 0.0020542, total time[s] 0.073736 +Converged at iteration 37, L1 6.04149e-05, Linf 0.00564652, total time[s] 0.108895 +Converged at iteration 33, L1 8.49105e-05, Linf 0.00534139, total time[s] 0.101958 +Converged at iteration 25, L1 5.25487e-05, Linf 0.00230175, total time[s] 0.075095 +Converged at iteration 29, L1 6.13771e-05, Linf 0.00618045, total time[s] 0.078202 +Converged at iteration 27, L1 8.0619e-05, Linf 0.012321, total time[s] 0.072658 +Converged at iteration 25, L1 8.4814e-05, Linf 0.0145924, total time[s] 0.073176 +Converged at iteration 20, L1 8.14911e-05, Linf 0.00732682, total time[s] 0.090003 +Converged at iteration 19, L1 8.38892e-05, Linf 0.00575751, total time[s] 0.072958 +Converged at iteration 23, L1 9.94397e-05, Linf 0.00487943, total time[s] 0.089797 +Converged at iteration 24, L1 7.48956e-05, Linf 0.0098466, total time[s] 0.065778 +Converged at iteration 21, L1 7.08397e-05, Linf 0.00560459, total time[s] 0.058502 +Converged at iteration 17, L1 9.4942e-05, Linf 0.00192096, total time[s] 0.046653 +Converged at iteration 31, L1 5.49496e-05, Linf 0.00617978, total time[s] 0.089353 +Converged at iteration 19, L1 9.89099e-05, Linf 0.00405495, total time[s] 0.053509 +Converged at iteration 21, L1 9.332e-05, Linf 0.00446348, total time[s] 0.067078 +Converged at iteration 27, L1 7.43502e-05, Linf 0.00380647, total time[s] 0.104266 +Converged at iteration 24, L1 5.54656e-05, Linf 0.0043195, total time[s] 0.068438 +Converged at iteration 22, L1 8.17966e-05, Linf 0.00507543, total time[s] 0.058368 +Converged at iteration 23, L1 9.88081e-05, Linf 0.00409558, total time[s] 0.066418 +Converged at iteration 23, L1 8.97957e-05, Linf 0.00249922, total time[s] 0.07059 +Converged at iteration 29, L1 6.74138e-05, Linf 0.00513498, total time[s] 0.078183 +Converged at iteration 31, L1 5.47093e-05, Linf 0.00385379, total time[s] 0.087826 +Converged at iteration 27, L1 9.93974e-05, Linf 0.00359649, total time[s] 0.071963 +Converged at iteration 30, L1 9.52637e-05, Linf 0.00659919, total time[s] 0.080945 +Converged at iteration 30, L1 8.23489e-05, Linf 0.00281685, total time[s] 0.078477 +Converged at iteration 30, L1 5.46379e-05, Linf 0.00126696, total time[s] 0.076365 +Converged at iteration 30, L1 5.74815e-05, Linf 0.00728078, total time[s] 0.078751 +Converged at iteration 30, L1 4.05615e-05, Linf 0.00975913, total time[s] 0.079299 +Converged at iteration 28, L1 6.89941e-05, Linf 0.00953312, total time[s] 0.073765 +Converged at iteration 25, L1 5.30665e-05, Linf 0.00211321, total time[s] 0.066658 +Converged at iteration 37, L1 5.57909e-05, Linf 0.00544296, total time[s] 0.099811 +Converged at iteration 33, L1 8.25887e-05, Linf 0.00508546, total time[s] 0.100937 +Converged at iteration 25, L1 5.48896e-05, Linf 0.00238737, total time[s] 0.074836 +Converged at iteration 28, L1 9.29522e-05, Linf 0.00808718, total time[s] 0.084016 +Converged at iteration 27, L1 8.01674e-05, Linf 0.0112919, total time[s] 0.074082 +Converged at iteration 25, L1 9.22114e-05, Linf 0.0153336, total time[s] 0.067057 +Converged at iteration 20, L1 8.6046e-05, Linf 0.00764577, total time[s] 0.054952 +Converged at iteration 19, L1 8.09347e-05, Linf 0.00575924, total time[s] 0.083001 +Converged at iteration 23, L1 9.94984e-05, Linf 0.0048653, total time[s] 0.068032 +Converged at iteration 24, L1 6.34493e-05, Linf 0.00968603, total time[s] 0.068685 +Converged at iteration 21, L1 6.31279e-05, Linf 0.00554961, total time[s] 0.058174 +Converged at iteration 18, L1 5.4433e-05, Linf 0.00135651, total time[s] 0.053732 +Converged at iteration 31, L1 5.69448e-05, Linf 0.00644984, total time[s] 0.089769 +Converged at iteration 20, L1 7.02862e-05, Linf 0.00355774, total time[s] 0.05557 +Converged at iteration 22, L1 6.23885e-05, Linf 0.0041889, total time[s] 0.061042 +Converged at iteration 27, L1 7.7535e-05, Linf 0.00392737, total time[s] 0.080922 +Converged at iteration 24, L1 5.87118e-05, Linf 0.0044816, total time[s] 0.065669 +Converged at iteration 22, L1 8.7118e-05, Linf 0.0053201, total time[s] 0.06027 +Converged at iteration 24, L1 6.07077e-05, Linf 0.00328456, total time[s] 0.070767 +Converged at iteration 23, L1 8.09248e-05, Linf 0.00249957, total time[s] 0.062664 +Converged at iteration 29, L1 6.55374e-05, Linf 0.00510353, total time[s] 0.077099 +Converged at iteration 31, L1 5.77846e-05, Linf 0.00403281, total time[s] 0.08011 +Converged at iteration 27, L1 9.83109e-05, Linf 0.00358538, total time[s] 0.159899 +Converged at iteration 30, L1 9.74957e-05, Linf 0.00687188, total time[s] 0.18581 +Converged at iteration 30, L1 8.57146e-05, Linf 0.00299324, total time[s] 0.118861 +Converged at iteration 30, L1 5.61714e-05, Linf 0.00129604, total time[s] 0.082276 +Converged at iteration 30, L1 5.62155e-05, Linf 0.00706671, total time[s] 0.080024 +Converged at iteration 30, L1 4.47056e-05, Linf 0.010454, total time[s] 0.078871 +Converged at iteration 28, L1 7.78078e-05, Linf 0.0102418, total time[s] 0.07342 +Converged at iteration 25, L1 5.32468e-05, Linf 0.00215612, total time[s] 0.066641 +Converged at iteration 36, L1 9.7288e-05, Linf 0.00665697, total time[s] 0.093411 +Converged at iteration 33, L1 8.12038e-05, Linf 0.00488687, total time[s] 0.089742 +Converged at iteration 25, L1 5.79415e-05, Linf 0.00249523, total time[s] 0.073097 +Converged at iteration 28, L1 7.04568e-05, Linf 0.00802768, total time[s] 0.081258 +Converged at iteration 27, L1 8.1657e-05, Linf 0.0114709, total time[s] 0.071798 +Converged at iteration 25, L1 9.7089e-05, Linf 0.0148519, total time[s] 0.070459 +Converged at iteration 20, L1 9.0316e-05, Linf 0.007973, total time[s] 0.056329 +Converged at iteration 19, L1 7.87791e-05, Linf 0.00573543, total time[s] 0.064008 +Converged at iteration 24, L1 5.43943e-05, Linf 0.00279348, total time[s] 0.070371 +Converged at iteration 24, L1 5.40327e-05, Linf 0.0094388, total time[s] 0.067674 +Converged at iteration 21, L1 5.30685e-05, Linf 0.00537729, total time[s] 0.062482 +Converged at iteration 18, L1 6.23179e-05, Linf 0.00156188, total time[s] 0.048153 +Converged at iteration 31, L1 5.91185e-05, Linf 0.00672738, total time[s] 0.084135 +Converged at iteration 20, L1 8.23063e-05, Linf 0.00367837, total time[s] 0.053586 +Converged at iteration 22, L1 6.80703e-05, Linf 0.00476608, total time[s] 0.070565 +Converged at iteration 27, L1 8.06557e-05, Linf 0.00408032, total time[s] 0.072599 +Converged at iteration 24, L1 6.15186e-05, Linf 0.00465246, total time[s] 0.065688 +Converged at iteration 22, L1 9.19225e-05, Linf 0.00548912, total time[s] 0.060055 +Converged at iteration 24, L1 6.73632e-05, Linf 0.00371307, total time[s] 0.098693 +Converged at iteration 23, L1 7.46216e-05, Linf 0.00295915, total time[s] 0.096912 +Converged at iteration 28, L1 9.74234e-05, Linf 0.00642016, total time[s] 0.072899 +Converged at iteration 31, L1 6.22814e-05, Linf 0.0043295, total time[s] 0.08029 +Converged at iteration 27, L1 9.71674e-05, Linf 0.0035772, total time[s] 0.069038 +Converged at iteration 31, L1 5.10428e-05, Linf 0.00545776, total time[s] 0.078294 +Converged at iteration 30, L1 8.69906e-05, Linf 0.00317551, total time[s] 0.07732 +Converged at iteration 30, L1 5.83019e-05, Linf 0.00139949, total time[s] 0.077721 +Converged at iteration 30, L1 5.56897e-05, Linf 0.00675277, total time[s] 0.078251 +Converged at iteration 30, L1 4.89634e-05, Linf 0.0111489, total time[s] 0.084492 +Converged at iteration 28, L1 8.63951e-05, Linf 0.0109821, total time[s] 0.081227 +Converged at iteration 25, L1 5.25376e-05, Linf 0.00220568, total time[s] 0.066091 +Converged at iteration 36, L1 9.27098e-05, Linf 0.00649656, total time[s] 0.092785 +Converged at iteration 33, L1 8.06362e-05, Linf 0.00474339, total time[s] 0.086955 +Converged at iteration 25, L1 6.01683e-05, Linf 0.00258437, total time[s] 0.074706 +Converged at iteration 28, L1 4.83879e-05, Linf 0.00784554, total time[s] 0.077893 +Converged at iteration 27, L1 8.20932e-05, Linf 0.0116035, total time[s] 0.070148 +Converged at iteration 25, L1 9.90243e-05, Linf 0.0152354, total time[s] 0.064512 +Converged at iteration 20, L1 9.57507e-05, Linf 0.00822122, total time[s] 0.060167 +Converged at iteration 19, L1 7.71603e-05, Linf 0.00568961, total time[s] 0.060509 +Converged at iteration 24, L1 5.62357e-05, Linf 0.00276169, total time[s] 0.072164 +Converged at iteration 24, L1 4.69388e-05, Linf 0.0091543, total time[s] 0.077822 +Converged at iteration 21, L1 4.49401e-05, Linf 0.00500287, total time[s] 0.066888 +Converged at iteration 18, L1 7.03199e-05, Linf 0.00177994, total time[s] 0.068644 +Converged at iteration 31, L1 6.12168e-05, Linf 0.00701815, total time[s] 0.09819 +Converged at iteration 20, L1 9.03665e-05, Linf 0.00419995, total time[s] 0.063037 +Converged at iteration 22, L1 7.64614e-05, Linf 0.00526644, total time[s] 0.06362 +Converged at iteration 27, L1 8.29439e-05, Linf 0.00424548, total time[s] 0.074774 +Converged at iteration 24, L1 6.44254e-05, Linf 0.0048255, total time[s] 0.076862 +Converged at iteration 22, L1 9.6137e-05, Linf 0.00559719, total time[s] 0.081005 +Converged at iteration 24, L1 7.52952e-05, Linf 0.0043076, total time[s] 0.064737 +Converged at iteration 23, L1 7.32929e-05, Linf 0.00371432, total time[s] 0.070746 +Converged at iteration 28, L1 9.48323e-05, Linf 0.00613981, total time[s] 0.07647 +Converged at iteration 31, L1 6.65332e-05, Linf 0.0050298, total time[s] 0.091593 +Converged at iteration 27, L1 9.70607e-05, Linf 0.00357751, total time[s] 0.08111 +Converged at iteration 31, L1 5.27128e-05, Linf 0.00558653, total time[s] 0.117023 +Converged at iteration 30, L1 9.23299e-05, Linf 0.00319584, total time[s] 0.094571 +Converged at iteration 30, L1 6.17936e-05, Linf 0.00157707, total time[s] 0.087539 +Converged at iteration 30, L1 5.65563e-05, Linf 0.00651239, total time[s] 0.098658 +Converged at iteration 30, L1 5.43358e-05, Linf 0.0121716, total time[s] 0.079687 +Converged at iteration 28, L1 9.47475e-05, Linf 0.0119378, total time[s] 0.079882 +Converged at iteration 25, L1 5.20906e-05, Linf 0.00221886, total time[s] 0.080483 +Converged at iteration 36, L1 8.96192e-05, Linf 0.00634047, total time[s] 0.110667 +Converged at iteration 33, L1 8.05936e-05, Linf 0.00464754, total time[s] 0.113335 +Converged at iteration 25, L1 6.09325e-05, Linf 0.00263304, total time[s] 0.069349 +Converged at iteration 27, L1 7.1145e-05, Linf 0.00982231, total time[s] 0.073356 +Converged at iteration 27, L1 8.14712e-05, Linf 0.0110799, total time[s] 0.072879 +Converged at iteration 26, L1 3.11522e-05, Linf 0.0100991, total time[s] 0.077333 +Converged at iteration 21, L1 3.65226e-05, Linf 0.00636155, total time[s] 0.060526 +Converged at iteration 19, L1 7.70479e-05, Linf 0.00563946, total time[s] 0.074793 +Converged at iteration 23, L1 5.78196e-05, Linf 0.00265842, total time[s] 0.310972 +Converged at iteration 24, L1 3.97198e-05, Linf 0.00866672, total time[s] 0.144082 +Converged at iteration 20, L1 9.56336e-05, Linf 0.00667104, total time[s] 0.056871 +Converged at iteration 18, L1 7.67955e-05, Linf 0.00200989, total time[s] 0.051888 +Converged at iteration 31, L1 6.38603e-05, Linf 0.00730933, total time[s] 0.089016 +Converged at iteration 20, L1 9.10756e-05, Linf 0.00469123, total time[s] 0.062599 +Converged at iteration 22, L1 7.94439e-05, Linf 0.0057407, total time[s] 0.06187 +Converged at iteration 27, L1 8.30994e-05, Linf 0.00434381, total time[s] 0.085706 +Converged at iteration 24, L1 6.63416e-05, Linf 0.00499755, total time[s] 0.068665 +Converged at iteration 23, L1 5.37666e-05, Linf 0.00350118, total time[s] 0.059763 +Converged at iteration 24, L1 8.23848e-05, Linf 0.00590809, total time[s] 0.063952 +Converged at iteration 23, L1 7.54837e-05, Linf 0.00448495, total time[s] 0.06073 +Converged at iteration 28, L1 8.98356e-05, Linf 0.0058242, total time[s] 0.0838 +Converged at iteration 31, L1 7.01679e-05, Linf 0.00505892, total time[s] 0.079876 +Converged at iteration 27, L1 9.5837e-05, Linf 0.0035591, total time[s] 0.070762 +Converged at iteration 31, L1 5.41047e-05, Linf 0.00587151, total time[s] 0.077527 +Converged at iteration 30, L1 9.35588e-05, Linf 0.00315635, total time[s] 0.076405 +Converged at iteration 30, L1 7.13268e-05, Linf 0.00182803, total time[s] 0.074176 +Converged at iteration 30, L1 5.76656e-05, Linf 0.00616412, total time[s] 0.095262 +Converged at iteration 30, L1 6.08319e-05, Linf 0.0132471, total time[s] 0.077856 +Converged at iteration 29, L1 4.48638e-05, Linf 0.00913563, total time[s] 0.076832 +Converged at iteration 25, L1 5.26344e-05, Linf 0.00220178, total time[s] 0.064346 +Converged at iteration 36, L1 8.73685e-05, Linf 0.00623578, total time[s] 0.091621 +Converged at iteration 33, L1 8.20878e-05, Linf 0.00466359, total time[s] 0.089706 +Converged at iteration 25, L1 6.17441e-05, Linf 0.00263763, total time[s] 0.068654 +Converged at iteration 27, L1 4.86614e-05, Linf 0.00950546, total time[s] 0.069996 +Converged at iteration 27, L1 8.12876e-05, Linf 0.011029, total time[s] 0.104451 +Converged at iteration 26, L1 3.23885e-05, Linf 0.0117806, total time[s] 0.086909 +Converged at iteration 21, L1 3.81063e-05, Linf 0.00671013, total time[s] 0.065376 +Converged at iteration 19, L1 7.58773e-05, Linf 0.00557539, total time[s] 0.073753 +Converged at iteration 24, L1 5.57552e-05, Linf 0.00266451, total time[s] 0.081109 +Converged at iteration 23, L1 9.28547e-05, Linf 0.0130759, total time[s] 0.084673 +Converged at iteration 20, L1 8.87792e-05, Linf 0.00618428, total time[s] 0.081398 +Converged at iteration 18, L1 8.41947e-05, Linf 0.00224041, total time[s] 0.088066 +Converged at iteration 31, L1 6.62885e-05, Linf 0.0076253, total time[s] 0.107743 +Converged at iteration 21, L1 6.23419e-05, Linf 0.0037565, total time[s] 0.077336 +Converged at iteration 22, L1 8.65964e-05, Linf 0.00630567, total time[s] 0.056881 +Converged at iteration 27, L1 8.22842e-05, Linf 0.00437682, total time[s] 0.070897 +Converged at iteration 24, L1 6.83687e-05, Linf 0.00518235, total time[s] 0.062417 +Converged at iteration 23, L1 5.64832e-05, Linf 0.00364053, total time[s] 0.07144 +Converged at iteration 24, L1 8.90271e-05, Linf 0.00695438, total time[s] 0.081787 +Converged at iteration 23, L1 8.00538e-05, Linf 0.00525129, total time[s] 0.064172 +Converged at iteration 28, L1 8.158e-05, Linf 0.0054938, total time[s] 0.072234 +Converged at iteration 31, L1 7.42049e-05, Linf 0.00493127, total time[s] 0.079003 +Converged at iteration 27, L1 9.5174e-05, Linf 0.00351946, total time[s] 0.086004 +Converged at iteration 31, L1 5.59273e-05, Linf 0.00618425, total time[s] 0.084994 +Converged at iteration 30, L1 9.36408e-05, Linf 0.00335187, total time[s] 0.114811 +Converged at iteration 30, L1 7.53986e-05, Linf 0.00209356, total time[s] 0.090181 +Converged at iteration 30, L1 5.80907e-05, Linf 0.00576349, total time[s] 0.078352 +Converged at iteration 30, L1 6.90857e-05, Linf 0.0143334, total time[s] 0.077258 +Converged at iteration 29, L1 4.789e-05, Linf 0.00971263, total time[s] 0.076432 +Converged at iteration 25, L1 4.99602e-05, Linf 0.00218972, total time[s] 0.066441 +Converged at iteration 36, L1 8.60174e-05, Linf 0.00622215, total time[s] 0.093375 +Converged at iteration 33, L1 8.49195e-05, Linf 0.0048136, total time[s] 0.093573 +Converged at iteration 25, L1 6.05427e-05, Linf 0.00271231, total time[s] 0.067529 +Converged at iteration 26, L1 7.38156e-05, Linf 0.0116423, total time[s] 0.072367 +Converged at iteration 27, L1 8.36723e-05, Linf 0.0114517, total time[s] 0.075833 +Converged at iteration 26, L1 3.40785e-05, Linf 0.0123013, total time[s] 0.07132 +Converged at iteration 21, L1 4.03425e-05, Linf 0.00693861, total time[s] 0.061213 +Converged at iteration 19, L1 7.89735e-05, Linf 0.00548987, total time[s] 0.062776 +Converged at iteration 24, L1 5.62257e-05, Linf 0.00263899, total time[s] 0.078577 +Converged at iteration 23, L1 8.18056e-05, Linf 0.0124446, total time[s] 0.064865 +Converged at iteration 20, L1 8.49855e-05, Linf 0.00534003, total time[s] 0.064868 +Converged at iteration 18, L1 9.35926e-05, Linf 0.00258301, total time[s] 0.07714 +Converged at iteration 31, L1 6.85545e-05, Linf 0.00806809, total time[s] 0.105174 +Converged at iteration 21, L1 8.76156e-05, Linf 0.00400726, total time[s] 0.06441 +Converged at iteration 22, L1 9.12715e-05, Linf 0.00669556, total time[s] 0.057979 +Converged at iteration 27, L1 7.80573e-05, Linf 0.00431667, total time[s] 0.069716 +Converged at iteration 24, L1 7.13589e-05, Linf 0.00546956, total time[s] 0.063819 +Converged at iteration 23, L1 6.01005e-05, Linf 0.00379269, total time[s] 0.063751 +Converged at iteration 24, L1 9.6656e-05, Linf 0.00799095, total time[s] 0.07518 +Converged at iteration 23, L1 9.0676e-05, Linf 0.0062631, total time[s] 0.062044 +Converged at iteration 28, L1 7.04869e-05, Linf 0.00511045, total time[s] 0.072657 +Converged at iteration 31, L1 8.02228e-05, Linf 0.00546962, total time[s] 0.080692 +Converged at iteration 27, L1 9.2186e-05, Linf 0.00344121, total time[s] 0.08892 +Converged at iteration 31, L1 5.50625e-05, Linf 0.00648183, total time[s] 0.103256 +Converged at iteration 30, L1 9.59645e-05, Linf 0.00343495, total time[s] 0.082726 +Converged at iteration 30, L1 8.81417e-05, Linf 0.00255412, total time[s] 0.080246 +Converged at iteration 30, L1 5.832e-05, Linf 0.00526941, total time[s] 0.077382 +Converged at iteration 30, L1 8.00326e-05, Linf 0.015543, total time[s] 0.081017 +Converged at iteration 29, L1 5.33021e-05, Linf 0.010447, total time[s] 0.07525 +Converged at iteration 25, L1 4.96741e-05, Linf 0.00220862, total time[s] 0.065833 +Converged at iteration 36, L1 8.59473e-05, Linf 0.00632445, total time[s] 0.111228 +Converged at iteration 33, L1 8.71914e-05, Linf 0.00492093, total time[s] 0.110192 +Converged at iteration 25, L1 5.98018e-05, Linf 0.00275537, total time[s] 0.069817 +Converged at iteration 26, L1 5.9642e-05, Linf 0.0113924, total time[s] 0.067626 +Converged at iteration 27, L1 9.02222e-05, Linf 0.0118117, total time[s] 0.069656 +Converged at iteration 26, L1 3.59518e-05, Linf 0.0128429, total time[s] 0.085941 +Converged at iteration 21, L1 4.13336e-05, Linf 0.0071653, total time[s] 0.062284 +Converged at iteration 19, L1 8.06287e-05, Linf 0.00546559, total time[s] 0.06156 +Converged at iteration 24, L1 5.63639e-05, Linf 0.00260919, total time[s] 0.072976 +Converged at iteration 23, L1 7.74527e-05, Linf 0.0120528, total time[s] 0.069805 +Converged at iteration 20, L1 8.37758e-05, Linf 0.00477951, total time[s] 0.074489 +Converged at iteration 18, L1 9.87514e-05, Linf 0.00274492, total time[s] 0.073357 +Converged at iteration 31, L1 6.99104e-05, Linf 0.00831253, total time[s] 0.093474 +Converged at iteration 21, L1 9.2587e-05, Linf 0.00412374, total time[s] 0.055914 +Converged at iteration 22, L1 9.34362e-05, Linf 0.0070054, total time[s] 0.058999 +Converged at iteration 27, L1 7.63245e-05, Linf 0.00427233, total time[s] 0.068775 +Converged at iteration 24, L1 7.27046e-05, Linf 0.00557405, total time[s] 0.062572 +Converged at iteration 23, L1 6.22093e-05, Linf 0.00385737, total time[s] 0.058983 +Converged at iteration 25, L1 5.49489e-05, Linf 0.00370735, total time[s] 0.071124 +Converged at iteration 23, L1 9.89321e-05, Linf 0.0068383, total time[s] 0.06462 +Converged at iteration 27, L1 9.9556e-05, Linf 0.00633125, total time[s] 0.077563 +Converged at iteration 31, L1 8.27804e-05, Linf 0.00531889, total time[s] 0.09465 +Converged at iteration 27, L1 9.09468e-05, Linf 0.00339061, total time[s] 0.075122 +Converged at iteration 31, L1 5.62178e-05, Linf 0.00669605, total time[s] 0.092616 +Converged at iteration 30, L1 9.70928e-05, Linf 0.00328125, total time[s] 0.079399 +Converged at iteration 30, L1 9.35585e-05, Linf 0.00281898, total time[s] 0.082671 +Converged at iteration 29, L1 9.88575e-05, Linf 0.0084738, total time[s] 0.074508 +Converged at iteration 30, L1 8.64197e-05, Linf 0.0159123, total time[s] 0.076853 +Converged at iteration 29, L1 5.65565e-05, Linf 0.0108532, total time[s] 0.079791 +Converged at iteration 25, L1 4.96008e-05, Linf 0.00220164, total time[s] 0.071003 +Converged at iteration 36, L1 8.67405e-05, Linf 0.00648124, total time[s] 0.1035 +Converged at iteration 33, L1 9.11587e-05, Linf 0.00509386, total time[s] 0.175506 +Converged at iteration 25, L1 6.17282e-05, Linf 0.00284504, total time[s] 0.096999 +Converged at iteration 26, L1 4.53344e-05, Linf 0.0109204, total time[s] 0.093538 +Converged at iteration 27, L1 9.49528e-05, Linf 0.0116596, total time[s] 0.074355 +Converged at iteration 26, L1 3.71002e-05, Linf 0.0131476, total time[s] 0.082906 +Converged at iteration 21, L1 4.24591e-05, Linf 0.00735579, total time[s] 0.069144 +Converged at iteration 19, L1 8.12251e-05, Linf 0.00538944, total time[s] 0.066639 +Converged at iteration 24, L1 5.70319e-05, Linf 0.0025654, total time[s] 0.086232 +Converged at iteration 23, L1 7.4975e-05, Linf 0.0114918, total time[s] 0.086915 +Converged at iteration 20, L1 8.2336e-05, Linf 0.00491635, total time[s] 0.08718 +Converged at iteration 19, L1 5.12219e-05, Linf 0.0016052, total time[s] 0.066432 +Converged at iteration 31, L1 7.1998e-05, Linf 0.00865867, total time[s] 0.087511 +Converged at iteration 21, L1 9.30176e-05, Linf 0.00421726, total time[s] 0.066224 +Converged at iteration 22, L1 9.89053e-05, Linf 0.00736795, total time[s] 0.085821 +Converged at iteration 27, L1 7.54988e-05, Linf 0.00420339, total time[s] 0.079716 +Converged at iteration 24, L1 7.37745e-05, Linf 0.00566297, total time[s] 0.068795 +Converged at iteration 23, L1 6.51534e-05, Linf 0.00392654, total time[s] 0.079391 +Converged at iteration 25, L1 5.84509e-05, Linf 0.00388454, total time[s] 0.08072 +Converged at iteration 24, L1 6.39087e-05, Linf 0.00550942, total time[s] 0.062558 +Converged at iteration 27, L1 8.95236e-05, Linf 0.00625027, total time[s] 0.071859 +Converged at iteration 31, L1 8.61246e-05, Linf 0.00505142, total time[s] 0.07846 +Converged at iteration 27, L1 8.82817e-05, Linf 0.00326722, total time[s] 0.068699 +Converged at iteration 31, L1 5.83018e-05, Linf 0.00689984, total time[s] 0.077964 +Converged at iteration 30, L1 9.87138e-05, Linf 0.00322581, total time[s] 0.077363 +Converged at iteration 31, L1 4.70995e-05, Linf 0.00170103, total time[s] 0.077792 +Converged at iteration 29, L1 9.73371e-05, Linf 0.00805108, total time[s] 0.073576 +Converged at iteration 30, L1 9.41905e-05, Linf 0.0155767, total time[s] 0.080735 +Converged at iteration 29, L1 6.12158e-05, Linf 0.0114047, total time[s] 0.073758 +Converged at iteration 25, L1 4.9691e-05, Linf 0.00219378, total time[s] 0.065601 +Converged at iteration 36, L1 8.84027e-05, Linf 0.00670803, total time[s] 0.092236 +Converged at iteration 33, L1 9.54384e-05, Linf 0.0052872, total time[s] 0.086491 +Converged at iteration 25, L1 6.27614e-05, Linf 0.00286953, total time[s] 0.06919 +Converged at iteration 25, L1 9.39311e-05, Linf 0.0137781, total time[s] 0.064296 +Converged at iteration 27, L1 9.25273e-05, Linf 0.012949, total time[s] 0.069052 +Converged at iteration 26, L1 3.89073e-05, Linf 0.013583, total time[s] 0.066295 +Converged at iteration 21, L1 4.3267e-05, Linf 0.00747304, total time[s] 0.05574 +Converged at iteration 19, L1 8.12157e-05, Linf 0.00532671, total time[s] 0.049997 +Converged at iteration 24, L1 5.75637e-05, Linf 0.00253182, total time[s] 0.066598 +Converged at iteration 23, L1 7.24411e-05, Linf 0.0111155, total time[s] 0.059768 +Converged at iteration 20, L1 8.27316e-05, Linf 0.00496019, total time[s] 0.054964 +Converged at iteration 19, L1 5.51912e-05, Linf 0.00174408, total time[s] 0.053495 +Converged at iteration 31, L1 7.37336e-05, Linf 0.00896422, total time[s] 0.088083 +Converged at iteration 21, L1 8.99382e-05, Linf 0.00422871, total time[s] 0.057023 +Converged at iteration 23, L1 5.61556e-05, Linf 0.0052285, total time[s] 0.062125 +Converged at iteration 27, L1 7.55037e-05, Linf 0.00415984, total time[s] 0.070403 +Converged at iteration 24, L1 7.96784e-05, Linf 0.00567096, total time[s] 0.066563 +Converged at iteration 23, L1 6.69901e-05, Linf 0.00399147, total time[s] 0.062262 +Converged at iteration 25, L1 5.93241e-05, Linf 0.00398504, total time[s] 0.065523 +Converged at iteration 24, L1 7.29679e-05, Linf 0.00603677, total time[s] 0.063208 +Converged at iteration 27, L1 8.34545e-05, Linf 0.00619788, total time[s] 0.070464 +Converged at iteration 31, L1 9.46649e-05, Linf 0.00512163, total time[s] 0.079308 +Converged at iteration 27, L1 8.53829e-05, Linf 0.00315, total time[s] 0.073478 +Converged at iteration 31, L1 5.80314e-05, Linf 0.00710482, total time[s] 0.083563 +Converged at iteration 31, L1 6.12695e-05, Linf 0.00226074, total time[s] 0.080402 +Converged at iteration 31, L1 5.16982e-05, Linf 0.00187259, total time[s] 0.080352 +Converged at iteration 29, L1 9.65641e-05, Linf 0.00766725, total time[s] 0.076326 +Converged at iteration 30, L1 9.99318e-05, Linf 0.0141643, total time[s] 0.080635 +Converged at iteration 29, L1 6.33061e-05, Linf 0.0118768, total time[s] 0.075783 +Converged at iteration 25, L1 4.95222e-05, Linf 0.00216212, total time[s] 0.067399 +Converged at iteration 36, L1 9.06872e-05, Linf 0.00700455, total time[s] 0.093557 +Converged at iteration 34, L1 4.44765e-05, Linf 0.00426287, total time[s] 0.126334 +Converged at iteration 25, L1 6.45229e-05, Linf 0.00296153, total time[s] 0.09549 +Converged at iteration 25, L1 8.22718e-05, Linf 0.0134079, total time[s] 0.093499 +Converged at iteration 27, L1 9.09388e-05, Linf 0.0130733, total time[s] 0.077475 +Converged at iteration 26, L1 4.21667e-05, Linf 0.0140922, total time[s] 0.075799 +Converged at iteration 21, L1 4.40197e-05, Linf 0.0078162, total time[s] 0.081731 +Converged at iteration 19, L1 8.19465e-05, Linf 0.00521456, total time[s] 0.061969 +Converged at iteration 24, L1 5.79957e-05, Linf 0.00249591, total time[s] 0.06322 +Converged at iteration 23, L1 6.95137e-05, Linf 0.010645, total time[s] 0.071429 +Converged at iteration 20, L1 8.41418e-05, Linf 0.00498631, total time[s] 0.059288 +Converged at iteration 19, L1 5.79236e-05, Linf 0.00190187, total time[s] 0.066365 +Converged at iteration 31, L1 7.52213e-05, Linf 0.00933615, total time[s] 0.087528 +Converged at iteration 21, L1 8.89517e-05, Linf 0.00425864, total time[s] 0.057745 +Converged at iteration 23, L1 5.79414e-05, Linf 0.00545478, total time[s] 0.060115 +Converged at iteration 27, L1 7.45739e-05, Linf 0.0041252, total time[s] 0.069057 +Converged at iteration 24, L1 7.37788e-05, Linf 0.00563574, total time[s] 0.065486 +Converged at iteration 23, L1 6.8414e-05, Linf 0.00408273, total time[s] 0.060105 +Converged at iteration 25, L1 5.9537e-05, Linf 0.00408826, total time[s] 0.064051 +Converged at iteration 24, L1 8.41481e-05, Linf 0.00662959, total time[s] 0.063193 +Converged at iteration 27, L1 7.94356e-05, Linf 0.00617106, total time[s] 0.10576 +Converged at iteration 31, L1 9.29047e-05, Linf 0.00534122, total time[s] 0.084683 +Converged at iteration 27, L1 8.22453e-05, Linf 0.00303502, total time[s] 0.068546 +Converged at iteration 31, L1 6.0098e-05, Linf 0.00736264, total time[s] 0.083736 +Converged at iteration 31, L1 6.17319e-05, Linf 0.00230161, total time[s] 0.079775 +Converged at iteration 31, L1 5.65612e-05, Linf 0.00210176, total time[s] 0.079783 +Converged at iteration 29, L1 9.65744e-05, Linf 0.00724554, total time[s] 0.074862 +Converged at iteration 31, L1 3.59072e-05, Linf 0.00843364, total time[s] 0.079144 +Converged at iteration 29, L1 6.59592e-05, Linf 0.0124183, total time[s] 0.074801 +Converged at iteration 25, L1 4.90378e-05, Linf 0.00215021, total time[s] 0.065728 +Converged at iteration 36, L1 9.32712e-05, Linf 0.00724824, total time[s] 0.093275 +Converged at iteration 34, L1 4.66107e-05, Linf 0.00427497, total time[s] 0.09977 +Converged at iteration 25, L1 6.41238e-05, Linf 0.00299753, total time[s] 0.076841 +Converged at iteration 25, L1 6.87982e-05, Linf 0.0130667, total time[s] 0.065264 +Converged at iteration 27, L1 8.5887e-05, Linf 0.0131231, total time[s] 0.070037 +Converged at iteration 26, L1 4.38738e-05, Linf 0.0144677, total time[s] 0.067986 +Converged at iteration 21, L1 4.44355e-05, Linf 0.0079256, total time[s] 0.060893 +Converged at iteration 19, L1 8.23517e-05, Linf 0.00514492, total time[s] 0.050876 +Converged at iteration 24, L1 5.73667e-05, Linf 0.00250258, total time[s] 0.072062 +Converged at iteration 23, L1 6.78716e-05, Linf 0.0103236, total time[s] 0.067653 +Converged at iteration 20, L1 8.52017e-05, Linf 0.00494951, total time[s] 0.058128 +Converged at iteration 19, L1 6.09714e-05, Linf 0.00202257, total time[s] 0.054641 +Converged at iteration 31, L1 7.64889e-05, Linf 0.00963599, total time[s] 0.087415 +Converged at iteration 21, L1 8.89379e-05, Linf 0.00431277, total time[s] 0.064266 +Converged at iteration 23, L1 6.05312e-05, Linf 0.00559192, total time[s] 0.06401 +Converged at iteration 27, L1 7.56524e-05, Linf 0.00412573, total time[s] 0.072575 +Converged at iteration 24, L1 7.32099e-05, Linf 0.00556016, total time[s] 0.06455 +Converged at iteration 23, L1 7.036e-05, Linf 0.00431128, total time[s] 0.06204 +Converged at iteration 25, L1 5.99831e-05, Linf 0.00413732, total time[s] 0.066904 +Converged at iteration 24, L1 9.16143e-05, Linf 0.00704474, total time[s] 0.064312 +Converged at iteration 27, L1 7.70499e-05, Linf 0.00616818, total time[s] 0.072095 +Converged at iteration 31, L1 9.39986e-05, Linf 0.0052336, total time[s] 0.080594 +Converged at iteration 27, L1 7.91906e-05, Linf 0.00293095, total time[s] 0.072034 +Converged at iteration 31, L1 6.1518e-05, Linf 0.00753568, total time[s] 0.08083 +Converged at iteration 31, L1 6.30097e-05, Linf 0.00244625, total time[s] 0.080484 +Converged at iteration 31, L1 5.98665e-05, Linf 0.00227065, total time[s] 0.080387 +Converged at iteration 29, L1 9.63227e-05, Linf 0.00690925, total time[s] 0.075796 +Converged at iteration 31, L1 3.85432e-05, Linf 0.00844424, total time[s] 0.080539 +Converged at iteration 29, L1 6.7419e-05, Linf 0.012816, total time[s] 0.076627 +Converged at iteration 25, L1 4.86861e-05, Linf 0.00218245, total time[s] 0.066629 +Converged at iteration 36, L1 9.61673e-05, Linf 0.00753425, total time[s] 0.102424 +Converged at iteration 34, L1 5.03362e-05, Linf 0.00434514, total time[s] 0.1023 +Converged at iteration 25, L1 6.38846e-05, Linf 0.0030141, total time[s] 0.067144 +Converged at iteration 25, L1 5.94811e-05, Linf 0.0126457, total time[s] 0.06715 +Converged at iteration 27, L1 6.69417e-05, Linf 0.0130831, total time[s] 0.072828 +Converged at iteration 26, L1 4.62387e-05, Linf 0.0148885, total time[s] 0.072009 +Converged at iteration 21, L1 4.4995e-05, Linf 0.00812807, total time[s] 0.062723 +Converged at iteration 19, L1 7.9924e-05, Linf 0.00508908, total time[s] 0.052929 +Converged at iteration 24, L1 5.8179e-05, Linf 0.0025114, total time[s] 0.067734 +Converged at iteration 23, L1 6.7019e-05, Linf 0.00983962, total time[s] 0.06352 +Converged at iteration 20, L1 8.72164e-05, Linf 0.00491834, total time[s] 0.063809 +Converged at iteration 19, L1 6.47073e-05, Linf 0.00216974, total time[s] 0.067368 +Converged at iteration 31, L1 7.7108e-05, Linf 0.00999173, total time[s] 0.083394 +Converged at iteration 21, L1 9.06976e-05, Linf 0.00442153, total time[s] 0.056507 +Converged at iteration 23, L1 6.34441e-05, Linf 0.0057665, total time[s] 0.064322 +Converged at iteration 27, L1 7.63614e-05, Linf 0.00416872, total time[s] 0.069343 +Converged at iteration 24, L1 7.22215e-05, Linf 0.00545872, total time[s] 0.061422 +Converged at iteration 23, L1 7.29146e-05, Linf 0.00439812, total time[s] 0.061802 +Converged at iteration 25, L1 6.19207e-05, Linf 0.00419134, total time[s] 0.066513 +Converged at iteration 25, L1 5.72468e-05, Linf 0.00533623, total time[s] 0.066539 +Converged at iteration 27, L1 7.53611e-05, Linf 0.00619392, total time[s] 0.071246 +Converged at iteration 31, L1 9.676e-05, Linf 0.00529112, total time[s] 0.080896 +Converged at iteration 27, L1 7.60729e-05, Linf 0.00281054, total time[s] 0.071181 +Converged at iteration 31, L1 6.27684e-05, Linf 0.00779818, total time[s] 0.081568 +Converged at iteration 31, L1 6.30859e-05, Linf 0.00228509, total time[s] 0.085724 +Converged at iteration 31, L1 6.61043e-05, Linf 0.00252234, total time[s] 0.08015 +Converged at iteration 29, L1 9.62372e-05, Linf 0.00654732, total time[s] 0.076635 +Converged at iteration 31, L1 4.23171e-05, Linf 0.00912006, total time[s] 0.079968 +Converged at iteration 29, L1 6.87123e-05, Linf 0.0132639, total time[s] 0.076104 +Converged at iteration 25, L1 4.87993e-05, Linf 0.00224794, total time[s] 0.067224 +Converged at iteration 36, L1 9.89876e-05, Linf 0.00776444, total time[s] 0.096558 +Converged at iteration 34, L1 5.32581e-05, Linf 0.00479269, total time[s] 0.099076 +Converged at iteration 25, L1 6.28381e-05, Linf 0.0030759, total time[s] 0.065262 +Converged at iteration 25, L1 5.49573e-05, Linf 0.0123052, total time[s] 0.064286 +Converged at iteration 27, L1 6.05203e-05, Linf 0.0128959, total time[s] 0.068281 +Converged at iteration 26, L1 4.74377e-05, Linf 0.0151758, total time[s] 0.065861 +Converged at iteration 21, L1 4.52283e-05, Linf 0.00827904, total time[s] 0.070018 +Converged at iteration 19, L1 7.6747e-05, Linf 0.00508379, total time[s] 0.053773 +Converged at iteration 24, L1 5.74228e-05, Linf 0.00238914, total time[s] 0.086213 +Converged at iteration 23, L1 6.74755e-05, Linf 0.00948811, total time[s] 0.073255 +Converged at iteration 20, L1 8.86497e-05, Linf 0.00485533, total time[s] 0.054285 +Converged at iteration 19, L1 6.77298e-05, Linf 0.00229251, total time[s] 0.053331 +Converged at iteration 31, L1 7.62886e-05, Linf 0.0102483, total time[s] 0.087102 +Converged at iteration 21, L1 9.15954e-05, Linf 0.00451961, total time[s] 0.060733 +Converged at iteration 23, L1 6.76264e-05, Linf 0.00589483, total time[s] 0.063607 +Converged at iteration 27, L1 7.6644e-05, Linf 0.0041732, total time[s] 0.072736 +Converged at iteration 24, L1 7.10159e-05, Linf 0.00535291, total time[s] 0.064316 +Converged at iteration 23, L1 7.45593e-05, Linf 0.00442236, total time[s] 0.068129 +Converged at iteration 25, L1 6.29537e-05, Linf 0.00424325, total time[s] 0.084364 +Converged at iteration 25, L1 6.00177e-05, Linf 0.00553448, total time[s] 0.075468 +Converged at iteration 27, L1 7.30655e-05, Linf 0.00624232, total time[s] 0.106326 +Converged at iteration 31, L1 9.86741e-05, Linf 0.00525954, total time[s] 0.089067 +Converged at iteration 27, L1 7.41813e-05, Linf 0.00271018, total time[s] 0.07249 +Converged at iteration 31, L1 6.4581e-05, Linf 0.00794457, total time[s] 0.080849 +Converged at iteration 31, L1 6.23403e-05, Linf 0.00231925, total time[s] 0.080226 +Converged at iteration 31, L1 7.1231e-05, Linf 0.00269982, total time[s] 0.079122 +Converged at iteration 29, L1 9.62834e-05, Linf 0.00628912, total time[s] 0.076274 +Converged at iteration 31, L1 4.54551e-05, Linf 0.0096321, total time[s] 0.080064 +Converged at iteration 29, L1 6.90469e-05, Linf 0.0135858, total time[s] 0.07473 +Converged at iteration 25, L1 4.96537e-05, Linf 0.00230304, total time[s] 0.067196 +Converged at iteration 37, L1 5.3848e-05, Linf 0.00626806, total time[s] 0.09548 +Converged at iteration 34, L1 5.6957e-05, Linf 0.00448598, total time[s] 0.089267 +Converged at iteration 25, L1 6.18976e-05, Linf 0.00310095, total time[s] 0.068936 +Converged at iteration 25, L1 4.85843e-05, Linf 0.0118597, total time[s] 0.066028 +Converged at iteration 27, L1 4.35099e-05, Linf 0.0123901, total time[s] 0.069835 +Converged at iteration 26, L1 4.76979e-05, Linf 0.0154715, total time[s] 0.071412 +Converged at iteration 21, L1 4.66523e-05, Linf 0.00845871, total time[s] 0.064404 +Converged at iteration 19, L1 7.39229e-05, Linf 0.00500321, total time[s] 0.053045 +Converged at iteration 24, L1 5.78125e-05, Linf 0.00252532, total time[s] 0.067537 +Converged at iteration 23, L1 6.90476e-05, Linf 0.0088859, total time[s] 0.070289 +Converged at iteration 20, L1 9.15599e-05, Linf 0.00477485, total time[s] 0.06108 +Converged at iteration 19, L1 7.2511e-05, Linf 0.00246078, total time[s] 0.060474 +Converged at iteration 31, L1 7.57551e-05, Linf 0.0106384, total time[s] 0.082259 +Converged at iteration 21, L1 9.20403e-05, Linf 0.00466622, total time[s] 0.059764 +Converged at iteration 23, L1 6.9235e-05, Linf 0.00607808, total time[s] 0.061516 +Converged at iteration 27, L1 7.49708e-05, Linf 0.00419306, total time[s] 0.071877 +Converged at iteration 24, L1 6.91605e-05, Linf 0.00517936, total time[s] 0.063237 +Converged at iteration 23, L1 7.7007e-05, Linf 0.00451762, total time[s] 0.073736 +Converged at iteration 25, L1 6.5127e-05, Linf 0.00433378, total time[s] 0.086533 +Converged at iteration 25, L1 6.28539e-05, Linf 0.00578246, total time[s] 0.070975 +Converged at iteration 27, L1 7.10461e-05, Linf 0.00633941, total time[s] 0.069969 +Converged at iteration 32, L1 5.24531e-05, Linf 0.0030694, total time[s] 0.085569 +Converged at iteration 27, L1 6.96934e-05, Linf 0.00258502, total time[s] 0.080082 +Converged at iteration 31, L1 6.55095e-05, Linf 0.00812148, total time[s] 0.086647 +Converged at iteration 31, L1 6.19505e-05, Linf 0.0023438, total time[s] 0.084787 +Converged at iteration 31, L1 7.70519e-05, Linf 0.00296879, total time[s] 0.08103 +Converged at iteration 29, L1 9.78604e-05, Linf 0.00602355, total time[s] 0.080442 +Converged at iteration 31, L1 4.95538e-05, Linf 0.0103816, total time[s] 0.087005 +Converged at iteration 29, L1 7.04118e-05, Linf 0.0140028, total time[s] 0.079181 +Converged at iteration 25, L1 4.92962e-05, Linf 0.00239961, total time[s] 0.070937 +Converged at iteration 37, L1 5.5473e-05, Linf 0.00645623, total time[s] 0.106412 +Converged at iteration 34, L1 5.99168e-05, Linf 0.00477586, total time[s] 0.100185 +Converged at iteration 25, L1 6.06402e-05, Linf 0.00312607, total time[s] 0.068298 +Converged at iteration 25, L1 4.63699e-05, Linf 0.0115267, total time[s] 0.071077 +Converged at iteration 27, L1 4.4339e-05, Linf 0.0118568, total time[s] 0.074129 +Converged at iteration 26, L1 5.44141e-05, Linf 0.015577, total time[s] 0.068703 +Converged at iteration 21, L1 4.7966e-05, Linf 0.008605, total time[s] 0.059209 +Converged at iteration 19, L1 7.29961e-05, Linf 0.00495565, total time[s] 0.059008 +Converged at iteration 24, L1 5.69096e-05, Linf 0.00243919, total time[s] 0.083087 +Converged at iteration 23, L1 6.86109e-05, Linf 0.00811865, total time[s] 0.072445 +Converged at iteration 20, L1 9.27305e-05, Linf 0.00468089, total time[s] 0.069218 +Converged at iteration 19, L1 7.54813e-05, Linf 0.00258777, total time[s] 0.054772 +Converged at iteration 31, L1 7.58721e-05, Linf 0.0108902, total time[s] 0.103123 +Converged at iteration 21, L1 9.30939e-05, Linf 0.00477344, total time[s] 0.086814 +Converged at iteration 23, L1 6.8633e-05, Linf 0.00623797, total time[s] 0.488252 +Converged at iteration 27, L1 7.58759e-05, Linf 0.00709982, total time[s] 0.133027 +Converged at iteration 24, L1 6.80465e-05, Linf 0.00506282, total time[s] 0.079192 +Converged at iteration 23, L1 7.83698e-05, Linf 0.00447846, total time[s] 0.091346 +Converged at iteration 25, L1 6.75099e-05, Linf 0.00438927, total time[s] 0.074169 +Converged at iteration 25, L1 6.44498e-05, Linf 0.00591512, total time[s] 0.092354 +Converged at iteration 27, L1 7.17359e-05, Linf 0.00640334, total time[s] 0.093003 +Converged at iteration 32, L1 5.31732e-05, Linf 0.00303328, total time[s] 0.108499 +Converged at iteration 27, L1 6.69765e-05, Linf 0.00248529, total time[s] 0.086213 +Converged at iteration 31, L1 6.94361e-05, Linf 0.008208, total time[s] 0.080737 +Converged at iteration 31, L1 6.22507e-05, Linf 0.00232304, total time[s] 0.079495 +Converged at iteration 31, L1 8.1465e-05, Linf 0.00314657, total time[s] 0.080161 +Converged at iteration 29, L1 9.89212e-05, Linf 0.00587369, total time[s] 0.08209 +Converged at iteration 31, L1 5.41153e-05, Linf 0.0114382, total time[s] 0.081854 +Converged at iteration 29, L1 7.14923e-05, Linf 0.0142642, total time[s] 0.124479 +Converged at iteration 25, L1 5.02325e-05, Linf 0.00245632, total time[s] 0.065664 +Converged at iteration 37, L1 5.72141e-05, Linf 0.00671367, total time[s] 0.099587 +Converged at iteration 34, L1 6.33825e-05, Linf 0.00534223, total time[s] 0.105684 +Converged at iteration 25, L1 5.82759e-05, Linf 0.00319212, total time[s] 0.092973 +Converged at iteration 25, L1 4.30117e-05, Linf 0.0110508, total time[s] 0.067759 +Converged at iteration 26, L1 8.67923e-05, Linf 0.0173715, total time[s] 0.072212 +Converged at iteration 26, L1 4.63436e-05, Linf 0.0155727, total time[s] 0.097671 +Converged at iteration 21, L1 4.82391e-05, Linf 0.0087962, total time[s] 0.066134 +Converged at iteration 19, L1 7.11141e-05, Linf 0.00487154, total time[s] 0.085649 +Converged at iteration 24, L1 5.70461e-05, Linf 0.00247809, total time[s] 0.07857 +Converged at iteration 23, L1 7.18412e-05, Linf 0.00749398, total time[s] 0.070318 +Converged at iteration 20, L1 9.61007e-05, Linf 0.00456749, total time[s] 0.061385 +Converged at iteration 19, L1 8.04866e-05, Linf 0.00277071, total time[s] 0.058179 +Converged at iteration 31, L1 7.67676e-05, Linf 0.0113684, total time[s] 0.097338 +Converged at iteration 21, L1 9.1896e-05, Linf 0.00493087, total time[s] 0.055697 +Converged at iteration 23, L1 6.77787e-05, Linf 0.00664172, total time[s] 0.060233 +Converged at iteration 27, L1 7.06876e-05, Linf 0.00407037, total time[s] 0.073074 +Converged at iteration 24, L1 6.65003e-05, Linf 0.00489607, total time[s] 0.067697 +Converged at iteration 23, L1 8.01339e-05, Linf 0.00453562, total time[s] 0.062636 +Converged at iteration 25, L1 6.95619e-05, Linf 0.00449042, total time[s] 0.069919 +Converged at iteration 25, L1 6.70148e-05, Linf 0.00641691, total time[s] 0.065725 +Converged at iteration 27, L1 7.16257e-05, Linf 0.0065259, total time[s] 0.069824 +Converged at iteration 32, L1 5.49035e-05, Linf 0.00301145, total time[s] 0.081315 +Converged at iteration 27, L1 6.39924e-05, Linf 0.00235456, total time[s] 0.069421 +Converged at iteration 31, L1 6.79561e-05, Linf 0.00843865, total time[s] 0.08001 +Converged at iteration 31, L1 6.09141e-05, Linf 0.00236627, total time[s] 0.079461 +Converged at iteration 31, L1 8.88807e-05, Linf 0.0034459, total time[s] 0.079624 +Converged at iteration 30, L1 6.69272e-05, Linf 0.00330089, total time[s] 0.078382 +Converged at iteration 31, L1 5.86286e-05, Linf 0.0120154, total time[s] 0.078962 +Converged at iteration 29, L1 7.19106e-05, Linf 0.0146585, total time[s] 0.081472 +Converged at iteration 25, L1 5.05522e-05, Linf 0.00249077, total time[s] 0.065979 +Converged at iteration 37, L1 5.86426e-05, Linf 0.00689257, total time[s] 0.097797 +Converged at iteration 34, L1 6.90957e-05, Linf 0.00517362, total time[s] 0.096494 +Converged at iteration 25, L1 5.88292e-05, Linf 0.00323517, total time[s] 0.072879 +Converged at iteration 25, L1 4.23839e-05, Linf 0.0106955, total time[s] 0.0665 +Converged at iteration 26, L1 8.12202e-05, Linf 0.017074, total time[s] 0.068825 +Converged at iteration 26, L1 4.56575e-05, Linf 0.0157203, total time[s] 0.074563 +Converged at iteration 21, L1 4.91127e-05, Linf 0.00892163, total time[s] 0.059081 +Converged at iteration 19, L1 7.00032e-05, Linf 0.0048457, total time[s] 0.054463 +Converged at iteration 24, L1 5.70144e-05, Linf 0.00248891, total time[s] 0.072781 +Converged at iteration 23, L1 7.45147e-05, Linf 0.00695585, total time[s] 0.067742 +Converged at iteration 20, L1 9.70911e-05, Linf 0.00444503, total time[s] 0.067479 +Converged at iteration 19, L1 8.32367e-05, Linf 0.00289489, total time[s] 0.053764 +Converged at iteration 31, L1 7.67983e-05, Linf 0.0114705, total time[s] 0.093486 +Converged at iteration 21, L1 9.17983e-05, Linf 0.004942, total time[s] 0.061906 +Converged at iteration 23, L1 6.7255e-05, Linf 0.00611944, total time[s] 0.065977 +Converged at iteration 27, L1 6.95124e-05, Linf 0.00399246, total time[s] 0.071901 +Converged at iteration 24, L1 6.54904e-05, Linf 0.0047853, total time[s] 0.064641 +Converged at iteration 23, L1 8.1159e-05, Linf 0.00458234, total time[s] 0.063836 +Converged at iteration 25, L1 7.07715e-05, Linf 0.00455219, total time[s] 0.066922 +Converged at iteration 25, L1 6.89853e-05, Linf 0.0067844, total time[s] 0.066777 +Converged at iteration 27, L1 7.12151e-05, Linf 0.00662899, total time[s] 0.071746 +Converged at iteration 32, L1 5.5136e-05, Linf 0.00301294, total time[s] 0.085393 +Converged at iteration 27, L1 6.18505e-05, Linf 0.00226032, total time[s] 0.07276 +Converged at iteration 31, L1 6.83252e-05, Linf 0.00851722, total time[s] 0.081363 +Converged at iteration 31, L1 6.08545e-05, Linf 0.00236186, total time[s] 0.083662 +Converged at iteration 31, L1 9.26279e-05, Linf 0.0036053, total time[s] 0.083718 +Converged at iteration 30, L1 6.80675e-05, Linf 0.00337377, total time[s] 0.078584 +Converged at iteration 31, L1 5.80368e-05, Linf 0.0124192, total time[s] 0.0823 +Converged at iteration 29, L1 7.21924e-05, Linf 0.0148821, total time[s] 0.082559 +Converged at iteration 25, L1 5.18873e-05, Linf 0.00249232, total time[s] 0.080675 +Converged at iteration 37, L1 6.06446e-05, Linf 0.00717173, total time[s] 0.109254 +Converged at iteration 34, L1 7.05155e-05, Linf 0.00524402, total time[s] 0.101112 +Converged at iteration 25, L1 5.7969e-05, Linf 0.00325647, total time[s] 0.067826 +Converged at iteration 25, L1 4.15128e-05, Linf 0.0101621, total time[s] 0.066856 +Converged at iteration 26, L1 6.61297e-05, Linf 0.0164293, total time[s] 0.069143 +Converged at iteration 26, L1 4.45867e-05, Linf 0.0156698, total time[s] 0.074078 +Converged at iteration 21, L1 5.02747e-05, Linf 0.00910514, total time[s] 0.064721 +Converged at iteration 19, L1 6.85185e-05, Linf 0.00475222, total time[s] 0.052566 +Converged at iteration 24, L1 5.79507e-05, Linf 0.00248135, total time[s] 0.064154 +Converged at iteration 23, L1 7.88305e-05, Linf 0.00640277, total time[s] 0.062003 +Converged at iteration 21, L1 4.60197e-05, Linf 0.0024247, total time[s] 0.072774 +Converged at iteration 19, L1 8.86074e-05, Linf 0.00310045, total time[s] 0.055325 +Converged at iteration 31, L1 7.71675e-05, Linf 0.0118443, total time[s] 0.104427 +Converged at iteration 21, L1 9.15147e-05, Linf 0.00516656, total time[s] 0.089048 +Converged at iteration 23, L1 6.65565e-05, Linf 0.00657946, total time[s] 0.078327 +Converged at iteration 27, L1 6.88977e-05, Linf 0.00385578, total time[s] 0.079023 +Converged at iteration 24, L1 6.61737e-05, Linf 0.00463567, total time[s] 0.067127 +Converged at iteration 23, L1 8.35251e-05, Linf 0.00467387, total time[s] 0.074904 +Converged at iteration 25, L1 7.22013e-05, Linf 0.00467896, total time[s] 0.097397 +Converged at iteration 25, L1 7.28262e-05, Linf 0.00624958, total time[s] 0.072752 +Converged at iteration 27, L1 7.0852e-05, Linf 0.00662321, total time[s] 0.080493 +Converged at iteration 32, L1 5.6474e-05, Linf 0.00300481, total time[s] 0.08402 +Converged at iteration 26, L1 9.84802e-05, Linf 0.00304297, total time[s] 0.071766 +Converged at iteration 31, L1 6.96024e-05, Linf 0.00871623, total time[s] 0.09288 +Converged at iteration 31, L1 6.02546e-05, Linf 0.00237441, total time[s] 0.089047 +Converged at iteration 31, L1 9.97192e-05, Linf 0.00388765, total time[s] 0.083388 +Converged at iteration 30, L1 7.10678e-05, Linf 0.00321453, total time[s] 0.079766 +Converged at iteration 31, L1 6.19515e-05, Linf 0.0130921, total time[s] 0.081188 +Converged at iteration 29, L1 7.37376e-05, Linf 0.0153013, total time[s] 0.076936 +Converged at iteration 25, L1 5.21447e-05, Linf 0.00250301, total time[s] 0.067129 +Converged at iteration 37, L1 6.21006e-05, Linf 0.0073357, total time[s] 0.096599 +Converged at iteration 34, L1 7.30998e-05, Linf 0.00574417, total time[s] 0.09725 +Converged at iteration 25, L1 5.77087e-05, Linf 0.00328552, total time[s] 0.079278 +Converged at iteration 25, L1 4.0668e-05, Linf 0.00983036, total time[s] 0.067556 +Converged at iteration 26, L1 6.01819e-05, Linf 0.0159689, total time[s] 0.073105 +Converged at iteration 26, L1 4.31929e-05, Linf 0.0155627, total time[s] 0.068557 +Converged at iteration 21, L1 5.09477e-05, Linf 0.00920431, total time[s] 0.059373 +Converged at iteration 19, L1 6.75424e-05, Linf 0.00474714, total time[s] 0.05877 +Converged at iteration 24, L1 5.64927e-05, Linf 0.00246415, total time[s] 0.074167 +Converged at iteration 23, L1 7.98315e-05, Linf 0.00604945, total time[s] 0.093827 +Converged at iteration 21, L1 4.68779e-05, Linf 0.0024941, total time[s] 0.244278 +Converged at iteration 19, L1 9.15004e-05, Linf 0.00321822, total time[s] 0.074785 +Converged at iteration 31, L1 7.72712e-05, Linf 0.0120223, total time[s] 0.115515 +Converged at iteration 21, L1 9.10706e-05, Linf 0.00523983, total time[s] 0.083966 +Converged at iteration 23, L1 6.93934e-05, Linf 0.00662054, total time[s] 0.069581 +Converged at iteration 27, L1 6.78213e-05, Linf 0.00380852, total time[s] 0.07952 +Converged at iteration 24, L1 6.56072e-05, Linf 0.00458118, total time[s] 0.066096 +Converged at iteration 23, L1 8.36934e-05, Linf 0.0047075, total time[s] 0.077469 +Converged at iteration 25, L1 7.38024e-05, Linf 0.00474089, total time[s] 0.070433 +Converged at iteration 25, L1 7.55074e-05, Linf 0.00513855, total time[s] 0.074406 +Converged at iteration 27, L1 6.99965e-05, Linf 0.00661191, total time[s] 0.076036 +Converged at iteration 32, L1 5.68937e-05, Linf 0.00300177, total time[s] 0.087899 +Converged at iteration 26, L1 9.59651e-05, Linf 0.00293676, total time[s] 0.078639 +Converged at iteration 31, L1 6.96567e-05, Linf 0.00875965, total time[s] 0.086034 +Converged at iteration 31, L1 5.96148e-05, Linf 0.00237094, total time[s] 0.084684 +Converged at iteration 32, L1 4.62689e-05, Linf 0.00204628, total time[s] 0.086489 +Converged at iteration 30, L1 7.2881e-05, Linf 0.00322581, total time[s] 0.078641 +Converged at iteration 31, L1 6.4536e-05, Linf 0.0134778, total time[s] 0.079421 +Converged at iteration 29, L1 7.4427e-05, Linf 0.0164107, total time[s] 0.078243 +Converged at iteration 25, L1 5.23995e-05, Linf 0.0025484, total time[s] 0.065531 +Converged at iteration 37, L1 6.49067e-05, Linf 0.00765083, total time[s] 0.094315 +Converged at iteration 34, L1 7.93148e-05, Linf 0.00621447, total time[s] 0.096934 +Converged at iteration 25, L1 5.90939e-05, Linf 0.00337315, total time[s] 0.066011 +Converged at iteration 25, L1 4.21153e-05, Linf 0.00925859, total time[s] 0.063507 +Converged at iteration 26, L1 5.26491e-05, Linf 0.0148468, total time[s] 0.065702 +Converged at iteration 26, L1 4.22621e-05, Linf 0.0154628, total time[s] 0.06743 +Converged at iteration 21, L1 5.18864e-05, Linf 0.00946645, total time[s] 0.056912 +Converged at iteration 19, L1 6.58823e-05, Linf 0.00462462, total time[s] 0.053739 +Converged at iteration 24, L1 5.60606e-05, Linf 0.00236585, total time[s] 0.068316 +Converged at iteration 23, L1 8.33369e-05, Linf 0.00525475, total time[s] 0.071603 +Converged at iteration 21, L1 4.99349e-05, Linf 0.00263485, total time[s] 0.078234 +Converged at iteration 19, L1 9.82129e-05, Linf 0.00345292, total time[s] 0.059018 +Converged at iteration 31, L1 7.88393e-05, Linf 0.0124166, total time[s] 0.092968 +Converged at iteration 21, L1 9.41205e-05, Linf 0.00538853, total time[s] 0.06525 +Converged at iteration 23, L1 7.53746e-05, Linf 0.00676225, total time[s] 0.068427 +Converged at iteration 27, L1 6.65512e-05, Linf 0.00370837, total time[s] 0.09091 +Converged at iteration 24, L1 6.57535e-05, Linf 0.00455045, total time[s] 0.111112 +Converged at iteration 23, L1 8.61697e-05, Linf 0.00479063, total time[s] 0.075525 +Converged at iteration 25, L1 8.02318e-05, Linf 0.00490083, total time[s] 0.067777 +Converged at iteration 25, L1 8.13198e-05, Linf 0.00529061, total time[s] 0.067085 +Converged at iteration 27, L1 7.04487e-05, Linf 0.00670159, total time[s] 0.071233 +Converged at iteration 32, L1 5.92977e-05, Linf 0.00304618, total time[s] 0.094705 +Converged at iteration 26, L1 9.14965e-05, Linf 0.00272359, total time[s] 0.078244 +Converged at iteration 31, L1 7.08984e-05, Linf 0.00896023, total time[s] 0.08171 +Converged at iteration 31, L1 5.87554e-05, Linf 0.00238757, total time[s] 0.078072 +Converged at iteration 32, L1 4.85386e-05, Linf 0.00219345, total time[s] 0.088199 +Converged at iteration 30, L1 7.35631e-05, Linf 0.00336152, total time[s] 0.091099 +Converged at iteration 31, L1 6.96225e-05, Linf 0.0145566, total time[s] 0.085816 +Converged at iteration 29, L1 7.62338e-05, Linf 0.016088, total time[s] 0.085464 +Converged at iteration 25, L1 5.27766e-05, Linf 0.00242791, total time[s] 0.072531 +Converged at iteration 37, L1 6.64826e-05, Linf 0.00780365, total time[s] 0.141666 +Converged at iteration 34, L1 8.14453e-05, Linf 0.00625533, total time[s] 0.122006 +Converged at iteration 25, L1 6.10638e-05, Linf 0.00338281, total time[s] 0.087494 +Converged at iteration 25, L1 4.20821e-05, Linf 0.00903111, total time[s] 0.066785 +Converged at iteration 26, L1 4.71842e-05, Linf 0.0144284, total time[s] 0.070589 +Converged at iteration 26, L1 4.19391e-05, Linf 0.0155029, total time[s] 0.078256 +Converged at iteration 21, L1 5.18834e-05, Linf 0.00946856, total time[s] 0.082197 +Converged at iteration 19, L1 6.49649e-05, Linf 0.00462527, total time[s] 0.05673 +Converged at iteration 24, L1 5.50299e-05, Linf 0.00232487, total time[s] 0.087283 +Converged at iteration 23, L1 8.50833e-05, Linf 0.00501482, total time[s] 0.118048 +Converged at iteration 21, L1 8.26957e-05, Linf 0.00297349, total time[s] 0.211754 +Converged at iteration 20, L1 4.57982e-05, Linf 0.00216415, total time[s] 0.138494 +Converged at iteration 31, L1 7.90149e-05, Linf 0.0125631, total time[s] 0.10939 +Converged at iteration 21, L1 9.2989e-05, Linf 0.00555564, total time[s] 0.063962 +Converged at iteration 23, L1 7.69419e-05, Linf 0.0067936, total time[s] 0.06355 +Converged at iteration 27, L1 6.58368e-05, Linf 0.00367767, total time[s] 0.085912 +Converged at iteration 24, L1 6.54692e-05, Linf 0.00453942, total time[s] 0.088966 +Converged at iteration 23, L1 8.52423e-05, Linf 0.00482129, total time[s] 0.084773 +Converged at iteration 25, L1 8.23067e-05, Linf 0.00496621, total time[s] 0.091434 +Converged at iteration 25, L1 8.40722e-05, Linf 0.00538015, total time[s] 0.076082 +Converged at iteration 27, L1 7.06304e-05, Linf 0.00703896, total time[s] 0.092467 +Converged at iteration 32, L1 5.90001e-05, Linf 0.00306565, total time[s] 0.096417 +Converged at iteration 26, L1 8.95169e-05, Linf 0.00264067, total time[s] 0.076083 +Converged at iteration 31, L1 7.08604e-05, Linf 0.00898659, total time[s] 0.085794 +Converged at iteration 31, L1 5.83399e-05, Linf 0.00239831, total time[s] 0.095149 +Converged at iteration 32, L1 4.92759e-05, Linf 0.0022434, total time[s] 0.100938 +Converged at iteration 30, L1 7.20844e-05, Linf 0.00339846, total time[s] 0.087639 +Converged at iteration 31, L1 7.20575e-05, Linf 0.0146225, total time[s] 0.082722 +Converged at iteration 29, L1 7.80941e-05, Linf 0.0164225, total time[s] 0.089634 +Converged at iteration 25, L1 5.30965e-05, Linf 0.00243307, total time[s] 0.074747 +Converged at iteration 37, L1 6.91319e-05, Linf 0.00817982, total time[s] 0.108358 +Converged at iteration 34, L1 9.36415e-05, Linf 0.00638937, total time[s] 0.124331 +Converged at iteration 25, L1 6.28197e-05, Linf 0.00343379, total time[s] 0.083938 +Converged at iteration 25, L1 4.50629e-05, Linf 0.00857044, total time[s] 0.069351 +Converged at iteration 26, L1 3.92637e-05, Linf 0.0130695, total time[s] 0.072676 +Converged at iteration 26, L1 4.06182e-05, Linf 0.0148554, total time[s] 0.08845 +Converged at iteration 21, L1 5.16717e-05, Linf 0.00964499, total time[s] 0.075915 +Converged at iteration 19, L1 6.14255e-05, Linf 0.00448529, total time[s] 0.054673 +Converged at iteration 24, L1 5.40121e-05, Linf 0.00228535, total time[s] 0.066751 +Converged at iteration 23, L1 8.96034e-05, Linf 0.00428646, total time[s] 0.062727 +Converged at iteration 21, L1 5.48031e-05, Linf 0.00287008, total time[s] 0.057744 +Converged at iteration 20, L1 4.95803e-05, Linf 0.00229345, total time[s] 0.053918 +Converged at iteration 31, L1 8.13479e-05, Linf 0.0130259, total time[s] 0.084934 +Converged at iteration 21, L1 9.43225e-05, Linf 0.0056219, total time[s] 0.05806 +Converged at iteration 23, L1 8.31437e-05, Linf 0.00700102, total time[s] 0.060767 +Converged at iteration 27, L1 6.37818e-05, Linf 0.00355702, total time[s] 0.069315 +Converged at iteration 24, L1 6.72153e-05, Linf 0.00457448, total time[s] 0.064896 +Converged at iteration 23, L1 8.93402e-05, Linf 0.00559531, total time[s] 0.061984 +Converged at iteration 25, L1 8.77454e-05, Linf 0.00517867, total time[s] 0.073484 +Converged at iteration 25, L1 9.42456e-05, Linf 0.0056904, total time[s] 0.064861 +Converged at iteration 27, L1 7.25954e-05, Linf 0.00713139, total time[s] 0.070495 +Converged at iteration 32, L1 6.06474e-05, Linf 0.00309935, total time[s] 0.081599 +Converged at iteration 26, L1 8.51421e-05, Linf 0.00240115, total time[s] 0.067108 +Converged at iteration 31, L1 7.21641e-05, Linf 0.00913661, total time[s] 0.078776 +Converged at iteration 31, L1 5.83839e-05, Linf 0.00241653, total time[s] 0.079252 +Converged at iteration 32, L1 5.28042e-05, Linf 0.00236055, total time[s] 0.081232 +Converged at iteration 30, L1 6.6658e-05, Linf 0.00361327, total time[s] 0.081246 +Converged at iteration 31, L1 7.92501e-05, Linf 0.0155441, total time[s] 0.079225 +Converged at iteration 29, L1 7.95868e-05, Linf 0.0167007, total time[s] 0.0758 +Converged at iteration 25, L1 5.46672e-05, Linf 0.00239528, total time[s] 0.06737 +Converged at iteration 37, L1 7.05109e-05, Linf 0.00831934, total time[s] 0.094125 +Converged at iteration 34, L1 9.04083e-05, Linf 0.00644393, total time[s] 0.091795 +Converged at iteration 25, L1 6.23517e-05, Linf 0.00344407, total time[s] 0.067474 +Converged at iteration 25, L1 4.54997e-05, Linf 0.00837424, total time[s] 0.065095 +Converged at iteration 26, L1 3.95686e-05, Linf 0.0125755, total time[s] 0.06763 +Converged at iteration 26, L1 4.02576e-05, Linf 0.0147114, total time[s] 0.068481 +Converged at iteration 21, L1 5.18606e-05, Linf 0.00972452, total time[s] 0.057761 +Converged at iteration 19, L1 6.02788e-05, Linf 0.00449108, total time[s] 0.052436 +Converged at iteration 24, L1 5.34935e-05, Linf 0.00225451, total time[s] 0.068564 +Converged at iteration 23, L1 9.02223e-05, Linf 0.00419002, total time[s] 0.066964 +Converged at iteration 21, L1 5.61576e-05, Linf 0.00292264, total time[s] 0.0632 +Converged at iteration 20, L1 5.08812e-05, Linf 0.0023547, total time[s] 0.084333 +Converged at iteration 31, L1 8.15114e-05, Linf 0.0131101, total time[s] 0.091326 +Converged at iteration 21, L1 9.47888e-05, Linf 0.00567598, total time[s] 0.055969 +Converged at iteration 23, L1 8.17934e-05, Linf 0.00708474, total time[s] 0.068885 +Converged at iteration 27, L1 6.32784e-05, Linf 0.00353843, total time[s] 0.07363 +Converged at iteration 24, L1 6.73812e-05, Linf 0.00462692, total time[s] 0.063518 +Converged at iteration 23, L1 8.73106e-05, Linf 0.00490924, total time[s] 0.059786 +Converged at iteration 25, L1 8.89548e-05, Linf 0.00526707, total time[s] 0.065973 +Converged at iteration 25, L1 9.76903e-05, Linf 0.00573715, total time[s] 0.066748 +Converged at iteration 27, L1 7.14078e-05, Linf 0.007097, total time[s] 0.070282 +Converged at iteration 32, L1 6.07982e-05, Linf 0.00311622, total time[s] 0.083298 +Converged at iteration 26, L1 8.36803e-05, Linf 0.00232659, total time[s] 0.06753 +Converged at iteration 31, L1 7.21462e-05, Linf 0.00920918, total time[s] 0.078013 +Converged at iteration 30, L1 9.9912e-05, Linf 0.00348838, total time[s] 0.076388 +Converged at iteration 32, L1 5.26299e-05, Linf 0.00239731, total time[s] 0.080434 +Converged at iteration 30, L1 6.49563e-05, Linf 0.00361065, total time[s] 0.075999 +Converged at iteration 31, L1 8.16437e-05, Linf 0.0158721, total time[s] 0.077763 +Converged at iteration 29, L1 8.07094e-05, Linf 0.0168512, total time[s] 0.07364 +Converged at iteration 25, L1 5.55474e-05, Linf 0.00236801, total time[s] 0.06451 +Converged at iteration 37, L1 7.26079e-05, Linf 0.00866874, total time[s] 0.097766 +Converged at iteration 34, L1 9.76316e-05, Linf 0.00722876, total time[s] 0.094481 +Converged at iteration 25, L1 6.18728e-05, Linf 0.0034833, total time[s] 0.065883 +Converged at iteration 25, L1 4.90741e-05, Linf 0.00809413, total time[s] 0.073778 +Converged at iteration 25, L1 9.85991e-05, Linf 0.0210882, total time[s] 0.064466 +Converged at iteration 26, L1 3.98403e-05, Linf 0.0143681, total time[s] 0.074764 +Converged at iteration 21, L1 5.25847e-05, Linf 0.0100523, total time[s] 0.064158 +Converged at iteration 19, L1 5.78557e-05, Linf 0.00434245, total time[s] 0.052707 +Converged at iteration 24, L1 5.33479e-05, Linf 0.00327405, total time[s] 0.067464 +Converged at iteration 23, L1 9.26122e-05, Linf 0.00373662, total time[s] 0.062415 +Converged at iteration 21, L1 5.92035e-05, Linf 0.00307498, total time[s] 0.058121 +Converged at iteration 20, L1 5.4442e-05, Linf 0.00255884, total time[s] 0.054592 +Converged at iteration 31, L1 8.39062e-05, Linf 0.0135115, total time[s] 0.08882 +Converged at iteration 21, L1 9.59702e-05, Linf 0.00582151, total time[s] 0.059725 +Converged at iteration 23, L1 9.09281e-05, Linf 0.00685801, total time[s] 0.063245 +Converged at iteration 27, L1 6.07866e-05, Linf 0.00343607, total time[s] 0.07169 +Converged at iteration 24, L1 6.76852e-05, Linf 0.0047914, total time[s] 0.062346 +Converged at iteration 23, L1 8.8898e-05, Linf 0.00493858, total time[s] 0.060101 +Converged at iteration 25, L1 9.31713e-05, Linf 0.00545498, total time[s] 0.065177 +Converged at iteration 26, L1 5.7753e-05, Linf 0.00380651, total time[s] 0.066361 +Converged at iteration 27, L1 7.04186e-05, Linf 0.00626476, total time[s] 0.070672 +Converged at iteration 32, L1 6.09041e-05, Linf 0.00313514, total time[s] 0.081109 +Converged at iteration 26, L1 7.91219e-05, Linf 0.00225644, total time[s] 0.066483 +Converged at iteration 31, L1 7.37116e-05, Linf 0.00942096, total time[s] 0.078307 +Converged at iteration 30, L1 9.90514e-05, Linf 0.00350007, total time[s] 0.078516 +Converged at iteration 32, L1 5.46607e-05, Linf 0.00246751, total time[s] 0.093133 +Converged at iteration 30, L1 6.46863e-05, Linf 0.00364333, total time[s] 0.102825 +Converged at iteration 31, L1 8.78659e-05, Linf 0.0167037, total time[s] 0.085607 +Converged at iteration 29, L1 8.37954e-05, Linf 0.0173318, total time[s] 0.088273 +Converged at iteration 25, L1 5.73748e-05, Linf 0.00230569, total time[s] 0.07397 +Converged at iteration 37, L1 7.3707e-05, Linf 0.00880941, total time[s] 0.099978 +Converged at iteration 35, L1 3.46173e-05, Linf 0.00403743, total time[s] 0.101465 +Converged at iteration 25, L1 6.18357e-05, Linf 0.00348817, total time[s] 0.066986 +Converged at iteration 25, L1 4.97071e-05, Linf 0.00793343, total time[s] 0.068438 +Converged at iteration 25, L1 9.39013e-05, Linf 0.0207638, total time[s] 0.06426 +Converged at iteration 26, L1 4.0044e-05, Linf 0.0142274, total time[s] 0.068088 +Converged at iteration 21, L1 5.31883e-05, Linf 0.00991503, total time[s] 0.065288 +Converged at iteration 19, L1 5.65988e-05, Linf 0.00434187, total time[s] 0.053034 +Converged at iteration 24, L1 5.25375e-05, Linf 0.00220943, total time[s] 0.063391 +Converged at iteration 23, L1 9.3984e-05, Linf 0.00355266, total time[s] 0.061485 +Converged at iteration 21, L1 6.071e-05, Linf 0.00314142, total time[s] 0.056034 +Converged at iteration 20, L1 5.57832e-05, Linf 0.00257595, total time[s] 0.056639 +Converged at iteration 31, L1 8.50362e-05, Linf 0.0136205, total time[s] 0.090933 +Converged at iteration 21, L1 9.91645e-05, Linf 0.00577949, total time[s] 0.067961 +Converged at iteration 23, L1 9.30901e-05, Linf 0.00721496, total time[s] 0.067426 +Converged at iteration 27, L1 6.00994e-05, Linf 0.00341894, total time[s] 0.076267 +Converged at iteration 24, L1 6.78332e-05, Linf 0.00484952, total time[s] 0.079975 +Converged at iteration 23, L1 8.95755e-05, Linf 0.00493201, total time[s] 0.074423 +Converged at iteration 25, L1 9.44126e-05, Linf 0.0055234, total time[s] 0.069623 +Converged at iteration 26, L1 6.01959e-05, Linf 0.00398388, total time[s] 0.069125 +Converged at iteration 27, L1 7.07164e-05, Linf 0.00596095, total time[s] 0.069859 +Converged at iteration 32, L1 6.08735e-05, Linf 0.00314438, total time[s] 0.084927 +Converged at iteration 26, L1 7.76273e-05, Linf 0.00230562, total time[s] 0.069284 +Converged at iteration 31, L1 7.43281e-05, Linf 0.00948158, total time[s] 0.080493 +Converged at iteration 31, L1 5.8293e-05, Linf 0.00240168, total time[s] 0.080236 +Converged at iteration 32, L1 5.72078e-05, Linf 0.00260526, total time[s] 0.082096 +Converged at iteration 30, L1 6.49725e-05, Linf 0.00368621, total time[s] 0.080469 +Converged at iteration 31, L1 9.0653e-05, Linf 0.0170408, total time[s] 0.091254 +Converged at iteration 29, L1 8.4479e-05, Linf 0.0174599, total time[s] 0.081258 +Converged at iteration 25, L1 5.7133e-05, Linf 0.00235096, total time[s] 0.082016 +Converged at iteration 37, L1 7.6048e-05, Linf 0.00917657, total time[s] 0.123246 +Converged at iteration 35, L1 3.82542e-05, Linf 0.00428733, total time[s] 0.116083 +Converged at iteration 25, L1 6.22858e-05, Linf 0.00350116, total time[s] 0.065822 +Converged at iteration 25, L1 5.42581e-05, Linf 0.00770998, total time[s] 0.066726 +Converged at iteration 25, L1 8.48742e-05, Linf 0.0195282, total time[s] 0.068176 +Converged at iteration 26, L1 4.01529e-05, Linf 0.0139138, total time[s] 0.075966 +Converged at iteration 21, L1 5.52694e-05, Linf 0.0100443, total time[s] 0.073506 +Converged at iteration 19, L1 5.49001e-05, Linf 0.00419453, total time[s] 0.06164 +Converged at iteration 24, L1 5.17783e-05, Linf 0.0021855, total time[s] 0.096024 +Converged at iteration 23, L1 9.78204e-05, Linf 0.00330701, total time[s] 0.086948 +Converged at iteration 21, L1 6.43074e-05, Linf 0.00326271, total time[s] 0.064988 +Converged at iteration 20, L1 5.9821e-05, Linf 0.00274206, total time[s] 0.077341 +Converged at iteration 31, L1 8.84203e-05, Linf 0.013957, total time[s] 0.102162 +Converged at iteration 21, L1 9.90703e-05, Linf 0.00603599, total time[s] 0.06038 +Converged at iteration 23, L1 9.54547e-05, Linf 0.006931, total time[s] 0.064353 +Converged at iteration 27, L1 5.92022e-05, Linf 0.00333848, total time[s] 0.080186 +Converged at iteration 24, L1 6.87098e-05, Linf 0.00500387, total time[s] 0.076552 +Converged at iteration 23, L1 9.13178e-05, Linf 0.00494935, total time[s] 0.060921 +Converged at iteration 26, L1 4.94917e-05, Linf 0.00324883, total time[s] 0.067991 +Converged at iteration 26, L1 6.58514e-05, Linf 0.0041611, total time[s] 0.068939 +Converged at iteration 27, L1 7.33e-05, Linf 0.00565778, total time[s] 0.071405 +Converged at iteration 32, L1 6.11457e-05, Linf 0.00318126, total time[s] 0.084313 +Converged at iteration 26, L1 7.37201e-05, Linf 0.00242847, total time[s] 0.071098 +Converged at iteration 31, L1 7.44318e-05, Linf 0.00952322, total time[s] 0.083699 +Converged at iteration 30, L1 9.98381e-05, Linf 0.00353548, total time[s] 0.088897 +Converged at iteration 32, L1 5.82621e-05, Linf 0.00259794, total time[s] 0.095254 +Converged at iteration 30, L1 6.77189e-05, Linf 0.0036549, total time[s] 0.095311 +Converged at iteration 31, L1 9.88883e-05, Linf 0.0178986, total time[s] 0.083203 +Converged at iteration 29, L1 8.57456e-05, Linf 0.0180559, total time[s] 0.080604 +Converged at iteration 25, L1 5.7498e-05, Linf 0.00243578, total time[s] 0.068667 +Converged at iteration 37, L1 7.70127e-05, Linf 0.0093224, total time[s] 0.099316 +Converged at iteration 35, L1 3.82451e-05, Linf 0.00437834, total time[s] 0.29231 +Converged at iteration 25, L1 6.23783e-05, Linf 0.00349777, total time[s] 0.147397 +Converged at iteration 25, L1 5.45119e-05, Linf 0.00750735, total time[s] 0.091042 +Converged at iteration 25, L1 8.7069e-05, Linf 0.0190213, total time[s] 0.080035 +Converged at iteration 26, L1 4.12022e-05, Linf 0.0137711, total time[s] 0.066847 +Converged at iteration 21, L1 5.6081e-05, Linf 0.0101017, total time[s] 0.056476 +Converged at iteration 19, L1 5.42951e-05, Linf 0.00419511, total time[s] 0.050579 +Converged at iteration 23, L1 9.90179e-05, Linf 0.00358785, total time[s] 0.060893 +Converged at iteration 24, L1 6.16301e-05, Linf 0.00316001, total time[s] 0.065623 +Converged at iteration 21, L1 6.57168e-05, Linf 0.00332273, total time[s] 0.055938 +Converged at iteration 20, L1 6.39223e-05, Linf 0.00280855, total time[s] 0.052584 +Converged at iteration 31, L1 9.23571e-05, Linf 0.0140618, total time[s] 0.077793 +Converged at iteration 22, L1 5.58653e-05, Linf 0.00335268, total time[s] 0.057696 +Converged at iteration 23, L1 9.60157e-05, Linf 0.00734331, total time[s] 0.059954 +Converged at iteration 27, L1 5.78534e-05, Linf 0.00330799, total time[s] 0.068927 +Converged at iteration 24, L1 6.84345e-05, Linf 0.00510997, total time[s] 0.083821 +Converged at iteration 23, L1 9.16411e-05, Linf 0.00493863, total time[s] 0.06635 +Converged at iteration 26, L1 5.00422e-05, Linf 0.00329873, total time[s] 0.086892 +Converged at iteration 26, L1 6.79688e-05, Linf 0.00424019, total time[s] 0.087303 +Converged at iteration 27, L1 7.33783e-05, Linf 0.00583362, total time[s] 0.07653 +Converged at iteration 32, L1 6.15298e-05, Linf 0.00322072, total time[s] 0.091532 +Converged at iteration 26, L1 7.26617e-05, Linf 0.00246612, total time[s] 0.092771 +Converged at iteration 31, L1 7.35378e-05, Linf 0.00953267, total time[s] 0.085186 +Converged at iteration 30, L1 9.92449e-05, Linf 0.00353587, total time[s] 0.086394 +Converged at iteration 32, L1 6.02673e-05, Linf 0.00262923, total time[s] 0.10303 +Converged at iteration 30, L1 6.82183e-05, Linf 0.00384787, total time[s] 0.0829 +Converged at iteration 32, L1 3.85774e-05, Linf 0.00806105, total time[s] 0.082824 +Converged at iteration 29, L1 8.62116e-05, Linf 0.0179965, total time[s] 0.075869 +Converged at iteration 25, L1 5.73873e-05, Linf 0.00234741, total time[s] 0.067002 +Converged at iteration 37, L1 7.97709e-05, Linf 0.00982404, total time[s] 0.096287 +Converged at iteration 35, L1 4.1872e-05, Linf 0.00484044, total time[s] 0.099709 +Converged at iteration 25, L1 6.56156e-05, Linf 0.00348158, total time[s] 0.06749 +Converged at iteration 25, L1 5.86727e-05, Linf 0.00737031, total time[s] 0.065714 +Converged at iteration 25, L1 6.82498e-05, Linf 0.017199, total time[s] 0.065126 +Converged at iteration 26, L1 4.14457e-05, Linf 0.013491, total time[s] 0.067985 +Converged at iteration 21, L1 5.84201e-05, Linf 0.0102371, total time[s] 0.062374 +Converged at iteration 19, L1 5.0319e-05, Linf 0.00398557, total time[s] 0.05235 +Converged at iteration 23, L1 9.74333e-05, Linf 0.00340829, total time[s] 0.064827 +Converged at iteration 24, L1 6.19768e-05, Linf 0.00242077, total time[s] 0.06531 +Converged at iteration 21, L1 6.98765e-05, Linf 0.00351254, total time[s] 0.058755 +Converged at iteration 20, L1 6.7036e-05, Linf 0.00304114, total time[s] 0.063908 +Converged at iteration 31, L1 9.46901e-05, Linf 0.0144766, total time[s] 0.088337 +Converged at iteration 22, L1 5.74096e-05, Linf 0.00345841, total time[s] 0.062682 +Converged at iteration 23, L1 9.50066e-05, Linf 0.00756126, total time[s] 0.072619 +Converged at iteration 27, L1 5.44647e-05, Linf 0.0031626, total time[s] 0.074806 +Converged at iteration 24, L1 6.89092e-05, Linf 0.00530238, total time[s] 0.062093 +Converged at iteration 23, L1 9.4052e-05, Linf 0.00494844, total time[s] 0.060196 +Converged at iteration 26, L1 5.22059e-05, Linf 0.00346182, total time[s] 0.066566 +Converged at iteration 26, L1 7.76253e-05, Linf 0.00459117, total time[s] 0.069992 +Converged at iteration 27, L1 7.54868e-05, Linf 0.00658407, total time[s] 0.084333 +Converged at iteration 32, L1 6.41334e-05, Linf 0.00333518, total time[s] 0.095613 +Converged at iteration 26, L1 7.01078e-05, Linf 0.00260737, total time[s] 0.071801 +Converged at iteration 31, L1 7.45534e-05, Linf 0.00974839, total time[s] 0.079257 +Converged at iteration 31, L1 5.89242e-05, Linf 0.00243577, total time[s] 0.08071 +Converged at iteration 32, L1 6.29076e-05, Linf 0.00424733, total time[s] 0.082569 +Converged at iteration 30, L1 7.18218e-05, Linf 0.00401702, total time[s] 0.078027 +Converged at iteration 32, L1 4.13013e-05, Linf 0.00869161, total time[s] 0.082907 +Converged at iteration 29, L1 8.90766e-05, Linf 0.0178676, total time[s] 0.076004 +Converged at iteration 25, L1 5.96031e-05, Linf 0.00335522, total time[s] 0.066778 +Converged at iteration 37, L1 8.06446e-05, Linf 0.00995752, total time[s] 0.094985 +Converged at iteration 35, L1 4.27408e-05, Linf 0.00496037, total time[s] 0.093733 +Converged at iteration 25, L1 6.57886e-05, Linf 0.00348015, total time[s] 0.067935 +Converged at iteration 25, L1 5.90536e-05, Linf 0.0072544, total time[s] 0.066527 +Converged at iteration 25, L1 6.53248e-05, Linf 0.0165755, total time[s] 0.066619 +Converged at iteration 26, L1 4.19653e-05, Linf 0.013425, total time[s] 0.070978 +Converged at iteration 21, L1 5.90242e-05, Linf 0.010181, total time[s] 0.070827 +Converged at iteration 19, L1 5.09344e-05, Linf 0.00398653, total time[s] 0.057953 +Converged at iteration 23, L1 9.71097e-05, Linf 0.00335034, total time[s] 0.066438 +Converged at iteration 24, L1 6.30277e-05, Linf 0.00247921, total time[s] 0.065739 +Converged at iteration 21, L1 7.12454e-05, Linf 0.00356139, total time[s] 0.06077 +Converged at iteration 20, L1 6.79799e-05, Linf 0.00310578, total time[s] 0.054858 +Converged at iteration 31, L1 9.62585e-05, Linf 0.0145529, total time[s] 0.084086 +Converged at iteration 22, L1 5.78348e-05, Linf 0.00348467, total time[s] 0.061261 +Converged at iteration 23, L1 9.42911e-05, Linf 0.00757113, total time[s] 0.060711 +Converged at iteration 27, L1 5.40774e-05, Linf 0.00313534, total time[s] 0.072061 +Converged at iteration 24, L1 6.88978e-05, Linf 0.00537392, total time[s] 0.083427 +Converged at iteration 23, L1 9.42686e-05, Linf 0.00493256, total time[s] 0.082201 +Converged at iteration 26, L1 5.27398e-05, Linf 0.00349075, total time[s] 0.070129 +Converged at iteration 26, L1 8.12355e-05, Linf 0.00468151, total time[s] 0.070853 +Converged at iteration 27, L1 7.59902e-05, Linf 0.00611499, total time[s] 0.075907 +Converged at iteration 32, L1 6.47083e-05, Linf 0.00338164, total time[s] 0.085113 +Converged at iteration 26, L1 6.9743e-05, Linf 0.00263101, total time[s] 0.066778 +Converged at iteration 31, L1 7.39606e-05, Linf 0.00968688, total time[s] 0.079007 +Converged at iteration 30, L1 9.90681e-05, Linf 0.00358469, total time[s] 0.077419 +Converged at iteration 32, L1 6.20927e-05, Linf 0.00276412, total time[s] 0.082532 +Converged at iteration 30, L1 7.25639e-05, Linf 0.00414455, total time[s] 0.07779 +Converged at iteration 32, L1 4.21348e-05, Linf 0.00886971, total time[s] 0.082282 +Converged at iteration 29, L1 9.06355e-05, Linf 0.0172824, total time[s] 0.075263 +Converged at iteration 25, L1 5.89771e-05, Linf 0.00279015, total time[s] 0.065072 +Converged at iteration 37, L1 8.25766e-05, Linf 0.010392, total time[s] 0.103552 +Converged at iteration 35, L1 4.56568e-05, Linf 0.00536248, total time[s] 0.09906 +Converged at iteration 25, L1 6.87045e-05, Linf 0.00354856, total time[s] 0.071414 +Converged at iteration 25, L1 6.28301e-05, Linf 0.00717546, total time[s] 0.065729 +Converged at iteration 25, L1 5.83364e-05, Linf 0.0151231, total time[s] 0.06591 +Converged at iteration 26, L1 4.33085e-05, Linf 0.0132866, total time[s] 0.072022 +Converged at iteration 21, L1 6.04003e-05, Linf 0.0103718, total time[s] 0.064808 +Converged at iteration 19, L1 5.12079e-05, Linf 0.00381083, total time[s] 0.055873 +Converged at iteration 23, L1 9.72343e-05, Linf 0.00356921, total time[s] 0.068455 +Converged at iteration 24, L1 6.58754e-05, Linf 0.00265203, total time[s] 0.076569 +Converged at iteration 21, L1 7.57658e-05, Linf 0.00369881, total time[s] 0.069383 +Converged at iteration 20, L1 7.25866e-05, Linf 0.00330145, total time[s] 0.071054 +Converged at iteration 32, L1 3.75841e-05, Linf 0.00847061, total time[s] 0.105426 +Converged at iteration 22, L1 6.06749e-05, Linf 0.00356644, total time[s] 0.061224 +Converged at iteration 23, L1 9.42361e-05, Linf 0.00772757, total time[s] 0.064802 +Converged at iteration 27, L1 5.29998e-05, Linf 0.00301174, total time[s] 0.071963 +Converged at iteration 24, L1 6.72314e-05, Linf 0.00541681, total time[s] 0.066127 +Converged at iteration 23, L1 9.52918e-05, Linf 0.00491085, total time[s] 0.064932 +Converged at iteration 26, L1 5.65244e-05, Linf 0.00363732, total time[s] 0.073234 +Converged at iteration 26, L1 8.82209e-05, Linf 0.00501153, total time[s] 0.07927 +Converged at iteration 27, L1 7.86271e-05, Linf 0.00619676, total time[s] 0.072174 +Converged at iteration 32, L1 6.73838e-05, Linf 0.00350462, total time[s] 0.091018 +Converged at iteration 26, L1 7.00799e-05, Linf 0.00272229, total time[s] 0.079412 +Converged at iteration 31, L1 7.45438e-05, Linf 0.00979766, total time[s] 0.096879 +Converged at iteration 30, L1 9.91122e-05, Linf 0.00361193, total time[s] 0.077506 +Converged at iteration 32, L1 6.57475e-05, Linf 0.00285436, total time[s] 0.085435 +Converged at iteration 30, L1 7.52683e-05, Linf 0.00411376, total time[s] 0.080909 +Converged at iteration 32, L1 4.56817e-05, Linf 0.00949367, total time[s] 0.086665 +Converged at iteration 29, L1 9.05877e-05, Linf 0.0156854, total time[s] 0.073775 +Converged at iteration 25, L1 5.97697e-05, Linf 0.00286772, total time[s] 0.064679 +Converged at iteration 37, L1 8.33192e-05, Linf 0.0107196, total time[s] 0.105996 +Converged at iteration 35, L1 4.6683e-05, Linf 0.00548842, total time[s] 0.098231 +Converged at iteration 25, L1 6.93914e-05, Linf 0.00353474, total time[s] 0.065799 +Converged at iteration 25, L1 6.29634e-05, Linf 0.00708943, total time[s] 0.067986 +Converged at iteration 25, L1 5.63753e-05, Linf 0.0145028, total time[s] 0.064381 +Converged at iteration 26, L1 4.33413e-05, Linf 0.0132531, total time[s] 0.068301 +Converged at iteration 21, L1 6.15502e-05, Linf 0.0105425, total time[s] 0.062366 +Converged at iteration 19, L1 5.33797e-05, Linf 0.00379938, total time[s] 0.061201 +Converged at iteration 23, L1 9.63287e-05, Linf 0.00365445, total time[s] 0.083028 +Converged at iteration 24, L1 6.60465e-05, Linf 0.00268984, total time[s] 0.06749 +Converged at iteration 21, L1 7.76796e-05, Linf 0.00373678, total time[s] 0.059346 +Converged at iteration 20, L1 7.37841e-05, Linf 0.00336604, total time[s] 0.062319 +Converged at iteration 32, L1 3.78205e-05, Linf 0.0084388, total time[s] 0.086349 +Converged at iteration 22, L1 6.28991e-05, Linf 0.00359845, total time[s] 0.062147 +Converged at iteration 23, L1 9.38719e-05, Linf 0.00769527, total time[s] 0.062361 +Converged at iteration 27, L1 5.27351e-05, Linf 0.00299538, total time[s] 0.070183 +Converged at iteration 24, L1 6.65198e-05, Linf 0.00540946, total time[s] 0.062554 +Converged at iteration 23, L1 9.53285e-05, Linf 0.0048827, total time[s] 0.060591 +Converged at iteration 26, L1 5.73555e-05, Linf 0.00368167, total time[s] 0.066728 +Converged at iteration 26, L1 9.11914e-05, Linf 0.00511034, total time[s] 0.068281 +Converged at iteration 27, L1 7.87204e-05, Linf 0.00622349, total time[s] 0.069569 +Converged at iteration 32, L1 6.81293e-05, Linf 0.00356087, total time[s] 0.085733 +Converged at iteration 26, L1 7.04827e-05, Linf 0.00273922, total time[s] 0.081305 +Converged at iteration 31, L1 7.40848e-05, Linf 0.00974815, total time[s] 0.083672 +Converged at iteration 31, L1 5.63634e-05, Linf 0.00244829, total time[s] 0.099389 +Converged at iteration 32, L1 6.66366e-05, Linf 0.00288805, total time[s] 0.087367 +Converged at iteration 30, L1 7.61509e-05, Linf 0.00424305, total time[s] 0.076658 +Converged at iteration 32, L1 4.68504e-05, Linf 0.00959259, total time[s] 0.081331 +Converged at iteration 29, L1 9.05246e-05, Linf 0.0151209, total time[s] 0.074408 +Converged at iteration 25, L1 6.06763e-05, Linf 0.00278399, total time[s] 0.06872 +Converged at iteration 37, L1 8.50732e-05, Linf 0.0104561, total time[s] 0.106808 +Converged at iteration 35, L1 5.09414e-05, Linf 0.00599193, total time[s] 0.103371 +Converged at iteration 25, L1 7.19364e-05, Linf 0.00352807, total time[s] 0.07261 +Converged at iteration 25, L1 6.61575e-05, Linf 0.00696065, total time[s] 0.073825 +Converged at iteration 25, L1 5.21343e-05, Linf 0.0129128, total time[s] 0.067113 +Converged at iteration 26, L1 4.49151e-05, Linf 0.013595, total time[s] 0.075702 +Converged at iteration 21, L1 6.37948e-05, Linf 0.0104964, total time[s] 0.064913 +Converged at iteration 19, L1 6.06582e-05, Linf 0.00354432, total time[s] 0.060539 +Converged at iteration 23, L1 9.5448e-05, Linf 0.00306541, total time[s] 0.09044 +Converged at iteration 24, L1 6.77167e-05, Linf 0.00280157, total time[s] 0.073036 +Converged at iteration 21, L1 8.1713e-05, Linf 0.00389121, total time[s] 0.058328 +Converged at iteration 20, L1 7.8769e-05, Linf 0.00358068, total time[s] 0.061107 +Converged at iteration 32, L1 3.93873e-05, Linf 0.00846304, total time[s] 0.088047 +Converged at iteration 22, L1 6.40876e-05, Linf 0.00369294, total time[s] 0.069763 +Converged at iteration 23, L1 9.49514e-05, Linf 0.00786569, total time[s] 0.067744 +Converged at iteration 27, L1 5.01002e-05, Linf 0.00289331, total time[s] 0.077889 +Converged at iteration 24, L1 6.5695e-05, Linf 0.00525137, total time[s] 0.064608 +Converged at iteration 23, L1 9.681e-05, Linf 0.00485102, total time[s] 0.064219 +Converged at iteration 26, L1 6.10472e-05, Linf 0.00385784, total time[s] 0.084611 +Converged at iteration 27, L1 5.30782e-05, Linf 0.00340516, total time[s] 0.074151 +Converged at iteration 27, L1 7.71067e-05, Linf 0.00629102, total time[s] 0.070685 +Converged at iteration 32, L1 7.17141e-05, Linf 0.00374912, total time[s] 0.085512 +Converged at iteration 26, L1 7.42505e-05, Linf 0.00282786, total time[s] 0.069262 +Converged at iteration 31, L1 7.44144e-05, Linf 0.00992114, total time[s] 0.084567 +Converged at iteration 30, L1 9.78926e-05, Linf 0.0036257, total time[s] 0.077996 +Converged at iteration 32, L1 7.14792e-05, Linf 0.00299476, total time[s] 0.085756 +Converged at iteration 30, L1 7.90948e-05, Linf 0.00472133, total time[s] 0.076562 +Converged at iteration 32, L1 5.16597e-05, Linf 0.0104494, total time[s] 0.095533 +Converged at iteration 29, L1 9.04603e-05, Linf 0.0134693, total time[s] 0.087495 +Converged at iteration 25, L1 6.19138e-05, Linf 0.00279449, total time[s] 0.084756 +Converged at iteration 37, L1 8.55368e-05, Linf 0.0105896, total time[s] 0.106501 +Converged at iteration 35, L1 5.16938e-05, Linf 0.00612211, total time[s] 0.098165 +Converged at iteration 25, L1 7.18963e-05, Linf 0.00351232, total time[s] 0.080227 +Converged at iteration 25, L1 6.63863e-05, Linf 0.00686082, total time[s] 0.071113 +Converged at iteration 25, L1 5.27871e-05, Linf 0.0124661, total time[s] 0.082961 +Converged at iteration 26, L1 4.55068e-05, Linf 0.0132444, total time[s] 0.085002 +Converged at iteration 21, L1 6.42675e-05, Linf 0.0104134, total time[s] 0.06713 +Converged at iteration 19, L1 6.42435e-05, Linf 0.00352838, total time[s] 0.068946 +Converged at iteration 23, L1 9.43698e-05, Linf 0.00303421, total time[s] 0.089652 +Converged at iteration 24, L1 6.8243e-05, Linf 0.00282833, total time[s] 0.084748 +Converged at iteration 21, L1 8.28504e-05, Linf 0.00391633, total time[s] 0.086245 +Converged at iteration 20, L1 8.06194e-05, Linf 0.00364117, total time[s] 0.068466 +Converged at iteration 32, L1 3.98606e-05, Linf 0.00842406, total time[s] 0.111937 +Converged at iteration 22, L1 6.23185e-05, Linf 0.00372052, total time[s] 0.0672 +Converged at iteration 23, L1 9.42889e-05, Linf 0.0079293, total time[s] 0.067025 +Converged at iteration 27, L1 4.96526e-05, Linf 0.00287257, total time[s] 0.078651 +Converged at iteration 24, L1 6.54508e-05, Linf 0.00517221, total time[s] 0.062336 +Converged at iteration 23, L1 9.69692e-05, Linf 0.00483891, total time[s] 0.06957 +Converged at iteration 26, L1 6.58639e-05, Linf 0.00858698, total time[s] 0.070792 +Converged at iteration 27, L1 5.48795e-05, Linf 0.00346902, total time[s] 0.080946 +Converged at iteration 27, L1 7.77874e-05, Linf 0.0063114, total time[s] 0.076467 +Converged at iteration 32, L1 7.25469e-05, Linf 0.00380138, total time[s] 0.08423 +Converged at iteration 26, L1 7.66907e-05, Linf 0.00284252, total time[s] 0.072171 +Converged at iteration 31, L1 7.42578e-05, Linf 0.0099275, total time[s] 0.081247 +Converged at iteration 30, L1 9.79508e-05, Linf 0.00361904, total time[s] 0.077888 +Converged at iteration 32, L1 7.15358e-05, Linf 0.00303388, total time[s] 0.081832 +Converged at iteration 30, L1 7.98616e-05, Linf 0.00457094, total time[s] 0.079961 +Converged at iteration 32, L1 5.32275e-05, Linf 0.0106749, total time[s] 0.082865 +Converged at iteration 29, L1 9.13336e-05, Linf 0.0135587, total time[s] 0.075171 +Converged at iteration 25, L1 6.24821e-05, Linf 0.0028349, total time[s] 0.066042 +Converged at iteration 37, L1 8.70991e-05, Linf 0.0110938, total time[s] 0.098328 +Converged at iteration 35, L1 5.59929e-05, Linf 0.00667856, total time[s] 0.102024 +Converged at iteration 25, L1 7.32668e-05, Linf 0.00346309, total time[s] 0.067498 +Converged at iteration 25, L1 6.9222e-05, Linf 0.00667919, total time[s] 0.066628 +Converged at iteration 25, L1 4.59944e-05, Linf 0.0108703, total time[s] 0.066712 +Converged at iteration 26, L1 4.79867e-05, Linf 0.0134027, total time[s] 0.069281 +Converged at iteration 21, L1 6.56284e-05, Linf 0.0107077, total time[s] 0.065086 +Converged at iteration 19, L1 7.2489e-05, Linf 0.0034279, total time[s] 0.063215 +Converged at iteration 23, L1 9.17064e-05, Linf 0.00295697, total time[s] 0.06586 +Converged at iteration 24, L1 7.20589e-05, Linf 0.0029132, total time[s] 0.075656 +Converged at iteration 21, L1 8.65121e-05, Linf 0.00403314, total time[s] 0.060159 +Converged at iteration 20, L1 8.39027e-05, Linf 0.00385024, total time[s] 0.056119 +Converged at iteration 32, L1 4.13778e-05, Linf 0.00843706, total time[s] 0.08538 +Converged at iteration 22, L1 6.46746e-05, Linf 0.00383872, total time[s] 0.065824 +Converged at iteration 23, L1 9.48707e-05, Linf 0.00800773, total time[s] 0.062304 +Converged at iteration 27, L1 4.82178e-05, Linf 0.00279072, total time[s] 0.072929 +Converged at iteration 24, L1 6.17023e-05, Linf 0.00484919, total time[s] 0.063764 +Converged at iteration 23, L1 9.7396e-05, Linf 0.00479105, total time[s] 0.060386 +Converged at iteration 26, L1 6.85339e-05, Linf 0.00410093, total time[s] 0.066666 +Converged at iteration 27, L1 6.33217e-05, Linf 0.00374216, total time[s] 0.068889 +Converged at iteration 27, L1 7.76528e-05, Linf 0.00637523, total time[s] 0.071479 +Converged at iteration 32, L1 7.5191e-05, Linf 0.00403002, total time[s] 0.081752 +Converged at iteration 26, L1 8.38506e-05, Linf 0.00293966, total time[s] 0.067715 +Converged at iteration 31, L1 7.54403e-05, Linf 0.0099621, total time[s] 0.079989 +Converged at iteration 30, L1 9.99865e-05, Linf 0.00363544, total time[s] 0.07778 +Converged at iteration 32, L1 7.64233e-05, Linf 0.00324123, total time[s] 0.081067 +Converged at iteration 30, L1 8.34524e-05, Linf 0.00493482, total time[s] 0.076831 +Converged at iteration 32, L1 5.82695e-05, Linf 0.0115262, total time[s] 0.081331 +Converged at iteration 29, L1 9.28707e-05, Linf 0.0142926, total time[s] 0.074864 +Converged at iteration 25, L1 6.45029e-05, Linf 0.00293474, total time[s] 0.065143 +Converged at iteration 37, L1 8.74244e-05, Linf 0.0112282, total time[s] 0.09851 +Converged at iteration 35, L1 5.70075e-05, Linf 0.0068039, total time[s] 0.096024 +Converged at iteration 25, L1 7.32844e-05, Linf 0.00343632, total time[s] 0.067379 +Converged at iteration 25, L1 7.0919e-05, Linf 0.0101611, total time[s] 0.065004 +Converged at iteration 25, L1 4.5458e-05, Linf 0.0105084, total time[s] 0.066185 +Converged at iteration 26, L1 4.8821e-05, Linf 0.0134515, total time[s] 0.067994 +Converged at iteration 21, L1 6.59319e-05, Linf 0.0106043, total time[s] 0.057134 +Converged at iteration 19, L1 7.55466e-05, Linf 0.00343415, total time[s] 0.052886 +Converged at iteration 23, L1 9.14348e-05, Linf 0.00289607, total time[s] 0.079898 +Converged at iteration 24, L1 7.22872e-05, Linf 0.00290373, total time[s] 0.064042 +Converged at iteration 21, L1 8.75435e-05, Linf 0.00407963, total time[s] 0.069173 +Converged at iteration 20, L1 8.50801e-05, Linf 0.00390398, total time[s] 0.055974 +Converged at iteration 32, L1 4.18779e-05, Linf 0.00842867, total time[s] 0.088177 +Converged at iteration 22, L1 6.30764e-05, Linf 0.00386974, total time[s] 0.059414 +Converged at iteration 23, L1 9.46789e-05, Linf 0.00805986, total time[s] 0.06141 +Converged at iteration 27, L1 4.84259e-05, Linf 0.00278435, total time[s] 0.070677 +Converged at iteration 24, L1 6.13895e-05, Linf 0.00475023, total time[s] 0.064331 +Converged at iteration 23, L1 9.63523e-05, Linf 0.00476525, total time[s] 0.061291 +Converged at iteration 26, L1 6.95048e-05, Linf 0.00414844, total time[s] 0.068104 +Converged at iteration 27, L1 6.44506e-05, Linf 0.00380914, total time[s] 0.070276 +Converged at iteration 27, L1 7.82461e-05, Linf 0.00639213, total time[s] 0.075861 +Converged at iteration 32, L1 7.57347e-05, Linf 0.00408164, total time[s] 0.083861 +Converged at iteration 26, L1 8.60742e-05, Linf 0.00295635, total time[s] 0.069812 +Converged at iteration 31, L1 7.51904e-05, Linf 0.0100307, total time[s] 0.08087 +Converged at iteration 31, L1 5.52065e-05, Linf 0.00243168, total time[s] 0.081331 +Converged at iteration 32, L1 7.72877e-05, Linf 0.00329348, total time[s] 0.083521 +Converged at iteration 30, L1 8.38092e-05, Linf 0.00505332, total time[s] 0.079062 +Converged at iteration 32, L1 5.91587e-05, Linf 0.0117775, total time[s] 0.083494 +Converged at iteration 29, L1 9.22707e-05, Linf 0.0141046, total time[s] 0.076896 +Converged at iteration 25, L1 6.48753e-05, Linf 0.00292877, total time[s] 0.068563 +Converged at iteration 37, L1 8.86009e-05, Linf 0.0109338, total time[s] 0.096689 +Converged at iteration 35, L1 6.12998e-05, Linf 0.007339, total time[s] 0.127091 +Converged at iteration 25, L1 7.41995e-05, Linf 0.00338484, total time[s] 0.075708 +Converged at iteration 25, L1 7.21516e-05, Linf 0.00644061, total time[s] 0.06597 +Converged at iteration 25, L1 4.30341e-05, Linf 0.00926925, total time[s] 0.06431 +Converged at iteration 26, L1 5.09804e-05, Linf 0.0135866, total time[s] 0.079636 +Converged at iteration 21, L1 6.73074e-05, Linf 0.0106829, total time[s] 0.058666 +Converged at iteration 19, L1 8.20729e-05, Linf 0.00326846, total time[s] 0.055411 +Converged at iteration 23, L1 8.90193e-05, Linf 0.00289503, total time[s] 0.061343 +Converged at iteration 24, L1 7.39673e-05, Linf 0.002945, total time[s] 0.06475 +Converged at iteration 21, L1 9.07816e-05, Linf 0.00415772, total time[s] 0.058217 +Converged at iteration 20, L1 8.93391e-05, Linf 0.00408692, total time[s] 0.053866 +Converged at iteration 32, L1 4.46375e-05, Linf 0.00844182, total time[s] 0.090809 +Converged at iteration 22, L1 6.4561e-05, Linf 0.00399326, total time[s] 0.074939 +Converged at iteration 23, L1 9.53872e-05, Linf 0.00758208, total time[s] 0.063228 +Converged at iteration 27, L1 4.82549e-05, Linf 0.00271592, total time[s] 0.07095 +Converged at iteration 24, L1 6.10662e-05, Linf 0.00443741, total time[s] 0.06855 +Converged at iteration 23, L1 9.4455e-05, Linf 0.00469247, total time[s] 0.060008 +Converged at iteration 26, L1 7.28662e-05, Linf 0.00434933, total time[s] 0.067287 +Converged at iteration 27, L1 6.99138e-05, Linf 0.00408332, total time[s] 0.074834 +Converged at iteration 27, L1 7.89923e-05, Linf 0.00640573, total time[s] 0.068973 +Converged at iteration 32, L1 7.78656e-05, Linf 0.00425479, total time[s] 0.07992 +Converged at iteration 26, L1 9.76537e-05, Linf 0.00305916, total time[s] 0.066254 +Converged at iteration 31, L1 7.54038e-05, Linf 0.0101069, total time[s] 0.078029 +Converged at iteration 31, L1 5.68235e-05, Linf 0.00244265, total time[s] 0.077561 +Converged at iteration 32, L1 8.35298e-05, Linf 0.00352806, total time[s] 0.080579 +Converged at iteration 30, L1 8.77943e-05, Linf 0.00553466, total time[s] 0.075832 +Converged at iteration 32, L1 6.38931e-05, Linf 0.0126889, total time[s] 0.079875 +Converged at iteration 29, L1 9.27623e-05, Linf 0.0141829, total time[s] 0.073341 +Converged at iteration 25, L1 6.59137e-05, Linf 0.00314627, total time[s] 0.063669 +Converged at iteration 37, L1 8.91529e-05, Linf 0.0110709, total time[s] 0.09553 +Converged at iteration 35, L1 6.22954e-05, Linf 0.00747514, total time[s] 0.094448 +Converged at iteration 25, L1 7.42157e-05, Linf 0.00336221, total time[s] 0.066653 +Converged at iteration 25, L1 7.19377e-05, Linf 0.00635342, total time[s] 0.064108 +Converged at iteration 25, L1 4.2633e-05, Linf 0.00897991, total time[s] 0.064104 +Converged at iteration 26, L1 5.19156e-05, Linf 0.0138535, total time[s] 0.066449 +Converged at iteration 21, L1 6.9113e-05, Linf 0.0107154, total time[s] 0.061702 +Converged at iteration 19, L1 8.49647e-05, Linf 0.00326566, total time[s] 0.051028 +Converged at iteration 23, L1 8.85239e-05, Linf 0.00287747, total time[s] 0.071878 +Converged at iteration 24, L1 7.44239e-05, Linf 0.00297321, total time[s] 0.0679 +Converged at iteration 21, L1 9.20469e-05, Linf 0.00419698, total time[s] 0.05698 +Converged at iteration 20, L1 9.04839e-05, Linf 0.00414323, total time[s] 0.062413 +Converged at iteration 32, L1 4.49039e-05, Linf 0.00843757, total time[s] 0.092333 +Converged at iteration 22, L1 6.50384e-05, Linf 0.00402278, total time[s] 0.061923 +Converged at iteration 23, L1 9.71875e-05, Linf 0.00848245, total time[s] 0.063566 +Converged at iteration 27, L1 4.81839e-05, Linf 0.00270729, total time[s] 0.074604 +Converged at iteration 24, L1 6.03262e-05, Linf 0.0043397, total time[s] 0.062061 +Converged at iteration 23, L1 9.32053e-05, Linf 0.00466666, total time[s] 0.062815 +Converged at iteration 26, L1 7.39823e-05, Linf 0.00439455, total time[s] 0.066339 +Converged at iteration 27, L1 7.19844e-05, Linf 0.00416178, total time[s] 0.068382 +Converged at iteration 27, L1 7.93591e-05, Linf 0.00643728, total time[s] 0.06925 +Converged at iteration 32, L1 7.82681e-05, Linf 0.00429626, total time[s] 0.079827 +Converged at iteration 27, L1 6.28204e-05, Linf 0.00201491, total time[s] 0.069996 +Converged at iteration 31, L1 7.52856e-05, Linf 0.0101062, total time[s] 0.077751 +Converged at iteration 31, L1 5.73189e-05, Linf 0.00243273, total time[s] 0.078256 +Converged at iteration 32, L1 8.50845e-05, Linf 0.00359515, total time[s] 0.080104 +Converged at iteration 30, L1 8.88722e-05, Linf 0.0056685, total time[s] 0.076085 +Converged at iteration 32, L1 6.53938e-05, Linf 0.0129422, total time[s] 0.082193 +Converged at iteration 29, L1 9.25331e-05, Linf 0.0142283, total time[s] 0.095506 +Converged at iteration 25, L1 6.62852e-05, Linf 0.00313665, total time[s] 0.067603 +Converged at iteration 37, L1 9.12669e-05, Linf 0.0114201, total time[s] 0.109048 +Converged at iteration 35, L1 6.70997e-05, Linf 0.00808885, total time[s] 0.119107 +Converged at iteration 25, L1 7.53373e-05, Linf 0.00331333, total time[s] 0.076768 +Converged at iteration 25, L1 7.50804e-05, Linf 0.00628655, total time[s] 0.065964 +Converged at iteration 25, L1 4.14536e-05, Linf 0.00795488, total time[s] 0.064929 +Converged at iteration 26, L1 5.57239e-05, Linf 0.0142721, total time[s] 0.072665 +Converged at iteration 21, L1 6.63937e-05, Linf 0.0109694, total time[s] 0.05603 +Converged at iteration 19, L1 9.1927e-05, Linf 0.00347362, total time[s] 0.054721 +Converged at iteration 23, L1 8.70972e-05, Linf 0.00293992, total time[s] 0.063232 +Converged at iteration 24, L1 7.66665e-05, Linf 0.00306526, total time[s] 0.065316 +Converged at iteration 21, L1 9.55208e-05, Linf 0.00432935, total time[s] 0.110634 +Converged at iteration 20, L1 9.53972e-05, Linf 0.00433578, total time[s] 0.060856 +Converged at iteration 32, L1 4.65771e-05, Linf 0.00843962, total time[s] 0.094212 +Converged at iteration 22, L1 6.68874e-05, Linf 0.00414936, total time[s] 0.061893 +Converged at iteration 23, L1 9.708e-05, Linf 0.00806712, total time[s] 0.062175 +Converged at iteration 27, L1 4.6457e-05, Linf 0.00262187, total time[s] 0.070736 +Converged at iteration 24, L1 5.76846e-05, Linf 0.0040912, total time[s] 0.065389 +Converged at iteration 23, L1 8.85591e-05, Linf 0.00453022, total time[s] 0.068017 +Converged at iteration 26, L1 7.82787e-05, Linf 0.00458821, total time[s] 0.069648 +Converged at iteration 27, L1 7.84181e-05, Linf 0.00447708, total time[s] 0.088487 +Converged at iteration 27, L1 8.11643e-05, Linf 0.00647639, total time[s] 0.096796 +Converged at iteration 32, L1 8.10672e-05, Linf 0.00445956, total time[s] 0.094557 +Converged at iteration 27, L1 6.90047e-05, Linf 0.00204773, total time[s] 0.081972 +Converged at iteration 31, L1 7.70352e-05, Linf 0.0101079, total time[s] 0.081224 +Converged at iteration 31, L1 5.60164e-05, Linf 0.00238506, total time[s] 0.090342 +Converged at iteration 32, L1 9.30603e-05, Linf 0.00390918, total time[s] 0.081469 +Converged at iteration 30, L1 9.48971e-05, Linf 0.00622094, total time[s] 0.076955 +Converged at iteration 32, L1 7.15365e-05, Linf 0.0138402, total time[s] 0.082932 +Converged at iteration 29, L1 9.22675e-05, Linf 0.0147465, total time[s] 0.07486 +Converged at iteration 25, L1 6.72585e-05, Linf 0.00309681, total time[s] 0.067611 +Converged at iteration 37, L1 9.25979e-05, Linf 0.011598, total time[s] 0.095567 +Converged at iteration 35, L1 6.84868e-05, Linf 0.00824125, total time[s] 0.122651 +Converged at iteration 25, L1 7.47804e-05, Linf 0.00329598, total time[s] 0.071665 +Converged at iteration 25, L1 7.5576e-05, Linf 0.00625021, total time[s] 0.069124 +Converged at iteration 25, L1 4.12637e-05, Linf 0.00774461, total time[s] 0.081136 +Converged at iteration 26, L1 5.66721e-05, Linf 0.0144067, total time[s] 0.073892 +Converged at iteration 21, L1 6.58004e-05, Linf 0.0108172, total time[s] 0.058315 +Converged at iteration 19, L1 9.4135e-05, Linf 0.00350427, total time[s] 0.057859 +Converged at iteration 23, L1 8.65427e-05, Linf 0.00294454, total time[s] 0.063808 +Converged at iteration 24, L1 7.78976e-05, Linf 0.00309182, total time[s] 0.065281 +Converged at iteration 21, L1 9.64089e-05, Linf 0.00437583, total time[s] 0.061021 +Converged at iteration 20, L1 9.74426e-05, Linf 0.00438765, total time[s] 0.068595 +Converged at iteration 32, L1 4.68617e-05, Linf 0.00829816, total time[s] 0.086149 +Converged at iteration 22, L1 6.85033e-05, Linf 0.00417887, total time[s] 0.057088 +Converged at iteration 23, L1 9.8081e-05, Linf 0.00864776, total time[s] 0.068925 +Converged at iteration 27, L1 4.71822e-05, Linf 0.00260441, total time[s] 0.071575 +Converged at iteration 24, L1 5.70347e-05, Linf 0.0040122, total time[s] 0.065347 +Converged at iteration 23, L1 8.7877e-05, Linf 0.00448216, total time[s] 0.061968 +Converged at iteration 26, L1 7.86435e-05, Linf 0.00463501, total time[s] 0.066407 +Converged at iteration 27, L1 8.07819e-05, Linf 0.00456178, total time[s] 0.069143 +Converged at iteration 27, L1 8.16214e-05, Linf 0.00643667, total time[s] 0.070603 +Converged at iteration 32, L1 8.15014e-05, Linf 0.00449182, total time[s] 0.089802 +Converged at iteration 27, L1 7.02929e-05, Linf 0.00206545, total time[s] 0.073426 +Converged at iteration 31, L1 7.57822e-05, Linf 0.010183, total time[s] 0.085049 +Converged at iteration 31, L1 5.56307e-05, Linf 0.00241755, total time[s] 0.084708 +Converged at iteration 32, L1 9.43729e-05, Linf 0.00396479, total time[s] 0.097591 +Converged at iteration 30, L1 9.65038e-05, Linf 0.00622801, total time[s] 0.082067 +Converged at iteration 32, L1 7.29739e-05, Linf 0.0142952, total time[s] 0.095726 +Converged at iteration 29, L1 9.28949e-05, Linf 0.0145396, total time[s] 0.082222 +Converged at iteration 25, L1 6.74759e-05, Linf 0.00310686, total time[s] 0.158761 +Converged at iteration 37, L1 9.49515e-05, Linf 0.0120608, total time[s] 0.144929 +Converged at iteration 35, L1 7.31499e-05, Linf 0.00884399, total time[s] 0.09813 +Converged at iteration 25, L1 7.48544e-05, Linf 0.00322728, total time[s] 0.066606 +Converged at iteration 25, L1 7.97881e-05, Linf 0.00624015, total time[s] 0.065715 +Converged at iteration 25, L1 4.14098e-05, Linf 0.00705742, total time[s] 0.069518 +Converged at iteration 26, L1 6.08882e-05, Linf 0.0149872, total time[s] 0.075388 +Converged at iteration 21, L1 6.52531e-05, Linf 0.0108887, total time[s] 0.055922 +Converged at iteration 19, L1 9.87518e-05, Linf 0.00373788, total time[s] 0.054392 +Converged at iteration 23, L1 8.60638e-05, Linf 0.00298719, total time[s] 0.062069 +Converged at iteration 24, L1 8.01896e-05, Linf 0.00314092, total time[s] 0.065595 +Converged at iteration 21, L1 9.9815e-05, Linf 0.00451335, total time[s] 0.056191 +Converged at iteration 21, L1 4.75267e-05, Linf 0.00231909, total time[s] 0.059259 +Converged at iteration 32, L1 4.89652e-05, Linf 0.0084485, total time[s] 0.096367 +Converged at iteration 22, L1 6.98554e-05, Linf 0.00431955, total time[s] 0.066973 +Converged at iteration 23, L1 9.85718e-05, Linf 0.00876034, total time[s] 0.065827 +Converged at iteration 26, L1 9.86893e-05, Linf 0.00531244, total time[s] 0.077486 +Converged at iteration 24, L1 5.5351e-05, Linf 0.00374237, total time[s] 0.067048 +Converged at iteration 23, L1 8.77965e-05, Linf 0.0043755, total time[s] 0.063453 +Converged at iteration 26, L1 8.21004e-05, Linf 0.00482232, total time[s] 0.067618 +Converged at iteration 27, L1 8.95926e-05, Linf 0.00485992, total time[s] 0.072857 +Converged at iteration 27, L1 8.29302e-05, Linf 0.00648297, total time[s] 0.069937 +Converged at iteration 32, L1 8.49629e-05, Linf 0.00483933, total time[s] 0.08245 +Converged at iteration 27, L1 7.6059e-05, Linf 0.00220142, total time[s] 0.070142 +Converged at iteration 31, L1 7.62648e-05, Linf 0.0102598, total time[s] 0.081451 +Converged at iteration 31, L1 5.64957e-05, Linf 0.00243941, total time[s] 0.088827 +Converged at iteration 33, L1 4.31722e-05, Linf 0.00203545, total time[s] 0.090775 +Converged at iteration 31, L1 4.30364e-05, Linf 0.00660978, total time[s] 0.08325 +Converged at iteration 32, L1 7.96085e-05, Linf 0.0154102, total time[s] 0.086312 +Converged at iteration 29, L1 9.57415e-05, Linf 0.0147616, total time[s] 0.074707 +Converged at iteration 25, L1 6.84783e-05, Linf 0.00316329, total time[s] 0.068748 +Converged at iteration 37, L1 9.43115e-05, Linf 0.0121376, total time[s] 0.103088 +Converged at iteration 35, L1 7.42035e-05, Linf 0.00899503, total time[s] 0.092847 +Converged at iteration 25, L1 7.46442e-05, Linf 0.00320055, total time[s] 0.066156 +Converged at iteration 25, L1 8.10768e-05, Linf 0.0062089, total time[s] 0.065279 +Converged at iteration 25, L1 4.20564e-05, Linf 0.0069116, total time[s] 0.064985 +Converged at iteration 26, L1 6.24713e-05, Linf 0.0151482, total time[s] 0.068258 +Converged at iteration 21, L1 6.51188e-05, Linf 0.0109144, total time[s] 0.0554 +Converged at iteration 20, L1 5.15155e-05, Linf 0.00217487, total time[s] 0.065143 +Converged at iteration 23, L1 8.60507e-05, Linf 0.00298389, total time[s] 0.062047 +Converged at iteration 24, L1 8.10129e-05, Linf 0.0031399, total time[s] 0.063034 +Converged at iteration 22, L1 5.30099e-05, Linf 0.00241822, total time[s] 0.058376 +Converged at iteration 21, L1 4.8379e-05, Linf 0.0023506, total time[s] 0.05652 +Converged at iteration 32, L1 4.94532e-05, Linf 0.00831208, total time[s] 0.082029 +Converged at iteration 22, L1 7.02751e-05, Linf 0.0042699, total time[s] 0.057932 +Converged at iteration 23, L1 9.85138e-05, Linf 0.00956218, total time[s] 0.060994 +Converged at iteration 26, L1 9.88746e-05, Linf 0.00530558, total time[s] 0.067646 +Converged at iteration 24, L1 5.5113e-05, Linf 0.00367798, total time[s] 0.063239 +Converged at iteration 23, L1 8.74074e-05, Linf 0.0043345, total time[s] 0.064172 +Converged at iteration 26, L1 8.41524e-05, Linf 0.00488408, total time[s] 0.07406 +Converged at iteration 27, L1 9.21121e-05, Linf 0.00499038, total time[s] 0.082037 +Converged at iteration 27, L1 8.33933e-05, Linf 0.00649527, total time[s] 0.07067 +Converged at iteration 32, L1 8.62056e-05, Linf 0.004928, total time[s] 0.08188 +Converged at iteration 27, L1 7.74404e-05, Linf 0.00216376, total time[s] 0.070144 +Converged at iteration 31, L1 7.61466e-05, Linf 0.0102632, total time[s] 0.079785 +Converged at iteration 31, L1 5.71065e-05, Linf 0.00244425, total time[s] 0.081881 +Converged at iteration 33, L1 4.28104e-05, Linf 0.0020771, total time[s] 0.084997 +Converged at iteration 31, L1 4.28664e-05, Linf 0.00481815, total time[s] 0.079604 +Converged at iteration 32, L1 8.12392e-05, Linf 0.0157105, total time[s] 0.081766 +Converged at iteration 29, L1 9.31618e-05, Linf 0.0147932, total time[s] 0.074903 +Converged at iteration 25, L1 6.87477e-05, Linf 0.00318221, total time[s] 0.079057 +Converged at iteration 37, L1 9.61362e-05, Linf 0.012477, total time[s] 0.114391 +Converged at iteration 35, L1 7.93482e-05, Linf 0.00965086, total time[s] 0.089181 +Converged at iteration 25, L1 7.42428e-05, Linf 0.00312458, total time[s] 0.065804 +Converged at iteration 25, L1 8.63013e-05, Linf 0.00627471, total time[s] 0.06601 +Converged at iteration 24, L1 9.59784e-05, Linf 0.0151502, total time[s] 0.064537 +Converged at iteration 26, L1 6.67899e-05, Linf 0.0159101, total time[s] 0.067349 +Converged at iteration 21, L1 6.54052e-05, Linf 0.0110034, total time[s] 0.056685 +Converged at iteration 20, L1 5.47758e-05, Linf 0.00225085, total time[s] 0.054638 +Converged at iteration 23, L1 8.42507e-05, Linf 0.00298142, total time[s] 0.062364 +Converged at iteration 24, L1 8.27168e-05, Linf 0.00313659, total time[s] 0.063515 +Converged at iteration 22, L1 5.46446e-05, Linf 0.00241864, total time[s] 0.058249 +Converged at iteration 21, L1 5.12815e-05, Linf 0.00245392, total time[s] 0.056192 +Converged at iteration 32, L1 5.20482e-05, Linf 0.00846675, total time[s] 0.081096 +Converged at iteration 22, L1 7.26752e-05, Linf 0.0045107, total time[s] 0.057374 +Converged at iteration 23, L1 9.98148e-05, Linf 0.00583512, total time[s] 0.060275 +Converged at iteration 26, L1 9.56658e-05, Linf 0.00516368, total time[s] 0.066788 +Converged at iteration 24, L1 5.30444e-05, Linf 0.00372995, total time[s] 0.06207 +Converged at iteration 23, L1 8.62699e-05, Linf 0.00425462, total time[s] 0.059665 +Converged at iteration 26, L1 8.79598e-05, Linf 0.00510123, total time[s] 0.06711 +Converged at iteration 28, L1 5.36788e-05, Linf 0.00315558, total time[s] 0.071488 +Converged at iteration 27, L1 8.51712e-05, Linf 0.00657684, total time[s] 0.06891 +Converged at iteration 32, L1 8.78867e-05, Linf 0.0050551, total time[s] 0.081642 +Converged at iteration 27, L1 8.46666e-05, Linf 0.00226459, total time[s] 0.068874 +Converged at iteration 31, L1 7.91308e-05, Linf 0.0103903, total time[s] 0.078342 +Converged at iteration 31, L1 5.88773e-05, Linf 0.00243817, total time[s] 0.078774 +Converged at iteration 33, L1 5.05061e-05, Linf 0.00570386, total time[s] 0.082579 +Converged at iteration 31, L1 4.6067e-05, Linf 0.00517785, total time[s] 0.078253 +Converged at iteration 32, L1 8.91954e-05, Linf 0.0170114, total time[s] 0.080423 +Converged at iteration 29, L1 9.51543e-05, Linf 0.0149891, total time[s] 0.073291 +Converged at iteration 25, L1 6.91523e-05, Linf 0.00325029, total time[s] 0.065475 +Converged at iteration 37, L1 9.65761e-05, Linf 0.0125541, total time[s] 0.103327 +Converged at iteration 35, L1 8.05241e-05, Linf 0.00980445, total time[s] 0.093664 +Converged at iteration 25, L1 7.37913e-05, Linf 0.00308852, total time[s] 0.064463 +Converged at iteration 25, L1 8.7401e-05, Linf 0.00626699, total time[s] 0.0933 +Converged at iteration 24, L1 9.54582e-05, Linf 0.0148615, total time[s] 0.069001 +Converged at iteration 26, L1 6.7986e-05, Linf 0.0161008, total time[s] 0.066576 +Converged at iteration 21, L1 6.45218e-05, Linf 0.0110397, total time[s] 0.056044 +Converged at iteration 20, L1 5.63293e-05, Linf 0.00226295, total time[s] 0.053295 +Converged at iteration 23, L1 8.41738e-05, Linf 0.00299984, total time[s] 0.06368 +Converged at iteration 24, L1 8.34278e-05, Linf 0.00313294, total time[s] 0.062954 +Converged at iteration 22, L1 5.50417e-05, Linf 0.0024323, total time[s] 0.058237 +Converged at iteration 21, L1 5.13059e-05, Linf 0.00248552, total time[s] 0.055328 +Converged at iteration 32, L1 5.25716e-05, Linf 0.00833341, total time[s] 0.080584 +Converged at iteration 22, L1 7.52361e-05, Linf 0.00712437, total time[s] 0.059211 +Converged at iteration 23, L1 9.99381e-05, Linf 0.00632493, total time[s] 0.066601 +Converged at iteration 26, L1 9.54697e-05, Linf 0.00512393, total time[s] 0.066625 +Converged at iteration 24, L1 5.25101e-05, Linf 0.00370204, total time[s] 0.062448 +Converged at iteration 23, L1 8.60966e-05, Linf 0.00423055, total time[s] 0.059689 +Converged at iteration 26, L1 8.93933e-05, Linf 0.00513244, total time[s] 0.071338 +Converged at iteration 28, L1 5.45141e-05, Linf 0.00329347, total time[s] 0.077324 +Converged at iteration 27, L1 8.54007e-05, Linf 0.0066188, total time[s] 0.072471 +Converged at iteration 32, L1 8.83728e-05, Linf 0.00508377, total time[s] 0.080292 +Converged at iteration 27, L1 8.60245e-05, Linf 0.00225975, total time[s] 0.071368 +Converged at iteration 31, L1 7.65144e-05, Linf 0.0102698, total time[s] 0.078382 +Converged at iteration 31, L1 5.72217e-05, Linf 0.00246283, total time[s] 0.078702 +Converged at iteration 33, L1 4.72639e-05, Linf 0.00229431, total time[s] 0.082623 +Converged at iteration 31, L1 4.71877e-05, Linf 0.00529537, total time[s] 0.078331 +Converged at iteration 32, L1 9.1347e-05, Linf 0.0173351, total time[s] 0.081339 +Converged at iteration 29, L1 9.34062e-05, Linf 0.0150114, total time[s] 0.073483 +Converged at iteration 25, L1 6.88151e-05, Linf 0.00324907, total time[s] 0.064699 +Converged at iteration 37, L1 9.81983e-05, Linf 0.0128731, total time[s] 0.096031 +Converged at iteration 35, L1 8.54319e-05, Linf 0.0104573, total time[s] 0.09296 +Converged at iteration 25, L1 7.27995e-05, Linf 0.0030275, total time[s] 0.064628 +Converged at iteration 25, L1 9.40081e-05, Linf 0.0064156, total time[s] 0.065245 +Converged at iteration 24, L1 9.33522e-05, Linf 0.0137833, total time[s] 0.062137 +Converged at iteration 26, L1 7.33305e-05, Linf 0.0169757, total time[s] 0.066825 +Converged at iteration 21, L1 6.44616e-05, Linf 0.0111275, total time[s] 0.055393 +Converged at iteration 20, L1 5.88786e-05, Linf 0.00238634, total time[s] 0.05265 +Converged at iteration 23, L1 8.20376e-05, Linf 0.0029661, total time[s] 0.060059 +Converged at iteration 24, L1 8.58726e-05, Linf 0.00310872, total time[s] 0.067043 +Converged at iteration 22, L1 5.60984e-05, Linf 0.00245041, total time[s] 0.059268 +Converged at iteration 21, L1 5.3576e-05, Linf 0.00257905, total time[s] 0.056517 +Converged at iteration 32, L1 5.54557e-05, Linf 0.00849648, total time[s] 0.080682 +Converged at iteration 22, L1 7.81327e-05, Linf 0.00741745, total time[s] 0.057676 +Converged at iteration 24, L1 5.35129e-05, Linf 0.0058013, total time[s] 0.062028 +Converged at iteration 26, L1 9.34836e-05, Linf 0.0049928, total time[s] 0.067173 +Converged at iteration 24, L1 5.07537e-05, Linf 0.00354514, total time[s] 0.062327 +Converged at iteration 23, L1 8.53131e-05, Linf 0.00417718, total time[s] 0.059598 +Converged at iteration 26, L1 9.22938e-05, Linf 0.00532938, total time[s] 0.066553 +Converged at iteration 28, L1 6.08397e-05, Linf 0.00353392, total time[s] 0.071745 +Converged at iteration 27, L1 8.77455e-05, Linf 0.00667929, total time[s] 0.069169 +Converged at iteration 32, L1 9.07519e-05, Linf 0.00520726, total time[s] 0.084026 +Converged at iteration 27, L1 9.2966e-05, Linf 0.00236989, total time[s] 0.070058 +Converged at iteration 31, L1 7.72117e-05, Linf 0.0103619, total time[s] 0.078585 +Converged at iteration 31, L1 5.83696e-05, Linf 0.00240728, total time[s] 0.079202 +Converged at iteration 33, L1 5.30869e-05, Linf 0.00247768, total time[s] 0.084777 +Converged at iteration 31, L1 5.1663e-05, Linf 0.00572968, total time[s] 0.078851 +Converged at iteration 33, L1 4.18397e-05, Linf 0.00770137, total time[s] 0.082779 +Converged at iteration 29, L1 9.39706e-05, Linf 0.0151762, total time[s] 0.077042 +Converged at iteration 25, L1 6.94738e-05, Linf 0.00314637, total time[s] 0.068358 +Converged at iteration 37, L1 9.85049e-05, Linf 0.0129566, total time[s] 0.097375 +Converged at iteration 35, L1 8.67218e-05, Linf 0.0106248, total time[s] 0.090907 +Converged at iteration 25, L1 7.24538e-05, Linf 0.00299956, total time[s] 0.064898 +Converged at iteration 25, L1 9.53574e-05, Linf 0.00641722, total time[s] 0.067731 +Converged at iteration 24, L1 9.30498e-05, Linf 0.0135601, total time[s] 0.068085 +Converged at iteration 26, L1 7.47992e-05, Linf 0.017206, total time[s] 0.067344 +Converged at iteration 21, L1 6.46591e-05, Linf 0.0111621, total time[s] 0.055453 +Converged at iteration 20, L1 6.00382e-05, Linf 0.00243969, total time[s] 0.053903 +Converged at iteration 23, L1 8.09077e-05, Linf 0.0029467, total time[s] 0.062233 +Converged at iteration 24, L1 8.6689e-05, Linf 0.00289439, total time[s] 0.063126 +Converged at iteration 22, L1 5.65371e-05, Linf 0.00245673, total time[s] 0.058048 +Converged at iteration 21, L1 5.41539e-05, Linf 0.00260911, total time[s] 0.055414 +Converged at iteration 32, L1 5.62441e-05, Linf 0.00855611, total time[s] 0.081896 +Converged at iteration 22, L1 7.64597e-05, Linf 0.00476428, total time[s] 0.057054 +Converged at iteration 24, L1 5.34368e-05, Linf 0.00515716, total time[s] 0.067176 +Converged at iteration 26, L1 9.36843e-05, Linf 0.00499505, total time[s] 0.070663 +Converged at iteration 24, L1 5.01095e-05, Linf 0.00347249, total time[s] 0.062495 +Converged at iteration 23, L1 8.50961e-05, Linf 0.00413084, total time[s] 0.062397 +Converged at iteration 26, L1 9.309e-05, Linf 0.00539757, total time[s] 0.069943 +Converged at iteration 28, L1 6.18309e-05, Linf 0.0036405, total time[s] 0.07202 +Converged at iteration 27, L1 8.70468e-05, Linf 0.00669331, total time[s] 0.069522 +Converged at iteration 32, L1 9.02633e-05, Linf 0.00523148, total time[s] 0.08036 +Converged at iteration 27, L1 9.42606e-05, Linf 0.00234006, total time[s] 0.06889 +Converged at iteration 31, L1 7.745e-05, Linf 0.0104925, total time[s] 0.07981 +Converged at iteration 31, L1 5.7403e-05, Linf 0.00241756, total time[s] 0.078161 +Converged at iteration 33, L1 5.08587e-05, Linf 0.00250958, total time[s] 0.083268 +Converged at iteration 31, L1 5.27606e-05, Linf 0.00582216, total time[s] 0.078164 +Converged at iteration 33, L1 4.23626e-05, Linf 0.00787243, total time[s] 0.08254 +Converged at iteration 29, L1 9.75534e-05, Linf 0.0151948, total time[s] 0.073712 +Converged at iteration 25, L1 6.96347e-05, Linf 0.00312889, total time[s] 0.097401 +Converged at iteration 38, L1 3.1244e-05, Linf 0.00725126, total time[s] 0.15722 +Converged at iteration 35, L1 9.05794e-05, Linf 0.011141, total time[s] 0.103798 +Converged at iteration 25, L1 7.18243e-05, Linf 0.00298372, total time[s] 0.075207 +Converged at iteration 26, L1 4.47665e-05, Linf 0.00325654, total time[s] 0.076769 +Converged at iteration 24, L1 9.2414e-05, Linf 0.0131572, total time[s] 0.083266 +Converged at iteration 26, L1 7.93805e-05, Linf 0.0180073, total time[s] 0.07143 +Converged at iteration 21, L1 6.51478e-05, Linf 0.0112348, total time[s] 0.055699 +Converged at iteration 20, L1 6.07842e-05, Linf 0.00256542, total time[s] 0.064426 +Converged at iteration 23, L1 7.9215e-05, Linf 0.00276151, total time[s] 0.076148 +Converged at iteration 24, L1 8.88715e-05, Linf 0.00293562, total time[s] 0.066594 +Converged at iteration 22, L1 5.68944e-05, Linf 0.00247433, total time[s] 0.058806 +Converged at iteration 21, L1 5.59472e-05, Linf 0.002654, total time[s] 0.056245 +Converged at iteration 32, L1 5.84794e-05, Linf 0.00849011, total time[s] 0.083149 +Converged at iteration 22, L1 7.83517e-05, Linf 0.00499537, total time[s] 0.058869 +Converged at iteration 24, L1 5.37066e-05, Linf 0.00453142, total time[s] 0.063717 +Converged at iteration 26, L1 9.28261e-05, Linf 0.00494509, total time[s] 0.068727 +Converged at iteration 24, L1 4.85965e-05, Linf 0.00325015, total time[s] 0.065554 +Converged at iteration 23, L1 8.31058e-05, Linf 0.00400349, total time[s] 0.060355 +Converged at iteration 26, L1 9.54846e-05, Linf 0.00553599, total time[s] 0.067914 +Converged at iteration 28, L1 6.52827e-05, Linf 0.00379396, total time[s] 0.072716 +Converged at iteration 27, L1 8.77166e-05, Linf 0.00674785, total time[s] 0.070244 +Converged at iteration 32, L1 9.1147e-05, Linf 0.00530907, total time[s] 0.082756 +Converged at iteration 27, L1 9.92063e-05, Linf 0.00240063, total time[s] 0.069928 +Converged at iteration 31, L1 7.78981e-05, Linf 0.0105228, total time[s] 0.079359 +Converged at iteration 31, L1 5.73921e-05, Linf 0.00245622, total time[s] 0.079616 +Converged at iteration 33, L1 5.4099e-05, Linf 0.00267292, total time[s] 0.084421 +Converged at iteration 31, L1 5.64653e-05, Linf 0.00615512, total time[s] 0.079485 +Converged at iteration 33, L1 4.45445e-05, Linf 0.00844372, total time[s] 0.084253 +Converged at iteration 29, L1 9.44492e-05, Linf 0.0153288, total time[s] 0.075162 +Converged at iteration 25, L1 7.01622e-05, Linf 0.00309891, total time[s] 0.065716 +Converged at iteration 38, L1 3.07633e-05, Linf 0.00722774, total time[s] 0.097439 +Converged at iteration 36, L1 4.54103e-05, Linf 0.00558595, total time[s] 0.094119 +Converged at iteration 25, L1 7.15412e-05, Linf 0.00297291, total time[s] 0.06558 +Converged at iteration 26, L1 4.5705e-05, Linf 0.00329004, total time[s] 0.06824 +Converged at iteration 24, L1 9.21928e-05, Linf 0.0127349, total time[s] 0.063623 +Converged at iteration 26, L1 8.07685e-05, Linf 0.0182604, total time[s] 0.078584 +Converged at iteration 21, L1 6.53136e-05, Linf 0.0112656, total time[s] 0.067004 +Converged at iteration 20, L1 6.17533e-05, Linf 0.00261248, total time[s] 0.061153 +Converged at iteration 23, L1 7.81844e-05, Linf 0.00266536, total time[s] 0.061304 +Converged at iteration 24, L1 8.93798e-05, Linf 0.00294423, total time[s] 0.066878 +Converged at iteration 22, L1 5.73348e-05, Linf 0.00248256, total time[s] 0.063375 +Converged at iteration 21, L1 5.63934e-05, Linf 0.00267085, total time[s] 0.060574 +Converged at iteration 32, L1 5.79965e-05, Linf 0.0083815, total time[s] 0.088801 +Converged at iteration 22, L1 8.29615e-05, Linf 0.00493923, total time[s] 0.059211 +Converged at iteration 24, L1 5.38871e-05, Linf 0.00454567, total time[s] 0.065723 +Converged at iteration 26, L1 9.24208e-05, Linf 0.00494503, total time[s] 0.073433 +Converged at iteration 24, L1 4.81866e-05, Linf 0.003179, total time[s] 0.068412 +Converged at iteration 23, L1 8.21267e-05, Linf 0.00394546, total time[s] 0.06661 +Converged at iteration 26, L1 9.66478e-05, Linf 0.00557822, total time[s] 0.070904 +Converged at iteration 28, L1 6.59006e-05, Linf 0.00390097, total time[s] 0.073283 +Converged at iteration 27, L1 8.83035e-05, Linf 0.00677019, total time[s] 0.070558 +Converged at iteration 32, L1 9.12708e-05, Linf 0.00533402, total time[s] 0.082321 +Converged at iteration 28, L1 5.92807e-05, Linf 0.00180994, total time[s] 0.072775 +Converged at iteration 31, L1 7.82583e-05, Linf 0.0105288, total time[s] 0.099566 +Converged at iteration 31, L1 6.01981e-05, Linf 0.00249173, total time[s] 0.07924 +Converged at iteration 33, L1 5.51511e-05, Linf 0.00270798, total time[s] 0.084872 +Converged at iteration 31, L1 5.77503e-05, Linf 0.0062897, total time[s] 0.078889 +Converged at iteration 33, L1 4.51868e-05, Linf 0.00860128, total time[s] 0.083719 +Converged at iteration 29, L1 9.44128e-05, Linf 0.0153425, total time[s] 0.11255 +Converged at iteration 25, L1 6.99635e-05, Linf 0.00309275, total time[s] 0.069983 +Converged at iteration 38, L1 3.15158e-05, Linf 0.00752784, total time[s] 0.109154 +Converged at iteration 36, L1 6.13492e-05, Linf 0.00601161, total time[s] 0.100582 +Converged at iteration 25, L1 7.13178e-05, Linf 0.00294531, total time[s] 0.064898 +Converged at iteration 26, L1 4.99544e-05, Linf 0.00349024, total time[s] 0.074834 +Converged at iteration 24, L1 9.21998e-05, Linf 0.0119828, total time[s] 0.073923 +Converged at iteration 26, L1 8.84072e-05, Linf 0.0194889, total time[s] 0.079362 +Converged at iteration 21, L1 6.6843e-05, Linf 0.0113509, total time[s] 0.054701 +Converged at iteration 20, L1 6.58691e-05, Linf 0.0027526, total time[s] 0.052835 +Converged at iteration 23, L1 7.57779e-05, Linf 0.00260448, total time[s] 0.064902 +Converged at iteration 24, L1 9.18191e-05, Linf 0.00299191, total time[s] 0.061581 +Converged at iteration 22, L1 5.81518e-05, Linf 0.00249104, total time[s] 0.058631 +Converged at iteration 21, L1 5.87423e-05, Linf 0.00275753, total time[s] 0.054498 +Converged at iteration 32, L1 6.29831e-05, Linf 0.00851605, total time[s] 0.080273 +Converged at iteration 22, L1 8.71238e-05, Linf 0.00521473, total time[s] 0.057171 +Converged at iteration 24, L1 5.5622e-05, Linf 0.00466401, total time[s] 0.061541 +Converged at iteration 26, L1 9.03529e-05, Linf 0.00487354, total time[s] 0.068204 +Converged at iteration 23, L1 9.76836e-05, Linf 0.00445384, total time[s] 0.05954 +Converged at iteration 23, L1 7.76781e-05, Linf 0.00365642, total time[s] 0.059842 +Converged at iteration 27, L1 5.19844e-05, Linf 0.00306977, total time[s] 0.06995 +Converged at iteration 28, L1 6.97122e-05, Linf 0.00423309, total time[s] 0.071072 +Converged at iteration 27, L1 9.07724e-05, Linf 0.00685684, total time[s] 0.070157 +Converged at iteration 32, L1 9.16464e-05, Linf 0.00554912, total time[s] 0.1052 +Converged at iteration 28, L1 6.35432e-05, Linf 0.00192, total time[s] 0.081973 +Converged at iteration 31, L1 7.92719e-05, Linf 0.0107622, total time[s] 0.101523 +Converged at iteration 31, L1 6.4397e-05, Linf 0.00246393, total time[s] 0.086702 +Converged at iteration 33, L1 6.11826e-05, Linf 0.00288616, total time[s] 0.103334 +Converged at iteration 31, L1 6.3635e-05, Linf 0.00671961, total time[s] 0.085718 +Converged at iteration 33, L1 4.86406e-05, Linf 0.00945855, total time[s] 0.107973 +Converged at iteration 29, L1 9.84976e-05, Linf 0.0163008, total time[s] 0.076097 +Converged at iteration 25, L1 7.00777e-05, Linf 0.0030437, total time[s] 0.066017 +Converged at iteration 38, L1 3.164e-05, Linf 0.00752861, total time[s] 0.096884 +Converged at iteration 35, L1 9.88384e-05, Linf 0.0121945, total time[s] 0.089141 +Converged at iteration 25, L1 7.08879e-05, Linf 0.00293445, total time[s] 0.067415 +Converged at iteration 26, L1 5.04509e-05, Linf 0.0035243, total time[s] 0.068272 +Converged at iteration 24, L1 9.10235e-05, Linf 0.0118497, total time[s] 0.063412 +Converged at iteration 26, L1 8.98451e-05, Linf 0.0197862, total time[s] 0.068563 +Converged at iteration 21, L1 6.80496e-05, Linf 0.0117395, total time[s] 0.057753 +Converged at iteration 20, L1 6.70799e-05, Linf 0.00277478, total time[s] 0.098553 +Converged at iteration 23, L1 7.48828e-05, Linf 0.00258917, total time[s] 0.065069 +Converged at iteration 24, L1 9.20947e-05, Linf 0.0030011, total time[s] 0.064765 +Converged at iteration 22, L1 5.85331e-05, Linf 0.00249686, total time[s] 0.061262 +Converged at iteration 21, L1 5.90784e-05, Linf 0.00277213, total time[s] 0.058769 +Converged at iteration 32, L1 6.37969e-05, Linf 0.00852616, total time[s] 0.08876 +Converged at iteration 22, L1 8.34513e-05, Linf 0.00516721, total time[s] 0.062742 +Converged at iteration 24, L1 5.60792e-05, Linf 0.00467179, total time[s] 0.065243 +Converged at iteration 26, L1 9.08958e-05, Linf 0.00487595, total time[s] 0.071689 +Converged at iteration 23, L1 9.71122e-05, Linf 0.00436908, total time[s] 0.066773 +Converged at iteration 23, L1 7.72084e-05, Linf 0.00357294, total time[s] 0.061894 +Converged at iteration 27, L1 5.24114e-05, Linf 0.00308473, total time[s] 0.072264 +Converged at iteration 28, L1 7.12931e-05, Linf 0.00430584, total time[s] 0.079886 +Converged at iteration 27, L1 9.0755e-05, Linf 0.00687755, total time[s] 0.080393 +Converged at iteration 32, L1 9.1654e-05, Linf 0.00561267, total time[s] 0.091664 +Converged at iteration 28, L1 6.44709e-05, Linf 0.00190543, total time[s] 0.072964 +Converged at iteration 31, L1 7.91995e-05, Linf 0.0106272, total time[s] 0.078503 +Converged at iteration 31, L1 5.81702e-05, Linf 0.00246599, total time[s] 0.078687 +Converged at iteration 33, L1 5.89888e-05, Linf 0.00292003, total time[s] 0.083724 +Converged at iteration 31, L1 6.47883e-05, Linf 0.0068313, total time[s] 0.079084 +Converged at iteration 33, L1 5.01684e-05, Linf 0.00965895, total time[s] 0.082959 +Converged at iteration 29, L1 9.48853e-05, Linf 0.0165797, total time[s] 0.074268 +Converged at iteration 25, L1 6.93685e-05, Linf 0.00303715, total time[s] 0.064184 +Converged at iteration 38, L1 3.31031e-05, Linf 0.00769443, total time[s] 0.09697 +Converged at iteration 36, L1 3.56151e-05, Linf 0.00633733, total time[s] 0.089975 +Converged at iteration 25, L1 6.99022e-05, Linf 0.0029193, total time[s] 0.062467 +Converged at iteration 26, L1 5.27742e-05, Linf 0.00364576, total time[s] 0.065706 +Converged at iteration 24, L1 9.69642e-05, Linf 0.0114719, total time[s] 0.059989 +Converged at iteration 26, L1 9.53735e-05, Linf 0.0206083, total time[s] 0.064811 +Converged at iteration 21, L1 6.88369e-05, Linf 0.0114779, total time[s] 0.05323 +Converged at iteration 20, L1 6.89482e-05, Linf 0.00286789, total time[s] 0.050697 +Converged at iteration 23, L1 7.34447e-05, Linf 0.00256085, total time[s] 0.059048 +Converged at iteration 24, L1 9.34063e-05, Linf 0.0030214, total time[s] 0.059088 +Converged at iteration 22, L1 5.93877e-05, Linf 0.00250793, total time[s] 0.056778 +Converged at iteration 21, L1 6.0669e-05, Linf 0.00289342, total time[s] 0.053649 +Converged at iteration 32, L1 6.73146e-05, Linf 0.00840232, total time[s] 0.077563 +Converged at iteration 22, L1 9.47471e-05, Linf 0.0052922, total time[s] 0.057072 +Converged at iteration 24, L1 5.977e-05, Linf 0.0106314, total time[s] 0.059871 +Converged at iteration 26, L1 9.00377e-05, Linf 0.00484552, total time[s] 0.064092 +Converged at iteration 23, L1 9.47682e-05, Linf 0.00416285, total time[s] 0.058947 +Converged at iteration 23, L1 7.85458e-05, Linf 0.00337629, total time[s] 0.059741 +Converged at iteration 27, L1 5.46185e-05, Linf 0.0031587, total time[s] 0.066561 +Converged at iteration 28, L1 7.89779e-05, Linf 0.00456496, total time[s] 0.068565 +Converged at iteration 27, L1 9.27508e-05, Linf 0.00693624, total time[s] 0.066358 +Converged at iteration 32, L1 9.25302e-05, Linf 0.00575258, total time[s] 0.077816 +Converged at iteration 28, L1 6.66766e-05, Linf 0.00192726, total time[s] 0.068651 +Converged at iteration 31, L1 8.29562e-05, Linf 0.0105857, total time[s] 0.076013 +Converged at iteration 31, L1 6.34615e-05, Linf 0.00243169, total time[s] 0.075947 +Converged at iteration 33, L1 6.5027e-05, Linf 0.00428997, total time[s] 0.07999 +Converged at iteration 31, L1 7.00917e-05, Linf 0.0071378, total time[s] 0.075476 +Converged at iteration 33, L1 5.1395e-05, Linf 0.0102454, total time[s] 0.080754 +Converged at iteration 30, L1 3.15934e-05, Linf 0.00590694, total time[s] 0.072979 +Converged at iteration 25, L1 6.95651e-05, Linf 0.00502724, total time[s] 0.062962 +Converged at iteration 38, L1 3.24947e-05, Linf 0.00778355, total time[s] 0.10466 +Converged at iteration 36, L1 3.57312e-05, Linf 0.00643376, total time[s] 0.088804 +Converged at iteration 25, L1 7.02814e-05, Linf 0.00291077, total time[s] 0.062836 +Converged at iteration 26, L1 5.27377e-05, Linf 0.0036795, total time[s] 0.064504 +Converged at iteration 24, L1 9.15696e-05, Linf 0.0113446, total time[s] 0.060071 +Converged at iteration 26, L1 9.62312e-05, Linf 0.0209417, total time[s] 0.067528 +Converged at iteration 21, L1 6.85721e-05, Linf 0.011523, total time[s] 0.053352 +Converged at iteration 20, L1 6.89937e-05, Linf 0.00293193, total time[s] 0.059558 +Converged at iteration 23, L1 7.26125e-05, Linf 0.00253069, total time[s] 0.070864 +Converged at iteration 24, L1 9.4425e-05, Linf 0.00302924, total time[s] 0.059979 +Converged at iteration 22, L1 5.95134e-05, Linf 0.00251074, total time[s] 0.056615 +Converged at iteration 21, L1 6.32581e-05, Linf 0.00293747, total time[s] 0.054908 +Converged at iteration 32, L1 6.84297e-05, Linf 0.00844373, total time[s] 0.077446 +Converged at iteration 22, L1 8.69012e-05, Linf 0.00533657, total time[s] 0.055331 +Converged at iteration 24, L1 5.70143e-05, Linf 0.00474154, total time[s] 0.058869 +Converged at iteration 26, L1 9.07126e-05, Linf 0.00485218, total time[s] 0.066215 +Converged at iteration 23, L1 9.41555e-05, Linf 0.00408683, total time[s] 0.071606 +Converged at iteration 23, L1 7.81331e-05, Linf 0.00329635, total time[s] 0.059006 +Converged at iteration 27, L1 5.40667e-05, Linf 0.00318975, total time[s] 0.066183 +Converged at iteration 28, L1 8.08896e-05, Linf 0.00458069, total time[s] 0.072128 +Converged at iteration 27, L1 9.28414e-05, Linf 0.00696466, total time[s] 0.066564 +Converged at iteration 32, L1 9.30961e-05, Linf 0.00581781, total time[s] 0.078708 +Converged at iteration 28, L1 6.76058e-05, Linf 0.00193224, total time[s] 0.069074 +Converged at iteration 31, L1 8.21862e-05, Linf 0.0108307, total time[s] 0.07599 +Converged at iteration 31, L1 6.26872e-05, Linf 0.00246546, total time[s] 0.077015 +Converged at iteration 33, L1 6.59228e-05, Linf 0.00303957, total time[s] 0.080599 +Converged at iteration 31, L1 7.40626e-05, Linf 0.00726809, total time[s] 0.076012 +Converged at iteration 33, L1 5.28173e-05, Linf 0.0104657, total time[s] 0.079657 +Converged at iteration 29, L1 9.80042e-05, Linf 0.0166488, total time[s] 0.071 +Converged at iteration 25, L1 7.10164e-05, Linf 0.0030145, total time[s] 0.062487 +Converged at iteration 38, L1 3.54823e-05, Linf 0.0080387, total time[s] 0.093243 +Converged at iteration 36, L1 3.81597e-05, Linf 0.00678186, total time[s] 0.092425 +Converged at iteration 25, L1 7.08682e-05, Linf 0.00289655, total time[s] 0.062187 +Converged at iteration 26, L1 5.54431e-05, Linf 0.00386484, total time[s] 0.064355 +Converged at iteration 24, L1 8.98249e-05, Linf 0.0109631, total time[s] 0.059782 +Converged at iteration 27, L1 4.13292e-05, Linf 0.00851514, total time[s] 0.066465 +Converged at iteration 21, L1 7.00606e-05, Linf 0.0116327, total time[s] 0.053443 +Converged at iteration 20, L1 6.98137e-05, Linf 0.00300514, total time[s] 0.0511 +Converged at iteration 23, L1 7.25035e-05, Linf 0.00250061, total time[s] 0.057958 +Converged at iteration 24, L1 9.55975e-05, Linf 0.00306084, total time[s] 0.061729 +Converged at iteration 22, L1 6.01178e-05, Linf 0.00251832, total time[s] 0.05534 +Converged at iteration 21, L1 6.45505e-05, Linf 0.00771652, total time[s] 0.053191 +Converged at iteration 32, L1 7.16911e-05, Linf 0.00845124, total time[s] 0.077896 +Converged at iteration 22, L1 9.84862e-05, Linf 0.00887012, total time[s] 0.055435 +Converged at iteration 24, L1 6.06012e-05, Linf 0.00479702, total time[s] 0.060515 +Converged at iteration 26, L1 8.96802e-05, Linf 0.00481754, total time[s] 0.065361 +Converged at iteration 23, L1 9.14718e-05, Linf 0.00386212, total time[s] 0.057627 +Converged at iteration 23, L1 7.9025e-05, Linf 0.00318012, total time[s] 0.057636 +Converged at iteration 27, L1 5.49081e-05, Linf 0.00328796, total time[s] 0.068077 +Converged at iteration 28, L1 9.04587e-05, Linf 0.00485748, total time[s] 0.068833 +Converged at iteration 27, L1 9.53033e-05, Linf 0.007053, total time[s] 0.06683 +Converged at iteration 32, L1 9.35532e-05, Linf 0.00586231, total time[s] 0.077654 +Converged at iteration 28, L1 7.0677e-05, Linf 0.00195934, total time[s] 0.068764 +Converged at iteration 31, L1 8.26075e-05, Linf 0.0107583, total time[s] 0.076258 +Converged at iteration 31, L1 6.36951e-05, Linf 0.00244152, total time[s] 0.075752 +Converged at iteration 33, L1 6.44548e-05, Linf 0.00313834, total time[s] 0.079727 +Converged at iteration 31, L1 7.80574e-05, Linf 0.00773671, total time[s] 0.076201 +Converged at iteration 33, L1 5.60528e-05, Linf 0.0112467, total time[s] 0.080702 +Converged at iteration 29, L1 9.3944e-05, Linf 0.0160605, total time[s] 0.070717 +Converged at iteration 25, L1 7.0859e-05, Linf 0.00301258, total time[s] 0.062274 +Converged at iteration 38, L1 3.34897e-05, Linf 0.00810847, total time[s] 0.099122 +Converged at iteration 36, L1 6.47568e-05, Linf 0.00688019, total time[s] 0.091885 +Converged at iteration 25, L1 7.02138e-05, Linf 0.00288399, total time[s] 0.062094 +Converged at iteration 26, L1 5.61434e-05, Linf 0.00392567, total time[s] 0.064189 +Converged at iteration 24, L1 8.9765e-05, Linf 0.0108647, total time[s] 0.059934 +Converged at iteration 27, L1 4.24535e-05, Linf 0.00868472, total time[s] 0.066565 +Converged at iteration 21, L1 6.9522e-05, Linf 0.0116723, total time[s] 0.053337 +Converged at iteration 20, L1 7.06168e-05, Linf 0.0030397, total time[s] 0.0538 +Converged at iteration 23, L1 7.2581e-05, Linf 0.00248401, total time[s] 0.058522 +Converged at iteration 24, L1 9.65214e-05, Linf 0.00307043, total time[s] 0.059946 +Converged at iteration 22, L1 6.04636e-05, Linf 0.00252488, total time[s] 0.055338 +Converged at iteration 21, L1 6.35833e-05, Linf 0.00306127, total time[s] 0.053106 +Converged at iteration 32, L1 8.62528e-05, Linf 0.00841196, total time[s] 0.07984 +Converged at iteration 22, L1 9.37591e-05, Linf 0.00554366, total time[s] 0.058068 +Converged at iteration 24, L1 5.89091e-05, Linf 0.00481044, total time[s] 0.06101 +Converged at iteration 26, L1 8.92469e-05, Linf 0.00482376, total time[s] 0.066055 +Converged at iteration 23, L1 9.1258e-05, Linf 0.00381005, total time[s] 0.057881 +Converged at iteration 23, L1 7.93881e-05, Linf 0.00313453, total time[s] 0.058319 +Converged at iteration 27, L1 5.47384e-05, Linf 0.0033147, total time[s] 0.069455 +Converged at iteration 28, L1 9.37502e-05, Linf 0.0049197, total time[s] 0.083614 +Converged at iteration 27, L1 9.5746e-05, Linf 0.00707556, total time[s] 0.079426 +Converged at iteration 32, L1 9.58258e-05, Linf 0.00586339, total time[s] 0.089034 +Converged at iteration 28, L1 7.14113e-05, Linf 0.00196615, total time[s] 0.095623 +Converged at iteration 31, L1 8.2797e-05, Linf 0.0108206, total time[s] 0.091835 +Converged at iteration 31, L1 6.38683e-05, Linf 0.00328224, total time[s] 0.097148 +Converged at iteration 33, L1 6.49385e-05, Linf 0.00318131, total time[s] 0.094736 +Converged at iteration 31, L1 8.09049e-05, Linf 0.00787512, total time[s] 0.079964 +Converged at iteration 33, L1 5.60571e-05, Linf 0.011469, total time[s] 0.083134 +Converged at iteration 29, L1 9.56755e-05, Linf 0.015958, total time[s] 0.073175 +Converged at iteration 25, L1 7.0617e-05, Linf 0.00301883, total time[s] 0.110963 +Converged at iteration 38, L1 3.38962e-05, Linf 0.00839271, total time[s] 0.128634 +Converged at iteration 36, L1 6.98118e-05, Linf 0.00711437, total time[s] 0.110198 +Converged at iteration 25, L1 6.98365e-05, Linf 0.00286545, total time[s] 0.068492 +Converged at iteration 26, L1 5.73441e-05, Linf 0.0040833, total time[s] 0.070915 +Converged at iteration 24, L1 8.79525e-05, Linf 0.0106505, total time[s] 0.071276 +Converged at iteration 27, L1 4.24842e-05, Linf 0.00905653, total time[s] 0.092972 +Converged at iteration 21, L1 7.29033e-05, Linf 0.0117414, total time[s] 0.07232 +Converged at iteration 20, L1 7.03917e-05, Linf 0.00311085, total time[s] 0.089747 +Converged at iteration 23, L1 7.20234e-05, Linf 0.00247348, total time[s] 0.077053 +Converged at iteration 24, L1 9.75352e-05, Linf 0.00308671, total time[s] 0.074031 +Converged at iteration 22, L1 6.06535e-05, Linf 0.00251933, total time[s] 0.069283 +Converged at iteration 21, L1 6.59172e-05, Linf 0.00311784, total time[s] 0.08567 +Converged at iteration 32, L1 7.46577e-05, Linf 0.00863439, total time[s] 0.096708 +Converged at iteration 22, L1 9.39865e-05, Linf 0.00563943, total time[s] 0.069527 +Converged at iteration 24, L1 5.89009e-05, Linf 0.00485485, total time[s] 0.067621 +Converged at iteration 26, L1 9.06335e-05, Linf 0.00481222, total time[s] 0.082634 +Converged at iteration 23, L1 8.99296e-05, Linf 0.00369666, total time[s] 0.073101 +Converged at iteration 23, L1 7.82064e-05, Linf 0.0028876, total time[s] 0.061514 +Converged at iteration 27, L1 5.47145e-05, Linf 0.00337487, total time[s] 0.073017 +Converged at iteration 28, L1 9.56648e-05, Linf 0.00510775, total time[s] 0.073924 +Converged at iteration 27, L1 9.62966e-05, Linf 0.0071389, total time[s] 0.070194 +Converged at iteration 32, L1 9.30495e-05, Linf 0.00585916, total time[s] 0.085087 +Converged at iteration 28, L1 7.36262e-05, Linf 0.00198319, total time[s] 0.078397 +Converged at iteration 31, L1 8.14573e-05, Linf 0.0108116, total time[s] 0.104853 +Converged at iteration 31, L1 6.20548e-05, Linf 0.00249575, total time[s] 0.092995 +Converged at iteration 33, L1 6.64509e-05, Linf 0.00322933, total time[s] 0.094623 +Converged at iteration 31, L1 8.4683e-05, Linf 0.00820216, total time[s] 0.088949 +Converged at iteration 33, L1 5.77642e-05, Linf 0.0120091, total time[s] 0.100751 +Converged at iteration 29, L1 9.33229e-05, Linf 0.0166484, total time[s] 0.089444 +Converged at iteration 25, L1 7.17331e-05, Linf 0.00304072, total time[s] 0.069569 +Converged at iteration 38, L1 3.41431e-05, Linf 0.00830406, total time[s] 0.097496 +Converged at iteration 36, L1 3.87296e-05, Linf 0.0072496, total time[s] 0.112735 +Converged at iteration 25, L1 6.91247e-05, Linf 0.00284536, total time[s] 0.093062 +Converged at iteration 26, L1 5.80249e-05, Linf 0.00414198, total time[s] 0.073491 +Converged at iteration 24, L1 8.79504e-05, Linf 0.0105624, total time[s] 0.062918 +Converged at iteration 27, L1 6.60712e-05, Linf 0.00923073, total time[s] 0.076535 +Converged at iteration 21, L1 7.35377e-05, Linf 0.0117751, total time[s] 0.062039 +Converged at iteration 20, L1 7.1149e-05, Linf 0.0031481, total time[s] 0.065478 +Converged at iteration 23, L1 7.14703e-05, Linf 0.00243353, total time[s] 0.069603 +Converged at iteration 24, L1 9.80743e-05, Linf 0.00309478, total time[s] 0.077871 +Converged at iteration 22, L1 6.04064e-05, Linf 0.00253184, total time[s] 0.079387 +Converged at iteration 21, L1 6.41125e-05, Linf 0.00314968, total time[s] 0.072179 +Converged at iteration 32, L1 7.55542e-05, Linf 0.0084989, total time[s] 0.101204 +Converged at iteration 22, L1 9.09412e-05, Linf 0.00569054, total time[s] 0.069413 +Converged at iteration 24, L1 5.89158e-05, Linf 0.00486633, total time[s] 0.066283 +Converged at iteration 26, L1 8.96852e-05, Linf 0.0048339, total time[s] 0.082941 +Converged at iteration 23, L1 9.03083e-05, Linf 0.00365337, total time[s] 0.067481 +Converged at iteration 23, L1 7.68513e-05, Linf 0.0027913, total time[s] 0.060896 +Converged at iteration 27, L1 5.5482e-05, Linf 0.0034028, total time[s] 0.072454 +Converged at iteration 28, L1 9.7069e-05, Linf 0.00519134, total time[s] 0.074167 +Converged at iteration 27, L1 9.76193e-05, Linf 0.00716777, total time[s] 0.071033 +Converged at iteration 32, L1 9.29176e-05, Linf 0.00587002, total time[s] 0.083283 +Converged at iteration 28, L1 7.46026e-05, Linf 0.00198784, total time[s] 0.073112 +Converged at iteration 31, L1 8.13307e-05, Linf 0.0108124, total time[s] 0.07998 +Converged at iteration 31, L1 6.16255e-05, Linf 0.00248696, total time[s] 0.091468 +Converged at iteration 33, L1 6.52587e-05, Linf 0.00326727, total time[s] 0.084726 +Converged at iteration 31, L1 8.64142e-05, Linf 0.00835549, total time[s] 0.113342 +Converged at iteration 33, L1 5.85053e-05, Linf 0.0122656, total time[s] 0.091779 +Converged at iteration 29, L1 9.5155e-05, Linf 0.0166554, total time[s] 0.076074 +Converged at iteration 25, L1 7.26228e-05, Linf 0.00311074, total time[s] 0.066586 +Converged at iteration 38, L1 4.37642e-05, Linf 0.0117816, total time[s] 0.103127 +Converged at iteration 36, L1 5.32214e-05, Linf 0.01126, total time[s] 0.108271 +Converged at iteration 25, L1 5.89241e-05, Linf 0.0024625, total time[s] 0.073262 +Converged at iteration 26, L1 9.10091e-05, Linf 0.00761208, total time[s] 0.070661 +Converged at iteration 24, L1 8.0358e-05, Linf 0.0090304, total time[s] 0.066648 +Converged at iteration 27, L1 6.72922e-05, Linf 0.0165384, total time[s] 0.070448 +Converged at iteration 21, L1 8.76912e-05, Linf 0.0128047, total time[s] 0.067922 +Converged at iteration 20, L1 8.94727e-05, Linf 0.00375104, total time[s] 0.078972 +Converged at iteration 23, L1 6.14206e-05, Linf 0.00260625, total time[s] 0.077101 +Converged at iteration 25, L1 6.54138e-05, Linf 0.0022415, total time[s] 0.070131 +Converged at iteration 22, L1 6.04671e-05, Linf 0.00251261, total time[s] 0.06367 +Converged at iteration 21, L1 8.45544e-05, Linf 0.00438223, total time[s] 0.060559 +Converged at iteration 33, L1 3.82327e-05, Linf 0.00267602, total time[s] 0.088982 +Converged at iteration 23, L1 6.45939e-05, Linf 0.00410897, total time[s] 0.060453 +Converged at iteration 24, L1 6.99366e-05, Linf 0.00561556, total time[s] 0.062342 +Converged at iteration 26, L1 7.7746e-05, Linf 0.00445069, total time[s] 0.067742 +Converged at iteration 23, L1 8.6853e-05, Linf 0.0031886, total time[s] 0.063129 +Converged at iteration 23, L1 6.93658e-05, Linf 0.00170797, total time[s] 0.063143 +Converged at iteration 27, L1 6.70394e-05, Linf 0.00417927, total time[s] 0.070051 +Converged at iteration 29, L1 8.10466e-05, Linf 0.00477351, total time[s] 0.074988 +Converged at iteration 28, L1 7.01293e-05, Linf 0.00492156, total time[s] 0.075728 +Converged at iteration 32, L1 8.28666e-05, Linf 0.00575289, total time[s] 0.086709 +Converged at iteration 28, L1 9.83544e-05, Linf 0.0023866, total time[s] 0.079501 +Converged at iteration 31, L1 8.70743e-05, Linf 0.0114453, total time[s] 0.083891 +Converged at iteration 31, L1 6.23872e-05, Linf 0.00274819, total time[s] 0.151439 +Converged at iteration 33, L1 7.08129e-05, Linf 0.00350204, total time[s] 0.202765 +Converged at iteration 32, L1 6.04774e-05, Linf 0.00964437, total time[s] 0.107117 +Converged at iteration 37, L1 8.95413e-05, Linf 0.00187774, total time[s] 0.098614 +Converged at iteration 29, L1 8.88945e-05, Linf 0.0171319, total time[s] 0.079262 +Converged at iteration 25, L1 7.29836e-05, Linf 0.00308287, total time[s] 0.070271 +Converged at iteration 38, L1 4.40354e-05, Linf 0.0120713, total time[s] 0.114925 +Converged at iteration 36, L1 5.43841e-05, Linf 0.0115771, total time[s] 0.109358 +Converged at iteration 25, L1 5.76576e-05, Linf 0.00243038, total time[s] 0.072364 +Converged at iteration 26, L1 9.29386e-05, Linf 0.00778775, total time[s] 0.078923 +Converged at iteration 24, L1 8.3674e-05, Linf 0.00902639, total time[s] 0.066326 +Converged at iteration 27, L1 6.95537e-05, Linf 0.0170795, total time[s] 0.111151 +Converged at iteration 21, L1 8.88551e-05, Linf 0.0127346, total time[s] 0.060117 +Converged at iteration 20, L1 9.11934e-05, Linf 0.00382487, total time[s] 0.090082 +Converged at iteration 23, L1 6.01378e-05, Linf 0.00259074, total time[s] 0.096764 +Converged at iteration 25, L1 6.62202e-05, Linf 0.00227048, total time[s] 0.111827 +Converged at iteration 22, L1 6.07249e-05, Linf 0.00252265, total time[s] 0.082116 +Converged at iteration 21, L1 8.60929e-05, Linf 0.00446131, total time[s] 0.067555 +Converged at iteration 33, L1 3.891e-05, Linf 0.00270064, total time[s] 0.101851 +Converged at iteration 23, L1 6.10102e-05, Linf 0.00418067, total time[s] 0.062148 +Converged at iteration 24, L1 7.09219e-05, Linf 0.00546265, total time[s] 0.079445 +Converged at iteration 26, L1 7.8341e-05, Linf 0.00448052, total time[s] 0.082871 +Converged at iteration 23, L1 8.66302e-05, Linf 0.00310839, total time[s] 0.070919 +Converged at iteration 23, L1 6.8706e-05, Linf 0.00171905, total time[s] 0.063085 +Converged at iteration 27, L1 6.96838e-05, Linf 0.0125432, total time[s] 0.083585 +Converged at iteration 29, L1 8.34027e-05, Linf 0.0049113, total time[s] 0.082443 +Converged at iteration 28, L1 7.01744e-05, Linf 0.00495021, total time[s] 0.07858 +Converged at iteration 32, L1 8.23404e-05, Linf 0.00577098, total time[s] 0.099031 +Converged at iteration 28, L1 9.84417e-05, Linf 0.00245865, total time[s] 0.086579 +Converged at iteration 31, L1 8.66841e-05, Linf 0.0114208, total time[s] 0.094405 +Converged at iteration 31, L1 6.24717e-05, Linf 0.00275792, total time[s] 0.098648 +Converged at iteration 33, L1 7.33237e-05, Linf 0.00386058, total time[s] 0.142743 +Converged at iteration 32, L1 6.31432e-05, Linf 0.0102068, total time[s] 0.260005 +Converged at iteration 33, L1 9.53116e-05, Linf 0.0228186, total time[s] 0.137748 +Converged at iteration 29, L1 9.7425e-05, Linf 0.0170378, total time[s] 0.091521 +Converged at iteration 25, L1 7.44379e-05, Linf 0.00311158, total time[s] 0.075191 +Converged at iteration 38, L1 4.51203e-05, Linf 0.0123095, total time[s] 0.174387 +Converged at iteration 36, L1 5.54576e-05, Linf 0.0118814, total time[s] 0.129042 +Converged at iteration 25, L1 5.57645e-05, Linf 0.002381, total time[s] 0.086124 +Converged at iteration 26, L1 9.36451e-05, Linf 0.00781392, total time[s] 0.074294 +Converged at iteration 24, L1 8.10484e-05, Linf 0.0090532, total time[s] 0.073257 +Converged at iteration 27, L1 7.10217e-05, Linf 0.0183718, total time[s] 0.110723 +Converged at iteration 21, L1 9.05977e-05, Linf 0.0135269, total time[s] 0.099148 +Converged at iteration 20, L1 9.3469e-05, Linf 0.00394103, total time[s] 0.088343 +Converged at iteration 23, L1 5.8066e-05, Linf 0.00253922, total time[s] 0.074402 +Converged at iteration 25, L1 6.66475e-05, Linf 0.00230439, total time[s] 0.075196 +Converged at iteration 22, L1 6.13694e-05, Linf 0.00253501, total time[s] 0.075719 +Converged at iteration 21, L1 9.06898e-05, Linf 0.0164781, total time[s] 0.087419 +Converged at iteration 33, L1 3.9417e-05, Linf 0.00270265, total time[s] 0.093852 +Converged at iteration 23, L1 6.21781e-05, Linf 0.00425474, total time[s] 0.064045 +Converged at iteration 24, L1 6.96161e-05, Linf 0.00548524, total time[s] 0.080273 +Converged at iteration 26, L1 8.02963e-05, Linf 0.00456303, total time[s] 0.072682 +Converged at iteration 23, L1 8.64167e-05, Linf 0.00309643, total time[s] 0.067084 +Converged at iteration 23, L1 6.83277e-05, Linf 0.00686154, total time[s] 0.080717 +Converged at iteration 27, L1 6.89621e-05, Linf 0.00429495, total time[s] 0.08607 +Converged at iteration 29, L1 8.58736e-05, Linf 0.00502875, total time[s] 0.090759 +Converged at iteration 28, L1 6.76632e-05, Linf 0.00497426, total time[s] 0.077494 +Converged at iteration 32, L1 8.30689e-05, Linf 0.00581635, total time[s] 0.084332 +Converged at iteration 28, L1 9.90009e-05, Linf 0.00241409, total time[s] 0.076274 +Converged at iteration 31, L1 8.64661e-05, Linf 0.0113479, total time[s] 0.083324 +Converged at iteration 31, L1 6.15605e-05, Linf 0.00275023, total time[s] 0.099518 +Converged at iteration 33, L1 7.32768e-05, Linf 0.00388762, total time[s] 0.088426 +Converged at iteration 32, L1 6.9362e-05, Linf 0.0102411, total time[s] 0.08612 +Converged at iteration 33, L1 9.82196e-05, Linf 0.0235361, total time[s] 0.08901 +Converged at iteration 29, L1 8.79625e-05, Linf 0.017332, total time[s] 0.083721 +Converged at iteration 25, L1 7.58069e-05, Linf 0.00314944, total time[s] 0.070072 +Converged at iteration 38, L1 4.73105e-05, Linf 0.0125946, total time[s] 0.114645 +Converged at iteration 36, L1 8.15123e-05, Linf 0.0123023, total time[s] 0.098415 +Converged at iteration 25, L1 5.36856e-05, Linf 0.00231503, total time[s] 0.066137 +Converged at iteration 26, L1 9.73637e-05, Linf 0.00810386, total time[s] 0.068301 +Converged at iteration 24, L1 7.87882e-05, Linf 0.00898696, total time[s] 0.066401 +Converged at iteration 27, L1 7.38505e-05, Linf 0.0185608, total time[s] 0.07692 +Converged at iteration 21, L1 9.31683e-05, Linf 0.0136517, total time[s] 0.060919 +Converged at iteration 20, L1 9.42847e-05, Linf 0.00400008, total time[s] 0.06238 +Converged at iteration 23, L1 5.685e-05, Linf 0.00256896, total time[s] 0.065395 +Converged at iteration 25, L1 6.88537e-05, Linf 0.00995569, total time[s] 0.066815 +Converged at iteration 22, L1 6.05937e-05, Linf 0.00253233, total time[s] 0.069472 +Converged at iteration 21, L1 9.27466e-05, Linf 0.0046609, total time[s] 0.064933 +Converged at iteration 33, L1 5.52024e-05, Linf 0.00271165, total time[s] 0.089172 +Converged at iteration 23, L1 6.37428e-05, Linf 0.00436118, total time[s] 0.065498 +Converged at iteration 24, L1 7.11824e-05, Linf 0.00553674, total time[s] 0.064609 +Converged at iteration 26, L1 7.90732e-05, Linf 0.00450203, total time[s] 0.067942 +Converged at iteration 23, L1 8.61125e-05, Linf 0.00307339, total time[s] 0.061116 +Converged at iteration 23, L1 6.82834e-05, Linf 0.0017572, total time[s] 0.065363 +Converged at iteration 27, L1 7.15816e-05, Linf 0.00436788, total time[s] 0.070835 +Converged at iteration 29, L1 8.74613e-05, Linf 0.00525823, total time[s] 0.076282 +Converged at iteration 28, L1 6.62645e-05, Linf 0.00502525, total time[s] 0.073159 +Converged at iteration 32, L1 8.30057e-05, Linf 0.00855753, total time[s] 0.088043 +Converged at iteration 29, L1 5.80114e-05, Linf 0.00168467, total time[s] 0.075489 +Converged at iteration 31, L1 8.49808e-05, Linf 0.0114253, total time[s] 0.078137 +Converged at iteration 31, L1 6.22064e-05, Linf 0.00279292, total time[s] 0.079102 +Converged at iteration 33, L1 7.21216e-05, Linf 0.00390718, total time[s] 0.084182 +Converged at iteration 32, L1 7.15122e-05, Linf 0.0106771, total time[s] 0.081477 +Converged at iteration 37, L1 9.21461e-05, Linf 0.00191366, total time[s] 0.092372 +Converged at iteration 29, L1 8.61183e-05, Linf 0.0177456, total time[s] 0.074849 +Converged at iteration 25, L1 7.66963e-05, Linf 0.00318833, total time[s] 0.066546 +Converged at iteration 38, L1 4.84191e-05, Linf 0.012964, total time[s] 0.097643 +Converged at iteration 36, L1 6.22535e-05, Linf 0.0139229, total time[s] 0.094588 +Converged at iteration 25, L1 4.70486e-05, Linf 0.00206707, total time[s] 0.065616 +Converged at iteration 27, L1 4.43739e-05, Linf 0.00473658, total time[s] 0.070161 +Converged at iteration 24, L1 8.02245e-05, Linf 0.0253635, total time[s] 0.062809 +Converged at iteration 29, L1 9.59576e-05, Linf 0.0313672, total time[s] 0.074497 +Converged at iteration 21, L1 9.5998e-05, Linf 0.0136536, total time[s] 0.05876 +Converged at iteration 21, L1 4.72535e-05, Linf 0.00256084, total time[s] 0.077586 +Converged at iteration 23, L1 5.69156e-05, Linf 0.00265343, total time[s] 0.087154 +Converged at iteration 25, L1 7.00915e-05, Linf 0.00243349, total time[s] 0.07189 +Converged at iteration 22, L1 6.2444e-05, Linf 0.00230541, total time[s] 0.078841 +Converged at iteration 21, L1 9.65304e-05, Linf 0.0051164, total time[s] 0.063774 +Converged at iteration 33, L1 6.13461e-05, Linf 0.00277238, total time[s] 0.103691 +Converged at iteration 23, L1 6.86056e-05, Linf 0.00475374, total time[s] 0.071826 +Converged at iteration 24, L1 7.43995e-05, Linf 0.00573231, total time[s] 0.069959 +Converged at iteration 26, L1 7.47164e-05, Linf 0.00428559, total time[s] 0.072821 +Converged at iteration 23, L1 9.01455e-05, Linf 0.00308663, total time[s] 0.06378 +Converged at iteration 23, L1 7.08577e-05, Linf 0.00719059, total time[s] 0.063876 +Converged at iteration 27, L1 9.33468e-05, Linf 0.0291035, total time[s] 0.077604 +Converged at iteration 29, L1 9.36349e-05, Linf 0.00605299, total time[s] 0.077955 +Converged at iteration 28, L1 6.86548e-05, Linf 0.00521929, total time[s] 0.074338 +Converged at iteration 32, L1 7.80638e-05, Linf 0.00578617, total time[s] 0.084496 +Converged at iteration 29, L1 6.68912e-05, Linf 0.00181484, total time[s] 0.081873 +Converged at iteration 31, L1 8.51519e-05, Linf 0.0117196, total time[s] 0.090471 +Converged at iteration 31, L1 6.81894e-05, Linf 0.00292088, total time[s] 0.0859 +Converged at iteration 33, L1 7.06889e-05, Linf 0.00393461, total time[s] 0.095284 +Converged at iteration 32, L1 8.73895e-05, Linf 0.0122897, total time[s] 0.085091 +Converged at iteration 34, L1 9.56305e-05, Linf 0.00865452, total time[s] 0.0941 +Converged at iteration 29, L1 8.35308e-05, Linf 0.0186186, total time[s] 0.088576 +Converged at iteration 25, L1 7.84245e-05, Linf 0.00316627, total time[s] 0.101183 +Converged at iteration 38, L1 4.97513e-05, Linf 0.0127741, total time[s] 0.116587 +Converged at iteration 36, L1 6.46484e-05, Linf 0.015236, total time[s] 0.101606 +Converged at iteration 24, L1 9.55683e-05, Linf 0.00337685, total time[s] 0.073095 +Converged at iteration 27, L1 5.03321e-05, Linf 0.00542686, total time[s] 0.071576 +Converged at iteration 24, L1 7.62639e-05, Linf 0.0125187, total time[s] 0.064363 +Converged at iteration 29, L1 9.98913e-05, Linf 0.0326932, total time[s] 0.081491 +Converged at iteration 22, L1 3.03337e-05, Linf 0.00545383, total time[s] 0.110906 +Converged at iteration 21, L1 4.8759e-05, Linf 0.00262717, total time[s] 0.064659 +Converged at iteration 23, L1 5.38883e-05, Linf 0.00276444, total time[s] 0.073479 +Converged at iteration 25, L1 7.19453e-05, Linf 0.00247289, total time[s] 0.091803 +Converged at iteration 22, L1 6.02604e-05, Linf 0.00218572, total time[s] 0.086429 +Converged at iteration 21, L1 9.87528e-05, Linf 0.00548623, total time[s] 0.082235 +Converged at iteration 33, L1 4.99053e-05, Linf 0.00305918, total time[s] 0.106935 +Converged at iteration 23, L1 7.21384e-05, Linf 0.00504131, total time[s] 0.066231 +Converged at iteration 24, L1 7.73453e-05, Linf 0.00586971, total time[s] 0.067678 +Converged at iteration 26, L1 7.09265e-05, Linf 0.0041009, total time[s] 0.080996 +Converged at iteration 23, L1 9.2864e-05, Linf 0.00301669, total time[s] 0.066595 +Converged at iteration 23, L1 7.24628e-05, Linf 0.00202887, total time[s] 0.086412 +Converged at iteration 27, L1 7.59477e-05, Linf 0.00472442, total time[s] 0.088316 +Converged at iteration 30, L1 5.2276e-05, Linf 0.00344183, total time[s] 0.08601 +Converged at iteration 28, L1 7.05911e-05, Linf 0.00532122, total time[s] 0.084832 +Converged at iteration 32, L1 7.43194e-05, Linf 0.00577546, total time[s] 0.09106 +Converged at iteration 29, L1 6.8462e-05, Linf 0.0019028, total time[s] 0.094999 +Converged at iteration 31, L1 8.54066e-05, Linf 0.0119271, total time[s] 0.085491 +Converged at iteration 31, L1 6.55734e-05, Linf 0.00296247, total time[s] 0.081778 +Converged at iteration 33, L1 7.13809e-05, Linf 0.00398325, total time[s] 0.086684 +Converged at iteration 32, L1 9.64308e-05, Linf 0.0133929, total time[s] 0.087566 +Converged at iteration 34, L1 4.84421e-05, Linf 0.0103513, total time[s] 0.091893 +Converged at iteration 29, L1 8.22114e-05, Linf 0.0186635, total time[s] 0.082664 +Converged at iteration 25, L1 7.80676e-05, Linf 0.00305655, total time[s] 0.067735 +Converged at iteration 38, L1 5.10598e-05, Linf 0.0130722, total time[s] 0.104594 +Converged at iteration 36, L1 6.80118e-05, Linf 0.0169625, total time[s] 0.113378 +Converged at iteration 24, L1 8.98391e-05, Linf 0.00314982, total time[s] 0.076278 +Converged at iteration 27, L1 5.51377e-05, Linf 0.00582809, total time[s] 0.361432 +Converged at iteration 24, L1 6.92805e-05, Linf 0.00810486, total time[s] 0.087226 +Converged at iteration 28, L1 5.12741e-05, Linf 0.0078978, total time[s] 0.105505 +Converged at iteration 22, L1 3.19297e-05, Linf 0.00550107, total time[s] 0.067732 +Converged at iteration 21, L1 4.90801e-05, Linf 0.0026541, total time[s] 0.071712 +Converged at iteration 23, L1 5.48863e-05, Linf 0.00287941, total time[s] 0.084523 +Converged at iteration 25, L1 7.28194e-05, Linf 0.00250667, total time[s] 0.071079 +Converged at iteration 22, L1 5.94713e-05, Linf 0.00216122, total time[s] 0.071694 +Converged at iteration 22, L1 4.9874e-05, Linf 0.00276201, total time[s] 0.077484 +Converged at iteration 33, L1 6.6156e-05, Linf 0.00451623, total time[s] 0.089023 +Converged at iteration 23, L1 7.69993e-05, Linf 0.00529807, total time[s] 0.067918 +Converged at iteration 24, L1 8.22912e-05, Linf 0.00598037, total time[s] 0.068615 +Converged at iteration 26, L1 6.90607e-05, Linf 0.00389308, total time[s] 0.06956 +Converged at iteration 23, L1 9.45138e-05, Linf 0.00594195, total time[s] 0.063254 +Converged at iteration 23, L1 7.7582e-05, Linf 0.00211634, total time[s] 0.062112 +Converged at iteration 27, L1 9.0441e-05, Linf 0.00495724, total time[s] 0.071031 +Converged at iteration 30, L1 5.52689e-05, Linf 0.00376234, total time[s] 0.083571 +Converged at iteration 28, L1 7.24492e-05, Linf 0.00539763, total time[s] 0.087917 +Converged at iteration 32, L1 7.17842e-05, Linf 0.00582373, total time[s] 0.088825 +Converged at iteration 29, L1 7.3659e-05, Linf 0.00236398, total time[s] 0.092501 +Converged at iteration 31, L1 8.52944e-05, Linf 0.0121735, total time[s] 0.085525 +Converged at iteration 31, L1 6.54394e-05, Linf 0.00303247, total time[s] 0.092929 +Converged at iteration 33, L1 7.28167e-05, Linf 0.00407115, total time[s] 0.10086 +Converged at iteration 33, L1 5.81684e-05, Linf 0.00918317, total time[s] 0.090534 +Converged at iteration 34, L1 5.00323e-05, Linf 0.0111192, total time[s] 0.097686 +Converged at iteration 29, L1 8.1019e-05, Linf 0.0197543, total time[s] 0.078863 +Converged at iteration 25, L1 7.77944e-05, Linf 0.00298297, total time[s] 0.068765 +Converged at iteration 38, L1 5.17041e-05, Linf 0.0143952, total time[s] 0.101095 +Converged at iteration 36, L1 6.99652e-05, Linf 0.0178678, total time[s] 0.108419 +Converged at iteration 24, L1 8.49476e-05, Linf 0.00283529, total time[s] 0.075958 +Converged at iteration 27, L1 5.66032e-05, Linf 0.00621135, total time[s] 0.088483 +Converged at iteration 24, L1 6.91534e-05, Linf 0.00780512, total time[s] 0.065692 +Converged at iteration 28, L1 4.71659e-05, Linf 0.00709266, total time[s] 0.077887 +Converged at iteration 22, L1 3.22844e-05, Linf 0.00557346, total time[s] 0.070614 +Converged at iteration 21, L1 4.96826e-05, Linf 0.00269307, total time[s] 0.059116 +Converged at iteration 23, L1 5.48563e-05, Linf 0.00294393, total time[s] 0.069115 +Converged at iteration 25, L1 7.35875e-05, Linf 0.00253973, total time[s] 0.06962 +Converged at iteration 22, L1 5.92148e-05, Linf 0.00223658, total time[s] 0.062898 +Converged at iteration 22, L1 4.86148e-05, Linf 0.00287096, total time[s] 0.098584 +Converged at iteration 33, L1 5.80746e-05, Linf 0.00393809, total time[s] 0.123759 +Converged at iteration 23, L1 8.07273e-05, Linf 0.00546818, total time[s] 0.0995 +Converged at iteration 24, L1 8.28663e-05, Linf 0.00608013, total time[s] 0.073608 +Converged at iteration 26, L1 7.00134e-05, Linf 0.0140774, total time[s] 0.101921 +Converged at iteration 23, L1 9.65046e-05, Linf 0.00300887, total time[s] 0.110107 +Converged at iteration 23, L1 7.81279e-05, Linf 0.00215684, total time[s] 0.079368 +Converged at iteration 27, L1 7.83499e-05, Linf 0.00511681, total time[s] 0.095728 +Converged at iteration 30, L1 6.0983e-05, Linf 0.00401983, total time[s] 0.093567 +Converged at iteration 28, L1 7.36151e-05, Linf 0.00544002, total time[s] 0.074333 +Converged at iteration 32, L1 7.03439e-05, Linf 0.00583181, total time[s] 0.082103 +Converged at iteration 29, L1 7.60281e-05, Linf 0.00202432, total time[s] 0.077168 +Converged at iteration 31, L1 8.61056e-05, Linf 0.0122768, total time[s] 0.082717 +Converged at iteration 31, L1 6.75046e-05, Linf 0.00310049, total time[s] 0.081828 +Converged at iteration 33, L1 7.47677e-05, Linf 0.00411615, total time[s] 0.083236 +Converged at iteration 33, L1 4.07541e-05, Linf 0.0095114, total time[s] 0.09441 +Converged at iteration 34, L1 5.31927e-05, Linf 0.0118829, total time[s] 0.087721 +Converged at iteration 29, L1 7.87368e-05, Linf 0.019792, total time[s] 0.079633 +Converged at iteration 25, L1 8.07789e-05, Linf 0.00426486, total time[s] 0.072837 +Converged at iteration 38, L1 5.25227e-05, Linf 0.0147901, total time[s] 0.098343 +Converged at iteration 36, L1 7.08702e-05, Linf 0.0177399, total time[s] 0.100035 +Converged at iteration 24, L1 8.29805e-05, Linf 0.00275487, total time[s] 0.065531 +Converged at iteration 27, L1 5.89575e-05, Linf 0.00644789, total time[s] 0.06901 +Converged at iteration 24, L1 6.6847e-05, Linf 0.00756806, total time[s] 0.062029 +Converged at iteration 28, L1 4.93243e-05, Linf 0.00697241, total time[s] 0.073503 +Converged at iteration 22, L1 3.29579e-05, Linf 0.00575933, total time[s] 0.061534 +Converged at iteration 21, L1 5.02414e-05, Linf 0.00274509, total time[s] 0.060429 +Converged at iteration 23, L1 5.51073e-05, Linf 0.0029695, total time[s] 0.072393 +Converged at iteration 25, L1 7.46311e-05, Linf 0.00257839, total time[s] 0.068893 +Converged at iteration 22, L1 5.86721e-05, Linf 0.00234567, total time[s] 0.065786 +Converged at iteration 22, L1 4.87439e-05, Linf 0.00293976, total time[s] 0.063765 +Converged at iteration 33, L1 5.96311e-05, Linf 0.00411101, total time[s] 0.089999 +Converged at iteration 23, L1 7.92593e-05, Linf 0.00558901, total time[s] 0.062411 +Converged at iteration 24, L1 8.3239e-05, Linf 0.00611361, total time[s] 0.062807 +Converged at iteration 26, L1 6.91301e-05, Linf 0.00373828, total time[s] 0.068283 +Converged at iteration 23, L1 9.83331e-05, Linf 0.00305113, total time[s] 0.064142 +Converged at iteration 23, L1 7.889e-05, Linf 0.00216761, total time[s] 0.06274 +Converged at iteration 27, L1 8.11631e-05, Linf 0.00521679, total time[s] 0.072313 +Converged at iteration 30, L1 6.36624e-05, Linf 0.00417803, total time[s] 0.083546 +Converged at iteration 28, L1 7.44147e-05, Linf 0.00547976, total time[s] 0.075761 +Converged at iteration 32, L1 7.00336e-05, Linf 0.00579454, total time[s] 0.090196 +Converged at iteration 29, L1 7.62856e-05, Linf 0.00204727, total time[s] 0.078963 +Converged at iteration 31, L1 8.39488e-05, Linf 0.0122562, total time[s] 0.082157 +Converged at iteration 31, L1 6.71101e-05, Linf 0.00311707, total time[s] 0.08258 +Converged at iteration 33, L1 7.33788e-05, Linf 0.00412276, total time[s] 0.089933 +Converged at iteration 33, L1 4.27471e-05, Linf 0.00987211, total time[s] 0.089889 +Converged at iteration 34, L1 5.28328e-05, Linf 0.0122157, total time[s] 0.091276 +Converged at iteration 29, L1 7.75424e-05, Linf 0.0197473, total time[s] 0.073752 +Converged at iteration 25, L1 7.91513e-05, Linf 0.0029827, total time[s] 0.065453 +Converged at iteration 38, L1 5.2698e-05, Linf 0.0147907, total time[s] 0.097197 +Converged at iteration 36, L1 7.08945e-05, Linf 0.0176912, total time[s] 0.094861 +Converged at iteration 24, L1 8.2156e-05, Linf 0.00275417, total time[s] 0.066888 +Converged at iteration 27, L1 5.80595e-05, Linf 0.00639558, total time[s] 0.071059 +Converged at iteration 24, L1 6.796e-05, Linf 0.00762414, total time[s] 0.063334 +Converged at iteration 28, L1 4.89817e-05, Linf 0.00691751, total time[s] 0.073548 +Converged at iteration 22, L1 3.23346e-05, Linf 0.00597315, total time[s] 0.067179 +Converged at iteration 21, L1 5.0559e-05, Linf 0.00276017, total time[s] 0.070275 +Converged at iteration 23, L1 5.51371e-05, Linf 0.0029391, total time[s] 0.088773 +Converged at iteration 25, L1 7.46832e-05, Linf 0.00258596, total time[s] 0.07308 +Converged at iteration 22, L1 5.83752e-05, Linf 0.00233486, total time[s] 0.059986 +Converged at iteration 22, L1 4.87366e-05, Linf 0.00292939, total time[s] 0.06082 +Converged at iteration 33, L1 5.94111e-05, Linf 0.00408231, total time[s] 0.088503 +Converged at iteration 23, L1 7.88969e-05, Linf 0.00556773, total time[s] 0.059911 +Converged at iteration 24, L1 8.30229e-05, Linf 0.00609587, total time[s] 0.062639 +Converged at iteration 26, L1 6.94758e-05, Linf 0.0037781, total time[s] 0.06684 +Converged at iteration 23, L1 9.76658e-05, Linf 0.00303912, total time[s] 0.059425 +Converged at iteration 23, L1 7.82626e-05, Linf 0.00214398, total time[s] 0.060753 +Converged at iteration 27, L1 7.98563e-05, Linf 0.00519353, total time[s] 0.069017 +Converged at iteration 30, L1 6.32447e-05, Linf 0.00414814, total time[s] 0.075429 +Converged at iteration 28, L1 7.4153e-05, Linf 0.00549349, total time[s] 0.071578 +Converged at iteration 32, L1 7.03634e-05, Linf 0.00580574, total time[s] 0.080854 +Converged at iteration 29, L1 7.54623e-05, Linf 0.00203707, total time[s] 0.074502 +Converged at iteration 31, L1 8.38256e-05, Linf 0.0122153, total time[s] 0.078741 +Converged at iteration 31, L1 6.65088e-05, Linf 0.00310613, total time[s] 0.078196 +Converged at iteration 33, L1 7.35095e-05, Linf 0.00413381, total time[s] 0.086206 +Converged at iteration 33, L1 4.18451e-05, Linf 0.00983279, total time[s] 0.082639 +Converged at iteration 34, L1 5.20436e-05, Linf 0.0121632, total time[s] 0.085089 +Converged at iteration 29, L1 7.76302e-05, Linf 0.0197641, total time[s] 0.074499 +Converged at iteration 25, L1 7.94645e-05, Linf 0.00298207, total time[s] 0.06427 +Converged at iteration 38, L1 7.38758e-05, Linf 0.0147744, total time[s] 0.125581 +Converged at iteration 36, L1 7.12918e-05, Linf 0.0178717, total time[s] 0.106389 +Converged at iteration 24, L1 8.20854e-05, Linf 0.00272868, total time[s] 0.063369 +Converged at iteration 27, L1 5.8789e-05, Linf 0.00649488, total time[s] 0.068845 +Converged at iteration 24, L1 6.66646e-05, Linf 0.00750386, total time[s] 0.062058 +Converged at iteration 28, L1 4.82077e-05, Linf 0.00703869, total time[s] 0.078859 +Converged at iteration 22, L1 3.28504e-05, Linf 0.00579389, total time[s] 0.07049 +Converged at iteration 21, L1 5.05492e-05, Linf 0.00273558, total time[s] 0.05613 +Converged at iteration 23, L1 5.52689e-05, Linf 0.00297609, total time[s] 0.068192 +Converged at iteration 25, L1 7.49829e-05, Linf 0.00258445, total time[s] 0.076876 +Converged at iteration 22, L1 5.80198e-05, Linf 0.00236301, total time[s] 0.060453 +Converged at iteration 22, L1 5.01298e-05, Linf 0.00295872, total time[s] 0.061507 +Converged at iteration 33, L1 6.01304e-05, Linf 0.0041631, total time[s] 0.091062 +Converged at iteration 23, L1 7.94642e-05, Linf 0.0056144, total time[s] 0.064356 +Converged at iteration 24, L1 8.39453e-05, Linf 0.00611877, total time[s] 0.067018 +Converged at iteration 26, L1 6.92379e-05, Linf 0.00372782, total time[s] 0.068224 +Converged at iteration 23, L1 9.89658e-05, Linf 0.00304533, total time[s] 0.064599 +Converged at iteration 23, L1 7.84691e-05, Linf 0.00217014, total time[s] 0.061043 +Converged at iteration 27, L1 8.06702e-05, Linf 0.00523942, total time[s] 0.072305 +Converged at iteration 30, L1 6.40998e-05, Linf 0.00421257, total time[s] 0.079537 +Converged at iteration 28, L1 7.44981e-05, Linf 0.00548419, total time[s] 0.074731 +Converged at iteration 32, L1 7.00477e-05, Linf 0.00579774, total time[s] 0.082193 +Converged at iteration 29, L1 7.58479e-05, Linf 0.0020596, total time[s] 0.075124 +Converged at iteration 31, L1 8.38245e-05, Linf 0.0122588, total time[s] 0.083181 +Converged at iteration 31, L1 6.73116e-05, Linf 0.00312543, total time[s] 0.085685 +Converged at iteration 33, L1 7.3196e-05, Linf 0.00412998, total time[s] 0.086252 +Converged at iteration 33, L1 4.22379e-05, Linf 0.00997157, total time[s] 0.084274 +Converged at iteration 34, L1 5.26688e-05, Linf 0.0123081, total time[s] 0.086728 +Converged at iteration 29, L1 7.67095e-05, Linf 0.0197245, total time[s] 0.074784 +Converged at iteration 25, L1 7.92245e-05, Linf 0.00298338, total time[s] 0.065485 +Converged at iteration 38, L1 5.21361e-05, Linf 0.0147846, total time[s] 0.096554 +Converged at iteration 36, L1 7.10475e-05, Linf 0.0175362, total time[s] 0.095963 +Converged at iteration 24, L1 8.20466e-05, Linf 0.0027442, total time[s] 0.064244 +Converged at iteration 27, L1 5.83212e-05, Linf 0.00644486, total time[s] 0.07145 +Converged at iteration 24, L1 6.68819e-05, Linf 0.00756499, total time[s] 0.064674 +Converged at iteration 28, L1 4.91342e-05, Linf 0.00699258, total time[s] 0.074276 +Converged at iteration 22, L1 3.23018e-05, Linf 0.00576779, total time[s] 0.098993 +Converged at iteration 21, L1 5.02975e-05, Linf 0.00275919, total time[s] 0.065322 +Converged at iteration 23, L1 5.53802e-05, Linf 0.00295938, total time[s] 0.072046 +Converged at iteration 25, L1 7.48813e-05, Linf 0.00258593, total time[s] 0.071073 +Converged at iteration 22, L1 5.82175e-05, Linf 0.00235055, total time[s] 0.065183 +Converged at iteration 22, L1 4.82447e-05, Linf 0.00294403, total time[s] 0.058859 +Converged at iteration 33, L1 5.97722e-05, Linf 0.00412242, total time[s] 0.089558 +Converged at iteration 23, L1 7.92529e-05, Linf 0.00559188, total time[s] 0.064834 +Converged at iteration 24, L1 8.32067e-05, Linf 0.00610755, total time[s] 0.063876 +Converged at iteration 26, L1 6.92321e-05, Linf 0.00375332, total time[s] 0.067348 +Converged at iteration 23, L1 9.79425e-05, Linf 0.00304156, total time[s] 0.061736 +Converged at iteration 23, L1 7.90291e-05, Linf 0.0021598, total time[s] 0.059979 +Converged at iteration 27, L1 8.00214e-05, Linf 0.0052148, total time[s] 0.06949 +Converged at iteration 30, L1 6.34123e-05, Linf 0.00418122, total time[s] 0.076994 +Converged at iteration 28, L1 7.43268e-05, Linf 0.00547726, total time[s] 0.071784 +Converged at iteration 32, L1 7.02485e-05, Linf 0.00581895, total time[s] 0.083439 +Converged at iteration 29, L1 7.557e-05, Linf 0.00204343, total time[s] 0.075341 +Converged at iteration 31, L1 8.38155e-05, Linf 0.0122373, total time[s] 0.079622 +Converged at iteration 31, L1 6.6969e-05, Linf 0.00311667, total time[s] 0.079584 +Converged at iteration 33, L1 7.32727e-05, Linf 0.00414091, total time[s] 0.085526 +Converged at iteration 33, L1 4.19442e-05, Linf 0.00990124, total time[s] 0.084334 +Converged at iteration 34, L1 5.22921e-05, Linf 0.0122449, total time[s] 0.086557 +Converged at iteration 29, L1 8.17191e-05, Linf 0.0197442, total time[s] 0.074663 +Converged at iteration 25, L1 7.91484e-05, Linf 0.00298266, total time[s] 0.06678 +Converged at iteration 38, L1 5.21497e-05, Linf 0.0147943, total time[s] 0.096711 +Converged at iteration 36, L1 7.13403e-05, Linf 0.0177441, total time[s] 0.094303 +Converged at iteration 24, L1 8.20895e-05, Linf 0.00275074, total time[s] 0.076267 +Converged at iteration 27, L1 5.80993e-05, Linf 0.00642011, total time[s] 0.085454 +Converged at iteration 24, L1 6.70427e-05, Linf 0.00759534, total time[s] 0.074336 +Converged at iteration 28, L1 4.92243e-05, Linf 0.00695986, total time[s] 0.073526 +Converged at iteration 22, L1 3.28614e-05, Linf 0.00575483, total time[s] 0.072141 +Converged at iteration 21, L1 5.03706e-05, Linf 0.00275996, total time[s] 0.061219 +Converged at iteration 23, L1 5.49987e-05, Linf 0.00295404, total time[s] 0.073679 +Converged at iteration 25, L1 7.4707e-05, Linf 0.00258598, total time[s] 0.071653 +Converged at iteration 22, L1 5.88031e-05, Linf 0.00234306, total time[s] 0.081024 +Converged at iteration 22, L1 4.94858e-05, Linf 0.00293668, total time[s] 0.066973 +Converged at iteration 33, L1 6.00962e-05, Linf 0.00411708, total time[s] 0.114141 +Converged at iteration 23, L1 8.17038e-05, Linf 0.005583, total time[s] 0.062535 +Converged at iteration 24, L1 8.49954e-05, Linf 0.00610172, total time[s] 0.072995 +Converged at iteration 26, L1 6.9262e-05, Linf 0.00376495, total time[s] 0.068982 +Converged at iteration 23, L1 9.78014e-05, Linf 0.00304123, total time[s] 0.067581 +Converged at iteration 23, L1 7.81756e-05, Linf 0.00215052, total time[s] 0.067689 +Converged at iteration 27, L1 7.98555e-05, Linf 0.00520649, total time[s] 0.076734 +Converged at iteration 30, L1 6.30105e-05, Linf 0.00416018, total time[s] 0.083003 +Converged at iteration 28, L1 7.46233e-05, Linf 0.00547264, total time[s] 0.102673 +Converged at iteration 32, L1 7.03214e-05, Linf 0.00580413, total time[s] 0.114147 +Converged at iteration 29, L1 7.53709e-05, Linf 0.00204059, total time[s] 0.259593 +Converged at iteration 31, L1 8.37914e-05, Linf 0.0122263, total time[s] 0.08347 +Converged at iteration 31, L1 6.70928e-05, Linf 0.00311242, total time[s] 0.082003 +Converged at iteration 33, L1 7.43942e-05, Linf 0.0041351, total time[s] 0.087006 +Converged at iteration 33, L1 4.19922e-05, Linf 0.00986196, total time[s] 0.161443 +Converged at iteration 34, L1 5.22289e-05, Linf 0.0121741, total time[s] 0.092844 +Converged at iteration 29, L1 7.75482e-05, Linf 0.0197516, total time[s] 0.075336 +Converged at iteration 25, L1 7.91434e-05, Linf 0.00304934, total time[s] 0.066477 +Converged at iteration 38, L1 5.25757e-05, Linf 0.0147915, total time[s] 0.096287 +Converged at iteration 36, L1 7.08921e-05, Linf 0.0177067, total time[s] 0.096253 +Converged at iteration 24, L1 8.20746e-05, Linf 0.00275283, total time[s] 0.07662 +Converged at iteration 27, L1 5.89514e-05, Linf 0.00640784, total time[s] 0.071365 +Converged at iteration 24, L1 6.7305e-05, Linf 0.00761034, total time[s] 0.063787 +Converged at iteration 28, L1 4.89724e-05, Linf 0.00695868, total time[s] 0.076643 +Converged at iteration 22, L1 3.23024e-05, Linf 0.0057486, total time[s] 0.068992 +Converged at iteration 21, L1 5.03682e-05, Linf 0.00275981, total time[s] 0.057738 +Converged at iteration 23, L1 5.53033e-05, Linf 0.00295125, total time[s] 0.068354 +Converged at iteration 25, L1 7.46066e-05, Linf 0.00258597, total time[s] 0.078116 +Converged at iteration 22, L1 5.85968e-05, Linf 0.00233902, total time[s] 0.062535 +Converged at iteration 22, L1 4.81651e-05, Linf 0.00293304, total time[s] 0.05954 +Converged at iteration 33, L1 5.9454e-05, Linf 0.00409024, total time[s] 0.094794 +Converged at iteration 23, L1 7.90163e-05, Linf 0.00557473, total time[s] 0.074875 +Converged at iteration 24, L1 8.30035e-05, Linf 0.00609879, total time[s] 0.072577 +Converged at iteration 26, L1 6.93739e-05, Linf 0.0037734, total time[s] 0.070311 +Converged at iteration 23, L1 9.77029e-05, Linf 0.00303852, total time[s] 0.059933 +Converged at iteration 23, L1 7.83789e-05, Linf 0.00214726, total time[s] 0.081701 +Converged at iteration 27, L1 7.97154e-05, Linf 0.00520095, total time[s] 0.070371 +Converged at iteration 30, L1 6.33798e-05, Linf 0.00416842, total time[s] 0.076271 +Converged at iteration 28, L1 7.41664e-05, Linf 0.00547217, total time[s] 0.072119 +Converged at iteration 32, L1 7.0374e-05, Linf 0.00580512, total time[s] 0.083113 +Converged at iteration 29, L1 7.52947e-05, Linf 0.00203787, total time[s] 0.07502 +Converged at iteration 31, L1 8.56623e-05, Linf 0.012465, total time[s] 0.082644 +Converged at iteration 31, L1 6.64865e-05, Linf 0.0031096, total time[s] 0.079607 +Converged at iteration 33, L1 7.44194e-05, Linf 0.00413271, total time[s] 0.08392 +Converged at iteration 33, L1 4.19193e-05, Linf 0.0100333, total time[s] 0.084101 +Converged at iteration 34, L1 5.25895e-05, Linf 0.0121792, total time[s] 0.08618 +Converged at iteration 29, L1 7.77016e-05, Linf 0.0197573, total time[s] 0.074839 +Converged at iteration 25, L1 7.91133e-05, Linf 0.00298726, total time[s] 0.064925 +Converged at iteration 38, L1 5.21784e-05, Linf 0.0147896, total time[s] 0.097323 +Converged at iteration 36, L1 7.12959e-05, Linf 0.0176815, total time[s] 0.168572 +Converged at iteration 24, L1 8.21373e-05, Linf 0.00275692, total time[s] 0.064849 +Converged at iteration 27, L1 5.81715e-05, Linf 0.00640171, total time[s] 0.079744 +Converged at iteration 24, L1 6.71768e-05, Linf 0.0076179, total time[s] 0.064279 +Converged at iteration 28, L1 4.82713e-05, Linf 0.00695267, total time[s] 0.079306 +Converged at iteration 22, L1 3.23037e-05, Linf 0.00574452, total time[s] 0.061372 +Converged at iteration 21, L1 5.04525e-05, Linf 0.00273672, total time[s] 0.065269 +Converged at iteration 23, L1 5.51151e-05, Linf 0.00295212, total time[s] 0.067894 +Converged at iteration 25, L1 7.47962e-05, Linf 0.00258599, total time[s] 0.074806 +Converged at iteration 22, L1 5.83776e-05, Linf 0.00233697, total time[s] 0.061392 +Converged at iteration 22, L1 4.80767e-05, Linf 0.00293121, total time[s] 0.060678 +Converged at iteration 33, L1 5.94258e-05, Linf 0.00408486, total time[s] 0.095321 +Converged at iteration 23, L1 7.89512e-05, Linf 0.00557076, total time[s] 0.064768 +Converged at iteration 24, L1 8.30554e-05, Linf 0.00609733, total time[s] 0.067637 +Converged at iteration 26, L1 6.94158e-05, Linf 0.00377646, total time[s] 0.068392 +Converged at iteration 23, L1 9.782e-05, Linf 0.00303929, total time[s] 0.06095 +Converged at iteration 23, L1 7.96956e-05, Linf 0.00718733, total time[s] 0.063564 +Converged at iteration 27, L1 8.01214e-05, Linf 0.00519813, total time[s] 0.070848 +Converged at iteration 30, L1 6.27433e-05, Linf 0.00414981, total time[s] 0.080717 +Converged at iteration 28, L1 7.42105e-05, Linf 0.00546976, total time[s] 0.073063 +Converged at iteration 32, L1 7.03805e-05, Linf 0.00583429, total time[s] 0.082638 +Converged at iteration 29, L1 7.53279e-05, Linf 0.00204022, total time[s] 0.07506 +Converged at iteration 31, L1 8.3979e-05, Linf 0.0122182, total time[s] 0.084455 +Converged at iteration 31, L1 6.63823e-05, Linf 0.00310761, total time[s] 0.079107 +Converged at iteration 33, L1 7.33492e-05, Linf 0.0041347, total time[s] 0.084067 +Converged at iteration 33, L1 4.19416e-05, Linf 0.0098427, total time[s] 0.084147 +Converged at iteration 34, L1 5.21596e-05, Linf 0.0121754, total time[s] 0.086395 +Converged at iteration 29, L1 7.858e-05, Linf 0.019762, total time[s] 0.076759 +Converged at iteration 25, L1 7.89664e-05, Linf 0.00298219, total time[s] 0.065602 +Converged at iteration 38, L1 5.22647e-05, Linf 0.0147917, total time[s] 0.099443 +Converged at iteration 36, L1 7.10554e-05, Linf 0.0176985, total time[s] 0.093996 +Converged at iteration 24, L1 8.21044e-05, Linf 0.00275581, total time[s] 0.077559 +Converged at iteration 27, L1 5.79236e-05, Linf 0.00639879, total time[s] 0.07868 +Converged at iteration 24, L1 6.82686e-05, Linf 0.00762389, total time[s] 0.063495 +Converged at iteration 28, L1 4.82536e-05, Linf 0.00695426, total time[s] 0.083773 +Converged at iteration 22, L1 3.23149e-05, Linf 0.00574507, total time[s] 0.069671 +Converged at iteration 21, L1 5.04828e-05, Linf 0.00275864, total time[s] 0.070302 +Converged at iteration 23, L1 5.50381e-05, Linf 0.0029492, total time[s] 0.069166 +Converged at iteration 25, L1 7.47046e-05, Linf 0.002586, total time[s] 0.072816 +Converged at iteration 22, L1 5.83662e-05, Linf 0.00233592, total time[s] 0.063777 +Converged at iteration 22, L1 4.79593e-05, Linf 0.00293029, total time[s] 0.063156 +Converged at iteration 33, L1 5.93948e-05, Linf 0.00408266, total time[s] 0.090364 +Converged at iteration 23, L1 7.89218e-05, Linf 0.00556973, total time[s] 0.064099 +Converged at iteration 24, L1 8.60156e-05, Linf 0.0060966, total time[s] 0.072278 +Converged at iteration 26, L1 6.94112e-05, Linf 0.00377667, total time[s] 0.068274 +Converged at iteration 23, L1 9.78793e-05, Linf 0.00303846, total time[s] 0.060564 +Converged at iteration 23, L1 7.81008e-05, Linf 0.00214418, total time[s] 0.060886 +Converged at iteration 27, L1 7.94591e-05, Linf 0.00519373, total time[s] 0.069515 +Converged at iteration 30, L1 6.31908e-05, Linf 0.00414915, total time[s] 0.077931 +Converged at iteration 28, L1 7.42048e-05, Linf 0.00547113, total time[s] 0.074221 +Converged at iteration 32, L1 7.05292e-05, Linf 0.00583447, total time[s] 0.08167 +Converged at iteration 29, L1 7.52421e-05, Linf 0.0020365, total time[s] 0.074362 +Converged at iteration 31, L1 8.5821e-05, Linf 0.0120769, total time[s] 0.08798 +Converged at iteration 31, L1 6.76731e-05, Linf 0.0031102, total time[s] 0.080573 +Converged at iteration 33, L1 7.32369e-05, Linf 0.00416445, total time[s] 0.084214 +Converged at iteration 33, L1 4.1731e-05, Linf 0.00983931, total time[s] 0.083876 +Converged at iteration 34, L1 5.20695e-05, Linf 0.0121675, total time[s] 0.087208 +Converged at iteration 29, L1 7.76474e-05, Linf 0.0197638, total time[s] 0.080863 +Converged at iteration 25, L1 7.90569e-05, Linf 0.00298213, total time[s] 0.066842 +Converged at iteration 38, L1 5.3595e-05, Linf 0.0147968, total time[s] 0.102522 +Converged at iteration 36, L1 7.09621e-05, Linf 0.0176933, total time[s] 0.095264 +Converged at iteration 24, L1 8.21692e-05, Linf 0.00275411, total time[s] 0.066009 +Converged at iteration 27, L1 5.79739e-05, Linf 0.00639712, total time[s] 0.073562 +Converged at iteration 24, L1 6.72007e-05, Linf 0.00762362, total time[s] 0.06437 +Converged at iteration 28, L1 4.80061e-05, Linf 0.0069516, total time[s] 0.076387 +Converged at iteration 22, L1 3.35065e-05, Linf 0.005739, total time[s] 0.074377 +Converged at iteration 21, L1 5.04265e-05, Linf 0.00275977, total time[s] 0.056443 +Converged at iteration 23, L1 5.52954e-05, Linf 0.00294449, total time[s] 0.067406 +Converged at iteration 25, L1 7.46979e-05, Linf 0.00258147, total time[s] 0.070205 +Converged at iteration 22, L1 5.8378e-05, Linf 0.00233539, total time[s] 0.067046 +Converged at iteration 22, L1 4.96926e-05, Linf 0.00292984, total time[s] 0.071308 +Converged at iteration 33, L1 5.96386e-05, Linf 0.00408382, total time[s] 0.088077 +Converged at iteration 23, L1 8.45052e-05, Linf 0.00556893, total time[s] 0.062261 +Converged at iteration 24, L1 8.47985e-05, Linf 0.00609651, total time[s] 0.069412 +Converged at iteration 26, L1 6.94741e-05, Linf 0.00377879, total time[s] 0.068456 +Converged at iteration 23, L1 9.76753e-05, Linf 0.00303925, total time[s] 0.06295 +Converged at iteration 23, L1 7.8088e-05, Linf 0.00214388, total time[s] 0.069641 +Converged at iteration 27, L1 7.95868e-05, Linf 0.00519593, total time[s] 0.079474 +Converged at iteration 30, L1 6.29502e-05, Linf 0.00412218, total time[s] 0.079569 +Converged at iteration 28, L1 7.44123e-05, Linf 0.00547076, total time[s] 0.083215 +Converged at iteration 32, L1 7.05149e-05, Linf 0.0058025, total time[s] 0.084653 +Converged at iteration 29, L1 7.52102e-05, Linf 0.00203624, total time[s] 0.076599 +Converged at iteration 31, L1 8.47115e-05, Linf 0.0122149, total time[s] 0.091825 +Converged at iteration 31, L1 6.63752e-05, Linf 0.00310677, total time[s] 0.090203 +Converged at iteration 33, L1 7.45997e-05, Linf 0.00412879, total time[s] 0.088333 +Converged at iteration 33, L1 4.27004e-05, Linf 0.00972451, total time[s] 0.092767 +Converged at iteration 34, L1 5.20754e-05, Linf 0.0121441, total time[s] 0.091322 +Converged at iteration 29, L1 8.02638e-05, Linf 0.0197635, total time[s] 0.079863 +Converged at iteration 25, L1 8.31741e-05, Linf 0.00305155, total time[s] 0.066369 +Converged at iteration 38, L1 5.25915e-05, Linf 0.014804, total time[s] 0.106738 +Converged at iteration 36, L1 7.12095e-05, Linf 0.0176943, total time[s] 0.103778 +Converged at iteration 24, L1 8.21113e-05, Linf 0.00275568, total time[s] 0.076447 +Converged at iteration 27, L1 5.80187e-05, Linf 0.0063964, total time[s] 0.074265 +Converged at iteration 24, L1 6.71956e-05, Linf 0.00762692, total time[s] 0.065446 +Converged at iteration 28, L1 5.13685e-05, Linf 0.00817154, total time[s] 0.309592 +Converged at iteration 23, L1 9.29019e-05, Linf 0.00246767, total time[s] 0.168567 +Converged at iteration 21, L1 5.04966e-05, Linf 0.00275875, total time[s] 0.114116 +Converged at iteration 23, L1 5.49476e-05, Linf 0.00294846, total time[s] 0.085609 +Converged at iteration 25, L1 7.46703e-05, Linf 0.002586, total time[s] 0.087408 +Converged at iteration 22, L1 5.85741e-05, Linf 0.00233507, total time[s] 0.060935 +Converged at iteration 22, L1 5.02163e-05, Linf 0.00292962, total time[s] 0.059999 +Converged at iteration 33, L1 5.9201e-05, Linf 0.00406977, total time[s] 0.094847 +Converged at iteration 23, L1 8.27355e-05, Linf 0.00557048, total time[s] 0.074453 +Converged at iteration 24, L1 8.4975e-05, Linf 0.00609601, total time[s] 0.065636 +Converged at iteration 26, L1 6.95607e-05, Linf 0.0037778, total time[s] 0.070201 +Converged at iteration 23, L1 9.76572e-05, Linf 0.00303933, total time[s] 0.060868 +Converged at iteration 23, L1 7.8345e-05, Linf 0.00214392, total time[s] 0.061653 +Converged at iteration 27, L1 7.96736e-05, Linf 0.00519638, total time[s] 0.06877 +Converged at iteration 30, L1 6.66925e-05, Linf 0.00415752, total time[s] 0.075919 +Converged at iteration 28, L1 7.49369e-05, Linf 0.00546548, total time[s] 0.072169 +Converged at iteration 32, L1 7.04876e-05, Linf 0.00581775, total time[s] 0.086003 +Converged at iteration 29, L1 7.53024e-05, Linf 0.00204494, total time[s] 0.074705 +Converged at iteration 31, L1 8.66859e-05, Linf 0.0123205, total time[s] 0.079421 +Converged at iteration 31, L1 6.78958e-05, Linf 0.00310413, total time[s] 0.079413 +Converged at iteration 33, L1 7.38035e-05, Linf 0.0041302, total time[s] 0.084886 +Converged at iteration 33, L1 4.29112e-05, Linf 0.0100958, total time[s] 0.128194 +Converged at iteration 34, L1 5.20085e-05, Linf 0.0121675, total time[s] 0.103948 +Converged at iteration 29, L1 7.77043e-05, Linf 0.0197646, total time[s] 0.075889 +Converged at iteration 25, L1 7.90383e-05, Linf 0.00298209, total time[s] 0.072464 +Converged at iteration 38, L1 5.21047e-05, Linf 0.0147923, total time[s] 0.105751 +Converged at iteration 36, L1 7.10104e-05, Linf 0.0176864, total time[s] 0.11498 +Converged at iteration 24, L1 8.21148e-05, Linf 0.00275667, total time[s] 0.07385 +Converged at iteration 27, L1 5.83378e-05, Linf 0.00639599, total time[s] 0.071412 +Converged at iteration 24, L1 6.71817e-05, Linf 0.00762389, total time[s] 0.063791 +Converged at iteration 28, L1 4.84805e-05, Linf 0.00695168, total time[s] 0.078221 +Converged at iteration 22, L1 3.23046e-05, Linf 0.00574265, total time[s] 0.061667 +Converged at iteration 21, L1 5.08373e-05, Linf 0.00275951, total time[s] 0.060659 +Converged at iteration 23, L1 5.4942e-05, Linf 0.00294862, total time[s] 0.064021 +Converged at iteration 25, L1 7.45911e-05, Linf 0.00258107, total time[s] 0.066468 +Converged at iteration 22, L1 5.8361e-05, Linf 0.002335, total time[s] 0.058205 +Converged at iteration 22, L1 4.81926e-05, Linf 0.00292972, total time[s] 0.060339 +Converged at iteration 33, L1 5.98407e-05, Linf 0.00409483, total time[s] 0.085947 +Converged at iteration 23, L1 8.58997e-05, Linf 0.00564477, total time[s] 0.062945 +Converged at iteration 24, L1 8.30029e-05, Linf 0.00609595, total time[s] 0.063407 +Converged at iteration 26, L1 6.94055e-05, Linf 0.0037784, total time[s] 0.070759 +Converged at iteration 23, L1 9.76429e-05, Linf 0.00303768, total time[s] 0.084849 +Converged at iteration 23, L1 7.80768e-05, Linf 0.00214373, total time[s] 0.066407 +Converged at iteration 27, L1 7.95699e-05, Linf 0.00519539, total time[s] 0.072875 +Converged at iteration 30, L1 6.27121e-05, Linf 0.00414863, total time[s] 0.079383 +Converged at iteration 28, L1 7.41451e-05, Linf 0.00546946, total time[s] 0.075799 +Converged at iteration 32, L1 7.04105e-05, Linf 0.00580805, total time[s] 0.086833 +Converged at iteration 29, L1 7.51863e-05, Linf 0.00203604, total time[s] 0.077741 +Converged at iteration 31, L1 8.38182e-05, Linf 0.0122155, total time[s] 0.079694 +Converged at iteration 31, L1 6.63359e-05, Linf 0.00310664, total time[s] 0.078708 +Converged at iteration 33, L1 7.37101e-05, Linf 0.00413418, total time[s] 0.086357 +Converged at iteration 33, L1 4.30672e-05, Linf 0.00983711, total time[s] 0.09111 +Converged at iteration 34, L1 5.20877e-05, Linf 0.0121534, total time[s] 0.104789 +Converged at iteration 29, L1 7.75981e-05, Linf 0.0197615, total time[s] 0.079034 +Converged at iteration 25, L1 7.90431e-05, Linf 0.00298211, total time[s] 0.065749 +Converged at iteration 38, L1 5.21264e-05, Linf 0.0147931, total time[s] 0.097643 +Converged at iteration 36, L1 7.0893e-05, Linf 0.0176831, total time[s] 0.095628 +Converged at iteration 24, L1 8.21166e-05, Linf 0.00275672, total time[s] 0.062527 +Converged at iteration 27, L1 5.79366e-05, Linf 0.00639581, total time[s] 0.071707 +Converged at iteration 24, L1 6.84031e-05, Linf 0.00762551, total time[s] 0.064383 +Converged at iteration 28, L1 4.93731e-05, Linf 0.00694594, total time[s] 0.073291 +Converged at iteration 22, L1 3.23036e-05, Linf 0.00574236, total time[s] 0.059436 +Converged at iteration 21, L1 5.03844e-05, Linf 0.00275888, total time[s] 0.057788 +Converged at iteration 23, L1 5.49377e-05, Linf 0.00295083, total time[s] 0.062555 +Converged at iteration 25, L1 7.46057e-05, Linf 0.00259344, total time[s] 0.067297 +Converged at iteration 22, L1 5.8375e-05, Linf 0.00233493, total time[s] 0.064644 +Converged at iteration 22, L1 5.42036e-05, Linf 0.00292944, total time[s] 0.068384 +Converged at iteration 33, L1 5.94118e-05, Linf 0.00408139, total time[s] 0.087853 +Converged at iteration 23, L1 8.01632e-05, Linf 0.00556829, total time[s] 0.061954 +Converged at iteration 24, L1 8.29845e-05, Linf 0.00634393, total time[s] 0.067083 +Converged at iteration 26, L1 7.00009e-05, Linf 0.00377884, total time[s] 0.070986 +Converged at iteration 23, L1 9.77371e-05, Linf 0.00303831, total time[s] 0.073429 +Converged at iteration 23, L1 7.86141e-05, Linf 0.00213585, total time[s] 0.062975 +Converged at iteration 27, L1 8.03149e-05, Linf 0.00519005, total time[s] 0.073211 +Converged at iteration 30, L1 6.32703e-05, Linf 0.00415082, total time[s] 0.075994 +Converged at iteration 28, L1 7.40137e-05, Linf 0.00546141, total time[s] 0.070946 +Converged at iteration 32, L1 7.05736e-05, Linf 0.00580635, total time[s] 0.080187 +Converged at iteration 29, L1 7.54141e-05, Linf 0.00203405, total time[s] 0.073489 +Converged at iteration 31, L1 8.38461e-05, Linf 0.0122157, total time[s] 0.078133 +Converged at iteration 31, L1 6.72094e-05, Linf 0.00310625, total time[s] 0.077491 +Converged at iteration 33, L1 7.36316e-05, Linf 0.00413426, total time[s] 0.082976 +Converged at iteration 33, L1 4.21567e-05, Linf 0.00983585, total time[s] 0.08211 +Converged at iteration 40, L1 9.51566e-05, Linf 0.00263298, total time[s] 0.09932 +Converged at iteration 29, L1 7.75831e-05, Linf 0.0197578, total time[s] 0.071894 +Converged at iteration 25, L1 7.96229e-05, Linf 0.0029824, total time[s] 0.061298 +Converged at iteration 38, L1 5.57345e-05, Linf 0.0146999, total time[s] 0.091471 +Converged at iteration 36, L1 7.19628e-05, Linf 0.0180726, total time[s] 0.088378 +Converged at iteration 24, L1 8.21674e-05, Linf 0.00275655, total time[s] 0.059818 +Converged at iteration 27, L1 5.8591e-05, Linf 0.00639598, total time[s] 0.068336 +Converged at iteration 24, L1 6.91109e-05, Linf 0.00764184, total time[s] 0.063617 +Converged at iteration 28, L1 4.78655e-05, Linf 0.00694572, total time[s] 0.07331 +Converged at iteration 22, L1 3.28684e-05, Linf 0.00574232, total time[s] 0.056816 +Converged at iteration 21, L1 5.04362e-05, Linf 0.00275939, total time[s] 0.055873 +Converged at iteration 23, L1 5.49419e-05, Linf 0.00296484, total time[s] 0.06032 +Converged at iteration 25, L1 7.46131e-05, Linf 0.00258107, total time[s] 0.065291 +Converged at iteration 22, L1 5.83774e-05, Linf 0.0023349, total time[s] 0.060269 +Converged at iteration 22, L1 4.81087e-05, Linf 0.00292937, total time[s] 0.062068 +Converged at iteration 33, L1 5.96276e-05, Linf 0.00408345, total time[s] 0.085811 +Converged at iteration 23, L1 7.92725e-05, Linf 0.00556551, total time[s] 0.060127 +Converged at iteration 24, L1 8.35884e-05, Linf 0.00611367, total time[s] 0.064751 +Converged at iteration 26, L1 6.97029e-05, Linf 0.00377979, total time[s] 0.069898 +Converged at iteration 23, L1 9.78671e-05, Linf 0.00303965, total time[s] 0.063127 +Converged at iteration 23, L1 7.88989e-05, Linf 0.00213942, total time[s] 0.063357 +Converged at iteration 27, L1 7.94934e-05, Linf 0.00519164, total time[s] 0.071523 +Converged at iteration 30, L1 6.34403e-05, Linf 0.00414039, total time[s] 0.07719 +Converged at iteration 28, L1 7.42141e-05, Linf 0.00546868, total time[s] 0.071939 +Converged at iteration 32, L1 7.04755e-05, Linf 0.00580959, total time[s] 0.082294 +Converged at iteration 29, L1 7.55175e-05, Linf 0.00203798, total time[s] 0.0739 +Converged at iteration 31, L1 8.39743e-05, Linf 0.0122154, total time[s] 0.078137 +Converged at iteration 31, L1 6.68784e-05, Linf 0.00310631, total time[s] 0.077817 +Converged at iteration 33, L1 7.36135e-05, Linf 0.00413444, total time[s] 0.082434 +Converged at iteration 33, L1 4.22912e-05, Linf 0.00972026, total time[s] 0.082121 +Converged at iteration 34, L1 5.28577e-05, Linf 0.0121628, total time[s] 0.085474 +Converged at iteration 29, L1 7.76119e-05, Linf 0.0197615, total time[s] 0.074378 +Converged at iteration 25, L1 7.94951e-05, Linf 0.00298218, total time[s] 0.066374 +Converged at iteration 38, L1 5.23757e-05, Linf 0.0147918, total time[s] 0.097644 +Converged at iteration 36, L1 7.12364e-05, Linf 0.0176942, total time[s] 0.09521 +Converged at iteration 24, L1 8.21609e-05, Linf 0.00275435, total time[s] 0.067513 +Converged at iteration 27, L1 5.79184e-05, Linf 0.00639563, total time[s] 0.071166 +Converged at iteration 24, L1 6.71544e-05, Linf 0.0076254, total time[s] 0.062496 +Converged at iteration 28, L1 4.78338e-05, Linf 0.00696773, total time[s] 0.071536 +Converged at iteration 22, L1 3.23098e-05, Linf 0.00574093, total time[s] 0.057172 +Converged at iteration 21, L1 5.03883e-05, Linf 0.00275933, total time[s] 0.056035 +Converged at iteration 23, L1 5.49399e-05, Linf 0.00294944, total time[s] 0.063039 +Converged at iteration 25, L1 7.45952e-05, Linf 0.00258156, total time[s] 0.06432 +Converged at iteration 22, L1 5.83747e-05, Linf 0.00233488, total time[s] 0.058333 +Converged at iteration 22, L1 4.7872e-05, Linf 0.00292976, total time[s] 0.057345 +Converged at iteration 33, L1 5.94976e-05, Linf 0.00408533, total time[s] 0.082519 +Converged at iteration 23, L1 7.89216e-05, Linf 0.0055682, total time[s] 0.059571 +Converged at iteration 24, L1 8.298e-05, Linf 0.00633439, total time[s] 0.062351 +Converged at iteration 26, L1 6.94112e-05, Linf 0.00377978, total time[s] 0.066439 +Converged at iteration 23, L1 9.76987e-05, Linf 0.00304051, total time[s] 0.059401 +Converged at iteration 23, L1 7.8066e-05, Linf 0.00214356, total time[s] 0.059506 +Converged at iteration 27, L1 7.95976e-05, Linf 0.00519512, total time[s] 0.068816 +Converged at iteration 30, L1 6.27526e-05, Linf 0.00414845, total time[s] 0.075501 +Converged at iteration 28, L1 7.41397e-05, Linf 0.00546849, total time[s] 0.071808 +Converged at iteration 32, L1 7.08616e-05, Linf 0.00583802, total time[s] 0.080304 +Converged at iteration 29, L1 7.51894e-05, Linf 0.00203687, total time[s] 0.073851 +Converged at iteration 31, L1 8.38075e-05, Linf 0.0122154, total time[s] 0.078291 +Converged at iteration 31, L1 6.6463e-05, Linf 0.00310647, total time[s] 0.077761 +Converged at iteration 33, L1 7.36413e-05, Linf 0.00413396, total time[s] 0.082583 +Converged at iteration 33, L1 4.17493e-05, Linf 0.0101282, total time[s] 0.083194 +Converged at iteration 34, L1 5.2008e-05, Linf 0.0120833, total time[s] 0.086245 +Converged at iteration 29, L1 7.74932e-05, Linf 0.0201473, total time[s] 0.074359 +Converged at iteration 25, L1 7.978e-05, Linf 0.00298207, total time[s] 0.065943 +Converged at iteration 40, L1 6.85267e-05, Linf 0.00367452, total time[s] 0.175026 +Converged at iteration 35, L1 7.61497e-05, Linf 0.00339722, total time[s] 0.215312 +Converged at iteration 30, L1 9.65708e-05, Linf 0.004327, total time[s] 0.122315 +Converged at iteration 31, L1 6.45215e-05, Linf 0.00502562, total time[s] 0.137035 +Converged at iteration 27, L1 6.28479e-05, Linf 0.00499532, total time[s] 0.083862 +Converged at iteration 22, L1 8.62282e-05, Linf 0.00448819, total time[s] 0.102694 +Converged at iteration 20, L1 9.60301e-05, Linf 0.00397838, total time[s] 0.056865 +Converged at iteration 24, L1 8.84816e-05, Linf 0.00482837, total time[s] 0.068173 +Converged at iteration 28, L1 7.41946e-05, Linf 0.00445914, total time[s] 0.077146 +Converged at iteration 26, L1 8.25968e-05, Linf 0.00537165, total time[s] 0.089212 +Converged at iteration 22, L1 7.40703e-05, Linf 0.00508823, total time[s] 0.070082 +Converged at iteration 19, L1 6.64268e-05, Linf 0.00393184, total time[s] 0.077325 +Converged at iteration 30, L1 7.98845e-05, Linf 0.00329632, total time[s] 0.108184 +Converged at iteration 20, L1 8.44323e-05, Linf 0.00455034, total time[s] 0.066283 +Converged at iteration 24, L1 7.17524e-05, Linf 0.00488217, total time[s] 0.092023 +Converged at iteration 31, L1 8.93172e-05, Linf 0.00558723, total time[s] 0.127804 +Converged at iteration 27, L1 9.91486e-05, Linf 0.00569685, total time[s] 0.111536 +Converged at iteration 24, L1 8.7915e-05, Linf 0.00465018, total time[s] 0.099587 +Converged at iteration 23, L1 9.22206e-05, Linf 0.00410195, total time[s] 0.068247 +Converged at iteration 26, L1 7.22017e-05, Linf 0.00449057, total time[s] 0.080814 +Converged at iteration 29, L1 7.81558e-05, Linf 0.00479609, total time[s] 0.083962 +Converged at iteration 34, L1 7.09381e-05, Linf 0.00422684, total time[s] 0.10269 +Converged at iteration 30, L1 9.39445e-05, Linf 0.00443161, total time[s] 0.090614 +Converged at iteration 28, L1 9.50247e-05, Linf 0.00311068, total time[s] 0.081789 +Converged at iteration 32, L1 9.49386e-05, Linf 0.0037416, total time[s] 0.089088 +Converged at iteration 37, L1 7.33829e-05, Linf 0.00325904, total time[s] 0.102795 +Converged at iteration 33, L1 8.46163e-05, Linf 0.00474382, total time[s] 0.093695 +Converged at iteration 28, L1 9.65523e-05, Linf 0.00430177, total time[s] 0.078772 +Converged at iteration 24, L1 8.83085e-05, Linf 0.0032507, total time[s] 0.078547 +Converged at iteration 26, L1 8.98079e-05, Linf 0.00383964, total time[s] 0.089188 +Converged at iteration 40, L1 6.6943e-05, Linf 0.00383068, total time[s] 0.113383 +Converged at iteration 35, L1 8.2363e-05, Linf 0.00351909, total time[s] 0.155703 +Converged at iteration 30, L1 9.61886e-05, Linf 0.00424518, total time[s] 0.094284 +Converged at iteration 31, L1 6.18405e-05, Linf 0.00506587, total time[s] 0.09486 +Converged at iteration 27, L1 6.01547e-05, Linf 0.00494119, total time[s] 0.074922 +Converged at iteration 22, L1 7.71073e-05, Linf 0.00430662, total time[s] 0.061333 +Converged at iteration 21, L1 6.27915e-05, Linf 0.00334451, total time[s] 0.068879 +Converged at iteration 24, L1 9.04133e-05, Linf 0.00488746, total time[s] 0.077439 +Converged at iteration 28, L1 7.46731e-05, Linf 0.00444375, total time[s] 0.081993 +Converged at iteration 26, L1 8.05054e-05, Linf 0.00549579, total time[s] 0.073212 +Converged at iteration 22, L1 7.24364e-05, Linf 0.00483101, total time[s] 0.062291 +Converged at iteration 19, L1 5.91094e-05, Linf 0.00361616, total time[s] 0.076692 +Converged at iteration 30, L1 8.85367e-05, Linf 0.00330311, total time[s] 0.092956 +Converged at iteration 20, L1 8.51661e-05, Linf 0.00465219, total time[s] 0.06126 +Converged at iteration 24, L1 7.16e-05, Linf 0.00468177, total time[s] 0.06954 +Converged at iteration 31, L1 9.37333e-05, Linf 0.00531464, total time[s] 0.089091 +Converged at iteration 27, L1 9.8896e-05, Linf 0.00537991, total time[s] 0.095992 +Converged at iteration 24, L1 8.68171e-05, Linf 0.00451402, total time[s] 0.083245 +Converged at iteration 23, L1 9.25839e-05, Linf 0.00421975, total time[s] 0.071209 +Converged at iteration 26, L1 7.18805e-05, Linf 0.00456706, total time[s] 0.115134 +Converged at iteration 29, L1 7.63847e-05, Linf 0.00485431, total time[s] 0.079454 +Converged at iteration 34, L1 7.85655e-05, Linf 0.00433157, total time[s] 0.098171 +Converged at iteration 31, L1 6.9261e-05, Linf 0.00361741, total time[s] 0.105456 +Converged at iteration 28, L1 9.87104e-05, Linf 0.00323088, total time[s] 0.11789 +Converged at iteration 32, L1 8.69146e-05, Linf 0.00364558, total time[s] 0.091261 +Converged at iteration 36, L1 9.59036e-05, Linf 0.00369353, total time[s] 0.104302 +Converged at iteration 33, L1 8.40662e-05, Linf 0.0047844, total time[s] 0.095457 +Converged at iteration 28, L1 9.37489e-05, Linf 0.00419617, total time[s] 0.078317 +Converged at iteration 24, L1 8.21772e-05, Linf 0.00302045, total time[s] 0.070581 +Converged at iteration 26, L1 8.69626e-05, Linf 0.00389486, total time[s] 0.071407 +Converged at iteration 40, L1 6.77797e-05, Linf 0.00398769, total time[s] 0.115712 +Converged at iteration 35, L1 8.87172e-05, Linf 0.00365323, total time[s] 0.104666 +Converged at iteration 30, L1 9.0641e-05, Linf 0.00417305, total time[s] 0.094493 +Converged at iteration 31, L1 6.16499e-05, Linf 0.00505109, total time[s] 0.090384 +Converged at iteration 26, L1 9.69524e-05, Linf 0.00576123, total time[s] 0.074108 +Converged at iteration 22, L1 6.89844e-05, Linf 0.00411771, total time[s] 0.06863 +Converged at iteration 21, L1 6.52799e-05, Linf 0.00354793, total time[s] 0.065558 +Converged at iteration 24, L1 8.9063e-05, Linf 0.00498791, total time[s] 0.075983 +Converged at iteration 28, L1 7.21213e-05, Linf 0.00442748, total time[s] 0.076802 +Converged at iteration 26, L1 8.03709e-05, Linf 0.00522616, total time[s] 0.070541 +Converged at iteration 22, L1 6.8063e-05, Linf 0.00410251, total time[s] 0.063957 +Converged at iteration 18, L1 9.77565e-05, Linf 0.00399387, total time[s] 0.051336 +Converged at iteration 30, L1 9.86483e-05, Linf 0.00331269, total time[s] 0.08197 +Converged at iteration 20, L1 8.35022e-05, Linf 0.00476715, total time[s] 0.114131 +Converged at iteration 24, L1 7.09228e-05, Linf 0.00499313, total time[s] 0.07902 +Converged at iteration 31, L1 9.5152e-05, Linf 0.0044377, total time[s] 0.120608 +Converged at iteration 27, L1 8.838e-05, Linf 0.00425249, total time[s] 0.091949 +Converged at iteration 24, L1 8.35634e-05, Linf 0.00411307, total time[s] 0.06944 +Converged at iteration 23, L1 9.22041e-05, Linf 0.00437519, total time[s] 0.075319 +Converged at iteration 26, L1 7.09432e-05, Linf 0.00470765, total time[s] 0.086933 +Converged at iteration 29, L1 7.45114e-05, Linf 0.00490116, total time[s] 0.100914 +Converged at iteration 34, L1 8.16145e-05, Linf 0.00373761, total time[s] 0.125448 +Converged at iteration 31, L1 7.34722e-05, Linf 0.00351069, total time[s] 0.11687 +Converged at iteration 29, L1 7.18477e-05, Linf 0.00276302, total time[s] 0.100455 +Converged at iteration 32, L1 8.04833e-05, Linf 0.00350846, total time[s] 0.118773 +Converged at iteration 36, L1 8.27277e-05, Linf 0.00351905, total time[s] 0.126586 +Converged at iteration 33, L1 8.29424e-05, Linf 0.00487852, total time[s] 0.145987 +Converged at iteration 28, L1 9.02577e-05, Linf 0.0041024, total time[s] 0.082934 +Converged at iteration 24, L1 7.96077e-05, Linf 0.00284472, total time[s] 0.088373 +Converged at iteration 26, L1 8.35115e-05, Linf 0.00395866, total time[s] 0.098333 +Converged at iteration 40, L1 6.53003e-05, Linf 0.00427059, total time[s] 0.210609 +Converged at iteration 35, L1 9.94218e-05, Linf 0.00396732, total time[s] 0.106004 +Converged at iteration 29, L1 8.60348e-05, Linf 0.00505096, total time[s] 0.080703 +Converged at iteration 31, L1 6.12327e-05, Linf 0.00504422, total time[s] 0.086765 +Converged at iteration 26, L1 8.81403e-05, Linf 0.00564781, total time[s] 0.074135 +Converged at iteration 21, L1 9.01667e-05, Linf 0.00446956, total time[s] 0.063372 +Converged at iteration 21, L1 6.51142e-05, Linf 0.0040617, total time[s] 0.062287 +Converged at iteration 24, L1 6.92246e-05, Linf 0.00530296, total time[s] 0.075683 +Converged at iteration 28, L1 6.25506e-05, Linf 0.00441014, total time[s] 0.111403 +Converged at iteration 26, L1 7.20369e-05, Linf 0.00375845, total time[s] 0.076485 +Converged at iteration 21, L1 6.8184e-05, Linf 0.00430504, total time[s] 0.057194 +Converged at iteration 18, L1 6.26621e-05, Linf 0.00288943, total time[s] 0.049925 +Converged at iteration 31, L1 7.89025e-05, Linf 0.00270789, total time[s] 0.092217 +Converged at iteration 20, L1 8.08294e-05, Linf 0.00504156, total time[s] 0.05868 +Converged at iteration 24, L1 6.82853e-05, Linf 0.00512872, total time[s] 0.075506 +Converged at iteration 30, L1 7.10328e-05, Linf 0.00296003, total time[s] 0.086921 +Converged at iteration 25, L1 6.4286e-05, Linf 0.00435484, total time[s] 0.068824 +Converged at iteration 22, L1 9.5415e-05, Linf 0.00438887, total time[s] 0.077561 +Converged at iteration 23, L1 9.36231e-05, Linf 0.0046813, total time[s] 0.085491 +Converged at iteration 26, L1 6.76905e-05, Linf 0.00498214, total time[s] 0.075701 +Converged at iteration 29, L1 6.98237e-05, Linf 0.00486181, total time[s] 0.075409 +Converged at iteration 31, L1 8.70375e-05, Linf 0.00390778, total time[s] 0.084766 +Converged at iteration 30, L1 8.0012e-05, Linf 0.00316897, total time[s] 0.093929 +Converged at iteration 29, L1 7.96668e-05, Linf 0.00300395, total time[s] 0.099293 +Converged at iteration 32, L1 7.20303e-05, Linf 0.00331784, total time[s] 0.084754 +Converged at iteration 35, L1 7.03795e-05, Linf 0.00380885, total time[s] 0.098561 +Converged at iteration 33, L1 7.94749e-05, Linf 0.00506287, total time[s] 0.0865 +Converged at iteration 28, L1 8.16756e-05, Linf 0.00393225, total time[s] 0.077736 +Converged at iteration 24, L1 7.83626e-05, Linf 0.00242208, total time[s] 0.065324 +Converged at iteration 26, L1 7.91067e-05, Linf 0.00410648, total time[s] 0.073568 +Converged at iteration 39, L1 9.17197e-05, Linf 0.0057188, total time[s] 0.099922 +Converged at iteration 36, L1 7.3395e-05, Linf 0.00412595, total time[s] 0.095222 +Converged at iteration 26, L1 5.47401e-05, Linf 0.00577441, total time[s] 0.070675 +Converged at iteration 31, L1 6.00893e-05, Linf 0.00509902, total time[s] 0.08356 +Converged at iteration 26, L1 7.05706e-05, Linf 0.00532219, total time[s] 0.087911 +Converged at iteration 21, L1 6.38803e-05, Linf 0.00341304, total time[s] 0.06302 +Converged at iteration 20, L1 5.51481e-05, Linf 0.00447244, total time[s] 0.058744 +Converged at iteration 22, L1 4.42111e-05, Linf 0.00752113, total time[s] 0.062459 +Converged at iteration 26, L1 6.84648e-05, Linf 0.00592421, total time[s] 0.081679 +Converged at iteration 25, L1 6.24382e-05, Linf 0.00405001, total time[s] 0.068655 +Converged at iteration 20, L1 7.8841e-05, Linf 0.00546691, total time[s] 0.060921 +Converged at iteration 17, L1 7.49187e-05, Linf 0.0035754, total time[s] 0.05586 +Converged at iteration 31, L1 9.72228e-05, Linf 0.00280169, total time[s] 0.088222 +Converged at iteration 20, L1 6.21874e-05, Linf 0.00537667, total time[s] 0.057052 +Converged at iteration 23, L1 9.73162e-05, Linf 0.00644298, total time[s] 0.064014 +Converged at iteration 27, L1 8.57176e-05, Linf 0.00516201, total time[s] 0.070562 +Converged at iteration 23, L1 8.33231e-05, Linf 0.00706966, total time[s] 0.06395 +Converged at iteration 21, L1 8.00065e-05, Linf 0.00485896, total time[s] 0.059744 +Converged at iteration 23, L1 7.322e-05, Linf 0.00375497, total time[s] 0.064684 +Converged at iteration 25, L1 9.63703e-05, Linf 0.006303, total time[s] 0.070348 +Converged at iteration 28, L1 9.42946e-05, Linf 0.00549329, total time[s] 0.083097 +Converged at iteration 30, L1 5.87667e-05, Linf 0.00501573, total time[s] 0.088061 +Converged at iteration 28, L1 6.73847e-05, Linf 0.00331717, total time[s] 0.081328 +Converged at iteration 29, L1 8.61655e-05, Linf 0.00342485, total time[s] 0.082531 +Converged at iteration 30, L1 8.74472e-05, Linf 0.00305766, total time[s] 0.083021 +Converged at iteration 30, L1 8.95259e-05, Linf 0.00326275, total time[s] 0.086905 +Converged at iteration 33, L1 7.14377e-05, Linf 0.00542239, total time[s] 0.094172 +Converged at iteration 28, L1 6.41645e-05, Linf 0.00350394, total time[s] 0.075388 +Converged at iteration 24, L1 8.8326e-05, Linf 0.00175216, total time[s] 0.07238 +Converged at iteration 24, L1 8.94173e-05, Linf 0.00467971, total time[s] 0.073433 +Converged at iteration 39, L1 7.12637e-05, Linf 0.00700084, total time[s] 0.102396 +Converged at iteration 36, L1 7.16226e-05, Linf 0.00581501, total time[s] 0.107634 +Converged at iteration 24, L1 6.16009e-05, Linf 0.00286113, total time[s] 0.071964 +Converged at iteration 31, L1 5.78603e-05, Linf 0.00508743, total time[s] 0.082828 +Converged at iteration 25, L1 7.35753e-05, Linf 0.00540467, total time[s] 0.073852 +Converged at iteration 20, L1 9.88541e-05, Linf 0.00429004, total time[s] 0.061342 +Converged at iteration 19, L1 5.87917e-05, Linf 0.00441466, total time[s] 0.06008 +Converged at iteration 20, L1 7.77022e-05, Linf 0.00669274, total time[s] 0.054491 +Converged at iteration 24, L1 5.60093e-05, Linf 0.00384944, total time[s] 0.066681 +Converged at iteration 24, L1 6.54611e-05, Linf 0.00478766, total time[s] 0.069635 +Converged at iteration 20, L1 5.44114e-05, Linf 0.00521576, total time[s] 0.055536 +Converged at iteration 16, L1 9.22949e-05, Linf 0.00350097, total time[s] 0.047187 +Converged at iteration 32, L1 6.82051e-05, Linf 0.00267629, total time[s] 0.082942 +Converged at iteration 19, L1 9.15708e-05, Linf 0.00666485, total time[s] 0.051457 +Converged at iteration 23, L1 7.25286e-05, Linf 0.00622424, total time[s] 0.065852 +Converged at iteration 26, L1 6.69438e-05, Linf 0.00550825, total time[s] 0.074017 +Converged at iteration 23, L1 5.54579e-05, Linf 0.00703765, total time[s] 0.063994 +Converged at iteration 20, L1 6.98744e-05, Linf 0.00498628, total time[s] 0.057492 +Converged at iteration 22, L1 9.66254e-05, Linf 0.00443884, total time[s] 0.059802 +Converged at iteration 25, L1 8.13753e-05, Linf 0.0037604, total time[s] 0.071106 +Converged at iteration 28, L1 7.17327e-05, Linf 0.00375782, total time[s] 0.080371 +Converged at iteration 29, L1 6.61964e-05, Linf 0.00600447, total time[s] 0.081972 +Converged at iteration 27, L1 6.58448e-05, Linf 0.00385183, total time[s] 0.071157 +Converged at iteration 29, L1 7.48352e-05, Linf 0.00398895, total time[s] 0.082302 +Converged at iteration 29, L1 8.48102e-05, Linf 0.00274488, total time[s] 0.075636 +Converged at iteration 28, L1 6.85264e-05, Linf 0.00227477, total time[s] 0.075945 +Converged at iteration 33, L1 5.79412e-05, Linf 0.00605374, total time[s] 0.08446 +Converged at iteration 26, L1 9.38284e-05, Linf 0.00347729, total time[s] 0.073522 +Converged at iteration 25, L1 7.05689e-05, Linf 0.00197706, total time[s] 0.072004 +Converged at iteration 23, L1 6.10129e-05, Linf 0.00274024, total time[s] 0.069654 +Converged at iteration 39, L1 7.00759e-05, Linf 0.00701063, total time[s] 0.122069 +Converged at iteration 36, L1 7.05908e-05, Linf 0.00585335, total time[s] 0.092412 +Converged at iteration 24, L1 6.19772e-05, Linf 0.00283957, total time[s] 0.063282 +Converged at iteration 31, L1 5.69835e-05, Linf 0.00507789, total time[s] 0.080823 +Converged at iteration 25, L1 7.42229e-05, Linf 0.00547919, total time[s] 0.069911 +Converged at iteration 20, L1 9.93215e-05, Linf 0.00432892, total time[s] 0.06791 +Converged at iteration 19, L1 5.74843e-05, Linf 0.00438078, total time[s] 0.059292 +Converged at iteration 20, L1 7.75922e-05, Linf 0.00653523, total time[s] 0.060111 +Converged at iteration 24, L1 5.52389e-05, Linf 0.00400701, total time[s] 0.074818 +Converged at iteration 24, L1 6.77203e-05, Linf 0.0048271, total time[s] 0.069276 +Converged at iteration 20, L1 5.50276e-05, Linf 0.00527435, total time[s] 0.059849 +Converged at iteration 16, L1 9.1513e-05, Linf 0.0036077, total time[s] 0.056315 +Converged at iteration 32, L1 6.86383e-05, Linf 0.00269916, total time[s] 0.095774 +Converged at iteration 19, L1 9.11153e-05, Linf 0.00663132, total time[s] 0.058427 +Converged at iteration 23, L1 7.2325e-05, Linf 0.00642548, total time[s] 0.067629 +Converged at iteration 26, L1 6.6717e-05, Linf 0.00545519, total time[s] 0.070668 +Converged at iteration 23, L1 5.38945e-05, Linf 0.00517692, total time[s] 0.066017 +Converged at iteration 20, L1 6.95638e-05, Linf 0.00492215, total time[s] 0.062002 +Converged at iteration 22, L1 9.68398e-05, Linf 0.00414133, total time[s] 0.062191 +Converged at iteration 25, L1 8.07036e-05, Linf 0.00368095, total time[s] 0.072357 +Converged at iteration 28, L1 7.11169e-05, Linf 0.00365574, total time[s] 0.136789 +Converged at iteration 29, L1 6.58851e-05, Linf 0.00597283, total time[s] 0.089836 +Converged at iteration 27, L1 6.62554e-05, Linf 0.00384914, total time[s] 0.088675 +Converged at iteration 29, L1 7.55432e-05, Linf 0.00400728, total time[s] 0.088987 +Converged at iteration 29, L1 8.40817e-05, Linf 0.00274452, total time[s] 0.078515 +Converged at iteration 28, L1 6.65782e-05, Linf 0.00225801, total time[s] 0.075945 +Converged at iteration 33, L1 5.66907e-05, Linf 0.00605136, total time[s] 0.088484 +Converged at iteration 26, L1 9.50675e-05, Linf 0.0035379, total time[s] 0.083792 +Converged at iteration 25, L1 7.20187e-05, Linf 0.00200821, total time[s] 0.074977 +Converged at iteration 23, L1 6.08483e-05, Linf 0.00273931, total time[s] 0.063999 +Converged at iteration 39, L1 6.89988e-05, Linf 0.00701297, total time[s] 0.10324 +Converged at iteration 36, L1 6.97648e-05, Linf 0.00589489, total time[s] 0.093888 +Converged at iteration 24, L1 6.17541e-05, Linf 0.0028664, total time[s] 0.068313 +Converged at iteration 31, L1 5.63589e-05, Linf 0.00506019, total time[s] 0.079954 +Converged at iteration 25, L1 7.5564e-05, Linf 0.00557498, total time[s] 0.064842 +Converged at iteration 20, L1 9.90887e-05, Linf 0.00435973, total time[s] 0.058785 +Converged at iteration 19, L1 5.6717e-05, Linf 0.0043629, total time[s] 0.052342 +Converged at iteration 20, L1 7.73295e-05, Linf 0.00633134, total time[s] 0.055945 +Converged at iteration 24, L1 5.45415e-05, Linf 0.00409057, total time[s] 0.068602 +Converged at iteration 24, L1 6.77793e-05, Linf 0.00487695, total time[s] 0.065733 +Converged at iteration 20, L1 5.5582e-05, Linf 0.00529289, total time[s] 0.054208 +Converged at iteration 16, L1 9.05261e-05, Linf 0.00371242, total time[s] 0.044322 +Converged at iteration 32, L1 6.8154e-05, Linf 0.00271736, total time[s] 0.092797 +Converged at iteration 19, L1 9.14746e-05, Linf 0.0066049, total time[s] 0.051457 +Converged at iteration 23, L1 7.22963e-05, Linf 0.0063488, total time[s] 0.063838 +Converged at iteration 26, L1 6.66252e-05, Linf 0.00543856, total time[s] 0.079595 +Converged at iteration 23, L1 5.3652e-05, Linf 0.00516062, total time[s] 0.062931 +Converged at iteration 20, L1 7.00126e-05, Linf 0.00492251, total time[s] 0.05403 +Converged at iteration 22, L1 9.83279e-05, Linf 0.00428446, total time[s] 0.059627 +Converged at iteration 25, L1 8.09891e-05, Linf 0.00362314, total time[s] 0.07103 +Converged at iteration 28, L1 7.12215e-05, Linf 0.00357503, total time[s] 0.07641 +Converged at iteration 29, L1 6.88218e-05, Linf 0.00710738, total time[s] 0.088024 +Converged at iteration 27, L1 6.69708e-05, Linf 0.00386691, total time[s] 0.086925 +Converged at iteration 29, L1 7.71179e-05, Linf 0.00402964, total time[s] 0.087339 +Converged at iteration 29, L1 8.62294e-05, Linf 0.00275136, total time[s] 0.116621 +Converged at iteration 28, L1 6.85758e-05, Linf 0.00223869, total time[s] 0.080337 +Converged at iteration 32, L1 9.89415e-05, Linf 0.00723749, total time[s] 0.088744 +Converged at iteration 26, L1 9.55709e-05, Linf 0.0036089, total time[s] 0.071328 +Converged at iteration 25, L1 7.44782e-05, Linf 0.00206625, total time[s] 0.071257 +Converged at iteration 23, L1 6.07512e-05, Linf 0.00266016, total time[s] 0.063949 +Converged at iteration 39, L1 6.88543e-05, Linf 0.00700626, total time[s] 0.112913 +Converged at iteration 36, L1 6.88075e-05, Linf 0.0059319, total time[s] 0.105954 +Converged at iteration 24, L1 6.20097e-05, Linf 0.00286302, total time[s] 0.066815 +Converged at iteration 30, L1 9.96382e-05, Linf 0.00621053, total time[s] 0.079424 +Converged at iteration 25, L1 7.76019e-05, Linf 0.00574606, total time[s] 0.067477 +Converged at iteration 20, L1 9.96714e-05, Linf 0.00435783, total time[s] 0.066146 +Converged at iteration 19, L1 5.57968e-05, Linf 0.00436391, total time[s] 0.056177 +Converged at iteration 20, L1 7.67337e-05, Linf 0.00635429, total time[s] 0.055314 +Converged at iteration 24, L1 5.38393e-05, Linf 0.00366607, total time[s] 0.077424 +Converged at iteration 24, L1 6.86001e-05, Linf 0.00496803, total time[s] 0.093879 +Converged at iteration 20, L1 5.72593e-05, Linf 0.00534473, total time[s] 0.065813 +Converged at iteration 16, L1 9.03344e-05, Linf 0.0038307, total time[s] 0.053093 +Converged at iteration 32, L1 6.79607e-05, Linf 0.00273783, total time[s] 0.110384 +Converged at iteration 19, L1 9.14973e-05, Linf 0.00655607, total time[s] 0.06972 +Converged at iteration 23, L1 7.23792e-05, Linf 0.00625605, total time[s] 0.071188 +Converged at iteration 26, L1 6.7155e-05, Linf 0.00540667, total time[s] 0.09406 +Converged at iteration 23, L1 5.33109e-05, Linf 0.00513858, total time[s] 0.065929 +Converged at iteration 20, L1 7.05291e-05, Linf 0.00492557, total time[s] 0.058737 +Converged at iteration 23, L1 6.34072e-05, Linf 0.00275443, total time[s] 0.063479 +Converged at iteration 25, L1 8.08623e-05, Linf 0.00356682, total time[s] 0.074235 +Converged at iteration 28, L1 7.13753e-05, Linf 0.00347444, total time[s] 0.095537 +Converged at iteration 29, L1 6.74364e-05, Linf 0.00605606, total time[s] 0.106743 +Converged at iteration 27, L1 6.72632e-05, Linf 0.00388177, total time[s] 0.090231 +Converged at iteration 29, L1 7.82643e-05, Linf 0.00411671, total time[s] 0.10441 +Converged at iteration 29, L1 8.52489e-05, Linf 0.00275748, total time[s] 0.088513 +Converged at iteration 28, L1 6.67742e-05, Linf 0.00221622, total time[s] 0.080807 +Converged at iteration 32, L1 9.73344e-05, Linf 0.00723322, total time[s] 0.088444 +Converged at iteration 26, L1 9.7593e-05, Linf 0.00375463, total time[s] 0.0705 +Converged at iteration 25, L1 7.49289e-05, Linf 0.00212545, total time[s] 0.074323 +Converged at iteration 23, L1 6.14073e-05, Linf 0.00258244, total time[s] 0.084453 +Converged at iteration 39, L1 6.67988e-05, Linf 0.00699089, total time[s] 0.107963 +Converged at iteration 36, L1 6.71122e-05, Linf 0.00596448, total time[s] 0.133454 +Converged at iteration 24, L1 6.23586e-05, Linf 0.00278875, total time[s] 0.065358 +Converged at iteration 30, L1 9.82691e-05, Linf 0.00618087, total time[s] 0.086922 +Converged at iteration 25, L1 8.16441e-05, Linf 0.00599794, total time[s] 0.067793 +Converged at iteration 21, L1 5.90815e-05, Linf 0.00385139, total time[s] 0.079188 +Converged at iteration 19, L1 5.53243e-05, Linf 0.00437795, total time[s] 0.071227 +Converged at iteration 20, L1 7.57652e-05, Linf 0.00675316, total time[s] 0.077276 +Converged at iteration 24, L1 5.27292e-05, Linf 0.00315989, total time[s] 0.078101 +Converged at iteration 24, L1 7.30535e-05, Linf 0.00510515, total time[s] 0.086288 +Converged at iteration 20, L1 5.9938e-05, Linf 0.00542527, total time[s] 0.056463 +Converged at iteration 16, L1 9.0014e-05, Linf 0.0039778, total time[s] 0.045591 +Converged at iteration 32, L1 6.62631e-05, Linf 0.00275711, total time[s] 0.090632 +Converged at iteration 19, L1 9.18154e-05, Linf 0.00648719, total time[s] 0.065714 +Converged at iteration 23, L1 7.21184e-05, Linf 0.00614401, total time[s] 0.084737 +Converged at iteration 26, L1 6.78592e-05, Linf 0.00538715, total time[s] 0.089376 +Converged at iteration 23, L1 5.29145e-05, Linf 0.00512163, total time[s] 0.097829 +Converged at iteration 20, L1 7.13783e-05, Linf 0.00495027, total time[s] 0.070858 +Converged at iteration 23, L1 6.53645e-05, Linf 0.00272085, total time[s] 0.086779 +Converged at iteration 25, L1 8.15075e-05, Linf 0.00351207, total time[s] 0.110791 +Converged at iteration 28, L1 7.23598e-05, Linf 0.00345715, total time[s] 0.090457 +Converged at iteration 29, L1 6.89622e-05, Linf 0.00611732, total time[s] 0.076786 +Converged at iteration 27, L1 6.86446e-05, Linf 0.00390043, total time[s] 0.082914 +Converged at iteration 29, L1 7.88518e-05, Linf 0.00413123, total time[s] 0.091682 +Converged at iteration 29, L1 8.5741e-05, Linf 0.00276381, total time[s] 0.078362 +Converged at iteration 28, L1 6.71562e-05, Linf 0.00218446, total time[s] 0.078921 +Converged at iteration 32, L1 9.56843e-05, Linf 0.00721254, total time[s] 0.088157 +Converged at iteration 27, L1 6.04774e-05, Linf 0.00339485, total time[s] 0.076145 +Converged at iteration 25, L1 7.57304e-05, Linf 0.00219216, total time[s] 0.074989 +Converged at iteration 23, L1 6.17974e-05, Linf 0.00252732, total time[s] 0.074317 +Converged at iteration 39, L1 6.69103e-05, Linf 0.0069864, total time[s] 0.113083 +Converged at iteration 36, L1 6.70826e-05, Linf 0.00596418, total time[s] 0.100166 +Converged at iteration 24, L1 6.23658e-05, Linf 0.0027873, total time[s] 0.065028 +Converged at iteration 30, L1 9.80666e-05, Linf 0.00618089, total time[s] 0.078894 +Converged at iteration 25, L1 8.16389e-05, Linf 0.00599746, total time[s] 0.067761 +Converged at iteration 21, L1 5.91121e-05, Linf 0.00385162, total time[s] 0.074112 +Converged at iteration 19, L1 5.5321e-05, Linf 0.00437798, total time[s] 0.073058 +Converged at iteration 20, L1 7.57194e-05, Linf 0.00675261, total time[s] 0.061567 +Converged at iteration 24, L1 5.27464e-05, Linf 0.0031596, total time[s] 0.080629 +Converged at iteration 24, L1 7.14028e-05, Linf 0.0051049, total time[s] 0.069493 +Converged at iteration 20, L1 5.993e-05, Linf 0.00542515, total time[s] 0.056346 +Converged at iteration 16, L1 8.99964e-05, Linf 0.00397735, total time[s] 0.045055 +Converged at iteration 32, L1 6.62595e-05, Linf 0.00275705, total time[s] 0.095754 +Converged at iteration 19, L1 9.18233e-05, Linf 0.0064876, total time[s] 0.053047 +Converged at iteration 23, L1 7.21227e-05, Linf 0.00614436, total time[s] 0.068855 +Converged at iteration 26, L1 6.78656e-05, Linf 0.00538737, total time[s] 0.072089 +Converged at iteration 23, L1 5.29007e-05, Linf 0.00511939, total time[s] 0.065262 +Converged at iteration 20, L1 7.13903e-05, Linf 0.00495479, total time[s] 0.057763 +Converged at iteration 23, L1 6.55955e-05, Linf 0.00279869, total time[s] 0.070717 +Converged at iteration 25, L1 8.18444e-05, Linf 0.00361391, total time[s] 0.072296 +Converged at iteration 28, L1 7.23612e-05, Linf 0.00346155, total time[s] 0.083064 +Converged at iteration 29, L1 6.89536e-05, Linf 0.00609853, total time[s] 0.079689 +Converged at iteration 27, L1 6.88099e-05, Linf 0.00390112, total time[s] 0.087573 +Converged at iteration 29, L1 7.91433e-05, Linf 0.00413121, total time[s] 0.078111 +Converged at iteration 29, L1 8.57475e-05, Linf 0.00276378, total time[s] 0.075832 +Converged at iteration 28, L1 6.74992e-05, Linf 0.0021845, total time[s] 0.075706 +Converged at iteration 32, L1 9.56722e-05, Linf 0.00721223, total time[s] 0.087321 +Converged at iteration 27, L1 6.05149e-05, Linf 0.00339434, total time[s] 0.083812 +Converged at iteration 25, L1 7.58242e-05, Linf 0.00219109, total time[s] 0.073238 +Converged at iteration 23, L1 6.18256e-05, Linf 0.00253585, total time[s] 0.065675 +Converged at iteration 39, L1 6.68323e-05, Linf 0.00698742, total time[s] 0.138067 +Converged at iteration 36, L1 6.70711e-05, Linf 0.0059643, total time[s] 0.098529 +Converged at iteration 24, L1 6.23598e-05, Linf 0.00278732, total time[s] 0.067017 +Converged at iteration 30, L1 9.79915e-05, Linf 0.00618089, total time[s] 0.079838 +Converged at iteration 25, L1 8.17178e-05, Linf 0.0059977, total time[s] 0.084001 +Converged at iteration 21, L1 5.91067e-05, Linf 0.00385157, total time[s] 0.061066 +Converged at iteration 19, L1 5.53235e-05, Linf 0.00437797, total time[s] 0.055266 +Converged at iteration 20, L1 7.57223e-05, Linf 0.00675296, total time[s] 0.074856 +Converged at iteration 24, L1 5.27493e-05, Linf 0.0031597, total time[s] 0.075722 +Converged at iteration 24, L1 7.14052e-05, Linf 0.00510502, total time[s] 0.080731 +Converged at iteration 20, L1 5.99328e-05, Linf 0.00542521, total time[s] 0.058183 +Converged at iteration 16, L1 8.99977e-05, Linf 0.00397751, total time[s] 0.044232 +Converged at iteration 32, L1 6.6259e-05, Linf 0.00275708, total time[s] 0.085372 +Converged at iteration 19, L1 9.18216e-05, Linf 0.00648755, total time[s] 0.052902 +Converged at iteration 23, L1 7.20206e-05, Linf 0.00616416, total time[s] 0.059414 +Converged at iteration 26, L1 6.78644e-05, Linf 0.00538706, total time[s] 0.074184 +Converged at iteration 23, L1 5.29204e-05, Linf 0.00512212, total time[s] 0.063933 +Converged at iteration 20, L1 7.13902e-05, Linf 0.00495003, total time[s] 0.05691 +Converged at iteration 23, L1 6.53663e-05, Linf 0.00272089, total time[s] 0.073345 +Converged at iteration 25, L1 8.1793e-05, Linf 0.00350973, total time[s] 0.081826 +Converged at iteration 28, L1 7.24239e-05, Linf 0.00345835, total time[s] 0.079429 +Converged at iteration 29, L1 6.89465e-05, Linf 0.00609927, total time[s] 0.079569 +Converged at iteration 27, L1 6.86403e-05, Linf 0.00387068, total time[s] 0.072453 +Converged at iteration 29, L1 7.90515e-05, Linf 0.00412165, total time[s] 0.08574 +Converged at iteration 29, L1 8.5746e-05, Linf 0.00276379, total time[s] 0.079238 +Converged at iteration 28, L1 6.71608e-05, Linf 0.00218448, total time[s] 0.077746 +Converged at iteration 32, L1 9.57349e-05, Linf 0.00721232, total time[s] 0.091555 +Converged at iteration 27, L1 6.00056e-05, Linf 0.00339349, total time[s] 0.073775 +Converged at iteration 25, L1 7.55758e-05, Linf 0.00219258, total time[s] 0.076068 +Converged at iteration 23, L1 6.18761e-05, Linf 0.00248415, total time[s] 0.067346 +Converged at iteration 39, L1 6.68203e-05, Linf 0.00698839, total time[s] 0.102212 +Converged at iteration 36, L1 6.83309e-05, Linf 0.00589978, total time[s] 0.122532 +Converged at iteration 24, L1 6.23636e-05, Linf 0.00278809, total time[s] 0.070358 +Converged at iteration 30, L1 9.80268e-05, Linf 0.00622088, total time[s] 0.083036 +Converged at iteration 25, L1 8.18807e-05, Linf 0.00599776, total time[s] 0.081343 +Converged at iteration 21, L1 5.91072e-05, Linf 0.00385139, total time[s] 0.062904 +Converged at iteration 19, L1 5.53244e-05, Linf 0.00437795, total time[s] 0.054951 +Converged at iteration 20, L1 7.57261e-05, Linf 0.00675294, total time[s] 0.057159 +Converged at iteration 24, L1 5.27316e-05, Linf 0.00315985, total time[s] 0.069152 +Converged at iteration 24, L1 7.14231e-05, Linf 0.00510509, total time[s] 0.069359 +Converged at iteration 20, L1 5.99329e-05, Linf 0.00542524, total time[s] 0.058386 +Converged at iteration 16, L1 8.99921e-05, Linf 0.00397758, total time[s] 0.045732 +Converged at iteration 32, L1 6.62531e-05, Linf 0.0027571, total time[s] 0.099497 +Converged at iteration 19, L1 9.17665e-05, Linf 0.00624411, total time[s] 0.060464 +Converged at iteration 23, L1 7.23933e-05, Linf 0.00619302, total time[s] 0.065281 +Converged at iteration 26, L1 6.78764e-05, Linf 0.00539349, total time[s] 0.082955 +Converged at iteration 23, L1 5.38561e-05, Linf 0.0064397, total time[s] 0.063222 +Converged at iteration 20, L1 7.13586e-05, Linf 0.00495011, total time[s] 0.061641 +Converged at iteration 23, L1 6.53273e-05, Linf 0.00272088, total time[s] 0.063112 +Converged at iteration 25, L1 8.16656e-05, Linf 0.00362362, total time[s] 0.068886 +Converged at iteration 28, L1 7.23917e-05, Linf 0.00345794, total time[s] 0.077241 +Converged at iteration 29, L1 6.89794e-05, Linf 0.00611632, total time[s] 0.082783 +Converged at iteration 27, L1 6.86493e-05, Linf 0.00393763, total time[s] 0.072381 +Converged at iteration 29, L1 7.88606e-05, Linf 0.00413121, total time[s] 0.077941 +Converged at iteration 29, L1 8.57509e-05, Linf 0.0027638, total time[s] 0.07722 +Converged at iteration 28, L1 6.71741e-05, Linf 0.00218446, total time[s] 0.072896 +Converged at iteration 32, L1 9.58815e-05, Linf 0.0072121, total time[s] 0.08441 +Converged at iteration 27, L1 6.08105e-05, Linf 0.00339466, total time[s] 0.078088 +Converged at iteration 25, L1 7.55739e-05, Linf 0.00219232, total time[s] 0.067342 +Converged at iteration 23, L1 6.18022e-05, Linf 0.00253572, total time[s] 0.061462 +Converged at iteration 39, L1 6.68127e-05, Linf 0.00698687, total time[s] 0.107123 +Converged at iteration 36, L1 6.76178e-05, Linf 0.0059643, total time[s] 0.104309 +Converged at iteration 24, L1 6.23766e-05, Linf 0.00278722, total time[s] 0.069765 +Converged at iteration 30, L1 9.79906e-05, Linf 0.00618087, total time[s] 0.083511 +Converged at iteration 25, L1 8.16443e-05, Linf 0.00599775, total time[s] 0.069516 +Converged at iteration 21, L1 5.92816e-05, Linf 0.00385162, total time[s] 0.062291 +Converged at iteration 19, L1 5.58105e-05, Linf 0.00433502, total time[s] 0.054108 +Converged at iteration 20, L1 7.57329e-05, Linf 0.00675316, total time[s] 0.06748 +Converged at iteration 24, L1 5.27638e-05, Linf 0.00315883, total time[s] 0.084681 +Converged at iteration 24, L1 7.15423e-05, Linf 0.00511136, total time[s] 0.080101 +Converged at iteration 20, L1 5.99334e-05, Linf 0.00542525, total time[s] 0.058274 +Converged at iteration 16, L1 8.99953e-05, Linf 0.00397764, total time[s] 0.056396 +Converged at iteration 32, L1 6.62596e-05, Linf 0.00275707, total time[s] 0.111998 +Converged at iteration 19, L1 9.18057e-05, Linf 0.0064871, total time[s] 0.055246 +Converged at iteration 23, L1 7.30729e-05, Linf 0.00597707, total time[s] 0.06558 +Converged at iteration 26, L1 6.79468e-05, Linf 0.00538731, total time[s] 0.074941 +Converged at iteration 23, L1 5.2927e-05, Linf 0.00512233, total time[s] 0.067886 +Converged at iteration 20, L1 7.14209e-05, Linf 0.00495025, total time[s] 0.065838 +Converged at iteration 23, L1 6.53738e-05, Linf 0.00272091, total time[s] 0.079015 +Converged at iteration 25, L1 8.16172e-05, Linf 0.00351023, total time[s] 0.069987 +Converged at iteration 28, L1 7.23592e-05, Linf 0.00345719, total time[s] 0.077692 +Converged at iteration 29, L1 6.8902e-05, Linf 0.00607256, total time[s] 0.079066 +Converged at iteration 27, L1 6.86989e-05, Linf 0.00390034, total time[s] 0.072831 +Converged at iteration 29, L1 7.92831e-05, Linf 0.00413105, total time[s] 0.086084 +Converged at iteration 29, L1 8.61254e-05, Linf 0.0027638, total time[s] 0.084023 +Converged at iteration 28, L1 6.83766e-05, Linf 0.00218446, total time[s] 0.090805 +Converged at iteration 32, L1 9.57263e-05, Linf 0.00712665, total time[s] 0.0881 +Converged at iteration 27, L1 6.04878e-05, Linf 0.00343788, total time[s] 0.075437 +Converged at iteration 25, L1 7.55452e-05, Linf 0.00219336, total time[s] 0.069104 +Converged at iteration 23, L1 6.17788e-05, Linf 0.00249482, total time[s] 0.060974 +Converged at iteration 39, L1 6.69293e-05, Linf 0.00698379, total time[s] 0.100243 +Converged at iteration 36, L1 6.70673e-05, Linf 0.00596447, total time[s] 0.098994 +Converged at iteration 24, L1 6.23689e-05, Linf 0.00278744, total time[s] 0.066066 +Converged at iteration 30, L1 9.79886e-05, Linf 0.00618088, total time[s] 0.07754 +Converged at iteration 25, L1 8.16553e-05, Linf 0.00608178, total time[s] 0.066052 +Converged at iteration 21, L1 5.92701e-05, Linf 0.00385142, total time[s] 0.058265 +Converged at iteration 19, L1 5.53067e-05, Linf 0.00437794, total time[s] 0.059945 +Converged at iteration 20, L1 7.57335e-05, Linf 0.00675304, total time[s] 0.055297 +Converged at iteration 24, L1 5.274e-05, Linf 0.00315911, total time[s] 0.064924 +Converged at iteration 24, L1 7.1406e-05, Linf 0.00509478, total time[s] 0.065933 +Converged at iteration 20, L1 5.99344e-05, Linf 0.00542525, total time[s] 0.058868 +Converged at iteration 16, L1 8.99924e-05, Linf 0.00397766, total time[s] 0.045646 +Converged at iteration 32, L1 6.62888e-05, Linf 0.00275718, total time[s] 0.08398 +Converged at iteration 19, L1 9.18252e-05, Linf 0.0064875, total time[s] 0.051945 +Converged at iteration 23, L1 7.21276e-05, Linf 0.00614427, total time[s] 0.065632 +Converged at iteration 26, L1 6.78525e-05, Linf 0.00538607, total time[s] 0.072554 +Converged at iteration 23, L1 5.29133e-05, Linf 0.00512289, total time[s] 0.065948 +Converged at iteration 20, L1 7.13725e-05, Linf 0.00495019, total time[s] 0.058915 +Converged at iteration 23, L1 6.53599e-05, Linf 0.00270742, total time[s] 0.065444 +Converged at iteration 25, L1 8.16088e-05, Linf 0.00351007, total time[s] 0.083848 +Converged at iteration 28, L1 7.23486e-05, Linf 0.00345714, total time[s] 0.088907 +Converged at iteration 29, L1 6.89621e-05, Linf 0.00609953, total time[s] 0.079104 +Converged at iteration 27, L1 6.86486e-05, Linf 0.00389967, total time[s] 0.076977 +Converged at iteration 29, L1 7.87585e-05, Linf 0.00412329, total time[s] 0.083401 +Converged at iteration 29, L1 8.57645e-05, Linf 0.00276381, total time[s] 0.085327 +Converged at iteration 28, L1 6.72148e-05, Linf 0.00218442, total time[s] 0.074496 +Converged at iteration 32, L1 9.57567e-05, Linf 0.00721415, total time[s] 0.084411 +Converged at iteration 27, L1 6.09055e-05, Linf 0.00339312, total time[s] 0.071405 +Converged at iteration 25, L1 7.58273e-05, Linf 0.00219163, total time[s] 0.068785 +Converged at iteration 23, L1 6.18042e-05, Linf 0.0025359, total time[s] 0.063792 +Converged at iteration 39, L1 6.68114e-05, Linf 0.00698758, total time[s] 0.104807 +Converged at iteration 36, L1 6.70737e-05, Linf 0.00596751, total time[s] 0.104919 +Converged at iteration 24, L1 6.25426e-05, Linf 0.00278754, total time[s] 0.065659 +Converged at iteration 30, L1 9.8267e-05, Linf 0.00618086, total time[s] 0.092034 +Converged at iteration 25, L1 8.1736e-05, Linf 0.00599774, total time[s] 0.075926 +Converged at iteration 21, L1 5.90813e-05, Linf 0.00385085, total time[s] 0.088376 +Converged at iteration 19, L1 5.54682e-05, Linf 0.00437795, total time[s] 0.055598 +Converged at iteration 20, L1 7.57429e-05, Linf 0.00675308, total time[s] 0.054828 +Converged at iteration 24, L1 5.27312e-05, Linf 0.00315992, total time[s] 0.064863 +Converged at iteration 24, L1 7.1417e-05, Linf 0.00510514, total time[s] 0.074451 +Converged at iteration 20, L1 5.99309e-05, Linf 0.00542525, total time[s] 0.059807 +Converged at iteration 16, L1 8.99983e-05, Linf 0.00397767, total time[s] 0.043629 +Converged at iteration 32, L1 6.62581e-05, Linf 0.00275712, total time[s] 0.094239 +Converged at iteration 19, L1 9.18211e-05, Linf 0.00648756, total time[s] 0.051217 +Converged at iteration 23, L1 7.21242e-05, Linf 0.00614414, total time[s] 0.067966 +Converged at iteration 26, L1 6.79716e-05, Linf 0.00538659, total time[s] 0.079718 +Converged at iteration 23, L1 5.29222e-05, Linf 0.00511849, total time[s] 0.075386 +Converged at iteration 20, L1 7.13461e-05, Linf 0.00495006, total time[s] 0.057726 +Converged at iteration 23, L1 6.53571e-05, Linf 0.00272084, total time[s] 0.063711 +Converged at iteration 25, L1 8.17989e-05, Linf 0.00347882, total time[s] 0.073483 +Converged at iteration 28, L1 7.24539e-05, Linf 0.00345891, total time[s] 0.095558 +Converged at iteration 29, L1 6.97201e-05, Linf 0.00609821, total time[s] 0.077885 +Converged at iteration 27, L1 6.87072e-05, Linf 0.00390031, total time[s] 0.071389 +Converged at iteration 29, L1 7.88548e-05, Linf 0.00413123, total time[s] 0.083472 +Converged at iteration 29, L1 8.70267e-05, Linf 0.00276374, total time[s] 0.078536 +Converged at iteration 28, L1 6.7581e-05, Linf 0.00218446, total time[s] 0.077109 +Converged at iteration 32, L1 9.56842e-05, Linf 0.00721266, total time[s] 0.086969 +Converged at iteration 27, L1 6.02714e-05, Linf 0.00339437, total time[s] 0.07056 +Converged at iteration 25, L1 7.55709e-05, Linf 0.00219221, total time[s] 0.066333 +Converged at iteration 23, L1 6.17758e-05, Linf 0.00253479, total time[s] 0.064928 +Converged at iteration 39, L1 6.6812e-05, Linf 0.00698729, total time[s] 0.102642 +Converged at iteration 36, L1 6.7037e-05, Linf 0.00579124, total time[s] 0.141262 +Converged at iteration 24, L1 6.23976e-05, Linf 0.00283537, total time[s] 0.067534 +Converged at iteration 30, L1 9.79904e-05, Linf 0.00618087, total time[s] 0.081972 +Converged at iteration 25, L1 8.16432e-05, Linf 0.00599793, total time[s] 0.067279 +Converged at iteration 21, L1 5.99845e-05, Linf 0.0038513, total time[s] 0.060394 +Converged at iteration 19, L1 5.53199e-05, Linf 0.004378, total time[s] 0.058507 +Converged at iteration 20, L1 7.5727e-05, Linf 0.00675306, total time[s] 0.061525 +Converged at iteration 24, L1 5.27321e-05, Linf 0.00315992, total time[s] 0.067977 +Converged at iteration 24, L1 7.14088e-05, Linf 0.00510514, total time[s] 0.073108 +Converged at iteration 20, L1 5.9937e-05, Linf 0.00542526, total time[s] 0.066492 +Converged at iteration 16, L1 8.99955e-05, Linf 0.00397768, total time[s] 0.049342 +Converged at iteration 32, L1 6.63105e-05, Linf 0.00275728, total time[s] 0.103889 +Converged at iteration 19, L1 9.18651e-05, Linf 0.00648752, total time[s] 0.061873 +Converged at iteration 23, L1 7.21917e-05, Linf 0.00588843, total time[s] 0.096522 +Converged at iteration 26, L1 6.78934e-05, Linf 0.00538796, total time[s] 0.078854 +Converged at iteration 23, L1 5.41377e-05, Linf 0.00512046, total time[s] 0.067332 +Converged at iteration 20, L1 7.13504e-05, Linf 0.00494992, total time[s] 0.073763 +Converged at iteration 23, L1 6.53693e-05, Linf 0.00272085, total time[s] 0.080885 +Converged at iteration 25, L1 8.16148e-05, Linf 0.00350995, total time[s] 0.08652 +Converged at iteration 28, L1 7.23612e-05, Linf 0.00345718, total time[s] 0.085409 +Converged at iteration 29, L1 6.89713e-05, Linf 0.00609953, total time[s] 0.086252 +Converged at iteration 27, L1 6.86451e-05, Linf 0.00390029, total time[s] 0.072317 +Converged at iteration 29, L1 7.93324e-05, Linf 0.00413125, total time[s] 0.076612 +Converged at iteration 29, L1 8.60706e-05, Linf 0.00276381, total time[s] 0.084388 +Converged at iteration 28, L1 6.74307e-05, Linf 0.00218446, total time[s] 0.074335 +Converged at iteration 32, L1 9.57026e-05, Linf 0.00721249, total time[s] 0.087263 +Converged at iteration 27, L1 6.07714e-05, Linf 0.00340432, total time[s] 0.078631 +Converged at iteration 25, L1 7.55765e-05, Linf 0.00219261, total time[s] 0.069125 +Converged at iteration 23, L1 6.17935e-05, Linf 0.00249716, total time[s] 0.061642 +Converged at iteration 39, L1 6.68243e-05, Linf 0.00698765, total time[s] 0.102404 +Converged at iteration 36, L1 6.70728e-05, Linf 0.00596786, total time[s] 0.106401 +Converged at iteration 24, L1 6.23727e-05, Linf 0.00278731, total time[s] 0.071072 +Converged at iteration 30, L1 9.80728e-05, Linf 0.00618089, total time[s] 0.078033 +Converged at iteration 25, L1 8.16353e-05, Linf 0.00592554, total time[s] 0.066244 +Converged at iteration 21, L1 5.9202e-05, Linf 0.00385139, total time[s] 0.056566 +Converged at iteration 19, L1 5.53374e-05, Linf 0.00438067, total time[s] 0.057395 +Converged at iteration 20, L1 7.57244e-05, Linf 0.00675323, total time[s] 0.06245 +Converged at iteration 24, L1 5.27313e-05, Linf 0.00316005, total time[s] 0.076732 +Converged at iteration 24, L1 7.14047e-05, Linf 0.00507957, total time[s] 0.07177 +Converged at iteration 20, L1 5.99455e-05, Linf 0.00542533, total time[s] 0.066946 +Converged at iteration 16, L1 8.99943e-05, Linf 0.00392182, total time[s] 0.046973 +Converged at iteration 32, L1 6.62566e-05, Linf 0.00275702, total time[s] 0.087202 +Converged at iteration 19, L1 9.22086e-05, Linf 0.00648774, total time[s] 0.054161 +Converged at iteration 23, L1 7.20432e-05, Linf 0.00614434, total time[s] 0.064299 +Converged at iteration 26, L1 6.80334e-05, Linf 0.00538645, total time[s] 0.078484 +Converged at iteration 23, L1 5.29664e-05, Linf 0.00512192, total time[s] 0.074531 +Converged at iteration 20, L1 7.13685e-05, Linf 0.00495018, total time[s] 0.054435 +Converged at iteration 23, L1 6.56155e-05, Linf 0.00272083, total time[s] 0.063366 +Converged at iteration 25, L1 8.16343e-05, Linf 0.0036129, total time[s] 0.072844 +Converged at iteration 28, L1 7.23929e-05, Linf 0.00361061, total time[s] 0.077508 +Converged at iteration 29, L1 6.89509e-05, Linf 0.00609913, total time[s] 0.115131 +Converged at iteration 27, L1 6.86464e-05, Linf 0.00390035, total time[s] 0.07328 +Converged at iteration 29, L1 7.88579e-05, Linf 0.00413123, total time[s] 0.087129 +Converged at iteration 29, L1 8.59139e-05, Linf 0.0027638, total time[s] 0.080879 +Converged at iteration 28, L1 6.71588e-05, Linf 0.00218446, total time[s] 0.074581 +Converged at iteration 32, L1 9.56756e-05, Linf 0.00721266, total time[s] 0.083645 +Converged at iteration 27, L1 6.04769e-05, Linf 0.00343772, total time[s] 0.082971 +Converged at iteration 25, L1 7.55604e-05, Linf 0.00219264, total time[s] 0.076265 +Converged at iteration 23, L1 6.18004e-05, Linf 0.00253567, total time[s] 0.066099 +Converged at iteration 39, L1 6.68092e-05, Linf 0.00698767, total time[s] 0.100622 +Converged at iteration 36, L1 6.71132e-05, Linf 0.00596418, total time[s] 0.099595 +Converged at iteration 24, L1 6.23769e-05, Linf 0.00278734, total time[s] 0.065838 +Converged at iteration 30, L1 9.81663e-05, Linf 0.00618087, total time[s] 0.08269 +Converged at iteration 25, L1 8.16454e-05, Linf 0.00599786, total time[s] 0.072137 +Converged at iteration 21, L1 5.93206e-05, Linf 0.00385145, total time[s] 0.065901 +Converged at iteration 19, L1 5.53106e-05, Linf 0.004378, total time[s] 0.062678 +Converged at iteration 20, L1 7.57415e-05, Linf 0.00675305, total time[s] 0.064855 +Converged at iteration 24, L1 5.27355e-05, Linf 0.00316009, total time[s] 0.077631 +Converged at iteration 24, L1 7.20529e-05, Linf 0.00510514, total time[s] 0.069176 +Converged at iteration 20, L1 6.01665e-05, Linf 0.00542526, total time[s] 0.05911 +Converged at iteration 16, L1 9.00652e-05, Linf 0.00397806, total time[s] 0.0435 +Converged at iteration 32, L1 6.62648e-05, Linf 0.0027571, total time[s] 0.086149 +Converged at iteration 19, L1 9.17983e-05, Linf 0.00648742, total time[s] 0.050378 +Converged at iteration 23, L1 7.20372e-05, Linf 0.00614823, total time[s] 0.063791 +Converged at iteration 26, L1 6.80023e-05, Linf 0.00537612, total time[s] 0.073137 +Converged at iteration 23, L1 5.29489e-05, Linf 0.0051193, total time[s] 0.061313 +Converged at iteration 20, L1 7.13871e-05, Linf 0.00495131, total time[s] 0.059119 +Converged at iteration 23, L1 6.53132e-05, Linf 0.00271389, total time[s] 0.059841 +Converged at iteration 25, L1 8.16269e-05, Linf 0.00347283, total time[s] 0.07684 +Converged at iteration 28, L1 7.2395e-05, Linf 0.00345716, total time[s] 0.076764 +Converged at iteration 29, L1 7.02448e-05, Linf 0.00607235, total time[s] 0.08136 +Converged at iteration 27, L1 6.87582e-05, Linf 0.0039004, total time[s] 0.079363 +Converged at iteration 29, L1 7.90552e-05, Linf 0.00413123, total time[s] 0.080546 +Converged at iteration 29, L1 8.58726e-05, Linf 0.00276381, total time[s] 0.081109 +Converged at iteration 28, L1 6.83667e-05, Linf 0.00218446, total time[s] 0.078101 +Converged at iteration 32, L1 9.56822e-05, Linf 0.00721241, total time[s] 0.087461 +Converged at iteration 27, L1 6.04672e-05, Linf 0.00338348, total time[s] 0.07304 +Converged at iteration 25, L1 7.55809e-05, Linf 0.00219234, total time[s] 0.066661 +Converged at iteration 23, L1 6.18382e-05, Linf 0.00253575, total time[s] 0.061667 +Converged at iteration 39, L1 6.6729e-05, Linf 0.00708295, total time[s] 0.103445 +Converged at iteration 36, L1 6.70762e-05, Linf 0.00598122, total time[s] 0.099475 +Converged at iteration 24, L1 6.23723e-05, Linf 0.00278745, total time[s] 0.0643 +Converged at iteration 30, L1 9.82591e-05, Linf 0.00618068, total time[s] 0.083234 +Converged at iteration 25, L1 8.17473e-05, Linf 0.00599796, total time[s] 0.069204 +Converged at iteration 21, L1 5.91559e-05, Linf 0.00385133, total time[s] 0.074516 +Converged at iteration 19, L1 5.53139e-05, Linf 0.00433777, total time[s] 0.059682 +Converged at iteration 20, L1 7.57186e-05, Linf 0.00675221, total time[s] 0.057039 +Converged at iteration 24, L1 5.27598e-05, Linf 0.00315999, total time[s] 0.064429 +Converged at iteration 24, L1 7.14129e-05, Linf 0.00513594, total time[s] 0.088004 +Converged at iteration 20, L1 5.99459e-05, Linf 0.00549245, total time[s] 0.057368 +Converged at iteration 16, L1 8.99929e-05, Linf 0.00397768, total time[s] 0.055283 +Converged at iteration 32, L1 6.62642e-05, Linf 0.00275713, total time[s] 0.094055 +Converged at iteration 19, L1 9.17756e-05, Linf 0.00648771, total time[s] 0.054133 +Converged at iteration 23, L1 7.21249e-05, Linf 0.0061445, total time[s] 0.063926 +Converged at iteration 26, L1 6.7861e-05, Linf 0.00538705, total time[s] 0.083743 +Converged at iteration 23, L1 5.29692e-05, Linf 0.00512352, total time[s] 0.072362 +Converged at iteration 20, L1 7.1366e-05, Linf 0.00495014, total time[s] 0.07421 +Converged at iteration 23, L1 6.53634e-05, Linf 0.00272084, total time[s] 0.071311 +Converged at iteration 25, L1 8.161e-05, Linf 0.00350994, total time[s] 0.069661 +Converged at iteration 28, L1 7.29295e-05, Linf 0.00345736, total time[s] 0.081499 +Converged at iteration 29, L1 6.89564e-05, Linf 0.00609876, total time[s] 0.085692 +Converged at iteration 27, L1 6.8644e-05, Linf 0.00390022, total time[s] 0.075333 +Converged at iteration 29, L1 7.88544e-05, Linf 0.00413123, total time[s] 0.08379 +Converged at iteration 29, L1 8.60039e-05, Linf 0.00276381, total time[s] 0.078625 +Converged at iteration 28, L1 6.73028e-05, Linf 0.00218444, total time[s] 0.092018 +Converged at iteration 32, L1 9.5678e-05, Linf 0.00721232, total time[s] 0.085418 +Converged at iteration 27, L1 6.04813e-05, Linf 0.00339475, total time[s] 0.073406 +Converged at iteration 25, L1 7.55809e-05, Linf 0.00219273, total time[s] 0.070378 +Converged at iteration 23, L1 6.18181e-05, Linf 0.00253587, total time[s] 0.061684 +Converged at iteration 39, L1 6.68074e-05, Linf 0.00698742, total time[s] 0.100517 +Converged at iteration 36, L1 6.70648e-05, Linf 0.00596453, total time[s] 0.097 +Converged at iteration 24, L1 6.23787e-05, Linf 0.00278726, total time[s] 0.064917 +Converged at iteration 30, L1 9.8003e-05, Linf 0.00618088, total time[s] 0.079778 +Converged at iteration 25, L1 8.17034e-05, Linf 0.00599799, total time[s] 0.068789 +Converged at iteration 21, L1 5.97965e-05, Linf 0.00385136, total time[s] 0.061743 +Converged at iteration 19, L1 5.53183e-05, Linf 0.00433495, total time[s] 0.060378 +Converged at iteration 20, L1 7.57169e-05, Linf 0.00675307, total time[s] 0.073201 +Converged at iteration 24, L1 5.27506e-05, Linf 0.00316029, total time[s] 0.063959 +Converged at iteration 24, L1 7.14099e-05, Linf 0.00510514, total time[s] 0.066586 +Converged at iteration 20, L1 5.99615e-05, Linf 0.00536753, total time[s] 0.062764 +Converged at iteration 16, L1 8.99934e-05, Linf 0.00397776, total time[s] 0.045877 +Converged at iteration 32, L1 6.62603e-05, Linf 0.002757, total time[s] 0.090108 +Converged at iteration 19, L1 9.18794e-05, Linf 0.00668285, total time[s] 0.058065 +Converged at iteration 23, L1 7.22401e-05, Linf 0.00661431, total time[s] 0.062697 +Converged at iteration 26, L1 6.78559e-05, Linf 0.00538692, total time[s] 0.088144 +Converged at iteration 23, L1 5.29111e-05, Linf 0.00512184, total time[s] 0.062215 +Converged at iteration 20, L1 7.14283e-05, Linf 0.00494982, total time[s] 0.053832 +Converged at iteration 23, L1 6.53637e-05, Linf 0.00272085, total time[s] 0.110522 +Converged at iteration 25, L1 8.16118e-05, Linf 0.00351001, total time[s] 0.198158 +Converged at iteration 28, L1 7.23518e-05, Linf 0.00345652, total time[s] 0.145338 +Converged at iteration 29, L1 6.89477e-05, Linf 0.00609829, total time[s] 0.124329 +Converged at iteration 27, L1 6.86632e-05, Linf 0.00390136, total time[s] 0.095038 +Converged at iteration 29, L1 7.88574e-05, Linf 0.00416806, total time[s] 0.09171 +Converged at iteration 29, L1 8.72068e-05, Linf 0.00276404, total time[s] 0.093727 +Converged at iteration 28, L1 6.75973e-05, Linf 0.0021843, total time[s] 0.084745 +Converged at iteration 32, L1 9.56779e-05, Linf 0.00721253, total time[s] 0.091692 +Converged at iteration 27, L1 6.05195e-05, Linf 0.00339225, total time[s] 0.07293 +Converged at iteration 25, L1 7.55716e-05, Linf 0.00219219, total time[s] 0.068449 +Converged at iteration 23, L1 6.17989e-05, Linf 0.00249687, total time[s] 0.065675 +Converged at iteration 39, L1 6.68098e-05, Linf 0.00698733, total time[s] 0.107951 +Converged at iteration 36, L1 6.71367e-05, Linf 0.00596341, total time[s] 0.108867 +Converged at iteration 24, L1 6.23609e-05, Linf 0.00278738, total time[s] 0.079569 +Converged at iteration 30, L1 9.82838e-05, Linf 0.00618087, total time[s] 0.084 +Converged at iteration 25, L1 8.17443e-05, Linf 0.00592559, total time[s] 0.068001 +Converged at iteration 21, L1 5.91136e-05, Linf 0.00385145, total time[s] 0.058869 +Converged at iteration 19, L1 5.55548e-05, Linf 0.00443538, total time[s] 0.053698 +Converged at iteration 20, L1 7.57147e-05, Linf 0.00675317, total time[s] 0.056668 +Converged at iteration 24, L1 5.2943e-05, Linf 0.00316005, total time[s] 0.064557 +Converged at iteration 24, L1 7.16738e-05, Linf 0.00510415, total time[s] 0.074567 +Converged at iteration 20, L1 6.07721e-05, Linf 0.00543542, total time[s] 0.057754 +Converged at iteration 16, L1 8.99948e-05, Linf 0.00397768, total time[s] 0.058169 +Converged at iteration 32, L1 6.62599e-05, Linf 0.00275708, total time[s] 0.087566 +Converged at iteration 19, L1 9.18238e-05, Linf 0.00648754, total time[s] 0.0522 +Converged at iteration 23, L1 7.21225e-05, Linf 0.00614426, total time[s] 0.063299 +Converged at iteration 26, L1 6.78562e-05, Linf 0.0053868, total time[s] 0.070238 +Converged at iteration 23, L1 5.29102e-05, Linf 0.00512169, total time[s] 0.061838 +Converged at iteration 20, L1 7.13606e-05, Linf 0.00495014, total time[s] 0.054259 +Converged at iteration 23, L1 6.53718e-05, Linf 0.00272083, total time[s] 0.062806 +Converged at iteration 25, L1 8.16156e-05, Linf 0.00350999, total time[s] 0.06562 +Converged at iteration 28, L1 7.25263e-05, Linf 0.00345748, total time[s] 0.075474 +Converged at iteration 29, L1 6.89558e-05, Linf 0.00609922, total time[s] 0.085087 +Converged at iteration 27, L1 6.86576e-05, Linf 0.00393774, total time[s] 0.073472 +Converged at iteration 29, L1 7.88521e-05, Linf 0.00413123, total time[s] 0.08043 +Converged at iteration 29, L1 8.57419e-05, Linf 0.00276381, total time[s] 0.08321 +Converged at iteration 28, L1 6.71568e-05, Linf 0.00218446, total time[s] 0.075205 +Converged at iteration 32, L1 9.56774e-05, Linf 0.00721235, total time[s] 0.084112 +Converged at iteration 27, L1 6.0511e-05, Linf 0.0033948, total time[s] 0.078551 +Converged at iteration 25, L1 7.57098e-05, Linf 0.00219172, total time[s] 0.074238 +Converged at iteration 23, L1 6.17944e-05, Linf 0.00253552, total time[s] 0.066482 +Converged at iteration 40, L1 6.83835e-05, Linf 0.00366595, total time[s] 0.13229 +Converged at iteration 35, L1 7.61237e-05, Linf 0.00339722, total time[s] 0.114269 +Converged at iteration 30, L1 9.63138e-05, Linf 0.00439311, total time[s] 0.11529 +Converged at iteration 31, L1 6.19859e-05, Linf 0.00502565, total time[s] 0.227611 +Converged at iteration 27, L1 6.29423e-05, Linf 0.00499539, total time[s] 0.159323 +Converged at iteration 22, L1 8.59911e-05, Linf 0.00448728, total time[s] 0.089999 +Converged at iteration 20, L1 9.62516e-05, Linf 0.00397883, total time[s] 0.070992 +Converged at iteration 24, L1 8.8436e-05, Linf 0.00475586, total time[s] 0.102751 +Converged at iteration 28, L1 7.39874e-05, Linf 0.00445898, total time[s] 0.100927 +Converged at iteration 26, L1 8.11655e-05, Linf 0.0054675, total time[s] 0.139131 +Converged at iteration 22, L1 7.39671e-05, Linf 0.00508703, total time[s] 0.11643 +Converged at iteration 19, L1 6.6442e-05, Linf 0.00393103, total time[s] 0.093886 +Converged at iteration 30, L1 7.99975e-05, Linf 0.00330567, total time[s] 0.11365 +Converged at iteration 20, L1 8.43727e-05, Linf 0.00455011, total time[s] 0.06533 +Converged at iteration 24, L1 7.11394e-05, Linf 0.00485098, total time[s] 0.109731 +Converged at iteration 31, L1 8.93572e-05, Linf 0.00569095, total time[s] 0.092121 +Converged at iteration 27, L1 9.91283e-05, Linf 0.00564792, total time[s] 0.078607 +Converged at iteration 24, L1 8.79043e-05, Linf 0.00465025, total time[s] 0.077866 +Converged at iteration 23, L1 9.21767e-05, Linf 0.00410192, total time[s] 0.084072 +Converged at iteration 26, L1 7.22198e-05, Linf 0.00446109, total time[s] 0.075321 +Converged at iteration 29, L1 7.84086e-05, Linf 0.00479607, total time[s] 0.098317 +Converged at iteration 34, L1 7.09408e-05, Linf 0.00422644, total time[s] 0.121931 +Converged at iteration 30, L1 9.39676e-05, Linf 0.00442631, total time[s] 0.121892 +Converged at iteration 28, L1 9.51915e-05, Linf 0.00309344, total time[s] 0.092227 +Converged at iteration 32, L1 9.40194e-05, Linf 0.00374108, total time[s] 0.11319 +Converged at iteration 37, L1 7.37525e-05, Linf 0.00327794, total time[s] 0.219162 +Converged at iteration 33, L1 8.44916e-05, Linf 0.00469253, total time[s] 0.113513 +Converged at iteration 28, L1 9.66183e-05, Linf 0.00426224, total time[s] 0.104914 +Converged at iteration 24, L1 8.82828e-05, Linf 0.00325068, total time[s] 0.08711 +Converged at iteration 26, L1 8.98144e-05, Linf 0.00383966, total time[s] 0.093443 +Converged at iteration 40, L1 6.73239e-05, Linf 0.00383231, total time[s] 0.156066 +Converged at iteration 35, L1 8.2363e-05, Linf 0.00351903, total time[s] 0.119228 +Converged at iteration 30, L1 9.61872e-05, Linf 0.00422153, total time[s] 0.106702 +Converged at iteration 31, L1 6.18383e-05, Linf 0.0050382, total time[s] 0.096521 +Converged at iteration 27, L1 6.00608e-05, Linf 0.00494132, total time[s] 0.087854 +Converged at iteration 22, L1 7.71061e-05, Linf 0.00430661, total time[s] 0.063652 +Converged at iteration 21, L1 6.27874e-05, Linf 0.0033445, total time[s] 0.057464 +Converged at iteration 24, L1 9.0433e-05, Linf 0.00488871, total time[s] 0.063031 +Converged at iteration 28, L1 7.41849e-05, Linf 0.00444385, total time[s] 0.088526 +Converged at iteration 26, L1 8.04479e-05, Linf 0.00549612, total time[s] 0.083131 +Converged at iteration 22, L1 7.22087e-05, Linf 0.00483091, total time[s] 0.063204 +Converged at iteration 19, L1 5.91154e-05, Linf 0.00361616, total time[s] 0.054314 +Converged at iteration 30, L1 8.85318e-05, Linf 0.00330314, total time[s] 0.104135 +Converged at iteration 20, L1 8.54862e-05, Linf 0.00465252, total time[s] 0.065446 +Converged at iteration 24, L1 7.16016e-05, Linf 0.00468004, total time[s] 0.072259 +Converged at iteration 31, L1 9.33256e-05, Linf 0.00531137, total time[s] 0.090796 +Converged at iteration 27, L1 9.88746e-05, Linf 0.00537785, total time[s] 0.116366 +Converged at iteration 24, L1 8.6833e-05, Linf 0.00451259, total time[s] 0.075841 +Converged at iteration 23, L1 9.29152e-05, Linf 0.0042201, total time[s] 0.082754 +Converged at iteration 26, L1 7.20862e-05, Linf 0.00457475, total time[s] 0.101856 +Converged at iteration 29, L1 7.6341e-05, Linf 0.00485482, total time[s] 0.098404 +Converged at iteration 34, L1 7.85723e-05, Linf 0.00433221, total time[s] 0.088493 +Converged at iteration 31, L1 6.9164e-05, Linf 0.00368728, total time[s] 0.134082 +Converged at iteration 28, L1 9.8659e-05, Linf 0.00321421, total time[s] 0.086366 +Converged at iteration 32, L1 8.724e-05, Linf 0.00362575, total time[s] 0.087928 +Converged at iteration 36, L1 9.5917e-05, Linf 0.00367298, total time[s] 0.180643 +Converged at iteration 33, L1 8.42996e-05, Linf 0.0047835, total time[s] 0.171644 +Converged at iteration 28, L1 9.34977e-05, Linf 0.00419549, total time[s] 0.116841 +Converged at iteration 24, L1 8.21831e-05, Linf 0.00304608, total time[s] 0.101025 +Converged at iteration 26, L1 8.7008e-05, Linf 0.00389472, total time[s] 0.126683 +Converged at iteration 40, L1 6.66871e-05, Linf 0.00398568, total time[s] 0.125552 +Converged at iteration 35, L1 8.86995e-05, Linf 0.00365739, total time[s] 0.129545 +Converged at iteration 30, L1 9.00573e-05, Linf 0.00417736, total time[s] 0.087224 +Converged at iteration 31, L1 6.16495e-05, Linf 0.0050511, total time[s] 0.08071 +Converged at iteration 26, L1 9.69159e-05, Linf 0.00570603, total time[s] 0.082678 +Converged at iteration 22, L1 6.92443e-05, Linf 0.00411859, total time[s] 0.061611 +Converged at iteration 21, L1 6.50659e-05, Linf 0.0035631, total time[s] 0.056791 +Converged at iteration 24, L1 8.94676e-05, Linf 0.00497568, total time[s] 0.09913 +Converged at iteration 28, L1 7.2476e-05, Linf 0.00442382, total time[s] 0.13934 +Converged at iteration 26, L1 8.14327e-05, Linf 0.00521188, total time[s] 0.121064 +Converged at iteration 22, L1 6.91235e-05, Linf 0.00410769, total time[s] 0.117302 +Converged at iteration 18, L1 9.77606e-05, Linf 0.00399381, total time[s] 0.056061 +Converged at iteration 30, L1 9.8477e-05, Linf 0.00331013, total time[s] 0.07662 +Converged at iteration 20, L1 8.35005e-05, Linf 0.0047665, total time[s] 0.058211 +Converged at iteration 24, L1 7.05692e-05, Linf 0.00479606, total time[s] 0.079039 +Converged at iteration 31, L1 9.50775e-05, Linf 0.00443736, total time[s] 0.103658 +Converged at iteration 27, L1 8.83626e-05, Linf 0.00424, total time[s] 0.120784 +Converged at iteration 24, L1 8.36501e-05, Linf 0.00411273, total time[s] 0.080912 +Converged at iteration 23, L1 9.21075e-05, Linf 0.0043753, total time[s] 0.099421 +Converged at iteration 26, L1 7.09188e-05, Linf 0.00470734, total time[s] 0.074194 +Converged at iteration 29, L1 7.447e-05, Linf 0.00490168, total time[s] 0.129525 +Converged at iteration 34, L1 8.16116e-05, Linf 0.00370831, total time[s] 0.109137 +Converged at iteration 31, L1 7.34837e-05, Linf 0.00351079, total time[s] 0.085785 +Converged at iteration 29, L1 7.17858e-05, Linf 0.00276079, total time[s] 0.099528 +Converged at iteration 32, L1 8.04245e-05, Linf 0.00350834, total time[s] 0.111255 +Converged at iteration 36, L1 8.23556e-05, Linf 0.00353147, total time[s] 0.126718 +Converged at iteration 33, L1 8.27983e-05, Linf 0.00493385, total time[s] 0.114217 +Converged at iteration 28, L1 9.02709e-05, Linf 0.00405245, total time[s] 0.100947 +Converged at iteration 24, L1 7.95444e-05, Linf 0.00283983, total time[s] 0.087552 +Converged at iteration 26, L1 8.32128e-05, Linf 0.00395525, total time[s] 0.131666 +Converged at iteration 39, L1 9.96356e-05, Linf 0.00501839, total time[s] 0.127699 +Converged at iteration 36, L1 6.78328e-05, Linf 0.00333832, total time[s] 0.100609 +Converged at iteration 29, L1 8.61193e-05, Linf 0.00505069, total time[s] 0.117101 +Converged at iteration 31, L1 6.12313e-05, Linf 0.00506858, total time[s] 0.087611 +Converged at iteration 26, L1 8.82049e-05, Linf 0.00564774, total time[s] 0.101476 +Converged at iteration 21, L1 9.03038e-05, Linf 0.00446943, total time[s] 0.08931 +Converged at iteration 21, L1 6.52795e-05, Linf 0.00405716, total time[s] 0.093633 +Converged at iteration 24, L1 6.92224e-05, Linf 0.00530215, total time[s] 0.097952 +Converged at iteration 28, L1 6.25415e-05, Linf 0.00440984, total time[s] 0.082678 +Converged at iteration 26, L1 7.23158e-05, Linf 0.00380667, total time[s] 0.10102 +Converged at iteration 21, L1 6.87571e-05, Linf 0.00430038, total time[s] 0.077437 +Converged at iteration 18, L1 6.26462e-05, Linf 0.00277066, total time[s] 0.05867 +Converged at iteration 31, L1 7.87482e-05, Linf 0.00272634, total time[s] 0.151845 +Converged at iteration 20, L1 8.08211e-05, Linf 0.00504155, total time[s] 0.074748 +Converged at iteration 24, L1 6.80519e-05, Linf 0.00512176, total time[s] 0.076739 +Converged at iteration 30, L1 7.24886e-05, Linf 0.00296298, total time[s] 0.135594 +Converged at iteration 25, L1 6.41302e-05, Linf 0.00435682, total time[s] 0.076919 +Converged at iteration 22, L1 9.6901e-05, Linf 0.00477936, total time[s] 0.0705 +Converged at iteration 23, L1 9.37782e-05, Linf 0.0045978, total time[s] 0.076344 +Converged at iteration 26, L1 6.76867e-05, Linf 0.00498233, total time[s] 0.077761 +Converged at iteration 29, L1 7.00922e-05, Linf 0.00476796, total time[s] 0.076092 +Converged at iteration 31, L1 8.6954e-05, Linf 0.00390869, total time[s] 0.135716 +Converged at iteration 30, L1 8.00422e-05, Linf 0.00316901, total time[s] 0.11683 +Converged at iteration 29, L1 7.99281e-05, Linf 0.00297229, total time[s] 0.163399 +Converged at iteration 32, L1 7.2459e-05, Linf 0.00332129, total time[s] 0.103385 +Converged at iteration 35, L1 7.07435e-05, Linf 0.00381235, total time[s] 0.117682 +Converged at iteration 33, L1 7.93786e-05, Linf 0.00506326, total time[s] 0.154835 +Converged at iteration 28, L1 8.14463e-05, Linf 0.00393222, total time[s] 0.101529 +Converged at iteration 24, L1 7.83672e-05, Linf 0.00242208, total time[s] 0.108616 +Converged at iteration 26, L1 7.91052e-05, Linf 0.00410533, total time[s] 0.088378 +Converged at iteration 39, L1 9.06497e-05, Linf 0.0057906, total time[s] 0.169295 +Converged at iteration 36, L1 7.42625e-05, Linf 0.00411859, total time[s] 0.135154 +Converged at iteration 26, L1 5.52643e-05, Linf 0.00582285, total time[s] 0.092234 +Converged at iteration 31, L1 6.18698e-05, Linf 0.0050934, total time[s] 0.159403 +Converged at iteration 26, L1 7.04182e-05, Linf 0.00526491, total time[s] 0.079024 +Converged at iteration 21, L1 6.46132e-05, Linf 0.00341156, total time[s] 0.098041 +Converged at iteration 20, L1 5.51795e-05, Linf 0.00439525, total time[s] 0.13685 +Converged at iteration 22, L1 4.42333e-05, Linf 0.00764454, total time[s] 0.060556 +Converged at iteration 26, L1 6.85416e-05, Linf 0.00593031, total time[s] 0.070544 +Converged at iteration 25, L1 6.41401e-05, Linf 0.00407447, total time[s] 0.072628 +Converged at iteration 20, L1 8.04575e-05, Linf 0.00666813, total time[s] 0.055269 +Converged at iteration 17, L1 7.49846e-05, Linf 0.00357539, total time[s] 0.064243 +Converged at iteration 31, L1 9.7142e-05, Linf 0.00282387, total time[s] 0.091511 +Converged at iteration 20, L1 6.25079e-05, Linf 0.00537808, total time[s] 0.094507 +Converged at iteration 23, L1 9.74696e-05, Linf 0.00648475, total time[s] 0.063857 +Converged at iteration 27, L1 8.57523e-05, Linf 0.00515448, total time[s] 0.074798 +Converged at iteration 23, L1 8.41522e-05, Linf 0.00705528, total time[s] 0.07795 +Converged at iteration 21, L1 8.004e-05, Linf 0.00480996, total time[s] 0.06791 +Converged at iteration 23, L1 7.32727e-05, Linf 0.00375497, total time[s] 0.090588 +Converged at iteration 25, L1 9.63712e-05, Linf 0.00630278, total time[s] 0.081545 +Converged at iteration 28, L1 9.417e-05, Linf 0.00549172, total time[s] 0.081333 +Converged at iteration 30, L1 5.8754e-05, Linf 0.00496234, total time[s] 0.100808 +Converged at iteration 28, L1 6.73686e-05, Linf 0.0033168, total time[s] 0.101903 +Converged at iteration 29, L1 8.61714e-05, Linf 0.00343697, total time[s] 0.093999 +Converged at iteration 30, L1 8.67164e-05, Linf 0.00307307, total time[s] 0.132643 +Converged at iteration 30, L1 8.91924e-05, Linf 0.00328457, total time[s] 0.168434 +Converged at iteration 33, L1 7.15682e-05, Linf 0.00542142, total time[s] 0.126804 +Converged at iteration 28, L1 6.41596e-05, Linf 0.00353932, total time[s] 0.134823 +Converged at iteration 24, L1 8.84676e-05, Linf 0.0017723, total time[s] 0.074433 +Converged at iteration 24, L1 8.93975e-05, Linf 0.00467981, total time[s] 0.066969 +Converged at iteration 39, L1 7.1534e-05, Linf 0.00700284, total time[s] 0.125903 +Converged at iteration 36, L1 7.15975e-05, Linf 0.00581257, total time[s] 0.125937 +Converged at iteration 24, L1 6.15863e-05, Linf 0.00286185, total time[s] 0.070251 +Converged at iteration 31, L1 5.71224e-05, Linf 0.00508743, total time[s] 0.095389 +Converged at iteration 25, L1 7.36707e-05, Linf 0.00540458, total time[s] 0.094415 +Converged at iteration 20, L1 9.86918e-05, Linf 0.00429001, total time[s] 0.126733 +Converged at iteration 19, L1 5.89276e-05, Linf 0.00441465, total time[s] 0.081246 +Converged at iteration 20, L1 7.77352e-05, Linf 0.00669279, total time[s] 0.071798 +Converged at iteration 24, L1 5.60652e-05, Linf 0.00384938, total time[s] 0.118051 +Converged at iteration 24, L1 6.53517e-05, Linf 0.00476247, total time[s] 0.112671 +Converged at iteration 20, L1 5.38678e-05, Linf 0.00527062, total time[s] 0.060249 +Converged at iteration 16, L1 9.23306e-05, Linf 0.00367272, total time[s] 0.049328 +Converged at iteration 32, L1 6.82242e-05, Linf 0.00267633, total time[s] 0.094788 +Converged at iteration 19, L1 9.09398e-05, Linf 0.00667012, total time[s] 0.075323 +Converged at iteration 23, L1 7.25006e-05, Linf 0.00651513, total time[s] 0.069217 +Converged at iteration 26, L1 6.71799e-05, Linf 0.00550805, total time[s] 0.109056 +Converged at iteration 23, L1 5.43965e-05, Linf 0.00522006, total time[s] 0.071081 +Converged at iteration 20, L1 6.97274e-05, Linf 0.00498601, total time[s] 0.064998 +Converged at iteration 22, L1 9.65317e-05, Linf 0.00411993, total time[s] 0.068534 +Converged at iteration 25, L1 8.14668e-05, Linf 0.00375208, total time[s] 0.133665 +Converged at iteration 28, L1 7.21057e-05, Linf 0.00398175, total time[s] 0.125403 +Converged at iteration 29, L1 6.60771e-05, Linf 0.00600417, total time[s] 0.15436 +Converged at iteration 27, L1 6.58633e-05, Linf 0.00385339, total time[s] 0.110615 +Converged at iteration 29, L1 7.48193e-05, Linf 0.00398895, total time[s] 0.089733 +Converged at iteration 29, L1 8.51324e-05, Linf 0.00274492, total time[s] 0.168764 +Converged at iteration 28, L1 6.66465e-05, Linf 0.00227464, total time[s] 0.076454 +Converged at iteration 33, L1 5.76795e-05, Linf 0.00605004, total time[s] 0.103144 +Converged at iteration 26, L1 9.40926e-05, Linf 0.0034787, total time[s] 0.08004 +Converged at iteration 25, L1 7.0971e-05, Linf 0.00197682, total time[s] 0.0884 +Converged at iteration 23, L1 6.10234e-05, Linf 0.00276618, total time[s] 0.09183 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.2608 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.41119 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.74193 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.36093 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.30939 +Converged at iteration 40, L1 6.70998e-05, Linf 0.00367442, total time[s] 0.1307 +Converged at iteration 35, L1 7.61261e-05, Linf 0.00339716, total time[s] 0.116632 +Converged at iteration 30, L1 9.65519e-05, Linf 0.00432685, total time[s] 0.108789 +Converged at iteration 31, L1 6.30139e-05, Linf 0.00502563, total time[s] 0.099846 +Converged at iteration 27, L1 6.30864e-05, Linf 0.00504729, total time[s] 0.078349 +Converged at iteration 22, L1 8.64472e-05, Linf 0.00448785, total time[s] 0.057936 +Converged at iteration 20, L1 9.62043e-05, Linf 0.00395674, total time[s] 0.065441 +Converged at iteration 24, L1 8.84159e-05, Linf 0.0048531, total time[s] 0.081747 +Converged at iteration 28, L1 7.38762e-05, Linf 0.00445907, total time[s] 0.106573 +Converged at iteration 26, L1 8.15049e-05, Linf 0.00546752, total time[s] 0.073412 +Converged at iteration 22, L1 7.39272e-05, Linf 0.00508658, total time[s] 0.066045 +Converged at iteration 19, L1 6.63356e-05, Linf 0.00393095, total time[s] 0.073533 +Converged at iteration 30, L1 8.00341e-05, Linf 0.00329634, total time[s] 0.087162 +Converged at iteration 20, L1 8.44298e-05, Linf 0.00455023, total time[s] 0.061491 +Converged at iteration 24, L1 7.10858e-05, Linf 0.00463287, total time[s] 0.06646 +Converged at iteration 31, L1 8.93504e-05, Linf 0.0056924, total time[s] 0.101153 +Converged at iteration 27, L1 9.9143e-05, Linf 0.00569741, total time[s] 0.086665 +Converged at iteration 24, L1 8.78992e-05, Linf 0.00465012, total time[s] 0.065203 +Converged at iteration 23, L1 9.2184e-05, Linf 0.00410191, total time[s] 0.064279 +Converged at iteration 26, L1 7.2217e-05, Linf 0.00446084, total time[s] 0.096794 +Converged at iteration 29, L1 7.81483e-05, Linf 0.00479603, total time[s] 0.100159 +Converged at iteration 34, L1 7.08365e-05, Linf 0.00423155, total time[s] 0.147014 +Converged at iteration 30, L1 9.39315e-05, Linf 0.00442599, total time[s] 0.099813 +Converged at iteration 28, L1 9.49888e-05, Linf 0.00310981, total time[s] 0.097555 +Converged at iteration 32, L1 9.4492e-05, Linf 0.00373987, total time[s] 0.101485 +Converged at iteration 37, L1 7.33661e-05, Linf 0.00325896, total time[s] 0.111307 +Converged at iteration 33, L1 8.46649e-05, Linf 0.0046911, total time[s] 0.095114 +Converged at iteration 28, L1 9.67909e-05, Linf 0.00430197, total time[s] 0.169945 +Converged at iteration 24, L1 8.83002e-05, Linf 0.00325071, total time[s] 0.138785 +Converged at iteration 26, L1 8.98063e-05, Linf 0.00383963, total time[s] 0.078095 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.25111 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.21193 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.26232 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.2196 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.23842 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.23956 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.23214 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.23515 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.25592 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.21261 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.17358 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.32602 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.69494 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.22052 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.32877 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.22666 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18242 +Converged at iteration 40, L1 6.84828e-05, Linf 0.00366664, total time[s] 0.119843 +Converged at iteration 35, L1 7.60958e-05, Linf 0.00339712, total time[s] 0.115009 +Converged at iteration 30, L1 9.6431e-05, Linf 0.0043252, total time[s] 0.088192 +Converged at iteration 31, L1 6.30923e-05, Linf 0.00502564, total time[s] 0.09098 +Converged at iteration 27, L1 6.26294e-05, Linf 0.00499524, total time[s] 0.101568 +Converged at iteration 22, L1 8.58696e-05, Linf 0.00448843, total time[s] 0.062691 +Converged at iteration 20, L1 9.60128e-05, Linf 0.00392255, total time[s] 0.060285 +Converged at iteration 24, L1 8.84195e-05, Linf 0.00482886, total time[s] 0.073048 +Converged at iteration 28, L1 7.40784e-05, Linf 0.00445904, total time[s] 0.121203 +Converged at iteration 26, L1 8.1862e-05, Linf 0.00537395, total time[s] 0.083195 +Converged at iteration 22, L1 7.40174e-05, Linf 0.00508689, total time[s] 0.070696 +Converged at iteration 19, L1 6.63212e-05, Linf 0.00393099, total time[s] 0.057296 +Converged at iteration 30, L1 7.98722e-05, Linf 0.00329631, total time[s] 0.089172 +Converged at iteration 20, L1 8.44911e-05, Linf 0.00465236, total time[s] 0.056922 +Converged at iteration 24, L1 7.10481e-05, Linf 0.00463288, total time[s] 0.091547 +Converged at iteration 31, L1 8.92897e-05, Linf 0.0056918, total time[s] 0.108395 +Converged at iteration 27, L1 9.91725e-05, Linf 0.00569829, total time[s] 0.152291 +Converged at iteration 24, L1 8.79028e-05, Linf 0.00465021, total time[s] 0.09557 +Converged at iteration 23, L1 9.21806e-05, Linf 0.00410192, total time[s] 0.090705 +Converged at iteration 26, L1 7.22231e-05, Linf 0.00446148, total time[s] 0.08867 +Converged at iteration 29, L1 7.81494e-05, Linf 0.00479584, total time[s] 0.079391 +Converged at iteration 34, L1 7.09309e-05, Linf 0.00422687, total time[s] 0.119205 +Converged at iteration 30, L1 9.3948e-05, Linf 0.00442599, total time[s] 0.091076 +Converged at iteration 28, L1 9.50779e-05, Linf 0.00309363, total time[s] 0.095536 +Converged at iteration 32, L1 9.44129e-05, Linf 0.0037285, total time[s] 0.101796 +Converged at iteration 37, L1 7.37708e-05, Linf 0.00332672, total time[s] 0.119872 +Converged at iteration 33, L1 8.46515e-05, Linf 0.00474355, total time[s] 0.086575 +Converged at iteration 28, L1 9.65511e-05, Linf 0.00430202, total time[s] 0.077121 +Converged at iteration 24, L1 8.82899e-05, Linf 0.00325072, total time[s] 0.0689 +Converged at iteration 26, L1 8.98123e-05, Linf 0.00383982, total time[s] 0.076251 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.22594 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.24763 +Converged at iteration 40, L1 6.72529e-05, Linf 0.00367449, total time[s] 0.106026 +Converged at iteration 35, L1 7.60855e-05, Linf 0.00339713, total time[s] 0.091699 +Converged at iteration 30, L1 9.63704e-05, Linf 0.00432628, total time[s] 0.091653 +Converged at iteration 31, L1 6.19656e-05, Linf 0.00502563, total time[s] 0.088005 +Converged at iteration 27, L1 6.25945e-05, Linf 0.00499538, total time[s] 0.076366 +Converged at iteration 22, L1 8.58776e-05, Linf 0.00448822, total time[s] 0.076606 +Converged at iteration 20, L1 9.60224e-05, Linf 0.00397841, total time[s] 0.068131 +Converged at iteration 24, L1 8.84123e-05, Linf 0.00482782, total time[s] 0.080736 +Converged at iteration 28, L1 7.38355e-05, Linf 0.00445903, total time[s] 0.074105 +Converged at iteration 26, L1 8.11734e-05, Linf 0.00546743, total time[s] 0.074614 +Converged at iteration 22, L1 7.42406e-05, Linf 0.00504777, total time[s] 0.062763 +Converged at iteration 19, L1 6.63362e-05, Linf 0.00397353, total time[s] 0.067414 +Converged at iteration 30, L1 7.98748e-05, Linf 0.00329638, total time[s] 0.100263 +Converged at iteration 20, L1 8.43982e-05, Linf 0.00455001, total time[s] 0.057476 +Converged at iteration 24, L1 7.1017e-05, Linf 0.00463268, total time[s] 0.097419 +Converged at iteration 31, L1 8.93447e-05, Linf 0.00569245, total time[s] 0.086764 +Converged at iteration 27, L1 9.92088e-05, Linf 0.00569842, total time[s] 0.078384 +Converged at iteration 24, L1 8.79004e-05, Linf 0.00465017, total time[s] 0.065862 +Converged at iteration 23, L1 9.30454e-05, Linf 0.00523149, total time[s] 0.066688 +Converged at iteration 26, L1 7.21732e-05, Linf 0.00446072, total time[s] 0.075554 +Converged at iteration 29, L1 7.81542e-05, Linf 0.00479606, total time[s] 0.085342 +Converged at iteration 34, L1 7.09352e-05, Linf 0.00422678, total time[s] 0.117135 +Converged at iteration 30, L1 9.39455e-05, Linf 0.00442596, total time[s] 0.085033 +Converged at iteration 28, L1 9.49874e-05, Linf 0.00309344, total time[s] 0.083183 +Converged at iteration 32, L1 9.43658e-05, Linf 0.00373926, total time[s] 0.10514 +Converged at iteration 37, L1 7.34882e-05, Linf 0.00327691, total time[s] 0.097418 +Converged at iteration 33, L1 8.45133e-05, Linf 0.00469142, total time[s] 0.087442 +Converged at iteration 28, L1 9.6479e-05, Linf 0.00430206, total time[s] 0.097702 +Converged at iteration 24, L1 8.82887e-05, Linf 0.00325072, total time[s] 0.068789 +Converged at iteration 26, L1 9.0087e-05, Linf 0.00384048, total time[s] 0.076824 +Converged at iteration 40, L1 6.77223e-05, Linf 0.00367428, total time[s] 0.10717 +Converged at iteration 35, L1 7.661e-05, Linf 0.0033968, total time[s] 0.08951 +Converged at iteration 30, L1 9.63116e-05, Linf 0.00432887, total time[s] 0.075681 +Converged at iteration 31, L1 6.19902e-05, Linf 0.00502562, total time[s] 0.080053 +Converged at iteration 27, L1 6.28419e-05, Linf 0.00499536, total time[s] 0.073175 +Converged at iteration 22, L1 8.58623e-05, Linf 0.00448841, total time[s] 0.06089 +Converged at iteration 20, L1 9.61345e-05, Linf 0.00397846, total time[s] 0.05456 +Converged at iteration 24, L1 8.84415e-05, Linf 0.00482778, total time[s] 0.065447 +Converged at iteration 28, L1 7.38414e-05, Linf 0.00445904, total time[s] 0.074103 +Converged at iteration 26, L1 8.11727e-05, Linf 0.0054741, total time[s] 0.069422 +Converged at iteration 22, L1 7.39261e-05, Linf 0.00508834, total time[s] 0.058577 +Converged at iteration 19, L1 6.6332e-05, Linf 0.00393112, total time[s] 0.051646 +Converged at iteration 30, L1 7.98747e-05, Linf 0.00329678, total time[s] 0.079716 +Converged at iteration 20, L1 8.52161e-05, Linf 0.0045502, total time[s] 0.055039 +Converged at iteration 24, L1 7.10548e-05, Linf 0.00463309, total time[s] 0.075407 +Converged at iteration 31, L1 8.9317e-05, Linf 0.00558775, total time[s] 0.083049 +Converged at iteration 27, L1 9.91639e-05, Linf 0.0057005, total time[s] 0.068807 +Converged at iteration 24, L1 8.79728e-05, Linf 0.00469001, total time[s] 0.062983 +Converged at iteration 23, L1 9.21966e-05, Linf 0.00410189, total time[s] 0.061639 +Converged at iteration 26, L1 7.22112e-05, Linf 0.0043916, total time[s] 0.073795 +Converged at iteration 29, L1 7.81666e-05, Linf 0.00479558, total time[s] 0.073691 +Converged at iteration 34, L1 7.09314e-05, Linf 0.00422699, total time[s] 0.085551 +Converged at iteration 30, L1 9.39372e-05, Linf 0.00442602, total time[s] 0.078101 +Converged at iteration 28, L1 9.49889e-05, Linf 0.00310979, total time[s] 0.071353 +Converged at iteration 32, L1 9.39345e-05, Linf 0.00374157, total time[s] 0.08124 +Converged at iteration 37, L1 7.34198e-05, Linf 0.00327834, total time[s] 0.093328 +Converged at iteration 33, L1 8.44929e-05, Linf 0.00469111, total time[s] 0.085102 +Converged at iteration 28, L1 9.65612e-05, Linf 0.00430216, total time[s] 0.072786 +Converged at iteration 24, L1 8.82878e-05, Linf 0.00322544, total time[s] 0.062031 +Converged at iteration 26, L1 8.98087e-05, Linf 0.00383971, total time[s] 0.067004 +Converged at iteration 40, L1 6.76656e-05, Linf 0.00367445, total time[s] 0.127429 +Converged at iteration 35, L1 7.62663e-05, Linf 0.00339715, total time[s] 0.100866 +Converged at iteration 30, L1 9.63773e-05, Linf 0.00432542, total time[s] 0.088153 +Converged at iteration 31, L1 6.21711e-05, Linf 0.00502553, total time[s] 0.087455 +Converged at iteration 27, L1 6.28879e-05, Linf 0.00499538, total time[s] 0.073131 +Converged at iteration 22, L1 8.58693e-05, Linf 0.00448817, total time[s] 0.059826 +Converged at iteration 20, L1 9.6105e-05, Linf 0.00397889, total time[s] 0.059037 +Converged at iteration 24, L1 8.84103e-05, Linf 0.00485385, total time[s] 0.068559 +Converged at iteration 28, L1 7.3835e-05, Linf 0.00445904, total time[s] 0.07705 +Converged at iteration 26, L1 8.14336e-05, Linf 0.00537366, total time[s] 0.071917 +Converged at iteration 22, L1 7.40081e-05, Linf 0.00508938, total time[s] 0.061584 +Converged at iteration 19, L1 6.63331e-05, Linf 0.00393099, total time[s] 0.055669 +Converged at iteration 30, L1 7.98743e-05, Linf 0.00329635, total time[s] 0.084061 +Converged at iteration 20, L1 8.43976e-05, Linf 0.00455013, total time[s] 0.057061 +Converged at iteration 24, L1 7.136e-05, Linf 0.00462932, total time[s] 0.067007 +Converged at iteration 31, L1 9.03747e-05, Linf 0.00569244, total time[s] 0.086778 +Converged at iteration 27, L1 9.91894e-05, Linf 0.00571433, total time[s] 0.073925 +Converged at iteration 24, L1 8.78839e-05, Linf 0.00464196, total time[s] 0.071942 +Converged at iteration 23, L1 9.24928e-05, Linf 0.00410194, total time[s] 0.07048 +Converged at iteration 26, L1 7.23731e-05, Linf 0.00446045, total time[s] 0.078732 +Converged at iteration 29, L1 7.81041e-05, Linf 0.00479576, total time[s] 0.080455 +Converged at iteration 34, L1 7.09331e-05, Linf 0.00422692, total time[s] 0.088788 +Converged at iteration 30, L1 9.3948e-05, Linf 0.00442594, total time[s] 0.07924 +Converged at iteration 28, L1 9.49854e-05, Linf 0.00311256, total time[s] 0.076836 +Converged at iteration 32, L1 9.39337e-05, Linf 0.00374395, total time[s] 0.086955 +Converged at iteration 37, L1 7.38438e-05, Linf 0.00326001, total time[s] 0.096602 +Converged at iteration 33, L1 8.45465e-05, Linf 0.00469107, total time[s] 0.090021 +Converged at iteration 28, L1 9.65553e-05, Linf 0.00430184, total time[s] 0.076898 +Converged at iteration 24, L1 8.82942e-05, Linf 0.00325071, total time[s] 0.0676 +Converged at iteration 26, L1 9.00221e-05, Linf 0.00384018, total time[s] 0.073212 +Converged at iteration 40, L1 6.98139e-05, Linf 0.00384565, total time[s] 0.116257 +Converged at iteration 35, L1 8.45282e-05, Linf 0.00351921, total time[s] 0.101364 +Converged at iteration 30, L1 9.59981e-05, Linf 0.00425396, total time[s] 0.080693 +Converged at iteration 31, L1 6.64555e-05, Linf 0.00505304, total time[s] 0.085367 +Converged at iteration 26, L1 9.37157e-05, Linf 0.00536446, total time[s] 0.077964 +Converged at iteration 22, L1 6.4353e-05, Linf 0.00400494, total time[s] 0.062864 +Converged at iteration 21, L1 6.69316e-05, Linf 0.0033666, total time[s] 0.057111 +Converged at iteration 24, L1 9.6163e-05, Linf 0.0051467, total time[s] 0.069102 +Converged at iteration 28, L1 7.47014e-05, Linf 0.00450811, total time[s] 0.082413 +Converged at iteration 26, L1 7.78639e-05, Linf 0.00554643, total time[s] 0.087194 +Converged at iteration 22, L1 6.99099e-05, Linf 0.00485671, total time[s] 0.082341 +Converged at iteration 19, L1 5.99441e-05, Linf 0.00376469, total time[s] 0.123119 +Converged at iteration 30, L1 9.07211e-05, Linf 0.00318507, total time[s] 0.102482 +Converged at iteration 20, L1 8.57734e-05, Linf 0.0047122, total time[s] 0.056793 +Converged at iteration 24, L1 7.35066e-05, Linf 0.00471407, total time[s] 0.098967 +Converged at iteration 31, L1 9.31074e-05, Linf 0.00543411, total time[s] 0.124141 +Converged at iteration 27, L1 9.77927e-05, Linf 0.00551348, total time[s] 0.094729 +Converged at iteration 24, L1 8.40431e-05, Linf 0.00446682, total time[s] 0.096756 +Converged at iteration 23, L1 9.49768e-05, Linf 0.00435579, total time[s] 0.06478 +Converged at iteration 26, L1 7.41518e-05, Linf 0.00454346, total time[s] 0.072909 +Converged at iteration 29, L1 7.6118e-05, Linf 0.00470089, total time[s] 0.085347 +Converged at iteration 34, L1 7.80607e-05, Linf 0.0043916, total time[s] 0.10568 +Converged at iteration 31, L1 6.90787e-05, Linf 0.00364227, total time[s] 0.085436 +Converged at iteration 28, L1 9.73269e-05, Linf 0.00323035, total time[s] 0.074128 +Converged at iteration 32, L1 8.45899e-05, Linf 0.00362979, total time[s] 0.08522 +Converged at iteration 36, L1 9.45453e-05, Linf 0.00367742, total time[s] 0.09651 +Converged at iteration 33, L1 8.81617e-05, Linf 0.00479305, total time[s] 0.087655 +Converged at iteration 28, L1 8.93012e-05, Linf 0.0038792, total time[s] 0.076873 +Converged at iteration 24, L1 7.58084e-05, Linf 0.00260254, total time[s] 0.067237 +Converged at iteration 26, L1 8.94327e-05, Linf 0.00403825, total time[s] 0.077039 +Converged at iteration 40, L1 7.05063e-05, Linf 0.00400789, total time[s] 0.107501 +Converged at iteration 35, L1 9.25945e-05, Linf 0.0037076, total time[s] 0.092328 +Converged at iteration 30, L1 9.16216e-05, Linf 0.0042368, total time[s] 0.083679 +Converged at iteration 31, L1 6.76657e-05, Linf 0.00508542, total time[s] 0.086839 +Converged at iteration 26, L1 8.09574e-05, Linf 0.00485845, total time[s] 0.068753 +Converged at iteration 21, L1 7.42226e-05, Linf 0.00419983, total time[s] 0.056495 +Converged at iteration 21, L1 7.23502e-05, Linf 0.00359568, total time[s] 0.057178 +Converged at iteration 24, L1 9.98766e-05, Linf 0.00527077, total time[s] 0.063282 +Converged at iteration 28, L1 7.34523e-05, Linf 0.00455659, total time[s] 0.074631 +Converged at iteration 26, L1 7.43625e-05, Linf 0.00529094, total time[s] 0.068878 +Converged at iteration 22, L1 6.57688e-05, Linf 0.00433424, total time[s] 0.058234 +Converged at iteration 19, L1 5.51383e-05, Linf 0.00338496, total time[s] 0.053116 +Converged at iteration 31, L1 6.90139e-05, Linf 0.00247333, total time[s] 0.082818 +Converged at iteration 20, L1 8.49888e-05, Linf 0.00487201, total time[s] 0.055119 +Converged at iteration 24, L1 7.13879e-05, Linf 0.00488292, total time[s] 0.074984 +Converged at iteration 31, L1 9.49963e-05, Linf 0.0050022, total time[s] 0.096615 +Converged at iteration 27, L1 9.32796e-05, Linf 0.00465184, total time[s] 0.073998 +Converged at iteration 24, L1 7.94801e-05, Linf 0.00412126, total time[s] 0.063825 +Converged at iteration 23, L1 9.77761e-05, Linf 0.00466499, total time[s] 0.087547 +Converged at iteration 26, L1 7.30126e-05, Linf 0.00466886, total time[s] 0.080204 +Converged at iteration 29, L1 7.2775e-05, Linf 0.00454078, total time[s] 0.111678 +Converged at iteration 34, L1 8.30216e-05, Linf 0.00419593, total time[s] 0.107035 +Converged at iteration 31, L1 7.36997e-05, Linf 0.00359426, total time[s] 0.111307 +Converged at iteration 29, L1 7.06261e-05, Linf 0.0027808, total time[s] 0.10194 +Converged at iteration 32, L1 7.98012e-05, Linf 0.00347853, total time[s] 0.103989 +Converged at iteration 36, L1 8.11517e-05, Linf 0.00348518, total time[s] 0.101715 +Converged at iteration 33, L1 9.04266e-05, Linf 0.00488363, total time[s] 0.0868 +Converged at iteration 28, L1 8.05099e-05, Linf 0.00347244, total time[s] 0.079893 +Converged at iteration 24, L1 6.92652e-05, Linf 0.00197289, total time[s] 0.064859 +Converged at iteration 26, L1 8.99122e-05, Linf 0.00422343, total time[s] 0.069788 +Converged at iteration 40, L1 7.06885e-05, Linf 0.00412009, total time[s] 0.136932 +Converged at iteration 35, L1 9.85079e-05, Linf 0.00386731, total time[s] 0.089467 +Converged at iteration 30, L1 8.75034e-05, Linf 0.00427302, total time[s] 0.079816 +Converged at iteration 31, L1 6.76366e-05, Linf 0.00503352, total time[s] 0.082525 +Converged at iteration 26, L1 6.59546e-05, Linf 0.00432683, total time[s] 0.074362 +Converged at iteration 20, L1 9.61902e-05, Linf 0.00451753, total time[s] 0.054111 +Converged at iteration 21, L1 7.83606e-05, Linf 0.00386528, total time[s] 0.056792 +Converged at iteration 25, L1 6.41774e-05, Linf 0.00455213, total time[s] 0.067068 +Converged at iteration 28, L1 7.06658e-05, Linf 0.00459925, total time[s] 0.074831 +Converged at iteration 26, L1 7.46059e-05, Linf 0.00484575, total time[s] 0.067611 +Converged at iteration 22, L1 6.0183e-05, Linf 0.00327719, total time[s] 0.057759 +Converged at iteration 18, L1 8.93014e-05, Linf 0.00462515, total time[s] 0.057638 +Converged at iteration 31, L1 7.43615e-05, Linf 0.00243807, total time[s] 0.105259 +Converged at iteration 20, L1 8.14023e-05, Linf 0.00504762, total time[s] 0.074713 +Converged at iteration 24, L1 6.85221e-05, Linf 0.00513178, total time[s] 0.076353 +Converged at iteration 31, L1 9.7419e-05, Linf 0.00403987, total time[s] 0.088686 +Converged at iteration 27, L1 7.83998e-05, Linf 0.00343568, total time[s] 0.099984 +Converged at iteration 24, L1 7.02783e-05, Linf 0.00352465, total time[s] 0.0814 +Converged at iteration 24, L1 6.40393e-05, Linf 0.00349219, total time[s] 0.065246 +Converged at iteration 26, L1 7.2718e-05, Linf 0.00481263, total time[s] 0.075824 +Converged at iteration 29, L1 6.97027e-05, Linf 0.00446887, total time[s] 0.075194 +Converged at iteration 34, L1 7.96925e-05, Linf 0.00329198, total time[s] 0.10579 +Converged at iteration 31, L1 7.895e-05, Linf 0.00340211, total time[s] 0.0866 +Converged at iteration 29, L1 7.58851e-05, Linf 0.00291461, total time[s] 0.082718 +Converged at iteration 32, L1 7.56086e-05, Linf 0.00337205, total time[s] 0.09896 +Converged at iteration 36, L1 7.10867e-05, Linf 0.00331726, total time[s] 0.101474 +Converged at iteration 33, L1 9.14927e-05, Linf 0.00501802, total time[s] 0.093548 +Converged at iteration 28, L1 6.99822e-05, Linf 0.00307249, total time[s] 0.076183 +Converged at iteration 24, L1 7.45811e-05, Linf 0.00186487, total time[s] 0.065571 +Converged at iteration 26, L1 9.28177e-05, Linf 0.00442342, total time[s] 0.069994 +Converged at iteration 40, L1 7.00638e-05, Linf 0.00430512, total time[s] 0.105488 +Converged at iteration 36, L1 6.92202e-05, Linf 0.00339766, total time[s] 0.095666 +Converged at iteration 30, L1 8.04804e-05, Linf 0.00433452, total time[s] 0.078286 +Converged at iteration 31, L1 6.71971e-05, Linf 0.00500499, total time[s] 0.080067 +Converged at iteration 25, L1 8.68168e-05, Linf 0.00456872, total time[s] 0.065967 +Converged at iteration 20, L1 7.98179e-05, Linf 0.0039713, total time[s] 0.053755 +Converged at iteration 21, L1 8.21139e-05, Linf 0.00414893, total time[s] 0.056576 +Converged at iteration 25, L1 6.46988e-05, Linf 0.00478862, total time[s] 0.066746 +Converged at iteration 28, L1 6.76894e-05, Linf 0.00464341, total time[s] 0.073028 +Converged at iteration 26, L1 6.82216e-05, Linf 0.00410498, total time[s] 0.071913 +Converged at iteration 21, L1 7.21381e-05, Linf 0.00363583, total time[s] 0.056159 +Converged at iteration 18, L1 6.94808e-05, Linf 0.00519832, total time[s] 0.049621 +Converged at iteration 31, L1 7.85201e-05, Linf 0.00237047, total time[s] 0.080091 +Converged at iteration 20, L1 7.36352e-05, Linf 0.00513801, total time[s] 0.053884 +Converged at iteration 24, L1 6.30068e-05, Linf 0.00533481, total time[s] 0.064117 +Converged at iteration 31, L1 7.80464e-05, Linf 0.003082, total time[s] 0.083991 +Converged at iteration 25, L1 9.44347e-05, Linf 0.00407279, total time[s] 0.111766 +Converged at iteration 23, L1 6.74437e-05, Linf 0.00341986, total time[s] 0.063234 +Converged at iteration 23, L1 9.59183e-05, Linf 0.00498873, total time[s] 0.062164 +Converged at iteration 26, L1 7.02908e-05, Linf 0.00483455, total time[s] 0.067427 +Converged at iteration 28, L1 9.97086e-05, Linf 0.0052922, total time[s] 0.07289 +Converged at iteration 32, L1 9.33115e-05, Linf 0.00337596, total time[s] 0.081245 +Converged at iteration 30, L1 9.43109e-05, Linf 0.00338732, total time[s] 0.076909 +Converged at iteration 29, L1 8.01842e-05, Linf 0.0030348, total time[s] 0.07485 +Converged at iteration 32, L1 7.14181e-05, Linf 0.00328298, total time[s] 0.082035 +Converged at iteration 35, L1 9.16739e-05, Linf 0.00390261, total time[s] 0.089181 +Converged at iteration 33, L1 9.11502e-05, Linf 0.00502133, total time[s] 0.084362 +Converged at iteration 27, L1 8.71845e-05, Linf 0.00311674, total time[s] 0.072033 +Converged at iteration 24, L1 8.44357e-05, Linf 0.00180655, total time[s] 0.070303 +Converged at iteration 26, L1 9.34445e-05, Linf 0.00464979, total time[s] 0.077843 +Converged at iteration 40, L1 6.88054e-05, Linf 0.00443683, total time[s] 0.106968 +Converged at iteration 36, L1 7.11101e-05, Linf 0.00349733, total time[s] 0.101895 +Converged at iteration 29, L1 8.02097e-05, Linf 0.00524434, total time[s] 0.07961 +Converged at iteration 31, L1 6.67091e-05, Linf 0.00497852, total time[s] 0.085248 +Converged at iteration 25, L1 6.80542e-05, Linf 0.003914, total time[s] 0.065117 +Converged at iteration 20, L1 5.61518e-05, Linf 0.0032035, total time[s] 0.054205 +Converged at iteration 21, L1 7.1137e-05, Linf 0.00427203, total time[s] 0.0685 +Converged at iteration 24, L1 8.7501e-05, Linf 0.00612226, total time[s] 0.06491 +Converged at iteration 28, L1 6.20563e-05, Linf 0.0046883, total time[s] 0.079112 +Converged at iteration 25, L1 8.21735e-05, Linf 0.00405846, total time[s] 0.074126 +Converged at iteration 20, L1 9.26761e-05, Linf 0.00496306, total time[s] 0.058764 +Converged at iteration 18, L1 6.07919e-05, Linf 0.00563588, total time[s] 0.053677 +Converged at iteration 31, L1 8.1919e-05, Linf 0.00229314, total time[s] 0.097002 +Converged at iteration 20, L1 6.51714e-05, Linf 0.00543239, total time[s] 0.07531 +Converged at iteration 23, L1 9.43667e-05, Linf 0.00658163, total time[s] 0.070279 +Converged at iteration 30, L1 7.73858e-05, Linf 0.0029843, total time[s] 0.092173 +Converged at iteration 24, L1 9.41577e-05, Linf 0.00470135, total time[s] 0.089132 +Converged at iteration 22, L1 6.79156e-05, Linf 0.00359795, total time[s] 0.091363 +Converged at iteration 23, L1 7.92309e-05, Linf 0.00513474, total time[s] 0.078821 +Converged at iteration 25, L1 9.84674e-05, Linf 0.00601295, total time[s] 0.083888 +Converged at iteration 28, L1 8.95762e-05, Linf 0.00485307, total time[s] 0.135781 +Converged at iteration 31, L1 8.74138e-05, Linf 0.00555748, total time[s] 0.115151 +Converged at iteration 29, L1 9.43034e-05, Linf 0.00343531, total time[s] 0.191036 +Converged at iteration 29, L1 7.61506e-05, Linf 0.00316896, total time[s] 0.097857 +Converged at iteration 31, L1 8.87025e-05, Linf 0.00381255, total time[s] 0.176681 +Converged at iteration 34, L1 8.10528e-05, Linf 0.00430888, total time[s] 0.145822 +Converged at iteration 33, L1 9.01482e-05, Linf 0.00507633, total time[s] 0.111405 +Converged at iteration 27, L1 7.26616e-05, Linf 0.00262579, total time[s] 0.083491 +Converged at iteration 24, L1 8.58613e-05, Linf 0.0017574, total time[s] 0.088281 +Converged at iteration 26, L1 7.86886e-05, Linf 0.00475905, total time[s] 0.109721 +Converged at iteration 40, L1 6.72547e-05, Linf 0.0046097, total time[s] 0.171381 +Converged at iteration 36, L1 7.35757e-05, Linf 0.00364708, total time[s] 0.129951 +Converged at iteration 28, L1 8.26752e-05, Linf 0.00619784, total time[s] 0.080236 +Converged at iteration 31, L1 6.70983e-05, Linf 0.00803426, total time[s] 0.095709 +Converged at iteration 24, L1 8.37896e-05, Linf 0.00397504, total time[s] 0.07209 +Converged at iteration 19, L1 9.24382e-05, Linf 0.00329913, total time[s] 0.053815 +Converged at iteration 21, L1 5.96416e-05, Linf 0.00406746, total time[s] 0.06023 +Converged at iteration 24, L1 6.12188e-05, Linf 0.00638719, total time[s] 0.066228 +Converged at iteration 27, L1 8.62206e-05, Linf 0.00594002, total time[s] 0.078579 +Converged at iteration 24, L1 9.96282e-05, Linf 0.00408422, total time[s] 0.06355 +Converged at iteration 20, L1 6.74872e-05, Linf 0.00471373, total time[s] 0.053958 +Converged at iteration 18, L1 5.80992e-05, Linf 0.00611804, total time[s] 0.049051 +Converged at iteration 31, L1 8.04746e-05, Linf 0.00223777, total time[s] 0.081295 +Converged at iteration 20, L1 5.72955e-05, Linf 0.00559369, total time[s] 0.054587 +Converged at iteration 23, L1 8.55695e-05, Linf 0.00694951, total time[s] 0.068828 +Converged at iteration 29, L1 8.7667e-05, Linf 0.00303737, total time[s] 0.075187 +Converged at iteration 24, L1 6.54943e-05, Linf 0.00451653, total time[s] 0.063675 +Converged at iteration 21, L1 7.35553e-05, Linf 0.00395219, total time[s] 0.056531 +Converged at iteration 23, L1 7.20556e-05, Linf 0.00526429, total time[s] 0.061247 +Converged at iteration 25, L1 8.39508e-05, Linf 0.00620539, total time[s] 0.065268 +Converged at iteration 28, L1 7.51436e-05, Linf 0.00365491, total time[s] 0.072262 +Converged at iteration 30, L1 9.55381e-05, Linf 0.00449337, total time[s] 0.077086 +Converged at iteration 29, L1 7.28689e-05, Linf 0.00310394, total time[s] 0.084939 +Converged at iteration 29, L1 7.41005e-05, Linf 0.00330462, total time[s] 0.07764 +Converged at iteration 31, L1 7.80712e-05, Linf 0.00330491, total time[s] 0.079148 +Converged at iteration 33, L1 6.94689e-05, Linf 0.00420717, total time[s] 0.083484 +Converged at iteration 33, L1 8.97932e-05, Linf 0.00513186, total time[s] 0.08439 +Converged at iteration 26, L1 8.50321e-05, Linf 0.00246739, total time[s] 0.068486 +Converged at iteration 24, L1 9.01821e-05, Linf 0.00173958, total time[s] 0.071917 +Converged at iteration 26, L1 6.48824e-05, Linf 0.00454865, total time[s] 0.07105 +Converged at iteration 40, L1 6.71943e-05, Linf 0.00467528, total time[s] 0.113528 +Converged at iteration 36, L1 7.38384e-05, Linf 0.00379455, total time[s] 0.091433 +Converged at iteration 27, L1 9.42775e-05, Linf 0.00726328, total time[s] 0.070538 +Converged at iteration 31, L1 5.8672e-05, Linf 0.00489965, total time[s] 0.079698 +Converged at iteration 23, L1 9.11029e-05, Linf 0.00387653, total time[s] 0.061965 +Converged at iteration 20, L1 6.31983e-05, Linf 0.00284824, total time[s] 0.054425 +Converged at iteration 20, L1 9.9739e-05, Linf 0.00545581, total time[s] 0.054652 +Converged at iteration 23, L1 8.41481e-05, Linf 0.00793693, total time[s] 0.062622 +Converged at iteration 27, L1 7.09847e-05, Linf 0.00595255, total time[s] 0.070654 +Converged at iteration 24, L1 7.95714e-05, Linf 0.00383084, total time[s] 0.063489 +Converged at iteration 20, L1 5.11673e-05, Linf 0.00441839, total time[s] 0.054503 +Converged at iteration 18, L1 6.34832e-05, Linf 0.00659896, total time[s] 0.049767 +Converged at iteration 31, L1 6.71396e-05, Linf 0.00208852, total time[s] 0.081846 +Converged at iteration 19, L1 9.34868e-05, Linf 0.00724603, total time[s] 0.052165 +Converged at iteration 23, L1 8.04561e-05, Linf 0.00730387, total time[s] 0.065063 +Converged at iteration 29, L1 7.18872e-05, Linf 0.00271823, total time[s] 0.076512 +Converged at iteration 23, L1 9.43934e-05, Linf 0.00570566, total time[s] 0.066076 +Converged at iteration 20, L1 9.05822e-05, Linf 0.00443408, total time[s] 0.059825 +Converged at iteration 23, L1 6.78365e-05, Linf 0.00535446, total time[s] 0.063999 +Converged at iteration 25, L1 7.63149e-05, Linf 0.00633744, total time[s] 0.067453 +Converged at iteration 27, L1 9.53896e-05, Linf 0.00562494, total time[s] 0.072305 +Converged at iteration 30, L1 7.93679e-05, Linf 0.00438345, total time[s] 0.080767 +Converged at iteration 28, L1 9.29319e-05, Linf 0.00349528, total time[s] 0.072094 +Converged at iteration 29, L1 7.52386e-05, Linf 0.00341558, total time[s] 0.073926 +Converged at iteration 31, L1 7.02227e-05, Linf 0.00287172, total time[s] 0.078415 +Converged at iteration 32, L1 6.95612e-05, Linf 0.00399342, total time[s] 0.079392 +Converged at iteration 33, L1 8.97449e-05, Linf 0.00518974, total time[s] 0.083019 +Converged at iteration 25, L1 9.16752e-05, Linf 0.00224615, total time[s] 0.065074 +Converged at iteration 24, L1 9.62715e-05, Linf 0.00205758, total time[s] 0.064716 +Converged at iteration 25, L1 8.73069e-05, Linf 0.00556982, total time[s] 0.065454 +Converged at iteration 40, L1 6.47539e-05, Linf 0.00478365, total time[s] 0.112227 +Converged at iteration 36, L1 7.41701e-05, Linf 0.00394604, total time[s] 0.106645 +Converged at iteration 27, L1 5.84812e-05, Linf 0.00660212, total time[s] 0.070394 +Converged at iteration 30, L1 8.82379e-05, Linf 0.0057559, total time[s] 0.075563 +Converged at iteration 23, L1 6.22377e-05, Linf 0.00276538, total time[s] 0.0681 +Converged at iteration 20, L1 6.79421e-05, Linf 0.00315161, total time[s] 0.054241 +Converged at iteration 20, L1 9.21755e-05, Linf 0.00515187, total time[s] 0.053924 +Converged at iteration 23, L1 5.97191e-05, Linf 0.00795742, total time[s] 0.060024 +Converged at iteration 27, L1 5.7168e-05, Linf 0.00579275, total time[s] 0.068484 +Converged at iteration 24, L1 6.59376e-05, Linf 0.00366096, total time[s] 0.062279 +Converged at iteration 19, L1 8.79806e-05, Linf 0.00620037, total time[s] 0.051376 +Converged at iteration 18, L1 6.96349e-05, Linf 0.00713573, total time[s] 0.047921 +Converged at iteration 30, L1 9.11209e-05, Linf 0.00236085, total time[s] 0.07788 +Converged at iteration 19, L1 8.87574e-05, Linf 0.00740085, total time[s] 0.053552 +Converged at iteration 23, L1 7.60109e-05, Linf 0.00764064, total time[s] 0.059195 +Converged at iteration 28, L1 9.25068e-05, Linf 0.00321601, total time[s] 0.072143 +Converged at iteration 23, L1 8.75911e-05, Linf 0.00556834, total time[s] 0.060074 +Converged at iteration 20, L1 7.61042e-05, Linf 0.00407049, total time[s] 0.059186 +Converged at iteration 23, L1 6.5126e-05, Linf 0.00539986, total time[s] 0.060461 +Converged at iteration 25, L1 7.28543e-05, Linf 0.00640401, total time[s] 0.064534 +Converged at iteration 27, L1 8.40023e-05, Linf 0.00479711, total time[s] 0.068289 +Converged at iteration 30, L1 7.21934e-05, Linf 0.00436896, total time[s] 0.080783 +Converged at iteration 28, L1 8.35044e-05, Linf 0.00332189, total time[s] 0.076595 +Converged at iteration 29, L1 7.75267e-05, Linf 0.00349664, total time[s] 0.075474 +Converged at iteration 30, L1 9.50534e-05, Linf 0.00315479, total time[s] 0.075677 +Converged at iteration 31, L1 7.62603e-05, Linf 0.00335589, total time[s] 0.078777 +Converged at iteration 33, L1 8.7435e-05, Linf 0.00523829, total time[s] 0.088187 +Converged at iteration 25, L1 7.03773e-05, Linf 0.00171681, total time[s] 0.065756 +Converged at iteration 25, L1 6.52373e-05, Linf 0.00181066, total time[s] 0.065986 +Converged at iteration 25, L1 7.46618e-05, Linf 0.00517838, total time[s] 0.064991 +Converged at iteration 40, L1 6.32013e-05, Linf 0.00488426, total time[s] 0.104388 +Converged at iteration 36, L1 7.27664e-05, Linf 0.00409712, total time[s] 0.091072 +Converged at iteration 26, L1 8.12301e-05, Linf 0.007746, total time[s] 0.067824 +Converged at iteration 30, L1 7.36319e-05, Linf 0.00566273, total time[s] 0.077302 +Converged at iteration 22, L1 6.74209e-05, Linf 0.00274807, total time[s] 0.058794 +Converged at iteration 20, L1 7.3441e-05, Linf 0.00345817, total time[s] 0.053023 +Converged at iteration 20, L1 8.67835e-05, Linf 0.00556797, total time[s] 0.053744 +Converged at iteration 22, L1 9.97755e-05, Linf 0.0101425, total time[s] 0.058847 +Converged at iteration 26, L1 8.44244e-05, Linf 0.00713913, total time[s] 0.067177 +Converged at iteration 23, L1 9.37697e-05, Linf 0.00394458, total time[s] 0.063567 +Converged at iteration 19, L1 7.35542e-05, Linf 0.00597664, total time[s] 0.056158 +Converged at iteration 18, L1 7.62551e-05, Linf 0.00756306, total time[s] 0.050059 +Converged at iteration 30, L1 8.67497e-05, Linf 0.00248699, total time[s] 0.076068 +Converged at iteration 19, L1 8.72487e-05, Linf 0.00745429, total time[s] 0.051021 +Converged at iteration 23, L1 7.24553e-05, Linf 0.00795392, total time[s] 0.060902 +Converged at iteration 28, L1 8.09038e-05, Linf 0.00304865, total time[s] 0.07118 +Converged at iteration 23, L1 8.32843e-05, Linf 0.00538711, total time[s] 0.060659 +Converged at iteration 20, L1 6.72265e-05, Linf 0.00366823, total time[s] 0.053638 +Converged at iteration 23, L1 6.34961e-05, Linf 0.00543377, total time[s] 0.060663 +Converged at iteration 25, L1 7.11643e-05, Linf 0.00639467, total time[s] 0.068361 +Converged at iteration 27, L1 7.76876e-05, Linf 0.00408991, total time[s] 0.069954 +Converged at iteration 30, L1 6.885e-05, Linf 0.00439648, total time[s] 0.078409 +Converged at iteration 28, L1 7.84562e-05, Linf 0.00318607, total time[s] 0.072972 +Converged at iteration 29, L1 7.90593e-05, Linf 0.0035445, total time[s] 0.076011 +Converged at iteration 30, L1 8.82833e-05, Linf 0.0027569, total time[s] 0.077677 +Converged at iteration 30, L1 9.12832e-05, Linf 0.0030619, total time[s] 0.086438 +Converged at iteration 33, L1 8.5811e-05, Linf 0.0052227, total time[s] 0.083026 +Converged at iteration 24, L1 8.73371e-05, Linf 0.00165581, total time[s] 0.064597 +Converged at iteration 25, L1 6.80527e-05, Linf 0.0020764, total time[s] 0.065937 +Converged at iteration 25, L1 6.5704e-05, Linf 0.00444399, total time[s] 0.065698 +Converged at iteration 40, L1 6.2154e-05, Linf 0.00500463, total time[s] 0.104691 +Converged at iteration 36, L1 6.63376e-05, Linf 0.00424223, total time[s] 0.119464 +Converged at iteration 26, L1 5.74514e-05, Linf 0.00624303, total time[s] 0.068549 +Converged at iteration 30, L1 6.1177e-05, Linf 0.00552387, total time[s] 0.078522 +Converged at iteration 21, L1 7.99387e-05, Linf 0.00323082, total time[s] 0.05676 +Converged at iteration 20, L1 8.02548e-05, Linf 0.00376536, total time[s] 0.060605 +Converged at iteration 20, L1 8.39633e-05, Linf 0.00593282, total time[s] 0.057376 +Converged at iteration 22, L1 7.92247e-05, Linf 0.00979006, total time[s] 0.060186 +Converged at iteration 26, L1 6.93172e-05, Linf 0.00679914, total time[s] 0.06913 +Converged at iteration 23, L1 8.02752e-05, Linf 0.00405562, total time[s] 0.060439 +Converged at iteration 19, L1 6.28239e-05, Linf 0.00569336, total time[s] 0.053193 +Converged at iteration 18, L1 8.39553e-05, Linf 0.00804405, total time[s] 0.050048 +Converged at iteration 30, L1 8.46337e-05, Linf 0.00271142, total time[s] 0.07725 +Converged at iteration 19, L1 8.71523e-05, Linf 0.00776992, total time[s] 0.052481 +Converged at iteration 23, L1 6.91723e-05, Linf 0.00822271, total time[s] 0.059299 +Converged at iteration 28, L1 7.27197e-05, Linf 0.00289774, total time[s] 0.072253 +Converged at iteration 23, L1 8.23898e-05, Linf 0.0051277, total time[s] 0.0623 +Converged at iteration 20, L1 6.2471e-05, Linf 0.00330798, total time[s] 0.062049 +Converged at iteration 23, L1 6.28479e-05, Linf 0.00544038, total time[s] 0.063052 +Converged at iteration 25, L1 7.0034e-05, Linf 0.00630143, total time[s] 0.069166 +Converged at iteration 27, L1 7.30274e-05, Linf 0.00362648, total time[s] 0.071458 +Converged at iteration 30, L1 6.64286e-05, Linf 0.00444267, total time[s] 0.077059 +Converged at iteration 28, L1 7.46406e-05, Linf 0.00305795, total time[s] 0.076583 +Converged at iteration 29, L1 8.05776e-05, Linf 0.00364666, total time[s] 0.075921 +Converged at iteration 30, L1 8.29243e-05, Linf 0.00250307, total time[s] 0.075799 +Converged at iteration 30, L1 7.45379e-05, Linf 0.00260183, total time[s] 0.076202 +Converged at iteration 33, L1 7.8656e-05, Linf 0.00532578, total time[s] 0.084263 +Converged at iteration 24, L1 7.77324e-05, Linf 0.00179092, total time[s] 0.063266 +Converged at iteration 25, L1 7.06654e-05, Linf 0.00235559, total time[s] 0.067359 +Converged at iteration 24, L1 9.93824e-05, Linf 0.00590913, total time[s] 0.063532 +Converged at iteration 39, L1 9.80081e-05, Linf 0.00608211, total time[s] 0.098677 +Converged at iteration 35, L1 9.35277e-05, Linf 0.00511125, total time[s] 0.090956 +Converged at iteration 25, L1 9.46228e-05, Linf 0.0078677, total time[s] 0.065044 +Converged at iteration 29, L1 9.7402e-05, Linf 0.0063257, total time[s] 0.074266 +Converged at iteration 21, L1 6.54634e-05, Linf 0.00310045, total time[s] 0.05607 +Converged at iteration 20, L1 8.74703e-05, Linf 0.00406824, total time[s] 0.05475 +Converged at iteration 20, L1 8.2778e-05, Linf 0.00642829, total time[s] 0.056116 +Converged at iteration 22, L1 6.37888e-05, Linf 0.0102092, total time[s] 0.06028 +Converged at iteration 26, L1 5.63688e-05, Linf 0.00620481, total time[s] 0.092665 +Converged at iteration 23, L1 6.95684e-05, Linf 0.00424295, total time[s] 0.065669 +Converged at iteration 19, L1 5.53157e-05, Linf 0.00534115, total time[s] 0.074135 +Converged at iteration 18, L1 9.12408e-05, Linf 0.00853026, total time[s] 0.053818 +Converged at iteration 30, L1 8.39823e-05, Linf 0.0029231, total time[s] 0.088467 +Converged at iteration 19, L1 8.79917e-05, Linf 0.00796013, total time[s] 0.06817 +Converged at iteration 23, L1 6.62768e-05, Linf 0.00840626, total time[s] 0.092434 +Converged at iteration 28, L1 6.55682e-05, Linf 0.00276659, total time[s] 0.073113 +Converged at iteration 23, L1 8.36658e-05, Linf 0.00480706, total time[s] 0.065069 +Converged at iteration 20, L1 6.11843e-05, Linf 0.00284757, total time[s] 0.058432 +Converged at iteration 23, L1 6.3427e-05, Linf 0.00545605, total time[s] 0.071981 +Converged at iteration 25, L1 6.89963e-05, Linf 0.00614634, total time[s] 0.067215 +Converged at iteration 27, L1 6.9133e-05, Linf 0.00347502, total time[s] 0.077891 +Converged at iteration 30, L1 6.50116e-05, Linf 0.00448495, total time[s] 0.079341 +Converged at iteration 28, L1 7.28455e-05, Linf 0.0029832, total time[s] 0.074898 +Converged at iteration 29, L1 8.19124e-05, Linf 0.00374946, total time[s] 0.073356 +Converged at iteration 30, L1 7.85101e-05, Linf 0.00227085, total time[s] 0.075275 +Converged at iteration 29, L1 9.80751e-05, Linf 0.00301, total time[s] 0.073899 +Converged at iteration 33, L1 6.98243e-05, Linf 0.00536333, total time[s] 0.085398 +Converged at iteration 24, L1 7.25879e-05, Linf 0.00189549, total time[s] 0.062536 +Converged at iteration 25, L1 7.34887e-05, Linf 0.00262209, total time[s] 0.064735 +Converged at iteration 24, L1 9.39699e-05, Linf 0.0054441, total time[s] 0.062491 +Converged at iteration 39, L1 9.55491e-05, Linf 0.00621083, total time[s] 0.11041 +Converged at iteration 35, L1 8.65316e-05, Linf 0.0052514, total time[s] 0.088326 +Converged at iteration 25, L1 7.67808e-05, Linf 0.00632823, total time[s] 0.064651 +Converged at iteration 29, L1 8.75083e-05, Linf 0.0061485, total time[s] 0.073252 +Converged at iteration 21, L1 6.43739e-05, Linf 0.0028769, total time[s] 0.055217 +Converged at iteration 20, L1 9.50215e-05, Linf 0.00448084, total time[s] 0.05283 +Converged at iteration 20, L1 8.26714e-05, Linf 0.00687214, total time[s] 0.052326 +Converged at iteration 22, L1 5.09551e-05, Linf 0.00867514, total time[s] 0.057557 +Converged at iteration 25, L1 9.45058e-05, Linf 0.00785465, total time[s] 0.065857 +Converged at iteration 23, L1 6.05157e-05, Linf 0.00441838, total time[s] 0.063031 +Converged at iteration 19, L1 5.06241e-05, Linf 0.00490324, total time[s] 0.049698 +Converged at iteration 18, L1 9.93368e-05, Linf 0.0090136, total time[s] 0.049063 +Converged at iteration 30, L1 8.37307e-05, Linf 0.0031369, total time[s] 0.075488 +Converged at iteration 19, L1 8.97477e-05, Linf 0.00812703, total time[s] 0.050097 +Converged at iteration 23, L1 6.52991e-05, Linf 0.0085252, total time[s] 0.060593 +Converged at iteration 27, L1 9.67643e-05, Linf 0.00375374, total time[s] 0.069295 +Converged at iteration 23, L1 8.63656e-05, Linf 0.00450502, total time[s] 0.0604 +Converged at iteration 20, L1 6.3233e-05, Linf 0.00533877, total time[s] 0.052388 +Converged at iteration 23, L1 6.38206e-05, Linf 0.00545723, total time[s] 0.061333 +Converged at iteration 25, L1 6.84462e-05, Linf 0.0059972, total time[s] 0.064273 +Converged at iteration 27, L1 6.58146e-05, Linf 0.00342033, total time[s] 0.069966 +Converged at iteration 30, L1 6.45911e-05, Linf 0.00453844, total time[s] 0.085954 +Converged at iteration 28, L1 7.14973e-05, Linf 0.00286119, total time[s] 0.078821 +Converged at iteration 29, L1 8.31118e-05, Linf 0.00379388, total time[s] 0.078667 +Converged at iteration 30, L1 7.48844e-05, Linf 0.00212468, total time[s] 0.088842 +Converged at iteration 29, L1 8.59738e-05, Linf 0.00282599, total time[s] 0.080103 +Converged at iteration 33, L1 6.3009e-05, Linf 0.00533319, total time[s] 0.101163 +Converged at iteration 24, L1 7.30304e-05, Linf 0.00195087, total time[s] 0.096106 +Converged at iteration 25, L1 7.5966e-05, Linf 0.00286385, total time[s] 0.120101 +Converged at iteration 24, L1 8.97217e-05, Linf 0.00508479, total time[s] 0.081918 +Converged at iteration 39, L1 8.84403e-05, Linf 0.00633528, total time[s] 0.17026 +Converged at iteration 35, L1 7.97105e-05, Linf 0.00539101, total time[s] 0.104936 +Converged at iteration 25, L1 6.52644e-05, Linf 0.0049746, total time[s] 0.071428 +Converged at iteration 29, L1 8.03221e-05, Linf 0.00603157, total time[s] 0.08515 +Converged at iteration 21, L1 6.68136e-05, Linf 0.00275205, total time[s] 0.068652 +Converged at iteration 21, L1 5.74741e-05, Linf 0.00392399, total time[s] 0.066153 +Converged at iteration 20, L1 8.31613e-05, Linf 0.00733093, total time[s] 0.062951 +Converged at iteration 22, L1 4.2268e-05, Linf 0.00691018, total time[s] 0.06399 +Converged at iteration 25, L1 8.17539e-05, Linf 0.00725319, total time[s] 0.069357 +Converged at iteration 22, L1 8.98422e-05, Linf 0.00382558, total time[s] 0.064887 +Converged at iteration 19, L1 4.81393e-05, Linf 0.00435545, total time[s] 0.057301 +Converged at iteration 19, L1 4.73002e-05, Linf 0.00698788, total time[s] 0.052511 +Converged at iteration 30, L1 8.42222e-05, Linf 0.00334644, total time[s] 0.082588 +Converged at iteration 19, L1 9.15006e-05, Linf 0.00828478, total time[s] 0.05122 +Converged at iteration 23, L1 6.24338e-05, Linf 0.00856652, total time[s] 0.062187 +Converged at iteration 27, L1 8.95644e-05, Linf 0.00366544, total time[s] 0.076775 +Converged at iteration 23, L1 8.9451e-05, Linf 0.00419459, total time[s] 0.062822 +Converged at iteration 20, L1 6.53881e-05, Linf 0.00206427, total time[s] 0.056956 +Converged at iteration 23, L1 6.45636e-05, Linf 0.00544198, total time[s] 0.060314 +Converged at iteration 25, L1 6.75786e-05, Linf 0.00582655, total time[s] 0.065207 +Converged at iteration 26, L1 9.69745e-05, Linf 0.00497339, total time[s] 0.071771 +Converged at iteration 30, L1 6.46414e-05, Linf 0.0046119, total time[s] 0.075551 +Converged at iteration 28, L1 7.08045e-05, Linf 0.00280872, total time[s] 0.071313 +Converged at iteration 29, L1 8.44809e-05, Linf 0.00385904, total time[s] 0.073716 +Converged at iteration 30, L1 7.21962e-05, Linf 0.00210939, total time[s] 0.077134 +Converged at iteration 29, L1 7.6329e-05, Linf 0.00254444, total time[s] 0.073923 +Converged at iteration 32, L1 9.65959e-05, Linf 0.0062881, total time[s] 0.082761 +Converged at iteration 24, L1 7.65291e-05, Linf 0.00204462, total time[s] 0.062989 +Converged at iteration 25, L1 7.85452e-05, Linf 0.00333249, total time[s] 0.064989 +Converged at iteration 24, L1 8.68803e-05, Linf 0.00471578, total time[s] 0.063117 +Converged at iteration 39, L1 8.24342e-05, Linf 0.00645079, total time[s] 0.111863 +Converged at iteration 35, L1 7.47444e-05, Linf 0.00551805, total time[s] 0.096463 +Converged at iteration 25, L1 5.81492e-05, Linf 0.00387006, total time[s] 0.06577 +Converged at iteration 29, L1 7.46014e-05, Linf 0.0059411, total time[s] 0.075735 +Converged at iteration 21, L1 7.10019e-05, Linf 0.00261124, total time[s] 0.055917 +Converged at iteration 21, L1 6.1795e-05, Linf 0.0042561, total time[s] 0.057118 +Converged at iteration 20, L1 8.47119e-05, Linf 0.00787934, total time[s] 0.053556 +Converged at iteration 22, L1 3.70948e-05, Linf 0.0053263, total time[s] 0.058438 +Converged at iteration 25, L1 7.1792e-05, Linf 0.00644049, total time[s] 0.0663 +Converged at iteration 22, L1 8.35438e-05, Linf 0.00385437, total time[s] 0.058637 +Converged at iteration 19, L1 4.84236e-05, Linf 0.00373198, total time[s] 0.051715 +Converged at iteration 19, L1 5.06133e-05, Linf 0.00720684, total time[s] 0.052359 +Converged at iteration 30, L1 8.59977e-05, Linf 0.00357604, total time[s] 0.082163 +Converged at iteration 19, L1 9.27735e-05, Linf 0.00841045, total time[s] 0.051076 +Converged at iteration 23, L1 6.12752e-05, Linf 0.00824198, total time[s] 0.061009 +Converged at iteration 27, L1 8.53576e-05, Linf 0.00356953, total time[s] 0.072044 +Converged at iteration 23, L1 9.26886e-05, Linf 0.00386489, total time[s] 0.060568 +Converged at iteration 20, L1 7.10566e-05, Linf 0.00197903, total time[s] 0.053931 +Converged at iteration 23, L1 6.54389e-05, Linf 0.00564228, total time[s] 0.067262 +Converged at iteration 25, L1 6.79788e-05, Linf 0.00588283, total time[s] 0.073994 +Converged at iteration 26, L1 9.30676e-05, Linf 0.00483049, total time[s] 0.069263 +Converged at iteration 30, L1 6.44138e-05, Linf 0.00465363, total time[s] 0.076737 +Converged at iteration 28, L1 7.06654e-05, Linf 0.00277249, total time[s] 0.072026 +Converged at iteration 29, L1 8.54513e-05, Linf 0.00389335, total time[s] 0.075179 +Converged at iteration 30, L1 6.92446e-05, Linf 0.0020899, total time[s] 0.07761 +Converged at iteration 29, L1 6.90107e-05, Linf 0.00232993, total time[s] 0.074666 +Converged at iteration 32, L1 8.95734e-05, Linf 0.00635506, total time[s] 0.081879 +Converged at iteration 24, L1 8.13303e-05, Linf 0.00203811, total time[s] 0.063037 +Converged at iteration 25, L1 8.11882e-05, Linf 0.00396939, total time[s] 0.066226 +Converged at iteration 24, L1 8.48979e-05, Linf 0.0045865, total time[s] 0.064539 +Converged at iteration 39, L1 7.50481e-05, Linf 0.00655397, total time[s] 0.119558 +Converged at iteration 35, L1 6.95092e-05, Linf 0.00565899, total time[s] 0.09315 +Converged at iteration 25, L1 5.29425e-05, Linf 0.00250012, total time[s] 0.06564 +Converged at iteration 29, L1 7.0367e-05, Linf 0.00585729, total time[s] 0.078981 +Converged at iteration 21, L1 7.69573e-05, Linf 0.00249507, total time[s] 0.056016 +Converged at iteration 21, L1 6.6248e-05, Linf 0.00499555, total time[s] 0.063498 +Converged at iteration 20, L1 8.70851e-05, Linf 0.00826047, total time[s] 0.068206 +Converged at iteration 21, L1 9.5944e-05, Linf 0.0105047, total time[s] 0.062617 +Converged at iteration 25, L1 6.30358e-05, Linf 0.00551253, total time[s] 0.134359 +Converged at iteration 22, L1 7.74062e-05, Linf 0.00381024, total time[s] 0.06626 +Converged at iteration 19, L1 4.94136e-05, Linf 0.00303242, total time[s] 0.053461 +Converged at iteration 19, L1 5.41098e-05, Linf 0.00761373, total time[s] 0.055336 +Converged at iteration 30, L1 8.77582e-05, Linf 0.00380112, total time[s] 0.084058 +Converged at iteration 19, L1 9.41246e-05, Linf 0.00846549, total time[s] 0.05535 +Converged at iteration 23, L1 6.17294e-05, Linf 0.0085134, total time[s] 0.062907 +Converged at iteration 27, L1 7.97044e-05, Linf 0.00346132, total time[s] 0.075972 +Converged at iteration 23, L1 9.58247e-05, Linf 0.00354159, total time[s] 0.06145 +Converged at iteration 20, L1 7.97046e-05, Linf 0.00239872, total time[s] 0.055969 +Converged at iteration 23, L1 6.64534e-05, Linf 0.00541028, total time[s] 0.059968 +Converged at iteration 25, L1 6.70404e-05, Linf 0.00540653, total time[s] 0.06504 +Converged at iteration 26, L1 9.04051e-05, Linf 0.00452533, total time[s] 0.068192 +Converged at iteration 30, L1 6.53508e-05, Linf 0.00464828, total time[s] 0.076458 +Converged at iteration 28, L1 7.12611e-05, Linf 0.00271673, total time[s] 0.074535 +Converged at iteration 29, L1 8.62623e-05, Linf 0.0039726, total time[s] 0.075209 +Converged at iteration 30, L1 6.74114e-05, Linf 0.00204733, total time[s] 0.075817 +Converged at iteration 29, L1 6.38898e-05, Linf 0.00219789, total time[s] 0.073556 +Converged at iteration 32, L1 8.36981e-05, Linf 0.00643867, total time[s] 0.082141 +Converged at iteration 24, L1 8.65599e-05, Linf 0.00223744, total time[s] 0.062329 +Converged at iteration 25, L1 8.39706e-05, Linf 0.00456359, total time[s] 0.064773 +Converged at iteration 24, L1 8.38411e-05, Linf 0.00439137, total time[s] 0.063457 +Converged at iteration 39, L1 6.93324e-05, Linf 0.00665378, total time[s] 0.099196 +Converged at iteration 35, L1 6.67031e-05, Linf 0.0058255, total time[s] 0.103316 +Converged at iteration 25, L1 4.99438e-05, Linf 0.0021731, total time[s] 0.066733 +Converged at iteration 29, L1 6.75704e-05, Linf 0.00578657, total time[s] 0.073505 +Converged at iteration 21, L1 8.29977e-05, Linf 0.0025122, total time[s] 0.055133 +Converged at iteration 21, L1 7.01885e-05, Linf 0.00555122, total time[s] 0.054109 +Converged at iteration 20, L1 9.01468e-05, Linf 0.00872806, total time[s] 0.061467 +Converged at iteration 21, L1 8.9689e-05, Linf 0.00966655, total time[s] 0.076384 +Converged at iteration 25, L1 5.70445e-05, Linf 0.00467786, total time[s] 0.071231 +Converged at iteration 22, L1 7.21263e-05, Linf 0.00370486, total time[s] 0.070615 +Converged at iteration 19, L1 5.19345e-05, Linf 0.00229852, total time[s] 0.057944 +Converged at iteration 19, L1 5.74194e-05, Linf 0.0079589, total time[s] 0.080858 +Converged at iteration 30, L1 9.06071e-05, Linf 0.00403014, total time[s] 0.093743 +Converged at iteration 19, L1 9.60071e-05, Linf 0.00848943, total time[s] 0.059544 +Converged at iteration 23, L1 6.07635e-05, Linf 0.00843176, total time[s] 0.089152 +Converged at iteration 27, L1 7.57007e-05, Linf 0.00340221, total time[s] 0.084024 +Converged at iteration 23, L1 9.94666e-05, Linf 0.00320444, total time[s] 0.073507 +Converged at iteration 20, L1 9.05977e-05, Linf 0.00281766, total time[s] 0.071315 +Converged at iteration 23, L1 6.78004e-05, Linf 0.0053953, total time[s] 0.094446 +Converged at iteration 25, L1 6.74584e-05, Linf 0.00537249, total time[s] 0.138606 +Converged at iteration 26, L1 8.64733e-05, Linf 0.00425658, total time[s] 0.099276 +Converged at iteration 30, L1 6.51936e-05, Linf 0.00475121, total time[s] 0.108683 +Converged at iteration 28, L1 7.20577e-05, Linf 0.00260224, total time[s] 0.090762 +Converged at iteration 29, L1 8.72873e-05, Linf 0.00399139, total time[s] 0.082458 +Converged at iteration 30, L1 6.57046e-05, Linf 0.00202213, total time[s] 0.077324 +Converged at iteration 28, L1 9.42527e-05, Linf 0.00270469, total time[s] 0.071948 +Converged at iteration 32, L1 7.89121e-05, Linf 0.00651714, total time[s] 0.081193 +Converged at iteration 24, L1 9.2584e-05, Linf 0.00250214, total time[s] 0.064102 +Converged at iteration 25, L1 8.67214e-05, Linf 0.00507698, total time[s] 0.06544 +Converged at iteration 24, L1 8.31099e-05, Linf 0.00429802, total time[s] 0.064032 +Converged at iteration 39, L1 6.55326e-05, Linf 0.00674987, total time[s] 0.100351 +Converged at iteration 35, L1 6.48185e-05, Linf 0.00604119, total time[s] 0.093049 +Converged at iteration 24, L1 9.84818e-05, Linf 0.00369381, total time[s] 0.064135 +Converged at iteration 29, L1 6.31353e-05, Linf 0.00575507, total time[s] 0.0767 +Converged at iteration 21, L1 8.91512e-05, Linf 0.0029993, total time[s] 0.0572 +Converged at iteration 21, L1 7.39592e-05, Linf 0.00584994, total time[s] 0.057539 +Converged at iteration 20, L1 9.31986e-05, Linf 0.00919565, total time[s] 0.05587 +Converged at iteration 21, L1 8.57005e-05, Linf 0.00846678, total time[s] 0.056305 +Converged at iteration 25, L1 5.14856e-05, Linf 0.00402941, total time[s] 0.066475 +Converged at iteration 22, L1 6.71205e-05, Linf 0.0036451, total time[s] 0.060622 +Converged at iteration 19, L1 5.57326e-05, Linf 0.00175355, total time[s] 0.052558 +Converged at iteration 19, L1 6.08013e-05, Linf 0.00830356, total time[s] 0.05596 +Converged at iteration 30, L1 9.32785e-05, Linf 0.00427303, total time[s] 0.078893 +Converged at iteration 19, L1 9.76912e-05, Linf 0.00846217, total time[s] 0.052774 +Converged at iteration 23, L1 6.02293e-05, Linf 0.00831934, total time[s] 0.062877 +Converged at iteration 27, L1 7.22028e-05, Linf 0.00346942, total time[s] 0.072136 +Converged at iteration 24, L1 5.6338e-05, Linf 0.00177765, total time[s] 0.071279 +Converged at iteration 21, L1 5.94391e-05, Linf 0.00213501, total time[s] 0.056421 +Converged at iteration 23, L1 6.87863e-05, Linf 0.00538269, total time[s] 0.061449 +Converged at iteration 25, L1 6.72689e-05, Linf 0.00525729, total time[s] 0.066785 +Converged at iteration 26, L1 8.29605e-05, Linf 0.00427218, total time[s] 0.069447 +Converged at iteration 30, L1 6.597e-05, Linf 0.00471423, total time[s] 0.079226 +Converged at iteration 28, L1 7.21646e-05, Linf 0.00231709, total time[s] 0.073574 +Converged at iteration 29, L1 8.90015e-05, Linf 0.00396762, total time[s] 0.076592 +Converged at iteration 30, L1 6.41757e-05, Linf 0.00195496, total time[s] 0.079 +Converged at iteration 28, L1 8.99831e-05, Linf 0.00246142, total time[s] 0.076174 +Converged at iteration 32, L1 7.5337e-05, Linf 0.00660917, total time[s] 0.083216 +Converged at iteration 24, L1 9.83808e-05, Linf 0.00275837, total time[s] 0.064776 +Converged at iteration 25, L1 8.91597e-05, Linf 0.00518466, total time[s] 0.067809 +Converged at iteration 24, L1 8.25126e-05, Linf 0.00423293, total time[s] 0.067306 +Converged at iteration 39, L1 6.1154e-05, Linf 0.00684091, total time[s] 0.121114 +Converged at iteration 35, L1 6.35145e-05, Linf 0.00629387, total time[s] 0.089747 +Converged at iteration 24, L1 9.42292e-05, Linf 0.00386416, total time[s] 0.065399 +Converged at iteration 29, L1 5.98769e-05, Linf 0.00576265, total time[s] 0.076706 +Converged at iteration 21, L1 9.58896e-05, Linf 0.00353973, total time[s] 0.05899 +Converged at iteration 21, L1 7.77246e-05, Linf 0.00634854, total time[s] 0.059448 +Converged at iteration 20, L1 9.67034e-05, Linf 0.009664, total time[s] 0.059117 +Converged at iteration 21, L1 8.32191e-05, Linf 0.0078417, total time[s] 0.080593 +Converged at iteration 25, L1 4.72722e-05, Linf 0.0034714, total time[s] 0.080875 +Converged at iteration 22, L1 6.26449e-05, Linf 0.00351758, total time[s] 0.067837 +Converged at iteration 19, L1 5.94979e-05, Linf 0.0015213, total time[s] 0.055839 +Converged at iteration 19, L1 6.42809e-05, Linf 0.00864723, total time[s] 0.056197 +Converged at iteration 30, L1 9.66011e-05, Linf 0.00448041, total time[s] 0.085219 +Converged at iteration 19, L1 9.95704e-05, Linf 0.00839247, total time[s] 0.056118 +Converged at iteration 23, L1 6.0868e-05, Linf 0.00818884, total time[s] 0.068237 +Converged at iteration 27, L1 6.96771e-05, Linf 0.00347965, total time[s] 0.070706 +Converged at iteration 24, L1 5.86391e-05, Linf 0.00189022, total time[s] 0.073994 +Converged at iteration 21, L1 6.71878e-05, Linf 0.00241842, total time[s] 0.065927 +Converged at iteration 23, L1 7.04013e-05, Linf 0.00536448, total time[s] 0.060781 +Converged at iteration 25, L1 6.7711e-05, Linf 0.00517121, total time[s] 0.066339 +Converged at iteration 26, L1 8.06003e-05, Linf 0.00398487, total time[s] 0.069553 +Converged at iteration 30, L1 6.6797e-05, Linf 0.00465455, total time[s] 0.077144 +Converged at iteration 28, L1 7.30046e-05, Linf 0.00258366, total time[s] 0.072221 +Converged at iteration 29, L1 9.07088e-05, Linf 0.00405552, total time[s] 0.074126 +Converged at iteration 30, L1 6.29196e-05, Linf 0.00190918, total time[s] 0.082851 +Converged at iteration 28, L1 8.8208e-05, Linf 0.00230178, total time[s] 0.136948 +Converged at iteration 32, L1 7.28113e-05, Linf 0.00671726, total time[s] 0.121737 +Converged at iteration 25, L1 5.97151e-05, Linf 0.0019114, total time[s] 0.067432 +Converged at iteration 25, L1 9.12029e-05, Linf 0.00479087, total time[s] 0.064739 +Converged at iteration 24, L1 8.20374e-05, Linf 0.00414747, total time[s] 0.061879 +Converged at iteration 39, L1 5.80865e-05, Linf 0.00693633, total time[s] 0.097975 +Converged at iteration 35, L1 6.33774e-05, Linf 0.00647665, total time[s] 0.139968 +Converged at iteration 24, L1 9.09092e-05, Linf 0.00397694, total time[s] 0.08443 +Converged at iteration 29, L1 5.76575e-05, Linf 0.00578751, total time[s] 0.078506 +Converged at iteration 22, L1 5.51866e-05, Linf 0.00244962, total time[s] 0.059411 +Converged at iteration 21, L1 8.13873e-05, Linf 0.00656321, total time[s] 0.057247 +Converged at iteration 21, L1 4.40303e-05, Linf 0.00740426, total time[s] 0.0618 +Converged at iteration 21, L1 8.1962e-05, Linf 0.00752084, total time[s] 0.056509 +Converged at iteration 24, L1 9.56931e-05, Linf 0.00602945, total time[s] 0.064562 +Converged at iteration 22, L1 5.73038e-05, Linf 0.003204, total time[s] 0.059563 +Converged at iteration 19, L1 6.3447e-05, Linf 0.00165007, total time[s] 0.051535 +Converged at iteration 19, L1 6.7772e-05, Linf 0.00907362, total time[s] 0.093959 +Converged at iteration 30, L1 9.89686e-05, Linf 0.00471558, total time[s] 0.134183 +Converged at iteration 20, L1 5.875e-05, Linf 0.00442354, total time[s] 0.05448 +Converged at iteration 23, L1 6.17301e-05, Linf 0.0080461, total time[s] 0.06047 +Converged at iteration 27, L1 6.39177e-05, Linf 0.0032623, total time[s] 0.091899 +Converged at iteration 24, L1 6.10662e-05, Linf 0.00200259, total time[s] 0.09758 +Converged at iteration 21, L1 7.40831e-05, Linf 0.00269675, total time[s] 0.058845 +Converged at iteration 23, L1 7.15359e-05, Linf 0.00534546, total time[s] 0.058256 +Converged at iteration 25, L1 6.82431e-05, Linf 0.0050649, total time[s] 0.106208 +Converged at iteration 26, L1 7.70404e-05, Linf 0.00383435, total time[s] 0.147583 +Converged at iteration 30, L1 6.7964e-05, Linf 0.00449797, total time[s] 0.091066 +Converged at iteration 28, L1 7.46077e-05, Linf 0.00385034, total time[s] 0.081919 +Converged at iteration 29, L1 9.01048e-05, Linf 0.00424189, total time[s] 0.090513 +Converged at iteration 30, L1 6.13689e-05, Linf 0.00184438, total time[s] 0.082116 +Converged at iteration 28, L1 8.84343e-05, Linf 0.00207446, total time[s] 0.070545 +Converged at iteration 32, L1 7.0425e-05, Linf 0.00686073, total time[s] 0.081627 +Converged at iteration 25, L1 6.19461e-05, Linf 0.00205888, total time[s] 0.066228 +Converged at iteration 25, L1 9.301e-05, Linf 0.00499766, total time[s] 0.072889 +Converged at iteration 24, L1 8.23088e-05, Linf 0.00403153, total time[s] 0.063215 +Converged at iteration 39, L1 5.29548e-05, Linf 0.0071323, total time[s] 0.101902 +Converged at iteration 35, L1 6.35539e-05, Linf 0.00680121, total time[s] 0.087602 +Converged at iteration 24, L1 8.81923e-05, Linf 0.00393319, total time[s] 0.061555 +Converged at iteration 29, L1 5.54604e-05, Linf 0.00584118, total time[s] 0.073464 +Converged at iteration 22, L1 5.86004e-05, Linf 0.00280103, total time[s] 0.057484 +Converged at iteration 21, L1 8.49352e-05, Linf 0.00681621, total time[s] 0.054936 +Converged at iteration 21, L1 4.53429e-05, Linf 0.00772183, total time[s] 0.055124 +Converged at iteration 21, L1 8.15935e-05, Linf 0.00710316, total time[s] 0.055998 +Converged at iteration 24, L1 9.0289e-05, Linf 0.00541999, total time[s] 0.062305 +Converged at iteration 21, L1 9.95065e-05, Linf 0.00397213, total time[s] 0.054321 +Converged at iteration 19, L1 6.80285e-05, Linf 0.00177867, total time[s] 0.050038 +Converged at iteration 19, L1 7.12304e-05, Linf 0.00932773, total time[s] 0.050473 +Converged at iteration 31, L1 5.49231e-05, Linf 0.00369764, total time[s] 0.078472 +Converged at iteration 20, L1 5.99321e-05, Linf 0.00440935, total time[s] 0.052437 +Converged at iteration 23, L1 5.97707e-05, Linf 0.00788723, total time[s] 0.077195 +Converged at iteration 27, L1 6.14676e-05, Linf 0.00304811, total time[s] 0.096189 +Converged at iteration 24, L1 6.3556e-05, Linf 0.00212344, total time[s] 0.092288 +Converged at iteration 21, L1 7.94309e-05, Linf 0.00298184, total time[s] 0.057779 +Converged at iteration 23, L1 7.26371e-05, Linf 0.00531816, total time[s] 0.066575 +Converged at iteration 25, L1 6.83167e-05, Linf 0.00500792, total time[s] 0.067418 +Converged at iteration 26, L1 7.37305e-05, Linf 0.00377629, total time[s] 0.06876 +Converged at iteration 30, L1 6.91817e-05, Linf 0.00447656, total time[s] 0.078387 +Converged at iteration 28, L1 7.67802e-05, Linf 0.00387536, total time[s] 0.075418 +Converged at iteration 29, L1 9.075e-05, Linf 0.00427079, total time[s] 0.074266 +Converged at iteration 30, L1 6.03284e-05, Linf 0.00176978, total time[s] 0.077198 +Converged at iteration 28, L1 9.15987e-05, Linf 0.00184858, total time[s] 0.07287 +Converged at iteration 32, L1 6.88852e-05, Linf 0.00701819, total time[s] 0.082258 +Converged at iteration 25, L1 6.38028e-05, Linf 0.00225785, total time[s] 0.076549 +Converged at iteration 25, L1 9.50851e-05, Linf 0.00511585, total time[s] 0.297261 +Converged at iteration 24, L1 8.27575e-05, Linf 0.00395824, total time[s] 0.122837 +Converged at iteration 38, L1 9.7295e-05, Linf 0.0087131, total time[s] 0.098825 +Converged at iteration 35, L1 6.38586e-05, Linf 0.00705616, total time[s] 0.099374 +Converged at iteration 24, L1 8.58931e-05, Linf 0.00391366, total time[s] 0.06435 +Converged at iteration 29, L1 5.34444e-05, Linf 0.00588658, total time[s] 0.074725 +Converged at iteration 22, L1 6.1873e-05, Linf 0.00321278, total time[s] 0.05702 +Converged at iteration 21, L1 8.83846e-05, Linf 0.00703996, total time[s] 0.054997 +Converged at iteration 21, L1 4.67901e-05, Linf 0.00804011, total time[s] 0.054787 +Converged at iteration 21, L1 8.17809e-05, Linf 0.00675671, total time[s] 0.054764 +Converged at iteration 24, L1 8.60922e-05, Linf 0.00491206, total time[s] 0.062162 +Converged at iteration 21, L1 9.17721e-05, Linf 0.00380545, total time[s] 0.054429 +Converged at iteration 19, L1 7.21459e-05, Linf 0.00191028, total time[s] 0.050414 +Converged at iteration 19, L1 7.4529e-05, Linf 0.00966182, total time[s] 0.05008 +Converged at iteration 31, L1 5.71652e-05, Linf 0.00381461, total time[s] 0.078376 +Converged at iteration 20, L1 6.03629e-05, Linf 0.00434367, total time[s] 0.05252 +Converged at iteration 23, L1 6.03416e-05, Linf 0.00780309, total time[s] 0.0606 +Converged at iteration 27, L1 6.02675e-05, Linf 0.00297102, total time[s] 0.068705 +Converged at iteration 24, L1 6.63577e-05, Linf 0.00223156, total time[s] 0.061484 +Converged at iteration 21, L1 8.48565e-05, Linf 0.0032438, total time[s] 0.054528 +Converged at iteration 23, L1 7.393e-05, Linf 0.00560916, total time[s] 0.061201 +Converged at iteration 25, L1 6.84244e-05, Linf 0.00496958, total time[s] 0.064328 +Converged at iteration 26, L1 7.10564e-05, Linf 0.00373333, total time[s] 0.06646 +Converged at iteration 30, L1 7.06043e-05, Linf 0.00448782, total time[s] 0.075635 +Converged at iteration 28, L1 7.80272e-05, Linf 0.00365625, total time[s] 0.071517 +Converged at iteration 29, L1 9.21183e-05, Linf 0.00426545, total time[s] 0.073097 +Converged at iteration 30, L1 5.96976e-05, Linf 0.0017603, total time[s] 0.075378 +Converged at iteration 28, L1 9.60633e-05, Linf 0.00167373, total time[s] 0.07095 +Converged at iteration 32, L1 6.79578e-05, Linf 0.00718528, total time[s] 0.084174 +Converged at iteration 25, L1 6.5379e-05, Linf 0.00245862, total time[s] 0.066 +Converged at iteration 25, L1 9.65142e-05, Linf 0.00542574, total time[s] 0.064765 +Converged at iteration 24, L1 8.36335e-05, Linf 0.00392576, total time[s] 0.062442 +Converged at iteration 38, L1 9.46619e-05, Linf 0.0088738, total time[s] 0.107855 +Converged at iteration 35, L1 6.39408e-05, Linf 0.00731462, total time[s] 0.088875 +Converged at iteration 24, L1 8.41147e-05, Linf 0.00391329, total time[s] 0.062392 +Converged at iteration 29, L1 5.14776e-05, Linf 0.0059017, total time[s] 0.073054 +Converged at iteration 22, L1 6.53082e-05, Linf 0.00368466, total time[s] 0.057422 +Converged at iteration 21, L1 9.18684e-05, Linf 0.00724009, total time[s] 0.056553 +Converged at iteration 21, L1 4.81034e-05, Linf 0.00835964, total time[s] 0.069824 +Converged at iteration 21, L1 8.21297e-05, Linf 0.00682536, total time[s] 0.054822 +Converged at iteration 24, L1 8.19186e-05, Linf 0.00460855, total time[s] 0.063142 +Converged at iteration 21, L1 8.4563e-05, Linf 0.00356711, total time[s] 0.054823 +Converged at iteration 19, L1 7.71288e-05, Linf 0.00203849, total time[s] 0.050352 +Converged at iteration 19, L1 7.7798e-05, Linf 0.00999175, total time[s] 0.050183 +Converged at iteration 31, L1 5.74254e-05, Linf 0.00392919, total time[s] 0.078323 +Converged at iteration 20, L1 6.18703e-05, Linf 0.00438989, total time[s] 0.054263 +Converged at iteration 23, L1 6.0826e-05, Linf 0.00740165, total time[s] 0.060503 +Converged at iteration 27, L1 5.89048e-05, Linf 0.00294614, total time[s] 0.078524 +Converged at iteration 24, L1 6.93361e-05, Linf 0.00232866, total time[s] 0.061738 +Converged at iteration 21, L1 9.09435e-05, Linf 0.00349087, total time[s] 0.060826 +Converged at iteration 23, L1 7.50941e-05, Linf 0.00551506, total time[s] 0.063675 +Converged at iteration 25, L1 6.841e-05, Linf 0.00489759, total time[s] 0.063916 +Converged at iteration 26, L1 6.81963e-05, Linf 0.00371766, total time[s] 0.066295 +Converged at iteration 30, L1 7.25044e-05, Linf 0.00457536, total time[s] 0.077881 +Converged at iteration 28, L1 7.93645e-05, Linf 0.00342829, total time[s] 0.070924 +Converged at iteration 29, L1 9.30937e-05, Linf 0.00435662, total time[s] 0.073181 +Converged at iteration 30, L1 5.94146e-05, Linf 0.00181943, total time[s] 0.076735 +Converged at iteration 29, L1 5.32054e-05, Linf 0.00109358, total time[s] 0.073451 +Converged at iteration 32, L1 6.73393e-05, Linf 0.00746534, total time[s] 0.080364 +Converged at iteration 25, L1 6.61023e-05, Linf 0.0026682, total time[s] 0.06419 +Converged at iteration 25, L1 9.8145e-05, Linf 0.00574971, total time[s] 0.064292 +Converged at iteration 24, L1 8.41273e-05, Linf 0.00390381, total time[s] 0.061792 +Converged at iteration 38, L1 9.25508e-05, Linf 0.00905942, total time[s] 0.102722 +Converged at iteration 35, L1 6.43368e-05, Linf 0.00758163, total time[s] 0.141163 +Converged at iteration 24, L1 8.26171e-05, Linf 0.00391272, total time[s] 0.067153 +Converged at iteration 28, L1 9.85039e-05, Linf 0.00723683, total time[s] 0.071697 +Converged at iteration 22, L1 6.87284e-05, Linf 0.00421111, total time[s] 0.057299 +Converged at iteration 21, L1 9.51038e-05, Linf 0.00725419, total time[s] 0.054868 +Converged at iteration 21, L1 4.96961e-05, Linf 0.00867955, total time[s] 0.054903 +Converged at iteration 21, L1 8.28955e-05, Linf 0.00681758, total time[s] 0.055331 +Converged at iteration 24, L1 7.92349e-05, Linf 0.00446199, total time[s] 0.061674 +Converged at iteration 21, L1 7.75132e-05, Linf 0.00334815, total time[s] 0.054968 +Converged at iteration 19, L1 8.26972e-05, Linf 0.00216238, total time[s] 0.050435 +Converged at iteration 19, L1 8.0972e-05, Linf 0.0103164, total time[s] 0.050582 +Converged at iteration 31, L1 5.86169e-05, Linf 0.00407234, total time[s] 0.079816 +Converged at iteration 20, L1 6.24468e-05, Linf 0.00439241, total time[s] 0.056132 +Converged at iteration 23, L1 6.10503e-05, Linf 0.00739389, total time[s] 0.05943 +Converged at iteration 27, L1 5.83253e-05, Linf 0.00294321, total time[s] 0.069026 +Converged at iteration 24, L1 7.24098e-05, Linf 0.0024498, total time[s] 0.063125 +Converged at iteration 21, L1 9.73041e-05, Linf 0.00378996, total time[s] 0.054998 +Converged at iteration 23, L1 7.60982e-05, Linf 0.00521447, total time[s] 0.060287 +Converged at iteration 25, L1 6.85501e-05, Linf 0.00494115, total time[s] 0.064353 +Converged at iteration 26, L1 6.52516e-05, Linf 0.00367623, total time[s] 0.066311 +Converged at iteration 30, L1 7.40104e-05, Linf 0.00474128, total time[s] 0.075564 +Converged at iteration 28, L1 8.11548e-05, Linf 0.00361262, total time[s] 0.071122 +Converged at iteration 29, L1 9.50918e-05, Linf 0.00446357, total time[s] 0.078402 +Converged at iteration 30, L1 5.88945e-05, Linf 0.00187369, total time[s] 0.078631 +Converged at iteration 29, L1 5.61697e-05, Linf 0.00121414, total time[s] 0.073668 +Converged at iteration 32, L1 6.80659e-05, Linf 0.00753498, total time[s] 0.088889 +Converged at iteration 25, L1 6.71682e-05, Linf 0.00286341, total time[s] 0.06466 +Converged at iteration 25, L1 9.96003e-05, Linf 0.00609636, total time[s] 0.064788 +Converged at iteration 24, L1 8.53052e-05, Linf 0.00388189, total time[s] 0.061944 +Converged at iteration 38, L1 9.15875e-05, Linf 0.00925773, total time[s] 0.135134 +Converged at iteration 35, L1 6.48359e-05, Linf 0.00785629, total time[s] 0.097418 +Converged at iteration 24, L1 8.14233e-05, Linf 0.0039372, total time[s] 0.062379 +Converged at iteration 28, L1 9.61741e-05, Linf 0.00727273, total time[s] 0.071519 +Converged at iteration 22, L1 7.23866e-05, Linf 0.00451688, total time[s] 0.057712 +Converged at iteration 21, L1 9.80905e-05, Linf 0.00725717, total time[s] 0.055634 +Converged at iteration 21, L1 5.09726e-05, Linf 0.00900094, total time[s] 0.056037 +Converged at iteration 21, L1 8.40471e-05, Linf 0.00678852, total time[s] 0.056799 +Converged at iteration 24, L1 7.63768e-05, Linf 0.00442334, total time[s] 0.062393 +Converged at iteration 21, L1 7.13309e-05, Linf 0.00310054, total time[s] 0.056985 +Converged at iteration 19, L1 8.8012e-05, Linf 0.00228293, total time[s] 0.051237 +Converged at iteration 19, L1 8.37352e-05, Linf 0.0106364, total time[s] 0.051097 +Converged at iteration 31, L1 5.95134e-05, Linf 0.00413358, total time[s] 0.078664 +Converged at iteration 20, L1 6.28856e-05, Linf 0.00440919, total time[s] 0.053327 +Converged at iteration 23, L1 6.11633e-05, Linf 0.0072431, total time[s] 0.05975 +Converged at iteration 27, L1 5.63189e-05, Linf 0.00298785, total time[s] 0.069334 +Converged at iteration 24, L1 7.5689e-05, Linf 0.00255633, total time[s] 0.06207 +Converged at iteration 22, L1 5.50995e-05, Linf 0.00253567, total time[s] 0.058042 +Converged at iteration 23, L1 7.72035e-05, Linf 0.0051739, total time[s] 0.059424 +Converged at iteration 25, L1 6.88086e-05, Linf 0.00491675, total time[s] 0.064617 +Converged at iteration 25, L1 9.93741e-05, Linf 0.00479266, total time[s] 0.070431 +Converged at iteration 30, L1 7.52198e-05, Linf 0.00491507, total time[s] 0.099343 +Converged at iteration 28, L1 8.27135e-05, Linf 0.00359355, total time[s] 0.110592 +Converged at iteration 29, L1 9.53355e-05, Linf 0.00460243, total time[s] 0.074633 +Converged at iteration 30, L1 5.86989e-05, Linf 0.00189891, total time[s] 0.085413 +Converged at iteration 29, L1 5.93412e-05, Linf 0.00155832, total time[s] 0.096524 +Converged at iteration 32, L1 6.85112e-05, Linf 0.0077244, total time[s] 0.080117 +Converged at iteration 25, L1 6.74056e-05, Linf 0.00303708, total time[s] 0.066186 +Converged at iteration 26, L1 5.11675e-05, Linf 0.00341841, total time[s] 0.074759 +Converged at iteration 24, L1 8.61169e-05, Linf 0.00388646, total time[s] 0.062863 +Converged at iteration 38, L1 9.00658e-05, Linf 0.00934147, total time[s] 0.098871 +Converged at iteration 35, L1 6.62026e-05, Linf 0.0081386, total time[s] 0.087626 +Converged at iteration 24, L1 8.05656e-05, Linf 0.00410317, total time[s] 0.062258 +Converged at iteration 28, L1 9.40224e-05, Linf 0.00732768, total time[s] 0.071196 +Converged at iteration 22, L1 7.59138e-05, Linf 0.00506568, total time[s] 0.058178 +Converged at iteration 22, L1 4.97983e-05, Linf 0.00576206, total time[s] 0.058013 +Converged at iteration 21, L1 5.23453e-05, Linf 0.00932936, total time[s] 0.056157 +Converged at iteration 21, L1 8.55455e-05, Linf 0.00678073, total time[s] 0.056256 +Converged at iteration 24, L1 7.4603e-05, Linf 0.00436667, total time[s] 0.062809 +Converged at iteration 21, L1 6.63916e-05, Linf 0.00285135, total time[s] 0.0556 +Converged at iteration 19, L1 9.15617e-05, Linf 0.00240089, total time[s] 0.051246 +Converged at iteration 19, L1 8.68816e-05, Linf 0.0109483, total time[s] 0.052233 +Converged at iteration 31, L1 6.12432e-05, Linf 0.00419961, total time[s] 0.078398 +Converged at iteration 20, L1 6.33644e-05, Linf 0.00444257, total time[s] 0.052913 +Converged at iteration 23, L1 6.13817e-05, Linf 0.00713363, total time[s] 0.060099 +Converged at iteration 27, L1 5.42707e-05, Linf 0.00302996, total time[s] 0.069814 +Converged at iteration 24, L1 7.87749e-05, Linf 0.00266111, total time[s] 0.063503 +Converged at iteration 22, L1 5.82498e-05, Linf 0.00269618, total time[s] 0.057518 +Converged at iteration 23, L1 7.82138e-05, Linf 0.00513402, total time[s] 0.070482 +Converged at iteration 25, L1 6.90967e-05, Linf 0.00487254, total time[s] 0.066109 +Converged at iteration 25, L1 9.46709e-05, Linf 0.00465763, total time[s] 0.065503 +Converged at iteration 30, L1 7.66376e-05, Linf 0.005056, total time[s] 0.07867 +Converged at iteration 28, L1 8.43602e-05, Linf 0.00321111, total time[s] 0.077516 +Converged at iteration 29, L1 9.67353e-05, Linf 0.00472106, total time[s] 0.084569 +Converged at iteration 30, L1 5.86335e-05, Linf 0.00198187, total time[s] 0.102643 +Converged at iteration 29, L1 6.29943e-05, Linf 0.00189262, total time[s] 0.088287 +Converged at iteration 32, L1 6.77485e-05, Linf 0.00791842, total time[s] 0.082007 +Converged at iteration 25, L1 6.75141e-05, Linf 0.00319117, total time[s] 0.065878 +Converged at iteration 26, L1 5.13793e-05, Linf 0.00353625, total time[s] 0.06802 +Converged at iteration 24, L1 8.75163e-05, Linf 0.003902, total time[s] 0.063267 +Converged at iteration 38, L1 8.87582e-05, Linf 0.00965202, total time[s] 0.103402 +Converged at iteration 35, L1 6.6766e-05, Linf 0.00842789, total time[s] 0.089539 +Converged at iteration 24, L1 7.98331e-05, Linf 0.00429613, total time[s] 0.064269 +Converged at iteration 28, L1 9.18205e-05, Linf 0.00734218, total time[s] 0.074045 +Converged at iteration 22, L1 7.96011e-05, Linf 0.00563288, total time[s] 0.058777 +Converged at iteration 22, L1 5.1027e-05, Linf 0.00589191, total time[s] 0.058715 +Converged at iteration 21, L1 5.36515e-05, Linf 0.00965244, total time[s] 0.055867 +Converged at iteration 21, L1 8.72838e-05, Linf 0.00677257, total time[s] 0.057465 +Converged at iteration 24, L1 7.35043e-05, Linf 0.00431661, total time[s] 0.063853 +Converged at iteration 21, L1 6.2898e-05, Linf 0.00256261, total time[s] 0.07486 +Converged at iteration 19, L1 9.60308e-05, Linf 0.00251623, total time[s] 0.059852 +Converged at iteration 19, L1 9.00934e-05, Linf 0.0113718, total time[s] 0.059799 +Converged at iteration 31, L1 6.21337e-05, Linf 0.00436364, total time[s] 0.078239 +Converged at iteration 20, L1 6.31034e-05, Linf 0.00448856, total time[s] 0.052479 +Converged at iteration 23, L1 6.13539e-05, Linf 0.00699523, total time[s] 0.059648 +Converged at iteration 27, L1 5.35712e-05, Linf 0.00306934, total time[s] 0.069242 +Converged at iteration 24, L1 8.20371e-05, Linf 0.00276423, total time[s] 0.062153 +Converged at iteration 22, L1 6.13701e-05, Linf 0.00285324, total time[s] 0.057082 +Converged at iteration 23, L1 7.89263e-05, Linf 0.00509793, total time[s] 0.05942 +Converged at iteration 25, L1 6.91519e-05, Linf 0.00478967, total time[s] 0.064201 +Converged at iteration 25, L1 9.04865e-05, Linf 0.00452282, total time[s] 0.064306 +Converged at iteration 30, L1 7.85399e-05, Linf 0.00522252, total time[s] 0.077399 +Converged at iteration 28, L1 8.62268e-05, Linf 0.00308947, total time[s] 0.071054 +Converged at iteration 29, L1 9.67127e-05, Linf 0.00481311, total time[s] 0.074311 +Converged at iteration 30, L1 5.86088e-05, Linf 0.00203453, total time[s] 0.076824 +Converged at iteration 29, L1 6.73766e-05, Linf 0.00226867, total time[s] 0.07413 +Converged at iteration 32, L1 6.7826e-05, Linf 0.00801873, total time[s] 0.079123 +Converged at iteration 25, L1 6.60483e-05, Linf 0.00332979, total time[s] 0.063429 +Converged at iteration 26, L1 5.08889e-05, Linf 0.00359872, total time[s] 0.080539 +Converged at iteration 24, L1 8.83781e-05, Linf 0.00392098, total time[s] 0.069454 +Converged at iteration 38, L1 8.58693e-05, Linf 0.00975166, total time[s] 0.098616 +Converged at iteration 35, L1 6.79311e-05, Linf 0.00877059, total time[s] 0.092281 +Converged at iteration 24, L1 7.96113e-05, Linf 0.00447292, total time[s] 0.061675 +Converged at iteration 28, L1 8.97334e-05, Linf 0.00733897, total time[s] 0.072195 +Converged at iteration 22, L1 8.31132e-05, Linf 0.00616923, total time[s] 0.057445 +Converged at iteration 22, L1 5.26244e-05, Linf 0.00607557, total time[s] 0.057299 +Converged at iteration 21, L1 5.49429e-05, Linf 0.0100207, total time[s] 0.055677 +Converged at iteration 21, L1 8.93936e-05, Linf 0.00678901, total time[s] 0.055046 +Converged at iteration 24, L1 7.24114e-05, Linf 0.00426697, total time[s] 0.062593 +Converged at iteration 21, L1 6.06224e-05, Linf 0.00225661, total time[s] 0.055205 +Converged at iteration 19, L1 9.95249e-05, Linf 0.00262887, total time[s] 0.04972 +Converged at iteration 19, L1 9.30394e-05, Linf 0.0116778, total time[s] 0.057525 +Converged at iteration 31, L1 6.34556e-05, Linf 0.00437376, total time[s] 0.112468 +Converged at iteration 20, L1 6.40701e-05, Linf 0.00449858, total time[s] 0.058337 +Converged at iteration 23, L1 6.17174e-05, Linf 0.00762723, total time[s] 0.070863 +Converged at iteration 27, L1 5.25472e-05, Linf 0.00310683, total time[s] 0.075155 +Converged at iteration 24, L1 8.54858e-05, Linf 0.00286548, total time[s] 0.066221 +Converged at iteration 22, L1 6.4097e-05, Linf 0.00301002, total time[s] 0.062716 +Converged at iteration 23, L1 8.01719e-05, Linf 0.00506286, total time[s] 0.062647 +Converged at iteration 25, L1 6.90167e-05, Linf 0.00474474, total time[s] 0.066883 +Converged at iteration 25, L1 8.63707e-05, Linf 0.00439489, total time[s] 0.066886 +Converged at iteration 30, L1 8.03724e-05, Linf 0.0054031, total time[s] 0.079187 +Converged at iteration 28, L1 8.84562e-05, Linf 0.00298458, total time[s] 0.076003 +Converged at iteration 29, L1 9.74583e-05, Linf 0.00490926, total time[s] 0.108917 +Converged at iteration 30, L1 5.85848e-05, Linf 0.00208201, total time[s] 0.086025 +Converged at iteration 29, L1 7.20055e-05, Linf 0.00263161, total time[s] 0.081692 +Converged at iteration 32, L1 6.845e-05, Linf 0.00846005, total time[s] 0.087413 +Converged at iteration 25, L1 6.6212e-05, Linf 0.00345019, total time[s] 0.071737 +Converged at iteration 26, L1 5.07296e-05, Linf 0.00366584, total time[s] 0.067388 +Converged at iteration 24, L1 8.96474e-05, Linf 0.00391827, total time[s] 0.068901 +Converged at iteration 38, L1 8.48326e-05, Linf 0.0100804, total time[s] 0.099605 +Converged at iteration 35, L1 6.82631e-05, Linf 0.00902585, total time[s] 0.11466 +Converged at iteration 24, L1 7.93903e-05, Linf 0.00469996, total time[s] 0.142747 +Converged at iteration 28, L1 8.75329e-05, Linf 0.00737414, total time[s] 0.0811 +Converged at iteration 22, L1 8.75942e-05, Linf 0.00668333, total time[s] 0.067977 +Converged at iteration 22, L1 5.40943e-05, Linf 0.00617092, total time[s] 0.070221 +Converged at iteration 21, L1 5.62941e-05, Linf 0.0103168, total time[s] 0.087257 +Converged at iteration 21, L1 9.15893e-05, Linf 0.00683703, total time[s] 0.085778 +Converged at iteration 24, L1 6.98671e-05, Linf 0.00417362, total time[s] 0.107583 +Converged at iteration 21, L1 5.95774e-05, Linf 0.0020312, total time[s] 0.074397 +Converged at iteration 20, L1 5.66022e-05, Linf 0.00185833, total time[s] 0.08837 +Converged at iteration 19, L1 9.59728e-05, Linf 0.0117575, total time[s] 0.052096 +Converged at iteration 31, L1 6.47167e-05, Linf 0.00449341, total time[s] 0.081233 +Converged at iteration 20, L1 6.4388e-05, Linf 0.00455926, total time[s] 0.052326 +Converged at iteration 23, L1 6.14586e-05, Linf 0.00671607, total time[s] 0.065367 +Converged at iteration 27, L1 5.16758e-05, Linf 0.00313696, total time[s] 0.075192 +Converged at iteration 24, L1 8.93202e-05, Linf 0.00297569, total time[s] 0.076814 +Converged at iteration 22, L1 6.6625e-05, Linf 0.00316304, total time[s] 0.065514 +Converged at iteration 23, L1 8.05553e-05, Linf 0.00503657, total time[s] 0.061346 +Converged at iteration 25, L1 6.87242e-05, Linf 0.00483799, total time[s] 0.067622 +Converged at iteration 25, L1 8.17886e-05, Linf 0.0044223, total time[s] 0.065716 +Converged at iteration 30, L1 8.22076e-05, Linf 0.00554999, total time[s] 0.078772 +Converged at iteration 28, L1 9.03947e-05, Linf 0.00296243, total time[s] 0.07439 +Converged at iteration 29, L1 9.76495e-05, Linf 0.00501261, total time[s] 0.080815 +Converged at iteration 30, L1 5.85494e-05, Linf 0.002129, total time[s] 0.08047 +Converged at iteration 29, L1 7.70696e-05, Linf 0.00273637, total time[s] 0.075328 +Converged at iteration 32, L1 6.92477e-05, Linf 0.00854495, total time[s] 0.081989 +Converged at iteration 25, L1 6.40598e-05, Linf 0.00354723, total time[s] 0.068973 +Converged at iteration 26, L1 5.05182e-05, Linf 0.00357674, total time[s] 0.068978 +Converged at iteration 24, L1 9.09145e-05, Linf 0.00402097, total time[s] 0.063135 +Converged at iteration 38, L1 8.37487e-05, Linf 0.0102956, total time[s] 0.099825 +Converged at iteration 35, L1 6.94783e-05, Linf 0.0093437, total time[s] 0.096128 +Converged at iteration 24, L1 7.94666e-05, Linf 0.0049063, total time[s] 0.067099 +Converged at iteration 28, L1 8.55058e-05, Linf 0.00741696, total time[s] 0.07344 +Converged at iteration 22, L1 8.97464e-05, Linf 0.00717364, total time[s] 0.059029 +Converged at iteration 22, L1 5.48581e-05, Linf 0.00617227, total time[s] 0.059016 +Converged at iteration 21, L1 5.75053e-05, Linf 0.0106528, total time[s] 0.06119 +Converged at iteration 21, L1 9.35686e-05, Linf 0.00688643, total time[s] 0.055487 +Converged at iteration 24, L1 6.91615e-05, Linf 0.00416475, total time[s] 0.064789 +Converged at iteration 21, L1 5.99759e-05, Linf 0.0021884, total time[s] 0.060268 +Converged at iteration 20, L1 6.05972e-05, Linf 0.00192907, total time[s] 0.053002 +Converged at iteration 19, L1 9.91697e-05, Linf 0.0121484, total time[s] 0.053731 +Converged at iteration 31, L1 6.6147e-05, Linf 0.00454518, total time[s] 0.082674 +Converged at iteration 20, L1 6.57771e-05, Linf 0.00457177, total time[s] 0.055176 +Converged at iteration 23, L1 6.21696e-05, Linf 0.00740236, total time[s] 0.066016 +Converged at iteration 27, L1 5.21098e-05, Linf 0.00316092, total time[s] 0.070594 +Converged at iteration 24, L1 9.41479e-05, Linf 0.00309707, total time[s] 0.062313 +Converged at iteration 22, L1 6.94694e-05, Linf 0.00330271, total time[s] 0.057395 +Converged at iteration 23, L1 8.16842e-05, Linf 0.00501685, total time[s] 0.060477 +Converged at iteration 25, L1 6.90484e-05, Linf 0.00464502, total time[s] 0.06524 +Converged at iteration 25, L1 7.77645e-05, Linf 0.00456911, total time[s] 0.064281 +Converged at iteration 30, L1 8.3666e-05, Linf 0.00568133, total time[s] 0.079606 +Converged at iteration 28, L1 9.21199e-05, Linf 0.00293596, total time[s] 0.075363 +Converged at iteration 29, L1 9.85202e-05, Linf 0.00508287, total time[s] 0.079865 +Converged at iteration 30, L1 5.85821e-05, Linf 0.00217467, total time[s] 0.077003 +Converged at iteration 29, L1 8.24642e-05, Linf 0.00302088, total time[s] 0.075449 +Converged at iteration 32, L1 7.01821e-05, Linf 0.0087695, total time[s] 0.083541 +Converged at iteration 25, L1 6.25126e-05, Linf 0.00362344, total time[s] 0.06596 +Converged at iteration 26, L1 5.03845e-05, Linf 0.00356164, total time[s] 0.06817 +Converged at iteration 24, L1 9.23729e-05, Linf 0.00403245, total time[s] 0.063074 +Converged at iteration 38, L1 8.28546e-05, Linf 0.0103825, total time[s] 0.103791 +Converged at iteration 35, L1 7.08033e-05, Linf 0.00980167, total time[s] 0.101558 +Converged at iteration 24, L1 7.98244e-05, Linf 0.00512489, total time[s] 0.063538 +Converged at iteration 28, L1 8.34579e-05, Linf 0.00772121, total time[s] 0.073192 +Converged at iteration 22, L1 9.27991e-05, Linf 0.0075726, total time[s] 0.058775 +Converged at iteration 22, L1 5.57499e-05, Linf 0.00616753, total time[s] 0.062105 +Converged at iteration 21, L1 5.86422e-05, Linf 0.0109915, total time[s] 0.114271 +Converged at iteration 21, L1 9.58324e-05, Linf 0.00720181, total time[s] 0.079733 +Converged at iteration 24, L1 6.9816e-05, Linf 0.00414484, total time[s] 0.071553 +Converged at iteration 21, L1 6.15168e-05, Linf 0.00235885, total time[s] 0.084318 +Converged at iteration 20, L1 6.39598e-05, Linf 0.00199874, total time[s] 0.07585 +Converged at iteration 20, L1 3.78352e-05, Linf 0.00603452, total time[s] 0.067684 +Converged at iteration 31, L1 6.72076e-05, Linf 0.00465152, total time[s] 0.087256 +Converged at iteration 20, L1 6.48995e-05, Linf 0.00458004, total time[s] 0.074221 +Converged at iteration 23, L1 6.23274e-05, Linf 0.00727286, total time[s] 0.079518 +Converged at iteration 27, L1 5.14423e-05, Linf 0.00317669, total time[s] 0.068034 +Converged at iteration 24, L1 9.80237e-05, Linf 0.00322177, total time[s] 0.061622 +Converged at iteration 22, L1 7.1192e-05, Linf 0.00346036, total time[s] 0.058174 +Converged at iteration 23, L1 8.31155e-05, Linf 0.00523443, total time[s] 0.060324 +Converged at iteration 25, L1 6.86876e-05, Linf 0.00471731, total time[s] 0.066182 +Converged at iteration 25, L1 7.31055e-05, Linf 0.00471587, total time[s] 0.064552 +Converged at iteration 30, L1 8.55169e-05, Linf 0.00575389, total time[s] 0.078834 +Converged at iteration 28, L1 9.40089e-05, Linf 0.00295761, total time[s] 0.071785 +Converged at iteration 29, L1 9.96361e-05, Linf 0.00519393, total time[s] 0.076562 +Converged at iteration 30, L1 5.90598e-05, Linf 0.00218952, total time[s] 0.078285 +Converged at iteration 29, L1 8.84843e-05, Linf 0.00362915, total time[s] 0.074519 +Converged at iteration 32, L1 7.16688e-05, Linf 0.00903138, total time[s] 0.082148 +Converged at iteration 25, L1 6.25937e-05, Linf 0.00365048, total time[s] 0.065243 +Converged at iteration 26, L1 5.02862e-05, Linf 0.00350807, total time[s] 0.067907 +Converged at iteration 24, L1 9.38952e-05, Linf 0.00405929, total time[s] 0.062308 +Converged at iteration 38, L1 8.40173e-05, Linf 0.0107651, total time[s] 0.097631 +Converged at iteration 35, L1 7.21999e-05, Linf 0.0100368, total time[s] 0.140464 +Converged at iteration 24, L1 8.03351e-05, Linf 0.00533197, total time[s] 0.075181 +Converged at iteration 28, L1 8.132e-05, Linf 0.00766416, total time[s] 0.075984 +Converged at iteration 22, L1 9.58949e-05, Linf 0.00797142, total time[s] 0.057343 +Converged at iteration 22, L1 5.66352e-05, Linf 0.00616639, total time[s] 0.05932 +Converged at iteration 21, L1 5.98553e-05, Linf 0.0113324, total time[s] 0.057617 +Converged at iteration 21, L1 9.83964e-05, Linf 0.00755284, total time[s] 0.066486 +Converged at iteration 24, L1 6.89366e-05, Linf 0.00414177, total time[s] 0.075833 +Converged at iteration 21, L1 6.45811e-05, Linf 0.00255301, total time[s] 0.058309 +Converged at iteration 20, L1 6.67967e-05, Linf 0.00206762, total time[s] 0.057233 +Converged at iteration 20, L1 3.85932e-05, Linf 0.00610902, total time[s] 0.059353 +Converged at iteration 31, L1 6.83988e-05, Linf 0.00469896, total time[s] 0.083292 +Converged at iteration 20, L1 6.52123e-05, Linf 0.00459464, total time[s] 0.055006 +Converged at iteration 23, L1 6.21431e-05, Linf 0.00673983, total time[s] 0.060476 +Converged at iteration 27, L1 5.05593e-05, Linf 0.00317824, total time[s] 0.07044 +Converged at iteration 25, L1 5.61166e-05, Linf 0.00230575, total time[s] 0.069595 +Converged at iteration 22, L1 7.31121e-05, Linf 0.00360523, total time[s] 0.067768 +Converged at iteration 23, L1 8.34724e-05, Linf 0.004995, total time[s] 0.06374 +Converged at iteration 25, L1 6.83077e-05, Linf 0.00456675, total time[s] 0.066706 +Converged at iteration 25, L1 6.91556e-05, Linf 0.00451149, total time[s] 0.067528 +Converged at iteration 30, L1 8.76892e-05, Linf 0.005889, total time[s] 0.078001 +Converged at iteration 28, L1 9.56675e-05, Linf 0.00297341, total time[s] 0.072588 +Converged at iteration 29, L1 9.98355e-05, Linf 0.0053269, total time[s] 0.075636 +Converged at iteration 30, L1 5.87272e-05, Linf 0.0022616, total time[s] 0.078029 +Converged at iteration 29, L1 9.44717e-05, Linf 0.004236, total time[s] 0.075859 +Converged at iteration 32, L1 7.25429e-05, Linf 0.00912365, total time[s] 0.082645 +Converged at iteration 25, L1 5.87979e-05, Linf 0.00370806, total time[s] 0.066402 +Converged at iteration 26, L1 4.99587e-05, Linf 0.00347315, total time[s] 0.068138 +Converged at iteration 24, L1 9.55005e-05, Linf 0.0042571, total time[s] 0.064361 +Converged at iteration 38, L1 8.35589e-05, Linf 0.0109427, total time[s] 0.103757 +Converged at iteration 35, L1 7.34163e-05, Linf 0.0103145, total time[s] 0.104756 +Converged at iteration 24, L1 8.05647e-05, Linf 0.00559462, total time[s] 0.069195 +Converged at iteration 28, L1 7.91661e-05, Linf 0.00781171, total time[s] 0.078937 +Converged at iteration 22, L1 9.85591e-05, Linf 0.00837906, total time[s] 0.059748 +Converged at iteration 22, L1 5.72803e-05, Linf 0.0061772, total time[s] 0.059596 +Converged at iteration 21, L1 6.07855e-05, Linf 0.0116767, total time[s] 0.056589 +Converged at iteration 22, L1 3.11532e-05, Linf 0.00316822, total time[s] 0.063821 +Converged at iteration 24, L1 6.85571e-05, Linf 0.00412185, total time[s] 0.0679 +Converged at iteration 21, L1 6.87012e-05, Linf 0.0027536, total time[s] 0.055604 +Converged at iteration 20, L1 6.80206e-05, Linf 0.00213539, total time[s] 0.06119 +Converged at iteration 20, L1 3.97573e-05, Linf 0.00617298, total time[s] 0.058124 +Converged at iteration 31, L1 6.94243e-05, Linf 0.00479537, total time[s] 0.08758 +Converged at iteration 20, L1 6.57219e-05, Linf 0.00459466, total time[s] 0.053579 +Converged at iteration 23, L1 6.22507e-05, Linf 0.00675731, total time[s] 0.061181 +Converged at iteration 26, L1 9.9091e-05, Linf 0.00552221, total time[s] 0.069266 +Converged at iteration 25, L1 5.7907e-05, Linf 0.00238243, total time[s] 0.064701 +Converged at iteration 22, L1 7.51449e-05, Linf 0.00374721, total time[s] 0.0579 +Converged at iteration 23, L1 8.41293e-05, Linf 0.00499174, total time[s] 0.06273 +Converged at iteration 25, L1 6.80901e-05, Linf 0.00454017, total time[s] 0.068537 +Converged at iteration 25, L1 6.41242e-05, Linf 0.00438451, total time[s] 0.066518 +Converged at iteration 30, L1 8.88349e-05, Linf 0.0060377, total time[s] 0.078791 +Converged at iteration 28, L1 9.75041e-05, Linf 0.00301063, total time[s] 0.07439 +Converged at iteration 30, L1 4.98125e-05, Linf 0.00386431, total time[s] 0.077161 +Converged at iteration 30, L1 5.94482e-05, Linf 0.00230053, total time[s] 0.078385 +Converged at iteration 30, L1 4.19417e-05, Linf 0.00221312, total time[s] 0.077794 +Converged at iteration 32, L1 7.37954e-05, Linf 0.00963443, total time[s] 0.081934 +Converged at iteration 25, L1 5.66089e-05, Linf 0.00372298, total time[s] 0.065386 +Converged at iteration 26, L1 4.9824e-05, Linf 0.00347606, total time[s] 0.067987 +Converged at iteration 24, L1 9.70425e-05, Linf 0.00445819, total time[s] 0.065908 +Converged at iteration 38, L1 8.03124e-05, Linf 0.0111623, total time[s] 0.098606 +Converged at iteration 35, L1 7.48464e-05, Linf 0.0105293, total time[s] 0.097856 +Converged at iteration 24, L1 8.11751e-05, Linf 0.00584803, total time[s] 0.063522 +Converged at iteration 28, L1 7.72818e-05, Linf 0.00785756, total time[s] 0.073824 +Converged at iteration 23, L1 5.06719e-05, Linf 0.005294, total time[s] 0.062978 +Converged at iteration 22, L1 5.80259e-05, Linf 0.00622877, total time[s] 0.059069 +Converged at iteration 21, L1 6.17407e-05, Linf 0.0119048, total time[s] 0.062231 +Converged at iteration 22, L1 3.1413e-05, Linf 0.00327432, total time[s] 0.065774 +Converged at iteration 24, L1 6.79556e-05, Linf 0.00411572, total time[s] 0.067063 +Converged at iteration 21, L1 7.56065e-05, Linf 0.00296697, total time[s] 0.072205 +Converged at iteration 20, L1 6.95305e-05, Linf 0.00220226, total time[s] 0.059701 +Converged at iteration 20, L1 4.00445e-05, Linf 0.00623263, total time[s] 0.057652 +Converged at iteration 31, L1 7.20269e-05, Linf 0.00487686, total time[s] 0.088861 +Converged at iteration 20, L1 6.65941e-05, Linf 0.00460876, total time[s] 0.056636 +Converged at iteration 23, L1 6.2343e-05, Linf 0.00674879, total time[s] 0.061982 +Converged at iteration 26, L1 9.76958e-05, Linf 0.00560965, total time[s] 0.068811 +Converged at iteration 25, L1 5.95613e-05, Linf 0.00245646, total time[s] 0.065064 +Converged at iteration 22, L1 7.73022e-05, Linf 0.00388703, total time[s] 0.058088 +Converged at iteration 23, L1 8.49162e-05, Linf 0.00499303, total time[s] 0.062071 +Converged at iteration 25, L1 6.78201e-05, Linf 0.00451385, total time[s] 0.065658 +Converged at iteration 24, L1 9.82259e-05, Linf 0.00578021, total time[s] 0.064565 +Converged at iteration 30, L1 9.0449e-05, Linf 0.0061055, total time[s] 0.079067 +Converged at iteration 28, L1 9.93598e-05, Linf 0.00303211, total time[s] 0.073541 +Converged at iteration 30, L1 4.99697e-05, Linf 0.00386879, total time[s] 0.079552 +Converged at iteration 30, L1 5.86137e-05, Linf 0.00234185, total time[s] 0.080429 +Converged at iteration 30, L1 4.48282e-05, Linf 0.00262511, total time[s] 0.080857 +Converged at iteration 32, L1 7.49246e-05, Linf 0.00972782, total time[s] 0.082993 +Converged at iteration 25, L1 5.42863e-05, Linf 0.00372349, total time[s] 0.066814 +Converged at iteration 26, L1 4.97346e-05, Linf 0.0032877, total time[s] 0.069835 +Converged at iteration 24, L1 9.84537e-05, Linf 0.0046025, total time[s] 0.07977 +Converged at iteration 38, L1 7.92277e-05, Linf 0.0113819, total time[s] 0.114595 +Converged at iteration 35, L1 7.65303e-05, Linf 0.0109918, total time[s] 0.100496 +Converged at iteration 24, L1 8.21636e-05, Linf 0.00611448, total time[s] 0.068231 +Converged at iteration 28, L1 7.54788e-05, Linf 0.00790247, total time[s] 0.072248 +Converged at iteration 23, L1 5.19162e-05, Linf 0.0055837, total time[s] 0.062139 +Converged at iteration 22, L1 5.86672e-05, Linf 0.00624175, total time[s] 0.058929 +Converged at iteration 21, L1 6.28022e-05, Linf 0.0123748, total time[s] 0.063982 +Converged at iteration 22, L1 3.1909e-05, Linf 0.00334159, total time[s] 0.06743 +Converged at iteration 24, L1 6.75976e-05, Linf 0.00406597, total time[s] 0.068063 +Converged at iteration 21, L1 8.25506e-05, Linf 0.00319392, total time[s] 0.058183 +Converged at iteration 20, L1 7.14374e-05, Linf 0.0022688, total time[s] 0.061682 +Converged at iteration 20, L1 4.09508e-05, Linf 0.00629381, total time[s] 0.056553 +Converged at iteration 31, L1 7.11024e-05, Linf 0.00495323, total time[s] 0.085086 +Converged at iteration 20, L1 6.82213e-05, Linf 0.00462896, total time[s] 0.063119 +Converged at iteration 23, L1 6.23814e-05, Linf 0.00674626, total time[s] 0.066235 +Converged at iteration 26, L1 9.64822e-05, Linf 0.00570176, total time[s] 0.068749 +Converged at iteration 25, L1 6.11621e-05, Linf 0.00252764, total time[s] 0.072095 +Converged at iteration 22, L1 7.95132e-05, Linf 0.00402461, total time[s] 0.061539 +Converged at iteration 23, L1 8.55748e-05, Linf 0.00499696, total time[s] 0.062004 +Converged at iteration 25, L1 6.76395e-05, Linf 0.00448381, total time[s] 0.067068 +Converged at iteration 24, L1 9.16612e-05, Linf 0.00564048, total time[s] 0.065212 +Converged at iteration 30, L1 9.26539e-05, Linf 0.00636125, total time[s] 0.0795 +Converged at iteration 29, L1 5.81587e-05, Linf 0.00208472, total time[s] 0.0831 +Converged at iteration 30, L1 5.00331e-05, Linf 0.00384793, total time[s] 0.081731 +Converged at iteration 30, L1 5.85501e-05, Linf 0.00234913, total time[s] 0.079294 +Converged at iteration 30, L1 4.80879e-05, Linf 0.00308868, total time[s] 0.081549 +Converged at iteration 32, L1 7.6258e-05, Linf 0.0099814, total time[s] 0.084139 +Converged at iteration 25, L1 5.18802e-05, Linf 0.00371585, total time[s] 0.070027 +Converged at iteration 26, L1 4.96147e-05, Linf 0.00337497, total time[s] 0.069583 +Converged at iteration 24, L1 9.97921e-05, Linf 0.00469402, total time[s] 0.064658 +Converged at iteration 38, L1 7.81216e-05, Linf 0.0116042, total time[s] 0.103226 +Converged at iteration 35, L1 7.81854e-05, Linf 0.0113366, total time[s] 0.107202 +Converged at iteration 24, L1 8.32597e-05, Linf 0.00639594, total time[s] 0.065401 +Converged at iteration 28, L1 7.36975e-05, Linf 0.00794762, total time[s] 0.074146 +Converged at iteration 23, L1 5.29753e-05, Linf 0.00535845, total time[s] 0.06375 +Converged at iteration 22, L1 5.92902e-05, Linf 0.00632303, total time[s] 0.063045 +Converged at iteration 21, L1 6.38102e-05, Linf 0.0127286, total time[s] 0.063421 +Converged at iteration 22, L1 3.24895e-05, Linf 0.00345112, total time[s] 0.065872 +Converged at iteration 24, L1 6.7276e-05, Linf 0.00405211, total time[s] 0.073159 +Converged at iteration 21, L1 9.14354e-05, Linf 0.00343241, total time[s] 0.06137 +Converged at iteration 20, L1 7.31045e-05, Linf 0.00233514, total time[s] 0.059534 +Converged at iteration 20, L1 4.16182e-05, Linf 0.00635232, total time[s] 0.066161 +Converged at iteration 31, L1 7.1924e-05, Linf 0.00505118, total time[s] 0.091119 +Converged at iteration 20, L1 6.82577e-05, Linf 0.00465942, total time[s] 0.062346 +Converged at iteration 23, L1 6.21749e-05, Linf 0.00664993, total time[s] 0.10054 +Converged at iteration 26, L1 9.54049e-05, Linf 0.00576692, total time[s] 0.072678 +Converged at iteration 25, L1 6.27269e-05, Linf 0.00259562, total time[s] 0.088936 +Converged at iteration 22, L1 8.1658e-05, Linf 0.00415999, total time[s] 0.062561 +Converged at iteration 23, L1 8.63627e-05, Linf 0.00500383, total time[s] 0.063604 +Converged at iteration 25, L1 6.76633e-05, Linf 0.00445185, total time[s] 0.068374 +Converged at iteration 24, L1 8.5432e-05, Linf 0.00552246, total time[s] 0.065119 +Converged at iteration 30, L1 9.45932e-05, Linf 0.0065245, total time[s] 0.078982 +Converged at iteration 29, L1 5.94238e-05, Linf 0.00213321, total time[s] 0.081836 +Converged at iteration 30, L1 5.00439e-05, Linf 0.0038767, total time[s] 0.083708 +Converged at iteration 30, L1 5.84363e-05, Linf 0.00241656, total time[s] 0.284219 +Converged at iteration 30, L1 5.10849e-05, Linf 0.00353597, total time[s] 0.092535 +Converged at iteration 32, L1 7.7451e-05, Linf 0.0102396, total time[s] 0.09043 +Converged at iteration 24, L1 9.77406e-05, Linf 0.00859617, total time[s] 0.064439 +Converged at iteration 26, L1 4.95004e-05, Linf 0.00331251, total time[s] 0.070778 +Converged at iteration 25, L1 5.30528e-05, Linf 0.00252368, total time[s] 0.06668 +Converged at iteration 38, L1 7.69045e-05, Linf 0.0118328, total time[s] 0.106644 +Converged at iteration 35, L1 8.00167e-05, Linf 0.011685, total time[s] 0.113731 +Converged at iteration 24, L1 8.44578e-05, Linf 0.006687, total time[s] 0.07234 +Converged at iteration 28, L1 7.20682e-05, Linf 0.0079921, total time[s] 0.072023 +Converged at iteration 23, L1 5.41547e-05, Linf 0.00615997, total time[s] 0.060812 +Converged at iteration 22, L1 5.96809e-05, Linf 0.00634002, total time[s] 0.059091 +Converged at iteration 21, L1 6.4845e-05, Linf 0.0130833, total time[s] 0.072724 +Converged at iteration 22, L1 3.27073e-05, Linf 0.00350423, total time[s] 0.061092 +Converged at iteration 24, L1 6.71066e-05, Linf 0.00401027, total time[s] 0.065582 +Converged at iteration 21, L1 9.85173e-05, Linf 0.00366946, total time[s] 0.060289 +Converged at iteration 20, L1 7.4734e-05, Linf 0.00240063, total time[s] 0.054259 +Converged at iteration 20, L1 4.23061e-05, Linf 0.00641076, total time[s] 0.0605 +Converged at iteration 31, L1 7.31521e-05, Linf 0.00516191, total time[s] 0.098366 +Converged at iteration 20, L1 6.89823e-05, Linf 0.00468705, total time[s] 0.059982 +Converged at iteration 23, L1 6.22098e-05, Linf 0.00657531, total time[s] 0.060855 +Converged at iteration 26, L1 9.45478e-05, Linf 0.00583735, total time[s] 0.06786 +Converged at iteration 25, L1 6.42527e-05, Linf 0.00266012, total time[s] 0.065396 +Converged at iteration 22, L1 8.35901e-05, Linf 0.00430851, total time[s] 0.057569 +Converged at iteration 23, L1 8.69391e-05, Linf 0.00501138, total time[s] 0.060547 +Converged at iteration 25, L1 6.76907e-05, Linf 0.004416, total time[s] 0.065541 +Converged at iteration 24, L1 7.96403e-05, Linf 0.0053983, total time[s] 0.063404 +Converged at iteration 30, L1 9.57384e-05, Linf 0.00649939, total time[s] 0.077044 +Converged at iteration 29, L1 6.07393e-05, Linf 0.00216539, total time[s] 0.074635 +Converged at iteration 30, L1 5.03201e-05, Linf 0.00397469, total time[s] 0.077955 +Converged at iteration 30, L1 5.98084e-05, Linf 0.00245285, total time[s] 0.076371 +Converged at iteration 30, L1 5.53707e-05, Linf 0.00393546, total time[s] 0.078987 +Converged at iteration 32, L1 7.88797e-05, Linf 0.0105027, total time[s] 0.082774 +Converged at iteration 24, L1 9.53125e-05, Linf 0.00855035, total time[s] 0.063692 +Converged at iteration 26, L1 4.98226e-05, Linf 0.00325414, total time[s] 0.06871 +Converged at iteration 25, L1 5.38737e-05, Linf 0.00235108, total time[s] 0.064685 +Converged at iteration 38, L1 7.66732e-05, Linf 0.0120422, total time[s] 0.096116 +Converged at iteration 35, L1 8.33112e-05, Linf 0.0120256, total time[s] 0.092493 +Converged at iteration 24, L1 8.57815e-05, Linf 0.00703685, total time[s] 0.067183 +Converged at iteration 28, L1 7.04728e-05, Linf 0.00803538, total time[s] 0.078254 +Converged at iteration 23, L1 5.53887e-05, Linf 0.00642601, total time[s] 0.061275 +Converged at iteration 22, L1 5.995e-05, Linf 0.00636384, total time[s] 0.061058 +Converged at iteration 21, L1 6.5708e-05, Linf 0.0134378, total time[s] 0.059631 +Converged at iteration 22, L1 3.31616e-05, Linf 0.00359511, total time[s] 0.060298 +Converged at iteration 24, L1 6.71985e-05, Linf 0.00399442, total time[s] 0.067133 +Converged at iteration 22, L1 6.28203e-05, Linf 0.00205582, total time[s] 0.063737 +Converged at iteration 20, L1 7.66412e-05, Linf 0.00246465, total time[s] 0.053957 +Converged at iteration 20, L1 4.30573e-05, Linf 0.00646638, total time[s] 0.067744 +Converged at iteration 31, L1 7.36954e-05, Linf 0.00515973, total time[s] 0.113417 +Converged at iteration 20, L1 6.9654e-05, Linf 0.00476005, total time[s] 0.058598 +Converged at iteration 23, L1 6.25703e-05, Linf 0.00658703, total time[s] 0.068497 +Converged at iteration 26, L1 9.36056e-05, Linf 0.00589829, total time[s] 0.067961 +Converged at iteration 25, L1 6.58197e-05, Linf 0.00272163, total time[s] 0.065067 +Converged at iteration 22, L1 8.56923e-05, Linf 0.00443778, total time[s] 0.058207 +Converged at iteration 23, L1 8.75991e-05, Linf 0.00512449, total time[s] 0.060667 +Converged at iteration 25, L1 6.76847e-05, Linf 0.00442418, total time[s] 0.064143 +Converged at iteration 24, L1 7.43149e-05, Linf 0.00529773, total time[s] 0.062489 +Converged at iteration 30, L1 9.7298e-05, Linf 0.00653793, total time[s] 0.075821 +Converged at iteration 29, L1 6.17717e-05, Linf 0.00216408, total time[s] 0.074758 +Converged at iteration 30, L1 5.06345e-05, Linf 0.00401113, total time[s] 0.075736 +Converged at iteration 30, L1 5.82499e-05, Linf 0.00248823, total time[s] 0.076814 +Converged at iteration 30, L1 5.78476e-05, Linf 0.00427118, total time[s] 0.076336 +Converged at iteration 32, L1 8.10999e-05, Linf 0.0107719, total time[s] 0.080584 +Converged at iteration 24, L1 8.88461e-05, Linf 0.00851855, total time[s] 0.062207 +Converged at iteration 26, L1 4.95138e-05, Linf 0.00320094, total time[s] 0.066892 +Converged at iteration 25, L1 5.47811e-05, Linf 0.00223011, total time[s] 0.066148 +Converged at iteration 38, L1 7.53224e-05, Linf 0.0122607, total time[s] 0.103554 +Converged at iteration 35, L1 8.3402e-05, Linf 0.0123969, total time[s] 0.097839 +Converged at iteration 24, L1 8.75127e-05, Linf 0.00727787, total time[s] 0.065796 +Converged at iteration 28, L1 6.89335e-05, Linf 0.00807699, total time[s] 0.113763 +Converged at iteration 23, L1 5.64751e-05, Linf 0.00665971, total time[s] 0.068469 +Converged at iteration 22, L1 6.03594e-05, Linf 0.00642043, total time[s] 0.060887 +Converged at iteration 21, L1 6.66137e-05, Linf 0.0137926, total time[s] 0.059342 +Converged at iteration 22, L1 3.33702e-05, Linf 0.00352972, total time[s] 0.064389 +Converged at iteration 24, L1 6.67849e-05, Linf 0.00395326, total time[s] 0.07067 +Converged at iteration 22, L1 6.9899e-05, Linf 0.00214918, total time[s] 0.065756 +Converged at iteration 20, L1 7.87972e-05, Linf 0.00252691, total time[s] 0.078052 +Converged at iteration 20, L1 4.37572e-05, Linf 0.00651959, total time[s] 0.060477 +Converged at iteration 31, L1 7.44963e-05, Linf 0.00524561, total time[s] 0.081126 +Converged at iteration 20, L1 7.01354e-05, Linf 0.00472786, total time[s] 0.05503 +Converged at iteration 23, L1 6.26464e-05, Linf 0.00643121, total time[s] 0.060155 +Converged at iteration 26, L1 9.29239e-05, Linf 0.00595346, total time[s] 0.068168 +Converged at iteration 25, L1 6.7379e-05, Linf 0.00278039, total time[s] 0.064723 +Converged at iteration 22, L1 8.78426e-05, Linf 0.00455391, total time[s] 0.058341 +Converged at iteration 23, L1 8.8149e-05, Linf 0.00502808, total time[s] 0.060897 +Converged at iteration 25, L1 6.75117e-05, Linf 0.00434799, total time[s] 0.065037 +Converged at iteration 24, L1 6.93116e-05, Linf 0.0050727, total time[s] 0.062404 +Converged at iteration 30, L1 9.92188e-05, Linf 0.00673069, total time[s] 0.076869 +Converged at iteration 29, L1 6.2987e-05, Linf 0.00221061, total time[s] 0.076955 +Converged at iteration 30, L1 5.03932e-05, Linf 0.00403472, total time[s] 0.08773 +Converged at iteration 30, L1 5.82713e-05, Linf 0.00252246, total time[s] 0.079876 +Converged at iteration 30, L1 6.10851e-05, Linf 0.00455024, total time[s] 0.097801 +Converged at iteration 32, L1 8.33083e-05, Linf 0.0110439, total time[s] 0.101667 +Converged at iteration 24, L1 8.55629e-05, Linf 0.00849218, total time[s] 0.075639 +Converged at iteration 26, L1 5.06439e-05, Linf 0.00314551, total time[s] 0.081119 +Converged at iteration 25, L1 5.55592e-05, Linf 0.00212013, total time[s] 0.081335 +Converged at iteration 38, L1 7.5431e-05, Linf 0.012492, total time[s] 0.131236 +Converged at iteration 35, L1 8.52447e-05, Linf 0.012755, total time[s] 0.101956 +Converged at iteration 24, L1 8.88307e-05, Linf 0.0076137, total time[s] 0.064889 +Converged at iteration 28, L1 6.75249e-05, Linf 0.00811718, total time[s] 0.07371 +Converged at iteration 23, L1 5.72174e-05, Linf 0.00612959, total time[s] 0.062679 +Converged at iteration 22, L1 6.01817e-05, Linf 0.00649076, total time[s] 0.07993 +Converged at iteration 21, L1 6.72785e-05, Linf 0.0141476, total time[s] 0.057053 +Converged at iteration 22, L1 3.42148e-05, Linf 0.00376882, total time[s] 0.060653 +Converged at iteration 24, L1 6.63712e-05, Linf 0.00393673, total time[s] 0.064377 +Converged at iteration 22, L1 7.49071e-05, Linf 0.00222487, total time[s] 0.059319 +Converged at iteration 20, L1 8.0815e-05, Linf 0.00258767, total time[s] 0.055757 +Converged at iteration 20, L1 4.43957e-05, Linf 0.00657001, total time[s] 0.054253 +Converged at iteration 31, L1 7.54802e-05, Linf 0.00527752, total time[s] 0.084122 +Converged at iteration 20, L1 7.06487e-05, Linf 0.00474888, total time[s] 0.057829 +Converged at iteration 23, L1 6.30485e-05, Linf 0.00637729, total time[s] 0.063846 +Converged at iteration 26, L1 9.18969e-05, Linf 0.00600014, total time[s] 0.069197 +Converged at iteration 25, L1 6.89037e-05, Linf 0.00283675, total time[s] 0.069623 +Converged at iteration 22, L1 8.99232e-05, Linf 0.00468149, total time[s] 0.06066 +Converged at iteration 23, L1 8.87182e-05, Linf 0.00503618, total time[s] 0.064665 +Converged at iteration 25, L1 6.73069e-05, Linf 0.00432627, total time[s] 0.068626 +Converged at iteration 24, L1 6.47876e-05, Linf 0.0048694, total time[s] 0.065994 +Converged at iteration 31, L1 4.90434e-05, Linf 0.00376689, total time[s] 0.080759 +Converged at iteration 29, L1 6.42169e-05, Linf 0.00224673, total time[s] 0.077326 +Converged at iteration 30, L1 5.07317e-05, Linf 0.00420188, total time[s] 0.079204 +Converged at iteration 30, L1 5.86847e-05, Linf 0.00255555, total time[s] 0.079 +Converged at iteration 30, L1 6.48386e-05, Linf 0.00477655, total time[s] 0.07772 +Converged at iteration 32, L1 8.33165e-05, Linf 0.0113268, total time[s] 0.084085 +Converged at iteration 24, L1 7.89266e-05, Linf 0.0084748, total time[s] 0.063365 +Converged at iteration 26, L1 4.9131e-05, Linf 0.00310619, total time[s] 0.069043 +Converged at iteration 25, L1 5.58852e-05, Linf 0.00218174, total time[s] 0.067868 +Converged at iteration 38, L1 7.2594e-05, Linf 0.0127045, total time[s] 0.099704 +Converged at iteration 35, L1 8.70353e-05, Linf 0.0131251, total time[s] 0.100207 +Converged at iteration 24, L1 9.06573e-05, Linf 0.00787677, total time[s] 0.064895 +Converged at iteration 28, L1 6.60262e-05, Linf 0.00815538, total time[s] 0.073837 +Converged at iteration 23, L1 5.7916e-05, Linf 0.00701751, total time[s] 0.061916 +Converged at iteration 22, L1 6.04366e-05, Linf 0.00643385, total time[s] 0.065188 +Converged at iteration 21, L1 6.80511e-05, Linf 0.014503, total time[s] 0.057682 +Converged at iteration 22, L1 3.4898e-05, Linf 0.00393629, total time[s] 0.060194 +Converged at iteration 24, L1 6.63752e-05, Linf 0.00390396, total time[s] 0.063972 +Converged at iteration 22, L1 7.87267e-05, Linf 0.00233445, total time[s] 0.06073 +Converged at iteration 20, L1 8.29259e-05, Linf 0.00264694, total time[s] 0.061675 +Converged at iteration 20, L1 4.50561e-05, Linf 0.00664039, total time[s] 0.063172 +Converged at iteration 31, L1 7.78158e-05, Linf 0.0053311, total time[s] 0.08372 +Converged at iteration 20, L1 7.1092e-05, Linf 0.00476765, total time[s] 0.056121 +Converged at iteration 23, L1 6.29066e-05, Linf 0.00633838, total time[s] 0.0619 +Converged at iteration 26, L1 9.10026e-05, Linf 0.00603515, total time[s] 0.074052 +Converged at iteration 25, L1 7.04018e-05, Linf 0.00289002, total time[s] 0.070891 +Converged at iteration 22, L1 9.19079e-05, Linf 0.00480727, total time[s] 0.061253 +Converged at iteration 23, L1 8.9191e-05, Linf 0.00504286, total time[s] 0.060997 +Converged at iteration 25, L1 6.69926e-05, Linf 0.00429369, total time[s] 0.093746 +Converged at iteration 24, L1 6.07254e-05, Linf 0.00466244, total time[s] 0.082541 +Converged at iteration 31, L1 4.99391e-05, Linf 0.0040074, total time[s] 0.080564 +Converged at iteration 29, L1 6.55603e-05, Linf 0.00230065, total time[s] 0.076445 +Converged at iteration 30, L1 5.09539e-05, Linf 0.00436809, total time[s] 0.079876 +Converged at iteration 30, L1 5.83496e-05, Linf 0.00258758, total time[s] 0.080676 +Converged at iteration 30, L1 6.87694e-05, Linf 0.0049735, total time[s] 0.078452 +Converged at iteration 32, L1 8.34958e-05, Linf 0.0116106, total time[s] 0.084176 +Converged at iteration 24, L1 7.46425e-05, Linf 0.00843444, total time[s] 0.065145 +Converged at iteration 26, L1 4.90151e-05, Linf 0.00306257, total time[s] 0.112711 +Converged at iteration 25, L1 5.60003e-05, Linf 0.00225606, total time[s] 0.065042 +Converged at iteration 38, L1 7.09681e-05, Linf 0.0129278, total time[s] 0.100652 +Converged at iteration 35, L1 8.87475e-05, Linf 0.0134971, total time[s] 0.100673 +Converged at iteration 24, L1 9.23505e-05, Linf 0.00823134, total time[s] 0.069929 +Converged at iteration 28, L1 6.45959e-05, Linf 0.00819174, total time[s] 0.07263 +Converged at iteration 23, L1 5.84436e-05, Linf 0.00714383, total time[s] 0.061281 +Converged at iteration 22, L1 6.01913e-05, Linf 0.00629052, total time[s] 0.058417 +Converged at iteration 21, L1 6.88788e-05, Linf 0.0148589, total time[s] 0.056369 +Converged at iteration 22, L1 3.54854e-05, Linf 0.00400253, total time[s] 0.05815 +Converged at iteration 24, L1 6.61816e-05, Linf 0.00388275, total time[s] 0.063421 +Converged at iteration 22, L1 8.29227e-05, Linf 0.00242695, total time[s] 0.058319 +Converged at iteration 20, L1 8.48804e-05, Linf 0.00270446, total time[s] 0.053502 +Converged at iteration 20, L1 4.56755e-05, Linf 0.00666772, total time[s] 0.055433 +Converged at iteration 31, L1 7.77519e-05, Linf 0.0053506, total time[s] 0.080048 +Converged at iteration 20, L1 7.15574e-05, Linf 0.00478901, total time[s] 0.053101 +Converged at iteration 23, L1 6.26167e-05, Linf 0.00631269, total time[s] 0.060674 +Converged at iteration 26, L1 9.0248e-05, Linf 0.00605689, total time[s] 0.068215 +Converged at iteration 25, L1 7.17409e-05, Linf 0.00294642, total time[s] 0.067601 +Converged at iteration 22, L1 9.3738e-05, Linf 0.00493122, total time[s] 0.058587 +Converged at iteration 23, L1 8.96848e-05, Linf 0.00504937, total time[s] 0.061054 +Converged at iteration 25, L1 6.67765e-05, Linf 0.00428057, total time[s] 0.066918 +Converged at iteration 24, L1 5.72881e-05, Linf 0.00447619, total time[s] 0.069834 +Converged at iteration 31, L1 5.10591e-05, Linf 0.00447909, total time[s] 0.079932 +Converged at iteration 29, L1 6.68452e-05, Linf 0.00236594, total time[s] 0.075173 +Converged at iteration 30, L1 5.12232e-05, Linf 0.00440022, total time[s] 0.078001 +Converged at iteration 30, L1 5.8437e-05, Linf 0.00261866, total time[s] 0.080496 +Converged at iteration 30, L1 7.29157e-05, Linf 0.00514876, total time[s] 0.077836 +Converged at iteration 32, L1 8.44347e-05, Linf 0.011903, total time[s] 0.083656 +Converged at iteration 24, L1 7.17848e-05, Linf 0.00818326, total time[s] 0.063185 +Converged at iteration 26, L1 4.89417e-05, Linf 0.00302348, total time[s] 0.067817 +Converged at iteration 25, L1 5.68372e-05, Linf 0.0022779, total time[s] 0.065289 +Converged at iteration 38, L1 7.15488e-05, Linf 0.0131441, total time[s] 0.108945 +Converged at iteration 35, L1 9.09959e-05, Linf 0.0138561, total time[s] 0.090568 +Converged at iteration 24, L1 9.26549e-05, Linf 0.00855338, total time[s] 0.064108 +Converged at iteration 28, L1 6.33726e-05, Linf 0.00822583, total time[s] 0.072499 +Converged at iteration 23, L1 5.86127e-05, Linf 0.00723535, total time[s] 0.060938 +Converged at iteration 22, L1 5.99319e-05, Linf 0.00614044, total time[s] 0.058259 +Converged at iteration 21, L1 6.96914e-05, Linf 0.0152146, total time[s] 0.056394 +Converged at iteration 22, L1 3.59145e-05, Linf 0.00405057, total time[s] 0.058866 +Converged at iteration 24, L1 6.6054e-05, Linf 0.00385984, total time[s] 0.0635 +Converged at iteration 22, L1 8.69994e-05, Linf 0.00254036, total time[s] 0.059021 +Converged at iteration 20, L1 8.68001e-05, Linf 0.00275928, total time[s] 0.054228 +Converged at iteration 20, L1 4.63383e-05, Linf 0.00671737, total time[s] 0.053524 +Converged at iteration 31, L1 7.94586e-05, Linf 0.00537824, total time[s] 0.080795 +Converged at iteration 20, L1 7.168e-05, Linf 0.00481509, total time[s] 0.053823 +Converged at iteration 23, L1 6.25217e-05, Linf 0.00629712, total time[s] 0.069448 +Converged at iteration 26, L1 8.96047e-05, Linf 0.00606808, total time[s] 0.067956 +Converged at iteration 25, L1 7.31382e-05, Linf 0.00300408, total time[s] 0.066918 +Converged at iteration 22, L1 9.57182e-05, Linf 0.00505365, total time[s] 0.058495 +Converged at iteration 23, L1 9.01871e-05, Linf 0.00505436, total time[s] 0.061687 +Converged at iteration 25, L1 6.67869e-05, Linf 0.00426946, total time[s] 0.065321 +Converged at iteration 23, L1 9.92926e-05, Linf 0.00647006, total time[s] 0.063251 +Converged at iteration 31, L1 5.13416e-05, Linf 0.00450445, total time[s] 0.081009 +Converged at iteration 29, L1 6.7927e-05, Linf 0.00241717, total time[s] 0.075636 +Converged at iteration 30, L1 5.13793e-05, Linf 0.00433577, total time[s] 0.077076 +Converged at iteration 30, L1 5.88405e-05, Linf 0.00264864, total time[s] 0.07841 +Converged at iteration 30, L1 7.74625e-05, Linf 0.00531358, total time[s] 0.077338 +Converged at iteration 32, L1 8.61576e-05, Linf 0.012196, total time[s] 0.081881 +Converged at iteration 24, L1 6.81839e-05, Linf 0.00703297, total time[s] 0.064333 +Converged at iteration 26, L1 4.93663e-05, Linf 0.00298911, total time[s] 0.067817 +Converged at iteration 25, L1 5.75293e-05, Linf 0.00228728, total time[s] 0.066021 +Converged at iteration 38, L1 6.85542e-05, Linf 0.0133552, total time[s] 0.101617 +Converged at iteration 35, L1 9.15691e-05, Linf 0.0142522, total time[s] 0.092692 +Converged at iteration 24, L1 9.3962e-05, Linf 0.00886547, total time[s] 0.063593 +Converged at iteration 28, L1 6.21267e-05, Linf 0.0082586, total time[s] 0.073625 +Converged at iteration 23, L1 5.87192e-05, Linf 0.00729321, total time[s] 0.059104 +Converged at iteration 22, L1 5.93804e-05, Linf 0.0061242, total time[s] 0.060941 +Converged at iteration 21, L1 7.04776e-05, Linf 0.0155706, total time[s] 0.062021 +Converged at iteration 22, L1 3.68478e-05, Linf 0.00414227, total time[s] 0.058964 +Converged at iteration 24, L1 6.5825e-05, Linf 0.00384003, total time[s] 0.062801 +Converged at iteration 22, L1 9.27995e-05, Linf 0.00628406, total time[s] 0.061897 +Converged at iteration 20, L1 8.86448e-05, Linf 0.00281376, total time[s] 0.055322 +Converged at iteration 20, L1 4.69742e-05, Linf 0.00676688, total time[s] 0.059925 +Converged at iteration 31, L1 8.07963e-05, Linf 0.00539705, total time[s] 0.088922 +Converged at iteration 20, L1 7.19673e-05, Linf 0.00483696, total time[s] 0.05551 +Converged at iteration 23, L1 6.24451e-05, Linf 0.00628567, total time[s] 0.06823 +Converged at iteration 26, L1 8.92153e-05, Linf 0.00606074, total time[s] 0.074635 +Converged at iteration 25, L1 7.45167e-05, Linf 0.00305955, total time[s] 0.076118 +Converged at iteration 22, L1 9.77824e-05, Linf 0.00517445, total time[s] 0.090748 +Converged at iteration 23, L1 9.07762e-05, Linf 0.00512281, total time[s] 0.072392 +Converged at iteration 25, L1 6.7213e-05, Linf 0.00426247, total time[s] 0.066514 +Converged at iteration 23, L1 9.42113e-05, Linf 0.00622033, total time[s] 0.063679 +Converged at iteration 31, L1 5.17989e-05, Linf 0.00420108, total time[s] 0.08085 +Converged at iteration 29, L1 6.94516e-05, Linf 0.0024679, total time[s] 0.076517 +Converged at iteration 30, L1 5.14298e-05, Linf 0.00424483, total time[s] 0.079736 +Converged at iteration 30, L1 5.8542e-05, Linf 0.00267761, total time[s] 0.078745 +Converged at iteration 30, L1 8.14144e-05, Linf 0.00546788, total time[s] 0.077918 +Converged at iteration 32, L1 8.6828e-05, Linf 0.012498, total time[s] 0.082666 +Converged at iteration 24, L1 6.6064e-05, Linf 0.00751219, total time[s] 0.06369 +Converged at iteration 26, L1 4.89813e-05, Linf 0.0029587, total time[s] 0.067958 +Converged at iteration 25, L1 5.80645e-05, Linf 0.00229611, total time[s] 0.065501 +Converged at iteration 38, L1 6.77887e-05, Linf 0.0135453, total time[s] 0.098062 +Converged at iteration 35, L1 9.37191e-05, Linf 0.0146348, total time[s] 0.091518 +Converged at iteration 24, L1 9.51685e-05, Linf 0.00918911, total time[s] 0.06255 +Converged at iteration 28, L1 6.09384e-05, Linf 0.00829008, total time[s] 0.074911 +Converged at iteration 23, L1 5.8944e-05, Linf 0.00732082, total time[s] 0.06203 +Converged at iteration 22, L1 5.92551e-05, Linf 0.00621583, total time[s] 0.059734 +Converged at iteration 21, L1 7.13411e-05, Linf 0.015924, total time[s] 0.056996 +Converged at iteration 22, L1 3.69536e-05, Linf 0.00417054, total time[s] 0.066014 +Converged at iteration 24, L1 6.61857e-05, Linf 0.00381977, total time[s] 0.064029 +Converged at iteration 22, L1 9.69304e-05, Linf 0.00285084, total time[s] 0.060243 +Converged at iteration 20, L1 9.05112e-05, Linf 0.00287308, total time[s] 0.054616 +Converged at iteration 20, L1 4.7558e-05, Linf 0.00681427, total time[s] 0.055647 +Converged at iteration 31, L1 8.16386e-05, Linf 0.00545835, total time[s] 0.082216 +Converged at iteration 20, L1 7.20685e-05, Linf 0.0048574, total time[s] 0.05423 +Converged at iteration 23, L1 6.22585e-05, Linf 0.00627428, total time[s] 0.061325 +Converged at iteration 26, L1 8.84067e-05, Linf 0.00604092, total time[s] 0.068384 +Converged at iteration 25, L1 7.59889e-05, Linf 0.00311475, total time[s] 0.066149 +Converged at iteration 22, L1 9.99872e-05, Linf 0.00529383, total time[s] 0.059202 +Converged at iteration 23, L1 9.13301e-05, Linf 0.00506189, total time[s] 0.062051 +Converged at iteration 25, L1 6.71144e-05, Linf 0.00425855, total time[s] 0.070957 +Converged at iteration 23, L1 9.17741e-05, Linf 0.00599214, total time[s] 0.063489 +Converged at iteration 31, L1 5.26123e-05, Linf 0.00392114, total time[s] 0.080809 +Converged at iteration 29, L1 7.03654e-05, Linf 0.00251094, total time[s] 0.075786 +Converged at iteration 30, L1 5.17027e-05, Linf 0.0043042, total time[s] 0.077357 +Converged at iteration 30, L1 5.85935e-05, Linf 0.00270575, total time[s] 0.078608 +Converged at iteration 30, L1 8.56633e-05, Linf 0.00563959, total time[s] 0.07782 +Converged at iteration 32, L1 8.85445e-05, Linf 0.0128018, total time[s] 0.082636 +Converged at iteration 24, L1 6.43431e-05, Linf 0.00715132, total time[s] 0.065342 +Converged at iteration 26, L1 4.96845e-05, Linf 0.00293267, total time[s] 0.068848 +Converged at iteration 25, L1 5.87309e-05, Linf 0.00231596, total time[s] 0.06557 +Converged at iteration 38, L1 6.61122e-05, Linf 0.0137727, total time[s] 0.099123 +Converged at iteration 35, L1 9.45082e-05, Linf 0.0150199, total time[s] 0.096582 +Converged at iteration 24, L1 9.67748e-05, Linf 0.00952997, total time[s] 0.064917 +Converged at iteration 28, L1 5.96987e-05, Linf 0.00832134, total time[s] 0.073008 +Converged at iteration 23, L1 5.96946e-05, Linf 0.00732075, total time[s] 0.062296 +Converged at iteration 22, L1 5.9151e-05, Linf 0.00631376, total time[s] 0.059704 +Converged at iteration 21, L1 7.21525e-05, Linf 0.0162783, total time[s] 0.056645 +Converged at iteration 22, L1 3.86079e-05, Linf 0.00433445, total time[s] 0.060212 +Converged at iteration 24, L1 6.59528e-05, Linf 0.00381061, total time[s] 0.063644 +Converged at iteration 23, L1 5.57932e-05, Linf 0.00181787, total time[s] 0.063394 +Converged at iteration 20, L1 9.24005e-05, Linf 0.00293255, total time[s] 0.054725 +Converged at iteration 20, L1 4.81531e-05, Linf 0.00686042, total time[s] 0.054698 +Converged at iteration 31, L1 8.30364e-05, Linf 0.00556459, total time[s] 0.080742 +Converged at iteration 20, L1 7.22798e-05, Linf 0.00486327, total time[s] 0.054384 +Converged at iteration 23, L1 6.23669e-05, Linf 0.00625494, total time[s] 0.064711 +Converged at iteration 26, L1 8.72524e-05, Linf 0.00603247, total time[s] 0.074406 +Converged at iteration 25, L1 7.75266e-05, Linf 0.00317029, total time[s] 0.072798 +Converged at iteration 23, L1 4.9336e-05, Linf 0.00304368, total time[s] 0.064289 +Converged at iteration 23, L1 9.16842e-05, Linf 0.00507424, total time[s] 0.064702 +Converged at iteration 25, L1 6.6777e-05, Linf 0.00426029, total time[s] 0.066546 +Converged at iteration 23, L1 9.07209e-05, Linf 0.00588444, total time[s] 0.062577 +Converged at iteration 31, L1 5.35796e-05, Linf 0.00369761, total time[s] 0.08454 +Converged at iteration 29, L1 7.14507e-05, Linf 0.00254764, total time[s] 0.073413 +Converged at iteration 30, L1 5.20659e-05, Linf 0.00425062, total time[s] 0.078544 +Converged at iteration 30, L1 5.87013e-05, Linf 0.00273224, total time[s] 0.077895 +Converged at iteration 30, L1 8.97039e-05, Linf 0.00600122, total time[s] 0.078517 +Converged at iteration 32, L1 8.96976e-05, Linf 0.0131142, total time[s] 0.084105 +Converged at iteration 24, L1 6.31453e-05, Linf 0.00683188, total time[s] 0.064447 +Converged at iteration 26, L1 4.89201e-05, Linf 0.00290737, total time[s] 0.069714 +Converged at iteration 25, L1 5.93554e-05, Linf 0.00234346, total time[s] 0.066684 +Converged at iteration 38, L1 6.49893e-05, Linf 0.0139785, total time[s] 0.111901 +Converged at iteration 35, L1 9.60176e-05, Linf 0.0154142, total time[s] 0.090477 +Converged at iteration 24, L1 9.79427e-05, Linf 0.00997133, total time[s] 0.064613 +Converged at iteration 28, L1 5.84043e-05, Linf 0.00835272, total time[s] 0.077665 +Converged at iteration 23, L1 5.9752e-05, Linf 0.00729638, total time[s] 0.062074 +Converged at iteration 22, L1 5.859e-05, Linf 0.0064129, total time[s] 0.060662 +Converged at iteration 21, L1 7.30062e-05, Linf 0.016631, total time[s] 0.057117 +Converged at iteration 22, L1 3.94e-05, Linf 0.00436407, total time[s] 0.059176 +Converged at iteration 24, L1 6.59597e-05, Linf 0.00380132, total time[s] 0.064917 +Converged at iteration 23, L1 5.86433e-05, Linf 0.00190674, total time[s] 0.062116 +Converged at iteration 20, L1 9.4278e-05, Linf 0.00299119, total time[s] 0.053391 +Converged at iteration 20, L1 4.8637e-05, Linf 0.00690341, total time[s] 0.102039 +Converged at iteration 31, L1 8.43355e-05, Linf 0.00567003, total time[s] 0.093696 +Converged at iteration 20, L1 7.2717e-05, Linf 0.0048764, total time[s] 0.054436 +Converged at iteration 23, L1 6.1915e-05, Linf 0.00633104, total time[s] 0.064768 +Converged at iteration 26, L1 8.6555e-05, Linf 0.00601059, total time[s] 0.071891 +Converged at iteration 25, L1 7.88506e-05, Linf 0.00322443, total time[s] 0.065982 +Converged at iteration 23, L1 5.04108e-05, Linf 0.00309016, total time[s] 0.060602 +Converged at iteration 23, L1 9.24702e-05, Linf 0.00506846, total time[s] 0.06043 +Converged at iteration 25, L1 6.59971e-05, Linf 0.00426585, total time[s] 0.064701 +Converged at iteration 23, L1 9.07004e-05, Linf 0.00561447, total time[s] 0.061742 +Converged at iteration 31, L1 5.41864e-05, Linf 0.00356719, total time[s] 0.080838 +Converged at iteration 29, L1 7.23165e-05, Linf 0.00258287, total time[s] 0.076188 +Converged at iteration 30, L1 5.22803e-05, Linf 0.0041731, total time[s] 0.081666 +Converged at iteration 30, L1 5.89255e-05, Linf 0.00275657, total time[s] 0.078366 +Converged at iteration 30, L1 9.37336e-05, Linf 0.00633619, total time[s] 0.078858 +Converged at iteration 32, L1 9.19209e-05, Linf 0.0134272, total time[s] 0.08527 +Converged at iteration 24, L1 6.3048e-05, Linf 0.00655606, total time[s] 0.063038 +Converged at iteration 26, L1 4.92966e-05, Linf 0.0028818, total time[s] 0.069212 +Converged at iteration 25, L1 6.00782e-05, Linf 0.00237956, total time[s] 0.066377 +Converged at iteration 38, L1 6.86212e-05, Linf 0.014183, total time[s] 0.100033 +Converged at iteration 35, L1 9.74904e-05, Linf 0.0158032, total time[s] 0.094464 +Converged at iteration 24, L1 9.95483e-05, Linf 0.0107995, total time[s] 0.062365 +Converged at iteration 28, L1 5.73118e-05, Linf 0.00838381, total time[s] 0.071901 +Converged at iteration 23, L1 6.05816e-05, Linf 0.00724262, total time[s] 0.06077 +Converged at iteration 22, L1 5.82944e-05, Linf 0.00651124, total time[s] 0.058047 +Converged at iteration 21, L1 7.38414e-05, Linf 0.0169831, total time[s] 0.056285 +Converged at iteration 22, L1 4.00441e-05, Linf 0.00442221, total time[s] 0.061464 +Converged at iteration 24, L1 6.65927e-05, Linf 0.00379924, total time[s] 0.068936 +Converged at iteration 23, L1 6.13325e-05, Linf 0.00199348, total time[s] 0.060297 +Converged at iteration 20, L1 9.62198e-05, Linf 0.00304832, total time[s] 0.052446 +Converged at iteration 20, L1 4.91073e-05, Linf 0.00694486, total time[s] 0.052741 +Converged at iteration 31, L1 8.56695e-05, Linf 0.00572988, total time[s] 0.107308 +Converged at iteration 20, L1 7.28758e-05, Linf 0.00487812, total time[s] 0.060556 +Converged at iteration 23, L1 6.15186e-05, Linf 0.00619807, total time[s] 0.066181 +Converged at iteration 26, L1 8.56773e-05, Linf 0.00598974, total time[s] 0.06828 +Converged at iteration 25, L1 8.0397e-05, Linf 0.00327553, total time[s] 0.068933 +Converged at iteration 23, L1 5.13691e-05, Linf 0.00315937, total time[s] 0.063114 +Converged at iteration 23, L1 9.31427e-05, Linf 0.0050721, total time[s] 0.063059 +Converged at iteration 25, L1 6.62595e-05, Linf 0.00426668, total time[s] 0.070197 +Converged at iteration 23, L1 9.14075e-05, Linf 0.00540221, total time[s] 0.064503 +Converged at iteration 31, L1 5.4884e-05, Linf 0.00360294, total time[s] 0.081101 +Converged at iteration 29, L1 7.33823e-05, Linf 0.00261598, total time[s] 0.078191 +Converged at iteration 30, L1 5.25603e-05, Linf 0.0040327, total time[s] 0.085281 +Converged at iteration 30, L1 5.90261e-05, Linf 0.00277105, total time[s] 0.079775 +Converged at iteration 30, L1 9.84664e-05, Linf 0.0066602, total time[s] 0.079785 +Converged at iteration 32, L1 9.30694e-05, Linf 0.0137499, total time[s] 0.083297 +Converged at iteration 24, L1 6.21991e-05, Linf 0.0062699, total time[s] 0.064507 +Converged at iteration 26, L1 4.88866e-05, Linf 0.00284821, total time[s] 0.069299 +Converged at iteration 25, L1 6.08371e-05, Linf 0.00242282, total time[s] 0.067719 +Converged at iteration 38, L1 6.30618e-05, Linf 0.014384, total time[s] 0.097652 +Converged at iteration 35, L1 9.90268e-05, Linf 0.0162028, total time[s] 0.090685 +Converged at iteration 25, L1 3.48784e-05, Linf 0.00479822, total time[s] 0.067455 +Converged at iteration 28, L1 5.6196e-05, Linf 0.00841606, total time[s] 0.075618 +Converged at iteration 23, L1 6.12664e-05, Linf 0.00717073, total time[s] 0.061181 +Converged at iteration 22, L1 5.76379e-05, Linf 0.00585153, total time[s] 0.059526 +Converged at iteration 21, L1 7.48164e-05, Linf 0.0173336, total time[s] 0.057097 +Converged at iteration 22, L1 4.1594e-05, Linf 0.00458011, total time[s] 0.059494 +Converged at iteration 24, L1 6.69905e-05, Linf 0.0038003, total time[s] 0.063706 +Converged at iteration 23, L1 6.55398e-05, Linf 0.00208182, total time[s] 0.061418 +Converged at iteration 20, L1 9.84724e-05, Linf 0.00310511, total time[s] 0.054363 +Converged at iteration 20, L1 4.96829e-05, Linf 0.00698722, total time[s] 0.054171 +Converged at iteration 31, L1 8.69233e-05, Linf 0.00570415, total time[s] 0.08125 +Converged at iteration 20, L1 7.31392e-05, Linf 0.00488598, total time[s] 0.05447 +Converged at iteration 23, L1 6.1725e-05, Linf 0.00616354, total time[s] 0.062488 +Converged at iteration 26, L1 8.50714e-05, Linf 0.0059629, total time[s] 0.068582 +Converged at iteration 25, L1 8.22342e-05, Linf 0.00332446, total time[s] 0.06722 +Converged at iteration 23, L1 5.24464e-05, Linf 0.00321615, total time[s] 0.063247 +Converged at iteration 23, L1 9.37064e-05, Linf 0.00507511, total time[s] 0.06232 +Converged at iteration 25, L1 6.65311e-05, Linf 0.00427136, total time[s] 0.066645 +Converged at iteration 23, L1 9.36096e-05, Linf 0.00519456, total time[s] 0.062322 +Converged at iteration 31, L1 5.54102e-05, Linf 0.00344441, total time[s] 0.081767 +Converged at iteration 29, L1 7.48325e-05, Linf 0.00264689, total time[s] 0.078946 +Converged at iteration 30, L1 5.2794e-05, Linf 0.00391339, total time[s] 0.080145 +Converged at iteration 30, L1 5.90983e-05, Linf 0.00279721, total time[s] 0.076362 +Converged at iteration 31, L1 3.74217e-05, Linf 0.0039051, total time[s] 0.082245 +Converged at iteration 32, L1 9.46798e-05, Linf 0.0140744, total time[s] 0.085102 +Converged at iteration 24, L1 6.24836e-05, Linf 0.00578973, total time[s] 0.070861 +Converged at iteration 26, L1 4.88628e-05, Linf 0.0028334, total time[s] 0.066436 +Converged at iteration 25, L1 6.16114e-05, Linf 0.00246678, total time[s] 0.064162 +Converged at iteration 38, L1 6.20396e-05, Linf 0.014583, total time[s] 0.098631 +Converged at iteration 36, L1 3.373e-05, Linf 0.011238, total time[s] 0.100131 +Converged at iteration 25, L1 3.4709e-05, Linf 0.00492, total time[s] 0.065269 +Converged at iteration 28, L1 5.54899e-05, Linf 0.00861258, total time[s] 0.148006 +Converged at iteration 23, L1 6.07223e-05, Linf 0.0070789, total time[s] 0.065273 +Converged at iteration 22, L1 5.76188e-05, Linf 0.00615683, total time[s] 0.08167 +Converged at iteration 21, L1 7.56739e-05, Linf 0.0176813, total time[s] 0.06396 +Converged at iteration 22, L1 4.20992e-05, Linf 0.00464697, total time[s] 0.077093 +Converged at iteration 24, L1 6.78932e-05, Linf 0.00380207, total time[s] 0.328931 +Converged at iteration 23, L1 6.5783e-05, Linf 0.00216779, total time[s] 0.118575 +Converged at iteration 21, L1 5.14246e-05, Linf 0.00184939, total time[s] 0.064789 +Converged at iteration 20, L1 5.00835e-05, Linf 0.0070288, total time[s] 0.058861 +Converged at iteration 31, L1 8.82487e-05, Linf 0.00593243, total time[s] 0.082458 +Converged at iteration 20, L1 7.36122e-05, Linf 0.00489595, total time[s] 0.057791 +Converged at iteration 23, L1 6.26514e-05, Linf 0.00612934, total time[s] 0.072512 +Converged at iteration 26, L1 8.44857e-05, Linf 0.00593771, total time[s] 0.073583 +Converged at iteration 25, L1 8.4391e-05, Linf 0.00336802, total time[s] 0.066704 +Converged at iteration 23, L1 5.39371e-05, Linf 0.00488942, total time[s] 0.068324 +Converged at iteration 23, L1 9.39315e-05, Linf 0.00507656, total time[s] 0.064413 +Converged at iteration 25, L1 6.73198e-05, Linf 0.0042735, total time[s] 0.067695 +Converged at iteration 23, L1 9.589e-05, Linf 0.00499449, total time[s] 0.064643 +Converged at iteration 31, L1 5.60834e-05, Linf 0.00344695, total time[s] 0.084634 +Converged at iteration 29, L1 7.55298e-05, Linf 0.00267757, total time[s] 0.075596 +Converged at iteration 30, L1 5.30254e-05, Linf 0.00374245, total time[s] 0.079221 +Converged at iteration 30, L1 5.91615e-05, Linf 0.00281174, total time[s] 0.078485 +Converged at iteration 31, L1 3.8834e-05, Linf 0.0040389, total time[s] 0.081304 +Converged at iteration 32, L1 9.64178e-05, Linf 0.0144006, total time[s] 0.084208 +Converged at iteration 24, L1 6.35816e-05, Linf 0.00564879, total time[s] 0.066384 +Converged at iteration 26, L1 4.87124e-05, Linf 0.00281093, total time[s] 0.070076 +Converged at iteration 25, L1 6.24662e-05, Linf 0.00251648, total time[s] 0.068572 +Converged at iteration 38, L1 6.10624e-05, Linf 0.0147763, total time[s] 0.104157 +Converged at iteration 36, L1 3.65914e-05, Linf 0.0114444, total time[s] 0.131519 +Converged at iteration 25, L1 3.44999e-05, Linf 0.0050909, total time[s] 0.112076 +Converged at iteration 28, L1 5.43373e-05, Linf 0.0084813, total time[s] 0.077647 +Converged at iteration 23, L1 6.10985e-05, Linf 0.00646628, total time[s] 0.074435 +Converged at iteration 22, L1 5.68943e-05, Linf 0.00600417, total time[s] 0.074464 +Converged at iteration 21, L1 7.66437e-05, Linf 0.0180237, total time[s] 0.061819 +Converged at iteration 22, L1 4.3258e-05, Linf 0.00469331, total time[s] 0.064386 +Converged at iteration 24, L1 6.81313e-05, Linf 0.0038039, total time[s] 0.065202 +Converged at iteration 23, L1 6.83354e-05, Linf 0.00225771, total time[s] 0.066216 +Converged at iteration 21, L1 5.2353e-05, Linf 0.00187494, total time[s] 0.062088 +Converged at iteration 20, L1 5.07044e-05, Linf 0.00756638, total time[s] 0.059136 +Converged at iteration 31, L1 9.02735e-05, Linf 0.00606206, total time[s] 0.081677 +Converged at iteration 20, L1 7.3743e-05, Linf 0.00489601, total time[s] 0.054862 +Converged at iteration 23, L1 6.06515e-05, Linf 0.00609444, total time[s] 0.062252 +Converged at iteration 26, L1 8.35439e-05, Linf 0.00590921, total time[s] 0.071572 +Converged at iteration 25, L1 8.47858e-05, Linf 0.00340344, total time[s] 0.067061 +Converged at iteration 23, L1 5.42746e-05, Linf 0.00332728, total time[s] 0.063174 +Converged at iteration 23, L1 9.46085e-05, Linf 0.00508107, total time[s] 0.062381 +Converged at iteration 25, L1 6.68213e-05, Linf 0.00427782, total time[s] 0.077493 +Converged at iteration 24, L1 6.34742e-05, Linf 0.00268861, total time[s] 0.085025 +Converged at iteration 31, L1 5.66072e-05, Linf 0.00332592, total time[s] 0.095294 +Converged at iteration 29, L1 7.63404e-05, Linf 0.00272168, total time[s] 0.078536 +Converged at iteration 30, L1 5.32101e-05, Linf 0.00361981, total time[s] 0.078648 +Converged at iteration 30, L1 5.98448e-05, Linf 0.00282163, total time[s] 0.079038 +Converged at iteration 31, L1 4.02268e-05, Linf 0.00415982, total time[s] 0.080611 +Converged at iteration 32, L1 9.80074e-05, Linf 0.0147328, total time[s] 0.083909 +Converged at iteration 24, L1 6.50867e-05, Linf 0.00575841, total time[s] 0.063361 +Converged at iteration 26, L1 4.98636e-05, Linf 0.00279009, total time[s] 0.071566 +Converged at iteration 25, L1 6.32467e-05, Linf 0.00258335, total time[s] 0.06713 +Converged at iteration 38, L1 6.01145e-05, Linf 0.0149662, total time[s] 0.105601 +Converged at iteration 36, L1 3.40767e-05, Linf 0.0116695, total time[s] 0.091366 +Converged at iteration 25, L1 3.46803e-05, Linf 0.0053773, total time[s] 0.06599 +Converged at iteration 28, L1 5.34263e-05, Linf 0.00851484, total time[s] 0.073408 +Converged at iteration 23, L1 6.14825e-05, Linf 0.00687476, total time[s] 0.061252 +Converged at iteration 22, L1 5.66209e-05, Linf 0.0058609, total time[s] 0.058426 +Converged at iteration 21, L1 7.75725e-05, Linf 0.0183605, total time[s] 0.056032 +Converged at iteration 22, L1 4.37578e-05, Linf 0.00474252, total time[s] 0.058528 +Converged at iteration 24, L1 6.83143e-05, Linf 0.00380629, total time[s] 0.064533 +Converged at iteration 23, L1 7.09861e-05, Linf 0.00234559, total time[s] 0.060809 +Converged at iteration 21, L1 5.32748e-05, Linf 0.00190072, total time[s] 0.055583 +Converged at iteration 20, L1 5.1105e-05, Linf 0.00710623, total time[s] 0.053436 +Converged at iteration 31, L1 9.04315e-05, Linf 0.00611903, total time[s] 0.079458 +Converged at iteration 20, L1 7.4021e-05, Linf 0.00491066, total time[s] 0.054516 +Converged at iteration 23, L1 6.01541e-05, Linf 0.00606611, total time[s] 0.060662 +Converged at iteration 26, L1 8.2682e-05, Linf 0.00586452, total time[s] 0.067994 +Converged at iteration 25, L1 8.61444e-05, Linf 0.00343821, total time[s] 0.06578 +Converged at iteration 23, L1 5.52452e-05, Linf 0.00338162, total time[s] 0.060797 +Converged at iteration 23, L1 9.51026e-05, Linf 0.00508403, total time[s] 0.061226 +Converged at iteration 25, L1 6.70058e-05, Linf 0.00427786, total time[s] 0.066035 +Converged at iteration 24, L1 6.79284e-05, Linf 0.00246057, total time[s] 0.063053 +Converged at iteration 31, L1 5.73178e-05, Linf 0.00328618, total time[s] 0.079745 +Converged at iteration 29, L1 7.7356e-05, Linf 0.00281083, total time[s] 0.074897 +Converged at iteration 30, L1 5.33772e-05, Linf 0.00363813, total time[s] 0.077537 +Converged at iteration 30, L1 5.92997e-05, Linf 0.00282656, total time[s] 0.077132 +Converged at iteration 31, L1 4.20233e-05, Linf 0.0042775, total time[s] 0.080094 +Converged at iteration 32, L1 9.92783e-05, Linf 0.0150707, total time[s] 0.081939 +Converged at iteration 24, L1 6.83506e-05, Linf 0.00559067, total time[s] 0.063121 +Converged at iteration 26, L1 4.84283e-05, Linf 0.00277037, total time[s] 0.069188 +Converged at iteration 25, L1 6.40441e-05, Linf 0.00261504, total time[s] 0.067437 +Converged at iteration 38, L1 5.89996e-05, Linf 0.0151582, total time[s] 0.09874 +Converged at iteration 36, L1 3.4935e-05, Linf 0.0118952, total time[s] 0.093701 +Converged at iteration 25, L1 3.49192e-05, Linf 0.00566067, total time[s] 0.065327 +Converged at iteration 28, L1 5.26394e-05, Linf 0.00855016, total time[s] 0.073244 +Converged at iteration 23, L1 6.23856e-05, Linf 0.0067666, total time[s] 0.061222 +Converged at iteration 22, L1 5.63368e-05, Linf 0.00571278, total time[s] 0.062204 +Converged at iteration 21, L1 7.84044e-05, Linf 0.0186918, total time[s] 0.056585 +Converged at iteration 22, L1 4.57283e-05, Linf 0.00488069, total time[s] 0.058376 +Converged at iteration 24, L1 6.90268e-05, Linf 0.00381007, total time[s] 0.064693 +Converged at iteration 23, L1 7.39132e-05, Linf 0.00243528, total time[s] 0.062796 +Converged at iteration 21, L1 5.40843e-05, Linf 0.00192765, total time[s] 0.056098 +Converged at iteration 20, L1 5.16386e-05, Linf 0.00714613, total time[s] 0.054968 +Converged at iteration 31, L1 9.14175e-05, Linf 0.00613162, total time[s] 0.084236 +Converged at iteration 20, L1 7.44816e-05, Linf 0.00494349, total time[s] 0.053407 +Converged at iteration 23, L1 6.05157e-05, Linf 0.00604401, total time[s] 0.063232 +Converged at iteration 26, L1 8.18198e-05, Linf 0.00582281, total time[s] 0.068322 +Converged at iteration 25, L1 8.75087e-05, Linf 0.00347658, total time[s] 0.067396 +Converged at iteration 23, L1 5.61424e-05, Linf 0.0034352, total time[s] 0.062183 +Converged at iteration 23, L1 9.52531e-05, Linf 0.0050875, total time[s] 0.061281 +Converged at iteration 25, L1 6.75586e-05, Linf 0.00427751, total time[s] 0.065396 +Converged at iteration 24, L1 7.2915e-05, Linf 0.00222717, total time[s] 0.063098 +Converged at iteration 31, L1 5.8154e-05, Linf 0.00330658, total time[s] 0.079734 +Converged at iteration 29, L1 7.85528e-05, Linf 0.00280131, total time[s] 0.075466 +Converged at iteration 30, L1 5.36225e-05, Linf 0.00368092, total time[s] 0.077573 +Converged at iteration 30, L1 5.91669e-05, Linf 0.00282671, total time[s] 0.077185 +Converged at iteration 31, L1 4.33246e-05, Linf 0.00438609, total time[s] 0.079018 +Converged at iteration 33, L1 3.67965e-05, Linf 0.0116779, total time[s] 0.084447 +Converged at iteration 24, L1 7.16763e-05, Linf 0.00544401, total time[s] 0.063157 +Converged at iteration 26, L1 4.86942e-05, Linf 0.002753, total time[s] 0.067793 +Converged at iteration 25, L1 6.49419e-05, Linf 0.0026655, total time[s] 0.065855 +Converged at iteration 38, L1 6.34694e-05, Linf 0.0151798, total time[s] 0.099483 +Converged at iteration 36, L1 3.43718e-05, Linf 0.0121197, total time[s] 0.094813 +Converged at iteration 25, L1 3.48029e-05, Linf 0.00593637, total time[s] 0.066581 +Converged at iteration 28, L1 5.17421e-05, Linf 0.00858681, total time[s] 0.072225 +Converged at iteration 23, L1 6.2175e-05, Linf 0.00665016, total time[s] 0.06235 +Converged at iteration 22, L1 5.60997e-05, Linf 0.00558181, total time[s] 0.060674 +Converged at iteration 21, L1 7.93395e-05, Linf 0.0190171, total time[s] 0.056388 +Converged at iteration 22, L1 4.71369e-05, Linf 0.0049777, total time[s] 0.059458 +Converged at iteration 24, L1 6.95871e-05, Linf 0.00381493, total time[s] 0.063558 +Converged at iteration 23, L1 7.64548e-05, Linf 0.00252244, total time[s] 0.061808 +Converged at iteration 21, L1 5.49128e-05, Linf 0.00195604, total time[s] 0.055972 +Converged at iteration 20, L1 5.22484e-05, Linf 0.00718547, total time[s] 0.054623 +Converged at iteration 31, L1 9.24214e-05, Linf 0.00613957, total time[s] 0.084729 +Converged at iteration 20, L1 7.51592e-05, Linf 0.00496671, total time[s] 0.054839 +Converged at iteration 23, L1 6.05478e-05, Linf 0.00588395, total time[s] 0.063651 +Converged at iteration 26, L1 8.10077e-05, Linf 0.00577673, total time[s] 0.06861 +Converged at iteration 25, L1 8.9023e-05, Linf 0.00351798, total time[s] 0.067477 +Converged at iteration 23, L1 5.7057e-05, Linf 0.00348817, total time[s] 0.061452 +Converged at iteration 23, L1 9.61393e-05, Linf 0.00509151, total time[s] 0.061055 +Converged at iteration 25, L1 6.80692e-05, Linf 0.00427526, total time[s] 0.065809 +Converged at iteration 24, L1 7.98873e-05, Linf 0.00199006, total time[s] 0.063309 +Converged at iteration 31, L1 5.8828e-05, Linf 0.00332225, total time[s] 0.080132 +Converged at iteration 29, L1 7.97494e-05, Linf 0.00281099, total time[s] 0.076477 +Converged at iteration 30, L1 5.36218e-05, Linf 0.00372919, total time[s] 0.077083 +Converged at iteration 30, L1 5.91068e-05, Linf 0.00282188, total time[s] 0.077198 +Converged at iteration 31, L1 4.60381e-05, Linf 0.00449331, total time[s] 0.079755 +Converged at iteration 33, L1 3.65324e-05, Linf 0.0119398, total time[s] 0.084219 +Converged at iteration 24, L1 7.40842e-05, Linf 0.0053176, total time[s] 0.06372 +Converged at iteration 26, L1 4.81993e-05, Linf 0.00273755, total time[s] 0.072371 +Converged at iteration 25, L1 6.68267e-05, Linf 0.00268435, total time[s] 0.067096 +Converged at iteration 38, L1 6.28864e-05, Linf 0.0155117, total time[s] 0.113679 +Converged at iteration 36, L1 3.68377e-05, Linf 0.0123624, total time[s] 0.137341 +Converged at iteration 25, L1 3.46264e-05, Linf 0.00648209, total time[s] 0.065536 +Converged at iteration 28, L1 5.16782e-05, Linf 0.00862466, total time[s] 0.072938 +Converged at iteration 23, L1 6.30202e-05, Linf 0.00653452, total time[s] 0.072713 +Converged at iteration 22, L1 5.70128e-05, Linf 0.0054632, total time[s] 0.061645 +Converged at iteration 21, L1 8.03568e-05, Linf 0.0193365, total time[s] 0.064404 +Converged at iteration 22, L1 4.82059e-05, Linf 0.005033, total time[s] 0.063074 +Converged at iteration 24, L1 6.99658e-05, Linf 0.00382362, total time[s] 0.072536 +Converged at iteration 23, L1 7.94888e-05, Linf 0.00261266, total time[s] 0.062681 +Converged at iteration 21, L1 5.58059e-05, Linf 0.00198533, total time[s] 0.070729 +Converged at iteration 20, L1 5.27573e-05, Linf 0.00722323, total time[s] 0.05625 +Converged at iteration 31, L1 9.3582e-05, Linf 0.00636141, total time[s] 0.086193 +Converged at iteration 20, L1 7.55079e-05, Linf 0.00500196, total time[s] 0.058948 +Converged at iteration 23, L1 6.01722e-05, Linf 0.00547798, total time[s] 0.062136 +Converged at iteration 26, L1 8.10095e-05, Linf 0.00572948, total time[s] 0.071686 +Converged at iteration 25, L1 9.04468e-05, Linf 0.00355978, total time[s] 0.072754 +Converged at iteration 23, L1 5.83933e-05, Linf 0.00354063, total time[s] 0.061156 +Converged at iteration 23, L1 9.64944e-05, Linf 0.00509602, total time[s] 0.06568 +Converged at iteration 25, L1 6.80178e-05, Linf 0.00427389, total time[s] 0.068846 +Converged at iteration 24, L1 8.69185e-05, Linf 0.00174968, total time[s] 0.063856 +Converged at iteration 31, L1 5.91748e-05, Linf 0.00334007, total time[s] 0.089293 +Converged at iteration 29, L1 8.15974e-05, Linf 0.00284252, total time[s] 0.078388 +Converged at iteration 30, L1 5.83374e-05, Linf 0.00369872, total time[s] 0.08554 +Converged at iteration 30, L1 5.91087e-05, Linf 0.00279225, total time[s] 0.095387 +Converged at iteration 31, L1 4.68963e-05, Linf 0.00459061, total time[s] 0.103711 +Converged at iteration 33, L1 3.73339e-05, Linf 0.0121878, total time[s] 0.090331 +Converged at iteration 24, L1 7.60716e-05, Linf 0.00520532, total time[s] 0.063767 +Converged at iteration 26, L1 5.03349e-05, Linf 0.00272414, total time[s] 0.110604 +Converged at iteration 25, L1 6.65327e-05, Linf 0.00276589, total time[s] 0.079017 +Converged at iteration 38, L1 5.63791e-05, Linf 0.0156858, total time[s] 0.115366 +Converged at iteration 36, L1 3.45483e-05, Linf 0.0126142, total time[s] 0.114516 +Converged at iteration 25, L1 3.49677e-05, Linf 0.00707048, total time[s] 0.070022 +Converged at iteration 28, L1 5.14969e-05, Linf 0.00866362, total time[s] 0.077006 +Converged at iteration 23, L1 6.30475e-05, Linf 0.00642411, total time[s] 0.06417 +Converged at iteration 22, L1 5.55741e-05, Linf 0.0051979, total time[s] 0.061475 +Converged at iteration 21, L1 8.12592e-05, Linf 0.019651, total time[s] 0.069747 +Converged at iteration 22, L1 4.94816e-05, Linf 0.00509001, total time[s] 0.06903 +Converged at iteration 24, L1 7.05764e-05, Linf 0.00383438, total time[s] 0.09149 +Converged at iteration 23, L1 8.29935e-05, Linf 0.00654997, total time[s] 0.092915 +Converged at iteration 21, L1 5.6665e-05, Linf 0.00201319, total time[s] 0.073519 +Converged at iteration 20, L1 5.33619e-05, Linf 0.00725942, total time[s] 0.066417 +Converged at iteration 31, L1 9.48185e-05, Linf 0.00655385, total time[s] 0.096498 +Converged at iteration 20, L1 7.59257e-05, Linf 0.00505627, total time[s] 0.053753 +Converged at iteration 23, L1 6.00317e-05, Linf 0.00546556, total time[s] 0.06848 +Converged at iteration 26, L1 7.95874e-05, Linf 0.00567485, total time[s] 0.070255 +Converged at iteration 25, L1 9.16202e-05, Linf 0.00360049, total time[s] 0.067299 +Converged at iteration 23, L1 5.94792e-05, Linf 0.00359258, total time[s] 0.059351 +Converged at iteration 23, L1 9.6633e-05, Linf 0.0051012, total time[s] 0.059285 +Converged at iteration 25, L1 6.80849e-05, Linf 0.00427322, total time[s] 0.064207 +Converged at iteration 24, L1 9.65912e-05, Linf 0.00186239, total time[s] 0.062158 +Converged at iteration 31, L1 6.00267e-05, Linf 0.00338812, total time[s] 0.078865 +Converged at iteration 29, L1 8.18396e-05, Linf 0.00287154, total time[s] 0.07388 +Converged at iteration 30, L1 5.39667e-05, Linf 0.00375224, total time[s] 0.076268 +Converged at iteration 30, L1 5.98851e-05, Linf 0.00280168, total time[s] 0.076445 +Converged at iteration 40, L1 6.71766e-05, Linf 0.00367721, total time[s] 0.142214 +Converged at iteration 35, L1 7.62849e-05, Linf 0.00339712, total time[s] 0.108202 +Converged at iteration 30, L1 9.62444e-05, Linf 0.00432602, total time[s] 0.102037 +Converged at iteration 31, L1 6.19647e-05, Linf 0.00502564, total time[s] 0.093848 +Converged at iteration 27, L1 6.25992e-05, Linf 0.00499555, total time[s] 0.079621 +Converged at iteration 22, L1 8.59206e-05, Linf 0.00448847, total time[s] 0.063102 +Converged at iteration 20, L1 9.60127e-05, Linf 0.00397839, total time[s] 0.073048 +Converged at iteration 24, L1 8.84023e-05, Linf 0.00482793, total time[s] 0.062984 +Converged at iteration 28, L1 7.38362e-05, Linf 0.00445909, total time[s] 0.071553 +Converged at iteration 26, L1 8.11684e-05, Linf 0.0054674, total time[s] 0.067055 +Converged at iteration 22, L1 7.39254e-05, Linf 0.00508701, total time[s] 0.065578 +Converged at iteration 19, L1 6.6341e-05, Linf 0.00393102, total time[s] 0.050723 +Converged at iteration 30, L1 7.98735e-05, Linf 0.00329888, total time[s] 0.080787 +Converged at iteration 20, L1 8.44164e-05, Linf 0.00448508, total time[s] 0.061149 +Converged at iteration 24, L1 7.10861e-05, Linf 0.00463288, total time[s] 0.063793 +Converged at iteration 31, L1 8.93613e-05, Linf 0.00569148, total time[s] 0.080604 +Converged at iteration 27, L1 9.91606e-05, Linf 0.00569816, total time[s] 0.073614 +Converged at iteration 24, L1 8.79113e-05, Linf 0.00465012, total time[s] 0.068732 +Converged at iteration 23, L1 9.21822e-05, Linf 0.00410189, total time[s] 0.073108 +Converged at iteration 26, L1 7.22104e-05, Linf 0.00446106, total time[s] 0.079139 +Converged at iteration 29, L1 7.81569e-05, Linf 0.00479615, total time[s] 0.080281 +Converged at iteration 34, L1 7.09316e-05, Linf 0.00422892, total time[s] 0.093589 +Converged at iteration 30, L1 9.3951e-05, Linf 0.00442604, total time[s] 0.084588 +Converged at iteration 28, L1 9.49888e-05, Linf 0.00310979, total time[s] 0.072673 +Converged at iteration 32, L1 9.39349e-05, Linf 0.0037408, total time[s] 0.08269 +Converged at iteration 37, L1 7.33871e-05, Linf 0.00327813, total time[s] 0.093361 +Converged at iteration 33, L1 8.45238e-05, Linf 0.00464521, total time[s] 0.091536 +Converged at iteration 28, L1 9.65535e-05, Linf 0.00430209, total time[s] 0.075164 +Converged at iteration 24, L1 8.82852e-05, Linf 0.00325071, total time[s] 0.063518 +Converged at iteration 26, L1 8.99467e-05, Linf 0.0038626, total time[s] 0.072662 +Converged at iteration 40, L1 6.86092e-05, Linf 0.00397209, total time[s] 0.114026 +Converged at iteration 35, L1 8.66815e-05, Linf 0.00357306, total time[s] 0.091653 +Converged at iteration 30, L1 9.18536e-05, Linf 0.00417854, total time[s] 0.077319 +Converged at iteration 31, L1 6.17852e-05, Linf 0.00507477, total time[s] 0.079721 +Converged at iteration 26, L1 9.83417e-05, Linf 0.0055826, total time[s] 0.068065 +Converged at iteration 22, L1 7.18528e-05, Linf 0.00418138, total time[s] 0.063853 +Converged at iteration 21, L1 6.40609e-05, Linf 0.00346889, total time[s] 0.0604 +Converged at iteration 24, L1 8.93958e-05, Linf 0.00496536, total time[s] 0.065053 +Converged at iteration 28, L1 7.32144e-05, Linf 0.00442612, total time[s] 0.092873 +Converged at iteration 26, L1 8.05148e-05, Linf 0.00537059, total time[s] 0.08794 +Converged at iteration 22, L1 7.05148e-05, Linf 0.00441322, total time[s] 0.094455 +Converged at iteration 19, L1 5.493e-05, Linf 0.00332057, total time[s] 0.056034 +Converged at iteration 30, L1 9.52989e-05, Linf 0.00330735, total time[s] 0.086415 +Converged at iteration 20, L1 8.42626e-05, Linf 0.00472689, total time[s] 0.067423 +Converged at iteration 24, L1 7.14929e-05, Linf 0.00475228, total time[s] 0.06577 +Converged at iteration 31, L1 9.52156e-05, Linf 0.00481928, total time[s] 0.101168 +Converged at iteration 27, L1 9.41016e-05, Linf 0.00468417, total time[s] 0.071351 +Converged at iteration 24, L1 8.51945e-05, Linf 0.00429569, total time[s] 0.063375 +Converged at iteration 23, L1 9.24018e-05, Linf 0.00432074, total time[s] 0.067242 +Converged at iteration 26, L1 7.12987e-05, Linf 0.0046612, total time[s] 0.130738 +Converged at iteration 29, L1 7.54364e-05, Linf 0.00488663, total time[s] 0.099924 +Converged at iteration 34, L1 8.13561e-05, Linf 0.00406055, total time[s] 0.140696 +Converged at iteration 31, L1 7.34643e-05, Linf 0.00355182, total time[s] 0.102262 +Converged at iteration 29, L1 7.03221e-05, Linf 0.00273394, total time[s] 0.088161 +Converged at iteration 32, L1 8.21953e-05, Linf 0.00356565, total time[s] 0.107654 +Converged at iteration 36, L1 8.76669e-05, Linf 0.00357397, total time[s] 0.120568 +Converged at iteration 33, L1 8.3533e-05, Linf 0.00484786, total time[s] 0.105006 +Converged at iteration 28, L1 9.13976e-05, Linf 0.00413122, total time[s] 0.079692 +Converged at iteration 24, L1 8.03473e-05, Linf 0.00290884, total time[s] 0.076551 +Converged at iteration 26, L1 8.45833e-05, Linf 0.00394139, total time[s] 0.092725 +Converged at iteration 39, L1 9.98306e-05, Linf 0.00489243, total time[s] 0.10672 +Converged at iteration 35, L1 9.62855e-05, Linf 0.00385664, total time[s] 0.092502 +Converged at iteration 30, L1 7.47502e-05, Linf 0.00418691, total time[s] 0.08191 +Converged at iteration 31, L1 6.12918e-05, Linf 0.00506286, total time[s] 0.0847 +Converged at iteration 26, L1 9.09281e-05, Linf 0.00568947, total time[s] 0.067371 +Converged at iteration 21, L1 9.60289e-05, Linf 0.00461333, total time[s] 0.059161 +Converged at iteration 21, L1 6.86211e-05, Linf 0.00393916, total time[s] 0.063971 +Converged at iteration 24, L1 8.15602e-05, Linf 0.00519881, total time[s] 0.064194 +Converged at iteration 28, L1 6.79763e-05, Linf 0.0044035, total time[s] 0.075873 +Converged at iteration 26, L1 8.17551e-05, Linf 0.00431545, total time[s] 0.0692 +Converged at iteration 21, L1 8.59561e-05, Linf 0.00433732, total time[s] 0.056784 +Converged at iteration 18, L1 7.46871e-05, Linf 0.00477141, total time[s] 0.048477 +Converged at iteration 31, L1 7.49286e-05, Linf 0.00268051, total time[s] 0.081559 +Converged at iteration 20, L1 8.20499e-05, Linf 0.00494686, total time[s] 0.058857 +Converged at iteration 24, L1 6.8998e-05, Linf 0.00500052, total time[s] 0.068308 +Converged at iteration 30, L1 9.52694e-05, Linf 0.00346414, total time[s] 0.086636 +Converged at iteration 25, L1 9.30693e-05, Linf 0.00465843, total time[s] 0.076206 +Converged at iteration 23, L1 8.57158e-05, Linf 0.00397513, total time[s] 0.061439 +Converged at iteration 23, L1 9.42148e-05, Linf 0.00456457, total time[s] 0.06196 +Converged at iteration 26, L1 6.91549e-05, Linf 0.00492575, total time[s] 0.071531 +Converged at iteration 29, L1 7.16051e-05, Linf 0.00490385, total time[s] 0.085589 +Converged at iteration 32, L1 8.79868e-05, Linf 0.00351698, total time[s] 0.082985 +Converged at iteration 31, L1 7.31973e-05, Linf 0.0030573, total time[s] 0.082536 +Converged at iteration 29, L1 7.74671e-05, Linf 0.00291149, total time[s] 0.077848 +Converged at iteration 32, L1 7.649e-05, Linf 0.00335195, total time[s] 0.082928 +Converged at iteration 35, L1 9.60825e-05, Linf 0.00405628, total time[s] 0.115971 +Converged at iteration 33, L1 8.05498e-05, Linf 0.00500204, total time[s] 0.119333 +Converged at iteration 28, L1 8.49988e-05, Linf 0.00398734, total time[s] 0.111659 +Converged at iteration 24, L1 7.83621e-05, Linf 0.0025552, total time[s] 0.080932 +Converged at iteration 26, L1 8.324e-05, Linf 0.00405175, total time[s] 0.089963 +Converged at iteration 39, L1 9.68631e-05, Linf 0.0051974, total time[s] 0.123437 +Converged at iteration 36, L1 6.96335e-05, Linf 0.0035242, total time[s] 0.11284 +Converged at iteration 28, L1 7.68424e-05, Linf 0.00570174, total time[s] 0.074103 +Converged at iteration 31, L1 6.08073e-05, Linf 0.00506971, total time[s] 0.080262 +Converged at iteration 26, L1 8.33958e-05, Linf 0.00557622, total time[s] 0.067749 +Converged at iteration 21, L1 8.33506e-05, Linf 0.00424261, total time[s] 0.076504 +Converged at iteration 20, L1 9.30963e-05, Linf 0.00537687, total time[s] 0.068058 +Converged at iteration 23, L1 7.59038e-05, Linf 0.00634906, total time[s] 0.136627 +Converged at iteration 27, L1 8.33104e-05, Linf 0.00548458, total time[s] 0.113285 +Converged at iteration 25, L1 9.85179e-05, Linf 0.00421606, total time[s] 0.074534 +Converged at iteration 21, L1 5.54951e-05, Linf 0.00423399, total time[s] 0.06157 +Converged at iteration 40, L1 6.86753e-05, Linf 0.00367388, total time[s] 0.107168 +Converged at iteration 35, L1 7.64911e-05, Linf 0.00340454, total time[s] 0.120922 +Converged at iteration 30, L1 9.63659e-05, Linf 0.00432793, total time[s] 0.09814 +Converged at iteration 31, L1 6.19678e-05, Linf 0.00502565, total time[s] 0.081757 +Converged at iteration 27, L1 6.25964e-05, Linf 0.00504591, total time[s] 0.075723 +Converged at iteration 22, L1 8.58837e-05, Linf 0.00457632, total time[s] 0.073098 +Converged at iteration 20, L1 9.60241e-05, Linf 0.00397847, total time[s] 0.055331 +Converged at iteration 24, L1 8.84235e-05, Linf 0.00482842, total time[s] 0.071659 +Converged at iteration 28, L1 7.38734e-05, Linf 0.00445904, total time[s] 0.078321 +Converged at iteration 26, L1 8.11755e-05, Linf 0.00546756, total time[s] 0.068394 +Converged at iteration 22, L1 7.40352e-05, Linf 0.00508771, total time[s] 0.072316 +Converged at iteration 19, L1 6.63295e-05, Linf 0.00393098, total time[s] 0.072374 +Converged at iteration 30, L1 7.99034e-05, Linf 0.003308, total time[s] 0.087735 +Converged at iteration 20, L1 8.44265e-05, Linf 0.0045502, total time[s] 0.053398 +Converged at iteration 24, L1 7.10853e-05, Linf 0.00463288, total time[s] 0.06314 +Converged at iteration 31, L1 8.93552e-05, Linf 0.00569168, total time[s] 0.083285 +Converged at iteration 27, L1 9.91961e-05, Linf 0.00569833, total time[s] 0.077061 +Converged at iteration 24, L1 8.78928e-05, Linf 0.00460798, total time[s] 0.100434 +Converged at iteration 23, L1 9.21828e-05, Linf 0.00410195, total time[s] 0.066826 +Converged at iteration 26, L1 7.22135e-05, Linf 0.0044612, total time[s] 0.083913 +Converged at iteration 29, L1 7.81297e-05, Linf 0.00479601, total time[s] 0.076623 +Converged at iteration 34, L1 7.09437e-05, Linf 0.00422688, total time[s] 0.087703 +Converged at iteration 30, L1 9.39646e-05, Linf 0.00442604, total time[s] 0.077573 +Converged at iteration 28, L1 9.50795e-05, Linf 0.00309348, total time[s] 0.077465 +Converged at iteration 32, L1 9.46292e-05, Linf 0.00376412, total time[s] 0.084084 +Converged at iteration 37, L1 7.34674e-05, Linf 0.0032772, total time[s] 0.098405 +Converged at iteration 33, L1 8.44833e-05, Linf 0.00469569, total time[s] 0.085397 +Converged at iteration 28, L1 9.66194e-05, Linf 0.00430122, total time[s] 0.072822 +Converged at iteration 24, L1 8.82993e-05, Linf 0.0032229, total time[s] 0.063387 +Converged at iteration 26, L1 8.98492e-05, Linf 0.0038397, total time[s] 0.069192 +Converged at iteration 40, L1 6.72877e-05, Linf 0.00397987, total time[s] 0.101926 +Converged at iteration 35, L1 8.67008e-05, Linf 0.00364955, total time[s] 0.089844 +Converged at iteration 30, L1 9.18337e-05, Linf 0.00418063, total time[s] 0.078492 +Converged at iteration 31, L1 6.17505e-05, Linf 0.00502316, total time[s] 0.079809 +Converged at iteration 26, L1 9.83503e-05, Linf 0.00577795, total time[s] 0.068918 +Converged at iteration 22, L1 7.16977e-05, Linf 0.00422944, total time[s] 0.058928 +Converged at iteration 21, L1 6.42464e-05, Linf 0.00348499, total time[s] 0.056379 +Converged at iteration 24, L1 8.94219e-05, Linf 0.0049503, total time[s] 0.063444 +Converged at iteration 28, L1 7.32365e-05, Linf 0.00443344, total time[s] 0.07304 +Converged at iteration 26, L1 8.01677e-05, Linf 0.00534712, total time[s] 0.06831 +Converged at iteration 22, L1 7.01794e-05, Linf 0.0044149, total time[s] 0.060548 +Converged at iteration 19, L1 5.49369e-05, Linf 0.00332055, total time[s] 0.052116 +Converged at iteration 30, L1 9.54026e-05, Linf 0.0033078, total time[s] 0.082992 +Converged at iteration 20, L1 8.43233e-05, Linf 0.00472685, total time[s] 0.057834 +Converged at iteration 24, L1 7.12286e-05, Linf 0.00475227, total time[s] 0.082451 +Converged at iteration 31, L1 9.44345e-05, Linf 0.00481984, total time[s] 0.114717 +Converged at iteration 27, L1 9.41091e-05, Linf 0.0046704, total time[s] 0.094687 +Converged at iteration 24, L1 8.5192e-05, Linf 0.00428325, total time[s] 0.074667 +Converged at iteration 23, L1 9.23975e-05, Linf 0.00432074, total time[s] 0.065729 +Converged at iteration 26, L1 7.13221e-05, Linf 0.00465347, total time[s] 0.083796 +Converged at iteration 29, L1 7.51934e-05, Linf 0.00480047, total time[s] 0.087717 +Converged at iteration 34, L1 8.13789e-05, Linf 0.00406157, total time[s] 0.087627 +Converged at iteration 31, L1 7.18832e-05, Linf 0.00355193, total time[s] 0.08525 +Converged at iteration 29, L1 7.02731e-05, Linf 0.00272399, total time[s] 0.076811 +Converged at iteration 32, L1 8.21632e-05, Linf 0.00354569, total time[s] 0.082015 +Converged at iteration 36, L1 8.71614e-05, Linf 0.00357612, total time[s] 0.093859 +Converged at iteration 33, L1 8.32322e-05, Linf 0.00484767, total time[s] 0.091988 +Converged at iteration 28, L1 9.10463e-05, Linf 0.00413182, total time[s] 0.075458 +Converged at iteration 24, L1 8.02489e-05, Linf 0.00290884, total time[s] 0.064257 +Converged at iteration 26, L1 8.39861e-05, Linf 0.00392371, total time[s] 0.070557 +Converged at iteration 39, L1 9.99271e-05, Linf 0.0048916, total time[s] 0.105791 +Converged at iteration 35, L1 9.62995e-05, Linf 0.0038559, total time[s] 0.100588 +Converged at iteration 30, L1 7.6537e-05, Linf 0.00420928, total time[s] 0.078304 +Converged at iteration 31, L1 6.27632e-05, Linf 0.00506464, total time[s] 0.086325 +Converged at iteration 26, L1 9.10942e-05, Linf 0.00568982, total time[s] 0.082475 +Converged at iteration 21, L1 9.60187e-05, Linf 0.00461204, total time[s] 0.064753 +Converged at iteration 21, L1 6.92264e-05, Linf 0.00393125, total time[s] 0.05697 +Converged at iteration 24, L1 8.29655e-05, Linf 0.0051998, total time[s] 0.062851 +Converged at iteration 28, L1 6.79863e-05, Linf 0.00440906, total time[s] 0.07351 +Converged at iteration 26, L1 8.12454e-05, Linf 0.0043002, total time[s] 0.068225 +Converged at iteration 21, L1 8.50957e-05, Linf 0.00433737, total time[s] 0.057339 +Converged at iteration 18, L1 7.3573e-05, Linf 0.00298987, total time[s] 0.051623 +Converged at iteration 31, L1 7.49756e-05, Linf 0.00271081, total time[s] 0.083702 +Converged at iteration 20, L1 8.18505e-05, Linf 0.00494547, total time[s] 0.055276 +Converged at iteration 24, L1 6.88445e-05, Linf 0.00499746, total time[s] 0.06471 +Converged at iteration 30, L1 9.41734e-05, Linf 0.00345572, total time[s] 0.107346 +Converged at iteration 25, L1 9.00947e-05, Linf 0.00466874, total time[s] 0.074249 +Converged at iteration 23, L1 8.35937e-05, Linf 0.0039455, total time[s] 0.073266 +Converged at iteration 23, L1 9.3241e-05, Linf 0.00455942, total time[s] 0.0718 +Converged at iteration 26, L1 6.88785e-05, Linf 0.00492348, total time[s] 0.076846 +Converged at iteration 29, L1 7.12691e-05, Linf 0.00490033, total time[s] 0.078182 +Converged at iteration 32, L1 8.57502e-05, Linf 0.00350849, total time[s] 0.084833 +Converged at iteration 31, L1 7.25365e-05, Linf 0.00305982, total time[s] 0.080393 +Converged at iteration 29, L1 7.7355e-05, Linf 0.00291229, total time[s] 0.075057 +Converged at iteration 32, L1 7.58441e-05, Linf 0.00336137, total time[s] 0.085045 +Converged at iteration 35, L1 9.7474e-05, Linf 0.00406289, total time[s] 0.096116 +Converged at iteration 33, L1 8.08029e-05, Linf 0.00500439, total time[s] 0.103908 +Converged at iteration 28, L1 8.44573e-05, Linf 0.00398783, total time[s] 0.1044 +Converged at iteration 24, L1 7.80398e-05, Linf 0.00256146, total time[s] 0.068858 +Converged at iteration 26, L1 8.42278e-05, Linf 0.0040618, total time[s] 0.105387 +Converged at iteration 39, L1 9.36008e-05, Linf 0.00543013, total time[s] 0.125936 +Converged at iteration 36, L1 7.26808e-05, Linf 0.00384088, total time[s] 0.12022 +Converged at iteration 27, L1 5.17302e-05, Linf 0.00565868, total time[s] 0.087699 +Converged at iteration 31, L1 6.14128e-05, Linf 0.00508913, total time[s] 0.086076 +Converged at iteration 26, L1 7.63358e-05, Linf 0.00544341, total time[s] 0.079736 +Converged at iteration 21, L1 7.17082e-05, Linf 0.00380746, total time[s] 0.070494 +Converged at iteration 20, L1 6.89198e-05, Linf 0.0049912, total time[s] 0.058381 +Converged at iteration 22, L1 7.55991e-05, Linf 0.00751911, total time[s] 0.320729 +Converged at iteration 26, L1 9.72456e-05, Linf 0.0064958, total time[s] 0.192652 +Converged at iteration 25, L1 7.44587e-05, Linf 0.00413094, total time[s] 0.069921 +Converged at iteration 20, L1 8.85011e-05, Linf 0.00556214, total time[s] 0.063588 +Converged at iteration 17, L1 8.52481e-05, Linf 0.00400213, total time[s] 0.067027 +Converged at iteration 31, L1 9.15303e-05, Linf 0.00277909, total time[s] 0.093555 +Converged at iteration 20, L1 6.64196e-05, Linf 0.00539287, total time[s] 0.067556 +Converged at iteration 24, L1 6.22517e-05, Linf 0.00552684, total time[s] 0.079393 +Converged at iteration 28, L1 7.07491e-05, Linf 0.00373874, total time[s] 0.079686 +Converged at iteration 23, L1 9.57e-05, Linf 0.00710106, total time[s] 0.062397 +Converged at iteration 21, L1 9.30109e-05, Linf 0.00485133, total time[s] 0.058372 +Converged at iteration 23, L1 7.89784e-05, Linf 0.00414977, total time[s] 0.060871 +Converged at iteration 25, L1 9.94556e-05, Linf 0.00625627, total time[s] 0.065217 +Converged at iteration 28, L1 9.82526e-05, Linf 0.00586845, total time[s] 0.073085 +Converged at iteration 30, L1 6.86363e-05, Linf 0.00488204, total time[s] 0.076871 +Converged at iteration 28, L1 8.30219e-05, Linf 0.00350203, total time[s] 0.073664 +Converged at iteration 29, L1 8.83244e-05, Linf 0.00329485, total time[s] 0.077168 +Converged at iteration 31, L1 7.01166e-05, Linf 0.00290671, total time[s] 0.083194 +Converged at iteration 31, L1 9.118e-05, Linf 0.0046024, total time[s] 0.082894 +Converged at iteration 33, L1 7.41502e-05, Linf 0.00530518, total time[s] 0.085492 +Converged at iteration 28, L1 7.01613e-05, Linf 0.00373351, total time[s] 0.072917 +Converged at iteration 24, L1 8.80476e-05, Linf 0.00188802, total time[s] 0.065374 +Converged at iteration 25, L1 6.96123e-05, Linf 0.0042715, total time[s] 0.066918 +Converged at iteration 39, L1 7.75113e-05, Linf 0.00652722, total time[s] 0.097439 +Converged at iteration 36, L1 7.33552e-05, Linf 0.00527733, total time[s] 0.10579 +Converged at iteration 24, L1 7.50622e-05, Linf 0.00410726, total time[s] 0.072155 +Converged at iteration 31, L1 5.85749e-05, Linf 0.00509838, total time[s] 0.102039 +Converged at iteration 25, L1 8.69003e-05, Linf 0.0057275, total time[s] 0.11675 +Converged at iteration 20, L1 9.25955e-05, Linf 0.00380232, total time[s] 0.109064 +Converged at iteration 19, L1 6.60579e-05, Linf 0.00441398, total time[s] 0.077113 +Converged at iteration 20, L1 9.17212e-05, Linf 0.00663639, total time[s] 0.068126 +Converged at iteration 24, L1 7.93991e-05, Linf 0.00490455, total time[s] 0.203349 +Converged at iteration 24, L1 7.58382e-05, Linf 0.00492114, total time[s] 0.083185 +Converged at iteration 20, L1 6.05441e-05, Linf 0.00519213, total time[s] 0.063736 +Converged at iteration 17, L1 5.19207e-05, Linf 0.00242835, total time[s] 0.070797 +Converged at iteration 32, L1 6.88609e-05, Linf 0.00253738, total time[s] 0.13147 +Converged at iteration 19, L1 9.3294e-05, Linf 0.00706804, total time[s] 0.096587 +Converged at iteration 23, L1 7.84849e-05, Linf 0.00720181, total time[s] 0.089641 +Converged at iteration 26, L1 8.15346e-05, Linf 0.00603207, total time[s] 0.090988 +Converged at iteration 23, L1 5.79376e-05, Linf 0.00603868, total time[s] 0.115513 +Converged at iteration 20, L1 8.30794e-05, Linf 0.00554045, total time[s] 0.059976 +Converged at iteration 22, L1 9.94592e-05, Linf 0.00479362, total time[s] 0.080063 +Converged at iteration 25, L1 8.48099e-05, Linf 0.0043997, total time[s] 0.070883 +Converged at iteration 28, L1 7.81869e-05, Linf 0.00358718, total time[s] 0.077169 +Converged at iteration 29, L1 7.48355e-05, Linf 0.00612046, total time[s] 0.075884 +Converged at iteration 27, L1 7.34902e-05, Linf 0.0040198, total time[s] 0.072777 +Converged at iteration 29, L1 7.65669e-05, Linf 0.00380597, total time[s] 0.077872 +Converged at iteration 29, L1 9.1792e-05, Linf 0.00277217, total time[s] 0.078078 +Converged at iteration 28, L1 8.43071e-05, Linf 0.00273873, total time[s] 0.079129 +Converged at iteration 33, L1 6.18241e-05, Linf 0.00584957, total time[s] 0.086129 +Converged at iteration 27, L1 6.87738e-05, Linf 0.00331216, total time[s] 0.076256 +Converged at iteration 24, L1 9.66964e-05, Linf 0.00239103, total time[s] 0.073013 +Converged at iteration 23, L1 7.56557e-05, Linf 0.00336643, total time[s] 0.064159 +Converged at iteration 39, L1 7.48593e-05, Linf 0.00661514, total time[s] 0.103141 +Converged at iteration 36, L1 7.23496e-05, Linf 0.0053342, total time[s] 0.117884 +Converged at iteration 24, L1 7.4646e-05, Linf 0.00388, total time[s] 0.067187 +Converged at iteration 31, L1 5.72319e-05, Linf 0.00507393, total time[s] 0.079885 +Converged at iteration 25, L1 8.74873e-05, Linf 0.00584025, total time[s] 0.066468 +Converged at iteration 20, L1 9.54299e-05, Linf 0.00386658, total time[s] 0.054619 +Converged at iteration 19, L1 6.48777e-05, Linf 0.00434046, total time[s] 0.09111 +Converged at iteration 20, L1 9.02239e-05, Linf 0.00655214, total time[s] 0.079437 +Converged at iteration 24, L1 7.68082e-05, Linf 0.00459197, total time[s] 0.106821 +Converged at iteration 24, L1 7.95421e-05, Linf 0.00890005, total time[s] 0.068968 +Converged at iteration 20, L1 6.16823e-05, Linf 0.00515336, total time[s] 0.063386 +Converged at iteration 16, L1 9.93383e-05, Linf 0.00457314, total time[s] 0.055785 +Converged at iteration 32, L1 6.88795e-05, Linf 0.00257304, total time[s] 0.120026 +Converged at iteration 19, L1 9.34937e-05, Linf 0.00697182, total time[s] 0.052538 +Converged at iteration 23, L1 7.78832e-05, Linf 0.00702782, total time[s] 0.069835 +Converged at iteration 26, L1 7.99061e-05, Linf 0.00595813, total time[s] 0.070221 +Converged at iteration 23, L1 5.78975e-05, Linf 0.00597926, total time[s] 0.063172 +Converged at iteration 20, L1 8.28252e-05, Linf 0.00551202, total time[s] 0.055255 +Converged at iteration 23, L1 6.37346e-05, Linf 0.00287818, total time[s] 0.060816 +Converged at iteration 25, L1 8.38946e-05, Linf 0.00420101, total time[s] 0.066163 +Converged at iteration 28, L1 7.72598e-05, Linf 0.00351835, total time[s] 0.07482 +Converged at iteration 29, L1 7.49784e-05, Linf 0.00611728, total time[s] 0.075344 +Converged at iteration 27, L1 7.40131e-05, Linf 0.00398462, total time[s] 0.073716 +Converged at iteration 29, L1 7.77642e-05, Linf 0.00382132, total time[s] 0.080497 +Converged at iteration 29, L1 9.26001e-05, Linf 0.00277465, total time[s] 0.079861 +Converged at iteration 28, L1 8.19854e-05, Linf 0.00266476, total time[s] 0.081765 +Converged at iteration 33, L1 6.02396e-05, Linf 0.00585337, total time[s] 0.125459 +Converged at iteration 27, L1 6.95721e-05, Linf 0.00343141, total time[s] 0.078458 +Converged at iteration 24, L1 9.99898e-05, Linf 0.00243524, total time[s] 0.071565 +Converged at iteration 23, L1 7.55067e-05, Linf 0.00324361, total time[s] 0.062439 +Converged at iteration 39, L1 7.25903e-05, Linf 0.00662255, total time[s] 0.112333 +Converged at iteration 36, L1 7.0073e-05, Linf 0.00539842, total time[s] 0.096288 +Converged at iteration 24, L1 7.37654e-05, Linf 0.00367853, total time[s] 0.06524 +Converged at iteration 31, L1 5.73743e-05, Linf 0.0050447, total time[s] 0.086174 +Converged at iteration 25, L1 8.88016e-05, Linf 0.00599535, total time[s] 0.070805 +Converged at iteration 20, L1 9.83753e-05, Linf 0.00391926, total time[s] 0.057212 +Converged at iteration 19, L1 6.15791e-05, Linf 0.00426967, total time[s] 0.060073 +Converged at iteration 20, L1 8.83097e-05, Linf 0.00608499, total time[s] 0.063545 +Converged at iteration 24, L1 7.42849e-05, Linf 0.00422538, total time[s] 0.07098 +Converged at iteration 24, L1 7.79495e-05, Linf 0.00506508, total time[s] 0.078536 +Converged at iteration 20, L1 6.23627e-05, Linf 0.005174, total time[s] 0.08929 +Converged at iteration 16, L1 9.79358e-05, Linf 0.00481223, total time[s] 0.084247 +Converged at iteration 32, L1 6.8595e-05, Linf 0.00259849, total time[s] 0.101062 +Converged at iteration 19, L1 9.38025e-05, Linf 0.00687712, total time[s] 0.053377 +Converged at iteration 23, L1 7.70288e-05, Linf 0.00694588, total time[s] 0.067543 +Converged at iteration 26, L1 7.96986e-05, Linf 0.00592945, total time[s] 0.075927 +Converged at iteration 23, L1 5.69079e-05, Linf 0.00600132, total time[s] 0.06391 +Converged at iteration 20, L1 8.36593e-05, Linf 0.0055135, total time[s] 0.054705 +Converged at iteration 23, L1 6.5132e-05, Linf 0.00283392, total time[s] 0.063567 +Converged at iteration 25, L1 8.33853e-05, Linf 0.00403669, total time[s] 0.069376 +Converged at iteration 28, L1 7.71167e-05, Linf 0.00361912, total time[s] 0.075047 +Converged at iteration 29, L1 7.58752e-05, Linf 0.00618406, total time[s] 0.077273 +Converged at iteration 27, L1 7.52103e-05, Linf 0.00397697, total time[s] 0.079205 +Converged at iteration 29, L1 7.91617e-05, Linf 0.00386721, total time[s] 0.076123 +Converged at iteration 29, L1 9.23325e-05, Linf 0.00278043, total time[s] 0.075618 +Converged at iteration 28, L1 8.43261e-05, Linf 0.00260606, total time[s] 0.077846 +Converged at iteration 33, L1 5.83916e-05, Linf 0.005852, total time[s] 0.085527 +Converged at iteration 27, L1 7.00142e-05, Linf 0.00353874, total time[s] 0.076597 +Converged at iteration 25, L1 7.13957e-05, Linf 0.00193522, total time[s] 0.070614 +Converged at iteration 23, L1 7.43705e-05, Linf 0.00321786, total time[s] 0.065894 +Converged at iteration 39, L1 7.10521e-05, Linf 0.00661557, total time[s] 0.111927 +Converged at iteration 36, L1 6.83244e-05, Linf 0.00545743, total time[s] 0.097711 +Converged at iteration 24, L1 7.31327e-05, Linf 0.00336448, total time[s] 0.071548 +Converged at iteration 31, L1 5.67068e-05, Linf 0.00499766, total time[s] 0.096746 +Converged at iteration 25, L1 9.26066e-05, Linf 0.00625669, total time[s] 0.085138 +Converged at iteration 21, L1 5.86336e-05, Linf 0.00343222, total time[s] 0.05779 +Converged at iteration 19, L1 5.99371e-05, Linf 0.0040967, total time[s] 0.054363 +Converged at iteration 20, L1 8.60242e-05, Linf 0.00645559, total time[s] 0.07216 +Converged at iteration 24, L1 7.17646e-05, Linf 0.00445208, total time[s] 0.067579 +Converged at iteration 24, L1 8.08215e-05, Linf 0.00520117, total time[s] 0.064305 +Converged at iteration 20, L1 6.49337e-05, Linf 0.00543411, total time[s] 0.063526 +Converged at iteration 16, L1 9.72953e-05, Linf 0.0050694, total time[s] 0.045056 +Converged at iteration 32, L1 6.77953e-05, Linf 0.00262254, total time[s] 0.084214 +Converged at iteration 19, L1 9.43456e-05, Linf 0.00674388, total time[s] 0.054847 +Converged at iteration 23, L1 7.69089e-05, Linf 0.00682941, total time[s] 0.061631 +Converged at iteration 26, L1 8.02143e-05, Linf 0.00589214, total time[s] 0.069431 +Converged at iteration 23, L1 5.6384e-05, Linf 0.00596983, total time[s] 0.061935 +Converged at iteration 20, L1 8.53086e-05, Linf 0.0055157, total time[s] 0.054569 +Converged at iteration 23, L1 6.78391e-05, Linf 0.0027843, total time[s] 0.060833 +Converged at iteration 25, L1 8.40188e-05, Linf 0.00390326, total time[s] 0.067014 +Converged at iteration 28, L1 7.77674e-05, Linf 0.00378822, total time[s] 0.077473 +Converged at iteration 29, L1 7.74686e-05, Linf 0.00623793, total time[s] 0.075481 +Converged at iteration 27, L1 7.70237e-05, Linf 0.00395751, total time[s] 0.070093 +Converged at iteration 29, L1 8.09815e-05, Linf 0.0038804, total time[s] 0.077542 +Converged at iteration 29, L1 9.27521e-05, Linf 0.00278265, total time[s] 0.079982 +Converged at iteration 28, L1 8.05939e-05, Linf 0.00253967, total time[s] 0.074688 +Converged at iteration 32, L1 9.89661e-05, Linf 0.0069628, total time[s] 0.086199 +Converged at iteration 27, L1 7.25303e-05, Linf 0.00375308, total time[s] 0.071858 +Converged at iteration 25, L1 7.20554e-05, Linf 0.00198891, total time[s] 0.066623 +Converged at iteration 23, L1 7.49401e-05, Linf 0.00309926, total time[s] 0.063206 +Converged at iteration 39, L1 6.97252e-05, Linf 0.00658595, total time[s] 0.10147 +Converged at iteration 36, L1 6.636e-05, Linf 0.00550519, total time[s] 0.096113 +Converged at iteration 24, L1 7.2595e-05, Linf 0.00310408, total time[s] 0.064073 +Converged at iteration 30, L1 9.68898e-05, Linf 0.00610828, total time[s] 0.07881 +Converged at iteration 25, L1 9.83684e-05, Linf 0.00663265, total time[s] 0.06749 +Converged at iteration 21, L1 6.44351e-05, Linf 0.0033362, total time[s] 0.059811 +Converged at iteration 19, L1 5.85685e-05, Linf 0.00392803, total time[s] 0.051373 +Converged at iteration 20, L1 8.29017e-05, Linf 0.00614834, total time[s] 0.055364 +Converged at iteration 24, L1 6.87619e-05, Linf 0.00350185, total time[s] 0.065067 +Converged at iteration 24, L1 8.50447e-05, Linf 0.00539644, total time[s] 0.06448 +Converged at iteration 20, L1 6.93193e-05, Linf 0.00568782, total time[s] 0.054821 +Converged at iteration 16, L1 9.70602e-05, Linf 0.00538018, total time[s] 0.045591 +Converged at iteration 32, L1 6.56337e-05, Linf 0.00264257, total time[s] 0.083341 +Converged at iteration 19, L1 9.55244e-05, Linf 0.00657879, total time[s] 0.052748 +Converged at iteration 23, L1 7.66965e-05, Linf 0.00667127, total time[s] 0.061817 +Converged at iteration 26, L1 8.0645e-05, Linf 0.00586075, total time[s] 0.072827 +Converged at iteration 23, L1 5.59682e-05, Linf 0.00597221, total time[s] 0.063239 +Converged at iteration 20, L1 8.83428e-05, Linf 0.00552712, total time[s] 0.055317 +Converged at iteration 23, L1 6.94781e-05, Linf 0.00272159, total time[s] 0.06232 +Converged at iteration 25, L1 8.46334e-05, Linf 0.00378586, total time[s] 0.069995 +Converged at iteration 28, L1 7.92622e-05, Linf 0.00400954, total time[s] 0.082319 +Converged at iteration 29, L1 7.97808e-05, Linf 0.00631196, total time[s] 0.076642 +Converged at iteration 27, L1 7.95318e-05, Linf 0.00392682, total time[s] 0.076562 +Converged at iteration 29, L1 8.26955e-05, Linf 0.00402099, total time[s] 0.090043 +Converged at iteration 29, L1 9.33815e-05, Linf 0.00277529, total time[s] 0.08031 +Converged at iteration 28, L1 8.01643e-05, Linf 0.00247615, total time[s] 0.077132 +Converged at iteration 32, L1 9.61238e-05, Linf 0.00693281, total time[s] 0.087428 +Converged at iteration 27, L1 7.58123e-05, Linf 0.0040726, total time[s] 0.072764 +Converged at iteration 25, L1 6.94005e-05, Linf 0.00201749, total time[s] 0.071771 +Converged at iteration 23, L1 7.49419e-05, Linf 0.00299971, total time[s] 0.062833 +Converged at iteration 39, L1 6.92546e-05, Linf 0.00654745, total time[s] 0.130652 +Converged at iteration 36, L1 6.32461e-05, Linf 0.00555572, total time[s] 0.105478 +Converged at iteration 24, L1 7.26441e-05, Linf 0.00308086, total time[s] 0.064929 +Converged at iteration 30, L1 9.5176e-05, Linf 0.00605403, total time[s] 0.078577 +Converged at iteration 26, L1 5.9489e-05, Linf 0.00588357, total time[s] 0.069293 +Converged at iteration 21, L1 7.51085e-05, Linf 0.00336586, total time[s] 0.068392 +Converged at iteration 19, L1 5.76845e-05, Linf 0.00394751, total time[s] 0.070621 +Converged at iteration 20, L1 7.96215e-05, Linf 0.00641117, total time[s] 0.05696 +Converged at iteration 24, L1 6.54766e-05, Linf 0.00398206, total time[s] 0.065897 +Converged at iteration 24, L1 8.91381e-05, Linf 0.00563873, total time[s] 0.106582 +Converged at iteration 20, L1 7.45792e-05, Linf 0.00581748, total time[s] 0.05637 +Converged at iteration 16, L1 9.67883e-05, Linf 0.00575045, total time[s] 0.046464 +Converged at iteration 32, L1 6.26733e-05, Linf 0.00266323, total time[s] 0.08957 +Converged at iteration 19, L1 9.39356e-05, Linf 0.00640274, total time[s] 0.057527 +Converged at iteration 23, L1 7.60008e-05, Linf 0.00645794, total time[s] 0.063156 +Converged at iteration 26, L1 8.21898e-05, Linf 0.00585349, total time[s] 0.076318 +Converged at iteration 23, L1 5.51454e-05, Linf 0.00599427, total time[s] 0.062413 +Converged at iteration 20, L1 9.32429e-05, Linf 0.00550914, total time[s] 0.061875 +Converged at iteration 23, L1 7.17747e-05, Linf 0.00264771, total time[s] 0.067021 +Converged at iteration 25, L1 8.62405e-05, Linf 0.0036755, total time[s] 0.069839 +Converged at iteration 28, L1 8.08962e-05, Linf 0.00429525, total time[s] 0.073039 +Converged at iteration 29, L1 8.27403e-05, Linf 0.00638515, total time[s] 0.075156 +Converged at iteration 27, L1 8.30847e-05, Linf 0.00389598, total time[s] 0.070969 +Converged at iteration 29, L1 8.54002e-05, Linf 0.00404498, total time[s] 0.077861 +Converged at iteration 29, L1 9.44345e-05, Linf 0.00276547, total time[s] 0.07563 +Converged at iteration 28, L1 7.97446e-05, Linf 0.00241717, total time[s] 0.073459 +Converged at iteration 32, L1 9.30949e-05, Linf 0.00687976, total time[s] 0.08209 +Converged at iteration 27, L1 8.22951e-05, Linf 0.00449363, total time[s] 0.071776 +Converged at iteration 24, L1 9.88565e-05, Linf 0.00260701, total time[s] 0.065196 +Converged at iteration 23, L1 7.70058e-05, Linf 0.00283005, total time[s] 0.062008 +Converged at iteration 39, L1 6.71002e-05, Linf 0.00649926, total time[s] 0.103979 +Converged at iteration 36, L1 6.06166e-05, Linf 0.00555483, total time[s] 0.095102 +Converged at iteration 24, L1 7.42764e-05, Linf 0.00293692, total time[s] 0.063364 +Converged at iteration 30, L1 9.1377e-05, Linf 0.00598937, total time[s] 0.078331 +Converged at iteration 26, L1 6.48418e-05, Linf 0.00632795, total time[s] 0.068518 +Converged at iteration 21, L1 9.11427e-05, Linf 0.00434776, total time[s] 0.05716 +Converged at iteration 19, L1 5.74537e-05, Linf 0.00397505, total time[s] 0.055029 +Converged at iteration 20, L1 7.62365e-05, Linf 0.00595761, total time[s] 0.055177 +Converged at iteration 24, L1 6.19281e-05, Linf 0.00327199, total time[s] 0.080127 +Converged at iteration 24, L1 9.39804e-05, Linf 0.00590062, total time[s] 0.068877 +Converged at iteration 20, L1 8.11911e-05, Linf 0.00602651, total time[s] 0.057989 +Converged at iteration 16, L1 9.65792e-05, Linf 0.00611399, total time[s] 0.0456 +Converged at iteration 32, L1 5.80078e-05, Linf 0.00267472, total time[s] 0.082371 +Converged at iteration 19, L1 9.29635e-05, Linf 0.00622655, total time[s] 0.054417 +Converged at iteration 23, L1 7.5048e-05, Linf 0.00622672, total time[s] 0.062693 +Converged at iteration 26, L1 8.36334e-05, Linf 0.00582404, total time[s] 0.067975 +Converged at iteration 23, L1 5.48213e-05, Linf 0.00601761, total time[s] 0.063282 +Converged at iteration 20, L1 9.93861e-05, Linf 0.00559422, total time[s] 0.054098 +Converged at iteration 23, L1 7.3638e-05, Linf 0.00256234, total time[s] 0.060795 +Converged at iteration 25, L1 8.73121e-05, Linf 0.0035825, total time[s] 0.067762 +Converged at iteration 28, L1 8.29849e-05, Linf 0.0044769, total time[s] 0.072787 +Converged at iteration 29, L1 8.58667e-05, Linf 0.00647895, total time[s] 0.07554 +Converged at iteration 27, L1 8.6086e-05, Linf 0.00387795, total time[s] 0.071338 +Converged at iteration 29, L1 8.80263e-05, Linf 0.00414083, total time[s] 0.076082 +Converged at iteration 29, L1 9.43393e-05, Linf 0.00277904, total time[s] 0.079297 +Converged at iteration 28, L1 8.12407e-05, Linf 0.00236579, total time[s] 0.075182 +Converged at iteration 32, L1 8.90314e-05, Linf 0.00680238, total time[s] 0.089076 +Converged at iteration 27, L1 8.8044e-05, Linf 0.00499296, total time[s] 0.072029 +Converged at iteration 25, L1 6.39722e-05, Linf 0.00198667, total time[s] 0.066015 +Converged at iteration 23, L1 7.97842e-05, Linf 0.0026939, total time[s] 0.062239 +Converged at iteration 39, L1 6.5304e-05, Linf 0.00642923, total time[s] 0.100271 +Converged at iteration 36, L1 5.46101e-05, Linf 0.00550442, total time[s] 0.094344 +Converged at iteration 24, L1 7.67219e-05, Linf 0.00285119, total time[s] 0.063324 +Converged at iteration 30, L1 8.84132e-05, Linf 0.00588242, total time[s] 0.077652 +Converged at iteration 26, L1 6.98042e-05, Linf 0.00684286, total time[s] 0.069139 +Converged at iteration 22, L1 5.97712e-05, Linf 0.00432296, total time[s] 0.058957 +Converged at iteration 19, L1 5.76313e-05, Linf 0.00406191, total time[s] 0.051857 +Converged at iteration 20, L1 7.30462e-05, Linf 0.00563158, total time[s] 0.05524 +Converged at iteration 24, L1 5.87449e-05, Linf 0.00322706, total time[s] 0.063548 +Converged at iteration 24, L1 9.97893e-05, Linf 0.00617965, total time[s] 0.063225 +Converged at iteration 20, L1 8.82776e-05, Linf 0.00610862, total time[s] 0.054353 +Converged at iteration 16, L1 9.63606e-05, Linf 0.00643576, total time[s] 0.045206 +Converged at iteration 31, L1 9.37991e-05, Linf 0.00325833, total time[s] 0.079503 +Converged at iteration 19, L1 9.07165e-05, Linf 0.00603156, total time[s] 0.052263 +Converged at iteration 23, L1 7.31706e-05, Linf 0.00595926, total time[s] 0.061421 +Converged at iteration 26, L1 8.47799e-05, Linf 0.00579116, total time[s] 0.068492 +Converged at iteration 23, L1 5.54952e-05, Linf 0.00605979, total time[s] 0.060744 +Converged at iteration 21, L1 5.70248e-05, Linf 0.00472407, total time[s] 0.056146 +Converged at iteration 23, L1 7.40415e-05, Linf 0.00245284, total time[s] 0.061952 +Converged at iteration 25, L1 8.78029e-05, Linf 0.00348763, total time[s] 0.065861 +Converged at iteration 28, L1 8.56756e-05, Linf 0.00465366, total time[s] 0.072547 +Converged at iteration 29, L1 8.97178e-05, Linf 0.00656972, total time[s] 0.076842 +Converged at iteration 27, L1 8.95828e-05, Linf 0.00387022, total time[s] 0.074389 +Converged at iteration 29, L1 9.02981e-05, Linf 0.00419803, total time[s] 0.079911 +Converged at iteration 29, L1 9.53777e-05, Linf 0.00282453, total time[s] 0.133531 +Converged at iteration 28, L1 8.18828e-05, Linf 0.00232851, total time[s] 0.100466 +Converged at iteration 32, L1 8.38328e-05, Linf 0.00670319, total time[s] 0.089848 +Converged at iteration 27, L1 9.63198e-05, Linf 0.00555525, total time[s] 0.094615 +Converged at iteration 25, L1 6.54006e-05, Linf 0.0020293, total time[s] 0.109194 +Converged at iteration 23, L1 8.29384e-05, Linf 0.00260817, total time[s] 0.074017 +Converged at iteration 39, L1 6.17741e-05, Linf 0.00631272, total time[s] 0.127243 +Converged at iteration 35, L1 8.87578e-05, Linf 0.00645668, total time[s] 0.129975 +Converged at iteration 24, L1 7.96637e-05, Linf 0.00293197, total time[s] 0.087901 +Converged at iteration 30, L1 8.35067e-05, Linf 0.00582306, total time[s] 0.109131 +Converged at iteration 26, L1 7.6256e-05, Linf 0.00737178, total time[s] 0.081597 +Converged at iteration 22, L1 7.69621e-05, Linf 0.00539501, total time[s] 0.063267 +Converged at iteration 19, L1 5.82787e-05, Linf 0.00407585, total time[s] 0.049813 +Converged at iteration 20, L1 6.97846e-05, Linf 0.0053738, total time[s] 0.066978 +Converged at iteration 24, L1 5.5797e-05, Linf 0.00313787, total time[s] 0.065211 +Converged at iteration 25, L1 5.65324e-05, Linf 0.00523367, total time[s] 0.120412 +Converged at iteration 20, L1 9.6539e-05, Linf 0.00626067, total time[s] 0.064212 +Converged at iteration 16, L1 9.71989e-05, Linf 0.00666173, total time[s] 0.043423 +Converged at iteration 31, L1 8.88666e-05, Linf 0.00328759, total time[s] 0.085856 +Converged at iteration 19, L1 8.67184e-05, Linf 0.00596103, total time[s] 0.05017 +Converged at iteration 23, L1 7.1347e-05, Linf 0.00565803, total time[s] 0.059733 +Converged at iteration 26, L1 8.57935e-05, Linf 0.00571999, total time[s] 0.066016 +Converged at iteration 23, L1 5.65626e-05, Linf 0.00609794, total time[s] 0.06037 +Converged at iteration 21, L1 6.20051e-05, Linf 0.00470516, total time[s] 0.055144 +Converged at iteration 23, L1 7.36761e-05, Linf 0.00231204, total time[s] 0.067976 +Converged at iteration 25, L1 8.73734e-05, Linf 0.00340964, total time[s] 0.075077 +Converged at iteration 28, L1 8.90129e-05, Linf 0.00489107, total time[s] 0.07406 +Converged at iteration 29, L1 9.37291e-05, Linf 0.00665575, total time[s] 0.086787 +Converged at iteration 27, L1 9.27966e-05, Linf 0.00386546, total time[s] 0.071071 +Converged at iteration 29, L1 9.04788e-05, Linf 0.00433587, total time[s] 0.086378 +Converged at iteration 29, L1 9.6011e-05, Linf 0.00286522, total time[s] 0.075415 +Converged at iteration 28, L1 8.13355e-05, Linf 0.00228485, total time[s] 0.071669 +Converged at iteration 32, L1 7.77877e-05, Linf 0.00668442, total time[s] 0.080963 +Converged at iteration 28, L1 6.07635e-05, Linf 0.0051835, total time[s] 0.072452 +Converged at iteration 25, L1 6.91343e-05, Linf 0.00272389, total time[s] 0.064692 +Converged at iteration 23, L1 8.62481e-05, Linf 0.00256694, total time[s] 0.059952 +Converged at iteration 39, L1 5.62259e-05, Linf 0.00619857, total time[s] 0.097343 +Converged at iteration 35, L1 8.16842e-05, Linf 0.00651656, total time[s] 0.089635 +Converged at iteration 24, L1 8.38297e-05, Linf 0.00299021, total time[s] 0.06445 +Converged at iteration 30, L1 7.77857e-05, Linf 0.00572403, total time[s] 0.076233 +Converged at iteration 26, L1 8.04121e-05, Linf 0.00796383, total time[s] 0.066483 +Converged at iteration 22, L1 9.96157e-05, Linf 0.00651593, total time[s] 0.061195 +Converged at iteration 19, L1 6.07509e-05, Linf 0.00418835, total time[s] 0.054721 +Converged at iteration 20, L1 6.69796e-05, Linf 0.00485722, total time[s] 0.055447 +Converged at iteration 24, L1 5.3652e-05, Linf 0.00309805, total time[s] 0.065486 +Converged at iteration 25, L1 6.05593e-05, Linf 0.00553507, total time[s] 0.067057 +Converged at iteration 21, L1 5.31137e-05, Linf 0.00536335, total time[s] 0.057626 +Converged at iteration 16, L1 9.83825e-05, Linf 0.00678747, total time[s] 0.046164 +Converged at iteration 31, L1 8.46683e-05, Linf 0.00331445, total time[s] 0.08829 +Converged at iteration 19, L1 8.01578e-05, Linf 0.00554096, total time[s] 0.0565 +Converged at iteration 23, L1 6.84945e-05, Linf 0.00530244, total time[s] 0.061664 +Converged at iteration 26, L1 8.77208e-05, Linf 0.00561741, total time[s] 0.069965 +Converged at iteration 23, L1 5.75297e-05, Linf 0.00613373, total time[s] 0.061169 +Converged at iteration 21, L1 6.85274e-05, Linf 0.00464676, total time[s] 0.058682 +Converged at iteration 23, L1 7.18801e-05, Linf 0.0021375, total time[s] 0.060297 +Converged at iteration 25, L1 8.82064e-05, Linf 0.00334119, total time[s] 0.067555 +Converged at iteration 28, L1 9.2366e-05, Linf 0.0050412, total time[s] 0.070232 +Converged at iteration 29, L1 9.90025e-05, Linf 0.00676141, total time[s] 0.073107 +Converged at iteration 27, L1 9.63012e-05, Linf 0.00367839, total time[s] 0.06928 +Converged at iteration 29, L1 9.37747e-05, Linf 0.00447163, total time[s] 0.087962 +Converged at iteration 29, L1 9.82729e-05, Linf 0.00291284, total time[s] 0.083694 +Converged at iteration 28, L1 8.34011e-05, Linf 0.00224267, total time[s] 0.073453 +Converged at iteration 32, L1 7.1746e-05, Linf 0.00647696, total time[s] 0.091415 +Converged at iteration 28, L1 6.26027e-05, Linf 0.00567066, total time[s] 0.072764 +Converged at iteration 25, L1 7.61523e-05, Linf 0.00341975, total time[s] 0.084797 +Converged at iteration 23, L1 9.0371e-05, Linf 0.00252793, total time[s] 0.075479 +Converged at iteration 38, L1 9.92229e-05, Linf 0.00734123, total time[s] 0.111382 +Converged at iteration 35, L1 6.81743e-05, Linf 0.00642423, total time[s] 0.093212 +Converged at iteration 24, L1 8.79999e-05, Linf 0.00314446, total time[s] 0.062844 +Converged at iteration 30, L1 7.21146e-05, Linf 0.00562877, total time[s] 0.076175 +Converged at iteration 26, L1 8.61526e-05, Linf 0.0088833, total time[s] 0.068554 +Converged at iteration 23, L1 6.99492e-05, Linf 0.00646847, total time[s] 0.061882 +Converged at iteration 19, L1 6.44249e-05, Linf 0.00434348, total time[s] 0.068246 +Converged at iteration 20, L1 6.44335e-05, Linf 0.0042538, total time[s] 0.059869 +Converged at iteration 23, L1 9.8887e-05, Linf 0.00450796, total time[s] 0.077164 +Converged at iteration 25, L1 6.47015e-05, Linf 0.00581445, total time[s] 0.074599 +Converged at iteration 21, L1 5.85996e-05, Linf 0.00542626, total time[s] 0.059271 +Converged at iteration 16, L1 9.93712e-05, Linf 0.00684099, total time[s] 0.044723 +Converged at iteration 31, L1 8.06914e-05, Linf 0.0033041, total time[s] 0.080561 +Converged at iteration 19, L1 7.21699e-05, Linf 0.00497695, total time[s] 0.05153 +Converged at iteration 23, L1 6.50303e-05, Linf 0.00491907, total time[s] 0.062697 +Converged at iteration 26, L1 8.92676e-05, Linf 0.00550647, total time[s] 0.069801 +Converged at iteration 23, L1 5.89846e-05, Linf 0.00618233, total time[s] 0.058753 +Converged at iteration 21, L1 7.45724e-05, Linf 0.00449116, total time[s] 0.054074 +Converged at iteration 23, L1 7.00691e-05, Linf 0.00194953, total time[s] 0.058585 +Converged at iteration 25, L1 8.83206e-05, Linf 0.0032619, total time[s] 0.064784 +Converged at iteration 28, L1 9.55514e-05, Linf 0.00556923, total time[s] 0.071925 +Converged at iteration 30, L1 5.14154e-05, Linf 0.00431791, total time[s] 0.077386 +Converged at iteration 27, L1 9.83953e-05, Linf 0.00363273, total time[s] 0.069058 +Converged at iteration 29, L1 9.8293e-05, Linf 0.00461389, total time[s] 0.073023 +Converged at iteration 29, L1 9.73986e-05, Linf 0.002914, total time[s] 0.07295 +Converged at iteration 28, L1 8.45892e-05, Linf 0.00221193, total time[s] 0.070175 +Converged at iteration 32, L1 6.21489e-05, Linf 0.00625314, total time[s] 0.079297 +Converged at iteration 28, L1 7.0109e-05, Linf 0.00639588, total time[s] 0.069858 +Converged at iteration 25, L1 8.39377e-05, Linf 0.00416555, total time[s] 0.063861 +Converged at iteration 23, L1 9.56487e-05, Linf 0.00266523, total time[s] 0.070019 +Converged at iteration 38, L1 9.00011e-05, Linf 0.00709253, total time[s] 0.148649 +Converged at iteration 35, L1 5.51028e-05, Linf 0.00581669, total time[s] 0.110533 +Converged at iteration 24, L1 9.11398e-05, Linf 0.00326111, total time[s] 0.084757 +Converged at iteration 30, L1 6.65264e-05, Linf 0.0055425, total time[s] 0.082219 +Converged at iteration 26, L1 9.20748e-05, Linf 0.00911679, total time[s] 0.071638 +Converged at iteration 23, L1 8.56672e-05, Linf 0.00737165, total time[s] 0.067502 +Converged at iteration 19, L1 6.85308e-05, Linf 0.00448977, total time[s] 0.076564 +Converged at iteration 20, L1 6.15288e-05, Linf 0.00407864, total time[s] 0.066437 +Converged at iteration 23, L1 9.39451e-05, Linf 0.0045285, total time[s] 0.079609 +Converged at iteration 25, L1 6.9681e-05, Linf 0.00606625, total time[s] 0.081531 +Converged at iteration 21, L1 6.35632e-05, Linf 0.00569105, total time[s] 0.060522 +Converged at iteration 17, L1 5.47583e-05, Linf 0.00482846, total time[s] 0.063163 +Converged at iteration 31, L1 7.78088e-05, Linf 0.00336199, total time[s] 0.103149 +Converged at iteration 19, L1 6.30037e-05, Linf 0.00485093, total time[s] 0.05471 +Converged at iteration 22, L1 9.4187e-05, Linf 0.00527817, total time[s] 0.084147 +Converged at iteration 26, L1 9.11957e-05, Linf 0.00540646, total time[s] 0.101744 +Converged at iteration 23, L1 6.06636e-05, Linf 0.00626498, total time[s] 0.064368 +Converged at iteration 21, L1 8.03395e-05, Linf 0.00443581, total time[s] 0.060509 +Converged at iteration 23, L1 6.76443e-05, Linf 0.00172156, total time[s] 0.108876 +Converged at iteration 25, L1 8.72966e-05, Linf 0.00313186, total time[s] 0.110646 +Converged at iteration 28, L1 9.9019e-05, Linf 0.00563105, total time[s] 0.07637 +Converged at iteration 30, L1 5.41363e-05, Linf 0.00424167, total time[s] 0.079124 +Converged at iteration 28, L1 6.06755e-05, Linf 0.00425254, total time[s] 0.078981 +Converged at iteration 30, L1 6.33576e-05, Linf 0.00389629, total time[s] 0.087931 +Converged at iteration 29, L1 9.84061e-05, Linf 0.00290315, total time[s] 0.078543 +Converged at iteration 28, L1 8.77234e-05, Linf 0.00221275, total time[s] 0.091353 +Converged at iteration 31, L1 9.50745e-05, Linf 0.0075316, total time[s] 0.082179 +Converged at iteration 28, L1 7.86544e-05, Linf 0.00695241, total time[s] 0.075097 +Converged at iteration 25, L1 9.53991e-05, Linf 0.00498425, total time[s] 0.06544 +Converged at iteration 24, L1 5.65208e-05, Linf 0.00200292, total time[s] 0.061832 +Converged at iteration 38, L1 7.89468e-05, Linf 0.0068485, total time[s] 0.105506 +Converged at iteration 34, L1 9.09708e-05, Linf 0.00702514, total time[s] 0.087914 +Converged at iteration 24, L1 9.30488e-05, Linf 0.00335786, total time[s] 0.062159 +Converged at iteration 30, L1 6.21557e-05, Linf 0.00545392, total time[s] 0.080168 +Converged at iteration 26, L1 9.87985e-05, Linf 0.00968641, total time[s] 0.0739 +Converged at iteration 24, L1 5.41192e-05, Linf 0.00683699, total time[s] 0.070117 +Converged at iteration 19, L1 7.43202e-05, Linf 0.00497134, total time[s] 0.05208 +Converged at iteration 20, L1 5.80661e-05, Linf 0.00391199, total time[s] 0.0576 +Converged at iteration 23, L1 9.17012e-05, Linf 0.00455534, total time[s] 0.083974 +Converged at iteration 25, L1 7.12055e-05, Linf 0.00629613, total time[s] 0.068859 +Converged at iteration 21, L1 6.81458e-05, Linf 0.00582572, total time[s] 0.102761 +Converged at iteration 17, L1 5.59826e-05, Linf 0.00497622, total time[s] 0.076011 +Converged at iteration 31, L1 7.5696e-05, Linf 0.00347753, total time[s] 0.20007 +Converged at iteration 18, L1 9.05672e-05, Linf 0.00570638, total time[s] 0.05472 +Converged at iteration 22, L1 8.37295e-05, Linf 0.0048234, total time[s] 0.063683 +Converged at iteration 26, L1 9.48915e-05, Linf 0.00530992, total time[s] 0.084618 +Converged at iteration 23, L1 6.2952e-05, Linf 0.00637375, total time[s] 0.062258 +Converged at iteration 21, L1 8.67145e-05, Linf 0.00430964, total time[s] 0.057672 +Converged at iteration 23, L1 6.43808e-05, Linf 0.00173526, total time[s] 0.063092 +Converged at iteration 25, L1 8.42653e-05, Linf 0.00293007, total time[s] 0.06576 +Converged at iteration 29, L1 6.66638e-05, Linf 0.00408573, total time[s] 0.077521 +Converged at iteration 30, L1 5.70975e-05, Linf 0.00428648, total time[s] 0.080292 +Converged at iteration 28, L1 6.31395e-05, Linf 0.00414016, total time[s] 0.074718 +Converged at iteration 30, L1 6.51834e-05, Linf 0.00401916, total time[s] 0.078118 +Converged at iteration 29, L1 9.77726e-05, Linf 0.0029027, total time[s] 0.075977 +Converged at iteration 28, L1 9.21424e-05, Linf 0.00216109, total time[s] 0.078225 +Converged at iteration 31, L1 8.5782e-05, Linf 0.00741851, total time[s] 0.081732 +Converged at iteration 28, L1 8.72257e-05, Linf 0.00766946, total time[s] 0.07696 +Converged at iteration 26, L1 6.2112e-05, Linf 0.00449619, total time[s] 0.06964 +Converged at iteration 24, L1 5.95893e-05, Linf 0.00213333, total time[s] 0.06525 +Converged at iteration 38, L1 6.86693e-05, Linf 0.0066289, total time[s] 0.112516 +Converged at iteration 34, L1 8.19833e-05, Linf 0.00684888, total time[s] 0.1128 +Converged at iteration 24, L1 9.5483e-05, Linf 0.00343681, total time[s] 0.066294 +Converged at iteration 30, L1 5.78826e-05, Linf 0.00536477, total time[s] 0.080682 +Converged at iteration 27, L1 5.23358e-05, Linf 0.00796778, total time[s] 0.07158 +Converged at iteration 24, L1 6.27564e-05, Linf 0.00768879, total time[s] 0.066012 +Converged at iteration 19, L1 8.00448e-05, Linf 0.00550325, total time[s] 0.094326 +Converged at iteration 20, L1 5.44001e-05, Linf 0.0037677, total time[s] 0.080379 +Converged at iteration 23, L1 9.14529e-05, Linf 0.00460911, total time[s] 0.09745 +Converged at iteration 25, L1 7.52042e-05, Linf 0.00650348, total time[s] 0.0674 +Converged at iteration 21, L1 7.24458e-05, Linf 0.00594038, total time[s] 0.058753 +Converged at iteration 17, L1 5.63337e-05, Linf 0.0050392, total time[s] 0.04975 +Converged at iteration 31, L1 7.41457e-05, Linf 0.00358108, total time[s] 0.087825 +Converged at iteration 18, L1 7.50706e-05, Linf 0.00520968, total time[s] 0.05019 +Converged at iteration 22, L1 7.38909e-05, Linf 0.00432958, total time[s] 0.076274 +Converged at iteration 26, L1 9.87637e-05, Linf 0.00525006, total time[s] 0.111854 +Converged at iteration 23, L1 6.6158e-05, Linf 0.00648969, total time[s] 0.10232 +Converged at iteration 21, L1 9.32909e-05, Linf 0.00412212, total time[s] 0.11004 +Converged at iteration 22, L1 9.75549e-05, Linf 0.00269141, total time[s] 0.055688 +Converged at iteration 25, L1 8.03849e-05, Linf 0.00278215, total time[s] 0.062616 +Converged at iteration 29, L1 6.8963e-05, Linf 0.00492245, total time[s] 0.073757 +Converged at iteration 30, L1 6.0552e-05, Linf 0.00434865, total time[s] 0.074775 +Converged at iteration 28, L1 6.47651e-05, Linf 0.00419618, total time[s] 0.070944 +Converged at iteration 30, L1 6.64319e-05, Linf 0.00414563, total time[s] 0.077397 +Converged at iteration 29, L1 9.99323e-05, Linf 0.0029361, total time[s] 0.093254 +Converged at iteration 28, L1 9.97794e-05, Linf 0.00208185, total time[s] 0.085949 +Converged at iteration 31, L1 8.08267e-05, Linf 0.00728394, total time[s] 0.080709 +Converged at iteration 28, L1 9.51622e-05, Linf 0.00829518, total time[s] 0.07099 +Converged at iteration 26, L1 7.0988e-05, Linf 0.00516264, total time[s] 0.069736 +Converged at iteration 24, L1 6.29027e-05, Linf 0.00226057, total time[s] 0.064136 +Converged at iteration 38, L1 6.19048e-05, Linf 0.00638781, total time[s] 0.100108 +Converged at iteration 34, L1 7.759e-05, Linf 0.00697227, total time[s] 0.092444 +Converged at iteration 24, L1 9.75995e-05, Linf 0.00348812, total time[s] 0.066229 +Converged at iteration 30, L1 5.50972e-05, Linf 0.00527407, total time[s] 0.078569 +Converged at iteration 27, L1 5.49979e-05, Linf 0.00848961, total time[s] 0.073443 +Converged at iteration 24, L1 7.24036e-05, Linf 0.00852745, total time[s] 0.066442 +Converged at iteration 19, L1 8.64273e-05, Linf 0.00497153, total time[s] 0.065274 +Converged at iteration 20, L1 5.15064e-05, Linf 0.00346278, total time[s] 0.055225 +Converged at iteration 23, L1 9.05076e-05, Linf 0.00465877, total time[s] 0.062022 +Converged at iteration 25, L1 7.73346e-05, Linf 0.00668818, total time[s] 0.075017 +Converged at iteration 21, L1 7.76659e-05, Linf 0.00603895, total time[s] 0.077326 +Converged at iteration 17, L1 5.65279e-05, Linf 0.0050508, total time[s] 0.066171 +Converged at iteration 31, L1 7.25247e-05, Linf 0.00369008, total time[s] 0.116775 +Converged at iteration 17, L1 9.97733e-05, Linf 0.00659729, total time[s] 0.055997 +Converged at iteration 21, L1 9.56712e-05, Linf 0.00450893, total time[s] 0.069015 +Converged at iteration 27, L1 5.339e-05, Linf 0.00246061, total time[s] 0.078964 +Converged at iteration 23, L1 6.98728e-05, Linf 0.00660128, total time[s] 0.095408 +Converged at iteration 21, L1 9.99233e-05, Linf 0.00415072, total time[s] 0.072733 +Converged at iteration 22, L1 9.05107e-05, Linf 0.00279977, total time[s] 0.063613 +Converged at iteration 25, L1 7.77157e-05, Linf 0.002482, total time[s] 0.06923 +Converged at iteration 29, L1 7.03976e-05, Linf 0.00470602, total time[s] 0.082462 +Converged at iteration 30, L1 6.74874e-05, Linf 0.00770691, total time[s] 0.103701 +Converged at iteration 28, L1 6.83045e-05, Linf 0.00357456, total time[s] 0.088115 +Converged at iteration 30, L1 6.89389e-05, Linf 0.00429629, total time[s] 0.112445 +Converged at iteration 29, L1 9.85705e-05, Linf 0.00294301, total time[s] 0.10661 +Converged at iteration 29, L1 6.15111e-05, Linf 0.00136369, total time[s] 0.119836 +Converged at iteration 31, L1 7.27964e-05, Linf 0.00710151, total time[s] 0.118336 +Converged at iteration 29, L1 5.18327e-05, Linf 0.00724095, total time[s] 0.089208 +Converged at iteration 26, L1 7.9294e-05, Linf 0.00584849, total time[s] 0.070308 +Converged at iteration 24, L1 6.65027e-05, Linf 0.00236449, total time[s] 0.069783 +Converged at iteration 38, L1 5.7422e-05, Linf 0.00615349, total time[s] 0.112176 +Converged at iteration 34, L1 7.40351e-05, Linf 0.00639731, total time[s] 0.104432 +Converged at iteration 24, L1 9.79949e-05, Linf 0.00352933, total time[s] 0.070643 +Converged at iteration 29, L1 9.67217e-05, Linf 0.00681683, total time[s] 0.095224 +Converged at iteration 27, L1 5.9083e-05, Linf 0.00894767, total time[s] 0.085114 +Converged at iteration 24, L1 8.30697e-05, Linf 0.00939698, total time[s] 0.075396 +Converged at iteration 19, L1 9.05717e-05, Linf 0.0048062, total time[s] 0.061518 +Converged at iteration 20, L1 4.90188e-05, Linf 0.00336377, total time[s] 0.058763 +Converged at iteration 23, L1 8.96315e-05, Linf 0.00471728, total time[s] 0.067906 +Converged at iteration 25, L1 8.21844e-05, Linf 0.00686048, total time[s] 0.074192 +Converged at iteration 21, L1 8.09136e-05, Linf 0.00612482, total time[s] 0.086 +Converged at iteration 17, L1 5.6834e-05, Linf 0.00512216, total time[s] 0.04807 +Converged at iteration 31, L1 7.16298e-05, Linf 0.00381479, total time[s] 0.079742 +Converged at iteration 17, L1 7.46941e-05, Linf 0.00604641, total time[s] 0.052333 +Converged at iteration 21, L1 7.88147e-05, Linf 0.00357237, total time[s] 0.056458 +Converged at iteration 27, L1 5.55926e-05, Linf 0.00243022, total time[s] 0.100321 +Converged at iteration 23, L1 7.45084e-05, Linf 0.0067731, total time[s] 0.067587 +Converged at iteration 22, L1 5.7884e-05, Linf 0.00325842, total time[s] 0.060194 +Converged at iteration 22, L1 8.21934e-05, Linf 0.00285269, total time[s] 0.061629 +Converged at iteration 25, L1 7.45023e-05, Linf 0.00229841, total time[s] 0.079965 +Converged at iteration 29, L1 7.09263e-05, Linf 0.00491621, total time[s] 0.140595 +Converged at iteration 30, L1 6.85465e-05, Linf 0.0046127, total time[s] 0.082491 +Converged at iteration 28, L1 6.75547e-05, Linf 0.00363553, total time[s] 0.074298 +Converged at iteration 30, L1 7.14789e-05, Linf 0.00444757, total time[s] 0.076256 +Converged at iteration 29, L1 9.89218e-05, Linf 0.00293656, total time[s] 0.073521 +Converged at iteration 29, L1 6.441e-05, Linf 0.00132421, total time[s] 0.073588 +Converged at iteration 31, L1 6.48288e-05, Linf 0.00690899, total time[s] 0.078245 +Converged at iteration 29, L1 5.5751e-05, Linf 0.00768908, total time[s] 0.077164 +Converged at iteration 26, L1 8.93538e-05, Linf 0.00658699, total time[s] 0.067452 +Converged at iteration 24, L1 7.10827e-05, Linf 0.00247558, total time[s] 0.065831 +Converged at iteration 38, L1 5.40065e-05, Linf 0.00595047, total time[s] 0.097337 +Converged at iteration 34, L1 7.02228e-05, Linf 0.00604858, total time[s] 0.087813 +Converged at iteration 24, L1 9.89166e-05, Linf 0.00357181, total time[s] 0.062903 +Converged at iteration 29, L1 9.41358e-05, Linf 0.00668338, total time[s] 0.074682 +Converged at iteration 27, L1 6.0312e-05, Linf 0.00939577, total time[s] 0.070163 +Converged at iteration 24, L1 9.13114e-05, Linf 0.0103664, total time[s] 0.063184 +Converged at iteration 19, L1 9.71498e-05, Linf 0.00521002, total time[s] 0.062419 +Converged at iteration 20, L1 4.72351e-05, Linf 0.00336588, total time[s] 0.064566 +Converged at iteration 23, L1 9.05015e-05, Linf 0.00476, total time[s] 0.067061 +Converged at iteration 25, L1 8.47518e-05, Linf 0.00702757, total time[s] 0.070739 +Converged at iteration 21, L1 8.38725e-05, Linf 0.00593695, total time[s] 0.058831 +Converged at iteration 17, L1 5.67411e-05, Linf 0.00491112, total time[s] 0.044615 +Converged at iteration 31, L1 7.00574e-05, Linf 0.00396046, total time[s] 0.077759 +Converged at iteration 17, L1 5.58064e-05, Linf 0.00523588, total time[s] 0.044711 +Converged at iteration 20, L1 9.3815e-05, Linf 0.00379308, total time[s] 0.054091 +Converged at iteration 27, L1 5.82171e-05, Linf 0.00248514, total time[s] 0.069273 +Converged at iteration 23, L1 7.74852e-05, Linf 0.00687259, total time[s] 0.061165 +Converged at iteration 22, L1 6.17366e-05, Linf 0.00351352, total time[s] 0.059049 +Converged at iteration 22, L1 7.74913e-05, Linf 0.00297062, total time[s] 0.06612 +Converged at iteration 25, L1 7.13693e-05, Linf 0.00196265, total time[s] 0.066646 +Converged at iteration 29, L1 7.07955e-05, Linf 0.00502035, total time[s] 0.083441 +Converged at iteration 30, L1 7.2509e-05, Linf 0.00482581, total time[s] 0.081855 +Converged at iteration 28, L1 6.84337e-05, Linf 0.00363461, total time[s] 0.07891 +Converged at iteration 30, L1 7.46057e-05, Linf 0.00460608, total time[s] 0.079236 +Converged at iteration 29, L1 9.87986e-05, Linf 0.00296574, total time[s] 0.078415 +Converged at iteration 29, L1 6.77331e-05, Linf 0.00127884, total time[s] 0.079897 +Converged at iteration 31, L1 5.72391e-05, Linf 0.00670648, total time[s] 0.112595 +Converged at iteration 29, L1 5.98581e-05, Linf 0.00833665, total time[s] 0.080037 +Converged at iteration 27, L1 5.35228e-05, Linf 0.00582414, total time[s] 0.084219 +Converged at iteration 24, L1 7.50441e-05, Linf 0.00261665, total time[s] 0.06669 +Converged at iteration 37, L1 9.59392e-05, Linf 0.0070532, total time[s] 0.168459 +Converged at iteration 34, L1 6.62663e-05, Linf 0.00581969, total time[s] 0.09469 +Converged at iteration 24, L1 9.99485e-05, Linf 0.00363652, total time[s] 0.064534 +Converged at iteration 29, L1 8.85411e-05, Linf 0.00661272, total time[s] 0.080426 +Converged at iteration 27, L1 6.41062e-05, Linf 0.00985286, total time[s] 0.083353 +Converged at iteration 25, L1 4.42384e-05, Linf 0.00882085, total time[s] 0.067506 +Converged at iteration 20, L1 4.14104e-05, Linf 0.00377554, total time[s] 0.055556 +Converged at iteration 20, L1 4.51487e-05, Linf 0.00336552, total time[s] 0.067904 +Converged at iteration 23, L1 9.16547e-05, Linf 0.00479528, total time[s] 0.069678 +Converged at iteration 25, L1 8.75033e-05, Linf 0.00719394, total time[s] 0.066785 +Converged at iteration 21, L1 8.55331e-05, Linf 0.00600104, total time[s] 0.063131 +Converged at iteration 17, L1 5.74807e-05, Linf 0.00476805, total time[s] 0.048901 +Converged at iteration 31, L1 6.80155e-05, Linf 0.00413221, total time[s] 0.081747 +Converged at iteration 16, L1 9.33039e-05, Linf 0.00768297, total time[s] 0.048039 +Converged at iteration 20, L1 6.63693e-05, Linf 0.00282277, total time[s] 0.062993 +Converged at iteration 27, L1 5.9476e-05, Linf 0.00264192, total time[s] 0.074612 +Converged at iteration 23, L1 8.1295e-05, Linf 0.00700445, total time[s] 0.061337 +Converged at iteration 22, L1 6.61077e-05, Linf 0.00324928, total time[s] 0.060901 +Converged at iteration 22, L1 8.21784e-05, Linf 0.00312745, total time[s] 0.058826 +Converged at iteration 25, L1 6.85743e-05, Linf 0.00205234, total time[s] 0.066134 +Converged at iteration 29, L1 7.13523e-05, Linf 0.00466465, total time[s] 0.079127 +Converged at iteration 30, L1 7.5995e-05, Linf 0.00503521, total time[s] 0.078091 +Converged at iteration 28, L1 6.88395e-05, Linf 0.00372838, total time[s] 0.075531 +Converged at iteration 30, L1 7.74917e-05, Linf 0.00478011, total time[s] 0.079052 +Converged at iteration 30, L1 6.32331e-05, Linf 0.00227815, total time[s] 0.078424 +Converged at iteration 29, L1 7.15661e-05, Linf 0.00127206, total time[s] 0.075629 +Converged at iteration 30, L1 9.50642e-05, Linf 0.0084987, total time[s] 0.080132 +Converged at iteration 29, L1 6.46197e-05, Linf 0.00895719, total time[s] 0.075317 +Converged at iteration 27, L1 6.03524e-05, Linf 0.00635559, total time[s] 0.070958 +Converged at iteration 24, L1 7.9141e-05, Linf 0.00272369, total time[s] 0.064534 +Converged at iteration 37, L1 9.02882e-05, Linf 0.00674878, total time[s] 0.096948 +Converged at iteration 34, L1 6.14291e-05, Linf 0.00555998, total time[s] 0.091094 +Converged at iteration 25, L1 4.34849e-05, Linf 0.00209129, total time[s] 0.068834 +Converged at iteration 29, L1 8.44692e-05, Linf 0.00647115, total time[s] 0.075817 +Converged at iteration 27, L1 6.48825e-05, Linf 0.0103488, total time[s] 0.071197 +Converged at iteration 25, L1 4.91362e-05, Linf 0.00976605, total time[s] 0.067028 +Converged at iteration 20, L1 4.50799e-05, Linf 0.00405208, total time[s] 0.066577 +Converged at iteration 20, L1 4.3338e-05, Linf 0.00338301, total time[s] 0.076581 +Converged at iteration 23, L1 9.24793e-05, Linf 0.00486327, total time[s] 0.062242 +Converged at iteration 25, L1 8.89518e-05, Linf 0.00735222, total time[s] 0.064641 +Converged at iteration 21, L1 8.66272e-05, Linf 0.00598921, total time[s] 0.054947 +Converged at iteration 17, L1 5.87092e-05, Linf 0.00466688, total time[s] 0.046615 +Converged at iteration 31, L1 6.6184e-05, Linf 0.0043323, total time[s] 0.085474 +Converged at iteration 16, L1 9.89312e-05, Linf 0.00664617, total time[s] 0.044665 +Converged at iteration 18, L1 9.96131e-05, Linf 0.00390697, total time[s] 0.049164 +Converged at iteration 27, L1 6.3834e-05, Linf 0.00282064, total time[s] 0.071279 +Converged at iteration 23, L1 8.57871e-05, Linf 0.00713817, total time[s] 0.060784 +Converged at iteration 22, L1 7.09433e-05, Linf 0.00357733, total time[s] 0.058473 +Converged at iteration 22, L1 8.93302e-05, Linf 0.00323141, total time[s] 0.059602 +Converged at iteration 24, L1 9.78844e-05, Linf 0.00196325, total time[s] 0.063211 +Converged at iteration 29, L1 7.20347e-05, Linf 0.00469548, total time[s] 0.0747 +Converged at iteration 30, L1 7.9796e-05, Linf 0.00529366, total time[s] 0.079343 +Converged at iteration 28, L1 6.9791e-05, Linf 0.00370627, total time[s] 0.080035 +Converged at iteration 30, L1 8.12853e-05, Linf 0.00496314, total time[s] 0.081343 +Converged at iteration 30, L1 6.4929e-05, Linf 0.00232053, total time[s] 0.080354 +Converged at iteration 29, L1 7.74131e-05, Linf 0.00133695, total time[s] 0.078147 +Converged at iteration 30, L1 8.6751e-05, Linf 0.00835523, total time[s] 0.090062 +Converged at iteration 29, L1 7.19389e-05, Linf 0.00962926, total time[s] 0.095799 +Converged at iteration 27, L1 6.97219e-05, Linf 0.00715585, total time[s] 0.077779 +Converged at iteration 24, L1 8.31658e-05, Linf 0.00284525, total time[s] 0.063578 +Converged at iteration 37, L1 8.44226e-05, Linf 0.00646125, total time[s] 0.094877 +Converged at iteration 34, L1 5.63513e-05, Linf 0.00535106, total time[s] 0.090096 +Converged at iteration 25, L1 4.54516e-05, Linf 0.00209972, total time[s] 0.072156 +Converged at iteration 29, L1 7.53633e-05, Linf 0.00635186, total time[s] 0.080489 +Converged at iteration 27, L1 6.71933e-05, Linf 0.0108639, total time[s] 0.070988 +Converged at iteration 25, L1 5.4879e-05, Linf 0.0106626, total time[s] 0.066482 +Converged at iteration 20, L1 4.91758e-05, Linf 0.0042446, total time[s] 0.061112 +Converged at iteration 20, L1 4.13923e-05, Linf 0.00337588, total time[s] 0.070294 +Converged at iteration 23, L1 9.48418e-05, Linf 0.00488822, total time[s] 0.075008 +Converged at iteration 25, L1 8.92477e-05, Linf 0.0075074, total time[s] 0.075531 +Converged at iteration 21, L1 8.58415e-05, Linf 0.00610597, total time[s] 0.066001 +Converged at iteration 17, L1 6.07386e-05, Linf 0.00434584, total time[s] 0.048546 +Converged at iteration 31, L1 6.35714e-05, Linf 0.00455266, total time[s] 0.091594 +Converged at iteration 17, L1 7.82682e-05, Linf 0.0029994, total time[s] 0.047383 +Converged at iteration 18, L1 8.11707e-05, Linf 0.00265011, total time[s] 0.051367 +Converged at iteration 27, L1 6.62151e-05, Linf 0.0029756, total time[s] 0.070847 +Converged at iteration 23, L1 9.16577e-05, Linf 0.00743731, total time[s] 0.063686 +Converged at iteration 22, L1 7.52597e-05, Linf 0.00385809, total time[s] 0.06073 +Converged at iteration 22, L1 9.84573e-05, Linf 0.00358351, total time[s] 0.059283 +Converged at iteration 24, L1 9.14848e-05, Linf 0.00161216, total time[s] 0.064606 +Converged at iteration 29, L1 7.26196e-05, Linf 0.00505113, total time[s] 0.080142 +Converged at iteration 30, L1 8.44668e-05, Linf 0.0055686, total time[s] 0.081094 +Converged at iteration 28, L1 6.92629e-05, Linf 0.00335293, total time[s] 0.078758 +Converged at iteration 30, L1 8.45454e-05, Linf 0.00515695, total time[s] 0.081948 +Converged at iteration 30, L1 6.7096e-05, Linf 0.00235964, total time[s] 0.082562 +Converged at iteration 29, L1 8.41577e-05, Linf 0.00154558, total time[s] 0.078759 +Converged at iteration 30, L1 8.00326e-05, Linf 0.00833727, total time[s] 0.079572 +Converged at iteration 29, L1 7.83951e-05, Linf 0.0102219, total time[s] 0.080104 +Converged at iteration 27, L1 7.92513e-05, Linf 0.00802559, total time[s] 0.071632 +Converged at iteration 24, L1 8.7781e-05, Linf 0.00299815, total time[s] 0.066296 +Converged at iteration 37, L1 7.8577e-05, Linf 0.00621185, total time[s] 0.098725 +Converged at iteration 34, L1 5.16045e-05, Linf 0.00516509, total time[s] 0.091426 +Converged at iteration 25, L1 4.67852e-05, Linf 0.00205836, total time[s] 0.067394 +Converged at iteration 29, L1 6.91774e-05, Linf 0.00619087, total time[s] 0.076357 +Converged at iteration 27, L1 7.09683e-05, Linf 0.011383, total time[s] 0.07286 +Converged at iteration 25, L1 6.11903e-05, Linf 0.0115832, total time[s] 0.067558 +Converged at iteration 20, L1 5.25594e-05, Linf 0.00443876, total time[s] 0.055211 +Converged at iteration 19, L1 9.54917e-05, Linf 0.00510325, total time[s] 0.054174 +Converged at iteration 23, L1 9.59125e-05, Linf 0.00488282, total time[s] 0.063021 +Converged at iteration 25, L1 8.23009e-05, Linf 0.00766216, total time[s] 0.071075 +Converged at iteration 21, L1 8.64135e-05, Linf 0.00598071, total time[s] 0.059113 +Converged at iteration 17, L1 6.27061e-05, Linf 0.00407961, total time[s] 0.060179 +Converged at iteration 31, L1 6.09348e-05, Linf 0.0047895, total time[s] 0.08639 +Converged at iteration 18, L1 7.18842e-05, Linf 0.00155692, total time[s] 0.056146 +Converged at iteration 19, L1 7.04016e-05, Linf 0.00157086, total time[s] 0.0592 +Converged at iteration 27, L1 7.03008e-05, Linf 0.00311617, total time[s] 0.138842 +Converged at iteration 23, L1 9.74955e-05, Linf 0.00784083, total time[s] 0.13834 +Converged at iteration 22, L1 7.97841e-05, Linf 0.00426133, total time[s] 0.098089 +Converged at iteration 23, L1 6.5271e-05, Linf 0.00279809, total time[s] 0.067868 +Converged at iteration 24, L1 8.50589e-05, Linf 0.00163108, total time[s] 0.074408 +Converged at iteration 29, L1 7.33573e-05, Linf 0.00505093, total time[s] 0.10935 +Converged at iteration 30, L1 8.90143e-05, Linf 0.00579207, total time[s] 0.092819 +Converged at iteration 28, L1 6.9292e-05, Linf 0.00317971, total time[s] 0.11185 +Converged at iteration 30, L1 8.82778e-05, Linf 0.00536452, total time[s] 0.084364 +Converged at iteration 30, L1 6.963e-05, Linf 0.00240046, total time[s] 0.078584 +Converged at iteration 29, L1 9.11201e-05, Linf 0.00173008, total time[s] 0.076607 +Converged at iteration 30, L1 7.46545e-05, Linf 0.00819172, total time[s] 0.078252 +Converged at iteration 29, L1 8.59495e-05, Linf 0.0109712, total time[s] 0.077354 +Converged at iteration 27, L1 9.021e-05, Linf 0.00858872, total time[s] 0.078335 +Converged at iteration 24, L1 9.1164e-05, Linf 0.00308766, total time[s] 0.077576 +Converged at iteration 37, L1 7.27567e-05, Linf 0.00599375, total time[s] 0.109012 +Converged at iteration 33, L1 9.75857e-05, Linf 0.00626836, total time[s] 0.164921 +Converged at iteration 25, L1 4.7442e-05, Linf 0.00202902, total time[s] 0.085026 +Converged at iteration 29, L1 6.27474e-05, Linf 0.00599089, total time[s] 0.085309 +Converged at iteration 27, L1 7.51396e-05, Linf 0.0118907, total time[s] 0.070779 +Converged at iteration 25, L1 6.76998e-05, Linf 0.0124466, total time[s] 0.070619 +Converged at iteration 20, L1 5.58802e-05, Linf 0.00464608, total time[s] 0.055322 +Converged at iteration 19, L1 8.77638e-05, Linf 0.00512256, total time[s] 0.052555 +Converged at iteration 23, L1 9.95993e-05, Linf 0.00490101, total time[s] 0.06236 +Converged at iteration 25, L1 7.01599e-05, Linf 0.00778479, total time[s] 0.065929 +Converged at iteration 21, L1 8.48492e-05, Linf 0.00592194, total time[s] 0.060117 +Converged at iteration 17, L1 6.63575e-05, Linf 0.00376092, total time[s] 0.051027 +Converged at iteration 31, L1 5.84066e-05, Linf 0.00502592, total time[s] 0.092889 +Converged at iteration 18, L1 9.16269e-05, Linf 0.00212573, total time[s] 0.053593 +Converged at iteration 20, L1 6.67304e-05, Linf 0.0020858, total time[s] 0.055702 +Converged at iteration 27, L1 7.46009e-05, Linf 0.00329868, total time[s] 0.077012 +Converged at iteration 24, L1 4.78544e-05, Linf 0.00379632, total time[s] 0.065256 +Converged at iteration 22, L1 8.38915e-05, Linf 0.00466203, total time[s] 0.061317 +Converged at iteration 23, L1 7.26848e-05, Linf 0.00277207, total time[s] 0.064334 +Converged at iteration 24, L1 7.81885e-05, Linf 0.00163595, total time[s] 0.071434 +Converged at iteration 29, L1 7.36497e-05, Linf 0.00512173, total time[s] 0.086746 +Converged at iteration 30, L1 9.43713e-05, Linf 0.00609409, total time[s] 0.083262 +Converged at iteration 28, L1 6.89136e-05, Linf 0.00291091, total time[s] 0.075105 +Converged at iteration 30, L1 9.21807e-05, Linf 0.0055932, total time[s] 0.087714 +Converged at iteration 30, L1 7.18748e-05, Linf 0.00245126, total time[s] 0.080254 +Converged at iteration 29, L1 9.91842e-05, Linf 0.00191417, total time[s] 0.077813 +Converged at iteration 30, L1 6.97214e-05, Linf 0.0078354, total time[s] 0.081582 +Converged at iteration 29, L1 9.37213e-05, Linf 0.0119085, total time[s] 0.105277 +Converged at iteration 28, L1 4.74724e-05, Linf 0.00745668, total time[s] 0.083352 +Converged at iteration 24, L1 9.63341e-05, Linf 0.00323478, total time[s] 0.066241 +Converged at iteration 37, L1 6.66533e-05, Linf 0.00589175, total time[s] 0.099138 +Converged at iteration 33, L1 9.15271e-05, Linf 0.00599651, total time[s] 0.093726 +Converged at iteration 25, L1 4.97245e-05, Linf 0.00200542, total time[s] 0.068734 +Converged at iteration 29, L1 5.64304e-05, Linf 0.00580382, total time[s] 0.077152 +Converged at iteration 27, L1 7.71213e-05, Linf 0.0123075, total time[s] 0.071597 +Converged at iteration 25, L1 7.45444e-05, Linf 0.0132683, total time[s] 0.070152 +Converged at iteration 20, L1 5.97223e-05, Linf 0.00503839, total time[s] 0.054777 +Converged at iteration 19, L1 7.98363e-05, Linf 0.00513638, total time[s] 0.056804 +Converged at iteration 24, L1 5.36275e-05, Linf 0.00302707, total time[s] 0.070433 +Converged at iteration 25, L1 5.91971e-05, Linf 0.00785096, total time[s] 0.080507 +Converged at iteration 21, L1 8.33979e-05, Linf 0.00591682, total time[s] 0.067037 +Converged at iteration 17, L1 7.0779e-05, Linf 0.00338728, total time[s] 0.069453 +Converged at iteration 31, L1 5.70573e-05, Linf 0.00533752, total time[s] 0.088398 +Converged at iteration 19, L1 7.00144e-05, Linf 0.00274379, total time[s] 0.064139 +Converged at iteration 20, L1 9.26275e-05, Linf 0.00297054, total time[s] 0.065944 +Converged at iteration 27, L1 8.29377e-05, Linf 0.00349569, total time[s] 0.082296 +Converged at iteration 24, L1 5.60526e-05, Linf 0.00401344, total time[s] 0.07359 +Converged at iteration 22, L1 8.89142e-05, Linf 0.00491125, total time[s] 0.059835 +Converged at iteration 23, L1 8.19057e-05, Linf 0.0030068, total time[s] 0.086601 +Converged at iteration 24, L1 7.07572e-05, Linf 0.00164943, total time[s] 0.073982 +Converged at iteration 29, L1 7.22264e-05, Linf 0.0051687, total time[s] 0.079332 +Converged at iteration 31, L1 5.2414e-05, Linf 0.00344923, total time[s] 0.085061 +Converged at iteration 28, L1 6.82076e-05, Linf 0.0030322, total time[s] 0.078856 +Converged at iteration 30, L1 9.58801e-05, Linf 0.00575511, total time[s] 0.089896 +Converged at iteration 30, L1 7.46224e-05, Linf 0.00252221, total time[s] 0.092425 +Converged at iteration 30, L1 5.77179e-05, Linf 0.00121907, total time[s] 0.091343 +Converged at iteration 30, L1 6.56342e-05, Linf 0.00773877, total time[s] 0.083192 +Converged at iteration 30, L1 4.01679e-05, Linf 0.00944392, total time[s] 0.083336 +Converged at iteration 28, L1 5.42266e-05, Linf 0.00819027, total time[s] 0.074569 +Converged at iteration 25, L1 5.33051e-05, Linf 0.00204288, total time[s] 0.074273 +Converged at iteration 37, L1 6.07948e-05, Linf 0.00564752, total time[s] 0.098545 +Converged at iteration 33, L1 8.65749e-05, Linf 0.00572873, total time[s] 0.089967 +Converged at iteration 25, L1 5.0215e-05, Linf 0.00205688, total time[s] 0.071178 +Converged at iteration 28, L1 9.67193e-05, Linf 0.0077035, total time[s] 0.073864 +Converged at iteration 27, L1 7.99781e-05, Linf 0.0126671, total time[s] 0.071493 +Converged at iteration 25, L1 8.10747e-05, Linf 0.0142514, total time[s] 0.066509 +Converged at iteration 20, L1 6.41027e-05, Linf 0.00539627, total time[s] 0.062628 +Converged at iteration 19, L1 7.45556e-05, Linf 0.00515856, total time[s] 0.063447 +Converged at iteration 24, L1 5.37256e-05, Linf 0.00299974, total time[s] 0.085884 +Converged at iteration 25, L1 4.92989e-05, Linf 0.00784118, total time[s] 0.092886 +Converged at iteration 21, L1 8.12871e-05, Linf 0.00587689, total time[s] 0.10374 +Converged at iteration 17, L1 7.67603e-05, Linf 0.00297359, total time[s] 0.054387 +Converged at iteration 31, L1 5.65391e-05, Linf 0.00561007, total time[s] 0.093822 +Converged at iteration 19, L1 8.42015e-05, Linf 0.00335226, total time[s] 0.055437 +Converged at iteration 21, L1 7.70885e-05, Linf 0.00354091, total time[s] 0.064557 +Converged at iteration 27, L1 7.72435e-05, Linf 0.00361728, total time[s] 0.076612 +Converged at iteration 24, L1 5.69626e-05, Linf 0.00422086, total time[s] 0.063667 +Converged at iteration 22, L1 9.3257e-05, Linf 0.00507467, total time[s] 0.05949 +Converged at iteration 23, L1 9.2242e-05, Linf 0.00354749, total time[s] 0.061205 +Converged at iteration 23, L1 9.05072e-05, Linf 0.00243254, total time[s] 0.062616 +Converged at iteration 29, L1 7.14563e-05, Linf 0.00522656, total time[s] 0.0806 +Converged at iteration 31, L1 5.60511e-05, Linf 0.0037769, total time[s] 0.088967 +Converged at iteration 28, L1 6.66702e-05, Linf 0.00279471, total time[s] 0.084366 +Converged at iteration 30, L1 9.9892e-05, Linf 0.00611508, total time[s] 0.078639 +Converged at iteration 30, L1 7.79075e-05, Linf 0.00264121, total time[s] 0.078271 +Converged at iteration 30, L1 6.04638e-05, Linf 0.00131333, total time[s] 0.080713 +Converged at iteration 30, L1 6.22214e-05, Linf 0.00753191, total time[s] 0.078528 +Converged at iteration 30, L1 4.36913e-05, Linf 0.0100738, total time[s] 0.078568 +Converged at iteration 28, L1 6.16518e-05, Linf 0.00892886, total time[s] 0.073676 +Converged at iteration 25, L1 5.47856e-05, Linf 0.00207746, total time[s] 0.066025 +Converged at iteration 37, L1 5.54403e-05, Linf 0.00550223, total time[s] 0.098085 +Converged at iteration 33, L1 8.29026e-05, Linf 0.00543141, total time[s] 0.095398 +Converged at iteration 25, L1 5.17348e-05, Linf 0.00212571, total time[s] 0.068365 +Converged at iteration 28, L1 9.35362e-05, Linf 0.00763972, total time[s] 0.073561 +Converged at iteration 27, L1 8.32647e-05, Linf 0.0129757, total time[s] 0.072709 +Converged at iteration 25, L1 8.75595e-05, Linf 0.014897, total time[s] 0.072732 +Converged at iteration 20, L1 6.86352e-05, Linf 0.00582199, total time[s] 0.055477 +Converged at iteration 19, L1 7.08401e-05, Linf 0.0051679, total time[s] 0.052117 +Converged at iteration 24, L1 5.52756e-05, Linf 0.00296081, total time[s] 0.074146 +Converged at iteration 24, L1 9.41768e-05, Linf 0.0105396, total time[s] 0.067537 +Converged at iteration 21, L1 7.82169e-05, Linf 0.00588164, total time[s] 0.064734 +Converged at iteration 17, L1 8.40212e-05, Linf 0.00250575, total time[s] 0.047139 +Converged at iteration 31, L1 5.72568e-05, Linf 0.00592649, total time[s] 0.083323 +Converged at iteration 20, L1 6.09725e-05, Linf 0.00361761, total time[s] 0.061889 +Converged at iteration 21, L1 9.28121e-05, Linf 0.00455134, total time[s] 0.056439 +Converged at iteration 27, L1 7.85205e-05, Linf 0.0036866, total time[s] 0.071462 +Converged at iteration 24, L1 6.10293e-05, Linf 0.00438656, total time[s] 0.063521 +Converged at iteration 22, L1 9.89592e-05, Linf 0.00530109, total time[s] 0.059492 +Converged at iteration 24, L1 5.84432e-05, Linf 0.00296104, total time[s] 0.065169 +Converged at iteration 23, L1 8.15247e-05, Linf 0.00242972, total time[s] 0.06248 +Converged at iteration 29, L1 7.00301e-05, Linf 0.00512158, total time[s] 0.079993 +Converged at iteration 31, L1 5.93709e-05, Linf 0.00392639, total time[s] 0.08051 +Converged at iteration 28, L1 6.48613e-05, Linf 0.00274656, total time[s] 0.074271 +Converged at iteration 31, L1 5.52595e-05, Linf 0.00492589, total time[s] 0.091639 +Converged at iteration 30, L1 8.09894e-05, Linf 0.0027617, total time[s] 0.081756 +Converged at iteration 30, L1 6.41791e-05, Linf 0.00142186, total time[s] 0.081911 +Converged at iteration 30, L1 5.91456e-05, Linf 0.0073021, total time[s] 0.080889 +Converged at iteration 30, L1 4.78196e-05, Linf 0.0107869, total time[s] 0.080376 +Converged at iteration 28, L1 6.97528e-05, Linf 0.00969065, total time[s] 0.075123 +Converged at iteration 25, L1 5.62165e-05, Linf 0.00213308, total time[s] 0.071999 +Converged at iteration 36, L1 9.55035e-05, Linf 0.00670243, total time[s] 0.09634 +Converged at iteration 33, L1 8.08903e-05, Linf 0.00512421, total time[s] 0.091275 +Converged at iteration 25, L1 5.34999e-05, Linf 0.00221098, total time[s] 0.067764 +Converged at iteration 28, L1 8.38046e-05, Linf 0.00761121, total time[s] 0.075752 +Converged at iteration 27, L1 8.22919e-05, Linf 0.0125025, total time[s] 0.074092 +Converged at iteration 25, L1 9.59243e-05, Linf 0.0158166, total time[s] 0.068135 +Converged at iteration 20, L1 7.36915e-05, Linf 0.00671074, total time[s] 0.057258 +Converged at iteration 19, L1 6.91512e-05, Linf 0.00518828, total time[s] 0.053885 +Converged at iteration 24, L1 5.51749e-05, Linf 0.00292048, total time[s] 0.066129 +Converged at iteration 24, L1 8.04233e-05, Linf 0.0104803, total time[s] 0.066161 +Converged at iteration 21, L1 7.39202e-05, Linf 0.00589439, total time[s] 0.058011 +Converged at iteration 17, L1 9.42464e-05, Linf 0.00215786, total time[s] 0.048418 +Converged at iteration 31, L1 5.96599e-05, Linf 0.00623991, total time[s] 0.080944 +Converged at iteration 20, L1 7.18898e-05, Linf 0.00452766, total time[s] 0.055874 +Converged at iteration 22, L1 6.3565e-05, Linf 0.00431217, total time[s] 0.060433 +Converged at iteration 27, L1 8.24871e-05, Linf 0.00777629, total time[s] 0.072576 +Converged at iteration 24, L1 6.94161e-05, Linf 0.00451321, total time[s] 0.06652 +Converged at iteration 23, L1 5.64084e-05, Linf 0.00347568, total time[s] 0.062362 +Converged at iteration 24, L1 6.6423e-05, Linf 0.00341366, total time[s] 0.070089 +Converged at iteration 23, L1 7.58407e-05, Linf 0.0028721, total time[s] 0.06388 +Converged at iteration 29, L1 6.76914e-05, Linf 0.0052648, total time[s] 0.075103 +Converged at iteration 31, L1 6.4842e-05, Linf 0.00417509, total time[s] 0.07993 +Converged at iteration 28, L1 6.34216e-05, Linf 0.00272392, total time[s] 0.077835 +Converged at iteration 31, L1 5.66252e-05, Linf 0.00516536, total time[s] 0.080828 +Converged at iteration 30, L1 8.44672e-05, Linf 0.00283862, total time[s] 0.077252 +Converged at iteration 30, L1 6.73503e-05, Linf 0.00164011, total time[s] 0.07803 +Converged at iteration 30, L1 5.77706e-05, Linf 0.00698798, total time[s] 0.079161 +Converged at iteration 30, L1 5.2789e-05, Linf 0.0115219, total time[s] 0.077418 +Converged at iteration 28, L1 7.89434e-05, Linf 0.0105212, total time[s] 0.079964 +Converged at iteration 25, L1 5.67147e-05, Linf 0.00219388, total time[s] 0.066177 +Converged at iteration 36, L1 8.9021e-05, Linf 0.00664593, total time[s] 0.09343 +Converged at iteration 33, L1 8.03247e-05, Linf 0.00488261, total time[s] 0.088588 +Converged at iteration 25, L1 5.33037e-05, Linf 0.00229947, total time[s] 0.073388 +Converged at iteration 28, L1 7.3978e-05, Linf 0.00759085, total time[s] 0.083895 +Converged at iteration 27, L1 8.18704e-05, Linf 0.0120333, total time[s] 0.071103 +Converged at iteration 26, L1 2.90145e-05, Linf 0.0100008, total time[s] 0.069024 +Converged at iteration 20, L1 7.89689e-05, Linf 0.00706098, total time[s] 0.056769 +Converged at iteration 19, L1 6.94534e-05, Linf 0.00515032, total time[s] 0.055695 +Converged at iteration 24, L1 5.70954e-05, Linf 0.00288534, total time[s] 0.065998 +Converged at iteration 24, L1 6.74004e-05, Linf 0.0102951, total time[s] 0.064146 +Converged at iteration 21, L1 6.47056e-05, Linf 0.00586061, total time[s] 0.057362 +Converged at iteration 18, L1 5.43769e-05, Linf 0.00165175, total time[s] 0.105697 +Converged at iteration 31, L1 6.22403e-05, Linf 0.00656335, total time[s] 0.080913 +Converged at iteration 20, L1 9.01904e-05, Linf 0.00495341, total time[s] 0.054796 +Converged at iteration 22, L1 7.16937e-05, Linf 0.00499456, total time[s] 0.06049 +Converged at iteration 27, L1 8.49416e-05, Linf 0.0039837, total time[s] 0.076817 +Converged at iteration 24, L1 6.71998e-05, Linf 0.00468782, total time[s] 0.064986 +Converged at iteration 23, L1 5.94583e-05, Linf 0.00357154, total time[s] 0.066775 +Converged at iteration 24, L1 7.29381e-05, Linf 0.00397052, total time[s] 0.066762 +Converged at iteration 23, L1 7.46633e-05, Linf 0.00369106, total time[s] 0.06426 +Converged at iteration 28, L1 9.988e-05, Linf 0.00636751, total time[s] 0.072922 +Converged at iteration 31, L1 6.81131e-05, Linf 0.00434197, total time[s] 0.07894 +Converged at iteration 28, L1 6.14982e-05, Linf 0.0027257, total time[s] 0.073242 +Converged at iteration 31, L1 5.83228e-05, Linf 0.00532362, total time[s] 0.079181 +Converged at iteration 30, L1 8.86031e-05, Linf 0.00295363, total time[s] 0.077313 +Converged at iteration 30, L1 7.18248e-05, Linf 0.00185652, total time[s] 0.077067 +Converged at iteration 30, L1 5.66762e-05, Linf 0.00657552, total time[s] 0.07672 +Converged at iteration 30, L1 5.78094e-05, Linf 0.0125723, total time[s] 0.078233 +Converged at iteration 28, L1 8.89466e-05, Linf 0.0113929, total time[s] 0.072953 +Converged at iteration 25, L1 5.68877e-05, Linf 0.00225564, total time[s] 0.067844 +Converged at iteration 36, L1 8.3209e-05, Linf 0.00664891, total time[s] 0.102911 +Converged at iteration 33, L1 8.11073e-05, Linf 0.0047278, total time[s] 0.089769 +Converged at iteration 25, L1 5.46255e-05, Linf 0.00237892, total time[s] 0.064913 +Converged at iteration 28, L1 5.04364e-05, Linf 0.00750541, total time[s] 0.072115 +Converged at iteration 27, L1 7.75345e-05, Linf 0.0119471, total time[s] 0.069805 +Converged at iteration 26, L1 3.1514e-05, Linf 0.0112431, total time[s] 0.067616 +Converged at iteration 20, L1 8.59917e-05, Linf 0.00736678, total time[s] 0.057177 +Converged at iteration 19, L1 7.13387e-05, Linf 0.00508315, total time[s] 0.051197 +Converged at iteration 24, L1 5.97278e-05, Linf 0.00284971, total time[s] 0.063072 +Converged at iteration 24, L1 5.4596e-05, Linf 0.00997606, total time[s] 0.06309 +Converged at iteration 21, L1 5.32954e-05, Linf 0.0056156, total time[s] 0.05598 +Converged at iteration 18, L1 6.3583e-05, Linf 0.00195617, total time[s] 0.053043 +Converged at iteration 31, L1 6.49995e-05, Linf 0.00695551, total time[s] 0.085493 +Converged at iteration 21, L1 6.30185e-05, Linf 0.00336863, total time[s] 0.055754 +Converged at iteration 22, L1 7.65907e-05, Linf 0.00569488, total time[s] 0.057831 +Converged at iteration 27, L1 8.66797e-05, Linf 0.00414551, total time[s] 0.072249 +Converged at iteration 24, L1 6.96887e-05, Linf 0.00486999, total time[s] 0.06806 +Converged at iteration 23, L1 6.16234e-05, Linf 0.00375836, total time[s] 0.06233 +Converged at iteration 24, L1 8.30768e-05, Linf 0.0056076, total time[s] 0.062551 +Converged at iteration 23, L1 7.81209e-05, Linf 0.00467634, total time[s] 0.060851 +Converged at iteration 28, L1 9.56066e-05, Linf 0.00618673, total time[s] 0.072506 +Converged at iteration 31, L1 7.50549e-05, Linf 0.00503062, total time[s] 0.079451 +Converged at iteration 27, L1 9.96631e-05, Linf 0.00364103, total time[s] 0.077024 +Converged at iteration 31, L1 5.89262e-05, Linf 0.00561032, total time[s] 0.079033 +Converged at iteration 30, L1 9.18425e-05, Linf 0.00300097, total time[s] 0.077226 +Converged at iteration 30, L1 8.18231e-05, Linf 0.00221172, total time[s] 0.076742 +Converged at iteration 30, L1 5.55289e-05, Linf 0.00605745, total time[s] 0.077101 +Converged at iteration 30, L1 6.42497e-05, Linf 0.0137872, total time[s] 0.077038 +Converged at iteration 29, L1 4.11925e-05, Linf 0.00902601, total time[s] 0.074507 +Converged at iteration 25, L1 5.70642e-05, Linf 0.00233741, total time[s] 0.06522 +Converged at iteration 36, L1 7.95432e-05, Linf 0.00641045, total time[s] 0.097044 +Converged at iteration 33, L1 8.291e-05, Linf 0.00473404, total time[s] 0.089476 +Converged at iteration 25, L1 5.4141e-05, Linf 0.00243888, total time[s] 0.077111 +Converged at iteration 27, L1 7.25486e-05, Linf 0.00956535, total time[s] 0.087006 +Converged at iteration 27, L1 7.89151e-05, Linf 0.0114326, total time[s] 0.069597 +Converged at iteration 26, L1 3.37141e-05, Linf 0.0110204, total time[s] 0.067695 +Converged at iteration 20, L1 9.22895e-05, Linf 0.0078117, total time[s] 0.057066 +Converged at iteration 19, L1 7.60953e-05, Linf 0.00502794, total time[s] 0.058273 +Converged at iteration 24, L1 5.96035e-05, Linf 0.00281108, total time[s] 0.073567 +Converged at iteration 24, L1 4.51215e-05, Linf 0.0094481, total time[s] 0.071336 +Converged at iteration 21, L1 4.432e-05, Linf 0.00509547, total time[s] 0.057544 +Converged at iteration 18, L1 7.38109e-05, Linf 0.0022106, total time[s] 0.050378 +Converged at iteration 31, L1 6.73577e-05, Linf 0.00732387, total time[s] 0.083409 +Converged at iteration 21, L1 6.56433e-05, Linf 0.00379944, total time[s] 0.057225 +Converged at iteration 22, L1 8.7069e-05, Linf 0.00622987, total time[s] 0.061142 +Converged at iteration 27, L1 8.37927e-05, Linf 0.00420167, total time[s] 0.071198 +Converged at iteration 24, L1 7.18402e-05, Linf 0.00507781, total time[s] 0.064487 +Converged at iteration 23, L1 6.41758e-05, Linf 0.00389402, total time[s] 0.061614 +Converged at iteration 24, L1 9.14399e-05, Linf 0.00709672, total time[s] 0.064431 +Converged at iteration 23, L1 8.5749e-05, Linf 0.00556479, total time[s] 0.061108 +Converged at iteration 28, L1 9.0038e-05, Linf 0.00588969, total time[s] 0.07379 +Converged at iteration 31, L1 7.94904e-05, Linf 0.00523691, total time[s] 0.083302 +Converged at iteration 27, L1 9.7036e-05, Linf 0.00354548, total time[s] 0.071164 +Converged at iteration 31, L1 5.97537e-05, Linf 0.00595942, total time[s] 0.080411 +Converged at iteration 30, L1 9.81893e-05, Linf 0.00326988, total time[s] 0.078276 +Converged at iteration 30, L1 9.21689e-05, Linf 0.00254844, total time[s] 0.081642 +Converged at iteration 29, L1 9.8446e-05, Linf 0.00912377, total time[s] 0.076281 +Converged at iteration 30, L1 7.3054e-05, Linf 0.015185, total time[s] 0.085573 +Converged at iteration 29, L1 4.75234e-05, Linf 0.00970959, total time[s] 0.09225 +Converged at iteration 25, L1 5.55465e-05, Linf 0.00237923, total time[s] 0.095901 +Converged at iteration 36, L1 7.70206e-05, Linf 0.00628143, total time[s] 0.151609 +Converged at iteration 33, L1 8.63001e-05, Linf 0.00488812, total time[s] 0.091874 +Converged at iteration 25, L1 5.44548e-05, Linf 0.00252741, total time[s] 0.071263 +Converged at iteration 27, L1 4.7857e-05, Linf 0.00923768, total time[s] 0.072357 +Converged at iteration 27, L1 8.05841e-05, Linf 0.011485, total time[s] 0.070546 +Converged at iteration 26, L1 3.47735e-05, Linf 0.0125042, total time[s] 0.077935 +Converged at iteration 20, L1 9.90306e-05, Linf 0.00821893, total time[s] 0.064387 +Converged at iteration 19, L1 7.93004e-05, Linf 0.00493488, total time[s] 0.133885 +Converged at iteration 24, L1 5.98404e-05, Linf 0.00277542, total time[s] 0.116963 +Converged at iteration 23, L1 9.89028e-05, Linf 0.013986, total time[s] 0.07934 +Converged at iteration 20, L1 9.6945e-05, Linf 0.00687232, total time[s] 0.085291 +Converged at iteration 18, L1 8.07904e-05, Linf 0.00252575, total time[s] 0.066533 +Converged at iteration 31, L1 6.98862e-05, Linf 0.0077563, total time[s] 0.115903 +Converged at iteration 21, L1 6.37223e-05, Linf 0.00416976, total time[s] 0.059194 +Converged at iteration 22, L1 9.23882e-05, Linf 0.00685507, total time[s] 0.068063 +Converged at iteration 27, L1 7.97226e-05, Linf 0.00412479, total time[s] 0.077904 +Converged at iteration 24, L1 7.46509e-05, Linf 0.00535026, total time[s] 0.07101 +Converged at iteration 23, L1 6.76224e-05, Linf 0.00398464, total time[s] 0.06483 +Converged at iteration 25, L1 5.51699e-05, Linf 0.00361459, total time[s] 0.072787 +Converged at iteration 23, L1 9.75993e-05, Linf 0.00656669, total time[s] 0.071002 +Converged at iteration 28, L1 8.09192e-05, Linf 0.00551123, total time[s] 0.087362 +Converged at iteration 31, L1 8.60086e-05, Linf 0.00570477, total time[s] 0.09556 +Converged at iteration 27, L1 9.40038e-05, Linf 0.0034676, total time[s] 0.074466 +Converged at iteration 31, L1 6.03762e-05, Linf 0.00624194, total time[s] 0.082661 +Converged at iteration 30, L1 9.70518e-05, Linf 0.00328597, total time[s] 0.078615 +Converged at iteration 31, L1 4.945e-05, Linf 0.00179449, total time[s] 0.080997 +Converged at iteration 29, L1 9.62266e-05, Linf 0.0086258, total time[s] 0.077383 +Converged at iteration 30, L1 8.33458e-05, Linf 0.0161293, total time[s] 0.08177 +Converged at iteration 29, L1 5.24321e-05, Linf 0.0104718, total time[s] 0.076115 +Converged at iteration 25, L1 5.39154e-05, Linf 0.00236254, total time[s] 0.068457 +Converged at iteration 36, L1 7.66616e-05, Linf 0.00631527, total time[s] 0.096136 +Converged at iteration 33, L1 8.98823e-05, Linf 0.00506616, total time[s] 0.097063 +Converged at iteration 25, L1 5.41807e-05, Linf 0.00262416, total time[s] 0.073537 +Converged at iteration 26, L1 8.19532e-05, Linf 0.0114959, total time[s] 0.078159 +Converged at iteration 27, L1 8.04097e-05, Linf 0.0120388, total time[s] 0.074494 +Converged at iteration 26, L1 3.58536e-05, Linf 0.012897, total time[s] 0.077629 +Converged at iteration 21, L1 3.51142e-05, Linf 0.00584344, total time[s] 0.067852 +Converged at iteration 19, L1 8.34806e-05, Linf 0.00482479, total time[s] 0.078567 +Converged at iteration 24, L1 6.03271e-05, Linf 0.00274162, total time[s] 0.095006 +Converged at iteration 23, L1 8.85261e-05, Linf 0.0140473, total time[s] 0.114414 +Converged at iteration 20, L1 9.1467e-05, Linf 0.00628291, total time[s] 0.074345 +Converged at iteration 18, L1 8.74103e-05, Linf 0.00275621, total time[s] 0.077402 +Converged at iteration 31, L1 7.2034e-05, Linf 0.00812349, total time[s] 0.084842 +Converged at iteration 21, L1 8.14827e-05, Linf 0.00442148, total time[s] 0.058161 +Converged at iteration 22, L1 9.68182e-05, Linf 0.00741676, total time[s] 0.064872 +Converged at iteration 27, L1 7.68207e-05, Linf 0.00403972, total time[s] 0.074271 +Converged at iteration 24, L1 7.55851e-05, Linf 0.00555124, total time[s] 0.066388 +Converged at iteration 23, L1 6.91551e-05, Linf 0.00398964, total time[s] 0.063791 +Converged at iteration 25, L1 5.88892e-05, Linf 0.00385539, total time[s] 0.068865 +Converged at iteration 24, L1 6.29621e-05, Linf 0.00533244, total time[s] 0.067222 +Converged at iteration 28, L1 7.29295e-05, Linf 0.00526728, total time[s] 0.075556 +Converged at iteration 31, L1 8.89373e-05, Linf 0.00579866, total time[s] 0.083716 +Converged at iteration 27, L1 9.15625e-05, Linf 0.00338185, total time[s] 0.073345 +Converged at iteration 31, L1 6.11375e-05, Linf 0.00642925, total time[s] 0.088707 +Converged at iteration 30, L1 9.83776e-05, Linf 0.00334504, total time[s] 0.089974 +Converged at iteration 31, L1 5.38841e-05, Linf 0.00198238, total time[s] 0.083955 +Converged at iteration 29, L1 9.49953e-05, Linf 0.00817285, total time[s] 0.08323 +Converged at iteration 30, L1 9.23919e-05, Linf 0.0170438, total time[s] 0.084642 +Converged at iteration 29, L1 5.69249e-05, Linf 0.0110964, total time[s] 0.085197 +Converged at iteration 25, L1 5.32128e-05, Linf 0.00234069, total time[s] 0.071547 +Converged at iteration 36, L1 7.81811e-05, Linf 0.00655873, total time[s] 0.095386 +Converged at iteration 33, L1 9.59891e-05, Linf 0.00535697, total time[s] 0.100157 +Converged at iteration 25, L1 5.83828e-05, Linf 0.00275587, total time[s] 0.068564 +Converged at iteration 26, L1 5.72909e-05, Linf 0.0110906, total time[s] 0.072968 +Converged at iteration 27, L1 8.51192e-05, Linf 0.0124996, total time[s] 0.07322 +Converged at iteration 26, L1 3.74012e-05, Linf 0.0134637, total time[s] 0.076821 +Converged at iteration 21, L1 3.71359e-05, Linf 0.00619201, total time[s] 0.063179 +Converged at iteration 19, L1 8.76701e-05, Linf 0.00465159, total time[s] 0.06119 +Converged at iteration 24, L1 6.30467e-05, Linf 0.00270168, total time[s] 0.076954 +Converged at iteration 23, L1 8.07476e-05, Linf 0.0137115, total time[s] 0.074789 +Converged at iteration 20, L1 8.67928e-05, Linf 0.00538947, total time[s] 0.075416 +Converged at iteration 18, L1 9.71226e-05, Linf 0.00309273, total time[s] 0.06493 +Converged at iteration 31, L1 7.44975e-05, Linf 0.00862178, total time[s] 0.095242 +Converged at iteration 21, L1 9.61414e-05, Linf 0.00453866, total time[s] 0.057486 +Converged at iteration 23, L1 5.74517e-05, Linf 0.00532198, total time[s] 0.079097 +Converged at iteration 27, L1 7.4638e-05, Linf 0.00390115, total time[s] 0.072282 +Converged at iteration 24, L1 7.72096e-05, Linf 0.00567038, total time[s] 0.068035 +Converged at iteration 23, L1 7.18491e-05, Linf 0.00424659, total time[s] 0.062486 +Converged at iteration 25, L1 6.37808e-05, Linf 0.00414133, total time[s] 0.067922 +Converged at iteration 24, L1 7.54185e-05, Linf 0.00616364, total time[s] 0.065837 +Converged at iteration 28, L1 6.23914e-05, Linf 0.00512604, total time[s] 0.093282 +Converged at iteration 31, L1 9.32751e-05, Linf 0.00527955, total time[s] 0.082922 +Converged at iteration 27, L1 8.67084e-05, Linf 0.00321013, total time[s] 0.076261 +Converged at iteration 31, L1 6.2343e-05, Linf 0.00687905, total time[s] 0.083154 +Converged at iteration 31, L1 6.18448e-05, Linf 0.00220291, total time[s] 0.084246 +Converged at iteration 31, L1 6.38297e-05, Linf 0.00230413, total time[s] 0.084515 +Converged at iteration 29, L1 9.46019e-05, Linf 0.00750859, total time[s] 0.07795 +Converged at iteration 31, L1 3.23816e-05, Linf 0.00893994, total time[s] 0.082725 +Converged at iteration 29, L1 6.36681e-05, Linf 0.0118863, total time[s] 0.078281 +Converged at iteration 25, L1 5.2323e-05, Linf 0.00228247, total time[s] 0.068045 +Converged at iteration 36, L1 8.04389e-05, Linf 0.00683944, total time[s] 0.098694 +Converged at iteration 34, L1 4.49668e-05, Linf 0.00430564, total time[s] 0.09916 +Converged at iteration 25, L1 5.98849e-05, Linf 0.00289512, total time[s] 0.07372 +Converged at iteration 26, L1 4.22899e-05, Linf 0.01066, total time[s] 0.071169 +Converged at iteration 27, L1 8.25807e-05, Linf 0.013472, total time[s] 0.07881 +Converged at iteration 26, L1 3.8981e-05, Linf 0.0139359, total time[s] 0.091313 +Converged at iteration 21, L1 4.91198e-05, Linf 0.0063639, total time[s] 0.099861 +Converged at iteration 19, L1 8.97795e-05, Linf 0.00455483, total time[s] 0.064001 +Converged at iteration 24, L1 6.21248e-05, Linf 0.00265307, total time[s] 0.087883 +Converged at iteration 23, L1 7.70446e-05, Linf 0.0132197, total time[s] 0.084387 +Converged at iteration 20, L1 8.43324e-05, Linf 0.0049579, total time[s] 0.059326 +Converged at iteration 19, L1 4.9628e-05, Linf 0.00174794, total time[s] 0.058188 +Converged at iteration 31, L1 7.64121e-05, Linf 0.00899134, total time[s] 0.106764 +Converged at iteration 21, L1 9.83173e-05, Linf 0.00452686, total time[s] 0.06279 +Converged at iteration 23, L1 5.92182e-05, Linf 0.00554314, total time[s] 0.062046 +Converged at iteration 27, L1 7.28276e-05, Linf 0.00383979, total time[s] 0.07562 +Converged at iteration 24, L1 7.66059e-05, Linf 0.00566007, total time[s] 0.065291 +Converged at iteration 23, L1 7.41413e-05, Linf 0.00428711, total time[s] 0.062223 +Converged at iteration 25, L1 6.53261e-05, Linf 0.00428956, total time[s] 0.067397 +Converged at iteration 24, L1 8.67457e-05, Linf 0.00675951, total time[s] 0.067635 +Converged at iteration 27, L1 9.56677e-05, Linf 0.00662883, total time[s] 0.071878 +Converged at iteration 31, L1 9.67896e-05, Linf 0.00543839, total time[s] 0.082325 +Converged at iteration 27, L1 8.24894e-05, Linf 0.00309153, total time[s] 0.075004 +Converged at iteration 31, L1 6.54885e-05, Linf 0.00706296, total time[s] 0.092548 +Converged at iteration 31, L1 6.23554e-05, Linf 0.00228271, total time[s] 0.080544 +Converged at iteration 31, L1 7.00933e-05, Linf 0.00248189, total time[s] 0.083892 +Converged at iteration 29, L1 9.35314e-05, Linf 0.00710572, total time[s] 0.080263 +Converged at iteration 31, L1 3.54074e-05, Linf 0.00922038, total time[s] 0.080892 +Converged at iteration 29, L1 6.94946e-05, Linf 0.0123334, total time[s] 0.075376 +Converged at iteration 25, L1 5.29629e-05, Linf 0.00228294, total time[s] 0.073132 +Converged at iteration 36, L1 8.74139e-05, Linf 0.00767714, total time[s] 0.101045 +Converged at iteration 34, L1 5.25602e-05, Linf 0.00477055, total time[s] 0.124815 +Converged at iteration 25, L1 6.1477e-05, Linf 0.00310664, total time[s] 0.085121 +Converged at iteration 25, L1 6.99861e-05, Linf 0.0128859, total time[s] 0.068526 +Converged at iteration 27, L1 8.22032e-05, Linf 0.0136962, total time[s] 0.072276 +Converged at iteration 26, L1 4.54779e-05, Linf 0.0152769, total time[s] 0.086486 +Converged at iteration 21, L1 3.87804e-05, Linf 0.00685909, total time[s] 0.067873 +Converged at iteration 19, L1 9.33159e-05, Linf 0.00411404, total time[s] 0.08434 +Converged at iteration 24, L1 6.29097e-05, Linf 0.00257226, total time[s] 0.131075 +Converged at iteration 23, L1 7.42839e-05, Linf 0.0108336, total time[s] 0.094179 +Converged at iteration 20, L1 8.97726e-05, Linf 0.00516083, total time[s] 0.071187 +Converged at iteration 19, L1 5.85642e-05, Linf 0.00204464, total time[s] 0.052776 +Converged at iteration 31, L1 8.23402e-05, Linf 0.010128, total time[s] 0.089681 +Converged at iteration 22, L1 7.28654e-05, Linf 0.00279945, total time[s] 0.064376 +Converged at iteration 23, L1 6.85255e-05, Linf 0.00642185, total time[s] 0.059655 +Converged at iteration 27, L1 6.89316e-05, Linf 0.00359768, total time[s] 0.072699 +Converged at iteration 24, L1 7.40558e-05, Linf 0.00551112, total time[s] 0.069146 +Converged at iteration 23, L1 8.11537e-05, Linf 0.00438804, total time[s] 0.060628 +Converged at iteration 25, L1 6.76936e-05, Linf 0.00452911, total time[s] 0.086713 +Converged at iteration 25, L1 6.88122e-05, Linf 0.00595012, total time[s] 0.070279 +Converged at iteration 27, L1 9.08508e-05, Linf 0.00671824, total time[s] 0.088614 +Converged at iteration 32, L1 5.48452e-05, Linf 0.00321046, total time[s] 0.09368 +Converged at iteration 27, L1 7.35513e-05, Linf 0.00278185, total time[s] 0.077063 +Converged at iteration 31, L1 6.79894e-05, Linf 0.0078213, total time[s] 0.084097 +Converged at iteration 31, L1 6.34812e-05, Linf 0.00236285, total time[s] 0.082488 +Converged at iteration 31, L1 8.78075e-05, Linf 0.00328655, total time[s] 0.081256 +Converged at iteration 29, L1 9.4642e-05, Linf 0.00608077, total time[s] 0.077112 +Converged at iteration 31, L1 4.55549e-05, Linf 0.0099406, total time[s] 0.085413 +Converged at iteration 29, L1 7.93863e-05, Linf 0.0139992, total time[s] 0.081051 +Converged at iteration 25, L1 5.19211e-05, Linf 0.00248286, total time[s] 0.074846 +Converged at iteration 36, L1 9.00488e-05, Linf 0.0079301, total time[s] 0.094009 +Converged at iteration 34, L1 5.57689e-05, Linf 0.00451629, total time[s] 0.093803 +Converged at iteration 25, L1 6.04377e-05, Linf 0.00312644, total time[s] 0.074365 +Converged at iteration 25, L1 6.51474e-05, Linf 0.0126189, total time[s] 0.066519 +Converged at iteration 27, L1 8.87731e-05, Linf 0.0137132, total time[s] 0.070243 +Converged at iteration 26, L1 5.14323e-05, Linf 0.0156011, total time[s] 0.071282 +Converged at iteration 21, L1 3.84247e-05, Linf 0.00692084, total time[s] 0.0781 +Converged at iteration 19, L1 9.25307e-05, Linf 0.00407817, total time[s] 0.05579 +Converged at iteration 24, L1 6.25921e-05, Linf 0.00248525, total time[s] 0.071514 +Converged at iteration 23, L1 7.74448e-05, Linf 0.0104241, total time[s] 0.067327 +Converged at iteration 20, L1 9.22018e-05, Linf 0.00512896, total time[s] 0.062429 +Converged at iteration 19, L1 7.01258e-05, Linf 0.00347323, total time[s] 0.076953 +Converged at iteration 31, L1 8.40528e-05, Linf 0.0104565, total time[s] 0.089026 +Converged at iteration 22, L1 7.0523e-05, Linf 0.00281548, total time[s] 0.075938 +Converged at iteration 23, L1 7.273e-05, Linf 0.00631748, total time[s] 0.066654 +Converged at iteration 27, L1 7.13273e-05, Linf 0.0035969, total time[s] 0.07902 +Converged at iteration 24, L1 7.23323e-05, Linf 0.00536231, total time[s] 0.06701 +Converged at iteration 23, L1 8.26937e-05, Linf 0.00444826, total time[s] 0.06423 +Converged at iteration 25, L1 6.96699e-05, Linf 0.00460465, total time[s] 0.06822 +Converged at iteration 25, L1 7.43257e-05, Linf 0.0061953, total time[s] 0.069991 +Converged at iteration 27, L1 8.868e-05, Linf 0.0067456, total time[s] 0.07339 +Converged at iteration 32, L1 5.61326e-05, Linf 0.00320653, total time[s] 0.085618 +Converged at iteration 27, L1 7.04536e-05, Linf 0.00266448, total time[s] 0.075821 +Converged at iteration 31, L1 6.9708e-05, Linf 0.00804051, total time[s] 0.083095 +Converged at iteration 31, L1 6.37455e-05, Linf 0.00234947, total time[s] 0.083232 +Converged at iteration 31, L1 9.49468e-05, Linf 0.0036109, total time[s] 0.082622 +Converged at iteration 29, L1 9.5562e-05, Linf 0.00579583, total time[s] 0.077458 +Converged at iteration 31, L1 4.83021e-05, Linf 0.009963, total time[s] 0.082922 +Converged at iteration 29, L1 8.1622e-05, Linf 0.0144518, total time[s] 0.079759 +Converged at iteration 25, L1 5.24759e-05, Linf 0.00258848, total time[s] 0.072 +Converged at iteration 36, L1 9.33362e-05, Linf 0.00827989, total time[s] 0.126757 +Converged at iteration 34, L1 5.78105e-05, Linf 0.00466262, total time[s] 0.124645 +Converged at iteration 25, L1 5.9355e-05, Linf 0.00318447, total time[s] 0.072626 +Converged at iteration 25, L1 5.70871e-05, Linf 0.0123467, total time[s] 0.07312 +Converged at iteration 27, L1 7.03884e-05, Linf 0.0136715, total time[s] 0.080836 +Converged at iteration 26, L1 4.85894e-05, Linf 0.0158663, total time[s] 0.116114 +Converged at iteration 21, L1 3.80934e-05, Linf 0.0069661, total time[s] 0.077011 +Converged at iteration 19, L1 9.22476e-05, Linf 0.00404736, total time[s] 0.088278 +Converged at iteration 24, L1 6.26019e-05, Linf 0.00249087, total time[s] 0.088848 +Converged at iteration 23, L1 7.61994e-05, Linf 0.00998761, total time[s] 0.077412 +Converged at iteration 20, L1 9.17101e-05, Linf 0.00509499, total time[s] 0.070162 +Converged at iteration 19, L1 6.41586e-05, Linf 0.00216114, total time[s] 0.065293 +Converged at iteration 31, L1 8.38363e-05, Linf 0.0107101, total time[s] 0.086458 +Converged at iteration 22, L1 7.15912e-05, Linf 0.00292243, total time[s] 0.062946 +Converged at iteration 23, L1 7.24191e-05, Linf 0.00643568, total time[s] 0.088267 +Converged at iteration 27, L1 7.16171e-05, Linf 0.00359388, total time[s] 0.080727 +Converged at iteration 24, L1 7.0781e-05, Linf 0.00526085, total time[s] 0.067516 +Converged at iteration 23, L1 8.36115e-05, Linf 0.00449645, total time[s] 0.061061 +Converged at iteration 25, L1 6.9395e-05, Linf 0.00462318, total time[s] 0.069524 +Converged at iteration 25, L1 7.67257e-05, Linf 0.00634291, total time[s] 0.069168 +Converged at iteration 27, L1 8.80264e-05, Linf 0.00676525, total time[s] 0.075345 +Converged at iteration 32, L1 5.71769e-05, Linf 0.00319829, total time[s] 0.089196 +Converged at iteration 27, L1 6.80353e-05, Linf 0.00254927, total time[s] 0.077075 +Converged at iteration 31, L1 6.97912e-05, Linf 0.00816186, total time[s] 0.082763 +Converged at iteration 31, L1 6.30798e-05, Linf 0.00236992, total time[s] 0.080805 +Converged at iteration 32, L1 4.72677e-05, Linf 0.00213105, total time[s] 0.083827 +Converged at iteration 29, L1 9.73484e-05, Linf 0.0055982, total time[s] 0.0764 +Converged at iteration 31, L1 5.05928e-05, Linf 0.0111302, total time[s] 0.082702 +Converged at iteration 29, L1 8.31349e-05, Linf 0.0147268, total time[s] 0.122785 +Converged at iteration 25, L1 5.25188e-05, Linf 0.00259204, total time[s] 0.115191 +Converged at iteration 36, L1 9.81458e-05, Linf 0.00853335, total time[s] 0.110591 +Converged at iteration 34, L1 6.31902e-05, Linf 0.00546045, total time[s] 0.09248 +Converged at iteration 25, L1 5.80245e-05, Linf 0.00325426, total time[s] 0.06575 +Converged at iteration 25, L1 5.17256e-05, Linf 0.0118945, total time[s] 0.065667 +Converged at iteration 27, L1 5.85608e-05, Linf 0.0133619, total time[s] 0.072171 +Converged at iteration 26, L1 5.18772e-05, Linf 0.0163156, total time[s] 0.073387 +Converged at iteration 21, L1 3.83456e-05, Linf 0.00702303, total time[s] 0.093856 +Converged at iteration 19, L1 9.26349e-05, Linf 0.0038695, total time[s] 0.075619 +Converged at iteration 24, L1 6.33433e-05, Linf 0.00255504, total time[s] 0.06895 +Converged at iteration 23, L1 8.00898e-05, Linf 0.00919572, total time[s] 0.066064 +Converged at iteration 20, L1 9.55377e-05, Linf 0.00509043, total time[s] 0.055822 +Converged at iteration 19, L1 6.90723e-05, Linf 0.00229123, total time[s] 0.053329 +Converged at iteration 31, L1 8.52973e-05, Linf 0.0112129, total time[s] 0.082059 +Converged at iteration 22, L1 7.18743e-05, Linf 0.00304567, total time[s] 0.060359 +Converged at iteration 23, L1 7.38452e-05, Linf 0.00673896, total time[s] 0.066788 +Converged at iteration 27, L1 7.06452e-05, Linf 0.00361152, total time[s] 0.073085 +Converged at iteration 24, L1 6.84805e-05, Linf 0.00499476, total time[s] 0.065949 +Converged at iteration 23, L1 8.56886e-05, Linf 0.00459566, total time[s] 0.073927 +Converged at iteration 25, L1 7.16065e-05, Linf 0.00474943, total time[s] 0.086062 +Converged at iteration 25, L1 7.9315e-05, Linf 0.0068446, total time[s] 0.067222 +Converged at iteration 27, L1 8.5306e-05, Linf 0.00695446, total time[s] 0.080132 +Converged at iteration 32, L1 5.88732e-05, Linf 0.00322633, total time[s] 0.101922 +Converged at iteration 27, L1 6.46689e-05, Linf 0.00236244, total time[s] 0.080898 +Converged at iteration 31, L1 7.29115e-05, Linf 0.00846854, total time[s] 0.090907 +Converged at iteration 31, L1 6.40496e-05, Linf 0.00240104, total time[s] 0.089218 +Converged at iteration 32, L1 5.31786e-05, Linf 0.00240409, total time[s] 0.091547 +Converged at iteration 30, L1 6.58316e-05, Linf 0.00309572, total time[s] 0.083929 +Converged at iteration 31, L1 5.50118e-05, Linf 0.0124043, total time[s] 0.080521 +Converged at iteration 29, L1 8.34645e-05, Linf 0.015327, total time[s] 0.077683 +Converged at iteration 25, L1 5.32263e-05, Linf 0.00259818, total time[s] 0.066599 +Converged at iteration 37, L1 4.93254e-05, Linf 0.00676827, total time[s] 0.100983 +Converged at iteration 34, L1 6.62865e-05, Linf 0.00545079, total time[s] 0.089355 +Converged at iteration 25, L1 5.6308e-05, Linf 0.00333556, total time[s] 0.066034 +Converged at iteration 25, L1 4.84952e-05, Linf 0.0116058, total time[s] 0.065077 +Converged at iteration 27, L1 5.59303e-05, Linf 0.0130904, total time[s] 0.06978 +Converged at iteration 26, L1 5.41828e-05, Linf 0.0165458, total time[s] 0.068392 +Converged at iteration 21, L1 3.83269e-05, Linf 0.00708103, total time[s] 0.055724 +Converged at iteration 19, L1 9.25113e-05, Linf 0.00383637, total time[s] 0.051384 +Converged at iteration 24, L1 6.27553e-05, Linf 0.00258403, total time[s] 0.063228 +Converged at iteration 23, L1 8.03721e-05, Linf 0.00881926, total time[s] 0.060338 +Converged at iteration 20, L1 9.64446e-05, Linf 0.0050181, total time[s] 0.057076 +Converged at iteration 19, L1 7.10554e-05, Linf 0.00234156, total time[s] 0.063482 +Converged at iteration 31, L1 8.51937e-05, Linf 0.0114346, total time[s] 0.106484 +Converged at iteration 22, L1 7.13664e-05, Linf 0.00310453, total time[s] 0.059846 +Converged at iteration 23, L1 7.46709e-05, Linf 0.00718473, total time[s] 0.060833 +Converged at iteration 27, L1 6.99352e-05, Linf 0.00360696, total time[s] 0.07155 +Converged at iteration 24, L1 6.72813e-05, Linf 0.00487847, total time[s] 0.063757 +Converged at iteration 23, L1 8.66788e-05, Linf 0.00463261, total time[s] 0.07954 +Converged at iteration 25, L1 7.43674e-05, Linf 0.00479386, total time[s] 0.075921 +Converged at iteration 25, L1 7.98143e-05, Linf 0.00717629, total time[s] 0.071329 +Converged at iteration 27, L1 8.41985e-05, Linf 0.00692183, total time[s] 0.077468 +Converged at iteration 32, L1 6.03027e-05, Linf 0.0032259, total time[s] 0.099229 +Converged at iteration 27, L1 6.39894e-05, Linf 0.00225329, total time[s] 0.078488 +Converged at iteration 31, L1 7.16701e-05, Linf 0.00856415, total time[s] 0.100914 +Converged at iteration 31, L1 6.57394e-05, Linf 0.00250859, total time[s] 0.089695 +Converged at iteration 32, L1 5.40462e-05, Linf 0.00250967, total time[s] 0.082658 +Converged at iteration 30, L1 6.63822e-05, Linf 0.00291144, total time[s] 0.077634 +Converged at iteration 31, L1 5.7263e-05, Linf 0.0128165, total time[s] 0.080486 +Converged at iteration 29, L1 8.34581e-05, Linf 0.0155833, total time[s] 0.077935 +Converged at iteration 25, L1 5.41333e-05, Linf 0.00262763, total time[s] 0.066231 +Converged at iteration 37, L1 5.15778e-05, Linf 0.0070874, total time[s] 0.124376 +Converged at iteration 34, L1 7.19823e-05, Linf 0.00527572, total time[s] 0.153778 +Converged at iteration 25, L1 5.81355e-05, Linf 0.00344582, total time[s] 0.252322 +Converged at iteration 25, L1 4.88649e-05, Linf 0.0111229, total time[s] 0.145644 +Converged at iteration 27, L1 5.65542e-05, Linf 0.0123504, total time[s] 0.093444 +Converged at iteration 26, L1 5.53064e-05, Linf 0.0168195, total time[s] 0.083139 +Converged at iteration 21, L1 3.83382e-05, Linf 0.007126, total time[s] 0.093311 +Converged at iteration 19, L1 9.31018e-05, Linf 0.00380706, total time[s] 0.070374 +Converged at iteration 24, L1 6.27901e-05, Linf 0.00248864, total time[s] 0.088505 +Converged at iteration 23, L1 8.45124e-05, Linf 0.00795567, total time[s] 0.09473 +Converged at iteration 20, L1 9.94634e-05, Linf 0.00495154, total time[s] 0.056052 +Converged at iteration 19, L1 7.64777e-05, Linf 0.00247171, total time[s] 0.064532 +Converged at iteration 31, L1 8.65718e-05, Linf 0.0120003, total time[s] 0.090231 +Converged at iteration 22, L1 6.97271e-05, Linf 0.00319827, total time[s] 0.072741 +Converged at iteration 23, L1 7.94489e-05, Linf 0.00709798, total time[s] 0.06877 +Converged at iteration 27, L1 6.58847e-05, Linf 0.00356484, total time[s] 0.076507 +Converged at iteration 24, L1 6.3781e-05, Linf 0.00460895, total time[s] 0.069703 +Converged at iteration 23, L1 8.67475e-05, Linf 0.00471845, total time[s] 0.063418 +Converged at iteration 25, L1 7.83816e-05, Linf 0.00492688, total time[s] 0.08279 +Converged at iteration 25, L1 8.2545e-05, Linf 0.00826939, total time[s] 0.070828 +Converged at iteration 27, L1 8.34829e-05, Linf 0.00684312, total time[s] 0.072031 +Converged at iteration 32, L1 6.15474e-05, Linf 0.00328342, total time[s] 0.085187 +Converged at iteration 26, L1 9.93166e-05, Linf 0.0030577, total time[s] 0.070734 +Converged at iteration 31, L1 7.31699e-05, Linf 0.00880577, total time[s] 0.082231 +Converged at iteration 31, L1 6.21265e-05, Linf 0.00241206, total time[s] 0.081536 +Converged at iteration 32, L1 5.89037e-05, Linf 0.00273461, total time[s] 0.084232 +Converged at iteration 30, L1 6.93388e-05, Linf 0.00293543, total time[s] 0.079099 +Converged at iteration 31, L1 6.28577e-05, Linf 0.0136167, total time[s] 0.091984 +Converged at iteration 29, L1 8.414e-05, Linf 0.0160861, total time[s] 0.078874 +Converged at iteration 25, L1 5.45666e-05, Linf 0.00255282, total time[s] 0.067732 +Converged at iteration 37, L1 5.31798e-05, Linf 0.00729005, total time[s] 0.097371 +Converged at iteration 34, L1 7.50757e-05, Linf 0.00583345, total time[s] 0.094358 +Converged at iteration 25, L1 5.79826e-05, Linf 0.00350148, total time[s] 0.072817 +Converged at iteration 25, L1 4.54209e-05, Linf 0.0107596, total time[s] 0.067327 +Converged at iteration 26, L1 9.96876e-05, Linf 0.0189712, total time[s] 0.069965 +Converged at iteration 26, L1 5.48627e-05, Linf 0.0168912, total time[s] 0.073058 +Converged at iteration 21, L1 3.86043e-05, Linf 0.00715475, total time[s] 0.060475 +Converged at iteration 19, L1 9.23271e-05, Linf 0.0037584, total time[s] 0.067225 +Converged at iteration 24, L1 6.2013e-05, Linf 0.00246343, total time[s] 0.07513 +Converged at iteration 23, L1 8.76417e-05, Linf 0.00761055, total time[s] 0.088837 +Converged at iteration 21, L1 4.52938e-05, Linf 0.00228255, total time[s] 0.070334 +Converged at iteration 19, L1 7.93828e-05, Linf 0.00254623, total time[s] 0.059052 +Converged at iteration 31, L1 8.62769e-05, Linf 0.0121425, total time[s] 0.103687 +Converged at iteration 22, L1 7.06218e-05, Linf 0.00324557, total time[s] 0.061942 +Converged at iteration 23, L1 8.0196e-05, Linf 0.00719082, total time[s] 0.062511 +Converged at iteration 27, L1 6.3279e-05, Linf 0.00353298, total time[s] 0.09673 +Converged at iteration 24, L1 6.249e-05, Linf 0.00450827, total time[s] 0.087925 +Converged at iteration 23, L1 8.81977e-05, Linf 0.0047595, total time[s] 0.062363 +Converged at iteration 25, L1 7.81814e-05, Linf 0.00499179, total time[s] 0.067345 +Converged at iteration 25, L1 8.46141e-05, Linf 0.00706119, total time[s] 0.068125 +Converged at iteration 27, L1 8.34587e-05, Linf 0.00689112, total time[s] 0.071735 +Converged at iteration 32, L1 6.22678e-05, Linf 0.00332338, total time[s] 0.083037 +Converged at iteration 26, L1 9.6374e-05, Linf 0.00292513, total time[s] 0.068113 +Converged at iteration 31, L1 7.27667e-05, Linf 0.00886149, total time[s] 0.081593 +Converged at iteration 31, L1 6.18079e-05, Linf 0.00238631, total time[s] 0.082744 +Converged at iteration 32, L1 6.15843e-05, Linf 0.0028429, total time[s] 0.084405 +Converged at iteration 30, L1 7.08864e-05, Linf 0.00296344, total time[s] 0.078217 +Converged at iteration 31, L1 6.60837e-05, Linf 0.0144189, total time[s] 0.079898 +Converged at iteration 29, L1 8.42189e-05, Linf 0.0163177, total time[s] 0.091534 +Converged at iteration 25, L1 5.46739e-05, Linf 0.00253008, total time[s] 0.074834 +Converged at iteration 37, L1 5.63881e-05, Linf 0.00779745, total time[s] 0.124671 +Converged at iteration 34, L1 8.25022e-05, Linf 0.00651339, total time[s] 0.125908 +Converged at iteration 25, L1 5.84799e-05, Linf 0.00362463, total time[s] 0.089801 +Converged at iteration 25, L1 4.51424e-05, Linf 0.0101888, total time[s] 0.070724 +Converged at iteration 26, L1 8.33499e-05, Linf 0.0183076, total time[s] 0.068276 +Converged at iteration 26, L1 5.28095e-05, Linf 0.0168628, total time[s] 0.085993 +Converged at iteration 21, L1 3.94018e-05, Linf 0.00717253, total time[s] 0.075438 +Converged at iteration 19, L1 9.32532e-05, Linf 0.00374577, total time[s] 0.08413 +Converged at iteration 24, L1 6.22213e-05, Linf 0.00263366, total time[s] 0.118841 +Converged at iteration 23, L1 9.20024e-05, Linf 0.00668608, total time[s] 0.118316 +Converged at iteration 21, L1 4.78468e-05, Linf 0.00242431, total time[s] 0.098069 +Converged at iteration 19, L1 8.49685e-05, Linf 0.00278486, total time[s] 0.064423 +Converged at iteration 31, L1 8.67711e-05, Linf 0.0125545, total time[s] 0.099507 +Converged at iteration 22, L1 6.70095e-05, Linf 0.00333464, total time[s] 0.074225 +Converged at iteration 23, L1 8.97782e-05, Linf 0.00743396, total time[s] 0.079546 +Converged at iteration 27, L1 6.10295e-05, Linf 0.00343101, total time[s] 0.076727 +Converged at iteration 24, L1 6.33685e-05, Linf 0.00431767, total time[s] 0.077634 +Converged at iteration 23, L1 8.91793e-05, Linf 0.00486707, total time[s] 0.069951 +Converged at iteration 25, L1 8.23049e-05, Linf 0.00516047, total time[s] 0.066463 +Converged at iteration 25, L1 9.20387e-05, Linf 0.00597925, total time[s] 0.067826 +Converged at iteration 27, L1 8.32009e-05, Linf 0.00737599, total time[s] 0.089397 +Converged at iteration 32, L1 6.36823e-05, Linf 0.00335928, total time[s] 0.14148 +Converged at iteration 26, L1 9.18966e-05, Linf 0.00265804, total time[s] 0.147209 +Converged at iteration 31, L1 7.70824e-05, Linf 0.00908118, total time[s] 0.171846 +Converged at iteration 31, L1 5.99857e-05, Linf 0.00245257, total time[s] 0.145527 +Converged at iteration 32, L1 6.63631e-05, Linf 0.0030135, total time[s] 0.124132 +Converged at iteration 30, L1 7.62922e-05, Linf 0.00312142, total time[s] 0.150495 +Converged at iteration 31, L1 7.84347e-05, Linf 0.0151573, total time[s] 0.095562 +Converged at iteration 29, L1 8.51522e-05, Linf 0.0168391, total time[s] 0.089784 +Converged at iteration 25, L1 5.54792e-05, Linf 0.00246554, total time[s] 0.074783 +Converged at iteration 37, L1 5.82091e-05, Linf 0.00786678, total time[s] 0.111849 +Converged at iteration 34, L1 8.63011e-05, Linf 0.00665599, total time[s] 0.106614 +Converged at iteration 25, L1 5.89448e-05, Linf 0.00365017, total time[s] 0.095407 +Converged at iteration 25, L1 4.40201e-05, Linf 0.00982, total time[s] 0.072924 +Converged at iteration 26, L1 7.56486e-05, Linf 0.0178207, total time[s] 0.07142 +Converged at iteration 26, L1 5.13968e-05, Linf 0.0167175, total time[s] 0.082378 +Converged at iteration 21, L1 3.99993e-05, Linf 0.00719142, total time[s] 0.086416 +Converged at iteration 19, L1 9.1204e-05, Linf 0.00368047, total time[s] 0.088562 +Converged at iteration 24, L1 6.11496e-05, Linf 0.00249984, total time[s] 0.10907 +Converged at iteration 23, L1 9.35143e-05, Linf 0.00645055, total time[s] 0.146865 +Converged at iteration 21, L1 4.90272e-05, Linf 0.00249905, total time[s] 0.082703 +Converged at iteration 19, L1 8.80303e-05, Linf 0.00295929, total time[s] 0.059779 +Converged at iteration 31, L1 8.67907e-05, Linf 0.0126519, total time[s] 0.084261 +Converged at iteration 22, L1 7.02316e-05, Linf 0.00337614, total time[s] 0.060687 +Converged at iteration 23, L1 9.38578e-05, Linf 0.00750039, total time[s] 0.081516 +Converged at iteration 27, L1 6.08374e-05, Linf 0.00340767, total time[s] 0.086684 +Converged at iteration 24, L1 6.0079e-05, Linf 0.00430522, total time[s] 0.065445 +Converged at iteration 23, L1 9.00057e-05, Linf 0.00488035, total time[s] 0.072825 +Converged at iteration 25, L1 8.57831e-05, Linf 0.00523048, total time[s] 0.069791 +Converged at iteration 25, L1 9.55288e-05, Linf 0.00606897, total time[s] 0.068524 +Converged at iteration 27, L1 8.1136e-05, Linf 0.00733937, total time[s] 0.07226 +Converged at iteration 32, L1 6.50216e-05, Linf 0.00338252, total time[s] 0.084558 +Converged at iteration 26, L1 8.92342e-05, Linf 0.00252528, total time[s] 0.070534 +Converged at iteration 31, L1 7.42789e-05, Linf 0.00912272, total time[s] 0.083656 +Converged at iteration 31, L1 5.97523e-05, Linf 0.00243157, total time[s] 0.093912 +Converged at iteration 32, L1 6.68575e-05, Linf 0.0030942, total time[s] 0.099494 +Converged at iteration 30, L1 7.86756e-05, Linf 0.00322293, total time[s] 0.089988 +Converged at iteration 31, L1 7.64079e-05, Linf 0.0157094, total time[s] 0.083236 +Converged at iteration 29, L1 8.48742e-05, Linf 0.0170269, total time[s] 0.078535 +Converged at iteration 25, L1 5.54217e-05, Linf 0.0024178, total time[s] 0.06791 +Converged at iteration 37, L1 6.1694e-05, Linf 0.00830542, total time[s] 0.099311 +Converged at iteration 34, L1 9.49742e-05, Linf 0.00695221, total time[s] 0.103252 +Converged at iteration 25, L1 6.17967e-05, Linf 0.00372593, total time[s] 0.069524 +Converged at iteration 25, L1 4.49515e-05, Linf 0.00929025, total time[s] 0.068271 +Converged at iteration 26, L1 6.23608e-05, Linf 0.0166211, total time[s] 0.072299 +Converged at iteration 26, L1 4.91008e-05, Linf 0.0164028, total time[s] 0.075012 +Converged at iteration 21, L1 4.03542e-05, Linf 0.00720645, total time[s] 0.067061 +Converged at iteration 19, L1 8.95704e-05, Linf 0.00363367, total time[s] 0.055334 +Converged at iteration 24, L1 5.96205e-05, Linf 0.00244101, total time[s] 0.09026 +Converged at iteration 23, L1 9.68883e-05, Linf 0.00553058, total time[s] 0.089996 +Converged at iteration 21, L1 5.21764e-05, Linf 0.00265124, total time[s] 0.088582 +Converged at iteration 19, L1 9.66921e-05, Linf 0.00319098, total time[s] 0.066342 +Converged at iteration 31, L1 8.93453e-05, Linf 0.0132313, total time[s] 0.104369 +Converged at iteration 22, L1 6.49962e-05, Linf 0.00356337, total time[s] 0.058952 +Converged at iteration 24, L1 5.7244e-05, Linf 0.00430234, total time[s] 0.064961 +Converged at iteration 27, L1 5.94552e-05, Linf 0.00329812, total time[s] 0.071443 +Converged at iteration 24, L1 6.01909e-05, Linf 0.00431443, total time[s] 0.064769 +Converged at iteration 23, L1 9.2762e-05, Linf 0.00495665, total time[s] 0.063185 +Converged at iteration 25, L1 8.90868e-05, Linf 0.00545241, total time[s] 0.07067 +Converged at iteration 26, L1 5.63739e-05, Linf 0.00402904, total time[s] 0.070336 +Converged at iteration 27, L1 8.04452e-05, Linf 0.00687725, total time[s] 0.074852 +Converged at iteration 32, L1 6.59765e-05, Linf 0.00353673, total time[s] 0.083344 +Converged at iteration 26, L1 8.39015e-05, Linf 0.00223554, total time[s] 0.069202 +Converged at iteration 31, L1 7.599e-05, Linf 0.0093896, total time[s] 0.081323 +Converged at iteration 31, L1 5.909e-05, Linf 0.00239146, total time[s] 0.081758 +Converged at iteration 32, L1 7.11028e-05, Linf 0.00323601, total time[s] 0.086079 +Converged at iteration 30, L1 8.54422e-05, Linf 0.0034106, total time[s] 0.079186 +Converged at iteration 31, L1 8.47976e-05, Linf 0.0168878, total time[s] 0.080356 +Converged at iteration 29, L1 8.64767e-05, Linf 0.0175759, total time[s] 0.08032 +Converged at iteration 25, L1 5.73081e-05, Linf 0.00241267, total time[s] 0.066151 +Converged at iteration 37, L1 6.35558e-05, Linf 0.00850525, total time[s] 0.105447 +Converged at iteration 35, L1 4.06734e-05, Linf 0.00404131, total time[s] 0.10819 +Converged at iteration 25, L1 6.27783e-05, Linf 0.00373124, total time[s] 0.070689 +Converged at iteration 25, L1 4.47615e-05, Linf 0.00899094, total time[s] 0.066587 +Converged at iteration 26, L1 5.73014e-05, Linf 0.0160199, total time[s] 0.068789 +Converged at iteration 26, L1 4.78677e-05, Linf 0.0161906, total time[s] 0.071788 +Converged at iteration 21, L1 4.11226e-05, Linf 0.0072269, total time[s] 0.068085 +Converged at iteration 19, L1 8.82662e-05, Linf 0.00355378, total time[s] 0.062642 +Converged at iteration 24, L1 5.90135e-05, Linf 0.00283272, total time[s] 0.073647 +Converged at iteration 23, L1 9.91498e-05, Linf 0.00523512, total time[s] 0.081419 +Converged at iteration 21, L1 5.38696e-05, Linf 0.00272289, total time[s] 0.088813 +Converged at iteration 19, L1 9.98129e-05, Linf 0.00331444, total time[s] 0.071711 +Converged at iteration 31, L1 8.97774e-05, Linf 0.0133972, total time[s] 0.119808 +Converged at iteration 22, L1 6.45425e-05, Linf 0.00350287, total time[s] 0.069771 +Converged at iteration 24, L1 5.57172e-05, Linf 0.00472548, total time[s] 0.070428 +Converged at iteration 27, L1 5.86996e-05, Linf 0.00326767, total time[s] 0.073905 +Converged at iteration 24, L1 5.99669e-05, Linf 0.00447143, total time[s] 0.100048 +Converged at iteration 23, L1 9.36519e-05, Linf 0.00497474, total time[s] 0.084831 +Converged at iteration 25, L1 9.18898e-05, Linf 0.00553659, total time[s] 0.084268 +Converged at iteration 26, L1 5.96817e-05, Linf 0.00410951, total time[s] 0.083895 +Converged at iteration 27, L1 8.03647e-05, Linf 0.00636896, total time[s] 0.127833 +Converged at iteration 32, L1 6.58895e-05, Linf 0.00363441, total time[s] 0.153873 +Converged at iteration 26, L1 8.17695e-05, Linf 0.00229207, total time[s] 0.103833 +Converged at iteration 31, L1 7.75369e-05, Linf 0.00934082, total time[s] 0.095814 +Converged at iteration 31, L1 6.02642e-05, Linf 0.00240306, total time[s] 0.112726 +Converged at iteration 32, L1 7.1833e-05, Linf 0.00329741, total time[s] 0.14856 +Converged at iteration 30, L1 8.73567e-05, Linf 0.00350445, total time[s] 0.09511 +Converged at iteration 31, L1 8.93202e-05, Linf 0.0174214, total time[s] 0.119426 +Converged at iteration 29, L1 8.66058e-05, Linf 0.0175506, total time[s] 0.090831 +Converged at iteration 25, L1 5.84539e-05, Linf 0.00243256, total time[s] 0.091173 +Converged at iteration 34, L1 8.33651e-05, Linf 0.00198938, total time[s] 0.099216 +Converged at iteration 35, L1 3.75892e-05, Linf 0.00444874, total time[s] 0.100258 +Converged at iteration 25, L1 6.53316e-05, Linf 0.00374927, total time[s] 0.07406 +Converged at iteration 25, L1 4.82251e-05, Linf 0.0086047, total time[s] 0.122484 +Converged at iteration 26, L1 5.12829e-05, Linf 0.0145757, total time[s] 0.076904 +Converged at iteration 26, L1 4.63023e-05, Linf 0.0156712, total time[s] 0.075779 +Converged at iteration 21, L1 4.20941e-05, Linf 0.00722393, total time[s] 0.075348 +Converged at iteration 19, L1 8.75455e-05, Linf 0.00345738, total time[s] 0.077589 +Converged at iteration 24, L1 5.70189e-05, Linf 0.0023602, total time[s] 0.084077 +Converged at iteration 24, L1 6.04346e-05, Linf 0.00747264, total time[s] 0.07159 +Converged at iteration 21, L1 5.70278e-05, Linf 0.00289401, total time[s] 0.06969 +Converged at iteration 20, L1 4.80344e-05, Linf 0.00193943, total time[s] 0.065422 +Converged at iteration 31, L1 9.18875e-05, Linf 0.0138615, total time[s] 0.083648 +Converged at iteration 22, L1 6.43369e-05, Linf 0.00358746, total time[s] 0.064081 +Converged at iteration 24, L1 5.77997e-05, Linf 0.00447088, total time[s] 0.066128 +Converged at iteration 27, L1 5.57908e-05, Linf 0.00314175, total time[s] 0.078417 +Converged at iteration 24, L1 6.23259e-05, Linf 0.00481269, total time[s] 0.06699 +Converged at iteration 23, L1 9.67198e-05, Linf 0.00504646, total time[s] 0.062104 +Converged at iteration 25, L1 9.86494e-05, Linf 0.00579712, total time[s] 0.068388 +Converged at iteration 26, L1 6.63603e-05, Linf 0.00436686, total time[s] 0.068567 +Converged at iteration 27, L1 7.96295e-05, Linf 0.00586972, total time[s] 0.073277 +Converged at iteration 32, L1 6.60848e-05, Linf 0.00380485, total time[s] 0.082852 +Converged at iteration 26, L1 7.64553e-05, Linf 0.00244246, total time[s] 0.070065 +Converged at iteration 31, L1 7.89301e-05, Linf 0.00952878, total time[s] 0.088365 +Converged at iteration 31, L1 6.05367e-05, Linf 0.00238933, total time[s] 0.086857 +Converged at iteration 32, L1 7.84311e-05, Linf 0.00341549, total time[s] 0.089346 +Converged at iteration 30, L1 8.6889e-05, Linf 0.00386696, total time[s] 0.091106 +Converged at iteration 32, L1 3.64368e-05, Linf 0.00852307, total time[s] 0.083546 +Converged at iteration 29, L1 8.87367e-05, Linf 0.0182848, total time[s] 0.075456 +Converged at iteration 25, L1 5.86796e-05, Linf 0.0023599, total time[s] 0.067139 +Converged at iteration 37, L1 6.22843e-05, Linf 0.0080598, total time[s] 0.095621 +Converged at iteration 35, L1 3.90173e-05, Linf 0.00392262, total time[s] 0.100835 +Converged at iteration 25, L1 6.11477e-05, Linf 0.00370108, total time[s] 0.067003 +Converged at iteration 25, L1 4.36521e-05, Linf 0.00927015, total time[s] 0.064444 +Converged at iteration 26, L1 6.40044e-05, Linf 0.0168478, total time[s] 0.066756 +Converged at iteration 26, L1 5.10797e-05, Linf 0.0165122, total time[s] 0.067455 +Converged at iteration 21, L1 4.03342e-05, Linf 0.00741787, total time[s] 0.07047 +Converged at iteration 19, L1 8.76199e-05, Linf 0.00352203, total time[s] 0.065974 +Converged at iteration 24, L1 6.05148e-05, Linf 0.0024662, total time[s] 0.08724 +Converged at iteration 23, L1 9.76748e-05, Linf 0.00555408, total time[s] 0.098983 +Converged at iteration 21, L1 5.20734e-05, Linf 0.00264747, total time[s] 0.061999 +Converged at iteration 19, L1 9.52133e-05, Linf 0.00319389, total time[s] 0.053223 +Converged at iteration 31, L1 8.94687e-05, Linf 0.0131313, total time[s] 0.095123 +Converged at iteration 22, L1 6.84358e-05, Linf 0.00349917, total time[s] 0.058667 +Converged at iteration 24, L1 5.86402e-05, Linf 0.00431929, total time[s] 0.06304 +Converged at iteration 27, L1 5.98146e-05, Linf 0.00333955, total time[s] 0.069011 +Converged at iteration 24, L1 6.01237e-05, Linf 0.00439583, total time[s] 0.062927 +Converged at iteration 23, L1 9.22316e-05, Linf 0.00493427, total time[s] 0.061661 +Converged at iteration 25, L1 8.93657e-05, Linf 0.00545473, total time[s] 0.067884 +Converged at iteration 26, L1 5.68524e-05, Linf 0.00403707, total time[s] 0.068269 +Converged at iteration 27, L1 7.97986e-05, Linf 0.00674337, total time[s] 0.070926 +Converged at iteration 32, L1 6.63614e-05, Linf 0.00355051, total time[s] 0.083619 +Converged at iteration 26, L1 8.41758e-05, Linf 0.00222385, total time[s] 0.069402 +Converged at iteration 31, L1 7.54765e-05, Linf 0.00916867, total time[s] 0.081719 +Converged at iteration 31, L1 6.20407e-05, Linf 0.00245974, total time[s] 0.083625 +Converged at iteration 32, L1 7.02172e-05, Linf 0.00326445, total time[s] 0.085342 +Converged at iteration 30, L1 8.26441e-05, Linf 0.00329421, total time[s] 0.078351 +Converged at iteration 31, L1 8.4932e-05, Linf 0.0169193, total time[s] 0.082128 +Converged at iteration 29, L1 8.67593e-05, Linf 0.0176165, total time[s] 0.076772 +Converged at iteration 25, L1 5.8278e-05, Linf 0.00242923, total time[s] 0.066607 +Converged at iteration 37, L1 6.49484e-05, Linf 0.00882825, total time[s] 0.112096 +Converged at iteration 35, L1 3.54097e-05, Linf 0.0041514, total time[s] 0.116042 +Converged at iteration 25, L1 6.4152e-05, Linf 0.00373466, total time[s] 0.069968 +Converged at iteration 25, L1 4.76189e-05, Linf 0.00930262, total time[s] 0.062905 +Converged at iteration 26, L1 6.41143e-05, Linf 0.0158253, total time[s] 0.065412 +Converged at iteration 26, L1 6.07653e-05, Linf 0.0160658, total time[s] 0.068591 +Converged at iteration 21, L1 4.15889e-05, Linf 0.00724107, total time[s] 0.056028 +Converged at iteration 19, L1 8.73193e-05, Linf 0.00349958, total time[s] 0.066372 +Converged at iteration 24, L1 5.87671e-05, Linf 0.00239432, total time[s] 0.102282 +Converged at iteration 23, L1 9.98455e-05, Linf 0.00508508, total time[s] 0.0824 +Converged at iteration 21, L1 5.5015e-05, Linf 0.00276786, total time[s] 0.074167 +Converged at iteration 20, L1 4.65017e-05, Linf 0.00182834, total time[s] 0.06376 +Converged at iteration 31, L1 9.32257e-05, Linf 0.0134592, total time[s] 0.089507 +Converged at iteration 22, L1 7.02191e-05, Linf 0.00353314, total time[s] 0.066178 +Converged at iteration 24, L1 5.78348e-05, Linf 0.00479284, total time[s] 0.066174 +Converged at iteration 27, L1 5.78446e-05, Linf 0.00323679, total time[s] 0.069183 +Converged at iteration 24, L1 6.04404e-05, Linf 0.00455708, total time[s] 0.062146 +Converged at iteration 23, L1 9.47709e-05, Linf 0.00498566, total time[s] 0.063422 +Converged at iteration 25, L1 9.43238e-05, Linf 0.00562234, total time[s] 0.064794 +Converged at iteration 26, L1 6.24058e-05, Linf 0.00419309, total time[s] 0.065877 +Converged at iteration 27, L1 8.02895e-05, Linf 0.00602705, total time[s] 0.067952 +Converged at iteration 32, L1 6.66561e-05, Linf 0.00366574, total time[s] 0.079891 +Converged at iteration 26, L1 8.02832e-05, Linf 0.00232938, total time[s] 0.068191 +Converged at iteration 31, L1 7.81935e-05, Linf 0.00937377, total time[s] 0.079354 +Converged at iteration 31, L1 6.03936e-05, Linf 0.00243539, total time[s] 0.080563 +Converged at iteration 32, L1 7.28831e-05, Linf 0.00334441, total time[s] 0.084917 +Converged at iteration 30, L1 8.89767e-05, Linf 0.00360422, total time[s] 0.077692 +Converged at iteration 31, L1 9.23214e-05, Linf 0.0178107, total time[s] 0.07963 +Converged at iteration 29, L1 8.7625e-05, Linf 0.017939, total time[s] 0.074919 +Converged at iteration 25, L1 5.74069e-05, Linf 0.00239042, total time[s] 0.065892 +Converged at iteration 37, L1 6.60906e-05, Linf 0.0088273, total time[s] 0.094419 +Converged at iteration 35, L1 3.7867e-05, Linf 0.00428651, total time[s] 0.089365 +Converged at iteration 25, L1 6.50267e-05, Linf 0.00374153, total time[s] 0.087451 +Converged at iteration 25, L1 4.67536e-05, Linf 0.00870525, total time[s] 0.074077 +Converged at iteration 26, L1 5.13175e-05, Linf 0.0151368, total time[s] 0.07127 +Converged at iteration 26, L1 4.69577e-05, Linf 0.0158985, total time[s] 0.074594 +Converged at iteration 21, L1 4.28764e-05, Linf 0.00716973, total time[s] 0.066003 +Converged at iteration 19, L1 8.73307e-05, Linf 0.00347937, total time[s] 0.056008 +Converged at iteration 24, L1 5.85201e-05, Linf 0.00334527, total time[s] 0.089726 +Converged at iteration 24, L1 5.83851e-05, Linf 0.00191512, total time[s] 0.087707 +Converged at iteration 21, L1 5.56627e-05, Linf 0.00282884, total time[s] 0.07306 +Converged at iteration 20, L1 4.67733e-05, Linf 0.00188289, total time[s] 0.079565 +Converged at iteration 31, L1 9.07781e-05, Linf 0.0136767, total time[s] 0.104602 +Converged at iteration 22, L1 6.47494e-05, Linf 0.00356659, total time[s] 0.075968 +Converged at iteration 24, L1 5.77671e-05, Linf 0.00443602, total time[s] 0.075516 +Converged at iteration 27, L1 5.65577e-05, Linf 0.00319594, total time[s] 0.084595 +Converged at iteration 24, L1 6.19553e-05, Linf 0.00468832, total time[s] 0.071379 +Converged at iteration 23, L1 9.54531e-05, Linf 0.00500852, total time[s] 0.065747 +Converged at iteration 25, L1 9.64927e-05, Linf 0.00570699, total time[s] 0.070865 +Converged at iteration 26, L1 6.40143e-05, Linf 0.00427961, total time[s] 0.071644 +Converged at iteration 27, L1 7.93079e-05, Linf 0.00587892, total time[s] 0.073384 +Converged at iteration 32, L1 6.56654e-05, Linf 0.00374061, total time[s] 0.086818 +Converged at iteration 26, L1 7.78978e-05, Linf 0.00239084, total time[s] 0.070311 +Converged at iteration 31, L1 7.68254e-05, Linf 0.00950264, total time[s] 0.083033 +Converged at iteration 31, L1 5.85081e-05, Linf 0.00243174, total time[s] 0.082542 +Converged at iteration 32, L1 7.3798e-05, Linf 0.00338877, total time[s] 0.084665 +Converged at iteration 30, L1 8.82911e-05, Linf 0.00378437, total time[s] 0.081909 +Converged at iteration 31, L1 9.60004e-05, Linf 0.0182536, total time[s] 0.090494 +Converged at iteration 29, L1 8.83575e-05, Linf 0.0181095, total time[s] 0.084373 +Converged at iteration 25, L1 5.75255e-05, Linf 0.00231375, total time[s] 0.077671 +Converged at iteration 37, L1 6.53197e-05, Linf 0.00890857, total time[s] 0.102379 +Converged at iteration 35, L1 3.55468e-05, Linf 0.00423343, total time[s] 0.092285 +Converged at iteration 25, L1 6.45524e-05, Linf 0.00373668, total time[s] 0.068045 +Converged at iteration 25, L1 4.60546e-05, Linf 0.00882103, total time[s] 0.067407 +Converged at iteration 26, L1 5.47391e-05, Linf 0.0154224, total time[s] 0.070978 +Converged at iteration 26, L1 4.7465e-05, Linf 0.0163747, total time[s] 0.070577 +Converged at iteration 21, L1 4.19481e-05, Linf 0.00724159, total time[s] 0.060674 +Converged at iteration 19, L1 8.72668e-05, Linf 0.00349241, total time[s] 0.05643 +Converged at iteration 24, L1 5.77686e-05, Linf 0.00239841, total time[s] 0.077075 +Converged at iteration 23, L1 9.93028e-05, Linf 0.00496057, total time[s] 0.096879 +Converged at iteration 21, L1 5.4814e-05, Linf 0.00279973, total time[s] 0.07664 +Converged at iteration 20, L1 4.6307e-05, Linf 0.00185544, total time[s] 0.055237 +Converged at iteration 31, L1 9.02487e-05, Linf 0.013585, total time[s] 0.085334 +Converged at iteration 22, L1 6.49006e-05, Linf 0.0035526, total time[s] 0.070196 +Converged at iteration 24, L1 5.59215e-05, Linf 0.0044098, total time[s] 0.065283 +Converged at iteration 27, L1 5.7561e-05, Linf 0.0032224, total time[s] 0.082301 +Converged at iteration 24, L1 6.08151e-05, Linf 0.00462701, total time[s] 0.064348 +Converged at iteration 23, L1 9.48812e-05, Linf 0.00499649, total time[s] 0.062261 +Converged at iteration 25, L1 9.5664e-05, Linf 0.00566467, total time[s] 0.067068 +Converged at iteration 26, L1 6.29384e-05, Linf 0.00423555, total time[s] 0.070927 +Converged at iteration 27, L1 7.94172e-05, Linf 0.0059398, total time[s] 0.073565 +Converged at iteration 32, L1 6.57725e-05, Linf 0.00370919, total time[s] 0.09176 +Converged at iteration 26, L1 7.88762e-05, Linf 0.00236413, total time[s] 0.070658 +Converged at iteration 31, L1 7.66653e-05, Linf 0.00940661, total time[s] 0.103039 +Converged at iteration 31, L1 5.83498e-05, Linf 0.00242445, total time[s] 0.083117 +Converged at iteration 32, L1 7.34286e-05, Linf 0.00336675, total time[s] 0.084923 +Converged at iteration 30, L1 8.85889e-05, Linf 0.00373271, total time[s] 0.081266 +Converged at iteration 31, L1 9.40142e-05, Linf 0.0180322, total time[s] 0.082332 +Converged at iteration 29, L1 8.79303e-05, Linf 0.018024, total time[s] 0.077641 +Converged at iteration 25, L1 5.7485e-05, Linf 0.00233983, total time[s] 0.06795 +Converged at iteration 37, L1 6.49933e-05, Linf 0.00870642, total time[s] 0.096332 +Converged at iteration 35, L1 3.54285e-05, Linf 0.00420113, total time[s] 0.095902 +Converged at iteration 25, L1 6.41723e-05, Linf 0.00373461, total time[s] 0.067318 +Converged at iteration 25, L1 4.64063e-05, Linf 0.00885793, total time[s] 0.06807 +Converged at iteration 26, L1 6.09999e-05, Linf 0.015565, total time[s] 0.069879 +Converged at iteration 26, L1 4.74499e-05, Linf 0.0164416, total time[s] 0.070205 +Converged at iteration 21, L1 4.16716e-05, Linf 0.00724463, total time[s] 0.056752 +Converged at iteration 19, L1 8.70751e-05, Linf 0.00349485, total time[s] 0.054101 +Converged at iteration 24, L1 5.84667e-05, Linf 0.00239789, total time[s] 0.068442 +Converged at iteration 23, L1 9.88503e-05, Linf 0.00502206, total time[s] 0.067163 +Converged at iteration 21, L1 5.47535e-05, Linf 0.00278386, total time[s] 0.070408 +Converged at iteration 20, L1 4.59015e-05, Linf 0.00184173, total time[s] 0.058957 +Converged at iteration 31, L1 9.01078e-05, Linf 0.0135395, total time[s] 0.086878 +Converged at iteration 22, L1 6.48093e-05, Linf 0.00354666, total time[s] 0.065998 +Converged at iteration 24, L1 5.56965e-05, Linf 0.00440289, total time[s] 0.06906 +Converged at iteration 27, L1 5.7584e-05, Linf 0.00323547, total time[s] 0.073402 +Converged at iteration 24, L1 6.06591e-05, Linf 0.0045957, total time[s] 0.067538 +Converged at iteration 23, L1 9.47481e-05, Linf 0.00498804, total time[s] 0.067166 +Converged at iteration 25, L1 9.51363e-05, Linf 0.00564329, total time[s] 0.067257 +Converged at iteration 26, L1 6.22115e-05, Linf 0.00421426, total time[s] 0.069622 +Converged at iteration 27, L1 7.94718e-05, Linf 0.00597943, total time[s] 0.072908 +Converged at iteration 32, L1 6.58074e-05, Linf 0.00369314, total time[s] 0.086514 +Converged at iteration 26, L1 7.92243e-05, Linf 0.00235055, total time[s] 0.070085 +Converged at iteration 31, L1 7.62785e-05, Linf 0.0093894, total time[s] 0.08564 +Converged at iteration 31, L1 5.8598e-05, Linf 0.00238555, total time[s] 0.086523 +Converged at iteration 32, L1 7.31933e-05, Linf 0.0033555, total time[s] 0.096229 +Converged at iteration 30, L1 8.83249e-05, Linf 0.0036885, total time[s] 0.097709 +Converged at iteration 31, L1 9.29686e-05, Linf 0.0179226, total time[s] 0.081375 +Converged at iteration 29, L1 8.79996e-05, Linf 0.0179813, total time[s] 0.083743 +Converged at iteration 25, L1 5.75057e-05, Linf 0.00235585, total time[s] 0.074187 +Converged at iteration 37, L1 6.47899e-05, Linf 0.00868818, total time[s] 0.096851 +Converged at iteration 35, L1 3.51312e-05, Linf 0.00418617, total time[s] 0.095013 +Converged at iteration 25, L1 6.39629e-05, Linf 0.00373359, total time[s] 0.069158 +Converged at iteration 25, L1 4.57497e-05, Linf 0.00887831, total time[s] 0.072008 +Converged at iteration 26, L1 5.44374e-05, Linf 0.0156373, total time[s] 0.076157 +Converged at iteration 26, L1 4.76572e-05, Linf 0.0162312, total time[s] 0.084656 +Converged at iteration 21, L1 4.16351e-05, Linf 0.00733689, total time[s] 0.06434 +Converged at iteration 19, L1 8.73316e-05, Linf 0.00349817, total time[s] 0.053384 +Converged at iteration 24, L1 5.91955e-05, Linf 0.00239651, total time[s] 0.066361 +Converged at iteration 23, L1 9.86932e-05, Linf 0.00500196, total time[s] 0.065526 +Converged at iteration 21, L1 5.44273e-05, Linf 0.00277579, total time[s] 0.06328 +Converged at iteration 20, L1 4.58375e-05, Linf 0.00183819, total time[s] 0.055793 +Converged at iteration 31, L1 9.00646e-05, Linf 0.0135167, total time[s] 0.08388 +Converged at iteration 22, L1 6.66978e-05, Linf 0.00457106, total time[s] 0.060428 +Converged at iteration 24, L1 5.57423e-05, Linf 0.00479832, total time[s] 0.064611 +Converged at iteration 27, L1 5.75138e-05, Linf 0.00324147, total time[s] 0.071342 +Converged at iteration 24, L1 6.04314e-05, Linf 0.00458149, total time[s] 0.064437 +Converged at iteration 23, L1 9.44931e-05, Linf 0.00498764, total time[s] 0.06208 +Converged at iteration 25, L1 9.46239e-05, Linf 0.00563253, total time[s] 0.067145 +Converged at iteration 26, L1 6.2015e-05, Linf 0.00415276, total time[s] 0.070226 +Converged at iteration 27, L1 7.95058e-05, Linf 0.0060082, total time[s] 0.07279 +Converged at iteration 32, L1 6.58537e-05, Linf 0.00368491, total time[s] 0.084086 +Converged at iteration 26, L1 7.94846e-05, Linf 0.00234504, total time[s] 0.068388 +Converged at iteration 31, L1 7.60358e-05, Linf 0.00938, total time[s] 0.081809 +Converged at iteration 31, L1 5.86266e-05, Linf 0.00242387, total time[s] 0.081817 +Converged at iteration 32, L1 7.30151e-05, Linf 0.00335141, total time[s] 0.083591 +Converged at iteration 30, L1 8.82494e-05, Linf 0.00365086, total time[s] 0.078681 +Converged at iteration 31, L1 9.25305e-05, Linf 0.0178667, total time[s] 0.086808 +Converged at iteration 29, L1 8.72601e-05, Linf 0.0179607, total time[s] 0.086827 +Converged at iteration 25, L1 5.85477e-05, Linf 0.00237208, total time[s] 0.068261 +Converged at iteration 37, L1 6.47334e-05, Linf 0.00867733, total time[s] 0.11688 +Converged at iteration 35, L1 3.50332e-05, Linf 0.00418036, total time[s] 0.105756 +Converged at iteration 25, L1 6.3815e-05, Linf 0.00373309, total time[s] 0.068649 +Converged at iteration 25, L1 4.55806e-05, Linf 0.00888637, total time[s] 0.080695 +Converged at iteration 26, L1 5.46725e-05, Linf 0.015676, total time[s] 0.071403 +Converged at iteration 26, L1 4.7493e-05, Linf 0.0160704, total time[s] 0.092244 +Converged at iteration 21, L1 4.15592e-05, Linf 0.00724687, total time[s] 0.08761 +Converged at iteration 19, L1 8.71537e-05, Linf 0.00350177, total time[s] 0.054509 +Converged at iteration 24, L1 5.80073e-05, Linf 0.00239486, total time[s] 0.075067 +Converged at iteration 23, L1 9.90598e-05, Linf 0.00506921, total time[s] 0.065523 +Converged at iteration 21, L1 5.45114e-05, Linf 0.00277211, total time[s] 0.058048 +Converged at iteration 20, L1 4.57296e-05, Linf 0.00183198, total time[s] 0.077286 +Converged at iteration 31, L1 9.00469e-05, Linf 0.0134669, total time[s] 0.109043 +Converged at iteration 22, L1 6.539e-05, Linf 0.00353739, total time[s] 0.085919 +Converged at iteration 24, L1 5.56934e-05, Linf 0.00439409, total time[s] 0.077107 +Converged at iteration 27, L1 5.76237e-05, Linf 0.00324503, total time[s] 0.083631 +Converged at iteration 24, L1 6.04916e-05, Linf 0.00457465, total time[s] 0.076781 +Converged at iteration 23, L1 9.44609e-05, Linf 0.00498596, total time[s] 0.085579 +Converged at iteration 25, L1 9.44613e-05, Linf 0.00562725, total time[s] 0.074931 +Converged at iteration 26, L1 6.29289e-05, Linf 0.00420027, total time[s] 0.092792 +Converged at iteration 27, L1 8.05832e-05, Linf 0.0060126, total time[s] 0.073438 +Converged at iteration 32, L1 6.58702e-05, Linf 0.00368233, total time[s] 0.083311 +Converged at iteration 26, L1 7.96215e-05, Linf 0.00231777, total time[s] 0.069892 +Converged at iteration 31, L1 7.60415e-05, Linf 0.0093753, total time[s] 0.081995 +Converged at iteration 31, L1 5.86423e-05, Linf 0.00242421, total time[s] 0.081739 +Converged at iteration 32, L1 7.29355e-05, Linf 0.00334809, total time[s] 0.082692 +Converged at iteration 30, L1 8.81642e-05, Linf 0.00362808, total time[s] 0.082698 +Converged at iteration 31, L1 9.22522e-05, Linf 0.017837, total time[s] 0.085134 +Converged at iteration 29, L1 8.8801e-05, Linf 0.01795, total time[s] 0.083522 +Converged at iteration 25, L1 5.74501e-05, Linf 0.00237067, total time[s] 0.114943 +Converged at iteration 37, L1 6.50683e-05, Linf 0.00868355, total time[s] 0.140072 +Converged at iteration 35, L1 3.5074e-05, Linf 0.00418243, total time[s] 0.112908 +Converged at iteration 25, L1 6.40824e-05, Linf 0.00373343, total time[s] 0.076732 +Converged at iteration 25, L1 4.56071e-05, Linf 0.0088816, total time[s] 0.069462 +Converged at iteration 26, L1 5.5494e-05, Linf 0.0156541, total time[s] 0.097325 +Converged at iteration 26, L1 4.75824e-05, Linf 0.0160638, total time[s] 0.081871 +Converged at iteration 21, L1 4.15947e-05, Linf 0.00724601, total time[s] 0.097704 +Converged at iteration 19, L1 8.76109e-05, Linf 0.00350081, total time[s] 0.082528 +Converged at iteration 24, L1 5.80069e-05, Linf 0.00239599, total time[s] 0.083507 +Converged at iteration 23, L1 9.98373e-05, Linf 0.00505483, total time[s] 0.074269 +Converged at iteration 21, L1 5.45925e-05, Linf 0.00277391, total time[s] 0.078993 +Converged at iteration 20, L1 4.66067e-05, Linf 0.00183342, total time[s] 0.069784 +Converged at iteration 31, L1 9.01353e-05, Linf 0.0135111, total time[s] 0.095277 +Converged at iteration 22, L1 6.66592e-05, Linf 0.00354532, total time[s] 0.082331 +Converged at iteration 24, L1 5.6673e-05, Linf 0.00439224, total time[s] 0.086387 +Converged at iteration 27, L1 5.78776e-05, Linf 0.0032436, total time[s] 0.103631 +Converged at iteration 24, L1 6.13224e-05, Linf 0.00457516, total time[s] 0.086256 +Converged at iteration 23, L1 9.50945e-05, Linf 0.00498864, total time[s] 0.079258 +Converged at iteration 25, L1 9.43763e-05, Linf 0.00562947, total time[s] 0.079882 +Converged at iteration 26, L1 6.19507e-05, Linf 0.0042001, total time[s] 0.075677 +Converged at iteration 27, L1 7.95177e-05, Linf 0.00599078, total time[s] 0.079232 +Converged at iteration 32, L1 6.5866e-05, Linf 0.00368264, total time[s] 0.09301 +Converged at iteration 26, L1 7.97497e-05, Linf 0.00234204, total time[s] 0.085696 +Converged at iteration 31, L1 7.79327e-05, Linf 0.00938078, total time[s] 0.095788 +Converged at iteration 31, L1 6.41458e-05, Linf 0.00242075, total time[s] 0.081089 +Converged at iteration 32, L1 7.54071e-05, Linf 0.00407949, total time[s] 0.086268 +Converged at iteration 30, L1 8.8392e-05, Linf 0.00363994, total time[s] 0.080388 +Converged at iteration 32, L1 4.37844e-05, Linf 0.00782546, total time[s] 0.083298 +Converged at iteration 29, L1 8.71089e-05, Linf 0.0179562, total time[s] 0.076406 +Converged at iteration 25, L1 5.99914e-05, Linf 0.0025705, total time[s] 0.06655 +Converged at iteration 37, L1 6.51215e-05, Linf 0.00868106, total time[s] 0.095797 +Converged at iteration 35, L1 3.50402e-05, Linf 0.00417955, total time[s] 0.095382 +Converged at iteration 25, L1 6.45706e-05, Linf 0.00373329, total time[s] 0.066153 +Converged at iteration 25, L1 4.5764e-05, Linf 0.00888424, total time[s] 0.066356 +Converged at iteration 26, L1 5.47972e-05, Linf 0.0157805, total time[s] 0.067699 +Converged at iteration 26, L1 4.76693e-05, Linf 0.0163856, total time[s] 0.072013 +Converged at iteration 21, L1 4.24026e-05, Linf 0.00733925, total time[s] 0.060422 +Converged at iteration 19, L1 8.7983e-05, Linf 0.00349879, total time[s] 0.052608 +Converged at iteration 24, L1 5.98462e-05, Linf 0.00280972, total time[s] 0.068987 +Converged at iteration 23, L1 9.86558e-05, Linf 0.00506524, total time[s] 0.064098 +Converged at iteration 21, L1 5.47852e-05, Linf 0.002773, total time[s] 0.061542 +Converged at iteration 20, L1 4.55676e-05, Linf 0.00183251, total time[s] 0.063535 +Converged at iteration 31, L1 9.01445e-05, Linf 0.0135816, total time[s] 0.080521 +Converged at iteration 22, L1 6.86029e-05, Linf 0.00354755, total time[s] 0.059424 +Converged at iteration 24, L1 5.92255e-05, Linf 0.00540137, total time[s] 0.064585 +Converged at iteration 27, L1 5.83268e-05, Linf 0.00324381, total time[s] 0.078305 +Converged at iteration 24, L1 6.06057e-05, Linf 0.00457676, total time[s] 0.066427 +Converged at iteration 23, L1 9.43882e-05, Linf 0.00498562, total time[s] 0.060645 +Converged at iteration 25, L1 9.38682e-05, Linf 0.0056262, total time[s] 0.064591 +Converged at iteration 26, L1 6.20248e-05, Linf 0.00419712, total time[s] 0.069319 +Converged at iteration 27, L1 8.00477e-05, Linf 0.00586822, total time[s] 0.072165 +Converged at iteration 32, L1 6.59855e-05, Linf 0.00367998, total time[s] 0.091098 +Converged at iteration 26, L1 7.97182e-05, Linf 0.00234227, total time[s] 0.068864 +Converged at iteration 31, L1 7.66495e-05, Linf 0.0093768, total time[s] 0.078631 +Converged at iteration 31, L1 6.02514e-05, Linf 0.00243277, total time[s] 0.084808 +Converged at iteration 32, L1 7.30293e-05, Linf 0.00334758, total time[s] 0.093056 +Converged at iteration 30, L1 8.8327e-05, Linf 0.00363387, total time[s] 0.078759 +Converged at iteration 31, L1 9.27445e-05, Linf 0.0178476, total time[s] 0.082216 +Converged at iteration 29, L1 8.76588e-05, Linf 0.0179523, total time[s] 0.080733 +Converged at iteration 25, L1 5.74599e-05, Linf 0.00237924, total time[s] 0.069906 +Converged at iteration 37, L1 6.48051e-05, Linf 0.0086783, total time[s] 0.09505 +Converged at iteration 35, L1 3.51844e-05, Linf 0.00418118, total time[s] 0.095318 +Converged at iteration 25, L1 6.38738e-05, Linf 0.00373328, total time[s] 0.070513 +Converged at iteration 25, L1 4.60416e-05, Linf 0.00888523, total time[s] 0.084411 +Converged at iteration 26, L1 5.68255e-05, Linf 0.015668, total time[s] 0.07493 +Converged at iteration 26, L1 5.03573e-05, Linf 0.0159375, total time[s] 0.079976 +Converged at iteration 21, L1 4.16084e-05, Linf 0.00724669, total time[s] 0.062127 +Converged at iteration 19, L1 8.72368e-05, Linf 0.00349755, total time[s] 0.077475 +Converged at iteration 24, L1 5.87114e-05, Linf 0.00239586, total time[s] 0.070135 +Converged at iteration 23, L1 9.90469e-05, Linf 0.00506064, total time[s] 0.068592 +Converged at iteration 21, L1 5.50733e-05, Linf 0.00277256, total time[s] 0.065746 +Converged at iteration 20, L1 4.70707e-05, Linf 0.00183238, total time[s] 0.068503 +Converged at iteration 31, L1 9.01785e-05, Linf 0.0133908, total time[s] 0.084926 +Converged at iteration 22, L1 6.98564e-05, Linf 0.00353778, total time[s] 0.059137 +Converged at iteration 24, L1 5.90583e-05, Linf 0.00439577, total time[s] 0.063208 +Converged at iteration 27, L1 5.83534e-05, Linf 0.00324482, total time[s] 0.069513 +Converged at iteration 24, L1 6.05385e-05, Linf 0.00458121, total time[s] 0.062413 +Converged at iteration 23, L1 9.50978e-05, Linf 0.00498659, total time[s] 0.064905 +Converged at iteration 25, L1 9.46144e-05, Linf 0.00562361, total time[s] 0.098585 +Converged at iteration 26, L1 6.24102e-05, Linf 0.00419447, total time[s] 0.072059 +Converged at iteration 27, L1 7.96147e-05, Linf 0.00601476, total time[s] 0.07301 +Converged at iteration 32, L1 6.62779e-05, Linf 0.00368111, total time[s] 0.08264 +Converged at iteration 26, L1 7.9608e-05, Linf 0.00234063, total time[s] 0.069171 +Converged at iteration 31, L1 7.70843e-05, Linf 0.00937582, total time[s] 0.080935 +Converged at iteration 31, L1 5.93234e-05, Linf 0.00242333, total time[s] 0.08136 +Converged at iteration 32, L1 7.26795e-05, Linf 0.00334105, total time[s] 0.082361 +Converged at iteration 30, L1 8.86025e-05, Linf 0.00363266, total time[s] 0.077684 +Converged at iteration 31, L1 9.24737e-05, Linf 0.017845, total time[s] 0.079384 +Converged at iteration 29, L1 8.76439e-05, Linf 0.017951, total time[s] 0.074661 +Converged at iteration 25, L1 5.74114e-05, Linf 0.00238033, total time[s] 0.065512 +Converged at iteration 37, L1 6.485e-05, Linf 0.00867879, total time[s] 0.096011 +Converged at iteration 35, L1 3.51399e-05, Linf 0.00418034, total time[s] 0.095173 +Converged at iteration 25, L1 6.38584e-05, Linf 0.00373312, total time[s] 0.072356 +Converged at iteration 25, L1 4.58767e-05, Linf 0.00888471, total time[s] 0.065536 +Converged at iteration 26, L1 5.76158e-05, Linf 0.0156663, total time[s] 0.068731 +Converged at iteration 26, L1 4.78881e-05, Linf 0.0159134, total time[s] 0.069531 +Converged at iteration 21, L1 4.16665e-05, Linf 0.00723962, total time[s] 0.064131 +Converged at iteration 19, L1 8.71532e-05, Linf 0.0035029, total time[s] 0.063387 +Converged at iteration 24, L1 5.80086e-05, Linf 0.00239499, total time[s] 0.07847 +Converged at iteration 24, L1 5.89458e-05, Linf 0.00514522, total time[s] 0.075354 +Converged at iteration 21, L1 5.47656e-05, Linf 0.00277279, total time[s] 0.066566 +Converged at iteration 20, L1 4.60557e-05, Linf 0.00183325, total time[s] 0.059994 +Converged at iteration 31, L1 9.01747e-05, Linf 0.0135076, total time[s] 0.096384 +Converged at iteration 22, L1 7.02681e-05, Linf 0.00353718, total time[s] 0.063252 +Converged at iteration 24, L1 5.67028e-05, Linf 0.00438348, total time[s] 0.061533 +Converged at iteration 27, L1 5.75291e-05, Linf 0.00324586, total time[s] 0.072786 +Converged at iteration 24, L1 6.04871e-05, Linf 0.00457625, total time[s] 0.065808 +Converged at iteration 23, L1 9.45498e-05, Linf 0.00498623, total time[s] 0.061552 +Converged at iteration 25, L1 9.45135e-05, Linf 0.00562846, total time[s] 0.068562 +Converged at iteration 26, L1 6.23099e-05, Linf 0.00419983, total time[s] 0.069353 +Converged at iteration 27, L1 7.89828e-05, Linf 0.00596525, total time[s] 0.071285 +Converged at iteration 32, L1 6.59125e-05, Linf 0.00368047, total time[s] 0.08234 +Converged at iteration 26, L1 7.95893e-05, Linf 0.002341, total time[s] 0.06777 +Converged at iteration 31, L1 7.59768e-05, Linf 0.00937618, total time[s] 0.08667 +Converged at iteration 31, L1 5.86854e-05, Linf 0.00241837, total time[s] 0.080883 +Converged at iteration 32, L1 7.29102e-05, Linf 0.00334925, total time[s] 0.083844 +Converged at iteration 30, L1 8.9056e-05, Linf 0.00363038, total time[s] 0.078102 +Converged at iteration 31, L1 9.22415e-05, Linf 0.0176161, total time[s] 0.084384 +Converged at iteration 29, L1 8.80242e-05, Linf 0.0177649, total time[s] 0.079292 +Converged at iteration 25, L1 5.78704e-05, Linf 0.00236809, total time[s] 0.066426 +Converged at iteration 37, L1 6.52532e-05, Linf 0.00873582, total time[s] 0.094997 +Converged at iteration 35, L1 3.55086e-05, Linf 0.004177, total time[s] 0.096817 +Converged at iteration 25, L1 6.39794e-05, Linf 0.00373404, total time[s] 0.074554 +Converged at iteration 25, L1 4.64825e-05, Linf 0.00888486, total time[s] 0.071134 +Converged at iteration 26, L1 5.52144e-05, Linf 0.0156664, total time[s] 0.068765 +Converged at iteration 26, L1 4.78498e-05, Linf 0.0160595, total time[s] 0.069298 +Converged at iteration 21, L1 4.15831e-05, Linf 0.00724626, total time[s] 0.062702 +Converged at iteration 19, L1 8.75539e-05, Linf 0.00350119, total time[s] 0.081845 +Converged at iteration 24, L1 5.95417e-05, Linf 0.00526932, total time[s] 0.091908 +Converged at iteration 23, L1 9.99555e-05, Linf 0.00505987, total time[s] 0.070875 +Converged at iteration 21, L1 5.50364e-05, Linf 0.0027727, total time[s] 0.074946 +Converged at iteration 20, L1 5.10637e-05, Linf 0.0035699, total time[s] 0.061795 +Converged at iteration 31, L1 9.00238e-05, Linf 0.0135074, total time[s] 0.092199 +Converged at iteration 22, L1 6.50014e-05, Linf 0.00354125, total time[s] 0.072172 +Converged at iteration 24, L1 5.55872e-05, Linf 0.00439413, total time[s] 0.067981 +Converged at iteration 27, L1 5.76906e-05, Linf 0.00324669, total time[s] 0.071295 +Converged at iteration 24, L1 6.03638e-05, Linf 0.00457289, total time[s] 0.067258 +Converged at iteration 23, L1 9.45179e-05, Linf 0.00498506, total time[s] 0.066126 +Converged at iteration 25, L1 9.51568e-05, Linf 0.00562816, total time[s] 0.066489 +Converged at iteration 26, L1 6.19709e-05, Linf 0.00419883, total time[s] 0.071087 +Converged at iteration 27, L1 7.95739e-05, Linf 0.00601494, total time[s] 0.096549 +Converged at iteration 32, L1 6.64415e-05, Linf 0.00367928, total time[s] 0.095203 +Converged at iteration 26, L1 7.95559e-05, Linf 0.00234087, total time[s] 0.067955 +Converged at iteration 31, L1 7.66224e-05, Linf 0.00938123, total time[s] 0.082203 +Converged at iteration 31, L1 6.06404e-05, Linf 0.00241251, total time[s] 0.081033 +Converged at iteration 32, L1 7.2935e-05, Linf 0.00334631, total time[s] 0.082991 +Converged at iteration 30, L1 8.83382e-05, Linf 0.00363189, total time[s] 0.07837 +Converged at iteration 31, L1 9.22669e-05, Linf 0.0178432, total time[s] 0.086664 +Converged at iteration 29, L1 8.77312e-05, Linf 0.0179514, total time[s] 0.077707 +Converged at iteration 25, L1 5.74085e-05, Linf 0.00238005, total time[s] 0.066489 +Converged at iteration 40, L1 6.90734e-05, Linf 0.00367354, total time[s] 0.111626 +Converged at iteration 35, L1 7.69121e-05, Linf 0.00343337, total time[s] 0.106288 +Converged at iteration 30, L1 9.79878e-05, Linf 0.00624616, total time[s] 0.083096 +Converged at iteration 31, L1 6.23561e-05, Linf 0.00502552, total time[s] 0.082184 +Converged at iteration 27, L1 6.27661e-05, Linf 0.00500049, total time[s] 0.067058 +Converged at iteration 22, L1 8.60373e-05, Linf 0.00444358, total time[s] 0.056428 +Converged at iteration 20, L1 9.62518e-05, Linf 0.00397905, total time[s] 0.058041 +Converged at iteration 24, L1 8.84048e-05, Linf 0.00483077, total time[s] 0.074309 +Converged at iteration 28, L1 7.39714e-05, Linf 0.00446736, total time[s] 0.08075 +Converged at iteration 26, L1 8.11815e-05, Linf 0.00546855, total time[s] 0.078132 +Converged at iteration 22, L1 7.51076e-05, Linf 0.00508952, total time[s] 0.082822 +Converged at iteration 19, L1 6.68293e-05, Linf 0.00393102, total time[s] 0.071375 +Converged at iteration 30, L1 8.01032e-05, Linf 0.0032964, total time[s] 0.097189 +Converged at iteration 20, L1 8.44165e-05, Linf 0.0044843, total time[s] 0.056495 +Converged at iteration 24, L1 7.10836e-05, Linf 0.00463287, total time[s] 0.06164 +Converged at iteration 31, L1 8.93618e-05, Linf 0.00569235, total time[s] 0.085509 +Converged at iteration 27, L1 9.91877e-05, Linf 0.00569821, total time[s] 0.071035 +Converged at iteration 24, L1 8.79013e-05, Linf 0.00465012, total time[s] 0.064041 +Converged at iteration 23, L1 9.21763e-05, Linf 0.0041019, total time[s] 0.062347 +Converged at iteration 26, L1 7.22292e-05, Linf 0.00446111, total time[s] 0.068224 +Converged at iteration 29, L1 7.81597e-05, Linf 0.00479604, total time[s] 0.075093 +Converged at iteration 34, L1 7.07676e-05, Linf 0.0042288, total time[s] 0.087908 +Converged at iteration 30, L1 9.39562e-05, Linf 0.00442608, total time[s] 0.076675 +Converged at iteration 28, L1 9.51075e-05, Linf 0.00310979, total time[s] 0.071685 +Converged at iteration 32, L1 9.47198e-05, Linf 0.00374163, total time[s] 0.082119 +Converged at iteration 37, L1 7.38904e-05, Linf 0.00327672, total time[s] 0.095302 +Converged at iteration 33, L1 8.45083e-05, Linf 0.00469787, total time[s] 0.084151 +Converged at iteration 28, L1 9.63386e-05, Linf 0.00430897, total time[s] 0.07247 +Converged at iteration 24, L1 8.83033e-05, Linf 0.00328779, total time[s] 0.067973 +Converged at iteration 26, L1 9.00117e-05, Linf 0.00383862, total time[s] 0.066001 +Converged at iteration 40, L1 6.65741e-05, Linf 0.00389676, total time[s] 0.098106 +Converged at iteration 35, L1 8.66348e-05, Linf 0.00357478, total time[s] 0.086266 +Converged at iteration 30, L1 9.17623e-05, Linf 0.0041839, total time[s] 0.075065 +Converged at iteration 31, L1 6.17908e-05, Linf 0.00507486, total time[s] 0.077987 +Converged at iteration 26, L1 9.84147e-05, Linf 0.00577974, total time[s] 0.077674 +Converged at iteration 22, L1 7.18906e-05, Linf 0.00418798, total time[s] 0.059803 +Converged at iteration 21, L1 6.40814e-05, Linf 0.00350059, total time[s] 0.059698 +Converged at iteration 24, L1 8.945e-05, Linf 0.00496532, total time[s] 0.066882 +Converged at iteration 28, L1 7.3411e-05, Linf 0.00443193, total time[s] 0.074028 +Converged at iteration 26, L1 8.01668e-05, Linf 0.00535941, total time[s] 0.066881 +Converged at iteration 22, L1 7.02174e-05, Linf 0.0044143, total time[s] 0.057322 +Converged at iteration 19, L1 5.49422e-05, Linf 0.00332055, total time[s] 0.051753 +Converged at iteration 30, L1 9.5278e-05, Linf 0.0033414, total time[s] 0.077492 +Converged at iteration 20, L1 8.42661e-05, Linf 0.00472689, total time[s] 0.054062 +Converged at iteration 24, L1 7.12285e-05, Linf 0.00475228, total time[s] 0.066087 +Converged at iteration 31, L1 9.41907e-05, Linf 0.00482002, total time[s] 0.084574 +Converged at iteration 27, L1 9.41208e-05, Linf 0.00468405, total time[s] 0.079743 +Converged at iteration 24, L1 8.51872e-05, Linf 0.00428111, total time[s] 0.065013 +Converged at iteration 23, L1 9.23827e-05, Linf 0.00423617, total time[s] 0.062435 +Converged at iteration 26, L1 7.1328e-05, Linf 0.00475323, total time[s] 0.069531 +Converged at iteration 29, L1 7.52326e-05, Linf 0.00488637, total time[s] 0.078228 +Converged at iteration 34, L1 8.13657e-05, Linf 0.00406108, total time[s] 0.087824 +Converged at iteration 31, L1 7.17596e-05, Linf 0.00355196, total time[s] 0.078671 +Converged at iteration 29, L1 7.02725e-05, Linf 0.00272401, total time[s] 0.074226 +Converged at iteration 32, L1 8.21629e-05, Linf 0.00354568, total time[s] 0.081683 +Converged at iteration 36, L1 8.71689e-05, Linf 0.00357618, total time[s] 0.091955 +Converged at iteration 33, L1 8.32361e-05, Linf 0.00484757, total time[s] 0.0838 +Converged at iteration 28, L1 9.10466e-05, Linf 0.0041318, total time[s] 0.071827 +Converged at iteration 24, L1 8.02465e-05, Linf 0.00290887, total time[s] 0.063202 +Converged at iteration 26, L1 8.39861e-05, Linf 0.00392365, total time[s] 0.067445 +Converged at iteration 39, L1 9.99303e-05, Linf 0.00489198, total time[s] 0.097532 +Converged at iteration 35, L1 9.68612e-05, Linf 0.00385801, total time[s] 0.099204 +Converged at iteration 30, L1 7.64784e-05, Linf 0.00421028, total time[s] 0.088437 +Converged at iteration 31, L1 6.13567e-05, Linf 0.00506464, total time[s] 0.082095 +Converged at iteration 26, L1 9.10572e-05, Linf 0.00568979, total time[s] 0.069848 +Converged at iteration 21, L1 9.60183e-05, Linf 0.00461198, total time[s] 0.057459 +Converged at iteration 21, L1 6.92239e-05, Linf 0.00393129, total time[s] 0.075146 +Converged at iteration 24, L1 8.29699e-05, Linf 0.00519974, total time[s] 0.102007 +Converged at iteration 28, L1 6.80431e-05, Linf 0.00441196, total time[s] 0.091527 +Converged at iteration 26, L1 8.12491e-05, Linf 0.00428441, total time[s] 0.07659 +Converged at iteration 21, L1 8.51923e-05, Linf 0.00433737, total time[s] 0.079234 +Converged at iteration 18, L1 7.35833e-05, Linf 0.00298989, total time[s] 0.0648 +Converged at iteration 31, L1 7.49347e-05, Linf 0.00271661, total time[s] 0.092576 +Converged at iteration 20, L1 8.22642e-05, Linf 0.00495039, total time[s] 0.054499 +Converged at iteration 24, L1 6.88771e-05, Linf 0.00500085, total time[s] 0.065489 +Converged at iteration 30, L1 9.41654e-05, Linf 0.00345512, total time[s] 0.106675 +Converged at iteration 25, L1 9.0176e-05, Linf 0.00466613, total time[s] 0.080216 +Converged at iteration 23, L1 8.36357e-05, Linf 0.00393109, total time[s] 0.079027 +Converged at iteration 23, L1 9.32743e-05, Linf 0.00455949, total time[s] 0.079781 +Converged at iteration 26, L1 6.88605e-05, Linf 0.00480744, total time[s] 0.086352 +Converged at iteration 29, L1 7.12201e-05, Linf 0.00490146, total time[s] 0.084644 +Converged at iteration 32, L1 8.57779e-05, Linf 0.00350129, total time[s] 0.084817 +Converged at iteration 31, L1 7.25441e-05, Linf 0.00301991, total time[s] 0.08076 +Converged at iteration 29, L1 7.74419e-05, Linf 0.00289809, total time[s] 0.075698 +Converged at iteration 32, L1 7.5553e-05, Linf 0.00336115, total time[s] 0.083251 +Converged at iteration 35, L1 9.72359e-05, Linf 0.00405369, total time[s] 0.092521 +Converged at iteration 33, L1 8.06693e-05, Linf 0.00500151, total time[s] 0.083717 +Converged at iteration 28, L1 8.44712e-05, Linf 0.00398759, total time[s] 0.073287 +Converged at iteration 24, L1 7.80826e-05, Linf 0.00256146, total time[s] 0.065579 +Converged at iteration 26, L1 8.36335e-05, Linf 0.00405332, total time[s] 0.073094 +Converged at iteration 39, L1 9.34301e-05, Linf 0.00549167, total time[s] 0.10572 +Converged at iteration 36, L1 7.23671e-05, Linf 0.0038447, total time[s] 0.093162 +Converged at iteration 27, L1 5.17454e-05, Linf 0.0056564, total time[s] 0.071217 +Converged at iteration 31, L1 6.04554e-05, Linf 0.00508915, total time[s] 0.081371 +Converged at iteration 26, L1 7.63504e-05, Linf 0.00544341, total time[s] 0.068054 +Converged at iteration 21, L1 7.17758e-05, Linf 0.00380748, total time[s] 0.056749 +Converged at iteration 20, L1 6.89296e-05, Linf 0.00502944, total time[s] 0.054096 +Converged at iteration 22, L1 7.53335e-05, Linf 0.00751888, total time[s] 0.059725 +Converged at iteration 26, L1 9.72761e-05, Linf 0.00651811, total time[s] 0.072929 +Converged at iteration 25, L1 7.44646e-05, Linf 0.00412523, total time[s] 0.069548 +Converged at iteration 20, L1 8.84163e-05, Linf 0.00555823, total time[s] 0.056072 +Converged at iteration 17, L1 8.52464e-05, Linf 0.00400214, total time[s] 0.047855 +Converged at iteration 31, L1 9.13862e-05, Linf 0.00277119, total time[s] 0.079468 +Converged at iteration 20, L1 6.64016e-05, Linf 0.00539278, total time[s] 0.05395 +Converged at iteration 24, L1 6.21107e-05, Linf 0.00553354, total time[s] 0.075788 +Converged at iteration 28, L1 7.07418e-05, Linf 0.00374043, total time[s] 0.087662 +Converged at iteration 23, L1 9.56656e-05, Linf 0.00710132, total time[s] 0.066771 +Converged at iteration 21, L1 9.30001e-05, Linf 0.00485113, total time[s] 0.065957 +Converged at iteration 23, L1 7.86332e-05, Linf 0.00414949, total time[s] 0.069318 +Converged at iteration 25, L1 9.9431e-05, Linf 0.00625579, total time[s] 0.074748 +Converged at iteration 28, L1 9.827e-05, Linf 0.00586754, total time[s] 0.093252 +Converged at iteration 30, L1 6.86185e-05, Linf 0.00488135, total time[s] 0.076896 +Converged at iteration 28, L1 8.30341e-05, Linf 0.00350207, total time[s] 0.072558 +Converged at iteration 29, L1 8.81952e-05, Linf 0.00329485, total time[s] 0.077721 +Converged at iteration 31, L1 6.93424e-05, Linf 0.00290627, total time[s] 0.080492 +Converged at iteration 31, L1 9.11114e-05, Linf 0.00460268, total time[s] 0.079197 +Converged at iteration 33, L1 7.40794e-05, Linf 0.00530568, total time[s] 0.083431 +Converged at iteration 28, L1 7.08634e-05, Linf 0.00369755, total time[s] 0.098916 +Converged at iteration 24, L1 8.79868e-05, Linf 0.0018755, total time[s] 0.107167 +Converged at iteration 25, L1 6.99829e-05, Linf 0.00423563, total time[s] 0.069247 +Converged at iteration 39, L1 7.6387e-05, Linf 0.006599, total time[s] 0.17256 +Converged at iteration 36, L1 7.32714e-05, Linf 0.00527052, total time[s] 0.11306 +Converged at iteration 24, L1 7.48287e-05, Linf 0.00411565, total time[s] 0.07257 +Converged at iteration 31, L1 5.83667e-05, Linf 0.00509163, total time[s] 0.093052 +Converged at iteration 25, L1 8.6709e-05, Linf 0.00571595, total time[s] 0.069249 +Converged at iteration 20, L1 9.2051e-05, Linf 0.00380205, total time[s] 0.077537 +Converged at iteration 19, L1 6.64217e-05, Linf 0.00437211, total time[s] 0.057827 +Converged at iteration 20, L1 9.17257e-05, Linf 0.00663672, total time[s] 0.062235 +Converged at iteration 24, L1 7.93847e-05, Linf 0.00495819, total time[s] 0.06617 +Converged at iteration 24, L1 7.58681e-05, Linf 0.00492112, total time[s] 0.066206 +Converged at iteration 20, L1 6.05372e-05, Linf 0.00519213, total time[s] 0.054952 +Converged at iteration 17, L1 5.19415e-05, Linf 0.00241318, total time[s] 0.047679 +Converged at iteration 32, L1 6.88531e-05, Linf 0.0025374, total time[s] 0.083918 +Converged at iteration 19, L1 9.32676e-05, Linf 0.00707778, total time[s] 0.05768 +Converged at iteration 23, L1 7.80375e-05, Linf 0.00710084, total time[s] 0.061 +Converged at iteration 26, L1 8.14194e-05, Linf 0.00603237, total time[s] 0.067649 +Converged at iteration 23, L1 5.79122e-05, Linf 0.00605259, total time[s] 0.060265 +Converged at iteration 20, L1 8.31669e-05, Linf 0.0055273, total time[s] 0.053227 +Converged at iteration 22, L1 9.95031e-05, Linf 0.00498688, total time[s] 0.058512 +Converged at iteration 25, L1 8.48196e-05, Linf 0.00440073, total time[s] 0.070175 +Converged at iteration 28, L1 7.81827e-05, Linf 0.00358713, total time[s] 0.118848 +Converged at iteration 29, L1 7.48394e-05, Linf 0.00610555, total time[s] 0.077086 +Converged at iteration 27, L1 7.34873e-05, Linf 0.00399273, total time[s] 0.069752 +Converged at iteration 29, L1 7.65677e-05, Linf 0.00381658, total time[s] 0.074928 +Converged at iteration 29, L1 9.19963e-05, Linf 0.00277218, total time[s] 0.073884 +Converged at iteration 28, L1 8.39375e-05, Linf 0.00273852, total time[s] 0.070554 +Converged at iteration 33, L1 6.18066e-05, Linf 0.00584927, total time[s] 0.082357 +Converged at iteration 27, L1 6.87698e-05, Linf 0.00334628, total time[s] 0.06881 +Converged at iteration 24, L1 9.65627e-05, Linf 0.00239087, total time[s] 0.061617 +Converged at iteration 23, L1 7.61751e-05, Linf 0.00331366, total time[s] 0.065514 +Converged at iteration 39, L1 7.44233e-05, Linf 0.00661502, total time[s] 0.127022 +Converged at iteration 36, L1 7.20483e-05, Linf 0.00533692, total time[s] 0.106367 +Converged at iteration 24, L1 7.4338e-05, Linf 0.00388457, total time[s] 0.064971 +Converged at iteration 31, L1 5.69578e-05, Linf 0.00507395, total time[s] 0.081309 +Converged at iteration 25, L1 8.73875e-05, Linf 0.00584042, total time[s] 0.06827 +Converged at iteration 20, L1 9.41579e-05, Linf 0.00386639, total time[s] 0.055043 +Converged at iteration 19, L1 6.40768e-05, Linf 0.00430461, total time[s] 0.056074 +Converged at iteration 20, L1 9.02364e-05, Linf 0.00655215, total time[s] 0.055508 +Converged at iteration 24, L1 7.6905e-05, Linf 0.00456306, total time[s] 0.062764 +Converged at iteration 24, L1 7.67964e-05, Linf 0.00498617, total time[s] 0.062189 +Converged at iteration 20, L1 6.20572e-05, Linf 0.00515347, total time[s] 0.058071 +Converged at iteration 16, L1 9.93192e-05, Linf 0.00457313, total time[s] 0.048898 +Converged at iteration 32, L1 6.88359e-05, Linf 0.0025777, total time[s] 0.089526 +Converged at iteration 19, L1 9.35289e-05, Linf 0.0069792, total time[s] 0.052562 +Converged at iteration 23, L1 7.75673e-05, Linf 0.00702834, total time[s] 0.058392 +Converged at iteration 26, L1 7.99009e-05, Linf 0.0059661, total time[s] 0.068099 +Converged at iteration 23, L1 5.70703e-05, Linf 0.00596292, total time[s] 0.06885 +Converged at iteration 20, L1 8.25383e-05, Linf 0.00551297, total time[s] 0.055799 +Converged at iteration 23, L1 6.37061e-05, Linf 0.0028781, total time[s] 0.060471 +Converged at iteration 25, L1 8.37728e-05, Linf 0.00419909, total time[s] 0.067724 +Converged at iteration 28, L1 7.81532e-05, Linf 0.0055446, total time[s] 0.075121 +Converged at iteration 29, L1 7.46015e-05, Linf 0.00612424, total time[s] 0.095016 +Converged at iteration 27, L1 7.43928e-05, Linf 0.00396161, total time[s] 0.073836 +Converged at iteration 29, L1 7.78362e-05, Linf 0.00382388, total time[s] 0.081876 +Converged at iteration 29, L1 9.29212e-05, Linf 0.00277462, total time[s] 0.081512 +Converged at iteration 28, L1 8.35294e-05, Linf 0.00266473, total time[s] 0.07973 +Converged at iteration 33, L1 6.00178e-05, Linf 0.00579181, total time[s] 0.095201 +Converged at iteration 27, L1 6.98967e-05, Linf 0.00342725, total time[s] 0.071596 +Converged at iteration 24, L1 9.92331e-05, Linf 0.00243518, total time[s] 0.063861 +Converged at iteration 23, L1 7.52472e-05, Linf 0.00324601, total time[s] 0.061124 +Converged at iteration 39, L1 7.26742e-05, Linf 0.00672644, total time[s] 0.100073 +Converged at iteration 36, L1 7.00656e-05, Linf 0.00534624, total time[s] 0.095928 +Converged at iteration 24, L1 7.37232e-05, Linf 0.00367861, total time[s] 0.0624 +Converged at iteration 31, L1 5.58713e-05, Linf 0.005019, total time[s] 0.079018 +Converged at iteration 25, L1 8.87005e-05, Linf 0.00592485, total time[s] 0.065718 +Converged at iteration 20, L1 9.83877e-05, Linf 0.00391921, total time[s] 0.054779 +Converged at iteration 19, L1 6.15815e-05, Linf 0.00426952, total time[s] 0.052469 +Converged at iteration 20, L1 8.83095e-05, Linf 0.00608464, total time[s] 0.054435 +Converged at iteration 24, L1 7.42868e-05, Linf 0.00422487, total time[s] 0.065234 +Converged at iteration 24, L1 7.79665e-05, Linf 0.00506612, total time[s] 0.063969 +Converged at iteration 20, L1 6.22935e-05, Linf 0.00517397, total time[s] 0.054866 +Converged at iteration 16, L1 9.79322e-05, Linf 0.00481171, total time[s] 0.046099 +Converged at iteration 32, L1 6.84922e-05, Linf 0.00262463, total time[s] 0.089156 +Converged at iteration 19, L1 9.47421e-05, Linf 0.00687709, total time[s] 0.05935 +Converged at iteration 23, L1 7.69659e-05, Linf 0.00694577, total time[s] 0.063547 +Converged at iteration 26, L1 7.97087e-05, Linf 0.00593079, total time[s] 0.067983 +Converged at iteration 23, L1 5.69074e-05, Linf 0.00598982, total time[s] 0.063005 +Converged at iteration 20, L1 8.3655e-05, Linf 0.00551343, total time[s] 0.05471 +Converged at iteration 23, L1 6.51202e-05, Linf 0.00284104, total time[s] 0.075474 +Converged at iteration 25, L1 8.33977e-05, Linf 0.00403677, total time[s] 0.066947 +Converged at iteration 28, L1 7.71098e-05, Linf 0.00362179, total time[s] 0.076506 +Converged at iteration 29, L1 7.58769e-05, Linf 0.00618429, total time[s] 0.076027 +Converged at iteration 27, L1 7.52055e-05, Linf 0.0039772, total time[s] 0.074585 +Converged at iteration 29, L1 7.93118e-05, Linf 0.00389066, total time[s] 0.075047 +Converged at iteration 29, L1 9.42441e-05, Linf 0.00278023, total time[s] 0.075489 +Converged at iteration 28, L1 8.12823e-05, Linf 0.00260628, total time[s] 0.073254 +Converged at iteration 33, L1 5.84514e-05, Linf 0.00585253, total time[s] 0.090705 +Converged at iteration 27, L1 6.93254e-05, Linf 0.00353688, total time[s] 0.070765 +Converged at iteration 25, L1 7.12105e-05, Linf 0.0019353, total time[s] 0.072933 +Converged at iteration 23, L1 7.43267e-05, Linf 0.00318758, total time[s] 0.066413 +Converged at iteration 39, L1 7.10495e-05, Linf 0.00661583, total time[s] 0.114977 +Converged at iteration 36, L1 6.83169e-05, Linf 0.00546025, total time[s] 0.089155 +Converged at iteration 24, L1 7.30865e-05, Linf 0.00336418, total time[s] 0.062455 +Converged at iteration 30, L1 9.89303e-05, Linf 0.00615479, total time[s] 0.081588 +Converged at iteration 25, L1 9.24504e-05, Linf 0.00625687, total time[s] 0.071674 +Converged at iteration 21, L1 5.85866e-05, Linf 0.0034323, total time[s] 0.057424 +Converged at iteration 19, L1 5.99444e-05, Linf 0.00410072, total time[s] 0.050747 +Converged at iteration 20, L1 8.60055e-05, Linf 0.00645531, total time[s] 0.053782 +Converged at iteration 24, L1 7.17781e-05, Linf 0.00445213, total time[s] 0.063749 +Converged at iteration 24, L1 8.10153e-05, Linf 0.00523279, total time[s] 0.098095 +Converged at iteration 20, L1 6.49085e-05, Linf 0.00543472, total time[s] 0.068115 +Converged at iteration 16, L1 9.73214e-05, Linf 0.005069, total time[s] 0.050432 +Converged at iteration 32, L1 6.78432e-05, Linf 0.00271921, total time[s] 0.15964 +Converged at iteration 19, L1 9.45429e-05, Linf 0.00674427, total time[s] 0.05627 +Converged at iteration 23, L1 7.6891e-05, Linf 0.00688093, total time[s] 0.06918 +Converged at iteration 26, L1 8.0248e-05, Linf 0.00589274, total time[s] 0.07599 +Converged at iteration 23, L1 5.64244e-05, Linf 0.00595858, total time[s] 0.06083 +Converged at iteration 20, L1 8.53136e-05, Linf 0.00551674, total time[s] 0.053602 +Converged at iteration 23, L1 6.73932e-05, Linf 0.00285336, total time[s] 0.062528 +Converged at iteration 25, L1 8.39151e-05, Linf 0.00390449, total time[s] 0.069335 +Converged at iteration 28, L1 7.78227e-05, Linf 0.00378924, total time[s] 0.099714 +Converged at iteration 29, L1 7.75381e-05, Linf 0.00624139, total time[s] 0.098512 +Converged at iteration 27, L1 7.70201e-05, Linf 0.00395289, total time[s] 0.080033 +Converged at iteration 29, L1 8.09947e-05, Linf 0.00392803, total time[s] 0.082906 +Converged at iteration 29, L1 9.28378e-05, Linf 0.00278275, total time[s] 0.08557 +Converged at iteration 28, L1 8.05548e-05, Linf 0.00253966, total time[s] 0.086266 +Converged at iteration 32, L1 9.89846e-05, Linf 0.00696301, total time[s] 0.082723 +Converged at iteration 27, L1 7.16919e-05, Linf 0.00371331, total time[s] 0.070939 +Converged at iteration 25, L1 7.18212e-05, Linf 0.00198896, total time[s] 0.078267 +Converged at iteration 23, L1 7.42703e-05, Linf 0.00310043, total time[s] 0.074485 +Converged at iteration 39, L1 6.95651e-05, Linf 0.00658816, total time[s] 0.101119 +Converged at iteration 36, L1 6.66441e-05, Linf 0.00550811, total time[s] 0.101711 +Converged at iteration 24, L1 7.25446e-05, Linf 0.00309886, total time[s] 0.078639 +Converged at iteration 30, L1 9.65784e-05, Linf 0.00610828, total time[s] 0.078896 +Converged at iteration 25, L1 9.83832e-05, Linf 0.00655462, total time[s] 0.066854 +Converged at iteration 21, L1 6.49394e-05, Linf 0.00333568, total time[s] 0.068367 +Converged at iteration 19, L1 5.87454e-05, Linf 0.00392582, total time[s] 0.05626 +Converged at iteration 20, L1 8.2895e-05, Linf 0.00614809, total time[s] 0.07163 +Converged at iteration 24, L1 6.87613e-05, Linf 0.0035019, total time[s] 0.087377 +Converged at iteration 24, L1 8.48486e-05, Linf 0.00539649, total time[s] 0.082628 +Converged at iteration 20, L1 6.94713e-05, Linf 0.00568772, total time[s] 0.065028 +Converged at iteration 16, L1 9.70664e-05, Linf 0.00537972, total time[s] 0.071883 +Converged at iteration 32, L1 6.57027e-05, Linf 0.00264274, total time[s] 0.115232 +Converged at iteration 19, L1 9.44599e-05, Linf 0.00657894, total time[s] 0.05171 +Converged at iteration 23, L1 7.68259e-05, Linf 0.00666741, total time[s] 0.061121 +Converged at iteration 26, L1 8.13512e-05, Linf 0.00586155, total time[s] 0.068757 +Converged at iteration 23, L1 5.60111e-05, Linf 0.00597805, total time[s] 0.06365 +Converged at iteration 20, L1 8.86819e-05, Linf 0.00552439, total time[s] 0.054601 +Converged at iteration 23, L1 6.95978e-05, Linf 0.00280976, total time[s] 0.07117 +Converged at iteration 25, L1 8.48198e-05, Linf 0.00378668, total time[s] 0.07334 +Converged at iteration 28, L1 7.92614e-05, Linf 0.00400952, total time[s] 0.07633 +Converged at iteration 29, L1 7.96821e-05, Linf 0.00631224, total time[s] 0.08482 +Converged at iteration 27, L1 7.95352e-05, Linf 0.00392753, total time[s] 0.101273 +Converged at iteration 29, L1 8.28353e-05, Linf 0.00402089, total time[s] 0.092975 +Converged at iteration 29, L1 9.36891e-05, Linf 0.00277519, total time[s] 0.098055 +Converged at iteration 28, L1 8.25426e-05, Linf 0.00247734, total time[s] 0.079226 +Converged at iteration 32, L1 9.61801e-05, Linf 0.00693263, total time[s] 0.150471 +Converged at iteration 27, L1 7.58109e-05, Linf 0.00407291, total time[s] 0.075847 +Converged at iteration 25, L1 6.93965e-05, Linf 0.00201742, total time[s] 0.065935 +Converged at iteration 23, L1 7.51773e-05, Linf 0.00299987, total time[s] 0.061513 +Converged at iteration 39, L1 6.85024e-05, Linf 0.00654898, total time[s] 0.100517 +Converged at iteration 36, L1 6.37861e-05, Linf 0.00555047, total time[s] 0.109107 +Converged at iteration 24, L1 7.26953e-05, Linf 0.0030808, total time[s] 0.066082 +Converged at iteration 30, L1 9.41388e-05, Linf 0.00605407, total time[s] 0.076469 +Converged at iteration 26, L1 5.93297e-05, Linf 0.00588344, total time[s] 0.068158 +Converged at iteration 21, L1 7.50929e-05, Linf 0.00339937, total time[s] 0.056844 +Converged at iteration 19, L1 5.76873e-05, Linf 0.00390945, total time[s] 0.051288 +Converged at iteration 20, L1 7.96247e-05, Linf 0.00641004, total time[s] 0.053877 +Converged at iteration 24, L1 6.54766e-05, Linf 0.00398219, total time[s] 0.06565 +Converged at iteration 24, L1 8.91795e-05, Linf 0.00563871, total time[s] 0.066366 +Converged at iteration 20, L1 7.45592e-05, Linf 0.00581735, total time[s] 0.053423 +Converged at iteration 16, L1 9.67945e-05, Linf 0.00574869, total time[s] 0.043475 +Converged at iteration 32, L1 6.26261e-05, Linf 0.00266325, total time[s] 0.0893 +Converged at iteration 19, L1 9.38669e-05, Linf 0.00640282, total time[s] 0.058906 +Converged at iteration 23, L1 7.59767e-05, Linf 0.00645806, total time[s] 0.06044 +Converged at iteration 26, L1 8.20842e-05, Linf 0.00584248, total time[s] 0.071602 +Converged at iteration 23, L1 5.51917e-05, Linf 0.00599702, total time[s] 0.067079 +Converged at iteration 20, L1 9.3146e-05, Linf 0.00550894, total time[s] 0.05805 +Converged at iteration 23, L1 7.1741e-05, Linf 0.00264767, total time[s] 0.061253 +Converged at iteration 25, L1 8.59697e-05, Linf 0.00367474, total time[s] 0.065556 +Converged at iteration 28, L1 8.08848e-05, Linf 0.00429683, total time[s] 0.078573 +Converged at iteration 29, L1 8.25983e-05, Linf 0.0063916, total time[s] 0.078421 +Converged at iteration 27, L1 8.2806e-05, Linf 0.00390239, total time[s] 0.070411 +Converged at iteration 29, L1 8.53446e-05, Linf 0.00406244, total time[s] 0.074055 +Converged at iteration 29, L1 9.3697e-05, Linf 0.00276547, total time[s] 0.080754 +Converged at iteration 28, L1 8.0884e-05, Linf 0.00241702, total time[s] 0.078896 +Converged at iteration 32, L1 9.30233e-05, Linf 0.00687844, total time[s] 0.102175 +Converged at iteration 27, L1 8.12411e-05, Linf 0.00449411, total time[s] 0.07692 +Converged at iteration 24, L1 9.91025e-05, Linf 0.00261596, total time[s] 0.077365 +Converged at iteration 23, L1 7.71568e-05, Linf 0.00286106, total time[s] 0.077456 +Converged at iteration 39, L1 6.6578e-05, Linf 0.00649362, total time[s] 0.107603 +Converged at iteration 36, L1 5.98898e-05, Linf 0.00555943, total time[s] 0.100577 +Converged at iteration 24, L1 7.46106e-05, Linf 0.00293867, total time[s] 0.064711 +Converged at iteration 30, L1 9.12567e-05, Linf 0.00598938, total time[s] 0.076609 +Converged at iteration 26, L1 6.46219e-05, Linf 0.00632783, total time[s] 0.066758 +Converged at iteration 21, L1 8.99441e-05, Linf 0.0043486, total time[s] 0.061985 +Converged at iteration 19, L1 5.71468e-05, Linf 0.00397544, total time[s] 0.06214 +Converged at iteration 20, L1 7.62116e-05, Linf 0.00595789, total time[s] 0.069566 +Converged at iteration 24, L1 6.20275e-05, Linf 0.00327183, total time[s] 0.094184 +Converged at iteration 24, L1 9.5133e-05, Linf 0.00589979, total time[s] 0.101884 +Converged at iteration 20, L1 8.10648e-05, Linf 0.00595911, total time[s] 0.065914 +Converged at iteration 16, L1 9.6595e-05, Linf 0.00611285, total time[s] 0.065328 +Converged at iteration 32, L1 5.78921e-05, Linf 0.00267461, total time[s] 0.096925 +Converged at iteration 19, L1 9.28052e-05, Linf 0.00637196, total time[s] 0.054276 +Converged at iteration 23, L1 7.48165e-05, Linf 0.0062309, total time[s] 0.062162 +Converged at iteration 26, L1 8.35837e-05, Linf 0.00582588, total time[s] 0.076813 +Converged at iteration 23, L1 5.4822e-05, Linf 0.00600528, total time[s] 0.061406 +Converged at iteration 20, L1 9.90155e-05, Linf 0.00560825, total time[s] 0.054467 +Converged at iteration 23, L1 7.35765e-05, Linf 0.00256223, total time[s] 0.062825 +Converged at iteration 25, L1 8.7252e-05, Linf 0.00358423, total time[s] 0.066237 +Converged at iteration 28, L1 8.30081e-05, Linf 0.0044748, total time[s] 0.072005 +Converged at iteration 29, L1 8.58515e-05, Linf 0.00645102, total time[s] 0.074812 +Converged at iteration 27, L1 8.60962e-05, Linf 0.00391839, total time[s] 0.070654 +Converged at iteration 29, L1 8.74469e-05, Linf 0.0041477, total time[s] 0.075734 +Converged at iteration 29, L1 9.4109e-05, Linf 0.00277906, total time[s] 0.078157 +Converged at iteration 28, L1 8.05738e-05, Linf 0.0023661, total time[s] 0.073177 +Converged at iteration 32, L1 8.89823e-05, Linf 0.00680199, total time[s] 0.083759 +Converged at iteration 27, L1 8.7254e-05, Linf 0.00499544, total time[s] 0.071534 +Converged at iteration 24, L1 9.96195e-05, Linf 0.00261427, total time[s] 0.062881 +Converged at iteration 23, L1 7.92492e-05, Linf 0.00273948, total time[s] 0.060411 +Converged at iteration 39, L1 6.49362e-05, Linf 0.00642255, total time[s] 0.099754 +Converged at iteration 35, L1 9.98719e-05, Linf 0.00647777, total time[s] 0.0951 +Converged at iteration 24, L1 7.65472e-05, Linf 0.0028382, total time[s] 0.064217 +Converged at iteration 30, L1 8.78221e-05, Linf 0.0059133, total time[s] 0.080906 +Converged at iteration 26, L1 6.97576e-05, Linf 0.00682679, total time[s] 0.067024 +Converged at iteration 22, L1 5.90196e-05, Linf 0.00433291, total time[s] 0.068356 +Converged at iteration 19, L1 5.73048e-05, Linf 0.00400996, total time[s] 0.06799 +Converged at iteration 20, L1 7.30849e-05, Linf 0.0056326, total time[s] 0.067123 +Converged at iteration 24, L1 5.87581e-05, Linf 0.00322772, total time[s] 0.088548 +Converged at iteration 24, L1 9.98562e-05, Linf 0.00617945, total time[s] 0.074181 +Converged at iteration 20, L1 8.82642e-05, Linf 0.00610839, total time[s] 0.056673 +Converged at iteration 16, L1 9.63913e-05, Linf 0.00644237, total time[s] 0.062531 +Converged at iteration 31, L1 9.37873e-05, Linf 0.003258, total time[s] 0.107332 +Converged at iteration 19, L1 9.07526e-05, Linf 0.00604136, total time[s] 0.051152 +Converged at iteration 23, L1 7.31727e-05, Linf 0.00596067, total time[s] 0.059977 +Converged at iteration 26, L1 8.47703e-05, Linf 0.0057915, total time[s] 0.066864 +Converged at iteration 23, L1 5.54827e-05, Linf 0.00605889, total time[s] 0.068438 +Converged at iteration 21, L1 5.74454e-05, Linf 0.00472432, total time[s] 0.081097 +Converged at iteration 23, L1 7.37003e-05, Linf 0.00245317, total time[s] 0.077444 +Converged at iteration 25, L1 8.7772e-05, Linf 0.00348774, total time[s] 0.091215 +Converged at iteration 28, L1 8.56653e-05, Linf 0.00465281, total time[s] 0.088717 +Converged at iteration 29, L1 8.98809e-05, Linf 0.00656395, total time[s] 0.086253 +Converged at iteration 27, L1 8.95645e-05, Linf 0.00387178, total time[s] 0.08289 +Converged at iteration 29, L1 8.86553e-05, Linf 0.00423249, total time[s] 0.080509 +Converged at iteration 29, L1 9.51753e-05, Linf 0.00282454, total time[s] 0.078157 +Converged at iteration 28, L1 8.04374e-05, Linf 0.00232846, total time[s] 0.072719 +Converged at iteration 32, L1 8.36439e-05, Linf 0.00670157, total time[s] 0.083525 +Converged at iteration 27, L1 9.54813e-05, Linf 0.00555361, total time[s] 0.070269 +Converged at iteration 25, L1 6.47034e-05, Linf 0.00206509, total time[s] 0.065544 +Converged at iteration 23, L1 8.23584e-05, Linf 0.00264941, total time[s] 0.06028 +Converged at iteration 39, L1 6.1736e-05, Linf 0.00631311, total time[s] 0.102114 +Converged at iteration 35, L1 8.85316e-05, Linf 0.0064575, total time[s] 0.102462 +Converged at iteration 24, L1 7.92033e-05, Linf 0.00287568, total time[s] 0.063798 +Converged at iteration 30, L1 8.34346e-05, Linf 0.00582313, total time[s] 0.078896 +Converged at iteration 26, L1 7.53615e-05, Linf 0.00737129, total time[s] 0.068007 +Converged at iteration 22, L1 7.69574e-05, Linf 0.00547104, total time[s] 0.062015 +Converged at iteration 19, L1 5.82492e-05, Linf 0.0040764, total time[s] 0.059597 +Converged at iteration 20, L1 6.97783e-05, Linf 0.00537294, total time[s] 0.070672 +Converged at iteration 24, L1 5.59111e-05, Linf 0.0031377, total time[s] 0.09636 +Converged at iteration 25, L1 5.68205e-05, Linf 0.00523381, total time[s] 0.079521 +Converged at iteration 20, L1 9.65008e-05, Linf 0.00626045, total time[s] 0.062565 +Converged at iteration 16, L1 9.72044e-05, Linf 0.0066607, total time[s] 0.056111 +Converged at iteration 31, L1 8.85798e-05, Linf 0.00331537, total time[s] 0.110563 +Converged at iteration 19, L1 8.64335e-05, Linf 0.00572206, total time[s] 0.052351 +Converged at iteration 23, L1 7.11851e-05, Linf 0.00569135, total time[s] 0.061227 +Converged at iteration 26, L1 8.57666e-05, Linf 0.00572002, total time[s] 0.067388 +Converged at iteration 23, L1 5.64735e-05, Linf 0.00609609, total time[s] 0.059828 +Converged at iteration 21, L1 6.26558e-05, Linf 0.00472648, total time[s] 0.055311 +Converged at iteration 23, L1 7.34573e-05, Linf 0.0023124, total time[s] 0.059944 +Converged at iteration 25, L1 8.73505e-05, Linf 0.00340779, total time[s] 0.066745 +Converged at iteration 28, L1 8.90313e-05, Linf 0.00495028, total time[s] 0.074368 +Converged at iteration 29, L1 9.36615e-05, Linf 0.00665563, total time[s] 0.07647 +Converged at iteration 27, L1 9.28236e-05, Linf 0.00390119, total time[s] 0.069564 +Converged at iteration 29, L1 9.04743e-05, Linf 0.00433602, total time[s] 0.074232 +Converged at iteration 29, L1 9.6021e-05, Linf 0.00286511, total time[s] 0.07662 +Converged at iteration 28, L1 8.11534e-05, Linf 0.00228532, total time[s] 0.071522 +Converged at iteration 32, L1 7.77516e-05, Linf 0.00668129, total time[s] 0.080642 +Converged at iteration 28, L1 6.07772e-05, Linf 0.00516732, total time[s] 0.071299 +Converged at iteration 25, L1 6.86571e-05, Linf 0.00270174, total time[s] 0.064833 +Converged at iteration 23, L1 8.61945e-05, Linf 0.00256696, total time[s] 0.060401 +Converged at iteration 39, L1 5.6192e-05, Linf 0.00617789, total time[s] 0.102439 +Converged at iteration 35, L1 8.0972e-05, Linf 0.00643712, total time[s] 0.09362 +Converged at iteration 24, L1 8.3584e-05, Linf 0.00299218, total time[s] 0.067182 +Converged at iteration 30, L1 7.8767e-05, Linf 0.00572407, total time[s] 0.076324 +Converged at iteration 26, L1 8.05243e-05, Linf 0.00796314, total time[s] 0.068676 +Converged at iteration 22, L1 9.92004e-05, Linf 0.00651766, total time[s] 0.058344 +Converged at iteration 19, L1 6.07744e-05, Linf 0.00414077, total time[s] 0.06045 +Converged at iteration 20, L1 6.70001e-05, Linf 0.00485998, total time[s] 0.072393 +Converged at iteration 24, L1 5.41642e-05, Linf 0.00450483, total time[s] 0.08343 +Converged at iteration 25, L1 6.0102e-05, Linf 0.00550666, total time[s] 0.103589 +Converged at iteration 21, L1 5.42437e-05, Linf 0.00535547, total time[s] 0.146369 +Converged at iteration 16, L1 9.83552e-05, Linf 0.00661074, total time[s] 0.071667 +Converged at iteration 31, L1 8.44706e-05, Linf 0.00331271, total time[s] 0.083783 +Converged at iteration 19, L1 8.01686e-05, Linf 0.00554092, total time[s] 0.052741 +Converged at iteration 23, L1 6.85337e-05, Linf 0.00530289, total time[s] 0.062968 +Converged at iteration 26, L1 8.7701e-05, Linf 0.00562273, total time[s] 0.070361 +Converged at iteration 23, L1 5.75988e-05, Linf 0.00613279, total time[s] 0.069034 +Converged at iteration 21, L1 6.82083e-05, Linf 0.0046471, total time[s] 0.066484 +Converged at iteration 23, L1 7.19483e-05, Linf 0.0021377, total time[s] 0.071635 +Converged at iteration 25, L1 8.8109e-05, Linf 0.00333997, total time[s] 0.078064 +Converged at iteration 28, L1 9.23677e-05, Linf 0.00522278, total time[s] 0.078404 +Converged at iteration 29, L1 9.83184e-05, Linf 0.00676772, total time[s] 0.080874 +Converged at iteration 27, L1 9.63252e-05, Linf 0.00368104, total time[s] 0.070601 +Converged at iteration 29, L1 9.39593e-05, Linf 0.00447161, total time[s] 0.075323 +Converged at iteration 29, L1 9.71351e-05, Linf 0.0029127, total time[s] 0.075595 +Converged at iteration 28, L1 8.25327e-05, Linf 0.0022429, total time[s] 0.073615 +Converged at iteration 32, L1 7.17899e-05, Linf 0.00645591, total time[s] 0.081567 +Converged at iteration 28, L1 6.24418e-05, Linf 0.00573775, total time[s] 0.074388 +Converged at iteration 25, L1 7.54083e-05, Linf 0.00348922, total time[s] 0.065864 +Converged at iteration 23, L1 9.02971e-05, Linf 0.00252166, total time[s] 0.061021 +Converged at iteration 38, L1 9.97054e-05, Linf 0.00725171, total time[s] 0.097668 +Converged at iteration 35, L1 6.93056e-05, Linf 0.00632439, total time[s] 0.095977 +Converged at iteration 24, L1 8.76181e-05, Linf 0.00312639, total time[s] 0.064506 +Converged at iteration 30, L1 7.26668e-05, Linf 0.00563845, total time[s] 0.077025 +Converged at iteration 26, L1 8.54784e-05, Linf 0.00847274, total time[s] 0.068891 +Converged at iteration 23, L1 6.73225e-05, Linf 0.00626867, total time[s] 0.060886 +Converged at iteration 19, L1 6.39041e-05, Linf 0.00426994, total time[s] 0.059073 +Converged at iteration 20, L1 6.46793e-05, Linf 0.00434298, total time[s] 0.067496 +Converged at iteration 23, L1 9.94788e-05, Linf 0.00450477, total time[s] 0.072407 +Converged at iteration 25, L1 6.46106e-05, Linf 0.00578149, total time[s] 0.075099 +Converged at iteration 21, L1 5.7778e-05, Linf 0.00551287, total time[s] 0.066979 +Converged at iteration 16, L1 9.91904e-05, Linf 0.00683524, total time[s] 0.054788 +Converged at iteration 31, L1 8.11629e-05, Linf 0.00327434, total time[s] 0.100102 +Converged at iteration 19, L1 7.30301e-05, Linf 0.00525772, total time[s] 0.068424 +Converged at iteration 23, L1 6.55454e-05, Linf 0.00499384, total time[s] 0.079663 +Converged at iteration 26, L1 8.8686e-05, Linf 0.00551648, total time[s] 0.08795 +Converged at iteration 23, L1 5.88088e-05, Linf 0.00615811, total time[s] 0.092586 +Converged at iteration 21, L1 7.38045e-05, Linf 0.0045175, total time[s] 0.059651 +Converged at iteration 23, L1 7.0379e-05, Linf 0.00195901, total time[s] 0.069748 +Converged at iteration 25, L1 8.8335e-05, Linf 0.00326277, total time[s] 0.074425 +Converged at iteration 28, L1 9.50535e-05, Linf 0.00555238, total time[s] 0.074327 +Converged at iteration 30, L1 5.13049e-05, Linf 0.00433416, total time[s] 0.078063 +Converged at iteration 27, L1 9.85077e-05, Linf 0.00360547, total time[s] 0.072305 +Converged at iteration 29, L1 9.86806e-05, Linf 0.00464428, total time[s] 0.075682 +Converged at iteration 29, L1 9.77831e-05, Linf 0.00291961, total time[s] 0.082198 +Converged at iteration 28, L1 8.42709e-05, Linf 0.00221777, total time[s] 0.324947 +Converged at iteration 32, L1 6.33005e-05, Linf 0.00628334, total time[s] 0.108938 +Converged at iteration 28, L1 6.80384e-05, Linf 0.00631057, total time[s] 0.072975 +Converged at iteration 25, L1 8.29417e-05, Linf 0.00412101, total time[s] 0.068147 +Converged at iteration 23, L1 9.53659e-05, Linf 0.00263562, total time[s] 0.067666 +Converged at iteration 38, L1 8.9295e-05, Linf 0.00707587, total time[s] 0.095232 +Converged at iteration 35, L1 5.4162e-05, Linf 0.00565095, total time[s] 0.091492 +Converged at iteration 24, L1 9.15917e-05, Linf 0.00327055, total time[s] 0.075204 +Converged at iteration 30, L1 6.70904e-05, Linf 0.00557153, total time[s] 0.079362 +Converged at iteration 26, L1 9.24061e-05, Linf 0.0091505, total time[s] 0.068295 +Converged at iteration 23, L1 8.73155e-05, Linf 0.00735435, total time[s] 0.061912 +Converged at iteration 19, L1 6.8904e-05, Linf 0.00451989, total time[s] 0.068231 +Converged at iteration 20, L1 6.12847e-05, Linf 0.00406175, total time[s] 0.058874 +Converged at iteration 23, L1 9.36874e-05, Linf 0.0045313, total time[s] 0.077346 +Converged at iteration 25, L1 6.86479e-05, Linf 0.00608491, total time[s] 0.071227 +Converged at iteration 21, L1 6.51212e-05, Linf 0.0057086, total time[s] 0.077245 +Converged at iteration 17, L1 5.49055e-05, Linf 0.0048446, total time[s] 0.051015 +Converged at iteration 31, L1 7.76308e-05, Linf 0.00336828, total time[s] 0.090127 +Converged at iteration 19, L1 6.22907e-05, Linf 0.00496341, total time[s] 0.063509 +Converged at iteration 22, L1 9.26242e-05, Linf 0.00523103, total time[s] 0.068385 +Converged at iteration 26, L1 9.11932e-05, Linf 0.0054002, total time[s] 0.069976 +Converged at iteration 23, L1 6.05909e-05, Linf 0.00627075, total time[s] 0.065787 +Converged at iteration 21, L1 8.07046e-05, Linf 0.00442284, total time[s] 0.059914 +Converged at iteration 23, L1 6.71339e-05, Linf 0.0016733, total time[s] 0.062054 +Converged at iteration 25, L1 8.71032e-05, Linf 0.00311729, total time[s] 0.067141 +Converged at iteration 28, L1 9.95442e-05, Linf 0.00600107, total time[s] 0.073804 +Converged at iteration 30, L1 5.41846e-05, Linf 0.00422456, total time[s] 0.078229 +Converged at iteration 28, L1 6.06707e-05, Linf 0.00434217, total time[s] 0.073497 +Converged at iteration 30, L1 6.3061e-05, Linf 0.00390716, total time[s] 0.078765 +Converged at iteration 29, L1 9.73178e-05, Linf 0.00290526, total time[s] 0.076268 +Converged at iteration 28, L1 8.79515e-05, Linf 0.00221575, total time[s] 0.074623 +Converged at iteration 31, L1 9.41234e-05, Linf 0.00751648, total time[s] 0.081619 +Converged at iteration 28, L1 7.89518e-05, Linf 0.00707481, total time[s] 0.074206 +Converged at iteration 25, L1 9.59724e-05, Linf 0.00504292, total time[s] 0.066762 +Converged at iteration 24, L1 5.63818e-05, Linf 0.00201465, total time[s] 0.094688 +Converged at iteration 38, L1 7.82951e-05, Linf 0.00683369, total time[s] 0.121711 +Converged at iteration 34, L1 9.01942e-05, Linf 0.0070114, total time[s] 0.108195 +Converged at iteration 24, L1 9.32744e-05, Linf 0.00336611, total time[s] 0.067158 +Converged at iteration 30, L1 6.15226e-05, Linf 0.00544962, total time[s] 0.078993 +Converged at iteration 26, L1 9.89215e-05, Linf 0.00971899, total time[s] 0.070942 +Converged at iteration 24, L1 5.40047e-05, Linf 0.00689106, total time[s] 0.065795 +Converged at iteration 19, L1 7.46006e-05, Linf 0.00503998, total time[s] 0.065421 +Converged at iteration 20, L1 5.77911e-05, Linf 0.00391061, total time[s] 0.08756 +Converged at iteration 23, L1 9.20084e-05, Linf 0.00455976, total time[s] 0.098279 +Converged at iteration 25, L1 7.57336e-05, Linf 0.00882594, total time[s] 0.104925 +Converged at iteration 21, L1 6.85375e-05, Linf 0.00583732, total time[s] 0.061885 +Converged at iteration 17, L1 5.60493e-05, Linf 0.00499169, total time[s] 0.073787 +Converged at iteration 31, L1 7.56139e-05, Linf 0.00349895, total time[s] 0.131736 +Converged at iteration 18, L1 9.05577e-05, Linf 0.00567873, total time[s] 0.058426 +Converged at iteration 22, L1 8.28271e-05, Linf 0.00445473, total time[s] 0.057497 +Converged at iteration 26, L1 9.52372e-05, Linf 0.00530572, total time[s] 0.075811 +Converged at iteration 23, L1 6.32416e-05, Linf 0.00638684, total time[s] 0.067047 +Converged at iteration 21, L1 8.74093e-05, Linf 0.00429972, total time[s] 0.061227 +Converged at iteration 23, L1 6.45542e-05, Linf 0.00174443, total time[s] 0.064614 +Converged at iteration 25, L1 8.39312e-05, Linf 0.0029126, total time[s] 0.066436 +Converged at iteration 29, L1 6.67649e-05, Linf 0.00410591, total time[s] 0.114167 +Converged at iteration 30, L1 5.77496e-05, Linf 0.00429165, total time[s] 0.087729 +Converged at iteration 28, L1 6.32491e-05, Linf 0.00420271, total time[s] 0.077638 +Converged at iteration 30, L1 6.51325e-05, Linf 0.00403039, total time[s] 0.098385 +Converged at iteration 29, L1 9.78775e-05, Linf 0.00290702, total time[s] 0.088359 +Converged at iteration 28, L1 9.26092e-05, Linf 0.00215917, total time[s] 0.090173 +Converged at iteration 31, L1 8.52813e-05, Linf 0.00740743, total time[s] 0.088391 +Converged at iteration 28, L1 8.72337e-05, Linf 0.00770664, total time[s] 0.079515 +Converged at iteration 26, L1 6.265e-05, Linf 0.00459609, total time[s] 0.072149 +Converged at iteration 24, L1 5.95816e-05, Linf 0.00214201, total time[s] 0.066545 +Converged at iteration 38, L1 6.83537e-05, Linf 0.00662084, total time[s] 0.098587 +Converged at iteration 34, L1 8.1672e-05, Linf 0.00684017, total time[s] 0.102978 +Converged at iteration 24, L1 9.56582e-05, Linf 0.00343968, total time[s] 0.082148 +Converged at iteration 30, L1 5.77699e-05, Linf 0.00539469, total time[s] 0.087902 +Converged at iteration 27, L1 5.24934e-05, Linf 0.00808365, total time[s] 0.069407 +Converged at iteration 24, L1 6.35471e-05, Linf 0.00763391, total time[s] 0.064346 +Converged at iteration 19, L1 8.03664e-05, Linf 0.00555653, total time[s] 0.059829 +Converged at iteration 20, L1 5.42192e-05, Linf 0.00375388, total time[s] 0.072879 +Converged at iteration 23, L1 9.11961e-05, Linf 0.00461109, total time[s] 0.092604 +Converged at iteration 25, L1 7.60718e-05, Linf 0.00651609, total time[s] 0.0823 +Converged at iteration 21, L1 7.36676e-05, Linf 0.00595255, total time[s] 0.080041 +Converged at iteration 17, L1 5.63167e-05, Linf 0.00504939, total time[s] 0.058757 +Converged at iteration 31, L1 7.41573e-05, Linf 0.00358572, total time[s] 0.105306 +Converged at iteration 18, L1 7.45288e-05, Linf 0.00519408, total time[s] 0.048752 +Converged at iteration 22, L1 7.26386e-05, Linf 0.00430543, total time[s] 0.055793 +Converged at iteration 26, L1 9.87495e-05, Linf 0.0052384, total time[s] 0.068748 +Converged at iteration 23, L1 6.63474e-05, Linf 0.00648699, total time[s] 0.078429 +Converged at iteration 21, L1 9.34669e-05, Linf 0.0041137, total time[s] 0.059645 +Converged at iteration 22, L1 9.70176e-05, Linf 0.00264601, total time[s] 0.061664 +Converged at iteration 25, L1 8.03579e-05, Linf 0.00278866, total time[s] 0.065662 +Converged at iteration 29, L1 6.90991e-05, Linf 0.00493128, total time[s] 0.076658 +Converged at iteration 30, L1 6.04957e-05, Linf 0.00433392, total time[s] 0.075834 +Converged at iteration 28, L1 6.46902e-05, Linf 0.00421831, total time[s] 0.073936 +Converged at iteration 30, L1 6.66754e-05, Linf 0.00419642, total time[s] 0.07903 +Converged at iteration 29, L1 9.85088e-05, Linf 0.0029379, total time[s] 0.073523 +Converged at iteration 28, L1 9.83885e-05, Linf 0.00207818, total time[s] 0.075765 +Converged at iteration 31, L1 8.04049e-05, Linf 0.00719475, total time[s] 0.082772 +Converged at iteration 28, L1 9.55663e-05, Linf 0.00832346, total time[s] 0.070929 +Converged at iteration 26, L1 7.13225e-05, Linf 0.00513798, total time[s] 0.069005 +Converged at iteration 24, L1 6.29502e-05, Linf 0.0022779, total time[s] 0.061819 +Converged at iteration 38, L1 6.16557e-05, Linf 0.00644436, total time[s] 0.108078 +Converged at iteration 34, L1 7.71073e-05, Linf 0.00664252, total time[s] 0.103939 +Converged at iteration 24, L1 9.73453e-05, Linf 0.00349264, total time[s] 0.063148 +Converged at iteration 29, L1 9.99803e-05, Linf 0.00686151, total time[s] 0.074788 +Converged at iteration 27, L1 5.53419e-05, Linf 0.00850356, total time[s] 0.078672 +Converged at iteration 24, L1 7.24169e-05, Linf 0.00856348, total time[s] 0.099008 +Converged at iteration 19, L1 8.66566e-05, Linf 0.00495138, total time[s] 0.067252 +Converged at iteration 20, L1 5.12499e-05, Linf 0.00344745, total time[s] 0.092043 +Converged at iteration 23, L1 9.05211e-05, Linf 0.00465868, total time[s] 0.087095 +Converged at iteration 25, L1 8.1197e-05, Linf 0.00670012, total time[s] 0.080356 +Converged at iteration 21, L1 7.82267e-05, Linf 0.00605005, total time[s] 0.065235 +Converged at iteration 17, L1 5.6853e-05, Linf 0.00518282, total time[s] 0.054548 +Converged at iteration 31, L1 7.24914e-05, Linf 0.00370216, total time[s] 0.08217 +Converged at iteration 17, L1 9.96807e-05, Linf 0.00658148, total time[s] 0.046093 +Converged at iteration 21, L1 9.50213e-05, Linf 0.00447474, total time[s] 0.055749 +Converged at iteration 27, L1 5.53058e-05, Linf 0.00244741, total time[s] 0.069358 +Converged at iteration 23, L1 8.03976e-05, Linf 0.0066044, total time[s] 0.060591 +Converged at iteration 22, L1 5.40812e-05, Linf 0.00307579, total time[s] 0.059594 +Converged at iteration 22, L1 9.03317e-05, Linf 0.00280292, total time[s] 0.059068 +Converged at iteration 25, L1 7.75807e-05, Linf 0.00246991, total time[s] 0.07429 +Converged at iteration 29, L1 7.03674e-05, Linf 0.00471988, total time[s] 0.081973 +Converged at iteration 30, L1 6.45169e-05, Linf 0.00444849, total time[s] 0.084983 +Converged at iteration 28, L1 6.64545e-05, Linf 0.00364662, total time[s] 0.073714 +Converged at iteration 30, L1 6.90256e-05, Linf 0.00425756, total time[s] 0.075782 +Converged at iteration 29, L1 9.86342e-05, Linf 0.00294675, total time[s] 0.07756 +Converged at iteration 29, L1 6.16352e-05, Linf 0.0013638, total time[s] 0.074277 +Converged at iteration 31, L1 7.23916e-05, Linf 0.00708948, total time[s] 0.078411 +Converged at iteration 29, L1 5.18522e-05, Linf 0.00725126, total time[s] 0.074374 +Converged at iteration 26, L1 8.01653e-05, Linf 0.00587472, total time[s] 0.071345 +Converged at iteration 24, L1 6.71862e-05, Linf 0.002385, total time[s] 0.063736 +Converged at iteration 38, L1 5.73134e-05, Linf 0.00620984, total time[s] 0.097792 +Converged at iteration 34, L1 7.39108e-05, Linf 0.00638827, total time[s] 0.101546 +Converged at iteration 24, L1 9.80557e-05, Linf 0.00353025, total time[s] 0.06562 +Converged at iteration 29, L1 9.6575e-05, Linf 0.00677417, total time[s] 0.075921 +Converged at iteration 27, L1 5.75617e-05, Linf 0.00893514, total time[s] 0.072065 +Converged at iteration 24, L1 8.20308e-05, Linf 0.00939823, total time[s] 0.086646 +Converged at iteration 19, L1 9.0576e-05, Linf 0.00482352, total time[s] 0.067714 +Converged at iteration 20, L1 4.87986e-05, Linf 0.00336242, total time[s] 0.081617 +Converged at iteration 23, L1 8.95525e-05, Linf 0.00471689, total time[s] 0.07992 +Converged at iteration 25, L1 8.0937e-05, Linf 0.00686954, total time[s] 0.141067 +Converged at iteration 21, L1 8.21212e-05, Linf 0.00619357, total time[s] 0.082711 +Converged at iteration 17, L1 5.68839e-05, Linf 0.00501372, total time[s] 0.06904 +Converged at iteration 31, L1 7.15956e-05, Linf 0.00382024, total time[s] 0.086881 +Converged at iteration 17, L1 7.42213e-05, Linf 0.00592708, total time[s] 0.048599 +Converged at iteration 21, L1 7.82592e-05, Linf 0.003778, total time[s] 0.05953 +Converged at iteration 27, L1 5.49888e-05, Linf 0.00242869, total time[s] 0.072281 +Converged at iteration 23, L1 7.43108e-05, Linf 0.00673702, total time[s] 0.062831 +Converged at iteration 22, L1 5.78988e-05, Linf 0.00328394, total time[s] 0.060701 +Converged at iteration 22, L1 8.18556e-05, Linf 0.00284815, total time[s] 0.060006 +Converged at iteration 25, L1 7.4379e-05, Linf 0.00229121, total time[s] 0.067984 +Converged at iteration 29, L1 7.09374e-05, Linf 0.00492247, total time[s] 0.077584 +Converged at iteration 30, L1 6.85184e-05, Linf 0.00461659, total time[s] 0.091816 +Converged at iteration 28, L1 6.73927e-05, Linf 0.00370193, total time[s] 0.086155 +Converged at iteration 30, L1 7.2322e-05, Linf 0.00445168, total time[s] 0.110198 +Converged at iteration 29, L1 9.86644e-05, Linf 0.00294016, total time[s] 0.085228 +Converged at iteration 29, L1 6.42081e-05, Linf 0.00131975, total time[s] 0.087269 +Converged at iteration 31, L1 6.4491e-05, Linf 0.00682513, total time[s] 0.084974 +Converged at iteration 29, L1 5.55509e-05, Linf 0.00777436, total time[s] 0.081205 +Converged at iteration 26, L1 8.94169e-05, Linf 0.00658126, total time[s] 0.079014 +Converged at iteration 24, L1 7.06028e-05, Linf 0.00249824, total time[s] 0.063949 +Converged at iteration 38, L1 5.38475e-05, Linf 0.00592072, total time[s] 0.106025 +Converged at iteration 34, L1 7.00225e-05, Linf 0.00609333, total time[s] 0.096256 +Converged at iteration 24, L1 9.88492e-05, Linf 0.00357373, total time[s] 0.062337 +Converged at iteration 29, L1 9.38374e-05, Linf 0.006678, total time[s] 0.085578 +Converged at iteration 27, L1 6.04587e-05, Linf 0.00938763, total time[s] 0.073734 +Converged at iteration 24, L1 9.186e-05, Linf 0.0102643, total time[s] 0.071642 +Converged at iteration 19, L1 9.74935e-05, Linf 0.00515232, total time[s] 0.070629 +Converged at iteration 20, L1 4.70129e-05, Linf 0.00336226, total time[s] 0.098474 +Converged at iteration 23, L1 9.03207e-05, Linf 0.0047597, total time[s] 0.075013 +Converged at iteration 25, L1 8.41628e-05, Linf 0.00703856, total time[s] 0.095951 +Converged at iteration 21, L1 8.40501e-05, Linf 0.00595542, total time[s] 0.080217 +Converged at iteration 17, L1 5.68466e-05, Linf 0.00491758, total time[s] 0.061521 +Converged at iteration 31, L1 6.99457e-05, Linf 0.00396784, total time[s] 0.087584 +Converged at iteration 17, L1 5.5457e-05, Linf 0.00522416, total time[s] 0.048045 +Converged at iteration 20, L1 9.27661e-05, Linf 0.00374935, total time[s] 0.054858 +Converged at iteration 27, L1 6.73362e-05, Linf 0.00248837, total time[s] 0.100179 +Converged at iteration 23, L1 7.77039e-05, Linf 0.00690177, total time[s] 0.068484 +Converged at iteration 22, L1 6.20199e-05, Linf 0.00345674, total time[s] 0.064049 +Converged at iteration 22, L1 7.76831e-05, Linf 0.00297579, total time[s] 0.069078 +Converged at iteration 25, L1 7.11676e-05, Linf 0.00195204, total time[s] 0.072531 +Converged at iteration 29, L1 7.11073e-05, Linf 0.00502213, total time[s] 0.148661 +Converged at iteration 30, L1 7.24412e-05, Linf 0.00483387, total time[s] 0.088842 +Converged at iteration 28, L1 6.84794e-05, Linf 0.00362907, total time[s] 0.076418 +Converged at iteration 30, L1 7.47862e-05, Linf 0.00461838, total time[s] 0.079195 +Converged at iteration 29, L1 9.89475e-05, Linf 0.00297192, total time[s] 0.077188 +Converged at iteration 29, L1 6.77863e-05, Linf 0.00128002, total time[s] 0.078235 +Converged at iteration 31, L1 5.6761e-05, Linf 0.00669417, total time[s] 0.082577 +Converged at iteration 29, L1 5.95975e-05, Linf 0.00834725, total time[s] 0.082439 +Converged at iteration 27, L1 5.33494e-05, Linf 0.00575705, total time[s] 0.08084 +Converged at iteration 24, L1 7.5207e-05, Linf 0.0026107, total time[s] 0.065866 +Converged at iteration 37, L1 9.58941e-05, Linf 0.0071461, total time[s] 0.107742 +Converged at iteration 34, L1 6.61633e-05, Linf 0.00588378, total time[s] 0.097826 +Converged at iteration 25, L1 4.22704e-05, Linf 0.00209636, total time[s] 0.08113 +Converged at iteration 29, L1 9.15718e-05, Linf 0.0065695, total time[s] 0.073427 +Converged at iteration 27, L1 6.36203e-05, Linf 0.0098546, total time[s] 0.069757 +Converged at iteration 25, L1 4.44094e-05, Linf 0.00893429, total time[s] 0.063239 +Converged at iteration 20, L1 4.14862e-05, Linf 0.00378887, total time[s] 0.055739 +Converged at iteration 20, L1 4.54924e-05, Linf 0.00336352, total time[s] 0.0608 +Converged at iteration 23, L1 9.2323e-05, Linf 0.00479261, total time[s] 0.073736 +Converged at iteration 25, L1 8.73868e-05, Linf 0.00721234, total time[s] 0.099239 +Converged at iteration 21, L1 8.74056e-05, Linf 0.00601279, total time[s] 0.085825 +Converged at iteration 17, L1 5.79506e-05, Linf 0.00476828, total time[s] 0.064307 +Converged at iteration 31, L1 6.80527e-05, Linf 0.00413814, total time[s] 0.096712 +Converged at iteration 16, L1 9.45953e-05, Linf 0.00753999, total time[s] 0.05381 +Converged at iteration 20, L1 6.64142e-05, Linf 0.00279837, total time[s] 0.056178 +Converged at iteration 27, L1 6.05109e-05, Linf 0.0076563, total time[s] 0.07102 +Converged at iteration 23, L1 8.12671e-05, Linf 0.00698618, total time[s] 0.060737 +Converged at iteration 22, L1 6.60894e-05, Linf 0.00327266, total time[s] 0.065311 +Converged at iteration 22, L1 8.24771e-05, Linf 0.00309659, total time[s] 0.06144 +Converged at iteration 25, L1 6.79866e-05, Linf 0.00189055, total time[s] 0.067492 +Converged at iteration 29, L1 7.17465e-05, Linf 0.00505689, total time[s] 0.088838 +Converged at iteration 30, L1 7.59116e-05, Linf 0.00505261, total time[s] 0.078697 +Converged at iteration 28, L1 6.86041e-05, Linf 0.00366974, total time[s] 0.072785 +Converged at iteration 30, L1 7.78544e-05, Linf 0.00478382, total time[s] 0.078384 +Converged at iteration 30, L1 6.32109e-05, Linf 0.00227855, total time[s] 0.086217 +Converged at iteration 29, L1 7.24394e-05, Linf 0.00127222, total time[s] 0.085765 +Converged at iteration 30, L1 9.4709e-05, Linf 0.00848677, total time[s] 0.086934 +Converged at iteration 29, L1 6.45894e-05, Linf 0.00896262, total time[s] 0.074956 +Converged at iteration 27, L1 6.11551e-05, Linf 0.00652575, total time[s] 0.092142 +Converged at iteration 24, L1 7.95414e-05, Linf 0.0027402, total time[s] 0.096408 +Converged at iteration 37, L1 9.00818e-05, Linf 0.00683328, total time[s] 0.112259 +Converged at iteration 34, L1 6.12394e-05, Linf 0.00555681, total time[s] 0.13353 +Converged at iteration 25, L1 4.35976e-05, Linf 0.00210019, total time[s] 0.099541 +Converged at iteration 29, L1 8.16107e-05, Linf 0.00647054, total time[s] 0.080192 +Converged at iteration 27, L1 6.48033e-05, Linf 0.0103603, total time[s] 0.075262 +Converged at iteration 25, L1 4.95129e-05, Linf 0.00993399, total time[s] 0.094668 +Converged at iteration 20, L1 4.52296e-05, Linf 0.00403994, total time[s] 0.085564 +Converged at iteration 20, L1 4.32453e-05, Linf 0.00337998, total time[s] 0.066501 +Converged at iteration 23, L1 9.26747e-05, Linf 0.00486134, total time[s] 0.088311 +Converged at iteration 25, L1 8.87563e-05, Linf 0.00736397, total time[s] 0.092202 +Converged at iteration 21, L1 8.63038e-05, Linf 0.00599906, total time[s] 0.06821 +Converged at iteration 17, L1 5.8841e-05, Linf 0.00457875, total time[s] 0.048131 +Converged at iteration 31, L1 6.60487e-05, Linf 0.00434174, total time[s] 0.082241 +Converged at iteration 16, L1 9.93822e-05, Linf 0.00653931, total time[s] 0.045933 +Converged at iteration 18, L1 9.86715e-05, Linf 0.00384923, total time[s] 0.051917 +Converged at iteration 27, L1 6.37436e-05, Linf 0.00282272, total time[s] 0.072112 +Converged at iteration 23, L1 8.60608e-05, Linf 0.00717114, total time[s] 0.060992 +Converged at iteration 22, L1 7.13128e-05, Linf 0.00359605, total time[s] 0.0704 +Converged at iteration 22, L1 8.98105e-05, Linf 0.00329854, total time[s] 0.064658 +Converged at iteration 24, L1 9.8003e-05, Linf 0.00203427, total time[s] 0.064873 +Converged at iteration 29, L1 7.21023e-05, Linf 0.0050681, total time[s] 0.076862 +Converged at iteration 30, L1 8.00378e-05, Linf 0.00530331, total time[s] 0.082592 +Converged at iteration 28, L1 6.89716e-05, Linf 0.00369537, total time[s] 0.07777 +Converged at iteration 30, L1 8.15052e-05, Linf 0.0049094, total time[s] 0.081683 +Converged at iteration 30, L1 6.53824e-05, Linf 0.00232535, total time[s] 0.082622 +Converged at iteration 29, L1 7.88983e-05, Linf 0.001346, total time[s] 0.077217 +Converged at iteration 30, L1 8.63795e-05, Linf 0.00834273, total time[s] 0.08079 +Converged at iteration 29, L1 7.17763e-05, Linf 0.00964154, total time[s] 0.07679 +Converged at iteration 27, L1 6.95467e-05, Linf 0.00717662, total time[s] 0.072283 +Converged at iteration 24, L1 8.34079e-05, Linf 0.00284737, total time[s] 0.064475 +Converged at iteration 37, L1 8.43234e-05, Linf 0.00645583, total time[s] 0.101248 +Converged at iteration 34, L1 5.62566e-05, Linf 0.00529612, total time[s] 0.094248 +Converged at iteration 25, L1 4.53524e-05, Linf 0.00208051, total time[s] 0.06632 +Converged at iteration 29, L1 7.60951e-05, Linf 0.00634519, total time[s] 0.074264 +Converged at iteration 27, L1 6.76387e-05, Linf 0.0108647, total time[s] 0.070153 +Converged at iteration 25, L1 5.50161e-05, Linf 0.0106725, total time[s] 0.074388 +Converged at iteration 20, L1 4.92781e-05, Linf 0.0042496, total time[s] 0.068034 +Converged at iteration 20, L1 4.16463e-05, Linf 0.00337345, total time[s] 0.056542 +Converged at iteration 23, L1 9.46722e-05, Linf 0.00488419, total time[s] 0.071201 +Converged at iteration 25, L1 9.14835e-05, Linf 0.0075172, total time[s] 0.094945 +Converged at iteration 21, L1 8.78531e-05, Linf 0.00611741, total time[s] 0.080947 +Converged at iteration 17, L1 6.12594e-05, Linf 0.00434843, total time[s] 0.064712 +Converged at iteration 31, L1 6.35706e-05, Linf 0.00455795, total time[s] 0.108517 +Converged at iteration 17, L1 7.84718e-05, Linf 0.00299262, total time[s] 0.050121 +Converged at iteration 18, L1 8.14002e-05, Linf 0.00249881, total time[s] 0.062411 +Converged at iteration 27, L1 6.62006e-05, Linf 0.00298066, total time[s] 0.077984 +Converged at iteration 23, L1 9.18618e-05, Linf 0.00743997, total time[s] 0.067781 +Converged at iteration 22, L1 7.52644e-05, Linf 0.00390283, total time[s] 0.059157 +Converged at iteration 22, L1 9.86758e-05, Linf 0.00363079, total time[s] 0.058055 +Converged at iteration 24, L1 9.17173e-05, Linf 0.00161605, total time[s] 0.062107 +Converged at iteration 29, L1 7.26035e-05, Linf 0.00506554, total time[s] 0.074093 +Converged at iteration 30, L1 8.44416e-05, Linf 0.00560807, total time[s] 0.079352 +Converged at iteration 28, L1 6.87899e-05, Linf 0.00331699, total time[s] 0.070994 +Converged at iteration 30, L1 8.45894e-05, Linf 0.00516224, total time[s] 0.07665 +Converged at iteration 30, L1 6.70465e-05, Linf 0.00236229, total time[s] 0.077326 +Converged at iteration 29, L1 8.39801e-05, Linf 0.00153993, total time[s] 0.073569 +Converged at iteration 30, L1 7.97041e-05, Linf 0.00820402, total time[s] 0.076169 +Converged at iteration 29, L1 7.82621e-05, Linf 0.010337, total time[s] 0.073763 +Converged at iteration 27, L1 7.9759e-05, Linf 0.00791971, total time[s] 0.069441 +Converged at iteration 24, L1 8.77945e-05, Linf 0.00296378, total time[s] 0.061967 +Converged at iteration 37, L1 7.85286e-05, Linf 0.0061991, total time[s] 0.093658 +Converged at iteration 34, L1 5.14217e-05, Linf 0.00515854, total time[s] 0.092316 +Converged at iteration 25, L1 4.70316e-05, Linf 0.00205784, total time[s] 0.065652 +Converged at iteration 29, L1 6.63856e-05, Linf 0.00617997, total time[s] 0.073389 +Converged at iteration 27, L1 7.01264e-05, Linf 0.0113974, total time[s] 0.069895 +Converged at iteration 25, L1 6.13239e-05, Linf 0.0116186, total time[s] 0.064404 +Converged at iteration 20, L1 5.32618e-05, Linf 0.00444637, total time[s] 0.061184 +Converged at iteration 19, L1 9.49386e-05, Linf 0.00510012, total time[s] 0.073904 +Converged at iteration 23, L1 9.69583e-05, Linf 0.00488282, total time[s] 0.085819 +Converged at iteration 25, L1 8.2095e-05, Linf 0.00767563, total time[s] 0.09765 +Converged at iteration 21, L1 8.59498e-05, Linf 0.00596654, total time[s] 0.074916 +Converged at iteration 17, L1 6.29596e-05, Linf 0.00408011, total time[s] 0.06115 +Converged at iteration 31, L1 6.10398e-05, Linf 0.00480115, total time[s] 0.147952 +Converged at iteration 18, L1 7.23803e-05, Linf 0.00157175, total time[s] 0.048247 +Converged at iteration 19, L1 7.19843e-05, Linf 0.00161068, total time[s] 0.058434 +Converged at iteration 27, L1 7.08791e-05, Linf 0.00312719, total time[s] 0.07463 +Converged at iteration 23, L1 9.80127e-05, Linf 0.00778459, total time[s] 0.060376 +Converged at iteration 22, L1 7.93079e-05, Linf 0.00428086, total time[s] 0.056552 +Converged at iteration 23, L1 6.60125e-05, Linf 0.00281897, total time[s] 0.062156 +Converged at iteration 24, L1 8.45801e-05, Linf 0.00167225, total time[s] 0.067708 +Converged at iteration 29, L1 7.2873e-05, Linf 0.00505301, total time[s] 0.074282 +Converged at iteration 30, L1 8.9385e-05, Linf 0.0057705, total time[s] 0.078817 +Converged at iteration 28, L1 6.93752e-05, Linf 0.00313303, total time[s] 0.071957 +Converged at iteration 30, L1 8.85391e-05, Linf 0.00538122, total time[s] 0.077022 +Converged at iteration 30, L1 6.97661e-05, Linf 0.00240681, total time[s] 0.075889 +Converged at iteration 29, L1 9.18506e-05, Linf 0.00174621, total time[s] 0.077252 +Converged at iteration 30, L1 7.42933e-05, Linf 0.00805551, total time[s] 0.07761 +Converged at iteration 29, L1 8.59954e-05, Linf 0.0111156, total time[s] 0.074623 +Converged at iteration 27, L1 9.05256e-05, Linf 0.00871668, total time[s] 0.072846 +Converged at iteration 24, L1 9.1406e-05, Linf 0.00309326, total time[s] 0.065832 +Converged at iteration 37, L1 7.2565e-05, Linf 0.00599084, total time[s] 0.141862 +Converged at iteration 33, L1 9.74427e-05, Linf 0.00623399, total time[s] 0.09807 +Converged at iteration 25, L1 4.76146e-05, Linf 0.00203007, total time[s] 0.06724 +Converged at iteration 29, L1 6.11244e-05, Linf 0.00597841, total time[s] 0.075751 +Converged at iteration 27, L1 7.4129e-05, Linf 0.0118789, total time[s] 0.068654 +Converged at iteration 25, L1 6.76778e-05, Linf 0.0124581, total time[s] 0.070453 +Converged at iteration 20, L1 5.60784e-05, Linf 0.00465091, total time[s] 0.074997 +Converged at iteration 19, L1 8.74358e-05, Linf 0.00512174, total time[s] 0.066934 +Converged at iteration 23, L1 9.96356e-05, Linf 0.00490197, total time[s] 0.086228 +Converged at iteration 25, L1 7.0272e-05, Linf 0.00779411, total time[s] 0.070028 +Converged at iteration 21, L1 8.5184e-05, Linf 0.00593513, total time[s] 0.06178 +Converged at iteration 17, L1 6.64122e-05, Linf 0.00376219, total time[s] 0.050396 +Converged at iteration 31, L1 5.82137e-05, Linf 0.0050503, total time[s] 0.085656 +Converged at iteration 18, L1 9.19275e-05, Linf 0.0021289, total time[s] 0.059876 +Converged at iteration 20, L1 6.7282e-05, Linf 0.00210478, total time[s] 0.062759 +Converged at iteration 27, L1 7.44307e-05, Linf 0.00330152, total time[s] 0.069823 +Converged at iteration 24, L1 4.77723e-05, Linf 0.0037987, total time[s] 0.062693 +Converged at iteration 22, L1 8.37083e-05, Linf 0.00463521, total time[s] 0.058 +Converged at iteration 23, L1 7.26017e-05, Linf 0.00275365, total time[s] 0.060123 +Converged at iteration 24, L1 7.80029e-05, Linf 0.00163671, total time[s] 0.064694 +Converged at iteration 29, L1 7.26847e-05, Linf 0.00512387, total time[s] 0.0753 +Converged at iteration 30, L1 9.41551e-05, Linf 0.00609493, total time[s] 0.076429 +Converged at iteration 28, L1 6.85583e-05, Linf 0.00290717, total time[s] 0.071825 +Converged at iteration 30, L1 9.21697e-05, Linf 0.00568695, total time[s] 0.076619 +Converged at iteration 30, L1 7.18477e-05, Linf 0.00245428, total time[s] 0.075322 +Converged at iteration 29, L1 9.87438e-05, Linf 0.00190463, total time[s] 0.075869 +Converged at iteration 30, L1 6.94438e-05, Linf 0.00790351, total time[s] 0.075642 +Converged at iteration 29, L1 9.35286e-05, Linf 0.0119056, total time[s] 0.075475 +Converged at iteration 28, L1 4.745e-05, Linf 0.00738851, total time[s] 0.091741 +Converged at iteration 24, L1 9.64024e-05, Linf 0.00323863, total time[s] 0.073467 +Converged at iteration 37, L1 6.63146e-05, Linf 0.00580081, total time[s] 0.102179 +Converged at iteration 33, L1 9.11492e-05, Linf 0.00599353, total time[s] 0.089966 +Converged at iteration 25, L1 4.92998e-05, Linf 0.00200677, total time[s] 0.06589 +Converged at iteration 29, L1 5.59592e-05, Linf 0.00578948, total time[s] 0.074047 +Converged at iteration 27, L1 7.71473e-05, Linf 0.0123284, total time[s] 0.069246 +Converged at iteration 25, L1 7.47894e-05, Linf 0.0133195, total time[s] 0.06695 +Converged at iteration 20, L1 5.99549e-05, Linf 0.00506733, total time[s] 0.065841 +Converged at iteration 19, L1 7.93184e-05, Linf 0.00512905, total time[s] 0.063431 +Converged at iteration 24, L1 5.37947e-05, Linf 0.00302882, total time[s] 0.069174 +Converged at iteration 25, L1 5.85756e-05, Linf 0.00786284, total time[s] 0.068596 +Converged at iteration 21, L1 8.35213e-05, Linf 0.00587856, total time[s] 0.061793 +Converged at iteration 17, L1 7.11137e-05, Linf 0.00328904, total time[s] 0.050318 +Converged at iteration 31, L1 5.69969e-05, Linf 0.00533903, total time[s] 0.100604 +Converged at iteration 19, L1 7.04402e-05, Linf 0.00271252, total time[s] 0.062609 +Converged at iteration 20, L1 9.4355e-05, Linf 0.00304486, total time[s] 0.053287 +Converged at iteration 27, L1 7.72476e-05, Linf 0.00350842, total time[s] 0.070666 +Converged at iteration 24, L1 5.28606e-05, Linf 0.00402841, total time[s] 0.067486 +Converged at iteration 22, L1 8.91218e-05, Linf 0.00493186, total time[s] 0.058295 +Converged at iteration 23, L1 8.23909e-05, Linf 0.00304647, total time[s] 0.060311 +Converged at iteration 24, L1 7.02917e-05, Linf 0.00164614, total time[s] 0.062499 +Converged at iteration 29, L1 7.20857e-05, Linf 0.00517161, total time[s] 0.074447 +Converged at iteration 31, L1 5.27484e-05, Linf 0.00346979, total time[s] 0.081103 +Converged at iteration 28, L1 6.82162e-05, Linf 0.00301167, total time[s] 0.074512 +Converged at iteration 30, L1 9.60493e-05, Linf 0.00586815, total time[s] 0.079827 +Converged at iteration 30, L1 7.49796e-05, Linf 0.00253227, total time[s] 0.076874 +Converged at iteration 30, L1 5.6482e-05, Linf 0.00123249, total time[s] 0.079383 +Converged at iteration 30, L1 6.50956e-05, Linf 0.00771372, total time[s] 0.079515 +Converged at iteration 30, L1 3.9776e-05, Linf 0.00946526, total time[s] 0.078876 +Converged at iteration 28, L1 5.46198e-05, Linf 0.00822143, total time[s] 0.075524 +Converged at iteration 25, L1 5.34709e-05, Linf 0.00204579, total time[s] 0.064759 +Converged at iteration 37, L1 6.07106e-05, Linf 0.00564501, total time[s] 0.096883 +Converged at iteration 33, L1 8.64392e-05, Linf 0.00572207, total time[s] 0.089906 +Converged at iteration 25, L1 5.021e-05, Linf 0.00206728, total time[s] 0.082123 +Converged at iteration 28, L1 9.73581e-05, Linf 0.00769525, total time[s] 0.124624 +Converged at iteration 27, L1 7.99525e-05, Linf 0.0126695, total time[s] 0.073088 +Converged at iteration 25, L1 8.0908e-05, Linf 0.014102, total time[s] 0.06731 +Converged at iteration 20, L1 6.41942e-05, Linf 0.00544831, total time[s] 0.065428 +Converged at iteration 19, L1 7.41532e-05, Linf 0.0051577, total time[s] 0.076308 +Converged at iteration 24, L1 5.35273e-05, Linf 0.00299399, total time[s] 0.073194 +Converged at iteration 25, L1 4.92653e-05, Linf 0.00785047, total time[s] 0.07589 +Converged at iteration 21, L1 8.1237e-05, Linf 0.00588908, total time[s] 0.062107 +Converged at iteration 17, L1 7.67357e-05, Linf 0.00297171, total time[s] 0.048844 +Converged at iteration 31, L1 5.63761e-05, Linf 0.00561612, total time[s] 0.091737 +Converged at iteration 19, L1 8.43016e-05, Linf 0.00335249, total time[s] 0.058294 +Converged at iteration 21, L1 7.79686e-05, Linf 0.00356844, total time[s] 0.074642 +Converged at iteration 27, L1 7.70715e-05, Linf 0.00362186, total time[s] 0.079299 +Converged at iteration 24, L1 5.69201e-05, Linf 0.00422329, total time[s] 0.062014 +Converged at iteration 22, L1 9.28503e-05, Linf 0.00510523, total time[s] 0.06337 +Converged at iteration 23, L1 9.26502e-05, Linf 0.00355571, total time[s] 0.060735 +Converged at iteration 23, L1 9.04413e-05, Linf 0.00243254, total time[s] 0.060904 +Converged at iteration 29, L1 7.19237e-05, Linf 0.0052324, total time[s] 0.092918 +Converged at iteration 31, L1 5.58704e-05, Linf 0.00377687, total time[s] 0.079666 +Converged at iteration 28, L1 6.62673e-05, Linf 0.00278292, total time[s] 0.072488 +Converged at iteration 31, L1 5.48862e-05, Linf 0.00468765, total time[s] 0.122402 +Converged at iteration 30, L1 7.92921e-05, Linf 0.00265235, total time[s] 0.081198 +Converged at iteration 30, L1 6.20076e-05, Linf 0.00129579, total time[s] 0.076245 +Converged at iteration 30, L1 6.19485e-05, Linf 0.00751241, total time[s] 0.075952 +Converged at iteration 30, L1 4.38991e-05, Linf 0.0100687, total time[s] 0.084589 +Converged at iteration 28, L1 6.21356e-05, Linf 0.00893367, total time[s] 0.075014 +Converged at iteration 25, L1 5.47371e-05, Linf 0.0020819, total time[s] 0.072735 +Converged at iteration 37, L1 5.49353e-05, Linf 0.0055103, total time[s] 0.103929 +Converged at iteration 33, L1 8.24405e-05, Linf 0.00539378, total time[s] 0.109534 +Converged at iteration 25, L1 5.06584e-05, Linf 0.0021218, total time[s] 0.361934 +Converged at iteration 28, L1 9.29822e-05, Linf 0.00762664, total time[s] 0.135172 +Converged at iteration 27, L1 8.36163e-05, Linf 0.0129122, total time[s] 0.081618 +Converged at iteration 25, L1 8.82971e-05, Linf 0.015153, total time[s] 0.080913 +Converged at iteration 20, L1 6.92539e-05, Linf 0.00606795, total time[s] 0.084946 +Converged at iteration 19, L1 7.06609e-05, Linf 0.00516193, total time[s] 0.055952 +Converged at iteration 24, L1 5.46548e-05, Linf 0.00295235, total time[s] 0.079318 +Converged at iteration 24, L1 9.1862e-05, Linf 0.0105933, total time[s] 0.073457 +Converged at iteration 21, L1 7.77482e-05, Linf 0.00588715, total time[s] 0.060314 +Converged at iteration 17, L1 8.69023e-05, Linf 0.00644776, total time[s] 0.052038 +Converged at iteration 31, L1 5.76471e-05, Linf 0.00592824, total time[s] 0.0846 +Converged at iteration 20, L1 6.16109e-05, Linf 0.00367042, total time[s] 0.055123 +Converged at iteration 21, L1 9.54043e-05, Linf 0.00467976, total time[s] 0.066193 +Converged at iteration 27, L1 7.89278e-05, Linf 0.00369798, total time[s] 0.072791 +Converged at iteration 24, L1 6.18415e-05, Linf 0.00440537, total time[s] 0.065353 +Converged at iteration 22, L1 9.99922e-05, Linf 0.00533498, total time[s] 0.059829 +Converged at iteration 24, L1 5.92234e-05, Linf 0.0029939, total time[s] 0.068679 +Converged at iteration 23, L1 8.11493e-05, Linf 0.00243155, total time[s] 0.064486 +Converged at iteration 29, L1 7.04464e-05, Linf 0.0052395, total time[s] 0.087051 +Converged at iteration 31, L1 5.99594e-05, Linf 0.00394426, total time[s] 0.078976 +Converged at iteration 28, L1 6.49435e-05, Linf 0.00274184, total time[s] 0.074304 +Converged at iteration 31, L1 5.81622e-05, Linf 0.00493273, total time[s] 0.088474 +Converged at iteration 30, L1 8.18807e-05, Linf 0.0027813, total time[s] 0.075667 +Converged at iteration 30, L1 6.60187e-05, Linf 0.00145325, total time[s] 0.079803 +Converged at iteration 30, L1 5.84909e-05, Linf 0.00725428, total time[s] 0.075509 +Converged at iteration 30, L1 4.84506e-05, Linf 0.0108546, total time[s] 0.076235 +Converged at iteration 28, L1 7.0892e-05, Linf 0.00976624, total time[s] 0.075389 +Converged at iteration 25, L1 5.72557e-05, Linf 0.0021376, total time[s] 0.065631 +Converged at iteration 36, L1 9.55254e-05, Linf 0.00669919, total time[s] 0.094622 +Converged at iteration 33, L1 8.10414e-05, Linf 0.00510814, total time[s] 0.092777 +Converged at iteration 25, L1 5.38647e-05, Linf 0.00222325, total time[s] 0.070765 +Converged at iteration 28, L1 8.6518e-05, Linf 0.00760094, total time[s] 0.075112 +Converged at iteration 27, L1 8.22586e-05, Linf 0.0125053, total time[s] 0.076111 +Converged at iteration 25, L1 9.59536e-05, Linf 0.0158449, total time[s] 0.064784 +Converged at iteration 20, L1 7.42216e-05, Linf 0.00671727, total time[s] 0.061927 +Converged at iteration 19, L1 6.87704e-05, Linf 0.0051857, total time[s] 0.05924 +Converged at iteration 24, L1 5.52792e-05, Linf 0.00291699, total time[s] 0.125421 +Converged at iteration 24, L1 7.95087e-05, Linf 0.0104966, total time[s] 0.091738 +Converged at iteration 21, L1 7.3191e-05, Linf 0.00590642, total time[s] 0.074013 +Converged at iteration 17, L1 9.35857e-05, Linf 0.002143, total time[s] 0.061998 +Converged at iteration 31, L1 5.95653e-05, Linf 0.006251, total time[s] 0.103766 +Converged at iteration 20, L1 7.19969e-05, Linf 0.00455666, total time[s] 0.060995 +Converged at iteration 22, L1 6.37203e-05, Linf 0.00432322, total time[s] 0.058233 +Converged at iteration 27, L1 8.09116e-05, Linf 0.00382498, total time[s] 0.07377 +Converged at iteration 24, L1 6.44386e-05, Linf 0.00454779, total time[s] 0.063465 +Converged at iteration 23, L1 5.5683e-05, Linf 0.00345996, total time[s] 0.064521 +Converged at iteration 24, L1 6.54086e-05, Linf 0.00342518, total time[s] 0.103487 +Converged at iteration 23, L1 7.55917e-05, Linf 0.00284027, total time[s] 0.129978 +Converged at iteration 29, L1 6.73867e-05, Linf 0.00526629, total time[s] 0.151628 +Converged at iteration 31, L1 6.5001e-05, Linf 0.00413063, total time[s] 0.17495 +Converged at iteration 28, L1 6.27978e-05, Linf 0.00271987, total time[s] 0.120519 +Converged at iteration 31, L1 5.63787e-05, Linf 0.00516796, total time[s] 0.231645 +Converged at iteration 30, L1 8.4722e-05, Linf 0.00282884, total time[s] 0.134992 +Converged at iteration 30, L1 6.61173e-05, Linf 0.00160261, total time[s] 0.107186 +Converged at iteration 30, L1 5.73338e-05, Linf 0.00689744, total time[s] 0.078785 +Converged at iteration 30, L1 5.25119e-05, Linf 0.0116183, total time[s] 0.082705 +Converged at iteration 28, L1 7.93114e-05, Linf 0.0105326, total time[s] 0.096554 +Converged at iteration 25, L1 5.66775e-05, Linf 0.00219484, total time[s] 0.084959 +Converged at iteration 36, L1 8.78759e-05, Linf 0.00663297, total time[s] 0.157077 +Converged at iteration 33, L1 8.03343e-05, Linf 0.0048423, total time[s] 0.119132 +Converged at iteration 25, L1 5.3424e-05, Linf 0.00230954, total time[s] 0.074021 +Converged at iteration 28, L1 6.95162e-05, Linf 0.00757365, total time[s] 0.077165 +Converged at iteration 27, L1 7.96708e-05, Linf 0.012056, total time[s] 0.074866 +Converged at iteration 26, L1 2.92278e-05, Linf 0.0102907, total time[s] 0.088307 +Converged at iteration 20, L1 8.00888e-05, Linf 0.00712808, total time[s] 0.073307 +Converged at iteration 19, L1 7.00042e-05, Linf 0.00511953, total time[s] 0.089275 +Converged at iteration 24, L1 5.76856e-05, Linf 0.00287373, total time[s] 0.086596 +Converged at iteration 24, L1 6.36471e-05, Linf 0.0103198, total time[s] 0.069508 +Converged at iteration 21, L1 6.27678e-05, Linf 0.00583662, total time[s] 0.089325 +Converged at iteration 18, L1 5.60142e-05, Linf 0.00172587, total time[s] 0.052026 +Converged at iteration 31, L1 6.29696e-05, Linf 0.00665614, total time[s] 0.087742 +Converged at iteration 20, L1 9.30002e-05, Linf 0.00512933, total time[s] 0.058837 +Converged at iteration 22, L1 7.11497e-05, Linf 0.0053341, total time[s] 0.059086 +Converged at iteration 27, L1 8.57169e-05, Linf 0.00401661, total time[s] 0.070878 +Converged at iteration 24, L1 7.10009e-05, Linf 0.00472595, total time[s] 0.063393 +Converged at iteration 23, L1 5.97585e-05, Linf 0.00360705, total time[s] 0.066027 +Converged at iteration 24, L1 7.49239e-05, Linf 0.00412865, total time[s] 0.091513 +Converged at iteration 23, L1 7.53384e-05, Linf 0.00391952, total time[s] 0.063112 +Converged at iteration 28, L1 9.86015e-05, Linf 0.00633932, total time[s] 0.075511 +Converged at iteration 31, L1 6.96184e-05, Linf 0.00442796, total time[s] 0.08205 +Converged at iteration 28, L1 6.15148e-05, Linf 0.00272837, total time[s] 0.077619 +Converged at iteration 31, L1 5.92034e-05, Linf 0.00549085, total time[s] 0.081889 +Converged at iteration 30, L1 9.08384e-05, Linf 0.00294342, total time[s] 0.079558 +Converged at iteration 30, L1 7.40312e-05, Linf 0.00193135, total time[s] 0.08346 +Converged at iteration 30, L1 5.56511e-05, Linf 0.00639702, total time[s] 0.079597 +Converged at iteration 30, L1 5.86757e-05, Linf 0.0127669, total time[s] 0.083597 +Converged at iteration 28, L1 9.07322e-05, Linf 0.0115755, total time[s] 0.07881 +Converged at iteration 25, L1 5.71028e-05, Linf 0.00227094, total time[s] 0.06587 +Converged at iteration 36, L1 8.31098e-05, Linf 0.00655026, total time[s] 0.103231 +Converged at iteration 33, L1 8.09486e-05, Linf 0.00472531, total time[s] 0.099991 +Converged at iteration 25, L1 5.51489e-05, Linf 0.00241353, total time[s] 0.067686 +Converged at iteration 28, L1 5.14361e-05, Linf 0.00748869, total time[s] 0.089534 +Converged at iteration 27, L1 8.20249e-05, Linf 0.0119911, total time[s] 0.182926 +Converged at iteration 26, L1 3.21462e-05, Linf 0.0112339, total time[s] 0.18291 +Converged at iteration 20, L1 8.59214e-05, Linf 0.00757065, total time[s] 0.145329 +Converged at iteration 19, L1 7.20629e-05, Linf 0.00507493, total time[s] 0.128453 +Converged at iteration 24, L1 6.04278e-05, Linf 0.00284445, total time[s] 0.121543 +Converged at iteration 24, L1 5.44228e-05, Linf 0.00999266, total time[s] 0.106925 +Converged at iteration 21, L1 5.28232e-05, Linf 0.00561647, total time[s] 0.085965 +Converged at iteration 18, L1 6.35894e-05, Linf 0.00194417, total time[s] 0.070358 +Converged at iteration 31, L1 6.49335e-05, Linf 0.00698217, total time[s] 0.097413 +Converged at iteration 21, L1 6.28583e-05, Linf 0.00343166, total time[s] 0.061463 +Converged at iteration 22, L1 7.70453e-05, Linf 0.00573353, total time[s] 0.084126 +Converged at iteration 27, L1 8.585e-05, Linf 0.00415287, total time[s] 0.085691 +Converged at iteration 24, L1 6.94522e-05, Linf 0.00489038, total time[s] 0.076168 +Converged at iteration 23, L1 6.12381e-05, Linf 0.00374482, total time[s] 0.067154 +Converged at iteration 24, L1 8.3363e-05, Linf 0.00577612, total time[s] 0.066463 +Converged at iteration 23, L1 7.85218e-05, Linf 0.00472049, total time[s] 0.070213 +Converged at iteration 28, L1 9.57048e-05, Linf 0.00620611, total time[s] 0.080178 +Converged at iteration 31, L1 7.49312e-05, Linf 0.00513027, total time[s] 0.083458 +Converged at iteration 27, L1 9.94479e-05, Linf 0.00363096, total time[s] 0.097537 +Converged at iteration 31, L1 5.95059e-05, Linf 0.00570549, total time[s] 0.108524 +Converged at iteration 30, L1 9.31755e-05, Linf 0.00308326, total time[s] 0.092199 +Converged at iteration 30, L1 8.04286e-05, Linf 0.00214629, total time[s] 0.083157 +Converged at iteration 30, L1 5.51051e-05, Linf 0.00599981, total time[s] 0.087338 +Converged at iteration 30, L1 6.41315e-05, Linf 0.013805, total time[s] 0.086494 +Converged at iteration 29, L1 4.09377e-05, Linf 0.00904685, total time[s] 0.074101 +Converged at iteration 25, L1 5.75678e-05, Linf 0.00234219, total time[s] 0.066943 +Converged at iteration 36, L1 7.84721e-05, Linf 0.0063089, total time[s] 0.091834 +Converged at iteration 33, L1 8.34793e-05, Linf 0.00477101, total time[s] 0.088662 +Converged at iteration 25, L1 5.37671e-05, Linf 0.0024577, total time[s] 0.068856 +Converged at iteration 27, L1 6.66103e-05, Linf 0.00950892, total time[s] 0.070587 +Converged at iteration 27, L1 7.71964e-05, Linf 0.0114006, total time[s] 0.068984 +Converged at iteration 26, L1 3.39321e-05, Linf 0.0107693, total time[s] 0.070508 +Converged at iteration 20, L1 9.44527e-05, Linf 0.00790278, total time[s] 0.071195 +Converged at iteration 19, L1 7.73302e-05, Linf 0.00498329, total time[s] 0.070155 +Converged at iteration 24, L1 5.96109e-05, Linf 0.00279836, total time[s] 0.084866 +Converged at iteration 24, L1 4.32939e-05, Linf 0.00943489, total time[s] 0.074235 +Converged at iteration 21, L1 4.26345e-05, Linf 0.00492329, total time[s] 0.06866 +Converged at iteration 18, L1 7.55464e-05, Linf 0.00229933, total time[s] 0.050745 +Converged at iteration 31, L1 6.83286e-05, Linf 0.00745086, total time[s] 0.091279 +Converged at iteration 21, L1 6.41281e-05, Linf 0.00388245, total time[s] 0.066213 +Converged at iteration 22, L1 8.80749e-05, Linf 0.00641776, total time[s] 0.070056 +Converged at iteration 27, L1 8.28821e-05, Linf 0.00418345, total time[s] 0.072578 +Converged at iteration 24, L1 7.26091e-05, Linf 0.00515075, total time[s] 0.063696 +Converged at iteration 23, L1 6.50618e-05, Linf 0.00392826, total time[s] 0.061296 +Converged at iteration 24, L1 9.36602e-05, Linf 0.00746448, total time[s] 0.063525 +Converged at iteration 23, L1 8.82868e-05, Linf 0.00582533, total time[s] 0.060717 +Converged at iteration 28, L1 8.87169e-05, Linf 0.00583105, total time[s] 0.073863 +Converged at iteration 31, L1 8.14462e-05, Linf 0.00510956, total time[s] 0.079703 +Converged at iteration 27, L1 9.67155e-05, Linf 0.00353365, total time[s] 0.072593 +Converged at iteration 31, L1 6.21768e-05, Linf 0.00606207, total time[s] 0.084413 +Converged at iteration 30, L1 9.57078e-05, Linf 0.00336334, total time[s] 0.082759 +Converged at iteration 30, L1 9.5418e-05, Linf 0.00267839, total time[s] 0.104044 +Converged at iteration 29, L1 9.67891e-05, Linf 0.00896301, total time[s] 0.074379 +Converged at iteration 30, L1 7.46927e-05, Linf 0.0152314, total time[s] 0.079607 +Converged at iteration 29, L1 4.72566e-05, Linf 0.00986391, total time[s] 0.077247 +Converged at iteration 25, L1 5.58625e-05, Linf 0.00236917, total time[s] 0.067567 +Converged at iteration 36, L1 7.65144e-05, Linf 0.00627983, total time[s] 0.094111 +Converged at iteration 33, L1 8.61809e-05, Linf 0.00489691, total time[s] 0.090711 +Converged at iteration 25, L1 5.43507e-05, Linf 0.00255309, total time[s] 0.0725 +Converged at iteration 27, L1 4.71215e-05, Linf 0.00921882, total time[s] 0.07797 +Converged at iteration 27, L1 7.85791e-05, Linf 0.011502, total time[s] 0.073298 +Converged at iteration 26, L1 3.45701e-05, Linf 0.012533, total time[s] 0.06943 +Converged at iteration 20, L1 9.88029e-05, Linf 0.00823687, total time[s] 0.069612 +Converged at iteration 19, L1 7.95107e-05, Linf 0.00491514, total time[s] 0.072655 +Converged at iteration 24, L1 5.96693e-05, Linf 0.00276551, total time[s] 0.099114 +Converged at iteration 24, L1 4.12425e-05, Linf 0.00886147, total time[s] 0.087194 +Converged at iteration 20, L1 9.64751e-05, Linf 0.00687317, total time[s] 0.071196 +Converged at iteration 18, L1 8.06849e-05, Linf 0.0025186, total time[s] 0.058356 +Converged at iteration 31, L1 7.00262e-05, Linf 0.00779852, total time[s] 0.09838 +Converged at iteration 21, L1 6.37033e-05, Linf 0.00418186, total time[s] 0.060939 +Converged at iteration 22, L1 9.34366e-05, Linf 0.0069654, total time[s] 0.059029 +Converged at iteration 27, L1 7.88433e-05, Linf 0.00413001, total time[s] 0.071591 +Converged at iteration 24, L1 7.40309e-05, Linf 0.00539284, total time[s] 0.062611 +Converged at iteration 23, L1 6.66912e-05, Linf 0.00394376, total time[s] 0.05986 +Converged at iteration 25, L1 5.5317e-05, Linf 0.00363179, total time[s] 0.064397 +Converged at iteration 23, L1 9.82238e-05, Linf 0.00662816, total time[s] 0.060177 +Converged at iteration 28, L1 8.08775e-05, Linf 0.00552278, total time[s] 0.071537 +Converged at iteration 31, L1 8.56425e-05, Linf 0.00581682, total time[s] 0.078672 +Converged at iteration 27, L1 9.36793e-05, Linf 0.00346533, total time[s] 0.06928 +Converged at iteration 31, L1 5.97214e-05, Linf 0.00629659, total time[s] 0.078663 +Converged at iteration 30, L1 9.68265e-05, Linf 0.00327705, total time[s] 0.076297 +Converged at iteration 31, L1 4.82638e-05, Linf 0.00173449, total time[s] 0.081753 +Converged at iteration 29, L1 9.47591e-05, Linf 0.00853659, total time[s] 0.078093 +Converged at iteration 30, L1 8.30831e-05, Linf 0.0161486, total time[s] 0.077979 +Converged at iteration 29, L1 5.24044e-05, Linf 0.010503, total time[s] 0.074772 +Converged at iteration 25, L1 5.38674e-05, Linf 0.00236352, total time[s] 0.065759 +Converged at iteration 36, L1 7.62326e-05, Linf 0.0063448, total time[s] 0.10554 +Converged at iteration 33, L1 9.0827e-05, Linf 0.00514704, total time[s] 0.10033 +Converged at iteration 25, L1 5.56094e-05, Linf 0.00267771, total time[s] 0.065705 +Converged at iteration 26, L1 7.66878e-05, Linf 0.0114261, total time[s] 0.07332 +Converged at iteration 27, L1 8.12377e-05, Linf 0.0119261, total time[s] 0.075734 +Converged at iteration 26, L1 3.79415e-05, Linf 0.0130233, total time[s] 0.077242 +Converged at iteration 21, L1 3.58136e-05, Linf 0.00594807, total time[s] 0.076435 +Converged at iteration 19, L1 8.47351e-05, Linf 0.00474567, total time[s] 0.071141 +Converged at iteration 24, L1 6.1434e-05, Linf 0.00273195, total time[s] 0.081385 +Converged at iteration 23, L1 8.77202e-05, Linf 0.0139929, total time[s] 0.09096 +Converged at iteration 20, L1 9.01016e-05, Linf 0.00611832, total time[s] 0.084446 +Converged at iteration 18, L1 8.99499e-05, Linf 0.00285038, total time[s] 0.058221 +Converged at iteration 31, L1 7.3028e-05, Linf 0.00827187, total time[s] 0.094349 +Converged at iteration 21, L1 8.88608e-05, Linf 0.00449196, total time[s] 0.060042 +Converged at iteration 22, L1 9.98335e-05, Linf 0.00761847, total time[s] 0.061916 +Converged at iteration 27, L1 7.6308e-05, Linf 0.00399468, total time[s] 0.070119 +Converged at iteration 24, L1 7.66284e-05, Linf 0.00560383, total time[s] 0.063183 +Converged at iteration 23, L1 7.05203e-05, Linf 0.00400141, total time[s] 0.059808 +Converged at iteration 25, L1 6.03412e-05, Linf 0.00393585, total time[s] 0.068433 +Converged at iteration 24, L1 6.56367e-05, Linf 0.00548022, total time[s] 0.075193 +Converged at iteration 28, L1 7.16601e-05, Linf 0.00521349, total time[s] 0.07516 +Converged at iteration 31, L1 9.02964e-05, Linf 0.0056229, total time[s] 0.079838 +Converged at iteration 27, L1 9.0729e-05, Linf 0.00334506, total time[s] 0.070199 +Converged at iteration 31, L1 6.22051e-05, Linf 0.0066394, total time[s] 0.08047 +Converged at iteration 30, L1 9.95839e-05, Linf 0.00344893, total time[s] 0.09244 +Converged at iteration 31, L1 5.61964e-05, Linf 0.00205837, total time[s] 0.106977 +Converged at iteration 29, L1 9.30739e-05, Linf 0.0079659, total time[s] 0.08666 +Converged at iteration 30, L1 9.38941e-05, Linf 0.0169425, total time[s] 0.077729 +Converged at iteration 29, L1 5.80863e-05, Linf 0.0112822, total time[s] 0.074717 +Converged at iteration 25, L1 5.31773e-05, Linf 0.00233573, total time[s] 0.067396 +Converged at iteration 36, L1 7.77401e-05, Linf 0.00653712, total time[s] 0.094081 +Converged at iteration 33, L1 9.51769e-05, Linf 0.00535185, total time[s] 0.14272 +Converged at iteration 25, L1 5.79789e-05, Linf 0.00275547, total time[s] 0.078718 +Converged at iteration 26, L1 5.74615e-05, Linf 0.011104, total time[s] 0.078354 +Converged at iteration 27, L1 8.32904e-05, Linf 0.0123389, total time[s] 0.075507 +Converged at iteration 26, L1 3.71519e-05, Linf 0.0134576, total time[s] 0.068826 +Converged at iteration 21, L1 3.71905e-05, Linf 0.00617713, total time[s] 0.063221 +Converged at iteration 19, L1 8.76474e-05, Linf 0.00465584, total time[s] 0.077225 +Converged at iteration 24, L1 6.26956e-05, Linf 0.00268687, total time[s] 0.070239 +Converged at iteration 23, L1 8.15661e-05, Linf 0.0138383, total time[s] 0.072153 +Converged at iteration 20, L1 8.6661e-05, Linf 0.00545128, total time[s] 0.057435 +Converged at iteration 18, L1 9.66646e-05, Linf 0.00307139, total time[s] 0.059663 +Converged at iteration 31, L1 7.42679e-05, Linf 0.00863627, total time[s] 0.106679 +Converged at iteration 21, L1 9.6097e-05, Linf 0.00456775, total time[s] 0.081268 +Converged at iteration 23, L1 5.75917e-05, Linf 0.0053526, total time[s] 0.062162 +Converged at iteration 27, L1 7.39006e-05, Linf 0.00390842, total time[s] 0.07612 +Converged at iteration 24, L1 7.70623e-05, Linf 0.00568591, total time[s] 0.068207 +Converged at iteration 23, L1 7.22272e-05, Linf 0.00427371, total time[s] 0.069716 +Converged at iteration 25, L1 6.33995e-05, Linf 0.00414856, total time[s] 0.079462 +Converged at iteration 24, L1 7.51582e-05, Linf 0.00615326, total time[s] 0.077076 +Converged at iteration 28, L1 6.36023e-05, Linf 0.00515006, total time[s] 0.080478 +Converged at iteration 31, L1 9.3304e-05, Linf 0.00520941, total time[s] 0.095257 +Converged at iteration 27, L1 8.66142e-05, Linf 0.00320011, total time[s] 0.084876 +Converged at iteration 31, L1 6.17397e-05, Linf 0.00686527, total time[s] 0.103684 +Converged at iteration 31, L1 6.25357e-05, Linf 0.00223955, total time[s] 0.080126 +Converged at iteration 31, L1 6.15846e-05, Linf 0.00222837, total time[s] 0.08006 +Converged at iteration 29, L1 9.29256e-05, Linf 0.00748436, total time[s] 0.076213 +Converged at iteration 31, L1 3.25613e-05, Linf 0.00894573, total time[s] 0.087745 +Converged at iteration 29, L1 6.31898e-05, Linf 0.0118715, total time[s] 0.084027 +Converged at iteration 25, L1 5.24293e-05, Linf 0.00230226, total time[s] 0.067046 +Converged at iteration 36, L1 7.99483e-05, Linf 0.00699843, total time[s] 0.117012 +Converged at iteration 34, L1 4.53918e-05, Linf 0.00443111, total time[s] 0.107849 +Converged at iteration 25, L1 6.04463e-05, Linf 0.00292879, total time[s] 0.098347 +Converged at iteration 26, L1 3.97527e-05, Linf 0.0105315, total time[s] 0.069664 +Converged at iteration 27, L1 8.37954e-05, Linf 0.0132559, total time[s] 0.071043 +Converged at iteration 26, L1 3.92805e-05, Linf 0.0140984, total time[s] 0.074015 +Converged at iteration 21, L1 3.7555e-05, Linf 0.00652303, total time[s] 0.088117 +Converged at iteration 19, L1 9.16901e-05, Linf 0.00447657, total time[s] 0.088383 +Converged at iteration 24, L1 6.21359e-05, Linf 0.00263601, total time[s] 0.10677 +Converged at iteration 23, L1 7.8914e-05, Linf 0.0128016, total time[s] 0.085639 +Converged at iteration 20, L1 8.43137e-05, Linf 0.00498015, total time[s] 0.067726 +Converged at iteration 19, L1 5.09739e-05, Linf 0.00179158, total time[s] 0.063207 +Converged at iteration 31, L1 7.73293e-05, Linf 0.0091624, total time[s] 0.092738 +Converged at iteration 21, L1 9.89656e-05, Linf 0.00468684, total time[s] 0.061802 +Converged at iteration 23, L1 6.06585e-05, Linf 0.00568602, total time[s] 0.06295 +Converged at iteration 27, L1 7.22303e-05, Linf 0.00379888, total time[s] 0.071179 +Converged at iteration 24, L1 7.63305e-05, Linf 0.00565155, total time[s] 0.089358 +Converged at iteration 23, L1 7.50812e-05, Linf 0.00446345, total time[s] 0.08192 +Converged at iteration 25, L1 6.6341e-05, Linf 0.00435642, total time[s] 0.079861 +Converged at iteration 24, L1 8.97639e-05, Linf 0.00698338, total time[s] 0.064166 +Converged at iteration 27, L1 9.54827e-05, Linf 0.00666412, total time[s] 0.076448 +Converged at iteration 31, L1 9.8073e-05, Linf 0.00542262, total time[s] 0.08597 +Converged at iteration 27, L1 8.12243e-05, Linf 0.00306511, total time[s] 0.075916 +Converged at iteration 31, L1 6.4902e-05, Linf 0.00722604, total time[s] 0.096891 +Converged at iteration 31, L1 6.28771e-05, Linf 0.00234083, total time[s] 0.08633 +Converged at iteration 31, L1 6.87298e-05, Linf 0.00257179, total time[s] 0.090344 +Converged at iteration 29, L1 9.16026e-05, Linf 0.00686612, total time[s] 0.083236 +Converged at iteration 31, L1 3.57366e-05, Linf 0.00918565, total time[s] 0.103304 +Converged at iteration 29, L1 7.03599e-05, Linf 0.0126663, total time[s] 0.080219 +Converged at iteration 25, L1 5.23354e-05, Linf 0.00231795, total time[s] 0.071869 +Converged at iteration 36, L1 8.28238e-05, Linf 0.0071985, total time[s] 0.122421 +Converged at iteration 34, L1 4.79996e-05, Linf 0.00426054, total time[s] 0.109331 +Converged at iteration 25, L1 6.21675e-05, Linf 0.00301996, total time[s] 0.066785 +Converged at iteration 25, L1 9.20281e-05, Linf 0.0134698, total time[s] 0.06866 +Converged at iteration 27, L1 8.10528e-05, Linf 0.0135141, total time[s] 0.071717 +Converged at iteration 26, L1 4.11036e-05, Linf 0.0145536, total time[s] 0.111639 +Converged at iteration 21, L1 3.78414e-05, Linf 0.0065821, total time[s] 0.110737 +Converged at iteration 19, L1 9.16057e-05, Linf 0.00436818, total time[s] 0.068698 +Converged at iteration 24, L1 6.26755e-05, Linf 0.00271509, total time[s] 0.101439 +Converged at iteration 23, L1 7.76766e-05, Linf 0.0121859, total time[s] 0.134188 +Converged at iteration 20, L1 8.60992e-05, Linf 0.00500443, total time[s] 0.068581 +Converged at iteration 19, L1 5.62938e-05, Linf 0.00187552, total time[s] 0.063643 +Converged at iteration 31, L1 7.8765e-05, Linf 0.00951903, total time[s] 0.086105 +Converged at iteration 22, L1 6.7214e-05, Linf 0.00284858, total time[s] 0.05883 +Converged at iteration 23, L1 6.18513e-05, Linf 0.00588967, total time[s] 0.061739 +Converged at iteration 27, L1 6.95456e-05, Linf 0.00372549, total time[s] 0.073887 +Converged at iteration 24, L1 7.54739e-05, Linf 0.00561325, total time[s] 0.064783 +Converged at iteration 23, L1 7.71145e-05, Linf 0.00436972, total time[s] 0.063976 +Converged at iteration 25, L1 6.72042e-05, Linf 0.00445736, total time[s] 0.068757 +Converged at iteration 25, L1 5.74654e-05, Linf 0.00534009, total time[s] 0.081072 +Converged at iteration 27, L1 9.45405e-05, Linf 0.0066316, total time[s] 0.071544 +Converged at iteration 32, L1 5.31359e-05, Linf 0.00319167, total time[s] 0.084077 +Converged at iteration 27, L1 7.83043e-05, Linf 0.00294842, total time[s] 0.069926 +Converged at iteration 31, L1 6.58478e-05, Linf 0.00743034, total time[s] 0.081157 +Converged at iteration 31, L1 6.28945e-05, Linf 0.00229662, total time[s] 0.083994 +Converged at iteration 31, L1 7.5351e-05, Linf 0.00278201, total time[s] 0.083669 +Converged at iteration 29, L1 9.13834e-05, Linf 0.00643374, total time[s] 0.073858 +Converged at iteration 31, L1 3.92682e-05, Linf 0.00919253, total time[s] 0.082238 +Converged at iteration 29, L1 7.47521e-05, Linf 0.013214, total time[s] 0.080604 +Converged at iteration 25, L1 5.22799e-05, Linf 0.00237481, total time[s] 0.065709 +Converged at iteration 36, L1 8.56069e-05, Linf 0.00761867, total time[s] 0.101546 +Converged at iteration 34, L1 5.23699e-05, Linf 0.00486452, total time[s] 0.092788 +Converged at iteration 25, L1 6.12146e-05, Linf 0.00309032, total time[s] 0.071675 +Converged at iteration 25, L1 7.31357e-05, Linf 0.0130331, total time[s] 0.066813 +Converged at iteration 27, L1 8.10186e-05, Linf 0.0136168, total time[s] 0.07044 +Converged at iteration 26, L1 4.39774e-05, Linf 0.0151436, total time[s] 0.073141 +Converged at iteration 21, L1 3.81031e-05, Linf 0.00673923, total time[s] 0.082644 +Converged at iteration 19, L1 9.01754e-05, Linf 0.00424257, total time[s] 0.075805 +Converged at iteration 24, L1 6.20147e-05, Linf 0.00257927, total time[s] 0.081728 +Converged at iteration 23, L1 7.48363e-05, Linf 0.0112839, total time[s] 0.076007 +Converged at iteration 20, L1 8.87225e-05, Linf 0.0050093, total time[s] 0.060556 +Converged at iteration 19, L1 5.83725e-05, Linf 0.00199169, total time[s] 0.067678 +Converged at iteration 31, L1 8.16502e-05, Linf 0.0100294, total time[s] 0.088549 +Converged at iteration 22, L1 6.88229e-05, Linf 0.00286929, total time[s] 0.061372 +Converged at iteration 23, L1 6.84187e-05, Linf 0.00618494, total time[s] 0.066195 +Converged at iteration 27, L1 6.89736e-05, Linf 0.00362594, total time[s] 0.074345 +Converged at iteration 24, L1 7.39866e-05, Linf 0.00546792, total time[s] 0.065221 +Converged at iteration 23, L1 8.05403e-05, Linf 0.00434745, total time[s] 0.061554 +Converged at iteration 25, L1 6.82632e-05, Linf 0.00455513, total time[s] 0.06775 +Converged at iteration 25, L1 6.72341e-05, Linf 0.00585415, total time[s] 0.066881 +Converged at iteration 27, L1 9.29468e-05, Linf 0.0066935, total time[s] 0.072839 +Converged at iteration 32, L1 5.4528e-05, Linf 0.00322642, total time[s] 0.085068 +Converged at iteration 27, L1 7.37834e-05, Linf 0.00278521, total time[s] 0.072348 +Converged at iteration 31, L1 6.81542e-05, Linf 0.00775866, total time[s] 0.091133 +Converged at iteration 31, L1 6.39474e-05, Linf 0.00235084, total time[s] 0.100801 +Converged at iteration 31, L1 8.46644e-05, Linf 0.00324083, total time[s] 0.084724 +Converged at iteration 29, L1 9.29512e-05, Linf 0.00594469, total time[s] 0.08033 +Converged at iteration 31, L1 4.39232e-05, Linf 0.00988816, total time[s] 0.085418 +Converged at iteration 29, L1 8.24139e-05, Linf 0.0141649, total time[s] 0.086629 +Converged at iteration 25, L1 5.32916e-05, Linf 0.00246557, total time[s] 0.069148 +Converged at iteration 36, L1 8.93584e-05, Linf 0.00792113, total time[s] 0.125811 +Converged at iteration 34, L1 5.56391e-05, Linf 0.00467626, total time[s] 0.145335 +Converged at iteration 25, L1 6.09986e-05, Linf 0.00313218, total time[s] 0.088672 +Converged at iteration 25, L1 6.48168e-05, Linf 0.0126882, total time[s] 0.074927 +Converged at iteration 27, L1 7.98807e-05, Linf 0.0136245, total time[s] 0.104156 +Converged at iteration 26, L1 4.62092e-05, Linf 0.0155293, total time[s] 0.12882 +Converged at iteration 21, L1 3.77712e-05, Linf 0.0068294, total time[s] 0.07203 +Converged at iteration 19, L1 8.90738e-05, Linf 0.004203, total time[s] 0.064076 +Converged at iteration 24, L1 6.25174e-05, Linf 0.00251596, total time[s] 0.100183 +Converged at iteration 23, L1 7.40339e-05, Linf 0.010586, total time[s] 0.083074 +Converged at iteration 20, L1 8.95296e-05, Linf 0.00496885, total time[s] 0.066451 +Converged at iteration 19, L1 6.14865e-05, Linf 0.00206228, total time[s] 0.074901 +Converged at iteration 31, L1 8.2328e-05, Linf 0.0103412, total time[s] 0.08191 +Converged at iteration 22, L1 7.00961e-05, Linf 0.00284818, total time[s] 0.061035 +Converged at iteration 23, L1 7.40054e-05, Linf 0.00667557, total time[s] 0.065885 +Converged at iteration 27, L1 6.98153e-05, Linf 0.003599, total time[s] 0.074068 +Converged at iteration 24, L1 7.16538e-05, Linf 0.00533909, total time[s] 0.064828 +Converged at iteration 23, L1 8.17141e-05, Linf 0.00442314, total time[s] 0.063102 +Converged at iteration 25, L1 6.97812e-05, Linf 0.00460657, total time[s] 0.066007 +Converged at iteration 25, L1 7.35099e-05, Linf 0.00608529, total time[s] 0.06818 +Converged at iteration 27, L1 9.05293e-05, Linf 0.00684585, total time[s] 0.073103 +Converged at iteration 32, L1 5.56998e-05, Linf 0.00321586, total time[s] 0.088754 +Converged at iteration 27, L1 7.00459e-05, Linf 0.00264325, total time[s] 0.070654 +Converged at iteration 31, L1 6.94898e-05, Linf 0.00794827, total time[s] 0.08032 +Converged at iteration 31, L1 6.40869e-05, Linf 0.0023774, total time[s] 0.080038 +Converged at iteration 31, L1 9.18357e-05, Linf 0.00350026, total time[s] 0.079928 +Converged at iteration 29, L1 9.40525e-05, Linf 0.00563769, total time[s] 0.075056 +Converged at iteration 31, L1 4.73419e-05, Linf 0.00996362, total time[s] 0.079392 +Converged at iteration 29, L1 8.20227e-05, Linf 0.0144119, total time[s] 0.075101 +Converged at iteration 25, L1 5.27046e-05, Linf 0.00255846, total time[s] 0.06561 +Converged at iteration 36, L1 9.484e-05, Linf 0.00834194, total time[s] 0.093357 +Converged at iteration 34, L1 6.07223e-05, Linf 0.00511158, total time[s] 0.091979 +Converged at iteration 25, L1 5.80713e-05, Linf 0.00322831, total time[s] 0.081162 +Converged at iteration 25, L1 5.68467e-05, Linf 0.0122015, total time[s] 0.067712 +Converged at iteration 27, L1 6.60731e-05, Linf 0.0134479, total time[s] 0.070441 +Converged at iteration 26, L1 4.93335e-05, Linf 0.0162713, total time[s] 0.074267 +Converged at iteration 21, L1 3.84782e-05, Linf 0.00693357, total time[s] 0.080071 +Converged at iteration 19, L1 8.889e-05, Linf 0.00403825, total time[s] 0.070541 +Converged at iteration 24, L1 6.31888e-05, Linf 0.00246343, total time[s] 0.104407 +Converged at iteration 23, L1 7.82242e-05, Linf 0.0096717, total time[s] 0.097735 +Converged at iteration 20, L1 9.31181e-05, Linf 0.00495029, total time[s] 0.065102 +Converged at iteration 19, L1 6.67021e-05, Linf 0.00218581, total time[s] 0.077751 +Converged at iteration 31, L1 8.42498e-05, Linf 0.0108732, total time[s] 0.091459 +Converged at iteration 22, L1 7.39903e-05, Linf 0.00302874, total time[s] 0.058511 +Converged at iteration 23, L1 7.30926e-05, Linf 0.00662801, total time[s] 0.061573 +Converged at iteration 27, L1 7.21396e-05, Linf 0.00364096, total time[s] 0.073319 +Converged at iteration 24, L1 6.9153e-05, Linf 0.00506626, total time[s] 0.063211 +Converged at iteration 23, L1 8.45284e-05, Linf 0.0045207, total time[s] 0.060066 +Converged at iteration 25, L1 7.27273e-05, Linf 0.00472002, total time[s] 0.064244 +Converged at iteration 25, L1 8.0535e-05, Linf 0.00659967, total time[s] 0.074775 +Converged at iteration 27, L1 8.81431e-05, Linf 0.0069462, total time[s] 0.099394 +Converged at iteration 32, L1 5.81918e-05, Linf 0.00322416, total time[s] 0.086299 +Converged at iteration 27, L1 6.60629e-05, Linf 0.00244846, total time[s] 0.06906 +Converged at iteration 31, L1 7.09927e-05, Linf 0.00826343, total time[s] 0.078384 +Converged at iteration 31, L1 6.29492e-05, Linf 0.002407, total time[s] 0.083189 +Converged at iteration 32, L1 4.8863e-05, Linf 0.00224754, total time[s] 0.082412 +Converged at iteration 29, L1 9.83124e-05, Linf 0.00516344, total time[s] 0.076519 +Converged at iteration 31, L1 5.18138e-05, Linf 0.0120162, total time[s] 0.081176 +Converged at iteration 29, L1 8.3988e-05, Linf 0.0150705, total time[s] 0.0762 +Converged at iteration 25, L1 5.27423e-05, Linf 0.00258257, total time[s] 0.067089 +Converged at iteration 36, L1 9.85669e-05, Linf 0.0086126, total time[s] 0.103573 +Converged at iteration 34, L1 6.39872e-05, Linf 0.00551684, total time[s] 0.100695 +Converged at iteration 25, L1 5.77989e-05, Linf 0.00327767, total time[s] 0.070408 +Converged at iteration 25, L1 5.21609e-05, Linf 0.0118742, total time[s] 0.064557 +Converged at iteration 27, L1 6.42201e-05, Linf 0.0132337, total time[s] 0.070116 +Converged at iteration 26, L1 5.51769e-05, Linf 0.0163385, total time[s] 0.069304 +Converged at iteration 21, L1 3.80478e-05, Linf 0.00700445, total time[s] 0.065993 +Converged at iteration 19, L1 8.86173e-05, Linf 0.00396555, total time[s] 0.060123 +Converged at iteration 24, L1 6.38378e-05, Linf 0.0025509, total time[s] 0.091614 +Converged at iteration 23, L1 7.85982e-05, Linf 0.00901426, total time[s] 0.069088 +Converged at iteration 20, L1 9.4961e-05, Linf 0.00488976, total time[s] 0.073576 +Converged at iteration 19, L1 6.98217e-05, Linf 0.00225985, total time[s] 0.078737 +Converged at iteration 31, L1 8.4706e-05, Linf 0.0111073, total time[s] 0.101354 +Converged at iteration 22, L1 7.6525e-05, Linf 0.00308901, total time[s] 0.059808 +Converged at iteration 23, L1 7.70698e-05, Linf 0.0067695, total time[s] 0.061177 +Converged at iteration 27, L1 7.08579e-05, Linf 0.00364414, total time[s] 0.070486 +Converged at iteration 24, L1 6.73191e-05, Linf 0.0049131, total time[s] 0.062604 +Converged at iteration 23, L1 8.51367e-05, Linf 0.00459277, total time[s] 0.060204 +Converged at iteration 25, L1 7.24591e-05, Linf 0.00478512, total time[s] 0.065225 +Converged at iteration 25, L1 8.10423e-05, Linf 0.00694749, total time[s] 0.067307 +Converged at iteration 27, L1 8.56838e-05, Linf 0.00693424, total time[s] 0.080345 +Converged at iteration 32, L1 5.89392e-05, Linf 0.00321644, total time[s] 0.08198 +Converged at iteration 27, L1 6.31315e-05, Linf 0.00231177, total time[s] 0.06995 +Converged at iteration 31, L1 7.1884e-05, Linf 0.00839875, total time[s] 0.078901 +Converged at iteration 31, L1 6.48189e-05, Linf 0.00241001, total time[s] 0.080741 +Converged at iteration 32, L1 5.04992e-05, Linf 0.00236222, total time[s] 0.08354 +Converged at iteration 29, L1 9.99872e-05, Linf 0.00477717, total time[s] 0.073733 +Converged at iteration 31, L1 5.51571e-05, Linf 0.0124946, total time[s] 0.084474 +Converged at iteration 29, L1 8.54162e-05, Linf 0.0154305, total time[s] 0.074461 +Converged at iteration 25, L1 5.49877e-05, Linf 0.0025849, total time[s] 0.065995 +Converged at iteration 37, L1 5.04321e-05, Linf 0.00700218, total time[s] 0.097168 +Converged at iteration 34, L1 7.06563e-05, Linf 0.00534963, total time[s] 0.093897 +Converged at iteration 25, L1 5.78654e-05, Linf 0.00343046, total time[s] 0.065132 +Converged at iteration 25, L1 4.91057e-05, Linf 0.0113612, total time[s] 0.065525 +Converged at iteration 27, L1 4.55596e-05, Linf 0.0125143, total time[s] 0.072453 +Converged at iteration 26, L1 5.49249e-05, Linf 0.0167542, total time[s] 0.067557 +Converged at iteration 21, L1 3.79237e-05, Linf 0.00710415, total time[s] 0.069412 +Converged at iteration 19, L1 8.855e-05, Linf 0.00379904, total time[s] 0.05743 +Converged at iteration 24, L1 6.22924e-05, Linf 0.00247628, total time[s] 0.074681 +Converged at iteration 23, L1 8.27963e-05, Linf 0.00836383, total time[s] 0.086114 +Converged at iteration 20, L1 9.84887e-05, Linf 0.00481911, total time[s] 0.087497 +Converged at iteration 19, L1 7.56372e-05, Linf 0.0023989, total time[s] 0.059321 +Converged at iteration 31, L1 8.53765e-05, Linf 0.0116604, total time[s] 0.097687 +Converged at iteration 22, L1 7.07211e-05, Linf 0.00320363, total time[s] 0.090166 +Converged at iteration 23, L1 7.70017e-05, Linf 0.00703347, total time[s] 0.061433 +Converged at iteration 27, L1 6.73055e-05, Linf 0.00362814, total time[s] 0.074803 +Converged at iteration 24, L1 6.38991e-05, Linf 0.00459982, total time[s] 0.066291 +Converged at iteration 23, L1 8.59472e-05, Linf 0.00467264, total time[s] 0.075534 +Converged at iteration 25, L1 7.76686e-05, Linf 0.00491605, total time[s] 0.072663 +Converged at iteration 25, L1 8.40892e-05, Linf 0.00792921, total time[s] 0.092155 +Converged at iteration 27, L1 8.45686e-05, Linf 0.00684984, total time[s] 0.073194 +Converged at iteration 32, L1 6.07493e-05, Linf 0.00323372, total time[s] 0.082162 +Converged at iteration 26, L1 9.99819e-05, Linf 0.00308354, total time[s] 0.068068 +Converged at iteration 31, L1 7.26066e-05, Linf 0.00867516, total time[s] 0.080218 +Converged at iteration 31, L1 6.22453e-05, Linf 0.00239186, total time[s] 0.079666 +Converged at iteration 32, L1 5.67727e-05, Linf 0.00262972, total time[s] 0.082936 +Converged at iteration 30, L1 6.78633e-05, Linf 0.0028737, total time[s] 0.077474 +Converged at iteration 31, L1 6.12105e-05, Linf 0.0133709, total time[s] 0.085898 +Converged at iteration 29, L1 8.53055e-05, Linf 0.0160312, total time[s] 0.076507 +Converged at iteration 25, L1 5.5471e-05, Linf 0.00263277, total time[s] 0.07226 +Converged at iteration 37, L1 5.20248e-05, Linf 0.00721563, total time[s] 0.109172 +Converged at iteration 34, L1 7.38396e-05, Linf 0.00556955, total time[s] 0.103544 +Converged at iteration 25, L1 5.8349e-05, Linf 0.00347914, total time[s] 0.066442 +Converged at iteration 25, L1 4.78274e-05, Linf 0.0110032, total time[s] 0.066517 +Converged at iteration 27, L1 3.6468e-05, Linf 0.0119616, total time[s] 0.082524 +Converged at iteration 26, L1 5.53934e-05, Linf 0.0168953, total time[s] 0.093471 +Converged at iteration 21, L1 3.8246e-05, Linf 0.00715757, total time[s] 0.07951 +Converged at iteration 19, L1 8.82722e-05, Linf 0.00378987, total time[s] 0.061558 +Converged at iteration 24, L1 6.14962e-05, Linf 0.0024844, total time[s] 0.070806 +Converged at iteration 23, L1 8.58844e-05, Linf 0.00784471, total time[s] 0.078625 +Converged at iteration 20, L1 9.99184e-05, Linf 0.00472529, total time[s] 0.06927 +Converged at iteration 19, L1 7.89408e-05, Linf 0.00254888, total time[s] 0.067076 +Converged at iteration 31, L1 8.57949e-05, Linf 0.0119025, total time[s] 0.090247 +Converged at iteration 22, L1 6.87449e-05, Linf 0.00325782, total time[s] 0.070248 +Converged at iteration 23, L1 7.92813e-05, Linf 0.0071354, total time[s] 0.070397 +Converged at iteration 27, L1 6.49808e-05, Linf 0.00358847, total time[s] 0.084981 +Converged at iteration 24, L1 6.2145e-05, Linf 0.00447693, total time[s] 0.065286 +Converged at iteration 23, L1 8.62685e-05, Linf 0.00472305, total time[s] 0.062897 +Converged at iteration 25, L1 7.82537e-05, Linf 0.00498681, total time[s] 0.067395 +Converged at iteration 25, L1 8.43823e-05, Linf 0.00734884, total time[s] 0.066871 +Converged at iteration 27, L1 8.39904e-05, Linf 0.00689562, total time[s] 0.071063 +Converged at iteration 32, L1 6.21693e-05, Linf 0.00328036, total time[s] 0.084695 +Converged at iteration 26, L1 9.6548e-05, Linf 0.00293727, total time[s] 0.071361 +Converged at iteration 31, L1 7.22323e-05, Linf 0.00873937, total time[s] 0.082772 +Converged at iteration 31, L1 6.11231e-05, Linf 0.00238576, total time[s] 0.080961 +Converged at iteration 32, L1 5.87859e-05, Linf 0.00272677, total time[s] 0.083989 +Converged at iteration 30, L1 6.94754e-05, Linf 0.00289303, total time[s] 0.078932 +Converged at iteration 31, L1 6.42587e-05, Linf 0.013925, total time[s] 0.081202 +Converged at iteration 29, L1 8.54376e-05, Linf 0.0163015, total time[s] 0.07662 +Converged at iteration 25, L1 5.47257e-05, Linf 0.00252274, total time[s] 0.06705 +Converged at iteration 37, L1 5.47508e-05, Linf 0.007603, total time[s] 0.097212 +Converged at iteration 34, L1 8.1245e-05, Linf 0.0064574, total time[s] 0.096497 +Converged at iteration 25, L1 5.79756e-05, Linf 0.0036025, total time[s] 0.070362 +Converged at iteration 25, L1 4.61144e-05, Linf 0.0104211, total time[s] 0.067486 +Converged at iteration 26, L1 8.91696e-05, Linf 0.0184064, total time[s] 0.069896 +Converged at iteration 26, L1 5.39943e-05, Linf 0.016975, total time[s] 0.074352 +Converged at iteration 21, L1 3.87645e-05, Linf 0.00736057, total time[s] 0.076682 +Converged at iteration 19, L1 8.84392e-05, Linf 0.003661, total time[s] 0.064792 +Converged at iteration 24, L1 6.12472e-05, Linf 0.00249004, total time[s] 0.101374 +Converged at iteration 23, L1 8.91994e-05, Linf 0.00690364, total time[s] 0.063255 +Converged at iteration 21, L1 4.71608e-05, Linf 0.00240622, total time[s] 0.091473 +Converged at iteration 19, L1 8.47126e-05, Linf 0.00279093, total time[s] 0.054295 +Converged at iteration 31, L1 8.62419e-05, Linf 0.0123957, total time[s] 0.086819 +Converged at iteration 22, L1 6.6431e-05, Linf 0.00326845, total time[s] 0.078547 +Converged at iteration 23, L1 8.81675e-05, Linf 0.00738212, total time[s] 0.069681 +Converged at iteration 27, L1 6.18323e-05, Linf 0.00347719, total time[s] 0.070319 +Converged at iteration 24, L1 6.05384e-05, Linf 0.00423239, total time[s] 0.062862 +Converged at iteration 23, L1 8.84275e-05, Linf 0.00482646, total time[s] 0.060939 +Converged at iteration 25, L1 8.22725e-05, Linf 0.00516048, total time[s] 0.071718 +Converged at iteration 25, L1 9.14901e-05, Linf 0.00598089, total time[s] 0.064685 +Converged at iteration 27, L1 8.30668e-05, Linf 0.0073899, total time[s] 0.070738 +Converged at iteration 32, L1 6.27935e-05, Linf 0.00332463, total time[s] 0.08954 +Converged at iteration 26, L1 9.15391e-05, Linf 0.00266573, total time[s] 0.071808 +Converged at iteration 31, L1 7.50068e-05, Linf 0.00903457, total time[s] 0.090967 +Converged at iteration 31, L1 5.98465e-05, Linf 0.00240333, total time[s] 0.080388 +Converged at iteration 32, L1 6.27311e-05, Linf 0.00292791, total time[s] 0.086107 +Converged at iteration 30, L1 7.42628e-05, Linf 0.00304675, total time[s] 0.077372 +Converged at iteration 31, L1 7.71879e-05, Linf 0.0149939, total time[s] 0.085307 +Converged at iteration 29, L1 8.66979e-05, Linf 0.0168837, total time[s] 0.082156 +Converged at iteration 25, L1 5.52989e-05, Linf 0.0025037, total time[s] 0.065124 +Converged at iteration 37, L1 5.66094e-05, Linf 0.00780452, total time[s] 0.101846 +Converged at iteration 34, L1 8.49141e-05, Linf 0.00663217, total time[s] 0.093304 +Converged at iteration 25, L1 5.8501e-05, Linf 0.00363779, total time[s] 0.065885 +Converged at iteration 25, L1 4.50506e-05, Linf 0.0100629, total time[s] 0.065727 +Converged at iteration 26, L1 7.82345e-05, Linf 0.0179581, total time[s] 0.07107 +Converged at iteration 26, L1 5.29259e-05, Linf 0.0167323, total time[s] 0.074638 +Converged at iteration 21, L1 3.95651e-05, Linf 0.00724691, total time[s] 0.058922 +Converged at iteration 19, L1 8.67169e-05, Linf 0.00366498, total time[s] 0.055251 +Converged at iteration 24, L1 6.13325e-05, Linf 0.00249837, total time[s] 0.061489 +Converged at iteration 23, L1 9.1324e-05, Linf 0.00642464, total time[s] 0.058801 +Converged at iteration 21, L1 4.84808e-05, Linf 0.0024817, total time[s] 0.058004 +Converged at iteration 19, L1 8.75193e-05, Linf 0.00292184, total time[s] 0.093374 +Converged at iteration 31, L1 8.62354e-05, Linf 0.0125976, total time[s] 0.089963 +Converged at iteration 22, L1 6.57044e-05, Linf 0.00340022, total time[s] 0.058835 +Converged at iteration 23, L1 9.00122e-05, Linf 0.00745012, total time[s] 0.063291 +Converged at iteration 27, L1 6.16206e-05, Linf 0.00345642, total time[s] 0.077693 +Converged at iteration 24, L1 5.92574e-05, Linf 0.00420034, total time[s] 0.070021 +Converged at iteration 23, L1 8.89911e-05, Linf 0.0048539, total time[s] 0.070258 +Converged at iteration 25, L1 8.37854e-05, Linf 0.00522767, total time[s] 0.066235 +Converged at iteration 25, L1 9.54476e-05, Linf 0.00605811, total time[s] 0.068503 +Converged at iteration 27, L1 8.23524e-05, Linf 0.00743279, total time[s] 0.074966 +Converged at iteration 32, L1 6.377e-05, Linf 0.00334899, total time[s] 0.09707 +Converged at iteration 26, L1 8.90286e-05, Linf 0.00253422, total time[s] 0.071632 +Converged at iteration 31, L1 7.37827e-05, Linf 0.00901963, total time[s] 0.085155 +Converged at iteration 31, L1 5.96093e-05, Linf 0.00240814, total time[s] 0.079343 +Converged at iteration 32, L1 6.44005e-05, Linf 0.00300323, total time[s] 0.087517 +Converged at iteration 30, L1 7.71134e-05, Linf 0.00313157, total time[s] 0.079095 +Converged at iteration 31, L1 7.47141e-05, Linf 0.0155563, total time[s] 0.078795 +Converged at iteration 29, L1 8.64998e-05, Linf 0.0170984, total time[s] 0.074811 +Converged at iteration 25, L1 5.55153e-05, Linf 0.00244659, total time[s] 0.070293 +Converged at iteration 37, L1 5.96901e-05, Linf 0.00823224, total time[s] 0.107774 +Converged at iteration 34, L1 9.39397e-05, Linf 0.00695347, total time[s] 0.086175 +Converged at iteration 25, L1 6.14755e-05, Linf 0.00372256, total time[s] 0.071153 +Converged at iteration 25, L1 4.62258e-05, Linf 0.00954325, total time[s] 0.066615 +Converged at iteration 26, L1 6.45606e-05, Linf 0.0166886, total time[s] 0.067622 +Converged at iteration 26, L1 5.05452e-05, Linf 0.0169832, total time[s] 0.066949 +Converged at iteration 21, L1 4.00928e-05, Linf 0.00730049, total time[s] 0.055213 +Converged at iteration 19, L1 8.47514e-05, Linf 0.00350534, total time[s] 0.051596 +Converged at iteration 24, L1 5.9862e-05, Linf 0.00248458, total time[s] 0.06274 +Converged at iteration 23, L1 9.51834e-05, Linf 0.00564691, total time[s] 0.059995 +Converged at iteration 21, L1 5.16113e-05, Linf 0.00263384, total time[s] 0.057079 +Converged at iteration 19, L1 9.54706e-05, Linf 0.00320143, total time[s] 0.051146 +Converged at iteration 31, L1 8.87934e-05, Linf 0.0130959, total time[s] 0.082285 +Converged at iteration 22, L1 6.50322e-05, Linf 0.0034902, total time[s] 0.058842 +Converged at iteration 24, L1 5.72353e-05, Linf 0.00428714, total time[s] 0.068051 +Converged at iteration 27, L1 6.00896e-05, Linf 0.00334945, total time[s] 0.071414 +Converged at iteration 24, L1 5.91609e-05, Linf 0.00417418, total time[s] 0.062685 +Converged at iteration 23, L1 9.19349e-05, Linf 0.00493058, total time[s] 0.061547 +Converged at iteration 25, L1 8.88387e-05, Linf 0.00544221, total time[s] 0.067427 +Converged at iteration 26, L1 5.58564e-05, Linf 0.00401921, total time[s] 0.068001 +Converged at iteration 27, L1 8.16131e-05, Linf 0.00692447, total time[s] 0.070812 +Converged at iteration 32, L1 6.54892e-05, Linf 0.00342757, total time[s] 0.085596 +Converged at iteration 26, L1 8.39676e-05, Linf 0.00222178, total time[s] 0.069047 +Converged at iteration 31, L1 7.53584e-05, Linf 0.00923991, total time[s] 0.083686 +Converged at iteration 31, L1 5.87703e-05, Linf 0.00241564, total time[s] 0.080458 +Converged at iteration 32, L1 6.71806e-05, Linf 0.00314146, total time[s] 0.082522 +Converged at iteration 30, L1 8.37254e-05, Linf 0.00333979, total time[s] 0.077956 +Converged at iteration 31, L1 8.30525e-05, Linf 0.0167343, total time[s] 0.080672 +Converged at iteration 29, L1 8.82217e-05, Linf 0.0176811, total time[s] 0.075697 +Converged at iteration 25, L1 5.68769e-05, Linf 0.00239724, total time[s] 0.067034 +Converged at iteration 37, L1 6.14912e-05, Linf 0.00842723, total time[s] 0.098683 +Converged at iteration 34, L1 9.74822e-05, Linf 0.00706917, total time[s] 0.090645 +Converged at iteration 25, L1 6.21606e-05, Linf 0.0037236, total time[s] 0.071026 +Converged at iteration 25, L1 4.57626e-05, Linf 0.009244, total time[s] 0.066126 +Converged at iteration 26, L1 5.93432e-05, Linf 0.0162086, total time[s] 0.085526 +Converged at iteration 26, L1 4.94889e-05, Linf 0.0163543, total time[s] 0.093651 +Converged at iteration 21, L1 4.05856e-05, Linf 0.00733781, total time[s] 0.056679 +Converged at iteration 19, L1 8.33623e-05, Linf 0.00351107, total time[s] 0.05363 +Converged at iteration 24, L1 5.94956e-05, Linf 0.00242015, total time[s] 0.072537 +Converged at iteration 23, L1 9.68661e-05, Linf 0.00534255, total time[s] 0.062046 +Converged at iteration 21, L1 5.29361e-05, Linf 0.00270466, total time[s] 0.056653 +Converged at iteration 19, L1 9.81088e-05, Linf 0.00332952, total time[s] 0.053291 +Converged at iteration 31, L1 8.91149e-05, Linf 0.0132604, total time[s] 0.085235 +Converged at iteration 22, L1 6.7532e-05, Linf 0.00351929, total time[s] 0.058364 +Converged at iteration 24, L1 5.65276e-05, Linf 0.00430551, total time[s] 0.063594 +Converged at iteration 27, L1 5.97013e-05, Linf 0.00332253, total time[s] 0.071392 +Converged at iteration 24, L1 5.9136e-05, Linf 0.00428382, total time[s] 0.064484 +Converged at iteration 23, L1 9.29539e-05, Linf 0.00494041, total time[s] 0.061653 +Converged at iteration 25, L1 9.13683e-05, Linf 0.00552281, total time[s] 0.066129 +Converged at iteration 26, L1 5.86277e-05, Linf 0.00410097, total time[s] 0.067767 +Converged at iteration 27, L1 8.06061e-05, Linf 0.00643247, total time[s] 0.089912 +Converged at iteration 32, L1 6.55781e-05, Linf 0.00351675, total time[s] 0.088463 +Converged at iteration 26, L1 8.17595e-05, Linf 0.00226774, total time[s] 0.067293 +Converged at iteration 31, L1 7.52434e-05, Linf 0.00924244, total time[s] 0.078651 +Converged at iteration 31, L1 5.8724e-05, Linf 0.00241586, total time[s] 0.080659 +Converged at iteration 32, L1 6.88306e-05, Linf 0.00320773, total time[s] 0.082687 +Converged at iteration 30, L1 8.59846e-05, Linf 0.00342303, total time[s] 0.077439 +Converged at iteration 31, L1 8.69697e-05, Linf 0.0172539, total time[s] 0.07992 +Converged at iteration 29, L1 8.83216e-05, Linf 0.0178603, total time[s] 0.077418 +Converged at iteration 25, L1 5.71676e-05, Linf 0.00241716, total time[s] 0.066494 +Converged at iteration 37, L1 6.49398e-05, Linf 0.00889287, total time[s] 0.102975 +Converged at iteration 35, L1 3.69008e-05, Linf 0.00439208, total time[s] 0.144648 +Converged at iteration 25, L1 6.49583e-05, Linf 0.00375337, total time[s] 0.068994 +Converged at iteration 25, L1 4.88193e-05, Linf 0.00886072, total time[s] 0.067984 +Converged at iteration 26, L1 4.96518e-05, Linf 0.0147968, total time[s] 0.068972 +Converged at iteration 26, L1 4.79773e-05, Linf 0.0161031, total time[s] 0.068684 +Converged at iteration 21, L1 4.22046e-05, Linf 0.00736382, total time[s] 0.056518 +Converged at iteration 19, L1 8.21094e-05, Linf 0.00332987, total time[s] 0.052192 +Converged at iteration 24, L1 5.78834e-05, Linf 0.00352114, total time[s] 0.06473 +Converged at iteration 24, L1 5.82793e-05, Linf 0.00197766, total time[s] 0.064311 +Converged at iteration 21, L1 5.65911e-05, Linf 0.00287047, total time[s] 0.057018 +Converged at iteration 20, L1 4.80679e-05, Linf 0.0019522, total time[s] 0.054487 +Converged at iteration 31, L1 9.13656e-05, Linf 0.0137312, total time[s] 0.08096 +Converged at iteration 22, L1 6.79438e-05, Linf 0.003598, total time[s] 0.059329 +Converged at iteration 24, L1 5.78231e-05, Linf 0.00443859, total time[s] 0.066876 +Converged at iteration 27, L1 5.62015e-05, Linf 0.00319513, total time[s] 0.071416 +Converged at iteration 24, L1 6.09203e-05, Linf 0.00458972, total time[s] 0.06411 +Converged at iteration 23, L1 9.59275e-05, Linf 0.00499182, total time[s] 0.063477 +Converged at iteration 25, L1 9.80863e-05, Linf 0.0057703, total time[s] 0.072801 +Converged at iteration 26, L1 6.58974e-05, Linf 0.00434787, total time[s] 0.0678 +Converged at iteration 27, L1 8.01194e-05, Linf 0.00588651, total time[s] 0.07291 +Converged at iteration 32, L1 6.52186e-05, Linf 0.00367541, total time[s] 0.081904 +Converged at iteration 26, L1 7.60961e-05, Linf 0.00241168, total time[s] 0.067827 +Converged at iteration 31, L1 7.60883e-05, Linf 0.00942556, total time[s] 0.079925 +Converged at iteration 31, L1 5.81061e-05, Linf 0.00241658, total time[s] 0.079607 +Converged at iteration 32, L1 7.25693e-05, Linf 0.00332822, total time[s] 0.08206 +Converged at iteration 30, L1 9.08284e-05, Linf 0.00373493, total time[s] 0.087398 +Converged at iteration 31, L1 9.78513e-05, Linf 0.0185357, total time[s] 0.080655 +Converged at iteration 29, L1 9.06118e-05, Linf 0.0184267, total time[s] 0.076558 +Converged at iteration 25, L1 5.78722e-05, Linf 0.00231109, total time[s] 0.069039 +Converged at iteration 37, L1 6.65826e-05, Linf 0.00908786, total time[s] 0.105522 +Converged at iteration 35, L1 3.81343e-05, Linf 0.00447796, total time[s] 0.096724 +Converged at iteration 25, L1 6.43616e-05, Linf 0.00373753, total time[s] 0.079037 +Converged at iteration 25, L1 4.90786e-05, Linf 0.00863496, total time[s] 0.069795 +Converged at iteration 26, L1 4.61333e-05, Linf 0.0142007, total time[s] 0.068172 +Converged at iteration 26, L1 4.71817e-05, Linf 0.0159143, total time[s] 0.082221 +Converged at iteration 21, L1 4.24936e-05, Linf 0.00739214, total time[s] 0.058382 +Converged at iteration 19, L1 7.93989e-05, Linf 0.0033359, total time[s] 0.055304 +Converged at iteration 24, L1 5.73481e-05, Linf 0.00235031, total time[s] 0.068771 +Converged at iteration 24, L1 5.96898e-05, Linf 0.00207087, total time[s] 0.063489 +Converged at iteration 21, L1 5.81379e-05, Linf 0.00293908, total time[s] 0.059957 +Converged at iteration 20, L1 4.94634e-05, Linf 0.00202216, total time[s] 0.056355 +Converged at iteration 31, L1 9.23501e-05, Linf 0.013872, total time[s] 0.086011 +Converged at iteration 22, L1 6.40245e-05, Linf 0.00362704, total time[s] 0.059708 +Converged at iteration 24, L1 5.82202e-05, Linf 0.00445961, total time[s] 0.064576 +Converged at iteration 27, L1 5.61324e-05, Linf 0.0031736, total time[s] 0.07141 +Converged at iteration 24, L1 6.17062e-05, Linf 0.00477471, total time[s] 0.068635 +Converged at iteration 23, L1 9.69203e-05, Linf 0.00499906, total time[s] 0.069782 +Converged at iteration 25, L1 9.96978e-05, Linf 0.00585831, total time[s] 0.066734 +Converged at iteration 26, L1 6.85909e-05, Linf 0.00443967, total time[s] 0.08016 +Converged at iteration 27, L1 8.0233e-05, Linf 0.00610666, total time[s] 0.072018 +Converged at iteration 32, L1 6.53518e-05, Linf 0.00376978, total time[s] 0.083862 +Converged at iteration 26, L1 7.43251e-05, Linf 0.00245148, total time[s] 0.069646 +Converged at iteration 31, L1 7.70745e-05, Linf 0.00942593, total time[s] 0.086043 +Converged at iteration 31, L1 5.95329e-05, Linf 0.00239855, total time[s] 0.086929 +Converged at iteration 32, L1 7.4204e-05, Linf 0.00339766, total time[s] 0.093001 +Converged at iteration 30, L1 8.87703e-05, Linf 0.00389381, total time[s] 0.079616 +Converged at iteration 32, L1 3.65412e-05, Linf 0.0083649, total time[s] 0.081057 +Converged at iteration 29, L1 9.08874e-05, Linf 0.0185743, total time[s] 0.073173 +Converged at iteration 25, L1 5.76656e-05, Linf 0.00237026, total time[s] 0.066779 +Converged at iteration 37, L1 7.02251e-05, Linf 0.00958262, total time[s] 0.095774 +Converged at iteration 35, L1 4.20887e-05, Linf 0.00492132, total time[s] 0.094382 +Converged at iteration 25, L1 6.43323e-05, Linf 0.00375358, total time[s] 0.064699 +Converged at iteration 25, L1 5.34797e-05, Linf 0.00836825, total time[s] 0.0674 +Converged at iteration 26, L1 4.56637e-05, Linf 0.0127474, total time[s] 0.066317 +Converged at iteration 26, L1 4.62199e-05, Linf 0.0154832, total time[s] 0.067476 +Converged at iteration 21, L1 4.35108e-05, Linf 0.00740563, total time[s] 0.058144 +Converged at iteration 19, L1 7.51567e-05, Linf 0.00313118, total time[s] 0.050493 +Converged at iteration 24, L1 5.64807e-05, Linf 0.00222774, total time[s] 0.065285 +Converged at iteration 24, L1 6.37192e-05, Linf 0.00350666, total time[s] 0.072281 +Converged at iteration 21, L1 6.1642e-05, Linf 0.00308646, total time[s] 0.069259 +Converged at iteration 20, L1 5.31221e-05, Linf 0.00220395, total time[s] 0.088704 +Converged at iteration 31, L1 9.61247e-05, Linf 0.0142969, total time[s] 0.08394 +Converged at iteration 22, L1 6.41411e-05, Linf 0.00370354, total time[s] 0.070265 +Converged at iteration 24, L1 5.89186e-05, Linf 0.00457312, total time[s] 0.065081 +Converged at iteration 27, L1 5.33198e-05, Linf 0.00304553, total time[s] 0.078192 +Converged at iteration 24, L1 6.28077e-05, Linf 0.00505745, total time[s] 0.071833 +Converged at iteration 23, L1 9.87662e-05, Linf 0.00504396, total time[s] 0.065131 +Converged at iteration 26, L1 4.95279e-05, Linf 0.00345645, total time[s] 0.069419 +Converged at iteration 26, L1 7.67311e-05, Linf 0.00473963, total time[s] 0.066289 +Converged at iteration 27, L1 8.19788e-05, Linf 0.0068297, total time[s] 0.073701 +Converged at iteration 32, L1 6.59972e-05, Linf 0.00389801, total time[s] 0.088789 +Converged at iteration 26, L1 7.10896e-05, Linf 0.00257162, total time[s] 0.08667 +Converged at iteration 31, L1 7.72503e-05, Linf 0.00952739, total time[s] 0.092568 +Converged at iteration 31, L1 5.85945e-05, Linf 0.00245952, total time[s] 0.093985 +Converged at iteration 32, L1 7.73953e-05, Linf 0.00349744, total time[s] 0.082414 +Converged at iteration 30, L1 8.50573e-05, Linf 0.00409518, total time[s] 0.076193 +Converged at iteration 32, L1 3.94474e-05, Linf 0.00911246, total time[s] 0.08186 +Converged at iteration 29, L1 9.54782e-05, Linf 0.0191046, total time[s] 0.075168 +Converged at iteration 25, L1 5.86905e-05, Linf 0.00293727, total time[s] 0.065514 +Converged at iteration 37, L1 7.15558e-05, Linf 0.00978298, total time[s] 0.098468 +Converged at iteration 35, L1 4.33497e-05, Linf 0.0050916, total time[s] 0.092269 +Converged at iteration 25, L1 6.46351e-05, Linf 0.00375592, total time[s] 0.0658 +Converged at iteration 25, L1 5.39027e-05, Linf 0.00817801, total time[s] 0.065192 +Converged at iteration 26, L1 3.73793e-05, Linf 0.0120745, total time[s] 0.068291 +Converged at iteration 26, L1 4.56095e-05, Linf 0.015168, total time[s] 0.067683 +Converged at iteration 21, L1 4.38792e-05, Linf 0.00742763, total time[s] 0.056173 +Converged at iteration 19, L1 7.30836e-05, Linf 0.00312581, total time[s] 0.051526 +Converged at iteration 24, L1 5.60128e-05, Linf 0.00222592, total time[s] 0.072488 +Converged at iteration 24, L1 6.25113e-05, Linf 0.00225051, total time[s] 0.071971 +Converged at iteration 21, L1 6.2954e-05, Linf 0.00316774, total time[s] 0.072501 +Converged at iteration 20, L1 5.45164e-05, Linf 0.00227993, total time[s] 0.053069 +Converged at iteration 31, L1 9.68678e-05, Linf 0.0144153, total time[s] 0.079777 +Converged at iteration 22, L1 6.48959e-05, Linf 0.00372432, total time[s] 0.058286 +Converged at iteration 24, L1 5.87809e-05, Linf 0.00506638, total time[s] 0.063173 +Converged at iteration 27, L1 5.33739e-05, Linf 0.00302539, total time[s] 0.070098 +Converged at iteration 24, L1 6.27107e-05, Linf 0.00510819, total time[s] 0.063664 +Converged at iteration 23, L1 9.89373e-05, Linf 0.00504339, total time[s] 0.060624 +Converged at iteration 26, L1 5.03229e-05, Linf 0.00349666, total time[s] 0.068899 +Converged at iteration 26, L1 7.97405e-05, Linf 0.00484906, total time[s] 0.067602 +Converged at iteration 27, L1 8.27836e-05, Linf 0.00641996, total time[s] 0.075494 +Converged at iteration 32, L1 6.66736e-05, Linf 0.00396507, total time[s] 0.088926 +Converged at iteration 26, L1 7.0439e-05, Linf 0.00262712, total time[s] 0.067493 +Converged at iteration 31, L1 7.72932e-05, Linf 0.00959327, total time[s] 0.087607 +Converged at iteration 31, L1 5.87436e-05, Linf 0.00243585, total time[s] 0.086229 +Converged at iteration 32, L1 7.85715e-05, Linf 0.00354658, total time[s] 0.089421 +Converged at iteration 30, L1 8.42196e-05, Linf 0.00430058, total time[s] 0.092948 +Converged at iteration 32, L1 4.08623e-05, Linf 0.00940747, total time[s] 0.082169 +Converged at iteration 29, L1 9.33754e-05, Linf 0.0192236, total time[s] 0.081292 +Converged at iteration 25, L1 5.86336e-05, Linf 0.00282155, total time[s] 0.066757 +Converged at iteration 37, L1 7.53493e-05, Linf 0.0103196, total time[s] 0.096622 +Converged at iteration 35, L1 4.74046e-05, Linf 0.00561095, total time[s] 0.09045 +Converged at iteration 25, L1 6.66149e-05, Linf 0.0037729, total time[s] 0.082851 +Converged at iteration 25, L1 5.89586e-05, Linf 0.0079422, total time[s] 0.078863 +Converged at iteration 25, L1 9.90479e-05, Linf 0.0214703, total time[s] 0.074651 +Converged at iteration 26, L1 4.50431e-05, Linf 0.0149643, total time[s] 0.069235 +Converged at iteration 21, L1 4.6342e-05, Linf 0.00744114, total time[s] 0.056343 +Converged at iteration 19, L1 6.88615e-05, Linf 0.00294437, total time[s] 0.051551 +Converged at iteration 24, L1 5.71872e-05, Linf 0.00286342, total time[s] 0.06244 +Converged at iteration 24, L1 6.55752e-05, Linf 0.00241637, total time[s] 0.069337 +Converged at iteration 21, L1 6.70591e-05, Linf 0.00332436, total time[s] 0.065251 +Converged at iteration 20, L1 5.83461e-05, Linf 0.00248724, total time[s] 0.052712 +Converged at iteration 32, L1 3.90143e-05, Linf 0.00861708, total time[s] 0.090356 +Converged at iteration 22, L1 6.57863e-05, Linf 0.00373266, total time[s] 0.058398 +Converged at iteration 24, L1 5.77602e-05, Linf 0.00472455, total time[s] 0.063014 +Converged at iteration 27, L1 5.3804e-05, Linf 0.0029459, total time[s] 0.070126 +Converged at iteration 24, L1 6.21741e-05, Linf 0.00498607, total time[s] 0.067129 +Converged at iteration 24, L1 5.50872e-05, Linf 0.00321177, total time[s] 0.070848 +Converged at iteration 26, L1 5.46479e-05, Linf 0.00365737, total time[s] 0.069066 +Converged at iteration 26, L1 8.90249e-05, Linf 0.00528073, total time[s] 0.068543 +Converged at iteration 27, L1 8.33837e-05, Linf 0.00645375, total time[s] 0.083787 +Converged at iteration 32, L1 6.839e-05, Linf 0.00403661, total time[s] 0.104552 +Converged at iteration 26, L1 7.12647e-05, Linf 0.00270432, total time[s] 0.075632 +Converged at iteration 31, L1 7.6295e-05, Linf 0.00984624, total time[s] 0.093956 +Converged at iteration 31, L1 5.9319e-05, Linf 0.00244031, total time[s] 0.092048 +Converged at iteration 32, L1 8.49905e-05, Linf 0.00438153, total time[s] 0.123644 +Converged at iteration 30, L1 8.6394e-05, Linf 0.00442681, total time[s] 0.090841 +Converged at iteration 32, L1 4.55547e-05, Linf 0.0102413, total time[s] 0.103999 +Converged at iteration 30, L1 3.58655e-05, Linf 0.00578074, total time[s] 0.094299 +Converged at iteration 25, L1 6.17057e-05, Linf 0.00343579, total time[s] 0.074289 +Converged at iteration 37, L1 7.67107e-05, Linf 0.0102206, total time[s] 0.107554 +Converged at iteration 35, L1 4.86605e-05, Linf 0.00578479, total time[s] 0.137875 +Converged at iteration 25, L1 6.70115e-05, Linf 0.00375797, total time[s] 0.074944 +Converged at iteration 25, L1 5.98176e-05, Linf 0.00776999, total time[s] 0.07253 +Converged at iteration 25, L1 9.44983e-05, Linf 0.0208647, total time[s] 0.070146 +Converged at iteration 26, L1 4.54591e-05, Linf 0.0151695, total time[s] 0.082921 +Converged at iteration 21, L1 4.6723e-05, Linf 0.00746164, total time[s] 0.075222 +Converged at iteration 19, L1 6.60207e-05, Linf 0.00295304, total time[s] 0.07184 +Converged at iteration 24, L1 5.56751e-05, Linf 0.00278094, total time[s] 0.081234 +Converged at iteration 24, L1 6.76271e-05, Linf 0.00250549, total time[s] 0.072261 +Converged at iteration 21, L1 6.83943e-05, Linf 0.0033839, total time[s] 0.058222 +Converged at iteration 20, L1 5.9755e-05, Linf 0.00256616, total time[s] 0.062884 +Converged at iteration 32, L1 3.95233e-05, Linf 0.00861709, total time[s] 0.087683 +Converged at iteration 22, L1 6.66606e-05, Linf 0.00386698, total time[s] 0.08058 +Converged at iteration 24, L1 5.75047e-05, Linf 0.00469806, total time[s] 0.068199 +Converged at iteration 27, L1 5.34325e-05, Linf 0.002926, total time[s] 0.072103 +Converged at iteration 24, L1 6.15892e-05, Linf 0.0048673, total time[s] 0.064454 +Converged at iteration 24, L1 5.51665e-05, Linf 0.00319964, total time[s] 0.06426 +Converged at iteration 26, L1 5.48129e-05, Linf 0.00370984, total time[s] 0.068522 +Converged at iteration 26, L1 9.22105e-05, Linf 0.00534272, total time[s] 0.071114 +Converged at iteration 27, L1 8.25591e-05, Linf 0.00647073, total time[s] 0.074949 +Converged at iteration 32, L1 6.89312e-05, Linf 0.00425303, total time[s] 0.086135 +Converged at iteration 26, L1 7.19453e-05, Linf 0.00272474, total time[s] 0.076196 +Converged at iteration 31, L1 7.77833e-05, Linf 0.00977793, total time[s] 0.089556 +Converged at iteration 31, L1 5.92712e-05, Linf 0.00245056, total time[s] 0.088198 +Converged at iteration 32, L1 8.31205e-05, Linf 0.00369727, total time[s] 0.100931 +Converged at iteration 30, L1 8.74935e-05, Linf 0.00468646, total time[s] 0.089632 +Converged at iteration 32, L1 4.76769e-05, Linf 0.0107666, total time[s] 0.090462 +Converged at iteration 29, L1 9.57449e-05, Linf 0.0202059, total time[s] 0.095659 +Converged at iteration 25, L1 5.98737e-05, Linf 0.0028614, total time[s] 0.06716 +Converged at iteration 37, L1 7.98629e-05, Linf 0.0104819, total time[s] 0.096993 +Converged at iteration 35, L1 5.28859e-05, Linf 0.00633295, total time[s] 0.1009 +Converged at iteration 25, L1 7.02084e-05, Linf 0.00367732, total time[s] 0.068786 +Converged at iteration 25, L1 6.45755e-05, Linf 0.00750962, total time[s] 0.065652 +Converged at iteration 25, L1 8.40025e-05, Linf 0.0193332, total time[s] 0.067816 +Converged at iteration 26, L1 4.52224e-05, Linf 0.0145164, total time[s] 0.074397 +Converged at iteration 21, L1 4.8498e-05, Linf 0.00741122, total time[s] 0.06097 +Converged at iteration 19, L1 6.14408e-05, Linf 0.00340667, total time[s] 0.071414 +Converged at iteration 24, L1 5.47477e-05, Linf 0.00241373, total time[s] 0.072557 +Converged at iteration 24, L1 6.86207e-05, Linf 0.00270775, total time[s] 0.066232 +Converged at iteration 21, L1 7.21085e-05, Linf 0.00353268, total time[s] 0.05739 +Converged at iteration 20, L1 6.42314e-05, Linf 0.00277855, total time[s] 0.059417 +Converged at iteration 32, L1 4.04874e-05, Linf 0.00866196, total time[s] 0.082371 +Converged at iteration 22, L1 7.08809e-05, Linf 0.00396742, total time[s] 0.059212 +Converged at iteration 24, L1 5.99979e-05, Linf 0.00481677, total time[s] 0.065422 +Converged at iteration 27, L1 5.11408e-05, Linf 0.00281116, total time[s] 0.069116 +Converged at iteration 24, L1 6.12811e-05, Linf 0.00460456, total time[s] 0.064461 +Converged at iteration 24, L1 5.62853e-05, Linf 0.00321469, total time[s] 0.067389 +Converged at iteration 26, L1 5.72678e-05, Linf 0.00388499, total time[s] 0.080762 +Converged at iteration 27, L1 5.46711e-05, Linf 0.00352611, total time[s] 0.080255 +Converged at iteration 27, L1 8.51138e-05, Linf 0.00649779, total time[s] 0.086746 +Converged at iteration 32, L1 7.0691e-05, Linf 0.00428036, total time[s] 0.081156 +Converged at iteration 26, L1 7.72881e-05, Linf 0.00283171, total time[s] 0.065667 +Converged at iteration 31, L1 7.86424e-05, Linf 0.00995529, total time[s] 0.097764 +Converged at iteration 31, L1 5.84847e-05, Linf 0.00246299, total time[s] 0.090502 +Converged at iteration 32, L1 8.56997e-05, Linf 0.00380464, total time[s] 0.082728 +Converged at iteration 30, L1 9.23016e-05, Linf 0.0048154, total time[s] 0.074483 +Converged at iteration 32, L1 5.17771e-05, Linf 0.0117344, total time[s] 0.078183 +Converged at iteration 29, L1 9.68053e-05, Linf 0.0188623, total time[s] 0.071353 +Converged at iteration 25, L1 6.09313e-05, Linf 0.00287745, total time[s] 0.062571 +Converged at iteration 37, L1 8.15141e-05, Linf 0.0106647, total time[s] 0.090866 +Converged at iteration 35, L1 5.40047e-05, Linf 0.00651456, total time[s] 0.08746 +Converged at iteration 25, L1 7.06082e-05, Linf 0.00364413, total time[s] 0.061722 +Converged at iteration 25, L1 6.65428e-05, Linf 0.00741199, total time[s] 0.069623 +Converged at iteration 25, L1 8.52579e-05, Linf 0.0185568, total time[s] 0.087771 +Converged at iteration 26, L1 4.67796e-05, Linf 0.015021, total time[s] 0.071969 +Converged at iteration 21, L1 4.86966e-05, Linf 0.00743494, total time[s] 0.060495 +Converged at iteration 19, L1 5.7271e-05, Linf 0.00291455, total time[s] 0.065215 +Converged at iteration 24, L1 5.42238e-05, Linf 0.00223997, total time[s] 0.065471 +Converged at iteration 24, L1 7.07476e-05, Linf 0.00278139, total time[s] 0.064152 +Converged at iteration 21, L1 7.40267e-05, Linf 0.00357689, total time[s] 0.060233 +Converged at iteration 20, L1 6.63236e-05, Linf 0.00291279, total time[s] 0.056318 +Converged at iteration 32, L1 4.0723e-05, Linf 0.0086462, total time[s] 0.088259 +Converged at iteration 22, L1 7.23185e-05, Linf 0.00400587, total time[s] 0.073417 +Converged at iteration 24, L1 5.847e-05, Linf 0.00490448, total time[s] 0.071111 +Converged at iteration 27, L1 4.96107e-05, Linf 0.00279173, total time[s] 0.077988 +Converged at iteration 24, L1 6.10087e-05, Linf 0.00448883, total time[s] 0.103775 +Converged at iteration 24, L1 5.5443e-05, Linf 0.00318955, total time[s] 0.073626 +Converged at iteration 26, L1 5.79741e-05, Linf 0.00394035, total time[s] 0.065402 +Converged at iteration 27, L1 5.59538e-05, Linf 0.0036094, total time[s] 0.06726 +Converged at iteration 27, L1 8.47283e-05, Linf 0.00651296, total time[s] 0.069167 +Converged at iteration 32, L1 7.1707e-05, Linf 0.00446132, total time[s] 0.07915 +Converged at iteration 26, L1 7.94932e-05, Linf 0.00279843, total time[s] 0.066513 +Converged at iteration 31, L1 7.89278e-05, Linf 0.00996231, total time[s] 0.091244 +Converged at iteration 31, L1 5.68322e-05, Linf 0.00245613, total time[s] 0.086734 +Converged at iteration 32, L1 8.67589e-05, Linf 0.00385886, total time[s] 0.08996 +Converged at iteration 30, L1 9.38143e-05, Linf 0.00496967, total time[s] 0.08161 +Converged at iteration 32, L1 5.36468e-05, Linf 0.0118524, total time[s] 0.080334 +Converged at iteration 29, L1 9.64318e-05, Linf 0.0186044, total time[s] 0.073821 +Converged at iteration 25, L1 6.25275e-05, Linf 0.00322657, total time[s] 0.064737 +Converged at iteration 37, L1 8.38651e-05, Linf 0.0112134, total time[s] 0.096855 +Converged at iteration 35, L1 5.90596e-05, Linf 0.00711494, total time[s] 0.091688 +Converged at iteration 25, L1 7.40296e-05, Linf 0.0037044, total time[s] 0.064604 +Converged at iteration 25, L1 7.1414e-05, Linf 0.00721144, total time[s] 0.064253 +Converged at iteration 25, L1 7.12333e-05, Linf 0.0167817, total time[s] 0.064898 +Converged at iteration 26, L1 4.7251e-05, Linf 0.0146027, total time[s] 0.066949 +Converged at iteration 21, L1 4.84066e-05, Linf 0.00767199, total time[s] 0.056582 +Converged at iteration 19, L1 4.97112e-05, Linf 0.00314846, total time[s] 0.073469 +Converged at iteration 24, L1 5.27602e-05, Linf 0.00216541, total time[s] 0.071285 +Converged at iteration 24, L1 7.27378e-05, Linf 0.00292681, total time[s] 0.067136 +Converged at iteration 21, L1 7.80049e-05, Linf 0.00371758, total time[s] 0.057414 +Converged at iteration 20, L1 7.04924e-05, Linf 0.00306499, total time[s] 0.058876 +Converged at iteration 32, L1 4.21874e-05, Linf 0.00856184, total time[s] 0.113318 +Converged at iteration 22, L1 7.27736e-05, Linf 0.00411076, total time[s] 0.070609 +Converged at iteration 24, L1 5.90956e-05, Linf 0.00553615, total time[s] 0.08661 +Converged at iteration 27, L1 4.87128e-05, Linf 0.00266501, total time[s] 0.080398 +Converged at iteration 24, L1 6.08617e-05, Linf 0.00427893, total time[s] 0.072334 +Converged at iteration 24, L1 5.5492e-05, Linf 0.00317996, total time[s] 0.07497 +Converged at iteration 26, L1 6.29912e-05, Linf 0.00412451, total time[s] 0.082833 +Converged at iteration 27, L1 6.38133e-05, Linf 0.00387501, total time[s] 0.070374 +Converged at iteration 27, L1 8.44003e-05, Linf 0.00654704, total time[s] 0.070226 +Converged at iteration 32, L1 7.2658e-05, Linf 0.00466469, total time[s] 0.082167 +Converged at iteration 26, L1 8.99241e-05, Linf 0.00290884, total time[s] 0.06657 +Converged at iteration 31, L1 7.64479e-05, Linf 0.00991009, total time[s] 0.078035 +Converged at iteration 31, L1 5.59068e-05, Linf 0.00241448, total time[s] 0.078046 +Converged at iteration 32, L1 9.17865e-05, Linf 0.00399071, total time[s] 0.080724 +Converged at iteration 30, L1 9.89751e-05, Linf 0.00557255, total time[s] 0.076525 +Converged at iteration 32, L1 5.97602e-05, Linf 0.0131322, total time[s] 0.080751 +Converged at iteration 29, L1 9.83602e-05, Linf 0.0169714, total time[s] 0.075171 +Converged at iteration 25, L1 6.39233e-05, Linf 0.00310577, total time[s] 0.066948 +Converged at iteration 37, L1 8.50315e-05, Linf 0.0114151, total time[s] 0.096627 +Converged at iteration 35, L1 6.06389e-05, Linf 0.00730012, total time[s] 0.100365 +Converged at iteration 25, L1 7.48802e-05, Linf 0.00368207, total time[s] 0.067728 +Converged at iteration 25, L1 7.23518e-05, Linf 0.00705908, total time[s] 0.074375 +Converged at iteration 25, L1 6.87637e-05, Linf 0.0161783, total time[s] 0.085336 +Converged at iteration 26, L1 4.77792e-05, Linf 0.0146102, total time[s] 0.115445 +Converged at iteration 21, L1 4.8417e-05, Linf 0.00778376, total time[s] 0.086208 +Converged at iteration 19, L1 4.63124e-05, Linf 0.00322047, total time[s] 0.073726 +Converged at iteration 23, L1 9.95467e-05, Linf 0.00302952, total time[s] 0.092444 +Converged at iteration 24, L1 7.53271e-05, Linf 0.00335051, total time[s] 0.091401 +Converged at iteration 21, L1 7.86452e-05, Linf 0.00374967, total time[s] 0.070644 +Converged at iteration 20, L1 7.07238e-05, Linf 0.00313962, total time[s] 0.088379 +Converged at iteration 32, L1 4.23684e-05, Linf 0.00864805, total time[s] 0.100034 +Converged at iteration 22, L1 6.9345e-05, Linf 0.00414139, total time[s] 0.067145 +Converged at iteration 24, L1 5.73205e-05, Linf 0.00499516, total time[s] 0.063997 +Converged at iteration 27, L1 4.76352e-05, Linf 0.00263635, total time[s] 0.070961 +Converged at iteration 24, L1 6.03876e-05, Linf 0.0041834, total time[s] 0.063905 +Converged at iteration 24, L1 5.39404e-05, Linf 0.00315847, total time[s] 0.065967 +Converged at iteration 26, L1 6.3869e-05, Linf 0.00419742, total time[s] 0.073074 +Converged at iteration 27, L1 6.48543e-05, Linf 0.00392033, total time[s] 0.074683 +Converged at iteration 27, L1 8.41199e-05, Linf 0.00655812, total time[s] 0.070288 +Converged at iteration 32, L1 7.32493e-05, Linf 0.00468379, total time[s] 0.085446 +Converged at iteration 26, L1 9.3449e-05, Linf 0.00298254, total time[s] 0.067359 +Converged at iteration 31, L1 7.60014e-05, Linf 0.00997704, total time[s] 0.079753 +Converged at iteration 31, L1 5.53309e-05, Linf 0.00245012, total time[s] 0.082043 +Converged at iteration 32, L1 9.37177e-05, Linf 0.00405192, total time[s] 0.081998 +Converged at iteration 31, L1 4.4671e-05, Linf 0.00411271, total time[s] 0.079232 +Converged at iteration 32, L1 6.1917e-05, Linf 0.0132506, total time[s] 0.082061 +Converged at iteration 29, L1 9.61828e-05, Linf 0.0158822, total time[s] 0.074987 +Converged at iteration 25, L1 6.34935e-05, Linf 0.00307032, total time[s] 0.066076 +Converged at iteration 37, L1 8.80668e-05, Linf 0.0111783, total time[s] 0.094591 +Converged at iteration 35, L1 6.52691e-05, Linf 0.00787646, total time[s] 0.123512 +Converged at iteration 25, L1 7.69943e-05, Linf 0.00364195, total time[s] 0.075646 +Converged at iteration 25, L1 7.51303e-05, Linf 0.00681218, total time[s] 0.070241 +Converged at iteration 25, L1 6.29526e-05, Linf 0.0145667, total time[s] 0.099241 +Converged at iteration 26, L1 4.99947e-05, Linf 0.0147948, total time[s] 0.075472 +Converged at iteration 21, L1 4.9322e-05, Linf 0.00761287, total time[s] 0.062043 +Converged at iteration 18, L1 9.75068e-05, Linf 0.00611063, total time[s] 0.062209 +Converged at iteration 23, L1 9.8847e-05, Linf 0.00304856, total time[s] 0.066034 +Converged at iteration 24, L1 7.6752e-05, Linf 0.00302192, total time[s] 0.068465 +Converged at iteration 21, L1 8.16941e-05, Linf 0.00387301, total time[s] 0.08096 +Converged at iteration 20, L1 7.49535e-05, Linf 0.00333166, total time[s] 0.072362 +Converged at iteration 32, L1 4.38737e-05, Linf 0.00867008, total time[s] 0.090395 +Converged at iteration 22, L1 7.06298e-05, Linf 0.00425501, total time[s] 0.069169 +Converged at iteration 24, L1 5.80173e-05, Linf 0.00510468, total time[s] 0.064235 +Converged at iteration 27, L1 4.44428e-05, Linf 0.00248906, total time[s] 0.070682 +Converged at iteration 24, L1 5.8571e-05, Linf 0.00394444, total time[s] 0.064216 +Converged at iteration 23, L1 9.84154e-05, Linf 0.00504563, total time[s] 0.062005 +Converged at iteration 26, L1 6.84044e-05, Linf 0.00436356, total time[s] 0.067812 +Converged at iteration 27, L1 7.20102e-05, Linf 0.00423647, total time[s] 0.07192 +Converged at iteration 27, L1 8.44878e-05, Linf 0.00657424, total time[s] 0.071859 +Converged at iteration 32, L1 7.68508e-05, Linf 0.00477973, total time[s] 0.082407 +Converged at iteration 27, L1 6.64062e-05, Linf 0.00197387, total time[s] 0.070874 +Converged at iteration 31, L1 8.05541e-05, Linf 0.00999543, total time[s] 0.084296 +Converged at iteration 31, L1 5.78295e-05, Linf 0.00245702, total time[s] 0.093669 +Converged at iteration 32, L1 9.81563e-05, Linf 0.004207, total time[s] 0.082856 +Converged at iteration 31, L1 4.58023e-05, Linf 0.00439318, total time[s] 0.082999 +Converged at iteration 32, L1 6.80923e-05, Linf 0.0143305, total time[s] 0.083531 +Converged at iteration 29, L1 9.63867e-05, Linf 0.0156958, total time[s] 0.078725 +Converged at iteration 25, L1 6.39853e-05, Linf 0.0031562, total time[s] 0.071246 +Converged at iteration 37, L1 8.92491e-05, Linf 0.0113682, total time[s] 0.099631 +Converged at iteration 35, L1 6.69039e-05, Linf 0.00807586, total time[s] 0.09779 +Converged at iteration 25, L1 7.71972e-05, Linf 0.0036276, total time[s] 0.068016 +Converged at iteration 25, L1 7.54615e-05, Linf 0.00666957, total time[s] 0.067073 +Converged at iteration 25, L1 6.15665e-05, Linf 0.0140265, total time[s] 0.067376 +Converged at iteration 26, L1 5.07395e-05, Linf 0.0147144, total time[s] 0.071185 +Converged at iteration 21, L1 4.90952e-05, Linf 0.00763331, total time[s] 0.070861 +Converged at iteration 18, L1 9.48071e-05, Linf 0.00611702, total time[s] 0.05446 +Converged at iteration 23, L1 9.83897e-05, Linf 0.00307318, total time[s] 0.078002 +Converged at iteration 24, L1 7.62255e-05, Linf 0.00305278, total time[s] 0.072407 +Converged at iteration 21, L1 8.29947e-05, Linf 0.0039405, total time[s] 0.070448 +Converged at iteration 20, L1 7.6423e-05, Linf 0.00340941, total time[s] 0.063203 +Converged at iteration 32, L1 4.46628e-05, Linf 0.00866599, total time[s] 0.124146 +Converged at iteration 22, L1 7.28468e-05, Linf 0.00429134, total time[s] 0.062325 +Converged at iteration 24, L1 5.77732e-05, Linf 0.00501887, total time[s] 0.065924 +Converged at iteration 27, L1 4.51741e-05, Linf 0.00245237, total time[s] 0.075828 +Converged at iteration 24, L1 5.77165e-05, Linf 0.00389323, total time[s] 0.071593 +Converged at iteration 23, L1 9.72903e-05, Linf 0.00499489, total time[s] 0.077009 +Converged at iteration 26, L1 6.94257e-05, Linf 0.00442161, total time[s] 0.071152 +Converged at iteration 27, L1 7.46993e-05, Linf 0.00433054, total time[s] 0.077105 +Converged at iteration 27, L1 8.47108e-05, Linf 0.006581, total time[s] 0.072552 +Converged at iteration 32, L1 7.90842e-05, Linf 0.00481784, total time[s] 0.083285 +Converged at iteration 27, L1 6.83636e-05, Linf 0.00199564, total time[s] 0.070668 +Converged at iteration 31, L1 7.74761e-05, Linf 0.0100666, total time[s] 0.08051 +Converged at iteration 31, L1 5.9527e-05, Linf 0.00244988, total time[s] 0.101864 +Converged at iteration 32, L1 9.98099e-05, Linf 0.00427066, total time[s] 0.104367 +Converged at iteration 31, L1 4.64282e-05, Linf 0.00449127, total time[s] 0.101277 +Converged at iteration 32, L1 7.04351e-05, Linf 0.0145491, total time[s] 0.086287 +Converged at iteration 29, L1 9.62316e-05, Linf 0.0154468, total time[s] 0.077248 +Converged at iteration 25, L1 6.42419e-05, Linf 0.00319369, total time[s] 0.067004 +Converged at iteration 37, L1 9.22114e-05, Linf 0.011885, total time[s] 0.096243 +Converged at iteration 35, L1 7.1604e-05, Linf 0.00866909, total time[s] 0.089953 +Converged at iteration 25, L1 7.83053e-05, Linf 0.00359425, total time[s] 0.065488 +Converged at iteration 25, L1 7.80936e-05, Linf 0.00652664, total time[s] 0.068756 +Converged at iteration 25, L1 5.80774e-05, Linf 0.0126545, total time[s] 0.065332 +Converged at iteration 26, L1 5.35171e-05, Linf 0.0152104, total time[s] 0.06818 +Converged at iteration 21, L1 4.9527e-05, Linf 0.00766937, total time[s] 0.057539 +Converged at iteration 18, L1 9.02564e-05, Linf 0.00646958, total time[s] 0.049117 +Converged at iteration 23, L1 9.78609e-05, Linf 0.0031828, total time[s] 0.067349 +Converged at iteration 24, L1 7.83132e-05, Linf 0.00309883, total time[s] 0.065502 +Converged at iteration 21, L1 8.55543e-05, Linf 0.00397028, total time[s] 0.056026 +Converged at iteration 20, L1 8.01879e-05, Linf 0.00358929, total time[s] 0.059296 +Converged at iteration 32, L1 4.64381e-05, Linf 0.00861343, total time[s] 0.109682 +Converged at iteration 22, L1 7.34664e-05, Linf 0.00442329, total time[s] 0.064009 +Converged at iteration 24, L1 5.81206e-05, Linf 0.00538065, total time[s] 0.063465 +Converged at iteration 26, L1 9.54289e-05, Linf 0.00516721, total time[s] 0.070596 +Converged at iteration 24, L1 5.56602e-05, Linf 0.0039048, total time[s] 0.062517 +Converged at iteration 23, L1 9.51033e-05, Linf 0.00490783, total time[s] 0.060674 +Converged at iteration 26, L1 7.29327e-05, Linf 0.00460643, total time[s] 0.076228 +Converged at iteration 27, L1 7.83224e-05, Linf 0.00462633, total time[s] 0.072002 +Converged at iteration 27, L1 8.57452e-05, Linf 0.00658305, total time[s] 0.07712 +Converged at iteration 32, L1 8.12776e-05, Linf 0.00496075, total time[s] 0.101611 +Converged at iteration 27, L1 7.58512e-05, Linf 0.00207294, total time[s] 0.080492 +Converged at iteration 31, L1 7.76962e-05, Linf 0.0101578, total time[s] 0.127422 +Converged at iteration 31, L1 5.64627e-05, Linf 0.00242685, total time[s] 0.091619 +Converged at iteration 33, L1 4.83746e-05, Linf 0.00221173, total time[s] 0.10914 +Converged at iteration 31, L1 4.82747e-05, Linf 0.00478228, total time[s] 0.107805 +Converged at iteration 32, L1 7.77034e-05, Linf 0.0161565, total time[s] 0.092532 +Converged at iteration 29, L1 9.76262e-05, Linf 0.0158307, total time[s] 0.083241 +Converged at iteration 25, L1 6.54505e-05, Linf 0.00323465, total time[s] 0.070663 +Converged at iteration 37, L1 9.36621e-05, Linf 0.0118424, total time[s] 0.119346 +Converged at iteration 35, L1 7.33692e-05, Linf 0.00886804, total time[s] 0.100263 +Converged at iteration 25, L1 7.82375e-05, Linf 0.00356996, total time[s] 0.065542 +Converged at iteration 25, L1 7.8797e-05, Linf 0.00643531, total time[s] 0.065361 +Converged at iteration 25, L1 5.73301e-05, Linf 0.0122039, total time[s] 0.064148 +Converged at iteration 26, L1 5.53031e-05, Linf 0.0151648, total time[s] 0.075623 +Converged at iteration 21, L1 4.91761e-05, Linf 0.00768787, total time[s] 0.06052 +Converged at iteration 18, L1 9.20094e-05, Linf 0.00656486, total time[s] 0.056758 +Converged at iteration 23, L1 9.59434e-05, Linf 0.00313755, total time[s] 0.067502 +Converged at iteration 24, L1 7.92052e-05, Linf 0.00311822, total time[s] 0.069628 +Converged at iteration 21, L1 8.65758e-05, Linf 0.00402585, total time[s] 0.059794 +Converged at iteration 20, L1 8.15164e-05, Linf 0.00365283, total time[s] 0.05587 +Converged at iteration 32, L1 4.67755e-05, Linf 0.00867878, total time[s] 0.084894 +Converged at iteration 22, L1 7.33648e-05, Linf 0.0043886, total time[s] 0.059998 +Converged at iteration 24, L1 5.81152e-05, Linf 0.00594331, total time[s] 0.065265 +Converged at iteration 26, L1 9.48449e-05, Linf 0.00510954, total time[s] 0.07038 +Converged at iteration 24, L1 5.55024e-05, Linf 0.00387559, total time[s] 0.071729 +Converged at iteration 23, L1 9.4333e-05, Linf 0.00485064, total time[s] 0.067417 +Converged at iteration 26, L1 7.47798e-05, Linf 0.0046663, total time[s] 0.071483 +Converged at iteration 27, L1 8.13722e-05, Linf 0.0047314, total time[s] 0.072696 +Converged at iteration 27, L1 8.60086e-05, Linf 0.00658571, total time[s] 0.071798 +Converged at iteration 32, L1 8.13924e-05, Linf 0.00500838, total time[s] 0.083985 +Converged at iteration 27, L1 7.77438e-05, Linf 0.00214515, total time[s] 0.071842 +Converged at iteration 31, L1 7.66921e-05, Linf 0.0101573, total time[s] 0.081158 +Converged at iteration 31, L1 5.60704e-05, Linf 0.00241626, total time[s] 0.08049 +Converged at iteration 33, L1 4.54541e-05, Linf 0.00225738, total time[s] 0.085426 +Converged at iteration 31, L1 4.88315e-05, Linf 0.00488104, total time[s] 0.083946 +Converged at iteration 32, L1 7.93111e-05, Linf 0.0162625, total time[s] 0.083413 +Converged at iteration 29, L1 9.8341e-05, Linf 0.0160481, total time[s] 0.077145 +Converged at iteration 25, L1 6.56036e-05, Linf 0.00321138, total time[s] 0.070514 +Converged at iteration 37, L1 9.67715e-05, Linf 0.0123068, total time[s] 0.104288 +Converged at iteration 35, L1 7.80822e-05, Linf 0.00949835, total time[s] 0.095211 +Converged at iteration 25, L1 7.8598e-05, Linf 0.00349559, total time[s] 0.068379 +Converged at iteration 25, L1 8.07895e-05, Linf 0.00633095, total time[s] 0.068398 +Converged at iteration 25, L1 5.47006e-05, Linf 0.0110622, total time[s] 0.068295 +Converged at iteration 26, L1 5.83983e-05, Linf 0.0158268, total time[s] 0.32212 +Converged at iteration 21, L1 4.9264e-05, Linf 0.00771188, total time[s] 0.102698 +Converged at iteration 19, L1 4.35121e-05, Linf 0.00395225, total time[s] 0.060346 +Converged at iteration 23, L1 9.48263e-05, Linf 0.00322435, total time[s] 0.064317 +Converged at iteration 24, L1 8.11765e-05, Linf 0.00320303, total time[s] 0.097098 +Converged at iteration 21, L1 8.93547e-05, Linf 0.00415916, total time[s] 0.095237 +Converged at iteration 20, L1 8.55376e-05, Linf 0.00380368, total time[s] 0.091529 +Converged at iteration 32, L1 4.865e-05, Linf 0.00868157, total time[s] 0.093998 +Converged at iteration 22, L1 7.53709e-05, Linf 0.00462827, total time[s] 0.063236 +Converged at iteration 24, L1 5.89029e-05, Linf 0.00490854, total time[s] 0.069753 +Converged at iteration 26, L1 9.33864e-05, Linf 0.00486502, total time[s] 0.080771 +Converged at iteration 24, L1 5.31523e-05, Linf 0.0036963, total time[s] 0.06822 +Converged at iteration 23, L1 9.34058e-05, Linf 0.00476901, total time[s] 0.071165 +Converged at iteration 26, L1 7.86887e-05, Linf 0.00486248, total time[s] 0.06843 +Converged at iteration 27, L1 9.12707e-05, Linf 0.00509086, total time[s] 0.070832 +Converged at iteration 27, L1 8.75555e-05, Linf 0.00659119, total time[s] 0.072537 +Converged at iteration 32, L1 8.34307e-05, Linf 0.00514989, total time[s] 0.081247 +Converged at iteration 27, L1 8.34438e-05, Linf 0.00214686, total time[s] 0.069061 +Converged at iteration 31, L1 7.74002e-05, Linf 0.010256, total time[s] 0.078357 +Converged at iteration 31, L1 5.69674e-05, Linf 0.00243212, total time[s] 0.078441 +Converged at iteration 33, L1 4.88509e-05, Linf 0.00242741, total time[s] 0.082709 +Converged at iteration 31, L1 5.13356e-05, Linf 0.00520552, total time[s] 0.078379 +Converged at iteration 32, L1 8.64126e-05, Linf 0.0175239, total time[s] 0.081748 +Converged at iteration 29, L1 9.7149e-05, Linf 0.0165077, total time[s] 0.074599 +Converged at iteration 25, L1 6.57344e-05, Linf 0.00311389, total time[s] 0.064518 +Converged at iteration 37, L1 9.81232e-05, Linf 0.0125902, total time[s] 0.094474 +Converged at iteration 35, L1 7.96099e-05, Linf 0.00970034, total time[s] 0.090462 +Converged at iteration 25, L1 7.83266e-05, Linf 0.00346154, total time[s] 0.064564 +Converged at iteration 25, L1 8.08479e-05, Linf 0.00626376, total time[s] 0.064109 +Converged at iteration 25, L1 5.39621e-05, Linf 0.0107246, total time[s] 0.066755 +Converged at iteration 26, L1 5.9549e-05, Linf 0.0160136, total time[s] 0.068568 +Converged at iteration 21, L1 4.82195e-05, Linf 0.00768275, total time[s] 0.058372 +Converged at iteration 19, L1 4.69908e-05, Linf 0.00399132, total time[s] 0.05275 +Converged at iteration 23, L1 9.36282e-05, Linf 0.00322444, total time[s] 0.07215 +Converged at iteration 24, L1 8.29463e-05, Linf 0.00323663, total time[s] 0.091289 +Converged at iteration 21, L1 9.05382e-05, Linf 0.00417813, total time[s] 0.062632 +Converged at iteration 20, L1 8.69852e-05, Linf 0.00385407, total time[s] 0.076312 +Converged at iteration 32, L1 4.91958e-05, Linf 0.00871639, total time[s] 0.104771 +Converged at iteration 22, L1 7.58465e-05, Linf 0.00460513, total time[s] 0.058333 +Converged at iteration 24, L1 5.88255e-05, Linf 0.00406922, total time[s] 0.062408 +Converged at iteration 26, L1 9.32828e-05, Linf 0.00479894, total time[s] 0.071112 +Converged at iteration 24, L1 5.26429e-05, Linf 0.00357928, total time[s] 0.066181 +Converged at iteration 23, L1 9.27927e-05, Linf 0.0047163, total time[s] 0.06135 +Converged at iteration 26, L1 8.07725e-05, Linf 0.0049456, total time[s] 0.068011 +Converged at iteration 27, L1 9.38789e-05, Linf 0.00515738, total time[s] 0.069889 +Converged at iteration 27, L1 8.77532e-05, Linf 0.00659823, total time[s] 0.07387 +Converged at iteration 32, L1 8.39217e-05, Linf 0.00519308, total time[s] 0.098514 +Converged at iteration 27, L1 8.51957e-05, Linf 0.00225505, total time[s] 0.07132 +Converged at iteration 31, L1 7.70996e-05, Linf 0.0102547, total time[s] 0.08247 +Converged at iteration 31, L1 5.89369e-05, Linf 0.00243362, total time[s] 0.081932 +Converged at iteration 33, L1 5.04956e-05, Linf 0.00248583, total time[s] 0.084106 +Converged at iteration 31, L1 5.2249e-05, Linf 0.00531511, total time[s] 0.078992 +Converged at iteration 32, L1 8.90716e-05, Linf 0.01797, total time[s] 0.081682 +Converged at iteration 29, L1 9.6867e-05, Linf 0.0166153, total time[s] 0.075866 +Converged at iteration 25, L1 6.61104e-05, Linf 0.00310719, total time[s] 0.065309 +Converged at iteration 38, L1 3.20075e-05, Linf 0.00705835, total time[s] 0.099891 +Converged at iteration 35, L1 8.44887e-05, Linf 0.0103088, total time[s] 0.094652 +Converged at iteration 25, L1 7.84985e-05, Linf 0.00338801, total time[s] 0.06542 +Converged at iteration 25, L1 8.42287e-05, Linf 0.00619854, total time[s] 0.066198 +Converged at iteration 25, L1 5.26091e-05, Linf 0.00989684, total time[s] 0.066887 +Converged at iteration 26, L1 6.3309e-05, Linf 0.0166317, total time[s] 0.067525 +Converged at iteration 21, L1 4.6594e-05, Linf 0.00772091, total time[s] 0.055924 +Converged at iteration 19, L1 5.30428e-05, Linf 0.00418728, total time[s] 0.051566 +Converged at iteration 23, L1 9.25819e-05, Linf 0.00314798, total time[s] 0.072313 +Converged at iteration 24, L1 8.52807e-05, Linf 0.00328757, total time[s] 0.083694 +Converged at iteration 21, L1 9.33339e-05, Linf 0.0042798, total time[s] 0.05903 +Converged at iteration 20, L1 9.13578e-05, Linf 0.00403175, total time[s] 0.0659 +Converged at iteration 32, L1 5.21138e-05, Linf 0.00873889, total time[s] 0.098652 +Converged at iteration 22, L1 8.0452e-05, Linf 0.00483491, total time[s] 0.072236 +Converged at iteration 24, L1 5.97132e-05, Linf 0.00485408, total time[s] 0.066243 +Converged at iteration 26, L1 9.17973e-05, Linf 0.00466451, total time[s] 0.069528 +Converged at iteration 24, L1 5.13884e-05, Linf 0.00328761, total time[s] 0.063904 +Converged at iteration 23, L1 9.26583e-05, Linf 0.00464584, total time[s] 0.062816 +Converged at iteration 26, L1 8.47345e-05, Linf 0.00511624, total time[s] 0.072103 +Converged at iteration 28, L1 5.44261e-05, Linf 0.00327991, total time[s] 0.07536 +Converged at iteration 27, L1 8.94059e-05, Linf 0.00656632, total time[s] 0.069972 +Converged at iteration 32, L1 8.72122e-05, Linf 0.00531767, total time[s] 0.088607 +Converged at iteration 27, L1 9.12928e-05, Linf 0.00230471, total time[s] 0.077526 +Converged at iteration 31, L1 7.7412e-05, Linf 0.0103574, total time[s] 0.07933 +Converged at iteration 31, L1 5.91279e-05, Linf 0.00244109, total time[s] 0.079124 +Converged at iteration 33, L1 5.27731e-05, Linf 0.00264256, total time[s] 0.085123 +Converged at iteration 31, L1 5.57414e-05, Linf 0.0056648, total time[s] 0.082893 +Converged at iteration 32, L1 9.66815e-05, Linf 0.0192816, total time[s] 0.081687 +Converged at iteration 29, L1 9.86671e-05, Linf 0.01687, total time[s] 0.075041 +Converged at iteration 25, L1 6.73492e-05, Linf 0.00310977, total time[s] 0.065467 +Converged at iteration 38, L1 3.21383e-05, Linf 0.00730253, total time[s] 0.098784 +Converged at iteration 35, L1 8.59958e-05, Linf 0.0105324, total time[s] 0.093016 +Converged at iteration 25, L1 7.89031e-05, Linf 0.00335768, total time[s] 0.065765 +Converged at iteration 25, L1 8.484e-05, Linf 0.00613367, total time[s] 0.06544 +Converged at iteration 25, L1 5.2064e-05, Linf 0.00964057, total time[s] 0.065387 +Converged at iteration 26, L1 6.46363e-05, Linf 0.0168607, total time[s] 0.069464 +Converged at iteration 21, L1 4.65023e-05, Linf 0.00775667, total time[s] 0.055845 +Converged at iteration 19, L1 5.6276e-05, Linf 0.00422611, total time[s] 0.051401 +Converged at iteration 23, L1 9.10033e-05, Linf 0.00319086, total time[s] 0.060798 +Converged at iteration 24, L1 8.54139e-05, Linf 0.00328594, total time[s] 0.064141 +Converged at iteration 21, L1 9.39552e-05, Linf 0.00430866, total time[s] 0.057739 +Converged at iteration 20, L1 9.27536e-05, Linf 0.00408166, total time[s] 0.062734 +Converged at iteration 32, L1 5.30679e-05, Linf 0.00870337, total time[s] 0.084242 +Converged at iteration 22, L1 8.85827e-05, Linf 0.0048798, total time[s] 0.060144 +Converged at iteration 24, L1 6.47615e-05, Linf 0.00671268, total time[s] 0.069242 +Converged at iteration 26, L1 9.17886e-05, Linf 0.00463241, total time[s] 0.079347 +Converged at iteration 24, L1 5.04137e-05, Linf 0.00316897, total time[s] 0.067561 +Converged at iteration 23, L1 9.20342e-05, Linf 0.00457817, total time[s] 0.065653 +Converged at iteration 26, L1 8.56796e-05, Linf 0.00517864, total time[s] 0.076098 +Converged at iteration 28, L1 5.5267e-05, Linf 0.00335756, total time[s] 0.081535 +Converged at iteration 27, L1 9.03075e-05, Linf 0.00662935, total time[s] 0.086082 +Converged at iteration 32, L1 8.73975e-05, Linf 0.00536084, total time[s] 0.085092 +Converged at iteration 27, L1 9.39905e-05, Linf 0.00230134, total time[s] 0.087337 +Converged at iteration 31, L1 7.72394e-05, Linf 0.0103586, total time[s] 0.09128 +Converged at iteration 31, L1 5.83006e-05, Linf 0.00243448, total time[s] 0.119446 +Converged at iteration 33, L1 5.38532e-05, Linf 0.00268548, total time[s] 0.096159 +Converged at iteration 31, L1 5.74705e-05, Linf 0.00578648, total time[s] 0.080363 +Converged at iteration 32, L1 9.96679e-05, Linf 0.0197696, total time[s] 0.081469 +Converged at iteration 29, L1 9.64734e-05, Linf 0.0170312, total time[s] 0.076049 +Converged at iteration 25, L1 6.69655e-05, Linf 0.00304455, total time[s] 0.065935 +Converged at iteration 38, L1 3.23479e-05, Linf 0.00743457, total time[s] 0.097191 +Converged at iteration 35, L1 9.04969e-05, Linf 0.0110938, total time[s] 0.126787 +Converged at iteration 25, L1 7.80177e-05, Linf 0.00328108, total time[s] 0.075709 +Converged at iteration 25, L1 8.8175e-05, Linf 0.00609175, total time[s] 0.067037 +Converged at iteration 25, L1 5.12082e-05, Linf 0.00900971, total time[s] 0.066714 +Converged at iteration 26, L1 6.83684e-05, Linf 0.0178926, total time[s] 0.069094 +Converged at iteration 21, L1 4.72083e-05, Linf 0.0077244, total time[s] 0.061341 +Converged at iteration 19, L1 6.32249e-05, Linf 0.00435573, total time[s] 0.051786 +Converged at iteration 23, L1 8.91775e-05, Linf 0.00317709, total time[s] 0.061325 +Converged at iteration 24, L1 8.70894e-05, Linf 0.00327324, total time[s] 0.06555 +Converged at iteration 21, L1 9.59708e-05, Linf 0.00438855, total time[s] 0.056282 +Converged at iteration 20, L1 9.69585e-05, Linf 0.00409233, total time[s] 0.056966 +Converged at iteration 32, L1 5.49477e-05, Linf 0.00873144, total time[s] 0.086858 +Converged at iteration 22, L1 8.33149e-05, Linf 0.00502377, total time[s] 0.058907 +Converged at iteration 24, L1 6.15457e-05, Linf 0.00516168, total time[s] 0.064955 +Converged at iteration 26, L1 9.1185e-05, Linf 0.0045102, total time[s] 0.072768 +Converged at iteration 24, L1 4.9474e-05, Linf 0.00290583, total time[s] 0.08724 +Converged at iteration 23, L1 9.20225e-05, Linf 0.00446101, total time[s] 0.060624 +Converged at iteration 26, L1 8.89781e-05, Linf 0.00534819, total time[s] 0.069518 +Converged at iteration 28, L1 5.9011e-05, Linf 0.00357588, total time[s] 0.072895 +Converged at iteration 27, L1 9.01017e-05, Linf 0.00666743, total time[s] 0.072691 +Converged at iteration 32, L1 8.91709e-05, Linf 0.00545678, total time[s] 0.083513 +Converged at iteration 27, L1 9.84782e-05, Linf 0.00236324, total time[s] 0.073921 +Converged at iteration 31, L1 7.87537e-05, Linf 0.0104504, total time[s] 0.079783 +Converged at iteration 31, L1 5.79289e-05, Linf 0.00242578, total time[s] 0.082996 +Converged at iteration 33, L1 5.67667e-05, Linf 0.00282714, total time[s] 0.08981 +Converged at iteration 31, L1 6.13591e-05, Linf 0.00607844, total time[s] 0.080599 +Converged at iteration 33, L1 4.22441e-05, Linf 0.00864187, total time[s] 0.086208 +Converged at iteration 29, L1 9.85855e-05, Linf 0.0172198, total time[s] 0.076342 +Converged at iteration 25, L1 6.75604e-05, Linf 0.00302257, total time[s] 0.06678 +Converged at iteration 38, L1 3.2428e-05, Linf 0.0075319, total time[s] 0.105781 +Converged at iteration 35, L1 9.22083e-05, Linf 0.011314, total time[s] 0.09053 +Converged at iteration 25, L1 7.70293e-05, Linf 0.0032426, total time[s] 0.06616 +Converged at iteration 25, L1 8.91937e-05, Linf 0.00610539, total time[s] 0.066959 +Converged at iteration 25, L1 5.24966e-05, Linf 0.0088944, total time[s] 0.072576 +Converged at iteration 26, L1 7.05464e-05, Linf 0.0181548, total time[s] 0.090788 +Converged at iteration 21, L1 4.72523e-05, Linf 0.0078559, total time[s] 0.080921 +Converged at iteration 19, L1 6.61268e-05, Linf 0.00442775, total time[s] 0.057392 +Converged at iteration 23, L1 8.82048e-05, Linf 0.00307328, total time[s] 0.071063 +Converged at iteration 24, L1 8.79015e-05, Linf 0.00324835, total time[s] 0.063479 +Converged at iteration 21, L1 9.6873e-05, Linf 0.0044137, total time[s] 0.055919 +Converged at iteration 20, L1 9.8264e-05, Linf 0.00419177, total time[s] 0.055057 +Converged at iteration 32, L1 5.58421e-05, Linf 0.00874029, total time[s] 0.080845 +Converged at iteration 22, L1 8.12819e-05, Linf 0.00507302, total time[s] 0.057813 +Converged at iteration 24, L1 6.26034e-05, Linf 0.00474172, total time[s] 0.064871 +Converged at iteration 26, L1 9.01647e-05, Linf 0.00448747, total time[s] 0.069118 +Converged at iteration 24, L1 4.80725e-05, Linf 0.00280456, total time[s] 0.069028 +Converged at iteration 23, L1 9.11842e-05, Linf 0.00436951, total time[s] 0.069935 +Converged at iteration 26, L1 8.98475e-05, Linf 0.00540813, total time[s] 0.069413 +Converged at iteration 28, L1 6.1422e-05, Linf 0.00365941, total time[s] 0.077388 +Converged at iteration 27, L1 9.06156e-05, Linf 0.00668335, total time[s] 0.0786 +Converged at iteration 32, L1 8.96954e-05, Linf 0.00549843, total time[s] 0.102279 +Converged at iteration 28, L1 5.9023e-05, Linf 0.00174979, total time[s] 0.072038 +Converged at iteration 31, L1 7.84486e-05, Linf 0.0104514, total time[s] 0.084327 +Converged at iteration 31, L1 5.84123e-05, Linf 0.00243463, total time[s] 0.0881 +Converged at iteration 33, L1 5.71617e-05, Linf 0.00286529, total time[s] 0.093123 +Converged at iteration 31, L1 6.20165e-05, Linf 0.00623067, total time[s] 0.079414 +Converged at iteration 33, L1 4.30072e-05, Linf 0.00920752, total time[s] 0.083972 +Converged at iteration 29, L1 9.58385e-05, Linf 0.0172016, total time[s] 0.073558 +Converged at iteration 25, L1 6.80777e-05, Linf 0.00302497, total time[s] 0.06527 +Converged at iteration 38, L1 3.30697e-05, Linf 0.0077636, total time[s] 0.096668 +Converged at iteration 35, L1 9.65354e-05, Linf 0.0118669, total time[s] 0.093914 +Converged at iteration 25, L1 7.68528e-05, Linf 0.00317135, total time[s] 0.066077 +Converged at iteration 25, L1 9.35195e-05, Linf 0.00619262, total time[s] 0.07031 +Converged at iteration 25, L1 5.13451e-05, Linf 0.00839778, total time[s] 0.0757 +Converged at iteration 26, L1 7.44848e-05, Linf 0.0186064, total time[s] 0.099657 +Converged at iteration 21, L1 4.71329e-05, Linf 0.00790133, total time[s] 0.060289 +Converged at iteration 19, L1 6.94007e-05, Linf 0.00459463, total time[s] 0.056763 +Converged at iteration 23, L1 8.79894e-05, Linf 0.00369131, total time[s] 0.062646 +Converged at iteration 24, L1 9.02288e-05, Linf 0.00325728, total time[s] 0.074951 +Converged at iteration 21, L1 9.85266e-05, Linf 0.00443319, total time[s] 0.062491 +Converged at iteration 21, L1 4.82675e-05, Linf 0.00404157, total time[s] 0.062333 +Converged at iteration 32, L1 5.87376e-05, Linf 0.00861979, total time[s] 0.080078 +Converged at iteration 22, L1 9.02277e-05, Linf 0.00522565, total time[s] 0.058243 +Converged at iteration 24, L1 6.36299e-05, Linf 0.00482116, total time[s] 0.068528 +Converged at iteration 26, L1 8.88187e-05, Linf 0.00442374, total time[s] 0.073685 +Converged at iteration 23, L1 9.93943e-05, Linf 0.00422992, total time[s] 0.059993 +Converged at iteration 23, L1 8.97157e-05, Linf 0.00413742, total time[s] 0.061522 +Converged at iteration 26, L1 9.13724e-05, Linf 0.00557812, total time[s] 0.069772 +Converged at iteration 28, L1 6.56697e-05, Linf 0.00389705, total time[s] 0.079803 +Converged at iteration 27, L1 9.22235e-05, Linf 0.0067327, total time[s] 0.086681 +Converged at iteration 32, L1 9.10046e-05, Linf 0.0055719, total time[s] 0.103056 +Converged at iteration 28, L1 6.27101e-05, Linf 0.0018087, total time[s] 0.083044 +Converged at iteration 31, L1 7.8722e-05, Linf 0.0105336, total time[s] 0.082543 +Converged at iteration 31, L1 5.87874e-05, Linf 0.00244868, total time[s] 0.081084 +Converged at iteration 33, L1 5.99411e-05, Linf 0.00299933, total time[s] 0.087087 +Converged at iteration 31, L1 6.67609e-05, Linf 0.00664316, total time[s] 0.080797 +Converged at iteration 33, L1 4.52826e-05, Linf 0.00957058, total time[s] 0.084597 +Converged at iteration 29, L1 9.58608e-05, Linf 0.0173888, total time[s] 0.103847 +Converged at iteration 25, L1 6.81121e-05, Linf 0.00306015, total time[s] 0.08157 +Converged at iteration 38, L1 3.32504e-05, Linf 0.00783754, total time[s] 0.10219 +Converged at iteration 35, L1 9.8231e-05, Linf 0.0120889, total time[s] 0.10379 +Converged at iteration 25, L1 7.63586e-05, Linf 0.0031289, total time[s] 0.072239 +Converged at iteration 25, L1 9.47987e-05, Linf 0.00617056, total time[s] 0.0676 +Converged at iteration 25, L1 4.99532e-05, Linf 0.00833669, total time[s] 0.068418 +Converged at iteration 26, L1 7.61681e-05, Linf 0.018921, total time[s] 0.077194 +Converged at iteration 21, L1 4.7166e-05, Linf 0.00793585, total time[s] 0.0702 +Converged at iteration 19, L1 7.22646e-05, Linf 0.00457256, total time[s] 0.064575 +Converged at iteration 23, L1 8.66803e-05, Linf 0.00280857, total time[s] 0.080203 +Converged at iteration 24, L1 9.05088e-05, Linf 0.00300368, total time[s] 0.069932 +Converged at iteration 21, L1 9.93681e-05, Linf 0.00441462, total time[s] 0.076019 +Converged at iteration 21, L1 4.80432e-05, Linf 0.00224469, total time[s] 0.075071 +Converged at iteration 32, L1 5.94043e-05, Linf 0.00867471, total time[s] 0.09468 +Converged at iteration 22, L1 8.42621e-05, Linf 0.00527281, total time[s] 0.05998 +Converged at iteration 24, L1 6.36767e-05, Linf 0.00483956, total time[s] 0.062541 +Converged at iteration 26, L1 8.86791e-05, Linf 0.00442422, total time[s] 0.071251 +Converged at iteration 23, L1 9.85265e-05, Linf 0.00409359, total time[s] 0.060969 +Converged at iteration 23, L1 8.78063e-05, Linf 0.00400291, total time[s] 0.06188 +Converged at iteration 26, L1 9.17363e-05, Linf 0.00563481, total time[s] 0.068407 +Converged at iteration 28, L1 6.84656e-05, Linf 0.00398811, total time[s] 0.07295 +Converged at iteration 27, L1 9.22766e-05, Linf 0.00675282, total time[s] 0.070494 +Converged at iteration 32, L1 9.11591e-05, Linf 0.00561208, total time[s] 0.082367 +Converged at iteration 28, L1 6.35129e-05, Linf 0.00182833, total time[s] 0.074158 +Converged at iteration 31, L1 7.8338e-05, Linf 0.0105916, total time[s] 0.081329 +Converged at iteration 31, L1 5.88373e-05, Linf 0.00245675, total time[s] 0.08137 +Converged at iteration 33, L1 6.07441e-05, Linf 0.00304434, total time[s] 0.090499 +Converged at iteration 31, L1 7.16144e-05, Linf 0.00678273, total time[s] 0.083524 +Converged at iteration 33, L1 4.64037e-05, Linf 0.00983555, total time[s] 0.08473 +Converged at iteration 29, L1 9.6339e-05, Linf 0.0174003, total time[s] 0.075834 +Converged at iteration 25, L1 6.8151e-05, Linf 0.00308236, total time[s] 0.067414 +Converged at iteration 38, L1 3.36676e-05, Linf 0.00801228, total time[s] 0.101938 +Converged at iteration 36, L1 3.46981e-05, Linf 0.0064726, total time[s] 0.098122 +Converged at iteration 25, L1 7.68368e-05, Linf 0.0030991, total time[s] 0.068305 +Converged at iteration 25, L1 9.98146e-05, Linf 0.00628647, total time[s] 0.067423 +Converged at iteration 25, L1 4.97184e-05, Linf 0.00800535, total time[s] 0.06606 +Converged at iteration 26, L1 8.12006e-05, Linf 0.0199194, total time[s] 0.069299 +Converged at iteration 21, L1 4.75372e-05, Linf 0.00797943, total time[s] 0.061208 +Converged at iteration 19, L1 7.7214e-05, Linf 0.00480336, total time[s] 0.06146 +Converged at iteration 23, L1 8.45078e-05, Linf 0.00271143, total time[s] 0.079108 +Converged at iteration 24, L1 9.24704e-05, Linf 0.00304953, total time[s] 0.074972 +Converged at iteration 22, L1 5.21861e-05, Linf 0.00242066, total time[s] 0.08349 +Converged at iteration 21, L1 4.962e-05, Linf 0.0023144, total time[s] 0.05938 +Converged at iteration 32, L1 6.26501e-05, Linf 0.00880368, total time[s] 0.094518 +Converged at iteration 22, L1 8.97227e-05, Linf 0.00542754, total time[s] 0.069813 +Converged at iteration 24, L1 6.3115e-05, Linf 0.00491469, total time[s] 0.076718 +Converged at iteration 26, L1 8.73317e-05, Linf 0.00436267, total time[s] 0.074036 +Converged at iteration 23, L1 9.65769e-05, Linf 0.00378867, total time[s] 0.064898 +Converged at iteration 23, L1 8.25989e-05, Linf 0.00372405, total time[s] 0.070129 +Converged at iteration 27, L1 5.61099e-05, Linf 0.019855, total time[s] 0.074386 +Converged at iteration 28, L1 7.33602e-05, Linf 0.00426212, total time[s] 0.080529 +Converged at iteration 27, L1 9.46839e-05, Linf 0.00682201, total time[s] 0.076087 +Converged at iteration 32, L1 9.18036e-05, Linf 0.00568916, total time[s] 0.094117 +Converged at iteration 28, L1 6.79914e-05, Linf 0.00190462, total time[s] 0.08184 +Converged at iteration 31, L1 7.91372e-05, Linf 0.0106189, total time[s] 0.092562 +Converged at iteration 31, L1 5.91703e-05, Linf 0.00248742, total time[s] 0.082823 +Converged at iteration 33, L1 6.3618e-05, Linf 0.00319278, total time[s] 0.096517 +Converged at iteration 31, L1 7.45074e-05, Linf 0.00718575, total time[s] 0.086289 +Converged at iteration 33, L1 4.92091e-05, Linf 0.0106548, total time[s] 0.090417 +Converged at iteration 29, L1 9.48524e-05, Linf 0.0173921, total time[s] 0.08451 +Converged at iteration 25, L1 6.88255e-05, Linf 0.00312049, total time[s] 0.083083 +Converged at iteration 38, L1 3.38082e-05, Linf 0.00809768, total time[s] 0.111429 +Converged at iteration 36, L1 3.52578e-05, Linf 0.0068136, total time[s] 0.09726 +Converged at iteration 25, L1 7.66865e-05, Linf 0.00309573, total time[s] 0.071417 +Converged at iteration 26, L1 4.31222e-05, Linf 0.00315181, total time[s] 0.069164 +Converged at iteration 25, L1 4.96451e-05, Linf 0.00790987, total time[s] 0.066223 +Converged at iteration 26, L1 8.34386e-05, Linf 0.0202952, total time[s] 0.069011 +Converged at iteration 21, L1 4.77365e-05, Linf 0.00826704, total time[s] 0.059606 +Converged at iteration 19, L1 8.16559e-05, Linf 0.00483539, total time[s] 0.069062 +Converged at iteration 23, L1 8.35722e-05, Linf 0.00269466, total time[s] 0.066174 +Converged at iteration 24, L1 9.31901e-05, Linf 0.00306254, total time[s] 0.090045 +Converged at iteration 22, L1 5.26367e-05, Linf 0.00242454, total time[s] 0.064066 +Converged at iteration 21, L1 5.02072e-05, Linf 0.00234184, total time[s] 0.057897 +Converged at iteration 32, L1 6.36591e-05, Linf 0.00880914, total time[s] 0.090308 +Converged at iteration 22, L1 9.23665e-05, Linf 0.00548138, total time[s] 0.070336 +Converged at iteration 24, L1 6.36888e-05, Linf 0.00493333, total time[s] 0.071311 +Converged at iteration 26, L1 8.74306e-05, Linf 0.00436811, total time[s] 0.068102 +Converged at iteration 23, L1 9.4045e-05, Linf 0.00367669, total time[s] 0.061812 +Converged at iteration 23, L1 8.13362e-05, Linf 0.00362753, total time[s] 0.061905 +Converged at iteration 26, L1 9.7311e-05, Linf 0.00586947, total time[s] 0.072337 +Converged at iteration 28, L1 7.36293e-05, Linf 0.00436199, total time[s] 0.081642 +Converged at iteration 27, L1 9.53097e-05, Linf 0.00685018, total time[s] 0.07438 +Converged at iteration 32, L1 9.21597e-05, Linf 0.0057251, total time[s] 0.085191 +Converged at iteration 28, L1 6.83764e-05, Linf 0.00192591, total time[s] 0.073163 +Converged at iteration 31, L1 7.90543e-05, Linf 0.0106112, total time[s] 0.080055 +Converged at iteration 31, L1 5.93856e-05, Linf 0.00248253, total time[s] 0.07965 +Converged at iteration 33, L1 6.43616e-05, Linf 0.00322966, total time[s] 0.084676 +Converged at iteration 31, L1 7.60515e-05, Linf 0.00734949, total time[s] 0.081556 +Converged at iteration 33, L1 5.05327e-05, Linf 0.0109621, total time[s] 0.084079 +Converged at iteration 29, L1 9.44114e-05, Linf 0.0174886, total time[s] 0.075466 +Converged at iteration 25, L1 6.90412e-05, Linf 0.0031191, total time[s] 0.066857 +Converged at iteration 38, L1 3.39943e-05, Linf 0.00841001, total time[s] 0.104902 +Converged at iteration 36, L1 3.61519e-05, Linf 0.00679255, total time[s] 0.095801 +Converged at iteration 25, L1 7.68041e-05, Linf 0.0030773, total time[s] 0.065937 +Converged at iteration 26, L1 4.61057e-05, Linf 0.00327848, total time[s] 0.070613 +Converged at iteration 25, L1 4.96428e-05, Linf 0.00787421, total time[s] 0.074048 +Converged at iteration 26, L1 8.77335e-05, Linf 0.020824, total time[s] 0.081026 +Converged at iteration 21, L1 4.84912e-05, Linf 0.00804195, total time[s] 0.064516 +Converged at iteration 19, L1 8.70319e-05, Linf 0.00486378, total time[s] 0.063581 +Converged at iteration 23, L1 8.29454e-05, Linf 0.00265801, total time[s] 0.065587 +Converged at iteration 24, L1 9.47828e-05, Linf 0.0030871, total time[s] 0.064735 +Converged at iteration 22, L1 5.30545e-05, Linf 0.00241665, total time[s] 0.059544 +Converged at iteration 21, L1 5.5082e-05, Linf 0.00238815, total time[s] 0.061365 +Converged at iteration 32, L1 6.61768e-05, Linf 0.00881662, total time[s] 0.092545 +Converged at iteration 22, L1 9.61414e-05, Linf 0.00560073, total time[s] 0.059911 +Converged at iteration 24, L1 6.38657e-05, Linf 0.00497797, total time[s] 0.073151 +Converged at iteration 26, L1 8.60237e-05, Linf 0.00432783, total time[s] 0.100398 +Converged at iteration 23, L1 9.14902e-05, Linf 0.0034836, total time[s] 0.082523 +Converged at iteration 23, L1 8.13016e-05, Linf 0.00349418, total time[s] 0.086711 +Converged at iteration 26, L1 9.93289e-05, Linf 0.00600483, total time[s] 0.069036 +Converged at iteration 28, L1 7.86642e-05, Linf 0.00456573, total time[s] 0.087593 +Converged at iteration 27, L1 9.7058e-05, Linf 0.006915, total time[s] 0.079117 +Converged at iteration 32, L1 9.18428e-05, Linf 0.00577213, total time[s] 0.09021 +Converged at iteration 28, L1 7.08459e-05, Linf 0.00197332, total time[s] 0.074148 +Converged at iteration 31, L1 7.95259e-05, Linf 0.0108565, total time[s] 0.080066 +Converged at iteration 31, L1 5.9693e-05, Linf 0.00251762, total time[s] 0.079144 +Converged at iteration 33, L1 6.63426e-05, Linf 0.00334293, total time[s] 0.087281 +Converged at iteration 31, L1 8.02285e-05, Linf 0.00768125, total time[s] 0.080532 +Converged at iteration 33, L1 5.27447e-05, Linf 0.0116167, total time[s] 0.085313 +Converged at iteration 29, L1 9.44991e-05, Linf 0.0175107, total time[s] 0.075771 +Converged at iteration 25, L1 6.99075e-05, Linf 0.00308977, total time[s] 0.066308 +Converged at iteration 38, L1 3.42394e-05, Linf 0.0084196, total time[s] 0.102986 +Converged at iteration 36, L1 3.67395e-05, Linf 0.00702785, total time[s] 0.103657 +Converged at iteration 25, L1 7.64845e-05, Linf 0.00307444, total time[s] 0.067035 +Converged at iteration 26, L1 4.68896e-05, Linf 0.00336006, total time[s] 0.068464 +Converged at iteration 25, L1 4.95733e-05, Linf 0.00767823, total time[s] 0.066822 +Converged at iteration 26, L1 9.00007e-05, Linf 0.021513, total time[s] 0.071276 +Converged at iteration 21, L1 4.93328e-05, Linf 0.00808003, total time[s] 0.063516 +Converged at iteration 19, L1 8.98505e-05, Linf 0.00498609, total time[s] 0.059935 +Converged at iteration 23, L1 8.19484e-05, Linf 0.00268846, total time[s] 0.068539 +Converged at iteration 24, L1 9.60769e-05, Linf 0.00309632, total time[s] 0.074007 +Converged at iteration 22, L1 5.29402e-05, Linf 0.00241426, total time[s] 0.078166 +Converged at iteration 21, L1 5.2536e-05, Linf 0.00240769, total time[s] 0.064436 +Converged at iteration 32, L1 7.75832e-05, Linf 0.008821, total time[s] 0.089019 +Converged at iteration 22, L1 9.10665e-05, Linf 0.00575119, total time[s] 0.062637 +Converged at iteration 24, L1 6.42289e-05, Linf 0.00499545, total time[s] 0.062876 +Converged at iteration 26, L1 8.75486e-05, Linf 0.0129491, total time[s] 0.067318 +Converged at iteration 23, L1 9.07281e-05, Linf 0.00339378, total time[s] 0.060345 +Converged at iteration 23, L1 8.17968e-05, Linf 0.00341369, total time[s] 0.063925 +Converged at iteration 27, L1 4.8221e-05, Linf 0.00314311, total time[s] 0.070524 +Converged at iteration 28, L1 7.8925e-05, Linf 0.00467928, total time[s] 0.072406 +Converged at iteration 27, L1 9.65738e-05, Linf 0.00694505, total time[s] 0.070732 +Converged at iteration 32, L1 9.17719e-05, Linf 0.0057987, total time[s] 0.083023 +Converged at iteration 28, L1 7.19635e-05, Linf 0.00198733, total time[s] 0.074431 +Converged at iteration 31, L1 7.93695e-05, Linf 0.0106741, total time[s] 0.081973 +Converged at iteration 31, L1 6.04954e-05, Linf 0.00252403, total time[s] 0.081307 +Converged at iteration 33, L1 6.66157e-05, Linf 0.00337085, total time[s] 0.087119 +Converged at iteration 31, L1 8.52365e-05, Linf 0.00784653, total time[s] 0.08339 +Converged at iteration 33, L1 5.46011e-05, Linf 0.0119469, total time[s] 0.086562 +Converged at iteration 29, L1 9.32254e-05, Linf 0.0174411, total time[s] 0.085962 +Converged at iteration 25, L1 6.92126e-05, Linf 0.00306294, total time[s] 0.073137 +Converged at iteration 38, L1 3.5983e-05, Linf 0.00856971, total time[s] 0.099258 +Converged at iteration 36, L1 5.26908e-05, Linf 0.00727115, total time[s] 0.098485 +Converged at iteration 25, L1 7.62286e-05, Linf 0.00306294, total time[s] 0.067182 +Converged at iteration 26, L1 4.94779e-05, Linf 0.00354238, total time[s] 0.068035 +Converged at iteration 25, L1 5.51553e-05, Linf 0.00757672, total time[s] 0.067129 +Converged at iteration 26, L1 9.71643e-05, Linf 0.0224004, total time[s] 0.075012 +Converged at iteration 21, L1 4.98919e-05, Linf 0.0081184, total time[s] 0.075794 +Converged at iteration 19, L1 9.4504e-05, Linf 0.00509426, total time[s] 0.060639 +Converged at iteration 23, L1 8.0805e-05, Linf 0.00261657, total time[s] 0.080574 +Converged at iteration 24, L1 9.72485e-05, Linf 0.00311157, total time[s] 0.075162 +Converged at iteration 22, L1 5.25673e-05, Linf 0.00238954, total time[s] 0.094587 +Converged at iteration 21, L1 5.28257e-05, Linf 0.00244774, total time[s] 0.067095 +Converged at iteration 32, L1 6.98582e-05, Linf 0.00872534, total time[s] 0.094852 +Converged at iteration 22, L1 9.70309e-05, Linf 0.00624007, total time[s] 0.059923 +Converged at iteration 24, L1 6.51578e-05, Linf 0.00503635, total time[s] 0.06944 +Converged at iteration 26, L1 8.50664e-05, Linf 0.0042942, total time[s] 0.074023 +Converged at iteration 23, L1 8.85834e-05, Linf 0.00322507, total time[s] 0.063667 +Converged at iteration 23, L1 8.28947e-05, Linf 0.00328854, total time[s] 0.063771 +Converged at iteration 27, L1 4.75046e-05, Linf 0.00321769, total time[s] 0.073402 +Converged at iteration 28, L1 8.19414e-05, Linf 0.00490206, total time[s] 0.078411 +Converged at iteration 27, L1 9.86911e-05, Linf 0.00701592, total time[s] 0.073795 +Converged at iteration 32, L1 9.21868e-05, Linf 0.00583108, total time[s] 0.084394 +Converged at iteration 28, L1 7.43743e-05, Linf 0.00201741, total time[s] 0.079386 +Converged at iteration 31, L1 8.20696e-05, Linf 0.0108008, total time[s] 0.088765 +Converged at iteration 31, L1 5.94817e-05, Linf 0.00253561, total time[s] 0.090119 +Converged at iteration 33, L1 7.08789e-05, Linf 0.00347445, total time[s] 0.087739 +Converged at iteration 31, L1 8.68103e-05, Linf 0.00819893, total time[s] 0.110151 +Converged at iteration 33, L1 5.6337e-05, Linf 0.012638, total time[s] 0.090577 +Converged at iteration 29, L1 9.3626e-05, Linf 0.0173635, total time[s] 0.090996 +Converged at iteration 25, L1 7.09528e-05, Linf 0.00304656, total time[s] 0.068939 +Converged at iteration 38, L1 3.54724e-05, Linf 0.00867426, total time[s] 0.107026 +Converged at iteration 36, L1 3.83428e-05, Linf 0.00744098, total time[s] 0.106456 +Converged at iteration 25, L1 7.58721e-05, Linf 0.00305347, total time[s] 0.067864 +Converged at iteration 26, L1 5.02846e-05, Linf 0.00361281, total time[s] 0.075434 +Converged at iteration 25, L1 5.04276e-05, Linf 0.00752974, total time[s] 0.080765 +Converged at iteration 26, L1 9.71064e-05, Linf 0.0228024, total time[s] 0.079404 +Converged at iteration 21, L1 5.13032e-05, Linf 0.00814097, total time[s] 0.060673 +Converged at iteration 19, L1 9.71965e-05, Linf 0.00511504, total time[s] 0.064587 +Converged at iteration 23, L1 7.97656e-05, Linf 0.00264034, total time[s] 0.075974 +Converged at iteration 24, L1 9.74783e-05, Linf 0.00311614, total time[s] 0.064307 +Converged at iteration 22, L1 5.2963e-05, Linf 0.00237552, total time[s] 0.075062 +Converged at iteration 21, L1 5.31187e-05, Linf 0.00248275, total time[s] 0.062675 +Converged at iteration 32, L1 7.17761e-05, Linf 0.00869606, total time[s] 0.097492 +Converged at iteration 22, L1 9.34353e-05, Linf 0.00583119, total time[s] 0.061525 +Converged at iteration 24, L1 6.85105e-05, Linf 0.00698887, total time[s] 0.065959 +Converged at iteration 26, L1 8.7167e-05, Linf 0.00430097, total time[s] 0.071336 +Converged at iteration 23, L1 8.78363e-05, Linf 0.00314329, total time[s] 0.061758 +Converged at iteration 23, L1 8.20497e-05, Linf 0.0031994, total time[s] 0.06017 +Converged at iteration 27, L1 4.80321e-05, Linf 0.00325457, total time[s] 0.069059 +Converged at iteration 28, L1 8.5254e-05, Linf 0.00499242, total time[s] 0.083415 +Converged at iteration 27, L1 9.99655e-05, Linf 0.00704387, total time[s] 0.068345 +Converged at iteration 32, L1 9.21598e-05, Linf 0.00585153, total time[s] 0.085547 +Converged at iteration 28, L1 7.55337e-05, Linf 0.00202257, total time[s] 0.071648 +Converged at iteration 31, L1 8.04108e-05, Linf 0.0107297, total time[s] 0.07808 +Converged at iteration 31, L1 5.97561e-05, Linf 0.00253903, total time[s] 0.078684 +Converged at iteration 33, L1 6.92441e-05, Linf 0.00351406, total time[s] 0.082568 +Converged at iteration 31, L1 8.98943e-05, Linf 0.00840323, total time[s] 0.077806 +Converged at iteration 33, L1 5.79367e-05, Linf 0.0129653, total time[s] 0.082416 +Converged at iteration 29, L1 9.24416e-05, Linf 0.0172872, total time[s] 0.075382 +Converged at iteration 25, L1 7.13186e-05, Linf 0.00304722, total time[s] 0.069769 +Converged at iteration 38, L1 3.71049e-05, Linf 0.00904498, total time[s] 0.09973 +Converged at iteration 36, L1 6.15919e-05, Linf 0.00782929, total time[s] 0.105515 +Converged at iteration 25, L1 7.60106e-05, Linf 0.00304003, total time[s] 0.068171 +Converged at iteration 26, L1 5.4469e-05, Linf 0.0038981, total time[s] 0.06643 +Converged at iteration 25, L1 5.0681e-05, Linf 0.00742312, total time[s] 0.064066 +Converged at iteration 27, L1 3.98017e-05, Linf 0.00901927, total time[s] 0.070832 +Converged at iteration 21, L1 5.18716e-05, Linf 0.00816902, total time[s] 0.060993 +Converged at iteration 20, L1 4.78699e-05, Linf 0.00276087, total time[s] 0.062148 +Converged at iteration 23, L1 7.85745e-05, Linf 0.00260086, total time[s] 0.094045 +Converged at iteration 24, L1 9.99386e-05, Linf 0.0031338, total time[s] 0.072124 +Converged at iteration 22, L1 5.3278e-05, Linf 0.00230655, total time[s] 0.104928 +Converged at iteration 21, L1 5.86582e-05, Linf 0.00262085, total time[s] 0.082627 +Converged at iteration 32, L1 7.55086e-05, Linf 0.0087398, total time[s] 0.09986 +Converged at iteration 23, L1 6.28766e-05, Linf 0.0108444, total time[s] 0.078962 +Converged at iteration 24, L1 6.6766e-05, Linf 0.0051209, total time[s] 0.071413 +Converged at iteration 26, L1 8.39642e-05, Linf 0.00423494, total time[s] 0.071283 +Converged at iteration 23, L1 8.5332e-05, Linf 0.00293369, total time[s] 0.07274 +Converged at iteration 23, L1 8.01252e-05, Linf 0.00291281, total time[s] 0.069342 +Converged at iteration 27, L1 4.83603e-05, Linf 0.00334744, total time[s] 0.070852 +Converged at iteration 28, L1 9.09223e-05, Linf 0.00532878, total time[s] 0.07231 +Converged at iteration 28, L1 5.78356e-05, Linf 0.00447917, total time[s] 0.0719 +Converged at iteration 32, L1 9.29162e-05, Linf 0.00588859, total time[s] 0.081596 +Converged at iteration 28, L1 7.96169e-05, Linf 0.00206697, total time[s] 0.071454 +Converged at iteration 31, L1 8.29508e-05, Linf 0.0108767, total time[s] 0.078237 +Converged at iteration 31, L1 6.52674e-05, Linf 0.00256897, total time[s] 0.079027 +Converged at iteration 33, L1 7.13399e-05, Linf 0.0036431, total time[s] 0.083563 +Converged at iteration 31, L1 9.69436e-05, Linf 0.00892707, total time[s] 0.078085 +Converged at iteration 33, L1 6.09404e-05, Linf 0.0140433, total time[s] 0.084268 +Converged at iteration 29, L1 9.2511e-05, Linf 0.0171921, total time[s] 0.075177 +Converged at iteration 25, L1 7.40396e-05, Linf 0.00302662, total time[s] 0.066253 +Converged at iteration 38, L1 3.70428e-05, Linf 0.00921293, total time[s] 0.096719 +Converged at iteration 36, L1 4.819e-05, Linf 0.00906155, total time[s] 0.09789 +Converged at iteration 25, L1 7.56708e-05, Linf 0.00303119, total time[s] 0.070505 +Converged at iteration 26, L1 5.57895e-05, Linf 0.00398626, total time[s] 0.074046 +Converged at iteration 25, L1 4.97152e-05, Linf 0.00739422, total time[s] 0.064849 +Converged at iteration 27, L1 3.95011e-05, Linf 0.00924816, total time[s] 0.074215 +Converged at iteration 21, L1 5.22074e-05, Linf 0.00836298, total time[s] 0.061918 +Converged at iteration 20, L1 4.92353e-05, Linf 0.00276326, total time[s] 0.065291 +Converged at iteration 23, L1 7.76842e-05, Linf 0.00258026, total time[s] 0.078009 +Converged at iteration 25, L1 5.84448e-05, Linf 0.00207432, total time[s] 0.069974 +Converged at iteration 22, L1 5.33936e-05, Linf 0.00230786, total time[s] 0.082587 +Converged at iteration 21, L1 5.42549e-05, Linf 0.00265631, total time[s] 0.063873 +Converged at iteration 32, L1 7.65741e-05, Linf 0.00875495, total time[s] 0.113327 +Converged at iteration 23, L1 6.29246e-05, Linf 0.00336221, total time[s] 0.063215 +Converged at iteration 24, L1 6.79972e-05, Linf 0.00513688, total time[s] 0.061874 +Converged at iteration 26, L1 8.39871e-05, Linf 0.00423441, total time[s] 0.066923 +Converged at iteration 23, L1 8.52087e-05, Linf 0.00288789, total time[s] 0.060904 +Converged at iteration 23, L1 7.94012e-05, Linf 0.00278523, total time[s] 0.060901 +Converged at iteration 27, L1 4.93658e-05, Linf 0.00338071, total time[s] 0.069272 +Converged at iteration 28, L1 9.20574e-05, Linf 0.00542354, total time[s] 0.071064 +Converged at iteration 28, L1 5.87926e-05, Linf 0.0045056, total time[s] 0.07205 +Converged at iteration 32, L1 9.32806e-05, Linf 0.00591049, total time[s] 0.082316 +Converged at iteration 28, L1 8.08187e-05, Linf 0.00207266, total time[s] 0.074659 +Converged at iteration 31, L1 8.375e-05, Linf 0.0108691, total time[s] 0.079768 +Converged at iteration 31, L1 6.30198e-05, Linf 0.00257085, total time[s] 0.078728 +Converged at iteration 33, L1 7.46469e-05, Linf 0.00445153, total time[s] 0.082878 +Converged at iteration 32, L1 3.68309e-05, Linf 0.0058778, total time[s] 0.082437 +Converged at iteration 33, L1 6.21589e-05, Linf 0.0143786, total time[s] 0.082574 +Converged at iteration 29, L1 9.45297e-05, Linf 0.0171092, total time[s] 0.073876 +Converged at iteration 25, L1 7.43995e-05, Linf 0.00303202, total time[s] 0.066279 +Converged at iteration 38, L1 3.84066e-05, Linf 0.00947662, total time[s] 0.098493 +Converged at iteration 36, L1 4.20204e-05, Linf 0.0082363, total time[s] 0.097617 +Converged at iteration 25, L1 7.55357e-05, Linf 0.00301276, total time[s] 0.066783 +Converged at iteration 26, L1 5.84936e-05, Linf 0.00418684, total time[s] 0.06777 +Converged at iteration 25, L1 5.01563e-05, Linf 0.00734359, total time[s] 0.064945 +Converged at iteration 27, L1 4.15131e-05, Linf 0.00968928, total time[s] 0.071641 +Converged at iteration 21, L1 5.30776e-05, Linf 0.008233, total time[s] 0.067422 +Converged at iteration 20, L1 4.94779e-05, Linf 0.00279475, total time[s] 0.057173 +Converged at iteration 23, L1 7.69737e-05, Linf 0.00388778, total time[s] 0.079773 +Converged at iteration 25, L1 5.9117e-05, Linf 0.00210406, total time[s] 0.090936 +Converged at iteration 22, L1 5.31258e-05, Linf 0.00229354, total time[s] 0.063305 +Converged at iteration 21, L1 5.49616e-05, Linf 0.00269986, total time[s] 0.064995 +Converged at iteration 32, L1 7.93147e-05, Linf 0.00897809, total time[s] 0.099896 +Converged at iteration 22, L1 9.84179e-05, Linf 0.0062286, total time[s] 0.062198 +Converged at iteration 24, L1 6.7627e-05, Linf 0.00517366, total time[s] 0.063329 +Converged at iteration 26, L1 8.31964e-05, Linf 0.00424502, total time[s] 0.068594 +Converged at iteration 23, L1 8.36302e-05, Linf 0.00280956, total time[s] 0.061606 +Converged at iteration 23, L1 7.7858e-05, Linf 0.00258502, total time[s] 0.073965 +Converged at iteration 27, L1 4.98567e-05, Linf 0.00345282, total time[s] 0.083364 +Converged at iteration 29, L1 5.58711e-05, Linf 0.00315354, total time[s] 0.081371 +Converged at iteration 28, L1 5.84093e-05, Linf 0.00455122, total time[s] 0.075573 +Converged at iteration 32, L1 9.32085e-05, Linf 0.00592727, total time[s] 0.088595 +Converged at iteration 28, L1 8.38265e-05, Linf 0.00210124, total time[s] 0.075451 +Converged at iteration 31, L1 8.25425e-05, Linf 0.0109004, total time[s] 0.080965 +Converged at iteration 31, L1 6.18752e-05, Linf 0.0025837, total time[s] 0.080088 +Converged at iteration 33, L1 7.34839e-05, Linf 0.00376451, total time[s] 0.08857 +Converged at iteration 32, L1 3.88708e-05, Linf 0.00617904, total time[s] 0.084154 +Converged at iteration 33, L1 6.46073e-05, Linf 0.0151149, total time[s] 0.088884 +Converged at iteration 29, L1 8.99163e-05, Linf 0.017016, total time[s] 0.083632 +Converged at iteration 25, L1 7.5549e-05, Linf 0.00303524, total time[s] 0.067487 +Converged at iteration 38, L1 3.8852e-05, Linf 0.00961558, total time[s] 0.101526 +Converged at iteration 36, L1 4.24698e-05, Linf 0.00840453, total time[s] 0.098048 +Converged at iteration 25, L1 7.53183e-05, Linf 0.00300912, total time[s] 0.068724 +Converged at iteration 26, L1 5.95316e-05, Linf 0.00428461, total time[s] 0.067639 +Converged at iteration 25, L1 5.34285e-05, Linf 0.00731461, total time[s] 0.06606 +Converged at iteration 27, L1 4.15991e-05, Linf 0.00993708, total time[s] 0.071022 +Converged at iteration 21, L1 5.36806e-05, Linf 0.00827314, total time[s] 0.063226 +Converged at iteration 20, L1 5.12965e-05, Linf 0.00281043, total time[s] 0.073596 +Converged at iteration 23, L1 7.60527e-05, Linf 0.0026145, total time[s] 0.080102 +Converged at iteration 25, L1 5.9686e-05, Linf 0.00210428, total time[s] 0.072857 +Converged at iteration 22, L1 5.31183e-05, Linf 0.00229713, total time[s] 0.06379 +Converged at iteration 21, L1 5.5511e-05, Linf 0.0027291, total time[s] 0.067216 +Converged at iteration 32, L1 8.07434e-05, Linf 0.0089613, total time[s] 0.091362 +Converged at iteration 22, L1 9.93002e-05, Linf 0.00629881, total time[s] 0.064864 +Converged at iteration 24, L1 6.77564e-05, Linf 0.00519578, total time[s] 0.066371 +Converged at iteration 26, L1 8.38518e-05, Linf 0.00429008, total time[s] 0.069314 +Converged at iteration 23, L1 8.29865e-05, Linf 0.00272331, total time[s] 0.060212 +Converged at iteration 23, L1 7.77129e-05, Linf 0.0024723, total time[s] 0.060946 +Converged at iteration 27, L1 4.8957e-05, Linf 0.00348184, total time[s] 0.07054 +Converged at iteration 29, L1 5.79055e-05, Linf 0.00326992, total time[s] 0.076067 +Converged at iteration 28, L1 5.84597e-05, Linf 0.0045775, total time[s] 0.073454 +Converged at iteration 32, L1 9.33845e-05, Linf 0.00594783, total time[s] 0.08095 +Converged at iteration 28, L1 8.51866e-05, Linf 0.00211459, total time[s] 0.073464 +Converged at iteration 31, L1 8.36516e-05, Linf 0.0108839, total time[s] 0.08321 +Converged at iteration 31, L1 6.21854e-05, Linf 0.00258745, total time[s] 0.083722 +Converged at iteration 33, L1 7.32436e-05, Linf 0.0037891, total time[s] 0.08443 +Converged at iteration 32, L1 4.02412e-05, Linf 0.00652878, total time[s] 0.081858 +Converged at iteration 33, L1 6.6106e-05, Linf 0.0155458, total time[s] 0.08635 +Converged at iteration 29, L1 8.90465e-05, Linf 0.0169268, total time[s] 0.074862 +Converged at iteration 25, L1 7.57681e-05, Linf 0.0030412, total time[s] 0.065557 +Converged at iteration 38, L1 4.00002e-05, Linf 0.00982806, total time[s] 0.098218 +Converged at iteration 36, L1 4.35283e-05, Linf 0.00867706, total time[s] 0.095679 +Converged at iteration 25, L1 7.47315e-05, Linf 0.00298418, total time[s] 0.069034 +Converged at iteration 26, L1 6.19557e-05, Linf 0.0044765, total time[s] 0.06698 +Converged at iteration 25, L1 4.95885e-05, Linf 0.00727787, total time[s] 0.065356 +Converged at iteration 27, L1 4.29954e-05, Linf 0.0104198, total time[s] 0.073481 +Converged at iteration 21, L1 5.46944e-05, Linf 0.00832891, total time[s] 0.060168 +Converged at iteration 20, L1 5.14182e-05, Linf 0.00283868, total time[s] 0.058823 +Converged at iteration 23, L1 7.47315e-05, Linf 0.00265298, total time[s] 0.0639 +Converged at iteration 25, L1 6.04585e-05, Linf 0.00213367, total time[s] 0.072382 +Converged at iteration 22, L1 5.3117e-05, Linf 0.00227492, total time[s] 0.065562 +Converged at iteration 21, L1 5.63953e-05, Linf 0.00278119, total time[s] 0.063279 +Converged at iteration 32, L1 8.37761e-05, Linf 0.00913186, total time[s] 0.102333 +Converged at iteration 23, L1 5.84892e-05, Linf 0.00703999, total time[s] 0.067566 +Converged at iteration 24, L1 6.81516e-05, Linf 0.00522638, total time[s] 0.079576 +Converged at iteration 26, L1 8.28186e-05, Linf 0.00440849, total time[s] 0.066584 +Converged at iteration 23, L1 8.15138e-05, Linf 0.00267737, total time[s] 0.060559 +Converged at iteration 23, L1 7.67842e-05, Linf 0.00233711, total time[s] 0.060574 +Converged at iteration 27, L1 4.94019e-05, Linf 0.00354942, total time[s] 0.069738 +Converged at iteration 29, L1 6.11779e-05, Linf 0.00337377, total time[s] 0.076318 +Converged at iteration 28, L1 5.88745e-05, Linf 0.00461754, total time[s] 0.073178 +Converged at iteration 32, L1 9.28934e-05, Linf 0.00595776, total time[s] 0.084925 +Converged at iteration 28, L1 8.83206e-05, Linf 0.002207, total time[s] 0.072416 +Converged at iteration 31, L1 8.14302e-05, Linf 0.0107084, total time[s] 0.080329 +Converged at iteration 31, L1 6.22384e-05, Linf 0.0026066, total time[s] 0.080668 +Converged at iteration 33, L1 7.39577e-05, Linf 0.00386699, total time[s] 0.085146 +Converged at iteration 32, L1 4.28287e-05, Linf 0.00699536, total time[s] 0.081571 +Converged at iteration 33, L1 6.9138e-05, Linf 0.0163105, total time[s] 0.084838 +Converged at iteration 29, L1 8.83847e-05, Linf 0.0172089, total time[s] 0.075031 +Converged at iteration 25, L1 7.84218e-05, Linf 0.00305431, total time[s] 0.067777 +Converged at iteration 38, L1 4.04166e-05, Linf 0.00993903, total time[s] 0.103038 +Converged at iteration 36, L1 4.42762e-05, Linf 0.00882566, total time[s] 0.096781 +Converged at iteration 25, L1 7.43036e-05, Linf 0.00297706, total time[s] 0.068445 +Converged at iteration 26, L1 6.30344e-05, Linf 0.00457226, total time[s] 0.0711 +Converged at iteration 25, L1 4.93743e-05, Linf 0.00724889, total time[s] 0.065365 +Converged at iteration 27, L1 7.44907e-05, Linf 0.0106689, total time[s] 0.076486 +Converged at iteration 21, L1 5.55143e-05, Linf 0.00863863, total time[s] 0.060501 +Converged at iteration 20, L1 5.28324e-05, Linf 0.00284863, total time[s] 0.068582 +Converged at iteration 23, L1 7.38484e-05, Linf 0.00264674, total time[s] 0.071765 +Converged at iteration 25, L1 6.08755e-05, Linf 0.00213795, total time[s] 0.079423 +Converged at iteration 22, L1 5.32148e-05, Linf 0.002294, total time[s] 0.065538 +Converged at iteration 21, L1 5.69317e-05, Linf 0.00281036, total time[s] 0.067934 +Converged at iteration 32, L1 8.55366e-05, Linf 0.00885903, total time[s] 0.100076 +Converged at iteration 23, L1 5.3878e-05, Linf 0.00355221, total time[s] 0.064165 +Converged at iteration 24, L1 7.05422e-05, Linf 0.00543798, total time[s] 0.062306 +Converged at iteration 26, L1 8.30677e-05, Linf 0.0045013, total time[s] 0.066878 +Converged at iteration 23, L1 8.04884e-05, Linf 0.00259794, total time[s] 0.060894 +Converged at iteration 23, L1 7.57854e-05, Linf 0.00227828, total time[s] 0.06609 +Converged at iteration 27, L1 4.95458e-05, Linf 0.0035772, total time[s] 0.071737 +Converged at iteration 29, L1 6.40606e-05, Linf 0.00345457, total time[s] 0.07374 +Converged at iteration 28, L1 6.0335e-05, Linf 0.00461832, total time[s] 0.071376 +Converged at iteration 32, L1 9.31473e-05, Linf 0.00597481, total time[s] 0.081076 +Converged at iteration 28, L1 8.89585e-05, Linf 0.00214848, total time[s] 0.072055 +Converged at iteration 31, L1 8.12803e-05, Linf 0.0106792, total time[s] 0.07849 +Converged at iteration 31, L1 6.16506e-05, Linf 0.0026018, total time[s] 0.082892 +Converged at iteration 33, L1 7.40113e-05, Linf 0.00387643, total time[s] 0.082858 +Converged at iteration 32, L1 4.38898e-05, Linf 0.00716903, total time[s] 0.082445 +Converged at iteration 33, L1 7.01015e-05, Linf 0.0167327, total time[s] 0.090893 +Converged at iteration 29, L1 8.76961e-05, Linf 0.0176041, total time[s] 0.076465 +Converged at iteration 25, L1 7.56768e-05, Linf 0.00306286, total time[s] 0.064208 +Converged at iteration 38, L1 4.12771e-05, Linf 0.0100923, total time[s] 0.100492 +Converged at iteration 36, L1 4.67391e-05, Linf 0.00918035, total time[s] 0.102325 +Converged at iteration 25, L1 7.31605e-05, Linf 0.00294625, total time[s] 0.066621 +Converged at iteration 26, L1 6.63613e-05, Linf 0.00492545, total time[s] 0.067371 +Converged at iteration 25, L1 4.92739e-05, Linf 0.00740781, total time[s] 0.066738 +Converged at iteration 27, L1 4.5905e-05, Linf 0.0117056, total time[s] 0.071705 +Converged at iteration 21, L1 5.72464e-05, Linf 0.00857842, total time[s] 0.069139 +Converged at iteration 20, L1 5.44437e-05, Linf 0.00258299, total time[s] 0.069238 +Converged at iteration 23, L1 7.42114e-05, Linf 0.00394764, total time[s] 0.089212 +Converged at iteration 25, L1 6.17481e-05, Linf 0.00216082, total time[s] 0.073117 +Converged at iteration 22, L1 5.31849e-05, Linf 0.00227993, total time[s] 0.062617 +Converged at iteration 21, L1 5.79106e-05, Linf 0.00287884, total time[s] 0.060416 +Converged at iteration 32, L1 9.12421e-05, Linf 0.009042, total time[s] 0.088594 +Converged at iteration 23, L1 6.70359e-05, Linf 0.0111616, total time[s] 0.064699 +Converged at iteration 24, L1 7.22995e-05, Linf 0.00529632, total time[s] 0.06316 +Converged at iteration 26, L1 8.17689e-05, Linf 0.00471558, total time[s] 0.071828 +Converged at iteration 23, L1 7.71891e-05, Linf 0.00252251, total time[s] 0.060791 +Converged at iteration 23, L1 7.44334e-05, Linf 0.00218046, total time[s] 0.064729 +Converged at iteration 27, L1 5.32835e-05, Linf 0.00366715, total time[s] 0.082231 +Converged at iteration 29, L1 6.80809e-05, Linf 0.00368385, total time[s] 0.074558 +Converged at iteration 28, L1 6.38309e-05, Linf 0.00470989, total time[s] 0.112597 +Converged at iteration 32, L1 9.26112e-05, Linf 0.00597765, total time[s] 0.086908 +Converged at iteration 28, L1 9.20811e-05, Linf 0.00219931, total time[s] 0.074086 +Converged at iteration 31, L1 8.24178e-05, Linf 0.0108272, total time[s] 0.080623 +Converged at iteration 31, L1 6.11298e-05, Linf 0.00263328, total time[s] 0.080003 +Converged at iteration 33, L1 7.64974e-05, Linf 0.00393341, total time[s] 0.084849 +Converged at iteration 32, L1 4.66843e-05, Linf 0.00766575, total time[s] 0.084534 +Converged at iteration 33, L1 7.37125e-05, Linf 0.017818, total time[s] 0.085138 +Converged at iteration 29, L1 8.67573e-05, Linf 0.0174704, total time[s] 0.075036 +Converged at iteration 25, L1 7.70379e-05, Linf 0.00306946, total time[s] 0.065909 +Converged at iteration 38, L1 4.18588e-05, Linf 0.0104625, total time[s] 0.100058 +Converged at iteration 36, L1 4.61403e-05, Linf 0.00932965, total time[s] 0.097903 +Converged at iteration 25, L1 7.25673e-05, Linf 0.00293052, total time[s] 0.065254 +Converged at iteration 26, L1 6.75391e-05, Linf 0.0050285, total time[s] 0.068448 +Converged at iteration 25, L1 4.89316e-05, Linf 0.00737396, total time[s] 0.065146 +Converged at iteration 27, L1 4.64774e-05, Linf 0.0120856, total time[s] 0.071188 +Converged at iteration 21, L1 5.77404e-05, Linf 0.00859594, total time[s] 0.067199 +Converged at iteration 20, L1 5.64021e-05, Linf 0.00325425, total time[s] 0.089918 +Converged at iteration 23, L1 7.31756e-05, Linf 0.00271494, total time[s] 0.065655 +Converged at iteration 25, L1 6.17256e-05, Linf 0.00217081, total time[s] 0.072277 +Converged at iteration 22, L1 5.37955e-05, Linf 0.00227905, total time[s] 0.075162 +Converged at iteration 21, L1 5.95096e-05, Linf 0.00290782, total time[s] 0.063156 +Converged at iteration 32, L1 9.10422e-05, Linf 0.00906378, total time[s] 0.115674 +Converged at iteration 23, L1 5.74569e-05, Linf 0.00368817, total time[s] 0.066752 +Converged at iteration 24, L1 7.01826e-05, Linf 0.00531238, total time[s] 0.063035 +Converged at iteration 26, L1 8.13863e-05, Linf 0.00485302, total time[s] 0.066557 +Converged at iteration 23, L1 7.62347e-05, Linf 0.00250464, total time[s] 0.060046 +Converged at iteration 23, L1 7.38945e-05, Linf 0.00211663, total time[s] 0.059977 +Converged at iteration 27, L1 5.46195e-05, Linf 0.00369943, total time[s] 0.070492 +Converged at iteration 29, L1 6.91787e-05, Linf 0.00375914, total time[s] 0.074043 +Converged at iteration 28, L1 6.36584e-05, Linf 0.00473248, total time[s] 0.072343 +Converged at iteration 32, L1 9.2053e-05, Linf 0.00598069, total time[s] 0.08063 +Converged at iteration 28, L1 9.24014e-05, Linf 0.00220821, total time[s] 0.072303 +Converged at iteration 31, L1 8.11151e-05, Linf 0.0108038, total time[s] 0.079779 +Converged at iteration 31, L1 6.32156e-05, Linf 0.00264286, total time[s] 0.084168 +Converged at iteration 33, L1 7.44449e-05, Linf 0.00395557, total time[s] 0.094826 +Converged at iteration 32, L1 4.86134e-05, Linf 0.0077557, total time[s] 0.084299 +Converged at iteration 33, L1 7.50136e-05, Linf 0.0182468, total time[s] 0.08497 +Converged at iteration 29, L1 8.5922e-05, Linf 0.0173786, total time[s] 0.074862 +Converged at iteration 25, L1 7.48244e-05, Linf 0.00311334, total time[s] 0.066623 +Converged at iteration 38, L1 4.26325e-05, Linf 0.0105222, total time[s] 0.100541 +Converged at iteration 36, L1 7.22693e-05, Linf 0.00967785, total time[s] 0.100169 +Converged at iteration 25, L1 7.10293e-05, Linf 0.00289411, total time[s] 0.065259 +Converged at iteration 26, L1 7.14667e-05, Linf 0.00531076, total time[s] 0.069439 +Converged at iteration 25, L1 4.81077e-05, Linf 0.00712445, total time[s] 0.065518 +Converged at iteration 27, L1 4.81681e-05, Linf 0.012291, total time[s] 0.07504 +Converged at iteration 21, L1 5.95509e-05, Linf 0.00845121, total time[s] 0.063927 +Converged at iteration 20, L1 5.76332e-05, Linf 0.00270637, total time[s] 0.067544 +Converged at iteration 23, L1 7.18237e-05, Linf 0.00275818, total time[s] 0.074048 +Converged at iteration 25, L1 6.2295e-05, Linf 0.00218804, total time[s] 0.072711 +Converged at iteration 22, L1 5.26416e-05, Linf 0.00226467, total time[s] 0.064172 +Converged at iteration 21, L1 5.92915e-05, Linf 0.00297591, total time[s] 0.062716 +Converged at iteration 32, L1 9.61082e-05, Linf 0.0091055, total time[s] 0.101374 +Converged at iteration 23, L1 6.14385e-05, Linf 0.00378981, total time[s] 0.062512 +Converged at iteration 24, L1 7.43964e-05, Linf 0.00536508, total time[s] 0.101347 +Converged at iteration 26, L1 8.07354e-05, Linf 0.00444241, total time[s] 0.075114 +Converged at iteration 23, L1 7.42968e-05, Linf 0.00248613, total time[s] 0.068647 +Converged at iteration 23, L1 7.29415e-05, Linf 0.00203975, total time[s] 0.059 +Converged at iteration 27, L1 6.01157e-05, Linf 0.00490778, total time[s] 0.244859 +Converged at iteration 29, L1 7.31213e-05, Linf 0.00395249, total time[s] 0.075061 +Converged at iteration 28, L1 6.59032e-05, Linf 0.0047922, total time[s] 0.08424 +Converged at iteration 32, L1 9.08117e-05, Linf 0.00597081, total time[s] 0.077991 +Converged at iteration 28, L1 9.50757e-05, Linf 0.00224999, total time[s] 0.069229 +Converged at iteration 31, L1 8.44958e-05, Linf 0.0109001, total time[s] 0.076193 +Converged at iteration 31, L1 6.143e-05, Linf 0.00267343, total time[s] 0.076739 +Converged at iteration 33, L1 7.7221e-05, Linf 0.00400017, total time[s] 0.083708 +Converged at iteration 32, L1 5.11938e-05, Linf 0.0082279, total time[s] 0.078899 +Converged at iteration 33, L1 7.91639e-05, Linf 0.0202009, total time[s] 0.08131 +Converged at iteration 29, L1 8.62505e-05, Linf 0.017497, total time[s] 0.072204 +Converged at iteration 25, L1 7.45861e-05, Linf 0.00323034, total time[s] 0.063211 +Converged at iteration 38, L1 4.32785e-05, Linf 0.0108727, total time[s] 0.094187 +Converged at iteration 36, L1 4.77405e-05, Linf 0.0100471, total time[s] 0.096377 +Converged at iteration 25, L1 7.07321e-05, Linf 0.00288531, total time[s] 0.065599 +Converged at iteration 26, L1 7.28589e-05, Linf 0.00544212, total time[s] 0.067003 +Converged at iteration 25, L1 5.11902e-05, Linf 0.00703712, total time[s] 0.064102 +Converged at iteration 27, L1 4.93206e-05, Linf 0.0130122, total time[s] 0.072891 +Converged at iteration 21, L1 6.07214e-05, Linf 0.00866528, total time[s] 0.059684 +Converged at iteration 20, L1 5.85543e-05, Linf 0.00275837, total time[s] 0.068226 +Converged at iteration 23, L1 7.27837e-05, Linf 0.00276673, total time[s] 0.083991 +Converged at iteration 25, L1 6.27637e-05, Linf 0.00218581, total time[s] 0.079899 +Converged at iteration 22, L1 5.27636e-05, Linf 0.00225973, total time[s] 0.08655 +Converged at iteration 21, L1 6.11894e-05, Linf 0.00300957, total time[s] 0.06872 +Converged at iteration 32, L1 9.76431e-05, Linf 0.00912051, total time[s] 0.091631 +Converged at iteration 23, L1 6.00719e-05, Linf 0.00382587, total time[s] 0.06218 +Converged at iteration 24, L1 7.20686e-05, Linf 0.00538696, total time[s] 0.063075 +Converged at iteration 26, L1 8.02518e-05, Linf 0.00446149, total time[s] 0.06777 +Converged at iteration 23, L1 7.37623e-05, Linf 0.00242166, total time[s] 0.061715 +Converged at iteration 23, L1 7.22804e-05, Linf 0.0020162, total time[s] 0.060279 +Converged at iteration 27, L1 6.04467e-05, Linf 0.00383045, total time[s] 0.071395 +Converged at iteration 29, L1 7.25474e-05, Linf 0.00405374, total time[s] 0.075729 +Converged at iteration 28, L1 6.73962e-05, Linf 0.00482197, total time[s] 0.074017 +Converged at iteration 32, L1 9.06429e-05, Linf 0.00597856, total time[s] 0.084463 +Converged at iteration 28, L1 9.65654e-05, Linf 0.00226457, total time[s] 0.075058 +Converged at iteration 31, L1 8.31308e-05, Linf 0.0107771, total time[s] 0.079786 +Converged at iteration 31, L1 6.2223e-05, Linf 0.00269143, total time[s] 0.079237 +Converged at iteration 33, L1 7.5615e-05, Linf 0.00401231, total time[s] 0.083985 +Converged at iteration 32, L1 5.27348e-05, Linf 0.0081997, total time[s] 0.082794 +Converged at iteration 33, L1 8.05188e-05, Linf 0.0196585, total time[s] 0.085756 +Converged at iteration 29, L1 8.4018e-05, Linf 0.018113, total time[s] 0.075351 +Converged at iteration 25, L1 7.3727e-05, Linf 0.00322425, total time[s] 0.066882 +Converged at iteration 38, L1 4.40324e-05, Linf 0.0111295, total time[s] 0.097395 +Converged at iteration 36, L1 4.84554e-05, Linf 0.0104659, total time[s] 0.100069 +Converged at iteration 25, L1 6.94343e-05, Linf 0.00284966, total time[s] 0.066409 +Converged at iteration 26, L1 7.50753e-05, Linf 0.00565762, total time[s] 0.068792 +Converged at iteration 25, L1 4.7443e-05, Linf 0.00727136, total time[s] 0.066343 +Converged at iteration 27, L1 5.04247e-05, Linf 0.0135637, total time[s] 0.07306 +Converged at iteration 21, L1 6.19271e-05, Linf 0.00865886, total time[s] 0.061212 +Converged at iteration 20, L1 5.93327e-05, Linf 0.00345036, total time[s] 0.062567 +Converged at iteration 23, L1 7.19313e-05, Linf 0.00282826, total time[s] 0.084218 +Converged at iteration 25, L1 6.28216e-05, Linf 0.00219139, total time[s] 0.071693 +Converged at iteration 22, L1 5.24153e-05, Linf 0.00223909, total time[s] 0.077659 +Converged at iteration 21, L1 6.24391e-05, Linf 0.00306227, total time[s] 0.062242 +Converged at iteration 33, L1 3.26358e-05, Linf 0.00288777, total time[s] 0.094187 +Converged at iteration 23, L1 5.94458e-05, Linf 0.00388921, total time[s] 0.06082 +Converged at iteration 24, L1 7.24959e-05, Linf 0.00542751, total time[s] 0.064231 +Converged at iteration 26, L1 7.98239e-05, Linf 0.00443633, total time[s] 0.068699 +Converged at iteration 23, L1 7.27107e-05, Linf 0.00244021, total time[s] 0.061091 +Converged at iteration 23, L1 7.27978e-05, Linf 0.00210228, total time[s] 0.067792 +Converged at iteration 27, L1 6.29639e-05, Linf 0.00388658, total time[s] 0.071677 +Converged at iteration 29, L1 7.21793e-05, Linf 0.00419791, total time[s] 0.076912 +Converged at iteration 28, L1 7.09928e-05, Linf 0.00486289, total time[s] 0.074619 +Converged at iteration 32, L1 8.98649e-05, Linf 0.00597213, total time[s] 0.083337 +Converged at iteration 28, L1 9.81948e-05, Linf 0.00228988, total time[s] 0.074336 +Converged at iteration 31, L1 8.13961e-05, Linf 0.0107747, total time[s] 0.080999 +Converged at iteration 31, L1 6.20938e-05, Linf 0.00271914, total time[s] 0.081216 +Converged at iteration 33, L1 7.51286e-05, Linf 0.00405486, total time[s] 0.087097 +Converged at iteration 32, L1 5.43985e-05, Linf 0.00860968, total time[s] 0.087543 +Converged at iteration 33, L1 8.34044e-05, Linf 0.0207458, total time[s] 0.085894 +Converged at iteration 29, L1 8.27315e-05, Linf 0.0180518, total time[s] 0.076755 +Converged at iteration 25, L1 7.30043e-05, Linf 0.00321855, total time[s] 0.067425 +Converged at iteration 38, L1 4.43493e-05, Linf 0.0111089, total time[s] 0.098352 +Converged at iteration 36, L1 4.87959e-05, Linf 0.0106403, total time[s] 0.098256 +Converged at iteration 25, L1 6.89413e-05, Linf 0.00284456, total time[s] 0.065624 +Converged at iteration 26, L1 7.62129e-05, Linf 0.00587582, total time[s] 0.071073 +Converged at iteration 25, L1 4.69067e-05, Linf 0.00703046, total time[s] 0.067478 +Converged at iteration 27, L1 5.13968e-05, Linf 0.0134765, total time[s] 0.074895 +Converged at iteration 21, L1 6.2835e-05, Linf 0.00852629, total time[s] 0.066542 +Converged at iteration 20, L1 6.08076e-05, Linf 0.00287035, total time[s] 0.065732 +Converged at iteration 23, L1 7.10553e-05, Linf 0.00284176, total time[s] 0.066114 +Converged at iteration 25, L1 6.32692e-05, Linf 0.00218765, total time[s] 0.091929 +Converged at iteration 22, L1 5.2536e-05, Linf 0.00223299, total time[s] 0.0645 +Converged at iteration 21, L1 6.17454e-05, Linf 0.00309947, total time[s] 0.058046 +Converged at iteration 33, L1 3.28222e-05, Linf 0.00289374, total time[s] 0.102222 +Converged at iteration 23, L1 5.88933e-05, Linf 0.0039277, total time[s] 0.063869 +Converged at iteration 24, L1 7.53577e-05, Linf 0.00729429, total time[s] 0.06468 +Converged at iteration 26, L1 7.97574e-05, Linf 0.00445538, total time[s] 0.068702 +Converged at iteration 23, L1 7.18553e-05, Linf 0.00245491, total time[s] 0.06172 +Converged at iteration 23, L1 7.2775e-05, Linf 0.0020278, total time[s] 0.060991 +Converged at iteration 27, L1 6.39569e-05, Linf 0.0039174, total time[s] 0.070466 +Converged at iteration 29, L1 7.23465e-05, Linf 0.00432789, total time[s] 0.07465 +Converged at iteration 28, L1 7.39633e-05, Linf 0.00488828, total time[s] 0.072884 +Converged at iteration 32, L1 8.97087e-05, Linf 0.00597906, total time[s] 0.082533 +Converged at iteration 28, L1 9.82478e-05, Linf 0.00230841, total time[s] 0.072861 +Converged at iteration 31, L1 8.12394e-05, Linf 0.0107349, total time[s] 0.079326 +Converged at iteration 31, L1 6.1982e-05, Linf 0.00272025, total time[s] 0.079589 +Converged at iteration 33, L1 7.49449e-05, Linf 0.0040671, total time[s] 0.084229 +Converged at iteration 32, L1 5.59459e-05, Linf 0.00880025, total time[s] 0.082693 +Converged at iteration 33, L1 8.53797e-05, Linf 0.0213157, total time[s] 0.085326 +Converged at iteration 29, L1 8.19064e-05, Linf 0.0179045, total time[s] 0.074817 +Converged at iteration 25, L1 7.38944e-05, Linf 0.00323715, total time[s] 0.065477 +Converged at iteration 38, L1 4.51224e-05, Linf 0.0114143, total time[s] 0.099486 +Converged at iteration 36, L1 4.93525e-05, Linf 0.0105374, total time[s] 0.102679 +Converged at iteration 25, L1 6.82884e-05, Linf 0.00280478, total time[s] 0.066133 +Converged at iteration 26, L1 7.8641e-05, Linf 0.00617524, total time[s] 0.068351 +Converged at iteration 25, L1 4.64799e-05, Linf 0.00698986, total time[s] 0.06933 +Converged at iteration 27, L1 5.24759e-05, Linf 0.0140222, total time[s] 0.074028 +Converged at iteration 21, L1 6.37888e-05, Linf 0.00854154, total time[s] 0.064832 +Converged at iteration 20, L1 6.17806e-05, Linf 0.00294944, total time[s] 0.071787 +Converged at iteration 23, L1 7.0906e-05, Linf 0.00288168, total time[s] 0.074607 +Converged at iteration 25, L1 6.51769e-05, Linf 0.0110477, total time[s] 0.070561 +Converged at iteration 22, L1 5.19963e-05, Linf 0.00223214, total time[s] 0.063771 +Converged at iteration 21, L1 6.33309e-05, Linf 0.00315962, total time[s] 0.059021 +Converged at iteration 33, L1 3.36206e-05, Linf 0.002911, total time[s] 0.091892 +Converged at iteration 23, L1 6.2676e-05, Linf 0.00399339, total time[s] 0.080055 +Converged at iteration 24, L1 7.54743e-05, Linf 0.00549255, total time[s] 0.091025 +Converged at iteration 26, L1 8.00289e-05, Linf 0.0044355, total time[s] 0.104814 +Converged at iteration 23, L1 7.00274e-05, Linf 0.00234143, total time[s] 0.065996 +Converged at iteration 23, L1 7.29031e-05, Linf 0.00193951, total time[s] 0.063366 +Converged at iteration 27, L1 6.76048e-05, Linf 0.00649582, total time[s] 0.079559 +Converged at iteration 29, L1 7.39674e-05, Linf 0.00766362, total time[s] 0.084266 +Converged at iteration 28, L1 7.13218e-05, Linf 0.00493044, total time[s] 0.076673 +Converged at iteration 32, L1 8.9176e-05, Linf 0.00597794, total time[s] 0.082365 +Converged at iteration 28, L1 9.87481e-05, Linf 0.00233378, total time[s] 0.074321 +Converged at iteration 31, L1 8.30202e-05, Linf 0.0105679, total time[s] 0.085276 +Converged at iteration 31, L1 6.6217e-05, Linf 0.00275224, total time[s] 0.086219 +Converged at iteration 33, L1 7.72568e-05, Linf 0.00410246, total time[s] 0.090972 +Converged at iteration 32, L1 5.84822e-05, Linf 0.00896692, total time[s] 0.096244 +Converged at iteration 33, L1 8.83717e-05, Linf 0.0221924, total time[s] 0.088606 +Converged at iteration 29, L1 8.10075e-05, Linf 0.0178453, total time[s] 0.079878 +Converged at iteration 25, L1 7.326e-05, Linf 0.00326675, total time[s] 0.072012 +Converged at iteration 38, L1 4.57402e-05, Linf 0.0116146, total time[s] 0.103559 +Converged at iteration 36, L1 4.98964e-05, Linf 0.0106952, total time[s] 0.097588 +Converged at iteration 25, L1 6.80147e-05, Linf 0.00278924, total time[s] 0.066837 +Converged at iteration 26, L1 7.96001e-05, Linf 0.00629743, total time[s] 0.070779 +Converged at iteration 25, L1 5.4434e-05, Linf 0.0346489, total time[s] 0.071971 +Converged at iteration 27, L1 5.44995e-05, Linf 0.0143411, total time[s] 0.080683 +Converged at iteration 21, L1 6.35843e-05, Linf 0.00855341, total time[s] 0.074229 +Converged at iteration 20, L1 6.31399e-05, Linf 0.00296242, total time[s] 0.059726 +Converged at iteration 23, L1 7.11218e-05, Linf 0.00290361, total time[s] 0.066127 +Converged at iteration 25, L1 6.36755e-05, Linf 0.00222896, total time[s] 0.080641 +Converged at iteration 22, L1 5.20136e-05, Linf 0.00222594, total time[s] 0.060463 +Converged at iteration 21, L1 6.34868e-05, Linf 0.00319544, total time[s] 0.057738 +Converged at iteration 33, L1 3.39747e-05, Linf 0.00292176, total time[s] 0.095291 +Converged at iteration 23, L1 7.25148e-05, Linf 0.00402858, total time[s] 0.062693 +Converged at iteration 24, L1 7.42644e-05, Linf 0.00550519, total time[s] 0.06439 +Converged at iteration 26, L1 7.89843e-05, Linf 0.00444593, total time[s] 0.071031 +Converged at iteration 23, L1 6.93589e-05, Linf 0.00230543, total time[s] 0.062176 +Converged at iteration 23, L1 7.27776e-05, Linf 0.0018735, total time[s] 0.065574 +Converged at iteration 27, L1 6.71293e-05, Linf 0.0039768, total time[s] 0.076012 +Converged at iteration 29, L1 7.21676e-05, Linf 0.00453619, total time[s] 0.084596 +Converged at iteration 28, L1 6.82597e-05, Linf 0.00495826, total time[s] 0.071605 +Converged at iteration 32, L1 8.90573e-05, Linf 0.00598913, total time[s] 0.082623 +Converged at iteration 28, L1 9.89791e-05, Linf 0.00234854, total time[s] 0.083594 +Converged at iteration 31, L1 8.02706e-05, Linf 0.0106752, total time[s] 0.101625 +Converged at iteration 31, L1 6.21309e-05, Linf 0.00275683, total time[s] 0.108466 +Converged at iteration 33, L1 7.54243e-05, Linf 0.00411925, total time[s] 0.087651 +Converged at iteration 32, L1 6.18655e-05, Linf 0.00929093, total time[s] 0.08696 +Converged at iteration 33, L1 9.0345e-05, Linf 0.0227389, total time[s] 0.084221 +Converged at iteration 29, L1 8.01177e-05, Linf 0.0184321, total time[s] 0.077165 +Converged at iteration 25, L1 7.35243e-05, Linf 0.0032887, total time[s] 0.067749 +Converged at iteration 38, L1 4.66728e-05, Linf 0.0120842, total time[s] 0.177346 +Converged at iteration 36, L1 5.09399e-05, Linf 0.0110671, total time[s] 0.097015 +Converged at iteration 25, L1 6.83925e-05, Linf 0.00274273, total time[s] 0.067524 +Converged at iteration 26, L1 8.30388e-05, Linf 0.00666746, total time[s] 0.069574 +Converged at iteration 25, L1 4.55374e-05, Linf 0.00685481, total time[s] 0.067454 +Converged at iteration 27, L1 5.54437e-05, Linf 0.0158056, total time[s] 0.090943 +Converged at iteration 21, L1 6.52735e-05, Linf 0.00844049, total time[s] 0.072452 +Converged at iteration 20, L1 6.46951e-05, Linf 0.00302956, total time[s] 0.060254 +Converged at iteration 23, L1 7.00314e-05, Linf 0.00300146, total time[s] 0.062851 +Converged at iteration 25, L1 6.4206e-05, Linf 0.00225677, total time[s] 0.070496 +Converged at iteration 22, L1 5.18762e-05, Linf 0.00197147, total time[s] 0.080585 +Converged at iteration 21, L1 6.50158e-05, Linf 0.00328242, total time[s] 0.066764 +Converged at iteration 33, L1 3.54759e-05, Linf 0.00294137, total time[s] 0.118951 +Converged at iteration 23, L1 6.07409e-05, Linf 0.00412336, total time[s] 0.071193 +Converged at iteration 24, L1 7.85872e-05, Linf 0.00555676, total time[s] 0.072007 +Converged at iteration 26, L1 7.7453e-05, Linf 0.00439375, total time[s] 0.07936 +Converged at iteration 23, L1 6.79901e-05, Linf 0.00237083, total time[s] 0.079386 +Converged at iteration 23, L1 7.34961e-05, Linf 0.00179569, total time[s] 0.065278 +Converged at iteration 27, L1 6.91057e-05, Linf 0.00402579, total time[s] 0.071895 +Converged at iteration 29, L1 7.28543e-05, Linf 0.00476544, total time[s] 0.076193 +Converged at iteration 28, L1 6.60772e-05, Linf 0.00502492, total time[s] 0.074875 +Converged at iteration 32, L1 8.82324e-05, Linf 0.00598958, total time[s] 0.087094 +Converged at iteration 29, L1 5.70993e-05, Linf 0.00162255, total time[s] 0.079034 +Converged at iteration 31, L1 7.97864e-05, Linf 0.0106459, total time[s] 0.084758 +Converged at iteration 31, L1 6.34138e-05, Linf 0.00280079, total time[s] 0.08109 +Converged at iteration 33, L1 7.6015e-05, Linf 0.0041607, total time[s] 0.086196 +Converged at iteration 32, L1 6.38021e-05, Linf 0.00972914, total time[s] 0.085318 +Converged at iteration 33, L1 9.50748e-05, Linf 0.0240826, total time[s] 0.086522 +Converged at iteration 29, L1 8.01889e-05, Linf 0.0188238, total time[s] 0.077638 +Converged at iteration 25, L1 7.47827e-05, Linf 0.00329846, total time[s] 0.066752 +Converged at iteration 38, L1 4.70955e-05, Linf 0.012289, total time[s] 0.101623 +Converged at iteration 36, L1 5.1499e-05, Linf 0.0112342, total time[s] 0.099416 +Converged at iteration 25, L1 6.82216e-05, Linf 0.00272522, total time[s] 0.07036 +Converged at iteration 26, L1 8.42656e-05, Linf 0.00674401, total time[s] 0.069809 +Converged at iteration 25, L1 4.5993e-05, Linf 0.00679336, total time[s] 0.067286 +Converged at iteration 27, L1 5.66929e-05, Linf 0.0155104, total time[s] 0.075235 +Converged at iteration 21, L1 6.59236e-05, Linf 0.00856525, total time[s] 0.060998 +Converged at iteration 20, L1 6.55978e-05, Linf 0.00307734, total time[s] 0.059711 +Converged at iteration 23, L1 6.93398e-05, Linf 0.00303501, total time[s] 0.069917 +Converged at iteration 25, L1 6.47377e-05, Linf 0.00227427, total time[s] 0.073032 +Converged at iteration 22, L1 5.13901e-05, Linf 0.00196113, total time[s] 0.06229 +Converged at iteration 21, L1 6.58248e-05, Linf 0.00332659, total time[s] 0.073628 +Converged at iteration 33, L1 3.5753e-05, Linf 0.00295294, total time[s] 0.093348 +Converged at iteration 23, L1 6.1175e-05, Linf 0.00416046, total time[s] 0.065087 +Converged at iteration 24, L1 7.61566e-05, Linf 0.00557364, total time[s] 0.067584 +Converged at iteration 26, L1 7.76492e-05, Linf 0.00438706, total time[s] 0.067721 +Converged at iteration 23, L1 6.72997e-05, Linf 0.00237948, total time[s] 0.061225 +Converged at iteration 23, L1 7.27366e-05, Linf 0.00181649, total time[s] 0.060636 +Converged at iteration 27, L1 6.93964e-05, Linf 0.00404993, total time[s] 0.071416 +Converged at iteration 29, L1 7.43636e-05, Linf 0.0048616, total time[s] 0.076384 +Converged at iteration 28, L1 6.57253e-05, Linf 0.00505242, total time[s] 0.073298 +Converged at iteration 32, L1 8.80085e-05, Linf 0.00600288, total time[s] 0.082146 +Converged at iteration 29, L1 5.72999e-05, Linf 0.00163982, total time[s] 0.075421 +Converged at iteration 31, L1 7.91066e-05, Linf 0.0106126, total time[s] 0.081495 +Converged at iteration 31, L1 6.36807e-05, Linf 0.00281105, total time[s] 0.082113 +Converged at iteration 33, L1 7.62534e-05, Linf 0.00418271, total time[s] 0.085364 +Converged at iteration 32, L1 6.5581e-05, Linf 0.00991885, total time[s] 0.082411 +Converged at iteration 33, L1 9.70397e-05, Linf 0.0246483, total time[s] 0.085136 +Converged at iteration 29, L1 7.76602e-05, Linf 0.0186431, total time[s] 0.076969 +Converged at iteration 25, L1 7.51447e-05, Linf 0.0033152, total time[s] 0.065166 +Converged at iteration 38, L1 5.03306e-05, Linf 0.0126173, total time[s] 0.102471 +Converged at iteration 36, L1 8.33862e-05, Linf 0.0114244, total time[s] 0.106131 +Converged at iteration 25, L1 6.78848e-05, Linf 0.00268858, total time[s] 0.071924 +Converged at iteration 26, L1 8.9404e-05, Linf 0.00708114, total time[s] 0.078454 +Converged at iteration 24, L1 9.93685e-05, Linf 0.0123309, total time[s] 0.06352 +Converged at iteration 27, L1 5.82335e-05, Linf 0.0163552, total time[s] 0.077423 +Converged at iteration 21, L1 6.78314e-05, Linf 0.00844171, total time[s] 0.066468 +Converged at iteration 20, L1 6.70806e-05, Linf 0.00314825, total time[s] 0.05752 +Converged at iteration 23, L1 6.85331e-05, Linf 0.00311594, total time[s] 0.071341 +Converged at iteration 25, L1 6.52274e-05, Linf 0.00230646, total time[s] 0.081164 +Converged at iteration 22, L1 5.08289e-05, Linf 0.00195418, total time[s] 0.073 +Converged at iteration 21, L1 6.92624e-05, Linf 0.00490343, total time[s] 0.071416 +Converged at iteration 33, L1 4.43286e-05, Linf 0.00297508, total time[s] 0.100193 +Converged at iteration 23, L1 6.23472e-05, Linf 0.00424919, total time[s] 0.074746 +Converged at iteration 24, L1 7.77511e-05, Linf 0.00562273, total time[s] 0.066544 +Converged at iteration 26, L1 7.65345e-05, Linf 0.00432038, total time[s] 0.119252 +Converged at iteration 23, L1 6.65877e-05, Linf 0.0024332, total time[s] 0.064432 +Converged at iteration 23, L1 7.43576e-05, Linf 0.00186209, total time[s] 0.065724 +Converged at iteration 27, L1 7.06541e-05, Linf 0.00410284, total time[s] 0.070562 +Converged at iteration 29, L1 7.65026e-05, Linf 0.00509623, total time[s] 0.089326 +Converged at iteration 28, L1 6.73092e-05, Linf 0.00511783, total time[s] 0.094459 +Converged at iteration 32, L1 8.70102e-05, Linf 0.00599546, total time[s] 0.106031 +Converged at iteration 29, L1 5.91034e-05, Linf 0.0016863, total time[s] 0.099756 +Converged at iteration 31, L1 8.01291e-05, Linf 0.0107105, total time[s] 0.097311 +Converged at iteration 31, L1 6.72651e-05, Linf 0.00284567, total time[s] 0.110761 +Converged at iteration 33, L1 7.7115e-05, Linf 0.00422212, total time[s] 0.108433 +Converged at iteration 32, L1 6.96955e-05, Linf 0.0105973, total time[s] 0.100253 +Converged at iteration 34, L1 3.903e-05, Linf 0.00862372, total time[s] 0.127095 +Converged at iteration 29, L1 7.56653e-05, Linf 0.0191597, total time[s] 0.079035 +Converged at iteration 25, L1 7.628e-05, Linf 0.00331988, total time[s] 0.068138 +Converged at iteration 38, L1 4.86534e-05, Linf 0.012798, total time[s] 0.096958 +Converged at iteration 36, L1 5.2905e-05, Linf 0.0118022, total time[s] 0.092117 +Converged at iteration 25, L1 6.73199e-05, Linf 0.00268059, total time[s] 0.065661 +Converged at iteration 26, L1 8.8957e-05, Linf 0.00721066, total time[s] 0.072335 +Converged at iteration 24, L1 9.81052e-05, Linf 0.0121996, total time[s] 0.067587 +Converged at iteration 27, L1 5.92059e-05, Linf 0.0167819, total time[s] 0.074145 +Converged at iteration 21, L1 6.83681e-05, Linf 0.00857903, total time[s] 0.067505 +Converged at iteration 20, L1 6.8155e-05, Linf 0.0032052, total time[s] 0.05747 +Converged at iteration 23, L1 6.7501e-05, Linf 0.00314205, total time[s] 0.066039 +Converged at iteration 25, L1 6.52446e-05, Linf 0.00232786, total time[s] 0.06713 +Converged at iteration 22, L1 5.0555e-05, Linf 0.00193474, total time[s] 0.06065 +Converged at iteration 21, L1 6.71883e-05, Linf 0.00347188, total time[s] 0.057997 +Converged at iteration 33, L1 3.76034e-05, Linf 0.00298827, total time[s] 0.085661 +Converged at iteration 23, L1 6.29439e-05, Linf 0.00429247, total time[s] 0.063028 +Converged at iteration 24, L1 7.84451e-05, Linf 0.00564583, total time[s] 0.065596 +Converged at iteration 26, L1 7.69018e-05, Linf 0.00431666, total time[s] 0.070702 +Converged at iteration 23, L1 6.62083e-05, Linf 0.00245633, total time[s] 0.064229 +Converged at iteration 23, L1 7.31444e-05, Linf 0.00187717, total time[s] 0.061875 +Converged at iteration 27, L1 7.40352e-05, Linf 0.00412944, total time[s] 0.074273 +Converged at iteration 29, L1 7.65182e-05, Linf 0.00521257, total time[s] 0.080617 +Converged at iteration 28, L1 6.68387e-05, Linf 0.0051498, total time[s] 0.074561 +Converged at iteration 32, L1 8.70275e-05, Linf 0.00601385, total time[s] 0.083233 +Converged at iteration 29, L1 6.00039e-05, Linf 0.00170598, total time[s] 0.079078 +Converged at iteration 31, L1 7.71572e-05, Linf 0.010537, total time[s] 0.080572 +Converged at iteration 31, L1 6.57696e-05, Linf 0.00285101, total time[s] 0.081284 +Converged at iteration 33, L1 7.67313e-05, Linf 0.0042369, total time[s] 0.087733 +Converged at iteration 32, L1 7.14796e-05, Linf 0.0105436, total time[s] 0.084517 +Converged at iteration 34, L1 3.9597e-05, Linf 0.00887362, total time[s] 0.092377 +Converged at iteration 29, L1 7.43642e-05, Linf 0.0195562, total time[s] 0.077806 +Converged at iteration 25, L1 7.66265e-05, Linf 0.00330288, total time[s] 0.068617 +Converged at iteration 38, L1 4.92758e-05, Linf 0.0131294, total time[s] 0.101617 +Converged at iteration 36, L1 5.35029e-05, Linf 0.0120582, total time[s] 0.093884 +Converged at iteration 25, L1 6.72143e-05, Linf 0.0026554, total time[s] 0.069856 +Converged at iteration 26, L1 9.1152e-05, Linf 0.0073922, total time[s] 0.069294 +Converged at iteration 24, L1 9.63303e-05, Linf 0.0120573, total time[s] 0.064712 +Converged at iteration 27, L1 6.06018e-05, Linf 0.0173652, total time[s] 0.071436 +Converged at iteration 21, L1 6.8742e-05, Linf 0.00858859, total time[s] 0.056859 +Converged at iteration 20, L1 6.88099e-05, Linf 0.00325758, total time[s] 0.054199 +Converged at iteration 23, L1 6.68648e-05, Linf 0.00318686, total time[s] 0.060965 +Converged at iteration 25, L1 6.55331e-05, Linf 0.00234775, total time[s] 0.06541 +Converged at iteration 22, L1 4.99505e-05, Linf 0.00195284, total time[s] 0.058741 +Converged at iteration 21, L1 6.79537e-05, Linf 0.00353421, total time[s] 0.056221 +Converged at iteration 33, L1 3.8542e-05, Linf 0.00300358, total time[s] 0.084452 +Converged at iteration 23, L1 7.67294e-05, Linf 0.00435345, total time[s] 0.061871 +Converged at iteration 24, L1 8.12614e-05, Linf 0.00567967, total time[s] 0.063738 +Converged at iteration 26, L1 7.6332e-05, Linf 0.00426986, total time[s] 0.068012 +Converged at iteration 23, L1 6.6127e-05, Linf 0.00248928, total time[s] 0.063075 +Converged at iteration 23, L1 7.12499e-05, Linf 0.00190518, total time[s] 0.060979 +Converged at iteration 27, L1 6.93334e-05, Linf 0.00416919, total time[s] 0.070496 +Converged at iteration 29, L1 8.01295e-05, Linf 0.00537335, total time[s] 0.075002 +Converged at iteration 28, L1 6.75987e-05, Linf 0.00519446, total time[s] 0.07338 +Converged at iteration 32, L1 8.6368e-05, Linf 0.00601947, total time[s] 0.086808 +Converged at iteration 29, L1 6.16607e-05, Linf 0.0017345, total time[s] 0.07566 +Converged at iteration 31, L1 7.61142e-05, Linf 0.0105145, total time[s] 0.079618 +Converged at iteration 31, L1 6.57171e-05, Linf 0.00285902, total time[s] 0.079672 +Converged at iteration 33, L1 7.70834e-05, Linf 0.0042707, total time[s] 0.090085 +Converged at iteration 32, L1 7.45263e-05, Linf 0.0108166, total time[s] 0.081938 +Converged at iteration 34, L1 4.025e-05, Linf 0.00921024, total time[s] 0.086788 +Converged at iteration 29, L1 7.28835e-05, Linf 0.0193144, total time[s] 0.075105 +Converged at iteration 25, L1 7.70749e-05, Linf 0.00328745, total time[s] 0.06651 +Converged at iteration 38, L1 4.96112e-05, Linf 0.0132661, total time[s] 0.116805 +Converged at iteration 36, L1 5.40582e-05, Linf 0.0122472, total time[s] 0.093305 +Converged at iteration 25, L1 6.68078e-05, Linf 0.00265177, total time[s] 0.066489 +Converged at iteration 26, L1 9.28211e-05, Linf 0.00751535, total time[s] 0.069114 +Converged at iteration 24, L1 9.51669e-05, Linf 0.011935, total time[s] 0.064193 +Converged at iteration 27, L1 9.19144e-05, Linf 0.0177948, total time[s] 0.071722 +Converged at iteration 21, L1 6.89343e-05, Linf 0.00860514, total time[s] 0.056128 +Converged at iteration 20, L1 7.00752e-05, Linf 0.00334734, total time[s] 0.055669 +Converged at iteration 23, L1 6.64356e-05, Linf 0.0032156, total time[s] 0.063827 +Converged at iteration 50, L1 9.09969e-05, Linf 0.000441941, total time[s] 0.138368 +Converged at iteration 22, L1 5.00808e-05, Linf 0.00195655, total time[s] 0.063245 +Converged at iteration 21, L1 6.85394e-05, Linf 0.00358127, total time[s] 0.056903 +Converged at iteration 33, L1 4.00818e-05, Linf 0.00296752, total time[s] 0.088887 +Converged at iteration 23, L1 6.45275e-05, Linf 0.00439318, total time[s] 0.062119 +Converged at iteration 24, L1 8.16362e-05, Linf 0.00570435, total time[s] 0.062928 +Converged at iteration 26, L1 7.86243e-05, Linf 0.0140329, total time[s] 0.067922 +Converged at iteration 23, L1 6.58224e-05, Linf 0.00251227, total time[s] 0.066843 +Converged at iteration 23, L1 7.06242e-05, Linf 0.00191909, total time[s] 0.061812 +Converged at iteration 27, L1 6.89654e-05, Linf 0.00418805, total time[s] 0.071091 +Converged at iteration 29, L1 8.19643e-05, Linf 0.00547417, total time[s] 0.076448 +Converged at iteration 28, L1 6.92425e-05, Linf 0.00522716, total time[s] 0.079592 +Converged at iteration 32, L1 8.62326e-05, Linf 0.00602606, total time[s] 0.11977 +Converged at iteration 29, L1 6.26685e-05, Linf 0.00175338, total time[s] 0.115195 +Converged at iteration 31, L1 7.60897e-05, Linf 0.0104587, total time[s] 0.08881 +Converged at iteration 31, L1 6.51255e-05, Linf 0.00285966, total time[s] 0.095916 +Converged at iteration 33, L1 7.70139e-05, Linf 0.00428273, total time[s] 0.093874 +Converged at iteration 32, L1 7.64622e-05, Linf 0.0110236, total time[s] 0.089204 +Converged at iteration 34, L1 4.07759e-05, Linf 0.00946863, total time[s] 0.089554 +Converged at iteration 29, L1 7.1576e-05, Linf 0.0190909, total time[s] 0.081282 +Converged at iteration 25, L1 7.75545e-05, Linf 0.00328695, total time[s] 0.065915 +Converged at iteration 38, L1 4.96049e-05, Linf 0.0132054, total time[s] 0.104439 +Converged at iteration 36, L1 5.40038e-05, Linf 0.0121546, total time[s] 0.13172 +Converged at iteration 25, L1 6.70991e-05, Linf 0.00265356, total time[s] 0.07275 +Converged at iteration 26, L1 9.19633e-05, Linf 0.00745249, total time[s] 0.085544 +Converged at iteration 24, L1 9.78898e-05, Linf 0.0119962, total time[s] 0.070113 +Converged at iteration 27, L1 6.1637e-05, Linf 0.0175702, total time[s] 0.093089 +Converged at iteration 21, L1 6.90317e-05, Linf 0.00847596, total time[s] 0.073582 +Converged at iteration 20, L1 6.93919e-05, Linf 0.00326271, total time[s] 0.09663 +Converged at iteration 23, L1 6.66605e-05, Linf 0.0032031, total time[s] 0.070898 +Converged at iteration 25, L1 6.57532e-05, Linf 0.00235905, total time[s] 0.081696 +Converged at iteration 22, L1 4.99879e-05, Linf 0.00195547, total time[s] 0.062178 +Converged at iteration 21, L1 6.84893e-05, Linf 0.00355632, total time[s] 0.062955 +Converged at iteration 33, L1 3.88492e-05, Linf 0.00293893, total time[s] 0.10365 +Converged at iteration 23, L1 6.49505e-05, Linf 0.00437292, total time[s] 0.06318 +Converged at iteration 24, L1 8.01563e-05, Linf 0.00569193, total time[s] 0.063921 +Converged at iteration 26, L1 7.70677e-05, Linf 0.00427003, total time[s] 0.07069 +Converged at iteration 23, L1 6.63892e-05, Linf 0.00249767, total time[s] 0.068428 +Converged at iteration 23, L1 7.07002e-05, Linf 0.00190405, total time[s] 0.074841 +Converged at iteration 27, L1 7.18611e-05, Linf 0.0041746, total time[s] 0.077186 +Converged at iteration 29, L1 8.11571e-05, Linf 0.00541955, total time[s] 0.099083 +Converged at iteration 28, L1 6.79213e-05, Linf 0.00520615, total time[s] 0.083791 +Converged at iteration 32, L1 8.66747e-05, Linf 0.00602144, total time[s] 0.090402 +Converged at iteration 29, L1 6.36019e-05, Linf 0.00174503, total time[s] 0.08928 +Converged at iteration 31, L1 7.64279e-05, Linf 0.0107876, total time[s] 0.091128 +Converged at iteration 31, L1 6.54434e-05, Linf 0.00285878, total time[s] 0.090414 +Converged at iteration 33, L1 7.70909e-05, Linf 0.00427664, total time[s] 0.085421 +Converged at iteration 32, L1 7.70659e-05, Linf 0.0109116, total time[s] 0.112007 +Converged at iteration 34, L1 4.09498e-05, Linf 0.00933458, total time[s] 0.121329 +Converged at iteration 29, L1 7.21511e-05, Linf 0.0192021, total time[s] 0.090045 +Converged at iteration 25, L1 7.73904e-05, Linf 0.00325346, total time[s] 0.142839 +Converged at iteration 38, L1 4.97549e-05, Linf 0.013301, total time[s] 0.454045 +Converged at iteration 36, L1 5.43803e-05, Linf 0.0122919, total time[s] 0.202085 +Converged at iteration 25, L1 6.65777e-05, Linf 0.00263807, total time[s] 0.120319 +Converged at iteration 26, L1 9.39482e-05, Linf 0.00756706, total time[s] 0.127373 +Converged at iteration 27, L1 5.93701e-05, Linf 0.0104852, total time[s] 0.369615 +Converged at iteration 27, L1 6.19494e-05, Linf 0.0177466, total time[s] 0.092404 +Converged at iteration 21, L1 6.90199e-05, Linf 0.00859477, total time[s] 0.08455 +Converged at iteration 20, L1 7.01395e-05, Linf 0.00330648, total time[s] 0.103964 +Converged at iteration 23, L1 6.72321e-05, Linf 0.00324864, total time[s] 0.095931 +Converged at iteration 25, L1 6.61033e-05, Linf 0.00236934, total time[s] 0.079404 +Converged at iteration 22, L1 4.96403e-05, Linf 0.00196439, total time[s] 0.07482 +Converged at iteration 21, L1 6.92059e-05, Linf 0.00359639, total time[s] 0.058194 +Converged at iteration 33, L1 3.9467e-05, Linf 0.00301951, total time[s] 0.087952 +Converged at iteration 23, L1 6.47816e-05, Linf 0.00440773, total time[s] 0.063594 +Converged at iteration 24, L1 8.06883e-05, Linf 0.00571276, total time[s] 0.063677 +Converged at iteration 26, L1 7.65464e-05, Linf 0.00424105, total time[s] 0.077976 +Converged at iteration 23, L1 6.55833e-05, Linf 0.00252106, total time[s] 0.06978 +Converged at iteration 23, L1 7.26654e-05, Linf 0.0019296, total time[s] 0.061294 +Converged at iteration 27, L1 6.86322e-05, Linf 0.00419929, total time[s] 0.076702 +Converged at iteration 29, L1 8.17035e-05, Linf 0.00552813, total time[s] 0.079852 +Converged at iteration 28, L1 6.83714e-05, Linf 0.00523947, total time[s] 0.073915 +Converged at iteration 32, L1 8.57837e-05, Linf 0.00602133, total time[s] 0.085776 +Converged at iteration 29, L1 6.30549e-05, Linf 0.00176288, total time[s] 0.085246 +Converged at iteration 31, L1 7.49923e-05, Linf 0.0104725, total time[s] 0.07922 +Converged at iteration 31, L1 6.49114e-05, Linf 0.00286412, total time[s] 0.082331 +Converged at iteration 33, L1 7.80631e-05, Linf 0.00429451, total time[s] 0.087998 +Converged at iteration 32, L1 7.7542e-05, Linf 0.0110851, total time[s] 0.086267 +Converged at iteration 34, L1 4.08734e-05, Linf 0.00954027, total time[s] 0.088347 +Converged at iteration 29, L1 7.4556e-05, Linf 0.0196844, total time[s] 0.124455 +Converged at iteration 25, L1 7.77676e-05, Linf 0.00328826, total time[s] 0.116331 +Converged at iteration 38, L1 4.95376e-05, Linf 0.0132539, total time[s] 0.112713 +Converged at iteration 36, L1 5.4027e-05, Linf 0.0122319, total time[s] 0.109078 +Converged at iteration 25, L1 6.68396e-05, Linf 0.00264706, total time[s] 0.070305 +Converged at iteration 26, L1 9.27322e-05, Linf 0.00750987, total time[s] 0.072983 +Converged at iteration 24, L1 9.54257e-05, Linf 0.0119521, total time[s] 0.069543 +Converged at iteration 27, L1 6.15328e-05, Linf 0.0177567, total time[s] 0.079914 +Converged at iteration 21, L1 6.88746e-05, Linf 0.00847912, total time[s] 0.064426 +Converged at iteration 20, L1 6.97477e-05, Linf 0.00330071, total time[s] 0.055951 +Converged at iteration 23, L1 6.65343e-05, Linf 0.00321854, total time[s] 0.064517 +Converged at iteration 25, L1 6.58445e-05, Linf 0.0023645, total time[s] 0.066528 +Converged at iteration 22, L1 5.00204e-05, Linf 0.00196074, total time[s] 0.070496 +Converged at iteration 21, L1 6.86576e-05, Linf 0.00357657, total time[s] 0.067799 +Converged at iteration 33, L1 3.91404e-05, Linf 0.00301521, total time[s] 0.118715 +Converged at iteration 23, L1 6.50264e-05, Linf 0.00439035, total time[s] 0.068561 +Converged at iteration 24, L1 8.06228e-05, Linf 0.00571061, total time[s] 0.098762 +Converged at iteration 26, L1 7.808e-05, Linf 0.00425727, total time[s] 0.08053 +Converged at iteration 23, L1 6.58459e-05, Linf 0.00250798, total time[s] 0.072269 +Converged at iteration 23, L1 7.15469e-05, Linf 0.00191503, total time[s] 0.072926 +Converged at iteration 27, L1 6.99453e-05, Linf 0.00419683, total time[s] 0.077118 +Converged at iteration 29, L1 8.19825e-05, Linf 0.00547046, total time[s] 0.075909 +Converged at iteration 28, L1 6.82491e-05, Linf 0.0052325, total time[s] 0.073754 +Converged at iteration 32, L1 8.65509e-05, Linf 0.00602256, total time[s] 0.09525 +Converged at iteration 29, L1 6.30766e-05, Linf 0.00174837, total time[s] 0.087526 +Converged at iteration 31, L1 7.56048e-05, Linf 0.01048, total time[s] 0.088734 +Converged at iteration 31, L1 6.51026e-05, Linf 0.00286115, total time[s] 0.082584 +Converged at iteration 33, L1 7.71057e-05, Linf 0.00428573, total time[s] 0.086206 +Converged at iteration 32, L1 7.62623e-05, Linf 0.011003, total time[s] 0.083604 +Converged at iteration 34, L1 4.07727e-05, Linf 0.00944744, total time[s] 0.088825 +Converged at iteration 29, L1 7.18006e-05, Linf 0.0191293, total time[s] 0.082966 +Converged at iteration 25, L1 7.76192e-05, Linf 0.00328728, total time[s] 0.072865 +Converged at iteration 38, L1 6.13704e-05, Linf 0.013284, total time[s] 0.135676 +Converged at iteration 36, L1 5.42463e-05, Linf 0.0122655, total time[s] 0.103518 +Converged at iteration 25, L1 6.67783e-05, Linf 0.00264471, total time[s] 0.066938 +Converged at iteration 26, L1 9.31224e-05, Linf 0.00753854, total time[s] 0.068208 +Converged at iteration 24, L1 9.49356e-05, Linf 0.0117369, total time[s] 0.063607 +Converged at iteration 27, L1 6.17135e-05, Linf 0.0178422, total time[s] 0.072296 +Converged at iteration 21, L1 6.89888e-05, Linf 0.00860144, total time[s] 0.063478 +Converged at iteration 20, L1 7.005e-05, Linf 0.003314, total time[s] 0.055177 +Converged at iteration 23, L1 6.66814e-05, Linf 0.00322389, total time[s] 0.066851 +Converged at iteration 25, L1 6.60484e-05, Linf 0.00236897, total time[s] 0.068207 +Converged at iteration 22, L1 4.98887e-05, Linf 0.00196278, total time[s] 0.068102 +Converged at iteration 21, L1 6.87241e-05, Linf 0.00358801, total time[s] 0.065327 +Converged at iteration 33, L1 3.95018e-05, Linf 0.00296324, total time[s] 0.108758 +Converged at iteration 23, L1 7.17468e-05, Linf 0.00439928, total time[s] 0.077531 +Converged at iteration 24, L1 8.25576e-05, Linf 0.0057078, total time[s] 0.094549 +Converged at iteration 26, L1 7.71666e-05, Linf 0.00425364, total time[s] 0.100044 +Converged at iteration 23, L1 6.56517e-05, Linf 0.00251595, total time[s] 0.092453 +Converged at iteration 23, L1 7.05278e-05, Linf 0.00192263, total time[s] 0.070524 +Converged at iteration 27, L1 6.8317e-05, Linf 0.00419147, total time[s] 0.087231 +Converged at iteration 29, L1 8.16137e-05, Linf 0.00551646, total time[s] 0.090005 +Converged at iteration 28, L1 6.82609e-05, Linf 0.00523334, total time[s] 0.092711 +Converged at iteration 32, L1 8.59372e-05, Linf 0.00602437, total time[s] 0.11269 +Converged at iteration 29, L1 6.28513e-05, Linf 0.00175648, total time[s] 0.11733 +Converged at iteration 31, L1 7.67234e-05, Linf 0.0104662, total time[s] 0.121002 +Converged at iteration 31, L1 6.60216e-05, Linf 0.00286186, total time[s] 0.135274 +Converged at iteration 33, L1 7.68485e-05, Linf 0.00428106, total time[s] 0.10611 +Converged at iteration 32, L1 7.98175e-05, Linf 0.0110553, total time[s] 0.15439 +Converged at iteration 34, L1 4.10302e-05, Linf 0.00950401, total time[s] 0.12934 +Converged at iteration 29, L1 7.48123e-05, Linf 0.0190697, total time[s] 0.092439 +Converged at iteration 25, L1 7.85462e-05, Linf 0.003288, total time[s] 0.083746 +Converged at iteration 38, L1 5.01834e-05, Linf 0.0133564, total time[s] 0.115988 +Converged at iteration 36, L1 5.46061e-05, Linf 0.0123814, total time[s] 0.128602 +Converged at iteration 25, L1 6.63545e-05, Linf 0.00263596, total time[s] 0.093786 +Converged at iteration 26, L1 9.44327e-05, Linf 0.00764573, total time[s] 0.079414 +Converged at iteration 24, L1 9.44492e-05, Linf 0.0118433, total time[s] 0.074735 +Converged at iteration 27, L1 6.23737e-05, Linf 0.0181191, total time[s] 0.07872 +Converged at iteration 21, L1 6.92922e-05, Linf 0.00860265, total time[s] 0.060688 +Converged at iteration 20, L1 7.06527e-05, Linf 0.00333522, total time[s] 0.05744 +Converged at iteration 23, L1 6.64328e-05, Linf 0.00325595, total time[s] 0.08161 +Converged at iteration 25, L1 6.59875e-05, Linf 0.00238289, total time[s] 0.08125 +Converged at iteration 22, L1 4.95932e-05, Linf 0.00195893, total time[s] 0.059913 +Converged at iteration 21, L1 7.00913e-05, Linf 0.00361742, total time[s] 0.08554 +Converged at iteration 33, L1 3.99271e-05, Linf 0.00302682, total time[s] 0.097713 +Converged at iteration 23, L1 6.52729e-05, Linf 0.00442261, total time[s] 0.062497 +Converged at iteration 24, L1 8.09951e-05, Linf 0.00572512, total time[s] 0.067484 +Converged at iteration 26, L1 7.7101e-05, Linf 0.00423352, total time[s] 0.069632 +Converged at iteration 23, L1 6.53955e-05, Linf 0.00254311, total time[s] 0.067588 +Converged at iteration 23, L1 7.18654e-05, Linf 0.00194054, total time[s] 0.063139 +Converged at iteration 27, L1 7.0895e-05, Linf 0.00420574, total time[s] 0.072679 +Converged at iteration 29, L1 8.23524e-05, Linf 0.00557509, total time[s] 0.075348 +Converged at iteration 28, L1 6.87324e-05, Linf 0.00525526, total time[s] 0.075471 +Converged at iteration 32, L1 8.67241e-05, Linf 0.00602311, total time[s] 0.091127 +Converged at iteration 29, L1 6.50727e-05, Linf 0.00176957, total time[s] 0.078639 +Converged at iteration 31, L1 7.46685e-05, Linf 0.0104549, total time[s] 0.08199 +Converged at iteration 31, L1 6.46084e-05, Linf 0.00286757, total time[s] 0.080856 +Converged at iteration 33, L1 7.72326e-05, Linf 0.00430114, total time[s] 0.091014 +Converged at iteration 32, L1 9.2792e-05, Linf 0.0111737, total time[s] 0.08526 +Converged at iteration 35, L1 9.78598e-05, Linf 0.0020023, total time[s] 0.099011 +Converged at iteration 29, L1 7.04933e-05, Linf 0.018741, total time[s] 0.084098 +Converged at iteration 25, L1 7.78454e-05, Linf 0.00328991, total time[s] 0.078278 +Converged at iteration 38, L1 5.02349e-05, Linf 0.013265, total time[s] 0.123228 +Converged at iteration 36, L1 5.44297e-05, Linf 0.0124385, total time[s] 0.154714 +Converged at iteration 25, L1 6.61482e-05, Linf 0.00263285, total time[s] 0.07299 +Converged at iteration 26, L1 9.48449e-05, Linf 0.00766531, total time[s] 0.067517 +Converged at iteration 24, L1 9.36652e-05, Linf 0.0118031, total time[s] 0.064302 +Converged at iteration 27, L1 6.27232e-05, Linf 0.0180726, total time[s] 0.080619 +Converged at iteration 21, L1 6.95302e-05, Linf 0.00860393, total time[s] 0.075605 +Converged at iteration 20, L1 7.10469e-05, Linf 0.00332393, total time[s] 0.062666 +Converged at iteration 23, L1 6.6313e-05, Linf 0.00326624, total time[s] 0.070235 +Converged at iteration 25, L1 6.61164e-05, Linf 0.00238055, total time[s] 0.068686 +Converged at iteration 22, L1 4.9341e-05, Linf 0.00195072, total time[s] 0.069127 +Converged at iteration 21, L1 6.91026e-05, Linf 0.00363015, total time[s] 0.07782 +Converged at iteration 33, L1 4.00132e-05, Linf 0.00302601, total time[s] 0.08746 +Converged at iteration 23, L1 6.51157e-05, Linf 0.00443613, total time[s] 0.061899 +Converged at iteration 24, L1 8.38782e-05, Linf 0.0074841, total time[s] 0.064776 +Converged at iteration 26, L1 7.78754e-05, Linf 0.00422872, total time[s] 0.071207 +Converged at iteration 23, L1 6.47953e-05, Linf 0.00253964, total time[s] 0.067498 +Converged at iteration 23, L1 7.02849e-05, Linf 0.00194353, total time[s] 0.065166 +Converged at iteration 27, L1 6.82632e-05, Linf 0.0042109, total time[s] 0.073293 +Converged at iteration 29, L1 8.29326e-05, Linf 0.0056189, total time[s] 0.075312 +Converged at iteration 28, L1 6.89427e-05, Linf 0.00526536, total time[s] 0.07432 +Converged at iteration 32, L1 8.53645e-05, Linf 0.00602614, total time[s] 0.085383 +Converged at iteration 29, L1 6.35181e-05, Linf 0.00177682, total time[s] 0.088869 +Converged at iteration 31, L1 7.48692e-05, Linf 0.0107402, total time[s] 0.102914 +Converged at iteration 31, L1 6.55394e-05, Linf 0.00287185, total time[s] 0.102713 +Converged at iteration 33, L1 7.721e-05, Linf 0.00430151, total time[s] 0.095249 +Converged at iteration 32, L1 7.87037e-05, Linf 0.0112241, total time[s] 0.088224 +Converged at iteration 34, L1 4.17963e-05, Linf 0.00974371, total time[s] 0.119174 +Converged at iteration 29, L1 7.05622e-05, Linf 0.0188694, total time[s] 0.123024 +Converged at iteration 25, L1 7.81086e-05, Linf 0.00329065, total time[s] 0.089176 +Converged at iteration 38, L1 5.01809e-05, Linf 0.013304, total time[s] 0.134746 +Converged at iteration 36, L1 5.47588e-05, Linf 0.0125019, total time[s] 0.135278 +Converged at iteration 25, L1 6.57934e-05, Linf 0.00262724, total time[s] 0.098158 +Converged at iteration 26, L1 9.55995e-05, Linf 0.00772516, total time[s] 0.089988 +Converged at iteration 24, L1 9.31587e-05, Linf 0.0117526, total time[s] 0.0899 +Converged at iteration 27, L1 6.29502e-05, Linf 0.018412, total time[s] 0.109363 +Converged at iteration 21, L1 6.97769e-05, Linf 0.00860553, total time[s] 0.060664 +Converged at iteration 20, L1 7.1336e-05, Linf 0.00335308, total time[s] 0.078198 +Converged at iteration 23, L1 6.74061e-05, Linf 0.0032815, total time[s] 0.1066 +Converged at iteration 25, L1 6.61256e-05, Linf 0.00238668, total time[s] 0.108817 +Converged at iteration 22, L1 4.91707e-05, Linf 0.00193125, total time[s] 0.07204 +Converged at iteration 21, L1 7.70708e-05, Linf 0.0151321, total time[s] 0.064525 +Converged at iteration 33, L1 5.28773e-05, Linf 0.00303529, total time[s] 0.087072 +Converged at iteration 23, L1 6.52258e-05, Linf 0.00445052, total time[s] 0.061368 +Converged at iteration 24, L1 8.12655e-05, Linf 0.00574156, total time[s] 0.06404 +Converged at iteration 26, L1 7.74257e-05, Linf 0.00421639, total time[s] 0.070499 +Converged at iteration 23, L1 6.44341e-05, Linf 0.00254986, total time[s] 0.066108 +Converged at iteration 23, L1 7.19825e-05, Linf 0.00195453, total time[s] 0.064366 +Converged at iteration 27, L1 6.89286e-05, Linf 0.0042173, total time[s] 0.071053 +Converged at iteration 29, L1 8.38725e-05, Linf 0.00565761, total time[s] 0.077191 +Converged at iteration 28, L1 6.91815e-05, Linf 0.00527957, total time[s] 0.074742 +Converged at iteration 32, L1 8.49677e-05, Linf 0.00602391, total time[s] 0.082647 +Converged at iteration 29, L1 6.4429e-05, Linf 0.00178182, total time[s] 0.076427 +Converged at iteration 31, L1 7.42194e-05, Linf 0.0104344, total time[s] 0.083971 +Converged at iteration 31, L1 6.44422e-05, Linf 0.00287385, total time[s] 0.082615 +Converged at iteration 33, L1 7.69213e-05, Linf 0.00431306, total time[s] 0.085377 +Converged at iteration 32, L1 7.9645e-05, Linf 0.0112965, total time[s] 0.083028 +Converged at iteration 34, L1 4.16383e-05, Linf 0.00983845, total time[s] 0.08799 +Converged at iteration 29, L1 6.95519e-05, Linf 0.0188257, total time[s] 0.075981 +Converged at iteration 25, L1 7.81007e-05, Linf 0.00329224, total time[s] 0.067377 +Converged at iteration 38, L1 5.03123e-05, Linf 0.0134618, total time[s] 0.098419 +Converged at iteration 36, L1 5.46683e-05, Linf 0.0125476, total time[s] 0.102683 +Converged at iteration 25, L1 6.55407e-05, Linf 0.00262484, total time[s] 0.068988 +Converged at iteration 26, L1 9.61288e-05, Linf 0.00775105, total time[s] 0.071496 +Converged at iteration 24, L1 9.25993e-05, Linf 0.011704, total time[s] 0.064911 +Converged at iteration 27, L1 6.3725e-05, Linf 0.0185413, total time[s] 0.074146 +Converged at iteration 21, L1 6.99926e-05, Linf 0.00860596, total time[s] 0.06152 +Converged at iteration 20, L1 7.17708e-05, Linf 0.0033757, total time[s] 0.085523 +Converged at iteration 23, L1 6.62939e-05, Linf 0.00329454, total time[s] 0.069536 +Converged at iteration 25, L1 6.62558e-05, Linf 0.00239003, total time[s] 0.075424 +Converged at iteration 22, L1 4.89485e-05, Linf 0.00191208, total time[s] 0.063958 +Converged at iteration 21, L1 6.95154e-05, Linf 0.00366143, total time[s] 0.061582 +Converged at iteration 33, L1 4.07944e-05, Linf 0.00297761, total time[s] 0.107933 +Converged at iteration 23, L1 6.81658e-05, Linf 0.0129646, total time[s] 0.084138 +Converged at iteration 24, L1 8.13738e-05, Linf 0.00574878, total time[s] 0.082483 +Converged at iteration 26, L1 7.73432e-05, Linf 0.00421152, total time[s] 0.090957 +Converged at iteration 23, L1 6.39812e-05, Linf 0.00255767, total time[s] 0.069263 +Converged at iteration 23, L1 7.02308e-05, Linf 0.00195991, total time[s] 0.063478 +Converged at iteration 27, L1 6.77499e-05, Linf 0.00421886, total time[s] 0.09297 +Converged at iteration 29, L1 8.51719e-05, Linf 0.0056979, total time[s] 0.088827 +Converged at iteration 28, L1 6.94727e-05, Linf 0.00531586, total time[s] 0.08998 +Converged at iteration 32, L1 8.53677e-05, Linf 0.00602769, total time[s] 0.086673 +Converged at iteration 29, L1 6.56695e-05, Linf 0.00179489, total time[s] 0.080472 +Converged at iteration 31, L1 7.62065e-05, Linf 0.0104203, total time[s] 0.08929 +Converged at iteration 31, L1 6.54924e-05, Linf 0.00287532, total time[s] 0.085646 +Converged at iteration 33, L1 7.75684e-05, Linf 0.00432354, total time[s] 0.097073 +Converged at iteration 32, L1 7.99636e-05, Linf 0.0114492, total time[s] 0.087923 +Converged at iteration 34, L1 5.13427e-05, Linf 0.0113674, total time[s] 0.103965 +Converged at iteration 29, L1 7.06884e-05, Linf 0.0181558, total time[s] 0.085484 +Converged at iteration 25, L1 8.00117e-05, Linf 0.00332956, total time[s] 0.097132 +Converged at iteration 38, L1 5.13345e-05, Linf 0.0135052, total time[s] 0.098194 +Converged at iteration 38, L1 9.64114e-05, Linf 0.00236734, total time[s] 0.113933 +Converged at iteration 25, L1 6.5163e-05, Linf 0.00261566, total time[s] 0.093867 +Converged at iteration 26, L1 9.75987e-05, Linf 0.00781999, total time[s] 0.068472 +Converged at iteration 24, L1 9.32093e-05, Linf 0.011646, total time[s] 0.063838 +Converged at iteration 27, L1 6.51802e-05, Linf 0.018752, total time[s] 0.071036 +Converged at iteration 21, L1 7.05351e-05, Linf 0.00891129, total time[s] 0.058583 +Converged at iteration 20, L1 7.30889e-05, Linf 0.0033923, total time[s] 0.060558 +Converged at iteration 23, L1 6.59168e-05, Linf 0.00331391, total time[s] 0.095807 +Converged at iteration 25, L1 6.6335e-05, Linf 0.00239349, total time[s] 0.111674 +Converged at iteration 22, L1 4.87979e-05, Linf 0.0018724, total time[s] 0.07402 +Converged at iteration 21, L1 6.98193e-05, Linf 0.00368392, total time[s] 0.072082 +Converged at iteration 33, L1 4.1212e-05, Linf 0.00306864, total time[s] 0.108635 +Converged at iteration 23, L1 6.63177e-05, Linf 0.00448247, total time[s] 0.074618 +Converged at iteration 24, L1 8.17238e-05, Linf 0.00576164, total time[s] 0.071135 +Converged at iteration 26, L1 7.73476e-05, Linf 0.00419241, total time[s] 0.079726 +Converged at iteration 23, L1 6.36043e-05, Linf 0.00257171, total time[s] 0.06883 +Converged at iteration 23, L1 7.03004e-05, Linf 0.00197423, total time[s] 0.073113 +Converged at iteration 27, L1 6.8898e-05, Linf 0.00423062, total time[s] 0.081034 +Converged at iteration 29, L1 8.64776e-05, Linf 0.00575447, total time[s] 0.079126 +Converged at iteration 28, L1 6.94691e-05, Linf 0.00530968, total time[s] 0.079158 +Converged at iteration 32, L1 8.51646e-05, Linf 0.00602475, total time[s] 0.091698 +Converged at iteration 29, L1 6.4983e-05, Linf 0.00179742, total time[s] 0.086222 +Converged at iteration 31, L1 7.34959e-05, Linf 0.0104084, total time[s] 0.103771 +Converged at iteration 31, L1 6.45197e-05, Linf 0.0028827, total time[s] 0.081374 +Converged at iteration 33, L1 7.76948e-05, Linf 0.00431976, total time[s] 0.084724 +Converged at iteration 32, L1 8.18661e-05, Linf 0.0114609, total time[s] 0.082797 +Converged at iteration 34, L1 4.21888e-05, Linf 0.0100655, total time[s] 0.086075 +Converged at iteration 29, L1 6.84782e-05, Linf 0.0192258, total time[s] 0.075079 +Converged at iteration 25, L1 7.82631e-05, Linf 0.00329776, total time[s] 0.067912 +Converged at iteration 38, L1 5.93663e-05, Linf 0.0135649, total time[s] 0.129137 +Converged at iteration 36, L1 5.5205e-05, Linf 0.0129819, total time[s] 0.122007 +Converged at iteration 25, L1 6.50001e-05, Linf 0.00261432, total time[s] 0.06924 +Converged at iteration 26, L1 9.77791e-05, Linf 0.00789012, total time[s] 0.081417 +Converged at iteration 24, L1 9.17205e-05, Linf 0.0117794, total time[s] 0.081764 +Converged at iteration 27, L1 6.44292e-05, Linf 0.0195048, total time[s] 0.069633 +Converged at iteration 21, L1 7.05864e-05, Linf 0.00890284, total time[s] 0.057443 +Converged at iteration 20, L1 7.4593e-05, Linf 0.00340855, total time[s] 0.054872 +Converged at iteration 23, L1 6.62996e-05, Linf 0.00332848, total time[s] 0.060379 +Converged at iteration 25, L1 6.63198e-05, Linf 0.00239866, total time[s] 0.069982 +Converged at iteration 22, L1 4.86398e-05, Linf 0.00185045, total time[s] 0.059698 +Converged at iteration 21, L1 6.99834e-05, Linf 0.00369883, total time[s] 0.056011 +Converged at iteration 33, L1 4.1194e-05, Linf 0.00304566, total time[s] 0.084602 +Converged at iteration 23, L1 6.58307e-05, Linf 0.00449494, total time[s] 0.060575 +Converged at iteration 24, L1 8.18367e-05, Linf 0.00577135, total time[s] 0.063866 +Converged at iteration 26, L1 7.75873e-05, Linf 0.00418736, total time[s] 0.067484 +Converged at iteration 23, L1 6.34038e-05, Linf 0.00256246, total time[s] 0.060542 +Converged at iteration 23, L1 7.02002e-05, Linf 0.00198, total time[s] 0.062999 +Converged at iteration 27, L1 6.75609e-05, Linf 0.00424541, total time[s] 0.07037 +Converged at iteration 29, L1 8.80414e-05, Linf 0.00580402, total time[s] 0.074695 +Converged at iteration 28, L1 6.97103e-05, Linf 0.00532217, total time[s] 0.072968 +Converged at iteration 32, L1 8.46061e-05, Linf 0.00602797, total time[s] 0.081426 +Converged at iteration 29, L1 6.53948e-05, Linf 0.00179923, total time[s] 0.075902 +Converged at iteration 31, L1 7.31866e-05, Linf 0.0103839, total time[s] 0.079223 +Converged at iteration 31, L1 6.45019e-05, Linf 0.00288618, total time[s] 0.09008 +Converged at iteration 33, L1 7.69616e-05, Linf 0.00433251, total time[s] 0.086388 +Converged at iteration 32, L1 8.21611e-05, Linf 0.0115278, total time[s] 0.084426 +Converged at iteration 34, L1 4.24521e-05, Linf 0.0106217, total time[s] 0.088899 +Converged at iteration 29, L1 6.87706e-05, Linf 0.0189335, total time[s] 0.077017 +Converged at iteration 25, L1 7.83049e-05, Linf 0.00330043, total time[s] 0.088263 +Converged at iteration 40, L1 6.7148e-05, Linf 0.0036747, total time[s] 0.109694 +Converged at iteration 35, L1 7.68247e-05, Linf 0.00339755, total time[s] 0.10202 +Converged at iteration 30, L1 9.64398e-05, Linf 0.00432621, total time[s] 0.102849 +Converged at iteration 31, L1 6.27931e-05, Linf 0.00502563, total time[s] 0.117639 +Converged at iteration 27, L1 6.27654e-05, Linf 0.00499561, total time[s] 0.076494 +Converged at iteration 22, L1 8.59084e-05, Linf 0.00449009, total time[s] 0.096068 +Converged at iteration 20, L1 9.636e-05, Linf 0.00397933, total time[s] 0.080433 +Converged at iteration 24, L1 8.84152e-05, Linf 0.00482812, total time[s] 0.082596 +Converged at iteration 28, L1 7.39125e-05, Linf 0.00445909, total time[s] 0.090126 +Converged at iteration 26, L1 8.162e-05, Linf 0.00557619, total time[s] 0.086533 +Converged at iteration 22, L1 7.45988e-05, Linf 0.0050869, total time[s] 0.076701 +Converged at iteration 19, L1 6.65655e-05, Linf 0.00393048, total time[s] 0.069058 +Converged at iteration 30, L1 7.98733e-05, Linf 0.00329675, total time[s] 0.099364 +Converged at iteration 20, L1 8.45088e-05, Linf 0.00455453, total time[s] 0.086691 +Converged at iteration 24, L1 7.09816e-05, Linf 0.00463735, total time[s] 0.085233 +Converged at iteration 31, L1 8.96981e-05, Linf 0.00569112, total time[s] 0.088884 +Converged at iteration 27, L1 9.9162e-05, Linf 0.00569817, total time[s] 0.092282 +Converged at iteration 24, L1 8.79028e-05, Linf 0.00465014, total time[s] 0.069234 +Converged at iteration 23, L1 9.23215e-05, Linf 0.00410192, total time[s] 0.06605 +Converged at iteration 26, L1 7.24871e-05, Linf 0.00446119, total time[s] 0.071132 +Converged at iteration 29, L1 7.82999e-05, Linf 0.00480156, total time[s] 0.091122 +Converged at iteration 34, L1 7.06998e-05, Linf 0.0041211, total time[s] 0.120527 +Converged at iteration 30, L1 9.37012e-05, Linf 0.00442623, total time[s] 0.097206 +Converged at iteration 28, L1 9.51913e-05, Linf 0.00310979, total time[s] 0.088652 +Converged at iteration 32, L1 9.39542e-05, Linf 0.00374075, total time[s] 0.088329 +Converged at iteration 37, L1 7.34053e-05, Linf 0.0032788, total time[s] 0.116334 +Converged at iteration 33, L1 8.44934e-05, Linf 0.00469106, total time[s] 0.111086 +Converged at iteration 28, L1 9.65454e-05, Linf 0.00430198, total time[s] 0.085844 +Converged at iteration 24, L1 8.82852e-05, Linf 0.00325071, total time[s] 0.064822 +Converged at iteration 26, L1 8.98643e-05, Linf 0.00383949, total time[s] 0.093097 +Converged at iteration 40, L1 6.74789e-05, Linf 0.00390187, total time[s] 0.123161 +Converged at iteration 35, L1 8.67823e-05, Linf 0.00360727, total time[s] 0.098236 +Converged at iteration 30, L1 9.17101e-05, Linf 0.00418051, total time[s] 0.128468 +Converged at iteration 31, L1 6.34126e-05, Linf 0.00502317, total time[s] 0.149127 +Converged at iteration 26, L1 9.84918e-05, Linf 0.00577623, total time[s] 0.088541 +Converged at iteration 22, L1 7.16238e-05, Linf 0.0041395, total time[s] 0.094882 +Converged at iteration 21, L1 6.43099e-05, Linf 0.00350015, total time[s] 0.077179 +Converged at iteration 24, L1 8.93931e-05, Linf 0.00495016, total time[s] 0.087931 +Converged at iteration 28, L1 7.32204e-05, Linf 0.00442604, total time[s] 0.087457 +Converged at iteration 26, L1 8.01731e-05, Linf 0.00533327, total time[s] 0.105201 +Converged at iteration 22, L1 7.03234e-05, Linf 0.00441491, total time[s] 0.084603 +Converged at iteration 19, L1 5.49237e-05, Linf 0.0032725, total time[s] 0.076225 +Converged at iteration 30, L1 9.53215e-05, Linf 0.00334372, total time[s] 0.109106 +Converged at iteration 20, L1 8.42524e-05, Linf 0.00472687, total time[s] 0.063443 +Converged at iteration 24, L1 7.12292e-05, Linf 0.00475228, total time[s] 0.076225 +Converged at iteration 31, L1 9.41886e-05, Linf 0.00481987, total time[s] 0.098516 +Converged at iteration 27, L1 9.41209e-05, Linf 0.00468422, total time[s] 0.087945 +Converged at iteration 24, L1 8.51841e-05, Linf 0.00428114, total time[s] 0.063279 +Converged at iteration 23, L1 9.24125e-05, Linf 0.00432074, total time[s] 0.062948 +Converged at iteration 26, L1 7.13098e-05, Linf 0.00465385, total time[s] 0.068457 +Converged at iteration 29, L1 7.52431e-05, Linf 0.00488639, total time[s] 0.074135 +Converged at iteration 34, L1 8.13866e-05, Linf 0.00406122, total time[s] 0.086542 +Converged at iteration 31, L1 7.17597e-05, Linf 0.0035533, total time[s] 0.081995 +Converged at iteration 29, L1 7.03394e-05, Linf 0.00272417, total time[s] 0.075081 +Converged at iteration 32, L1 8.29324e-05, Linf 0.00354817, total time[s] 0.096225 +Converged at iteration 36, L1 8.71774e-05, Linf 0.00357622, total time[s] 0.107841 +Converged at iteration 33, L1 8.33191e-05, Linf 0.00479802, total time[s] 0.101281 +Converged at iteration 28, L1 9.11863e-05, Linf 0.00413216, total time[s] 0.090248 +Converged at iteration 24, L1 8.02963e-05, Linf 0.00293975, total time[s] 0.094657 +Converged at iteration 26, L1 8.40891e-05, Linf 0.00390092, total time[s] 0.075405 +Converged at iteration 40, L1 6.49376e-05, Linf 0.00418845, total time[s] 0.102504 +Converged at iteration 35, L1 9.62063e-05, Linf 0.00385603, total time[s] 0.12418 +Converged at iteration 30, L1 7.69255e-05, Linf 0.00420868, total time[s] 0.091189 +Converged at iteration 31, L1 6.25616e-05, Linf 0.00509346, total time[s] 0.081816 +Converged at iteration 26, L1 9.11166e-05, Linf 0.0056899, total time[s] 0.068502 +Converged at iteration 21, L1 9.60369e-05, Linf 0.00461374, total time[s] 0.056563 +Converged at iteration 21, L1 6.92896e-05, Linf 0.00393371, total time[s] 0.05933 +Converged at iteration 24, L1 8.2974e-05, Linf 0.00519798, total time[s] 0.064914 +Converged at iteration 28, L1 6.81797e-05, Linf 0.00441196, total time[s] 0.073786 +Converged at iteration 26, L1 8.20672e-05, Linf 0.00433697, total time[s] 0.068133 +Converged at iteration 21, L1 8.59653e-05, Linf 0.00434184, total time[s] 0.057609 +Converged at iteration 18, L1 7.36168e-05, Linf 0.00298992, total time[s] 0.051681 +Converged at iteration 31, L1 7.4922e-05, Linf 0.00268279, total time[s] 0.081882 +Converged at iteration 20, L1 8.18337e-05, Linf 0.00487155, total time[s] 0.05375 +Converged at iteration 24, L1 6.89344e-05, Linf 0.00519384, total time[s] 0.070973 +Converged at iteration 30, L1 9.41715e-05, Linf 0.00343158, total time[s] 0.09128 +Converged at iteration 25, L1 9.01404e-05, Linf 0.00470591, total time[s] 0.065153 +Converged at iteration 23, L1 8.36066e-05, Linf 0.00396763, total time[s] 0.06126 +Converged at iteration 23, L1 9.32196e-05, Linf 0.00443803, total time[s] 0.061842 +Converged at iteration 26, L1 6.88918e-05, Linf 0.00492262, total time[s] 0.067813 +Converged at iteration 29, L1 7.12703e-05, Linf 0.00490101, total time[s] 0.077826 +Converged at iteration 32, L1 8.57623e-05, Linf 0.00348659, total time[s] 0.086264 +Converged at iteration 31, L1 7.25376e-05, Linf 0.003048, total time[s] 0.084194 +Converged at iteration 29, L1 7.73738e-05, Linf 0.00291455, total time[s] 0.076796 +Converged at iteration 32, L1 7.57214e-05, Linf 0.00337467, total time[s] 0.081904 +Converged at iteration 35, L1 9.79359e-05, Linf 0.00407303, total time[s] 0.088845 +Converged at iteration 33, L1 8.0648e-05, Linf 0.00505943, total time[s] 0.084145 +Converged at iteration 28, L1 8.42741e-05, Linf 0.00398747, total time[s] 0.073237 +Converged at iteration 24, L1 7.8052e-05, Linf 0.0025685, total time[s] 0.063881 +Converged at iteration 26, L1 8.36605e-05, Linf 0.00404204, total time[s] 0.068992 +Converged at iteration 39, L1 9.34403e-05, Linf 0.00543253, total time[s] 0.098376 +Converged at iteration 36, L1 7.23021e-05, Linf 0.00383794, total time[s] 0.093232 +Converged at iteration 27, L1 5.17772e-05, Linf 0.00565826, total time[s] 0.072314 +Converged at iteration 31, L1 6.04815e-05, Linf 0.00508914, total time[s] 0.087863 +Converged at iteration 26, L1 7.63385e-05, Linf 0.00538576, total time[s] 0.07254 +Converged at iteration 21, L1 7.2141e-05, Linf 0.00380752, total time[s] 0.062936 +Converged at iteration 20, L1 6.89326e-05, Linf 0.00502767, total time[s] 0.057803 +Converged at iteration 22, L1 7.56031e-05, Linf 0.00745696, total time[s] 0.059358 +Converged at iteration 26, L1 9.73076e-05, Linf 0.00653623, total time[s] 0.073739 +Converged at iteration 25, L1 7.4464e-05, Linf 0.00415085, total time[s] 0.073605 +Converged at iteration 20, L1 8.84167e-05, Linf 0.00555825, total time[s] 0.054496 +Converged at iteration 17, L1 8.5247e-05, Linf 0.00400212, total time[s] 0.049061 +Converged at iteration 31, L1 9.13871e-05, Linf 0.00279815, total time[s] 0.093793 +Converged at iteration 20, L1 6.64125e-05, Linf 0.0053928, total time[s] 0.055303 +Converged at iteration 24, L1 6.20891e-05, Linf 0.00553238, total time[s] 0.067621 +Converged at iteration 28, L1 7.07511e-05, Linf 0.00373893, total time[s] 0.082969 +Converged at iteration 23, L1 9.56729e-05, Linf 0.00710216, total time[s] 0.063389 +Converged at iteration 21, L1 9.30094e-05, Linf 0.00485134, total time[s] 0.062138 +Converged at iteration 23, L1 7.86496e-05, Linf 0.00414972, total time[s] 0.060301 +Converged at iteration 25, L1 9.94341e-05, Linf 0.00625577, total time[s] 0.065109 +Converged at iteration 28, L1 9.82356e-05, Linf 0.00578729, total time[s] 0.071525 +Converged at iteration 30, L1 6.86369e-05, Linf 0.00489498, total time[s] 0.075835 +Converged at iteration 28, L1 8.30445e-05, Linf 0.00353552, total time[s] 0.074341 +Converged at iteration 29, L1 8.83982e-05, Linf 0.00330547, total time[s] 0.079301 +Converged at iteration 31, L1 7.01912e-05, Linf 0.00290721, total time[s] 0.084971 +Converged at iteration 31, L1 9.21365e-05, Linf 0.00461287, total time[s] 0.084944 +Converged at iteration 33, L1 7.43196e-05, Linf 0.00530713, total time[s] 0.094387 +Converged at iteration 28, L1 7.03687e-05, Linf 0.00368895, total time[s] 0.072532 +Converged at iteration 24, L1 8.80694e-05, Linf 0.00186805, total time[s] 0.063186 +Converged at iteration 25, L1 6.96391e-05, Linf 0.00422592, total time[s] 0.067185 +Converged at iteration 39, L1 7.79572e-05, Linf 0.00652589, total time[s] 0.099004 +Converged at iteration 36, L1 7.37629e-05, Linf 0.0052718, total time[s] 0.098649 +Converged at iteration 24, L1 7.50907e-05, Linf 0.00411522, total time[s] 0.070506 +Converged at iteration 31, L1 5.85251e-05, Linf 0.00506577, total time[s] 0.081972 +Converged at iteration 25, L1 8.67342e-05, Linf 0.00579217, total time[s] 0.066385 +Converged at iteration 20, L1 9.22961e-05, Linf 0.00380209, total time[s] 0.058586 +Converged at iteration 19, L1 6.6586e-05, Linf 0.0043306, total time[s] 0.052266 +Converged at iteration 20, L1 9.15577e-05, Linf 0.00662354, total time[s] 0.054868 +Converged at iteration 24, L1 7.93999e-05, Linf 0.00498828, total time[s] 0.067609 +Converged at iteration 24, L1 7.67495e-05, Linf 0.00492015, total time[s] 0.064623 +Converged at iteration 20, L1 6.08782e-05, Linf 0.00519212, total time[s] 0.054078 +Converged at iteration 17, L1 5.19492e-05, Linf 0.00242838, total time[s] 0.047467 +Converged at iteration 32, L1 6.90186e-05, Linf 0.00253753, total time[s] 0.082366 +Converged at iteration 19, L1 9.35075e-05, Linf 0.00706827, total time[s] 0.05082 +Converged at iteration 23, L1 7.79853e-05, Linf 0.00710088, total time[s] 0.060727 +Converged at iteration 26, L1 8.14197e-05, Linf 0.00603227, total time[s] 0.068085 +Converged at iteration 23, L1 5.80509e-05, Linf 0.00603984, total time[s] 0.060814 +Converged at iteration 20, L1 8.31032e-05, Linf 0.00552754, total time[s] 0.052085 +Converged at iteration 22, L1 9.95618e-05, Linf 0.00479505, total time[s] 0.059656 +Converged at iteration 25, L1 8.48071e-05, Linf 0.00439993, total time[s] 0.066302 +Converged at iteration 28, L1 7.8193e-05, Linf 0.00360962, total time[s] 0.073774 +Converged at iteration 29, L1 7.48415e-05, Linf 0.00611951, total time[s] 0.075481 +Converged at iteration 27, L1 7.34801e-05, Linf 0.00401973, total time[s] 0.069589 +Converged at iteration 29, L1 7.69644e-05, Linf 0.00380291, total time[s] 0.074669 +Converged at iteration 29, L1 9.30783e-05, Linf 0.00277245, total time[s] 0.074257 +Converged at iteration 28, L1 8.43235e-05, Linf 0.00273845, total time[s] 0.071628 +Converged at iteration 33, L1 6.22804e-05, Linf 0.00585219, total time[s] 0.084215 +Converged at iteration 27, L1 7.07308e-05, Linf 0.00334457, total time[s] 0.070352 +Converged at iteration 24, L1 9.67908e-05, Linf 0.00239079, total time[s] 0.063044 +Converged at iteration 23, L1 7.67795e-05, Linf 0.00333647, total time[s] 0.059287 +Converged at iteration 39, L1 7.46155e-05, Linf 0.0066106, total time[s] 0.09959 +Converged at iteration 36, L1 7.26835e-05, Linf 0.00533567, total time[s] 0.137695 +Converged at iteration 24, L1 7.445e-05, Linf 0.00388135, total time[s] 0.062521 +Converged at iteration 31, L1 5.89531e-05, Linf 0.00828632, total time[s] 0.076602 +Converged at iteration 25, L1 8.86898e-05, Linf 0.00641376, total time[s] 0.06262 +Converged at iteration 20, L1 9.44001e-05, Linf 0.00386676, total time[s] 0.052516 +Converged at iteration 19, L1 6.46489e-05, Linf 0.00438249, total time[s] 0.04958 +Converged at iteration 20, L1 9.02227e-05, Linf 0.00655195, total time[s] 0.052215 +Converged at iteration 24, L1 7.67183e-05, Linf 0.00456736, total time[s] 0.061418 +Converged at iteration 24, L1 7.89947e-05, Linf 0.00498601, total time[s] 0.061519 +Converged at iteration 20, L1 6.11856e-05, Linf 0.00508229, total time[s] 0.05249 +Converged at iteration 16, L1 9.93792e-05, Linf 0.004572, total time[s] 0.043474 +Converged at iteration 32, L1 6.9032e-05, Linf 0.00257312, total time[s] 0.085684 +Converged at iteration 19, L1 9.37188e-05, Linf 0.00697185, total time[s] 0.053593 +Converged at iteration 23, L1 7.74217e-05, Linf 0.00702792, total time[s] 0.070369 +Converged at iteration 26, L1 8.02917e-05, Linf 0.00593946, total time[s] 0.071365 +Converged at iteration 23, L1 5.71265e-05, Linf 0.00598756, total time[s] 0.068078 +Converged at iteration 20, L1 8.26356e-05, Linf 0.00551196, total time[s] 0.055035 +Converged at iteration 23, L1 6.37847e-05, Linf 0.00295572, total time[s] 0.060103 +Converged at iteration 25, L1 8.37796e-05, Linf 0.00419813, total time[s] 0.066966 +Converged at iteration 28, L1 7.77032e-05, Linf 0.00351761, total time[s] 0.077215 +Converged at iteration 29, L1 7.50884e-05, Linf 0.0061243, total time[s] 0.07704 +Converged at iteration 27, L1 7.36866e-05, Linf 0.00399132, total time[s] 0.069838 +Converged at iteration 29, L1 7.81265e-05, Linf 0.00382053, total time[s] 0.077083 +Converged at iteration 29, L1 9.27124e-05, Linf 0.00277462, total time[s] 0.08415 +Converged at iteration 28, L1 8.32352e-05, Linf 0.00266488, total time[s] 0.072495 +Converged at iteration 33, L1 6.01578e-05, Linf 0.0058575, total time[s] 0.082322 +Converged at iteration 27, L1 6.98173e-05, Linf 0.00342988, total time[s] 0.069081 +Converged at iteration 24, L1 9.91964e-05, Linf 0.00243599, total time[s] 0.062086 +Converged at iteration 23, L1 7.55184e-05, Linf 0.00324383, total time[s] 0.062802 +Converged at iteration 39, L1 7.28852e-05, Linf 0.00662663, total time[s] 0.104444 +Converged at iteration 36, L1 7.1245e-05, Linf 0.00539781, total time[s] 0.096054 +Converged at iteration 24, L1 7.41116e-05, Linf 0.00367595, total time[s] 0.062871 +Converged at iteration 31, L1 5.58909e-05, Linf 0.0050451, total time[s] 0.077868 +Converged at iteration 25, L1 8.88209e-05, Linf 0.0059944, total time[s] 0.064492 +Converged at iteration 20, L1 9.92931e-05, Linf 0.00391948, total time[s] 0.121392 +Converged at iteration 19, L1 6.22565e-05, Linf 0.00422887, total time[s] 0.053768 +Converged at iteration 20, L1 8.83596e-05, Linf 0.00608314, total time[s] 0.054811 +Converged at iteration 24, L1 7.43259e-05, Linf 0.00425148, total time[s] 0.062678 +Converged at iteration 24, L1 7.88541e-05, Linf 0.00506564, total time[s] 0.063087 +Converged at iteration 20, L1 6.23345e-05, Linf 0.00517423, total time[s] 0.054262 +Converged at iteration 16, L1 9.78678e-05, Linf 0.00485262, total time[s] 0.047044 +Converged at iteration 32, L1 6.8771e-05, Linf 0.002599, total time[s] 0.083776 +Converged at iteration 19, L1 9.3954e-05, Linf 0.00676354, total time[s] 0.051457 +Converged at iteration 23, L1 7.71927e-05, Linf 0.00694536, total time[s] 0.069952 +Converged at iteration 26, L1 7.97715e-05, Linf 0.00593259, total time[s] 0.0695 +Converged at iteration 23, L1 5.6906e-05, Linf 0.0059908, total time[s] 0.061181 +Converged at iteration 20, L1 8.37766e-05, Linf 0.00551405, total time[s] 0.058507 +Converged at iteration 23, L1 6.51831e-05, Linf 0.00280398, total time[s] 0.060541 +Converged at iteration 25, L1 8.34497e-05, Linf 0.00423902, total time[s] 0.064758 +Converged at iteration 28, L1 7.70976e-05, Linf 0.00354631, total time[s] 0.073194 +Converged at iteration 29, L1 7.5981e-05, Linf 0.00618507, total time[s] 0.074318 +Converged at iteration 27, L1 7.51856e-05, Linf 0.00397816, total time[s] 0.073378 +Converged at iteration 29, L1 7.94985e-05, Linf 0.00387117, total time[s] 0.074191 +Converged at iteration 29, L1 9.27185e-05, Linf 0.00278086, total time[s] 0.075254 +Converged at iteration 28, L1 8.3351e-05, Linf 0.00260709, total time[s] 0.07236 +Converged at iteration 33, L1 5.84668e-05, Linf 0.00585344, total time[s] 0.083002 +Converged at iteration 27, L1 7.10953e-05, Linf 0.00353898, total time[s] 0.069145 +Converged at iteration 25, L1 7.14355e-05, Linf 0.00193576, total time[s] 0.064531 +Converged at iteration 23, L1 7.46211e-05, Linf 0.00318095, total time[s] 0.060928 +Converged at iteration 39, L1 7.3274e-05, Linf 0.00661967, total time[s] 0.102907 +Converged at iteration 36, L1 6.92826e-05, Linf 0.00545906, total time[s] 0.095569 +Converged at iteration 24, L1 7.34727e-05, Linf 0.00336022, total time[s] 0.063242 +Converged at iteration 31, L1 5.55852e-05, Linf 0.00499871, total time[s] 0.079926 +Converged at iteration 25, L1 9.28997e-05, Linf 0.00625215, total time[s] 0.065965 +Converged at iteration 21, L1 5.97845e-05, Linf 0.00343176, total time[s] 0.057568 +Converged at iteration 19, L1 6.01013e-05, Linf 0.00410568, total time[s] 0.070788 +Converged at iteration 20, L1 8.61603e-05, Linf 0.00645492, total time[s] 0.065539 +Converged at iteration 24, L1 7.18637e-05, Linf 0.00445388, total time[s] 0.077184 +Converged at iteration 24, L1 8.05844e-05, Linf 0.0051989, total time[s] 0.078881 +Converged at iteration 20, L1 6.48927e-05, Linf 0.0054985, total time[s] 0.059938 +Converged at iteration 16, L1 9.73847e-05, Linf 0.00505259, total time[s] 0.05416 +Converged at iteration 32, L1 6.79059e-05, Linf 0.00262324, total time[s] 0.119578 +Converged at iteration 19, L1 9.43005e-05, Linf 0.00674311, total time[s] 0.072922 +Converged at iteration 23, L1 7.76436e-05, Linf 0.00683394, total time[s] 0.071216 +Converged at iteration 26, L1 8.01778e-05, Linf 0.00589311, total time[s] 0.090006 +Converged at iteration 23, L1 5.64062e-05, Linf 0.00596925, total time[s] 0.091517 +Converged at iteration 20, L1 8.5234e-05, Linf 0.00551679, total time[s] 0.071039 +Converged at iteration 23, L1 6.73579e-05, Linf 0.00278451, total time[s] 0.079861 +Converged at iteration 25, L1 8.39595e-05, Linf 0.00390405, total time[s] 0.072986 +Converged at iteration 28, L1 7.78333e-05, Linf 0.00378675, total time[s] 0.085428 +Converged at iteration 29, L1 7.73985e-05, Linf 0.00624075, total time[s] 0.078762 +Converged at iteration 27, L1 7.69313e-05, Linf 0.00395502, total time[s] 0.071029 +Converged at iteration 29, L1 8.10138e-05, Linf 0.00392853, total time[s] 0.077719 +Converged at iteration 29, L1 9.28392e-05, Linf 0.00278312, total time[s] 0.074138 +Converged at iteration 28, L1 8.05695e-05, Linf 0.00254224, total time[s] 0.073781 +Converged at iteration 32, L1 9.9158e-05, Linf 0.00696446, total time[s] 0.08737 +Converged at iteration 27, L1 7.17868e-05, Linf 0.00375295, total time[s] 0.07298 +Converged at iteration 25, L1 7.17233e-05, Linf 0.00198861, total time[s] 0.074281 +Converged at iteration 23, L1 7.45231e-05, Linf 0.00310259, total time[s] 0.062253 +Converged at iteration 39, L1 6.979e-05, Linf 0.00660619, total time[s] 0.10793 +Converged at iteration 36, L1 6.68075e-05, Linf 0.00545447, total time[s] 0.118038 +Converged at iteration 24, L1 7.26399e-05, Linf 0.00309785, total time[s] 0.071083 +Converged at iteration 30, L1 9.67042e-05, Linf 0.00610873, total time[s] 0.08486 +Converged at iteration 25, L1 9.80852e-05, Linf 0.0066198, total time[s] 0.068327 +Converged at iteration 21, L1 6.40965e-05, Linf 0.00333754, total time[s] 0.060143 +Converged at iteration 19, L1 5.88159e-05, Linf 0.00389241, total time[s] 0.068674 +Converged at iteration 20, L1 8.32455e-05, Linf 0.0061718, total time[s] 0.054269 +Converged at iteration 24, L1 6.89682e-05, Linf 0.00350349, total time[s] 0.064533 +Converged at iteration 24, L1 8.449e-05, Linf 0.0053896, total time[s] 0.062705 +Converged at iteration 20, L1 6.92016e-05, Linf 0.00568716, total time[s] 0.057206 +Converged at iteration 16, L1 9.71914e-05, Linf 0.00535744, total time[s] 0.052634 +Converged at iteration 32, L1 6.58487e-05, Linf 0.00264454, total time[s] 0.08201 +Converged at iteration 19, L1 9.44994e-05, Linf 0.00658279, total time[s] 0.055107 +Converged at iteration 23, L1 7.68618e-05, Linf 0.00667375, total time[s] 0.062508 +Converged at iteration 26, L1 8.06318e-05, Linf 0.00585981, total time[s] 0.06713 +Converged at iteration 23, L1 5.5905e-05, Linf 0.00596876, total time[s] 0.061042 +Converged at iteration 20, L1 8.87936e-05, Linf 0.00553084, total time[s] 0.053391 +Converged at iteration 23, L1 6.97152e-05, Linf 0.0027245, total time[s] 0.062663 +Converged at iteration 25, L1 8.48824e-05, Linf 0.00380141, total time[s] 0.068006 +Converged at iteration 28, L1 7.93307e-05, Linf 0.00392205, total time[s] 0.080382 +Converged at iteration 29, L1 7.95407e-05, Linf 0.00630973, total time[s] 0.075733 +Converged at iteration 27, L1 7.94042e-05, Linf 0.00393037, total time[s] 0.070472 +Converged at iteration 29, L1 8.28243e-05, Linf 0.00399822, total time[s] 0.075915 +Converged at iteration 29, L1 9.34338e-05, Linf 0.00277568, total time[s] 0.088099 +Converged at iteration 28, L1 8.00072e-05, Linf 0.00248123, total time[s] 0.081948 +Converged at iteration 32, L1 9.64309e-05, Linf 0.00693545, total time[s] 0.093594 +Converged at iteration 27, L1 7.58779e-05, Linf 0.00406532, total time[s] 0.090828 +Converged at iteration 25, L1 6.94401e-05, Linf 0.00201688, total time[s] 0.079406 +Converged at iteration 23, L1 7.50321e-05, Linf 0.00300667, total time[s] 0.074735 +Converged at iteration 39, L1 6.8069e-05, Linf 0.00655511, total time[s] 0.126759 +Converged at iteration 36, L1 6.35255e-05, Linf 0.00554951, total time[s] 0.100241 +Converged at iteration 24, L1 7.26832e-05, Linf 0.00307803, total time[s] 0.063876 +Converged at iteration 30, L1 9.43548e-05, Linf 0.00605523, total time[s] 0.077618 +Converged at iteration 26, L1 5.93647e-05, Linf 0.00586515, total time[s] 0.068006 +Converged at iteration 21, L1 7.47396e-05, Linf 0.00341496, total time[s] 0.056308 +Converged at iteration 19, L1 5.80192e-05, Linf 0.0039566, total time[s] 0.078654 +Converged at iteration 20, L1 8.02687e-05, Linf 0.00645164, total time[s] 0.073823 +Converged at iteration 24, L1 6.59102e-05, Linf 0.00398631, total time[s] 0.081351 +Converged at iteration 24, L1 8.88171e-05, Linf 0.00562581, total time[s] 0.084186 +Converged at iteration 20, L1 7.43268e-05, Linf 0.00581556, total time[s] 0.057328 +Converged at iteration 16, L1 9.71201e-05, Linf 0.0057281, total time[s] 0.048519 +Converged at iteration 32, L1 6.32247e-05, Linf 0.0026425, total time[s] 0.126834 +Converged at iteration 19, L1 9.39533e-05, Linf 0.00641309, total time[s] 0.063783 +Converged at iteration 23, L1 7.61438e-05, Linf 0.0064688, total time[s] 0.06035 +Converged at iteration 26, L1 8.20231e-05, Linf 0.00583513, total time[s] 0.067652 +Converged at iteration 23, L1 5.51334e-05, Linf 0.00598562, total time[s] 0.060949 +Converged at iteration 20, L1 9.26887e-05, Linf 0.0055034, total time[s] 0.05545 +Converged at iteration 23, L1 7.18941e-05, Linf 0.00263612, total time[s] 0.061806 +Converged at iteration 25, L1 8.6079e-05, Linf 0.00368291, total time[s] 0.070787 +Converged at iteration 28, L1 8.12233e-05, Linf 0.00428189, total time[s] 0.07838 +Converged at iteration 40, L1 6.71486e-05, Linf 0.00367483, total time[s] 0.116209 +Converged at iteration 35, L1 7.60938e-05, Linf 0.00339714, total time[s] 0.092637 +Converged at iteration 30, L1 9.62616e-05, Linf 0.00432603, total time[s] 0.075936 +Converged at iteration 31, L1 6.25658e-05, Linf 0.00502564, total time[s] 0.077496 +Converged at iteration 27, L1 6.27233e-05, Linf 0.00499541, total time[s] 0.071573 +Converged at iteration 22, L1 8.58668e-05, Linf 0.00448846, total time[s] 0.058106 +Converged at iteration 20, L1 9.6112e-05, Linf 0.00395687, total time[s] 0.061172 +Converged at iteration 24, L1 8.84271e-05, Linf 0.00480308, total time[s] 0.060912 +Converged at iteration 28, L1 7.39172e-05, Linf 0.00445906, total time[s] 0.070478 +Converged at iteration 26, L1 8.14516e-05, Linf 0.0054815, total time[s] 0.066071 +Converged at iteration 22, L1 7.51462e-05, Linf 0.00508686, total time[s] 0.056676 +Converged at iteration 19, L1 6.63364e-05, Linf 0.00393044, total time[s] 0.049977 +Converged at iteration 30, L1 7.98745e-05, Linf 0.00329634, total time[s] 0.075376 +Converged at iteration 20, L1 8.45323e-05, Linf 0.00455024, total time[s] 0.052404 +Converged at iteration 24, L1 7.10805e-05, Linf 0.00463777, total time[s] 0.063437 +Converged at iteration 31, L1 8.93499e-05, Linf 0.00569249, total time[s] 0.076977 +Converged at iteration 27, L1 9.91925e-05, Linf 0.00568069, total time[s] 0.068439 +Converged at iteration 24, L1 8.82237e-05, Linf 0.00465029, total time[s] 0.061501 +Converged at iteration 23, L1 9.23013e-05, Linf 0.00410187, total time[s] 0.064641 +Converged at iteration 26, L1 7.22138e-05, Linf 0.00446169, total time[s] 0.069298 +Converged at iteration 29, L1 7.84076e-05, Linf 0.00480241, total time[s] 0.076402 +Converged at iteration 34, L1 7.08937e-05, Linf 0.00422634, total time[s] 0.085032 +Converged at iteration 30, L1 9.40531e-05, Linf 0.00442602, total time[s] 0.076247 +Converged at iteration 28, L1 9.49885e-05, Linf 0.00310979, total time[s] 0.071511 +Converged at iteration 32, L1 9.39376e-05, Linf 0.00374079, total time[s] 0.080224 +Converged at iteration 37, L1 7.33885e-05, Linf 0.00327806, total time[s] 0.095072 +Converged at iteration 33, L1 8.45251e-05, Linf 0.00487639, total time[s] 0.102279 +Converged at iteration 28, L1 9.65644e-05, Linf 0.00430244, total time[s] 0.077747 +Converged at iteration 24, L1 8.82811e-05, Linf 0.00325073, total time[s] 0.07142 +Converged at iteration 26, L1 8.98061e-05, Linf 0.00383964, total time[s] 0.071058 +Converged at iteration 40, L1 6.6414e-05, Linf 0.00393408, total time[s] 0.099684 +Converged at iteration 35, L1 8.66305e-05, Linf 0.00360688, total time[s] 0.091097 +Converged at iteration 30, L1 9.16827e-05, Linf 0.00418052, total time[s] 0.075748 +Converged at iteration 31, L1 6.23624e-05, Linf 0.00504684, total time[s] 0.083041 +Converged at iteration 26, L1 9.83541e-05, Linf 0.00577635, total time[s] 0.066232 +Converged at iteration 22, L1 7.16453e-05, Linf 0.00418213, total time[s] 0.056991 +Converged at iteration 21, L1 6.4059e-05, Linf 0.00348502, total time[s] 0.055346 +Converged at iteration 24, L1 8.94331e-05, Linf 0.00495038, total time[s] 0.061272 +Converged at iteration 28, L1 7.32603e-05, Linf 0.00443344, total time[s] 0.083896 +Converged at iteration 26, L1 8.03513e-05, Linf 0.00534491, total time[s] 0.06696 +Converged at iteration 22, L1 7.09326e-05, Linf 0.00441999, total time[s] 0.061307 +Converged at iteration 19, L1 5.58272e-05, Linf 0.00547292, total time[s] 0.059858 +Converged at iteration 30, L1 9.51996e-05, Linf 0.00330736, total time[s] 0.079089 +Converged at iteration 20, L1 8.50489e-05, Linf 0.00466296, total time[s] 0.052736 +Converged at iteration 24, L1 7.12291e-05, Linf 0.00475228, total time[s] 0.078916 +Converged at iteration 31, L1 9.4323e-05, Linf 0.00482246, total time[s] 0.080445 +Converged at iteration 27, L1 9.47549e-05, Linf 0.00465738, total time[s] 0.068241 +Converged at iteration 24, L1 8.5188e-05, Linf 0.00428125, total time[s] 0.066901 +Converged at iteration 23, L1 9.24583e-05, Linf 0.00432198, total time[s] 0.060463 +Converged at iteration 26, L1 7.13004e-05, Linf 0.00466098, total time[s] 0.067666 +Converged at iteration 29, L1 7.53063e-05, Linf 0.00488658, total time[s] 0.073985 +Converged at iteration 34, L1 8.13247e-05, Linf 0.00406169, total time[s] 0.083994 +Converged at iteration 31, L1 7.17306e-05, Linf 0.00355167, total time[s] 0.077889 +Converged at iteration 29, L1 7.02736e-05, Linf 0.002724, total time[s] 0.073094 +Converged at iteration 32, L1 8.22027e-05, Linf 0.0035457, total time[s] 0.079873 +Converged at iteration 36, L1 8.71608e-05, Linf 0.00357612, total time[s] 0.089706 +Converged at iteration 33, L1 8.3227e-05, Linf 0.0048477, total time[s] 0.082345 +Converged at iteration 28, L1 9.10516e-05, Linf 0.00413141, total time[s] 0.070196 +Converged at iteration 24, L1 8.02476e-05, Linf 0.00290884, total time[s] 0.061205 +Converged at iteration 26, L1 8.39881e-05, Linf 0.00392369, total time[s] 0.066338 +Converged at iteration 39, L1 9.99501e-05, Linf 0.00489135, total time[s] 0.09499 +Converged at iteration 35, L1 9.63021e-05, Linf 0.00385589, total time[s] 0.087726 +Converged at iteration 30, L1 7.64777e-05, Linf 0.00421014, total time[s] 0.075996 +Converged at iteration 31, L1 6.16909e-05, Linf 0.00506464, total time[s] 0.080313 +Converged at iteration 26, L1 9.1203e-05, Linf 0.00568981, total time[s] 0.066729 +Converged at iteration 21, L1 9.60308e-05, Linf 0.00461195, total time[s] 0.055659 +Converged at iteration 21, L1 6.9248e-05, Linf 0.00393128, total time[s] 0.055021 +Converged at iteration 24, L1 8.29681e-05, Linf 0.00519988, total time[s] 0.061358 +Converged at iteration 28, L1 6.83684e-05, Linf 0.00441193, total time[s] 0.070869 +Converged at iteration 26, L1 8.18955e-05, Linf 0.00430144, total time[s] 0.065864 +Converged at iteration 21, L1 8.5095e-05, Linf 0.00433737, total time[s] 0.054903 +Converged at iteration 18, L1 7.37272e-05, Linf 0.00298987, total time[s] 0.048211 +Converged at iteration 31, L1 7.48958e-05, Linf 0.00268238, total time[s] 0.079686 +Converged at iteration 20, L1 8.18547e-05, Linf 0.00494615, total time[s] 0.051858 +Converged at iteration 24, L1 6.88422e-05, Linf 0.00519385, total time[s] 0.06735 +Converged at iteration 30, L1 9.60963e-05, Linf 0.0108769, total time[s] 0.075825 +Converged at iteration 25, L1 9.01836e-05, Linf 0.00466687, total time[s] 0.064262 +Converged at iteration 23, L1 8.35891e-05, Linf 0.00393125, total time[s] 0.059182 +Converged at iteration 23, L1 9.32161e-05, Linf 0.0044389, total time[s] 0.060562 +Converged at iteration 26, L1 6.88874e-05, Linf 0.00492247, total time[s] 0.067459 +Converged at iteration 29, L1 7.13934e-05, Linf 0.0049862, total time[s] 0.077641 +Converged at iteration 32, L1 8.57598e-05, Linf 0.00350835, total time[s] 0.080772 +Converged at iteration 31, L1 7.25425e-05, Linf 0.00305977, total time[s] 0.078643 +Converged at iteration 29, L1 7.74367e-05, Linf 0.00291211, total time[s] 0.074175 +Converged at iteration 32, L1 7.56372e-05, Linf 0.00337424, total time[s] 0.08352 +Converged at iteration 35, L1 9.729e-05, Linf 0.00406605, total time[s] 0.094321 +Converged at iteration 33, L1 8.06337e-05, Linf 0.0050016, total time[s] 0.084989 +Converged at iteration 28, L1 8.42759e-05, Linf 0.00398754, total time[s] 0.073364 +Converged at iteration 24, L1 7.80443e-05, Linf 0.00256146, total time[s] 0.063776 +Converged at iteration 26, L1 8.36211e-05, Linf 0.00405327, total time[s] 0.068396 +Converged at iteration 39, L1 9.93025e-05, Linf 0.00493817, total time[s] 0.101242 +Converged at iteration 35, L1 9.74935e-05, Linf 0.0038975, total time[s] 0.129623 +Converged at iteration 30, L1 6.51743e-05, Linf 0.00415287, total time[s] 0.081101 +Converged at iteration 31, L1 6.06181e-05, Linf 0.00505854, total time[s] 0.08055 +Converged at iteration 26, L1 9.14417e-05, Linf 0.00577194, total time[s] 0.068348 +Converged at iteration 21, L1 9.75441e-05, Linf 0.00465145, total time[s] 0.05798 +Converged at iteration 21, L1 6.62069e-05, Linf 0.00396274, total time[s] 0.056672 +Converged at iteration 24, L1 7.54086e-05, Linf 0.00520319, total time[s] 0.06544 +Converged at iteration 28, L1 6.65538e-05, Linf 0.0044003, total time[s] 0.073259 +Converged at iteration 26, L1 7.95527e-05, Linf 0.00408328, total time[s] 0.068145 +Converged at iteration 21, L1 7.91704e-05, Linf 0.00436519, total time[s] 0.056623 +Converged at iteration 18, L1 6.9484e-05, Linf 0.00286737, total time[s] 0.050483 +Converged at iteration 31, L1 7.65522e-05, Linf 0.00271018, total time[s] 0.082187 +Converged at iteration 20, L1 8.09888e-05, Linf 0.0049666, total time[s] 0.054861 +Converged at iteration 24, L1 6.84806e-05, Linf 0.00523436, total time[s] 0.062409 +Converged at iteration 30, L1 8.42709e-05, Linf 0.00323918, total time[s] 0.077637 +Converged at iteration 25, L1 8.01975e-05, Linf 0.00458418, total time[s] 0.069203 +Converged at iteration 23, L1 7.58379e-05, Linf 0.00382565, total time[s] 0.059906 +Converged at iteration 23, L1 9.28377e-05, Linf 0.0044172, total time[s] 0.059994 +Converged at iteration 26, L1 6.76131e-05, Linf 0.00494143, total time[s] 0.067336 +Converged at iteration 29, L1 7.05884e-05, Linf 0.00482543, total time[s] 0.075139 +Converged at iteration 32, L1 7.28724e-05, Linf 0.00335961, total time[s] 0.088941 +Converged at iteration 30, L1 9.43757e-05, Linf 0.00339246, total time[s] 0.102278 +Converged at iteration 29, L1 7.87287e-05, Linf 0.00292186, total time[s] 0.084817 +Converged at iteration 32, L1 7.50295e-05, Linf 0.00335651, total time[s] 0.085625 +Converged at iteration 35, L1 8.59233e-05, Linf 0.00398675, total time[s] 0.096458 +Converged at iteration 33, L1 7.95256e-05, Linf 0.00502143, total time[s] 0.090175 +Converged at iteration 28, L1 8.45713e-05, Linf 0.00404605, total time[s] 0.072515 +Converged at iteration 24, L1 7.92051e-05, Linf 0.00259405, total time[s] 0.066594 +Converged at iteration 26, L1 8.2199e-05, Linf 0.00404863, total time[s] 0.07739 +Converged at iteration 39, L1 9.91135e-05, Linf 0.00498559, total time[s] 0.102332 +Converged at iteration 35, L1 9.91634e-05, Linf 0.00394035, total time[s] 0.093406 +Converged at iteration 29, L1 8.64043e-05, Linf 0.00497192, total time[s] 0.074337 +Converged at iteration 31, L1 5.99058e-05, Linf 0.00508046, total time[s] 0.078704 +Converged at iteration 26, L1 9.17569e-05, Linf 0.00585324, total time[s] 0.067235 +Converged at iteration 21, L1 9.91144e-05, Linf 0.00469187, total time[s] 0.05631 +Converged at iteration 21, L1 6.29627e-05, Linf 0.00396871, total time[s] 0.055263 +Converged at iteration 24, L1 6.66857e-05, Linf 0.00527436, total time[s] 0.065086 +Converged at iteration 28, L1 6.33755e-05, Linf 0.00438503, total time[s] 0.07789 +Converged at iteration 26, L1 7.61915e-05, Linf 0.00388619, total time[s] 0.068803 +Converged at iteration 21, L1 7.45939e-05, Linf 0.00439145, total time[s] 0.054865 +Converged at iteration 18, L1 6.55896e-05, Linf 0.00301094, total time[s] 0.050583 +Converged at iteration 31, L1 7.82983e-05, Linf 0.00274065, total time[s] 0.091002 +Converged at iteration 20, L1 8.00261e-05, Linf 0.00498833, total time[s] 0.056814 +Converged at iteration 24, L1 6.76331e-05, Linf 0.00507319, total time[s] 0.070062 +Converged at iteration 30, L1 7.58208e-05, Linf 0.00306424, total time[s] 0.099939 +Converged at iteration 25, L1 7.26297e-05, Linf 0.00449935, total time[s] 0.069887 +Converged at iteration 23, L1 6.94021e-05, Linf 0.00374729, total time[s] 0.061865 +Converged at iteration 23, L1 9.21788e-05, Linf 0.00450696, total time[s] 0.060665 +Converged at iteration 26, L1 6.63487e-05, Linf 0.00492624, total time[s] 0.067403 +Converged at iteration 29, L1 6.98344e-05, Linf 0.00480576, total time[s] 0.074408 +Converged at iteration 31, L1 9.67345e-05, Linf 0.00400349, total time[s] 0.080831 +Converged at iteration 30, L1 8.62325e-05, Linf 0.00324896, total time[s] 0.084878 +Converged at iteration 29, L1 7.99787e-05, Linf 0.00296173, total time[s] 0.082554 +Converged at iteration 32, L1 7.33259e-05, Linf 0.00332302, total time[s] 0.102939 +Converged at iteration 35, L1 7.39196e-05, Linf 0.00386022, total time[s] 0.114891 +Converged at iteration 33, L1 7.84707e-05, Linf 0.00509812, total time[s] 0.092871 +Converged at iteration 28, L1 8.47702e-05, Linf 0.00410616, total time[s] 0.080199 +Converged at iteration 24, L1 8.02837e-05, Linf 0.00266402, total time[s] 0.07101 +Converged at iteration 26, L1 7.76046e-05, Linf 0.00401282, total time[s] 0.069809 +Converged at iteration 39, L1 9.71153e-05, Linf 0.00512594, total time[s] 0.111081 +Converged at iteration 36, L1 6.77535e-05, Linf 0.00341429, total time[s] 0.109355 +Converged at iteration 28, L1 9.93899e-05, Linf 0.00573689, total time[s] 0.084613 +Converged at iteration 31, L1 5.91172e-05, Linf 0.00503463, total time[s] 0.092892 +Converged at iteration 26, L1 9.21242e-05, Linf 0.00601397, total time[s] 0.074683 +Converged at iteration 22, L1 6.08539e-05, Linf 0.00400504, total time[s] 0.062102 +Converged at iteration 20, L1 9.48795e-05, Linf 0.00516084, total time[s] 0.053835 +Converged at iteration 23, L1 8.63097e-05, Linf 0.00619976, total time[s] 0.065982 +Converged at iteration 27, L1 9.38703e-05, Linf 0.00544946, total time[s] 0.091463 +Converged at iteration 26, L1 6.78722e-05, Linf 0.00354429, total time[s] 0.080477 +Converged at iteration 21, L1 6.88869e-05, Linf 0.00444326, total time[s] 0.055928 +Converged at iteration 18, L1 5.99474e-05, Linf 0.00342419, total time[s] 0.051387 +Converged at iteration 31, L1 8.18259e-05, Linf 0.00279727, total time[s] 0.077927 +Converged at iteration 20, L1 7.69921e-05, Linf 0.00503378, total time[s] 0.052484 +Converged at iteration 24, L1 6.61998e-05, Linf 0.00516034, total time[s] 0.06306 +Converged at iteration 29, L1 9.10144e-05, Linf 0.00343988, total time[s] 0.081712 +Converged at iteration 25, L1 6.23796e-05, Linf 0.00448303, total time[s] 0.064642 +Converged at iteration 22, L1 9.79608e-05, Linf 0.00445977, total time[s] 0.057429 +Converged at iteration 23, L1 9.10812e-05, Linf 0.00434564, total time[s] 0.059703 +Converged at iteration 25, L1 9.88873e-05, Linf 0.00584097, total time[s] 0.064943 +Converged at iteration 29, L1 6.84017e-05, Linf 0.0046465, total time[s] 0.075678 +Converged at iteration 31, L1 8.0304e-05, Linf 0.00389511, total time[s] 0.079363 +Converged at iteration 30, L1 7.20603e-05, Linf 0.00299534, total time[s] 0.075583 +Converged at iteration 29, L1 8.27174e-05, Linf 0.00303503, total time[s] 0.074288 +Converged at iteration 31, L1 9.78201e-05, Linf 0.00389032, total time[s] 0.078382 +Converged at iteration 34, L1 7.9331e-05, Linf 0.00424819, total time[s] 0.086063 +Converged at iteration 33, L1 7.62858e-05, Linf 0.00528486, total time[s] 0.082555 +Converged at iteration 28, L1 8.51952e-05, Linf 0.0042319, total time[s] 0.071456 +Converged at iteration 24, L1 8.28306e-05, Linf 0.00276596, total time[s] 0.065358 +Converged at iteration 26, L1 6.77494e-05, Linf 0.00385161, total time[s] 0.0715 +Converged at iteration 39, L1 9.36576e-05, Linf 0.00521777, total time[s] 0.09619 +Converged at iteration 36, L1 6.82937e-05, Linf 0.00363205, total time[s] 0.090878 +Converged at iteration 27, L1 8.77303e-05, Linf 0.0061681, total time[s] 0.067464 +Converged at iteration 30, L1 9.96572e-05, Linf 0.00610012, total time[s] 0.074511 +Converged at iteration 26, L1 9.19552e-05, Linf 0.00632841, total time[s] 0.071014 +Converged at iteration 22, L1 6.29758e-05, Linf 0.00416621, total time[s] 0.057806 +Converged at iteration 20, L1 7.52988e-05, Linf 0.00505362, total time[s] 0.052731 +Converged at iteration 22, L1 9.33424e-05, Linf 0.00721836, total time[s] 0.057547 +Converged at iteration 27, L1 7.09914e-05, Linf 0.00525812, total time[s] 0.070582 +Converged at iteration 25, L1 9.90478e-05, Linf 0.00469514, total time[s] 0.068433 +Converged at iteration 21, L1 6.03274e-05, Linf 0.00457411, total time[s] 0.057675 +Converged at iteration 17, L1 9.74113e-05, Linf 0.00503469, total time[s] 0.049447 +Converged at iteration 31, L1 8.76135e-05, Linf 0.00291605, total time[s] 0.097816 +Converged at iteration 20, L1 6.98479e-05, Linf 0.00507742, total time[s] 0.054974 +Converged at iteration 24, L1 6.21974e-05, Linf 0.00531068, total time[s] 0.065685 +Converged at iteration 28, L1 9.87229e-05, Linf 0.00416405, total time[s] 0.07419 +Converged at iteration 24, L1 8.63784e-05, Linf 0.00598406, total time[s] 0.063982 +Converged at iteration 22, L1 8.87045e-05, Linf 0.0043871, total time[s] 0.058858 +Converged at iteration 23, L1 8.52045e-05, Linf 0.00372894, total time[s] 0.063293 +Converged at iteration 25, L1 9.14459e-05, Linf 0.00583719, total time[s] 0.065732 +Converged at iteration 28, L1 9.97721e-05, Linf 0.00599871, total time[s] 0.091199 +Converged at iteration 30, L1 9.93498e-05, Linf 0.00495537, total time[s] 0.078998 +Converged at iteration 29, L1 8.14118e-05, Linf 0.00317917, total time[s] 0.073582 +Converged at iteration 29, L1 8.85324e-05, Linf 0.00312271, total time[s] 0.07373 +Converged at iteration 31, L1 8.40432e-05, Linf 0.00340195, total time[s] 0.078026 +Converged at iteration 33, L1 6.51112e-05, Linf 0.00380059, total time[s] 0.13013 +Converged at iteration 33, L1 7.07779e-05, Linf 0.00512445, total time[s] 0.111647 +Converged at iteration 28, L1 8.41944e-05, Linf 0.00443832, total time[s] 0.076724 +Converged at iteration 24, L1 8.81194e-05, Linf 0.00296555, total time[s] 0.070492 +Converged at iteration 25, L1 8.00138e-05, Linf 0.00429835, total time[s] 0.080393 +Converged at iteration 39, L1 8.41064e-05, Linf 0.0054326, total time[s] 0.126237 +Converged at iteration 36, L1 6.51184e-05, Linf 0.00406125, total time[s] 0.102626 +Converged at iteration 26, L1 5.47278e-05, Linf 0.00518122, total time[s] 0.079449 +Converged at iteration 30, L1 9.00076e-05, Linf 0.0060885, total time[s] 0.096309 +Converged at iteration 26, L1 9.12056e-05, Linf 0.00693295, total time[s] 0.071202 +Converged at iteration 22, L1 6.75521e-05, Linf 0.00450672, total time[s] 0.058096 +Converged at iteration 19, L1 8.99149e-05, Linf 0.00633285, total time[s] 0.061001 +Converged at iteration 21, L1 8.24925e-05, Linf 0.00767717, total time[s] 0.05805 +Converged at iteration 26, L1 6.35767e-05, Linf 0.00541872, total time[s] 0.070957 +Converged at iteration 25, L1 8.04458e-05, Linf 0.00506785, total time[s] 0.067089 +Converged at iteration 21, L1 5.58464e-05, Linf 0.00481159, total time[s] 0.054496 +Converged at iteration 17, L1 7.81062e-05, Linf 0.00568727, total time[s] 0.045229 +Converged at iteration 31, L1 9.70707e-05, Linf 0.00313219, total time[s] 0.079811 +Converged at iteration 19, L1 9.80906e-05, Linf 0.00630967, total time[s] 0.048878 +Converged at iteration 23, L1 8.72309e-05, Linf 0.0059328, total time[s] 0.074634 +Converged at iteration 28, L1 6.43819e-05, Linf 0.00399084, total time[s] 0.079144 +Converged at iteration 24, L1 6.94887e-05, Linf 0.00612319, total time[s] 0.066484 +Converged at iteration 22, L1 8.24204e-05, Linf 0.00449416, total time[s] 0.07031 +Converged at iteration 23, L1 7.06453e-05, Linf 0.00256192, total time[s] 0.062298 +Converged at iteration 25, L1 7.88164e-05, Linf 0.00476812, total time[s] 0.064277 +Converged at iteration 28, L1 8.92915e-05, Linf 0.00542922, total time[s] 0.07133 +Converged at iteration 30, L1 7.81447e-05, Linf 0.00514041, total time[s] 0.076031 +Converged at iteration 28, L1 9.15152e-05, Linf 0.00365367, total time[s] 0.074652 +Converged at iteration 29, L1 9.97742e-05, Linf 0.00331858, total time[s] 0.074205 +Converged at iteration 30, L1 9.36761e-05, Linf 0.00320873, total time[s] 0.080571 +Converged at iteration 31, L1 6.89429e-05, Linf 0.00245686, total time[s] 0.078877 +Converged at iteration 33, L1 6.01381e-05, Linf 0.00517251, total time[s] 0.081975 +Converged at iteration 28, L1 8.31467e-05, Linf 0.00498843, total time[s] 0.071308 +Converged at iteration 25, L1 6.23892e-05, Linf 0.00264111, total time[s] 0.064658 +Converged at iteration 24, L1 8.41367e-05, Linf 0.00399433, total time[s] 0.062117 +Converged at iteration 39, L1 8.82051e-05, Linf 0.0053376, total time[s] 0.099404 +Converged at iteration 36, L1 6.72346e-05, Linf 0.00386452, total time[s] 0.096135 +Converged at iteration 26, L1 8.95585e-05, Linf 0.0066189, total time[s] 0.066995 +Converged at iteration 30, L1 9.51633e-05, Linf 0.00609583, total time[s] 0.075972 +Converged at iteration 26, L1 9.14894e-05, Linf 0.00663415, total time[s] 0.0664 +Converged at iteration 22, L1 6.54935e-05, Linf 0.00433145, total time[s] 0.057192 +Converged at iteration 20, L1 5.96059e-05, Linf 0.00477562, total time[s] 0.053733 +Converged at iteration 22, L1 5.76884e-05, Linf 0.00623806, total time[s] 0.057739 +Converged at iteration 26, L1 8.86922e-05, Linf 0.00610821, total time[s] 0.066523 +Converged at iteration 25, L1 8.87775e-05, Linf 0.00488357, total time[s] 0.065665 +Converged at iteration 21, L1 5.87271e-05, Linf 0.00686425, total time[s] 0.055234 +Converged at iteration 17, L1 8.44322e-05, Linf 0.00542393, total time[s] 0.045497 +Converged at iteration 31, L1 9.26642e-05, Linf 0.00302633, total time[s] 0.077661 +Converged at iteration 20, L1 6.27122e-05, Linf 0.00495432, total time[s] 0.053808 +Converged at iteration 23, L1 9.54641e-05, Linf 0.00590293, total time[s] 0.061403 +Converged at iteration 28, L1 7.78132e-05, Linf 0.00413372, total time[s] 0.075081 +Converged at iteration 24, L1 7.71881e-05, Linf 0.00608494, total time[s] 0.062349 +Converged at iteration 22, L1 8.49017e-05, Linf 0.00442464, total time[s] 0.059118 +Converged at iteration 23, L1 7.63611e-05, Linf 0.0030533, total time[s] 0.061183 +Converged at iteration 25, L1 8.52856e-05, Linf 0.00561297, total time[s] 0.064841 +Converged at iteration 28, L1 9.4769e-05, Linf 0.0057785, total time[s] 0.076289 +Converged at iteration 30, L1 8.65792e-05, Linf 0.0050774, total time[s] 0.076461 +Converged at iteration 29, L1 6.76588e-05, Linf 0.002996, total time[s] 0.073396 +Converged at iteration 29, L1 9.46784e-05, Linf 0.00319248, total time[s] 0.074143 +Converged at iteration 31, L1 7.3904e-05, Linf 0.00291173, total time[s] 0.109059 +Converged at iteration 31, L1 9.81908e-05, Linf 0.00455096, total time[s] 0.079407 +Converged at iteration 33, L1 6.50775e-05, Linf 0.00515214, total time[s] 0.084803 +Converged at iteration 28, L1 8.34079e-05, Linf 0.00473766, total time[s] 0.072575 +Converged at iteration 24, L1 9.43413e-05, Linf 0.00316326, total time[s] 0.062873 +Converged at iteration 25, L1 6.28244e-05, Linf 0.00361576, total time[s] 0.068095 +Converged at iteration 39, L1 9.01134e-05, Linf 0.0052787, total time[s] 0.105423 +Converged at iteration 36, L1 6.75742e-05, Linf 0.0037879, total time[s] 0.094016 +Converged at iteration 27, L1 6.23042e-05, Linf 0.00560753, total time[s] 0.069755 +Converged at iteration 30, L1 9.71515e-05, Linf 0.00609915, total time[s] 0.076704 +Converged at iteration 26, L1 9.17317e-05, Linf 0.00648239, total time[s] 0.067543 +Converged at iteration 22, L1 6.39495e-05, Linf 0.00424869, total time[s] 0.057903 +Converged at iteration 20, L1 6.69532e-05, Linf 0.00489948, total time[s] 0.055963 +Converged at iteration 22, L1 7.33674e-05, Linf 0.00687189, total time[s] 0.072819 +Converged at iteration 27, L1 5.95588e-05, Linf 0.00503452, total time[s] 0.078878 +Converged at iteration 25, L1 9.3375e-05, Linf 0.00479031, total time[s] 0.068054 +Converged at iteration 21, L1 5.90102e-05, Linf 0.00464473, total time[s] 0.056692 +Converged at iteration 17, L1 9.01126e-05, Linf 0.00523016, total time[s] 0.060392 +Converged at iteration 31, L1 9.03494e-05, Linf 0.00297229, total time[s] 0.09299 +Converged at iteration 20, L1 6.58706e-05, Linf 0.00501017, total time[s] 0.057258 +Converged at iteration 23, L1 9.95139e-05, Linf 0.00590987, total time[s] 0.061574 +Converged at iteration 28, L1 8.74795e-05, Linf 0.00413361, total time[s] 0.072077 +Converged at iteration 24, L1 8.10551e-05, Linf 0.00604533, total time[s] 0.069433 +Converged at iteration 22, L1 8.67009e-05, Linf 0.00439846, total time[s] 0.065655 +Converged at iteration 23, L1 8.03287e-05, Linf 0.00337176, total time[s] 0.0661 +Converged at iteration 25, L1 8.79148e-05, Linf 0.00577888, total time[s] 0.073884 +Converged at iteration 28, L1 9.73601e-05, Linf 0.0058949, total time[s] 0.084245 +Converged at iteration 30, L1 9.17882e-05, Linf 0.00501546, total time[s] 0.079112 +Converged at iteration 29, L1 7.35942e-05, Linf 0.00309787, total time[s] 0.075575 +Converged at iteration 29, L1 9.15622e-05, Linf 0.00315631, total time[s] 0.074788 +Converged at iteration 31, L1 7.88768e-05, Linf 0.00313661, total time[s] 0.079925 +Converged at iteration 32, L1 7.85085e-05, Linf 0.00412095, total time[s] 0.082913 +Converged at iteration 33, L1 6.78762e-05, Linf 0.00508837, total time[s] 0.08348 +Converged at iteration 28, L1 8.37133e-05, Linf 0.00466546, total time[s] 0.07586 +Converged at iteration 24, L1 9.10839e-05, Linf 0.00303807, total time[s] 0.063076 +Converged at iteration 25, L1 7.07743e-05, Linf 0.0039782, total time[s] 0.065838 +Converged at iteration 39, L1 9.11948e-05, Linf 0.00531107, total time[s] 0.097666 +Converged at iteration 36, L1 6.7768e-05, Linf 0.0038009, total time[s] 0.092805 +Converged at iteration 27, L1 7.3652e-05, Linf 0.00590311, total time[s] 0.069026 +Converged at iteration 30, L1 9.83602e-05, Linf 0.00610014, total time[s] 0.076404 +Converged at iteration 26, L1 9.18702e-05, Linf 0.00647561, total time[s] 0.067253 +Converged at iteration 22, L1 6.35554e-05, Linf 0.00420704, total time[s] 0.05804 +Converged at iteration 20, L1 7.0979e-05, Linf 0.00500865, total time[s] 0.056005 +Converged at iteration 22, L1 8.30716e-05, Linf 0.00709116, total time[s] 0.061322 +Converged at iteration 27, L1 6.51562e-05, Linf 0.00517805, total time[s] 0.076861 +Converged at iteration 25, L1 9.61122e-05, Linf 0.0047347, total time[s] 0.069234 +Converged at iteration 21, L1 5.94357e-05, Linf 0.00465216, total time[s] 0.056466 +Converged at iteration 17, L1 9.35338e-05, Linf 0.00502886, total time[s] 0.047063 +Converged at iteration 31, L1 8.89462e-05, Linf 0.00294454, total time[s] 0.079685 +Converged at iteration 20, L1 6.77649e-05, Linf 0.00505454, total time[s] 0.054911 +Converged at iteration 24, L1 6.14197e-05, Linf 0.00526675, total time[s] 0.064048 +Converged at iteration 28, L1 9.31236e-05, Linf 0.00415917, total time[s] 0.072254 +Converged at iteration 24, L1 8.36873e-05, Linf 0.0060198, total time[s] 0.062893 +Converged at iteration 22, L1 8.77039e-05, Linf 0.00439283, total time[s] 0.059631 +Converged at iteration 23, L1 8.29931e-05, Linf 0.00354851, total time[s] 0.06238 +Converged at iteration 25, L1 8.9704e-05, Linf 0.00581826, total time[s] 0.069882 +Converged at iteration 28, L1 9.91073e-05, Linf 0.00595624, total time[s] 0.09122 +Converged at iteration 30, L1 9.53372e-05, Linf 0.00498606, total time[s] 0.079595 +Converged at iteration 29, L1 7.72209e-05, Linf 0.00312299, total time[s] 0.075146 +Converged at iteration 29, L1 8.99767e-05, Linf 0.00313188, total time[s] 0.078283 +Converged at iteration 31, L1 8.09993e-05, Linf 0.00326633, total time[s] 0.081996 +Converged at iteration 32, L1 8.90957e-05, Linf 0.00458971, total time[s] 0.082731 +Converged at iteration 33, L1 6.93998e-05, Linf 0.00513143, total time[s] 0.091054 +Converged at iteration 28, L1 8.39853e-05, Linf 0.00450042, total time[s] 0.074538 +Converged at iteration 24, L1 8.95088e-05, Linf 0.00301484, total time[s] 0.064061 +Converged at iteration 25, L1 7.52265e-05, Linf 0.00414448, total time[s] 0.068275 +Converged at iteration 39, L1 9.13194e-05, Linf 0.00526262, total time[s] 0.103001 +Converged at iteration 36, L1 6.77722e-05, Linf 0.00371617, total time[s] 0.094267 +Converged at iteration 27, L1 6.76911e-05, Linf 0.00575604, total time[s] 0.072809 +Converged at iteration 30, L1 9.8998e-05, Linf 0.00609984, total time[s] 0.07806 +Converged at iteration 26, L1 9.20027e-05, Linf 0.006444, total time[s] 0.06899 +Converged at iteration 22, L1 6.39516e-05, Linf 0.00422786, total time[s] 0.059332 +Converged at iteration 20, L1 6.9016e-05, Linf 0.00495677, total time[s] 0.054334 +Converged at iteration 22, L1 7.78711e-05, Linf 0.00699475, total time[s] 0.062691 +Converged at iteration 27, L1 6.23379e-05, Linf 0.00510162, total time[s] 0.081759 +Converged at iteration 25, L1 9.48826e-05, Linf 0.00476684, total time[s] 0.072229 +Converged at iteration 21, L1 5.91152e-05, Linf 0.00463687, total time[s] 0.059615 +Converged at iteration 17, L1 9.17705e-05, Linf 0.00518153, total time[s] 0.047075 +Converged at iteration 31, L1 8.97064e-05, Linf 0.00295849, total time[s] 0.079547 +Converged at iteration 20, L1 6.67697e-05, Linf 0.0050303, total time[s] 0.053551 +Converged at iteration 24, L1 6.03981e-05, Linf 0.00525184, total time[s] 0.063616 +Converged at iteration 28, L1 9.02994e-05, Linf 0.00417912, total time[s] 0.074023 +Converged at iteration 24, L1 8.23302e-05, Linf 0.00608364, total time[s] 0.065367 +Converged at iteration 22, L1 8.72043e-05, Linf 0.00439415, total time[s] 0.060287 +Converged at iteration 23, L1 8.16065e-05, Linf 0.00345902, total time[s] 0.097341 +Converged at iteration 25, L1 8.87852e-05, Linf 0.0058081, total time[s] 0.065096 +Converged at iteration 28, L1 9.79741e-05, Linf 0.00592785, total time[s] 0.07199 +Converged at iteration 30, L1 9.34872e-05, Linf 0.00500137, total time[s] 0.078216 +Converged at iteration 29, L1 7.52646e-05, Linf 0.00309698, total time[s] 0.078468 +Converged at iteration 29, L1 9.07154e-05, Linf 0.00314405, total time[s] 0.082077 +Converged at iteration 31, L1 7.98332e-05, Linf 0.00320031, total time[s] 0.086418 +Converged at iteration 32, L1 8.34106e-05, Linf 0.00434996, total time[s] 0.090516 +Converged at iteration 33, L1 6.85868e-05, Linf 0.00508213, total time[s] 0.0923 +Converged at iteration 28, L1 8.38381e-05, Linf 0.00457869, total time[s] 0.072316 +Converged at iteration 24, L1 9.03505e-05, Linf 0.00303991, total time[s] 0.063631 +Converged at iteration 25, L1 7.29508e-05, Linf 0.00406112, total time[s] 0.065775 +Converged at iteration 39, L1 9.09195e-05, Linf 0.00525577, total time[s] 0.104964 +Converged at iteration 36, L1 6.7719e-05, Linf 0.00370176, total time[s] 0.092712 +Converged at iteration 27, L1 7.05843e-05, Linf 0.00583025, total time[s] 0.07005 +Converged at iteration 30, L1 9.84639e-05, Linf 0.0061001, total time[s] 0.081837 +Converged at iteration 26, L1 9.28221e-05, Linf 0.00667445, total time[s] 0.075264 +Converged at iteration 22, L1 6.39393e-05, Linf 0.00421727, total time[s] 0.069244 +Converged at iteration 20, L1 6.99279e-05, Linf 0.00497373, total time[s] 0.059501 +Converged at iteration 22, L1 8.02894e-05, Linf 0.00704733, total time[s] 0.066898 +Converged at iteration 27, L1 6.37493e-05, Linf 0.00514864, total time[s] 0.07225 +Converged at iteration 25, L1 9.53945e-05, Linf 0.00473253, total time[s] 0.071724 +Converged at iteration 21, L1 5.92625e-05, Linf 0.0046315, total time[s] 0.055067 +Converged at iteration 17, L1 9.26426e-05, Linf 0.00515716, total time[s] 0.047369 +Converged at iteration 31, L1 8.94341e-05, Linf 0.00295153, total time[s] 0.082902 +Converged at iteration 20, L1 6.72824e-05, Linf 0.00504549, total time[s] 0.056174 +Converged at iteration 24, L1 6.07706e-05, Linf 0.00529109, total time[s] 0.0755 +Converged at iteration 28, L1 9.18526e-05, Linf 0.00414432, total time[s] 0.074216 +Converged at iteration 24, L1 8.29954e-05, Linf 0.00602424, total time[s] 0.062339 +Converged at iteration 22, L1 8.74432e-05, Linf 0.00439218, total time[s] 0.058009 +Converged at iteration 23, L1 8.22983e-05, Linf 0.00364031, total time[s] 0.061455 +Converged at iteration 25, L1 8.92278e-05, Linf 0.00577498, total time[s] 0.064746 +Converged at iteration 28, L1 9.83707e-05, Linf 0.00605578, total time[s] 0.072546 +Converged at iteration 30, L1 9.43977e-05, Linf 0.00499355, total time[s] 0.077254 +Converged at iteration 29, L1 7.62373e-05, Linf 0.00311002, total time[s] 0.074337 +Converged at iteration 29, L1 9.05084e-05, Linf 0.00312387, total time[s] 0.074162 +Converged at iteration 31, L1 8.05427e-05, Linf 0.00323275, total time[s] 0.078305 +Converged at iteration 32, L1 8.63783e-05, Linf 0.00444857, total time[s] 0.080498 +Converged at iteration 33, L1 6.8976e-05, Linf 0.00508015, total time[s] 0.098298 +Converged at iteration 28, L1 8.38952e-05, Linf 0.00456288, total time[s] 0.078025 +Converged at iteration 24, L1 8.9891e-05, Linf 0.00302717, total time[s] 0.064358 +Converged at iteration 25, L1 7.41364e-05, Linf 0.00410189, total time[s] 0.067382 +Converged at iteration 39, L1 9.15106e-05, Linf 0.00525931, total time[s] 0.105029 +Converged at iteration 36, L1 6.79627e-05, Linf 0.00365965, total time[s] 0.098407 +Converged at iteration 27, L1 7.20822e-05, Linf 0.00586548, total time[s] 0.070278 +Converged at iteration 30, L1 9.81713e-05, Linf 0.00610007, total time[s] 0.077614 +Converged at iteration 26, L1 9.18359e-05, Linf 0.00641528, total time[s] 0.067667 +Converged at iteration 22, L1 6.35114e-05, Linf 0.00421962, total time[s] 0.05852 +Converged at iteration 20, L1 7.04071e-05, Linf 0.00498355, total time[s] 0.053879 +Converged at iteration 22, L1 8.15217e-05, Linf 0.00706883, total time[s] 0.058561 +Converged at iteration 27, L1 6.44381e-05, Linf 0.00517957, total time[s] 0.077704 +Converged at iteration 25, L1 9.57621e-05, Linf 0.0047565, total time[s] 0.082046 +Converged at iteration 21, L1 5.93458e-05, Linf 0.00462859, total time[s] 0.061134 +Converged at iteration 17, L1 9.31116e-05, Linf 0.00514496, total time[s] 0.048251 +Converged at iteration 31, L1 8.91482e-05, Linf 0.0029772, total time[s] 0.080531 +Converged at iteration 20, L1 6.76186e-05, Linf 0.00492949, total time[s] 0.054424 +Converged at iteration 24, L1 6.07406e-05, Linf 0.00493697, total time[s] 0.074789 +Converged at iteration 28, L1 9.2435e-05, Linf 0.00414629, total time[s] 0.089721 +Converged at iteration 24, L1 8.33149e-05, Linf 0.00602144, total time[s] 0.075411 +Converged at iteration 22, L1 8.75538e-05, Linf 0.00439119, total time[s] 0.101559 +Converged at iteration 23, L1 8.26326e-05, Linf 0.00352597, total time[s] 0.081252 +Converged at iteration 25, L1 8.94729e-05, Linf 0.00581246, total time[s] 0.07939 +Converged at iteration 28, L1 9.84832e-05, Linf 0.00594943, total time[s] 0.088824 +Converged at iteration 30, L1 9.48786e-05, Linf 0.00497904, total time[s] 0.080614 +Converged at iteration 29, L1 7.67324e-05, Linf 0.00310252, total time[s] 0.085405 +Converged at iteration 29, L1 9.0368e-05, Linf 0.00313495, total time[s] 0.073527 +Converged at iteration 31, L1 8.0857e-05, Linf 0.00324794, total time[s] 0.077974 +Converged at iteration 32, L1 8.78161e-05, Linf 0.00451218, total time[s] 0.080068 +Converged at iteration 33, L1 6.91957e-05, Linf 0.00513306, total time[s] 0.083527 +Converged at iteration 28, L1 8.45902e-05, Linf 0.00455523, total time[s] 0.070892 +Converged at iteration 24, L1 8.99442e-05, Linf 0.00302107, total time[s] 0.063024 +Converged at iteration 25, L1 7.48377e-05, Linf 0.00411186, total time[s] 0.064617 +Converged at iteration 39, L1 9.17737e-05, Linf 0.00525133, total time[s] 0.097921 +Converged at iteration 36, L1 6.83084e-05, Linf 0.00368949, total time[s] 0.09445 +Converged at iteration 27, L1 7.15103e-05, Linf 0.00588717, total time[s] 0.07602 +Converged at iteration 30, L1 9.85421e-05, Linf 0.00610015, total time[s] 0.075509 +Converged at iteration 26, L1 9.18915e-05, Linf 0.00641991, total time[s] 0.066728 +Converged at iteration 22, L1 6.41388e-05, Linf 0.00421169, total time[s] 0.057903 +Converged at iteration 20, L1 7.01988e-05, Linf 0.00496749, total time[s] 0.054022 +Converged at iteration 22, L1 8.10007e-05, Linf 0.00716925, total time[s] 0.061208 +Converged at iteration 27, L1 6.42798e-05, Linf 0.00516559, total time[s] 0.081204 +Converged at iteration 25, L1 9.55658e-05, Linf 0.00475123, total time[s] 0.074149 +Converged at iteration 21, L1 5.9221e-05, Linf 0.00463004, total time[s] 0.092346 +Converged at iteration 17, L1 9.28587e-05, Linf 0.00515106, total time[s] 0.11234 +Converged at iteration 31, L1 8.93891e-05, Linf 0.00294981, total time[s] 0.098454 +Converged at iteration 20, L1 6.7508e-05, Linf 0.00506565, total time[s] 0.05392 +Converged at iteration 24, L1 6.06315e-05, Linf 0.00526183, total time[s] 0.059859 +Converged at iteration 28, L1 9.21037e-05, Linf 0.00414738, total time[s] 0.069156 +Converged at iteration 24, L1 8.48673e-05, Linf 0.00745624, total time[s] 0.060615 +Converged at iteration 22, L1 8.74359e-05, Linf 0.00439131, total time[s] 0.057263 +Converged at iteration 23, L1 8.33451e-05, Linf 0.00542745, total time[s] 0.063435 +Converged at iteration 25, L1 8.93648e-05, Linf 0.00581194, total time[s] 0.071655 +Converged at iteration 28, L1 9.84782e-05, Linf 0.00594688, total time[s] 0.071082 +Converged at iteration 30, L1 9.51537e-05, Linf 0.00499132, total time[s] 0.073615 +Converged at iteration 29, L1 7.7336e-05, Linf 0.00311299, total time[s] 0.071883 +Converged at iteration 29, L1 9.02208e-05, Linf 0.00310844, total time[s] 0.071332 +Converged at iteration 31, L1 8.05542e-05, Linf 0.00323935, total time[s] 0.076504 +Converged at iteration 32, L1 8.69114e-05, Linf 0.00450119, total time[s] 0.078334 +Converged at iteration 33, L1 6.91814e-05, Linf 0.00513381, total time[s] 0.080087 +Converged at iteration 28, L1 8.43771e-05, Linf 0.00455833, total time[s] 0.069759 +Converged at iteration 24, L1 8.98838e-05, Linf 0.00302408, total time[s] 0.062591 +Converged at iteration 25, L1 7.46137e-05, Linf 0.00411001, total time[s] 0.064842 +Converged at iteration 40, L1 6.81773e-05, Linf 0.00367319, total time[s] 0.137478 +Converged at iteration 35, L1 7.61871e-05, Linf 0.00339751, total time[s] 0.100506 +Converged at iteration 30, L1 9.6373e-05, Linf 0.00432638, total time[s] 0.083553 +Converged at iteration 31, L1 6.31831e-05, Linf 0.00502564, total time[s] 0.088936 +Converged at iteration 27, L1 6.27213e-05, Linf 0.00499708, total time[s] 0.073091 +Converged at iteration 22, L1 8.58989e-05, Linf 0.0044448, total time[s] 0.063793 +Converged at iteration 20, L1 9.61597e-05, Linf 0.00397833, total time[s] 0.122708 +Converged at iteration 24, L1 8.84238e-05, Linf 0.00482793, total time[s] 0.071049 +Converged at iteration 28, L1 7.41268e-05, Linf 0.00445906, total time[s] 0.094054 +Converged at iteration 26, L1 8.11714e-05, Linf 0.00548352, total time[s] 0.098525 +Converged at iteration 22, L1 7.39182e-05, Linf 0.00508698, total time[s] 0.077826 +Converged at iteration 19, L1 6.68558e-05, Linf 0.00393137, total time[s] 0.080211 +Converged at iteration 30, L1 8.00599e-05, Linf 0.00332962, total time[s] 0.100998 +Converged at iteration 20, L1 8.53341e-05, Linf 0.00499208, total time[s] 0.067514 +Converged at iteration 24, L1 7.13338e-05, Linf 0.00463295, total time[s] 0.085722 +Converged at iteration 31, L1 9.00794e-05, Linf 0.00569359, total time[s] 0.089067 +Converged at iteration 27, L1 9.99605e-05, Linf 0.00571234, total time[s] 0.081447 +Converged at iteration 24, L1 8.78947e-05, Linf 0.00465034, total time[s] 0.079233 +Converged at iteration 23, L1 9.21673e-05, Linf 0.00403485, total time[s] 0.064878 +Converged at iteration 26, L1 7.24935e-05, Linf 0.00446081, total time[s] 0.098753 +Converged at iteration 29, L1 7.81016e-05, Linf 0.00489885, total time[s] 0.096724 +Converged at iteration 34, L1 7.09767e-05, Linf 0.00431379, total time[s] 0.098523 +Converged at iteration 30, L1 9.39435e-05, Linf 0.00442594, total time[s] 0.092898 +Converged at iteration 28, L1 9.50194e-05, Linf 0.00310985, total time[s] 0.098239 +Converged at iteration 32, L1 9.43581e-05, Linf 0.00374388, total time[s] 0.104866 +Converged at iteration 37, L1 7.49906e-05, Linf 0.00327332, total time[s] 0.111355 +Converged at iteration 33, L1 8.45228e-05, Linf 0.00469109, total time[s] 0.092041 +Converged at iteration 28, L1 9.65741e-05, Linf 0.00430268, total time[s] 0.093351 +Converged at iteration 24, L1 8.82876e-05, Linf 0.00325072, total time[s] 0.066898 +Converged at iteration 26, L1 9.00441e-05, Linf 0.00383976, total time[s] 0.073108 +Converged at iteration 40, L1 6.67091e-05, Linf 0.00393425, total time[s] 0.106934 +Converged at iteration 35, L1 8.66302e-05, Linf 0.00360683, total time[s] 0.094821 +Converged at iteration 30, L1 9.1683e-05, Linf 0.00418081, total time[s] 0.085136 +Converged at iteration 31, L1 6.22115e-05, Linf 0.00504682, total time[s] 0.079984 +Converged at iteration 26, L1 9.84305e-05, Linf 0.00577556, total time[s] 0.066981 +Converged at iteration 22, L1 7.16667e-05, Linf 0.00418183, total time[s] 0.057558 +Converged at iteration 21, L1 6.40792e-05, Linf 0.00348498, total time[s] 0.056304 +Converged at iteration 24, L1 8.94291e-05, Linf 0.0049499, total time[s] 0.062404 +Converged at iteration 28, L1 7.32956e-05, Linf 0.00443335, total time[s] 0.071203 +Converged at iteration 26, L1 8.05746e-05, Linf 0.00536333, total time[s] 0.066922 +Converged at iteration 22, L1 7.02649e-05, Linf 0.00441475, total time[s] 0.059272 +Converged at iteration 19, L1 5.50685e-05, Linf 0.00332057, total time[s] 0.054913 +Converged at iteration 30, L1 9.51778e-05, Linf 0.00330732, total time[s] 0.07659 +Converged at iteration 20, L1 8.4424e-05, Linf 0.00473176, total time[s] 0.052605 +Converged at iteration 24, L1 7.16742e-05, Linf 0.00475322, total time[s] 0.062229 +Converged at iteration 31, L1 9.44306e-05, Linf 0.00481912, total time[s] 0.081239 +Converged at iteration 27, L1 9.40996e-05, Linf 0.00468279, total time[s] 0.071489 +Converged at iteration 24, L1 8.53185e-05, Linf 0.00429568, total time[s] 0.0853 +Converged at iteration 23, L1 9.2716e-05, Linf 0.00431905, total time[s] 0.077584 +Converged at iteration 26, L1 7.14498e-05, Linf 0.00465333, total time[s] 0.067359 +Converged at iteration 29, L1 7.68741e-05, Linf 0.00620321, total time[s] 0.082919 +Converged at iteration 34, L1 8.13579e-05, Linf 0.00406924, total time[s] 0.094704 +Converged at iteration 31, L1 7.17526e-05, Linf 0.00354642, total time[s] 0.097241 +Converged at iteration 29, L1 7.03531e-05, Linf 0.00272725, total time[s] 0.081375 +Converged at iteration 32, L1 8.24336e-05, Linf 0.00354633, total time[s] 0.080495 +Converged at iteration 36, L1 8.77731e-05, Linf 0.00357722, total time[s] 0.089782 +Converged at iteration 33, L1 8.32833e-05, Linf 0.00484761, total time[s] 0.09 +Converged at iteration 28, L1 9.1051e-05, Linf 0.00413215, total time[s] 0.073969 +Converged at iteration 24, L1 8.02405e-05, Linf 0.00290885, total time[s] 0.064765 +Converged at iteration 26, L1 8.4482e-05, Linf 0.003906, total time[s] 0.072392 +Converged at iteration 40, L1 6.56492e-05, Linf 0.00397415, total time[s] 0.100789 +Converged at iteration 35, L1 8.81499e-05, Linf 0.0036387, total time[s] 0.094324 +Converged at iteration 30, L1 9.04208e-05, Linf 0.00415818, total time[s] 0.080659 +Converged at iteration 31, L1 6.3857e-05, Linf 0.00738476, total time[s] 0.087089 +Converged at iteration 26, L1 9.8944e-05, Linf 0.00585738, total time[s] 0.073169 +Converged at iteration 22, L1 7.24427e-05, Linf 0.00421914, total time[s] 0.067529 +Converged at iteration 21, L1 6.40073e-05, Linf 0.00353332, total time[s] 0.061954 +Converged at iteration 24, L1 8.86676e-05, Linf 0.00494634, total time[s] 0.064199 +Converged at iteration 28, L1 7.27457e-05, Linf 0.00441754, total time[s] 0.080757 +Converged at iteration 26, L1 8.16283e-05, Linf 0.00524146, total time[s] 0.06689 +Converged at iteration 22, L1 6.93965e-05, Linf 0.00420952, total time[s] 0.058244 +Converged at iteration 18, L1 9.88278e-05, Linf 0.00403274, total time[s] 0.051138 +Converged at iteration 30, L1 9.77483e-05, Linf 0.0033381, total time[s] 0.078785 +Converged at iteration 20, L1 8.33094e-05, Linf 0.00474239, total time[s] 0.059084 +Converged at iteration 24, L1 7.12148e-05, Linf 0.00471221, total time[s] 0.064797 +Converged at iteration 31, L1 9.52061e-05, Linf 0.00448134, total time[s] 0.084456 +Converged at iteration 27, L1 8.97433e-05, Linf 0.0043368, total time[s] 0.068966 +Converged at iteration 24, L1 8.48576e-05, Linf 0.00415613, total time[s] 0.062555 +Converged at iteration 23, L1 9.15239e-05, Linf 0.00434486, total time[s] 0.060553 +Converged at iteration 26, L1 7.01554e-05, Linf 0.00468942, total time[s] 0.067087 +Converged at iteration 29, L1 7.45298e-05, Linf 0.00491811, total time[s] 0.07562 +Converged at iteration 34, L1 8.19792e-05, Linf 0.0037803, total time[s] 0.087826 +Converged at iteration 31, L1 7.25011e-05, Linf 0.00351137, total time[s] 0.081605 +Converged at iteration 29, L1 7.16731e-05, Linf 0.00274774, total time[s] 0.074437 +Converged at iteration 32, L1 8.10209e-05, Linf 0.00351791, total time[s] 0.080434 +Converged at iteration 36, L1 8.38169e-05, Linf 0.00353155, total time[s] 0.089792 +Converged at iteration 33, L1 8.22671e-05, Linf 0.00482233, total time[s] 0.082731 +Converged at iteration 28, L1 9.15412e-05, Linf 0.00414434, total time[s] 0.071787 +Converged at iteration 24, L1 8.12133e-05, Linf 0.0029612, total time[s] 0.067209 +Converged at iteration 26, L1 8.24843e-05, Linf 0.00390124, total time[s] 0.069127 +Converged at iteration 40, L1 6.50419e-05, Linf 0.00401148, total time[s] 0.099384 +Converged at iteration 35, L1 8.95746e-05, Linf 0.00367448, total time[s] 0.091492 +Converged at iteration 30, L1 8.94525e-05, Linf 0.00414411, total time[s] 0.076568 +Converged at iteration 31, L1 6.03755e-05, Linf 0.00506773, total time[s] 0.078264 +Converged at iteration 26, L1 9.93029e-05, Linf 0.00593683, total time[s] 0.06694 +Converged at iteration 22, L1 7.28803e-05, Linf 0.00430616, total time[s] 0.058131 +Converged at iteration 21, L1 6.3702e-05, Linf 0.00358072, total time[s] 0.055458 +Converged at iteration 24, L1 8.74003e-05, Linf 0.00495633, total time[s] 0.099135 +Converged at iteration 28, L1 7.21494e-05, Linf 0.0044055, total time[s] 0.079691 +Converged at iteration 26, L1 8.22592e-05, Linf 0.00510937, total time[s] 0.067152 +Converged at iteration 22, L1 6.79901e-05, Linf 0.00399451, total time[s] 0.056484 +Converged at iteration 18, L1 9.49782e-05, Linf 0.00384615, total time[s] 0.047127 +Converged at iteration 31, L1 6.75446e-05, Linf 0.00268044, total time[s] 0.076582 +Converged at iteration 20, L1 8.39793e-05, Linf 0.00499059, total time[s] 0.052017 +Converged at iteration 24, L1 7.04093e-05, Linf 0.00487366, total time[s] 0.060921 +Converged at iteration 31, L1 9.44797e-05, Linf 0.00411536, total time[s] 0.077569 +Converged at iteration 27, L1 8.34591e-05, Linf 0.0040089, total time[s] 0.069734 +Converged at iteration 24, L1 8.35073e-05, Linf 0.00401673, total time[s] 0.061602 +Converged at iteration 23, L1 9.06347e-05, Linf 0.00435847, total time[s] 0.074535 +Converged at iteration 26, L1 6.90278e-05, Linf 0.0047267, total time[s] 0.08171 +Converged at iteration 29, L1 7.34689e-05, Linf 0.00494256, total time[s] 0.09183 +Converged at iteration 34, L1 8.00589e-05, Linf 0.00345384, total time[s] 0.08922 +Converged at iteration 31, L1 7.54623e-05, Linf 0.00348402, total time[s] 0.086456 +Converged at iteration 29, L1 7.34025e-05, Linf 0.00277181, total time[s] 0.103513 +Converged at iteration 32, L1 8.0056e-05, Linf 0.00349122, total time[s] 0.087454 +Converged at iteration 36, L1 8.15331e-05, Linf 0.00348928, total time[s] 0.092285 +Converged at iteration 33, L1 8.13377e-05, Linf 0.00489413, total time[s] 0.08894 +Converged at iteration 28, L1 9.22293e-05, Linf 0.00424316, total time[s] 0.083603 +Converged at iteration 24, L1 8.22509e-05, Linf 0.00298853, total time[s] 0.06989 +Converged at iteration 26, L1 8.15204e-05, Linf 0.00388171, total time[s] 0.078229 +Converged at iteration 40, L1 6.57826e-05, Linf 0.0040355, total time[s] 0.100484 +Converged at iteration 35, L1 8.97204e-05, Linf 0.00374618, total time[s] 0.089699 +Converged at iteration 30, L1 9.00782e-05, Linf 0.00415166, total time[s] 0.077481 +Converged at iteration 31, L1 6.0821e-05, Linf 0.00501795, total time[s] 0.07996 +Converged at iteration 26, L1 9.91135e-05, Linf 0.00589699, total time[s] 0.069594 +Converged at iteration 22, L1 7.26578e-05, Linf 0.00423821, total time[s] 0.060368 +Converged at iteration 21, L1 6.38327e-05, Linf 0.00357017, total time[s] 0.057938 +Converged at iteration 24, L1 8.80219e-05, Linf 0.00494587, total time[s] 0.064115 +Converged at iteration 28, L1 7.20885e-05, Linf 0.00440934, total time[s] 0.074046 +Converged at iteration 26, L1 8.36386e-05, Linf 0.00964109, total time[s] 0.074541 +Converged at iteration 22, L1 6.93764e-05, Linf 0.0041031, total time[s] 0.068628 +Converged at iteration 18, L1 9.6939e-05, Linf 0.00393034, total time[s] 0.062797 +Converged at iteration 30, L1 9.90544e-05, Linf 0.00338823, total time[s] 0.081977 +Converged at iteration 20, L1 8.27334e-05, Linf 0.00467856, total time[s] 0.057486 +Converged at iteration 24, L1 7.01859e-05, Linf 0.0045539, total time[s] 0.069746 +Converged at iteration 31, L1 9.5062e-05, Linf 0.00429582, total time[s] 0.080352 +Converged at iteration 27, L1 8.66943e-05, Linf 0.00416969, total time[s] 0.073054 +Converged at iteration 24, L1 8.41705e-05, Linf 0.00406882, total time[s] 0.07036 +Converged at iteration 23, L1 9.14504e-05, Linf 0.00435024, total time[s] 0.07073 +Converged at iteration 26, L1 6.94148e-05, Linf 0.00470821, total time[s] 0.092456 +Converged at iteration 29, L1 7.40275e-05, Linf 0.00493161, total time[s] 0.077769 +Converged at iteration 34, L1 8.14038e-05, Linf 0.0036213, total time[s] 0.087754 +Converged at iteration 31, L1 7.44553e-05, Linf 0.00348231, total time[s] 0.085601 +Converged at iteration 29, L1 7.23875e-05, Linf 0.00275974, total time[s] 0.07953 +Converged at iteration 32, L1 8.04208e-05, Linf 0.00350432, total time[s] 0.095298 +Converged at iteration 36, L1 8.2233e-05, Linf 0.00350954, total time[s] 0.09289 +Converged at iteration 33, L1 8.17517e-05, Linf 0.00487973, total time[s] 0.08743 +Converged at iteration 28, L1 9.18352e-05, Linf 0.00421309, total time[s] 0.073936 +Converged at iteration 24, L1 8.17943e-05, Linf 0.00298734, total time[s] 0.075505 +Converged at iteration 26, L1 8.18145e-05, Linf 0.00389012, total time[s] 0.071206 +Converged at iteration 40, L1 6.55767e-05, Linf 0.00398306, total time[s] 0.104838 +Converged at iteration 35, L1 8.85108e-05, Linf 0.00364689, total time[s] 0.099478 +Converged at iteration 30, L1 9.0174e-05, Linf 0.00415387, total time[s] 0.079715 +Converged at iteration 31, L1 6.15849e-05, Linf 0.0050428, total time[s] 0.081501 +Converged at iteration 26, L1 9.91522e-05, Linf 0.00582115, total time[s] 0.074256 +Converged at iteration 22, L1 7.25324e-05, Linf 0.00418562, total time[s] 0.068443 +Converged at iteration 21, L1 6.3944e-05, Linf 0.00354514, total time[s] 0.065913 +Converged at iteration 24, L1 8.83361e-05, Linf 0.00494587, total time[s] 0.07021 +Converged at iteration 28, L1 7.22826e-05, Linf 0.00441348, total time[s] 0.074288 +Converged at iteration 26, L1 8.13432e-05, Linf 0.00521104, total time[s] 0.069206 +Converged at iteration 22, L1 6.98967e-05, Linf 0.00415663, total time[s] 0.062456 +Converged at iteration 18, L1 9.78553e-05, Linf 0.00398134, total time[s] 0.062183 +Converged at iteration 30, L1 9.84639e-05, Linf 0.00334587, total time[s] 0.095389 +Converged at iteration 20, L1 8.39125e-05, Linf 0.00497388, total time[s] 0.061178 +Converged at iteration 24, L1 7.04543e-05, Linf 0.00478402, total time[s] 0.064863 +Converged at iteration 31, L1 9.52171e-05, Linf 0.00438825, total time[s] 0.083522 +Converged at iteration 27, L1 8.82403e-05, Linf 0.0042777, total time[s] 0.072806 +Converged at iteration 24, L1 8.44496e-05, Linf 0.00411875, total time[s] 0.063653 +Converged at iteration 23, L1 9.14278e-05, Linf 0.00434458, total time[s] 0.060979 +Converged at iteration 26, L1 6.99816e-05, Linf 0.00469913, total time[s] 0.067764 +Converged at iteration 29, L1 7.43605e-05, Linf 0.00492521, total time[s] 0.074389 +Converged at iteration 34, L1 8.18336e-05, Linf 0.00366961, total time[s] 0.087078 +Converged at iteration 31, L1 7.39304e-05, Linf 0.00343025, total time[s] 0.108612 +Converged at iteration 29, L1 7.20682e-05, Linf 0.0027632, total time[s] 0.089719 +Converged at iteration 32, L1 8.10648e-05, Linf 0.0034945, total time[s] 0.087703 +Converged at iteration 36, L1 8.37634e-05, Linf 0.00352284, total time[s] 0.090495 +Converged at iteration 33, L1 8.20191e-05, Linf 0.00487462, total time[s] 0.092033 +Converged at iteration 28, L1 9.19501e-05, Linf 0.00419781, total time[s] 0.072334 +Converged at iteration 24, L1 8.15227e-05, Linf 0.00297428, total time[s] 0.063727 +Converged at iteration 26, L1 8.26548e-05, Linf 0.00389682, total time[s] 0.068629 +Converged at iteration 40, L1 6.70989e-05, Linf 0.0040306, total time[s] 0.104765 +Converged at iteration 35, L1 8.90194e-05, Linf 0.00365128, total time[s] 0.093134 +Converged at iteration 30, L1 9.0018e-05, Linf 0.00415337, total time[s] 0.079576 +Converged at iteration 31, L1 6.12974e-05, Linf 0.00504229, total time[s] 0.079635 +Converged at iteration 26, L1 9.91414e-05, Linf 0.00588669, total time[s] 0.067575 +Converged at iteration 22, L1 7.26933e-05, Linf 0.00423329, total time[s] 0.059347 +Converged at iteration 21, L1 6.40254e-05, Linf 0.00353608, total time[s] 0.056311 +Converged at iteration 24, L1 8.8176e-05, Linf 0.00493102, total time[s] 0.063891 +Converged at iteration 28, L1 7.21791e-05, Linf 0.00441631, total time[s] 0.073732 +Converged at iteration 26, L1 8.21434e-05, Linf 0.00518181, total time[s] 0.06832 +Converged at iteration 22, L1 6.86068e-05, Linf 0.00412972, total time[s] 0.066822 +Converged at iteration 18, L1 9.7388e-05, Linf 0.00394264, total time[s] 0.051799 +Converged at iteration 30, L1 9.8752e-05, Linf 0.00334975, total time[s] 0.077758 +Converged at iteration 20, L1 8.28735e-05, Linf 0.00474734, total time[s] 0.055714 +Converged at iteration 24, L1 7.03338e-05, Linf 0.00478967, total time[s] 0.072582 +Converged at iteration 31, L1 9.51566e-05, Linf 0.00434206, total time[s] 0.084158 +Converged at iteration 27, L1 8.74884e-05, Linf 0.00419949, total time[s] 0.075469 +Converged at iteration 24, L1 8.43116e-05, Linf 0.0041057, total time[s] 0.064417 +Converged at iteration 23, L1 9.11946e-05, Linf 0.004348, total time[s] 0.061487 +Converged at iteration 26, L1 6.97784e-05, Linf 0.0047032, total time[s] 0.071969 +Converged at iteration 29, L1 7.42297e-05, Linf 0.00492889, total time[s] 0.078497 +Converged at iteration 34, L1 8.16896e-05, Linf 0.00366189, total time[s] 0.088828 +Converged at iteration 31, L1 7.42037e-05, Linf 0.00342549, total time[s] 0.079683 +Converged at iteration 29, L1 7.22062e-05, Linf 0.00275674, total time[s] 0.082408 +Converged at iteration 32, L1 8.05662e-05, Linf 0.00350721, total time[s] 0.081419 +Converged at iteration 36, L1 8.26082e-05, Linf 0.00351511, total time[s] 0.090625 +Converged at iteration 33, L1 8.18755e-05, Linf 0.00487708, total time[s] 0.084189 +Converged at iteration 28, L1 9.17013e-05, Linf 0.00420641, total time[s] 0.072931 +Converged at iteration 24, L1 8.15932e-05, Linf 0.00298082, total time[s] 0.064142 +Converged at iteration 26, L1 8.19599e-05, Linf 0.00389351, total time[s] 0.068335 +Converged at iteration 40, L1 6.66604e-05, Linf 0.00398574, total time[s] 0.10128 +Converged at iteration 35, L1 8.85998e-05, Linf 0.00364897, total time[s] 0.091859 +Converged at iteration 30, L1 9.009e-05, Linf 0.00415384, total time[s] 0.081623 +Converged at iteration 31, L1 6.07254e-05, Linf 0.00504254, total time[s] 0.085824 +Converged at iteration 26, L1 9.90572e-05, Linf 0.00588189, total time[s] 0.069929 +Converged at iteration 22, L1 7.26677e-05, Linf 0.00423099, total time[s] 0.062823 +Converged at iteration 21, L1 6.38927e-05, Linf 0.00354802, total time[s] 0.06194 +Converged at iteration 24, L1 8.82589e-05, Linf 0.00494584, total time[s] 0.063413 +Converged at iteration 28, L1 7.22374e-05, Linf 0.00441246, total time[s] 0.079051 +Converged at iteration 26, L1 8.13995e-05, Linf 0.00520324, total time[s] 0.073266 +Converged at iteration 22, L1 6.88134e-05, Linf 0.0041436, total time[s] 0.076976 +Converged at iteration 18, L1 9.76095e-05, Linf 0.00396861, total time[s] 0.050988 +Converged at iteration 30, L1 9.8624e-05, Linf 0.00334785, total time[s] 0.080774 +Converged at iteration 20, L1 8.29254e-05, Linf 0.00474625, total time[s] 0.053513 +Converged at iteration 24, L1 7.04039e-05, Linf 0.00478386, total time[s] 0.063601 +Converged at iteration 31, L1 9.51975e-05, Linf 0.00436725, total time[s] 0.080892 +Converged at iteration 27, L1 8.78509e-05, Linf 0.00423126, total time[s] 0.070604 +Converged at iteration 24, L1 8.44053e-05, Linf 0.00411421, total time[s] 0.067292 +Converged at iteration 23, L1 9.1244e-05, Linf 0.00434686, total time[s] 0.067783 +Converged at iteration 26, L1 6.99215e-05, Linf 0.00470883, total time[s] 0.073959 +Converged at iteration 29, L1 7.42336e-05, Linf 0.00492708, total time[s] 0.076139 +Converged at iteration 34, L1 8.1763e-05, Linf 0.00368072, total time[s] 0.099173 +Converged at iteration 31, L1 7.40767e-05, Linf 0.00349226, total time[s] 0.091626 +Converged at iteration 29, L1 7.22142e-05, Linf 0.00274897, total time[s] 0.082842 +Converged at iteration 32, L1 8.08734e-05, Linf 0.003509, total time[s] 0.087427 +Converged at iteration 36, L1 8.28223e-05, Linf 0.00351802, total time[s] 0.092814 +Converged at iteration 33, L1 8.19363e-05, Linf 0.00487587, total time[s] 0.086074 +Converged at iteration 28, L1 9.16737e-05, Linf 0.00420279, total time[s] 0.07397 +Converged at iteration 24, L1 8.15309e-05, Linf 0.002978, total time[s] 0.068052 +Converged at iteration 26, L1 8.20883e-05, Linf 0.00389478, total time[s] 0.074347 +Converged at iteration 40, L1 6.56197e-05, Linf 0.00398345, total time[s] 0.109883 +Converged at iteration 35, L1 8.85593e-05, Linf 0.0036479, total time[s] 0.097554 +Converged at iteration 30, L1 9.01103e-05, Linf 0.00415416, total time[s] 0.077286 +Converged at iteration 31, L1 6.07479e-05, Linf 0.00504267, total time[s] 0.07971 +Converged at iteration 26, L1 9.91249e-05, Linf 0.00587964, total time[s] 0.067803 +Converged at iteration 22, L1 7.26267e-05, Linf 0.00422985, total time[s] 0.060987 +Converged at iteration 21, L1 6.39328e-05, Linf 0.00354658, total time[s] 0.057773 +Converged at iteration 24, L1 8.83704e-05, Linf 0.00494599, total time[s] 0.065124 +Converged at iteration 28, L1 7.22548e-05, Linf 0.00441298, total time[s] 0.074785 +Converged at iteration 26, L1 8.13694e-05, Linf 0.00520743, total time[s] 0.06928 +Converged at iteration 22, L1 6.87419e-05, Linf 0.00414987, total time[s] 0.062453 +Converged at iteration 18, L1 9.77318e-05, Linf 0.00397491, total time[s] 0.051949 +Converged at iteration 30, L1 9.8479e-05, Linf 0.00334691, total time[s] 0.098343 +Converged at iteration 20, L1 8.2966e-05, Linf 0.00474573, total time[s] 0.102327 +Converged at iteration 24, L1 7.037e-05, Linf 0.00478346, total time[s] 0.067348 +Converged at iteration 31, L1 9.53238e-05, Linf 0.00438038, total time[s] 0.081388 +Converged at iteration 27, L1 8.80858e-05, Linf 0.00424221, total time[s] 0.074469 +Converged at iteration 24, L1 8.44276e-05, Linf 0.00411876, total time[s] 0.071026 +Converged at iteration 23, L1 9.12866e-05, Linf 0.00434627, total time[s] 0.062693 +Converged at iteration 26, L1 6.9735e-05, Linf 0.00470035, total time[s] 0.071267 +Converged at iteration 29, L1 7.42173e-05, Linf 0.0049214, total time[s] 0.077626 +Converged at iteration 34, L1 8.18196e-05, Linf 0.00369168, total time[s] 0.087839 +Converged at iteration 31, L1 7.39976e-05, Linf 0.00349422, total time[s] 0.082152 +Converged at iteration 29, L1 7.21027e-05, Linf 0.00277211, total time[s] 0.085413 +Converged at iteration 32, L1 8.08066e-05, Linf 0.00350998, total time[s] 0.085965 +Converged at iteration 36, L1 8.2905e-05, Linf 0.00353713, total time[s] 0.100786 +Converged at iteration 33, L1 8.199e-05, Linf 0.00487554, total time[s] 0.088928 +Converged at iteration 28, L1 9.16634e-05, Linf 0.00420107, total time[s] 0.079063 +Converged at iteration 24, L1 8.15921e-05, Linf 0.00297592, total time[s] 0.067139 +Converged at iteration 26, L1 8.26156e-05, Linf 0.00391256, total time[s] 0.070854 +Converged at iteration 40, L1 6.62338e-05, Linf 0.00398369, total time[s] 0.1227 +Converged at iteration 35, L1 8.85348e-05, Linf 0.00364738, total time[s] 0.099271 +Converged at iteration 30, L1 9.01175e-05, Linf 0.00415438, total time[s] 0.080194 +Converged at iteration 31, L1 6.18504e-05, Linf 0.00504274, total time[s] 0.08181 +Converged at iteration 26, L1 9.94108e-05, Linf 0.00587818, total time[s] 0.068531 +Converged at iteration 22, L1 7.25981e-05, Linf 0.00422932, total time[s] 0.059635 +Converged at iteration 21, L1 6.39113e-05, Linf 0.00354585, total time[s] 0.05705 +Converged at iteration 24, L1 8.83232e-05, Linf 0.00494578, total time[s] 0.067124 +Converged at iteration 28, L1 7.23819e-05, Linf 0.00440662, total time[s] 0.086856 +Converged at iteration 26, L1 8.25433e-05, Linf 0.00519282, total time[s] 0.075584 +Converged at iteration 22, L1 7.0521e-05, Linf 0.00415326, total time[s] 0.064072 +Converged at iteration 18, L1 9.7788e-05, Linf 0.00397809, total time[s] 0.048655 +Converged at iteration 30, L1 9.85216e-05, Linf 0.00334636, total time[s] 0.085036 +Converged at iteration 20, L1 8.29901e-05, Linf 0.00484889, total time[s] 0.067628 +Converged at iteration 24, L1 7.05801e-05, Linf 0.00478265, total time[s] 0.071219 +Converged at iteration 31, L1 9.4778e-05, Linf 0.00438897, total time[s] 0.081679 +Converged at iteration 27, L1 8.81342e-05, Linf 0.00424765, total time[s] 0.076059 +Converged at iteration 24, L1 8.61536e-05, Linf 0.00625053, total time[s] 0.066654 +Converged at iteration 23, L1 9.13065e-05, Linf 0.00434601, total time[s] 0.064447 +Converged at iteration 26, L1 6.97655e-05, Linf 0.00469963, total time[s] 0.076399 +Converged at iteration 29, L1 7.43321e-05, Linf 0.00492574, total time[s] 0.082326 +Converged at iteration 34, L1 8.18034e-05, Linf 0.00369641, total time[s] 0.09091 +Converged at iteration 31, L1 7.39664e-05, Linf 0.00342919, total time[s] 0.081331 +Converged at iteration 29, L1 7.20505e-05, Linf 0.00275429, total time[s] 0.080227 +Converged at iteration 32, L1 8.07006e-05, Linf 0.00351034, total time[s] 0.085142 +Converged at iteration 36, L1 8.33429e-05, Linf 0.00352532, total time[s] 0.09685 +Converged at iteration 33, L1 8.2048e-05, Linf 0.00487488, total time[s] 0.090865 +Converged at iteration 28, L1 9.16515e-05, Linf 0.00420011, total time[s] 0.074044 +Converged at iteration 24, L1 8.15262e-05, Linf 0.00297518, total time[s] 0.063712 +Converged at iteration 26, L1 8.28399e-05, Linf 0.0039129, total time[s] 0.074817 +Converged at iteration 40, L1 6.56376e-05, Linf 0.00398263, total time[s] 0.101811 +Converged at iteration 35, L1 8.8693e-05, Linf 0.00364854, total time[s] 0.093858 +Converged at iteration 30, L1 9.02562e-05, Linf 0.00415446, total time[s] 0.079261 +Converged at iteration 31, L1 6.24751e-05, Linf 0.00504277, total time[s] 0.081244 +Converged at iteration 26, L1 9.92921e-05, Linf 0.00587767, total time[s] 0.069222 +Converged at iteration 22, L1 7.25363e-05, Linf 0.00422904, total time[s] 0.059719 +Converged at iteration 21, L1 6.39393e-05, Linf 0.00354547, total time[s] 0.057594 +Converged at iteration 24, L1 8.83743e-05, Linf 0.00494609, total time[s] 0.064617 +Converged at iteration 28, L1 7.25364e-05, Linf 0.00441341, total time[s] 0.075111 +Converged at iteration 26, L1 8.20732e-05, Linf 0.00521064, total time[s] 0.069601 +Converged at iteration 22, L1 6.90305e-05, Linf 0.00415521, total time[s] 0.059345 +Converged at iteration 18, L1 9.78075e-05, Linf 0.00397973, total time[s] 0.052724 +Converged at iteration 30, L1 9.84175e-05, Linf 0.00334614, total time[s] 0.110022 +Converged at iteration 20, L1 8.29929e-05, Linf 0.00474536, total time[s] 0.055447 +Converged at iteration 24, L1 7.04266e-05, Linf 0.00478217, total time[s] 0.064534 +Converged at iteration 31, L1 9.52041e-05, Linf 0.00438547, total time[s] 0.086603 +Converged at iteration 27, L1 8.84427e-05, Linf 0.00424996, total time[s] 0.073163 +Converged at iteration 24, L1 8.4469e-05, Linf 0.00412158, total time[s] 0.062957 +Converged at iteration 23, L1 9.13002e-05, Linf 0.00434584, total time[s] 0.061661 +Converged at iteration 26, L1 6.97674e-05, Linf 0.00469947, total time[s] 0.070548 +Converged at iteration 29, L1 7.45627e-05, Linf 0.00492514, total time[s] 0.080026 +Converged at iteration 34, L1 8.17985e-05, Linf 0.00369913, total time[s] 0.089686 +Converged at iteration 31, L1 7.39878e-05, Linf 0.00352936, total time[s] 0.086937 +Converged at iteration 29, L1 7.20401e-05, Linf 0.0027541, total time[s] 0.089419 +Converged at iteration 32, L1 8.08588e-05, Linf 0.0035099, total time[s] 0.082697 +Converged at iteration 36, L1 8.36973e-05, Linf 0.00352044, total time[s] 0.091979 +Converged at iteration 33, L1 8.20098e-05, Linf 0.00487475, total time[s] 0.084725 +Converged at iteration 28, L1 9.16451e-05, Linf 0.00420515, total time[s] 0.075218 +Converged at iteration 24, L1 8.14728e-05, Linf 0.00297475, total time[s] 0.06482 +Converged at iteration 26, L1 8.21151e-05, Linf 0.00389596, total time[s] 0.071152 +Converged at iteration 40, L1 6.6165e-05, Linf 0.00394619, total time[s] 0.114557 +Converged at iteration 35, L1 8.85994e-05, Linf 0.00361588, total time[s] 0.095435 +Converged at iteration 30, L1 9.01541e-05, Linf 0.00417226, total time[s] 0.091926 +Converged at iteration 31, L1 6.07805e-05, Linf 0.00504276, total time[s] 0.089595 +Converged at iteration 26, L1 9.90179e-05, Linf 0.00582176, total time[s] 0.076725 +Converged at iteration 22, L1 7.26832e-05, Linf 0.00422915, total time[s] 0.070094 +Converged at iteration 21, L1 6.4025e-05, Linf 0.00354597, total time[s] 0.058431 +Converged at iteration 24, L1 8.83242e-05, Linf 0.00494598, total time[s] 0.10353 +Converged at iteration 28, L1 7.22767e-05, Linf 0.00441329, total time[s] 0.075959 +Converged at iteration 26, L1 8.19066e-05, Linf 0.00520958, total time[s] 0.075453 +Converged at iteration 22, L1 6.88268e-05, Linf 0.00415409, total time[s] 0.061736 +Converged at iteration 18, L1 9.78063e-05, Linf 0.00397889, total time[s] 0.055551 +Converged at iteration 30, L1 9.85842e-05, Linf 0.00334627, total time[s] 0.094809 +Converged at iteration 20, L1 8.40633e-05, Linf 0.00479, total time[s] 0.06921 +Converged at iteration 24, L1 7.0335e-05, Linf 0.00477946, total time[s] 0.071519 +Converged at iteration 31, L1 9.54371e-05, Linf 0.00438644, total time[s] 0.079668 +Converged at iteration 27, L1 8.82323e-05, Linf 0.00424842, total time[s] 0.069981 +Converged at iteration 24, L1 8.4457e-05, Linf 0.00412103, total time[s] 0.063519 +Converged at iteration 23, L1 9.12964e-05, Linf 0.00434599, total time[s] 0.060634 +Converged at iteration 26, L1 6.97791e-05, Linf 0.00479658, total time[s] 0.067839 +Converged at iteration 29, L1 7.44788e-05, Linf 0.00492917, total time[s] 0.074215 +Converged at iteration 34, L1 8.18323e-05, Linf 0.00369671, total time[s] 0.085629 +Converged at iteration 31, L1 7.39663e-05, Linf 0.00349488, total time[s] 0.081121 +Converged at iteration 29, L1 7.20561e-05, Linf 0.00277066, total time[s] 0.074925 +Converged at iteration 32, L1 8.10486e-05, Linf 0.00351066, total time[s] 0.08936 +Converged at iteration 36, L1 8.30854e-05, Linf 0.00351989, total time[s] 0.09776 +Converged at iteration 33, L1 8.2025e-05, Linf 0.00487482, total time[s] 0.097078 +Converged at iteration 28, L1 9.18149e-05, Linf 0.00419998, total time[s] 0.080553 +Converged at iteration 24, L1 8.14824e-05, Linf 0.00297499, total time[s] 0.073152 +Converged at iteration 26, L1 8.21114e-05, Linf 0.00389585, total time[s] 0.068379 +Converged at iteration 40, L1 6.55659e-05, Linf 0.00398369, total time[s] 0.100941 +Converged at iteration 35, L1 8.85219e-05, Linf 0.00364722, total time[s] 0.092104 +Converged at iteration 30, L1 9.01412e-05, Linf 0.00415474, total time[s] 0.078937 +Converged at iteration 31, L1 6.17655e-05, Linf 0.00504276, total time[s] 0.079773 +Converged at iteration 26, L1 9.9018e-05, Linf 0.00587783, total time[s] 0.067337 +Converged at iteration 22, L1 7.25259e-05, Linf 0.00422892, total time[s] 0.06081 +Converged at iteration 21, L1 6.39256e-05, Linf 0.00354559, total time[s] 0.05862 +Converged at iteration 24, L1 8.83309e-05, Linf 0.00495822, total time[s] 0.065962 +Converged at iteration 28, L1 7.22723e-05, Linf 0.00441825, total time[s] 0.076182 +Converged at iteration 26, L1 8.2402e-05, Linf 0.00521021, total time[s] 0.073009 +Converged at iteration 22, L1 6.95798e-05, Linf 0.00412398, total time[s] 0.061642 +Converged at iteration 18, L1 9.77788e-05, Linf 0.00397947, total time[s] 0.049122 +Converged at iteration 30, L1 9.8424e-05, Linf 0.00334619, total time[s] 0.079324 +Converged at iteration 20, L1 8.30441e-05, Linf 0.0047456, total time[s] 0.056302 +Converged at iteration 24, L1 7.05604e-05, Linf 0.00478218, total time[s] 0.064429 +Converged at iteration 31, L1 9.51635e-05, Linf 0.00438456, total time[s] 0.080889 +Converged at iteration 27, L1 8.8172e-05, Linf 0.00424892, total time[s] 0.071654 +Converged at iteration 24, L1 8.44456e-05, Linf 0.00412132, total time[s] 0.064702 +Converged at iteration 23, L1 9.12953e-05, Linf 0.00434585, total time[s] 0.062743 +Converged at iteration 26, L1 6.99794e-05, Linf 0.00469926, total time[s] 0.069617 +Converged at iteration 29, L1 7.42847e-05, Linf 0.00492594, total time[s] 0.081162 +Converged at iteration 34, L1 8.17912e-05, Linf 0.00369867, total time[s] 0.088271 +Converged at iteration 31, L1 7.39711e-05, Linf 0.00349474, total time[s] 0.099182 +Converged at iteration 29, L1 7.20368e-05, Linf 0.00275399, total time[s] 0.076387 +Converged at iteration 32, L1 8.12534e-05, Linf 0.00351069, total time[s] 0.086666 +Converged at iteration 36, L1 8.40271e-05, Linf 0.00352006, total time[s] 0.09607 +Converged at iteration 33, L1 8.1995e-05, Linf 0.00487473, total time[s] 0.087668 +Converged at iteration 28, L1 9.16548e-05, Linf 0.00419984, total time[s] 0.074373 +Converged at iteration 24, L1 8.14776e-05, Linf 0.00297479, total time[s] 0.065025 +Converged at iteration 26, L1 8.21381e-05, Linf 0.0038973, total time[s] 0.07401 +Converged at iteration 40, L1 6.55683e-05, Linf 0.00398353, total time[s] 0.116685 +Converged at iteration 35, L1 8.8476e-05, Linf 0.0036883, total time[s] 0.094099 +Converged at iteration 30, L1 9.0571e-05, Linf 0.0041663, total time[s] 0.078533 +Converged at iteration 31, L1 6.07646e-05, Linf 0.00504275, total time[s] 0.081839 +Converged at iteration 26, L1 9.90359e-05, Linf 0.0058778, total time[s] 0.070212 +Converged at iteration 22, L1 7.26473e-05, Linf 0.00422907, total time[s] 0.061577 +Converged at iteration 21, L1 6.40075e-05, Linf 0.00354594, total time[s] 0.05891 +Converged at iteration 24, L1 8.8327e-05, Linf 0.00493109, total time[s] 0.064804 +Converged at iteration 28, L1 7.22804e-05, Linf 0.00441273, total time[s] 0.074966 +Converged at iteration 26, L1 8.13487e-05, Linf 0.0052097, total time[s] 0.072279 +Converged at iteration 22, L1 6.87772e-05, Linf 0.00415476, total time[s] 0.067036 +Converged at iteration 18, L1 9.79654e-05, Linf 0.00397909, total time[s] 0.049186 +Converged at iteration 30, L1 9.84212e-05, Linf 0.00334631, total time[s] 0.077161 +Converged at iteration 20, L1 8.29187e-05, Linf 0.00475045, total time[s] 0.054855 +Converged at iteration 24, L1 7.19535e-05, Linf 0.00619513, total time[s] 0.072975 +Converged at iteration 31, L1 9.53814e-05, Linf 0.00438415, total time[s] 0.08804 +Converged at iteration 27, L1 8.8148e-05, Linf 0.00424764, total time[s] 0.070927 +Converged at iteration 24, L1 8.44943e-05, Linf 0.00412127, total time[s] 0.062166 +Converged at iteration 23, L1 9.12941e-05, Linf 0.00434564, total time[s] 0.060586 +Converged at iteration 26, L1 6.98598e-05, Linf 0.00469909, total time[s] 0.068169 +Converged at iteration 29, L1 7.58007e-05, Linf 0.00688037, total time[s] 0.075518 +Converged at iteration 34, L1 8.18064e-05, Linf 0.00371143, total time[s] 0.087926 +Converged at iteration 31, L1 7.39558e-05, Linf 0.00346524, total time[s] 0.079264 +Converged at iteration 29, L1 7.21362e-05, Linf 0.00274078, total time[s] 0.073689 +Converged at iteration 32, L1 8.09452e-05, Linf 0.00352938, total time[s] 0.080666 +Converged at iteration 36, L1 8.36557e-05, Linf 0.00353904, total time[s] 0.089882 +Converged at iteration 33, L1 8.20316e-05, Linf 0.00487517, total time[s] 0.082921 +Converged at iteration 28, L1 9.15999e-05, Linf 0.00420008, total time[s] 0.071878 +Converged at iteration 24, L1 8.15069e-05, Linf 0.00297485, total time[s] 0.061777 +Converged at iteration 26, L1 8.22114e-05, Linf 0.00389583, total time[s] 0.067165 +Converged at iteration 40, L1 6.83976e-05, Linf 0.00367991, total time[s] 0.170307 +Converged at iteration 35, L1 7.71109e-05, Linf 0.00340478, total time[s] 0.120015 +Converged at iteration 30, L1 9.68127e-05, Linf 0.00432317, total time[s] 0.076886 +Converged at iteration 31, L1 6.20162e-05, Linf 0.00500251, total time[s] 0.079192 +Converged at iteration 27, L1 6.26787e-05, Linf 0.00499539, total time[s] 0.06991 +Converged at iteration 22, L1 8.63468e-05, Linf 0.0044882, total time[s] 0.057972 +Converged at iteration 20, L1 9.61871e-05, Linf 0.00402605, total time[s] 0.056585 +Converged at iteration 24, L1 8.84468e-05, Linf 0.00482802, total time[s] 0.062423 +Converged at iteration 28, L1 7.39705e-05, Linf 0.00445907, total time[s] 0.076631 +Converged at iteration 26, L1 8.14558e-05, Linf 0.00545193, total time[s] 0.07504 +Converged at iteration 22, L1 7.39234e-05, Linf 0.00508748, total time[s] 0.063618 +Converged at iteration 19, L1 6.6313e-05, Linf 0.003931, total time[s] 0.055107 +Converged at iteration 30, L1 7.98882e-05, Linf 0.00326931, total time[s] 0.077218 +Converged at iteration 20, L1 8.45104e-05, Linf 0.004653, total time[s] 0.05369 +Converged at iteration 24, L1 7.11542e-05, Linf 0.00485662, total time[s] 0.067796 +Converged at iteration 31, L1 8.93406e-05, Linf 0.00570021, total time[s] 0.079555 +Converged at iteration 27, L1 9.91453e-05, Linf 0.00569956, total time[s] 0.069806 +Converged at iteration 24, L1 8.79223e-05, Linf 0.00465064, total time[s] 0.06342 +Converged at iteration 23, L1 9.21886e-05, Linf 0.0041288, total time[s] 0.060216 +Converged at iteration 26, L1 7.21886e-05, Linf 0.00446084, total time[s] 0.067275 +Converged at iteration 29, L1 7.8203e-05, Linf 0.0048993, total time[s] 0.07492 +Converged at iteration 34, L1 7.19325e-05, Linf 0.00412721, total time[s] 0.096089 +Converged at iteration 30, L1 9.39264e-05, Linf 0.00433005, total time[s] 0.087537 +Converged at iteration 28, L1 9.5293e-05, Linf 0.00311073, total time[s] 0.113305 +Converged at iteration 32, L1 9.51614e-05, Linf 0.0037657, total time[s] 0.089502 +Converged at iteration 37, L1 7.37116e-05, Linf 0.00327861, total time[s] 0.14895 +Converged at iteration 33, L1 8.46566e-05, Linf 0.00474296, total time[s] 0.101758 +Converged at iteration 28, L1 9.68919e-05, Linf 0.00426268, total time[s] 0.073453 +Converged at iteration 24, L1 8.83136e-05, Linf 0.00325703, total time[s] 0.062289 +Converged at iteration 26, L1 8.99034e-05, Linf 0.0038396, total time[s] 0.079689 +Converged at iteration 40, L1 6.70491e-05, Linf 0.00393397, total time[s] 0.142672 +Converged at iteration 35, L1 8.66333e-05, Linf 0.00360876, total time[s] 0.114454 +Converged at iteration 30, L1 9.1688e-05, Linf 0.00420057, total time[s] 0.101575 +Converged at iteration 31, L1 6.20032e-05, Linf 0.00502319, total time[s] 0.102319 +Converged at iteration 26, L1 9.84553e-05, Linf 0.00577619, total time[s] 0.096819 +Converged at iteration 22, L1 7.17165e-05, Linf 0.00418141, total time[s] 0.067017 +Converged at iteration 21, L1 6.41016e-05, Linf 0.00348468, total time[s] 0.065624 +Converged at iteration 24, L1 8.93957e-05, Linf 0.00495028, total time[s] 0.075202 +Converged at iteration 28, L1 7.3328e-05, Linf 0.00443342, total time[s] 0.073804 +Converged at iteration 26, L1 8.01706e-05, Linf 0.00536267, total time[s] 0.07497 +Converged at iteration 22, L1 7.04426e-05, Linf 0.00442005, total time[s] 0.058469 +Converged at iteration 19, L1 5.49336e-05, Linf 0.00332059, total time[s] 0.052579 +Converged at iteration 30, L1 9.51796e-05, Linf 0.00330744, total time[s] 0.081983 +Converged at iteration 20, L1 8.42567e-05, Linf 0.0047269, total time[s] 0.057611 +Converged at iteration 24, L1 7.12438e-05, Linf 0.00452981, total time[s] 0.065218 +Converged at iteration 31, L1 9.43743e-05, Linf 0.00482, total time[s] 0.095224 +Converged at iteration 27, L1 9.41311e-05, Linf 0.00468405, total time[s] 0.077834 +Converged at iteration 24, L1 8.51933e-05, Linf 0.00428104, total time[s] 0.065644 +Converged at iteration 23, L1 9.24294e-05, Linf 0.00431941, total time[s] 0.064033 +Converged at iteration 26, L1 7.25074e-05, Linf 0.00488102, total time[s] 0.073007 +Converged at iteration 29, L1 7.55623e-05, Linf 0.00488643, total time[s] 0.080585 +Converged at iteration 34, L1 8.13674e-05, Linf 0.00406153, total time[s] 0.088781 +Converged at iteration 31, L1 7.17265e-05, Linf 0.00355216, total time[s] 0.081388 +Converged at iteration 29, L1 7.02728e-05, Linf 0.00272738, total time[s] 0.077348 +Converged at iteration 32, L1 8.28404e-05, Linf 0.00354502, total time[s] 0.083857 +Converged at iteration 36, L1 8.71711e-05, Linf 0.00357869, total time[s] 0.09329 +Converged at iteration 33, L1 8.3278e-05, Linf 0.00484747, total time[s] 0.086295 +Converged at iteration 28, L1 9.12006e-05, Linf 0.00413152, total time[s] 0.075007 +Converged at iteration 24, L1 8.02723e-05, Linf 0.00290884, total time[s] 0.064367 +Converged at iteration 26, L1 8.44202e-05, Linf 0.00390642, total time[s] 0.069994 +Converged at iteration 40, L1 6.4462e-05, Linf 0.00418843, total time[s] 0.107551 +Converged at iteration 35, L1 9.63248e-05, Linf 0.003857, total time[s] 0.093 +Converged at iteration 30, L1 7.67203e-05, Linf 0.00420677, total time[s] 0.079285 +Converged at iteration 31, L1 6.15767e-05, Linf 0.00506464, total time[s] 0.081859 +Converged at iteration 26, L1 9.10576e-05, Linf 0.00568978, total time[s] 0.069395 +Converged at iteration 21, L1 9.61117e-05, Linf 0.00461199, total time[s] 0.057721 +Converged at iteration 21, L1 6.93363e-05, Linf 0.00393355, total time[s] 0.058834 +Converged at iteration 24, L1 8.29726e-05, Linf 0.00519692, total time[s] 0.065811 +Converged at iteration 28, L1 6.79703e-05, Linf 0.00440904, total time[s] 0.074818 +Converged at iteration 26, L1 8.13459e-05, Linf 0.00428453, total time[s] 0.069267 +Converged at iteration 21, L1 8.52603e-05, Linf 0.00433736, total time[s] 0.062265 +Converged at iteration 18, L1 7.35793e-05, Linf 0.0029899, total time[s] 0.052694 +Converged at iteration 31, L1 7.50409e-05, Linf 0.00268241, total time[s] 0.084133 +Converged at iteration 20, L1 8.18492e-05, Linf 0.00494556, total time[s] 0.055375 +Converged at iteration 24, L1 6.88881e-05, Linf 0.005, total time[s] 0.065619 +Converged at iteration 30, L1 9.43239e-05, Linf 0.00346039, total time[s] 0.087044 +Converged at iteration 25, L1 9.01385e-05, Linf 0.00466777, total time[s] 0.076616 +Converged at iteration 23, L1 8.37214e-05, Linf 0.00393114, total time[s] 0.067797 +Converged at iteration 23, L1 9.32723e-05, Linf 0.00455941, total time[s] 0.068115 +Converged at iteration 26, L1 6.88459e-05, Linf 0.00492155, total time[s] 0.073846 +Converged at iteration 29, L1 7.12279e-05, Linf 0.00490012, total time[s] 0.082337 +Converged at iteration 32, L1 8.57463e-05, Linf 0.00350096, total time[s] 0.082625 +Converged at iteration 31, L1 7.25335e-05, Linf 0.00304811, total time[s] 0.080246 +Converged at iteration 29, L1 7.73547e-05, Linf 0.00291212, total time[s] 0.076183 +Converged at iteration 32, L1 7.55769e-05, Linf 0.0033745, total time[s] 0.083771 +Converged at iteration 35, L1 9.72485e-05, Linf 0.00406367, total time[s] 0.088258 +Converged at iteration 33, L1 8.06516e-05, Linf 0.00500135, total time[s] 0.08387 +Converged at iteration 28, L1 8.42856e-05, Linf 0.00398754, total time[s] 0.071858 +Converged at iteration 24, L1 7.80361e-05, Linf 0.00256146, total time[s] 0.062496 +Converged at iteration 26, L1 8.36284e-05, Linf 0.00405333, total time[s] 0.067181 +Converged at iteration 39, L1 9.3402e-05, Linf 0.00548874, total time[s] 0.098076 +Converged at iteration 36, L1 7.23715e-05, Linf 0.00384465, total time[s] 0.092043 +Converged at iteration 27, L1 5.17324e-05, Linf 0.00565748, total time[s] 0.069755 +Converged at iteration 31, L1 6.06767e-05, Linf 0.00508914, total time[s] 0.079183 +Converged at iteration 26, L1 7.63537e-05, Linf 0.00544341, total time[s] 0.067261 +Converged at iteration 21, L1 7.17576e-05, Linf 0.00380757, total time[s] 0.055956 +Converged at iteration 20, L1 6.89288e-05, Linf 0.00502943, total time[s] 0.05319 +Converged at iteration 22, L1 7.53695e-05, Linf 0.00751927, total time[s] 0.05792 +Converged at iteration 26, L1 9.72815e-05, Linf 0.00651818, total time[s] 0.068041 +Converged at iteration 25, L1 7.5023e-05, Linf 0.00412523, total time[s] 0.065542 +Converged at iteration 20, L1 8.86112e-05, Linf 0.00555823, total time[s] 0.053365 +Converged at iteration 17, L1 8.52563e-05, Linf 0.00399917, total time[s] 0.045997 +Converged at iteration 31, L1 9.13864e-05, Linf 0.00277118, total time[s] 0.079792 +Converged at iteration 20, L1 6.64678e-05, Linf 0.00539796, total time[s] 0.053371 +Converged at iteration 24, L1 6.29602e-05, Linf 0.00552361, total time[s] 0.062884 +Converged at iteration 28, L1 7.03791e-05, Linf 0.00374229, total time[s] 0.072701 +Converged at iteration 23, L1 9.55995e-05, Linf 0.00710147, total time[s] 0.060466 +Converged at iteration 21, L1 9.29953e-05, Linf 0.00485104, total time[s] 0.059514 +Converged at iteration 23, L1 7.89248e-05, Linf 0.00415508, total time[s] 0.06043 +Converged at iteration 25, L1 9.93456e-05, Linf 0.00625415, total time[s] 0.066634 +Converged at iteration 28, L1 9.8309e-05, Linf 0.005867, total time[s] 0.072012 +Converged at iteration 30, L1 6.86272e-05, Linf 0.00488123, total time[s] 0.077366 +Converged at iteration 28, L1 8.30356e-05, Linf 0.00353531, total time[s] 0.072269 +Converged at iteration 29, L1 8.83443e-05, Linf 0.00329426, total time[s] 0.082026 +Converged at iteration 31, L1 6.94628e-05, Linf 0.0029103, total time[s] 0.084519 +Converged at iteration 31, L1 9.19987e-05, Linf 0.00460078, total time[s] 0.081685 +Converged at iteration 33, L1 7.41874e-05, Linf 0.00530549, total time[s] 0.132837 +Converged at iteration 28, L1 6.99511e-05, Linf 0.00368885, total time[s] 0.08919 +Converged at iteration 24, L1 8.78554e-05, Linf 0.00186798, total time[s] 0.071608 +Converged at iteration 25, L1 6.9609e-05, Linf 0.00422724, total time[s] 0.072495 +Converged at iteration 39, L1 7.65176e-05, Linf 0.00659672, total time[s] 0.11218 +Converged at iteration 36, L1 7.35547e-05, Linf 0.00526668, total time[s] 0.095938 +Converged at iteration 24, L1 7.54793e-05, Linf 0.00411544, total time[s] 0.070339 +Converged at iteration 31, L1 5.85946e-05, Linf 0.00509164, total time[s] 0.114744 +Converged at iteration 25, L1 8.67113e-05, Linf 0.00579455, total time[s] 0.126963 +Converged at iteration 20, L1 9.2231e-05, Linf 0.0038018, total time[s] 0.06431 +Converged at iteration 19, L1 6.61422e-05, Linf 0.00441286, total time[s] 0.058205 +Converged at iteration 20, L1 9.17178e-05, Linf 0.00657082, total time[s] 0.083853 +Converged at iteration 24, L1 7.93802e-05, Linf 0.00495822, total time[s] 0.072073 +Converged at iteration 24, L1 7.5839e-05, Linf 0.00492614, total time[s] 0.064567 +Converged at iteration 20, L1 6.05432e-05, Linf 0.00519512, total time[s] 0.054438 +Converged at iteration 17, L1 5.19433e-05, Linf 0.00241754, total time[s] 0.04971 +Converged at iteration 32, L1 6.88666e-05, Linf 0.00253744, total time[s] 0.086007 +Converged at iteration 19, L1 9.35388e-05, Linf 0.00720354, total time[s] 0.054638 +Converged at iteration 23, L1 7.80454e-05, Linf 0.0071114, total time[s] 0.060972 +Converged at iteration 26, L1 8.14178e-05, Linf 0.00603224, total time[s] 0.072984 +Converged at iteration 23, L1 5.78779e-05, Linf 0.00603784, total time[s] 0.064765 +Converged at iteration 20, L1 8.30773e-05, Linf 0.00552399, total time[s] 0.056428 +Converged at iteration 22, L1 9.96534e-05, Linf 0.00479385, total time[s] 0.061482 +Converged at iteration 25, L1 8.4759e-05, Linf 0.00441169, total time[s] 0.066222 +Converged at iteration 28, L1 7.81643e-05, Linf 0.00353713, total time[s] 0.072872 +Converged at iteration 29, L1 7.48747e-05, Linf 0.0061199, total time[s] 0.075361 +Converged at iteration 27, L1 7.35017e-05, Linf 0.00402009, total time[s] 0.070728 +Converged at iteration 29, L1 7.65663e-05, Linf 0.00380597, total time[s] 0.075274 +Converged at iteration 29, L1 9.17929e-05, Linf 0.00277217, total time[s] 0.075783 +Converged at iteration 28, L1 8.35546e-05, Linf 0.00273871, total time[s] 0.074508 +Converged at iteration 33, L1 6.17995e-05, Linf 0.00592742, total time[s] 0.084511 +Converged at iteration 27, L1 6.87695e-05, Linf 0.00334615, total time[s] 0.070128 +Converged at iteration 24, L1 9.65527e-05, Linf 0.0023907, total time[s] 0.064414 +Converged at iteration 23, L1 7.56527e-05, Linf 0.00336861, total time[s] 0.063758 +Converged at iteration 39, L1 7.44145e-05, Linf 0.00661486, total time[s] 0.101331 +Converged at iteration 36, L1 7.17485e-05, Linf 0.00533838, total time[s] 0.094454 +Converged at iteration 24, L1 7.43454e-05, Linf 0.0038846, total time[s] 0.063859 +Converged at iteration 31, L1 5.69579e-05, Linf 0.00507394, total time[s] 0.080242 +Converged at iteration 25, L1 8.72743e-05, Linf 0.0058404, total time[s] 0.065542 +Converged at iteration 20, L1 9.43677e-05, Linf 0.00386634, total time[s] 0.05427 +Converged at iteration 19, L1 6.38612e-05, Linf 0.00430465, total time[s] 0.051937 +Converged at iteration 20, L1 9.02512e-05, Linf 0.00655209, total time[s] 0.055442 +Converged at iteration 24, L1 7.6708e-05, Linf 0.00459204, total time[s] 0.066268 +Converged at iteration 24, L1 7.68415e-05, Linf 0.00499215, total time[s] 0.0683 +Converged at iteration 20, L1 6.12131e-05, Linf 0.00515681, total time[s] 0.055548 +Converged at iteration 16, L1 9.93294e-05, Linf 0.00457304, total time[s] 0.049105 +Converged at iteration 32, L1 6.91892e-05, Linf 0.00257307, total time[s] 0.099619 +Converged at iteration 19, L1 9.351e-05, Linf 0.00697076, total time[s] 0.052065 +Converged at iteration 23, L1 7.74222e-05, Linf 0.00702793, total time[s] 0.061515 +Converged at iteration 26, L1 7.99041e-05, Linf 0.00596078, total time[s] 0.068475 +Converged at iteration 23, L1 5.71336e-05, Linf 0.00598848, total time[s] 0.062065 +Converged at iteration 20, L1 8.25398e-05, Linf 0.00551221, total time[s] 0.057647 +Converged at iteration 23, L1 6.34776e-05, Linf 0.0028781, total time[s] 0.063509 +Converged at iteration 25, L1 8.37496e-05, Linf 0.00419711, total time[s] 0.072034 +Converged at iteration 28, L1 7.73524e-05, Linf 0.00351775, total time[s] 0.083582 +Converged at iteration 29, L1 7.46237e-05, Linf 0.00612442, total time[s] 0.084645 +Converged at iteration 27, L1 7.36934e-05, Linf 0.00399413, total time[s] 0.086046 +Converged at iteration 29, L1 7.76227e-05, Linf 0.00382465, total time[s] 0.088698 +Converged at iteration 29, L1 9.19437e-05, Linf 0.00277467, total time[s] 0.090565 +Converged at iteration 28, L1 8.3291e-05, Linf 0.00266426, total time[s] 0.081036 +Converged at iteration 33, L1 6.0042e-05, Linf 0.00585287, total time[s] 0.091265 +Converged at iteration 27, L1 6.88025e-05, Linf 0.00343114, total time[s] 0.071578 +Converged at iteration 24, L1 9.89986e-05, Linf 0.00243571, total time[s] 0.064335 +Converged at iteration 23, L1 7.49205e-05, Linf 0.00326581, total time[s] 0.071404 +Converged at iteration 39, L1 7.24322e-05, Linf 0.00662474, total time[s] 0.100058 +Converged at iteration 36, L1 7.0217e-05, Linf 0.00539715, total time[s] 0.096391 +Converged at iteration 24, L1 7.36927e-05, Linf 0.00367949, total time[s] 0.064657 +Converged at iteration 31, L1 5.62366e-05, Linf 0.0050447, total time[s] 0.08069 +Converged at iteration 25, L1 8.87619e-05, Linf 0.00599556, total time[s] 0.066335 +Converged at iteration 20, L1 9.84514e-05, Linf 0.00391933, total time[s] 0.054123 +Converged at iteration 19, L1 6.15635e-05, Linf 0.00418996, total time[s] 0.052233 +Converged at iteration 20, L1 8.83453e-05, Linf 0.00608439, total time[s] 0.055961 +Converged at iteration 24, L1 7.43062e-05, Linf 0.0042251, total time[s] 0.064626 +Converged at iteration 24, L1 7.84e-05, Linf 0.00506617, total time[s] 0.064154 +Converged at iteration 20, L1 6.25724e-05, Linf 0.00517393, total time[s] 0.054424 +Converged at iteration 16, L1 9.79114e-05, Linf 0.00481182, total time[s] 0.049291 +Converged at iteration 32, L1 6.84864e-05, Linf 0.0025985, total time[s] 0.103241 +Converged at iteration 19, L1 9.38014e-05, Linf 0.00688499, total time[s] 0.057844 +Converged at iteration 23, L1 7.71468e-05, Linf 0.00694957, total time[s] 0.067108 +Converged at iteration 26, L1 7.96821e-05, Linf 0.00590492, total time[s] 0.073258 +Converged at iteration 23, L1 5.6882e-05, Linf 0.00600164, total time[s] 0.062709 +Converged at iteration 20, L1 8.36593e-05, Linf 0.00547948, total time[s] 0.05457 +Converged at iteration 23, L1 6.51219e-05, Linf 0.0028339, total time[s] 0.062969 +Converged at iteration 25, L1 8.33852e-05, Linf 0.00403621, total time[s] 0.066038 +Converged at iteration 28, L1 7.71141e-05, Linf 0.00362285, total time[s] 0.073997 +Converged at iteration 29, L1 7.58715e-05, Linf 0.00618471, total time[s] 0.077553 +Converged at iteration 27, L1 7.51994e-05, Linf 0.00397715, total time[s] 0.072327 +Converged at iteration 29, L1 7.90692e-05, Linf 0.00387073, total time[s] 0.081867 +Converged at iteration 29, L1 9.24583e-05, Linf 0.00278047, total time[s] 0.07857 +Converged at iteration 28, L1 8.12902e-05, Linf 0.00260626, total time[s] 0.081598 +Converged at iteration 33, L1 5.83307e-05, Linf 0.00585229, total time[s] 0.089606 +Converged at iteration 27, L1 6.92768e-05, Linf 0.00354047, total time[s] 0.071422 +Converged at iteration 25, L1 7.1213e-05, Linf 0.00193534, total time[s] 0.067741 +Converged at iteration 23, L1 7.44766e-05, Linf 0.00318557, total time[s] 0.076805 +Converged at iteration 39, L1 7.1061e-05, Linf 0.00661554, total time[s] 0.117564 +Converged at iteration 36, L1 6.83701e-05, Linf 0.0054726, total time[s] 0.093133 +Converged at iteration 24, L1 7.30142e-05, Linf 0.00336347, total time[s] 0.063306 +Converged at iteration 30, L1 9.89606e-05, Linf 0.00615494, total time[s] 0.078266 +Converged at iteration 25, L1 9.24516e-05, Linf 0.00625674, total time[s] 0.065018 +Converged at iteration 21, L1 5.85768e-05, Linf 0.00343245, total time[s] 0.058828 +Converged at iteration 19, L1 5.99415e-05, Linf 0.00410048, total time[s] 0.053477 +Converged at iteration 20, L1 8.6055e-05, Linf 0.00645552, total time[s] 0.053983 +Converged at iteration 24, L1 7.17587e-05, Linf 0.00445212, total time[s] 0.071956 +Converged at iteration 24, L1 8.06659e-05, Linf 0.00520124, total time[s] 0.065243 +Converged at iteration 20, L1 6.49036e-05, Linf 0.00543458, total time[s] 0.053716 +Converged at iteration 16, L1 9.73001e-05, Linf 0.00506882, total time[s] 0.044132 +Converged at iteration 32, L1 6.76613e-05, Linf 0.00262252, total time[s] 0.081236 +Converged at iteration 19, L1 9.42727e-05, Linf 0.00667551, total time[s] 0.054457 +Converged at iteration 23, L1 7.69196e-05, Linf 0.00683692, total time[s] 0.06001 +Converged at iteration 26, L1 8.02069e-05, Linf 0.00587873, total time[s] 0.070065 +Converged at iteration 23, L1 5.64183e-05, Linf 0.00597164, total time[s] 0.066219 +Converged at iteration 20, L1 8.53132e-05, Linf 0.0054707, total time[s] 0.053012 +Converged at iteration 23, L1 6.7397e-05, Linf 0.00288167, total time[s] 0.060782 +Converged at iteration 25, L1 8.39096e-05, Linf 0.00403637, total time[s] 0.065143 +Converged at iteration 28, L1 7.78393e-05, Linf 0.00369578, total time[s] 0.072309 +Converged at iteration 29, L1 7.74651e-05, Linf 0.0062406, total time[s] 0.078095 +Converged at iteration 27, L1 7.70058e-05, Linf 0.00399542, total time[s] 0.080168 +Converged at iteration 29, L1 8.1032e-05, Linf 0.003928, total time[s] 0.079095 +Converged at iteration 29, L1 9.28323e-05, Linf 0.00278278, total time[s] 0.083708 +Converged at iteration 28, L1 8.05558e-05, Linf 0.00253955, total time[s] 0.077015 +Converged at iteration 32, L1 9.89384e-05, Linf 0.00696301, total time[s] 0.086172 +Converged at iteration 27, L1 7.1706e-05, Linf 0.00375301, total time[s] 0.078528 +Converged at iteration 25, L1 7.21219e-05, Linf 0.00198974, total time[s] 0.072782 +Converged at iteration 23, L1 7.42589e-05, Linf 0.00305103, total time[s] 0.06528 +Converged at iteration 39, L1 6.95934e-05, Linf 0.0065215, total time[s] 0.107864 +Converged at iteration 36, L1 6.72213e-05, Linf 0.00550597, total time[s] 0.105269 +Converged at iteration 24, L1 7.25778e-05, Linf 0.0030954, total time[s] 0.067749 +Converged at iteration 30, L1 9.65814e-05, Linf 0.00610816, total time[s] 0.083447 +Converged at iteration 25, L1 9.81137e-05, Linf 0.00664186, total time[s] 0.06529 +Converged at iteration 21, L1 6.43839e-05, Linf 0.00333613, total time[s] 0.055779 +Converged at iteration 19, L1 5.89089e-05, Linf 0.00393822, total time[s] 0.051355 +Converged at iteration 20, L1 8.31022e-05, Linf 0.00614668, total time[s] 0.056198 +Converged at iteration 24, L1 6.87728e-05, Linf 0.00350149, total time[s] 0.063376 +Converged at iteration 24, L1 8.4707e-05, Linf 0.00542822, total time[s] 0.063395 +Converged at iteration 20, L1 6.93045e-05, Linf 0.00562926, total time[s] 0.053598 +Converged at iteration 16, L1 9.70798e-05, Linf 0.00552846, total time[s] 0.044757 +Converged at iteration 32, L1 6.56344e-05, Linf 0.00262268, total time[s] 0.08194 +Converged at iteration 19, L1 9.51727e-05, Linf 0.00657904, total time[s] 0.051019 +Converged at iteration 23, L1 7.66979e-05, Linf 0.00666818, total time[s] 0.062909 +Converged at iteration 26, L1 8.06493e-05, Linf 0.00586239, total time[s] 0.068283 +Converged at iteration 23, L1 5.58225e-05, Linf 0.0059741, total time[s] 0.061286 +Converged at iteration 20, L1 8.83596e-05, Linf 0.00553404, total time[s] 0.053949 +Converged at iteration 23, L1 6.93453e-05, Linf 0.00272167, total time[s] 0.061222 +Converged at iteration 25, L1 8.4728e-05, Linf 0.00378601, total time[s] 0.066388 +Converged at iteration 28, L1 8.01728e-05, Linf 0.00543061, total time[s] 0.07745 +Converged at iteration 29, L1 7.9686e-05, Linf 0.00631213, total time[s] 0.078258 +Converged at iteration 27, L1 7.9527e-05, Linf 0.00392728, total time[s] 0.072097 +Converged at iteration 29, L1 8.31385e-05, Linf 0.00399774, total time[s] 0.076027 +Converged at iteration 29, L1 9.33807e-05, Linf 0.00277531, total time[s] 0.075147 +Converged at iteration 28, L1 7.9949e-05, Linf 0.00247603, total time[s] 0.072466 +Converged at iteration 32, L1 9.6166e-05, Linf 0.00694517, total time[s] 0.082678 +Converged at iteration 27, L1 7.57891e-05, Linf 0.00408313, total time[s] 0.070719 +Converged at iteration 25, L1 6.9617e-05, Linf 0.00201715, total time[s] 0.065281 +Converged at iteration 23, L1 7.4913e-05, Linf 0.00299969, total time[s] 0.063914 +Converged at iteration 39, L1 6.78383e-05, Linf 0.00663637, total time[s] 0.110188 +Converged at iteration 36, L1 6.31399e-05, Linf 0.00554924, total time[s] 0.098165 +Converged at iteration 24, L1 7.27879e-05, Linf 0.003093, total time[s] 0.064435 +Converged at iteration 30, L1 9.41815e-05, Linf 0.0060541, total time[s] 0.078453 +Converged at iteration 26, L1 5.93235e-05, Linf 0.00588295, total time[s] 0.06746 +Converged at iteration 21, L1 7.63347e-05, Linf 0.0033628, total time[s] 0.05685 +Converged at iteration 19, L1 5.81288e-05, Linf 0.00394759, total time[s] 0.051638 +Converged at iteration 20, L1 7.96601e-05, Linf 0.00641222, total time[s] 0.060632 +Converged at iteration 24, L1 6.54701e-05, Linf 0.00398199, total time[s] 0.067729 +Converged at iteration 24, L1 8.91268e-05, Linf 0.00561127, total time[s] 0.064971 +Converged at iteration 20, L1 7.45504e-05, Linf 0.00581715, total time[s] 0.08102 +Converged at iteration 16, L1 9.67916e-05, Linf 0.00559493, total time[s] 0.05153 +Converged at iteration 32, L1 6.27958e-05, Linf 0.00266329, total time[s] 0.092746 +Converged at iteration 19, L1 9.37231e-05, Linf 0.00639163, total time[s] 0.054843 +Converged at iteration 23, L1 7.59781e-05, Linf 0.00645837, total time[s] 0.063389 +Converged at iteration 26, L1 8.20835e-05, Linf 0.00584251, total time[s] 0.071986 +Converged at iteration 23, L1 5.51738e-05, Linf 0.00599654, total time[s] 0.063715 +Converged at iteration 20, L1 9.3148e-05, Linf 0.00550927, total time[s] 0.059315 +Converged at iteration 23, L1 7.17444e-05, Linf 0.00263753, total time[s] 0.063082 +Converged at iteration 25, L1 8.60002e-05, Linf 0.00379763, total time[s] 0.065163 +Converged at iteration 28, L1 8.10431e-05, Linf 0.00428657, total time[s] 0.072257 +Converged at iteration 29, L1 8.25931e-05, Linf 0.006363, total time[s] 0.074079 +Converged at iteration 27, L1 8.28059e-05, Linf 0.00390219, total time[s] 0.07023 +Converged at iteration 29, L1 8.53824e-05, Linf 0.00406818, total time[s] 0.075667 +Converged at iteration 29, L1 9.3646e-05, Linf 0.00276551, total time[s] 0.074843 +Converged at iteration 28, L1 7.99189e-05, Linf 0.0024172, total time[s] 0.073513 +Converged at iteration 32, L1 9.29673e-05, Linf 0.00697324, total time[s] 0.081311 +Converged at iteration 27, L1 8.17056e-05, Linf 0.00449372, total time[s] 0.069733 +Converged at iteration 24, L1 9.87202e-05, Linf 0.00260702, total time[s] 0.062582 +Converged at iteration 23, L1 7.74646e-05, Linf 0.00287796, total time[s] 0.060146 +Converged at iteration 39, L1 6.65694e-05, Linf 0.00649369, total time[s] 0.099938 +Converged at iteration 36, L1 5.98604e-05, Linf 0.00556003, total time[s] 0.092475 +Converged at iteration 24, L1 7.41815e-05, Linf 0.00293933, total time[s] 0.062652 +Converged at iteration 30, L1 9.12533e-05, Linf 0.00598927, total time[s] 0.077351 +Converged at iteration 26, L1 6.45552e-05, Linf 0.00634107, total time[s] 0.07235 +Converged at iteration 21, L1 8.99224e-05, Linf 0.00429252, total time[s] 0.073785 +Converged at iteration 19, L1 5.71465e-05, Linf 0.00397518, total time[s] 0.054376 +Converged at iteration 20, L1 7.62147e-05, Linf 0.00595815, total time[s] 0.055439 +Converged at iteration 24, L1 6.19246e-05, Linf 0.00327169, total time[s] 0.06622 +Converged at iteration 24, L1 9.39499e-05, Linf 0.00593192, total time[s] 0.062805 +Converged at iteration 20, L1 8.1085e-05, Linf 0.00595891, total time[s] 0.053694 +Converged at iteration 16, L1 9.6587e-05, Linf 0.00611239, total time[s] 0.044992 +Converged at iteration 32, L1 5.78403e-05, Linf 0.00265419, total time[s] 0.082807 +Converged at iteration 19, L1 9.27726e-05, Linf 0.00622686, total time[s] 0.051537 +Converged at iteration 23, L1 7.49341e-05, Linf 0.00660033, total time[s] 0.062709 +Converged at iteration 26, L1 8.33802e-05, Linf 0.0058355, total time[s] 0.067946 +Converged at iteration 23, L1 5.48279e-05, Linf 0.00602761, total time[s] 0.063031 +Converged at iteration 20, L1 9.90178e-05, Linf 0.00559452, total time[s] 0.054546 +Converged at iteration 23, L1 7.34897e-05, Linf 0.00256901, total time[s] 0.065331 +Converged at iteration 25, L1 8.73076e-05, Linf 0.00358267, total time[s] 0.071511 +Converged at iteration 28, L1 8.3009e-05, Linf 0.00447677, total time[s] 0.072284 +Converged at iteration 29, L1 8.58633e-05, Linf 0.00649321, total time[s] 0.074553 +Converged at iteration 27, L1 8.60861e-05, Linf 0.0038509, total time[s] 0.06975 +Converged at iteration 29, L1 8.74474e-05, Linf 0.00414757, total time[s] 0.074629 +Converged at iteration 29, L1 9.41183e-05, Linf 0.00277901, total time[s] 0.075153 +Converged at iteration 28, L1 8.00486e-05, Linf 0.00236557, total time[s] 0.072471 +Converged at iteration 32, L1 8.89721e-05, Linf 0.00680218, total time[s] 0.084801 +Converged at iteration 27, L1 8.78657e-05, Linf 0.00499505, total time[s] 0.070335 +Converged at iteration 24, L1 9.96318e-05, Linf 0.00265033, total time[s] 0.067088 +Converged at iteration 23, L1 7.92549e-05, Linf 0.00273952, total time[s] 0.062794 +Converged at iteration 39, L1 6.49288e-05, Linf 0.00642214, total time[s] 0.115471 +Converged at iteration 35, L1 9.9865e-05, Linf 0.00647772, total time[s] 0.090823 +Converged at iteration 24, L1 7.65677e-05, Linf 0.00283796, total time[s] 0.064425 +Converged at iteration 30, L1 8.93075e-05, Linf 0.00591332, total time[s] 0.079057 +Converged at iteration 26, L1 6.97501e-05, Linf 0.00682616, total time[s] 0.068514 +Converged at iteration 22, L1 5.90003e-05, Linf 0.00438759, total time[s] 0.059851 +Converged at iteration 19, L1 5.75781e-05, Linf 0.00400974, total time[s] 0.05382 +Converged at iteration 20, L1 7.30619e-05, Linf 0.0056341, total time[s] 0.057128 +Converged at iteration 24, L1 5.87554e-05, Linf 0.00322917, total time[s] 0.065079 +Converged at iteration 24, L1 9.97732e-05, Linf 0.00617909, total time[s] 0.06506 +Converged at iteration 20, L1 8.82486e-05, Linf 0.00610801, total time[s] 0.062319 +Converged at iteration 16, L1 9.63882e-05, Linf 0.00643364, total time[s] 0.055939 +Converged at iteration 31, L1 9.38439e-05, Linf 0.00325803, total time[s] 0.083169 +Converged at iteration 19, L1 9.07368e-05, Linf 0.00603225, total time[s] 0.051443 +Converged at iteration 23, L1 7.31761e-05, Linf 0.00596085, total time[s] 0.061704 +Converged at iteration 26, L1 8.47654e-05, Linf 0.00580161, total time[s] 0.07828 +Converged at iteration 23, L1 5.54761e-05, Linf 0.00605841, total time[s] 0.074233 +Converged at iteration 21, L1 5.70102e-05, Linf 0.00472393, total time[s] 0.066772 +Converged at iteration 23, L1 7.38984e-05, Linf 0.00245307, total time[s] 0.063302 +Converged at iteration 25, L1 8.77682e-05, Linf 0.00348796, total time[s] 0.06585 +Converged at iteration 28, L1 8.57139e-05, Linf 0.00456387, total time[s] 0.079914 +Converged at iteration 29, L1 8.9707e-05, Linf 0.00656818, total time[s] 0.078178 +Converged at iteration 27, L1 8.95654e-05, Linf 0.00387195, total time[s] 0.078282 +Converged at iteration 29, L1 8.88961e-05, Linf 0.00423232, total time[s] 0.080905 +Converged at iteration 29, L1 9.51757e-05, Linf 0.00282445, total time[s] 0.076099 +Converged at iteration 28, L1 8.04342e-05, Linf 0.00232826, total time[s] 0.07896 +Converged at iteration 32, L1 8.36544e-05, Linf 0.00670168, total time[s] 0.084675 +Converged at iteration 27, L1 9.54729e-05, Linf 0.00555266, total time[s] 0.07078 +Converged at iteration 25, L1 6.46875e-05, Linf 0.00204224, total time[s] 0.065746 +Converged at iteration 23, L1 8.2351e-05, Linf 0.00264942, total time[s] 0.060829 +Converged at iteration 39, L1 6.17365e-05, Linf 0.00631386, total time[s] 0.101774 +Converged at iteration 35, L1 8.85418e-05, Linf 0.00638811, total time[s] 0.092415 +Converged at iteration 24, L1 7.92903e-05, Linf 0.00287701, total time[s] 0.062851 +Converged at iteration 30, L1 8.38722e-05, Linf 0.00582315, total time[s] 0.076616 +Converged at iteration 26, L1 7.53434e-05, Linf 0.00737045, total time[s] 0.075492 +Converged at iteration 22, L1 7.68768e-05, Linf 0.00539391, total time[s] 0.062279 +Converged at iteration 19, L1 5.82603e-05, Linf 0.00413005, total time[s] 0.05281 +Converged at iteration 20, L1 6.97432e-05, Linf 0.00537431, total time[s] 0.132667 +Converged at iteration 24, L1 5.57738e-05, Linf 0.00313753, total time[s] 0.076719 +Converged at iteration 25, L1 5.61602e-05, Linf 0.00523336, total time[s] 0.066562 +Converged at iteration 20, L1 9.6373e-05, Linf 0.00626004, total time[s] 0.053429 +Converged at iteration 16, L1 9.72072e-05, Linf 0.00666025, total time[s] 0.044058 +Converged at iteration 31, L1 8.8574e-05, Linf 0.00331545, total time[s] 0.079698 +Converged at iteration 19, L1 8.64977e-05, Linf 0.00581412, total time[s] 0.050905 +Converged at iteration 23, L1 7.11745e-05, Linf 0.00565644, total time[s] 0.061463 +Converged at iteration 26, L1 8.5759e-05, Linf 0.00571972, total time[s] 0.072071 +Converged at iteration 23, L1 5.63832e-05, Linf 0.00609892, total time[s] 0.060533 +Converged at iteration 21, L1 6.21518e-05, Linf 0.00472601, total time[s] 0.056122 +Converged at iteration 23, L1 7.33419e-05, Linf 0.00231158, total time[s] 0.062738 +Converged at iteration 25, L1 8.73406e-05, Linf 0.0033708, total time[s] 0.067655 +Converged at iteration 28, L1 8.90331e-05, Linf 0.00478516, total time[s] 0.074257 +Converged at iteration 29, L1 9.36252e-05, Linf 0.00665437, total time[s] 0.078787 +Converged at iteration 27, L1 9.27897e-05, Linf 0.00386539, total time[s] 0.078617 +Converged at iteration 29, L1 9.04713e-05, Linf 0.00433575, total time[s] 0.07748 +Converged at iteration 29, L1 9.59488e-05, Linf 0.00286504, total time[s] 0.077345 +Converged at iteration 28, L1 8.11531e-05, Linf 0.00228524, total time[s] 0.074067 +Converged at iteration 32, L1 7.7761e-05, Linf 0.0065922, total time[s] 0.083178 +Converged at iteration 28, L1 6.01519e-05, Linf 0.00517867, total time[s] 0.074421 +Converged at iteration 25, L1 6.86859e-05, Linf 0.00272255, total time[s] 0.067328 +Converged at iteration 23, L1 8.61924e-05, Linf 0.00256711, total time[s] 0.06121 +Converged at iteration 39, L1 5.62023e-05, Linf 0.00617769, total time[s] 0.100806 +Converged at iteration 35, L1 8.09495e-05, Linf 0.00652233, total time[s] 0.093207 +Converged at iteration 24, L1 8.35591e-05, Linf 0.00298795, total time[s] 0.065281 +Converged at iteration 30, L1 7.77503e-05, Linf 0.00572406, total time[s] 0.078839 +Converged at iteration 26, L1 8.03876e-05, Linf 0.00794793, total time[s] 0.069407 +Converged at iteration 22, L1 9.85181e-05, Linf 0.00650769, total time[s] 0.059655 +Converged at iteration 19, L1 6.06936e-05, Linf 0.00414056, total time[s] 0.052234 +Converged at iteration 20, L1 6.69768e-05, Linf 0.00486428, total time[s] 0.055419 +Converged at iteration 24, L1 5.379e-05, Linf 0.00309755, total time[s] 0.064877 +Converged at iteration 25, L1 6.00992e-05, Linf 0.00555988, total time[s] 0.076774 +Converged at iteration 21, L1 5.30936e-05, Linf 0.00541752, total time[s] 0.068735 +Converged at iteration 16, L1 9.83628e-05, Linf 0.00678554, total time[s] 0.044351 +Converged at iteration 31, L1 8.44666e-05, Linf 0.00331277, total time[s] 0.081444 +Converged at iteration 19, L1 8.03488e-05, Linf 0.00554058, total time[s] 0.052183 +Converged at iteration 23, L1 6.86548e-05, Linf 0.00530281, total time[s] 0.061997 +Converged at iteration 26, L1 8.7693e-05, Linf 0.00561541, total time[s] 0.069471 +Converged at iteration 23, L1 5.75398e-05, Linf 0.0061326, total time[s] 0.061945 +Converged at iteration 21, L1 6.8188e-05, Linf 0.004647, total time[s] 0.057027 +Converged at iteration 23, L1 7.18e-05, Linf 0.00213793, total time[s] 0.063066 +Converged at iteration 25, L1 8.81063e-05, Linf 0.00333979, total time[s] 0.06848 +Converged at iteration 28, L1 9.23597e-05, Linf 0.00522136, total time[s] 0.102202 +Converged at iteration 29, L1 9.83232e-05, Linf 0.00676205, total time[s] 0.111025 +Converged at iteration 27, L1 9.63251e-05, Linf 0.00368135, total time[s] 0.097898 +Converged at iteration 29, L1 9.4069e-05, Linf 0.00450416, total time[s] 0.107786 +Converged at iteration 29, L1 9.7247e-05, Linf 0.00291297, total time[s] 0.112283 +Converged at iteration 28, L1 8.29122e-05, Linf 0.00224274, total time[s] 0.096498 +Converged at iteration 32, L1 7.17533e-05, Linf 0.00645611, total time[s] 0.129495 +Converged at iteration 28, L1 6.26349e-05, Linf 0.00573618, total time[s] 0.092519 +Converged at iteration 25, L1 7.55662e-05, Linf 0.00344772, total time[s] 0.094271 +Converged at iteration 23, L1 9.03529e-05, Linf 0.0025255, total time[s] 0.085585 +Converged at iteration 38, L1 9.92377e-05, Linf 0.00723781, total time[s] 0.174123 +Converged at iteration 35, L1 6.78743e-05, Linf 0.00621532, total time[s] 0.123301 +Converged at iteration 24, L1 8.79518e-05, Linf 0.00314203, total time[s] 0.077174 +Converged at iteration 30, L1 7.20854e-05, Linf 0.00562898, total time[s] 0.080806 +Converged at iteration 26, L1 8.58725e-05, Linf 0.00853248, total time[s] 0.069993 +Converged at iteration 23, L1 6.91376e-05, Linf 0.00637202, total time[s] 0.06182 +Converged at iteration 19, L1 6.42396e-05, Linf 0.00433041, total time[s] 0.06842 +Converged at iteration 20, L1 6.43378e-05, Linf 0.00426059, total time[s] 0.090322 +Converged at iteration 23, L1 9.8913e-05, Linf 0.00450746, total time[s] 0.077992 +Converged at iteration 25, L1 6.46731e-05, Linf 0.00581065, total time[s] 0.082696 +Converged at iteration 21, L1 5.84677e-05, Linf 0.00553301, total time[s] 0.086599 +Converged at iteration 17, L1 5.45072e-05, Linf 0.00458794, total time[s] 0.059205 +Converged at iteration 31, L1 8.08273e-05, Linf 0.00330438, total time[s] 0.115756 +Converged at iteration 19, L1 7.24853e-05, Linf 0.00522772, total time[s] 0.059277 +Converged at iteration 23, L1 6.52813e-05, Linf 0.0049203, total time[s] 0.081356 +Converged at iteration 26, L1 8.87768e-05, Linf 0.00550717, total time[s] 0.07788 +Converged at iteration 23, L1 5.90269e-05, Linf 0.00617909, total time[s] 0.070652 +Converged at iteration 21, L1 7.44797e-05, Linf 0.00449147, total time[s] 0.062944 +Converged at iteration 23, L1 7.0269e-05, Linf 0.00193663, total time[s] 0.063352 +Converged at iteration 25, L1 8.85714e-05, Linf 0.00325274, total time[s] 0.072781 +Converged at iteration 28, L1 9.54441e-05, Linf 0.00558569, total time[s] 0.083155 +Converged at iteration 30, L1 5.13801e-05, Linf 0.00431696, total time[s] 0.08349 +Converged at iteration 27, L1 9.83888e-05, Linf 0.00363187, total time[s] 0.073546 +Converged at iteration 29, L1 9.81956e-05, Linf 0.00461345, total time[s] 0.075183 +Converged at iteration 29, L1 9.73812e-05, Linf 0.00291421, total time[s] 0.076054 +Converged at iteration 28, L1 8.43114e-05, Linf 0.00221241, total time[s] 0.081017 +Converged at iteration 32, L1 6.21526e-05, Linf 0.00625438, total time[s] 0.095537 +Converged at iteration 28, L1 6.92328e-05, Linf 0.00638294, total time[s] 0.078621 +Converged at iteration 25, L1 8.45327e-05, Linf 0.00420302, total time[s] 0.069051 +Converged at iteration 23, L1 9.56141e-05, Linf 0.00265302, total time[s] 0.064259 +Converged at iteration 38, L1 8.98381e-05, Linf 0.00710949, total time[s] 0.111691 +Converged at iteration 35, L1 5.51848e-05, Linf 0.00581994, total time[s] 0.104602 +Converged at iteration 24, L1 9.11243e-05, Linf 0.00326101, total time[s] 0.079297 +Converged at iteration 30, L1 6.72949e-05, Linf 0.00554245, total time[s] 0.081625 +Converged at iteration 26, L1 9.2269e-05, Linf 0.00911468, total time[s] 0.070177 +Converged at iteration 23, L1 8.56402e-05, Linf 0.0072841, total time[s] 0.061733 +Converged at iteration 19, L1 6.85445e-05, Linf 0.00449019, total time[s] 0.063608 +Converged at iteration 20, L1 6.1586e-05, Linf 0.00407935, total time[s] 0.062819 +Converged at iteration 23, L1 9.40243e-05, Linf 0.00452789, total time[s] 0.076576 +Converged at iteration 25, L1 6.86393e-05, Linf 0.00606623, total time[s] 0.082866 +Converged at iteration 21, L1 6.38662e-05, Linf 0.00575274, total time[s] 0.064568 +Converged at iteration 17, L1 5.47893e-05, Linf 0.00482474, total time[s] 0.064058 +Converged at iteration 31, L1 7.78164e-05, Linf 0.00337791, total time[s] 0.129786 +Converged at iteration 19, L1 6.34998e-05, Linf 0.00485066, total time[s] 0.063933 +Converged at iteration 22, L1 9.33749e-05, Linf 0.00526516, total time[s] 0.061556 +Converged at iteration 26, L1 9.11835e-05, Linf 0.0054028, total time[s] 0.073561 +Converged at iteration 23, L1 6.06252e-05, Linf 0.00626479, total time[s] 0.063065 +Converged at iteration 21, L1 8.03239e-05, Linf 0.00443567, total time[s] 0.057804 +Converged at iteration 23, L1 6.74385e-05, Linf 0.0016914, total time[s] 0.062962 +Converged at iteration 25, L1 8.72637e-05, Linf 0.00312376, total time[s] 0.074653 +Converged at iteration 28, L1 9.90822e-05, Linf 0.00596666, total time[s] 0.074626 +Converged at iteration 30, L1 5.42272e-05, Linf 0.0042325, total time[s] 0.091258 +Converged at iteration 28, L1 6.06688e-05, Linf 0.00423688, total time[s] 0.078118 +Converged at iteration 30, L1 6.29892e-05, Linf 0.00390121, total time[s] 0.085488 +Converged at iteration 29, L1 9.74703e-05, Linf 0.00290311, total time[s] 0.091974 +Converged at iteration 28, L1 8.90098e-05, Linf 0.00221299, total time[s] 0.085445 +Converged at iteration 31, L1 9.506e-05, Linf 0.00753153, total time[s] 0.086789 +Converged at iteration 28, L1 7.85015e-05, Linf 0.00703155, total time[s] 0.087382 +Converged at iteration 25, L1 9.53546e-05, Linf 0.00498169, total time[s] 0.102182 +Converged at iteration 24, L1 5.63025e-05, Linf 0.00200257, total time[s] 0.06658 +Converged at iteration 38, L1 7.89241e-05, Linf 0.00684955, total time[s] 0.163556 +Converged at iteration 34, L1 9.12599e-05, Linf 0.00694842, total time[s] 0.204672 +Converged at iteration 24, L1 9.29535e-05, Linf 0.00335745, total time[s] 0.137449 +Converged at iteration 30, L1 6.44285e-05, Linf 0.00545386, total time[s] 0.14587 +Converged at iteration 26, L1 9.84802e-05, Linf 0.00968394, total time[s] 0.169156 +Converged at iteration 24, L1 5.37483e-05, Linf 0.00675487, total time[s] 0.147685 +Converged at iteration 19, L1 7.41807e-05, Linf 0.0049708, total time[s] 0.086436 +Converged at iteration 20, L1 5.80585e-05, Linf 0.00391133, total time[s] 0.069798 +Converged at iteration 23, L1 9.16751e-05, Linf 0.0045547, total time[s] 0.077378 +Converged at iteration 25, L1 7.13954e-05, Linf 0.00629527, total time[s] 0.072847 +Converged at iteration 21, L1 6.84307e-05, Linf 0.00576785, total time[s] 0.059473 +Converged at iteration 17, L1 5.56835e-05, Linf 0.00497245, total time[s] 0.049418 +Converged at iteration 31, L1 7.57329e-05, Linf 0.00347387, total time[s] 0.085635 +Converged at iteration 18, L1 9.06047e-05, Linf 0.00570854, total time[s] 0.059166 +Converged at iteration 22, L1 8.37789e-05, Linf 0.00482259, total time[s] 0.063117 +Converged at iteration 26, L1 9.51645e-05, Linf 0.00531129, total time[s] 0.082515 +Converged at iteration 23, L1 6.29109e-05, Linf 0.00637317, total time[s] 0.065549 +Converged at iteration 21, L1 8.66962e-05, Linf 0.00430969, total time[s] 0.058789 +Converged at iteration 23, L1 6.44885e-05, Linf 0.00173487, total time[s] 0.062817 +Converged at iteration 25, L1 8.42697e-05, Linf 0.00293054, total time[s] 0.068696 +Converged at iteration 29, L1 6.67477e-05, Linf 0.00408318, total time[s] 0.09083 +Converged at iteration 30, L1 5.7091e-05, Linf 0.00428516, total time[s] 0.082932 +Converged at iteration 28, L1 6.31558e-05, Linf 0.00419511, total time[s] 0.074058 +Converged at iteration 30, L1 6.4973e-05, Linf 0.00401879, total time[s] 0.081594 +Converged at iteration 29, L1 9.78383e-05, Linf 0.00290273, total time[s] 0.077512 +Converged at iteration 28, L1 9.21426e-05, Linf 0.00216133, total time[s] 0.075277 +Converged at iteration 31, L1 8.5711e-05, Linf 0.00741948, total time[s] 0.081497 +Converged at iteration 28, L1 8.6852e-05, Linf 0.00766677, total time[s] 0.074812 +Converged at iteration 26, L1 6.20759e-05, Linf 0.00449362, total time[s] 0.072441 +Converged at iteration 24, L1 5.92972e-05, Linf 0.00213295, total time[s] 0.067643 +Converged at iteration 38, L1 6.86662e-05, Linf 0.00662844, total time[s] 0.098958 +Converged at iteration 34, L1 8.19002e-05, Linf 0.00684792, total time[s] 0.095152 +Converged at iteration 24, L1 9.54915e-05, Linf 0.0034365, total time[s] 0.067114 +Converged at iteration 30, L1 5.81588e-05, Linf 0.00536486, total time[s] 0.080818 +Converged at iteration 27, L1 5.23322e-05, Linf 0.00804825, total time[s] 0.070806 +Converged at iteration 24, L1 6.27669e-05, Linf 0.00768656, total time[s] 0.064276 +Converged at iteration 19, L1 8.00564e-05, Linf 0.00556614, total time[s] 0.05723 +Converged at iteration 20, L1 5.44832e-05, Linf 0.00377031, total time[s] 0.059718 +Converged at iteration 23, L1 9.11978e-05, Linf 0.00460858, total time[s] 0.076946 +Converged at iteration 25, L1 7.53962e-05, Linf 0.00650277, total time[s] 0.072201 +Converged at iteration 21, L1 7.22179e-05, Linf 0.00599963, total time[s] 0.07783 +Converged at iteration 17, L1 5.6237e-05, Linf 0.00504954, total time[s] 0.064196 +Converged at iteration 31, L1 7.41677e-05, Linf 0.0035808, total time[s] 0.126949 +Converged at iteration 18, L1 7.50695e-05, Linf 0.00521029, total time[s] 0.05071 +Converged at iteration 22, L1 7.39631e-05, Linf 0.00433175, total time[s] 0.062895 +Converged at iteration 26, L1 9.85466e-05, Linf 0.00524713, total time[s] 0.07003 +Converged at iteration 23, L1 6.61113e-05, Linf 0.00649292, total time[s] 0.063438 +Converged at iteration 21, L1 9.32371e-05, Linf 0.00412331, total time[s] 0.071508 +Converged at iteration 22, L1 9.76199e-05, Linf 0.00269053, total time[s] 0.060906 +Converged at iteration 25, L1 8.03604e-05, Linf 0.00270629, total time[s] 0.070016 +Converged at iteration 29, L1 6.88073e-05, Linf 0.00441017, total time[s] 0.081609 +Converged at iteration 30, L1 6.04852e-05, Linf 0.0043501, total time[s] 0.09027 +Converged at iteration 28, L1 6.4775e-05, Linf 0.00419173, total time[s] 0.077896 +Converged at iteration 30, L1 6.65598e-05, Linf 0.00415073, total time[s] 0.080606 +Converged at iteration 29, L1 9.85298e-05, Linf 0.00293681, total time[s] 0.077393 +Converged at iteration 28, L1 9.78776e-05, Linf 0.00208262, total time[s] 0.076077 +Converged at iteration 31, L1 8.07416e-05, Linf 0.0072846, total time[s] 0.092701 +Converged at iteration 28, L1 9.51445e-05, Linf 0.00829187, total time[s] 0.086499 +Converged at iteration 26, L1 7.03771e-05, Linf 0.00515966, total time[s] 0.072367 +Converged at iteration 24, L1 6.28638e-05, Linf 0.00226016, total time[s] 0.066574 +Converged at iteration 38, L1 6.18192e-05, Linf 0.00645243, total time[s] 0.124713 +Converged at iteration 34, L1 7.73165e-05, Linf 0.00665279, total time[s] 0.114959 +Converged at iteration 24, L1 9.70883e-05, Linf 0.00349167, total time[s] 0.065054 +Converged at iteration 29, L1 9.99687e-05, Linf 0.00686576, total time[s] 0.07818 +Converged at iteration 27, L1 5.52668e-05, Linf 0.00848709, total time[s] 0.074001 +Converged at iteration 24, L1 7.20803e-05, Linf 0.0085264, total time[s] 0.109086 +Converged at iteration 19, L1 8.62848e-05, Linf 0.00497568, total time[s] 0.081375 +Converged at iteration 20, L1 5.17915e-05, Linf 0.0034579, total time[s] 0.13224 +Converged at iteration 23, L1 9.05358e-05, Linf 0.00465822, total time[s] 0.095044 +Converged at iteration 25, L1 7.79993e-05, Linf 0.00668769, total time[s] 0.106647 +Converged at iteration 21, L1 7.63379e-05, Linf 0.00603816, total time[s] 0.069448 +Converged at iteration 17, L1 5.65115e-05, Linf 0.00504796, total time[s] 0.047709 +Converged at iteration 31, L1 7.2544e-05, Linf 0.00368958, total time[s] 0.08291 +Converged at iteration 17, L1 9.98609e-05, Linf 0.00660237, total time[s] 0.046865 +Converged at iteration 21, L1 9.59704e-05, Linf 0.00451703, total time[s] 0.059735 +Converged at iteration 27, L1 5.35466e-05, Linf 0.00245744, total time[s] 0.074774 +Converged at iteration 23, L1 6.99521e-05, Linf 0.00660694, total time[s] 0.069366 +Converged at iteration 21, L1 9.99753e-05, Linf 0.00415142, total time[s] 0.064597 +Converged at iteration 22, L1 9.12344e-05, Linf 0.00326775, total time[s] 0.061044 +Converged at iteration 25, L1 7.76985e-05, Linf 0.00248066, total time[s] 0.067974 +Converged at iteration 29, L1 7.03388e-05, Linf 0.00470532, total time[s] 0.076869 +Converged at iteration 30, L1 6.42692e-05, Linf 0.00445609, total time[s] 0.080263 +Converged at iteration 28, L1 6.64638e-05, Linf 0.00364831, total time[s] 0.07197 +Converged at iteration 30, L1 6.92223e-05, Linf 0.00429564, total time[s] 0.076553 +Converged at iteration 29, L1 9.88681e-05, Linf 0.00294272, total time[s] 0.074709 +Converged at iteration 29, L1 6.16081e-05, Linf 0.00136372, total time[s] 0.077647 +Converged at iteration 31, L1 7.28711e-05, Linf 0.00710181, total time[s] 0.08544 +Converged at iteration 29, L1 5.17527e-05, Linf 0.00723576, total time[s] 0.078726 +Converged at iteration 26, L1 7.9269e-05, Linf 0.00584536, total time[s] 0.067288 +Converged at iteration 24, L1 6.65032e-05, Linf 0.00237924, total time[s] 0.062651 +Converged at iteration 38, L1 5.74195e-05, Linf 0.00621794, total time[s] 0.098177 +Converged at iteration 34, L1 7.40451e-05, Linf 0.00639521, total time[s] 0.094938 +Converged at iteration 24, L1 9.80049e-05, Linf 0.00352896, total time[s] 0.06468 +Converged at iteration 29, L1 9.82428e-05, Linf 0.00678031, total time[s] 0.078019 +Converged at iteration 27, L1 5.86415e-05, Linf 0.00892889, total time[s] 0.092899 +Converged at iteration 24, L1 8.17075e-05, Linf 0.00937362, total time[s] 0.071332 +Converged at iteration 19, L1 9.0588e-05, Linf 0.00480691, total time[s] 0.085346 +Converged at iteration 20, L1 4.91071e-05, Linf 0.00336338, total time[s] 0.068724 +Converged at iteration 23, L1 8.97754e-05, Linf 0.00471668, total time[s] 0.073382 +Converged at iteration 25, L1 8.29927e-05, Linf 0.00684988, total time[s] 0.09623 +Converged at iteration 21, L1 8.24369e-05, Linf 0.0061266, total time[s] 0.07755 +Converged at iteration 17, L1 5.69427e-05, Linf 0.00500209, total time[s] 0.052132 +Converged at iteration 31, L1 7.16621e-05, Linf 0.00381426, total time[s] 0.08631 +Converged at iteration 17, L1 7.53924e-05, Linf 0.00594217, total time[s] 0.046312 +Converged at iteration 21, L1 7.89055e-05, Linf 0.00375825, total time[s] 0.056831 +Converged at iteration 27, L1 5.50011e-05, Linf 0.0024317, total time[s] 0.075493 +Converged at iteration 23, L1 7.42004e-05, Linf 0.00672751, total time[s] 0.059904 +Converged at iteration 22, L1 5.84568e-05, Linf 0.003275, total time[s] 0.059611 +Converged at iteration 22, L1 8.25011e-05, Linf 0.0028477, total time[s] 0.059164 +Converged at iteration 25, L1 7.45542e-05, Linf 0.00230027, total time[s] 0.066944 +Converged at iteration 29, L1 7.10215e-05, Linf 0.00537381, total time[s] 0.077505 +Converged at iteration 30, L1 6.85034e-05, Linf 0.00461209, total time[s] 0.087764 +Converged at iteration 28, L1 6.76342e-05, Linf 0.00363747, total time[s] 0.07283 +Converged at iteration 30, L1 7.16369e-05, Linf 0.00444698, total time[s] 0.079249 +Converged at iteration 29, L1 9.85203e-05, Linf 0.0029367, total time[s] 0.08251 +Converged at iteration 29, L1 6.42614e-05, Linf 0.00132422, total time[s] 0.075108 +Converged at iteration 31, L1 6.48072e-05, Linf 0.00693638, total time[s] 0.079988 +Converged at iteration 29, L1 5.6364e-05, Linf 0.00788176, total time[s] 0.075533 +Converged at iteration 26, L1 8.91793e-05, Linf 0.00658363, total time[s] 0.06869 +Converged at iteration 24, L1 7.06953e-05, Linf 0.00247498, total time[s] 0.063832 +Converged at iteration 38, L1 5.39424e-05, Linf 0.0059504, total time[s] 0.097036 +Converged at iteration 34, L1 7.02225e-05, Linf 0.00612885, total time[s] 0.09924 +Converged at iteration 24, L1 9.92447e-05, Linf 0.00357157, total time[s] 0.07358 +Converged at iteration 29, L1 9.55421e-05, Linf 0.00665064, total time[s] 0.07999 +Converged at iteration 27, L1 6.02104e-05, Linf 0.00948458, total time[s] 0.075342 +Converged at iteration 24, L1 9.1892e-05, Linf 0.0101199, total time[s] 0.074322 +Converged at iteration 19, L1 9.72486e-05, Linf 0.00495159, total time[s] 0.088217 +Converged at iteration 20, L1 4.7129e-05, Linf 0.00336503, total time[s] 0.064922 +Converged at iteration 23, L1 9.05206e-05, Linf 0.00475893, total time[s] 0.067953 +Converged at iteration 25, L1 8.40024e-05, Linf 0.00702876, total time[s] 0.074885 +Converged at iteration 21, L1 8.44062e-05, Linf 0.00594468, total time[s] 0.070675 +Converged at iteration 17, L1 5.67113e-05, Linf 0.00490903, total time[s] 0.074335 +Converged at iteration 31, L1 7.01551e-05, Linf 0.00394387, total time[s] 0.093959 +Converged at iteration 17, L1 5.58358e-05, Linf 0.00523999, total time[s] 0.050523 +Converged at iteration 20, L1 9.40652e-05, Linf 0.00379661, total time[s] 0.059434 +Converged at iteration 27, L1 5.88014e-05, Linf 0.00248584, total time[s] 0.072139 +Converged at iteration 23, L1 7.75947e-05, Linf 0.00686232, total time[s] 0.068009 +Converged at iteration 22, L1 6.17113e-05, Linf 0.00351157, total time[s] 0.064688 +Converged at iteration 22, L1 7.7699e-05, Linf 0.00296772, total time[s] 0.062254 +Converged at iteration 25, L1 7.13745e-05, Linf 0.00196271, total time[s] 0.068256 +Converged at iteration 29, L1 7.08863e-05, Linf 0.00502015, total time[s] 0.077745 +Converged at iteration 30, L1 7.25933e-05, Linf 0.00482288, total time[s] 0.093799 +Converged at iteration 28, L1 6.84436e-05, Linf 0.0036344, total time[s] 0.092263 +Converged at iteration 30, L1 7.45912e-05, Linf 0.00460536, total time[s] 0.077206 +Converged at iteration 29, L1 9.88003e-05, Linf 0.00296581, total time[s] 0.07912 +Converged at iteration 29, L1 6.75192e-05, Linf 0.00127912, total time[s] 0.091512 +Converged at iteration 31, L1 5.73129e-05, Linf 0.00670714, total time[s] 0.079466 +Converged at iteration 29, L1 5.96603e-05, Linf 0.00833501, total time[s] 0.074538 +Converged at iteration 27, L1 5.31174e-05, Linf 0.00573713, total time[s] 0.071163 +Converged at iteration 24, L1 7.46218e-05, Linf 0.00260621, total time[s] 0.062991 +Converged at iteration 37, L1 9.59649e-05, Linf 0.00705314, total time[s] 0.109885 +Converged at iteration 34, L1 6.62354e-05, Linf 0.00581588, total time[s] 0.099597 +Converged at iteration 24, L1 9.99965e-05, Linf 0.00363763, total time[s] 0.0646 +Converged at iteration 29, L1 8.85167e-05, Linf 0.00657568, total time[s] 0.077526 +Converged at iteration 27, L1 6.2942e-05, Linf 0.00984981, total time[s] 0.070855 +Converged at iteration 25, L1 4.47352e-05, Linf 0.00891583, total time[s] 0.068088 +Converged at iteration 20, L1 4.19212e-05, Linf 0.00377614, total time[s] 0.058743 +Converged at iteration 20, L1 4.51472e-05, Linf 0.00336532, total time[s] 0.067463 +Converged at iteration 23, L1 9.17276e-05, Linf 0.00479462, total time[s] 0.090002 +Converged at iteration 25, L1 8.67431e-05, Linf 0.00719346, total time[s] 0.088945 +Converged at iteration 21, L1 8.5654e-05, Linf 0.00599744, total time[s] 0.070928 +Converged at iteration 17, L1 5.74652e-05, Linf 0.00476545, total time[s] 0.056603 +Converged at iteration 31, L1 6.80283e-05, Linf 0.00413133, total time[s] 0.100117 +Converged at iteration 16, L1 9.37703e-05, Linf 0.00744286, total time[s] 0.045615 +Converged at iteration 20, L1 6.64838e-05, Linf 0.00282943, total time[s] 0.056648 +Converged at iteration 27, L1 5.99177e-05, Linf 0.00262957, total time[s] 0.075341 +Converged at iteration 23, L1 8.12984e-05, Linf 0.00699079, total time[s] 0.062353 +Converged at iteration 22, L1 6.61034e-05, Linf 0.00324686, total time[s] 0.060739 +Converged at iteration 22, L1 8.22395e-05, Linf 0.00310242, total time[s] 0.060804 +Converged at iteration 25, L1 6.81407e-05, Linf 0.00189778, total time[s] 0.066859 +Converged at iteration 29, L1 7.14754e-05, Linf 0.00505656, total time[s] 0.07704 +Converged at iteration 30, L1 7.62e-05, Linf 0.00504162, total time[s] 0.07898 +Converged at iteration 28, L1 6.88424e-05, Linf 0.00373631, total time[s] 0.075225 +Converged at iteration 30, L1 7.74867e-05, Linf 0.00477926, total time[s] 0.083148 +Converged at iteration 30, L1 6.31823e-05, Linf 0.00227785, total time[s] 0.080282 +Converged at iteration 29, L1 7.15452e-05, Linf 0.00127223, total time[s] 0.077955 +Converged at iteration 30, L1 9.51564e-05, Linf 0.00849788, total time[s] 0.08477 +Converged at iteration 29, L1 6.46537e-05, Linf 0.00895426, total time[s] 0.079012 +Converged at iteration 27, L1 6.03053e-05, Linf 0.00642206, total time[s] 0.072596 +Converged at iteration 24, L1 7.91332e-05, Linf 0.00272328, total time[s] 0.065061 +Converged at iteration 37, L1 9.02789e-05, Linf 0.00674913, total time[s] 0.098739 +Converged at iteration 34, L1 6.14396e-05, Linf 0.00556258, total time[s] 0.097705 +Converged at iteration 25, L1 4.35132e-05, Linf 0.00209156, total time[s] 0.069213 +Converged at iteration 29, L1 8.21031e-05, Linf 0.00647134, total time[s] 0.078008 +Converged at iteration 27, L1 6.48461e-05, Linf 0.0103459, total time[s] 0.072859 +Converged at iteration 25, L1 4.91378e-05, Linf 0.00976522, total time[s] 0.070588 +Converged at iteration 20, L1 4.55462e-05, Linf 0.00405294, total time[s] 0.06129 +Converged at iteration 20, L1 4.35068e-05, Linf 0.00338319, total time[s] 0.064312 +Converged at iteration 23, L1 9.24417e-05, Linf 0.00486241, total time[s] 0.08503 +Converged at iteration 25, L1 9.12731e-05, Linf 0.00735185, total time[s] 0.148566 +Converged at iteration 21, L1 8.62858e-05, Linf 0.00598798, total time[s] 0.121919 +Converged at iteration 17, L1 5.86869e-05, Linf 0.00457406, total time[s] 0.057793 +Converged at iteration 31, L1 6.61865e-05, Linf 0.00433133, total time[s] 0.104879 +Converged at iteration 16, L1 9.88126e-05, Linf 0.0066521, total time[s] 0.050472 +Converged at iteration 18, L1 9.96366e-05, Linf 0.00393319, total time[s] 0.095656 +Converged at iteration 27, L1 6.36486e-05, Linf 0.00281761, total time[s] 0.083528 +Converged at iteration 23, L1 8.57688e-05, Linf 0.00720643, total time[s] 0.070551 +Converged at iteration 22, L1 7.09399e-05, Linf 0.00358598, total time[s] 0.064798 +Converged at iteration 22, L1 8.92112e-05, Linf 0.00336634, total time[s] 0.063771 +Converged at iteration 24, L1 9.80309e-05, Linf 0.00196503, total time[s] 0.089772 +Converged at iteration 29, L1 7.21076e-05, Linf 0.0050691, total time[s] 0.092167 +Converged at iteration 30, L1 7.97669e-05, Linf 0.00529289, total time[s] 0.07879 +Converged at iteration 28, L1 6.89603e-05, Linf 0.00372062, total time[s] 0.073684 +Converged at iteration 30, L1 8.12678e-05, Linf 0.00496227, total time[s] 0.079515 +Converged at iteration 30, L1 6.49195e-05, Linf 0.00232063, total time[s] 0.077567 +Converged at iteration 29, L1 7.73907e-05, Linf 0.00133593, total time[s] 0.076926 +Converged at iteration 30, L1 8.67654e-05, Linf 0.00835564, total time[s] 0.079644 +Converged at iteration 29, L1 7.14057e-05, Linf 0.00962424, total time[s] 0.078524 +Converged at iteration 27, L1 6.90111e-05, Linf 0.00715278, total time[s] 0.072478 +Converged at iteration 24, L1 8.31613e-05, Linf 0.0028426, total time[s] 0.065351 +Converged at iteration 37, L1 8.43984e-05, Linf 0.00646148, total time[s] 0.103128 +Converged at iteration 34, L1 5.635e-05, Linf 0.0053512, total time[s] 0.097374 +Converged at iteration 25, L1 4.53729e-05, Linf 0.0020797, total time[s] 0.070245 +Converged at iteration 29, L1 7.42377e-05, Linf 0.0063522, total time[s] 0.077219 +Converged at iteration 27, L1 6.72346e-05, Linf 0.010861, total time[s] 0.072264 +Converged at iteration 25, L1 5.48395e-05, Linf 0.0106604, total time[s] 0.069906 +Converged at iteration 20, L1 4.91882e-05, Linf 0.00424555, total time[s] 0.058164 +Converged at iteration 20, L1 4.15953e-05, Linf 0.00337576, total time[s] 0.072155 +Converged at iteration 23, L1 9.45885e-05, Linf 0.00488747, total time[s] 0.077331 +Converged at iteration 25, L1 8.92772e-05, Linf 0.007508, total time[s] 0.077277 +Converged at iteration 21, L1 8.58333e-05, Linf 0.00613158, total time[s] 0.067726 +Converged at iteration 17, L1 6.07322e-05, Linf 0.00434311, total time[s] 0.062705 +Converged at iteration 31, L1 6.36051e-05, Linf 0.0045515, total time[s] 0.095306 +Converged at iteration 17, L1 7.81882e-05, Linf 0.0030011, total time[s] 0.049431 +Converged at iteration 18, L1 8.10908e-05, Linf 0.00253347, total time[s] 0.05029 +Converged at iteration 27, L1 6.621e-05, Linf 0.00297541, total time[s] 0.0714 +Converged at iteration 23, L1 9.17465e-05, Linf 0.00743993, total time[s] 0.062155 +Converged at iteration 22, L1 7.52641e-05, Linf 0.00387023, total time[s] 0.059681 +Converged at iteration 22, L1 9.84049e-05, Linf 0.00357853, total time[s] 0.06098 +Converged at iteration 24, L1 9.15023e-05, Linf 0.00161207, total time[s] 0.066972 +Converged at iteration 29, L1 7.27907e-05, Linf 0.00525109, total time[s] 0.078403 +Converged at iteration 30, L1 8.45311e-05, Linf 0.00560769, total time[s] 0.078646 +Converged at iteration 28, L1 6.90145e-05, Linf 0.00325091, total time[s] 0.073537 +Converged at iteration 30, L1 8.4524e-05, Linf 0.00515602, total time[s] 0.082329 +Converged at iteration 30, L1 6.69902e-05, Linf 0.00235979, total time[s] 0.07661 +Converged at iteration 29, L1 8.41279e-05, Linf 0.00154463, total time[s] 0.074867 +Converged at iteration 30, L1 7.99663e-05, Linf 0.00821485, total time[s] 0.076803 +Converged at iteration 29, L1 7.83367e-05, Linf 0.0103363, total time[s] 0.075293 +Converged at iteration 27, L1 7.92061e-05, Linf 0.00782326, total time[s] 0.069554 +Converged at iteration 24, L1 8.77689e-05, Linf 0.0029605, total time[s] 0.066063 +Converged at iteration 37, L1 7.85992e-05, Linf 0.00629849, total time[s] 0.102033 +Converged at iteration 34, L1 5.15806e-05, Linf 0.00511783, total time[s] 0.100839 +Converged at iteration 25, L1 4.69193e-05, Linf 0.00205853, total time[s] 0.06626 +Converged at iteration 29, L1 6.83677e-05, Linf 0.00619138, total time[s] 0.074381 +Converged at iteration 27, L1 7.06854e-05, Linf 0.0113808, total time[s] 0.071298 +Converged at iteration 25, L1 6.12669e-05, Linf 0.0114622, total time[s] 0.066832 +Converged at iteration 20, L1 5.25892e-05, Linf 0.00444016, total time[s] 0.055733 +Converged at iteration 19, L1 9.55839e-05, Linf 0.0051025, total time[s] 0.065052 +Converged at iteration 23, L1 9.58907e-05, Linf 0.00488197, total time[s] 0.08103 +Converged at iteration 25, L1 8.19638e-05, Linf 0.00766036, total time[s] 0.0734 +Converged at iteration 21, L1 8.5554e-05, Linf 0.00598002, total time[s] 0.072379 +Converged at iteration 17, L1 6.27364e-05, Linf 0.00408134, total time[s] 0.051293 +Converged at iteration 31, L1 6.09316e-05, Linf 0.00477025, total time[s] 0.091979 +Converged at iteration 18, L1 7.19069e-05, Linf 0.00155536, total time[s] 0.057005 +Converged at iteration 19, L1 7.07373e-05, Linf 0.0015676, total time[s] 0.057649 +Converged at iteration 27, L1 7.07529e-05, Linf 0.00311523, total time[s] 0.079897 +Converged at iteration 23, L1 9.75268e-05, Linf 0.00778004, total time[s] 0.067213 +Converged at iteration 22, L1 7.88762e-05, Linf 0.00429475, total time[s] 0.060418 +Converged at iteration 23, L1 6.51398e-05, Linf 0.00279824, total time[s] 0.063943 +Converged at iteration 24, L1 8.57652e-05, Linf 0.00162847, total time[s] 0.07505 +Converged at iteration 29, L1 7.28058e-05, Linf 0.00482242, total time[s] 0.108599 +Converged at iteration 30, L1 8.90759e-05, Linf 0.00578939, total time[s] 0.087464 +Converged at iteration 28, L1 6.92891e-05, Linf 0.00314929, total time[s] 0.082251 +Converged at iteration 30, L1 8.94878e-05, Linf 0.00543147, total time[s] 0.087872 +Converged at iteration 30, L1 7.09191e-05, Linf 0.00240109, total time[s] 0.086586 +Converged at iteration 29, L1 9.1427e-05, Linf 0.00173469, total time[s] 0.117952 +Converged at iteration 30, L1 7.47826e-05, Linf 0.00807349, total time[s] 0.111625 +Converged at iteration 29, L1 8.60054e-05, Linf 0.0110931, total time[s] 0.07768 +Converged at iteration 27, L1 9.02115e-05, Linf 0.00868826, total time[s] 0.069736 +Converged at iteration 24, L1 9.11972e-05, Linf 0.00308732, total time[s] 0.062642 +Converged at iteration 37, L1 7.26396e-05, Linf 0.00599294, total time[s] 0.09858 +Converged at iteration 33, L1 9.75891e-05, Linf 0.0062723, total time[s] 0.087856 +Converged at iteration 25, L1 4.73648e-05, Linf 0.00202924, total time[s] 0.064815 +Converged at iteration 29, L1 6.03973e-05, Linf 0.00598711, total time[s] 0.074091 +Converged at iteration 27, L1 7.40225e-05, Linf 0.0118755, total time[s] 0.070078 +Converged at iteration 25, L1 6.78902e-05, Linf 0.0124486, total time[s] 0.065525 +Converged at iteration 20, L1 5.59937e-05, Linf 0.00464697, total time[s] 0.053781 +Converged at iteration 19, L1 8.78604e-05, Linf 0.00512265, total time[s] 0.050511 +Converged at iteration 23, L1 9.99486e-05, Linf 0.00490026, total time[s] 0.06043 +Converged at iteration 25, L1 7.07985e-05, Linf 0.00778487, total time[s] 0.066763 +Converged at iteration 21, L1 8.48592e-05, Linf 0.00592165, total time[s] 0.061205 +Converged at iteration 17, L1 6.64399e-05, Linf 0.00375712, total time[s] 0.046218 +Converged at iteration 31, L1 5.84768e-05, Linf 0.00504367, total time[s] 0.085827 +Converged at iteration 18, L1 9.1667e-05, Linf 0.00212375, total time[s] 0.049526 +Converged at iteration 20, L1 6.66286e-05, Linf 0.00208218, total time[s] 0.054879 +Converged at iteration 27, L1 7.45127e-05, Linf 0.00329913, total time[s] 0.084966 +Converged at iteration 24, L1 4.79279e-05, Linf 0.00379995, total time[s] 0.064822 +Converged at iteration 22, L1 8.39229e-05, Linf 0.00462678, total time[s] 0.059876 +Converged at iteration 23, L1 7.26756e-05, Linf 0.00286634, total time[s] 0.063657 +Converged at iteration 24, L1 7.83873e-05, Linf 0.00163611, total time[s] 0.064871 +Converged at iteration 29, L1 7.27194e-05, Linf 0.00511982, total time[s] 0.078667 +Converged at iteration 30, L1 9.43803e-05, Linf 0.00609466, total time[s] 0.079295 +Converged at iteration 28, L1 6.89518e-05, Linf 0.00291061, total time[s] 0.073682 +Converged at iteration 30, L1 9.21473e-05, Linf 0.00558924, total time[s] 0.078674 +Converged at iteration 30, L1 7.17648e-05, Linf 0.00245144, total time[s] 0.081161 +Converged at iteration 30, L1 5.28782e-05, Linf 0.00113137, total time[s] 0.078531 +Converged at iteration 30, L1 6.97147e-05, Linf 0.00791712, total time[s] 0.079292 +Converged at iteration 29, L1 9.36512e-05, Linf 0.0119064, total time[s] 0.076283 +Converged at iteration 28, L1 4.76821e-05, Linf 0.00745432, total time[s] 0.073433 +Converged at iteration 24, L1 9.65442e-05, Linf 0.00323438, total time[s] 0.065443 +Converged at iteration 37, L1 6.6669e-05, Linf 0.0058106, total time[s] 0.097868 +Converged at iteration 33, L1 9.15178e-05, Linf 0.00601147, total time[s] 0.086786 +Converged at iteration 25, L1 4.98748e-05, Linf 0.00200566, total time[s] 0.066296 +Converged at iteration 29, L1 5.64449e-05, Linf 0.00580391, total time[s] 0.077202 +Converged at iteration 27, L1 7.79051e-05, Linf 0.0123063, total time[s] 0.07103 +Converged at iteration 25, L1 7.45436e-05, Linf 0.0132704, total time[s] 0.066283 +Converged at iteration 20, L1 5.97529e-05, Linf 0.00504046, total time[s] 0.054682 +Converged at iteration 19, L1 7.98457e-05, Linf 0.00513642, total time[s] 0.051889 +Converged at iteration 24, L1 5.37252e-05, Linf 0.00302661, total time[s] 0.063944 +Converged at iteration 25, L1 5.89724e-05, Linf 0.0078514, total time[s] 0.067272 +Converged at iteration 21, L1 8.35535e-05, Linf 0.00589299, total time[s] 0.057188 +Converged at iteration 17, L1 7.08403e-05, Linf 0.00338354, total time[s] 0.051231 +Converged at iteration 31, L1 5.69904e-05, Linf 0.00531615, total time[s] 0.081533 +Converged at iteration 19, L1 7.19134e-05, Linf 0.00273851, total time[s] 0.053265 +Converged at iteration 20, L1 9.2408e-05, Linf 0.00296747, total time[s] 0.054224 +Converged at iteration 27, L1 7.70393e-05, Linf 0.00349615, total time[s] 0.071981 +Converged at iteration 24, L1 5.30429e-05, Linf 0.00402398, total time[s] 0.063726 +Converged at iteration 22, L1 8.86812e-05, Linf 0.00492129, total time[s] 0.060131 +Converged at iteration 23, L1 8.16905e-05, Linf 0.00300487, total time[s] 0.063371 +Converged at iteration 24, L1 7.10041e-05, Linf 0.00168536, total time[s] 0.069665 +Converged at iteration 29, L1 7.22218e-05, Linf 0.00516833, total time[s] 0.075847 +Converged at iteration 31, L1 5.26227e-05, Linf 0.00346755, total time[s] 0.096279 +Converged at iteration 28, L1 6.81766e-05, Linf 0.0030131, total time[s] 0.079698 +Converged at iteration 30, L1 9.58534e-05, Linf 0.00591864, total time[s] 0.090878 +Converged at iteration 30, L1 7.46025e-05, Linf 0.0025217, total time[s] 0.078486 +Converged at iteration 30, L1 5.68175e-05, Linf 0.00121777, total time[s] 0.078092 +Converged at iteration 30, L1 6.56688e-05, Linf 0.0077387, total time[s] 0.078294 +Converged at iteration 30, L1 3.96888e-05, Linf 0.00944091, total time[s] 0.078226 +Converged at iteration 28, L1 5.51e-05, Linf 0.00818311, total time[s] 0.073604 +Converged at iteration 25, L1 5.33378e-05, Linf 0.0020429, total time[s] 0.067406 +Converged at iteration 37, L1 6.08227e-05, Linf 0.00564841, total time[s] 0.100374 +Converged at iteration 33, L1 8.65939e-05, Linf 0.00572919, total time[s] 0.091591 +Converged at iteration 25, L1 5.02091e-05, Linf 0.00205503, total time[s] 0.070299 +Converged at iteration 28, L1 9.80779e-05, Linf 0.00770317, total time[s] 0.078976 +Converged at iteration 27, L1 8.08663e-05, Linf 0.0126663, total time[s] 0.080684 +Converged at iteration 25, L1 8.0986e-05, Linf 0.0139516, total time[s] 0.093261 +Converged at iteration 20, L1 6.40554e-05, Linf 0.00542579, total time[s] 0.062656 +Converged at iteration 19, L1 7.45085e-05, Linf 0.00515798, total time[s] 0.050988 +Converged at iteration 24, L1 5.36688e-05, Linf 0.00299871, total time[s] 0.073364 +Converged at iteration 25, L1 4.93645e-05, Linf 0.00784244, total time[s] 0.066595 +Converged at iteration 21, L1 8.10943e-05, Linf 0.0058761, total time[s] 0.05598 +Converged at iteration 17, L1 7.68312e-05, Linf 0.00296543, total time[s] 0.046939 +Converged at iteration 31, L1 5.65743e-05, Linf 0.00562401, total time[s] 0.082472 +Converged at iteration 19, L1 8.4196e-05, Linf 0.0033489, total time[s] 0.051822 +Converged at iteration 21, L1 7.70316e-05, Linf 0.00353691, total time[s] 0.058121 +Converged at iteration 27, L1 7.73039e-05, Linf 0.00361855, total time[s] 0.083672 +Converged at iteration 24, L1 5.74457e-05, Linf 0.00421879, total time[s] 0.067254 +Converged at iteration 22, L1 9.32287e-05, Linf 0.00510366, total time[s] 0.065527 +Converged at iteration 23, L1 9.18699e-05, Linf 0.00354732, total time[s] 0.065591 +Converged at iteration 23, L1 9.05478e-05, Linf 0.00243259, total time[s] 0.063976 +Converged at iteration 29, L1 7.14839e-05, Linf 0.00522569, total time[s] 0.081779 +Converged at iteration 31, L1 5.60579e-05, Linf 0.00377739, total time[s] 0.087412 +Converged at iteration 28, L1 6.66804e-05, Linf 0.00279452, total time[s] 0.094016 +Converged at iteration 30, L1 9.99231e-05, Linf 0.00611369, total time[s] 0.080501 +Converged at iteration 30, L1 7.79154e-05, Linf 0.00264083, total time[s] 0.080071 +Converged at iteration 30, L1 6.04497e-05, Linf 0.00131298, total time[s] 0.079942 +Converged at iteration 30, L1 6.2214e-05, Linf 0.00753119, total time[s] 0.077641 +Converged at iteration 30, L1 4.36884e-05, Linf 0.0100745, total time[s] 0.087878 +Converged at iteration 28, L1 6.16278e-05, Linf 0.00892669, total time[s] 0.095812 +Converged at iteration 25, L1 5.47829e-05, Linf 0.00207759, total time[s] 0.06928 +Converged at iteration 37, L1 5.53933e-05, Linf 0.00550274, total time[s] 0.09622 +Converged at iteration 33, L1 8.29163e-05, Linf 0.00543226, total time[s] 0.087864 +Converged at iteration 25, L1 5.17646e-05, Linf 0.00212555, total time[s] 0.066566 +Converged at iteration 28, L1 9.26059e-05, Linf 0.00763939, total time[s] 0.073661 +Converged at iteration 27, L1 8.25855e-05, Linf 0.0129754, total time[s] 0.076382 +Converged at iteration 25, L1 8.75093e-05, Linf 0.0148977, total time[s] 0.070132 +Converged at iteration 20, L1 6.87114e-05, Linf 0.00582433, total time[s] 0.055914 +Converged at iteration 19, L1 7.08535e-05, Linf 0.00516787, total time[s] 0.053447 +Converged at iteration 24, L1 5.45173e-05, Linf 0.00296013, total time[s] 0.065009 +Converged at iteration 24, L1 9.34638e-05, Linf 0.0105404, total time[s] 0.067073 +Converged at iteration 21, L1 7.78579e-05, Linf 0.00588069, total time[s] 0.056669 +Converged at iteration 17, L1 8.40965e-05, Linf 0.00250075, total time[s] 0.048512 +Converged at iteration 31, L1 5.7359e-05, Linf 0.00591076, total time[s] 0.082099 +Converged at iteration 20, L1 6.05269e-05, Linf 0.00361635, total time[s] 0.055004 +Converged at iteration 21, L1 9.27824e-05, Linf 0.00454808, total time[s] 0.056757 +Converged at iteration 27, L1 7.86051e-05, Linf 0.00368761, total time[s] 0.071741 +Converged at iteration 24, L1 6.10794e-05, Linf 0.00439036, total time[s] 0.065187 +Converged at iteration 22, L1 9.86698e-05, Linf 0.00530287, total time[s] 0.060289 +Converged at iteration 24, L1 5.85813e-05, Linf 0.00294988, total time[s] 0.065505 +Converged at iteration 23, L1 8.15434e-05, Linf 0.00242975, total time[s] 0.068184 +Converged at iteration 29, L1 7.00323e-05, Linf 0.00523921, total time[s] 0.07733 +Converged at iteration 31, L1 5.93282e-05, Linf 0.00392718, total time[s] 0.082137 +Converged at iteration 28, L1 6.48934e-05, Linf 0.00274713, total time[s] 0.074604 +Converged at iteration 31, L1 5.52579e-05, Linf 0.00492737, total time[s] 0.081949 +Converged at iteration 30, L1 8.12324e-05, Linf 0.00276203, total time[s] 0.079114 +Converged at iteration 30, L1 6.43778e-05, Linf 0.00142184, total time[s] 0.079326 +Converged at iteration 30, L1 5.91369e-05, Linf 0.00723119, total time[s] 0.080582 +Converged at iteration 30, L1 4.78025e-05, Linf 0.0107882, total time[s] 0.079344 +Converged at iteration 28, L1 6.97365e-05, Linf 0.00984103, total time[s] 0.078914 +Converged at iteration 25, L1 5.62319e-05, Linf 0.00213254, total time[s] 0.067567 +Converged at iteration 36, L1 9.55507e-05, Linf 0.00680017, total time[s] 0.094912 +Converged at iteration 33, L1 8.08357e-05, Linf 0.0051223, total time[s] 0.08812 +Converged at iteration 25, L1 5.35608e-05, Linf 0.00221133, total time[s] 0.067196 +Converged at iteration 28, L1 8.39098e-05, Linf 0.00759057, total time[s] 0.075443 +Converged at iteration 27, L1 8.23312e-05, Linf 0.0125084, total time[s] 0.071545 +Converged at iteration 25, L1 9.58706e-05, Linf 0.0158179, total time[s] 0.06654 +Converged at iteration 20, L1 7.37834e-05, Linf 0.0067125, total time[s] 0.056238 +Converged at iteration 19, L1 6.92031e-05, Linf 0.00518824, total time[s] 0.052984 +Converged at iteration 24, L1 5.51616e-05, Linf 0.00292009, total time[s] 0.064817 +Converged at iteration 24, L1 7.92869e-05, Linf 0.0104351, total time[s] 0.064276 +Converged at iteration 21, L1 7.30387e-05, Linf 0.00589337, total time[s] 0.057927 +Converged at iteration 17, L1 9.38284e-05, Linf 0.00215993, total time[s] 0.04814 +Converged at iteration 31, L1 5.96329e-05, Linf 0.00623832, total time[s] 0.081578 +Converged at iteration 20, L1 7.18509e-05, Linf 0.00453376, total time[s] 0.05627 +Converged at iteration 22, L1 6.34745e-05, Linf 0.00429574, total time[s] 0.060141 +Converged at iteration 27, L1 8.15434e-05, Linf 0.00382103, total time[s] 0.087003 +Converged at iteration 24, L1 6.45332e-05, Linf 0.00453674, total time[s] 0.081299 +Converged at iteration 23, L1 5.63521e-05, Linf 0.00347781, total time[s] 0.061658 +Converged at iteration 24, L1 6.53772e-05, Linf 0.00341284, total time[s] 0.064625 +Converged at iteration 23, L1 7.56589e-05, Linf 0.00285503, total time[s] 0.06198 +Converged at iteration 29, L1 6.73918e-05, Linf 0.00526346, total time[s] 0.076097 +Converged at iteration 31, L1 6.43974e-05, Linf 0.00418069, total time[s] 0.08708 +Converged at iteration 28, L1 6.33151e-05, Linf 0.00272526, total time[s] 0.078568 +Converged at iteration 31, L1 5.66142e-05, Linf 0.00516678, total time[s] 0.087208 +Converged at iteration 30, L1 8.44457e-05, Linf 0.00283893, total time[s] 0.078651 +Converged at iteration 30, L1 6.72412e-05, Linf 0.00164181, total time[s] 0.079403 +Converged at iteration 30, L1 5.74898e-05, Linf 0.0069879, total time[s] 0.079991 +Converged at iteration 30, L1 5.26238e-05, Linf 0.0115172, total time[s] 0.081227 +Converged at iteration 28, L1 7.89259e-05, Linf 0.0105194, total time[s] 0.076016 +Converged at iteration 25, L1 5.67662e-05, Linf 0.00220994, total time[s] 0.071841 +Converged at iteration 36, L1 8.88072e-05, Linf 0.0066685, total time[s] 0.095525 +Converged at iteration 33, L1 8.03046e-05, Linf 0.00488131, total time[s] 0.088302 +Converged at iteration 25, L1 5.2944e-05, Linf 0.0022996, total time[s] 0.067595 +Converged at iteration 28, L1 7.26877e-05, Linf 0.00757382, total time[s] 0.07533 +Converged at iteration 27, L1 8.07493e-05, Linf 0.0119348, total time[s] 0.081445 +Converged at iteration 26, L1 2.89921e-05, Linf 0.0100003, total time[s] 0.09443 +Converged at iteration 20, L1 7.90253e-05, Linf 0.00706287, total time[s] 0.078797 +Converged at iteration 19, L1 6.93572e-05, Linf 0.00515025, total time[s] 0.06203 +Converged at iteration 24, L1 5.70852e-05, Linf 0.00288433, total time[s] 0.072292 +Converged at iteration 24, L1 6.69083e-05, Linf 0.0103394, total time[s] 0.09077 +Converged at iteration 21, L1 6.50887e-05, Linf 0.00585978, total time[s] 0.067099 +Converged at iteration 18, L1 5.42078e-05, Linf 0.00165387, total time[s] 0.049424 +Converged at iteration 31, L1 6.21963e-05, Linf 0.00657218, total time[s] 0.082253 +Converged at iteration 20, L1 8.99369e-05, Linf 0.00493295, total time[s] 0.054628 +Converged at iteration 22, L1 6.9459e-05, Linf 0.0049952, total time[s] 0.063106 +Converged at iteration 27, L1 8.49531e-05, Linf 0.00398614, total time[s] 0.070752 +Converged at iteration 24, L1 6.69212e-05, Linf 0.00468962, total time[s] 0.06391 +Converged at iteration 23, L1 5.88679e-05, Linf 0.00357496, total time[s] 0.062342 +Converged at iteration 24, L1 7.31921e-05, Linf 0.00397073, total time[s] 0.071424 +Converged at iteration 23, L1 7.50649e-05, Linf 0.00372247, total time[s] 0.062884 +Converged at iteration 28, L1 9.97994e-05, Linf 0.00643982, total time[s] 0.076494 +Converged at iteration 31, L1 6.82936e-05, Linf 0.00435037, total time[s] 0.08103 +Converged at iteration 28, L1 6.15025e-05, Linf 0.00272608, total time[s] 0.07434 +Converged at iteration 31, L1 5.88839e-05, Linf 0.0054153, total time[s] 0.080611 +Converged at iteration 30, L1 8.76665e-05, Linf 0.00292151, total time[s] 0.077612 +Converged at iteration 30, L1 7.2704e-05, Linf 0.00185902, total time[s] 0.079936 +Converged at iteration 30, L1 5.65849e-05, Linf 0.00657548, total time[s] 0.078411 +Converged at iteration 30, L1 5.77156e-05, Linf 0.0125725, total time[s] 0.078592 +Converged at iteration 28, L1 8.89374e-05, Linf 0.01143, total time[s] 0.073303 +Converged at iteration 25, L1 5.68431e-05, Linf 0.00224666, total time[s] 0.067627 +Converged at iteration 36, L1 8.31839e-05, Linf 0.00647952, total time[s] 0.111166 +Converged at iteration 33, L1 8.10869e-05, Linf 0.0047335, total time[s] 0.091787 +Converged at iteration 25, L1 5.45406e-05, Linf 0.00237888, total time[s] 0.0663 +Converged at iteration 28, L1 5.4438e-05, Linf 0.00749503, total time[s] 0.077594 +Converged at iteration 27, L1 7.7611e-05, Linf 0.0119539, total time[s] 0.074394 +Converged at iteration 26, L1 3.15539e-05, Linf 0.0112023, total time[s] 0.071139 +Converged at iteration 20, L1 8.60357e-05, Linf 0.00737293, total time[s] 0.054689 +Converged at iteration 19, L1 7.14615e-05, Linf 0.00508332, total time[s] 0.051901 +Converged at iteration 24, L1 5.95145e-05, Linf 0.00284937, total time[s] 0.064316 +Converged at iteration 24, L1 5.48155e-05, Linf 0.00990177, total time[s] 0.064667 +Converged at iteration 21, L1 5.34705e-05, Linf 0.00561608, total time[s] 0.063865 +Converged at iteration 18, L1 6.37105e-05, Linf 0.00195788, total time[s] 0.061169 +Converged at iteration 31, L1 6.51853e-05, Linf 0.00693451, total time[s] 0.096671 +Converged at iteration 21, L1 6.29663e-05, Linf 0.00342136, total time[s] 0.06626 +Converged at iteration 22, L1 7.65431e-05, Linf 0.00568508, total time[s] 0.066437 +Converged at iteration 27, L1 8.65594e-05, Linf 0.0041458, total time[s] 0.075663 +Converged at iteration 24, L1 6.96908e-05, Linf 0.00486972, total time[s] 0.067696 +Converged at iteration 23, L1 6.16503e-05, Linf 0.00375915, total time[s] 0.064237 +Converged at iteration 24, L1 8.30583e-05, Linf 0.00565334, total time[s] 0.064523 +Converged at iteration 23, L1 7.80825e-05, Linf 0.00467401, total time[s] 0.065604 +Converged at iteration 28, L1 9.53667e-05, Linf 0.006207, total time[s] 0.070694 +Converged at iteration 31, L1 7.45401e-05, Linf 0.00503096, total time[s] 0.080131 +Converged at iteration 27, L1 9.96828e-05, Linf 0.00364134, total time[s] 0.071092 +Converged at iteration 31, L1 5.88195e-05, Linf 0.0057031, total time[s] 0.080752 +Converged at iteration 30, L1 9.30854e-05, Linf 0.00303338, total time[s] 0.082526 +Converged at iteration 30, L1 8.17985e-05, Linf 0.00221156, total time[s] 0.077718 +Converged at iteration 30, L1 5.54285e-05, Linf 0.00605719, total time[s] 0.076968 +Converged at iteration 30, L1 6.42282e-05, Linf 0.0137855, total time[s] 0.077355 +Converged at iteration 29, L1 4.08498e-05, Linf 0.00902413, total time[s] 0.077239 +Converged at iteration 25, L1 5.69899e-05, Linf 0.00233679, total time[s] 0.064349 +Converged at iteration 36, L1 7.9501e-05, Linf 0.00640961, total time[s] 0.093212 +Converged at iteration 33, L1 8.29107e-05, Linf 0.00473492, total time[s] 0.088381 +Converged at iteration 25, L1 5.39325e-05, Linf 0.00243856, total time[s] 0.076889 +Converged at iteration 27, L1 7.3864e-05, Linf 0.00956595, total time[s] 0.080949 +Converged at iteration 27, L1 7.77844e-05, Linf 0.011435, total time[s] 0.07198 +Converged at iteration 26, L1 3.39505e-05, Linf 0.0110234, total time[s] 0.076423 +Converged at iteration 20, L1 9.22899e-05, Linf 0.00793303, total time[s] 0.060399 +Converged at iteration 19, L1 7.63115e-05, Linf 0.00502816, total time[s] 0.054023 +Converged at iteration 24, L1 5.96627e-05, Linf 0.00281005, total time[s] 0.08693 +Converged at iteration 24, L1 4.51816e-05, Linf 0.00954054, total time[s] 0.070149 +Converged at iteration 21, L1 4.43445e-05, Linf 0.00510251, total time[s] 0.066113 +Converged at iteration 18, L1 7.38803e-05, Linf 0.00221337, total time[s] 0.069671 +Converged at iteration 31, L1 6.73434e-05, Linf 0.00730563, total time[s] 0.097693 +Converged at iteration 21, L1 6.55994e-05, Linf 0.00379909, total time[s] 0.062348 +Converged at iteration 22, L1 8.59689e-05, Linf 0.00604421, total time[s] 0.06855 +Converged at iteration 27, L1 8.37745e-05, Linf 0.00420454, total time[s] 0.079505 +Converged at iteration 24, L1 7.17989e-05, Linf 0.00507598, total time[s] 0.068564 +Converged at iteration 23, L1 6.42163e-05, Linf 0.00389539, total time[s] 0.063091 +Converged at iteration 24, L1 9.14635e-05, Linf 0.00713713, total time[s] 0.065645 +Converged at iteration 23, L1 8.58387e-05, Linf 0.00556235, total time[s] 0.066236 +Converged at iteration 28, L1 9.00617e-05, Linf 0.00589118, total time[s] 0.076897 +Converged at iteration 31, L1 7.94788e-05, Linf 0.00523783, total time[s] 0.082287 +Converged at iteration 27, L1 9.70583e-05, Linf 0.00354605, total time[s] 0.072418 +Converged at iteration 31, L1 5.99211e-05, Linf 0.00601472, total time[s] 0.086816 +Converged at iteration 30, L1 9.49349e-05, Linf 0.00326788, total time[s] 0.07917 +Converged at iteration 30, L1 9.11468e-05, Linf 0.00255165, total time[s] 0.080943 +Converged at iteration 29, L1 9.90967e-05, Linf 0.00911382, total time[s] 0.07796 +Converged at iteration 30, L1 7.2698e-05, Linf 0.0149643, total time[s] 0.079569 +Converged at iteration 29, L1 4.60613e-05, Linf 0.0097082, total time[s] 0.079005 +Converged at iteration 25, L1 5.52807e-05, Linf 0.0023647, total time[s] 0.070017 +Converged at iteration 36, L1 7.6855e-05, Linf 0.00627923, total time[s] 0.0979 +Converged at iteration 33, L1 8.62046e-05, Linf 0.00489092, total time[s] 0.1008 +Converged at iteration 25, L1 5.38449e-05, Linf 0.00252607, total time[s] 0.091948 +Converged at iteration 27, L1 4.86252e-05, Linf 0.00924037, total time[s] 0.076053 +Converged at iteration 27, L1 8.10608e-05, Linf 0.0114823, total time[s] 0.077304 +Converged at iteration 26, L1 3.46594e-05, Linf 0.012508, total time[s] 0.102466 +Converged at iteration 20, L1 9.89131e-05, Linf 0.00822039, total time[s] 0.091576 +Converged at iteration 19, L1 7.92885e-05, Linf 0.0049359, total time[s] 0.08886 +Converged at iteration 24, L1 5.98466e-05, Linf 0.00277486, total time[s] 0.128512 +Converged at iteration 23, L1 9.87958e-05, Linf 0.0141295, total time[s] 0.093198 +Converged at iteration 20, L1 9.70179e-05, Linf 0.00687456, total time[s] 0.087374 +Converged at iteration 18, L1 8.15545e-05, Linf 0.00252769, total time[s] 0.083554 +Converged at iteration 31, L1 7.00354e-05, Linf 0.0077529, total time[s] 0.126866 +Converged at iteration 21, L1 6.37031e-05, Linf 0.00416863, total time[s] 0.083655 +Converged at iteration 22, L1 9.24391e-05, Linf 0.00684134, total time[s] 0.072856 +Converged at iteration 27, L1 7.98642e-05, Linf 0.00412651, total time[s] 0.092672 +Converged at iteration 24, L1 7.44406e-05, Linf 0.00534744, total time[s] 0.073808 +Converged at iteration 23, L1 6.77002e-05, Linf 0.00398793, total time[s] 0.071011 +Converged at iteration 25, L1 5.53244e-05, Linf 0.00361425, total time[s] 0.080469 +Converged at iteration 23, L1 9.76835e-05, Linf 0.00656478, total time[s] 0.065122 +Converged at iteration 28, L1 8.09913e-05, Linf 0.00551242, total time[s] 0.078079 +Converged at iteration 31, L1 8.6012e-05, Linf 0.00570702, total time[s] 0.083612 +Converged at iteration 27, L1 9.40206e-05, Linf 0.00346797, total time[s] 0.072236 +Converged at iteration 31, L1 6.02981e-05, Linf 0.00623901, total time[s] 0.099329 +Converged at iteration 30, L1 9.70124e-05, Linf 0.00330473, total time[s] 0.079911 +Converged at iteration 31, L1 5.07158e-05, Linf 0.00179452, total time[s] 0.087883 +Converged at iteration 29, L1 9.62649e-05, Linf 0.00862548, total time[s] 0.098487 +Converged at iteration 30, L1 8.37321e-05, Linf 0.0161448, total time[s] 0.082858 +Converged at iteration 29, L1 5.38038e-05, Linf 0.0104687, total time[s] 0.079108 +Converged at iteration 25, L1 5.3999e-05, Linf 0.00236411, total time[s] 0.074257 +Converged at iteration 36, L1 7.66571e-05, Linf 0.00631583, total time[s] 0.093989 +Converged at iteration 33, L1 8.98656e-05, Linf 0.00506484, total time[s] 0.086527 +Converged at iteration 25, L1 5.40059e-05, Linf 0.00262371, total time[s] 0.073959 +Converged at iteration 26, L1 8.17663e-05, Linf 0.0114973, total time[s] 0.069138 +Converged at iteration 27, L1 8.03913e-05, Linf 0.0120404, total time[s] 0.071504 +Converged at iteration 26, L1 3.54714e-05, Linf 0.0129011, total time[s] 0.070116 +Converged at iteration 21, L1 3.51292e-05, Linf 0.00590071, total time[s] 0.06874 +Converged at iteration 19, L1 8.32978e-05, Linf 0.00482567, total time[s] 0.056611 +Converged at iteration 24, L1 6.02872e-05, Linf 0.00274092, total time[s] 0.077356 +Converged at iteration 23, L1 8.8592e-05, Linf 0.0140545, total time[s] 0.079521 +Converged at iteration 20, L1 9.09838e-05, Linf 0.00628608, total time[s] 0.062932 +Converged at iteration 18, L1 8.74518e-05, Linf 0.00275699, total time[s] 0.067028 +Converged at iteration 31, L1 7.20079e-05, Linf 0.00812096, total time[s] 0.094037 +Converged at iteration 21, L1 8.15471e-05, Linf 0.00442131, total time[s] 0.066389 +Converged at iteration 22, L1 9.67514e-05, Linf 0.00736917, total time[s] 0.064153 +Converged at iteration 27, L1 7.72456e-05, Linf 0.00403927, total time[s] 0.072498 +Converged at iteration 24, L1 7.55894e-05, Linf 0.00555062, total time[s] 0.06461 +Converged at iteration 23, L1 6.95676e-05, Linf 0.00398972, total time[s] 0.062349 +Converged at iteration 25, L1 5.88736e-05, Linf 0.0038394, total time[s] 0.069759 +Converged at iteration 24, L1 6.29873e-05, Linf 0.00534136, total time[s] 0.063122 +Converged at iteration 28, L1 7.29515e-05, Linf 0.00526734, total time[s] 0.076009 +Converged at iteration 31, L1 8.89473e-05, Linf 0.00581517, total time[s] 0.08167 +Converged at iteration 27, L1 9.15638e-05, Linf 0.00338232, total time[s] 0.072101 +Converged at iteration 31, L1 6.11426e-05, Linf 0.00651905, total time[s] 0.08036 +Converged at iteration 30, L1 9.83781e-05, Linf 0.00334424, total time[s] 0.081253 +Converged at iteration 31, L1 5.39267e-05, Linf 0.00198296, total time[s] 0.082639 +Converged at iteration 29, L1 9.50092e-05, Linf 0.00817212, total time[s] 0.087415 +Converged at iteration 30, L1 9.23811e-05, Linf 0.0170473, total time[s] 0.079285 +Converged at iteration 29, L1 5.68893e-05, Linf 0.0110948, total time[s] 0.079605 +Converged at iteration 25, L1 5.36176e-05, Linf 0.00234138, total time[s] 0.068491 +Converged at iteration 36, L1 7.82175e-05, Linf 0.00655924, total time[s] 0.093922 +Converged at iteration 33, L1 9.58533e-05, Linf 0.00535529, total time[s] 0.089097 +Converged at iteration 25, L1 5.85905e-05, Linf 0.00275781, total time[s] 0.071804 +Converged at iteration 26, L1 5.68728e-05, Linf 0.0110946, total time[s] 0.068161 +Converged at iteration 27, L1 8.38844e-05, Linf 0.0124604, total time[s] 0.074242 +Converged at iteration 26, L1 3.737e-05, Linf 0.0133357, total time[s] 0.073887 +Converged at iteration 21, L1 3.70692e-05, Linf 0.00619566, total time[s] 0.093292 +Converged at iteration 19, L1 8.75331e-05, Linf 0.00465359, total time[s] 0.063362 +Converged at iteration 24, L1 6.32659e-05, Linf 0.0027008, total time[s] 0.08354 +Converged at iteration 23, L1 8.15702e-05, Linf 0.0135759, total time[s] 0.083294 +Converged at iteration 20, L1 8.70369e-05, Linf 0.00539782, total time[s] 0.071961 +Converged at iteration 18, L1 9.71673e-05, Linf 0.00309252, total time[s] 0.073324 +Converged at iteration 31, L1 7.44571e-05, Linf 0.00861687, total time[s] 0.089716 +Converged at iteration 21, L1 9.61378e-05, Linf 0.00453858, total time[s] 0.058339 +Converged at iteration 23, L1 5.73549e-05, Linf 0.0053285, total time[s] 0.062804 +Converged at iteration 27, L1 7.46627e-05, Linf 0.00390036, total time[s] 0.072041 +Converged at iteration 24, L1 7.72231e-05, Linf 0.00567177, total time[s] 0.063886 +Converged at iteration 23, L1 7.18474e-05, Linf 0.00424125, total time[s] 0.061665 +Converged at iteration 25, L1 6.36131e-05, Linf 0.00413994, total time[s] 0.066723 +Converged at iteration 24, L1 7.57626e-05, Linf 0.006173, total time[s] 0.064503 +Converged at iteration 28, L1 6.24996e-05, Linf 0.00512495, total time[s] 0.074375 +Converged at iteration 31, L1 9.32664e-05, Linf 0.00528518, total time[s] 0.083335 +Converged at iteration 27, L1 8.66956e-05, Linf 0.00321196, total time[s] 0.072312 +Converged at iteration 31, L1 6.2321e-05, Linf 0.00687518, total time[s] 0.08838 +Converged at iteration 31, L1 6.18205e-05, Linf 0.00220251, total time[s] 0.086671 +Converged at iteration 31, L1 6.37766e-05, Linf 0.00230303, total time[s] 0.081966 +Converged at iteration 29, L1 9.47132e-05, Linf 0.00757111, total time[s] 0.079667 +Converged at iteration 31, L1 3.23657e-05, Linf 0.00893854, total time[s] 0.090767 +Converged at iteration 29, L1 6.36163e-05, Linf 0.0118817, total time[s] 0.07777 +Converged at iteration 25, L1 5.23327e-05, Linf 0.00228322, total time[s] 0.067362 +Converged at iteration 36, L1 8.01883e-05, Linf 0.00684027, total time[s] 0.099035 +Converged at iteration 34, L1 4.49411e-05, Linf 0.00430427, total time[s] 0.115962 +Converged at iteration 25, L1 5.98725e-05, Linf 0.00289499, total time[s] 0.082626 +Converged at iteration 26, L1 4.27934e-05, Linf 0.0106458, total time[s] 0.068746 +Converged at iteration 27, L1 8.25559e-05, Linf 0.0133416, total time[s] 0.07152 +Converged at iteration 26, L1 3.90125e-05, Linf 0.0139373, total time[s] 0.073103 +Converged at iteration 21, L1 3.72924e-05, Linf 0.0063945, total time[s] 0.069309 +Converged at iteration 19, L1 8.94453e-05, Linf 0.00455623, total time[s] 0.068154 +Converged at iteration 24, L1 6.22973e-05, Linf 0.00265209, total time[s] 0.09537 +Converged at iteration 23, L1 7.73546e-05, Linf 0.0131998, total time[s] 0.069932 +Converged at iteration 20, L1 8.58101e-05, Linf 0.00495253, total time[s] 0.118852 +Converged at iteration 19, L1 4.96609e-05, Linf 0.00174932, total time[s] 0.062596 +Converged at iteration 31, L1 7.63832e-05, Linf 0.00897342, total time[s] 0.086663 +Converged at iteration 21, L1 9.82983e-05, Linf 0.00452678, total time[s] 0.072114 +Converged at iteration 23, L1 5.92112e-05, Linf 0.00553971, total time[s] 0.065051 +Converged at iteration 27, L1 7.28707e-05, Linf 0.00383997, total time[s] 0.072449 +Converged at iteration 24, L1 7.66696e-05, Linf 0.00566644, total time[s] 0.065503 +Converged at iteration 23, L1 7.38056e-05, Linf 0.00428931, total time[s] 0.063775 +Converged at iteration 25, L1 6.53231e-05, Linf 0.00428595, total time[s] 0.071859 +Converged at iteration 24, L1 8.64353e-05, Linf 0.00676019, total time[s] 0.065614 +Converged at iteration 27, L1 9.58976e-05, Linf 0.00662658, total time[s] 0.072639 +Converged at iteration 31, L1 9.67081e-05, Linf 0.00544499, total time[s] 0.082271 +Converged at iteration 27, L1 8.24945e-05, Linf 0.00309178, total time[s] 0.072601 +Converged at iteration 31, L1 6.37626e-05, Linf 0.0071002, total time[s] 0.082249 +Converged at iteration 31, L1 6.20822e-05, Linf 0.00229312, total time[s] 0.081856 +Converged at iteration 31, L1 6.71713e-05, Linf 0.00248927, total time[s] 0.083867 +Converged at iteration 29, L1 9.35629e-05, Linf 0.00710501, total time[s] 0.07648 +Converged at iteration 31, L1 3.53098e-05, Linf 0.00932179, total time[s] 0.083847 +Converged at iteration 29, L1 6.90264e-05, Linf 0.0124607, total time[s] 0.074596 +Converged at iteration 25, L1 5.21406e-05, Linf 0.00228312, total time[s] 0.065503 +Converged at iteration 36, L1 8.48105e-05, Linf 0.00737713, total time[s] 0.103231 +Converged at iteration 34, L1 4.89366e-05, Linf 0.00428635, total time[s] 0.099451 +Converged at iteration 25, L1 6.27538e-05, Linf 0.00299263, total time[s] 0.079449 +Converged at iteration 25, L1 8.68189e-05, Linf 0.0134391, total time[s] 0.064538 +Converged at iteration 27, L1 8.8977e-05, Linf 0.0135506, total time[s] 0.069894 +Converged at iteration 26, L1 4.22085e-05, Linf 0.0145932, total time[s] 0.06775 +Converged at iteration 21, L1 3.82662e-05, Linf 0.00653485, total time[s] 0.068991 +Converged at iteration 19, L1 9.14877e-05, Linf 0.00435612, total time[s] 0.068145 +Converged at iteration 24, L1 6.30098e-05, Linf 0.00270045, total time[s] 0.074744 +Converged at iteration 23, L1 7.5405e-05, Linf 0.0121229, total time[s] 0.09186 +Converged at iteration 20, L1 8.59798e-05, Linf 0.00501361, total time[s] 0.07434 +Converged at iteration 19, L1 5.78654e-05, Linf 0.00245326, total time[s] 0.08291 +Converged at iteration 31, L1 7.92632e-05, Linf 0.00950309, total time[s] 0.095253 +Converged at iteration 21, L1 9.98746e-05, Linf 0.00460543, total time[s] 0.061442 +Converged at iteration 23, L1 6.20586e-05, Linf 0.00614048, total time[s] 0.067763 +Converged at iteration 27, L1 7.04172e-05, Linf 0.00372652, total time[s] 0.073104 +Converged at iteration 24, L1 7.72962e-05, Linf 0.00557449, total time[s] 0.065668 +Converged at iteration 23, L1 7.75214e-05, Linf 0.00437296, total time[s] 0.062009 +Converged at iteration 25, L1 6.68842e-05, Linf 0.00443835, total time[s] 0.066245 +Converged at iteration 25, L1 5.88489e-05, Linf 0.00536608, total time[s] 0.066153 +Converged at iteration 27, L1 9.38253e-05, Linf 0.00667729, total time[s] 0.072301 +Converged at iteration 32, L1 5.41603e-05, Linf 0.00319289, total time[s] 0.082 +Converged at iteration 27, L1 7.85502e-05, Linf 0.00294943, total time[s] 0.075975 +Converged at iteration 31, L1 6.66229e-05, Linf 0.00744585, total time[s] 0.087304 +Converged at iteration 31, L1 6.32376e-05, Linf 0.00226962, total time[s] 0.079871 +Converged at iteration 31, L1 7.72826e-05, Linf 0.00291141, total time[s] 0.080204 +Converged at iteration 29, L1 9.39304e-05, Linf 0.00653081, total time[s] 0.074765 +Converged at iteration 31, L1 4.01528e-05, Linf 0.00929666, total time[s] 0.079711 +Converged at iteration 29, L1 7.54685e-05, Linf 0.0132503, total time[s] 0.076476 +Converged at iteration 25, L1 5.25434e-05, Linf 0.00236205, total time[s] 0.065126 +Converged at iteration 36, L1 8.65767e-05, Linf 0.00757639, total time[s] 0.0999 +Converged at iteration 34, L1 5.1676e-05, Linf 0.0046576, total time[s] 0.097456 +Converged at iteration 25, L1 6.15147e-05, Linf 0.00306048, total time[s] 0.067 +Converged at iteration 25, L1 7.42415e-05, Linf 0.0131081, total time[s] 0.073213 +Converged at iteration 27, L1 8.19812e-05, Linf 0.0136415, total time[s] 0.071054 +Converged at iteration 26, L1 4.44481e-05, Linf 0.0150221, total time[s] 0.071113 +Converged at iteration 21, L1 3.7898e-05, Linf 0.00671985, total time[s] 0.071824 +Converged at iteration 19, L1 9.04873e-05, Linf 0.00428939, total time[s] 0.068398 +Converged at iteration 24, L1 6.2143e-05, Linf 0.00261693, total time[s] 0.06773 +Converged at iteration 23, L1 7.38319e-05, Linf 0.0114762, total time[s] 0.078258 +Converged at iteration 20, L1 8.85772e-05, Linf 0.00501295, total time[s] 0.05798 +Converged at iteration 19, L1 5.73977e-05, Linf 0.00195912, total time[s] 0.059584 +Converged at iteration 31, L1 8.09611e-05, Linf 0.00986754, total time[s] 0.094299 +Converged at iteration 22, L1 6.83324e-05, Linf 0.00281527, total time[s] 0.07208 +Converged at iteration 23, L1 6.66638e-05, Linf 0.00605096, total time[s] 0.063629 +Converged at iteration 27, L1 6.91859e-05, Linf 0.00366509, total time[s] 0.073439 +Converged at iteration 24, L1 7.77855e-05, Linf 0.00550382, total time[s] 0.065247 +Converged at iteration 23, L1 7.946e-05, Linf 0.0043116, total time[s] 0.064682 +Converged at iteration 25, L1 6.77601e-05, Linf 0.00448549, total time[s] 0.067456 +Converged at iteration 25, L1 6.53487e-05, Linf 0.00573114, total time[s] 0.070337 +Converged at iteration 27, L1 9.2071e-05, Linf 0.00671005, total time[s] 0.079177 +Converged at iteration 32, L1 5.63551e-05, Linf 0.00322214, total time[s] 0.085383 +Converged at iteration 27, L1 7.52449e-05, Linf 0.00283824, total time[s] 0.07365 +Converged at iteration 31, L1 6.7144e-05, Linf 0.00763906, total time[s] 0.08741 +Converged at iteration 31, L1 6.31075e-05, Linf 0.00230526, total time[s] 0.090045 +Converged at iteration 31, L1 8.25779e-05, Linf 0.00316807, total time[s] 0.086563 +Converged at iteration 29, L1 9.40774e-05, Linf 0.00615767, total time[s] 0.079584 +Converged at iteration 31, L1 4.35754e-05, Linf 0.00997406, total time[s] 0.088403 +Converged at iteration 29, L1 7.85758e-05, Linf 0.0137578, total time[s] 0.080583 +Converged at iteration 25, L1 5.21212e-05, Linf 0.00243023, total time[s] 0.075306 +Converged at iteration 36, L1 9.16771e-05, Linf 0.00799348, total time[s] 0.101891 +Converged at iteration 34, L1 5.68272e-05, Linf 0.00470969, total time[s] 0.09385 +Converged at iteration 25, L1 6.00065e-05, Linf 0.0031053, total time[s] 0.069868 +Converged at iteration 25, L1 6.61151e-05, Linf 0.0126196, total time[s] 0.072725 +Converged at iteration 27, L1 7.69894e-05, Linf 0.0136525, total time[s] 0.077455 +Converged at iteration 26, L1 4.95784e-05, Linf 0.015583, total time[s] 0.07576 +Converged at iteration 21, L1 3.7542e-05, Linf 0.00684424, total time[s] 0.058792 +Converged at iteration 19, L1 8.82574e-05, Linf 0.00417953, total time[s] 0.055348 +Converged at iteration 24, L1 6.24153e-05, Linf 0.00254933, total time[s] 0.064268 +Converged at iteration 23, L1 7.33665e-05, Linf 0.01045, total time[s] 0.076215 +Converged at iteration 20, L1 9.01855e-05, Linf 0.00500422, total time[s] 0.055799 +Converged at iteration 19, L1 6.20094e-05, Linf 0.00207532, total time[s] 0.053602 +Converged at iteration 31, L1 8.28247e-05, Linf 0.0103883, total time[s] 0.082405 +Converged at iteration 22, L1 7.03119e-05, Linf 0.00290311, total time[s] 0.060948 +Converged at iteration 23, L1 7.20803e-05, Linf 0.00633098, total time[s] 0.063582 +Converged at iteration 27, L1 7.28661e-05, Linf 0.00364994, total time[s] 0.073017 +Converged at iteration 24, L1 7.15598e-05, Linf 0.00527822, total time[s] 0.066935 +Converged at iteration 23, L1 8.22726e-05, Linf 0.00440284, total time[s] 0.06697 +Converged at iteration 25, L1 6.92679e-05, Linf 0.00458324, total time[s] 0.074455 +Converged at iteration 25, L1 7.47474e-05, Linf 0.00611797, total time[s] 0.079159 +Converged at iteration 27, L1 8.90049e-05, Linf 0.0066747, total time[s] 0.08749 +Converged at iteration 32, L1 5.63344e-05, Linf 0.00324846, total time[s] 0.099332 +Converged at iteration 27, L1 7.05498e-05, Linf 0.00266541, total time[s] 0.114049 +Converged at iteration 31, L1 6.95135e-05, Linf 0.00789429, total time[s] 0.106472 +Converged at iteration 31, L1 6.33894e-05, Linf 0.00236, total time[s] 0.126412 +Converged at iteration 31, L1 9.6215e-05, Linf 0.00365568, total time[s] 0.087432 +Converged at iteration 29, L1 9.6597e-05, Linf 0.00574681, total time[s] 0.088578 +Converged at iteration 31, L1 4.87418e-05, Linf 0.0100069, total time[s] 0.094807 +Converged at iteration 29, L1 8.2127e-05, Linf 0.0144611, total time[s] 0.09141 +Converged at iteration 25, L1 5.2567e-05, Linf 0.00254916, total time[s] 0.07917 +Converged at iteration 36, L1 9.55356e-05, Linf 0.00817178, total time[s] 0.115007 +Converged at iteration 34, L1 5.99382e-05, Linf 0.00478964, total time[s] 0.111953 +Converged at iteration 25, L1 5.82361e-05, Linf 0.00319125, total time[s] 0.087079 +Converged at iteration 25, L1 5.58355e-05, Linf 0.0122655, total time[s] 0.099371 +Converged at iteration 27, L1 6.69521e-05, Linf 0.0135582, total time[s] 0.07367 +Converged at iteration 26, L1 4.9484e-05, Linf 0.015932, total time[s] 0.078258 +Converged at iteration 21, L1 3.73309e-05, Linf 0.00691576, total time[s] 0.071578 +Converged at iteration 19, L1 8.82271e-05, Linf 0.0041028, total time[s] 0.059062 +Converged at iteration 24, L1 6.34271e-05, Linf 0.00255298, total time[s] 0.075319 +Converged at iteration 23, L1 7.64409e-05, Linf 0.00982366, total time[s] 0.06989 +Converged at iteration 20, L1 9.18595e-05, Linf 0.00497867, total time[s] 0.066298 +Converged at iteration 19, L1 6.52655e-05, Linf 0.00214765, total time[s] 0.054343 +Converged at iteration 31, L1 8.41436e-05, Linf 0.0106887, total time[s] 0.121565 +Converged at iteration 22, L1 7.13711e-05, Linf 0.00297124, total time[s] 0.099808 +Converged at iteration 23, L1 7.32842e-05, Linf 0.00648681, total time[s] 0.103599 +Converged at iteration 27, L1 7.24278e-05, Linf 0.00366054, total time[s] 0.119609 +Converged at iteration 24, L1 6.9405e-05, Linf 0.00513902, total time[s] 0.114362 +Converged at iteration 23, L1 8.34174e-05, Linf 0.00447413, total time[s] 0.072895 +Converged at iteration 25, L1 7.01204e-05, Linf 0.0046388, total time[s] 0.069138 +Converged at iteration 25, L1 7.72121e-05, Linf 0.00648612, total time[s] 0.077534 +Converged at iteration 27, L1 8.62252e-05, Linf 0.00679238, total time[s] 0.077767 +Converged at iteration 32, L1 5.74175e-05, Linf 0.00322099, total time[s] 0.090304 +Converged at iteration 27, L1 6.72465e-05, Linf 0.00251919, total time[s] 0.072294 +Converged at iteration 31, L1 7.02943e-05, Linf 0.00814221, total time[s] 0.080813 +Converged at iteration 31, L1 6.30344e-05, Linf 0.00235665, total time[s] 0.08103 +Converged at iteration 32, L1 4.72549e-05, Linf 0.00222035, total time[s] 0.131716 +Converged at iteration 29, L1 9.89079e-05, Linf 0.0055007, total time[s] 0.078859 +Converged at iteration 31, L1 5.16812e-05, Linf 0.0119555, total time[s] 0.079441 +Converged at iteration 29, L1 8.25812e-05, Linf 0.0148652, total time[s] 0.074398 +Converged at iteration 25, L1 5.26618e-05, Linf 0.00257712, total time[s] 0.064672 +Converged at iteration 37, L1 4.94883e-05, Linf 0.00673369, total time[s] 0.097615 +Converged at iteration 34, L1 6.57195e-05, Linf 0.00557965, total time[s] 0.096167 +Converged at iteration 25, L1 5.82284e-05, Linf 0.00330572, total time[s] 0.072498 +Converged at iteration 25, L1 4.99075e-05, Linf 0.0117639, total time[s] 0.065793 +Converged at iteration 27, L1 5.73837e-05, Linf 0.0131236, total time[s] 0.069826 +Converged at iteration 26, L1 5.35695e-05, Linf 0.0166799, total time[s] 0.074062 +Converged at iteration 21, L1 3.8113e-05, Linf 0.00703171, total time[s] 0.073706 +Converged at iteration 19, L1 8.83148e-05, Linf 0.00391217, total time[s] 0.060817 +Converged at iteration 24, L1 6.34515e-05, Linf 0.00256376, total time[s] 0.084094 +Converged at iteration 23, L1 7.79214e-05, Linf 0.00912116, total time[s] 0.071405 +Converged at iteration 20, L1 9.54817e-05, Linf 0.00495853, total time[s] 0.058061 +Converged at iteration 19, L1 7.07587e-05, Linf 0.00228453, total time[s] 0.065756 +Converged at iteration 31, L1 8.45835e-05, Linf 0.011248, total time[s] 0.108502 +Converged at iteration 22, L1 7.0861e-05, Linf 0.00308446, total time[s] 0.062495 +Converged at iteration 23, L1 7.38593e-05, Linf 0.0067519, total time[s] 0.065801 +Converged at iteration 27, L1 7.15648e-05, Linf 0.00369665, total time[s] 0.069974 +Converged at iteration 24, L1 6.71814e-05, Linf 0.00483436, total time[s] 0.063857 +Converged at iteration 23, L1 8.55e-05, Linf 0.00456585, total time[s] 0.065721 +Converged at iteration 25, L1 7.32886e-05, Linf 0.00476417, total time[s] 0.067024 +Converged at iteration 25, L1 7.97553e-05, Linf 0.00705337, total time[s] 0.067408 +Converged at iteration 27, L1 8.44271e-05, Linf 0.00697869, total time[s] 0.074568 +Converged at iteration 32, L1 5.90213e-05, Linf 0.00324983, total time[s] 0.082429 +Converged at iteration 27, L1 6.36279e-05, Linf 0.0023209, total time[s] 0.070836 +Converged at iteration 31, L1 7.18415e-05, Linf 0.00848876, total time[s] 0.079739 +Converged at iteration 31, L1 6.34284e-05, Linf 0.00249961, total time[s] 0.079502 +Converged at iteration 32, L1 5.48737e-05, Linf 0.00249897, total time[s] 0.086805 +Converged at iteration 30, L1 6.69975e-05, Linf 0.00292688, total time[s] 0.079156 +Converged at iteration 31, L1 5.72109e-05, Linf 0.0129711, total time[s] 0.07767 +Converged at iteration 29, L1 8.40378e-05, Linf 0.0153163, total time[s] 0.074057 +Converged at iteration 25, L1 5.40374e-05, Linf 0.00258016, total time[s] 0.064807 +Converged at iteration 37, L1 5.13984e-05, Linf 0.0069557, total time[s] 0.092834 +Converged at iteration 34, L1 6.98669e-05, Linf 0.00550511, total time[s] 0.090095 +Converged at iteration 25, L1 5.78998e-05, Linf 0.00339205, total time[s] 0.075329 +Converged at iteration 25, L1 4.73179e-05, Linf 0.0114175, total time[s] 0.06707 +Converged at iteration 27, L1 4.89548e-05, Linf 0.0127821, total time[s] 0.083945 +Converged at iteration 26, L1 5.48696e-05, Linf 0.0167726, total time[s] 0.076095 +Converged at iteration 21, L1 3.77318e-05, Linf 0.00716554, total time[s] 0.063548 +Converged at iteration 19, L1 8.80489e-05, Linf 0.0038446, total time[s] 0.067793 +Converged at iteration 24, L1 6.3021e-05, Linf 0.00253392, total time[s] 0.079957 +Converged at iteration 23, L1 8.25075e-05, Linf 0.00847222, total time[s] 0.128115 +Converged at iteration 20, L1 9.97217e-05, Linf 0.00794288, total time[s] 0.071522 +Converged at iteration 19, L1 7.47039e-05, Linf 0.00235532, total time[s] 0.053192 +Converged at iteration 31, L1 8.57671e-05, Linf 0.0114647, total time[s] 0.090017 +Converged at iteration 22, L1 7.52999e-05, Linf 0.00314498, total time[s] 0.058474 +Converged at iteration 23, L1 7.81136e-05, Linf 0.00656109, total time[s] 0.063276 +Converged at iteration 27, L1 6.89745e-05, Linf 0.00367317, total time[s] 0.067169 +Converged at iteration 24, L1 6.50054e-05, Linf 0.0046877, total time[s] 0.060745 +Converged at iteration 23, L1 8.53284e-05, Linf 0.00461998, total time[s] 0.059919 +Converged at iteration 25, L1 7.54669e-05, Linf 0.00482353, total time[s] 0.063378 +Converged at iteration 25, L1 8.15613e-05, Linf 0.00763564, total time[s] 0.062411 +Converged at iteration 27, L1 8.41034e-05, Linf 0.00683959, total time[s] 0.06877 +Converged at iteration 32, L1 6.64279e-05, Linf 0.00323445, total time[s] 0.080649 +Converged at iteration 27, L1 6.10176e-05, Linf 0.00218173, total time[s] 0.067185 +Converged at iteration 31, L1 7.362e-05, Linf 0.00854348, total time[s] 0.075644 +Converged at iteration 31, L1 6.47448e-05, Linf 0.00236189, total time[s] 0.081956 +Converged at iteration 32, L1 5.75915e-05, Linf 0.00259598, total time[s] 0.07954 +Converged at iteration 30, L1 6.91412e-05, Linf 0.00295723, total time[s] 0.076097 +Converged at iteration 31, L1 6.06192e-05, Linf 0.0132507, total time[s] 0.07769 +Converged at iteration 29, L1 8.45834e-05, Linf 0.015784, total time[s] 0.073089 +Converged at iteration 25, L1 5.63385e-05, Linf 0.00260056, total time[s] 0.06843 +Converged at iteration 37, L1 5.4257e-05, Linf 0.00732215, total time[s] 0.091855 +Converged at iteration 34, L1 7.76501e-05, Linf 0.00578026, total time[s] 0.090688 +Converged at iteration 25, L1 6.02874e-05, Linf 0.00350555, total time[s] 0.069462 +Converged at iteration 25, L1 4.60822e-05, Linf 0.0108433, total time[s] 0.064397 +Converged at iteration 27, L1 3.95575e-05, Linf 0.0116449, total time[s] 0.068953 +Converged at iteration 26, L1 5.46431e-05, Linf 0.0168608, total time[s] 0.066169 +Converged at iteration 21, L1 3.85232e-05, Linf 0.00716809, total time[s] 0.056656 +Converged at iteration 19, L1 8.92367e-05, Linf 0.00369989, total time[s] 0.054761 +Converged at iteration 24, L1 6.19593e-05, Linf 0.00278558, total time[s] 0.072026 +Converged at iteration 23, L1 8.5957e-05, Linf 0.0076881, total time[s] 0.078113 +Converged at iteration 21, L1 4.52395e-05, Linf 0.00227596, total time[s] 0.082554 +Converged at iteration 19, L1 7.97079e-05, Linf 0.00257577, total time[s] 0.067371 +Converged at iteration 31, L1 8.58361e-05, Linf 0.0120197, total time[s] 0.093185 +Converged at iteration 22, L1 6.74494e-05, Linf 0.00325455, total time[s] 0.067566 +Converged at iteration 23, L1 8.12869e-05, Linf 0.00713233, total time[s] 0.070351 +Converged at iteration 27, L1 6.42261e-05, Linf 0.00355222, total time[s] 0.075434 +Converged at iteration 24, L1 6.16797e-05, Linf 0.00439455, total time[s] 0.066761 +Converged at iteration 23, L1 8.67124e-05, Linf 0.00472091, total time[s] 0.063186 +Converged at iteration 25, L1 7.87161e-05, Linf 0.00497622, total time[s] 0.066412 +Converged at iteration 25, L1 8.39251e-05, Linf 0.0058357, total time[s] 0.066865 +Converged at iteration 27, L1 8.29312e-05, Linf 0.00691516, total time[s] 0.071392 +Converged at iteration 32, L1 6.14306e-05, Linf 0.00328367, total time[s] 0.083519 +Converged at iteration 26, L1 9.67893e-05, Linf 0.00291795, total time[s] 0.071822 +Converged at iteration 31, L1 7.37552e-05, Linf 0.00883141, total time[s] 0.081435 +Converged at iteration 31, L1 6.09126e-05, Linf 0.00238907, total time[s] 0.089636 +Converged at iteration 32, L1 6.09683e-05, Linf 0.00284151, total time[s] 0.08577 +Converged at iteration 30, L1 7.20265e-05, Linf 0.00300034, total time[s] 0.078638 +Converged at iteration 31, L1 6.64615e-05, Linf 0.0142032, total time[s] 0.081814 +Converged at iteration 29, L1 8.51282e-05, Linf 0.0163453, total time[s] 0.076039 +Converged at iteration 25, L1 5.55639e-05, Linf 0.0025128, total time[s] 0.066435 +Converged at iteration 37, L1 5.58547e-05, Linf 0.00752957, total time[s] 0.101625 +Converged at iteration 34, L1 8.34353e-05, Linf 0.00627035, total time[s] 0.105134 +Converged at iteration 25, L1 5.881e-05, Linf 0.00355144, total time[s] 0.070428 +Converged at iteration 25, L1 4.46274e-05, Linf 0.0104662, total time[s] 0.073552 +Converged at iteration 26, L1 9.0783e-05, Linf 0.0185056, total time[s] 0.070174 +Converged at iteration 26, L1 5.33867e-05, Linf 0.0168644, total time[s] 0.07257 +Converged at iteration 21, L1 3.85152e-05, Linf 0.00737234, total time[s] 0.075726 +Converged at iteration 19, L1 8.8591e-05, Linf 0.0036953, total time[s] 0.076035 +Converged at iteration 24, L1 6.11878e-05, Linf 0.00248056, total time[s] 0.091482 +Converged at iteration 23, L1 8.74231e-05, Linf 0.00713562, total time[s] 0.080695 +Converged at iteration 21, L1 4.61182e-05, Linf 0.0023523, total time[s] 0.062087 +Converged at iteration 19, L1 8.26985e-05, Linf 0.00270864, total time[s] 0.062269 +Converged at iteration 31, L1 8.65254e-05, Linf 0.0123863, total time[s] 0.119535 +Converged at iteration 22, L1 6.72554e-05, Linf 0.00329522, total time[s] 0.088099 +Converged at iteration 23, L1 8.6227e-05, Linf 0.00721617, total time[s] 0.06563 +Converged at iteration 27, L1 6.29924e-05, Linf 0.00351807, total time[s] 0.070739 +Converged at iteration 24, L1 6.06405e-05, Linf 0.00430403, total time[s] 0.066186 +Converged at iteration 23, L1 8.70521e-05, Linf 0.00476309, total time[s] 0.066683 +Converged at iteration 25, L1 8.04124e-05, Linf 0.00504312, total time[s] 0.084625 +Converged at iteration 25, L1 8.73991e-05, Linf 0.00581083, total time[s] 0.066943 +Converged at iteration 27, L1 8.40349e-05, Linf 0.00720886, total time[s] 0.070253 +Converged at iteration 32, L1 6.21111e-05, Linf 0.00331584, total time[s] 0.081452 +Converged at iteration 26, L1 9.39003e-05, Linf 0.00277884, total time[s] 0.06623 +Converged at iteration 31, L1 7.54247e-05, Linf 0.00882056, total time[s] 0.079093 +Converged at iteration 31, L1 6.39791e-05, Linf 0.00236467, total time[s] 0.079165 +Converged at iteration 32, L1 6.60193e-05, Linf 0.00362516, total time[s] 0.147541 +Converged at iteration 30, L1 7.43227e-05, Linf 0.00307023, total time[s] 0.079575 +Converged at iteration 31, L1 7.02442e-05, Linf 0.0149302, total time[s] 0.081582 +Converged at iteration 29, L1 8.46593e-05, Linf 0.0165813, total time[s] 0.078154 +Converged at iteration 25, L1 5.46673e-05, Linf 0.00252909, total time[s] 0.065045 +Converged at iteration 37, L1 5.91198e-05, Linf 0.0079365, total time[s] 0.095193 +Converged at iteration 34, L1 8.81786e-05, Linf 0.00677586, total time[s] 0.095197 +Converged at iteration 25, L1 5.99352e-05, Linf 0.00366697, total time[s] 0.07676 +Converged at iteration 25, L1 4.43107e-05, Linf 0.00988102, total time[s] 0.06667 +Converged at iteration 26, L1 7.31528e-05, Linf 0.0175826, total time[s] 0.070316 +Converged at iteration 26, L1 5.07863e-05, Linf 0.0168233, total time[s] 0.068366 +Converged at iteration 21, L1 3.98474e-05, Linf 0.00742468, total time[s] 0.063907 +Converged at iteration 19, L1 8.78141e-05, Linf 0.0035433, total time[s] 0.069044 +Converged at iteration 24, L1 6.09648e-05, Linf 0.00251574, total time[s] 0.073616 +Converged at iteration 23, L1 9.21111e-05, Linf 0.00618656, total time[s] 0.070581 +Converged at iteration 21, L1 4.93411e-05, Linf 0.00250468, total time[s] 0.062039 +Converged at iteration 19, L1 8.96242e-05, Linf 0.00297625, total time[s] 0.060409 +Converged at iteration 31, L1 8.69693e-05, Linf 0.0126781, total time[s] 0.086468 +Converged at iteration 22, L1 7.0472e-05, Linf 0.00339057, total time[s] 0.062854 +Converged at iteration 23, L1 9.60407e-05, Linf 0.00745868, total time[s] 0.063438 +Converged at iteration 27, L1 6.25037e-05, Linf 0.00341716, total time[s] 0.079514 +Converged at iteration 24, L1 6.09225e-05, Linf 0.00415319, total time[s] 0.072298 +Converged at iteration 23, L1 8.99406e-05, Linf 0.00485896, total time[s] 0.089986 +Converged at iteration 25, L1 8.4354e-05, Linf 0.0052314, total time[s] 0.070237 +Converged at iteration 25, L1 9.58739e-05, Linf 0.00605836, total time[s] 0.121032 +Converged at iteration 27, L1 8.07239e-05, Linf 0.00737109, total time[s] 0.083901 +Converged at iteration 32, L1 6.35236e-05, Linf 0.00334877, total time[s] 0.087775 +Converged at iteration 26, L1 8.90286e-05, Linf 0.00249294, total time[s] 0.080151 +Converged at iteration 31, L1 7.5425e-05, Linf 0.00911976, total time[s] 0.08073 +Converged at iteration 31, L1 5.9398e-05, Linf 0.00241734, total time[s] 0.08119 +Converged at iteration 32, L1 6.67119e-05, Linf 0.00309741, total time[s] 0.083413 +Converged at iteration 30, L1 8.08842e-05, Linf 0.00331186, total time[s] 0.077837 +Converged at iteration 31, L1 7.78932e-05, Linf 0.015916, total time[s] 0.080503 +Converged at iteration 29, L1 8.58468e-05, Linf 0.0171444, total time[s] 0.077328 +Converged at iteration 25, L1 5.5516e-05, Linf 0.00243537, total time[s] 0.069377 +Converged at iteration 37, L1 6.08413e-05, Linf 0.00813366, total time[s] 0.100726 +Converged at iteration 34, L1 9.17464e-05, Linf 0.006888, total time[s] 0.090318 +Converged at iteration 25, L1 6.08995e-05, Linf 0.0036862, total time[s] 0.067873 +Converged at iteration 25, L1 4.35766e-05, Linf 0.00953397, total time[s] 0.068118 +Converged at iteration 26, L1 6.92742e-05, Linf 0.0170322, total time[s] 0.070283 +Converged at iteration 26, L1 4.99396e-05, Linf 0.0165579, total time[s] 0.070405 +Converged at iteration 21, L1 4.00069e-05, Linf 0.00733205, total time[s] 0.058445 +Converged at iteration 19, L1 8.55209e-05, Linf 0.0035477, total time[s] 0.053917 +Converged at iteration 24, L1 5.9978e-05, Linf 0.00251199, total time[s] 0.064905 +Converged at iteration 23, L1 9.39017e-05, Linf 0.00586194, total time[s] 0.064488 +Converged at iteration 21, L1 5.07458e-05, Linf 0.00257486, total time[s] 0.060708 +Converged at iteration 19, L1 9.2759e-05, Linf 0.00310529, total time[s] 0.057913 +Converged at iteration 31, L1 8.71835e-05, Linf 0.0128922, total time[s] 0.126408 +Converged at iteration 22, L1 6.46009e-05, Linf 0.00342826, total time[s] 0.059276 +Converged at iteration 23, L1 9.66751e-05, Linf 0.00752489, total time[s] 0.065198 +Converged at iteration 27, L1 6.10107e-05, Linf 0.00339449, total time[s] 0.075652 +Converged at iteration 24, L1 6.00009e-05, Linf 0.00418249, total time[s] 0.06523 +Converged at iteration 23, L1 9.02366e-05, Linf 0.00487635, total time[s] 0.066641 +Converged at iteration 25, L1 8.60763e-05, Linf 0.00530726, total time[s] 0.068235 +Converged at iteration 25, L1 9.93279e-05, Linf 0.00617501, total time[s] 0.068433 +Converged at iteration 27, L1 8.01424e-05, Linf 0.00722025, total time[s] 0.072594 +Converged at iteration 32, L1 6.42382e-05, Linf 0.00336822, total time[s] 0.084418 +Converged at iteration 26, L1 8.66755e-05, Linf 0.00236445, total time[s] 0.071109 +Converged at iteration 31, L1 7.48757e-05, Linf 0.00914125, total time[s] 0.08242 +Converged at iteration 31, L1 5.91465e-05, Linf 0.00241097, total time[s] 0.080877 +Converged at iteration 32, L1 6.78583e-05, Linf 0.00317304, total time[s] 0.083717 +Converged at iteration 30, L1 8.34759e-05, Linf 0.00331038, total time[s] 0.081813 +Converged at iteration 31, L1 8.18032e-05, Linf 0.0168186, total time[s] 0.093341 +Converged at iteration 29, L1 8.59324e-05, Linf 0.017331, total time[s] 0.08758 +Converged at iteration 25, L1 5.59411e-05, Linf 0.00236556, total time[s] 0.070118 +Converged at iteration 37, L1 6.43261e-05, Linf 0.00858315, total time[s] 0.099403 +Converged at iteration 35, L1 3.49886e-05, Linf 0.0041246, total time[s] 0.096393 +Converged at iteration 25, L1 6.47282e-05, Linf 0.00374267, total time[s] 0.070333 +Converged at iteration 25, L1 4.56046e-05, Linf 0.00905581, total time[s] 0.065794 +Converged at iteration 26, L1 5.52212e-05, Linf 0.0157133, total time[s] 0.068399 +Converged at iteration 26, L1 4.77022e-05, Linf 0.0161504, total time[s] 0.068126 +Converged at iteration 21, L1 4.12934e-05, Linf 0.00737266, total time[s] 0.057089 +Converged at iteration 19, L1 8.52585e-05, Linf 0.00340695, total time[s] 0.051648 +Converged at iteration 24, L1 5.86416e-05, Linf 0.00240309, total time[s] 0.065799 +Converged at iteration 23, L1 9.80294e-05, Linf 0.0051233, total time[s] 0.061324 +Converged at iteration 21, L1 5.40445e-05, Linf 0.00273727, total time[s] 0.056285 +Converged at iteration 20, L1 4.53546e-05, Linf 0.00182764, total time[s] 0.05423 +Converged at iteration 31, L1 9.00223e-05, Linf 0.0133862, total time[s] 0.081425 +Converged at iteration 22, L1 6.40277e-05, Linf 0.00351401, total time[s] 0.060687 +Converged at iteration 23, L1 9.99133e-05, Linf 0.00779463, total time[s] 0.063038 +Converged at iteration 27, L1 5.80781e-05, Linf 0.00327013, total time[s] 0.071671 +Converged at iteration 24, L1 6.052e-05, Linf 0.00429845, total time[s] 0.064458 +Converged at iteration 23, L1 9.33134e-05, Linf 0.00494866, total time[s] 0.06254 +Converged at iteration 25, L1 9.33079e-05, Linf 0.00554025, total time[s] 0.066759 +Converged at iteration 26, L1 6.01096e-05, Linf 0.00410805, total time[s] 0.070264 +Converged at iteration 27, L1 7.98694e-05, Linf 0.00625163, total time[s] 0.073133 +Converged at iteration 32, L1 6.51732e-05, Linf 0.00350005, total time[s] 0.097019 +Converged at iteration 26, L1 8.10869e-05, Linf 0.00231723, total time[s] 0.071715 +Converged at iteration 31, L1 7.66786e-05, Linf 0.00934969, total time[s] 0.081925 +Converged at iteration 31, L1 5.8416e-05, Linf 0.00241725, total time[s] 0.081394 +Converged at iteration 32, L1 7.23362e-05, Linf 0.00330179, total time[s] 0.084664 +Converged at iteration 30, L1 8.91332e-05, Linf 0.0035857, total time[s] 0.079652 +Converged at iteration 31, L1 9.11838e-05, Linf 0.0176781, total time[s] 0.081997 +Converged at iteration 29, L1 8.81591e-05, Linf 0.0179048, total time[s] 0.077025 +Converged at iteration 25, L1 5.72877e-05, Linf 0.00241916, total time[s] 0.068357 +Converged at iteration 37, L1 6.61313e-05, Linf 0.00877726, total time[s] 0.098009 +Converged at iteration 35, L1 3.60355e-05, Linf 0.00427489, total time[s] 0.0933 +Converged at iteration 25, L1 6.51049e-05, Linf 0.00374662, total time[s] 0.066944 +Converged at iteration 25, L1 4.54609e-05, Linf 0.00879278, total time[s] 0.067875 +Converged at iteration 26, L1 5.11754e-05, Linf 0.0151194, total time[s] 0.069672 +Converged at iteration 26, L1 4.68682e-05, Linf 0.0159925, total time[s] 0.072426 +Converged at iteration 21, L1 4.18562e-05, Linf 0.00740813, total time[s] 0.062269 +Converged at iteration 19, L1 8.34493e-05, Linf 0.00337304, total time[s] 0.062816 +Converged at iteration 24, L1 5.77812e-05, Linf 0.00240256, total time[s] 0.067533 +Converged at iteration 23, L1 9.82082e-05, Linf 0.00485131, total time[s] 0.06257 +Converged at iteration 21, L1 5.49015e-05, Linf 0.00280654, total time[s] 0.058532 +Converged at iteration 20, L1 4.67854e-05, Linf 0.00189736, total time[s] 0.053769 +Converged at iteration 31, L1 9.00976e-05, Linf 0.0135411, total time[s] 0.081053 +Converged at iteration 22, L1 6.52138e-05, Linf 0.00364513, total time[s] 0.058581 +Converged at iteration 24, L1 5.66809e-05, Linf 0.00432435, total time[s] 0.062798 +Converged at iteration 27, L1 5.7206e-05, Linf 0.00324142, total time[s] 0.070772 +Converged at iteration 24, L1 6.11072e-05, Linf 0.00447842, total time[s] 0.063674 +Converged at iteration 23, L1 9.40807e-05, Linf 0.00495364, total time[s] 0.061483 +Converged at iteration 25, L1 9.55305e-05, Linf 0.0056241, total time[s] 0.067523 +Converged at iteration 26, L1 6.24439e-05, Linf 0.0041922, total time[s] 0.069266 +Converged at iteration 27, L1 7.87301e-05, Linf 0.0059229, total time[s] 0.073708 +Converged at iteration 32, L1 6.50552e-05, Linf 0.0035919, total time[s] 0.086181 +Converged at iteration 26, L1 7.89458e-05, Linf 0.00234994, total time[s] 0.068546 +Converged at iteration 31, L1 7.61701e-05, Linf 0.00934948, total time[s] 0.079807 +Converged at iteration 31, L1 5.82558e-05, Linf 0.00240854, total time[s] 0.079485 +Converged at iteration 32, L1 7.42019e-05, Linf 0.00337844, total time[s] 0.08156 +Converged at iteration 30, L1 8.83713e-05, Linf 0.00377772, total time[s] 0.078547 +Converged at iteration 31, L1 9.55254e-05, Linf 0.0182094, total time[s] 0.103829 +Converged at iteration 29, L1 8.82253e-05, Linf 0.0180659, total time[s] 0.084553 +Converged at iteration 25, L1 5.80122e-05, Linf 0.00242608, total time[s] 0.07108 +Converged at iteration 37, L1 6.97124e-05, Linf 0.00925396, total time[s] 0.109942 +Converged at iteration 35, L1 3.97028e-05, Linf 0.00461128, total time[s] 0.098118 +Converged at iteration 25, L1 6.48406e-05, Linf 0.0037643, total time[s] 0.066186 +Converged at iteration 25, L1 4.86031e-05, Linf 0.00847005, total time[s] 0.0665 +Converged at iteration 26, L1 4.33989e-05, Linf 0.013696, total time[s] 0.068908 +Converged at iteration 26, L1 4.58309e-05, Linf 0.0155415, total time[s] 0.068302 +Converged at iteration 21, L1 4.26776e-05, Linf 0.00742804, total time[s] 0.056522 +Converged at iteration 19, L1 8.094e-05, Linf 0.0032204, total time[s] 0.051981 +Converged at iteration 24, L1 5.89977e-05, Linf 0.00233928, total time[s] 0.06911 +Converged at iteration 24, L1 5.97041e-05, Linf 0.00210792, total time[s] 0.064394 +Converged at iteration 21, L1 5.90258e-05, Linf 0.00297373, total time[s] 0.056307 +Converged at iteration 20, L1 5.05176e-05, Linf 0.00206005, total time[s] 0.055464 +Converged at iteration 31, L1 9.3941e-05, Linf 0.0139461, total time[s] 0.089634 +Converged at iteration 22, L1 7.4793e-05, Linf 0.00476332, total time[s] 0.057987 +Converged at iteration 24, L1 5.8358e-05, Linf 0.00444008, total time[s] 0.069006 +Converged at iteration 27, L1 5.52638e-05, Linf 0.00312679, total time[s] 0.072997 +Converged at iteration 24, L1 6.33661e-05, Linf 0.0048661, total time[s] 0.064679 +Converged at iteration 23, L1 9.73134e-05, Linf 0.00500591, total time[s] 0.061847 +Converged at iteration 26, L1 4.97852e-05, Linf 0.00331677, total time[s] 0.068325 +Converged at iteration 26, L1 7.03637e-05, Linf 0.00445311, total time[s] 0.068879 +Converged at iteration 27, L1 7.9602e-05, Linf 0.00628557, total time[s] 0.075433 +Converged at iteration 32, L1 6.52262e-05, Linf 0.00373759, total time[s] 0.083813 +Converged at iteration 26, L1 7.40766e-05, Linf 0.00247779, total time[s] 0.069348 +Converged at iteration 31, L1 8.0036e-05, Linf 0.00952204, total time[s] 0.080447 +Converged at iteration 31, L1 6.03225e-05, Linf 0.00241768, total time[s] 0.080235 +Converged at iteration 32, L1 7.89061e-05, Linf 0.00346646, total time[s] 0.081462 +Converged at iteration 30, L1 8.39027e-05, Linf 0.00412771, total time[s] 0.077775 +Converged at iteration 32, L1 3.78584e-05, Linf 0.00868037, total time[s] 0.082464 +Converged at iteration 29, L1 9.24094e-05, Linf 0.018603, total time[s] 0.076833 +Converged at iteration 25, L1 5.92559e-05, Linf 0.00244204, total time[s] 0.065727 +Converged at iteration 37, L1 7.16041e-05, Linf 0.0094527, total time[s] 0.094689 +Converged at iteration 35, L1 4.17514e-05, Linf 0.00477422, total time[s] 0.091985 +Converged at iteration 25, L1 6.47414e-05, Linf 0.0037625, total time[s] 0.066591 +Converged at iteration 25, L1 4.89114e-05, Linf 0.00825754, total time[s] 0.066586 +Converged at iteration 26, L1 4.07596e-05, Linf 0.013105, total time[s] 0.069594 +Converged at iteration 26, L1 4.53113e-05, Linf 0.0153349, total time[s] 0.071413 +Converged at iteration 21, L1 4.35318e-05, Linf 0.00745255, total time[s] 0.058088 +Converged at iteration 19, L1 7.82244e-05, Linf 0.00316553, total time[s] 0.064741 +Converged at iteration 24, L1 5.8675e-05, Linf 0.00344517, total time[s] 0.084954 +Converged at iteration 24, L1 6.19875e-05, Linf 0.00354541, total time[s] 0.069331 +Converged at iteration 21, L1 6.0201e-05, Linf 0.00303501, total time[s] 0.057383 +Converged at iteration 20, L1 5.19167e-05, Linf 0.00213271, total time[s] 0.054915 +Converged at iteration 31, L1 9.42416e-05, Linf 0.0140814, total time[s] 0.079869 +Converged at iteration 22, L1 6.82079e-05, Linf 0.00366037, total time[s] 0.06137 +Converged at iteration 24, L1 6.01427e-05, Linf 0.00451565, total time[s] 0.066738 +Converged at iteration 27, L1 5.45803e-05, Linf 0.00309935, total time[s] 0.088462 +Converged at iteration 24, L1 6.37149e-05, Linf 0.00503589, total time[s] 0.070558 +Converged at iteration 23, L1 9.77531e-05, Linf 0.00501215, total time[s] 0.061316 +Converged at iteration 26, L1 5.3154e-05, Linf 0.00336232, total time[s] 0.074871 +Converged at iteration 26, L1 7.29616e-05, Linf 0.00456131, total time[s] 0.069821 +Converged at iteration 27, L1 8.05709e-05, Linf 0.00671028, total time[s] 0.070255 +Converged at iteration 32, L1 6.54934e-05, Linf 0.00382304, total time[s] 0.081166 +Converged at iteration 26, L1 7.26204e-05, Linf 0.00253422, total time[s] 0.066917 +Converged at iteration 31, L1 7.90967e-05, Linf 0.00950625, total time[s] 0.080973 +Converged at iteration 31, L1 6.22911e-05, Linf 0.00241858, total time[s] 0.091714 +Converged at iteration 32, L1 8.08053e-05, Linf 0.00352831, total time[s] 0.084942 +Converged at iteration 30, L1 8.2536e-05, Linf 0.00414404, total time[s] 0.097614 +Converged at iteration 32, L1 4.23934e-05, Linf 0.00895044, total time[s] 0.083253 +Converged at iteration 29, L1 9.17733e-05, Linf 0.0185412, total time[s] 0.077724 +Converged at iteration 25, L1 6.02361e-05, Linf 0.00274042, total time[s] 0.065909 +Converged at iteration 37, L1 7.50106e-05, Linf 0.00997595, total time[s] 0.094903 +Converged at iteration 35, L1 4.50007e-05, Linf 0.00525094, total time[s] 0.091506 +Converged at iteration 25, L1 6.71811e-05, Linf 0.00377551, total time[s] 0.072188 +Converged at iteration 25, L1 5.29882e-05, Linf 0.00799085, total time[s] 0.075454 +Converged at iteration 26, L1 3.48796e-05, Linf 0.0115994, total time[s] 0.070422 +Converged at iteration 26, L1 4.41388e-05, Linf 0.0149237, total time[s] 0.067776 +Converged at iteration 21, L1 4.54434e-05, Linf 0.00746326, total time[s] 0.058393 +Converged at iteration 19, L1 7.44106e-05, Linf 0.00296201, total time[s] 0.071834 +Converged at iteration 24, L1 5.63137e-05, Linf 0.00221529, total time[s] 0.075729 +Converged at iteration 24, L1 6.27646e-05, Linf 0.00228842, total time[s] 0.079506 +Converged at iteration 21, L1 6.40768e-05, Linf 0.0031989, total time[s] 0.059652 +Converged at iteration 20, L1 5.57573e-05, Linf 0.0023317, total time[s] 0.058026 +Converged at iteration 31, L1 9.89019e-05, Linf 0.0145346, total time[s] 0.07839 +Converged at iteration 22, L1 6.76425e-05, Linf 0.00375699, total time[s] 0.059753 +Converged at iteration 24, L1 5.91596e-05, Linf 0.00503117, total time[s] 0.064674 +Converged at iteration 27, L1 5.47297e-05, Linf 0.00300915, total time[s] 0.070382 +Converged at iteration 24, L1 6.41062e-05, Linf 0.00518385, total time[s] 0.064121 +Converged at iteration 23, L1 9.96981e-05, Linf 0.00504705, total time[s] 0.061782 +Converged at iteration 26, L1 5.20572e-05, Linf 0.00351272, total time[s] 0.068407 +Converged at iteration 26, L1 8.19778e-05, Linf 0.00488217, total time[s] 0.06764 +Converged at iteration 27, L1 8.17539e-05, Linf 0.00636371, total time[s] 0.070405 +Converged at iteration 32, L1 6.71342e-05, Linf 0.00395625, total time[s] 0.084595 +Converged at iteration 26, L1 7.07837e-05, Linf 0.00261981, total time[s] 0.068373 +Converged at iteration 31, L1 7.92658e-05, Linf 0.00965336, total time[s] 0.081935 +Converged at iteration 31, L1 6.12046e-05, Linf 0.00243246, total time[s] 0.078604 +Converged at iteration 32, L1 8.33198e-05, Linf 0.00363735, total time[s] 0.08158 +Converged at iteration 30, L1 8.35583e-05, Linf 0.00454846, total time[s] 0.079436 +Converged at iteration 32, L1 4.29157e-05, Linf 0.00971723, total time[s] 0.085826 +Converged at iteration 29, L1 9.54258e-05, Linf 0.0192577, total time[s] 0.078674 +Converged at iteration 25, L1 6.01841e-05, Linf 0.00276354, total time[s] 0.068528 +Converged at iteration 37, L1 7.66897e-05, Linf 0.0101733, total time[s] 0.106031 +Converged at iteration 35, L1 4.64823e-05, Linf 0.00543102, total time[s] 0.098388 +Converged at iteration 25, L1 6.75218e-05, Linf 0.00377157, total time[s] 0.067068 +Converged at iteration 25, L1 5.35855e-05, Linf 0.00780533, total time[s] 0.066858 +Converged at iteration 26, L1 3.43326e-05, Linf 0.0110455, total time[s] 0.069122 +Converged at iteration 26, L1 4.37581e-05, Linf 0.0147675, total time[s] 0.070007 +Converged at iteration 21, L1 4.5549e-05, Linf 0.00748197, total time[s] 0.059343 +Converged at iteration 19, L1 7.22591e-05, Linf 0.00295783, total time[s] 0.05548 +Converged at iteration 24, L1 5.65668e-05, Linf 0.002787, total time[s] 0.068966 +Converged at iteration 24, L1 6.40385e-05, Linf 0.0023435, total time[s] 0.066203 +Converged at iteration 21, L1 6.55926e-05, Linf 0.00325839, total time[s] 0.064418 +Converged at iteration 20, L1 5.71596e-05, Linf 0.00240887, total time[s] 0.054403 +Converged at iteration 32, L1 3.84291e-05, Linf 0.00847926, total time[s] 0.08643 +Converged at iteration 22, L1 7.44711e-05, Linf 0.00495008, total time[s] 0.058415 +Converged at iteration 24, L1 5.81482e-05, Linf 0.00462073, total time[s] 0.063856 +Converged at iteration 27, L1 5.44218e-05, Linf 0.00299498, total time[s] 0.069196 +Converged at iteration 24, L1 6.29601e-05, Linf 0.00513533, total time[s] 0.063345 +Converged at iteration 24, L1 5.43672e-05, Linf 0.00320501, total time[s] 0.065208 +Converged at iteration 26, L1 5.34299e-05, Linf 0.00357663, total time[s] 0.083217 +Converged at iteration 26, L1 8.48778e-05, Linf 0.00501634, total time[s] 0.066 +Converged at iteration 27, L1 8.27534e-05, Linf 0.00638555, total time[s] 0.075234 +Converged at iteration 32, L1 6.82438e-05, Linf 0.00401337, total time[s] 0.082293 +Converged at iteration 26, L1 7.09213e-05, Linf 0.00267522, total time[s] 0.066033 +Converged at iteration 31, L1 7.68725e-05, Linf 0.00965209, total time[s] 0.079313 +Converged at iteration 31, L1 5.93087e-05, Linf 0.00242823, total time[s] 0.07858 +Converged at iteration 32, L1 8.29508e-05, Linf 0.00368532, total time[s] 0.083861 +Converged at iteration 30, L1 8.43131e-05, Linf 0.00422494, total time[s] 0.076881 +Converged at iteration 32, L1 4.46425e-05, Linf 0.0102237, total time[s] 0.082776 +Converged at iteration 29, L1 9.32091e-05, Linf 0.019745, total time[s] 0.084625 +Converged at iteration 25, L1 6.02409e-05, Linf 0.00277176, total time[s] 0.075392 +Converged at iteration 37, L1 8.04613e-05, Linf 0.0109151, total time[s] 0.111374 +Converged at iteration 35, L1 5.04294e-05, Linf 0.00595951, total time[s] 0.103569 +Converged at iteration 25, L1 6.99532e-05, Linf 0.00378733, total time[s] 0.069213 +Converged at iteration 25, L1 5.88307e-05, Linf 0.0075758, total time[s] 0.068537 +Converged at iteration 25, L1 9.22941e-05, Linf 0.0201942, total time[s] 0.069933 +Converged at iteration 26, L1 4.42824e-05, Linf 0.0147057, total time[s] 0.082068 +Converged at iteration 21, L1 4.78448e-05, Linf 0.00742099, total time[s] 0.060588 +Converged at iteration 19, L1 6.75817e-05, Linf 0.00279247, total time[s] 0.056232 +Converged at iteration 24, L1 5.57818e-05, Linf 0.0024876, total time[s] 0.068829 +Converged at iteration 24, L1 6.72523e-05, Linf 0.00254505, total time[s] 0.065179 +Converged at iteration 21, L1 6.91313e-05, Linf 0.00341312, total time[s] 0.058029 +Converged at iteration 20, L1 6.10909e-05, Linf 0.00261914, total time[s] 0.05454 +Converged at iteration 32, L1 3.96477e-05, Linf 0.00854031, total time[s] 0.113212 +Converged at iteration 22, L1 6.9064e-05, Linf 0.0038754, total time[s] 0.071841 +Converged at iteration 24, L1 5.62148e-05, Linf 0.00464456, total time[s] 0.071237 +Converged at iteration 27, L1 5.16177e-05, Linf 0.00288358, total time[s] 0.079475 +Converged at iteration 24, L1 6.26882e-05, Linf 0.00489365, total time[s] 0.064326 +Converged at iteration 24, L1 5.63184e-05, Linf 0.00321602, total time[s] 0.065297 +Converged at iteration 26, L1 5.47711e-05, Linf 0.00372884, total time[s] 0.070614 +Converged at iteration 26, L1 9.52954e-05, Linf 0.00538009, total time[s] 0.071839 +Converged at iteration 27, L1 8.25105e-05, Linf 0.00645591, total time[s] 0.08765 +Converged at iteration 32, L1 7.02513e-05, Linf 0.00419187, total time[s] 0.107065 +Converged at iteration 26, L1 7.25813e-05, Linf 0.00274096, total time[s] 0.072669 +Converged at iteration 31, L1 7.67703e-05, Linf 0.00979224, total time[s] 0.084598 +Converged at iteration 31, L1 5.77669e-05, Linf 0.00245042, total time[s] 0.081075 +Converged at iteration 32, L1 8.54087e-05, Linf 0.00377229, total time[s] 0.08377 +Converged at iteration 30, L1 8.85682e-05, Linf 0.00449017, total time[s] 0.080155 +Converged at iteration 32, L1 5.01452e-05, Linf 0.0108686, total time[s] 0.08377 +Converged at iteration 29, L1 9.48651e-05, Linf 0.0198012, total time[s] 0.076477 +Converged at iteration 25, L1 6.01217e-05, Linf 0.00287192, total time[s] 0.066988 +Converged at iteration 37, L1 8.13983e-05, Linf 0.0103428, total time[s] 0.097252 +Converged at iteration 35, L1 5.16193e-05, Linf 0.00613109, total time[s] 0.091052 +Converged at iteration 25, L1 7.01053e-05, Linf 0.00376088, total time[s] 0.066722 +Converged at iteration 25, L1 5.90686e-05, Linf 0.00740907, total time[s] 0.06763 +Converged at iteration 25, L1 8.50632e-05, Linf 0.0195896, total time[s] 0.067347 +Converged at iteration 26, L1 4.36056e-05, Linf 0.0143885, total time[s] 0.069356 +Converged at iteration 21, L1 4.92937e-05, Linf 0.00752625, total time[s] 0.057297 +Converged at iteration 19, L1 6.49615e-05, Linf 0.00279624, total time[s] 0.053149 +Converged at iteration 24, L1 5.41976e-05, Linf 0.00282463, total time[s] 0.069654 +Converged at iteration 24, L1 6.85331e-05, Linf 0.0026268, total time[s] 0.063605 +Converged at iteration 21, L1 7.06235e-05, Linf 0.00346733, total time[s] 0.057344 +Converged at iteration 20, L1 6.21232e-05, Linf 0.00269795, total time[s] 0.055142 +Converged at iteration 32, L1 4.57544e-05, Linf 0.0086436, total time[s] 0.090479 +Converged at iteration 22, L1 6.68033e-05, Linf 0.00400252, total time[s] 0.070783 +Converged at iteration 24, L1 5.55249e-05, Linf 0.00472717, total time[s] 0.065387 +Converged at iteration 27, L1 5.11256e-05, Linf 0.00286, total time[s] 0.081492 +Converged at iteration 24, L1 6.25939e-05, Linf 0.00477037, total time[s] 0.075106 +Converged at iteration 24, L1 5.58882e-05, Linf 0.00320218, total time[s] 0.071684 +Converged at iteration 26, L1 5.62867e-05, Linf 0.00378624, total time[s] 0.074445 +Converged at iteration 26, L1 9.85868e-05, Linf 0.00551002, total time[s] 0.078279 +Converged at iteration 27, L1 8.32192e-05, Linf 0.00644048, total time[s] 0.07507 +Converged at iteration 32, L1 7.11982e-05, Linf 0.00429013, total time[s] 0.100446 +Converged at iteration 26, L1 7.42853e-05, Linf 0.00275981, total time[s] 0.076197 +Converged at iteration 31, L1 7.67839e-05, Linf 0.00979608, total time[s] 0.081419 +Converged at iteration 31, L1 5.72052e-05, Linf 0.00245394, total time[s] 0.080136 +Converged at iteration 32, L1 8.68289e-05, Linf 0.003829, total time[s] 0.085225 +Converged at iteration 30, L1 9.02748e-05, Linf 0.00465105, total time[s] 0.083851 +Converged at iteration 32, L1 5.05079e-05, Linf 0.0112073, total time[s] 0.083282 +Converged at iteration 29, L1 9.47521e-05, Linf 0.0192834, total time[s] 0.075687 +Converged at iteration 25, L1 6.00759e-05, Linf 0.00293437, total time[s] 0.066366 +Converged at iteration 37, L1 8.46084e-05, Linf 0.0108651, total time[s] 0.097724 +Converged at iteration 35, L1 5.61744e-05, Linf 0.00670609, total time[s] 0.089788 +Converged at iteration 25, L1 7.34247e-05, Linf 0.00367808, total time[s] 0.067392 +Converged at iteration 25, L1 6.40471e-05, Linf 0.00721329, total time[s] 0.066253 +Converged at iteration 25, L1 7.52187e-05, Linf 0.0178322, total time[s] 0.072699 +Converged at iteration 26, L1 4.53058e-05, Linf 0.0142938, total time[s] 0.077106 +Converged at iteration 21, L1 4.96021e-05, Linf 0.00755614, total time[s] 0.066355 +Converged at iteration 19, L1 5.82248e-05, Linf 0.00299028, total time[s] 0.0568 +Converged at iteration 24, L1 5.28653e-05, Linf 0.00222944, total time[s] 0.067147 +Converged at iteration 24, L1 7.02933e-05, Linf 0.00282151, total time[s] 0.066965 +Converged at iteration 21, L1 7.39191e-05, Linf 0.00360137, total time[s] 0.058082 +Converged at iteration 20, L1 6.61636e-05, Linf 0.00291105, total time[s] 0.05466 +Converged at iteration 32, L1 4.75573e-05, Linf 0.00854324, total time[s] 0.096139 +Converged at iteration 22, L1 6.78018e-05, Linf 0.00400342, total time[s] 0.06091 +Converged at iteration 24, L1 5.81854e-05, Linf 0.00486143, total time[s] 0.065561 +Converged at iteration 27, L1 4.87476e-05, Linf 0.00273117, total time[s] 0.073828 +Converged at iteration 24, L1 6.16612e-05, Linf 0.00451739, total time[s] 0.064316 +Converged at iteration 24, L1 5.5365e-05, Linf 0.0032052, total time[s] 0.063672 +Converged at iteration 26, L1 5.94183e-05, Linf 0.00396111, total time[s] 0.070977 +Converged at iteration 27, L1 5.66787e-05, Linf 0.00363817, total time[s] 0.071468 +Converged at iteration 27, L1 8.35491e-05, Linf 0.00647753, total time[s] 0.070751 +Converged at iteration 32, L1 7.20695e-05, Linf 0.00441591, total time[s] 0.086652 +Converged at iteration 26, L1 8.07853e-05, Linf 0.00286532, total time[s] 0.069324 +Converged at iteration 31, L1 7.75438e-05, Linf 0.0099159, total time[s] 0.081144 +Converged at iteration 31, L1 5.67637e-05, Linf 0.00245827, total time[s] 0.080911 +Converged at iteration 32, L1 9.06937e-05, Linf 0.00394699, total time[s] 0.083009 +Converged at iteration 30, L1 9.48212e-05, Linf 0.00520895, total time[s] 0.078557 +Converged at iteration 32, L1 5.59006e-05, Linf 0.0124024, total time[s] 0.083587 +Converged at iteration 29, L1 9.52975e-05, Linf 0.0175788, total time[s] 0.075821 +Converged at iteration 25, L1 6.19888e-05, Linf 0.00321062, total time[s] 0.066686 +Converged at iteration 37, L1 8.58865e-05, Linf 0.0110555, total time[s] 0.113074 +Converged at iteration 35, L1 5.79592e-05, Linf 0.00689949, total time[s] 0.097525 +Converged at iteration 25, L1 7.4255e-05, Linf 0.00365701, total time[s] 0.067838 +Converged at iteration 25, L1 6.51944e-05, Linf 0.00706347, total time[s] 0.06645 +Converged at iteration 25, L1 7.23705e-05, Linf 0.0172115, total time[s] 0.068483 +Converged at iteration 26, L1 4.72531e-05, Linf 0.0142641, total time[s] 0.079552 +Converged at iteration 21, L1 4.89787e-05, Linf 0.00758079, total time[s] 0.060887 +Converged at iteration 19, L1 5.47603e-05, Linf 0.00303999, total time[s] 0.05623 +Converged at iteration 24, L1 5.19452e-05, Linf 0.00218811, total time[s] 0.066958 +Converged at iteration 24, L1 7.12168e-05, Linf 0.00287338, total time[s] 0.070879 +Converged at iteration 21, L1 7.57729e-05, Linf 0.00365525, total time[s] 0.057216 +Converged at iteration 20, L1 6.80678e-05, Linf 0.00298765, total time[s] 0.055684 +Converged at iteration 32, L1 4.15598e-05, Linf 0.00864542, total time[s] 0.083546 +Converged at iteration 22, L1 6.82997e-05, Linf 0.00403456, total time[s] 0.06092 +Converged at iteration 24, L1 5.57512e-05, Linf 0.00491764, total time[s] 0.064464 +Converged at iteration 27, L1 4.81478e-05, Linf 0.00270438, total time[s] 0.076696 +Converged at iteration 24, L1 6.15762e-05, Linf 0.00442852, total time[s] 0.066034 +Converged at iteration 24, L1 5.45579e-05, Linf 0.0031863, total time[s] 0.065928 +Converged at iteration 26, L1 6.08146e-05, Linf 0.00401619, total time[s] 0.06862 +Converged at iteration 27, L1 6.00994e-05, Linf 0.00372443, total time[s] 0.075598 +Converged at iteration 27, L1 8.30325e-05, Linf 0.00649352, total time[s] 0.076873 +Converged at iteration 32, L1 7.27749e-05, Linf 0.00461994, total time[s] 0.083715 +Converged at iteration 26, L1 8.34163e-05, Linf 0.00288706, total time[s] 0.068797 +Converged at iteration 31, L1 7.78011e-05, Linf 0.00991457, total time[s] 0.080784 +Converged at iteration 31, L1 5.59821e-05, Linf 0.00245309, total time[s] 0.081084 +Converged at iteration 32, L1 9.27388e-05, Linf 0.00400626, total time[s] 0.085151 +Converged at iteration 30, L1 9.64028e-05, Linf 0.0054113, total time[s] 0.078683 +Converged at iteration 32, L1 5.80013e-05, Linf 0.0129448, total time[s] 0.08613 +Converged at iteration 29, L1 9.48336e-05, Linf 0.0169128, total time[s] 0.076472 +Converged at iteration 25, L1 6.2993e-05, Linf 0.00314673, total time[s] 0.067724 +Converged at iteration 37, L1 8.84669e-05, Linf 0.0116294, total time[s] 0.109279 +Converged at iteration 35, L1 6.26608e-05, Linf 0.0074826, total time[s] 0.091092 +Converged at iteration 25, L1 7.73724e-05, Linf 0.00367511, total time[s] 0.06716 +Converged at iteration 25, L1 6.99499e-05, Linf 0.00683493, total time[s] 0.067244 +Converged at iteration 25, L1 6.52422e-05, Linf 0.0154878, total time[s] 0.066984 +Converged at iteration 26, L1 4.72658e-05, Linf 0.0142037, total time[s] 0.06999 +Converged at iteration 21, L1 4.93281e-05, Linf 0.00761888, total time[s] 0.062364 +Converged at iteration 19, L1 4.72037e-05, Linf 0.00326558, total time[s] 0.052668 +Converged at iteration 23, L1 9.95327e-05, Linf 0.00302396, total time[s] 0.06191 +Converged at iteration 24, L1 7.41765e-05, Linf 0.00299714, total time[s] 0.064553 +Converged at iteration 21, L1 7.89963e-05, Linf 0.00378213, total time[s] 0.056849 +Converged at iteration 20, L1 7.19492e-05, Linf 0.00319291, total time[s] 0.054644 +Converged at iteration 32, L1 4.28363e-05, Linf 0.00854282, total time[s] 0.117715 +Converged at iteration 22, L1 6.91146e-05, Linf 0.00414229, total time[s] 0.060291 +Converged at iteration 24, L1 5.82082e-05, Linf 0.00487471, total time[s] 0.066378 +Converged at iteration 27, L1 4.52719e-05, Linf 0.00255533, total time[s] 0.071709 +Converged at iteration 24, L1 6.0153e-05, Linf 0.00420525, total time[s] 0.067332 +Converged at iteration 23, L1 9.9816e-05, Linf 0.00507993, total time[s] 0.061757 +Converged at iteration 26, L1 6.48369e-05, Linf 0.00419885, total time[s] 0.066868 +Converged at iteration 27, L1 6.51732e-05, Linf 0.00399191, total time[s] 0.071484 +Converged at iteration 27, L1 8.33996e-05, Linf 0.00650745, total time[s] 0.072113 +Converged at iteration 32, L1 7.62134e-05, Linf 0.00479695, total time[s] 0.083518 +Converged at iteration 26, L1 9.62543e-05, Linf 0.00299991, total time[s] 0.07028 +Converged at iteration 31, L1 7.74494e-05, Linf 0.00994276, total time[s] 0.086179 +Converged at iteration 31, L1 5.74939e-05, Linf 0.00250582, total time[s] 0.080451 +Converged at iteration 32, L1 9.71626e-05, Linf 0.00415726, total time[s] 0.082897 +Converged at iteration 31, L1 4.38976e-05, Linf 0.00418756, total time[s] 0.081562 +Converged at iteration 32, L1 6.41635e-05, Linf 0.0135771, total time[s] 0.083004 +Converged at iteration 29, L1 9.50085e-05, Linf 0.0153526, total time[s] 0.075975 +Converged at iteration 25, L1 6.32057e-05, Linf 0.00307303, total time[s] 0.066208 +Converged at iteration 37, L1 8.96939e-05, Linf 0.0118247, total time[s] 0.097012 +Converged at iteration 35, L1 6.41919e-05, Linf 0.0076723, total time[s] 0.091256 +Converged at iteration 25, L1 7.74074e-05, Linf 0.00365418, total time[s] 0.067715 +Converged at iteration 25, L1 7.01478e-05, Linf 0.00667677, total time[s] 0.067102 +Converged at iteration 25, L1 6.32092e-05, Linf 0.0149103, total time[s] 0.068204 +Converged at iteration 26, L1 4.78779e-05, Linf 0.0143843, total time[s] 0.06925 +Converged at iteration 21, L1 4.94629e-05, Linf 0.00764335, total time[s] 0.05689 +Converged at iteration 19, L1 4.48505e-05, Linf 0.00331336, total time[s] 0.051705 +Converged at iteration 23, L1 9.88128e-05, Linf 0.00300381, total time[s] 0.061598 +Converged at iteration 24, L1 7.51962e-05, Linf 0.00300197, total time[s] 0.065794 +Converged at iteration 21, L1 8.01223e-05, Linf 0.00380729, total time[s] 0.058898 +Converged at iteration 20, L1 7.35855e-05, Linf 0.00326728, total time[s] 0.067786 +Converged at iteration 32, L1 4.32877e-05, Linf 0.00866413, total time[s] 0.099861 +Converged at iteration 22, L1 7.16503e-05, Linf 0.00418438, total time[s] 0.064452 +Converged at iteration 24, L1 5.90126e-05, Linf 0.00480777, total time[s] 0.063967 +Converged at iteration 27, L1 4.46292e-05, Linf 0.00252343, total time[s] 0.071188 +Converged at iteration 24, L1 5.95393e-05, Linf 0.00409174, total time[s] 0.06414 +Converged at iteration 23, L1 9.90196e-05, Linf 0.00504895, total time[s] 0.061626 +Converged at iteration 26, L1 6.63909e-05, Linf 0.00425651, total time[s] 0.068613 +Converged at iteration 27, L1 6.84162e-05, Linf 0.00408241, total time[s] 0.073277 +Converged at iteration 27, L1 8.34095e-05, Linf 0.00651798, total time[s] 0.071745 +Converged at iteration 32, L1 7.73261e-05, Linf 0.00483722, total time[s] 0.082919 +Converged at iteration 27, L1 6.24046e-05, Linf 0.00193283, total time[s] 0.097557 +Converged at iteration 31, L1 7.72361e-05, Linf 0.0100114, total time[s] 0.093922 +Converged at iteration 31, L1 5.86614e-05, Linf 0.002466, total time[s] 0.101501 +Converged at iteration 32, L1 9.88426e-05, Linf 0.00422276, total time[s] 0.091884 +Converged at iteration 31, L1 4.41836e-05, Linf 0.00428167, total time[s] 0.090358 +Converged at iteration 32, L1 6.64102e-05, Linf 0.0139505, total time[s] 0.105224 +Converged at iteration 29, L1 9.61434e-05, Linf 0.0153609, total time[s] 0.0894 +Converged at iteration 25, L1 6.35903e-05, Linf 0.00310008, total time[s] 0.079006 +Converged at iteration 37, L1 9.28995e-05, Linf 0.0115588, total time[s] 0.109842 +Converged at iteration 35, L1 6.87486e-05, Linf 0.00824617, total time[s] 0.108327 +Converged at iteration 25, L1 7.85535e-05, Linf 0.00359842, total time[s] 0.06743 +Converged at iteration 25, L1 7.29601e-05, Linf 0.00645506, total time[s] 0.067788 +Converged at iteration 25, L1 6.11575e-05, Linf 0.0134424, total time[s] 0.068922 +Converged at iteration 26, L1 5.08845e-05, Linf 0.0150716, total time[s] 0.070802 +Converged at iteration 21, L1 5.03879e-05, Linf 0.00767801, total time[s] 0.061682 +Converged at iteration 18, L1 9.37916e-05, Linf 0.00603803, total time[s] 0.062019 +Converged at iteration 23, L1 9.68135e-05, Linf 0.00313166, total time[s] 0.097149 +Converged at iteration 24, L1 7.65496e-05, Linf 0.00305612, total time[s] 0.085802 +Converged at iteration 21, L1 8.26922e-05, Linf 0.00395304, total time[s] 0.063492 +Converged at iteration 20, L1 7.73851e-05, Linf 0.00345734, total time[s] 0.056705 +Converged at iteration 32, L1 4.54087e-05, Linf 0.00868294, total time[s] 0.092729 +Converged at iteration 22, L1 7.13785e-05, Linf 0.00438951, total time[s] 0.061127 +Converged at iteration 24, L1 5.71802e-05, Linf 0.00549216, total time[s] 0.066568 +Converged at iteration 26, L1 9.71983e-05, Linf 0.00523448, total time[s] 0.092152 +Converged at iteration 24, L1 5.82397e-05, Linf 0.0039822, total time[s] 0.070621 +Converged at iteration 23, L1 9.6279e-05, Linf 0.00499953, total time[s] 0.07791 +Converged at iteration 26, L1 7.01165e-05, Linf 0.00443634, total time[s] 0.079249 +Converged at iteration 27, L1 7.45663e-05, Linf 0.00435356, total time[s] 0.081992 +Converged at iteration 27, L1 8.37823e-05, Linf 0.00647272, total time[s] 0.076346 +Converged at iteration 32, L1 8.05668e-05, Linf 0.0049804, total time[s] 0.085712 +Converged at iteration 27, L1 6.92979e-05, Linf 0.00200992, total time[s] 0.073164 +Converged at iteration 31, L1 7.75667e-05, Linf 0.0101038, total time[s] 0.084855 +Converged at iteration 31, L1 5.84994e-05, Linf 0.00245817, total time[s] 0.082928 +Converged at iteration 33, L1 4.40492e-05, Linf 0.00219912, total time[s] 0.087569 +Converged at iteration 31, L1 4.59617e-05, Linf 0.00455137, total time[s] 0.085644 +Converged at iteration 32, L1 7.34073e-05, Linf 0.0150458, total time[s] 0.081561 +Converged at iteration 29, L1 9.52517e-05, Linf 0.0153495, total time[s] 0.080518 +Converged at iteration 25, L1 6.44843e-05, Linf 0.00320235, total time[s] 0.070447 +Converged at iteration 37, L1 9.32181e-05, Linf 0.0117539, total time[s] 0.098757 +Converged at iteration 35, L1 7.0392e-05, Linf 0.00844823, total time[s] 0.096417 +Converged at iteration 25, L1 7.85994e-05, Linf 0.0035844, total time[s] 0.065838 +Converged at iteration 25, L1 7.31185e-05, Linf 0.0063526, total time[s] 0.067225 +Converged at iteration 25, L1 5.80403e-05, Linf 0.0129396, total time[s] 0.066245 +Converged at iteration 26, L1 5.12882e-05, Linf 0.0147336, total time[s] 0.069561 +Converged at iteration 21, L1 5.02502e-05, Linf 0.00771164, total time[s] 0.079723 +Converged at iteration 18, L1 9.15677e-05, Linf 0.00618614, total time[s] 0.054171 +Converged at iteration 23, L1 9.66319e-05, Linf 0.00313137, total time[s] 0.07467 +Converged at iteration 24, L1 7.72638e-05, Linf 0.00307574, total time[s] 0.075291 +Converged at iteration 21, L1 8.42279e-05, Linf 0.00396736, total time[s] 0.071399 +Converged at iteration 20, L1 7.93514e-05, Linf 0.00358409, total time[s] 0.061902 +Converged at iteration 32, L1 4.59496e-05, Linf 0.00858041, total time[s] 0.097041 +Converged at iteration 22, L1 7.18874e-05, Linf 0.00434741, total time[s] 0.075852 +Converged at iteration 24, L1 5.7347e-05, Linf 0.0055942, total time[s] 0.069224 +Converged at iteration 26, L1 9.6003e-05, Linf 0.00520095, total time[s] 0.067983 +Converged at iteration 24, L1 5.71616e-05, Linf 0.00400116, total time[s] 0.064404 +Converged at iteration 23, L1 9.52952e-05, Linf 0.00495649, total time[s] 0.060397 +Converged at iteration 26, L1 7.02623e-05, Linf 0.00450169, total time[s] 0.071286 +Converged at iteration 27, L1 7.60169e-05, Linf 0.00446424, total time[s] 0.071278 +Converged at iteration 27, L1 8.40982e-05, Linf 0.00650177, total time[s] 0.069902 +Converged at iteration 32, L1 8.13596e-05, Linf 0.00502541, total time[s] 0.08391 +Converged at iteration 27, L1 7.12943e-05, Linf 0.00204964, total time[s] 0.071221 +Converged at iteration 31, L1 7.70938e-05, Linf 0.010101, total time[s] 0.079677 +Converged at iteration 31, L1 5.8276e-05, Linf 0.00244449, total time[s] 0.081082 +Converged at iteration 33, L1 4.51556e-05, Linf 0.00224444, total time[s] 0.085278 +Converged at iteration 31, L1 4.59853e-05, Linf 0.00464818, total time[s] 0.080161 +Converged at iteration 32, L1 7.50031e-05, Linf 0.0154219, total time[s] 0.082524 +Converged at iteration 29, L1 9.5064e-05, Linf 0.0154449, total time[s] 0.07555 +Converged at iteration 25, L1 6.4836e-05, Linf 0.00322823, total time[s] 0.065131 +Converged at iteration 37, L1 9.61305e-05, Linf 0.012011, total time[s] 0.098794 +Converged at iteration 35, L1 7.5181e-05, Linf 0.00905789, total time[s] 0.098302 +Converged at iteration 25, L1 7.92042e-05, Linf 0.00355383, total time[s] 0.066577 +Converged at iteration 25, L1 7.61525e-05, Linf 0.00625673, total time[s] 0.066556 +Converged at iteration 25, L1 5.53033e-05, Linf 0.0116793, total time[s] 0.121656 +Converged at iteration 26, L1 5.42962e-05, Linf 0.0151332, total time[s] 0.100862 +Converged at iteration 21, L1 5.13582e-05, Linf 0.00774623, total time[s] 0.062288 +Converged at iteration 18, L1 9.03673e-05, Linf 0.00666008, total time[s] 0.055411 +Converged at iteration 23, L1 9.58411e-05, Linf 0.00322989, total time[s] 0.070483 +Converged at iteration 24, L1 8.01038e-05, Linf 0.00313988, total time[s] 0.076615 +Converged at iteration 21, L1 8.66437e-05, Linf 0.00405729, total time[s] 0.070066 +Converged at iteration 20, L1 8.32011e-05, Linf 0.00369071, total time[s] 0.080994 +Converged at iteration 32, L1 4.77592e-05, Linf 0.00868893, total time[s] 0.096243 +Converged at iteration 22, L1 8.42617e-05, Linf 0.00481952, total time[s] 0.091275 +Converged at iteration 24, L1 6.01165e-05, Linf 0.00572876, total time[s] 0.067951 +Converged at iteration 26, L1 9.49071e-05, Linf 0.00502327, total time[s] 0.075611 +Converged at iteration 24, L1 5.5058e-05, Linf 0.00392346, total time[s] 0.065351 +Converged at iteration 23, L1 9.47592e-05, Linf 0.00578201, total time[s] 0.061265 +Converged at iteration 26, L1 7.51096e-05, Linf 0.00468331, total time[s] 0.067754 +Converged at iteration 27, L1 8.48413e-05, Linf 0.0047612, total time[s] 0.072433 +Converged at iteration 27, L1 8.6022e-05, Linf 0.00652487, total time[s] 0.071908 +Converged at iteration 32, L1 8.39027e-05, Linf 0.00516656, total time[s] 0.08284 +Converged at iteration 27, L1 7.81966e-05, Linf 0.0021107, total time[s] 0.071624 +Converged at iteration 31, L1 7.80046e-05, Linf 0.0101965, total time[s] 0.085193 +Converged at iteration 31, L1 5.67295e-05, Linf 0.00242599, total time[s] 0.083409 +Converged at iteration 33, L1 4.84342e-05, Linf 0.00241586, total time[s] 0.087187 +Converged at iteration 31, L1 4.80313e-05, Linf 0.00495227, total time[s] 0.085432 +Converged at iteration 32, L1 8.15796e-05, Linf 0.0165761, total time[s] 0.102774 +Converged at iteration 29, L1 9.58398e-05, Linf 0.0160446, total time[s] 0.082135 +Converged at iteration 25, L1 6.58604e-05, Linf 0.00319334, total time[s] 0.094864 +Converged at iteration 37, L1 9.75142e-05, Linf 0.0122409, total time[s] 0.129114 +Converged at iteration 35, L1 7.6977e-05, Linf 0.00926431, total time[s] 0.1179 +Converged at iteration 25, L1 7.88984e-05, Linf 0.00352335, total time[s] 0.107301 +Converged at iteration 25, L1 7.86969e-05, Linf 0.010627, total time[s] 0.074629 +Converged at iteration 25, L1 5.85002e-05, Linf 0.011292, total time[s] 0.088402 +Converged at iteration 26, L1 5.7647e-05, Linf 0.0152854, total time[s] 0.074341 +Converged at iteration 21, L1 5.04093e-05, Linf 0.00768574, total time[s] 0.061637 +Converged at iteration 18, L1 9.34177e-05, Linf 0.00639709, total time[s] 0.069443 +Converged at iteration 23, L1 9.43472e-05, Linf 0.00316304, total time[s] 0.084003 +Converged at iteration 24, L1 8.08786e-05, Linf 0.00317248, total time[s] 0.083633 +Converged at iteration 21, L1 8.74128e-05, Linf 0.0040469, total time[s] 0.069707 +Converged at iteration 20, L1 8.69932e-05, Linf 0.00375692, total time[s] 0.073365 +Converged at iteration 32, L1 4.84481e-05, Linf 0.00872528, total time[s] 0.111596 +Converged at iteration 22, L1 7.6098e-05, Linf 0.00453831, total time[s] 0.126395 +Converged at iteration 24, L1 5.92273e-05, Linf 0.00616378, total time[s] 0.072286 +Converged at iteration 26, L1 9.38766e-05, Linf 0.00495242, total time[s] 0.070633 +Converged at iteration 24, L1 5.44264e-05, Linf 0.00384753, total time[s] 0.076939 +Converged at iteration 23, L1 9.32438e-05, Linf 0.00483707, total time[s] 0.065958 +Converged at iteration 26, L1 7.64354e-05, Linf 0.00474289, total time[s] 0.076526 +Converged at iteration 27, L1 8.85138e-05, Linf 0.00487704, total time[s] 0.071218 +Converged at iteration 27, L1 8.58238e-05, Linf 0.00653426, total time[s] 0.071605 +Converged at iteration 32, L1 8.45129e-05, Linf 0.00520938, total time[s] 0.083605 +Converged at iteration 27, L1 7.99321e-05, Linf 0.00213256, total time[s] 0.071668 +Converged at iteration 31, L1 7.73699e-05, Linf 0.0103246, total time[s] 0.081401 +Converged at iteration 31, L1 5.69708e-05, Linf 0.00238776, total time[s] 0.082596 +Converged at iteration 33, L1 5.06739e-05, Linf 0.00247069, total time[s] 0.085923 +Converged at iteration 31, L1 4.90479e-05, Linf 0.00506986, total time[s] 0.102254 +Converged at iteration 32, L1 8.39428e-05, Linf 0.0169976, total time[s] 0.091456 +Converged at iteration 29, L1 9.56105e-05, Linf 0.0161392, total time[s] 0.084967 +Converged at iteration 25, L1 6.67049e-05, Linf 0.00315647, total time[s] 0.076635 +Converged at iteration 38, L1 3.32178e-05, Linf 0.0069363, total time[s] 0.128983 +Converged at iteration 35, L1 8.15895e-05, Linf 0.00985762, total time[s] 0.115634 +Converged at iteration 25, L1 7.94024e-05, Linf 0.00345853, total time[s] 0.071311 +Converged at iteration 25, L1 7.97433e-05, Linf 0.00608367, total time[s] 0.067367 +Converged at iteration 25, L1 5.28145e-05, Linf 0.0102881, total time[s] 0.067154 +Converged at iteration 26, L1 5.98134e-05, Linf 0.0158613, total time[s] 0.071036 +Converged at iteration 21, L1 4.88929e-05, Linf 0.0078952, total time[s] 0.067739 +Converged at iteration 19, L1 4.4528e-05, Linf 0.00403366, total time[s] 0.062355 +Converged at iteration 23, L1 9.415e-05, Linf 0.00324165, total time[s] 0.067237 +Converged at iteration 24, L1 8.29639e-05, Linf 0.00325235, total time[s] 0.077306 +Converged at iteration 21, L1 9.06371e-05, Linf 0.00419546, total time[s] 0.075394 +Converged at iteration 20, L1 8.88139e-05, Linf 0.00389151, total time[s] 0.057611 +Converged at iteration 32, L1 5.06836e-05, Linf 0.00855537, total time[s] 0.09734 +Converged at iteration 22, L1 8.42192e-05, Linf 0.0048015, total time[s] 0.068892 +Converged at iteration 24, L1 6.11152e-05, Linf 0.00970017, total time[s] 0.077386 +Converged at iteration 26, L1 9.16863e-05, Linf 0.00472592, total time[s] 0.070331 +Converged at iteration 24, L1 5.20321e-05, Linf 0.00354002, total time[s] 0.068193 +Converged at iteration 23, L1 9.26387e-05, Linf 0.00478299, total time[s] 0.064688 +Converged at iteration 26, L1 8.20675e-05, Linf 0.00494083, total time[s] 0.087369 +Converged at iteration 27, L1 9.60831e-05, Linf 0.00528618, total time[s] 0.080763 +Converged at iteration 27, L1 8.68929e-05, Linf 0.00657276, total time[s] 0.071661 +Converged at iteration 32, L1 8.70095e-05, Linf 0.00535139, total time[s] 0.084408 +Converged at iteration 27, L1 8.59976e-05, Linf 0.00222314, total time[s] 0.073926 +Converged at iteration 31, L1 7.81374e-05, Linf 0.0102975, total time[s] 0.08807 +Converged at iteration 31, L1 5.87542e-05, Linf 0.00245387, total time[s] 0.091344 +Converged at iteration 33, L1 5.38952e-05, Linf 0.00265356, total time[s] 0.087262 +Converged at iteration 31, L1 5.19329e-05, Linf 0.00539516, total time[s] 0.080725 +Converged at iteration 32, L1 9.13326e-05, Linf 0.0182972, total time[s] 0.087183 +Converged at iteration 29, L1 9.58634e-05, Linf 0.0165805, total time[s] 0.086037 +Converged at iteration 25, L1 6.65863e-05, Linf 0.00309574, total time[s] 0.06827 +Converged at iteration 38, L1 3.2844e-05, Linf 0.00704706, total time[s] 0.100952 +Converged at iteration 35, L1 8.33302e-05, Linf 0.0101083, total time[s] 0.100189 +Converged at iteration 25, L1 7.88567e-05, Linf 0.00342048, total time[s] 0.070869 +Converged at iteration 25, L1 8.00206e-05, Linf 0.00600917, total time[s] 0.068633 +Converged at iteration 25, L1 5.31266e-05, Linf 0.0099995, total time[s] 0.069686 +Converged at iteration 26, L1 6.08027e-05, Linf 0.0165612, total time[s] 0.071018 +Converged at iteration 21, L1 4.80798e-05, Linf 0.00782397, total time[s] 0.073343 +Converged at iteration 19, L1 4.83256e-05, Linf 0.00406806, total time[s] 0.059585 +Converged at iteration 23, L1 9.23028e-05, Linf 0.00322664, total time[s] 0.069685 +Converged at iteration 24, L1 8.3942e-05, Linf 0.0032746, total time[s] 0.082471 +Converged at iteration 21, L1 9.15684e-05, Linf 0.00421919, total time[s] 0.07046 +Converged at iteration 20, L1 9.19771e-05, Linf 0.00394065, total time[s] 0.073666 +Converged at iteration 32, L1 5.13116e-05, Linf 0.00870403, total time[s] 0.114917 +Converged at iteration 22, L1 7.65846e-05, Linf 0.00474481, total time[s] 0.069698 +Converged at iteration 24, L1 5.88179e-05, Linf 0.00413321, total time[s] 0.085226 +Converged at iteration 26, L1 9.33557e-05, Linf 0.00469634, total time[s] 0.091777 +Converged at iteration 24, L1 5.24018e-05, Linf 0.00341504, total time[s] 0.096328 +Converged at iteration 23, L1 9.36441e-05, Linf 0.00472042, total time[s] 0.080819 +Converged at iteration 26, L1 9.28159e-05, Linf 0.00500217, total time[s] 0.088997 +Converged at iteration 27, L1 9.9241e-05, Linf 0.00534669, total time[s] 0.083463 +Converged at iteration 27, L1 8.72439e-05, Linf 0.00655085, total time[s] 0.071802 +Converged at iteration 32, L1 8.80622e-05, Linf 0.00538837, total time[s] 0.083688 +Converged at iteration 27, L1 8.84844e-05, Linf 0.00223808, total time[s] 0.074835 +Converged at iteration 31, L1 7.79029e-05, Linf 0.0102993, total time[s] 0.101801 +Converged at iteration 31, L1 5.99856e-05, Linf 0.00245077, total time[s] 0.092718 +Converged at iteration 33, L1 5.49865e-05, Linf 0.00270004, total time[s] 0.112724 +Converged at iteration 31, L1 5.54201e-05, Linf 0.00551372, total time[s] 0.08195 +Converged at iteration 33, L1 9.83173e-05, Linf 0.00734155, total time[s] 0.106664 +Converged at iteration 29, L1 9.60065e-05, Linf 0.0166413, total time[s] 0.077907 +Converged at iteration 25, L1 6.68097e-05, Linf 0.00305613, total time[s] 0.126199 +Converged at iteration 38, L1 3.35274e-05, Linf 0.00727794, total time[s] 0.132144 +Converged at iteration 35, L1 8.80861e-05, Linf 0.0106953, total time[s] 0.105625 +Converged at iteration 25, L1 8.10413e-05, Linf 0.00345339, total time[s] 0.070722 +Converged at iteration 25, L1 8.4852e-05, Linf 0.0059864, total time[s] 0.064468 +Converged at iteration 25, L1 5.5404e-05, Linf 0.00934332, total time[s] 0.07486 +Converged at iteration 26, L1 8.65988e-05, Linf 0.0166762, total time[s] 0.104002 +Converged at iteration 21, L1 4.87442e-05, Linf 0.00784959, total time[s] 0.078531 +Converged at iteration 19, L1 5.3902e-05, Linf 0.00425483, total time[s] 0.088848 +Converged at iteration 23, L1 9.08047e-05, Linf 0.00319291, total time[s] 0.078492 +Converged at iteration 24, L1 8.57599e-05, Linf 0.00330365, total time[s] 0.094228 +Converged at iteration 21, L1 9.40898e-05, Linf 0.00432211, total time[s] 0.07448 +Converged at iteration 20, L1 9.37416e-05, Linf 0.00406093, total time[s] 0.053403 +Converged at iteration 32, L1 5.4101e-05, Linf 0.00876955, total time[s] 0.101149 +Converged at iteration 22, L1 7.98692e-05, Linf 0.00487454, total time[s] 0.06213 +Converged at iteration 24, L1 5.94735e-05, Linf 0.00538767, total time[s] 0.063997 +Converged at iteration 26, L1 8.95443e-05, Linf 0.00456547, total time[s] 0.067575 +Converged at iteration 24, L1 5.04175e-05, Linf 0.00313927, total time[s] 0.063998 +Converged at iteration 23, L1 9.16278e-05, Linf 0.0046468, total time[s] 0.062105 +Converged at iteration 26, L1 8.67227e-05, Linf 0.00518753, total time[s] 0.069339 +Converged at iteration 28, L1 5.58089e-05, Linf 0.0033724, total time[s] 0.0752 +Converged at iteration 27, L1 8.86869e-05, Linf 0.00658406, total time[s] 0.072039 +Converged at iteration 32, L1 8.93506e-05, Linf 0.0054955, total time[s] 0.083848 +Converged at iteration 27, L1 9.33894e-05, Linf 0.00231392, total time[s] 0.081807 +Converged at iteration 31, L1 7.99643e-05, Linf 0.0103026, total time[s] 0.125445 +Converged at iteration 31, L1 6.09741e-05, Linf 0.00242689, total time[s] 0.101531 +Converged at iteration 33, L1 5.95608e-05, Linf 0.00285231, total time[s] 0.10029 +Converged at iteration 31, L1 5.75313e-05, Linf 0.0058381, total time[s] 0.094022 +Converged at iteration 33, L1 4.0463e-05, Linf 0.00819351, total time[s] 0.091962 +Converged at iteration 29, L1 9.47283e-05, Linf 0.0169366, total time[s] 0.075498 +Converged at iteration 25, L1 6.7614e-05, Linf 0.00303725, total time[s] 0.068655 +Converged at iteration 38, L1 3.32998e-05, Linf 0.00743573, total time[s] 0.104929 +Converged at iteration 35, L1 8.95353e-05, Linf 0.010924, total time[s] 0.137481 +Converged at iteration 25, L1 7.96185e-05, Linf 0.00331527, total time[s] 0.134136 +Converged at iteration 25, L1 8.72156e-05, Linf 0.0108751, total time[s] 0.178206 +Converged at iteration 25, L1 5.14682e-05, Linf 0.00911752, total time[s] 0.181478 +Converged at iteration 26, L1 6.56732e-05, Linf 0.016936, total time[s] 0.146588 +Converged at iteration 21, L1 4.74558e-05, Linf 0.00779846, total time[s] 0.145671 +Converged at iteration 19, L1 5.74816e-05, Linf 0.00429282, total time[s] 0.116673 +Converged at iteration 23, L1 8.95479e-05, Linf 0.00320644, total time[s] 0.074868 +Converged at iteration 24, L1 8.70978e-05, Linf 0.00328922, total time[s] 0.081322 +Converged at iteration 21, L1 9.47846e-05, Linf 0.00434656, total time[s] 0.067111 +Converged at iteration 20, L1 9.55651e-05, Linf 0.00411329, total time[s] 0.055557 +Converged at iteration 32, L1 5.48176e-05, Linf 0.00873521, total time[s] 0.087655 +Converged at iteration 22, L1 8.08011e-05, Linf 0.00493562, total time[s] 0.064943 +Converged at iteration 24, L1 6.1785e-05, Linf 0.00574789, total time[s] 0.06413 +Converged at iteration 26, L1 8.96208e-05, Linf 0.00452853, total time[s] 0.074695 +Converged at iteration 24, L1 5.02012e-05, Linf 0.00302767, total time[s] 0.064883 +Converged at iteration 23, L1 9.12327e-05, Linf 0.00457226, total time[s] 0.061982 +Converged at iteration 26, L1 8.82562e-05, Linf 0.00526134, total time[s] 0.070569 +Converged at iteration 28, L1 5.69351e-05, Linf 0.00342091, total time[s] 0.073755 +Converged at iteration 27, L1 8.88672e-05, Linf 0.00662357, total time[s] 0.072181 +Converged at iteration 32, L1 8.99322e-05, Linf 0.00552905, total time[s] 0.090151 +Converged at iteration 27, L1 9.53143e-05, Linf 0.00230427, total time[s] 0.08116 +Converged at iteration 31, L1 7.86738e-05, Linf 0.0103986, total time[s] 0.084902 +Converged at iteration 31, L1 5.8192e-05, Linf 0.00242241, total time[s] 0.090929 +Converged at iteration 33, L1 5.8491e-05, Linf 0.0028947, total time[s] 0.090521 +Converged at iteration 31, L1 5.83609e-05, Linf 0.00597265, total time[s] 0.092234 +Converged at iteration 33, L1 4.13486e-05, Linf 0.00842407, total time[s] 0.108841 +Converged at iteration 29, L1 9.47052e-05, Linf 0.01696, total time[s] 0.109081 +Converged at iteration 25, L1 6.85403e-05, Linf 0.00302894, total time[s] 0.085661 +Converged at iteration 38, L1 3.32966e-05, Linf 0.00765691, total time[s] 0.126253 +Converged at iteration 36, L1 4.4211e-05, Linf 0.00553671, total time[s] 0.129422 +Converged at iteration 25, L1 7.91911e-05, Linf 0.00322783, total time[s] 0.067374 +Converged at iteration 25, L1 8.78298e-05, Linf 0.00599489, total time[s] 0.065779 +Converged at iteration 25, L1 4.99615e-05, Linf 0.00879695, total time[s] 0.067912 +Converged at iteration 26, L1 6.98805e-05, Linf 0.0179505, total time[s] 0.076011 +Converged at iteration 21, L1 4.77822e-05, Linf 0.00807201, total time[s] 0.061052 +Converged at iteration 19, L1 6.37132e-05, Linf 0.00440854, total time[s] 0.068509 +Converged at iteration 23, L1 8.94346e-05, Linf 0.00322385, total time[s] 0.065974 +Converged at iteration 24, L1 8.85273e-05, Linf 0.00327396, total time[s] 0.07082 +Converged at iteration 21, L1 9.69011e-05, Linf 0.00444011, total time[s] 0.062876 +Converged at iteration 21, L1 4.74197e-05, Linf 0.00222915, total time[s] 0.074049 +Converged at iteration 32, L1 5.73466e-05, Linf 0.00876303, total time[s] 0.13067 +Converged at iteration 22, L1 9.48483e-05, Linf 0.0064658, total time[s] 0.085933 +Converged at iteration 24, L1 6.36002e-05, Linf 0.00474281, total time[s] 0.073915 +Converged at iteration 26, L1 8.75249e-05, Linf 0.00440947, total time[s] 0.071699 +Converged at iteration 24, L1 4.90089e-05, Linf 0.00280308, total time[s] 0.065237 +Converged at iteration 23, L1 9.02798e-05, Linf 0.00439823, total time[s] 0.061971 +Converged at iteration 26, L1 9.06223e-05, Linf 0.00541122, total time[s] 0.068244 +Converged at iteration 28, L1 6.22153e-05, Linf 0.00367673, total time[s] 0.074742 +Converged at iteration 27, L1 9.10288e-05, Linf 0.00663354, total time[s] 0.074935 +Converged at iteration 32, L1 9.13799e-05, Linf 0.00560628, total time[s] 0.087725 +Converged at iteration 28, L1 5.96061e-05, Linf 0.00178492, total time[s] 0.079215 +Converged at iteration 31, L1 8.2028e-05, Linf 0.0105364, total time[s] 0.083069 +Converged at iteration 31, L1 6.47617e-05, Linf 0.0024522, total time[s] 0.080832 +Converged at iteration 33, L1 6.19128e-05, Linf 0.00303172, total time[s] 0.084137 +Converged at iteration 31, L1 6.23464e-05, Linf 0.0062786, total time[s] 0.079775 +Converged at iteration 33, L1 4.46174e-05, Linf 0.00930603, total time[s] 0.090333 +Converged at iteration 29, L1 9.89449e-05, Linf 0.0171094, total time[s] 0.085152 +Converged at iteration 25, L1 6.99618e-05, Linf 0.00302317, total time[s] 0.076741 +Converged at iteration 38, L1 3.36087e-05, Linf 0.00774792, total time[s] 0.144024 +Converged at iteration 35, L1 9.62195e-05, Linf 0.0116799, total time[s] 0.133442 +Converged at iteration 25, L1 7.84269e-05, Linf 0.00319374, total time[s] 0.085779 +Converged at iteration 25, L1 8.88717e-05, Linf 0.00596801, total time[s] 0.079504 +Converged at iteration 25, L1 4.95405e-05, Linf 0.00847752, total time[s] 0.104007 +Converged at iteration 26, L1 7.11775e-05, Linf 0.0179334, total time[s] 0.100346 +Converged at iteration 21, L1 4.83802e-05, Linf 0.00797331, total time[s] 0.094833 +Converged at iteration 19, L1 6.62374e-05, Linf 0.00448474, total time[s] 0.065457 +Converged at iteration 23, L1 8.79818e-05, Linf 0.00315576, total time[s] 0.08438 +Converged at iteration 24, L1 8.89796e-05, Linf 0.00326497, total time[s] 0.082051 +Converged at iteration 21, L1 9.76491e-05, Linf 0.00447413, total time[s] 0.073427 +Converged at iteration 21, L1 4.70734e-05, Linf 0.00220668, total time[s] 0.056795 +Converged at iteration 32, L1 5.82266e-05, Linf 0.0087736, total time[s] 0.10518 +Converged at iteration 22, L1 8.23093e-05, Linf 0.00513208, total time[s] 0.062842 +Converged at iteration 24, L1 6.09074e-05, Linf 0.00476662, total time[s] 0.071912 +Converged at iteration 26, L1 8.72695e-05, Linf 0.00441048, total time[s] 0.090007 +Converged at iteration 24, L1 4.81795e-05, Linf 0.00268826, total time[s] 0.067318 +Converged at iteration 23, L1 8.94303e-05, Linf 0.00428057, total time[s] 0.069989 +Converged at iteration 26, L1 9.12394e-05, Linf 0.0054671, total time[s] 0.076561 +Converged at iteration 28, L1 6.401e-05, Linf 0.00376007, total time[s] 0.078515 +Converged at iteration 27, L1 9.10346e-05, Linf 0.00665601, total time[s] 0.071318 +Converged at iteration 32, L1 9.18441e-05, Linf 0.00563688, total time[s] 0.084255 +Converged at iteration 28, L1 6.03752e-05, Linf 0.00180153, total time[s] 0.089801 +Converged at iteration 31, L1 8.03644e-05, Linf 0.0104812, total time[s] 0.089688 +Converged at iteration 31, L1 5.8886e-05, Linf 0.00245277, total time[s] 0.099213 +Converged at iteration 33, L1 6.27061e-05, Linf 0.00308227, total time[s] 0.107572 +Converged at iteration 31, L1 6.3904e-05, Linf 0.00647224, total time[s] 0.102915 +Converged at iteration 33, L1 4.43647e-05, Linf 0.00918542, total time[s] 0.111185 +Converged at iteration 29, L1 9.42255e-05, Linf 0.0171269, total time[s] 0.091085 +Converged at iteration 25, L1 6.80766e-05, Linf 0.00303448, total time[s] 0.071895 +Converged at iteration 38, L1 3.39137e-05, Linf 0.00795417, total time[s] 0.101121 +Converged at iteration 35, L1 9.98385e-05, Linf 0.0122723, total time[s] 0.098304 +Converged at iteration 25, L1 7.70589e-05, Linf 0.00310778, total time[s] 0.06746 +Converged at iteration 25, L1 9.43661e-05, Linf 0.00608683, total time[s] 0.067803 +Converged at iteration 25, L1 4.91572e-05, Linf 0.00831316, total time[s] 0.066532 +Converged at iteration 26, L1 7.60147e-05, Linf 0.0188489, total time[s] 0.073048 +Converged at iteration 21, L1 4.8198e-05, Linf 0.0080285, total time[s] 0.075017 +Converged at iteration 19, L1 6.94679e-05, Linf 0.00463858, total time[s] 0.094188 +Converged at iteration 23, L1 8.59105e-05, Linf 0.00273939, total time[s] 0.114573 +Converged at iteration 24, L1 9.1052e-05, Linf 0.00301585, total time[s] 0.113013 +Converged at iteration 21, L1 9.91206e-05, Linf 0.00445741, total time[s] 0.104786 +Converged at iteration 21, L1 4.90004e-05, Linf 0.00227323, total time[s] 0.063059 +Converged at iteration 32, L1 6.12434e-05, Linf 0.00865102, total time[s] 0.084322 +Converged at iteration 22, L1 9.05096e-05, Linf 0.00528968, total time[s] 0.062518 +Converged at iteration 24, L1 6.16361e-05, Linf 0.00484084, total time[s] 0.068688 +Converged at iteration 26, L1 8.58516e-05, Linf 0.00433833, total time[s] 0.075003 +Converged at iteration 23, L1 9.84189e-05, Linf 0.00402542, total time[s] 0.072159 +Converged at iteration 23, L1 8.59956e-05, Linf 0.00397634, total time[s] 0.062486 +Converged at iteration 26, L1 9.22991e-05, Linf 0.00564963, total time[s] 0.07749 +Converged at iteration 28, L1 7.29345e-05, Linf 0.00401441, total time[s] 0.083313 +Converged at iteration 27, L1 9.16583e-05, Linf 0.00671623, total time[s] 0.072219 +Converged at iteration 32, L1 9.67978e-05, Linf 0.00571747, total time[s] 0.090745 +Converged at iteration 28, L1 6.44446e-05, Linf 0.00184999, total time[s] 0.083139 +Converged at iteration 31, L1 7.90229e-05, Linf 0.0105706, total time[s] 0.08437 +Converged at iteration 31, L1 5.94407e-05, Linf 0.00249401, total time[s] 0.085746 +Converged at iteration 33, L1 6.5509e-05, Linf 0.0032346, total time[s] 0.08614 +Converged at iteration 31, L1 6.97479e-05, Linf 0.00684108, total time[s] 0.082193 +Converged at iteration 33, L1 4.72844e-05, Linf 0.0100575, total time[s] 0.085726 +Converged at iteration 29, L1 9.38459e-05, Linf 0.0172713, total time[s] 0.079341 +Converged at iteration 25, L1 6.89693e-05, Linf 0.00308633, total time[s] 0.06961 +Converged at iteration 38, L1 3.40659e-05, Linf 0.00801043, total time[s] 0.104338 +Converged at iteration 36, L1 3.43828e-05, Linf 0.00634766, total time[s] 0.102641 +Converged at iteration 25, L1 7.66947e-05, Linf 0.00309337, total time[s] 0.066167 +Converged at iteration 25, L1 9.55552e-05, Linf 0.00608695, total time[s] 0.105003 +Converged at iteration 25, L1 4.93977e-05, Linf 0.00797806, total time[s] 0.068249 +Converged at iteration 26, L1 7.79349e-05, Linf 0.0198221, total time[s] 0.074501 +Converged at iteration 21, L1 4.84931e-05, Linf 0.00806387, total time[s] 0.118606 +Converged at iteration 19, L1 7.23191e-05, Linf 0.0046998, total time[s] 0.113142 +Converged at iteration 23, L1 8.46155e-05, Linf 0.00275077, total time[s] 0.1556 +Converged at iteration 24, L1 9.23428e-05, Linf 0.00304057, total time[s] 0.141094 +Converged at iteration 21, L1 9.9979e-05, Linf 0.00440728, total time[s] 0.077003 +Converged at iteration 21, L1 4.98769e-05, Linf 0.00230078, total time[s] 0.109091 +Converged at iteration 32, L1 6.24163e-05, Linf 0.00866216, total time[s] 0.106499 +Converged at iteration 22, L1 8.92935e-05, Linf 0.00535118, total time[s] 0.065142 +Converged at iteration 24, L1 6.16972e-05, Linf 0.00486316, total time[s] 0.071821 +Converged at iteration 26, L1 8.62121e-05, Linf 0.00433948, total time[s] 0.073202 +Converged at iteration 23, L1 9.70546e-05, Linf 0.00391755, total time[s] 0.065864 +Converged at iteration 23, L1 8.50122e-05, Linf 0.0058845, total time[s] 0.071494 +Converged at iteration 26, L1 9.32844e-05, Linf 0.00570576, total time[s] 0.074201 +Converged at iteration 28, L1 7.2312e-05, Linf 0.0040886, total time[s] 0.075206 +Converged at iteration 27, L1 9.24974e-05, Linf 0.00673871, total time[s] 0.072486 +Converged at iteration 32, L1 9.28818e-05, Linf 0.00574444, total time[s] 0.084954 +Converged at iteration 28, L1 6.55042e-05, Linf 0.00187141, total time[s] 0.075956 +Converged at iteration 31, L1 7.89062e-05, Linf 0.0106284, total time[s] 0.082632 +Converged at iteration 31, L1 5.98341e-05, Linf 0.00250417, total time[s] 0.090094 +Converged at iteration 33, L1 6.85732e-05, Linf 0.00327683, total time[s] 0.086242 +Converged at iteration 31, L1 7.1171e-05, Linf 0.00702351, total time[s] 0.08332 +Converged at iteration 33, L1 4.82728e-05, Linf 0.0103389, total time[s] 0.089299 +Converged at iteration 29, L1 9.33171e-05, Linf 0.0172717, total time[s] 0.077819 +Converged at iteration 25, L1 6.90619e-05, Linf 0.00310504, total time[s] 0.070143 +Converged at iteration 38, L1 3.4315e-05, Linf 0.0083398, total time[s] 0.116843 +Converged at iteration 36, L1 3.54815e-05, Linf 0.00664796, total time[s] 0.11245 +Converged at iteration 25, L1 7.66257e-05, Linf 0.00308682, total time[s] 0.075197 +Converged at iteration 25, L1 9.98296e-05, Linf 0.00620485, total time[s] 0.066963 +Converged at iteration 25, L1 4.99381e-05, Linf 0.00775552, total time[s] 0.075041 +Converged at iteration 27, L1 5.73902e-05, Linf 0.0071714, total time[s] 0.074851 +Converged at iteration 21, L1 4.86113e-05, Linf 0.00810893, total time[s] 0.063161 +Converged at iteration 19, L1 7.98638e-05, Linf 0.00484063, total time[s] 0.067544 +Converged at iteration 23, L1 8.34942e-05, Linf 0.00272623, total time[s] 0.081744 +Converged at iteration 24, L1 9.36288e-05, Linf 0.00307351, total time[s] 0.066335 +Converged at iteration 22, L1 5.18708e-05, Linf 0.00240073, total time[s] 0.070326 +Converged at iteration 21, L1 5.08141e-05, Linf 0.00235994, total time[s] 0.072571 +Converged at iteration 32, L1 6.49145e-05, Linf 0.00881784, total time[s] 0.106728 +Converged at iteration 22, L1 8.75877e-05, Linf 0.00547414, total time[s] 0.064797 +Converged at iteration 24, L1 6.23778e-05, Linf 0.00492357, total time[s] 0.074048 +Converged at iteration 26, L1 8.44486e-05, Linf 0.00428744, total time[s] 0.07285 +Converged at iteration 23, L1 9.40058e-05, Linf 0.00367408, total time[s] 0.063381 +Converged at iteration 23, L1 8.0539e-05, Linf 0.0036503, total time[s] 0.070555 +Converged at iteration 26, L1 9.69258e-05, Linf 0.00585203, total time[s] 0.071409 +Converged at iteration 28, L1 7.44233e-05, Linf 0.00436375, total time[s] 0.074374 +Converged at iteration 27, L1 9.38906e-05, Linf 0.00680347, total time[s] 0.072561 +Converged at iteration 32, L1 9.3028e-05, Linf 0.00579288, total time[s] 0.084841 +Converged at iteration 28, L1 6.89045e-05, Linf 0.00193137, total time[s] 0.082704 +Converged at iteration 31, L1 7.96575e-05, Linf 0.0105304, total time[s] 0.086992 +Converged at iteration 31, L1 5.93774e-05, Linf 0.00251849, total time[s] 0.089267 +Converged at iteration 33, L1 6.84109e-05, Linf 0.00340415, total time[s] 0.089597 +Converged at iteration 31, L1 7.56177e-05, Linf 0.00738797, total time[s] 0.089224 +Converged at iteration 33, L1 5.08607e-05, Linf 0.0110389, total time[s] 0.097169 +Converged at iteration 29, L1 9.30461e-05, Linf 0.0173273, total time[s] 0.081609 +Converged at iteration 25, L1 7.10171e-05, Linf 0.00311795, total time[s] 0.067899 +Converged at iteration 38, L1 3.45157e-05, Linf 0.00829641, total time[s] 0.103378 +Converged at iteration 36, L1 3.61001e-05, Linf 0.00677686, total time[s] 0.102507 +Converged at iteration 25, L1 7.70275e-05, Linf 0.00308952, total time[s] 0.076865 +Converged at iteration 26, L1 4.39658e-05, Linf 0.00318678, total time[s] 0.07562 +Converged at iteration 25, L1 4.92008e-05, Linf 0.0076762, total time[s] 0.068075 +Converged at iteration 26, L1 8.51602e-05, Linf 0.0204252, total time[s] 0.079559 +Converged at iteration 21, L1 4.88372e-05, Linf 0.00814135, total time[s] 0.068164 +Converged at iteration 19, L1 8.30446e-05, Linf 0.00487397, total time[s] 0.0636 +Converged at iteration 23, L1 8.27951e-05, Linf 0.00274315, total time[s] 0.084558 +Converged at iteration 24, L1 9.43521e-05, Linf 0.00308585, total time[s] 0.090129 +Converged at iteration 22, L1 5.22715e-05, Linf 0.00240024, total time[s] 0.075203 +Converged at iteration 21, L1 5.09026e-05, Linf 0.00238307, total time[s] 0.073811 +Converged at iteration 32, L1 6.59717e-05, Linf 0.00867201, total time[s] 0.09252 +Converged at iteration 22, L1 9.6545e-05, Linf 0.00552809, total time[s] 0.089779 +Converged at iteration 24, L1 6.3167e-05, Linf 0.00493813, total time[s] 0.071112 +Converged at iteration 26, L1 8.47345e-05, Linf 0.00429044, total time[s] 0.066941 +Converged at iteration 23, L1 9.27474e-05, Linf 0.00357121, total time[s] 0.066566 +Converged at iteration 23, L1 8.02045e-05, Linf 0.0035629, total time[s] 0.057083 +Converged at iteration 26, L1 9.81606e-05, Linf 0.00591335, total time[s] 0.067315 +Converged at iteration 28, L1 7.58566e-05, Linf 0.00444906, total time[s] 0.0826 +Converged at iteration 27, L1 9.54714e-05, Linf 0.00683097, total time[s] 0.068054 +Converged at iteration 32, L1 9.34022e-05, Linf 0.00581877, total time[s] 0.080331 +Converged at iteration 28, L1 7.03147e-05, Linf 0.00194929, total time[s] 0.070618 +Converged at iteration 31, L1 8.35024e-05, Linf 0.0106956, total time[s] 0.077057 +Converged at iteration 31, L1 6.30261e-05, Linf 0.00251312, total time[s] 0.077419 +Converged at iteration 33, L1 7.07448e-05, Linf 0.00344269, total time[s] 0.085659 +Converged at iteration 31, L1 7.84937e-05, Linf 0.00754375, total time[s] 0.086618 +Converged at iteration 33, L1 5.22898e-05, Linf 0.0113776, total time[s] 0.087238 +Converged at iteration 29, L1 9.54725e-05, Linf 0.017286, total time[s] 0.075207 +Converged at iteration 25, L1 7.28842e-05, Linf 0.00310552, total time[s] 0.067914 +Converged at iteration 38, L1 3.62653e-05, Linf 0.00851884, total time[s] 0.098114 +Converged at iteration 36, L1 3.71918e-05, Linf 0.00704462, total time[s] 0.103955 +Converged at iteration 25, L1 7.73904e-05, Linf 0.00307522, total time[s] 0.069934 +Converged at iteration 26, L1 4.67732e-05, Linf 0.00333122, total time[s] 0.08335 +Converged at iteration 25, L1 4.95271e-05, Linf 0.00774517, total time[s] 0.073787 +Converged at iteration 26, L1 8.95056e-05, Linf 0.0213214, total time[s] 0.073689 +Converged at iteration 21, L1 4.94515e-05, Linf 0.00818659, total time[s] 0.08739 +Converged at iteration 19, L1 8.76911e-05, Linf 0.00498285, total time[s] 0.101099 +Converged at iteration 23, L1 8.20683e-05, Linf 0.00270065, total time[s] 0.14127 +Converged at iteration 24, L1 9.57297e-05, Linf 0.00311007, total time[s] 0.150414 +Converged at iteration 22, L1 5.28333e-05, Linf 0.00235974, total time[s] 0.119854 +Converged at iteration 21, L1 5.18689e-05, Linf 0.00242225, total time[s] 0.103777 +Converged at iteration 32, L1 6.86566e-05, Linf 0.00887656, total time[s] 0.272968 +Converged at iteration 22, L1 9.52186e-05, Linf 0.00564998, total time[s] 0.115778 +Converged at iteration 24, L1 6.40593e-05, Linf 0.00498155, total time[s] 0.139254 +Converged at iteration 26, L1 8.32864e-05, Linf 0.00424833, total time[s] 0.101242 +Converged at iteration 23, L1 9.00329e-05, Linf 0.00337631, total time[s] 0.077979 +Converged at iteration 23, L1 8.1976e-05, Linf 0.00344382, total time[s] 0.068227 +Converged at iteration 27, L1 4.70435e-05, Linf 0.00313708, total time[s] 0.080151 +Converged at iteration 28, L1 7.94578e-05, Linf 0.00467623, total time[s] 0.094205 +Converged at iteration 27, L1 9.5583e-05, Linf 0.00690302, total time[s] 0.072993 +Converged at iteration 32, L1 9.2957e-05, Linf 0.00585201, total time[s] 0.115435 +Converged at iteration 28, L1 7.31768e-05, Linf 0.00198807, total time[s] 0.10908 +Converged at iteration 31, L1 8.08184e-05, Linf 0.0107667, total time[s] 0.126823 +Converged at iteration 31, L1 6.33396e-05, Linf 0.00254017, total time[s] 0.084847 +Converged at iteration 33, L1 7.13114e-05, Linf 0.00355635, total time[s] 0.117409 +Converged at iteration 31, L1 8.1685e-05, Linf 0.00789433, total time[s] 0.088679 +Converged at iteration 33, L1 5.44853e-05, Linf 0.0120377, total time[s] 0.133076 +Converged at iteration 29, L1 9.25989e-05, Linf 0.0172658, total time[s] 0.08402 +Converged at iteration 25, L1 7.16185e-05, Linf 0.00306319, total time[s] 0.098104 +Converged at iteration 38, L1 3.61869e-05, Linf 0.00861173, total time[s] 0.125084 +Converged at iteration 36, L1 6.72914e-05, Linf 0.00726737, total time[s] 0.118484 +Converged at iteration 25, L1 7.71215e-05, Linf 0.00306858, total time[s] 0.080581 +Converged at iteration 26, L1 4.85184e-05, Linf 0.00340364, total time[s] 0.08088 +Converged at iteration 25, L1 5.11189e-05, Linf 0.00749107, total time[s] 0.072148 +Converged at iteration 26, L1 9.21186e-05, Linf 0.0216997, total time[s] 0.070701 +Converged at iteration 21, L1 5.06393e-05, Linf 0.00821388, total time[s] 0.059142 +Converged at iteration 19, L1 9.09746e-05, Linf 0.00501699, total time[s] 0.053716 +Converged at iteration 23, L1 8.09398e-05, Linf 0.00266398, total time[s] 0.066196 +Converged at iteration 24, L1 9.72133e-05, Linf 0.00311459, total time[s] 0.069115 +Converged at iteration 22, L1 5.27394e-05, Linf 0.00234921, total time[s] 0.073234 +Converged at iteration 21, L1 5.28265e-05, Linf 0.00248414, total time[s] 0.068575 +Converged at iteration 32, L1 7.74999e-05, Linf 0.00884351, total time[s] 0.086324 +Converged at iteration 22, L1 9.17789e-05, Linf 0.00569016, total time[s] 0.076248 +Converged at iteration 24, L1 6.46725e-05, Linf 0.0049968, total time[s] 0.097683 +Converged at iteration 26, L1 8.35402e-05, Linf 0.00425169, total time[s] 0.076276 +Converged at iteration 23, L1 9.03478e-05, Linf 0.00443972, total time[s] 0.07028 +Converged at iteration 23, L1 8.17923e-05, Linf 0.00336119, total time[s] 0.07861 +Converged at iteration 27, L1 4.97676e-05, Linf 0.00316985, total time[s] 0.086625 +Converged at iteration 28, L1 7.9953e-05, Linf 0.00477838, total time[s] 0.085478 +Converged at iteration 27, L1 9.63567e-05, Linf 0.00687939, total time[s] 0.077571 +Converged at iteration 32, L1 9.29037e-05, Linf 0.00587335, total time[s] 0.088384 +Converged at iteration 28, L1 7.35221e-05, Linf 0.00199719, total time[s] 0.073886 +Converged at iteration 31, L1 8.06174e-05, Linf 0.0108955, total time[s] 0.084046 +Converged at iteration 31, L1 6.06238e-05, Linf 0.00253998, total time[s] 0.092329 +Converged at iteration 33, L1 7.16175e-05, Linf 0.00358922, total time[s] 0.092052 +Converged at iteration 31, L1 8.40061e-05, Linf 0.00806618, total time[s] 0.084227 +Converged at iteration 33, L1 5.56635e-05, Linf 0.0123556, total time[s] 0.130216 +Converged at iteration 29, L1 9.14273e-05, Linf 0.0171627, total time[s] 0.079956 +Converged at iteration 25, L1 7.17499e-05, Linf 0.00304737, total time[s] 0.099283 +Converged at iteration 38, L1 3.63852e-05, Linf 0.00882205, total time[s] 0.10803 +Converged at iteration 36, L1 3.90555e-05, Linf 0.00756024, total time[s] 0.104043 +Converged at iteration 25, L1 7.72516e-05, Linf 0.00305338, total time[s] 0.085818 +Converged at iteration 26, L1 5.10571e-05, Linf 0.00364213, total time[s] 0.070077 +Converged at iteration 25, L1 5.17357e-05, Linf 0.00738259, total time[s] 0.069129 +Converged at iteration 26, L1 9.78564e-05, Linf 0.0228343, total time[s] 0.076712 +Converged at iteration 21, L1 5.09547e-05, Linf 0.00825267, total time[s] 0.073342 +Converged at iteration 19, L1 9.49831e-05, Linf 0.00516762, total time[s] 0.053462 +Converged at iteration 23, L1 7.9326e-05, Linf 0.00263268, total time[s] 0.063532 +Converged at iteration 24, L1 9.81033e-05, Linf 0.00312746, total time[s] 0.075496 +Converged at iteration 22, L1 5.28885e-05, Linf 0.00230843, total time[s] 0.072997 +Converged at iteration 21, L1 5.38772e-05, Linf 0.00255471, total time[s] 0.058173 +Converged at iteration 32, L1 7.31225e-05, Linf 0.0088713, total time[s] 0.088602 +Converged at iteration 22, L1 9.35748e-05, Linf 0.00587108, total time[s] 0.061126 +Converged at iteration 24, L1 6.50232e-05, Linf 0.00505891, total time[s] 0.07276 +Converged at iteration 26, L1 8.17526e-05, Linf 0.00419752, total time[s] 0.081906 +Converged at iteration 23, L1 8.65426e-05, Linf 0.00306413, total time[s] 0.066331 +Converged at iteration 23, L1 8.20776e-05, Linf 0.00315855, total time[s] 0.063541 +Converged at iteration 27, L1 4.81437e-05, Linf 0.00326263, total time[s] 0.073756 +Converged at iteration 28, L1 8.65204e-05, Linf 0.00505827, total time[s] 0.075621 +Converged at iteration 27, L1 9.98185e-05, Linf 0.00702564, total time[s] 0.072478 +Converged at iteration 32, L1 9.27866e-05, Linf 0.00590559, total time[s] 0.085575 +Converged at iteration 28, L1 7.69674e-05, Linf 0.00203341, total time[s] 0.075059 +Converged at iteration 31, L1 8.0936e-05, Linf 0.0107679, total time[s] 0.081709 +Converged at iteration 31, L1 5.99179e-05, Linf 0.00256215, total time[s] 0.082002 +Converged at iteration 33, L1 7.36508e-05, Linf 0.00370737, total time[s] 0.086379 +Converged at iteration 31, L1 9.0606e-05, Linf 0.00854789, total time[s] 0.082334 +Converged at iteration 33, L1 5.86728e-05, Linf 0.0132461, total time[s] 0.086826 +Converged at iteration 29, L1 9.09091e-05, Linf 0.0171021, total time[s] 0.075976 +Converged at iteration 25, L1 7.49747e-05, Linf 0.00304166, total time[s] 0.066903 +Converged at iteration 38, L1 3.69439e-05, Linf 0.00894987, total time[s] 0.101258 +Converged at iteration 36, L1 3.97124e-05, Linf 0.00770133, total time[s] 0.094752 +Converged at iteration 25, L1 7.69738e-05, Linf 0.00304216, total time[s] 0.067133 +Converged at iteration 26, L1 5.20804e-05, Linf 0.00371606, total time[s] 0.068733 +Converged at iteration 25, L1 5.10966e-05, Linf 0.00734939, total time[s] 0.066444 +Converged at iteration 27, L1 3.8537e-05, Linf 0.00863842, total time[s] 0.071507 +Converged at iteration 21, L1 5.17155e-05, Linf 0.00827435, total time[s] 0.05711 +Converged at iteration 19, L1 9.74452e-05, Linf 0.00518834, total time[s] 0.053051 +Converged at iteration 23, L1 7.8441e-05, Linf 0.0026111, total time[s] 0.07232 +Converged at iteration 24, L1 9.90973e-05, Linf 0.00313307, total time[s] 0.065885 +Converged at iteration 22, L1 5.24599e-05, Linf 0.00230588, total time[s] 0.060924 +Converged at iteration 21, L1 5.425e-05, Linf 0.00260468, total time[s] 0.058544 +Converged at iteration 32, L1 7.43546e-05, Linf 0.00873721, total time[s] 0.08633 +Converged at iteration 22, L1 9.43535e-05, Linf 0.00593664, total time[s] 0.060307 +Converged at iteration 24, L1 6.51619e-05, Linf 0.00507515, total time[s] 0.06563 +Converged at iteration 26, L1 8.20597e-05, Linf 0.00419781, total time[s] 0.072206 +Converged at iteration 23, L1 8.5926e-05, Linf 0.00298777, total time[s] 0.063542 +Converged at iteration 23, L1 8.09134e-05, Linf 0.00303456, total time[s] 0.063687 +Converged at iteration 27, L1 4.84365e-05, Linf 0.00329283, total time[s] 0.072434 +Converged at iteration 28, L1 8.85433e-05, Linf 0.00515913, total time[s] 0.075045 +Converged at iteration 28, L1 5.64321e-05, Linf 0.00441733, total time[s] 0.074831 +Converged at iteration 32, L1 9.27717e-05, Linf 0.00592002, total time[s] 0.084884 +Converged at iteration 28, L1 7.78861e-05, Linf 0.0020405, total time[s] 0.075789 +Converged at iteration 31, L1 8.12064e-05, Linf 0.0107645, total time[s] 0.083745 +Converged at iteration 31, L1 6.0187e-05, Linf 0.00256861, total time[s] 0.082304 +Converged at iteration 33, L1 7.41473e-05, Linf 0.00374671, total time[s] 0.087455 +Converged at iteration 31, L1 9.31022e-05, Linf 0.00874234, total time[s] 0.08215 +Converged at iteration 33, L1 5.97792e-05, Linf 0.0135891, total time[s] 0.086699 +Converged at iteration 29, L1 9.03156e-05, Linf 0.0170507, total time[s] 0.078254 +Converged at iteration 25, L1 7.52018e-05, Linf 0.00303456, total time[s] 0.067552 +Converged at iteration 38, L1 3.7944e-05, Linf 0.00932545, total time[s] 0.102225 +Converged at iteration 36, L1 4.10553e-05, Linf 0.00805556, total time[s] 0.095781 +Converged at iteration 25, L1 7.64516e-05, Linf 0.00301762, total time[s] 0.069155 +Converged at iteration 26, L1 5.58112e-05, Linf 0.00398301, total time[s] 0.070429 +Converged at iteration 25, L1 4.91339e-05, Linf 0.00727172, total time[s] 0.067793 +Converged at iteration 27, L1 3.96103e-05, Linf 0.00919568, total time[s] 0.072926 +Converged at iteration 21, L1 5.29262e-05, Linf 0.00831027, total time[s] 0.058303 +Converged at iteration 20, L1 4.63966e-05, Linf 0.00277398, total time[s] 0.055163 +Converged at iteration 23, L1 7.72728e-05, Linf 0.00257246, total time[s] 0.064029 +Converged at iteration 25, L1 5.84277e-05, Linf 0.00210612, total time[s] 0.069988 +Converged at iteration 22, L1 5.25464e-05, Linf 0.00231422, total time[s] 0.064146 +Converged at iteration 21, L1 5.46381e-05, Linf 0.0026842, total time[s] 0.058462 +Converged at iteration 32, L1 7.83099e-05, Linf 0.00892738, total time[s] 0.087153 +Converged at iteration 22, L1 9.67305e-05, Linf 0.00611184, total time[s] 0.060983 +Converged at iteration 24, L1 6.61941e-05, Linf 0.00512777, total time[s] 0.066303 +Converged at iteration 26, L1 8.09684e-05, Linf 0.00413858, total time[s] 0.074642 +Converged at iteration 23, L1 8.3655e-05, Linf 0.00279508, total time[s] 0.067285 +Converged at iteration 23, L1 7.96379e-05, Linf 0.00276742, total time[s] 0.061869 +Converged at iteration 27, L1 4.97047e-05, Linf 0.00338272, total time[s] 0.070583 +Converged at iteration 28, L1 9.76779e-05, Linf 0.00544883, total time[s] 0.073227 +Converged at iteration 28, L1 5.77644e-05, Linf 0.00447986, total time[s] 0.118784 +Converged at iteration 32, L1 9.25836e-05, Linf 0.00593496, total time[s] 0.101728 +Converged at iteration 28, L1 8.14314e-05, Linf 0.00207671, total time[s] 0.083914 +Converged at iteration 31, L1 8.18527e-05, Linf 0.010819, total time[s] 0.088682 +Converged at iteration 31, L1 6.18121e-05, Linf 0.00260623, total time[s] 0.089388 +Converged at iteration 33, L1 7.62797e-05, Linf 0.00383486, total time[s] 0.095263 +Converged at iteration 32, L1 3.72862e-05, Linf 0.00601066, total time[s] 0.099685 +Converged at iteration 33, L1 6.32924e-05, Linf 0.0149735, total time[s] 0.097667 +Converged at iteration 29, L1 9.09196e-05, Linf 0.0169142, total time[s] 0.079612 +Converged at iteration 25, L1 7.72378e-05, Linf 0.00305983, total time[s] 0.072308 +Converged at iteration 38, L1 3.89981e-05, Linf 0.00958463, total time[s] 0.12028 +Converged at iteration 36, L1 4.17009e-05, Linf 0.0081066, total time[s] 0.100345 +Converged at iteration 25, L1 7.63878e-05, Linf 0.00300965, total time[s] 0.06789 +Converged at iteration 26, L1 5.73937e-05, Linf 0.0040751, total time[s] 0.076344 +Converged at iteration 25, L1 4.97291e-05, Linf 0.00737494, total time[s] 0.070679 +Converged at iteration 27, L1 4.08099e-05, Linf 0.00937547, total time[s] 0.076033 +Converged at iteration 21, L1 5.37257e-05, Linf 0.00833361, total time[s] 0.062835 +Converged at iteration 20, L1 4.74033e-05, Linf 0.00279104, total time[s] 0.058865 +Converged at iteration 23, L1 7.69152e-05, Linf 0.0025678, total time[s] 0.066847 +Converged at iteration 25, L1 5.88934e-05, Linf 0.00210657, total time[s] 0.0772 +Converged at iteration 22, L1 5.34846e-05, Linf 0.00230201, total time[s] 0.068904 +Converged at iteration 21, L1 5.52179e-05, Linf 0.00270995, total time[s] 0.063432 +Converged at iteration 32, L1 7.97323e-05, Linf 0.00894703, total time[s] 0.083497 +Converged at iteration 22, L1 9.76335e-05, Linf 0.00618485, total time[s] 0.058317 +Converged at iteration 24, L1 6.73636e-05, Linf 0.00514486, total time[s] 0.071034 +Converged at iteration 26, L1 8.13689e-05, Linf 0.00414936, total time[s] 0.068591 +Converged at iteration 23, L1 8.32594e-05, Linf 0.00278896, total time[s] 0.063038 +Converged at iteration 23, L1 7.8786e-05, Linf 0.00264091, total time[s] 0.072957 +Converged at iteration 27, L1 5.08039e-05, Linf 0.00341735, total time[s] 0.098221 +Converged at iteration 29, L1 5.58192e-05, Linf 0.00313347, total time[s] 0.083463 +Converged at iteration 28, L1 5.815e-05, Linf 0.00450498, total time[s] 0.098857 +Converged at iteration 32, L1 9.30192e-05, Linf 0.00595534, total time[s] 0.115818 +Converged at iteration 28, L1 8.28248e-05, Linf 0.00208818, total time[s] 0.09296 +Converged at iteration 31, L1 8.15202e-05, Linf 0.010872, total time[s] 0.101774 +Converged at iteration 31, L1 6.1491e-05, Linf 0.00260257, total time[s] 0.094174 +Converged at iteration 33, L1 7.52805e-05, Linf 0.00385703, total time[s] 0.094176 +Converged at iteration 32, L1 3.83471e-05, Linf 0.00619834, total time[s] 0.100345 +Converged at iteration 33, L1 9.94692e-05, Linf 0.0149497, total time[s] 0.092181 +Converged at iteration 29, L1 8.85533e-05, Linf 0.016832, total time[s] 0.07992 +Converged at iteration 25, L1 7.73169e-05, Linf 0.00525766, total time[s] 0.077533 +Converged at iteration 38, L1 3.95972e-05, Linf 0.00970417, total time[s] 0.130769 +Converged at iteration 36, L1 4.29981e-05, Linf 0.00848452, total time[s] 0.117761 +Converged at iteration 25, L1 7.56379e-05, Linf 0.00298191, total time[s] 0.077411 +Converged at iteration 26, L1 5.95057e-05, Linf 0.0042592, total time[s] 0.091096 +Converged at iteration 25, L1 6.01798e-05, Linf 0.00721152, total time[s] 0.093299 +Converged at iteration 27, L1 6.90757e-05, Linf 0.00979593, total time[s] 0.139429 +Converged at iteration 21, L1 5.45155e-05, Linf 0.00840115, total time[s] 0.081834 +Converged at iteration 20, L1 4.85239e-05, Linf 0.00281316, total time[s] 0.079282 +Converged at iteration 23, L1 7.51609e-05, Linf 0.00263383, total time[s] 0.104586 +Converged at iteration 25, L1 5.99978e-05, Linf 0.00213738, total time[s] 0.1022 +Converged at iteration 22, L1 5.31284e-05, Linf 0.00230486, total time[s] 0.067595 +Converged at iteration 21, L1 5.60806e-05, Linf 0.00276232, total time[s] 0.060742 +Converged at iteration 32, L1 8.27765e-05, Linf 0.00897821, total time[s] 0.088149 +Converged at iteration 22, L1 9.93867e-05, Linf 0.00631584, total time[s] 0.060085 +Converged at iteration 24, L1 6.69389e-05, Linf 0.00517829, total time[s] 0.064601 +Converged at iteration 26, L1 8.04979e-05, Linf 0.00419301, total time[s] 0.071589 +Converged at iteration 23, L1 8.14931e-05, Linf 0.00266544, total time[s] 0.068498 +Converged at iteration 23, L1 7.8061e-05, Linf 0.00246212, total time[s] 0.062846 +Converged at iteration 27, L1 5.06723e-05, Linf 0.00348334, total time[s] 0.08026 +Converged at iteration 29, L1 6.01917e-05, Linf 0.00327836, total time[s] 0.114733 +Converged at iteration 28, L1 5.83099e-05, Linf 0.00455262, total time[s] 0.087376 +Converged at iteration 32, L1 9.23995e-05, Linf 0.00595714, total time[s] 0.0914 +Converged at iteration 28, L1 8.50357e-05, Linf 0.00211945, total time[s] 0.074802 +Converged at iteration 31, L1 8.26351e-05, Linf 0.0107016, total time[s] 0.085863 +Converged at iteration 31, L1 6.16357e-05, Linf 0.00263261, total time[s] 0.082493 +Converged at iteration 33, L1 7.59795e-05, Linf 0.00391489, total time[s] 0.087923 +Converged at iteration 32, L1 4.0915e-05, Linf 0.00673622, total time[s] 0.086331 +Converged at iteration 33, L1 6.68867e-05, Linf 0.0156792, total time[s] 0.09291 +Converged at iteration 29, L1 8.77475e-05, Linf 0.0167576, total time[s] 0.076836 +Converged at iteration 25, L1 7.76512e-05, Linf 0.00304204, total time[s] 0.06964 +Converged at iteration 38, L1 4.01644e-05, Linf 0.00982266, total time[s] 0.104995 +Converged at iteration 36, L1 4.34141e-05, Linf 0.00863953, total time[s] 0.110265 +Converged at iteration 25, L1 7.48839e-05, Linf 0.00297751, total time[s] 0.067175 +Converged at iteration 26, L1 6.05754e-05, Linf 0.00436075, total time[s] 0.069167 +Converged at iteration 25, L1 4.92016e-05, Linf 0.00718423, total time[s] 0.066841 +Converged at iteration 27, L1 7.08823e-05, Linf 0.0101538, total time[s] 0.075753 +Converged at iteration 21, L1 5.47089e-05, Linf 0.00871975, total time[s] 0.064122 +Converged at iteration 20, L1 5.04387e-05, Linf 0.00285286, total time[s] 0.091797 +Converged at iteration 23, L1 7.4499e-05, Linf 0.00264487, total time[s] 0.073299 +Converged at iteration 25, L1 6.0512e-05, Linf 0.00213969, total time[s] 0.093498 +Converged at iteration 22, L1 5.28473e-05, Linf 0.00229574, total time[s] 0.093893 +Converged at iteration 21, L1 5.628e-05, Linf 0.00279235, total time[s] 0.071873 +Converged at iteration 32, L1 8.42251e-05, Linf 0.00884964, total time[s] 0.113187 +Converged at iteration 23, L1 5.26644e-05, Linf 0.00348554, total time[s] 0.068599 +Converged at iteration 24, L1 6.72054e-05, Linf 0.00519582, total time[s] 0.069181 +Converged at iteration 26, L1 8.1797e-05, Linf 0.00427736, total time[s] 0.081504 +Converged at iteration 23, L1 8.06701e-05, Linf 0.00264215, total time[s] 0.077752 +Converged at iteration 23, L1 7.75263e-05, Linf 0.00237562, total time[s] 0.063512 +Converged at iteration 27, L1 4.96402e-05, Linf 0.00351339, total time[s] 0.073234 +Converged at iteration 29, L1 6.2055e-05, Linf 0.00335694, total time[s] 0.08197 +Converged at iteration 28, L1 5.77151e-05, Linf 0.00457824, total time[s] 0.08065 +Converged at iteration 32, L1 9.25567e-05, Linf 0.00597219, total time[s] 0.088776 +Converged at iteration 28, L1 8.62726e-05, Linf 0.00213801, total time[s] 0.086063 +Converged at iteration 31, L1 8.17057e-05, Linf 0.0108154, total time[s] 0.101164 +Converged at iteration 31, L1 6.24577e-05, Linf 0.00263727, total time[s] 0.08968 +Converged at iteration 33, L1 7.59445e-05, Linf 0.00393229, total time[s] 0.112188 +Converged at iteration 32, L1 4.19729e-05, Linf 0.00681887, total time[s] 0.102382 +Converged at iteration 33, L1 6.83228e-05, Linf 0.0161033, total time[s] 0.102755 +Converged at iteration 29, L1 8.69786e-05, Linf 0.0166602, total time[s] 0.075337 +Converged at iteration 25, L1 7.58953e-05, Linf 0.0030475, total time[s] 0.066353 +Converged at iteration 38, L1 4.12234e-05, Linf 0.0100055, total time[s] 0.101182 +Converged at iteration 36, L1 4.44009e-05, Linf 0.00919877, total time[s] 0.151661 +Converged at iteration 25, L1 7.39623e-05, Linf 0.00294882, total time[s] 0.068352 +Converged at iteration 26, L1 6.26643e-05, Linf 0.00455712, total time[s] 0.068964 +Converged at iteration 25, L1 4.88666e-05, Linf 0.00715636, total time[s] 0.067004 +Converged at iteration 27, L1 4.39175e-05, Linf 0.0106081, total time[s] 0.073559 +Converged at iteration 21, L1 5.59428e-05, Linf 0.00849829, total time[s] 0.060317 +Converged at iteration 20, L1 5.09898e-05, Linf 0.00285364, total time[s] 0.072312 +Converged at iteration 23, L1 7.34614e-05, Linf 0.00267192, total time[s] 0.077109 +Converged at iteration 25, L1 6.12087e-05, Linf 0.00215619, total time[s] 0.069336 +Converged at iteration 22, L1 5.28345e-05, Linf 0.00230271, total time[s] 0.076176 +Converged at iteration 21, L1 5.73914e-05, Linf 0.00284442, total time[s] 0.065978 +Converged at iteration 32, L1 8.7203e-05, Linf 0.00902408, total time[s] 0.098091 +Converged at iteration 23, L1 5.35337e-05, Linf 0.00355738, total time[s] 0.073276 +Converged at iteration 24, L1 6.77607e-05, Linf 0.00541965, total time[s] 0.06409 +Converged at iteration 26, L1 7.9499e-05, Linf 0.00439915, total time[s] 0.074053 +Converged at iteration 23, L1 7.85736e-05, Linf 0.00252911, total time[s] 0.064855 +Converged at iteration 23, L1 7.7802e-05, Linf 0.00227488, total time[s] 0.063319 +Converged at iteration 27, L1 5.06029e-05, Linf 0.00357467, total time[s] 0.076186 +Converged at iteration 29, L1 6.50385e-05, Linf 0.00349304, total time[s] 0.077529 +Converged at iteration 28, L1 6.00716e-05, Linf 0.00462205, total time[s] 0.082911 +Converged at iteration 32, L1 9.2101e-05, Linf 0.00597204, total time[s] 0.090133 +Converged at iteration 28, L1 8.95341e-05, Linf 0.00216438, total time[s] 0.077184 +Converged at iteration 31, L1 8.12814e-05, Linf 0.0108276, total time[s] 0.093595 +Converged at iteration 31, L1 6.21609e-05, Linf 0.00266228, total time[s] 0.092711 +Converged at iteration 33, L1 7.61419e-05, Linf 0.00398165, total time[s] 0.087319 +Converged at iteration 32, L1 4.41269e-05, Linf 0.00720103, total time[s] 0.09614 +Converged at iteration 33, L1 7.07511e-05, Linf 0.0168318, total time[s] 0.087206 +Converged at iteration 29, L1 8.6447e-05, Linf 0.0174423, total time[s] 0.078652 +Converged at iteration 25, L1 7.47799e-05, Linf 0.0030649, total time[s] 0.06716 +Converged at iteration 38, L1 4.19159e-05, Linf 0.010104, total time[s] 0.104219 +Converged at iteration 36, L1 7.54006e-05, Linf 0.00903267, total time[s] 0.10342 +Converged at iteration 25, L1 7.33852e-05, Linf 0.00293421, total time[s] 0.07325 +Converged at iteration 26, L1 6.44561e-05, Linf 0.00467066, total time[s] 0.068461 +Converged at iteration 25, L1 5.11216e-05, Linf 0.00775819, total time[s] 0.066475 +Converged at iteration 27, L1 7.87332e-05, Linf 0.0265737, total time[s] 0.073373 +Converged at iteration 21, L1 5.67511e-05, Linf 0.00852888, total time[s] 0.07878 +Converged at iteration 20, L1 5.19503e-05, Linf 0.00284682, total time[s] 0.056758 +Converged at iteration 23, L1 7.27582e-05, Linf 0.00269051, total time[s] 0.065419 +Converged at iteration 25, L1 6.16585e-05, Linf 0.00216605, total time[s] 0.084356 +Converged at iteration 22, L1 5.3076e-05, Linf 0.00229824, total time[s] 0.071074 +Converged at iteration 21, L1 5.77791e-05, Linf 0.00287276, total time[s] 0.063603 +Converged at iteration 32, L1 8.85473e-05, Linf 0.0090419, total time[s] 0.098308 +Converged at iteration 23, L1 5.42624e-05, Linf 0.00359479, total time[s] 0.063856 +Converged at iteration 24, L1 6.79965e-05, Linf 0.0052461, total time[s] 0.06487 +Converged at iteration 26, L1 7.96629e-05, Linf 0.00449857, total time[s] 0.068858 +Converged at iteration 23, L1 7.75029e-05, Linf 0.00249587, total time[s] 0.062907 +Converged at iteration 23, L1 7.57787e-05, Linf 0.00221429, total time[s] 0.063239 +Converged at iteration 27, L1 5.05552e-05, Linf 0.00360086, total time[s] 0.127311 +Converged at iteration 29, L1 6.57019e-05, Linf 0.00355571, total time[s] 0.077328 +Converged at iteration 28, L1 6.15025e-05, Linf 0.00464431, total time[s] 0.07777 +Converged at iteration 32, L1 9.22288e-05, Linf 0.00598046, total time[s] 0.095094 +Converged at iteration 28, L1 8.96161e-05, Linf 0.0021742, total time[s] 0.079881 +Converged at iteration 31, L1 8.14759e-05, Linf 0.0108051, total time[s] 0.080528 +Converged at iteration 31, L1 6.83174e-05, Linf 0.0026592, total time[s] 0.088421 +Converged at iteration 33, L1 7.75803e-05, Linf 0.00399682, total time[s] 0.093174 +Converged at iteration 32, L1 4.52534e-05, Linf 0.00745694, total time[s] 0.086737 +Converged at iteration 33, L1 7.26904e-05, Linf 0.0183561, total time[s] 0.090805 +Converged at iteration 29, L1 8.58377e-05, Linf 0.0173418, total time[s] 0.094741 +Converged at iteration 25, L1 7.44897e-05, Linf 0.00307638, total time[s] 0.093515 +Converged at iteration 38, L1 4.28088e-05, Linf 0.0105418, total time[s] 0.115045 +Converged at iteration 36, L1 4.69402e-05, Linf 0.00976392, total time[s] 0.108194 +Converged at iteration 25, L1 7.19061e-05, Linf 0.00288321, total time[s] 0.068944 +Converged at iteration 26, L1 6.77583e-05, Linf 0.00503714, total time[s] 0.075338 +Converged at iteration 25, L1 4.79174e-05, Linf 0.00707126, total time[s] 0.070003 +Converged at iteration 27, L1 4.98663e-05, Linf 0.0116066, total time[s] 0.116175 +Converged at iteration 21, L1 5.88291e-05, Linf 0.00857048, total time[s] 0.076498 +Converged at iteration 20, L1 5.46214e-05, Linf 0.00289385, total time[s] 0.063588 +Converged at iteration 23, L1 7.18786e-05, Linf 0.00271396, total time[s] 0.100795 +Converged at iteration 25, L1 6.20755e-05, Linf 0.00218866, total time[s] 0.112254 +Converged at iteration 22, L1 5.27033e-05, Linf 0.00228554, total time[s] 0.103997 +Converged at iteration 21, L1 5.88861e-05, Linf 0.00295056, total time[s] 0.096006 +Converged at iteration 32, L1 9.36235e-05, Linf 0.00908738, total time[s] 0.114051 +Converged at iteration 23, L1 6.7374e-05, Linf 0.00553318, total time[s] 0.085613 +Converged at iteration 24, L1 6.91945e-05, Linf 0.0053072, total time[s] 0.089284 +Converged at iteration 26, L1 7.76837e-05, Linf 0.00460429, total time[s] 0.100932 +Converged at iteration 23, L1 7.46357e-05, Linf 0.00246241, total time[s] 0.103566 +Converged at iteration 23, L1 7.53395e-05, Linf 0.00208982, total time[s] 0.118943 +Converged at iteration 27, L1 5.57085e-05, Linf 0.00370168, total time[s] 0.101298 +Converged at iteration 29, L1 6.93771e-05, Linf 0.00377735, total time[s] 0.113139 +Converged at iteration 28, L1 6.4131e-05, Linf 0.00471013, total time[s] 0.106392 +Converged at iteration 32, L1 9.11469e-05, Linf 0.0059744, total time[s] 0.11785 +Converged at iteration 28, L1 9.27836e-05, Linf 0.00221861, total time[s] 0.081298 +Converged at iteration 31, L1 8.2338e-05, Linf 0.0108165, total time[s] 0.102817 +Converged at iteration 31, L1 6.24937e-05, Linf 0.00270721, total time[s] 0.088298 +Converged at iteration 33, L1 7.63628e-05, Linf 0.00404457, total time[s] 0.085987 +Converged at iteration 32, L1 4.81354e-05, Linf 0.0078123, total time[s] 0.092637 +Converged at iteration 33, L1 7.61367e-05, Linf 0.0184793, total time[s] 0.088628 +Converged at iteration 29, L1 8.42682e-05, Linf 0.0171745, total time[s] 0.075553 +Converged at iteration 25, L1 7.23867e-05, Linf 0.00312056, total time[s] 0.067567 +Converged at iteration 38, L1 4.26845e-05, Linf 0.0104666, total time[s] 0.102386 +Converged at iteration 36, L1 4.68591e-05, Linf 0.00959414, total time[s] 0.096866 +Converged at iteration 25, L1 7.11845e-05, Linf 0.00286983, total time[s] 0.066589 +Converged at iteration 26, L1 6.90178e-05, Linf 0.00513944, total time[s] 0.068504 +Converged at iteration 25, L1 4.77516e-05, Linf 0.00705198, total time[s] 0.07326 +Converged at iteration 27, L1 4.7609e-05, Linf 0.0118694, total time[s] 0.094074 +Converged at iteration 21, L1 5.97189e-05, Linf 0.00875577, total time[s] 0.063668 +Converged at iteration 20, L1 5.62904e-05, Linf 0.00331202, total time[s] 0.06536 +Converged at iteration 23, L1 7.16468e-05, Linf 0.00272804, total time[s] 0.074699 +Converged at iteration 25, L1 6.22876e-05, Linf 0.00219127, total time[s] 0.080743 +Converged at iteration 22, L1 5.30503e-05, Linf 0.00227642, total time[s] 0.076419 +Converged at iteration 21, L1 5.94097e-05, Linf 0.00298204, total time[s] 0.062869 +Converged at iteration 32, L1 9.54494e-05, Linf 0.00900356, total time[s] 0.093719 +Converged at iteration 23, L1 6.78118e-05, Linf 0.00890208, total time[s] 0.074373 +Converged at iteration 24, L1 7.18056e-05, Linf 0.00532522, total time[s] 0.06725 +Converged at iteration 26, L1 7.79578e-05, Linf 0.00440542, total time[s] 0.08908 +Converged at iteration 23, L1 7.38488e-05, Linf 0.00244733, total time[s] 0.074775 +Converged at iteration 23, L1 7.56408e-05, Linf 0.00203472, total time[s] 0.070348 +Converged at iteration 27, L1 5.76882e-05, Linf 0.00373737, total time[s] 0.083369 +Converged at iteration 29, L1 6.97984e-05, Linf 0.00386482, total time[s] 0.078992 +Converged at iteration 28, L1 6.3508e-05, Linf 0.00473568, total time[s] 0.073464 +Converged at iteration 32, L1 9.09348e-05, Linf 0.00598348, total time[s] 0.085568 +Converged at iteration 28, L1 9.29356e-05, Linf 0.00223092, total time[s] 0.083836 +Converged at iteration 31, L1 8.26733e-05, Linf 0.0107897, total time[s] 0.097766 +Converged at iteration 31, L1 6.25968e-05, Linf 0.00271383, total time[s] 0.098605 +Converged at iteration 33, L1 7.62344e-05, Linf 0.00405954, total time[s] 0.115574 +Converged at iteration 32, L1 5.01929e-05, Linf 0.00798371, total time[s] 0.093285 +Converged at iteration 33, L1 7.77278e-05, Linf 0.0189533, total time[s] 0.099758 +Converged at iteration 29, L1 8.34328e-05, Linf 0.0170801, total time[s] 0.077157 +Converged at iteration 25, L1 7.21046e-05, Linf 0.00314425, total time[s] 0.066437 +Converged at iteration 38, L1 4.41843e-05, Linf 0.0107077, total time[s] 0.108609 +Converged at iteration 36, L1 4.77307e-05, Linf 0.00987076, total time[s] 0.109896 +Converged at iteration 25, L1 6.98519e-05, Linf 0.00283294, total time[s] 0.067671 +Converged at iteration 26, L1 7.18167e-05, Linf 0.00539578, total time[s] 0.06922 +Converged at iteration 25, L1 4.73602e-05, Linf 0.00701404, total time[s] 0.068058 +Converged at iteration 27, L1 4.90582e-05, Linf 0.0124751, total time[s] 0.075965 +Converged at iteration 21, L1 6.083e-05, Linf 0.00860999, total time[s] 0.057198 +Converged at iteration 20, L1 5.67553e-05, Linf 0.00292467, total time[s] 0.055866 +Converged at iteration 23, L1 7.13406e-05, Linf 0.00279778, total time[s] 0.062074 +Converged at iteration 25, L1 6.24735e-05, Linf 0.00219251, total time[s] 0.067087 +Converged at iteration 22, L1 5.2386e-05, Linf 0.00226066, total time[s] 0.059966 +Converged at iteration 21, L1 6.04844e-05, Linf 0.00304093, total time[s] 0.057338 +Converged at iteration 32, L1 9.9266e-05, Linf 0.0091335, total time[s] 0.088879 +Converged at iteration 23, L1 5.67088e-05, Linf 0.0038162, total time[s] 0.062084 +Converged at iteration 24, L1 7.21976e-05, Linf 0.00536759, total time[s] 0.068304 +Converged at iteration 26, L1 7.70607e-05, Linf 0.00433305, total time[s] 0.074383 +Converged at iteration 23, L1 7.31411e-05, Linf 0.00240013, total time[s] 0.064418 +Converged at iteration 23, L1 7.30779e-05, Linf 0.0019964, total time[s] 0.071255 +Converged at iteration 27, L1 6.08252e-05, Linf 0.00381617, total time[s] 0.07201 +Converged at iteration 29, L1 6.97568e-05, Linf 0.00406583, total time[s] 0.076754 +Converged at iteration 28, L1 6.59019e-05, Linf 0.00478367, total time[s] 0.076669 +Converged at iteration 32, L1 9.05737e-05, Linf 0.00597776, total time[s] 0.088762 +Converged at iteration 28, L1 9.47331e-05, Linf 0.00226491, total time[s] 0.077645 +Converged at iteration 31, L1 8.12926e-05, Linf 0.0107911, total time[s] 0.081372 +Converged at iteration 31, L1 6.30283e-05, Linf 0.00273877, total time[s] 0.081161 +Converged at iteration 33, L1 7.59878e-05, Linf 0.00408551, total time[s] 0.114009 +Converged at iteration 32, L1 5.17025e-05, Linf 0.00831073, total time[s] 0.086706 +Converged at iteration 33, L1 9.68228e-05, Linf 0.0197458, total time[s] 0.085741 +Converged at iteration 29, L1 8.23523e-05, Linf 0.017843, total time[s] 0.076868 +Converged at iteration 25, L1 7.21425e-05, Linf 0.00318806, total time[s] 0.066815 +Converged at iteration 38, L1 4.40793e-05, Linf 0.010881, total time[s] 0.111191 +Converged at iteration 36, L1 4.82216e-05, Linf 0.0100456, total time[s] 0.113911 +Converged at iteration 25, L1 6.90735e-05, Linf 0.00282243, total time[s] 0.067846 +Converged at iteration 26, L1 7.30574e-05, Linf 0.00549528, total time[s] 0.073226 +Converged at iteration 25, L1 4.69777e-05, Linf 0.006988, total time[s] 0.071979 +Converged at iteration 27, L1 5.01236e-05, Linf 0.0127991, total time[s] 0.072612 +Converged at iteration 21, L1 6.16679e-05, Linf 0.00863068, total time[s] 0.057527 +Converged at iteration 20, L1 5.77233e-05, Linf 0.00293036, total time[s] 0.055817 +Converged at iteration 23, L1 7.10801e-05, Linf 0.00281764, total time[s] 0.068281 +Converged at iteration 25, L1 6.27261e-05, Linf 0.00219351, total time[s] 0.066216 +Converged at iteration 22, L1 5.23749e-05, Linf 0.0022431, total time[s] 0.0598 +Converged at iteration 21, L1 6.12588e-05, Linf 0.00307736, total time[s] 0.058349 +Converged at iteration 33, L1 3.25638e-05, Linf 0.00288551, total time[s] 0.08419 +Converged at iteration 23, L1 5.75346e-05, Linf 0.00385825, total time[s] 0.06117 +Converged at iteration 24, L1 7.09724e-05, Linf 0.00560068, total time[s] 0.065329 +Converged at iteration 26, L1 7.76025e-05, Linf 0.00435208, total time[s] 0.068429 +Converged at iteration 23, L1 7.2632e-05, Linf 0.00241936, total time[s] 0.062771 +Converged at iteration 23, L1 7.3109e-05, Linf 0.00200268, total time[s] 0.061754 +Converged at iteration 27, L1 6.19013e-05, Linf 0.00384562, total time[s] 0.070964 +Converged at iteration 29, L1 6.93433e-05, Linf 0.00412926, total time[s] 0.074758 +Converged at iteration 28, L1 6.80298e-05, Linf 0.00483115, total time[s] 0.072897 +Converged at iteration 32, L1 8.97317e-05, Linf 0.00598858, total time[s] 0.081501 +Converged at iteration 28, L1 9.61458e-05, Linf 0.00235735, total time[s] 0.072914 +Converged at iteration 31, L1 8.13251e-05, Linf 0.010756, total time[s] 0.080696 +Converged at iteration 31, L1 6.3043e-05, Linf 0.00274377, total time[s] 0.080741 +Converged at iteration 33, L1 7.59268e-05, Linf 0.00409744, total time[s] 0.085894 +Converged at iteration 32, L1 5.33895e-05, Linf 0.00850344, total time[s] 0.08321 +Converged at iteration 34, L1 6.90302e-05, Linf 0.00637922, total time[s] 0.088439 +Converged at iteration 29, L1 8.18282e-05, Linf 0.0178833, total time[s] 0.076164 +Converged at iteration 25, L1 7.24043e-05, Linf 0.00320983, total time[s] 0.06664 +Converged at iteration 38, L1 4.47877e-05, Linf 0.0111786, total time[s] 0.099847 +Converged at iteration 36, L1 5.0132e-05, Linf 0.0101693, total time[s] 0.093629 +Converged at iteration 25, L1 6.79236e-05, Linf 0.00278359, total time[s] 0.066505 +Converged at iteration 26, L1 7.52192e-05, Linf 0.00586526, total time[s] 0.069095 +Converged at iteration 25, L1 4.6565e-05, Linf 0.0069483, total time[s] 0.066854 +Converged at iteration 27, L1 5.15868e-05, Linf 0.0137751, total time[s] 0.072175 +Converged at iteration 21, L1 6.27883e-05, Linf 0.00865064, total time[s] 0.05851 +Converged at iteration 20, L1 5.91689e-05, Linf 0.00292072, total time[s] 0.054743 +Converged at iteration 23, L1 7.08155e-05, Linf 0.00285066, total time[s] 0.064079 +Converged at iteration 25, L1 6.31173e-05, Linf 0.00218539, total time[s] 0.066586 +Converged at iteration 22, L1 5.21151e-05, Linf 0.0022394, total time[s] 0.060109 +Converged at iteration 21, L1 6.26543e-05, Linf 0.00313832, total time[s] 0.058039 +Converged at iteration 33, L1 3.31942e-05, Linf 0.00289852, total time[s] 0.093142 +Converged at iteration 23, L1 5.80804e-05, Linf 0.00392588, total time[s] 0.061821 +Converged at iteration 24, L1 7.20276e-05, Linf 0.00543489, total time[s] 0.064259 +Converged at iteration 26, L1 7.65891e-05, Linf 0.00433011, total time[s] 0.068898 +Converged at iteration 23, L1 7.17228e-05, Linf 0.00503922, total time[s] 0.061555 +Converged at iteration 23, L1 7.33885e-05, Linf 0.00212506, total time[s] 0.061705 +Converged at iteration 27, L1 6.39666e-05, Linf 0.00389563, total time[s] 0.072546 +Converged at iteration 29, L1 7.00035e-05, Linf 0.00427623, total time[s] 0.076274 +Converged at iteration 28, L1 7.26081e-05, Linf 0.00485262, total time[s] 0.074127 +Converged at iteration 32, L1 8.89523e-05, Linf 0.00598442, total time[s] 0.083299 +Converged at iteration 28, L1 9.72582e-05, Linf 0.00230295, total time[s] 0.073751 +Converged at iteration 31, L1 8.12081e-05, Linf 0.0107472, total time[s] 0.081056 +Converged at iteration 31, L1 6.39289e-05, Linf 0.00276656, total time[s] 0.080915 +Converged at iteration 33, L1 7.60766e-05, Linf 0.00412716, total time[s] 0.08798 +Converged at iteration 32, L1 5.55818e-05, Linf 0.00880633, total time[s] 0.082565 +Converged at iteration 33, L1 8.56872e-05, Linf 0.0212989, total time[s] 0.087889 +Converged at iteration 29, L1 8.07641e-05, Linf 0.0177278, total time[s] 0.076085 +Converged at iteration 25, L1 7.4816e-05, Linf 0.00324534, total time[s] 0.068703 +Converged at iteration 38, L1 4.52057e-05, Linf 0.0113726, total time[s] 0.112714 +Converged at iteration 36, L1 4.97124e-05, Linf 0.0104766, total time[s] 0.098336 +Converged at iteration 25, L1 6.78532e-05, Linf 0.00277289, total time[s] 0.067725 +Converged at iteration 26, L1 7.71134e-05, Linf 0.00604554, total time[s] 0.099555 +Converged at iteration 25, L1 4.6583e-05, Linf 0.00691033, total time[s] 0.083 +Converged at iteration 27, L1 5.20934e-05, Linf 0.0136845, total time[s] 0.07674 +Converged at iteration 21, L1 6.36578e-05, Linf 0.00867331, total time[s] 0.079373 +Converged at iteration 20, L1 6.06014e-05, Linf 0.00292112, total time[s] 0.059783 +Converged at iteration 23, L1 7.05256e-05, Linf 0.00286464, total time[s] 0.064853 +Converged at iteration 25, L1 6.33909e-05, Linf 0.00220323, total time[s] 0.066863 +Converged at iteration 22, L1 5.2232e-05, Linf 0.00223672, total time[s] 0.062707 +Converged at iteration 21, L1 6.32396e-05, Linf 0.00317737, total time[s] 0.061125 +Converged at iteration 33, L1 3.35558e-05, Linf 0.00290881, total time[s] 0.086998 +Converged at iteration 23, L1 5.85391e-05, Linf 0.00396442, total time[s] 0.064029 +Converged at iteration 24, L1 7.26607e-05, Linf 0.00545824, total time[s] 0.065997 +Converged at iteration 26, L1 7.75962e-05, Linf 0.00434605, total time[s] 0.073352 +Converged at iteration 23, L1 6.98915e-05, Linf 0.00239958, total time[s] 0.066426 +Converged at iteration 23, L1 7.30336e-05, Linf 0.00202039, total time[s] 0.067879 +Converged at iteration 27, L1 6.53864e-05, Linf 0.00391726, total time[s] 0.080684 +Converged at iteration 29, L1 6.96734e-05, Linf 0.00433653, total time[s] 0.076799 +Converged at iteration 28, L1 7.36932e-05, Linf 0.0049025, total time[s] 0.073982 +Converged at iteration 32, L1 8.8984e-05, Linf 0.00599676, total time[s] 0.083573 +Converged at iteration 28, L1 9.76302e-05, Linf 0.00231931, total time[s] 0.084065 +Converged at iteration 31, L1 8.27143e-05, Linf 0.0109614, total time[s] 0.100325 +Converged at iteration 31, L1 6.48443e-05, Linf 0.00276951, total time[s] 0.086046 +Converged at iteration 33, L1 7.68147e-05, Linf 0.00414302, total time[s] 0.103997 +Converged at iteration 32, L1 5.87852e-05, Linf 0.00886103, total time[s] 0.092856 +Converged at iteration 33, L1 8.79441e-05, Linf 0.0218411, total time[s] 0.106528 +Converged at iteration 29, L1 7.99038e-05, Linf 0.0176766, total time[s] 0.105471 +Converged at iteration 25, L1 7.42127e-05, Linf 0.00325928, total time[s] 0.089833 +Converged at iteration 38, L1 4.60855e-05, Linf 0.011804, total time[s] 0.146923 +Converged at iteration 36, L1 5.05279e-05, Linf 0.0106605, total time[s] 0.133653 +Converged at iteration 25, L1 6.80542e-05, Linf 0.00273546, total time[s] 0.081216 +Converged at iteration 26, L1 7.93464e-05, Linf 0.0063323, total time[s] 0.0795 +Converged at iteration 25, L1 4.57292e-05, Linf 0.00683614, total time[s] 0.067692 +Converged at iteration 27, L1 5.39241e-05, Linf 0.0144085, total time[s] 0.085676 +Converged at iteration 21, L1 6.57723e-05, Linf 0.00885202, total time[s] 0.060324 +Converged at iteration 20, L1 6.25873e-05, Linf 0.00292537, total time[s] 0.059329 +Converged at iteration 23, L1 7.00577e-05, Linf 0.00295555, total time[s] 0.100304 +Converged at iteration 25, L1 6.45472e-05, Linf 0.00223167, total time[s] 0.127134 +Converged at iteration 22, L1 5.17603e-05, Linf 0.00222254, total time[s] 0.102993 +Converged at iteration 21, L1 6.47901e-05, Linf 0.00325869, total time[s] 0.056833 +Converged at iteration 33, L1 3.46956e-05, Linf 0.00292481, total time[s] 0.087101 +Converged at iteration 23, L1 5.96434e-05, Linf 0.00404839, total time[s] 0.060601 +Converged at iteration 24, L1 7.38212e-05, Linf 0.00550345, total time[s] 0.066148 +Converged at iteration 26, L1 7.53985e-05, Linf 0.00431129, total time[s] 0.067824 +Converged at iteration 23, L1 6.84501e-05, Linf 0.00231841, total time[s] 0.060767 +Converged at iteration 23, L1 7.29046e-05, Linf 0.00188064, total time[s] 0.061304 +Converged at iteration 27, L1 6.78603e-05, Linf 0.0039661, total time[s] 0.070058 +Converged at iteration 29, L1 7.03128e-05, Linf 0.00457655, total time[s] 0.075081 +Converged at iteration 28, L1 6.72779e-05, Linf 0.00493725, total time[s] 0.072391 +Converged at iteration 32, L1 8.82785e-05, Linf 0.0059967, total time[s] 0.082171 +Converged at iteration 28, L1 9.99092e-05, Linf 0.00236451, total time[s] 0.072962 +Converged at iteration 31, L1 8.01856e-05, Linf 0.0106719, total time[s] 0.084325 +Converged at iteration 31, L1 6.78124e-05, Linf 0.00278922, total time[s] 0.086144 +Converged at iteration 33, L1 7.70657e-05, Linf 0.00418286, total time[s] 0.085033 +Converged at iteration 32, L1 6.06877e-05, Linf 0.00924858, total time[s] 0.082214 +Converged at iteration 33, L1 9.18167e-05, Linf 0.0230369, total time[s] 0.084841 +Converged at iteration 29, L1 7.88072e-05, Linf 0.0186033, total time[s] 0.075494 +Converged at iteration 25, L1 7.5772e-05, Linf 0.00330415, total time[s] 0.066063 +Converged at iteration 38, L1 4.65127e-05, Linf 0.0120025, total time[s] 0.097491 +Converged at iteration 36, L1 5.10494e-05, Linf 0.0109718, total time[s] 0.097785 +Converged at iteration 25, L1 6.81598e-05, Linf 0.00271894, total time[s] 0.069725 +Converged at iteration 26, L1 8.03047e-05, Linf 0.00643603, total time[s] 0.06793 +Converged at iteration 25, L1 4.51818e-05, Linf 0.00679315, total time[s] 0.066177 +Converged at iteration 27, L1 5.48441e-05, Linf 0.0153513, total time[s] 0.070659 +Converged at iteration 21, L1 6.60294e-05, Linf 0.00869848, total time[s] 0.059302 +Converged at iteration 20, L1 6.36245e-05, Linf 0.00297417, total time[s] 0.056431 +Converged at iteration 23, L1 6.93198e-05, Linf 0.00296952, total time[s] 0.064476 +Converged at iteration 25, L1 6.41039e-05, Linf 0.00224432, total time[s] 0.066984 +Converged at iteration 22, L1 5.15484e-05, Linf 0.00221349, total time[s] 0.070281 +Converged at iteration 21, L1 6.54441e-05, Linf 0.00329859, total time[s] 0.057155 +Converged at iteration 33, L1 3.51727e-05, Linf 0.00293612, total time[s] 0.093413 +Converged at iteration 23, L1 6.00745e-05, Linf 0.00408258, total time[s] 0.062464 +Converged at iteration 24, L1 7.43156e-05, Linf 0.00551865, total time[s] 0.067858 +Converged at iteration 26, L1 7.55677e-05, Linf 0.00431176, total time[s] 0.067628 +Converged at iteration 23, L1 6.80349e-05, Linf 0.00233484, total time[s] 0.071927 +Converged at iteration 23, L1 7.24129e-05, Linf 0.00180044, total time[s] 0.061693 +Converged at iteration 27, L1 6.86397e-05, Linf 0.00398385, total time[s] 0.072831 +Converged at iteration 29, L1 7.05852e-05, Linf 0.00465944, total time[s] 0.080531 +Converged at iteration 28, L1 6.57183e-05, Linf 0.00496167, total time[s] 0.131569 +Converged at iteration 32, L1 8.82183e-05, Linf 0.006005, total time[s] 0.11669 +Converged at iteration 29, L1 5.70761e-05, Linf 0.00160554, total time[s] 0.079931 +Converged at iteration 31, L1 7.96421e-05, Linf 0.0106311, total time[s] 0.079119 +Converged at iteration 31, L1 6.47166e-05, Linf 0.00279608, total time[s] 0.07913 +Converged at iteration 33, L1 7.73488e-05, Linf 0.00420507, total time[s] 0.092499 +Converged at iteration 32, L1 6.23281e-05, Linf 0.00957769, total time[s] 0.08461 +Converged at iteration 33, L1 9.37989e-05, Linf 0.0235852, total time[s] 0.096805 +Converged at iteration 29, L1 7.8004e-05, Linf 0.0186991, total time[s] 0.077815 +Converged at iteration 25, L1 7.58044e-05, Linf 0.00331274, total time[s] 0.065316 +Converged at iteration 38, L1 4.75824e-05, Linf 0.0125013, total time[s] 0.101254 +Converged at iteration 36, L1 5.22058e-05, Linf 0.0113844, total time[s] 0.097137 +Converged at iteration 25, L1 6.83864e-05, Linf 0.00268078, total time[s] 0.068595 +Converged at iteration 26, L1 8.45696e-05, Linf 0.00680957, total time[s] 0.069335 +Converged at iteration 24, L1 9.99089e-05, Linf 0.0123475, total time[s] 0.064321 +Converged at iteration 27, L1 5.74998e-05, Linf 0.0156329, total time[s] 0.071372 +Converged at iteration 21, L1 6.69252e-05, Linf 0.00870358, total time[s] 0.059575 +Converged at iteration 20, L1 6.51993e-05, Linf 0.0030651, total time[s] 0.056087 +Converged at iteration 23, L1 6.87824e-05, Linf 0.00308219, total time[s] 0.065064 +Converged at iteration 25, L1 6.51058e-05, Linf 0.00228435, total time[s] 0.068001 +Converged at iteration 22, L1 5.1255e-05, Linf 0.0034429, total time[s] 0.062053 +Converged at iteration 21, L1 6.6903e-05, Linf 0.00341182, total time[s] 0.060134 +Converged at iteration 33, L1 3.66181e-05, Linf 0.00297414, total time[s] 0.087142 +Converged at iteration 23, L1 6.89069e-05, Linf 0.00418108, total time[s] 0.068938 +Converged at iteration 24, L1 7.58631e-05, Linf 0.00557248, total time[s] 0.085565 +Converged at iteration 26, L1 7.59502e-05, Linf 0.0042376, total time[s] 0.103393 +Converged at iteration 23, L1 6.62838e-05, Linf 0.0023781, total time[s] 0.077625 +Converged at iteration 23, L1 7.14499e-05, Linf 0.0018659, total time[s] 0.069617 +Converged at iteration 27, L1 7.03785e-05, Linf 0.00404314, total time[s] 0.097195 +Converged at iteration 29, L1 7.31261e-05, Linf 0.00491458, total time[s] 0.083286 +Converged at iteration 28, L1 6.56634e-05, Linf 0.0050323, total time[s] 0.08686 +Converged at iteration 32, L1 8.72056e-05, Linf 0.00599976, total time[s] 0.083873 +Converged at iteration 29, L1 5.97267e-05, Linf 0.00166042, total time[s] 0.078337 +Converged at iteration 31, L1 7.89222e-05, Linf 0.0106113, total time[s] 0.085547 +Converged at iteration 31, L1 6.98083e-05, Linf 0.00282256, total time[s] 0.080812 +Converged at iteration 33, L1 7.79635e-05, Linf 0.00425088, total time[s] 0.090811 +Converged at iteration 32, L1 6.7115e-05, Linf 0.0100395, total time[s] 0.090001 +Converged at iteration 34, L1 3.92402e-05, Linf 0.00832684, total time[s] 0.107374 +Converged at iteration 29, L1 7.60045e-05, Linf 0.0183528, total time[s] 0.083963 +Converged at iteration 25, L1 7.66958e-05, Linf 0.00332924, total time[s] 0.116074 +Converged at iteration 38, L1 5.63265e-05, Linf 0.012686, total time[s] 0.202415 +Converged at iteration 36, L1 5.25951e-05, Linf 0.0119814, total time[s] 0.12563 +Converged at iteration 25, L1 6.77227e-05, Linf 0.00267003, total time[s] 0.082015 +Converged at iteration 26, L1 8.55088e-05, Linf 0.00692596, total time[s] 0.123865 +Converged at iteration 25, L1 4.59879e-05, Linf 0.00660391, total time[s] 0.157186 +Converged at iteration 27, L1 5.87157e-05, Linf 0.0164787, total time[s] 0.124185 +Converged at iteration 21, L1 6.78478e-05, Linf 0.00888402, total time[s] 0.090023 +Converged at iteration 20, L1 6.7995e-05, Linf 0.00310506, total time[s] 0.133395 +Converged at iteration 23, L1 6.81425e-05, Linf 0.00310159, total time[s] 0.121908 +Converged at iteration 25, L1 6.51728e-05, Linf 0.0023038, total time[s] 0.093017 +Converged at iteration 22, L1 5.06869e-05, Linf 0.00196933, total time[s] 0.071061 +Converged at iteration 21, L1 6.74832e-05, Linf 0.00346094, total time[s] 0.08 +Converged at iteration 33, L1 3.7151e-05, Linf 0.00297045, total time[s] 0.094599 +Converged at iteration 23, L1 6.19372e-05, Linf 0.00422047, total time[s] 0.063326 +Converged at iteration 24, L1 7.66462e-05, Linf 0.00559271, total time[s] 0.072804 +Converged at iteration 26, L1 7.44463e-05, Linf 0.00423802, total time[s] 0.105152 +Converged at iteration 23, L1 6.59986e-05, Linf 0.00242585, total time[s] 0.071386 +Converged at iteration 23, L1 7.10188e-05, Linf 0.00188397, total time[s] 0.062526 +Converged at iteration 27, L1 7.04376e-05, Linf 0.00406872, total time[s] 0.071401 +Converged at iteration 29, L1 7.40465e-05, Linf 0.0049951, total time[s] 0.079387 +Converged at iteration 28, L1 6.56792e-05, Linf 0.0050682, total time[s] 0.076916 +Converged at iteration 32, L1 8.70081e-05, Linf 0.006007, total time[s] 0.084646 +Converged at iteration 29, L1 6.00886e-05, Linf 0.00167775, total time[s] 0.115161 +Converged at iteration 31, L1 7.81641e-05, Linf 0.0105741, total time[s] 0.115939 +Converged at iteration 31, L1 6.62366e-05, Linf 0.0028285, total time[s] 0.11216 +Converged at iteration 33, L1 7.92318e-05, Linf 0.00426747, total time[s] 0.096853 +Converged at iteration 32, L1 6.88532e-05, Linf 0.0102448, total time[s] 0.091287 +Converged at iteration 34, L1 3.88071e-05, Linf 0.00855365, total time[s] 0.10031 +Converged at iteration 29, L1 7.48565e-05, Linf 0.0184546, total time[s] 0.092727 +Converged at iteration 25, L1 7.67138e-05, Linf 0.00333007, total time[s] 0.067226 +Converged at iteration 38, L1 4.87304e-05, Linf 0.0129659, total time[s] 0.107446 +Converged at iteration 36, L1 5.3174e-05, Linf 0.0118385, total time[s] 0.114891 +Converged at iteration 25, L1 6.70574e-05, Linf 0.00263886, total time[s] 0.074846 +Converged at iteration 26, L1 8.74092e-05, Linf 0.0071392, total time[s] 0.068759 +Converged at iteration 24, L1 9.75974e-05, Linf 0.0120983, total time[s] 0.06585 +Converged at iteration 27, L1 6.05816e-05, Linf 0.0166009, total time[s] 0.07871 +Converged at iteration 21, L1 6.89091e-05, Linf 0.00872871, total time[s] 0.063516 +Converged at iteration 20, L1 6.70172e-05, Linf 0.00315939, total time[s] 0.070391 +Converged at iteration 23, L1 6.72111e-05, Linf 0.00314341, total time[s] 0.068376 +Converged at iteration 25, L1 6.53305e-05, Linf 0.00232412, total time[s] 0.0843 +Converged at iteration 22, L1 5.02131e-05, Linf 0.00196699, total time[s] 0.069619 +Converged at iteration 21, L1 6.85974e-05, Linf 0.00353223, total time[s] 0.068898 +Converged at iteration 33, L1 3.82537e-05, Linf 0.0029861, total time[s] 0.093051 +Converged at iteration 23, L1 6.3081e-05, Linf 0.0042841, total time[s] 0.061853 +Converged at iteration 24, L1 7.76405e-05, Linf 0.00562601, total time[s] 0.064133 +Converged at iteration 26, L1 7.4203e-05, Linf 0.00418939, total time[s] 0.07035 +Converged at iteration 23, L1 6.62104e-05, Linf 0.00518944, total time[s] 0.074846 +Converged at iteration 23, L1 7.03858e-05, Linf 0.00192395, total time[s] 0.061576 +Converged at iteration 27, L1 7.07412e-05, Linf 0.00411275, total time[s] 0.072691 +Converged at iteration 29, L1 7.69831e-05, Linf 0.0051952, total time[s] 0.076607 +Converged at iteration 28, L1 6.64403e-05, Linf 0.0051126, total time[s] 0.074227 +Converged at iteration 32, L1 8.63854e-05, Linf 0.00600415, total time[s] 0.087077 +Converged at iteration 29, L1 6.10017e-05, Linf 0.00170862, total time[s] 0.076346 +Converged at iteration 31, L1 7.72458e-05, Linf 0.0106865, total time[s] 0.080202 +Converged at iteration 31, L1 6.47446e-05, Linf 0.0028477, total time[s] 0.08098 +Converged at iteration 33, L1 7.80632e-05, Linf 0.00429939, total time[s] 0.086158 +Converged at iteration 32, L1 7.12735e-05, Linf 0.0105433, total time[s] 0.097964 +Converged at iteration 34, L1 3.95311e-05, Linf 0.0089063, total time[s] 0.11687 +Converged at iteration 29, L1 7.34343e-05, Linf 0.0193711, total time[s] 0.08279 +Converged at iteration 25, L1 7.81724e-05, Linf 0.00502063, total time[s] 0.109912 +Converged at iteration 38, L1 4.91445e-05, Linf 0.0131236, total time[s] 0.122739 +Converged at iteration 36, L1 9.56183e-05, Linf 0.0120249, total time[s] 0.112856 +Converged at iteration 25, L1 6.71514e-05, Linf 0.0026304, total time[s] 0.070467 +Converged at iteration 26, L1 8.84434e-05, Linf 0.0072561, total time[s] 0.070974 +Converged at iteration 24, L1 9.54986e-05, Linf 0.0119777, total time[s] 0.070398 +Converged at iteration 27, L1 6.09098e-05, Linf 0.0170543, total time[s] 0.095507 +Converged at iteration 21, L1 6.96907e-05, Linf 0.00873615, total time[s] 0.064614 +Converged at iteration 20, L1 6.81786e-05, Linf 0.00321881, total time[s] 0.061921 +Converged at iteration 23, L1 6.67304e-05, Linf 0.00316872, total time[s] 0.074454 +Converged at iteration 25, L1 6.55375e-05, Linf 0.00235095, total time[s] 0.090349 +Converged at iteration 22, L1 4.97887e-05, Linf 0.00196556, total time[s] 0.086579 +Converged at iteration 21, L1 6.91825e-05, Linf 0.00357752, total time[s] 0.083711 +Converged at iteration 33, L1 3.90668e-05, Linf 0.00299968, total time[s] 0.128866 +Converged at iteration 23, L1 7.20597e-05, Linf 0.00432583, total time[s] 0.066723 +Converged at iteration 24, L1 7.84346e-05, Linf 0.00564975, total time[s] 0.075842 +Converged at iteration 26, L1 7.47425e-05, Linf 0.00419025, total time[s] 0.070312 +Converged at iteration 23, L1 6.57572e-05, Linf 0.00247523, total time[s] 0.062242 +Converged at iteration 23, L1 7.11285e-05, Linf 0.00193369, total time[s] 0.063409 +Converged at iteration 27, L1 7.01906e-05, Linf 0.00413531, total time[s] 0.085409 +Converged at iteration 29, L1 8.04856e-05, Linf 0.00531843, total time[s] 0.087382 +Converged at iteration 28, L1 6.65696e-05, Linf 0.00514633, total time[s] 0.087552 +Converged at iteration 32, L1 8.62704e-05, Linf 0.00601516, total time[s] 0.097078 +Converged at iteration 29, L1 6.17683e-05, Linf 0.00172817, total time[s] 0.083134 +Converged at iteration 31, L1 7.6272e-05, Linf 0.0105119, total time[s] 0.090762 +Converged at iteration 31, L1 6.42379e-05, Linf 0.00285537, total time[s] 0.085679 +Converged at iteration 33, L1 7.78732e-05, Linf 0.00430933, total time[s] 0.088349 +Converged at iteration 32, L1 7.40073e-05, Linf 0.0107387, total time[s] 0.0916 +Converged at iteration 34, L1 4.0166e-05, Linf 0.00915131, total time[s] 0.107791 +Converged at iteration 29, L1 7.19828e-05, Linf 0.0191493, total time[s] 0.091475 +Converged at iteration 25, L1 7.72888e-05, Linf 0.00330394, total time[s] 0.067734 +Converged at iteration 38, L1 4.98012e-05, Linf 0.0133366, total time[s] 0.103979 +Converged at iteration 36, L1 5.4495e-05, Linf 0.0123301, total time[s] 0.111321 +Converged at iteration 25, L1 6.57695e-05, Linf 0.00259355, total time[s] 0.067807 +Converged at iteration 26, L1 9.11988e-05, Linf 0.00747841, total time[s] 0.071303 +Converged at iteration 24, L1 9.36863e-05, Linf 0.0118137, total time[s] 0.064392 +Converged at iteration 27, L1 6.20114e-05, Linf 0.0177469, total time[s] 0.073024 +Converged at iteration 21, L1 7.08605e-05, Linf 0.00876254, total time[s] 0.062547 +Converged at iteration 20, L1 6.99488e-05, Linf 0.00324893, total time[s] 0.06067 +Converged at iteration 23, L1 6.63322e-05, Linf 0.0032401, total time[s] 0.075093 +Converged at iteration 25, L1 6.59121e-05, Linf 0.00236583, total time[s] 0.097356 +Converged at iteration 22, L1 4.94628e-05, Linf 0.00196315, total time[s] 0.065516 +Converged at iteration 21, L1 7.00526e-05, Linf 0.00365499, total time[s] 0.066844 +Converged at iteration 33, L1 3.99989e-05, Linf 0.00294682, total time[s] 0.096541 +Converged at iteration 23, L1 6.96757e-05, Linf 0.00439762, total time[s] 0.062884 +Converged at iteration 24, L1 8.20593e-05, Linf 0.00569044, total time[s] 0.06888 +Converged at iteration 26, L1 7.45296e-05, Linf 0.00413155, total time[s] 0.07111 +Converged at iteration 23, L1 6.47806e-05, Linf 0.00251467, total time[s] 0.065479 +Converged at iteration 23, L1 7.07533e-05, Linf 0.00196928, total time[s] 0.065896 +Converged at iteration 27, L1 6.9313e-05, Linf 0.00417558, total time[s] 0.073733 +Converged at iteration 29, L1 8.17763e-05, Linf 0.00549165, total time[s] 0.080097 +Converged at iteration 28, L1 6.74495e-05, Linf 0.0052001, total time[s] 0.074812 +Converged at iteration 32, L1 8.53684e-05, Linf 0.00600546, total time[s] 0.085357 +Converged at iteration 29, L1 6.34102e-05, Linf 0.00176097, total time[s] 0.079158 +Converged at iteration 31, L1 7.52998e-05, Linf 0.0103167, total time[s] 0.082831 +Converged at iteration 31, L1 6.45182e-05, Linf 0.00288195, total time[s] 0.089791 +Converged at iteration 33, L1 7.8775e-05, Linf 0.00434717, total time[s] 0.137098 +Converged at iteration 32, L1 7.65205e-05, Linf 0.0110662, total time[s] 0.087558 +Converged at iteration 34, L1 4.09477e-05, Linf 0.00955564, total time[s] 0.088318 +Converged at iteration 29, L1 7.03036e-05, Linf 0.0188759, total time[s] 0.076138 +Converged at iteration 25, L1 7.95306e-05, Linf 0.00329617, total time[s] 0.067189 +Converged at iteration 38, L1 5.01315e-05, Linf 0.0134384, total time[s] 0.100356 +Converged at iteration 36, L1 5.4842e-05, Linf 0.0125075, total time[s] 0.094053 +Converged at iteration 25, L1 6.47888e-05, Linf 0.00258214, total time[s] 0.100855 +Converged at iteration 26, L1 9.3238e-05, Linf 0.00758067, total time[s] 0.137559 +Converged at iteration 24, L1 9.34672e-05, Linf 0.01171, total time[s] 0.093514 +Converged at iteration 27, L1 6.47016e-05, Linf 0.0180418, total time[s] 0.133968 +Converged at iteration 21, L1 7.06496e-05, Linf 0.00877287, total time[s] 0.111045 +Converged at iteration 20, L1 7.13973e-05, Linf 0.00331553, total time[s] 0.124724 +Converged at iteration 23, L1 6.66133e-05, Linf 0.00326974, total time[s] 0.195948 +Converged at iteration 25, L1 6.65639e-05, Linf 0.00238333, total time[s] 0.160127 +Converged at iteration 22, L1 4.91679e-05, Linf 0.00191834, total time[s] 0.145966 +Converged at iteration 21, L1 7.19488e-05, Linf 0.00369885, total time[s] 0.084383 +Converged at iteration 33, L1 4.05563e-05, Linf 0.00302911, total time[s] 0.165633 +Converged at iteration 23, L1 7.20484e-05, Linf 0.00443913, total time[s] 0.107924 +Converged at iteration 24, L1 8.55663e-05, Linf 0.00858515, total time[s] 0.106633 +Converged at iteration 26, L1 7.51983e-05, Linf 0.00412976, total time[s] 0.097043 +Converged at iteration 23, L1 6.39969e-05, Linf 0.00253399, total time[s] 0.071752 +Converged at iteration 23, L1 7.0381e-05, Linf 0.0019809, total time[s] 0.072123 +Converged at iteration 27, L1 6.86947e-05, Linf 0.00419425, total time[s] 0.086165 +Converged at iteration 29, L1 8.50457e-05, Linf 0.00560636, total time[s] 0.079062 +Converged at iteration 28, L1 6.87296e-05, Linf 0.00522986, total time[s] 0.074765 +Converged at iteration 32, L1 8.46917e-05, Linf 0.00601516, total time[s] 0.08434 +Converged at iteration 29, L1 6.47775e-05, Linf 0.00177625, total time[s] 0.081255 +Converged at iteration 31, L1 7.41923e-05, Linf 0.0102625, total time[s] 0.084833 +Converged at iteration 31, L1 6.47529e-05, Linf 0.00288763, total time[s] 0.088538 +Converged at iteration 33, L1 7.76533e-05, Linf 0.00435891, total time[s] 0.087792 +Converged at iteration 32, L1 7.82643e-05, Linf 0.011251, total time[s] 0.086032 +Converged at iteration 34, L1 4.14429e-05, Linf 0.0098235, total time[s] 0.087841 +Converged at iteration 29, L1 6.95684e-05, Linf 0.0186614, total time[s] 0.075763 +Converged at iteration 25, L1 7.6975e-05, Linf 0.00329845, total time[s] 0.067743 +Converged at iteration 38, L1 5.07759e-05, Linf 0.0136153, total time[s] 0.101299 +Converged at iteration 36, L1 5.55861e-05, Linf 0.012725, total time[s] 0.100782 +Converged at iteration 25, L1 6.28081e-05, Linf 0.00253944, total time[s] 0.077309 +Converged at iteration 26, L1 9.75848e-05, Linf 0.00793882, total time[s] 0.07643 +Converged at iteration 24, L1 8.997e-05, Linf 0.0114566, total time[s] 0.066496 +Converged at iteration 27, L1 6.52852e-05, Linf 0.0191368, total time[s] 0.080085 +Converged at iteration 21, L1 7.16156e-05, Linf 0.00881497, total time[s] 0.066724 +Converged at iteration 20, L1 7.35429e-05, Linf 0.00339104, total time[s] 0.066758 +Converged at iteration 23, L1 6.5157e-05, Linf 0.00338433, total time[s] 0.064632 +Converged at iteration 25, L1 6.63277e-05, Linf 0.00240322, total time[s] 0.067338 +Converged at iteration 22, L1 4.78661e-05, Linf 0.00178767, total time[s] 0.060967 +Converged at iteration 21, L1 7.20624e-05, Linf 0.00379446, total time[s] 0.058026 +Converged at iteration 33, L1 4.2359e-05, Linf 0.00304965, total time[s] 0.094965 +Converged at iteration 23, L1 6.62028e-05, Linf 0.00452101, total time[s] 0.060284 +Converged at iteration 24, L1 8.21102e-05, Linf 0.00577249, total time[s] 0.074389 +Converged at iteration 26, L1 7.52014e-05, Linf 0.00404356, total time[s] 0.068507 +Converged at iteration 23, L1 6.23949e-05, Linf 0.00260361, total time[s] 0.062245 +Converged at iteration 23, L1 7.09356e-05, Linf 0.00204588, total time[s] 0.060359 +Converged at iteration 27, L1 6.7934e-05, Linf 0.00423004, total time[s] 0.091801 +Converged at iteration 29, L1 9.34948e-05, Linf 0.00586618, total time[s] 0.093948 +Converged at iteration 28, L1 6.93025e-05, Linf 0.00530531, total time[s] 0.088654 +Converged at iteration 32, L1 8.3548e-05, Linf 0.00600029, total time[s] 0.098977 +Converged at iteration 29, L1 6.76865e-05, Linf 0.00182097, total time[s] 0.107077 +Converged at iteration 31, L1 7.26005e-05, Linf 0.0107012, total time[s] 0.106422 +Converged at iteration 31, L1 6.39963e-05, Linf 0.00293022, total time[s] 0.087051 +Converged at iteration 33, L1 7.72468e-05, Linf 0.00439914, total time[s] 0.086542 +Converged at iteration 32, L1 8.26195e-05, Linf 0.0116911, total time[s] 0.083102 +Converged at iteration 34, L1 4.27984e-05, Linf 0.0103886, total time[s] 0.088329 +Converged at iteration 29, L1 7.00601e-05, Linf 0.0182442, total time[s] 0.077522 +Converged at iteration 25, L1 7.71392e-05, Linf 0.00330654, total time[s] 0.068079 +Converged at iteration 38, L1 5.10528e-05, Linf 0.0136799, total time[s] 0.106486 +Converged at iteration 36, L1 5.59952e-05, Linf 0.0130853, total time[s] 0.103973 +Converged at iteration 25, L1 6.22159e-05, Linf 0.0025258, total time[s] 0.112871 +Converged at iteration 26, L1 9.95484e-05, Linf 0.00806989, total time[s] 0.078993 +Converged at iteration 24, L1 9.12591e-05, Linf 0.0113573, total time[s] 0.073633 +Converged at iteration 27, L1 6.77767e-05, Linf 0.0197043, total time[s] 0.079434 +Converged at iteration 21, L1 7.33697e-05, Linf 0.00883821, total time[s] 0.061509 +Converged at iteration 20, L1 7.42218e-05, Linf 0.00342678, total time[s] 0.057039 +Converged at iteration 23, L1 6.49713e-05, Linf 0.00340919, total time[s] 0.069346 +Converged at iteration 25, L1 6.66645e-05, Linf 0.00240825, total time[s] 0.067165 +Converged at iteration 22, L1 4.78621e-05, Linf 0.00178593, total time[s] 0.060837 +Converged at iteration 21, L1 7.31626e-05, Linf 0.00383069, total time[s] 0.05848 +Converged at iteration 33, L1 4.333e-05, Linf 0.00307071, total time[s] 0.088086 +Converged at iteration 23, L1 7.81285e-05, Linf 0.013134, total time[s] 0.062174 +Converged at iteration 24, L1 8.62478e-05, Linf 0.00579664, total time[s] 0.065777 +Converged at iteration 26, L1 7.56587e-05, Linf 0.00402425, total time[s] 0.078245 +Converged at iteration 23, L1 6.22286e-05, Linf 0.00261291, total time[s] 0.060621 +Converged at iteration 23, L1 7.16758e-05, Linf 0.00205982, total time[s] 0.069172 +Converged at iteration 27, L1 6.90198e-05, Linf 0.00423918, total time[s] 0.080053 +Converged at iteration 29, L1 9.61238e-05, Linf 0.0059451, total time[s] 0.081506 +Converged at iteration 28, L1 7.15472e-05, Linf 0.00533486, total time[s] 0.078465 +Converged at iteration 32, L1 8.33125e-05, Linf 0.00600179, total time[s] 0.084152 +Converged at iteration 29, L1 6.77591e-05, Linf 0.00183726, total time[s] 0.076829 +Converged at iteration 31, L1 7.43672e-05, Linf 0.0104675, total time[s] 0.083439 +Converged at iteration 31, L1 6.88648e-05, Linf 0.00522584, total time[s] 0.0811 +Converged at iteration 33, L1 7.75279e-05, Linf 0.00441519, total time[s] 0.085817 +Converged at iteration 32, L1 8.4788e-05, Linf 0.0118718, total time[s] 0.083676 +Converged at iteration 34, L1 4.35819e-05, Linf 0.0106585, total time[s] 0.087662 +Converged at iteration 29, L1 6.85619e-05, Linf 0.0180458, total time[s] 0.076239 +Converged at iteration 25, L1 7.8443e-05, Linf 0.00331292, total time[s] 0.066743 +Converged at iteration 38, L1 5.17176e-05, Linf 0.0137631, total time[s] 0.099056 +Converged at iteration 36, L1 5.6901e-05, Linf 0.0134308, total time[s] 0.103677 +Converged at iteration 25, L1 6.11226e-05, Linf 0.00251048, total time[s] 0.068904 +Converged at iteration 27, L1 4.16721e-05, Linf 0.00418333, total time[s] 0.071826 +Converged at iteration 24, L1 8.68294e-05, Linf 0.0111507, total time[s] 0.064876 +Converged at iteration 27, L1 6.90162e-05, Linf 0.0203835, total time[s] 0.075549 +Converged at iteration 21, L1 7.44023e-05, Linf 0.00887136, total time[s] 0.06895 +Converged at iteration 20, L1 7.37255e-05, Linf 0.0034801, total time[s] 0.075031 +Converged at iteration 23, L1 6.46621e-05, Linf 0.00351281, total time[s] 0.064298 +Converged at iteration 25, L1 6.66803e-05, Linf 0.00243087, total time[s] 0.076941 +Converged at iteration 22, L1 4.77098e-05, Linf 0.00175303, total time[s] 0.07216 +Converged at iteration 21, L1 7.61881e-05, Linf 0.0103784, total time[s] 0.099418 +Converged at iteration 33, L1 4.46383e-05, Linf 0.00297469, total time[s] 0.103565 +Converged at iteration 23, L1 7.8138e-05, Linf 0.0046326, total time[s] 0.073685 +Converged at iteration 24, L1 8.67131e-05, Linf 0.00585541, total time[s] 0.074846 +Converged at iteration 26, L1 7.50747e-05, Linf 0.00395312, total time[s] 0.086399 +Converged at iteration 23, L1 6.11441e-05, Linf 0.00266333, total time[s] 0.099439 +Converged at iteration 23, L1 7.25191e-05, Linf 0.00210733, total time[s] 0.082183 +Converged at iteration 27, L1 6.76015e-05, Linf 0.00422262, total time[s] 0.0872 +Converged at iteration 30, L1 5.75888e-05, Linf 0.00306363, total time[s] 0.081671 +Converged at iteration 28, L1 7.24784e-05, Linf 0.00540118, total time[s] 0.07783 +Converged at iteration 32, L1 8.20155e-05, Linf 0.00598596, total time[s] 0.088992 +Converged at iteration 29, L1 6.97124e-05, Linf 0.00186787, total time[s] 0.080528 +Converged at iteration 31, L1 7.64391e-05, Linf 0.0104488, total time[s] 0.091762 +Converged at iteration 31, L1 7.08123e-05, Linf 0.00299334, total time[s] 0.097057 +Converged at iteration 33, L1 7.72706e-05, Linf 0.00443021, total time[s] 0.086769 +Converged at iteration 32, L1 8.81685e-05, Linf 0.0122105, total time[s] 0.08328 +Converged at iteration 34, L1 4.45413e-05, Linf 0.0111384, total time[s] 0.089569 +Converged at iteration 29, L1 6.30447e-05, Linf 0.0176942, total time[s] 0.082563 +Converged at iteration 25, L1 7.70579e-05, Linf 0.00333842, total time[s] 0.067055 +Converged at iteration 38, L1 5.14754e-05, Linf 0.013789, total time[s] 0.10171 +Converged at iteration 36, L1 5.69153e-05, Linf 0.0135837, total time[s] 0.100664 +Converged at iteration 25, L1 6.11516e-05, Linf 0.00249169, total time[s] 0.068371 +Converged at iteration 27, L1 4.23255e-05, Linf 0.00425059, total time[s] 0.074564 +Converged at iteration 24, L1 8.56718e-05, Linf 0.0110355, total time[s] 0.067382 +Converged at iteration 27, L1 6.92683e-05, Linf 0.0207672, total time[s] 0.073832 +Converged at iteration 21, L1 7.46539e-05, Linf 0.00890122, total time[s] 0.058799 +Converged at iteration 20, L1 7.41242e-05, Linf 0.00353641, total time[s] 0.057065 +Converged at iteration 23, L1 6.44265e-05, Linf 0.00352766, total time[s] 0.066008 +Converged at iteration 25, L1 6.69344e-05, Linf 0.002446, total time[s] 0.072648 +Converged at iteration 21, L1 9.98308e-05, Linf 0.00380076, total time[s] 0.05989 +Converged at iteration 21, L1 7.46853e-05, Linf 0.00393062, total time[s] 0.059442 +Converged at iteration 33, L1 4.47544e-05, Linf 0.00308456, total time[s] 0.087113 +Converged at iteration 23, L1 6.89267e-05, Linf 0.00465803, total time[s] 0.063768 +Converged at iteration 24, L1 8.43243e-05, Linf 0.0058711, total time[s] 0.070456 +Converged at iteration 26, L1 7.56153e-05, Linf 0.00394461, total time[s] 0.077556 +Converged at iteration 23, L1 6.08766e-05, Linf 0.00268656, total time[s] 0.064167 +Converged at iteration 23, L1 7.3133e-05, Linf 0.00212605, total time[s] 0.069365 +Converged at iteration 27, L1 6.66142e-05, Linf 0.00418547, total time[s] 0.079539 +Converged at iteration 30, L1 6.21449e-05, Linf 0.00311773, total time[s] 0.088707 +Converged at iteration 28, L1 7.15319e-05, Linf 0.005433, total time[s] 0.071718 +Converged at iteration 32, L1 8.14542e-05, Linf 0.00598622, total time[s] 0.082476 +Converged at iteration 29, L1 7.62792e-05, Linf 0.00188396, total time[s] 0.076406 +Converged at iteration 31, L1 7.38248e-05, Linf 0.0102946, total time[s] 0.079941 +Converged at iteration 31, L1 6.81983e-05, Linf 0.00298748, total time[s] 0.07946 +Converged at iteration 33, L1 7.88139e-05, Linf 0.00443828, total time[s] 0.086899 +Converged at iteration 32, L1 9.07147e-05, Linf 0.0123948, total time[s] 0.086374 +Converged at iteration 34, L1 4.50823e-05, Linf 0.0114421, total time[s] 0.089041 +Converged at iteration 29, L1 7.01235e-05, Linf 0.0174834, total time[s] 0.07578 +Converged at iteration 25, L1 7.76072e-05, Linf 0.00336039, total time[s] 0.066815 +Converged at iteration 38, L1 5.17429e-05, Linf 0.013802, total time[s] 0.09737 +Converged at iteration 37, L1 7.01685e-05, Linf 0.00512899, total time[s] 0.099966 +Converged at iteration 25, L1 6.19134e-05, Linf 0.00257922, total time[s] 0.069763 +Converged at iteration 27, L1 4.38308e-05, Linf 0.00438784, total time[s] 0.073753 +Converged at iteration 24, L1 8.36765e-05, Linf 0.0108551, total time[s] 0.066182 +Converged at iteration 27, L1 7.1906e-05, Linf 0.021565, total time[s] 0.076592 +Converged at iteration 21, L1 7.65316e-05, Linf 0.00880483, total time[s] 0.060396 +Converged at iteration 20, L1 7.48301e-05, Linf 0.00356657, total time[s] 0.057316 +Converged at iteration 23, L1 6.45196e-05, Linf 0.00361754, total time[s] 0.072484 +Converged at iteration 25, L1 6.73143e-05, Linf 0.00245335, total time[s] 0.067672 +Converged at iteration 21, L1 9.91917e-05, Linf 0.00378822, total time[s] 0.061684 +Converged at iteration 21, L1 7.6567e-05, Linf 0.00398733, total time[s] 0.056282 +Converged at iteration 33, L1 4.61836e-05, Linf 0.00300188, total time[s] 0.089137 +Converged at iteration 23, L1 7.77733e-05, Linf 0.00659643, total time[s] 0.079771 +Converged at iteration 24, L1 9.07536e-05, Linf 0.00593069, total time[s] 0.083136 +Converged at iteration 26, L1 7.61887e-05, Linf 0.00388942, total time[s] 0.080415 +Converged at iteration 23, L1 6.04512e-05, Linf 0.00273771, total time[s] 0.064898 +Converged at iteration 23, L1 7.51633e-05, Linf 0.00214094, total time[s] 0.061871 +Converged at iteration 27, L1 6.81865e-05, Linf 0.00779564, total time[s] 0.072535 +Converged at iteration 30, L1 6.38358e-05, Linf 0.00324618, total time[s] 0.09211 +Converged at iteration 28, L1 7.30412e-05, Linf 0.00549435, total time[s] 0.079443 +Converged at iteration 32, L1 8.01815e-05, Linf 0.00597109, total time[s] 0.090312 +Converged at iteration 29, L1 7.18853e-05, Linf 0.0019138, total time[s] 0.096606 +Converged at iteration 31, L1 6.92304e-05, Linf 0.0102763, total time[s] 0.105012 +Converged at iteration 31, L1 6.66862e-05, Linf 0.00302091, total time[s] 0.097619 +Converged at iteration 33, L1 7.88695e-05, Linf 0.0065365, total time[s] 0.116745 +Converged at iteration 32, L1 9.35357e-05, Linf 0.0126894, total time[s] 0.107275 +Converged at iteration 34, L1 4.59794e-05, Linf 0.0119031, total time[s] 0.11543 +Converged at iteration 29, L1 6.0294e-05, Linf 0.0171773, total time[s] 0.079339 +Converged at iteration 25, L1 7.80134e-05, Linf 0.0033976, total time[s] 0.068671 +Converged at iteration 38, L1 5.18857e-05, Linf 0.0140211, total time[s] 0.207163 +Converged at iteration 36, L1 5.77628e-05, Linf 0.0140324, total time[s] 0.115228 +Converged at iteration 25, L1 6.10099e-05, Linf 0.00247198, total time[s] 0.066185 +Converged at iteration 27, L1 4.38337e-05, Linf 0.00446426, total time[s] 0.071367 +Converged at iteration 24, L1 8.2323e-05, Linf 0.0107355, total time[s] 0.064579 +Converged at iteration 27, L1 7.21773e-05, Linf 0.0219817, total time[s] 0.076332 +Converged at iteration 21, L1 7.64069e-05, Linf 0.00896652, total time[s] 0.064425 +Converged at iteration 20, L1 7.59999e-05, Linf 0.00362012, total time[s] 0.075875 +Converged at iteration 23, L1 6.3881e-05, Linf 0.00364959, total time[s] 0.091026 +Converged at iteration 25, L1 6.78061e-05, Linf 0.00247253, total time[s] 0.084855 +Converged at iteration 21, L1 9.91302e-05, Linf 0.00378682, total time[s] 0.067512 +Converged at iteration 21, L1 7.59037e-05, Linf 0.00402164, total time[s] 0.067723 +Converged at iteration 33, L1 4.66507e-05, Linf 0.00301248, total time[s] 0.10098 +Converged at iteration 23, L1 6.98377e-05, Linf 0.00475268, total time[s] 0.06782 +Converged at iteration 24, L1 8.68451e-05, Linf 0.00596401, total time[s] 0.07558 +Converged at iteration 26, L1 7.65621e-05, Linf 0.0038873, total time[s] 0.081766 +Converged at iteration 23, L1 6.01104e-05, Linf 0.00274992, total time[s] 0.073957 +Converged at iteration 23, L1 7.54937e-05, Linf 0.00217537, total time[s] 0.065613 +Converged at iteration 27, L1 6.4954e-05, Linf 0.00414291, total time[s] 0.072125 +Converged at iteration 30, L1 6.49543e-05, Linf 0.00331951, total time[s] 0.082128 +Converged at iteration 28, L1 7.25177e-05, Linf 0.00551645, total time[s] 0.078805 +Converged at iteration 32, L1 8.00153e-05, Linf 0.00597401, total time[s] 0.100339 +Converged at iteration 29, L1 7.21408e-05, Linf 0.00192941, total time[s] 0.10751 +Converged at iteration 31, L1 6.86278e-05, Linf 0.0102361, total time[s] 0.115579 +Converged at iteration 31, L1 6.81967e-05, Linf 0.00302548, total time[s] 0.099535 +Converged at iteration 33, L1 7.64182e-05, Linf 0.00444847, total time[s] 0.108541 +Converged at iteration 32, L1 9.60323e-05, Linf 0.0128728, total time[s] 0.090104 +Converged at iteration 34, L1 4.70912e-05, Linf 0.0121388, total time[s] 0.094162 +Converged at iteration 29, L1 5.91269e-05, Linf 0.0169604, total time[s] 0.076884 +Converged at iteration 25, L1 8.203e-05, Linf 0.00341513, total time[s] 0.06651 +Converged at iteration 38, L1 5.26565e-05, Linf 0.0140016, total time[s] 0.098185 +Converged at iteration 36, L1 5.84996e-05, Linf 0.0143113, total time[s] 0.109151 +Converged at iteration 25, L1 6.12943e-05, Linf 0.00244339, total time[s] 0.080431 +Converged at iteration 27, L1 4.7968e-05, Linf 0.0127193, total time[s] 0.082755 +Converged at iteration 24, L1 8.07287e-05, Linf 0.0105207, total time[s] 0.069917 +Converged at iteration 27, L1 7.57317e-05, Linf 0.0228708, total time[s] 0.076785 +Converged at iteration 21, L1 7.83359e-05, Linf 0.00900313, total time[s] 0.064419 +Converged at iteration 20, L1 7.65433e-05, Linf 0.00366671, total time[s] 0.071106 +Converged at iteration 23, L1 6.3505e-05, Linf 0.00373587, total time[s] 0.067579 +Converged at iteration 25, L1 6.79959e-05, Linf 0.0024915, total time[s] 0.066088 +Converged at iteration 21, L1 9.8919e-05, Linf 0.00377451, total time[s] 0.057392 +Converged at iteration 21, L1 7.7628e-05, Linf 0.0040869, total time[s] 0.056908 +Converged at iteration 33, L1 4.85622e-05, Linf 0.00302472, total time[s] 0.08581 +Converged at iteration 23, L1 7.66814e-05, Linf 0.0048241, total time[s] 0.062346 +Converged at iteration 24, L1 9.06614e-05, Linf 0.0120518, total time[s] 0.064644 +Converged at iteration 26, L1 7.65517e-05, Linf 0.0038118, total time[s] 0.069263 +Converged at iteration 23, L1 6.00531e-05, Linf 0.00280024, total time[s] 0.060848 +Converged at iteration 23, L1 7.73182e-05, Linf 0.00220806, total time[s] 0.062114 +Converged at iteration 27, L1 6.32682e-05, Linf 0.00418046, total time[s] 0.072821 +Converged at iteration 30, L1 6.59074e-05, Linf 0.00344747, total time[s] 0.078478 +Converged at iteration 28, L1 7.44473e-05, Linf 0.00559966, total time[s] 0.074577 +Converged at iteration 32, L1 7.85614e-05, Linf 0.00595503, total time[s] 0.084761 +Converged at iteration 29, L1 7.46314e-05, Linf 0.00196237, total time[s] 0.076137 +Converged at iteration 31, L1 7.16624e-05, Linf 0.0103501, total time[s] 0.080866 +Converged at iteration 31, L1 6.79849e-05, Linf 0.00304376, total time[s] 0.081469 +Converged at iteration 33, L1 7.61159e-05, Linf 0.00445629, total time[s] 0.084986 +Converged at iteration 32, L1 9.91409e-05, Linf 0.0131845, total time[s] 0.082113 +Converged at iteration 34, L1 4.83093e-05, Linf 0.0126972, total time[s] 0.086877 +Converged at iteration 29, L1 6.98213e-05, Linf 0.016625, total time[s] 0.075745 +Converged at iteration 25, L1 8.11892e-05, Linf 0.00461772, total time[s] 0.066423 +Converged at iteration 40, L1 6.71404e-05, Linf 0.0036746, total time[s] 0.107209 +Converged at iteration 35, L1 7.62129e-05, Linf 0.00343211, total time[s] 0.094464 +Converged at iteration 30, L1 9.62475e-05, Linf 0.00432624, total time[s] 0.079703 +Converged at iteration 31, L1 6.19659e-05, Linf 0.00502563, total time[s] 0.078399 +Converged at iteration 27, L1 6.25942e-05, Linf 0.00499554, total time[s] 0.069447 +Converged at iteration 22, L1 8.58686e-05, Linf 0.00448845, total time[s] 0.057726 +Converged at iteration 20, L1 9.60265e-05, Linf 0.00397842, total time[s] 0.072068 +Converged at iteration 24, L1 8.8477e-05, Linf 0.00473009, total time[s] 0.073277 +Converged at iteration 28, L1 7.42478e-05, Linf 0.00445904, total time[s] 0.094988 +Converged at iteration 26, L1 8.15006e-05, Linf 0.0054679, total time[s] 0.083001 +Converged at iteration 22, L1 7.40807e-05, Linf 0.00508717, total time[s] 0.068593 +Converged at iteration 19, L1 6.6328e-05, Linf 0.00393142, total time[s] 0.069232 +Converged at iteration 30, L1 7.98721e-05, Linf 0.00329632, total time[s] 0.094582 +Converged at iteration 20, L1 8.44264e-05, Linf 0.00455015, total time[s] 0.056618 +Converged at iteration 24, L1 7.11479e-05, Linf 0.00463719, total time[s] 0.064247 +Converged at iteration 31, L1 8.93437e-05, Linf 0.00570131, total time[s] 0.088304 +Converged at iteration 27, L1 9.91905e-05, Linf 0.00569837, total time[s] 0.072087 +Converged at iteration 24, L1 8.78966e-05, Linf 0.00465013, total time[s] 0.071137 +Converged at iteration 23, L1 9.21791e-05, Linf 0.0041019, total time[s] 0.064193 +Converged at iteration 26, L1 7.22009e-05, Linf 0.00446075, total time[s] 0.069545 +Converged at iteration 29, L1 7.81609e-05, Linf 0.00479609, total time[s] 0.077106 +Converged at iteration 34, L1 7.09001e-05, Linf 0.00422701, total time[s] 0.088561 +Converged at iteration 30, L1 9.39462e-05, Linf 0.00442601, total time[s] 0.078852 +Converged at iteration 28, L1 9.49935e-05, Linf 0.00310976, total time[s] 0.075414 +Converged at iteration 32, L1 9.4365e-05, Linf 0.00374023, total time[s] 0.086423 +Converged at iteration 37, L1 7.34715e-05, Linf 0.00334282, total time[s] 0.098477 +Converged at iteration 33, L1 8.44828e-05, Linf 0.00469111, total time[s] 0.091174 +Converged at iteration 28, L1 9.67085e-05, Linf 0.00426361, total time[s] 0.081739 +Converged at iteration 24, L1 8.8298e-05, Linf 0.00325321, total time[s] 0.069777 +Converged at iteration 26, L1 9.00223e-05, Linf 0.00382058, total time[s] 0.068671 +Converged at iteration 40, L1 6.63932e-05, Linf 0.00389533, total time[s] 0.107385 +Converged at iteration 35, L1 8.6912e-05, Linf 0.00360883, total time[s] 0.097745 +Converged at iteration 30, L1 9.23099e-05, Linf 0.00416155, total time[s] 0.086856 +Converged at iteration 31, L1 6.17517e-05, Linf 0.00504684, total time[s] 0.0794 +Converged at iteration 26, L1 9.84017e-05, Linf 0.00577611, total time[s] 0.069073 +Converged at iteration 22, L1 7.164e-05, Linf 0.00418204, total time[s] 0.061424 +Converged at iteration 21, L1 6.41693e-05, Linf 0.00346832, total time[s] 0.069405 +Converged at iteration 24, L1 8.94112e-05, Linf 0.00495039, total time[s] 0.073521 +Converged at iteration 28, L1 7.32133e-05, Linf 0.00443933, total time[s] 0.083861 +Converged at iteration 26, L1 8.01775e-05, Linf 0.00536403, total time[s] 0.080418 +Converged at iteration 22, L1 7.01734e-05, Linf 0.00441496, total time[s] 0.069894 +Converged at iteration 19, L1 5.49463e-05, Linf 0.00332634, total time[s] 0.068124 +Converged at iteration 30, L1 9.5252e-05, Linf 0.00330734, total time[s] 0.097686 +Converged at iteration 20, L1 8.42594e-05, Linf 0.00472687, total time[s] 0.054944 +Converged at iteration 24, L1 7.14151e-05, Linf 0.00475228, total time[s] 0.063719 +Converged at iteration 31, L1 9.41983e-05, Linf 0.00482002, total time[s] 0.080422 +Converged at iteration 27, L1 9.412e-05, Linf 0.00468425, total time[s] 0.070733 +Converged at iteration 24, L1 8.51901e-05, Linf 0.00428119, total time[s] 0.064787 +Converged at iteration 23, L1 9.23985e-05, Linf 0.00432074, total time[s] 0.061801 +Converged at iteration 26, L1 7.12978e-05, Linf 0.00465377, total time[s] 0.070339 +Converged at iteration 29, L1 7.5336e-05, Linf 0.00488639, total time[s] 0.125278 +Converged at iteration 34, L1 8.13386e-05, Linf 0.00406125, total time[s] 0.110662 +Converged at iteration 31, L1 7.17555e-05, Linf 0.00355191, total time[s] 0.081666 +Converged at iteration 29, L1 7.0312e-05, Linf 0.002724, total time[s] 0.080407 +Converged at iteration 32, L1 8.22014e-05, Linf 0.00354588, total time[s] 0.083565 +Converged at iteration 36, L1 8.75643e-05, Linf 0.00357845, total time[s] 0.103371 +Converged at iteration 33, L1 8.33347e-05, Linf 0.00484763, total time[s] 0.089792 +Converged at iteration 28, L1 9.13741e-05, Linf 0.00413151, total time[s] 0.080219 +Converged at iteration 24, L1 8.03499e-05, Linf 0.00290884, total time[s] 0.065644 +Converged at iteration 26, L1 8.42008e-05, Linf 0.00392619, total time[s] 0.076764 +Converged at iteration 40, L1 6.81624e-05, Linf 0.00368565, total time[s] 0.126132 +Converged at iteration 35, L1 7.70833e-05, Linf 0.00343134, total time[s] 0.172302 +Converged at iteration 30, L1 9.68013e-05, Linf 0.00432339, total time[s] 0.106933 +Converged at iteration 31, L1 6.23399e-05, Linf 0.00500241, total time[s] 0.09448 +Converged at iteration 27, L1 6.37054e-05, Linf 0.00500689, total time[s] 0.109161 +Converged at iteration 22, L1 8.62852e-05, Linf 0.00444485, total time[s] 0.124434 +Converged at iteration 20, L1 9.60286e-05, Linf 0.00397838, total time[s] 0.078094 +Converged at iteration 24, L1 8.84558e-05, Linf 0.00482814, total time[s] 0.079487 +Converged at iteration 28, L1 7.41618e-05, Linf 0.00445905, total time[s] 0.078268 +Converged at iteration 26, L1 8.3735e-05, Linf 0.0100966, total time[s] 0.077608 +Converged at iteration 22, L1 7.49002e-05, Linf 0.00509521, total time[s] 0.064713 +Converged at iteration 19, L1 6.64916e-05, Linf 0.0039212, total time[s] 0.049744 +Converged at iteration 30, L1 8.02929e-05, Linf 0.0033021, total time[s] 0.077161 +Converged at iteration 20, L1 8.44972e-05, Linf 0.0045501, total time[s] 0.053156 +Converged at iteration 24, L1 7.09535e-05, Linf 0.00463156, total time[s] 0.064014 +Converged at iteration 31, L1 8.98111e-05, Linf 0.00569205, total time[s] 0.081045 +Converged at iteration 27, L1 9.9179e-05, Linf 0.00569807, total time[s] 0.069793 +Converged at iteration 24, L1 8.83795e-05, Linf 0.00465023, total time[s] 0.063483 +Converged at iteration 23, L1 9.22538e-05, Linf 0.00410197, total time[s] 0.062282 +Converged at iteration 26, L1 7.22414e-05, Linf 0.00446122, total time[s] 0.069636 +Converged at iteration 29, L1 7.81278e-05, Linf 0.00479193, total time[s] 0.073409 +Converged at iteration 34, L1 7.09426e-05, Linf 0.00431194, total time[s] 0.085134 +Converged at iteration 30, L1 9.39677e-05, Linf 0.00449729, total time[s] 0.12423 +Converged at iteration 28, L1 9.50512e-05, Linf 0.00310978, total time[s] 0.119285 +Converged at iteration 32, L1 9.4325e-05, Linf 0.00372059, total time[s] 0.089465 +Converged at iteration 37, L1 7.34203e-05, Linf 0.00327793, total time[s] 0.098558 +Converged at iteration 33, L1 8.45901e-05, Linf 0.0046457, total time[s] 0.091646 +Converged at iteration 28, L1 9.65525e-05, Linf 0.00430177, total time[s] 0.074574 +Converged at iteration 24, L1 8.83004e-05, Linf 0.0032507, total time[s] 0.063559 +Converged at iteration 26, L1 9.00452e-05, Linf 0.0038395, total time[s] 0.178994 +Converged at iteration 40, L1 6.64042e-05, Linf 0.00393404, total time[s] 0.13333 +Converged at iteration 35, L1 8.74344e-05, Linf 0.00361081, total time[s] 0.088092 +Converged at iteration 30, L1 9.18576e-05, Linf 0.00418105, total time[s] 0.083101 +Converged at iteration 31, L1 6.18452e-05, Linf 0.00505109, total time[s] 0.084674 +Converged at iteration 26, L1 9.85574e-05, Linf 0.0057813, total time[s] 0.072736 +Converged at iteration 22, L1 7.19391e-05, Linf 0.00418869, total time[s] 0.058567 +Converged at iteration 21, L1 6.41059e-05, Linf 0.00348498, total time[s] 0.063 +Converged at iteration 24, L1 8.97701e-05, Linf 0.00494958, total time[s] 0.063383 +Converged at iteration 28, L1 7.37483e-05, Linf 0.00443346, total time[s] 0.07312 +Converged at iteration 26, L1 8.08334e-05, Linf 0.00534707, total time[s] 0.06833 +Converged at iteration 22, L1 7.02762e-05, Linf 0.00441459, total time[s] 0.058719 +Converged at iteration 19, L1 5.55072e-05, Linf 0.00343939, total time[s] 0.071074 +Converged at iteration 30, L1 9.53726e-05, Linf 0.00334418, total time[s] 0.088593 +Converged at iteration 20, L1 8.49933e-05, Linf 0.00472302, total time[s] 0.06527 +Converged at iteration 24, L1 7.23767e-05, Linf 0.00581796, total time[s] 0.068957 +Converged at iteration 31, L1 9.42933e-05, Linf 0.00481856, total time[s] 0.096779 +Converged at iteration 27, L1 9.41259e-05, Linf 0.0046828, total time[s] 0.081088 +Converged at iteration 24, L1 8.52413e-05, Linf 0.00429595, total time[s] 0.086044 +Converged at iteration 23, L1 9.24547e-05, Linf 0.00432598, total time[s] 0.058032 +Converged at iteration 26, L1 7.12791e-05, Linf 0.00464387, total time[s] 0.066763 +Converged at iteration 29, L1 7.58357e-05, Linf 0.00487185, total time[s] 0.073925 +Converged at iteration 34, L1 8.1394e-05, Linf 0.00406034, total time[s] 0.094525 +Converged at iteration 31, L1 7.17006e-05, Linf 0.00359763, total time[s] 0.080592 +Converged at iteration 29, L1 7.05579e-05, Linf 0.002724, total time[s] 0.074845 +Converged at iteration 32, L1 8.29135e-05, Linf 0.00354607, total time[s] 0.079783 +Converged at iteration 36, L1 8.72595e-05, Linf 0.00357984, total time[s] 0.089575 +Converged at iteration 33, L1 8.35407e-05, Linf 0.00485644, total time[s] 0.082933 +Converged at iteration 28, L1 9.10404e-05, Linf 0.00409195, total time[s] 0.07183 +Converged at iteration 24, L1 8.03057e-05, Linf 0.00291552, total time[s] 0.064071 +Converged at iteration 26, L1 8.40491e-05, Linf 0.00392414, total time[s] 0.068862 +Converged at iteration 39, L1 9.99301e-05, Linf 0.00489763, total time[s] 0.09545 +Converged at iteration 35, L1 9.66457e-05, Linf 0.00382192, total time[s] 0.091416 +Converged at iteration 30, L1 7.68443e-05, Linf 0.00421151, total time[s] 0.076786 +Converged at iteration 31, L1 6.14084e-05, Linf 0.00506454, total time[s] 0.077983 +Converged at iteration 26, L1 9.11903e-05, Linf 0.00568961, total time[s] 0.072722 +Converged at iteration 21, L1 9.60878e-05, Linf 0.00461215, total time[s] 0.056156 +Converged at iteration 21, L1 6.92315e-05, Linf 0.00393124, total time[s] 0.091092 +Converged at iteration 24, L1 8.33004e-05, Linf 0.00519788, total time[s] 0.08856 +Converged at iteration 28, L1 6.83576e-05, Linf 0.00441191, total time[s] 0.09948 +Converged at iteration 26, L1 8.12497e-05, Linf 0.00430191, total time[s] 0.101534 +Converged at iteration 21, L1 8.50956e-05, Linf 0.00433736, total time[s] 0.073711 +Converged at iteration 18, L1 7.35782e-05, Linf 0.00298992, total time[s] 0.068363 +Converged at iteration 31, L1 7.48991e-05, Linf 0.0026824, total time[s] 0.104303 +Converged at iteration 20, L1 8.18465e-05, Linf 0.00494545, total time[s] 0.062446 +Converged at iteration 24, L1 6.88721e-05, Linf 0.00500123, total time[s] 0.07437 +Converged at iteration 30, L1 9.41788e-05, Linf 0.00345649, total time[s] 0.09622 +Converged at iteration 25, L1 9.01625e-05, Linf 0.00466695, total time[s] 0.063523 +Converged at iteration 23, L1 8.35938e-05, Linf 0.00394558, total time[s] 0.065708 +Converged at iteration 23, L1 9.32404e-05, Linf 0.00455938, total time[s] 0.06282 +Converged at iteration 26, L1 6.89641e-05, Linf 0.00492276, total time[s] 0.075161 +Converged at iteration 29, L1 7.12672e-05, Linf 0.00485981, total time[s] 0.077595 +Converged at iteration 32, L1 8.57784e-05, Linf 0.00350128, total time[s] 0.079916 +Converged at iteration 31, L1 7.25423e-05, Linf 0.00303287, total time[s] 0.078156 +Converged at iteration 29, L1 7.74151e-05, Linf 0.00291209, total time[s] 0.076104 +Converged at iteration 32, L1 7.55812e-05, Linf 0.00337438, total time[s] 0.081831 +Converged at iteration 35, L1 9.72523e-05, Linf 0.00405321, total time[s] 0.091255 +Converged at iteration 33, L1 8.10797e-05, Linf 0.00505952, total time[s] 0.256989 +Converged at iteration 28, L1 8.41463e-05, Linf 0.00398757, total time[s] 0.082564 +Converged at iteration 24, L1 7.80455e-05, Linf 0.00256158, total time[s] 0.107531 +Converged at iteration 26, L1 8.3647e-05, Linf 0.00405315, total time[s] 0.093329 +Converged at iteration 39, L1 9.33947e-05, Linf 0.00548889, total time[s] 0.121134 +Converged at iteration 36, L1 7.24076e-05, Linf 0.00384525, total time[s] 0.121672 +Converged at iteration 27, L1 5.17456e-05, Linf 0.00564357, total time[s] 0.07445 +Converged at iteration 31, L1 6.06931e-05, Linf 0.00508905, total time[s] 0.084663 +Converged at iteration 26, L1 7.63468e-05, Linf 0.00544335, total time[s] 0.066814 +Converged at iteration 21, L1 7.21062e-05, Linf 0.00380746, total time[s] 0.093482 +Converged at iteration 20, L1 6.90281e-05, Linf 0.00502958, total time[s] 0.077247 +Converged at iteration 22, L1 7.53609e-05, Linf 0.00745863, total time[s] 0.079866 +Converged at iteration 26, L1 9.72587e-05, Linf 0.00651816, total time[s] 0.098864 +Converged at iteration 25, L1 7.48964e-05, Linf 0.00412523, total time[s] 0.101333 +Converged at iteration 20, L1 8.85205e-05, Linf 0.00555822, total time[s] 0.061242 +Converged at iteration 17, L1 8.52409e-05, Linf 0.00400211, total time[s] 0.075331 +Converged at iteration 31, L1 9.16929e-05, Linf 0.00277124, total time[s] 0.081579 +Converged at iteration 20, L1 6.65179e-05, Linf 0.00524998, total time[s] 0.05332 +Converged at iteration 24, L1 6.21681e-05, Linf 0.00577283, total time[s] 0.063209 +Converged at iteration 28, L1 7.06891e-05, Linf 0.00373892, total time[s] 0.074847 +Converged at iteration 23, L1 9.56472e-05, Linf 0.00710109, total time[s] 0.059876 +Converged at iteration 21, L1 9.33369e-05, Linf 0.00485117, total time[s] 0.063226 +Converged at iteration 23, L1 7.86796e-05, Linf 0.00427955, total time[s] 0.06067 +Converged at iteration 25, L1 9.93878e-05, Linf 0.00625544, total time[s] 0.06602 +Converged at iteration 28, L1 9.8307e-05, Linf 0.00586776, total time[s] 0.07159 +Converged at iteration 30, L1 6.95695e-05, Linf 0.00575234, total time[s] 0.076392 +Converged at iteration 28, L1 8.30672e-05, Linf 0.00350225, total time[s] 0.074374 +Converged at iteration 29, L1 8.84436e-05, Linf 0.00330593, total time[s] 0.077733 +Converged at iteration 31, L1 6.97276e-05, Linf 0.00287773, total time[s] 0.08014 +Converged at iteration 31, L1 9.12329e-05, Linf 0.00461576, total time[s] 0.079545 +Converged at iteration 33, L1 7.43888e-05, Linf 0.00530488, total time[s] 0.082407 +Converged at iteration 28, L1 7.04942e-05, Linf 0.00368841, total time[s] 0.070529 +Converged at iteration 24, L1 8.81631e-05, Linf 0.00186804, total time[s] 0.066476 +Converged at iteration 25, L1 6.97651e-05, Linf 0.00420999, total time[s] 0.063182 +Converged at iteration 39, L1 7.84417e-05, Linf 0.00659513, total time[s] 0.098448 +Converged at iteration 36, L1 7.39818e-05, Linf 0.00526415, total time[s] 0.098547 +Converged at iteration 24, L1 7.4989e-05, Linf 0.00411351, total time[s] 0.062544 +Converged at iteration 31, L1 5.84228e-05, Linf 0.00509162, total time[s] 0.078595 +Converged at iteration 25, L1 8.72466e-05, Linf 0.00571572, total time[s] 0.064991 +Converged at iteration 20, L1 9.16069e-05, Linf 0.00380211, total time[s] 0.053738 +Converged at iteration 19, L1 6.71824e-05, Linf 0.00437689, total time[s] 0.064694 +Converged at iteration 20, L1 9.17447e-05, Linf 0.00662009, total time[s] 0.074671 +Converged at iteration 24, L1 7.94261e-05, Linf 0.00492142, total time[s] 0.088318 +Converged at iteration 24, L1 7.63745e-05, Linf 0.00492114, total time[s] 0.104675 +Converged at iteration 20, L1 6.05012e-05, Linf 0.00519215, total time[s] 0.090965 +Converged at iteration 17, L1 5.23764e-05, Linf 0.00271902, total time[s] 0.069271 +Converged at iteration 32, L1 6.88626e-05, Linf 0.00256264, total time[s] 0.112477 +Converged at iteration 19, L1 9.36241e-05, Linf 0.00720358, total time[s] 0.063448 +Converged at iteration 23, L1 7.83803e-05, Linf 0.00666727, total time[s] 0.079746 +Converged at iteration 26, L1 8.17412e-05, Linf 0.00603273, total time[s] 0.081608 +Converged at iteration 23, L1 5.79695e-05, Linf 0.00603964, total time[s] 0.06685 +Converged at iteration 20, L1 8.30729e-05, Linf 0.00552724, total time[s] 0.059092 +Converged at iteration 22, L1 9.94638e-05, Linf 0.00479483, total time[s] 0.070032 +Converged at iteration 25, L1 8.48529e-05, Linf 0.00440043, total time[s] 0.079073 +Converged at iteration 28, L1 7.85047e-05, Linf 0.00358719, total time[s] 0.096153 +Converged at iteration 29, L1 7.54401e-05, Linf 0.00611356, total time[s] 0.101195 +Converged at iteration 27, L1 7.35715e-05, Linf 0.00401961, total time[s] 0.104186 +Converged at iteration 29, L1 7.65653e-05, Linf 0.00380602, total time[s] 0.117723 +Converged at iteration 29, L1 9.18122e-05, Linf 0.00277216, total time[s] 0.124052 +Converged at iteration 28, L1 8.41879e-05, Linf 0.00273967, total time[s] 0.091979 +Converged at iteration 33, L1 6.18566e-05, Linf 0.00584838, total time[s] 0.111192 +Converged at iteration 27, L1 6.96723e-05, Linf 0.00334635, total time[s] 0.091508 +Converged at iteration 24, L1 9.65684e-05, Linf 0.00239091, total time[s] 0.083093 +Converged at iteration 23, L1 7.57439e-05, Linf 0.00331323, total time[s] 0.077083 +Converged at iteration 39, L1 7.44549e-05, Linf 0.00654581, total time[s] 0.136314 +Converged at iteration 36, L1 7.20281e-05, Linf 0.00533752, total time[s] 0.11976 +Converged at iteration 24, L1 7.46079e-05, Linf 0.00388338, total time[s] 0.066374 +Converged at iteration 31, L1 5.7246e-05, Linf 0.00507387, total time[s] 0.088165 +Converged at iteration 25, L1 8.73503e-05, Linf 0.00584015, total time[s] 0.092073 +Converged at iteration 20, L1 9.49196e-05, Linf 0.0038663, total time[s] 0.091699 +Converged at iteration 19, L1 6.41399e-05, Linf 0.00437904, total time[s] 0.096503 +Converged at iteration 20, L1 9.02205e-05, Linf 0.00655202, total time[s] 0.109498 +Converged at iteration 24, L1 7.66816e-05, Linf 0.00459199, total time[s] 0.110989 +Converged at iteration 24, L1 7.6925e-05, Linf 0.00496137, total time[s] 0.091124 +Converged at iteration 20, L1 6.13185e-05, Linf 0.00518391, total time[s] 0.059835 +Converged at iteration 16, L1 9.93341e-05, Linf 0.00457307, total time[s] 0.065777 +Converged at iteration 32, L1 6.89002e-05, Linf 0.00257308, total time[s] 0.099835 +Converged at iteration 19, L1 9.32956e-05, Linf 0.00680647, total time[s] 0.052201 +Converged at iteration 23, L1 7.74187e-05, Linf 0.00702777, total time[s] 0.062018 +Converged at iteration 26, L1 7.98968e-05, Linf 0.00596561, total time[s] 0.065859 +Converged at iteration 23, L1 5.70306e-05, Linf 0.00599, total time[s] 0.062398 +Converged at iteration 20, L1 8.25345e-05, Linf 0.00551311, total time[s] 0.055486 +Converged at iteration 23, L1 6.34521e-05, Linf 0.00287808, total time[s] 0.109766 +Converged at iteration 25, L1 8.37244e-05, Linf 0.00419775, total time[s] 0.07438 +Converged at iteration 28, L1 7.74134e-05, Linf 0.00351774, total time[s] 0.085743 +Converged at iteration 29, L1 7.46557e-05, Linf 0.00612404, total time[s] 0.106189 +Converged at iteration 27, L1 7.36957e-05, Linf 0.00399124, total time[s] 0.080471 +Converged at iteration 29, L1 7.81909e-05, Linf 0.00382388, total time[s] 0.09362 +Converged at iteration 29, L1 9.20341e-05, Linf 0.00277469, total time[s] 0.084488 +Converged at iteration 28, L1 8.20037e-05, Linf 0.00266479, total time[s] 0.080886 +Converged at iteration 33, L1 6.01686e-05, Linf 0.0058558, total time[s] 0.089872 +Converged at iteration 27, L1 6.88221e-05, Linf 0.0033954, total time[s] 0.070318 +Converged at iteration 24, L1 9.89834e-05, Linf 0.00243466, total time[s] 0.075201 +Converged at iteration 23, L1 7.49353e-05, Linf 0.00326563, total time[s] 0.078687 +Converged at iteration 39, L1 7.35793e-05, Linf 0.00662455, total time[s] 0.104099 +Converged at iteration 36, L1 7.01149e-05, Linf 0.00546732, total time[s] 0.106095 +Converged at iteration 24, L1 7.39247e-05, Linf 0.00367742, total time[s] 0.082155 +Converged at iteration 31, L1 5.6974e-05, Linf 0.00504473, total time[s] 0.08683 +Converged at iteration 25, L1 8.92568e-05, Linf 0.00599553, total time[s] 0.064503 +Converged at iteration 20, L1 9.88212e-05, Linf 0.00391928, total time[s] 0.054801 +Converged at iteration 19, L1 6.20255e-05, Linf 0.00426566, total time[s] 0.080169 +Converged at iteration 20, L1 8.83027e-05, Linf 0.00608453, total time[s] 0.087056 +Converged at iteration 24, L1 7.46364e-05, Linf 0.00422518, total time[s] 0.075514 +Converged at iteration 24, L1 8.13189e-05, Linf 0.00506513, total time[s] 0.091786 +Converged at iteration 20, L1 6.2769e-05, Linf 0.00517392, total time[s] 0.072411 +Converged at iteration 16, L1 9.79502e-05, Linf 0.00481191, total time[s] 0.05216 +Converged at iteration 32, L1 6.88798e-05, Linf 0.00270563, total time[s] 0.103628 +Converged at iteration 19, L1 9.40841e-05, Linf 0.00687812, total time[s] 0.058558 +Converged at iteration 23, L1 7.89313e-05, Linf 0.00696471, total time[s] 0.078145 +Converged at iteration 26, L1 8.268e-05, Linf 0.00592604, total time[s] 0.093409 +Converged at iteration 23, L1 5.69713e-05, Linf 0.00598287, total time[s] 0.073035 +Converged at iteration 20, L1 8.4751e-05, Linf 0.00551307, total time[s] 0.096728 +Converged at iteration 23, L1 6.56697e-05, Linf 0.00283113, total time[s] 0.063156 +Converged at iteration 25, L1 8.32858e-05, Linf 0.00403768, total time[s] 0.06645 +Converged at iteration 28, L1 7.71614e-05, Linf 0.00354693, total time[s] 0.077552 +Converged at iteration 29, L1 7.74126e-05, Linf 0.00618361, total time[s] 0.072321 +Converged at iteration 27, L1 7.56075e-05, Linf 0.00397643, total time[s] 0.071711 +Converged at iteration 29, L1 7.90953e-05, Linf 0.00387163, total time[s] 0.077488 +Converged at iteration 29, L1 9.28081e-05, Linf 0.00278044, total time[s] 0.075633 +Converged at iteration 28, L1 8.28327e-05, Linf 0.00260603, total time[s] 0.072174 +Converged at iteration 33, L1 5.8621e-05, Linf 0.00585167, total time[s] 0.080858 +Converged at iteration 27, L1 6.93061e-05, Linf 0.00353857, total time[s] 0.067583 +Converged at iteration 25, L1 7.13835e-05, Linf 0.00193448, total time[s] 0.064983 +Converged at iteration 23, L1 7.4654e-05, Linf 0.00321752, total time[s] 0.062867 +Converged at iteration 39, L1 7.17455e-05, Linf 0.00661419, total time[s] 0.108656 +Converged at iteration 36, L1 6.8993e-05, Linf 0.00552546, total time[s] 0.134141 +Converged at iteration 24, L1 7.30374e-05, Linf 0.00336432, total time[s] 0.070122 +Converged at iteration 30, L1 9.89066e-05, Linf 0.00615495, total time[s] 0.08654 +Converged at iteration 25, L1 9.27823e-05, Linf 0.00625682, total time[s] 0.067663 +Converged at iteration 21, L1 5.87401e-05, Linf 0.00343225, total time[s] 0.070145 +Converged at iteration 19, L1 6.00318e-05, Linf 0.00410252, total time[s] 0.056673 +Converged at iteration 20, L1 8.60596e-05, Linf 0.00645565, total time[s] 0.07979 +Converged at iteration 24, L1 7.1828e-05, Linf 0.00445249, total time[s] 0.070344 +Converged at iteration 24, L1 8.13328e-05, Linf 0.00517547, total time[s] 0.077605 +Converged at iteration 20, L1 6.52551e-05, Linf 0.00550009, total time[s] 0.077325 +Converged at iteration 16, L1 9.73425e-05, Linf 0.00506905, total time[s] 0.068071 +Converged at iteration 32, L1 6.80919e-05, Linf 0.00262261, total time[s] 0.119237 +Converged at iteration 19, L1 9.43222e-05, Linf 0.00675485, total time[s] 0.101569 +Converged at iteration 23, L1 7.68418e-05, Linf 0.00682942, total time[s] 0.106371 +Converged at iteration 26, L1 8.01843e-05, Linf 0.00589282, total time[s] 0.105436 +Converged at iteration 23, L1 5.64049e-05, Linf 0.00597023, total time[s] 0.090284 +Converged at iteration 20, L1 8.53125e-05, Linf 0.0055156, total time[s] 0.057907 +Converged at iteration 23, L1 6.73774e-05, Linf 0.00278426, total time[s] 0.061678 +Converged at iteration 25, L1 8.39207e-05, Linf 0.00390293, total time[s] 0.066939 +Converged at iteration 28, L1 7.7795e-05, Linf 0.00378893, total time[s] 0.077353 +Converged at iteration 29, L1 7.74508e-05, Linf 0.0062418, total time[s] 0.07798 +Converged at iteration 27, L1 7.70008e-05, Linf 0.00395291, total time[s] 0.06948 +Converged at iteration 29, L1 8.10797e-05, Linf 0.00392798, total time[s] 0.073905 +Converged at iteration 29, L1 9.29294e-05, Linf 0.00278277, total time[s] 0.074561 +Converged at iteration 28, L1 8.05544e-05, Linf 0.00253957, total time[s] 0.072348 +Converged at iteration 32, L1 9.89395e-05, Linf 0.00696647, total time[s] 0.081538 +Converged at iteration 27, L1 7.23112e-05, Linf 0.00375337, total time[s] 0.083046 +Converged at iteration 25, L1 7.21896e-05, Linf 0.00198931, total time[s] 0.082418 +Converged at iteration 23, L1 7.42659e-05, Linf 0.00310038, total time[s] 0.07397 +Converged at iteration 39, L1 6.9931e-05, Linf 0.00659201, total time[s] 0.126479 +Converged at iteration 36, L1 6.74194e-05, Linf 0.00551407, total time[s] 0.107611 +Converged at iteration 24, L1 7.26061e-05, Linf 0.00309909, total time[s] 0.064164 +Converged at iteration 30, L1 9.72481e-05, Linf 0.00610833, total time[s] 0.082678 +Converged at iteration 25, L1 9.81605e-05, Linf 0.0066441, total time[s] 0.076349 +Converged at iteration 21, L1 6.44052e-05, Linf 0.00333627, total time[s] 0.141399 +Converged at iteration 19, L1 5.86185e-05, Linf 0.00392564, total time[s] 0.070852 +Converged at iteration 20, L1 8.29087e-05, Linf 0.0061466, total time[s] 0.091045 +Converged at iteration 24, L1 6.90526e-05, Linf 0.00350188, total time[s] 0.162298 +Converged at iteration 24, L1 8.47111e-05, Linf 0.0053699, total time[s] 0.079451 +Converged at iteration 20, L1 6.93118e-05, Linf 0.00568758, total time[s] 0.056896 +Converged at iteration 16, L1 9.70538e-05, Linf 0.00537964, total time[s] 0.051315 +Converged at iteration 32, L1 6.56381e-05, Linf 0.0026426, total time[s] 0.089904 +Converged at iteration 19, L1 9.50219e-05, Linf 0.00656031, total time[s] 0.056243 +Converged at iteration 23, L1 7.65565e-05, Linf 0.00676602, total time[s] 0.075921 +Converged at iteration 26, L1 8.06437e-05, Linf 0.00586182, total time[s] 0.081028 +Converged at iteration 23, L1 5.58454e-05, Linf 0.00598311, total time[s] 0.085353 +Converged at iteration 20, L1 8.8338e-05, Linf 0.00552707, total time[s] 0.108356 +Converged at iteration 23, L1 6.9402e-05, Linf 0.0027197, total time[s] 0.072874 +Converged at iteration 25, L1 8.49276e-05, Linf 0.00379329, total time[s] 0.073802 +Converged at iteration 28, L1 7.92517e-05, Linf 0.00400913, total time[s] 0.082658 +Converged at iteration 29, L1 7.98045e-05, Linf 0.00631214, total time[s] 0.088804 +Converged at iteration 27, L1 7.95327e-05, Linf 0.00392722, total time[s] 0.076293 +Converged at iteration 29, L1 8.38897e-05, Linf 0.00399186, total time[s] 0.088011 +Converged at iteration 29, L1 9.48469e-05, Linf 0.00277544, total time[s] 0.085755 +Converged at iteration 28, L1 8.261e-05, Linf 0.00247539, total time[s] 0.075104 +Converged at iteration 32, L1 9.63881e-05, Linf 0.00693881, total time[s] 0.091661 +Converged at iteration 27, L1 7.67643e-05, Linf 0.00407079, total time[s] 0.083416 +Converged at iteration 25, L1 7.02078e-05, Linf 0.00201723, total time[s] 0.073381 +Converged at iteration 23, L1 7.49873e-05, Linf 0.00298122, total time[s] 0.065234 +Converged at iteration 39, L1 6.86151e-05, Linf 0.00654376, total time[s] 0.109973 +Converged at iteration 36, L1 6.36671e-05, Linf 0.00554766, total time[s] 0.1106 +Converged at iteration 24, L1 7.30504e-05, Linf 0.00308198, total time[s] 0.071298 +Converged at iteration 30, L1 9.46407e-05, Linf 0.00605411, total time[s] 0.084014 +Converged at iteration 26, L1 5.94546e-05, Linf 0.00588317, total time[s] 0.068161 +Converged at iteration 21, L1 7.5276e-05, Linf 0.00339875, total time[s] 0.06001 +Converged at iteration 19, L1 5.80936e-05, Linf 0.00394738, total time[s] 0.0753 +Converged at iteration 20, L1 7.96824e-05, Linf 0.00641203, total time[s] 0.070471 +Converged at iteration 24, L1 6.57869e-05, Linf 0.00398207, total time[s] 0.087576 +Converged at iteration 24, L1 8.98087e-05, Linf 0.00563849, total time[s] 0.085478 +Converged at iteration 20, L1 7.54521e-05, Linf 0.00581721, total time[s] 0.075751 +Converged at iteration 16, L1 9.75481e-05, Linf 0.00574966, total time[s] 0.054405 +Converged at iteration 32, L1 6.29286e-05, Linf 0.00266328, total time[s] 0.102035 +Converged at iteration 19, L1 9.38602e-05, Linf 0.00640544, total time[s] 0.050706 +Converged at iteration 23, L1 7.58995e-05, Linf 0.00645876, total time[s] 0.059704 +Converged at iteration 26, L1 8.21505e-05, Linf 0.00584415, total time[s] 0.067442 +Converged at iteration 23, L1 5.52567e-05, Linf 0.00598942, total time[s] 0.060388 +Converged at iteration 20, L1 9.33366e-05, Linf 0.00550904, total time[s] 0.056205 +Converged at iteration 23, L1 7.20964e-05, Linf 0.00264772, total time[s] 0.061982 +Converged at iteration 25, L1 8.60494e-05, Linf 0.00367634, total time[s] 0.066294 +Converged at iteration 28, L1 8.09085e-05, Linf 0.00429666, total time[s] 0.073913 +Converged at iteration 29, L1 8.38874e-05, Linf 0.00639132, total time[s] 0.076235 +Converged at iteration 27, L1 8.28245e-05, Linf 0.00390219, total time[s] 0.070719 +Converged at iteration 29, L1 8.53338e-05, Linf 0.00409284, total time[s] 0.078568 +Converged at iteration 29, L1 9.44873e-05, Linf 0.00276559, total time[s] 0.075554 +Converged at iteration 28, L1 8.04649e-05, Linf 0.00241732, total time[s] 0.073265 +Converged at iteration 32, L1 9.30328e-05, Linf 0.00687931, total time[s] 0.082779 +Converged at iteration 27, L1 8.12541e-05, Linf 0.004554, total time[s] 0.071533 +Converged at iteration 24, L1 9.87881e-05, Linf 0.00261957, total time[s] 0.064337 +Converged at iteration 23, L1 7.71853e-05, Linf 0.00287349, total time[s] 0.060992 +Converged at iteration 39, L1 6.67823e-05, Linf 0.00649309, total time[s] 0.104175 +Converged at iteration 36, L1 5.98807e-05, Linf 0.00555937, total time[s] 0.105528 +Converged at iteration 24, L1 7.42013e-05, Linf 0.00294092, total time[s] 0.065397 +Converged at iteration 30, L1 9.12939e-05, Linf 0.00602789, total time[s] 0.077621 +Converged at iteration 26, L1 6.46841e-05, Linf 0.00632767, total time[s] 0.06868 +Converged at iteration 21, L1 9.07282e-05, Linf 0.00429046, total time[s] 0.05802 +Converged at iteration 19, L1 5.74497e-05, Linf 0.00397498, total time[s] 0.056618 +Converged at iteration 20, L1 7.62577e-05, Linf 0.00595873, total time[s] 0.074455 +Converged at iteration 24, L1 6.19258e-05, Linf 0.00327172, total time[s] 0.078718 +Converged at iteration 24, L1 9.53636e-05, Linf 0.00590048, total time[s] 0.072836 +Converged at iteration 20, L1 8.19762e-05, Linf 0.00595911, total time[s] 0.077714 +Converged at iteration 16, L1 9.65929e-05, Linf 0.00611309, total time[s] 0.079789 +Converged at iteration 32, L1 5.81294e-05, Linf 0.00265434, total time[s] 0.12752 +Converged at iteration 19, L1 9.27425e-05, Linf 0.00622701, total time[s] 0.076873 +Converged at iteration 23, L1 7.48295e-05, Linf 0.00622591, total time[s] 0.073113 +Converged at iteration 26, L1 8.39077e-05, Linf 0.00582288, total time[s] 0.084364 +Converged at iteration 23, L1 5.48009e-05, Linf 0.00603671, total time[s] 0.102836 +Converged at iteration 20, L1 9.90168e-05, Linf 0.00559457, total time[s] 0.058371 +Converged at iteration 23, L1 7.33924e-05, Linf 0.00256223, total time[s] 0.065302 +Converged at iteration 25, L1 8.73056e-05, Linf 0.00358299, total time[s] 0.075422 +Converged at iteration 28, L1 8.30272e-05, Linf 0.00436921, total time[s] 0.074618 +Converged at iteration 29, L1 8.58672e-05, Linf 0.00647902, total time[s] 0.078622 +Converged at iteration 27, L1 8.60922e-05, Linf 0.00387772, total time[s] 0.145077 +Converged at iteration 29, L1 8.74472e-05, Linf 0.00414647, total time[s] 0.130496 +Converged at iteration 29, L1 9.41793e-05, Linf 0.00277905, total time[s] 0.091486 +Converged at iteration 28, L1 8.00581e-05, Linf 0.00236565, total time[s] 0.095126 +Converged at iteration 32, L1 8.8975e-05, Linf 0.00680213, total time[s] 0.093813 +Converged at iteration 27, L1 8.72508e-05, Linf 0.00499555, total time[s] 0.074358 +Converged at iteration 24, L1 9.99346e-05, Linf 0.00261528, total time[s] 0.071455 +Converged at iteration 23, L1 7.9292e-05, Linf 0.00273767, total time[s] 0.073719 +Converged at iteration 39, L1 6.49532e-05, Linf 0.00642592, total time[s] 0.145862 +Converged at iteration 35, L1 9.99199e-05, Linf 0.0064765, total time[s] 0.135056 +Converged at iteration 24, L1 7.6976e-05, Linf 0.0028393, total time[s] 0.069381 +Converged at iteration 30, L1 8.78405e-05, Linf 0.00591335, total time[s] 0.085021 +Converged at iteration 26, L1 7.00071e-05, Linf 0.00682651, total time[s] 0.093895 +Converged at iteration 22, L1 5.90035e-05, Linf 0.00432691, total time[s] 0.09491 +Converged at iteration 19, L1 5.75675e-05, Linf 0.00390806, total time[s] 0.137497 +Converged at iteration 20, L1 7.3067e-05, Linf 0.00563186, total time[s] 0.09647 +Converged at iteration 24, L1 5.89793e-05, Linf 0.00323256, total time[s] 0.098734 +Converged at iteration 25, L1 5.4453e-05, Linf 0.00493799, total time[s] 0.097573 +Converged at iteration 20, L1 8.82587e-05, Linf 0.00610808, total time[s] 0.065028 +Converged at iteration 16, L1 9.63851e-05, Linf 0.00643446, total time[s] 0.044777 +Converged at iteration 31, L1 9.40592e-05, Linf 0.00325807, total time[s] 0.092129 +Converged at iteration 19, L1 9.0902e-05, Linf 0.00603219, total time[s] 0.061817 +Converged at iteration 23, L1 7.31773e-05, Linf 0.00596086, total time[s] 0.073164 +Converged at iteration 26, L1 8.47843e-05, Linf 0.00579464, total time[s] 0.120476 +Converged at iteration 23, L1 5.54748e-05, Linf 0.00605803, total time[s] 0.061256 +Converged at iteration 21, L1 5.70172e-05, Linf 0.00472394, total time[s] 0.064474 +Converged at iteration 23, L1 7.40604e-05, Linf 0.00244376, total time[s] 0.078122 +Converged at iteration 25, L1 8.81299e-05, Linf 0.00348768, total time[s] 0.144696 +Converged at iteration 28, L1 8.56594e-05, Linf 0.0046492, total time[s] 0.078709 +Converged at iteration 29, L1 8.9714e-05, Linf 0.00657381, total time[s] 0.074769 +Converged at iteration 27, L1 8.95631e-05, Linf 0.00387, total time[s] 0.077269 +Converged at iteration 29, L1 8.86573e-05, Linf 0.004261, total time[s] 0.08025 +Converged at iteration 29, L1 9.52214e-05, Linf 0.00282445, total time[s] 0.083937 +Converged at iteration 28, L1 8.0426e-05, Linf 0.00232819, total time[s] 0.078047 +Converged at iteration 32, L1 8.3667e-05, Linf 0.00670171, total time[s] 0.090696 +Converged at iteration 27, L1 9.54089e-05, Linf 0.00555549, total time[s] 0.080723 +Converged at iteration 25, L1 6.46976e-05, Linf 0.00204246, total time[s] 0.077627 +Converged at iteration 23, L1 8.23455e-05, Linf 0.00264938, total time[s] 0.066152 +Converged at iteration 39, L1 6.17271e-05, Linf 0.00624748, total time[s] 0.120954 +Converged at iteration 35, L1 8.86785e-05, Linf 0.00645462, total time[s] 0.114598 +Converged at iteration 24, L1 7.94024e-05, Linf 0.00290138, total time[s] 0.086755 +Converged at iteration 30, L1 8.34579e-05, Linf 0.00582319, total time[s] 0.111312 +Converged at iteration 26, L1 7.54374e-05, Linf 0.00746678, total time[s] 0.0921 +Converged at iteration 22, L1 7.68744e-05, Linf 0.0053945, total time[s] 0.081628 +Converged at iteration 19, L1 5.85841e-05, Linf 0.00403673, total time[s] 0.060813 +Converged at iteration 20, L1 6.97741e-05, Linf 0.00537394, total time[s] 0.0658 +Converged at iteration 24, L1 5.59443e-05, Linf 0.00313746, total time[s] 0.083282 +Converged at iteration 25, L1 5.63458e-05, Linf 0.00523344, total time[s] 0.106656 +Converged at iteration 20, L1 9.63735e-05, Linf 0.00626008, total time[s] 0.067271 +Converged at iteration 16, L1 9.72102e-05, Linf 0.00666104, total time[s] 0.05955 +Converged at iteration 31, L1 8.85719e-05, Linf 0.00331558, total time[s] 0.084209 +Converged at iteration 19, L1 8.64994e-05, Linf 0.00581437, total time[s] 0.052431 +Converged at iteration 23, L1 7.11715e-05, Linf 0.00565569, total time[s] 0.060169 +Converged at iteration 26, L1 8.57805e-05, Linf 0.00572111, total time[s] 0.067002 +Converged at iteration 23, L1 5.65267e-05, Linf 0.00611305, total time[s] 0.062171 +Converged at iteration 21, L1 6.19946e-05, Linf 0.00472664, total time[s] 0.056702 +Converged at iteration 23, L1 7.35677e-05, Linf 0.00231207, total time[s] 0.081311 +Converged at iteration 25, L1 8.75176e-05, Linf 0.00340786, total time[s] 0.067983 +Converged at iteration 28, L1 8.89563e-05, Linf 0.00488968, total time[s] 0.074109 +Converged at iteration 29, L1 9.36533e-05, Linf 0.00665502, total time[s] 0.078947 +Converged at iteration 27, L1 9.28395e-05, Linf 0.00383475, total time[s] 0.073632 +Converged at iteration 29, L1 9.04777e-05, Linf 0.0043358, total time[s] 0.074128 +Converged at iteration 29, L1 9.61835e-05, Linf 0.00286502, total time[s] 0.08838 +Converged at iteration 28, L1 8.11512e-05, Linf 0.00228524, total time[s] 0.077542 +Converged at iteration 32, L1 7.77822e-05, Linf 0.00658922, total time[s] 0.099809 +Converged at iteration 28, L1 6.01264e-05, Linf 0.00516457, total time[s] 0.098842 +Converged at iteration 25, L1 6.86907e-05, Linf 0.00272072, total time[s] 0.07003 +Converged at iteration 23, L1 8.63951e-05, Linf 0.00256738, total time[s] 0.064948 +Converged at iteration 39, L1 5.61945e-05, Linf 0.00617748, total time[s] 0.107068 +Converged at iteration 35, L1 8.09658e-05, Linf 0.00651855, total time[s] 0.129076 +Converged at iteration 24, L1 8.35818e-05, Linf 0.00299013, total time[s] 0.082433 +Converged at iteration 30, L1 7.88276e-05, Linf 0.0057242, total time[s] 0.084886 +Converged at iteration 26, L1 8.03856e-05, Linf 0.00794846, total time[s] 0.072241 +Converged at iteration 22, L1 9.95628e-05, Linf 0.00650975, total time[s] 0.104147 +Converged at iteration 19, L1 6.09068e-05, Linf 0.00418057, total time[s] 0.064176 +Converged at iteration 20, L1 6.70023e-05, Linf 0.00486359, total time[s] 0.073694 +Converged at iteration 24, L1 5.40408e-05, Linf 0.00309746, total time[s] 0.101755 +Converged at iteration 25, L1 6.08557e-05, Linf 0.00550632, total time[s] 0.107608 +Converged at iteration 21, L1 5.31493e-05, Linf 0.00535506, total time[s] 0.088121 +Converged at iteration 16, L1 9.83762e-05, Linf 0.0067862, total time[s] 0.04759 +Converged at iteration 31, L1 8.44756e-05, Linf 0.00331259, total time[s] 0.123839 +Converged at iteration 19, L1 8.00646e-05, Linf 0.00554055, total time[s] 0.084067 +Converged at iteration 23, L1 6.84983e-05, Linf 0.0053027, total time[s] 0.071449 +Converged at iteration 26, L1 8.76992e-05, Linf 0.00561481, total time[s] 0.078051 +Converged at iteration 23, L1 5.75118e-05, Linf 0.00613044, total time[s] 0.068188 +Converged at iteration 21, L1 6.82044e-05, Linf 0.00464703, total time[s] 0.062976 +Converged at iteration 23, L1 7.17982e-05, Linf 0.00213789, total time[s] 0.075529 +Converged at iteration 25, L1 8.8177e-05, Linf 0.0033398, total time[s] 0.089522 +Converged at iteration 28, L1 9.27445e-05, Linf 0.00524001, total time[s] 0.109145 +Converged at iteration 29, L1 9.83013e-05, Linf 0.00676461, total time[s] 0.087376 +Converged at iteration 27, L1 9.63223e-05, Linf 0.00368111, total time[s] 0.084507 +Converged at iteration 29, L1 9.44094e-05, Linf 0.00447129, total time[s] 0.087469 +Converged at iteration 29, L1 9.90774e-05, Linf 0.00291288, total time[s] 0.081131 +Converged at iteration 28, L1 8.43274e-05, Linf 0.00224284, total time[s] 0.077335 +Converged at iteration 32, L1 7.17739e-05, Linf 0.00645635, total time[s] 0.081273 +Converged at iteration 28, L1 6.2703e-05, Linf 0.00573662, total time[s] 0.071543 +Converged at iteration 25, L1 7.61054e-05, Linf 0.00344793, total time[s] 0.064886 +Converged at iteration 23, L1 9.03809e-05, Linf 0.00252174, total time[s] 0.060144 +Converged at iteration 38, L1 9.92021e-05, Linf 0.00723734, total time[s] 0.098144 +Converged at iteration 35, L1 6.78499e-05, Linf 0.00620422, total time[s] 0.107612 +Converged at iteration 24, L1 8.80253e-05, Linf 0.00314087, total time[s] 0.080514 +Converged at iteration 30, L1 7.20865e-05, Linf 0.00560033, total time[s] 0.080623 +Converged at iteration 26, L1 8.61525e-05, Linf 0.00853322, total time[s] 0.067194 +Converged at iteration 23, L1 6.91995e-05, Linf 0.0063776, total time[s] 0.065276 +Converged at iteration 19, L1 6.42779e-05, Linf 0.00428535, total time[s] 0.062986 +Converged at iteration 20, L1 6.43455e-05, Linf 0.00425903, total time[s] 0.063459 +Converged at iteration 23, L1 9.89677e-05, Linf 0.00450768, total time[s] 0.108921 +Converged at iteration 25, L1 6.48398e-05, Linf 0.00578627, total time[s] 0.125819 +Converged at iteration 21, L1 5.86213e-05, Linf 0.00553321, total time[s] 0.09721 +Converged at iteration 16, L1 9.94266e-05, Linf 0.00684054, total time[s] 0.067596 +Converged at iteration 31, L1 8.08277e-05, Linf 0.00326864, total time[s] 0.091928 +Converged at iteration 19, L1 7.21753e-05, Linf 0.00522536, total time[s] 0.068191 +Converged at iteration 23, L1 6.48563e-05, Linf 0.00491977, total time[s] 0.060474 +Converged at iteration 26, L1 8.87482e-05, Linf 0.00550589, total time[s] 0.06805 +Converged at iteration 23, L1 5.89784e-05, Linf 0.00618105, total time[s] 0.075894 +Converged at iteration 21, L1 7.44467e-05, Linf 0.00449107, total time[s] 0.06857 +Converged at iteration 23, L1 7.00879e-05, Linf 0.00193674, total time[s] 0.097753 +Converged at iteration 25, L1 8.83066e-05, Linf 0.0032546, total time[s] 0.073313 +Converged at iteration 28, L1 9.55253e-05, Linf 0.00558528, total time[s] 0.112109 +Converged at iteration 30, L1 5.13325e-05, Linf 0.00428681, total time[s] 0.095643 +Converged at iteration 27, L1 9.84052e-05, Linf 0.00363201, total time[s] 0.133542 +Converged at iteration 29, L1 9.81224e-05, Linf 0.00461348, total time[s] 0.10289 +Converged at iteration 29, L1 9.72518e-05, Linf 0.00291415, total time[s] 0.09077 +Converged at iteration 28, L1 8.4349e-05, Linf 0.00221241, total time[s] 0.106471 +Converged at iteration 32, L1 6.21462e-05, Linf 0.00625414, total time[s] 0.094277 +Converged at iteration 28, L1 6.94949e-05, Linf 0.00637671, total time[s] 0.077901 +Converged at iteration 25, L1 8.42378e-05, Linf 0.00420305, total time[s] 0.074768 +Converged at iteration 23, L1 9.56323e-05, Linf 0.00265302, total time[s] 0.073807 +Converged at iteration 38, L1 8.9824e-05, Linf 0.00709535, total time[s] 0.098948 +Converged at iteration 35, L1 5.49824e-05, Linf 0.00581924, total time[s] 0.110424 +Converged at iteration 24, L1 9.11165e-05, Linf 0.00326078, total time[s] 0.066308 +Converged at iteration 30, L1 6.65394e-05, Linf 0.0055426, total time[s] 0.084156 +Converged at iteration 26, L1 9.20284e-05, Linf 0.00911502, total time[s] 0.081542 +Converged at iteration 23, L1 8.57862e-05, Linf 0.00737078, total time[s] 0.0695 +Converged at iteration 19, L1 6.85859e-05, Linf 0.00453429, total time[s] 0.077377 +Converged at iteration 20, L1 6.16028e-05, Linf 0.00407903, total time[s] 0.10573 +Converged at iteration 23, L1 9.40688e-05, Linf 0.00452794, total time[s] 0.08507 +Converged at iteration 25, L1 6.80494e-05, Linf 0.0060663, total time[s] 0.115361 +Converged at iteration 21, L1 6.37477e-05, Linf 0.00569032, total time[s] 0.088707 +Converged at iteration 17, L1 5.4803e-05, Linf 0.00482653, total time[s] 0.049442 +Converged at iteration 31, L1 7.78292e-05, Linf 0.00336169, total time[s] 0.079215 +Converged at iteration 19, L1 6.28959e-05, Linf 0.00485132, total time[s] 0.050282 +Converged at iteration 22, L1 9.33659e-05, Linf 0.00526238, total time[s] 0.058714 +Converged at iteration 26, L1 9.11985e-05, Linf 0.00540814, total time[s] 0.067529 +Converged at iteration 23, L1 6.06058e-05, Linf 0.00625848, total time[s] 0.062823 +Converged at iteration 21, L1 8.033e-05, Linf 0.0044359, total time[s] 0.060278 +Converged at iteration 23, L1 6.85065e-05, Linf 0.00525446, total time[s] 0.072131 +Converged at iteration 25, L1 8.72122e-05, Linf 0.00312375, total time[s] 0.077539 +Converged at iteration 28, L1 9.9068e-05, Linf 0.00596601, total time[s] 0.094316 +Converged at iteration 30, L1 5.41148e-05, Linf 0.00423239, total time[s] 0.085976 +Converged at iteration 28, L1 6.06679e-05, Linf 0.00425115, total time[s] 0.074313 +Converged at iteration 30, L1 6.2861e-05, Linf 0.00390115, total time[s] 0.077806 +Converged at iteration 29, L1 9.74679e-05, Linf 0.00290305, total time[s] 0.078276 +Converged at iteration 28, L1 8.75703e-05, Linf 0.00221311, total time[s] 0.085125 +Converged at iteration 31, L1 9.50583e-05, Linf 0.00753112, total time[s] 0.094713 +Converged at iteration 28, L1 7.8374e-05, Linf 0.00703379, total time[s] 0.092918 +Converged at iteration 25, L1 9.51605e-05, Linf 0.00498177, total time[s] 0.075061 +Converged at iteration 24, L1 5.63074e-05, Linf 0.00200253, total time[s] 0.069098 +Converged at iteration 38, L1 7.89402e-05, Linf 0.00684936, total time[s] 0.100229 +Converged at iteration 34, L1 9.09848e-05, Linf 0.00702649, total time[s] 0.110357 +Converged at iteration 24, L1 9.29082e-05, Linf 0.00335766, total time[s] 0.067175 +Converged at iteration 30, L1 6.58009e-05, Linf 0.00547059, total time[s] 0.085059 +Converged at iteration 26, L1 9.95549e-05, Linf 0.00968632, total time[s] 0.071861 +Converged at iteration 24, L1 5.44464e-05, Linf 0.00675471, total time[s] 0.105371 +Converged at iteration 19, L1 7.41726e-05, Linf 0.00497207, total time[s] 0.066585 +Converged at iteration 20, L1 5.80932e-05, Linf 0.00390904, total time[s] 0.109633 +Converged at iteration 23, L1 9.18034e-05, Linf 0.00455469, total time[s] 0.117904 +Converged at iteration 25, L1 7.16759e-05, Linf 0.00629571, total time[s] 0.084049 +Converged at iteration 21, L1 6.83192e-05, Linf 0.00588709, total time[s] 0.063722 +Converged at iteration 17, L1 5.57521e-05, Linf 0.004974, total time[s] 0.069042 +Converged at iteration 31, L1 7.57022e-05, Linf 0.00347388, total time[s] 0.090711 +Converged at iteration 18, L1 9.09519e-05, Linf 0.00570544, total time[s] 0.058861 +Converged at iteration 22, L1 8.42105e-05, Linf 0.00482179, total time[s] 0.075074 +Converged at iteration 26, L1 9.48868e-05, Linf 0.00531341, total time[s] 0.090614 +Converged at iteration 23, L1 6.29039e-05, Linf 0.00640183, total time[s] 0.061271 +Converged at iteration 21, L1 8.66885e-05, Linf 0.00430996, total time[s] 0.057854 +Converged at iteration 23, L1 6.4374e-05, Linf 0.0017347, total time[s] 0.0651 +Converged at iteration 25, L1 8.42194e-05, Linf 0.00303921, total time[s] 0.066122 +Converged at iteration 29, L1 6.66015e-05, Linf 0.00408378, total time[s] 0.081174 +Converged at iteration 30, L1 5.7091e-05, Linf 0.00428626, total time[s] 0.087967 +Converged at iteration 28, L1 6.3153e-05, Linf 0.00419466, total time[s] 0.082079 +Converged at iteration 30, L1 6.49739e-05, Linf 0.00401883, total time[s] 0.077121 +Converged at iteration 29, L1 9.87002e-05, Linf 0.00290273, total time[s] 0.079577 +Converged at iteration 28, L1 9.21209e-05, Linf 0.00216103, total time[s] 0.075922 +Converged at iteration 31, L1 8.57192e-05, Linf 0.00741921, total time[s] 0.080168 +Converged at iteration 28, L1 8.72171e-05, Linf 0.00766757, total time[s] 0.074116 +Converged at iteration 26, L1 6.23179e-05, Linf 0.0044938, total time[s] 0.068627 +Converged at iteration 24, L1 5.94233e-05, Linf 0.00211832, total time[s] 0.075164 +Converged at iteration 38, L1 6.86639e-05, Linf 0.00662898, total time[s] 0.123043 +Converged at iteration 34, L1 8.21056e-05, Linf 0.00684641, total time[s] 0.105217 +Converged at iteration 24, L1 9.56194e-05, Linf 0.00343686, total time[s] 0.077965 +Converged at iteration 30, L1 5.79032e-05, Linf 0.00536499, total time[s] 0.089213 +Converged at iteration 27, L1 5.23292e-05, Linf 0.00804889, total time[s] 0.090488 +Converged at iteration 24, L1 6.31663e-05, Linf 0.00768741, total time[s] 0.088693 +Converged at iteration 19, L1 8.02826e-05, Linf 0.00556148, total time[s] 0.075587 +Converged at iteration 20, L1 5.45162e-05, Linf 0.00376816, total time[s] 0.122995 +Converged at iteration 23, L1 9.11457e-05, Linf 0.00460867, total time[s] 0.085235 +Converged at iteration 25, L1 7.44737e-05, Linf 0.00650286, total time[s] 0.0871 +Converged at iteration 21, L1 7.47346e-05, Linf 0.0059397, total time[s] 0.096115 +Converged at iteration 17, L1 5.63619e-05, Linf 0.00504549, total time[s] 0.064081 +Converged at iteration 31, L1 7.41943e-05, Linf 0.00358077, total time[s] 0.089472 +Converged at iteration 18, L1 7.58556e-05, Linf 0.00520988, total time[s] 0.058351 +Converged at iteration 22, L1 7.33034e-05, Linf 0.00432787, total time[s] 0.065687 +Converged at iteration 27, L1 5.53836e-05, Linf 0.00361625, total time[s] 0.077046 +Converged at iteration 23, L1 6.6449e-05, Linf 0.00648823, total time[s] 0.07056 +Converged at iteration 21, L1 9.32975e-05, Linf 0.00415141, total time[s] 0.05573 +Converged at iteration 22, L1 9.82813e-05, Linf 0.00269332, total time[s] 0.061088 +Converged at iteration 25, L1 8.06195e-05, Linf 0.00270725, total time[s] 0.06711 +Converged at iteration 29, L1 6.99387e-05, Linf 0.00540022, total time[s] 0.093912 +Converged at iteration 30, L1 6.24055e-05, Linf 0.00683966, total time[s] 0.075991 +Converged at iteration 28, L1 6.47963e-05, Linf 0.00425328, total time[s] 0.073774 +Converged at iteration 30, L1 6.64053e-05, Linf 0.00415072, total time[s] 0.100257 +Converged at iteration 29, L1 9.83494e-05, Linf 0.00293698, total time[s] 0.076351 +Converged at iteration 28, L1 9.82167e-05, Linf 0.00208247, total time[s] 0.073684 +Converged at iteration 31, L1 8.07901e-05, Linf 0.00731023, total time[s] 0.089126 +Converged at iteration 28, L1 9.55353e-05, Linf 0.00832073, total time[s] 0.082642 +Converged at iteration 26, L1 7.05373e-05, Linf 0.0051798, total time[s] 0.076703 +Converged at iteration 24, L1 6.36651e-05, Linf 0.00226197, total time[s] 0.062806 +Converged at iteration 38, L1 6.18338e-05, Linf 0.00647388, total time[s] 0.111411 +Converged at iteration 34, L1 7.73595e-05, Linf 0.00665401, total time[s] 0.116382 +Converged at iteration 24, L1 9.72122e-05, Linf 0.00349024, total time[s] 0.066005 +Converged at iteration 30, L1 5.53997e-05, Linf 0.0052483, total time[s] 0.079007 +Converged at iteration 27, L1 5.5632e-05, Linf 0.00832467, total time[s] 0.073987 +Converged at iteration 24, L1 7.27255e-05, Linf 0.00864638, total time[s] 0.095964 +Converged at iteration 19, L1 8.62869e-05, Linf 0.00497383, total time[s] 0.063888 +Converged at iteration 20, L1 5.14946e-05, Linf 0.00345725, total time[s] 0.077807 +Converged at iteration 23, L1 9.054e-05, Linf 0.00465825, total time[s] 0.076479 +Converged at iteration 25, L1 7.87887e-05, Linf 0.00666051, total time[s] 0.102032 +Converged at iteration 21, L1 7.75592e-05, Linf 0.00597984, total time[s] 0.095642 +Converged at iteration 17, L1 5.66206e-05, Linf 0.00504833, total time[s] 0.077037 +Converged at iteration 31, L1 7.26615e-05, Linf 0.00367555, total time[s] 0.093638 +Converged at iteration 17, L1 9.97117e-05, Linf 0.00660379, total time[s] 0.051275 +Converged at iteration 21, L1 9.61056e-05, Linf 0.00451242, total time[s] 0.066046 +Converged at iteration 27, L1 5.48431e-05, Linf 0.00245826, total time[s] 0.099667 +Converged at iteration 23, L1 6.99292e-05, Linf 0.00660597, total time[s] 0.064153 +Converged at iteration 21, L1 9.99666e-05, Linf 0.00415114, total time[s] 0.06165 +Converged at iteration 22, L1 9.05367e-05, Linf 0.00279925, total time[s] 0.067212 +Converged at iteration 25, L1 7.77271e-05, Linf 0.00254907, total time[s] 0.086103 +Converged at iteration 29, L1 7.03053e-05, Linf 0.00470447, total time[s] 0.108995 +Converged at iteration 30, L1 6.42724e-05, Linf 0.00445567, total time[s] 0.100551 +Converged at iteration 28, L1 6.65708e-05, Linf 0.00364741, total time[s] 0.075318 +Converged at iteration 30, L1 6.9011e-05, Linf 0.00429577, total time[s] 0.077145 +Converged at iteration 29, L1 9.85787e-05, Linf 0.00294305, total time[s] 0.083402 +Converged at iteration 29, L1 6.27676e-05, Linf 0.00136374, total time[s] 0.087925 +Converged at iteration 31, L1 7.28069e-05, Linf 0.00710191, total time[s] 0.090495 +Converged at iteration 29, L1 5.17424e-05, Linf 0.00715602, total time[s] 0.080441 +Converged at iteration 26, L1 7.9257e-05, Linf 0.00584496, total time[s] 0.079997 +Converged at iteration 24, L1 6.67822e-05, Linf 0.00237911, total time[s] 0.085216 +Converged at iteration 38, L1 5.73977e-05, Linf 0.00621767, total time[s] 0.104662 +Converged at iteration 34, L1 7.40916e-05, Linf 0.00648192, total time[s] 0.103267 +Converged at iteration 24, L1 9.80038e-05, Linf 0.00352903, total time[s] 0.077618 +Converged at iteration 29, L1 9.66568e-05, Linf 0.00678025, total time[s] 0.075959 +Converged at iteration 27, L1 5.84226e-05, Linf 0.00892935, total time[s] 0.072656 +Converged at iteration 24, L1 8.17731e-05, Linf 0.00937663, total time[s] 0.073504 +Converged at iteration 19, L1 9.03916e-05, Linf 0.00481393, total time[s] 0.068615 +Converged at iteration 20, L1 4.8901e-05, Linf 0.00336345, total time[s] 0.099613 +Converged at iteration 23, L1 8.97818e-05, Linf 0.00471694, total time[s] 0.093842 +Converged at iteration 25, L1 8.27583e-05, Linf 0.00687875, total time[s] 0.085302 +Converged at iteration 21, L1 8.16125e-05, Linf 0.00615408, total time[s] 0.108873 +Converged at iteration 17, L1 5.68369e-05, Linf 0.00500263, total time[s] 0.07664 +Converged at iteration 31, L1 7.16587e-05, Linf 0.0038143, total time[s] 0.131121 +Converged at iteration 17, L1 7.47308e-05, Linf 0.00593372, total time[s] 0.05263 +Converged at iteration 21, L1 7.89548e-05, Linf 0.00379937, total time[s] 0.059082 +Converged at iteration 27, L1 5.52272e-05, Linf 0.00243034, total time[s] 0.072381 +Converged at iteration 23, L1 7.42077e-05, Linf 0.00673192, total time[s] 0.06436 +Converged at iteration 22, L1 5.78743e-05, Linf 0.00327531, total time[s] 0.061075 +Converged at iteration 22, L1 8.29455e-05, Linf 0.00287966, total time[s] 0.073896 +Converged at iteration 25, L1 7.45847e-05, Linf 0.00229933, total time[s] 0.070908 +Converged at iteration 29, L1 7.11283e-05, Linf 0.00491533, total time[s] 0.076966 +Converged at iteration 30, L1 6.85389e-05, Linf 0.00461256, total time[s] 0.077649 +Converged at iteration 28, L1 6.75409e-05, Linf 0.00363539, total time[s] 0.075109 +Converged at iteration 30, L1 7.17641e-05, Linf 0.0044452, total time[s] 0.080761 +Converged at iteration 29, L1 9.85215e-05, Linf 0.00293662, total time[s] 0.076457 +Converged at iteration 29, L1 6.4364e-05, Linf 0.00132403, total time[s] 0.075222 +Converged at iteration 31, L1 6.48107e-05, Linf 0.00690639, total time[s] 0.08499 +Converged at iteration 29, L1 5.56927e-05, Linf 0.00777223, total time[s] 0.080635 +Converged at iteration 26, L1 8.91502e-05, Linf 0.00666038, total time[s] 0.086267 +Converged at iteration 24, L1 7.05963e-05, Linf 0.00247737, total time[s] 0.07625 +Converged at iteration 38, L1 5.39556e-05, Linf 0.00595356, total time[s] 0.113955 +Converged at iteration 34, L1 7.02761e-05, Linf 0.00618418, total time[s] 0.099691 +Converged at iteration 24, L1 9.90745e-05, Linf 0.00357206, total time[s] 0.125733 +Converged at iteration 29, L1 9.41326e-05, Linf 0.00668354, total time[s] 0.090456 +Converged at iteration 27, L1 6.0222e-05, Linf 0.00937785, total time[s] 0.088346 +Converged at iteration 24, L1 9.139e-05, Linf 0.0102341, total time[s] 0.078365 +Converged at iteration 19, L1 9.71389e-05, Linf 0.00512005, total time[s] 0.076492 +Converged at iteration 20, L1 4.71912e-05, Linf 0.00336525, total time[s] 0.109524 +Converged at iteration 23, L1 9.04577e-05, Linf 0.00475922, total time[s] 0.085222 +Converged at iteration 25, L1 8.40532e-05, Linf 0.00704975, total time[s] 0.091187 +Converged at iteration 21, L1 8.3814e-05, Linf 0.00594489, total time[s] 0.092342 +Converged at iteration 17, L1 5.67229e-05, Linf 0.00491053, total time[s] 0.063769 +Converged at iteration 31, L1 7.00837e-05, Linf 0.0039795, total time[s] 0.096339 +Converged at iteration 17, L1 5.6944e-05, Linf 0.00523881, total time[s] 0.051194 +Converged at iteration 20, L1 9.45816e-05, Linf 0.0038005, total time[s] 0.075996 +Converged at iteration 27, L1 5.85766e-05, Linf 0.00248221, total time[s] 0.086359 +Converged at iteration 23, L1 7.74714e-05, Linf 0.00685836, total time[s] 0.071182 +Converged at iteration 22, L1 6.17405e-05, Linf 0.00351244, total time[s] 0.066047 +Converged at iteration 22, L1 7.7432e-05, Linf 0.00297014, total time[s] 0.078894 +Converged at iteration 25, L1 7.13733e-05, Linf 0.00196263, total time[s] 0.06686 +Converged at iteration 29, L1 7.07881e-05, Linf 0.00502008, total time[s] 0.089824 +Converged at iteration 30, L1 7.21962e-05, Linf 0.00485696, total time[s] 0.085324 +Converged at iteration 28, L1 6.85136e-05, Linf 0.00363292, total time[s] 0.084528 +Converged at iteration 30, L1 7.46014e-05, Linf 0.00460552, total time[s] 0.085234 +Converged at iteration 29, L1 9.93459e-05, Linf 0.00296588, total time[s] 0.087227 +Converged at iteration 29, L1 6.79445e-05, Linf 0.00127929, total time[s] 0.082495 +Converged at iteration 31, L1 5.72027e-05, Linf 0.00680394, total time[s] 0.102287 +Converged at iteration 29, L1 5.96674e-05, Linf 0.0083358, total time[s] 0.083918 +Converged at iteration 27, L1 5.33109e-05, Linf 0.00573771, total time[s] 0.073645 +Converged at iteration 24, L1 7.46581e-05, Linf 0.00261632, total time[s] 0.064959 +Converged at iteration 37, L1 9.59705e-05, Linf 0.0070534, total time[s] 0.100607 +Converged at iteration 34, L1 6.62288e-05, Linf 0.00581773, total time[s] 0.112982 +Converged at iteration 25, L1 4.21916e-05, Linf 0.00209563, total time[s] 0.09077 +Converged at iteration 29, L1 8.85061e-05, Linf 0.00654455, total time[s] 0.090578 +Converged at iteration 27, L1 6.26456e-05, Linf 0.00985073, total time[s] 0.082435 +Converged at iteration 25, L1 4.42613e-05, Linf 0.0089186, total time[s] 0.078263 +Converged at iteration 20, L1 4.14122e-05, Linf 0.00377572, total time[s] 0.070537 +Converged at iteration 20, L1 4.55929e-05, Linf 0.0033654, total time[s] 0.09943 +Converged at iteration 23, L1 9.16996e-05, Linf 0.00479476, total time[s] 0.101507 +Converged at iteration 25, L1 8.70817e-05, Linf 0.00719353, total time[s] 0.097027 +Converged at iteration 21, L1 8.5702e-05, Linf 0.00600037, total time[s] 0.07833 +Converged at iteration 17, L1 5.74956e-05, Linf 0.00476685, total time[s] 0.095357 +Converged at iteration 31, L1 6.81891e-05, Linf 0.00413212, total time[s] 0.097175 +Converged at iteration 16, L1 9.34366e-05, Linf 0.00753242, total time[s] 0.046994 +Converged at iteration 20, L1 6.65657e-05, Linf 0.00282854, total time[s] 0.054699 +Converged at iteration 27, L1 5.94084e-05, Linf 0.00264025, total time[s] 0.073388 +Converged at iteration 23, L1 8.13692e-05, Linf 0.00699415, total time[s] 0.064398 +Converged at iteration 22, L1 6.67981e-05, Linf 0.00324624, total time[s] 0.062833 +Converged at iteration 22, L1 8.21262e-05, Linf 0.00310182, total time[s] 0.076952 +Converged at iteration 25, L1 6.86753e-05, Linf 0.00221458, total time[s] 0.101705 +Converged at iteration 29, L1 7.14649e-05, Linf 0.00505698, total time[s] 0.083022 +Converged at iteration 30, L1 7.59767e-05, Linf 0.00504641, total time[s] 0.089799 +Converged at iteration 28, L1 6.88224e-05, Linf 0.00373601, total time[s] 0.08024 +Converged at iteration 30, L1 7.74777e-05, Linf 0.00477927, total time[s] 0.088952 +Converged at iteration 30, L1 6.31791e-05, Linf 0.00227775, total time[s] 0.082276 +Converged at iteration 29, L1 7.39496e-05, Linf 0.00127221, total time[s] 0.084321 +Converged at iteration 30, L1 9.513e-05, Linf 0.00849973, total time[s] 0.10327 +Converged at iteration 29, L1 6.46804e-05, Linf 0.00895594, total time[s] 0.091161 +Converged at iteration 27, L1 6.03152e-05, Linf 0.00642237, total time[s] 0.074507 +Converged at iteration 24, L1 7.91434e-05, Linf 0.00272327, total time[s] 0.070022 +Converged at iteration 37, L1 9.03103e-05, Linf 0.00674905, total time[s] 0.123668 +Converged at iteration 34, L1 6.14356e-05, Linf 0.00556008, total time[s] 0.130076 +Converged at iteration 25, L1 4.35972e-05, Linf 0.00209173, total time[s] 0.083089 +Converged at iteration 29, L1 8.29272e-05, Linf 0.00647708, total time[s] 0.096699 +Converged at iteration 27, L1 6.494e-05, Linf 0.0103473, total time[s] 0.085014 +Converged at iteration 25, L1 4.91282e-05, Linf 0.00989675, total time[s] 0.130764 +Converged at iteration 20, L1 4.50863e-05, Linf 0.00405246, total time[s] 0.071924 +Converged at iteration 20, L1 4.34257e-05, Linf 0.00338261, total time[s] 0.075743 +Converged at iteration 23, L1 9.25566e-05, Linf 0.00486258, total time[s] 0.098275 +Converged at iteration 25, L1 8.85855e-05, Linf 0.00734164, total time[s] 0.106074 +Converged at iteration 21, L1 8.56622e-05, Linf 0.00598843, total time[s] 0.063949 +Converged at iteration 17, L1 5.86877e-05, Linf 0.00457541, total time[s] 0.046285 +Converged at iteration 31, L1 6.61762e-05, Linf 0.00433166, total time[s] 0.08165 +Converged at iteration 16, L1 9.88159e-05, Linf 0.00665014, total time[s] 0.045192 +Converged at iteration 18, L1 9.97352e-05, Linf 0.00391199, total time[s] 0.04957 +Converged at iteration 27, L1 6.36594e-05, Linf 0.00281623, total time[s] 0.072532 +Converged at iteration 23, L1 8.62089e-05, Linf 0.00716339, total time[s] 0.06105 +Converged at iteration 22, L1 7.09892e-05, Linf 0.00358686, total time[s] 0.064071 +Converged at iteration 22, L1 8.93128e-05, Linf 0.00328548, total time[s] 0.059852 +Converged at iteration 24, L1 9.79395e-05, Linf 0.00196444, total time[s] 0.089849 +Converged at iteration 29, L1 7.22224e-05, Linf 0.00509217, total time[s] 0.093587 +Converged at iteration 30, L1 8.16135e-05, Linf 0.00798998, total time[s] 0.094806 +Converged at iteration 28, L1 6.90155e-05, Linf 0.00370898, total time[s] 0.07319 +Converged at iteration 30, L1 8.12534e-05, Linf 0.00489377, total time[s] 0.0808 +Converged at iteration 30, L1 6.49273e-05, Linf 0.00232072, total time[s] 0.077879 +Converged at iteration 29, L1 7.74092e-05, Linf 0.00133675, total time[s] 0.129453 +Converged at iteration 30, L1 8.70141e-05, Linf 0.00835495, total time[s] 0.079309 +Converged at iteration 29, L1 7.18908e-05, Linf 0.00962132, total time[s] 0.079058 +Converged at iteration 27, L1 6.90271e-05, Linf 0.0071537, total time[s] 0.096262 +Converged at iteration 24, L1 8.31679e-05, Linf 0.00284264, total time[s] 0.07599 +Converged at iteration 37, L1 8.44067e-05, Linf 0.00646098, total time[s] 0.100852 +Converged at iteration 34, L1 5.62903e-05, Linf 0.00535442, total time[s] 0.102925 +Converged at iteration 25, L1 4.53933e-05, Linf 0.00209953, total time[s] 0.08915 +Converged at iteration 29, L1 7.4233e-05, Linf 0.00635213, total time[s] 0.08071 +Converged at iteration 27, L1 6.717e-05, Linf 0.0108617, total time[s] 0.070836 +Converged at iteration 25, L1 5.48655e-05, Linf 0.010662, total time[s] 0.085268 +Converged at iteration 20, L1 4.91563e-05, Linf 0.0042225, total time[s] 0.084465 +Converged at iteration 20, L1 4.15404e-05, Linf 0.00337594, total time[s] 0.102603 +Converged at iteration 23, L1 9.45973e-05, Linf 0.0048878, total time[s] 0.094552 +Converged at iteration 25, L1 9.0086e-05, Linf 0.00750796, total time[s] 0.092672 +Converged at iteration 21, L1 8.62927e-05, Linf 0.00610559, total time[s] 0.072121 +Converged at iteration 17, L1 6.07439e-05, Linf 0.00442865, total time[s] 0.065314 +Converged at iteration 31, L1 6.36799e-05, Linf 0.0045337, total time[s] 0.080329 +Converged at iteration 17, L1 7.82046e-05, Linf 0.00307971, total time[s] 0.047352 +Converged at iteration 18, L1 8.10948e-05, Linf 0.00253759, total time[s] 0.050892 +Converged at iteration 27, L1 6.6665e-05, Linf 0.00297777, total time[s] 0.07676 +Converged at iteration 23, L1 9.17031e-05, Linf 0.00741395, total time[s] 0.064604 +Converged at iteration 22, L1 7.52379e-05, Linf 0.00389217, total time[s] 0.061588 +Converged at iteration 22, L1 9.85434e-05, Linf 0.00357753, total time[s] 0.058048 +Converged at iteration 24, L1 9.15058e-05, Linf 0.00161201, total time[s] 0.063898 +Converged at iteration 29, L1 7.26083e-05, Linf 0.0050518, total time[s] 0.074892 +Converged at iteration 30, L1 8.44854e-05, Linf 0.0055675, total time[s] 0.077863 +Converged at iteration 28, L1 6.90156e-05, Linf 0.00332074, total time[s] 0.073399 +Converged at iteration 30, L1 8.4536e-05, Linf 0.00515593, total time[s] 0.091259 +Converged at iteration 30, L1 6.76249e-05, Linf 0.00235966, total time[s] 0.083801 +Converged at iteration 29, L1 8.45772e-05, Linf 0.00154433, total time[s] 0.082982 +Converged at iteration 30, L1 7.9929e-05, Linf 0.00821501, total time[s] 0.092261 +Converged at iteration 29, L1 7.88319e-05, Linf 0.0103325, total time[s] 0.08965 +Converged at iteration 27, L1 7.93135e-05, Linf 0.00790958, total time[s] 0.085103 +Converged at iteration 24, L1 8.79993e-05, Linf 0.00296072, total time[s] 0.067507 +Converged at iteration 37, L1 7.86079e-05, Linf 0.0062092, total time[s] 0.125538 +Converged at iteration 34, L1 5.15747e-05, Linf 0.00516443, total time[s] 0.111763 +Converged at iteration 25, L1 4.69877e-05, Linf 0.00205832, total time[s] 0.074956 +Converged at iteration 29, L1 6.65433e-05, Linf 0.00619117, total time[s] 0.083496 +Converged at iteration 27, L1 7.01168e-05, Linf 0.0113776, total time[s] 0.072647 +Converged at iteration 25, L1 6.12391e-05, Linf 0.0115847, total time[s] 0.113086 +Converged at iteration 20, L1 5.25755e-05, Linf 0.00443949, total time[s] 0.066813 +Converged at iteration 19, L1 9.56784e-05, Linf 0.00510305, total time[s] 0.120572 +Converged at iteration 23, L1 9.59949e-05, Linf 0.00488189, total time[s] 0.108824 +Converged at iteration 25, L1 8.23107e-05, Linf 0.00765293, total time[s] 0.110493 +Converged at iteration 21, L1 8.55511e-05, Linf 0.00598536, total time[s] 0.096968 +Converged at iteration 17, L1 6.27415e-05, Linf 0.00407814, total time[s] 0.066357 +Converged at iteration 31, L1 6.09399e-05, Linf 0.00478926, total time[s] 0.092053 +Converged at iteration 18, L1 7.18621e-05, Linf 0.00155593, total time[s] 0.05406 +Converged at iteration 19, L1 7.03013e-05, Linf 0.00156867, total time[s] 0.053537 +Converged at iteration 27, L1 7.01952e-05, Linf 0.00311491, total time[s] 0.071759 +Converged at iteration 23, L1 9.74948e-05, Linf 0.00780106, total time[s] 0.063142 +Converged at iteration 22, L1 7.89082e-05, Linf 0.00425948, total time[s] 0.080391 +Converged at iteration 23, L1 6.51092e-05, Linf 0.00279551, total time[s] 0.078002 +Converged at iteration 24, L1 8.52165e-05, Linf 0.00162311, total time[s] 0.082383 +Converged at iteration 29, L1 7.36253e-05, Linf 0.00507482, total time[s] 0.085088 +Converged at iteration 30, L1 8.9467e-05, Linf 0.00578715, total time[s] 0.078127 +Converged at iteration 28, L1 6.93357e-05, Linf 0.00318124, total time[s] 0.099134 +Converged at iteration 30, L1 8.9845e-05, Linf 0.00539226, total time[s] 0.098086 +Converged at iteration 30, L1 7.17686e-05, Linf 0.0024005, total time[s] 0.091328 +Converged at iteration 29, L1 9.41071e-05, Linf 0.00173302, total time[s] 0.087319 +Converged at iteration 30, L1 7.4961e-05, Linf 0.00807254, total time[s] 0.119731 +Converged at iteration 29, L1 8.73437e-05, Linf 0.0110977, total time[s] 0.087113 +Converged at iteration 27, L1 9.15759e-05, Linf 0.00868929, total time[s] 0.099591 +Converged at iteration 24, L1 9.11614e-05, Linf 0.00308737, total time[s] 0.079355 +Converged at iteration 37, L1 7.26503e-05, Linf 0.00599437, total time[s] 0.112664 +Converged at iteration 33, L1 9.76144e-05, Linf 0.00626909, total time[s] 0.106695 +Converged at iteration 25, L1 4.75554e-05, Linf 0.00202919, total time[s] 0.080006 +Converged at iteration 29, L1 6.04452e-05, Linf 0.00596138, total time[s] 0.089757 +Converged at iteration 27, L1 7.38044e-05, Linf 0.0118754, total time[s] 0.095895 +Converged at iteration 25, L1 6.77049e-05, Linf 0.0124446, total time[s] 0.092432 +Converged at iteration 20, L1 5.59781e-05, Linf 0.0046831, total time[s] 0.094046 +Converged at iteration 19, L1 8.79323e-05, Linf 0.00512188, total time[s] 0.086213 +Converged at iteration 23, L1 9.96184e-05, Linf 0.00490009, total time[s] 0.078548 +Converged at iteration 25, L1 7.08288e-05, Linf 0.00778465, total time[s] 0.101893 +Converged at iteration 21, L1 8.48349e-05, Linf 0.0059218, total time[s] 0.080075 +Converged at iteration 17, L1 6.64065e-05, Linf 0.00375964, total time[s] 0.05931 +Converged at iteration 31, L1 5.82319e-05, Linf 0.00504372, total time[s] 0.106969 +Converged at iteration 18, L1 9.17006e-05, Linf 0.00212251, total time[s] 0.070852 +Converged at iteration 20, L1 6.67225e-05, Linf 0.00208172, total time[s] 0.074865 +Converged at iteration 27, L1 7.49184e-05, Linf 0.00329897, total time[s] 0.07532 +Converged at iteration 24, L1 4.78762e-05, Linf 0.00379879, total time[s] 0.069589 +Converged at iteration 22, L1 8.38517e-05, Linf 0.00462713, total time[s] 0.062022 +Converged at iteration 23, L1 7.26057e-05, Linf 0.00281524, total time[s] 0.073349 +Converged at iteration 24, L1 7.82454e-05, Linf 0.00163625, total time[s] 0.067311 +Converged at iteration 29, L1 7.26856e-05, Linf 0.00512165, total time[s] 0.090725 +Converged at iteration 30, L1 9.43531e-05, Linf 0.00609452, total time[s] 0.079798 +Converged at iteration 28, L1 6.89462e-05, Linf 0.00290982, total time[s] 0.080071 +Converged at iteration 30, L1 9.21503e-05, Linf 0.0055918, total time[s] 0.076446 +Converged at iteration 30, L1 7.1761e-05, Linf 0.00245124, total time[s] 0.075572 +Converged at iteration 29, L1 9.91384e-05, Linf 0.00191114, total time[s] 0.075011 +Converged at iteration 30, L1 6.97175e-05, Linf 0.00791774, total time[s] 0.083445 +Converged at iteration 29, L1 9.36927e-05, Linf 0.0119066, total time[s] 0.117595 +Converged at iteration 28, L1 4.75557e-05, Linf 0.00745378, total time[s] 0.079288 +Converged at iteration 24, L1 9.65681e-05, Linf 0.00323419, total time[s] 0.067513 +Converged at iteration 37, L1 6.66373e-05, Linf 0.00581057, total time[s] 0.116459 +Converged at iteration 33, L1 9.15812e-05, Linf 0.00601056, total time[s] 0.112769 +Converged at iteration 25, L1 5.01869e-05, Linf 0.00200483, total time[s] 0.111292 +Converged at iteration 29, L1 5.64882e-05, Linf 0.00580364, total time[s] 0.082631 +Converged at iteration 27, L1 7.71011e-05, Linf 0.0123071, total time[s] 0.087899 +Converged at iteration 25, L1 7.48722e-05, Linf 0.0131415, total time[s] 0.105059 +Converged at iteration 20, L1 5.97791e-05, Linf 0.00503956, total time[s] 0.083001 +Converged at iteration 19, L1 7.98296e-05, Linf 0.00513624, total time[s] 0.091692 +Converged at iteration 24, L1 5.36695e-05, Linf 0.00302667, total time[s] 0.08711 +Converged at iteration 25, L1 5.92803e-05, Linf 0.00785121, total time[s] 0.08738 +Converged at iteration 21, L1 8.41871e-05, Linf 0.00589296, total time[s] 0.064394 +Converged at iteration 17, L1 7.08162e-05, Linf 0.00338527, total time[s] 0.04759 +Converged at iteration 31, L1 5.73592e-05, Linf 0.0053, total time[s] 0.084826 +Converged at iteration 19, L1 7.23504e-05, Linf 0.00273548, total time[s] 0.053291 +Converged at iteration 20, L1 9.25474e-05, Linf 0.00296882, total time[s] 0.055152 +Converged at iteration 27, L1 7.70824e-05, Linf 0.00349838, total time[s] 0.070574 +Converged at iteration 24, L1 5.24803e-05, Linf 0.00402386, total time[s] 0.063395 +Converged at iteration 22, L1 8.85317e-05, Linf 0.00488524, total time[s] 0.058894 +Converged at iteration 23, L1 8.17457e-05, Linf 0.00300573, total time[s] 0.060682 +Converged at iteration 24, L1 7.08088e-05, Linf 0.00165007, total time[s] 0.063381 +Converged at iteration 29, L1 7.2778e-05, Linf 0.00516744, total time[s] 0.075409 +Converged at iteration 31, L1 5.24367e-05, Linf 0.00345169, total time[s] 0.079446 +Converged at iteration 28, L1 6.81802e-05, Linf 0.0029991, total time[s] 0.074794 +Converged at iteration 30, L1 9.76219e-05, Linf 0.0059189, total time[s] 0.080346 +Converged at iteration 30, L1 7.70289e-05, Linf 0.00252321, total time[s] 0.081394 +Converged at iteration 30, L1 5.65327e-05, Linf 0.00122026, total time[s] 0.078056 +Converged at iteration 30, L1 6.57155e-05, Linf 0.00773805, total time[s] 0.076853 +Converged at iteration 30, L1 3.99621e-05, Linf 0.00945496, total time[s] 0.07822 +Converged at iteration 28, L1 5.47328e-05, Linf 0.00818404, total time[s] 0.073752 +Converged at iteration 25, L1 5.42955e-05, Linf 0.00204289, total time[s] 0.070644 +Converged at iteration 37, L1 6.11372e-05, Linf 0.00564767, total time[s] 0.104594 +Converged at iteration 33, L1 8.65903e-05, Linf 0.00573239, total time[s] 0.097031 +Converged at iteration 25, L1 5.00842e-05, Linf 0.00205647, total time[s] 0.087965 +Converged at iteration 28, L1 9.67449e-05, Linf 0.0077033, total time[s] 0.074821 +Converged at iteration 27, L1 7.99425e-05, Linf 0.0126661, total time[s] 0.069866 +Converged at iteration 25, L1 8.09738e-05, Linf 0.0140889, total time[s] 0.072673 +Converged at iteration 20, L1 6.42167e-05, Linf 0.00542402, total time[s] 0.071863 +Converged at iteration 19, L1 7.48822e-05, Linf 0.0051584, total time[s] 0.071726 +Converged at iteration 24, L1 5.37946e-05, Linf 0.0029989, total time[s] 0.078166 +Converged at iteration 25, L1 4.92699e-05, Linf 0.00784157, total time[s] 0.108886 +Converged at iteration 21, L1 8.10913e-05, Linf 0.0058764, total time[s] 0.069295 +Converged at iteration 17, L1 7.70331e-05, Linf 0.00295083, total time[s] 0.069665 +Converged at iteration 31, L1 5.65393e-05, Linf 0.00560855, total time[s] 0.112692 +Converged at iteration 19, L1 8.41391e-05, Linf 0.00333798, total time[s] 0.058547 +Converged at iteration 21, L1 7.73498e-05, Linf 0.00353596, total time[s] 0.061388 +Converged at iteration 27, L1 8.18423e-05, Linf 0.0036191, total time[s] 0.080527 +Converged at iteration 24, L1 5.8825e-05, Linf 0.00422193, total time[s] 0.069396 +Converged at iteration 22, L1 9.31459e-05, Linf 0.00513597, total time[s] 0.065194 +Converged at iteration 23, L1 9.26653e-05, Linf 0.00354971, total time[s] 0.069657 +Converged at iteration 23, L1 9.0515e-05, Linf 0.00243259, total time[s] 0.07504 +Converged at iteration 29, L1 7.14683e-05, Linf 0.00523084, total time[s] 0.092059 +Converged at iteration 31, L1 5.60615e-05, Linf 0.0037755, total time[s] 0.097547 +Converged at iteration 28, L1 6.68127e-05, Linf 0.00279431, total time[s] 0.077644 +Converged at iteration 30, L1 9.97667e-05, Linf 0.00611341, total time[s] 0.077784 +Converged at iteration 30, L1 7.84838e-05, Linf 0.00264082, total time[s] 0.079175 +Converged at iteration 30, L1 6.14664e-05, Linf 0.0013124, total time[s] 0.078426 +Converged at iteration 30, L1 6.23978e-05, Linf 0.00753121, total time[s] 0.076775 +Converged at iteration 30, L1 4.42825e-05, Linf 0.0100739, total time[s] 0.077368 +Converged at iteration 28, L1 6.20609e-05, Linf 0.00892607, total time[s] 0.084573 +Converged at iteration 25, L1 5.50083e-05, Linf 0.00207754, total time[s] 0.066038 +Converged at iteration 37, L1 5.57549e-05, Linf 0.00550077, total time[s] 0.102693 +Converged at iteration 33, L1 8.30125e-05, Linf 0.00542953, total time[s] 0.095531 +Converged at iteration 25, L1 5.25067e-05, Linf 0.00212452, total time[s] 0.075477 +Converged at iteration 28, L1 9.41081e-05, Linf 0.00763929, total time[s] 0.069672 +Converged at iteration 27, L1 8.44643e-05, Linf 0.0129762, total time[s] 0.06731 +Converged at iteration 25, L1 8.80581e-05, Linf 0.0149017, total time[s] 0.062622 +Converged at iteration 20, L1 6.89685e-05, Linf 0.00582374, total time[s] 0.062301 +Converged at iteration 19, L1 7.11528e-05, Linf 0.00516775, total time[s] 0.058387 +Converged at iteration 24, L1 5.46871e-05, Linf 0.00295996, total time[s] 0.069689 +Converged at iteration 24, L1 9.52199e-05, Linf 0.0104601, total time[s] 0.104933 +Converged at iteration 21, L1 7.99191e-05, Linf 0.0058983, total time[s] 0.058754 +Converged at iteration 17, L1 8.45234e-05, Linf 0.00250658, total time[s] 0.048185 +Converged at iteration 31, L1 5.73986e-05, Linf 0.00591162, total time[s] 0.104641 +Converged at iteration 20, L1 6.11128e-05, Linf 0.00361676, total time[s] 0.064057 +Converged at iteration 21, L1 9.44707e-05, Linf 0.00497878, total time[s] 0.073641 +Converged at iteration 27, L1 8.01408e-05, Linf 0.00490548, total time[s] 0.072443 +Converged at iteration 24, L1 6.19985e-05, Linf 0.00438498, total time[s] 0.063856 +Converged at iteration 22, L1 9.85531e-05, Linf 0.00530154, total time[s] 0.05915 +Converged at iteration 24, L1 5.93334e-05, Linf 0.00485842, total time[s] 0.062015 +Converged at iteration 23, L1 8.23071e-05, Linf 0.00242965, total time[s] 0.059064 +Converged at iteration 29, L1 7.01567e-05, Linf 0.00523986, total time[s] 0.075456 +Converged at iteration 31, L1 6.03695e-05, Linf 0.00391724, total time[s] 0.078364 +Converged at iteration 28, L1 6.53932e-05, Linf 0.00274684, total time[s] 0.071631 +Converged at iteration 31, L1 5.59492e-05, Linf 0.00483983, total time[s] 0.07892 +Converged at iteration 30, L1 8.12637e-05, Linf 0.00279738, total time[s] 0.11092 +Converged at iteration 30, L1 6.5784e-05, Linf 0.00142229, total time[s] 0.085623 +Converged at iteration 30, L1 5.96466e-05, Linf 0.00730057, total time[s] 0.077224 +Converged at iteration 30, L1 4.81723e-05, Linf 0.0107853, total time[s] 0.077895 +Converged at iteration 28, L1 7.03039e-05, Linf 0.00969024, total time[s] 0.071944 +Converged at iteration 25, L1 5.66954e-05, Linf 0.00213257, total time[s] 0.065424 +Converged at iteration 36, L1 9.56498e-05, Linf 0.00662532, total time[s] 0.091725 +Converged at iteration 33, L1 8.08542e-05, Linf 0.00512648, total time[s] 0.088318 +Converged at iteration 25, L1 5.41953e-05, Linf 0.0022129, total time[s] 0.07926 +Converged at iteration 28, L1 8.61339e-05, Linf 0.00761078, total time[s] 0.076361 +Converged at iteration 27, L1 8.38002e-05, Linf 0.0125038, total time[s] 0.06879 +Converged at iteration 25, L1 9.62031e-05, Linf 0.0158165, total time[s] 0.064559 +Converged at iteration 20, L1 7.3973e-05, Linf 0.00664229, total time[s] 0.068623 +Converged at iteration 19, L1 6.91435e-05, Linf 0.00518827, total time[s] 0.061661 +Converged at iteration 24, L1 5.5325e-05, Linf 0.00292027, total time[s] 0.06786 +Converged at iteration 24, L1 8.04151e-05, Linf 0.0104815, total time[s] 0.076643 +Converged at iteration 21, L1 7.47791e-05, Linf 0.00589386, total time[s] 0.064418 +Converged at iteration 17, L1 9.39168e-05, Linf 0.00215681, total time[s] 0.055032 +Converged at iteration 31, L1 5.96717e-05, Linf 0.00625037, total time[s] 0.109767 +Converged at iteration 20, L1 7.18293e-05, Linf 0.00453126, total time[s] 0.054842 +Converged at iteration 22, L1 6.36106e-05, Linf 0.00429446, total time[s] 0.061856 +Converged at iteration 27, L1 8.40403e-05, Linf 0.00382131, total time[s] 0.07229 +Converged at iteration 24, L1 6.5326e-05, Linf 0.00452573, total time[s] 0.063729 +Converged at iteration 23, L1 5.69719e-05, Linf 0.00417545, total time[s] 0.05971 +Converged at iteration 24, L1 6.56493e-05, Linf 0.00341199, total time[s] 0.063327 +Converged at iteration 23, L1 7.58753e-05, Linf 0.00285279, total time[s] 0.059938 +Converged at iteration 29, L1 6.74597e-05, Linf 0.00526337, total time[s] 0.074438 +Converged at iteration 31, L1 6.97178e-05, Linf 0.00416753, total time[s] 0.078563 +Converged at iteration 28, L1 6.43682e-05, Linf 0.00272371, total time[s] 0.07216 +Converged at iteration 31, L1 5.68851e-05, Linf 0.00516625, total time[s] 0.079456 +Converged at iteration 30, L1 8.44514e-05, Linf 0.00283847, total time[s] 0.076372 +Converged at iteration 30, L1 6.72943e-05, Linf 0.00163304, total time[s] 0.077207 +Converged at iteration 30, L1 5.78163e-05, Linf 0.00698791, total time[s] 0.076589 +Converged at iteration 30, L1 5.26658e-05, Linf 0.0116234, total time[s] 0.076344 +Converged at iteration 28, L1 7.9251e-05, Linf 0.0105181, total time[s] 0.07212 +Converged at iteration 25, L1 5.66714e-05, Linf 0.00219377, total time[s] 0.064998 +Converged at iteration 36, L1 8.88685e-05, Linf 0.00664354, total time[s] 0.092319 +Converged at iteration 33, L1 8.03554e-05, Linf 0.00488153, total time[s] 0.08865 +Converged at iteration 25, L1 5.32311e-05, Linf 0.00229905, total time[s] 0.069315 +Converged at iteration 28, L1 7.84242e-05, Linf 0.00759113, total time[s] 0.074754 +Converged at iteration 27, L1 8.22357e-05, Linf 0.0119807, total time[s] 0.070464 +Converged at iteration 26, L1 2.89849e-05, Linf 0.0100042, total time[s] 0.06879 +Converged at iteration 20, L1 7.94931e-05, Linf 0.00706331, total time[s] 0.061156 +Converged at iteration 19, L1 6.94724e-05, Linf 0.00515, total time[s] 0.079703 +Converged at iteration 24, L1 5.69538e-05, Linf 0.00288442, total time[s] 0.090104 +Converged at iteration 24, L1 6.76257e-05, Linf 0.0102961, total time[s] 0.070997 +Converged at iteration 21, L1 6.52177e-05, Linf 0.00585978, total time[s] 0.074801 +Converged at iteration 18, L1 5.52714e-05, Linf 0.00165369, total time[s] 0.072008 +Converged at iteration 31, L1 6.22659e-05, Linf 0.00655291, total time[s] 0.107169 +Converged at iteration 20, L1 8.99872e-05, Linf 0.00493366, total time[s] 0.057235 +Converged at iteration 22, L1 6.92138e-05, Linf 0.00499583, total time[s] 0.060399 +Converged at iteration 27, L1 8.50056e-05, Linf 0.00398454, total time[s] 0.074149 +Converged at iteration 24, L1 6.69634e-05, Linf 0.00468679, total time[s] 0.063463 +Converged at iteration 23, L1 5.89002e-05, Linf 0.00357561, total time[s] 0.064562 +Converged at iteration 24, L1 7.29584e-05, Linf 0.00394128, total time[s] 0.063538 +Converged at iteration 23, L1 7.50114e-05, Linf 0.00372665, total time[s] 0.062182 +Converged at iteration 28, L1 9.94953e-05, Linf 0.00644129, total time[s] 0.078262 +Converged at iteration 31, L1 6.81174e-05, Linf 0.0043477, total time[s] 0.080725 +Converged at iteration 28, L1 6.15749e-05, Linf 0.00272594, total time[s] 0.073245 +Converged at iteration 31, L1 5.83418e-05, Linf 0.00541616, total time[s] 0.08257 +Converged at iteration 30, L1 8.76829e-05, Linf 0.00292207, total time[s] 0.077954 +Converged at iteration 30, L1 7.18668e-05, Linf 0.00186142, total time[s] 0.077986 +Converged at iteration 30, L1 5.67527e-05, Linf 0.00657129, total time[s] 0.07752 +Converged at iteration 30, L1 5.77327e-05, Linf 0.0125725, total time[s] 0.07729 +Converged at iteration 28, L1 8.8952e-05, Linf 0.0113938, total time[s] 0.0742 +Converged at iteration 25, L1 5.68878e-05, Linf 0.00227367, total time[s] 0.067183 +Converged at iteration 36, L1 8.32066e-05, Linf 0.00655321, total time[s] 0.098236 +Converged at iteration 33, L1 8.10818e-05, Linf 0.00473435, total time[s] 0.098132 +Converged at iteration 25, L1 5.44086e-05, Linf 0.00237866, total time[s] 0.069212 +Converged at iteration 28, L1 5.06346e-05, Linf 0.00750673, total time[s] 0.073085 +Converged at iteration 27, L1 7.76191e-05, Linf 0.011957, total time[s] 0.070895 +Converged at iteration 26, L1 3.1427e-05, Linf 0.0112359, total time[s] 0.070265 +Converged at iteration 20, L1 8.6098e-05, Linf 0.00744644, total time[s] 0.056816 +Converged at iteration 19, L1 7.13196e-05, Linf 0.00508428, total time[s] 0.060722 +Converged at iteration 24, L1 5.94924e-05, Linf 0.00284964, total time[s] 0.086588 +Converged at iteration 24, L1 5.48933e-05, Linf 0.00998043, total time[s] 0.107658 +Converged at iteration 21, L1 5.31889e-05, Linf 0.00561893, total time[s] 0.06764 +Converged at iteration 18, L1 6.44258e-05, Linf 0.00195394, total time[s] 0.061658 +Converged at iteration 31, L1 6.49643e-05, Linf 0.0069323, total time[s] 0.100008 +Converged at iteration 21, L1 6.30274e-05, Linf 0.00341701, total time[s] 0.056736 +Converged at iteration 22, L1 7.65675e-05, Linf 0.00568233, total time[s] 0.059232 +Converged at iteration 27, L1 8.69358e-05, Linf 0.00414616, total time[s] 0.071927 +Converged at iteration 24, L1 6.97591e-05, Linf 0.00486535, total time[s] 0.064707 +Converged at iteration 23, L1 6.17274e-05, Linf 0.00375621, total time[s] 0.061739 +Converged at iteration 24, L1 8.31998e-05, Linf 0.00564866, total time[s] 0.064135 +Converged at iteration 23, L1 7.82634e-05, Linf 0.00469595, total time[s] 0.08466 +Converged at iteration 28, L1 9.559e-05, Linf 0.00618123, total time[s] 0.087832 +Converged at iteration 31, L1 7.44968e-05, Linf 0.00502207, total time[s] 0.104342 +Converged at iteration 27, L1 9.96835e-05, Linf 0.00364127, total time[s] 0.081329 +Converged at iteration 31, L1 5.94604e-05, Linf 0.0057006, total time[s] 0.09615 +Converged at iteration 30, L1 9.1829e-05, Linf 0.00303244, total time[s] 0.104548 +Converged at iteration 30, L1 8.17404e-05, Linf 0.00220683, total time[s] 0.09534 +Converged at iteration 30, L1 5.53872e-05, Linf 0.00606039, total time[s] 0.092095 +Converged at iteration 30, L1 6.41707e-05, Linf 0.0137786, total time[s] 0.084317 +Converged at iteration 29, L1 4.08153e-05, Linf 0.00901969, total time[s] 0.07919 +Converged at iteration 25, L1 5.69927e-05, Linf 0.00233633, total time[s] 0.066846 +Converged at iteration 36, L1 7.9505e-05, Linf 0.0064112, total time[s] 0.094185 +Converged at iteration 33, L1 8.29305e-05, Linf 0.0047343, total time[s] 0.090256 +Converged at iteration 25, L1 5.40953e-05, Linf 0.00243668, total time[s] 0.078691 +Converged at iteration 27, L1 7.53447e-05, Linf 0.00956551, total time[s] 0.073013 +Converged at iteration 27, L1 8.03712e-05, Linf 0.0114336, total time[s] 0.068354 +Converged at iteration 26, L1 3.40149e-05, Linf 0.0110251, total time[s] 0.066573 +Converged at iteration 20, L1 9.28892e-05, Linf 0.00781416, total time[s] 0.058943 +Converged at iteration 19, L1 7.73836e-05, Linf 0.00502783, total time[s] 0.077575 +Converged at iteration 24, L1 5.99885e-05, Linf 0.00281043, total time[s] 0.081621 +Converged at iteration 24, L1 4.55732e-05, Linf 0.00958946, total time[s] 0.080823 +Converged at iteration 21, L1 4.50852e-05, Linf 0.00510172, total time[s] 0.060571 +Converged at iteration 18, L1 7.55066e-05, Linf 0.00818567, total time[s] 0.063792 +Converged at iteration 31, L1 6.75243e-05, Linf 0.00731065, total time[s] 0.101764 +Converged at iteration 21, L1 6.7589e-05, Linf 0.00379388, total time[s] 0.058072 +Converged at iteration 22, L1 8.66442e-05, Linf 0.00622758, total time[s] 0.059164 +Converged at iteration 27, L1 8.37886e-05, Linf 0.00419246, total time[s] 0.067746 +Converged at iteration 24, L1 7.18948e-05, Linf 0.00507562, total time[s] 0.059312 +Converged at iteration 23, L1 6.44907e-05, Linf 0.00389627, total time[s] 0.057408 +Converged at iteration 24, L1 9.15534e-05, Linf 0.00714173, total time[s] 0.059257 +Converged at iteration 23, L1 8.57765e-05, Linf 0.0055674, total time[s] 0.057364 +Converged at iteration 28, L1 9.08762e-05, Linf 0.00589102, total time[s] 0.068902 +Converged at iteration 31, L1 7.97517e-05, Linf 0.00523659, total time[s] 0.074586 +Converged at iteration 27, L1 9.71616e-05, Linf 0.00354571, total time[s] 0.067532 +Converged at iteration 31, L1 6.12023e-05, Linf 0.00598613, total time[s] 0.075637 +Converged at iteration 30, L1 9.61795e-05, Linf 0.00325963, total time[s] 0.080541 +Converged at iteration 30, L1 9.21906e-05, Linf 0.00255089, total time[s] 0.073096 +Converged at iteration 29, L1 9.87555e-05, Linf 0.00911601, total time[s] 0.070094 +Converged at iteration 30, L1 7.29237e-05, Linf 0.0149751, total time[s] 0.072262 +Converged at iteration 29, L1 4.68842e-05, Linf 0.00970866, total time[s] 0.070121 +Converged at iteration 25, L1 5.611e-05, Linf 0.00236447, total time[s] 0.163458 +Converged at iteration 36, L1 7.77018e-05, Linf 0.00628199, total time[s] 0.163036 +Converged at iteration 33, L1 8.63137e-05, Linf 0.00489349, total time[s] 0.110455 +Converged at iteration 25, L1 5.44652e-05, Linf 0.00252623, total time[s] 0.063154 +Converged at iteration 27, L1 4.90692e-05, Linf 0.00924715, total time[s] 0.069307 +Converged at iteration 27, L1 7.97378e-05, Linf 0.0114764, total time[s] 0.066371 +Converged at iteration 26, L1 3.59235e-05, Linf 0.0126907, total time[s] 0.088035 +Converged at iteration 20, L1 9.94997e-05, Linf 0.00825231, total time[s] 0.051709 +Converged at iteration 19, L1 7.97249e-05, Linf 0.00493882, total time[s] 0.064984 +Converged at iteration 24, L1 6.00572e-05, Linf 0.00277543, total time[s] 0.095311 +Converged at iteration 23, L1 9.93603e-05, Linf 0.0141281, total time[s] 0.081556 +Converged at iteration 20, L1 9.82647e-05, Linf 0.00688313, total time[s] 0.060574 +Converged at iteration 18, L1 8.38815e-05, Linf 0.00793753, total time[s] 0.047396 +Converged at iteration 31, L1 7.03509e-05, Linf 0.00767428, total time[s] 0.091452 +Converged at iteration 21, L1 6.63783e-05, Linf 0.00416213, total time[s] 0.056073 +Converged at iteration 22, L1 9.24644e-05, Linf 0.00686913, total time[s] 0.06973 +Converged at iteration 27, L1 8.00485e-05, Linf 0.00413036, total time[s] 0.078833 +Converged at iteration 24, L1 7.46973e-05, Linf 0.00534407, total time[s] 0.067337 +Converged at iteration 23, L1 6.74613e-05, Linf 0.00398237, total time[s] 0.086656 +Converged at iteration 25, L1 5.57175e-05, Linf 0.00360737, total time[s] 0.06982 +Converged at iteration 23, L1 9.78781e-05, Linf 0.00655436, total time[s] 0.071439 +Converged at iteration 28, L1 8.11679e-05, Linf 0.00551975, total time[s] 0.072892 +Converged at iteration 31, L1 8.63387e-05, Linf 0.00568594, total time[s] 0.084925 +Converged at iteration 27, L1 9.41609e-05, Linf 0.00346887, total time[s] 0.079134 +Converged at iteration 31, L1 6.02259e-05, Linf 0.00627515, total time[s] 0.084631 +Converged at iteration 30, L1 9.73415e-05, Linf 0.00330493, total time[s] 0.222824 +Converged at iteration 31, L1 4.93515e-05, Linf 0.00178885, total time[s] 0.08543 +Converged at iteration 29, L1 9.63464e-05, Linf 0.00863093, total time[s] 0.081217 +Converged at iteration 30, L1 8.31371e-05, Linf 0.0161129, total time[s] 0.085527 +Converged at iteration 29, L1 5.23394e-05, Linf 0.0104618, total time[s] 0.083434 +Converged at iteration 25, L1 5.39588e-05, Linf 0.00237992, total time[s] 0.068637 +Converged at iteration 36, L1 7.66713e-05, Linf 0.00641484, total time[s] 0.110824 +Converged at iteration 33, L1 8.98726e-05, Linf 0.00506431, total time[s] 0.11503 +Converged at iteration 25, L1 5.40685e-05, Linf 0.00262058, total time[s] 0.07052 +Converged at iteration 26, L1 8.44014e-05, Linf 0.0115051, total time[s] 0.076134 +Converged at iteration 27, L1 8.03832e-05, Linf 0.0120389, total time[s] 0.093966 +Converged at iteration 26, L1 3.59967e-05, Linf 0.012779, total time[s] 0.112916 +Converged at iteration 21, L1 3.51077e-05, Linf 0.00584987, total time[s] 0.083674 +Converged at iteration 19, L1 8.34916e-05, Linf 0.00482677, total time[s] 0.11108 +Converged at iteration 24, L1 6.02605e-05, Linf 0.00274142, total time[s] 0.109477 +Converged at iteration 23, L1 8.86122e-05, Linf 0.0140555, total time[s] 0.077387 +Converged at iteration 20, L1 9.10325e-05, Linf 0.00629134, total time[s] 0.059575 +Converged at iteration 18, L1 8.73351e-05, Linf 0.0027542, total time[s] 0.050087 +Converged at iteration 31, L1 7.21306e-05, Linf 0.00811792, total time[s] 0.095524 +Converged at iteration 21, L1 8.167e-05, Linf 0.00441872, total time[s] 0.05569 +Converged at iteration 22, L1 9.69819e-05, Linf 0.00771508, total time[s] 0.059426 +Converged at iteration 27, L1 7.68978e-05, Linf 0.00403984, total time[s] 0.071263 +Converged at iteration 24, L1 7.55098e-05, Linf 0.00554622, total time[s] 0.065794 +Converged at iteration 23, L1 6.91848e-05, Linf 0.00399208, total time[s] 0.078418 +Converged at iteration 25, L1 5.88414e-05, Linf 0.003867, total time[s] 0.09069 +Converged at iteration 24, L1 6.29028e-05, Linf 0.00527735, total time[s] 0.070016 +Converged at iteration 28, L1 7.2983e-05, Linf 0.00526769, total time[s] 0.074806 +Converged at iteration 31, L1 8.89097e-05, Linf 0.00580734, total time[s] 0.080436 +Converged at iteration 27, L1 9.15762e-05, Linf 0.00338287, total time[s] 0.07171 +Converged at iteration 31, L1 6.11601e-05, Linf 0.0065175, total time[s] 0.082704 +Converged at iteration 30, L1 9.83748e-05, Linf 0.00334161, total time[s] 0.099832 +Converged at iteration 31, L1 5.39051e-05, Linf 0.00198402, total time[s] 0.09366 +Converged at iteration 29, L1 9.50245e-05, Linf 0.00810372, total time[s] 0.076967 +Converged at iteration 30, L1 9.23688e-05, Linf 0.017047, total time[s] 0.078052 +Converged at iteration 29, L1 5.68517e-05, Linf 0.011151, total time[s] 0.075752 +Converged at iteration 25, L1 5.33788e-05, Linf 0.0023389, total time[s] 0.08604 +Converged at iteration 36, L1 7.8262e-05, Linf 0.00655374, total time[s] 0.108446 +Converged at iteration 33, L1 9.56574e-05, Linf 0.00534633, total time[s] 0.089952 +Converged at iteration 25, L1 5.82553e-05, Linf 0.00275736, total time[s] 0.075991 +Converged at iteration 26, L1 5.72286e-05, Linf 0.011116, total time[s] 0.075627 +Converged at iteration 27, L1 8.38161e-05, Linf 0.0123704, total time[s] 0.08063 +Converged at iteration 26, L1 3.73672e-05, Linf 0.0134472, total time[s] 0.098255 +Converged at iteration 21, L1 3.71225e-05, Linf 0.00613689, total time[s] 0.083001 +Converged at iteration 19, L1 8.75249e-05, Linf 0.00465955, total time[s] 0.078949 +Converged at iteration 24, L1 6.29277e-05, Linf 0.00270239, total time[s] 0.101115 +Converged at iteration 23, L1 8.22711e-05, Linf 0.0137136, total time[s] 0.108695 +Converged at iteration 20, L1 8.89874e-05, Linf 0.00544313, total time[s] 0.088722 +Converged at iteration 18, L1 9.70986e-05, Linf 0.00308202, total time[s] 0.099331 +Converged at iteration 31, L1 7.43729e-05, Linf 0.00859389, total time[s] 0.103786 +Converged at iteration 21, L1 9.60005e-05, Linf 0.00453567, total time[s] 0.061638 +Converged at iteration 23, L1 5.72076e-05, Linf 0.00531149, total time[s] 0.081173 +Converged at iteration 27, L1 7.4973e-05, Linf 0.00390627, total time[s] 0.085098 +Converged at iteration 24, L1 7.71265e-05, Linf 0.00567062, total time[s] 0.080517 +Converged at iteration 23, L1 7.18262e-05, Linf 0.0042183, total time[s] 0.067471 +Converged at iteration 25, L1 6.34705e-05, Linf 0.00413425, total time[s] 0.073698 +Converged at iteration 24, L1 7.50433e-05, Linf 0.00614681, total time[s] 0.064661 +Converged at iteration 28, L1 6.26249e-05, Linf 0.00512208, total time[s] 0.074154 +Converged at iteration 31, L1 9.31342e-05, Linf 0.00529696, total time[s] 0.085951 +Converged at iteration 27, L1 8.6806e-05, Linf 0.00321686, total time[s] 0.072006 +Converged at iteration 31, L1 6.22548e-05, Linf 0.00686508, total time[s] 0.083559 +Converged at iteration 31, L1 6.16877e-05, Linf 0.00220149, total time[s] 0.08903 +Converged at iteration 31, L1 6.34202e-05, Linf 0.00229786, total time[s] 0.080683 +Converged at iteration 29, L1 9.46574e-05, Linf 0.00758236, total time[s] 0.076111 +Converged at iteration 31, L1 3.27399e-05, Linf 0.00892492, total time[s] 0.080607 +Converged at iteration 29, L1 6.36663e-05, Linf 0.0118638, total time[s] 0.076098 +Converged at iteration 25, L1 5.24374e-05, Linf 0.00228347, total time[s] 0.066738 +Converged at iteration 36, L1 8.02311e-05, Linf 0.00683774, total time[s] 0.093402 +Converged at iteration 34, L1 4.49681e-05, Linf 0.00428812, total time[s] 0.095702 +Converged at iteration 25, L1 5.98848e-05, Linf 0.0028934, total time[s] 0.071137 +Converged at iteration 26, L1 4.25733e-05, Linf 0.0106707, total time[s] 0.068208 +Converged at iteration 27, L1 8.26187e-05, Linf 0.0133389, total time[s] 0.070091 +Converged at iteration 26, L1 3.90101e-05, Linf 0.0139311, total time[s] 0.068267 +Converged at iteration 21, L1 3.72991e-05, Linf 0.00639082, total time[s] 0.064025 +Converged at iteration 19, L1 8.9663e-05, Linf 0.00456046, total time[s] 0.067192 +Converged at iteration 24, L1 6.19283e-05, Linf 0.00265374, total time[s] 0.094708 +Converged at iteration 23, L1 7.7615e-05, Linf 0.0132397, total time[s] 0.078814 +Converged at iteration 20, L1 8.47499e-05, Linf 0.00495174, total time[s] 0.067402 +Converged at iteration 19, L1 4.95436e-05, Linf 0.00174512, total time[s] 0.0679 +Converged at iteration 31, L1 7.63605e-05, Linf 0.0089763, total time[s] 0.092164 +Converged at iteration 21, L1 9.94905e-05, Linf 0.00452322, total time[s] 0.057126 +Converged at iteration 23, L1 5.92681e-05, Linf 0.00553499, total time[s] 0.061913 +Converged at iteration 27, L1 7.28616e-05, Linf 0.0038432, total time[s] 0.073551 +Converged at iteration 24, L1 7.68712e-05, Linf 0.00566002, total time[s] 0.064809 +Converged at iteration 23, L1 7.35593e-05, Linf 0.00429123, total time[s] 0.062565 +Converged at iteration 25, L1 6.56265e-05, Linf 0.00428748, total time[s] 0.067155 +Converged at iteration 24, L1 8.56723e-05, Linf 0.00674522, total time[s] 0.066149 +Converged at iteration 27, L1 9.52641e-05, Linf 0.00662765, total time[s] 0.072077 +Converged at iteration 31, L1 9.65745e-05, Linf 0.00543399, total time[s] 0.079511 +Converged at iteration 27, L1 8.25468e-05, Linf 0.00309186, total time[s] 0.07083 +Converged at iteration 31, L1 6.37117e-05, Linf 0.00709392, total time[s] 0.079588 +Converged at iteration 31, L1 6.22981e-05, Linf 0.00229697, total time[s] 0.07949 +Converged at iteration 31, L1 6.80035e-05, Linf 0.00248624, total time[s] 0.079908 +Converged at iteration 29, L1 9.37045e-05, Linf 0.00711315, total time[s] 0.075381 +Converged at iteration 31, L1 3.52358e-05, Linf 0.00920223, total time[s] 0.079698 +Converged at iteration 29, L1 6.88972e-05, Linf 0.0124489, total time[s] 0.074986 +Converged at iteration 25, L1 5.20941e-05, Linf 0.00228139, total time[s] 0.068497 +Converged at iteration 36, L1 8.36405e-05, Linf 0.00725668, total time[s] 0.098361 +Converged at iteration 34, L1 4.86475e-05, Linf 0.00428057, total time[s] 0.094238 +Converged at iteration 25, L1 6.25474e-05, Linf 0.00298702, total time[s] 0.067885 +Converged at iteration 25, L1 8.68505e-05, Linf 0.0134444, total time[s] 0.066679 +Converged at iteration 27, L1 8.2152e-05, Linf 0.0135472, total time[s] 0.070194 +Converged at iteration 26, L1 4.18015e-05, Linf 0.0145795, total time[s] 0.068544 +Converged at iteration 21, L1 3.77596e-05, Linf 0.00653775, total time[s] 0.069427 +Converged at iteration 19, L1 9.10786e-05, Linf 0.00436219, total time[s] 0.057534 +Converged at iteration 24, L1 6.25994e-05, Linf 0.00270442, total time[s] 0.082731 +Converged at iteration 23, L1 7.61988e-05, Linf 0.0121455, total time[s] 0.069782 +Converged at iteration 20, L1 8.56913e-05, Linf 0.0050123, total time[s] 0.109996 +Converged at iteration 19, L1 5.45056e-05, Linf 0.00188383, total time[s] 0.073764 +Converged at iteration 31, L1 7.90985e-05, Linf 0.00951161, total time[s] 0.098699 +Converged at iteration 21, L1 9.97201e-05, Linf 0.0046002, total time[s] 0.062572 +Converged at iteration 23, L1 6.29715e-05, Linf 0.00585161, total time[s] 0.064579 +Converged at iteration 27, L1 7.27634e-05, Linf 0.0037339, total time[s] 0.075371 +Converged at iteration 24, L1 7.57958e-05, Linf 0.00557567, total time[s] 0.06987 +Converged at iteration 23, L1 7.74779e-05, Linf 0.00437774, total time[s] 0.063171 +Converged at iteration 25, L1 6.63595e-05, Linf 0.00442931, total time[s] 0.064366 +Converged at iteration 25, L1 5.89775e-05, Linf 0.00535129, total time[s] 0.069566 +Converged at iteration 27, L1 9.39675e-05, Linf 0.00667931, total time[s] 0.07314 +Converged at iteration 32, L1 5.33777e-05, Linf 0.00327687, total time[s] 0.082383 +Converged at iteration 27, L1 7.82164e-05, Linf 0.00295177, total time[s] 0.071989 +Converged at iteration 31, L1 6.70311e-05, Linf 0.00744117, total time[s] 0.084855 +Converged at iteration 31, L1 6.34395e-05, Linf 0.00226904, total time[s] 0.083484 +Converged at iteration 31, L1 7.68764e-05, Linf 0.00291363, total time[s] 0.085536 +Converged at iteration 29, L1 9.36921e-05, Linf 0.00648751, total time[s] 0.084576 +Converged at iteration 31, L1 4.04857e-05, Linf 0.00929771, total time[s] 0.093198 +Converged at iteration 29, L1 7.55339e-05, Linf 0.0133016, total time[s] 0.082829 +Converged at iteration 25, L1 5.25217e-05, Linf 0.00234948, total time[s] 0.066649 +Converged at iteration 36, L1 8.66392e-05, Linf 0.00760447, total time[s] 0.098001 +Converged at iteration 34, L1 5.19394e-05, Linf 0.00463721, total time[s] 0.105118 +Converged at iteration 25, L1 6.15951e-05, Linf 0.00305878, total time[s] 0.079837 +Converged at iteration 25, L1 7.48658e-05, Linf 0.0131126, total time[s] 0.177276 +Converged at iteration 27, L1 8.21277e-05, Linf 0.0136391, total time[s] 0.128338 +Converged at iteration 26, L1 4.42044e-05, Linf 0.0150107, total time[s] 0.110678 +Converged at iteration 21, L1 3.78581e-05, Linf 0.00671178, total time[s] 0.071208 +Converged at iteration 19, L1 9.04449e-05, Linf 0.00429271, total time[s] 0.069367 +Converged at iteration 24, L1 6.2244e-05, Linf 0.00265515, total time[s] 0.084813 +Converged at iteration 23, L1 7.42102e-05, Linf 0.0114857, total time[s] 0.122481 +Converged at iteration 20, L1 8.80192e-05, Linf 0.00501034, total time[s] 0.097216 +Converged at iteration 19, L1 5.71491e-05, Linf 0.00195529, total time[s] 0.055638 +Converged at iteration 31, L1 8.08121e-05, Linf 0.00983923, total time[s] 0.087359 +Converged at iteration 22, L1 6.99373e-05, Linf 0.00281378, total time[s] 0.067973 +Converged at iteration 23, L1 6.64573e-05, Linf 0.0060423, total time[s] 0.067986 +Converged at iteration 27, L1 6.92018e-05, Linf 0.00366633, total time[s] 0.09538 +Converged at iteration 24, L1 7.42261e-05, Linf 0.00550451, total time[s] 0.081783 +Converged at iteration 23, L1 7.94228e-05, Linf 0.00430986, total time[s] 0.08052 +Converged at iteration 25, L1 6.71812e-05, Linf 0.00449016, total time[s] 0.0931 +Converged at iteration 25, L1 6.54453e-05, Linf 0.00572072, total time[s] 0.068745 +Converged at iteration 27, L1 9.20619e-05, Linf 0.00677577, total time[s] 0.081039 +Converged at iteration 32, L1 5.5068e-05, Linf 0.00321893, total time[s] 0.23722 +Converged at iteration 26, L1 9.66635e-05, Linf 0.00399038, total time[s] 0.097562 +Converged at iteration 31, L1 6.71706e-05, Linf 0.00763178, total time[s] 0.10946 +Converged at iteration 31, L1 6.30102e-05, Linf 0.00231766, total time[s] 0.09916 +Converged at iteration 31, L1 8.56093e-05, Linf 0.00316255, total time[s] 0.100516 +Converged at iteration 29, L1 9.41976e-05, Linf 0.00616789, total time[s] 0.09193 +Converged at iteration 31, L1 4.35709e-05, Linf 0.0100884, total time[s] 0.087475 +Converged at iteration 29, L1 7.84959e-05, Linf 0.0137443, total time[s] 0.096722 +Converged at iteration 25, L1 5.20867e-05, Linf 0.00242694, total time[s] 0.090629 +Converged at iteration 36, L1 9.21762e-05, Linf 0.00806043, total time[s] 0.162575 +Converged at iteration 34, L1 5.76472e-05, Linf 0.00460557, total time[s] 0.124259 +Converged at iteration 25, L1 5.95082e-05, Linf 0.00313043, total time[s] 0.071241 +Converged at iteration 25, L1 6.12039e-05, Linf 0.0125245, total time[s] 0.076056 +Converged at iteration 27, L1 7.4869e-05, Linf 0.013635, total time[s] 0.083506 +Converged at iteration 26, L1 5.08032e-05, Linf 0.0156474, total time[s] 0.105807 +Converged at iteration 21, L1 3.77612e-05, Linf 0.006977, total time[s] 0.109218 +Converged at iteration 19, L1 8.90713e-05, Linf 0.00414375, total time[s] 0.100572 +Converged at iteration 24, L1 6.26039e-05, Linf 0.00254805, total time[s] 0.100801 +Converged at iteration 23, L1 7.38995e-05, Linf 0.0102547, total time[s] 0.103909 +Converged at iteration 20, L1 9.07185e-05, Linf 0.00503278, total time[s] 0.070405 +Converged at iteration 19, L1 6.28344e-05, Linf 0.00208918, total time[s] 0.05784 +Converged at iteration 31, L1 8.33531e-05, Linf 0.0104669, total time[s] 0.101252 +Converged at iteration 22, L1 7.15674e-05, Linf 0.00291982, total time[s] 0.073568 +Converged at iteration 23, L1 7.62949e-05, Linf 0.006386, total time[s] 0.078409 +Converged at iteration 27, L1 7.30143e-05, Linf 0.00363709, total time[s] 0.086572 +Converged at iteration 24, L1 7.11939e-05, Linf 0.00524678, total time[s] 0.069711 +Converged at iteration 23, L1 8.33999e-05, Linf 0.00442522, total time[s] 0.065707 +Converged at iteration 25, L1 7.01354e-05, Linf 0.00460247, total time[s] 0.080155 +Converged at iteration 25, L1 7.57765e-05, Linf 0.00620877, total time[s] 0.079414 +Converged at iteration 27, L1 8.76476e-05, Linf 0.00675486, total time[s] 0.077201 +Converged at iteration 32, L1 5.74593e-05, Linf 0.00321876, total time[s] 0.082284 +Converged at iteration 27, L1 7.01834e-05, Linf 0.00261767, total time[s] 0.07564 +Converged at iteration 31, L1 7.18365e-05, Linf 0.0080367, total time[s] 0.090335 +Converged at iteration 31, L1 6.35948e-05, Linf 0.00230873, total time[s] 0.087486 +Converged at iteration 31, L1 9.74777e-05, Linf 0.00372957, total time[s] 0.089168 +Converged at iteration 29, L1 9.83594e-05, Linf 0.00572108, total time[s] 0.086318 +Converged at iteration 31, L1 4.9772e-05, Linf 0.0100826, total time[s] 0.110815 +Converged at iteration 29, L1 8.22132e-05, Linf 0.0145678, total time[s] 0.087202 +Converged at iteration 25, L1 5.30079e-05, Linf 0.00257809, total time[s] 0.076734 +Converged at iteration 36, L1 9.64308e-05, Linf 0.00831365, total time[s] 0.143615 +Converged at iteration 34, L1 6.06216e-05, Linf 0.00488296, total time[s] 0.107612 +Converged at iteration 25, L1 5.83322e-05, Linf 0.00321455, total time[s] 0.094004 +Converged at iteration 25, L1 5.59004e-05, Linf 0.0121542, total time[s] 0.09563 +Converged at iteration 27, L1 7.72149e-05, Linf 0.0134765, total time[s] 0.166978 +Converged at iteration 26, L1 5.02691e-05, Linf 0.0162325, total time[s] 0.122364 +Converged at iteration 21, L1 3.77566e-05, Linf 0.00690803, total time[s] 0.09484 +Converged at iteration 19, L1 8.92607e-05, Linf 0.00406563, total time[s] 0.109196 +Converged at iteration 24, L1 6.29534e-05, Linf 0.00257964, total time[s] 0.068039 +Converged at iteration 23, L1 7.58807e-05, Linf 0.00969038, total time[s] 0.068475 +Converged at iteration 20, L1 9.41669e-05, Linf 0.00499568, total time[s] 0.072059 +Converged at iteration 19, L1 6.79492e-05, Linf 0.00216338, total time[s] 0.072288 +Converged at iteration 31, L1 8.41853e-05, Linf 0.0107475, total time[s] 0.092686 +Converged at iteration 22, L1 7.35738e-05, Linf 0.0029807, total time[s] 0.066346 +Converged at iteration 23, L1 7.48416e-05, Linf 0.00652535, total time[s] 0.066258 +Converged at iteration 27, L1 7.33887e-05, Linf 0.00365199, total time[s] 0.087756 +Converged at iteration 24, L1 7.0624e-05, Linf 0.00510983, total time[s] 0.065383 +Converged at iteration 23, L1 8.4557e-05, Linf 0.00449034, total time[s] 0.070924 +Converged at iteration 25, L1 7.00247e-05, Linf 0.004649, total time[s] 0.070666 +Converged at iteration 25, L1 7.81091e-05, Linf 0.00651952, total time[s] 0.068791 +Converged at iteration 27, L1 8.58601e-05, Linf 0.0068068, total time[s] 0.092208 +Converged at iteration 32, L1 5.83036e-05, Linf 0.00322324, total time[s] 0.083963 +Converged at iteration 27, L1 6.70882e-05, Linf 0.00248909, total time[s] 0.076612 +Converged at iteration 31, L1 7.0603e-05, Linf 0.00819338, total time[s] 0.088001 +Converged at iteration 31, L1 6.29337e-05, Linf 0.00236227, total time[s] 0.082463 +Converged at iteration 32, L1 4.77668e-05, Linf 0.00224289, total time[s] 0.085676 +Converged at iteration 30, L1 6.68298e-05, Linf 0.00481031, total time[s] 0.085745 +Converged at iteration 31, L1 5.5836e-05, Linf 0.0120363, total time[s] 0.0986 +Converged at iteration 29, L1 8.26414e-05, Linf 0.0149236, total time[s] 0.077219 +Converged at iteration 25, L1 5.27303e-05, Linf 0.00257757, total time[s] 0.073699 +Converged at iteration 37, L1 5.00348e-05, Linf 0.00669381, total time[s] 0.108413 +Converged at iteration 34, L1 6.8868e-05, Linf 0.0055852, total time[s] 0.115584 +Converged at iteration 25, L1 5.80843e-05, Linf 0.00331486, total time[s] 0.093345 +Converged at iteration 25, L1 5.05971e-05, Linf 0.0117142, total time[s] 0.066669 +Converged at iteration 27, L1 6.3197e-05, Linf 0.0130537, total time[s] 0.071121 +Converged at iteration 26, L1 6.06146e-05, Linf 0.0165743, total time[s] 0.099839 +Converged at iteration 21, L1 3.75847e-05, Linf 0.00703305, total time[s] 0.07974 +Converged at iteration 19, L1 8.95374e-05, Linf 0.00386806, total time[s] 0.066318 +Converged at iteration 24, L1 6.3137e-05, Linf 0.00255612, total time[s] 0.109642 +Converged at iteration 23, L1 7.88402e-05, Linf 0.00887202, total time[s] 0.071883 +Converged at iteration 20, L1 9.60895e-05, Linf 0.00497386, total time[s] 0.088352 +Converged at iteration 19, L1 7.13998e-05, Linf 0.00231673, total time[s] 0.054116 +Converged at iteration 31, L1 8.46615e-05, Linf 0.0112667, total time[s] 0.096517 +Converged at iteration 22, L1 7.06088e-05, Linf 0.0031053, total time[s] 0.076984 +Converged at iteration 23, L1 7.42034e-05, Linf 0.00681778, total time[s] 0.073562 +Converged at iteration 27, L1 7.07399e-05, Linf 0.00367633, total time[s] 0.098874 +Converged at iteration 24, L1 6.62052e-05, Linf 0.00480045, total time[s] 0.091156 +Converged at iteration 23, L1 8.55867e-05, Linf 0.00460374, total time[s] 0.082323 +Converged at iteration 25, L1 7.30134e-05, Linf 0.00477914, total time[s] 0.07818 +Converged at iteration 25, L1 7.95735e-05, Linf 0.00703106, total time[s] 0.083559 +Converged at iteration 27, L1 8.3898e-05, Linf 0.0069007, total time[s] 0.093136 +Converged at iteration 32, L1 5.93904e-05, Linf 0.00324284, total time[s] 0.107012 +Converged at iteration 27, L1 6.32579e-05, Linf 0.00229126, total time[s] 0.083891 +Converged at iteration 31, L1 7.36904e-05, Linf 0.00850622, total time[s] 0.089681 +Converged at iteration 31, L1 6.35992e-05, Linf 0.00232328, total time[s] 0.094973 +Converged at iteration 32, L1 5.37413e-05, Linf 0.0025109, total time[s] 0.089663 +Converged at iteration 30, L1 6.73759e-05, Linf 0.00295087, total time[s] 0.08044 +Converged at iteration 31, L1 5.78562e-05, Linf 0.0128094, total time[s] 0.08089 +Converged at iteration 29, L1 8.40954e-05, Linf 0.0155635, total time[s] 0.074507 +Converged at iteration 25, L1 5.37681e-05, Linf 0.00258303, total time[s] 0.068876 +Converged at iteration 37, L1 5.12317e-05, Linf 0.00697897, total time[s] 0.322639 +Converged at iteration 34, L1 7.02021e-05, Linf 0.00548445, total time[s] 0.110323 +Converged at iteration 25, L1 5.73551e-05, Linf 0.0034044, total time[s] 0.078415 +Converged at iteration 25, L1 4.75674e-05, Linf 0.0113983, total time[s] 0.081045 +Converged at iteration 27, L1 4.44078e-05, Linf 0.0126198, total time[s] 0.090163 +Converged at iteration 26, L1 5.52602e-05, Linf 0.0166631, total time[s] 0.101358 +Converged at iteration 21, L1 3.74359e-05, Linf 0.0071047, total time[s] 0.093351 +Converged at iteration 19, L1 8.90326e-05, Linf 0.00381458, total time[s] 0.079556 +Converged at iteration 24, L1 6.23019e-05, Linf 0.00251888, total time[s] 0.082289 +Converged at iteration 23, L1 8.07935e-05, Linf 0.00843953, total time[s] 0.08451 +Converged at iteration 20, L1 9.79849e-05, Linf 0.00489066, total time[s] 0.061987 +Converged at iteration 19, L1 7.52108e-05, Linf 0.00237876, total time[s] 0.061966 +Converged at iteration 31, L1 8.51752e-05, Linf 0.0115735, total time[s] 0.092166 +Converged at iteration 22, L1 7.14558e-05, Linf 0.00315069, total time[s] 0.063948 +Converged at iteration 23, L1 7.73735e-05, Linf 0.00693051, total time[s] 0.06372 +Converged at iteration 27, L1 6.8706e-05, Linf 0.00365269, total time[s] 0.074518 +Converged at iteration 24, L1 6.43207e-05, Linf 0.00465896, total time[s] 0.066888 +Converged at iteration 23, L1 8.57991e-05, Linf 0.00464155, total time[s] 0.063153 +Converged at iteration 25, L1 7.59433e-05, Linf 0.00483423, total time[s] 0.065438 +Converged at iteration 25, L1 8.18442e-05, Linf 0.00768211, total time[s] 0.070055 +Converged at iteration 27, L1 8.33116e-05, Linf 0.00683327, total time[s] 0.074051 +Converged at iteration 32, L1 6.03846e-05, Linf 0.0032452, total time[s] 0.081008 +Converged at iteration 27, L1 6.07697e-05, Linf 0.00216738, total time[s] 0.071443 +Converged at iteration 31, L1 7.21984e-05, Linf 0.00861248, total time[s] 0.084193 +Converged at iteration 31, L1 6.28761e-05, Linf 0.00236014, total time[s] 0.081714 +Converged at iteration 32, L1 5.67164e-05, Linf 0.00263036, total time[s] 0.082298 +Converged at iteration 30, L1 6.88057e-05, Linf 0.00296753, total time[s] 0.093129 +Converged at iteration 31, L1 6.25544e-05, Linf 0.0132551, total time[s] 0.098947 +Converged at iteration 29, L1 8.37594e-05, Linf 0.0158487, total time[s] 0.074609 +Converged at iteration 25, L1 5.4421e-05, Linf 0.00261862, total time[s] 0.068441 +Converged at iteration 37, L1 5.3688e-05, Linf 0.00732035, total time[s] 0.098946 +Converged at iteration 34, L1 7.61723e-05, Linf 0.0058044, total time[s] 0.100666 +Converged at iteration 25, L1 5.92556e-05, Linf 0.00350248, total time[s] 0.064378 +Converged at iteration 25, L1 4.75967e-05, Linf 0.0108817, total time[s] 0.065107 +Converged at iteration 27, L1 4.07467e-05, Linf 0.0116713, total time[s] 0.068591 +Converged at iteration 26, L1 6.13901e-05, Linf 0.0168549, total time[s] 0.069056 +Converged at iteration 21, L1 3.82403e-05, Linf 0.00716983, total time[s] 0.082097 +Converged at iteration 19, L1 8.96983e-05, Linf 0.00368955, total time[s] 0.085466 +Converged at iteration 24, L1 6.17038e-05, Linf 0.00246449, total time[s] 0.096905 +Converged at iteration 23, L1 8.64072e-05, Linf 0.00743372, total time[s] 0.093338 +Converged at iteration 21, L1 4.60466e-05, Linf 0.0022832, total time[s] 0.082262 +Converged at iteration 19, L1 8.1004e-05, Linf 0.00261611, total time[s] 0.091415 +Converged at iteration 31, L1 8.60101e-05, Linf 0.0120077, total time[s] 0.096106 +Converged at iteration 22, L1 7.19271e-05, Linf 0.00324812, total time[s] 0.061252 +Converged at iteration 23, L1 7.91377e-05, Linf 0.00716216, total time[s] 0.071534 +Converged at iteration 27, L1 6.3987e-05, Linf 0.00353623, total time[s] 0.08154 +Converged at iteration 24, L1 6.16117e-05, Linf 0.00439541, total time[s] 0.068402 +Converged at iteration 23, L1 8.76936e-05, Linf 0.00473778, total time[s] 0.064461 +Converged at iteration 25, L1 7.85059e-05, Linf 0.004977, total time[s] 0.073027 +Converged at iteration 25, L1 8.45422e-05, Linf 0.0059248, total time[s] 0.077121 +Converged at iteration 27, L1 8.3586e-05, Linf 0.00690881, total time[s] 0.070508 +Converged at iteration 32, L1 6.16294e-05, Linf 0.00329239, total time[s] 0.087102 +Converged at iteration 26, L1 9.72723e-05, Linf 0.00292916, total time[s] 0.072547 +Converged at iteration 31, L1 7.4049e-05, Linf 0.00885553, total time[s] 0.087467 +Converged at iteration 31, L1 6.28379e-05, Linf 0.00237729, total time[s] 0.087411 +Converged at iteration 32, L1 6.34562e-05, Linf 0.00283355, total time[s] 0.088264 +Converged at iteration 30, L1 7.23746e-05, Linf 0.00301034, total time[s] 0.086331 +Converged at iteration 31, L1 6.76614e-05, Linf 0.0142257, total time[s] 0.081875 +Converged at iteration 29, L1 8.692e-05, Linf 0.0163636, total time[s] 0.076667 +Converged at iteration 25, L1 5.61225e-05, Linf 0.00251295, total time[s] 0.066487 +Converged at iteration 37, L1 5.64736e-05, Linf 0.00752926, total time[s] 0.1086 +Converged at iteration 34, L1 7.98059e-05, Linf 0.00629637, total time[s] 0.110135 +Converged at iteration 25, L1 5.82545e-05, Linf 0.00354858, total time[s] 0.068921 +Converged at iteration 25, L1 4.51564e-05, Linf 0.0105139, total time[s] 0.07286 +Converged at iteration 26, L1 8.99241e-05, Linf 0.0185305, total time[s] 0.082239 +Converged at iteration 26, L1 5.33385e-05, Linf 0.0168541, total time[s] 0.072287 +Converged at iteration 21, L1 3.85733e-05, Linf 0.00716179, total time[s] 0.062362 +Converged at iteration 19, L1 8.99316e-05, Linf 0.00368164, total time[s] 0.086231 +Converged at iteration 24, L1 6.05455e-05, Linf 0.00247426, total time[s] 0.124103 +Converged at iteration 23, L1 8.80213e-05, Linf 0.00702504, total time[s] 0.087653 +Converged at iteration 21, L1 4.65047e-05, Linf 0.00236197, total time[s] 0.114129 +Converged at iteration 19, L1 8.28427e-05, Linf 0.00270773, total time[s] 0.086285 +Converged at iteration 31, L1 8.5415e-05, Linf 0.0122515, total time[s] 0.08963 +Converged at iteration 22, L1 7.00253e-05, Linf 0.00329548, total time[s] 0.065979 +Converged at iteration 23, L1 8.43628e-05, Linf 0.00719952, total time[s] 0.061348 +Converged at iteration 27, L1 6.36057e-05, Linf 0.00350601, total time[s] 0.067827 +Converged at iteration 24, L1 6.07121e-05, Linf 0.00429617, total time[s] 0.061123 +Converged at iteration 23, L1 8.76111e-05, Linf 0.00477645, total time[s] 0.062591 +Converged at iteration 25, L1 8.11143e-05, Linf 0.00504759, total time[s] 0.069345 +Converged at iteration 25, L1 8.80355e-05, Linf 0.00585869, total time[s] 0.097814 +Converged at iteration 27, L1 8.25919e-05, Linf 0.007194, total time[s] 0.069788 +Converged at iteration 32, L1 6.30096e-05, Linf 0.0033234, total time[s] 0.095177 +Converged at iteration 26, L1 9.41647e-05, Linf 0.00279551, total time[s] 0.268725 +Converged at iteration 31, L1 7.35567e-05, Linf 0.00889335, total time[s] 0.086525 +Converged at iteration 31, L1 6.04107e-05, Linf 0.0023727, total time[s] 0.088164 +Converged at iteration 32, L1 6.29909e-05, Linf 0.00293405, total time[s] 0.088876 +Converged at iteration 30, L1 7.43196e-05, Linf 0.00307769, total time[s] 0.080545 +Converged at iteration 31, L1 7.02083e-05, Linf 0.0147911, total time[s] 0.088787 +Converged at iteration 29, L1 8.47471e-05, Linf 0.0168833, total time[s] 0.080091 +Converged at iteration 25, L1 5.51822e-05, Linf 0.0025332, total time[s] 0.084219 +Converged at iteration 37, L1 5.87622e-05, Linf 0.00792501, total time[s] 0.116168 +Converged at iteration 34, L1 8.79771e-05, Linf 0.00678115, total time[s] 0.115567 +Converged at iteration 25, L1 5.95266e-05, Linf 0.00365319, total time[s] 0.087181 +Converged at iteration 25, L1 4.49567e-05, Linf 0.00996355, total time[s] 0.076461 +Converged at iteration 26, L1 7.39601e-05, Linf 0.017638, total time[s] 0.090957 +Converged at iteration 26, L1 5.12532e-05, Linf 0.0167251, total time[s] 0.119822 +Converged at iteration 21, L1 3.98737e-05, Linf 0.00727793, total time[s] 0.080227 +Converged at iteration 19, L1 8.85314e-05, Linf 0.00356668, total time[s] 0.088735 +Converged at iteration 24, L1 6.02819e-05, Linf 0.0025032, total time[s] 0.106233 +Converged at iteration 23, L1 9.24216e-05, Linf 0.00626887, total time[s] 0.099657 +Converged at iteration 21, L1 4.97806e-05, Linf 0.00250889, total time[s] 0.064463 +Converged at iteration 19, L1 9.02542e-05, Linf 0.00296559, total time[s] 0.059728 +Converged at iteration 31, L1 8.69044e-05, Linf 0.0124991, total time[s] 0.084963 +Converged at iteration 22, L1 7.11322e-05, Linf 0.00338226, total time[s] 0.060931 +Converged at iteration 23, L1 9.49049e-05, Linf 0.00748005, total time[s] 0.062669 +Converged at iteration 27, L1 6.14839e-05, Linf 0.00340816, total time[s] 0.077643 +Converged at iteration 24, L1 5.99466e-05, Linf 0.00414595, total time[s] 0.067617 +Converged at iteration 23, L1 8.95052e-05, Linf 0.00486353, total time[s] 0.060632 +Converged at iteration 25, L1 8.40319e-05, Linf 0.00522682, total time[s] 0.067713 +Converged at iteration 25, L1 9.65983e-05, Linf 0.00607383, total time[s] 0.072721 +Converged at iteration 27, L1 8.18065e-05, Linf 0.00737113, total time[s] 0.075398 +Converged at iteration 32, L1 6.36545e-05, Linf 0.0033587, total time[s] 0.094012 +Converged at iteration 26, L1 8.95599e-05, Linf 0.00252082, total time[s] 0.072753 +Converged at iteration 31, L1 7.53571e-05, Linf 0.00912918, total time[s] 0.088731 +Converged at iteration 31, L1 6.07657e-05, Linf 0.00236599, total time[s] 0.079449 +Converged at iteration 32, L1 6.65545e-05, Linf 0.00309002, total time[s] 0.082413 +Converged at iteration 30, L1 8.05771e-05, Linf 0.00330914, total time[s] 0.08198 +Converged at iteration 31, L1 7.77159e-05, Linf 0.0158863, total time[s] 0.113245 +Converged at iteration 29, L1 8.70871e-05, Linf 0.0169601, total time[s] 0.105916 +Converged at iteration 25, L1 5.55377e-05, Linf 0.00243396, total time[s] 0.074528 +Converged at iteration 37, L1 6.14827e-05, Linf 0.00812458, total time[s] 0.114425 +Converged at iteration 34, L1 9.17636e-05, Linf 0.00690426, total time[s] 0.112147 +Converged at iteration 25, L1 6.08715e-05, Linf 0.00367912, total time[s] 0.072318 +Converged at iteration 25, L1 4.48337e-05, Linf 0.00962702, total time[s] 0.076917 +Converged at iteration 26, L1 6.92719e-05, Linf 0.0170869, total time[s] 0.067298 +Converged at iteration 26, L1 4.97985e-05, Linf 0.0165369, total time[s] 0.091089 +Converged at iteration 21, L1 4.02306e-05, Linf 0.00731931, total time[s] 0.106222 +Converged at iteration 19, L1 8.65772e-05, Linf 0.00353415, total time[s] 0.092318 +Converged at iteration 24, L1 5.97044e-05, Linf 0.00249705, total time[s] 0.080987 +Converged at iteration 23, L1 9.62183e-05, Linf 0.00588856, total time[s] 0.088324 +Converged at iteration 21, L1 5.14853e-05, Linf 0.00257959, total time[s] 0.089759 +Converged at iteration 19, L1 9.24251e-05, Linf 0.00309528, total time[s] 0.070409 +Converged at iteration 31, L1 8.72918e-05, Linf 0.0128896, total time[s] 0.093644 +Converged at iteration 22, L1 6.67746e-05, Linf 0.00342929, total time[s] 0.065622 +Converged at iteration 23, L1 9.69293e-05, Linf 0.00754422, total time[s] 0.062282 +Converged at iteration 27, L1 6.07743e-05, Linf 0.00338765, total time[s] 0.082037 +Converged at iteration 24, L1 6.00576e-05, Linf 0.00418004, total time[s] 0.070552 +Converged at iteration 23, L1 9.04449e-05, Linf 0.00488509, total time[s] 0.065362 +Converged at iteration 25, L1 8.5787e-05, Linf 0.00530139, total time[s] 0.067232 +Converged at iteration 25, L1 9.99661e-05, Linf 0.00620488, total time[s] 0.070158 +Converged at iteration 27, L1 8.04552e-05, Linf 0.00724338, total time[s] 0.074152 +Converged at iteration 32, L1 6.44659e-05, Linf 0.00337686, total time[s] 0.091759 +Converged at iteration 26, L1 8.74507e-05, Linf 0.00239472, total time[s] 0.076051 +Converged at iteration 31, L1 7.49042e-05, Linf 0.00915823, total time[s] 0.101484 +Converged at iteration 31, L1 5.97518e-05, Linf 0.00243692, total time[s] 0.085648 +Converged at iteration 32, L1 6.80518e-05, Linf 0.00317121, total time[s] 0.082959 +Converged at iteration 30, L1 8.33489e-05, Linf 0.00331544, total time[s] 0.079199 +Converged at iteration 31, L1 8.1909e-05, Linf 0.0167979, total time[s] 0.083017 +Converged at iteration 29, L1 8.58196e-05, Linf 0.017327, total time[s] 0.077636 +Converged at iteration 25, L1 5.60403e-05, Linf 0.00236835, total time[s] 0.203326 +Converged at iteration 37, L1 6.43356e-05, Linf 0.00859226, total time[s] 0.141381 +Converged at iteration 35, L1 3.49869e-05, Linf 0.00413139, total time[s] 0.106018 +Converged at iteration 25, L1 6.49771e-05, Linf 0.00373067, total time[s] 0.065599 +Converged at iteration 25, L1 4.61733e-05, Linf 0.00914991, total time[s] 0.065663 +Converged at iteration 26, L1 5.72764e-05, Linf 0.0157364, total time[s] 0.08573 +Converged at iteration 26, L1 4.79026e-05, Linf 0.0161382, total time[s] 0.115393 +Converged at iteration 21, L1 4.16399e-05, Linf 0.00735952, total time[s] 0.090234 +Converged at iteration 19, L1 8.60458e-05, Linf 0.00344814, total time[s] 0.09151 +Converged at iteration 24, L1 5.86069e-05, Linf 0.00294998, total time[s] 0.073769 +Converged at iteration 23, L1 9.72388e-05, Linf 0.00502215, total time[s] 0.075864 +Converged at iteration 21, L1 5.39673e-05, Linf 0.00274862, total time[s] 0.089885 +Converged at iteration 20, L1 4.53549e-05, Linf 0.00182538, total time[s] 0.075815 +Converged at iteration 31, L1 9.01273e-05, Linf 0.0134242, total time[s] 0.08342 +Converged at iteration 22, L1 6.44453e-05, Linf 0.00349973, total time[s] 0.064983 +Converged at iteration 23, L1 9.99997e-05, Linf 0.00782466, total time[s] 0.062996 +Converged at iteration 27, L1 5.8627e-05, Linf 0.00325692, total time[s] 0.078866 +Converged at iteration 24, L1 6.05971e-05, Linf 0.00429374, total time[s] 0.065171 +Converged at iteration 23, L1 9.35174e-05, Linf 0.00495614, total time[s] 0.072021 +Converged at iteration 25, L1 9.29563e-05, Linf 0.00556185, total time[s] 0.080744 +Converged at iteration 26, L1 6.05494e-05, Linf 0.00413723, total time[s] 0.077377 +Converged at iteration 27, L1 7.92995e-05, Linf 0.00618446, total time[s] 0.0884 +Converged at iteration 32, L1 6.54222e-05, Linf 0.00350576, total time[s] 0.105141 +Converged at iteration 26, L1 8.10749e-05, Linf 0.00229395, total time[s] 0.104277 +Converged at iteration 31, L1 7.83951e-05, Linf 0.00937306, total time[s] 0.100838 +Converged at iteration 31, L1 5.97973e-05, Linf 0.00242203, total time[s] 0.081521 +Converged at iteration 32, L1 7.22849e-05, Linf 0.00329861, total time[s] 0.087187 +Converged at iteration 30, L1 9.00709e-05, Linf 0.00359517, total time[s] 0.089631 +Converged at iteration 31, L1 9.11587e-05, Linf 0.0176914, total time[s] 0.086364 +Converged at iteration 29, L1 9.01931e-05, Linf 0.0179109, total time[s] 0.114758 +Converged at iteration 25, L1 5.82662e-05, Linf 0.00241813, total time[s] 0.080154 +Converged at iteration 37, L1 6.62451e-05, Linf 0.00894524, total time[s] 0.166525 +Converged at iteration 35, L1 3.63257e-05, Linf 0.00428373, total time[s] 0.12861 +Converged at iteration 25, L1 6.5078e-05, Linf 0.00373144, total time[s] 0.10714 +Converged at iteration 25, L1 4.68791e-05, Linf 0.00884826, total time[s] 0.12069 +Converged at iteration 26, L1 6.71324e-05, Linf 0.0151424, total time[s] 0.15534 +Converged at iteration 26, L1 4.67463e-05, Linf 0.0159789, total time[s] 0.123988 +Converged at iteration 21, L1 4.21778e-05, Linf 0.00732637, total time[s] 0.14283 +Converged at iteration 19, L1 8.47915e-05, Linf 0.0033638, total time[s] 0.078319 +Converged at iteration 24, L1 5.80769e-05, Linf 0.00239267, total time[s] 0.064764 +Converged at iteration 23, L1 9.86028e-05, Linf 0.0048636, total time[s] 0.212315 +Converged at iteration 21, L1 5.55019e-05, Linf 0.00281797, total time[s] 0.106869 +Converged at iteration 20, L1 4.66813e-05, Linf 0.00189208, total time[s] 0.068195 +Converged at iteration 31, L1 9.02177e-05, Linf 0.0136362, total time[s] 0.091777 +Converged at iteration 22, L1 6.68974e-05, Linf 0.00353545, total time[s] 0.06257 +Converged at iteration 24, L1 5.76017e-05, Linf 0.00434281, total time[s] 0.071853 +Converged at iteration 27, L1 5.71788e-05, Linf 0.00323102, total time[s] 0.081373 +Converged at iteration 24, L1 6.12508e-05, Linf 0.00447859, total time[s] 0.066847 +Converged at iteration 23, L1 9.40881e-05, Linf 0.00495963, total time[s] 0.06659 +Converged at iteration 25, L1 9.66493e-05, Linf 0.00562438, total time[s] 0.067731 +Converged at iteration 26, L1 6.37119e-05, Linf 0.00421893, total time[s] 0.069669 +Converged at iteration 27, L1 7.88361e-05, Linf 0.00591952, total time[s] 0.075657 +Converged at iteration 32, L1 6.86255e-05, Linf 0.00357456, total time[s] 0.083963 +Converged at iteration 26, L1 7.98177e-05, Linf 0.00234351, total time[s] 0.066892 +Converged at iteration 31, L1 7.81869e-05, Linf 0.0093734, total time[s] 0.07987 +Converged at iteration 31, L1 5.95197e-05, Linf 0.00242708, total time[s] 0.081426 +Converged at iteration 32, L1 7.71959e-05, Linf 0.00392105, total time[s] 0.100688 +Converged at iteration 30, L1 8.97277e-05, Linf 0.00378983, total time[s] 0.086026 +Converged at iteration 32, L1 4.34539e-05, Linf 0.00804525, total time[s] 0.080575 +Converged at iteration 29, L1 8.94008e-05, Linf 0.0180698, total time[s] 0.080892 +Converged at iteration 25, L1 5.76341e-05, Linf 0.00242537, total time[s] 0.072578 +Converged at iteration 37, L1 7.07537e-05, Linf 0.00925777, total time[s] 0.099485 +Converged at iteration 35, L1 4.22595e-05, Linf 0.00444933, total time[s] 0.11895 +Converged at iteration 25, L1 6.41945e-05, Linf 0.00373945, total time[s] 0.067773 +Converged at iteration 25, L1 5.0795e-05, Linf 0.00857316, total time[s] 0.070428 +Converged at iteration 26, L1 5.40801e-05, Linf 0.01372, total time[s] 0.075116 +Converged at iteration 26, L1 6.60347e-05, Linf 0.0155285, total time[s] 0.088596 +Converged at iteration 21, L1 4.26179e-05, Linf 0.00741071, total time[s] 0.097354 +Converged at iteration 19, L1 8.16141e-05, Linf 0.00326198, total time[s] 0.073909 +Converged at iteration 24, L1 5.77885e-05, Linf 0.00347908, total time[s] 0.09918 +Converged at iteration 24, L1 6.11116e-05, Linf 0.00467945, total time[s] 0.106258 +Converged at iteration 21, L1 5.93831e-05, Linf 0.00298668, total time[s] 0.075641 +Converged at iteration 20, L1 5.06354e-05, Linf 0.0020582, total time[s] 0.067173 +Converged at iteration 31, L1 9.39442e-05, Linf 0.0141136, total time[s] 0.091068 +Converged at iteration 22, L1 6.48753e-05, Linf 0.00361591, total time[s] 0.071256 +Converged at iteration 24, L1 5.9046e-05, Linf 0.00446696, total time[s] 0.08119 +Converged at iteration 27, L1 5.50479e-05, Linf 0.00311315, total time[s] 0.073113 +Converged at iteration 24, L1 6.3416e-05, Linf 0.00486418, total time[s] 0.065604 +Converged at iteration 23, L1 9.696e-05, Linf 0.00500998, total time[s] 0.063748 +Converged at iteration 26, L1 4.88664e-05, Linf 0.00331582, total time[s] 0.171407 +Converged at iteration 26, L1 7.0178e-05, Linf 0.0044839, total time[s] 0.072869 +Converged at iteration 27, L1 7.97168e-05, Linf 0.00630288, total time[s] 0.077859 +Converged at iteration 32, L1 6.51393e-05, Linf 0.00373452, total time[s] 0.09206 +Converged at iteration 26, L1 7.44947e-05, Linf 0.00247051, total time[s] 0.126504 +Converged at iteration 31, L1 7.77346e-05, Linf 0.0095336, total time[s] 0.093593 +Converged at iteration 31, L1 5.88963e-05, Linf 0.00243317, total time[s] 0.081498 +Converged at iteration 32, L1 7.70933e-05, Linf 0.00348474, total time[s] 0.093159 +Converged at iteration 30, L1 8.6334e-05, Linf 0.00564026, total time[s] 0.08766 +Converged at iteration 32, L1 3.78653e-05, Linf 0.00869222, total time[s] 0.152006 +Converged at iteration 29, L1 9.0286e-05, Linf 0.0186061, total time[s] 0.080755 +Converged at iteration 25, L1 5.93457e-05, Linf 0.00248851, total time[s] 0.075777 +Converged at iteration 37, L1 7.16768e-05, Linf 0.00945904, total time[s] 0.111014 +Converged at iteration 35, L1 4.11051e-05, Linf 0.00477923, total time[s] 0.105508 +Converged at iteration 25, L1 6.39915e-05, Linf 0.00372853, total time[s] 0.06657 +Converged at iteration 25, L1 4.95741e-05, Linf 0.00836377, total time[s] 0.067434 +Converged at iteration 26, L1 4.07067e-05, Linf 0.0131191, total time[s] 0.068243 +Converged at iteration 26, L1 4.57144e-05, Linf 0.0153142, total time[s] 0.06848 +Converged at iteration 21, L1 4.29166e-05, Linf 0.00736808, total time[s] 0.064862 +Converged at iteration 19, L1 7.88815e-05, Linf 0.00315376, total time[s] 0.066851 +Converged at iteration 24, L1 5.63084e-05, Linf 0.00224993, total time[s] 0.154356 +Converged at iteration 24, L1 6.10354e-05, Linf 0.00218775, total time[s] 0.078702 +Converged at iteration 21, L1 6.04207e-05, Linf 0.00304995, total time[s] 0.072479 +Converged at iteration 20, L1 5.17057e-05, Linf 0.00213077, total time[s] 0.063728 +Converged at iteration 31, L1 9.45416e-05, Linf 0.0141577, total time[s] 0.08559 +Converged at iteration 22, L1 6.41859e-05, Linf 0.00364683, total time[s] 0.060818 +Converged at iteration 24, L1 5.76245e-05, Linf 0.00447434, total time[s] 0.089887 +Converged at iteration 27, L1 5.53772e-05, Linf 0.00308625, total time[s] 0.088311 +Converged at iteration 24, L1 6.35175e-05, Linf 0.00502744, total time[s] 0.083417 +Converged at iteration 23, L1 9.90033e-05, Linf 0.00569845, total time[s] 0.081006 +Converged at iteration 26, L1 4.84694e-05, Linf 0.00336122, total time[s] 0.103204 +Converged at iteration 26, L1 7.33711e-05, Linf 0.00458437, total time[s] 0.106653 +Converged at iteration 27, L1 8.04489e-05, Linf 0.00666689, total time[s] 0.121602 +Converged at iteration 32, L1 6.71044e-05, Linf 0.00381552, total time[s] 0.123478 +Converged at iteration 26, L1 7.28803e-05, Linf 0.00250294, total time[s] 0.091927 +Converged at iteration 31, L1 7.66278e-05, Linf 0.00952755, total time[s] 0.080423 +Converged at iteration 31, L1 5.8952e-05, Linf 0.00243565, total time[s] 0.08018 +Converged at iteration 32, L1 7.88915e-05, Linf 0.00354054, total time[s] 0.082716 +Converged at iteration 30, L1 8.30605e-05, Linf 0.00418131, total time[s] 0.077613 +Converged at iteration 32, L1 3.88415e-05, Linf 0.0089701, total time[s] 0.082697 +Converged at iteration 29, L1 9.05625e-05, Linf 0.018738, total time[s] 0.075542 +Converged at iteration 25, L1 5.88581e-05, Linf 0.00278036, total time[s] 0.065929 +Converged at iteration 37, L1 7.47911e-05, Linf 0.00997139, total time[s] 0.110428 +Converged at iteration 35, L1 4.51027e-05, Linf 0.00525893, total time[s] 0.099005 +Converged at iteration 25, L1 6.6475e-05, Linf 0.00376309, total time[s] 0.071424 +Converged at iteration 25, L1 5.38104e-05, Linf 0.0081037, total time[s] 0.0719 +Converged at iteration 26, L1 3.54184e-05, Linf 0.0116389, total time[s] 0.076697 +Converged at iteration 26, L1 4.42559e-05, Linf 0.0149077, total time[s] 0.10286 +Converged at iteration 21, L1 4.46859e-05, Linf 0.00744244, total time[s] 0.072424 +Converged at iteration 19, L1 7.52087e-05, Linf 0.00299809, total time[s] 0.055771 +Converged at iteration 24, L1 5.67385e-05, Linf 0.00285241, total time[s] 0.090547 +Converged at iteration 24, L1 6.58001e-05, Linf 0.0118883, total time[s] 0.070483 +Converged at iteration 21, L1 6.45675e-05, Linf 0.00319206, total time[s] 0.056357 +Converged at iteration 20, L1 5.89035e-05, Linf 0.00232472, total time[s] 0.051878 +Converged at iteration 31, L1 9.83082e-05, Linf 0.0145182, total time[s] 0.078707 +Converged at iteration 22, L1 6.80616e-05, Linf 0.00375238, total time[s] 0.058661 +Converged at iteration 24, L1 5.95815e-05, Linf 0.00460853, total time[s] 0.068159 +Converged at iteration 27, L1 5.5337e-05, Linf 0.00299818, total time[s] 0.070947 +Converged at iteration 24, L1 6.38205e-05, Linf 0.00518337, total time[s] 0.061392 +Converged at iteration 23, L1 9.98646e-05, Linf 0.00504345, total time[s] 0.058934 +Converged at iteration 26, L1 5.73461e-05, Linf 0.00350939, total time[s] 0.06651 +Converged at iteration 26, L1 8.32018e-05, Linf 0.00497182, total time[s] 0.065923 +Converged at iteration 27, L1 8.25502e-05, Linf 0.00631968, total time[s] 0.068757 +Converged at iteration 32, L1 6.74205e-05, Linf 0.00394039, total time[s] 0.082046 +Converged at iteration 26, L1 7.20125e-05, Linf 0.0026088, total time[s] 0.06535 +Converged at iteration 31, L1 7.80471e-05, Linf 0.00966873, total time[s] 0.077933 +Converged at iteration 31, L1 5.98562e-05, Linf 0.00243679, total time[s] 0.078619 +Converged at iteration 32, L1 8.19418e-05, Linf 0.00362726, total time[s] 0.079479 +Converged at iteration 30, L1 8.56395e-05, Linf 0.0058654, total time[s] 0.075784 +Converged at iteration 32, L1 4.28952e-05, Linf 0.00972183, total time[s] 0.079607 +Converged at iteration 29, L1 9.25615e-05, Linf 0.0192428, total time[s] 0.072548 +Converged at iteration 25, L1 5.92559e-05, Linf 0.00275607, total time[s] 0.063891 +Converged at iteration 37, L1 7.68814e-05, Linf 0.0101705, total time[s] 0.10434 +Converged at iteration 35, L1 4.67129e-05, Linf 0.00543384, total time[s] 0.14615 +Converged at iteration 25, L1 6.67954e-05, Linf 0.00375446, total time[s] 0.064205 +Converged at iteration 25, L1 5.41212e-05, Linf 0.00791712, total time[s] 0.063948 +Converged at iteration 26, L1 3.7905e-05, Linf 0.0141466, total time[s] 0.067878 +Converged at iteration 26, L1 4.67666e-05, Linf 0.0147472, total time[s] 0.075398 +Converged at iteration 21, L1 4.54687e-05, Linf 0.00746026, total time[s] 0.0551 +Converged at iteration 19, L1 7.28804e-05, Linf 0.00295059, total time[s] 0.050357 +Converged at iteration 24, L1 5.613e-05, Linf 0.00223547, total time[s] 0.065781 +Converged at iteration 24, L1 6.62515e-05, Linf 0.00235213, total time[s] 0.060044 +Converged at iteration 21, L1 6.55199e-05, Linf 0.00326309, total time[s] 0.054513 +Converged at iteration 20, L1 5.82703e-05, Linf 0.00240291, total time[s] 0.053898 +Converged at iteration 32, L1 3.83935e-05, Linf 0.00859784, total time[s] 0.07936 +Converged at iteration 22, L1 6.80171e-05, Linf 0.0037679, total time[s] 0.056948 +Converged at iteration 24, L1 5.89393e-05, Linf 0.00463786, total time[s] 0.061036 +Converged at iteration 27, L1 5.75322e-05, Linf 0.00298261, total time[s] 0.067035 +Converged at iteration 24, L1 6.44386e-05, Linf 0.0051384, total time[s] 0.061149 +Converged at iteration 24, L1 5.46683e-05, Linf 0.00337237, total time[s] 0.060361 +Converged at iteration 26, L1 5.83516e-05, Linf 0.00355526, total time[s] 0.073732 +Converged at iteration 26, L1 8.60772e-05, Linf 0.00503206, total time[s] 0.078182 +Converged at iteration 27, L1 8.20738e-05, Linf 0.00635065, total time[s] 0.076475 +Converged at iteration 32, L1 6.783e-05, Linf 0.00399474, total time[s] 0.0934 +Converged at iteration 26, L1 7.14366e-05, Linf 0.0026297, total time[s] 0.068675 +Converged at iteration 31, L1 7.93437e-05, Linf 0.00966943, total time[s] 0.080711 +Converged at iteration 31, L1 5.99155e-05, Linf 0.00243118, total time[s] 0.078821 +Converged at iteration 32, L1 8.31754e-05, Linf 0.00368173, total time[s] 0.080966 +Converged at iteration 30, L1 8.47092e-05, Linf 0.00424382, total time[s] 0.077615 +Converged at iteration 32, L1 4.45382e-05, Linf 0.0102143, total time[s] 0.085187 +Converged at iteration 29, L1 9.40032e-05, Linf 0.0191435, total time[s] 0.081485 +Converged at iteration 25, L1 5.95386e-05, Linf 0.00273432, total time[s] 0.072225 +Converged at iteration 37, L1 7.99888e-05, Linf 0.0102493, total time[s] 0.126425 +Converged at iteration 35, L1 5.05182e-05, Linf 0.00598054, total time[s] 0.107882 +Converged at iteration 25, L1 6.9706e-05, Linf 0.00374075, total time[s] 0.072283 +Converged at iteration 25, L1 5.9441e-05, Linf 0.00767946, total time[s] 0.07097 +Converged at iteration 25, L1 8.91628e-05, Linf 0.0202188, total time[s] 0.066665 +Converged at iteration 26, L1 4.35678e-05, Linf 0.0143363, total time[s] 0.070938 +Converged at iteration 21, L1 4.78292e-05, Linf 0.0076708, total time[s] 0.056113 +Converged at iteration 19, L1 6.83618e-05, Linf 0.00276978, total time[s] 0.052027 +Converged at iteration 24, L1 5.56862e-05, Linf 0.00244828, total time[s] 0.064086 +Converged at iteration 24, L1 6.72917e-05, Linf 0.00254955, total time[s] 0.066741 +Converged at iteration 21, L1 6.95522e-05, Linf 0.0034235, total time[s] 0.061766 +Converged at iteration 20, L1 6.0707e-05, Linf 0.00261891, total time[s] 0.055442 +Converged at iteration 32, L1 3.96579e-05, Linf 0.00858367, total time[s] 0.110663 +Converged at iteration 22, L1 7.30569e-05, Linf 0.00464826, total time[s] 0.073624 +Converged at iteration 24, L1 5.61336e-05, Linf 0.00467133, total time[s] 0.065526 +Converged at iteration 27, L1 5.14012e-05, Linf 0.00286964, total time[s] 0.076668 +Converged at iteration 24, L1 6.25226e-05, Linf 0.00490497, total time[s] 0.065912 +Converged at iteration 24, L1 5.60579e-05, Linf 0.00321651, total time[s] 0.077378 +Converged at iteration 26, L1 5.50017e-05, Linf 0.00372919, total time[s] 0.079706 +Converged at iteration 26, L1 9.65548e-05, Linf 0.00542833, total time[s] 0.092614 +Converged at iteration 27, L1 8.26066e-05, Linf 0.00642975, total time[s] 0.106231 +Converged at iteration 32, L1 6.92889e-05, Linf 0.00407278, total time[s] 0.101723 +Converged at iteration 26, L1 7.24206e-05, Linf 0.00273113, total time[s] 0.080769 +Converged at iteration 31, L1 7.77655e-05, Linf 0.00981283, total time[s] 0.079857 +Converged at iteration 31, L1 5.95646e-05, Linf 0.00245722, total time[s] 0.079594 +Converged at iteration 32, L1 8.60767e-05, Linf 0.00378703, total time[s] 0.14847 +Converged at iteration 30, L1 8.94378e-05, Linf 0.00451342, total time[s] 0.096619 +Converged at iteration 32, L1 5.05463e-05, Linf 0.0108818, total time[s] 0.091095 +Converged at iteration 29, L1 9.48098e-05, Linf 0.019795, total time[s] 0.08753 +Converged at iteration 25, L1 5.98491e-05, Linf 0.00289483, total time[s] 0.097774 +Converged at iteration 37, L1 8.16716e-05, Linf 0.0103575, total time[s] 0.119797 +Converged at iteration 35, L1 5.19081e-05, Linf 0.0061568, total time[s] 0.108523 +Converged at iteration 25, L1 7.01592e-05, Linf 0.00365243, total time[s] 0.081768 +Converged at iteration 25, L1 5.99253e-05, Linf 0.00748213, total time[s] 0.073257 +Converged at iteration 25, L1 8.51724e-05, Linf 0.0195951, total time[s] 0.079967 +Converged at iteration 26, L1 4.35686e-05, Linf 0.0143783, total time[s] 0.092864 +Converged at iteration 21, L1 4.822e-05, Linf 0.007419, total time[s] 0.10142 +Converged at iteration 19, L1 6.5802e-05, Linf 0.00337495, total time[s] 0.070604 +Converged at iteration 24, L1 5.55168e-05, Linf 0.00289257, total time[s] 0.081151 +Converged at iteration 24, L1 6.88265e-05, Linf 0.00263254, total time[s] 0.088951 +Converged at iteration 21, L1 7.06083e-05, Linf 0.00348019, total time[s] 0.060887 +Converged at iteration 20, L1 6.25617e-05, Linf 0.00269688, total time[s] 0.060578 +Converged at iteration 32, L1 4.01548e-05, Linf 0.0086644, total time[s] 0.095227 +Converged at iteration 22, L1 6.75901e-05, Linf 0.00390129, total time[s] 0.062821 +Converged at iteration 24, L1 5.69751e-05, Linf 0.0047499, total time[s] 0.0633 +Converged at iteration 27, L1 5.08966e-05, Linf 0.00284467, total time[s] 0.070705 +Converged at iteration 24, L1 6.24506e-05, Linf 0.0047715, total time[s] 0.064957 +Converged at iteration 24, L1 5.74726e-05, Linf 0.00320411, total time[s] 0.068962 +Converged at iteration 26, L1 5.61413e-05, Linf 0.00379448, total time[s] 0.081689 +Converged at iteration 26, L1 9.93399e-05, Linf 0.00556073, total time[s] 0.075148 +Converged at iteration 27, L1 8.34144e-05, Linf 0.00644558, total time[s] 0.08328 +Converged at iteration 32, L1 7.01398e-05, Linf 0.00430474, total time[s] 0.093831 +Converged at iteration 26, L1 7.35988e-05, Linf 0.00274993, total time[s] 0.068068 +Converged at iteration 31, L1 7.98247e-05, Linf 0.00981542, total time[s] 0.082935 +Converged at iteration 31, L1 5.89558e-05, Linf 0.00248675, total time[s] 0.083718 +Converged at iteration 32, L1 8.84548e-05, Linf 0.00383851, total time[s] 0.104249 +Converged at iteration 30, L1 9.04205e-05, Linf 0.00467407, total time[s] 0.08823 +Converged at iteration 32, L1 5.07641e-05, Linf 0.0112552, total time[s] 0.103628 +Converged at iteration 29, L1 9.45832e-05, Linf 0.0192761, total time[s] 0.075601 +Converged at iteration 25, L1 6.10201e-05, Linf 0.00293533, total time[s] 0.067717 +Converged at iteration 37, L1 8.44227e-05, Linf 0.0108745, total time[s] 0.097147 +Converged at iteration 35, L1 5.63303e-05, Linf 0.00672835, total time[s] 0.098258 +Converged at iteration 25, L1 7.43889e-05, Linf 0.00367366, total time[s] 0.097004 +Converged at iteration 25, L1 6.47384e-05, Linf 0.00731016, total time[s] 0.077437 +Converged at iteration 25, L1 7.56775e-05, Linf 0.0178507, total time[s] 0.065626 +Converged at iteration 26, L1 4.49357e-05, Linf 0.0142748, total time[s] 0.07415 +Converged at iteration 21, L1 4.92785e-05, Linf 0.00753214, total time[s] 0.05792 +Converged at iteration 19, L1 5.86844e-05, Linf 0.00299887, total time[s] 0.080065 +Converged at iteration 24, L1 5.3714e-05, Linf 0.0022365, total time[s] 0.085536 +Converged at iteration 24, L1 7.0537e-05, Linf 0.0028265, total time[s] 0.070119 +Converged at iteration 21, L1 7.42221e-05, Linf 0.00361544, total time[s] 0.059368 +Converged at iteration 20, L1 6.68053e-05, Linf 0.00290856, total time[s] 0.069674 +Converged at iteration 32, L1 4.12971e-05, Linf 0.00858708, total time[s] 0.119119 +Converged at iteration 22, L1 6.96961e-05, Linf 0.00399538, total time[s] 0.06358 +Converged at iteration 24, L1 5.66939e-05, Linf 0.00495364, total time[s] 0.086511 +Converged at iteration 27, L1 4.87587e-05, Linf 0.00271374, total time[s] 0.076626 +Converged at iteration 24, L1 6.17757e-05, Linf 0.00450661, total time[s] 0.081109 +Converged at iteration 24, L1 5.64298e-05, Linf 0.00320227, total time[s] 0.074569 +Converged at iteration 26, L1 6.00726e-05, Linf 0.00396131, total time[s] 0.088391 +Converged at iteration 27, L1 5.71843e-05, Linf 0.00365712, total time[s] 0.085349 +Converged at iteration 27, L1 8.42041e-05, Linf 0.00648176, total time[s] 0.099694 +Converged at iteration 32, L1 7.23722e-05, Linf 0.0043743, total time[s] 0.08445 +Converged at iteration 26, L1 8.03446e-05, Linf 0.00285287, total time[s] 0.069579 +Converged at iteration 31, L1 7.74597e-05, Linf 0.00993282, total time[s] 0.092477 +Converged at iteration 31, L1 5.69917e-05, Linf 0.00249022, total time[s] 0.088721 +Converged at iteration 32, L1 9.10708e-05, Linf 0.00395874, total time[s] 0.085453 +Converged at iteration 30, L1 9.53428e-05, Linf 0.00522773, total time[s] 0.094531 +Converged at iteration 32, L1 5.62119e-05, Linf 0.0121887, total time[s] 0.085795 +Converged at iteration 29, L1 9.58124e-05, Linf 0.0175859, total time[s] 0.129145 +Converged at iteration 25, L1 9.28128e-05, Linf 0.0031863, total time[s] 0.104716 +Converged at iteration 38, L1 5.34877e-05, Linf 0.0121792, total time[s] 0.107725 +Converged at iteration 36, L1 5.7235e-05, Linf 0.0109893, total time[s] 0.118662 +Converged at iteration 25, L1 9.6741e-05, Linf 0.00368722, total time[s] 0.091688 +Converged at iteration 26, L1 6.04396e-05, Linf 0.0109244, total time[s] 0.073603 +Converged at iteration 25, L1 6.34193e-05, Linf 0.00834978, total time[s] 0.077573 +Converged at iteration 27, L1 4.40491e-05, Linf 0.00900851, total time[s] 0.094332 +Converged at iteration 21, L1 6.43842e-05, Linf 0.0103754, total time[s] 0.084648 +Converged at iteration 19, L1 4.93579e-05, Linf 0.00506875, total time[s] 0.082362 +Converged at iteration 24, L1 5.14386e-05, Linf 0.00221913, total time[s] 0.089527 +Converged at iteration 25, L1 6.08863e-05, Linf 0.00226583, total time[s] 0.112743 +Converged at iteration 22, L1 5.81356e-05, Linf 0.00265821, total time[s] 0.071981 +Converged at iteration 21, L1 5.87373e-05, Linf 0.00294892, total time[s] 0.064877 +Converged at iteration 33, L1 3.34425e-05, Linf 0.00336674, total time[s] 0.087961 +Converged at iteration 22, L1 9.78918e-05, Linf 0.00668675, total time[s] 0.062666 +Converged at iteration 24, L1 7.55009e-05, Linf 0.00526776, total time[s] 0.085167 +Converged at iteration 26, L1 6.74147e-05, Linf 0.00269679, total time[s] 0.067968 +Converged at iteration 23, L1 8.40146e-05, Linf 0.00324332, total time[s] 0.062274 +Converged at iteration 24, L1 5.85236e-05, Linf 0.00269166, total time[s] 0.082062 +Converged at iteration 27, L1 5.76666e-05, Linf 0.00366138, total time[s] 0.071579 +Converged at iteration 28, L1 8.8548e-05, Linf 0.00508956, total time[s] 0.072353 +Converged at iteration 27, L1 9.77852e-05, Linf 0.00639218, total time[s] 0.070011 +Converged at iteration 33, L1 5.22509e-05, Linf 0.00348249, total time[s] 0.084348 +Converged at iteration 28, L1 8.70919e-05, Linf 0.0020031, total time[s] 0.115074 +Converged at iteration 31, L1 8.15519e-05, Linf 0.0115796, total time[s] 0.100906 +Converged at iteration 31, L1 6.58652e-05, Linf 0.00278735, total time[s] 0.084465 +Converged at iteration 33, L1 8.62121e-05, Linf 0.00419194, total time[s] 0.084871 +Converged at iteration 31, L1 8.46489e-05, Linf 0.00808137, total time[s] 0.081211 +Converged at iteration 33, L1 6.94147e-05, Linf 0.0152011, total time[s] 0.084075 +Converged at iteration 30, L1 3.37455e-05, Linf 0.00814996, total time[s] 0.076946 +Converged at iteration 25, L1 7.77405e-05, Linf 0.00320567, total time[s] 0.066593 +Converged at iteration 38, L1 9.17224e-05, Linf 0.021216, total time[s] 0.097359 +Converged at iteration 37, L1 4.23913e-05, Linf 0.0113254, total time[s] 0.095165 +Converged at iteration 25, L1 9.23365e-05, Linf 0.00371715, total time[s] 0.067507 +Converged at iteration 27, L1 5.3757e-05, Linf 0.00561133, total time[s] 0.086804 +Converged at iteration 25, L1 8.81875e-05, Linf 0.011646, total time[s] 0.079688 +Converged at iteration 27, L1 9.47052e-05, Linf 0.019799, total time[s] 0.069088 +Converged at iteration 22, L1 3.00632e-05, Linf 0.00636843, total time[s] 0.058318 +Converged at iteration 19, L1 8.82139e-05, Linf 0.00528963, total time[s] 0.051163 +Converged at iteration 24, L1 6.27592e-05, Linf 0.00317532, total time[s] 0.06238 +Converged at iteration 25, L1 8.42791e-05, Linf 0.00342387, total time[s] 0.065678 +Converged at iteration 22, L1 7.19802e-05, Linf 0.00312402, total time[s] 0.058495 +Converged at iteration 21, L1 8.6902e-05, Linf 0.00538157, total time[s] 0.056175 +Converged at iteration 33, L1 9.08209e-05, Linf 0.00829734, total time[s] 0.085936 +Converged at iteration 23, L1 7.76257e-05, Linf 0.00534883, total time[s] 0.0613 +Converged at iteration 24, L1 9.95264e-05, Linf 0.00708972, total time[s] 0.063902 +Converged at iteration 26, L1 6.81826e-05, Linf 0.00333037, total time[s] 0.070291 +Converged at iteration 23, L1 7.40773e-05, Linf 0.00385197, total time[s] 0.060146 +Converged at iteration 24, L1 7.16562e-05, Linf 0.00316478, total time[s] 0.063845 +Converged at iteration 27, L1 8.63416e-05, Linf 0.00585309, total time[s] 0.06948 +Converged at iteration 29, L1 9.40728e-05, Linf 0.00557512, total time[s] 0.082963 +Converged at iteration 28, L1 7.63419e-05, Linf 0.00463486, total time[s] 0.071765 +Converged at iteration 32, L1 8.73516e-05, Linf 0.00719425, total time[s] 0.080619 +Converged at iteration 29, L1 9.14682e-05, Linf 0.00209806, total time[s] 0.073918 +Converged at iteration 31, L1 8.30552e-05, Linf 0.012911, total time[s] 0.09106 +Converged at iteration 31, L1 8.20022e-05, Linf 0.0037275, total time[s] 0.078086 +Converged at iteration 34, L1 4.17267e-05, Linf 0.00305055, total time[s] 0.084788 +Converged at iteration 32, L1 6.25144e-05, Linf 0.00890292, total time[s] 0.109048 +Converged at iteration 34, L1 5.41761e-05, Linf 0.0114844, total time[s] 0.104187 +Converged at iteration 30, L1 4.65238e-05, Linf 0.0119995, total time[s] 0.083624 +Converged at iteration 25, L1 9.28531e-05, Linf 0.00309562, total time[s] 0.066305 +Converged at iteration 38, L1 9.55665e-05, Linf 0.0288681, total time[s] 0.111478 +Converged at iteration 37, L1 6.46923e-05, Linf 0.0205364, total time[s] 0.113425 +Converged at iteration 26, L1 4.25755e-05, Linf 0.00228878, total time[s] 0.068748 +Converged at iteration 28, L1 7.12027e-05, Linf 0.0128031, total time[s] 0.072244 +Converged at iteration 26, L1 8.37862e-05, Linf 0.00528856, total time[s] 0.066769 +Converged at iteration 29, L1 7.79748e-05, Linf 0.00175684, total time[s] 0.08097 +Converged at iteration 22, L1 5.93791e-05, Linf 0.013884, total time[s] 0.069088 +Converged at iteration 20, L1 6.61966e-05, Linf 0.00317865, total time[s] 0.062002 +Converged at iteration 24, L1 8.88971e-05, Linf 0.0044115, total time[s] 0.101263 +Converged at iteration 26, L1 7.39945e-05, Linf 0.00455208, total time[s] 0.072614 +Converged at iteration 23, L1 4.82986e-05, Linf 0.00236235, total time[s] 0.096732 +Converged at iteration 22, L1 6.40984e-05, Linf 0.00415174, total time[s] 0.082957 +Converged at iteration 35, L1 5.93109e-05, Linf 0.00880566, total time[s] 0.119465 +Converged at iteration 24, L1 6.56082e-05, Linf 0.00439531, total time[s] 0.067695 +Converged at iteration 25, L1 6.89352e-05, Linf 0.00621046, total time[s] 0.073515 +Converged at iteration 27, L1 6.83822e-05, Linf 0.00336872, total time[s] 0.08571 +Converged at iteration 24, L1 5.6344e-05, Linf 0.00290713, total time[s] 0.070413 +Converged at iteration 24, L1 6.56628e-05, Linf 0.00415281, total time[s] 0.070991 +Converged at iteration 28, L1 6.44002e-05, Linf 0.0177675, total time[s] 0.082906 +Converged at iteration 30, L1 9.55359e-05, Linf 0.00539705, total time[s] 0.112489 +Converged at iteration 28, L1 6.98975e-05, Linf 0.00503838, total time[s] 0.106615 +Converged at iteration 32, L1 7.66589e-05, Linf 0.0074804, total time[s] 0.090455 +Converged at iteration 31, L1 6.00935e-05, Linf 0.00233309, total time[s] 0.080498 +Converged at iteration 31, L1 8.69409e-05, Linf 0.0132012, total time[s] 0.080733 +Converged at iteration 32, L1 6.05626e-05, Linf 0.0035765, total time[s] 0.095022 +Converged at iteration 33, L1 9.77797e-05, Linf 0.0104556, total time[s] 0.091081 +Converged at iteration 32, L1 8.18652e-05, Linf 0.00970796, total time[s] 0.084094 +Converged at iteration 34, L1 7.90116e-05, Linf 0.0151683, total time[s] 0.089001 +Converged at iteration 31, L1 4.92024e-05, Linf 0.00756947, total time[s] 0.088479 +Converged at iteration 26, L1 5.76716e-05, Linf 0.0109125, total time[s] 0.079297 +Converged at iteration 39, L1 2.72508e-05, Linf 0.0100992, total time[s] 0.10729 +Converged at iteration 44, L1 9.10513e-05, Linf 0.00257544, total time[s] 0.11973 +Converged at iteration 25, L1 9.32364e-05, Linf 0.00423407, total time[s] 0.090367 +Converged at iteration 27, L1 9.81195e-05, Linf 0.0115822, total time[s] 0.094389 +Converged at iteration 26, L1 7.35657e-05, Linf 0.00680111, total time[s] 0.133067 +Converged at iteration 42, L1 8.85936e-05, Linf 0.00248002, total time[s] 0.125967 +Converged at iteration 22, L1 4.92186e-05, Linf 0.0103207, total time[s] 0.061961 +Converged at iteration 20, L1 5.02051e-05, Linf 0.00226905, total time[s] 0.060478 +Converged at iteration 24, L1 7.45451e-05, Linf 0.00388279, total time[s] 0.071034 +Converged at iteration 26, L1 6.51811e-05, Linf 0.0280536, total time[s] 0.072971 +Converged at iteration 22, L1 8.51461e-05, Linf 0.0034701, total time[s] 0.056791 +Converged at iteration 22, L1 5.12642e-05, Linf 0.00329798, total time[s] 0.05809 +Converged at iteration 34, L1 7.04482e-05, Linf 0.00994334, total time[s] 0.086072 +Converged at iteration 23, L1 8.95089e-05, Linf 0.00740776, total time[s] 0.061502 +Converged at iteration 25, L1 6.14851e-05, Linf 0.00514237, total time[s] 0.066666 +Converged at iteration 26, L1 9.55541e-05, Linf 0.00415595, total time[s] 0.069835 +Converged at iteration 23, L1 9.05153e-05, Linf 0.00446373, total time[s] 0.067769 +Converged at iteration 24, L1 7.73095e-05, Linf 0.00861156, total time[s] 0.064127 +Converged at iteration 28, L1 8.5069e-05, Linf 0.00386178, total time[s] 0.153884 +Converged at iteration 30, L1 5.24013e-05, Linf 0.00425345, total time[s] 0.128833 +Converged at iteration 28, L1 6.59693e-05, Linf 0.00491621, total time[s] 0.074125 +Converged at iteration 32, L1 8.63813e-05, Linf 0.00840044, total time[s] 0.084333 +Converged at iteration 30, L1 7.57629e-05, Linf 0.00230841, total time[s] 0.078612 +Converged at iteration 31, L1 8.33504e-05, Linf 0.0133192, total time[s] 0.083904 +Converged at iteration 32, L1 5.46416e-05, Linf 0.0030718, total time[s] 0.0914 +Converged at iteration 34, L1 4.12023e-05, Linf 0.00463054, total time[s] 0.101228 +Converged at iteration 32, L1 7.539e-05, Linf 0.00970616, total time[s] 0.090968 +Converged at iteration 34, L1 6.89634e-05, Linf 0.0152253, total time[s] 0.088485 +Converged at iteration 30, L1 7.50765e-05, Linf 0.0189882, total time[s] 0.084333 +Converged at iteration 25, L1 9.75989e-05, Linf 0.00315787, total time[s] 0.069375 +Converged at iteration 39, L1 2.66109e-05, Linf 0.00927133, total time[s] 0.104375 +Converged at iteration 37, L1 6.18059e-05, Linf 0.019486, total time[s] 0.100934 +Converged at iteration 25, L1 9.6391e-05, Linf 0.00434026, total time[s] 0.090271 +Converged at iteration 28, L1 5.38158e-05, Linf 0.00930129, total time[s] 0.07313 +Converged at iteration 26, L1 7.42133e-05, Linf 0.00640632, total time[s] 0.067279 +Converged at iteration 28, L1 9.6943e-05, Linf 0.00978627, total time[s] 0.075207 +Converged at iteration 22, L1 5.38325e-05, Linf 0.0121698, total time[s] 0.065803 +Converged at iteration 20, L1 5.68093e-05, Linf 0.00266502, total time[s] 0.0595 +Converged at iteration 24, L1 8.13826e-05, Linf 0.00418875, total time[s] 0.078947 +Converged at iteration 26, L1 6.68579e-05, Linf 0.00400885, total time[s] 0.074478 +Converged at iteration 22, L1 9.19086e-05, Linf 0.00366997, total time[s] 0.059051 +Converged at iteration 22, L1 5.55145e-05, Linf 0.00375355, total time[s] 0.065756 +Converged at iteration 34, L1 9.44256e-05, Linf 0.0168211, total time[s] 0.097505 +Converged at iteration 23, L1 9.77154e-05, Linf 0.00821711, total time[s] 0.061036 +Converged at iteration 25, L1 6.52431e-05, Linf 0.00570004, total time[s] 0.073172 +Converged at iteration 27, L1 6.17532e-05, Linf 0.00301711, total time[s] 0.070618 +Converged at iteration 24, L1 5.43369e-05, Linf 0.00272432, total time[s] 0.067307 +Converged at iteration 24, L1 7.47906e-05, Linf 0.00391821, total time[s] 0.064033 +Converged at iteration 28, L1 5.33428e-05, Linf 0.00436819, total time[s] 0.095894 +Converged at iteration 30, L1 7.38683e-05, Linf 0.00487042, total time[s] 0.078656 +Converged at iteration 28, L1 6.81724e-05, Linf 0.00498888, total time[s] 0.074355 +Converged at iteration 32, L1 8.16836e-05, Linf 0.00787763, total time[s] 0.100201 +Converged at iteration 30, L1 9.58701e-05, Linf 0.00293947, total time[s] 0.081801 +Converged at iteration 31, L1 8.44327e-05, Linf 0.0133165, total time[s] 0.07992 +Converged at iteration 32, L1 6.16543e-05, Linf 0.00334611, total time[s] 0.082684 +Converged at iteration 34, L1 3.97262e-05, Linf 0.00540907, total time[s] 0.092661 +Converged at iteration 32, L1 7.69434e-05, Linf 0.00937436, total time[s] 0.097796 +Converged at iteration 55, L1 5.93014e-05, Linf 0.00458821, total time[s] 0.14674 +Converged at iteration 30, L1 8.55651e-05, Linf 0.0234767, total time[s] 0.080627 +Converged at iteration 25, L1 9.70112e-05, Linf 0.00342486, total time[s] 0.068369 +Converged at iteration 38, L1 9.91983e-05, Linf 0.0275848, total time[s] 0.100349 +Converged at iteration 37, L1 6.4166e-05, Linf 0.0201679, total time[s] 0.10897 +Converged at iteration 25, L1 9.83611e-05, Linf 0.00430581, total time[s] 0.068205 +Converged at iteration 28, L1 6.25475e-05, Linf 0.0110403, total time[s] 0.085574 +Converged at iteration 26, L1 8.21137e-05, Linf 0.0058869, total time[s] 0.094799 +Converged at iteration 60, L1 9.3559e-05, Linf 0.00319136, total time[s] 0.168044 +Converged at iteration 22, L1 5.63385e-05, Linf 0.0131755, total time[s] 0.071712 +Converged at iteration 20, L1 6.19527e-05, Linf 0.00292063, total time[s] 0.063341 +Converged at iteration 24, L1 8.50337e-05, Linf 0.00425738, total time[s] 0.07523 +Converged at iteration 26, L1 7.01336e-05, Linf 0.00424825, total time[s] 0.071446 +Converged at iteration 22, L1 9.50403e-05, Linf 0.00376834, total time[s] 0.066288 +Converged at iteration 22, L1 6.54013e-05, Linf 0.00397163, total time[s] 0.068367 +Converged at iteration 39, L1 9.15901e-05, Linf 0.0023386, total time[s] 0.099039 +Converged at iteration 24, L1 5.30323e-05, Linf 0.00934955, total time[s] 0.066429 +Converged at iteration 25, L1 6.73218e-05, Linf 0.00595768, total time[s] 0.069134 +Converged at iteration 27, L1 6.30783e-05, Linf 0.00316955, total time[s] 0.070194 +Converged at iteration 24, L1 5.46125e-05, Linf 0.00280749, total time[s] 0.063201 +Converged at iteration 24, L1 6.92535e-05, Linf 0.00407297, total time[s] 0.06601 +Converged at iteration 28, L1 5.70919e-05, Linf 0.00462444, total time[s] 0.078952 +Converged at iteration 30, L1 8.60096e-05, Linf 0.00515958, total time[s] 0.07918 +Converged at iteration 28, L1 6.83009e-05, Linf 0.005013, total time[s] 0.079432 +Converged at iteration 32, L1 7.99109e-05, Linf 0.00776318, total time[s] 0.084357 +Converged at iteration 30, L1 9.70282e-05, Linf 0.00322617, total time[s] 0.078738 +Converged at iteration 31, L1 8.6144e-05, Linf 0.0132377, total time[s] 0.079771 +Converged at iteration 32, L1 6.72743e-05, Linf 0.00348131, total time[s] 0.082189 +Converged at iteration 33, L1 9.9669e-05, Linf 0.00997509, total time[s] 0.085481 +Converged at iteration 32, L1 7.7004e-05, Linf 0.00935393, total time[s] 0.081733 +Converged at iteration 34, L1 7.59278e-05, Linf 0.0150189, total time[s] 0.085964 +Converged at iteration 30, L1 9.29324e-05, Linf 0.0258735, total time[s] 0.080373 +Converged at iteration 26, L1 5.47272e-05, Linf 0.00242882, total time[s] 0.068524 +Converged at iteration 39, L1 2.66062e-05, Linf 0.00953509, total time[s] 0.098962 +Converged at iteration 37, L1 6.23308e-05, Linf 0.0196598, total time[s] 0.125727 +Converged at iteration 25, L1 9.65113e-05, Linf 0.0043391, total time[s] 0.108783 +Converged at iteration 28, L1 6.05276e-05, Linf 0.014032, total time[s] 0.084901 +Converged at iteration 26, L1 7.63487e-05, Linf 0.00638735, total time[s] 0.075435 +Converged at iteration 28, L1 9.50402e-05, Linf 0.0106392, total time[s] 0.07124 +Converged at iteration 22, L1 5.51003e-05, Linf 0.0125877, total time[s] 0.060169 +Converged at iteration 20, L1 6.02557e-05, Linf 0.00277683, total time[s] 0.07215 +Converged at iteration 24, L1 8.34822e-05, Linf 0.00420413, total time[s] 0.100206 +Converged at iteration 26, L1 6.86835e-05, Linf 0.00412451, total time[s] 0.077992 +Converged at iteration 22, L1 9.36474e-05, Linf 0.00372449, total time[s] 0.063703 +Converged at iteration 22, L1 5.80038e-05, Linf 0.00386998, total time[s] 0.079886 +Converged at iteration 35, L1 5.06934e-05, Linf 0.00624298, total time[s] 0.117732 +Converged at iteration 24, L1 6.52031e-05, Linf 0.00563037, total time[s] 0.068602 +Converged at iteration 25, L1 6.60659e-05, Linf 0.00582939, total time[s] 0.066011 +Converged at iteration 27, L1 6.25865e-05, Linf 0.00308425, total time[s] 0.071892 +Converged at iteration 24, L1 5.53827e-05, Linf 0.00276687, total time[s] 0.062655 +Converged at iteration 24, L1 7.09426e-05, Linf 0.00400934, total time[s] 0.065776 +Converged at iteration 28, L1 5.80897e-05, Linf 0.00448301, total time[s] 0.074095 +Converged at iteration 30, L1 7.97372e-05, Linf 0.00501681, total time[s] 0.078705 +Converged at iteration 28, L1 6.82464e-05, Linf 0.00501578, total time[s] 0.078901 +Converged at iteration 32, L1 8.09025e-05, Linf 0.00783387, total time[s] 0.088273 +Converged at iteration 30, L1 9.628e-05, Linf 0.00308072, total time[s] 0.081158 +Converged at iteration 31, L1 9.06747e-05, Linf 0.013277, total time[s] 0.081219 +Converged at iteration 32, L1 6.93038e-05, Linf 0.00341109, total time[s] 0.082696 +Converged at iteration 33, L1 9.98486e-05, Linf 0.00955619, total time[s] 0.08279 +Converged at iteration 32, L1 7.6971e-05, Linf 0.00929275, total time[s] 0.080933 +Converged at iteration 34, L1 7.76046e-05, Linf 0.0159759, total time[s] 0.086432 +Converged at iteration 30, L1 9.54021e-05, Linf 0.0242994, total time[s] 0.076751 +Converged at iteration 26, L1 5.35237e-05, Linf 0.00237278, total time[s] 0.067623 +Converged at iteration 39, L1 2.59328e-05, Linf 0.00959935, total time[s] 0.099197 +Converged at iteration 37, L1 6.20753e-05, Linf 0.0194915, total time[s] 0.097008 +Converged at iteration 25, L1 9.64384e-05, Linf 0.00434175, total time[s] 0.075357 +Converged at iteration 28, L1 5.59208e-05, Linf 0.00972697, total time[s] 0.073739 +Converged at iteration 26, L1 7.41369e-05, Linf 0.00628173, total time[s] 0.066914 +Converged at iteration 28, L1 9.6186e-05, Linf 0.0104406, total time[s] 0.075013 +Converged at iteration 22, L1 5.44624e-05, Linf 0.0129671, total time[s] 0.063806 +Converged at iteration 20, L1 5.93839e-05, Linf 0.00274563, total time[s] 0.062325 +Converged at iteration 24, L1 8.33459e-05, Linf 0.00418495, total time[s] 0.064634 +Converged at iteration 26, L1 6.76452e-05, Linf 0.00406655, total time[s] 0.077391 +Converged at iteration 22, L1 9.44882e-05, Linf 0.0037001, total time[s] 0.065986 +Converged at iteration 22, L1 5.76532e-05, Linf 0.00381222, total time[s] 0.060914 +Converged at iteration 34, L1 9.79538e-05, Linf 0.016856, total time[s] 0.121714 +Converged at iteration 24, L1 5.21085e-05, Linf 0.00403549, total time[s] 0.065676 +Converged at iteration 25, L1 6.76135e-05, Linf 0.00576489, total time[s] 0.067326 +Converged at iteration 27, L1 6.17851e-05, Linf 0.00304889, total time[s] 0.070834 +Converged at iteration 24, L1 5.57636e-05, Linf 0.00274747, total time[s] 0.075359 +Converged at iteration 24, L1 7.30494e-05, Linf 0.00396898, total time[s] 0.065905 +Converged at iteration 28, L1 5.42399e-05, Linf 0.00442954, total time[s] 0.074033 +Converged at iteration 30, L1 7.6887e-05, Linf 0.00492902, total time[s] 0.0781 +Converged at iteration 28, L1 6.88122e-05, Linf 0.00500805, total time[s] 0.074225 +Converged at iteration 32, L1 8.1182e-05, Linf 0.00784987, total time[s] 0.09154 +Converged at iteration 31, L1 6.05468e-05, Linf 0.00199693, total time[s] 0.088089 +Converged at iteration 31, L1 8.46479e-05, Linf 0.0132967, total time[s] 0.078545 +Converged at iteration 32, L1 6.43572e-05, Linf 0.00338169, total time[s] 0.084069 +Converged at iteration 34, L1 3.97953e-05, Linf 0.00547367, total time[s] 0.095292 +Converged at iteration 32, L1 7.70816e-05, Linf 0.0093332, total time[s] 0.087546 +Converged at iteration 34, L1 7.55408e-05, Linf 0.0161446, total time[s] 0.090553 +Converged at iteration 30, L1 8.77259e-05, Linf 0.0250109, total time[s] 0.082323 +Converged at iteration 26, L1 5.67696e-05, Linf 0.00474027, total time[s] 0.069868 +Converged at iteration 39, L1 2.61954e-05, Linf 0.0092274, total time[s] 0.103334 +Converged at iteration 37, L1 6.28698e-05, Linf 0.0206459, total time[s] 0.099128 +Converged at iteration 25, L1 9.64736e-05, Linf 0.00434138, total time[s] 0.073917 +Converged at iteration 28, L1 5.70433e-05, Linf 0.009942, total time[s] 0.082387 +Converged at iteration 26, L1 7.59283e-05, Linf 0.00644637, total time[s] 0.069924 +Converged at iteration 28, L1 9.61349e-05, Linf 0.0104284, total time[s] 0.080571 +Converged at iteration 22, L1 5.47512e-05, Linf 0.0130663, total time[s] 0.07686 +Converged at iteration 20, L1 5.92958e-05, Linf 0.00277307, total time[s] 0.060382 +Converged at iteration 24, L1 8.33759e-05, Linf 0.00418246, total time[s] 0.065165 +Converged at iteration 26, L1 6.82423e-05, Linf 0.00409599, total time[s] 0.083852 +Converged at iteration 22, L1 9.34689e-05, Linf 0.00371334, total time[s] 0.064142 +Converged at iteration 22, L1 5.79935e-05, Linf 0.00384298, total time[s] 0.062406 +Converged at iteration 34, L1 9.95391e-05, Linf 0.0169835, total time[s] 0.091989 +Converged at iteration 24, L1 6.16931e-05, Linf 0.00408189, total time[s] 0.085552 +Converged at iteration 25, L1 6.73005e-05, Linf 0.00579713, total time[s] 0.086284 +Converged at iteration 27, L1 6.32591e-05, Linf 0.00306572, total time[s] 0.079907 +Converged at iteration 24, L1 5.56901e-05, Linf 0.00275724, total time[s] 0.073947 +Converged at iteration 24, L1 7.29206e-05, Linf 0.00398523, total time[s] 0.067752 +Converged at iteration 28, L1 5.69274e-05, Linf 0.00447172, total time[s] 0.102837 +Converged at iteration 30, L1 7.8517e-05, Linf 0.0049778, total time[s] 0.095903 +Converged at iteration 28, L1 6.82657e-05, Linf 0.00501145, total time[s] 0.081683 +Converged at iteration 32, L1 8.10965e-05, Linf 0.00784407, total time[s] 0.09269 +Converged at iteration 30, L1 9.51894e-05, Linf 0.00304899, total time[s] 0.092899 +Converged at iteration 31, L1 8.58606e-05, Linf 0.0132871, total time[s] 0.098236 +Converged at iteration 32, L1 6.01588e-05, Linf 0.00339401, total time[s] 0.096103 +Converged at iteration 33, L1 9.97856e-05, Linf 0.00960245, total time[s] 0.10424 +Converged at iteration 32, L1 7.95834e-05, Linf 0.00930814, total time[s] 0.095317 +Converged at iteration 34, L1 7.49648e-05, Linf 0.015217, total time[s] 0.103347 +Converged at iteration 31, L1 3.87323e-05, Linf 0.00675963, total time[s] 0.089013 +Converged at iteration 25, L1 9.79518e-05, Linf 0.00347806, total time[s] 0.151159 +Converged at iteration 39, L1 2.74815e-05, Linf 0.00918159, total time[s] 0.139957 +Converged at iteration 37, L1 6.28419e-05, Linf 0.0198084, total time[s] 0.117503 +Converged at iteration 25, L1 9.6465e-05, Linf 0.00434026, total time[s] 0.07159 +Converged at iteration 28, L1 5.75847e-05, Linf 0.0100515, total time[s] 0.083295 +Converged at iteration 26, L1 7.56347e-05, Linf 0.0061971, total time[s] 0.078337 +Converged at iteration 28, L1 9.5017e-05, Linf 0.0100364, total time[s] 0.100521 +Converged at iteration 22, L1 5.46457e-05, Linf 0.0127229, total time[s] 0.086171 +Converged at iteration 20, L1 5.9592e-05, Linf 0.00278882, total time[s] 0.086229 +Converged at iteration 24, L1 8.31506e-05, Linf 0.00420234, total time[s] 0.073619 +Converged at iteration 26, L1 6.84807e-05, Linf 0.00410988, total time[s] 0.109841 +Converged at iteration 22, L1 9.28671e-05, Linf 0.00371901, total time[s] 0.072064 +Converged at iteration 22, L1 5.81653e-05, Linf 0.00385398, total time[s] 0.070357 +Converged at iteration 35, L1 5.01698e-05, Linf 0.0061594, total time[s] 0.118648 +Converged at iteration 24, L1 4.83967e-05, Linf 0.00407655, total time[s] 0.078546 +Converged at iteration 25, L1 6.63039e-05, Linf 0.00581327, total time[s] 0.07803 +Converged at iteration 27, L1 6.22731e-05, Linf 0.00307481, total time[s] 0.091511 +Converged at iteration 24, L1 5.49045e-05, Linf 0.00276213, total time[s] 0.076271 +Converged at iteration 24, L1 7.12404e-05, Linf 0.00399902, total time[s] 0.067731 +Converged at iteration 28, L1 5.49923e-05, Linf 0.00447781, total time[s] 0.082246 +Converged at iteration 30, L1 7.93879e-05, Linf 0.00499594, total time[s] 0.09043 +Converged at iteration 28, L1 6.82778e-05, Linf 0.00501254, total time[s] 0.079191 +Converged at iteration 32, L1 8.07997e-05, Linf 0.00784403, total time[s] 0.102333 +Converged at iteration 30, L1 9.45503e-05, Linf 0.00306357, total time[s] 0.118414 +Converged at iteration 31, L1 8.49139e-05, Linf 0.0132812, total time[s] 0.104483 +Converged at iteration 32, L1 6.0854e-05, Linf 0.00340492, total time[s] 0.084753 +Converged at iteration 33, L1 9.94714e-05, Linf 0.00963879, total time[s] 0.087882 +Converged at iteration 32, L1 7.85602e-05, Linf 0.0102893, total time[s] 0.090699 +Converged at iteration 34, L1 7.50706e-05, Linf 0.0152039, total time[s] 0.102725 +Converged at iteration 30, L1 9.84839e-05, Linf 0.0245097, total time[s] 0.098144 +Converged at iteration 25, L1 9.7444e-05, Linf 0.00349096, total time[s] 0.087512 +Converged at iteration 39, L1 2.67206e-05, Linf 0.00943586, total time[s] 0.114979 +Converged at iteration 37, L1 6.21457e-05, Linf 0.0198206, total time[s] 0.257865 +Converged at iteration 25, L1 9.64887e-05, Linf 0.0043397, total time[s] 0.092177 +Converged at iteration 28, L1 5.79236e-05, Linf 0.0101057, total time[s] 0.114945 +Converged at iteration 26, L1 7.60549e-05, Linf 0.00618626, total time[s] 0.094163 +Converged at iteration 30, L1 6.9366e-05, Linf 0.00352438, total time[s] 0.116424 +Converged at iteration 22, L1 5.48356e-05, Linf 0.012756, total time[s] 0.096173 +Converged at iteration 20, L1 6.03954e-05, Linf 0.00279589, total time[s] 0.062938 +Converged at iteration 24, L1 8.30586e-05, Linf 0.00420342, total time[s] 0.081392 +Converged at iteration 26, L1 6.84963e-05, Linf 0.00411716, total time[s] 0.081539 +Converged at iteration 22, L1 9.29992e-05, Linf 0.00372177, total time[s] 0.061884 +Converged at iteration 22, L1 5.83364e-05, Linf 0.0038608, total time[s] 0.065852 +Converged at iteration 35, L1 5.03095e-05, Linf 0.00619349, total time[s] 0.105674 +Converged at iteration 24, L1 5.59038e-05, Linf 0.00408445, total time[s] 0.070488 +Converged at iteration 25, L1 6.65393e-05, Linf 0.0058218, total time[s] 0.078159 +Converged at iteration 27, L1 6.26905e-05, Linf 0.0030795, total time[s] 0.096085 +Converged at iteration 24, L1 5.49487e-05, Linf 0.00276451, total time[s] 0.078445 +Converged at iteration 24, L1 7.09846e-05, Linf 0.00400413, total time[s] 0.066378 +Converged at iteration 28, L1 5.4964e-05, Linf 0.00448276, total time[s] 0.081793 +Converged at iteration 30, L1 7.95235e-05, Linf 0.00500325, total time[s] 0.09362 +Converged at iteration 28, L1 6.87907e-05, Linf 0.00501196, total time[s] 0.079173 +Converged at iteration 32, L1 8.09964e-05, Linf 0.00784368, total time[s] 0.087746 +Converged at iteration 30, L1 9.4821e-05, Linf 0.0030717, total time[s] 0.084067 +Converged at iteration 31, L1 8.50056e-05, Linf 0.0136621, total time[s] 0.109447 +Converged at iteration 32, L1 6.69411e-05, Linf 0.00340988, total time[s] 0.085478 +Converged at iteration 33, L1 9.94145e-05, Linf 0.00966493, total time[s] 0.087622 +Converged at iteration 32, L1 7.75884e-05, Linf 0.00944477, total time[s] 0.095477 +Converged at iteration 39, L1 7.83256e-05, Linf 0.00471854, total time[s] 0.116981 +Converged at iteration 30, L1 8.9168e-05, Linf 0.0245876, total time[s] 0.085738 +Converged at iteration 26, L1 5.21658e-05, Linf 0.00238066, total time[s] 0.074364 +Converged at iteration 39, L1 2.60824e-05, Linf 0.00917118, total time[s] 0.096791 +Converged at iteration 37, L1 6.23914e-05, Linf 0.0198478, total time[s] 0.100973 +Converged at iteration 25, L1 9.64615e-05, Linf 0.00433967, total time[s] 0.074952 +Converged at iteration 28, L1 5.79213e-05, Linf 0.0101258, total time[s] 0.09447 +Converged at iteration 26, L1 7.62264e-05, Linf 0.0061747, total time[s] 0.080177 +Converged at iteration 28, L1 9.40409e-05, Linf 0.00998663, total time[s] 0.087461 +Converged at iteration 22, L1 5.51041e-05, Linf 0.0127644, total time[s] 0.097173 +Converged at iteration 20, L1 5.97499e-05, Linf 0.00279939, total time[s] 0.069909 +Converged at iteration 24, L1 8.3243e-05, Linf 0.00420462, total time[s] 0.069422 +Converged at iteration 26, L1 6.86372e-05, Linf 0.00412081, total time[s] 0.163382 +Converged at iteration 22, L1 9.3855e-05, Linf 0.00372313, total time[s] 0.083986 +Converged at iteration 22, L1 5.70365e-05, Linf 0.00386698, total time[s] 0.059672 +Converged at iteration 35, L1 5.04225e-05, Linf 0.00622054, total time[s] 0.090804 +Converged at iteration 24, L1 4.85288e-05, Linf 0.00408863, total time[s] 0.064659 +Converged at iteration 25, L1 6.6162e-05, Linf 0.00582551, total time[s] 0.0667 +Converged at iteration 27, L1 6.34955e-05, Linf 0.00308186, total time[s] 0.072806 +Converged at iteration 24, L1 5.49924e-05, Linf 0.00276554, total time[s] 0.06458 +Converged at iteration 24, L1 7.21287e-05, Linf 0.00400873, total time[s] 0.064022 +Converged at iteration 28, L1 5.62335e-05, Linf 0.0044892, total time[s] 0.072999 +Converged at iteration 30, L1 8.03837e-05, Linf 0.00503048, total time[s] 0.077566 +Converged at iteration 28, L1 7.02864e-05, Linf 0.00516482, total time[s] 0.072523 +Converged at iteration 32, L1 8.08949e-05, Linf 0.00785063, total time[s] 0.081281 +Converged at iteration 30, L1 9.48864e-05, Linf 0.00307855, total time[s] 0.077121 +Converged at iteration 31, L1 8.84193e-05, Linf 0.0132764, total time[s] 0.081593 +Converged at iteration 32, L1 7.20027e-05, Linf 0.00921952, total time[s] 0.081437 +Converged at iteration 34, L1 4.23882e-05, Linf 0.00550198, total time[s] 0.08597 +Converged at iteration 32, L1 7.76931e-05, Linf 0.00944966, total time[s] 0.080923 +Converged at iteration 34, L1 7.59398e-05, Linf 0.015187, total time[s] 0.086033 +Converged at iteration 31, L1 4.14236e-05, Linf 0.00681176, total time[s] 0.079183 +Converged at iteration 26, L1 5.41222e-05, Linf 0.00236974, total time[s] 0.072049 +Converged at iteration 40, L1 6.71342e-05, Linf 0.00367627, total time[s] 0.104991 +Converged at iteration 35, L1 7.60938e-05, Linf 0.0033974, total time[s] 0.091261 +Converged at iteration 30, L1 9.62526e-05, Linf 0.0043264, total time[s] 0.074464 +Converged at iteration 31, L1 6.19657e-05, Linf 0.00502563, total time[s] 0.076002 +Converged at iteration 27, L1 6.25942e-05, Linf 0.00499543, total time[s] 0.066075 +Converged at iteration 22, L1 8.58861e-05, Linf 0.0044885, total time[s] 0.056427 +Converged at iteration 20, L1 9.60206e-05, Linf 0.00397848, total time[s] 0.052219 +Converged at iteration 24, L1 8.84323e-05, Linf 0.00482885, total time[s] 0.067507 +Converged at iteration 28, L1 7.3889e-05, Linf 0.00446135, total time[s] 0.072771 +Converged at iteration 26, L1 8.11722e-05, Linf 0.00547505, total time[s] 0.068416 +Converged at iteration 22, L1 7.42212e-05, Linf 0.00511771, total time[s] 0.05811 +Converged at iteration 19, L1 6.63305e-05, Linf 0.00393176, total time[s] 0.051428 +Converged at iteration 30, L1 7.98739e-05, Linf 0.00329884, total time[s] 0.086525 +Converged at iteration 20, L1 8.44399e-05, Linf 0.00465306, total time[s] 0.051919 +Converged at iteration 24, L1 7.1086e-05, Linf 0.00463287, total time[s] 0.061469 +Converged at iteration 31, L1 8.93592e-05, Linf 0.00569187, total time[s] 0.077824 +Converged at iteration 27, L1 9.9136e-05, Linf 0.005698, total time[s] 0.069163 +Converged at iteration 24, L1 8.79062e-05, Linf 0.0046502, total time[s] 0.07038 +Converged at iteration 23, L1 9.22638e-05, Linf 0.004102, total time[s] 0.074746 +Converged at iteration 26, L1 7.22119e-05, Linf 0.00446119, total time[s] 0.066533 +Converged at iteration 29, L1 7.81421e-05, Linf 0.00479591, total time[s] 0.07418 +Converged at iteration 34, L1 7.09388e-05, Linf 0.00422895, total time[s] 0.08532 +Converged at iteration 30, L1 9.3944e-05, Linf 0.00442591, total time[s] 0.080707 +Converged at iteration 28, L1 9.49804e-05, Linf 0.00309455, total time[s] 0.082042 +Converged at iteration 32, L1 9.44432e-05, Linf 0.00374365, total time[s] 0.080485 +Converged at iteration 37, L1 7.44688e-05, Linf 0.00327758, total time[s] 0.091948 +Converged at iteration 33, L1 8.4514e-05, Linf 0.00469104, total time[s] 0.082927 +Converged at iteration 28, L1 9.65034e-05, Linf 0.0043016, total time[s] 0.071673 +Converged at iteration 24, L1 8.83131e-05, Linf 0.00325072, total time[s] 0.066108 +Converged at iteration 26, L1 9.01667e-05, Linf 0.00381927, total time[s] 0.075193 +Converged at iteration 40, L1 6.67287e-05, Linf 0.0039334, total time[s] 0.104638 +Converged at iteration 35, L1 8.6886e-05, Linf 0.00360632, total time[s] 0.088476 +Converged at iteration 30, L1 9.23483e-05, Linf 0.00415438, total time[s] 0.076057 +Converged at iteration 31, L1 6.21001e-05, Linf 0.00504682, total time[s] 0.077914 +Converged at iteration 26, L1 9.83769e-05, Linf 0.00577605, total time[s] 0.066292 +Converged at iteration 22, L1 7.17019e-05, Linf 0.00418206, total time[s] 0.059211 +Converged at iteration 21, L1 6.44898e-05, Linf 0.00348437, total time[s] 0.055229 +Converged at iteration 24, L1 8.94226e-05, Linf 0.00496496, total time[s] 0.062305 +Converged at iteration 28, L1 7.38298e-05, Linf 0.00443932, total time[s] 0.071332 +Converged at iteration 26, L1 8.02237e-05, Linf 0.00534475, total time[s] 0.066649 +Converged at iteration 22, L1 7.0552e-05, Linf 0.00441483, total time[s] 0.057397 +Converged at iteration 19, L1 5.49391e-05, Linf 0.00332056, total time[s] 0.050757 +Converged at iteration 30, L1 9.53195e-05, Linf 0.00330738, total time[s] 0.079084 +Converged at iteration 20, L1 8.42606e-05, Linf 0.00472678, total time[s] 0.052343 +Converged at iteration 24, L1 7.12206e-05, Linf 0.00475279, total time[s] 0.06165 +Converged at iteration 31, L1 9.41737e-05, Linf 0.00481986, total time[s] 0.078075 +Converged at iteration 27, L1 9.41351e-05, Linf 0.00468331, total time[s] 0.069308 +Converged at iteration 24, L1 8.52431e-05, Linf 0.00428051, total time[s] 0.070059 +Converged at iteration 23, L1 9.23978e-05, Linf 0.00432074, total time[s] 0.062187 +Converged at iteration 26, L1 7.13262e-05, Linf 0.00465405, total time[s] 0.079568 +Converged at iteration 29, L1 7.52223e-05, Linf 0.00488615, total time[s] 0.072211 +Converged at iteration 34, L1 8.13606e-05, Linf 0.00403917, total time[s] 0.083765 +Converged at iteration 31, L1 7.1763e-05, Linf 0.00355317, total time[s] 0.078661 +Converged at iteration 29, L1 7.02516e-05, Linf 0.00272481, total time[s] 0.074865 +Converged at iteration 32, L1 8.2726e-05, Linf 0.00354805, total time[s] 0.079622 +Converged at iteration 36, L1 8.7344e-05, Linf 0.0035946, total time[s] 0.090629 +Converged at iteration 33, L1 8.32446e-05, Linf 0.00484799, total time[s] 0.083193 +Converged at iteration 28, L1 9.10449e-05, Linf 0.00413137, total time[s] 0.071124 +Converged at iteration 24, L1 8.02988e-05, Linf 0.00290884, total time[s] 0.062638 +Converged at iteration 26, L1 8.45248e-05, Linf 0.00392398, total time[s] 0.066292 +Converged at iteration 40, L1 6.50171e-05, Linf 0.00418306, total time[s] 0.099321 +Converged at iteration 35, L1 9.64217e-05, Linf 0.00385477, total time[s] 0.090577 +Converged at iteration 30, L1 7.65415e-05, Linf 0.00420731, total time[s] 0.078729 +Converged at iteration 31, L1 6.17552e-05, Linf 0.00506463, total time[s] 0.081533 +Converged at iteration 26, L1 9.11383e-05, Linf 0.00568966, total time[s] 0.068757 +Converged at iteration 21, L1 9.60221e-05, Linf 0.00461207, total time[s] 0.063321 +Converged at iteration 21, L1 6.92669e-05, Linf 0.00393164, total time[s] 0.064319 +Converged at iteration 24, L1 8.29871e-05, Linf 0.00519938, total time[s] 0.064114 +Converged at iteration 28, L1 6.80069e-05, Linf 0.00440907, total time[s] 0.099821 +Converged at iteration 26, L1 8.12492e-05, Linf 0.00431826, total time[s] 0.101032 +Converged at iteration 21, L1 8.51121e-05, Linf 0.00433737, total time[s] 0.059781 +Converged at iteration 18, L1 7.37611e-05, Linf 0.00298989, total time[s] 0.051799 +Converged at iteration 31, L1 7.48927e-05, Linf 0.00268238, total time[s] 0.081659 +Converged at iteration 20, L1 8.18446e-05, Linf 0.00494539, total time[s] 0.053358 +Converged at iteration 24, L1 6.88906e-05, Linf 0.00499741, total time[s] 0.064864 +Converged at iteration 30, L1 9.41545e-05, Linf 0.00345566, total time[s] 0.081859 +Converged at iteration 25, L1 9.0155e-05, Linf 0.00466623, total time[s] 0.065733 +Converged at iteration 23, L1 8.35872e-05, Linf 0.00393111, total time[s] 0.060403 +Converged at iteration 23, L1 9.32952e-05, Linf 0.00455938, total time[s] 0.061185 +Converged at iteration 26, L1 6.88923e-05, Linf 0.00492269, total time[s] 0.068271 +Converged at iteration 29, L1 7.12694e-05, Linf 0.00490059, total time[s] 0.079839 +Converged at iteration 32, L1 8.57715e-05, Linf 0.0035015, total time[s] 0.088034 +Converged at iteration 31, L1 7.25467e-05, Linf 0.003048, total time[s] 0.086414 +Converged at iteration 29, L1 7.73521e-05, Linf 0.00289707, total time[s] 0.075492 +Converged at iteration 32, L1 7.57835e-05, Linf 0.00338821, total time[s] 0.085032 +Converged at iteration 35, L1 9.72509e-05, Linf 0.00406386, total time[s] 0.089737 +Converged at iteration 33, L1 8.06329e-05, Linf 0.00500355, total time[s] 0.083064 +Converged at iteration 28, L1 8.42751e-05, Linf 0.00398747, total time[s] 0.076475 +Converged at iteration 24, L1 7.80462e-05, Linf 0.00256146, total time[s] 0.0706 +Converged at iteration 26, L1 8.36315e-05, Linf 0.00405328, total time[s] 0.065657 +Converged at iteration 39, L1 9.33911e-05, Linf 0.00548868, total time[s] 0.096733 +Converged at iteration 36, L1 7.28782e-05, Linf 0.00384483, total time[s] 0.092722 +Converged at iteration 27, L1 5.17241e-05, Linf 0.00565824, total time[s] 0.068838 +Converged at iteration 31, L1 6.04568e-05, Linf 0.00508914, total time[s] 0.077035 +Converged at iteration 26, L1 7.63223e-05, Linf 0.00544344, total time[s] 0.071757 +Converged at iteration 21, L1 7.19211e-05, Linf 0.00380743, total time[s] 0.06887 +Converged at iteration 20, L1 6.893e-05, Linf 0.00502794, total time[s] 0.058284 +Converged at iteration 22, L1 7.53441e-05, Linf 0.00759128, total time[s] 0.064746 +Converged at iteration 26, L1 9.72512e-05, Linf 0.00651837, total time[s] 0.071821 +Converged at iteration 25, L1 7.44581e-05, Linf 0.00412422, total time[s] 0.065119 +Converged at iteration 20, L1 8.84175e-05, Linf 0.00555827, total time[s] 0.054248 +Converged at iteration 17, L1 8.52471e-05, Linf 0.00400213, total time[s] 0.045402 +Converged at iteration 31, L1 9.13849e-05, Linf 0.00277121, total time[s] 0.079458 +Converged at iteration 20, L1 6.6414e-05, Linf 0.00539278, total time[s] 0.051463 +Converged at iteration 24, L1 6.21069e-05, Linf 0.00552686, total time[s] 0.066747 +Converged at iteration 28, L1 7.07415e-05, Linf 0.00373886, total time[s] 0.071743 +Converged at iteration 23, L1 9.56707e-05, Linf 0.00710106, total time[s] 0.058337 +Converged at iteration 21, L1 9.30106e-05, Linf 0.0048513, total time[s] 0.060206 +Converged at iteration 23, L1 7.86622e-05, Linf 0.0042781, total time[s] 0.058731 +Converged at iteration 25, L1 9.94336e-05, Linf 0.00626438, total time[s] 0.065946 +Converged at iteration 28, L1 9.8256e-05, Linf 0.00586729, total time[s] 0.085482 +Converged at iteration 30, L1 6.8633e-05, Linf 0.00488175, total time[s] 0.074594 +Converged at iteration 28, L1 8.30339e-05, Linf 0.00350206, total time[s] 0.090315 +Converged at iteration 29, L1 8.81949e-05, Linf 0.00329484, total time[s] 0.076827 +Converged at iteration 31, L1 6.93373e-05, Linf 0.00290639, total time[s] 0.089323 +Converged at iteration 31, L1 9.11092e-05, Linf 0.00460221, total time[s] 0.07796 +Converged at iteration 33, L1 7.40788e-05, Linf 0.00530596, total time[s] 0.081419 +Converged at iteration 28, L1 6.99534e-05, Linf 0.00368888, total time[s] 0.070159 +Converged at iteration 24, L1 8.8104e-05, Linf 0.00186806, total time[s] 0.081203 +Converged at iteration 25, L1 6.96138e-05, Linf 0.00424598, total time[s] 0.069968 +Converged at iteration 39, L1 7.64718e-05, Linf 0.0063509, total time[s] 0.095803 +Converged at iteration 36, L1 7.31093e-05, Linf 0.00528136, total time[s] 0.098113 +Converged at iteration 24, L1 7.4866e-05, Linf 0.00410962, total time[s] 0.068648 +Converged at iteration 31, L1 5.87403e-05, Linf 0.00509163, total time[s] 0.083273 +Converged at iteration 25, L1 8.69325e-05, Linf 0.00571603, total time[s] 0.062852 +Converged at iteration 20, L1 9.16226e-05, Linf 0.00380206, total time[s] 0.050938 +Converged at iteration 19, L1 6.59644e-05, Linf 0.00441336, total time[s] 0.051512 +Converged at iteration 20, L1 9.17779e-05, Linf 0.00663658, total time[s] 0.055036 +Converged at iteration 24, L1 7.94685e-05, Linf 0.00495826, total time[s] 0.064566 +Converged at iteration 24, L1 7.5846e-05, Linf 0.00495168, total time[s] 0.067981 +Converged at iteration 20, L1 6.05534e-05, Linf 0.00519212, total time[s] 0.051595 +Converged at iteration 17, L1 5.20036e-05, Linf 0.00244089, total time[s] 0.053755 +Converged at iteration 32, L1 6.9088e-05, Linf 0.00254341, total time[s] 0.079214 +Converged at iteration 19, L1 9.3665e-05, Linf 0.00688572, total time[s] 0.06648 +Converged at iteration 23, L1 7.81668e-05, Linf 0.00710086, total time[s] 0.062546 +Converged at iteration 26, L1 8.14235e-05, Linf 0.00603279, total time[s] 0.065155 +Converged at iteration 23, L1 5.79516e-05, Linf 0.00604583, total time[s] 0.060195 +Converged at iteration 20, L1 8.31352e-05, Linf 0.00552682, total time[s] 0.050717 +Converged at iteration 22, L1 9.95502e-05, Linf 0.00479376, total time[s] 0.056697 +Converged at iteration 25, L1 8.56043e-05, Linf 0.0045432, total time[s] 0.063666 +Converged at iteration 28, L1 7.84056e-05, Linf 0.00358746, total time[s] 0.070037 +Converged at iteration 29, L1 7.49177e-05, Linf 0.00611982, total time[s] 0.071293 +Converged at iteration 27, L1 7.35924e-05, Linf 0.00402013, total time[s] 0.067771 +Converged at iteration 29, L1 7.65682e-05, Linf 0.00380597, total time[s] 0.072021 +Converged at iteration 29, L1 9.18059e-05, Linf 0.00277217, total time[s] 0.072312 +Converged at iteration 28, L1 8.32076e-05, Linf 0.00273875, total time[s] 0.070792 +Converged at iteration 33, L1 6.17854e-05, Linf 0.00584927, total time[s] 0.080731 +Converged at iteration 27, L1 6.87681e-05, Linf 0.00334626, total time[s] 0.067524 +Converged at iteration 24, L1 9.65666e-05, Linf 0.00239088, total time[s] 0.061015 +Converged at iteration 23, L1 7.56583e-05, Linf 0.00333628, total time[s] 0.058914 +Converged at iteration 39, L1 7.43871e-05, Linf 0.00661421, total time[s] 0.095427 +Converged at iteration 36, L1 7.17142e-05, Linf 0.00533653, total time[s] 0.091057 +Converged at iteration 24, L1 7.43373e-05, Linf 0.00388462, total time[s] 0.06173 +Converged at iteration 31, L1 5.76967e-05, Linf 0.00507395, total time[s] 0.076808 +Converged at iteration 25, L1 8.74913e-05, Linf 0.00584041, total time[s] 0.062913 +Converged at iteration 20, L1 9.40664e-05, Linf 0.00386639, total time[s] 0.051985 +Converged at iteration 19, L1 6.41428e-05, Linf 0.00438275, total time[s] 0.055577 +Converged at iteration 20, L1 9.02377e-05, Linf 0.00655212, total time[s] 0.058502 +Converged at iteration 24, L1 7.67393e-05, Linf 0.00459179, total time[s] 0.091954 +Converged at iteration 24, L1 7.67883e-05, Linf 0.00497061, total time[s] 0.06634 +Converged at iteration 20, L1 6.12158e-05, Linf 0.00515332, total time[s] 0.056923 +Converged at iteration 16, L1 9.93319e-05, Linf 0.00457313, total time[s] 0.101845 +Converged at iteration 32, L1 6.89811e-05, Linf 0.00257437, total time[s] 0.08167 +Converged at iteration 19, L1 9.32945e-05, Linf 0.00680648, total time[s] 0.050374 +Converged at iteration 23, L1 7.73172e-05, Linf 0.00661132, total time[s] 0.058912 +Converged at iteration 26, L1 7.99146e-05, Linf 0.00596611, total time[s] 0.064652 +Converged at iteration 23, L1 5.70402e-05, Linf 0.00596405, total time[s] 0.059465 +Converged at iteration 20, L1 8.25408e-05, Linf 0.00551221, total time[s] 0.051399 +Converged at iteration 23, L1 6.34954e-05, Linf 0.00299056, total time[s] 0.060549 +Converged at iteration 25, L1 8.37495e-05, Linf 0.00419644, total time[s] 0.06276 +Converged at iteration 28, L1 7.73349e-05, Linf 0.00347411, total time[s] 0.068978 +Converged at iteration 29, L1 7.46123e-05, Linf 0.0061099, total time[s] 0.07126 +Converged at iteration 27, L1 7.37011e-05, Linf 0.0040022, total time[s] 0.068753 +Converged at iteration 29, L1 7.80995e-05, Linf 0.00380192, total time[s] 0.071262 +Converged at iteration 29, L1 9.26971e-05, Linf 0.00277467, total time[s] 0.071117 +Converged at iteration 28, L1 8.26958e-05, Linf 0.00266535, total time[s] 0.069913 +Converged at iteration 33, L1 5.99878e-05, Linf 0.00585307, total time[s] 0.082144 +Converged at iteration 27, L1 6.87702e-05, Linf 0.0034311, total time[s] 0.067827 +Converged at iteration 24, L1 9.89957e-05, Linf 0.00243498, total time[s] 0.061378 +Converged at iteration 23, L1 7.49224e-05, Linf 0.00326573, total time[s] 0.058312 +Converged at iteration 39, L1 7.24372e-05, Linf 0.00662489, total time[s] 0.101683 +Converged at iteration 36, L1 7.00716e-05, Linf 0.00539874, total time[s] 0.090361 +Converged at iteration 24, L1 7.36872e-05, Linf 0.00367951, total time[s] 0.06103 +Converged at iteration 31, L1 5.585e-05, Linf 0.00504471, total time[s] 0.076698 +Converged at iteration 25, L1 8.8689e-05, Linf 0.00599547, total time[s] 0.064672 +Converged at iteration 20, L1 9.83713e-05, Linf 0.00391929, total time[s] 0.052457 +Converged at iteration 19, L1 6.18763e-05, Linf 0.00426945, total time[s] 0.052707 +Converged at iteration 20, L1 8.84551e-05, Linf 0.00608391, total time[s] 0.055736 +Converged at iteration 24, L1 7.44661e-05, Linf 0.00420046, total time[s] 0.063504 +Converged at iteration 24, L1 7.79689e-05, Linf 0.0050882, total time[s] 0.062072 +Converged at iteration 20, L1 6.23006e-05, Linf 0.00517783, total time[s] 0.055156 +Converged at iteration 16, L1 9.7911e-05, Linf 0.00481189, total time[s] 0.052612 +Converged at iteration 32, L1 6.85159e-05, Linf 0.00260468, total time[s] 0.087711 +Converged at iteration 19, L1 9.44422e-05, Linf 0.00676172, total time[s] 0.056634 +Converged at iteration 23, L1 7.75956e-05, Linf 0.00694566, total time[s] 0.081789 +Converged at iteration 26, L1 7.9692e-05, Linf 0.00593083, total time[s] 0.066363 +Converged at iteration 23, L1 5.70276e-05, Linf 0.00599365, total time[s] 0.069192 +Converged at iteration 20, L1 8.36524e-05, Linf 0.00546742, total time[s] 0.053856 +Converged at iteration 23, L1 6.51269e-05, Linf 0.00283394, total time[s] 0.063192 +Converged at iteration 25, L1 8.41917e-05, Linf 0.00403734, total time[s] 0.066724 +Converged at iteration 28, L1 7.71886e-05, Linf 0.00362167, total time[s] 0.072745 +Converged at iteration 29, L1 7.58785e-05, Linf 0.00618363, total time[s] 0.074324 +Converged at iteration 27, L1 7.51844e-05, Linf 0.0039771, total time[s] 0.06929 +Converged at iteration 29, L1 7.9276e-05, Linf 0.00387171, total time[s] 0.075574 +Converged at iteration 29, L1 9.23167e-05, Linf 0.00278045, total time[s] 0.075401 +Converged at iteration 28, L1 8.12809e-05, Linf 0.00260626, total time[s] 0.073181 +Converged at iteration 33, L1 5.84291e-05, Linf 0.00585237, total time[s] 0.086315 +Converged at iteration 27, L1 6.93099e-05, Linf 0.00353849, total time[s] 0.074903 +Converged at iteration 25, L1 7.12637e-05, Linf 0.00193445, total time[s] 0.066435 +Converged at iteration 23, L1 7.43399e-05, Linf 0.00318752, total time[s] 0.060658 +Converged at iteration 39, L1 7.17192e-05, Linf 0.00661479, total time[s] 0.148541 +Converged at iteration 36, L1 6.83322e-05, Linf 0.0054566, total time[s] 0.130158 +Converged at iteration 24, L1 7.30616e-05, Linf 0.00336557, total time[s] 0.08302 +Converged at iteration 31, L1 5.59243e-05, Linf 0.00499766, total time[s] 0.081892 +Converged at iteration 25, L1 9.29113e-05, Linf 0.00634294, total time[s] 0.069548 +Converged at iteration 21, L1 5.86978e-05, Linf 0.00343234, total time[s] 0.057733 +Converged at iteration 19, L1 5.99416e-05, Linf 0.00410049, total time[s] 0.058691 +Converged at iteration 20, L1 8.60179e-05, Linf 0.00645549, total time[s] 0.097747 +Converged at iteration 24, L1 7.17978e-05, Linf 0.00445201, total time[s] 0.064538 +Converged at iteration 24, L1 8.13487e-05, Linf 0.00520122, total time[s] 0.073814 +Converged at iteration 20, L1 6.52061e-05, Linf 0.00543447, total time[s] 0.068297 +Converged at iteration 16, L1 9.73105e-05, Linf 0.00506916, total time[s] 0.053326 +Converged at iteration 32, L1 6.76537e-05, Linf 0.00262259, total time[s] 0.094746 +Converged at iteration 19, L1 9.43034e-05, Linf 0.00674376, total time[s] 0.049891 +Converged at iteration 23, L1 7.68996e-05, Linf 0.0067962, total time[s] 0.068941 +Converged at iteration 26, L1 8.0221e-05, Linf 0.00589295, total time[s] 0.06618 +Converged at iteration 23, L1 5.63956e-05, Linf 0.00596968, total time[s] 0.067844 +Converged at iteration 20, L1 8.53169e-05, Linf 0.00551568, total time[s] 0.155533 +Converged at iteration 23, L1 6.73734e-05, Linf 0.00279217, total time[s] 0.084966 +Converged at iteration 25, L1 8.39473e-05, Linf 0.00409751, total time[s] 0.067698 +Converged at iteration 28, L1 7.77747e-05, Linf 0.0037886, total time[s] 0.073795 +Converged at iteration 29, L1 7.74542e-05, Linf 0.0062416, total time[s] 0.083916 +Converged at iteration 27, L1 7.69885e-05, Linf 0.00395299, total time[s] 0.076748 +Converged at iteration 29, L1 8.11341e-05, Linf 0.003928, total time[s] 0.073204 +Converged at iteration 29, L1 9.57592e-05, Linf 0.00278269, total time[s] 0.076861 +Converged at iteration 28, L1 8.05554e-05, Linf 0.00253961, total time[s] 0.07083 +Converged at iteration 32, L1 9.89495e-05, Linf 0.00696323, total time[s] 0.080651 +Converged at iteration 27, L1 7.17082e-05, Linf 0.00375317, total time[s] 0.068899 +Converged at iteration 25, L1 7.24306e-05, Linf 0.00198927, total time[s] 0.064587 +Converged at iteration 23, L1 7.45593e-05, Linf 0.0030492, total time[s] 0.063162 +Converged at iteration 39, L1 6.99502e-05, Linf 0.00658927, total time[s] 0.11244 +Converged at iteration 36, L1 6.63415e-05, Linf 0.00550653, total time[s] 0.094799 +Converged at iteration 24, L1 7.26369e-05, Linf 0.00310394, total time[s] 0.065406 +Converged at iteration 30, L1 9.65659e-05, Linf 0.00610826, total time[s] 0.07583 +Converged at iteration 25, L1 9.80963e-05, Linf 0.00663222, total time[s] 0.06403 +Converged at iteration 21, L1 6.42646e-05, Linf 0.00333618, total time[s] 0.055447 +Converged at iteration 19, L1 5.92003e-05, Linf 0.00397631, total time[s] 0.066736 +Converged at iteration 20, L1 8.29152e-05, Linf 0.00614815, total time[s] 0.063621 +Converged at iteration 24, L1 6.88173e-05, Linf 0.00350164, total time[s] 0.063231 +Converged at iteration 24, L1 8.46948e-05, Linf 0.00539635, total time[s] 0.065084 +Converged at iteration 20, L1 6.93226e-05, Linf 0.00568772, total time[s] 0.056222 +Converged at iteration 16, L1 9.70517e-05, Linf 0.00537939, total time[s] 0.062743 +Converged at iteration 32, L1 6.56392e-05, Linf 0.00264258, total time[s] 0.09074 +Converged at iteration 19, L1 9.44437e-05, Linf 0.00657902, total time[s] 0.051433 +Converged at iteration 23, L1 7.6699e-05, Linf 0.00666756, total time[s] 0.086581 +Converged at iteration 26, L1 8.06493e-05, Linf 0.00586198, total time[s] 0.088064 +Converged at iteration 23, L1 5.58052e-05, Linf 0.00597152, total time[s] 0.091136 +Converged at iteration 20, L1 8.84288e-05, Linf 0.0055271, total time[s] 0.060925 +Converged at iteration 23, L1 7.03316e-05, Linf 0.00272168, total time[s] 0.066412 +Converged at iteration 25, L1 8.47943e-05, Linf 0.00378474, total time[s] 0.076897 +Converged at iteration 28, L1 7.92665e-05, Linf 0.00400947, total time[s] 0.075418 +Converged at iteration 29, L1 7.96809e-05, Linf 0.0062834, total time[s] 0.102388 +Converged at iteration 27, L1 7.9528e-05, Linf 0.00392728, total time[s] 0.077164 +Converged at iteration 29, L1 8.28984e-05, Linf 0.00402091, total time[s] 0.078535 +Converged at iteration 29, L1 9.38126e-05, Linf 0.00277513, total time[s] 0.073126 +Converged at iteration 28, L1 7.99586e-05, Linf 0.00247604, total time[s] 0.070723 +Converged at iteration 32, L1 9.61212e-05, Linf 0.00693291, total time[s] 0.087101 +Converged at iteration 27, L1 7.63028e-05, Linf 0.00407244, total time[s] 0.073471 +Converged at iteration 25, L1 6.94018e-05, Linf 0.0020173, total time[s] 0.108217 +Converged at iteration 23, L1 7.50868e-05, Linf 0.00300239, total time[s] 0.071142 +Converged at iteration 39, L1 6.78268e-05, Linf 0.00654713, total time[s] 0.191085 +Converged at iteration 36, L1 6.36886e-05, Linf 0.00555347, total time[s] 0.162367 +Converged at iteration 24, L1 7.26536e-05, Linf 0.00308085, total time[s] 0.083768 +Converged at iteration 30, L1 9.42164e-05, Linf 0.00605409, total time[s] 0.119633 +Converged at iteration 26, L1 5.93314e-05, Linf 0.0058832, total time[s] 0.078523 +Converged at iteration 21, L1 7.50371e-05, Linf 0.0033988, total time[s] 0.057383 +Converged at iteration 19, L1 5.76876e-05, Linf 0.00394748, total time[s] 0.055224 +Converged at iteration 20, L1 7.97156e-05, Linf 0.00641244, total time[s] 0.058375 +Converged at iteration 24, L1 6.54768e-05, Linf 0.00398202, total time[s] 0.063161 +Converged at iteration 24, L1 8.91875e-05, Linf 0.00563854, total time[s] 0.063175 +Converged at iteration 20, L1 7.46022e-05, Linf 0.0057576, total time[s] 0.052792 +Converged at iteration 16, L1 9.67975e-05, Linf 0.00574905, total time[s] 0.044329 +Converged at iteration 32, L1 6.26773e-05, Linf 0.00266329, total time[s] 0.081775 +Converged at iteration 19, L1 9.37612e-05, Linf 0.00641177, total time[s] 0.051233 +Converged at iteration 23, L1 7.5975e-05, Linf 0.00645811, total time[s] 0.072877 +Converged at iteration 26, L1 8.2098e-05, Linf 0.0058541, total time[s] 0.068681 +Converged at iteration 23, L1 5.51734e-05, Linf 0.00597433, total time[s] 0.059639 +Converged at iteration 20, L1 9.33459e-05, Linf 0.00550921, total time[s] 0.0553 +Converged at iteration 23, L1 7.20404e-05, Linf 0.00264853, total time[s] 0.05857 +Converged at iteration 25, L1 8.62197e-05, Linf 0.00367212, total time[s] 0.063507 +Converged at iteration 28, L1 8.18312e-05, Linf 0.00422627, total time[s] 0.069445 +Converged at iteration 29, L1 8.26105e-05, Linf 0.00639039, total time[s] 0.087996 +Converged at iteration 27, L1 8.28136e-05, Linf 0.00394325, total time[s] 0.078266 +Converged at iteration 29, L1 8.53502e-05, Linf 0.00406332, total time[s] 0.075733 +Converged at iteration 29, L1 9.40162e-05, Linf 0.00276546, total time[s] 0.094412 +Converged at iteration 28, L1 7.99255e-05, Linf 0.00241735, total time[s] 0.076413 +Converged at iteration 32, L1 9.29705e-05, Linf 0.00687887, total time[s] 0.080761 +Converged at iteration 27, L1 8.12423e-05, Linf 0.0044941, total time[s] 0.074054 +Converged at iteration 24, L1 9.85894e-05, Linf 0.00261268, total time[s] 0.069008 +Converged at iteration 23, L1 7.68829e-05, Linf 0.00290501, total time[s] 0.058127 +Converged at iteration 39, L1 6.65937e-05, Linf 0.00649212, total time[s] 0.114608 +Converged at iteration 36, L1 6.03637e-05, Linf 0.00556, total time[s] 0.092824 +Converged at iteration 24, L1 7.42197e-05, Linf 0.00293937, total time[s] 0.06221 +Converged at iteration 30, L1 9.12738e-05, Linf 0.0059894, total time[s] 0.075805 +Converged at iteration 26, L1 6.45889e-05, Linf 0.00632779, total time[s] 0.067121 +Converged at iteration 21, L1 9.00026e-05, Linf 0.00429055, total time[s] 0.055366 +Converged at iteration 19, L1 5.71459e-05, Linf 0.00397523, total time[s] 0.069261 +Converged at iteration 20, L1 7.62359e-05, Linf 0.00595836, total time[s] 0.058942 +Converged at iteration 24, L1 6.19189e-05, Linf 0.00327163, total time[s] 0.064704 +Converged at iteration 24, L1 9.39522e-05, Linf 0.00590053, total time[s] 0.066246 +Converged at iteration 20, L1 8.1095e-05, Linf 0.00595929, total time[s] 0.054666 +Converged at iteration 16, L1 9.65828e-05, Linf 0.00611303, total time[s] 0.044099 +Converged at iteration 32, L1 5.79558e-05, Linf 0.00267463, total time[s] 0.091763 +Converged at iteration 19, L1 9.27719e-05, Linf 0.00622702, total time[s] 0.051162 +Converged at iteration 23, L1 7.48391e-05, Linf 0.00622691, total time[s] 0.063824 +Converged at iteration 26, L1 8.3434e-05, Linf 0.00582496, total time[s] 0.07673 +Converged at iteration 23, L1 5.48187e-05, Linf 0.00602727, total time[s] 0.061186 +Converged at iteration 20, L1 9.90181e-05, Linf 0.00559458, total time[s] 0.052666 +Converged at iteration 23, L1 7.34033e-05, Linf 0.00262825, total time[s] 0.060525 +Converged at iteration 25, L1 8.7307e-05, Linf 0.00358286, total time[s] 0.068496 +Converged at iteration 28, L1 8.30192e-05, Linf 0.00447657, total time[s] 0.080646 +Converged at iteration 29, L1 8.59117e-05, Linf 0.00647886, total time[s] 0.074522 +Converged at iteration 27, L1 8.64352e-05, Linf 0.00387877, total time[s] 0.069149 +Converged at iteration 29, L1 8.74454e-05, Linf 0.00414758, total time[s] 0.089646 +Converged at iteration 29, L1 9.41147e-05, Linf 0.00277903, total time[s] 0.126257 +Converged at iteration 28, L1 8.00287e-05, Linf 0.00236563, total time[s] 0.079835 +Converged at iteration 32, L1 8.89742e-05, Linf 0.00680244, total time[s] 0.080492 +Converged at iteration 27, L1 8.72719e-05, Linf 0.00506295, total time[s] 0.07028 +Converged at iteration 24, L1 9.96294e-05, Linf 0.00265501, total time[s] 0.060276 +Converged at iteration 23, L1 7.92531e-05, Linf 0.00273948, total time[s] 0.057666 +Converged at iteration 39, L1 6.49332e-05, Linf 0.00642307, total time[s] 0.09643 +Converged at iteration 35, L1 9.99496e-05, Linf 0.00647746, total time[s] 0.105386 +Converged at iteration 24, L1 7.66193e-05, Linf 0.00283844, total time[s] 0.079374 +Converged at iteration 30, L1 8.78161e-05, Linf 0.00591329, total time[s] 0.083261 +Converged at iteration 26, L1 6.97541e-05, Linf 0.00682662, total time[s] 0.066986 +Converged at iteration 22, L1 5.90951e-05, Linf 0.00439006, total time[s] 0.066247 +Converged at iteration 19, L1 5.73076e-05, Linf 0.00402373, total time[s] 0.059281 +Converged at iteration 20, L1 7.30654e-05, Linf 0.00563364, total time[s] 0.060672 +Converged at iteration 24, L1 5.87642e-05, Linf 0.0032301, total time[s] 0.069594 +Converged at iteration 24, L1 9.9779e-05, Linf 0.00617927, total time[s] 0.07382 +Converged at iteration 20, L1 8.82558e-05, Linf 0.0061083, total time[s] 0.072574 +Converged at iteration 16, L1 9.6394e-05, Linf 0.0064343, total time[s] 0.060992 +Converged at iteration 31, L1 9.38359e-05, Linf 0.0032582, total time[s] 0.084426 +Converged at iteration 19, L1 9.04889e-05, Linf 0.00600487, total time[s] 0.048643 +Converged at iteration 23, L1 7.31749e-05, Linf 0.00596371, total time[s] 0.059073 +Converged at iteration 26, L1 8.47653e-05, Linf 0.00579117, total time[s] 0.06652 +Converged at iteration 23, L1 5.67007e-05, Linf 0.00605595, total time[s] 0.066738 +Converged at iteration 21, L1 5.73646e-05, Linf 0.00472429, total time[s] 0.060258 +Converged at iteration 23, L1 7.4015e-05, Linf 0.00250323, total time[s] 0.061039 +Converged at iteration 25, L1 8.77773e-05, Linf 0.00348826, total time[s] 0.068893 +Converged at iteration 28, L1 8.5851e-05, Linf 0.00458502, total time[s] 0.078449 +Converged at iteration 29, L1 8.98419e-05, Linf 0.00656814, total time[s] 0.084134 +Converged at iteration 27, L1 8.95683e-05, Linf 0.003878, total time[s] 0.082653 +Converged at iteration 29, L1 8.86524e-05, Linf 0.00423238, total time[s] 0.073508 +Converged at iteration 29, L1 9.5181e-05, Linf 0.00282449, total time[s] 0.073074 +Converged at iteration 28, L1 8.04369e-05, Linf 0.00232839, total time[s] 0.072451 +Converged at iteration 32, L1 8.36407e-05, Linf 0.00670212, total time[s] 0.080388 +Converged at iteration 27, L1 9.54865e-05, Linf 0.00555362, total time[s] 0.069041 +Converged at iteration 25, L1 6.46929e-05, Linf 0.00206473, total time[s] 0.067465 +Converged at iteration 23, L1 8.23587e-05, Linf 0.00263422, total time[s] 0.060043 +Converged at iteration 39, L1 6.17328e-05, Linf 0.00631359, total time[s] 0.101494 +Converged at iteration 35, L1 8.85361e-05, Linf 0.00645701, total time[s] 0.109567 +Converged at iteration 24, L1 7.92036e-05, Linf 0.00287658, total time[s] 0.078577 +Converged at iteration 30, L1 8.39142e-05, Linf 0.00582315, total time[s] 0.082427 +Converged at iteration 26, L1 7.53542e-05, Linf 0.00737093, total time[s] 0.074547 +Converged at iteration 22, L1 7.68921e-05, Linf 0.0053947, total time[s] 0.059939 +Converged at iteration 19, L1 5.82487e-05, Linf 0.00407607, total time[s] 0.082835 +Converged at iteration 20, L1 6.97629e-05, Linf 0.00537389, total time[s] 0.069021 +Converged at iteration 24, L1 5.57791e-05, Linf 0.00313758, total time[s] 0.086713 +Converged at iteration 25, L1 5.61957e-05, Linf 0.00523271, total time[s] 0.079021 +Converged at iteration 20, L1 9.69184e-05, Linf 0.00626036, total time[s] 0.091118 +Converged at iteration 16, L1 9.75788e-05, Linf 0.00666068, total time[s] 0.066315 +Converged at iteration 31, L1 8.85226e-05, Linf 0.00331527, total time[s] 0.108683 +Converged at iteration 19, L1 8.69855e-05, Linf 0.0058139, total time[s] 0.058342 +Converged at iteration 23, L1 7.11148e-05, Linf 0.00565183, total time[s] 0.077833 +Converged at iteration 26, L1 8.57693e-05, Linf 0.00572105, total time[s] 0.077512 +Converged at iteration 23, L1 5.65665e-05, Linf 0.00609712, total time[s] 0.06859 +Converged at iteration 21, L1 6.19841e-05, Linf 0.00472653, total time[s] 0.069099 +Converged at iteration 23, L1 7.39479e-05, Linf 0.00231216, total time[s] 0.061969 +Converged at iteration 25, L1 8.73479e-05, Linf 0.00340807, total time[s] 0.072092 +Converged at iteration 28, L1 8.90901e-05, Linf 0.00489145, total time[s] 0.101556 +Converged at iteration 29, L1 9.36646e-05, Linf 0.00665574, total time[s] 0.093971 +Converged at iteration 27, L1 9.27972e-05, Linf 0.00386547, total time[s] 0.082472 +Converged at iteration 29, L1 9.05797e-05, Linf 0.00436726, total time[s] 0.084065 +Converged at iteration 29, L1 9.67194e-05, Linf 0.0028651, total time[s] 0.078671 +Converged at iteration 28, L1 8.15976e-05, Linf 0.00228525, total time[s] 0.085342 +Converged at iteration 32, L1 7.77298e-05, Linf 0.00651397, total time[s] 0.086131 +Converged at iteration 28, L1 6.09981e-05, Linf 0.00517991, total time[s] 0.094125 +Converged at iteration 25, L1 6.90239e-05, Linf 0.00273182, total time[s] 0.075242 +Converged at iteration 23, L1 8.62298e-05, Linf 0.00256745, total time[s] 0.078422 +Converged at iteration 39, L1 5.62685e-05, Linf 0.00626268, total time[s] 0.356181 +Converged at iteration 35, L1 8.09279e-05, Linf 0.00631206, total time[s] 0.084139 +Converged at iteration 24, L1 8.38605e-05, Linf 0.00298927, total time[s] 0.062233 +Converged at iteration 30, L1 7.7816e-05, Linf 0.00571193, total time[s] 0.097251 +Converged at iteration 26, L1 8.06874e-05, Linf 0.00796511, total time[s] 0.076599 +Converged at iteration 22, L1 9.91005e-05, Linf 0.00651437, total time[s] 0.058884 +Converged at iteration 19, L1 6.097e-05, Linf 0.00423943, total time[s] 0.050917 +Converged at iteration 20, L1 6.70032e-05, Linf 0.00485958, total time[s] 0.053043 +Converged at iteration 24, L1 5.36559e-05, Linf 0.00309763, total time[s] 0.083307 +Converged at iteration 25, L1 6.09316e-05, Linf 0.00553479, total time[s] 0.076113 +Converged at iteration 21, L1 5.36349e-05, Linf 0.00530118, total time[s] 0.092828 +Converged at iteration 16, L1 9.83973e-05, Linf 0.00678594, total time[s] 0.079987 +Converged at iteration 31, L1 8.46071e-05, Linf 0.00331257, total time[s] 0.104132 +Converged at iteration 19, L1 8.03304e-05, Linf 0.00554075, total time[s] 0.049449 +Converged at iteration 23, L1 6.86785e-05, Linf 0.00530231, total time[s] 0.059457 +Converged at iteration 26, L1 8.79496e-05, Linf 0.0056156, total time[s] 0.06709 +Converged at iteration 23, L1 5.76014e-05, Linf 0.00613733, total time[s] 0.060043 +Converged at iteration 21, L1 6.82115e-05, Linf 0.0046473, total time[s] 0.053333 +Converged at iteration 23, L1 7.18485e-05, Linf 0.00213653, total time[s] 0.057845 +Converged at iteration 25, L1 8.81883e-05, Linf 0.00330145, total time[s] 0.065559 +Converged at iteration 28, L1 9.23724e-05, Linf 0.0052235, total time[s] 0.120338 +Converged at iteration 29, L1 9.84409e-05, Linf 0.00677052, total time[s] 0.106451 +Converged at iteration 27, L1 9.63274e-05, Linf 0.00368085, total time[s] 0.091144 +Converged at iteration 29, L1 9.39531e-05, Linf 0.00447143, total time[s] 0.081577 +Converged at iteration 29, L1 9.71383e-05, Linf 0.00291269, total time[s] 0.074414 +Converged at iteration 28, L1 8.25292e-05, Linf 0.00224285, total time[s] 0.071764 +Converged at iteration 32, L1 7.17544e-05, Linf 0.00645651, total time[s] 0.079276 +Converged at iteration 28, L1 6.24321e-05, Linf 0.00573759, total time[s] 0.07138 +Converged at iteration 25, L1 7.54914e-05, Linf 0.00344867, total time[s] 0.074453 +Converged at iteration 23, L1 9.02861e-05, Linf 0.00252161, total time[s] 0.06035 +Converged at iteration 38, L1 9.91863e-05, Linf 0.00723736, total time[s] 0.099191 +Converged at iteration 35, L1 6.78293e-05, Linf 0.00620549, total time[s] 0.090504 +Converged at iteration 24, L1 8.79267e-05, Linf 0.00314247, total time[s] 0.061985 +Converged at iteration 30, L1 7.208e-05, Linf 0.00562884, total time[s] 0.079551 +Converged at iteration 26, L1 8.58881e-05, Linf 0.00853357, total time[s] 0.073751 +Converged at iteration 23, L1 6.90269e-05, Linf 0.00637789, total time[s] 0.086089 +Converged at iteration 19, L1 6.44522e-05, Linf 0.00432772, total time[s] 0.05303 +Converged at iteration 20, L1 6.43367e-05, Linf 0.00425904, total time[s] 0.053544 +Converged at iteration 23, L1 9.89054e-05, Linf 0.00450759, total time[s] 0.100459 +Converged at iteration 25, L1 6.38865e-05, Linf 0.00581092, total time[s] 0.066793 +Converged at iteration 21, L1 5.84115e-05, Linf 0.00553337, total time[s] 0.056333 +Converged at iteration 16, L1 9.93973e-05, Linf 0.00684008, total time[s] 0.053838 +Converged at iteration 31, L1 8.07973e-05, Linf 0.00324477, total time[s] 0.080175 +Converged at iteration 19, L1 7.29531e-05, Linf 0.00511303, total time[s] 0.055633 +Converged at iteration 23, L1 6.48605e-05, Linf 0.00491979, total time[s] 0.06192 +Converged at iteration 26, L1 8.87548e-05, Linf 0.00550395, total time[s] 0.066716 +Converged at iteration 23, L1 5.89763e-05, Linf 0.00618106, total time[s] 0.058124 +Converged at iteration 21, L1 7.44048e-05, Linf 0.0044914, total time[s] 0.053768 +Converged at iteration 23, L1 7.00617e-05, Linf 0.0019504, total time[s] 0.059495 +Converged at iteration 25, L1 8.83349e-05, Linf 0.00325493, total time[s] 0.077249 +Converged at iteration 28, L1 9.54373e-05, Linf 0.00558683, total time[s] 0.075188 +Converged at iteration 30, L1 5.13907e-05, Linf 0.00431776, total time[s] 0.079986 +Converged at iteration 27, L1 9.8405e-05, Linf 0.0036323, total time[s] 0.072877 +Converged at iteration 29, L1 9.83707e-05, Linf 0.00461354, total time[s] 0.073686 +Converged at iteration 29, L1 9.72516e-05, Linf 0.00291414, total time[s] 0.073471 +Converged at iteration 28, L1 8.43266e-05, Linf 0.00221236, total time[s] 0.070716 +Converged at iteration 32, L1 6.21641e-05, Linf 0.00625434, total time[s] 0.081662 +Converged at iteration 28, L1 6.92307e-05, Linf 0.0063807, total time[s] 0.077217 +Converged at iteration 25, L1 8.44771e-05, Linf 0.00420374, total time[s] 0.065016 +Converged at iteration 23, L1 9.55824e-05, Linf 0.00265326, total time[s] 0.059258 +Converged at iteration 38, L1 8.98204e-05, Linf 0.00709171, total time[s] 0.116012 +Converged at iteration 35, L1 5.49513e-05, Linf 0.00582093, total time[s] 0.090591 +Converged at iteration 24, L1 9.1127e-05, Linf 0.00326092, total time[s] 0.061875 +Converged at iteration 30, L1 6.65326e-05, Linf 0.00554252, total time[s] 0.075628 +Converged at iteration 26, L1 9.2033e-05, Linf 0.00911568, total time[s] 0.06896 +Converged at iteration 23, L1 8.56787e-05, Linf 0.00737124, total time[s] 0.060496 +Converged at iteration 19, L1 6.85412e-05, Linf 0.00453461, total time[s] 0.052689 +Converged at iteration 20, L1 6.15471e-05, Linf 0.00407913, total time[s] 0.053638 +Converged at iteration 23, L1 9.40854e-05, Linf 0.0045284, total time[s] 0.063547 +Converged at iteration 25, L1 6.8066e-05, Linf 0.00606651, total time[s] 0.072461 +Converged at iteration 21, L1 6.35405e-05, Linf 0.00569061, total time[s] 0.054902 +Converged at iteration 17, L1 5.47912e-05, Linf 0.00482613, total time[s] 0.046487 +Converged at iteration 31, L1 7.77553e-05, Linf 0.00336245, total time[s] 0.079758 +Converged at iteration 19, L1 6.34992e-05, Linf 0.00485098, total time[s] 0.054893 +Converged at iteration 22, L1 9.34214e-05, Linf 0.00526684, total time[s] 0.057695 +Converged at iteration 26, L1 9.11932e-05, Linf 0.00540566, total time[s] 0.065374 +Converged at iteration 23, L1 6.21814e-05, Linf 0.00626472, total time[s] 0.059519 +Converged at iteration 21, L1 8.03751e-05, Linf 0.00443586, total time[s] 0.054196 +Converged at iteration 23, L1 6.74334e-05, Linf 0.00169111, total time[s] 0.059821 +Converged at iteration 25, L1 8.72086e-05, Linf 0.00312374, total time[s] 0.065068 +Converged at iteration 28, L1 9.90917e-05, Linf 0.00596697, total time[s] 0.072145 +Converged at iteration 30, L1 5.41309e-05, Linf 0.00423232, total time[s] 0.077141 +Converged at iteration 28, L1 6.06432e-05, Linf 0.00419151, total time[s] 0.070782 +Converged at iteration 30, L1 6.29935e-05, Linf 0.00393716, total time[s] 0.076402 +Converged at iteration 29, L1 9.74666e-05, Linf 0.00290301, total time[s] 0.085298 +Converged at iteration 28, L1 8.76944e-05, Linf 0.002213, total time[s] 0.071019 +Converged at iteration 31, L1 9.50458e-05, Linf 0.00753135, total time[s] 0.078236 +Converged at iteration 28, L1 7.82338e-05, Linf 0.00703461, total time[s] 0.071798 +Converged at iteration 25, L1 9.54514e-05, Linf 0.00498285, total time[s] 0.102613 +Converged at iteration 24, L1 5.67798e-05, Linf 0.0019894, total time[s] 0.061734 +Converged at iteration 38, L1 7.89637e-05, Linf 0.00685222, total time[s] 0.10354 +Converged at iteration 34, L1 9.13417e-05, Linf 0.00702209, total time[s] 0.090542 +Converged at iteration 24, L1 9.31144e-05, Linf 0.00335822, total time[s] 0.061258 +Converged at iteration 30, L1 6.26944e-05, Linf 0.00548937, total time[s] 0.07677 +Converged at iteration 26, L1 9.87834e-05, Linf 0.00968617, total time[s] 0.074269 +Converged at iteration 24, L1 5.34335e-05, Linf 0.00683603, total time[s] 0.061522 +Converged at iteration 19, L1 7.41576e-05, Linf 0.0050461, total time[s] 0.057828 +Converged at iteration 20, L1 5.80441e-05, Linf 0.00391038, total time[s] 0.053882 +Converged at iteration 23, L1 9.17758e-05, Linf 0.00455494, total time[s] 0.07071 +Converged at iteration 25, L1 7.31156e-05, Linf 0.00632182, total time[s] 0.066315 +Converged at iteration 21, L1 6.80898e-05, Linf 0.0057683, total time[s] 0.095951 +Converged at iteration 17, L1 5.5742e-05, Linf 0.00497374, total time[s] 0.063258 +Converged at iteration 31, L1 7.57499e-05, Linf 0.00347399, total time[s] 0.080485 +Converged at iteration 18, L1 9.05698e-05, Linf 0.00570959, total time[s] 0.048438 +Converged at iteration 22, L1 8.37575e-05, Linf 0.00482172, total time[s] 0.062429 +Converged at iteration 26, L1 9.51275e-05, Linf 0.00530997, total time[s] 0.086497 +Converged at iteration 23, L1 6.30069e-05, Linf 0.00637635, total time[s] 0.059205 +Converged at iteration 21, L1 8.66739e-05, Linf 0.00430788, total time[s] 0.054435 +Converged at iteration 23, L1 6.45417e-05, Linf 0.00173527, total time[s] 0.059056 +Converged at iteration 25, L1 8.42402e-05, Linf 0.00293012, total time[s] 0.064036 +Converged at iteration 29, L1 6.66439e-05, Linf 0.00408368, total time[s] 0.074209 +Converged at iteration 30, L1 5.72841e-05, Linf 0.00428082, total time[s] 0.078131 +Converged at iteration 28, L1 6.31533e-05, Linf 0.00419869, total time[s] 0.072318 +Converged at iteration 30, L1 6.50186e-05, Linf 0.00401891, total time[s] 0.077354 +Converged at iteration 29, L1 9.78403e-05, Linf 0.00290276, total time[s] 0.076439 +Converged at iteration 28, L1 9.21458e-05, Linf 0.00216123, total time[s] 0.070571 +Converged at iteration 31, L1 8.58183e-05, Linf 0.00741867, total time[s] 0.078066 +Converged at iteration 28, L1 8.70488e-05, Linf 0.00766801, total time[s] 0.071882 +Converged at iteration 26, L1 6.20865e-05, Linf 0.00449471, total time[s] 0.06637 +Converged at iteration 24, L1 5.93639e-05, Linf 0.0021332, total time[s] 0.061547 +Converged at iteration 38, L1 6.87137e-05, Linf 0.00656061, total time[s] 0.100546 +Converged at iteration 34, L1 8.18956e-05, Linf 0.00677973, total time[s] 0.087619 +Converged at iteration 24, L1 9.56904e-05, Linf 0.00343671, total time[s] 0.061922 +Converged at iteration 30, L1 6.02991e-05, Linf 0.00539964, total time[s] 0.075794 +Converged at iteration 27, L1 5.29705e-05, Linf 0.00804944, total time[s] 0.068104 +Converged at iteration 24, L1 6.27623e-05, Linf 0.00768796, total time[s] 0.061676 +Converged at iteration 19, L1 8.00901e-05, Linf 0.00556125, total time[s] 0.050607 +Converged at iteration 20, L1 5.44359e-05, Linf 0.00377096, total time[s] 0.057761 +Converged at iteration 23, L1 9.13964e-05, Linf 0.00460891, total time[s] 0.074605 +Converged at iteration 25, L1 7.46183e-05, Linf 0.0065032, total time[s] 0.077427 +Converged at iteration 21, L1 7.20766e-05, Linf 0.00593998, total time[s] 0.060654 +Converged at iteration 17, L1 5.62224e-05, Linf 0.00504388, total time[s] 0.106826 +Converged at iteration 31, L1 7.44061e-05, Linf 0.00358499, total time[s] 0.085532 +Converged at iteration 18, L1 7.58295e-05, Linf 0.00531384, total time[s] 0.050008 +Converged at iteration 22, L1 7.33049e-05, Linf 0.00433004, total time[s] 0.057594 +Converged at iteration 26, L1 9.88433e-05, Linf 0.00524752, total time[s] 0.067086 +Converged at iteration 23, L1 6.61542e-05, Linf 0.00649058, total time[s] 0.061017 +Converged at iteration 21, L1 9.35036e-05, Linf 0.00412429, total time[s] 0.054129 +Converged at iteration 22, L1 9.73672e-05, Linf 0.0026909, total time[s] 0.056914 +Converged at iteration 25, L1 8.03643e-05, Linf 0.00270623, total time[s] 0.073796 +Converged at iteration 29, L1 6.89173e-05, Linf 0.00441033, total time[s] 0.112452 +Converged at iteration 30, L1 6.05062e-05, Linf 0.00435084, total time[s] 0.077409 +Converged at iteration 28, L1 6.47696e-05, Linf 0.00419157, total time[s] 0.070117 +Converged at iteration 30, L1 6.66682e-05, Linf 0.00415084, total time[s] 0.07607 +Converged at iteration 29, L1 9.85552e-05, Linf 0.00293697, total time[s] 0.073432 +Converged at iteration 28, L1 9.7885e-05, Linf 0.00208245, total time[s] 0.074214 +Converged at iteration 31, L1 8.0722e-05, Linf 0.00728461, total time[s] 0.078073 +Converged at iteration 28, L1 9.57071e-05, Linf 0.0082927, total time[s] 0.071372 +Converged at iteration 26, L1 7.03985e-05, Linf 0.0051612, total time[s] 0.067535 +Converged at iteration 24, L1 6.28683e-05, Linf 0.00226039, total time[s] 0.062163 +Converged at iteration 38, L1 6.18729e-05, Linf 0.00645139, total time[s] 0.112718 +Converged at iteration 34, L1 7.735e-05, Linf 0.00665557, total time[s] 0.099353 +Converged at iteration 24, L1 9.71171e-05, Linf 0.00349067, total time[s] 0.064885 +Converged at iteration 29, L1 9.99641e-05, Linf 0.00687253, total time[s] 0.074875 +Converged at iteration 27, L1 5.49715e-05, Linf 0.00859209, total time[s] 0.068495 +Converged at iteration 24, L1 7.24765e-05, Linf 0.00852787, total time[s] 0.064992 +Converged at iteration 19, L1 8.6272e-05, Linf 0.00496952, total time[s] 0.052181 +Converged at iteration 20, L1 5.14701e-05, Linf 0.00345587, total time[s] 0.054896 +Converged at iteration 23, L1 9.05319e-05, Linf 0.00465837, total time[s] 0.061632 +Converged at iteration 25, L1 7.76826e-05, Linf 0.00670948, total time[s] 0.066941 +Converged at iteration 21, L1 7.63165e-05, Linf 0.00603861, total time[s] 0.106827 +Converged at iteration 17, L1 5.65199e-05, Linf 0.0050497, total time[s] 0.080235 +Converged at iteration 31, L1 7.2655e-05, Linf 0.00368968, total time[s] 0.095725 +Converged at iteration 17, L1 9.9839e-05, Linf 0.00660817, total time[s] 0.047185 +Converged at iteration 21, L1 9.57113e-05, Linf 0.00451094, total time[s] 0.057322 +Converged at iteration 27, L1 5.29994e-05, Linf 0.00245742, total time[s] 0.069479 +Converged at iteration 23, L1 6.99395e-05, Linf 0.00660943, total time[s] 0.061561 +Converged at iteration 22, L1 5.3785e-05, Linf 0.0030438, total time[s] 0.05742 +Converged at iteration 22, L1 9.05134e-05, Linf 0.00275604, total time[s] 0.058194 +Converged at iteration 25, L1 7.77018e-05, Linf 0.00248233, total time[s] 0.064273 +Converged at iteration 29, L1 7.03399e-05, Linf 0.00470572, total time[s] 0.073877 +Converged at iteration 30, L1 6.4271e-05, Linf 0.00444077, total time[s] 0.075864 +Converged at iteration 28, L1 6.63567e-05, Linf 0.00358311, total time[s] 0.070907 +Converged at iteration 30, L1 6.89351e-05, Linf 0.00429583, total time[s] 0.076095 +Converged at iteration 29, L1 9.85714e-05, Linf 0.00294307, total time[s] 0.07516 +Converged at iteration 29, L1 6.14785e-05, Linf 0.00136374, total time[s] 0.073808 +Converged at iteration 31, L1 7.28442e-05, Linf 0.00710168, total time[s] 0.078666 +Converged at iteration 29, L1 5.17651e-05, Linf 0.00723706, total time[s] 0.073731 +Converged at iteration 26, L1 7.92791e-05, Linf 0.00584661, total time[s] 0.066716 +Converged at iteration 24, L1 6.65071e-05, Linf 0.00237952, total time[s] 0.066677 +Converged at iteration 38, L1 5.75423e-05, Linf 0.00621749, total time[s] 0.095527 +Converged at iteration 34, L1 7.40332e-05, Linf 0.00639774, total time[s] 0.086726 +Converged at iteration 24, L1 9.80108e-05, Linf 0.00352911, total time[s] 0.062606 +Converged at iteration 29, L1 9.6676e-05, Linf 0.00678018, total time[s] 0.073946 +Converged at iteration 27, L1 5.77336e-05, Linf 0.00892966, total time[s] 0.069196 +Converged at iteration 24, L1 8.16878e-05, Linf 0.00937383, total time[s] 0.063136 +Converged at iteration 19, L1 9.04587e-05, Linf 0.00480707, total time[s] 0.05667 +Converged at iteration 20, L1 4.88746e-05, Linf 0.00336366, total time[s] 0.061666 +Converged at iteration 23, L1 8.97656e-05, Linf 0.004717, total time[s] 0.11992 +Converged at iteration 25, L1 8.13239e-05, Linf 0.00684167, total time[s] 0.108936 +Converged at iteration 21, L1 8.18713e-05, Linf 0.00612441, total time[s] 0.08007 +Converged at iteration 17, L1 5.67999e-05, Linf 0.00500307, total time[s] 0.062942 +Converged at iteration 31, L1 7.16818e-05, Linf 0.00381446, total time[s] 0.086202 +Converged at iteration 17, L1 7.52564e-05, Linf 0.00593254, total time[s] 0.053013 +Converged at iteration 21, L1 7.88781e-05, Linf 0.00374062, total time[s] 0.082263 +Converged at iteration 27, L1 5.4936e-05, Linf 0.00243153, total time[s] 0.07162 +Converged at iteration 23, L1 7.42268e-05, Linf 0.00673305, total time[s] 0.060805 +Converged at iteration 22, L1 5.78832e-05, Linf 0.0032755, total time[s] 0.059344 +Converged at iteration 22, L1 8.2212e-05, Linf 0.00284886, total time[s] 0.06045 +Converged at iteration 25, L1 7.47516e-05, Linf 0.00229655, total time[s] 0.089258 +Converged at iteration 29, L1 7.13403e-05, Linf 0.00491465, total time[s] 0.086623 +Converged at iteration 30, L1 6.85995e-05, Linf 0.00462955, total time[s] 0.096465 +Converged at iteration 28, L1 6.7543e-05, Linf 0.0035769, total time[s] 0.102764 +Converged at iteration 30, L1 7.16416e-05, Linf 0.00444708, total time[s] 0.090353 +Converged at iteration 29, L1 9.84547e-05, Linf 0.00293662, total time[s] 0.081779 +Converged at iteration 29, L1 6.4209e-05, Linf 0.0013242, total time[s] 0.089099 +Converged at iteration 31, L1 6.48397e-05, Linf 0.00690985, total time[s] 0.117456 +Converged at iteration 29, L1 5.56021e-05, Linf 0.00777366, total time[s] 0.079633 +Converged at iteration 26, L1 8.92047e-05, Linf 0.00657977, total time[s] 0.068884 +Converged at iteration 24, L1 7.06347e-05, Linf 0.00252154, total time[s] 0.065627 +Converged at iteration 38, L1 5.40436e-05, Linf 0.00595302, total time[s] 0.095383 +Converged at iteration 34, L1 7.02336e-05, Linf 0.00612913, total time[s] 0.08828 +Converged at iteration 24, L1 9.90937e-05, Linf 0.00430382, total time[s] 0.076486 +Converged at iteration 29, L1 9.40887e-05, Linf 0.00665136, total time[s] 0.079538 +Converged at iteration 27, L1 6.00673e-05, Linf 0.00937781, total time[s] 0.072017 +Converged at iteration 24, L1 9.12083e-05, Linf 0.0102341, total time[s] 0.075374 +Converged at iteration 19, L1 9.7138e-05, Linf 0.00514679, total time[s] 0.059291 +Converged at iteration 20, L1 4.70743e-05, Linf 0.00336499, total time[s] 0.0547 +Converged at iteration 23, L1 9.04929e-05, Linf 0.00475929, total time[s] 0.067184 +Converged at iteration 25, L1 8.40054e-05, Linf 0.00702901, total time[s] 0.071614 +Converged at iteration 21, L1 8.37358e-05, Linf 0.00594511, total time[s] 0.059924 +Converged at iteration 17, L1 5.68595e-05, Linf 0.00490974, total time[s] 0.047775 +Converged at iteration 31, L1 7.00246e-05, Linf 0.00395941, total time[s] 0.079402 +Converged at iteration 17, L1 5.57733e-05, Linf 0.00523761, total time[s] 0.046939 +Converged at iteration 20, L1 9.39924e-05, Linf 0.003642, total time[s] 0.056868 +Converged at iteration 27, L1 5.81592e-05, Linf 0.00248238, total time[s] 0.070722 +Converged at iteration 23, L1 7.75291e-05, Linf 0.00686445, total time[s] 0.060982 +Converged at iteration 22, L1 6.18735e-05, Linf 0.0035124, total time[s] 0.058119 +Converged at iteration 22, L1 7.74619e-05, Linf 0.00297015, total time[s] 0.057162 +Converged at iteration 25, L1 7.13633e-05, Linf 0.00196225, total time[s] 0.065406 +Converged at iteration 29, L1 7.08053e-05, Linf 0.00502078, total time[s] 0.076348 +Converged at iteration 30, L1 7.22187e-05, Linf 0.00482469, total time[s] 0.084327 +Converged at iteration 28, L1 6.84371e-05, Linf 0.0036283, total time[s] 0.079299 +Converged at iteration 30, L1 7.47933e-05, Linf 0.0046591, total time[s] 0.077274 +Converged at iteration 29, L1 9.96196e-05, Linf 0.00296577, total time[s] 0.074478 +Converged at iteration 29, L1 6.75673e-05, Linf 0.00127904, total time[s] 0.074281 +Converged at iteration 31, L1 5.72375e-05, Linf 0.0067064, total time[s] 0.079791 +Converged at iteration 29, L1 6.02236e-05, Linf 0.00833573, total time[s] 0.075889 +Converged at iteration 27, L1 5.31282e-05, Linf 0.00573824, total time[s] 0.079635 +Converged at iteration 24, L1 7.46356e-05, Linf 0.00260642, total time[s] 0.063837 +Converged at iteration 37, L1 9.60237e-05, Linf 0.00715564, total time[s] 0.10701 +Converged at iteration 34, L1 6.6235e-05, Linf 0.00589367, total time[s] 0.0871 +Converged at iteration 24, L1 9.99409e-05, Linf 0.0036375, total time[s] 0.061189 +Converged at iteration 29, L1 8.89072e-05, Linf 0.00658185, total time[s] 0.072597 +Converged at iteration 27, L1 6.27829e-05, Linf 0.00995808, total time[s] 0.067998 +Converged at iteration 25, L1 4.43267e-05, Linf 0.0090432, total time[s] 0.064699 +Converged at iteration 20, L1 4.14223e-05, Linf 0.00378601, total time[s] 0.052049 +Converged at iteration 20, L1 4.5191e-05, Linf 0.00336551, total time[s] 0.054205 +Converged at iteration 23, L1 9.20162e-05, Linf 0.00479468, total time[s] 0.06899 +Converged at iteration 25, L1 8.79916e-05, Linf 0.00720395, total time[s] 0.067417 +Converged at iteration 21, L1 8.52441e-05, Linf 0.00609314, total time[s] 0.055677 +Converged at iteration 17, L1 5.75094e-05, Linf 0.00476611, total time[s] 0.046132 +Converged at iteration 31, L1 6.80297e-05, Linf 0.00413166, total time[s] 0.077938 +Converged at iteration 16, L1 9.33743e-05, Linf 0.00753651, total time[s] 0.043158 +Converged at iteration 20, L1 6.66055e-05, Linf 0.00283302, total time[s] 0.060314 +Converged at iteration 27, L1 6.08592e-05, Linf 0.00263945, total time[s] 0.079874 +Converged at iteration 23, L1 8.16201e-05, Linf 0.00699017, total time[s] 0.059818 +Converged at iteration 22, L1 6.61193e-05, Linf 0.00324756, total time[s] 0.060942 +Converged at iteration 22, L1 8.21078e-05, Linf 0.00310242, total time[s] 0.057386 +Converged at iteration 25, L1 6.81188e-05, Linf 0.00189813, total time[s] 0.064867 +Converged at iteration 29, L1 7.14791e-05, Linf 0.00505695, total time[s] 0.075867 +Converged at iteration 30, L1 7.63394e-05, Linf 0.00504652, total time[s] 0.084403 +Converged at iteration 28, L1 6.8923e-05, Linf 0.00373295, total time[s] 0.078196 +Converged at iteration 30, L1 7.7485e-05, Linf 0.00471716, total time[s] 0.074401 +Converged at iteration 30, L1 6.33487e-05, Linf 0.00227838, total time[s] 0.074596 +Converged at iteration 29, L1 7.19949e-05, Linf 0.00127217, total time[s] 0.073276 +Converged at iteration 30, L1 9.51049e-05, Linf 0.00840033, total time[s] 0.086895 +Converged at iteration 29, L1 6.53911e-05, Linf 0.00895644, total time[s] 0.090252 +Converged at iteration 27, L1 6.06771e-05, Linf 0.00644502, total time[s] 0.101905 +Converged at iteration 24, L1 8.00028e-05, Linf 0.00265911, total time[s] 0.101888 +Converged at iteration 37, L1 9.03514e-05, Linf 0.00697761, total time[s] 0.140926 +Converged at iteration 34, L1 6.15006e-05, Linf 0.0055834, total time[s] 0.101423 +Converged at iteration 25, L1 4.38885e-05, Linf 0.0021006, total time[s] 0.073412 +Converged at iteration 29, L1 8.77837e-05, Linf 0.0115712, total time[s] 0.106043 +Converged at iteration 27, L1 6.63697e-05, Linf 0.0102522, total time[s] 0.084454 +Converged at iteration 25, L1 4.95256e-05, Linf 0.009772, total time[s] 0.07027 +Converged at iteration 20, L1 4.51268e-05, Linf 0.00405262, total time[s] 0.094371 +Converged at iteration 20, L1 4.36449e-05, Linf 0.00338293, total time[s] 0.060328 +Converged at iteration 23, L1 9.25255e-05, Linf 0.00486272, total time[s] 0.080799 +Converged at iteration 44, L1 9.37544e-05, Linf 0.000559543, total time[s] 0.146209 +Converged at iteration 21, L1 8.60018e-05, Linf 0.00601514, total time[s] 0.065052 +Converged at iteration 17, L1 5.87373e-05, Linf 0.0045796, total time[s] 0.047532 +Converged at iteration 31, L1 6.61856e-05, Linf 0.00433169, total time[s] 0.077821 +Converged at iteration 16, L1 9.88549e-05, Linf 0.00668267, total time[s] 0.042695 +Converged at iteration 18, L1 9.97769e-05, Linf 0.00398018, total time[s] 0.047391 +Converged at iteration 27, L1 6.38657e-05, Linf 0.00281652, total time[s] 0.068342 +Converged at iteration 23, L1 8.57728e-05, Linf 0.00716541, total time[s] 0.061083 +Converged at iteration 22, L1 7.11972e-05, Linf 0.00358638, total time[s] 0.059228 +Converged at iteration 22, L1 8.92703e-05, Linf 0.00327932, total time[s] 0.062483 +Converged at iteration 24, L1 9.78771e-05, Linf 0.00196375, total time[s] 0.063693 +Converged at iteration 29, L1 7.21112e-05, Linf 0.00506897, total time[s] 0.074661 +Converged at iteration 30, L1 7.98121e-05, Linf 0.00532937, total time[s] 0.083588 +Converged at iteration 28, L1 6.89464e-05, Linf 0.00370741, total time[s] 0.075174 +Converged at iteration 30, L1 8.161e-05, Linf 0.00496264, total time[s] 0.076544 +Converged at iteration 30, L1 6.51957e-05, Linf 0.00232089, total time[s] 0.078416 +Converged at iteration 29, L1 7.74134e-05, Linf 0.00133667, total time[s] 0.089417 +Converged at iteration 30, L1 8.67312e-05, Linf 0.00835564, total time[s] 0.077977 +Converged at iteration 29, L1 7.1516e-05, Linf 0.00976833, total time[s] 0.075106 +Converged at iteration 27, L1 6.90295e-05, Linf 0.00715418, total time[s] 0.070168 +Converged at iteration 24, L1 8.33098e-05, Linf 0.00284286, total time[s] 0.073915 +Converged at iteration 37, L1 8.57832e-05, Linf 0.00652861, total time[s] 0.117132 +Converged at iteration 34, L1 5.73933e-05, Linf 0.005391, total time[s] 0.112245 +Converged at iteration 25, L1 4.55668e-05, Linf 0.00210737, total time[s] 0.085933 +Converged at iteration 29, L1 7.84782e-05, Linf 0.00639409, total time[s] 0.1007 +Converged at iteration 27, L1 6.62905e-05, Linf 0.0107116, total time[s] 0.08239 +Converged at iteration 25, L1 5.39132e-05, Linf 0.0105216, total time[s] 0.117915 +Converged at iteration 20, L1 4.86945e-05, Linf 0.00421612, total time[s] 0.060303 +Converged at iteration 20, L1 4.20076e-05, Linf 0.00338149, total time[s] 0.081371 +Converged at iteration 23, L1 9.45654e-05, Linf 0.00489175, total time[s] 0.076012 +Converged at iteration 25, L1 8.97943e-05, Linf 0.00747636, total time[s] 0.121979 +Converged at iteration 21, L1 8.63993e-05, Linf 0.00608325, total time[s] 0.075227 +Converged at iteration 17, L1 6.04531e-05, Linf 0.0043883, total time[s] 0.105894 +Converged at iteration 31, L1 6.47935e-05, Linf 0.00456803, total time[s] 0.10556 +Converged at iteration 17, L1 7.75037e-05, Linf 0.00303992, total time[s] 0.054976 +Converged at iteration 18, L1 8.05018e-05, Linf 0.002716, total time[s] 0.047981 +Converged at iteration 27, L1 6.56552e-05, Linf 0.00294407, total time[s] 0.09881 +Converged at iteration 23, L1 9.12772e-05, Linf 0.00738082, total time[s] 0.073584 +Converged at iteration 22, L1 7.46967e-05, Linf 0.00382389, total time[s] 0.087382 +Converged at iteration 22, L1 9.75353e-05, Linf 0.0035561, total time[s] 0.096883 +Converged at iteration 24, L1 9.23752e-05, Linf 0.00161171, total time[s] 0.094985 +Converged at iteration 29, L1 7.24935e-05, Linf 0.0050531, total time[s] 0.083528 +Converged at iteration 30, L1 8.39349e-05, Linf 0.00553403, total time[s] 0.077474 +Converged at iteration 28, L1 6.87078e-05, Linf 0.00336232, total time[s] 0.073741 +Converged at iteration 30, L1 8.53537e-05, Linf 0.00520681, total time[s] 0.083627 +Converged at iteration 30, L1 6.78063e-05, Linf 0.00240049, total time[s] 0.078127 +Converged at iteration 29, L1 8.35955e-05, Linf 0.00150932, total time[s] 0.075192 +Converged at iteration 30, L1 8.05904e-05, Linf 0.00822871, total time[s] 0.077416 +Converged at iteration 29, L1 7.62055e-05, Linf 0.0101751, total time[s] 0.075229 +Converged at iteration 27, L1 7.72891e-05, Linf 0.00777965, total time[s] 0.072442 +Converged at iteration 24, L1 8.79665e-05, Linf 0.00294066, total time[s] 0.063565 +Converged at iteration 37, L1 7.88741e-05, Linf 0.00622971, total time[s] 0.100518 +Converged at iteration 34, L1 5.19639e-05, Linf 0.00515513, total time[s] 0.106628 +Converged at iteration 25, L1 4.75019e-05, Linf 0.002075, total time[s] 0.071586 +Converged at iteration 29, L1 6.5173e-05, Linf 0.00617532, total time[s] 0.075777 +Converged at iteration 27, L1 7.03197e-05, Linf 0.011405, total time[s] 0.070237 +Converged at iteration 25, L1 6.14576e-05, Linf 0.0116033, total time[s] 0.070503 +Converged at iteration 20, L1 5.24352e-05, Linf 0.00442786, total time[s] 0.066027 +Converged at iteration 19, L1 9.32607e-05, Linf 0.00510007, total time[s] 0.094447 +Converged at iteration 23, L1 9.72908e-05, Linf 0.00488421, total time[s] 0.084526 +Converged at iteration 25, L1 8.1705e-05, Linf 0.00771446, total time[s] 0.079125 +Converged at iteration 21, L1 8.63005e-05, Linf 0.00601167, total time[s] 0.065172 +Converged at iteration 17, L1 6.28956e-05, Linf 0.00414208, total time[s] 0.066641 +Converged at iteration 31, L1 6.14141e-05, Linf 0.0048402, total time[s] 0.089657 +Converged at iteration 18, L1 7.13154e-05, Linf 0.00151297, total time[s] 0.051805 +Converged at iteration 19, L1 7.155e-05, Linf 0.00160798, total time[s] 0.049963 +Converged at iteration 27, L1 7.08829e-05, Linf 0.00312218, total time[s] 0.069447 +Converged at iteration 23, L1 9.92393e-05, Linf 0.00785121, total time[s] 0.06033 +Converged at iteration 22, L1 7.88391e-05, Linf 0.00428247, total time[s] 0.058456 +Converged at iteration 23, L1 6.5061e-05, Linf 0.00280736, total time[s] 0.060772 +Converged at iteration 24, L1 8.4785e-05, Linf 0.00162646, total time[s] 0.062886 +Converged at iteration 29, L1 7.27339e-05, Linf 0.00504987, total time[s] 0.073809 +Converged at iteration 30, L1 8.95127e-05, Linf 0.00580753, total time[s] 0.076133 +Converged at iteration 28, L1 6.85343e-05, Linf 0.00311564, total time[s] 0.072671 +Converged at iteration 30, L1 8.94875e-05, Linf 0.00547856, total time[s] 0.090153 +Converged at iteration 30, L1 7.11542e-05, Linf 0.002474, total time[s] 0.08327 +Converged at iteration 29, L1 9.16742e-05, Linf 0.00172313, total time[s] 0.075394 +Converged at iteration 30, L1 7.27008e-05, Linf 0.00800625, total time[s] 0.081924 +Converged at iteration 29, L1 8.37095e-05, Linf 0.0109882, total time[s] 0.074222 +Converged at iteration 27, L1 8.96796e-05, Linf 0.00878232, total time[s] 0.073141 +Converged at iteration 24, L1 9.24443e-05, Linf 0.00308821, total time[s] 0.063364 +Converged at iteration 37, L1 7.39351e-05, Linf 0.00604646, total time[s] 0.105849 +Converged at iteration 33, L1 9.93362e-05, Linf 0.00629712, total time[s] 0.107607 +Converged at iteration 25, L1 4.79558e-05, Linf 0.00205272, total time[s] 0.069272 +Converged at iteration 29, L1 5.88976e-05, Linf 0.00596194, total time[s] 0.075033 +Converged at iteration 27, L1 7.37419e-05, Linf 0.0118849, total time[s] 0.074502 +Converged at iteration 25, L1 6.70274e-05, Linf 0.0122514, total time[s] 0.06514 +Converged at iteration 20, L1 5.53464e-05, Linf 0.00458775, total time[s] 0.062662 +Converged at iteration 19, L1 8.71405e-05, Linf 0.00511662, total time[s] 0.065707 +Converged at iteration 24, L1 5.33951e-05, Linf 0.00302964, total time[s] 0.088781 +Converged at iteration 25, L1 7.43114e-05, Linf 0.00787643, total time[s] 0.07222 +Converged at iteration 21, L1 8.62273e-05, Linf 0.00596124, total time[s] 0.065956 +Converged at iteration 17, L1 6.60879e-05, Linf 0.00390487, total time[s] 0.051378 +Converged at iteration 31, L1 5.91929e-05, Linf 0.0050715, total time[s] 0.095668 +Converged at iteration 18, L1 8.75696e-05, Linf 0.00198053, total time[s] 0.10826 +Converged at iteration 20, L1 6.40222e-05, Linf 0.00200962, total time[s] 0.055996 +Converged at iteration 27, L1 7.52267e-05, Linf 0.00327668, total time[s] 0.074891 +Converged at iteration 24, L1 4.85792e-05, Linf 0.00379001, total time[s] 0.075938 +Converged at iteration 22, L1 8.46251e-05, Linf 0.00460742, total time[s] 0.064766 +Converged at iteration 23, L1 7.18726e-05, Linf 0.00281974, total time[s] 0.061972 +Converged at iteration 24, L1 7.91146e-05, Linf 0.00164303, total time[s] 0.068672 +Converged at iteration 29, L1 7.26189e-05, Linf 0.0050997, total time[s] 0.091075 +Converged at iteration 30, L1 9.4965e-05, Linf 0.00609037, total time[s] 0.093163 +Converged at iteration 28, L1 6.96405e-05, Linf 0.00292506, total time[s] 0.08324 +Converged at iteration 30, L1 9.3741e-05, Linf 0.00570993, total time[s] 0.078108 +Converged at iteration 30, L1 7.35435e-05, Linf 0.00253015, total time[s] 0.086392 +Converged at iteration 29, L1 9.97632e-05, Linf 0.0019207, total time[s] 0.074427 +Converged at iteration 30, L1 6.7598e-05, Linf 0.00795436, total time[s] 0.07737 +Converged at iteration 29, L1 8.98337e-05, Linf 0.0118278, total time[s] 0.07777 +Converged at iteration 27, L1 9.95213e-05, Linf 0.0093398, total time[s] 0.070308 +Converged at iteration 24, L1 9.65916e-05, Linf 0.00321463, total time[s] 0.067404 +Converged at iteration 37, L1 6.86033e-05, Linf 0.00587839, total time[s] 0.097594 +Converged at iteration 33, L1 9.39938e-05, Linf 0.00605587, total time[s] 0.08971 +Converged at iteration 25, L1 4.96719e-05, Linf 0.00204514, total time[s] 0.071547 +Converged at iteration 28, L1 9.84427e-05, Linf 0.00780416, total time[s] 0.078071 +Converged at iteration 27, L1 7.91345e-05, Linf 0.012352, total time[s] 0.070759 +Converged at iteration 25, L1 7.34395e-05, Linf 0.0131468, total time[s] 0.06591 +Converged at iteration 20, L1 5.87652e-05, Linf 0.00496902, total time[s] 0.056267 +Converged at iteration 19, L1 8.10154e-05, Linf 0.00514312, total time[s] 0.06452 +Converged at iteration 24, L1 5.35147e-05, Linf 0.0030192, total time[s] 0.083005 +Converged at iteration 25, L1 6.41342e-05, Linf 0.00799513, total time[s] 0.071379 +Converged at iteration 21, L1 8.56197e-05, Linf 0.00596428, total time[s] 0.067629 +Converged at iteration 17, L1 6.92222e-05, Linf 0.00358461, total time[s] 0.058747 +Converged at iteration 31, L1 5.74911e-05, Linf 0.00531799, total time[s] 0.10161 +Converged at iteration 19, L1 6.66749e-05, Linf 0.00247882, total time[s] 0.050802 +Converged at iteration 20, L1 8.63306e-05, Linf 0.00276545, total time[s] 0.093171 +Converged at iteration 27, L1 7.57928e-05, Linf 0.00343593, total time[s] 0.078556 +Converged at iteration 24, L1 5.14153e-05, Linf 0.003973, total time[s] 0.103249 +Converged at iteration 22, L1 8.62765e-05, Linf 0.00484937, total time[s] 0.066458 +Converged at iteration 23, L1 7.85658e-05, Linf 0.00286245, total time[s] 0.066282 +Converged at iteration 24, L1 7.3369e-05, Linf 0.00164913, total time[s] 0.104398 +Converged at iteration 29, L1 7.25941e-05, Linf 0.00515989, total time[s] 0.090875 +Converged at iteration 30, L1 9.83861e-05, Linf 0.00637217, total time[s] 0.07901 +Converged at iteration 28, L1 6.68779e-05, Linf 0.00297739, total time[s] 0.082107 +Converged at iteration 30, L1 9.60114e-05, Linf 0.00591118, total time[s] 0.089134 +Converged at iteration 30, L1 7.60441e-05, Linf 0.0025894, total time[s] 0.082656 +Converged at iteration 30, L1 5.39918e-05, Linf 0.00117638, total time[s] 0.079821 +Converged at iteration 30, L1 6.34527e-05, Linf 0.00763781, total time[s] 0.077644 +Converged at iteration 29, L1 9.67474e-05, Linf 0.01239, total time[s] 0.075277 +Converged at iteration 28, L1 5.19751e-05, Linf 0.0079503, total time[s] 0.074506 +Converged at iteration 24, L1 9.95748e-05, Linf 0.00336563, total time[s] 0.065901 +Converged at iteration 37, L1 6.18815e-05, Linf 0.0056905, total time[s] 0.095969 +Converged at iteration 33, L1 8.77768e-05, Linf 0.00573543, total time[s] 0.091692 +Converged at iteration 25, L1 5.06919e-05, Linf 0.00210652, total time[s] 0.068494 +Converged at iteration 28, L1 8.72944e-05, Linf 0.00757596, total time[s] 0.076012 +Converged at iteration 27, L1 8.18039e-05, Linf 0.0129114, total time[s] 0.071596 +Converged at iteration 25, L1 8.16316e-05, Linf 0.0141716, total time[s] 0.068245 +Converged at iteration 20, L1 6.37655e-05, Linf 0.00541309, total time[s] 0.058975 +Converged at iteration 19, L1 7.30471e-05, Linf 0.00515022, total time[s] 0.057625 +Converged at iteration 24, L1 5.37255e-05, Linf 0.00299708, total time[s] 0.083715 +Converged at iteration 25, L1 5.27664e-05, Linf 0.00808653, total time[s] 0.074083 +Converged at iteration 21, L1 8.33668e-05, Linf 0.0059523, total time[s] 0.086728 +Converged at iteration 17, L1 7.54055e-05, Linf 0.00314235, total time[s] 0.079279 +Converged at iteration 31, L1 5.69371e-05, Linf 0.00564394, total time[s] 0.094173 +Converged at iteration 19, L1 8.06026e-05, Linf 0.00309601, total time[s] 0.054367 +Converged at iteration 21, L1 7.53305e-05, Linf 0.00347854, total time[s] 0.056584 +Converged at iteration 27, L1 7.72548e-05, Linf 0.00357572, total time[s] 0.070767 +Converged at iteration 24, L1 6.27968e-05, Linf 0.00420957, total time[s] 0.069098 +Converged at iteration 22, L1 9.2803e-05, Linf 0.00506897, total time[s] 0.059785 +Converged at iteration 23, L1 9.05168e-05, Linf 0.00347948, total time[s] 0.060993 +Converged at iteration 23, L1 9.16311e-05, Linf 0.0024444, total time[s] 0.062188 +Converged at iteration 29, L1 7.14913e-05, Linf 0.00522098, total time[s] 0.088515 +Converged at iteration 31, L1 6.22749e-05, Linf 0.00377761, total time[s] 0.090397 +Converged at iteration 28, L1 6.63294e-05, Linf 0.00279095, total time[s] 0.073054 +Converged at iteration 31, L1 5.37991e-05, Linf 0.00482963, total time[s] 0.077838 +Converged at iteration 30, L1 8.04052e-05, Linf 0.00273771, total time[s] 0.077391 +Converged at iteration 30, L1 5.98931e-05, Linf 0.00128763, total time[s] 0.076457 +Converged at iteration 30, L1 5.82192e-05, Linf 0.00718623, total time[s] 0.078417 +Converged at iteration 30, L1 4.17804e-05, Linf 0.0100008, total time[s] 0.076362 +Converged at iteration 28, L1 6.03234e-05, Linf 0.00885489, total time[s] 0.072007 +Converged at iteration 25, L1 5.54034e-05, Linf 0.00208815, total time[s] 0.064608 +Converged at iteration 37, L1 5.72649e-05, Linf 0.00558803, total time[s] 0.094174 +Converged at iteration 33, L1 8.43206e-05, Linf 0.0054805, total time[s] 0.090518 +Converged at iteration 25, L1 5.22794e-05, Linf 0.00217365, total time[s] 0.069897 +Converged at iteration 28, L1 7.83202e-05, Linf 0.00745804, total time[s] 0.071478 +Converged at iteration 27, L1 8.5529e-05, Linf 0.0131959, total time[s] 0.069471 +Converged at iteration 25, L1 8.74325e-05, Linf 0.0149313, total time[s] 0.065183 +Converged at iteration 20, L1 6.79609e-05, Linf 0.00578176, total time[s] 0.066359 +Converged at iteration 19, L1 7.06235e-05, Linf 0.00515798, total time[s] 0.070216 +Converged at iteration 24, L1 5.51505e-05, Linf 0.00296317, total time[s] 0.096868 +Converged at iteration 25, L1 4.65375e-05, Linf 0.00809753, total time[s] 0.091216 +Converged at iteration 21, L1 8.12653e-05, Linf 0.00598113, total time[s] 0.087895 +Converged at iteration 17, L1 8.11251e-05, Linf 0.00274821, total time[s] 0.050696 +Converged at iteration 31, L1 5.72766e-05, Linf 0.00590811, total time[s] 0.09104 +Converged at iteration 19, L1 9.44912e-05, Linf 0.00380224, total time[s] 0.068995 +Converged at iteration 21, L1 8.87853e-05, Linf 0.00432226, total time[s] 0.060499 +Converged at iteration 27, L1 7.70725e-05, Linf 0.0036245, total time[s] 0.070877 +Converged at iteration 24, L1 6.09508e-05, Linf 0.00434586, total time[s] 0.06358 +Converged at iteration 22, L1 9.64873e-05, Linf 0.00526488, total time[s] 0.056768 +Converged at iteration 23, L1 9.81973e-05, Linf 0.00399733, total time[s] 0.064242 +Converged at iteration 23, L1 8.37614e-05, Linf 0.00244299, total time[s] 0.060195 +Converged at iteration 29, L1 7.1065e-05, Linf 0.00524763, total time[s] 0.081566 +Converged at iteration 31, L1 6.04649e-05, Linf 0.00391085, total time[s] 0.084814 +Converged at iteration 28, L1 6.45561e-05, Linf 0.00274461, total time[s] 0.074989 +Converged at iteration 31, L1 5.60171e-05, Linf 0.00491839, total time[s] 0.080513 +Converged at iteration 30, L1 8.42039e-05, Linf 0.00286719, total time[s] 0.086112 +Converged at iteration 30, L1 6.18397e-05, Linf 0.00132715, total time[s] 0.077318 +Converged at iteration 30, L1 5.58358e-05, Linf 0.00704637, total time[s] 0.079041 +Converged at iteration 30, L1 4.56676e-05, Linf 0.0104463, total time[s] 0.078466 +Converged at iteration 28, L1 6.72797e-05, Linf 0.00947617, total time[s] 0.072841 +Converged at iteration 25, L1 5.71252e-05, Linf 0.00213395, total time[s] 0.067684 +Converged at iteration 36, L1 9.83937e-05, Linf 0.00675965, total time[s] 0.09795 +Converged at iteration 33, L1 8.16482e-05, Linf 0.00515776, total time[s] 0.093008 +Converged at iteration 25, L1 5.35175e-05, Linf 0.00225527, total time[s] 0.073166 +Converged at iteration 28, L1 7.00505e-05, Linf 0.00732196, total time[s] 0.072593 +Converged at iteration 27, L1 9.16001e-05, Linf 0.0137343, total time[s] 0.073068 +Converged at iteration 25, L1 9.60955e-05, Linf 0.0159017, total time[s] 0.067989 +Converged at iteration 20, L1 7.28788e-05, Linf 0.00665807, total time[s] 0.061336 +Converged at iteration 19, L1 6.91531e-05, Linf 0.00518416, total time[s] 0.076395 +Converged at iteration 24, L1 5.50144e-05, Linf 0.0029187, total time[s] 0.084073 +Converged at iteration 24, L1 8.9959e-05, Linf 0.0110255, total time[s] 0.068827 +Converged at iteration 21, L1 7.68964e-05, Linf 0.00602011, total time[s] 0.066416 +Converged at iteration 17, L1 9.06386e-05, Linf 0.00225505, total time[s] 0.051455 +Converged at iteration 31, L1 5.97298e-05, Linf 0.00626269, total time[s] 0.105246 +Converged at iteration 20, L1 6.72669e-05, Linf 0.00441622, total time[s] 0.059718 +Converged at iteration 22, L1 6.01776e-05, Linf 0.00409125, total time[s] 0.061055 +Converged at iteration 27, L1 8.03973e-05, Linf 0.00375621, total time[s] 0.078247 +Converged at iteration 24, L1 6.95912e-05, Linf 0.00449962, total time[s] 0.068603 +Converged at iteration 23, L1 5.52095e-05, Linf 0.00344958, total time[s] 0.060446 +Converged at iteration 24, L1 6.32553e-05, Linf 0.00328472, total time[s] 0.065794 +Converged at iteration 23, L1 7.70103e-05, Linf 0.00271105, total time[s] 0.060683 +Converged at iteration 29, L1 6.80404e-05, Linf 0.00523268, total time[s] 0.074609 +Converged at iteration 31, L1 6.31279e-05, Linf 0.00413213, total time[s] 0.080472 +Converged at iteration 28, L1 6.32472e-05, Linf 0.00273032, total time[s] 0.074298 +Converged at iteration 31, L1 5.67328e-05, Linf 0.00523563, total time[s] 0.08044 +Converged at iteration 30, L1 8.62739e-05, Linf 0.00291078, total time[s] 0.083726 +Converged at iteration 30, L1 6.50341e-05, Linf 0.00154822, total time[s] 0.091433 +Converged at iteration 30, L1 5.33388e-05, Linf 0.00669559, total time[s] 0.118514 +Converged at iteration 30, L1 5.04634e-05, Linf 0.0114647, total time[s] 0.100899 +Converged at iteration 28, L1 7.62028e-05, Linf 0.0103217, total time[s] 0.079329 +Converged at iteration 25, L1 5.73436e-05, Linf 0.00221408, total time[s] 0.080286 +Converged at iteration 36, L1 9.13368e-05, Linf 0.00671703, total time[s] 0.10152 +Converged at iteration 33, L1 8.07905e-05, Linf 0.00489132, total time[s] 0.095422 +Converged at iteration 25, L1 5.37444e-05, Linf 0.00234967, total time[s] 0.065387 +Converged at iteration 28, L1 5.63965e-05, Linf 0.00718534, total time[s] 0.078183 +Converged at iteration 27, L1 8.90291e-05, Linf 0.0134802, total time[s] 0.076888 +Converged at iteration 26, L1 3.11573e-05, Linf 0.00971806, total time[s] 0.072316 +Converged at iteration 20, L1 7.80613e-05, Linf 0.0071075, total time[s] 0.203933 +Converged at iteration 19, L1 7.05827e-05, Linf 0.00515908, total time[s] 0.075562 +Converged at iteration 24, L1 5.68449e-05, Linf 0.00288213, total time[s] 0.081588 +Converged at iteration 24, L1 7.74169e-05, Linf 0.0110448, total time[s] 0.084658 +Converged at iteration 21, L1 7.09083e-05, Linf 0.00604847, total time[s] 0.082424 +Converged at iteration 18, L1 5.12212e-05, Linf 0.00158151, total time[s] 0.056146 +Converged at iteration 31, L1 6.1859e-05, Linf 0.00658811, total time[s] 0.115061 +Converged at iteration 20, L1 8.30236e-05, Linf 0.00452378, total time[s] 0.127592 +Converged at iteration 22, L1 6.59233e-05, Linf 0.00473138, total time[s] 0.080547 +Converged at iteration 27, L1 8.3365e-05, Linf 0.00390606, total time[s] 0.074925 +Converged at iteration 24, L1 6.70257e-05, Linf 0.00465502, total time[s] 0.068189 +Converged at iteration 23, L1 5.78964e-05, Linf 0.00353525, total time[s] 0.073839 +Converged at iteration 24, L1 7.15376e-05, Linf 0.00466329, total time[s] 0.065348 +Converged at iteration 23, L1 7.5582e-05, Linf 0.00355451, total time[s] 0.060529 +Converged at iteration 29, L1 6.55938e-05, Linf 0.00523377, total time[s] 0.074233 +Converged at iteration 31, L1 6.75937e-05, Linf 0.00430174, total time[s] 0.077184 +Converged at iteration 28, L1 6.11033e-05, Linf 0.00272738, total time[s] 0.070893 +Converged at iteration 31, L1 5.82864e-05, Linf 0.00544542, total time[s] 0.079961 +Converged at iteration 30, L1 8.90924e-05, Linf 0.0029966, total time[s] 0.075279 +Converged at iteration 30, L1 6.74911e-05, Linf 0.00170624, total time[s] 0.07644 +Converged at iteration 29, L1 9.65623e-05, Linf 0.00941331, total time[s] 0.074822 +Converged at iteration 30, L1 5.51136e-05, Linf 0.0122235, total time[s] 0.07481 +Converged at iteration 28, L1 8.54832e-05, Linf 0.0111803, total time[s] 0.072451 +Converged at iteration 25, L1 5.76712e-05, Linf 0.00226148, total time[s] 0.063927 +Converged at iteration 36, L1 8.45287e-05, Linf 0.00667214, total time[s] 0.091143 +Converged at iteration 33, L1 8.14535e-05, Linf 0.00471815, total time[s] 0.087571 +Converged at iteration 25, L1 5.55979e-05, Linf 0.00243914, total time[s] 0.07666 +Converged at iteration 27, L1 8.17233e-05, Linf 0.00942008, total time[s] 0.069164 +Converged at iteration 27, L1 8.76197e-05, Linf 0.0127443, total time[s] 0.068117 +Converged at iteration 26, L1 3.25275e-05, Linf 0.0113124, total time[s] 0.066505 +Converged at iteration 20, L1 8.54145e-05, Linf 0.00742834, total time[s] 0.051323 +Converged at iteration 19, L1 7.22842e-05, Linf 0.00506559, total time[s] 0.073229 +Converged at iteration 24, L1 5.93069e-05, Linf 0.0028408, total time[s] 0.072968 +Converged at iteration 24, L1 6.48912e-05, Linf 0.0109912, total time[s] 0.086007 +Converged at iteration 21, L1 5.94722e-05, Linf 0.00590771, total time[s] 0.10732 +Converged at iteration 18, L1 6.05706e-05, Linf 0.00190926, total time[s] 0.073665 +Converged at iteration 31, L1 6.50751e-05, Linf 0.00700438, total time[s] 0.139065 +Converged at iteration 20, L1 9.86929e-05, Linf 0.00441371, total time[s] 0.095214 +Converged at iteration 22, L1 7.44529e-05, Linf 0.0054613, total time[s] 0.080226 +Converged at iteration 27, L1 9.24576e-05, Linf 0.00746144, total time[s] 0.114694 +Converged at iteration 24, L1 7.40622e-05, Linf 0.00482845, total time[s] 0.080759 +Converged at iteration 23, L1 6.19405e-05, Linf 0.0037392, total time[s] 0.069277 +Converged at iteration 24, L1 8.11482e-05, Linf 0.00445061, total time[s] 0.067144 +Converged at iteration 23, L1 7.79918e-05, Linf 0.00460886, total time[s] 0.059584 +Converged at iteration 28, L1 9.57512e-05, Linf 0.00614287, total time[s] 0.070897 +Converged at iteration 31, L1 7.65896e-05, Linf 0.00865444, total time[s] 0.077223 +Converged at iteration 28, L1 6.09843e-05, Linf 0.00269772, total time[s] 0.070654 +Converged at iteration 31, L1 5.89185e-05, Linf 0.00573831, total time[s] 0.077687 +Converged at iteration 30, L1 9.44455e-05, Linf 0.00320889, total time[s] 0.075842 +Converged at iteration 30, L1 7.82307e-05, Linf 0.00208062, total time[s] 0.076541 +Converged at iteration 29, L1 9.20578e-05, Linf 0.00889661, total time[s] 0.073017 +Converged at iteration 30, L1 6.21029e-05, Linf 0.0135272, total time[s] 0.07641 +Converged at iteration 28, L1 9.76518e-05, Linf 0.0124531, total time[s] 0.072759 +Converged at iteration 25, L1 5.82152e-05, Linf 0.00235065, total time[s] 0.065035 +Converged at iteration 36, L1 8.04856e-05, Linf 0.00657441, total time[s] 0.107919 +Converged at iteration 33, L1 8.31086e-05, Linf 0.00472789, total time[s] 0.096449 +Converged at iteration 25, L1 5.53731e-05, Linf 0.00251309, total time[s] 0.077617 +Converged at iteration 27, L1 5.89078e-05, Linf 0.00924854, total time[s] 0.083026 +Converged at iteration 27, L1 9.29097e-05, Linf 0.0132653, total time[s] 0.077827 +Converged at iteration 26, L1 3.54776e-05, Linf 0.0120079, total time[s] 0.113012 +Converged at iteration 20, L1 9.15835e-05, Linf 0.0077863, total time[s] 0.093097 +Converged at iteration 19, L1 7.58521e-05, Linf 0.0050116, total time[s] 0.089573 +Converged at iteration 24, L1 5.92143e-05, Linf 0.00279159, total time[s] 0.119487 +Converged at iteration 24, L1 5.41394e-05, Linf 0.0108353, total time[s] 0.078233 +Converged at iteration 21, L1 4.8874e-05, Linf 0.00554524, total time[s] 0.061027 +Converged at iteration 18, L1 7.06234e-05, Linf 0.00213489, total time[s] 0.050331 +Converged at iteration 31, L1 6.71899e-05, Linf 0.00734123, total time[s] 0.084702 +Converged at iteration 21, L1 6.48727e-05, Linf 0.00368189, total time[s] 0.054806 +Converged at iteration 22, L1 8.26632e-05, Linf 0.00597637, total time[s] 0.063502 +Converged at iteration 27, L1 8.30953e-05, Linf 0.00411905, total time[s] 0.069376 +Converged at iteration 24, L1 7.07581e-05, Linf 0.00503273, total time[s] 0.065812 +Converged at iteration 23, L1 6.34766e-05, Linf 0.00385982, total time[s] 0.059216 +Converged at iteration 24, L1 8.86824e-05, Linf 0.00523225, total time[s] 0.066041 +Converged at iteration 23, L1 8.43016e-05, Linf 0.00542036, total time[s] 0.060967 +Converged at iteration 28, L1 9.00794e-05, Linf 0.00589403, total time[s] 0.072563 +Converged at iteration 31, L1 7.93422e-05, Linf 0.00523276, total time[s] 0.079514 +Converged at iteration 27, L1 9.79706e-05, Linf 0.00359226, total time[s] 0.070518 +Converged at iteration 31, L1 5.99181e-05, Linf 0.00596831, total time[s] 0.077846 +Converged at iteration 30, L1 9.57954e-05, Linf 0.00343663, total time[s] 0.07534 +Converged at iteration 30, L1 8.49025e-05, Linf 0.00236895, total time[s] 0.077071 +Converged at iteration 29, L1 8.8484e-05, Linf 0.00838909, total time[s] 0.074622 +Converged at iteration 30, L1 6.95616e-05, Linf 0.014737, total time[s] 0.082569 +Converged at iteration 29, L1 4.4272e-05, Linf 0.00948803, total time[s] 0.079958 +Converged at iteration 25, L1 5.71992e-05, Linf 0.00240299, total time[s] 0.067298 +Converged at iteration 36, L1 7.65323e-05, Linf 0.00642789, total time[s] 0.100927 +Converged at iteration 33, L1 8.65292e-05, Linf 0.00491939, total time[s] 0.101626 +Converged at iteration 25, L1 5.5008e-05, Linf 0.00258036, total time[s] 0.08323 +Converged at iteration 26, L1 8.06388e-05, Linf 0.011462, total time[s] 0.067892 +Converged at iteration 27, L1 8.81611e-05, Linf 0.0130001, total time[s] 0.07016 +Converged at iteration 26, L1 3.63284e-05, Linf 0.0129425, total time[s] 0.069248 +Converged at iteration 20, L1 9.89464e-05, Linf 0.0082171, total time[s] 0.063055 +Converged at iteration 19, L1 8.06556e-05, Linf 0.00490235, total time[s] 0.068929 +Converged at iteration 24, L1 5.96752e-05, Linf 0.00275893, total time[s] 0.082018 +Converged at iteration 24, L1 4.52463e-05, Linf 0.0105385, total time[s] 0.088531 +Converged at iteration 21, L1 4.11428e-05, Linf 0.00469525, total time[s] 0.065704 +Converged at iteration 18, L1 7.91809e-05, Linf 0.0024799, total time[s] 0.060235 +Converged at iteration 31, L1 7.02058e-05, Linf 0.00783852, total time[s] 0.102383 +Converged at iteration 21, L1 6.36219e-05, Linf 0.00405122, total time[s] 0.057739 +Converged at iteration 22, L1 8.88266e-05, Linf 0.006612, total time[s] 0.065186 +Converged at iteration 27, L1 7.82871e-05, Linf 0.00403756, total time[s] 0.070771 +Converged at iteration 24, L1 7.38507e-05, Linf 0.00531747, total time[s] 0.065782 +Converged at iteration 23, L1 6.68912e-05, Linf 0.00395888, total time[s] 0.062097 +Converged at iteration 24, L1 9.86184e-05, Linf 0.00645654, total time[s] 0.064087 +Converged at iteration 23, L1 9.63021e-05, Linf 0.00649159, total time[s] 0.065 +Converged at iteration 28, L1 8.10929e-05, Linf 0.005515, total time[s] 0.073471 +Converged at iteration 31, L1 8.54426e-05, Linf 0.00575748, total time[s] 0.080206 +Converged at iteration 27, L1 9.48899e-05, Linf 0.00350449, total time[s] 0.071693 +Converged at iteration 31, L1 6.00894e-05, Linf 0.00628605, total time[s] 0.080494 +Converged at iteration 30, L1 9.77193e-05, Linf 0.00332821, total time[s] 0.077337 +Converged at iteration 31, L1 4.7348e-05, Linf 0.00168237, total time[s] 0.080306 +Converged at iteration 29, L1 8.5911e-05, Linf 0.00775745, total time[s] 0.075034 +Converged at iteration 30, L1 8.05199e-05, Linf 0.016143, total time[s] 0.078305 +Converged at iteration 29, L1 5.04611e-05, Linf 0.0103954, total time[s] 0.078547 +Converged at iteration 25, L1 5.62037e-05, Linf 0.00240437, total time[s] 0.066224 +Converged at iteration 36, L1 7.55061e-05, Linf 0.00641509, total time[s] 0.093786 +Converged at iteration 33, L1 9.0081e-05, Linf 0.00510758, total time[s] 0.090291 +Converged at iteration 25, L1 5.47623e-05, Linf 0.00267717, total time[s] 0.071674 +Converged at iteration 26, L1 5.66132e-05, Linf 0.0111898, total time[s] 0.079749 +Converged at iteration 27, L1 8.86835e-05, Linf 0.0130271, total time[s] 0.071405 +Converged at iteration 26, L1 3.69293e-05, Linf 0.0134077, total time[s] 0.069779 +Converged at iteration 21, L1 3.53581e-05, Linf 0.00590364, total time[s] 0.066107 +Converged at iteration 19, L1 8.47891e-05, Linf 0.0048033, total time[s] 0.074103 +Converged at iteration 24, L1 5.9976e-05, Linf 0.00272076, total time[s] 0.111661 +Converged at iteration 24, L1 4.01843e-05, Linf 0.0101963, total time[s] 0.090607 +Converged at iteration 20, L1 9.81993e-05, Linf 0.0069461, total time[s] 0.063987 +Converged at iteration 18, L1 8.51737e-05, Linf 0.00270416, total time[s] 0.056576 +Converged at iteration 31, L1 7.21603e-05, Linf 0.00810987, total time[s] 0.108741 +Converged at iteration 21, L1 7.12855e-05, Linf 0.00430604, total time[s] 0.065174 +Converged at iteration 22, L1 9.36547e-05, Linf 0.00710469, total time[s] 0.058162 +Converged at iteration 27, L1 7.41766e-05, Linf 0.00393142, total time[s] 0.068766 +Converged at iteration 24, L1 7.55385e-05, Linf 0.00554327, total time[s] 0.065539 +Converged at iteration 23, L1 6.96705e-05, Linf 0.00395244, total time[s] 0.05963 +Converged at iteration 25, L1 5.80067e-05, Linf 0.00374652, total time[s] 0.064182 +Converged at iteration 24, L1 6.20163e-05, Linf 0.00523714, total time[s] 0.062238 +Converged at iteration 28, L1 7.41086e-05, Linf 0.0052668, total time[s] 0.070767 +Converged at iteration 31, L1 8.88081e-05, Linf 0.00572351, total time[s] 0.08208 +Converged at iteration 27, L1 9.17377e-05, Linf 0.0034119, total time[s] 0.07034 +Converged at iteration 31, L1 6.08322e-05, Linf 0.00654419, total time[s] 0.080348 +Converged at iteration 30, L1 9.83864e-05, Linf 0.00348032, total time[s] 0.077905 +Converged at iteration 31, L1 5.1721e-05, Linf 0.00188287, total time[s] 0.080992 +Converged at iteration 29, L1 8.37507e-05, Linf 0.00724751, total time[s] 0.07667 +Converged at iteration 30, L1 9.05958e-05, Linf 0.01715, total time[s] 0.077696 +Converged at iteration 29, L1 5.51412e-05, Linf 0.0110172, total time[s] 0.075791 +Converged at iteration 25, L1 5.45522e-05, Linf 0.00240116, total time[s] 0.066845 +Converged at iteration 36, L1 7.54753e-05, Linf 0.00660057, total time[s] 0.103444 +Converged at iteration 33, L1 9.61567e-05, Linf 0.00541172, total time[s] 0.093753 +Converged at iteration 25, L1 5.81323e-05, Linf 0.00276576, total time[s] 0.068042 +Converged at iteration 25, L1 9.77671e-05, Linf 0.0138566, total time[s] 0.066654 +Converged at iteration 27, L1 9.51352e-05, Linf 0.0137079, total time[s] 0.07098 +Converged at iteration 26, L1 3.82125e-05, Linf 0.0139745, total time[s] 0.0723 +Converged at iteration 21, L1 3.76578e-05, Linf 0.00620877, total time[s] 0.081871 +Converged at iteration 19, L1 8.93204e-05, Linf 0.00463774, total time[s] 0.070055 +Converged at iteration 24, L1 6.03575e-05, Linf 0.00268239, total time[s] 0.13055 +Converged at iteration 24, L1 3.56644e-05, Linf 0.00955788, total time[s] 0.071621 +Converged at iteration 20, L1 9.24764e-05, Linf 0.006208, total time[s] 0.064028 +Converged at iteration 18, L1 9.46913e-05, Linf 0.00305229, total time[s] 0.057463 +Converged at iteration 31, L1 7.4706e-05, Linf 0.00857317, total time[s] 0.086152 +Converged at iteration 21, L1 9.12598e-05, Linf 0.0044804, total time[s] 0.058847 +Converged at iteration 23, L1 5.58023e-05, Linf 0.00512545, total time[s] 0.07283 +Converged at iteration 27, L1 7.25638e-05, Linf 0.00377668, total time[s] 0.076404 +Converged at iteration 24, L1 7.76269e-05, Linf 0.00568241, total time[s] 0.07523 +Converged at iteration 23, L1 7.20057e-05, Linf 0.00430398, total time[s] 0.063195 +Converged at iteration 25, L1 6.26079e-05, Linf 0.0040332, total time[s] 0.066915 +Converged at iteration 24, L1 7.32185e-05, Linf 0.00600954, total time[s] 0.064409 +Converged at iteration 28, L1 6.3935e-05, Linf 0.00512314, total time[s] 0.073458 +Converged at iteration 31, L1 9.36807e-05, Linf 0.00520816, total time[s] 0.080548 +Converged at iteration 27, L1 8.84585e-05, Linf 0.00324287, total time[s] 0.072414 +Converged at iteration 31, L1 6.1929e-05, Linf 0.00682389, total time[s] 0.081835 +Converged at iteration 31, L1 6.13663e-05, Linf 0.0022744, total time[s] 0.082043 +Converged at iteration 31, L1 6.06449e-05, Linf 0.00220908, total time[s] 0.081573 +Converged at iteration 29, L1 8.10507e-05, Linf 0.00658974, total time[s] 0.076983 +Converged at iteration 31, L1 3.23558e-05, Linf 0.00838796, total time[s] 0.082814 +Converged at iteration 29, L1 6.09927e-05, Linf 0.0118111, total time[s] 0.075656 +Converged at iteration 25, L1 5.30864e-05, Linf 0.00233484, total time[s] 0.068658 +Converged at iteration 36, L1 7.68447e-05, Linf 0.00682177, total time[s] 0.092416 +Converged at iteration 34, L1 4.4535e-05, Linf 0.00434285, total time[s] 0.088624 +Converged at iteration 25, L1 5.99791e-05, Linf 0.00292596, total time[s] 0.070187 +Converged at iteration 25, L1 7.92198e-05, Linf 0.0135799, total time[s] 0.064577 +Converged at iteration 28, L1 4.20999e-05, Linf 0.0093785, total time[s] 0.07108 +Converged at iteration 26, L1 3.97274e-05, Linf 0.0144184, total time[s] 0.067525 +Converged at iteration 21, L1 3.83262e-05, Linf 0.0064055, total time[s] 0.075414 +Converged at iteration 19, L1 9.20828e-05, Linf 0.00455775, total time[s] 0.087892 +Converged at iteration 24, L1 6.1716e-05, Linf 0.00261316, total time[s] 0.102846 +Converged at iteration 23, L1 9.84326e-05, Linf 0.0152183, total time[s] 0.08195 +Converged at iteration 20, L1 9.02293e-05, Linf 0.00557764, total time[s] 0.066702 +Converged at iteration 19, L1 4.81051e-05, Linf 0.00171656, total time[s] 0.060378 +Converged at iteration 31, L1 7.62028e-05, Linf 0.00889987, total time[s] 0.08799 +Converged at iteration 21, L1 9.76722e-05, Linf 0.0045026, total time[s] 0.056085 +Converged at iteration 23, L1 5.81527e-05, Linf 0.00536997, total time[s] 0.06151 +Converged at iteration 27, L1 7.00516e-05, Linf 0.00367559, total time[s] 0.07147 +Converged at iteration 24, L1 7.73605e-05, Linf 0.00570081, total time[s] 0.062777 +Converged at iteration 23, L1 7.31927e-05, Linf 0.00430017, total time[s] 0.060841 +Converged at iteration 25, L1 6.40839e-05, Linf 0.00417391, total time[s] 0.067109 +Converged at iteration 24, L1 8.36385e-05, Linf 0.0066191, total time[s] 0.064421 +Converged at iteration 27, L1 9.62305e-05, Linf 0.00660803, total time[s] 0.070015 +Converged at iteration 31, L1 9.65248e-05, Linf 0.00551273, total time[s] 0.080823 +Converged at iteration 27, L1 8.37034e-05, Linf 0.00315129, total time[s] 0.074588 +Converged at iteration 31, L1 6.26497e-05, Linf 0.00702565, total time[s] 0.087156 +Converged at iteration 31, L1 6.1583e-05, Linf 0.00231068, total time[s] 0.079197 +Converged at iteration 31, L1 6.45775e-05, Linf 0.00237877, total time[s] 0.079504 +Converged at iteration 29, L1 7.96396e-05, Linf 0.00609891, total time[s] 0.079909 +Converged at iteration 31, L1 3.42899e-05, Linf 0.00953311, total time[s] 0.086336 +Converged at iteration 29, L1 6.57822e-05, Linf 0.0124223, total time[s] 0.08057 +Converged at iteration 25, L1 5.31215e-05, Linf 0.00233784, total time[s] 0.064903 +Converged at iteration 36, L1 7.99127e-05, Linf 0.00722592, total time[s] 0.102421 +Converged at iteration 34, L1 4.83505e-05, Linf 0.00436781, total time[s] 0.095145 +Converged at iteration 25, L1 6.22407e-05, Linf 0.00301323, total time[s] 0.069713 +Converged at iteration 25, L1 5.79055e-05, Linf 0.0129831, total time[s] 0.066043 +Converged at iteration 27, L1 9.95729e-05, Linf 0.0153907, total time[s] 0.097097 +Converged at iteration 26, L1 4.24363e-05, Linf 0.0152025, total time[s] 0.078425 +Converged at iteration 21, L1 3.90527e-05, Linf 0.00666287, total time[s] 0.088139 +Converged at iteration 19, L1 9.38904e-05, Linf 0.00440532, total time[s] 0.06846 +Converged at iteration 24, L1 6.28089e-05, Linf 0.00267547, total time[s] 0.078586 +Converged at iteration 23, L1 9.52502e-05, Linf 0.0146122, total time[s] 0.084334 +Converged at iteration 20, L1 9.16329e-05, Linf 0.00555069, total time[s] 0.068538 +Converged at iteration 19, L1 5.33397e-05, Linf 0.00188443, total time[s] 0.070767 +Converged at iteration 31, L1 7.93865e-05, Linf 0.00944659, total time[s] 0.095444 +Converged at iteration 21, L1 9.92395e-05, Linf 0.00457475, total time[s] 0.070345 +Converged at iteration 23, L1 6.06856e-05, Linf 0.00599553, total time[s] 0.065216 +Converged at iteration 27, L1 6.6377e-05, Linf 0.00349278, total time[s] 0.06908 +Converged at iteration 24, L1 7.59405e-05, Linf 0.00562613, total time[s] 0.067222 +Converged at iteration 23, L1 7.77499e-05, Linf 0.00440437, total time[s] 0.062245 +Converged at iteration 25, L1 6.60918e-05, Linf 0.00437066, total time[s] 0.068045 +Converged at iteration 25, L1 5.68824e-05, Linf 0.00525248, total time[s] 0.067754 +Converged at iteration 27, L1 9.2569e-05, Linf 0.00659926, total time[s] 0.07881 +Converged at iteration 32, L1 5.33233e-05, Linf 0.00320048, total time[s] 0.081259 +Converged at iteration 27, L1 7.81515e-05, Linf 0.00295777, total time[s] 0.068303 +Converged at iteration 31, L1 6.42566e-05, Linf 0.00736878, total time[s] 0.077874 +Converged at iteration 31, L1 6.25957e-05, Linf 0.00229892, total time[s] 0.080651 +Converged at iteration 31, L1 7.56278e-05, Linf 0.00276354, total time[s] 0.082727 +Converged at iteration 29, L1 7.9793e-05, Linf 0.00544514, total time[s] 0.07797 +Converged at iteration 31, L1 3.97706e-05, Linf 0.0101685, total time[s] 0.083941 +Converged at iteration 29, L1 7.35601e-05, Linf 0.0132588, total time[s] 0.075427 +Converged at iteration 25, L1 5.29938e-05, Linf 0.00240061, total time[s] 0.065762 +Converged at iteration 36, L1 8.21163e-05, Linf 0.00753116, total time[s] 0.09394 +Converged at iteration 34, L1 5.20683e-05, Linf 0.00484345, total time[s] 0.091796 +Converged at iteration 25, L1 6.17056e-05, Linf 0.00311113, total time[s] 0.078628 +Converged at iteration 25, L1 4.92807e-05, Linf 0.0125011, total time[s] 0.066935 +Converged at iteration 27, L1 9.91745e-05, Linf 0.0156269, total time[s] 0.070101 +Converged at iteration 26, L1 4.46201e-05, Linf 0.0157028, total time[s] 0.06787 +Converged at iteration 21, L1 3.93597e-05, Linf 0.00691759, total time[s] 0.063315 +Converged at iteration 19, L1 9.29152e-05, Linf 0.00436306, total time[s] 0.079303 +Converged at iteration 24, L1 6.23417e-05, Linf 0.00256043, total time[s] 0.068381 +Converged at iteration 23, L1 9.33471e-05, Linf 0.0142756, total time[s] 0.07575 +Converged at iteration 20, L1 9.16208e-05, Linf 0.00555399, total time[s] 0.069211 +Converged at iteration 19, L1 5.65588e-05, Linf 0.00196146, total time[s] 0.062933 +Converged at iteration 31, L1 8.06781e-05, Linf 0.00979419, total time[s] 0.08668 +Converged at iteration 22, L1 6.80622e-05, Linf 0.00297922, total time[s] 0.058795 +Converged at iteration 23, L1 6.47961e-05, Linf 0.00604006, total time[s] 0.059778 +Converged at iteration 27, L1 6.41156e-05, Linf 0.00337154, total time[s] 0.068818 +Converged at iteration 24, L1 7.44574e-05, Linf 0.00554475, total time[s] 0.06387 +Converged at iteration 23, L1 7.97648e-05, Linf 0.00437051, total time[s] 0.059754 +Converged at iteration 25, L1 6.62476e-05, Linf 0.00443535, total time[s] 0.064145 +Converged at iteration 25, L1 6.392e-05, Linf 0.00563899, total time[s] 0.064965 +Converged at iteration 27, L1 9.14907e-05, Linf 0.00674586, total time[s] 0.069945 +Converged at iteration 32, L1 5.42163e-05, Linf 0.00320425, total time[s] 0.082408 +Converged at iteration 27, L1 7.47864e-05, Linf 0.00281785, total time[s] 0.069271 +Converged at iteration 31, L1 6.5019e-05, Linf 0.00755017, total time[s] 0.077803 +Converged at iteration 31, L1 6.21485e-05, Linf 0.00244797, total time[s] 0.077878 +Converged at iteration 31, L1 8.01058e-05, Linf 0.00302143, total time[s] 0.077669 +Converged at iteration 29, L1 7.93955e-05, Linf 0.00504425, total time[s] 0.073075 +Converged at iteration 31, L1 4.38893e-05, Linf 0.0104003, total time[s] 0.078584 +Converged at iteration 29, L1 7.71981e-05, Linf 0.0137984, total time[s] 0.072935 +Converged at iteration 25, L1 5.41361e-05, Linf 0.00247333, total time[s] 0.064935 +Converged at iteration 36, L1 8.55036e-05, Linf 0.00790884, total time[s] 0.094279 +Converged at iteration 34, L1 5.65819e-05, Linf 0.00471497, total time[s] 0.095798 +Converged at iteration 25, L1 6.15204e-05, Linf 0.00312879, total time[s] 0.066445 +Converged at iteration 25, L1 4.36207e-05, Linf 0.0118741, total time[s] 0.070078 +Converged at iteration 28, L1 4.94137e-05, Linf 0.0109396, total time[s] 0.074612 +Converged at iteration 26, L1 5.05196e-05, Linf 0.0165097, total time[s] 0.070922 +Converged at iteration 21, L1 3.96646e-05, Linf 0.00692044, total time[s] 0.059595 +Converged at iteration 19, L1 9.13935e-05, Linf 0.00430216, total time[s] 0.058141 +Converged at iteration 24, L1 6.20011e-05, Linf 0.00248619, total time[s] 0.078369 +Converged at iteration 23, L1 9.31761e-05, Linf 0.0139139, total time[s] 0.096252 +Converged at iteration 20, L1 9.27262e-05, Linf 0.005566, total time[s] 0.070508 +Converged at iteration 19, L1 6.06085e-05, Linf 0.00205896, total time[s] 0.079549 +Converged at iteration 31, L1 8.1731e-05, Linf 0.0102019, total time[s] 0.0906 +Converged at iteration 22, L1 6.93432e-05, Linf 0.00299277, total time[s] 0.058053 +Converged at iteration 23, L1 7.33151e-05, Linf 0.00618193, total time[s] 0.06232 +Converged at iteration 27, L1 6.51896e-05, Linf 0.00333374, total time[s] 0.069756 +Converged at iteration 24, L1 7.2577e-05, Linf 0.00538273, total time[s] 0.062659 +Converged at iteration 23, L1 8.27996e-05, Linf 0.00447209, total time[s] 0.07292 +Converged at iteration 25, L1 6.94936e-05, Linf 0.00452375, total time[s] 0.075073 +Converged at iteration 25, L1 7.14533e-05, Linf 0.005941, total time[s] 0.065609 +Converged at iteration 27, L1 9.05796e-05, Linf 0.00683223, total time[s] 0.073495 +Converged at iteration 32, L1 5.77768e-05, Linf 0.00319175, total time[s] 0.08075 +Converged at iteration 27, L1 7.09493e-05, Linf 0.00265987, total time[s] 0.068802 +Converged at iteration 31, L1 6.67298e-05, Linf 0.00775128, total time[s] 0.079906 +Converged at iteration 31, L1 6.223e-05, Linf 0.00232022, total time[s] 0.077763 +Converged at iteration 31, L1 8.89785e-05, Linf 0.00339618, total time[s] 0.077991 +Converged at iteration 29, L1 8.246e-05, Linf 0.00466388, total time[s] 0.073984 +Converged at iteration 31, L1 4.94586e-05, Linf 0.0113232, total time[s] 0.08581 +Converged at iteration 29, L1 8.13429e-05, Linf 0.0144169, total time[s] 0.074184 +Converged at iteration 25, L1 5.36976e-05, Linf 0.00257988, total time[s] 0.064276 +Converged at iteration 36, L1 8.81554e-05, Linf 0.00823859, total time[s] 0.09091 +Converged at iteration 34, L1 6.11498e-05, Linf 0.00490953, total time[s] 0.089644 +Converged at iteration 25, L1 5.91385e-05, Linf 0.00318509, total time[s] 0.067962 +Converged at iteration 25, L1 4.16424e-05, Linf 0.0111437, total time[s] 0.068502 +Converged at iteration 28, L1 4.96258e-05, Linf 0.0115349, total time[s] 0.074107 +Converged at iteration 26, L1 5.08294e-05, Linf 0.0167196, total time[s] 0.067498 +Converged at iteration 21, L1 3.8687e-05, Linf 0.00700977, total time[s] 0.061841 +Converged at iteration 19, L1 8.9743e-05, Linf 0.00425591, total time[s] 0.060647 +Converged at iteration 24, L1 6.1718e-05, Linf 0.0025229, total time[s] 0.081185 +Converged at iteration 23, L1 9.47441e-05, Linf 0.0134817, total time[s] 0.096864 +Converged at iteration 20, L1 9.39259e-05, Linf 0.00554018, total time[s] 0.062287 +Converged at iteration 19, L1 6.96483e-05, Linf 0.00364101, total time[s] 0.068055 +Converged at iteration 31, L1 8.34761e-05, Linf 0.0105025, total time[s] 0.097025 +Converged at iteration 22, L1 7.14052e-05, Linf 0.00307131, total time[s] 0.067247 +Converged at iteration 23, L1 7.23284e-05, Linf 0.00636697, total time[s] 0.064707 +Converged at iteration 27, L1 6.87328e-05, Linf 0.0033416, total time[s] 0.069071 +Converged at iteration 24, L1 7.10011e-05, Linf 0.0052179, total time[s] 0.063873 +Converged at iteration 23, L1 8.4583e-05, Linf 0.0045506, total time[s] 0.058384 +Converged at iteration 25, L1 7.06934e-05, Linf 0.00460733, total time[s] 0.063224 +Converged at iteration 25, L1 7.69086e-05, Linf 0.00637191, total time[s] 0.063094 +Converged at iteration 27, L1 8.8815e-05, Linf 0.00682278, total time[s] 0.068278 +Converged at iteration 32, L1 5.73239e-05, Linf 0.00317827, total time[s] 0.079602 +Converged at iteration 27, L1 6.7226e-05, Linf 0.00250441, total time[s] 0.068735 +Converged at iteration 31, L1 6.66862e-05, Linf 0.00785143, total time[s] 0.078093 +Converged at iteration 31, L1 6.21155e-05, Linf 0.00231098, total time[s] 0.078589 +Converged at iteration 31, L1 9.50673e-05, Linf 0.00364866, total time[s] 0.100949 +Converged at iteration 29, L1 8.22661e-05, Linf 0.00440154, total time[s] 0.105426 +Converged at iteration 31, L1 5.36084e-05, Linf 0.0115057, total time[s] 0.095716 +Converged at iteration 29, L1 8.29906e-05, Linf 0.0148867, total time[s] 0.078152 +Converged at iteration 25, L1 5.40125e-05, Linf 0.00261321, total time[s] 0.064828 +Converged at iteration 36, L1 9.24298e-05, Linf 0.00866198, total time[s] 0.090696 +Converged at iteration 34, L1 6.58557e-05, Linf 0.00564329, total time[s] 0.093484 +Converged at iteration 25, L1 5.78745e-05, Linf 0.00321388, total time[s] 0.080727 +Converged at iteration 24, L1 9.28701e-05, Linf 0.0153753, total time[s] 0.120242 +Converged at iteration 27, L1 9.08243e-05, Linf 0.016239, total time[s] 0.090225 +Converged at iteration 26, L1 5.30549e-05, Linf 0.0172799, total time[s] 0.08349 +Converged at iteration 21, L1 3.89232e-05, Linf 0.00710904, total time[s] 0.062184 +Converged at iteration 19, L1 8.85244e-05, Linf 0.00414684, total time[s] 0.060272 +Converged at iteration 24, L1 6.33263e-05, Linf 0.0026079, total time[s] 0.085535 +Converged at iteration 23, L1 9.199e-05, Linf 0.0129116, total time[s] 0.066931 +Converged at iteration 20, L1 9.67515e-05, Linf 0.00553709, total time[s] 0.06255 +Converged at iteration 19, L1 6.86929e-05, Linf 0.00226505, total time[s] 0.062458 +Converged at iteration 31, L1 8.44999e-05, Linf 0.0108887, total time[s] 0.085285 +Converged at iteration 22, L1 7.56733e-05, Linf 0.0031958, total time[s] 0.061221 +Converged at iteration 23, L1 7.32829e-05, Linf 0.00662442, total time[s] 0.060934 +Converged at iteration 27, L1 6.78758e-05, Linf 0.00338528, total time[s] 0.071476 +Converged at iteration 24, L1 6.78583e-05, Linf 0.00496157, total time[s] 0.063089 +Converged at iteration 23, L1 8.65766e-05, Linf 0.00465102, total time[s] 0.069361 +Converged at iteration 25, L1 7.16188e-05, Linf 0.00472556, total time[s] 0.06678 +Converged at iteration 25, L1 7.8562e-05, Linf 0.00785072, total time[s] 0.065443 +Converged at iteration 27, L1 8.55956e-05, Linf 0.0070115, total time[s] 0.069723 +Converged at iteration 32, L1 5.94559e-05, Linf 0.00321975, total time[s] 0.08484 +Converged at iteration 27, L1 6.31215e-05, Linf 0.00231267, total time[s] 0.069754 +Converged at iteration 31, L1 6.88026e-05, Linf 0.00800401, total time[s] 0.081075 +Converged at iteration 31, L1 6.1319e-05, Linf 0.00224608, total time[s] 0.078891 +Converged at iteration 32, L1 5.0046e-05, Linf 0.00232514, total time[s] 0.084409 +Converged at iteration 29, L1 8.58156e-05, Linf 0.00389417, total time[s] 0.074792 +Converged at iteration 31, L1 5.83737e-05, Linf 0.0132787, total time[s] 0.079093 +Converged at iteration 29, L1 8.57302e-05, Linf 0.0154753, total time[s] 0.075811 +Converged at iteration 25, L1 5.56132e-05, Linf 0.00261302, total time[s] 0.065583 +Converged at iteration 36, L1 9.63181e-05, Linf 0.00895242, total time[s] 0.092039 +Converged at iteration 34, L1 6.99274e-05, Linf 0.0056118, total time[s] 0.093405 +Converged at iteration 25, L1 5.63172e-05, Linf 0.00327757, total time[s] 0.073828 +Converged at iteration 24, L1 8.64782e-05, Linf 0.0150264, total time[s] 0.073183 +Converged at iteration 27, L1 7.40426e-05, Linf 0.0162752, total time[s] 0.071456 +Converged at iteration 26, L1 5.55269e-05, Linf 0.0176414, total time[s] 0.068506 +Converged at iteration 21, L1 3.83939e-05, Linf 0.00718247, total time[s] 0.065914 +Converged at iteration 19, L1 8.84814e-05, Linf 0.00411089, total time[s] 0.084167 +Converged at iteration 24, L1 6.45656e-05, Linf 0.0025884, total time[s] 0.077859 +Converged at iteration 23, L1 9.2872e-05, Linf 0.0123543, total time[s] 0.091062 +Converged at iteration 20, L1 9.85998e-05, Linf 0.00547494, total time[s] 0.062573 +Converged at iteration 19, L1 7.33529e-05, Linf 0.00235477, total time[s] 0.070556 +Converged at iteration 31, L1 8.44099e-05, Linf 0.0111536, total time[s] 0.088469 +Converged at iteration 22, L1 7.13947e-05, Linf 0.0032641, total time[s] 0.057778 +Converged at iteration 23, L1 7.39083e-05, Linf 0.0067611, total time[s] 0.073244 +Converged at iteration 27, L1 6.73593e-05, Linf 0.00337825, total time[s] 0.071175 +Converged at iteration 24, L1 6.57039e-05, Linf 0.00479466, total time[s] 0.064471 +Converged at iteration 23, L1 8.75281e-05, Linf 0.00471655, total time[s] 0.064863 +Converged at iteration 25, L1 7.4029e-05, Linf 0.00479924, total time[s] 0.064453 +Converged at iteration 25, L1 8.03312e-05, Linf 0.00622102, total time[s] 0.071804 +Converged at iteration 27, L1 8.48736e-05, Linf 0.00727795, total time[s] 0.073303 +Converged at iteration 32, L1 6.03857e-05, Linf 0.00321163, total time[s] 0.08384 +Converged at iteration 27, L1 6.0557e-05, Linf 0.00218642, total time[s] 0.070683 +Converged at iteration 31, L1 6.84178e-05, Linf 0.00805926, total time[s] 0.080193 +Converged at iteration 31, L1 6.20044e-05, Linf 0.00229645, total time[s] 0.081984 +Converged at iteration 32, L1 5.38124e-05, Linf 0.00328515, total time[s] 0.084002 +Converged at iteration 29, L1 8.8658e-05, Linf 0.00384894, total time[s] 0.093364 +Converged at iteration 31, L1 6.34327e-05, Linf 0.0138214, total time[s] 0.09029 +Converged at iteration 29, L1 8.49391e-05, Linf 0.0158148, total time[s] 0.081084 +Converged at iteration 25, L1 5.58589e-05, Linf 0.00262663, total time[s] 0.073751 +Converged at iteration 37, L1 4.67832e-05, Linf 0.0071825, total time[s] 0.098224 +Converged at iteration 34, L1 7.64641e-05, Linf 0.00569274, total time[s] 0.104156 +Converged at iteration 25, L1 5.75078e-05, Linf 0.00337167, total time[s] 0.068134 +Converged at iteration 24, L1 8.09075e-05, Linf 0.0144625, total time[s] 0.116127 +Converged at iteration 27, L1 6.20413e-05, Linf 0.0161495, total time[s] 0.074607 +Converged at iteration 26, L1 5.89599e-05, Linf 0.0181272, total time[s] 0.101814 +Converged at iteration 21, L1 3.91553e-05, Linf 0.00725586, total time[s] 0.093952 +Converged at iteration 19, L1 8.83999e-05, Linf 0.0040297, total time[s] 0.067491 +Converged at iteration 24, L1 6.2844e-05, Linf 0.00252677, total time[s] 0.086058 +Converged at iteration 23, L1 9.45194e-05, Linf 0.0115748, total time[s] 0.090933 +Converged at iteration 21, L1 4.44596e-05, Linf 0.00213783, total time[s] 0.086572 +Converged at iteration 19, L1 7.78691e-05, Linf 0.00247424, total time[s] 0.052508 +Converged at iteration 31, L1 8.5496e-05, Linf 0.0116637, total time[s] 0.085016 +Converged at iteration 22, L1 6.94744e-05, Linf 0.00337946, total time[s] 0.063975 +Converged at iteration 23, L1 7.79034e-05, Linf 0.00701851, total time[s] 0.064007 +Converged at iteration 27, L1 6.42863e-05, Linf 0.00339472, total time[s] 0.071187 +Converged at iteration 24, L1 6.27659e-05, Linf 0.00450335, total time[s] 0.065695 +Converged at iteration 23, L1 8.81218e-05, Linf 0.00480264, total time[s] 0.063104 +Converged at iteration 25, L1 7.89864e-05, Linf 0.00495447, total time[s] 0.066814 +Converged at iteration 25, L1 8.31894e-05, Linf 0.00572726, total time[s] 0.071348 +Converged at iteration 27, L1 8.45975e-05, Linf 0.00685586, total time[s] 0.072127 +Converged at iteration 32, L1 6.21042e-05, Linf 0.00327892, total time[s] 0.088862 +Converged at iteration 26, L1 9.65896e-05, Linf 0.0029657, total time[s] 0.074556 +Converged at iteration 31, L1 6.9776e-05, Linf 0.00833367, total time[s] 0.082214 +Converged at iteration 31, L1 5.9617e-05, Linf 0.00233692, total time[s] 0.093021 +Converged at iteration 32, L1 5.85006e-05, Linf 0.00270338, total time[s] 0.084612 +Converged at iteration 29, L1 9.39943e-05, Linf 0.00344079, total time[s] 0.077368 +Converged at iteration 31, L1 6.86319e-05, Linf 0.0147435, total time[s] 0.079894 +Converged at iteration 29, L1 8.55081e-05, Linf 0.0163782, total time[s] 0.079512 +Converged at iteration 25, L1 5.61351e-05, Linf 0.00254066, total time[s] 0.067797 +Converged at iteration 37, L1 4.84642e-05, Linf 0.00740681, total time[s] 0.096782 +Converged at iteration 34, L1 8.05938e-05, Linf 0.00628968, total time[s] 0.097829 +Converged at iteration 25, L1 5.73584e-05, Linf 0.00339267, total time[s] 0.066214 +Converged at iteration 24, L1 7.88382e-05, Linf 0.0141195, total time[s] 0.063063 +Converged at iteration 27, L1 6.21504e-05, Linf 0.0159481, total time[s] 0.070316 +Converged at iteration 26, L1 5.90369e-05, Linf 0.0183154, total time[s] 0.068332 +Converged at iteration 21, L1 3.89579e-05, Linf 0.00730726, total time[s] 0.065256 +Converged at iteration 19, L1 8.63534e-05, Linf 0.00404464, total time[s] 0.11277 +Converged at iteration 24, L1 6.24488e-05, Linf 0.00248003, total time[s] 0.098097 +Converged at iteration 23, L1 9.54733e-05, Linf 0.011137, total time[s] 0.109023 +Converged at iteration 21, L1 4.57715e-05, Linf 0.00221548, total time[s] 0.09681 +Converged at iteration 19, L1 8.11258e-05, Linf 0.00260577, total time[s] 0.06686 +Converged at iteration 31, L1 8.57762e-05, Linf 0.0118824, total time[s] 0.088102 +Converged at iteration 22, L1 6.88534e-05, Linf 0.00342683, total time[s] 0.066342 +Converged at iteration 23, L1 8.16374e-05, Linf 0.007135, total time[s] 0.079493 +Converged at iteration 27, L1 6.28016e-05, Linf 0.00338771, total time[s] 0.080864 +Converged at iteration 24, L1 6.14031e-05, Linf 0.004405, total time[s] 0.06518 +Converged at iteration 23, L1 8.86652e-05, Linf 0.00485051, total time[s] 0.061293 +Converged at iteration 25, L1 7.96603e-05, Linf 0.00503452, total time[s] 0.065571 +Converged at iteration 25, L1 8.55098e-05, Linf 0.00579507, total time[s] 0.070231 +Converged at iteration 27, L1 8.38848e-05, Linf 0.00616297, total time[s] 0.081895 +Converged at iteration 32, L1 6.63875e-05, Linf 0.00331861, total time[s] 0.088848 +Converged at iteration 26, L1 9.32223e-05, Linf 0.00282038, total time[s] 0.06979 +Converged at iteration 31, L1 6.95934e-05, Linf 0.00835703, total time[s] 0.084213 +Converged at iteration 31, L1 5.84502e-05, Linf 0.0023239, total time[s] 0.083165 +Converged at iteration 32, L1 5.99436e-05, Linf 0.0027781, total time[s] 0.090213 +Converged at iteration 29, L1 9.73948e-05, Linf 0.0034178, total time[s] 0.084021 +Converged at iteration 31, L1 7.30336e-05, Linf 0.015185, total time[s] 0.086013 +Converged at iteration 29, L1 8.56461e-05, Linf 0.0166276, total time[s] 0.080953 +Converged at iteration 25, L1 5.56529e-05, Linf 0.00254923, total time[s] 0.067077 +Converged at iteration 37, L1 5.03856e-05, Linf 0.00779973, total time[s] 0.112103 +Converged at iteration 34, L1 8.94169e-05, Linf 0.00700116, total time[s] 0.094705 +Converged at iteration 25, L1 5.58406e-05, Linf 0.00347207, total time[s] 0.066025 +Converged at iteration 24, L1 7.79043e-05, Linf 0.0135257, total time[s] 0.063142 +Converged at iteration 27, L1 5.07484e-05, Linf 0.0153597, total time[s] 0.069779 +Converged at iteration 26, L1 5.87473e-05, Linf 0.0185254, total time[s] 0.070568 +Converged at iteration 21, L1 3.9806e-05, Linf 0.00735616, total time[s] 0.057724 +Converged at iteration 19, L1 8.52337e-05, Linf 0.00395445, total time[s] 0.053587 +Converged at iteration 24, L1 6.11287e-05, Linf 0.00252352, total time[s] 0.065341 +Converged at iteration 23, L1 9.87397e-05, Linf 0.0103763, total time[s] 0.082318 +Converged at iteration 21, L1 4.94681e-05, Linf 0.0108598, total time[s] 0.07299 +Converged at iteration 19, L1 8.72801e-05, Linf 0.00285993, total time[s] 0.061588 +Converged at iteration 31, L1 8.67567e-05, Linf 0.0124055, total time[s] 0.09949 +Converged at iteration 22, L1 6.82606e-05, Linf 0.00354857, total time[s] 0.072019 +Converged at iteration 23, L1 8.88664e-05, Linf 0.0073868, total time[s] 0.111636 +Converged at iteration 27, L1 6.00312e-05, Linf 0.00328686, total time[s] 0.073774 +Converged at iteration 24, L1 5.94255e-05, Linf 0.00422117, total time[s] 0.062898 +Converged at iteration 23, L1 9.09977e-05, Linf 0.00494459, total time[s] 0.060039 +Converged at iteration 25, L1 8.37802e-05, Linf 0.00523972, total time[s] 0.065401 +Converged at iteration 25, L1 9.65486e-05, Linf 0.00609229, total time[s] 0.065455 +Converged at iteration 27, L1 8.28331e-05, Linf 0.00582428, total time[s] 0.071113 +Converged at iteration 32, L1 6.49169e-05, Linf 0.00336205, total time[s] 0.080981 +Converged at iteration 26, L1 8.83984e-05, Linf 0.00253082, total time[s] 0.066976 +Converged at iteration 31, L1 7.14325e-05, Linf 0.0085177, total time[s] 0.078292 +Converged at iteration 30, L1 9.96024e-05, Linf 0.00337164, total time[s] 0.076677 +Converged at iteration 32, L1 6.31872e-05, Linf 0.0029559, total time[s] 0.080222 +Converged at iteration 30, L1 7.10761e-05, Linf 0.00289853, total time[s] 0.076025 +Converged at iteration 31, L1 8.11357e-05, Linf 0.0167403, total time[s] 0.078298 +Converged at iteration 29, L1 8.72424e-05, Linf 0.0174931, total time[s] 0.073051 +Converged at iteration 25, L1 5.66742e-05, Linf 0.00246988, total time[s] 0.064744 +Converged at iteration 37, L1 5.17722e-05, Linf 0.00800796, total time[s] 0.104866 +Converged at iteration 34, L1 9.3443e-05, Linf 0.00718457, total time[s] 0.098704 +Converged at iteration 25, L1 5.61754e-05, Linf 0.00350193, total time[s] 0.069632 +Converged at iteration 24, L1 7.72513e-05, Linf 0.0130429, total time[s] 0.068646 +Converged at iteration 27, L1 4.35161e-05, Linf 0.0149884, total time[s] 0.083134 +Converged at iteration 26, L1 5.78765e-05, Linf 0.018537, total time[s] 0.098586 +Converged at iteration 21, L1 3.9907e-05, Linf 0.0073919, total time[s] 0.071632 +Converged at iteration 19, L1 8.44517e-05, Linf 0.00397783, total time[s] 0.085424 +Converged at iteration 24, L1 6.05705e-05, Linf 0.00253538, total time[s] 0.070542 +Converged at iteration 23, L1 9.8541e-05, Linf 0.0099299, total time[s] 0.078919 +Converged at iteration 21, L1 4.93137e-05, Linf 0.00243847, total time[s] 0.072612 +Converged at iteration 19, L1 9.16847e-05, Linf 0.00299046, total time[s] 0.064025 +Converged at iteration 31, L1 8.85466e-05, Linf 0.0125099, total time[s] 0.10062 +Converged at iteration 22, L1 6.66963e-05, Linf 0.0035105, total time[s] 0.062678 +Converged at iteration 23, L1 9.23236e-05, Linf 0.00748434, total time[s] 0.064418 +Converged at iteration 27, L1 5.95941e-05, Linf 0.00325392, total time[s] 0.070767 +Converged at iteration 24, L1 5.87434e-05, Linf 0.00422423, total time[s] 0.062994 +Converged at iteration 23, L1 9.20459e-05, Linf 0.00496533, total time[s] 0.061879 +Converged at iteration 25, L1 8.64803e-05, Linf 0.00532683, total time[s] 0.072918 +Converged at iteration 25, L1 9.87135e-05, Linf 0.00622545, total time[s] 0.070642 +Converged at iteration 27, L1 8.19854e-05, Linf 0.00607146, total time[s] 0.091408 +Converged at iteration 32, L1 6.62362e-05, Linf 0.00493824, total time[s] 0.089767 +Converged at iteration 26, L1 8.71584e-05, Linf 0.00239703, total time[s] 0.101517 +Converged at iteration 31, L1 7.07661e-05, Linf 0.00859808, total time[s] 0.083806 +Converged at iteration 30, L1 9.80889e-05, Linf 0.0033763, total time[s] 0.08014 +Converged at iteration 32, L1 6.49988e-05, Linf 0.00303069, total time[s] 0.083127 +Converged at iteration 30, L1 7.37934e-05, Linf 0.00299895, total time[s] 0.140122 +Converged at iteration 31, L1 8.54159e-05, Linf 0.0171994, total time[s] 0.08473 +Converged at iteration 29, L1 8.67648e-05, Linf 0.017386, total time[s] 0.076928 +Converged at iteration 25, L1 5.5631e-05, Linf 0.00238737, total time[s] 0.064091 +Converged at iteration 37, L1 5.41752e-05, Linf 0.00844809, total time[s] 0.097913 +Converged at iteration 35, L1 3.56197e-05, Linf 0.00420872, total time[s] 0.093311 +Converged at iteration 25, L1 5.85255e-05, Linf 0.00357331, total time[s] 0.072978 +Converged at iteration 24, L1 7.7235e-05, Linf 0.0123802, total time[s] 0.087185 +Converged at iteration 27, L1 3.58017e-05, Linf 0.0139349, total time[s] 0.070146 +Converged at iteration 26, L1 5.56327e-05, Linf 0.018441, total time[s] 0.067986 +Converged at iteration 21, L1 4.06688e-05, Linf 0.00741865, total time[s] 0.055896 +Converged at iteration 19, L1 8.21061e-05, Linf 0.00384682, total time[s] 0.050655 +Converged at iteration 24, L1 6.03272e-05, Linf 0.00245816, total time[s] 0.062522 +Converged at iteration 23, L1 9.8521e-05, Linf 0.00907414, total time[s] 0.062859 +Converged at iteration 21, L1 5.20114e-05, Linf 0.00258099, total time[s] 0.068117 +Converged at iteration 19, L1 9.76951e-05, Linf 0.00324485, total time[s] 0.054362 +Converged at iteration 31, L1 8.84186e-05, Linf 0.0129599, total time[s] 0.080536 +Converged at iteration 22, L1 6.65625e-05, Linf 0.00370235, total time[s] 0.059119 +Converged at iteration 24, L1 5.85181e-05, Linf 0.00447742, total time[s] 0.069422 +Converged at iteration 27, L1 5.8509e-05, Linf 0.00314479, total time[s] 0.069525 +Converged at iteration 24, L1 5.86914e-05, Linf 0.00426949, total time[s] 0.062171 +Converged at iteration 23, L1 9.59827e-05, Linf 0.00504085, total time[s] 0.060288 +Converged at iteration 25, L1 9.1157e-05, Linf 0.00557456, total time[s] 0.06435 +Converged at iteration 26, L1 5.9101e-05, Linf 0.00416968, total time[s] 0.066109 +Converged at iteration 27, L1 8.18929e-05, Linf 0.00618007, total time[s] 0.070877 +Converged at iteration 32, L1 6.54856e-05, Linf 0.00356117, total time[s] 0.081688 +Converged at iteration 26, L1 8.09958e-05, Linf 0.00229193, total time[s] 0.070437 +Converged at iteration 31, L1 7.24633e-05, Linf 0.00885047, total time[s] 0.105291 +Converged at iteration 31, L1 5.81908e-05, Linf 0.00232091, total time[s] 0.095131 +Converged at iteration 32, L1 6.76055e-05, Linf 0.00314609, total time[s] 0.104841 +Converged at iteration 30, L1 8.11294e-05, Linf 0.00328227, total time[s] 0.099431 +Converged at iteration 31, L1 9.66749e-05, Linf 0.0186195, total time[s] 0.100153 +Converged at iteration 29, L1 8.84472e-05, Linf 0.0179445, total time[s] 0.085461 +Converged at iteration 25, L1 5.67403e-05, Linf 0.002427, total time[s] 0.065461 +Converged at iteration 37, L1 5.55246e-05, Linf 0.00865329, total time[s] 0.100987 +Converged at iteration 35, L1 3.68365e-05, Linf 0.00436742, total time[s] 0.104479 +Converged at iteration 25, L1 5.91495e-05, Linf 0.00358255, total time[s] 0.071016 +Converged at iteration 24, L1 7.73434e-05, Linf 0.0120585, total time[s] 0.06298 +Converged at iteration 27, L1 3.45243e-05, Linf 0.0133915, total time[s] 0.068539 +Converged at iteration 26, L1 5.49601e-05, Linf 0.0183393, total time[s] 0.069225 +Converged at iteration 21, L1 4.1175e-05, Linf 0.00744937, total time[s] 0.061898 +Converged at iteration 19, L1 7.93728e-05, Linf 0.00387231, total time[s] 0.062948 +Converged at iteration 24, L1 6.04603e-05, Linf 0.00241551, total time[s] 0.077498 +Converged at iteration 23, L1 9.90932e-05, Linf 0.00870816, total time[s] 0.08707 +Converged at iteration 21, L1 5.36375e-05, Linf 0.0026525, total time[s] 0.059838 +Converged at iteration 20, L1 4.53809e-05, Linf 0.00204951, total time[s] 0.058473 +Converged at iteration 31, L1 8.908e-05, Linf 0.0131014, total time[s] 0.10373 +Converged at iteration 22, L1 6.572e-05, Linf 0.00374236, total time[s] 0.069076 +Converged at iteration 24, L1 5.65209e-05, Linf 0.00449956, total time[s] 0.065324 +Converged at iteration 27, L1 5.79967e-05, Linf 0.00312581, total time[s] 0.0805 +Converged at iteration 24, L1 6.23593e-05, Linf 0.00442256, total time[s] 0.081 +Converged at iteration 23, L1 9.71185e-05, Linf 0.00506005, total time[s] 0.073979 +Converged at iteration 25, L1 9.39347e-05, Linf 0.00568686, total time[s] 0.069688 +Converged at iteration 26, L1 6.15596e-05, Linf 0.00428015, total time[s] 0.067728 +Converged at iteration 27, L1 8.20029e-05, Linf 0.00622285, total time[s] 0.068809 +Converged at iteration 32, L1 6.54473e-05, Linf 0.00366189, total time[s] 0.084214 +Converged at iteration 26, L1 7.86791e-05, Linf 0.0023451, total time[s] 0.067061 +Converged at iteration 31, L1 7.11596e-05, Linf 0.00880813, total time[s] 0.087501 +Converged at iteration 30, L1 9.75569e-05, Linf 0.00344151, total time[s] 0.088959 +Converged at iteration 32, L1 6.90251e-05, Linf 0.00321762, total time[s] 0.081014 +Converged at iteration 30, L1 8.3677e-05, Linf 0.00340307, total time[s] 0.077904 +Converged at iteration 32, L1 3.43023e-05, Linf 0.00865658, total time[s] 0.079471 +Converged at iteration 29, L1 8.86825e-05, Linf 0.0181066, total time[s] 0.08041 +Converged at iteration 25, L1 5.69095e-05, Linf 0.00241325, total time[s] 0.077171 +Converged at iteration 37, L1 5.87678e-05, Linf 0.00913631, total time[s] 0.107164 +Converged at iteration 35, L1 4.83931e-05, Linf 0.00473562, total time[s] 0.088335 +Converged at iteration 25, L1 6.14108e-05, Linf 0.00361891, total time[s] 0.067249 +Converged at iteration 24, L1 7.91836e-05, Linf 0.011428, total time[s] 0.062222 +Converged at iteration 26, L1 9.8642e-05, Linf 0.0216633, total time[s] 0.092274 +Converged at iteration 26, L1 5.28958e-05, Linf 0.0180558, total time[s] 0.089104 +Converged at iteration 21, L1 4.2574e-05, Linf 0.00739395, total time[s] 0.067136 +Converged at iteration 19, L1 7.54422e-05, Linf 0.00372029, total time[s] 0.061141 +Converged at iteration 24, L1 6.0086e-05, Linf 0.00239295, total time[s] 0.073751 +Converged at iteration 24, L1 5.35611e-05, Linf 0.00260463, total time[s] 0.074928 +Converged at iteration 21, L1 5.69574e-05, Linf 0.00281113, total time[s] 0.062754 +Converged at iteration 20, L1 4.94364e-05, Linf 0.00223353, total time[s] 0.063489 +Converged at iteration 31, L1 9.38337e-05, Linf 0.0135246, total time[s] 0.094634 +Converged at iteration 22, L1 6.57561e-05, Linf 0.00386095, total time[s] 0.059441 +Converged at iteration 24, L1 5.88558e-05, Linf 0.00468193, total time[s] 0.063313 +Converged at iteration 27, L1 5.48753e-05, Linf 0.00300421, total time[s] 0.071253 +Converged at iteration 24, L1 6.03046e-05, Linf 0.00473767, total time[s] 0.068517 +Converged at iteration 23, L1 9.95251e-05, Linf 0.00512866, total time[s] 0.064215 +Converged at iteration 25, L1 9.96759e-05, Linf 0.00596832, total time[s] 0.065223 +Converged at iteration 26, L1 7.0001e-05, Linf 0.00460748, total time[s] 0.066472 +Converged at iteration 27, L1 8.24019e-05, Linf 0.006229, total time[s] 0.069478 +Converged at iteration 32, L1 6.53743e-05, Linf 0.00381728, total time[s] 0.080419 +Converged at iteration 26, L1 7.3869e-05, Linf 0.00247346, total time[s] 0.073489 +Converged at iteration 31, L1 7.2032e-05, Linf 0.00898184, total time[s] 0.0791 +Converged at iteration 30, L1 9.68883e-05, Linf 0.00347454, total time[s] 0.078658 +Converged at iteration 32, L1 7.24499e-05, Linf 0.00332637, total time[s] 0.08319 +Converged at iteration 30, L1 9.21219e-05, Linf 0.00374857, total time[s] 0.084822 +Converged at iteration 32, L1 3.79975e-05, Linf 0.00948169, total time[s] 0.086517 +Converged at iteration 29, L1 9.0821e-05, Linf 0.0186355, total time[s] 0.075738 +Converged at iteration 25, L1 5.72536e-05, Linf 0.00250021, total time[s] 0.067108 +Converged at iteration 37, L1 5.96929e-05, Linf 0.0093452, total time[s] 0.095411 +Converged at iteration 35, L1 4.20818e-05, Linf 0.0048994, total time[s] 0.102924 +Converged at iteration 25, L1 6.09589e-05, Linf 0.00360093, total time[s] 0.06692 +Converged at iteration 24, L1 7.88712e-05, Linf 0.0110947, total time[s] 0.064118 +Converged at iteration 26, L1 8.92998e-05, Linf 0.0211569, total time[s] 0.068797 +Converged at iteration 26, L1 5.21946e-05, Linf 0.0177039, total time[s] 0.075332 +Converged at iteration 21, L1 4.26893e-05, Linf 0.00747586, total time[s] 0.069265 +Converged at iteration 19, L1 7.23992e-05, Linf 0.00373683, total time[s] 0.058943 +Converged at iteration 24, L1 5.88919e-05, Linf 0.00235145, total time[s] 0.075817 +Converged at iteration 24, L1 5.39154e-05, Linf 0.00250161, total time[s] 0.069466 +Converged at iteration 21, L1 5.77982e-05, Linf 0.00287064, total time[s] 0.070957 +Converged at iteration 20, L1 5.06157e-05, Linf 0.00230933, total time[s] 0.055628 +Converged at iteration 31, L1 9.46242e-05, Linf 0.0136453, total time[s] 0.087378 +Converged at iteration 22, L1 6.55646e-05, Linf 0.0039009, total time[s] 0.05996 +Converged at iteration 24, L1 5.97468e-05, Linf 0.00465095, total time[s] 0.068153 +Converged at iteration 27, L1 5.48505e-05, Linf 0.0029844, total time[s] 0.075184 +Converged at iteration 24, L1 6.0984e-05, Linf 0.00489881, total time[s] 0.069343 +Converged at iteration 24, L1 5.37442e-05, Linf 0.00326232, total time[s] 0.066418 +Converged at iteration 26, L1 5.08009e-05, Linf 0.0034198, total time[s] 0.071665 +Converged at iteration 26, L1 7.26489e-05, Linf 0.00470544, total time[s] 0.071506 +Converged at iteration 27, L1 8.23495e-05, Linf 0.00630295, total time[s] 0.070985 +Converged at iteration 32, L1 6.56978e-05, Linf 0.00389577, total time[s] 0.083421 +Converged at iteration 26, L1 7.22809e-05, Linf 0.00251902, total time[s] 0.070045 +Converged at iteration 31, L1 7.12344e-05, Linf 0.00899134, total time[s] 0.082205 +Converged at iteration 30, L1 9.7823e-05, Linf 0.00346736, total time[s] 0.078897 +Converged at iteration 32, L1 7.41303e-05, Linf 0.00338871, total time[s] 0.084145 +Converged at iteration 30, L1 9.45169e-05, Linf 0.00388402, total time[s] 0.07783 +Converged at iteration 32, L1 3.96991e-05, Linf 0.0098368, total time[s] 0.082597 +Converged at iteration 29, L1 9.12392e-05, Linf 0.0187673, total time[s] 0.074864 +Converged at iteration 25, L1 5.76144e-05, Linf 0.00280751, total time[s] 0.064414 +Converged at iteration 37, L1 6.28448e-05, Linf 0.00986554, total time[s] 0.104494 +Converged at iteration 35, L1 4.61323e-05, Linf 0.00538453, total time[s] 0.097475 +Converged at iteration 25, L1 6.10405e-05, Linf 0.00360745, total time[s] 0.066733 +Converged at iteration 24, L1 8.15395e-05, Linf 0.0105659, total time[s] 0.062783 +Converged at iteration 26, L1 8.21633e-05, Linf 0.0201871, total time[s] 0.067261 +Converged at iteration 26, L1 5.20949e-05, Linf 0.01762, total time[s] 0.069314 +Converged at iteration 21, L1 4.37587e-05, Linf 0.00748667, total time[s] 0.072875 +Converged at iteration 19, L1 6.82475e-05, Linf 0.00356994, total time[s] 0.074647 +Converged at iteration 24, L1 5.81613e-05, Linf 0.00230276, total time[s] 0.080503 +Converged at iteration 24, L1 5.3928e-05, Linf 0.00230932, total time[s] 0.073756 +Converged at iteration 21, L1 6.12793e-05, Linf 0.0030348, total time[s] 0.065644 +Converged at iteration 20, L1 5.49231e-05, Linf 0.00249521, total time[s] 0.068455 +Converged at iteration 31, L1 9.85883e-05, Linf 0.0140229, total time[s] 0.096884 +Converged at iteration 22, L1 6.58537e-05, Linf 0.00402887, total time[s] 0.056679 +Converged at iteration 24, L1 5.79041e-05, Linf 0.00472998, total time[s] 0.061671 +Converged at iteration 27, L1 5.31745e-05, Linf 0.00285682, total time[s] 0.06818 +Converged at iteration 24, L1 6.20713e-05, Linf 0.00507143, total time[s] 0.114216 +Converged at iteration 24, L1 5.51794e-05, Linf 0.00328258, total time[s] 0.066919 +Converged at iteration 26, L1 5.14419e-05, Linf 0.00357884, total time[s] 0.066082 +Converged at iteration 26, L1 8.07554e-05, Linf 0.00504616, total time[s] 0.072311 +Converged at iteration 27, L1 8.4228e-05, Linf 0.0063381, total time[s] 0.073284 +Converged at iteration 32, L1 6.67683e-05, Linf 0.00397921, total time[s] 0.086303 +Converged at iteration 26, L1 7.04668e-05, Linf 0.0026273, total time[s] 0.216308 +Converged at iteration 31, L1 7.14136e-05, Linf 0.00914733, total time[s] 0.087481 +Converged at iteration 30, L1 9.57917e-05, Linf 0.003476, total time[s] 0.089286 +Converged at iteration 32, L1 7.85476e-05, Linf 0.00349547, total time[s] 0.085855 +Converged at iteration 31, L1 6.19926e-05, Linf 0.00332061, total time[s] 0.082573 +Converged at iteration 32, L1 4.4243e-05, Linf 0.0107773, total time[s] 0.083628 +Converged at iteration 29, L1 9.49917e-05, Linf 0.019256, total time[s] 0.077322 +Converged at iteration 25, L1 5.88548e-05, Linf 0.00274488, total time[s] 0.066948 +Converged at iteration 37, L1 6.46168e-05, Linf 0.00990913, total time[s] 0.111304 +Converged at iteration 35, L1 4.77591e-05, Linf 0.00556269, total time[s] 0.106912 +Converged at iteration 25, L1 6.11651e-05, Linf 0.00359343, total time[s] 0.067028 +Converged at iteration 24, L1 8.17005e-05, Linf 0.0103221, total time[s] 0.062905 +Converged at iteration 26, L1 7.79363e-05, Linf 0.0199095, total time[s] 0.067622 +Converged at iteration 26, L1 5.21296e-05, Linf 0.0176388, total time[s] 0.067864 +Converged at iteration 21, L1 4.40863e-05, Linf 0.00760404, total time[s] 0.067565 +Converged at iteration 19, L1 6.57707e-05, Linf 0.0035737, total time[s] 0.060155 +Converged at iteration 24, L1 5.79018e-05, Linf 0.00229338, total time[s] 0.070893 +Converged at iteration 24, L1 5.59556e-05, Linf 0.0022079, total time[s] 0.078382 +Converged at iteration 21, L1 6.24018e-05, Linf 0.00308774, total time[s] 0.064311 +Converged at iteration 20, L1 5.6007e-05, Linf 0.00257058, total time[s] 0.06523 +Converged at iteration 32, L1 3.88719e-05, Linf 0.0085366, total time[s] 0.088278 +Converged at iteration 22, L1 6.61236e-05, Linf 0.00407271, total time[s] 0.059123 +Converged at iteration 24, L1 5.69829e-05, Linf 0.00480468, total time[s] 0.066641 +Converged at iteration 27, L1 5.28402e-05, Linf 0.00282926, total time[s] 0.074353 +Converged at iteration 24, L1 6.17281e-05, Linf 0.00502649, total time[s] 0.093951 +Converged at iteration 24, L1 5.53622e-05, Linf 0.00327463, total time[s] 0.070347 +Converged at iteration 26, L1 5.28884e-05, Linf 0.00363453, total time[s] 0.072375 +Converged at iteration 26, L1 8.47047e-05, Linf 0.00516828, total time[s] 0.070315 +Converged at iteration 27, L1 8.42962e-05, Linf 0.00634255, total time[s] 0.073151 +Converged at iteration 32, L1 6.73678e-05, Linf 0.00401508, total time[s] 0.084742 +Converged at iteration 26, L1 7.00033e-05, Linf 0.0026492, total time[s] 0.068166 +Converged at iteration 31, L1 7.40773e-05, Linf 0.00912136, total time[s] 0.079935 +Converged at iteration 30, L1 9.79999e-05, Linf 0.00346825, total time[s] 0.077424 +Converged at iteration 32, L1 7.89897e-05, Linf 0.00354454, total time[s] 0.08218 +Converged at iteration 31, L1 6.04701e-05, Linf 0.00367276, total time[s] 0.081123 +Converged at iteration 32, L1 4.60978e-05, Linf 0.0111568, total time[s] 0.081096 +Converged at iteration 29, L1 9.57061e-05, Linf 0.0191579, total time[s] 0.073247 +Converged at iteration 25, L1 6.03268e-05, Linf 0.00272882, total time[s] 0.077347 +Converged at iteration 37, L1 6.76738e-05, Linf 0.0100406, total time[s] 0.177272 +Converged at iteration 35, L1 5.21449e-05, Linf 0.00611174, total time[s] 0.156267 +Converged at iteration 25, L1 6.2492e-05, Linf 0.00351861, total time[s] 0.080985 +Converged at iteration 24, L1 8.30056e-05, Linf 0.00976597, total time[s] 0.106311 +Converged at iteration 26, L1 7.15735e-05, Linf 0.018697, total time[s] 0.119467 +Converged at iteration 26, L1 5.24573e-05, Linf 0.0172558, total time[s] 0.131945 +Converged at iteration 21, L1 4.62135e-05, Linf 0.00750619, total time[s] 0.09657 +Converged at iteration 19, L1 6.15093e-05, Linf 0.00341082, total time[s] 0.082319 +Converged at iteration 24, L1 5.66233e-05, Linf 0.00288615, total time[s] 0.094154 +Converged at iteration 24, L1 5.73981e-05, Linf 0.00736556, total time[s] 0.111126 +Converged at iteration 21, L1 6.5796e-05, Linf 0.00324305, total time[s] 0.074981 +Converged at iteration 20, L1 5.99265e-05, Linf 0.00276204, total time[s] 0.058211 +Converged at iteration 32, L1 3.97337e-05, Linf 0.00863174, total time[s] 0.083237 +Converged at iteration 22, L1 6.78976e-05, Linf 0.00422372, total time[s] 0.059092 +Converged at iteration 24, L1 5.63398e-05, Linf 0.00498708, total time[s] 0.063574 +Converged at iteration 27, L1 5.3568e-05, Linf 0.00275601, total time[s] 0.074095 +Converged at iteration 24, L1 6.20979e-05, Linf 0.00484214, total time[s] 0.064561 +Converged at iteration 24, L1 5.54755e-05, Linf 0.0032949, total time[s] 0.0648 +Converged at iteration 26, L1 5.71295e-05, Linf 0.00381594, total time[s] 0.068644 +Converged at iteration 26, L1 9.32262e-05, Linf 0.00556587, total time[s] 0.068449 +Converged at iteration 27, L1 8.48853e-05, Linf 0.0063228, total time[s] 0.070445 +Converged at iteration 32, L1 6.86807e-05, Linf 0.00420563, total time[s] 0.084477 +Converged at iteration 26, L1 7.26585e-05, Linf 0.00278878, total time[s] 0.069513 +Converged at iteration 31, L1 7.13198e-05, Linf 0.00925153, total time[s] 0.079846 +Converged at iteration 30, L1 9.52374e-05, Linf 0.00347017, total time[s] 0.078004 +Converged at iteration 32, L1 8.17392e-05, Linf 0.00365705, total time[s] 0.085077 +Converged at iteration 31, L1 5.69691e-05, Linf 0.00360505, total time[s] 0.082584 +Converged at iteration 32, L1 5.014e-05, Linf 0.0122421, total time[s] 0.083267 +Converged at iteration 29, L1 9.55875e-05, Linf 0.0198299, total time[s] 0.075645 +Converged at iteration 25, L1 6.00732e-05, Linf 0.00289624, total time[s] 0.065353 +Converged at iteration 37, L1 6.89954e-05, Linf 0.0102426, total time[s] 0.10056 +Converged at iteration 35, L1 5.31039e-05, Linf 0.00629436, total time[s] 0.094809 +Converged at iteration 25, L1 6.18976e-05, Linf 0.0034251, total time[s] 0.066138 +Converged at iteration 24, L1 8.30549e-05, Linf 0.00949223, total time[s] 0.064619 +Converged at iteration 26, L1 6.38276e-05, Linf 0.0180333, total time[s] 0.070433 +Converged at iteration 26, L1 5.20182e-05, Linf 0.017339, total time[s] 0.070398 +Converged at iteration 21, L1 4.64152e-05, Linf 0.00751483, total time[s] 0.058825 +Converged at iteration 19, L1 5.81061e-05, Linf 0.0034277, total time[s] 0.068784 +Converged at iteration 24, L1 5.59826e-05, Linf 0.00261204, total time[s] 0.067068 +Converged at iteration 24, L1 5.76722e-05, Linf 0.00369935, total time[s] 0.068579 +Converged at iteration 21, L1 6.71666e-05, Linf 0.00329651, total time[s] 0.07493 +Converged at iteration 20, L1 6.15231e-05, Linf 0.00283313, total time[s] 0.069344 +Converged at iteration 32, L1 4.0031e-05, Linf 0.00863952, total time[s] 0.093071 +Converged at iteration 22, L1 6.85132e-05, Linf 0.00428559, total time[s] 0.057638 +Converged at iteration 24, L1 5.57751e-05, Linf 0.00497564, total time[s] 0.066212 +Converged at iteration 27, L1 5.36865e-05, Linf 0.00274463, total time[s] 0.070868 +Converged at iteration 24, L1 6.16407e-05, Linf 0.00471897, total time[s] 0.066424 +Converged at iteration 24, L1 5.51823e-05, Linf 0.00328191, total time[s] 0.068603 +Converged at iteration 26, L1 5.59081e-05, Linf 0.00389401, total time[s] 0.070498 +Converged at iteration 26, L1 9.70697e-05, Linf 0.00569638, total time[s] 0.072581 +Converged at iteration 27, L1 8.4662e-05, Linf 0.00632378, total time[s] 0.071849 +Converged at iteration 32, L1 6.87272e-05, Linf 0.00439753, total time[s] 0.084343 +Converged at iteration 26, L1 7.40161e-05, Linf 0.00276693, total time[s] 0.072907 +Converged at iteration 31, L1 7.12091e-05, Linf 0.00924219, total time[s] 0.083055 +Converged at iteration 30, L1 9.47478e-05, Linf 0.00345305, total time[s] 0.080039 +Converged at iteration 32, L1 8.29757e-05, Linf 0.00371367, total time[s] 0.086924 +Converged at iteration 31, L1 5.58696e-05, Linf 0.00381306, total time[s] 0.082299 +Converged at iteration 32, L1 5.22248e-05, Linf 0.012651, total time[s] 0.083753 +Converged at iteration 29, L1 9.57e-05, Linf 0.0199101, total time[s] 0.07801 +Converged at iteration 25, L1 6.059e-05, Linf 0.00290719, total time[s] 0.066131 +Converged at iteration 37, L1 7.29883e-05, Linf 0.0108543, total time[s] 0.09686 +Converged at iteration 35, L1 5.72708e-05, Linf 0.00686131, total time[s] 0.10054 +Converged at iteration 25, L1 6.32469e-05, Linf 0.00341927, total time[s] 0.073233 +Converged at iteration 24, L1 8.41515e-05, Linf 0.00902424, total time[s] 0.063895 +Converged at iteration 26, L1 6.3333e-05, Linf 0.0167476, total time[s] 0.068368 +Converged at iteration 26, L1 5.2664e-05, Linf 0.0170938, total time[s] 0.069902 +Converged at iteration 21, L1 4.77338e-05, Linf 0.0075391, total time[s] 0.059418 +Converged at iteration 19, L1 5.14924e-05, Linf 0.00325957, total time[s] 0.057893 +Converged at iteration 24, L1 5.48376e-05, Linf 0.00237926, total time[s] 0.089177 +Converged at iteration 24, L1 6.00377e-05, Linf 0.01283, total time[s] 0.097679 +Converged at iteration 21, L1 7.02452e-05, Linf 0.00341187, total time[s] 0.071689 +Converged at iteration 20, L1 6.53091e-05, Linf 0.00301509, total time[s] 0.073667 +Converged at iteration 32, L1 4.1517e-05, Linf 0.00874635, total time[s] 0.105586 +Converged at iteration 22, L1 7.84708e-05, Linf 0.00518502, total time[s] 0.063917 +Converged at iteration 24, L1 6.03085e-05, Linf 0.00619109, total time[s] 0.064187 +Converged at iteration 27, L1 5.10092e-05, Linf 0.00263909, total time[s] 0.071543 +Converged at iteration 24, L1 6.15549e-05, Linf 0.00451018, total time[s] 0.062086 +Converged at iteration 24, L1 5.6439e-05, Linf 0.00329448, total time[s] 0.062647 +Converged at iteration 26, L1 5.91137e-05, Linf 0.0040635, total time[s] 0.073306 +Converged at iteration 27, L1 5.70645e-05, Linf 0.00370041, total time[s] 0.092418 +Converged at iteration 27, L1 8.72371e-05, Linf 0.00632849, total time[s] 0.072358 +Converged at iteration 32, L1 7.01556e-05, Linf 0.0045471, total time[s] 0.080499 +Converged at iteration 26, L1 8.1995e-05, Linf 0.00287009, total time[s] 0.066489 +Converged at iteration 31, L1 7.65515e-05, Linf 0.00927883, total time[s] 0.077581 +Converged at iteration 30, L1 9.90963e-05, Linf 0.00345968, total time[s] 0.075465 +Converged at iteration 32, L1 8.66408e-05, Linf 0.00382459, total time[s] 0.083309 +Converged at iteration 31, L1 5.55057e-05, Linf 0.00390512, total time[s] 0.077498 +Converged at iteration 32, L1 5.85867e-05, Linf 0.0137969, total time[s] 0.081312 +Converged at iteration 30, L1 3.35279e-05, Linf 0.00592226, total time[s] 0.076754 +Converged at iteration 25, L1 6.41806e-05, Linf 0.00312871, total time[s] 0.064777 +Converged at iteration 37, L1 7.43874e-05, Linf 0.0110713, total time[s] 0.092235 +Converged at iteration 35, L1 5.92263e-05, Linf 0.00706105, total time[s] 0.092708 +Converged at iteration 25, L1 6.41336e-05, Linf 0.00339466, total time[s] 0.069761 +Converged at iteration 24, L1 8.39192e-05, Linf 0.00875874, total time[s] 0.06236 +Converged at iteration 26, L1 5.5674e-05, Linf 0.0162806, total time[s] 0.068252 +Converged at iteration 26, L1 5.29254e-05, Linf 0.017476, total time[s] 0.068447 +Converged at iteration 21, L1 4.76246e-05, Linf 0.0075558, total time[s] 0.065119 +Converged at iteration 19, L1 4.91733e-05, Linf 0.00325573, total time[s] 0.057385 +Converged at iteration 24, L1 5.42957e-05, Linf 0.00225554, total time[s] 0.07589 +Converged at iteration 24, L1 5.98676e-05, Linf 0.00359639, total time[s] 0.088458 +Converged at iteration 21, L1 7.1499e-05, Linf 0.0034712, total time[s] 0.05828 +Converged at iteration 20, L1 6.65813e-05, Linf 0.00308389, total time[s] 0.056067 +Converged at iteration 32, L1 4.18779e-05, Linf 0.00857951, total time[s] 0.099589 +Converged at iteration 22, L1 7.0495e-05, Linf 0.00449869, total time[s] 0.059455 +Converged at iteration 24, L1 5.57643e-05, Linf 0.00501131, total time[s] 0.067569 +Converged at iteration 27, L1 5.02107e-05, Linf 0.00261129, total time[s] 0.071864 +Converged at iteration 24, L1 6.11956e-05, Linf 0.00443655, total time[s] 0.061418 +Converged at iteration 24, L1 5.55725e-05, Linf 0.00327592, total time[s] 0.061647 +Converged at iteration 26, L1 6.08753e-05, Linf 0.00412489, total time[s] 0.066521 +Converged at iteration 27, L1 5.80693e-05, Linf 0.00379548, total time[s] 0.071931 +Converged at iteration 27, L1 8.73206e-05, Linf 0.00631191, total time[s] 0.071216 +Converged at iteration 32, L1 7.0567e-05, Linf 0.004552, total time[s] 0.081175 +Converged at iteration 26, L1 8.42306e-05, Linf 0.00289242, total time[s] 0.068311 +Converged at iteration 31, L1 7.17152e-05, Linf 0.0093424, total time[s] 0.08425 +Converged at iteration 30, L1 9.66039e-05, Linf 0.00344967, total time[s] 0.080766 +Converged at iteration 32, L1 8.63671e-05, Linf 0.00388094, total time[s] 0.082153 +Converged at iteration 31, L1 5.6246e-05, Linf 0.00404681, total time[s] 0.080483 +Converged at iteration 32, L1 6.09992e-05, Linf 0.0146616, total time[s] 0.081256 +Converged at iteration 29, L1 9.70299e-05, Linf 0.0201448, total time[s] 0.074868 +Converged at iteration 25, L1 6.43662e-05, Linf 0.00313062, total time[s] 0.066371 +Converged at iteration 37, L1 7.83899e-05, Linf 0.0108508, total time[s] 0.099754 +Converged at iteration 35, L1 6.29149e-05, Linf 0.00764532, total time[s] 0.128865 +Converged at iteration 25, L1 6.58882e-05, Linf 0.00340445, total time[s] 0.073205 +Converged at iteration 24, L1 8.33587e-05, Linf 0.00830948, total time[s] 0.066445 +Converged at iteration 26, L1 5.06227e-05, Linf 0.0150328, total time[s] 0.072113 +Converged at iteration 26, L1 5.4867e-05, Linf 0.0170986, total time[s] 0.068226 +Converged at iteration 21, L1 4.83516e-05, Linf 0.00757039, total time[s] 0.059519 +Converged at iteration 19, L1 4.3443e-05, Linf 0.00319947, total time[s] 0.081464 +Converged at iteration 24, L1 5.31906e-05, Linf 0.00224095, total time[s] 0.064431 +Converged at iteration 24, L1 6.00274e-05, Linf 0.00226748, total time[s] 0.069138 +Converged at iteration 21, L1 7.46518e-05, Linf 0.00354912, total time[s] 0.061865 +Converged at iteration 20, L1 7.0256e-05, Linf 0.00326105, total time[s] 0.062141 +Converged at iteration 32, L1 4.30734e-05, Linf 0.00864298, total time[s] 0.095696 +Converged at iteration 22, L1 7.17354e-05, Linf 0.00465368, total time[s] 0.06345 +Converged at iteration 24, L1 5.68089e-05, Linf 0.00543019, total time[s] 0.06268 +Converged at iteration 27, L1 4.81032e-05, Linf 0.00249333, total time[s] 0.0715 +Converged at iteration 24, L1 6.02816e-05, Linf 0.00422823, total time[s] 0.062688 +Converged at iteration 24, L1 5.38584e-05, Linf 0.00326205, total time[s] 0.064415 +Converged at iteration 26, L1 6.63609e-05, Linf 0.00432224, total time[s] 0.076804 +Converged at iteration 27, L1 6.67773e-05, Linf 0.00410573, total time[s] 0.07302 +Converged at iteration 27, L1 8.72063e-05, Linf 0.00630952, total time[s] 0.07451 +Converged at iteration 32, L1 7.24265e-05, Linf 0.00454829, total time[s] 0.083783 +Converged at iteration 26, L1 9.63905e-05, Linf 0.00300823, total time[s] 0.068537 +Converged at iteration 31, L1 7.25978e-05, Linf 0.00956854, total time[s] 0.081257 +Converged at iteration 30, L1 9.89744e-05, Linf 0.00346542, total time[s] 0.077526 +Converged at iteration 32, L1 9.01985e-05, Linf 0.00399476, total time[s] 0.082829 +Converged at iteration 31, L1 5.81487e-05, Linf 0.00444823, total time[s] 0.07994 +Converged at iteration 32, L1 6.84831e-05, Linf 0.0154974, total time[s] 0.084222 +Converged at iteration 29, L1 9.75638e-05, Linf 0.0191947, total time[s] 0.080848 +Converged at iteration 25, L1 6.46838e-05, Linf 0.00310348, total time[s] 0.091918 +Converged at iteration 37, L1 7.99778e-05, Linf 0.0110704, total time[s] 0.097713 +Converged at iteration 35, L1 6.44265e-05, Linf 0.007843, total time[s] 0.097742 +Converged at iteration 25, L1 6.6512e-05, Linf 0.00338625, total time[s] 0.07505 +Converged at iteration 24, L1 8.24495e-05, Linf 0.00802978, total time[s] 0.062977 +Converged at iteration 26, L1 5.19501e-05, Linf 0.0146019, total time[s] 0.068047 +Converged at iteration 26, L1 5.47248e-05, Linf 0.0170775, total time[s] 0.071337 +Converged at iteration 21, L1 4.84221e-05, Linf 0.00758648, total time[s] 0.062943 +Converged at iteration 19, L1 4.2778e-05, Linf 0.00324862, total time[s] 0.066094 +Converged at iteration 24, L1 5.31422e-05, Linf 0.00225405, total time[s] 0.085488 +Converged at iteration 24, L1 6.19116e-05, Linf 0.00457507, total time[s] 0.081831 +Converged at iteration 21, L1 7.62429e-05, Linf 0.00359755, total time[s] 0.063652 +Converged at iteration 20, L1 7.18121e-05, Linf 0.00332628, total time[s] 0.05971 +Converged at iteration 32, L1 4.94379e-05, Linf 0.00872198, total time[s] 0.094782 +Converged at iteration 22, L1 7.31237e-05, Linf 0.00469516, total time[s] 0.062001 +Converged at iteration 24, L1 5.73682e-05, Linf 0.00560841, total time[s] 0.063523 +Converged at iteration 27, L1 4.83302e-05, Linf 0.00246691, total time[s] 0.074605 +Converged at iteration 24, L1 5.97013e-05, Linf 0.00412158, total time[s] 0.064568 +Converged at iteration 24, L1 5.29638e-05, Linf 0.00323581, total time[s] 0.067914 +Converged at iteration 26, L1 6.70405e-05, Linf 0.00439025, total time[s] 0.0711 +Converged at iteration 27, L1 6.78146e-05, Linf 0.00421131, total time[s] 0.081805 +Converged at iteration 27, L1 8.7476e-05, Linf 0.00633889, total time[s] 0.072044 +Converged at iteration 32, L1 7.31155e-05, Linf 0.00456444, total time[s] 0.082761 +Converged at iteration 26, L1 9.9878e-05, Linf 0.00303882, total time[s] 0.067366 +Converged at iteration 31, L1 7.20299e-05, Linf 0.00944159, total time[s] 0.077838 +Converged at iteration 30, L1 9.95246e-05, Linf 0.00346435, total time[s] 0.078003 +Converged at iteration 32, L1 9.19802e-05, Linf 0.00404955, total time[s] 0.081255 +Converged at iteration 31, L1 5.93784e-05, Linf 0.0045912, total time[s] 0.078646 +Converged at iteration 32, L1 7.12686e-05, Linf 0.0159393, total time[s] 0.080228 +Converged at iteration 29, L1 9.72094e-05, Linf 0.0186113, total time[s] 0.074122 +Converged at iteration 25, L1 6.59206e-05, Linf 0.00308657, total time[s] 0.064231 +Converged at iteration 37, L1 8.43669e-05, Linf 0.0113706, total time[s] 0.090741 +Converged at iteration 35, L1 6.89818e-05, Linf 0.00844381, total time[s] 0.090384 +Converged at iteration 25, L1 7.04956e-05, Linf 0.0033714, total time[s] 0.071553 +Converged at iteration 24, L1 8.07337e-05, Linf 0.00757833, total time[s] 0.062877 +Converged at iteration 26, L1 4.75977e-05, Linf 0.0134533, total time[s] 0.066241 +Converged at iteration 26, L1 5.6929e-05, Linf 0.0173545, total time[s] 0.0681 +Converged at iteration 21, L1 4.97738e-05, Linf 0.0075276, total time[s] 0.063913 +Converged at iteration 19, L1 4.362e-05, Linf 0.00347313, total time[s] 0.068093 +Converged at iteration 24, L1 5.36275e-05, Linf 0.00219312, total time[s] 0.081854 +Converged at iteration 24, L1 6.37262e-05, Linf 0.0045084, total time[s] 0.088085 +Converged at iteration 21, L1 7.99692e-05, Linf 0.00372231, total time[s] 0.091625 +Converged at iteration 20, L1 7.90533e-05, Linf 0.00349461, total time[s] 0.103614 +Converged at iteration 32, L1 4.61659e-05, Linf 0.00875978, total time[s] 0.115661 +Converged at iteration 22, L1 7.46283e-05, Linf 0.00484934, total time[s] 0.059851 +Converged at iteration 24, L1 5.82528e-05, Linf 0.00403273, total time[s] 0.061557 +Converged at iteration 27, L1 4.63728e-05, Linf 0.00234644, total time[s] 0.068974 +Converged at iteration 24, L1 5.88423e-05, Linf 0.00420866, total time[s] 0.06141 +Converged at iteration 23, L1 9.91261e-05, Linf 0.00515477, total time[s] 0.059346 +Converged at iteration 26, L1 7.18063e-05, Linf 0.0045847, total time[s] 0.065927 +Converged at iteration 27, L1 7.49438e-05, Linf 0.0045387, total time[s] 0.075649 +Converged at iteration 27, L1 8.80307e-05, Linf 0.00633097, total time[s] 0.115622 +Converged at iteration 32, L1 7.4629e-05, Linf 0.00460854, total time[s] 0.083125 +Converged at iteration 27, L1 7.09235e-05, Linf 0.0020328, total time[s] 0.066767 +Converged at iteration 31, L1 7.50034e-05, Linf 0.00946127, total time[s] 0.07547 +Converged at iteration 31, L1 5.95653e-05, Linf 0.0023268, total time[s] 0.083365 +Converged at iteration 32, L1 9.9391e-05, Linf 0.00421024, total time[s] 0.076673 +Converged at iteration 31, L1 6.22374e-05, Linf 0.005014, total time[s] 0.07451 +Converged at iteration 32, L1 7.91141e-05, Linf 0.0172508, total time[s] 0.078157 +Converged at iteration 30, L1 3.14326e-05, Linf 0.00626027, total time[s] 0.073952 +Converged at iteration 25, L1 6.70186e-05, Linf 0.00317958, total time[s] 0.062599 +Converged at iteration 37, L1 8.62897e-05, Linf 0.0116314, total time[s] 0.090624 +Converged at iteration 35, L1 7.06648e-05, Linf 0.00864893, total time[s] 0.090716 +Converged at iteration 25, L1 7.04543e-05, Linf 0.0033388, total time[s] 0.074841 +Converged at iteration 24, L1 8.02172e-05, Linf 0.00734115, total time[s] 0.064927 +Converged at iteration 26, L1 4.57189e-05, Linf 0.0130507, total time[s] 0.067248 +Converged at iteration 26, L1 5.79503e-05, Linf 0.0174421, total time[s] 0.063819 +Converged at iteration 21, L1 4.99561e-05, Linf 0.00783975, total time[s] 0.052659 +Converged at iteration 19, L1 4.67792e-05, Linf 0.0035211, total time[s] 0.050518 +Converged at iteration 24, L1 5.37083e-05, Linf 0.00324784, total time[s] 0.086235 +Converged at iteration 24, L1 6.39364e-05, Linf 0.00234175, total time[s] 0.082862 +Converged at iteration 21, L1 8.06933e-05, Linf 0.00379392, total time[s] 0.100186 +Converged at iteration 20, L1 7.69336e-05, Linf 0.00355083, total time[s] 0.080937 +Converged at iteration 32, L1 4.68931e-05, Linf 0.00876139, total time[s] 0.094323 +Converged at iteration 22, L1 7.56104e-05, Linf 0.00489854, total time[s] 0.058321 +Converged at iteration 24, L1 5.98879e-05, Linf 0.00465802, total time[s] 0.069769 +Converged at iteration 26, L1 9.95475e-05, Linf 0.00492299, total time[s] 0.068377 +Converged at iteration 24, L1 5.80382e-05, Linf 0.00420157, total time[s] 0.064594 +Converged at iteration 23, L1 9.81381e-05, Linf 0.00510021, total time[s] 0.061783 +Converged at iteration 26, L1 7.29962e-05, Linf 0.00465849, total time[s] 0.075912 +Converged at iteration 27, L1 7.62294e-05, Linf 0.00467593, total time[s] 0.078294 +Converged at iteration 27, L1 8.82461e-05, Linf 0.00634046, total time[s] 0.072037 +Converged at iteration 32, L1 7.54748e-05, Linf 0.00464366, total time[s] 0.099308 +Converged at iteration 27, L1 7.22702e-05, Linf 0.00205902, total time[s] 0.074949 +Converged at iteration 31, L1 7.20505e-05, Linf 0.00954411, total time[s] 0.129039 +Converged at iteration 31, L1 5.45974e-05, Linf 0.00233079, total time[s] 0.092424 +Converged at iteration 32, L1 9.92035e-05, Linf 0.00427012, total time[s] 0.087098 +Converged at iteration 31, L1 6.31277e-05, Linf 0.00517752, total time[s] 0.081354 +Converged at iteration 32, L1 8.17483e-05, Linf 0.0177434, total time[s] 0.08287 +Converged at iteration 29, L1 9.75181e-05, Linf 0.0167683, total time[s] 0.084874 +Converged at iteration 25, L1 6.63251e-05, Linf 0.00317873, total time[s] 0.074508 +Converged at iteration 37, L1 9.08157e-05, Linf 0.0122429, total time[s] 0.121655 +Converged at iteration 35, L1 7.52386e-05, Linf 0.00921855, total time[s] 0.124329 +Converged at iteration 25, L1 7.15672e-05, Linf 0.00328583, total time[s] 0.062424 +Converged at iteration 24, L1 7.83314e-05, Linf 0.00694545, total time[s] 0.061513 +Converged at iteration 26, L1 4.6713e-05, Linf 0.0120831, total time[s] 0.089883 +Converged at iteration 26, L1 6.19781e-05, Linf 0.0178586, total time[s] 0.09422 +Converged at iteration 21, L1 4.94047e-05, Linf 0.00763705, total time[s] 0.057731 +Converged at iteration 19, L1 5.2533e-05, Linf 0.00371845, total time[s] 0.051231 +Converged at iteration 23, L1 9.98988e-05, Linf 0.00331164, total time[s] 0.064341 +Converged at iteration 24, L1 6.42773e-05, Linf 0.00233044, total time[s] 0.077532 +Converged at iteration 21, L1 8.36644e-05, Linf 0.00388253, total time[s] 0.062452 +Converged at iteration 20, L1 8.03484e-05, Linf 0.00369654, total time[s] 0.068076 +Converged at iteration 32, L1 4.90588e-05, Linf 0.00884155, total time[s] 0.096175 +Converged at iteration 22, L1 8.12536e-05, Linf 0.00506304, total time[s] 0.056417 +Converged at iteration 24, L1 6.13295e-05, Linf 0.00478872, total time[s] 0.060929 +Converged at iteration 26, L1 9.53891e-05, Linf 0.00491661, total time[s] 0.063395 +Converged at iteration 24, L1 5.60964e-05, Linf 0.00408897, total time[s] 0.068395 +Converged at iteration 23, L1 9.82273e-05, Linf 0.00499509, total time[s] 0.061116 +Converged at iteration 26, L1 7.60974e-05, Linf 0.00484185, total time[s] 0.070305 +Converged at iteration 27, L1 8.23663e-05, Linf 0.0049668, total time[s] 0.076264 +Converged at iteration 27, L1 8.8912e-05, Linf 0.00635012, total time[s] 0.06785 +Converged at iteration 32, L1 7.78587e-05, Linf 0.00473631, total time[s] 0.078178 +Converged at iteration 27, L1 8.04491e-05, Linf 0.00214, total time[s] 0.067423 +Converged at iteration 31, L1 7.58936e-05, Linf 0.0096966, total time[s] 0.077693 +Converged at iteration 31, L1 5.80487e-05, Linf 0.00238802, total time[s] 0.089528 +Converged at iteration 33, L1 4.40431e-05, Linf 0.00425643, total time[s] 0.088647 +Converged at iteration 31, L1 6.69363e-05, Linf 0.00559218, total time[s] 0.103535 +Converged at iteration 32, L1 9.03383e-05, Linf 0.0191384, total time[s] 0.105147 +Converged at iteration 29, L1 9.76917e-05, Linf 0.0166514, total time[s] 0.093512 +Converged at iteration 25, L1 6.71357e-05, Linf 0.00308418, total time[s] 0.069189 +Converged at iteration 37, L1 9.23453e-05, Linf 0.0124185, total time[s] 0.111239 +Converged at iteration 35, L1 7.64149e-05, Linf 0.00942528, total time[s] 0.198002 +Converged at iteration 25, L1 7.10967e-05, Linf 0.00325304, total time[s] 0.074537 +Converged at iteration 24, L1 7.638e-05, Linf 0.00671646, total time[s] 0.074435 +Converged at iteration 26, L1 4.04367e-05, Linf 0.0117332, total time[s] 0.087016 +Converged at iteration 26, L1 6.34207e-05, Linf 0.0177768, total time[s] 0.077888 +Converged at iteration 21, L1 4.80862e-05, Linf 0.00756536, total time[s] 0.057504 +Converged at iteration 19, L1 5.64958e-05, Linf 0.00376451, total time[s] 0.056406 +Converged at iteration 23, L1 9.8197e-05, Linf 0.00326463, total time[s] 0.066809 +Converged at iteration 24, L1 6.58325e-05, Linf 0.00230256, total time[s] 0.097775 +Converged at iteration 21, L1 8.5468e-05, Linf 0.0039464, total time[s] 0.069073 +Converged at iteration 20, L1 8.19402e-05, Linf 0.00375517, total time[s] 0.056384 +Converged at iteration 32, L1 4.90274e-05, Linf 0.00880026, total time[s] 0.08862 +Converged at iteration 22, L1 7.68855e-05, Linf 0.00513875, total time[s] 0.057337 +Converged at iteration 24, L1 5.99803e-05, Linf 0.00435144, total time[s] 0.061765 +Converged at iteration 26, L1 9.47267e-05, Linf 0.00492421, total time[s] 0.06679 +Converged at iteration 24, L1 5.51069e-05, Linf 0.00397102, total time[s] 0.062628 +Converged at iteration 23, L1 9.77995e-05, Linf 0.00492894, total time[s] 0.060051 +Converged at iteration 26, L1 7.6692e-05, Linf 0.00489542, total time[s] 0.066268 +Converged at iteration 27, L1 8.5404e-05, Linf 0.00508925, total time[s] 0.07135 +Converged at iteration 27, L1 8.88942e-05, Linf 0.00638296, total time[s] 0.070212 +Converged at iteration 32, L1 7.84161e-05, Linf 0.00478325, total time[s] 0.08341 +Converged at iteration 27, L1 8.21588e-05, Linf 0.0021288, total time[s] 0.0705 +Converged at iteration 31, L1 7.22276e-05, Linf 0.00964434, total time[s] 0.078772 +Converged at iteration 31, L1 5.48862e-05, Linf 0.00234975, total time[s] 0.080227 +Converged at iteration 33, L1 4.31885e-05, Linf 0.00218837, total time[s] 0.084223 +Converged at iteration 31, L1 6.79114e-05, Linf 0.00575778, total time[s] 0.08076 +Converged at iteration 32, L1 9.26817e-05, Linf 0.019632, total time[s] 0.084849 +Converged at iteration 29, L1 9.73206e-05, Linf 0.0164127, total time[s] 0.082913 +Converged at iteration 25, L1 6.70095e-05, Linf 0.00306518, total time[s] 0.068179 +Converged at iteration 37, L1 9.73481e-05, Linf 0.0128548, total time[s] 0.095877 +Converged at iteration 35, L1 8.09318e-05, Linf 0.0100333, total time[s] 0.096317 +Converged at iteration 25, L1 7.25991e-05, Linf 0.00318716, total time[s] 0.070338 +Converged at iteration 24, L1 7.40051e-05, Linf 0.00633231, total time[s] 0.065175 +Converged at iteration 26, L1 4.83302e-05, Linf 0.010843, total time[s] 0.068982 +Converged at iteration 26, L1 7.32494e-05, Linf 0.0181967, total time[s] 0.067636 +Converged at iteration 21, L1 4.72484e-05, Linf 0.00765259, total time[s] 0.063115 +Converged at iteration 19, L1 6.45405e-05, Linf 0.0039714, total time[s] 0.069445 +Converged at iteration 23, L1 9.689e-05, Linf 0.00331753, total time[s] 0.074793 +Converged at iteration 24, L1 6.58445e-05, Linf 0.00226499, total time[s] 0.084197 +Converged at iteration 21, L1 8.82514e-05, Linf 0.00404296, total time[s] 0.072663 +Converged at iteration 20, L1 8.57504e-05, Linf 0.00387835, total time[s] 0.069359 +Converged at iteration 32, L1 5.15703e-05, Linf 0.00882219, total time[s] 0.092027 +Converged at iteration 22, L1 7.82914e-05, Linf 0.00528168, total time[s] 0.060661 +Converged at iteration 24, L1 6.17492e-05, Linf 0.00444012, total time[s] 0.064588 +Converged at iteration 26, L1 9.22778e-05, Linf 0.00484358, total time[s] 0.068273 +Converged at iteration 24, L1 5.40336e-05, Linf 0.00369516, total time[s] 0.067469 +Converged at iteration 23, L1 9.92186e-05, Linf 0.00480857, total time[s] 0.064791 +Converged at iteration 26, L1 8.25011e-05, Linf 0.00511869, total time[s] 0.068539 +Converged at iteration 27, L1 9.53599e-05, Linf 0.00545412, total time[s] 0.070481 +Converged at iteration 27, L1 9.07982e-05, Linf 0.00638665, total time[s] 0.074651 +Converged at iteration 32, L1 8.17787e-05, Linf 0.00662443, total time[s] 0.088618 +Converged at iteration 27, L1 8.9646e-05, Linf 0.00224114, total time[s] 0.075628 +Converged at iteration 31, L1 7.31645e-05, Linf 0.00990055, total time[s] 0.09453 +Converged at iteration 31, L1 5.66413e-05, Linf 0.00233566, total time[s] 0.095328 +Converged at iteration 33, L1 4.69024e-05, Linf 0.00234538, total time[s] 0.093138 +Converged at iteration 31, L1 7.22356e-05, Linf 0.00618313, total time[s] 0.085457 +Converged at iteration 33, L1 3.7752e-05, Linf 0.00857223, total time[s] 0.089823 +Converged at iteration 29, L1 9.71688e-05, Linf 0.016383, total time[s] 0.086635 +Converged at iteration 25, L1 6.72533e-05, Linf 0.00298502, total time[s] 0.07808 +Converged at iteration 37, L1 9.85085e-05, Linf 0.0129942, total time[s] 0.10082 +Converged at iteration 35, L1 8.25167e-05, Linf 0.0102398, total time[s] 0.107779 +Converged at iteration 25, L1 7.17375e-05, Linf 0.00315382, total time[s] 0.073543 +Converged at iteration 24, L1 7.19319e-05, Linf 0.00613145, total time[s] 0.063357 +Converged at iteration 26, L1 3.99652e-05, Linf 0.0105679, total time[s] 0.068877 +Converged at iteration 26, L1 6.65991e-05, Linf 0.0193118, total time[s] 0.07064 +Converged at iteration 21, L1 4.69222e-05, Linf 0.00766694, total time[s] 0.054604 +Converged at iteration 19, L1 6.79817e-05, Linf 0.00400875, total time[s] 0.064975 +Converged at iteration 23, L1 9.53837e-05, Linf 0.00331138, total time[s] 0.087673 +Converged at iteration 24, L1 6.6313e-05, Linf 0.00222847, total time[s] 0.070553 +Converged at iteration 21, L1 9.01754e-05, Linf 0.00845634, total time[s] 0.078419 +Converged at iteration 20, L1 8.78543e-05, Linf 0.00400535, total time[s] 0.077448 +Converged at iteration 32, L1 5.24485e-05, Linf 0.00882407, total time[s] 0.089608 +Converged at iteration 22, L1 8.59686e-05, Linf 0.00534024, total time[s] 0.074141 +Converged at iteration 24, L1 6.18981e-05, Linf 0.00447127, total time[s] 0.071724 +Converged at iteration 26, L1 9.21326e-05, Linf 0.00480616, total time[s] 0.069456 +Converged at iteration 24, L1 5.35827e-05, Linf 0.00356382, total time[s] 0.062495 +Converged at iteration 23, L1 9.85751e-05, Linf 0.00473705, total time[s] 0.060188 +Converged at iteration 26, L1 8.32821e-05, Linf 0.0051837, total time[s] 0.069448 +Converged at iteration 27, L1 9.87228e-05, Linf 0.00559885, total time[s] 0.073926 +Converged at iteration 27, L1 9.15268e-05, Linf 0.00640106, total time[s] 0.071148 +Converged at iteration 32, L1 8.11422e-05, Linf 0.00496178, total time[s] 0.081727 +Converged at iteration 27, L1 9.12886e-05, Linf 0.00226041, total time[s] 0.069593 +Converged at iteration 31, L1 7.29044e-05, Linf 0.00975054, total time[s] 0.078911 +Converged at iteration 31, L1 5.66904e-05, Linf 0.00237512, total time[s] 0.079396 +Converged at iteration 33, L1 5.0845e-05, Linf 0.00238909, total time[s] 0.092816 +Converged at iteration 31, L1 7.35674e-05, Linf 0.00633396, total time[s] 0.084418 +Converged at iteration 33, L1 3.90628e-05, Linf 0.00875611, total time[s] 0.086631 +Converged at iteration 29, L1 9.86393e-05, Linf 0.0164164, total time[s] 0.080293 +Converged at iteration 25, L1 6.90137e-05, Linf 0.00299707, total time[s] 0.069623 +Converged at iteration 38, L1 2.98964e-05, Linf 0.0073382, total time[s] 0.09707 +Converged at iteration 35, L1 8.67877e-05, Linf 0.0108043, total time[s] 0.094869 +Converged at iteration 25, L1 7.02231e-05, Linf 0.00305266, total time[s] 0.066418 +Converged at iteration 24, L1 7.00994e-05, Linf 0.0058225, total time[s] 0.063319 +Converged at iteration 26, L1 3.76528e-05, Linf 0.00991436, total time[s] 0.066662 +Converged at iteration 26, L1 6.99531e-05, Linf 0.0191969, total time[s] 0.067417 +Converged at iteration 21, L1 4.65772e-05, Linf 0.00768661, total time[s] 0.062018 +Converged at iteration 19, L1 7.26815e-05, Linf 0.00419449, total time[s] 0.062174 +Converged at iteration 23, L1 9.27005e-05, Linf 0.00331416, total time[s] 0.073076 +Converged at iteration 24, L1 6.97796e-05, Linf 0.00211807, total time[s] 0.065286 +Converged at iteration 21, L1 9.16263e-05, Linf 0.00413591, total time[s] 0.073751 +Converged at iteration 20, L1 9.30385e-05, Linf 0.00441928, total time[s] 0.055689 +Converged at iteration 32, L1 6.38307e-05, Linf 0.00887125, total time[s] 0.118471 +Converged at iteration 22, L1 8.56076e-05, Linf 0.00543677, total time[s] 0.067068 +Converged at iteration 24, L1 6.27603e-05, Linf 0.00451669, total time[s] 0.061331 +Converged at iteration 26, L1 9.20843e-05, Linf 0.00462785, total time[s] 0.067585 +Converged at iteration 24, L1 5.3164e-05, Linf 0.00330826, total time[s] 0.063185 +Converged at iteration 23, L1 9.75387e-05, Linf 0.00461024, total time[s] 0.06415 +Converged at iteration 26, L1 8.90011e-05, Linf 0.00538687, total time[s] 0.069847 +Converged at iteration 28, L1 5.55766e-05, Linf 0.00343501, total time[s] 0.072276 +Converged at iteration 27, L1 9.32261e-05, Linf 0.00642917, total time[s] 0.068942 +Converged at iteration 32, L1 8.40251e-05, Linf 0.00506859, total time[s] 0.11761 +Converged at iteration 27, L1 9.77679e-05, Linf 0.00232746, total time[s] 0.111324 +Converged at iteration 31, L1 7.42783e-05, Linf 0.00984536, total time[s] 0.091535 +Converged at iteration 31, L1 5.63683e-05, Linf 0.00236749, total time[s] 0.078927 +Converged at iteration 33, L1 5.14814e-05, Linf 0.00255124, total time[s] 0.085223 +Converged at iteration 31, L1 7.94988e-05, Linf 0.00675636, total time[s] 0.079846 +Converged at iteration 33, L1 7.56886e-05, Linf 0.0096206, total time[s] 0.083543 +Converged at iteration 29, L1 9.65989e-05, Linf 0.0166251, total time[s] 0.073756 +Converged at iteration 25, L1 6.7304e-05, Linf 0.00295799, total time[s] 0.064314 +Converged at iteration 38, L1 3.05379e-05, Linf 0.00743318, total time[s] 0.103393 +Converged at iteration 35, L1 8.97715e-05, Linf 0.0110892, total time[s] 0.096393 +Converged at iteration 25, L1 7.0121e-05, Linf 0.00301308, total time[s] 0.067512 +Converged at iteration 24, L1 6.92311e-05, Linf 0.00567194, total time[s] 0.068981 +Converged at iteration 26, L1 4.0961e-05, Linf 0.00970987, total time[s] 0.067555 +Converged at iteration 27, L1 6.17125e-05, Linf 0.00716456, total time[s] 0.072339 +Converged at iteration 21, L1 4.63276e-05, Linf 0.00770771, total time[s] 0.066621 +Converged at iteration 19, L1 7.6022e-05, Linf 0.00420531, total time[s] 0.073319 +Converged at iteration 23, L1 9.14778e-05, Linf 0.00329608, total time[s] 0.079482 +Converged at iteration 24, L1 6.97377e-05, Linf 0.00212461, total time[s] 0.074817 +Converged at iteration 21, L1 9.24082e-05, Linf 0.00411157, total time[s] 0.066061 +Converged at iteration 20, L1 9.23862e-05, Linf 0.00417883, total time[s] 0.066795 +Converged at iteration 32, L1 5.61176e-05, Linf 0.0087394, total time[s] 0.108092 +Converged at iteration 22, L1 8.68843e-05, Linf 0.00555975, total time[s] 0.059927 +Converged at iteration 24, L1 6.31671e-05, Linf 0.00455061, total time[s] 0.066411 +Converged at iteration 26, L1 9.33122e-05, Linf 0.0124899, total time[s] 0.066957 +Converged at iteration 24, L1 5.22134e-05, Linf 0.00320546, total time[s] 0.06369 +Converged at iteration 23, L1 9.78106e-05, Linf 0.00453131, total time[s] 0.059968 +Converged at iteration 26, L1 8.7147e-05, Linf 0.00544976, total time[s] 0.066633 +Converged at iteration 28, L1 5.72784e-05, Linf 0.00349738, total time[s] 0.071329 +Converged at iteration 27, L1 9.29814e-05, Linf 0.00645965, total time[s] 0.068564 +Converged at iteration 32, L1 8.55153e-05, Linf 0.00511133, total time[s] 0.087732 +Converged at iteration 27, L1 9.90857e-05, Linf 0.0023393, total time[s] 0.073527 +Converged at iteration 31, L1 7.46601e-05, Linf 0.00984923, total time[s] 0.082243 +Converged at iteration 31, L1 5.5824e-05, Linf 0.00236418, total time[s] 0.077871 +Converged at iteration 33, L1 5.21261e-05, Linf 0.00259379, total time[s] 0.082533 +Converged at iteration 31, L1 8.0018e-05, Linf 0.00692805, total time[s] 0.077691 +Converged at iteration 33, L1 5.98455e-05, Linf 0.0128856, total time[s] 0.085679 +Converged at iteration 30, L1 3.08535e-05, Linf 0.00564885, total time[s] 0.075821 +Converged at iteration 25, L1 6.77165e-05, Linf 0.00295818, total time[s] 0.064445 +Converged at iteration 38, L1 3.15396e-05, Linf 0.0076294, total time[s] 0.101262 +Converged at iteration 36, L1 6.0687e-05, Linf 0.00583194, total time[s] 0.110458 +Converged at iteration 25, L1 6.94858e-05, Linf 0.00292135, total time[s] 0.064833 +Converged at iteration 24, L1 6.85673e-05, Linf 0.00550353, total time[s] 0.061878 +Converged at iteration 26, L1 3.99849e-05, Linf 0.00928767, total time[s] 0.066797 +Converged at iteration 26, L1 9.86769e-05, Linf 0.0200424, total time[s] 0.069345 +Converged at iteration 21, L1 4.58545e-05, Linf 0.00775351, total time[s] 0.069141 +Converged at iteration 19, L1 8.30696e-05, Linf 0.00438618, total time[s] 0.055855 +Converged at iteration 23, L1 9.0396e-05, Linf 0.00330395, total time[s] 0.072185 +Converged at iteration 24, L1 6.97708e-05, Linf 0.00213132, total time[s] 0.073561 +Converged at iteration 21, L1 9.36735e-05, Linf 0.0040771, total time[s] 0.063573 +Converged at iteration 20, L1 9.50974e-05, Linf 0.00433094, total time[s] 0.064697 +Converged at iteration 32, L1 5.91217e-05, Linf 0.00893304, total time[s] 0.111583 +Converged at iteration 22, L1 8.33366e-05, Linf 0.00570511, total time[s] 0.065672 +Converged at iteration 24, L1 6.32028e-05, Linf 0.00459797, total time[s] 0.062522 +Converged at iteration 26, L1 9.09989e-05, Linf 0.0045122, total time[s] 0.066396 +Converged at iteration 24, L1 5.04449e-05, Linf 0.00299709, total time[s] 0.062137 +Converged at iteration 23, L1 9.57051e-05, Linf 0.00438406, total time[s] 0.060017 +Converged at iteration 26, L1 8.95917e-05, Linf 0.00562548, total time[s] 0.068439 +Converged at iteration 28, L1 6.18561e-05, Linf 0.0037106, total time[s] 0.072416 +Converged at iteration 27, L1 9.27889e-05, Linf 0.00650528, total time[s] 0.070259 +Converged at iteration 32, L1 8.53106e-05, Linf 0.00521246, total time[s] 0.081487 +Converged at iteration 28, L1 6.19396e-05, Linf 0.00179595, total time[s] 0.072385 +Converged at iteration 31, L1 7.50324e-05, Linf 0.00993254, total time[s] 0.081441 +Converged at iteration 31, L1 5.73386e-05, Linf 0.00237966, total time[s] 0.079539 +Converged at iteration 33, L1 5.4256e-05, Linf 0.00272881, total time[s] 0.084273 +Converged at iteration 31, L1 8.3988e-05, Linf 0.00728891, total time[s] 0.079051 +Converged at iteration 33, L1 4.54256e-05, Linf 0.010639, total time[s] 0.084173 +Converged at iteration 29, L1 9.66061e-05, Linf 0.016797, total time[s] 0.075537 +Converged at iteration 25, L1 7.07542e-05, Linf 0.00303105, total time[s] 0.067971 +Converged at iteration 38, L1 3.1123e-05, Linf 0.00767113, total time[s] 0.102332 +Converged at iteration 35, L1 9.38512e-05, Linf 0.0117702, total time[s] 0.1003 +Converged at iteration 25, L1 6.91323e-05, Linf 0.00291485, total time[s] 0.066722 +Converged at iteration 24, L1 6.67336e-05, Linf 0.00539454, total time[s] 0.063895 +Converged at iteration 26, L1 3.69046e-05, Linf 0.00912466, total time[s] 0.068545 +Converged at iteration 26, L1 7.75364e-05, Linf 0.0207561, total time[s] 0.06985 +Converged at iteration 21, L1 4.57687e-05, Linf 0.00797359, total time[s] 0.075021 +Converged at iteration 19, L1 8.66154e-05, Linf 0.00442149, total time[s] 0.068331 +Converged at iteration 23, L1 9.00014e-05, Linf 0.00327547, total time[s] 0.079915 +Converged at iteration 24, L1 7.04373e-05, Linf 0.00213811, total time[s] 0.072721 +Converged at iteration 21, L1 9.47363e-05, Linf 0.00413231, total time[s] 0.068043 +Converged at iteration 20, L1 9.75348e-05, Linf 0.00440341, total time[s] 0.077247 +Converged at iteration 32, L1 6.89969e-05, Linf 0.00879626, total time[s] 0.109772 +Converged at iteration 22, L1 8.87017e-05, Linf 0.00575199, total time[s] 0.058714 +Converged at iteration 24, L1 6.38594e-05, Linf 0.00461423, total time[s] 0.060738 +Converged at iteration 26, L1 9.18658e-05, Linf 0.00448231, total time[s] 0.067252 +Converged at iteration 24, L1 5.0295e-05, Linf 0.00291616, total time[s] 0.066218 +Converged at iteration 23, L1 9.42769e-05, Linf 0.00428129, total time[s] 0.062126 +Converged at iteration 26, L1 8.95298e-05, Linf 0.0056888, total time[s] 0.064641 +Converged at iteration 28, L1 6.43333e-05, Linf 0.00380569, total time[s] 0.073787 +Converged at iteration 27, L1 9.44106e-05, Linf 0.00651823, total time[s] 0.069729 +Converged at iteration 32, L1 8.58118e-05, Linf 0.00524624, total time[s] 0.089989 +Converged at iteration 28, L1 6.33852e-05, Linf 0.00195473, total time[s] 0.081749 +Converged at iteration 31, L1 7.60503e-05, Linf 0.00983089, total time[s] 0.084491 +Converged at iteration 31, L1 5.85611e-05, Linf 0.00237008, total time[s] 0.085179 +Converged at iteration 33, L1 5.68399e-05, Linf 0.00276745, total time[s] 0.088336 +Converged at iteration 31, L1 8.60713e-05, Linf 0.00745166, total time[s] 0.080273 +Converged at iteration 33, L1 4.67248e-05, Linf 0.0109546, total time[s] 0.094011 +Converged at iteration 29, L1 9.72481e-05, Linf 0.0168012, total time[s] 0.072898 +Converged at iteration 25, L1 7.08145e-05, Linf 0.0050823, total time[s] 0.065469 +Converged at iteration 36, L1 6.68604e-05, Linf 0.00246561, total time[s] 0.144025 +Converged at iteration 36, L1 5.90671e-05, Linf 0.00627208, total time[s] 0.107084 +Converged at iteration 25, L1 6.94868e-05, Linf 0.00291569, total time[s] 0.069048 +Converged at iteration 24, L1 6.70786e-05, Linf 0.00528796, total time[s] 0.072086 +Converged at iteration 26, L1 3.91642e-05, Linf 0.00879785, total time[s] 0.074083 +Converged at iteration 26, L1 8.29392e-05, Linf 0.0213294, total time[s] 0.08587 +Converged at iteration 21, L1 4.61651e-05, Linf 0.00776143, total time[s] 0.066745 +Converged at iteration 19, L1 8.86219e-05, Linf 0.00458035, total time[s] 0.063865 +Converged at iteration 23, L1 8.85739e-05, Linf 0.00328799, total time[s] 0.106408 +Converged at iteration 24, L1 7.13334e-05, Linf 0.00217311, total time[s] 0.088721 +Converged at iteration 21, L1 9.63473e-05, Linf 0.00421498, total time[s] 0.108899 +Converged at iteration 21, L1 4.68827e-05, Linf 0.00240357, total time[s] 0.084567 +Converged at iteration 32, L1 6.31707e-05, Linf 0.00899218, total time[s] 0.091394 +Converged at iteration 22, L1 9.21576e-05, Linf 0.00591761, total time[s] 0.058843 +Converged at iteration 24, L1 6.48715e-05, Linf 0.00465756, total time[s] 0.074742 +Converged at iteration 26, L1 9.01663e-05, Linf 0.00437953, total time[s] 0.07079 +Converged at iteration 24, L1 4.86404e-05, Linf 0.00271123, total time[s] 0.063082 +Converged at iteration 23, L1 8.98622e-05, Linf 0.00409302, total time[s] 0.073386 +Converged at iteration 26, L1 9.37587e-05, Linf 0.005873, total time[s] 0.073458 +Converged at iteration 28, L1 6.76597e-05, Linf 0.0040568, total time[s] 0.076953 +Converged at iteration 27, L1 9.45855e-05, Linf 0.00657358, total time[s] 0.07078 +Converged at iteration 32, L1 8.68599e-05, Linf 0.00534288, total time[s] 0.087577 +Converged at iteration 28, L1 6.64172e-05, Linf 0.00183984, total time[s] 0.080311 +Converged at iteration 31, L1 7.62827e-05, Linf 0.0100249, total time[s] 0.082181 +Converged at iteration 31, L1 5.75202e-05, Linf 0.00239384, total time[s] 0.081946 +Converged at iteration 33, L1 5.70267e-05, Linf 0.00289234, total time[s] 0.09196 +Converged at iteration 31, L1 9.10646e-05, Linf 0.00787745, total time[s] 0.079956 +Converged at iteration 33, L1 4.97481e-05, Linf 0.011788, total time[s] 0.083973 +Converged at iteration 29, L1 9.43862e-05, Linf 0.016887, total time[s] 0.090467 +Converged at iteration 25, L1 6.71479e-05, Linf 0.00303587, total time[s] 0.065259 +Converged at iteration 38, L1 3.12851e-05, Linf 0.00784171, total time[s] 0.095498 +Converged at iteration 35, L1 9.58944e-05, Linf 0.012043, total time[s] 0.095698 +Converged at iteration 25, L1 6.91826e-05, Linf 0.00291436, total time[s] 0.082132 +Converged at iteration 24, L1 6.65842e-05, Linf 0.00533703, total time[s] 0.070579 +Converged at iteration 26, L1 3.71067e-05, Linf 0.00894983, total time[s] 0.066357 +Converged at iteration 26, L1 7.98598e-05, Linf 0.0211626, total time[s] 0.066713 +Converged at iteration 21, L1 4.57828e-05, Linf 0.00789238, total time[s] 0.063704 +Converged at iteration 19, L1 8.73572e-05, Linf 0.00448499, total time[s] 0.089865 +Converged at iteration 23, L1 8.89761e-05, Linf 0.00329459, total time[s] 0.078138 +Converged at iteration 24, L1 7.12869e-05, Linf 0.00215444, total time[s] 0.085086 +Converged at iteration 21, L1 9.55402e-05, Linf 0.00418329, total time[s] 0.062916 +Converged at iteration 21, L1 5.04294e-05, Linf 0.00234384, total time[s] 0.071881 +Converged at iteration 32, L1 6.14205e-05, Linf 0.00881775, total time[s] 0.129718 +Converged at iteration 22, L1 8.5143e-05, Linf 0.00584021, total time[s] 0.085093 +Converged at iteration 24, L1 6.40167e-05, Linf 0.0046344, total time[s] 0.077566 +Converged at iteration 26, L1 9.13698e-05, Linf 0.0044337, total time[s] 0.135205 +Converged at iteration 24, L1 4.94456e-05, Linf 0.00280564, total time[s] 0.116769 +Converged at iteration 23, L1 9.75667e-05, Linf 0.00853874, total time[s] 0.062126 +Converged at iteration 26, L1 9.28728e-05, Linf 0.00578217, total time[s] 0.071809 +Converged at iteration 28, L1 6.60312e-05, Linf 0.00391543, total time[s] 0.076563 +Converged at iteration 27, L1 9.41259e-05, Linf 0.00654851, total time[s] 0.082594 +Converged at iteration 32, L1 8.63748e-05, Linf 0.0052957, total time[s] 0.083788 +Converged at iteration 28, L1 6.47877e-05, Linf 0.001854, total time[s] 0.09121 +Converged at iteration 31, L1 7.56907e-05, Linf 0.00998091, total time[s] 0.087508 +Converged at iteration 31, L1 5.74448e-05, Linf 0.00239214, total time[s] 0.087958 +Converged at iteration 33, L1 5.56023e-05, Linf 0.00283129, total time[s] 0.092543 +Converged at iteration 31, L1 8.86812e-05, Linf 0.00766541, total time[s] 0.08472 +Converged at iteration 33, L1 4.81565e-05, Linf 0.0113626, total time[s] 0.083882 +Converged at iteration 29, L1 9.46947e-05, Linf 0.0168444, total time[s] 0.075167 +Converged at iteration 25, L1 6.72335e-05, Linf 0.00301769, total time[s] 0.067664 +Converged at iteration 38, L1 3.22067e-05, Linf 0.00790293, total time[s] 0.10436 +Converged at iteration 35, L1 9.69302e-05, Linf 0.0121534, total time[s] 0.095173 +Converged at iteration 25, L1 6.90628e-05, Linf 0.00290968, total time[s] 0.07075 +Converged at iteration 24, L1 6.65394e-05, Linf 0.00528906, total time[s] 0.066639 +Converged at iteration 26, L1 3.8686e-05, Linf 0.00888371, total time[s] 0.068353 +Converged at iteration 26, L1 8.15583e-05, Linf 0.0213364, total time[s] 0.085822 +Converged at iteration 21, L1 4.5943e-05, Linf 0.00777247, total time[s] 0.05989 +Converged at iteration 19, L1 8.84319e-05, Linf 0.00451799, total time[s] 0.071238 +Converged at iteration 23, L1 8.83071e-05, Linf 0.00328579, total time[s] 0.076662 +Converged at iteration 24, L1 7.23735e-05, Linf 0.00216363, total time[s] 0.08056 +Converged at iteration 21, L1 9.57757e-05, Linf 0.00420209, total time[s] 0.060323 +Converged at iteration 20, L1 9.91619e-05, Linf 0.00454029, total time[s] 0.061262 +Converged at iteration 32, L1 6.18853e-05, Linf 0.00897953, total time[s] 0.124945 +Converged at iteration 22, L1 8.97618e-05, Linf 0.00587008, total time[s] 0.068592 +Converged at iteration 24, L1 6.35099e-05, Linf 0.00464107, total time[s] 0.066632 +Converged at iteration 26, L1 9.05726e-05, Linf 0.00441882, total time[s] 0.071305 +Converged at iteration 24, L1 4.90914e-05, Linf 0.00276407, total time[s] 0.065881 +Converged at iteration 23, L1 9.09185e-05, Linf 0.00413744, total time[s] 0.060946 +Converged at iteration 26, L1 9.31205e-05, Linf 0.00581512, total time[s] 0.072322 +Converged at iteration 28, L1 6.74417e-05, Linf 0.00397463, total time[s] 0.072924 +Converged at iteration 27, L1 9.43459e-05, Linf 0.00658426, total time[s] 0.072323 +Converged at iteration 32, L1 8.65465e-05, Linf 0.00531317, total time[s] 0.083169 +Converged at iteration 28, L1 6.5249e-05, Linf 0.00186491, total time[s] 0.076832 +Converged at iteration 31, L1 7.55907e-05, Linf 0.00998305, total time[s] 0.081146 +Converged at iteration 31, L1 5.75669e-05, Linf 0.00239815, total time[s] 0.083356 +Converged at iteration 33, L1 5.5799e-05, Linf 0.00285031, total time[s] 0.084419 +Converged at iteration 31, L1 8.95611e-05, Linf 0.00775352, total time[s] 0.079603 +Converged at iteration 33, L1 4.879e-05, Linf 0.0119596, total time[s] 0.088291 +Converged at iteration 29, L1 9.4793e-05, Linf 0.0168323, total time[s] 0.074777 +Converged at iteration 25, L1 6.72238e-05, Linf 0.00302717, total time[s] 0.066251 +Converged at iteration 38, L1 3.18863e-05, Linf 0.00808264, total time[s] 0.108606 +Converged at iteration 35, L1 9.95038e-05, Linf 0.0124933, total time[s] 0.153516 +Converged at iteration 25, L1 6.93511e-05, Linf 0.00290947, total time[s] 0.074891 +Converged at iteration 24, L1 6.72626e-05, Linf 0.00524839, total time[s] 0.064185 +Converged at iteration 26, L1 3.68263e-05, Linf 0.00868432, total time[s] 0.067274 +Converged at iteration 26, L1 8.39436e-05, Linf 0.0219004, total time[s] 0.081073 +Converged at iteration 21, L1 4.61694e-05, Linf 0.00778033, total time[s] 0.061092 +Converged at iteration 19, L1 9.03918e-05, Linf 0.0046226, total time[s] 0.060781 +Converged at iteration 23, L1 8.77431e-05, Linf 0.00309988, total time[s] 0.073051 +Converged at iteration 24, L1 7.16547e-05, Linf 0.00218835, total time[s] 0.066601 +Converged at iteration 21, L1 9.65245e-05, Linf 0.00423257, total time[s] 0.06174 +Converged at iteration 21, L1 4.66167e-05, Linf 0.00241605, total time[s] 0.058417 +Converged at iteration 32, L1 6.41245e-05, Linf 0.00901234, total time[s] 0.085099 +Converged at iteration 22, L1 8.67692e-05, Linf 0.00596685, total time[s] 0.059027 +Converged at iteration 24, L1 6.39627e-05, Linf 0.00467238, total time[s] 0.063124 +Converged at iteration 26, L1 8.96124e-05, Linf 0.00435136, total time[s] 0.067229 +Converged at iteration 24, L1 4.81887e-05, Linf 0.00266508, total time[s] 0.062951 +Converged at iteration 23, L1 8.80261e-05, Linf 0.00401465, total time[s] 0.060478 +Converged at iteration 26, L1 9.45992e-05, Linf 0.00592813, total time[s] 0.070379 +Converged at iteration 28, L1 7.0017e-05, Linf 0.00412251, total time[s] 0.073534 +Converged at iteration 27, L1 9.53711e-05, Linf 0.00659849, total time[s] 0.071135 +Converged at iteration 32, L1 8.7138e-05, Linf 0.0053678, total time[s] 0.082117 +Converged at iteration 28, L1 6.73117e-05, Linf 0.00190382, total time[s] 0.072349 +Converged at iteration 31, L1 7.64667e-05, Linf 0.0100334, total time[s] 0.108553 +Converged at iteration 31, L1 5.96092e-05, Linf 0.00240195, total time[s] 0.11698 +Converged at iteration 33, L1 5.69179e-05, Linf 0.0029252, total time[s] 0.085673 +Converged at iteration 31, L1 9.27467e-05, Linf 0.00801888, total time[s] 0.077348 +Converged at iteration 33, L1 5.06946e-05, Linf 0.0120697, total time[s] 0.084177 +Converged at iteration 29, L1 9.37995e-05, Linf 0.0168441, total time[s] 0.073 +Converged at iteration 25, L1 6.70803e-05, Linf 0.00303699, total time[s] 0.064516 +Converged at iteration 38, L1 3.21267e-05, Linf 0.00815109, total time[s] 0.092904 +Converged at iteration 36, L1 3.44353e-05, Linf 0.00643398, total time[s] 0.097993 +Converged at iteration 25, L1 6.95123e-05, Linf 0.00290721, total time[s] 0.066101 +Converged at iteration 24, L1 6.74008e-05, Linf 0.00519284, total time[s] 0.062261 +Converged at iteration 26, L1 3.67109e-05, Linf 0.00862142, total time[s] 0.066514 +Converged at iteration 26, L1 8.48811e-05, Linf 0.0221167, total time[s] 0.069099 +Converged at iteration 21, L1 4.62783e-05, Linf 0.00777322, total time[s] 0.064948 +Converged at iteration 19, L1 9.143e-05, Linf 0.00462383, total time[s] 0.085563 +Converged at iteration 23, L1 8.75847e-05, Linf 0.00305451, total time[s] 0.072564 +Converged at iteration 24, L1 7.26232e-05, Linf 0.00219406, total time[s] 0.074494 +Converged at iteration 21, L1 9.69073e-05, Linf 0.00426438, total time[s] 0.081692 +Converged at iteration 21, L1 4.727e-05, Linf 0.00243375, total time[s] 0.119467 +Converged at iteration 32, L1 6.47055e-05, Linf 0.00902115, total time[s] 0.100825 +Converged at iteration 22, L1 9.06295e-05, Linf 0.00600179, total time[s] 0.059787 +Converged at iteration 24, L1 6.4566e-05, Linf 0.00468123, total time[s] 0.069912 +Converged at iteration 26, L1 8.90605e-05, Linf 0.0043289, total time[s] 0.067903 +Converged at iteration 24, L1 4.77919e-05, Linf 0.00261106, total time[s] 0.063586 +Converged at iteration 23, L1 8.70949e-05, Linf 0.00394386, total time[s] 0.06032 +Converged at iteration 26, L1 9.52156e-05, Linf 0.00596409, total time[s] 0.069152 +Converged at iteration 28, L1 7.14834e-05, Linf 0.00417992, total time[s] 0.077368 +Converged at iteration 27, L1 9.58813e-05, Linf 0.0066124, total time[s] 0.069611 +Converged at iteration 32, L1 8.70693e-05, Linf 0.00538807, total time[s] 0.084945 +Converged at iteration 28, L1 6.7842e-05, Linf 0.0019129, total time[s] 0.072538 +Converged at iteration 31, L1 7.64299e-05, Linf 0.0100335, total time[s] 0.082205 +Converged at iteration 31, L1 5.73319e-05, Linf 0.00240343, total time[s] 0.081502 +Converged at iteration 33, L1 5.71813e-05, Linf 0.00294345, total time[s] 0.085556 +Converged at iteration 31, L1 9.42805e-05, Linf 0.00811665, total time[s] 0.079235 +Converged at iteration 33, L1 5.141e-05, Linf 0.0122657, total time[s] 0.083741 +Converged at iteration 29, L1 9.33738e-05, Linf 0.0168148, total time[s] 0.074384 +Converged at iteration 25, L1 6.73425e-05, Linf 0.00303494, total time[s] 0.065066 +Converged at iteration 38, L1 3.26453e-05, Linf 0.00830424, total time[s] 0.095619 +Converged at iteration 36, L1 6.25313e-05, Linf 0.00658481, total time[s] 0.098534 +Converged at iteration 25, L1 6.95684e-05, Linf 0.00290042, total time[s] 0.065671 +Converged at iteration 24, L1 6.78753e-05, Linf 0.00520654, total time[s] 0.064282 +Converged at iteration 26, L1 3.82767e-05, Linf 0.00849031, total time[s] 0.06797 +Converged at iteration 26, L1 8.77501e-05, Linf 0.0226368, total time[s] 0.069074 +Converged at iteration 21, L1 4.69578e-05, Linf 0.00778632, total time[s] 0.084466 +Converged at iteration 19, L1 9.19839e-05, Linf 0.00472304, total time[s] 0.063071 +Converged at iteration 23, L1 8.66018e-05, Linf 0.00288179, total time[s] 0.08147 +Converged at iteration 24, L1 7.27201e-05, Linf 0.00221299, total time[s] 0.079034 +Converged at iteration 21, L1 9.73065e-05, Linf 0.00426896, total time[s] 0.067521 +Converged at iteration 21, L1 4.77692e-05, Linf 0.00246252, total time[s] 0.066734 +Converged at iteration 32, L1 6.6362e-05, Linf 0.00904719, total time[s] 0.134921 +Converged at iteration 22, L1 9.13214e-05, Linf 0.00608293, total time[s] 0.062739 +Converged at iteration 24, L1 6.47857e-05, Linf 0.00470841, total time[s] 0.065094 +Converged at iteration 26, L1 8.78198e-05, Linf 0.00427697, total time[s] 0.07493 +Converged at iteration 24, L1 4.65881e-05, Linf 0.00253178, total time[s] 0.066455 +Converged at iteration 23, L1 8.56276e-05, Linf 0.0038321, total time[s] 0.063409 +Converged at iteration 26, L1 9.59282e-05, Linf 0.00605357, total time[s] 0.074729 +Converged at iteration 28, L1 7.38249e-05, Linf 0.00431394, total time[s] 0.07891 +Converged at iteration 27, L1 9.68192e-05, Linf 0.00665053, total time[s] 0.07364 +Converged at iteration 32, L1 9.00841e-05, Linf 0.00710936, total time[s] 0.124881 +Converged at iteration 28, L1 7.15938e-05, Linf 0.001935, total time[s] 0.105877 +Converged at iteration 31, L1 7.80304e-05, Linf 0.010251, total time[s] 0.117197 +Converged at iteration 31, L1 5.79233e-05, Linf 0.00240247, total time[s] 0.125613 +Converged at iteration 33, L1 6.20087e-05, Linf 0.00491161, total time[s] 0.097658 +Converged at iteration 31, L1 9.91022e-05, Linf 0.00832671, total time[s] 0.090246 +Converged at iteration 33, L1 5.34432e-05, Linf 0.0127107, total time[s] 0.083922 +Converged at iteration 29, L1 9.3715e-05, Linf 0.0168181, total time[s] 0.0808 +Converged at iteration 25, L1 6.80747e-05, Linf 0.00301667, total time[s] 0.074958 +Converged at iteration 38, L1 3.29406e-05, Linf 0.00837708, total time[s] 0.105424 +Converged at iteration 36, L1 3.52737e-05, Linf 0.00666314, total time[s] 0.099787 +Converged at iteration 25, L1 6.94865e-05, Linf 0.00289984, total time[s] 0.06638 +Converged at iteration 24, L1 6.8342e-05, Linf 0.00518947, total time[s] 0.066837 +Converged at iteration 26, L1 3.6987e-05, Linf 0.00842869, total time[s] 0.072422 +Converged at iteration 26, L1 8.87917e-05, Linf 0.0228783, total time[s] 0.074051 +Converged at iteration 21, L1 4.73193e-05, Linf 0.00780369, total time[s] 0.058374 +Converged at iteration 19, L1 9.319e-05, Linf 0.00472911, total time[s] 0.052136 +Converged at iteration 23, L1 8.60507e-05, Linf 0.00286111, total time[s] 0.066584 +Converged at iteration 24, L1 7.29791e-05, Linf 0.00221627, total time[s] 0.074073 +Converged at iteration 21, L1 9.74672e-05, Linf 0.00426623, total time[s] 0.066132 +Converged at iteration 21, L1 4.8124e-05, Linf 0.00247697, total time[s] 0.058877 +Converged at iteration 32, L1 6.70501e-05, Linf 0.00905962, total time[s] 0.084685 +Converged at iteration 22, L1 8.881e-05, Linf 0.00611641, total time[s] 0.064291 +Converged at iteration 24, L1 6.46691e-05, Linf 0.004721, total time[s] 0.09146 +Converged at iteration 26, L1 8.77308e-05, Linf 0.0042577, total time[s] 0.072538 +Converged at iteration 23, L1 9.93566e-05, Linf 0.00418179, total time[s] 0.063309 +Converged at iteration 23, L1 8.49296e-05, Linf 0.00376719, total time[s] 0.066732 +Converged at iteration 26, L1 9.71615e-05, Linf 0.00609293, total time[s] 0.072283 +Converged at iteration 28, L1 7.44776e-05, Linf 0.00437871, total time[s] 0.07471 +Converged at iteration 27, L1 9.72649e-05, Linf 0.00666769, total time[s] 0.087229 +Converged at iteration 32, L1 8.72258e-05, Linf 0.00544185, total time[s] 0.098396 +Converged at iteration 28, L1 7.01535e-05, Linf 0.00194175, total time[s] 0.083471 +Converged at iteration 31, L1 7.67385e-05, Linf 0.010249, total time[s] 0.101189 +Converged at iteration 31, L1 5.86184e-05, Linf 0.00242716, total time[s] 0.153653 +Converged at iteration 33, L1 6.27183e-05, Linf 0.00302545, total time[s] 0.127296 +Converged at iteration 31, L1 9.79368e-05, Linf 0.00844164, total time[s] 0.098384 +Converged at iteration 33, L1 5.43696e-05, Linf 0.0129889, total time[s] 0.101751 +Converged at iteration 29, L1 9.23999e-05, Linf 0.0167887, total time[s] 0.077141 +Converged at iteration 25, L1 6.82335e-05, Linf 0.00300755, total time[s] 0.066247 +Converged at iteration 38, L1 3.35148e-05, Linf 0.00849814, total time[s] 0.100761 +Converged at iteration 36, L1 3.58231e-05, Linf 0.00674213, total time[s] 0.101293 +Converged at iteration 25, L1 6.93903e-05, Linf 0.00289568, total time[s] 0.068815 +Converged at iteration 24, L1 6.91345e-05, Linf 0.00519426, total time[s] 0.061576 +Converged at iteration 26, L1 3.64087e-05, Linf 0.00831117, total time[s] 0.065246 +Converged at iteration 26, L1 9.21516e-05, Linf 0.0234785, total time[s] 0.067539 +Converged at iteration 21, L1 4.82334e-05, Linf 0.00781849, total time[s] 0.058169 +Converged at iteration 19, L1 9.64723e-05, Linf 0.00483125, total time[s] 0.053509 +Converged at iteration 23, L1 8.53671e-05, Linf 0.00284324, total time[s] 0.064727 +Converged at iteration 24, L1 7.7083e-05, Linf 0.0122661, total time[s] 0.078519 +Converged at iteration 21, L1 9.82416e-05, Linf 0.00430954, total time[s] 0.05799 +Converged at iteration 21, L1 4.8888e-05, Linf 0.00250289, total time[s] 0.0577 +Converged at iteration 40, L1 6.71664e-05, Linf 0.00367324, total time[s] 0.104199 +Converged at iteration 35, L1 7.63465e-05, Linf 0.00343595, total time[s] 0.097322 +Converged at iteration 30, L1 9.62609e-05, Linf 0.00432587, total time[s] 0.079225 +Converged at iteration 31, L1 6.25397e-05, Linf 0.00502563, total time[s] 0.079314 +Converged at iteration 27, L1 6.29746e-05, Linf 0.00499542, total time[s] 0.077025 +Converged at iteration 22, L1 8.59049e-05, Linf 0.00444693, total time[s] 0.062147 +Converged at iteration 20, L1 9.6032e-05, Linf 0.0039785, total time[s] 0.066792 +Converged at iteration 24, L1 8.84398e-05, Linf 0.00482993, total time[s] 0.09083 +Converged at iteration 28, L1 7.40379e-05, Linf 0.00445905, total time[s] 0.116795 +Converged at iteration 26, L1 8.28893e-05, Linf 0.00975387, total time[s] 0.113618 +Converged at iteration 22, L1 7.39257e-05, Linf 0.00508739, total time[s] 0.089742 +Converged at iteration 19, L1 6.63292e-05, Linf 0.00393105, total time[s] 0.059596 +Converged at iteration 30, L1 7.99677e-05, Linf 0.00330539, total time[s] 0.090715 +Converged at iteration 20, L1 8.45548e-05, Linf 0.00455026, total time[s] 0.059564 +Converged at iteration 24, L1 7.10952e-05, Linf 0.00466447, total time[s] 0.078357 +Converged at iteration 31, L1 8.94803e-05, Linf 0.0057009, total time[s] 0.097842 +Converged at iteration 27, L1 9.95581e-05, Linf 0.00569719, total time[s] 0.078981 +Converged at iteration 24, L1 8.79736e-05, Linf 0.00465052, total time[s] 0.061028 +Converged at iteration 23, L1 9.22785e-05, Linf 0.00410199, total time[s] 0.060784 +Converged at iteration 26, L1 7.22667e-05, Linf 0.00446044, total time[s] 0.07436 +Converged at iteration 29, L1 7.81441e-05, Linf 0.00479638, total time[s] 0.074252 +Converged at iteration 34, L1 7.09201e-05, Linf 0.00422692, total time[s] 0.089231 +Converged at iteration 30, L1 9.38055e-05, Linf 0.00442333, total time[s] 0.085668 +Converged at iteration 28, L1 9.5144e-05, Linf 0.00311249, total time[s] 0.075587 +Converged at iteration 32, L1 9.44452e-05, Linf 0.00374173, total time[s] 0.084991 +Converged at iteration 37, L1 7.36415e-05, Linf 0.00327727, total time[s] 0.093106 +Converged at iteration 33, L1 8.47236e-05, Linf 0.00457529, total time[s] 0.084006 +Converged at iteration 28, L1 9.72238e-05, Linf 0.00426106, total time[s] 0.072854 +Converged at iteration 24, L1 8.83166e-05, Linf 0.00325703, total time[s] 0.06271 +Converged at iteration 26, L1 9.01173e-05, Linf 0.00383963, total time[s] 0.068042 +Converged at iteration 40, L1 6.6737e-05, Linf 0.0039341, total time[s] 0.102043 +Converged at iteration 35, L1 8.76461e-05, Linf 0.00356963, total time[s] 0.089247 +Converged at iteration 30, L1 9.23078e-05, Linf 0.00419947, total time[s] 0.076052 +Converged at iteration 31, L1 6.33096e-05, Linf 0.00504686, total time[s] 0.07931 +Converged at iteration 26, L1 9.84761e-05, Linf 0.00583553, total time[s] 0.067542 +Converged at iteration 22, L1 7.17892e-05, Linf 0.00414151, total time[s] 0.058313 +Converged at iteration 21, L1 6.41582e-05, Linf 0.00350061, total time[s] 0.056696 +Converged at iteration 24, L1 8.94261e-05, Linf 0.00493329, total time[s] 0.063507 +Converged at iteration 28, L1 7.33001e-05, Linf 0.00443355, total time[s] 0.072557 +Converged at iteration 26, L1 8.06163e-05, Linf 0.00534692, total time[s] 0.067933 +Converged at iteration 22, L1 7.04856e-05, Linf 0.00442004, total time[s] 0.058363 +Converged at iteration 19, L1 5.49055e-05, Linf 0.00332125, total time[s] 0.054196 +Converged at iteration 30, L1 9.53484e-05, Linf 0.00328274, total time[s] 0.077735 +Converged at iteration 20, L1 8.43351e-05, Linf 0.00472686, total time[s] 0.054782 +Converged at iteration 24, L1 7.14476e-05, Linf 0.00475228, total time[s] 0.063422 +Converged at iteration 31, L1 9.43108e-05, Linf 0.0048222, total time[s] 0.07999 +Converged at iteration 27, L1 9.41137e-05, Linf 0.00468385, total time[s] 0.070374 +Converged at iteration 24, L1 8.5195e-05, Linf 0.00428811, total time[s] 0.06329 +Converged at iteration 23, L1 9.24033e-05, Linf 0.00432075, total time[s] 0.061645 +Converged at iteration 26, L1 7.17162e-05, Linf 0.00465386, total time[s] 0.072098 +Converged at iteration 29, L1 7.53667e-05, Linf 0.00488654, total time[s] 0.078451 +Converged at iteration 34, L1 8.13831e-05, Linf 0.00402304, total time[s] 0.087628 +Converged at iteration 31, L1 7.17539e-05, Linf 0.00355192, total time[s] 0.078636 +Converged at iteration 29, L1 7.03296e-05, Linf 0.00272397, total time[s] 0.075788 +Converged at iteration 32, L1 8.28956e-05, Linf 0.00354932, total time[s] 0.084469 +Converged at iteration 36, L1 8.72368e-05, Linf 0.00355888, total time[s] 0.090523 +Converged at iteration 33, L1 8.34495e-05, Linf 0.00484898, total time[s] 0.08816 +Converged at iteration 28, L1 9.19056e-05, Linf 0.00409181, total time[s] 0.073265 +Converged at iteration 24, L1 8.02801e-05, Linf 0.00294022, total time[s] 0.064488 +Converged at iteration 26, L1 8.41559e-05, Linf 0.00389362, total time[s] 0.070065 +Converged at iteration 40, L1 6.52904e-05, Linf 0.0041992, total time[s] 0.100141 +Converged at iteration 35, L1 9.70814e-05, Linf 0.00381048, total time[s] 0.090506 +Converged at iteration 30, L1 7.66259e-05, Linf 0.00420647, total time[s] 0.077119 +Converged at iteration 31, L1 6.1446e-05, Linf 0.00506926, total time[s] 0.079008 +Converged at iteration 26, L1 9.11141e-05, Linf 0.00549579, total time[s] 0.068604 +Converged at iteration 21, L1 9.63202e-05, Linf 0.0046648, total time[s] 0.056817 +Converged at iteration 21, L1 6.94192e-05, Linf 0.00393107, total time[s] 0.056433 +Converged at iteration 24, L1 8.29897e-05, Linf 0.00519514, total time[s] 0.063098 +Converged at iteration 28, L1 6.80228e-05, Linf 0.00440905, total time[s] 0.072715 +Converged at iteration 26, L1 8.13588e-05, Linf 0.00430173, total time[s] 0.06934 +Converged at iteration 21, L1 8.51092e-05, Linf 0.00431601, total time[s] 0.057048 +Converged at iteration 18, L1 7.35752e-05, Linf 0.00299007, total time[s] 0.061475 +Converged at iteration 31, L1 7.50756e-05, Linf 0.00268163, total time[s] 0.080699 +Converged at iteration 20, L1 8.1956e-05, Linf 0.0049455, total time[s] 0.052475 +Converged at iteration 24, L1 6.8632e-05, Linf 0.00499744, total time[s] 0.069178 +Converged at iteration 30, L1 9.424e-05, Linf 0.00345506, total time[s] 0.076841 +Converged at iteration 25, L1 9.01969e-05, Linf 0.00466688, total time[s] 0.066047 +Converged at iteration 23, L1 8.37533e-05, Linf 0.00393097, total time[s] 0.061413 +Converged at iteration 23, L1 9.32581e-05, Linf 0.00455945, total time[s] 0.062186 +Converged at iteration 26, L1 6.90846e-05, Linf 0.00500875, total time[s] 0.069858 +Converged at iteration 29, L1 7.20805e-05, Linf 0.00490213, total time[s] 0.075846 +Converged at iteration 32, L1 8.58059e-05, Linf 0.00350138, total time[s] 0.082885 +Converged at iteration 31, L1 7.2533e-05, Linf 0.003048, total time[s] 0.096845 +Converged at iteration 29, L1 7.76208e-05, Linf 0.00291297, total time[s] 0.085332 +Converged at iteration 32, L1 7.63171e-05, Linf 0.00337579, total time[s] 0.101035 +Converged at iteration 35, L1 9.75139e-05, Linf 0.00406617, total time[s] 0.118456 +Converged at iteration 33, L1 8.07992e-05, Linf 0.00500156, total time[s] 0.136337 +Converged at iteration 28, L1 8.43696e-05, Linf 0.00398757, total time[s] 0.173684 +Converged at iteration 24, L1 7.80467e-05, Linf 0.00256154, total time[s] 0.131013 +Converged at iteration 26, L1 8.3619e-05, Linf 0.00405324, total time[s] 0.082024 +Converged at iteration 39, L1 9.33899e-05, Linf 0.00548848, total time[s] 0.098394 +Converged at iteration 36, L1 7.26009e-05, Linf 0.00384701, total time[s] 0.101335 +Converged at iteration 27, L1 5.17283e-05, Linf 0.00565851, total time[s] 0.071797 +Converged at iteration 31, L1 6.04571e-05, Linf 0.00508913, total time[s] 0.078877 +Converged at iteration 26, L1 7.63234e-05, Linf 0.00544348, total time[s] 0.067777 +Converged at iteration 21, L1 7.16887e-05, Linf 0.00380755, total time[s] 0.059078 +Converged at iteration 20, L1 6.89461e-05, Linf 0.00502957, total time[s] 0.05598 +Converged at iteration 22, L1 7.53383e-05, Linf 0.00751918, total time[s] 0.064935 +Converged at iteration 26, L1 9.72736e-05, Linf 0.0065182, total time[s] 0.082907 +Converged at iteration 25, L1 7.49564e-05, Linf 0.00412523, total time[s] 0.072897 +Converged at iteration 20, L1 8.85752e-05, Linf 0.00555811, total time[s] 0.059831 +Converged at iteration 17, L1 8.52499e-05, Linf 0.00400212, total time[s] 0.05123 +Converged at iteration 31, L1 9.13833e-05, Linf 0.00277116, total time[s] 0.088778 +Converged at iteration 20, L1 6.64156e-05, Linf 0.00539279, total time[s] 0.053204 +Converged at iteration 24, L1 6.25472e-05, Linf 0.00579952, total time[s] 0.067704 +Converged at iteration 28, L1 7.07393e-05, Linf 0.00373891, total time[s] 0.081674 +Converged at iteration 23, L1 9.57141e-05, Linf 0.00711829, total time[s] 0.061595 +Converged at iteration 21, L1 9.3015e-05, Linf 0.0048513, total time[s] 0.061607 +Converged at iteration 23, L1 7.8687e-05, Linf 0.00414955, total time[s] 0.074844 +Converged at iteration 25, L1 9.94185e-05, Linf 0.0062553, total time[s] 0.077425 +Converged at iteration 28, L1 9.83406e-05, Linf 0.00597981, total time[s] 0.077789 +Converged at iteration 30, L1 6.86135e-05, Linf 0.00488089, total time[s] 0.078195 +Converged at iteration 28, L1 8.30509e-05, Linf 0.00350645, total time[s] 0.074622 +Converged at iteration 29, L1 8.85223e-05, Linf 0.0032948, total time[s] 0.080484 +Converged at iteration 31, L1 7.03405e-05, Linf 0.00289972, total time[s] 0.080759 +Converged at iteration 31, L1 9.20078e-05, Linf 0.00457442, total time[s] 0.080159 +Converged at iteration 33, L1 7.42144e-05, Linf 0.0053068, total time[s] 0.083788 +Converged at iteration 28, L1 7.03306e-05, Linf 0.00365175, total time[s] 0.073256 +Converged at iteration 24, L1 8.79772e-05, Linf 0.00186798, total time[s] 0.063583 +Converged at iteration 25, L1 7.01246e-05, Linf 0.00425357, total time[s] 0.066093 +Converged at iteration 39, L1 7.68343e-05, Linf 0.00658937, total time[s] 0.098818 +Converged at iteration 36, L1 7.34284e-05, Linf 0.00526861, total time[s] 0.100918 +Converged at iteration 24, L1 7.50157e-05, Linf 0.00411402, total time[s] 0.069619 +Converged at iteration 31, L1 5.84486e-05, Linf 0.00509164, total time[s] 0.08635 +Converged at iteration 25, L1 8.68472e-05, Linf 0.00571583, total time[s] 0.068164 +Converged at iteration 20, L1 9.23989e-05, Linf 0.00380205, total time[s] 0.055821 +Converged at iteration 19, L1 6.59577e-05, Linf 0.00441369, total time[s] 0.058776 +Converged at iteration 20, L1 9.17508e-05, Linf 0.00663477, total time[s] 0.06558 +Converged at iteration 24, L1 7.94435e-05, Linf 0.00490453, total time[s] 0.067438 +Converged at iteration 24, L1 7.67408e-05, Linf 0.00492113, total time[s] 0.07046 +Converged at iteration 20, L1 6.16792e-05, Linf 0.00519212, total time[s] 0.054748 +Converged at iteration 17, L1 5.2354e-05, Linf 0.00263104, total time[s] 0.047536 +Converged at iteration 32, L1 6.8993e-05, Linf 0.00253737, total time[s] 0.081922 +Converged at iteration 19, L1 9.36219e-05, Linf 0.00706808, total time[s] 0.051467 +Converged at iteration 23, L1 7.85059e-05, Linf 0.00710378, total time[s] 0.063315 +Converged at iteration 26, L1 8.14185e-05, Linf 0.0060313, total time[s] 0.080482 +Converged at iteration 23, L1 5.79552e-05, Linf 0.00603788, total time[s] 0.065407 +Converged at iteration 20, L1 8.31231e-05, Linf 0.00552391, total time[s] 0.05457 +Converged at iteration 22, L1 9.95695e-05, Linf 0.00479366, total time[s] 0.059912 +Converged at iteration 25, L1 8.48786e-05, Linf 0.0043999, total time[s] 0.065527 +Converged at iteration 28, L1 7.81433e-05, Linf 0.00380535, total time[s] 0.071849 +Converged at iteration 29, L1 7.50405e-05, Linf 0.00611968, total time[s] 0.075204 +Converged at iteration 27, L1 7.35058e-05, Linf 0.00401981, total time[s] 0.070512 +Converged at iteration 29, L1 7.66175e-05, Linf 0.00380589, total time[s] 0.074825 +Converged at iteration 29, L1 9.19912e-05, Linf 0.00277232, total time[s] 0.075632 +Converged at iteration 28, L1 8.48896e-05, Linf 0.00273813, total time[s] 0.073476 +Converged at iteration 33, L1 6.20116e-05, Linf 0.00584911, total time[s] 0.087378 +Converged at iteration 27, L1 6.9546e-05, Linf 0.00334625, total time[s] 0.072987 +Converged at iteration 24, L1 9.68004e-05, Linf 0.00239042, total time[s] 0.066156 +Converged at iteration 23, L1 7.56752e-05, Linf 0.00336635, total time[s] 0.061878 +Converged at iteration 39, L1 7.44768e-05, Linf 0.00661608, total time[s] 0.100756 +Converged at iteration 36, L1 7.22495e-05, Linf 0.00533586, total time[s] 0.099226 +Converged at iteration 24, L1 7.47017e-05, Linf 0.00388772, total time[s] 0.06281 +Converged at iteration 31, L1 5.69756e-05, Linf 0.00507401, total time[s] 0.079618 +Converged at iteration 25, L1 8.74099e-05, Linf 0.00583968, total time[s] 0.065251 +Converged at iteration 20, L1 9.51525e-05, Linf 0.00386566, total time[s] 0.053193 +Converged at iteration 19, L1 6.38795e-05, Linf 0.00442362, total time[s] 0.050373 +Converged at iteration 20, L1 9.02405e-05, Linf 0.00655506, total time[s] 0.053908 +Converged at iteration 24, L1 7.70359e-05, Linf 0.0045698, total time[s] 0.067027 +Converged at iteration 24, L1 7.81218e-05, Linf 0.00501669, total time[s] 0.073488 +Converged at iteration 20, L1 6.12549e-05, Linf 0.00515376, total time[s] 0.059498 +Converged at iteration 16, L1 9.93201e-05, Linf 0.00457241, total time[s] 0.095413 +Converged at iteration 32, L1 6.90282e-05, Linf 0.00257278, total time[s] 0.104347 +Converged at iteration 19, L1 9.33474e-05, Linf 0.00697155, total time[s] 0.050876 +Converged at iteration 23, L1 7.74294e-05, Linf 0.00703233, total time[s] 0.060443 +Converged at iteration 26, L1 7.99028e-05, Linf 0.00596621, total time[s] 0.067756 +Converged at iteration 23, L1 5.70571e-05, Linf 0.00599071, total time[s] 0.059714 +Converged at iteration 20, L1 8.25443e-05, Linf 0.00551217, total time[s] 0.053751 +Converged at iteration 23, L1 6.34814e-05, Linf 0.00299035, total time[s] 0.063622 +Converged at iteration 25, L1 8.38177e-05, Linf 0.00419966, total time[s] 0.067727 +Converged at iteration 28, L1 7.75072e-05, Linf 0.00351883, total time[s] 0.081087 +Converged at iteration 29, L1 7.46265e-05, Linf 0.00612468, total time[s] 0.090515 +Converged at iteration 27, L1 7.37208e-05, Linf 0.00399168, total time[s] 0.072792 +Converged at iteration 29, L1 7.75945e-05, Linf 0.00382362, total time[s] 0.075092 +Converged at iteration 29, L1 9.17845e-05, Linf 0.00277466, total time[s] 0.075496 +Converged at iteration 28, L1 8.18793e-05, Linf 0.0026651, total time[s] 0.079579 +Converged at iteration 33, L1 6.00627e-05, Linf 0.00585273, total time[s] 0.084891 +Converged at iteration 27, L1 6.9185e-05, Linf 0.00343039, total time[s] 0.071135 +Converged at iteration 24, L1 9.90797e-05, Linf 0.00243498, total time[s] 0.063726 +Converged at iteration 23, L1 7.49348e-05, Linf 0.00329646, total time[s] 0.062355 +Converged at iteration 39, L1 7.33806e-05, Linf 0.00662307, total time[s] 0.100111 +Converged at iteration 36, L1 7.0026e-05, Linf 0.00534051, total time[s] 0.093834 +Converged at iteration 24, L1 7.33512e-05, Linf 0.00368522, total time[s] 0.063611 +Converged at iteration 31, L1 5.64872e-05, Linf 0.00504471, total time[s] 0.082575 +Converged at iteration 25, L1 8.86455e-05, Linf 0.00599464, total time[s] 0.072227 +Converged at iteration 20, L1 9.86251e-05, Linf 0.00391836, total time[s] 0.055908 +Converged at iteration 19, L1 6.21351e-05, Linf 0.0042677, total time[s] 0.054493 +Converged at iteration 20, L1 8.83337e-05, Linf 0.00609333, total time[s] 0.056764 +Converged at iteration 24, L1 7.44799e-05, Linf 0.00422773, total time[s] 0.066387 +Converged at iteration 24, L1 7.88406e-05, Linf 0.00504048, total time[s] 0.064846 +Converged at iteration 20, L1 6.25912e-05, Linf 0.00517327, total time[s] 0.057254 +Converged at iteration 16, L1 9.79185e-05, Linf 0.00481568, total time[s] 0.046709 +Converged at iteration 32, L1 6.85945e-05, Linf 0.00259765, total time[s] 0.086545 +Converged at iteration 19, L1 9.38493e-05, Linf 0.00688007, total time[s] 0.051123 +Converged at iteration 23, L1 7.72456e-05, Linf 0.00694739, total time[s] 0.066392 +Converged at iteration 26, L1 7.97459e-05, Linf 0.00592998, total time[s] 0.066948 +Converged at iteration 23, L1 5.68541e-05, Linf 0.00598694, total time[s] 0.0642 +Converged at iteration 20, L1 8.4204e-05, Linf 0.00551252, total time[s] 0.064162 +Converged at iteration 23, L1 6.52743e-05, Linf 0.00283524, total time[s] 0.062439 +Converged at iteration 25, L1 8.33841e-05, Linf 0.00404002, total time[s] 0.066385 +Converged at iteration 28, L1 7.76095e-05, Linf 0.00361934, total time[s] 0.077085 +Converged at iteration 29, L1 7.59439e-05, Linf 0.00618279, total time[s] 0.08092 +Converged at iteration 27, L1 7.5242e-05, Linf 0.00397593, total time[s] 0.070314 +Converged at iteration 29, L1 7.90773e-05, Linf 0.00386969, total time[s] 0.075269 +Converged at iteration 29, L1 9.26336e-05, Linf 0.00278042, total time[s] 0.075081 +Converged at iteration 28, L1 8.26757e-05, Linf 0.00260623, total time[s] 0.07792 +Converged at iteration 33, L1 5.84844e-05, Linf 0.00585117, total time[s] 0.09126 +Converged at iteration 27, L1 6.94129e-05, Linf 0.00353549, total time[s] 0.078421 +Converged at iteration 25, L1 7.12243e-05, Linf 0.00193434, total time[s] 0.067579 +Converged at iteration 23, L1 7.43124e-05, Linf 0.00313672, total time[s] 0.062279 +Converged at iteration 39, L1 7.19687e-05, Linf 0.00661174, total time[s] 0.119138 +Converged at iteration 36, L1 6.83158e-05, Linf 0.00545423, total time[s] 0.102185 +Converged at iteration 24, L1 7.33092e-05, Linf 0.0033703, total time[s] 0.063149 +Converged at iteration 30, L1 9.94493e-05, Linf 0.00615582, total time[s] 0.076273 +Converged at iteration 25, L1 9.26922e-05, Linf 0.00625715, total time[s] 0.065636 +Converged at iteration 21, L1 5.8871e-05, Linf 0.00343269, total time[s] 0.055752 +Converged at iteration 19, L1 6.05159e-05, Linf 0.00406339, total time[s] 0.051612 +Converged at iteration 20, L1 8.59477e-05, Linf 0.00644322, total time[s] 0.054493 +Converged at iteration 24, L1 7.18031e-05, Linf 0.00444895, total time[s] 0.075257 +Converged at iteration 24, L1 8.07923e-05, Linf 0.00520181, total time[s] 0.071242 +Converged at iteration 20, L1 6.49423e-05, Linf 0.00542765, total time[s] 0.053386 +Converged at iteration 16, L1 9.72562e-05, Linf 0.00508109, total time[s] 0.05157 +Converged at iteration 32, L1 6.7625e-05, Linf 0.00262169, total time[s] 0.09171 +Converged at iteration 19, L1 9.46136e-05, Linf 0.00674903, total time[s] 0.060175 +Converged at iteration 23, L1 7.68009e-05, Linf 0.00644449, total time[s] 0.083113 +Converged at iteration 26, L1 8.04349e-05, Linf 0.00589306, total time[s] 0.074779 +Converged at iteration 23, L1 5.65397e-05, Linf 0.00596663, total time[s] 0.065025 +Converged at iteration 20, L1 8.56425e-05, Linf 0.00551487, total time[s] 0.055204 +Converged at iteration 23, L1 6.74181e-05, Linf 0.00285585, total time[s] 0.061046 +Converged at iteration 25, L1 8.38903e-05, Linf 0.00411386, total time[s] 0.066657 +Converged at iteration 28, L1 7.76708e-05, Linf 0.00370932, total time[s] 0.07233 +Converged at iteration 29, L1 7.75658e-05, Linf 0.00624005, total time[s] 0.073776 +Converged at iteration 27, L1 7.70817e-05, Linf 0.00395078, total time[s] 0.074935 +Converged at iteration 29, L1 8.10777e-05, Linf 0.00392135, total time[s] 0.081844 +Converged at iteration 29, L1 9.33419e-05, Linf 0.00278233, total time[s] 0.074156 +Converged at iteration 28, L1 8.0705e-05, Linf 0.00253832, total time[s] 0.072288 +Converged at iteration 32, L1 9.89526e-05, Linf 0.00688694, total time[s] 0.095304 +Converged at iteration 27, L1 7.14034e-05, Linf 0.00365916, total time[s] 0.071039 +Converged at iteration 25, L1 7.22526e-05, Linf 0.00199003, total time[s] 0.06959 +Converged at iteration 23, L1 7.48964e-05, Linf 0.00312892, total time[s] 0.059988 +Converged at iteration 39, L1 7.01349e-05, Linf 0.00651484, total time[s] 0.100232 +Converged at iteration 36, L1 6.58958e-05, Linf 0.00550541, total time[s] 0.092685 +Converged at iteration 24, L1 7.25562e-05, Linf 0.00311234, total time[s] 0.062054 +Converged at iteration 30, L1 9.66342e-05, Linf 0.00612759, total time[s] 0.077794 +Converged at iteration 25, L1 9.82543e-05, Linf 0.00664099, total time[s] 0.074626 +Converged at iteration 21, L1 6.50618e-05, Linf 0.00333416, total time[s] 0.05699 +Converged at iteration 19, L1 5.88769e-05, Linf 0.00392043, total time[s] 0.064377 +Converged at iteration 20, L1 8.26918e-05, Linf 0.00613906, total time[s] 0.0543 +Converged at iteration 24, L1 6.86066e-05, Linf 0.00348769, total time[s] 0.063685 +Converged at iteration 24, L1 8.61261e-05, Linf 0.00540216, total time[s] 0.063207 +Converged at iteration 20, L1 7.00543e-05, Linf 0.00568457, total time[s] 0.054291 +Converged at iteration 16, L1 9.69774e-05, Linf 0.00540001, total time[s] 0.044661 +Converged at iteration 32, L1 6.60265e-05, Linf 0.00264307, total time[s] 0.095119 +Converged at iteration 19, L1 9.47399e-05, Linf 0.00658656, total time[s] 0.05239 +Converged at iteration 23, L1 7.64554e-05, Linf 0.00666413, total time[s] 0.068134 +Converged at iteration 26, L1 8.07687e-05, Linf 0.00585854, total time[s] 0.074752 +Converged at iteration 23, L1 5.60084e-05, Linf 0.00595394, total time[s] 0.060592 +Converged at iteration 20, L1 8.88442e-05, Linf 0.00552929, total time[s] 0.055472 +Converged at iteration 23, L1 6.93425e-05, Linf 0.00271905, total time[s] 0.059663 +Converged at iteration 25, L1 8.46418e-05, Linf 0.00378522, total time[s] 0.06568 +Converged at iteration 28, L1 7.89525e-05, Linf 0.0040048, total time[s] 0.071624 +Converged at iteration 29, L1 7.99369e-05, Linf 0.0063148, total time[s] 0.074681 +Converged at iteration 27, L1 7.97844e-05, Linf 0.00396623, total time[s] 0.070264 +Converged at iteration 29, L1 8.28926e-05, Linf 0.00399548, total time[s] 0.07372 +Converged at iteration 29, L1 9.43748e-05, Linf 0.00277521, total time[s] 0.075115 +Converged at iteration 28, L1 8.09492e-05, Linf 0.00247136, total time[s] 0.071295 +Converged at iteration 32, L1 9.60518e-05, Linf 0.00693138, total time[s] 0.087056 +Converged at iteration 27, L1 7.64477e-05, Linf 0.00407363, total time[s] 0.073435 +Converged at iteration 25, L1 6.96138e-05, Linf 0.00201642, total time[s] 0.066654 +Converged at iteration 23, L1 7.61167e-05, Linf 0.00297248, total time[s] 0.059808 +Converged at iteration 39, L1 6.71968e-05, Linf 0.00653191, total time[s] 0.100446 +Converged at iteration 36, L1 6.28834e-05, Linf 0.00554605, total time[s] 0.092227 +Converged at iteration 24, L1 7.26336e-05, Linf 0.00307217, total time[s] 0.061689 +Converged at iteration 30, L1 9.33294e-05, Linf 0.00605311, total time[s] 0.075855 +Converged at iteration 26, L1 5.93621e-05, Linf 0.00590353, total time[s] 0.066233 +Converged at iteration 21, L1 7.72334e-05, Linf 0.00342646, total time[s] 0.055623 +Converged at iteration 19, L1 5.80545e-05, Linf 0.00393807, total time[s] 0.05296 +Converged at iteration 20, L1 7.90138e-05, Linf 0.00637705, total time[s] 0.053314 +Converged at iteration 24, L1 6.48871e-05, Linf 0.00397835, total time[s] 0.062022 +Converged at iteration 24, L1 8.95329e-05, Linf 0.00566474, total time[s] 0.062288 +Converged at iteration 20, L1 7.51141e-05, Linf 0.00575421, total time[s] 0.054075 +Converged at iteration 16, L1 9.63978e-05, Linf 0.00593733, total time[s] 0.042093 +Converged at iteration 32, L1 6.32327e-05, Linf 0.00266603, total time[s] 0.082685 +Converged at iteration 19, L1 9.41475e-05, Linf 0.00641677, total time[s] 0.052028 +Converged at iteration 23, L1 7.5459e-05, Linf 0.00680072, total time[s] 0.080254 +Converged at iteration 26, L1 8.21505e-05, Linf 0.00583022, total time[s] 0.066549 +Converged at iteration 23, L1 5.55062e-05, Linf 0.0060198, total time[s] 0.05885 +Converged at iteration 20, L1 9.44589e-05, Linf 0.00552071, total time[s] 0.054884 +Converged at iteration 23, L1 7.15674e-05, Linf 0.00261853, total time[s] 0.060624 +Converged at iteration 25, L1 8.56785e-05, Linf 0.00366397, total time[s] 0.064695 +Converged at iteration 28, L1 8.01037e-05, Linf 0.00425233, total time[s] 0.071983 +Converged at iteration 29, L1 8.30969e-05, Linf 0.00636496, total time[s] 0.073348 +Converged at iteration 27, L1 8.35567e-05, Linf 0.00389547, total time[s] 0.076011 +Converged at iteration 29, L1 8.55691e-05, Linf 0.00409311, total time[s] 0.080051 +Converged at iteration 29, L1 9.43383e-05, Linf 0.0027679, total time[s] 0.074145 +Converged at iteration 28, L1 8.11851e-05, Linf 0.00240311, total time[s] 0.070088 +Converged at iteration 32, L1 9.2268e-05, Linf 0.00687315, total time[s] 0.077589 +Converged at iteration 27, L1 8.20517e-05, Linf 0.00450225, total time[s] 0.071907 +Converged at iteration 24, L1 9.85298e-05, Linf 0.00261732, total time[s] 0.060379 +Converged at iteration 23, L1 7.79268e-05, Linf 0.0028837, total time[s] 0.057843 +Converged at iteration 39, L1 6.35624e-05, Linf 0.00640125, total time[s] 0.096568 +Converged at iteration 36, L1 5.56728e-05, Linf 0.00552125, total time[s] 0.091636 +Converged at iteration 24, L1 7.57796e-05, Linf 0.0028936, total time[s] 0.059589 +Converged at iteration 30, L1 8.48525e-05, Linf 0.0059435, total time[s] 0.074495 +Converged at iteration 26, L1 6.4692e-05, Linf 0.00647122, total time[s] 0.06443 +Converged at iteration 21, L1 9.38725e-05, Linf 0.00454324, total time[s] 0.052459 +Converged at iteration 19, L1 5.76025e-05, Linf 0.00390968, total time[s] 0.048585 +Converged at iteration 20, L1 7.44559e-05, Linf 0.00607898, total time[s] 0.060868 +Converged at iteration 24, L1 5.9117e-05, Linf 0.00330255, total time[s] 0.073007 +Converged at iteration 24, L1 9.47415e-05, Linf 0.00604524, total time[s] 0.060552 +Converged at iteration 20, L1 8.33043e-05, Linf 0.00597019, total time[s] 0.051347 +Converged at iteration 16, L1 9.57955e-05, Linf 0.00635683, total time[s] 0.04304 +Converged at iteration 32, L1 5.84239e-05, Linf 0.00269234, total time[s] 0.078774 +Converged at iteration 19, L1 9.26959e-05, Linf 0.00618172, total time[s] 0.049023 +Converged at iteration 23, L1 7.09032e-05, Linf 0.00615066, total time[s] 0.058142 +Converged at iteration 26, L1 8.5104e-05, Linf 0.00822177, total time[s] 0.064698 +Converged at iteration 23, L1 5.56883e-05, Linf 0.00601611, total time[s] 0.058932 +Converged at iteration 21, L1 5.53003e-05, Linf 0.00470532, total time[s] 0.053852 +Converged at iteration 23, L1 7.29401e-05, Linf 0.00247696, total time[s] 0.061523 +Converged at iteration 25, L1 8.5929e-05, Linf 0.00345976, total time[s] 0.062744 +Converged at iteration 28, L1 8.19154e-05, Linf 0.00602314, total time[s] 0.071158 +Converged at iteration 29, L1 8.69516e-05, Linf 0.00646719, total time[s] 0.072991 +Converged at iteration 27, L1 8.71759e-05, Linf 0.0038515, total time[s] 0.070348 +Converged at iteration 29, L1 8.69054e-05, Linf 0.00417591, total time[s] 0.073754 +Converged at iteration 29, L1 9.3625e-05, Linf 0.00279743, total time[s] 0.074424 +Converged at iteration 28, L1 7.95129e-05, Linf 0.00233042, total time[s] 0.070538 +Converged at iteration 32, L1 8.39816e-05, Linf 0.00672598, total time[s] 0.087563 +Converged at iteration 27, L1 8.85973e-05, Linf 0.00514521, total time[s] 0.069407 +Converged at iteration 25, L1 6.32351e-05, Linf 0.00197844, total time[s] 0.064527 +Converged at iteration 23, L1 7.99869e-05, Linf 0.00267073, total time[s] 0.066888 +Converged at iteration 38, L1 6.51817e-05, Linf 0.00617689, total time[s] 0.109289 +Converged at iteration 34, L1 8.76453e-05, Linf 0.00672954, total time[s] 0.085283 +Converged at iteration 25, L1 5.08377e-05, Linf 0.00196859, total time[s] 0.064314 +Converged at iteration 29, L1 7.72397e-05, Linf 0.00674322, total time[s] 0.073537 +Converged at iteration 26, L1 8.10526e-05, Linf 0.00961, total time[s] 0.065913 +Converged at iteration 23, L1 8.43883e-05, Linf 0.00767888, total time[s] 0.060089 +Converged at iteration 19, L1 6.67846e-05, Linf 0.00336191, total time[s] 0.052713 +Converged at iteration 20, L1 5.96148e-05, Linf 0.0034, total time[s] 0.05274 +Converged at iteration 23, L1 7.64592e-05, Linf 0.0038005, total time[s] 0.060079 +Converged at iteration 25, L1 6.78638e-05, Linf 0.00657853, total time[s] 0.064379 +Converged at iteration 21, L1 5.48156e-05, Linf 0.00549036, total time[s] 0.054809 +Converged at iteration 17, L1 7.93535e-05, Linf 0.00614385, total time[s] 0.046785 +Converged at iteration 31, L1 8.22609e-05, Linf 0.00341583, total time[s] 0.082859 +Converged at iteration 18, L1 9.0053e-05, Linf 0.00594271, total time[s] 0.048767 +Converged at iteration 21, L1 9.27895e-05, Linf 0.00491676, total time[s] 0.064613 +Converged at iteration 26, L1 9.60323e-05, Linf 0.00449686, total time[s] 0.078072 +Converged at iteration 23, L1 6.08667e-05, Linf 0.00558529, total time[s] 0.061083 +Converged at iteration 21, L1 8.39086e-05, Linf 0.00395889, total time[s] 0.055749 +Converged at iteration 22, L1 9.18837e-05, Linf 0.00243727, total time[s] 0.057974 +Converged at iteration 25, L1 7.07409e-05, Linf 0.00220805, total time[s] 0.066513 +Converged at iteration 28, L1 7.87688e-05, Linf 0.00496833, total time[s] 0.074798 +Converged at iteration 30, L1 5.38367e-05, Linf 0.00377845, total time[s] 0.079326 +Converged at iteration 27, L1 9.87244e-05, Linf 0.00550473, total time[s] 0.072183 +Converged at iteration 30, L1 6.65726e-05, Linf 0.00403636, total time[s] 0.08741 +Converged at iteration 29, L1 9.28827e-05, Linf 0.00285837, total time[s] 0.081254 +Converged at iteration 28, L1 9.38865e-05, Linf 0.00206902, total time[s] 0.079685 +Converged at iteration 31, L1 6.63721e-05, Linf 0.00680682, total time[s] 0.089432 +Converged at iteration 28, L1 6.17274e-05, Linf 0.00728603, total time[s] 0.07707 +Converged at iteration 26, L1 6.61048e-05, Linf 0.00446247, total time[s] 0.072883 +Converged at iteration 24, L1 6.73591e-05, Linf 0.00224077, total time[s] 0.064913 +Converged at iteration 36, L1 9.92886e-05, Linf 0.00698433, total time[s] 0.104286 +Converged at iteration 33, L1 8.84847e-05, Linf 0.00639445, total time[s] 0.087502 +Converged at iteration 25, L1 6.61213e-05, Linf 0.00206729, total time[s] 0.067045 +Converged at iteration 28, L1 7.63425e-05, Linf 0.00767963, total time[s] 0.074645 +Converged at iteration 27, L1 4.43915e-05, Linf 0.0100654, total time[s] 0.072022 +Converged at iteration 24, L1 8.93957e-05, Linf 0.0112718, total time[s] 0.065689 +Converged at iteration 19, L1 8.52649e-05, Linf 0.00368495, total time[s] 0.055693 +Converged at iteration 19, L1 8.45295e-05, Linf 0.00452207, total time[s] 0.051897 +Converged at iteration 23, L1 7.36468e-05, Linf 0.00312398, total time[s] 0.066128 +Converged at iteration 25, L1 8.94068e-05, Linf 0.00833871, total time[s] 0.066468 +Converged at iteration 21, L1 7.14203e-05, Linf 0.00575171, total time[s] 0.057661 +Converged at iteration 18, L1 6.4474e-05, Linf 0.00496046, total time[s] 0.050642 +Converged at iteration 31, L1 7.28403e-05, Linf 0.00424451, total time[s] 0.082732 +Converged at iteration 17, L1 6.28333e-05, Linf 0.00491964, total time[s] 0.049675 +Converged at iteration 20, L1 9.14775e-05, Linf 0.00279217, total time[s] 0.058412 +Converged at iteration 27, L1 7.56042e-05, Linf 0.00270086, total time[s] 0.072219 +Converged at iteration 23, L1 8.77426e-05, Linf 0.00614975, total time[s] 0.062329 +Converged at iteration 22, L1 6.41831e-05, Linf 0.00373039, total time[s] 0.060249 +Converged at iteration 23, L1 7.00016e-05, Linf 0.00266996, total time[s] 0.06232 +Converged at iteration 23, L1 8.82527e-05, Linf 0.00237089, total time[s] 0.063912 +Converged at iteration 28, L1 7.51447e-05, Linf 0.00472484, total time[s] 0.078936 +Converged at iteration 30, L1 7.73662e-05, Linf 0.00407987, total time[s] 0.079592 +Converged at iteration 28, L1 5.93686e-05, Linf 0.0023176, total time[s] 0.073391 +Converged at iteration 30, L1 9.84467e-05, Linf 0.00524345, total time[s] 0.079059 +Converged at iteration 29, L1 9.85664e-05, Linf 0.00291239, total time[s] 0.076171 +Converged at iteration 29, L1 8.01997e-05, Linf 0.00131938, total time[s] 0.076922 +Converged at iteration 29, L1 8.58929e-05, Linf 0.0101134, total time[s] 0.075905 +Converged at iteration 28, L1 8.28891e-05, Linf 0.0114162, total time[s] 0.073051 +Converged at iteration 27, L1 7.21402e-05, Linf 0.0070515, total time[s] 0.0713 +Converged at iteration 24, L1 9.76729e-05, Linf 0.00279099, total time[s] 0.06465 +Converged at iteration 36, L1 7.59113e-05, Linf 0.00593709, total time[s] 0.094379 +Converged at iteration 33, L1 7.56411e-05, Linf 0.00576075, total time[s] 0.090572 +Converged at iteration 25, L1 6.97162e-05, Linf 0.00220774, total time[s] 0.066956 +Converged at iteration 27, L1 9.6059e-05, Linf 0.0100392, total time[s] 0.095976 +Converged at iteration 27, L1 4.78927e-05, Linf 0.0118964, total time[s] 0.074883 +Converged at iteration 25, L1 4.7008e-05, Linf 0.0109882, total time[s] 0.089035 +Converged at iteration 19, L1 9.21416e-05, Linf 0.00406893, total time[s] 0.069473 +Converged at iteration 19, L1 7.90902e-05, Linf 0.00424469, total time[s] 0.073974 +Converged at iteration 23, L1 7.16088e-05, Linf 0.00284367, total time[s] 0.066991 +Converged at iteration 25, L1 8.37562e-05, Linf 0.00947252, total time[s] 0.104314 +Converged at iteration 21, L1 8.1188e-05, Linf 0.00583829, total time[s] 0.070101 +Converged at iteration 18, L1 7.64762e-05, Linf 0.00541802, total time[s] 0.055373 +Converged at iteration 31, L1 6.49577e-05, Linf 0.00472005, total time[s] 0.100399 +Converged at iteration 18, L1 9.78848e-05, Linf 0.00224943, total time[s] 0.069836 +Converged at iteration 22, L1 9.42157e-05, Linf 0.00542124, total time[s] 0.063701 +Converged at iteration 27, L1 8.44001e-05, Linf 0.00308389, total time[s] 0.083534 +Converged at iteration 24, L1 5.28459e-05, Linf 0.00324824, total time[s] 0.076204 +Converged at iteration 22, L1 7.80324e-05, Linf 0.0042706, total time[s] 0.062905 +Converged at iteration 24, L1 5.87868e-05, Linf 0.00325018, total time[s] 0.066492 +Converged at iteration 23, L1 9.55677e-05, Linf 0.00524252, total time[s] 0.06579 +Converged at iteration 28, L1 7.21811e-05, Linf 0.00440463, total time[s] 0.090275 +Converged at iteration 30, L1 9.52185e-05, Linf 0.00479955, total time[s] 0.077884 +Converged at iteration 28, L1 5.9718e-05, Linf 0.00232, total time[s] 0.074385 +Converged at iteration 31, L1 7.14942e-05, Linf 0.00467252, total time[s] 0.084765 +Converged at iteration 30, L1 7.07727e-05, Linf 0.00241872, total time[s] 0.077985 +Converged at iteration 30, L1 5.99735e-05, Linf 0.00123908, total time[s] 0.077212 +Converged at iteration 29, L1 4.81292e-05, Linf 0.00882552, total time[s] 0.075387 +Converged at iteration 28, L1 9.36256e-05, Linf 0.014037, total time[s] 0.072857 +Converged at iteration 27, L1 9.66161e-05, Linf 0.00931613, total time[s] 0.070192 +Converged at iteration 25, L1 6.38153e-05, Linf 0.00195074, total time[s] 0.065697 +Converged at iteration 34, L1 7.82785e-05, Linf 0.00497749, total time[s] 0.093299 +Converged at iteration 32, L1 6.60196e-05, Linf 0.00512936, total time[s] 0.101577 +Converged at iteration 26, L1 9.81421e-05, Linf 0.00463578, total time[s] 0.070854 +Converged at iteration 27, L1 6.79396e-05, Linf 0.00259757, total time[s] 0.070225 +Converged at iteration 27, L1 5.90243e-05, Linf 0.0236599, total time[s] 0.070629 +Converged at iteration 26, L1 3.36638e-05, Linf 0.0198755, total time[s] 0.070362 +Converged at iteration 21, L1 6.33244e-05, Linf 0.00652642, total time[s] 0.063303 +Converged at iteration 22, L1 6.07606e-05, Linf 0.00443633, total time[s] 0.073759 +Converged at iteration 24, L1 5.36665e-05, Linf 0.00683862, total time[s] 0.084174 +Converged at iteration 26, L1 5.8395e-05, Linf 0.0107846, total time[s] 0.080025 +Converged at iteration 21, L1 9.28977e-05, Linf 0.00790641, total time[s] 0.059788 +Converged at iteration 19, L1 7.73605e-05, Linf 0.00715038, total time[s] 0.05332 +Converged at iteration 31, L1 4.89313e-05, Linf 0.0100966, total time[s] 0.078922 +Converged at iteration 22, L1 7.9961e-05, Linf 0.00961038, total time[s] 0.060301 +Converged at iteration 25, L1 8.55151e-05, Linf 0.0163997, total time[s] 0.065349 +Converged at iteration 26, L1 9.79685e-05, Linf 0.00473735, total time[s] 0.075944 +Converged at iteration 25, L1 9.70423e-05, Linf 0.00356729, total time[s] 0.071608 +Converged at iteration 25, L1 5.69825e-05, Linf 0.00415492, total time[s] 0.075328 +Converged at iteration 26, L1 6.95797e-05, Linf 0.00854871, total time[s] 0.076468 +Converged at iteration 27, L1 5.48687e-05, Linf 0.0101433, total time[s] 0.074683 +Converged at iteration 27, L1 8.96559e-05, Linf 0.00460403, total time[s] 0.091084 +Converged at iteration 32, L1 9.42352e-05, Linf 0.0066802, total time[s] 0.138121 +Converged at iteration 28, L1 7.96227e-05, Linf 0.00299838, total time[s] 0.107126 +Converged at iteration 32, L1 7.96506e-05, Linf 0.00958587, total time[s] 0.134554 +Converged at iteration 32, L1 9.35817e-05, Linf 0.00544671, total time[s] 0.116676 +Converged at iteration 33, L1 8.55787e-05, Linf 0.00383539, total time[s] 0.119093 +Converged at iteration 29, L1 7.66808e-05, Linf 0.00446936, total time[s] 0.085613 +Converged at iteration 29, L1 4.48086e-05, Linf 0.0199345, total time[s] 0.075779 +Converged at iteration 29, L1 2.88421e-05, Linf 0.0115831, total time[s] 0.075341 +Converged at iteration 26, L1 8.20213e-05, Linf 0.00375942, total time[s] 0.069272 +Converged at iteration 35, L1 6.03069e-05, Linf 0.00480688, total time[s] 0.092273 +Converged at iteration 32, L1 8.1915e-05, Linf 0.00541768, total time[s] 0.088083 +Converged at iteration 26, L1 5.38755e-05, Linf 0.00258661, total time[s] 0.078736 +Converged at iteration 26, L1 9.41428e-05, Linf 0.00700283, total time[s] 0.070469 +Converged at iteration 27, L1 5.98092e-05, Linf 0.0211835, total time[s] 0.075505 +Converged at iteration 26, L1 3.02415e-05, Linf 0.0152118, total time[s] 0.06948 +Converged at iteration 21, L1 3.69097e-05, Linf 0.00449006, total time[s] 0.072756 +Converged at iteration 21, L1 7.41114e-05, Linf 0.00445733, total time[s] 0.079528 +Converged at iteration 23, L1 7.95216e-05, Linf 0.00398642, total time[s] 0.088237 +Converged at iteration 26, L1 4.89149e-05, Linf 0.00546882, total time[s] 0.091666 +Converged at iteration 21, L1 8.58229e-05, Linf 0.00815331, total time[s] 0.07427 +Converged at iteration 19, L1 6.33453e-05, Linf 0.00710331, total time[s] 0.075937 +Converged at iteration 31, L1 5.98705e-05, Linf 0.00847494, total time[s] 0.115499 +Converged at iteration 22, L1 6.42129e-05, Linf 0.00783081, total time[s] 0.063749 +Converged at iteration 25, L1 5.26577e-05, Linf 0.0112906, total time[s] 0.06509 +Converged at iteration 27, L1 5.68001e-05, Linf 0.00300114, total time[s] 0.070551 +Converged at iteration 24, L1 8.54067e-05, Linf 0.00360238, total time[s] 0.067387 +Converged at iteration 24, L1 6.0012e-05, Linf 0.00432341, total time[s] 0.06512 +Converged at iteration 25, L1 9.91962e-05, Linf 0.00928016, total time[s] 0.064875 +Converged at iteration 26, L1 7.43018e-05, Linf 0.0117774, total time[s] 0.067217 +Converged at iteration 27, L1 9.80177e-05, Linf 0.00415772, total time[s] 0.071321 +Converged at iteration 32, L1 6.1015e-05, Linf 0.00342856, total time[s] 0.080366 +Converged at iteration 28, L1 7.76193e-05, Linf 0.00302095, total time[s] 0.070432 +Converged at iteration 32, L1 7.38023e-05, Linf 0.00680872, total time[s] 0.088372 +Converged at iteration 31, L1 9.56978e-05, Linf 0.00364438, total time[s] 0.081734 +Converged at iteration 32, L1 8.10168e-05, Linf 0.00213793, total time[s] 0.084359 +Converged at iteration 28, L1 8.55357e-05, Linf 0.00257072, total time[s] 0.087364 +Converged at iteration 29, L1 4.76951e-05, Linf 0.0182661, total time[s] 0.084371 +Converged at iteration 28, L1 9.19359e-05, Linf 0.0185064, total time[s] 0.087155 +Converged at iteration 26, L1 6.03021e-05, Linf 0.00324026, total time[s] 0.077612 +Converged at iteration 35, L1 7.68994e-05, Linf 0.0056166, total time[s] 0.100648 +Converged at iteration 32, L1 9.93538e-05, Linf 0.00539408, total time[s] 0.107651 +Converged at iteration 25, L1 8.05565e-05, Linf 0.00330283, total time[s] 0.068754 +Converged at iteration 26, L1 8.81232e-05, Linf 0.0123587, total time[s] 0.066289 +Converged at iteration 27, L1 5.69748e-05, Linf 0.0178313, total time[s] 0.068578 +Converged at iteration 25, L1 7.84347e-05, Linf 0.0196222, total time[s] 0.067222 +Converged at iteration 20, L1 7.60086e-05, Linf 0.00535189, total time[s] 0.069101 +Converged at iteration 20, L1 9.42082e-05, Linf 0.00405375, total time[s] 0.074644 +Converged at iteration 23, L1 8.04276e-05, Linf 0.00255393, total time[s] 0.086897 +Converged at iteration 25, L1 6.53554e-05, Linf 0.011071, total time[s] 0.0831 +Converged at iteration 21, L1 9.05239e-05, Linf 0.00713572, total time[s] 0.062992 +Converged at iteration 19, L1 5.35504e-05, Linf 0.00603177, total time[s] 0.062475 +Converged at iteration 31, L1 5.82699e-05, Linf 0.00682661, total time[s] 0.106376 +Converged at iteration 21, L1 7.73074e-05, Linf 0.00733959, total time[s] 0.061184 +Converged at iteration 24, L1 7.22849e-05, Linf 0.00833762, total time[s] 0.070567 +Converged at iteration 27, L1 8.04167e-05, Linf 0.00305355, total time[s] 0.069729 +Converged at iteration 24, L1 7.44599e-05, Linf 0.00485922, total time[s] 0.063844 +Converged at iteration 23, L1 7.47913e-05, Linf 0.00441657, total time[s] 0.060516 +Converged at iteration 25, L1 6.69662e-05, Linf 0.00619081, total time[s] 0.066781 +Converged at iteration 25, L1 9.19531e-05, Linf 0.0105138, total time[s] 0.065984 +Converged at iteration 28, L1 6.71626e-05, Linf 0.00390698, total time[s] 0.072307 +Converged at iteration 31, L1 8.3838e-05, Linf 0.00349075, total time[s] 0.080757 +Converged at iteration 28, L1 7.00106e-05, Linf 0.00277574, total time[s] 0.073871 +Converged at iteration 32, L1 6.42843e-05, Linf 0.00490683, total time[s] 0.082225 +Converged at iteration 31, L1 6.55913e-05, Linf 0.00240829, total time[s] 0.079602 +Converged at iteration 31, L1 8.58446e-05, Linf 0.00209604, total time[s] 0.082382 +Converged at iteration 27, L1 9.01227e-05, Linf 0.0194699, total time[s] 0.070472 +Converged at iteration 29, L1 4.45748e-05, Linf 0.0142165, total time[s] 0.074598 +Converged at iteration 28, L1 7.71933e-05, Linf 0.0130621, total time[s] 0.074681 +Converged at iteration 25, L1 9.37744e-05, Linf 0.00365936, total time[s] 0.065184 +Converged at iteration 35, L1 9.49794e-05, Linf 0.00628548, total time[s] 0.089994 +Converged at iteration 33, L1 5.7819e-05, Linf 0.00486289, total time[s] 0.100558 +Converged at iteration 25, L1 7.3274e-05, Linf 0.0027043, total time[s] 0.109117 +Converged at iteration 27, L1 5.19285e-05, Linf 0.00903119, total time[s] 0.073515 +Converged at iteration 27, L1 5.69123e-05, Linf 0.0151669, total time[s] 0.070934 +Converged at iteration 25, L1 6.57301e-05, Linf 0.0158329, total time[s] 0.065996 +Converged at iteration 20, L1 5.65357e-05, Linf 0.00424705, total time[s] 0.05649 +Converged at iteration 20, L1 6.28767e-05, Linf 0.00234601, total time[s] 0.079365 +Converged at iteration 23, L1 7.96079e-05, Linf 0.00239749, total time[s] 0.068677 +Converged at iteration 25, L1 5.53934e-05, Linf 0.0109523, total time[s] 0.06956 +Converged at iteration 21, L1 9.02293e-05, Linf 0.00637143, total time[s] 0.072959 +Converged at iteration 19, L1 4.99702e-05, Linf 0.00594212, total time[s] 0.056568 +Converged at iteration 31, L1 5.92788e-05, Linf 0.00580422, total time[s] 0.107244 +Converged at iteration 20, L1 9.25639e-05, Linf 0.00557356, total time[s] 0.056358 +Converged at iteration 23, L1 9.56365e-05, Linf 0.0087547, total time[s] 0.061628 +Converged at iteration 27, L1 8.6162e-05, Linf 0.00330707, total time[s] 0.071011 +Converged at iteration 24, L1 6.70814e-05, Linf 0.00394658, total time[s] 0.064629 +Converged at iteration 23, L1 5.72195e-05, Linf 0.00329439, total time[s] 0.06286 +Converged at iteration 24, L1 9.98791e-05, Linf 0.00647467, total time[s] 0.063898 +Converged at iteration 25, L1 5.95888e-05, Linf 0.00671217, total time[s] 0.066797 +Converged at iteration 28, L1 6.84997e-05, Linf 0.00405483, total time[s] 0.07937 +Converged at iteration 31, L1 7.07909e-05, Linf 0.00346042, total time[s] 0.099669 +Converged at iteration 28, L1 6.4614e-05, Linf 0.00251526, total time[s] 0.088729 +Converged at iteration 32, L1 5.72811e-05, Linf 0.00402445, total time[s] 0.103632 +Converged at iteration 30, L1 8.90699e-05, Linf 0.00271569, total time[s] 0.117339 +Converged at iteration 31, L1 5.71374e-05, Linf 0.00127316, total time[s] 0.101549 +Converged at iteration 28, L1 4.16399e-05, Linf 0.0113974, total time[s] 0.096541 +Converged at iteration 29, L1 4.12578e-05, Linf 0.0119365, total time[s] 0.09086 +Converged at iteration 28, L1 6.43789e-05, Linf 0.0102157, total time[s] 0.081194 +Converged at iteration 25, L1 8.04596e-05, Linf 0.00236459, total time[s] 0.076619 +Converged at iteration 35, L1 9.68415e-05, Linf 0.00635117, total time[s] 0.103334 +Converged at iteration 33, L1 5.91649e-05, Linf 0.00490782, total time[s] 0.100222 +Converged at iteration 25, L1 7.19942e-05, Linf 0.00253747, total time[s] 0.073444 +Converged at iteration 27, L1 5.13363e-05, Linf 0.00913008, total time[s] 0.071975 +Converged at iteration 27, L1 5.48727e-05, Linf 0.0150946, total time[s] 0.071788 +Converged at iteration 25, L1 6.37749e-05, Linf 0.0155625, total time[s] 0.066042 +Converged at iteration 20, L1 5.44772e-05, Linf 0.00417894, total time[s] 0.065463 +Converged at iteration 20, L1 6.05161e-05, Linf 0.00221435, total time[s] 0.073204 +Converged at iteration 23, L1 7.99554e-05, Linf 0.00241898, total time[s] 0.067992 +Converged at iteration 25, L1 5.68584e-05, Linf 0.0108529, total time[s] 0.08235 +Converged at iteration 21, L1 9.05092e-05, Linf 0.00644855, total time[s] 0.088962 +Converged at iteration 18, L1 9.95551e-05, Linf 0.00849237, total time[s] 0.084005 +Converged at iteration 31, L1 5.9604e-05, Linf 0.00570431, total time[s] 0.11449 +Converged at iteration 20, L1 8.98998e-05, Linf 0.0053071, total time[s] 0.058817 +Converged at iteration 23, L1 9.49645e-05, Linf 0.00855457, total time[s] 0.063155 +Converged at iteration 27, L1 8.74464e-05, Linf 0.00330157, total time[s] 0.079336 +Converged at iteration 24, L1 6.78261e-05, Linf 0.00393171, total time[s] 0.092037 +Converged at iteration 23, L1 5.64222e-05, Linf 0.00321898, total time[s] 0.070025 +Converged at iteration 24, L1 9.5134e-05, Linf 0.00627913, total time[s] 0.069044 +Converged at iteration 25, L1 5.80319e-05, Linf 0.00639532, total time[s] 0.070281 +Converged at iteration 28, L1 6.89469e-05, Linf 0.00406787, total time[s] 0.070853 +Converged at iteration 31, L1 6.99673e-05, Linf 0.00335507, total time[s] 0.078352 +Converged at iteration 28, L1 6.47742e-05, Linf 0.0025326, total time[s] 0.073229 +Converged at iteration 31, L1 9.9021e-05, Linf 0.00594459, total time[s] 0.079951 +Converged at iteration 30, L1 8.71413e-05, Linf 0.00267126, total time[s] 0.076152 +Converged at iteration 30, L1 9.75415e-05, Linf 0.00198105, total time[s] 0.078275 +Converged at iteration 28, L1 4.27874e-05, Linf 0.0117154, total time[s] 0.070966 +Converged at iteration 29, L1 4.09029e-05, Linf 0.0117624, total time[s] 0.080031 +Converged at iteration 28, L1 6.28553e-05, Linf 0.00997699, total time[s] 0.076861 +Converged at iteration 25, L1 7.86709e-05, Linf 0.00239895, total time[s] 0.074312 +Converged at iteration 35, L1 9.92819e-05, Linf 0.00642328, total time[s] 0.09915 +Converged at iteration 33, L1 6.06675e-05, Linf 0.00497288, total time[s] 0.099821 +Converged at iteration 25, L1 7.27899e-05, Linf 0.00261474, total time[s] 0.068065 +Converged at iteration 27, L1 5.57845e-05, Linf 0.009223, total time[s] 0.068483 +Converged at iteration 27, L1 5.32763e-05, Linf 0.0148665, total time[s] 0.070575 +Converged at iteration 25, L1 6.28849e-05, Linf 0.0152237, total time[s] 0.07406 +Converged at iteration 20, L1 5.39021e-05, Linf 0.00409238, total time[s] 0.068355 +Converged at iteration 20, L1 5.83141e-05, Linf 0.00208059, total time[s] 0.055041 +Converged at iteration 23, L1 7.95608e-05, Linf 0.00244851, total time[s] 0.059354 +Converged at iteration 25, L1 5.9994e-05, Linf 0.0107892, total time[s] 0.064661 +Converged at iteration 21, L1 9.05827e-05, Linf 0.0062618, total time[s] 0.058865 +Converged at iteration 18, L1 9.69633e-05, Linf 0.00774572, total time[s] 0.05211 +Converged at iteration 31, L1 5.95937e-05, Linf 0.00563199, total time[s] 0.096343 +Converged at iteration 20, L1 8.61354e-05, Linf 0.00504032, total time[s] 0.057982 +Converged at iteration 23, L1 9.19252e-05, Linf 0.00832412, total time[s] 0.068047 +Converged at iteration 27, L1 8.6712e-05, Linf 0.00330224, total time[s] 0.078857 +Converged at iteration 24, L1 6.61922e-05, Linf 0.00388149, total time[s] 0.062963 +Converged at iteration 23, L1 5.46761e-05, Linf 0.00317478, total time[s] 0.062895 +Converged at iteration 24, L1 9.11115e-05, Linf 0.00617775, total time[s] 0.062067 +Converged at iteration 25, L1 5.45543e-05, Linf 0.00609889, total time[s] 0.064541 +Converged at iteration 28, L1 6.98968e-05, Linf 0.00408719, total time[s] 0.073277 +Converged at iteration 31, L1 6.76428e-05, Linf 0.00312457, total time[s] 0.077232 +Converged at iteration 28, L1 6.4107e-05, Linf 0.00255634, total time[s] 0.076365 +Converged at iteration 31, L1 9.6465e-05, Linf 0.00583086, total time[s] 0.091664 +Converged at iteration 30, L1 8.58219e-05, Linf 0.00265466, total time[s] 0.087754 +Converged at iteration 30, L1 9.40042e-05, Linf 0.00187301, total time[s] 0.079449 +Converged at iteration 28, L1 4.43564e-05, Linf 0.0120123, total time[s] 0.077479 +Converged at iteration 29, L1 4.0157e-05, Linf 0.0115923, total time[s] 0.084374 +Converged at iteration 28, L1 6.32282e-05, Linf 0.00964155, total time[s] 0.079884 +Converged at iteration 25, L1 7.70184e-05, Linf 0.00242248, total time[s] 0.071161 +Converged at iteration 36, L1 5.9175e-05, Linf 0.00510439, total time[s] 0.10182 +Converged at iteration 33, L1 6.27336e-05, Linf 0.00507608, total time[s] 0.086831 +Converged at iteration 25, L1 7.08545e-05, Linf 0.00251792, total time[s] 0.071806 +Converged at iteration 27, L1 5.90462e-05, Linf 0.00940693, total time[s] 0.072746 +Converged at iteration 27, L1 5.32479e-05, Linf 0.0143252, total time[s] 0.072113 +Converged at iteration 25, L1 5.97446e-05, Linf 0.014443, total time[s] 0.065165 +Converged at iteration 20, L1 4.99686e-05, Linf 0.00394096, total time[s] 0.052666 +Converged at iteration 20, L1 5.26851e-05, Linf 0.00201763, total time[s] 0.052635 +Converged at iteration 23, L1 7.73063e-05, Linf 0.0025081, total time[s] 0.059964 +Converged at iteration 25, L1 6.43497e-05, Linf 0.0106219, total time[s] 0.065241 +Converged at iteration 21, L1 8.93442e-05, Linf 0.00616248, total time[s] 0.055871 +Converged at iteration 18, L1 9.25302e-05, Linf 0.00674698, total time[s] 0.054191 +Converged at iteration 31, L1 5.98472e-05, Linf 0.00544887, total time[s] 0.090406 +Converged at iteration 20, L1 7.8886e-05, Linf 0.004484, total time[s] 0.054639 +Converged at iteration 23, L1 8.71555e-05, Linf 0.00784212, total time[s] 0.060732 +Converged at iteration 27, L1 8.77032e-05, Linf 0.00328336, total time[s] 0.073183 +Converged at iteration 24, L1 6.43546e-05, Linf 0.00384753, total time[s] 0.061756 +Converged at iteration 22, L1 9.93226e-05, Linf 0.00533931, total time[s] 0.057846 +Converged at iteration 24, L1 8.37867e-05, Linf 0.00609602, total time[s] 0.063397 +Converged at iteration 24, L1 9.17687e-05, Linf 0.00773126, total time[s] 0.06503 +Converged at iteration 28, L1 6.99498e-05, Linf 0.00414226, total time[s] 0.082118 +Converged at iteration 31, L1 6.53777e-05, Linf 0.00333535, total time[s] 0.085071 +Converged at iteration 28, L1 6.2309e-05, Linf 0.00261069, total time[s] 0.08437 +Converged at iteration 31, L1 9.19155e-05, Linf 0.00560924, total time[s] 0.089241 +Converged at iteration 30, L1 8.33024e-05, Linf 0.00275764, total time[s] 0.092357 +Converged at iteration 30, L1 8.64021e-05, Linf 0.00167584, total time[s] 0.080361 +Converged at iteration 28, L1 4.95593e-05, Linf 0.012524, total time[s] 0.074281 +Converged at iteration 29, L1 3.8805e-05, Linf 0.0112534, total time[s] 0.077898 +Converged at iteration 28, L1 5.92776e-05, Linf 0.00925894, total time[s] 0.079022 +Converged at iteration 25, L1 7.63716e-05, Linf 0.00246668, total time[s] 0.074873 +Converged at iteration 36, L1 6.4965e-05, Linf 0.00535505, total time[s] 0.096031 +Converged at iteration 33, L1 6.80217e-05, Linf 0.00534628, total time[s] 0.091149 +Converged at iteration 25, L1 6.92587e-05, Linf 0.0023527, total time[s] 0.073366 +Converged at iteration 27, L1 6.96752e-05, Linf 0.00972341, total time[s] 0.071337 +Converged at iteration 27, L1 5.20137e-05, Linf 0.0133283, total time[s] 0.071858 +Converged at iteration 25, L1 5.40115e-05, Linf 0.0131552, total time[s] 0.070115 +Converged at iteration 20, L1 4.49494e-05, Linf 0.00366615, total time[s] 0.054774 +Converged at iteration 19, L1 9.61697e-05, Linf 0.00392154, total time[s] 0.051356 +Converged at iteration 23, L1 7.399e-05, Linf 0.00264341, total time[s] 0.063451 +Converged at iteration 25, L1 7.16013e-05, Linf 0.010202, total time[s] 0.102428 +Converged at iteration 21, L1 8.68987e-05, Linf 0.00598415, total time[s] 0.059922 +Converged at iteration 18, L1 8.59747e-05, Linf 0.00563297, total time[s] 0.051875 +Converged at iteration 31, L1 6.1576e-05, Linf 0.00514118, total time[s] 0.090807 +Converged at iteration 20, L1 6.45749e-05, Linf 0.00332369, total time[s] 0.05887 +Converged at iteration 23, L1 7.76946e-05, Linf 0.00652708, total time[s] 0.066268 +Converged at iteration 27, L1 8.67759e-05, Linf 0.00325535, total time[s] 0.079159 +Converged at iteration 24, L1 5.9791e-05, Linf 0.00372061, total time[s] 0.064264 +Converged at iteration 22, L1 8.98277e-05, Linf 0.00508538, total time[s] 0.058599 +Converged at iteration 24, L1 7.36478e-05, Linf 0.00581229, total time[s] 0.066976 +Converged at iteration 24, L1 7.40076e-05, Linf 0.00609273, total time[s] 0.068343 +Converged at iteration 28, L1 7.02591e-05, Linf 0.00424517, total time[s] 0.076819 +Converged at iteration 31, L1 6.15705e-05, Linf 0.0032776, total time[s] 0.082574 +Converged at iteration 28, L1 6.0998e-05, Linf 0.0024836, total time[s] 0.076345 +Converged at iteration 31, L1 8.48581e-05, Linf 0.00522709, total time[s] 0.088705 +Converged at iteration 30, L1 7.66081e-05, Linf 0.00251368, total time[s] 0.077418 +Converged at iteration 30, L1 7.35099e-05, Linf 0.00148696, total time[s] 0.077198 +Converged at iteration 28, L1 6.66631e-05, Linf 0.0131984, total time[s] 0.075573 +Converged at iteration 29, L1 3.69849e-05, Linf 0.0107212, total time[s] 0.074842 +Converged at iteration 28, L1 5.43686e-05, Linf 0.00825309, total time[s] 0.07283 +Converged at iteration 25, L1 6.9534e-05, Linf 0.00231362, total time[s] 0.065813 +Converged at iteration 36, L1 6.19911e-05, Linf 0.00518289, total time[s] 0.092392 +Converged at iteration 33, L1 6.52927e-05, Linf 0.00520514, total time[s] 0.086952 +Converged at iteration 25, L1 6.98433e-05, Linf 0.00245545, total time[s] 0.065819 +Converged at iteration 27, L1 6.5793e-05, Linf 0.00957245, total time[s] 0.070408 +Converged at iteration 27, L1 5.17515e-05, Linf 0.0138367, total time[s] 0.071974 +Converged at iteration 25, L1 5.71489e-05, Linf 0.0138883, total time[s] 0.067563 +Converged at iteration 20, L1 4.73151e-05, Linf 0.0038441, total time[s] 0.066779 +Converged at iteration 20, L1 4.842e-05, Linf 0.00209466, total time[s] 0.064828 +Converged at iteration 23, L1 7.55032e-05, Linf 0.00257275, total time[s] 0.066989 +Converged at iteration 25, L1 6.78098e-05, Linf 0.0104256, total time[s] 0.074753 +Converged at iteration 21, L1 8.83524e-05, Linf 0.00609339, total time[s] 0.062524 +Converged at iteration 18, L1 8.90858e-05, Linf 0.00609323, total time[s] 0.055993 +Converged at iteration 31, L1 6.06485e-05, Linf 0.00530407, total time[s] 0.088766 +Converged at iteration 20, L1 7.14072e-05, Linf 0.00391342, total time[s] 0.056031 +Converged at iteration 23, L1 8.34018e-05, Linf 0.0072471, total time[s] 0.070924 +Converged at iteration 27, L1 8.67509e-05, Linf 0.00327724, total time[s] 0.084022 +Converged at iteration 24, L1 6.1776e-05, Linf 0.00383861, total time[s] 0.097848 +Converged at iteration 22, L1 9.44184e-05, Linf 0.00521342, total time[s] 0.096182 +Converged at iteration 24, L1 8.02984e-05, Linf 0.00609807, total time[s] 0.067951 +Converged at iteration 24, L1 8.26497e-05, Linf 0.00703261, total time[s] 0.086859 +Converged at iteration 28, L1 7.02723e-05, Linf 0.00418219, total time[s] 0.098078 +Converged at iteration 31, L1 6.44711e-05, Linf 0.00357818, total time[s] 0.093879 +Converged at iteration 28, L1 6.10195e-05, Linf 0.00255673, total time[s] 0.080377 +Converged at iteration 31, L1 8.93464e-05, Linf 0.00539712, total time[s] 0.081406 +Converged at iteration 30, L1 8.02437e-05, Linf 0.00265161, total time[s] 0.076023 +Converged at iteration 30, L1 7.9765e-05, Linf 0.00158519, total time[s] 0.081393 +Converged at iteration 28, L1 5.76581e-05, Linf 0.0129146, total time[s] 0.073627 +Converged at iteration 29, L1 3.7893e-05, Linf 0.0109146, total time[s] 0.080066 +Converged at iteration 28, L1 5.71983e-05, Linf 0.00876355, total time[s] 0.086419 +Converged at iteration 25, L1 7.22187e-05, Linf 0.00247371, total time[s] 0.071105 +Converged at iteration 36, L1 6.046e-05, Linf 0.00517876, total time[s] 0.107489 +Converged at iteration 33, L1 6.38979e-05, Linf 0.00513826, total time[s] 0.105814 +Converged at iteration 25, L1 7.03467e-05, Linf 0.00249751, total time[s] 0.07709 +Converged at iteration 27, L1 5.94574e-05, Linf 0.0094913, total time[s] 0.098697 +Converged at iteration 27, L1 5.19917e-05, Linf 0.0140835, total time[s] 0.104643 +Converged at iteration 25, L1 5.8269e-05, Linf 0.0142353, total time[s] 0.100867 +Converged at iteration 20, L1 4.88102e-05, Linf 0.00386588, total time[s] 0.069784 +Converged at iteration 20, L1 5.05442e-05, Linf 0.00206009, total time[s] 0.063216 +Converged at iteration 23, L1 7.59086e-05, Linf 0.00254144, total time[s] 0.099052 +Converged at iteration 25, L1 6.50915e-05, Linf 0.0105278, total time[s] 0.125312 +Converged at iteration 21, L1 8.87409e-05, Linf 0.00611404, total time[s] 0.117217 +Converged at iteration 18, L1 9.12702e-05, Linf 0.00651636, total time[s] 0.066902 +Converged at iteration 31, L1 6.03721e-05, Linf 0.00538563, total time[s] 0.092712 +Converged at iteration 20, L1 7.54203e-05, Linf 0.00419985, total time[s] 0.056905 +Converged at iteration 23, L1 9.24559e-05, Linf 0.00756253, total time[s] 0.075595 +Converged at iteration 27, L1 8.7843e-05, Linf 0.00608022, total time[s] 0.119498 +Converged at iteration 24, L1 6.38192e-05, Linf 0.00384176, total time[s] 0.109188 +Converged at iteration 22, L1 9.64272e-05, Linf 0.00526913, total time[s] 0.110376 +Converged at iteration 24, L1 8.17792e-05, Linf 0.00609418, total time[s] 0.094408 +Converged at iteration 24, L1 8.71935e-05, Linf 0.00741311, total time[s] 0.069044 +Converged at iteration 28, L1 6.99447e-05, Linf 0.00412632, total time[s] 0.079756 +Converged at iteration 31, L1 6.44221e-05, Linf 0.00352442, total time[s] 0.08895 +Converged at iteration 28, L1 6.24674e-05, Linf 0.00255617, total time[s] 0.0975 +Converged at iteration 31, L1 9.15645e-05, Linf 0.0055001, total time[s] 0.082994 +Converged at iteration 30, L1 8.22172e-05, Linf 0.00271157, total time[s] 0.118286 +Converged at iteration 30, L1 8.59668e-05, Linf 0.00162743, total time[s] 0.133011 +Converged at iteration 28, L1 5.29709e-05, Linf 0.0127376, total time[s] 0.075446 +Converged at iteration 29, L1 3.85455e-05, Linf 0.0111052, total time[s] 0.078493 +Converged at iteration 28, L1 5.82706e-05, Linf 0.00901302, total time[s] 0.074515 +Converged at iteration 25, L1 7.34084e-05, Linf 0.00246144, total time[s] 0.065536 +Converged at iteration 36, L1 6.14556e-05, Linf 0.00510276, total time[s] 0.150109 +Converged at iteration 33, L1 6.47977e-05, Linf 0.00519349, total time[s] 0.090659 +Converged at iteration 25, L1 7.02569e-05, Linf 0.00247643, total time[s] 0.063787 +Converged at iteration 27, L1 6.11919e-05, Linf 0.00952591, total time[s] 0.069746 +Converged at iteration 27, L1 5.10975e-05, Linf 0.0139579, total time[s] 0.068922 +Converged at iteration 25, L1 5.76153e-05, Linf 0.0142224, total time[s] 0.067354 +Converged at iteration 20, L1 4.81438e-05, Linf 0.00384591, total time[s] 0.055387 +Converged at iteration 20, L1 5.03314e-05, Linf 0.00207262, total time[s] 0.069111 +Converged at iteration 23, L1 7.62549e-05, Linf 0.00255979, total time[s] 0.071336 +Converged at iteration 25, L1 6.61227e-05, Linf 0.0104608, total time[s] 0.066258 +Converged at iteration 21, L1 8.83147e-05, Linf 0.00609925, total time[s] 0.060451 +Converged at iteration 18, L1 9.09423e-05, Linf 0.00623102, total time[s] 0.051429 +Converged at iteration 31, L1 6.07828e-05, Linf 0.00534478, total time[s] 0.081155 +Converged at iteration 20, L1 7.42408e-05, Linf 0.00405993, total time[s] 0.054078 +Converged at iteration 23, L1 8.49207e-05, Linf 0.00740318, total time[s] 0.061145 +Converged at iteration 27, L1 8.68072e-05, Linf 0.00327889, total time[s] 0.068869 +Converged at iteration 24, L1 6.18117e-05, Linf 0.00384531, total time[s] 0.062483 +Converged at iteration 22, L1 9.54791e-05, Linf 0.00521817, total time[s] 0.057762 +Converged at iteration 24, L1 8.23632e-05, Linf 0.00609395, total time[s] 0.064455 +Converged at iteration 24, L1 8.49213e-05, Linf 0.00719451, total time[s] 0.062851 +Converged at iteration 28, L1 7.02707e-05, Linf 0.00415367, total time[s] 0.071567 +Converged at iteration 31, L1 6.40309e-05, Linf 0.00359884, total time[s] 0.07761 +Converged at iteration 28, L1 6.13797e-05, Linf 0.00256245, total time[s] 0.071103 +Converged at iteration 31, L1 9.18038e-05, Linf 0.00537509, total time[s] 0.096074 +Converged at iteration 30, L1 8.19664e-05, Linf 0.00267748, total time[s] 0.075625 +Converged at iteration 30, L1 8.37114e-05, Linf 0.00159959, total time[s] 0.075825 +Converged at iteration 28, L1 5.51529e-05, Linf 0.0128719, total time[s] 0.071176 +Converged at iteration 29, L1 3.81686e-05, Linf 0.0110071, total time[s] 0.080566 +Converged at iteration 28, L1 5.86427e-05, Linf 0.00903657, total time[s] 0.072394 +Converged at iteration 25, L1 7.29539e-05, Linf 0.00248092, total time[s] 0.06852 +Converged at iteration 36, L1 6.11921e-05, Linf 0.00507499, total time[s] 0.094221 +Converged at iteration 33, L1 6.4777e-05, Linf 0.00516218, total time[s] 0.084212 +Converged at iteration 25, L1 7.05381e-05, Linf 0.00248825, total time[s] 0.06934 +Converged at iteration 27, L1 6.06211e-05, Linf 0.00950199, total time[s] 0.075783 +Converged at iteration 27, L1 5.20085e-05, Linf 0.0140237, total time[s] 0.077533 +Converged at iteration 25, L1 5.81292e-05, Linf 0.0140275, total time[s] 0.06507 +Converged at iteration 20, L1 4.86433e-05, Linf 0.00386792, total time[s] 0.054807 +Converged at iteration 20, L1 5.11844e-05, Linf 0.00297249, total time[s] 0.06495 +Converged at iteration 23, L1 7.62459e-05, Linf 0.00255054, total time[s] 0.076058 +Converged at iteration 25, L1 6.65981e-05, Linf 0.0105055, total time[s] 0.067337 +Converged at iteration 21, L1 9.10316e-05, Linf 0.00626998, total time[s] 0.066221 +Converged at iteration 18, L1 9.03702e-05, Linf 0.00648383, total time[s] 0.050236 +Converged at iteration 31, L1 6.06399e-05, Linf 0.00537746, total time[s] 0.078331 +Converged at iteration 20, L1 7.72821e-05, Linf 0.00412928, total time[s] 0.053237 +Converged at iteration 23, L1 8.98406e-05, Linf 0.00734389, total time[s] 0.06116 +Converged at iteration 27, L1 8.69245e-05, Linf 0.00328248, total time[s] 0.068559 +Converged at iteration 24, L1 6.23125e-05, Linf 0.00384176, total time[s] 0.060139 +Converged at iteration 22, L1 9.60972e-05, Linf 0.00528927, total time[s] 0.057507 +Converged at iteration 24, L1 8.17608e-05, Linf 0.00610021, total time[s] 0.059678 +Converged at iteration 24, L1 8.61119e-05, Linf 0.00730505, total time[s] 0.059372 +Converged at iteration 28, L1 7.00486e-05, Linf 0.00415456, total time[s] 0.068435 +Converged at iteration 31, L1 6.42689e-05, Linf 0.00356988, total time[s] 0.079411 +Converged at iteration 28, L1 6.16389e-05, Linf 0.00256299, total time[s] 0.080801 +Converged at iteration 31, L1 9.10015e-05, Linf 0.00551416, total time[s] 0.076488 +Converged at iteration 30, L1 8.62328e-05, Linf 0.00268758, total time[s] 0.075066 +Converged at iteration 30, L1 8.33421e-05, Linf 0.00161578, total time[s] 0.073802 +Converged at iteration 28, L1 5.40079e-05, Linf 0.0127859, total time[s] 0.070282 +Converged at iteration 29, L1 3.82571e-05, Linf 0.0110474, total time[s] 0.074925 +Converged at iteration 28, L1 5.91568e-05, Linf 0.0089511, total time[s] 0.07318 +Converged at iteration 25, L1 7.34274e-05, Linf 0.00246537, total time[s] 0.063841 +Converged at iteration 36, L1 6.06896e-05, Linf 0.00511498, total time[s] 0.090115 +Converged at iteration 33, L1 6.43156e-05, Linf 0.00513651, total time[s] 0.082604 +Converged at iteration 25, L1 7.10342e-05, Linf 0.00249288, total time[s] 0.073174 +Converged at iteration 27, L1 6.09714e-05, Linf 0.00950172, total time[s] 0.069448 +Converged at iteration 27, L1 5.12209e-05, Linf 0.0140523, total time[s] 0.072411 +Converged at iteration 25, L1 5.87459e-05, Linf 0.0141974, total time[s] 0.063946 +Converged at iteration 20, L1 4.86886e-05, Linf 0.00385789, total time[s] 0.059072 +Converged at iteration 20, L1 5.05379e-05, Linf 0.0020648, total time[s] 0.05695 +Converged at iteration 23, L1 7.56547e-05, Linf 0.00254619, total time[s] 0.063418 +Converged at iteration 25, L1 6.50831e-05, Linf 0.0105165, total time[s] 0.070132 +Converged at iteration 21, L1 8.8687e-05, Linf 0.00611492, total time[s] 0.056262 +Converged at iteration 18, L1 9.05437e-05, Linf 0.00647349, total time[s] 0.048962 +Converged at iteration 31, L1 6.03836e-05, Linf 0.00538775, total time[s] 0.081427 +Converged at iteration 20, L1 7.65291e-05, Linf 0.00416477, total time[s] 0.056473 +Converged at iteration 23, L1 9.07636e-05, Linf 0.00753744, total time[s] 0.075047 +Converged at iteration 27, L1 8.69496e-05, Linf 0.00328109, total time[s] 0.068976 +Converged at iteration 24, L1 6.23816e-05, Linf 0.00384087, total time[s] 0.064182 +Converged at iteration 22, L1 9.62424e-05, Linf 0.00525965, total time[s] 0.057441 +Converged at iteration 24, L1 8.18216e-05, Linf 0.00622577, total time[s] 0.084138 +Converged at iteration 24, L1 8.65484e-05, Linf 0.00736085, total time[s] 0.067175 +Converged at iteration 28, L1 6.99523e-05, Linf 0.00414862, total time[s] 0.071397 +Converged at iteration 31, L1 6.47058e-05, Linf 0.00354791, total time[s] 0.084305 +Converged at iteration 28, L1 6.16023e-05, Linf 0.00255852, total time[s] 0.072502 +Converged at iteration 31, L1 9.07064e-05, Linf 0.00548931, total time[s] 0.081872 +Converged at iteration 30, L1 8.19249e-05, Linf 0.00269329, total time[s] 0.089978 +Converged at iteration 30, L1 8.26093e-05, Linf 0.00162233, total time[s] 0.081828 +Converged at iteration 28, L1 5.34303e-05, Linf 0.0127629, total time[s] 0.070861 +Converged at iteration 29, L1 3.82221e-05, Linf 0.0110665, total time[s] 0.074909 +Converged at iteration 28, L1 5.82699e-05, Linf 0.0091253, total time[s] 0.07411 +Converged at iteration 25, L1 7.3457e-05, Linf 0.00244831, total time[s] 0.066177 +Converged at iteration 36, L1 6.09169e-05, Linf 0.00519398, total time[s] 0.089607 +Converged at iteration 33, L1 6.48456e-05, Linf 0.0051426, total time[s] 0.101872 +Converged at iteration 25, L1 7.03439e-05, Linf 0.00248857, total time[s] 0.064429 +Converged at iteration 27, L1 6.19422e-05, Linf 0.00951047, total time[s] 0.068596 +Converged at iteration 27, L1 5.22492e-05, Linf 0.0141208, total time[s] 0.068756 +Converged at iteration 25, L1 5.81891e-05, Linf 0.0141648, total time[s] 0.061715 +Converged at iteration 20, L1 4.88939e-05, Linf 0.00390385, total time[s] 0.059076 +Converged at iteration 20, L1 5.05959e-05, Linf 0.00206616, total time[s] 0.05683 +Converged at iteration 23, L1 7.63561e-05, Linf 0.00254877, total time[s] 0.058878 +Converged at iteration 25, L1 6.60858e-05, Linf 0.0104911, total time[s] 0.065395 +Converged at iteration 21, L1 8.93119e-05, Linf 0.00610604, total time[s] 0.057265 +Converged at iteration 18, L1 9.13487e-05, Linf 0.00649505, total time[s] 0.051692 +Converged at iteration 31, L1 6.05512e-05, Linf 0.00536406, total time[s] 0.079834 +Converged at iteration 20, L1 7.49424e-05, Linf 0.00414543, total time[s] 0.053757 +Converged at iteration 23, L1 9.06189e-05, Linf 0.00750263, total time[s] 0.060868 +Converged at iteration 27, L1 8.69043e-05, Linf 0.00328215, total time[s] 0.069386 +Converged at iteration 24, L1 6.2343e-05, Linf 0.00384136, total time[s] 0.06192 +Converged at iteration 22, L1 9.63064e-05, Linf 0.00523518, total time[s] 0.057817 +Converged at iteration 24, L1 8.17517e-05, Linf 0.00608809, total time[s] 0.061772 +Converged at iteration 24, L1 8.6568e-05, Linf 0.00733291, total time[s] 0.068111 +Converged at iteration 28, L1 6.99553e-05, Linf 0.00415364, total time[s] 0.070948 +Converged at iteration 31, L1 6.42958e-05, Linf 0.00355894, total time[s] 0.080438 +Converged at iteration 28, L1 6.15997e-05, Linf 0.00256309, total time[s] 0.071391 +Converged at iteration 31, L1 9.15344e-05, Linf 0.00540763, total time[s] 0.077895 +Converged at iteration 30, L1 8.19775e-05, Linf 0.00275282, total time[s] 0.075838 +Converged at iteration 30, L1 8.36596e-05, Linf 0.00161867, total time[s] 0.075947 +Converged at iteration 28, L1 5.37465e-05, Linf 0.0129167, total time[s] 0.072172 +Converged at iteration 29, L1 3.81808e-05, Linf 0.0110572, total time[s] 0.073702 +Converged at iteration 28, L1 5.88035e-05, Linf 0.00902602, total time[s] 0.072002 +Converged at iteration 25, L1 7.32737e-05, Linf 0.00246215, total time[s] 0.078624 +Converged at iteration 36, L1 6.09508e-05, Linf 0.00512185, total time[s] 0.090223 +Converged at iteration 33, L1 6.43746e-05, Linf 0.00517149, total time[s] 0.085556 +Converged at iteration 25, L1 7.04482e-05, Linf 0.00249005, total time[s] 0.069551 +Converged at iteration 27, L1 6.18852e-05, Linf 0.0095128, total time[s] 0.070224 +Converged at iteration 27, L1 5.17468e-05, Linf 0.0139493, total time[s] 0.077476 +Converged at iteration 25, L1 5.83047e-05, Linf 0.0143494, total time[s] 0.076276 +Converged at iteration 20, L1 4.87139e-05, Linf 0.00381547, total time[s] 0.054408 +Converged at iteration 20, L1 5.05888e-05, Linf 0.00206425, total time[s] 0.064899 +Converged at iteration 23, L1 7.59507e-05, Linf 0.00254673, total time[s] 0.076065 +Converged at iteration 25, L1 6.70311e-05, Linf 0.0104444, total time[s] 0.078781 +Converged at iteration 21, L1 8.91579e-05, Linf 0.00610506, total time[s] 0.05667 +Converged at iteration 18, L1 9.089e-05, Linf 0.00649516, total time[s] 0.053417 +Converged at iteration 31, L1 6.05616e-05, Linf 0.00536776, total time[s] 0.105776 +Converged at iteration 20, L1 7.46334e-05, Linf 0.00413813, total time[s] 0.058187 +Converged at iteration 23, L1 8.82005e-05, Linf 0.00749771, total time[s] 0.064514 +Converged at iteration 27, L1 8.69024e-05, Linf 0.00328066, total time[s] 0.080842 +Converged at iteration 24, L1 6.23353e-05, Linf 0.0038446, total time[s] 0.060689 +Converged at iteration 22, L1 9.60562e-05, Linf 0.0052547, total time[s] 0.056312 +Converged at iteration 24, L1 8.19731e-05, Linf 0.00624661, total time[s] 0.062366 +Converged at iteration 24, L1 8.63161e-05, Linf 0.0072779, total time[s] 0.063973 +Converged at iteration 28, L1 6.98525e-05, Linf 0.00415435, total time[s] 0.070433 +Converged at iteration 31, L1 7.03402e-05, Linf 0.00356461, total time[s] 0.109929 +Converged at iteration 28, L1 6.19396e-05, Linf 0.00255918, total time[s] 0.072359 +Converged at iteration 31, L1 9.21219e-05, Linf 0.00540492, total time[s] 0.082541 +Converged at iteration 30, L1 8.43561e-05, Linf 0.00270354, total time[s] 0.079604 +Converged at iteration 30, L1 8.38142e-05, Linf 0.00161606, total time[s] 0.094074 +Converged at iteration 28, L1 5.38756e-05, Linf 0.0127741, total time[s] 0.086815 +Converged at iteration 29, L1 3.84562e-05, Linf 0.0115287, total time[s] 0.099683 +Converged at iteration 28, L1 5.85446e-05, Linf 0.00901231, total time[s] 0.07594 +Converged at iteration 25, L1 7.48986e-05, Linf 0.00247962, total time[s] 0.070144 +Converged at iteration 36, L1 6.11863e-05, Linf 0.00514666, total time[s] 0.094922 +Converged at iteration 33, L1 6.4768e-05, Linf 0.00516836, total time[s] 0.114382 +Converged at iteration 25, L1 7.15957e-05, Linf 0.00248736, total time[s] 0.087611 +Converged at iteration 27, L1 6.42727e-05, Linf 0.00950805, total time[s] 0.099328 +Converged at iteration 27, L1 5.22007e-05, Linf 0.0140348, total time[s] 0.079663 +Converged at iteration 25, L1 5.80754e-05, Linf 0.0141656, total time[s] 0.066969 +Converged at iteration 20, L1 4.8649e-05, Linf 0.00385221, total time[s] 0.061799 +Converged at iteration 20, L1 5.10909e-05, Linf 0.00206697, total time[s] 0.065305 +Converged at iteration 23, L1 7.59549e-05, Linf 0.00254856, total time[s] 0.078399 +Converged at iteration 25, L1 6.82826e-05, Linf 0.0105096, total time[s] 0.074835 +Converged at iteration 21, L1 9.18945e-05, Linf 0.00611149, total time[s] 0.073563 +Converged at iteration 18, L1 9.31973e-05, Linf 0.00659885, total time[s] 0.051935 +Converged at iteration 31, L1 6.05333e-05, Linf 0.00536918, total time[s] 0.096154 +Converged at iteration 20, L1 7.51799e-05, Linf 0.00419696, total time[s] 0.068874 +Converged at iteration 23, L1 8.51414e-05, Linf 0.00750256, total time[s] 0.073312 +Converged at iteration 27, L1 8.78808e-05, Linf 0.00328809, total time[s] 0.072382 +Converged at iteration 24, L1 6.30583e-05, Linf 0.00382498, total time[s] 0.063446 +Converged at iteration 22, L1 9.73508e-05, Linf 0.00525373, total time[s] 0.060939 +Converged at iteration 24, L1 8.36345e-05, Linf 0.00613397, total time[s] 0.079967 +Converged at iteration 24, L1 8.6581e-05, Linf 0.00720203, total time[s] 0.068729 +Converged at iteration 28, L1 7.00071e-05, Linf 0.00415359, total time[s] 0.085714 +Converged at iteration 31, L1 7.3079e-05, Linf 0.0054214, total time[s] 0.084383 +Converged at iteration 28, L1 6.14628e-05, Linf 0.00255836, total time[s] 0.0743 +Converged at iteration 31, L1 9.14091e-05, Linf 0.00547879, total time[s] 0.090217 +Converged at iteration 30, L1 8.38777e-05, Linf 0.00268896, total time[s] 0.089675 +Converged at iteration 30, L1 8.25279e-05, Linf 0.00161788, total time[s] 0.113912 +Converged at iteration 28, L1 5.38632e-05, Linf 0.0127736, total time[s] 0.133522 +Converged at iteration 29, L1 3.82417e-05, Linf 0.0110518, total time[s] 0.093869 +Converged at iteration 28, L1 5.89366e-05, Linf 0.00910596, total time[s] 0.078637 +Converged at iteration 25, L1 7.42497e-05, Linf 0.00246266, total time[s] 0.068486 +Converged at iteration 40, L1 6.71384e-05, Linf 0.00367454, total time[s] 0.11289 +Converged at iteration 35, L1 7.60853e-05, Linf 0.0033971, total time[s] 0.12548 +Converged at iteration 30, L1 9.65965e-05, Linf 0.00430073, total time[s] 0.095846 +Converged at iteration 31, L1 6.22178e-05, Linf 0.00502562, total time[s] 0.087678 +Converged at iteration 27, L1 6.26621e-05, Linf 0.00499543, total time[s] 0.082539 +Converged at iteration 22, L1 8.59006e-05, Linf 0.00448845, total time[s] 0.071152 +Converged at iteration 20, L1 9.6017e-05, Linf 0.00395687, total time[s] 0.07571 +Converged at iteration 24, L1 8.84338e-05, Linf 0.00482798, total time[s] 0.103603 +Converged at iteration 28, L1 7.38346e-05, Linf 0.00445903, total time[s] 0.107261 +Converged at iteration 26, L1 8.11711e-05, Linf 0.00546527, total time[s] 0.087181 +Converged at iteration 22, L1 7.38604e-05, Linf 0.00508706, total time[s] 0.086762 +Converged at iteration 19, L1 6.63295e-05, Linf 0.00393099, total time[s] 0.05427 +Converged at iteration 30, L1 7.98554e-05, Linf 0.00329634, total time[s] 0.078403 +Converged at iteration 20, L1 8.44284e-05, Linf 0.00455022, total time[s] 0.054324 +Converged at iteration 24, L1 7.11319e-05, Linf 0.00463288, total time[s] 0.064176 +Converged at iteration 31, L1 8.93588e-05, Linf 0.00569161, total time[s] 0.079596 +Converged at iteration 27, L1 9.91594e-05, Linf 0.00569722, total time[s] 0.071551 +Converged at iteration 24, L1 8.79022e-05, Linf 0.00465003, total time[s] 0.070936 +Converged at iteration 23, L1 9.21767e-05, Linf 0.00410191, total time[s] 0.060106 +Converged at iteration 26, L1 7.22189e-05, Linf 0.00449096, total time[s] 0.068584 +Converged at iteration 29, L1 7.8168e-05, Linf 0.00489927, total time[s] 0.075617 +Converged at iteration 34, L1 7.09421e-05, Linf 0.00422666, total time[s] 0.087242 +Converged at iteration 30, L1 9.39508e-05, Linf 0.00442601, total time[s] 0.077399 +Converged at iteration 28, L1 9.49893e-05, Linf 0.00310979, total time[s] 0.074044 +Converged at iteration 32, L1 9.42579e-05, Linf 0.00374089, total time[s] 0.082395 +Converged at iteration 37, L1 7.33836e-05, Linf 0.00327821, total time[s] 0.094079 +Converged at iteration 33, L1 8.44791e-05, Linf 0.00469107, total time[s] 0.084248 +Converged at iteration 28, L1 9.6518e-05, Linf 0.0043018, total time[s] 0.072608 +Converged at iteration 24, L1 8.82895e-05, Linf 0.00325072, total time[s] 0.063713 +Converged at iteration 26, L1 8.98083e-05, Linf 0.00383973, total time[s] 0.068784 +Converged at iteration 40, L1 6.64686e-05, Linf 0.0039335, total time[s] 0.102546 +Converged at iteration 35, L1 8.66289e-05, Linf 0.00360688, total time[s] 0.089313 +Converged at iteration 30, L1 9.16683e-05, Linf 0.00418051, total time[s] 0.080063 +Converged at iteration 31, L1 6.17363e-05, Linf 0.00504684, total time[s] 0.078752 +Converged at iteration 26, L1 9.85685e-05, Linf 0.0057759, total time[s] 0.067113 +Converged at iteration 22, L1 7.16352e-05, Linf 0.00418196, total time[s] 0.057705 +Converged at iteration 21, L1 6.40594e-05, Linf 0.00348499, total time[s] 0.055378 +Converged at iteration 24, L1 8.94354e-05, Linf 0.00495016, total time[s] 0.062611 +Converged at iteration 28, L1 7.32125e-05, Linf 0.00443344, total time[s] 0.071787 +Converged at iteration 26, L1 8.05695e-05, Linf 0.00540076, total time[s] 0.071172 +Converged at iteration 22, L1 7.01377e-05, Linf 0.00442004, total time[s] 0.059746 +Converged at iteration 19, L1 5.49546e-05, Linf 0.00332061, total time[s] 0.053042 +Converged at iteration 30, L1 9.518e-05, Linf 0.00330735, total time[s] 0.079889 +Converged at iteration 20, L1 8.43849e-05, Linf 0.00475982, total time[s] 0.053145 +Converged at iteration 24, L1 7.11622e-05, Linf 0.00453596, total time[s] 0.062526 +Converged at iteration 31, L1 9.4348e-05, Linf 0.00482202, total time[s] 0.078251 +Converged at iteration 27, L1 9.42322e-05, Linf 0.00468429, total time[s] 0.069836 +Converged at iteration 24, L1 8.51721e-05, Linf 0.00428122, total time[s] 0.063029 +Converged at iteration 23, L1 9.24175e-05, Linf 0.00440758, total time[s] 0.059638 +Converged at iteration 26, L1 7.13167e-05, Linf 0.00474448, total time[s] 0.066895 +Converged at iteration 29, L1 7.53116e-05, Linf 0.00488981, total time[s] 0.078484 +Converged at iteration 34, L1 8.13727e-05, Linf 0.00406036, total time[s] 0.085645 +Converged at iteration 31, L1 7.15948e-05, Linf 0.00355233, total time[s] 0.078145 +Converged at iteration 29, L1 7.02738e-05, Linf 0.00272399, total time[s] 0.076383 +Converged at iteration 32, L1 8.2241e-05, Linf 0.00354588, total time[s] 0.080627 +Converged at iteration 36, L1 8.71608e-05, Linf 0.00357613, total time[s] 0.089792 +Converged at iteration 33, L1 8.32617e-05, Linf 0.00484919, total time[s] 0.08274 +Converged at iteration 28, L1 9.10457e-05, Linf 0.00413124, total time[s] 0.071409 +Converged at iteration 24, L1 8.0246e-05, Linf 0.00290886, total time[s] 0.062565 +Converged at iteration 26, L1 8.3985e-05, Linf 0.00392365, total time[s] 0.066892 +Converged at iteration 40, L1 6.7015e-05, Linf 0.00380474, total time[s] 0.1031 +Converged at iteration 35, L1 8.12831e-05, Linf 0.00349798, total time[s] 0.105011 +Converged at iteration 30, L1 9.67309e-05, Linf 0.00423634, total time[s] 0.100439 +Converged at iteration 31, L1 6.18962e-05, Linf 0.00503605, total time[s] 0.116828 +Converged at iteration 27, L1 6.05088e-05, Linf 0.0049509, total time[s] 0.086089 +Converged at iteration 22, L1 7.85704e-05, Linf 0.00433709, total time[s] 0.087335 +Converged at iteration 21, L1 6.27857e-05, Linf 0.00331396, total time[s] 0.121011 +Converged at iteration 24, L1 9.08781e-05, Linf 0.00489772, total time[s] 0.117667 +Converged at iteration 28, L1 7.47848e-05, Linf 0.00444653, total time[s] 0.099205 +Converged at iteration 26, L1 8.0571e-05, Linf 0.00551006, total time[s] 0.104337 +Converged at iteration 22, L1 7.24396e-05, Linf 0.00489335, total time[s] 0.071 +Converged at iteration 19, L1 6.01845e-05, Linf 0.00367629, total time[s] 0.053835 +Converged at iteration 30, L1 8.69267e-05, Linf 0.00330224, total time[s] 0.079979 +Converged at iteration 20, L1 8.54344e-05, Linf 0.00463491, total time[s] 0.055885 +Converged at iteration 24, L1 7.16464e-05, Linf 0.00467503, total time[s] 0.0664 +Converged at iteration 31, L1 9.30592e-05, Linf 0.00537471, total time[s] 0.080816 +Converged at iteration 27, L1 9.92362e-05, Linf 0.00551973, total time[s] 0.073676 +Converged at iteration 24, L1 8.70821e-05, Linf 0.00449437, total time[s] 0.065144 +Converged at iteration 23, L1 9.25885e-05, Linf 0.00419845, total time[s] 0.059958 +Converged at iteration 26, L1 7.19956e-05, Linf 0.00464414, total time[s] 0.067296 +Converged at iteration 29, L1 7.67355e-05, Linf 0.00487431, total time[s] 0.079293 +Converged at iteration 34, L1 7.76074e-05, Linf 0.00428846, total time[s] 0.086079 +Converged at iteration 30, L1 9.92146e-05, Linf 0.00443983, total time[s] 0.076137 +Converged at iteration 28, L1 9.77248e-05, Linf 0.00319406, total time[s] 0.071573 +Converged at iteration 32, L1 8.69348e-05, Linf 0.00364201, total time[s] 0.086272 +Converged at iteration 36, L1 9.73483e-05, Linf 0.00372475, total time[s] 0.096724 +Converged at iteration 33, L1 8.40394e-05, Linf 0.0048224, total time[s] 0.083125 +Converged at iteration 28, L1 9.39556e-05, Linf 0.00421393, total time[s] 0.074717 +Converged at iteration 24, L1 8.28597e-05, Linf 0.00308024, total time[s] 0.074541 +Converged at iteration 26, L1 8.75575e-05, Linf 0.0039071, total time[s] 0.096173 +Converged at iteration 40, L1 6.74138e-05, Linf 0.00373954, total time[s] 0.122079 +Converged at iteration 35, L1 7.86321e-05, Linf 0.00344673, total time[s] 0.11757 +Converged at iteration 30, L1 9.70522e-05, Linf 0.00427761, total time[s] 0.085581 +Converged at iteration 31, L1 6.19142e-05, Linf 0.00503075, total time[s] 0.11686 +Converged at iteration 27, L1 6.15626e-05, Linf 0.00497391, total time[s] 0.085125 +Converged at iteration 22, L1 8.2108e-05, Linf 0.00441324, total time[s] 0.064816 +Converged at iteration 20, L1 9.86374e-05, Linf 0.00408165, total time[s] 0.080096 +Converged at iteration 24, L1 9.01558e-05, Linf 0.0048256, total time[s] 0.064267 +Converged at iteration 28, L1 7.40778e-05, Linf 0.00445305, total time[s] 0.073078 +Converged at iteration 26, L1 8.11429e-05, Linf 0.00551183, total time[s] 0.068797 +Converged at iteration 22, L1 7.28607e-05, Linf 0.00500948, total time[s] 0.059243 +Converged at iteration 19, L1 6.37722e-05, Linf 0.0038089, total time[s] 0.052611 +Converged at iteration 30, L1 8.33596e-05, Linf 0.00329942, total time[s] 0.077151 +Converged at iteration 20, L1 8.47085e-05, Linf 0.00452145, total time[s] 0.061622 +Converged at iteration 24, L1 7.15735e-05, Linf 0.0046854, total time[s] 0.070915 +Converged at iteration 31, L1 9.08185e-05, Linf 0.00555362, total time[s] 0.090378 +Converged at iteration 27, L1 9.95769e-05, Linf 0.00564252, total time[s] 0.073578 +Converged at iteration 24, L1 8.77603e-05, Linf 0.00454143, total time[s] 0.067095 +Converged at iteration 23, L1 9.25363e-05, Linf 0.00414781, total time[s] 0.068144 +Converged at iteration 26, L1 7.21642e-05, Linf 0.00450308, total time[s] 0.075637 +Converged at iteration 29, L1 7.75501e-05, Linf 0.00482015, total time[s] 0.083888 +Converged at iteration 34, L1 7.46839e-05, Linf 0.00427235, total time[s] 0.131601 +Converged at iteration 30, L1 9.67428e-05, Linf 0.00446599, total time[s] 0.080794 +Converged at iteration 28, L1 9.61254e-05, Linf 0.00315426, total time[s] 0.073162 +Converged at iteration 32, L1 9.00821e-05, Linf 0.00369652, total time[s] 0.083956 +Converged at iteration 37, L1 7.25656e-05, Linf 0.00319595, total time[s] 0.094375 +Converged at iteration 33, L1 8.43655e-05, Linf 0.00478414, total time[s] 0.085417 +Converged at iteration 28, L1 9.53179e-05, Linf 0.00425508, total time[s] 0.073575 +Converged at iteration 24, L1 8.51033e-05, Linf 0.00316552, total time[s] 0.064549 +Converged at iteration 26, L1 8.88922e-05, Linf 0.00388441, total time[s] 0.068785 +Converged at iteration 40, L1 6.75389e-05, Linf 0.00371251, total time[s] 0.102777 +Converged at iteration 35, L1 7.75198e-05, Linf 0.00342164, total time[s] 0.094629 +Converged at iteration 30, L1 9.68588e-05, Linf 0.00432908, total time[s] 0.080929 +Converged at iteration 31, L1 6.20015e-05, Linf 0.00502817, total time[s] 0.084035 +Converged at iteration 27, L1 6.25857e-05, Linf 0.00498487, total time[s] 0.07603 +Converged at iteration 22, L1 8.40399e-05, Linf 0.0044509, total time[s] 0.063241 +Converged at iteration 20, L1 9.73206e-05, Linf 0.00406442, total time[s] 0.175492 +Converged at iteration 24, L1 8.93388e-05, Linf 0.00494103, total time[s] 0.080637 +Converged at iteration 28, L1 7.40478e-05, Linf 0.00445617, total time[s] 0.07366 +Converged at iteration 26, L1 8.10122e-05, Linf 0.00538556, total time[s] 0.068686 +Converged at iteration 22, L1 7.30379e-05, Linf 0.0049678, total time[s] 0.06068 +Converged at iteration 19, L1 6.52485e-05, Linf 0.00379445, total time[s] 0.051306 +Converged at iteration 30, L1 8.16481e-05, Linf 0.0032705, total time[s] 0.077793 +Converged at iteration 20, L1 8.46196e-05, Linf 0.0045711, total time[s] 0.053854 +Converged at iteration 24, L1 7.14023e-05, Linf 0.00464467, total time[s] 0.064837 +Converged at iteration 31, L1 8.98198e-05, Linf 0.00559335, total time[s] 0.083445 +Converged at iteration 27, L1 9.92921e-05, Linf 0.0056795, total time[s] 0.072796 +Converged at iteration 24, L1 8.79538e-05, Linf 0.00466378, total time[s] 0.074986 +Converged at iteration 23, L1 9.24331e-05, Linf 0.0042193, total time[s] 0.062079 +Converged at iteration 26, L1 7.21926e-05, Linf 0.00448184, total time[s] 0.068396 +Converged at iteration 29, L1 7.78699e-05, Linf 0.0048076, total time[s] 0.075194 +Converged at iteration 34, L1 7.29092e-05, Linf 0.00422573, total time[s] 0.086255 +Converged at iteration 30, L1 9.5373e-05, Linf 0.00438793, total time[s] 0.07797 +Converged at iteration 28, L1 9.55476e-05, Linf 0.00315005, total time[s] 0.073073 +Converged at iteration 32, L1 9.30026e-05, Linf 0.00372228, total time[s] 0.08309 +Converged at iteration 37, L1 7.39436e-05, Linf 0.00322648, total time[s] 0.093672 +Converged at iteration 33, L1 8.4485e-05, Linf 0.00471299, total time[s] 0.084545 +Converged at iteration 28, L1 9.6342e-05, Linf 0.00428134, total time[s] 0.073608 +Converged at iteration 24, L1 8.65091e-05, Linf 0.00320804, total time[s] 0.06348 +Converged at iteration 26, L1 9.00471e-05, Linf 0.00383042, total time[s] 0.067754 +Converged at iteration 40, L1 6.83591e-05, Linf 0.00369301, total time[s] 0.106042 +Converged at iteration 35, L1 7.73134e-05, Linf 0.00340956, total time[s] 0.09189 +Converged at iteration 30, L1 9.72483e-05, Linf 0.00431729, total time[s] 0.080596 +Converged at iteration 31, L1 6.20295e-05, Linf 0.0050269, total time[s] 0.080287 +Converged at iteration 27, L1 6.23568e-05, Linf 0.00499022, total time[s] 0.071512 +Converged at iteration 22, L1 8.49425e-05, Linf 0.00446906, total time[s] 0.061004 +Converged at iteration 20, L1 9.67488e-05, Linf 0.00403929, total time[s] 0.056853 +Converged at iteration 24, L1 8.89081e-05, Linf 0.00483395, total time[s] 0.064215 +Converged at iteration 28, L1 7.40579e-05, Linf 0.00445758, total time[s] 0.072221 +Converged at iteration 26, L1 8.14533e-05, Linf 0.00548287, total time[s] 0.06774 +Converged at iteration 22, L1 7.38511e-05, Linf 0.00507221, total time[s] 0.057418 +Converged at iteration 19, L1 6.58568e-05, Linf 0.00390126, total time[s] 0.070035 +Converged at iteration 30, L1 8.09633e-05, Linf 0.00329722, total time[s] 0.075943 +Converged at iteration 20, L1 8.45364e-05, Linf 0.00456065, total time[s] 0.052923 +Converged at iteration 24, L1 7.14033e-05, Linf 0.00463563, total time[s] 0.062368 +Converged at iteration 31, L1 8.97509e-05, Linf 0.0057003, total time[s] 0.077994 +Converged at iteration 27, L1 9.92288e-05, Linf 0.0056901, total time[s] 0.07996 +Converged at iteration 24, L1 8.79661e-05, Linf 0.00464054, total time[s] 0.068351 +Converged at iteration 23, L1 9.32462e-05, Linf 0.00573014, total time[s] 0.081794 +Converged at iteration 26, L1 7.22195e-05, Linf 0.00447104, total time[s] 0.069803 +Converged at iteration 29, L1 7.81478e-05, Linf 0.00480163, total time[s] 0.077724 +Converged at iteration 34, L1 7.19777e-05, Linf 0.00423623, total time[s] 0.088013 +Converged at iteration 30, L1 9.46737e-05, Linf 0.00442217, total time[s] 0.077631 +Converged at iteration 28, L1 9.52605e-05, Linf 0.00312359, total time[s] 0.077235 +Converged at iteration 32, L1 9.32993e-05, Linf 0.00371255, total time[s] 0.083818 +Converged at iteration 37, L1 7.37736e-05, Linf 0.00325609, total time[s] 0.095106 +Converged at iteration 33, L1 8.45029e-05, Linf 0.00453208, total time[s] 0.084004 +Converged at iteration 28, L1 9.66876e-05, Linf 0.00429007, total time[s] 0.072839 +Converged at iteration 24, L1 8.73533e-05, Linf 0.00322939, total time[s] 0.064529 +Converged at iteration 26, L1 9.04637e-05, Linf 0.00384712, total time[s] 0.068277 +Converged at iteration 40, L1 6.83752e-05, Linf 0.00367753, total time[s] 0.100496 +Converged at iteration 35, L1 7.65024e-05, Linf 0.00340328, total time[s] 0.091743 +Converged at iteration 30, L1 9.66848e-05, Linf 0.00429821, total time[s] 0.07866 +Converged at iteration 31, L1 6.20379e-05, Linf 0.00502627, total time[s] 0.079309 +Converged at iteration 27, L1 6.27132e-05, Linf 0.00499266, total time[s] 0.072928 +Converged at iteration 22, L1 8.56566e-05, Linf 0.0044782, total time[s] 0.059098 +Converged at iteration 20, L1 9.64917e-05, Linf 0.003971, total time[s] 0.058361 +Converged at iteration 24, L1 8.86343e-05, Linf 0.00483113, total time[s] 0.071988 +Converged at iteration 28, L1 7.3938e-05, Linf 0.00445819, total time[s] 0.08119 +Converged at iteration 26, L1 8.11514e-05, Linf 0.00547475, total time[s] 0.095726 +Converged at iteration 22, L1 7.37212e-05, Linf 0.00507927, total time[s] 0.074614 +Converged at iteration 19, L1 6.61163e-05, Linf 0.00391619, total time[s] 0.062749 +Converged at iteration 30, L1 8.03605e-05, Linf 0.0032693, total time[s] 0.099655 +Converged at iteration 20, L1 8.46307e-05, Linf 0.00455552, total time[s] 0.083156 +Converged at iteration 24, L1 7.11391e-05, Linf 0.00463012, total time[s] 0.100651 +Converged at iteration 31, L1 8.9518e-05, Linf 0.00569753, total time[s] 0.113427 +Converged at iteration 27, L1 9.92481e-05, Linf 0.0056949, total time[s] 0.070794 +Converged at iteration 24, L1 8.7931e-05, Linf 0.00464538, total time[s] 0.062787 +Converged at iteration 23, L1 9.22571e-05, Linf 0.00410762, total time[s] 0.062322 +Converged at iteration 26, L1 7.22154e-05, Linf 0.00446585, total time[s] 0.067961 +Converged at iteration 29, L1 7.81e-05, Linf 0.00479895, total time[s] 0.075085 +Converged at iteration 34, L1 7.14504e-05, Linf 0.00423138, total time[s] 0.086623 +Converged at iteration 30, L1 9.43286e-05, Linf 0.00442435, total time[s] 0.07936 +Converged at iteration 28, L1 9.51182e-05, Linf 0.00311857, total time[s] 0.072919 +Converged at iteration 32, L1 9.38547e-05, Linf 0.00375992, total time[s] 0.07944 +Converged at iteration 37, L1 7.37201e-05, Linf 0.00326515, total time[s] 0.092553 +Converged at iteration 33, L1 8.44889e-05, Linf 0.00470295, total time[s] 0.086396 +Converged at iteration 28, L1 9.63192e-05, Linf 0.00425569, total time[s] 0.07308 +Converged at iteration 24, L1 8.78092e-05, Linf 0.00321524, total time[s] 0.062494 +Converged at iteration 26, L1 9.00883e-05, Linf 0.00384693, total time[s] 0.067956 +Converged at iteration 40, L1 6.94442e-05, Linf 0.00367644, total time[s] 0.111176 +Converged at iteration 35, L1 7.67653e-05, Linf 0.00340179, total time[s] 0.100243 +Converged at iteration 30, L1 9.65805e-05, Linf 0.0043251, total time[s] 0.075811 +Converged at iteration 40, L1 6.861e-05, Linf 0.00367974, total time[s] 0.114625 +Converged at iteration 35, L1 7.6454e-05, Linf 0.00340015, total time[s] 0.097586 +Converged at iteration 30, L1 9.64469e-05, Linf 0.0043258, total time[s] 0.076922 +Converged at iteration 31, L1 6.24676e-05, Linf 0.00502564, total time[s] 0.080647 +Converged at iteration 27, L1 6.27988e-05, Linf 0.00499528, total time[s] 0.069226 +Converged at iteration 22, L1 8.5985e-05, Linf 0.0044883, total time[s] 0.059251 +Converged at iteration 20, L1 9.60885e-05, Linf 0.00400023, total time[s] 0.054844 +Converged at iteration 24, L1 8.87851e-05, Linf 0.00482822, total time[s] 0.063391 +Converged at iteration 28, L1 7.40514e-05, Linf 0.00445894, total time[s] 0.072225 +Converged at iteration 26, L1 8.17068e-05, Linf 0.00545126, total time[s] 0.071352 +Converged at iteration 22, L1 7.39274e-05, Linf 0.00508903, total time[s] 0.060784 +Converged at iteration 19, L1 6.63261e-05, Linf 0.00393099, total time[s] 0.069089 +Converged at iteration 30, L1 7.98733e-05, Linf 0.00329636, total time[s] 0.080296 +Converged at iteration 20, L1 8.44535e-05, Linf 0.00455019, total time[s] 0.05956 +Converged at iteration 24, L1 7.10751e-05, Linf 0.00463262, total time[s] 0.065223 +Converged at iteration 31, L1 8.93596e-05, Linf 0.00569247, total time[s] 0.081909 +Converged at iteration 27, L1 9.91442e-05, Linf 0.00569854, total time[s] 0.073226 +Converged at iteration 24, L1 8.7903e-05, Linf 0.0046502, total time[s] 0.063066 +Converged at iteration 23, L1 9.21648e-05, Linf 0.00403476, total time[s] 0.060636 +Converged at iteration 26, L1 7.22147e-05, Linf 0.00446164, total time[s] 0.068018 +Converged at iteration 29, L1 7.81337e-05, Linf 0.00472211, total time[s] 0.075415 +Converged at iteration 34, L1 7.09108e-05, Linf 0.00422705, total time[s] 0.091455 +Converged at iteration 30, L1 9.39296e-05, Linf 0.00442619, total time[s] 0.077072 +Converged at iteration 28, L1 9.49896e-05, Linf 0.00310996, total time[s] 0.073208 +Converged at iteration 32, L1 9.40524e-05, Linf 0.00374068, total time[s] 0.084156 +Converged at iteration 37, L1 7.33871e-05, Linf 0.00327808, total time[s] 0.09892 +Converged at iteration 33, L1 8.44888e-05, Linf 0.00464528, total time[s] 0.084444 +Converged at iteration 28, L1 9.65526e-05, Linf 0.00430395, total time[s] 0.073908 +Converged at iteration 24, L1 8.83107e-05, Linf 0.00325316, total time[s] 0.064942 +Converged at iteration 26, L1 8.99291e-05, Linf 0.00384291, total time[s] 0.069614 +Converged at iteration 40, L1 6.69405e-05, Linf 0.00393137, total time[s] 0.103519 +Converged at iteration 35, L1 8.67998e-05, Linf 0.00357543, total time[s] 0.089772 +Converged at iteration 30, L1 9.18397e-05, Linf 0.0041994, total time[s] 0.079408 +Converged at iteration 31, L1 6.17474e-05, Linf 0.00504685, total time[s] 0.081131 +Converged at iteration 26, L1 9.83879e-05, Linf 0.0057215, total time[s] 0.070602 +Converged at iteration 22, L1 7.18608e-05, Linf 0.0041396, total time[s] 0.059927 +Converged at iteration 21, L1 6.42341e-05, Linf 0.00348503, total time[s] 0.060322 +Converged at iteration 24, L1 8.94057e-05, Linf 0.00494738, total time[s] 0.064735 +Converged at iteration 28, L1 7.32131e-05, Linf 0.00443342, total time[s] 0.075043 +Converged at iteration 26, L1 8.07402e-05, Linf 0.00544893, total time[s] 0.104712 +Converged at iteration 22, L1 7.0154e-05, Linf 0.0044157, total time[s] 0.064862 +Converged at iteration 19, L1 5.49425e-05, Linf 0.00332053, total time[s] 0.079104 +Converged at iteration 30, L1 9.51357e-05, Linf 0.00330734, total time[s] 0.080372 +Converged at iteration 20, L1 8.42618e-05, Linf 0.00472689, total time[s] 0.054743 +Converged at iteration 24, L1 7.12296e-05, Linf 0.00474853, total time[s] 0.063753 +Converged at iteration 31, L1 9.43947e-05, Linf 0.00482238, total time[s] 0.079802 +Converged at iteration 27, L1 9.41326e-05, Linf 0.00468424, total time[s] 0.071418 +Converged at iteration 24, L1 8.51979e-05, Linf 0.004281, total time[s] 0.064642 +Converged at iteration 23, L1 9.24e-05, Linf 0.00432073, total time[s] 0.062346 +Converged at iteration 26, L1 7.13138e-05, Linf 0.00465367, total time[s] 0.071092 +Converged at iteration 29, L1 7.53414e-05, Linf 0.00488622, total time[s] 0.076388 +Converged at iteration 34, L1 8.13238e-05, Linf 0.00406105, total time[s] 0.087458 +Converged at iteration 31, L1 7.17219e-05, Linf 0.0034794, total time[s] 0.080595 +Converged at iteration 29, L1 7.02873e-05, Linf 0.00274131, total time[s] 0.075927 +Converged at iteration 32, L1 8.21655e-05, Linf 0.00356552, total time[s] 0.083001 +Converged at iteration 36, L1 8.75435e-05, Linf 0.00357036, total time[s] 0.091479 +Converged at iteration 33, L1 8.32125e-05, Linf 0.00484766, total time[s] 0.084705 +Converged at iteration 28, L1 9.11709e-05, Linf 0.00413133, total time[s] 0.073418 +Converged at iteration 24, L1 8.02584e-05, Linf 0.00290891, total time[s] 0.071931 +Converged at iteration 26, L1 8.39853e-05, Linf 0.00392378, total time[s] 0.076667 +Converged at iteration 40, L1 6.49749e-05, Linf 0.00423903, total time[s] 0.101683 +Converged at iteration 35, L1 9.66095e-05, Linf 0.00385876, total time[s] 0.093293 +Converged at iteration 30, L1 7.65771e-05, Linf 0.00420176, total time[s] 0.078432 +Converged at iteration 31, L1 6.18365e-05, Linf 0.00506464, total time[s] 0.081161 +Converged at iteration 26, L1 9.10576e-05, Linf 0.00568998, total time[s] 0.070131 +Converged at iteration 21, L1 9.61381e-05, Linf 0.00461199, total time[s] 0.057823 +Converged at iteration 21, L1 6.93374e-05, Linf 0.00393366, total time[s] 0.059123 +Converged at iteration 24, L1 8.29721e-05, Linf 0.0051997, total time[s] 0.06453 +Converged at iteration 28, L1 6.8044e-05, Linf 0.00441193, total time[s] 0.075978 +Converged at iteration 26, L1 8.20384e-05, Linf 0.00430114, total time[s] 0.07246 +Converged at iteration 21, L1 8.53516e-05, Linf 0.00433737, total time[s] 0.05664 +Converged at iteration 18, L1 7.36718e-05, Linf 0.00298997, total time[s] 0.052005 +Converged at iteration 31, L1 7.4841e-05, Linf 0.00268266, total time[s] 0.087065 +Converged at iteration 20, L1 8.22533e-05, Linf 0.00494641, total time[s] 0.062187 +Converged at iteration 24, L1 6.91283e-05, Linf 0.00499596, total time[s] 0.073564 +Converged at iteration 30, L1 9.44546e-05, Linf 0.00345088, total time[s] 0.082543 +Converged at iteration 25, L1 9.01658e-05, Linf 0.00466771, total time[s] 0.067766 +Converged at iteration 23, L1 8.3583e-05, Linf 0.00393125, total time[s] 0.063401 +Converged at iteration 23, L1 9.32425e-05, Linf 0.00455935, total time[s] 0.067031 +Converged at iteration 26, L1 6.98293e-05, Linf 0.00492259, total time[s] 0.068897 +Converged at iteration 29, L1 7.14363e-05, Linf 0.00490096, total time[s] 0.076558 +Converged at iteration 32, L1 8.5754e-05, Linf 0.00350166, total time[s] 0.085262 +Converged at iteration 31, L1 7.25482e-05, Linf 0.00304799, total time[s] 0.082093 +Converged at iteration 29, L1 7.73558e-05, Linf 0.00289707, total time[s] 0.081045 +Converged at iteration 32, L1 7.60296e-05, Linf 0.00337659, total time[s] 0.084158 +Converged at iteration 35, L1 9.74642e-05, Linf 0.00405256, total time[s] 0.091223 +Converged at iteration 33, L1 8.06574e-05, Linf 0.00500377, total time[s] 0.088653 +Converged at iteration 28, L1 8.44249e-05, Linf 0.00398738, total time[s] 0.115463 +Converged at iteration 24, L1 7.80389e-05, Linf 0.0025615, total time[s] 0.083457 +Converged at iteration 26, L1 8.36453e-05, Linf 0.00405328, total time[s] 0.07353 +Converged at iteration 39, L1 9.9302e-05, Linf 0.00493821, total time[s] 0.168798 +Converged at iteration 35, L1 9.87543e-05, Linf 0.00389915, total time[s] 0.10263 +Converged at iteration 30, L1 6.55218e-05, Linf 0.00414085, total time[s] 0.075866 +Converged at iteration 31, L1 6.07211e-05, Linf 0.00505852, total time[s] 0.07771 +Converged at iteration 26, L1 9.1476e-05, Linf 0.00577182, total time[s] 0.068223 +Converged at iteration 21, L1 9.78374e-05, Linf 0.00465006, total time[s] 0.071494 +Converged at iteration 21, L1 6.6275e-05, Linf 0.00394856, total time[s] 0.067199 +Converged at iteration 24, L1 7.57046e-05, Linf 0.00512774, total time[s] 0.077876 +Converged at iteration 28, L1 6.66984e-05, Linf 0.00438939, total time[s] 0.104762 +Converged at iteration 26, L1 8.00001e-05, Linf 0.00402652, total time[s] 0.078313 +Converged at iteration 21, L1 7.94742e-05, Linf 0.00439007, total time[s] 0.0682 +Converged at iteration 18, L1 6.92727e-05, Linf 0.00293229, total time[s] 0.054105 +Converged at iteration 31, L1 7.6766e-05, Linf 0.00271024, total time[s] 0.091694 +Converged at iteration 20, L1 8.10843e-05, Linf 0.00496658, total time[s] 0.055697 +Converged at iteration 24, L1 6.81789e-05, Linf 0.00503563, total time[s] 0.095295 +Converged at iteration 30, L1 8.38642e-05, Linf 0.00323217, total time[s] 0.077472 +Converged at iteration 25, L1 8.01997e-05, Linf 0.00458449, total time[s] 0.067204 +Converged at iteration 23, L1 7.58525e-05, Linf 0.00383299, total time[s] 0.062171 +Converged at iteration 23, L1 9.31031e-05, Linf 0.00454408, total time[s] 0.061202 +Converged at iteration 26, L1 6.76157e-05, Linf 0.00493434, total time[s] 0.069048 +Converged at iteration 29, L1 7.09033e-05, Linf 0.0048635, total time[s] 0.075425 +Converged at iteration 32, L1 7.2861e-05, Linf 0.0033591, total time[s] 0.082761 +Converged at iteration 30, L1 9.43783e-05, Linf 0.00339268, total time[s] 0.080417 +Converged at iteration 29, L1 7.87388e-05, Linf 0.00293695, total time[s] 0.076735 +Converged at iteration 32, L1 7.50353e-05, Linf 0.00335634, total time[s] 0.083559 +Converged at iteration 35, L1 8.59179e-05, Linf 0.00398667, total time[s] 0.089961 +Converged at iteration 33, L1 7.95237e-05, Linf 0.00502159, total time[s] 0.085378 +Converged at iteration 28, L1 8.47283e-05, Linf 0.00404594, total time[s] 0.073765 +Converged at iteration 24, L1 7.91383e-05, Linf 0.00261278, total time[s] 0.063973 +Converged at iteration 26, L1 8.1991e-05, Linf 0.0040482, total time[s] 0.068835 +Converged at iteration 39, L1 9.83205e-05, Linf 0.00498543, total time[s] 0.100372 +Converged at iteration 35, L1 9.95555e-05, Linf 0.0039041, total time[s] 0.099059 +Converged at iteration 29, L1 8.62412e-05, Linf 0.00497598, total time[s] 0.078665 +Converged at iteration 31, L1 5.99257e-05, Linf 0.00508045, total time[s] 0.080961 +Converged at iteration 26, L1 9.17357e-05, Linf 0.00585301, total time[s] 0.06865 +Converged at iteration 21, L1 9.92354e-05, Linf 0.00469464, total time[s] 0.058451 +Converged at iteration 21, L1 6.28445e-05, Linf 0.00397495, total time[s] 0.061696 +Converged at iteration 24, L1 6.66763e-05, Linf 0.00518839, total time[s] 0.088574 +Converged at iteration 28, L1 6.33647e-05, Linf 0.00438811, total time[s] 0.083272 +Converged at iteration 26, L1 7.60109e-05, Linf 0.00388351, total time[s] 0.086361 +Converged at iteration 21, L1 7.43444e-05, Linf 0.00439145, total time[s] 0.068395 +Converged at iteration 18, L1 6.55924e-05, Linf 0.00301094, total time[s] 0.054166 +Converged at iteration 31, L1 7.82705e-05, Linf 0.00273862, total time[s] 0.089882 +Converged at iteration 20, L1 8.0042e-05, Linf 0.00498463, total time[s] 0.0628 +Converged at iteration 24, L1 6.82796e-05, Linf 0.00566882, total time[s] 0.066103 +Converged at iteration 30, L1 7.52516e-05, Linf 0.00306442, total time[s] 0.080457 +Converged at iteration 25, L1 7.26329e-05, Linf 0.00452871, total time[s] 0.072651 +Converged at iteration 23, L1 6.94155e-05, Linf 0.00374747, total time[s] 0.09783 +Converged at iteration 23, L1 9.3195e-05, Linf 0.00579293, total time[s] 0.094627 +Converged at iteration 26, L1 6.63428e-05, Linf 0.00491683, total time[s] 0.085937 +Converged at iteration 29, L1 7.0016e-05, Linf 0.00481327, total time[s] 0.084821 +Converged at iteration 31, L1 9.6719e-05, Linf 0.00403948, total time[s] 0.099171 +Converged at iteration 30, L1 8.62248e-05, Linf 0.0032378, total time[s] 0.088175 +Converged at iteration 29, L1 8.02205e-05, Linf 0.0029466, total time[s] 0.08158 +Converged at iteration 32, L1 7.35715e-05, Linf 0.00332201, total time[s] 0.090274 +Converged at iteration 35, L1 7.34875e-05, Linf 0.00383194, total time[s] 0.103263 +Converged at iteration 33, L1 7.83945e-05, Linf 0.00504024, total time[s] 0.095442 +Converged at iteration 28, L1 8.55876e-05, Linf 0.00406649, total time[s] 0.080178 +Converged at iteration 24, L1 8.03175e-05, Linf 0.00267337, total time[s] 0.071129 +Converged at iteration 26, L1 7.79704e-05, Linf 0.00400675, total time[s] 0.07716 +Converged at iteration 39, L1 9.71708e-05, Linf 0.00507095, total time[s] 0.10174 +Converged at iteration 36, L1 6.74987e-05, Linf 0.00338704, total time[s] 0.093367 +Converged at iteration 28, L1 9.94665e-05, Linf 0.00579278, total time[s] 0.08074 +Converged at iteration 31, L1 5.8318e-05, Linf 0.00503463, total time[s] 0.080346 +Converged at iteration 26, L1 9.20508e-05, Linf 0.00595554, total time[s] 0.068653 +Converged at iteration 22, L1 6.08308e-05, Linf 0.00405456, total time[s] 0.059578 +Converged at iteration 20, L1 9.48252e-05, Linf 0.00516085, total time[s] 0.055191 +Converged at iteration 23, L1 8.66997e-05, Linf 0.00620029, total time[s] 0.06444 +Converged at iteration 27, L1 9.39261e-05, Linf 0.00544947, total time[s] 0.075893 +Converged at iteration 26, L1 6.73207e-05, Linf 0.00360489, total time[s] 0.076725 +Converged at iteration 21, L1 6.82106e-05, Linf 0.00444805, total time[s] 0.058639 +Converged at iteration 18, L1 6.05531e-05, Linf 0.00431203, total time[s] 0.051743 +Converged at iteration 31, L1 8.15865e-05, Linf 0.00280633, total time[s] 0.089686 +Converged at iteration 20, L1 7.7016e-05, Linf 0.00503381, total time[s] 0.068259 +Converged at iteration 24, L1 6.5923e-05, Linf 0.00515487, total time[s] 0.066061 +Converged at iteration 29, L1 9.04322e-05, Linf 0.00344075, total time[s] 0.075634 +Converged at iteration 25, L1 6.23809e-05, Linf 0.00448311, total time[s] 0.065779 +Converged at iteration 22, L1 9.72598e-05, Linf 0.00445006, total time[s] 0.058737 +Converged at iteration 23, L1 9.06973e-05, Linf 0.0043457, total time[s] 0.060868 +Converged at iteration 25, L1 9.89031e-05, Linf 0.00585082, total time[s] 0.070208 +Converged at iteration 29, L1 6.83075e-05, Linf 0.00465166, total time[s] 0.090075 +Converged at iteration 31, L1 8.02892e-05, Linf 0.00389426, total time[s] 0.080671 +Converged at iteration 30, L1 7.20561e-05, Linf 0.00299533, total time[s] 0.078309 +Converged at iteration 29, L1 8.28018e-05, Linf 0.00301066, total time[s] 0.07802 +Converged at iteration 31, L1 9.75305e-05, Linf 0.00390091, total time[s] 0.080784 +Converged at iteration 34, L1 7.88949e-05, Linf 0.00425156, total time[s] 0.08703 +Converged at iteration 33, L1 7.59941e-05, Linf 0.005136, total time[s] 0.08457 +Converged at iteration 28, L1 8.49482e-05, Linf 0.00422735, total time[s] 0.073137 +Converged at iteration 24, L1 8.28916e-05, Linf 0.00279543, total time[s] 0.06412 +Converged at iteration 26, L1 6.75694e-05, Linf 0.00385617, total time[s] 0.068238 +Converged at iteration 39, L1 9.29922e-05, Linf 0.00516592, total time[s] 0.100186 +Converged at iteration 36, L1 6.85748e-05, Linf 0.00359767, total time[s] 0.133195 +Converged at iteration 27, L1 8.79103e-05, Linf 0.00617487, total time[s] 0.083743 +Converged at iteration 30, L1 9.99661e-05, Linf 0.00607045, total time[s] 0.082579 +Converged at iteration 26, L1 9.20722e-05, Linf 0.00633528, total time[s] 0.072363 +Converged at iteration 22, L1 6.29908e-05, Linf 0.0041223, total time[s] 0.057881 +Converged at iteration 20, L1 7.53139e-05, Linf 0.00505357, total time[s] 0.053091 +Converged at iteration 22, L1 9.33528e-05, Linf 0.00721856, total time[s] 0.058913 +Converged at iteration 27, L1 7.10012e-05, Linf 0.00527029, total time[s] 0.070053 +Converged at iteration 25, L1 9.90472e-05, Linf 0.00472256, total time[s] 0.065159 +Converged at iteration 21, L1 6.03335e-05, Linf 0.00462221, total time[s] 0.05631 +Converged at iteration 17, L1 9.74638e-05, Linf 0.00503469, total time[s] 0.046849 +Converged at iteration 31, L1 8.77689e-05, Linf 0.0029248, total time[s] 0.095594 +Converged at iteration 20, L1 7.08529e-05, Linf 0.00507728, total time[s] 0.059943 +Converged at iteration 24, L1 6.23651e-05, Linf 0.00527641, total time[s] 0.067337 +Converged at iteration 28, L1 9.87267e-05, Linf 0.00416361, total time[s] 0.075476 +Converged at iteration 24, L1 8.64086e-05, Linf 0.0059829, total time[s] 0.064995 +Converged at iteration 22, L1 8.87599e-05, Linf 0.00438925, total time[s] 0.059558 +Converged at iteration 23, L1 8.52211e-05, Linf 0.003729, total time[s] 0.062691 +Converged at iteration 25, L1 9.1453e-05, Linf 0.00583751, total time[s] 0.065067 +Converged at iteration 28, L1 9.97595e-05, Linf 0.00599889, total time[s] 0.073127 +Converged at iteration 30, L1 9.93431e-05, Linf 0.00495551, total time[s] 0.077826 +Converged at iteration 29, L1 8.14108e-05, Linf 0.00317915, total time[s] 0.075177 +Converged at iteration 29, L1 8.86762e-05, Linf 0.00310771, total time[s] 0.079497 +Converged at iteration 31, L1 8.42446e-05, Linf 0.00340201, total time[s] 0.0856 +Converged at iteration 33, L1 6.42758e-05, Linf 0.00380152, total time[s] 0.087377 +Converged at iteration 33, L1 7.06957e-05, Linf 0.00512243, total time[s] 0.092204 +Converged at iteration 28, L1 8.41338e-05, Linf 0.00448406, total time[s] 0.085545 +Converged at iteration 24, L1 8.80504e-05, Linf 0.00294075, total time[s] 0.069129 +Converged at iteration 25, L1 8.00045e-05, Linf 0.00429879, total time[s] 0.066562 +Converged at iteration 39, L1 8.34337e-05, Linf 0.00543288, total time[s] 0.11107 +Converged at iteration 36, L1 6.52104e-05, Linf 0.00410045, total time[s] 0.117611 +Converged at iteration 26, L1 5.47611e-05, Linf 0.00518122, total time[s] 0.074568 +Converged at iteration 30, L1 9.02605e-05, Linf 0.00608833, total time[s] 0.082255 +Converged at iteration 26, L1 9.09828e-05, Linf 0.006941, total time[s] 0.080065 +Converged at iteration 22, L1 6.79332e-05, Linf 0.00439423, total time[s] 0.06356 +Converged at iteration 19, L1 8.98654e-05, Linf 0.00629572, total time[s] 0.052982 +Converged at iteration 21, L1 8.25029e-05, Linf 0.00779287, total time[s] 0.05794 +Converged at iteration 26, L1 6.35734e-05, Linf 0.0053798, total time[s] 0.070399 +Converged at iteration 25, L1 8.08804e-05, Linf 0.00507284, total time[s] 0.065685 +Converged at iteration 21, L1 5.5974e-05, Linf 0.00483746, total time[s] 0.056885 +Converged at iteration 17, L1 7.81276e-05, Linf 0.00580282, total time[s] 0.047199 +Converged at iteration 31, L1 9.68169e-05, Linf 0.00316421, total time[s] 0.082331 +Converged at iteration 19, L1 9.81482e-05, Linf 0.00630964, total time[s] 0.052104 +Converged at iteration 23, L1 8.7231e-05, Linf 0.00593284, total time[s] 0.066184 +Converged at iteration 28, L1 6.43937e-05, Linf 0.00399102, total time[s] 0.073141 +Converged at iteration 24, L1 6.94593e-05, Linf 0.00612136, total time[s] 0.065846 +Converged at iteration 22, L1 8.24314e-05, Linf 0.00449412, total time[s] 0.070138 +Converged at iteration 23, L1 7.06533e-05, Linf 0.00256138, total time[s] 0.061974 +Converged at iteration 25, L1 7.89194e-05, Linf 0.00465032, total time[s] 0.06713 +Converged at iteration 28, L1 8.92866e-05, Linf 0.00552718, total time[s] 0.080581 +Converged at iteration 30, L1 7.81344e-05, Linf 0.00514039, total time[s] 0.088789 +Converged at iteration 28, L1 9.21728e-05, Linf 0.00365338, total time[s] 0.077023 +Converged at iteration 29, L1 9.96814e-05, Linf 0.00330727, total time[s] 0.077243 +Converged at iteration 30, L1 9.33873e-05, Linf 0.00320101, total time[s] 0.076161 +Converged at iteration 31, L1 6.86182e-05, Linf 0.00245944, total time[s] 0.080756 +Converged at iteration 33, L1 6.00468e-05, Linf 0.00517106, total time[s] 0.083002 +Converged at iteration 28, L1 8.3198e-05, Linf 0.00504945, total time[s] 0.071724 +Converged at iteration 25, L1 6.24149e-05, Linf 0.00265002, total time[s] 0.065465 +Converged at iteration 24, L1 8.41675e-05, Linf 0.00400172, total time[s] 0.063327 +Converged at iteration 39, L1 8.82558e-05, Linf 0.00540099, total time[s] 0.099546 +Converged at iteration 36, L1 6.69139e-05, Linf 0.0038641, total time[s] 0.095393 +Converged at iteration 26, L1 8.94389e-05, Linf 0.0066202, total time[s] 0.074097 +Converged at iteration 30, L1 9.47107e-05, Linf 0.0061306, total time[s] 0.076738 +Converged at iteration 26, L1 9.15086e-05, Linf 0.0066401, total time[s] 0.067416 +Converged at iteration 22, L1 6.4993e-05, Linf 0.00434315, total time[s] 0.05901 +Converged at iteration 20, L1 5.95332e-05, Linf 0.00475676, total time[s] 0.051717 +Converged at iteration 22, L1 5.77259e-05, Linf 0.00635049, total time[s] 0.062412 +Converged at iteration 26, L1 8.87186e-05, Linf 0.0061049, total time[s] 0.068011 +Converged at iteration 25, L1 8.85011e-05, Linf 0.00491178, total time[s] 0.068012 +Converged at iteration 21, L1 5.77621e-05, Linf 0.00468047, total time[s] 0.059798 +Converged at iteration 17, L1 8.43684e-05, Linf 0.00553334, total time[s] 0.059038 +Converged at iteration 31, L1 9.27628e-05, Linf 0.00300606, total time[s] 0.11088 +Converged at iteration 20, L1 6.26873e-05, Linf 0.00486036, total time[s] 0.089489 +Converged at iteration 23, L1 9.55038e-05, Linf 0.00589922, total time[s] 0.092637 +Converged at iteration 28, L1 7.77937e-05, Linf 0.004098, total time[s] 0.113329 +Converged at iteration 24, L1 7.71282e-05, Linf 0.00608362, total time[s] 0.079107 +Converged at iteration 22, L1 8.48507e-05, Linf 0.00442458, total time[s] 0.067865 +Converged at iteration 23, L1 7.63456e-05, Linf 0.00305325, total time[s] 0.061885 +Converged at iteration 25, L1 8.46086e-05, Linf 0.00561366, total time[s] 0.066988 +Converged at iteration 28, L1 9.47818e-05, Linf 0.00577737, total time[s] 0.090462 +Converged at iteration 30, L1 8.65389e-05, Linf 0.00506914, total time[s] 0.090605 +Converged at iteration 29, L1 6.76613e-05, Linf 0.00300265, total time[s] 0.075347 +Converged at iteration 29, L1 9.41522e-05, Linf 0.00320566, total time[s] 0.075407 +Converged at iteration 31, L1 7.33457e-05, Linf 0.00291546, total time[s] 0.08814 +Converged at iteration 31, L1 9.78265e-05, Linf 0.00454431, total time[s] 0.090201 +Converged at iteration 33, L1 6.51608e-05, Linf 0.00515432, total time[s] 0.100567 +Converged at iteration 28, L1 8.3771e-05, Linf 0.00473461, total time[s] 0.076806 +Converged at iteration 24, L1 9.43443e-05, Linf 0.00316325, total time[s] 0.067076 +Converged at iteration 25, L1 6.28286e-05, Linf 0.00362296, total time[s] 0.06521 +Converged at iteration 39, L1 9.01197e-05, Linf 0.00527875, total time[s] 0.100352 +Converged at iteration 36, L1 6.75849e-05, Linf 0.00374522, total time[s] 0.095745 +Converged at iteration 27, L1 6.23677e-05, Linf 0.00560831, total time[s] 0.073345 +Converged at iteration 30, L1 9.82642e-05, Linf 0.00609915, total time[s] 0.106018 +Converged at iteration 26, L1 9.19396e-05, Linf 0.00648235, total time[s] 0.066889 +Converged at iteration 22, L1 6.41428e-05, Linf 0.00424815, total time[s] 0.058499 +Converged at iteration 20, L1 6.68875e-05, Linf 0.00492034, total time[s] 0.054929 +Converged at iteration 22, L1 7.33526e-05, Linf 0.00687332, total time[s] 0.059916 +Converged at iteration 27, L1 5.96862e-05, Linf 0.00505733, total time[s] 0.079292 +Converged at iteration 25, L1 9.31351e-05, Linf 0.00479031, total time[s] 0.072388 +Converged at iteration 21, L1 5.89883e-05, Linf 0.00464474, total time[s] 0.066876 +Converged at iteration 17, L1 9.012e-05, Linf 0.00523015, total time[s] 0.048256 +Converged at iteration 31, L1 9.01744e-05, Linf 0.00297419, total time[s] 0.100099 +Converged at iteration 20, L1 6.59071e-05, Linf 0.00500555, total time[s] 0.068666 +Converged at iteration 23, L1 9.95181e-05, Linf 0.00591846, total time[s] 0.103306 +Converged at iteration 28, L1 8.74682e-05, Linf 0.00413346, total time[s] 0.14038 +Converged at iteration 24, L1 8.10717e-05, Linf 0.0060459, total time[s] 0.070672 +Converged at iteration 22, L1 8.67077e-05, Linf 0.00439846, total time[s] 0.069819 +Converged at iteration 23, L1 8.1346e-05, Linf 0.00584636, total time[s] 0.086721 +Converged at iteration 25, L1 8.78657e-05, Linf 0.00577713, total time[s] 0.096859 +Converged at iteration 28, L1 9.73883e-05, Linf 0.00589499, total time[s] 0.075992 +Converged at iteration 30, L1 9.17979e-05, Linf 0.00501505, total time[s] 0.08779 +Converged at iteration 29, L1 7.36081e-05, Linf 0.00308149, total time[s] 0.08086 +Converged at iteration 29, L1 9.15634e-05, Linf 0.00315736, total time[s] 0.085376 +Converged at iteration 31, L1 7.91152e-05, Linf 0.00313393, total time[s] 0.079254 +Converged at iteration 32, L1 7.85648e-05, Linf 0.00411479, total time[s] 0.081594 +Converged at iteration 33, L1 6.79176e-05, Linf 0.00514069, total time[s] 0.083757 +Converged at iteration 28, L1 8.37891e-05, Linf 0.00461445, total time[s] 0.071107 +Converged at iteration 24, L1 9.13025e-05, Linf 0.00306418, total time[s] 0.06483 +Converged at iteration 25, L1 7.07563e-05, Linf 0.00396983, total time[s] 0.06785 +Converged at iteration 39, L1 9.23545e-05, Linf 0.00524873, total time[s] 0.096679 +Converged at iteration 36, L1 6.78981e-05, Linf 0.00368887, total time[s] 0.092769 +Converged at iteration 27, L1 7.37023e-05, Linf 0.00584431, total time[s] 0.069434 +Converged at iteration 30, L1 9.8527e-05, Linf 0.00610028, total time[s] 0.076179 +Converged at iteration 26, L1 9.19225e-05, Linf 0.00640559, total time[s] 0.067319 +Converged at iteration 22, L1 6.38256e-05, Linf 0.00420512, total time[s] 0.062296 +Converged at iteration 20, L1 7.08929e-05, Linf 0.00498027, total time[s] 0.056022 +Converged at iteration 22, L1 8.2763e-05, Linf 0.00708825, total time[s] 0.077254 +Converged at iteration 27, L1 6.51596e-05, Linf 0.00517789, total time[s] 0.077988 +Converged at iteration 25, L1 9.61841e-05, Linf 0.00474331, total time[s] 0.076346 +Converged at iteration 21, L1 5.94327e-05, Linf 0.00462559, total time[s] 0.058291 +Converged at iteration 17, L1 9.35657e-05, Linf 0.00513241, total time[s] 0.048492 +Converged at iteration 31, L1 8.89315e-05, Linf 0.00294447, total time[s] 0.082438 +Converged at iteration 20, L1 6.77546e-05, Linf 0.00505482, total time[s] 0.054716 +Converged at iteration 24, L1 6.10006e-05, Linf 0.00526269, total time[s] 0.065006 +Converged at iteration 28, L1 9.31127e-05, Linf 0.00414824, total time[s] 0.0742 +Converged at iteration 24, L1 8.36866e-05, Linf 0.00601707, total time[s] 0.064589 +Converged at iteration 22, L1 8.76972e-05, Linf 0.00439069, total time[s] 0.060331 +Converged at iteration 23, L1 8.30017e-05, Linf 0.00354837, total time[s] 0.063034 +Converged at iteration 25, L1 8.96951e-05, Linf 0.00581673, total time[s] 0.067541 +Converged at iteration 28, L1 9.8586e-05, Linf 0.00595622, total time[s] 0.079244 +Converged at iteration 30, L1 9.53287e-05, Linf 0.00498644, total time[s] 0.083458 +Converged at iteration 29, L1 7.72215e-05, Linf 0.00312301, total time[s] 0.077462 +Converged at iteration 29, L1 8.99691e-05, Linf 0.00313188, total time[s] 0.077487 +Converged at iteration 31, L1 8.10549e-05, Linf 0.00326684, total time[s] 0.080704 +Converged at iteration 32, L1 8.90985e-05, Linf 0.00458986, total time[s] 0.082897 +Converged at iteration 33, L1 6.93071e-05, Linf 0.00513167, total time[s] 0.084823 +Converged at iteration 28, L1 8.41868e-05, Linf 0.00454696, total time[s] 0.073536 +Converged at iteration 24, L1 8.95084e-05, Linf 0.00301484, total time[s] 0.063712 +Converged at iteration 25, L1 7.52476e-05, Linf 0.00413122, total time[s] 0.066426 +Converged at iteration 39, L1 9.06472e-05, Linf 0.00526395, total time[s] 0.101714 +Converged at iteration 36, L1 6.76709e-05, Linf 0.00371625, total time[s] 0.094296 +Converged at iteration 27, L1 6.76802e-05, Linf 0.00575733, total time[s] 0.070259 +Converged at iteration 30, L1 9.77324e-05, Linf 0.00609984, total time[s] 0.078656 +Converged at iteration 26, L1 9.17848e-05, Linf 0.00644399, total time[s] 0.068168 +Converged at iteration 22, L1 6.36991e-05, Linf 0.00422793, total time[s] 0.058515 +Converged at iteration 20, L1 6.88871e-05, Linf 0.00495695, total time[s] 0.053833 +Converged at iteration 22, L1 7.78349e-05, Linf 0.00695012, total time[s] 0.05978 +Converged at iteration 27, L1 6.231e-05, Linf 0.00511846, total time[s] 0.075791 +Converged at iteration 25, L1 9.46396e-05, Linf 0.00476684, total time[s] 0.069948 +Converged at iteration 21, L1 5.91194e-05, Linf 0.00463687, total time[s] 0.062439 +Converged at iteration 17, L1 9.17724e-05, Linf 0.00519008, total time[s] 0.045826 +Converged at iteration 31, L1 8.96169e-05, Linf 0.00296033, total time[s] 0.09787 +Converged at iteration 20, L1 6.67889e-05, Linf 0.00503501, total time[s] 0.081919 +Converged at iteration 24, L1 6.02761e-05, Linf 0.00525881, total time[s] 0.080685 +Converged at iteration 28, L1 9.0297e-05, Linf 0.00414035, total time[s] 0.151557 +Converged at iteration 24, L1 8.23155e-05, Linf 0.00603247, total time[s] 0.096279 +Converged at iteration 22, L1 8.81155e-05, Linf 0.00453471, total time[s] 0.098776 +Converged at iteration 23, L1 8.18514e-05, Linf 0.00346023, total time[s] 0.112832 +Converged at iteration 25, L1 8.91258e-05, Linf 0.00579962, total time[s] 0.08702 +Converged at iteration 28, L1 9.79348e-05, Linf 0.00593883, total time[s] 0.092739 +Converged at iteration 30, L1 9.3506e-05, Linf 0.00500133, total time[s] 0.103122 +Converged at iteration 29, L1 7.52619e-05, Linf 0.0030968, total time[s] 0.09542 +Converged at iteration 29, L1 9.10749e-05, Linf 0.00314432, total time[s] 0.09251 +Converged at iteration 31, L1 8.08677e-05, Linf 0.00312877, total time[s] 0.095646 +Converged at iteration 32, L1 8.44588e-05, Linf 0.00436089, total time[s] 0.115933 +Converged at iteration 33, L1 6.85889e-05, Linf 0.00513527, total time[s] 0.138619 +Converged at iteration 28, L1 8.38341e-05, Linf 0.0045786, total time[s] 0.090604 +Converged at iteration 24, L1 9.0289e-05, Linf 0.0030395, total time[s] 0.078028 +Converged at iteration 25, L1 7.30116e-05, Linf 0.00406122, total time[s] 0.09739 +Converged at iteration 39, L1 9.2209e-05, Linf 0.00525386, total time[s] 0.120426 +Converged at iteration 36, L1 6.81687e-05, Linf 0.00370135, total time[s] 0.151546 +Converged at iteration 27, L1 7.08009e-05, Linf 0.00582932, total time[s] 0.093983 +Converged at iteration 30, L1 9.96812e-05, Linf 0.00610013, total time[s] 0.083805 +Converged at iteration 26, L1 9.25787e-05, Linf 0.00642484, total time[s] 0.071486 +Converged at iteration 22, L1 6.36176e-05, Linf 0.00421937, total time[s] 0.070752 +Converged at iteration 20, L1 6.9939e-05, Linf 0.00497481, total time[s] 0.068431 +Converged at iteration 22, L1 8.03018e-05, Linf 0.00709287, total time[s] 0.07405 +Converged at iteration 27, L1 6.42093e-05, Linf 0.00512248, total time[s] 0.09377 +Converged at iteration 25, L1 9.78546e-05, Linf 0.00978073, total time[s] 0.087929 +Converged at iteration 21, L1 5.93674e-05, Linf 0.0046315, total time[s] 0.069868 +Converged at iteration 17, L1 9.26535e-05, Linf 0.00515716, total time[s] 0.063984 +Converged at iteration 31, L1 8.93445e-05, Linf 0.00295158, total time[s] 0.082969 +Converged at iteration 20, L1 6.74226e-05, Linf 0.00513421, total time[s] 0.054047 +Converged at iteration 24, L1 6.06626e-05, Linf 0.00551894, total time[s] 0.06307 +Converged at iteration 28, L1 9.17417e-05, Linf 0.00414438, total time[s] 0.072292 +Converged at iteration 24, L1 8.29838e-05, Linf 0.00602601, total time[s] 0.062649 +Converged at iteration 22, L1 8.74421e-05, Linf 0.004384, total time[s] 0.058429 +Converged at iteration 23, L1 8.23018e-05, Linf 0.00356134, total time[s] 0.060632 +Converged at iteration 25, L1 8.92316e-05, Linf 0.00580917, total time[s] 0.0668 +Converged at iteration 28, L1 9.8282e-05, Linf 0.00588185, total time[s] 0.072809 +Converged at iteration 30, L1 9.44018e-05, Linf 0.00495794, total time[s] 0.083288 +Converged at iteration 29, L1 7.62201e-05, Linf 0.00309395, total time[s] 0.079279 +Converged at iteration 29, L1 9.06916e-05, Linf 0.00312416, total time[s] 0.199762 +Converged at iteration 31, L1 8.03561e-05, Linf 0.00323295, total time[s] 0.091032 +Converged at iteration 32, L1 8.61274e-05, Linf 0.00446954, total time[s] 0.088567 +Converged at iteration 33, L1 6.89368e-05, Linf 0.00508028, total time[s] 0.08478 +Converged at iteration 28, L1 8.39038e-05, Linf 0.00456305, total time[s] 0.072213 +Converged at iteration 24, L1 8.98979e-05, Linf 0.00305916, total time[s] 0.062572 +Converged at iteration 25, L1 7.40939e-05, Linf 0.0041019, total time[s] 0.066835 +Converged at iteration 39, L1 9.10545e-05, Linf 0.00525216, total time[s] 0.100943 +Converged at iteration 36, L1 6.77373e-05, Linf 0.00369481, total time[s] 0.10028 +Converged at iteration 27, L1 7.20849e-05, Linf 0.0058661, total time[s] 0.078123 +Converged at iteration 30, L1 9.81722e-05, Linf 0.0061002, total time[s] 0.078083 +Converged at iteration 26, L1 9.18203e-05, Linf 0.00641511, total time[s] 0.068033 +Converged at iteration 22, L1 6.34648e-05, Linf 0.00421411, total time[s] 0.060569 +Converged at iteration 20, L1 7.03993e-05, Linf 0.00495646, total time[s] 0.05609 +Converged at iteration 22, L1 8.15254e-05, Linf 0.00702521, total time[s] 0.065201 +Converged at iteration 27, L1 6.44952e-05, Linf 0.00516357, total time[s] 0.079423 +Converged at iteration 25, L1 9.60304e-05, Linf 0.0047492, total time[s] 0.080687 +Converged at iteration 21, L1 5.97782e-05, Linf 0.00462859, total time[s] 0.072096 +Converged at iteration 17, L1 9.31408e-05, Linf 0.00515132, total time[s] 0.065773 +Converged at iteration 31, L1 8.91149e-05, Linf 0.00294801, total time[s] 0.105529 +Converged at iteration 20, L1 6.75451e-05, Linf 0.00505023, total time[s] 0.070261 +Converged at iteration 24, L1 6.17728e-05, Linf 0.00554856, total time[s] 0.066726 +Converged at iteration 28, L1 9.24296e-05, Linf 0.00414566, total time[s] 0.084456 +Converged at iteration 24, L1 8.33251e-05, Linf 0.00602114, total time[s] 0.076116 +Converged at iteration 22, L1 8.75649e-05, Linf 0.00439148, total time[s] 0.066113 +Converged at iteration 23, L1 8.26576e-05, Linf 0.00352607, total time[s] 0.063052 +Converged at iteration 25, L1 8.96117e-05, Linf 0.00581188, total time[s] 0.071997 +Converged at iteration 28, L1 9.84335e-05, Linf 0.00594973, total time[s] 0.082478 +Converged at iteration 30, L1 9.48729e-05, Linf 0.00499049, total time[s] 0.088199 +Converged at iteration 29, L1 7.67197e-05, Linf 0.00312737, total time[s] 0.0757 +Converged at iteration 29, L1 9.01773e-05, Linf 0.00313493, total time[s] 0.077347 +Converged at iteration 31, L1 8.08134e-05, Linf 0.00325013, total time[s] 0.08193 +Converged at iteration 32, L1 8.77852e-05, Linf 0.00453154, total time[s] 0.087537 +Converged at iteration 33, L1 6.9128e-05, Linf 0.00514415, total time[s] 0.085165 +Converged at iteration 28, L1 8.43126e-05, Linf 0.00460738, total time[s] 0.0733 +Converged at iteration 24, L1 8.98097e-05, Linf 0.00302101, total time[s] 0.066666 +Converged at iteration 25, L1 7.47132e-05, Linf 0.00412208, total time[s] 0.067999 +Converged at iteration 39, L1 9.13488e-05, Linf 0.00525143, total time[s] 0.103447 +Converged at iteration 36, L1 6.8032e-05, Linf 0.00369816, total time[s] 0.097241 +Converged at iteration 27, L1 7.15639e-05, Linf 0.00584739, total time[s] 0.082076 +Converged at iteration 30, L1 9.88363e-05, Linf 0.00610015, total time[s] 0.077943 +Converged at iteration 26, L1 9.1953e-05, Linf 0.00649037, total time[s] 0.068754 +Converged at iteration 22, L1 6.36359e-05, Linf 0.00426944, total time[s] 0.059949 +Converged at iteration 20, L1 7.04283e-05, Linf 0.00497916, total time[s] 0.054799 +Converged at iteration 22, L1 8.09217e-05, Linf 0.00705814, total time[s] 0.058853 +Converged at iteration 27, L1 6.41593e-05, Linf 0.00515605, total time[s] 0.070756 +Converged at iteration 25, L1 9.62253e-05, Linf 0.00475214, total time[s] 0.06643 +Converged at iteration 21, L1 5.96117e-05, Linf 0.00463007, total time[s] 0.059167 +Converged at iteration 17, L1 9.28896e-05, Linf 0.00515741, total time[s] 0.055721 +Converged at iteration 31, L1 8.91729e-05, Linf 0.00294979, total time[s] 0.084703 +Converged at iteration 20, L1 6.73846e-05, Linf 0.00504755, total time[s] 0.056858 +Converged at iteration 24, L1 6.06627e-05, Linf 0.00493772, total time[s] 0.087204 +Converged at iteration 28, L1 9.20962e-05, Linf 0.00418289, total time[s] 0.075044 +Converged at iteration 24, L1 8.31718e-05, Linf 0.00603224, total time[s] 0.066593 +Converged at iteration 22, L1 8.74913e-05, Linf 0.00439171, total time[s] 0.062893 +Converged at iteration 23, L1 8.24514e-05, Linf 0.00351465, total time[s] 0.06345 +Converged at iteration 25, L1 8.93516e-05, Linf 0.00581103, total time[s] 0.068566 +Converged at iteration 28, L1 9.83598e-05, Linf 0.0059464, total time[s] 0.081256 +Converged at iteration 30, L1 9.4643e-05, Linf 0.00500009, total time[s] 0.080585 +Converged at iteration 29, L1 7.64691e-05, Linf 0.00313852, total time[s] 0.080241 +Converged at iteration 29, L1 9.02362e-05, Linf 0.00313645, total time[s] 0.077623 +Converged at iteration 31, L1 8.05018e-05, Linf 0.00324165, total time[s] 0.085035 +Converged at iteration 32, L1 8.68698e-05, Linf 0.00449799, total time[s] 0.086772 +Converged at iteration 33, L1 6.90204e-05, Linf 0.00508178, total time[s] 0.091792 +Converged at iteration 28, L1 8.39175e-05, Linf 0.00456157, total time[s] 0.07473 +Converged at iteration 24, L1 8.98122e-05, Linf 0.00302658, total time[s] 0.065532 +Converged at iteration 25, L1 7.43831e-05, Linf 0.00411196, total time[s] 0.068056 +Converged at iteration 40, L1 6.7149e-05, Linf 0.00367456, total time[s] 0.115786 +Converged at iteration 35, L1 7.62617e-05, Linf 0.00339555, total time[s] 0.109052 +Converged at iteration 30, L1 9.65693e-05, Linf 0.00430061, total time[s] 0.082909 +Converged at iteration 31, L1 6.19736e-05, Linf 0.00502563, total time[s] 0.087183 +Converged at iteration 27, L1 6.31423e-05, Linf 0.00499516, total time[s] 0.078134 +Converged at iteration 22, L1 8.59139e-05, Linf 0.00448849, total time[s] 0.079643 +Converged at iteration 20, L1 9.60782e-05, Linf 0.00397932, total time[s] 0.081244 +Converged at iteration 24, L1 8.84727e-05, Linf 0.00482861, total time[s] 0.094899 +Converged at iteration 28, L1 7.41257e-05, Linf 0.00445907, total time[s] 0.10814 +Converged at iteration 26, L1 8.15246e-05, Linf 0.00546965, total time[s] 0.120033 +Converged at iteration 22, L1 7.38683e-05, Linf 0.00508743, total time[s] 0.106948 +Converged at iteration 19, L1 6.6187e-05, Linf 0.00393203, total time[s] 0.080476 +Converged at iteration 30, L1 7.98779e-05, Linf 0.00329632, total time[s] 0.1141 +Converged at iteration 20, L1 8.44479e-05, Linf 0.00454691, total time[s] 0.063966 +Converged at iteration 24, L1 7.10844e-05, Linf 0.00463337, total time[s] 0.07225 +Converged at iteration 31, L1 8.97181e-05, Linf 0.00569027, total time[s] 0.084636 +Converged at iteration 27, L1 9.9242e-05, Linf 0.00569818, total time[s] 0.080029 +Converged at iteration 24, L1 8.7959e-05, Linf 0.00468865, total time[s] 0.068445 +Converged at iteration 23, L1 9.2459e-05, Linf 0.0041019, total time[s] 0.068217 +Converged at iteration 26, L1 7.27017e-05, Linf 0.00446111, total time[s] 0.076002 +Converged at iteration 29, L1 7.84532e-05, Linf 0.00478218, total time[s] 0.077943 +Converged at iteration 34, L1 7.09348e-05, Linf 0.00422705, total time[s] 0.08841 +Converged at iteration 30, L1 9.39707e-05, Linf 0.0044975, total time[s] 0.080963 +Converged at iteration 28, L1 9.49884e-05, Linf 0.0031098, total time[s] 0.076813 +Converged at iteration 32, L1 9.39326e-05, Linf 0.00374078, total time[s] 0.089959 +Converged at iteration 37, L1 7.34138e-05, Linf 0.003277, total time[s] 0.10511 +Converged at iteration 33, L1 8.45738e-05, Linf 0.0046451, total time[s] 0.094474 +Converged at iteration 28, L1 9.6548e-05, Linf 0.00430154, total time[s] 0.072187 +Converged at iteration 24, L1 8.82894e-05, Linf 0.00325072, total time[s] 0.067497 +Converged at iteration 26, L1 9.03678e-05, Linf 0.00382016, total time[s] 0.070556 +Converged at iteration 36, L1 6.58624e-05, Linf 0.0138195, total time[s] 0.092253 +Converged at iteration 35, L1 7.20796e-05, Linf 0.00604335, total time[s] 0.09024 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18697 +Converged at iteration 30, L1 6.63306e-05, Linf 0.0269319, total time[s] 0.08437 +Converged at iteration 24, L1 5.93582e-05, Linf 0.00623864, total time[s] 0.06458 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.17599 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.1838 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.17843 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18655 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18134 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.17502 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18566 +Converged at iteration 45, L1 5.17582e-05, Linf 0.00771279, total time[s] 0.116768 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.17734 +Converged at iteration 24, L1 4.78544e-05, Linf 0.0043988, total time[s] 0.066351 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.26643 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.46066 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.37817 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.21855 +Converged at iteration 25, L1 7.21645e-05, Linf 0.0236706, total time[s] 0.091554 +Converged at iteration 28, L1 6.74469e-05, Linf 0.0107483, total time[s] 0.100746 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18652 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.36576 +Converged at iteration 34, L1 5.33085e-05, Linf 0.00170591, total time[s] 0.107225 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.45776 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.32466 +Converged at iteration 32, L1 5.95714e-05, Linf 0.0157259, total time[s] 0.091097 +Converged at iteration 30, L1 9.69133e-05, Linf 0.00391054, total time[s] 0.077225 +Converged at iteration 27, L1 8.12468e-05, Linf 0.0124204, total time[s] 0.070465 +Converged at iteration 500, L1 nan, Linf 0, total time[s] 1.18651 +Converged at iteration 37, L1 3.75846e-05, Linf 0.0111401, total time[s] 0.111345 +Converged at iteration 36, L1 3.30709e-05, Linf 0.00934154, total time[s] 0.108101 +Converged at iteration 32, L1 4.5884e-05, Linf 0.0063843, total time[s] 0.089801 +Converged at iteration 30, L1 2.14845e-05, Linf 0.0117435, total time[s] 0.082095 +Converged at iteration 24, L1 5.25719e-05, Linf 0.00868257, total time[s] 0.063244 +Converged at iteration 23, L1 5.89518e-05, Linf 0.00444135, total time[s] 0.068664 +Converged at iteration 27, L1 3.59439e-05, Linf 0.0109175, total time[s] 0.095814 +Converged at iteration 27, L1 7.4443e-05, Linf 0.0169448, total time[s] 0.09606 +Converged at iteration 26, L1 4.61949e-05, Linf 0.00695382, total time[s] 0.116723 +Converged at iteration 26, L1 8.7198e-05, Linf 0.0136448, total time[s] 0.073885 +Converged at iteration 25, L1 9.55741e-05, Linf 0.012782, total time[s] 0.087627 +Converged at iteration 28, L1 9.00403e-05, Linf 0.00575797, total time[s] 0.089156 +Converged at iteration 34, L1 8.36017e-05, Linf 0.0363004, total time[s] 0.087327 +Converged at iteration 24, L1 8.32782e-05, Linf 0.00119595, total time[s] 0.065504 +Converged at iteration 22, L1 6.4208e-05, Linf 0.00452791, total time[s] 0.066168 +Converged at iteration 29, L1 9.64625e-05, Linf 0.0147692, total time[s] 0.07782 +Converged at iteration 31, L1 7.86352e-05, Linf 0.012414, total time[s] 0.102792 +Converged at iteration 30, L1 4.39081e-05, Linf 0.00729339, total time[s] 0.095529 +Converged at iteration 23, L1 6.44021e-05, Linf 0.00251281, total time[s] 0.081714 +Converged at iteration 22, L1 6.88206e-05, Linf 0.00309361, total time[s] 0.0855 +Converged at iteration 28, L1 5.66472e-05, Linf 0.00916378, total time[s] 0.101652 +Converged at iteration 30, L1 9.89778e-05, Linf 0.00442986, total time[s] 0.100551 +Converged at iteration 31, L1 9.94262e-05, Linf 0.0124759, total time[s] 0.084327 +Converged at iteration 32, L1 4.57584e-05, Linf 0.00285666, total time[s] 0.082422 +Converged at iteration 33, L1 6.01437e-05, Linf 0.0155608, total time[s] 0.084871 +Converged at iteration 33, L1 4.77366e-05, Linf 0.00601583, total time[s] 0.084215 +Converged at iteration 33, L1 3.18455e-05, Linf 0.013955, total time[s] 0.088035 +Converged at iteration 29, L1 5.88914e-05, Linf 0.0193376, total time[s] 0.080887 +Converged at iteration 26, L1 6.55048e-05, Linf 0.0112017, total time[s] 0.067463 +Converged at iteration 31, L1 4.5712e-05, Linf 0.0144892, total time[s] 0.078902 +Converged at iteration 38, L1 2.64428e-05, Linf 0.0101619, total time[s] 0.099811 +Converged at iteration 36, L1 9.11438e-05, Linf 0.037467, total time[s] 0.103556 +Converged at iteration 29, L1 3.99864e-05, Linf 0.00405595, total time[s] 0.076536 +Converged at iteration 30, L1 2.68006e-05, Linf 0.0154579, total time[s] 0.085659 +Converged at iteration 23, L1 8.18013e-05, Linf 0.00428839, total time[s] 0.067197 +Converged at iteration 40, L1 6.82066e-05, Linf 0.0036743, total time[s] 0.160075 +Converged at iteration 35, L1 7.62238e-05, Linf 0.00339739, total time[s] 0.139431 +Converged at iteration 30, L1 9.68132e-05, Linf 0.00432343, total time[s] 0.112206 +Converged at iteration 31, L1 6.202e-05, Linf 0.00502564, total time[s] 0.101167 +Converged at iteration 27, L1 6.26376e-05, Linf 0.00499524, total time[s] 0.095598 +Converged at iteration 22, L1 8.62706e-05, Linf 0.0045698, total time[s] 0.126054 +Converged at iteration 20, L1 9.61523e-05, Linf 0.00397894, total time[s] 0.109045 +Converged at iteration 24, L1 8.83829e-05, Linf 0.00482777, total time[s] 0.069831 +Converged at iteration 28, L1 7.38891e-05, Linf 0.00446942, total time[s] 0.085254 +Converged at iteration 26, L1 8.15582e-05, Linf 0.00547565, total time[s] 0.071496 +Converged at iteration 22, L1 7.39241e-05, Linf 0.00508726, total time[s] 0.066355 +Converged at iteration 19, L1 6.63475e-05, Linf 0.00393113, total time[s] 0.059021 +Converged at iteration 30, L1 7.98734e-05, Linf 0.00329634, total time[s] 0.085686 +Converged at iteration 20, L1 8.4432e-05, Linf 0.00455018, total time[s] 0.055419 +Converged at iteration 24, L1 7.20847e-05, Linf 0.00462919, total time[s] 0.063821 +Converged at iteration 31, L1 8.96474e-05, Linf 0.00569491, total time[s] 0.079085 +Converged at iteration 27, L1 9.91418e-05, Linf 0.00571927, total time[s] 0.069569 +Converged at iteration 24, L1 8.79691e-05, Linf 0.00465016, total time[s] 0.064184 +Converged at iteration 23, L1 9.2176e-05, Linf 0.0041019, total time[s] 0.061926 +Converged at iteration 26, L1 7.22107e-05, Linf 0.00446091, total time[s] 0.070014 +Converged at iteration 29, L1 7.81432e-05, Linf 0.00479567, total time[s] 0.075086 +Converged at iteration 34, L1 7.09283e-05, Linf 0.00422676, total time[s] 0.085758 +Converged at iteration 30, L1 9.39589e-05, Linf 0.0044262, total time[s] 0.07815 +Converged at iteration 28, L1 9.50373e-05, Linf 0.0031134, total time[s] 0.072693 +Converged at iteration 32, L1 9.4222e-05, Linf 0.00374124, total time[s] 0.08229 +Converged at iteration 37, L1 7.45091e-05, Linf 0.00327645, total time[s] 0.092578 +Converged at iteration 33, L1 8.45274e-05, Linf 0.00469124, total time[s] 0.084347 +Converged at iteration 28, L1 9.65501e-05, Linf 0.00430196, total time[s] 0.079801 +Converged at iteration 24, L1 8.82897e-05, Linf 0.00325071, total time[s] 0.066401 +Converged at iteration 26, L1 8.99835e-05, Linf 0.0038417, total time[s] 0.07088 +Converged at iteration 37, L1 8.56503e-05, Linf 0.0352341, total time[s] 0.094293 +Converged at iteration 36, L1 6.93687e-05, Linf 0.0285, total time[s] 0.090209 +Converged at iteration 29, L1 8.77978e-05, Linf 0.00985591, total time[s] 0.076306 +Converged at iteration 30, L1 3.51133e-05, Linf 0.0196343, total time[s] 0.078144 +Converged at iteration 23, L1 9.88876e-05, Linf 0.00529717, total time[s] 0.061696 +Converged at iteration 31, L1 9.49065e-05, Linf 0.00152169, total time[s] 0.0811 +Converged at iteration 24, L1 7.16374e-05, Linf 0.0353908, total time[s] 0.063317 +Converged at iteration 25, L1 7.78851e-05, Linf 0.0185296, total time[s] 0.065702 +Converged at iteration 24, L1 6.79386e-05, Linf 0.00631267, total time[s] 0.064559 +Converged at iteration 25, L1 8.45612e-05, Linf 0.0111289, total time[s] 0.067442 +Converged at iteration 24, L1 4.83467e-05, Linf 0.00536463, total time[s] 0.070794 +Converged at iteration 24, L1 8.36544e-05, Linf 0.0108398, total time[s] 0.065571 +Converged at iteration 34, L1 8.41353e-05, Linf 0.026445, total time[s] 0.088189 +Converged at iteration 21, L1 6.09412e-05, Linf 0.00552615, total time[s] 0.057135 +Converged at iteration 22, L1 7.67833e-05, Linf 0.00719876, total time[s] 0.059393 +Converged at iteration 28, L1 8.24428e-05, Linf 0.0097504, total time[s] 0.073096 +Converged at iteration 29, L1 8.90502e-05, Linf 0.00698751, total time[s] 0.075041 +Converged at iteration 27, L1 6.6325e-05, Linf 0.00924277, total time[s] 0.071231 +Converged at iteration 23, L1 6.17051e-05, Linf 0.00441748, total time[s] 0.061803 +Converged at iteration 23, L1 6.58476e-05, Linf 0.00433717, total time[s] 0.061273 +Converged at iteration 28, L1 6.87745e-05, Linf 0.0112921, total time[s] 0.073279 +Converged at iteration 30, L1 5.98983e-05, Linf 0.00696743, total time[s] 0.077015 +Converged at iteration 28, L1 7.52002e-05, Linf 0.0076019, total time[s] 0.072123 +Converged at iteration 31, L1 5.32821e-05, Linf 0.0148306, total time[s] 0.080351 +Converged at iteration 32, L1 7.09956e-05, Linf 0.0181465, total time[s] 0.082718 +Converged at iteration 32, L1 6.07716e-05, Linf 0.0085812, total time[s] 0.08298 +Converged at iteration 33, L1 4.27754e-05, Linf 0.017932, total time[s] 0.086133 +Converged at iteration 30, L1 6.13973e-05, Linf 0.00368453, total time[s] 0.078975 +Converged at iteration 25, L1 9.0164e-05, Linf 0.0116184, total time[s] 0.06589 +Converged at iteration 29, L1 5.36253e-05, Linf 0.00992759, total time[s] 0.075341 +Converged at iteration 38, L1 9.3321e-05, Linf 0.0318768, total time[s] 0.0968 +Converged at iteration 37, L1 5.20732e-05, Linf 0.0244862, total time[s] 0.161322 +Converged at iteration 27, L1 3.77858e-05, Linf 0.00549384, total time[s] 0.081209 +Converged at iteration 29, L1 4.43774e-05, Linf 0.0160517, total time[s] 0.075541 +Converged at iteration 22, L1 7.73263e-05, Linf 0.00425205, total time[s] 0.062119 +Converged at iteration 22, L1 6.30246e-05, Linf 0.00377465, total time[s] 0.061297 +Converged at iteration 22, L1 2.95445e-05, Linf 0.00779494, total time[s] 0.05942 +Converged at iteration 23, L1 5.47592e-05, Linf 0.0094256, total time[s] 0.064017 +Converged at iteration 23, L1 8.38395e-05, Linf 0.00423528, total time[s] 0.077011 +Converged at iteration 24, L1 8.82508e-05, Linf 0.00772531, total time[s] 0.09197 +Converged at iteration 22, L1 7.17738e-05, Linf 0.00601122, total time[s] 0.057829 +Converged at iteration 22, L1 5.74095e-05, Linf 0.00294919, total time[s] 0.062272 +Converged at iteration 34, L1 4.93823e-05, Linf 0.0125152, total time[s] 0.083529 +Converged at iteration 21, L1 5.88371e-05, Linf 0.00486957, total time[s] 0.054228 +Converged at iteration 23, L1 6.39018e-05, Linf 0.00466624, total time[s] 0.05947 +Converged at iteration 28, L1 8.98343e-05, Linf 0.00244129, total time[s] 0.071186 +Converged at iteration 28, L1 5.11405e-05, Linf 0.00486615, total time[s] 0.070627 +Converged at iteration 24, L1 9.55614e-05, Linf 0.00559775, total time[s] 0.061742 +Converged at iteration 24, L1 6.38928e-05, Linf 0.0045461, total time[s] 0.061386 +Converged at iteration 24, L1 8.45271e-05, Linf 0.00807809, total time[s] 0.062154 +Converged at iteration 28, L1 9.96619e-05, Linf 0.0108126, total time[s] 0.0703 +Converged at iteration 30, L1 7.3833e-05, Linf 0.00716168, total time[s] 0.075421 +Converged at iteration 28, L1 6.89899e-05, Linf 0.00235805, total time[s] 0.074428 +Converged at iteration 31, L1 5.26361e-05, Linf 0.0118331, total time[s] 0.104843 +Converged at iteration 31, L1 8.57667e-05, Linf 0.0101157, total time[s] 0.08979 +Converged at iteration 31, L1 4.97227e-05, Linf 0.00718627, total time[s] 0.079918 +Converged at iteration 34, L1 2.71196e-05, Linf 0.0166623, total time[s] 0.084907 +Converged at iteration 28, L1 5.74665e-05, Linf 0.00612209, total time[s] 0.071819 +Converged at iteration 25, L1 9.00425e-05, Linf 0.00589169, total time[s] 0.06511 +Converged at iteration 26, L1 9.88479e-05, Linf 0.00849063, total time[s] 0.067519 +Converged at iteration 38, L1 7.13802e-05, Linf 0.0105812, total time[s] 0.102472 +Converged at iteration 38, L1 5.10489e-05, Linf 0.00745563, total time[s] 0.111979 +Converged at iteration 33, L1 9.03074e-05, Linf 0.00122388, total time[s] 0.093202 +Converged at iteration 28, L1 8.38989e-05, Linf 0.00455761, total time[s] 0.075979 +Converged at iteration 32, L1 3.04913e-05, Linf 0.0130479, total time[s] 0.087359 +Converged at iteration 32, L1 2.24376e-05, Linf 0.0131115, total time[s] 0.086197 +Converged at iteration 28, L1 9.3675e-05, Linf 0.0062886, total time[s] 0.073366 +Converged at iteration 28, L1 7.14383e-05, Linf 0.00442333, total time[s] 0.073427 +Converged at iteration 29, L1 7.67752e-05, Linf 0.0179275, total time[s] 0.079994 +Converged at iteration 28, L1 7.76341e-05, Linf 0.00115993, total time[s] 0.074966 +Converged at iteration 31, L1 8.60154e-05, Linf 0.00303023, total time[s] 0.082899 +Converged at iteration 36, L1 9.63696e-05, Linf 0.00208228, total time[s] 0.091495 +Converged at iteration 34, L1 8.81738e-05, Linf 0.00609157, total time[s] 0.117718 +Converged at iteration 30, L1 8.96429e-05, Linf 0.00159767, total time[s] 0.079471 +Converged at iteration 24, L1 7.38745e-05, Linf 0.00365232, total time[s] 0.06517 +Converged at iteration 33, L1 8.28924e-05, Linf 0.0936521, total time[s] 0.11359 +Converged at iteration 32, L1 7.97141e-05, Linf 0.00146353, total time[s] 0.081683 +Converged at iteration 31, L1 8.47719e-05, Linf 0.00139944, total time[s] 0.078561 +Converged at iteration 32, L1 9.61163e-05, Linf 0.00168568, total time[s] 0.080919 +Converged at iteration 27, L1 7.58699e-05, Linf 0.00130321, total time[s] 0.070044 +Converged at iteration 33, L1 7.21689e-05, Linf 0.00268076, total time[s] 0.083933 +Converged at iteration 35, L1 8.91683e-05, Linf 0.00266805, total time[s] 0.088771 +Converged at iteration 35, L1 9.36501e-05, Linf 0.00163982, total time[s] 0.088493 +Converged at iteration 31, L1 7.89559e-05, Linf 0.00344271, total time[s] 0.079065 +Converged at iteration 34, L1 9.58974e-05, Linf 0.00140783, total time[s] 0.085834 +Converged at iteration 36, L1 8.69005e-05, Linf 0.00184294, total time[s] 0.09061 +Converged at iteration 39, L1 8.52561e-05, Linf 0.0245898, total time[s] 0.09756 +Converged at iteration 37, L1 3.73919e-05, Linf 0.0129522, total time[s] 0.095179 +Converged at iteration 30, L1 2.86968e-05, Linf 0.00340593, total time[s] 0.076812 +Converged at iteration 31, L1 6.75344e-05, Linf 0.00173803, total time[s] 0.078802 +Converged at iteration 35, L1 8.95007e-05, Linf 0.00471318, total time[s] 0.088422 +Converged at iteration 35, L1 5.71553e-05, Linf 0.0154306, total time[s] 0.090452 +Converged at iteration 31, L1 5.37843e-05, Linf 0.0160751, total time[s] 0.079082 +Converged at iteration 25, L1 7.44706e-05, Linf 0.00472778, total time[s] 0.065137 +Converged at iteration 27, L1 5.81009e-05, Linf 0.014184, total time[s] 0.070957 +Converged at iteration 28, L1 4.02541e-05, Linf 0.022391, total time[s] 0.072149 +Converged at iteration 26, L1 6.59986e-05, Linf 0.00304988, total time[s] 0.069535 +Converged at iteration 27, L1 5.11276e-05, Linf 0.0191244, total time[s] 0.069885 +Converged at iteration 27, L1 5.55536e-05, Linf 0.0281219, total time[s] 0.069184 +Converged at iteration 26, L1 8.90777e-05, Linf 0.00355754, total time[s] 0.072179 +Converged at iteration 30, L1 8.08021e-05, Linf 0.0053751, total time[s] 0.087003 +Converged at iteration 30, L1 7.93556e-05, Linf 0.00112568, total time[s] 0.07937 +Converged at iteration 32, L1 4.63122e-05, Linf 0.00523687, total time[s] 0.08213 +Converged at iteration 25, L1 8.23053e-05, Linf 0.00249614, total time[s] 0.06672 +Converged at iteration 22, L1 7.44798e-05, Linf 0.0131016, total time[s] 0.05984 +Converged at iteration 27, L1 6.86452e-05, Linf 0.0187335, total time[s] 0.072459 +Converged at iteration 30, L1 6.13456e-05, Linf 0.0151017, total time[s] 0.076143 +Converged at iteration 29, L1 8.15936e-05, Linf 0.0116925, total time[s] 0.074915 +Converged at iteration 26, L1 7.56575e-05, Linf 0.00393252, total time[s] 0.066847 +Converged at iteration 26, L1 5.69509e-05, Linf 0.00460568, total time[s] 0.069237 +Converged at iteration 27, L1 7.30554e-05, Linf 0.00610575, total time[s] 0.069223 +Converged at iteration 31, L1 5.64065e-05, Linf 0.00769639, total time[s] 0.084693 +Converged at iteration 32, L1 5.63279e-05, Linf 0.00313744, total time[s] 0.09044 +Converged at iteration 29, L1 5.75587e-05, Linf 0.00521907, total time[s] 0.086011 +Converged at iteration 31, L1 5.7138e-05, Linf 0.00999591, total time[s] 0.105341 +Converged at iteration 32, L1 9.1182e-05, Linf 0.0226981, total time[s] 0.088828 +Converged at iteration 36, L1 3.37463e-05, Linf 0.0157778, total time[s] 0.095018 +Converged at iteration 33, L1 4.74114e-05, Linf 0.0170556, total time[s] 0.096124 +Converged at iteration 26, L1 4.10855e-05, Linf 0.00518301, total time[s] 0.070018 +Converged at iteration 29, L1 7.71942e-05, Linf 0.0147054, total time[s] 0.07583 +Converged at iteration 35, L1 7.06959e-05, Linf 0.0199076, total time[s] 0.090741 +Converged at iteration 35, L1 7.44929e-05, Linf 0.0171469, total time[s] 0.131631 +Converged at iteration 30, L1 3.76883e-05, Linf 0.0146212, total time[s] 0.103785 +Converged at iteration 26, L1 7.63934e-05, Linf 0.0068561, total time[s] 0.068568 +Converged at iteration 22, L1 7.85889e-05, Linf 0.00380487, total time[s] 0.057988 +Converged at iteration 19, L1 7.19256e-05, Linf 0.00386301, total time[s] 0.052581 +Converged at iteration 28, L1 8.581e-05, Linf 0.00147545, total time[s] 0.076056 +Converged at iteration 26, L1 4.53452e-05, Linf 0.0191979, total time[s] 0.068397 +Converged at iteration 25, L1 9.79155e-05, Linf 0.033086, total time[s] 0.067266 +Converged at iteration 23, L1 7.89139e-05, Linf 0.00499918, total time[s] 0.0637 +Converged at iteration 24, L1 8.66112e-05, Linf 0.00202005, total time[s] 0.066119 +Converged at iteration 26, L1 8.74069e-05, Linf 0.00113831, total time[s] 0.072489 +Converged at iteration 31, L1 9.56129e-05, Linf 0.00781127, total time[s] 0.088962 +Converged at iteration 19, L1 8.747e-05, Linf 0.00600373, total time[s] 0.06754 +Converged at iteration 22, L1 7.82401e-05, Linf 0.00759563, total time[s] 0.09038 +Converged at iteration 26, L1 6.09779e-05, Linf 0.00121113, total time[s] 0.095089 +Converged at iteration 30, L1 7.69803e-05, Linf 0.00466531, total time[s] 0.096702 +Converged at iteration 28, L1 6.97361e-05, Linf 0.0173487, total time[s] 0.104768 +Converged at iteration 22, L1 9.25218e-05, Linf 0.00451573, total time[s] 0.085152 +Converged at iteration 25, L1 8.78802e-05, Linf 0.00556925, total time[s] 0.087318 +Converged at iteration 26, L1 9.77085e-05, Linf 0.00728617, total time[s] 0.090185 +Converged at iteration 28, L1 5.43523e-05, Linf 0.00521141, total time[s] 0.097269 +Converged at iteration 30, L1 4.69799e-05, Linf 0.00482448, total time[s] 0.113944 +Converged at iteration 29, L1 5.27669e-05, Linf 0.0132415, total time[s] 0.10338 +Converged at iteration 29, L1 5.87766e-05, Linf 0.0046225, total time[s] 0.09567 +Converged at iteration 29, L1 6.08861e-05, Linf 0.00869946, total time[s] 0.095955 +Converged at iteration 34, L1 3.54644e-05, Linf 0.0142281, total time[s] 0.092699 +Converged at iteration 23, L1 9.00303e-05, Linf 0.00224553, total time[s] 0.063786 +Converged at iteration 24, L1 7.26522e-05, Linf 0.00419534, total time[s] 0.065239 +Converged at iteration 28, L1 6.29181e-05, Linf 0.00792519, total time[s] 0.072976 +Converged at iteration 38, L1 2.49745e-05, Linf 0.0138927, total time[s] 0.117119 +Converged at iteration 36, L1 3.28081e-05, Linf 0.0170286, total time[s] 0.117397 +Converged at iteration 28, L1 7.58696e-05, Linf 0.0193298, total time[s] 0.080877 +Converged at iteration 28, L1 5.71163e-05, Linf 0.00893903, total time[s] 0.07848 +Converged at iteration 22, L1 9.56839e-05, Linf 0.00508775, total time[s] 0.067826 +Converged at iteration 21, L1 4.13262e-05, Linf 0.00533455, total time[s] 0.092232 +Converged at iteration 23, L1 8.22917e-05, Linf 0.0106782, total time[s] 0.090477 +Converged at iteration 25, L1 2.36844e-05, Linf 0.00739431, total time[s] 0.091242 +Converged at iteration 24, L1 6.3495e-05, Linf 0.00790639, total time[s] 0.094233 +Converged at iteration 23, L1 9.5252e-05, Linf 0.00722689, total time[s] 0.070827 +Converged at iteration 21, L1 9.15192e-05, Linf 0.00611735, total time[s] 0.069267 +Converged at iteration 24, L1 8.72662e-05, Linf 0.0201986, total time[s] 0.079493 +Converged at iteration 32, L1 2.68716e-05, Linf 0.00658174, total time[s] 0.084339 +Converged at iteration 20, L1 8.21146e-05, Linf 0.00817047, total time[s] 0.056145 +Converged at iteration 23, L1 5.9512e-05, Linf 0.00641187, total time[s] 0.061873 +Converged at iteration 25, L1 9.58855e-05, Linf 0.00416515, total time[s] 0.081699 +Converged at iteration 27, L1 7.94355e-05, Linf 0.0109341, total time[s] 0.088959 +Converged at iteration 26, L1 8.86365e-05, Linf 0.0130543, total time[s] 0.072792 +Converged at iteration 23, L1 7.58405e-05, Linf 0.00604032, total time[s] 0.06149 +Converged at iteration 25, L1 7.12663e-05, Linf 0.00659572, total time[s] 0.066517 +Converged at iteration 27, L1 9.92965e-05, Linf 0.00587536, total time[s] 0.071652 +Converged at iteration 28, L1 9.54691e-05, Linf 0.00526406, total time[s] 0.074063 +Converged at iteration 27, L1 6.59826e-05, Linf 0.00453492, total time[s] 0.071483 +Converged at iteration 30, L1 4.85573e-05, Linf 0.0145014, total time[s] 0.080036 +Converged at iteration 29, L1 8.7338e-05, Linf 0.00555254, total time[s] 0.076735 +Converged at iteration 29, L1 4.29163e-05, Linf 0.0044174, total time[s] 0.076291 +Converged at iteration 34, L1 2.5907e-05, Linf 0.0151788, total time[s] 0.087516 +Converged at iteration 24, L1 6.52494e-05, Linf 0.00257823, total time[s] 0.066425 +Converged at iteration 24, L1 6.00447e-05, Linf 0.00424132, total time[s] 0.065756 +Converged at iteration 26, L1 5.5969e-05, Linf 0.0069364, total time[s] 0.069311 +Converged at iteration 36, L1 8.12533e-05, Linf 0.0235204, total time[s] 0.095597 +Converged at iteration 35, L1 7.62923e-05, Linf 0.0217144, total time[s] 0.098213 +Converged at iteration 29, L1 5.70013e-05, Linf 0.0208807, total time[s] 0.077247 +Converged at iteration 27, L1 6.70112e-05, Linf 0.00738285, total time[s] 0.072384 +Converged at iteration 22, L1 7.85566e-05, Linf 0.00416806, total time[s] 0.060726 +Converged at iteration 20, L1 5.27569e-05, Linf 0.0050332, total time[s] 0.056158 +Converged at iteration 25, L1 9.19637e-05, Linf 0.00132118, total time[s] 0.069144 +Converged at iteration 25, L1 9.37359e-05, Linf 0.0454114, total time[s] 0.067428 +Converged at iteration 25, L1 3.25398e-05, Linf 0.00949534, total time[s] 0.069869 +Converged at iteration 23, L1 7.57391e-05, Linf 0.00585057, total time[s] 0.06205 +Converged at iteration 22, L1 9.2318e-05, Linf 0.0137151, total time[s] 0.059974 +Converged at iteration 25, L1 7.82642e-05, Linf 0.0172081, total time[s] 0.066517 +Converged at iteration 32, L1 2.36978e-05, Linf 0.00371453, total time[s] 0.083236 +Converged at iteration 20, L1 5.58186e-05, Linf 0.00426456, total time[s] 0.05444 +Converged at iteration 23, L1 6.3774e-05, Linf 0.00435783, total time[s] 0.061909 +Converged at iteration 25, L1 8.18323e-05, Linf 0.00416141, total time[s] 0.066695 +Converged at iteration 29, L1 6.73496e-05, Linf 0.00418127, total time[s] 0.075366 +Converged at iteration 27, L1 9.85428e-05, Linf 0.0182026, total time[s] 0.071008 +Converged at iteration 23, L1 6.25351e-05, Linf 0.00377566, total time[s] 0.061221 +Converged at iteration 25, L1 7.88425e-05, Linf 0.00492904, total time[s] 0.066312 +Converged at iteration 27, L1 7.68608e-05, Linf 0.0041596, total time[s] 0.071409 +Converged at iteration 28, L1 7.3817e-05, Linf 0.00299878, total time[s] 0.076549 +Converged at iteration 28, L1 9.90125e-05, Linf 0.0123333, total time[s] 0.073437 +Converged at iteration 29, L1 7.61076e-05, Linf 0.0141665, total time[s] 0.078254 +Converged at iteration 29, L1 6.2084e-05, Linf 0.00338679, total time[s] 0.075598 +Converged at iteration 27, L1 4.67399e-05, Linf 0.00399412, total time[s] 0.073515 +Converged at iteration 33, L1 7.8291e-05, Linf 0.0219972, total time[s] 0.105037 +Converged at iteration 23, L1 9.44694e-05, Linf 0.00310665, total time[s] 0.070188 +Converged at iteration 24, L1 5.35427e-05, Linf 0.00388568, total time[s] 0.067443 +Converged at iteration 27, L1 9.41429e-05, Linf 0.0139931, total time[s] 0.074001 +Converged at iteration 37, L1 4.33333e-05, Linf 0.0184134, total time[s] 0.092545 +Converged at iteration 35, L1 9.73517e-05, Linf 0.0231434, total time[s] 0.089216 +Converged at iteration 29, L1 3.39713e-05, Linf 0.00725084, total time[s] 0.075415 +Converged at iteration 27, L1 8.67129e-05, Linf 0.00909122, total time[s] 0.069063 +Converged at iteration 22, L1 8.36446e-05, Linf 0.00457585, total time[s] 0.057436 +Converged at iteration 20, L1 7.00542e-05, Linf 0.00752066, total time[s] 0.052975 +Converged at iteration 24, L1 9.13517e-05, Linf 0.0155252, total time[s] 0.067123 +Converged at iteration 25, L1 4.51346e-05, Linf 0.0181182, total time[s] 0.064028 +Converged at iteration 24, L1 7.90383e-05, Linf 0.0132385, total time[s] 0.06572 +Converged at iteration 23, L1 8.04262e-05, Linf 0.00645759, total time[s] 0.060687 +Converged at iteration 22, L1 5.26094e-05, Linf 0.00416335, total time[s] 0.061118 +Converged at iteration 24, L1 7.8316e-05, Linf 0.00111454, total time[s] 0.062815 +Converged at iteration 32, L1 2.3003e-05, Linf 0.00447286, total time[s] 0.08245 +Converged at iteration 20, L1 7.10451e-05, Linf 0.00944303, total time[s] 0.052689 +Converged at iteration 23, L1 6.09238e-05, Linf 0.00974395, total time[s] 0.059921 +Converged at iteration 25, L1 8.80778e-05, Linf 0.00318921, total time[s] 0.064353 +Converged at iteration 28, L1 6.64508e-05, Linf 0.00833588, total time[s] 0.076489 +Converged at iteration 27, L1 6.16366e-05, Linf 0.00888128, total time[s] 0.084736 +Converged at iteration 23, L1 6.61751e-05, Linf 0.00686476, total time[s] 0.067181 +Converged at iteration 25, L1 6.77335e-05, Linf 0.0102766, total time[s] 0.065167 +Converged at iteration 27, L1 8.22896e-05, Linf 0.00563342, total time[s] 0.069372 +Converged at iteration 28, L1 8.10222e-05, Linf 0.00401884, total time[s] 0.076841 +Converged at iteration 28, L1 5.26955e-05, Linf 0.0042304, total time[s] 0.077002 +Converged at iteration 29, L1 9.48803e-05, Linf 0.0184886, total time[s] 0.074321 +Converged at iteration 29, L1 6.02083e-05, Linf 0.00374814, total time[s] 0.073116 +Converged at iteration 27, L1 9.96538e-05, Linf 0.00283406, total time[s] 0.068676 +Converged at iteration 33, L1 7.97009e-05, Linf 0.0238083, total time[s] 0.086821 +Converged at iteration 23, L1 9.84908e-05, Linf 0.00329636, total time[s] 0.074197 +Converged at iteration 24, L1 5.36619e-05, Linf 0.00397888, total time[s] 0.070952 +Converged at iteration 27, L1 4.50064e-05, Linf 0.00383114, total time[s] 0.093103 +Converged at iteration 37, L1 2.71882e-05, Linf 0.0139717, total time[s] 0.109665 +Converged at iteration 35, L1 8.64774e-05, Linf 0.0230375, total time[s] 0.13209 +Converged at iteration 29, L1 5.20116e-05, Linf 0.0128501, total time[s] 0.080264 +Converged at iteration 27, L1 6.95237e-05, Linf 0.00837346, total time[s] 0.073438 +Converged at iteration 22, L1 7.97893e-05, Linf 0.00435133, total time[s] 0.062169 +Converged at iteration 20, L1 6.8544e-05, Linf 0.00610965, total time[s] 0.069843 +Converged at iteration 25, L1 9.15501e-05, Linf 0.00208178, total time[s] 0.072878 +Converged at iteration 25, L1 6.47861e-05, Linf 0.0382092, total time[s] 0.075019 +Converged at iteration 24, L1 9.4109e-05, Linf 0.0170059, total time[s] 0.074073 +Converged at iteration 23, L1 7.6704e-05, Linf 0.00612787, total time[s] 0.086539 +Converged at iteration 22, L1 6.85476e-05, Linf 0.0083007, total time[s] 0.065725 +Converged at iteration 24, L1 8.78627e-05, Linf 0.0010724, total time[s] 0.073224 +Converged at iteration 32, L1 2.31632e-05, Linf 0.0040079, total time[s] 0.086559 +Converged at iteration 20, L1 6.19721e-05, Linf 0.00660779, total time[s] 0.058933 +Converged at iteration 23, L1 6.1535e-05, Linf 0.00443137, total time[s] 0.060803 +Converged at iteration 25, L1 8.28063e-05, Linf 0.00383788, total time[s] 0.065283 +Converged at iteration 28, L1 8.63335e-05, Linf 0.0125435, total time[s] 0.07241 +Converged at iteration 27, L1 7.70751e-05, Linf 0.011159, total time[s] 0.070457 +Converged at iteration 23, L1 6.52167e-05, Linf 0.0082585, total time[s] 0.060277 +Converged at iteration 25, L1 7.54369e-05, Linf 0.00907328, total time[s] 0.065271 +Converged at iteration 27, L1 7.68428e-05, Linf 0.00564876, total time[s] 0.069782 +Converged at iteration 28, L1 7.7717e-05, Linf 0.00333599, total time[s] 0.072346 +Converged at iteration 28, L1 7.63569e-05, Linf 0.0103222, total time[s] 0.072477 +Converged at iteration 40, L1 6.71416e-05, Linf 0.00367458, total time[s] 0.122132 +Converged at iteration 35, L1 7.60923e-05, Linf 0.00339718, total time[s] 0.112117 +Converged at iteration 30, L1 9.63136e-05, Linf 0.00432574, total time[s] 0.1169 +Converged at iteration 31, L1 6.2015e-05, Linf 0.00502563, total time[s] 0.108827 +Converged at iteration 27, L1 6.25893e-05, Linf 0.00499545, total time[s] 0.083315 +Converged at iteration 22, L1 8.59612e-05, Linf 0.00448813, total time[s] 0.075242 +Converged at iteration 20, L1 9.61104e-05, Linf 0.00397859, total time[s] 0.066009 +Converged at iteration 24, L1 8.84117e-05, Linf 0.00482929, total time[s] 0.068109 +Converged at iteration 28, L1 7.40968e-05, Linf 0.00445915, total time[s] 0.085425 +Converged at iteration 26, L1 8.15123e-05, Linf 0.00545361, total time[s] 0.070625 +Converged at iteration 22, L1 7.41305e-05, Linf 0.0050865, total time[s] 0.067688 +Converged at iteration 19, L1 6.63375e-05, Linf 0.00393102, total time[s] 0.061156 +Converged at iteration 30, L1 7.99771e-05, Linf 0.00329632, total time[s] 0.085482 +Converged at iteration 20, L1 8.44276e-05, Linf 0.00455085, total time[s] 0.060483 +Converged at iteration 24, L1 7.16136e-05, Linf 0.00463401, total time[s] 0.09971 +Converged at iteration 31, L1 9.08101e-05, Linf 0.00570013, total time[s] 0.087747 +Converged at iteration 27, L1 9.91999e-05, Linf 0.00570171, total time[s] 0.083733 +Converged at iteration 24, L1 8.77345e-05, Linf 0.00457035, total time[s] 0.080683 +Converged at iteration 23, L1 9.21809e-05, Linf 0.00410191, total time[s] 0.075092 +Converged at iteration 26, L1 7.22006e-05, Linf 0.00446041, total time[s] 0.071292 +Converged at iteration 29, L1 7.81332e-05, Linf 0.00480657, total time[s] 0.098399 +Converged at iteration 34, L1 7.09368e-05, Linf 0.00422624, total time[s] 0.105649 +Converged at iteration 30, L1 9.39303e-05, Linf 0.00432963, total time[s] 0.100537 +Converged at iteration 28, L1 9.49897e-05, Linf 0.00312885, total time[s] 0.08693 +Converged at iteration 32, L1 9.44123e-05, Linf 0.00374082, total time[s] 0.135188 +Converged at iteration 37, L1 7.40362e-05, Linf 0.00327892, total time[s] 0.160433 +Converged at iteration 33, L1 8.4539e-05, Linf 0.00469143, total time[s] 0.111715 +Converged at iteration 28, L1 9.74335e-05, Linf 0.00430357, total time[s] 0.114798 +Converged at iteration 24, L1 8.82969e-05, Linf 0.00322288, total time[s] 0.103143 +Converged at iteration 26, L1 8.98101e-05, Linf 0.00386257, total time[s] 0.121034 +Converged at iteration 40, L1 6.64029e-05, Linf 0.00393595, total time[s] 0.175369 +Converged at iteration 35, L1 8.66354e-05, Linf 0.00360678, total time[s] 0.182102 +Converged at iteration 30, L1 9.189e-05, Linf 0.00410966, total time[s] 0.188217 +Converged at iteration 31, L1 6.17368e-05, Linf 0.00504684, total time[s] 0.094321 +Converged at iteration 26, L1 9.84323e-05, Linf 0.00583435, total time[s] 0.088918 +Converged at iteration 22, L1 7.16982e-05, Linf 0.00418085, total time[s] 0.074764 +Converged at iteration 21, L1 6.40563e-05, Linf 0.00348501, total time[s] 0.060867 +Converged at iteration 24, L1 8.95173e-05, Linf 0.0049503, total time[s] 0.087842 +Converged at iteration 28, L1 7.33206e-05, Linf 0.00442601, total time[s] 0.08657 +Converged at iteration 26, L1 8.01682e-05, Linf 0.00534731, total time[s] 0.121269 +Converged at iteration 22, L1 7.01833e-05, Linf 0.00441516, total time[s] 0.099494 +Converged at iteration 19, L1 5.49598e-05, Linf 0.00332054, total time[s] 0.066531 +Converged at iteration 30, L1 9.51789e-05, Linf 0.00330744, total time[s] 0.116381 +Converged at iteration 20, L1 8.42492e-05, Linf 0.00472692, total time[s] 0.066812 +Converged at iteration 24, L1 7.12272e-05, Linf 0.00475227, total time[s] 0.07294 +Converged at iteration 31, L1 9.43432e-05, Linf 0.00482234, total time[s] 0.152086 +Converged at iteration 27, L1 9.41095e-05, Linf 0.00468394, total time[s] 0.095704 +Converged at iteration 24, L1 8.62421e-05, Linf 0.00428072, total time[s] 0.092593 +Converged at iteration 23, L1 9.3546e-05, Linf 0.00594145, total time[s] 0.084875 +Converged at iteration 26, L1 7.13032e-05, Linf 0.00465354, total time[s] 0.086184 +Converged at iteration 29, L1 7.524e-05, Linf 0.00488616, total time[s] 0.175711 +Converged at iteration 34, L1 8.31213e-05, Linf 0.00407106, total time[s] 0.205918 +Converged at iteration 31, L1 7.17527e-05, Linf 0.00355133, total time[s] 0.130503 +Converged at iteration 29, L1 7.02872e-05, Linf 0.00270995, total time[s] 0.105515 +Converged at iteration 32, L1 8.21645e-05, Linf 0.00354569, total time[s] 0.156942 +Converged at iteration 36, L1 8.74169e-05, Linf 0.00357556, total time[s] 0.2108 +Converged at iteration 33, L1 8.35511e-05, Linf 0.00490232, total time[s] 0.142952 +Converged at iteration 28, L1 9.17877e-05, Linf 0.00413123, total time[s] 0.11651 +Converged at iteration 24, L1 8.02648e-05, Linf 0.00290884, total time[s] 0.081533 +Converged at iteration 26, L1 8.4069e-05, Linf 0.00392477, total time[s] 0.102253 +Converged at iteration 40, L1 6.70626e-05, Linf 0.0038046, total time[s] 0.110141 +Converged at iteration 35, L1 8.15181e-05, Linf 0.00349837, total time[s] 0.093164 +Converged at iteration 30, L1 9.67079e-05, Linf 0.00421274, total time[s] 0.149079 +Converged at iteration 31, L1 6.28037e-05, Linf 0.00503605, total time[s] 0.104789 +Converged at iteration 27, L1 6.05015e-05, Linf 0.0049048, total time[s] 0.079113 +Converged at iteration 22, L1 7.85894e-05, Linf 0.00433678, total time[s] 0.060339 +Converged at iteration 20, L1 9.9835e-05, Linf 0.00419253, total time[s] 0.059255 +Converged at iteration 24, L1 9.06838e-05, Linf 0.00487638, total time[s] 0.083416 +Converged at iteration 28, L1 7.42416e-05, Linf 0.00443735, total time[s] 0.085867 +Converged at iteration 26, L1 8.05111e-05, Linf 0.00551, total time[s] 0.093566 +Converged at iteration 22, L1 7.24491e-05, Linf 0.00489343, total time[s] 0.082186 +Converged at iteration 19, L1 6.01658e-05, Linf 0.00361127, total time[s] 0.053062 +Converged at iteration 30, L1 8.68297e-05, Linf 0.00330214, total time[s] 0.092753 +Converged at iteration 20, L1 8.51109e-05, Linf 0.00463484, total time[s] 0.081795 +Converged at iteration 24, L1 7.17614e-05, Linf 0.00466753, total time[s] 0.087082 +Converged at iteration 31, L1 9.29212e-05, Linf 0.00535735, total time[s] 0.085927 +Converged at iteration 27, L1 9.92379e-05, Linf 0.00548532, total time[s] 0.096827 +Converged at iteration 24, L1 8.7094e-05, Linf 0.0045473, total time[s] 0.071456 +Converged at iteration 23, L1 9.25837e-05, Linf 0.00419767, total time[s] 0.085474 +Converged at iteration 26, L1 7.19731e-05, Linf 0.004548, total time[s] 0.0764 +Converged at iteration 29, L1 7.68316e-05, Linf 0.00476967, total time[s] 0.117431 +Converged at iteration 34, L1 7.75555e-05, Linf 0.00432664, total time[s] 0.101718 +Converged at iteration 30, L1 9.92069e-05, Linf 0.00439923, total time[s] 0.092573 +Converged at iteration 28, L1 9.77335e-05, Linf 0.00321314, total time[s] 0.079663 +Converged at iteration 32, L1 8.68645e-05, Linf 0.00364207, total time[s] 0.091355 +Converged at iteration 36, L1 9.73075e-05, Linf 0.00372454, total time[s] 0.114841 +Converged at iteration 33, L1 8.4025e-05, Linf 0.00476966, total time[s] 0.107276 +Converged at iteration 28, L1 9.39586e-05, Linf 0.00421174, total time[s] 0.125248 +Converged at iteration 24, L1 8.28528e-05, Linf 0.00308024, total time[s] 0.076389 +Converged at iteration 26, L1 8.75507e-05, Linf 0.00388609, total time[s] 0.086368 +Converged at iteration 40, L1 6.62816e-05, Linf 0.00394688, total time[s] 0.11108 +Converged at iteration 35, L1 8.71444e-05, Linf 0.00361815, total time[s] 0.100293 +Converged at iteration 30, L1 9.10475e-05, Linf 0.0041953, total time[s] 0.099986 +Converged at iteration 31, L1 6.19661e-05, Linf 0.00504743, total time[s] 0.115801 +Converged at iteration 26, L1 9.80029e-05, Linf 0.00577238, total time[s] 0.069899 +Converged at iteration 22, L1 7.09509e-05, Linf 0.00416643, total time[s] 0.064413 +Converged at iteration 21, L1 6.44194e-05, Linf 0.00350894, total time[s] 0.072265 +Converged at iteration 24, L1 8.97068e-05, Linf 0.0049746, total time[s] 0.0714 +Converged at iteration 28, L1 7.31431e-05, Linf 0.00442805, total time[s] 0.095927 +Converged at iteration 26, L1 8.06271e-05, Linf 0.00533308, total time[s] 0.097426 +Converged at iteration 22, L1 6.98341e-05, Linf 0.00434048, total time[s] 0.059644 +Converged at iteration 19, L1 5.4317e-05, Linf 0.00326998, total time[s] 0.065455 +Converged at iteration 30, L1 9.61644e-05, Linf 0.00330729, total time[s] 0.122986 +Converged at iteration 20, L1 8.45154e-05, Linf 0.00466718, total time[s] 0.05996 +Converged at iteration 24, L1 7.11733e-05, Linf 0.00475909, total time[s] 0.092427 +Converged at iteration 31, L1 9.58535e-05, Linf 0.00473539, total time[s] 0.107007 +Converged at iteration 27, L1 9.32172e-05, Linf 0.00457588, total time[s] 0.088859 +Converged at iteration 24, L1 8.51429e-05, Linf 0.00424088, total time[s] 0.075873 +Converged at iteration 23, L1 9.2554e-05, Linf 0.00433524, total time[s] 0.066561 +Converged at iteration 26, L1 7.12787e-05, Linf 0.00466734, total time[s] 0.080428 +Converged at iteration 29, L1 7.51112e-05, Linf 0.00480851, total time[s] 0.090966 +Converged at iteration 34, L1 8.20888e-05, Linf 0.00399449, total time[s] 0.099335 +Converged at iteration 31, L1 7.24642e-05, Linf 0.00354547, total time[s] 0.114215 +Converged at iteration 29, L1 7.06499e-05, Linf 0.00273244, total time[s] 0.106661 +Converged at iteration 32, L1 8.16259e-05, Linf 0.00353298, total time[s] 0.092651 +Converged at iteration 36, L1 8.57113e-05, Linf 0.0035563, total time[s] 0.132608 +Converged at iteration 33, L1 8.30865e-05, Linf 0.00485527, total time[s] 0.090892 +Converged at iteration 28, L1 9.0705e-05, Linf 0.00412339, total time[s] 0.077375 +Converged at iteration 24, L1 8.00274e-05, Linf 0.00289007, total time[s] 0.066828 +Converged at iteration 26, L1 8.37416e-05, Linf 0.00392512, total time[s] 0.078668 +Converged at iteration 40, L1 6.67441e-05, Linf 0.00387595, total time[s] 0.12587 +Converged at iteration 35, L1 8.43307e-05, Linf 0.00355614, total time[s] 0.12379 +Converged at iteration 30, L1 9.44437e-05, Linf 0.00419833, total time[s] 0.08252 +Converged at iteration 31, L1 6.17902e-05, Linf 0.00504176, total time[s] 0.116338 +Converged at iteration 26, L1 9.98752e-05, Linf 0.00579165, total time[s] 0.110678 +Converged at iteration 22, L1 7.47401e-05, Linf 0.00425428, total time[s] 0.082488 +Converged at iteration 21, L1 6.34087e-05, Linf 0.00340632, total time[s] 0.177344 +Converged at iteration 24, L1 8.98857e-05, Linf 0.00491303, total time[s] 0.070367 +Converged at iteration 28, L1 7.39702e-05, Linf 0.00443808, total time[s] 0.091503 +Converged at iteration 26, L1 8.03205e-05, Linf 0.00545225, total time[s] 0.077435 +Converged at iteration 22, L1 7.16669e-05, Linf 0.00471547, total time[s] 0.09973 +Converged at iteration 19, L1 5.76125e-05, Linf 0.00349739, total time[s] 0.064815 +Converged at iteration 30, L1 9.1438e-05, Linf 0.00330547, total time[s] 0.101039 +Converged at iteration 20, L1 8.49195e-05, Linf 0.00468506, total time[s] 0.058368 +Converged at iteration 24, L1 7.13739e-05, Linf 0.00491249, total time[s] 0.065762 +Converged at iteration 31, L1 9.36741e-05, Linf 0.0051511, total time[s] 0.103536 +Converged at iteration 27, L1 9.79028e-05, Linf 0.0051198, total time[s] 0.107246 +Converged at iteration 24, L1 8.6536e-05, Linf 0.00443007, total time[s] 0.09623 +Converged at iteration 23, L1 9.26134e-05, Linf 0.00426222, total time[s] 0.077091 +Converged at iteration 26, L1 7.16708e-05, Linf 0.00460229, total time[s] 0.101899 +Converged at iteration 29, L1 7.59987e-05, Linf 0.00496329, total time[s] 0.089718 +Converged at iteration 34, L1 8.01604e-05, Linf 0.00428122, total time[s] 0.151627 +Converged at iteration 31, L1 7.04645e-05, Linf 0.0035906, total time[s] 0.102568 +Converged at iteration 28, L1 9.99689e-05, Linf 0.00324103, total time[s] 0.102915 +Converged at iteration 32, L1 8.40536e-05, Linf 0.00358629, total time[s] 0.099265 +Converged at iteration 36, L1 9.20616e-05, Linf 0.00363883, total time[s] 0.116341 +Converged at iteration 33, L1 8.36154e-05, Linf 0.00481304, total time[s] 0.131 +Converged at iteration 28, L1 9.23088e-05, Linf 0.00421312, total time[s] 0.102465 +Converged at iteration 24, L1 8.11922e-05, Linf 0.00298536, total time[s] 0.089093 +Converged at iteration 26, L1 8.57109e-05, Linf 0.00390768, total time[s] 0.081532 +Converged at iteration 40, L1 6.62298e-05, Linf 0.0039537, total time[s] 0.114609 +Converged at iteration 35, L1 8.74415e-05, Linf 0.00359188, total time[s] 0.120944 +Converged at iteration 30, L1 9.12894e-05, Linf 0.00417202, total time[s] 0.091763 +Converged at iteration 31, L1 6.30154e-05, Linf 0.00504786, total time[s] 0.08083 +Converged at iteration 26, L1 9.79958e-05, Linf 0.00577033, total time[s] 0.115587 +Converged at iteration 22, L1 7.05271e-05, Linf 0.00415766, total time[s] 0.064512 +Converged at iteration 21, L1 6.4702e-05, Linf 0.00353621, total time[s] 0.074295 +Converged at iteration 24, L1 8.93853e-05, Linf 0.00487492, total time[s] 0.066163 +Converged at iteration 28, L1 7.27827e-05, Linf 0.00442803, total time[s] 0.096254 +Converged at iteration 26, L1 8.07767e-05, Linf 0.00530136, total time[s] 0.092114 +Converged at iteration 22, L1 6.97096e-05, Linf 0.0042988, total time[s] 0.066777 +Converged at iteration 19, L1 5.39551e-05, Linf 0.0032425, total time[s] 0.057889 +Converged at iteration 30, L1 9.64807e-05, Linf 0.00330741, total time[s] 0.097432 +Converged at iteration 20, L1 8.40781e-05, Linf 0.00474808, total time[s] 0.075316 +Converged at iteration 24, L1 7.11736e-05, Linf 0.00476859, total time[s] 0.09454 +Converged at iteration 31, L1 9.56707e-05, Linf 0.0046873, total time[s] 0.114217 +Converged at iteration 27, L1 9.25938e-05, Linf 0.00451718, total time[s] 0.089141 +Converged at iteration 24, L1 8.50263e-05, Linf 0.00421808, total time[s] 0.089555 +Converged at iteration 23, L1 9.26035e-05, Linf 0.00434309, total time[s] 0.087448 +Converged at iteration 26, L1 7.12372e-05, Linf 0.00467498, total time[s] 0.086033 +Converged at iteration 29, L1 7.49935e-05, Linf 0.00489231, total time[s] 0.091619 +Converged at iteration 34, L1 8.2366e-05, Linf 0.00395302, total time[s] 0.118571 +Converged at iteration 31, L1 7.28086e-05, Linf 0.00354096, total time[s] 0.081359 +Converged at iteration 29, L1 7.10192e-05, Linf 0.00273807, total time[s] 0.085722 +Converged at iteration 32, L1 8.17638e-05, Linf 0.00354658, total time[s] 0.094608 +Converged at iteration 36, L1 8.495e-05, Linf 0.00354619, total time[s] 0.119135 +Converged at iteration 33, L1 8.30246e-05, Linf 0.00485979, total time[s] 0.11403 +Converged at iteration 28, L1 9.05184e-05, Linf 0.00411939, total time[s] 0.090821 +Converged at iteration 24, L1 7.98889e-05, Linf 0.00288001, total time[s] 0.071213 +Converged at iteration 26, L1 8.3315e-05, Linf 0.00392712, total time[s] 0.069594 +Converged at iteration 40, L1 6.84932e-05, Linf 0.00367961, total time[s] 0.143865 +Converged at iteration 35, L1 7.62945e-05, Linf 0.00340128, total time[s] 0.114129 +Converged at iteration 30, L1 9.71568e-05, Linf 0.00432851, total time[s] 0.076736 +Converged at iteration 31, L1 6.20257e-05, Linf 0.00500252, total time[s] 0.108363 +Converged at iteration 27, L1 6.29203e-05, Linf 0.00494996, total time[s] 0.081243 +Converged at iteration 22, L1 8.60015e-05, Linf 0.00449254, total time[s] 0.073641 +Converged at iteration 20, L1 9.60616e-05, Linf 0.00395683, total time[s] 0.075569 +Converged at iteration 24, L1 8.8431e-05, Linf 0.00482786, total time[s] 0.087069 +Converged at iteration 28, L1 7.38334e-05, Linf 0.00444861, total time[s] 0.079041 +Converged at iteration 26, L1 8.1215e-05, Linf 0.00546787, total time[s] 0.095728 +Converged at iteration 22, L1 7.41551e-05, Linf 0.00509109, total time[s] 0.065613 +Converged at iteration 19, L1 6.6335e-05, Linf 0.00395973, total time[s] 0.066544 +Converged at iteration 30, L1 7.98728e-05, Linf 0.00329635, total time[s] 0.101154 +Converged at iteration 20, L1 8.44278e-05, Linf 0.00455019, total time[s] 0.072005 +Converged at iteration 24, L1 7.13396e-05, Linf 0.00463252, total time[s] 0.074032 +Converged at iteration 31, L1 8.93595e-05, Linf 0.00569156, total time[s] 0.09133 +Converged at iteration 27, L1 9.91063e-05, Linf 0.00569904, total time[s] 0.084222 +Converged at iteration 24, L1 8.83872e-05, Linf 0.00460757, total time[s] 0.078814 +Converged at iteration 23, L1 9.22156e-05, Linf 0.00410189, total time[s] 0.096386 +Converged at iteration 26, L1 7.22772e-05, Linf 0.004498, total time[s] 0.077474 +Converged at iteration 29, L1 7.96718e-05, Linf 0.00698964, total time[s] 0.086182 +Converged at iteration 34, L1 7.09398e-05, Linf 0.0043117, total time[s] 0.095501 +Converged at iteration 30, L1 9.39556e-05, Linf 0.00442607, total time[s] 0.087756 +Converged at iteration 28, L1 9.50312e-05, Linf 0.00311361, total time[s] 0.107497 +Converged at iteration 32, L1 9.45597e-05, Linf 0.00377305, total time[s] 0.111313 +Converged at iteration 37, L1 7.41024e-05, Linf 0.00327919, total time[s] 0.10574 +Converged at iteration 33, L1 8.48243e-05, Linf 0.00474676, total time[s] 0.083555 +Converged at iteration 28, L1 9.7015e-05, Linf 0.00436552, total time[s] 0.07713 +Converged at iteration 24, L1 8.83383e-05, Linf 0.00328519, total time[s] 0.108944 +Converged at iteration 26, L1 9.02632e-05, Linf 0.00384259, total time[s] 0.081813 +Converged at iteration 40, L1 6.98802e-05, Linf 0.00393981, total time[s] 0.140432 +Converged at iteration 35, L1 8.7624e-05, Linf 0.00361573, total time[s] 0.118167 +Converged at iteration 30, L1 9.20649e-05, Linf 0.00416233, total time[s] 0.074463 +Converged at iteration 31, L1 6.25353e-05, Linf 0.00504683, total time[s] 0.087271 +Converged at iteration 26, L1 9.85591e-05, Linf 0.00594243, total time[s] 0.071927 +Converged at iteration 22, L1 7.17405e-05, Linf 0.0041777, total time[s] 0.060963 +Converged at iteration 21, L1 6.40957e-05, Linf 0.00348496, total time[s] 0.067839 +Converged at iteration 24, L1 8.93707e-05, Linf 0.0049499, total time[s] 0.078278 +Converged at iteration 28, L1 7.33674e-05, Linf 0.00443349, total time[s] 0.135547 +Converged at iteration 26, L1 8.01735e-05, Linf 0.00534725, total time[s] 0.081189 +Converged at iteration 22, L1 7.03883e-05, Linf 0.00442056, total time[s] 0.084361 +Converged at iteration 19, L1 5.49389e-05, Linf 0.00332055, total time[s] 0.068906 +Converged at iteration 30, L1 9.51955e-05, Linf 0.00330738, total time[s] 0.088066 +Converged at iteration 20, L1 8.42573e-05, Linf 0.00472687, total time[s] 0.071061 +Converged at iteration 24, L1 7.12086e-05, Linf 0.00475228, total time[s] 0.07721 +Converged at iteration 31, L1 9.42327e-05, Linf 0.00481958, total time[s] 0.106294 +Converged at iteration 27, L1 9.41867e-05, Linf 0.00471646, total time[s] 0.083525 +Converged at iteration 24, L1 8.51765e-05, Linf 0.00428125, total time[s] 0.084248 +Converged at iteration 23, L1 9.23995e-05, Linf 0.00432073, total time[s] 0.064941 +Converged at iteration 26, L1 7.13052e-05, Linf 0.00466097, total time[s] 0.077308 +Converged at iteration 29, L1 7.52203e-05, Linf 0.00488647, total time[s] 0.08288 +Converged at iteration 34, L1 8.30674e-05, Linf 0.00406315, total time[s] 0.156717 +Converged at iteration 31, L1 7.17613e-05, Linf 0.00355199, total time[s] 0.100173 +Converged at iteration 29, L1 7.03181e-05, Linf 0.00274049, total time[s] 0.103115 +Converged at iteration 32, L1 8.21668e-05, Linf 0.00354567, total time[s] 0.088827 +Converged at iteration 36, L1 8.71621e-05, Linf 0.00357628, total time[s] 0.097783 +Converged at iteration 33, L1 8.32138e-05, Linf 0.00484765, total time[s] 0.136351 +Converged at iteration 28, L1 9.10955e-05, Linf 0.00413263, total time[s] 0.094203 +Converged at iteration 24, L1 8.02802e-05, Linf 0.00290884, total time[s] 0.07377 +Converged at iteration 26, L1 8.40127e-05, Linf 0.00392249, total time[s] 0.103757 +Converged at iteration 40, L1 6.81257e-05, Linf 0.0038048, total time[s] 0.137546 +Converged at iteration 35, L1 8.16525e-05, Linf 0.00349986, total time[s] 0.13548 +Converged at iteration 30, L1 9.68029e-05, Linf 0.00423594, total time[s] 0.100394 +Converged at iteration 31, L1 6.18536e-05, Linf 0.00503605, total time[s] 0.101093 +Converged at iteration 27, L1 6.06268e-05, Linf 0.00495082, total time[s] 0.087209 +Converged at iteration 22, L1 7.85042e-05, Linf 0.00433716, total time[s] 0.073174 +Converged at iteration 20, L1 9.97839e-05, Linf 0.00419211, total time[s] 0.062334 +Converged at iteration 24, L1 9.0592e-05, Linf 0.00487566, total time[s] 0.078864 +Converged at iteration 28, L1 7.44768e-05, Linf 0.00444642, total time[s] 0.083497 +Converged at iteration 26, L1 8.05451e-05, Linf 0.00552553, total time[s] 0.070585 +Converged at iteration 22, L1 7.24418e-05, Linf 0.0048928, total time[s] 0.092618 +Converged at iteration 19, L1 6.01762e-05, Linf 0.00367545, total time[s] 0.06709 +Converged at iteration 30, L1 8.69905e-05, Linf 0.00330212, total time[s] 0.088446 +Converged at iteration 20, L1 8.5174e-05, Linf 0.00463491, total time[s] 0.074207 +Converged at iteration 24, L1 7.16481e-05, Linf 0.00466911, total time[s] 0.081875 +Converged at iteration 31, L1 9.29074e-05, Linf 0.00535534, total time[s] 0.091071 +Converged at iteration 27, L1 9.92012e-05, Linf 0.0054856, total time[s] 0.08327 +Converged at iteration 24, L1 8.70778e-05, Linf 0.00454753, total time[s] 0.065146 +Converged at iteration 23, L1 9.27027e-05, Linf 0.00419767, total time[s] 0.069194 +Converged at iteration 26, L1 7.19205e-05, Linf 0.00455491, total time[s] 0.083759 +Converged at iteration 29, L1 7.66714e-05, Linf 0.00484585, total time[s] 0.08108 +Converged at iteration 34, L1 7.76363e-05, Linf 0.00432628, total time[s] 0.092066 +Converged at iteration 30, L1 9.92066e-05, Linf 0.00439906, total time[s] 0.098094 +Converged at iteration 28, L1 9.77206e-05, Linf 0.00317724, total time[s] 0.093865 +Converged at iteration 32, L1 8.6856e-05, Linf 0.00364981, total time[s] 0.090989 +Converged at iteration 36, L1 9.73086e-05, Linf 0.00372456, total time[s] 0.110047 +Converged at iteration 33, L1 8.40542e-05, Linf 0.00476995, total time[s] 0.093808 +Converged at iteration 28, L1 9.39564e-05, Linf 0.00421183, total time[s] 0.108134 +Converged at iteration 24, L1 8.28855e-05, Linf 0.00311581, total time[s] 0.089359 +Converged at iteration 26, L1 8.77282e-05, Linf 0.00388506, total time[s] 0.096039 +Converged at iteration 40, L1 6.62971e-05, Linf 0.00394688, total time[s] 0.143033 +Converged at iteration 35, L1 8.71403e-05, Linf 0.00361838, total time[s] 0.126695 +Converged at iteration 30, L1 9.10342e-05, Linf 0.00417626, total time[s] 0.106523 +Converged at iteration 31, L1 6.26358e-05, Linf 0.00504744, total time[s] 0.106928 +Converged at iteration 26, L1 9.83198e-05, Linf 0.0057721, total time[s] 0.078032 +Converged at iteration 22, L1 7.08894e-05, Linf 0.00416559, total time[s] 0.069219 +Converged at iteration 21, L1 6.44217e-05, Linf 0.00350931, total time[s] 0.076405 +Converged at iteration 24, L1 8.93495e-05, Linf 0.00496065, total time[s] 0.095374 +Converged at iteration 28, L1 7.30298e-05, Linf 0.00442969, total time[s] 0.085835 +Converged at iteration 26, L1 8.04082e-05, Linf 0.00531864, total time[s] 0.096573 +Converged at iteration 22, L1 6.9965e-05, Linf 0.00434055, total time[s] 0.083638 +Converged at iteration 19, L1 5.43204e-05, Linf 0.00326998, total time[s] 0.083698 +Converged at iteration 30, L1 9.60718e-05, Linf 0.00330728, total time[s] 0.109987 +Converged at iteration 20, L1 8.48238e-05, Linf 0.00473715, total time[s] 0.106251 +Converged at iteration 24, L1 7.11745e-05, Linf 0.00476279, total time[s] 0.074148 +Converged at iteration 31, L1 9.50528e-05, Linf 0.00473568, total time[s] 0.098509 +Converged at iteration 27, L1 9.32249e-05, Linf 0.00460824, total time[s] 0.076165 +Converged at iteration 24, L1 8.51226e-05, Linf 0.00424074, total time[s] 0.065768 +Converged at iteration 23, L1 9.25679e-05, Linf 0.00433613, total time[s] 0.070131 +Converged at iteration 26, L1 7.13059e-05, Linf 0.00467428, total time[s] 0.073629 +Converged at iteration 29, L1 7.51332e-05, Linf 0.00488986, total time[s] 0.117706 +Converged at iteration 34, L1 8.21007e-05, Linf 0.00396063, total time[s] 0.106794 +Converged at iteration 31, L1 7.2477e-05, Linf 0.00354543, total time[s] 0.099135 +Converged at iteration 29, L1 7.06432e-05, Linf 0.00273247, total time[s] 0.083138 +Converged at iteration 32, L1 8.17656e-05, Linf 0.00353193, total time[s] 0.094336 +Converged at iteration 36, L1 8.58493e-05, Linf 0.00355644, total time[s] 0.133669 +Converged at iteration 33, L1 8.30878e-05, Linf 0.00485544, total time[s] 0.089192 +Converged at iteration 28, L1 9.10028e-05, Linf 0.0041232, total time[s] 0.107305 +Converged at iteration 24, L1 8.00016e-05, Linf 0.00289006, total time[s] 0.068629 +Converged at iteration 26, L1 8.35131e-05, Linf 0.00392562, total time[s] 0.069961 +Converged at iteration 40, L1 6.67565e-05, Linf 0.00392013, total time[s] 0.108481 +Converged at iteration 35, L1 8.43976e-05, Linf 0.00355448, total time[s] 0.10928 +Converged at iteration 30, L1 9.44688e-05, Linf 0.00419798, total time[s] 0.107427 +Converged at iteration 31, L1 6.17927e-05, Linf 0.00504175, total time[s] 0.109214 +Converged at iteration 27, L1 5.92992e-05, Linf 0.00487906, total time[s] 0.278388 +Converged at iteration 22, L1 7.46456e-05, Linf 0.00425269, total time[s] 0.102208 +Converged at iteration 21, L1 6.33596e-05, Linf 0.0034057, total time[s] 0.084605 +Converged at iteration 24, L1 9.0215e-05, Linf 0.00491117, total time[s] 0.097716 +Converged at iteration 28, L1 7.41991e-05, Linf 0.00443707, total time[s] 0.151402 +Converged at iteration 26, L1 8.03229e-05, Linf 0.00545289, total time[s] 0.109421 +Converged at iteration 22, L1 7.16476e-05, Linf 0.00469576, total time[s] 0.06742 +Converged at iteration 19, L1 5.75787e-05, Linf 0.00349749, total time[s] 0.065613 +Converged at iteration 30, L1 9.13543e-05, Linf 0.00330499, total time[s] 0.104769 +Converged at iteration 20, L1 8.49417e-05, Linf 0.00461384, total time[s] 0.071707 +Converged at iteration 24, L1 7.15207e-05, Linf 0.00470928, total time[s] 0.064078 +Converged at iteration 31, L1 9.3648e-05, Linf 0.00515297, total time[s] 0.096926 +Converged at iteration 27, L1 9.79073e-05, Linf 0.00511922, total time[s] 0.09551 +Converged at iteration 24, L1 8.65447e-05, Linf 0.00442993, total time[s] 0.070543 +Converged at iteration 23, L1 9.26611e-05, Linf 0.00426221, total time[s] 0.098807 +Converged at iteration 26, L1 7.16881e-05, Linf 0.00460257, total time[s] 0.088848 +Converged at iteration 29, L1 7.59068e-05, Linf 0.00487023, total time[s] 0.096186 +Converged at iteration 34, L1 8.02278e-05, Linf 0.00428086, total time[s] 0.173553 +Converged at iteration 31, L1 7.04667e-05, Linf 0.00359049, total time[s] 0.147523 +Converged at iteration 29, L1 6.87716e-05, Linf 0.00268042, total time[s] 0.132283 +Converged at iteration 32, L1 8.54107e-05, Linf 0.00358869, total time[s] 0.11698 +Converged at iteration 36, L1 9.31627e-05, Linf 0.00366729, total time[s] 0.129985 +Converged at iteration 33, L1 8.38341e-05, Linf 0.00481371, total time[s] 0.099488 +Converged at iteration 28, L1 9.26709e-05, Linf 0.00416993, total time[s] 0.11115 +Converged at iteration 24, L1 8.12295e-05, Linf 0.00298535, total time[s] 0.070642 +Converged at iteration 26, L1 8.5972e-05, Linf 0.00390763, total time[s] 0.089997 +Converged at iteration 40, L1 6.71386e-05, Linf 0.00395311, total time[s] 0.108767 +Converged at iteration 35, L1 8.87066e-05, Linf 0.00358861, total time[s] 0.098603 +Converged at iteration 30, L1 9.20437e-05, Linf 0.00415151, total time[s] 0.098846 +Converged at iteration 31, L1 6.19151e-05, Linf 0.00503493, total time[s] 0.086613 +Converged at iteration 26, L1 9.78123e-05, Linf 0.00593544, total time[s] 0.071582 +Converged at iteration 22, L1 7.04521e-05, Linf 0.00416369, total time[s] 0.103148 +Converged at iteration 21, L1 6.4824e-05, Linf 0.00351983, total time[s] 0.068024 +Converged at iteration 24, L1 8.93989e-05, Linf 0.00496596, total time[s] 0.099174 +Converged at iteration 28, L1 7.27205e-05, Linf 0.00442803, total time[s] 0.087258 +Converged at iteration 26, L1 8.05192e-05, Linf 0.00528798, total time[s] 0.090198 +Converged at iteration 22, L1 6.96216e-05, Linf 0.00429874, total time[s] 0.064653 +Converged at iteration 19, L1 5.39453e-05, Linf 0.00324249, total time[s] 0.058038 +Converged at iteration 30, L1 9.68336e-05, Linf 0.0033074, total time[s] 0.118365 +Converged at iteration 20, L1 8.4035e-05, Linf 0.00474293, total time[s] 0.082032 +Converged at iteration 24, L1 7.11173e-05, Linf 0.00476835, total time[s] 0.098307 +Converged at iteration 31, L1 9.58399e-05, Linf 0.00468732, total time[s] 0.115403 +Converged at iteration 27, L1 9.26046e-05, Linf 0.00451922, total time[s] 0.092876 +Converged at iteration 24, L1 8.50152e-05, Linf 0.00421111, total time[s] 0.072359 +Converged at iteration 23, L1 9.26504e-05, Linf 0.00435114, total time[s] 0.108062 +Converged at iteration 26, L1 7.12601e-05, Linf 0.00467501, total time[s] 0.106946 +Converged at iteration 29, L1 7.57349e-05, Linf 0.00489316, total time[s] 0.095883 +Converged at iteration 34, L1 8.30396e-05, Linf 0.0039531, total time[s] 0.106644 +Converged at iteration 31, L1 7.5454e-05, Linf 0.00351128, total time[s] 0.103102 +Converged at iteration 29, L1 7.09251e-05, Linf 0.00273729, total time[s] 0.092853 +Converged at iteration 32, L1 8.13543e-05, Linf 0.00351144, total time[s] 0.103471 +Converged at iteration 36, L1 8.49475e-05, Linf 0.00354614, total time[s] 0.108146 +Converged at iteration 33, L1 8.30092e-05, Linf 0.00485972, total time[s] 0.105465 +Converged at iteration 28, L1 9.05335e-05, Linf 0.00411914, total time[s] 0.095399 +Converged at iteration 24, L1 7.98946e-05, Linf 0.00287999, total time[s] 0.069897 +Converged at iteration 26, L1 8.33134e-05, Linf 0.00392713, total time[s] 0.07241 diff --git a/test/plot_time.ipynb b/test/plot_time.ipynb new file mode 100644 index 0000000..24e9f6c --- /dev/null +++ b/test/plot_time.ipynb @@ -0,0 +1,356 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA6dElEQVR4nO3dd3gU5drH8e+dTkJCKk1K6IRASCAISFEBEQUBlSJFQc4BBQUBuwcVbK+KHhULHsUOAmKhCCoCIioihI4UAQldCC1ASEh73j9mEwKkAdnMJrk/17VXNrMzs7+NeM/sMzP3iDEGpZRSZYeb3QGUUkoVLy38SilVxmjhV0qpMkYLv1JKlTFa+JVSqozxsDtAYYSGhprw8HC7YyilVImyevXqI8aYsAunl4jCHx4eTlxcnN0xlFKqRBGR3blN16EepZQqY7TwK6VUGaOFXymlypgSMcavVGmSlpbGvn37SElJsTuKKiV8fHyoVq0anp6ehZpfC79SxWzfvn34+/sTHh6OiNgdR5VwxhiOHj3Kvn37qFWrVqGW0aEepYpZSkoKISEhWvRVkRARQkJCLukbpBZ+pWygRV8VpUv991SqC//aRdNZ+eV/7Y6hlFIupVQXflnzKVEbX+Dg33/aHUUplzV+/HheeeUVp77HzTffzIkTJy57+fLlyxddmGI2d+5cXnzxRQBmz57N5s2bs1976qmnWLRoUbFnKtWFv3L/d0jFk8SZ92IyM+yOo1SZtWDBAgIDA+2OYYvu3bvz2GOPARcX/meeeYZOnToVe6bSXfir1WJ9xIM0PLuBTfPetDuOUi7j+eefp379+rRt25Zt27ZlT1+3bh2tWrUiKiqKW2+9lePHjwNw3XXXMWbMGGJjY4mIiGDVqlXcdttt1KtXj3HjxmUv37NnT5o3b05kZCTvvfde9vTw8HCOHDlCfHw8ERERDB06lMjISDp37kxycvJF+Xbt2kXr1q1p0qTJeesHmDhxIi1atCAqKoqnn346e/qnn35KVFQUTZs25c477wQgPj6eDh06EBUVRceOHdmzZw8AgwcPZvjw4bRq1YratWuzdOlShgwZQkREBIMHD85eZ/ny5RkzZgyRkZF07NiRhISEfP9OkyZNolGjRkRFRXHHHXcA8PHHH3P//fezfPly5s6dy8MPP0x0dDQ7d+5k8ODBfPnllwAsXryYmJgYmjRpwpAhQzh79mz23+7pp5+mWbNmNGnShK1bt17Kf+pclfrTOVv3GsP6F+dQZ+1LnG59K+Ur1rQ7klLZJsz7k80HThbpOhtVDeDpWyLzfH316tXMmDGDdevWkZ6eTrNmzWjevDkAd911F2+++SbXXnstTz31FBMmTOD1118HwMvLi7i4ON544w169OjB6tWrCQ4Opk6dOowZM4aQkBA+/PBDgoODSU5OpkWLFtx+++2EhISc9/7bt29n+vTpvP/++/Tp04evvvqKgQMHnjfPAw88wPDhw7nrrrt4++23s6cvXLiQ7du3s3LlSowxdO/enWXLlhESEsJzzz3H8uXLCQ0N5dixYwCMHDmSQYMGMWjQID788ENGjRrF7NmzATh+/Di///47c+fOpXv37vz2229MmTKFFi1asG7dOqKjo0lKSiI2NpbXXnuNZ555hgkTJvDWW2/l+Xd68cUX2bVrF97e3hcNbV1zzTV0796dbt260atXr/NeS0lJYfDgwSxevJj69etz1113MXnyZEaPHg1AaGgoa9as4Z133uGVV15hypQphfq3kJdSvccP4OHhjuetb+Fu0tk/dTjoPYZVGffLL79w66234uvrS0BAAN27dwcgMTGREydOcO211wIwaNAgli1blr1c1nxNmjQhMjKSKlWq4O3tTe3atdm7dy9g7fE2bdqUVq1asXfvXrZv337R+9eqVYvo6GgAmjdvTnx8/EXz/Pbbb/Tr1w8ge+8drMK/cOFCYmJiaNasGVu3bmX79u0sWbKE3r17ExoaCkBwcDAAv//+O/37989ez6+//pq9rltuuQURoUmTJlSqVIkmTZrg5uZGZGRkdiY3Nzf69u0LwMCBA/n111/z/TtFRUUxYMAApk6diodH4fert23bRq1atahfv/5F6wS47bbb8v17XapSv8cP0CiyKd9Xu4cu+99k97LPqHntXXZHUgog3z1zV+Pt7Q1YxTDredbv6enpLF26lEWLFvH777/j6+vLddddl+u55TmXdXd3z3WoB3I/RdEYw+OPP84999xz3vQ337z0odyCPk9hM+U0f/58li1bxrx583j++efZuHHjJefKL6u7u3ue2S5Fqd/jz3LNgHFsknoELv0P6acS7I6jlG3at2/P7NmzSU5O5tSpU8ybNw+AChUqEBQUxC+//ALAZ599lr1XWxiJiYkEBQXh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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "\n", + "n_grid_each_dir = 100\n", + "\n", + "stencil_order = 1\n", + "#stencil_order = 3\n", + "\n", + "sweep_type = 2 \n", + "\n", + "# only domain decomposition with\n", + "nsubdom = [1,2,4,8]\n", + "time_only_domain_decomp = [85.3463,64.9523,31.8637,28.703]\n", + "L1_error_only_domain_decomp = [0.390742,0.382573,0.382575,0.382537]\n", + "Linf_error_only_domain_decomp = [1.33398,1.73339,1.73339,1.73339]\n", + "\n", + "# only sweep parallelization\n", + "nsubproc = [1,2,4,8]\n", + "time_only_sweep_parallelization = [85.3463,65.819,36.532,27.7725]\n", + "L1_error_only_sweep_parallelization = [0.390742,0.382708,0.382708,0.382708]\n", + "Linf_error_only_sweep_parallelization = [1.33398,1.73339,1.73339,1.73339]\n", + "\n", + "# both\n", + "\n", + "\n", + "plt.plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n", + "plt.plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n", + "plt.xlabel('number of processors')\n", + "plt.ylabel('time (s)')\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAAFzCAYAAAD8AIVCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACRd0lEQVR4nOzdd3hUxdfA8e+k90A6PUBCCyVAQu9dpSqIBQVUEJQu2H+KiK8iKoKCiCJiBSug0pv0XoTQEiDUEJIAKaTvzvvHhgjSAmxyU87neXzC7t69czbmbk5mZ85RWmuEEEIIIYQQd87G6ACEEEIIIYQoqiSZFkIIIYQQ4i5JMi2EEEIIIcRdkmRaCCGEEEKIuyTJtBBCCCGEEHdJkmkhhBBCCCHukp3RAdwLHx8fHRgYaHQYQghxV3bu3BmvtfY1Oo6CIu/ZQoii7Gbv2UU6mQ4MDGTHjh1GhyGEEHdFKXXC6BgKkrxnCyGKspu9Z8syDyGEEEIIIe6SJNNCCCGEEELcJUmmhRBCCCGEuEtFes20EPkhKyuL06dPk56ebnQoophwcnKifPny2NvbGx1KoSPXm7A2ud5EQZNkWoj/OH36NO7u7gQGBqKUMjocUcRprUlISOD06dNUrlzZ6HAKHbnehDXJ9SaMIMs8hPiP9PR0vL295Re7sAqlFN7e3jLzehNyvQlrkutNGEGSaSFuQH6xC2uSn6dbk++PsCb5eRIFTZJpIQq58ePH88EHH+TrGPfffz+XLl266+e7ublZL5gCtmjRIt577z0AFixYwIEDB3Ife+ONN1i5cqVRoQkDyPWWv+R6E8VRvq2ZVkp9BXQFzmuta+fcNxnoBmQCR4GBWutLOY+9AjwNmIARWutl+RWbEOJaixcvNjoEw3Tv3p3u3bsDll/uXbt2pVatWgBMmDDByNBEMSXXm1xvonjJz5npr4Eu/7lvBVBba10XOAK8AqCUqgU8AoTkPGeGUso2H2MTolB75513qFatGi1atODw4cO59+/Zs4cmTZpQt25devXqxcWLFwFo06YNo0ePJiwsjJo1a7J9+3YefPBBgoODef3113Of37NnTxo2bEhISAizZs3KvT8wMJD4+Hiio6OpWbMmgwYNIiQkhE6dOpGWlnZdfMePH6dp06bUqVPnmvMDTJ48mfDwcOrWrcubb76Ze/8333xD3bp1qVevHk888QQA0dHRtGvXjrp169K+fXtOnjwJwIABAxg6dChNmjShSpUqrF27lqeeeoqaNWsyYMCA3HO6ubkxevRoQkJCaN++PXFxcbf8Pk2bNo1atWpRt25dHnnkEQC+/vprhg0bxqZNm1i0aBHjxo0jNDSUo0ePMmDAAH755RcAVq1aRf369alTpw5PPfUUGRkZud+7N998kwYNGlCnTh0OHTp0J/+rizylVCml1C9KqUNKqYNKqaZGx3Sn5HqT602Ie5FvM9Na63VKqcD/3Lf8qptbgN45/+4BzNNaZwDHlVJRQCNgc37FJ0RevPVHBAfOJln1nLXKevBmt5CbPr5z507mzZvHnj17yM7OpkGDBjRs2BCAJ598kk8++YTWrVvzxhtv8NZbb/Hxxx8D4ODgwI4dO5g6dSo9evRg586deHl5UbVqVUaPHo23tzdfffUVXl5epKWlER4ezkMPPYS3t/c140dGRvLjjz/yxRdf8PDDD/Prr7/Sr1+/a44ZOXIkQ4cO5cknn2T69Om59y9fvpzIyEi2bduG1pru3buzbt06vL29mThxIps2bcLHx4cLFy4AMHz4cPr370///v356quvGDFiBAsWLADg4sWLbN68mUWLFtG9e3c2btzIl19+SXh4OHv27CE0NJTLly8TFhbGlClTmDBhAm+99RaffvrpTb9P7733HsePH8fR0fG6j9mbNWtG9+7d6dq1K717977msfT0dAYMGMCqVauoVq0aTz75JJ999hmjRo0CwMfHh127djFjxgw++OADvvzyyzz9LBQTU4GlWuveSikHwOVuTyTXm1xvINebKHqMXDP9FLAk59/lgFNXPXY65z6rO3l4Nwc2L7n9gUIYZP369fTq1QsXFxc8PDxyPxJNTEzk0qVLtG7dGoD+/fuzbt263OddOa5OnTqEhIRQpkwZHB0dqVKlCqdOWS6vadOmUa9ePZo0acKpU6eIjIy8bvzKlSsTGhoKQMOGDYmOjr7umI0bN/Loo48C5M56geWX+/Lly6lfvz4NGjTg0KFDREZGsnr1avr06YOPjw8AXl5eAGzevJnHHnss9zwbNmzIPVe3bt1QSlGnTh38/f2pU6cONjY2hISE5MZkY2ND3759AejXrx8bNmy45fepbt26PP7443z33XfY2eV9LuHw4cNUrlyZatWqXXdOgAcffPCW36/iSinlCbQC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79304aVLl1K2bFn++suynj8xMRFXV1f27NkDwPr166lduzbbt28nOzubxo0ttTMHDx7MzJkzCQ4OZuvWrTz33HOsXr2akSNHMnr0aFq0aMHJkyfp3LkzBw8eBOCff/5hy5YtXL58mfr16/PAAw9QtmzZa+I5fPgws2fPpnnz5jz11FPMmDGDsWPHMmzYMN544w0AnnjiCf7880+6desGQGZmJlc63V28eJEtW7aglOLLL7/k/fff58MPP7zp67/Z67iRsLCw3O/LuHHj6NKlCwAPPvgggwYNAuD1119n9uzZDB8+nO7du9O1a1d69752h3d6ejoDBgxg1apVVKtWjSeffJLPPvuMUaNGAeDj48OuXbuYMWMGH3zwAV9++eVN4xf3QK43ud6Q603k3c7YnZRzK0eAawCP13zcsDhKdDKNc2kuedWjcfwudpy4SJMq3kZHJAR16tThhRde4KWXXqJr1660bNkSgKpVq3Lw4EG2bdvGmDFjWLduHSaTiZYtW5KSksKmTZvo06dP7nmuzPSsXLnymnWLSUlJuc0XevTogbOzM87OzrRt25Zt27bRs2fPa+KpUKECzZs3B6Bfv35MmzaNsWPHsmbNGt5//31SU1O5cOECISEhub/c+/btm/v806dP07dvX2JiYsjMzKRy5co3fe23eh23Mn/+fHbt2sXy5csB2L9/P6+//jqXLl0iJSWFzp073/L5hw8fpnLlylSrVg2A/v37M3369Nxf7ldmKRs2bMhvv/1223hE0SHXm1xvomjaF7ePoSuHEh4QzvT20w2NpWQn04Bb7S7UW/cuH+w5SJMqLYwORxQ2t5jRyi/VqlVj165dLF68mNdff5327dvzxhtv0KpVK5YsWYK9vT0dOnRgwIABmEwmJk+ejNlsplSpUrmzRlczm81s2bIFJyen6x777waNG23YuNEx6enpPPfcc+zYsYMKFSowfvx40tPTc49xdXXN/ffw4cMZM2YM3bt3Z+3atYwfP/6mr/1Wr+Nm9u/fz/jx41m3bh22traA5WPpBQsWUK9ePb7++mvWrl2b5/PdiKOjIwC2trZkZ2ff07nELcj1Jtcbcr2J24u8GMnQVUPxdvJmfNPxRodTstdMAzhU7wTA5YPLc9egCWGks2fP4uLiQr9+/Rg3bhy7du0CoGXLlnz88cc0bdoUX19fEhISOHz4MLVr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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# test 2\n", + "# first order stencil\n", + "\n", + "n_grid_each_dir = 100\n", + "\n", + "stencil_order = 1\n", + "#stencil_order = 3\n", + "\n", + "sweep_type = 2 \n", + "\n", + "# only domain decomposition with\n", + "nsubdom = [1,2,4,6]\n", + "time_only_domain_decomp = [119.745,66.6102,42.9897,36.4134] \n", + "L1_error_only_domain_decomp = [] \n", + "Linf_error_only_domain_decomp = [] \n", + "\n", + "# only sweep parallelization\n", + "nsubproc = [1,2,4,6]\n", + "time_only_sweep_parallelization = [119.745,60.6498,37.7447,29.9794]\n", + "L1_error_only_sweep_parallelization = []\n", + "Linf_error_only_sweep_parallelization = []\n", + "\n", + "# speed up\n", + "dom_decomp_speedup = []\n", + "swp_para_speedup = []\n", + "\n", + "# calculate speedup rate\n", + "for i in range(len(time_only_domain_decomp)):\n", + " dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n", + " swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n", + "\n", + "fig, axs = plt.subplots(1,2, figsize=(12,6))\n", + "\n", + "# plot raw time\n", + "axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n", + "axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n", + "axs[0].set_xlabel('number of processors')\n", + "axs[0].set_ylabel('time (s)')\n", + "axs[0].legend()\n", + "\n", + "# plot speedup\n", + "axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n", + "axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n", + "axs[1].set_xlabel('number of processors')\n", + "axs[1].set_ylabel('speedup')\n", + "# plot perfect speedup\n", + "axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n", + "# plot 70 % speedup\n", + "nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n", + "axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n", + "axs[1].legend()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'number of iterations')" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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IYqTvCB5QYjiJC9IXjCKjIgQVfL8888TGBjIwIEDCQ8PL7x9z5499O3bl5CQEK6++mrOnTsHwNChQ3nggQfo2bMnQUFB/PPPP1xzzTW0a9eOuXPnFu5/1VVX0aNHDzp16sSSJUsKb2/VqhUJCQlEREQQFBTEbbfdRqdOnRg1ahQZGRkXxXfixAn69etHcHDwBccHePXVV+nVqxchISE8/fTThbd/8sknhISE0KVLF2666SYAIiIiuOyyywgJCWH48OGcOnUKgOnTp3PXXXfRt29fAgIC2LBhAzNnziQoKIjp06cXHtPNzY0HHniATp06MXz4cOLj48t8nd5++206duxISEgI119/PQAff/wx9957L1u3bmX16tU8/PDDdO3alWPHjjF9+nS+/fZbANavX0+3bt0IDg5m5syZZGVlFb52Tz/9NN27dyc4OJiwsLCK/FcbSinlqZT6VikVppQKVUr1MzqmipJzRc4VUb0kL0hekLxQfymlbJVS/yqlfjL//JdSao/53xml1EqDQ6w0yQuSF+oLGRFhJZ758SCHziRX6zE7NmnA01d0KvX+Xbt2sWLFCvbs2UNubi7du3enR48eANx888288847DBkyhKeeeopnnnmGt956CwAHBwd27tzJggULuPLKK9m1axeNGjWiTZs2PPDAA3h5ebF06VIaNWpERkYGvXr14tprr8XLy+uCxz9y5AhffvklH3zwAddddx3fffcdU6dOvWCb2bNnc9ddd3HzzTezcOHCwtvXrl3LkSNH2LFjB1prJkyYwKZNm/Dy8uK5555j69ateHt7c/bsWQBmzZrFtGnTmDZtGkuXLuW+++5j5cqVAJw7d45t27axevVqJkyYwJYtW/jwww/p1asXe/bsoWvXrqSlpdGzZ0/efPNN5s+fzzPPPMO7775b6uv00ksvceLECRwdHS8aLte/f38mTJjA+PHjmThx4gX3ZWZmMn36dNavX09gYCA333wzixYt4v777wfA29ub3bt389577/Haa6/x4Ycflut3oQ5YAPyqtZ6olHIAXCp7IDlX5FwBqz5X6hPJC5IXJC/UX7OBUKABgNZ6UMEdSqnvgFVVfQDJC5IXQPJCTbL6ERFRR/awf9NKo8OwSn/99RdXX301Li4uNGjQoHBoU1JSEufPn2fIkCEATJs2jU2bNhXuV7BdcHAwnTp1wt/f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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# test 3 time par iteration\n", + "# first order stencil\n", + "\n", + "n_grid_each_dir = 100\n", + "\n", + "stencil_order = 1\n", + "#stencil_order = 3\n", + "\n", + "sweep_type = 2 \n", + "\n", + "# only domain decomposition with\n", + "nsubdom = [1,2,4,6]\n", + "time_only_domain_decomp = [122.169,77.0518,40.005,35.3397] \n", + "n_iter_dom_decomp = [39,45,46,47]\n", + "\n", + "# only sweep parallelization\n", + "nsubproc = [1,2,4,6]\n", + "time_only_sweep_parallelization = [102.32,55.6871,35.7869,27.649]\n", + "n_iter_swp_para = [39,39,39,39]\n", + "\n", + "# time par iteration\n", + "dom_decomp_time_par_iteration = []\n", + "swp_para_time_par_iteration = []\n", + "\n", + "# calculate time par iteration\n", + "for i in range(len(time_only_domain_decomp)):\n", + " dom_decomp_time_par_iteration.append(time_only_domain_decomp[i]/n_iter_dom_decomp[i])\n", + " swp_para_time_par_iteration.append(time_only_sweep_parallelization[i]/n_iter_swp_para[i])\n", + "\n", + "# speed up\n", + "dom_decomp_speedup = []\n", + "swp_para_speedup = []\n", + "# speed up par iteration\n", + "dom_decomp_speedup_par_iter = []\n", + "swp_para_speedup_par_iter = []\n", + "\n", + "\n", + "# calculate speedup rate\n", + "for i in range(len(time_only_domain_decomp)):\n", + " dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n", + " swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n", + "\n", + "# calculate time par iteration\n", + "for i in range(len(time_only_domain_decomp)):\n", + " dom_decomp_speedup_par_iter.append(dom_decomp_time_par_iteration[0]/dom_decomp_time_par_iteration[i])\n", + " swp_para_speedup_par_iter.append(swp_para_time_par_iteration[0]/swp_para_time_par_iteration[i])\n", + "\n", + "fig, axs = plt.subplots(1,4, figsize=(18,6))\n", + "\n", + "# plot raw time\n", + "axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n", + "axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n", + "axs[0].set_xlabel('number of processors')\n", + "axs[0].set_ylabel('time (s)')\n", + "axs[0].legend()\n", + "# title\n", + "axs[0].set_title('time')\n", + "\n", + "# plot speedup\n", + "axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n", + "axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n", + "axs[1].set_xlabel('number of processors')\n", + "axs[1].set_ylabel('speedup')\n", + "# plot perfect speedup\n", + "axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n", + "# plot 70 % speedup\n", + "nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n", + "axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n", + "axs[1].legend()\n", + "# title\n", + "axs[1].set_title('speedup')\n", + "\n", + "# plot speed up par iteration\n", + "axs[2].plot(nsubdom,dom_decomp_speedup_par_iter,label='domain decomposition')\n", + "axs[2].plot(nsubproc,swp_para_speedup_par_iter,label='sweep parallelization')\n", + "axs[2].set_xlabel('number of processors')\n", + "axs[2].set_ylabel('speedup')\n", + "# plot perfect speedup\n", + "axs[2].plot(nsubdom,nsubdom,'--',label='perfect')\n", + "# plot 70 % speedup\n", + "nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n", + "axs[2].plot(nsubdom,nsubdom_70,'--',label='70 %')\n", + "axs[2].legend()\n", + "# title\n", + "axs[2].set_title('speedup par iteration')\n", + "\n", + "# plot the number of iterations\n", + "axs[3].plot(nsubdom,n_iter_dom_decomp,label='domain decomposition')\n", + "axs[3].plot(nsubproc,n_iter_swp_para,label='sweep parallelization')\n", + "axs[3].set_xlabel('number of processors')\n", + "axs[3].set_ylabel('number of iterations')\n", + "axs[3].legend()\n", + "# title\n", + "axs[3].set_title('number of iterations')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# test 3\n", + "# third order stencil\n", + "\n", + "n_grid_each_dir = 100\n", + "\n", + "#stencil_order = 1\n", + "stencil_order = 3\n", + "\n", + "sweep_type = 2 \n", + "\n", + "# only domain decomposition with\n", + "nsubdom = [1,2,4,6]\n", + "time_only_domain_decomp = [] \n", + "L1_error_only_domain_decomp = [] \n", + "Linf_error_only_domain_decomp = [] \n", + "\n", + "# only sweep parallelization\n", + "nsubproc = [1,2,4,6]\n", + "time_only_sweep_parallelization = []\n", + "L1_error_only_sweep_parallelization = []\n", + "Linf_error_only_sweep_parallelization = []\n", + "\n", + "# speed up\n", + "dom_decomp_speedup = []\n", + "swp_para_speedup = []\n", + "\n", + "# calculate speedup rate\n", + "for i in range(len(time_only_domain_decomp)):\n", + " dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n", + " swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n", + "\n", + "fig, axs = plt.subplots(1,2, figsize=(12,6))\n", + "\n", + "# plot raw time\n", + "axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n", + "axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n", + "axs[0].set_xlabel('number of processors')\n", + "axs[0].set_ylabel('time (s)')\n", + "axs[0].legend()\n", + "\n", + "# plot speedup\n", + "axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n", + "axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n", + "axs[1].set_xlabel('number of processors')\n", + "axs[1].set_ylabel('speedup')\n", + "# plot perfect speedup\n", + "axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n", + "# plot 70 % speedup\n", + "nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n", + "axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n", + "axs[1].legend()\n" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a" + }, + "kernelspec": { + "display_name": "Python 3.9.1 64-bit ('3.9.1': pyenv)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/run_test.sh b/test/run_test.sh new file mode 100755 index 0000000..782ebe4 --- /dev/null +++ b/test/run_test.sh @@ -0,0 +1,42 @@ +# target directory to be run +TARGET_DIR=$1 + +# option to run only cpp code +CPP_ONLY=$2 + +if [ -z $TARGET_DIR ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ ! -d $TARGET_DIR ]; then + echo "Target directory $TARGET_DIR does not exist" + exit 1 +fi + +# cd to fortran_code directory +cd $TARGET_DIR/fortran_code + +# skip here if not cpp only +if [ -z $CPP_ONLY ]; then + # compile ega5_sphe_3d_kernel.f90 + mpif90 -O3 ega5_sphe_3d_kernel.f90 + # mkdir ega5/output directory + mkdir ega5/output + # mkdir ega5/output/tele_traveltime_field directory + mkdir ega5/output/tele_traveltime_field + # run ega5_sphe_3d_kernel.f90 + ./a.out +fi + +# cd to one directory above +cd ../ + +# run make_test_model.py +python make_test_model.py +# run synthetic test with nproc 8 +mpirun --oversubscribe -np 8 ../../build/TOMOATT -i ./input_params_pre.yml +# run inverse +mpirun --oversubscribe -np 8 ../../build/TOMOATT -i ./input_params.yml + + diff --git a/tests/read_write_srcrec.cxx b/tests/read_write_srcrec.cxx new file mode 100644 index 0000000..8d3056f --- /dev/null +++ b/tests/read_write_srcrec.cxx @@ -0,0 +1,9 @@ +#include +#include "grid.h" + + +int main() { + std::cout << "Tests started!" << std::endl; + std::cout << "Tests (0) succeeded!" << std::endl; + return 0; // You can put a 1 here to see later that it would generate an error +} \ No newline at end of file diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/compare_models.py b/utils/compare_models.py new file mode 100644 index 0000000..a8e5b9d --- /dev/null +++ b/utils/compare_models.py @@ -0,0 +1,67 @@ +#!/bin/python3 + +import os +import h5py +import numpy as np +import argparse + +def read_model_h5(model_path): + + with h5py.File(model_path, 'r') as f: + # read xi eta vel + xi = f['xi'][:] + eta = f['eta'][:] + vel = f['vel'][:] + + return xi, eta, vel + +# main function +if __name__ == '__main__': + """ + Compare two models + parth args + -t : true model file path + -r : result model file path + """ + + parser = argparse.ArgumentParser(description='Compare two models') + parser.add_argument('-t', '--true', type=str, help='true model file path') + parser.add_argument('-r', '--result', type=str, help='result model file path') + args = parser.parse_args() + + # read true model + xi_true, eta_true, vel_true = read_model_h5(args.true) + # read result model + xi_result, eta_result, vel_result = read_model_h5(args.result) + + # check shapes + if xi_true.shape != xi_result.shape: + print('xi shape not match') + exit(1) + + if eta_true.shape != eta_result.shape: + print('eta shape not match') + exit(1) + + if vel_true.shape != vel_result.shape: + print('vel shape not match') + exit(1) + + # print model info + print('model info: ') + print('vel shape: ', vel_true.shape) + + # compare + print('vel max error: ', np.max(np.abs(vel_true - vel_result))) + print('xi max error: ', np.max(np.abs(xi_true - xi_result))) + print('eta max error: ', np.max(np.abs(eta_true - eta_result))) + + # L2 norm + print('vel L2 norm: ', np.linalg.norm(vel_true - vel_result)) + print('xi L2 norm: ', np.linalg.norm(xi_true - xi_result)) + print('eta L2 norm: ', np.linalg.norm(eta_true - eta_result)) + + # exit + exit(0) + + diff --git a/utils/convert_param_file_2to3.py b/utils/convert_param_file_2to3.py new file mode 100644 index 0000000..340a245 --- /dev/null +++ b/utils/convert_param_file_2to3.py @@ -0,0 +1,184 @@ +import os +import argparse +from ruamel.yaml import YAML +from contextlib import suppress + +def map_value_to_bool(params_in, target_key, orig_key=None): + """ + Map an integer value to a boolean and update the target key in params_in. + + Parameters: + params_in (dict): The input dictionary. + target_key (str): The key whose value needs to be mapped to a boolean. + + Returns: + None + """ + if orig_key is None: + orig_key = target_key + print('key name {} is changed to {}'.format(orig_key, target_key)) + + value = params_in.get(orig_key, None) + if value is not None: + params_in[target_key] = bool(value) + print('value {} type is changed from int to bool'.format(target_key)) + + # remove the old key + if orig_key != target_key: + params_in.pop(orig_key, None) + +if __name__ == '__main__': + # parse the argument for the input file + parser = argparse.ArgumentParser(description='Convert a parameter file from version 2 to version 3') + parser.add_argument('-i', '--input', help='Input file name', required=True) + + args = parser.parse_args() + infile = args.input + + + # get path to this file + path_this = os.path.dirname(os.path.realpath(__file__)) + + # path to the v3 model file + v3_model_file = path_this + '/params_model_v3.yaml' + + yaml = YAML() + + # read the input file + try: + with open(infile, 'r') as f: + str_in = f.read() + params_in = yaml.load(str_in) + + except IOError: + raise ValueError('Cannot read the input file') + + # read the v3 model file + try: + with open(v3_model_file, 'r') as f: + str_v3 = f.read() + params_v3 = yaml.load(str_v3) + except IOError: + raise ValueError('Cannot read the v3 model file') + + # check the version of the input file + if params_in['version'] != 2: + raise ValueError('The input file is not version 2') + + # change version to 3 + params_v3['version'] = 3 + + # copy the values in the input file to the output file + # + # domain section + # + params_v3['domain'] = params_in['domain'] + + # + # source section + # + params_v3['source'] = params_in['source'] + map_value_to_bool(params_v3['source'], 'swap_src_rec') + + # + # model section + # + params_v3['model'] = params_in['model'] + + # + # parallel section + # + params_v3['parallel'] = params_in['parallel'] + + # change parallel->use_gpu from 0,1 to false,true + map_value_to_bool(params_v3['parallel'], 'use_gpu') + + # + # output_setting section + # + with suppress(KeyError): params_v3['output_setting']['output_dir'] = params_in['inversion']['output_dir'] + with suppress(KeyError): params_v3['output_setting']['output_source_field'] = params_in['output_setting']['is_output_source_field'] + with suppress(KeyError): params_v3['output_setting']['output_model_dat'] = params_in['output_setting']['is_output_model_dat'] + with suppress(KeyError): params_v3['output_setting']['output_final_model'] = params_in['output_setting']['is_output_final_model'] + with suppress(KeyError): params_v3['output_setting']['output_in_process'] = params_in['output_setting']['is_output_in_process'] + with suppress(KeyError): params_v3['output_setting']['single_precision_output'] = params_in['output_setting']['is_single_precision_output'] + + map_value_to_bool(params_v3['output_setting'], 'output_source_field') + map_value_to_bool(params_v3['output_setting'], 'output_model_dat') + map_value_to_bool(params_v3['output_setting'], 'output_final_model') + map_value_to_bool(params_v3['output_setting'], 'output_in_process') + map_value_to_bool(params_v3['output_setting'], 'single_precision_output') + + # remove the old key 'output_setting'->'is_verbose_output' + params_v3['output_setting'].pop('is_verbose_output', None) + + with suppress(KeyError): params_v3['output_setting']['output_file_format'] = params_in['calculation']['output_file_format'] + + # + # run_mode section + # + params_v3['run_mode'] = params_in['inversion']['run_mode'] + + # + # model_update section + # + with suppress(KeyError): params_v3['model_update']['max_iterations'] = params_in['inversion']['max_iterations_inv'] + with suppress(KeyError): params_v3['model_update']['optim_method'] = params_in['inversion']['optim_method'] + with suppress(KeyError): params_v3['model_update']['step_length'] = params_in['inversion']['step_size'] + with suppress(KeyError): params_v3['model_update']['optim_method_0']['step_length_decay'] = params_in['inversion']['step_size_decay'] + with suppress(KeyError): params_v3['model_update']['optim_method_0']['step_length_sc'] = params_in['inversion']['step_size_sc'] + with suppress(KeyError): params_v3['model_update']['optim_method_1_2']['max_sub_iterations'] = params_in['inversion']['max_sub_iterations'] + with suppress(KeyError): params_v3['model_update']['optim_method_1_2']['regularization_weight'] = params_in['inversion']['regularization_weight'] + with suppress(KeyError): params_v3['model_update']['smoothing']['smooth_method'] = params_in['inversion']['smooth_method'] + with suppress(KeyError): params_v3['model_update']['smoothing']['l_smooth_rtp'] = params_in['inversion']['l_smooth_rtp'] + with suppress(KeyError): params_v3['model_update']['n_inversion_grid'] = params_in['inversion']['n_inversion_grid'] + with suppress(KeyError): params_v3['model_update']['type_invgrid_dep'] = params_in['inversion']['type_dep_inv'] + with suppress(KeyError): params_v3['model_update']['type_invgrid_lat'] = params_in['inversion']['type_lat_inv'] + with suppress(KeyError): params_v3['model_update']['type_invgrid_lon'] = params_in['inversion']['type_lon_inv'] + with suppress(KeyError): params_v3['model_update']['n_inv_dep_lat_lon'] = params_in['inversion']['n_inv_dep_lat_lon'] + with suppress(KeyError): params_v3['model_update']['min_max_dep_inv'] = params_in['inversion']['min_max_dep_inv'] + with suppress(KeyError): params_v3['model_update']['min_max_lat_inv'] = params_in['inversion']['min_max_lat_inv'] + with suppress(KeyError): params_v3['model_update']['min_max_lon_inv'] = params_in['inversion']['min_max_lon_inv'] + with suppress(KeyError): params_v3['model_update']['dep_inv'] = params_in['inversion']['dep_inv'] + with suppress(KeyError): params_v3['model_update']['lat_inv'] = params_in['inversion']['lat_inv'] + with suppress(KeyError): params_v3['model_update']['lon_inv'] = params_in['inversion']['lon_inv'] + with suppress(KeyError): params_v3['model_update']['sta_correction_file'] = params_in['inversion']['sta_correction_file'] + with suppress(KeyError): params_v3['model_update']['update_slowness'] = params_in['inv_strategy']['is_inv_slowness'] + with suppress(KeyError): params_v3['model_update']['update_azi_ani'] = params_in['inv_strategy']['is_inv_azi_ani'] + with suppress(KeyError): params_v3['model_update']['update_rad_ani'] = params_in['inv_strategy']['is_inv_rad_ani'] + map_value_to_bool(params_v3['model_update'], 'update_slowness') + map_value_to_bool(params_v3['model_update'], 'update_azi_ani') + map_value_to_bool(params_v3['model_update'], 'update_rad_ani') + + with suppress(KeyError): params_v3['model_update']['depth_taper'] = params_in['inv_strategy']['kernel_taper'] + with suppress(KeyError): params_v3['model_update']['use_sta_correction'] = params_in['inv_strategy']['is_sta_correction'] + map_value_to_bool(params_v3['model_update'], 'use_sta_correction') + + + # + # relocation section + # + # replocation section is completely new in v3, so we don't need to move any value + + # + # inversion_strategy section + # + # inversion_strategy section is completely new in v3, so we don't need to move any value + + # + # calculation section + # + params_v3['calculation'] = params_in['calculation'] + # erase the old key 'calculation'->'output_file_format' if it exists + params_v3['calculation'].pop('output_file_format', None) + + # write the output file with adding .v3 to the file name + outfile = infile + '.v3.yaml' + with open(outfile, 'w') as f: + yaml.dump(params_v3, f) + + + + + + diff --git a/utils/find_2_bytes_chars.py b/utils/find_2_bytes_chars.py new file mode 100644 index 0000000..d108be9 --- /dev/null +++ b/utils/find_2_bytes_chars.py @@ -0,0 +1,28 @@ +import os +import re + +def find_kanji_chars_in_file(file_path): + kanji_pattern = re.compile(r'[\u4E00-\u9FFF]') + with open(file_path, 'r', encoding='utf-8', errors='ignore') as file: + content = file.read() + matches = kanji_pattern.findall(content) + if matches: + print(f"Found Kanji characters in {file_path}: {''.join(matches)}") + +def scan_directory(directory): + for root, _, files in os.walk(directory): + for file in files: + file_path = os.path.join(root, file) + # skip non-text files + target_files = ['.cpp', '.h', '.hpp', '.c', '.cc', '.hh', '.cxx', '.hxx', '.py', '.txt', '.md', '.rst', '.ipynb', '.sh'] + if not file_path.endswith(tuple(target_files)): + continue + + find_kanji_chars_in_file(file_path) + +if __name__ == "__main__": + #directory_to_scan = '.' # Change this to the directory you want to scan + list_target_dir = ['./src', './test', './include', './examples'] + + for directory_to_scan in list_target_dir: + scan_directory(directory_to_scan) \ No newline at end of file diff --git a/utils/params_model_v3.yaml b/utils/params_model_v3.yaml new file mode 100644 index 0000000..f2c544a --- /dev/null +++ b/utils/params_model_v3.yaml @@ -0,0 +1,230 @@ +version: 3 + +################################################# +# computational domian # +################################################# +domain: + min_max_dep: [-10, 10] # depth in km + min_max_lat: [37.7, 42.3] # latitude in degree + min_max_lon: [22.7, 27.3] # longitude in degree + n_rtp: [10, 50, 50] # number of nodes in depth,latitude,longitude direction + + +################################################# +# traveltime data file path # +################################################# +source: + src_rec_file: OUTPUT_FILES/src_rec_file_forward.dat ### source receiver file path + swap_src_rec: true # swap source and receiver + + +################################################# +# initial model file path # +################################################# +model: + init_model_path: ./test_model_init.h5 # path to initial model file + + +################################################# +# parallel computation settings # +################################################# +parallel: # parameters for parallel computation + n_sims: 1 # number of simultanoues runs + ndiv_rtp: [1, 2, 2] # number of subdivision on each direction + nproc_sub: 2 # number of processors for sweep parallelization + use_gpu: false # true if use gpu (EXPERIMENTAL) + + +############################################ +# output file setting # +############################################ +output_setting: + output_dir: ./OUTPUT_FILES/ # path to output director (default is ./OUTPUT_FILES/) + output_source_field: false # output the calculated field of all sources + output_model_dat: false # output model_parameters_inv_0000.dat or not. + output_final_model: true # output merged final model or not. + output_in_process: true # output model at each inv iteration or not. + output_in_process_data: false # output src_rec_file at each inv iteration or not. + single_precision_output: false # output results in single precision or not. + verbose_output_level: 0 # output internal parameters, if 0, only model parameters are out. Higher level, more internal parameters are output. default: 0 + output_file_format: 0 # in/output file format, if 0: HDF5, if 1: ASCII + + +################################################# +# inversion or forward modeling # +################################################# +# run mode +# 0 for forward simulation only, +# 1 for inversion +# 2 for earthquake relocation +# 3 for inversion+earthquake relocation +run_mode: 1 + + +################################################### +# model update parameters setting # +################################################### +model_update: # update model parameters (when run_mode : 1 and 3) + max_iterations: 3 # maximum number of inversion iterations + optim_method: 1 # optimization method. 0 : grad_descent, 1 : halve-stepping, 2 : lbfgs (EXPERIMENTAL) + + # common parameters for all optim methods + step_length: 0.01 # step length of model perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + + # parameters for optim_method 0 (grad_descent) + optim_method_0: + step_length_decay: 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + + # parameters for optim_method 1 (halve-stepping) or 2 (lbfgs) + optim_method_1_2: + max_sub_iterations: 10 # maximum number of each sub-iteration + regularization_weight: 0.01 # weight value for regularization (lbfgs mode only) + coefs_regulalization_rtp: [1.0, 1.0, 1.0] # coefficients for regularization on each direction(lbfgs mode only) + + # smoothing + smoothing: + smooth_method: 0 # 0: multiparametrization, 1: laplacian smoothing (EXPERIMENTAL) + l_smooth_rtp: [100, 100, 100] # smoothing coefficients for laplacian smoothing + + # parameters for smooth method 0 (multigrid model parametrization) + n_inversion_grid: 5 # number of inversion grid sets + + # inversion grid type + type_invgrid_dep: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lat: 0 # 0: uniform inversion grid, 1: flexible grid + type_invgrid_lon: 0 # 0: uniform inversion grid, 1: flexible grid + + # settings for uniform inversion grid (if type_*_inv : 0) + n_inv_dep_lat_lon: [5, 10, 10] # number of the base inversion grid points (ignored if type_*_inv : 1) + min_max_dep_inv: [-10, 10] # depth in km (Radius of the earth is defined in config.h/R_earth) (ignored if type_dep_inv : 1) + min_max_lat_inv: [37.7, 42.3] # latitude in degree + min_max_lon_inv: [22.7, 27.3] # longitude in degree + + # settings for flexible inversion grid (if type_*_inv : 1) + dep_inv: [-10.0, -7.5, -5.0, -2.5, 0.0, 2.5, 5.0, 7.5, 10.0] # depth in km (Radius of the earth is defined in config.h/R_earth) + lat_inv: [0.0, 1.0] # latitude in degree (ignored if type_lat_inv : 0) + lon_inv: [0.0, 1.0] # longitude in degree (ignored if type_lon_inv : 0) + # if we want to use another inversion grid for inverting anisotropy, set invgrid_ani: true (default: false) + invgrid_ani: false + # settings for flexible inversion grid for anisotropy (only flexible grid input is provided) +# dep_inv_ani: [1, 1, 1] +# lat_inv_ani: [1, 1, 1] +# lon_inv_ani: [1, 1, 1] + # inversion grid volume rescale (kernel -> kernel / volume of inversion grid mesh), + # this precondition may be carefully applied if the sizes of inversion grids are unbalanced + invgrid_volume_rescale: false + + # path to station correction file (under development) + use_sta_correction: false +# sta_correction_file: dummy_sta_correction_file # station correction file path + #step_length_sc: 0.001 step length relate to the update of station correction terms + + # path to station correction file + #use_sta_correction: false + #sta_correction_file: dummy_sta_correction_file # station correction file path + + + # In the following data subsection, XXX_weight means a weight is assigned to the data, influencing the objective function and gradient + # XXX_weight : [d1,d2,w1,w2] means: + # if XXX < d1, weight = w1 + # if d1 <= XXX < d2, weight = w1 + (XXX-d1)/(d2-d1)*(w2-w1), (linear interpolation) + # if d2 <= XXX , weight = w2 + # You can easily set w1 = w2 = 1.0 to normalize the weight related to XXX. + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time: true # 'true' for using absolute traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [0, 9999, 1.0, 1.0] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight: [0, 9999, 1.0, 1.0] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common source differential traveltime data -------------- + cs_dif_time: + use_cs_time: false # 'true' for using common source differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [0, 0, 0, 0] # XXX is the common source differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{n,j} - t^{syn}_{n,i} + t^{syn}_{n,j}). + azimuthal_weight: [0, 0, 0, 0] # XXX is the azimuth difference between two separate stations related to the common source. + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time: false # 'true' for using common receiver differential traveltime data to update model parameters; 'false' for not using (no need to set parameters in this section) + residual_weight: [0, 0, 0, 0] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight: [0, 0, 0, 0] # XXX is the azimuth difference between two separate sources related to the common receiver. + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_weight: 1 # weight of absolute traveltime data after balance, default: 1.0 + cs_dif_time_local_weight: 1 # weight of common source differential traveltime data after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data after balance, default: 1.0 + teleseismic_weight: 1 # weight of teleseismic data after balance, default: 1.0 (exclude in this version) + + # -------------- inversion parameters -------------- + update_slowness : true # update slowness (velocity) or not. default: true + update_azi_ani : false # update azimuthal anisotropy (xi, eta) or not. default: false + #update_rad_ani : false # update radial anisotropy (in future) or not. default: false + + # -------------- for teleseismic inversion (under development) -------------- + # depth_taper : [d1,d2] means: + # if XXX < d1, kernel <- kernel * 0.0 + # if d1 <= XXX < d2, kernel <- kernel * (XXX-d1)/(d2-d1), (linear interpolation) + # if d2 <= XXX , kernel <- kernel * 1.0 + # You can easily set d1 = -200, d1 = -100 to remove this taper. + depth_taper : [-1e+07, -1e+07] + +################################################# +# relocation parameters setting # +################################################# +relocation: # update earthquake hypocenter and origin time (when run_mode : 2 and 3) + min_Ndata: 4 # if the number of data of the earthquake is less than , the earthquake will not be relocated. defaut value: 4 + + # relocation_strategy + step_length : 0.01 # step length of relocation perturbation at each iteration. 0.01 means maximum 1% perturbation for each iteration. + step_length_decay : 0.9 # if objective function increase, step size -> step length * step_length_decay. default: 0.9 + rescaling_dep_lat_lon_ortime : [10, 1, 1, 0.5] # The perturbation is related to . Unit: km,km,km,second + max_change_dep_lat_lon_ortime : [10, 1, 1, 0.5] # the change of dep,lat,lon,ortime do not exceed max_change. Unit: km,km,km,second + max_iterations : 501 # maximum number of iterations for relocation + tol_gradient : 0.001 # if the norm of gradient is smaller than the tolerance, the iteration of relocation terminates + + # -------------- using absolute traveltime data -------------- + abs_time: + use_abs_time : false # 'yes' for using absolute traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [0, 0, 0, 0] # XXX is the absolute traveltime residual (second) = abs(t^{obs}_{n,i} - t^{syn}_{n,j}) + distance_weight : [0, 0, 0, 0] # XXX is epicenter distance (km) between the source and receiver related to the data + + # -------------- using common receiver differential traveltime data -------------- + cr_dif_time: + use_cr_time : false # 'yes' for using common receiver differential traveltime data to update model parameters; 'no' for not using (no need to set parameters in this section) + residual_weight : [0, 0, 0, 0] # XXX is the common receiver differential traveltime residual (second) = abs(t^{obs}_{n,i} - t^{obs}_{m,i} - t^{syn}_{n,i} + t^{syn}_{m,i}) + azimuthal_weight : [0, 0, 0, 0] # XXX is the azimuth difference between two separate sources related to the common receiver. + + + # -------------- global weight of different types of data (to balance the weight of different data) -------------- + global_weight: + balance_data_weight: false # yes: over the total weight of the each type of the data. no: use original weight (below weight for each type of data needs to be set) + abs_time_local_weight: 1 # weight of absolute traveltime data for relocation after balance, default: 1.0 + cr_dif_time_local_weight: 1 # weight of common receiver differential traveltime data for relocation after balance, default: 1.0 + +#################################################################### +# inversion strategy for tomography and relocation # +#################################################################### +inversion_strategy: # update model parameters and earthquake hypocenter iteratively (when run_mode : 3) + + inv_mode : 0 # 0 for update model parameters and relocation iteratively. (other options for future work) + + # for inv_mode : 0, parameters below are required + inv_mode_0: # update model for steps, then update location for steps, and repeat the process for loops. + model_update_N_iter : 1 + relocation_N_iter : 1 + max_loop : 10 + + +# --- parameters for core solver --------------------------------------------------------- +# --- please do not change the following parameters unless you know what you are doing --- + +######################################################################## +# Scheme of Eikonal solver (fast sweeping method) # +######################################################################## +calculation: + convergence_tolerance: 0.0001 # threshold value for checking the convergence for each forward/adjoint run + max_iterations: 500 # number of maximum iteration for each forward/adjoint run + stencil_order: 3 # order of stencil, 1 or 3 + stencil_type: 0 # 0: , 1: first-order upwind scheme (only sweep_type 0 is supported) + sweep_type: 1 # 0: legacy, 1: cuthill-mckee with shm parallelization diff --git a/utils/src_rec_file_helper.py b/utils/src_rec_file_helper.py new file mode 100644 index 0000000..b7942dd --- /dev/null +++ b/utils/src_rec_file_helper.py @@ -0,0 +1,357 @@ +# class for storing one event data + + +class AttSrcRec: + _id_src = None + _id_rec = None + _year = None + _month = None + _day = None + _hour = None + _min = None + _sec = None + _lat = None + _lon = None + _dep = None + _mag = None + _nrec = None + _id_event = None + _data_source = None + _phase = None + _epi_dist = None + _arr_time = None + _name_rec = None + + def __init__(self, + id_src = None, + id_rec = None, + year = None, + month = None, + day = None, + hour = None, + _min = None, + sec = None, + lat = None, + lon = None, + dep = None, + mag = None, + nrec = None, + id_event = None, + data_source= None, + phase = None, + epi_dist = None, + arr_time = None, + name_rec = None): + + + self._id_src = id_src + self._id_rec = id_rec + self._year = year + self._month = month + self._day = day + self._hour = hour + self._min = _min + self._sec = sec + self._lat = lat + self._lon = lon + self._dep = dep + self._mag = mag + self._nrec = nrec + self._id_event = id_event + self._data_source = data_source + self._phase = phase + self._epi_dist = epi_dist + self._arr_time = arr_time + self._name_rec = name_rec + + +def convert_to_pandas_df(event_list): + # conveert event_list to pandas dataframe + import pandas as pd + import datetime + + df_ev = pd.DataFrame() + + list_id_src = [] + list_id_rec = [] + list_year = [] + list_month = [] + list_day = [] + list_hour = [] + list__min = [] + list_sec = [] + list_lat = [] + list_lon = [] + list_dep = [] + list_mag = [] + list_nrec = [] + list_id_event = [] + list_data_source= [] + list_phase = [] + list_epi_dist = [] + list_arr_time = [] + list_name_rec = [] + list_datetime = [] + + for ev in event_list: + list_id_src.append(ev._id_src) + list_id_rec.append(ev._id_rec) + list_year.append(ev._year) + list_month.append(ev._month) + list_day.append(ev._day) + list_hour.append(ev._hour) + list__min.append(ev._min) + list_sec.append(ev._sec) + list_lat.append(ev._lat) + list_lon.append(ev._lon) + list_dep.append(ev._dep) + list_mag.append(ev._mag) + list_nrec.append(ev._nrec) + list_id_event.append(ev._id_event) + list_data_source.append(ev._data_source) + list_phase.append(ev._phase) + list_epi_dist.append(ev._epi_dist) + list_arr_time.append(ev._arr_time) + list_name_rec.append(ev._name_rec) + try: + date_this = datetime.datetime(ev._year, ev._month, ev._day, ev._hour, ev._min, int(ev._sec)) + except: + date_this = None + + list_datetime.append(date_this) + + # convert all the lists to pandas series + df_ev['id_src'] = pd.Series(list_id_src) + df_ev['id_rec'] = pd.Series(list_id_rec) + df_ev['year'] = pd.Series(list_year) + df_ev['month'] = pd.Series(list_month) + df_ev['day'] = pd.Series(list_day) + df_ev['hour'] = pd.Series(list_hour) + df_ev['min'] = pd.Series(list__min) + df_ev['sec'] = pd.Series(list_sec) + df_ev['lat'] = pd.Series(list_lat) + df_ev['lon'] = pd.Series(list_lon) + df_ev['dep'] = pd.Series(list_dep) + df_ev['mag'] = pd.Series(list_mag) + df_ev['nrec'] = pd.Series(list_nrec) + df_ev['id_event'] = pd.Series(list_id_event) + df_ev['data_source']= pd.Series(list_data_source) + df_ev['phase'] = pd.Series(list_phase) + df_ev['epi_dist'] = pd.Series(list_epi_dist) + df_ev['arr_time'] = pd.Series(list_arr_time) + df_ev['name_rec'] = pd.Series(list_name_rec) + df_ev['datetime'] = pd.Series(list_datetime) + + return df_ev + +# read file + +def read_src_rec_file(fpath, two_station_names=False, data_source_flag=0, id_src_offset=0, no_epi_dist=False): + #fpath = "./src_rec_test_out.dat" + + print ("read file: ", fpath) + event_list = [] + rec_list = [] + + with open(fpath, "r") as f: + lines = f.readlines() + + cc = 0 + nc = 0 + i_src = 0 + + # parse + for iline, line in enumerate(lines): + #print(line) + + if line.startswith("#"): + continue + else: + if cc == 0: + try: + # firstly source line is read + ll = line.split() + + #src_id = int(ll[0]) + src_id = i_src + id_src_offset + src_year = int(ll[1]) + src_month = int(ll[2]) + src_day = int(ll[3]) + src_hour = int(ll[4]) + src_min = int(ll[5]) + src_sec = float(ll[6]) + src_lat = float(ll[7]) + src_lon = float(ll[8]) + src_dep = float(ll[9]) + src_mag = float(ll[10]) + src_nrec = int(ll[11]) + src_id_event = ll[12] + + + nrec_tmp = src_nrec + + # store source + if (nrec_tmp != 0): + + #src = AttEvent(src_id, src_year, src_month, src_day, src_hour, src_min, src_sec, src_lat, src_lon, src_dep, src_mag, src_nrec, src_id_event, data_source_flag) + + src = AttSrcRec(src_id, None, src_year, src_month, src_day, src_hour, src_min, src_sec, src_lat, src_lon, src_dep, src_mag, src_nrec, src_id_event, data_source_flag, None, None, None, None) + event_list.append(src) + + cc+=1 + else: + pass + except: + pass + else: + try: + # read rec line + ll = line.split() + + if(not two_station_names): + #src_id = int(ll[0]) + src_id = i_src + id_src_offset + rec_id = int(ll[1]) + rec_name = ll[2] + rec_lat = float(ll[3]) + rec_lon = float(ll[4]) + rec_elev = float(ll[5]) + rec_phase = ll[6] + if no_epi_dist: + rec_epi_dist = None + rec_arr_time = float(ll[7]) + else: + rec_epi_dist = float(ll[7]) + rec_arr_time = float(ll[8]) + else: + #src_id = int(ll[0]) + src_id = i_src + id_src_offset + rec_id = int(ll[1]) + rec_name = ll[2] + "_" + ll[3] + rec_lat = float(ll[4]) + rec_lon = float(ll[5]) + rec_elev = float(ll[6]) + rec_phase = ll[7] + if no_epi_dist: + rec_epi_dist = None + rec_arr_time = float(ll[8]) + else: + rec_epi_dist = float(ll[8]) + rec_arr_time = float(ll[9]) + + # store rec + #rec = AttArrival(src_id, rec_id, rec_name, rec_lat, rec_lon, rec_elev, rec_phase, rec_epi_dist, rec_arr_time) + #event_list[i_src].add_rec(rec) + rec = AttSrcRec(src_id, rec_id, None, None, None, None, None, None, rec_lat, rec_lon, rec_elev, None, None, None, data_source_flag, rec_phase, rec_epi_dist, rec_arr_time, rec_name) + rec_list.append(rec) + + nc+=1 + except: + print("error in line: ", iline) + print("error in line: " + line) + #return None + + cc+=1 + + if cc > nrec_tmp: + cc = 0 + i_src += 1 + + if nc == 0: + print("error: no rec found") + # erase last event + event_list.pop() + i_src -= 1 + + nc = 0 + + + # return length of event_list + print("number of events: ", len(event_list)) + print("number of recs: ", len(rec_list)) + + df_ev = convert_to_pandas_df(event_list) + df_rec = convert_to_pandas_df(rec_list) + + + return df_ev, df_rec + + +def write_src_rec_file(df_events, df_recs, fpath, no_epi_dist=True): + + print ("write file: ", fpath) + + f = open(fpath, 'w') + + import tqdm + + for i in tqdm.tqdm(range(len(df_events))): + # receivers of this event + recs_this_ev = df_recs[df_recs['id_src'] == df_events['id_src'].iloc[i]] + nrecs = len(recs_this_ev) + + f.write("{} {} {} {} {} {} {} {} {} {} {} {} {}\n".format(i, + df_events['year'].iloc[i], + df_events['month'].iloc[i], + df_events['day'].iloc[i], + df_events['hour'].iloc[i], + df_events['min'].iloc[i], + df_events['sec'].iloc[i], + df_events['lat'].iloc[i], + df_events['lon'].iloc[i], + df_events['dep'].iloc[i], + df_events['mag'].iloc[i], + nrecs, + df_events['id_event'].iloc[i])) + + # write receivers + for j in range(len(recs_this_ev)): + if no_epi_dist: + f.write(" {} {} {} {} {} {} {} {}\n".format( i, + recs_this_ev['id_rec'].iloc[j], + recs_this_ev['name_rec'].iloc[j], + recs_this_ev['lat'].iloc[j], + recs_this_ev['lon'].iloc[j], + recs_this_ev['dep'].iloc[j], + recs_this_ev['phase'].iloc[j], + recs_this_ev['arr_time'].iloc[j])) + else: + f.write(" {} {} {} {} {} {} {} {} {}\n".format( i, + recs_this_ev['id_rec'].iloc[j], + recs_this_ev['name_rec'].iloc[j], + recs_this_ev['lat'].iloc[j], + recs_this_ev['lon'].iloc[j], + recs_this_ev['dep'].iloc[j], + recs_this_ev['phase'].iloc[j], + recs_this_ev['epi_dist'].iloc[j], + recs_this_ev['arr_time'].iloc[j])) + + #break + + f.close() + + + +if __name__ == "__main__": + event_list = read_src_rec_file("./src_rec_test_out.dat") + print(event_list[0].rec_list[0].name_rec) + print(event_list[0].rec_list[0].epi_dist) + print(event_list[0].rec_list[0].arr_time) + print(event_list[0].rec_list[0].id_rec) + print(event_list[0].rec_list[0].id_src) + print(event_list[0].rec_list[0].lat) + print(event_list[0].rec_list[0].lon) + print(event_list[0].rec_list[0].dep) + print(event_list[0].rec_list[0].phase) + print(event_list[0].rec_list[0].arr_time) + print(event_list[0].rec_list[1].name_rec) + print(event_list[0].rec_list[1].arr_time) + print(event_list[0].rec_list[1].id_rec) + print(event_list[0].rec_list[1].id_src) + print(event_list[0].rec_list[1].lat) + print(event_list[0].rec_list[1].lon) + print(event_list[0].rec_list[1].dep) + print(event_list[0].rec_list[1].phase) + print(event_list[0].rec_list[1].arr_time) + print(event_list[0].rec_list[2].name_rec) + print(event_list[0].rec_list[2].epi_dist) \ No newline at end of file diff --git a/utils/tomoatt_data_retrieval.py b/utils/tomoatt_data_retrieval.py new file mode 100644 index 0000000..ebed072 --- /dev/null +++ b/utils/tomoatt_data_retrieval.py @@ -0,0 +1,228 @@ +# functinos for post-processing output data in h5 file + +import numpy +import h5py + + +def get_data_from_h5(fpath, fpath_grid, dataset_name, nr_glob, nt_glob, np_glob, ndiv_r, ndiv_t, ndiv_p, verbose=False): + """ + Output arrays has one overlapping layer between adjusted subdomains. + This function will skip those layers and reconstruct the entire grid dataset. + + fpath: path to field data file + fpaht_grid: path to grid data file + dataset_name: name of dataset in h5 file + nr_glob: number of grid points in r direction + nt_glob: number of grid points in t direction + np_glob: number of grid points in p direction + ndiv_r: number of subdomains in r direction + ndiv_t: number of subdomains in t direction + ndiv_p: number of subdomains in p direction + verbose: print out information + + """ + # total number of subdomains + n_sub = ndiv_r*ndiv_t*ndiv_p + + # total points on each direction with overlap + nr_total_glob = nr_glob + ndiv_r - 1 + nt_total_glob = nt_glob + ndiv_t - 1 + np_total_glob = np_glob + ndiv_p - 1 + + # prepare a 3D array to store the data + data_glob = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_r = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_t = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_p = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + + # open grid data file + fgrid = h5py.File(fpath_grid, 'r') + + # open field data file + fdata = h5py.File(fpath, 'r') + + #try: + # load data data by each subdomain + + # offset + offset = 0 + + for ir_sub in range(ndiv_r): + for it_sub in range(ndiv_t): + for ip_sub in range(ndiv_p): + + # number of data point for this sub domain + nr_sub = nr_glob//ndiv_r + nt_sub = nt_glob//ndiv_t + np_sub = np_glob//ndiv_p + + # offset for each direction + offset_r = ir_sub*nr_sub + offset_t = it_sub*nt_sub + offset_p = ip_sub*np_sub + + # add modulus to the last subdomains + if ir_sub == ndiv_r-1: + nr_sub += nr_glob%ndiv_r + if it_sub == ndiv_t-1: + nt_sub += nt_glob%ndiv_t + if ip_sub == ndiv_p-1: + np_sub += np_glob%ndiv_p + + # add overlap layer if this subdomain is not the last one for each direction + if ir_sub != ndiv_r-1: + nr_sub += 1 + if it_sub != ndiv_t-1: + nt_sub += 1 + if ip_sub != ndiv_p-1: + np_sub += 1 + + # number of data point for this sub domain + n_points_total_sub = nr_sub*nt_sub*np_sub + + # load data + data_sub = fdata[dataset_name][offset:offset+n_points_total_sub] + data_sub_p = fgrid["/Mesh/node_coords_p"][offset:offset+n_points_total_sub] + data_sub_t = fgrid["/Mesh/node_coords_t"][offset:offset+n_points_total_sub] + data_sub_r = fgrid["/Mesh/node_coords_r"][offset:offset+n_points_total_sub] + + # reshape data + data_sub = data_sub.reshape(nr_sub, nt_sub, np_sub) + data_sub_p = data_sub_p.reshape(nr_sub, nt_sub, np_sub) + data_sub_t = data_sub_t.reshape(nr_sub, nt_sub, np_sub) + data_sub_r = data_sub_r.reshape(nr_sub, nt_sub, np_sub) + + + # put those data in global 3d array + data_glob[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = data_sub + grid_glob_p[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = data_sub_p + grid_glob_t[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = data_sub_t + grid_glob_r[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = data_sub_r + + # update offset + offset += n_points_total_sub + + + return data_glob, grid_glob_r, grid_glob_t, grid_glob_p + + #except: + # fdata.close() + # fgrid.close() + # print("error occured while reading file.") + + # return -1 + + +# output arrays has one overlapping layer between adjusted subdomains +# this function will skip those layers and reconstruct the entire grid dataset +def get_data_from_ascii(fpath, fpath_grid, nr_glob, nt_glob, np_glob, ndiv_r, ndiv_t, ndiv_p, verbose=False): + """ + + fpath: path to ascii data file + fpath_grid: path to ascii grid data file + nr_glob: number of grid points in r direction + nt_glob: number of grid points in t direction + np_glob: number of grid points in p direction + ndiv_r: number of subdomains in r direction + ndiv_t: number of subdomains in t direction + ndiv_p: number of subdomains in p direction + verbose: print out information + + """ + # total number of subdomains + n_sub = ndiv_r*ndiv_t*ndiv_p + + # total points on each direction with overlap + nr_total_glob = nr_glob + ndiv_r - 1 + nt_total_glob = nt_glob + ndiv_t - 1 + np_total_glob = np_glob + ndiv_p - 1 + + # prepare a 3D array to store the data + data_glob = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_r = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_t = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + grid_glob_p = numpy.zeros((nr_glob,nt_glob,np_glob), dtype=numpy.float64) + + # read data + data_tmp = numpy.loadtxt(fpath) + grid_tmp = numpy.loadtxt(fpath_grid) + + # load data data by each subdomain + + # offset + offset = 0 + + for ir_sub in range(ndiv_r): + for it_sub in range(ndiv_t): + for ip_sub in range(ndiv_p): + + # number of data point for this sub domain + nr_sub = nr_glob//ndiv_r + nt_sub = nt_glob//ndiv_t + np_sub = np_glob//ndiv_p + + # offset for each direction + offset_r = ir_sub*nr_sub + offset_t = it_sub*nt_sub + offset_p = ip_sub*np_sub + + # add modulus to the last subdomains + if ir_sub == ndiv_r-1: + nr_sub += nr_glob%ndiv_r + if it_sub == ndiv_t-1: + nt_sub += nt_glob%ndiv_t + if ip_sub == ndiv_p-1: + np_sub += np_glob%ndiv_p + + # add overlap layer if this subdomain is not the last one for each direction + if ir_sub != ndiv_r-1: + nr_sub += 1 + if it_sub != ndiv_t-1: + nt_sub += 1 + if ip_sub != ndiv_p-1: + np_sub += 1 + + # number of data point for this sub domain + n_points_total_sub = nr_sub*nt_sub*np_sub + + # load data + data_sub = data_tmp[offset:offset+n_points_total_sub] + grid_sub_p = grid_tmp[offset:offset+n_points_total_sub,0] + grid_sub_t = grid_tmp[offset:offset+n_points_total_sub,1] + grid_sub_r = grid_tmp[offset:offset+n_points_total_sub,2] + + # reshape data + data_sub = data_sub.reshape(nr_sub, nt_sub, np_sub) + grid_sub_p = grid_sub_p.reshape(nr_sub, nt_sub, np_sub) + grid_sub_t = grid_sub_t.reshape(nr_sub, nt_sub, np_sub) + grid_sub_r = grid_sub_r.reshape(nr_sub, nt_sub, np_sub) + + # put those data in global 3d array + data_glob[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = data_sub + grid_glob_p[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = grid_sub_p + grid_glob_t[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = grid_sub_t + grid_glob_r[offset_r:offset_r+nr_sub, offset_t:offset_t+nt_sub, offset_p:offset_p+np_sub] = grid_sub_r + + # update offset + offset += n_points_total_sub + + + return data_glob, grid_glob_r, grid_glob_t, grid_glob_p + + + + + + +if __name__ == '__main__': + + # examples + fpath = './OUTPUT_FILES/out_data_sim_0.h5' + fpath_grid = './OUPUT_FILES/out_data_grid.h5' + nr = 10 + nt = 10 + np = 10 + ndiv_r = 2 + ndiv_t = 2 + ndiv_p = 2 + Ks_tomoatt = get_data_from_h5(fpath, fpath_grid, "Data/Ks_inv_0000", nr, nt, np, ndiv_r, ndiv_t, ndiv_p, verbose=True) \ No newline at end of file