GeoInv_002 Pulse Decay Experiment

 

Experiment Background

 

Pulse-decay experiments are routinely used to measure petrophysical properties of tight cores by flowing helium under pressure gradient. The following figure illustrates the pulse-decay experimental set-up (Jia B. et al. 2017). The set-up mainly consists of four components, including first upstream reservoir U1, second upstream reservoir U2, core holder, and downstream reservoir D.

 

Inv_example2_001

Pulse-decay experimental set-up (obtained from Jia B. et al. 2017)

 

There are three main stages in the experiment:

Stage 1: Gas injection by constant pressure with valves V1 and V2 opened, and V3 closed.

Stage 2: Pressure pulse introduced into U1 with V2 closed.

Stage 3: V2 is opened and V1 is closed. Pressure equilibrium attained over time.

 

In gas flow, it is important to account for Klinkenberg effect, in which the slip flow of gas at pore walls enhances gas flow when pore sizes are very small. This causes the measured permeability of gas to be higher than the absolute permeability of the sample.

 

 

Modelling Background and Target solution

 

The target solution is generated using a ParaGeo simulation which is provided in GeoInv_002\Reference_solution.

 

A core sample modelled in 2D with dimension of 0.408m x 0.000587m is prescribed with reservoir volume, pressure and temperature at both ends. The boundary conditions are defined via Supply_reservoir_boundary data structure.

 

Inv_example2_002

Description of geometry and inlet/outlet boundaries

 

 

The data file is set for simulation of Stage 3 described in the Experiment Background section above. During this stage, the upstream pressure starts to decline while the downstream pressure rises. As shown in the plot below, when the two pressure curves approach one another, pressure equilibrium across the core sample gradually takes place.

 

Inv_example2_003

Equilibrium attained over time as two pressure curves approach one another

 

Inv_example2_004

Pressure distribution over time across core sample

 

 

Users may refer to the ParaGeo data file used to generate target solution for more details (GeoInv_002\Reference_solution). In the following, the key properties of core sample and helium gas as well as reservoir boundary supply conditions are tabled.  

 

Core Sample Properties

Value

Young's modulus (MPa)

25000

Poisson's ratio

0.25

Porosity

0.05

Density (kg/m3)

2500

Permeability (m2)

5.3(10-18)

 

 

Helium Gas Properties/Model Setup

Value

Equation state type

Ideal Gas

Gas deviation factor

0.9

Minimum gas pressure (Pa)

1000

Gas universal constant (J/kmol/K)

8314

Molecular weight (kg/kmol)

4.0

Klinkenberg slippage factor (Pa)

105

Viscosity (Pa.s)

2(10-5)

 

 

Reservoir Boundary Supply

Inlet

Outlet

Volume (m3)

6.57(10-6)

1.83(10-6)

Pressure (Pa)

1064200

5516

Temperature (0C)

25.15

25.15

 

 

 

 

Inverse Analysis data file description (.inp)

 

In this inverse analysis, the goal is to recover the permeability and Klinkenberg slippage factor of the core sample when using helium gas. The target solutions are the pore pressure evolution at both inlet and outlet of the core. Target solutions were generated from a ParaGeo simulation with the data set following the modelling descriptions above. Template data file, in this particular case, is the same as the target data file. It is used by ParaGeoInv to generate model data files during optimisation process. In the following, we focus on the descriptions of ParaGeoInv data file.

 

The ParaGeoInv data file for the project is: GEOINV_002\Data\Pulse_decay.dat.   The basic data includes:

1Application_data identifies the directory of ParaGeo solver

2Parameter_data sets optimisation parameters, including variable name, initial value, minimum/maximum values, corresponding data structure name and number

3NA_options defines the tuning parameters of Nearest Neighbour algorithm and convergence tolerance. Users are also given flexibility to manage (i.e. keep or delete) the generated test models.

4File_data identifies the directory of template, target and test files. The name of template file is also required.

5Misfit_data_set specifies type of data to be compared between target and model solutions. The computation of corresponding misfit value is based on selected error type.  

6Inverse_case chooses misfit data set(s) to be used. This data structure offers to run multiple cases, with the aim of homogenising the same optimisation variable.

 

Application_data

 

Application_data defines control data for inverse analysis, including application platform for forward analysis, experiment type and optimisation algorithm to be used.

 

Data File

 

 

* Application_data

! -------------------------------

Application           "Parageo"

 Inversion_algorithm "NAInverse"

 Parageo_dir         "C:\parageo\x64"

 Experiment           "Material"

1ParaGeo is selected as the application platform.

 

2NAInverse (Nearest neighbour algorithm) is called. This is the only optimisation algorithm at the moment.

 

3Directory of ParaGeo is identified via Parageo_dir.

 

4Experiment type is set as 'Material'.  

 

 

 

Parameter_data

 

Parameter_data defines parameter(s) and its range to be considered in inversion analysis.

 

Data File

 

 

* Parameter_data

! -------------------------------

 Name                       IDM=2

   "Permeability" "Klinkenberg_b"

 Type                       IDM=2

   0 0

 Value                      IDM=2

   1.0E-20  1E4  

 Minimum_value              IDM=2

   1.0E-20  1E4

 Maximum_value              IDM=2

   1.0E-17  1E6

 Variable_structure_name    IDM=2

   "Material_data" "Material_data"

 Variable_structure_number  IDM=2

   1 1

 

1Young's modulus and Poisson's ratio are set as optimisation parameters.

 

2Type keyword defines whether each of the parameters listed in Name keyword are going to be inverted (Type = 0) or have fixed values (Type =1). In this case both "Permeability" and "Klinkenberg_b" are to be solved.

 

