Я могу читать существующую симуляцию MODFLOW 6, используя flopy.mf6.MFSimulation.load. Теперь я хочу узнать, сколько у него периодов стресса, как целое число, как определено nper в пакете tdis. Какой самый простой способ сделать это?
Вот в чем хитрость: в классах гибких дисков для MODFLOW 6 вся информация хранится в виде объектов, включая целые числа, массивы, числа с плавающей запятой и т. д. Это дает нам некоторые хорошие преимущества, но также немного усложняет синтаксис, хотя мы работаем над тем, чтобы улучшить это.
Вот очень простая модель:
import flopy
sim = flopy.mf6.MFSimulation()
tdis = flopy.mf6.ModflowTdis(sim, nper=10)
gwf = flopy.mf6.ModflowGwf(sim)
dis = flopy.mf6.ModflowGwfdis(gwf)
Если мы попытаемся получить nper следующим образом:
nper = tdis.nper
print(nper)
затем мы получаем обратно представление, которое выглядит так:
{internal}
(10)
Фактические данные мы получаем, добавляя массив:
nper = tdis.nper.array
print(nper)
print(type(nper))
В этом случае мы получаем искомую информацию:
10
<class 'int'>
Для скаляров мы рассматриваем возможность изменить это поведение, чтобы оно вело себя так, как вы думаете (возвращая значение напрямую), но мы еще не реализовали это.
Это хорошо знать. Я впервые копаюсь в модели MF6, и использование новых инструментов mf6
значительно отличается от традиционных моделей MODFLOW. Кодовая база немного сложнее, и я еще не окунулся в нее.
Ты прав. Метод .get_data() имеет больше смысла, чем атрибут .array, особенно для скалярных переменных.
Поскольку я читаю существующую симуляцию, я получил пакет TDIS, позвонив
tdis = MFSimulation.get_package('TDIS')
. Затем я обнаружил, что могу получить nper как int черезnper = tdis.nper.get_data()
. Похоже,tdis.nper.array
звонитtdis.nper.get_data()
. Предпочтительнее ли использоватьarray
вместоget_data()
?