def from_ecl_init_file(ecl_init_file: EclFile) -> Optional["Water"]: intehead = ecl_init_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) intehead_phase = intehead[InitFileDefinitions.INTEHEAD_PHASE_INDEX] if (intehead_phase & (1 << 2)) == 0: return None raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") raw.num_primary = 1 raw.num_rows = 1 raw.num_cols = 5 raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTG_ITEM] if raw.num_tables == 0: return None num_tab_elements = ( raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables ) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTW_OFFSET_ITEM] - 1 raw.data = tab[start : start + num_tab_elements] rhos = surface_mass_density(ecl_init_file, EclPhaseIndex.Aqua) return Water(raw, rhos)
def from_ecl_init_file(ecl_init_file: EclFile, keep_unit_system: bool = False) -> Optional["Oil"]: """Reads the given Eclipse file and creates an Oil object from its data. Args: ecl_init_file: Eclipse INIT file keep_unit_system: Set to True if the unit system used in the Eclipse file shall be kept, False if SI shall be used. Returns: An Oil object or None if the data in the Eclipse file was invalid """ intehead = ecl_init_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) logihead = ecl_init_file.__getitem__(InitFileDefinitions.LOGIHEAD_KW) is_is_const_compr = bool(logihead[is_const_compr_index()]) raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") num_rs = tab_dims[InitFileDefinitions.TABDIMS_NRPVTO_ITEM] raw.num_rows = tab_dims[InitFileDefinitions.TABDIMS_NPPVTO_ITEM] raw.num_cols = 5 raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTO_ITEM] if raw.num_tables == 0: return None if logihead[InitFileDefinitions.LOGIHEAD_RS_INDEX]: raw.num_primary = num_rs else: raw.num_primary = 1 num_tab_elements = raw.num_primary * raw.num_tables start = tab_dims[InitFileDefinitions.TABDIMS_JBPVTO_OFFSET_ITEM] - 1 raw.primary_key = tab[start:start + num_tab_elements] num_tab_elements = (raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTO_OFFSET_ITEM] - 1 raw.data = tab[start:start + num_tab_elements] surface_mass_densities = surface_mass_density(ecl_init_file, EclPhaseIndex.Liquid, keep_unit_system) return Oil( raw, intehead[InitFileDefinitions.INTEHEAD_UNIT_INDEX], is_is_const_compr, surface_mass_densities, keep_unit_system, )
def from_ecl_init_file( ecl_init_file: EclFile, keep_unit_system: bool = False ) -> Optional["Water"]: """Reads the given Eclipse file and creates a Water object from its data. Args: ecl_init_file: Eclipse INIT file keep_unit_system: Set to True if the unit system used in the Eclipse file shall be kept, False if SI shall be used. Returns: A Water object or None if the data in the Eclipse file was invalid """ intehead = ecl_init_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) intehead_phase = intehead[InitFileDefinitions.INTEHEAD_PHASE_INDEX] if (intehead_phase & (1 << 2)) == 0: return None raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") raw.num_primary = 1 # Single record per region raw.num_rows = 1 # Single record per region raw.num_cols = 5 # [ Pw, 1/B, Cw, 1/(B*mu), Cw - Cv ] raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTW_ITEM] if raw.num_tables == 0: return None num_tab_elements = ( raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables ) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTW_OFFSET_ITEM] - 1 raw.data = tab[start : start + num_tab_elements] surface_mass_densities = surface_mass_density( ecl_init_file, EclPhaseIndex.AQUA, keep_unit_system ) return Water( raw, intehead[InitFileDefinitions.INTEHEAD_UNIT_INDEX], surface_mass_densities, keep_unit_system, )
def from_ecl_init_file(ecl_init_file: EclFile) -> Optional["Gas"]: intehead = ecl_init_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) intehead_phase = intehead[InitFileDefinitions.INTEHEAD_PHASE_INDEX] if (intehead_phase & (1 << 2)) == 0: return None raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") num_rv = tab_dims[InitFileDefinitions.TABDIMS_NRPVTG_ITEM] num_pg = tab_dims[InitFileDefinitions.TABDIMS_NPPVTG_ITEM] raw.num_cols = 5 raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTG_ITEM] if raw.num_tables == 0: return None logihead = ecl_init_file.__getitem__(InitFileDefinitions.LOGIHEAD_KW) if logihead[InitFileDefinitions.LOGIHEAD_RV_INDEX]: raw.num_primary = num_pg raw.num_rows = num_rv else: raw.num_primary = 1 raw.num_rows = num_pg num_tab_elements = raw.num_primary * raw.num_tables start = tab_dims[InitFileDefinitions.TABDIMS_JBPVTG_OFFSET_ITEM] - 1 raw.primary_key = tab[start : start + num_tab_elements] num_tab_elements = ( raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables ) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTG_OFFSET_ITEM] - 1 raw.data = tab[start : start + num_tab_elements] rhos = surface_mass_density(ecl_init_file, EclPhaseIndex.Vapour) return Gas(raw, rhos)
def surface_mass_density(ecl_file: EclFile, phase: EclPhaseIndex, keep_unit_system: bool = True) -> np.ndarray: """Extracts the surface mass density from the given Eclipse file for the given phase. Args: ecl_file: The Eclipse file to extract data from phase: Fluid phase to extract data for Returns: Surface mass density values. """ if phase is EclPhaseIndex.LIQUID: col = 0 elif phase is EclPhaseIndex.AQUA: col = 1 elif phase is EclPhaseIndex.VAPOUR: col = 2 else: raise AttributeError("Phase must be Liquid, Water or Vapour.") tabdims = ecl_file.__getitem__("TABDIMS") tab = ecl_file.__getitem__("TAB") start = tabdims[InitFileDefinitions.TABDIMS_IBDENS_OFFSET_ITEM] - 1 nreg = tabdims[InitFileDefinitions.TABDIMS_NTDENS_ITEM] rho = tab[start + nreg * (col + 0):start + nreg * (col + 1)] intehead = ecl_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) unit_system = EclUnits.create_unit_system( intehead[InitFileDefinitions.INTEHEAD_UNIT_INDEX]) if not keep_unit_system: rho = [ Unit.Convert.from_(rho_i, unit_system.density().value) for rho_i in rho ] return rho
def surface_mass_density(ecl_file: EclFile, phase: EclPhaseIndex) -> List[float]: if phase is EclPhaseIndex.Liquid: col = 0 elif phase is EclPhaseIndex.Aqua: col = 1 elif phase is EclPhaseIndex.Vapour: col = 2 else: col = -1 if col == -1: raise AttributeError("Phase must be Liquid, Aqua or Vapour.") tabdims = ecl_file.__getitem__("TABDIMS") tab = ecl_file.__getitem__("TAB") start = tabdims[InitFileDefinitions.TABDIMS_IBDENS_OFFSET_ITEM] - 1 nreg = tabdims[InitFileDefinitions.TABDIMS_NTDENS_ITEM] rho = [tab[start + nreg * (col + 0)], tab[start + nreg * (col + 1)]] return rho
def from_ecl_init_file(ecl_init_file: EclFile) -> Optional["Oil"]: logihead = ecl_init_file.__getitem__(InitFileDefinitions.LOGIHEAD_KW) is_const_compr = bool(logihead[const_compr_index()]) raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") num_rs = tab_dims[InitFileDefinitions.TABDIMS_NRPVTO_ITEM] raw.num_rows = tab_dims[InitFileDefinitions.TABDIMS_NPPVTO_ITEM] raw.num_cols = 5 raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTO_ITEM] if raw.num_tables == 0: return None if logihead[InitFileDefinitions.LOGIHEAD_RS_INDEX]: raw.num_primary = num_rs else: raw.num_primary = 1 num_tab_elements = raw.num_primary * raw.num_tables start = tab_dims[InitFileDefinitions.TABDIMS_JBPVTO_OFFSET_ITEM] - 1 raw.primary_key = tab[start : start + num_tab_elements] num_tab_elements = ( raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables ) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTO_OFFSET_ITEM] - 1 raw.data = tab[start : start + num_tab_elements] rhos = surface_mass_density(ecl_init_file, EclPhaseIndex.Liquid) return Oil(raw, is_const_compr, rhos)
def from_ecl_init_file(ecl_init_file: EclFile, keep_unit_system: bool = True) -> Optional["Gas"]: """Reads the given Eclipse file and creates a Gas object from its data. Args: ecl_init_file: Eclipse INIT file keep_unit_system: Set to True if the unit system used in the Eclipse file shall be kept, False if SI shall be used. Returns: A Gas object or None if the data in the Eclipse file was invalid """ intehead = ecl_init_file.__getitem__(InitFileDefinitions.INTEHEAD_KW) intehead_phase = intehead[InitFileDefinitions.INTEHEAD_PHASE_INDEX] if (intehead_phase & (1 << 2)) == 0: return None raw = EclPropertyTableRawData() tab_dims = ecl_init_file.__getitem__("TABDIMS") tab = ecl_init_file.__getitem__("TAB") num_rv = tab_dims[InitFileDefinitions.TABDIMS_NRPVTG_ITEM] num_pg = tab_dims[InitFileDefinitions.TABDIMS_NPPVTG_ITEM] raw.num_cols = 5 raw.num_tables = tab_dims[InitFileDefinitions.TABDIMS_NTPVTG_ITEM] if raw.num_tables == 0: return None logihead = ecl_init_file.__getitem__(InitFileDefinitions.LOGIHEAD_KW) if logihead[InitFileDefinitions.LOGIHEAD_RV_INDEX]: raw.num_primary = num_pg raw.num_rows = num_rv else: raw.num_primary = 1 raw.num_rows = num_pg num_tab_elements = raw.num_primary * raw.num_tables start = tab_dims[InitFileDefinitions.TABDIMS_JBPVTG_OFFSET_ITEM] - 1 raw.primary_key = tab[start:start + num_tab_elements] num_tab_elements = (raw.num_primary * raw.num_rows * raw.num_cols * raw.num_tables) start = tab_dims[InitFileDefinitions.TABDIMS_IBPVTG_OFFSET_ITEM] - 1 raw.data = tab[start:start + num_tab_elements] surface_mass_densities = ( surface_mass_density(ecl_init_file, EclPhaseIndex.LIQUID, keep_unit_system), surface_mass_density(ecl_init_file, EclPhaseIndex.VAPOUR, keep_unit_system), ) return Gas( raw, intehead[InitFileDefinitions.INTEHEAD_UNIT_INDEX], surface_mass_densities, keep_unit_system, )