Как бы я получил количество периодов стресса в симуляции MODFLOW 6?

#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 over get_data() ?

2. Это приятно знать. Я впервые изучаю модель MF6, и использование новых mf6 инструментов значительно отличается от использования традиционных моделей MODFLOW. Кодовая база немного сложнее, и я еще не разобрался в этом.

3. Ты прав. Метод .get_data() имеет больше смысла , чем . атрибут массива, особенно для скалярных переменных.