Skip to content
Snippets Groups Projects
Commit 9452965e authored by HBShaoUFZ's avatar HBShaoUFZ Committed by Dmitri Naumov
Browse files

[Web] Add the benchmark "Buildup Test" (#2089)

* add the content of the benchmark buildup test

* add the benchmark description.

* remove tailing white space.

* fix the table format.

* fix figures

* linking the figures

* add input files to the Test data

* move input files to the LFS

* minor language and format issues fixed

* add standard benchmark results.

* activate the test

* correct the file name.

* fixing two issues raised by WW.
1) Fixing typo in the benchmark document;
2) Only print out the necessary time step for comparison.
parent 3351c3e6
No related branches found
No related tags found
No related merge requests found
Showing
with 453 additions and 0 deletions
......@@ -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
......
<?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>
Source diff could not be displayed: it is stored in LFS. Options to address this: view the blob.
File added
+++
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"}
web/content/docs/benchmarks/liquid-flow/comparison.png

129 B

web/content/docs/benchmarks/liquid-flow/error.png

130 B

web/content/docs/benchmarks/liquid-flow/horner.png

130 B

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment