Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
steplist = parse_opmio_tstep_rec(rec)
# Assuming not LAB units, then the unit is days.
days = sum(steplist)
date += datetime.timedelta(days=days)
logger.info(
"Advancing %s days to %s through TSTEP", str(days), str(date)
)
elif kword.name == "COMPDAT":
for rec in kword: # Loop over the lines inside COMPDAT record
rec_data = parse_opmio_deckrecord(
rec, "COMPDAT", renamer=COMPDAT_RENAMER
)
rec_data["DATE"] = date
compdatrecords.append(rec_data)
elif kword.name == "COMPSEGS":
wellname = parse_opmio_deckrecord(
kword[0], "COMPSEGS", itemlistname="records", recordindex=0
)["WELL"]
for recidx in range(1, len(kword)):
rec = kword[recidx]
rec_data = parse_opmio_deckrecord(
rec, "COMPSEGS", itemlistname="records", recordindex=1
)
rec_data["WELL"] = wellname
rec_data["DATE"] = date
compsegsrecords.append(rec_data)
elif kword.name == "WELSEGS":
# First record contains meta-information for well
# (opm deck returns default values for unspecified items.)
welsegsdict = parse_opmio_deckrecord(
kword[0], "WELSEGS", itemlistname="records", recordindex=0
)
if kword.name == "GRUPTREE":
found_gruptree = True
for edgerec in kword:
edge_dict = parse_opmio_deckrecord(edgerec, "GRUPTREE")
currentedges[
(edge_dict["CHILD_GROUP"], edge_dict["PARENT_GROUP"])
] = "GRUPTREE"
if kword.name == "WELSPECS" and welspecs:
found_welspecs = True
for wellrec in kword:
wspc_dict = parse_opmio_deckrecord(wellrec, "WELSPECS")
currentedges[(wspc_dict["WELL"], wspc_dict["GROUP"])] = "WELSPECS"
if kword.name == "GRUPNET":
found_grupnet = True
for rec in kword:
grupnet_data = parse_opmio_deckrecord(rec, "GRUPNET")
grupnetrecords.append(grupnet_data)
grupnet_df = (
pd.DataFrame(grupnetrecords)
.drop_duplicates(subset="NAME", keep="last")
.set_index("NAME")
)
# Ensure we also store any tree information found after the last DATE statement
if found_gruptree or found_welspecs:
for edgename, value in currentedges.items():
rec_dict = {
"DATE": date,
"CHILD": edgename[0],
"PARENT": edgename[1],
"KEYWORD": value,
}
deck (opm.io Deck or EclFiles): Eclipse deck
"""
if isinstance(deck, EclFiles):
deck = deck.get_ecldeck()
# In[91]: list(deck['FAULTS'][0])
# Out[91]: [[u'F1'], [36], [36], [41], [42], [1], [14], [u'I']]
data = []
# It is allowed in Eclipse to use the keyword FAULTS
# as many times as needed. Thus we need to loop in some way:
for keyword in deck:
if keyword.name == "FAULTS":
for rec in keyword:
# Each record now has a range potentially in three
# dimensions for the fault, unroll this:
frec_dict = parse_opmio_deckrecord(rec, "FAULTS")
faultname = frec_dict["NAME"]
faultface = frec_dict["FACE"]
for i_idx in range(frec_dict["IX1"], frec_dict["IX2"] + 1):
for j_idx in range(frec_dict["IY1"], frec_dict["IY2"] + 1):
for k_idx in range(frec_dict["IZ1"], frec_dict["IZ2"] + 1):
data.append([faultname, i_idx, j_idx, k_idx, faultface])
return pd.DataFrame(columns=COLUMNS, data=data)
compsegsrecords.append(rec_data)
elif kword.name == "WELSEGS":
# First record contains meta-information for well
# (opm deck returns default values for unspecified items.)
welsegsdict = parse_opmio_deckrecord(
kword[0], "WELSEGS", itemlistname="records", recordindex=0
)
# Loop over all subsequent records.
for recidx in range(1, len(kword)):
rec = kword[recidx]
# WARNING: We assume that SEGMENT1 === SEGMENT2 (!!!) (if not,
# we need to loop over a range just as for layer in compdat)
rec_data = welsegsdict.copy()
rec_data["DATE"] = date
rec_data.update(
parse_opmio_deckrecord(
rec, "WELSEGS", itemlistname="records", recordindex=1
)
)
if "INFO_TYPE" in rec_data and rec_data["INFO_TYPE"] == "ABS":
rec_data["SEGMENT_MD"] = rec_data["SEGMENT_LENGTH"]
welsegsrecords.append(rec_data)
elif kword.name == "TSTEP":
logger.warning("Possible premature stop at first TSTEP")
break
compdat_df = pd.DataFrame(compdatrecords)
if unroll and not compdat_df.empty:
compdat_df = unrolldf(compdat_df, "K1", "K2")
compsegs_df = pd.DataFrame(compsegsrecords)
"Advancing %s days to %s through TSTEP", str(days), str(date)
)
else:
logger.critical("BUG: Should not get here")
return pd.DataFrame()
if kword.name == "GRUPTREE":
found_gruptree = True
for edgerec in kword:
edge_dict = parse_opmio_deckrecord(edgerec, "GRUPTREE")
currentedges[
(edge_dict["CHILD_GROUP"], edge_dict["PARENT_GROUP"])
] = "GRUPTREE"
if kword.name == "WELSPECS" and welspecs:
found_welspecs = True
for wellrec in kword:
wspc_dict = parse_opmio_deckrecord(wellrec, "WELSPECS")
currentedges[(wspc_dict["WELL"], wspc_dict["GROUP"])] = "WELSPECS"
if kword.name == "GRUPNET":
found_grupnet = True
for rec in kword:
grupnet_data = parse_opmio_deckrecord(rec, "GRUPNET")
grupnetrecords.append(grupnet_data)
grupnet_df = (
pd.DataFrame(grupnetrecords)
.drop_duplicates(subset="NAME", keep="last")
.set_index("NAME")
)
# Ensure we also store any tree information found after the last DATE statement
if found_gruptree or found_welspecs:
for edgename, value in currentedges.items():
rec_dict = {
# Assuming not LAB units, then the unit is days.
days = sum(steplist)
if days <= 0:
logger.critical("Invalid TSTEP, summed to %s days", str(days))
return pd.DataFrame()
date += datetime.timedelta(days=days)
logger.info(
"Advancing %s days to %s through TSTEP", str(days), str(date)
)
else:
logger.critical("BUG: Should not get here")
return pd.DataFrame()
if kword.name == "GRUPTREE":
found_gruptree = True
for edgerec in kword:
edge_dict = parse_opmio_deckrecord(edgerec, "GRUPTREE")
currentedges[
(edge_dict["CHILD_GROUP"], edge_dict["PARENT_GROUP"])
] = "GRUPTREE"
if kword.name == "WELSPECS" and welspecs:
found_welspecs = True
for wellrec in kword:
wspc_dict = parse_opmio_deckrecord(wellrec, "WELSPECS")
currentedges[(wspc_dict["WELL"], wspc_dict["GROUP"])] = "WELSPECS"
if kword.name == "GRUPNET":
found_grupnet = True
for rec in kword:
grupnet_data = parse_opmio_deckrecord(rec, "GRUPNET")
grupnetrecords.append(grupnet_data)
grupnet_df = (
pd.DataFrame(grupnetrecords)
.drop_duplicates(subset="NAME", keep="last")