diff --git a/examples/newcases/Case1/basecase.txt b/examples/newcases/Case1/basecase.txt new file mode 100644 index 0000000..6a92186 --- /dev/null +++ b/examples/newcases/Case1/basecase.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case1/basecase_closed.txt b/examples/newcases/Case1/basecase_closed.txt new file mode 100644 index 0000000..6920184 --- /dev/null +++ b/examples/newcases/Case1/basecase_closed.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +closed #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case1/basecase_flux.txt b/examples/newcases/Case1/basecase_flux.txt new file mode 100644 index 0000000..a6256e8 --- /dev/null +++ b/examples/newcases/Case1/basecase_flux.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +flux #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case1/basecase_open.txt b/examples/newcases/Case1/basecase_open.txt new file mode 100644 index 0000000..2fe532c --- /dev/null +++ b/examples/newcases/Case1/basecase_open.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +free #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case1/basecase_porvproj.txt b/examples/newcases/Case1/basecase_porvproj.txt new file mode 100644 index 0000000..000967e --- /dev/null +++ b/examples/newcases/Case1/basecase_porvproj.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +porvproj #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case1/run_simulations.py b/examples/newcases/Case1/run_simulations.py new file mode 100644 index 0000000..09a4e8d --- /dev/null +++ b/examples/newcases/Case1/run_simulations.py @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2024 NORCE +# SPDX-License-Identifier: GPL-3.0 + +"""" +Script to run Flow +""" + +import os + +NAMES = [ + "basecase", +] +os.system("rm -rf compare") +nsimulations = len(NAMES) +command = "" +for i, name in enumerate(NAMES): + command += f"expreccs -i {name}.txt -o Case_1 -m all -p no & " +command += "wait" +os.system(command) +command = "" +for i, name in enumerate(NAMES): + command += f"expreccs -i {name}_flux.txt -o Case_1 -m site -p no & " + command += f"expreccs -i {name}_porvproj.txt -o Case_1 -m site -p no & " + command += f"expreccs -i {name}_closed.txt -o Case_1 -m site -p no & " + command += f"expreccs -i {name}_open.txt -o Case_1 -m site -p no & " +command += "wait" +os.system(command) +command = f"expreccs -i {name}_open.txt -o Case_1 -m none -p yes" +os.system(command) diff --git a/examples/newcases/Case2/Grid_0_40m.txt b/examples/newcases/Case2/Grid_0_40m.txt new file mode 100644 index 0000000..6a92186 --- /dev/null +++ b/examples/newcases/Case2/Grid_0_40m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +375 #Variable array of x-refinment (Regional) +375 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/Grid_1_120m.txt b/examples/newcases/Case2/Grid_1_120m.txt new file mode 100644 index 0000000..dbe5c76 --- /dev/null +++ b/examples/newcases/Case2/Grid_1_120m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +125 #Variable array of x-refinment (Regional) +125 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/Grid_2_200m.txt b/examples/newcases/Case2/Grid_2_200m.txt new file mode 100644 index 0000000..1958680 --- /dev/null +++ b/examples/newcases/Case2/Grid_2_200m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +75 #Variable array of x-refinment (Regional) +75 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/Grid_3_600m.txt b/examples/newcases/Case2/Grid_3_600m.txt new file mode 100644 index 0000000..f851d58 --- /dev/null +++ b/examples/newcases/Case2/Grid_3_600m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +25 #Variable array of x-refinment (Regional) +25 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/Grid_4_1000m.txt b/examples/newcases/Case2/Grid_4_1000m.txt new file mode 100644 index 0000000..a886a8f --- /dev/null +++ b/examples/newcases/Case2/Grid_4_1000m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +15 #Variable array of x-refinment (Regional) +15 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/Grid_5_5000m.txt b/examples/newcases/Case2/Grid_5_5000m.txt new file mode 100644 index 0000000..bf75170 --- /dev/null +++ b/examples/newcases/Case2/Grid_5_5000m.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +3 #Variable array of x-refinment (Regional) +3 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case2/run_simulations.py b/examples/newcases/Case2/run_simulations.py new file mode 100644 index 0000000..7261db8 --- /dev/null +++ b/examples/newcases/Case2/run_simulations.py @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: 2024 NORCE +# SPDX-License-Identifier: GPL-3.0 + +"""" +Script to run Flow +""" + +import os + +NAMES = [ + "Grid_0_40m", + "Grid_1_120m", + "Grid_2_200m", + "Grid_3_600m", + "Grid_4_1000m", + "Grid_5_5000m", +] +os.system("rm -rf compare") +nsimulations = len(NAMES) +command = "" +for i, name in enumerate(NAMES): + command += f"expreccs -i {name}.txt -o {name} -m none -p yes & " +command += "wait" +os.system(command) +os.system("expreccs -c compare") diff --git a/examples/newcases/Case3/Everyday.txt b/examples/newcases/Case3/Everyday.txt new file mode 100644 index 0000000..1958680 --- /dev/null +++ b/examples/newcases/Case3/Everyday.txt @@ -0,0 +1,49 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +75 #Variable array of x-refinment (Regional) +75 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 +180 1 1 1 1 0 1 0 1 4106776.18 +180 1 1 1 1 0 1 4106776.18 1 0 +180 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case3/Interpolation_in_time.txt b/examples/newcases/Case3/Interpolation_in_time.txt new file mode 100644 index 0000000..54bfffe --- /dev/null +++ b/examples/newcases/Case3/Interpolation_in_time.txt @@ -0,0 +1,57 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +75 #Variable array of x-refinment (Regional) +75 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres interp #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" + 10 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 + 50 10 10 1 1 4106776.18 1 4106776.18 1 4106776.18 +120 120 10 1 1 4106776.18 1 4106776.18 1 4106776.18 + 10 1 1 1 1 0 1 0 1 4106776.18 + 50 10 10 1 1 0 1 0 1 4106776.18 +120 120 10 1 1 0 1 0 1 4106776.18 + 10 1 1 1 1 0 1 4106776.18 1 0 + 50 10 10 1 1 0 1 4106776.18 1 0 +120 120 10 1 1 0 1 4106776.18 1 0 + 10 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 + 50 10 10 1 1 4106776.18 1 4106776.18 1 4106776.18 +120 120 10 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case3/On_report_steps.txt b/examples/newcases/Case3/On_report_steps.txt new file mode 100644 index 0000000..0d191bb --- /dev/null +++ b/examples/newcases/Case3/On_report_steps.txt @@ -0,0 +1,57 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +75 #Variable array of x-refinment (Regional) +75 #Variable array of y-refinment (Regional) +1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 1e9 1e9 1e9 1e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1 1 0 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 1 1 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +9 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +6700 7500 4.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +0 #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 0 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 1000 PERMZ5 100 PORO5 0.2 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7500 7500 0 9 #Well 0 +11500 11500 0 9 #Well 1 +11500 3500 0 9 #Well 2 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" + 10 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 + 50 10 10 1 1 4106776.18 1 4106776.18 1 4106776.18 +120 120 120 1 1 4106776.18 1 4106776.18 1 4106776.18 + 10 1 1 1 1 0 1 0 1 4106776.18 + 50 10 10 1 1 0 1 0 1 4106776.18 +120 120 120 1 1 0 1 0 1 4106776.18 + 10 1 1 1 1 0 1 4106776.18 1 0 + 50 10 10 1 1 0 1 4106776.18 1 0 +120 120 120 1 1 0 1 4106776.18 1 0 + 10 1 1 1 1 4106776.18 1 4106776.18 1 4106776.18 + 50 10 10 1 1 4106776.18 1 4106776.18 1 4106776.18 +120 120 120 1 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case3/run_simulations.py b/examples/newcases/Case3/run_simulations.py new file mode 100644 index 0000000..238168d --- /dev/null +++ b/examples/newcases/Case3/run_simulations.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: 2024 NORCE +# SPDX-License-Identifier: GPL-3.0 + +"""" +Script to run Flow +""" + +import os + +NAMES = [ + "Everyday", + "On_report_steps", + "Interpolation_in_time", +] +os.system("rm -rf compare") +nsimulations = len(NAMES) +command = "" +for i, name in enumerate(NAMES): + command += f"expreccs -i {name}.txt -o {name} -m all -p yes & " +command += "wait" +os.system(command) +os.system("expreccs -c compare") diff --git a/examples/newcases/Case4/complexity.txt b/examples/newcases/Case4/complexity.txt new file mode 100644 index 0000000..fc36e5f --- /dev/null +++ b/examples/newcases/Case4/complexity.txt @@ -0,0 +1,66 @@ +"""Set the full path to the flow executable and flags""" +flow --tolerance-mb=1e-7 --enable-opm-rst-file=true --linear-solver=cprw --newton-min-iterations=1 --enable-tuning=true + +"""Set the model parameters""" +15000 15000 9 #Reginonal aquifer length, width, and depth [m] +1,2,2,4,4,5,5,5,5,5,5,5,5,5,5 #Variable array of x-refinment (Regional) +1,2,2,4,4,5,5,5,5,5,5,5,5,5,5 #Variable array of y-refinment (Regional) +1,1,1 #Variable array of z-refinment (Regional) +375 #Variable array of x-refinment (Reference) +375 #Variable array of y-refinment (Reference) +3,2,1 #Variable array of z-refinment (Reference) +5000 5000 10000 10000 #Site xi, yi, xf, and yf box positions [m] +porv 2e9 2e9 2e9 2e9 #Use free/closed/porv for the Regional aquifer (if porv, enter the bottom, right, top, and left values (e.g, porv 1e8 1e7 1e6 1e5)) +pres interp #Use free/closed/porv/porvproj/flux/pres/pres2p/wells for the BC site (if porv; bottom, right, top, and left values (e.g, porv 1e4 1e3 1e2 1e1)); for pres/flux, add 'interp' to use linear interpolation in time +11000 11000 1E5 0 4.5 #Regional fault x, and y positions [m], x and y multipliers for the trans, and height of the fault jump [m] +6666 7075 7885 8450 0 0 #Site fault x, and y positions [m] (initial and final) and x and y multipliers for the trans +3,3,3 #Thicknes of the layers +3E7 105 105 4.934e-10 #Pressure on the reservoir top [Pa], top and bottom temperatures [C], and rock compressibility [1/Pa] +7895 8430 0.5 #Sensor position x, y, and z to assess the error over time w.r.t the reference solution [m] +(20-20*mt.cos((2*mt.pi*(x+y)/15000))) #The function for the reservoir surface +1 2.92 #Add hysteresis (1/0) and salinity (value [1E-3 kg-M/kg]) +0 #Number of interations for back-coupling + +"""Set the saturation functions""" +krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw #Wetting rel perm saturation function [-] +krn * ((1.0 - sw - sni) / (1.0 - sni - swi)) ** nkrn #Non-wetting rel perm saturation function [-] +pec * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npe)) #Capillary pressure saturation function [Pa] + +"""Properties sat functions""" +"""swi [-], sni [-], krw [-], krn [-], pec [Pa], nkrw [-], nkrn [-], npe [-], threshold cP evaluation""" +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 61237. NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 5E4 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0. KRW5 1. KRN5 .3 PRE4 49029 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 61237. NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 5E4 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 +SWI5 0.478 SNI5 0.312 KRW5 1. KRN5 .3 PRE4 49029 NKRW1 3 NKRN1 3 NPE1 2 THRE1 1e-5 + +"""Properties rock""" +"""Kxy [mD], Kz [mD], phi [-]""" +PERMXY5 500 PERMZ5 50 PORO5 0.15 +PERMXY5 1000 PERMZ5 100 PORO5 0.20 +PERMXY5 1300 PERMZ5 130 PORO5 0.25 + +"""Wells position""" +"""x, y, zi, and zf positions [m]""" +7180 7180 0 9 #Well 0 +7970 7970 0 9 #Well 1 +6660 8333 0 9 #Well 2 +11300 11300 0 9 #Well 3 +11300 4800 0 9 #Well 4 +5333 11666 0 9 #Well 5 + +"""Define the injection values""" +"""injection time [d], time step size to write results regional [d], time step size to write results site/reference [d], maximum time step [d], fluid (0 wetting, 1 non-wetting) well 0, injection rates [kg/day] well 0, fluid ... well n, injection, ...well n, (if 'wells' for BC in site (Line 14); bottom, right, top, and left values (0(prod)/1(inj), pressure [Pa]))""" + 10 1 1 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 0 1 0 + 50 10 10 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 0 1 0 +120 120 10 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 0 1 0 + 10 1 1 1 1 0 1 0 1 0 1 0 1 0 1 4106776.18 + 50 10 10 1 1 0 1 0 1 0 1 0 1 0 1 4106776.18 +120 120 10 1 1 0 1 0 1 0 1 0 1 0 1 4106776.18 + 10 1 1 1 1 0 1 0 1 0 1 0 1 4106776.18 1 0 + 50 10 10 1 1 0 1 0 1 0 1 0 1 4106776.18 1 0 +120 120 10 1 1 0 1 0 1 0 1 0 1 4106776.18 1 0 + 10 1 1 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 4106776.18 1 4106776.18 + 50 10 10 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 4106776.18 1 4106776.18 +120 120 10 1 1 1368925.4 1 1368925.4 1 1368925.4 1 4106776.18 1 4106776.18 1 4106776.18 \ No newline at end of file diff --git a/examples/newcases/Case4/run_simulations.py b/examples/newcases/Case4/run_simulations.py new file mode 100644 index 0000000..ae3a2ab --- /dev/null +++ b/examples/newcases/Case4/run_simulations.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2024 NORCE +# SPDX-License-Identifier: GPL-3.0 + +"""" +Script to run Flow +""" + +import os + +NAMES = [ + "complexity", +] +os.system("rm -rf compare") +nsimulations = len(NAMES) +command = "" +for i, name in enumerate(NAMES): + command += f"expreccs -i {name}.txt -o Case_4 -m all -p yes & " +command += "wait" +os.system(command) diff --git a/examples/newcases/Locations_figures/Case_1.ipe b/examples/newcases/Locations_figures/Case_1.ipe new file mode 100644 index 0000000..4d82a8c --- /dev/null +++ b/examples/newcases/Locations_figures/Case_1.ipe @@ -0,0 +1,360 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +144 640 m +144 400 l +384 400 l +384 640 l +h + + +224 560 m +224 480 l +304 480 l +304 560 l +h + +nx=ny=375, +(5,5) +REG/REF +SITE +INJ0 +INJ1 +INJ2 +SENSOR + +4 0 0 4 432 560 e + + +4 0 0 4 432 560 e + + +4 0 0 4 432 560 e + + +4 0 0 4 432 560 e + +(10,10) +(0,0) [km] +(15,15) [km] +dx=dy=40 [m], dz= 9 [m] +(11.5,3.5) +(11.5,11.5) +(7.5,7.5) +(6.7,7.5) +nz= 1 + + diff --git a/examples/newcases/Locations_figures/Case_4_regional.ipe b/examples/newcases/Locations_figures/Case_4_regional.ipe new file mode 100644 index 0000000..ac075e1 --- /dev/null +++ b/examples/newcases/Locations_figures/Case_4_regional.ipe @@ -0,0 +1,359 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +144 640 m +144 400 l +384 400 l +384 640 l +h + + +224 560 m +224 480 l +304 480 l +304 560 l +h + +(5,5) +REG +SITE +INJ3 +INJ4 + +4 0 0 4 432 560 e + + +4 0 0 4 432 560 e + +(10,10) +(0,0) [km] +(15,15) [km] +(11.3,4.8) +(11.3,11.3) +INJ5 + +4 0 0 4 432 560 e + +(5.3,11.6) + +324 640 m +324 580 l +384 580 l + +FAULT +FAULT + + diff --git a/examples/newcases/Locations_figures/Case_4_site.ipe b/examples/newcases/Locations_figures/Case_4_site.ipe new file mode 100644 index 0000000..73fbe93 --- /dev/null +++ b/examples/newcases/Locations_figures/Case_4_site.ipe @@ -0,0 +1,774 @@ + + + + + +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 + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +0.5 0 m +-0.5 0.333 l +-0.3 0 l +-0.5 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +1 0 m +0 0.333 l +0 -0.333 l +h +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +188 504 m +228 540 +240 544 +252 548 +256 548 c + +(7180,7180) +(7970,7970) +(6660,8333) +(7895,8430) +SENSOR + +4 0 0 4 432 560 e + +Sealing fault +SITE + + diff --git a/src/expreccs/templates/decks/site.mako b/src/expreccs/templates/decks/site.mako index cb7308f..c4e4dfb 100644 --- a/src/expreccs/templates/decks/site.mako +++ b/src/expreccs/templates/decks/site.mako @@ -311,14 +311,10 @@ ${i+1} DIRICHLET ${dic["lin"]} 1* ${dic['PRESSURE_left'][n+k+1][0][i]} / ${i+1+len(dic['PRESSURE_left'][0][0])} DIRICHLET ${dic["lin"]} 1* ${dic['PRESSURE_right'][n+k+1][0][i]} / % endfor % for i in range(len(dic['PRESSURE_bottom'][0][0])): -% if ((i%dic["bottom_noCells"]+1)*mt.floor(dic['site_noCells'][0]/dic["bottom_noCells"]) != 1 and 1+(i%dic["bottom_noCells"])*mt.floor(dic['site_noCells'][0]/dic["bottom_noCells"])!=dic['site_noCells'][0]) and dic["bottom_noCells"]>2: ${i+1+len(dic['PRESSURE_left'][0][0])+len(dic['PRESSURE_right'][0][0])} DIRICHLET ${dic["lin"]} 1* ${dic['PRESSURE_bottom'][n+k+1][0][i]} / -% endif % endfor % for i in range(len(dic['PRESSURE_top'][0][0])): -% if ((i%dic["top_noCells"]+1)*mt.floor(dic['site_noCells'][0]/dic["top_noCells"]) != 1 and 1+(i%dic["top_noCells"])*mt.floor(dic['site_noCells'][0]/dic["top_noCells"])!=dic['site_noCells'][0]) and dic["top_noCells"]>2: ${i+1+len(dic['PRESSURE_left'][0][0])+len(dic['PRESSURE_right'][0][0])+len(dic['PRESSURE_bottom'][0][0])} DIRICHLET ${dic["lin"]} 1* ${dic['PRESSURE_top'][n+k+1][0][i]} / -% endif % endfor / %elif dic['site_bctype'] == "free": diff --git a/src/expreccs/visualization/maps2d.py b/src/expreccs/visualization/maps2d.py index b1d82b6..169dff4 100644 --- a/src/expreccs/visualization/maps2d.py +++ b/src/expreccs/visualization/maps2d.py @@ -21,7 +21,7 @@ def final_time_maps(dic): for nfol, fol in enumerate(dic["folders"]): for res in dic[f"{fol}_decks"]: dic = manage_name(dic, res) - for j, quantity in enumerate(dic["quantity"]): + for j, quantity in enumerate(dic["quantity"][0:2]): dic[f"{fol}/{res}_{quantity}_plot"] = np.zeros( [ len(dic[f"{fol}/{dic['name']}_ymy"]) - 1, @@ -45,9 +45,10 @@ def final_time_maps(dic): cmap=dic["cmaps"][j], ) axis.set_title(dic[f"l{res}"] + f" ({dic['lfolders'][nfol]})") + # axis.set_title(f"REF (Case 4)") maxp = dic[f"{fol}/{res}_{quantity}_plot"].max() minp = dic[f"{fol}/{res}_{quantity}_plot"].min() - # minp, maxp = -0.09, 0.14 + # minp, maxp = 305, 359 axis.axis("scaled") axis.set_xlabel("Easting [km]") axis.set_ylabel("Northing [km]") @@ -118,23 +119,23 @@ def final_time_maps_difference(dic): ] - dic[f"{fol}/{res}_{quantity}_array"][-1] ) - if quantity == "FLOWATI+": + if quantity in ["FLOWATI+", "FLOGASI+"]: for k in range(len(dic[f"{fol}/site_ymy"]) - 1): dic[f"{fol}/{res}_difference_{quantity}"][ (k + 1) * (len(dic[f"{fol}/site_xmx"]) - 1) - 1 ] = 0 - if quantity == "FLOWATJ-": + if quantity in ["FLOWATJ-", "FLOGASJ-"]: for k in range(len(dic[f"{fol}/site_xmx"]) - 1): dic[f"{fol}/{res}_difference_{quantity}"][k] = 0 dic[f"{fol}/{res}_difference_{quantity}_plot"] = np.zeros( [len(dic[f"{fol}/site_ymy"]) - 1, len(dic[f"{fol}/site_xmx"]) - 1] ) - if quantity == "FLOWATI-": + if quantity in ["FLOWATI-", "FLOGASI-"]: for k in range(len(dic[f"{fol}/site_ymy"]) - 1): dic[f"{fol}/{res}_difference_{quantity}"][ k * (len(dic[f"{fol}/site_xmx"]) - 1) ] = 0 - if quantity == "FLOWATJ+": + if quantity in ["FLOWATJ+", "FLOGASJ+"]: for k in range(len(dic[f"{fol}/site_xmx"]) - 1): dic[f"{fol}/{res}_difference_{quantity}"][ (len(dic[f"{fol}/site_ymy"]) - 2) @@ -155,7 +156,7 @@ def final_time_maps_difference(dic): dic[f"{fol}/{dic['name']}_ycor"] / 1000.0, dic[f"{fol}/{res}_difference_{quantity}_plot"], shading="flat", - cmap=dic["cmaps"][j], + cmap="seismic", ) axis.axis( [ @@ -183,7 +184,8 @@ def final_time_maps_difference(dic): axis.set_xlabel("Easting [km]") axis.set_ylabel("Northing [km]") axis.set_title( - r"$\sum$|REF-" + "SITE " + + r"$\sum$|REF-" + f"{dic[f'l{res}']}" + f"|={abs(dic[f'{fol}/{res}_difference_{quantity}_plot']).sum():.2E}" ) @@ -192,7 +194,7 @@ def final_time_maps_difference(dic): # axis.tick_params(axis='y', colors='white') maxp = dic[f"{fol}/{res}_difference_{quantity}_plot"].max() minp = dic[f"{fol}/{res}_difference_{quantity}_plot"].min() - # minp, maxp = -.016, .016 + # minp, maxp = -1.53, 1.53 divider = make_axes_locatable(axis) cax = divider.append_axes("right", size="5%", pad=1e-3) vect = np.linspace( @@ -207,7 +209,7 @@ def final_time_maps_difference(dic): orientation="vertical", ticks=vect, label=dic["units"][j], - format=lambda x, _: f"{x:.3f}", + format=lambda x, _: f"{x:.2f}", ) imag.set_clim( minp, @@ -255,19 +257,24 @@ def geological_maps(dic): cmap=dic["cmaps"][j], ) axis.set_title(dic[f"l{res}"] + f" ({dic['lfolders'][nfol]})") + # axis.set_title("REG/REF (Case 1)") axis.axis("scaled") name = dic["name"] axis.set_xlabel( - f"L = {dic[f'{fol}/{name}_xmx'][-1]/1000. - dic[f'{fol}/{name}_xmx'][0]/1000.} [km]" + f"L={(dic[f'{fol}/{name}_xmx'][-1] - dic[f'{fol}/{name}_xmx'][0])/1000.:.0f}" + + f" [km], dx={dic[f'{fol}/{name}_xmx'][1]:.0f} [m]" ) axis.set_ylabel( - f"W = {dic[f'{fol}/{name}_ymy'][-1]/1000. - dic[f'{fol}/{name}_ymy'][0]/1000.} [km]" + f"W={(dic[f'{fol}/{name}_ymy'][-1] - dic[f'{fol}/{name}_ymy'][0])/1000.:.0f}" + + f" [km], dy={dic[f'{fol}/{name}_ymy'][1]:.0f} [m]" ) - axis.set_xticks(dic[f"{fol}/{dic['name']}_xcor"][0] / 1000.0) - axis.set_yticks(dic[f"{fol}/{dic['name']}_ymy"] / 1000.0) - axis.grid(True, color="k", lw=1) - plt.setp(axis.get_xticklabels(), visible=False) - plt.setp(axis.get_yticklabels(), visible=False) + # axis.set_xticks(dic[f"{fol}/{dic['name']}_xcor"][0] / 1000.0) + # axis.set_yticks(dic[f"{fol}/{dic['name']}_ymy"] / 1000.0) + axis.set_xticks([]) + axis.set_yticks([]) + # axis.grid(True, color="k", lw=1) + # plt.setp(axis.get_xticklabels(), visible=False) + # plt.setp(axis.get_yticklabels(), visible=False) fig.savefig( f"{dic['where']}/{dic['id']}{res}_fipnum.png", bbox_inches="tight" ) diff --git a/src/expreccs/visualization/plotting.py b/src/expreccs/visualization/plotting.py index 0f1e4fb..f4f4121 100644 --- a/src/expreccs/visualization/plotting.py +++ b/src/expreccs/visualization/plotting.py @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: 2023 NORCE # SPDX-License-Identifier: GPL-3.0 +# pylint: disable=R0914 """" Script to plot the top surface for the reference, regional, and site reservoirs. @@ -23,7 +24,6 @@ GAS_DEN_REF = 1.86843 # kg/sm3 WAT_DEN_REF = 998.108 # kg/sm3 -KG_TO_T = 1e-3 KG_TO_KT = 1e-6 KG_TO_MT = 1e-9 @@ -162,8 +162,9 @@ def plotting_settings(dic): "#9467bd", "#8c564b", "#e377c2", - "k", + "#17becf", "#bcbd22", + "k", "#17becf", "r", ] @@ -190,12 +191,13 @@ def plotting_settings(dic): (0, (5, 1)), (0, (3, 10, 1, 10)), (0, (3, 5, 1, 5)), - (0, (3, 1, 1, 1)), (0, (3, 5, 1, 5, 1, 5)), - (0, (3, 1, 1, 1, 1, 1)), + ":", + "-.", "--", - (0, ()), - "-", + (0, (3, 1, 1, 1)), + (0, (3, 1, 1, 1, 1, 1)), + "solid", ] dic["lreference"] = r"REF" dic["lregional"] = r"REG" @@ -211,7 +213,11 @@ def plotting_settings(dic): dic["lsite_free"] = r"SITE$_o$" dic["cmaps"] = [ "jet", - "seismic", + "brg", + "coolwarm", + "coolwarm", + "coolwarm", + "coolwarm", "coolwarm", "coolwarm", "coolwarm", @@ -227,6 +233,10 @@ def plotting_settings(dic): "FLOWATJ+", "FLOWATI-", "FLOWATJ-", + "FLOGASI+", + "FLOGASJ+", + "FLOGASI-", + "FLOGASJ-", "mass", "diss", "gas", @@ -238,6 +248,10 @@ def plotting_settings(dic): "watfluxj+", "watfluxi-", "watfluxj-", + "gasfluxi+", + "gasfluxj+", + "gasfluxi-", + "gasfluxj-", "CO$_2$ total", "CO$_2$ dissolved", "CO$_2$ gas", @@ -245,10 +259,14 @@ def plotting_settings(dic): dic["units"] = [ "Saturation [-]", "Pressure [bar]", - "Mass flux x+ direction [t m$^{-2}$ day$^{-1}$]", - "Mass flux y+ direction [t m$^{-2}$ day$^{-1}$]", - "Mass flux x- direction [t m$^{-2}$ day$^{-1}$]", - "Mass flux y- direction [t m$^{-2}$ day$^{-1}$]", + "H$_2$O velocity x+ direction [m day$^{-1}$]", + "H$_2$O velocity y+ direction [m day$^{-1}$]", + "H$_2$O velocity x- direction [m day$^{-1}$]", + "H$_2$O velocity y- direction [m day$^{-1}$]", + "CO$_2$ velocity x+ direction [m day$^{-1}$]", + "CO$_2$ velocity y+ direction [m day$^{-1}$]", + "CO$_2$ velocity x- direction [m day$^{-1}$]", + "CO$_2$ velocity y- direction [m day$^{-1}$]", "CO$_2$ in-place [kt]", "CO$_2$ in-place (liquid phase) [kt]", "CO$_2$ in-place (gas phase) [kt]", @@ -341,10 +359,10 @@ def summary_site(dic, nfol, ndeck, opmn): dic (dict): Global dictionary with required parameters """ - if dic["compare"]: - marker = dic["markers"][nfol] - else: - marker = "" + # if dic["compare"]: + # marker = dic["markers"][nfol] + # else: + # marker = "" fol = dic["folders"][nfol] res = dic[f"{fol}_decks"][ndeck] if dic["reading"] == "resdata": @@ -357,12 +375,12 @@ def summary_site(dic, nfol, ndeck, opmn): dy = dic[f"{fol}/{res}_dy"][dic[f"{fol}/{res}_sensor"]] dz = dic[f"{fol}/{res}_dz"][dic[f"{fol}/{res}_sensor"]] poro = dic[f"{fol}/{res}_poro"][dic[f"{fol}/{res}_sensor"]] - yvalues = [KG_TO_T * WAT_DEN_REF * val / (poro * dy * dz) for val in yvalues] + yvalues = [val / (poro * dy * dz) for val in yvalues] if opmn[:6] == "BFLOWJ": dx = dic[f"{fol}/{res}_dx"][dic[f"{fol}/{res}_sensor"]] dz = dic[f"{fol}/{res}_dz"][dic[f"{fol}/{res}_sensor"]] poro = dic[f"{fol}/{res}_poro"][dic[f"{fol}/{res}_sensor"]] - yvalues = [KG_TO_T * WAT_DEN_REF * val / (poro * dx * dz) for val in yvalues] + yvalues = [val / (poro * dx * dz) for val in yvalues] if ndeck == 0 and nfol > 0: return dic if ndeck == 0: @@ -371,7 +389,6 @@ def summary_site(dic, nfol, ndeck, opmn): yvalues, label=dic["lreference"], color=dic["colors"][-ndeck - 1], - lw=3, ) else: dic["axis"].step( @@ -379,11 +396,8 @@ def summary_site(dic, nfol, ndeck, opmn): yvalues, label=dic[f"l{res}"] + f"{' ('+dic['lfolders'][nfol]+')' if dic['compare'] else ''}", - color=dic["colors"][-ndeck], - linestyle=dic["linestyle"][-ndeck], - lw=3, - marker=marker, - markersize=3, + color=dic["colors"][-ndeck - 1], + linestyle=dic["linestyle"][-nfol - 2], ) return dic @@ -570,7 +584,11 @@ def over_time_distance(dic): ) dic["axis"][-1].set_ylabel("Distance [km]") dic["axis"][-1].set_xlabel("Time") - dic["axis"][-1].legend() + handles, labels = plt.gca().get_legend_handles_labels() + order = np.argsort(labels) + dic["axis"][-1].legend( + [handles[idx] for idx in order], [labels[idx] for idx in order] + ) dic["axis"][-1].xaxis.set_tick_params(rotation=45) dic["fig"][-1].savefig( f"{dic['where']}/{dic['id']}distance_from_border.png", bbox_inches="tight" @@ -764,14 +782,15 @@ def handle_labels_distance(dic, nfol, res, fol, j): else: if j == 0: j_j = 0 + nfol = 1 else: - j_j = j + j_j = j + 1 label = dic[f"l{res}"] dic["axis"][-1].step( dic[f"{fol}/{res}_dates"], dic[f"{fol}/{res}_indicator_plot"], color=dic["colors"][-1 - j_j], - linestyle=dic["linestyle"][-1 - j_j], + linestyle=dic["linestyle"][-nfol - 2], label=label, ) return dic @@ -873,7 +892,7 @@ def over_time_sensor(dic, nqua, quantity): dic[f"{fol}/{res}_sensor_{quantity}"], color=dic["colors"][-1], linestyle=dic["linestyle"][-1], - label=label, # +" (Grid 0 50m)" + label=label, # +" (Grid 0 40m)" ) # referror = np.array(dic[f"{fol}/{res}_sensor_{quantity}"]) if res != "reference": @@ -887,9 +906,10 @@ def over_time_sensor(dic, nqua, quantity): ) dic["nmarker"] += 1 # quanti = np.array(dic[f"{fol}/{res}_sensor_{quantity}"]) - # error = np.max(np.abs(referror - quanti)) - # if quantity == "pressure": - # print(fol, res, quantity, f"{error:.2f}") + # #error = np.max(np.abs(referror - quanti)) + # error = np.linalg.norm(referror - quanti) + # #if quantity == "pressure": + # print(fol, res, quantity, f"{error:.2f}") else: dic["axiss"][nqua].step( dic[f"{fol}/{res}_dates"], @@ -901,7 +921,7 @@ def over_time_sensor(dic, nqua, quantity): location = f"({dic[f'{fol}/{res}_sensor_location'][0]/1000.}, " location += f"{dic[f'{fol}/{res}_sensor_location'][1]/1000.}, " location += f"{dic[f'{fol}/{res}_sensor_location'][2]/1000.})" - dic["axiss"][nqua].set_title(f"Sensor location {location} [km]") + dic["axiss"][nqua].set_title(f"Sensor location {location} [km] (Case 4)") dic["axiss"][nqua].set_ylabel(f"{dic['units'][nqua]}") dic["axiss"][nqua].set_xlabel("Time") # if quantity != "pressure": @@ -930,7 +950,12 @@ def handle_labels_difference(dic, res, j, nqua, nfol): quantity = dic["quantity"][nqua] fol = dic["folders"][nfol] if dic["compare"]: - label = dic[f"l{res}"] + f" ({dic['lfolders'][nfol]})" + label = ( + dic[f"l{res}"] + + f" ({dic['lfolders'][nfol]})" + + r", $\max$=" + + f"{np.array(dic[f'{fol}/{res}_maximum_{quantity}']).max():.2E}" + ) dic["axis"][nqua].step( dic[f"{fol}/{res}_dates"], dic[f"{fol}/{res}_difference_{quantity}"], diff --git a/src/expreccs/visualization/reading.py b/src/expreccs/visualization/reading.py index 15d7d5e..d3ebaf9 100644 --- a/src/expreccs/visualization/reading.py +++ b/src/expreccs/visualization/reading.py @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: 2023 NORCE # SPDX-License-Identifier: GPL-3.0 +# pylint: disable=R0912 """" Script to read OPM Flow output files @@ -26,7 +27,6 @@ GAS_DEN_REF = 1.86843 WAT_DEN_REF = 998.108 -KG_TO_T = 1e-3 KG_TO_KT = 1e-6 @@ -123,14 +123,10 @@ def resdata_arrays(dic, fol, res): elif quantity == "gas": dic[f"{fol}/{res}_{quantity}_array"].append(co2_g * KG_TO_KT) elif quantity in ["FLOWATI+", "FLOWATI-"]: - flow = ( - KG_TO_T - * WAT_DEN_REF - * np.array( - dic[f"{fol}/{res}_rst"][ - f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}" - ][i] - ) + flow = np.array( + dic[f"{fol}/{res}_rst"][ + f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}" + ][i] ) dic[f"{fol}/{res}_{quantity}_array"].append( np.divide( @@ -141,15 +137,31 @@ def resdata_arrays(dic, fol, res): ) ) elif quantity in ["FLOWATJ+", "FLOWATJ-"]: - flow = ( - KG_TO_T - * WAT_DEN_REF - * np.array( - dic[f"{fol}/{res}_rst"][ - f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}" - ][i] + flow = np.array( + dic[f"{fol}/{res}_rst"][ + f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}" + ][i] + ) + dic[f"{fol}/{res}_{quantity}_array"].append( + np.divide( + flow, + dic[f"{fol}/{res}_dx"] + * dic[f"{fol}/{res}_dz"] + * dic[f"{fol}/{res}_poro"], + ) + ) + elif quantity in ["FLOGASI+", "FLOGASI-"]: + flow = np.array(dic[f"{fol}/{res}_rst"][f"FLOGAS{quantity[-2:]}"][i]) + dic[f"{fol}/{res}_{quantity}_array"].append( + np.divide( + flow, + dic[f"{fol}/{res}_dy"] + * dic[f"{fol}/{res}_dz"] + * dic[f"{fol}/{res}_poro"], ) ) + elif quantity in ["FLOGASJ+", "FLOGASJ-"]: + flow = np.array(dic[f"{fol}/{res}_rst"][f"FLOGAS{quantity[-2:]}"][i]) dic[f"{fol}/{res}_{quantity}_array"].append( np.divide( flow, @@ -356,14 +368,10 @@ def opm_arrays(dic, fol, res, loadnpy): elif quantity == "gas": dic[f"{fol}/{res}_{quantity}_array"].append(co2_g * KG_TO_KT) elif quantity in ["FLOWATI+", "FLOWATI-"]: - flow = ( - KG_TO_T - * WAT_DEN_REF - * np.array( - dic[f"{fol}/{res}_rst"][ - f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}", i - ] - ) + flow = np.array( + dic[f"{fol}/{res}_rst"][ + f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}", i + ] ) dic[f"{fol}/{res}_{quantity}_array"].append( np.divide( @@ -374,15 +382,31 @@ def opm_arrays(dic, fol, res, loadnpy): ) ) elif quantity in ["FLOWATJ+", "FLOWATJ-"]: - flow = ( - KG_TO_T - * WAT_DEN_REF - * np.array( - dic[f"{fol}/{res}_rst"][ - f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}", i - ] + flow = np.array( + dic[f"{fol}/{res}_rst"][ + f"FLO{dic[f'{fol}/{res}liq']}{quantity[-2:]}", i + ] + ) + dic[f"{fol}/{res}_{quantity}_array"].append( + np.divide( + flow, + dic[f"{fol}/{res}_dx"] + * dic[f"{fol}/{res}_dz"] + * dic[f"{fol}/{res}_poro"], + ) + ) + elif quantity in ["FLOGASI+", "FLOGASI-"]: + flow = np.array(dic[f"{fol}/{res}_rst"][f"FLOGAS{quantity[-2:]}", i]) + dic[f"{fol}/{res}_{quantity}_array"].append( + np.divide( + flow, + dic[f"{fol}/{res}_dy"] + * dic[f"{fol}/{res}_dz"] + * dic[f"{fol}/{res}_poro"], ) ) + elif quantity in ["FLOGASJ+", "FLOGASJ-"]: + flow = np.array(dic[f"{fol}/{res}_rst"][f"FLOGAS{quantity[-2:]}", i]) dic[f"{fol}/{res}_{quantity}_array"].append( np.divide( flow,