# GRDECL grids¶

PFLOTRAN-OGS supports input using industry standard GDECL format; which is described in this section. this section.

Below is the list of all available options to define a GRDECL grid:

## Conventions within Grdecl input files¶

Within a GRDECL file the data syntax and conventions are those of Eclipse rather than PFLOTRAN, in the following respects:

The data is placed on a new line, after the keyword. The values are normally delimited by spaces (although tabs are accepted), and may be split across a number of lines. Data will be read until either the correct number of items have been processed, or a / terminating character is encountered. If all the expected values are present, a / character may still be added and will do no harm.

Repeat counts may be used – for example, 3000*0.44 implies 3000 values of 0.44.

Defaults may be used – for example, 3000* implies 3000 default values. For MULTX, for example the default value is 1.0, so 5* would be the same as 5*1.0 which would be the same as 1.0 1.0 1.0 1.0 1.0.

Depths are measured downwards.

Permabilities are measured in milliDarcies (mD)

The basic ordering scheme is natural ordering – with the I-index changing fastest, then the J-index, and with the K-index changing slowest. The K-order is down the columns of cells.

## DIMENS¶

This keyword sets the basic dimensions of the (I,J,K) grid, the three arguments being Nx, Ny, and Nz. The following example specifies a 130 by 187 by 34 grid.

```
DIMENS
130 187 34 /
```

## COORD¶

This keyword, combined wth ZCORN, allows a grid with dip and displacement faults to be entered. COORD consists of \((N_x+1)\cdot(N_y+1)\) sets of ‘coordinate lines’ each specified by a lower and an upper point, each of which is defined by an x,y,z triplet. In almost every case, COORD/ZCORN data is produced by a pre-processor. However, here is a very simple example, which could be used to set up a 1x1x2 cell grid. It defines cells with an areal extent of 10m by 10m:

```
COORD
0 0 0 0 0 10000
10 0 0 10 0 10000
0 10 0 0 10 10000
10 10 0 10 10 10000
/
```

## ZCORN¶

This keyword specifies the depth of each cell node in the grid defined by DIMENS and COORD. As mentioned under COORD, COORD/ZCORN data is usually generated by a pre-processor. However, here is an example for the 1x1x2 grid considered in the COORD example above:

```
ZCORN
4*2003 8*2015 4*2032 /
```

Note that there are 8*Nx*Ny*Nz depths present, setting the four top corner depths of the top cell to 2003 m, the four corners at the bottom of the top cell to 2015, the four corners of the top of the bottom cell to 2015 m and the four corners at the bottom of the bottom cell to 2032 m. It is important to be aware that the arguments of ZCORN are depths, as positive numbers measured downwards. It would be common to include a file of COORD/ZCORN data using EXTERNAL_FILE, as in:

```
EXTERNAL_FILE gridgeo/geometry_a.grdecl
```

Units: note that the units of ZCORN are always meters unless GRIDUNITS has selected feet.

## DX¶

To enter a simple regular grid, DX, DY and DZ may be used. This is an alternative to COORD/ZCORN. This keyword specifies the dimension of each cell in the grid x-direction. It

is very common to enter this data with a repeat count, such as:

```
DX
1122000*6.096
```

Units: the units of DX are always meters unless GRIDUNITS has selected feet. Note that the order of values is the GRDECL default natural order, with the x-index changing fastest, the z-index changing most slowly, starting from the top layer of the reservoir.

## DY¶

This keyword specifies the dimension of each cell in the grid y-direction. It is analogous to DX.

Units: the units of DY are always meters unless GRIDUNITS has selected feet.

Note that the order of values is the GRDECL default natural order.

## DZ¶

This keyword specifies the dimension of each cell in the grid z-direction. It is analogous to DX and DY. As reservoirs commonly have a different thickness for each layer, it is common to enter repeated values by layer, for example, for a 10x10x3 grid:

```
DZ
100*6.096 100*9.144 100*15.24 /
```

Units: the units of DZ are always meters unless GRIDUNITS has selected feet.

Note that the order of values is the GRDECL default natural order.

Note that the layers count down from the top layer.

Note that the terminating / character is not required if a full set of values has been entered.

## PERMX¶

Specify the permeability for each cell in the grid in the x-direction.

An example is for a 10x10x3 grid, in which the top layer has an x-permeability of 50 mD, the middle layer has a permeability of 50 mD and the bottom layer has a permeability of 200 mD.

