Как рассчитать вертикальные высотные профили - PullRequest
0 голосов
/ 29 января 2020

Я хочу рассчитать толщину слоя по данным ECMWF.

Имеются переменные T (внутри одного слоя) и relhum (внутри одного слоя ) и давление (как на интерфейсах слоя, так и в средних точках слоя).

У меня проблемы с пониманием аргумента pressure для функции metpy.calc.thickness_hydrostatic_from_relative_humidity:

Когда Я смотрю на формулу, приведенную в строке документации:

$$ Z_2 - Z_1 = - \ frac {R_d} {g} \ int_ {p_1} ^ {p_2} T_v d \ ln p $$

мне кажется, что функция возвращает LHS, т. Е. $ Z_2 - Z_1 $.

Однако мне также кажется, что pressure, temperature, relative_humidity все аргументы должны иметь одинаковые размеры.

Я нахожу это непонятным: для того, чтобы получить толщину слоя между $ Z_1 $ и $ Z_2 $, я ожидал бы ввести оба давления $ p_1 $ и $ p_2 $ также. Тем не менее, температуры обычно определяются на полных уровнях, т. Е. У меня на одну температуру меньше, чем у меня.

Например, чтобы рассчитать толщину нижнего слоя, я бы рассчитал дать давление на поверхности давление в верхней части слоя и температура (и влажность) внутри слоя. Но когда я пытаюсь использовать такую ​​функцию, я получаю

ValueError: operands could not be broadcast together with shapes (361,1440,79) (361,1440,78) 

Пожалуйста, помогите мне понять, как правильно использовать эту функцию.

1 Ответ

1 голос
/ 29 января 2020

Однако мне также кажется, что аргументы pressure, temperature, relative_humidity должны иметь одинаковые размеры.

[...]

Например, чтобы рассчитать толщину нижнего слоя, я хотел бы рассчитать давление на поверхности, давление наверху слоя и температуру (и влажность) внутри слоя.

На самом деле, вопреки вашему ожиданию, переменные pressure, temperature и relative_humidity должны быть определены на одном и том же уровне, поскольку, как следует из документации MetPy, thickness_hydrostatic_from_relative_humidity работает с атмосферой c профили . Обратите внимание, что в терминологии MetPy «слой» находится над любым набором вертикальных уровней, а не только между двумя уровнями.

Необходимость данных, определенных на общих уровнях, также можно увидеть в самом расчете, поскольку интеграция выполняется по трапециевидному правилу. Например, в минимальном случае слоя с двумя уровнями данных формула, используемая MetPy

image

при интегрировании по правилу трапеции, уменьшается до

image


На практике, если у вас действительно есть «смещенный» или «ступенчатый» уровни данных, где ваши temperature и relative_humidity имеют вертикальную координату, отличную от вашей pressure , вам нужно будет интерполировать ваши данные, чтобы они находились на общих уровнях, чтобы использовать thickness_hydrostatic_from_relative_humidity (или любые другие вычисления профиля MetPy). Простой дестабилизирующий подход, который может быть применим в вашем случае, с массивом pressure формы (361,1440,79) и массивом temperature формы (361,1440,78), может выглядеть как

pressure_destaggered = (pressure[..., :-1] + pressure[..., 1:]) / 2

Однако при таком подходе есть две оговорки:

  • thickness_hydrostatic_from_relative_humidity предназначен только для работы с (1D) профилями данных атмосферы c, а не с трехмерными сетками, поэтому соблюдайте осторожность с вашим результатом (указание необязательных аргументов bottom и depth может привести к сбою, а ось интеграции по умолчанию может или не может быть правильной)
  • это удаление не будет работать, если у вас только два уровня давления / один уровень температуры, так как для определения слоя MetPy необходимы как минимум два уровня. В этом случае вам потребуется каким-то образом приблизить температуру / относительную влажность на двух уровнях давления (например, предположить постоянную температуру / относительную влажность между двумя уровнями).
...