3Value allows to define input values for parameters with fixed values (Type = 1). In the present case all parameters are inverted and therefore definition of Value keyword is not required and values input here will be ignored.

 

4The Minimum_value for "Permeability" and "Klinkenberg_b" are, respectively, 1E-20 and 1E4.

 

5The Maximum_value for "Permeability" and "Klinkenberg_b" are, respectively, 1E-17 and 1E6.

 

6Both "Permeability" and "Klinkenberg_b" are parameters associated with Material_data (Variable_structure_name) data structure with NUM=1 (Variable_structure_number) defined in the template data file.

 

 

NA_options

 

NA_options defines the control options for the nearest neighbour algorithm.

 

Data File

 

 

* NA_options

! ---------------------------------

 Algorithm                       "Auto"

 Convergence_tolerance          1.0E-04

 Maximum_num_samples                 20

 Num_models_in_initial_sample         8

 Num_models_in_sample                 8

 Num_models_in_resample               4

 Model_delete_option         "KeepBest"

 Number_models_output                 5

 Model_clean_option          "KeepSpec"

 Model_results_keep               IDM=1

   "History"

 

1Algorithm = "Auto" refers to termination of computation once convergence tolerance is satisfied.

 

2Convergence_tolerance is set at 0.0001.

 

3Maximum_num_samples is set to 20.

 

4There are 8 models in the initial sample (Num_models_in_initial_sample).

 

5There are 8 models in subsequent samples (Num_models_in_sample).

 

6The models for subsequent samples are generated (resampled) from the 4 most optimal models (Num_models_in_resample).

 

7Output the 5 most optimal models

 

 

File_data

 

File_data defines the working directories of data files that are crucial to the inversion analysis.

 

Data File

 

 

* File_data

! ---------------------------------

 Template_file        "GeoInv_002.dat"

 Template_directory       ".\Template"

 Target_directory           ".\Target"  

 Test_directory               ".\Test"    

 

 

1Template_file identifies the name of the template data file stored in Template_directory.

 

2Directory of target solution is specified in Target_directory.

 

3During optimisation computation, the generated model data files are stored in Test_directory.

 

 

Misfit_data_set

 

Misfit_data_set specifies type of data to be compared between target and model solutions. The computation of corresponding misfit value is based on selected error type.  

 

Data File

 

 

* Misfit_data_set            NUM=11

! ---------------------------------

Error_type                  "RMS"

 Experiment_filename "GeoInv_002_ref_001.hdh"

 Experiment_variable_IDs     IDM=1

   "Pore_nod_ave"

 Model_set_number                1

 Model_variable_IDs          IDM=1

   "Pore_nod_ave"

 

* Misfit_data_set            NUM=12

! ---------------------------------

Error_type                  "RMS"

 Experiment_filename "GeoInv_002_ref_002.hdh"

 Experiment_variable_IDs     IDM=1

   "Pore_nod_ave"

 Model_set_number                1

 Model_variable_IDs          IDM=1

   "Pore_nod_ave"

 

1Misfit_data_set of NUM=11 and NUM=12 correspond to results for the inlet and outlet reservoir boundaries respectively. Here only the data relative to Misfit_data_set NUM=11 is discussed as the data for Misfit_data_set NUM=12 is defined in the same manner

 

2Error_type based on root mean square is specified (RMS).

 

3The target solution is stored in the "GeoInv_002_ref_001.hdh" history file and is referenced in Experiment_filename keyword.

 

4Experiment_variable_IDs (Target solution variable name) with the ID of "Pore_nod_ave" is specified (which corresponds to average nodal pore pressure).

 

5Model_set_number is set as 1. This identifies the History_point NUM=1 defined in the template data file as the source data structure for the model variable to be compared to the target solution variable.

 

6Model_variable_IDs "Pore_nod_ave" is specified. It will be compared against the target solution "Pore_nod_ave".

 

 

 

Inverse_case

 

Inverse_case chooses misfit data set(s) to be used.

 

Data File

 

 

* Inverse_case                NUM=1

! ---------------------------------

 File_data_num                   1

 Misfit_data_sets            IDM=2

   11 12

 

 

1Inversion analysis is performed using data files and folders specified in File_data NUM=1 (as specified in File_data_num = 1), and misfit data sets NUM=11 and NUM=12.

 

 

 

Results

 

The result files for the project are in directory: GeoInv_002\Results

 

The inverse analysis has finalised after performing 168 model simulations without satisfying the imposed convergence criteria. This corresponds to the initial sample of 8 models plus 20 samples of 8 models each. Hence, for the present case the criteria for finalising the inverse analysis has been to reach the maximum number of samples (set to 20).  The best model (model number 161) is reported as the optimal model which has a misfit of 2.25E-04 (with the convergence criteria being 1.0E-4). After such maximum number of samples-triggered termination one may asses whether the optimal model reproduces the target observations with a satisfactory accuracy. As can be seen in the final figure, the found optimal values lead to a solution that has a peak error of c.a. 1.4 % at 92 s in the pore pressure measured at the outlet which may be low enough to be acceptable (this will depend on the purposes).

 

Misfit Value

 

Inv_example2_007

Reduction of misfit towards value lower than 1% error

 

 

Optimal Permeability

 

Inv_example2_008

Nearest Neighbour algorithm searching for optimal Young's modulus

 

 

Optimal Klinkenberg Slippage Factor

 

Inv_example2_009

Nearest Neighbour algorithm searching for optimal Klinkenberg slippage factor

 

 

Comparison with Target Solution

 

Inv_example2_010

Low percentage difference in comparison against target solutions

 

 

 

References

Jia, B., Tsau, J., Barati, R. 2017. Evaluation of Core Heterogeneity Effect on Pulse-Decay Experiment. 31st International Symposium of the Society of Core Analysts.