Calculation amount of CO2 trapping using VE-CO2lab

284 views
Skip to first unread message

THANH HÙNG VÕ

unread,
Feb 22, 2021, 9:52:43 AM2/22/21
to MRST-users: The Matlab Reservoir Simulation Toolbox User Group
Dear Expert and User in the MRST forum,

I am trying to use the CO2-lab to calculate the amount of CO2 trapping.

However, I can not see the solubility and other trappings.

I attached my file and code for your reference.

image.png
Best regards 

Vo Thanh Hung







ccsnew.m
flu.GRDECL

Knut-Andreas Lie

unread,
Feb 22, 2021, 11:59:19 AM2/22/21
to THANH HÙNG VÕ, MRST-users: The Matlab Reservoir Simulation Toolbox User Group
Hi,

Your simulation assumes an incompressible flow model, which does not have any dissolution and hence cannot model solubility trapping. Likewise, you have not performed any geometric analysis of the top surface to identify structural traps, and hence the CO2 inventory does not include any calculation of structural trapping. 

To include structural trapping, you should replace the following line in your script
    plotPanelVE(G, Gt, W, sol, 0.0, zeros(1,4), opts{:});
by these two lines
    ts=findTrappingStructure(Gt);
    plotPanelVE(G, Gt, W, sol, 0.0, zeros(1,6), opts{:});
The first line identifies structural traps and stores these in the 'ts' structure. In the second line, you pass six zero values instead of four and this tells the routine to set up a panel plot that includes both residual and structural trapping. Then, in the main loop you pass 'ts' as a last parameter to the function that computes trapped volumes:
      vol = volumesVE(Gt, sol, rock2D, fluidVE, ts);

The result is a more detailed inventory that accounts for six different categories of CO2:
  1. residual (traps) - CO2 residually trapped inside a structural trap
  2. residual - CO2 residually trapped outside any structural traps
  3. residual (plume) - fraction of the CO2 plume (outside any structural traps) that will be left behind as residually trapped droplets when the plume migrates away from its current position
  4. movable (traps) - mobile CO2 volume that is currently contained within a residual trap;  if the caprock is breached, this volume is free to migrate upward
  5. movable (plume) - the fraction of the CO2 plume (outside of any structural traps) that is free to migrate upward or can be displaced by any imbibing brine.
  6. leaked - volume of CO2 that has migrated out of the domain through its lateral boundaries
In your case, all the CO2 seems to be injected inside the perimeter of a structural trap. Since the injected volume remains within this trap throughout the whole simulation period, your inventory only shows categories 1, 2, and 4.  Category 2 here represents CO2 that is residually trapped deeper in the formation than the spill point of the structural trap (seen in green colors in the cross-sectional plots), whereas category 1 is CO2 that is residually trapped above the spill point of the trap.

I hope that this clarifies your questions.

 - Knut-Andreas

--
Knut-Andreas Lie, Professor, PhD
Chief Scientist, SINTEF Digital, Mathematics & Cybernetics, Oslo
Phone: +47 930 58 721 (mobile)
http://folk.ntnu.no/andreas

From: sinte...@googlegroups.com <sinte...@googlegroups.com> on behalf of THANH HÙNG VÕ <vothanhh...@gmail.com>
Sent: Monday, February 22, 2021 3:52 PM
To: MRST-users: The Matlab Reservoir Simulation Toolbox User Group <sinte...@googlegroups.com>
Subject: [MRST Users] Calculation amount of CO2 trapping using VE-CO2lab
 
--
You received this message because you are subscribed to the Google Groups "MRST-users: The Matlab Reservoir Simulation Toolbox User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sintef-mrst...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sintef-mrst/CANzh31KgDhrO63%2B8Kb8ygmek5aEcbd0iK-Cf9XUPuaJDKjCThw%40mail.gmail.com.

THANH HÙNG VÕ

unread,
Feb 24, 2021, 10:27:37 PM2/24/21
to MRST-users: The Matlab Reservoir Simulation Toolbox User Group
Dear Professor,

I corrected the code. It is running perfectly.

Is there any option to tune my model to include dissolution trapping?

I found one paper from MRST documentation.

The plot is presented the amount of dissolution trapping

Thank you so muchsol.JPG


Vào lúc 01:59:19 UTC+9 ngày Thứ Ba, 23 tháng 2, 2021, Knut-Andreas Lie đã viết:

Knut-Andreas Lie

