O NCL possui uma grande variedade de funcoes e subrotinas, como pode ser visto em http://www.ncl.ucar.edu/Document/Functions/, que mostra as funcoes do NCL organizadas por categorias. Mesmo com todas estas funcoes alguma operacao bem especifica pode nao possuir uma funcao ou subrotina no NCL e voce devera produzir um programa para que ela seja realizada.Dependendo da complexidade da operacao, a utilizacao das funcoes da linguagem de script do NCL para criar este programa pode torna-lo ineficaz, levando muito tempo para completar a operacao ou mesmo nao conseguindo realiza-la. Nestas situacoes e melhor utilizar uma subrotina ou funcao externa, criada em outra linguagem de programacao.Um exemplo de uma operacao nao existente no NCL e a de adicionar linhas a um arquivo ASCII ja existente. Aqui vou mostrar como e possivel adicionar uma funcao deste tipo ao NCL por meio da linguagem Fortran 90. O NCL possibilita a utilizacao de subrotinas ou funcoes escritas em Fortran (77 ou 90) e em C nos seus scripts. Maiores informacoes sobre este procedimento podem ser obtidas em http://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclExtend.shtml.Apresento abaixo os tres passos necessarios para a utilizacao da subrotina escrita em Fortran 90.Passo 1) Escrever a subrotina em Fortran 90, que sera salva num arquivo chamado adicionaLinha.f90:subroutine addline(arquivo, dimLinha, fmt1, fmt2, linha) implicit none integer,parameter :: unidES=30 logical :: existeArq integer,intent(in) :: dimLinha,fmt1,fmt2 character(len=255),intent(in) :: arquivo real,dimension(dimLinha),intent(in) :: linha inquire(file=trim(adjustl(arquivo)),exist=existeArq) if (.NOT.existeArq) then print *,"Aviso: arquivo nao existe, arquivo sendo criado!" open(unidES,file=trim(adjustl(arquivo)),status='new') write(unidES,'(F.)') linha(1:dimLinha) else open(unidES,file=trim(adjustl(arquivo)),access='append') write(unidES,'(F.)') linha(1:dimLinha) end if close(unidES)end subroutine addLinePasso 2) Criar um arquivo auxiliar que permite o NCL entender a sintaxe do programa em Fortran 90 apresentado no Passo 1. Este arquivo contem uma declaracao da subrotina em Fortran 90 na sintaxe do Fortran 77 (Note a diferenca entre as declaracoes das variaveis da subrotina.). Neste exemplo, o arquivo auxiliar se chamara adicionaLinha.stub:C NCLFORTSTART subroutine addline(arquivo,dimLinha,fmt1,fmt2,linha) character*(*) arquivo integer dimLinha,fmt1,fmt2 real linha(dimLinha)C NCLENDPasso 3) Criar um arquivo objeto compartilhado (.so) usando o comando WRAPIT (http://www.ncl.ucar.edu/Document/Tools/WRAPIT.shtml), que vem com o proprio NCL. O comando WRAPIT possui varias opcoes. Neste exemplo, uso uma em especial, a -in, que manda o WRAPIT usar o compilador Fortran da Intel (http://software.intel.com/en-us/articles/non-commercial-software-download/) para criar o objeto compartilhado (Por favor, veja nas notas incluidas ao final deste texto do porque da utilizacao deste compilador), sendo executado da seguinte forma:WRAPIT -in adicionaLinha.stub adicionaLinha.f90Ao final da execucao desta linha de comando um arquivo adicionaLinha.so sera criado. E este arquivo que pode ser usado em scripts do NCL para executar a operacao programada na subrotina escrita em Fortran 90. Abaixo passo um script em NCL para testar esta funcao externa:external ADDLINE "./adicionaLinha.so"beginarq = "teste.txt"a = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10./)dimA = dimsizes(a)fmt1 = 5fmt2 = 1ADDLINE::addline(arq,dimA,fmt1,fmt2,a)endPronto! Uma nova funcao foi adicionada ao NCL gracas a sua interacao com outras linguagens de programacao, como o Fortran 90. A execucao do script em NCL escrito acima resultara num arquivo chamado teste.txt. Caso este arquivo ja exista no diretorio de execucao do script sera adicionada uma nova linha ao final do arquivo. Faca um teste, execute mais de uma vez este mesmo script!E isso ai, espero que esta dica seja util.NOTA) Por