diff --git a/ProcessLib/LiquidFlow/Tests.cmake b/ProcessLib/LiquidFlow/Tests.cmake index dafcce389bb3dd7d84f415847afbfb7054ac19d8..3a092a9f04ca28f82d7e7652d26408b983f88a1e 100644 --- a/ProcessLib/LiquidFlow/Tests.cmake +++ b/ProcessLib/LiquidFlow/Tests.cmake @@ -45,6 +45,18 @@ AddTest( DIFF_DATA axisym_theis.vtu liquid_pcs_pcs_0_ts_30_t_1728.000000.vtu OGS5_pressure pressure 1e-8 1e-8 ) +AddTest( + NAME LiquidFlow_BuildupTest + PATH Parabolic/LiquidFlow/BuildupTest + EXECUTABLE ogs + EXECUTABLE_ARGS buildup_test.prj + WRAPPER time + TESTER vtkdiff + REQUIREMENTS NOT OGS_USE_MPI + DIFF_DATA + standard_solution_buildup_test_pcs_0_ts_107_t_424800.000000.vtu buildup_test_pcs_0_ts_107_t_424800.000000.vtu pressure pressure 1e-12 0.0 + standard_solution_buildup_test_pcs_0_ts_211_t_720000.000000.vtu buildup_test_pcs_0_ts_211_t_720000.000000.vtu pressure pressure 1e-12 0.0 +) AddTest( NAME LARGE_LiquidFlow_Anisotropic_GravityDriven3D diff --git a/Tests/Data/Parabolic/LiquidFlow/BuildupTest/buildup_test.prj b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/buildup_test.prj new file mode 100644 index 0000000000000000000000000000000000000000..d9385c546aa484026574c75b93a5871665c669b0 --- /dev/null +++ b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/buildup_test.prj @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh axially_symmetric="true">line_1000_axi.vtu</mesh> + <geometry>line_1000_axi.gml</geometry> + <processes> + <process> + <name>LiquidFlow</name> + <type>LIQUID_FLOW</type> + <integration_order>2</integration_order> + <darcy_gravity> + <!-- axis_id: 0, 1, or the dimension of space minus one --> + <axis_id>1</axis_id> + <!-- g>=0. g=0: non gravity term --> + <g>0.</g> + </darcy_gravity> + <process_variables> + <process_variable>pressure</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable type="static" internal_name="darcy_velocity" output_name="v"/> + </secondary_variables> + <material_property> + <fluid> + <density> + <type>Constant</type> + <value> 78.68 </value> + </density> + <viscosity> + <type>Constant</type> + <value> 1.295e-4 </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> 8.05e-7 </value> + </storage> + </porous_medium> + </porous_medium> + </material_property> + </process> + </processes> + <time_loop> + <processes> + <process ref="LiquidFlow"> + <nonlinear_solver>basic_picard</nonlinear_solver> + <convergence_criterion> + <type>DeltaX</type> + <norm_type>NORM2</norm_type> + <abstol>1.e-6</abstol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <output> + <variables> + <variable> pressure </variable> + <variable> v </variable> + </variables> + </output> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial> 0.0 </t_initial> + <t_end> 720000 </t_end> + <timesteps> + <pair> + <repeat>10</repeat> + <delta_t>0.432</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>0.864</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>4.32</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>8.64</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>43.2</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>86.4</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>432.0</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>864.0</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>4320.</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>8640.</delta_t> + </pair> + <pair> + <repeat>6</repeat> + <delta_t>43200.</delta_t> + </pair> + <pair> + <repeat>1</repeat> + <delta_t>21601.44</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>0.432</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>0.864</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>4.32</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>8.64</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>43.2</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>86.4</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>432.0</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>864.0</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>4320.</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>8640.</delta_t> + </pair> + <pair> + <repeat>10</repeat> + <delta_t>43200.</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>VTK</type> + <prefix>buildup_test</prefix> + <timesteps> + <pair> + <repeat> 1 </repeat> + <each_steps> 107 </each_steps> + </pair> + </timesteps> + </output> + </time_loop> + <parameters> + <parameter> + <name>p0</name> + <type>Constant</type> + <value>67.5e5</value> + </parameter> + <parameter> + <name>p_dbc</name> + <type>Constant</type> + <value>67.5e5</value> + </parameter> + <parameter> + <name>constant_porosity_parameter</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>kappa1</name> + <type>Constant</type> + <values>9.2e-12</values> + </parameter> + <parameter> + <name>p_spatial</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>pressure_source_term</name> + <type>CurveScaled</type> + <curve>pressure_source_term_temporal</curve> + <parameter>p_spatial</parameter> + </parameter> + </parameters> + <curves> + <curve> + <name>pressure_source_term_temporal</name> + <coords> 0 424800 424800.001 849600</coords> + <values> -0.2754 -0.2754 0 0</values> + </curve> + </curves> + <process_variables> + <process_variable> + <name>pressure</name> + <components>1</components> + <order>1</order> + <initial_condition>p0</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>geometry</geometrical_set> + <geometry>outer</geometry> + <type>Dirichlet</type> + <parameter>p_dbc</parameter> + </boundary_condition> + </boundary_conditions> + <source_terms> + <source_term> + <geometrical_set>geometry</geometrical_set> + <geometry>inner</geometry> + <type>Nodal</type> + <parameter>pressure_source_term</parameter> + </source_term> + </source_terms> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_picard</name> + <type>Picard</type> + <max_iter>10</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <lis>-i cg -p jacobi -tol 1e-20 -maxiter 10000</lis> + <eigen> + <solver_type>CG</solver_type> + <precon_type>DIAGONAL</precon_type> + <max_iteration_step>10000</max_iteration_step> + <error_tolerance>1e-20</error_tolerance> + </eigen> + <petsc> + <prefix>lf</prefix> + <parameters>-lf_ksp_type cg -lf_pc_type bjacobi -lf_ksp_rtol 1e-16 -lf_ksp_max_it 10000</parameters> + </petsc> + </linear_solver> + </linear_solvers> +</OpenGeoSysProject> diff --git a/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.gml b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.gml new file mode 100644 index 0000000000000000000000000000000000000000..29869a1e62c030db9b57707fe915b39b2f4c3cbb --- /dev/null +++ b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.gml @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e1ce78c91d3ad568e0f3b530da064658a3c48da4331d182ee7f880c17a34eba +size 483 diff --git a/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.vtu b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.vtu new file mode 100644 index 0000000000000000000000000000000000000000..06110f1294a6986aeaf3b1e28860cf8bb19a0a86 --- /dev/null +++ b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/line_1000_axi.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9bd6cad0e07b339a979478ba26bb5b6d0bc9e9aa405b10ea1be65405770b93f +size 71753 diff --git a/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_107_t_424800.000000.vtu b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_107_t_424800.000000.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6b37784d92e2f737016c8c251e526c3a99fecb28 --- /dev/null +++ b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_107_t_424800.000000.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bf448b0b3e36195d5c06aebb7b95bfd643dd90414a952aa1d774e77c2100a61 +size 35759 diff --git a/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_211_t_720000.000000.vtu b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_211_t_720000.000000.vtu new file mode 100644 index 0000000000000000000000000000000000000000..4914b639bcea2a9791a810eb4f79c2134581f2c0 --- /dev/null +++ b/Tests/Data/Parabolic/LiquidFlow/BuildupTest/standard_solution_buildup_test_pcs_0_ts_211_t_720000.000000.vtu @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d00ca55fa12f71153abb5e2d6a0159b528eda98f3219d7cd2edcbc9309191b15 +size 26606 diff --git a/web/content/docs/benchmarks/liquid-flow/buildup_test.pandoc b/web/content/docs/benchmarks/liquid-flow/buildup_test.pandoc new file mode 100644 index 0000000000000000000000000000000000000000..939e41e51f4150dc0e3fe6d02f19e14c1c8009cc --- /dev/null +++ b/web/content/docs/benchmarks/liquid-flow/buildup_test.pandoc @@ -0,0 +1,150 @@ ++++ +author = "Boyan Meng and Haibing Shao" +date = "2018-02-27T16:44:00+01:00" +title = "Buildup Test" +weight = 172 +project = "/Parabolic/LiquidFlow/BuildupTest/buildup_test.prj" + +[menu] + [menu.benchmarks] + parent = "liquid-flow" + ++++ + +{{< data-link >}} + +Problem description {#problem-description .unnumbered .unnumbered} +=================== + +The pressure buildup test is performed by shutting in a producing well +at time $t=t_p$, after which a smooth rise of the well head pressure can +be observed. For a geothermal reservoir, the buildup test result is +interpreted using a Horner plot in order to evaluate the reservoir +permeability or transmissivity. In this benchmark, observation data from +a geothermal well is employed to parameterize the numerical model. In +the model, a time dependent nodal source term was set up to represent +the shut-in operation. The simulated pressure profile is then verified +against the analytical solution. + +Model Setup {#model-setup .unnumbered .unnumbered} +=========== + +This benchmark represents a scenario in which the well had been +producing geothermal brine for $118\ \mathrm{h}$ at a rate of +$78\ t/\mathrm{h}$ and was then shut in for a buildup test. At the given +reservoir temperature (260$^\circ$C) and pressure ($47\ \mathrm{bar}$), the +density and viscosity of the water and steam mixture were calculated as +$\rho=78.68\ \mathrm{kg/m^3}$ and +$\mu=1.295\times10^{-4}\ \mathrm{Pa\ s}$. The compressibility of the +mixture was estimated as $nc_t=0.0805\ \mathrm{bar^{-1}}$ ($n$ refers to +the porosity of the reservoir), which yields a specific storage +coefficient of $S=\rho gnc_t=6.21\times 10^{-4}\ \mathrm{m^{-1}}$. The +observed pressure readings during the buildup test are cited from +Chapter 6 of the book *Geothermal Power Generation* +[1], and the data is archived in the Appendix. + +The permeability of the reservoir can be estimated by means of a Horner +plot, in which the pressure $p$ is plotted against +$(t_p+\Delta t)/\Delta t$, i.e. Horner time on a semi-logarithmic scale +(cf. Figure 1). In the Horner plot, the data points form a +straight line in the late-time period of the test. Note that the time +increases in the opposite direction of the *X*-axis. Therefore, the +linear section appears at the left side of the diagram. + +\centering +{{< img src="../horner.png" >}} + +Figure 1: Horner plot ($p$ vs $(t_p+\Delta t)/\Delta t$) for buildup test showing the inferred Horner straight line + + +The slope $m$ of the Horner straight line is expressed as: +$$m=0.1832\frac{Q\mu}{\kappa b}$$ in which $Q\ \mathrm{[L^3/T]}\ (Q>0)$ +is the production rate of the well before shut-in, +$\kappa\ \mathrm{[L^2]}$ is the permeability and $b\ \mathrm{[L]}$ is +the aquifer thickness. From the Horner plot, we can infer a Horner +straight line with a slope of $m=0.79$. Therefore the transmissivity of +the aquifer can be calculated as $$\begin{aligned} +\kappa b&=&0.1832\frac{Q\mu}{m}=0.1832\frac{((78000/3600)/78.68)\times1.295\times10^{-4}}{7.09\times10^5}\\&=&9.2\times10^{-12}\ \mathrm{m^3}\end{aligned}$$ +In addition, the straight line in the Horner plot can be extracted to a Horner time of 1, +which corresponds to the infinite shut-in time $(\Delta t)$. This leads to +an extrapolated pressure $p_0$ of $67.5~\mathrm{kPa}$, which is the +undisturbed reservoir pressure . + +Input files {#input-files .unnumbered .unnumbered} +=========== + +The benchmark project is defined in the input file 'buildup\_test.prj'. It defines the process to +be solved as "LiquidFlow" and the primary variable is hence pressure. +The initial condition is set to $p_0=67.5\ \mathrm{bar}$ and the +undisturbed boundary is achieved by a large domain size +$(r=1000\ \mathrm{m})$. The time-dependent source term is applied in this +benchmark. From the beginning until $t=424800$ sec, the pumping rate was +maintained at a constant rate. Afterwards, the well is shut-in and pressure +starts to build up. The geometries used to specify the model domain, boundary +conditions, and source term can be found in 'line\_1000\_axi.gml' file. +The mesh is specified in 'line\_1000\_axi.vtu', which is stored in the +VTK format and can be directly visualized in Paraview. + +Analytical solution {#analytical-solution .unnumbered .unnumbered} +=================== + +The pressure buildup test is comparable to a pumping recovery test as +the extraction rate is first kept constant at $Q$, and then becomes zero +at $t=t_p$. This benchmark then adopts the same assumptions as in the +[Theis' +problem](https://benchmarks.opengeosys.org/docs/benchmarks/liquid-flow/liquid-flow-theis-problem/). +The analytical solution of the pressure difference $\Delta p$ with +respect to the initial pressure $p_0$ is the sum of two Theis curves: +one starting at $t=0$ and another starting at $t=t_p$ but with an +opposite extraction rate, i.e. for $t\leq t_p$, +$$\Delta p=\rho g \frac{-Q}{4\pi T}W\left(\frac{r^2S}{4Tt}\right)$$ and +for $t>t_p$, +$$\Delta p=\rho g \frac{-Q}{4\pi T}W\left(\frac{r^2S}{4Tt}\right)+\rho g \frac{Q}{4\pi T}W\left(\frac{r^2S}{4T(t-t_p)}\right)$$ + +Results and evaluation {#results-and-evaluation .unnumbered .unnumbered} +====================== + +The pressure evolution is simulated throughout the domain and the result +is compared with the analytical solution at $r=10.287\ \mathrm{m}$. In +Figure 2, it can be observed that the numerical model +fits with the analytical solution very well. The absolute and relative +error between the analytical and numerical solution is depicted in +Figure 3. + +{{< img src="../comparison.png" >}} + + +Figure 2: OGS 6 result compared with analytical solution + +{{< img src="../error.png" >}} + + +Figure 3: Absolute and relative error + +References {#references .unnumbered .unnumbered} +======== +[1] RN Horne. Characterization, evaluation, and interpretation of well data. In: R DiPippo, editor,Geothermal Power Generation, chapter 6, pages 141–163.Elsevier, 2016. + +Appendix {#appendix .unnumbered .unnumbered} +======== + +\centering +| $\Delta t$ (h) | $\Delta p$ (bar) | $\Delta t$ (h) | $\Delta p$ (bar) | +| :------------: |:-----------------: | :---------------:| :---------------:| +| 0.0024 | 0.174 | 0.1708 | 3.65 | +| 0.0073 | 0.695 | 0.2442 | 4.00 | +| 0.0098 | 1.13 | 0.3667 | 4.26 | +| 0.0122 | 1.30 | 0.6111 | 5.13 | +| 0.0171 | 1.57 | 0.8556 | 6.35 | +| 0.022 | 1.74 | 1.2194 | 7.48 | +| 0.0244 | 1.91 | 1.5861 | 8.17 | +| 0.0292 | 2.00 | 1.8361 | 8.43 | +| 0.0367 | 2.09 | 2.4417 | 9.22 | +| 0.0414 | 2.17 | 3.4167 | 10.2 | +| 0.0489 | 2.43 | 3.8611 | 10.4 | +| 0.0586 | 2.61 | 6.3056 | 11.8 | +| 0.0733 | 2.78 | 8.3056 | 12.6 | +| 0.0856 | 2.96 | 10.9722 | 13.2 | +| 0.0975 | 3.13 | | | + + : Pressure measurements during well buildup[]{label="table:1"} diff --git a/web/content/docs/benchmarks/liquid-flow/comparison.png b/web/content/docs/benchmarks/liquid-flow/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..8b693f33e9d0e719cf220cbdb4e76abb2e15b169 --- /dev/null +++ b/web/content/docs/benchmarks/liquid-flow/comparison.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed8108d7ce33916d5ff0db71d303f867342a9a9128d232636ef0f6392455c9f9 +size 4457 diff --git a/web/content/docs/benchmarks/liquid-flow/error.png b/web/content/docs/benchmarks/liquid-flow/error.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb06288d52b0292027e3dc252a9308cc805468f --- /dev/null +++ b/web/content/docs/benchmarks/liquid-flow/error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a4c4ed3bc4132f8ac6061e164be8826e26f950223d486e541bcca69748b80ae +size 33444 diff --git a/web/content/docs/benchmarks/liquid-flow/horner.png b/web/content/docs/benchmarks/liquid-flow/horner.png new file mode 100644 index 0000000000000000000000000000000000000000..dd015c20f246619e633c2739e95dee621c1f4475 --- /dev/null +++ b/web/content/docs/benchmarks/liquid-flow/horner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50a3bb0be03d659f0c93536fde1b29c92d90410a559bc3a8794ab970f8f5c7ea +size 11774