Mapas de previsão de tempo com python

A previsão numérica do tempo usa o estado instantâneo da atmosfera como dados de entrada para modelos físico-matemáticos com o objetivo de prever as condições atmosféricas nos próximos dias. Os arquivos com as saídas desses modelos podem gerar mapas exibindo as projeções de diferentes variáveis para os locais apresentados em diferentes horários.

Obs.: os mapas plotados aqui são referentes a um breve estudo de caso dos eventos de neve e de geada do final de julho de 2021, que podem ser vistos no link.

Temperatura a 2 metros de altura do solo em região recortada
Temperatura a 2 metros de altura do solo em região recortada

O script plot_nwp.py apresentado a seguir tem como objetivos (modelo NCEP/GFS ou INPE/WRF):

  • baixar os arquivos por modelo, data de rodada e horizonte de previsão (caso não tenha os dados)
  • suavização (opcional)
  • plotar o mapa da variável informada (com título contendo modelo, variáveis e data de validade da previsão, além de barra de cores) e salvar em arquivo PNG
Mapas de superfície, 850, 500 e 250 hPa das variáveis e data/hora indicadas
Mapas de superfície, 850, 500 e 250 hPa das variáveis e data/hora indicadas

O script plot_nwp_all.py, além das tarefas acima listadas, deve montar os mapas para os seguintes casos:

  • Superfície: contornos de temperatura a 2 metros da superfície (°C), linhas de espessura 1000-500 hPa (m) com destaque para a linha de 5400, isóbaras de pressão ao nível médio do mar (hPa) e pontos de máxima/mínima pressão local marcados com valor e letra indicativa H/L
  • 850 hPa: linhas de corrente, barbelas, linhas de temperatura (com destaque para 0°C), contornos de água precipitável (indicação de áreas/volume de chuva)
  • 500 hPa: linhas de corrente em 500 hPa e umidade específica (kg/kg) em superfície
  • 250 hPa: linhas de corrente e contornos para intensidade da velocidade do vento

Todos os scripts estão hospedados no github (viniroger/maps_NWP). Na preparação do ambiente, a sugestão é instalar o miniconda com python 3.9.5 e criar um ambiente virtual com alguns pacotes instalados, conforme o comando a seguir:

conda create --name workshop -c conda-forge numpy pygrib matplotlib cartopy

Esses pacotes devem ser carregados no início da execução do script, sendo responsáveis por bibliotecas de computação científica, ler arquivos GRIB, confecção de gráficos e trabalhar com camadas de mapas, respectivamente. As variáveis de entrada do script principal devem ser informadas no bloco de código identificado com o comentário “INPUT VARIABLES”:

  • run_date – data da rodada do modelo no formato YYYYMMDDHH (horas sempre em UTC)
  • init_time – horário da primeira previsão (geralmente mesma hora da rodada)
  • end_time – número de horas passadas até a última previsão (sendo igual a “init_time”, será trabalhado somente um arquivo)
  • interval – intervalo em horas entre cada previsão (geralmente 6, 12 ou 24)
  • model – modelo GFS ou WRF (os nomes das variáveis utilizadas não mudam entre um e outro)
  • extent – limites da área a ser plotada no fomato [min. lon, min. lat, max. lon, max. lat] (por padrão, estão os valores máximos de cada modelo)
  • var_name (só para plot_nwp.py) – nome da variável a ser plotada

No script “plot_nwp.py”, mais simples, a variável “properties” deve ter seus parâmetros alterados no caso de mudar a variável a ser plotada. Pode-se descomentar o bloco de código identificado com o comentário “Get info from file – variable names” para gerar o arquivo “output/variables_{model}.txt” para obter uma lista com os nomes de variáveis do arquivo.

Nos dois scripts principais, é feito um loop em todos os arquivos da pasta criada com os arquivos baixados – ou seja, para cada horário. O método “grib_info” lê o arquivo grib, obtendo também as latitudes, longitudes e a data da previsão. No script “plot_nwp_all.py”, os métodos “get_*” obtém as variáveis indicadas. Na sequência, é feito um subplot com quatro mapas para cada nível. Por fim, a imagem é salva em um PNG na pasta “output”.

Com relação aos subplots, cada posição é identificada por um índice. No script, foi usada a posição [i,j], mas pode ser um índice unidimensional – nesse caso, parte do canto superior direito com valor 0 e aumentando de 1 em 1 para a direita, recomeçando na linha abaixo também da esquerda para a direita.

Você também pode baixar os dados do GFS usando a interface web do NOMADS . Nesse caso, foi usado da tabela “Global models” a linha “GFS 0.50 Degree” coluna “grib filter”, subdiretórios 20210727 -> 00 -> atmos e níveis: 1000 mb, 2 m above ground, 250 mb, 500 mb, 850 mb, entire atmosphere, entire atmosphere (considered as a single layer), mean sea level e surface; todas as variáveis; left longitude 267, right longitude 335, top latitude 18, bottom latitude -60. No topo da última página, um menu cortina contém os arquivos para condições iniciais (.f000) e previsões seguintes a cada 3 horas (.f003, .f006, etc) – para baixar cada um, basta alterar a opção e clicar em “start download” novamente. A URL resultante seria:

https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p50.pl?file=gfs.t00z.pgrb2full.0p50.f000&lev_1000_mb=on&lev_250_mb=on&lev_2_m_above_ground=on&lev_500_mb=on&lev_850_mb=on&lev_entire_atmosphere=on&lev_entire_atmosphere_%5C%28considered_as_a_single_layer%5C%29=on&lev_mean_sea_level=on&lev_surface=on&all_var=on&subregion=&leftlon=267&rightlon=335&toplat=18&bottomlat=-60&dir=%2Fgfs.20210727%2F00%2Fatmos

Curso Programação em Python para a Aquisição, Processamento e Visualização de Dados de Modelos de Previsão Numérica do Tempo

Esses scripts foram feitos com base no curso Programação em Python para a Aquisição, Processamento e Visualização de Dados de Modelos de Previsão Numérica do Tempo (PNT), que teve como tutores Diego Souza, Marcos Vianna e Ester Regina Ito, todos da Divisão de Satélite e Sensores Meteorológicos (DISSM) e Divisão de Previsão de Tempo e Clima (DIPTC) do INPE.

Ele possui um pré-curso, onde o item “Baixando Amostras de Dados de Modelo Numérico no formato GRIB” mostra isso passo a passo para o GFS. Mais procedimentos podem ser vistos no Google colab, na apresentação gravada no Youtube (parte 1 e parte 2) e no github: diegormsouza/NWP-Python-Jul-2021.

2 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.