#  > Petroleum Industry Zone >  > Reservoir >  >  >  Saturation height function

## dipak_m

Dear Memebers,
Is there any software or Excel based programe avaiable to model saturation from the capillary-pressure derived saturationheight function?


ThanksSee More: Saturation height function

----------


## vinomarky

Not sure what you are asking for.... 

It's simple math to transform capillary pressure plot to a Sw vs height above free water plot - if this is what you want, let me know and it's a easy solution (specify what sort of cap pressure test - fluids & mechanism, as well as what fluids and their densities in your reservoir). There are a number of functions you could then try to use to fit a general equation to this plot - Lambda, J-Func etc....

The harder bit is to take a few cap pressure curves, and decide how to apply them to all the different bits of rock in your model - 99.9999%+ of which do not have exactly the same properties to that which had the cap pressure measurement performed upon - Look to relate your Lambda/J-func etc relationships to your various cap pressure tests through perm, poro, facie or some combination of all the above..... no silver bullet

----------


## Shakespear

Please look here regarding what vinomarky is referring to

**[link Point to another website Only the registered members can access]
*link*




<![CDATA[[Only Registered And Activated Users Can See Links]

 :Wink:

----------


## dipak_m

Dear Vinomarky,
Is it possible to give some examples with calculations for Lamda or J-function where you calculate saturation from cap data?

I am confused the use of SWATINTand SWL in Eclipse. Where and how I use SWATINT or SWL in Eclipse?

Thanks

----------


## vinomarky

I'll send you some lambda J-func info when I get to the office in the morning

With regs to SWATINIT and SWL - It depends upon whether you think you actually have mobile water at initial saturation. Often - even when not at SWIR - a hydrocarbon column still will not flow any initial water. In these cases I'd just use SWL for simplicity. If, on the other hand, you have initial mobile water low in the column which you need  to match then you should use SWATINIT and separately specify SWCR etc..

----------


## dipak_m

Tahnks Vinomarky. 
When I use SWATINIT, is it required to use SWCR separatly with it?

----------


## vinomarky

Assuming you already have your capillary pressure data transformed into height above FWL vs Sw relationship, then there are a number of paths you can take - I've listed some below along with my thoughts as to their strengths/weaknesses but they are non-exhaustive

Plot up your data, take into account how much knowledge of your reservoir you really have (no point in using an overly complex approach if your data is limited), and choose a method that fits data best, while fitting into your workflow appropriately.

Often, if the transition zone is not a big effect (higher perm, more relief) then the best method is simply characterizing Swir as a function of Perm, and using SWL via OPERATE keyword to initialize saturations along with endpoint scaling. Unless (a) you have enough data to warrant characterizing the transition zone and want to further tighten up the hydrocarbons initially in place or (b) expect that the transition zone with it's higher water saturation will significantly affect production behaviour, then it is quite normal to have so much uncertainty in your other variables that characterizing the transition zone is almost background noise... your time would be better spent understanding the bigger issues first with a simpler model.

The below methods only needed if the transition zone becomes important to characterize.

*1. J-Function*
_Advantages:_ 
 - Relatively simple way to initialize your capillary pressure, as it is supported natively in Eclipse.
 - Creates a relationship that is easily applied to wide ranges of perm/poro rock
 - Can be somewhat tuned through use of exponents other than 0.5 to K and Poro
 - Often used when not much cap pressure data is available

_Disadvantages:_
 - Often applied without much testing as to it's applicability
 - Tuning is not very flexible - often not the best fit
 - Hinges on the relationship between K/PHI, meaning that your static model properties away from well control need to be  populated honouring this relationship (ie good facie model and thought going into how their families of perm/poro are co-populated required) in order for it to remain valid

 Given model saturation, perm, porosity & height above free water level
 J = Pc x Sqrt(K/Phi) / Sigma.Cos(Theta)
 Pc = Capillary pressure (psi - Bottom Hole, not lab data)
 Sigma.Cos(Theta) = Interfacial tension x Cos(Contact Angle)
 = 26 (Water-Oil) or 50 (Water-Gas)

 Where 
 Pc = HAFWL x (Rhow - Rhohc) x 1.2406
 HAFWL = Height above FWL (m)
 Rhow / Rhohc = Water and Hydrocarbon density (SG)
 1.2406 = Conversion (psi/m)

Method:
 Calculate J value for each known saturation cell (logs etc)
 Plot J vs known Sw (altogether &/or by facie)
 If reasonable relationship(s) evident, use J vs Sw as proxy for your Saturation height function

 For any unknown saturation block, saturation is calculated as follows;
 Calculate  J (from K/PHI and HAFWL)
 Calculate/Lookup Sw


*2. Lambda Function*
_Advantages:_
 - Quite flexible, good way to fit data that is difficult to fit with other relationships

_Disadvantages:_
 - Complex
 - Not nativley supported in Eclipse - requires either external Sw calculation in Petrel OR (with new ECL 2010 ability to use dummy arrays and perform array multiplication) use of a dummy array of HAFWL property to calculate at run-time

Normally only used to fit against a single parameter (usually K), but could also look at how well it fits against PORO or even SQRT(K/PORO) if you wanted. The Lambda function is just a  curve fit method


Fitted Lambda function Sw = [a x (HAFWL^-lambda)] + B
                   a = a1 x log(perm) + a2
                   lambda = L1 x log(perm) + L2
                   B = b1 x log(perm) + b2
 where a1, a2, L1, L2, b1, b2 are constants that need to be fit to your data


*3. No-name function (don't know what name it has)*
_Advantages:_
 - Simple math, easy to fit to a single function, and in turn parameterize those fitted constants to extrapolate for continuum of properties

_Disadvantages:_
 - Not supported nativley in Eclipse - similar comment to the Lambda function
 - Predicated on permeability dominating the saturation characteristics (usually ok)

Method:
 First, fit a relationship of Swir from your data such as (example);
  SWIR=a*LN(PERM) + b  (or whatever works best for you)

 Second, fit a function of Swi to your curve data as;
  SWI=(1-SWIR)*(Alpha+HAFWL)/(Alpha+(Beta*HAFWL))+SWIR

  Where a, b, Alpha & Beta are all constants that you need to fit to your data


As far as your question on using SWCR etc, I could answer this and a nunmber of followup questions, but instead I encourage you to read the Eclipse technical manual (By default located C:\ecl\Version#\eclipse\ecl_td\ecl_td.pdf), especially the section on Saturation Table Scaling

----------


## dipak_m

Thanks Vinomarky.
This will be vey useful materials for me.
Thanks once again

----------


## Shakespear

Great help "vinomarky"  !!!!  :Smile: 





> I encourage you to read the Eclipse technical manual



This can not be stressed enough. It is the only way to master this stuff.

Capillary pressures and relative perms are frequently a problem for beginners in this area. It might be good to make a separate "knowledge base" sticky thread for these two areas. It could be as simple as cut-and-paste what is already on the threads regarding this. What do you think vinomarky ?

----------


## vinomarky

Sure - sounds good. I was kinda hoping this would be stickied or similar, as I've seen a few similar questions so decided to spend half an hour and answer a bit more thoroughly than usual - then I'd be able to point to it in future. Creating a knowledge base section, as long as it is maintained by admins to ensure it did not become a digital dustbin sounds like a good idea

----------


## Shakespear

I am leaving in an hour (gone for 3-5 days), but if someone else does not do it (Main hancho) then when I get back I will do it. Perhaps it will be good to discuss how to present it so it has some structure. I was thinking text along with graphics to make things clear and then a DATA file for go and try it on a Eclipse sample data set. :-)

I am open to other ideas  :Smile:

----------


## dipak_m

Dear Shakespear & Vinomarky,
I think initialization of a model is very very important part of simulation. Many of us have not clear idea how to initialize the model. Here one has to know the right use of rel perm and cap dat. It will be better to start a thread on intialization with rel perm and cap data. I earlier requeted Temr to introduce a chapter on initialization with Eclipse Step by Step. But he is ver busy person.
Thanks

----------


## swibow

Hi Vinomarky,

What a great sharing, thanks a lot.
One simple question; how to get a1, a2, L1, L2, b1, b2 for lambda function and a, b, Alpha & Beta  for unknown function?



Thanks !See More: Saturation height function

----------


## vinomarky

Fit to your data

I usually use Excel and the Solver addin

----------


## swibow

> Fit to your data
> 
> I usually use Excel and the Solver addin



Do you have any excel file as an example?
I you don't mind, please send it to my email; swibow@gmail.com.
I really want to learn about this stuff, so far only J function that I know.
Thanks before, I appreciate your help.

----------


## vinomarky

I make them as needed - it's not difficult, just give it a try - use the solver to minimize the error by changing the variables
Check the plots of measured data vs curve fit data and if you are happy with the results use it....

----------


## swibow

> I make them as needed - it's not difficult, just give it a try - use the solver to minimize the error by changing the variables
> Check the plots of measured data vs curve fit data and if you are happy with the results use it....



Though I still don't understand, I'll try it. Thanks.

----------


## temr

Dipak, please read carefully the Eclipse thread the initialization process has there  quite detailed describtion
If you have any questions ask

----------


## dipak_m

Dear Temr,
There is an initialization chapter in your thread. But I want in details. What are the different methods of initialization. I want to know every details of each initialization process, from Xls file to Petrel and then Eclipse.
Thanks

----------


## dipak_m

> Fit to your data
> 
> I usually use Excel and the Solver addin



Dear Vinomarky,
What is the Solver addin?

----------


## reservoir_engineer

Vinomarky
thanks for your great help,
do you have some books, articles or papers about SW distribution and generally model initialization?
it will be very helpful for us
thanks

----------


## vinomarky

There are many many books and article on this subject. The challenge is not to find the books, the challenge is to actually put down the books, get some raw data and work through the problems..... you'll learn 10x more by doing than by reading/skimming

In my opinion, one VERY important aspect that may be lost on a lot of younger (and indeed some older) engineers getting into simulation is that you really must firstly get a mental model of what you think is going on:
 Where is there water, 
 How is it distributed, 
 Why, 
 Is it physically possible.... 

When people start talking about tilted contacts, perched water etc this becomes extremely important. If you have perched water, you need to address with your geomodel.. if you have dynamic aquifer then you need to ensure you have good perm and pressure differential across your model (and is one of the few reasons you'd need to let a model equilibrate after initializing)... if you have poor perm and/or weak aquifer and observed different producing OWC contacts is that from capillary pressure effects, or is it compartmentalization? They will ALL have significantly different (a) ways to initialize and (b) prediction characteristics - so simply adopting the approach of placing the water where it is observed, initializing and then allowing it to equilibrate (without thought as to the reason) is lazy engineering and poor simulation practice that will in all likelihood give you incorrect insights into the predicted behaviour. 

As far as more tidbits in characterizing/grouping saturation families - I quite like the FZI (Flow Zone Indicator) approach... it does not always work well, but often does.

FZI is a simple calculated index which you can often use to discriminate/group families of similar characteristic rocks (think of it as a continuous flow facie indicator). If you plot up your lognormal perm vs poro data, and overlay colour codes of FZI, you quite often are able to identify better perm/poro relationships to apply - this is best done in conjunction with your geologist, so that they can possibly make the linkage between FZI and depositional facie and therefore populate the model with appropriately paired poro and perm properties for that family of rock. Similar FZI rocks usually have similar saturation/flow characteristics

FZI = 0.0314 x SQRT(K/PHI) / (PHI / (1-PHI))

The numerator is obviously a J-function type relationship, while the denominator is the ratio of porosity to non-porosity.  Generally, the higher the FZI, the better (cleaner) the rock is.... thinking it through, for a given permeability, if you have a low porosity it means that you generally have less clays and other pore-filling material (which in turn generally means lower Swir's and more favourable rel perms etc) than if you had a higher porosity for the same perm.

Again - no silver bullet (there never is), but it is another useful approach to know about

----------


## dipak_m

Dear Vinomary,
Is it possible to post your XLS files with solver addin where your calculate Sw from cap data (different methods)?
Thanks

----------


## vinomarky

Post a set of cap pressure data, and I'll see what I can whip up

----------


## dipak_m

Well	Method	Core_ID	Interval	Plug_no	Phi	Ka	Sw	Pc
					(%)	(mD)	(%)	(kg/cm2)
XYZ	centrifuge	CC-1	2854.5-2862.5	8709	15.28	47	0.99	0.06
							0.52	0.49
							0.26	0.97
							0.23	1.79
							0.20	3.13
							0.18	6.44
							0.12	14.06

XYZ	centrifuge	CC-1	2854.5-2862.5	8705	13.93	35	0.99	0.05
							0.59	0.45
							0.30	0.88
							0.25	1.63
							0.21	2.86
							0.18	5.87
							0.12	14.06

XYZ	centrifuge	CC-1	2854.5-2862.5	8708	14.57	38	0.97	0.05
							0.51	0.47
							0.24	0.91
							0.19	15.05
							0.14	2.96
							0.13	6.07


							0.09	14.06

XYZ	centrifuge	CC-1	2854.5-2862.5	8703	11.76	3.3	0.96	0.05
							0.87	0.49
							0.66	0.95
							0.48	1.76
							0.33	3.08
							0.23	6.32
							0.17	14.06See More: Saturation height function

----------


## dipak_m

Capillary presure Data
**[link Point to another website Only the registered members can access]
*link*




<![CDATA[[Only Registered And Activated Users Can See Links]

----------


## swibow

Guys, sorry for interupting this excellent discussion,

I got a saturation equation from a petrophysicist, but I don't really understand. Here is the equation:
swht = limit(.44/(.00766*(ht*.21)*((kpor/port)**.5))**.212, .15, 1)

Is there anyone who can give me a clue regarding the above equation? 
Especially what is "limit" and the "double star" (**) mean?

Thanks a ton for your help!

----------


## temr

> Dear Temr,
> There is an initialization chapter in your thread. But I want in details. What are the different methods of initialization. I want to know every details of each initialization process, from Xls file to Petrel and then Eclipse.
> Thanks



Dipak , 
I will repeat what has been already written
1. Calculation of block depth ( center point of the block)
2. Calculation of block rock pressure
3. Calculation of Capillary pressure of phases
4. Calculation of block water saturation based on capillary pressure
5. The function of Sw and Pc are comes from core/log data 
Everything this is detail described in th chapter 
And this is basics which a must  to understand the saturation modeling in simulator 
If you want more then use manual and read extra books
Regards
A

----------


## temr

> Guys, sorry for interupting this excellent discussion,
> 
> I got a saturation equation from a petrophysicist, but I don't really understand. Here is the equation:
> swht = limit(.44/(.00766*(ht*.21)*((kpor/port)**.5))**.212, .15, 1)
> 
> Is there anyone who can give me a clue regarding the above equation? 
> Especially what is "limit" and the "double star" (**) mean?
> 
> Thanks a ton for your help!



 May be you need to talk to petrophysicis)?
It is kind of J function with poro and perm and may be Owc column high but please check what this parameters are intend to and use them in petrel or eclipse to calculate you sw

----------


## vinomarky

OK - have had a quick/rough look at the data, and uploaded a sheet at the following address *updated*
**[link Point to another website Only the registered members can access]
*link*




<![CDATA[[Only Registered And Activated Users Can See Links]

Assumptions:
- Oil/Brine centrifuge test
- Oil/Brine reservoir
- Reservoir oil at 0.825 SG in-situ
- Reservoir brine 1.02 SG in-situ

Notes:
You will never get perfect fits across entire population. Need to critically decide which areas are more important to get better fit it. If your column is only 100ft high, then if the 500ft+ data does not fit so well, remove it from the fit criteria. If you have 99% of your reservoir with Sw<0.7, then don't worry so much if your relationship has a poorer fit with high water saturations. Of course we should strive to get the best fit we can, but in the end you will in all likelihood need to make compromises to better address those areas that are most important

With J-Function, I assumed max hydrocarbon column of 600ft, so did not give any weight to errors in the 1,500ft points 

All samples seem to be exhibiting 'normal' type trends - insofar as I'd probably lump them as one saturation function family unless there was some other data to tell me otherwise

Be careful working with Ka (perm to air). Often in situ perm can be an order of magnitude less through overburden correction and rel perm to the primary reservoir fluid flowing. Ensure that you are consistent with how you test/populate/relate all the various perms (ie lab test perm, property model perm, rel perm) so that the final property perm x rel perm reflects in situ reservoir deliverability for your fluid and that your saturation function is used against the appropriate perm value. I'm not saying you need to always work with Ka, or always with Perm to hydrocarbon or water - what I am saying is be consistent through your workflow.


Fit Results (updated):
J = 0.4778 * Sw^-2.356, using Perm exponent of 0.529 and Poro exponent of 0.608 (J = Pc x (Perm^0.529)/(Poro^0.608)/26 )

or if solving for Sw given a calculated J;
Sw = 10^( (-log(J) + log(0.4778))/2.356)

Lambda constants are;
a1	39.08174161
a2	-14.76172542
l1	0.726524565
l2	0.072382779
b1	0.17321564
b2	-0.148686704

For 'no name' relationship;
Choosing 675ft as Swir -
Swir = 0.2581 - 0.06106 x Log(K)
Alpha    1324253.612
Beta     33922.95145

Comparing the results, it appears that both the J-function as well as Lambda functions give very good matches based upon the data furnished to date. This being the case, I'd probably elect to use J-function due to ease of implementation in Eclipse.

With regards to the petrophysics equation - yes, go ask them. If I had to guess, I would translate it as follows;
Swi = .44/(.00766*(Height*.21)*(SQRT(PERM/PHIT))^.212, but not allowed to go below 0.15 or above 1.0

----------


## swibow

Aha !! I got the xls file, Thanks vinomarky!! 

About the equation, I have the same guess with you. Unfortunately when I try to recalculate in my model, the result is totally different.
There is no petrophysicist here, and the one who made the equation has gone. Anyway thank you very much temr and vinomarky.
I love this forum.

----------


## vinomarky

Check (a) what FWL they are using and (b) whether they are using m or ft - two obvious areas for significant differences

Also, there are a few ways petrophysicists calculate Sw - ensure you are benchmarking against the same method

----------


## swibow

> Check (a) what FWL they are using and (b) whether they are using m or ft - two obvious areas for significant differences
> 
> Also, there are a few ways petrophysicists calculate Sw - ensure you are benchmarking against the same method



Yes you are right. Problem's solved. He used meter instead of ft, don't know why. 

Vinomarky, I have downloaded the solver add ins, but I don't know how to use it, could you give an example how to calculate one variabel like a1 ? Pleaseeee......

----------


## vinomarky

Go to Lambda tab, change constants in cells T7-T12 to 1.0 (something different from the current fit)

Tools - Solver
Set target cell - T14
Equal to: min
By changing cells: T7:T12
Solve

----------


## swibow

> Go to Lambda tab, change constants in cells T7-T12 to 1.0 (something different from the current fit)
> 
> Tools - Solver
> Set target cell - T14
> Equal to: min
> By changing cells: T7:T12
> Solve



That's it?? That easy? 
Thanks thanks thanks .....Vinomarky. I learn a lot from you today.

----------


## reservoir_engineer

many thanks Vinomrky,
you are great friend and we learn too much from you.
regarding flow units definitions, i got paper from friend two years ago.
i hope it help,

----------


## dipak_m

Dear Temr & Vinomarky,


Thanks. Needs sometime to digest.See More: Saturation height function

----------


## vinomarky

On reflection, many of you are probably not aware of the different corrections to go from lab measured Pc to Pc (reservoir), so here is a summary below

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 my worksheet you'll see that I have calculate reservoir Pc as Lab Pc x 26 / 42, which comes from assumption that your reservoir system is water/oil, and your lab test was water/oil

----------


## dipak_m

Dear Vinomarky,
How you derived the following equation
Swi = .44/(.00766*(Height*.21)*(SQRT(PERM/PHIT))^.212
Thanks

----------


## vinomarky

I didn't, was answering swibow's question

----------


## swibow

> Dear Vinomarky,
> How you derived the following equation
> Swi = .44/(.00766*(Height*.21)*(SQRT(PERM/PHIT))^.212
> Thanks



That equation was not from Vinomarky, I got it from our resigned petrophysicist.
And I don't know how he made it, that's why I raised questions on it. But it looks like a J function based sat. height function.

----------


## vinomarky

Another tidbit -

The topic of upscaling is complex - indeed entire books could be written on it. One of the many pitfalls you can fall into is upscaling a block of net and non-net reservoir togeather.

Scenario:
Two blocks of equal dimensions & pore volume = V, one with 20mD and other with 0.5mD are to be upscaled into one block. You know that anything less than 1mD has (a) no/little charge and (b) no flow contribution, but have not netted it out as the saturation height function takes care of the (lack of) charge properly

Simple averaging of the two blocks would create a single block of 10.25mD and pore volume 2V... It's kh would be more or less correct BUT when you apply your newly created saturation height function to it, you'll probably find you've got around 0.8x2V (or 1.6V or so) of hydrocarbons.... In effect you have added hydrocarbon volume. Additionally for a given flux of (for example) water through the upscaled block, it would take almost twice as long to break through to the other end..... Overall you are creating optimistic HCPV and optimistic breakthrough behaviour

One approach that I have used often to reduce this effect is the following;
1. Create a new perm property as follows PERMX_Cutoff = if(PERMX>1,PERMX,U)
2. Create a NTG property as follows NTG = if(PERMX>1,1,0)
3. Upscale PERMX_Cutoff and NTG

Step 1 sets any perm less than your cutoff (in this case 1mD) as U (undefined in Petrel syntax). In the scenario above, averaging a 20mD and an undefined block togeather would result in 20mD

Upscaling the NTG would result in (1+0)/2 = 0.5

Now, your kh is still preserved, your saturation height function will give you the correct Sw, and the overall volume will be correct

Just some random thoughts that popped to mind this evening....

----------


## hojbarnaz

dear
vinomarky if you kindly put some light on normalization technique of oil-water and oil-gas relative permeability with some excel exaples at different soi and sor generally used in simulation from special core analysis.it will be helpful for layman like me so that we can able to understand technique of normalization

----------


## vinomarky

**[link Point to another website Only the registered members can access]
*link*




<![CDATA[[Only Registered And Activated Users Can See Links]

----------


## paolomaldini

thanks for help.

----------


## Aries

Hi Vinomarky,

I was following the messages in this thread and I tried to download the EXHE.....FUNCTIONS.HTML but it no longer available. Could please have this file available again so that I can follow I can follow all the details? Thanks vinomarky...... aries

----------


## paolomaldini

Thanks very useful material for bengineers.

----------


## lord_zero82

Hi Vinomarky,

Where can I find some documentation about this lambda function and the constants? I can't find it anywhere...

----------

