我有一个带输出的工作模型。我试图利用 flopy 来询问结果。具体来说,我希望能够(即时)为特定单元生成区域预算信息。我当然可以不厌其烦地构建我感兴趣的区域文件,但我希望能够根据需要提取结果,而无需经过中间步骤。
我正在寻找一个可以在 Python 中使用的工作流,以仅在 Python 控制台中为特定单元格从 CBB(已生成)中提取净流量信息(宁愿避免生成区域文件、导入然后提取的传统样式) .
编辑
试图让该实用程序完全正常工作时遇到了问题。这是最新的尝试。无法判断 flopy 是否在 CBB 本身上窒息,或者我提供的区域是否给它带来了问题。
该模型为 7 层,196 行,241 列。我正在尝试提取 Layer=3、Row=58、Col=30。我为区域创建的列表对象在这里:
zon_lst = []
for lay in range(7):
for row in range(196):
for col in range(241):
if lay == 2 and row == 57 and col == 29:
zon_lst.append(1)
else:
zon_lst.append(0)
然后我使用以下内容将其写入文件:
def chunk_list(alist, n):
for i in range(0, len(alist), n):
yield alist[i:i + n]
def zon_gen(mylst, rows, cols, file_cols):
# Assumes integers for zonation file
frmt = '{:>3}'
list_by_lay = chunk_list(mylst, rows * cols)
astr = '\n'.join(['\n'.join([''.join([frmt.format(i) for i in seq]) for seq in chunk_list(layer, file_cols)]) for layer in list_by_lay])
return astr
zon_str = zon_gen(zon_lst, 196, 241, 10)
with open('t_26.zon', 'w+') as file:
file.write('# For Scoping Work\n')
file.write('1\n')
file.write('t_26\n')
file.write('INTERNAL 1 (10I3) 1\n')
file.write(zon_str)
然后我为区域预算类/方法构建我的 modflow 模型:
import flopy
mf = flopy.modflow.Modflow(modelname='t_26_scope', version='mf2k')
zon = flopy.modflow.ModflowZon.load(r"t_26.zon",mf,nrow=196, ncol=241)
zb = flopy.utils.zonbud.ZoneBudget(r"P2Rv8.2_1000yr.cbb", zon)
所有这些都运行良好,直到最后一个命令,我得到以下错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\ProgramData\Miniconda3\envs\ca_cie\lib\site-packages\flopy\utils\zonbud.py", line 53, in __init__
self.cbc = CellBudgetFile(cbc_file)
File "C:\ProgramData\Miniconda3\envs\ca_cie\lib\site-packages\flopy\utils\binaryfile.py", line 618, in __init__
self._build_index()
File "C:\ProgramData\Miniconda3\envs\ca_cie\lib\site-packages\flopy\utils\binaryfile.py", line 708, in _build_index
self._skip_record(header)
File "C:\ProgramData\Miniconda3\envs\ca_cie\lib\site-packages\flopy\utils\binaryfile.py", line 768, in _skip_record
self.file.seek(nbytes, 1)
OSError: [Errno 22] Invalid argument
请记住,我仍然对跳过文件写入部分感兴趣。我把它包括在内是为了展示我到目前为止的工作