From f9d52e4db68f714ce7c7bff3cd27b2109b050907 Mon Sep 17 00:00:00 2001 From: Davide Torlo Date: Tue, 23 Mar 2021 17:05:29 +0100 Subject: [PATCH 01/10] Updated 1D code. Models available: linear transport, lineal transport damped, Burgers, SW, Euler, waves. There are also cubature elements (Lagrange in gauss lobatto points) There is also a source that must be defined in variable_def, and utils can help defining it. See SW for an example. Tested convergence on lin Scalar, Burges,Euler, more or less correct. Scheme 5 for shocks is working on Sod Euler, Dam Break (wet) SW. --- Make/Makefile.2D.gfortran | 8 +- ReadMe.aux | 5 + ReadMe.log | 103 +++ ReadMe.pdf | Bin 0 -> 87432 bytes ReadMe.synctex.gz | Bin 0 -> 8210 bytes ReadMe.tex | 4 +- ReadMe.tex.bak | 44 ++ Src1D/Model.f90 | 4 +- Src1D/elements_1D.f90 | 405 ++++++++-- Src1D/geometry.f90 | 116 ++- Src1D/init_bc_burgers.f90 | 142 ++++ Src1D/init_bc_euler.f90 | 248 ++++--- Src1D/init_bc_scalar.f90 | 145 ++++ Src1D/init_bc_scalar_1D.f90 | 160 ---- Src1D/init_bc_sw.f90 | 438 +++++++++++ Src1D/init_bc_wave_1D.f90 | 34 +- Src1D/integration/testouille.f90 | 211 ------ Src1D/integration/testouille.f90~ | 211 ------ Src1D/main_dec.f90 | 127 +++- Src1D/param2d.f90 | 7 +- Src1D/postprocessing.f90 | 59 +- Src1D/scheme.f90 | 111 ++- Src1D/test/Makefile.1D.gfortran | 69 -- Src1D/test/Makefile.1D.gfortran~ | 69 -- Src1D/test/Makefile.1D.ifort | 69 -- Src1D/test/Makefile.1D.ifort~ | 69 -- Src1D/test/algebra.f90 | 274 ------- Src1D/test/algebra.mod | Bin 2364 -> 0 bytes Src1D/test/arete_class.mod | Bin 6559 -> 0 bytes Src1D/test/aretes.f90 | 108 --- Src1D/test/bin1D/main.out | Bin 896688 -> 0 bytes Src1D/test/don | 13 - Src1D/test/don~ | 13 - Src1D/test/element_class.mod | Bin 41795 -> 0 bytes Src1D/test/elements_1D.f90 | 695 ------------------ Src1D/test/elements_1D.f90~ | 695 ------------------ Src1D/test/geometry.f90 | 154 ---- Src1D/test/geometry.mod | Bin 32063 -> 0 bytes Src1D/test/gmon.out | Bin 317169 -> 0 bytes Src1D/test/main.f90 | 129 ---- Src1D/test/main.f90~ | 124 ---- Src1D/test/obj1D/algebra.o | Bin 14120 -> 0 bytes Src1D/test/obj1D/aretes.o | Bin 4280 -> 0 bytes Src1D/test/obj1D/elements_1D.o | Bin 39152 -> 0 bytes Src1D/test/obj1D/geometry.o | Bin 16248 -> 0 bytes Src1D/test/obj1D/overloading.o | Bin 26168 -> 0 bytes Src1D/test/obj1D/param2d.o | Bin 1464 -> 0 bytes Src1D/test/obj1D/precision.o | Bin 1472 -> 0 bytes Src1D/test/obj1D/variable_def_scalar_1D.o | Bin 7936 -> 0 bytes Src1D/test/overloading.f90 | 342 --------- Src1D/test/overloading.mod | Bin 26632 -> 0 bytes Src1D/test/param2d.f90 | 57 -- Src1D/test/param2d.mod | Bin 50314 -> 0 bytes Src1D/test/precision.f90 | 8 - Src1D/test/precision.mod | Bin 692 -> 0 bytes Src1D/test/sol | 4 - Src1D/test/variable_def.mod | Bin 7489 -> 0 bytes Src1D/test/variable_def_scalar_1D.f90 | 211 ------ Src1D/timestepping.f90 | 393 +++++++++- Src1D/utils.f90 | 61 +- Src1D/utils_sw.f90 | 153 ++++ Src1D/variable_def_burgers.f90 | 154 ++++ Src1D/variable_def_damped_scalar.f90 | 152 ++++ Src1D/variable_def_euler.f90 | 39 +- Src1D/variable_def_scalar.f90 | 156 ++++ Src1D/variable_def_scalar_1D.f90 | 214 ------ Src1D/variable_def_scalar_1D.f90~ | 214 ------ Src1D/variable_def_sw.f90 | 288 ++++++++ Src1D/variable_def_wave_1D.f90 | 120 +-- Test1D/Makefile.1D.gfortran | 106 +++ Test1D/Test1D_Burgers/Data/don1d | 12 + .../classic/scheme4/B1/Data/don1d | 12 + .../classic/scheme4/B2/Data/don1d | 12 + .../classic/scheme4/B3/Data/don1d | 12 + .../classic/scheme4/C1/Data/don1d | 12 + .../classic/scheme4/C2/Data/don1d | 12 + .../classic/scheme4/C3/Data/don1d | 12 + .../classic/scheme4/C4/Data/don1d | 12 + Test1D/Test1D_Burgers/convergence_B.py | 148 ++++ Test1D/Test1D_Burgers/convergence_C.py | 143 ++++ .../h_convergence_B_scheme4.pdf | Bin 0 -> 166299 bytes .../h_convergence_C_scheme4.pdf | Bin 0 -> 166542 bytes Test1D/Test1D_Burgers/run_tests_B.py | 111 +++ Test1D/Test1D_Burgers/run_tests_C.py | 111 +++ Test1D/Test1D_Euler_Sod/Data/don1d | 12 + Test1D/Test1D_Euler_convergence/Data/don1d | 12 + .../classic/scheme4/B1/Data/don1d | 12 + .../classic/scheme4/B2/Data/don1d | 12 + .../classic/scheme4/B3/Data/don1d | 12 + .../classic/scheme4/B4/Data/don1d | 12 + .../classic/scheme4/C1/Data/don1d | 12 + .../classic/scheme4/C2/Data/don1d | 12 + .../classic/scheme4/C3/Data/don1d | 12 + .../classic/scheme4/C4/Data/don1d | 12 + .../Test1D_Euler_convergence/convergence.py | 96 +++ .../Test1D_Euler_convergence/convergence_B.py | 136 ++++ .../Test1D_Euler_convergence/convergence_C.py | 137 ++++ .../convergence_no_an_B.py | 124 ++++ .../convergence_no_an_Pgl.py | 122 +++ Test1D/Test1D_Euler_convergence/exact_sol.py | 97 +++ Test1D/Test1D_Euler_convergence/exact_sol.pyc | Bin 0 -> 3462 bytes .../p_convergence_B_scheme4.pdf | Bin 0 -> 166401 bytes .../p_convergence_C_scheme4.pdf | Bin 0 -> 166724 bytes .../rho_convergence_B_scheme4.pdf | Bin 0 -> 166399 bytes .../rho_convergence_C_scheme4.pdf | Bin 0 -> 166596 bytes .../Test1D_Euler_convergence/run_tests_B.py | 109 +++ .../Test1D_Euler_convergence/run_tests_C.py | 109 +++ .../scheme4_p_convergence_no_anB.pdf | Bin 0 -> 166235 bytes .../scheme4_p_convergence_no_an_Pgl.pdf | Bin 0 -> 166523 bytes .../scheme4_rho_convergence_no_anB.pdf | Bin 0 -> 166235 bytes .../scheme4_rho_convergence_no_an_Pgl.pdf | Bin 0 -> 166389 bytes .../scheme4_v_convergence_no_anB.pdf | Bin 0 -> 166180 bytes .../scheme4_v_convergence_no_an_Pgl.pdf | Bin 0 -> 166618 bytes .../v_convergence_B_scheme4.pdf | Bin 0 -> 166414 bytes .../v_convergence_C_scheme4.pdf | Bin 0 -> 166800 bytes Test1D/Test1D_SW_WetDamBreak/Data/don1d | 12 + Test1D/Test1D_SW_smooth_no_bath/Data/don1d | 12 + Test1D/Test1D_damped_linear/Data/don1d | 12 + .../classic/scheme4/B1/Data/don1d | 12 + .../classic/scheme4/B2/Data/don1d | 12 + .../classic/scheme4/B3/Data/don1d | 12 + .../classic/scheme4/B4/Data/don1d | 12 + .../classic/scheme4/C1/Data/don1d | 12 + .../classic/scheme4/C2/Data/don1d | 12 + .../classic/scheme4/C3/Data/don1d | 12 + .../classic/scheme4/C4/Data/don1d | 12 + Test1D/Test1D_damped_linear/convergence_B.py | 146 ++++ Test1D/Test1D_damped_linear/convergence_C.py | 146 ++++ .../h_convergence_B_scheme4.pdf | Bin 0 -> 166200 bytes .../h_convergence_C_scheme4.pdf | Bin 0 -> 166312 bytes Test1D/Test1D_damped_linear/run_tests_B.py | 109 +++ Test1D/Test1D_damped_linear/run_tests_C.py | 108 +++ Test1D/Test1D_linearScalar/Data/don1d | 12 + .../classic/scheme4/B1/Data/don1d | 12 + .../classic/scheme4/B2/Data/don1d | 12 + .../classic/scheme4/B3/Data/don1d | 12 + .../classic/scheme4/B4/Data/don1d | 12 + .../classic/scheme4/C1/Data/don1d | 12 + .../classic/scheme4/C2/Data/don1d | 12 + .../classic/scheme4/C3/Data/don1d | 12 + .../classic/scheme4/C4/Data/don1d | 12 + Test1D/Test1D_linearScalar/convergence_B.py | 146 ++++ Test1D/Test1D_linearScalar/convergence_C.py | 146 ++++ .../h_convergence_B_scheme4.pdf | Bin 0 -> 166201 bytes .../h_convergence_C_scheme4.pdf | Bin 0 -> 166278 bytes Test1D/Test1D_linearScalar/run_tests_B.py | 109 +++ Test1D/Test1D_linearScalar/run_tests_C.py | 108 +++ Test1D/Test1D_wave/Data/don1d | 12 + Test1D/viewerScripts1D/viewer1d.py | 108 +++ Test1D/viewerScripts1D/viewer1d_scalar.py | 99 +++ Test1D/viewerScripts1D/viewer1dsw.py | 116 +++ 151 files changed, 6478 insertions(+), 4509 deletions(-) create mode 100644 ReadMe.aux create mode 100644 ReadMe.log create mode 100644 ReadMe.pdf create mode 100644 ReadMe.synctex.gz create mode 100644 ReadMe.tex.bak create mode 100644 Src1D/init_bc_burgers.f90 create mode 100644 Src1D/init_bc_scalar.f90 delete mode 100644 Src1D/init_bc_scalar_1D.f90 create mode 100644 Src1D/init_bc_sw.f90 delete mode 100644 Src1D/integration/testouille.f90 delete mode 100644 Src1D/integration/testouille.f90~ delete mode 100644 Src1D/test/Makefile.1D.gfortran delete mode 100644 Src1D/test/Makefile.1D.gfortran~ delete mode 100644 Src1D/test/Makefile.1D.ifort delete mode 100644 Src1D/test/Makefile.1D.ifort~ delete mode 100755 Src1D/test/algebra.f90 delete mode 100644 Src1D/test/algebra.mod delete mode 100644 Src1D/test/arete_class.mod delete mode 100755 Src1D/test/aretes.f90 delete mode 100755 Src1D/test/bin1D/main.out delete mode 100644 Src1D/test/don delete mode 100755 Src1D/test/don~ delete mode 100644 Src1D/test/element_class.mod delete mode 100755 Src1D/test/elements_1D.f90 delete mode 100755 Src1D/test/elements_1D.f90~ delete mode 100755 Src1D/test/geometry.f90 delete mode 100644 Src1D/test/geometry.mod delete mode 100644 Src1D/test/gmon.out delete mode 100644 Src1D/test/main.f90 delete mode 100755 Src1D/test/main.f90~ delete mode 100644 Src1D/test/obj1D/algebra.o delete mode 100644 Src1D/test/obj1D/aretes.o delete mode 100644 Src1D/test/obj1D/elements_1D.o delete mode 100644 Src1D/test/obj1D/geometry.o delete mode 100644 Src1D/test/obj1D/overloading.o delete mode 100644 Src1D/test/obj1D/param2d.o delete mode 100644 Src1D/test/obj1D/precision.o delete mode 100644 Src1D/test/obj1D/variable_def_scalar_1D.o delete mode 100755 Src1D/test/overloading.f90 delete mode 100644 Src1D/test/overloading.mod delete mode 100755 Src1D/test/param2d.f90 delete mode 100644 Src1D/test/param2d.mod delete mode 100644 Src1D/test/precision.f90 delete mode 100644 Src1D/test/precision.mod delete mode 100644 Src1D/test/sol delete mode 100644 Src1D/test/variable_def.mod delete mode 100644 Src1D/test/variable_def_scalar_1D.f90 create mode 100644 Src1D/utils_sw.f90 create mode 100644 Src1D/variable_def_burgers.f90 create mode 100644 Src1D/variable_def_damped_scalar.f90 create mode 100644 Src1D/variable_def_scalar.f90 delete mode 100644 Src1D/variable_def_scalar_1D.f90 delete mode 100644 Src1D/variable_def_scalar_1D.f90~ create mode 100644 Src1D/variable_def_sw.f90 create mode 100644 Test1D/Makefile.1D.gfortran create mode 100644 Test1D/Test1D_Burgers/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/B1/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/B2/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/B3/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/C1/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/C2/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/C3/Data/don1d create mode 100644 Test1D/Test1D_Burgers/classic/scheme4/C4/Data/don1d create mode 100644 Test1D/Test1D_Burgers/convergence_B.py create mode 100644 Test1D/Test1D_Burgers/convergence_C.py create mode 100644 Test1D/Test1D_Burgers/h_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_Burgers/h_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_Burgers/run_tests_B.py create mode 100644 Test1D/Test1D_Burgers/run_tests_C.py create mode 100644 Test1D/Test1D_Euler_Sod/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/B1/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/B2/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/B3/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/B4/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/C1/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/C2/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/C3/Data/don1d create mode 100644 Test1D/Test1D_Euler_convergence/classic/scheme4/C4/Data/don1d create mode 100755 Test1D/Test1D_Euler_convergence/convergence.py create mode 100644 Test1D/Test1D_Euler_convergence/convergence_B.py create mode 100644 Test1D/Test1D_Euler_convergence/convergence_C.py create mode 100644 Test1D/Test1D_Euler_convergence/convergence_no_an_B.py create mode 100644 Test1D/Test1D_Euler_convergence/convergence_no_an_Pgl.py create mode 100755 Test1D/Test1D_Euler_convergence/exact_sol.py create mode 100644 Test1D/Test1D_Euler_convergence/exact_sol.pyc create mode 100644 Test1D/Test1D_Euler_convergence/p_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_Euler_convergence/p_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_Euler_convergence/rho_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_Euler_convergence/rho_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_Euler_convergence/run_tests_B.py create mode 100644 Test1D/Test1D_Euler_convergence/run_tests_C.py create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_p_convergence_no_anB.pdf create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_p_convergence_no_an_Pgl.pdf create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_rho_convergence_no_anB.pdf create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_rho_convergence_no_an_Pgl.pdf create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_v_convergence_no_anB.pdf create mode 100644 Test1D/Test1D_Euler_convergence/scheme4_v_convergence_no_an_Pgl.pdf create mode 100644 Test1D/Test1D_Euler_convergence/v_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_Euler_convergence/v_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_SW_WetDamBreak/Data/don1d create mode 100644 Test1D/Test1D_SW_smooth_no_bath/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/B1/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/B2/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/B3/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/B4/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/C1/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/C2/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/C3/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/classic/scheme4/C4/Data/don1d create mode 100644 Test1D/Test1D_damped_linear/convergence_B.py create mode 100644 Test1D/Test1D_damped_linear/convergence_C.py create mode 100644 Test1D/Test1D_damped_linear/h_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_damped_linear/h_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_damped_linear/run_tests_B.py create mode 100644 Test1D/Test1D_damped_linear/run_tests_C.py create mode 100644 Test1D/Test1D_linearScalar/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/B1/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/B2/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/B3/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/B4/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/C1/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/C2/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/C3/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/classic/scheme4/C4/Data/don1d create mode 100644 Test1D/Test1D_linearScalar/convergence_B.py create mode 100644 Test1D/Test1D_linearScalar/convergence_C.py create mode 100644 Test1D/Test1D_linearScalar/h_convergence_B_scheme4.pdf create mode 100644 Test1D/Test1D_linearScalar/h_convergence_C_scheme4.pdf create mode 100644 Test1D/Test1D_linearScalar/run_tests_B.py create mode 100644 Test1D/Test1D_linearScalar/run_tests_C.py create mode 100644 Test1D/Test1D_wave/Data/don1d create mode 100644 Test1D/viewerScripts1D/viewer1d.py create mode 100644 Test1D/viewerScripts1D/viewer1d_scalar.py create mode 100644 Test1D/viewerScripts1D/viewer1dsw.py diff --git a/Make/Makefile.2D.gfortran b/Make/Makefile.2D.gfortran index 91d2ca1..341950e 100644 --- a/Make/Makefile.2D.gfortran +++ b/Make/Makefile.2D.gfortran @@ -4,10 +4,10 @@ # VERSION DEBBUGGEUR -db # VERSION OPTIMISEUR F90=gfortran -OBJDIR = obj2D.2 -MODDIR = mod2D.2 -BINDIR = bin2D.2 -SRC = Src2D2.2 +OBJDIR = obj2D +MODDIR = mod2D +BINDIR = bin2D +SRC = Src2D2 OPT=-O3 LIBS=-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib diff --git a/ReadMe.aux b/ReadMe.aux new file mode 100644 index 0000000..36533fe --- /dev/null +++ b/ReadMe.aux @@ -0,0 +1,5 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {1}Compilation}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Meshes}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Run}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {4}Reference:}{1}} diff --git a/ReadMe.log b/ReadMe.log new file mode 100644 index 0000000..f2cd560 --- /dev/null +++ b/ReadMe.log @@ -0,0 +1,103 @@ +This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=pdflatex 2020.6.26) 19 MAR 2021 15:46 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**ReadMe.tex +(./ReadMe.tex +LaTeX2e <2018-04-01> patch level 5 + +(/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-dist/tex/latex/base/arti +cle.cls +Document Class: article 2014/09/29 v1.4h Standard LaTeX document class + +(/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-dist/tex/latex/base/size +10.clo +File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option) +) +\c@part=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-dist/tex/latex/preprint/ +fullpage.sty +Package: fullpage 1999/02/23 1.1 (PWD) +\FP@margin=\skip43 +) +(/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-dist/tex/latex/url/url.s +ty +\Urlmuskip=\muskip10 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) (./ReadMe.aux) +\openout1 = `ReadMe.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3. +LaTeX Font Info: ... okay on input line 3. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 9. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 9. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 9. +LaTeX Font Info: Try loading font information for OMS+cmr on input line 32. + +(/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-dist/tex/latex/base/omsc +mr.fd +File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 32. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 32. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 32. + [1 + +{/usr/sepp1.5.1/drwho/pack-a/texlive-20181114-cr/texmf-var/fonts/map/pdftex/upd +map/pdftex.map}] +Overfull \hbox (7.85497pt too wide) in paragraph at lines 39--40 +\OT1/cmr/m/n/10 ods in Ap-plied Math-e-mat-ics, v18(3), pp 327-350, 2018, doi:$ +\OT1/cmtt/m/n/10 https : / / doi . org / 10 . 1515 / cmam-[]2017-[]0056$ + [] + +[2] (./ReadMe.aux) ) +Here is how much of TeX's memory you used: + 345 strings out of 492639 + 4380 string characters out of 6117887 + 64287 words of memory out of 5000000 + 4297 multiletter control sequences out of 15000+600000 + 7448 words of font info for 27 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 23i,6n,19p,378b,263s stack positions out of 5000i,500n,10000p,200000b,80000s + +Output written on ReadMe.pdf (2 pages, 87432 bytes). +PDF statistics: + 35 PDF objects out of 1000 (max. 8388607) + 24 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/ReadMe.pdf b/ReadMe.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d68475a9c662508a1f63729fc4d2b4c400737871 GIT binary patch literal 87432 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ⅅofzn^L`?cY~B?YQqZX` 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 z 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

>WIJ$y@R3Nm zLRByVy&sOcA1^=F=OD0`o!zq`;lop{ zF`trZC6o4dN^WzCsl0%r8U$^QBBwOAtVaX0EoHO)9K0zP$%~bmJn4Nz)Lj^_z|tWasb&g8ZVCmYh>ZTuBLw~G5C^T zCKg0ii3jYF>iQ%*K>`|oQ#$4s7vZA+M`9anI`#8{bClsp&UWKL$|}gj-xVQCg?u05 zg5|)2r5l4YAH#gSmI-X+kM2v!eSL48qzGu%eJ}8yG=jZ1*bV!^c_{bK&M#Jhl)C(l_Cp!#4W*Y)6KR#0 z5YJgBK106M7R|LzquvK&BQwvZczwTJ*s*P(RQWFKb#v+rrI}O5%L$*cZgrac(yx;$Gs86+6Kzu{ zC0e)`dvIheBG-z%JU|IUsH2Q9HyE+)8rc92W@Kom06Sk!#J~NLmUqi0%0O28`K$UL z6y?{Y53{2D0qD>52|8(ojo*1cpuEdS`n~f@NNx!h$u1Dl;-*Xk-@}0ym11vr!2^_v z+_Y4VfF53BSJ4Yz1T$mBlfqH^;!N=q_n=1I1g;3OH0^dOZ5ivD^pgQGC_Hv$%K~*@ zEp%RFq;ymM+{5Stb|sM^3(G}1VUXLm&Wm_mU%AgYfsrRDp0EWpr}D*5Kr5Fl(4_Em zg;_6PS0hlSD&*E770l}%nsHj>y%Z3$1;f=|4)5gYzGkrplN)4aH=dfeV?Gv|LX$|t z@lVA5o(&)iwOzPu#U^La;BHcAyod7c?UQnzrTWg-NeYDO@9CpN5CpO)5q^`OlDcWr zb;Q3schU%hOVDI?$%`?4JlV(kyyCBGzq#tNeFh`p?-fxxdk?zDQNq9{g=k1aSb1X3 z&vIWLkp<%0FZVNaM&L*^OFsp{!bwMze=@SGb*;nlbwWk_ymaFj;Xk$;KO-O6#vER6Q+ta6L&(p$K*5Fx`w-)TyK=6H4Y>7w8>CQe zfUv%I-q^k#PPR+q;zPASJ|n4Ak_9uxFLk5Z?3O=@x`^be*kIFOh%*eM5&h(h7zU?j z^9v8HgnyQ7DqfTsr?I&suz(rLTyLenF8-y&@ow82kIr)}=s21lk=32u@?~=}nQ|c;&OoQs|ag%t@pzccx{T9Cg%gCY{kZb12E)*jrzCjBuZgF-IjHY(FLfKFI~LV4DG;N|9<#S`lW z;M;fJcb1nLwC(1-Iur(6fH(av5O0*KOmU_f4^z5`epomQhh=|$9v-vLUUZo}CNsTt zx?{SVA@REBdU1uC!i&olfhmtm9%Y4paL3dDE=of^t7Fj3eyPxi^*W5-2e%3hCQtIWdG)3tao5kF4hE93(Qjg*)VT_$rC+8A zYu`9K(|syVZhN)=BqZs=hC8(#^b2Y)4Tel3%}hMwZ(Uhe+e~;x$NT9`r`pYpq-M># zL7&>cp;J_Ra4CdApGiQdm@B5#2}eSYT=Qwkw|ea2qV{1EiMVx1$KktKn0f4KZIL=U zwwEZ1oIu{p;EPDWi4mo%bcxaoDA`91-O`LZHG!-esUO{LgA9eWiEr{jgI5rzCns`{ zs6HhUQ$7v*%W%G@Rpt2C;F{Lb7MzenUw5&4mBfFej1XN>LwB9oJgz=;R@z#vp+)3V zG3)^4L9>SmkMD^m5nF4+ee&K98N1J5XO4_i-HnQ#GjT}&p>$Vhjj{V<;g=E=a^QHt zlA&Ht@n_p1;7rZp71#_A*&8gtX`x#~x}ReB6dTo>IjQY1XeATKlj-qDOM*ik&gNPd zcyFUuXXK7k*a)^F&mIQH!F;r^+iKdgZvOj}^#)ZtEj@9_i2XN*&b)>l2(m=WKt0Z8 z?9P%0J1;w^Y+n*0E2GG-4Kwg7`~0ERTVg{7u28j0oAivZKH^Rm7F}Oq(M~Aih>yMH zwIJZpkL0P{v8VhFQ1yQAE#e?jb1w>@yT&le8)9^n5UM5jUjnqktGlPiLLYAFi7PP7Y?Y$!lKcgcPI8mP1qbSvC#Z-S zoPK|sZ$wK3%_wovCPFH$9zY$ejyZ(ydKb%uzV9>Iz0d!TAO%v?o=|eWv2}GKTb)pV zp;*xaJ6ILN5qM*}mSLERu*XwNiHR^*HcHX3 zDtb)P?}eZg^Mokm#HA*WV@q-$d`WH^Jy(}*7avMZ{l)N$Fh2t|S{(07o*fyz{|CZJ zz~-97dwy04|KV9-P0eCFeH7ztEEQ?BVkecZQI`B8O_@V4vjUg<6%LHj-?m^A#b&?3 ziee<)s*>=O6m4pgL@F-v@w?5ZoX~Mhfk^nlx9*Q9OwnL-``me2=>o^ve%6i68;v&Q z%4`rw6045}h|@4$Ea}|*916h*m{TJSMa-maL4~5n)dyHHrEsz5hB7jQ6kg;7Q!Wn= zUC#^6ZixB|N!smQ{cA;A*^Y(e(ob-4`y1_}hSXCHMTr?k7j9%GO6xZC6$T6}crRA1 zINgf9`#l55(bzPz zeNj^*D-_|*;!WC+-0L5))w7ofNixI%X1fe4|VA+_QegOfdxb(JW_u4 zM?sMCMdd6PZBzS%MF=SM`njDH71^!~pj&Op*)H+IGFnpQ=y68jFjxeBE60?psErPK ztiV2u+FqI%u1Gp_IQh0NCYudx{%ogMD1en7Q%Tv2 za83u-EhFHj*Iz-j-KjVfqK!BS5+Tg*h1tlEkzA8^TH~O7pP~t0A{By?NWZDy^`mPY zl3!(NQA)$8IbZ9~A&H7~228oymoMCt$2+IZf_nH4bnKQ3uG@6pp=B{!T{3IUSJvj^ z(g9bt&mvf(-ut7XWRkLpp0jj*N+v|JiC}A$Fk`zMdv>yX8xG^S_C-QoKU1zZ`Pa>Pg59 zP_c$Dh5*|N_lfHs$gxQFR~(z0i^mCtFp?+4H1UE$1SsnX3WZcco#7aOF(T>5yvN`! z566MPd~+R&sWP>+Nb${)c>!pAjyd1-KEwaiNo~* z7;melMtODxtGg#c(Ru?DGubnhqHZD2F*I_=j@u8?P!oj|7g>Y5A^VF+&#nn^8(=wI ziU-!PFyM6iSTSE7{6lmgWejy-PRTC=7nPYhHe-Gl4TC-B0ti(VfWqYh`jlCVPzb2hiRT8KV*JL z=2!LF#(Bc)aJ=K|u^BpR&ETy6WHx&oDqT{29RrF23>UgY1}(lMzZ)e+n-$7rLw*4> zvL_S2D46m#xVH?YR%12dJZ6dP-Infm;k|IZ_^=$;1ifoTTa{!UZSxolj;`$uTK(bqHH@YmcLX?UA|Xn z)6W^C(bWc=FxQvxP#>js>)PB1AE(sxXz-yn0VbEFrijV`r^&skvH#`o?{6CRS{s?bH$Cv*5?z8IZy?2+kUzZWGYdo0yxSl=$BCkHS^7cQs zj#CSjv_8O(v>%&Y@Ku4`zOSY7trb;nKY-}@&S_k4mbf-yGKiGy%Qqxn(wJ1&~ zLFLXBdZb9x>|ppT5=DHRf~pujMJO&_^DWcy!T}9HR ze)-2kR;s~d6ha0|d@9zDl`PXD=Ht=ISV+3(7|&$Pjm8)1NHE2=7?VMq<5yeMbCN!! za{cYC^dvibxcEfs_B%F09jv^4)evMQ9i|ewa;z!DOSzXwWb|p~i0P0vvWi7DLjCr% zfT~cE))Qg-lO)thb`OY93fTkvS+*1*z`G$}^a7}fqW-~i-O~g%XUoF~hpq_%Hl>e- zUb*}q;tmk$bx+i(iW=MJ1}gM)TtCe{1b&qoV5rKd7qIL;lIv~O=3#E%&jgd@b}WyT z{avw8ViC(@#e=3eXrfnPw>Embv|`6-V7~?TWkNNE3di7BUYy$ja>XMg{%Vx3VGFa} zzZ*+?J|l}1VKHYY<2$jf5sE{ew7J4a0r+qvqFECyMGp>|?$o+G!wZJc;GSkan|NAR z@GipZn=PSRYJZ`5T-qBO=^X?#`j4)NLuB)7wI!1msJh8Jyz(FMJo%AQww(3AEx%%H zfhYE^1={CSf~|15D0+Sa=9e6J?Hn$fN00DDk|<0157W0Cl4{$hb*^NrcnA z>~<`Qk0q5 z-m{|aS{Yg!VGvcD>@nI42qm_=vYf0{h|N15o*!!d$>KRUn2c0-ABWq4jGPhGhl)Zy z5dEBzMGOS%+#_+_k39CkU4oPW4zkdr(GK`cu58v-vC1G2*pPGR%DAwWo|?HDS?iV! z?mU!oPwMi>HM1qc;tBKQtpEspG-fervyziiR%E{J)`S~<@vy>M3E!5pZ2LiH6|W-q zar>{qC^t<_X}Vgh>PFZD$}T_GW?@U;I1P?NG{2gjQgYov68VgtVb9|X-Swt~O))HI zr?4%OBC6HxbR~sj&SjCO(C!ERlT+j=s`72Hstwdbb%+x)K8K_XF#Hj(+dfO(PIBLa zNeg39Qs;KRG8!(}41ab?9QN&xM;d1=Kkt#RdyCC>$*mrF=A$_2-wTzmq{>`oG}kSu zZX|t0&9uSW&k5R~1<+GsES|H*wD!-A*l0-XoCfz`q7}08%urRAS1SK2aFP`ew;gnS z-HLPJdm~rK>T%}8Fbu83+9n~a+L{UO4s_ml(AH`fnUyT+}o#dPMy(1A}mLgx{Y?XBs=r5Lvf3<2*C^*YhS_X~Kbz8++iYl#)HR5?(5q{+nOLw5g4T`-ch?A^I35JhhB`1@&4T6v8rJuy4Jo#|#8NjL4S$KJ} zSGYr6V3dM&k0>K$`y||r)`~3fw|*g+(^M(rJ!Nbd&(ZbC zx<}W@FAbULMNgZATL$kX23^L2$u#43{W4a0h^G}-ErL8^Pox!{ljb6BEfF0GiWt=Xk|&VuH$ z9ob~8;N&M|z(fd=?iyMoJY_mM4%&Snj^|KtP7t@mX@|X{?=*O%XVhl@3771gtA*L> z`1Stion%6VSUC$xmoy^nEjP?7^36l_WuWuoVZ^f1x|zm!pKMxTu>mh+pB3uV&CCy_ z^b%0WX;ag1t1_%yv)4jm-inl_r>EmrDWt$P26;9&DN%NseIUKL?_|A>T)rLUH?Y&` zq0`}O{9fEHr~hJ`2AfpjYAI49*%vp7YU2f@ORqy|G7GLsjmzpJ1S1OAya~&D`rOf2AAhH7_KV0@_a-VDP zOLcL+3A$rBf)a-7L+>STZfqV{&l_AsC8d#<@AQ2tbht_f`0P&T?G&Va$(7VHU-@O- z0zIb4nF{fmbg%=OZ>nm)lrb0}P?oG|*jg&O6Fu-j{w0SxLn^yc>j-)LsNfdF9CVtX zruyCko3BXvfj`mh0cg`$*I-^kWij94a0)LxYi=wS(|4zUTUm!jmO8@%|Fu(EVdOo` zl)q!bYxX?Tlk8}-f+A+KzcnQ4FoyqmDjzut?U41R3M#%m&`m>csGzBbtfKm$X!*ca zd=uQIAT~HFbSSP&M03i51LfC3LsI9AeAa{XUa_U#hXvOuW^3d$`&8K@(8=Ih=Vaps zPELtc#q9)awsjRHT0crcqlzXq53U z2w%@4H)K!sV=$N0ufSGAKK0#d>I}j;@Znnj<{qjBa$xc+-~?R>KlAre)O1;n4iBu&qv*4-e7A zznJ$_0siuzY>d}=&ABW(pmtUbsuK3|O%)d@hjR{o$m^I6TTZb2=o~`6PHS^ytrr_9 zXET>D5!I;6br-+d`dz{9+wP3aY!{6E!w?el?D1QXlF?%e?k+xwD}EE`S{w^4zQZ>`u@hSd)J@moJ-CTY=-b59*KC_2I(pJup#?9k{8yb$6NYlJICV&EOruNU z;7*(8zQGn&uLL5mp8SG}Rw!P|dS()*5@v;S&AQ|p{j4`>Hf)Phnyu_S2>JvS>St+j zwh&VPX6>RGw?O=hgJX!~WwFhS{hHkOL%}n48S-5^VbKOA2S(ZW~uTIz)84ME^L2ahP9NRI<0Rtg#{gjpX};6XtDhs>x%ZjLQYalL5bt@n{2FU zo%}m{tn;y=xpW@+g~xdbPfVIH!%+>*_fpdED18**?4cRm zAZ3i*vh;&FrkmxJpb9pLN0fZH8Ad=-?MBpAKoNU5Z@!tqZL?p9ZY^1uFaCg6HQWCM zJ#qeT=!uzw@qd&P69F3o6X*Y&{-5TFjgy`8|0YlWU&@X=z*%%|HroiamMs>-&t1dL z7rdY4L@P{ZbWd% z6x>l@A`?F0Lz1{rVn)|f1}tC{up_0=o`3E0vP)Z5h#E{As+{7;1hw+!kmQV5{Ie_4v>>R8ik)dbfm33PM{ zAXuW$)%>Oz+$cdC?)ZiL;a4#NUWDJjdK*IsZm)f#4NnfJOk(}pJOx;j{tOt%3w{3q zEfxV33Q96EC?J6y00sMq;`w?YF}}L_z1cmpX&6AiItlfF|61xS0H*PxK8PNL19=Mp zTDrhl`tSI0|8x)o1pv4)Kwuj}x%v@A{$}GCg>U|}jA!?7PhlGXjLyM<0Q`M_UCkp6 zGjNdr-#*yC-w>fIE2%QDDjt3?KlJ59MN8QGjA(|G6Y!oC*PM|B-zX7f>Js{R{Y=bNR!4 z{4@Tjr}?8^`0FB8h3EKg&;O$D|2qQj>fh({N5DAsDqy6V7c*)Jc(<>he5Sv!6239O zqx-vA5eR0qQV`%Uz@P=_B!}pJOUDgU3iTAec{Z?!IMT2An6mqpws*h)stOkw@Z&XP zP!!nr|6m{r<}l79qJUxb?<&B6{b{a)0t#yRB4smFWCU2>!Mzp^;k2HXLfHo&tXPD* z{K=jMAQS{aiiHF;FoOYDC*Fzl!=;fxAux&FAch%WbSv^d4)f^fG7fpo2FV!oulKLU zf_e!Pia0e-K)7HiS2w&lV}*jz1Ii}$psvnch&=UGEV7v0F!zhodf%{0wu@qOqrZhQ zKc7hzmzjQNzW3wAfAL$+#qQ3j%ZndXy3khVL7~9-_S?PzFl`fFB@YatT{7860>;m$j=C7g)D6FpMW?$f2c)>*qu4;l<3cSWWEtG9#~)6n=i@4TY?a!st|U zM%yr*Nlr*-K($E753gQZtt9(V&~viOp&bwjsp*d}T9vTIrdAH0*P+rOw1~<{S^SXZ zT$&1{YIL775y~=MBnb+LM<0W?r?|Q!O<1ejTfF=5TcTQ6{ZWv}=$B&ddnzoJt%O?x ze(n*`II=rDAs2m`*cX1tJnwbgt6qn%K4R-RtQRU-qYNmVIc>a|%5sjNZX z&!Mc&d{9%R-VzVgO3?tDBS?>_`gFsO){_yfA03ihk*ggf1%>|A0Xc-xYg3+B_~Ux) z_Sov~ws{#eXW#^buzO0;Mqf_@6idZcQ>{b9CZR7pHOx}&98PYu*=jq=m-Xdx>^0XO z428dTLAh*EQ}?dd49;WRd9POBsh7Gmr_=PCW^K;@XN&y@pkchs3KNIC_DN$9yFCi9 z&jKm8#;!_X^~p%KGtPCu#PgdxQt1jowF0t<&iKFNNqc(Dx^lWyQ7+bYHM93%8h?#H zFH6%i;9qc2t(x zmzoCZ%ckzrW=iR67O)lH+<%1TM1{NjNSVf9!EZ3(F)u8a*FP-cQ{oEG2gCYe)74wh zuc5CzUC5&}P+ES|jO^Bq=V;@1W|iS$CELAyHDjoM`ycm41?Gz^{`}s&*~N~PZQGJN zb=y`^)ORu&9po1@wbMm-5U34xVrfMBCCM~at`tdVwk?|EhI?3m1#b)VkubIkCy>?T zl|WJdB@#O&gdvAjBBJY(V88Q~^YFF(U88f_i56bJ9~}RR73!<4W*KeX&&u?VT>XCV zq%`oRFE-9SYQ?_vPgSNrrXiR`rf7lmbYQDf?5x7hR7`o#b~3em@l&6e#{f>4;_rV; zdr72{Pqk>zuHQ9#NRB{mJJ6tMJiN}*Wr>~f$?^)dg=)++u{)01;o)m4N%Suvv1KXH z<`^382t`_3tMP2qh-KRc^^=UPSF7ruj$Nr)264k|K$Rf#mFjwF7-EVcQ%2yKMp8~H z(4ct{p*6>>Lh6~2F2}Vthsx)qDr-R<#6p08y^G2|!%v>cmp<_tPKPD#c2I=}{Fk2{ z9DVhoj9>mkCE+qD+yIBesjx@Qhkpv#pk=1+8f78G##SwZ#wG?X)YX5okw%_>T=o&! z_!e)o0D7MyBkt5#V!cB#hj*pK6Fhf!NrDUusK(*-Rr6VA9FucT4LH^YtwL}d+TL-L^bN(v$??@>e%rH$=nzOCfO3KLwhwyj4 z)QEmnzV(9G$Z=={%qxGrJxi;kj(hhB#%;KIJNHY)W=wUZYh#39eo^9E4MRGj5dQx# zb`R~jFu}TjlNH;xlNH;xZRd?`+s=w@+qP}nww>(nOwQ!&!RcSnqrR@Lr|Pc0dsaR| z$DSx6*BcPp`bm5D=RxTY_7JTiWI(O_$syt3C>%hd!sDtU4VU)$;I%q~KrR;N(VeMx zzw`KhnoelSXW>I^Bl6M77Ew{lsyC{;0qI}uAjA$^f2YwN*En7!9zU%(P6`}){Q5ZU za)#oel4Dp#SZFV&(+Z;vgI{+om)mcmk$~=p*=fhH-WOVs&rQfVBlSKfydz=D!0~d9 zv<8ma73I2FTdy>wERd zJX(S;O4mQr(R`;Hv7oAJ_~#D{{8U`6;5FVfae%&^R0l)HzWh72kHhA2+FzN%*+~4K zQi#+Pif|`;>Lj>T-Z}4sPURMrCX{?z(S;!C>Qb$CTut+-)|qwgu~)-w!XAkzzV){t zZKysK_PE+~jXCjSrJa_0E{ArQyP;~>IF1)te49Fb3QEp3;RNtdXbU2S{18n~Ny`1S zV*YRgnrZQ3K%c?l_&&qW<6GL-)F&MN=E&t*X}eLzn_R$7?VxDo9P-qE(?4%UZKAQB zEIOW#dhxS}Fg?IqrC**BLqh-MRJU+@;Df;mwb`7@5WDWM2m{a2ne~*~9y>kqm3xk~ z{JeTO{24rv@})I_OHfyzJ|I0bbh=l8IHW(gOM7^$LPaB$&w@#u^JtU7@lM#?K?I16 z=TW$8{AY;;GH5W#P{)90^RIIQJBW5{_fjkuT~KN*ofbcM3Ed!YXrj;!*fF!bT78E#9OecD0)x>Ow(bE zN{j6*IB7Dkw9;A3)e1ip+G8s%TD3@`kUh(v%9HJIFUnDDcilSWR2~ZcksIEnqPsjp zp*iR86T4i(=#2=3=_R&vRhz4eKFVL_qkyqyq1ozSlg|}rnF|}*-!~zXaZ0(@8fJzg zb1NjNPlYD(L0WR}-K$4Poy5QJO}Rfc zkW^Q@l)F;;ehIO|(IMmFw0wrBWM?*!tpA)4)8p1$*%iZ$N*m{+yi3kh-$6*2=S1k8 zH;f`Q{O_4AY-T-8G09Bb`+h2NvL9-n51ZU z|0mIH^*SX_mhM^B_8Osn$FpsT9zw|7Jbuwa!prr#w3@!Xp1%FCW6R2VLp0RWzE_aZ zB@4C6qWfe1_7*m_xCpC`-sbzjw8f=LL26&^Cr7P7 z>PF;B^}KtikI`X1^6Bs)wVQi0F$m+zsnzNq(Th`9zB}#nlN^62^7 zwel_zE>NSh77|Ng=RWmQRP4!b<5GRMbxQZ@*$g)ts1F9>L1op+=Tw9E52g8F+tH}E zT4P+D_4?;Xz~s2^4{!ZmUgbDu>2KC|;CC`C+V|+cb)9xRZjb-ItL?=SU_M;uGc1QJ z=n%E8{#*chpOw=C9t*P0)5>&qh;3c&GfM##IraAn)Tbj|#eepwC|oxBF_+e|=Zc<{ z)Ce~)Im%tR?JG3vs3APfi(9l9oWpRfP0iX7*cSs5TOYifIF(^DNos7O&UM($_yreT z(N8>I3FZpd)d1F0PY?Mw(3~DhdIsMF#mbNAH=Vd@Stl0az}g0%g)Wr8a#RpiM{?X` z{_Bhk##YPH+#H9}uDd5}tB4ZOA)8%aFQOZ!8J=F!hFJo-6+g#~s!lHC+6q#GTA3gI z`i<&m{sGDFB5Zh6{PWDN%MGvR7ZZ=-=f9g8l=W$oq{sg=CVG{o$g zi0U;y#_zflNpcyH1BqmeSv-#=>lshe45BH<17}Li6QF|Ks&E$V-fD#fl>U3wQGe9NAN4ER^{Sc-$R;!Ga*HNI6zeQyRC z>D&7&OunwKlBYJgnoB|ROofKOnQ8R~a0;$C2%o{XK_x#bnEzsJ%qtv)OxfS4FCHI! z%h(?RjxVgiF1c%^8Mn#${V6;I&$jmk6e9;_Hd3z|3>Ilv~yQs9d;98_>ATtrXx+B>nG05p$Xq{*hp3z0py730bxaX z*z%iBP9d8S=(^Y)J%0$_xzxhnI&uM=mg}W)-!o5gZ8ti|K1nd;23L=77-7NS=-Ew& z=@QwWa&E1VzK$W*y%rGNd08Yrw0M0&u9!a(+;>#Qq1u-484A>H*!cBw?+lmtjiyP$ zq_!Trr3E<;HcV3QYdVD$Dt#;%Z%HwQ`ir|_`pkQP{mo|*gyZn7B=ZG-z)W5xJ90vx zI&-njX3JAfBw~+1G94f1f#7@srCi%lgl1IE701ASu!69Qwp0y7Hdku6nRyjA^f`qK zvYKN(<&Q==H66~CwdcN$j>b*^ueI7V+Q$WqGL$SGmdmWq;evW2R}`|A1b3QHat}%qdY+T z^W?c_C|817>zv{&r8M08_CU3ZObO#6z_~s{t4eAvrGvA zShQCBJ&TnsM3&6tdJ$wI6X@vh)DBx-WG+4?d9@l$4h@N{`^UQYS(`#1*)0440-Uz2 zw8;qfvHoz{PI>iyib!-gyIkG3Wa}7mNL}7Hcv%0K_rfo*Ld@e9qw;iHeYr?uH$1D8 zv*A|5v+_89?Je7$2IJ=#N?aItF{~9u!a( z?))a?<3%%moEq>*oh4nANE||=rj4ApoBbyhR8_P3`Du!)N#Z-FF+w`pl!Kb^wLCT4 zEqLuH;)U;Thn168c-|5#=VGl#v5auE8kO#&6qNW_u~^#TgLc|o*H+u$W8AKd zPm{3zYD_GPQ z>$cB<<8NdW+mEyfS3EJBF+EaMyU#JZXWdrJT0O)s-{QGSI$ofAY5uO;LUU?8c(dat zIdk4FDt-L-AHo=cz8WC6`auBT6iICs@&#SnbPp?aG?mEDQf*x{o}ll8V`Jy#RBe%7 z`Swo64C;;boV;o2Y(@t%5hv++Dbb_%yGi=LS<78<`-9>$hMcAqUlaG`l+-~sZQ$8@ zUY_S<+w$q9yL8_oCa*>>cZ!YW?kUa8Hc5Q>9*Bwek8}ww@-8<@Y#aBM=g=T3_uSLO zf0g}x?+;&>&@J2paQGtWf9H(noqE_GS<4o}#C4uPRhnswcbWKYH^t6-3-~#!7=w3b z+%CAmNEhZm54;u(Fv)}xR%FJwJB z9uID9VVVr=#7@<`U8_8DYd)8r+99~Tp@|>~V^dc!S_ri}rrsJgs7ccFQ}%n}CJ)y9c2wkmI(>9)07wW0xrt6=03|cT@bur&?orz9D0KQ(CHB3yHp$9Q zMR!<)7}(Fn^cpuO`sYsXGvEtlxY6$pTTvsuCe^N-8Pri9b z8x@-WIKDJl%ytqA$Hp^o(SVIT{{uWwBG1BVTb=CcnJlktD3*FX%PZPnX%FU+DT^!; z;K#9On5p+J(I}blTbqp61DG{vCDbC`1Rs{0Kgs7&W6fB$_!3SP0W#%Dd4DkZ}g<0P@!H0!KsBgKP~acN(&SQj*u zqTYg}%Q$S|io>&lG?^9~^A#Zl@FOOns&^X~fRUP8HYmWVTR}k(ufWVS zdfx=R!SMm$_yk}GTvuOr_mg?HHwE#J!L^kMgpvvP2=^+0?k?#7J~n4Y4Lzmi*5&6L zO#mPTV{m+YZ2HEGOK1t<+``1#0zrx0srBc2hdKj$^Uo5VOtpVa&Tn#{Sl`0(a(rAm z7U&;Ftj%@?P7ZCzc_ttMwVD(l);yTGbv$$MH(@4$@iq9jR2Fh~DgV&o1%5Tvp^+%kD z+KV4JPG$zz8YlLqm)5#A&{VZ`0FVh47`ZxvI=Fv*_d0BiJkB-bP+Tbb*HxlW#i55EQ9^T{g75=1(e*L z-i&{(9&fC1`(Jhc#!OXTO;7#)GdwvNtFo{=J_1ilev5jv4gB3S1$G9rZ>X!gt7`=I zmjlWRD<^v-0Au073-II8{AK91x_fqYwg*k?odo*ON(b5f?f2@$>;wU>nXwhnzxCt# z!Rc>o_%l@{qYF$f07LEd*4x;d8F2DDaQk{|eGEJY@F3t<1DYi8`+YC@cw0iFBeJ;~MJ(3IKb*Z9p1`=0&x+l%!} zGWqK=_1j89#jd@{|IPAC{N?vG;;Q!F1sHcuSEiqRAW-pk*!zF{%C-9ZXlsb)rY5Fu z{JI-zMs7O^E$s|HbAy^3;~O4;GRigDGqipYi^1B-CTNroFL5J_-m4)Ao^(T!_MW0rr`|Kz7P(4#7F!J-AcxH!>{qM zGB?`Rusbz=Y>vSgGJhZ(dc@PX)_SBrTaOV!rc8hRtAI@RcD-xdo=(qyWZmfjKkNbD zc$)3MBnJqsL79*Ie|D(QfBkWRPI@;F_q@e(VpID3T%T+kKOnqs`#%Woz9FrDfOpZ> ze?WRBn?G@S=ZsAuXk_n2!7m};r-Yj@vrXmZ`>GT{W^DX9K7`r!~AeDE;}>) z%uRgkwvTT;{Rs0u`I{Vi7Ik;@f%x;WmwVe0~{ z!EO@@ryLv)1=Yp}+aR8$y_OJ?zA+JWx72ydP7=i3=`u~C=c9j66?o*+tsY!}Q(;Gv z! z+SM1La%Pd;CKQ~>_7~gHG|3ob9)gha0d$K_y*;5D&NygVW~jRs4pDoqpQnH~e8TND zKQF{$on2x}$E4eyP6+=cIp;V^EB5yH+hcC&wlR077kJTBC6vDQzd$d=%$&!3oqKF2 z<*b(Fyu;&u!LMjFu5}DarzO&t5X0_21IxF{2e_D0iB`MiJ};#oW{n1fd5#*iAIY;D zyRQWvIispX2S$_IPQ<@uYQe_J+b?%rlN;FQdYV6r-KiC`_%U$m;&nM@oyK04+>h~l z1PBDj zwJ1oZ(pRs>rG=v?svje;v&8Lmun6MHXxyXeV+HCz0 z0rrmkkdb)l%GNoBk9Ag>eSCA}Qp30yT-w4$jyt1e;Z7{CrtxPl`^Z%MQ+z)YwSEIS z+ZN}{tkcf=Rpijkj7lW@2o|X(URHHt#my&iD9wCFvRheh??x2MalO8Za!<`f%~1v} zL_Wd1a#BByG_K}Et&lC?t!Ehri4D+>q$t0s&u!-E|CN0dt~czydR(AhcNq|>Ae{e8 zR#UeoBzsPs;G4OB!ch{x^_sGA%HjKb>8AHxRj$ML4H&^vC3E%n+ME};h5wv8KNTB$ zZ~jia=+3%$x*D^Xu<~~hNv}O{@iq*TT74$lhCl`m5bRjj%~2-&$wLmrOu*{L@RveQ zb5fQ1EM5|KIx(tyV%fljILXHqE~xK&#&_AFX>R2ZuOnuTayoc*)axeZoMn^Up@@4T$l!> z++}d)r<#&|-?<5;7DyDrI&9jmZi1P0CYI#qb~+MmN&^Qe!M@I#T9kKX*gLpOE_ zw3P%YXzPdTN~5nP-U#E~jIGYsq<g6umU z#IkYKu_9q>u6Rk3(dW&&vddX<@0|IEXWMgB^Nc9C_+@e*9W0itd|3F27Ev=vVOPVq z1wgR)w1@F>pnFS9TThFK^?v1KX&Ys_6mTc@NZ46CfVD>_2%yO{qWe#%jmL@5Dt3+ANi|D0RX-zV zRsiMmA&48%0Z5D*AhM3fxUA8-A0$YDJgkvlGq}jj3T#>_M=6oWAh`$eZbe+3EScC1 zkgKIvw1y*-U?A4ln3lf;;_SXkYcg^v7Cv)sT%hZ{Io2RClTreQ)KaP$u_(i0$;qqS zSdm@L3|^sWj_8f#gbUd!L-)6I-@t{~jgkh*$lL$O14z8JjdUPKC83j>uX z*UT@z^$KaFLDKX@;9@k^9lg>a^RD%j@wG-p25RZud^p9in2*KH;oPN2Dwu_C4X}0If%(YqnJb|@cDm>g(t*Wb zU-8CIJ>U_9UZ$d5e?IWIPJ)yJKUtS_ySSvl&YG#gR6CKJtVz+D zNFXX@Hgtb3Skt(dQt8J zP>A56Q&PrNQ|1<^e9u|4(qh4wM$b$Aw5$D^=M3wRSN@T20eupV+h3uxOZD>CHdrO% zcgjzZl`_K|-KvfDAFr00;IB;^SF;FFK!pUv-s*R)&cs|WpoC2eNP_Z7_e(4|+UZSA zYl<^1Wp|+VBT*ZiPevw!@i2mE>l;D1D2@*H`eS$_?(IC)sM&7`Ty}m+NJj+p_!u*H zjNqesr_}5#+|k(HP7*CueV*{>9B$u4FBX=6j!THNSq(c=A|Dq<`^v%JADN~jh07!Pv z;3lnp`Ueiufwx}PO0zDw1Ab}f8V>3hb$@tWyDCI3sGtzffr)7&0 zfQoi*BpRe@=kbgoj`apfbD@>D)rIKm1A_?TO?CYg6P{nA6`7+t)$9`v*Z)<4DI<>=_;3@E z^hUSAsX!WG>m?6FIa#so>3GH9I-KAas?xCJ@fb)fhet55C4wgqmQM>KF^~Ti90i@+ z|6m)R1kW2Q4D@v_sb3pafHu$gj^`_bej~Gi{U*-&GSE>DQ5#BY;a51&m@)!X9`iPn zM3l1FQtn2i)t5{~0|F=|Y|!m%;a6m#>7c7jcT0h217y`MeJb&6YX&hQogg0$mrg9A*U_h?=V7Vts^r4LH|ooWqfj#N_IlG|zxp_N(Za!R#E z!Y$tcTY8)r1DEp;dHW;APHUk|KsJL&RE;(0)<4K1~mn zH24}E&R>C2#~VIU5up@b?f}8K;V4}jR#c%+ME{`*-vV23AGpxYTH$-k;@jAPAUnfXP;@+7cW zIbD-gp*3GLA@ET>eAvnza43|LkC}9C9eCC0{FrL?_CXx98m0(rs{?vvX@6srAB)m# zAfFrvXqnj*(|UUdFf&p=JHf}B5@={k|D|t#`fXXnV-Q_brVqe+VP(2BzH13bTSBUZ zvX|JsGGXb{DOB(APKupCACxxge3vFC5tsW>O;1D=hRZ6$?oU#Ein*|62O434s!Ojsr4s%^f}e-sn!Tk((P*;K~H1WM!;Qff#@~GvfBn(YXU_rxM)?;g82L=BVcVPR|qJN!_K}9mQ=>CY+ z@1Tph>#?U|@8Ka--q1DQTBiyUxT> z{lA*c2$Ki)OoyhIp25`EF{(y=2qP*^Xb9sNIFoGTsH)dLD0(jKY1z!u(}rvut_mbj z8f*ShouUz^3zbQEDDbjd{qx+6{-|J#H=F@Sy0JEEFuv_7L%1A<-wlf>?ACXQwi{Q2 z`qR{>1f1qKl;zZnK{gLA3;m<~j!6Yg*T!TVdZ);B?irwo$;A07k3Xv*<5`5QfUF~= zY;9X7)B6iPcZ-_O8o_U?b2=9`zJOGAy~}b*z8*%YU^kpY+)H?T^A1p^Q7^SSVBq&?wuXBBho(($ry zXccW`0Rvv)v>Ml5Ll3-9^kTD-H?Z#G>Z}duww{&EADkTE42Xk8;{0;1_k7TGOaL#I4>UQb864`tn_6(4~WQ71+1k9ou7~ zqg5^t|E7M3R)$r;R4$84r=AeK8Ec6F+lm|!S|@DEwA23@u&hZ^|6Stv!O(lwBAa37 z!@!l&a5Lg!5)E*`JYbnUEXK3aBU_iBvk1y!Oo6$ijLtc)RC#+EqY}lEvS?K#;^c~{@0o)Q6Oy-2vx`ptcI!yk9-AGJj zTmdRcI4XH5Q#Ax8ZL`wp>3flxU~vW>L`;DiK$Q`->l??LwXhA@FMzKy$Z;qM0{RD8 zn4?j}bJG!y$8ot2-g%MMHAdci=ou3>2!s1ItyXOq5Y(8_BBEj#4s?;QN!AWUz`e}UJf&ZjA|L__WDb8zkx`yGauc;ZGw{`ebHQTYDHP}c2} zP%8bJ=s^~*U-*O0;H~CJy^afm=|%XcpR8`rOdf-ZyX_Z(5f2V#iG?yvHBC$3Iz|WX zuxb3R@9ye>3eu@+$|LHk;N^W)`kGkSbCq;OhfQl<)cAHf;WJ8iF|Rly>+J!V9*t|c zenI7#tl5W|D?wPh*eUB+0|oXnzD`L7QXwpJUx1O6j%bpc&MV(ARX3NA^l`o<_hQ+l zJM;Zn4*v_SnI;QaMej5A4l*>+WnGnv_UkNlF}j`W!%nun;7piVWO2rW`?^?1g=tap zpexFCW{%HiYsTfQx0rzPeZY5|vzHCZdM-&@0_W+4eaWxpMS(Mv@h)|DJ#BRGe0{-V z2`U~_nzYkSvY-!@&F+L;PIr3kNz_Vq4u8{$1DfC1Z>C@;e-#q=!+zI$=B4d4`9ek` z7)utE6wuKhr(Z;-dF@*V8g#1aC^|?Y1-TDr?bgV|YoETB_z2OTdGW#WY#^i@j&M1R zs4YqdOdo`3I)2labJ4;D@qWMVBXZbX)Z)Tn+iZ}!3}qs=c+?Wri?`_OJ6JUJmu>!1 zNE!X66MJuTLJcIurUhP7&G7^#(Pwev_5M`9EaCVA3nab>PVjr2=0W0Te`7e67JF7( zH3>bK-t7RoviliqGIE<%3oaW^h-5K>d1ol>?eQEC*vGi3%+8(@QD!G0;L7EjANbP6 zw7QSN{FgNtiC}!`OBF&ySY6l~$^nOC1uagriH2i1hDG>cv#lV$wDw6-5q+kNq1s{q z`)TAhDVqJp#sgFdzkWWJzGaU@#wr{Uo_$DpEe6JR|K{#ty8mJTg{I?=iO8-W6}Gq2 zzu+~!E(syzIe2zv@CgzuZ~P6*m(nm2(VH#gxnGP+3*~ zY=l(Y1aXiOm(64K(%gPSdj9ZOPLTyDTeUj07T=XOb#Mb59J{Xk)t`Yf9bDIvJyhUo z<=tL8xTbI+J3vEgbsUDUlVM{(q-AdwHi9SlmDF*(bc~QlUKVWR4F=(k16%!Km9{W2 zdS{}_q&f`K$(&{g?Z>lJFlxE{5wEhJaYelsGW{~x5eZFbjEc+lRU|ePM1&Ln>xUlJ zlSuf68o@Rd%L$b=8qcZO%B|A#H zEdtiSS+~G@IH$5UCo~_byqdpji02enN7~6}zQRL+`oKJM((YV4_x0#_crL;r%w{Pk zx=|A{9nKd_iXhg=V664h5bw~2+!#+H!#J^jG{cCKiDo=rc!`M%*QnP!R)f&%K2M(3 zQ_sA56ZitBRHp_5GURq&Cc(g9a^8TDO`U+YczS_QCbOr#TQZfK`PN# z76#RI{?>(#bVC!y2uml|l@yJ9a4#R(A%}lRZ-97V&gh4y1L=6h$7&B9{ibW)mo~S&`RV|G|? za6~pb8(nQCAiJO*H|9T!0hfzgL|xH>rQ_y7GxULgRLUynW$86x@2OGc5mGl(7QPv~ zPuEJV#{kP{?58GUd8m(y8oj43jO|E-dNV{=je>rJcAXBxqL|u;_X6|kCq>U`3^;Z>_6K)CpQ zWm|26;8u2jCa%P$R3QZ+!TM zEzRe7PitoUh+9nmCcF>fF=&lCnm65Tz}KnB`+FK#?q^!r7~dMPa<)(6p#G8+}L%Y9TMW_ypJE z9_-@%4-=&veh7NL=@X74f{D#`C68*2dd_sg=~Flni0=GGm#Ki)7jue1Nk|vf^5{nR z1&`U;j{adhM$d)Hn8TVudy}4$GRLA>hiO+Zp8X>DqV0yFD3y6k!eJO2n~r%5nbTL zfU(_k-xUSooD=xh7IoMMR(z0~B|)q0zncZNfmEA+6=&O{)ae{^(VW7Nj5ExQbS;;E z>ncQjwQ7$aKw^3OTQOMo_8NbZ63!;0AuNy%+C3J?jxVh}f9HJQ%G^Q_$A4+Qn(V4_ z4BMq$9N0SqD{F}>V7+N@xN3C%B(_0gh4rz5r(YK!6!`M23?Sh}N>QS1AIe0bB&IGD z1dprb43>0_c6!ndXaZzb%%^9zTup=E1dPKQ(-ej^ybZG+ zob1@T5(}{i57M0YrH`m{c;`p5TZE-7m#c9<`rwqZ`17$A?3HL*<45|0bI(5QfRG&E zFm3Yuz`bsp1@`gz5uNhHDlF>d4# zbKRn1O{M#;P8iv1*>3qA=u_oI5@|*ji6X3NVn`Lp;OVxtZR@;`m*iGa(Y?dVaB|*> z?SQil}2pz8#(Aq}Qpc1rE42ZHMH&ZV<&TK}?jVJMv0jmG&E^S74BsM++AyA};?X zJI~mbD}vNqqpMk!65>%dGwO(ghrU)*Bvwg+$YIb)9rXP0Djdt~Asj(WkH3?#(5@sw zlWp;37RCgutu#s6OJA)~;d+#o&t~S?oaWD>^?v0msM!tZddGTtJN}CJ+JWURT`1wm ztne~rM+oCM6|xq?mGEcG>#0ZJ38I`ThE!rWtHckga{&J+ z)|dBO0&`oOl#d|QYa%4TUu*o_9vZ)>&AJrh(drT{}T`1mh2Nu}JwZ z`6e~4!dpzII(#iXw3F%}i;vRurE1Hh={6Y*fIp|-7q?RKWR%B`3ewKe@GFxBBGAMC4%CJ^#7EB! zQ(O1{DIJ0saAhAB&p3|rW|rdu(%JBt;klRpV~~Yy;R?GXC^odE&*5qA!5h5M)5m5J zl1j!DdVcUHjYkcBlA2iv97X3{P{pb6b9b4SsZ9R5zu+Zu(zlh66}VM29#@(7X`a6< zC-%=xv^ojJjQcXoxb#@@L@%y4k2a^{?R<2$beAklhJ7gCP2v zUWRrZY`SIu?djw}CSV?qoVoK8O_;-CvIc^H+B*;C#;y;xShhl*L>^b;U5(-}XfLO= zPczPB2lA!`!6+JK*#yphJ7X`g;pWB`S5i13dDw7w#_+aua&AL?8kPz{AsQevpyP|qOJ6{p;FmBf$f~?{^6=yHMMK#RtU-z| zg)YfAGWQ&s934}7IKi}vhp9J4W`py$+=caPGPYEiB|&7nfPOYXaGMN|1E~v&ok8#& zAa?m%L1eIuUuhsE`}n|p*9%)&#FswqBaC|13lJD2sCocO)l32uHEp*)2Rmw?V1f)l z?czzsIO-oTd@iYxIuL&|WL^G_JAV5@xC1ZzI}Yp!m^SFNlz1<9N>o=CpGkcPRYE#u-kPSP4;oobdVSZ){mrD+-F zFl{cXh3_GB#wOOV4%AhF640 ziyr1dOm$cyr;0Tg*x8{>%SrHqtmpYodT|VF{LkOu--|97V2Fpm9ck?%5D>m5au;{` zE9mbQ@{txBs@4a~dg1bZVP9>TK8-xx6OI{zA7(4~W^xx(T#4$^QB57{-{_YCoU4Wx z78Cm|`OPN&z56U$@knV2GM&cjJ1U11(2M?9-A_7@67#`Z)*VH`O8+^M9b$AX zF+D>zq}JE3a-&MYS|egC3rxp9)sj0%p{YAZ*6~tO?*h8lBRfHIN^2L0m!>ggkwDl9 zXoh`^hvLvIfym*FNmV_1`csYPE%~wv2QXO~YINDmdNyZgA_@-V@vTA%675u2obkbb zDu5jG@hRe^bfK;mKsGC0TS_-8`OdL5M2Wq0l%RZ<+$#Pw{;iLprcZnP4k$qRPla!j zV&<)W)4(=%dpnL<^{KBR3scQmVR~|o?J-{fVXmjvNPHx4B+c~6l)a~BLMq7dm{s?r zY|=s-o3MwVl32w13&pvp7#DofpkxEDJxxvBfC(FC_rh-f?+pEpFhDHmUsS}ln8VR? zcUXvL5V-gjx`b&}Um<;ZwD#G0h!%JmBrYPQoE~Sc>p^ zX&U_=Zf-mNDFUxVMcCkECKczgYW^w#9YXsCa{%h@AJ>Jw@lERtGVChoXLD9>@-P}k zY`9>G`?v_&Yl1WlN>slKkVA$@(E@=H;cel#=kMsgm^=zOLf&4aE7!DUAoqEVM} zk+nOqLYu9Lf5)Fu#VS6DFoXpnA-N7Eg{wnz5F8LSDZ+X`gUmF?pbqsr!~TO1ISKf` z*f9e$s3GnoM9=%XOni_3A zRUehEVi}@7&9DZ{^Atr2UmP0GtpJ7D>~AFm%tDv?q?!xj4<~mm1q^G+?_v$MsLhbD zsw1wA8Qc@ws3;-l#`_K{L>Zk##xLPUBRRun<;oWC+SZUNqDPly5Q-PZ4*l*6I0w2_ zsot2!_(37n2^bfVlyQ`(%=y_!{cu@hQ!l(XSt znGAGsBDH$~e5wk1$brQ;`h#Q}zIVCID6iL|kcJ5ahPp-#w!3 z4N6_YS?3Ru*UB>Ln26M{uIV6q7Gg$~e(&>DunwA%@4Kx5E)(7=&`~WZ^@V}!ky^qp zRm}2St^gEiymAsW+qi`-Ox~WmaO6y|qqq(~@9F6X$Ht&x}-%^+51I*=@Ugab#S z76uTzt=!W4j}Yw2SB7t;Ih@Q!w9sk>e@Eb61cP!l<4%zDaz>CR0XmaM%o9ElZ za9I?adZkp4y!oEBc9xg=1n_@|H3mpcH1`6mh1<>NXnZ-oVk5K~5U^vk+ z34~p};2D@`es5~DzNz<5o5+QgK%+Nzz9VC+&nUi*f&rD(u4l5MAQ8`&RF@jP zkqs#?!IThqk|DR688Hnci;<`RJrGk$3k?luUBU*7I3t+I!sfVGNJ>K=)Hpuf7$GN< z7D@wM#t6n>eMUBbB5CaUHj6Yb9L{+qJs7bmS&-Y*Ba)53Q093lEco!8#CwiVHslhk zr0N(^G)YM+LCk|Wp5A?e^9o?I?FMP)EtbnyIPz-@vcAe^4S_JE%Z#Tm)P_Of`!_IBY4Ge5J@Mi-=^wLOvA9#mRB~>cLf);Im0E51kZvdcv^CGxu*z#=nURTJ zOUs`{OL4RCiYoM}V@Jv_352W28$FdRz4zBj%~*lbrXh=~uQS48W0obyPlqn7*i(F6 z#vZ%yy4I8}`?b7<0>6UKJ84Cv`-t$R+IQM2i-cODshk*JGf-LVK_c8$^USpmy4KdS zT;;JaZsV8Hy71Dyg5n-21!Y+F7pTcL1HtUE3e$S4=O|s|L4~9`!OW5-6I<77 zHWZ*rOF8R>Z(2AZxUmR)j{kYXh1CFIs$4}qG-C^x0ZxV4Z#;7 zr;Gy~?WAP0C3GOOyzPm)A=J@C9a;}nFRd;W0qSA$C#FsKtE(@mla%JvD79=4b&6P5 z%f0sRp&bnG^nBydi4t%J_AzUxVX3uw?qE~@T!e;(|8B7Ii`pu#{_$FJXY_glY0zk! z;G7(QkZpOIiV@b`dd;b^i?D1c=&|G6IwPWOpCfZ<|JTNxr|lBtpof3Zo_Ic{kUFIN zv!j1SR*g^rA-B}S0ApuaRjkdlyHYL%b?h2SZ;i@l8r?}$`o8@l#AKVGvQ^mO;% zvz=Q`)+|LgfaQd2J66WmdfgaR)6{jr(eQ9&R!}&)FyrR?$y{^}<+q%sJQKG{wdlDW z&xDdL`tr{}bZnSAo}#my&x%?n(wgWECX3%r=+-yNcIRXRH6ClYOJIVtaO5v{lp?H@oD8akOZEBfeUcyiLSUl1g+NA zp0z03MYIyao@N}Wsmux60Y~=_h3`wWZXuZThzw6G6n+7@-2+Ot)x;T~ft$#NP6O&# z4U(lv(2BOp#qp9h&g37*v90YK@FET}8q>tgJeZOw%9=bzc*q31j#D#c$bum|(zUb( zaIri;v16TP#`J9Tl7g%0F4KaIew^q3G;-a+aBy8;^sL^AU`2FUmff|4MX-ABEi6`F zZ5N3a^$~>VH9?fsMHkUR^ynps5(z<+6(vz3e4g+9-kEpieP`Zp=KgWcx#!OL&H3k? zJNKSn;pR9o|5$cbf#Z9Ibp`+4UzS8M0g=wmd{N8ww=G9FN?@cif@+UXb{P0`=pN$J zRU@q?M?`%M`j=jxOsCE_ghn4lF?xN~`AId*_*UW0rYLvml8=NtUtmrXsJiX;r)n`w zxtz@gVP^Uy=>tX7y>LN~1bApi`$j7w$UA(PeneRmtSMi1#u{t%rw!ov!_UcJzJ#xt z=BuDv5XwBvwVB^sXIXb7NmJCsQVr)>@O>7|D{i=3AoXF0Vk{>L3Dyr7rO#X>aZn~U z>8st^Esz$U@qmV~ur9z&am#s#e9Srv3gnU@(P{nNt@&n`CjNe-fG5|jeYLo2~wFAUw<`elA`k2>L@?jfE3mxG2yZMcT? z)3;0kΞ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 literal 0 HcmV?d00001 diff --git a/ReadMe.synctex.gz b/ReadMe.synctex.gz new file mode 100644 index 0000000000000000000000000000000000000000..3633a38225fd94fca3a2882ba37f1b6c61f89bab GIT binary patch literal 8210 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 E0I|&qAOHXW literal 0 HcmV?d00001 diff --git a/ReadMe.tex b/ReadMe.tex index aeeffcf..855d1e9 100644 --- a/ReadMe.tex +++ b/ReadMe.tex @@ -16,7 +16,7 @@ Makefile in Make/Makefile\_2D.gfortran. Uses gfortran \end{verbatim} \begin{verbatim} -\make -f Make//Makefile_2D.gfortran clean +\make -f Make/Makefile_2D.gfortran clean \end{verbatim} Note:LIBS=-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib for mac @@ -25,7 +25,7 @@ Note:LIBS=-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib for mac gmsh format msh2: gmsh -format msh2 geofile.geo \section{Run} -test case: see Boundary\_euler and init_bc_euler (they should be consistant). +test case: see Boundary\_euler and init\_bc\_euler (they should be consistant). \section{Reference:} \begin{itemize} diff --git a/ReadMe.tex.bak b/ReadMe.tex.bak new file mode 100644 index 0000000..855d1e9 --- /dev/null +++ b/ReadMe.tex.bak @@ -0,0 +1,44 @@ +\documentclass{article} +\usepackage{fullpage,url} +\begin{document} +\title{Euler code, using Residual distribution scheme, unsteady, order 2,3,4 in time/space and hybrid meshes. Uses Mood technology, and compatible with additional conservation laws (Kinetic momentum for example)} +\author{R. Abgrall, P. Bacigaluppi, P. Oeffner, S. Tokareva, D. Torlo +F. Mojarrad\\ +remi.abgrall@math.uzh.ch} +\date{} +\maketitle + +Warning: works for Euler, the other models need to be checked. +\section{Compilation} +Makefile in Make/Makefile\_2D.gfortran. Uses gfortran +\begin{verbatim} +\make -f Make//Makefile_2D.gfortran dec +\end{verbatim} + +\begin{verbatim} +\make -f Make/Makefile_2D.gfortran clean +\end{verbatim} + +Note:LIBS=-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib for mac + +\section{Meshes} +gmsh format msh2: gmsh -format msh2 geofile.geo + +\section{Run} +test case: see Boundary\_euler and init\_bc\_euler (they should be consistant). + +\section{Reference:} +\begin{itemize} +\item R. Abgrall, J. Nordstr\"om, P. \"Offner and S. Tokareva, Analysis of the SBP-SAT stabilisation for finite element methods, part II: the non-linear case, Communications in Applied Mathematics and Computation, 2021, DOI: \url{10.1007/s42967-020-00086-2} +\item R. Abgrall, J. Nordstr\"om, P. \"Offner and S. Tokareva, Analysis of the SBP-SAT stabilisation for finite element methods, part I: the linear case, R. Abgrall, J. Nordstr\"om, P. \"Offner and S. Tokareva, Analysis of the SBP-SAT stabilisation for finite element methods, part I: the linear case, J. Sci. Comput. 85 (2020), no. 2, Paper No. 43. +\item R. Abgrall and D. Torlo, High Order Asymptotic Preserving Deferred Correction Implicit-Explicit Schemes for Kinetic Models, SIAM SISC, 2020, v42(3), pp B816-845, \url{https://arxiv.org/abs/1811.09284} + +\item R. Abgrall, A general framework to construct schemes satisfying additional conservation relations, application to entropy conservative and entropy dissipative schemes, J. Comput. Phys, vol 372(1), 2018 + +\item R. Abgrall, P. Bacigaluppi and S. Tokareva, High-order residual distribution scheme for the time-dependent Euler equations of fluid dynamics, Computer \& Mathematics with Applications, 2019, vol 78 (2), pages 274-297 +\item R. Abgrall, Some remarks about conservation for residual distribution schemes, Computational Methods in Applied Mathematics, v18(3), pp 327-350, 2018, doi:\url{https://doi.org/10.1515/cmam-2017-0056} +\item R. Abgrall, P. Bacigaluppi and S. Tokareva, A high-order nonconservative approach for hyperbolic equations in fluid dynamics, Computers and Fluids, vol 169, pages 10-22, 2018 + doi: \url{https://doi.org/10.1016/j.compfluid.2017.08.019} +\item R. Abgrall, High order schemes for hyperbolic problems using globally continuous approximation and avoiding mass matrices., Journal of Scientific Computing, 73(2-3), pp 461-494, 2017 +\end{itemize} +\end{document} \ No newline at end of file diff --git a/Src1D/Model.f90 b/Src1D/Model.f90 index 0800359..90057c3 100755 --- a/Src1D/Model.f90 +++ b/Src1D/Model.f90 @@ -29,7 +29,7 @@ CONTAINS u_cons=u SELECT CASE(e%itype) - CASE(1,3,4) ! Lagrange + CASE(1,3,4,7,11,12,13,14) ! Lagrange CASE(2,5,6) ! Bezier @@ -54,7 +54,7 @@ CONTAINS u=u_cons SELECT CASE(e%itype) - CASE(1,3,4) ! Lagrange + CASE(1,3,4,7,11,12,13,14) ! Lagrange CASE(2,5,6)! cubic bezier diff --git a/Src1D/elements_1D.f90 b/Src1D/elements_1D.f90 index 7c55fd8..16ca259 100755 --- a/Src1D/elements_1D.f90 +++ b/Src1D/elements_1D.f90 @@ -37,14 +37,20 @@ MODULE element_class TYPE, PUBLIC:: element - INTEGER:: type_flux=5 - INTEGER:: diag=-1 + INTEGER:: type_flux=-10 + INTEGER:: diag=-1, diag2=-1 INTEGER:: nsommets, itype, nvertex ! nbre de dofs, type element: !1->P1 !2->B2 !3->P2 !4->P3 - !5->B2 + !5->B3 + !6->B4 + !7->P4 + !11->PGL1 + !12->PGL2 + !13->PGL3 + !14->PGL4 REAL(dp), DIMENSION(:), POINTER :: coor =>NULL() ! ! *-----*-----* for quadratic, *---*---*---* for cubic elements ! 1 3 2 1 3 4 2 @@ -77,6 +83,7 @@ MODULE element_class PROCEDURE, PUBLIC:: eval_der2=>eval_der2_element PROCEDURE, PUBLIC:: der_sec=>der_sec_element PROCEDURE, PUBLIC:: eval_coeff=>eval_coeff_element + PROCEDURE, PUBLIC:: der2_poly=>der2_poly_element FINAL:: clean END TYPE element @@ -104,9 +111,9 @@ CONTAINS CLASS(element), INTENT(in):: e INTEGER, INTENT(in):: k ! index of basis function REAL(dp), DIMENSION(2), INTENT(in):: x ! barycentric coordinate - + REAL(dp) :: alpha, beta, s SELECT CASE(e%itype) - CASE(1) ! P1 + CASE(1,11) ! P1 SELECT CASE(k) CASE(2) base_element=x(1) @@ -134,7 +141,7 @@ CONTAINS STOP END SELECT - CASE(3)! P2 + CASE(3,12)! P2 SELECT CASE(k) CASE(1) base_element=x(2)*(x(2)-x(1) )!(1.0-x(1))*(1.00-2.0*x(1)) @@ -198,8 +205,61 @@ CONTAINS PRINT*, "B4, numero base ", k STOP END SELECT + CASE(7) ! P4 + s= x(1) + SELECT CASE(k) + CASE(1) + base_element = (32._dp/3._dp*(s - 1._dp)*(s - 1._dp/2._dp)*(s - 1._dp/4._dp)*(s - 3._dp/4._dp)) + CASE(2) + base_element = (32._dp*s*(s - 1._dp/2._dp)*(s - 1._dp/4._dp)*(s - 3._dp/4._dp))/3._dp + CASE(3) + base_element = -(128._dp*s*(s - 1._dp)*(s - 1._dp/2._dp)*(s - 3._dp/4._dp))/3._dp + CASE(4) + base_element = 64._dp*s*(s - 1._dp)*(s - 1._dp/4._dp)*(s - 3._dp/4._dp) + CASE(5) + base_element = -(128._dp*s*(s - 1._dp)*(s - 1._dp/2._dp)*(s - 1._dp/4._dp))/3._dp + CASE default + PRINT*, "P4, numero base ", k + STOP + END SELECT + + CASE(13) ! P3 Gauss Lobatto + alpha=0.5_dp-SQRT(5._dp)/10._dp + beta = 1._dp -alpha + SELECT CASE(k) + CASE(1) + base_element = (-x(1)+alpha)*(x(1)-beta)*(x(1)-1.0)/(alpha*beta) + CASE(2) + base_element = x(1)*(x(1)-alpha)*(x(1)-beta)/alpha/beta + CASE(3) + base_element = x(1)*(x(1)-beta)*(x(1)-1.0_dp)/alpha/(-2._dp*alpha+1._dp)/beta + CASE(4) + base_element = x(1)*(x(1)-alpha)*(x(1)-1.0_dp)/alpha/(2._dp*alpha-1._dp)/beta + CASE default + PRINT*, "P3 Gauss Lobatto, numero base ", k + STOP + END SELECT + + CASE(14) ! P4 Gauss Lobatto + alpha=0.5_dp-SQRT(21._dp)/14._dp + beta = 1._dp -alpha + SELECT CASE(k) + CASE(1) + base_element = (2._dp*(alpha-x(1))*(x(1)-1._dp)*(x(1)-0.5)*(x(1)-beta))/(-alpha*beta) + CASE(2) + base_element = (2._dp*x(1)*(-alpha + x(1))*(x(1) - 0.5)*(x(1) - beta))/(alpha*beta) + CASE(3) + base_element = (x(1)*(x(1)-1._dp)*(x(1)-0.5_dp)*(x(1)-beta))/(-alpha*(2._dp*alpha-1)*beta*(alpha-0.5_dp)) + CASE(4) + base_element = -(4._dp*x(1)*(alpha -x(1))*(x(1)-1._dp)*(x(1)-beta))/(alpha-0.5)**2._dp + CASE(5) + base_element =-(x(1)*(alpha-x(1))*(x(1)-1._dp)*(x(1)-0.5_dp))/(-alpha*(2._dp*alpha-1._dp)*beta*(alpha-0.5)) + CASE default + PRINT*, "P4 Gauss Lobatto, numero base ", k + STOP + END SELECT + CASE default - PRINT*, mod_name PRINT*, "Type non existant", e%itype STOP END SELECT @@ -276,22 +336,77 @@ CONTAINS END FUNCTION der_sec_element + FUNCTION der2_poly_element(e,u) RESULT(Uder) + CLASS(element), INTENT(in)::e + REAL(8),DIMENSION(e%nsommets), INTENT(in)::u + REAL(8),DIMENSION(MAX(1,e%nsommets-2)):: coeff + REAL(8),DIMENSION(e%nsommets):: Uder + REAL(8):: u1,u2,u3,u4,x0,x1,x2,x3 + SELECT CASE(e%itype) + CASE(1)!P1 + coeff(1)=0. + Uder(1:2)=0. + CASE(2) + x0=0. + x1=0.5 + x2=1. + u1=u(1) + u2=u(3) + u3=u(2) + coeff(1)=(2*(u1*x1 - u2*x0 - u1*x2 + u3*x0 + u2*x2 - u3*x1))& + &/((x0 - x1)*(x0 - x2)*(x1 - x2)) + Uder(1:3)=coeff(1)/e%volume**2 + CASE(5) + x0=0. + x1=1./3. + x2=2./3. + x3=1. + u1=u(1) + u2=u(3) + u3=u(4) + u4=u(2) + coeff(1)=(2*(u1*x1*(x2**3) - u1*(x1**3)*x2 - u2*x0*(x2**3) & + &+ u2*(x0**3)*x2 + u3*x0*(x1**3) - u3*(x0**3)*x1 - u1*x1*(x3**3 )& + & + u1*(x1**3)*x3 + u2*x0*(x3**3) - u2*(x0**3)*x3 - u4*x0*(x1**3) & + &+ u4*(x0**3)*x1 + u1*x2*(x3**3) - u1*(x2**3)*x3 - u3*x0*(x3**3) & + &+ u3*(x0**3)*x3 + u4*x0*(x2**3) - u4*(x0**3)*x2 - u2*x2*(x3**3) & + &+ u2*(x2**3)*x3 + u3*x1*(x3**3) - u3*(x1**3)*x3 - u4*x1*(x2**3) + & + & u4*(x1**3)*x2))/((x0 - x1)*(x0 - x2)*(x0 - x3)*(x1 - x2)*(x1 - x3)*(x2 - x3)) + + coeff(2)= -(6*(u1*x1*(x2**2) - u1*(x1**2)*x2 - u2*x0*(x2**2) + u2*(x0**2)*x2 & + & + u3*x0*(x1**2) - u3*(x0**2)*x1 - u1*x1*(x3**2) + u1*(x1**2)*x3 + u2*x0*(x3**2) & + & - u2*(x0**2)*x3 - u4*x0*(x1**2) + u4*(x0**2)*x1 + u1*x2*(x3**2) - u1*(x2**2)*x3 & + & - u3*x0*(x3**2) + u3*(x0**2)*x3 + u4*x0*(x2**2) - u4*(x0**2)*x2 - u2*x2*(x3**2) & + & + u2*(x2**2)*x3 + u3*x1*(x3**2) - u3*(x1**2)*x3 - u4*x1*(x2**2) + u4*(x1**2)*x2)) & + &/((x0 - x1)*(x0 - x2)*(x0 - x3)*(x1 - x2)*(x1 - x3)*(x2 - x3)) + + Uder(1)=(coeff(1)+coeff(2)*x0)/e%volume**2 + Uder(3)=(coeff(1)+coeff(2)*x1)/e%volume**2 + Uder(4)=(coeff(1)+coeff(2)*x2)/e%volume**2 + Uder(2)=(coeff(1)+coeff(2)*x3)/e%volume**2 + CASE default + PRINT*, 'der2_poly, element 1d' + STOP + END SELECT + + END FUNCTION der2_poly_element + FUNCTION gradient_element(e,k,x) RESULT (grad) ! gradient in reference element CLASS(element), INTENT(in):: e INTEGER, INTENT(in):: k ! numero de la fonction de base REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques REAL(dp),DIMENSION(n_dim):: grad - REAL(dp):: fx,fy,fz + REAL(dp):: fx,fy,fz, alpha, s SELECT CASE(e%itype) - CASE(1)! P1 + CASE(1,11)! P1 SELECT CASE(k) CASE(1) fx=-1.0_dp CASE(2) fx= 1.0_dp END SELECT - CASE(3) !P2 + CASE(3,12) !P2 SELECT CASE(k) CASE(1) fx=-3.0_dp+4.0_dp*x(1) @@ -323,36 +438,88 @@ CONTAINS CASE(5) SELECT CASE(k) CASE(1) - fx=x(1)*( -3.0_dp*x(1)+6.0_dp) -3.0_dp + fx=-3.0_dp*x(2)*x(2) !fx=-3.0*x(2)*x(2) CASE(2) - fx=3.0*x(1)*x(1) + fx=3.0_dp*x(1)*x(1) !fx=3.0*x(1)*x(1) CASE(3) - fx=(9.0_dp*x(1)-12.0_dp)*x(1)+3.0_dp + fx= 3.0_dp*x(2)*( x(2)-2._dp*x(1) ) !fx=3.0*x(2)*( x(2)-2.*x(1) ) CASE(4) - fx= (-9.0_dp*x(1)+6.0_dp)*x(1) + fx= 3.0_dp*x(1)*(2._dp*x(2)-x(1)) !fx=6*x(1)*x(2)-3*x(1)*x(1) END SELECT - CASE(6) + CASE(6) !B4 SELECT CASE(k) CASE(1) - !fx=-4.0+12.0*x(1)-12.0*x(1)*x(1)+4.0*x(1)*x(1)*x(1) fx=-4.0_dp*x(2)*x(2)*x(2) CASE(2) - !fx=4.0*x(1)*x(1)*x(1) fx= 4.0_dp* x(1)*x(1)*x(1) CASE(3) - !fx=4.0-24.0*x(1)+36.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) fx= 4.0_dp*( x(2)-3.0_dp*x(1) )*x(2)*x(2) CASE(4) - !fx=12.0*x(1)-36.0*x(1)*x(1)+24.0*x(1)*x(1)*x(1) fx=12.0_dp * x(1)*x(2) * ( x(2)-x(1) ) CASE(5) - !fx=12.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) fx=4.0_dp*( 3._dp*x(2)-x(1) )*x(1)*x(1) END SELECT + + CASE(7) !P4 + s=x(1) + SELECT CASE(k) + CASE(1) + !fx=-4.0+12.0*x(1)-12.0*x(1)*x(1)+4.0*x(1)*x(1)*x(1) + fx= (((128._dp*s)/3._dp - 80._dp)*s + 140._dp/3._dp)*s - 25._dp/3._dp + CASE(2) + !fx=4.0*x(1)*x(1)*x(1) + fx=(((128._dp*s)/3._dp - 48._dp)*s + (44._dp)/3._dp)*s - 1._dp + CASE(3) + !fx=4.0-24.0*x(1)+36.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) + fx= ((- (512._dp*s)/3._dp + 288._dp)*s - (416._dp)/3._dp)*s + 16._dp + CASE(4) + !fx=12.0*x(1)-36.0*x(1)*x(1)+24.0*x(1)*x(1)*x(1) + fx=((256._dp*s - 384._dp)*s + 152._dp)*s - 12._dp + CASE(5) + !fx=12.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) + fx= s*(s*(-(512._dp*s)/3._dp + 224._dp) - 224._dp/3._dp) + 16._dp/3._dp + END SELECT + + CASE(13) !P3 Gauss Lobatto + alpha=0.5_dp-SQRT(5._dp)/10._dp + SELECT CASE(k) + CASE(1) + fx=(- alpha**2._dp + alpha + 3._dp*x(1)**2._dp - 4._dp*x(1) + 1._dp)/(alpha*(alpha - 1._dp)) + !fx=-3.0*x(2)*x(2) + CASE(2) + fx=-(- alpha**2._dp + alpha + 3._dp*x(1)**2._dp - 2._dp*x(1))/(alpha*(alpha - 1._dp)) + !fx=3.0*x(1)*x(1) + CASE(3) + fx=(2._dp*alpha*x(1) - 4._dp*x(1) - alpha + 3._dp*x(1)**2._dp + 1._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) + !fx=3.0*x(2)*( x(2)-2.*x(1) ) + CASE(4) + fx= -(alpha - 2._dp*x(1) - 2._dp*alpha*x(1) + 3._dp*x(1)**2._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) + !fx=6*x(1)*x(2)-3*x(1)*x(1) + END SELECT + CASE(14) !P4 Gauss Lobatto + alpha=0.5_dp-SQRT(21._dp)/14._dp + s=x(1) + SELECT CASE(k) + CASE(1) + fx=(4*alpha**2*s - 3*alpha**2 - 4*alpha*s + 3*alpha - 8*s**3 + 15*s**2 - 8*s + 1)/(alpha*(alpha - 1)) + !fx=-3.0*x(2)*x(2) + CASE(2) + fx=-(- 4*alpha**2*s + alpha**2 + 4*alpha*s - alpha + 8*s**3 - 9*s**2 + 2*s)/(alpha*(alpha - 1)) + !fx=3.0*x(1)*x(1) + CASE(3) + fx=(alpha + 8*s - 6*alpha*s + 6*alpha*s**2 - 15*s**2 + 8*s**3 - 1)/(alpha*(2*alpha - 1)**2*(alpha - 1)) + !fx=3.0*x(2)*( x(2)-2.*x(1) ) + CASE(4) + fx= (16*(2*s - 1)*(- alpha**2 + alpha + 2*s**2 - 2*s))/(2*alpha - 1)**2 + !fx=6*x(1)*x(2)-3*x(1)*x(1) + CASE(5) + fx = -(alpha - 2*s - 6*alpha*s + 6*alpha*s**2 + 9*s**2 - 8*s**3)/(alpha*(2*alpha - 1)**2*(alpha - 1)) + END SELECT + CASE default PRINT*, "Type non existant", e%itype STOP @@ -365,17 +532,17 @@ CONTAINS INTEGER, INTENT(in):: k ! numero de la fonction de base REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques REAL(dp),DIMENSION(n_dim):: grad2 - REAL(dp):: fxx + REAL(dp):: fxx, alpha,s SELECT CASE(e%itype) - CASE(1)! P1 + CASE(1,11)! P1 SELECT CASE(k) CASE(1) fxx=0.0_dp CASE(2) fxx=0.0_dp END SELECT - CASE(3) !P2 + CASE(3,12) !P2 SELECT CASE(k) CASE(1) fxx=4.0_dp @@ -394,15 +561,20 @@ CONTAINS fxx=-4.0_dp END SELECT CASE(4) ! P3 + alpha=1._dp/3._dp SELECT CASE(k) CASE(1) - fxx=-27._dp*x(1) + !fxx=-6.0*x(1)+6.0 + fxx=(6._dp*x(1) - 4._dp)/(alpha*(alpha - 1._dp)) CASE(2) - fxx=27._dp*x(1) + !fxx=6.0*x(1) + fxx=-(6._dp*x(1) - 2._dp)/(alpha*(alpha - 1._dp)) CASE(3) - fxx= 81._dp*x(1) + !fxx=18.0*x(1)-12.0 + fxx= (2._dp*alpha + 6._dp*x(1) - 4._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) CASE(4) - fxx=-81._dp*x(1) + !fxx=-18.0*x(1)+6.0 + fxx=(2._dp*alpha - 6._dp*x(1) + 2._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) END SELECT CASE(5) SELECT CASE(k) @@ -430,6 +602,59 @@ CONTAINS CASE(5) fxx=24.0_dp*x(1)-48.0_dp*x(1)*x(1) END SELECT + + CASE(7) !P4 + s=x(1) + SELECT CASE(k) + CASE(1) + fxx=(128._dp*s - 160._dp)*s + 140._dp/3._dp + CASE(2) + fxx= (128._dp*s - 96._dp)*s + 44._dp/3._dp + CASE(3) + fxx= (-512._dp*s + 576._dp)*s - 416._dp/3._dp + CASE(4) + fxx= 768._dp*s*(s - 1._dp) + 152._dp + CASE(5) + fxx= (- 512._dp*s + 448._dp)*s - 224._dp/3._dp + END SELECT + + CASE(13) + alpha=0.5_dp-SQRT(5._dp)/10._dp + SELECT CASE(k) + CASE(1) + !fxx=-6.0*x(1)+6.0 + fxx=(6._dp*x(1) - 4._dp)/(alpha*(alpha - 1._dp)) + CASE(2) + !fxx=6.0*x(1) + fxx=-(6._dp*x(1) - 2._dp)/(alpha*(alpha - 1._dp)) + CASE(3) + !fxx=18.0*x(1)-12.0 + fxx= (2._dp*alpha + 6._dp*x(1) - 4._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) + CASE(4) + !fxx=-18.0*x(1)+6.0 + fxx=(2._dp*alpha - 6._dp*x(1) + 2._dp)/(alpha*(2._dp*alpha**2._dp - 3._dp*alpha + 1._dp)) + END SELECT + + CASE(14) + alpha=0.5_dp-SQRT(21._dp)/14._dp + s=x(1) + SELECT CASE(k) + CASE(1) + !fxx=-6.0*x(1)+6.0 + fxx=-(- 4*alpha**2 + 4*alpha + 24*s**2 - 30*s + 8)/(alpha*(alpha - 1)) + CASE(2) + !fxx=6.0*x(1) + fxx=-(- 4*alpha**2 + 4*alpha + 24*s**2 - 18*s + 2)/(alpha*(alpha - 1)) + CASE(3) + !fxx=18.0*x(1)-12.0 + fxx= (12*alpha*s - 30*s - 6*alpha + 24*s**2 + 8)/(alpha*(2*alpha - 1)**2*(alpha - 1)) + CASE(4) + !fxx=-18.0*x(1)+6.0 + fxx=(32*(- alpha**2 + alpha + 6*s**2 - 6*s + 1))/(2*alpha - 1)**2 + CASE(5) + fxx = (6*alpha - 18*s - 12*alpha*s + 24*s**2 + 2)/(alpha*(2*alpha - 1)**2*(alpha - 1)) + END SELECT + CASE default PRINT*, "Type non existant", e%itype STOP @@ -488,7 +713,7 @@ CONTAINS REAL(dp),PARAMETER:: s4_9=1._dp/3._dp*SQRT(5._dp+2._dp*SQRT(10.0_dp/7.0_dp)) SELECT CASE(e%itype) - CASE(1) + CASE(1,11) e%nquad=2 nquad=e%nquad ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) @@ -514,42 +739,83 @@ CONTAINS - ! s=sqrt(0.6_dp) !0.7745966692414834_dp !SQRT(0.6d0) + ! s=sqrt(0.6_dp) !0.7745966692414834_dp !SQRT(0.6_dp) e%quad(1,1)=s2_3 !0.5_dp*(1.0_dp - s) e%quad(2,1)=s3_3 !0.5_dp*(1.0_dp + s) - e%weight(1) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 + e%weight(1) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0_dp/18.0_dp - e%quad(1,2)=s3_3 !0.5d0*(1.0d0 + s) - e%quad(2,2)=s2_3 !0.5d0*(1.0d0 - s) - e%weight(2) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 + e%quad(1,2)=s3_3 !0.5_dp*(1.0_dp + s) + e%quad(2,2)=s2_3 !0.5_dp*(1.0_dp - s) + e%weight(2) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0_dp/18.0_dp - e%quad(1,3)=0.5d0 - e%quad(2,3)=0.5d0 - e%weight(3)= weight2_3 !8._dp/18._dp!0.4444444444444444 ! 8.0d0/18.0d0 + e%quad(1,3)=0.5_dp + e%quad(2,3)=0.5_dp + e%weight(3)= weight2_3 !8._dp/18._dp!0.4444444444444444 ! 8.0_dp/18.0_dp + + CASE(12)!! exact for degree 3, underintegration + e%nquad = 3 + nquad = e%nquad + ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) + + e%quad(1,1)=0._dp + e%quad(2,1)=1.0_dp + e%weight(1)=1._dp/6._dp + + + e%quad(1,2)=0.5_dp + e%quad(2,2)=0.5_dp + e%weight(2)=2._dp/3._dp + + e%quad(1,3)=1._dp + e%quad(2,3)=0._dp + e%weight(3)=1._dp/6._dp CASE(4,5) !! exact for degree 7 e%nquad=4 ! ordre 7 nquad=e%nquad ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad) ) - ! s=(18._dp-sqrt(30._dp))/72._dp !0.1739274225687269_dp !(18.- SQRT(30.))/72. !SQRT(30.d0)*(-5.0d0+3.d0*SQRT(30.d0))/360.d0 + ! s=(18._dp-sqrt(30._dp))/72._dp !0.1739274225687269_dp !(18.- SQRT(30.))/72. !SQRT(30._dp)*(-5.0_dp+3._dp*SQRT(30._dp))/360._dp e%weight(1:2)=s1_7 - ! s=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp !0.8611363115940526_dp!SQRT(525.d0+70.d0*SQRT(30.d0))/35.d0 + ! s=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp !0.8611363115940526_dp!SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp e%quad(1,1)=s3_7! 0.50_dp*(1.00_dp-s) e%quad(1,2)=s4_7 !0.50_dp*(1.00_dp+s) - e%quad(2,1)=e%quad(1,2) !0.5d0*(1.0d0+s) - e%quad(2,2)=e%quad(1,1) !0.5d0*(1.0d0-s) + e%quad(2,1)=e%quad(1,2) !0.5_dp*(1.0_dp+s) + e%quad(2,2)=e%quad(1,1) !0.5_dp*(1.0_dp-s) - ! s=(18._dp+ SQRT(30._dp))/72._dp !0.3260725774312731_dp !(18.+ SQRT(30.))/72.! SQRT(30.d0)*(5.0d0+3.d0*SQRT(30.d0))/360.d0 + ! s=(18._dp+ SQRT(30._dp))/72._dp !0.3260725774312731_dp !(18.+ SQRT(30.))/72.! SQRT(30._dp)*(5.0_dp+3._dp*SQRT(30._dp))/360._dp e%weight(3:4)=s5_7 - ! s=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp !0.3399810435848563_dp !SQRT(525.d0-70.d0*SQRT(30.d0))/35.d0 + ! s=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp !0.3399810435848563_dp !SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp e%quad(1,3)=s7_7 !0.50_dp*(1.00_dp-s) e%quad(1,4)=s8_7 !0.50_dp*(1.00_dp+s) - e%quad(2,3)=e%quad(1,4) !0.5d0*(1.0d0+s) - e%quad(2,4)=e%quad(1,3) !0.5d0*(1.0d0-s) + e%quad(2,3)=e%quad(1,4) !0.5_dp*(1.0_dp+s) + e%quad(2,4)=e%quad(1,3) !0.5_dp*(1.0_dp-s) + + ! e%quad(2,:)=1.0_dp-e%quad(1,:) + CASE(13)!! exact for order 4, underintegration + e%nquad=4 + nquad=e%nquad + ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad) ) + + s=0.5_dp-SQRT(5._dp)/10._dp + + e%quad(1,1)=0._dp + e%quad(2,1)=1.0_dp + e%weight(1)=1._dp/12._dp - ! e%quad(2,:)=1.0d0-e%quad(1,:) - CASE(6) ! exact for degree 9 + e%quad(1,2)=s + e%quad(2,2)=1._dp-s + e%weight(2)=5._dp/12._dp + + e%quad(1,3)=1._dp -s + e%quad(2,3)=s + e%weight(3)=5._dp/12._dp + + e%quad(1,4)=1._dp + e%quad(2,4)=0._dp + e%weight(4)=1._dp/12._dp + + CASE(6,7) ! exact for degree 9 e%nquad=5 nquad=e%nquad @@ -574,6 +840,36 @@ CONTAINS e%quad(1,5)=0.5_dp e%quad(2,5)=0.5_dp e%weight(5)=64.0_dp/225.0_dp + + + CASE(14)!! exact for order 5, underintegration + e%nquad=5 + nquad=e%nquad + ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad) ) + + s=0.5_dp-SQRT(21._dp)/14._dp + + e%quad(1,1)=0._dp + e%quad(2,1)=1.0_dp + e%weight(1)=1._dp/20._dp + + + e%quad(1,2)=s + e%quad(2,2)=1._dp-s + e%weight(2)=49._dp/180._dp + + e%quad(1,3)=0.5_dp + e%quad(2,3)=0.5_dp + e%weight(3)=16._dp/45._dp + + e%quad(1,4)=1._dp -s + e%quad(2,4)=s + e%weight(4)=49._dp/180._dp + + e%quad(1,5)=1._dp + e%quad(2,5)=0._dp + e%weight(5)=1._dp/20._dp + END SELECT e%weight = e%weight/SUM(e%weight) @@ -593,7 +889,7 @@ CONTAINS ! ebase0( number of the basis function, point l) e%base0=0. SELECT CASE(e%itype) - CASE(1,3,4) ! P1 + CASE(1,3,4,7,11,12,13,14) ! lagrangian functions DO l=1,e%nsommets e%base0(l,l)=1.0 @@ -662,20 +958,29 @@ CONTAINS e%x(1,1)=0.0 e%x(1,2)=1.0 SELECT CASE (e%itype) - CASE(1) + CASE(1,11) e%dof2ind = (/1, 2/) - CASE(2,3) + CASE(2,3,12) e%x(1,3)=0.5 e%dof2ind = (/1, 3, 2/) CASE(4,5) e%x(1,3)=1./3. e%x(1,4)=2./3. e%dof2ind = (/1, 3, 4, 2/) - CASE(6) + CASE(13) + e%x(1,3)=0.5_dp-SQRT(5._dp)/10._dp + e%x(1,4)=0.5_dp+SQRT(5._dp)/10._dp + e%dof2ind = (/1, 3, 4, 2/) + CASE(6,7) e%x(1,3)=0.25 e%x(1,4)=0.5 e%x(1,5)=0.75 e%dof2ind = (/1, 3, 4, 5, 2/) + CASE(14) + e%x(1,3)=0.5_dp-SQRT(21._dp)/14._dp + e%x(1,4)=0.5 + e%x(1,5)=0.5_dp+SQRT(21._dp)/14._dp + e%dof2ind = (/1, 3, 4, 5, 2/) CASE default PRINT*, "bary_element, cas not implemented" STOP diff --git a/Src1D/geometry.f90 b/Src1D/geometry.f90 index 3ae9865..d9d0b90 100755 --- a/Src1D/geometry.f90 +++ b/Src1D/geometry.f90 @@ -23,24 +23,25 @@ CONTAINS SUBROUTINE geom(Mesh, DATA) TYPE (maillage), INTENT(inout):: mesh TYPE(donnees), INTENT(inout):: DATA + REAL(dp), DIMENSION(:), ALLOCATABLE:: base - INTEGER, PARAMETER,DIMENSION(6)::loc_ndofs=(/2,3,3,4,4,5/) - REAL(dp):: dx, a + INTEGER, PARAMETER,DIMENSION(14)::loc_ndofs=(/2,3,3,4,4,5,5,0,0,0,2,3,4,5/) + REAL(dp):: dx, a, alpha TYPE(element):: e - INTEGER:: nt, jt, itype, p1, p2, k + INTEGER:: nt, jt, itype, p1, p2, k, i, iq, l nt=DATA%nt; itype=DATA%itype SELECT CASE(DATA%itype) - CASE(1) + CASE(1,11) Mesh%nt=DATA%nt Mesh%ndofs=DATA%nt+1 - CASE(2,3) + CASE(2,3,12) Mesh%nt=DATA%nt Mesh%ndofs=2*DATA%nt+1 - CASE(4,5) + CASE(4,5,13) mesh%nt=DATA%nt Mesh%ndofs=nt+1+2*nt - CASE(6) - Mesh%nt=DATA%nt + case(6,7,14) + Mesh%nt=Data%nt Mesh%ndofs=nt+1+3*nt CASE default PRINT*, "Error: this element is not yet defined", DATA%itype @@ -66,7 +67,7 @@ CONTAINS mesh%e(jt)%nu(2)=jt+1 SELECT CASE(itype) - CASE(2,3) + CASE(2,3,12) k=k+1 mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+dx/2. mesh%e(jt)%nu(3)=nt+1+jt @@ -77,13 +78,29 @@ CONTAINS mesh%e(jt)%nu(3)=nt+1+2*(jt-1)+1 k=k+1 mesh%e(jt)%nu(4)=nt+1+2*(jt-1)+2 - CASE(6) + CASE(13) + alpha= 0.5d0-SQRT(5.d0)/10.d0 + mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+alpha*dx + mesh%e(jt)%coor(4)=mesh%e(jt)%coor(1)+(1.d0-alpha)*dx + k=k+1 + mesh%e(jt)%nu(3)=nt+1+2*(jt-1)+1 + k=k+1 + mesh%e(jt)%nu(4)=nt+1+2*(jt-1)+2 + case(6,7) mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+dx/4. mesh%e(jt)%coor(4)=mesh%e(jt)%coor(1)+dx/2. mesh%e(jt)%coor(5)=mesh%e(jt)%coor(1)+dx*0.75 mesh%e(jt)%nu(3)=nt+1+3*(jt-1)+1 mesh%e(jt)%nu(4)=nt+1+3*(jt-1)+2 mesh%e(jt)%nu(5)=nt+1+3*(jt-1)+3 + case(14) + alpha = 0.5d0-SQRT(21.d0)/14.d0 + mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+alpha*dx + mesh%e(jt)%coor(4)=mesh%e(jt)%coor(1)+dx/2. + mesh%e(jt)%coor(5)=mesh%e(jt)%coor(1)+(1.d0-alpha)*dx + mesh%e(jt)%nu(3)=nt+1+3*(jt-1)+1 + mesh%e(jt)%nu(4)=nt+1+3*(jt-1)+2 + mesh%e(jt)%nu(5)=nt+1+3*(jt-1)+3 END SELECT @@ -96,55 +113,84 @@ CONTAINS CALL mesh%e(jt)%base_ref() call mesh%e(jt)%eval_coeff() ENDDO - ! connectivite: for each edge, we give the element before and after - Mesh%nsegmt=nt!+1 ! periodicite: the last edge is the first one, one should not count it twice - ALLOCATE(Mesh%edge(Mesh%nsegmt)) - DO jt=2,Mesh%nsegmt!-1 - Mesh%edge(jt)%jt1=jt-1 - Mesh%edge(jt)%jt2=jt - Mesh%edge(jt)%bord=.FALSE. - ENDDO - SELECT CASE(DATA%test) - CASE(0,2,3,5) + + ! connectivite: for each edge, we give the element before and after + IF (DATA%periodicBC) THEN + Mesh%nsegmt=nt!+1 ! periodicite: the last edge is the first one, one should not count it twice + ALLOCATE(Mesh%edge(Mesh%nsegmt)) + DO jt=2,Mesh%nsegmt!-1 + Mesh%edge(jt)%jt1=jt-1 + Mesh%edge(jt)%jt2=jt + Mesh%edge(jt)%bord=.FALSE. + ENDDO ! for periodic BCs ! here I take into account the periodicity of the mesh Mesh%edge(1)%jt2= 1!Mesh%nt Mesh%edge(1)%jt1=Mesh%nt !1 Mesh%edge(1)%bord=.FALSE. - Mesh%edge(mesh%nsegmt)%jt2=1 !added it to debug convergence - Mesh%edge(mesh%nsegmt)%jt1=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%bord=.FALSE.!added it to debug convergence - CASE default + + ELSE + + Mesh%nsegmt=nt+1 ! also first and last one + + ALLOCATE(Mesh%edge(Mesh%nsegmt)) + DO jt=2,Mesh%nsegmt-1 + Mesh%edge(jt)%jt1=jt-1 + Mesh%edge(jt)%jt2=jt + Mesh%edge(jt)%bord=.false. + ENDDO ! for outflow BCs ! here I take into account the periodicity of the mesh Mesh%edge(1)%jt2= 1 Mesh%edge(1)%jt1= 1 - Mesh%edge(1)%bord=.FALSE. - - Mesh%edge(mesh%nsegmt)%jt2=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%jt1=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%bord=.FALSE.!added it to debug convergence - END SELECT + Mesh%edge(1)%bord=.true. + Mesh%edge(Mesh%nsegmt)%jt2=Mesh%nt !Mesh%nt !1 + Mesh%edge(Mesh%nsegmt)%jt1=Mesh%nt + Mesh%edge(Mesh%nsegmt)%bord=.true. + + END IF ALLOCATE(Mesh%aires(Mesh%ndofs)) Mesh%aires=0.0_dp DO jt=1, nt e=Mesh%e(jt) - Mesh%aires(e%nu)=Mesh%aires(e%nu)+e%volume/REAL(e%nsommets,dp) +#if (0==1) + ! VERSION GOOD ONLY FOR B^k + Mesh%aires(e%nu)=Mesh%aires(e%nu)+e%volume/REAL(e%nsommets) +#else + !!!!! MORE GENERAL VERSION + ALLOCATE( base(e%nsommets)) + DO iq=1, e%nquad + DO l=1, e%nsommets + base(l )=e%base (l, e%quad(:,iq)) + ENDDO + DO i=1, e%nsommets + Mesh%aires(e%nu(i)) = Mesh%aires(e%nu(i)) + (base(i))*e%weight(iq)* e%volume + ENDDO ! i + ENDDO + + DEALLOCATE(base) +#endif + ! make the cells periodic. + ! warning : the special numbering is a trap ENDDO ! make the cells periodic. ! warning : the special numbering is a trap - p1=Mesh%e(1)%nu(1) - p2=Mesh%e(Mesh%nt)%nu(2) - mesh%aires(p1)=Mesh%aires(p1)+Mesh%aires(p2) - Mesh%aires(p2)=Mesh%aires(p1) + IF (DATA%periodicBC) THEN + !!ONLY IF PERIODIC BOUNDARY + + p1=Mesh%e(1)%nu(1) + p2=Mesh%e(Mesh%nt)%nu(2) + mesh%aires(p1)=Mesh%aires(p1)+Mesh%aires(p2) + Mesh%aires(p2)=Mesh%aires(p1) + END IF ! this to avoid further divisions Mesh%aires=1.0_dp/Mesh%aires diff --git a/Src1D/init_bc_burgers.f90 b/Src1D/init_bc_burgers.f90 new file mode 100644 index 0000000..5f9b154 --- /dev/null +++ b/Src1D/init_bc_burgers.f90 @@ -0,0 +1,142 @@ +MODULE init_bc + + USE param2d + USE overloading + USE precision + + IMPLICIT NONE + +CONTAINS + +!--------------------------------------- +! Setup domain +!--------------------------------------- + + SUBROUTINE init_geom(DATA) + TYPE(donnees), INTENT(inout):: DATA + + SELECT CASE(DATA%test) + CASE(0,10,11) + ! wave packet + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + CASE(1) + ! shock moving + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + + CASE default + PRINT*, "Wrong test number for geom(), test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE init_geom + +!--------------------------------------- +! Set initial and boundary conditions +!--------------------------------------- + + FUNCTION IC(x,DATA) RESULT(Var) + REAL(dp), INTENT(in) :: x + TYPE(donnees), INTENT(inout):: DATA + TYPE(PVar) :: Var + + SELECT CASE(DATA%test) + CASE(0) + DATA%tmax = 0.1_dp + Var%u(1) = 0.5*sin(2._dp*ACOS(-1._dp)*x)+0.25_dp + CASE(10,11) + DATA%tmax = 0.1_dp + Var%u(1) = 0.5*sin(2._dp*ACOS(-1._dp)*x) + CASE(1) + IF (x<0.5) THEN + Var%u(1) = 1._dp + ELSE + Var%u(1) = 0._dp + ENDIF + CASE default + PRINT*, "Wrong test number for geom(), test = ", DATA%test + STOP + END SELECT + + END FUNCTION IC + + SUBROUTINE BC(Var,i1,iN,DATA,k) + TYPE(variables), INTENT(inout):: Var + INTEGER, INTENT(in) :: i1, iN, k + TYPE(donnees), INTENT(in) :: DATA + TYPE(Pvar):: a0,a1 + INTEGER:: p1, pN + SELECT CASE(DATA%test) + CASE(0,11) + ! periodic + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=0.0_dp!a0+a1 + Var%un(pN)=0.0_dp!a0+a1 + Var%un(p1)=a0+a1 + Var%un(pN)=a0+a1 + + CASE(1,2) + ! outflow + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=0._dp + Var%un(pN)=0._dp + Var%ua(p1,k-1)%u(1) = 1._dp + + CASE(3) + ! reflective + + CASE(10) + Var%un(i1)%u(1) = 0._dp + Var%un(iN)%u(1) = 0._dp + Var%ua(i1,k-1)%u(1) = 0._dp + Var%ua(iN,k-1)%u(1) = 0._dp + + CASE default + PRINT*, "Wrong test number for wave_1D, test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE BC + +!--------------------------------------- +! Exact solution +!--------------------------------------- + + FUNCTION exact_burgers(DATA,x,t) RESULT (U_ex) + TYPE(donnees), INTENT(inout) :: DATA + REAL(dp), INTENT(in) :: x + REAL(dp), INTENT(in) :: t + TYPE(Pvar) :: U_ex + U_ex = IC(x-a*t,DATA) + print*, "exact solution to be implemented" +! print*, 'lambda = ', lambda +! print*, 'R = ', R +! print*, 'L = ', L +! print*, 'U01 = ', U01%U +! print*, 'U02 = ', U02%U +! print*, 'W = ', W%U +! print*, 'U_ex = ', U_ex%U + + END FUNCTION exact_burgers + + + SUBROUTINE isPeriodic(DATA) + TYPE(donnees), INTENT(inout) :: DATA + + SELECT CASE(DATA%test) + CASE(0,11) + DATA%periodicBC = .TRUE. + CASE default + DATA%periodicBC = .FALSE. + END SELECT + END SUBROUTINE isPeriodic + + +END MODULE init_bc diff --git a/Src1D/init_bc_euler.f90 b/Src1D/init_bc_euler.f90 index 932f630..d3ef51d 100644 --- a/Src1D/init_bc_euler.f90 +++ b/Src1D/init_bc_euler.f90 @@ -30,54 +30,54 @@ CONTAINS SELECT CASE(DATA%test) CASE(0) ! Isentropic - DATA%domain_left = -1.0 - DATA%Length = 2.0 + DATA%domain_left = -1.0_dp + DATA%Length = 2.0_dp CASE(1) ! Sod - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE(2) ! Shu-Osher - DATA%domain_left = -5.0 - DATA%Length = 10.0 + DATA%domain_left = -5.0_dp + DATA%Length = 10.0_dp CASE(3) ! Woodward-Colella - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE(4) ! channel - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE(5) ! Isentropic vortex - DATA%domain_left = -1.0 - DATA%Length = 2.0 + DATA%domain_left = -1.0_dp + DATA%Length = 2.0_dp CASE(6) ! Woodward-Colella left - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE(7) ! LeBlanc - DATA%domain_left = 0.0 - DATA%Length = 9.0 + DATA%domain_left = 0.0_dp + DATA%Length = 9.0_dp CASE(8) !simetrie - DATA%domain_left = 0.0 - DATA%Length = 10.0 + DATA%domain_left = 0.0_dp + DATA%Length = 10.0_dp CASE(9) ! 1-2-3 - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE(10) - DATA%domain_left = 0.0 - DATA%Length = 1.0 + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp CASE default PRINT*, "Wrong test number for geom(), test = ", DATA%test STOP @@ -93,159 +93,159 @@ CONTAINS REAL(dp), INTENT(in) :: x TYPE(donnees), INTENT(inout):: DATA TYPE(PVar) :: Var - REAL :: alph, p, u, ro - REAL:: ms, rhoR,uR,pR,aR,mr,S3, rho_star,u_star,p_star + REAL(dp) :: alph, p, u, ro + REAL(dp):: ms, rhoR,uR,pR,aR,mr,S3, rho_star,u_star,p_star !--------------- ! for Euler SELECT CASE(DATA%test) CASE(0) ! Convergence test: isentropic flow - DATA%tmax = 0.1 - gmm = 3.0 - alph = 0.9999995 - Var%u(1) = 1. + 1. + alph*SIN(PI*x) - Var%u(2) = 0. + DATA%tmax = 0.1_dp + gmm = 3.0_dp + alph = 0.9999995_dp + Var%u(1) = 1._dp + 1._dp + alph*SIN(PI*x) + Var%u(2) = 0._dp Var%u(3) = Var%u(1)*epsEOS(Var%u(1),(Var%u(1))**gmm) CASE(1) ! Sod - DATA%tmax = 0.16 - IF (x <= 0.5) THEN - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1.) ! [J] + DATA%tmax = 0.16_dp + IF (x <= 0.5_dp) THEN + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1._dp) ! [J] ELSE - Var%u(1) = 0.125 - Var%u(2) = 0. - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),0.1) + Var%u(1) = 0.125_dp + Var%u(2) = 0._dp + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),0.1_dp) END IF CASE(2) ! Shu-Osher - DATA%tmax = 1.8 - alph = 0.2 - IF (x <= -4.) THEN - Var%u(1) = 3.857143 ! [kg/m^3] - Var%u(2) = Var%u(1)*2.629369 ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.33333333333) + 0.5*Var%u(2)**2/Var%u(1) ! [J] + DATA%tmax = 1.8_dp + alph = 0.2_dp + IF (x <= -4._dp) THEN + Var%u(1) = 3.857143_dp! [kg/m^3] + Var%u(2) = Var%u(1)*2.629369_dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.33333333333_dp) + 0.5_dp*Var%u(2)**2_dp/Var%u(1) ! [J] ELSE - Var%u(1) = 1. + alph*SIN(5.*x) - Var%u(2) = 0. - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1.0) + Var%u(1) = 1._dp + alph*SIN(5._dp*x) + Var%u(2) = 0._dp + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1.0_dp) END IF CASE(3) ! Woodward-Colella - DATA%tmax = 0.038 - IF (x <= 0.1) THEN - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0**3) ! [J] + DATA%tmax = 0.038_dp + IF (x <= 0.1_dp) THEN + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0_dp**3_dp) ! [J] ELSE - IF (x > 0.1 .AND. x < 0.9) THEN - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0**(-2)) ! [J] + IF (x > 0.1_dp .AND. x < 0.9_dp) THEN + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0_dp**(-2_dp)) ! [J] ELSE - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0**2) ! [J] + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0_dp**2_dp) ! [J] END IF END IF CASE(4) ! 1D version of 2D channel - Var%u(1) = 0.5 ! [kg/m^3] - Var%u(2) = 0.0 ! [m/s] - Var%u(3) = 0.125 ! [J] + Var%u(1) = 0.5_dp ! [kg/m^3] + Var%u(2) = 0.0_dp ! [m/s] + Var%u(3) = 0.125_dp ! [J] CASE(5) ! Convergence test: isentropic vortex - DATA%tmax = 0.5 + DATA%tmax = 0.5_dp ! DATA%tmax = 0.25 - gmm = 1.4 - Var%u(1) = 1. + 0.1*EXP(-(x)**2/(2.*0.01)) + gmm = 1.4_dp + Var%u(1) = 1._dp + 0.1*EXP(-(x)**2_dp/(2._dp*0.01_dp)) ! Var%u(1) = 1.+EXP(-80.0d0*(x-0.4d0)**2) - Var%u(2) = Var%u(1)*1. - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1.0) + 0.5*Var%u(2)**2/Var%u(1) + Var%u(2) = Var%u(1)*1._dp + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),1.0_dp) + 0.5_dp*Var%u(2)**2_dp/Var%u(1) CASE(6) ! Woodward-Colella left - DATA%tmax = 0.012 - IF (x <= 0.5) THEN - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0**3) ! [J] + DATA%tmax = 0.012_dp + IF (x <= 0.5_dp) THEN + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0_dp**3_dp) ! [J] ELSE - Var%u(1) = 1. ! [kg/m^3] - Var%u(2) = 0. ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0**(-2)) ! [J] + Var%u(1) = 1._dp ! [kg/m^3] + Var%u(2) = 0._dp ! [m/s] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),10.0_dp**(-2_dp)) ! [J] END IF CASE(7) ! LeBlanc - DATA%tmax = 6 - gmm = 5./3. - IF (x <= 3) THEN - ro=1. ; u=0.; p=0.1*(gmm-1) + DATA%tmax = 6_dp + gmm = 5._dp/3._dp + IF (x <= 3_dp) THEN + ro=1._dp ; u=0._dp; p=0.1_dp*(gmm-1_dp) ELSE - ro=0.001; u=0.; p=1.e-07*(gmm-1.) ! energie interne + ro=0.001_dp; u=0._dp; p=1.e-07*(gmm-1._dp) ! energie interne END IF Var%u(1)=ro Var%u(2)=u*ro - Var%u(3)=ro*epsEOS(ro,p)+0.5*ro*u*u + Var%u(3)=ro*epsEOS(ro,p)+0.5_dp*ro*u*u CASE(8) - DATA%tmax=0.003 - gmm=5./3. + DATA%tmax=0.003_dp + gmm=5._dp/3._dp IF (x<=5) THEN - ro=1.; u=-1000; p=0.1 + ro=1._dp; u=-1000_dp; p=0.1_dp ELSE - ro=1.; u=1000; p=0.1 + ro=1._dp; u=1000_dp; p=0.1_dp ENDIF Var%u(1)=ro Var%u(2)=ro*u - Var%u(3)=ro*epsEOS(ro,p)+0.5*ro*u*u + Var%u(3)=ro*epsEOS(ro,p)+0.5_dp*ro*u*u CASE(9) ! 1-2-3 - DATA%tmax=0.15 - gmm=1.4 - IF (x<=0.5) THEN - ro=1.0 - u=-2.0 - p=0.4 + DATA%tmax=0.15_dp + gmm=1.4_dp + IF (x<=0.5_dp) THEN + ro=1.0_dp + u=-2.0_dp + p=0.4_dp ELSE - ro=1.0 - u=2.0 - p=0.4 + ro=1.0_dp + u=2.0_dp + p=0.4_dp ENDIF Var%u(1)=ro Var%u(2)=ro*u - Var%u(3)=ro*epsEOS(ro,p)+0.5*ro*u*u + Var%u(3)=ro*epsEOS(ro,p)+0.5_dp*ro*u*u CASE(10) ! Pure Shock - ms = 3. - DATA%tmax = 10d-5 - gmm=1.4 + ms = 3._dp + DATA%tmax = 10_dp**(-5_dp) + gmm=1.4_dp - rhoR = 1.225 - uR = 0. - pR = 101325. + rhoR = 1.225_dp + uR = 0._dp + pR = 101325._dp aR = SQRT(gmm*pR/rhoR) mr=uR/aR S3 = ms*aR - rho_star = rhoR*( (gmm+1.)*((mr-ms)**2) )/( (gmm-1.)*((mr-ms)**2)+2. ) - u_star = (1.-(rhoR/rho_star) )*S3+(ur*rhoR/rho_star) - p_star = pR*( 2.*gmm*((mr-ms)**2)-(gmm-1.))/(gmm+1.) + rho_star = rhoR*( (gmm+1.)*((mr-ms)**2_dp) )/( (gmm-1.)*((mr-ms)**2_dp)+2._dp ) + u_star = (1._dp-(rhoR/rho_star) )*S3+(ur*rhoR/rho_star) + p_star = pR*( 2._dp*gmm*((mr-ms)**2_dp)-(gmm-1._dp))/(gmm+1._dp) - IF (x <= 0.5) THEN + IF (x <= 0.5_dp) THEN Var%u(1) = rho_star ! [kg/m^3] Var%u(2) = u_star*Var%u(1) ! [m/s] - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),p_star) + 0.5*Var%u(2)**2/Var%u(1) ! [J] + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),p_star) + 0.5_dp*Var%u(2)**2_dp/Var%u(1) ! [J] ELSE Var%u(1) = rhoR Var%u(2) = uR - Var%u(3) = Var%u(1)*epsEOS(Var%u(1),pR) + 0.5*Var%u(2)**2/Var%u(1) + Var%u(3) = Var%u(1)*epsEOS(Var%u(1),pR) + 0.5_dp*Var%u(2)**2_dp/Var%u(1) END IF CASE default @@ -269,8 +269,8 @@ CONTAINS pN=iN a0=Var%un(p1) a1=Var%un(pN) - Var%un(p1)=0.!a0+a1 - Var%un(pN)=0.!a0+a1 + Var%un(p1)=0._dp!a0+a1 + Var%un(pN)=0._dp!a0+a1 Var%un(p1)=a0+a1 Var%un(pN)=a0+a1 @@ -278,18 +278,18 @@ CONTAINS CASE(1,2,6,7,8,10) ! outflow - Var%un(i1)=0. - Var%un(iN)=0.0 + Var%un(i1)=0._dp + Var%un(iN)=0.0_dp CASE(3) ! reflective - Var%un(i1)%u(2) = 2.0*Var%ua(k-1,i1)%u(2) - Var%un(iN)%u(2) = 2.0*Var%ua(k-1,iN)%u(2) + Var%un(i1)%u(2) = 2.0_dp*Var%ua(k-1,i1)%u(2) + Var%un(iN)%u(2) = 2.0_dp*Var%ua(k-1,iN)%u(2) CASE(4) ! inflow left + outflow right - Var%ua(k-1,i1)%u(1) = 1.0 - Var%ua(k-1,i1)%u(2) = 3.0 - Var%ua(k-1,i1)%u(3) = 4.5 + 1.7857 + Var%ua(k-1,i1)%u(1) = 1.0_dp + Var%ua(k-1,i1)%u(2) = 3.0_dp + Var%ua(k-1,i1)%u(3) = 4.5_dp + 1.7857_dp CASE(5) ! periodic @@ -297,8 +297,8 @@ CONTAINS pN=iN a0=Var%un(p1) a1=Var%un(pN) - Var%un(p1)=0.!a0+a1 - Var%un(pN)=0.!a0+a1 + Var%un(p1)=0._dp!a0+a1 + Var%un(pN)=0._dp!a0+a1 Var%un(p1)=a0+a1 Var%un(pN)=a0+a1 @@ -309,4 +309,16 @@ CONTAINS END SUBROUTINE BC + SUBROUTINE isPeriodic(DATA) + TYPE(donnees), INTENT(inout) :: DATA + + SELECT CASE(DATA%test) + CASE(0,5) + DATA%periodicBC = .TRUE. + CASE default + DATA%periodicBC = .FALSE. + END SELECT + END SUBROUTINE isPeriodic + + END MODULE init_bc diff --git a/Src1D/init_bc_scalar.f90 b/Src1D/init_bc_scalar.f90 new file mode 100644 index 0000000..7f0e16b --- /dev/null +++ b/Src1D/init_bc_scalar.f90 @@ -0,0 +1,145 @@ +MODULE init_bc + + USE param2d + USE overloading + USE precision + + IMPLICIT NONE + +CONTAINS + +!--------------------------------------- +! Setup domain +!--------------------------------------- + + SUBROUTINE init_geom(DATA) + TYPE(donnees), INTENT(inout):: DATA + + SELECT CASE(DATA%test) + CASE(0,10) + ! wave packet + DATA%domain_left = 0.0_dp + DATA%Length = 2.0_dp + CASE(1) + ! shock moving + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + + CASE default + PRINT*, "Wrong test number for geom(), test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE init_geom + +!--------------------------------------- +! Set initial and boundary conditions +!--------------------------------------- + + FUNCTION IC(x,DATA) RESULT(Var) + REAL(dp), INTENT(in) :: x + TYPE(donnees), INTENT(inout):: DATA + TYPE(PVar) :: Var + + SELECT CASE(DATA%test) + CASE(0,10) + DATA%tmax = 0.5_dp + Var%u(1) = sin(ACOS(-1._dp)*x)*0.1_dp + CASE(1) + IF (x<0.5) THEN + Var%u(1) = 1._dp + ELSE + Var%u(1) = 0._dp + ENDIF + CASE default + PRINT*, "Wrong test number for geom(), test = ", DATA%test + STOP + END SELECT + + END FUNCTION IC + + SUBROUTINE BC(Var,i1,iN,DATA,k) + TYPE(variables), INTENT(inout):: Var + INTEGER, INTENT(in) :: i1, iN, k + TYPE(donnees), INTENT(in) :: DATA + TYPE(Pvar):: a0,a1 + INTEGER:: p1, pN + + SELECT CASE(DATA%test) + CASE(0) + ! periodic + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=0._dp!a0+a1 + Var%un(pN)=0._dp!a0+a1 + Var%un(p1)=a0+a1 + Var%un(pN)=a0+a1 + + CASE(1,2) + ! outflow + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=0._dp + Var%un(pN)=0._dp + Var%ua(p1,k-1)%u(1) = 1._dp + + CASE(10) + ! Dirichlet + Var%ua(i1,k-1)%u(1) = sin(ACOS(-1.)*(-a*DATA%temps))*0.1_dp + Var%ua(iN,k-1)%u(1) = sin(ACOS(-1.)*(2.0-a*DATA%temps))*0.1_dp + + CASE(100) + ! weak periodic + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)%u(1)=Var%un(p1)%u(1)+Var%dt*0.5*( Var%ua(k-1,p1)%u(1)-Var%ua(k-1,pN)%u(1) ) + Var%un(pN)%u(1)=Var%un(pN)%u(1)+Var%dt*0.5*( Var%ua(k-1,p1)%u(1)-Var%ua(k-1,pN)%u(1) ) + + + CASE default + PRINT*, "Wrong test number for wave_1D, test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE BC + +!--------------------------------------- +! Exact solution +!--------------------------------------- + + FUNCTION exact_scalar(DATA,x,t) RESULT (U_ex) + TYPE(donnees), INTENT(inout) :: DATA + REAL(dp), INTENT(in) :: x + REAL(dp), INTENT(in) :: t + TYPE(Pvar) :: U_ex + U_ex = IC(x-a*t,DATA) + +! print*, 'lambda = ', lambda +! print*, 'R = ', R +! print*, 'L = ', L +! print*, 'U01 = ', U01%U +! print*, 'U02 = ', U02%U +! print*, 'W = ', W%U +! print*, 'U_ex = ', U_ex%U + + END FUNCTION exact_scalar + + SUBROUTINE isPeriodic(DATA) + TYPE(donnees), INTENT(inout) :: DATA + + SELECT CASE(DATA%test) + CASE(0,100) + DATA%periodicBC = .TRUE. + CASE default + DATA%periodicBC = .FALSE. + END SELECT + END SUBROUTINE isPeriodic + + +END MODULE init_bc diff --git a/Src1D/init_bc_scalar_1D.f90 b/Src1D/init_bc_scalar_1D.f90 deleted file mode 100644 index 75564bc..0000000 --- a/Src1D/init_bc_scalar_1D.f90 +++ /dev/null @@ -1,160 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE init_bc - - USE param2d - USE overloading - USE PRECISION - IMPLICIT NONE - -CONTAINS - - !--------------------------------------- - ! Setup domain - !--------------------------------------- - - SUBROUTINE init_geom(DATA) - CHARACTER(Len=*), PARAMETER :: mod_name="init_geom" - TYPE(donnees), INTENT(inout):: DATA - - SELECT CASE(DATA%test) - CASE(0) - DATA%domain_left = 0._dp - DATA%Length = 1.0_dp - CASE(1) - ! wave packet - DATA%domain_left = -1.0_dp - DATA%Length = 3.0_dp - CASE(2) - DATA%domain_left = -0.5_dp - DATA%Length = 2.0_dp - - CASE default - PRINT*, "Wrong test number for geom(), test = ", DATA%test - STOP - END SELECT - - END SUBROUTINE init_geom - - !--------------------------------------- - ! Set initial and boundary conditions - !--------------------------------------- - - FUNCTION IC(x,DATA) RESULT(Var) - CHARACTER(Len=*), PARAMETER :: mod_name="IC" - - REAL(dp), INTENT(in) :: x - TYPE(donnees), INTENT(inout):: DATA - TYPE(PVar) :: Var - real(dp):: y - y=x - SELECT CASE(DATA%test) - CASE(0) - Var%u(1)=sin(2._dp*pi*y)+0.5 - CASE(1) - Var%u(1) = EXP( -bb*(y-0.5_dp)**2 ) * ( aa*COS(aa*y) - 2._dp*bb*(y-0.5_dp)*SIN(aa*y) ) - CASE(2) - Var%u(1) = EXP( -bb*(y-0.5_dp)**2 ) - CASE default - PRINT*, mod_name - PRINT*, "not defined" - STOP - END SELECT - END FUNCTION IC - - SUBROUTINE BC(Var,i1,iN,DATA,k) - TYPE(variables), INTENT(inout):: Var - INTEGER, INTENT(in) :: i1, iN, k - TYPE(donnees), INTENT(in) :: DATA - TYPE(Pvar):: a0,a1 - INTEGER:: p1, pN - REAL(dp), PARAMETER:: alpha0=0.5_dp, alpha1=1.0_dp-alpha0 - - SELECT CASE(DATA%test) - CASE(100,11) - ! weak periodic - p1=i1 - pN=iN - a0=Var%un(p1) - a1=Var%un(pN) - Var%un(p1)%u(1)=Var%un(p1)%u(1)+Var%dt*alpha0*( Var%ua(k-1,p1)%u(1)-Var%ua(k-1,pN)%u(1) ) - Var%un(pN)%u(1)=Var%un(pN)%u(1)+Var%dt*alpha1*( Var%ua(k-1,p1)%u(1)-Var%ua(k-1,pN)%u(1) ) - CASE(0,1,2) - ! periodic - p1=i1 - pN=iN - a0=Var%un(p1) - a1=Var%un(pN) - Var%un(p1)=0._dp!a0+a1 - Var%un(pN)=0._dp!a0+a1 - Var%un(p1)=a0+a1 - Var%un(pN)=a0+a1 - - CASE(10,-2) - ! outflow - p1=i1 - pN=iN - a0=Var%un(p1) - a1=Var%un(pN) - Var%un(p1)=0._dp - Var%un(pN)=0._dp - - - - CASE default - PRINT*, "Wrong test number for wave_1D, test = ", DATA%test - STOP - END SELECT - - END SUBROUTINE BC - - !--------------------------------------- - ! Exact solution - !--------------------------------------- - - FUNCTION exact_wave(DATA,x,t) RESULT (U_ex) - TYPE(donnees), INTENT(inout) :: DATA - REAL(dp), INTENT(in) :: x - REAL(dp) :: t - TYPE(PVar) :: U_ex, U0, U01, U02, W - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - REAL(dp), DIMENSION(n_dim) :: n = (/1.0/) - - ! U0 only needed to evaluate eigenvectors (constant) - U0 = IC(x,DATA) - lambda = U0%evalues((/x/),n) - R = U0%rvectors(n) - L = U0%lvectors(n) - - ! calculate ICs shifted in time - U01 = IC(x-lambda(1,1)*t,DATA) ! evaluated at lambda(1,1) - - - ! calculate solution in characteristic variables - W%U(1) = U01%U(1) - U_ex%U = W%U - - ! print*, 'lambda = ', lambda - ! print*, 'R = ', R - ! print*, 'L = ', L - ! print*, 'U01 = ', U01%U - ! print*, 'U02 = ', U02%U - ! print*, 'W = ', W%U - ! print*, 'U_ex = ', U_ex%U - - END FUNCTION exact_wave - -END MODULE init_bc diff --git a/Src1D/init_bc_sw.f90 b/Src1D/init_bc_sw.f90 new file mode 100644 index 0000000..a1b565a --- /dev/null +++ b/Src1D/init_bc_sw.f90 @@ -0,0 +1,438 @@ +MODULE init_bc + + USE param2d + USE overloading + USE precision + USE utils + + IMPLICIT NONE + +CONTAINS + + !--------------------------------------- + ! Setup domain + !--------------------------------------- + + SUBROUTINE init_geom(DATA) + TYPE(donnees), INTENT(inout):: DATA + + SELECT CASE(DATA%test) + CASE(0,40,41,42) + ! Isentropic + DATA%domain_left = -1.0_dp + DATA%Length = 2.0_dp + + CASE(1,11,12,13,32) + ! Sod + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + + CASE(2) + ! Shu-Osher + DATA%domain_left = -5.0_dp + DATA%Length = 10.0_dp + + CASE(3) + ! Woodward-Colella + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + + CASE(4) + ! channel + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + + CASE(5) + ! Isentropic vortex + DATA%domain_left = -1.0_dp + DATA%Length = 2.0_dp + +! DATA%domain_left = 0.0_dp +! DATA%Length = 1.0_dp + + CASE(6) + ! Woodward-Colella left + DATA%domain_left = 0.0_dp + DATA%Length = 1.0_dp + ! LeBlanc + CASE(21, 20,24,25,19,14,26,27) !convection param = 2. for 20/21, conv = 5.5 for 24,conv = 3 for 25 + !simetrie + DATA%domain_left=0.0_dp + DATA%Length = 25._dp + ! 1-2-3 + CASE(22,23) !convection bigger 8. + DATA%domain_left=0.0_dp + DATA%Length = 25._dp + + CASE(29,30) !convection bigger than 4. + DATA%domain_left=0.0_dp + DATA%Length = 4._dp + + CASE(31) !convection bigger than 4. + DATA%domain_left=0.0_dp + DATA%Length = 15._dp + + + + CASE default + PRINT*, "Wrong test number for geom(), test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE init_geom + + !--------------------------------------- + ! Set initial and boundary conditions + !--------------------------------------- + + FUNCTION IC(x,DATA) RESULT(Var) + REAL(dp), INTENT(in) :: x + TYPE(donnees), INTENT(inout):: DATA + REAL(dp), DIMENSION(n_dim) :: eta + TYPE(PVar) :: Var + REAL(dp) :: alpha,r,x0 + + eta = 0._dp ! profile_bathymetry( DATA%test, (/x/) ) + + !--------------- + ! for Euler + SELECT CASE(DATA%test) + CASE(0) + ! Convergence test: isentropic flow + DATA%tmax = 1. + alpha = 0.1 + Var%u(1) = 1. + alpha*SIN(PI*x) ! + 1. + Var%u(2) = 0. + + CASE(40,41) + ! Convergence test: isentropic flow + DATA%tmax = 1. + alpha = 0.1 + Var%u(1) = 1. + alpha*SIN(PI*x) - bathymetry(DATA%test,x) ! + 1. + Var%u(2) = 0.05 + + CASE(42) + ! Convergence test: isentropic flow + DATA%tmax = 1.0_dp + alpha = 0.01_dp + Var%u(1) = 1._dp + alpha*SIN(PI*x) - bathymetry(DATA%test,x) ! + 1. + Var%u(2) = 0._dp + + CASE(1) + ! Sod + DATA%tmax = 0.13 + IF (x < 0.5) THEN + Var%u(1) = 1.-bathymetry(DATA%test,x) ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + ELSE + Var%u(1) = 0.05 -bathymetry(DATA%test,x) + Var%u(2) = 0. + END IF + + CASE(32) + ! Dam break + DATA%tmax = 0.05 + IF (x < 0.5) THEN + Var%u(1) = 1.-bathymetry(DATA%test,x) ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + ELSE + Var%u(1) = 0.0 + Var%u(2) = 0. + END IF + + + CASE(11) + ! Sod + DATA%tmax = 5.3 + Var%u(1) = 0.01+ 0.3*EXP(-100.* (x-0.7)**2.) -bathymetry(DATA%test,x) + Var%U(2) = 0.*Var%U(1) + + CASE(12,13) + DATA%tmax = 5. + + Var%U(1) = 1.- bathymetry(DATA%test,x) + Var%U(2) = 0. + + CASE(21) + DATA%tmax = 5. + Var%U(1) = 0.5 -bathymetry(DATA%test,x) + Var%U(2) = 0. + + CASE(20) + DATA%tmax = 20. + Var%U(1) = 0.5 -bathymetry(DATA%test,x) + Var%U(2) = 0. + IF (x<18 .AND. x>16) THEN + Var%U(1) = Var%U(1) + 0.1 + END IF + + CASE(14) + DATA%tmax = 60. + Var%U(1) = 0.205 -bathymetry(DATA%test,x) + Var%U(2) = 1.*Var%U(1) + + CASE(19) + DATA%tmax = 12.5 + Var%U(1) = 0.5 -bathymetry(DATA%test,x) + Var%U(2) = -1. + IF (x<18 .AND. x>16) THEN + Var%U(1) = Var%U(1) + 0.05*EXP(1._dp-1._dp/(1.-(x-17.)**2.)) + END IF + + CASE(22) + DATA%tmax = 100. + Var%U(1) = 2. -bathymetry(DATA%test,x) + Var%U(2) = 0. + CASE(23) + DATA%tmax = 100. + Var%U(1) = 2. -1.5*bathymetry(DATA%test,x) + Var%U(2) = 4.42_dp + + + CASE(24) + DATA%tmax = 60. + IF (x<5.) THEN + Var%U(1) = 1.01445 -bathymetry(DATA%test,x) + Var%U(2) = 1.53_dp + ELSE IF (x<15.) THEN + Var%U(1) = (1.01445)*(15.-x)/10. + 0.405781*(x-5.)/10. -bathymetry(DATA%test,x) + Var%U(2) = 1.53_dp + ELSE + Var%U(1) = 0.405781 -bathymetry(DATA%test,x) + Var%U(2) = 1.53_dp + END IF + + ! Var%U(1) = 0.66 -bathymetry(DATA%test,x) + ! Var%U(2) = 0. + + CASE(25) + DATA%tmax = 100. + IF (x<8.) THEN + Var%U(1) = 0.4 -bathymetry(DATA%test,x) + ELSE + Var%U(1) = 0.33 -bathymetry(DATA%test,x) + END IF + Var%U(2) = 0.14 + + CASE(26) + DATA%tmax = 60. + Var%U(1) = 0.3 -bathymetry(DATA%test,x) + Var%U(2) = 0.2*Var%U(1) + + CASE(30) ! thucker oscillations in parabola + DATA%tmax = 10.0303_dp + IF (x<2.5 .AND. x>0.5) THEN + Var%U(1) = -0.5*((x-1.5)**2.-1) + ELSE + Var%U(1) = 0._dp + END IF + Var%U(2) = 0._dp + CASE(29) !lake at rest in parabola + DATA%tmax = 3._dp + Var%U(1) = MAX(0._dp, 0.5-bathymetry(DATA%test,x)) + Var%U(2) = 0._dp + + CASE(31) !waves on the shore + DATA%tmax = 20.0_dp + Var%U(1) = MAX(0.37-bathymetry(DATA%test,x),0._dp) + Var%U(2) = 0._dp + + CASE(2) + ! Shu-Osher + DATA%tmax = 1.8 + alpha = 0.2 + IF (x <= -4.) THEN + Var%u(1) = 3.857143 ! [kg/m^3] + Var%u(2) = Var%u(1)*2.629369 ! [m/s] + ELSE + Var%u(1) = 1. + alpha*SIN(5.*x) + Var%u(2) = 0. + END IF + + CASE(3) + ! Woodward-Colella + DATA%tmax = 0.038 + IF (x <= 0.1) THEN + Var%u(1) = 1. ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + ELSE + IF (x > 0.1 .AND. x < 0.9) THEN + Var%u(1) = 1. ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + ELSE + Var%u(1) = 1. ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + END IF + END IF + + CASE(4) + ! 1D version of 2D channel + Var%u(1) = 0.5_dp ! [kg/m^3] + Var%u(2) = 0.0_dp ! [m/s] + + CASE(5) + ! Convergence test: isentropic vortex + DATA%tmax = 0.5 +! DATA%tmax = 0.25 + Var%u(1) = 1. + 0.1*EXP(-(x)**2/(2.*0.01)) +! Var%u(1) = 1.+EXP(-80.0_dp*(x-0.4_dp)**2) + Var%u(2) = Var%u(1)*1. + + CASE(6) + ! Woodward-Colella left + DATA%tmax = 0.012 + IF (x <= 0.5) THEN + Var%u(1) = 1. ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + ELSE + Var%u(1) = 1. ! [kg/m^3] + Var%u(2) = 0. ! [m/s] + END IF + + CASE(10) + DAta%tmax=0.5 + Var%u(1) = 0.001 + IF(x< 0.) THEN + Var%u(2)= -Var%u(1) + ELSE + Var%u(2) = Var%u(1) + END IF + + CASE (27) + DATA%tmax = 15.0_dp + r=0.5d0 + x0=3d0 + alpha=0.1d0 + IF (xx0-r) THEN + var%u(1) = 1._dp +alpha*EXP(1.d0-1.d0/(1.-((x-x0)/r)**2.))!(4.0d0/9.81d0) **(1.d0/3d0) !*(1.d0-x) ! + 1. + ELSE + var%u(1)= 1._dp ! (4.0d0/9.81d0) **(1.d0/3d0) + ENDIF + Var%u(2) = 4_dp + CASE default + PRINT*, "Wrong test number for SW_IC, test = ", DATA%test + STOP + END SELECT + + + END FUNCTION IC + + SUBROUTINE BC(Var,i1,iN,DATA,k) + TYPE(variables), INTENT(inout):: Var + INTEGER, INTENT(in) :: i1, iN, k + TYPE(donnees), INTENT(in) :: DATA + REAL(dp), DIMENSION(n_dim) :: eta + TYPE(Pvar):: a0,a1 + INTEGER:: p1, pN + + SELECT CASE(DATA%test) + CASE(0,11,12,20,19,14,40,41,42,27) +!!$ ! periodic + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=a0+a1 + Var%un(pN)=a0+a1 + + CASE(1,2,6,10,13,30,29,32) + ! outflow + Var%un(i1)%u(:)=0._dp + Var%un(iN)%u(:)=0.0_dp + CASE(3) + ! reflective + !dirichlet for velocity + + Var%un(i1)%u(2) = 0.0 + Var%un(iN)%u(2) = 0.0 + + + + CASE(4) + ! inflow left + outflow right + Var%ua(i1,k-1)%u(1) = 1.0_dp + Var%ua(i1,k-1)%u(2) = 3.0_dp + ! Var%ua(k-1,i1)%u(3) = 4.5_dp + 1.7857_dp + + CASE(21) + !dirichlet bc + Var%ua(i1,k-1)%u(1) = 0.5_dp + Var%ua(iN,k-1)%u(1) = 0.5_dp + Var%ua(i1,k-1)%u(2) = 0.0_dp + Var%ua(iN,k-1)%u(2) = 0.0_dp + + + CASE(22,23) + !dirichlet bc + Var%ua(i1,k-1)%u(2) = 4.42_dp + Var%ua(iN,k-1)%u(1) = 2._dp!MIN(2.0_dp,Var%ua(k-1,iN)%u_lim(1) ) + + + CASE(31) !waves on the shore + !dirichlet bc + eta = 0._dp !profile_bathymetry( DATA%test, (/ DATA%domain_left /) ) + Var%un(iN)%u(:) = 0._dp + Var%ua(i1,k-1)%u(1) = 0.37_dp+0.0615*SIN(DATA%temps*12.*ASIN(1.)/10.)-bathymetry(DATA%test,DATA%domain_left) + Var%ua(iN,k-1)%u(1) = 0.0_dp + Var%ua(iN,k-1)%u(2) = 0.0_dp + ! Var%ua(k-1,iN)%u_lim(1) = 2._dp!MIN(2.0_dp,Var%ua(k-1,iN)%u_lim(1) ) + + + + CASE(24) + !dirichlet bc + ! PRINT*, "BC for i1. iN", i1, iN + ! PRINT*, Var%ua(k-1,i1) + ! PRINT*, Var%ua(k-1,iN) + ! Var%un(i1) = 0._dp + ! Var%un(iN) = 0._dp + ! Var%ua(k-1,i1)%u_lim(1) = 1.01445 + Var%ua(i1,k-1)%u(2) = 1.53_dp + IF (Var%ua(iN,k-1)%u(1) >0.66 ) THEN + Var%ua(iN,k-1)%u(1) = 0.60 + ENDIF + ! Var%ua(k-1,iN)%u_lim(1) = 0.405781 !MIN(0.66_dp,Var%ua(k-1,iN)%u_lim(1) ) + ! Var%ua(k-1,iN)%u_lim(2) = 1.53_dp + + + CASE(25) + !dirichlet bc + Var%ua(i1,k-1)%u(2) = 0.18_dp + Var%ua(iN,k-1)%u(1) = 0.33_dp + + + CASE(26) + !dirichlet bc + Var%ua(i1,k-1)%u(2) = 0.3_dp + Var%ua(iN,k-1)%u(1) = 0.3_dp + + + CASE(5) + ! periodic + p1=i1 + pN=iN + a0=Var%un(p1) + a1=Var%un(pN) + Var%un(p1)=a0+a1 + Var%un(pN)=a0+a1 + + CASE default + PRINT*, "Wrong test number for SW BC, test = ", DATA%test + STOP + END SELECT + + END SUBROUTINE BC + + SUBROUTINE isPeriodic(DATA) + TYPE(donnees), INTENT(inout) :: DATA + + SELECT CASE(DATA%test) + CASE(0,11,12,20,19,14,40,41,42,27) + DATA%periodicBC = .TRUE. + CASE default + DATA%periodicBC = .FALSE. + END SELECT + END SUBROUTINE isPeriodic + + +END MODULE init_bc diff --git a/Src1D/init_bc_wave_1D.f90 b/Src1D/init_bc_wave_1D.f90 index 82d9cb0..91fcc3e 100644 --- a/Src1D/init_bc_wave_1D.f90 +++ b/Src1D/init_bc_wave_1D.f90 @@ -30,8 +30,8 @@ CONTAINS SELECT CASE(DATA%test) CASE(1) ! wave packet - DATA%domain_left = -1.0d0 - DATA%Length = 3.0d0 + DATA%domain_left = -1.0_dp + DATA%Length = 3.0_dp CASE default PRINT*, "Wrong test number for geom(), test = ", DATA%test @@ -49,8 +49,8 @@ CONTAINS TYPE(donnees), INTENT(inout):: DATA TYPE(PVar) :: Var - Var%u(1) = 0.0 - Var%u(2) = EXP( -bb*(x-0.5)**2 ) * ( aa*COS(aa*x) - 2.*bb*(x-0.5)*SIN(aa*x) ) + Var%u(1) = 0.0_dp + Var%u(2) = EXP( -bb*(x-0.5_dp)**2_dp ) * ( aa*COS(aa*x) - 2._dp*bb*(x-0.5_dp)*SIN(aa*x) ) END FUNCTION IC @@ -68,8 +68,8 @@ CONTAINS pN=iN a0=Var%un(p1) a1=Var%un(pN) - Var%un(p1)=0.0!a0+a1 - Var%un(pN)=0.0!a0+a1 + Var%un(p1)=0.0_dp!a0+a1 + Var%un(pN)=0.0_dp!a0+a1 Var%un(p1)=a0+a1 Var%un(pN)=a0+a1 @@ -79,13 +79,13 @@ CONTAINS pN=iN a0=Var%un(p1) a1=Var%un(pN) - Var%un(p1)=0.0 - Var%un(pN)=0.0 + Var%un(p1)=0.0_dp + Var%un(pN)=0.0_dp CASE(-3) ! reflective - Var%un(i1)%u(2) = 2.0*Var%ua(k-1,i1)%u(2) - Var%un(iN)%u(2) = 2.0*Var%ua(k-1,iN)%u(2) + Var%un(i1)%u(2) = 2.0_dp*Var%ua(k-1,i1)%u(2) + Var%un(iN)%u(2) = 2.0_dp*Var%ua(k-1,iN)%u(2) CASE default PRINT*, "Wrong test number for wave_1D, test = ", DATA%test @@ -94,6 +94,20 @@ CONTAINS END SUBROUTINE BC + + + + SUBROUTINE isPeriodic(DATA) + TYPE(donnees), INTENT(inout) :: DATA + + SELECT CASE(DATA%test) + CASE(1) + DATA%periodicBC = .TRUE. + CASE default + DATA%periodicBC = .FALSE. + END SELECT + END SUBROUTINE isPeriodic + !--------------------------------------- ! Exact solution !--------------------------------------- diff --git a/Src1D/integration/testouille.f90 b/Src1D/integration/testouille.f90 deleted file mode 100644 index 241a4c3..0000000 --- a/Src1D/integration/testouille.f90 +++ /dev/null @@ -1,211 +0,0 @@ -PROGRAM testouille - ! idee tester l'odre de formules de quadratures naives - ! les formules de quadrature sont celles qu'on emploieraient eb Bezier - ! pour Dec - IMPLICIT NONE - INTEGER:: n - REAL, DIMENSION(:), ALLOCATABLE:: x - REAL:: dx - REAL, DIMENSION(:,:), ALLOCATABLE:: quad - REAL, DIMENSION(:), ALLOCATABLE:: weight - INTEGER:: ordre, nquad, ngre=3 - REAL, DIMENSION(:,:), ALLOCATABLE:: gre - INTEGER:: i, l - REAL:: integre, integre2, x1, x2,y, res1,res2 - - ALLOCATE(gre(2,ngre)) - gre(1,1)=0.; gre(1,2)=0.5; gre(1,3)=1. - gre(2,:)=1.-gre(1,:) - - PRINT*, "order" - READ*, ordre - WRITE(*,*) "nbr pts" - READ*, n - - ALLOCATE(x(0:n)) - SELECT CASE(ordre) - CASE(3) - nquad=2 - ALLOCATE(quad(2,nquad),weight(nquad)) - CASE(5)!! exact for degree 5 - nquad=3 - ALLOCATE(quad(2,nquad),weight(nquad)) - CASE(7) !! exact for degree 7 - nquad=4 ! ordre 7 - ALLOCATE(quad(2,nquad),weight(nquad) ) - CASE(9) ! exact for degree 9 - - nquad=5 - ALLOCATE(quad(2,nquad),weight(nquad)) - END SELECT - - dx=1./REAL(n) - DO i=0,n - x(i)=REAL(i)*dx - ENDDO - - CALL quadrature_element(ordre,quad,weight,nquad) - res1=0.; res2=0. - DO i=1,n - x1=x(i-1) - x2=x(i) - integre=0.; integre2=0. - DO l=1,nquad - y=x1*quad(1,l)+x2*quad(2,l) - integre=integre+weight(l)* u(y) * v(y) - ENDDO - res1=res1+dx*integre - DO l=1,ngre - y=x1*gre(1,l)+x2*gre(2,l) - - integre2=integre2+ u(y) * v(y) - ENDDO - res2=res2+dx*integre2/REAL(ngre) - - ENDDO - PRINT*, alog10(dx),res1,res2,alog10(ABS(res1-res2)) -CONTAINS - - - - - SUBROUTINE quadrature_element(ordre, quad,weight, nquad) ! quadrature points and weights - ! for triangle and edges - INTEGER, INTENT(in):: ordre - REAL, DIMENSION(:,:), INTENT(inout):: quad - REAL, DIMENSION(:), INTENT(inout):: weight - INTEGER, INTENT(in):: nquad - - REAL:: w,xo,yo,zo,s - INTEGER:: nquad_1 - ! degree 5 - REAL, PARAMETER:: s1_3=SQRT(0.6) - REAL, PARAMETER:: s2_3=0.5*(1.0 - s1_3) - REAL, PARAMETER:: s3_3=0.5*(1.0 + s1_3) - REAL, PARAMETER:: weight1_3=5./18. - REAL, PARAMETER:: weight2_3=8./18. - ! degre 7 - REAL, PARAMETER:: s1_7=(18.-SQRT(30.))/72. - REAL, PARAMETER:: s2_7=SQRT(525.+70.*SQRT(30.))/35. - REAL, PARAMETER:: s3_7=0.50*(1.00-s2_7) - REAL, PARAMETER:: s4_7=0.50*(1.00+s2_7) - REAL, PARAMETER:: s5_7=(18.+ SQRT(30.))/72. - REAL, PARAMETER:: s6_7=SQRT(525.-70.*SQRT(30.))/35. - REAL, PARAMETER:: s7_7=0.50*(1.00-s6_7) - REAL, PARAMETER:: s8_7=0.50*(1.00+s6_7) - ! degree 9 - REAL,PARAMETER:: s1_9=1.0/3.*SQRT(5.-2.*SQRT(10./7.)) - REAL,PARAMETER:: s2_9=0.50*(1.00 - s1_9) - REAL,PARAMETER:: s3_9=0.50*(1.00 + s1_9) - REAL,PARAMETER:: weight1_9=(322.+13.*SQRT(70.0))/1800.0 - - - REAL,PARAMETER:: s5_9=1.0/3.*SQRT(5.+2.*SQRT(10./7.)) - REAL,PARAMETER:: s6_9=0.50*(1.00 - s5_9) - REAL,PARAMETER:: s7_9=0.50*(1.00 + s5_9) - REAL,PARAMETER:: weight2_9=(322.-13.*SQRT(70.0))/1800.0 - REAL,PARAMETER:: s4_9=1./3.*SQRT(5.+2.*SQRT(10.0/7.0)) - - SELECT CASE(ordre) - CASE(3) - ! nquad=2 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - ! quadrature for edges (3 point gauss formula) - - - - - quad(1,1) = 1.0 - quad(2,1) = 0. - weight(1) = 0.5 - - quad(1,2) = 0.0 - quad(2,2) = 1.0 - weight(2) = 0.5 - - - CASE(5)!! exact for degree 5 - ! nquad=3 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - - - ! s=sqrt(0.6) !0.7745966692414834 !SQRT(0.6d0) - quad(1,1)=s2_3 !0.5*(1.0 - s) - quad(2,1)=s3_3 !0.5*(1.0 + s) - weight(1) =weight1_3 !5./18.! 0.2777777777777778 !5.0d0/18.0d0 - - quad(1,2)=s3_3 !0.5d0*(1.0d0 + s) - quad(2,2)=s2_3 !0.5d0*(1.0d0 - s) - weight(2) =weight1_3 !5./18.! 0.2777777777777778 !5.0d0/18.0d0 - - quad(1,3)=0.5d0 - quad(2,3)=0.5d0 - weight(3)= weight2_3 !8./18.!0.4444444444444444 ! 8.0d0/18.0d0 - - CASE(7) !! exact for degree 7 - ! nquad=4 ! ordre 7 - ! ALLOCATE(quad(2,nquad),weight(nquad) ) - ! s=(18.-sqrt(30.))/72. !0.1739274225687269 !(18.- SQRT(30.))/72. !SQRT(30.d0)*(-5.0d0+3.d0*SQRT(30.d0))/360.d0 - weight(1:2)=s1_7 - ! s=SQRT(525.+70.*SQRT(30.))/35. !0.8611363115940526!SQRT(525.d0+70.d0*SQRT(30.d0))/35.d0 - quad(1,1)=s3_7! 0.50*(1.00-s) - quad(1,2)=s4_7 !0.50*(1.00+s) - quad(2,1)=quad(1,2) !0.5d0*(1.0d0+s) - quad(2,2)=quad(1,1) !0.5d0*(1.0d0-s) - - ! s=(18.+ SQRT(30.))/72. !0.3260725774312731 !(18.+ SQRT(30.))/72.! SQRT(30.d0)*(5.0d0+3.d0*SQRT(30.d0))/360.d0 - weight(3:4)=s5_7 - ! s=SQRT(525.-70.*SQRT(30.))/35. !0.3399810435848563 !SQRT(525.d0-70.d0*SQRT(30.d0))/35.d0 - quad(1,3)=s7_7 !0.50*(1.00-s) - quad(1,4)=s8_7 !0.50*(1.00+s) - quad(2,3)=quad(1,4) !0.5d0*(1.0d0+s) - quad(2,4)=quad(1,3) !0.5d0*(1.0d0-s) - - ! quad(2,:)=1.0d0-quad(1,:) - - CASE(9) ! exact for degree 9 - - ! nquad=5 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - !s=1.0/3.*SQRT(5.-2.*SQRT(10./7.)) - quad(1,1)=s2_9 !0.50*(1.00 - s) - quad(2,1)=s3_9 !0.50*(1.00 + s) - weight(1) = weight1_9 !(322.+13.*SQRT(70.0))/1800.0 - quad(1,2)=s3_9 !0.5*(1.0 + s) - quad(2,2)=s2_9 !0.5*(1.0 - s) - weight(2) = weight1_9 !(322.+13.*SQRT(70.0))/1800.0 - - ! s=1./3.*SQRT(5.+2.*SQRT(10.0/7.0)) - quad(1,3)=s6_9 !0.5*(1.0 - s) - quad(2,3)=s7_9 !0.5*(1.0 + s) - weight(3) = weight2_9 !(322.0-13.0*SQRT(70.0))/1800.0 - quad(1,4)=s7_9 !0.5*(1.0 + s) - quad(2,4)=s6_9 !0.5*(1.0 - s) - weight(4) = weight2_9 ! (322.0-13.0*SQRT(70.0))/1800.0 - - quad(1,5)=0.5 - quad(2,5)=0.5 - weight(5)=64.0/225.0 - CASE default - PRINT*, 'ordre non defini' - STOP - - END SELECT - - weight = weight/SUM(weight) - END SUBROUTINE quadrature_element - - REAL FUNCTION u(x) - REAL:: x - u=x**2 - END FUNCTION u - - REAL FUNCTION v(x) - REAL:: x - v=x**3 - END FUNCTION v - -END PROGRAM testouille diff --git a/Src1D/integration/testouille.f90~ b/Src1D/integration/testouille.f90~ deleted file mode 100644 index 52c2436..0000000 --- a/Src1D/integration/testouille.f90~ +++ /dev/null @@ -1,211 +0,0 @@ -PROGRAM testouille - ! idee tester l'odre de formules de quadratures naives - ! les formules de quadrature sont celles qu'on emploieraient eb Bezier - ! pour Dec - IMPLICIT NONE - INTEGER:: n - REAL, DIMENSION(:), ALLOCATABLE:: x - REAL:: dx - REAL, DIMENSION(:,:), ALLOCATABLE:: quad - REAL, DIMENSION(:), ALLOCATABLE:: weight - INTEGER:: ordre, nquad, ngre=3 - REAL, DIMENSION(:,:), ALLOCATABLE:: gre - INTEGER:: i, l - REAL:: integre, integre2, x1, x2,y, res1,res2 - - ALLOCATE(gre(2,ngre)) - gre(1,1)=0.; gre(1,2)=0.5; gre(1,3)=1. - gre(2,:)=1.-gre(1,:) - - PRINT*, "ordre" - READ*, ordre - WRITE(*,*) "nbre pts" - READ*, n - - ALLOCATE(x(0:n)) - SELECT CASE(ordre) - CASE(3) - nquad=2 - ALLOCATE(quad(2,nquad),weight(nquad)) - CASE(5)!! exact for degree 5 - nquad=3 - ALLOCATE(quad(2,nquad),weight(nquad)) - CASE(7) !! exact for degree 7 - nquad=4 ! ordre 7 - ALLOCATE(quad(2,nquad),weight(nquad) ) - CASE(9) ! exact for degree 9 - - nquad=5 - ALLOCATE(quad(2,nquad),weight(nquad)) - END SELECT - - dx=1./REAL(n) - DO i=0,n - x(i)=REAL(i)*dx - ENDDO - - CALL quadrature_element(ordre,quad,weight,nquad) - res1=0.; res2=0. - DO i=1,n - x1=x(i-1) - x2=x(i) - integre=0.; integre2=0. - DO l=1,nquad - y=x1*quad(1,l)+x2*quad(2,l) - integre=integre+weight(l)* u(y) * v(y) - ENDDO - res1=res1+dx*integre - DO l=1,ngre - y=x1*gre(1,l)+x2*gre(2,l) - - integre2=integre2+ u(y) * v(y) - ENDDO - res2=res2+dx*integre2/REAL(ngre) - - ENDDO - PRINT*, alog10(dx),res1,res2,alog10(ABS(res1-res2)) -CONTAINS - - - - - SUBROUTINE quadrature_element(ordre, quad,weight, nquad) ! quadrature points and weights - ! for triangle and edges - INTEGER, INTENT(in):: ordre - REAL, DIMENSION(:,:), INTENT(inout):: quad - REAL, DIMENSION(:), INTENT(inout):: weight - INTEGER, INTENT(in):: nquad - - REAL:: w,xo,yo,zo,s - INTEGER:: nquad_1 - ! degree 5 - REAL, PARAMETER:: s1_3=SQRT(0.6) - REAL, PARAMETER:: s2_3=0.5*(1.0 - s1_3) - REAL, PARAMETER:: s3_3=0.5*(1.0 + s1_3) - REAL, PARAMETER:: weight1_3=5./18. - REAL, PARAMETER:: weight2_3=8./18. - ! degre 7 - REAL, PARAMETER:: s1_7=(18.-SQRT(30.))/72. - REAL, PARAMETER:: s2_7=SQRT(525.+70.*SQRT(30.))/35. - REAL, PARAMETER:: s3_7=0.50*(1.00-s2_7) - REAL, PARAMETER:: s4_7=0.50*(1.00+s2_7) - REAL, PARAMETER:: s5_7=(18.+ SQRT(30.))/72. - REAL, PARAMETER:: s6_7=SQRT(525.-70.*SQRT(30.))/35. - REAL, PARAMETER:: s7_7=0.50*(1.00-s6_7) - REAL, PARAMETER:: s8_7=0.50*(1.00+s6_7) - ! degree 9 - REAL,PARAMETER:: s1_9=1.0/3.*SQRT(5.-2.*SQRT(10./7.)) - REAL,PARAMETER:: s2_9=0.50*(1.00 - s1_9) - REAL,PARAMETER:: s3_9=0.50*(1.00 + s1_9) - REAL,PARAMETER:: weight1_9=(322.+13.*SQRT(70.0))/1800.0 - - - REAL,PARAMETER:: s5_9=1.0/3.*SQRT(5.+2.*SQRT(10./7.)) - REAL,PARAMETER:: s6_9=0.50*(1.00 - s5_9) - REAL,PARAMETER:: s7_9=0.50*(1.00 + s5_9) - REAL,PARAMETER:: weight2_9=(322.-13.*SQRT(70.0))/1800.0 - REAL,PARAMETER:: s4_9=1./3.*SQRT(5.+2.*SQRT(10.0/7.0)) - - SELECT CASE(ordre) - CASE(3) - ! nquad=2 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - ! quadrature for edges (3 point gauss formula) - - - - - quad(1,1) = 1.0 - quad(2,1) = 0. - weight(1) = 0.5 - - quad(1,2) = 0.0 - quad(2,2) = 1.0 - weight(2) = 0.5 - - - CASE(5)!! exact for degree 5 - ! nquad=3 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - - - ! s=sqrt(0.6) !0.7745966692414834 !SQRT(0.6d0) - quad(1,1)=s2_3 !0.5*(1.0 - s) - quad(2,1)=s3_3 !0.5*(1.0 + s) - weight(1) =weight1_3 !5./18.! 0.2777777777777778 !5.0d0/18.0d0 - - quad(1,2)=s3_3 !0.5d0*(1.0d0 + s) - quad(2,2)=s2_3 !0.5d0*(1.0d0 - s) - weight(2) =weight1_3 !5./18.! 0.2777777777777778 !5.0d0/18.0d0 - - quad(1,3)=0.5d0 - quad(2,3)=0.5d0 - weight(3)= weight2_3 !8./18.!0.4444444444444444 ! 8.0d0/18.0d0 - - CASE(7) !! exact for degree 7 - ! nquad=4 ! ordre 7 - ! ALLOCATE(quad(2,nquad),weight(nquad) ) - ! s=(18.-sqrt(30.))/72. !0.1739274225687269 !(18.- SQRT(30.))/72. !SQRT(30.d0)*(-5.0d0+3.d0*SQRT(30.d0))/360.d0 - weight(1:2)=s1_7 - ! s=SQRT(525.+70.*SQRT(30.))/35. !0.8611363115940526!SQRT(525.d0+70.d0*SQRT(30.d0))/35.d0 - quad(1,1)=s3_7! 0.50*(1.00-s) - quad(1,2)=s4_7 !0.50*(1.00+s) - quad(2,1)=quad(1,2) !0.5d0*(1.0d0+s) - quad(2,2)=quad(1,1) !0.5d0*(1.0d0-s) - - ! s=(18.+ SQRT(30.))/72. !0.3260725774312731 !(18.+ SQRT(30.))/72.! SQRT(30.d0)*(5.0d0+3.d0*SQRT(30.d0))/360.d0 - weight(3:4)=s5_7 - ! s=SQRT(525.-70.*SQRT(30.))/35. !0.3399810435848563 !SQRT(525.d0-70.d0*SQRT(30.d0))/35.d0 - quad(1,3)=s7_7 !0.50*(1.00-s) - quad(1,4)=s8_7 !0.50*(1.00+s) - quad(2,3)=quad(1,4) !0.5d0*(1.0d0+s) - quad(2,4)=quad(1,3) !0.5d0*(1.0d0-s) - - ! quad(2,:)=1.0d0-quad(1,:) - - CASE(9) ! exact for degree 9 - - ! nquad=5 - ! ALLOCATE(quad(2,nquad),weight(nquad)) - - !s=1.0/3.*SQRT(5.-2.*SQRT(10./7.)) - quad(1,1)=s2_9 !0.50*(1.00 - s) - quad(2,1)=s3_9 !0.50*(1.00 + s) - weight(1) = weight1_9 !(322.+13.*SQRT(70.0))/1800.0 - quad(1,2)=s3_9 !0.5*(1.0 + s) - quad(2,2)=s2_9 !0.5*(1.0 - s) - weight(2) = weight1_9 !(322.+13.*SQRT(70.0))/1800.0 - - ! s=1./3.*SQRT(5.+2.*SQRT(10.0/7.0)) - quad(1,3)=s6_9 !0.5*(1.0 - s) - quad(2,3)=s7_9 !0.5*(1.0 + s) - weight(3) = weight2_9 !(322.0-13.0*SQRT(70.0))/1800.0 - quad(1,4)=s7_9 !0.5*(1.0 + s) - quad(2,4)=s6_9 !0.5*(1.0 - s) - weight(4) = weight2_9 ! (322.0-13.0*SQRT(70.0))/1800.0 - - quad(1,5)=0.5 - quad(2,5)=0.5 - weight(5)=64.0/225.0 - CASE default - PRINT*, 'ordre non defini' - STOP - - END SELECT - - weight = weight/SUM(weight) - END SUBROUTINE quadrature_element - - REAL FUNCTION u(x) - REAL:: x - u=x**2 - END FUNCTION u - - REAL FUNCTION v(x) - REAL:: x - v=x**3 - END FUNCTION v - -END PROGRAM testouille diff --git a/Src1D/main_dec.f90 b/Src1D/main_dec.f90 index bfc8a01..ba1a894 100755 --- a/Src1D/main_dec.f90 +++ b/Src1D/main_dec.f90 @@ -53,12 +53,16 @@ PROGRAM main TYPE(Pvar), DIMENSION(:),ALLOCATABLE:: u_b, u_c TYPE(Pvar),DIMENSION(1):: FL,FR INTEGER :: iarg, nargs - REAL(dp) :: num + REAL(dp) :: num, tn CHARACTER(len=32) :: arg + CHARACTER(len=100) :: folder +INTEGER, DIMENSION(:), ALLOCATABLE :: ShIndArray - + + INTEGER, DIMENSION(:), ALLOCATABLE:: fluxes_mood INTEGER :: nflux + folder='TEST' !!$------------------------------------------------------------------- !!$------------------------------------------------------------------- @@ -94,9 +98,21 @@ PROGRAM main READ(1,*) DATA%tmax READ(1,*) DATA%ifre READ(1,*) DATA%test + READ(1,*) DATA%mood + IF(DATA%mood) THEN + READ(1,*)jt + ALLOCATE(fluxes_mood(jt)) + DO k=1, jt + READ(1,*) fluxes_mood(k) + ENDDO + ELSE + ALLOCATE(fluxes_mood(1)) + fluxes_mood(1) = DATA%ischema + ENDIF CLOSE(1) !----------- SET geometry of the problem test -------------------------- + CALL isPeriodic(DATA) CALL geom(Mesh,DATA) DO jt=1,Mesh%nt @@ -105,6 +121,8 @@ PROGRAM main Impre=6 jt=Mesh%nt + call descriptor(folder,data) + ! geometrie !initialisation Var%Ncells=Mesh%ns @@ -115,7 +133,13 @@ PROGRAM main ! initialisation ALLOCATE(Var%ua(Mesh%ndofs,0:DATA%iordret-1), & & Var%up(Mesh%ndofs,0:DATA%iordret-1)& - & , var%un(Mesh%ndofs)) + & , var%un(Mesh%ndofs),& + & debug%ua(Mesh%ndofs,0:DATA%iordret-1) & + &,debug%up(Mesh%ndofs,0:DATA%iordret-1)& + & , debug%un(Mesh%ndofs), & + & temp_var(Mesh%ndofs,0:DATA%iordret-1), & + & temp(Mesh%ndofs,0:DATA%iordret-1), & + & temp_debug(Mesh%ndofs,0:DATA%iordret-1)) !------------------------------------------------------------------------------------------------------------------------------- ! ----------Aquire old data if test has been interrupted and does not need to restart from scratch -------- @@ -125,12 +149,12 @@ PROGRAM main e=Mesh%e(jt) DO l=1, e%nsommets - Var%ua(e%nu(l),0)=fonc(e%coor(l),DATA) + Var%ua(e%nu(l),0)=IC(e%coor(l),DATA) Var%un(e%nu(l))=Var%ua(e%nu(l),0) ENDDO SELECT CASE(e%itype) - CASE(1,3,4) !Lagrange-> nothing to do + CASE(1,3,4,7,11,12,13,14) !Lagrange-> nothing to do CASE(2,5,6) ! B3 ! cubic Bezier: modif all dof except vertices ALLOCATE(u_b(e%nsommets), u_c(e%nsommets)) @@ -171,7 +195,7 @@ PROGRAM main ENDDO - CALL visu(DATA, kt, mesh, Var) + CALL visu(DATA, kt, mesh, Var,folder) !------------------------------------------------------------------------------------------------------------------------------- ! -------------------- Time- stepping loop ------------------------- @@ -179,38 +203,77 @@ PROGRAM main DO kt=kt0+1, DATA%ktmax ! loop over time steps - - - - + ! switch DO is=1, Mesh%ndofs + temp(is,:)=Var%ua(is,0) Var%ua(is,1:)=Var%ua(is,0) Var%un(is)=0._dp + debug%ua(is,:)=Var%ua(is,0) + temp_debug(is,:)=Debug%ua(is,:) + temp_var(is,:)=Var%ua(is,:) ENDDO dt0= Pas_de_temps(Mesh,Var, DATA) dt=MIN(dt0,DATA%tmax-DATA%temps) Var%dt=dt IF (dt.LE.1.e-13_dp) EXIT - DATA%temps= DATA%temps+dt + tn=DATA%temps + ! Euler time stepping ! initilalise the time step with the right scheme ! loop over the cascade of schemes - Mesh%e(:)%type_flux=DATA%ischema + IF (DATA%mood ) then + Mesh%e(:)%type_flux=DATA%ischema + Mesh%e(:)%diag2=0 + + DO nflux = 1,size(fluxes_mood) + + + if (nflux.gt.1) then + DO is=1, Mesh%ndofs + Debug%ua(is,:)= temp_debug(is,:) + Var%ua(is,:)=temp(is,:) + END DO + endif + + DO k_inter=1,DATA%iter + DO is=1, Mesh%ndofs + debug%up(is,:)=debug%ua(is,:) + ENDDO + DO k=2, DATA%iordret + CALL debut() + ENDDO ! k + END DO + + ! do the test at the end of timestep, not at every iteration!!!! + ! maybe positivity checks inside every iteration + + CALL test(Data%iordret-1,Debug,Var, mesh, DATA,fluxes_mood(nflux)) + + + END DO ! nflux + + !!$ + DO is=1, Mesh%ndofs + Var%ua(is,:)=temp(is,:) + END DO + END IF + DO k_inter=1,DATA%iter DO is=1, Mesh%ndofs Var%up(is,:)=Var%ua(is,:) ENDDO - DO k=2, DATA%iordret - CALL fin() + DO k=2, DATA%iordret + DATA%temps = tn + alpha(k-1,DATA%iordret)*dt + CALL fin() ENDDO ! k ENDDO ! n_inter - + DATA%temps= tn +dt Var%ua(:,0)=Var%ua(:,DATA%iordret-1) @@ -225,20 +288,17 @@ PROGRAM main ENDDO !100 FORMAT(1x,i5,3(1x,e10.4)) - CALL visu(DATA, kt, mesh, Var) + CALL visu(DATA, kt, mesh, Var,folder) PRINT* ENDIF ENDDO ! end time stepping PRINT*, "final time=", DATA%temps, DATA%tmax !post processing - CALL visu(DATA, kt, mesh, Var) + CALL visu(DATA, kt, mesh, Var,folder) DEALLOCATE(Var%ua, Var%up , var%un, Mesh%e, Mesh%edge, Mesh%aires ) - - !------------------------------------------------------------------------------------------------------------------------------------- - !------------------------------------------------------------------------------------------------------------------------------------- - !------------------------------------------------------------------------------------------------------------------------------------- + DEALLOCATE( temp_var, temp_debug,temp, fluxes_mood) CONTAINS @@ -271,7 +331,29 @@ CONTAINS END FUNCTION pas_de_temps +SUBROUTINE debut () + DO is=1, Mesh%Ndofs + debug%un(is)=0.0_dp + ENDDO + + !! CALL shock_indicator(Mesh,Var%ua(k-1,:),ShIndArray) + DO jt=1, Mesh%nt + CALL main_update(k,dt,Mesh%e(jt),debug,DATA,alpha,beta,gamma,n_theta,theta,jt,Mesh) + ENDDO + !-------------------------------------------------------------------------------------- + ! EDGE UPDATE DONE ONLY IN CASE WE DO NOT HAVE LXF scheme + IF (DATA%ischema==5 .OR.DATA%ischema==4) THEN !(with jumps--> Burman'stuff) + CALL edge_main_update(k,DATA,Mesh,debug,dt,alpha,beta,gamma,n_theta,theta) + END IF + CALL BC(debug, Mesh%e(1)%nu(1), Mesh%e(Mesh%nt)%nu(2), DATA, k) + + ! Compute the 'trial' solution to make MOOD tests + DO is=1, Mesh%ndofs + debug%ua(is,k-1)=debug%up(is,k-1)-debug%un(is)*Mesh%aires(is) + ENDDO + + END SUBROUTINE debut SUBROUTINE fin() @@ -280,7 +362,7 @@ CONTAINS ENDDO DO jt=1, Mesh%nt - CALL main_update(k,dt,Mesh%e(jt),Var,DATA,alpha,beta,gamma,n_theta,theta,jt,Mesh ) + CALL main_update(k,dt,Mesh%e(jt),Var,DATA,alpha,beta,gamma,n_theta,theta,jt,Mesh) ENDDO !-------------------------------------------------------------------------------------- @@ -299,7 +381,6 @@ CONTAINS ENDDO - END SUBROUTINE fin !----------------------------------------------------------------------------------------------------------- diff --git a/Src1D/param2d.f90 b/Src1D/param2d.f90 index 582cdcd..d966101 100755 --- a/Src1D/param2d.f90 +++ b/Src1D/param2d.f90 @@ -17,11 +17,9 @@ MODULE param2d USE arete_class use precision IMPLICIT NONE + REAL(8), PARAMETER:: Pi=ACOS(-1.0) - REAL(dp), PARAMETER:: Pi=ACOS(-1._dp) - - TYPE maillage INTEGER:: ndofs INTEGER:: ns, nt @@ -53,5 +51,8 @@ MODULE param2d REAL(dp):: alpha_jump REAL(dp):: alpha_jump2 INTEGER:: test + LOGICAL:: mood + LOGICAL:: periodicBC + END TYPE donnees END MODULE param2d diff --git a/Src1D/postprocessing.f90 b/Src1D/postprocessing.f90 index 2efd906..c108d04 100755 --- a/Src1D/postprocessing.f90 +++ b/Src1D/postprocessing.f90 @@ -18,53 +18,54 @@ MODULE postprocessing ! In the data files are printed ALL the DOFs of the domain USE param2d - USE utils + USE init_bc USE Model USE variable_def USE PRECISION IMPLICIT NONE PRIVATE - PUBLIC:: visu!, visudeb !,errors + PUBLIC:: visu, descriptor!, visudeb !,errors CONTAINS - SUBROUTINE visu(DATA, kt, mesh, var) + SUBROUTINE visu(DATA, kt, mesh, var,folder) TYPE(Donnees), INTENT(inout):: DATA INTEGER, INTENT(in):: kt TYPE(maillage), INTENT(in):: mesh TYPE(variables), INTENT(in):: var + CHARACTER(len=100), INTENT(in):: folder INTEGER::jt, l, k, ios, lp, is TYPE(element):: e TYPE(Pvar),DIMENSION(:),ALLOCATABLE::v,u,w REAL(dp), DIMENSION(:), ALLOCATABLE:: base REAL(dp), DIMENSION(:,:), ALLOCATABLE:: grad, x TYPE(PVar), DIMENSION(:), ALLOCATABLE:: sol - CHARACTER(LEN = 75) :: nombre, nt_str + CHARACTER(LEN = 75) :: nombre, nt_str WRITE(nombre, *) kt WRITE(nt_str, *) Mesh%nt + call system('mkdir -p ' //folder ) + OPEN( UNIT = 1, FILE = trim(FOLDER)//"/"//"/sol_cons_last.dat", IOSTAT = ios ) + OPEN( UNIT = 2, FILE = trim(FOLDER)//"/"//"/ex_prim_last.dat", IOSTAT = ios ) + OPEN( UNIT = 3, FILE = trim(FOLDER)//"/"//"/error_last.dat", IOSTAT = ios ) + OPEN( UNIT = 4, FILE = trim(FOLDER)//"/"//"/sol_prim_last.dat", IOSTAT = ios ) + OPEN( UNIT = 80, FILE = trim(FOLDER)//"/"//"/sol_prim_nodal_last.dat", IOSTAT = ios ) + OPEN( UNIT = 5, FILE = trim(FOLDER)//"/"//"/sol_prim_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) + OPEN( UNIT = 50, FILE = trim(FOLDER)//"/"//"/ex_prim_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) + OPEN( UNIT = 7, FILE = trim(FOLDER)//"/"//"/FluxIndicator_"//TRIM(ADJUSTL(nt_str))//"_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) + OPEN( UNIT = 9, FILE = trim(FOLDER)//"/"//"/DiagIndicator_"//TRIM(ADJUSTL(nt_str))//"_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) - OPEN( UNIT = 1, FILE = "sol_cons_last.dat", IOSTAT = ios ) - OPEN( UNIT = 2, FILE = "ex_prim_last.dat", IOSTAT = ios ) - OPEN( UNIT = 3, FILE = "error_last.dat", IOSTAT = ios ) - OPEN( UNIT = 4, FILE = "sol_prim_last.dat", IOSTAT = ios ) - OPEN( UNIT = 80, FILE = "sol_prim_nodal_last.dat", IOSTAT = ios ) - OPEN( UNIT = 5, FILE = "sol_prim_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) - OPEN( UNIT = 50, FILE = "ex_prim_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) - OPEN( UNIT = 7, FILE = "FluxIndicator_"//TRIM(ADJUSTL(nt_str))//"_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) - OPEN( UNIT = 9, FILE = "DiagIndicator_"//TRIM(ADJUSTL(nt_str))//"_"//TRIM(ADJUSTL(nombre))//".dat", IOSTAT = ios ) + OPEN( UNIT = 70, FILE = trim(FOLDER)//"/"//"/FluxIndicator_last.dat", IOSTAT = ios ) + OPEN( UNIT = 90, FILE = trim(FOLDER)//"/"//"/DiagIndicator_last.dat", IOSTAT = ios ) - OPEN( UNIT = 70, FILE = "FluxIndicator_last.dat", IOSTAT = ios ) - OPEN( UNIT = 90, FILE = "DiagIndicator_last.dat", IOSTAT = ios ) - - OPEN( UNIT = 8, FILE = "Entropy_"//TRIM(ADJUSTL(nt_str))//".dat", IOSTAT = ios ) + OPEN( UNIT = 8, FILE = trim(FOLDER)//"/"//"/Entropy_"//TRIM(ADJUSTL(nt_str))//".dat", IOSTAT = ios ) !!$ !!$ !!$ @@ -75,7 +76,7 @@ CONTAINS ALLOCATE(sol(e%nsommets),u(e%nsommets),v(e%nsommets),w(e%nsommets)) ALLOCATE(base(e%nsommets),grad(n_dim,e%nsommets)) DO l=1, e%nsommets - sol(l)=fonc(e%coor(l)-DATA%temps,DATA) + sol(l)=IC(e%coor(l)-DATA%temps,DATA) u(l)=Var%ua(e%nu(l),0) u(l)=Var%ua(e%nu(l),0) ENDDO @@ -94,7 +95,7 @@ CONTAINS WRITE(90,*) SUM(e%coor)/REAL(e%nsommets), Mesh%e(jt)%diag !!$ SELECT CASE(e%itype) - CASE(1) + CASE(1,11) WRITE(1,*) e%coor(1),v(1)%u, u(1)%u WRITE(1,*) e%coor(2),v(2)%u, u(2)%u WRITE(2,*) e%coor(1),sol(1)%u @@ -109,7 +110,7 @@ CONTAINS WRITE(50,*) e%coor(2),sol(2)%u WRITE(80,*) e%coor(1),w(1)%u WRITE(80,*) e%coor(2),w(2)%u - CASE(2,3) + CASE(2,3,12) WRITE(1,*) e%coor(1),v(1)%u, u(1)%u WRITE(1,*) e%coor(3),v(3)%u, u(3)%u WRITE(1,*) e%coor(2),v(2)%u, u(2)%u @@ -131,7 +132,7 @@ CONTAINS WRITE(80,*) e%coor(1),w(1)%u WRITE(80,*) e%coor(2),w(2)%u - CASE(4,5) + CASE(4,5,13) WRITE(1,*) e%coor(1),v(1)%u, u(1)%u WRITE(1,*) e%coor(3),v(3)%u, u(3)%u WRITE(1,*) e%coor(4),v(4)%u, u(4)%u @@ -160,7 +161,7 @@ CONTAINS WRITE(80,*) e%coor(1),w(1)%u WRITE(80,*) e%coor(2),w(2)%u - CASE(6) + CASE(6,7,14) WRITE(1,*) e%coor(1),v(1)%u, u(1)%u WRITE(1,*) e%coor(3),v(3)%u, u(3)%u WRITE(1,*) e%coor(4),v(4)%u, u(4)%u @@ -201,4 +202,18 @@ CONTAINS END SUBROUTINE visu + SUBROUTINE descriptor(folder,data) + character(len=100)::folder + character(len=100)::filename + TYPE(donnees):: DATA + call system('mkdir -p ' //folder ) + filename = '/Descriptor' + open(unit=10,status="REPLACE",file= trim(folder)//trim(filename)//'.dat') + write(10,*) data%nt, data%itype,data%ischema,data%test + + !write(10,*) 'itype = ', data%itype + !write(10,*) 'ischema = ', data%ischema + !write(10,*) 'test = ', data%test + close(10) + END SUBROUTINE descriptor END MODULE postprocessing diff --git a/Src1D/scheme.f90 b/Src1D/scheme.f90 index 89eda11..8aa741f 100755 --- a/Src1D/scheme.f90 +++ b/Src1D/scheme.f90 @@ -35,7 +35,7 @@ MODULE scheme !1D PUBLIC:: schema, jump CONTAINS - FUNCTION schema(ischema, e, u, du, flux, dt, jt,mesh) RESULT(res) + FUNCTION schema(ischema, e, u, du, flux, source, dt, jt,mesh) RESULT(res) ! input: ! e: element ! du: temporal increment @@ -49,7 +49,7 @@ CONTAINS INTEGER, INTENT(in):: ischema TYPE(element), INTENT(in):: e TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du + TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du, source TYPE(PVar), DIMENSION(n_dim,e%nsommets), INTENT(in):: flux REAL(dp) , INTENT(in):: dt @@ -57,11 +57,11 @@ CONTAINS SELECT CASE (e%type_flux) CASE(4) - res=galerkin_new(e, u, du, flux, dt,jt,mesh) + res=galerkin_new(e, u, du, flux, source, dt,jt,mesh) CASE(5) - res=psi_galerkin(e, u, du, flux, dt,jt,mesh) + res=psi_galerkin(e, u, du, flux, source, dt,jt,mesh) CASE(-1) - res=lxf(e, u, du, flux, dt,jt,mesh) + res=lxf(e, u, du, flux, source, dt,jt,mesh) CASE default PRINT*, "scheme not defined" STOP @@ -73,7 +73,7 @@ CONTAINS !------------------------ SCHEME FOR FLUX --------------------------------------------------------------- !---------------------------------------------------------------------------------------------------------------- - FUNCTION galerkin(e, u, du, flux, dt,jt,mesh) RESULT(res) + FUNCTION galerkin(e, u, du, flux, source, dt,jt,mesh) RESULT(res) ! input: ! e: element ! du: temporal increment @@ -86,7 +86,7 @@ CONTAINS TYPE(maillage),INTENT(IN):: mesh TYPE(element), INTENT(in):: e TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du + TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du, source TYPE(PVar), DIMENSION(n_dim,e%nsommets), INTENT(in):: flux REAL(dp) , INTENT(in):: dt @@ -100,7 +100,7 @@ CONTAINS REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: Jac REAL(dp), DIMENSION(n_vars,n_vars):: nnmat - TYPE(PVar) :: du_loc, flux_loc, u_loc + TYPE(PVar) :: du_loc, flux_loc, u_loc, source_loc REAL(dp) :: hh, eps INTEGER :: i, iq, l, k @@ -125,6 +125,7 @@ CONTAINS u_loc = e%eval_func(u ,e%quad(:,iq)) du_loc = e%eval_func(du ,e%quad(:,iq)) + source_loc = e%eval_func(source ,e%quad(:,iq)) #if (1==1) ! not quadrature free fluxloc=u_loc%flux(xx) ! warning: mismatch between bary coord and e%coord @@ -135,7 +136,7 @@ CONTAINS #endif - res(i) = res(i) + ( base(i)*du_loc-dt*grad(1,i)*fluxloc(1) )*e%weight(iq) + res(i) = res(i) + ( base(i)*du_loc-dt*grad(1,i)*fluxloc(1) -dt*source_loc*base(i) )*e%weight(iq) @@ -158,7 +159,7 @@ CONTAINS END FUNCTION galerkin - FUNCTION galerkin_new(e, u, du, flux, dt,jt,mesh) RESULT(res) + FUNCTION galerkin_new(e, u, du, flux, source, dt,jt,mesh) RESULT(res) ! input: ! e: element ! du: temporal increment @@ -171,7 +172,7 @@ CONTAINS TYPE(maillage),INTENT(IN):: mesh TYPE(element), INTENT(in):: e TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du + TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du, source TYPE(PVar), DIMENSION(n_dim,e%nsommets), INTENT(in):: flux REAL(dp) , INTENT(in):: dt @@ -185,7 +186,7 @@ CONTAINS DO l=1, SIZE(flux(1,1)%u) - res(:)%u(l)=MATMUL(e%mass(:,:),du%u(l)) & + res(:)%u(l)=MATMUL(e%mass(:,:),du%u(l)-dt*source%u(l)) & &+dt*MATMUL(e%coeff (:,:), flux(1,:)%u(l) )!& ! &+dt*MATMUL(e%coeff_b (:,:), flux(1,:)%u(l) ) ENDDO @@ -193,7 +194,7 @@ CONTAINS END FUNCTION galerkin_new - FUNCTION psi_galerkin(e, u, du, flux, dt,jt, Mesh) RESULT(res) + FUNCTION psi_galerkin(e, u, du, flux, source, dt,jt, Mesh) RESULT(res) ! input: ! e: element ! du: temporal increment @@ -206,18 +207,18 @@ CONTAINS TYPE(maillage),INTENT(IN):: mesh TYPE(element), INTENT(in):: e TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du + TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du, source TYPE(PVar), DIMENSION(n_dim,e%nsommets), INTENT(in):: flux REAL(dp) , INTENT(in):: dt TYPE(PVar), DIMENSION(e%nsommets) :: res, phi_lxF,w INTEGER:: k, l - phi_lxf= lxf(e,u,du,flux,dt,jt,mesh) + phi_lxf= lxf(e,u,du,flux, source,dt,jt,mesh) CALL limit(e,u,res,phi_lxf) END FUNCTION psi_galerkin - FUNCTION lxf(e, u, du, flux, dt,jt,mesh) RESULT(phi_lxf) + FUNCTION lxf(e, u, du, flux, source, dt,jt,mesh) RESULT(phi_lxf) ! input: ! e: element ! du: temporal increment @@ -230,7 +231,7 @@ CONTAINS TYPE(maillage),INTENT(IN):: mesh TYPE(element), INTENT(in):: e TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du + TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: du, source TYPE(PVar), DIMENSION(n_dim,e%nsommets), INTENT(in):: flux REAL(dp) , INTENT(in):: dt @@ -243,7 +244,7 @@ CONTAINS REAL(dp):: alpha INTEGER:: l,i,iq, k - res= galerkin_new(e, u, du, flux, dt,jt,mesh) + res= galerkin_new(e, u, du, flux, source, dt,jt,mesh) u_cons=Control_to_cons(u,e) DO l = 1,n_vars @@ -267,7 +268,77 @@ CONTAINS !------------------------ STABILIZATION ------------------------------------------------------------------ !---------------------------------------------------------------------------------------------------------------- !!!!!!!!!! Jump - SUBROUTINE jump(ed ,e1, e2, uu1, uu2, resJ, alpha_j,alpha2_j) + + SUBROUTINE jump(ed ,e1, e2, uu1, uu2, resJ, alpha, alpha2) + ! e1 is the element before the edge, e2 the one after + ! e1-> uu1, e2->uu2 + + REAL(dp),PARAMETER,DIMENSION(6)::TYPE=(/1.,2.,2.,3.,3.,4./) + REAL(dp), INTENT(in) :: alpha, alpha2 + TYPE(arete), INTENT(in):: ed + TYPE(element), INTENT(in):: e1 + TYPE(element), INTENT(in):: e2 + TYPE(PVar), DIMENSION(e1%nsommets), INTENT(in):: uu1, uu2 + TYPE(Pvar), DIMENSION(e1%nsommets,2):: resJ + TYPE(Pvar):: u, ubar1, ubar2 + TYPE(Pvar):: divflux1, divflux2, jumpflux,jumpfluxder2, divdivflux1, divdivflux2 + INTEGER:: is, l + real(dp),dimension(n_dim):: xx=0. + REAL(dp):: theta, theta2, h, umax, umin, l2, spectral_radius1, spectral_radius2 + REAL(dp), DIMENSION(n_vars,n_vars,n_dim)::jaco + REAL(dp), DIMENSION(e1%nsommets):: base1 + REAL(dp),DIMENSION(n_dim,e1%nsommets):: grad1, grad1_der + REAL(dp), DIMENSION(e2%nsommets):: base2 + REAL(dp),DIMENSION(n_dim,e2%nsommets):: grad2, grad2_der + REAL(dp),DIMENSION(2), PARAMETER:: x2=(/0.d0,1.0d0/),x1=(/1.d0,0.d0/) + + + DO l = 1,n_vars + ubar1%u(l)= SUM(uu1%u(l))/REAL(SIZE(uu1)) + END DO + DO l = 1,n_vars + ubar2%u(l)= SUM(uu2%u(l))/REAL(SIZE(uu2)) + END DO + + spectral_radius1= ubar1%spectral_radius(xx,e1%n) + spectral_radius2= ubar2%spectral_radius(xx,e2%n) + + + + DO l=1, e1%nsommets + grad1(:,l) = e1%gradient(l,x1)!*e1%volume + grad2(:,l) = e2%gradient(l,x2)!*e2%volume + grad1_der(:,l) = e1%gradient2(l,x1) + grad2_der(:,l) = e2%gradient2(l,x2) + ENDDO + + ! jump of grad u + divflux1 = e1%eval_der(uu1(:),x1)!*e1%volume! + divflux2 = e2%eval_der(uu2(:),x2)!*e2%volume! + divdivflux1 = e1%eval_der2(uu1(:),x1) + divdivflux2 = e2%eval_der2(uu2(:),x2) + + !! h=1./((TYPE(e1%itype)*TYPE(e2%itype))*0.5) !* l2! + h=1.d0/(0.5d0*(SUM(ABS(grad1(1,:))) + SUM( ABS(grad2(1,:))) )) + + jumpflux=(divflux2-divflux1) !* ABS(u%spectral_radius((/0.5d0/),(/1.0d0/))) ! ????? ! + jumpfluxder2=(divdivflux2-divdivflux1) !* ABS(u%spectral_radius((/0.5/),(/1.0/))) + + theta=alpha* h **(2.) + theta2=alpha2 * h**4. + + DO l=1, e1%nsommets + ResJ(l,1) = spectral_radius1*((-1.d0)*jumpflux * grad1(1,l) * theta +jumpfluxder2*(-grad1_der(1,l))*theta2) + ResJ(l,2) = spectral_radius2*(jumpflux * grad2(1,l) * theta +jumpfluxder2*grad2_der(1,l)*theta2) + + ENDDO + + + END SUBROUTINE jump + + + + SUBROUTINE jump_old(ed ,e1, e2, uu1, uu2, resJ, alpha_j,alpha2_j) CHARACTER(Len=*), PARAMETER :: mod_name="scheme/jump" ! e1 is the element before the edge, e2 the one after ! e1-> uu1, e2->uu2 @@ -326,7 +397,7 @@ CONTAINS ENDDO !---------------------------------------------------------------------------------- - END SUBROUTINE jump + END SUBROUTINE jump_old !---------------------------------------------------------------------------------------------------------------- !---------------------------------------------------------------------------------------------------------------- diff --git a/Src1D/test/Makefile.1D.gfortran b/Src1D/test/Makefile.1D.gfortran deleted file mode 100644 index 8fb7a06..0000000 --- a/Src1D/test/Makefile.1D.gfortran +++ /dev/null @@ -1,69 +0,0 @@ -# FICHIER DE CREATION D'OBJETS ET D'UN EXECUTABLE -# RANGEMENT PAR ORDRE ALPHABETIQUE -# -# VERSION DEBBUGGEUR -db -# VERSION OPTIMISEUR -F90=gfortran -OBJDIR = obj1D -MODDIR = mod1D -BINDIR = bin1D -SRC = ./ -MODEL_VAR= variable_def_scalar_1D - -FFLAGS = -DLINUX -c $(OPT) -ffree-line-length-none -LDFLAGS= -J$(MODDIR) -cpp $(OPT) -ffree-line-length-none - - - -OBJS = $(addprefix $(OBJDIR)/, elements_1D.o param2d.o geometry.o algebra.o precision.o $(MODEL_VAR).o overloading.o aretes.o ) - - -dec: $(MODDIR) $(OBJDIR) $(BINDIR) $(OBJS) $(SRC)/main.f90 - $(F90) $(LDFLAGS) -o $(BINDIR)/main.out $(SRC)/main.f90 $(OBJS) - -$(MODDIR): - mkdir -p $(MODDIR) - -$(OBJDIR): - mkdir -p $(OBJDIR) - -$(BINDIR): - mkdir -p $(BINDIR) - - - -$(OBJDIR)/$(MODEL_VAR).o: $(OBJDIR)/algebra.o $(SRC)/$(MODEL_VAR).f90 $(OBJDIR)/precision.o $(OBJDIR)/aretes.o - $(F90) $(FFLAGS) -o $(OBJDIR)/$(MODEL_VAR).o $(SRC)/$(MODEL_VAR).f90 - -$(OBJDIR)/param2d.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/param2d.o $(SRC)/param2d.f90 - -$(OBJDIR)/geometry.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(SRC)/geometry.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/geometry.o $(SRC)/geometry.f90 - -$(OBJDIR)/algebra.o: $(SRC)/algebra.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/algebra.o $(SRC)/algebra.f90 - -$(OBJDIR)/elements_1D.o: $(SRC)/elements_1D.f90 $(OBJDIR)/algebra.o $(OBJDIR)/precision.o $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/overloading.o - $(F90) $(FFLAGS) -o $(OBJDIR)/elements_1D.o $(SRC)/elements_1D.f90 - -$(OBJDIR)/precision.o: $(SRC)/precision.f90 - $(F90) $(FFLAGS) -o $(OBJDIR)/precision.o $(SRC)/precision.f90 - -$(OBJDIR)/overloading.o: $(SRC)/overloading.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/overloading.o $(SRC)/overloading.f90 - -$(OBJDIR)/aretes.o: $(SRC)/aretes.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/aretes.o $(SRC)/aretes.f90 - - -clean: - rm -rf $(OBJDIR) - rm -rf $(MODDIR) - rm -rf $(BINDIR) - rm $(SRC)/*.f90~ - rm *.mod - - - - diff --git a/Src1D/test/Makefile.1D.gfortran~ b/Src1D/test/Makefile.1D.gfortran~ deleted file mode 100644 index 72d969a..0000000 --- a/Src1D/test/Makefile.1D.gfortran~ +++ /dev/null @@ -1,69 +0,0 @@ -# FICHIER DE CREATION D'OBJETS ET D'UN EXECUTABLE -# RANGEMENT PAR ORDRE ALPHABETIQUE -# -# VERSION DEBBUGGEUR -db -# VERSION OPTIMISEUR -F90=gfortran -OBJDIR = obj1D -MODDIR = mod1D -BINDIR = bin1D -SRC = ./ -MODEL_VAR= variable_def_scalar_1D - -FFLAGS = -DLINUX -J$(MODDIR) -I$(PETSC_DIR)/include -I/usr/lib/openmpi/include -cpp -c $(OPT) -ffree-line-length-none -LDFLAGS= -J$(MODDIR) -I$(PETSC_DIR)/include -I/usr/lib/openmpi/include -L/usr/lib -cpp $(OPT) -ffree-line-length-none - - - -OBJS = $(addprefix $(OBJDIR)/, elements_1D.o param2d.o geometry.o algebra.o precision.o $(MODEL_VAR).o overloading.o aretes.o ) - - -dec: $(MODDIR) $(OBJDIR) $(BINDIR) $(OBJS) $(SRC)/main.f90 - $(F90) $(LDFLAGS) -o $(BINDIR)/main.out $(SRC)/main.f90 $(OBJS) - -$(MODDIR): - mkdir -p $(MODDIR) - -$(OBJDIR): - mkdir -p $(OBJDIR) - -$(BINDIR): - mkdir -p $(BINDIR) - - - -$(OBJDIR)/$(MODEL_VAR).o: $(OBJDIR)/algebra.o $(SRC)/$(MODEL_VAR).f90 $(OBJDIR)/precision.o $(OBJDIR)/aretes.o - $(F90) $(FFLAGS) -o $(OBJDIR)/$(MODEL_VAR).o $(SRC)/$(MODEL_VAR).f90 - -$(OBJDIR)/param2d.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/param2d.o $(SRC)/param2d.f90 - -$(OBJDIR)/geometry.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(SRC)/geometry.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/geometry.o $(SRC)/geometry.f90 - -$(OBJDIR)/algebra.o: $(SRC)/algebra.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/algebra.o $(SRC)/algebra.f90 - -$(OBJDIR)/elements_1D.o: $(SRC)/elements_1D.f90 $(OBJDIR)/algebra.o $(OBJDIR)/precision.o $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/overloading.o - $(F90) $(FFLAGS) -o $(OBJDIR)/elements_1D.o $(SRC)/elements_1D.f90 - -$(OBJDIR)/precision.o: $(SRC)/precision.f90 - $(F90) $(FFLAGS) -o $(OBJDIR)/precision.o $(SRC)/precision.f90 - -$(OBJDIR)/overloading.o: $(SRC)/overloading.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/overloading.o $(SRC)/overloading.f90 - -$(OBJDIR)/aretes.o: $(SRC)/aretes.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/aretes.o $(SRC)/aretes.f90 - - -clean: - rm -rf $(OBJDIR) - rm -rf $(MODDIR) - rm -rf $(BINDIR) - rm $(SRC)/*.f90~ - rm *.mod - - - - diff --git a/Src1D/test/Makefile.1D.ifort b/Src1D/test/Makefile.1D.ifort deleted file mode 100644 index 1c372d7..0000000 --- a/Src1D/test/Makefile.1D.ifort +++ /dev/null @@ -1,69 +0,0 @@ -# FICHIER DE CREATION D'OBJETS ET D'UN EXECUTABLE -# RANGEMENT PAR ORDRE ALPHABETIQUE -# -# VERSION DEBBUGGEUR -db -# VERSION OPTIMISEUR -F90=ifort -OBJDIR = obj1D -MODDIR = mod1D -BINDIR = bin1D -SRC = ./ -MODEL_VAR= variable_def_scalar_1D - - -FFLAGS = -c -fpp -pg # -C -check all -fltconsistency -fpe0 -ftrapuv -fpe-all=3 -ftrapuv -g -c -traceback -debug extended -ftz #-fast -c -p -fpp #-debug all #-fast -c -p -fpp # -LDFLAGS= -fpp -pg # -C -check all -fltconsistency -fpe-all=3 -ftrapuv -ftz -traceback -debug extended #-fpp -fast -p #-debug all # -fast -p # - - -OBJS = $(addprefix $(OBJDIR)/, elements_1D.o param2d.o geometry.o algebra.o precision.o $(MODEL_VAR).o overloading.o aretes.o ) - - -dec: $(MODDIR) $(OBJDIR) $(BINDIR) $(OBJS) $(SRC)/main.f90 - $(F90) $(LDFLAGS) -o $(BINDIR)/main.out $(SRC)/main.f90 $(OBJS) - -$(MODDIR): - mkdir -p $(MODDIR) - -$(OBJDIR): - mkdir -p $(OBJDIR) - -$(BINDIR): - mkdir -p $(BINDIR) - - - -$(OBJDIR)/$(MODEL_VAR).o: $(OBJDIR)/algebra.o $(SRC)/$(MODEL_VAR).f90 $(OBJDIR)/precision.o $(OBJDIR)/aretes.o - $(F90) $(FFLAGS) -o $(OBJDIR)/$(MODEL_VAR).o $(SRC)/$(MODEL_VAR).f90 - -$(OBJDIR)/param2d.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/param2d.o $(SRC)/param2d.f90 - -$(OBJDIR)/geometry.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(SRC)/geometry.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/geometry.o $(SRC)/geometry.f90 - -$(OBJDIR)/algebra.o: $(SRC)/algebra.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/algebra.o $(SRC)/algebra.f90 - -$(OBJDIR)/elements_1D.o: $(SRC)/elements_1D.f90 $(OBJDIR)/algebra.o $(OBJDIR)/precision.o $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/overloading.o - $(F90) $(FFLAGS) -o $(OBJDIR)/elements_1D.o $(SRC)/elements_1D.f90 - -$(OBJDIR)/precision.o: $(SRC)/precision.f90 - $(F90) $(FFLAGS) -o $(OBJDIR)/precision.o $(SRC)/precision.f90 - -$(OBJDIR)/overloading.o: $(SRC)/overloading.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/overloading.o $(SRC)/overloading.f90 - -$(OBJDIR)/aretes.o: $(SRC)/aretes.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/aretes.o $(SRC)/aretes.f90 - - -clean: - rm -rf $(OBJDIR) - rm -rf $(MODDIR) - rm -rf $(BINDIR) - rm $(SRC)/*.f90~ - rm *.mod - - - - diff --git a/Src1D/test/Makefile.1D.ifort~ b/Src1D/test/Makefile.1D.ifort~ deleted file mode 100644 index 87e81fe..0000000 --- a/Src1D/test/Makefile.1D.ifort~ +++ /dev/null @@ -1,69 +0,0 @@ -# FICHIER DE CREATION D'OBJETS ET D'UN EXECUTABLE -# RANGEMENT PAR ORDRE ALPHABETIQUE -# -# VERSION DEBBUGGEUR -db -# VERSION OPTIMISEUR -F90=ifort -OBJDIR = obj1D -MODDIR = mod1D -BINDIR = bin1D -SRC = ./ -MODEL_VAR= variable_def_scalar_1D - - -FFLAGS = -c -r8 -fpp -pg -C -check all -fltconsistency -fpe0 -ftrapuv -fpe-all=3 -ftrapuv -g -c -traceback -debug extended -ftz #-fast -c -p -fpp #-debug all #-fast -c -p -fpp # -LDFLAGS= -r8 -fpp -pg -C -check all -fltconsistency -fpe-all=3 -ftrapuv -ftz -traceback -debug extended #-fpp -fast -p #-debug all # -fast -p # - - -OBJS = $(addprefix $(OBJDIR)/, elements_1D.o param2d.o geometry.o algebra.o precision.o $(MODEL_VAR).o overloading.o aretes.o ) - - -dec: $(MODDIR) $(OBJDIR) $(BINDIR) $(OBJS) $(SRC)/main.f90 - $(F90) $(LDFLAGS) -o $(BINDIR)/main.out $(SRC)/main.f90 $(OBJS) - -$(MODDIR): - mkdir -p $(MODDIR) - -$(OBJDIR): - mkdir -p $(OBJDIR) - -$(BINDIR): - mkdir -p $(BINDIR) - - - -$(OBJDIR)/$(MODEL_VAR).o: $(OBJDIR)/algebra.o $(SRC)/$(MODEL_VAR).f90 $(OBJDIR)/precision.o $(OBJDIR)/aretes.o - $(F90) $(FFLAGS) -o $(OBJDIR)/$(MODEL_VAR).o $(SRC)/$(MODEL_VAR).f90 - -$(OBJDIR)/param2d.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/param2d.o $(SRC)/param2d.f90 - -$(OBJDIR)/geometry.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(SRC)/geometry.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/geometry.o $(SRC)/geometry.f90 - -$(OBJDIR)/algebra.o: $(SRC)/algebra.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/algebra.o $(SRC)/algebra.f90 - -$(OBJDIR)/elements_1D.o: $(SRC)/elements_1D.f90 $(OBJDIR)/algebra.o $(OBJDIR)/precision.o $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/overloading.o - $(F90) $(FFLAGS) -o $(OBJDIR)/elements_1D.o $(SRC)/elements_1D.f90 - -$(OBJDIR)/precision.o: $(SRC)/precision.f90 - $(F90) $(FFLAGS) -o $(OBJDIR)/precision.o $(SRC)/precision.f90 - -$(OBJDIR)/overloading.o: $(SRC)/overloading.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/overloading.o $(SRC)/overloading.f90 - -$(OBJDIR)/aretes.o: $(SRC)/aretes.f90 $(OBJDIR)/precision.o - $(F90) $(FFLAGS) -o $(OBJDIR)/aretes.o $(SRC)/aretes.f90 - - -clean: - rm -rf $(OBJDIR) - rm -rf $(MODDIR) - rm -rf $(BINDIR) - rm $(SRC)/*.f90~ - rm *.mod - - - - diff --git a/Src1D/test/algebra.f90 b/Src1D/test/algebra.f90 deleted file mode 100755 index 54c0aab..0000000 --- a/Src1D/test/algebra.f90 +++ /dev/null @@ -1,274 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE algebra - use precision - IMPLICIT NONE - - - LOGICAL, SAVE, PRIVATE :: initialise = .FALSE. - LOGICAL, SAVE, PRIVATE :: module_debug = .FALSE. - - LOGICAL, SAVE, PUBLIC :: optim1_plain = .FALSE. - LOGICAL, SAVE, PUBLIC :: optim2_plain = .FALSE. - LOGICAL, SAVE, PUBLIC :: optim3_plain = .FALSE. - LOGICAL, SAVE, PUBLIC :: optim4_plain = .FALSE. - LOGICAL, SAVE, PUBLIC :: optim5_plain = .FALSE. -CONTAINS - - !------------------------------------------ - !!-- Inversion d'une matrice carree par LU et pivot partiel par ligne - !!-- Ref : Numerical recipes in C - !------------------------------------------ - FUNCTION Inverse( Mat) RESULT (Mat1) - CHARACTER(LEN = *), PARAMETER :: mod_name = "InverseLu" - REAL(DP), DIMENSION(:, : ), INTENT(IN) :: Mat - REAL(DP), DIMENSION(SIZE(Mat, dim = 1), SIZE( Mat, dim = 1)) :: Mat1, mat2 - REAL(DP), DIMENSION(SIZE(Mat, dim = 1)) :: col - REAL(DP) :: d - INTEGER :: j, Nsize, l, zz - INTEGER, DIMENSION(SIZE(Mat, dim = 1)) :: indx !-- CCE R.B. 2008/10/21 - - - - IF (.NOT. initialise) THEN - optim1_plain = .FALSE. - optim2_plain = .TRUE. - optim3_plain = .TRUE. !-- celle là est particulièrement efficace - optim4_plain = .TRUE. - - optim2_plain = .FALSE. !-- ces 2 optimisations là mettre MHD en l'air, et pourtant elles sont meilleures en précusion, ce qui ne saute pas aux yeux au niveau des résidus %%%%%% - optim4_plain = .FALSE. - - optim3_plain = .FALSE. !-- cette optimisation met MHD en l'air uniquement en -O5, pas en -O2 - END IF - - Nsize = SIZE(Mat, dim=1) - mat2 = Mat - -!!$ IF (module_debug) THEN -!!$ DO l = 1, Size(mat, 2) -!!$ DO zz = 1, Size(mat, 1) -!!$ PRINT fmt_prec2, mod_name, "Mat ", 10000 * zz + l, " ", mat(zz, l) -!!$ END DO -!!$ END DO -!!$ END IF - CALL ludcmp(mat2, Nsize, indx, d) !-- indx OUT - -!!$ IF (module_debug) THEN -!!$ DO l = 1, Size(mat2, 2) -!!$ DO zz = 1, Size(mat2, 1) -!!$ PRINT fmt_prec2, mod_name, "mat2 ", 10000 * zz + l, " ", mat2(zz, l) -!!$ END DO -!!$ END DO -!!$ END IF - - DO j = 1, Nsize - col = 0.0 - col(j) = 1.0 - CALL luksb(mat2, Nsize, indx, col) !-- col IN OUT; indx IN - Mat1(:, j) = col(: ) - END DO - -!!$ IF (module_debug) THEN -!!$ DO l = 1, Size(mat1, 2) -!!$ DO zz = 1, Size(mat1, 1) -!!$ PRINT fmt_prec2, mod_name, "mat1 ", 10000 * zz + l, " ", mat1(zz, l) -!!$ END DO -!!$ END DO -!!$ END IF - - CONTAINS - SUBROUTINE ludcmp(mat3, Nsize, indx, d) - CHARACTER(LEN = *), PARAMETER :: mod_name = "ludcmp" - - INTEGER, INTENT(IN) :: Nsize - REAL(DP), DIMENSION(Nsize, Nsize ), INTENT(INOUT) :: mat3 !-- Passer en :,: pose des pbs avec le -O5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - INTEGER, DIMENSION(Nsize ), INTENT(OUT) :: indx !-- Passer en :,: pose des pbs avec le -O5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - REAL(DP), INTENT(OUT) :: d - - REAL(DP), DIMENSION(Nsize) :: vv - INTEGER :: i, j, k, imax, zz - REAL(DP) :: Big, dum, somme, temp - - d = 1.0 - DO i = 1, Nsize - IF (optim1_plain) THEN - Big = MAXVAL(ABS(mat3(i, :))) - ELSE - Big = 0.0 - DO j = 1, Nsize - temp = ABS(mat3(i, j)) - IF (temp > Big) THEN - Big = temp - END IF - END DO - END IF - IF (Big == 0.0) THEN - WRITE( *, *) mod_name, " ERREUR : Matrice singuliere, i==", i - STOP - END IF - vv(i) = 1.0 / Big - END DO - -!!$ IF (module_debug) THEN -!!$ DO zz = 1, Size(vv, 1) -!!$ PRINT fmt_prec2, mod_name, "vv ", zz, " ", vv(zz) -!!$ END DO -!!$ END IF - - DO j = 1, Nsize - - DO i = 1, j -1 - IF (optim2_plain) THEN - mat3(i, j) = mat3(i, j) - SUM(mat3(i, 1: i - 1) * mat3(1: i - 1, j)) - ELSE - somme = mat3(i, j) - DO k = 1, i -1 - somme = somme - mat3(i, k) * mat3(k, j) - END DO - mat3(i, j) = somme - END IF - END DO !-- boucle sur i - -!!$ IF (module_debug) THEN -!!$ DO zz = 1, j - 1 -!!$ PRINT fmt_prec2, mod_name, "mat3/a ", 10000 * zz + j, " ", mat3(zz, j) -!!$ END DO -!!$ END IF - - Big = 0.0 - imax = -1 - DO i = j, Nsize - somme = mat3(i, j) -!!$ IF (module_debug) THEN -!!$ PRINT fmt_prec2, mod_name, "somme/a ", 10000 * i + j, " ", somme -!!$ END IF - DO k = 1, j -1 - somme = somme - mat3(i, k) * mat3(k, j) - ! IF (module_debug) THEN - ! PRINT fmt_prec2, mod_name, "somme/b ", k, " ", somme - ! END IF - END DO -!!$ IF (module_debug) THEN -!!$ PRINT fmt_prec2, mod_name, "somme ", 10000 * i + j, " ", somme -!!$ END IF - mat3(i, j) = somme - dum = vv(i) * ABS(somme) - IF (dum >= Big) THEN - Big = dum - imax = i - END IF - END DO !-- boucle sur i -!!$ IF (module_debug) THEN -!!$ DO zz = j, Nsize -!!$ PRINT fmt_prec2, mod_name, "mat3/b ", 10000 * zz + j, " ", mat3(zz, j) -!!$ END DO -!!$ END IF - -!!$ IF (imax < 0) THEN -!!$ PRINT *, mod_name, " :: ERREUR : imax non initialise" -!!$ stop -!!$ END IF - IF (j /= imax) THEN - DO k = 1, Nsize - dum = mat3(imax, k) - mat3(imax, k) = mat3(j, k) - mat3(j, k) = dum - END DO !-- boucle sur k - d = - d - vv(imax ) = vv(j) - END IF - -!!$ IF (module_debug) THEN -!!$ DO zz = 1, Nsize -!!$ PRINT fmt_prec2, mod_name, "mat3/c ", 10000 * zz + j, " ", mat3(zz, j) -!!$ END DO -!!$ END IF - - indx(j) = imax - - IF (ABS(mat3(j, j)) <= 1.0e-20) THEN - mat3(j, j) = SIGN(1.0e-20_dp, mat3(j, j)) !-- CCE 2007/04/24 !-- CCE 2008/12/17 - END IF - - IF (j /= Nsize) THEN - - DO i = j + 1, Nsize - mat3(i, j) = mat3(i, j) / mat3(j, j) - END DO !-- boucle sur i - END IF - -!!$ IF (module_debug) THEN -!!$ DO zz = j + 1, Nsize -!!$ PRINT fmt_prec2, mod_name, "mat3/d ", 10000 * zz + j, " ", mat3(zz, j) -!!$ END DO -!!$ END IF - - END DO !-- boucle sur j - - END SUBROUTINE ludcmp - - - SUBROUTINE luksb(mat2, Nsize, indx, col) - CHARACTER(LEN = *), PARAMETER :: mod_name = "luksb" - - INTEGER, INTENT(IN) :: Nsize - REAL(DP), DIMENSION(Nsize, Nsize), INTENT(IN) :: mat2 !-- Passer en :,: pose des pbs avec le -O5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - INTEGER, DIMENSION(Nsize), INTENT(IN) :: indx !-- Passer en :,: pose des pbs avec le -O5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - REAL(DP), DIMENSION(Nsize), INTENT(INOUT) :: col !-- Passer en :,: pose des pbs avec le -O5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - INTEGER :: i, ii, ip, j - REAL(DP) :: somme - - ii = 1 - DO i = 1, Nsize - ip = indx(i) - IF (ip <= 0 .OR. ip > SIZE(col)) THEN - PRINT *, mod_name, " ERREUR : indx(", i, ") invalide", ip - STOP - END IF - somme = col(ip) - col(ip) = col(i) - IF (ii > 0) THEN - IF (optim3_plain) THEN - somme = somme - SUM(mat2(i, ii: i -1) * col(ii: i -1)) - ELSE - DO j = ii, i -1 - somme = somme - mat2(i, j) * col(j) - END DO - END IF - ELSE - IF (somme == 0.0) THEN - ii = i - END IF - END IF - - col(i) = somme - END DO - - DO i = Nsize, 1, -1 - IF (optim4_plain) THEN - col(i) = (col(i) - SUM(mat2(i, i + 1: Nsize) * col(i + 1: Nsize))) / mat2(i, i) - ELSE - somme = col(i) - DO j = i + 1, Nsize - somme = somme - mat2(i, j) * col(j) - END DO - col(i) = somme / mat2(i, i) - END IF - END DO - END SUBROUTINE luksb - - END FUNCTION Inverse -END MODULE algebra diff --git a/Src1D/test/algebra.mod b/Src1D/test/algebra.mod deleted file mode 100644 index 0cee5d17cb9185c7fafb961744c33a072e77d6ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2364 zcmc&#-D(q25T3Ky{;i6kg<8a)Ku`lhnzR+$3o%=>)FYc8vS|gqXj3qPN(coX!Dr~L z7ruv&(Hrl*^%4B${IqAcYQlJ-pO@{9 z0i8u3yf|;WeG!~nfDQQY0<}q5why9S65UJWtB981FSo)z@%u6-7HA$ihH?VSbJ!

x%tnC zb8fzTsx#uuozBgBMx1l=xp#Hk}E4G3iIswu=>qIE``aUK_R(|LI)3dH(lh4q*P@ZJNQF%C`+pxYuE6`); z$H919vESI6aD0b0pf8}^Ui3^RveQ;+4?uJbFH5ugFb$ppY$%AR)9uSv{jeK{QfHoJ z!3_tz0dlF#O$U6L1-BgVGz&g5;2MaW0o*p7G$UL+#dXZeC&0PusnLE5ju_wlwBp}g{JLOb0=vZn9F(r@Ctb4LE!$ndkXT8iF=CnqIcVac z7ZZ;hIe5TC<57fXH_E4W;Nw%}<)dXQ|6Kg|BFo#1@QCwKum9+=W0$U8 zzIOTjqpK&&uG&i4$;w>4y1e`#{SQHCrwK+<*ya^SZjUh}-^Z_t#J>m9cz@m_Vf9t0K%v8dMJfr5@Gi94F&p^yspR z3g(WS-G|YmjusU-Lrk=bHU;AX>Hher9Z^C29__aSA=Qlvl7SoK--mP&GD6tUGyd=? zl|x}r8|kCOo<760;~%i`DeVg1VdA(CAA=y}gcJ=YQNe@`dMVBe(+F+$E12~m%-G?` zxTI*>jJ{1~*rfXB)_0KS=8C<282L$}kU3$0bt!dIEX-*rX`P~|5iY~x1Fy-t+X>;( ze+3pgYht?@=WX3A+thbMEP}?mKBK}6q*>>RC>XLr>;13|4A4zj%l)-0uFpaQ zxDu8@ab?rKxavK#KM01a&O?T)=)z|!T<_znymyAUPU7`LaBb+t)PqW2eo;jEc?<4} zOh66xRkDJl{vYiz2@4&1<+1r@XL_)Sb6u8dOBLw_Kp%q4Iu7@gW#Zw7b<@lXL_eBJ zXJ0*VuwKM}3qPg^Qc=FqxSjRvN;6`H2%jGibk(PneuZ{45}n7tdn{}I;vxrOe~0l} zMU9Qqbk1mFW(0KXFrM+UMfCcS$wtcU!5ZOovp^FhPTAyJnt z4;x0XJZ!o8j_Cp>#T%oKUzu4iNHLmfbn5kiqe`red!x!+J*hTyWtH&E*PN?W+sV9} zhCIBT+k)8{7__CGY>J^w1=<4ihPDhY($q<}co9g0wkLkRkq)9n2$5A!j1d?@L8g#}L+EL5`USSh`cw-WvFPN*AqZ(~@p0pMv?O zG5PXdB0&Cy_7E7qLEv5FOc~2}e;CBKu|}=?ZUHrdao{sZnGrow`uuwjA{QZ=joxpF zf?N|fJFYUO+(s#@aX-$gUjYF8^4xSAy^Y(A8IWraAb9Ydz=@y3V3KG@H&_DkijbTO df|ff1+Be|MA!nBXFAQj$@!uh4{f1(R`xAKUYrg;h diff --git a/Src1D/test/aretes.f90 b/Src1D/test/aretes.f90 deleted file mode 100755 index 3802020..0000000 --- a/Src1D/test/aretes.f90 +++ /dev/null @@ -1,108 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE arete_class - USE PRECISION - IMPLICIT NONE - TYPE, PUBLIC:: arete - INTEGER:: nsommets, itype, nvertex! nbre de dofs, type element: 1-> P1 - ! 2-> B2 - !3->P2 - ! nombre de sommet dans cet element arete - LOGICAL:: bord - INTEGER:: jt1=-1, jt2 =-1 ! les deux elements de par et d'autre de l'arete. - INTEGER, DIMENSION(:,:), POINTER :: nu =>Null() ! nu( indice des elements, indice des voisins): on cherche a connaitre le numero local des - ! points communs (puisque le maillage est confome) aux deux elements sur cette face dans chacun des elements jt1 et jt2 - REAL(dp), DIMENSION(:,:), POINTER :: coor=>Null() ! il s'agit des coordonnees physique des dofs (communs) sur la face (commune) - REAL(dp) :: volume=0 ! - REAL(dp) :: jump_flag=1.0 !(between 0 and 1 which gives the weight of the edge term - ! for this one check if there is a discontinuity around and take the maximum value) - REAL(dp), DIMENSION(:), POINTER :: n =>Null() ! normales exterieures - INTEGER :: log ! logique -!!!! quadrature de surface ! - REAL(dp), DIMENSION(:,:),POINTER :: quad =>Null() ! point de quadrature - REAL(dp), DIMENSION(:),POINTER :: weight=>Null() ! poids - INTEGER :: nquad ! nbre de points de quadrature -!!! quadrature bord (dimension -1) - REAL(dp), DIMENSION(:,:),POINTER :: quad_1 =>Null() ! point de quadrature - REAL(dp), DIMENSION(:),POINTER :: weight_1=>Null() ! poids - INTEGER :: nquad_1 ! nbre de points de quadrature -!!! - CONTAINS - PROCEDURE, PUBLIC:: aire=>aire_arete - PROCEDURE, PUBLIC:: quadrature=>quadrature_arete - PROCEDURE, PUBLIC:: normale=>normale_arete - !FINAL:: clean_arete - - END TYPE arete - - -CONTAINS - - REAL(dp) FUNCTION aire_arete(e) - CLASS(arete), INTENT(in):: e - REAL(dp), DIMENSION(2):: a - a= e%coor(:,2)-e%coor(:,1) - - aire_arete=SQRT(a(1)**2+ a(2)**2 ) - END FUNCTION aire_arete - - FUNCTION normale_arete(e) RESULT(n) - CLASS(arete), INTENT(in)::e - REAL(dp), DIMENSION(2):: n - INTEGER:: l, k1, k2 - INTEGER, DIMENSION(3), PARAMETER:: ip1=(/2,3,1/) - - n(1)=e%coor(2,2)-e%coor(2,1) - n(2)=e%coor(1,1)-e%coor(1,2) - - END FUNCTION normale_arete - - - - SUBROUTINE quadrature_arete(e) - CLASS(arete), INTENT(inout):: e - REAL(dp):: w,zo,xo,s - INTEGER:: nquad - - !Gaussia formula, exact for polynomials of degree 5 - PRINT*, "quadrature_arete" - STOP - - e%nquad=3 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - s=SQRT(0.6d0) - e%quad(1,1)=0.5d0*(1.0d0 - s) - e%quad(2,1)=0.5d0*(1.0d0 + s) - e%weight(1) = 5.0d0/18.0d0 - e%quad(1,2)=0.5d0*(1.0d0 + s) - e%quad(2,2)=0.5d0*(1.0d0 - s) - e%weight(2) = 5.0d0/18.0d0 - e%quad(1,3)=0.5d0 - e%quad(2,3)=0.5d0 - e%weight(3)=8.0d0/18.0d0 - - - - END SUBROUTINE quadrature_arete - - SUBROUTINE clean_arete(e) - TYPE(arete):: e - IF (ASSOCIATED(e%nu)) NULLIFY(e%nu) - IF (ASSOCIATED(e%coor)) NULLIFY(e%coor) - IF (ASSOCIATED(e%quad)) NULLIFY(e%quad) - IF (ASSOCIATED(e%weight)) NULLIFY(e%weight) - END SUBROUTINE clean_arete -END MODULE arete_class diff --git a/Src1D/test/bin1D/main.out b/Src1D/test/bin1D/main.out deleted file mode 100755 index 74c35d17edbe331a6091a737d521e69d7c8a9831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896688 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
;!f){1hwn)#wF!H#O<04Y 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

4u2kgi`X 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 z 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

YHccrSfM3jK&`*UpJ-Jf!tGe zUOe$_9mBlD*dsA-@d>$9nTz_l5@p|7^|dneiL4mcgoSx z(jscan5cdy{m;#*U;7*5i%++aKwE-sOGLwl^sq zv3)9VX;I6U9!>V&e!j9s{gF-A1hvS~X!qdTHqRZ^(N{`89p7ZFMf{EfCN?Kp4$s@T zo%eRP4$~Yii7gguUmbu54CN&;-X!R0Sdq$t#*E$sZvhGvp zn+dnhO}|mDM7{-GHx_>Fklf+kUAypvOZ(?H7?8Ze?M&3<%TFxNHcM z&Wn7RXsUlZm_vJ8l3#n%J{F-x!b;KBv7Gh>U23f@^+=SfdBRb9JJ}#}*Vi^5cfRg^ z|Hdi5l)2v$zgGC#=gXnb1wIe`bn;`qkIPLP=a^o&T+N-T9!56C*Nmr{SgKE{M`x*F z`rI`2_y#Gzqp^aM7+W~T2>vR@T6Q~Fu-n0Av3Zo=2qxr~|0@}+{Y#sDp!A>kbB8Kcgb&Lx_(-0_7z>~?fP(n+l#a6-a!-Js?>sMkF&3c zHC=Ss&UAVLkB^y{5T%JfKOv;UG5`W8Pf+qg!lC=Tfa-5C5QY@Rz zUtY;dd{?t@O?$!Q8Ep>)6u8IV*IU_n5~gR()3&?I$vy`ICoNZoD9N^Zw{pTk1UJ@zI+T z`)Tx}TDfBn(-tsjj~ zq_R+->CunH^qHRYW6}RuJ^sgH{+XWq$71<0J>?gR#p*eJv3UGr^&J0L ztUpXo{fWi;$Mn>{SggNHPyLO>`p@*#|5!YKn4a?|7SBJX=lqMs^Oxy4e`8aRbXt2a zWqmHs&ws36FXi-kJU{<6@sj^Mo}d4kcq#vieK`L$@lyHmcz*ux1BBm8x%`!QIR7>A z((zN`;r!RcOUGY{hw~rPPn7GA5)bFUCSIz4Jf5HbXg^V|zdW9w{~CR%{wwz3{MYD9 z=Z|6^&VP)Lm(M>%AI^VGymbEZcz*t4`f;4r`n{BBl}c(qWPQ2);qlg5=`*SQ;_-=E z{xhllQ}ng+FSnmOUc3C5)cz{=waQ;^zZLsh$B#+vzY?!?{F!w9P~x@fk9_@6;$xf*V7FCIi|3`HGT=Ef{Guxw(ty>t#i(ijXAD2`p;O29odATofw`#nd zGo!;zm&va6)`m9y7IJj&ZHFFZb|xlxH+XF4XxeN>5R`<%3x^LF?IqPuyk^TTR&->Zxsr2N6vwtOVYT!Dtgq3lijNZ)3|)`zJkaeh6r*18_c{dwhjrFA|3*`LzAA5_ZcXMaj_Kk&0Z^|L?qb9^fG zdMw``@&3xs@u}4Dv7h5pVtn=I_>>r*=GRm0`)hf8PPyJ{-Ji?jdp!Q<_|(twDIC8^ zl-pmW{%G}Qe~wS-&MztDlfm(+{}0Eb>bU9~kNP%nkzYQyi_G`E`Ieya7g?EFdsl9? zxXAif$^E(Vs|2=pO!j^UFDJ0ToIXjt_9U>zEehmxT$I30`qw>FVsrv)@Up_0;$0Hh zpEsUi+vU>oD-Suaewz*3H{&0G8A1?IPH zh|!}B7udpx7yGwPzrgBG?P4`+&;_=9^~L*B+h1UH%g=hd!s7z_HfMg3i@VsiDx?=eXbqdD4wZ$pLjE^N<6cSUi@xH1;fO(a>|| z&=zNz`{Nu{`cyc}dhc!1@ApqPqQIyIzF4R<1`yS@Z*pN<4&_bOAj2_ruAty$N1>-_qM0m z$8Y{ecd8)1edYP{FP>ueUOaiee8nktt>nIu7YCkVal5Jf0#qa#QlPv3(x;rlPJjr@Ix_JJb>q+)$diBor3!P-Ur#J9e z_4EX@59(68#=#TJ`1grf?#(#ChV9EeWOG;GFFV(12|K|mT`n?pTmBR5L+vA{{(N+t zRaunnwqxvZHn`oAIh&>*XWt&cg3zwVS+*|s8+>NR+2=vE&czov&K!^0I30U(jMdya zFZkxcW6Yz%vn;u1A7lO54OLi=W9+?ZV#%v+$5_Lvv+H�(7o-g$utv%I;P%oBim- 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 diff --git a/Src1D/test/don b/Src1D/test/don deleted file mode 100644 index 3e1abae..0000000 --- a/Src1D/test/don +++ /dev/null @@ -1,13 +0,0 @@ -1000 nt -3 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 -4 5 ordre 3: # of iteration for DEC -4 scheme: 1=supg, 2=psi, 3=mix, 4: galerkin+jump, 5: psi+jump 6 blend+jump 7: psi+galerkin2?? -1. alpha_jump: parameter used in Burman stabilization term -0.0 alpha_jump: parameter used in Burman stabilization term -0.1 cfl -1000 ktmax -0.15 tmax -100 ifre -2 test case Euler: 0 - cosine 1- Wave Packet 2- Gaussian - - \ No newline at end of file diff --git a/Src1D/test/don~ b/Src1D/test/don~ deleted file mode 100755 index 3e1abae..0000000 --- a/Src1D/test/don~ +++ /dev/null @@ -1,13 +0,0 @@ -1000 nt -3 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 -4 5 ordre 3: # of iteration for DEC -4 scheme: 1=supg, 2=psi, 3=mix, 4: galerkin+jump, 5: psi+jump 6 blend+jump 7: psi+galerkin2?? -1. alpha_jump: parameter used in Burman stabilization term -0.0 alpha_jump: parameter used in Burman stabilization term -0.1 cfl -1000 ktmax -0.15 tmax -100 ifre -2 test case Euler: 0 - cosine 1- Wave Packet 2- Gaussian - - \ No newline at end of file diff --git a/Src1D/test/element_class.mod b/Src1D/test/element_class.mod deleted file mode 100644 index 4a520c4505f2b5bc386d5ca765492314cae29dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41795 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 Kn!-Yi*8c$gY2a7@ diff --git a/Src1D/test/elements_1D.f90 b/Src1D/test/elements_1D.f90 deleted file mode 100755 index 8a4509e..0000000 --- a/Src1D/test/elements_1D.f90 +++ /dev/null @@ -1,695 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE element_class - ! In this module are listed all the tools linked to the basis functions and quadrature formulas - ! Structure of the module: - ! ELEMENT CLASS - ! - aire: area of the element - ! - normale: normal of the element - ! - base: basis function -- here we do have Lagrangian and Bernstein polynomials - ! - eval_function: evaluation of the solution via basis functions SUM(base(:)*(u(:)%u(l)) - ! - eval_der: evaluation of the derivative SUM( (u(:)%u(l) *grad(1,:)) - ! - eval_der2: evaluation of the second derivative SUM( (u(:)%u(l) *grad2(1,:)) - ! - der_sec: alternative to eval_der2 - ! - gradient: corresponds to the gradient of the basis function - ! - gradient2: corresponds to the second order gradient of the basis function - ! - quadrature: collects all the points and weights for each typology of element - ! - base_ref: computes the values of the basis functions at the physical dofs - ! - bary: defines the barycentric coordinates of the points - ! - clean: cleans the memory of the features defined within the ELEMENT - - USE algebra - USE PRECISION - USE variable_def - USE overloading - IMPLICIT NONE - - - TYPE, PUBLIC:: element - INTEGER:: type_flux=5 - INTEGER:: diag=-1 - INTEGER:: nsommets, itype, nvertex ! nbre de dofs, type element: - !1->P1 - !2->B2 - !3->P2 - !4->P3 - !5->B2 - REAL(dp), DIMENSION(:), POINTER :: coor =>NULL() ! - ! *-----*-----* for quadratic, *---*---*---* for cubic elements - ! 1 3 2 1 3 4 2 - REAL(dp), DIMENSION(:,:), POINTER:: x=> NULL() - INTEGER, DIMENSION(:), POINTER :: nu =>NULL() ! local connectivity table, see above for location - ! For Bezier, this corresponds to the Greville points - REAL(dp) :: volume =0.0_dp ! volume - REAL(dp), DIMENSION(:), POINTER :: n =>NULL() ! external normals - INTEGER :: log ! logic element : this for boundary conditions, if needed -!!!! quadrature de surface - REAL(dp), DIMENSION(:,:),POINTER :: quad =>NULL() ! point de quadrature - REAL(dp), DIMENSION(:) ,POINTER :: weight=>NULL() ! poids - INTEGER :: nquad=0 ! nbre de points de quadrature - REAL(dp),DIMENSION(:,:),POINTER:: base0=>NULL(),base1=>NULL() - INTEGER, DIMENSION(:), POINTER :: dof2ind - CONTAINS - PRIVATE - PROCEDURE, PUBLIC:: aire=>aire_element - PROCEDURE, PUBLIC:: gradient=>gradient_element - PROCEDURE, PUBLIC:: gradient2=>gradient2_element - PROCEDURE, PUBLIC:: average => average_element - PROCEDURE, PUBLIC:: base=>base_element - PROCEDURE, PUBLIC:: normale=>normale_element - PROCEDURE, PUBLIC:: quadrature=>quadrature_element - PROCEDURE, PUBLIC:: base_ref=>base_ref_element - PROCEDURE, PUBLIC:: eval_func=>eval_func_element - PROCEDURE, PUBLIC:: eval_der=>eval_der_element - PROCEDURE, PUBLIC:: eval_der2=>eval_der2_element - PROCEDURE, PUBLIC:: der_sec=>der_sec_element - FINAL:: clean - END TYPE element - -CONTAINS - - REAL(dp) FUNCTION aire_element(e) ! area of a element - CLASS(element), INTENT(in):: e - REAL(dp), DIMENSION(1):: a,b - a= e%coor(2)-e%coor(1) - aire_element=ABS ( a(1)) - END FUNCTION aire_element - - FUNCTION normale_element(e) RESULT(n) ! inward normals - CLASS(element), INTENT(in)::e - REAL(dp), DIMENSION(2):: n - INTEGER:: l - DO l=1,2 - n(1)= 1.0_dp ! at e%nu(1), i.e. x_{i+1} - n(2)=-1.0_dp ! at e%nu(2), i.e. x_{i} - ENDDO - END FUNCTION normale_element - - REAL(dp) FUNCTION base_element(e,k,x) ! basis functions - CHARACTER(Len=*), PARAMETER :: mod_name="base_element" - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! index of basis function - REAL(dp), DIMENSION(2), INTENT(in):: x ! barycentric coordinate - - SELECT CASE(e%itype) - CASE(1) ! P1 - SELECT CASE(k) - CASE(2) - base_element=x(1) - CASE(1) - base_element=x(2) - CASE default - PRINT*, mod_name - - PRINT*, "P1, numero base ", k - STOP - END SELECT - - CASE(2) ! B2 Bezier - SELECT CASE(k) - CASE(1) - base_element=x(2)*x(2)!(1.0-x(1))*(1.0-x(1)) - CASE(2) - base_element=x(1)*x(1) - CASE(3) - base_element=2.0_dp*x(1)*x(2)!(1.0-x(1)) - CASE default - PRINT*, mod_name - - PRINT*, "B2, numero base ", k - STOP - END SELECT - - CASE(3)! P2 - SELECT CASE(k) - CASE(1) - base_element=x(2)*(x(2)-x(1) )!(1.0-x(1))*(1.00-2.0*x(1)) - CASE(2) - base_element=x(1)*(x(1)-x(2) )!x(1)*(2.0*x(1)-1.00) - CASE(3) - base_element=4._dp*x(1)*x(2) !4.00*x(1)*(1.00-x(1)) - CASE default - PRINT*, mod_name - - PRINT*, "P2, numero base ", k - STOP - END SELECT - - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - base_element = -0.5_dp*(3._dp*x(1)-1._dp)*(3.*x(1)-2._dp)*(x(1)-1._dp) - CASE(2) - base_element = 0.5_dp*x(1)*(3._dp*x(1)-1._dp)*(3._dp*x(1)-2._dp) - CASE(3) - base_element = 1.5_dp*x(1)*(3._dp*x(1)-2._dp)*(3._dp*x(1)-3._dp) - CASE(4) - base_element = -1.5_dp*x(1)*(3._dp*x(1)-1._dp)*(3._dp*x(1)-3._dp) - CASE default - PRINT*, mod_name - - PRINT*, "P3, numero base ", k - STOP - END SELECT - - CASE(5) ! B3 - SELECT CASE(k) - CASE(1) - base_element =x(2)**3 - CASE(2) - base_element = x(1)**3 - CASE(3) - base_element = 3.0_dp*x(1)*x(2)*x(2) - CASE(4) - base_element = 3.0_dp*x(1)*x(1)*x(2) - CASE default - PRINT*, mod_name - - PRINT*, "P3, numero base ", k - STOP - END SELECT - CASE(6) ! B4 - SELECT CASE(k) - CASE(1) - base_element = x(2)**4! (1.-x(1))**3 - CASE(2) - base_element = x(1)**4 - CASE(3) - base_element = 4.0_dp*x(1)*x(2)*x(2)*x(2)!3.*x(1)*( (1-x(1))**2) - CASE(4) - base_element = 6.0_dp*x(1)*x(1)*x(2)*x(2)!3.*x(1)*x(1)*((1-x(1))) - CASE(5) - base_element = 4.0_dp*x(1)*x(1)*x(1)*x(2)!3.*x(1)*x(1)*((1-x(1))) - CASE default - PRINT*, "B4, numero base ", k - STOP - END SELECT - CASE default - PRINT*, mod_name - PRINT*, "Type non existant", e%itype - STOP - END SELECT - - END FUNCTION base_element - - TYPE(PVar) FUNCTION eval_func_element(e, u, y) - CLASS(element), INTENT(in):: e - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(2) :: x - REAL(dp), DIMENSION(e%nsommets) :: alpha, beta, base - TYPE(PVar) :: a,b,c, aa, cc - INTEGER :: l - LOGICAL :: flag - - DO l=1, e%nsommets - base(l)=e%base(l,y) - ENDDO - DO l=1,n_vars - eval_func_element%u(l)=u(1)%u(l)+SUM(base(:)*(u(:)%u(l)-u(1)%u(l))) - END DO - - - END FUNCTION eval_func_element - - TYPE(PVar) FUNCTION eval_der_element(e,u,y) - CLASS(element), INTENT(in)::e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(1,e%nsommets):: grad - INTEGER:: l - - DO l=1, e%nsommets - grad(:,l)=gradient_element(e,l, y) - ENDDO - DO l=1,n_vars - eval_der_element%u(l)=SUM( ( u(:)%u(l)-u(1)%u(l) ) *grad(1,:) ) - END DO - - END FUNCTION eval_der_element - - TYPE(PVar) FUNCTION eval_der2_element(e,u,y) - CLASS(element), INTENT(in)::e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(1,e%nsommets):: grad2 - INTEGER:: l - - DO l=1, e%nsommets - grad2(:,l)=e%gradient2(l, y) - ENDDO - DO l=1,n_vars - eval_der2_element%u(l)=SUM( ( u(:)%u(l)-u(1)%u(l) ) *grad2(1,:) ) - END DO - END FUNCTION eval_der2_element - - FUNCTION der_sec_element(e,u) RESULT(coeff) - CLASS(element), INTENT(in)::e - REAL(dp),DIMENSION(e%nsommets), INTENT(in)::u - REAL(dp),DIMENSION(MAX(1,e%nsommets-2)):: coeff - SELECT CASE(e%itype) - CASE(1)!P1 - coeff=0._dp !(u(2)-u(1))/e%volume**2 - CASE(2)!B2 - coeff(1)=(u(2)-2._dp*u(3)+u(1))/e%volume**2 - CASE(5)!B3 - coeff(1)=6._dp*(u(1)-2._dp*u(3)+u(4) )/e%volume**2 - coeff(2)=6._dp*(u(3)-2._dp*u(4)+u(2) )/e%volume**2 - CASE default - PRINT*, 'der_sec, element 1d' - STOP - END SELECT - END FUNCTION der_sec_element - - - FUNCTION gradient_element(e,k,x) RESULT (grad) ! gradient in reference element - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! numero de la fonction de base - REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques - REAL(dp),DIMENSION(n_dim):: grad - REAL(dp):: fx,fy,fz - - SELECT CASE(e%itype) - CASE(1)! P1 - SELECT CASE(k) - CASE(1) - fx=-1.0_dp - CASE(2) - fx= 1.0_dp - END SELECT - CASE(3) !P2 - SELECT CASE(k) - CASE(1) - fx=-3.0_dp+4.0_dp*x(1) - CASE(2) - fx=4.0_dp*x(1)-1.0_dp - CASE(3) - fx=4.0_dp-8.0_dp*x(1) - END SELECT - CASE(2) ! B2 - SELECT CASE(k) - CASE(1) - fx=-2.0_dp*(1.0_dp-x(1)) - CASE(2) - fx=2.0_dp*x(1) - CASE(3) - fx=2.0_dp-4.0_dp*x(1) - END SELECT - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - fx=-11._dp/2._dp+(-27._dp/2._dp*x(1)+18._dp)*x(1) - CASE(2) - fx=1.0_dp+x(1)*(27._dp/2._dp*x(1)-9._dp) - CASE(3) - fx=9._dp+x(1)*(81._dp/2._dp*x(1)-45._dp) - CASE(4) - fx=-9._dp/2._dp+x(1)*(-81._dp/2._dp*x(1)+36._dp) - END SELECT - CASE(5) - SELECT CASE(k) - CASE(1) - fx=x(1)*( -3.0_dp*x(1)+6.0_dp) -3.0_dp - !fx=-3.0*x(2)*x(2) - CASE(2) - fx=3.0*x(1)*x(1) - !fx=3.0*x(1)*x(1) - CASE(3) - fx=(9.0_dp*x(1)-12.0_dp)*x(1)+3.0_dp - !fx=3.0*x(2)*( x(2)-2.*x(1) ) - CASE(4) - fx= (-9.0_dp*x(1)+6.0_dp)*x(1) - !fx=6*x(1)*x(2)-3*x(1)*x(1) - END SELECT - CASE(6) - SELECT CASE(k) - CASE(1) - !fx=-4.0+12.0*x(1)-12.0*x(1)*x(1)+4.0*x(1)*x(1)*x(1) - fx=-4.0_dp*x(2)*x(2)*x(2) - CASE(2) - !fx=4.0*x(1)*x(1)*x(1) - fx= 4.0_dp* x(1)*x(1)*x(1) - CASE(3) - !fx=4.0-24.0*x(1)+36.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) - fx= 4.0_dp*( x(2)-3.0_dp*x(1) )*x(2)*x(2) - CASE(4) - !fx=12.0*x(1)-36.0*x(1)*x(1)+24.0*x(1)*x(1)*x(1) - fx=12.0_dp * x(1)*x(2) * ( x(2)-x(1) ) - CASE(5) - !fx=12.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) - fx=4.0_dp*( 3._dp*x(2)-x(1) )*x(1)*x(1) - END SELECT - CASE default - PRINT*, "Type non existant", e%itype - STOP - END SELECT - grad=fx/e%volume - END FUNCTION gradient_element - - FUNCTION gradient2_element(e,k,x) RESULT (grad2) ! 2nd derivative in reference element - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! numero de la fonction de base - REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques - REAL(dp),DIMENSION(n_dim):: grad2 - REAL(dp):: fxx - - SELECT CASE(e%itype) - CASE(1)! P1 - SELECT CASE(k) - CASE(1) - fxx=0.0_dp - CASE(2) - fxx=0.0_dp - END SELECT - CASE(3) !P2 - SELECT CASE(k) - CASE(1) - fxx=4.0_dp - CASE(2) - fxx=4.0_dp - CASE(3) - fxx=-8.0_dp - END SELECT - CASE(2) ! B2 - SELECT CASE(k) - CASE(1) - fxx=2.0_dp - CASE(2) - fxx=2.0_dp - CASE(3) - fxx=-4.0_dp - END SELECT - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - fxx=-27._dp*x(1) - CASE(2) - fxx=27._dp*x(1) - CASE(3) - fxx= 81._dp*x(1) - CASE(4) - fxx=-81._dp*x(1) - END SELECT - CASE(5) - SELECT CASE(k) - CASE(1) - fxx=6.0_dp*x(2) - CASE(2) - fxx=6.0_dp*x(1) - CASE(3) - fxx= 6.0_dp*x(1)-12.0_dp*x(2) - CASE(4) - !fxx=-18.0*x(1)+6.0 - fxx=6.0_dp*x(2)-12.0_dp*x(1) - END SELECT - - CASE(6) - SELECT CASE(k) - CASE(1) - fxx=12.0_dp-24.0_dp*x(1)+12.0_dp*x(1)*x(1) - CASE(2) - fxx=12.0_dp*x(1)*x(1) - CASE(3) - fxx=-24.0_dp+72.0_dp*x(1)-48.0_dp*x(1)*x(1) - CASE(4) - fxx=12.0_dp-72.0_dp*x(1)+72.0_dp*x(1)*x(1) - CASE(5) - fxx=24.0_dp*x(1)-48.0_dp*x(1)*x(1) - END SELECT - CASE default - PRINT*, "Type non existant", e%itype - STOP - END SELECT - grad2=fxx/(e%volume**2) - END FUNCTION gradient2_element - - FUNCTION average_element(e,u) RESULT(u_bar) - CLASS(element), INTENT(in):: e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - TYPE(PVar) :: u_bar, u_loc - INTEGER:: i,iq - u_bar=0._dp - - DO iq = 1, e%nquad - - u_loc =e%eval_func(u ,e%quad(:,iq)) - - u_bar = u_bar + (u_loc)*e%weight(iq) - - ENDDO ! iq - END FUNCTION average_element - - - SUBROUTINE quadrature_element(e) ! quadrature points and weights - ! for triangle and edges - CLASS(element), INTENT(inout):: e - REAL(dp):: w,xo,yo,zo,s - INTEGER:: nquad, nquad_1 - ! degree 5 - REAL(dp), PARAMETER:: s1_3=SQRT(0.6_dp) - REAL(dp), PARAMETER:: s2_3=0.5_dp*(1.0_dp - s1_3) - REAL(dp), PARAMETER:: s3_3=0.5_dp*(1.0_dp + s1_3) - REAL(dp), PARAMETER:: weight1_3=5._dp/18._dp - REAL(dp), PARAMETER:: weight2_3=8._dp/18._dp - ! degre 7 - REAL(dp), PARAMETER:: s1_7=(18._dp-SQRT(30._dp))/72._dp - REAL(dp), PARAMETER:: s2_7=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp - REAL(dp), PARAMETER:: s3_7=0.50_dp*(1.00_dp-s2_7) - REAL(dp), PARAMETER:: s4_7=0.50_dp*(1.00_dp+s2_7) - REAL(dp), PARAMETER:: s5_7=(18._dp+ SQRT(30._dp))/72._dp - REAL(dp), PARAMETER:: s6_7=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp - REAL(dp), PARAMETER:: s7_7=0.50_dp*(1.00_dp-s6_7) - REAL(dp), PARAMETER:: s8_7=0.50_dp*(1.00_dp+s6_7) - ! degree 9 - REAL(dp),PARAMETER:: s1_9=1.0_dp/3._dp*SQRT(5._dp-2._dp*SQRT(10._dp/7._dp)) - REAL(dp),PARAMETER:: s2_9=0.50_dp*(1.00_dp - s1_9) - REAL(dp),PARAMETER:: s3_9=0.50_dp*(1.00_dp + s1_9) - REAL(dp),PARAMETER:: weight1_9=(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - - - REAL(dp),PARAMETER:: s5_9=1.0_dp/3._dp*SQRT(5._dp+2._dp*SQRT(10._dp/7._dp)) - REAL(dp),PARAMETER:: s6_9=0.50_dp*(1.00_dp - s5_9) - REAL(dp),PARAMETER:: s7_9=0.50_dp*(1.00_dp + s5_9) - REAL(dp),PARAMETER:: weight2_9=(322._dp-13._dp*SQRT(70.0_dp))/1800.0_dp - REAL(dp),PARAMETER:: s4_9=1._dp/3._dp*SQRT(5._dp+2._dp*SQRT(10.0_dp/7.0_dp)) - - SELECT CASE(e%itype) - CASE(1) - e%nquad=2 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - ! quadrature for edges (3 point gauss formula) - - - - - e%quad(1,1) = 1.0_dp - e%quad(2,1) = 0._dp - e%weight(1) = 0.5_dp - - e%quad(1,2) = 0.0_dp - e%quad(2,2) = 1.0_dp - e%weight(2) = 0.5_dp - - - CASE(2,3)!! exact for degree 5 - e%nquad=3 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - - - ! s=sqrt(0.6_dp) !0.7745966692414834_dp !SQRT(0.6d0) - e%quad(1,1)=s2_3 !0.5_dp*(1.0_dp - s) - e%quad(2,1)=s3_3 !0.5_dp*(1.0_dp + s) - e%weight(1) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 - - e%quad(1,2)=s3_3 !0.5d0*(1.0d0 + s) - e%quad(2,2)=s2_3 !0.5d0*(1.0d0 - s) - e%weight(2) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 - - e%quad(1,3)=0.5d0 - e%quad(2,3)=0.5d0 - e%weight(3)= weight2_3 !8._dp/18._dp!0.4444444444444444 ! 8.0d0/18.0d0 - - CASE(4,5) !! exact for degree 7 - e%nquad=4 ! ordre 7 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad) ) - ! s=(18._dp-sqrt(30._dp))/72._dp !0.1739274225687269_dp !(18.- SQRT(30.))/72. !SQRT(30.d0)*(-5.0d0+3.d0*SQRT(30.d0))/360.d0 - e%weight(1:2)=s1_7 - ! s=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp !0.8611363115940526_dp!SQRT(525.d0+70.d0*SQRT(30.d0))/35.d0 - e%quad(1,1)=s3_7! 0.50_dp*(1.00_dp-s) - e%quad(1,2)=s4_7 !0.50_dp*(1.00_dp+s) - e%quad(2,1)=e%quad(1,2) !0.5d0*(1.0d0+s) - e%quad(2,2)=e%quad(1,1) !0.5d0*(1.0d0-s) - - ! s=(18._dp+ SQRT(30._dp))/72._dp !0.3260725774312731_dp !(18.+ SQRT(30.))/72.! SQRT(30.d0)*(5.0d0+3.d0*SQRT(30.d0))/360.d0 - e%weight(3:4)=s5_7 - ! s=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp !0.3399810435848563_dp !SQRT(525.d0-70.d0*SQRT(30.d0))/35.d0 - e%quad(1,3)=s7_7 !0.50_dp*(1.00_dp-s) - e%quad(1,4)=s8_7 !0.50_dp*(1.00_dp+s) - e%quad(2,3)=e%quad(1,4) !0.5d0*(1.0d0+s) - e%quad(2,4)=e%quad(1,3) !0.5d0*(1.0d0-s) - - ! e%quad(2,:)=1.0d0-e%quad(1,:) - - CASE(6) ! exact for degree 9 - - e%nquad=5 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - !s=1.0_dp/3._dp*SQRT(5._dp-2._dp*SQRT(10._dp/7._dp)) - e%quad(1,1)=s2_9 !0.50_dp*(1.00_dp - s) - e%quad(2,1)=s3_9 !0.50_dp*(1.00_dp + s) - e%weight(1) = weight1_9 !(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - e%quad(1,2)=s3_9 !0.5_dp*(1.0_dp + s) - e%quad(2,2)=s2_9 !0.5_dp*(1.0_dp - s) - e%weight(2) = weight1_9 !(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - - ! s=1._dp/3._dp*SQRT(5._dp+2._dp*SQRT(10.0_dp/7.0_dp)) - e%quad(1,3)=s6_9 !0.5_dp*(1.0_dp - s) - e%quad(2,3)=s7_9 !0.5_dp*(1.0_dp + s) - e%weight(3) = weight2_9 !(322.0_dp-13.0_dp*SQRT(70.0_dp))/1800.0_dp - e%quad(1,4)=s7_9 !0.5_dp*(1.0_dp + s) - e%quad(2,4)=s6_9 !0.5_dp*(1.0_dp - s) - e%weight(4) = weight2_9 ! (322.0_dp-13.0_dp*SQRT(70.0_dp))/1800.0_dp - - e%quad(1,5)=0.5_dp - e%quad(2,5)=0.5_dp - e%weight(5)=64.0_dp/225.0_dp - END SELECT - - e%weight = e%weight/SUM(e%weight) - END SUBROUTINE quadrature_element - - - - - SUBROUTINE base_ref_element(e) - ! compute the values of the basis functions at the physical dofs - REAL(dp), PARAMETER:: ut=1./3., det=1.-ut - CLASS(element), INTENT(inout)::e - INTEGER:: l, l_base, l_dof - REAL(dp), DIMENSION(2,4):: x ! barycentric coordinates for B3 - REAL(dp), DIMENSION(2,5):: z ! barycentric coordinates for B4 - REAL(dp), DIMENSION(2,3):: ba - ! ebase0( number of the basis function, point l) - e%base0=0. - SELECT CASE(e%itype) - CASE(1,3,4) ! P1 - - DO l=1,e%nsommets - e%base0(l,l)=1.0 - ENDDO - CASE(2) ! B2 Bezier - ba=0.0 - ba(1,1)=0.0 - ba(1,2)=1.0 - ba(1,3)=0.5 - ba(2,:)=1.0-ba(1,:) - DO l_dof=1,3 - DO l_base=1,3 - e%base0(l_base,l_dof)=base_element(e,l_base,ba(:,l_dof)) - ENDDO - !write(*,11)l_dof,e%base0(:,l_dof) - !11 FORMAT(i2,3(1x,f10.4)) - ENDDO - - - CASE(5) - x=0. - x(1,1)=0.0; - x(1,2)=1.0 - x(1,3)=1.0/3.0 - x(1,4)=2.0/3.0 - x(2,:)=1.0-x(1,:) - DO l_dof=1,4 - DO l_base=1,4 - e%base0(l_base,l_dof)=base_element(e,l_base,x(:,l_dof)) - ENDDO - ENDDO - - CASE(6) - z=0. - z(1,1)=0.0; - z(1,2)=1.0 - z(1,3)=1.0/4.0 - z(1,4)=1.0/2.0 - z(1,5)=0.75 - z(2,:)=1.0-z(1,:) - DO l_dof=1,5 - DO l_base=1,5 - e%base0(l_base,l_dof)=base_element(e,l_base,z(:,l_dof)) - ENDDO - ENDDO - - !10 FORMAT(i2,10(1x,f10.4)) - CASE default - PRINT*, "Element type not yet take into account in base_ref_element", e%itype - STOP - END SELECT - - e%base0 = TRANSPOSE(e%base0) - e%base1=inverse(e%base0) - - - CALL bary_element(e) - - END SUBROUTINE base_ref_element - - SUBROUTINE bary_element(e) - ! defines barycentric coordinates of Lagrange points - CLASS(element), INTENT(inout)::e - ALLOCATE(e%x(2,e%nsommets)) - ALLOCATE(e%dof2ind(e%nsommets)) - e%x(1,1)=0.0 - e%x(1,2)=1.0 - SELECT CASE (e%itype) - CASE(1) - e%dof2ind = (/1, 2/) - CASE(2,3) - e%x(1,3)=0.5 - e%dof2ind = (/1, 3, 2/) - CASE(4,5) - e%x(1,3)=1./3. - e%x(1,4)=2./3. - e%dof2ind = (/1, 3, 4, 2/) - CASE(6) - e%x(1,3)=0.25 - e%x(1,4)=0.5 - e%x(1,5)=0.75 - e%dof2ind = (/1, 3, 4, 5, 2/) - CASE default - PRINT*, "bary_element, cas not implemented" - STOP - END SELECT - e%x(2,:)=1.-e%x(1,:) - END SUBROUTINE bary_element - - - SUBROUTINE clean(e) - TYPE(element), INTENT(inout)::e - IF (ASSOCIATED(e%coor)) NULLIFY(e%coor) - IF (ASSOCIATED(e%n)) NULLIFY(e%nu) - IF (ASSOCIATED(e%n)) NULLIFY(e%n) - IF (ASSOCIATED(e%quad)) NULLIFY(e%quad) - IF (ASSOCIATED(e%weight)) NULLIFY(e%weight) - IF (ASSOCIATED(e%base0)) NULLIFY(e%base0) - IF (ASSOCIATED(e%base1)) NULLIFY(e%base1) - END SUBROUTINE clean - -END MODULE element_class diff --git a/Src1D/test/elements_1D.f90~ b/Src1D/test/elements_1D.f90~ deleted file mode 100755 index c0f76ad..0000000 --- a/Src1D/test/elements_1D.f90~ +++ /dev/null @@ -1,695 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE element_class - ! In this module are listed all the tools linked to the basis functions and quadrature formulas - ! Structure of the module: - ! ELEMENT CLASS - ! - aire: area of the element - ! - normale: normal of the element - ! - base: basis function -- here we do have Lagrangian and Bernstein polynomials - ! - eval_function: evaluation of the solution via basis functions SUM(base(:)*(u(:)%u(l)) - ! - eval_der: evaluation of the derivative SUM( (u(:)%u(l) *grad(1,:)) - ! - eval_der2: evaluation of the second derivative SUM( (u(:)%u(l) *grad2(1,:)) - ! - der_sec: alternative to eval_der2 - ! - gradient: corresponds to the gradient of the basis function - ! - gradient2: corresponds to the second order gradient of the basis function - ! - quadrature: collects all the points and weights for each typology of element - ! - base_ref: computes the values of the basis functions at the physical dofs - ! - bary: defines the barycentric coordinates of the points - ! - clean: cleans the memory of the features defined within the ELEMENT - - USE algebra - USE PRECISION - USE variable_def - USE overloading - IMPLICIT NONE - - - TYPE, PUBLIC:: element - INTEGER:: type_flux=5 - INTEGER:: diag=-1 - INTEGER:: nsommets, itype, nvertex ! nbre de dofs, type element: - !1->P1 - !2->B2 - !3->P2 - !4->P3 - !5->B2 - REAL(dp), DIMENSION(:), POINTER :: coor =>NULL() ! - ! *-----*-----* for quadratic, *---*---*---* for cubic elements - ! 1 3 2 1 3 4 2 - REAL(dp), DIMENSION(:,:), POINTER:: x=> NULL() - INTEGER, DIMENSION(:), POINTER :: nu =>NULL() ! local connectivity table, see above for location - ! For Bezier, this corresponds to the Greville points - REAL(dp) :: volume =0.0_dp ! volume - REAL(dp), DIMENSION(:), POINTER :: n =>NULL() ! external normals - INTEGER :: log ! logic element : this for boundary conditions, if needed -!!!! quadrature de surface - REAL(dp), DIMENSION(:,:),POINTER :: quad =>NULL() ! point de quadrature - REAL(dp), DIMENSION(:) ,POINTER :: weight=>NULL() ! poids - INTEGER :: nquad=0 ! nbre de points de quadrature - REAL(dp),DIMENSION(:,:),POINTER:: base0=>NULL(),base1=>NULL() - INTEGER, DIMENSION(:), POINTER :: dof2ind - CONTAINS - PRIVATE - PROCEDURE, PUBLIC:: aire=>aire_element - PROCEDURE, PUBLIC:: gradient=>gradient_element - PROCEDURE, PUBLIC:: gradient2=>gradient2_element - PROCEDURE, PUBLIC:: average => average_element - PROCEDURE, PUBLIC:: base=>base_element - PROCEDURE, PUBLIC:: normale=>normale_element - PROCEDURE, PUBLIC:: quadrature=>quadrature_element - PROCEDURE, PUBLIC:: base_ref=>base_ref_element - PROCEDURE, PUBLIC:: eval_func=>eval_func_element - PROCEDURE, PUBLIC:: eval_der=>eval_der_element - PROCEDURE, PUBLIC:: eval_der2=>eval_der2_element - PROCEDURE, PUBLIC:: der_sec=>der_sec_element - FINAL:: clean - END TYPE element - -CONTAINS - - REAL(dp) FUNCTION aire_element(e) ! area of a element - CLASS(element), INTENT(in):: e - REAL(dp), DIMENSION(1):: a,b - a= e%coor(2)-e%coor(1) - aire_element=ABS ( a(1)) - END FUNCTION aire_element - - FUNCTION normale_element(e) RESULT(n) ! inward normals - CLASS(element), INTENT(in)::e - REAL(dp), DIMENSION(2):: n - INTEGER:: l - DO l=1,2 - n(1)= 1.0_dp ! at e%nu(1), i.e. x_{i+1} - n(2)=-1.0_dp ! at e%nu(2), i.e. x_{i} - ENDDO - END FUNCTION normale_element - - REAL(dp) FUNCTION base_element(e,k,x) ! basis functions - CHARACTER(Len=*), PARAMETER :: mod_name="base_element" - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! index of basis function - REAL(dp), DIMENSION(2), INTENT(in):: x ! barycentric coordinate - - SELECT CASE(e%itype) - CASE(1) ! P1 - SELECT CASE(k) - CASE(2) - base_element=x(1) - CASE(1) - base_element=x(2) - CASE default - PRINT*, mod_name - - PRINT*, "P1, numero base ", k - STOP - END SELECT - - CASE(2) ! B2 Bezier - SELECT CASE(k) - CASE(1) - base_element=x(2)*x(2)!(1.0-x(1))*(1.0-x(1)) - CASE(2) - base_element=x(1)*x(1) - CASE(3) - base_element=2.0_dp*x(1)*x(2)!(1.0-x(1)) - CASE default - PRINT*, mod_name - - PRINT*, "B2, numero base ", k - STOP - END SELECT - - CASE(3)! P2 - SELECT CASE(k) - CASE(1) - base_element=x(2)*(x(2)-x(1) )!(1.0-x(1))*(1.00-2.0*x(1)) - CASE(2) - base_element=x(1)*(x(1)-x(2) )!x(1)*(2.0*x(1)-1.00) - CASE(3) - base_element=4._dp*x(1)*x(2) !4.00*x(1)*(1.00-x(1)) - CASE default - PRINT*, mod_name - - PRINT*, "P2, numero base ", k - STOP - END SELECT - - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - base_element = -0.5_dp*(3._dp*x(1)-1._dp)*(3.*x(1)-2._dp)*(x(1)-1._dp) - CASE(2) - base_element = 0.5_dp*x(1)*(3._dp*x(1)-1._dp)*(3._dp*x(1)-2._dp) - CASE(3) - base_element = 1.5_dp*x(1)*(3._dp*x(1)-2._dp)*(3._dp*x(1)-3._dp) - CASE(4) - base_element = -1.5_dp*x(1)*(3._dp*x(1)-1._dp)*(3._dp*x(1)-3._dp) - CASE default - PRINT*, mod_name - - PRINT*, "P3, numero base ", k - STOP - END SELECT - - CASE(5) ! B3 - SELECT CASE(k) - CASE(1) - base_element =x(2)**3 - CASE(2) - base_element = x(1)**3 - CASE(3) - base_element = 3.0_dp*x(1)*x(2)*x(2) - CASE(4) - base_element = 3.0_dp*x(1)*x(1)*x(2) - CASE default - PRINT*, mod_name - - PRINT*, "P3, numero base ", k - STOP - END SELECT - CASE(6) ! B4 - SELECT CASE(k) - CASE(1) - base_element = x(2)**4! (1.-x(1))**3 - CASE(2) - base_element = x(1)**4 - CASE(3) - base_element = 4.0_dp*x(1)*x(2)*x(2)*x(2)!3.*x(1)*( (1-x(1))**2) - CASE(4) - base_element = 6.0_dp*x(1)*x(1)*x(2)*x(2)!3.*x(1)*x(1)*((1-x(1))) - CASE(5) - base_element = 4.0_dp*x(1)*x(1)*x(1)*x(2)!3.*x(1)*x(1)*((1-x(1))) - CASE default - PRINT*, "B4, numero base ", k - STOP - END SELECT - CASE default - PRINT*, mod_name - PRINT*, "Type non existant", e%itype - STOP - END SELECT - - END FUNCTION base_element - - TYPE(PVar) FUNCTION eval_func_element(e, u, y) - CLASS(element), INTENT(in):: e - TYPE(PVar), DIMENSION(e%nsommets), INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(2) :: x - REAL(dp), DIMENSION(e%nsommets) :: alpha, beta, base - TYPE(PVar) :: a,b,c, aa, cc - INTEGER :: l - LOGICAL :: flag - - DO l=1, e%nsommets - base(l)=e%base(l,(/y(2),y(1)/)) - ENDDO - DO l=1,n_vars - eval_func_element%u(l)=u(1)%u(l)+SUM(base(:)*(u(:)%u(l)-u(1)%u(l))) - END DO - - - END FUNCTION eval_func_element - - TYPE(PVar) FUNCTION eval_der_element(e,u,y) - CLASS(element), INTENT(in)::e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(1,e%nsommets):: grad - INTEGER:: l - - DO l=1, e%nsommets - grad(:,l)=gradient_element(e,l, y) - ENDDO - DO l=1,n_vars - eval_der_element%u(l)=SUM( ( u(:)%u(l)-u(1)%u(l) ) *grad(1,:) ) - END DO - - END FUNCTION eval_der_element - - TYPE(PVar) FUNCTION eval_der2_element(e,u,y) - CLASS(element), INTENT(in)::e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - REAL(dp), DIMENSION(2), INTENT(in):: y - REAL(dp), DIMENSION(1,e%nsommets):: grad2 - INTEGER:: l - - DO l=1, e%nsommets - grad2(:,l)=e%gradient2(l, y) - ENDDO - DO l=1,n_vars - eval_der2_element%u(l)=SUM( ( u(:)%u(l)-u(1)%u(l) ) *grad2(1,:) ) - END DO - END FUNCTION eval_der2_element - - FUNCTION der_sec_element(e,u) RESULT(coeff) - CLASS(element), INTENT(in)::e - REAL(dp),DIMENSION(e%nsommets), INTENT(in)::u - REAL(dp),DIMENSION(MAX(1,e%nsommets-2)):: coeff - SELECT CASE(e%itype) - CASE(1)!P1 - coeff=0._dp !(u(2)-u(1))/e%volume**2 - CASE(2)!B2 - coeff(1)=(u(2)-2._dp*u(3)+u(1))/e%volume**2 - CASE(5)!B3 - coeff(1)=6._dp*(u(1)-2._dp*u(3)+u(4) )/e%volume**2 - coeff(2)=6._dp*(u(3)-2._dp*u(4)+u(2) )/e%volume**2 - CASE default - PRINT*, 'der_sec, element 1d' - STOP - END SELECT - END FUNCTION der_sec_element - - - FUNCTION gradient_element(e,k,x) RESULT (grad) ! gradient in reference element - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! numero de la fonction de base - REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques - REAL(dp),DIMENSION(n_dim):: grad - REAL(dp):: fx,fy,fz - - SELECT CASE(e%itype) - CASE(1)! P1 - SELECT CASE(k) - CASE(1) - fx=-1.0_dp - CASE(2) - fx= 1.0_dp - END SELECT - CASE(3) !P2 - SELECT CASE(k) - CASE(1) - fx=-3.0_dp+4.0_dp*x(1) - CASE(2) - fx=4.0_dp*x(1)-1.0_dp - CASE(3) - fx=4.0_dp-8.0_dp*x(1) - END SELECT - CASE(2) ! B2 - SELECT CASE(k) - CASE(1) - fx=-2.0_dp*(1.0_dp-x(1)) - CASE(2) - fx=2.0_dp*x(1) - CASE(3) - fx=2.0_dp-4.0_dp*x(1) - END SELECT - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - fx=-11._dp/2._dp+(-27._dp/2._dp*x(1)+18._dp)*x(1) - CASE(2) - fx=1.0_dp+x(1)*(27._dp/2._dp*x(1)-9._dp) - CASE(3) - fx=9._dp+x(1)*(81._dp/2._dp*x(1)-45._dp) - CASE(4) - fx=-9._dp/2._dp+x(1)*(-81._dp/2._dp*x(1)+36._dp) - END SELECT - CASE(5) - SELECT CASE(k) - CASE(1) - fx=x(1)*( -3.0_dp*x(1)+6.0_dp) -3.0_dp - !fx=-3.0*x(2)*x(2) - CASE(2) - fx=3.0*x(1)*x(1) - !fx=3.0*x(1)*x(1) - CASE(3) - fx=(9.0_dp*x(1)-12.0_dp)*x(1)+3.0_dp - !fx=3.0*x(2)*( x(2)-2.*x(1) ) - CASE(4) - fx= (-9.0_dp*x(1)+6.0_dp)*x(1) - !fx=6*x(1)*x(2)-3*x(1)*x(1) - END SELECT - CASE(6) - SELECT CASE(k) - CASE(1) - !fx=-4.0+12.0*x(1)-12.0*x(1)*x(1)+4.0*x(1)*x(1)*x(1) - fx=-4.0_dp*x(2)*x(2)*x(2) - CASE(2) - !fx=4.0*x(1)*x(1)*x(1) - fx= 4.0_dp* x(1)*x(1)*x(1) - CASE(3) - !fx=4.0-24.0*x(1)+36.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) - fx= 4.0_dp*( x(2)-3.0_dp*x(1) )*x(2)*x(2) - CASE(4) - !fx=12.0*x(1)-36.0*x(1)*x(1)+24.0*x(1)*x(1)*x(1) - fx=12.0_dp * x(1)*x(2) * ( x(2)-x(1) ) - CASE(5) - !fx=12.0*x(1)*x(1)-16.0*x(1)*x(1)*x(1) - fx=4.0_dp*( 3._dp*x(2)-x(1) )*x(1)*x(1) - END SELECT - CASE default - PRINT*, "Type non existant", e%itype - STOP - END SELECT - grad=fx/e%volume - END FUNCTION gradient_element - - FUNCTION gradient2_element(e,k,x) RESULT (grad2) ! 2nd derivative in reference element - CLASS(element), INTENT(in):: e - INTEGER, INTENT(in):: k ! numero de la fonction de base - REAL(dp), DIMENSION(2), INTENT(in):: x ! coordonnees barycentriques - REAL(dp),DIMENSION(n_dim):: grad2 - REAL(dp):: fxx - - SELECT CASE(e%itype) - CASE(1)! P1 - SELECT CASE(k) - CASE(1) - fxx=0.0_dp - CASE(2) - fxx=0.0_dp - END SELECT - CASE(3) !P2 - SELECT CASE(k) - CASE(1) - fxx=4.0_dp - CASE(2) - fxx=4.0_dp - CASE(3) - fxx=-8.0_dp - END SELECT - CASE(2) ! B2 - SELECT CASE(k) - CASE(1) - fxx=2.0_dp - CASE(2) - fxx=2.0_dp - CASE(3) - fxx=-4.0_dp - END SELECT - CASE(4) ! P3 - SELECT CASE(k) - CASE(1) - fxx=-27._dp*x(1) - CASE(2) - fxx=27._dp*x(1) - CASE(3) - fxx= 81._dp*x(1) - CASE(4) - fxx=-81._dp*x(1) - END SELECT - CASE(5) - SELECT CASE(k) - CASE(1) - fxx=6.0_dp*x(2) - CASE(2) - fxx=6.0_dp*x(1) - CASE(3) - fxx= 6.0_dp*x(1)-12.0_dp*x(2) - CASE(4) - !fxx=-18.0*x(1)+6.0 - fxx=6.0_dp*x(2)-12.0_dp*x(1) - END SELECT - - CASE(6) - SELECT CASE(k) - CASE(1) - fxx=12.0_dp-24.0_dp*x(1)+12.0_dp*x(1)*x(1) - CASE(2) - fxx=12.0_dp*x(1)*x(1) - CASE(3) - fxx=-24.0_dp+72.0_dp*x(1)-48.0_dp*x(1)*x(1) - CASE(4) - fxx=12.0_dp-72.0_dp*x(1)+72.0_dp*x(1)*x(1) - CASE(5) - fxx=24.0_dp*x(1)-48.0_dp*x(1)*x(1) - END SELECT - CASE default - PRINT*, "Type non existant", e%itype - STOP - END SELECT - grad2=fxx/(e%volume**2) - END FUNCTION gradient2_element - - FUNCTION average_element(e,u) RESULT(u_bar) - CLASS(element), INTENT(in):: e - TYPE(PVar), DIMENSION(e%nsommets),INTENT(in):: u - TYPE(PVar) :: u_bar, u_loc - INTEGER:: i,iq - u_bar=0._dp - - DO iq = 1, e%nquad - - u_loc =e%eval_func(u ,e%quad(:,iq)) - - u_bar = u_bar + (u_loc)*e%weight(iq) - - ENDDO ! iq - END FUNCTION average_element - - - SUBROUTINE quadrature_element(e) ! quadrature points and weights - ! for triangle and edges - CLASS(element), INTENT(inout):: e - REAL(dp):: w,xo,yo,zo,s - INTEGER:: nquad, nquad_1 - ! degree 5 - REAL(dp), PARAMETER:: s1_3=SQRT(0.6_dp) - REAL(dp), PARAMETER:: s2_3=0.5_dp*(1.0_dp - s1_3) - REAL(dp), PARAMETER:: s3_3=0.5_dp*(1.0_dp + s1_3) - REAL(dp), PARAMETER:: weight1_3=5._dp/18._dp - REAL(dp), PARAMETER:: weight2_3=8._dp/18._dp - ! degre 7 - REAL(dp), PARAMETER:: s1_7=(18._dp-SQRT(30._dp))/72._dp - REAL(dp), PARAMETER:: s2_7=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp - REAL(dp), PARAMETER:: s3_7=0.50_dp*(1.00_dp-s2_7) - REAL(dp), PARAMETER:: s4_7=0.50_dp*(1.00_dp+s2_7) - REAL(dp), PARAMETER:: s5_7=(18._dp+ SQRT(30._dp))/72._dp - REAL(dp), PARAMETER:: s6_7=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp - REAL(dp), PARAMETER:: s7_7=0.50_dp*(1.00_dp-s6_7) - REAL(dp), PARAMETER:: s8_7=0.50_dp*(1.00_dp+s6_7) - ! degree 9 - REAL(dp),PARAMETER:: s1_9=1.0_dp/3._dp*SQRT(5._dp-2._dp*SQRT(10._dp/7._dp)) - REAL(dp),PARAMETER:: s2_9=0.50_dp*(1.00_dp - s1_9) - REAL(dp),PARAMETER:: s3_9=0.50_dp*(1.00_dp + s1_9) - REAL(dp),PARAMETER:: weight1_9=(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - - - REAL(dp),PARAMETER:: s5_9=1.0_dp/3._dp*SQRT(5._dp+2._dp*SQRT(10._dp/7._dp)) - REAL(dp),PARAMETER:: s6_9=0.50_dp*(1.00_dp - s5_9) - REAL(dp),PARAMETER:: s7_9=0.50_dp*(1.00_dp + s5_9) - REAL(dp),PARAMETER:: weight2_9=(322._dp-13._dp*SQRT(70.0_dp))/1800.0_dp - REAL(dp),PARAMETER:: s4_9=1._dp/3._dp*SQRT(5._dp+2._dp*SQRT(10.0_dp/7.0_dp)) - - SELECT CASE(e%itype) - CASE(1) - e%nquad=2 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - ! quadrature for edges (3 point gauss formula) - - - - - e%quad(1,1) = 1.0_dp - e%quad(2,1) = 0._dp - e%weight(1) = 0.5_dp - - e%quad(1,2) = 0.0_dp - e%quad(2,2) = 1.0_dp - e%weight(2) = 0.5_dp - - - CASE(2,3)!! exact for degree 5 - e%nquad=3 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - - - ! s=sqrt(0.6_dp) !0.7745966692414834_dp !SQRT(0.6d0) - e%quad(1,1)=s2_3 !0.5_dp*(1.0_dp - s) - e%quad(2,1)=s3_3 !0.5_dp*(1.0_dp + s) - e%weight(1) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 - - e%quad(1,2)=s3_3 !0.5d0*(1.0d0 + s) - e%quad(2,2)=s2_3 !0.5d0*(1.0d0 - s) - e%weight(2) =weight1_3 !5._dp/18._dp! 0.2777777777777778 !5.0d0/18.0d0 - - e%quad(1,3)=0.5d0 - e%quad(2,3)=0.5d0 - e%weight(3)= weight2_3 !8._dp/18._dp!0.4444444444444444 ! 8.0d0/18.0d0 - - CASE(4,5) !! exact for degree 7 - e%nquad=4 ! ordre 7 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad) ) - ! s=(18._dp-sqrt(30._dp))/72._dp !0.1739274225687269_dp !(18.- SQRT(30.))/72. !SQRT(30.d0)*(-5.0d0+3.d0*SQRT(30.d0))/360.d0 - e%weight(1:2)=s1_7 - ! s=SQRT(525._dp+70._dp*SQRT(30._dp))/35._dp !0.8611363115940526_dp!SQRT(525.d0+70.d0*SQRT(30.d0))/35.d0 - e%quad(1,1)=s3_7! 0.50_dp*(1.00_dp-s) - e%quad(1,2)=s4_7 !0.50_dp*(1.00_dp+s) - e%quad(2,1)=e%quad(1,2) !0.5d0*(1.0d0+s) - e%quad(2,2)=e%quad(1,1) !0.5d0*(1.0d0-s) - - ! s=(18._dp+ SQRT(30._dp))/72._dp !0.3260725774312731_dp !(18.+ SQRT(30.))/72.! SQRT(30.d0)*(5.0d0+3.d0*SQRT(30.d0))/360.d0 - e%weight(3:4)=s5_7 - ! s=SQRT(525._dp-70._dp*SQRT(30._dp))/35._dp !0.3399810435848563_dp !SQRT(525.d0-70.d0*SQRT(30.d0))/35.d0 - e%quad(1,3)=s7_7 !0.50_dp*(1.00_dp-s) - e%quad(1,4)=s8_7 !0.50_dp*(1.00_dp+s) - e%quad(2,3)=e%quad(1,4) !0.5d0*(1.0d0+s) - e%quad(2,4)=e%quad(1,3) !0.5d0*(1.0d0-s) - - ! e%quad(2,:)=1.0d0-e%quad(1,:) - - CASE(6) ! exact for degree 9 - - e%nquad=5 - nquad=e%nquad - ALLOCATE(e%quad(2,e%nquad),e%weight(e%nquad)) - - !s=1.0_dp/3._dp*SQRT(5._dp-2._dp*SQRT(10._dp/7._dp)) - e%quad(1,1)=s2_9 !0.50_dp*(1.00_dp - s) - e%quad(2,1)=s3_9 !0.50_dp*(1.00_dp + s) - e%weight(1) = weight1_9 !(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - e%quad(1,2)=s3_9 !0.5_dp*(1.0_dp + s) - e%quad(2,2)=s2_9 !0.5_dp*(1.0_dp - s) - e%weight(2) = weight1_9 !(322._dp+13._dp*SQRT(70.0_dp))/1800.0_dp - - ! s=1._dp/3._dp*SQRT(5._dp+2._dp*SQRT(10.0_dp/7.0_dp)) - e%quad(1,3)=s6_9 !0.5_dp*(1.0_dp - s) - e%quad(2,3)=s7_9 !0.5_dp*(1.0_dp + s) - e%weight(3) = weight2_9 !(322.0_dp-13.0_dp*SQRT(70.0_dp))/1800.0_dp - e%quad(1,4)=s7_9 !0.5_dp*(1.0_dp + s) - e%quad(2,4)=s6_9 !0.5_dp*(1.0_dp - s) - e%weight(4) = weight2_9 ! (322.0_dp-13.0_dp*SQRT(70.0_dp))/1800.0_dp - - e%quad(1,5)=0.5_dp - e%quad(2,5)=0.5_dp - e%weight(5)=64.0_dp/225.0_dp - END SELECT - - e%weight = e%weight/SUM(e%weight) - END SUBROUTINE quadrature_element - - - - - SUBROUTINE base_ref_element(e) - ! compute the values of the basis functions at the physical dofs - REAL(dp), PARAMETER:: ut=1./3., det=1.-ut - CLASS(element), INTENT(inout)::e - INTEGER:: l, l_base, l_dof - REAL(dp), DIMENSION(2,4):: x ! barycentric coordinates for B3 - REAL(dp), DIMENSION(2,5):: z ! barycentric coordinates for B4 - REAL(dp), DIMENSION(2,3):: ba - ! ebase0( number of the basis function, point l) - e%base0=0. - SELECT CASE(e%itype) - CASE(1,3,4) ! P1 - - DO l=1,e%nsommets - e%base0(l,l)=1.0 - ENDDO - CASE(2) ! B2 Bezier - ba=0.0 - ba(1,1)=0.0 - ba(1,2)=1.0 - ba(1,3)=0.5 - ba(2,:)=1.0-ba(1,:) - DO l_dof=1,3 - DO l_base=1,3 - e%base0(l_base,l_dof)=base_element(e,l_base,ba(:,l_dof)) - ENDDO - !write(*,11)l_dof,e%base0(:,l_dof) - !11 FORMAT(i2,3(1x,f10.4)) - ENDDO - - - CASE(5) - x=0. - x(1,1)=0.0; - x(1,2)=1.0 - x(1,3)=1.0/3.0 - x(1,4)=2.0/3.0 - x(2,:)=1.0-x(1,:) - DO l_dof=1,4 - DO l_base=1,4 - e%base0(l_base,l_dof)=base_element(e,l_base,x(:,l_dof)) - ENDDO - ENDDO - - CASE(6) - z=0. - z(1,1)=0.0; - z(1,2)=1.0 - z(1,3)=1.0/4.0 - z(1,4)=1.0/2.0 - z(1,5)=0.75 - z(2,:)=1.0-z(1,:) - DO l_dof=1,5 - DO l_base=1,5 - e%base0(l_base,l_dof)=base_element(e,l_base,z(:,l_dof)) - ENDDO - ENDDO - - !10 FORMAT(i2,10(1x,f10.4)) - CASE default - PRINT*, "Element type not yet take into account in base_ref_element", e%itype - STOP - END SELECT - - e%base0 = TRANSPOSE(e%base0) - e%base1=inverse(e%base0) - - - CALL bary_element(e) - - END SUBROUTINE base_ref_element - - SUBROUTINE bary_element(e) - ! defines barycentric coordinates of Lagrange points - CLASS(element), INTENT(inout)::e - ALLOCATE(e%x(2,e%nsommets)) - ALLOCATE(e%dof2ind(e%nsommets)) - e%x(1,1)=0.0 - e%x(1,2)=1.0 - SELECT CASE (e%itype) - CASE(1) - e%dof2ind = (/1, 2/) - CASE(2,3) - e%x(1,3)=0.5 - e%dof2ind = (/1, 3, 2/) - CASE(4,5) - e%x(1,3)=1./3. - e%x(1,4)=2./3. - e%dof2ind = (/1, 3, 4, 2/) - CASE(6) - e%x(1,3)=0.25 - e%x(1,4)=0.5 - e%x(1,5)=0.75 - e%dof2ind = (/1, 3, 4, 5, 2/) - CASE default - PRINT*, "bary_element, cas not implemented" - STOP - END SELECT - e%x(2,:)=1.-e%x(1,:) - END SUBROUTINE bary_element - - - SUBROUTINE clean(e) - TYPE(element), INTENT(inout)::e - IF (ASSOCIATED(e%coor)) NULLIFY(e%coor) - IF (ASSOCIATED(e%n)) NULLIFY(e%nu) - IF (ASSOCIATED(e%n)) NULLIFY(e%n) - IF (ASSOCIATED(e%quad)) NULLIFY(e%quad) - IF (ASSOCIATED(e%weight)) NULLIFY(e%weight) - IF (ASSOCIATED(e%base0)) NULLIFY(e%base0) - IF (ASSOCIATED(e%base1)) NULLIFY(e%base1) - END SUBROUTINE clean - -END MODULE element_class diff --git a/Src1D/test/geometry.f90 b/Src1D/test/geometry.f90 deleted file mode 100755 index b1daa98..0000000 --- a/Src1D/test/geometry.f90 +++ /dev/null @@ -1,154 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE geometry - USE param2d -! USE init_bc - USE PRECISION - IMPLICIT NONE - PRIVATE - PUBLIC:: geom - -CONTAINS - SUBROUTINE geom(Mesh, DATA) - TYPE (maillage), INTENT(inout):: mesh - TYPE(donnees), INTENT(inout):: DATA - - INTEGER, PARAMETER,DIMENSION(6)::loc_ndofs=(/2,3,3,4,4,5/) - REAL(dp):: dx, a - TYPE(element):: e - INTEGER:: nt, jt, itype, p1, p2, k - nt=DATA%nt; itype=DATA%itype - SELECT CASE(DATA%itype) - CASE(1) - Mesh%nt=DATA%nt - Mesh%ndofs=DATA%nt+1 - CASE(2,3) - Mesh%nt=DATA%nt - Mesh%ndofs=2*DATA%nt+1 - CASE(4,5) - mesh%nt=DATA%nt - Mesh%ndofs=nt+1+2*nt - CASE(6) - Mesh%nt=DATA%nt - Mesh%ndofs=nt+1+3*nt - CASE default - PRINT*, "Error: this element is not yet defined", DATA%itype - STOP - END SELECT - - - - dx=1._dp/REAL(nt) - a =0._dp - - ALLOCATE(Mesh%e(nt)) - k=0 - DO jt=1, nt - ALLOCATE(Mesh%e(jt)%coor(loc_ndofs(itype)),Mesh%e(jt)%nu(loc_ndofs(itype))) - ALLOCATE(Mesh%e(jt)%x(2,loc_ndofs(itype))) - mesh%e(jt)%itype=itype - Mesh%e(jt)%nvertex = 2 - mesh%e(jt)%nsommets=loc_ndofs(itype) - mesh%e(jt)%coor(1)=(jt-1)*dx+a - mesh%e(jt)%coor(2)=(jt )*dx+a - mesh%e(jt)%nu(1)=jt - mesh%e(jt)%nu(2)=jt+1 - - SELECT CASE(itype) - CASE(2,3) - k=k+1 - mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+dx/2. - mesh%e(jt)%nu(3)=nt+1+jt - CASE(4,5) - mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+dx/3. - mesh%e(jt)%coor(4)=mesh%e(jt)%coor(1)+2.*dx/3. - k=k+1 - mesh%e(jt)%nu(3)=nt+1+2*(jt-1)+1 - k=k+1 - mesh%e(jt)%nu(4)=nt+1+2*(jt-1)+2 - CASE(6) - mesh%e(jt)%coor(3)=mesh%e(jt)%coor(1)+dx/4. - mesh%e(jt)%coor(4)=mesh%e(jt)%coor(1)+dx/2. - mesh%e(jt)%coor(5)=mesh%e(jt)%coor(1)+dx*0.75 - mesh%e(jt)%nu(3)=nt+1+3*(jt-1)+1 - mesh%e(jt)%nu(4)=nt+1+3*(jt-1)+2 - mesh%e(jt)%nu(5)=nt+1+3*(jt-1)+3 - - END SELECT - - mesh%e(jt)%volume=mesh%e(jt)%aire() - ALLOCATE(mesh%e(jt)%n(2)) - mesh%e(jt)%n =mesh%e(jt)%normale() - CALL mesh%e(jt)%quadrature() - ALLOCATE(Mesh%e(jt)%base0(mesh%e(jt)%nsommets,mesh%e(jt)%nsommets)) - ALLOCATE(Mesh%e(jt)%base1(mesh%e(jt)%nsommets,mesh%e(jt)%nsommets)) - CALL mesh%e(jt)%base_ref() - - ENDDO - ! connectivite: for each edge, we give the element before and after - Mesh%nsegmt=nt!+1 ! periodicite: the last edge is the first one, one should not count it twice - ALLOCATE(Mesh%edge(Mesh%nsegmt)) - DO jt=2,Mesh%nsegmt!-1 - Mesh%edge(jt)%jt1=jt-1 - Mesh%edge(jt)%jt2=jt - Mesh%edge(jt)%bord=.FALSE. - ENDDO - - SELECT CASE(DATA%test) - CASE(0,2,3,5) - ! for periodic BCs - ! here I take into account the periodicity of the mesh - Mesh%edge(1)%jt2= 1!Mesh%nt - Mesh%edge(1)%jt1=Mesh%nt !1 - Mesh%edge(1)%bord=.FALSE. - - Mesh%edge(mesh%nsegmt)%jt2=1 !added it to debug convergence - Mesh%edge(mesh%nsegmt)%jt1=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%bord=.FALSE.!added it to debug convergence - CASE default - ! for outflow BCs - ! here I take into account the periodicity of the mesh - Mesh%edge(1)%jt2= 1 - Mesh%edge(1)%jt1= 1 - Mesh%edge(1)%bord=.FALSE. - - Mesh%edge(mesh%nsegmt)%jt2=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%jt1=Mesh%nt !added it to debug convergence - Mesh%edge(mesh%nsegmt)%bord=.FALSE.!added it to debug convergence - END SELECT - - - ALLOCATE(Mesh%aires(Mesh%ndofs)) - Mesh%aires=0.0_dp - - DO jt=1, nt - e=Mesh%e(jt) - Mesh%aires(e%nu)=Mesh%aires(e%nu)+e%volume/REAL(e%nsommets,dp) - ENDDO - - ! make the cells periodic. - ! warning : the special numbering is a trap - - p1=Mesh%e(1)%nu(1) - p2=Mesh%e(Mesh%nt)%nu(2) - mesh%aires(p1)=Mesh%aires(p1)+Mesh%aires(p2) - Mesh%aires(p2)=Mesh%aires(p1) - - ! this to avoid further divisions - - Mesh%aires=1.0_dp/Mesh%aires - - END SUBROUTINE geom - -END MODULE geometry diff --git a/Src1D/test/geometry.mod b/Src1D/test/geometry.mod deleted file mode 100644 index e48cdb03090942bd17c2585be62356161d77f8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32063 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 diff --git a/Src1D/test/gmon.out b/Src1D/test/gmon.out deleted file mode 100644 index e011b4e944abcbaa1784bf0a779e254b07b414ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317169 zcmeIuy-FNW7zW^3Ew}L!gf+oJP*PcrNP>&af{lfpibU}T7EBvzoZqE`O8{L@>U**_lT|B0C8 zMI%-D>dd?pn|6QC=6w&&VZ3ga7~l diff --git a/Src1D/test/main.f90 b/Src1D/test/main.f90 deleted file mode 100644 index d3e3ac1..0000000 --- a/Src1D/test/main.f90 +++ /dev/null @@ -1,129 +0,0 @@ -PROGRAM test - USE PRECISION - USE element_class - USE geometry - USE param2d - USE PRECISION - TYPE(Pvar), DIMENSION(:), ALLOCATABLE:: u, un - TYPE(maillage):: Mesh - TYPE(donnees):: DATA - TYPE(element):: e - REAL(dp) :: err, erreur, xx - INTEGER :: jt, iq, l - TYPE(pvar):: u_loc - TYPE(pvar),ALLOCATABLE,DIMENSION(:):: uu - REAL(dp), DIMENSION(:), ALLOCATABLE:: base - OPEN(1,file="don") - READ(1,*) DATA%nt - ! pass mesh size from command line - nargs = command_argument_COUNT() - - PRINT*, 'N = ', DATA%nt - READ(1,*) DATA%itype - ! DATA%itype_b=DATA%itype - READ(1,*)DATA%iordret, DATA%iter - IF (DATA%iter.LT.DATA%iordret) THEN - PRINT*, "wrong Data%iter,Data%iordret" - PRINT*,"Data%iter should be >= than Data%iordret" - PRINT*, "Data%iordret", DATA%iordret - PRINT*, "Data%iter", DATA%iter - ENDIF - READ(1,*) DATA%ischema - READ(1,*) DATA%alpha_jump - READ(1,*) DATA%alpha_jump2 - READ(1,*) DATA%cfl - READ(1,*) DATA%ktmax - READ(1,*) DATA%tmax - READ(1,*) DATA%ifre - READ(1,*) DATA%test - CLOSE(1) - - !----------- SET geometry of the problem test -------------------------- - CALL geom(Mesh,DATA) - - - ALLOCATE(u(Mesh%ndofs), un(Mesh%ndofs) ) - - - - DO jt=1, Mesh%nt - e=Mesh%e(jt) - DO l=1, e%nsommets - - u(e%nu(l))=fonc(e%coor(l)) - un(e%nu(l))=u(e%nu(l)) - - ENDDO - SELECT CASE(e%itype) - CASE(1,3,4) !Lagrange-> nothing to do - - CASE(2,5,6) ! B3 ! cubic Bezier: modif all dof except vertices - - DO k=1, n_vars - DO l=1, e%nsommets - un(e%nu(l))%u(k)=SUM( e%base1(l,:)*u(e%nu(:))%u(k) ) - ENDDO - ENDDO - - - CASE default - PRINT*, "correct initialistaion not yet implemented for these elements,e%itype=",e%itype - STOP - END SELECT - - ENDDO - - u(:)=un(:) - DO l=1, n_vars - PRINT*, "min variable ",l, MINVAL(u(:)%u(l)) - PRINT*, "max variable ",l, MAXVAL(u(:)%u(l)) - REWIND(10) - - PRINT* - ENDDO - - OPEN (1, file="sol") - REWIND(1) - erreur=0._dp - DO jt=1, Mesh%nt - - e=Mesh%e(jt) - err=0._dp - ALLOCATE(uu(e%nsommets)) - uu=u(e%nu) - DO iq=1, e%nquad - - - xx=e%coor(1)*e%quad(2,iq)+e%coor(2)*e%quad(1,iq)! - ! xx=SUM(e%coor(1:2)*e%quad(:,iq)) - - u_loc = e%eval_der(uu ,e%quad(:,iq)) - ! write(1,*) xx,u_loc%u(1),fonc(xx)!real(xx,sp),real(u_loc%u(1),sp),real(fonc(xx),sp) - - u_loc%u(1)=u_loc%u(1)-foncp(xx) - - err=err+e%weight(iq)*( u_loc%u(1) )**2 - ENDDO - erreur=erreur+e%volume * err - DEALLOCATE(uu) - ENDDO - CLOSE(1) - - PRINT*, alog10(REAL( Mesh%e(1)%volume,sp)), alog10(REAL( erreur,sp))*0.5 -CONTAINS - - REAL(dp) FUNCTION fonc(x) - REAL(dp), INTENT(in):: x - fonc=COS(x) - END FUNCTION fonc - - REAL(dp) FUNCTION foncp(x) - REAL(dp), INTENT(in):: x - foncp=-sin(x) - END FUNCTION foncp - - -END PROGRAM test - - - diff --git a/Src1D/test/main.f90~ b/Src1D/test/main.f90~ deleted file mode 100755 index aa9fbb3..0000000 --- a/Src1D/test/main.f90~ +++ /dev/null @@ -1,124 +0,0 @@ -PROGRAM test - USE PRECISION - USE element_class - USE geometry - USE param2d - USE PRECISION - TYPE(Pvar), DIMENSION(:), ALLOCATABLE:: u, un - TYPE(maillage):: Mesh - TYPE(donnees):: DATA - TYPE(element):: e - REAL(dp) :: err, erreur, xx - INTEGER :: jt, iq, l - TYPE(pvar):: u_loc - TYPE(pvar),ALLOCATABLE,DIMENSION(:):: uu - REAL(dp), DIMENSION(:), ALLOCATABLE:: base - OPEN(1,file="don") - READ(1,*) DATA%nt - ! pass mesh size from command line - nargs = command_argument_COUNT() - - PRINT*, 'N = ', DATA%nt - READ(1,*) DATA%itype - ! DATA%itype_b=DATA%itype - READ(1,*)DATA%iordret, DATA%iter - IF (DATA%iter.LT.DATA%iordret) THEN - PRINT*, "wrong Data%iter,Data%iordret" - PRINT*,"Data%iter should be >= than Data%iordret" - PRINT*, "Data%iordret", DATA%iordret - PRINT*, "Data%iter", DATA%iter - ENDIF - READ(1,*) DATA%ischema - READ(1,*) DATA%alpha_jump - READ(1,*) DATA%alpha_jump2 - READ(1,*) DATA%cfl - READ(1,*) DATA%ktmax - READ(1,*) DATA%tmax - READ(1,*) DATA%ifre - READ(1,*) DATA%test - CLOSE(1) - - !----------- SET geometry of the problem test -------------------------- - CALL geom(Mesh,DATA) - - - ALLOCATE(u(Mesh%ndofs), un(Mesh%ndofs) ) - - - - DO jt=1, Mesh%nt - e=Mesh%e(jt) - DO l=1, e%nsommets - - u(e%nu(l))=fonc(e%coor(l)) - un(e%nu(l))=u(e%nu(l)) - - ENDDO - SELECT CASE(e%itype) - CASE(1,3,4) !Lagrange-> nothing to do - - CASE(2,5,6) ! B3 ! cubic Bezier: modif all dof except vertices - - DO k=1, n_vars - DO l=1, e%nsommets - un(e%nu(l))%u(k)=SUM( e%base1(l,:)*u(e%nu(:))%u(k) ) - ENDDO - ENDDO - - - CASE default - PRINT*, "correct initialistaion not yet implemented for these elements,e%itype=",e%itype - STOP - END SELECT - - ENDDO - - u(:)=un(:) - DO l=1, n_vars - PRINT*, "min variable ",l, MINVAL(u(:)%u(l)) - PRINT*, "max variable ",l, MAXVAL(u(:)%u(l)) - REWIND(10) - - PRINT* - ENDDO - - OPEN (1, file="sol") - REWIND(1) - erreur=0._dp - DO jt=1, Mesh%nt - - e=Mesh%e(jt) - err=0._dp - ALLOCATE(uu(e%nsommets)) - uu=u(e%nu) - DO iq=1, e%nquad - - - xx=e%coor(1)*e%quad(2,iq)+e%coor(2)*e%quad(1,iq)! - ! xx=SUM(e%coor(1:2)*e%quad(:,iq)) - - u_loc = e%eval_func(uu ,e%quad(:,iq)) - ! write(1,*) xx,u_loc%u(1),fonc(xx)!real(xx,sp),real(u_loc%u(1),sp),real(fonc(xx),sp) - - u_loc%u(1)=u_loc%u(1)-fonc(xx) - - err=err+e%weight(iq)*( u_loc%u(1) )**2 - ENDDO - erreur=erreur+e%volume * err - DEALLOCATE(uu) - ENDDO - CLOSE(1) - - PRINT*, alog10(REAL( Mesh%e(1)%volume,sp)), alog10(REAL( erreur,sp))*0.5 -CONTAINS - - REAL(dp) FUNCTION fonc(x) - REAL(dp), INTENT(in):: x - fonc=COS(x) - END FUNCTION fonc - - -END PROGRAM test - - - diff --git a/Src1D/test/obj1D/algebra.o b/Src1D/test/obj1D/algebra.o deleted file mode 100644 index 690d5edb23e99a93254ffc11be075bdb26a6ea6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14120 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 Xe;8wYNc>;hix@)>ji)Oje*Av}t7{gF diff --git a/Src1D/test/obj1D/aretes.o b/Src1D/test/obj1D/aretes.o deleted file mode 100644 index c6758b23fe56f0624b4865ff411723a9f0a526c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4280 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 G{Qm%j22Se$ diff --git a/Src1D/test/obj1D/overloading.o b/Src1D/test/obj1D/overloading.o deleted file mode 100644 index ce65b9356f70238b7f78cfe2e32cca8e22418e15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26168 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 To&2wt0E}au&Bah&Xa4^SR7iOh diff --git a/Src1D/test/obj1D/param2d.o b/Src1D/test/obj1D/param2d.o deleted file mode 100644 index 8e2e76fec8431f828d7b1dede12125fa9970f766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1464 zcmbVLF;5gx5S~2{P%m&H8YxWJg4h@y2c4RjH3YfB5E^1d&UbgaK)7W$caH>Yq)-zI z6AL;E|AxJZe}bCC!iL@iXWq{2Eu%I}vO6>1%r|e|d-L9{y?R*-f-ztT;5h{1RP?vn z$celeK^<<7KxI*lak#uvFoXzp0 zgnW|4UYyv&zU%LGp5m7!Nk6l_@Lmzc?F2`S`sCDSzLy2WA99RT$o7lr#%g_{@v*k~ zqd?5kQf>z}UFn(RNfXS_4V>+uK2E*vS!cm?hC?teK5`(*Z7_q(2irUOAWPc0?d~@r z?PiAu4$ML3Vza)nwK#N$gXv~z8dD(NZ6~-~jP$r~i<*U5M&zJr0O&G)Ulmg4JrI7k zf`^P3i!P52%BZGdSc%&4@1{P_yW?r({$aG zPw#@3(i1J~hZw7ho=ti`#MftV!u{)hwNLL!F0;DM`~U1;!}RVnMs!;$hmj7t4D5ckKGrDjiwOc z3c*sa^dAud{u8MK7HRAQapvvJ+vii84D8O#H}lQ=HS_-Q(xbl% zw1-I=?~nC()W3&co~GkG9){PeC>|#`Xf+p?KJ&ZWM*J4XNQG=ayw-ZuTxfl4?EI(@ zwYfPhlEJ7PxUR~#qUv?BjWpaaLD`j_v`yKSMs3lIv@UXejld!^D(L;{F`pkf8^4f z65rqdS1uZ1%oTs4S1{<`J>?%W|BFjT+u!Ru#QZxUO353N1|=Tl$@WuU KdBi8K&;JcGfotdh diff --git a/Src1D/test/obj1D/variable_def_scalar_1D.o b/Src1D/test/obj1D/variable_def_scalar_1D.o deleted file mode 100644 index 8eb4e9bcee916a848099fdfcb0db4cf9f44f7143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7936 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 ANdN!< diff --git a/Src1D/test/param2d.f90 b/Src1D/test/param2d.f90 deleted file mode 100755 index cd8b504..0000000 --- a/Src1D/test/param2d.f90 +++ /dev/null @@ -1,57 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -MODULE param2d - USE element_class - USE variable_def - USE arete_class - use precision - IMPLICIT NONE - - REAL(dp), PARAMETER:: Pi=ACOS(-1.0) - - - - TYPE maillage - INTEGER:: ndofs - INTEGER:: ns, nt - TYPE(element), DIMENSION(:),ALLOCATABLE:: e - REAL(dp),DIMENSION(:),ALLOCATABLE:: aires - INTEGER:: nsegmt - TYPE(arete), DIMENSION(:), ALLOCATABLE:: edge - END TYPE maillage - - TYPE variables - REAL(dp):: dt - INTEGER:: Ncells - TYPE(PVar), DIMENSION(:,:),ALLOCATABLE:: ua, up - TYPE(Pvar), DIMENSION(:),ALLOCATABLE:: un - END TYPE variables - - TYPE donnees - INTEGER:: iordret ! also defines the number of levels in the Dec - REAL(dp):: cfl - INTEGER:: ktmax - REAL(dp):: tmax - INTEGER:: ifre - INTEGER:: ischema - INTEGER:: iter - INTEGER:: nt, itype - REAL(dp):: Length, domain_left - REAL(dp):: temps - LOGICAL:: restart=.FALSE. - REAL(dp):: alpha_jump - REAL(dp):: alpha_jump2 - INTEGER:: test - END TYPE donnees -END MODULE param2d diff --git a/Src1D/test/param2d.mod b/Src1D/test/param2d.mod deleted file mode 100644 index 7d0f9de6efc17f579fc1bebc309c7d2e9596e638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50314 zcmd^I3z%J1b>24#kc3wtBnAj(U@}QG2$KO6Ey~=?+#~}tcgDGQNDy@bB1HwHh%LTD zi;A`?Dq7q6z!o1>thUzH7YY_^X{}9dYwM#et$ol-*eg3ugT5GShU+0{AR+*aF@D^j%){J@Hxg*184L{KwX^c7la2#CNarPO*n*Q=> zue^lm<(lyj$E#iWXPkNFwU=IZ>D42bpK-+#hs{iVwmvm7-f!hA6$mL2mb+5znPiQc z0f`UbI4UVUEJLE8=Sh}c^0SA4-l{EAzmgu%L=gw{D}PPFIZCe1nWGtBG(9;t)iB3Mo;jA$f`1(ruH@_ zcJFDM;{_$zYnj|xZ#9O^37Xtt)-gFgy=!EmId0bTq&_j*Fppwt_iTN9qS0)dll`+1 zY2U#*n62+_m?2(cvF5Q%HK%8%>XQv~CQn%JY`r~)0!I`!Kik-49?!GJMfJ(~U31Mb z^Q7W*yfJIe_s>QQO>+?W^R331nc&ITWTW0RO(e;t3uw<<3=W

ZLNau2|coIW@r9 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 diff --git a/Src1D/test/precision.f90 b/Src1D/test/precision.f90 deleted file mode 100644 index f466f55..0000000 --- a/Src1D/test/precision.f90 +++ /dev/null @@ -1,8 +0,0 @@ -MODULE PRECISION -! USE, INTRINSIC :: iso_fortran_env - IMPLICIT NONE - INTEGER, PARAMETER :: sp = kind(1.0)!REAL32 - INTEGER, PARAMETER :: dp = kind(1.d0)!REAL64 - INTEGER, PARAMETER :: qp = 2*kind(1.d0)!REAL128 -END MODULE PRECISION - diff --git a/Src1D/test/precision.mod b/Src1D/test/precision.mod deleted file mode 100644 index 81e21c6f92c4ebe7dd68f7579a079598c87b1ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 692 zcmd;NU}OkjVqjopU|`6$FfuSUuw>u{vhCS`1QZyW=o!G+cNAKqL2PE20F7xbsQG&O z`UOR)$(hBO`FVP2mIe#~L9Wi8!Jhtp47?~#5CHKQQH0Pq5J^TMb~JIYE(}2i1{O4R zNFf80LADR<0GI@b28J#WFp7D5`nizoSV%Y%?^q77We9@Qz=3#{c>BO>A355MDb;o1`rbX$b{dYH&l#Uuw4?wNjE!~x2W1Y9aWTtGb`Atc0w1K&5h^Stl*Ik6!nUCD2DXJ&V1 zcfXze@sP=wU+*=hXpDLBz`nx%!a=hE`NQk*ajE#!L_zaE=3al6`95XbW;*QJpV+(i z)#k+)ny1g6X*_>ssd4GK=Go@OMsaFl>0rSuhSlk?G*fO&m5-S9sFJ~tlxcFdvRJOp zH$ZFq=Bm@jO{IYfHIOM3LKB9jR5Ekm*$T;T5MyLf8dMJLU@)AQwxlwlmt!RsV)a?@ z>u-{>enw2rc10O&)J{WYRQsw58Mu=1nCh8Q)hqUDuwQE44ud1=Q=ASsg9-$dN)J6| z9FV^sR=wgxp<^FAn6%K(jC!qGCpf4c(~gB2dM40Zu~3-k)ux@R|7Mfx)=xRO8~6<5 zeE?V#XLjo_D5{5?R=y(3WC+#r3x*xfADLOGOMJ+e7sHu_a?NZeyEa#zoUev6jcPbG zy-+h-$*eAdIg54n082Ak+R4(faB{XZ9ac=9rONSe-t0yWfk+bu_Z_n4mr+o)nAS0wT>tb-xlqgD1sYL!TCGwhQw{adsp9fe`wjj&sdUJ5M5&UJiO zo^`HS>^jk`6I=987d0lHz1c%8N$nG_-B1luI|8kVSDkn)WS|}v^kCxeMgbE)N>VXf zKsX+Xtt8@;<+N3irh{fM&cuN00&P&YGTI$V()?CxTy0JAXJUGP=#WLF0&3pl@R%4^NxXy1>L9;wxtKqDYzSS!j#$tIeC${0=dTG#HR znK9>60`URcW#ethIYH-pLVN&q+hSWc*plv=X>oA#?Lho+U`7I%UDhW~N;=|4R?Vkg zV>1s+KH}G5=NH85aSBl14vjsc$Iq#@U0DNfq=F3VU^t>(S#|8H7a=~3yisr_XaHTt zkvlOeTTFKumAi_7He#k>bX4YGEh3=Zq+5ISdNW}0pa*K;A%_|26%VYFh6fuGMTk!f z4-bI>JUk3?C*pzbbse+1!UKDn9v`-@86J3H^5erGwg!n0dZhv$aBb=t53G}h2i*!q zZ1KPo9L|ce+hT`%1SR4@*vKbOU@MioImIR0V4Y-2>~R!xVA_-0q3mIy%lOgNS)U`3 zju%|1;mcaY4_>Q%ybST)0gha{ffdG$dW>eZ7m|aXLFK z>6PlJFG{sf7!)qR0DRlq4u?!4Cw&2qt=a;#i=1`>Ie6t(cn+DMDh^(0F0(WF6J{?- z^zM;>mel5_Q)2Dqp~Z{D`}pn0k30I(x%|>O*~h;_=@5RW@q49t{`{WUOFGx{X80I@ z9)thk%+YeG8p>s6*5l7r%ahZ!>Dh|hecp!T0%|b1mv*_yz;cVtmv>_P0=Sn%70t^7 zz%SsutQ^a#V{1`XsU$bOFTwiMY01d(-24_cg%3cR_>nnoA24|r+CN~-d%kEvdhrd| z^FCW1I9VZ&=#acIYbafV z5?xBj;Tq9@7O#efKrzql8c~q{5L$;jYPoyqE-2iBqV}}SAbL!lgLqWb9=Ge%Mdzz! zb?iN+iK~7c?L{M?w<>w0{ut74A!XN9fIf2;-^4qfI@uDzI|_e-P`&en*5n1ew#7{9 z!Cg##4yl?{fiw9oR-Bq_iJZybAXJl{(3*S=4^}agdNvf3HzEDQ^-=}S^VTZ_#12mk#{`c8aseHh<4nG>^Q#x zK>!6BaRPgU;G*~f!tdikIaIL4YY0GBprOvRX^fvR{{XJi Bxmf@J diff --git a/Src1D/test/variable_def_scalar_1D.f90 b/Src1D/test/variable_def_scalar_1D.f90 deleted file mode 100644 index b9841bb..0000000 --- a/Src1D/test/variable_def_scalar_1D.f90 +++ /dev/null @@ -1,211 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -!================================================== -! Definition of variables for the 1D wave equation -! u_tt - a^2 u_xx = 0 -! in the form of a 2 x 2 linear system -! v_t - a^2 w_x = 0 -! w_t - v_x = 0 -! with v = u_t, w = u_x -!================================================== -MODULE variable_def - USE algebra - use precision - IMPLICIT NONE - INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables - INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions - REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi - REAL(dp), PUBLIC, PARAMETER:: a = 1.0 - REAL(dp), PUBLIC, PARAMETER:: aa = 100., bb = 100. - - ! Type for the vector of primitive variables - TYPE, PUBLIC :: PVar - INTEGER :: NVars = n_vars - REAL(dp), DIMENSION(n_vars) :: U - - CONTAINS - PROCEDURE, PUBLIC:: flux => flux_w - PROCEDURE, PUBLIC:: evalues => evalues_w - PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w - PROCEDURE, PUBLIC:: rvectors => rvectors_w - PROCEDURE, PUBLIC:: lvectors => lvectors_w - PROCEDURE, PUBLIC:: Jacobian => Jacobian_w - PROCEDURE, PUBLIC:: Nmat => Nmat_w - END TYPE PVar - - PRIVATE - PUBLIC:: convert_cons2prim - - -CONTAINS - -!--------------------------------------------- -! Convert conservative variables to primitive -!--------------------------------------------- - FUNCTION convert_cons2prim(Q) RESULT(W) - TYPE(Pvar), INTENT(in) :: Q - TYPE(Pvar) :: W - W%U = Q%U - END FUNCTION convert_cons2prim - -!--------------------------------------------- -! Convert primitive variables to conservative -!--------------------------------------------- - FUNCTION convert_prim2cons(W) RESULT(Q) - TYPE(Pvar), INTENT(in) :: W - TYPE(Pvar) :: Q - Q%U = W%U - END FUNCTION convert_prim2cons - - -!!!!----------------------- - - - FUNCTION roe_w(e,u,n) RESULT (J) - ! evaluate a roe average to estimate a rough speed for - ! Burman jump operator - CLASS(Pvar), INTENT(in):: e - REAL(dp), DIMENSION(N_Vars), INTENT(in):: u - REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 - REAL(dp), DIMENSION(n_vars,n_vars):: J - REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ - REAL(dp), DIMENSION(n_dim):: v=0. - JJ=Jacobian_w(e,v) - J(:,:) = JJ(:,:,1)*n(1) - - END FUNCTION roe_w - - FUNCTION flux_w(e,x) RESULT(f) - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - TYPE(PVar), DIMENSION(n_dim) :: f - F(1)%u(:)=e%u(:) - - END FUNCTION flux_w - - FUNCTION Jacobian_w(e,x) RESULT(J) - CLASS(Pvar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J - - J=1. - - END FUNCTION Jacobian_w - - FUNCTION evalues_w(e,x,n) RESULT(lambda) - ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations - CLASS(PVar), INTENT(in) :: e - REAL(DP), DIMENSION(n_dim), INTENT(in) :: x - REAL(DP), DIMENSION(n_dim) :: n - REAL(DP), DIMENSION(n_Vars,n_Vars) :: lambda - - REAL, DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: i - - lambda=1. - - END FUNCTION evalues_w - - REAL(dp) FUNCTION spectral_radius_w(e,x,n) - ! compute the maximum value of eigenvalues: - ! max_i {lambda_ii} - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - - lambda = evalues_w(e,x,n) - spectral_radius_w = MAXVAL(ABS(lambda)) - - END FUNCTION spectral_radius_w - - FUNCTION rvectors_w(e,n) RESULT(R) - ! right e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - - R(:,:) = 1.0 - - END FUNCTION rvectors_w - - FUNCTION lvectors_w(e,n) RESULT(L) - ! left e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - L(:,:) = 1.0 - - END FUNCTION lvectors_w - - FUNCTION Nmat_w(e, n_ord, grad, x) RESULT (Nmat) - CLASS(Pvar), INTENT(in) :: e - INTEGER, INTENT(in) :: n_ord - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim,n_ord), INTENT(in) :: grad - REAL(dp), DIMENSION(n_vars,n_vars) :: Nmat - REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: l - - J= Jacobian_w(e,x) - Nmat=0 - DO l=1, n_ord - Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) - ENDDO - Nmat =0.!Inverse(Nmat) - - END FUNCTION Nmat_w - - FUNCTION min_mat_w(e, x, n, alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(IN) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MIN(lambda(:,:),alpha), L) ) - - END FUNCTION min_mat_w - - FUNCTION max_mat_w(e,x,n,alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MAX(lambda(:,:),alpha), L) ) - - END FUNCTION max_mat_w - !-------------------------- - - -END MODULE variable_def diff --git a/Src1D/timestepping.f90 b/Src1D/timestepping.f90 index 53a97f8..9ac928f 100644 --- a/Src1D/timestepping.f90 +++ b/Src1D/timestepping.f90 @@ -44,7 +44,7 @@ CONTAINS TYPE(donnees), INTENT(in):: DATA TYPE(Pvar),DIMENSION(e%nsommets,n_dim):: flux, flux_c TYPE(Pvar),DIMENSION(e%nsommets,0:DATA%iordret-1):: u, up, u_p, up_p - TYPE(Pvar),DIMENSION(e%nsommets):: res, difference, uu,uu_c + TYPE(Pvar),DIMENSION(e%nsommets):: res, difference, uu,uu_c, source, source_c INTEGER:: l, lp DO l=1,e%nsommets @@ -62,15 +62,17 @@ CONTAINS ENDDO up_P=u_P - flux_c=0._dp; uu=0._dp + flux_c=0._dp; uu=0._dp; source_c=0._dp DO l=1, e%nsommets DO lp=0, n_theta(DATA%iordret)-1 flux_c(l,:)= flux_c(l,:)+ theta(lp,k-1,DATA%iordret)* up_P(l,lp)%flux((/e%coor(l)/)) uu(l) = uu(l) + theta(lp,k-1,DATA%iordret)* up (l,lp) + source_c(l)= source_c(l)+ theta(lp,k-1,DATA%iordret)* up_P(l,lp)%source((/e%coor(l)/),DATA%test) ENDDO + #if (1==0) ! the pure Jacobi-like does not need this, only the ! the Gauss-Seidel like @@ -79,6 +81,9 @@ CONTAINS flux_c(l,:)= flux_c(l,:)-& &GAMMA(lp, DATA%iordret-1,DATA%iordret)*( up_P(l,lp)%flux( (/e%coor(l)/) )& & -u_p(l,lp)%flux( (/e%coor(l)/) ) ) + source_c(l)= source_c(l)-& + &GAMMA(lp, DATA%iordret-1,DATA%iordret)*( up_P(l,lp)%source( (/e%coor(l)/) ,DATA%test)& + & -u_p(l,lp)%source( (/e%coor(l)/),DATA%test ) ) uu(l)=uu(l) -GAMMA(lp,DATA%iordret-1,DATA%iordret)*( up(l,lp)-u(l,lp)) ENDDO #endif @@ -87,8 +92,9 @@ CONTAINS DO l=1, n_dim flux(:,l)=Cons_to_control(flux_c(:,l),e) ENDDO + source = Cons_to_control(source_c,e) - res=schema( DATA%ischema, e, uu, difference, flux, dt, jt,mesh) + res=schema( DATA%ischema, e, uu, difference, flux, source, dt, jt,mesh) DO l=1, e%nsommets Var%un(e%nu(l))=Var%un(e%nu(l))+res(l) ENDDO @@ -128,6 +134,23 @@ CONTAINS jt2 = ed%jt2 e2=Mesh%e(jt2) + IF (e1%type_flux==2&!4& + & .OR.e1%type_flux==1&!5 & + & .OR.e1%type_flux==4&!5 & + & .OR.e1%type_flux==5&!5 & + & .OR.e1%type_flux==6 & + & .OR.e1%type_flux==7 & + & .OR.e1%type_flux==9) THEN !(with jumps--> Burman'stuff on cell e1 ) +!!$ + + IF (e2%type_flux==2&!4& + & .OR. e2%type_flux==1&!5 & + & .OR. e2%type_flux==4&!5 & + & .OR. e2%type_flux==5&!5 & + & .OR.e2%type_flux==6 & + & .OR.e2%type_flux==7 & + & .OR.e2%type_flux==9) THEN !(with jumps--> Burman'stuff on cell e2 ) + ALLOCATE(u1(e1%nsommets), u2(e2%nsommets), resJ(e1%nsommets,2) ) ALLOCATE(ua1(e1%nsommets,0:DATA%iordret-1),& & ua2(e2%nsommets,0:DATA%iordret-1),& @@ -195,11 +218,371 @@ CONTAINS Var%un(e2%nu(l))=Var%un(e2%nu(l))+resJ(l,2) * dt ENDDO DEALLOCATE(resJ,u1,u2,ua1,ua2,up1,up2) +!!$ + END IF + END IF + ENDDO +END SUBROUTINE edge_main_update - ENDDO - END SUBROUTINE edge_main_update +SUBROUTINE test(k_iter,Debug,Var, mesh, DATA, flux_mood) + IMPLICIT NONE + + ! tunable parameters: + REAL(8), PARAMETER:: cour_max=10000. + REAL:: eps1, eps2 + REAL, PARAMETER:: coeff=1.!0. + ! variables to be checked + INTEGER, PARAMETER:: n_list=1 !3 + INTEGER, DIMENSION(n_list), PARAMETER:: list=(/1/)!,2,3/) + ! + ! emergency schemes + INTEGER, PARAMETER:: theflux=1,theflux2=0 + ! + ! + INTEGER, INTENT(in):: k_iter + TYPE(maillage), INTENT(inout):: mesh + TYPE(variables), INTENT(in):: debug, Var + TYPE(donnees), INTENT(in):: DATA + INTEGER, INTENT(IN):: flux_mood + + TYPE(arete):: ed + TYPE(pvar), DIMENSION(:),ALLOCATABLE:: deb + !REAL(8),DIMENSION(:),ALLOCATABLE:: coefficient!with Remi's version of u2 + TYPE(element):: e, eL, eR + TYPE(pvar),DIMENSION(:),ALLOCATABLE:: coefficient !!with our version of u2 + TYPE(pvar), DIMENSION(:),ALLOCATABLE:: coefficient1, coefficient2 + + TYPE(pvar), DIMENSION(:),ALLOCATABLE:: v_min, v_max,u2_min,u2_max, u2_minloc, u2_maxloc + REAL, DIMENSION(:),ALLOCATABLE:: w_min, w_max,vd_min, vd_max + TYPE(Pvar),DIMENSION(:), ALLOCATABLE::phys, phys_d,phys_control, phys_d_control + TYPE(Pvar),DIMENSION(:),ALLOCATABLE::temp + REAL(8),DIMENSION(:),ALLOCATABLE:: temp_min, temp_max + INTEGER:: jt, k, l, lk,diag, is, jseg, lkk,r + INTEGER:: jt1, jt2 + REAL:: val_min,val_max,eps,xg,yg,val_min_n, val_max_n + REAL :: eps_i, absK + REAL:: ratio, alphaR, alphaL, smooth_sensor + TYPE(pvar),DIMENSION(:),ALLOCATABLE::u1_der, u1_derR, u1_derL + REAL,DIMENSION(:),ALLOCATABLE::u1_derL_mean, u1_der_mean,u1_derR_mean,coefficient_mean + REAL,DIMENSION(:),ALLOCATABLE:: vL_min,vL_max,vR_min,vR_max,vL,vR + INTEGER,PARAMETER :: plateau = 1 + INTEGER,PARAMETER :: NAN_criteria = 2 + INTEGER,PARAMETER :: PAD_criteria = 3 + INTEGER,PARAMETER :: DMP_B1=4 + INTEGER,PARAMETER :: DMP_nou2=5 + INTEGER,PARAMETER ::DMP_u2_2=6 + INTEGER,PARAMETER ::DMP_u2_1=7 + + ! integer, dimension(2,e%nsommets-1):: nuloc + Mesh%e(:)%diag2= Mesh%e(:)%diag + + Mesh%e(:)%diag=0 + + ALLOCATE(v_min(Mesh%nt), v_max(Mesh%nt),w_min(Mesh%nt), w_max(Mesh%nt)) + ALLOCATE(vd_min(Mesh%nt), vd_max(Mesh%nt)) + ALLOCATE(phys(Mesh%ndofs),phys_d(Mesh%ndofs)) + ALLOCATE(phys_control(Mesh%ndofs),phys_d_control(Mesh%ndofs),u2_max(Mesh%nt),u2_min(Mesh%nt)) + + ALLOCATE(vL(Mesh%nt),vR(Mesh%nt),vL_min(Mesh%nt),vL_max(Mesh%nt),vR_min(Mesh%nt),vR_max(Mesh%nt)) + ALLOCate(u1_der_mean(Mesh%nt),u1_derL_mean(Mesh%nt),u1_derR_mean(Mesh%nt),coefficient_mean(Mesh%nt)) + !compute physical quantities from interpolated quantities. + ! is this really usefull for Bezier thanks to the TV property? + ! If not done : more strict condition since Bezier>0==> positive function + ! converse not true + DO jt=1, Mesh%nt + e=Mesh%e(jt) + eps1=0.!10.**(-3) + eps2=0.!10.**(-4)!%volume + ALLOCATE(temp(e%nsommets)) + + !--------------------------- + !--------------------------- + ! Define the vector of primitives at the initial subtimestep n,0 + temp=Control_to_cons(Var%ua(e%nu,0),e)! before ua. up: we compare with the solution before the update + DO l=1,e%nsommets + phys(e%nu(l))=convert_cons2prim(temp(l)) !vector of primitive variables in physical values for n,0 + ENDDO + + !................................... + ! warning: for convergence study, better to work with phys variables' + ! because of u2 criterion-> use the right way to compute second derivatives + ! comment here + temp=Cons_to_Control(phys(e%nu),e) + phys_control(e%nu)=Var%ua(e%nu,0)!temp !vector of primitive variables in control values for n,0 + !end comment + !................................... + + !--------------------------- + !--------------------------- + ! Define the vector of primitives at the current subtimestep n,m + temp=Control_to_cons(debug%ua(e%nu,k_iter),e) + DO l=1,e%nsommets + phys_d(e%nu(l))=convert_cons2prim(temp(l)) !vector of primitive variables in physical values, for n,m + ENDDO + + !................................... + ! warning: for convergence study, better to work with phys variables' + ! because of u2 criterion-> use the right way to compute second derivatives + ! comment here + temp=Cons_to_Control(phys_d(e%nu),e) + phys_d_control(e%nu)=debug%ua(e%nu,k_iter)!temp !vector of primitive variables in control values for n,m + !end comment + !................................... + DEALLOCATE(temp) + ENDDO + + + ListVar: DO lkk=1,n_list + lk=list(lkk) + + + ! In the following we compute the neighobour cells - but this approach is only good for 1D + !---------------------------------------------------------------------------------------------------------------- + DO jt = 1,Mesh%nt + + e=Mesh%e(jt) + + !------------------------------------------------- + !------------------------------------------------- + ! Definition of the minimum and maximum values of the neighbour elements at time n,0 + + !//////////////////////////////////////////////////////////// + !Boundary conditions: Attention you may have to change them according to the test case +#if(1==1) + ! outflow conditions + IF (jt > 1) THEN + eL=Mesh%e(jt-1) + ELSE + eL=e + END IF + IF (jt < Mesh%nt) THEN + eR=Mesh%e(jt+1) + ELSE + eR=e + END IF + +#else + ! periodic + IF (jt > 1) THEN + eL=Mesh%e(jt-1) + ELSE + eL=Mesh%e(Mesh%nt) + END IF + IF (jt < Mesh%nt) THEN + eR=Mesh%e(jt+1) + ELSE + eR=Mesh%e(1) + END IF +#endif + !//////////////////////////////////////////////////////////// + + w_min(jt) = MIN(MINVAL(phys(e%nu)%u(lk)),MINVAL(phys(eL%nu)%u(lk)),MINVAL(phys(eR%nu)%u(lk))) + w_max(jt) = MAX(MAXVAL(phys(e%nu)%u(lk)),MAXVAL(phys(eL%nu)%u(lk)),MAXVAL(phys(eR%nu)%u(lk))) + !------------------------------------------- + !------------------------------------------ + ! Definition of the minimum and maximum values of the neighbour elements' second derivative at time n,0 + ALLOCATE(coefficient(e%nsommets)) + !ALLOCATE(coefficient(e%nsommets-1)) + DO l=1,e%nsommets + coefficient(l)=e%eval_der2(phys_d_control(e%nu), e%x(:,l)) + !coefficient=e%der_sec(phys_control(eL%nu)%u(lk)) + END DO + + ALLOCATE(coefficient1(eL%nsommets)) + !ALLOCATE(coefficient1(eL%nsommets-1)) + DO l=1,eL%nsommets + !coefficient1=eL%der_sec(phys_control(eL%nu)%u(lk)) + coefficient1(l)=eL%eval_der2(phys_d_control(eL%nu), eL%x(:,l)) + END DO + + !ALLOCATE(coefficient2(eR%nsommets-1)) + !coefficient2=eR%der_sec(phys_control(eR%nu)%u(lk)) + ALLOCATE(coefficient2(eR%nsommets)) + DO l=1,eR%nsommets + coefficient2(l)=eR%eval_der2(phys_d_control(eR%nu), eR%x(:,l)) + END DO + + u2_min(jt)=MIN(MINVAL(coefficient%u(lk)),MINVAL(coefficient1%u(lk)),MINVAL(coefficient2%u(lk))) + u2_max(jt)=MAX(MAXVAL(coefficient%u(lk)),MAXVAL(coefficient1%u(lk)),MAXVAL(coefficient2%u(lk))) + + + ALLOCATE(u1_derL(eL%nsommets)) + DO l=1,eL%nsommets + u1_derL(l)=eL%eval_der(phys_d_control(eL%nu),eL%x(:,l)) + END DO + + ALLOCATE(u1_der(e%nsommets)) + DO l=1,e%nsommets + u1_der(l)=e%eval_der(phys_d_control(e%nu),e%x(:,l)) + END DO + + ALLOCATE(u1_derR(eR%nsommets)) + DO l=1,eR%nsommets + u1_derR(l)=eR%eval_der(phys_d_control(eR%nu),eR%x(:,l)) + END DO + + u1_derL_mean(jt)=sum(u1_derL%u(lk))/REAL(eL%nsommets) + u1_der_mean(jt)=sum(u1_der%u(lk))/REAL(e%nsommets) + u1_derR_mean(jt)=sum(u1_derR%u(lk))/REAL(eR%nsommets) + coefficient_mean(jt)=sum(coefficient%u(lk))/REAL(e%nsommets) + + vL(jt)=u1_der_mean(jt)-e%volume*0.5*coefficient_mean(jt) + vR(jt)=u1_der_mean(jt)+e%volume*0.5*coefficient_mean(jt) + + vL_min(jt)=min(u1_derL_mean(jt),u1_der_mean(jt)) + vL_max(jt)=max(u1_derL_mean(jt),u1_der_mean(jt)) + vR_min(jt)=min( u1_der_mean(jt),u1_derR_mean(jt)) + vR_max(jt)=max( u1_der_mean(jt),u1_derR_mean(jt)) + + DEALLOCATE(coefficient,coefficient1, coefficient2) + DEALLOCATE(u1_der,u1_derR,u1_derL) + + !========================================================= + !========================================================= + + END DO + + + + !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + !""""""""""""""" MOOD DETECTION CRITERIA """""""""""""""""""""""""""""""""""""""""""""""""""" + !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + + + Loop: DO jt=1,Mesh%nt + e=Mesh%e(jt) + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! NaN detection + !..................................... + ! at n+1 + IF (.NOT. ALLOCATED(deb)) ALLOCATE(deb(e%nsommets)) + + deb=debug%ua(e%nu,k_iter) + DO l=1, e%nsommets + DO k=1,n_vars + IF (deb(l)%u(k).NE.deb(l)%u(k) ) THEN + Mesh%e(jt)%diag=NAN_criteria + CYCLE loop + ENDIF + ENDDO + ENDDO + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! PAD test: for fluids, assumes: 1-> density, n_vars-> pressure + !................................................................................................................................................... + IF (MINVAL(phys_d(e%nu)%u(1)).LE.0. .OR. MINVAL(phys_d(e%nu)%u(n_vars)).LE.0.) THEN + Mesh%e(jt)%diag=PAD_criteria + + CYCLE loop + ENDIF + + val_min=MINVAL(phys_d(e%nu)%u(lk)) ! at n+1 + val_max=MAXVAL(phys_d(e%nu)%u(lk)) + val_min_n=MINVAL(phys(e%nu)%u(lk)) ! at n + val_max_n=MAXVAL(phys(e%nu)%u(lk)) + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! plateau detection + !............................................... + IF (ABS(w_max(jt)-w_min(jt)) .LT. e%volume**3) THEN + Mesh%e(jt)%diag= plateau + CYCLE Loop + ENDIF + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! Extrema detection DMP+u2 + !..................................................................... + eps=coeff *MAX(ABS(w_max(jt)-w_min(jt))*eps1,eps2) ! at n + + IF (val_min.LT.w_min(jt)-eps.OR.val_max.GT.w_max(jt)+eps) THEN +!!$ + + IF (e%nsommets .eq. 2) then + Mesh%e(jt)%diag=DMP_B1 + CYCLE Loop + ELSE + + IF (vL(jt) .gt. u1_der_mean(jt)) THEN + ratio=(vL_max(jt)-u1_der_mean(jt))/(vL(jt)-u1_der_mean(jt)) + alphaL=min(1., ratio) + ELSE IF (vL(jt) .eq. u1_der_mean(jt)) THEN + + alphaL=1. + ELSE + ratio=(vL_min(jt)-u1_der_mean(jt))/(vL(jt)-u1_der_mean(jt)) + alphaL=min(1.,ratio) + END IF + + IF (vR(jt) .gt. u1_der_mean(jt)) THEN + ratio=(vR_max(jt)-u1_der_mean(jt))/(vR(jt)-u1_der_mean(jt)) + alphaR=min(1., ratio) + ELSE IF (vR(jt) .eq. u1_der_mean(jt)) THEN + + alphaR=1. + ELSE + ratio=(vR_min(jt)-u1_der_mean(jt))/(vR(jt)-u1_der_mean(jt)) + alphaR=min(1.,ratio) + END IF + + smooth_sensor=min(alphaR,alphaL) + + IF (abs(smooth_sensor) .ge. 1.-Tiny(1.0)) THEN + Mesh%e(jt)%diag=DMP_nou2 + + CYCLE Loop + ELSE + Mesh%e(jt)%diag=DMP_u2_2 + CYCLE Loop + END IF + + ENDIF + + +!!!!!!!!!!!!!! + + ELSE + Mesh%e(jt)%diag=0 + cycle Loop + END IF + ! END DO Loop_loc + !DEALLOCATE(coefficient,coefficient1,coefficient2,u2_minloc,u2_maxloc) + DEALLOCATE(deb) + ENDDO Loop + + END DO ListVar + DEALLOCATE(phys,phys_d, phys_control, phys_d_control) + DEALLOCATE(v_min,v_max,w_min,w_max,u2_min,u2_max,vd_min,vd_max) + DEALLOCATE(VL, vR, vL_min, vL_max, vr_min, vr_max) + DEALLOCATE(u1_derL_mean,u1_der_mean,u1_derR_mean,coefficient_mean) + + !----------------------------------------------------------------------------------------------------------------- + !----------------------------------------------------------------------------------------------------------------- + !----------------------------------------------------------------------------------------------------------------- + !---------------- Update of the Indicators that allow the scheme switch --------------------------- + + DO jt=1, Mesh%nt + + SELECT CASE(Mesh%e(jt)%diag) + CASE(0,Plateau,DMP_nou2) + ! In this case we don't touch the indicator + CASE(DMP_B1,DMP_u2_1,DMP_u2_2) + Mesh%e(jt)%type_flux=flux_mood + ! In this case we switch to a more diffusive scheme + CASE(PAD_criteria,NAN_criteria) + Mesh%e(jt)%type_flux=theflux2 + ! In this case we take a first order monotone scheme + CASE default + PRINT*, "in test, bad behavior, jt=", jt + STOP + END SELECT + ! + ENDDO +END SUBROUTINE test END MODULE timestepping diff --git a/Src1D/utils.f90 b/Src1D/utils.f90 index 90721d3..f3e179f 100755 --- a/Src1D/utils.f90 +++ b/Src1D/utils.f90 @@ -12,57 +12,54 @@ !!! Correspondance: remi.abgrall@math.uzh.ch !!! ------------------------------------------ MODULE utils - USE element_class - USE variable_def - USE param2d - USE init_bc +! USE param2d USE PRECISION IMPLICIT NONE PRIVATE - PUBLIC:: fonc + ! PUBLIC:: fonc CONTAINS - TYPE(Pvar) FUNCTION fonc(x,DATA) - REAL(dp), INTENT(in) :: x - TYPE(donnees), INTENT(inout):: DATA + ! TYPE(Pvar) FUNCTION fonc(x,DATA) + ! REAL(dp), INTENT(in) :: x + ! TYPE(donnees), INTENT(inout):: DATA - REAL(dp):: y,z - INTEGER:: p - y=x!/lenght - fonc = IC(x,DATA) - END FUNCTION fonc + ! REAL(dp):: y,z + ! INTEGER:: p + ! y=x!/lenght + ! fonc = IC(x,DATA) + ! END FUNCTION fonc REAL(dp) FUNCTION fbon(x) REAL(dp), INTENT(in)::x - REAL(dp):: s, r + REAL(dp):: s, r, pi=ACOS(-1._dp) fbon=SIN(2.d0*pi*x) END FUNCTION fbon REAL(dp) FUNCTION fonc_d(x) REAL(dp), INTENT(in):: x ! integer, intent(in):: k - REAL(dp):: y + REAL(dp):: y, pi=ACOS(-1._dp) INTEGER:: p p=1.d0 fonc_d=2*pi*p*COS(2*pi*x*p) END FUNCTION fonc_d - FUNCTION interpol(e,x,u) RESULT(v) - REAL(dp), INTENT(in):: x - TYPE(element), INTENT(in):: e - TYPE(Pvar),DIMENSION(:), INTENT(in):: u - REAL(dp),DIMENSION(n_vars):: v - REAL(dp), DIMENSION(e%nsommets):: base - INTEGER:: i - REAL(dp), DIMENSION(2):: y - y(1)=x; y(2)=1.d0-x - v=0.0d0 - DO i=1,e%nsommets - base(i)=e%base(i,y) - ENDDO - DO i=1,n_vars - v(i)=SUM(base*u%u(i)) - ENDDO - END FUNCTION interpol + ! FUNCTION interpol(e,x,u) RESULT(v) + ! REAL(dp), INTENT(in):: x + ! TYPE(element), INTENT(in):: e + ! TYPE(Pvar),DIMENSION(:), INTENT(in):: u + ! REAL(dp),DIMENSION(n_vars):: v + ! REAL(dp), DIMENSION(e%nsommets):: base + ! INTEGER:: i + ! REAL(dp), DIMENSION(2):: y + ! y(1)=x; y(2)=1.d0-x + ! v=0.0d0 + ! DO i=1,e%nsommets + ! base(i)=e%base(i,y) + ! ENDDO + ! DO i=1,n_vars + ! v(i)=SUM(base*u%u(i)) + ! ENDDO + ! END FUNCTION interpol END MODULE utils diff --git a/Src1D/utils_sw.f90 b/Src1D/utils_sw.f90 new file mode 100644 index 0000000..028ab82 --- /dev/null +++ b/Src1D/utils_sw.f90 @@ -0,0 +1,153 @@ +!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) +!!! RESIDUAL DISTRIBUTION METHOD +!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D +!!! +!!! Authors: +!!! Remi Abgrall (University of Zurich), +!!! Paola Bacigaluppi (University of Zurich), +!!! Svetlana Tokareva (University of Zurich) +!!! Institute of Mathematics and Institute of Computational Sciences +!!! University of Zurich +!!! July 10, 2018 +!!! Correspondance: remi.abgrall@math.uzh.ch +!!! ------------------------------------------ +MODULE utils + USE PRECISION +! USE param2d + IMPLICIT NONE + PRIVATE + PUBLIC:: bathymetry, deriv_bathymetry +CONTAINS + + REAL(dp) FUNCTION bathymetry(test,x) + INTEGER, INTENT(in):: test + REAL(dp), INTENT(in):: x + REAL(dp) ::x0,r,b + + SELECT CASE(test) + CASE(21, 20,22,23,24,25,19,14,26) !immersed smooth bumb + x0=10._dp + r=5._dp + IF (x>x0-r .AND. x10_dp .AND. x<15_dp) THEN + b=0.02_dp*(x-10._dp) + ELSE + IF (x>20_dp .AND. x<21) THEN + b=-0.1*(x-21_dp) + ELSE + IF (x .GE. 15_dp .AND. x .LE. 20_dp) THEN + b= 0.1_dp + ELSE + b=0_dp + END IF + END IF + END IF + CASE default + PRINT*, "ERROR CASE NOT DEFINED IN bathymetry" + STOP + + END SELECT + bathymetry=b + END FUNCTION bathymetry + + REAL(dp) FUNCTION deriv_bathymetry(test,x) + INTEGER, INTENT(in):: test + REAL(dp), INTENT(in):: x + REAL(dp) ::x0,r,b + + SELECT CASE(test) + CASE(21, 20,22,23,24,25,19,14,26) !immersed smooth bumb + x0=10._dp + r=5._dp + IF (x>x0-r .AND. x10_dp .AND. x<15_dp) THEN + b=0.02_dp + ELSE + IF (x>20_dp .AND. x<21) THEN + b=-0.1 + ELSE + IF (x .GE. 15_dp .AND. x .LE. 20_dp) THEN + b= 0._dp + ELSE + b=0_dp + END IF + END IF + END IF + CASE default + PRINT*, "ERROR CASE NOT DEFINED IN bathymetry" + STOP + + END SELECT + deriv_bathymetry=b + END FUNCTION deriv_bathymetry + + + + REAL(dp) FUNCTION fbon(x) + REAL(dp), INTENT(in)::x + REAL(dp):: s, r, pi=ACOS(-1._dp) + fbon=SIN(2.d0*pi*x) + END FUNCTION fbon + + REAL(dp) FUNCTION fonc_d(x) + REAL(dp), INTENT(in):: x + ! integer, intent(in):: k + REAL(dp):: y, pi=ACOS(-1._dp) + INTEGER:: p + p=1.d0 + fonc_d=2*pi*p*COS(2*pi*x*p) + END FUNCTION fonc_d + +END MODULE utils diff --git a/Src1D/variable_def_burgers.f90 b/Src1D/variable_def_burgers.f90 new file mode 100644 index 0000000..ea5ccd2 --- /dev/null +++ b/Src1D/variable_def_burgers.f90 @@ -0,0 +1,154 @@ +!================================================== +! Definition of variables for the 1D burgers equation +! u_tt - a u^2_x = 0 +!================================================== +MODULE variable_def + USE algebra + USE precision + + IMPLICIT NONE + INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables + INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions + REAL(dp), PARAMETER:: pi=ACOS(-1._dp) ! pi + REAL(dp), PUBLIC, PARAMETER:: a = 1.0_dp + + ! Type for the vector of primitive variables + TYPE, PUBLIC :: PVar + INTEGER :: NVars = n_vars + REAL(dp), DIMENSION(n_vars) :: U + + CONTAINS + PROCEDURE, PUBLIC:: flux => flux_w + PROCEDURE, PUBLIC:: source => source_b + PROCEDURE, PUBLIC:: entropy_flux => flux_scal_e + PROCEDURE, PUBLIC:: evalues => evalues_w + PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w + PROCEDURE, PUBLIC:: rvectors => rvectors_w + PROCEDURE, PUBLIC:: lvectors => lvectors_w + PROCEDURE, PUBLIC:: Jacobian => Jacobian_w + END TYPE PVar + + PRIVATE + PUBLIC:: convert_cons2prim, entropyProduct + + +CONTAINS + +!--------------------------------------------- +! Convert conservative variables to primitive +!--------------------------------------------- + FUNCTION convert_cons2prim(Q) RESULT(W) + TYPE(Pvar), INTENT(in) :: Q + TYPE(Pvar) :: W + W%U = Q%U + END FUNCTION convert_cons2prim + +!--------------------------------------------- +! Convert primitive variables to conservative +!--------------------------------------------- + FUNCTION convert_prim2cons(W) RESULT(Q) + TYPE(Pvar), INTENT(in) :: W + TYPE(Pvar) :: Q + Q%U = W%U + END FUNCTION convert_prim2cons + + +!!!!----------------------- + + + FUNCTION flux_w(e,x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), DIMENSION(n_dim) :: f + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ + JJ=Jacobian_w(e,x) + F(1)%u(:)=a*0.5_dp *e%u*e%u + + END FUNCTION flux_w + + FUNCTION source_b(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u = 0._dp + END FUNCTION source_b + + + !!! Entropy flux for the Burgers Equation + + FUNCTION flux_scal_e(e, x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), dimension(n_dim) :: f + + f(1)%U(1) = a*1_dp/3_dp*e%u(1)**3_dp + + END FUNCTION flux_scal_e + + + + + FUNCTION Jacobian_w(e,x) RESULT(J) + CLASS(Pvar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J + + J(1,1,1) = a*e%u(1) + + END FUNCTION Jacobian_w + + FUNCTION evalues_w(e,x,n) RESULT(lambda) + ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J + INTEGER:: i + + lambda(1,1) = a*e%u(1); + + END FUNCTION evalues_w + + REAL(dp) FUNCTION spectral_radius_w(e,x,n) + ! compute the maximum value of eigenvalues: + ! max_i {lambda_ii} + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + + spectral_radius_w = a*e%u(1) + + END FUNCTION spectral_radius_w + + FUNCTION rvectors_w(e,n) RESULT(R) + ! right e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + + R(1,1) = 1._dp; + END FUNCTION rvectors_w + + FUNCTION lvectors_w(e,n) RESULT(L) + ! left e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + + L(1,1) = 1.0_dp; + + END FUNCTION lvectors_w + + + FUNCTION entropyProduct(v1,v2) RESULT(prod) + CLASS(PVar), INTENT(in) :: v1,v2 + REAL(dp) :: prod + prod = v1%U(1)*v2%U(1) + END FUNCTION entropyProduct + !-------------------------- + + +END MODULE variable_def diff --git a/Src1D/variable_def_damped_scalar.f90 b/Src1D/variable_def_damped_scalar.f90 new file mode 100644 index 0000000..1cb741d --- /dev/null +++ b/Src1D/variable_def_damped_scalar.f90 @@ -0,0 +1,152 @@ +!================================================== +! Definition of variables for the 1D damped linear transport equation +! u_t + u_x + u = 0 +!================================================== +MODULE variable_def + USE algebra + + IMPLICIT NONE + INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables + INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions + REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi + REAL(dp), PUBLIC, PARAMETER:: a = 1.0 + + ! Type for the vector of primitive variables + TYPE, PUBLIC :: PVar + INTEGER :: NVars = n_vars + REAL(dp), DIMENSION(n_vars) :: U + + CONTAINS + PROCEDURE, PUBLIC:: flux => flux_w + PROCEDURE, PUBLIC:: source => source_s + PROCEDURE, PUBLIC:: entropy_flux => flux_scal_e !!! Introduced for the entropy correction! + PROCEDURE, PUBLIC:: evalues => evalues_w + PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w + PROCEDURE, PUBLIC:: rvectors => rvectors_w + PROCEDURE, PUBLIC:: lvectors => lvectors_w + PROCEDURE, PUBLIC:: Jacobian => Jacobian_w + END TYPE PVar + + PRIVATE + PUBLIC:: convert_cons2prim, entropyProduct + + +CONTAINS + +!--------------------------------------------- +! Convert conservative variables to primitive +!--------------------------------------------- + FUNCTION convert_cons2prim(Q) RESULT(W) + TYPE(Pvar), INTENT(in) :: Q + TYPE(Pvar) :: W + W%U = Q%U + END FUNCTION convert_cons2prim + +!--------------------------------------------- +! Convert primitive variables to conservative +!--------------------------------------------- + FUNCTION convert_prim2cons(W) RESULT(Q) + TYPE(Pvar), INTENT(in) :: W + TYPE(Pvar) :: Q + Q%U = W%U + END FUNCTION convert_prim2cons + + +!!!!----------------------- + + + FUNCTION flux_w(e,x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), DIMENSION(n_dim) :: f + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ + JJ=Jacobian_w(e,x) + F(1)%u(:)=MATMUL(JJ(:,:,1),e%u) + + END FUNCTION flux_w + + + FUNCTION source_s(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u = -e%u + END FUNCTION source_s + + FUNCTION Jacobian_w(e,x) RESULT(J) + CLASS(Pvar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J + + J(1,1,1) = a + + END FUNCTION Jacobian_w + + FUNCTION evalues_w(e,x,n) RESULT(lambda) + ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J + INTEGER:: i + + lambda(1,1) = a; + + END FUNCTION evalues_w + + !!! Entropy flux for the scalar equation + FUNCTION flux_scal_e(e, x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), dimension(n_dim) :: f +! transport + f(1)%U(1) = 0.5_dp*e%u(1)**2 + + END FUNCTION flux_scal_e + + REAL(dp) FUNCTION spectral_radius_w(e,x,n) + ! compute the maximum value of eigenvalues: + ! max_i {lambda_ii} + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + + spectral_radius_w = a + + END FUNCTION spectral_radius_w + + FUNCTION rvectors_w(e,n) RESULT(R) + ! right e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + + R(1,1) = 1.; + END FUNCTION rvectors_w + + FUNCTION lvectors_w(e,n) RESULT(L) + ! left e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + + L(1,1) = 1.0; + + END FUNCTION lvectors_w + + + FUNCTION entropyProduct(v1,v2) RESULT(prod) + CLASS(PVar), INTENT(in) :: v1,v2 + REAL(dp) :: prod + prod = v1%U(1)*v2%U(1) + END FUNCTION entropyProduct + !-------------------------- + + + !-------------------------- + + +END MODULE variable_def diff --git a/Src1D/variable_def_euler.f90 b/Src1D/variable_def_euler.f90 index 30de68b..4a9b351 100644 --- a/Src1D/variable_def_euler.f90 +++ b/Src1D/variable_def_euler.f90 @@ -46,6 +46,7 @@ MODULE variable_def CONTAINS PROCEDURE, PUBLIC:: flux => flux_eul + PROCEDURE, PUBLIC:: source => source_euler ! PROCEDURE, PUBLIC:: evalues => evalues_eul PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_eul PROCEDURE, PUBLIC:: rvectors => rvectors_eul @@ -128,7 +129,7 @@ CONTAINS Q%U(2) = W%U(1)*W%U(2) ! q3 = E = rho*eps + 0.5*rho*u^2.0 eps = epsEOS(W%U(1),W%U(3)) - Q%U(3) = W%U(1)*eps + 0.5*W%U(1)*W%U(2)**2.0 + Q%U(3) = W%U(1)*eps + 0.5_dp*W%U(1)*W%U(2)**2.0_dp END FUNCTION convert_prim2cons @@ -143,7 +144,7 @@ CONTAINS REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 REAL(dp), DIMENSION(n_vars,n_vars):: J REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ - REAL(dp),DIMENSION(n_dim):: v=0. + REAL(dp),DIMENSION(n_dim):: v=0._dp JJ=Jacobian_eul(e,v) J(:,:) = JJ(:,:,1)*n(1) @@ -155,18 +156,26 @@ CONTAINS TYPE(PVar), DIMENSION(n_dim) :: f REAL(dp) :: eps, p - eps = Var%u(3)/Var%u(1) - 0.5*( Var%u(2)/Var%u(1))**2 + eps = Var%u(3)/Var%u(1) - 0.5_dp*( Var%u(2)/Var%u(1))**2_dp ! print*, 'p in flux' ! print*, 'Var = ', Var%u p = pEOS(Var%u(1),eps) ! print*, 'after p in flux' F(1)%u(1) = Var%u(2) - F(1)%u(2) = Var%u(2)**2/Var%u(1) + p + F(1)%u(2) = Var%u(2)**2_dp/Var%u(1) + p F(1)%u(3) = Var%u(2)*( Var%u(3) + p )/Var%u(1) END FUNCTION flux_eul + FUNCTION source_euler(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u = 0._dp + END FUNCTION source_euler + FUNCTION Jacobian_eul(Var,x) RESULT(J) CLASS(Pvar), INTENT(in) :: Var REAL(dp), DIMENSION(n_dim), INTENT(in) :: x @@ -178,20 +187,20 @@ CONTAINS u = Var%u(2)/Var%u(1) - Vi2 = u**2. + Vi2 = u**2._dp H = (Var%u(3) + p)/Var%u(1) J=0. - J(1,:,1) = (/ 0.0, 1.0, 0.0 /) - J(2,:,1) = (/ -u**2. + 0.5*(gmm-1.)*Vi2, (3.-gmm)*u, gmm-1. /) - J(3,:,1) = (/ u*( 0.5*(gmm-1.)*Vi2 - H ), H - (gmm-1.)*u**2., gmm*u /) + J(1,:,1) = (/ 0.0_dp, 1.0_dp, 0.0_dp /) + J(2,:,1) = (/ -u**2._dp + 0.5_dp*(gmm-1._dp)*Vi2, (3._dp-gmm)*u, gmm-1._dp /) + J(3,:,1) = (/ u*( 0.5_dp*(gmm-1.)*Vi2 - H ), H - (gmm-1._dp)*u**2_dp, gmm*u /) END FUNCTION Jacobian_eul FUNCTION AbsJacobian_eul(Var,x) RESULT(J) !compute abs value of jacobian matrix - REAL(dp), DIMENSION(n_dim), PARAMETER:: nn=(/1.0/),xx=(/1.0/) + REAL(dp), DIMENSION(n_dim), PARAMETER:: nn=(/1.0_dp/),xx=(/1.0_dp/) CLASS(Pvar), INTENT(in) :: Var REAL(dp), DIMENSION(n_dim), INTENT(in) :: x REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J @@ -220,7 +229,7 @@ CONTAINS REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J REAL(dp) :: un, c, p, eps - eps = Var%u(3)/Var%u(1) - 0.5*( Var%u(2)**2.)/Var%u(1)**2. + eps = Var%u(3)/Var%u(1) - 0.5_dp*( Var%u(2)**2._dp)/Var%u(1)**2._dp p = pEOS(Var%u(1),eps) c = SoundSpeed(Var%u(1),p) @@ -263,9 +272,9 @@ CONTAINS E = Q%U(3) H = (E+p)/rho - R(:,1) = (/ 1.0, u-a, H-u*a /) - R(:,2) = (/ 1.0, u, 0.5*u**2. /) - R(:,3) = (/ 1.0, u+a, H+u*a /) + R(:,1) = (/ 1.0_dp, u-a, H-u*a /) + R(:,2) = (/ 1.0_dp, u, 0.5_dp*u**2._dp /) + R(:,3) = (/ 1.0_dp, u+a, H+u*a /) END FUNCTION rvectors_eul @@ -295,11 +304,11 @@ CONTAINS INTEGER:: l J= Jacobian_eul(e,x) - Nmat=0 + Nmat=0_dp DO l=1, n_ord Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) ENDDO - Nmat =0.!Inverse(Nmat) + Nmat =0._dp!Inverse(Nmat) END FUNCTION Nmat_eul FUNCTION min_mat_eul(e, x, n, alpha) RESULT (Ap) diff --git a/Src1D/variable_def_scalar.f90 b/Src1D/variable_def_scalar.f90 new file mode 100644 index 0000000..c48b5be --- /dev/null +++ b/Src1D/variable_def_scalar.f90 @@ -0,0 +1,156 @@ +!================================================== +! Definition of variables for the 1D wave equation +! u_tt - a^2 u_xx = 0 +! in the form of a 2 x 2 linear system +! v_t - a^2 w_x = 0 +! w_t - v_x = 0 +! with v = u_t, w = u_x +!================================================== +MODULE variable_def + USE algebra + + IMPLICIT NONE + INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables + INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions + REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi + REAL(dp), PUBLIC, PARAMETER:: a = 1.0 + + ! Type for the vector of primitive variables + TYPE, PUBLIC :: PVar + INTEGER :: NVars = n_vars + REAL(dp), DIMENSION(n_vars) :: U + + CONTAINS + PROCEDURE, PUBLIC:: flux => flux_w + PROCEDURE, PUBLIC:: source => source_s + PROCEDURE, PUBLIC:: entropy_flux => flux_scal_e !!! Introduced for the entropy correction! + PROCEDURE, PUBLIC:: evalues => evalues_w + PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w + PROCEDURE, PUBLIC:: rvectors => rvectors_w + PROCEDURE, PUBLIC:: lvectors => lvectors_w + PROCEDURE, PUBLIC:: Jacobian => Jacobian_w + END TYPE PVar + + PRIVATE + PUBLIC:: convert_cons2prim, entropyProduct + + +CONTAINS + +!--------------------------------------------- +! Convert conservative variables to primitive +!--------------------------------------------- + FUNCTION convert_cons2prim(Q) RESULT(W) + TYPE(Pvar), INTENT(in) :: Q + TYPE(Pvar) :: W + W%U = Q%U + END FUNCTION convert_cons2prim + +!--------------------------------------------- +! Convert primitive variables to conservative +!--------------------------------------------- + FUNCTION convert_prim2cons(W) RESULT(Q) + TYPE(Pvar), INTENT(in) :: W + TYPE(Pvar) :: Q + Q%U = W%U + END FUNCTION convert_prim2cons + + +!!!!----------------------- + + + FUNCTION flux_w(e,x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), DIMENSION(n_dim) :: f + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ + JJ=Jacobian_w(e,x) + F(1)%u(:)=MATMUL(JJ(:,:,1),e%u) + + END FUNCTION flux_w + + + FUNCTION source_s(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u = 0._dp + END FUNCTION source_s + + FUNCTION Jacobian_w(e,x) RESULT(J) + CLASS(Pvar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J + + J(1,1,1) = a + + END FUNCTION Jacobian_w + + FUNCTION evalues_w(e,x,n) RESULT(lambda) + ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J + INTEGER:: i + + lambda(1,1) = a; + + END FUNCTION evalues_w + + !!! Entropy flux for the scalar equation + FUNCTION flux_scal_e(e, x) RESULT(f) + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), dimension(n_dim) :: f +! transport + f(1)%U(1) = 0.5_dp*e%u(1)**2 + + END FUNCTION flux_scal_e + + REAL(dp) FUNCTION spectral_radius_w(e,x,n) + ! compute the maximum value of eigenvalues: + ! max_i {lambda_ii} + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + + spectral_radius_w = a + + END FUNCTION spectral_radius_w + + FUNCTION rvectors_w(e,n) RESULT(R) + ! right e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + + R(1,1) = 1.; + END FUNCTION rvectors_w + + FUNCTION lvectors_w(e,n) RESULT(L) + ! left e-vectors + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + + L(1,1) = 1.0; + + END FUNCTION lvectors_w + + + FUNCTION entropyProduct(v1,v2) RESULT(prod) + CLASS(PVar), INTENT(in) :: v1,v2 + REAL(dp) :: prod + prod = v1%U(1)*v2%U(1) + END FUNCTION entropyProduct + !-------------------------- + + + !-------------------------- + + +END MODULE variable_def diff --git a/Src1D/variable_def_scalar_1D.f90 b/Src1D/variable_def_scalar_1D.f90 deleted file mode 100644 index 9193ae4..0000000 --- a/Src1D/variable_def_scalar_1D.f90 +++ /dev/null @@ -1,214 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -!================================================== -! Definition of variables for the 1D wave equation -! u_tt - a^2 u_xx = 0 -! in the form of a 2 x 2 linear system -! v_t - a^2 w_x = 0 -! w_t - v_x = 0 -! with v = u_t, w = u_x -!================================================== -MODULE variable_def - USE algebra - USE PRECISION - IMPLICIT NONE - INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables - INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions - REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi - REAL(dp), PUBLIC, PARAMETER:: a = 1.0 - REAL(dp), PUBLIC, PARAMETER:: aa = 100., bb = 100. - - ! Type for the vector of primitive variables - TYPE, PUBLIC :: PVar - INTEGER :: NVars = n_vars - REAL(dp), DIMENSION(n_vars) :: U - - CONTAINS - PROCEDURE, PUBLIC:: flux => flux_w - PROCEDURE, PUBLIC:: evalues => evalues_w - PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w - PROCEDURE, PUBLIC:: rvectors => rvectors_w - PROCEDURE, PUBLIC:: lvectors => lvectors_w - PROCEDURE, PUBLIC:: Jacobian => Jacobian_w - PROCEDURE, PUBLIC:: Nmat => Nmat_w - END TYPE PVar - - PRIVATE - PUBLIC:: convert_cons2prim - - -CONTAINS - - !--------------------------------------------- - ! Convert conservative variables to primitive - !--------------------------------------------- - FUNCTION convert_cons2prim(Q) RESULT(W) - TYPE(Pvar), INTENT(in) :: Q - TYPE(Pvar) :: W - W%U = Q%U - END FUNCTION convert_cons2prim - - !--------------------------------------------- - ! Convert primitive variables to conservative - !--------------------------------------------- - FUNCTION convert_prim2cons(W) RESULT(Q) - TYPE(Pvar), INTENT(in) :: W - TYPE(Pvar) :: Q - Q%U = W%U - END FUNCTION convert_prim2cons - - -!!!!----------------------- - - - FUNCTION roe_w(e,u,n) RESULT (J) - ! evaluate a roe average to estimate a rough speed for - ! Burman jump operator - CLASS(Pvar), INTENT(in):: e - REAL(dp), DIMENSION(N_Vars), INTENT(in):: u - REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 - REAL(dp), DIMENSION(n_vars,n_vars):: J - REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ - REAL(dp), DIMENSION(n_dim):: v=0. - JJ=Jacobian_w(e,v) - J(:,:) = JJ(:,:,1)*n(1) - - END FUNCTION roe_w - - FUNCTION flux_w(e,x) RESULT(f) - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - TYPE(PVar), DIMENSION(n_dim) :: f - F(1)%u(:)=e%u(:) ! linear advection - ! F(1)%u(:)=0.5*e%u(:)**2 ! burger - END FUNCTION flux_w - - FUNCTION Jacobian_w(e,x) RESULT(J) - CLASS(Pvar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J - INTEGER:: l - J=1. - DO l=1, n_vars - ! J(:,l,1)=e%u - ENDDO - END FUNCTION Jacobian_w - - FUNCTION evalues_w(e,x,n) RESULT(lambda) - ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - - REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: i - - ! lambda=1. ! linear advection - lambda=e%u(1) ! burger - - END FUNCTION evalues_w - - REAL(dp) FUNCTION spectral_radius_w(e,x,n) - ! compute the maximum value of eigenvalues: - ! max_i {lambda_ii} - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - - lambda = evalues_w(e,x,n) - spectral_radius_w = MAXVAL(ABS(lambda)) - - END FUNCTION spectral_radius_w - - FUNCTION rvectors_w(e,n) RESULT(R) - ! right e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - - R(:,:) = 1.0 - - END FUNCTION rvectors_w - - FUNCTION lvectors_w(e,n) RESULT(L) - ! left e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - L(:,:) = 1.0 - - END FUNCTION lvectors_w - - FUNCTION Nmat_w(e, n_ord, grad, x) RESULT (Nmat) - CLASS(Pvar), INTENT(in) :: e - INTEGER, INTENT(in) :: n_ord - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim,n_ord), INTENT(in) :: grad - REAL(dp), DIMENSION(n_vars,n_vars) :: Nmat - REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: l - - J= Jacobian_w(e,x) - Nmat=0 - DO l=1, n_ord - Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) - ENDDO - Nmat =0.!Inverse(Nmat) - - END FUNCTION Nmat_w - - FUNCTION min_mat_w(e, x, n, alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(IN) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MIN(lambda(:,:),alpha), L) ) - - END FUNCTION min_mat_w - - FUNCTION max_mat_w(e,x,n,alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MAX(lambda(:,:),alpha), L) ) - - END FUNCTION max_mat_w - !-------------------------- - - -END MODULE variable_def diff --git a/Src1D/variable_def_scalar_1D.f90~ b/Src1D/variable_def_scalar_1D.f90~ deleted file mode 100644 index 4c96fae..0000000 --- a/Src1D/variable_def_scalar_1D.f90~ +++ /dev/null @@ -1,214 +0,0 @@ -!!! HIGH ORDER IN SPACE AND TIME DEFERRED CORRECTION (EXPLICIT) -!!! RESIDUAL DISTRIBUTION METHOD -!!! DESIGNED FOR THE SYSTEM GIVEN BY THE EULER EQUATIONS in 1D and 2D -!!! -!!! Authors: -!!! Remi Abgrall (University of Zurich), -!!! Paola Bacigaluppi (University of Zurich), -!!! Svetlana Tokareva (University of Zurich) -!!! Institute of Mathematics and Institute of Computational Sciences -!!! University of Zurich -!!! July 10, 2018 -!!! Correspondance: remi.abgrall@math.uzh.ch -!!! ------------------------------------------ -!================================================== -! Definition of variables for the 1D wave equation -! u_tt - a^2 u_xx = 0 -! in the form of a 2 x 2 linear system -! v_t - a^2 w_x = 0 -! w_t - v_x = 0 -! with v = u_t, w = u_x -!================================================== -MODULE variable_def - USE algebra - USE PRECISION - IMPLICIT NONE - INTEGER, PUBLIC, PARAMETER:: n_vars = 1 ! number of primitive variables - INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions - REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi - REAL(dp), PUBLIC, PARAMETER:: a = 1.0 - REAL(dp), PUBLIC, PARAMETER:: aa = 100., bb = 100. - - ! Type for the vector of primitive variables - TYPE, PUBLIC :: PVar - INTEGER :: NVars = n_vars - REAL(dp), DIMENSION(n_vars) :: U - - CONTAINS - PROCEDURE, PUBLIC:: flux => flux_w - PROCEDURE, PUBLIC:: evalues => evalues_w - PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w - PROCEDURE, PUBLIC:: rvectors => rvectors_w - PROCEDURE, PUBLIC:: lvectors => lvectors_w - PROCEDURE, PUBLIC:: Jacobian => Jacobian_w - PROCEDURE, PUBLIC:: Nmat => Nmat_w - END TYPE PVar - - PRIVATE - PUBLIC:: convert_cons2prim - - -CONTAINS - - !--------------------------------------------- - ! Convert conservative variables to primitive - !--------------------------------------------- - FUNCTION convert_cons2prim(Q) RESULT(W) - TYPE(Pvar), INTENT(in) :: Q - TYPE(Pvar) :: W - W%U = Q%U - END FUNCTION convert_cons2prim - - !--------------------------------------------- - ! Convert primitive variables to conservative - !--------------------------------------------- - FUNCTION convert_prim2cons(W) RESULT(Q) - TYPE(Pvar), INTENT(in) :: W - TYPE(Pvar) :: Q - Q%U = W%U - END FUNCTION convert_prim2cons - - -!!!!----------------------- - - - FUNCTION roe_w(e,u,n) RESULT (J) - ! evaluate a roe average to estimate a rough speed for - ! Burman jump operator - CLASS(Pvar), INTENT(in):: e - REAL(dp), DIMENSION(N_Vars), INTENT(in):: u - REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 - REAL(dp), DIMENSION(n_vars,n_vars):: J - REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ - REAL(dp), DIMENSION(n_dim):: v=0. - JJ=Jacobian_w(e,v) - J(:,:) = JJ(:,:,1)*n(1) - - END FUNCTION roe_w - - FUNCTION flux_w(e,x) RESULT(f) - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - TYPE(PVar), DIMENSION(n_dim) :: f - ! F(1)%u(:)=e%u(:) ! linear advection - F(1)%u(:)=0.5*e%u(:)**2 ! burger - END FUNCTION flux_w - - FUNCTION Jacobian_w(e,x) RESULT(J) - CLASS(Pvar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J - INTEGER:: l - ! J=1. - DO l=1, n_vars - J(:,l,1)=e%u - ENDDO - END FUNCTION Jacobian_w - - FUNCTION evalues_w(e,x,n) RESULT(lambda) - ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - - REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: i - - ! lambda=1. ! linear advection - lambda=e%u(1) ! burger - - END FUNCTION evalues_w - - REAL(dp) FUNCTION spectral_radius_w(e,x,n) - ! compute the maximum value of eigenvalues: - ! max_i {lambda_ii} - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - - lambda = evalues_w(e,x,n) - spectral_radius_w = MAXVAL(ABS(lambda)) - - END FUNCTION spectral_radius_w - - FUNCTION rvectors_w(e,n) RESULT(R) - ! right e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - - R(:,:) = 1.0 - - END FUNCTION rvectors_w - - FUNCTION lvectors_w(e,n) RESULT(L) - ! left e-vectors - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim) :: n - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - L(:,:) = 1.0 - - END FUNCTION lvectors_w - - FUNCTION Nmat_w(e, n_ord, grad, x) RESULT (Nmat) - CLASS(Pvar), INTENT(in) :: e - INTEGER, INTENT(in) :: n_ord - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), DIMENSION(n_dim,n_ord), INTENT(in) :: grad - REAL(dp), DIMENSION(n_vars,n_vars) :: Nmat - REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J - INTEGER:: l - - J= Jacobian_w(e,x) - Nmat=0 - DO l=1, n_ord - Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) - ENDDO - Nmat =0.!Inverse(Nmat) - - END FUNCTION Nmat_w - - FUNCTION min_mat_w(e, x, n, alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(IN) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MIN(lambda(:,:),alpha), L) ) - - END FUNCTION min_mat_w - - FUNCTION max_mat_w(e,x,n,alpha) RESULT (Ap) - ! in this A must be the result of tensor*vec where tensor are - ! the jacobian evaluated for class e. It computes the negative part of A - CLASS(PVar), INTENT(in) :: e - REAL(dp), DIMENSION(n_dim), INTENT(in) :: x - REAL(dp), INTENT(in) :: alpha - REAL(dp), DIMENSION(n_dim), INTENT(in) :: n - REAL(dp), DIMENSION(N_vars, N_vars) :: Ap - REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - - lambda = evalues_w(e,x,n) - R = rvectors_w(e,n) - L = lvectors_w(e,n) - Ap = MATMUL( R, MATMUL( MAX(lambda(:,:),alpha), L) ) - - END FUNCTION max_mat_w - !-------------------------- - - -END MODULE variable_def diff --git a/Src1D/variable_def_sw.f90 b/Src1D/variable_def_sw.f90 new file mode 100644 index 0000000..a72e4a3 --- /dev/null +++ b/Src1D/variable_def_sw.f90 @@ -0,0 +1,288 @@ +MODULE variable_def + !------------------------------------------------------------------------------------------------ + ! MODULE SPECIFICALLY DESIGNED FOR 1D SYSTEM OF SW EQUATIONS + !------------------------------------------------------------------------------------------------ + ! This module collects all the information related to the following items: + ! - equations of state: pressure, internal specific energy, speed of sound + ! - conversion from conservative to primitive and viceversa + ! - definition of the Jacobian of the considered system + ! - definition of the Fluxes of the considered system + ! - definition of the Jacobian in absolute values as: |J|=R* |lambda| *L (cf. AbsJacobian_sw) + ! - definition of the Eigenvalues (cf. evalues_sw) + ! - defintion of the Spectral Radius = max ( |lambda|) + ! - definition of the Right eigenvectors + ! - definition of the Left eigenvectors + ! - definition of the positive and negative Jacobian + + + USE algebra + USE precision + USE utils + IMPLICIT NONE + + INTEGER, PUBLIC, PARAMETER:: n_vars = 2 ! number of primitive variables + INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions + REAL(dp), PARAMETER:: pi=ACOS(-1.) ! pi + REAL(dp), PUBLIC :: grav=9.81 ! EOS parameters + + + ! Type for the vector of primitive variables + TYPE, PUBLIC :: PVar + INTEGER :: NVars = n_vars + REAL(dp), DIMENSION(n_vars) :: U + + CONTAINS + PROCEDURE, PUBLIC:: flux => flux_sw + PROCEDURE, PUBLIC:: source => source_sw + ! PROCEDURE, PUBLIC:: evalues => evalues_eul + PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_sw + PROCEDURE, PUBLIC:: rvectors => rvectors_sw + PROCEDURE, PUBLIC:: lvectors => lvectors_sw + PROCEDURE, PUBLIC:: Jacobian => Jacobian_sw + PROCEDURE, PUBLIC:: AbsJacobian => AbsJacobian_sw + PROCEDURE, PUBLIC:: Nmat => Nmat_sw + END TYPE PVar + + PRIVATE + PUBLIC:: convert_cons2prim, convert_prim2cons + +CONTAINS + + + !-------------------------- + ! Speed of sound + !-------------------------- + FUNCTION SoundSpeed(rho) RESULT(a) + REAL(dp), INTENT(in) :: rho + REAL(dp) :: a + a = SQRT(grav*rho) + END FUNCTION SoundSpeed + + + !--------------------------------------------- + ! Convert conservative variables to primitive + !--------------------------------------------- + FUNCTION convert_cons2prim(Q) RESULT(W) + TYPE(Pvar), INTENT(in) :: Q + TYPE(Pvar) :: W + REAL(dp) :: eps + ! rho + W%U(1) = Q%U(1) + ! u + W%U(2) = Q%U(2)/Q%U(1) + END FUNCTION convert_cons2prim + + !--------------------------------------------- + ! Convert primitive variables to conservative + !--------------------------------------------- + FUNCTION convert_prim2cons(W) RESULT(Q) + TYPE(Pvar), INTENT(in) :: W + TYPE(Pvar) :: Q + REAL(dp) :: eps + ! q1 = rho + Q%U(1) = W%U(1) + ! q2 = rho*u + Q%U(2) = W%U(1)*W%U(2) + END FUNCTION convert_prim2cons + + +!!!!----------------------- + + + FUNCTION roe_sw(e,u,n) RESULT (J) + ! evaluate a roe average to estimate a rough speed for + ! Burman jump operator + CLASS(Pvar), INTENT(in):: e + REAL(dp),DIMENSION(N_Vars), INTENT(in):: u + REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 + REAL(dp), DIMENSION(n_vars,n_vars):: J + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ + REAL(dp),DIMENSION(n_dim):: v=0. + JJ=Jacobian_sw(e,v) + J(:,:) = JJ(:,:,1)*n(1) + + END FUNCTION roe_sw + + FUNCTION flux_sw(Var,x) RESULT(f) + CLASS(PVar), INTENT(in) :: Var ! vector of conservative variables + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + TYPE(PVar), DIMENSION(n_dim) :: f + + F(1)%u(1) = Var%u(2) + F(1)%u(2) = Var%u(2)**2._dp/Var%u(1) + grav*0.5_dp*Var%u(1)**2._dp + + END FUNCTION flux_sw + + + + FUNCTION source_sw(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u(1) = 0._dp + s%u(2) = grav*e%u(1)*deriv_bathymetry(test,x(1)) + END FUNCTION source_sw + + FUNCTION Jacobian_sw(Var,x) RESULT(J) + CLASS(Pvar), INTENT(in) :: Var + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J + REAL(dp) :: Vi2, u + + u = Var%u(2)/Var%u(1) + + Vi2 = u**2._dp + + J=0. + J(1,:,1) = (/ 0.0_dp, 1.0_dp /) + J(2,:,1) = (/ -u**2._dp + grav*Var%u(1), 2.0_dp*u /) + + END FUNCTION Jacobian_sw + + FUNCTION AbsJacobian_sw(Var,x) RESULT(J) + !compute abs value of jacobian matrix + REAL(dp), DIMENSION(n_dim), PARAMETER:: nn=(/1.0_dp/),xx=(/1.0_dp/) + CLASS(Pvar), INTENT(in) :: Var + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J + REAL(dp) :: Vi2, u, H, eps, p + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + INTEGER:: i + + R=rvectors_sw(Var,nn) + L=lvectors_sw(Var,nn) + lambda=evalues_sw(var,xx,nn) + lambda=ABS(lambda) + + J(:,:,1)=MATMUL(R,MATMUL(lambda,L)) + + END FUNCTION AbsJacobian_sw + + FUNCTION evalues_sw(Var,x,n) RESULT(lambda) + ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations + CLASS(PVar), INTENT(in) :: Var + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp) :: un, c + + c = SoundSpeed(Var%u(1)) + + lambda = 0._dp + un = ( Var%u(2)*n(1) )/Var%u(1) + lambda(1,1) = un-c + lambda(2,2) = un+c + + END FUNCTION evalues_sw + + REAL(dp) FUNCTION spectral_radius_sw(Var,x,n) + ! compute the maximum value of eigenvalues: + ! max_i {lambda_ii} + CLASS(PVar), INTENT(in) :: Var + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + REAL(dp),DIMENSION(n_Vars,n_Vars) :: lambda + + lambda = evalues_sw(Var,x,n) + spectral_radius_sw = MAXVAL(ABS(lambda)) + + END FUNCTION spectral_radius_sw + + FUNCTION rvectors_sw(Q,n) RESULT(R) + ! right e-vectors + ! assume ||n||=1 + CLASS(PVar), INTENT(in) :: Q + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp) :: rho, u, a + + rho = Q%U(1) + u = Q%U(2)/Q%U(1) + a = SoundSpeed(rho) + + + R(:,1) = (/ 1.0_dp, u-a /) + R(:,2) = (/ 1.0_dp, u+a /) + + + END FUNCTION rvectors_sw + + FUNCTION lvectors_sw(Q,n) RESULT(L) + ! left e-vectors + ! assumes ||n||=1 + CLASS(PVar), INTENT(in) :: Q + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp) :: rho, u, p, a, E, H, gmm1, eps + R=rvectors_sw(Q,n) + L=inverse(R) + + END FUNCTION lvectors_sw + + + + FUNCTION Nmat_sw(e, n_ord, grad, x) RESULT (Nmat) + CLASS(Pvar), INTENT(in) :: e + INTEGER, INTENT(in) :: n_ord + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim,n_ord), INTENT(in) :: grad + REAL(dp), DIMENSION(n_vars,n_vars) :: Nmat + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J + INTEGER:: l + + J= Jacobian_sw(e,x) + Nmat=0_dp + DO l=1, n_ord + Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) + ENDDO + Nmat =0._dp!Inverse(Nmat) + + END FUNCTION Nmat_sw + FUNCTION min_mat_sw(e, x, n, alpha) RESULT (Ap) + ! in this A must be the result of tensor*vec where tensor are + ! the jacobian evaluated for class e. It computes the negative part of A + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), INTENT(in) :: alpha + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: n + REAL(dp), DIMENSION(N_vars, N_vars) :: Ap + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + + lambda = evalues_sw(e,x,n) + R = rvectors_sw(e,n) + L = lvectors_sw(e,n) + Ap = MATMUL( R, MATMUL( MIN(lambda(:,:),alpha), L) ) + + END FUNCTION min_mat_sw + + + FUNCTION max_mat_sw(e,x,n,alpha) RESULT (Ap) + ! in this A must be the result of tensor*vec where tensor are + ! the jacobian evaluated for class e. It computes the negative part of A + CLASS(PVar), INTENT(in) :: e + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), INTENT(in) :: alpha + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + REAL(dp), DIMENSION(N_vars, N_vars) :: Ap + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L + + lambda = evalues_sw(e,x,n) + R = rvectors_sw(e,n) + L = lvectors_sw(e,n) + Ap = MATMUL( R, MATMUL( MAX(lambda(:,:),alpha), L) ) + + END FUNCTION max_mat_sw + !-------------------------- + + + + +END MODULE variable_def diff --git a/Src1D/variable_def_wave_1D.f90 b/Src1D/variable_def_wave_1D.f90 index 74bf8d7..a1344ff 100644 --- a/Src1D/variable_def_wave_1D.f90 +++ b/Src1D/variable_def_wave_1D.f90 @@ -24,18 +24,19 @@ MODULE variable_def IMPLICIT NONE INTEGER, PUBLIC, PARAMETER:: n_vars = 2 ! number of primitive variables - INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions - REAL(8), PARAMETER:: pi=ACOS(-1.) ! pi - REAL(8), PUBLIC, PARAMETER:: a = 1.0 - REAL(8), PUBLIC, PARAMETER:: aa = 100., bb = 100. + INTEGER, PUBLIC, PARAMETER:: n_dim = 1 ! number of physical dimensions + REAL(dp), PARAMETER:: pi=ACOS(-1._dp) ! pi + REAL(dp), PUBLIC, PARAMETER:: a = 1.0_dp + REAL(dp), PUBLIC, PARAMETER:: aa = 100._dp, bb = 100._dp ! Type for the vector of primitive variables TYPE, PUBLIC :: PVar INTEGER :: NVars = n_vars - REAL(8), DIMENSION(n_vars) :: U + REAL(dp), DIMENSION(n_vars) :: U CONTAINS PROCEDURE, PUBLIC:: flux => flux_w + PROCEDURE, PUBLIC:: source => source_w PROCEDURE, PUBLIC:: evalues => evalues_w PROCEDURE, PUBLIC:: spectral_radius => spectral_radius_w PROCEDURE, PUBLIC:: rvectors => rvectors_w @@ -76,11 +77,11 @@ CONTAINS ! evaluate a roe average to estimate a rough speed for ! Burman jump operator CLASS(Pvar), INTENT(in):: e - REAL(8), DIMENSION(N_Vars), INTENT(in):: u - REAL(8), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 - REAL(8), DIMENSION(n_vars,n_vars):: J - REAL(8), DIMENSION(n_vars,n_vars,n_dim):: JJ - REAL(8), DIMENSION(n_dim):: v=0. + REAL(dp), DIMENSION(N_Vars), INTENT(in):: u + REAL(dp), DIMENSION(n_dim), INTENT(in):: n ! here it will be a normal of norme 1 + REAL(dp), DIMENSION(n_vars,n_vars):: J + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ + REAL(dp), DIMENSION(n_dim):: v=0. JJ=Jacobian_w(e,v) J(:,:) = JJ(:,:,1)*n(1) @@ -88,47 +89,56 @@ CONTAINS FUNCTION flux_w(e,x) RESULT(f) CLASS(PVar), INTENT(in) :: e - REAL(8), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x TYPE(PVar), DIMENSION(n_dim) :: f - REAL(8), DIMENSION(n_vars,n_vars,n_dim):: JJ + REAL(dp), DIMENSION(n_vars,n_vars,n_dim):: JJ JJ=Jacobian_w(e,x) F(1)%u(:)=MATMUL(JJ(:,:,1),e%u) END FUNCTION flux_w + + FUNCTION source_w(e,x,test) RESULT(s) + CLASS(PVar), INTENT(IN) :: e + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: x + INTEGER , INTENT(IN) :: test + TYPE(PVar) :: s + s%u = 0._dp + END FUNCTION source_w + FUNCTION Jacobian_w(e,x) RESULT(J) CLASS(Pvar), INTENT(in) :: e - REAL(8), DIMENSION(n_dim), INTENT(in) :: x - REAL(8), DIMENSION(n_Vars,n_Vars,n_dim) :: J + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_Vars,n_Vars,n_dim) :: J J=0. - J(1,1,1) = 0.0; J(1,2,1) = -a**2; - J(2,1,1) = -1.0; J(2,2,1) = 0.0 + J(1,1,1) = 0.0_dp; J(1,2,1) = -a**2; + J(2,1,1) = -1.0_dp; J(2,2,1) = 0.0_dp END FUNCTION Jacobian_w FUNCTION evalues_w(e,x,n) RESULT(lambda) ! eigenvalues: diagonal matrix. It is written as a matrix for ease of calculations CLASS(PVar), INTENT(in) :: e - REAL, DIMENSION(n_dim), INTENT(in) :: x - REAL, DIMENSION(n_dim) :: n - REAL, DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda - REAL, DIMENSION(n_vars, n_vars, n_dim) :: J + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J INTEGER:: i - lambda=0. + lambda=0._dp lambda(1,1) = -a; lambda(2,2) = a; END FUNCTION evalues_w - REAL(8) FUNCTION spectral_radius_w(e,x,n) + REAL(dp) FUNCTION spectral_radius_w(e,x,n) ! compute the maximum value of eigenvalues: ! max_i {lambda_ii} CLASS(PVar), INTENT(in) :: e - REAL(8), DIMENSION(n_dim), INTENT(in) :: x - REAL(8), DIMENSION(n_dim), INTENT(in) :: n - REAL(8), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda lambda = evalues_w(e,x,n) spectral_radius_w = MAXVAL(ABS(lambda)) @@ -138,43 +148,43 @@ CONTAINS FUNCTION rvectors_w(e,n) RESULT(R) ! right e-vectors CLASS(PVar), INTENT(in) :: e - REAL, DIMENSION(n_dim) :: n - REAL, DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R - R(:,:) = 0.0 + R(:,:) = 0.0_dp R(1,1) = a; R(1,2) = -a; - R(2,1) = 1.0; R(2,2) = 1.0; + R(2,1) = 1.0_dp; R(2,2) = 1.0_dp; END FUNCTION rvectors_w FUNCTION lvectors_w(e,n) RESULT(L) ! left e-vectors CLASS(PVar), INTENT(in) :: e - REAL, DIMENSION(n_dim) :: n - REAL, DIMENSION(n_Vars,n_Vars) :: L + REAL(dp), DIMENSION(n_dim) :: n + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L - L(:,:) = 0.0 - L(1,1) = 1.0; L(1,2) = a; - L(2,1) = -1.0; L(2,2) = a; - L = L/(2.0*a) + L(:,:) = 0.0_dp + L(1,1) = 1.0_dp; L(1,2) = a; + L(2,1) = -1.0_dp; L(2,2) = a; + L = L/(2.0_dp*a) END FUNCTION lvectors_w FUNCTION Nmat_w(e, n_ord, grad, x) RESULT (Nmat) CLASS(Pvar), INTENT(in) :: e INTEGER, INTENT(in) :: n_ord - REAL(8), DIMENSION(n_dim), INTENT(in) :: x - REAL(8), DIMENSION(n_dim,n_ord), INTENT(in) :: grad - REAL(8), DIMENSION(n_vars,n_vars) :: Nmat - REAL(8), DIMENSION(n_vars, n_vars, n_dim) :: J + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), DIMENSION(n_dim,n_ord), INTENT(in) :: grad + REAL(dp), DIMENSION(n_vars,n_vars) :: Nmat + REAL(dp), DIMENSION(n_vars, n_vars, n_dim) :: J INTEGER:: l J= Jacobian_w(e,x) - Nmat=0 + Nmat=0_dp DO l=1, n_ord Nmat = Nmat + ABS( grad(1,l)*J(1,1,1) ) ENDDO - Nmat =0.!Inverse(Nmat) + Nmat =0._dp!Inverse(Nmat) END FUNCTION Nmat_w @@ -182,13 +192,13 @@ CONTAINS ! in this A must be the result of tensor*vec where tensor are ! the jacobian evaluated for class e. It computes the negative part of A CLASS(PVar), INTENT(in) :: e - REAL(8), DIMENSION(n_dim), INTENT(in) :: x - REAL(8), INTENT(in) :: alpha - REAL(8), DIMENSION(n_dim), INTENT(IN) :: n - REAL(8), DIMENSION(N_vars, N_vars) :: Ap - REAL(8), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(8), DIMENSION(n_Vars,n_Vars) :: R - REAL(8), DIMENSION(n_Vars,n_Vars) :: L + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), INTENT(in) :: alpha + REAL(dp), DIMENSION(n_dim), INTENT(IN) :: n + REAL(dp), DIMENSION(N_vars, N_vars) :: Ap + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L lambda = evalues_w(e,x,n) R = rvectors_w(e,n) @@ -201,13 +211,13 @@ CONTAINS ! in this A must be the result of tensor*vec where tensor are ! the jacobian evaluated for class e. It computes the negative part of A CLASS(PVar), INTENT(in) :: e - REAL(8), DIMENSION(n_dim), INTENT(in) :: x - REAL(8), INTENT(in) :: alpha - REAL(8), DIMENSION(n_dim), INTENT(in) :: n - REAL(8), DIMENSION(N_vars, N_vars) :: Ap - REAL(8), DIMENSION(n_Vars,n_Vars) :: lambda - REAL(8), DIMENSION(n_Vars,n_Vars) :: R - REAL(8), DIMENSION(n_Vars,n_Vars) :: L + REAL(dp), DIMENSION(n_dim), INTENT(in) :: x + REAL(dp), INTENT(in) :: alpha + REAL(dp), DIMENSION(n_dim), INTENT(in) :: n + REAL(dp), DIMENSION(N_vars, N_vars) :: Ap + REAL(dp), DIMENSION(n_Vars,n_Vars) :: lambda + REAL(dp), DIMENSION(n_Vars,n_Vars) :: R + REAL(dp), DIMENSION(n_Vars,n_Vars) :: L lambda = evalues_w(e,x,n) R = rvectors_w(e,n) diff --git a/Test1D/Makefile.1D.gfortran b/Test1D/Makefile.1D.gfortran new file mode 100644 index 0000000..d61d49d --- /dev/null +++ b/Test1D/Makefile.1D.gfortran @@ -0,0 +1,106 @@ +# FICHIER DE CREATION D'OBJETS ET D'UN EXECUTABLE +# RANGEMENT PAR ORDRE ALPHABETIQUE +# +# VERSION DEBBUGGEUR -db +# VERSION OPTIMISEUR +F90=gfortran +OBJDIR = obj1D +MODDIR = mod1D +BINDIR = bin1D +SRC = ../Src1D + +FFLAGS = -DLINUX -J$(MODDIR) -cpp -c $(OPT) -ffree-line-length-none +LDFLAGS= -J$(MODDIR) -cpp $(OPT) -ffree-line-length-none + +#INIT= init_bc_euler +#UTIL = utils +#MODEL_VAR= variable_def_euler + +INIT= init_bc_wave_1D +MODEL_VAR= variable_def_wave_1D +UTIL = utils + +#INIT= init_bc_sw +#MODEL_VAR= variable_def_sw +#UTIL = utils_sw + +#INIT= init_bc_burgers +#MODEL_VAR= variable_def_burgers +#UTIL = utils + +#INIT= init_bc_scalar +#MODEL_VAR= variable_def_scalar +#UTIL = utils + +#INIT= init_bc_scalar +#MODEL_VAR= variable_def_damped_scalar +#UTIL = utils + +OBJS = $(addprefix $(OBJDIR)/, elements_1D.o param2d.o $(MODEL_VAR).o aretes.o scheme.o overloading.o Model.o geometry.o algebra.o $(UTIL).o postprocessing.o timestepping.o $(INIT).o precision.o) + + +dec: $(MODDIR) $(OBJDIR) $(BINDIR) $(OBJS) $(SRC)/main_dec.f90 + $(F90) $(LDFLAGS) -o $(BINDIR)/main_dec.out $(SRC)/main_dec.f90 $(OBJS) + +$(MODDIR): + mkdir -p $(MODDIR) + +$(OBJDIR): + mkdir -p $(OBJDIR) + +$(BINDIR): + mkdir -p $(BINDIR) + + +$(OBJDIR)/Model.o: $(SRC)/Model.f90 $(OBJDIR)/param2d.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/Model.o $(SRC)/Model.f90 + +$(OBJDIR)/aretes.o: $(SRC)/aretes.f90 $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/aretes.o $(SRC)/aretes.f90 + +$(OBJDIR)/overloading.o: $(SRC)/overloading.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/overloading.o $(SRC)/overloading.f90 + +$(OBJDIR)/param2d.o: $(SRC)/param2d.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/elements_1D.o $(OBJDIR)/aretes.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/param2d.o $(SRC)/param2d.f90 + +$(OBJDIR)/geometry.o: $(SRC)/param2d.f90 $(OBJDIR)/elements_1D.o $(OBJDIR)/$(INIT).o $(SRC)/geometry.f90 $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/geometry.o $(SRC)/geometry.f90 + +$(OBJDIR)/algebra.o: $(SRC)/algebra.f90 $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/algebra.o $(SRC)/algebra.f90 + +$(OBJDIR)/elements_1D.o: $(SRC)/elements_1D.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/algebra.o $(OBJDIR)/overloading.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/elements_1D.o $(SRC)/elements_1D.f90 + +$(OBJDIR)/$(MODEL_VAR).o: $(OBJDIR)/algebra.o $(SRC)/$(MODEL_VAR).f90 $(OBJDIR)/$(UTIL).o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/$(MODEL_VAR).o $(SRC)/$(MODEL_VAR).f90 + +$(OBJDIR)/scheme.o: $(SRC)/scheme.f90 $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/elements_1D.o $(OBJDIR)/overloading.o $(OBJDIR)/aretes.o $(OBJDIR)/Model.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/scheme.o $(SRC)/scheme.f90 + +$(OBJDIR)/$(UTIL).o:$(SRC)/$(UTIL).f90 $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/$(UTIL).o $(SRC)/$(UTIL).f90 + +$(OBJDIR)/$(INIT).o: $(SRC)/$(INIT).f90 $(OBJDIR)/param2d.o $(OBJDIR)/overloading.o $(OBJDIR)/$(UTIL).o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/$(INIT).o $(SRC)/$(INIT).f90 + +$(OBJDIR)/timestepping.o: $(SRC)/timestepping.f90 $(OBJDIR)/overloading.o $(OBJDIR)/elements_1D.o $(OBJDIR)/$(MODEL_VAR).o $(OBJDIR)/param2d.o $(OBJDIR)/scheme.o $(OBJDIR)/Model.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/timestepping.o $(SRC)/timestepping.f90 + +$(OBJDIR)/postprocessing.o: $(SRC)/postprocessing.f90 $(OBJDIR)/param2d.o $(OBJDIR)/$(INIT).o $(OBJDIR)/Model.o $(OBJDIR)/precision.o + $(F90) $(FFLAGS) -o $(OBJDIR)/postprocessing.o $(SRC)/postprocessing.f90 + +$(OBJDIR)/precision.o: $(SRC)/precision.f90 + $(F90) $(FFLAGS) -o $(OBJDIR)/precision.o $(SRC)/precision.f90 + +clean: + rm -rf $(OBJDIR) + rm -rf $(MODDIR) + rm -rf $(BINDIR) + rm $(SRC)/*.f90~ + rm *.mod + + + + diff --git a/Test1D/Test1D_Burgers/Data/don1d b/Test1D/Test1D_Burgers/Data/don1d new file mode 100644 index 0000000..654edc1 --- /dev/null +++ b/Test1D/Test1D_Burgers/Data/don1d @@ -0,0 +1,12 @@ +100 nt +13 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +4 4 ordre 3: # of iteration for DEC +4 scheme: 1=supg, 2=psi, 3=mix, 4: galerkin+jump, 5: psi+jump 6 blend+jump 7: psi+galerkin2?? +0. theta parameter in Burman stabilization term +0. theta2 parameter in Burman stabilization second derivative term +0.1 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/B1/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/B1/Data/don1d new file mode 100644 index 0000000..fbbecfb --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/B1/Data/don1d @@ -0,0 +1,12 @@ +100 nt +1 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +2 2 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.0778 theta parameter in Burman stabilization term +0.0 theta2 parameter in Burman stabilization second derivative term +0.3 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/B2/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/B2/Data/don1d new file mode 100644 index 0000000..b3fa4ad --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/B2/Data/don1d @@ -0,0 +1,12 @@ +100 nt +2 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +3 3 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.016 theta parameter in Burman stabilization term +0 theta2 parameter in Burman stabilization second derivative term +0.05 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/B3/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/B3/Data/don1d new file mode 100644 index 0000000..1f801c7 --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/B3/Data/don1d @@ -0,0 +1,12 @@ +100 nt +5 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +4 4 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.00916 theta parameter in Burman stabilization term +0 theta2 parameter in Burman stabilization second derivative term +0.1 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/C1/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/C1/Data/don1d new file mode 100644 index 0000000..f3dba59 --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/C1/Data/don1d @@ -0,0 +1,12 @@ +100 nt +11 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +2 2 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.119 theta parameter in Burman stabilization term +0.0 theta2 parameter in Burman stabilization second derivative term +0.8 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/C2/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/C2/Data/don1d new file mode 100644 index 0000000..66180d5 --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/C2/Data/don1d @@ -0,0 +1,12 @@ +100 nt +12 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +3 3 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.0 theta parameter in Burman stabilization term +0.0 theta2 parameter in Burman stabilization second derivative term +0.3 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/C3/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/C3/Data/don1d new file mode 100644 index 0000000..353cae1 --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/C3/Data/don1d @@ -0,0 +1,12 @@ +100 nt +13 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +4 4 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.0 theta parameter in Burman stabilization term +0.0 theta2 parameter in Burman stabilization second derivative term +0.1 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/classic/scheme4/C4/Data/don1d b/Test1D/Test1D_Burgers/classic/scheme4/C4/Data/don1d new file mode 100644 index 0000000..2ba3b8b --- /dev/null +++ b/Test1D/Test1D_Burgers/classic/scheme4/C4/Data/don1d @@ -0,0 +1,12 @@ +100 nt +14 itype 1: P1, 2: B2, 3: P2, 4:P3, 5: B3 +5 5 ordre 3: # of iteration for DEC +4 schemes: 3 entropy fix, 4galerkin+jump, 5 psi +0.0 theta parameter in Burman stabilization term +0.0 theta2 parameter in Burman stabilization second derivative term +0.08 cfl +100000 ktmax +0.5 tmax +10 ifre +10 test case Burgers +.FALSE. !MOOD diff --git a/Test1D/Test1D_Burgers/convergence_B.py b/Test1D/Test1D_Burgers/convergence_B.py new file mode 100644 index 0000000..d67f672 --- /dev/null +++ b/Test1D/Test1D_Burgers/convergence_B.py @@ -0,0 +1,148 @@ +#!/usr/bin/python +import numpy as np +from numpy import linalg as LA +import scipy +import matplotlib.pyplot as pl +import sys +import itertools +import scipy.optimize +#import exact_sol as ex + +# run the convergence without an exact solution +# files saved in columns x, h, u +# ns and the file are below and must be changed accordingly + +# Initial condition +def exact_sol(xx,t): + u0=lambda x0: 0.5*np.sin(2.0*np.pi*x0) # np.exp(-x0**2.*10)# + #Burgers characteristics function + def F(x0): + return x0+u0(x0)*t-xx + x0 = scipy.optimize.broyden1(F,xx,f_tol=1e-13) + return u0(x0) + +T_end=0.1 + + +def remove_extra(x, u): + ind=[] + for i in range(len(x)-1): + if x[i]==x[i+1]: + ind.append(i) + x=np.delete(x,ind,0) + u=np.delete(u,ind,0) + return x,u + +pl.rc("text", usetex=True) +pl.rc("font", family="serif") + +extra_correction = False + +if extra_correction ==True: + corr_str="_corr" +else: + corr_str = "" + +# Grids for convergence study +#nNodes = [5,10,20,40,80,160,320,640,1280,2560] +#nNodes = [5,10,20,40,80,160,320,640,1280] +#nNodes = [5,10,20,40,80,160,320,640] +#nNodes = [5,10,20,40,80,160,320] +#nNodes = [5,10,20,40,80,160] +#nNodes = [5,10,20,40,80] +#nNodes = [5,10,20,40] +nNodes = [8,16,32,64,128,256]#,512, 1024]#,2048,4096] +#nNodes = [25,50,100,200]#,400,800] +# Test name +test = "test" + +# basis +basis = "B" + +# scheme +schemes = ["scheme4"]#, "scheme3"] + +relaxations=[ "classic"]#"relax", +# Scheme order +orders = [1, 2,3]#,4] + +marker = itertools.cycle(('s','o','*')) + +varnames = ['h'] +linestyles=["-","-.",":"] + +for sche in schemes: + for nvar, var in enumerate(varnames): + fig_err_L1 = pl.figure() + ax_err_L1 = fig_err_L1.add_subplot(1,1,1) + #fig_entropy = pl.figure() + #ax_entropy = fig_entropy.add_subplot(1,1,1) + for idrel, rel in enumerate(relaxations): + linSt=linestyles[idrel] + + # Initialize array to store errors + err_L1 = np.zeros((np.size(orders),np.size(nNodes))) + dx = np.zeros((np.size(orders),np.size(nNodes))) + + # Initialize array to store orders + order_L1 = np.zeros((np.size(orders),np.size(nNodes))) + + for k, order in enumerate(orders): + xs =[] + num_sols = [] + #tEnd=np.zeros(len(nNodes)); + #finalErrorEntropies=np.zeros(len(nNodes)); + + for i, N in enumerate(nNodes): + + # Load numerical solution + fname = rel+"/"+sche+"/B"+str(order)+"/"+str(test)+"_scheme4_"+str(N)+".dat" #here the folder and filenames + x, num_sol = np.loadtxt(fname,delimiter=None,usecols=(0,nvar+1), unpack=True) + x, num_sol = remove_extra(x,num_sol) + xs.append(x) + num_sols.append(num_sol) + #fname=rel+"/"+sche+"/B"+str(order)+"/"+str(test)+"_cons_scheme4_finalEntropy_"+str(N)+".dat" + #errorFile = np.loadtxt(fname) + #t= errorFile[0]; entropy=errorFile[1]; entropyError= errorFile[2] + #tEnd[i]=t; finalErrorEntropies[i]=entropyError + + for i in range(len(nNodes)): + exSol=exact_sol(xs[i],T_end) + err_L1[k,i]=LA.norm(num_sols[i]-exSol,ord=2)/float(np.sqrt(nNodes[i])) + + # Compute exact solution + # ex_sol = ex.exact_sw_smooth(x) + + # Compute errors + #err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=np.inf) + # err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=1)/float(N) + #err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=2)/float(np.sqrt(N)) + #err_L1[k,i] = LA.norm((num_sol-ex_sol[nvar])*dxvec,ord=1) + + if (i > 0): + order_L1[k,i] = -( np.log(err_L1[k][i])-np.log(err_L1[k][i-1]) ) / ( np.log(nNodes[i])-np.log(nNodes[i-1]) ) + + print "Variable : ", var + print "L1-errors for order ", order, " :" + print "Computed errors : " + print err_L1[k,:] + print "Computed orders : " + print order_L1[k,:] + + # Plot figures + + # error vs mesh size + + ax_err_L1.loglog(nNodes[:],err_L1[k,:],linestyle=linSt,marker=marker.next(),label="B"+str(order)+" "+rel) + ref_err = [err_L1[k,1]*nNodes[1]**(float(order+1))*nNodes[i]**(-float(order+1)) for i in range(np.size(nNodes[:]))] + ax_err_L1.loglog(nNodes,ref_err,":",label="order "+str(order+1)) + ax_err_L1.set_xlabel(r"$N$") + ax_err_L1.set_ylabel(r"$L_2$-error") + pl.xlim(nNodes[1]*0.7,nNodes[-1]*1.3) + ax_err_L1.legend(loc=0) + ax_err_L1.set_title("Convergence of "+var) + + # Save plots + fig_err_L1.savefig(var+"_convergence_B_"+sche+".pdf",format="pdf") + +pl.show() diff --git a/Test1D/Test1D_Burgers/convergence_C.py b/Test1D/Test1D_Burgers/convergence_C.py new file mode 100644 index 0000000..958b39c --- /dev/null +++ b/Test1D/Test1D_Burgers/convergence_C.py @@ -0,0 +1,143 @@ +#!/usr/bin/python +import numpy as np +from numpy import linalg as LA +import scipy +import matplotlib.pyplot as pl +import sys +import itertools +import scipy.optimize +#import exact_sol as ex + +# run the convergence without an exact solution +# files saved in columns x, h, u +# ns and the file are below and must be changed accordingly + +# Initial condition +def exact_sol(xx,t): + u0=lambda x0: 0.5*np.sin(2.0*np.pi*x0) # np.exp(-x0**2.*10)# + #Burgers characteristics function + def F(x0): + return x0+u0(x0)*t-xx + x0 = scipy.optimize.broyden1(F,xx,f_tol=1e-13) + return u0(x0) + +T_end=0.1 + + +def remove_extra(x, u): + ind=[] + for i in range(len(x)-1): + if x[i]==x[i+1]: + ind.append(i) + x=np.delete(x,ind,0) + u=np.delete(u,ind,0) + return x,u + +pl.rc("text", usetex=True) +pl.rc("font", family="serif") + +extra_correction = False + +if extra_correction ==True: + corr_str="_corr" +else: + corr_str = "" + +# Grids for convergence study +#nNodes = [5,10,20,40,80,160,320,640,1280,2560] +#nNodes = [5,10,20,40,80,160,320,640,1280] +#nNodes = [5,10,20,40,80,160,320,640] +#nNodes = [5,10,20,40,80,160,320] +#nNodes = [5,10,20,40,80,160] +#nNodes = [5,10,20,40,80] +#nNodes = [5,10,20,40] +nNodes = [8,16,32,64,128,256,512, 1024]#,2048,4096] +#nNodes = [25,50,100,200]#,400,800] +# Test name +test = "test" + +# basis +basis = "B" + +# scheme +schemes = ["scheme4"]#, "scheme3"] + +relaxations=[ "classic"]#"relax", +# Scheme order +orders = [1, 2,3,4] + +marker = itertools.cycle(('s','o','*')) + +varnames = ['h'] +linestyles=["-","-.",":"] + +for sche in schemes: + for nvar, var in enumerate(varnames): + fig_err_L1 = pl.figure() + ax_err_L1 = fig_err_L1.add_subplot(1,1,1) + #fig_entropy = pl.figure() + #ax_entropy = fig_entropy.add_subplot(1,1,1) + for idrel, rel in enumerate(relaxations): + linSt=linestyles[idrel] + + # Initialize array to store errors + err_L1 = np.zeros((np.size(orders),np.size(nNodes))) + dx = np.zeros((np.size(orders),np.size(nNodes))) + + # Initialize array to store orders + order_L1 = np.zeros((np.size(orders),np.size(nNodes))) + + for k, order in enumerate(orders): + xs =[] + num_sols = [] + #tEnd=np.zeros(len(nNodes)); + #finalErrorEntropies=np.zeros(len(nNodes)); + + for i, N in enumerate(nNodes): + + # Load numerical solution + fname = rel+"/"+sche+"/C"+str(order)+"/"+str(test)+"_scheme4_"+str(N)+".dat" #here the folder and filenames + x, num_sol = np.loadtxt(fname,delimiter=None,usecols=(0,nvar+1), unpack=True) + x, num_sol = remove_extra(x,num_sol) + xs.append(x) + num_sols.append(num_sol) + + + for i in range(len(nNodes)): + exSol=exact_sol(xs[i],T_end) + err_L1[k,i]=LA.norm(num_sols[i]-exSol,ord=2)/float(np.sqrt(nNodes[i])) + + # Compute exact solution + # ex_sol = ex.exact_sw_smooth(x) + + # Compute errors + #err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=np.inf) + # err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=1)/float(N) + #err_L1[k,i] = LA.norm(num_sol-ex_sol[nvar],ord=2)/float(np.sqrt(N)) + #err_L1[k,i] = LA.norm((num_sol-ex_sol[nvar])*dxvec,ord=1) + + if (i > 0): + order_L1[k,i] = -( np.log(err_L1[k][i])-np.log(err_L1[k][i-1]) ) / ( np.log(nNodes[i])-np.log(nNodes[i-1]) ) + + print "Variable : ", var + print "L1-errors for order ", order, " :" + print "Computed errors : " + print err_L1[k,:] + print "Computed orders : " + print order_L1[k,:] + + # Plot figures + + # error vs mesh size + + ax_err_L1.loglog(nNodes[:],err_L1[k,:],linestyle=linSt,marker=marker.next(),label="C"+str(order)+" "+rel) + ref_err = [err_L1[k,1]*nNodes[1]**(float(order+1))*nNodes[i]**(-float(order+1)) for i in range(np.size(nNodes[:]))] + ax_err_L1.loglog(nNodes,ref_err,":",label="order "+str(order+1)) + ax_err_L1.set_xlabel(r"$N$") + ax_err_L1.set_ylabel(r"$L_2$-error") + pl.xlim(nNodes[1]*0.7,nNodes[-1]*1.3) + ax_err_L1.legend(loc=0) + ax_err_L1.set_title("Convergence of "+var) + # Save plots + fig_err_L1.savefig(var+"_convergence_C_"+sche+".pdf",format="pdf") +pl.show() diff --git a/Test1D/Test1D_Burgers/h_convergence_B_scheme4.pdf b/Test1D/Test1D_Burgers/h_convergence_B_scheme4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e391c47daad27b7f724b3822c88dee5b7e5d46a1 GIT binary patch literal 166299 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