У меня есть рабочая модель с выходом. Я пытаюсь воспользоваться преимуществом флопи при опросе результатов. В частности, я хотел бы иметь возможность генерировать (на лету) информацию о бюджете зоны для конкретных ячеек. Конечно, я могу пойти на создание файлов зон, которые меня интересуют, но я надеялся, что смогу извлекать результаты по мере необходимости, не проходя этот промежуточный этап.
IЯ ищу рабочий процесс, который я могу использовать в Python для извлечения информации о сетевом потоке из CBB (уже сгенерированного) для определенных ячеек только в консоли Python (скорее избегать устаревшего стиля генерации файлов зон, импорта, затем извлечения).
РЕДАКТИРОВАТЬ
Возникли проблемы с попыткой заставить утилиту работать вообще. Вот последняя попытка. Не могу сказать, что 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
Пожалуйста, помните, что я все еще заинтересованв пропуске части записи файла. Я включил его, чтобы показать свою работу до этого момента