```
PERMX
100*500.0 100*50.0 100*200.0
```

Units are mD.

Default: The default is 0.

Note that the order of values is the GRDECL default natural order.

Note that in the above example a full set of Nx.Ny.Nz values has been provided, so the terminating / character is not required (although it may be added). If the terminator is used before all the values have been entered, the remaining values will be set to the default of zero.

## PERMY¶

Specify the permeability for each cell in the grid in the y-direction. This keyword is analogous to PERMX.

Units are mD.

Default: The default is 0.

## PERMZ¶

Specify the permeability for each cell in the grid in the z-direction. analogous to PERMX.

Units are mD.

Default: The default is 0.

## MULTV¶

Specify the volume multipliers for each cell in the grid. The default is 1.0

The volume multiplier acts on the pore volume and the bulk volume of a cell (so that the amount of fluid and the rock thermal capacity are increased by the same factor.

## MULTX¶

Specify the x-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The x-direction transmissibility multiplier acts on the flow between a cell and its x-direction neighbour in the positive direction. So a MULTX value of 0.5 for cell (1,1,1) in a regular grid would halve the transmissibility between cell (1,1,1) and (2,1,1).

## MULTY¶

Specify the y-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The y-direction transmissibility multiplier acts on the flow between a cell and its y-direction neighbour in the positive direction. So a MULTY value of 0.5 for cell (1,1,1) in a regular grid would halve the transmissibility between cell (1,1,1) and (1,2,1).

## MULTZ¶

Specify the z-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The z-direction transmissibility multiplier acts on the flow between a cell and its z-direction neighbour in the positive z-direction (that is, its downwards neighbour). So a MULTZ value of 0.5 for cell (1,1,1) in a regular grid would halve the transmissibility between cell (1,1,1) and (1,1,2).

As an example, for a 100x100x10 grid, the following MULTZ data would prevent flow between the 6 th and 7 th layers, counting from the top:

```
MULTZ
50000*1.0 10000*0.0 40000*1.0 /
```

## MULTX-¶

Specify negative x-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The negative x-direction transmissibility multiplier acts on the flow between a cell and its x-direction neighbour in the **negative** direction. So a MULTX- value of 0.5 for cell (3,1,1) in a regular grid would halve the transmissibility between cell (3,1,1) and (2,1,1).

## MULTY-¶

Specify negative y-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The negative y-direction transmissibility multiplier acts on the flow between a cell and its y-direction neighbour in the **negative** direction. So a MULTY- value of 0.5 for cell (1,3,1) in a regular grid would halve the transmissibility between cell (1,3,1) and (1,2,1).

## MULTZ-¶

Specify negative z-direction transmissibility multipliers for each cell in the grid. The default is 1.0

The negative z-direction transmissibility multiplier acts on the flow between a cell and its z-direction neighbour in the **negative** z-direction (that is, its upwards neighbour). So a MULTZ- value of 0.5 for cell (1,1,3) in a regular grid would halve the transmissibility between cell (1,1,3) and (1,1,2).

## PORO¶

Specify the rock porosities as fractions.

The default is 0.0.

When a cell is given a zero porosity, it will be made inactive and excluded from the simulation. An example is a 100x100x10 grid, with the entire 5 th layer being removed and made inactive:

```
PORO
40000*0.35 10000*0.0 50000*0.23 /
```

## TOPS¶

Specify the cell top depth. Normally, only the top layer need be specified, and cells below the top layer will be placed underneath that layer at depths which honor the DZ values of the cells. However, it is possible to specify the TOPS depths of all the cells. If this results in the cells being separated in space, then it is possible that the gap between two cells would result in a zero flow between them. The separation required to cause such a zeroing of the flow is controlled by the PINCH keyword.

Units: the units of TOPS are always meters unless GRIDUNITS has selected feet.

## NTG¶

Specify the net-to-gross ratios as fractions. The default is 1.0.

Net-to-gross ratios represent the fraction of the material in a cell which has the given porosity value. The remaining fraction is assumed to have zero porosity and permeability. It is also assumed that the impermeable material is arranged in layers. The NTG fraction is applied to the pore volume and to permeabilities for flows in the x and y directions.

Note that the material which is not in the NTG fraction is assumed to play no role in the simulation. In a thermal simulation in which heat may conduct into impermeable rock, it may be better to include the NTG value in the porosity, and set the rock properties to reflect those of both the rock in the porous fraction and the rock in the non-porous fraction of the cell.

Note that the order of values is the GRDECL default natural order.

## ACTNUM¶

Specify the active cell status for each cell. \(N_x\cdot N_y\cdot N_z\) integer values are expected, which should each be 0, 1, 2 or 3, the default being 1. The order of values is the GRDECL default natural order.

A value of 0 will render the cell inactive.

A value of 1 implies that the cell is active, subject to the MINPV criterion.

A value of 2 will set the porosity to 0.000001, so that the cell is rock-filled, which can be useful in some thermal runs.

A value of 3 will set the pore volume to the bulk volume (i.e. porosity of 100%).

## SATNUM¶

Specify the set of CHARACTERISTIC_CURVES to be used for each cell.

\(N_x\cdot N_y\cdot N_z\) integer values are expected, which should each be in the range 1 to Ncc, where Ncc is the number of sets of CHARACTERISTIC_CURVES provided. The order of values is the GRDECL default natural order.

SATNUM associates cells with the CHARACTERISTIC_CURVES in the expected manner: that is, a SATNUM value of 1 associates the cell with the first set of CHARACTERISTIC_CURVES data, 2 with the second set and so on.

## IMBNUM¶

Specify the set of CHARACTERISTIC_CURVES to be used for imbibition processes.

\(N_x\cdot N_y\cdot N_z\) integer values are expected, which should each be in the range 1 to Ncc, where Ncc is the number of sets of CHARACTERISTIC_CURVES provided. The order of values is the GRDECL default natural order.

`IMBNUM`

associates cells with the CHARACTERISTIC_CURVES in the expected manner: that is, a IMBNUM value of 2 associates the cell with the second set of CHARACTERISTIC_CURVES data, 3 with the third set and so on.

## MINPV¶

Set the criteria for a cell to be made inactive on the basis of a low or zero pore volume. This keyword takes a single argument, the pore volume below which a cell is deemed to be inactive and excluded from the simulation. The default value is 0.001 rm^3 (reservoir cubic meters). Larger values can be used to exclude cells with small volumes which may create problems for the simulator.

An example is:

```
MINPV
1000 /
```

This will exclude any cell with a pore volume of less than 1000 rm^3 from the simulation.

## PINCH¶

Define how pinch-outs (inactive layers between active cells) are to be handled. This keyword takes a single value, which is the maximum distance between two cells in non- neighboring layers with intervening inactive cells, such that a pinch-out connection will be generated between them. The separation distance is the largest of the four corner separation distances. If this separation distance exceeds the pinch-out distance no connection will be generated.

An example is:

```
PINCH
0.1 /
```

The default value is 0.001 meters.

Units: the units of PINCH are always meters unless GRIDUNITS has selected feet.

## NEWTRAN¶

Use a transmissibility calculation which allows displacement faults. This is the default for COORD/ZCORN.

## OLDTRAN¶

Use a transmissibility calculation which only connects neighbors in the IJK grid. This is the default for DX/DY/DZ.

## DPCF¶

Generates a heterogeneous permeability distribution using a Dystra-Parsons standard distribution in ln(K) around the user-specified values. An example is given below:

```
dpcf
0.3 1 /
```

The first argument is the Dyksta- Parsons coefficient [DP50], which is the reservoir heterogeneity index (\(\mbox{RHI}\)). The range of this index is between 0 and 1:

\(\mbox{RHI} = 0\) |
Homogenous reservoir |

\(0.0 < \mbox{RHI} < 0.25\) |
Slightly heterogeneous reservoir |

\(0.25 < \mbox{RHI} < 0.5\) |
Heterogeneous reservoir |

\(0.5 < \mbox{RHI} < 0.75\) |
Very heterogeneous reservoir |

\(0.75 < \mbox{RHI} < 1.0\) |
Extremely heterogeneous reservoir |

\(\mbox{RHI} = 1\) |
Perfectly heterogeneous reservoir; unlikely this exists in reality |

The second optional argument is the integer random number seed value. The default, 0 or 1 will all give the same pseudo-random sequence (i.e. the same consistent heterogeneity will be obtained in successive runs). Positive values 2, 3, 4 etc. will give different pseudo-random sequences.

The DPCF option introduces heterogeneity generating relative permeabilities that are not correlated and not representative of any real field. In general, larger values of RHI make the problem harder to solve, especially for values above 0.5.

## ADD¶

Define an addition to a grid quantity in some box of cells in the I,J,K grid. This is the first of a set of four keywords (ADD, COPY, EQUALS and MULTIPLY) which allow changes to be made to the grid data.

The syntax is typically as in the example below:

```
ADD
<grid array name1> <value1> <il1 iu1 jl1 ju1 kl1 ku1> /
<grid array name2> <value2> <il2 iu2 jl2 ju2 kl2 ku2> /
...
/
```

where <grid array name> values are one of the set:

dx,dy,dz, permx,permy,permz, multx,multy,multz, poro, tops, ntg, actnum, satnum

<value> = value to be added to the grid array

<il iu jl ju kl ku> = box of cells in Cartesian indexing space which selects the cells to which the operation applies. If these values are omitted the initial default the entire reservoir. If entered, the operation applies to cells with coordinates i,j,k such that \(il\leq i\leq iu\); \(jl\leq j\leq ju\) and \(kl\leq k\leq ku\).

When a series of operations is defined under a single ADD keyword, the default of cell limits for each record are the values used in the previous record.

il,jl and kl default to 1, iu defaults to Nx, ju defaults to Ny and ku defaults to Nz.

The list of addition operations is terminated when a null record (just a / character on a new line) is encountered.

An example is an addition to the permeability in the region \(1\leq I\leq 45\), \(8\leq J\leq 67\), \(15\leq K\leq 16\):

```
ADD
PERMX 105.2 1 45 8 67 15 16 /
/
```

Note that the BOX is defined using the GRDECL convention that layers are counted down from the top of the reservoir.

## COPY¶

Copy the contents of one grid array to another in some box of cells.

The syntax is typically:

```
COPY
<from_grid array name1> <to_grid array name1> <il1 iu1 jl1 ju1 kl1 ku1> /
<from_grid array name2> <to_grid array name2> <il2 iu2 jl2 ju2 kl2 ku2> /
...
/
```

where <from_grid array name> and <to_grid array name> are both from the set dx,dy,dz, permx,permy,permz, multx,multy,multz, poro, tops, ntg, actnum, satnum.

The limits of the operation are defined by the box of coordinate limits <il iu jl ju kl ku> in the same way as for the ADD keyword.

A common example of the use of COPY is setting the PERMY values equal to the PERMX values:

```
COPY
PERMX PERMY /
/
```

## EQUALS¶

Set the contents of a grid array to a value in some box of cells. The syntax is typically:

```
EQUALS
<grid array name1> <value1> <il1 iu1 jl1 ju1 kl1 ku1> /
<grid array name2> <value2> <il2 iu2 jl2 ju2 kl2 ku2> /
...
/
```

where <grid array name> is one of the set: dx,dy,dz, permx,permy,permz, multx,multy,multz, poro, tops, ntg, actnum, satnum, tranx, trany, or tranz.

<value> is the value to be assigned to the grid array

The limits of the operation are defined by the box of coordinate limits <il iu jl ju kl ku> in the same way as for the ADD keyword.

A common usage of the EQUALS keyword is to assign a single value to an array over the whole reservoir:

```
EQUALS
PORO 0.132 /
/
```

## MULTIPLY¶

Multiply the values of a grid quantity in some box of cells. The syntax is typically:

```
MULTIPLY
<grid array name1> <value1> <il1 iu1 jl1 ju1 kl1 ku1> /
<grid array name2> <value2> <il2 iu2 jl2 ju2 kl2 ku2> /
...
/
```

Where <grid array name> is one of the set:

dx,dy,dz, permx,permy,permz, multx,multy,multz, poro, tops, ntg, actnum, satnum;

or of the set:

porv, tranx, trany, tranz.

<value> is the value by which the grid array is to be multiplied

The limits of the operation are defined by the box of coordinate limits <il iu jl ju kl ku> in the same way as for the ADD keyword.

A common usage of the MULTIPLY keyword is to multiply an array over the whole reservoir:

```
MULTIPLY
PERMZ 0.2 /
/
```

Internally, PORV multiplication is applied to PORO, and TRANX multiplications are applied to MULTX etc.

## FAULTS¶

Define the path of a barrier fault across the reservoir. This type of fault defines a transmissibility barrier in the reservoir.

```
FAULTS
‘FAULTA’ 1 5 6 6 1 10 Y /
‘FAULTA’ 5 5 6 8 1 10 X /
‘FAULTA’ 6 10 8 8 1 10 Y /
‘FAULTB’ 1 10 9 9 1 10 Y /
/
```

In each fault record the six integers define a box of cells, and the last value (which can be X, Y, Z, X-, Y- or Z-) defines a cell face.

In the case of X, Y or Z this is the ‘upper’ cell face in the GRDECL indexing convention – i.e., X implies from the cell to its positive x-index neighbour, Y implies from the cell to its positive y-index neighbour, and Z implies from the cell to the cell below it.

In the case of X-, Y- or Z- this is the ‘lower’ cell face in the GRDECL indexing convention – i.e., X- implies from the cell to its negative x-index neighbour, Y- implies from the cell to its negative y-index neighbour, and Z- implies from the cell to the cell above it.

Note that the X, Y and Z cases operate by making changes to the MULTX, MULTY and MULTZ transmissibility multiplier arrays, whilst the X-, Y- and Z- cases operate by making changes to the MULTX-, MULTY- and MULTZ- transmissibility arrays.

The series of fault records is teminated when an empty record (a single / character) is encountered.

Note: Quotes are accepted but are not required. The name can be up to 32 characters and case is not significant.

## MULTFLT¶

Set the multiplier for a fault defined with FAULTS. This multiplier is applied to all the cell faces defined in the corresponding FAULTS track.

```
MULTFLT
FAULTA 0.5 /
FAULTB 0.0 / ! Sealing fault
/
```

Note: Quotes are accepted but are not required. The name can be up to 32 characters and case is not significant.

## GRIDUNIT¶

Set the units being used for the grid data to metres or feet.

```
GRIDUNIT
feet /
```

The default is metres. Note that the required conversion is applied from when the GRIDUNIT keyword is read, and can be changed back. In any event the GRIDUNIT selection only applies within the GRDECL file.

## MAPAXES¶

Define the location of the grid in the true space (e.g. a UTM coordinate set). This keyword is read, and passed through to the Eclipse format output files.

## CARFIN (local grid refinement)¶

Opens a new cartesian refinement.

Takes the following arguments:

refinement name

box of cells to be refined (ixl,ixu,iyl,iyu,izl,izu)

dimension of refinement: nxref,nyref,nzref.

For example:

```
carfin
xxx 1 4 1 4 1 1 16 16 1 /
nxfin
5 5 3 3 /
nyfin
5 5 3 3 /
endfin
```

Within the block from CARFIN to ENDFIN, can set cell properties as for a grid with dimension nxref by nyref by nzref.

Here is an example of a visualisation of a model with local grid refinement:

### HXFIN, HYFIN, HZFIN¶

Specify the relative sizes of the refinement cells in X, Y and Z directions within a LGR data block. HXFIN, HYFIN and HZFIN expect a number of entries equal to the number of refinement cells in X, Y and Z directions in the LGR block, with each entry being the ratio between the cell size and the previous cell size (I-1, J-1, K-1), in a given global cell. Note that the number of cells and indices (I,J,K) being referred to, are those relative to the specific LGR block, not the global ones.

Default values specified by the special asterisk character (e.g. 2*) are given a value equal to 1, which means no size change with respect to the previous cell.

HXFIN, HYFIN and HZFIN are normally used in conjunction with NXFIN, NYFIN and NZFIN. See example below:

```
CARFIN
XXX 1 5 1 5 1 3 20 20 10
NXFIN
8 4 4 2 2 /
NYFIN
8 4 4 2 2 /
NZFIN
2 2 6 /
HXFIN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /
HYFIN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /
HZFIN
2* 2* 1 2 3 4 5 6 /
ENDFIN
```

### NXFIN, NYFIN, NZFIN¶

Specify how the refined cells are to be split between global cells. So for `NXFIN`

with ixu-ixl+1=4, four global cells refined in x-direction expect 4 arguments, the arguments sum to nxref, the refinement dimension.

## EQLNUM¶

Specify the EQUILIBRATION data to be used for each cell.

Nx⋅Ny⋅Nz integer values are expected, which should each be in the range 1 to Neq, where Neq is the number of EQUILIBRATION data blocks provided in the input. The order of values is the GRDECL default natural order.

EQLNUM associates each cell to an EQUILIBRATION data set, with the EQLNUM integer indices referring to the order in which EQUILIBRATION data sets are found in the input. That is, an EQLNUM value of 1 associates the cell with the first EQUILIBRATION block, 2 with the second and so on.