#flopy
#flopy
Вопрос:
Я могу прочитать в существующей симуляции MODFLOW 6, используя flopy.mf6.MFSimulation.load. Теперь я хочу узнать, сколько у него периодов стресса в виде целого числа, как определено nper в пакете tdis. Какой самый простой способ сделать это?
Ответ №1:
Итак, вот в чем хитрость: в классах flopy для 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)
затем мы возвращаем repr, который выглядит следующим образом:
{internal}
(10)
Способ, которым мы получаем фактические данные, — это добавить массив:
nper = tdis.nper.array
print(nper)
print(type(nper))
В этом случае мы получаем желаемую информацию:
10
<class 'int'>
Для скаляров мы рассматриваем возможность изменения этого поведения, чтобы оно вело себя так, как вы думаете (возвращая значение напрямую), но мы еще не реализовали это.
Комментарии:
1. Поскольку я читаю существующую симуляцию, я получил пакет TDIS, вызвав
tdis = MFSimulation.get_package('TDIS')
. Затем я обнаружил, что могу получить nper как int черезnper = tdis.nper.get_data()
. Это похоже наtdis.nper.array
вызовыtdis.nper.get_data()
. Предпочтительнее ли использоватьarray
overget_data()
?2. Это приятно знать. Я впервые изучаю модель MF6, и использование новых
mf6
инструментов значительно отличается от использования традиционных моделей MODFLOW. Кодовая база немного сложнее, и я еще не разобрался в этом.3. Ты прав. Метод .get_data() имеет больше смысла , чем . атрибут массива, особенно для скалярных переменных.