All,
So I've had some more private messages asking for help on the J-Function. First off, please read the thread at[link Point to another website Only the registered members can access]
In terms of what is a J-Function.... I'm sure there are plenty of elegant definitions around you can find, but in essence it is a way of describing how families of rocks with similar poro-perm & saturation characteristics will vary in non-wetting fluid saturation vs applied non-wetting buoyancy pressure (ie hydrocarbon column height). It's traditionally a function of SQRT(K/Phi), which is not surprising since SQRT(K/Phi) is also often used to calculate FZI's (Flow Zone indicators) to better characterize poro-perm behaviour. What we are in effect doing is saying that this particular group of rocks is of the same family in terms of saturation behaviour, and for a given permeability and porosity of this family we are able to predict how its saturation will vary with height.
What I'm posting below is a (I think) easy to follow method to actually use it for those that still are having problems;
I will assume you have air-mercury injection lab capillary pressure data to start from on a number of samples, and wish to simulate an oil-water system.
1. Transform lab capillary pressure data to (approximated) reservoir conditions
The transformation is simple, you need to be clear on what fluids were used in the test, and what fluids you have in the reservoir.
Pc (Reservoir conditions) = Pc (Lab) x (Sigma.Cos(theta))res / (Sigma.Cos(theta))lab
Typical values of Sigma.Cos(Theta) are;
Lab
Air-Water 72
Oil-Water 42
Air-Mercury 367
Air-oil 24
Reservoir
Water-oil 26
Water-gas 50 (P & T dependent, reasonable value for depth of 5,000ft)
So in our case, we'd multiply all the lab capillary pressure stages by 26/367 to get the equivalent reservoir capillary pressure
2. Fitting the function
The equation used by Eclipse (In Field units) is as follows;
Pc = J x SurfaceTension x (PORO^Alpha / PERM^Beta) x U
Where U = 4.61678 and traditionally Alpha = Beta = 0.5
Rearranging, J = Pc/(ST x U) x Perm^Beta / PORO^Alpha
You've just calculated Pc in reservoir conditions, use the same ST as already (26), U is constant and you know Perm & Poro for each sample.
If you assume Alpha = Beta = 0.5, then you have a fully defined set of J values vs your Sw.
If you have a number of samples, you can regress on various values of Alpha and Beta to see if it helps collapse the resultant J=Fn(Sw) curves down to one curve better. Split up those curves that vary wildly into different families - This is an iterative step. Ensure you are not trying to match garbage test data. Also, if you find you DO have more than one saturation family, ensure that you talk to your geo to ensure that they use a facies model to co-populate perm with porosity appropriately otherwise your lovely J-Function (which relies on the ratios of Perm and Poro for any given cell) will be simply incorrect. I often prefer to see if I can set Alpha to zero so that it is simply a function of perm to try to avoid this issue if I can.
You should now have one or more tables of J vs Sw that correspond to your different reservoir units
** You will invariably have to be satisfied with a 'good enough' fit, so ensure that your curve used to initialize the model fits best over the range of capillary pressures (usually less than 50 psi) that your reservoir conditions will exist **
Ensure that the keyword JFUNC is used in the GRID section - define the Alpha, Beta and ST that you used. Enter the J-Function data in the rel perm section of Eclipse, substituting values of J instead of Pc at each saturation defined.
DONE!
Using a J-Function to calculate saturations in Petrel
What I described above will get you setup to initialize your simulation. You can also use these J-Function relationships to calculate saturations/volumes in Petrel if you wish. This is not only useful to feed back to the geos for thier in place calculations, but also a great QC tool, as you can view in well x-section the saturations derived from logs alongside the saturations derived from your J-function to satisfy yourselves that it honours observed data appropriately in the pay zone(s). I've found the easiest path is as follows;
1. Fit J-Function tabular data to a continuous function
One that I often find works nicely is J = A x Sw^-B - Use Excel solver to work out appropriate A and B values to fit
2. Calculate a property for each cell = the height above free water level (HAFWL). Set those cells below FWL as a height of zero
3. Calculate buoyancy pressure for each cell Pc = HAFWL x (Rhow – Rhohc) x 0.443
HAFWL = ft, Rhow = SG Water, Rhohc = Hydrocarbon SG relative to water, 0.443 psi/ft is 1.0 SG water gradient
4. From the Pc of each cell, use the equation J = Pc/(ST x U) x Perm^Beta / PORO^Alpha to calculate J for each cell
5. Use the fit equation from 1 above (rearranged) to calculate Sw for each cell. If you used the same equation, the rearranged version would be;
Sw_Calculated = 10^( (-log(J) + log(A))/B)
And Bob would be your fathers brother as they say.
Good luck - VM



Reply With Quote

Bookmarks