diff --git a/docs/_sources/configuration_file.rst.txt b/docs/_sources/configuration_file.rst.txt index 089f1ab..1d9b762 100644 --- a/docs/_sources/configuration_file.rst.txt +++ b/docs/_sources/configuration_file.rst.txt @@ -40,7 +40,7 @@ The following input lines are: initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] - hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) + ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface Here we first select the physical model and the corresponding template. To add additional models (e.g., blackoil), one could look at the diff --git a/docs/configuration_file.html b/docs/configuration_file.html index 6df4fab..db3c091 100644 --- a/docs/configuration_file.html +++ b/docs/configuration_file.html @@ -114,7 +114,7 @@

Reservoir-related parameters15initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) 16pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) 17perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] -18hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +18ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) 19zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface diff --git a/docs/genindex.html b/docs/genindex.html index 7557b97..1ad7ca2 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -90,6 +90,7 @@

Index

|
G | H | I + | L | M | N | O @@ -166,10 +167,12 @@

C

  • cell_size() (in module pyopmnearwell.utils.formulas)
  • -
  • co2brinepvt() (in module pyopmnearwell.utils.formulas) +
  • check_cmdargs() (in module pyopmnearwell.core.pyopmnearwell)
  • +

    L

    + + +
    +

    M

      diff --git a/docs/objects.inv b/docs/objects.inv index fe3d848..de412f8 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/pyopmnearwell.core.html b/docs/pyopmnearwell.core.html index 5487f78..4ea8fc7 100644 --- a/docs/pyopmnearwell.core.html +++ b/docs/pyopmnearwell.core.html @@ -89,6 +89,8 @@

      Submodules
      • pyopmnearwell.core.pyopmnearwell module
      • diff --git a/docs/pyopmnearwell.core.pyopmnearwell.html b/docs/pyopmnearwell.core.pyopmnearwell.html index eb87962..688a485 100644 --- a/docs/pyopmnearwell.core.pyopmnearwell.html +++ b/docs/pyopmnearwell.core.pyopmnearwell.html @@ -86,9 +86,30 @@

        pyopmnearwell.core.pyopmnearwell module

        Main script for pyopmnearwell

        +
        +
        +pyopmnearwell.core.pyopmnearwell.check_cmdargs(cmdargs: Namespace) None
        +

        Validate command-line arguments.

        +

        The checks cover the input configuration file and output folder.

        +
        +
        Parameters:
        +

        cmdargs – Parsed arguments returned by argparse.

        +
        +
        Raises:
        +

        SystemExit – If an argument is invalid.

        +
        +
        +
        + +
        +
        +pyopmnearwell.core.pyopmnearwell.load_parser(argv: list[str] | None) Namespace
        +

        CLI arguments

        +
        +
        -pyopmnearwell.core.pyopmnearwell.main(argv=None) None
        +pyopmnearwell.core.pyopmnearwell.main(argv: list[str] | None = None) None

        Main function for the pyopmnearwell executable

        diff --git a/docs/pyopmnearwell.html b/docs/pyopmnearwell.html index 67fa5de..fd70012 100644 --- a/docs/pyopmnearwell.html +++ b/docs/pyopmnearwell.html @@ -90,6 +90,8 @@

        Subpackagespyopmnearwell.core package
        • Submodules
          • pyopmnearwell.core.pyopmnearwell module
          • diff --git a/docs/searchindex.js b/docs/searchindex.js index 615a221..0db1cfe 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"About pyopmnearwell":[[0,null]],"Additional parameters":[[2,"additional-parameters"]],"Binary packages":[[6,"binary-packages"]],"Brew formula for macOS":[[6,"brew-formula-for-macos"]],"CCUS (machine learning)":[[4,"ccus-machine-learning"]],"CO2 cyclic injection":[[4,"co2-cyclic-injection"]],"Concept":[[7,"concept"]],"Configuration file":[[2,null]],"Contribute to the software":[[3,"contribute-to-the-software"]],"Contributing":[[3,null]],"Examples":[[4,null]],"Ground Rules":[[3,"ground-rules"]],"Hello world":[[4,"hello-world"]],"Indices and tables":[[5,"indices-and-tables"]],"Installation":[[6,null]],"Introduction":[[7,null]],"Module contents":[[10,"module-pyopmnearwell"],[11,"module-pyopmnearwell.core"],[13,"module-pyopmnearwell.ml"],[23,"module-pyopmnearwell.utils"]],"OPM Flow":[[6,"opm-flow"]],"Output folder":[[9,null]],"Overview":[[7,"overview"]],"Publications":[[4,"publications"]],"Python package":[[6,"python-package"]],"Related":[[31,null]],"Reporting issues or problems":[[3,"reporting-issues-or-problems"]],"Reservoir-related parameters":[[2,"reservoir-related-parameters"]],"Rock-related parameters":[[2,"rock-related-parameters"]],"Seek support":[[3,"seek-support"]],"Source build in Linux/Windows":[[6,"source-build-in-linux-windows"]],"Source build in macOS":[[6,"source-build-in-macos"]],"Submodules":[[11,"submodules"],[13,"submodules"],[23,"submodules"]],"Subpackages":[[10,"subpackages"]],"Welcome to pyopmnearwell\u2019s documentation!":[[5,null]],"Well-related parameters":[[2,"well-related-parameters"]],"ad-micp":[[31,"ad-micp"]],"expreccs":[[31,"expreccs"]],"plopm":[[31,"plopm"]],"pofff":[[31,"pofff"]],"pycopm":[[31,"pycopm"]],"pymm":[[31,"pymm"]],"pyopmnearwell":[[1,"pyopmnearwell"],[8,null]],"pyopmnearwell Python API":[[1,null]],"pyopmnearwell package":[[10,null]],"pyopmnearwell.core package":[[11,null]],"pyopmnearwell.core.pyopmnearwell module":[[12,null]],"pyopmnearwell.ml package":[[13,null]],"pyopmnearwell.ml.analysis module":[[14,null]],"pyopmnearwell.ml.ensemble module":[[15,null]],"pyopmnearwell.ml.integration module":[[16,null]],"pyopmnearwell.ml.kerasify module":[[17,null]],"pyopmnearwell.ml.nn module":[[18,null]],"pyopmnearwell.ml.resdata_dataset module":[[19,null]],"pyopmnearwell.ml.scaler_layers module":[[20,null]],"pyopmnearwell.ml.upscale module":[[21,null]],"pyopmnearwell.ml.utils module":[[22,null]],"pyopmnearwell.utils package":[[23,null]],"pyopmnearwell.utils.formulas module":[[24,null]],"pyopmnearwell.utils.inputvalues module":[[25,null]],"pyopmnearwell.utils.mako module":[[26,null]],"pyopmnearwell.utils.plotting module":[[27,null]],"pyopmnearwell.utils.runs module":[[28,null]],"pyopmnearwell.utils.units module":[[29,null]],"pyopmnearwell.utils.writefile module":[[30,null]],"pyopmspe11":[[31,"pyopmspe11"]]},"docnames":["about","api","configuration_file","contributing","examples","index","installation","introduction","modules","output_folder","pyopmnearwell","pyopmnearwell.core","pyopmnearwell.core.pyopmnearwell","pyopmnearwell.ml","pyopmnearwell.ml.analysis","pyopmnearwell.ml.ensemble","pyopmnearwell.ml.integration","pyopmnearwell.ml.kerasify","pyopmnearwell.ml.nn","pyopmnearwell.ml.resdata_dataset","pyopmnearwell.ml.scaler_layers","pyopmnearwell.ml.upscale","pyopmnearwell.ml.utils","pyopmnearwell.utils","pyopmnearwell.utils.formulas","pyopmnearwell.utils.inputvalues","pyopmnearwell.utils.mako","pyopmnearwell.utils.plotting","pyopmnearwell.utils.runs","pyopmnearwell.utils.units","pyopmnearwell.utils.writefile","related"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["about.rst","api.rst","configuration_file.rst","contributing.rst","examples.rst","index.rst","installation.rst","introduction.rst","modules.rst","output_folder.rst","pyopmnearwell.rst","pyopmnearwell.core.rst","pyopmnearwell.core.pyopmnearwell.rst","pyopmnearwell.ml.rst","pyopmnearwell.ml.analysis.rst","pyopmnearwell.ml.ensemble.rst","pyopmnearwell.ml.integration.rst","pyopmnearwell.ml.kerasify.rst","pyopmnearwell.ml.nn.rst","pyopmnearwell.ml.resdata_dataset.rst","pyopmnearwell.ml.scaler_layers.rst","pyopmnearwell.ml.upscale.rst","pyopmnearwell.ml.utils.rst","pyopmnearwell.utils.rst","pyopmnearwell.utils.formulas.rst","pyopmnearwell.utils.inputvalues.rst","pyopmnearwell.utils.mako.rst","pyopmnearwell.utils.plotting.rst","pyopmnearwell.utils.runs.rst","pyopmnearwell.utils.units.rst","pyopmnearwell.utils.writefile.rst","related.rst"],"indexentries":{},"objects":{"":[[10,0,0,"-","pyopmnearwell"]],"pyopmnearwell":[[11,0,0,"-","core"],[13,0,0,"-","ml"],[23,0,0,"-","utils"]],"pyopmnearwell.core":[[12,0,0,"-","pyopmnearwell"]],"pyopmnearwell.core.pyopmnearwell":[[12,1,1,"","main"]],"pyopmnearwell.ml":[[14,0,0,"-","analysis"],[15,0,0,"-","ensemble"],[16,0,0,"-","integration"],[17,0,0,"-","kerasify"],[18,0,0,"-","nn"],[19,0,0,"-","resdata_dataset"],[20,0,0,"-","scaler_layers"],[21,0,0,"-","upscale"],[22,0,0,"-","utils"]],"pyopmnearwell.ml.analysis":[[14,1,1,"","plot_analysis"],[14,1,1,"","sensitivity_analysis"]],"pyopmnearwell.ml.ensemble":[[15,1,1,"","calculate_WI"],[15,1,1,"","calculate_radii"],[15,1,1,"","create_ensemble"],[15,1,1,"","extract_features"],[15,1,1,"","get_flags"],[15,1,1,"","integrate_fine_scale_value"],[15,1,1,"","memory_efficient_sample"],[15,1,1,"","run_ensemble"],[15,1,1,"","setup_ensemble"],[15,1,1,"","store_dataset"]],"pyopmnearwell.ml.integration":[[16,1,1,"","recompile_flow"],[16,1,1,"","run_integration"]],"pyopmnearwell.ml.kerasify":[[17,1,1,"","export_model"],[17,1,1,"","write_convolution2d"],[17,1,1,"","write_dense"],[17,1,1,"","write_floats"],[17,1,1,"","write_lstm"]],"pyopmnearwell.ml.nn":[[18,2,1,"","ArrayLike"],[18,1,1,"","build_model"],[18,1,1,"","get_FCNN"],[18,1,1,"","get_GRU"],[18,1,1,"","get_LSTM"],[18,1,1,"","get_RNN"],[18,1,1,"","handle_zeros_in_scale"],[18,1,1,"","save_tune_results"],[18,1,1,"","scale_and_evaluate"],[18,1,1,"","scale_and_prepare_dataset"],[18,1,1,"","train"],[18,1,1,"","tune"]],"pyopmnearwell.ml.resdata_dataset":[[19,3,1,"","ResDataSet"],[19,1,1,"","main"]],"pyopmnearwell.ml.resdata_dataset.ResDataSet":[[19,4,1,"","ResdataFile_to_datapoint"],[19,5,1,"","features"],[19,4,1,"","on_epoch_end"],[19,4,1,"","read_data"],[19,5,1,"","targets"]],"pyopmnearwell.ml.scaler_layers":[[20,3,1,"","MinMaxScalerLayer"],[20,3,1,"","MinMaxUnScalerLayer"],[20,3,1,"","ScalerLayer"]],"pyopmnearwell.ml.scaler_layers.MinMaxScalerLayer":[[20,4,1,"","call"],[20,4,1,"","compute_output_shape"],[20,4,1,"","from_config"],[20,4,1,"","get_config"]],"pyopmnearwell.ml.scaler_layers.MinMaxUnScalerLayer":[[20,4,1,"","call"],[20,4,1,"","compute_output_shape"],[20,4,1,"","from_config"],[20,4,1,"","get_config"]],"pyopmnearwell.ml.scaler_layers.ScalerLayer":[[20,4,1,"","_adapt"],[20,4,1,"","adapt"],[20,4,1,"","build"],[20,6,1,"","data_max"],[20,6,1,"","data_min"],[20,6,1,"","feature_range"],[20,4,1,"","get_weights"],[20,6,1,"","is_adapted"],[20,5,1,"","min"],[20,5,1,"","scalar"],[20,4,1,"","set_weights"]],"pyopmnearwell.ml.upscale":[[21,3,1,"","BaseUpscaler"],[21,3,1,"","Upscaler"]],"pyopmnearwell.ml.upscale.BaseUpscaler":[[21,5,1,"","_abc_impl"],[21,4,1,"","create_ds"],[21,4,1,"","get_analytical_PI"],[21,4,1,"","get_analytical_WI"],[21,4,1,"","get_data_WI"],[21,4,1,"","get_homogeneous_values"],[21,4,1,"","get_horizontically_integrated_values"],[21,4,1,"","get_radii"],[21,4,1,"","get_timesteps"],[21,4,1,"","get_vertically_averaged_values"],[21,4,1,"","reduce_data_size"]],"pyopmnearwell.ml.upscale.Upscaler":[[21,5,1,"","_abc_impl"],[21,5,1,"","_is_protocol"],[21,6,1,"","angle"],[21,6,1,"","num_layers"],[21,6,1,"","num_timesteps"],[21,6,1,"","num_xcells"],[21,6,1,"","num_zcells"],[21,6,1,"","single_feature_shape"]],"pyopmnearwell.ml.utils":[[22,1,1,"","enable_determinism"]],"pyopmnearwell.utils":[[24,0,0,"-","formulas"],[25,0,0,"-","inputvalues"],[26,0,0,"-","mako"],[27,0,0,"-","plotting"],[28,0,0,"-","runs"],[29,0,0,"-","units"],[30,0,0,"-","writefile"]],"pyopmnearwell.utils.formulas":[[24,1,1,"","area_squaredcircle"],[24,1,1,"","cell_size"],[24,1,1,"","co2brinepvt"],[24,1,1,"","data_WI"],[24,1,1,"","equivalent_well_radius"],[24,1,1,"","hydrostatic_fluid"],[24,1,1,"","hydrostatic_gas"],[24,1,1,"","peaceman_WI"],[24,1,1,"","peaceman_matrix_WI"],[24,1,1,"","pyopmnearwell_correction"],[24,1,1,"","two_phase_peaceman_WI"]],"pyopmnearwell.utils.inputvalues":[[25,1,1,"","process_input"],[25,1,1,"","process_tuning"]],"pyopmnearwell.utils.mako":[[26,1,1,"","fill_template"]],"pyopmnearwell.utils.plotting":[[27,1,1,"","save_fig_and_data"]],"pyopmnearwell.utils.runs":[[28,1,1,"","simulations"]],"pyopmnearwell.utils.units":[[29,7,1,"","BOLTZMANN_CONSTANT"],[29,7,1,"","GRAVITATIONAL_ACCELERATION"],[29,7,1,"","UNIVERSAL_GAS_CONSTANT"]],"pyopmnearwell.utils.writefile":[[30,1,1,"","compact_format"],[30,1,1,"","create_3dgrid"],[30,1,1,"","d3_grids"],[30,1,1,"","generate_fluxnum"],[30,1,1,"","generate_geology"],[30,1,1,"","generate_multpv"],[30,1,1,"","generate_pcfact"],[30,1,1,"","generate_permfact"],[30,1,1,"","generate_permfact_pcfact"],[30,1,1,"","generate_saturation_functions_format_1"],[30,1,1,"","generate_saturation_functions_format_2"],[30,1,1,"","generate_saturation_functions_gsf_wsf"],[30,1,1,"","get_2dgrid"],[30,1,1,"","get_spaces"],[30,1,1,"","handle_core"],[30,1,1,"","manage_grid"],[30,1,1,"","manage_sections"],[30,1,1,"","manage_tables"],[30,1,1,"","reservoir_files"],[30,1,1,"","round_like_e"]]},"objnames":{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","type","Python type alias"],"3":["py","class","Python class"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"],"6":["py","property","Python property"],"7":["py","data","Python data"]},"objtypes":{"0":"py:module","1":"py:function","2":"py:type","3":"py:class","4":"py:method","5":"py:attribute","6":"py:property","7":"py:data"},"terms":{"0f":4,"11th":2,"1e":2,"1e10":2,"2d":[21,24,30],"3060e":2,"380649e":29,"3871e":2,"3d":[2,15,24,30],"5e":2,"6120e":2,"8655e":2,"A":[15,18,19,24,26,31],"AND":19,"About":5,"After":19,"All":[14,15,16,21,30],"An":[3,4,15,31],"As":[2,21,24],"Below":31,"By":15,"Each":16,"For":[0,2,3,4,6,14,20,30],"Has":15,"Here":2,"If":[2,4,6,14,15,16,18,19,20,21,24,26,30],"In":[2,3,4,7,15,21,24],"Is":15,"It":[14,15,20],"Most":6,"Not":[21,24],"So":20,"Some":[15,19],"The":[0,1,2,3,4,6,7,9,14,15,16,18,19,21,24,26,27],"Then":[2,4,6,9],"There":[4,6],"These":4,"This":[7,15,18,19,20,21,24],"To":[2,4,6,19,30],"We":[2,3],"When":26,"While":6,"You":[4,6],"__description__":21,"__init__":21,"_abc":21,"_abc_data":21,"_abc_impl":[13,21],"_adapt":[13,20],"_build":3,"_description_":[15,19,20,21,24],"_extended_summary_":21,"_is_protocol":[13,21],"_summary_":21,"_type_":18,"abc":21,"abl":[4,6],"abov":2,"abstract":21,"abstractmethod":21,"acceler":24,"accept":3,"accord":20,"account":24,"accur":24,"achiev":4,"across":15,"action":[3,6],"activ":[2,6,18],"ad":5,"adapt":[13,20],"add":[2,3,4,6,9,14,20,30],"addit":[3,4,5,7,14,15,21],"adim":2,"adjust":24,"afterward":19,"align":30,"allow":6,"along":[7,14,15,21],"also":[3,4,6],"altern":3,"altitud":[15,24],"alway":15,"anaconda":6,"analys":3,"analysi":[3,10,13],"analyz":14,"angl":[13,15,21,24],"ani":[3,15,16,24,30],"anim":4,"annot":21,"anoth":6,"answer":3,"apertur":2,"api":5,"appli":20,"approach":[0,3],"approx":24,"apt":6,"architectur":[16,18],"area":[21,24],"area_squaredcircl":[10,23,24],"arg":[15,19,20,21],"argument":[7,15,19,21],"argv":12,"around":7,"array":[14,15,17,18,21],"arraylik":[10,13,18,20,24],"assertionerror":15,"assum":[14,15,21],"atm":19,"attribut":21,"auto":3,"automat":21,"avail":[2,3,4,6,7],"averag":[15,21],"avoid":[2,15],"axi":[14,15,21],"b":24,"back":18,"bar":[2,15],"base":[2,7,19,20,21,31],"basetemp":3,"baseupscal":[10,13,21],"bash":4,"batch":18,"becaus":21,"befor":[3,15,16,18,21],"behavior":[18,22],"benchmark":31,"best":18,"bin":[2,6],"binari":[3,4,5],"biofilm":2,"black":3,"blackoil":2,"blob":17,"block":[15,21,24],"block_sidelength":15,"boltzmann_const":[10,23,29],"bool":[14,15,18,19,21,30],"bottom":[2,24],"boundari":[2,7],"branch":6,"brew":[4,5],"broadcast":15,"bs":18,"build":[2,3,5,13,18,20],"build_model":[10,13,18],"build_opm_mpi":6,"built":[6,18],"bwr":4,"c":[2,4,15],"ca":24,"cake":[2,21,24,30],"calcit":31,"calcul":[15,20,21,24],"calculate_radii":[10,13,15],"calculate_wi":[10,13,15,21],"call":[4,13,17,20,24],"can":[2,3,4,6,9,16,18,19,21,24,26],"capabl":22,"capillari":2,"care":21,"carlson":2,"cartesian":[2,15,21],"cartesian2d":2,"case":[14,21],"ccus":5,"cd":6,"cell":[2,7,15,16,21,24],"cell_boundary_radii":21,"cell_center_radii":21,"cell_height":21,"cell_siz":[10,23,24],"cemrac":17,"center":[0,24],"cf":24,"cfd":31,"cformat":4,"challeng":0,"chang":[2,3,14,19],"chappui":24,"check":[3,6,16,21,31],"checker":3,"checkout":6,"chemic":29,"choos":7,"chosen":7,"chunk":17,"ci":[3,6],"ci_pycopm_maco":3,"circl":24,"class":[19,20,21],"classmethod":20,"click":4,"clone":6,"cmake":6,"cnum":4,"co2":[2,5,24,31],"co2brinepvt":[10,23,24],"co2eor":[2,7],"co2stor":[2,4,7,30],"coars":21,"coarser":2,"code":[3,6,10],"collabor":3,"column":24,"com":[4,6,7,16,17,21],"combin":15,"command":[4,6],"commit":3,"common":[6,15,17],"compact_format":[10,23,30],"comparison":21,"compil":18,"complain":21,"complet":20,"complex":15,"comput":[15,24],"compute_output_shap":[13,20],"concept":5,"config":20,"configur":[1,4,5,7],"configuration_fil":[6,7],"connect":18,"consid":[2,4],"constain":1,"constant":[14,15,16,18,24,29],"contain":[3,14,15,16,18,19,24,26],"content":[1,3,5,8],"contribut":[0,5,6],"control":24,"convers":29,"convert":2,"convolution2d":17,"coord2d":2,"coord3d":2,"coordin":2,"copi":[3,6,17],"core":[1,2,8,10,30],"corner":30,"correct":[15,21,24],"correspond":[2,21],"cos":2,"cov":3,"cover":15,"cp":2,"cpg3d":2,"cplog":2,"creat":[1,3,6,15,19,30],"create_3dgrid":[10,23,30],"create_d":[13,21],"create_ensembl":[10,13,15],"csp":[2,31],"cssr":[0,4,6,7,16],"csv":[16,18],"current":[3,6,7],"current_directori":6,"cyclic":5,"d":[2,4,21],"d3_grid":[10,23,30],"data":[4,15,18,19,20,21,24,27],"data_gener":4,"data_max":[13,20],"data_max_":20,"data_min":[13,20],"data_min_":20,"data_wi":[10,23,24],"datapoint":14,"dataset":[15,18,19,21],"day":[2,21],"dcmake_build_typ":6,"dcmake_prefix_path":6,"deal":[15,16],"debug":26,"decay":18,"decid":16,"deck":[2,7,9,15,16,19,30],"dedic":6,"default":[2,7,14,15,16,18,19,20,21,22,24,26,30],"default_rng":22,"defin":[2,7],"definit":2,"degre":2,"delet":19,"delta_x":24,"dens":17,"densiti":24,"depend":[3,6,15,21],"deprec":[16,19],"depth":[2,18],"describ":[2,3,4,7],"descript":2,"determin":[15,22],"determinist":22,"dev":[3,6],"develop":[6,7],"diamet":2,"dic":[25,28,30],"dict":[15,16,26,30],"dictionari":[15,16,26,30],"differ":[2,4,7,9,14,15,16,18,19,29],"digit":30,"dimens":[14,15],"dimension":[15,20],"dir":2,"direct":[2,7,9,15,16],"directori":[3,15],"disabl":[20,21],"disk":17,"disregard":15,"disregard_first_xcel":21,"distanc":7,"distribut":15,"divid":21,"dmar":2,"doc":3,"docs_co2_cyclic_inject":4,"docs_hello_world":4,"docstr":21,"document":[2,3,4,6,7,9],"doe":[6,18,19,24],"doi":24,"domain":2,"done":[6,20,21],"download":6,"dpi":4,"driesner":24,"driven":21,"ds":19,"dsfile":18,"dtype":19,"due":24,"dure":4,"duse_mpi":6,"dwith_ndebug":6,"dxarray":30,"e":[2,3,4,6,7,9,15,18,21,24],"eaceman":24,"earli":18,"easili":[16,26],"ecl_fil":19,"ecl_keyword":15,"eclfil":19,"edg":6,"effect":2,"efficient_sampl":15,"egrid":7,"either":[6,19,24,26],"element":[2,20,21,24],"els":[6,15],"em":31,"email":3,"en":29,"enabl":[2,4,22],"enable_determin":[10,13,22],"end":[4,19],"ensembl":[10,13,18,19,21,22,30],"ensemble_path":15,"ensemble_s":15,"enterpris":6,"entri":2,"environ":[3,6],"epoch":[18,19],"equal":[2,14,15,21,24],"equidist":2,"equilibrium":24,"equival":[21,24],"equivalent_well_radius":[10,23,24],"error":[15,19,20,21,26,30],"etc":[7,21,24,30],"evalu":[2,18],"everi":15,"exampl":[2,5,7,16,19,24],"except":[2,15],"execut":[1,2,3,4,6,7,9,12],"executions_per_tri":18,"exist":18,"explain":2,"explan":[20,21],"explos":17,"exponenti":2,"export":[3,18],"export_model":[10,13,17],"exprecc":5,"extend":[2,3,7,16],"extra":2,"extract":[15,19,21],"extract_featur":[10,13,15],"f":4,"f0nzie":14,"faci":2,"factor":[2,15,24],"fail":15,"failed_indic":15,"fals":[15,18,19,21],"familiar":3,"far":[20,30],"faster":15,"favor":19,"fcnn":18,"featur":[0,13,14,15,16,18,19,20,21],"feature_array":15,"feature_index":21,"feature_nam":[14,18],"feature_rang":[13,18,20],"feature_range_":20,"fi":6,"fidel":15,"fig":27,"figur":[4,27],"file":[1,3,4,5,6,7,9,15,16,17,18,19,25,26,27,30],"file_format":19,"filenam":[17,26],"filenotfounderror":18,"fill":[16,26],"fill_templ":[10,23,26],"final":2,"fine":[15,21,24],"finit":24,"finnest":2,"first":[2,14,15,18,21,30],"fit":[18,20],"fix":[3,14,15,21,24],"flag":[2,4,9,15],"flexibl":7,"float":[14,15,17,18,21,24,29],"float32":19,"float64":24,"flow":[1,2,3,4,5,7,9,15,21,28,30,31],"flow_gaswater_dissolution_diffus":16,"flow_maco":3,"flow_path":15,"fluid":[2,7,24],"fluidflow":31,"fluidmatrixinteract":17,"fluxnum":30,"foam":[2,7],"folder":[1,2,3,4,5,6,7,15,19,30],"follow":[2,4,6,7,9,15,20,21],"fork":[0,3],"form":[19,21],"format":[3,17,30],"former":19,"formula":[5,10,15,23],"found":[4,15],"four":2,"frac":[15,24],"fractalmanifold":17,"fraction":[2,15],"framework":[7,31],"from_config":[13,20],"from_gener":19,"full":[2,15,21,22],"fulli":[15,18],"funciton":3,"function":[2,6,7,12,15,16,18,19,20,21,22,24,25,27,28,30],"fund":0,"furthermor":21,"futur":21,"g":[2,3,4,6,7,9,15,18,21,24],"gas":[4,7,24],"gas_const":29,"gb":[15,24],"generat":[2,3,4,7,9,15,19,20,22,30,31],"generate_fluxnum":[10,23,30],"generate_geolog":[10,23,30],"generate_multpv":[10,23,30],"generate_pcfact":[10,23,30],"generate_permfact":[10,23,30],"generate_permfact_pcfact":[10,23,30],"generate_saturation_functions_format_1":[10,23,30],"generate_saturation_functions_format_2":[10,23,30],"generate_saturation_functions_gsf_wsf":[10,23,30],"geographi":30,"geolog":[1,15,30,31],"geometri":[2,30],"geotherm":24,"get":[2,3,6,18,21],"get_2dgrid":[10,23,30],"get_analytical_pi":[13,21],"get_analytical_wi":[13,21],"get_config":[13,20],"get_data_wi":[13,21],"get_fcnn":[10,13,18],"get_flag":[10,13,15],"get_gru":[10,13,18],"get_homogeneous_valu":[13,21],"get_horizontically_integrated_valu":[13,21],"get_lstm":[10,13,18],"get_radii":[13,21],"get_rnn":[10,13,18],"get_spac":[10,23,30],"get_timestep":[13,21],"get_vertically_averaged_valu":[13,21],"get_weight":[13,20],"gif":[4,7,31],"gigatonn":0,"git":[4,6],"github":[2,3,4,6,7,14,16,17],"give":19,"given":[2,7,15,18,19,24,26],"global":[22,30],"glorot_norm":18,"glorot_uniform":18,"gravitational_acceler":[10,23,24,29],"graviti":24,"grid":[2,4,6,7,15,21,24,30],"gridfil":15,"grom":15,"ground":5,"gsf":30,"h":24,"h2biofilm":2,"h2ch4":7,"h2core":2,"h2o":4,"h2store":[2,7],"handl":30,"handle_cor":[10,23,30],"handle_zeros_in_scal":[10,13,18],"hat":6,"height":[21,24],"hello":5,"hello_world":4,"help":[2,3,6],"helper":[26,27],"henc":[20,21],"heterogen":7,"hidden":18,"hidden_dim":18,"high":15,"higher":[2,15,20],"highlight":14,"histori":31,"hole":24,"homebrew":6,"homogen":[14,21],"horizont":21,"host":7,"howev":[4,16,21,24],"hp":18,"hpc":0,"hpp":16,"html":[3,14,20],"https":[4,6,7,14,16,17,20,21,29],"hydrogen":2,"hydrostat":24,"hydrostatic_fluid":[10,23,24],"hydrostatic_ga":[10,23,24],"hyperparamet":18,"hysteresi":2,"ideal":24,"ident":15,"ignor":[2,3,22],"imag":31,"imbibit":2,"impact":4,"implement":[7,16,21],"import":3,"improv":[18,30],"in_fil":25,"inc":[15,30],"inc_fold":30,"includ":[6,18,30],"increas":21,"index":[5,15,24],"indic":15,"individu":[15,20],"induc":31,"init":7,"init_keyword":15,"initi":[2,15,18,20],"initialphas":2,"inj":2,"inj_rate_index":21,"inject":[2,5,7,15,21,24],"injection_r":15,"injector":24,"inlet":2,"inner":15,"input":[1,2,4,7,14,15,16,18,19,20,21,25,30],"input_kw":19,"input_shap":20,"inputvalu":[10,23],"insid":[6,7,15,21,24],"inspir":14,"instal":[3,4,5,16,24],"instanc":21,"instanti":19,"instead":[2,7,15,21,24],"instruct":6,"int":[14,15,16,18,20,21,22],"integ":15,"integr":[10,13,15,21],"integrate_fine_scale_valu":[10,13,15],"intend":30,"interest":[4,6,24,31],"interim":6,"intermitt":4,"internal":[18,21],"interval":[4,15],"introduc":20,"introduct":5,"invalid":[16,18],"invers":20,"io":14,"is_adapt":[13,20],"issu":[0,4,5],"iter":2,"j":[24,29],"j5":6,"k":[24,29],"k_":24,"k_h":24,"k_r1":24,"k_r2":24,"keep":[15,30],"keep_result_fil":15,"kept":14,"kera":[14,17,18,20],"keras_tun":18,"kerasifi":[10,13,18],"kernel_initi":18,"key":[15,16],"keyerror":19,"keyword":[2,15,19],"keyword_sc":15,"kg":[2,24],"killough":2,"krn":2,"krw":2,"kwarg":[14,15,18,20,21,30],"kxi":2,"kz":2,"l":6,"lami":24,"larg":17,"larger":15,"last":[2,15,18],"latter":19,"law":24,"layer":[2,7,15,16,17,18,20,21],"leakag":31,"learn":[3,5,6,16,18,20],"least":[15,16],"left":[2,24],"legend":14,"len":19,"len_vari":15,"length":[2,7,15],"lie":24,"ligther":6,"limit":[2,7],"limmit":2,"line":[2,3,6,14,15,18,19],"linear":24,"link":[4,6],"lint":[6,20],"linux":[4,5],"list":[7,14,15,16,18,19,20,21,30],"liter":[14,18,19,24],"ln":24,"load":[18,26],"local":[3,16,22],"local_feature_nam":16,"locat":[1,2],"log":[15,18],"look":[2,3],"loop":[4,16],"loss":18,"loss_func":18,"low":15,"lower":15,"lr":18,"lr_patienc":18,"lr_tune":18,"lstm":17,"m":[2,4,6,7,9,21,24,29],"machin":[2,3,5,6,16],"machine_learning_compil":14,"maco":[3,4,5],"macport":6,"main":[1,3,4,10,11,12,13,14,17,19],"main_plot":14,"maintain":3,"make":[3,6,21,22],"mako":[2,10,15,23,30],"makofil":[15,16],"mamba":6,"manag":6,"manage_grid":[10,23,30],"manage_sect":[10,23,30],"manage_t":[10,23,30],"mani":[2,20],"mantain":3,"manual":[2,19],"mark":19,"mass":[2,24],"master":6,"match":31,"materi":17,"math":[15,24],"mathbf":24,"mathemat":24,"matplotlib":27,"max":[2,14,15,20],"max_trial":18,"maximum":[2,15],"may":15,"md":[2,21],"meanabsolutepercentageerror":18,"meansquaredlogarithmicerror":18,"meanwhil":14,"measur":14,"member":[15,21,30],"memori":[15,17],"memory_efficient_sampl":[10,13,15],"mention":30,"merg":3,"mesh":15,"method":[18,19,21,24],"micp":5,"microbi":31,"microsystem":31,"might":[3,6,15,16,19,20,31],"min":[2,13,14,15,20],"miniforg":6,"minmax":20,"minmaxsc":[18,20],"minmaxscal":[18,20],"minmaxscalerlay":[10,13,20],"minmaxunscalerlay":[10,13,20],"miss":[3,21],"mixin":20,"mkdir":6,"ml":[1,4,6,8,10],"ml_near_wel":[6,16],"ml_tool":17,"mode":[14,15],"model":[1,2,4,7,14,16,17,18,24,30,31],"model_input":18,"modifi":[6,9,18],"modul":[1,5,8,31],"mol":[24,29],"molecular":24,"molecule_mass":24,"moment":[16,20],"mpi":6,"mpirun":2,"mse":18,"mu":24,"mu_1":24,"mu_2":24,"multipl":21,"multipli":2,"multpv":30,"must":[15,21],"mypi":[3,21],"n":[3,30],"name":[7,14,15,16,18],"name_of_script":4,"ndarray":[14,15,18,21,24,30],"near":[3,4,6,7,18,21],"nearwel":15,"necessari":[2,30],"need":[3,4,6,15,16,19,20,21,24,30],"negat":24,"network":[14,16,18],"neural":[14,16,18],"neuron":18,"new":[0,2,3,15,30],"newton":2,"nice":[3,6],"ninput":18,"nkrn":2,"nkrw":2,"nn":[10,13],"no_disgas_no_diffus":30,"non":2,"none":[12,14,15,16,18,20,22,26,27],"normal":18,"notat":30,"note":[14,15,16,18,19,21,22],"noutput":18,"now":[2,21],"np":[2,14,15,18,21,22,24],"npen":2,"npoint":[2,15],"num_cel":[15,19],"num_dim":15,"num_ensemble_run":21,"num_featur":[15,21],"num_fil":19,"num_input":14,"num_lay":[13,21],"num_memb":15,"num_report_step":[15,19],"num_timestep":[13,21],"num_vari":15,"num_x_cel":15,"num_xcel":[13,21],"num_zcel":[13,21],"number":[0,2,7,14,15,16,18],"numer":24,"numpi":[15,22],"o":[4,7],"object":[18,19,21],"on_epoch_end":[13,19],"onc":16,"one":[2,4,7,9,15,19,21],"onli":[4,6,7,15,16,18,20,21,24,30],"onlin":6,"open":[4,6,31],"opm":[1,2,3,4,5,7,9,15,16,17,19,21,24,30,31],"opm_path":16,"option":[2,7,14,15,16,18,21,22,24,26,30],"order":[15,20],"org":[6,20,29],"origin":[18,24],"outer":15,"outlet":2,"output":[2,4,5,7,14,16,18,20],"output_signatur":19,"overload":15,"overridden":21,"overview":5,"p":24,"p_":[15,24],"p_0":24,"p_gb":24,"p_w":[15,24],"pa":24,"pack":17,"packag":[0,1,3,4,5,7,8],"page":[3,5],"paper":4,"parallel":16,"paramet":[4,5,14,15,16,18,19,20,21,22,24,26,27,30],"paraview":4,"pars":19,"part":[16,30],"partial":15,"particular":15,"partit":2,"pass":[15,18,19,24,26],"path":[2,3,14,15,16,18,19,21,24,26,27,30],"pathlib":[14,15,16,18,21,24,26,27,30],"patienc":18,"pcap":2,"pcfact":30,"peaceman":24,"peaceman_matrix_wi":[10,23,24],"peaceman_wi":[10,23,24],"pen":2,"per":[2,16,21],"perfor":2,"perform":14,"period":2,"perm":[2,15],"permeabilti":24,"permeabl":[15,21,24],"permfact":30,"phase":[2,24],"phase_properti":24,"phi":2,"physic":[2,7,29],"pi":[2,15,24],"pickl":27,"pip":[3,4,6],"pipe":2,"place":21,"platform":6,"pleas":[0,3],"plopm":[4,5,6,7,9],"plot":[7,10,14,23],"plot_analysi":[10,13,14],"png":4,"pngs":[7,31],"pofff":5,"point":[4,15,24,30],"pointless":21,"pore":2,"poro":2,"possibl":[3,15,20,21,30],"postprocess":9,"practic":2,"precipit":[4,31],"prefer":3,"preprocess":[9,18,20,25],"prerequisit":6,"pressur":[2,4,7,15,21,24],"pressure_index":21,"prevent":17,"previous":[2,3,6,7],"print":[2,7],"problem":5,"proceed":2,"process":[1,17,25],"process_input":[10,23,25],"process_tun":[10,23,25],"produc":[2,24],"product":[4,15,24],"project":[0,6,31],"properti":[2,7,20,21,24],"protocol":21,"provid":[15,18,19,20,21,24,29],"prs":3,"ptwo":24,"public":[5,7],"publish":4,"pull":[0,3],"push":3,"pushd":3,"pv":2,"pvmult":2,"pvt":7,"pwd":6,"py":17,"py312":3,"pycopm":[3,5,6],"pylint":[3,20,21],"pymm":5,"pyopmnearwel":[2,3,4,6,7,9],"pyopmnearwell_correct":[10,23,24],"pyopmspe11":5,"pyplot":27,"pytest":3,"python":[2,3,5,21,22,31],"python3":6,"q":[15,24],"quadrat":24,"quantiti":[15,24],"quick":31,"r":[3,6,24],"r_":24,"r_e":24,"r_w":24,"radial":[2,4,15,21,24],"radial_grid":24,"radial_valu":15,"radii":[15,21,24],"radii_fil":21,"radius":[15,24],"raidal":15,"rais":[0,3,15,16,18,19,20,21,24,26],"random":[15,18,21,22],"random_norm":14,"random_uniform":14,"rang":[7,15,18],"rate":[2,4,15,18,21,24],"ratio":24,"read":4,"read_data":[13,19],"read_data_on_init":19,"recalc_":30,"recalc_grid":[15,30],"recalc_sect":[15,30],"recalc_t":[15,30],"recalcul":[15,30],"recent":6,"recompil":[16,18],"recompile_flow":[10,13,16],"recompile_model":18,"reconstruct":20,"record":[2,4],"recov":24,"recurr":18,"red":6,"reduc":[21,30],"reduce_data_s":[13,21],"refer":24,"reference_pressur":24,"refin":7,"region":[15,31],"reinject":2,"rel":2,"relat":[3,5,9,24,30],"relationship":2,"relax":2,"releas":[6,7],"relu":18,"remedi":31,"remov":[6,21],"render":[15,26],"replac":[3,16],"repo":[3,6,16],"report":[5,15],"repositori":[1,2,3,4,6],"request":[0,3],"requir":[3,6,15,30],"requiri":25,"resdata":19,"resdata_dataset":[10,13],"resdata_fil":19,"resdatafil":19,"resdatafile_to_datapoint":[13,19],"resdataset":[10,13,19],"reservoir":[5,7,24,31],"reservoir_fil":[10,15,23,30],"resinsight":[4,6,9],"resolution_1":14,"resolution_2":14,"resourc":[0,24],"respons":15,"result":[2,4,6,7,9,15,21,24],"retir":7,"return":[14,15,16,18,19,20,21,24,26,27,30],"return_outer_inn":15,"review":3,"rho":24,"rho_1":24,"rho_2":24,"right":[2,24],"rise":3,"rock":[5,7],"round_like_":[10,23,30],"routin":[7,17],"row":[16,18],"rst":2,"ruff":3,"rule":5,"run":[2,3,4,6,7,9,10,15,16,19,21,23,30],"run_ensembl":[10,13,15],"run_integr":[10,13,16],"runspec":[15,16],"runtim":21,"s":[3,4,18,24,26,29],"safu":2,"salt":4,"saltprec":[2,7],"sampl":[14,15,19],"sample_weight":18,"sand":2,"sat":2,"satur":[2,4,7,15,21,30],"save":[4,9,14,15,16,18,19,27],"save_fig_and_data":[10,23,27],"save_tune_result":[10,13,18],"saved_model":18,"savepath":[14,15,16,18],"scalar":[13,20],"scale":[15,16,18,20,21,24],"scale_and_evalu":[10,13,18],"scale_and_prepare_dataset":[10,13,18],"scaler":20,"scaler_lay":[10,13],"scalerlay":[10,13,20],"scalingsfil":[16,18],"schedul":[2,7],"scikit":20,"scott":24,"screen":4,"screenshot":9,"script":[1,2,3,4,6,12,26],"search":[5,18],"second":[2,4,14,21,30],"section":[2,4],"see":[2,3,4,6,9,20,21],"seed":[15,22],"seek":5,"seen":2,"select":[2,9,21],"self":[19,20,21],"send":3,"sensit":14,"sensitivity_analysi":[10,13,14],"seri":2,"serial":20,"set":[2,6,7,14,18,20,22,25],"set_weight":[13,20],"setup_ensembl":[10,13,15],"setuptool":6,"seven":[2,3],"sever":21,"sgas":4,"sgfn":30,"sgof":30,"sh":[4,6],"shall":19,"shape":[14,15,19,20,21],"short":2,"show":[2,4,9],"shown":2,"shuffl":[18,19],"shuffle_on_epoch_end":19,"shut":2,"side":[2,15,24],"sidelength":[15,24],"sigmoid":18,"signific":30,"similar":[21,24],"simmul":15,"simpli":6,"simplifi":7,"simul":[0,2,4,6,7,9,10,15,16,21,23,24,28,31],"simulation_length":21,"sinc":[2,21],"singl":[2,3,7,9,14],"single_feature_shap":[13,21],"site":31,"size":[2,15,16,18,21,24,30],"skip":6,"sklearn":[18,20],"sl":2,"smspec":15,"sni":2,"softwar":[0,5],"solut":[15,24],"soon":3,"sourc":[3,5,29,31],"sparsiti":21,"spe":2,"spe11":31,"specif":[6,7,14],"specifi":[15,16,18],"speed":2,"split":18,"sqare":24,"squar":[15,24],"squash":3,"src":[2,3],"stabl":20,"stackoverflow":21,"standardwel":16,"standardwell_impl":16,"standardwell_impl_templ":16,"standardwell_templ":16,"start":[4,15],"state":18,"statement":21,"static":3,"stencil":16,"stencil_s":16,"step":[2,3,6,15,21],"step_size_cel":15,"step_size_t":21,"step_size_tim":15,"step_size_x":21,"still":16,"stop":18,"storag":[0,2,31],"store":[15,19],"store_dataset":[10,13,15],"str":[14,15,16,18,19,24,26,27,30],"string":[2,21,26],"struct":17,"studi":[4,28,31],"subclass":21,"submodul":[1,8,10],"subpackag":[1,5,8],"subsurfac":0,"subsystem":6,"succed":6,"succeed":3,"suffic":21,"sum":21,"summari":9,"summary_keyword":15,"supercrit":24,"support":[2,5,6,7],"sure":[22,24],"surfac":2,"surface_dens":21,"sustain":0,"svg":27,"sw":2,"swfn":30,"swi":2,"system":3,"t":[4,15,21,24,26],"tabl":[7,15,30],"tag":6,"tailor":31,"take":[14,15,21,24],"taken":[14,15,21,30],"tanh":18,"tap":[4,6],"target":[3,13,15,18,19,21],"target_kw":19,"target_rang":18,"telescop":2,"temper":15,"temperatur":[2,7,21,24],"templat":[1,2,7,15,16,26,30],"tensor":[15,18,19,20],"tensor2d":2,"tensor3d":2,"tensord2d":2,"tensorflow":[3,6,15,18,19,20,22],"tensorspec":19,"term":3,"termin":[4,6],"test":[2,3,4,6,7,15,18,20],"test_output":[3,4],"test_split":18,"text":26,"tf":[18,19],"theta":2,"thick":[2,24],"third":14,"three":[2,20],"threshold":2,"thus":15,"time":[2,4,15,24],"timestep":21,"todo":[7,15,24],"toml":[2,4,6,7],"tool":[1,3,4,6,7,9,16,31],"top":[2,4],"total":15,"toward":2,"train":[10,13,18],"train_data":18,"train_split":18,"transform":[15,17,18,19,20],"treat":21,"tri":[3,4,6],"triangl":[15,24],"triangle_grid":[15,24],"triangular":24,"true":[2,4,14,15,18,19,21,30],"trust":[4,6],"tsmaxz":2,"tube":2,"tune":[2,10,13,18,25],"tuner":18,"tupl":[14,15,18,19,20,21],"turn":6,"tutori":[3,6],"two":[2,16,18,21],"two_phase_peaceman_wi":[10,23,24],"txt":[3,6],"type":[2,4,6,14,15,18,19,20,21,24,26,29,30,31],"ubuntu":[3,6],"uniform":15,"union":16,"unit":[10,15,18,21,23,24],"unitless":15,"universal":24,"universal_gas_const":[10,23,29],"unrst":[7,15,19],"unscal":20,"updat":[6,15],"upgrad":6,"upscal":[10,13],"use":[0,1,2,3,4,6,7,9,15,16,18,19,21,22,24,26,30,31],"user":[2,3,4,6,15],"usual":[15,21],"util":[1,2,8,10,13],"utilil":22,"utiliy":25,"v":[4,7,30],"v2026":6,"val":18,"val_data":18,"val_loss":18,"val_split":18,"valid":18,"valu":[2,7,14,15,16,18,19,20,21,24,25,30],"valueerror":[15,16,18,20,24],"var":26,"vari":[14,15],"variabl":[2,3,7,9,14,15,16,26,30],"variat":14,"various":15,"venv":6,"veri":17,"version":[3,6,10,21],"vertic":[15,16,21],"via":[6,7],"view":4,"virtual":6,"viscos":24,"visit":3,"visual":[4,6,9],"volum":[2,4,21,24],"vpyopmnearwel":6,"vtk":4,"vtks":31,"w":[7,24],"want":2,"warn":[7,20],"water":[2,4,24],"weight":[18,20],"welcom":[0,3],"well":[3,4,5,6,7,15,16,21,24],"well_radius":21,"well_typ":24,"wellbor":24,"went":15,"wet":2,"wheel":6,"whether":[14,15,18,30],"whole":7,"wi":[15,21,24],"wi_array":15,"width":2,"wiki":29,"wikipedia":29,"will":[3,6,15,21,30],"window":[4,5],"within":15,"without":[6,18,24],"work":[3,6,19,24,30],"world":5,"write":[1,2,6,7,17,30],"write_activ":17,"write_convolution2d":[10,13,17],"write_dens":[10,13,17],"write_float":[10,13,17],"write_lstm":[10,13,17],"writefil":[10,23],"wrong":15,"wsf":30,"wsl":6,"x":[2,7,14,15,21,30],"x_":24,"xcn":2,"xdim":2,"xfac":2,"xformat":4,"y":[2,4,6,7],"yapparova":24,"yet":[3,20,21],"yformat":4,"yml":[3,6],"z":[2,7],"zero":[15,24],"zxi":2},"titles":["About pyopmnearwell","pyopmnearwell Python API","Configuration file","Contributing","Examples","Welcome to pyopmnearwell\u2019s documentation!","Installation","Introduction","pyopmnearwell","Output folder","pyopmnearwell package","pyopmnearwell.core package","pyopmnearwell.core.pyopmnearwell module","pyopmnearwell.ml package","pyopmnearwell.ml.analysis module","pyopmnearwell.ml.ensemble module","pyopmnearwell.ml.integration module","pyopmnearwell.ml.kerasify module","pyopmnearwell.ml.nn module","pyopmnearwell.ml.resdata_dataset module","pyopmnearwell.ml.scaler_layers module","pyopmnearwell.ml.upscale module","pyopmnearwell.ml.utils module","pyopmnearwell.utils package","pyopmnearwell.utils.formulas module","pyopmnearwell.utils.inputvalues module","pyopmnearwell.utils.mako module","pyopmnearwell.utils.plotting module","pyopmnearwell.utils.runs module","pyopmnearwell.utils.units module","pyopmnearwell.utils.writefile module","Related"],"titleterms":{"About":0,"ad":31,"addit":2,"analysi":14,"api":1,"binari":6,"brew":6,"build":6,"ccus":4,"co2":4,"concept":7,"configur":2,"content":[10,11,13,23],"contribut":3,"core":[11,12],"cyclic":4,"document":5,"ensembl":15,"exampl":4,"exprecc":31,"file":2,"flow":6,"folder":9,"formula":[6,24],"ground":3,"hello":4,"indic":5,"inject":4,"inputvalu":25,"instal":6,"integr":16,"introduct":7,"issu":3,"kerasifi":17,"learn":4,"linux":6,"machin":4,"maco":6,"mako":26,"micp":31,"ml":[13,14,15,16,17,18,19,20,21,22],"modul":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"nn":18,"opm":6,"output":9,"overview":7,"packag":[6,10,11,13,23],"paramet":2,"plopm":31,"plot":27,"pofff":31,"problem":3,"public":4,"pycopm":31,"pymm":31,"pyopmnearwel":[0,1,5,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"pyopmspe11":31,"python":[1,6],"relat":[2,31],"report":3,"resdata_dataset":19,"reservoir":2,"rock":2,"rule":3,"run":28,"s":5,"scaler_lay":20,"seek":3,"softwar":3,"sourc":6,"submodul":[11,13,23],"subpackag":10,"support":3,"tabl":5,"unit":29,"upscal":21,"util":[22,23,24,25,26,27,28,29,30],"welcom":5,"well":2,"window":6,"world":4,"writefil":30}}) \ No newline at end of file +Search.setIndex({"alltitles":{"About pyopmnearwell":[[0,null]],"Additional parameters":[[2,"additional-parameters"]],"Binary packages":[[6,"binary-packages"]],"Brew formula for macOS":[[6,"brew-formula-for-macos"]],"CCUS (machine learning)":[[4,"ccus-machine-learning"]],"CO2 cyclic injection":[[4,"co2-cyclic-injection"]],"Concept":[[7,"concept"]],"Configuration file":[[2,null]],"Contribute to the software":[[3,"contribute-to-the-software"]],"Contributing":[[3,null]],"Examples":[[4,null]],"Ground Rules":[[3,"ground-rules"]],"Hello world":[[4,"hello-world"]],"Indices and tables":[[5,"indices-and-tables"]],"Installation":[[6,null]],"Introduction":[[7,null]],"Module contents":[[10,"module-pyopmnearwell"],[11,"module-pyopmnearwell.core"],[13,"module-pyopmnearwell.ml"],[23,"module-pyopmnearwell.utils"]],"OPM Flow":[[6,"opm-flow"]],"Output folder":[[9,null]],"Overview":[[7,"overview"]],"Publications":[[4,"publications"]],"Python package":[[6,"python-package"]],"Related":[[31,null]],"Reporting issues or problems":[[3,"reporting-issues-or-problems"]],"Reservoir-related parameters":[[2,"reservoir-related-parameters"]],"Rock-related parameters":[[2,"rock-related-parameters"]],"Seek support":[[3,"seek-support"]],"Source build in Linux/Windows":[[6,"source-build-in-linux-windows"]],"Source build in macOS":[[6,"source-build-in-macos"]],"Submodules":[[11,"submodules"],[13,"submodules"],[23,"submodules"]],"Subpackages":[[10,"subpackages"]],"Welcome to pyopmnearwell\u2019s documentation!":[[5,null]],"Well-related parameters":[[2,"well-related-parameters"]],"ad-micp":[[31,"ad-micp"]],"expreccs":[[31,"expreccs"]],"plopm":[[31,"plopm"]],"pofff":[[31,"pofff"]],"pycopm":[[31,"pycopm"]],"pymm":[[31,"pymm"]],"pyopmnearwell":[[1,"pyopmnearwell"],[8,null]],"pyopmnearwell Python API":[[1,null]],"pyopmnearwell package":[[10,null]],"pyopmnearwell.core package":[[11,null]],"pyopmnearwell.core.pyopmnearwell module":[[12,null]],"pyopmnearwell.ml package":[[13,null]],"pyopmnearwell.ml.analysis module":[[14,null]],"pyopmnearwell.ml.ensemble module":[[15,null]],"pyopmnearwell.ml.integration module":[[16,null]],"pyopmnearwell.ml.kerasify module":[[17,null]],"pyopmnearwell.ml.nn module":[[18,null]],"pyopmnearwell.ml.resdata_dataset module":[[19,null]],"pyopmnearwell.ml.scaler_layers module":[[20,null]],"pyopmnearwell.ml.upscale module":[[21,null]],"pyopmnearwell.ml.utils module":[[22,null]],"pyopmnearwell.utils package":[[23,null]],"pyopmnearwell.utils.formulas module":[[24,null]],"pyopmnearwell.utils.inputvalues module":[[25,null]],"pyopmnearwell.utils.mako module":[[26,null]],"pyopmnearwell.utils.plotting module":[[27,null]],"pyopmnearwell.utils.runs module":[[28,null]],"pyopmnearwell.utils.units module":[[29,null]],"pyopmnearwell.utils.writefile module":[[30,null]],"pyopmspe11":[[31,"pyopmspe11"]]},"docnames":["about","api","configuration_file","contributing","examples","index","installation","introduction","modules","output_folder","pyopmnearwell","pyopmnearwell.core","pyopmnearwell.core.pyopmnearwell","pyopmnearwell.ml","pyopmnearwell.ml.analysis","pyopmnearwell.ml.ensemble","pyopmnearwell.ml.integration","pyopmnearwell.ml.kerasify","pyopmnearwell.ml.nn","pyopmnearwell.ml.resdata_dataset","pyopmnearwell.ml.scaler_layers","pyopmnearwell.ml.upscale","pyopmnearwell.ml.utils","pyopmnearwell.utils","pyopmnearwell.utils.formulas","pyopmnearwell.utils.inputvalues","pyopmnearwell.utils.mako","pyopmnearwell.utils.plotting","pyopmnearwell.utils.runs","pyopmnearwell.utils.units","pyopmnearwell.utils.writefile","related"],"envversion":{"sphinx":66,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["about.rst","api.rst","configuration_file.rst","contributing.rst","examples.rst","index.rst","installation.rst","introduction.rst","modules.rst","output_folder.rst","pyopmnearwell.rst","pyopmnearwell.core.rst","pyopmnearwell.core.pyopmnearwell.rst","pyopmnearwell.ml.rst","pyopmnearwell.ml.analysis.rst","pyopmnearwell.ml.ensemble.rst","pyopmnearwell.ml.integration.rst","pyopmnearwell.ml.kerasify.rst","pyopmnearwell.ml.nn.rst","pyopmnearwell.ml.resdata_dataset.rst","pyopmnearwell.ml.scaler_layers.rst","pyopmnearwell.ml.upscale.rst","pyopmnearwell.ml.utils.rst","pyopmnearwell.utils.rst","pyopmnearwell.utils.formulas.rst","pyopmnearwell.utils.inputvalues.rst","pyopmnearwell.utils.mako.rst","pyopmnearwell.utils.plotting.rst","pyopmnearwell.utils.runs.rst","pyopmnearwell.utils.units.rst","pyopmnearwell.utils.writefile.rst","related.rst"],"indexentries":{},"objects":{"":[[10,0,0,"-","pyopmnearwell"]],"pyopmnearwell":[[11,0,0,"-","core"],[13,0,0,"-","ml"],[23,0,0,"-","utils"]],"pyopmnearwell.core":[[12,0,0,"-","pyopmnearwell"]],"pyopmnearwell.core.pyopmnearwell":[[12,1,1,"","check_cmdargs"],[12,1,1,"","load_parser"],[12,1,1,"","main"]],"pyopmnearwell.ml":[[14,0,0,"-","analysis"],[15,0,0,"-","ensemble"],[16,0,0,"-","integration"],[17,0,0,"-","kerasify"],[18,0,0,"-","nn"],[19,0,0,"-","resdata_dataset"],[20,0,0,"-","scaler_layers"],[21,0,0,"-","upscale"],[22,0,0,"-","utils"]],"pyopmnearwell.ml.analysis":[[14,1,1,"","plot_analysis"],[14,1,1,"","sensitivity_analysis"]],"pyopmnearwell.ml.ensemble":[[15,1,1,"","calculate_WI"],[15,1,1,"","calculate_radii"],[15,1,1,"","create_ensemble"],[15,1,1,"","extract_features"],[15,1,1,"","get_flags"],[15,1,1,"","integrate_fine_scale_value"],[15,1,1,"","memory_efficient_sample"],[15,1,1,"","run_ensemble"],[15,1,1,"","setup_ensemble"],[15,1,1,"","store_dataset"]],"pyopmnearwell.ml.integration":[[16,1,1,"","recompile_flow"],[16,1,1,"","run_integration"]],"pyopmnearwell.ml.kerasify":[[17,1,1,"","export_model"],[17,1,1,"","write_convolution2d"],[17,1,1,"","write_dense"],[17,1,1,"","write_floats"],[17,1,1,"","write_lstm"]],"pyopmnearwell.ml.nn":[[18,2,1,"","ArrayLike"],[18,1,1,"","build_model"],[18,1,1,"","get_FCNN"],[18,1,1,"","get_GRU"],[18,1,1,"","get_LSTM"],[18,1,1,"","get_RNN"],[18,1,1,"","handle_zeros_in_scale"],[18,1,1,"","save_tune_results"],[18,1,1,"","scale_and_evaluate"],[18,1,1,"","scale_and_prepare_dataset"],[18,1,1,"","train"],[18,1,1,"","tune"]],"pyopmnearwell.ml.resdata_dataset":[[19,3,1,"","ResDataSet"],[19,1,1,"","main"]],"pyopmnearwell.ml.resdata_dataset.ResDataSet":[[19,4,1,"","ResdataFile_to_datapoint"],[19,5,1,"","features"],[19,4,1,"","on_epoch_end"],[19,4,1,"","read_data"],[19,5,1,"","targets"]],"pyopmnearwell.ml.scaler_layers":[[20,3,1,"","MinMaxScalerLayer"],[20,3,1,"","MinMaxUnScalerLayer"],[20,3,1,"","ScalerLayer"]],"pyopmnearwell.ml.scaler_layers.MinMaxScalerLayer":[[20,4,1,"","call"],[20,4,1,"","compute_output_shape"],[20,4,1,"","from_config"],[20,4,1,"","get_config"]],"pyopmnearwell.ml.scaler_layers.MinMaxUnScalerLayer":[[20,4,1,"","call"],[20,4,1,"","compute_output_shape"],[20,4,1,"","from_config"],[20,4,1,"","get_config"]],"pyopmnearwell.ml.scaler_layers.ScalerLayer":[[20,4,1,"","_adapt"],[20,4,1,"","adapt"],[20,4,1,"","build"],[20,6,1,"","data_max"],[20,6,1,"","data_min"],[20,6,1,"","feature_range"],[20,4,1,"","get_weights"],[20,6,1,"","is_adapted"],[20,5,1,"","min"],[20,5,1,"","scalar"],[20,4,1,"","set_weights"]],"pyopmnearwell.ml.upscale":[[21,3,1,"","BaseUpscaler"],[21,3,1,"","Upscaler"]],"pyopmnearwell.ml.upscale.BaseUpscaler":[[21,5,1,"","_abc_impl"],[21,4,1,"","create_ds"],[21,4,1,"","get_analytical_PI"],[21,4,1,"","get_analytical_WI"],[21,4,1,"","get_data_WI"],[21,4,1,"","get_homogeneous_values"],[21,4,1,"","get_horizontically_integrated_values"],[21,4,1,"","get_radii"],[21,4,1,"","get_timesteps"],[21,4,1,"","get_vertically_averaged_values"],[21,4,1,"","reduce_data_size"]],"pyopmnearwell.ml.upscale.Upscaler":[[21,5,1,"","_abc_impl"],[21,5,1,"","_is_protocol"],[21,6,1,"","angle"],[21,6,1,"","num_layers"],[21,6,1,"","num_timesteps"],[21,6,1,"","num_xcells"],[21,6,1,"","num_zcells"],[21,6,1,"","single_feature_shape"]],"pyopmnearwell.ml.utils":[[22,1,1,"","enable_determinism"]],"pyopmnearwell.utils":[[24,0,0,"-","formulas"],[25,0,0,"-","inputvalues"],[26,0,0,"-","mako"],[27,0,0,"-","plotting"],[28,0,0,"-","runs"],[29,0,0,"-","units"],[30,0,0,"-","writefile"]],"pyopmnearwell.utils.formulas":[[24,1,1,"","area_squaredcircle"],[24,1,1,"","cell_size"],[24,1,1,"","co2brinepvt"],[24,1,1,"","data_WI"],[24,1,1,"","equivalent_well_radius"],[24,1,1,"","hydrostatic_fluid"],[24,1,1,"","hydrostatic_gas"],[24,1,1,"","peaceman_WI"],[24,1,1,"","peaceman_matrix_WI"],[24,1,1,"","pyopmnearwell_correction"],[24,1,1,"","two_phase_peaceman_WI"]],"pyopmnearwell.utils.inputvalues":[[25,1,1,"","process_input"],[25,1,1,"","process_tuning"]],"pyopmnearwell.utils.mako":[[26,1,1,"","fill_template"]],"pyopmnearwell.utils.plotting":[[27,1,1,"","save_fig_and_data"]],"pyopmnearwell.utils.runs":[[28,1,1,"","simulations"]],"pyopmnearwell.utils.units":[[29,7,1,"","BOLTZMANN_CONSTANT"],[29,7,1,"","GRAVITATIONAL_ACCELERATION"],[29,7,1,"","UNIVERSAL_GAS_CONSTANT"]],"pyopmnearwell.utils.writefile":[[30,1,1,"","compact_format"],[30,1,1,"","create_3dgrid"],[30,1,1,"","d3_grids"],[30,1,1,"","generate_fluxnum"],[30,1,1,"","generate_geology"],[30,1,1,"","generate_multpv"],[30,1,1,"","generate_pcfact"],[30,1,1,"","generate_permfact"],[30,1,1,"","generate_permfact_pcfact"],[30,1,1,"","generate_saturation_functions_format_1"],[30,1,1,"","generate_saturation_functions_format_2"],[30,1,1,"","generate_saturation_functions_gsf_wsf"],[30,1,1,"","get_2dgrid"],[30,1,1,"","get_spaces"],[30,1,1,"","handle_core"],[30,1,1,"","manage_grid"],[30,1,1,"","manage_sections"],[30,1,1,"","manage_tables"],[30,1,1,"","reservoir_files"],[30,1,1,"","round_like_e"]]},"objnames":{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","type","Python type alias"],"3":["py","class","Python class"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"],"6":["py","property","Python property"],"7":["py","data","Python data"]},"objtypes":{"0":"py:module","1":"py:function","2":"py:type","3":"py:class","4":"py:method","5":"py:attribute","6":"py:property","7":"py:data"},"terms":{"0f":4,"11th":2,"1e":2,"1e10":2,"2d":[21,24,30],"3060e":2,"380649e":29,"3871e":2,"3d":[2,15,24,30],"5e":2,"6120e":2,"8655e":2,"A":[15,18,19,24,26,31],"AND":19,"About":5,"After":19,"All":[14,15,16,21,30],"An":[3,4,15,31],"As":[2,21,24],"Below":31,"By":15,"Each":16,"For":[0,2,3,4,6,14,20,30],"Has":15,"Here":2,"If":[2,4,6,12,14,15,16,18,19,20,21,24,26,30],"In":[2,3,4,7,15,21,24],"Is":15,"It":[14,15,20],"Most":6,"Not":[21,24],"So":20,"Some":[15,19],"The":[0,1,2,3,4,6,7,9,12,14,15,16,18,19,21,24,26,27],"Then":[2,4,6,9],"There":[4,6],"These":4,"This":[7,15,18,19,20,21,24],"To":[2,4,6,19,30],"We":[2,3],"When":26,"While":6,"You":[4,6],"__description__":21,"__init__":21,"_abc":21,"_abc_data":21,"_abc_impl":[13,21],"_adapt":[13,20],"_build":3,"_description_":[15,19,20,21,24],"_extended_summary_":21,"_is_protocol":[13,21],"_summary_":21,"_type_":18,"abc":21,"abl":[4,6],"abov":2,"abstract":21,"abstractmethod":21,"acceler":24,"accept":3,"accord":20,"account":24,"accur":24,"achiev":4,"across":15,"action":[3,6],"activ":[2,6,18],"ad":5,"adapt":[13,20],"add":[2,3,4,6,9,14,20,30],"addit":[3,4,5,7,14,15,21],"adim":2,"adjust":24,"afterward":19,"align":30,"allow":6,"along":[7,14,15,21],"also":[3,4,6],"altern":3,"altitud":[15,24],"alway":15,"anaconda":6,"analys":3,"analysi":[3,10,13],"analyz":14,"angl":[13,15,21,24],"ani":[3,15,16,24,30],"anim":4,"annot":21,"anoth":6,"answer":3,"apertur":2,"api":5,"appli":20,"approach":[0,3],"approx":24,"apt":6,"architectur":[16,18],"area":[21,24],"area_squaredcircl":[10,23,24],"arg":[15,19,20,21],"argpars":12,"argument":[7,12,15,19,21],"argv":12,"around":7,"array":[14,15,17,18,21],"arraylik":[10,13,18,20,24],"assertionerror":15,"assum":[14,15,21],"atm":19,"attribut":21,"auto":3,"automat":21,"avail":[2,3,4,6,7],"averag":[15,21],"avoid":[2,15],"axi":[14,15,21],"b":24,"back":18,"bar":[2,15],"base":[2,7,19,20,21,31],"basetemp":3,"baseupscal":[10,13,21],"bash":4,"batch":18,"becaus":21,"befor":[3,15,16,18,21],"behavior":[18,22],"benchmark":31,"best":18,"bin":[2,6],"binari":[3,4,5],"biofilm":2,"black":3,"blackoil":2,"blob":17,"block":[15,21,24],"block_sidelength":15,"boltzmann_const":[10,23,29],"bool":[14,15,18,19,21,30],"bottom":[2,24],"boundari":[2,7],"branch":6,"brew":[4,5],"broadcast":15,"bs":18,"build":[2,3,5,13,18,20],"build_model":[10,13,18],"build_opm_mpi":6,"built":[6,18],"bwr":4,"c":[2,4,15],"ca":24,"cake":[2,21,24,30],"calcit":31,"calcul":[15,20,21,24],"calculate_radii":[10,13,15],"calculate_wi":[10,13,15,21],"call":[4,13,17,20,24],"can":[2,3,4,6,9,16,18,19,21,24,26],"capabl":22,"capillari":2,"care":21,"cartesian":[2,15,21],"cartesian2d":2,"case":[14,21],"ccus":5,"cd":6,"cell":[2,7,15,16,21,24],"cell_boundary_radii":21,"cell_center_radii":21,"cell_height":21,"cell_siz":[10,23,24],"cemrac":17,"center":[0,24],"cf":24,"cfd":31,"cformat":4,"challeng":0,"chang":[2,3,14,19],"chappui":24,"check":[3,6,12,16,21,31],"check_cmdarg":[10,11,12],"checker":3,"checkout":6,"chemic":29,"choos":7,"chosen":7,"chunk":17,"ci":[3,6],"ci_pycopm_maco":3,"circl":24,"class":[19,20,21],"classmethod":20,"cli":12,"click":4,"clone":6,"cmake":6,"cmdarg":12,"cnum":4,"co2":[2,5,24,31],"co2brinepvt":[10,23,24],"co2eor":[2,7],"co2stor":[2,4,7,30],"coars":21,"coarser":2,"code":[3,6,10],"collabor":3,"column":24,"com":[4,6,7,16,17,21],"combin":15,"command":[4,6,12],"commit":3,"common":[6,15,17],"compact_format":[10,23,30],"comparison":21,"compil":18,"complain":21,"complet":20,"complex":15,"comput":[15,24],"compute_output_shap":[13,20],"concept":5,"config":20,"configur":[1,4,5,7,12],"configuration_fil":[6,7],"connect":18,"consid":[2,4],"constain":1,"constant":[14,15,16,18,24,29],"contain":[3,14,15,16,18,19,24,26],"content":[1,3,5,8],"contribut":[0,5,6],"control":24,"convers":29,"convert":2,"convolution2d":17,"coord2d":2,"coord3d":2,"coordin":2,"copi":[3,6,17],"core":[1,2,8,10,30],"corner":30,"correct":[15,21,24],"correspond":[2,21],"cos":2,"cov":3,"cover":[12,15],"cp":2,"cpg3d":2,"cplog":2,"creat":[1,3,6,15,19,30],"create_3dgrid":[10,23,30],"create_d":[13,21],"create_ensembl":[10,13,15],"csp":[2,31],"cssr":[0,4,6,7,16],"csv":[16,18],"current":[3,6,7],"current_directori":6,"cyclic":5,"d":[2,4,21],"d3_grid":[10,23,30],"data":[4,15,18,19,20,21,24,27],"data_gener":4,"data_max":[13,20],"data_max_":20,"data_min":[13,20],"data_min_":20,"data_wi":[10,23,24],"datapoint":14,"dataset":[15,18,19,21],"day":[2,21],"dcmake_build_typ":6,"dcmake_prefix_path":6,"deal":[15,16],"debug":26,"decay":18,"decid":16,"deck":[2,7,9,15,16,19,30],"dedic":6,"default":[2,7,14,15,16,18,19,20,21,22,24,26,30],"default_rng":22,"defin":[2,7],"definit":2,"degre":2,"delet":19,"delta_x":24,"dens":17,"densiti":24,"depend":[3,6,15,21],"deprec":[16,19],"depth":[2,18],"describ":[2,3,4,7],"descript":2,"determin":[15,22],"determinist":22,"dev":[3,6],"develop":[6,7],"diamet":2,"dic":[25,28,30],"dict":[15,16,26,30],"dictionari":[15,16,26,30],"differ":[2,4,7,9,14,15,16,18,19,29],"digit":30,"dimens":[14,15],"dimension":[15,20],"dir":2,"direct":[2,7,9,15,16],"directori":[3,15],"disabl":[20,21],"disk":17,"disregard":15,"disregard_first_xcel":21,"distanc":7,"distribut":15,"divid":21,"dmar":2,"doc":3,"docs_co2_cyclic_inject":4,"docs_hello_world":4,"docstr":21,"document":[2,3,4,6,7,9],"doe":[6,18,19,24],"doi":24,"domain":2,"done":[6,20,21],"download":6,"dpi":4,"driesner":24,"driven":21,"ds":19,"dsfile":18,"dtype":19,"due":24,"dure":4,"duse_mpi":6,"dwith_ndebug":6,"dxarray":30,"e":[2,3,4,6,7,9,15,18,21,24],"eaceman":24,"earli":18,"easili":[16,26],"ecl_fil":19,"ecl_keyword":15,"eclfil":19,"edg":6,"effect":2,"efficient_sampl":15,"egrid":7,"ehystr":2,"either":[6,19,24,26],"element":[2,20,21,24],"els":[6,15],"em":31,"email":3,"en":29,"enabl":[2,4,22],"enable_determin":[10,13,22],"end":[4,19],"ensembl":[10,13,18,19,21,22,30],"ensemble_path":15,"ensemble_s":15,"enterpris":6,"entri":2,"environ":[3,6],"epoch":[18,19],"equal":[2,14,15,21,24],"equidist":2,"equilibrium":24,"equival":[21,24],"equivalent_well_radius":[10,23,24],"error":[15,19,20,21,26,30],"etc":[7,21,24,30],"evalu":[2,18],"everi":15,"exampl":[2,5,7,16,19,24],"except":[2,15],"execut":[1,2,3,4,6,7,9,12],"executions_per_tri":18,"exist":18,"explain":2,"explan":[20,21],"explos":17,"exponenti":2,"export":[3,18],"export_model":[10,13,17],"exprecc":5,"extend":[2,3,7,16],"extra":2,"extract":[15,19,21],"extract_featur":[10,13,15],"f":4,"f0nzie":14,"faci":2,"factor":[2,15,24],"fail":15,"failed_indic":15,"fals":[15,18,19,21],"familiar":3,"far":[20,30],"faster":15,"favor":19,"fcnn":18,"featur":[0,13,14,15,16,18,19,20,21],"feature_array":15,"feature_index":21,"feature_nam":[14,18],"feature_rang":[13,18,20],"feature_range_":20,"fi":6,"fidel":15,"fig":27,"figur":[4,27],"file":[1,3,4,5,6,7,9,12,15,16,17,18,19,25,26,27,30],"file_format":19,"filenam":[17,26],"filenotfounderror":18,"fill":[16,26],"fill_templ":[10,23,26],"final":2,"fine":[15,21,24],"finit":24,"finnest":2,"first":[2,14,15,18,21,30],"fit":[18,20],"fix":[3,14,15,21,24],"flag":[2,4,9,15],"flexibl":7,"float":[14,15,17,18,21,24,29],"float32":19,"float64":24,"flow":[1,2,3,4,5,7,9,15,21,28,30,31],"flow_gaswater_dissolution_diffus":16,"flow_maco":3,"flow_path":15,"fluid":[2,7,24],"fluidflow":31,"fluidmatrixinteract":17,"fluxnum":30,"foam":[2,7],"folder":[1,2,3,4,5,6,7,12,15,19,30],"follow":[2,4,6,7,9,15,20,21],"fork":[0,3],"form":[19,21],"format":[3,17,30],"former":19,"formula":[5,10,15,23],"found":[4,15],"four":2,"frac":[15,24],"fractalmanifold":17,"fraction":[2,15],"framework":[7,31],"from_config":[13,20],"from_gener":19,"full":[2,15,21,22],"fulli":[15,18],"funciton":3,"function":[2,6,7,12,15,16,18,19,20,21,22,24,25,27,28,30],"fund":0,"furthermor":21,"futur":21,"g":[2,3,4,6,7,9,15,18,21,24],"gas":[4,7,24],"gas_const":29,"gb":[15,24],"generat":[2,3,4,7,9,15,19,20,22,30,31],"generate_fluxnum":[10,23,30],"generate_geolog":[10,23,30],"generate_multpv":[10,23,30],"generate_pcfact":[10,23,30],"generate_permfact":[10,23,30],"generate_permfact_pcfact":[10,23,30],"generate_saturation_functions_format_1":[10,23,30],"generate_saturation_functions_format_2":[10,23,30],"generate_saturation_functions_gsf_wsf":[10,23,30],"geographi":30,"geolog":[1,15,30,31],"geometri":[2,30],"geotherm":24,"get":[2,3,6,18,21],"get_2dgrid":[10,23,30],"get_analytical_pi":[13,21],"get_analytical_wi":[13,21],"get_config":[13,20],"get_data_wi":[13,21],"get_fcnn":[10,13,18],"get_flag":[10,13,15],"get_gru":[10,13,18],"get_homogeneous_valu":[13,21],"get_horizontically_integrated_valu":[13,21],"get_lstm":[10,13,18],"get_radii":[13,21],"get_rnn":[10,13,18],"get_spac":[10,23,30],"get_timestep":[13,21],"get_vertically_averaged_valu":[13,21],"get_weight":[13,20],"gif":[4,7,31],"gigatonn":0,"git":[4,6],"github":[2,3,4,6,7,14,16,17],"give":19,"given":[2,7,15,18,19,24,26],"global":[22,30],"glorot_norm":18,"glorot_uniform":18,"gravitational_acceler":[10,23,24,29],"graviti":24,"grid":[2,4,6,7,15,21,24,30],"gridfil":15,"grom":15,"ground":5,"gsf":30,"h":24,"h2biofilm":2,"h2ch4":7,"h2core":2,"h2o":4,"h2store":[2,7],"handl":30,"handle_cor":[10,23,30],"handle_zeros_in_scal":[10,13,18],"hat":6,"height":[21,24],"hello":5,"hello_world":4,"help":[2,3,6],"helper":[26,27],"henc":[20,21],"heterogen":7,"hidden":18,"hidden_dim":18,"high":15,"higher":[2,15,20],"highlight":14,"histori":31,"hole":24,"homebrew":6,"homogen":[14,21],"horizont":21,"host":7,"howev":[4,16,21,24],"hp":18,"hpc":0,"hpp":16,"html":[3,14,20],"https":[4,6,7,14,16,17,20,21,29],"hydrogen":2,"hydrostat":24,"hydrostatic_fluid":[10,23,24],"hydrostatic_ga":[10,23,24],"hyperparamet":18,"hysteresi":2,"ideal":24,"ident":15,"ignor":[2,3,22],"imag":31,"imbibit":2,"impact":4,"implement":[7,16,21],"import":3,"improv":[18,30],"in_fil":25,"inc":[15,30],"inc_fold":30,"includ":[6,18,30],"increas":21,"index":[5,15,24],"indic":15,"individu":[15,20],"induc":31,"init":7,"init_keyword":15,"initi":[2,15,18,20],"initialphas":2,"inj":2,"inj_rate_index":21,"inject":[2,5,7,15,21,24],"injection_r":15,"injector":24,"inlet":2,"inner":15,"input":[1,2,4,7,12,14,15,16,18,19,20,21,25,30],"input_kw":19,"input_shap":20,"inputvalu":[10,23],"insid":[6,7,15,21,24],"inspir":14,"instal":[3,4,5,16,24],"instanc":21,"instanti":19,"instead":[2,7,15,21,24],"instruct":6,"int":[14,15,16,18,20,21,22],"integ":15,"integr":[10,13,15,21],"integrate_fine_scale_valu":[10,13,15],"intend":30,"interest":[4,6,24,31],"interim":6,"intermitt":4,"internal":[18,21],"interval":[4,15],"introduc":20,"introduct":5,"invalid":[12,16,18],"invers":20,"io":14,"is_adapt":[13,20],"issu":[0,4,5],"iter":2,"j":[24,29],"j5":6,"k":[24,29],"k_":24,"k_h":24,"k_r1":24,"k_r2":24,"keep":[15,30],"keep_result_fil":15,"kept":14,"kera":[14,17,18,20],"keras_tun":18,"kerasifi":[10,13,18],"kernel_initi":18,"key":[15,16],"keyerror":19,"keyword":[2,15,19],"keyword_sc":15,"kg":[2,24],"kr":2,"krn":2,"krw":2,"kwarg":[14,15,18,20,21,30],"kxi":2,"kz":2,"l":6,"lami":24,"larg":17,"larger":15,"last":[2,15,18],"latter":19,"law":24,"layer":[2,7,15,16,17,18,20,21],"leakag":31,"learn":[3,5,6,16,18,20],"least":[15,16],"left":[2,24],"legend":14,"len":19,"len_vari":15,"length":[2,7,15],"lie":24,"ligther":6,"limit":[2,7],"limmit":2,"line":[2,3,6,12,14,15,18,19],"linear":24,"link":[4,6],"lint":[6,20],"linux":[4,5],"list":[7,12,14,15,16,18,19,20,21,30],"liter":[14,18,19,24],"ln":24,"load":[18,26],"load_pars":[10,11,12],"local":[3,16,22],"local_feature_nam":16,"locat":[1,2],"log":[15,18],"look":[2,3],"loop":[4,16],"loss":18,"loss_func":18,"low":15,"lower":15,"lr":18,"lr_patienc":18,"lr_tune":18,"lstm":17,"m":[2,4,6,7,9,21,24,29],"machin":[2,3,5,6,16],"machine_learning_compil":14,"maco":[3,4,5],"macport":6,"main":[1,3,4,10,11,12,13,14,17,19],"main_plot":14,"maintain":3,"make":[3,6,21,22],"mako":[2,10,15,23,30],"makofil":[15,16],"mamba":6,"manag":6,"manage_grid":[10,23,30],"manage_sect":[10,23,30],"manage_t":[10,23,30],"mani":[2,20],"mantain":3,"manual":[2,19],"mark":19,"mass":[2,24],"master":6,"match":31,"materi":17,"math":[15,24],"mathbf":24,"mathemat":24,"matplotlib":27,"max":[2,14,15,20],"max_trial":18,"maximum":[2,15],"may":15,"md":[2,21],"meanabsolutepercentageerror":18,"meansquaredlogarithmicerror":18,"meanwhil":14,"measur":14,"member":[15,21,30],"memori":[15,17],"memory_efficient_sampl":[10,13,15],"mention":30,"merg":3,"mesh":15,"method":[18,19,21,24],"micp":5,"microbi":31,"microsystem":31,"might":[3,6,15,16,19,20,31],"min":[2,13,14,15,20],"miniforg":6,"minmax":20,"minmaxsc":[18,20],"minmaxscal":[18,20],"minmaxscalerlay":[10,13,20],"minmaxunscalerlay":[10,13,20],"miss":[3,21],"mixin":20,"mkdir":6,"ml":[1,4,6,8,10],"ml_near_wel":[6,16],"ml_tool":17,"mode":[14,15],"model":[1,2,4,7,14,16,17,18,24,30,31],"model_input":18,"modifi":[6,9,18],"modul":[1,5,8,31],"mol":[24,29],"molecular":24,"molecule_mass":24,"moment":[16,20],"mpi":6,"mpirun":2,"mse":18,"mu":24,"mu_1":24,"mu_2":24,"multipl":21,"multipli":2,"multpv":30,"must":[15,21],"mypi":[3,21],"n":[3,30],"name":[7,14,15,16,18],"name_of_script":4,"namespac":12,"ndarray":[14,15,18,21,24,30],"near":[3,4,6,7,18,21],"nearwel":15,"necessari":[2,30],"need":[3,4,6,15,16,19,20,21,24,30],"negat":24,"network":[14,16,18],"neural":[14,16,18],"neuron":18,"new":[0,2,3,15,30],"newton":2,"nice":[3,6],"ninput":18,"nkrn":2,"nkrw":2,"nn":[10,13],"no_disgas_no_diffus":30,"non":2,"none":[12,14,15,16,18,20,22,26,27],"normal":18,"notat":30,"note":[14,15,16,18,19,21,22],"noutput":18,"now":[2,21],"np":[2,14,15,18,21,22,24],"npen":2,"npoint":[2,15],"num_cel":[15,19],"num_dim":15,"num_ensemble_run":21,"num_featur":[15,21],"num_fil":19,"num_input":14,"num_lay":[13,21],"num_memb":15,"num_report_step":[15,19],"num_timestep":[13,21],"num_vari":15,"num_x_cel":15,"num_xcel":[13,21],"num_zcel":[13,21],"number":[0,2,7,14,15,16,18],"numer":24,"numpi":[15,22],"o":[4,7],"object":[18,19,21],"on_epoch_end":[13,19],"onc":16,"one":[2,4,7,9,15,19,21],"onli":[4,6,7,15,16,18,20,21,24,30],"onlin":6,"open":[4,6,31],"opm":[1,2,3,4,5,7,9,15,16,17,19,21,24,30,31],"opm_path":16,"option":[2,7,14,15,16,18,21,22,24,26,30],"order":[15,20],"org":[6,20,29],"origin":[18,24],"outer":15,"outlet":2,"output":[2,4,5,7,12,14,16,18,20],"output_signatur":19,"overload":15,"overridden":21,"overview":5,"p":24,"p_":[15,24],"p_0":24,"p_gb":24,"p_w":[15,24],"pa":24,"pack":17,"packag":[0,1,3,4,5,7,8],"page":[3,5],"paper":4,"parallel":16,"paramet":[4,5,12,14,15,16,18,19,20,21,22,24,26,27,30],"paraview":4,"pars":[12,19],"part":[16,30],"partial":15,"particular":15,"partit":2,"pass":[15,18,19,24,26],"path":[2,3,14,15,16,18,19,21,24,26,27,30],"pathlib":[14,15,16,18,21,24,26,27,30],"patienc":18,"pcap":2,"pcfact":30,"peaceman":24,"peaceman_matrix_wi":[10,23,24],"peaceman_wi":[10,23,24],"pen":2,"per":[2,16,21],"perfor":2,"perform":14,"period":2,"perm":[2,15],"permeabilti":24,"permeabl":[15,21,24],"permfact":30,"phase":[2,24],"phase_properti":24,"phi":2,"physic":[2,7,29],"pi":[2,15,24],"pickl":27,"pip":[3,4,6],"pipe":2,"place":21,"platform":6,"pleas":[0,3],"plopm":[4,5,6,7,9],"plot":[7,10,14,23],"plot_analysi":[10,13,14],"png":4,"pngs":[7,31],"pofff":5,"point":[4,15,24,30],"pointless":21,"pore":2,"poro":2,"possibl":[3,15,20,21,30],"postprocess":9,"practic":2,"precipit":[4,31],"prefer":3,"preprocess":[9,18,20,25],"prerequisit":6,"pressur":[2,4,7,15,21,24],"pressure_index":21,"prevent":17,"previous":[2,3,6,7],"print":[2,7],"problem":5,"proceed":2,"process":[1,17,25],"process_input":[10,23,25],"process_tun":[10,23,25],"produc":[2,24],"product":[4,15,24],"project":[0,6,31],"properti":[2,7,20,21,24],"protocol":21,"provid":[15,18,19,20,21,24,29],"prs":3,"ptwo":24,"public":[5,7],"publish":4,"pull":[0,3],"push":3,"pushd":3,"pv":2,"pvmult":2,"pvt":7,"pwd":6,"py":17,"py312":3,"pycopm":[3,5,6],"pylint":[3,20,21],"pymm":5,"pyopmnearwel":[2,3,4,6,7,9],"pyopmnearwell_correct":[10,23,24],"pyopmspe11":5,"pyplot":27,"pytest":3,"python":[2,3,5,21,22,31],"python3":6,"q":[15,24],"quadrat":24,"quantiti":[15,24],"quick":31,"r":[3,6,24],"r_":24,"r_e":24,"r_w":24,"radial":[2,4,15,21,24],"radial_grid":24,"radial_valu":15,"radii":[15,21,24],"radii_fil":21,"radius":[15,24],"raidal":15,"rais":[0,3,12,15,16,18,19,20,21,24,26],"random":[15,18,21,22],"random_norm":14,"random_uniform":14,"rang":[7,15,18],"rate":[2,4,15,18,21,24],"ratio":24,"read":4,"read_data":[13,19],"read_data_on_init":19,"recalc_":30,"recalc_grid":[15,30],"recalc_sect":[15,30],"recalc_t":[15,30],"recalcul":[15,30],"recent":6,"recompil":[16,18],"recompile_flow":[10,13,16],"recompile_model":18,"reconstruct":20,"record":[2,4],"recov":24,"recurr":18,"red":6,"reduc":[21,30],"reduce_data_s":[13,21],"refer":24,"reference_pressur":24,"refin":7,"region":[15,31],"reinject":2,"rel":2,"relat":[3,5,9,24,30],"relationship":2,"relax":2,"releas":[6,7],"relu":18,"remedi":31,"remov":[6,21],"render":[15,26],"replac":[3,16],"repo":[3,6,16],"report":[5,15],"repositori":[1,2,3,4,6],"request":[0,3],"requir":[3,6,15,30],"requiri":25,"resdata":19,"resdata_dataset":[10,13],"resdata_fil":19,"resdatafil":19,"resdatafile_to_datapoint":[13,19],"resdataset":[10,13,19],"reservoir":[5,7,24,31],"reservoir_fil":[10,15,23,30],"resinsight":[4,6,9],"resolution_1":14,"resolution_2":14,"resourc":[0,24],"respons":15,"result":[2,4,6,7,9,15,21,24],"retir":7,"return":[12,14,15,16,18,19,20,21,24,26,27,30],"return_outer_inn":15,"review":3,"rho":24,"rho_1":24,"rho_2":24,"right":[2,24],"rise":3,"rock":[5,7],"round_like_":[10,23,30],"routin":[7,17],"row":[16,18],"rst":2,"ruff":3,"rule":5,"run":[2,3,4,6,7,9,10,15,16,19,21,23,30],"run_ensembl":[10,13,15],"run_integr":[10,13,16],"runspec":[15,16],"runtim":21,"s":[3,4,18,24,26,29],"safu":2,"salt":4,"saltprec":[2,7],"sampl":[14,15,19],"sample_weight":18,"sand":2,"sat":2,"satur":[2,4,7,15,21,30],"save":[4,9,14,15,16,18,19,27],"save_fig_and_data":[10,23,27],"save_tune_result":[10,13,18],"saved_model":18,"savepath":[14,15,16,18],"scalar":[13,20],"scale":[15,16,18,20,21,24],"scale_and_evalu":[10,13,18],"scale_and_prepare_dataset":[10,13,18],"scaler":20,"scaler_lay":[10,13],"scalerlay":[10,13,20],"scalingsfil":[16,18],"schedul":[2,7],"scikit":20,"scott":24,"screen":4,"screenshot":9,"script":[1,2,3,4,6,12,26],"search":[5,18],"second":[2,4,14,21,30],"section":[2,4],"see":[2,3,4,6,9,20,21],"seed":[15,22],"seek":5,"seen":2,"select":[2,9,21],"self":[19,20,21],"send":3,"sensit":14,"sensitivity_analysi":[10,13,14],"seri":2,"serial":20,"set":[2,6,7,14,18,20,22,25],"set_weight":[13,20],"setup_ensembl":[10,13,15],"setuptool":6,"seven":[2,3],"sever":21,"sgas":4,"sgfn":30,"sgof":30,"sh":[4,6],"shall":19,"shape":[14,15,19,20,21],"short":2,"show":[2,4,9],"shown":2,"shuffl":[18,19],"shuffle_on_epoch_end":19,"shut":2,"side":[2,15,24],"sidelength":[15,24],"sigmoid":18,"signific":30,"similar":[21,24],"simmul":15,"simpli":6,"simplifi":7,"simul":[0,2,4,6,7,9,10,15,16,21,23,24,28,31],"simulation_length":21,"sinc":[2,21],"singl":[2,3,7,9,14],"single_feature_shap":[13,21],"site":31,"size":[2,15,16,18,21,24,30],"skip":6,"sklearn":[18,20],"sl":2,"smspec":15,"sni":2,"softwar":[0,5],"solut":[15,24],"soon":3,"sourc":[3,5,29,31],"sparsiti":21,"spe":2,"spe11":31,"specif":[6,7,14],"specifi":[15,16,18],"speed":2,"split":18,"sqare":24,"squar":[15,24],"squash":3,"src":[2,3],"stabl":20,"stackoverflow":21,"standardwel":16,"standardwell_impl":16,"standardwell_impl_templ":16,"standardwell_templ":16,"start":[4,15],"state":18,"statement":21,"static":3,"stencil":16,"stencil_s":16,"step":[2,3,6,15,21],"step_size_cel":15,"step_size_t":21,"step_size_tim":15,"step_size_x":21,"still":16,"stop":18,"storag":[0,2,31],"store":[15,19],"store_dataset":[10,13,15],"str":[12,14,15,16,18,19,24,26,27,30],"string":[2,21,26],"struct":17,"studi":[4,28,31],"subclass":21,"submodul":[1,8,10],"subpackag":[1,5,8],"subsurfac":0,"subsystem":6,"succed":6,"succeed":3,"suffic":21,"sum":21,"summari":9,"summary_keyword":15,"supercrit":24,"support":[2,5,6,7],"sure":[22,24],"surfac":2,"surface_dens":21,"sustain":0,"svg":27,"sw":2,"swfn":30,"swi":2,"system":3,"systemexit":12,"t":[4,15,21,24,26],"tabl":[7,15,30],"tag":6,"tailor":31,"take":[14,15,21,24],"taken":[14,15,21,30],"tanh":18,"tap":[4,6],"target":[3,13,15,18,19,21],"target_kw":19,"target_rang":18,"telescop":2,"temper":15,"temperatur":[2,7,21,24],"templat":[1,2,7,15,16,26,30],"tensor":[15,18,19,20],"tensor2d":2,"tensor3d":2,"tensord2d":2,"tensorflow":[3,6,15,18,19,20,22],"tensorspec":19,"term":3,"termin":[4,6],"test":[2,3,4,6,7,15,18,20],"test_output":[3,4],"test_split":18,"text":26,"tf":[18,19],"theta":2,"thick":[2,24],"third":14,"three":[2,20],"threshold":2,"thus":15,"time":[2,4,15,24],"timestep":21,"todo":[7,15,24],"toml":[2,4,6,7],"tool":[1,3,4,6,7,9,16,31],"top":[2,4],"total":15,"toward":2,"train":[10,13,18],"train_data":18,"train_split":18,"transform":[15,17,18,19,20],"treat":21,"tri":[3,4,6],"triangl":[15,24],"triangle_grid":[15,24],"triangular":24,"true":[2,4,14,15,18,19,21,30],"trust":[4,6],"tsmaxz":2,"tube":2,"tune":[2,10,13,18,25],"tuner":18,"tupl":[14,15,18,19,20,21],"turn":6,"tutori":[3,6],"two":[2,16,18,21],"two_phase_peaceman_wi":[10,23,24],"txt":[3,6],"type":[2,4,6,14,15,18,19,20,21,24,26,29,30,31],"ubuntu":[3,6],"uniform":15,"union":16,"unit":[10,15,18,21,23,24],"unitless":15,"universal":24,"universal_gas_const":[10,23,29],"unrst":[7,15,19],"unscal":20,"updat":[6,15],"upgrad":6,"upscal":[10,13],"use":[0,1,2,3,4,6,7,9,15,16,18,19,21,22,24,26,30,31],"user":[2,3,4,6,15],"usual":[15,21],"util":[1,2,8,10,13],"utilil":22,"utiliy":25,"v":[4,7,30],"v2026":6,"val":18,"val_data":18,"val_loss":18,"val_split":18,"valid":[12,18],"valu":[2,7,14,15,16,18,19,20,21,24,25,30],"valueerror":[15,16,18,20,24],"var":26,"vari":[14,15],"variabl":[2,3,7,9,14,15,16,26,30],"variat":14,"various":15,"venv":6,"veri":17,"version":[3,6,10,21],"vertic":[15,16,21],"via":[6,7],"view":4,"virtual":6,"viscos":24,"visit":3,"visual":[4,6,9],"volum":[2,4,21,24],"vpyopmnearwel":6,"vtk":4,"vtks":31,"w":[7,24],"want":2,"warn":[7,20],"water":[2,4,24],"weight":[18,20],"welcom":[0,3],"well":[3,4,5,6,7,15,16,21,24],"well_radius":21,"well_typ":24,"wellbor":24,"went":15,"wet":2,"wheel":6,"whether":[14,15,18,30],"whole":7,"wi":[15,21,24],"wi_array":15,"width":2,"wiki":29,"wikipedia":29,"will":[3,6,15,21,30],"window":[4,5],"within":15,"without":[6,18,24],"work":[3,6,19,24,30],"world":5,"write":[1,2,6,7,17,30],"write_activ":17,"write_convolution2d":[10,13,17],"write_dens":[10,13,17],"write_float":[10,13,17],"write_lstm":[10,13,17],"writefil":[10,23],"wrong":15,"wsf":30,"wsl":6,"x":[2,7,14,15,21,30],"x_":24,"xcn":2,"xdim":2,"xfac":2,"xformat":4,"y":[2,4,6,7],"yapparova":24,"yet":[3,20,21],"yformat":4,"yml":[3,6],"z":[2,7],"zero":[15,24],"zxi":2},"titles":["About pyopmnearwell","pyopmnearwell Python API","Configuration file","Contributing","Examples","Welcome to pyopmnearwell\u2019s documentation!","Installation","Introduction","pyopmnearwell","Output folder","pyopmnearwell package","pyopmnearwell.core package","pyopmnearwell.core.pyopmnearwell module","pyopmnearwell.ml package","pyopmnearwell.ml.analysis module","pyopmnearwell.ml.ensemble module","pyopmnearwell.ml.integration module","pyopmnearwell.ml.kerasify module","pyopmnearwell.ml.nn module","pyopmnearwell.ml.resdata_dataset module","pyopmnearwell.ml.scaler_layers module","pyopmnearwell.ml.upscale module","pyopmnearwell.ml.utils module","pyopmnearwell.utils package","pyopmnearwell.utils.formulas module","pyopmnearwell.utils.inputvalues module","pyopmnearwell.utils.mako module","pyopmnearwell.utils.plotting module","pyopmnearwell.utils.runs module","pyopmnearwell.utils.units module","pyopmnearwell.utils.writefile module","Related"],"titleterms":{"About":0,"ad":31,"addit":2,"analysi":14,"api":1,"binari":6,"brew":6,"build":6,"ccus":4,"co2":4,"concept":7,"configur":2,"content":[10,11,13,23],"contribut":3,"core":[11,12],"cyclic":4,"document":5,"ensembl":15,"exampl":4,"exprecc":31,"file":2,"flow":6,"folder":9,"formula":[6,24],"ground":3,"hello":4,"indic":5,"inject":4,"inputvalu":25,"instal":6,"integr":16,"introduct":7,"issu":3,"kerasifi":17,"learn":4,"linux":6,"machin":4,"maco":6,"mako":26,"micp":31,"ml":[13,14,15,16,17,18,19,20,21,22],"modul":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"nn":18,"opm":6,"output":9,"overview":7,"packag":[6,10,11,13,23],"paramet":2,"plopm":31,"plot":27,"pofff":31,"problem":3,"public":4,"pycopm":31,"pymm":31,"pyopmnearwel":[0,1,5,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],"pyopmspe11":31,"python":[1,6],"relat":[2,31],"report":3,"resdata_dataset":19,"reservoir":2,"rock":2,"rule":3,"run":28,"s":5,"scaler_lay":20,"seek":3,"softwar":3,"sourc":6,"submodul":[11,13,23],"subpackag":10,"support":3,"tabl":5,"unit":29,"upscal":21,"util":[22,23,24,25,26,27,28,29,30],"welcom":5,"well":2,"window":6,"world":4,"writefil":30}}) \ No newline at end of file diff --git a/docs/text/configuration_file.rst b/docs/text/configuration_file.rst index 089f1ab..1d9b762 100644 --- a/docs/text/configuration_file.rst +++ b/docs/text/configuration_file.rst @@ -40,7 +40,7 @@ The following input lines are: initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] - hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) + ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface Here we first select the physical model and the corresponding template. To add additional models (e.g., blackoil), one could look at the diff --git a/examples/cemracs2023/ccs_control/q_1440000_t_30/co2.mako b/examples/cemracs2023/ccs_control/q_1440000_t_30/co2.mako index afb4cba..a89be19 100644 --- a/examples/cemracs2023/ccs_control/q_1440000_t_30/co2.mako +++ b/examples/cemracs2023/ccs_control/q_1440000_t_30/co2.mako @@ -14,7 +14,7 @@ pressure = 10 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/cemracs2023/ccs_control/q_360000_t_120/co2.mako b/examples/cemracs2023/ccs_control/q_360000_t_120/co2.mako index 16b67e4..7a270d8 100644 --- a/examples/cemracs2023/ccs_control/q_360000_t_120/co2.mako +++ b/examples/cemracs2023/ccs_control/q_360000_t_120/co2.mako @@ -14,7 +14,7 @@ pressure = 10 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/cemracs2023/ccs_control/q_720000_t_60/co2.mako b/examples/cemracs2023/ccs_control/q_720000_t_60/co2.mako index 4f45eca..e71bf85 100644 --- a/examples/cemracs2023/ccs_control/q_720000_t_60/co2.mako +++ b/examples/cemracs2023/ccs_control/q_720000_t_60/co2.mako @@ -14,7 +14,7 @@ pressure = 10 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/cemracs2023/h2_3controls/hyst/h2.mako b/examples/cemracs2023/h2_3controls/hyst/h2.mako index c35ba64..e3500d7 100644 --- a/examples/cemracs2023/h2_3controls/hyst/h2.mako +++ b/examples/cemracs2023/h2_3controls/hyst/h2.mako @@ -13,7 +13,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) #Set the saturation functions krw = "krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw" #Wetting rel perm saturation function [-] diff --git a/examples/cemracs2023/h2_3controls/hyst_wecon/h2.mako b/examples/cemracs2023/h2_3controls/hyst_wecon/h2.mako index f1a5624..1e60ada 100644 --- a/examples/cemracs2023/h2_3controls/hyst_wecon/h2.mako +++ b/examples/cemracs2023/h2_3controls/hyst_wecon/h2.mako @@ -13,7 +13,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) econ = 0.95 #For h2 models, econ for the producer #Set the saturation functions diff --git a/examples/cemracs2023/h2_combinations_in_schedule/dissolution_wecon_hyst/h2.mako b/examples/cemracs2023/h2_combinations_in_schedule/dissolution_wecon_hyst/h2.mako index 1fe2c16..3809147 100644 --- a/examples/cemracs2023/h2_combinations_in_schedule/dissolution_wecon_hyst/h2.mako +++ b/examples/cemracs2023/h2_combinations_in_schedule/dissolution_wecon_hyst/h2.mako @@ -13,7 +13,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) econ = ${econ} #For h2 models, econ for the producer zxy = "300-300*mt.exp(-(x**2)/(2*500**2)) - 0*100*mt.exp(-((x-500)**2)/(2*100**2))" #The function for the reservoir surface diff --git a/examples/cemracs2023/h2_forecast/dissolution_wecon_hyst/h2.mako b/examples/cemracs2023/h2_forecast/dissolution_wecon_hyst/h2.mako index 7f6d0e9..47846a5 100644 --- a/examples/cemracs2023/h2_forecast/dissolution_wecon_hyst/h2.mako +++ b/examples/cemracs2023/h2_forecast/dissolution_wecon_hyst/h2.mako @@ -16,7 +16,7 @@ temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) econ = ${econ} #For h2 models, econ for the producer zxy = "300-300*mt.exp(-(x**2)/(2*500**2)) - 0*100*mt.exp(-((x-500)**2)/(2*100**2))" #The function for the reservoir surface diff --git a/examples/cemracs2023/h2_lab/diss_satfunc_hyst/h2.mako b/examples/cemracs2023/h2_lab/diss_satfunc_hyst/h2.mako index 3d51d09..579dcd4 100644 --- a/examples/cemracs2023/h2_lab/diss_satfunc_hyst/h2.mako +++ b/examples/cemracs2023/h2_lab/diss_satfunc_hyst/h2.mako @@ -13,7 +13,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) #Set the saturation functions krw = "krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw" #Wetting rel perm saturation function [-] diff --git a/examples/cemracs2023/h2_lab/diss_satfunc_hyst_wecon/h2.mako b/examples/cemracs2023/h2_lab/diss_satfunc_hyst_wecon/h2.mako index 1e8c970..57b6f6f 100644 --- a/examples/cemracs2023/h2_lab/diss_satfunc_hyst_wecon/h2.mako +++ b/examples/cemracs2023/h2_lab/diss_satfunc_hyst_wecon/h2.mako @@ -13,7 +13,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) econ = 0.95 #For h2 models, econ for the producer #Set the saturation functions diff --git a/examples/cemracs2023/h2_lab/satfunc_hyst/h2.mako b/examples/cemracs2023/h2_lab/satfunc_hyst/h2.mako index 3e62c2b..35b34e2 100644 --- a/examples/cemracs2023/h2_lab/satfunc_hyst/h2.mako +++ b/examples/cemracs2023/h2_lab/satfunc_hyst/h2.mako @@ -14,7 +14,7 @@ temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e4 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) #Set the saturation functions krw = "krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw" #Wetting rel perm saturation function [-] diff --git a/examples/cemracs2023/proceedings/hwell_hyst/h2.mako b/examples/cemracs2023/proceedings/hwell_hyst/h2.mako index 2a3a247..22d796b 100644 --- a/examples/cemracs2023/proceedings/hwell_hyst/h2.mako +++ b/examples/cemracs2023/proceedings/hwell_hyst/h2.mako @@ -15,7 +15,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e8 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) #Set the saturation functions krw = "krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw" #Wetting rel perm saturation function [-] diff --git a/examples/cemracs2023/proceedings/ml_hwell/h2.mako b/examples/cemracs2023/proceedings/ml_hwell/h2.mako index c9791c2..8161397 100644 --- a/examples/cemracs2023/proceedings/ml_hwell/h2.mako +++ b/examples/cemracs2023/proceedings/ml_hwell/h2.mako @@ -15,7 +15,7 @@ pressure = 40 #Pressure [Bar] on the top temperature = [50,50] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e7 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) #Set the saturation functions krw = "krw * ((sw - swi) / (1.0 - sni -swi)) ** nkrw" #Wetting rel perm saturation function [-] diff --git a/examples/co2.toml b/examples/co2.toml index a3c9393..2eec853 100644 --- a/examples/co2.toml +++ b/examples/co2.toml @@ -15,7 +15,7 @@ temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/co2_hyst_cplog.toml b/examples/co2_hyst_cplog.toml index bb6e484..7c05c8c 100644 --- a/examples/co2_hyst_cplog.toml +++ b/examples/co2_hyst_cplog.toml @@ -23,7 +23,7 @@ temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/co2_tuning.toml b/examples/co2_tuning.toml index c6e8fbb..54cd3e6 100644 --- a/examples/co2_tuning.toml +++ b/examples/co2_tuning.toml @@ -15,7 +15,7 @@ temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "2-2*np.cos((2*np.pi*x/50)) + 10*(x/100)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/examples/h2hysteresis.toml b/examples/h2hysteresis.toml new file mode 100644 index 0000000..77eda04 --- /dev/null +++ b/examples/h2hysteresis.toml @@ -0,0 +1,38 @@ +# pyopmnearwell -i h2hysteresis.toml -o h2hysteresis -m single +#Set mpirun, the full path to the flow executable, and simulator flags (except --output-dir) +flow = "flow --relaxed-max-pv-fraction=0 --enable-tuning=1 --newton-min-iterations=1 --enable-opm-rst-file=true --enable-well-operability-check=false --min-time-step-before-shutting-problematic-wells-in-days=1e-99 --linear-solver=cpr_trueimpes --time-step-control=newtoniterationcount --newton-max-iterations=12 --solver-growth-factor=1.6 --time-step-control-growth-rate=1.1 --solver-restart-factor=0.2 --time-step-control-decay-rate=0.65" + +#Set the model parameters +model = "h2store" #Model: co2store, co2eor, foam, h2store, or saltprec +template = "base" #Template file (see src/pyopmnearwell/templates/) +grid = "cake" #Grid type: cake, radial, core, cartesian2d, coord2d, tensor2d, cartesian, cpg3d, coord3d, or tensor3d +adim = 60 #Grid cake/radial: theta [degrees]; core: input/output pipe length [m]; cartesian2d, coord2d, tensor2d: width[m] +xdim = 1000 #Length [m] (for cartesian/cpg3d/coord3d/tensor3d, Length=Width=2*xdim) +xcn = [200] #Number of x-cells [-]; coordinates for grid type coord2d/coord3d [m]; numbers of x-cells for grid type tensor2d/tensor3d [-] +xfac = 2.1 #Grid cake/radial/cartesian2d/cartesian/cpg3d: exponential factor for the telescopic x-gridding (0 to use an equidistant partition) +diameter = 0.2 #Well diameter [m] +pressure = 40 #Pressure [Bar] on the top +temperature = [50,50] #Top and bottom temperatures [C] +initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) +pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) +zxy = "100*(x/1000)**2" #The function for the reservoir surface +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) + +#Set the saturation functions +krw = "krw * ((sw - swi) / (1.0 -swi)) ** nkrw" #Wetting rel perm saturation function [-] +krn = "krn * ((1.0 - sw - sni) / (1.0 - swi - sni)) ** nkrn" #Non-wetting rel perm saturation function [-] +pcap = "pen * ((sw - swi) / (1.0 - swi)) ** (-(1.0 / npen))" #Capillary pressure saturation function [bar] + +#Properties sat functions: 1) swi [-], 2) sni [-], 3) krw [-], 4) krn [-], 5) pen [bar], 6) nkrw [-], +#7) nkrn [-], 8) npen [-], 9) threshold cP evaluation, 10) ignore swi for cP? (sl* for cplog) +#11) npoints [-] (entry per layer, if hysteresis, additional entries per layer) +safu = [[0.15,0,1,0.6,1,5,2,2,8.5e-5,0,1000], [0.15,0.25,2,0.6,1,5,2,2,8.5e-5,0,1000]] + +#Properties rock: 1) Kxy [mD], 2) Kz [mD], 3) phi [-], 4) thickness [m], and 5) no cells in the z dir [-] (entry per layer) +rock = [[1013.25,101.325,0.25,50,50]] + +#Define the injection values (entry per change in the schedule): +#1) injection time [d], 2) time step size to write results [d], 3) fluid (0 wetting, 1 non-wetting), +#4) injection rates [kg/day] (for h2store, 5) minimum BHP for producer [Bar]). +#If --enable-tuning=1, then last entry for TUNING values as described in the OPM manual. +inj = [[30,5,1,10000,"1e-2 1* 1e-12"],[30,5,1,0,"1e-2 1* 1e-12"],[30,5,1,-20000,3e1,"1e-2 1* 1e-12"]] diff --git a/examples/hysteresis_models/co2.mako b/examples/hysteresis_models/co2.mako index db424a4..5b05e30 100644 --- a/examples/hysteresis_models/co2.mako +++ b/examples/hysteresis_models/co2.mako @@ -15,8 +15,8 @@ temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] -% if name != "nohysteresis": -hysteresis = "${name}" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +% if value != "nohysteresis": +ehystr = "${value}" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) % endif #Set the saturation functions diff --git a/examples/hysteresis_models/run_simulations.py b/examples/hysteresis_models/run_simulations.py index 8402074..d721e0e 100644 --- a/examples/hysteresis_models/run_simulations.py +++ b/examples/hysteresis_models/run_simulations.py @@ -9,9 +9,9 @@ from mako.template import Template command_processes = [] -for name in ["nohysteresis", "Carlson", "Killough"]: +for name, value in zip(["nohysteresis", "Carlson", "Killough"], ["nohysteresis", "1* 0 2* KR", "1* 2 2* KR"]): mytemplate = Template(filename="co2.mako") - var = {"name": name} + var = {"value": value} filledtemplate = mytemplate.render(**var) with open( f"co2_{name}.toml", diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection.toml index b356118..6759542 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection.toml @@ -14,7 +14,7 @@ pressure = 9.6e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection_no_salt_precipitation.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection_no_salt_precipitation.toml index 4c5286f..f6ab1c5 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection_no_salt_precipitation.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_adaptive_injection_no_salt_precipitation.toml @@ -14,7 +14,7 @@ pressure = 9.6e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] salinity = 2.72 #Brine salinity [1e-3kg-M/kg] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection.toml index b1955f0..eef9ca6 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection.toml @@ -14,7 +14,7 @@ pressure = 9.6e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection_no_salt_precipitation.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection_no_salt_precipitation.toml index 4fdad25..7154b03 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection_no_salt_precipitation.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case2/well_uniform_injection_no_salt_precipitation.toml @@ -14,7 +14,7 @@ pressure = 9.6e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] salinity = 2.72 #Brine salinity [1e-3kg-M/kg] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/higher_top_to_lower_bottom_capillary_number.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/higher_top_to_lower_bottom_capillary_number.toml index 2a99eb4..47dae93 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/higher_top_to_lower_bottom_capillary_number.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/higher_top_to_lower_bottom_capillary_number.toml @@ -14,7 +14,7 @@ pressure = 2.13e2 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/homogeneous_equivalent_system.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/homogeneous_equivalent_system.toml index ef5dc61..35da18e 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/homogeneous_equivalent_system.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/homogeneous_equivalent_system.toml @@ -14,7 +14,7 @@ pressure = 2.13e2 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/lower_top_to_higher_bottom_capillary_number.toml b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/lower_top_to_higher_bottom_capillary_number.toml index 1781386..035a5ec 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/lower_top_to_higher_bottom_capillary_number.toml +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case3/lower_top_to_higher_bottom_capillary_number.toml @@ -14,7 +14,7 @@ pressure = 2.13e2 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/including_salt_precipitation/co2.mako b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/including_salt_precipitation/co2.mako index 4411c94..8f78225 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/including_salt_precipitation/co2.mako +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/including_salt_precipitation/co2.mako @@ -14,7 +14,7 @@ pressure = 213 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] pcfact = 0.5 #Exponent for the capillary pressure factor (Leveret J-function) [-] diff --git a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/neglecting_salt_precipitation/co2.mako b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/neglecting_salt_precipitation/co2.mako index 2213597..74e1c02 100644 --- a/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/neglecting_salt_precipitation/co2.mako +++ b/publications/Impact_of_Intermittency_on_Salt_Precipitation_During_CO2_Injection_2024_SPE/case4/neglecting_salt_precipitation/co2.mako @@ -14,7 +14,7 @@ pressure = 213 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = -1 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) rockcomp = 8.5e-5 #Rock compressibility [1/Bar] salinity = 2.72 #Brine salinity [1e-3kg-M/kg] diff --git a/src/pyopmnearwell/templates/co2store/base.mako b/src/pyopmnearwell/templates/co2store/base.mako index b722ec6..5254f3f 100644 --- a/src/pyopmnearwell/templates/co2store/base.mako +++ b/src/pyopmnearwell/templates/co2store/base.mako @@ -32,8 +32,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -72,10 +72,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -87,11 +87,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/co2store/no_disgas_no_diffusion.mako b/src/pyopmnearwell/templates/co2store/no_disgas_no_diffusion.mako index 33a62b0..4e7653a 100644 --- a/src/pyopmnearwell/templates/co2store/no_disgas_no_diffusion.mako +++ b/src/pyopmnearwell/templates/co2store/no_disgas_no_diffusion.mako @@ -20,7 +20,7 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} WATER GAS @@ -30,7 +30,7 @@ METRIC START 1 JAN 2000 / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -70,9 +70,9 @@ PROPS INCLUDE ${dic['tables_file']} / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -84,11 +84,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/co2store/nosaltprec.mako b/src/pyopmnearwell/templates/co2store/nosaltprec.mako index 5944eca..f6d69cf 100644 --- a/src/pyopmnearwell/templates/co2store/nosaltprec.mako +++ b/src/pyopmnearwell/templates/co2store/nosaltprec.mako @@ -32,8 +32,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -72,10 +72,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -87,11 +87,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/co2store/salinity.mako b/src/pyopmnearwell/templates/co2store/salinity.mako index fe9f624..3fc03c4 100644 --- a/src/pyopmnearwell/templates/co2store/salinity.mako +++ b/src/pyopmnearwell/templates/co2store/salinity.mako @@ -31,8 +31,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -71,10 +71,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -86,11 +86,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/co2store/salinity_uniform_inj.mako b/src/pyopmnearwell/templates/co2store/salinity_uniform_inj.mako index 463a37b..d5a463d 100644 --- a/src/pyopmnearwell/templates/co2store/salinity_uniform_inj.mako +++ b/src/pyopmnearwell/templates/co2store/salinity_uniform_inj.mako @@ -31,8 +31,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -71,10 +71,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -86,11 +86,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/co2store/topinjection.mako b/src/pyopmnearwell/templates/co2store/topinjection.mako index 39bc227..36cb0e8 100644 --- a/src/pyopmnearwell/templates/co2store/topinjection.mako +++ b/src/pyopmnearwell/templates/co2store/topinjection.mako @@ -32,8 +32,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -72,10 +72,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -87,11 +87,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/H2CH4.mako b/src/pyopmnearwell/templates/h2store/H2CH4.mako index e5aeaef..8e615d4 100644 --- a/src/pyopmnearwell/templates/h2store/H2CH4.mako +++ b/src/pyopmnearwell/templates/h2store/H2CH4.mako @@ -30,8 +30,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -113,20 +113,20 @@ PVTG INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["salinity"]>0: SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/base.mako b/src/pyopmnearwell/templates/h2store/base.mako index 4aa7295..f33e046 100644 --- a/src/pyopmnearwell/templates/h2store/base.mako +++ b/src/pyopmnearwell/templates/h2store/base.mako @@ -30,8 +30,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"] !=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"] !=0: SATOPTS HYSTER / @@ -70,10 +70,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -85,11 +85,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/biofilm.mako b/src/pyopmnearwell/templates/h2store/biofilm.mako index 9414da2..61506c6 100644 --- a/src/pyopmnearwell/templates/h2store/biofilm.mako +++ b/src/pyopmnearwell/templates/h2store/biofilm.mako @@ -1,5 +1,6 @@ <% import math as mt +tabdims=((dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0]) %>-- Copyright (C) 2025-2026, NORCE Research AS -- This deck was generated by pyopmnearwell https://github.com/cssr-tools/pyopmnearwell ---------------------------------------------------------------------------- @@ -31,8 +32,8 @@ EQLDIMS / TABDIMS -${(dic["hysteresis"]+1)*(dic['satnum']+dic['perforations'][0])} / -% if dic["hysteresis"]!=0: +${tabdims} / +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -71,17 +72,20 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1 ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* KR / +${dic["ehystr"]} / % endif BIOFPARA -- BDEN DEATH GROWTH HALF YIELD FACTOR ATACH DETRAT DETEXP UREA HALF CDEN YUTOC -% for i in range(dic["satnum"]): +% for i in range(len(dic['biof'])): ${dic['biof'][int(dic["layers"][i])][0]} ${dic['biof'][int(dic["layers"][i])][1]} ${dic['biof'][int(dic["layers"][i])][2]} ${dic['biof'][int(dic["layers"][i])][3]} ${dic['biof'][int(dic["layers"][i])][4]} 1 ${dic['biof'][int(dic["layers"][i])][5]} ${dic['biof'][int(dic["layers"][i])][6]} ${dic['biof'][int(dic["layers"][i])][7]} 0 0 0 0 / % endfor +% for i in range(tabdims - len(dic['biof'])): +/ +%endfor INCLUDE PERMFACT.INC / @@ -100,11 +104,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/gaswater.mako b/src/pyopmnearwell/templates/h2store/gaswater.mako index 4db8a1a..f127779 100644 --- a/src/pyopmnearwell/templates/h2store/gaswater.mako +++ b/src/pyopmnearwell/templates/h2store/gaswater.mako @@ -26,8 +26,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -66,10 +66,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1 ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* KR / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -81,11 +81,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/hwell.mako b/src/pyopmnearwell/templates/h2store/hwell.mako index e9f2164..a484f53 100644 --- a/src/pyopmnearwell/templates/h2store/hwell.mako +++ b/src/pyopmnearwell/templates/h2store/hwell.mako @@ -30,8 +30,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -70,10 +70,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -85,11 +85,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/hwellnoise.mako b/src/pyopmnearwell/templates/h2store/hwellnoise.mako index 68d4014..a3a489c 100644 --- a/src/pyopmnearwell/templates/h2store/hwellnoise.mako +++ b/src/pyopmnearwell/templates/h2store/hwellnoise.mako @@ -33,8 +33,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -82,9 +82,9 @@ PROPS INCLUDE TABLES.INC / -% if dic["hysteresis"] !=0: +% if dic["ehystr"] !=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -96,11 +96,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/nodissolution.mako b/src/pyopmnearwell/templates/h2store/nodissolution.mako index 2874f26..3935c25 100644 --- a/src/pyopmnearwell/templates/h2store/nodissolution.mako +++ b/src/pyopmnearwell/templates/h2store/nodissolution.mako @@ -30,8 +30,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -70,10 +70,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -85,11 +85,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/h2store/okoroafor2023.mako b/src/pyopmnearwell/templates/h2store/okoroafor2023.mako index 02e0da2..01a09c4 100644 --- a/src/pyopmnearwell/templates/h2store/okoroafor2023.mako +++ b/src/pyopmnearwell/templates/h2store/okoroafor2023.mako @@ -31,8 +31,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -71,10 +71,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif % if dic["rockcomp"]>0: @@ -86,11 +86,11 @@ ROCK SALINITY ${dic["salinity"]} / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/saltprec/base.mako b/src/pyopmnearwell/templates/saltprec/base.mako index 08cd077..f2a7929 100644 --- a/src/pyopmnearwell/templates/saltprec/base.mako +++ b/src/pyopmnearwell/templates/saltprec/base.mako @@ -34,8 +34,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -74,10 +74,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif SALTSOL @@ -96,11 +96,11 @@ PERMFACT.INC / INCLUDE PCFACT.INC / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/templates/saltprec/uniform.mako b/src/pyopmnearwell/templates/saltprec/uniform.mako index b429cb5..8195813 100644 --- a/src/pyopmnearwell/templates/saltprec/uniform.mako +++ b/src/pyopmnearwell/templates/saltprec/uniform.mako @@ -34,8 +34,8 @@ EQLDIMS / TABDIMS -${f"{(1*(dic['hysteresis']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["hysteresis"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} -% if dic["hysteresis"]!=0: +${f"{(1*(dic['ehystr']!=0)+1)*(dic['satnum']+dic['perforations'][0])} /" if (1*(dic["ehystr"]!=0)+1)*(dic['satnum']+dic['perforations'][0])>1 else "/"} +% if dic["ehystr"]!=0: SATOPTS HYSTER / @@ -74,10 +74,10 @@ PROPS ---------------------------------------------------------------------------- INCLUDE TABLES.INC / -% if dic["hysteresis"]!=0: +% if dic["ehystr"]!=0: EHYSTR -1* ${0 if dic["hysteresis"].upper()=="CARLSON" else 2} 2* BOTH / +${dic["ehystr"]} / % endif SALTSOL @@ -96,11 +96,11 @@ PERMFACT.INC / INCLUDE PCFACT.INC / % endif -% if dic["hysteresis"]!=0 or dic["fluxnum"]: +% if dic["ehystr"]!=0 or dic["fluxnum"]: ---------------------------------------------------------------------------- REGIONS ---------------------------------------------------------------------------- -% if dic["hysteresis"]!=0 and dic["fluxnum"]: +% if dic["ehystr"]!=0 and dic["fluxnum"]: COPY FLUXNUM SATNUM / FLUXNUM IMBNUM / diff --git a/src/pyopmnearwell/utils/inputvalues.py b/src/pyopmnearwell/utils/inputvalues.py index 5ff78cb..e6f3b1b 100644 --- a/src/pyopmnearwell/utils/inputvalues.py +++ b/src/pyopmnearwell/utils/inputvalues.py @@ -12,7 +12,7 @@ def process_input(dic, in_file): """Process the input file""" for name in [ - "hysteresis", + "ehystr", "rockcomp", "xflow", "confact", @@ -37,13 +37,13 @@ def process_input(dic, in_file): dic["template"] = "base" if "model" not in dic: dic["model"] = "co2store" - if "hysteresis" not in dic: - dic["hysteresis"] = 0 - dic["imbnum"] = 2 if dic["hysteresis"] != 0 else 1 + if "ehystr" not in dic: + dic["ehystr"] = 0 + dic["imbnum"] = 2 if dic["ehystr"] != 0 else 1 return dic dic["satnum"] = len(dic["rock"]) - dic["perforations"][0] dic["fluxnum"] = len(dic["rock"]) > 1 - dic["imbnum"] = 2 if dic["hysteresis"] != 0 else 1 + dic["imbnum"] = 2 if dic["ehystr"] != 0 else 1 zdim, znc, dic["homo"], tmp = 0.0, 0, True, dic["rock"][0][3] for index, rock in enumerate(dic["rock"]): if len(rock) > 3: diff --git a/src/pyopmnearwell/utils/writefile.py b/src/pyopmnearwell/utils/writefile.py index 5d5e6fa..a24dfa4 100644 --- a/src/pyopmnearwell/utils/writefile.py +++ b/src/pyopmnearwell/utils/writefile.py @@ -580,35 +580,21 @@ def generate_saturation_functions_gsf_wsf(dic): safeglob = {"__builtins__": {}, "np": np} - safug = [[0.0] * len(dic["safu"][0]) for _ in range(len(dic["safu"]))] - safuw = [[0.0] * len(dic["safu"][0]) for _ in range(len(dic["safu"]))] - - for i in range(len(dic["safu"])): - for j in range(len(dic["safu"][i])): - value = dic["safu"][i][j] - safug[i][j] = value - - if dic["imbnum"] == 2 and j == 1 and len(dic["safu"]) / dic["imbnum"] <= i: - idx = i % (len(dic["safu"]) // dic["imbnum"]) - safuw[i][j] = dic["safu"][idx][j] - else: - safuw[i][j] = value - lines = [] lines.append("GSF\n") - for j, para in enumerate(safug): - if j > 0 and safug[j - 1] == para: + for j, para in enumerate(dic["safu"]): + if j > 0 and dic["safu"][j - 1] == para: lines.append("/\n") continue swi = para[0] sni = para[1] - krn = para[3] + krn_end = para[3] pen = para[4] nkrn = para[6] npen = para[7] - sco2 = np.linspace(0, 1 - swi, para[10]) + sco2 = np.linspace(sni, 1 - swi, para[10]) sw_values = 1 - sco2 pc_sw_values = sw_values + para[8] @@ -619,7 +605,7 @@ def generate_saturation_functions_gsf_wsf(dic): "sw": sw_values, "swi": swi, "sni": sni, - "krn": krn, + "krn": krn_end, "nkrn": nkrn, }, ) @@ -642,22 +628,23 @@ def generate_saturation_functions_gsf_wsf(dic): ) for i, value in enumerate(sco2): - lines.append(f"{value:E} {krn_vals[i]:E} {pcw_vals[i]:E} \n") + krn_value = 0.0 if i == 0 else krn_vals[i] + lines.append(f"{value:E} {krn_value:E} {pcw_vals[i]:E} \n") lines.append("/\n") lines.append("WSF\n") - for j, para in enumerate(safuw): - if j > 0 and safuw[j - 1] == para: + for j, para in enumerate(dic["safu"]): + if j > 0 and dic["safu"][j - 1] == para: lines.append("/\n") continue swi = para[0] sni = para[1] - krw = para[2] + krw_end = para[2] nkrw = para[5] - sw_values = np.linspace(swi, 1, para[10]) + sw_values = np.linspace(swi, 1 - sni, para[10]) krw_vals = eval( # pylint: disable=eval-used krw_code, @@ -666,7 +653,7 @@ def generate_saturation_functions_gsf_wsf(dic): "sw": sw_values, "swi": swi, "sni": sni, - "krw": krw, + "krw": krw_end, "nkrw": nkrw, }, ) @@ -674,7 +661,8 @@ def generate_saturation_functions_gsf_wsf(dic): krw_vals = np.maximum(0, krw_vals) for i, value in enumerate(sw_values): - lines.append(f"{value:E} {krw_vals[i]:E}\n") + krw_value = 0.0 if i == 0 else krw_vals[i] + lines.append(f"{value:E} {krw_value:E}\n") lines.append("/\n") diff --git a/tests/geometries/cake.toml b/tests/geometries/cake.toml index 604b7a0..aeb4398 100644 --- a/tests/geometries/cake.toml +++ b/tests/geometries/cake.toml @@ -14,7 +14,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/cartesian.toml b/tests/geometries/cartesian.toml index 4105d8e..3a52d8f 100644 --- a/tests/geometries/cartesian.toml +++ b/tests/geometries/cartesian.toml @@ -13,7 +13,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/cartesian2d.toml b/tests/geometries/cartesian2d.toml index c6392b0..953cde8 100644 --- a/tests/geometries/cartesian2d.toml +++ b/tests/geometries/cartesian2d.toml @@ -14,7 +14,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/coord2d.toml b/tests/geometries/coord2d.toml index 644a369..9d2b760 100644 --- a/tests/geometries/coord2d.toml +++ b/tests/geometries/coord2d.toml @@ -14,7 +14,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/coord3d.toml b/tests/geometries/coord3d.toml index f8d4012..b8fadc9 100644 --- a/tests/geometries/coord3d.toml +++ b/tests/geometries/coord3d.toml @@ -13,7 +13,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/cpg3d.toml b/tests/geometries/cpg3d.toml index cca00ce..7eaac2d 100644 --- a/tests/geometries/cpg3d.toml +++ b/tests/geometries/cpg3d.toml @@ -13,7 +13,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/radial.toml b/tests/geometries/radial.toml index 7f064e5..4aff46b 100644 --- a/tests/geometries/radial.toml +++ b/tests/geometries/radial.toml @@ -14,7 +14,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/tensor2d.toml b/tests/geometries/tensor2d.toml index 27bb53c..2cc3094 100644 --- a/tests/geometries/tensor2d.toml +++ b/tests/geometries/tensor2d.toml @@ -14,7 +14,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/geometries/tensor3d.toml b/tests/geometries/tensor3d.toml index d3d4350..bd5b048 100644 --- a/tests/geometries/tensor3d.toml +++ b/tests/geometries/tensor3d.toml @@ -13,7 +13,7 @@ pressure = 1e1 #Pressure [Bar] on the top temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e5 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) -hysteresis = "Killough" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 2 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) zxy = "20-20*np.cos((2*np.pi*x/250)) + 200*(x/1000)**2" #The function for the reservoir surface #Set the saturation functions diff --git a/tests/models/co2store.toml b/tests/models/co2store.toml index 29e577c..62c4d4c 100644 --- a/tests/models/co2store.toml +++ b/tests/models/co2store.toml @@ -15,7 +15,7 @@ temperature = [40,40] #Top and bottom temperatures [C] initialphase = 0 #Initial phase in the reservoir (0 wetting, 1 non-wetting) pvmult = 1e10 #Pore volume multiplier on the boundary [-] (-1 to ignore; 0 to use well producers instead) perforations = [1,5,6] #Activate perforations [-], number of well perforations [-], and length [m] -hysteresis = "Carlson" #Add hysteresis (Killough or Carlson, 0 by default, i.e., no hysteresis) +ehystr = "1* 0 2* KR" #Define Hysteresis model and parameters (see EHYSTR in the OPM Flow manual) saltprops = [138,268,2153] #Initial salt concentration [kg/m3], salt solubility limit [kg/m3], and precipitated salt density [kg/m3] #Set the saturation functions