Olá,
Abaixo mostro outra comparação simples, mas extremamente interessante.
Neste "post" coloco o que talvez seja a maior vantagem do NCL sobre o GrADS, pelo menos ao meu ver: a leitura e plotagem de dados contidos em arquivos ASCII.
Quem usa o GrADS sabe do que estou falando. Para criar um gráfico de dados contidos em um arquivo ASCII é necessário um programa (Fortran ou C) para gerar um arquivo binário dos dados do arquivo ASCII e um arquivo CTL, que possibilita a sua utilização no GrADS.
No NCL, nada disso é necessário, basta abrir o arquivo ASCII diretamente, carregando-o para uma variável (arranjo de qualquer dimensão) e plotá-lo.
Vamos aos exemplos práticos. Tenho um campo de pressão ao nível médio do mar fictício (o programa que gera este campo é apresentado no final deste "post"), armazenado em um arquivo ASCII, chamado campoFicticio.ascii. Primeiro, a tarefa de plotá-lo com o GrADS:
Abaixo mostro outra comparação simples, mas extremamente interessante.
Neste "post" coloco o que talvez seja a maior vantagem do NCL sobre o GrADS, pelo menos ao meu ver: a leitura e plotagem de dados contidos em arquivos ASCII.
Quem usa o GrADS sabe do que estou falando. Para criar um gráfico de dados contidos em um arquivo ASCII é necessário um programa (Fortran ou C) para gerar um arquivo binário dos dados do arquivo ASCII e um arquivo CTL, que possibilita a sua utilização no GrADS.
No NCL, nada disso é necessário, basta abrir o arquivo ASCII diretamente, carregando-o para uma variável (arranjo de qualquer dimensão) e plotá-lo.
Vamos aos exemplos práticos. Tenho um campo de pressão ao nível médio do mar fictício (o programa que gera este campo é apresentado no final deste "post"), armazenado em um arquivo ASCII, chamado campoFicticio.ascii. Primeiro, a tarefa de plotá-lo com o GrADS:
Passo 1: programa Fortran (90 ou 77) para criação do binário.
program campoGrads
implicit none
real, dimension(10,10) :: z
integer :: i,j
open(30, file='campoFicticio.ascii', status='old')
read(30,*) z
close(30)
open(30, file='campoFicticio.bin', &
form='unformatted', access='direct', recl=10*10*8)
write(30,rec=1) z
close(30)
end program campoGrads
Passo 2: o arquivo CTL.
DSET ^campoFicticio.bin
TITLE Campo Ficticio
UNDEF 0.10000E+16
XDEF 10 linear 180 1
YDEF 10 linear 10 1
ZDEF 1 levels 1000
TDEF 1 linear 18z30sep09 1dy
VARS 1
z 0 99 campo ficticio de pressao ao nivel do mar
ENDVARS
Passo 3: script para plotagem do campo.
'open campoFicticio.ctl'
'set grads off'
'display z'
'draw title Campo ficticio - PNMM [hPa] - GrADS'
'printim campoFicticioGRADS.png white x1000 y1000'
'quit'
O Resultado:

Finalmente, a mesma tarefa, mas executada com o NCL.
Passo 1: leitura do arquivo ASCII e plotagem
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
; lendo arquivo
arquivo = asciiread( "campoFicticio.ascii", -1, "float" )
campo = onedtond( arquivo, (/10,10/) )
; ambiente gráfico
wks = gsn_open_wks( "ps", "campoFicticio" )
; recurso gráfico, apenas para aumentar tamanho da figura
; e colocar o título
res = True
res@gsnMaximize = True
res@tiMainString = "Campo ficticio - PNMM [hPa] - NCL"
; plotando gráfico
plot = gsn_csm_contour( wks, campo, res )
; convertendo para PNG
system("convert -density 300 -geometry 1000x1000"+\
" -trim campoFicticio.ps campoFicticioNCL.png")
; apagando arquivo PS
system("rm campoFicticio.ps")
end
O Resultado:

É isso mesmo, somente um passo para plotar o mesmo gráfico no NCL. E isso serve para qualquer tipo de gráfico. Tens uma série temporal e quer plotar um gráfico XY? Mesmo processo. Basta ler a série temporal e plotá-la.
Abraços,
PS. 1: O campo usado para criar os gráficos acima foi gerado com um programa em Fortran 90, que se encontra abaixo:
program campoFicticio
! sem declaracoes implicitas
implicit none
! variaveis e parametros
integer, parameter :: nx=10, ny=10
real, parameter :: pi = acos(-1.)
real, dimension(ny,nx) :: z
integer :: i,j
real :: dx,dy
! variacao dos eixos x e y
dx = 2*pi/nx
dy = 2*pi/ny
! gerando campo ficticio
do j=0,ny-1
do i=0,nx-1
z(j+1,i+1) = sin(i*dx)*cos(j*dy)*20.+1010.
end do
end do
! escreve campo no arquivo ASCII
open(30, file='campoFicticio.ascii')
write(30,*) z
close(30)
end program campoFicticio
PS. 2: Abaixo as linhas de comando para compilar os programas f90 e rodar os scripts GrADS e NCL
FORTRAN:
$ gfortran -o programaFORTRAN.exe programaFORTRAN.f90
GRADS:
$ grads -bpc scriptGRADS.gs
NCL:
$ ncl scriptNCL.ncl
nas quais programaFORTRAN, scriptGRADS e scriptNCL são os nomes dos arquivos que contêm o programa em Fortran 90, o script do GrADS e o script do NCL, respectivamente, e gfortran é o compilador Fortran 90 que acompanha a maioria das distribuições linux. O símbolo $ indica o prompt da linha de comando do terminal do linux, não sendo necessária a sua digitação.
FORTRAN:
$ gfortran -o programaFORTRAN.exe programaFORTRAN.f90
GRADS:
$ grads -bpc scriptGRADS.gs
NCL:
$ ncl scriptNCL.ncl
nas quais programaFORTRAN, scriptGRADS e scriptNCL são os nomes dos arquivos que contêm o programa em Fortran 90, o script do GrADS e o script do NCL, respectivamente, e gfortran é o compilador Fortran 90 que acompanha a maioria das distribuições linux. O símbolo $ indica o prompt da linha de comando do terminal do linux, não sendo necessária a sua digitação.