<

Results 1 to 9 of 9

Thread: Reservoir simulation model initialization

  1. #1

    Reservoir simulation model initialization

    Hi everybody,

    Does anyone have any useful document and/or presentation explaining step by step reservoir simulation model initialization methods that can share with us.

    Regards,

    Mehrass

  2. # ADS
    Spons Circuit
    Join Date
    Always
    Location
    Advertising world
    Posts
    Many
     
  3. #2

    Join Date
    Nov 2008
    Location
    Australia
    Posts
    508
    Check out the sticky topic on step-by-step eclipse

  4.    Sponsored Links



    -

  5. #3
    Quote Originally Posted by hkazem View Post
    Hi everybody,

    Does anyone have any useful document and/or presentation explaining step by step reservoir simulation model initialization methods that can share with us.

    Regards,

    Mehrass
    Dear Khazem
    Initialization is a vast subject as I understand. We can request Temr and Vinomarky to start a session like Eclipse and Petrel.

  6. #4
    Dear dipak_m,
    That is a good idea, of course if Temr and Vinomarky have enough time to spend on this topic. Then everybody can benefit from it.

    I hope we can get some document explaining this in more details here as well.

    Mehrass

  7. #5
    Quote Originally Posted by hkazem View Post
    Dear dipak_m,
    That is a good idea, of course if Temr and Vinomarky have enough time to spend on this topic. Then everybody can benefit from it.

    I hope we can get some document explaining this in more details here as well.

    Mehrass
    Go throgu this. This is my intraction with this forum for initialization.


    1. Assuming you have a function of lab measured capillary pressure as a function of water saturation and permeability Pc = Fn(Sw, K)

    Depending on how you measured the capillary pressure, you first need to convert to equivalent reservoir conditions -> Pc(Res) = Pc(lab) X SigmaCos(Theta)Res/SigmaCos(Theta)Lab

    Lab Conditions Interfacial tension x Cos(Contact Angle) aka Sigma Cos(Theta)
    Air-Water 72
    Oil-Water 42
    Air-Mercury 367
    Air-Oil 24

    Reservoir Conditions
    Water-Oil 26
    Water-Gas 50

    So, if your capillary pressure function is lab measured Air-Mercury test, and you have a Water oil reservoir system, the first conversion is;

    Pc(Res) = Pc(lab) X 26 / 367

    Then, to convert this reservoir pressure to a hydrocarbon column height you do the following;
    h (ft) = Pc(res)/((Rho Water - Rho Hydrocarbon) x 0.433) Rho is in SG

    You now have transformed your lab capillary pressure function into a saturation height function;
    h = fn(Sw, K)

    Rearrange to get Sw = fn(h, K) (Where h = height above free water level)

    You then simply use the Petrel property calculator and plug in your equation to calculate for each cell the Sw
    2. Dipak
    The exercise in terms of approach is quite simple
    take one well and export to excel 3 curves ( make them as syntactical from model in petrel)
    1. SStvd
    2. Sw
    3. Owc

    Calculate 4 curve (PC) by following formula pc=(1-0.6)*0.098*Owc
    you will get Capillary pressure as eclipse calculates it

    then put all points to plot on y axes put Sw on x axes put Pc values
    apply power trend and you will get following formula
    y=a*x^b
    So that what you are looking for
    use this dependency in scal file and you will get the same saturation in your sim model of course if you will get high R2

    1. There is nothing magical about SATNUM. It is simply an index with which you can assign different parts of your model different saturation characteristics. You may well be able to run your model with a single SATNUM for all your cells.

    The process temr has tried to outline is a way to take your log saturations and work out a relationship which can be applied generically through the rest of your model

    If you have good perm and/or you are not near the FWL, you may be able to get away without using cap pressures

    First stop;
    1. open a function window in Petrel
    2. assign the log derived saturations as X axis
    3. assign the log derived permeabilities as Y axis
    4. Set Y axis to log scale

    do you see something resembling a straight line?

    If not, Create a HAFWL property HAFWL=FWL-Depth()

    Use this property to colour code the above plot.... do you see a regular progression in colour or scatter?

    What about creating a property = SQRT(K/Poro) and using this for the Y axis?

    You are looking for a generic relationship that honors your log data which you can then apply to the rest of the model. Once you have such a relationship, depending upon the complexity you may be able to calculate initial saturation in Eclipse directly using the OPERATE keyword - if too complex, you'd calculate in Petrel then export SWL array and use endpoint scaling to initialize the model
    2. There are quite a few different ways to define initial saturation. The point 1. above is a valid method, but you don't necessarily have to use more than one SATNUM. Point 2. above is I think a bit mixed up. Again, whether or not you want to use SATNUM is irrelevant. You cannot simply use log saturations alone - you have to figure out a representative way to properly describe saturations through your entire model (not just at the wellbore). One way is as temr and myself have glossed over above in that you fit a relationship of initial saturation tied to any number of properties in your model such as permeability, porosity, HAFWL, facies etc.

    In such a case, the simplest method is to simply create an array of SWL in either Petrel or via OPERATE in Eclipse (look up SWL and OPERATE in Eclipse manual) and initialize using endpoint scaling (lookup ENDSCALE keyword). You will probably need to add user keywords manually as Petrel RE does not provide GUI support for these sorts of methods.

    In all cases, you will still need to give initial pressure of the model and Rs of fluid(s)

    As a final piece of advice - Petrel RE is a nice tool to create calculated property arrays, get your grid, simply create faults etc... it is (IMHO) too cumbersome though for the majority of simulation work. I use it as needed for specific tasks, but the majority of my simulation workflow revolves around a good text editor (like TextPad), a good post processor such as S3 suite and if I want to pull out the 'big guns' an assisted history match tool such as Enable. I would strongly recommend you invest some time to better understand how to use Eclipse through a text editor - when you understand how the beast works, everything becomes much easier.
    3. That method is certainly valid - depending on your situation (ie ok for blocky sands with uniform saturation), and to what degree of accuracy you need it may well be the best method. I however usually find it a bit coarse in defining saturations and somewhat finicky.

    Instead of creating a multitude of SATNUM's, each with their own discrete Swi and Sor, if you can fit a equations of Swi and Sor as a function of (usually) permeability, then you can give Eclipse one set of rel perm curves, and either (a) arrays of Swi and Sor or (b) tell it how to calculate Swi and Sor at run time using the OPERATE feature. You then give it the ENDSCALE keyword, and Eclipse will look at each cell in your model and scale that single rel perm curve to suit its Swi/Sor.... in this way by defining essentially the general shape of the rel perm function, and giving it the saturation endpoints for each cell you are defining (for 100,000 cells) 100,000 rel perm curves.

    Here is a simple example of a case where I used the OPERATE keyword to define initial saturations, which it turn Eclipse would use to scale rel perm endpoints (I had one set of rel perm curves) - I used constant Sor

    First it calculates SWL = 0.7107 x PERMX^-0.2131 (This is case specific, you'd have to find what relationship works for you)
    Then, it ensures that no value of SWL exceeds 0.45
    Then, it ensures no value is less than 0.45
    Then it calculates SGU as 1 - SWL
    Then it copies SWL array into the SWCR array (no initial mobile water)


    OPERATE
    -- for MULTA: output = a x input + b
    -- for MULTP: output = a x input ^ b
    -- output I1 I2 J1 J2 K1 K2 operate input a b
    SWL 6* 'MULTP' PERMX 0.7107 -0.2131 /
    SWL 6* 'MAXLIM' SWL 0.45 /
    SWL 6* 'MINLIM' SWL 0.12 /
    SGU 6* 'MULTA' SWL -1 1 /
    /

    COPY
    SWL SWCR /
    /

    I'm not saying one way is ALWAYS better than the other, but it would be good for you to understand both.
    4. Folks
    The most common form of initialization in Eclipse relies on Capillary-gravity equilibrium using the EQUIL keyword. ( There are other ways/options - but this method is the most common/reliable and generally most advisable is starting a simulation from scratch). The EQUIL option uses the supplied Pc vs Sw ( for Oil-water) to determine Sw in every cell above the OWC by casting it as H vs Sw and solving for Sw. Eclipse uses the relative permeability curves to determine whether the 'transition zone' Sw's are mobile or not and supplies many options to alter behavior if required. What is described here asserts that using the EQIL keyword Eclipse defines Sw implicitly from the Pc ( and rel-perm data). BTW even if Pc=0 everywhere - then initializing to capillary gravity equilibrium stuill takes place - its just becomes very simple.

    This means that Sw itself (if using the EQUIL option) should never be exported from Petrel to initialize a simulation ( again emphasizing under the assumption of capillary gravity equilibrium) as the simulator needs to establish this equilibrium itself. ( Eclipses geometry for cell volume etc is slightly different to Petrel so you will never get precisely the same oil volumes but you will be very, very close)

    Other replies have mentioned use of RELPERM scaling and J functions - these are all valid - but the first thing to appreciate is that Eclipse needs Pc and endpoints first - and it recalculates Sw itself. The only reason Sw is calculated in Petrel is to enable volumetrics to be done in Petrel - once its done there - the engineer doesn't use/need Petrel Sw's. Most folk find this result/recommendation very confusing at first. Much of the earlier advice was suggesting way of estimating what the Pc function you need should look like.

    You mention use of SATNUMs to bin rel-perm by initial Sw's ; while this may be a valid approach - if a single Pc or J function ( or simple relperm scaling) works then history matching with 1 set of rel-perms is so much easier to work with. If you end up with 10-to20 sets of relperms ( I have seen studies do this!) then the model becomes unworkable - and likely not useful. I'm not saying there's a right and wrong way of doing things - other than point out that keeping things simple/clean has advantages later. I have never seen a model with 10-to-20 saturation sets history matched ( but I've seen plenty that use just 1 or 2).

    THe simplest Eclipse model just needs 1 set of rel-perms curves ( say for O-W and maybe SL-Gas) - with Pc=0. Eclipse just initializes cells using the endpoints found in the relperm curves. ( It doesn't need to be told saturations). See ?

    itag


    1. Vinomarky
    I think you may have misunderstood my wording. When I say "never" export Petrel Sw's - I am meaning; never export that as an "SWAT" array into Eclipse when doing EQUIL initialization ( my apologies for not making that 100% clear) . Endpoint values for relperm scaling (SWL, SWU etc are another matter - and would not be the Sw's calculated in Petrel using whatever sat-height functions of choice). In this case of Petrel Sw's=SWAT input into Eclipse using an EQUIL keyword : "never" is applicable. Let me know if you still disagree.
    I was also attempting to answer the original posters question: 1 relperm, 1 Pc. Your observations about real reservoirs offering more complicated situations, is valid.

    itag

    1. BTW - in the case when log Sw displays a largish transition zone; try this if your goal is 1 relperm and 1 Pc curve. What was said earlier about k vs Sw works above the transition ( and needs relperm scaling to implement)

    I will assume you have a simple oil-water contact and a reasonable transition zone
    1. Calculate HAWFL variable as noted = z_OWC - Z ( Z is depth and depth is +ve)
    2. Plot HAWFL vs Sw_av where Sw_av is either point value of Sw or suitable block_averaged Sw (note av Sw=sum(phi.sw_i)/sum(phi_i)
    3. This last Plot should/might look like a Pc curve if you zoom into the region around & above the FWL ( you may have to filter out some low perm values to clean the plot up a bit)
    4. By hand if necessary draw/make a single H vs Sw curve ( the Sw asymptote will be SWCR in Eclipse speak). You may want to bias your curve to the "pay" facies.
    5. Now use your PVT oil and water densities to calculate( Delta) water - oil density ( in lb/ft3 say). convert to psi/ft by dividing by 144 ( # might be around 0.2 psi/ft)
    6. Convert H to Pc by Pc = delta*H ( where H measured in ft) & Pc will be in psi

    You now have an averaged Pc curve that will initialize Eclipse to the average curve you drew. ( ie Eclipse will calculate the same Sw's at a given HAWFL)
    This can be generalized to different perm bins if needed. On the other hand, if you scale H*= Hawfl*sqrt(k/phi) and plot H* vs Sw it may make for a nicer plot - then you may find a single Leverett J function works.
    ( A J function scales Pc for different k/phi ..... not universal in practice - but it usually helps- and it is still simple to implement with a single relperm set.( J functions ultimately allow calculation of Pc, and HAWFL/H* )
    ( Anything more accurate that J functions in Eclipse will require rel-perm scaling options and possibly separate lithofacies classes - and this is starting to get complex)

    Your water krw curve will now dictate the initial water movement in this Pc/J environment. You have to tell eclipse whether your saturation function input data is Pc or J ( as it goes in the same column)

    With 1 relperm and 1 Pc/J you can do a "fair" job at reproducing the Sw trends. More complicated/accurate cases will require scaling options ..... which I wouldn't recommend for a new Eclipse user)

    Hope these replies are helpful.
    itag

    1. Again - agree in general your approach works, but not always - so we still have to agree to disagree on the use of 'never'

    In cases where you have a lot of low perm reservoir, the saturation of which is highly dependent upon the height above free water level and permeability AND a normal or modified J-function cannot be fit, then it breaks down if you want to use one SATNUM.

    Let me illustrate with an example which I used to match a low relief, low perm oil reservoir - many of the wells in which had initial mobile water (the initial WC's correlateable to the vertical distance from FWL, and agreeing with Pc curves from SCAL). J-function would not honor saturations well enough, but I found a Lambda function of perm worked nicely. Eclipse does not support Lambda functions, so how else can you honour initial saturations if you don't calculate them outside of Eclipse? There is nothing special about the way Eclipse initializes saturations - the math is pretty basic, so what is wrong about doing the same math outside of Eclipse when Eclipse is incapable of handling a more complex saturation height function?

    I'd be delighted to find an easier way of doing it.

    Below snippet of code I used as a Petrel macro (removed my name & well references) to calculate not only the endpoints, but also the initial saturations using a saturation height function that fit measured and log data nicely.

    ------------------------------------------
    # Created by xxxx, August 2007
    # Macro to calculate actual and endpoint water & oil saturations

    # Actual saturations from fitted secondary drainage curves
    # Fitted Lambda function Sw = [a x (h^-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, h is height above FWL (in m) and k is in mD
    #
    # For xx (xxxx & xxx) drainage curves, the fit constants are;
    $a1=-7.75017
    $a2=34.17743
    $l1=-0.00041
    $l2=0.002083
    $b1=7.5149
    $b2=-33.1969


    $FWL = -1039

    # Calculate height above FWL, set to zero if below FWL to prevent calculation problems
    $h = (Depth()-$FWL)*0.3048
    $h=if($h<0,0,$h)

    # Calculate Sw, error-trap to be within 0.0 to 1.0 range
    $a = ($a1*log(Perm))+$a2
    $lambda = ($l1*log(Perm))+$l2
    $B = ($b1*log(Perm))+$b2
    Sw=if($h=0,1,($a*(Pow($h,-$lambda)))+$B)
    Sw=if(Sw<0,0,Sw)
    Sw=if(Sw>1,1,Sw)

    # Irreducible water saturation, Swir from (1 - Soi)
    # From regression of perm vs Soi from capillary pressures and NMR
    # Swir = 1-((0.0371*LN(perm))+0.3595) (capped to max of 1-Sw)

    SWCR = 1-((0.0371*LN(Perm))+0.3595)
    SWCR = if(SWCR>Sw,Sw,SWCR)
    SWCR =if(SWCR<0,0,SWCR)


    # Residual oil saturations from fitting Land constant equation to
    # imbibition capillary curves, with constant = 9
    # Sor = 1/(9 + (1 / (1 - Swir) ) )

    SOWCR= 1/(9 + (1 / (1 - SWCR) ) )
    SOWCR=if(SOWCR>0.3,0.3,SOWCR)
    SOWCR=if(SOWCR<0,0,SOWCR)

    SWCR=if(SOWCR+SWCR>=1,0.999-SOWCR,SWCR)

    # Max water saturation = 1 - residual oil, or 1 if below FWL
    SWU=if(Depth()<FWL,1,1-SOWCR)

    # Scale rel xplot_perm end-points
    # Use Corey curves to determine actual rel xplot_perm
    # Normal perm, Co = 1.93, Cw = 1.15
    # High perm, Co = 1.49, Cw = 0.61

    # Scale for rel xplot_perm to oil at Swi
    KRO=(0.0344*LN(Perm))+0.5427
    KRO=if(KRO>1,1,if(KRO<=0.0001,0.0001,KRO))

    # Scale for rel xplot_perm to water at Sor
    KRW=(0.0109*LN(Perm))+0.0357
    KRW=if(KRW>1,1,if(KRW<=0.0001,0.0001,KRW))

    1. Dipak, lets go step by step
    But before doing something look carefully all keywords i will mentioned here in Eclipse reference manual -otherwise all efforts will be wasted
    first try to make simple dead oil model ( no soluted gas)
    First in order to initialize the model you need to give the eclipse idea how many phases you will use
    in or case 2 oil and water
    Now eclipse knows that you will use 2 phase model so he prepare needed arrays for initialization and if for example you will give him the keyword PVDG eclipse will give you an error
    The eclipse do following step to initialize you model in equilibrium conditions
    1 calculation of formation pressure ( you assign it in EQUIL keyword)
    2 calculation of capillary pressure of phases, PC (in our case only 2 water and oil , how it calculates i wrote in my previous post)
    3 and at last when eclipse knows PC , it uses your SCAL tables ( 1 and 4 column) and linear extrapolate SW between known values in the table
    Finnito
    So if you will make scal tables which are inline with your log data(how to make it , agian i wrote it in my previous post) then it will means that saturation in your coarse model will be like in you fine model
    You model can have more that 2 SCAL tables for example if you have different type of lithology in this case you need to say eclipse what cells belongs to what SCAL table
    the keyword responsible for that is SATNUM
    And one more advise - if you want to learn fast use eclipse ( not office not petrel) and read manuals
    PS. also carefully read all post here , there are a lot of information to learn, rgds


    1. There is no formula
    the approach to place the project wells depends on you development plan
    basically what you need to do is
    1. Run model on the stage of history
    2. Make pressure maps ( wpv)
    3. Make HCPV maps ( Net*poro*(Soil-Sor))
    4. Make perm maps
    5. Think
    6. Take decision where put wells
    Point 5 is the most important

  8.    Spons.


  9. #6
    thanks a lot

  10. Re: Reservoir simulation model initialization

    heloo everybody

    my name is indra, I'm from indonesia
    hmm ...

    I intend to ask for help, how to perform initialization in eclipse using SWAT folders from export petrel, please its support.

    Thank you so much

  11. Re: Reservoir simulation model initialization

    Hi,

    I have been searching around for information about end point scaling, why we need to do that and it is founded. However there is no useful information about this topic.I looked at Eclipse manual and there is only a description on how to use endscale. Why can we do that? No hint.

    From theory, we understand that end point scaling is to determine the saturation distribution in the model. Once that is done, phase permeability is determined, too.

    But I really do not understand why we can use end point scaling to determine saturtion distribution.

    Thanks!

    George

  12. #9

    Join Date
    Nov 2008
    Location
    Australia
    Posts
    508

    Re: Reservoir simulation model initialization

    Saturation is often driven by permeability. How can one (or even a dozen) set of rel perm/cap pressure curves characterize a continuum? With scaling you may (for example) specify a handful of hydraulically similar families of rock types, then scale their swir and sor's as a function of perm, all while maintaining immobile water at initialization.

Similar Threads

  1. Simulation model initialization & Oil in place
    By dquento in forum Reservoir
    Replies: 2
    Last Post: 02-25-2013, 02:15 PM
  2. Article: Reservoir simulation model initialization
    By dipak_m in forum Home Articles
    Replies: 1
    Last Post: 02-04-2013, 09:10 PM
  3. carbonate reservoir-simulation model
    By vijaysharma in forum Reservoir
    Replies: 0
    Last Post: 04-08-2011, 12:43 PM
  4. Article: Reservoir simulation model initialization
    By dipak_m in forum Home Articles
    Replies: 0
    Last Post: 02-27-2011, 02:31 PM
  5. Article: Reservoir simulation model initialization
    By dipak_m in forum Home Articles
    Replies: 0
    Last Post: 07-28-2010, 10:36 PM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40