TCCS-13
Here we describe the steps to reproduce the results in:
Landa-Marbán, D., Sandve, T.H., and Gasda, S.E. 2025. A Coarsening Approach to the Troll Aquifer Model. Submitted to SINTEF Proceedings. https://doi.org/10.13140/RG.2.2.24886.41283
To this end, the deck ORIGINAL.DATA has the same dimensions and number of total cells (12,450,809) as the Troll aquifer model, and the rest of the properties are set to common homogeneous values from literature, while the well locations match the ones described in the TCCS-13 paper. Then, you could contact the Norwegian Offshore Directorate to get the actual Troll aquifer model, and adapt those files to the ones in the tccs-13 folder.
Warning
You should not run the ORIGINAL.DATA file before adapting it with the actual Troll aquifer model, since it has a lot of active cells.
For the first figures, plopm and pycopm are used, which can be installed by:
pip install git+https://github.com/cssr-tools/plopm.git
pip install git+https://github.com/cssr-tools/pycopm.git
To run the optimization, Everest is needed, which is installed via ert when pycopm is installed with the command above.
Note
Python 3.14 was not supported for ert at the time this was written, then you need Python 3.12 or 3.13.
The following commands generate Figures 1 and 2 (a few features such as the transmissibilities, wells, and sensor are added using PowerPoint) using FIG1.DATA:
pycopm -i FIG1.DATA -z 1:4 -m all -a max -w COARSENED_TRANS -l TRANS -t 2
pycopm -i FIG1.DATA -c 1,1,4 -m all -a max -w COARSENED_PERMS -l PERMS
flow FIG1.DATA
flow COARSENED_TRANS.DATA
flow COARSENED_PERMS.DATA
plopm -i FIG1 -v poro -c '#bfebf2' -z 0 -grid 'black,1e0' -y '[5,-1]' -ylnum 5 -xlnum 7 -r 0 -remove 0,0,1,1 -d 24,16 -f 60 -save fig1
plopm -i 'COARSENED_PERMS FIG1 COARSENED_TRANS' -v 'pressure - 0pressure' -subfigs 3,1 -r 1 -z 0 -delax 1 -y '[5,-1]' -cformat .0f -grid 'black,1e0' -cbsfax 0.1,0.95,0.8,0.02 -suptitle 0 -clabel 'Pressure increase [bar]' -cnum 5 -t 'Coarsened (permeabilities) Before coarsening Coarsened (transmissibilities)' -d 24,48 -f 80 -save fig2
For Figs. 3b, 5, 6, and 8, 9, and 10 using ORIGINAL.DATA in the expreccs/tccs-13/original folder:
flow ORIGINAL.DATA --enable-opm-rst-file=true --linear-solver=cpr_trueimpes --time-step-control=newtoniterationcount --newton-min-iterations=1 --tolerance-cnv-relaxed=1e-2 --relaxed-max-pv-fraction=0
pycopm -i ORIGINAL.DATA -t 2 -a max -z 1:30,31:56,57:111,112:116,117:217 -w COARSENED -l C
flow COARSENED.DATA --enable-opm-rst-file=true --linear-solver=cpr_trueimpes --time-step-control=newtoniterationcount --newton-min-iterations=1 --tolerance-cnv-relaxed=1e-2 --relaxed-max-pv-fraction=0
plopm -i ORIGINAL -v 'depth * 0.001' -s ,,1:217 -how min -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -clabel 'Depth [km]' -cnum 5 -cformat .2f -c managua_r -save fig3b
plopm -i 'ORIGINAL ORIGINAL ORIGINAL' -v 'porv' -s ',,1:30 ,,57:111 ,,117:217' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,3 -d 24,12 -cbsfax 0.1,0.95,0.8,0.02 -cformat .1f -f 24 -cnum 5 -suptitle 0 -clabel 'Total pore volume [m$^3$]' -log 1 -c brg -t 'Cook Johansen Statfjord' -delax 1 -save fig5
plopm -i 'ORIGINAL' -v 'faults' -s ',,1:217' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -f 8 -global 1 -t 'Total no. faults = 65' -save fig6a
plopm -i 'ORIGINAL' -v 'faults' -s ',,30:117' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -f 8 -how max -t 'Cook-Johansen-Statfjord' -remove 1,0,0,0 -save fig6b
plopm -i 'ORIGINAL ORIGINAL ORIGINAL' -v 'pressure - 0pressure' -s ',,1:30 ,,57:111 ,,117:217' -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,3 -d 24,12 -cbsfax 0.1,0.95,0.8,0.02 -f 24 -cnum 5 -suptitle 0 -clabel 'Pore-volume-weighted-average pressure increase [bar]' -delax 1 -r 25 -b '[0,80]' -t 'Cook, t=25 years Johansen, t=25 years Statfjord, t=25 years' -b '[0,80]' -save fig8upper
plopm -i 'ORIGINAL ORIGINAL ORIGINAL' -v 'pressure - 0pressure' -s ',,1:30 ,,57:111 ,,117:217' -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,3 -d 24,12 -cbsfax 0.1,0.95,0.8,0.02 -f 24 -cnum 5 -suptitle 0 -clabel 'Pore-volume-weighted-average pressure increase [bar]' -delax 1 -r 30 -b '[0,80]' -t 'Cook, t=525 years Johansen, t=525 years Statfjord, t=525 years' -b '[0,80]' -save fig8lower
plopm -i 'ORIGINAL ORIGINAL ORIGINAL' -v 'limipres' -s ',,1:30 ,,57:111 ,,117:217' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,3 -d 24,12 -cbsfax 0.1,0.95,0.8,0.02 -cformat .1f -f 24 -cnum 5 -suptitle 0 -clabel 'Maximum allowable pressure increase limit [bar]' -c gnuplot2 -t 'Cook Johansen Statfjord' -delax 1 -save fig9
plopm -i 'ORIGINAL' -v 'imbnum' -s ',,1:217' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -remove 0,0,1,1 -c '203;203;203' -save fig10a
plopm -i 'ORIGINAL COARSENED' -v 'overpres' -s ',,1:217 ,,1:5' -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,2 -d 16,12 -cbsfax 0.1,0.95,0.8,0.02 -f 24 -cnum 5 -suptitle 0 -clabel 'Overpressure (p - p$_{lim}$) [bar], t=25 years' -delax 1 -remove 1,0,0,0 -t 'Troll aquifer model Coarsened version' -b '[-126.7,-1.1]' -c cet_diverging_rainbow_bgymr_45_85_c67 -save fig10bc
Figs. 4 and 7 are generated using ResInsight.
Using the coarsened files from pycopm, you could adapt the exisiting files in the coarsened folder to run the optimization:
everest run coarsened.yml --skip-prompt
Note
You might need to adapt the number of cores and mpirun depending on your resources, i.e., the current file is set to use mpirun -np 5 flow … and 14 cores in parallel.
After the study, to generate Fig. 11, execute the postprocessing.py file:
python3 postprocessing.py
Finally, you can look at the improved well locations in the generated figures/optimal_solution folder, and take those locations into the ORGININAL.DATA deck and save it as IMPROVED.DATA, similar to the coarsened version to COARSENED_IMPROVED.DATA, to generate Fig. 12:
flow IMPROVED.DATA --enable-opm-rst-file=true --linear-solver=cpr_trueimpes --time-step-control=newtoniterationcount --newton-min-iterations=1 --tolerance-cnv-relaxed=1e-2 --relaxed-max-pv-fraction=0
flow COARSENED_IMPROVED.DATA --enable-opm-rst-file=true --linear-solver=cpr_trueimpes --time-step-control=newtoniterationcount --newton-min-iterations=1 --tolerance-cnv-relaxed=1e-2 --relaxed-max-pv-fraction=0
plopm -i 'IMPROVED' -v 'imbnum' -s ',,1:217' -r 0 -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -remove 0,0,1,1 -c '203;203;203' -save fig12a
plopm -i 'IMPROVED COARSENED_IMPROVED' -v 'overpres' -s ',,1:217 ,,1:5' -translate '[-495000,-6.605e6]' -x '[0,95000]' -xunits km -xlnum 2 -y '[0,160000]' -yunits km -yformat .0f -ylnum 2 -xformat .0f -subfigs 1,2 -d 16,12 -cbsfax 0.1,0.95,0.8,0.02 -f 24 -cnum 5 -suptitle 0 -clabel 'Overpressure (p - p$_{lim}$) [bar], t=25 years' -delax 1 -remove 1,0,0,0 -t 'Troll aquifer model Coarsened version' -b '[-126.7,-1.1]' -c cet_diverging_rainbow_bgymr_45_85_c67 -save fig10bc