diff --git a/ProcessLib/ComponentTransport/Tests.cmake b/ProcessLib/ComponentTransport/Tests.cmake index b1e59587d21004d65973a056503be1075c72233e..89070f85d7119bed5fb146d0ec8646c7934390bd 100644 --- a/ProcessLib/ComponentTransport/Tests.cmake +++ b/ProcessLib/ComponentTransport/Tests.cmake @@ -295,6 +295,69 @@ AddTest( elder_pcs_0_ts_80_t_21038400.000000_reference.vtu elder_pcs_0_ts_80_t_21038400.000000.vtu conc conc 1e-1 1e-5 ) +AddTest( + NAME LARGE_2D_ComponentTransport_ElderPython + PATH Parabolic/ComponentTransport/elder + EXECUTABLE ogs + EXECUTABLE_ARGS elder-python.prj + WRAPPER time + TESTER vtkdiff + REQUIREMENTS OGS_USE_PYTHON AND NOT OGS_USE_MPI + DIFF_DATA + elder_pcs_0_ts_0_t_0.000000_reference.vtu elder_python_pcs_0_ts_0_t_0.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_100_t_26298000.000000_reference.vtu elder_python_pcs_0_ts_100_t_26298000.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_120_t_31557600.000000_reference.vtu elder_python_pcs_0_ts_120_t_31557600.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_140_t_36817200.000000_reference.vtu elder_python_pcs_0_ts_140_t_36817200.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_160_t_42076800.000000_reference.vtu elder_python_pcs_0_ts_160_t_42076800.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_180_t_47336400.000000_reference.vtu elder_python_pcs_0_ts_180_t_47336400.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_200_t_52596000.000000_reference.vtu elder_python_pcs_0_ts_200_t_52596000.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_20_t_5259600.000000_reference.vtu elder_python_pcs_0_ts_20_t_5259600.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_220_t_57855600.000000_reference.vtu elder_python_pcs_0_ts_220_t_57855600.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_240_t_63115200.000000_reference.vtu elder_python_pcs_0_ts_240_t_63115200.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_260_t_68374800.000000_reference.vtu elder_python_pcs_0_ts_260_t_68374800.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_280_t_73634400.000000_reference.vtu elder_python_pcs_0_ts_280_t_73634400.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_300_t_78894000.000000_reference.vtu elder_python_pcs_0_ts_300_t_78894000.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_320_t_84153600.000000_reference.vtu elder_python_pcs_0_ts_320_t_84153600.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_340_t_89413200.000000_reference.vtu elder_python_pcs_0_ts_340_t_89413200.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_360_t_94672800.000000_reference.vtu elder_python_pcs_0_ts_360_t_94672800.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_380_t_99932400.000000_reference.vtu elder_python_pcs_0_ts_380_t_99932400.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_400_t_105192000.000000_reference.vtu elder_python_pcs_0_ts_400_t_105192000.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_40_t_10519200.000000_reference.vtu elder_python_pcs_0_ts_40_t_10519200.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_420_t_110451600.000000_reference.vtu elder_python_pcs_0_ts_420_t_110451600.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_440_t_115711200.000000_reference.vtu elder_python_pcs_0_ts_440_t_115711200.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_460_t_120970800.000000_reference.vtu elder_python_pcs_0_ts_460_t_120970800.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_480_t_126230400.000000_reference.vtu elder_python_pcs_0_ts_480_t_126230400.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_500_t_131490000.000000_reference.vtu elder_python_pcs_0_ts_500_t_131490000.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_60_t_15778800.000000_reference.vtu elder_python_pcs_0_ts_60_t_15778800.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_80_t_21038400.000000_reference.vtu elder_python_pcs_0_ts_80_t_21038400.000000.vtu pressure pressure 1e-1 1e-5 + elder_pcs_0_ts_0_t_0.000000_reference.vtu elder_python_pcs_0_ts_0_t_0.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_100_t_26298000.000000_reference.vtu elder_python_pcs_0_ts_100_t_26298000.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_120_t_31557600.000000_reference.vtu elder_python_pcs_0_ts_120_t_31557600.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_140_t_36817200.000000_reference.vtu elder_python_pcs_0_ts_140_t_36817200.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_160_t_42076800.000000_reference.vtu elder_python_pcs_0_ts_160_t_42076800.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_180_t_47336400.000000_reference.vtu elder_python_pcs_0_ts_180_t_47336400.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_200_t_52596000.000000_reference.vtu elder_python_pcs_0_ts_200_t_52596000.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_20_t_5259600.000000_reference.vtu elder_python_pcs_0_ts_20_t_5259600.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_220_t_57855600.000000_reference.vtu elder_python_pcs_0_ts_220_t_57855600.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_240_t_63115200.000000_reference.vtu elder_python_pcs_0_ts_240_t_63115200.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_260_t_68374800.000000_reference.vtu elder_python_pcs_0_ts_260_t_68374800.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_280_t_73634400.000000_reference.vtu elder_python_pcs_0_ts_280_t_73634400.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_300_t_78894000.000000_reference.vtu elder_python_pcs_0_ts_300_t_78894000.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_320_t_84153600.000000_reference.vtu elder_python_pcs_0_ts_320_t_84153600.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_340_t_89413200.000000_reference.vtu elder_python_pcs_0_ts_340_t_89413200.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_360_t_94672800.000000_reference.vtu elder_python_pcs_0_ts_360_t_94672800.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_380_t_99932400.000000_reference.vtu elder_python_pcs_0_ts_380_t_99932400.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_400_t_105192000.000000_reference.vtu elder_python_pcs_0_ts_400_t_105192000.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_40_t_10519200.000000_reference.vtu elder_python_pcs_0_ts_40_t_10519200.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_420_t_110451600.000000_reference.vtu elder_python_pcs_0_ts_420_t_110451600.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_440_t_115711200.000000_reference.vtu elder_python_pcs_0_ts_440_t_115711200.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_460_t_120970800.000000_reference.vtu elder_python_pcs_0_ts_460_t_120970800.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_480_t_126230400.000000_reference.vtu elder_python_pcs_0_ts_480_t_126230400.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_500_t_131490000.000000_reference.vtu elder_python_pcs_0_ts_500_t_131490000.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_60_t_15778800.000000_reference.vtu elder_python_pcs_0_ts_60_t_15778800.000000.vtu conc conc 1e-1 1e-5 + elder_pcs_0_ts_80_t_21038400.000000_reference.vtu elder_python_pcs_0_ts_80_t_21038400.000000.vtu conc conc 1e-1 1e-5 +) + AddTest( NAME 2D_ComponentTransport_HeterogeneousPermeability PATH Elliptic/square_100x100_ComponentTransport diff --git a/Tests/Data/Parabolic/ComponentTransport/elder/elder-python-bcs.py b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python-bcs.py new file mode 100644 index 0000000000000000000000000000000000000000..3d815d21b7bc5486b97ffaf7c6e9bb7c147cf67d --- /dev/null +++ b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python-bcs.py @@ -0,0 +1,34 @@ +import OpenGeoSys + + +class BCPressure(OpenGeoSys.BoundaryCondition): + def getDirichletBCValue(self, t, coords, node_id, primary_vars): + x, y, z = coords + + if x == -150 and z == 75: + # prescribe pressure of 0 + return (True, 0.0) + + # no Dirichlet BC + return (False, 0.0) + + +class BCConcentration(OpenGeoSys.BoundaryCondition): + def getDirichletBCValue(self, t, coords, node_id, primary_vars): + x, y, z = coords + + if z == -75: + # prescribe concentration of 0 + return (True, 0.0) + + if z == 75 and x >= 0: + # prescribe concentration of 1 + return (True, 1.0) + + # no Dirichlet BC + return (False, 0.0) + + +# instantiate the BC objects used by OpenGeoSys +bc_p = BCPressure() +bc_c = BCConcentration() diff --git a/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.gml b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.gml new file mode 100644 index 0000000000000000000000000000000000000000..d22068fc2b35f4f29064dcf89bd42163dcc610b2 --- /dev/null +++ b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.gml @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4fb7c7bc4ddbc37a38f1fdbaabc23eb415fe842ae2dbd4a5c9791fa7f93dc83 +size 1282 diff --git a/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.prj b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.prj new file mode 100644 index 0000000000000000000000000000000000000000..2132e3beecfa76ea1d095e962cca295ae1b376a2 --- /dev/null +++ b/Tests/Data/Parabolic/ComponentTransport/elder/elder-python.prj @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- vim: ft=xml sw=2 +--> +<OpenGeoSysProject> + <mesh>elder.vtu</mesh> + <geometry>elder-python.gml</geometry> + <python_script>elder-python-bcs.py</python_script> + <processes> + <process> + <name>HC</name> + <type>ComponentTransport</type> + <integration_order>2</integration_order> + <process_variables> + <concentration>conc</concentration> + <pressure>pressure</pressure> + </process_variables> + <fluid> + <density> + <type>ConcentrationDependent</type> + <reference_density>1000</reference_density> + <reference_concentration>0</reference_concentration> + <fluid_density_difference_ratio>0.2</fluid_density_difference_ratio> + </density> + <viscosity> + <type>Constant</type> + <value>1.0e-3</value> + </viscosity> + </fluid> + <porous_medium> + <porous_medium id="0"> + <permeability> + <permeability_tensor_entries>kappa1</permeability_tensor_entries> + <type>Constant</type> + </permeability> + <porosity> + <type>Constant</type> + <porosity_parameter>constant_porosity_parameter</porosity_parameter> + </porosity> + <storage> + <type>Constant</type> + <value>0.0</value> + </storage> + </porous_medium> + </porous_medium> + <decay_rate>decay_rate</decay_rate> + <fluid_reference_density>rho_fluid</fluid_reference_density> + <retardation_factor>retardation_factor</retardation_factor> + <solute_dispersivity_longitudinal>alpha_l</solute_dispersivity_longitudinal> + <solute_dispersivity_transverse>alpha_t</solute_dispersivity_transverse> + <molecular_diffusion_coefficient>Dm</molecular_diffusion_coefficient> + <specific_body_force>0 0 -9.81</specific_body_force> + <secondary_variables> + <secondary_variable type="static" internal_name="darcy_velocity" output_name="darcy_velocity"/> + </secondary_variables> + </process> + </processes> + <time_loop> + <processes> + <process ref="HC"> + <nonlinear_solver>basic_picard</nonlinear_solver> + <convergence_criterion> + <type>PerComponentDeltaX</type> + <norm_type>NORM2</norm_type> + <reltols>1e-3 1e-3</reltols> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial> 0.0 </t_initial> + <t_end>1.3149e8</t_end> + <timesteps> + <pair> + <repeat>10</repeat> + <delta_t>262980</delta_t> + </pair> + </timesteps> + </time_stepping> + <output> + <variables> + <variable>conc</variable> + <variable>pressure</variable> + <variable>darcy_velocity</variable> + </variables> + </output> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>elder_python</prefix> + <timesteps> + <pair> + <repeat>1</repeat> + <each_steps>20</each_steps> + </pair> + </timesteps> + </output> + </time_loop> + <parameters> + <parameter> + <name>rho_fluid</name> + <type>Constant</type> + <value>1000.0</value> + </parameter> + <parameter> + <name>alpha_l</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>alpha_t</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>Dm</name> + <type>Constant</type> + <value>3.57e-6</value> + </parameter> + <parameter> + <name>decay_rate</name> + <type>Constant</type> + <value>0.0</value> + </parameter> + <parameter> + <name>retardation_factor</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>p_ini</name> + <type>MeshNode</type> + <field_name>p_ini</field_name> + </parameter> + <parameter> + <name>c_ini</name> + <type>MeshNode</type> + <field_name>c_ini</field_name> + </parameter> + <parameter> + <name>constant_porosity_parameter</name> + <type>Constant</type> + <value>0.1</value> + </parameter> + <parameter> + <name>kappa1</name> + <type>Constant</type> + <values>4.84404e-13 0 0 0 4.84404e-13 0 0 0 4.84404e-13</values> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>conc</name> + <components>1</components> + <order>1</order> + <initial_condition>c_ini</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>elder</geometrical_set> + <geometry>whole_domain_boundary</geometry> + <type>Python</type> + <bc_object>bc_c</bc_object> + </boundary_condition> + </boundary_conditions> + </process_variable> + <process_variable> + <name>pressure</name> + <components>1</components> + <order>1</order> + <initial_condition>p_ini</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>elder</geometrical_set> + <geometry>whole_domain_boundary</geometry> + <type>Python</type> + <bc_object>bc_p</bc_object> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_picard</name> + <type>Picard</type> + <max_iter>300</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <eigen> + <precon_type>ILUT</precon_type> + <solver_type>BiCGSTAB</solver_type> + <max_iteration_step>5000</max_iteration_step> + <error_tolerance>1e-12</error_tolerance> + </eigen> + </linear_solver> + </linear_solvers> +</OpenGeoSysProject> diff --git a/web/content/docs/benchmarks/python-bc/elder-benchmark/elder.md b/web/content/docs/benchmarks/python-bc/elder-benchmark/elder.md new file mode 100644 index 0000000000000000000000000000000000000000..04b5ba1dde5c0fe7fb7f3219e34caba7d9303309 --- /dev/null +++ b/web/content/docs/benchmarks/python-bc/elder-benchmark/elder.md @@ -0,0 +1,27 @@ ++++ +project = "Parabolic/ComponentTransport/elder/elder-python.prj" +author = "Christoph Lehmann" +date = "2018-08-16T09:18:00+02:00" +title = "Saturated Variable-Density Flow and Mass Transport (Elder) with Python BC" +weight = 3 + +[menu] + [menu.benchmarks] + parent = "python-bc" + ++++ + +{{< data-link >}} + +## Motivation of this test case + +The aim of this test is: + +* to show that it is possible to prescribe BCs only on parts of a given geometry +* to assert that Python BCs work with processes involving more than one physical + field. + +## Details + +This test is a copy of [this test case]({{< ref "../../hydro-component/elder.md" >}}). +Please check the original test case for any details.