Disciplina de Computação Aplicada à Meteorologia II NCAR Command Language (NCL) Mateus da Silva Teixeira - FMET / UFPel (mateus.teixeira@ufpel.edu.br)
Introdução O que é o NCL: Linguagem de programação completa (interpretada): Tipos Variáveis Operadores Expressões Declarações condicionais Loops Funções e subrotinas
Introdução O que é o NCL (continuação): Manipulação de metadados Geração e configuração de gráficos Acesso a uma variedade de formatos de arquivos de dados Suporte a operações com arranjos
Visão geral
Introdução Vamos conhecer o website? http://www.ncl.ucar.edu
Introdução Há dois modos de uso: Interativo: Entra-se com ncl Volta ao shell com quit Interessante para testes rápidos e simples
Modo Interativo
Introdução Há dois modos de uso (continuação): Script (ou Batch): Arquivo com extensão.ncl (sugestão!) Estruturação dos comandos Mais fácil depuração de erros e execução de blocos de comandos
Modo Script TERMINAL (Shell) Editor ASCII (gedit)
Modelo de variável do NCL Modelo baseado no formato netcdf NCL converte GRIB, HDF, por exemplo, para netcdf Como é um arquivo netcdf?
Arquivo netcdf Importante [mateus@mateus-infoway dados]$ ncdump -h uv300.nc ferramenta netcdf netcdf uv300 { dimensions: lat = 64 ; lon = 128 ; time = 2 ; int time(time) ; variables: time:long_name = "Month of Year" ; float lat(lat) ; time:short_name = "Mo" ; lat:short_name = "lat" ; time:units = "month" ; lat:long_name = "latitude" ; float U(time, lat, lon) ; lat:units = "degrees_north" ; U:_FillValue = -999.f ; float lon(lon) ; U:long_name = "Zonal Wind" ; lon:units = "degrees_east" ; U:short_name = "U" ; lon:long_name = "longitude" ; U:units = "m/s" ; lon:short_name = "lon" ; float V(time, lat, lon) ; float gw(lat) ; V:_FillValue = -999.f ; gw:long_name = "gaussian weights" ; V:long_name = "Meridional Wind" ; gw:short_name = "gws" ; V:short_name = "V" ; gw:units = "dimensionless" ; V:units = "m/s" ;
Arquivo netcdf // global attributes: :title = "UV300: January and July" ; :source = "Climate Analysis Section, NCAR" ; :history = "Dataset uv300.hs from EZPLOT demo dataset" ; :Conventions = "None" ; :creation_date = "Mon Mar 29 09:24:57 MST 1999" ; :references = "\n", "EZPLOT for Publication Quality Plots\n", "Christian Guillemot\n", "NCAR-TN 414 1995\n", "http://www.cgd.ucar.edu/cas/ezplot/" ; }
Variáveis NCL / arquivos netcdf Variáveis possuem Atributos Acessados via uso do símbolo @ Coordenadas Acessadas via uso do símbolo & Nomes em dimensões Criados e acessados via símbolo! Atributos, Coordenadas e Nomes de dimensões são os metadados
Criando a primeira variável...
Criando a primeira variável... Criando variável por atribuição!
Criando a primeira variável... Resumo da variável
printvarsummary() Função importantíssima! Exibe resumo da variável: Tamanho em bytes Tipo Dimensões, seus tamanhos e nomes Coordenadas Atributos Unidades, etc Amiga do programador!
Apagando uma variável Apagando a variável 'x'
Apagando uma variável Variável torna-se indefinida, o.s., não existe mais!
Criando um vetor de dados... Criando variável com função new() Importante atributo!!! Veremos aplicação mais tarde.
Metadados à variável... Dando um nome à dimensão
Coordenadas... Coordenadas à dimensão
Atributos... Atributos => Metadados = informações sobre os dados!
Acessando dados da variável Antes de acessar, vamos ver o que há nessa variável Não há dados! Todos são _FillValue
Acessando dados da variável Fornecendo dados Usando construtor de arranjos: (/ /)
Acessando dados da variável Visualizando 5º elemento do arranjo 1D Elementos indexados (numerados) de 0 a N-1
Acessando dados da variável Visualizando 5º elemento do arranjo 1D, mas por coordenadas! Uso de coordenadas: uso de { }
O atributo _FillValue Indica inexistência de dados Passível de personalização Algumas funções do NCL interagem com esse atributo Cálculos matemáticos Plotagem de campos Métodos estatísticos entre outros
O atributo _FillValue
NCL e arquivos de dados Oferece suporte a vários tipos de arquivos: Formatos suportados: Binários: netcdf; HDF4/H5; HDF-EOS; GRIB1-2; Shapefile Sequenciais e diretos ASCII (texto puro) Dados organizados em linhas e colunas
addfile() - abre arquivos suportados forma de uso: f = addfile( nome_arq.ext, status ) nome_arq : qualquer nome válido (string) ext : extensão que identifica o tipo do arquivo (string) não precisa fazer parte do nome do arquivo. netcdf*: nc ou cdf HDF*: hdf, hdfeos, h5, he5 GRIB: grb, grib Shapefile: shp status : r, c, w f => variável de referência ao arquivo.
Lendo dados de arquivos: variável = variável_referência_arquivo ->variável_arquivo Exemplo:
Uma vez carregado ao NCL, a variável do arquivo pode ser usada normalmente:
Buscando uma informação via coordenadas: Indexação padrão e por coordenadas misturadas! Indicando que é uma parte dos dados. Coordenadas reais do dado obtido.
Arquivos ASCII O NCL fornece capacidade de leitura e escrita de dados contidos em arquivos ASCII texto puro. Funções: asciiread : leitura de arquivos ASCII. asciiwrite : armazena dados em arquivos ASCII; não permite formatação dos dados (uma única coluna de dados). write_matrix : grava tabelas de dados em arquivos ASCII; permite controle de formato Também fica sob a responsabilidade do usuário referenciar os dados apropriadamente!
Arquivo dados.txt contendo uma matriz de dados 3x3 Lendo dados de um arquivo ASCII: dados = asciiread( dados.txt, (/3,3/), integer ) nome do arquivo linhas x colunas tipo do dado
Dimensões dos dados Dados lidos!
Lendo dados de um arquivo ASCII: asciiread aceita o valor -1, ao invés do número de linhas e colunas => dados lidos como vetor.
Dimensões passadas à função asciiread: (/3,3/) -1
Escrevendo arquivos ASCII: asciiwrite( novo_dados.txt, dados ) Matriz a ser gravada no arquivo ASCII nome do arquivo write_matrix( dados, 3i5, opcoes ) Matriz a ser gravada no arquivo ASCII Formatação das colunas de dados opcao = True opcao@fout = novo_dados.txt Atributo que muda o funcionamento da função