Instalação do wgrib2
Opção 1: Instalação na mão
Vá para o diretório Downloads e digite:
wget ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz
Em seguida, digite o comando abaixo para descompactar o arquivo wgrib2.tgz:
tar -zxvf wgrib2.tgz
Entre no diretório grib2:
cd grib2
Dentro do diretório grib2 digite as linhas abaixo
export CC=gcc
export FC=gfortran
make
Será criado o diretório wgrib2, entre nele e copie o executável wgrib2 para o diretório do seu interesse.
Adicione o caminho onde está o executável wgrib2 na sua variável de ambiente PATH que está no arquivo .bashrc. Não esqueça de atualizar o .bashrc digitando source .bashrc. Isso é feito no seu diretório home.
Exemplos de uso do wgrib2 podem ser encontrados em:
Opção 2: Instalação via conda
conda install -c conda-forge wgrib2
Ao executar o wgrib2 e aparecer o erro abaixo:
wgrib2: error while loading shared libraries: libjasper.so.1: cannot open shared object file: No such file or directory
Basta criar um link simbólico de acordo com o comando abaixo. Tudo isso é uma linha. Altere os caminhos de acordo com o seu usuário (queimadas) e ambiente virtual (risco_fogo):
ln -s /home/queimadas/miniconda3/envs/risco_fogo/lib/libjasper.so.4 /home/queimadas/miniconda3/envs/risco_fogo/lib/libjasper.so.1
Onde: /home/queimadas/miniconda3/envs/risco_fogo/lib/libjasper.so.4 representa a biblioteca que está no computador.
E /home/queimadas/miniconda3/envs/risco_fogo/lib/libjasper.so.1 representa o link simbólico que será a biblioteca a ser criada no seu computador, a que foi mostrada no erro.
Outro possível erro que pode aparecer:
wgrib2: error while loading shared libraries: libnetcdf.so.13: cannot open shared object file: No such file or directory
Basta criar um link simbólico de acordo com o comando abaixo. Tudo isso é uma linha. Altere os caminhos de acordo com o seu usuário (queimadas) e ambiente virtual (risco_fogo):
ln -s /home/queimadas/miniconda3/envs/risco_fogo/lib/libnetcdf.so.19 /home/queimadas/miniconda3/envs/risco_fogo/lib/libnetcdf.so.13
Onde: /home/queimadas/miniconda3/envs/risco_fogo/lib/libnetcdf.so.19 representa a biblioteca que está no computador.
E /home/queimadas/miniconda3/envs/risco_fogo/lib/libnetcdf.so.13 representa o link simbólico que será a biblioteca criada, a que foi mostrada no erro.
Exemplos de uso do wgrib2
Visualizar informações sobre o arquivo:
wgrib2 input.grb2
Converter grib2 para NetCDF:
wgrib2 gfs.t18z.pgrb2.0p25.anl -netcdf output.nc
Selecionar uma variável (‘:TMP:’) de interesse e salvar no formato NetCDF:
wgrib2 -match ':TMP:' gfs.t18z.pgrb2.0p25.anl -netcdf output.nc
Selecionar uma variável de interesse e recortar o dado em um domínio particular:
Link: https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/lola.html
Sintaxe:
wgrib2 -lola LonSW:#lon:dlon LatSW:#lat:dlat nome_do_arquivo formato_da_saída
Onde:
LonSWé o valor da longitude oeste do seu domínio (sempre no formato 0° a 360°)#loné o Número de pontos de longitude desejadosdloné a resolução espacial em graus do dadoLatSWé o valor da latitude sul do seu domínio (sempre no formato -90 a 90)#laté o número de pontos de latitude desejadosdlaté a resolução espacial em graus do dadoO
nome_do_arquivoé o nome do arquivo a ser geradoformato_da_saídae o formato de saída do dado, pode ser:bin= binary,text= simple “text” format,one value per line,spread= spread-sheet format,latitude,longitudeand value of each grid point egrib= grib2Exemplo:
wgrib2 -match '(:TMP:30-0)' gfs.t18z.pgrb2.0p25.anl -lola 240:349:0.25 -56:357:0.25 output.grb grib
Onde:
240é o ponto de longitude oeste do domínio349é o número de pontos que se deseja0.25é a resolução espacial em graus-56é o ponto de latitude sul do domínio357é o número de pontos que se de deseja0.25é a resolução em graus.O domínio de interesse é:
Lon.: 120°W - 33°WeLat.: 56°S - 33°Na resolução espacial do dado é de
0.25°120°W = 360° - 120° = 240° => Longitude Oeste
33°W = 360° - 33° = 327° => Longitude Leste
327° - 240° = 87°/0.25° = 348 + 1 = 349, que corresponde ao número de pontos de longitude desejado
56°S + 33°N = 89°/0.25° = 356 + 1 = 357, que corresponde ao número de pontos de latitude desejado
Outras aplicações
Arquivo de exemplo
Para baixar os dois arquivos para a variável TMP (temperatura), basta executar a linha de comando abaixo, não esquecendo de alterar a data 20230322.
Previsão de TMP: f001.
curl "https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=gfs.t00z.pgrb2.0p25.f001&all_lev=on&var_TMP=on&leftlon=0&rightlon=360&toplat=90&bottomlat=-90&dir=%2Fgfs.20230322%2F00%2Fatmos" --output tmp.f001.grib2
O comando acima gera o arquivo: tmp.f001.grib2
Análise (anl):
curl “https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=gfs.t00z.pgrb2.0p25.anl&all_lev=on&var_TMP=on&leftlon=0&rightlon=360&toplat=90&bottomlat=-90&dir=%2Fgfs.20230322%2F00%2Fatmos” –output tmp.anl.grib2
O comando acima gera o arquivo: tmp.anl.grib2
Previsão de u e v: f001.
curl "https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?file=gfs.t00z.pgrb2.0p25.f001&lev_850_mb=on&var_UGRD=on&var_VGRD=on&leftlon=0&rightlon=360&toplat=90&bottomlat=-90&dir=%2Fgfs.20230322%2F00%2Fatmos" --output uv.grib2
O comando acima gera o arquivo: uv.grib2
Mostrar o domínio espacial do arquivo
wgrib2 -domain tmp.f001.grib2
Mostar o nome da variável do arquivo
wgrib2 -ext_name tmp.f001.grib2
Mostrar informações sobre o domínio espacial do arquivo
wgrib2 -grid tmp.f001.grib2
Mostrar os níveis verticais do arquivo:
wgrib2 -lev tmp.f001.grib2
Mostrar o valor da variável em uma determinada longitude/latitude
A conversão será sempre:
wgrib2 -lon <longitude> <latitude> <arquivo.grib2>
Exemplo:
wgrib2 -lon -60 -30 tmp.f001.grib2
Mostrar o valor máximo
wgrib2 -max tmp.f001.grib2
Mostra o valor mínimo
wgrib2 -min tmp.f001.grib2
Mostrar o número de pontos de grade
wgrib2 -nxny tmp.f001.grib2
Mostrar as informações do arquivo
wgrib2 -s tmp.f001.grib2
Ou, mais completa:
wgrib2 -S tmp.f001.grib2
Mostrar estatística do arquivo
wgrib2 -stats tmp.f001.grib2
Mostrar a saída diagnóstica
wgrib2 -V tmp.f001.grib2
Mostrar o nome da variável
wgrib2 -var tmp.f001.grib2
Verbose
wgrib2 -v0 tmp.f001.grib2
Opções: v, v0, v1, …, v99
Gerar um arquivo csv
Geração do arquivo de TMP para 1000 mb:
wgrib2 -match ":TMP:1000 mb:" tmp.f001.grib2 -grib tmp.1000mb.f001.grib2
Geração do arquivo no formato “.csv”.
wgrib2 tmp.1000mb.f001.grib2 -csv saida.csv
Outra possibilidade:
wgrib2 tmp.1000mb.f001.grib2 -csv_long saida.csv
Calcular a direção do vento (em graus) a partir de u e de v
Neste exemplo, as componentes do vento são extraídas no nível de 850 mb para calcular a direção do vento.
wgrib2 -match ':(UGRD|VGRD):850 mb' gfs_f001_20230414.grib2 -wind_dir dir850hpa.grib2
Onde:
gfs_f001_20230414.grib2: é o seu arquivo grib2
dir850hpa.grib2 : é o arquivo que será gerado com a direção do vento. Altere o nome de acordo com a sua necessidade.
Calcular a velocidade do vento (em m/s) a partir de u e de v
Neste exemplo, as componentes do vento são extraídas no nível de 850 mb para calcular a velocidade do vento.
wgrib2 -match ':(UGRD|VGRD):850 mb' gfs_f001_20230414.grib2 -wind_speed vel850hpa.grib2
Onde:
gfs_f001_20230414.grib2: é o seu arquivo grib2
vel850hpa.grib2: é o arquivo que será gerado com a velocidade do vento. Altere o nome de acordo com a sua necessidade.
Caso seja necessário gerar a velocidade e a direção do vento no mesmo arquivo, basta fazer:
wgrib2 -match ':(UGRD|VGRD):850 mb' gfs_f001_20230414.grib2 -wind_dir dir_vel850hpa.grib2 -wind_speed dir_vel850hpa.grib2
Nota-se que, o arquivo a ser gerado é o mesmo na função -wind_dir e -wind_speed, isto é, dir_vel850hpa.grib2. Isso ocorre para que os resultados sejam armazenados no mesmo arquivo.
Selecionar os níveis verticais de um arquivo
A partir de um arquivo de uma simulação do modelo GFS, deseja-se visualizar as variáveis que estão nele:
wgrib2 gfs.0p25.2018042200.f006.grib2
Supondo que deseja-se trabalhar com a variável TMP. O objetivo consiste em salvar apenas esta variável no formato NetCDF. Para isso, basta digitar o comando abaixo:
wgrib2 -match 'TMP' gfs.0p25.2018042200.f006.grib2 -netcdf out.TMP.nc
O problema é que são geradas muitas ocorrências que contém a variável TMP.
Neste caso, imagina-se que se deseja apena a TMP a 2 metros. O comando a ser utilizado será:
wgrib2 -match ':TMP:2 m above ground:' gfs.0p25.2018042200.f006.grib2 -netcdf out.TMP.nc
O arquivo gerado contém apenas a variável TMP a 2 metros. Como sabemos disso? Basta digitar o comando abaixo:
ncdump -h out.TMP.nc
Há um trecho do comando acima que mostrará a seguinte informação:
float TMP_2maboveground(time, latitude, longitude)
Aqui, foi tranquilo. Agora, vamos dificultar um pouco. Supondo que se deseja obter a TMP somente para todos os níveis verticais. E agora? Basta usar o comando abaixo:
wgrib2 gfs.0p25.2018042200.f006.grib2 -match "(:TMP:[0-9]* mb:)" -netcdf out.TMP.nc
O que foi gerado? Ao digitar o comando abaixo:
ncdump -h out.TMP.nc
Nota-se que, a variável TMP veio com os níveis verticais separados. Como se fossem variáveis independentes, e não é isso que se deseja. O objetivo, é ter a variável TMP com todos os níveis verticais juntos, e não separados. Para isso, utiliza-se o mesmo comando com o parâmetro -nc_nlev.
wgrib2 gfs.0p25.2018042200.f006.grib2 -nc_nlev 31 -match "(:TMP:[0-9]* mb:)" -netcdf out.TMP.nc
O parâmetro -nc_nlev 31 diz que são 31 níveis verticais que estão no arquivo.
Agora, deseja-se selecionar alguns níveis verticais em particular. Basta fazer:
wgrib2 gfs.0p25.2018042200.f006.grib2 -nc_nlev 5 -match ":TMP:(600|650|700|750|800) mb:" -netcdf out.TMP.nc
Lembrando que foram selecionados apenas 5 níveis verticais, por isso, -nc_nlev 5.
Digite o comando:
ncdump -c out.TMP.nc
Na última linha, terá a seguinte informação:
plevel = 600, 650, 700, 750, 800 ;
São os níveis verticais selecionados.
Selecionar mais de uma variável e vários níveis verticais de um arquivo
Agora, deseja-se selecionar alguns níveis verticais em particular. Basta fazer:
wgrib2 gfs.0p25.2018042200.f006.grib2 -nc_nlev 5 -match ":(TMP|RH):(600|650|700|750|800) mb:" -netcdf out.TMP.nc
Onde:
TMP: é a temperatura
RH: é a umidade relativa
Para adicionar mais variáveis, basta fazer:
wgrib2 gfs.0p25.2018042200.f006.grib2 -nc_nlev 5 -match ":(TMP|RH|HGT):(600|650|700|750|800) mb:" -netcdf out.TMP.nc
Neste novo exemplo, adicionou-se a variável HGT.
Converter arquivo de previsão subsazonal do CPTEC para NetCDF
O objetivo consiste em converter do formato Grib2 para NetCDF os arquivos que estão em:
https://dataserver.cptec.inpe.br/dataserver_subsaz/real_time_forecast_to_ecmwf
Eles representam as previsões do modelo global do CPTEC.
O formato do diretório é AAAAMMDD00. Dentro dele estão vários arquivos com os seguintes nomes:
s2s_sbsj_prod_enfo_AAAAMMDD00_pl_000.grib2
pl: pressure level (nível de pressão)
Variando de 000 até 010 membros.
s2s_sbsj_prod_enfo_AAAAMMDD00_sl_000.grib2
sl: surface level (superfície)
Variando de 000 até 010 membros.
Ao realizar o download do arquivo para sua máquina local, basta digitar os comandos abaixo. Lembrando que o arquivo deve ser alterado para a data de interesse:
A opção -I type agrupa as variáveis. Exemplo, as variáveis que possuem nível vertical (pl) são 6 no total. Com o comando abaixo, a variável TMP (temperatura), por exemplo, agrupará todos os níveis verticais (são 10 no total) na variável TMP. Este mesmo procedimento será feito para as demais variáveis que estão no arquivo.
grib_to_netcdf -I type s2s_sbsj_prod_enfo_2025120300_pl_000.grib2 -o s2s_sbsj_prod_enfo_2025120300_pl_000.nc
Para as variáveis de superfície (sl), são 21 no total:
grib_to_netcdf s2s_sbsj_prod_enfo_2025120300_sl_000.grib2 -o s2s_sbsj_prod_enfo_2025120300_sl_000.nc
onde:
s2s_sbsj_prod_enfo_2025120300_sl_000.grib2: é o arquivo que encontra-se na máquina local.
-o: é parâmetro de saída (output).
s2s_sbsj_prod_enfo_2025120300_pl_000.nc: é o nome do arquivo definido pelo usuário.