unread,
Feb 25, 2021, 8:33:33 AM2/25/21
to THANH HÙNG VÕ, MRST-users: The Matlab Reservoir Simulation Toolbox User Group
Hi,

To include dissolution trapping, you must use solvers from the AD-OO framework in MRST, which were developed after the (simple) incompressible solvers you use in your current example. Unfortunately, there are not very many examples in the 2020b release that document these solvers. (Many examples were removed before the previous release, but the best of them will be reworked and put back in one of the next releases.) Meanwhile, you can have a look at exampleVE, which uses these solvers, but without activating dissolution.  Dissolution can be specified through the makeVEFluid function using the three parameters 'dissolution', 'dis_rate', 'dis_max'.

I hope that this helps.

 - Knut-Andreas

--
Knut-Andreas Lie, Professor, PhD
Chief Scientist, SINTEF Digital, Mathematics & Cybernetics, Oslo
Phone: +47 930 58 721 (mobile)
http://folk.ntnu.no/andreas

Sent: Thursday, February 25, 2021 4:27 AM

To: MRST-users: The Matlab Reservoir Simulation Toolbox User Group <sinte...@googlegroups.com>
Subject: Re: [MRST Users] Calculation amount of CO2 trapping using VE-CO2lab
 

THANH HÙNG VÕ

unread,
Feb 25, 2021, 10:43:38 AM2/25/21
to Knut-Andreas Lie, MRST-users: The Matlab Reservoir Simulation Toolbox User Group
Dear Professor Lie and MRST users

I tried to add the parameters as your suggestion.

However, I get an issue. Could you help me for solving this problem?

I attached my file your your consideration.

The command show error as below:

 
>> ccsnew

dis_rate =

   5.0000e-10


dis_max =

    0.0300

Warning: Unsupported options in makeVEFluid
 * invPc3D
 * kr3D
 * transMult
> In merge_options (line 139)
  In makeVEFluid (line 87)
  In ccsnew (line 55)

ans =

  struct with fields:

                muG: @(p,varargin)p*0+val
                muW: @(p,varargin)p*0+val
               rhoG: @(p,varargin)prop_ref*(1+cw*(p-ref_p))
               rhoW: @(p,varargin)prop_ref*(1+cw*(p-ref_p))
              rhoGS: 686.5266
                 bG: @(p,varargin)rhofun(p)./ref_val
              rhoWS: 1000
                 bW: @(p,varargin)rhofun(p)./ref_val
    surface_tension: 0.0300
                krG: @(sg,p,varargin)krG(sg,p,fluid,opt,varargin{:})
                krW: @(so,p,varargin)krW(so,p,fluid,opt,varargin{:})
               pcWG: @(sg,p,varargin)pcWG(sg,p,fluid,opt,varargin{:})
          cutValues: @(state,varargin)cutValues(state,opt)
            invPc3D: @(p)opt.table_co2.invPc3D(p)
         is_kscaled: 0
               kr3D: @(s)opt.table_co2.kr3D(s)
            res_gas: 0.2000
          res_water: 0.2700
           dis_rate: 5.0000e-10
            dis_max: 0.0300
              rsSat: @(pw,rs,flag,varargin)(pw*0+1)*fluid.dis_max
            pvMultR: @(p)1+opt.pvMult_fac*(p-opt.pvMult_p_ref)

Solving timestep 001/200:            -> 1 Year
Dot indexing is not supported for variables of this type.

Error in FacilityModel/setupWells (line 122)
                    wm.dsMaxAbs = model.ReservoirModel.dsMaxAbs;

Error in FacilityModel/validateModel (line 315)
                model = model.setupWells(W);

Error in PhysicalModel/prepareReportstep (line 369)
        model = model.validateModel(drivingForces);

Error in ReservoirModel/prepareReportstep (line 177)
            [model.FacilityModel, state] = model.FacilityModel.prepareReportstep(state, state0, dt,
            drivingForces);

Error in NonLinearSolver/solveTimestep (line 145)
            [model, state] = model.prepareReportstep(state, state0, dT, drivingForces);

Error in simulateScheduleAD (line 214)
            [state, report] = solver.solveTimestep(state0, dt(i), model,...

Error in ccsnew (line 119)
[wellSol, states] = simulateScheduleAD(initState, model, schedule);
 


Best regards 

Vo Thanh Hung









Vào Th 5, 25 thg 2, 2021 vào lúc 22:33 Knut-Andreas Lie <Knut-And...@sintef.no> đã viết:
ccsnew.m
flu.GRDECL
Reply all
Reply to author
Forward
0 new messages