Quando bibliotecas numéricas ou subrotinas numéricas são utilizadas, a estrutura do programa segue uma forma semelhante à estrutura do programa apresentada no Capítulo 11.
Sendo assim devemos dividir o programa em um módulo de declaração de variáveis globais, programa principal, subrotinas numérica e subrotina que conterá o modelo matemático a ser resolvido:
Declaração de Variáveis Globais
Subrotina Numérica Programa Principal
Subrotina do Modelo Matemático
Quando usamos uma subrotina numérica, esta subrotina é chamada pelo programa principal, que por sua vez chama a subrotina do modelo matemático.
Módulo de Variáveis Globais
O módulo de variáveis globais é muito útil quando se utiliza bibliotecas numéricas, pois é a forma mais fácil e eficiente de passar os valores das variáveis entre o programa principal e a subrotina que contém o modelo matemático.
A programação do módulo tem estrutura:
MODULE GLOBAL :
VARIÁVEIS :
END MODULE
Programa Principal e Chamada da Subrotina Numérica
O programa principal deve conter a leitura e/ou inicialização das variáveis as serem usadas, e a chamada para a subrotina do método numérico: Muitas subrotinas numéricas tem como um dos parâmetros de chamada, o nome da subrotina que contém o modelo matemático. Neste caso o nome da subrotina do modelo deve ser declarada no comando EXTERNAL:
PROGRAM <nome> USE <biblioteca> USE GLOBAL
EXTERNAL <subrotina do modelo> :
INICIALIZAÇÕES :
CALL <subrotina numérica> :
END
onde <nome> é o nome que identifica o programa.
<biblioteca> é o nome da biblioteca numérica usada. Este comando é usado somente se o código da subrotina com o método numérico for intrínseco à biblioteca numérica. O comando não deve ser usado se o código da subrotina numérica for inserido ao programa. <subrotina do modelo> é o nome da subrotina que contém o modelo
matemático.
<subrotina numérica> é o nome da subrotina do método numérico e os parâmetros a serem passados para esta subrotina
Subrotina do Modelo Matemático
A subrotina do modelo matemático deve conter as equações que descrevem o modelo e cálculos auxiliares necessário para o cálculo das equações do modelo.
SUBROUTINE <nome> (<variáveis>) :
EQUAÇÕES DO MODELO MATEMÁTICO :
END SUBROUTINE
onde <nome> é o nome que identifica a subrotina. Deve-se ter o cuidado de não especificar nenhuma variável no programa contendo o mesmo nome da subrotina.
<variáveis> é a lista de variáveis que são passadas do programa principal ou outra subrotina para esta subrotina.
12.1.1. Bibliotecas Numéricas
As bibliotecas numéricas são um conjunto de subrotinas contendo vários tipos de métodos numéricos. Estas bibliotecas podem vir na forma de módulos ou na forma de códigos individuais.
Quando a biblioteca está na forma de módulo, não é possível visualizar o código da subrotina, e para usar uma subrotina em específico deve-se declarar o uso do módulo (usando o comando USE) e depois chamar a subrotina usando o comando CALL.
Quando a biblioteca está na forma de código, deve-se copiar o código da subrotina para o programa ou deve-se adicionar o arquivo com a subrotina para o projeto sendo desenvolvido. Neste caso não se utiliza o comando USE para declarar o uso da biblioteca. Somente é necessário chamar a subrotina.
Bibliotecas na forma de módulo:
IMSL (acompanha vários compiladores Fortran) NAG
Bibliotecas na forma de código:
Numerical Recipes (pode ser lido em www.nr.com) Outras
12.1.2. Usando Bibliotecas Numéricas – I MSL
A biblioteca numérica IMSL é uma das bibliotecas mais usadas pois acompanha os compiladores Fortran: Compaq Fortran e Intel Fortran; e vem como opcionais em vários outros compiladores.
A estrutura geral de um programa que use alguma subrotina numérica do IMSL é:
MODULE GLOBAL
! DECLARAÇÃO DAS VARIÁVEIS GLOBAIS INTEGER <variáveis>
REAL*8 <variáveis> END MODULE
! PROGRAMA PRINCIPAL PROGRAM <nome>
USE IMSL ! USA SUBROTINAS NUMÉRICAS DO IMSL USE GLOBAL ! USA VARIÁVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL <subrotina do modelo> ! SUBROTINA DO MODELO ! INICIALIZAÇÃO DAS VARIÁVEIS DO MODELO
<variável> = <valor>
! INICIALIZAÇÃO DOS PARÂMETROS DA SUBROTINA <parâmetros> = <valor>
! CHAMA A SUBROTINA DO MÉTODO NUMÉRICO CALL <subrotina do método numérico>
! IMPRIME OS RESULTADOS PARCIAIS WRITE <variáveis>
END
! SUBROTINA QUE CONTÉM O MODELO MATEMÁTICO SUBROUTINE <subrotina do modelo>
USE GLOBAL ! USA VARIÁVEIS GLOBAIS IMPLICIT REAL*8(A-H,O-Z)
! EQUAÇÕES DO MODELO <equações>
12.1.3. Usando Bibliotecas Numéricas – Outras
Quando bibliotecas numéricas que vem na forma de código são usadas, o código desta subrotina deve ser copiado para o final do programa. A estrutura geral de um programa que use este tipo de subrotina numérica é:
MODULE GLOBAL
! DECLARAÇÃO DAS VARIÁVEIS GLOBAIS INTEGER <variáveis>
REAL*8 <variáveis> END MODULE
! PROGRAMA PRINCIPAL PROGRAM <nome>
USE GLOBAL ! USA VARIÁVEIS GLOBAIS IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL <subrotina do modelo> ! SUBROTINA DO MODELO ! INICIALIZAÇÃO DAS VARIÁVEIS DO MODELO
<variável> = <valor>
! INICIALIZAÇÃO DOS PARÂMETROS DA SUBROTINA <parâmetros> = <valor>
! CHAMA A SUBROTINA DO MÉTODO NUMÉRICO CALL <subrotina do método numérico>
! IMPRIME OS RESULTADOS PARCIAIS WRITE <variáveis>
END
! SUBROTINA QUE CONTÉM O MODELO MATEMÁTICO SUBROUTINE <subrotina do modelo>
USE GLOBAL ! USA VARIÁVEIS GLOBAIS IMPLICIT REAL*8(A-H,O-Z)
! EQUAÇÕES DO MODELO <equações>
END SUBROUTINE
! SUBROTINA QUE CONTÉM O MÉTODO NUMÉRICO
! A SUBROTINA DEVE SER COPIADA NESTE PONTO DO PROGRAMA ! NÃO DEVE-SE FAZER NENHUMA ALTERAÇÃO NESTA SUBROTINA SUBROUTINE <subrotina do método numérico>
<código da subrotina> END SUBROUTINE