Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROGRAMAO
FORTRAN
PARA ENGENHARIA
1a Edio
2003
ii
Copyright by Fabiano Fernandes
Capa
Fabiano Fernandes
Reviso
Liliane Maria Ferrareso Lona
Sueli Rodrigues
Desenhos
Fabiano Fernandes
Ficha Catalogrfica
F391p
ISBN 85-XXX
iii
SUMRIO
1. INTRODUO
1.1. O Curso
1
2
2. LGICA DE PROGRAMAO
2.1. Algoritmo
2.2. Fluxograma
Exerccios
3
3
4
9
3. COMPILADOR
3.1. Criando um Projeto
3.1.1. Usando um Cdigo Pronto em um Novo Projeto
3.2. Cdigo em Fortran 90
3.4. Cdigo em Fortran 77
11
11
18
18
19
21
21
23
5. CALCULOS MATEMTICOS
5.1. Operaes Matemticas Bsicas
5.2. Funes Matemticas
25
25
26
29
30
32
7. PROCESSOS DECISRIOS
7.1. Operadores Relacionais
7.2. IF..THEN
7.3. IF..THEN..ELSE
7.3.1. Forma Antiga
7.4. Comparao em Conjunto
7.5. Processo Decisrio por Faixa ou Classes
Exerccios
33
33
33
36
38
38
41
44
iv
8. LOOPS
8.1. Loops Limitados
8.1.1. Forma Antiga
8.2. Loops por Deciso
8.3. Loops Infinitos
8.4. CYCLE
Exerccios
47
47
50
51
54
56
57
9. VETORES E MATRIZES
9.1. Tipos de Vetores e Matrizes
9.2. Declarao de Vetores
9.3. Atribuio de Valores
9.4. Operaes com Vetores e Matrizes
9.5. Funes Intrnsecas
9.6. Loops com Vetores e Matrizes
9.7. Processos Decisrios com Vetores e Matrizes
9.7.1. WHERE
9.7.2. FORALL
Exerccios
59
59
59
59
60
61
62
63
65
67
68
69
69
70
71
72
72
75
75
76
76
77
77
80
80
83
83
85
86
87
88
88
91
94
94
101
105
105
109
109
115
13. ERROS
13.1. Erros de Execuo
119
123
14. DEBUG
14.1. Quando Debugar
14.2. Antes de Debugar
14.3. Problemas que Causam Problemas
14.3.1. Programa Parece No Sair do Lugar
14.3.2. Ocorre Diviso por Zero / Erro em Logaritmo
14.3.3. Overflow ou Nmero Infinito
14.3.4. Resultado NAN
14.3.5. Resultado Retornado Estranho
14.4. Usando o Debug do Compaq Fortran
125
125
125
125
125
126
126
127
128
128
1. INTRODUO
1.1. O Curso
O Fortran tem sido usado por cientistas e engenheiros por muitos anos,
sendo uma das principais linguagens de programao cientfica especialmente
devido a sua capacidade em fazer clculos. Taxada de linguagem obsoleta pelas
pessoas que desconhecem as novas atualizaes na sua estrutura de
programao, o Fortran hoje possui todos os elementos de linguagem que
tornaram o C++ famoso.
O Fortran, abreviao de FORmula TRANslation (ou originalmente IBM
Mathematical FORmula Translation System), a mais velha das linguagens de
alto nvel e foi desenvolvida pelo grupo IBM no final da dcada de 1950. A
linguagem ganhou popularidade na dcada de 1960 e ganhou sua primeira
verso padronizada: Fortran 66.
Em meados da dcada de 1970, todo grande computador vinha com a
linguagem Fortran embutida e era a linguagem mais robusta da poca e tinha
um processamento muito eficiente. Alm disso o cdigo podia ser compilado
(transformado em um programa executvel) em qualquer tipo de sistema de
computador e portanto se tornou a linguagem mais usada no meio cientfico. O
domnio do Fortran levou a uma nova atualizao que ganhou o nome de
Fortran 77 (pelo qual o Fortran conhecido at hoje).
Infelizmente a reviso para o Fortran 77 foi muito conservadora
mantendo uma estrutura de programao antiga. Com a popularizao dos
computadores pessoais, os jovens programadores da dcada de 1980 preferiam
aprender Basic, Pascal e no final dos anos 80, o C; que eram linguagens que
tinham uma estrutura de programao mais bem estruturada e moderna. Essa
preferncia dos jovens programadores levou no incio da dcada de 1990 a uma
mobilizao para implantar o C++ como linguagem de programao
preferencial no meio cientfico, aliando capacidade de clculo com uma
estrutura moderna de programao. A migrao para o C++ s no foi maior
porque muitas rotinas de mtodos numricos estavam em Fortran e daria muito
trabalho e levaria muito tempo para traduzi-las para o C++.
Na mesma poca (1991) o Fortran recebeu sua maior atualizao, com a
introduo do Fortran 90 que permitia o uso de muitos comandos e estrutura das
linguagens mais modernas.
2. LGICA DE PROGRAMAO
Programar em Fortran, assim como em qualquer outra linguagem de
programao simples, o complicado organizar o pensamento lgico e
estruturar a resoluo do problema para se atingir o objetivo que se deseja.
um erro comum e grave para o iniciante em programao, escrever um
programa sem ao menos esquematizar as aes que devem ser executadas pelo
programa (algoritmo) de modo a solucionar o problema.
Nos primeiros programas, o algoritmo ajuda a organizar o pensamento
lgico, principalmente quando decises devem ser tomadas ou operaes com
vetores e matrizes so necessrios.
Aps algum tempo de experincia, o processo de organizao da estrutura
do programa passa de a ser lgico e fcil, no sendo necessrio fazer um
algoritmo muito detalhado. Porm se o programa for utilizado por mais de uma
pessoa, o algoritmo ainda necessrio para facilitar o entendimento do
programa por outras pessoas, uma vez que ler um algoritmo bem mais fcil do
que ler o cdigo de um programa.
Fases de um Algoritmo
O algoritmo deve conter as trs fases fundamentais da resoluo de um
problema. Estas fases so a leitura de dados, clculos (ou processo) e impresso
dos resultados.
Entrada de
Dados
Processo
Impresso dos
Resultados
EXEMPLO 1
Um algoritmo para calcular a mdia de trs nmeros tomaria a forma:
1. Ler N1, N2 e N3
2. Calcular Mdia pela equao: Media =
N1+ N2 + N3
3
3. Imprimir Mdia
2.2. Fluxograma
2.1. Algoritmo
Um algoritmo uma sequncia finita de passos que levam a execuo de
uma tarefa, ou seja, a receita que deve ser seguida para se chegar a uma meta
especfica. O programa por sua vez, nada mais do que um algoritmo escrito
numa linguagem de computador.
Regras Bsicas para Construo de um Algoritmo
Para escrever um algoritmo deve-se descrever a sequncia de instrues
de maneira simples e objetiva, podendo-se utilizar algumas tcnicas bsicas:
v
v
v
v
EXEMPLO 2
Fi
Mi
i
Ler N1, N2 e N3
Incio
Calcular Mdia
Imprimir Mdia
EXEMPLO 3
Uma aplicao simples em engenharia o calculo do balano de massa em um
tanque de mistura, como o mostrado na Figura 2.2.
Corrente 1
Corrente 2
Imprimir Resultados
Fim
M3 = F1 1+ F 2 2
Densidade:
3 =
F1 1+ F 2 2
F3
EXEMPLO 4
Se considerarmos os trocadores de calor, o coeficiente de troca trmica
depende do tipo de escoamento (laminar ou turbulento) e pode ser calculado
por meio de correlaes que so definidas para cada faixa de nmero de
Reynolds.
Um programa que calcule o coeficiente de troca trmica deve conter um
processo decisrio que utilize a correlao correta em funo do valor do
nmero de Reynolds, conforme as equaes:
EQ1: NNu = 0,153 NRe
0,8
7
EQ2: NNu = 10,56 NRe
0,33
d
NPr 0,33
L
0,33
0,14
dimetro do tubo
comprimento do tubo
nmero de Nusselt
nmero de Prandtl
nmero de Reynolds
razo de viscosidade do fluido no centro e na parede
do tubo
EXEMPLO 4
muito comum em engenharia, termos que gerar dados para montar um
grfico de uma determinada funo. A velocidade terminal de uma partcula
funo do tamanho da partcula e das propriedades do fluido e do slido e pode
ser calculada pela equao:
ut =
0,524 Dp 2 ( s f )
Incio
s, f,
NRe, NPr, d, L,
Sim
I=1
No
Calcula NNu pela
equao EQ2
DP = 50 + (I-1)*DeltaDP
Calcula Ut
Imprime NNu
Dp, Ut
Fim
I = I +1
Sim
I <= 100
No
Fim
10
EXEMPLO 5
A tecnologia Pinch, usada para otimizar a troca de energia entre as diversas
correntes de um processo, requer a organizao das temperatura das diversas
correntes em ordem decrescente, em uma de suas etapas.
As temperaturas das correntes so armazenadas em um vetor que deve ser
organizado do maior valor para o menor valor.
Se a temperatura de 10 correntes tiverem de ser organizadas, o fluxograma a
ser seguido ser dado por:
Incio
I=0
Posio
Valor
12
25 11 22 12 15
10
18
I=I+1
Valor
12
25 11 22 12 15
10
18
J=I
J=J+1
Sim
Sim
B = A(I)
A(I) = A(J)
A(J) = B
J < 10
No
No
Uma vez que a primeira posio do vetor foi preenchida corretamente com o
maior valor do vetor, podemos repetir a mesma operao para achar o
segundo maior valor e coloc-lo na segunda posio do vetor. Para tanto, o
contador I incrementado recebendo o valor 2 referente segunda posio no
vetor A. Para colocar o segundo maior valor do vetor nesta posio, devemos
comparar o valor desta posio com os valores contidos nas posies
restantes do vetor, ou seja com as posies, 3 at 10. Novamente, se o valor
de A(J) for maior que o valor de A(I), ento trocamos estes valores de posio
de forma que o maior valor fique na segunda posio:
I=9
Sim
Fim
Posio
Valor
25 9 12
11 22 12 15
10
18
11
Note que o contador I deve variar entre I+1 e 10 (ltima posio do vetor).
A operao repetida para as outras posies do vetor. Para um vetor com 10
posies, o valor do contador I varia de 1 a 9 e no de 1 a 10 pois no final do
processo, o valor contido na posio 10 j ser o menor valor contido no vetor.
Alm disso no seria possvel comparar o valor A(10) com o valor A(11) pois
este ltimo no existe.
EXERCCIOS
EXERCCIO 1
Um procedimento muito comum em programao para engenharia a obteno
das razes de uma funo. Para uma funo de segundo grau, como a mostrada
no exemplo 4, em que a velocidade de terminao uma funo de segundo
grau em relao ao dimetro da partcula, podemos determinar de duas formas o
dimetro da partcula dado uma velocidade terminal. Diretamente,
reorganizando a equao isolando o dimetro da partcula em funo da
velocidade terminal:
Dp =
ut
0,524 ( s f )
0 = ut
0,524 D p2 ( s f )
12
EXERCCIO 2
A correlao a ser utilizada para calcular as propriedades fisicoqumicas
depende da fase em que a substncia se encontra: gs ou lquido. A deciso de
qual correlao deve ser utilizada pode ser feita com base na comparao entre
a temperatura de ebulio do composto e a temperatura do processo.
Desenvolva um fluxograma para calcular a capacidade calorfica de uma
substncia.
As correlaes para o clculo da calorfica so:
para gs:
Cp = A + B T + C T 2
para lquido:
A2
+ B 2 A C t A D t2
t
T
t = 1
Tc
Cp =
Cp
capacidade calorfica
T
temperatura
Tb
temperatura de ebulio
Tc
temperatura crtica
A, B, C, D
parmetros
EXERCCIO 3
O exemplo 5 apresentou como se organiza um vetor (contendo 10 valores) em
ordem decrescente. Desenvolva um algoritmo que organize um vetor, contendo
N valores, em ordem crescente.
14
13
3. COMPILADOR FORTRAN
Compilador o nome que se d ao programa que ir transformar o seu
cdigo Fortran em um programa executvel. Existem vrios compiladores
Fortran, como o Intel Fortran, Compaq Fortran, GCC, ProFortran, entre outros.
Atualmente os compiladores mais usados so:
v INTEL e COMPAQ FORTRAN
Devido a facilidade de sua interface, modernidade do cdigo que
compila, capacidade de gerar aplicativos com interface grfica em
Windows (QuickWin) e grande variedade de mtodos j codificados em
sua biblioteca numrica.
v GNU FORTRAN (GCC)
Devido a ser um programa livre (grtis). um compilador para Fortran
77 mas contm a maioria dos comandos do Fortran 90 alm da
possibilidade de formatao livre do cdigo. No cria aplicativos com
interface grfica e no contm mdulo de bibliotecas numricas.
15
16
Este arquivo texto poder ser editado e o cdigo do programa poder ser
digitado nele. Aps editado, este arquivo deve ser gravado com a extenso .f90.
Para salvar o arquivo selecione File no menu principal e depois selecione a
opo Save, ou simplesmente pressione o boto Save (Figura 3.5). O nome deste
arquivo poder ser igual ao nome do projeto (recomendvel para no causar
muita confuso).
17
18
Este arquivo por sua vez dever ser inserido no projeto. Para isto,
selecione Project no menu principal e depois selecione a opo Add To Project
e Files (Figura 3.7). Selecione o arquivo f90 que foi criado.
19
20
PROGRAM <nome>
:
cdigo
:
END
colunas
1
5
A
5 6 7
PROGRAM <NOME>
:
cdigo
:
END
72
PROGRAMA EXEMPLO
! CALCULO DE UM BALANO POPULACIONAL
A = (TAU + BETA)*(TAU + BETA/2.0*(TAU + BETA)*(R 1.0))*R/ &
(1.0 + TAU + BETA)**R
END
72
C
PROGRAMA EXEMPLO
! PROGRAMA PARA CALCULO DE 2 + 2
A=2+2
! EQUAO
END
6 7
B
5 6 7
PROGRAM EXEMPLO
PROGRAMA PARA CLCULO DE 2 + 2
A = 2 + 2
END
72
Qualquer linha de cdigo deve ser escrito at a coluna 72. Aps a coluna
72, nenhum cdigo lido pelo compilador. Se o texto do cdigo chegar at a
coluna 72, o restante da linha de cdigo dever continuar na coluna 7 da linha
de baixo. Um caracter qualquer deve ser colocado na coluna 6 para identificar
que aquela linha se trata da continuao da linha anterior.
1
C
5 6 7
72
PROGRAM EXEMPLO
CALCULO DE BALANO POPULACIONAL
A = (TAU + BETA)*(TAU + BETA/2.0*(TAU + BETA)*(R 1.0)*R
* /(1.0 + TAU + BETA)**R
END
21
22
v CHARACTER*i
sequncia alfanumrica com um mximo de i caracteres
no pode ser utilizada em operaes matemticas
v COMPLEX
nmero complexo
v LOGICAL
varivel lgica
possui dois valores: .FALSE. (falso) e .TRUE. (verdadeiro)
este tipo de varivel tem sido gradativamente substitudo por nmero
inteiros onde 0 se refere a falso e 1 a verdadeiro.
24
23
S = Texto
S = texto
25
5. CLCULOS MATEMTICOS
26
1.
2.
3.
4.
EXEMPLO
As equaes:
A = B + C D
A = BD + E
A=
B C + DE
F
A equao:
(B C )E + A B
Z=
Z = (B C )E +
AB
FG
que por sua vez resultaria num valor muito diferente do que o valor desejado
inicialmente.
ACOS(A)
ACOSD(A)
ASIN(A)
27
ASIND(A)
ATAN(A)
ATAND(A)
28
LOG(A)
LOG10(A)
calcula o logaritmo de A
A pode ser real ou complexo
SIN(A)
SIND(A)
SINH(A)
COS(A)
TAN(A)
COSD(A)
TAND(A)
COSH(A)
TANH(A)
COTAN(A)
CEILING(A)
COTAND(A)
EXP(A)
calcula a exponencial de A
A pode ser somente real
EXEMPLO 2
INT (A)
LEN(S)
D
X = 1 exp
D *
30
29
EXEMPLO
WRITE(*,*) A,B,C
WRITE(2,*) A,B
WRITE(6,100) A,B
WRITE(*,(2F5.2)) A,B
EXEMPLO
READ (*,*) A,B,C
READ(2,*) A,B
31
F5.2
F10.4
F5.5
Ax
yX
WRITE(*,(I3,2X,F5.2,2X,E8.2)) I,C,A
Imprimiria: 100__12.56__1.03E+03
WRITE(*,(A8,F10.3,F10.1)) S,A,B
Imprimiria: MEDIA_____1030.560_______5.6
WRITE(*,(I2,3F5.2)) N,A,B,C
Imprimiria: _5XXXXX_5.5612.56
32
EXERCCIOS
y espaos
EXERCCIO 1
No controle de qualidade, alguns grficos de controle se baseiam na mdia de
trs valores. Escreva um programa para ler trs valores nmeros reais, calcular
sua mdia e imprimir o resultado com duas casas decimais.
Forma de Uso
Incorporado ao comando WRITE:
WRITE(*,(I2,3X,F5.2,3X,F5.2)) N, A, B
EXEMPLO
Sendo:
I = 100
N=5
A = 1030.56
B = 5.55667
C = 12.563
S = MEDIA
EXERCCIO 2
Escreva um programa para ler dois nmeros reais, calcular o logaritmo do
primeiro nmero, o coseno do segundo e imprimir o resultado destas duas
operaes e o produto dos dois resultados.
33
7. PROCESSOS DECISRIOS
34
IF (<comparao>) THEN
:
PROCESSO
:
END IF
EXEMPLO 1
CD =
24
Re
7.2. IF..THEN
O comando IF..THEN tem a seguinte estrutura lgica:
CD =
24
1+ 0,14 Re 0,7
Re
Incio
comparao
Verdadeiro
PROCESSO
CD
Re
coeficiente de arraste
nmero de Reynolds
Falso
Fim
35
36
. IF..THEN..ELSE
Incio
A estrutura do
Re
Incio
CD = 24/RE
Re > 0.1
Sim
CD = CD*(1 + 0.14*RE**0.7)
comparao
No
Verdadeiro
PROCESSO 1
Falso
PROCESSO 2
CD
Fim
Fim
CD = 24.0D0/RE
IF (RE > 0.1D0) CD = CD*(1.0D0 + 0.14D0*RE**0.7D0)
! IMPRESSO DO RESULTADO
END
EXEMPLO 2
No clculo da perda de carga, o fator de atrito calculado de acordo com o
nmero de Reynolds (Re). Se o nmero de Reynolds for < 2100, a equao 1
usada (regime laminar), caso contrrio, a equao 2 utilizada (regime
turbulento).
EQ1:
f=
64
Re
[eq. Dorey-Weisbach]
37
EQ2:
f =
2 log + 1,74
D
ELSE
[eq. Von Karman]
Incio
Re, E, D
Re < 2100
38
Verdadeiro
Calcular EQ1
Falso
Calcular EQ2
Imprime f
Fim
39
40
Incio
IRR = 0
Q, UC, DELTAT
Resultado
Verdadeiro
Falso
Falso
Verdadeiro
Verdadeiro
Falso
Falso
Verdadeiro
Sim
CD
No
IRR = 0
UC =/ 0 e
DELTAT =/ 0
"Erro no Clculo"
Sim
Calcula AC
No
Fim
IRR = 1
e
IF ((<comparao>).OR.(<comparao>)) THEN
EXEMPLO 3
Um dos pontos que mais gera erro de execuo em programas a diviso por
zero. Um programa bem estruturado deve prevenir a ocorrncia de erros antes
do erro ocorrer, alertando o usurio para o problema.
O clculo da rea de troca trmica necessria em trocadores de calor dado
pela equao:
Ac =
Q
Uc T
Ac
Q
Uc
T
No caso, uma diviso por zero pode ocorrer se Uc ou T forem iguais a zero.
Um programa bem feito deve prever esta possibilidade e impedir o erro antes
41
42
ELSE
! PODERIA OCORRER DIVISO POR ZERO
IRR = 1
ENDIF
! IMPRESSO DOS RESULTADOS
IF (IRR == 0) THEN
WRITE(*,*) AC
ELSE
WRITE(*,*) ERRO NO CLCULO DIVISO POR ZERO
ENDIF
END
comparao
Verdadeiro
PROCESSO 1
Falso
comparao
Verdadeiro
PROCESSO 2
EXEMPLO 4
Falso
.
.
comparao
Verdadeiro
PROCESSO 3
Falso
PROCESSO 4
Fim
QK C
1+ K C
EQ2: q ADS = K C
[eq. Langmuir]
[eq. Freundlich]
43
EQ3: q ADS =
QK p
(1+ K p + p / P ) (1 p / P )
[eq. BET]
IDX
IDX = 1
Verdadeiro
Q, C, AK
44
CASE (1) ! ISOTERMA DE LANGMUIR
READ(*,*) Q, C, AK
QADS = Q*C*AK/(1.0D0 + C*AK)
CASE (2) ! ISOTERMA DE FREUNDLICH
READ(*,*) AK, C, AN
QADS = AK*C**(-AN)
CASE (3) ! ISOTERMA BET
READ(*,*) Q, AK, P, PTOT
QADS = Q*P*AK/((1.0D0 + AK*P + P/PTOT)*(1.0D0 P/PTOT))
END SELECT
! IMPRESSO DO RESULTADO
WRITE(*,*) QADS
END
Falso
Calcula EQ1
IDX = 2
Verdadeiro
AK, C, AN
EXERCCIOS
Falso
Calcula EQ2
IDX = 3
Verdadeiro
Q, AK, P, PTOT
EXERCCIO 1
Desenvolva um programa para calcular a perda de carga usando as frmulas de
Fair-Whipple-Hsiao.
Falso
Calcula EQ3
EQ1: PC = 0,00086
Q1,75
D 4,75
QADS
Fim
EQ2: PC = 0,0007
Q1,75
D 4,75
D
L
PC
Q
dimetro do tubo
comprimento do tubo
perda de carga
vazo de gua
EXERCCIO 2
Refaa o Exemplo 2 inserindo no programa um sistema para deteco de erros
devido a diviso por zero. Crie um sistema para apresentar ao usurio uma
mensagem de erro indicando qual varivel apresentou o problema.
45
EXERCCIO 3
Desenvolva um programa para calcular a presso de vapor de uma substncia
onde o usurio seleciona a equao pela qual a presso de vapor ser calculada.
Equaes:
A X + B X 1,5 + C X 3 + D X 6
1 X
X = 1
T
TC
B
T + C
PC
10 Z 3
Z1 = 5,808 + 4,93
Z2 =
36
35,0 TR 6 + 42 ln(TR )
TR
T
TC
A,B,C,D
Pvap
PC
TC
TR
parmetros da equao
presso de vapor
presso crtica
temperatura crtica
temperatura relativa
fator acntrico
46
48
47
8. LOOPS
Loops so rotinas cclicas nas quais um processo executado por um
nmero pr-determinado de vezes ou enquanto uma condio de permanncia
no loop continue sendo satisfeita.
DO <var> = x,y,z
:
PROCESSO
:
ENDDO
x
y
z
<var> = x
PROCESSO
EXEMPLO 1
<var> = <var> + z
<var> < y
No
W(r ) = ( + ) + ( + ) (r 1)
2
(1+ + )r
Fim
ktd
ktm ktx [X ]
+
+
kp [M] kp kp [M]
ktc
kp [M]
kfm
kfx
kp
ktc
ktd
r
49
W
[M]
[X]
concentrao de CTA
50
PROGRAM DPM
IMPLICIT REAL*8 (A-H,K,O-Z)
I=I+1
1
I < 100
Sim
pelo
comando
No
Fim
100
DO 100 I = 1,100
R = I*1000.0D0
W=
WRITE(*,*) R,W
CONTINUE
Esta forma de controle de loop caiu em desuso e no deve ser mais utilizada.
51
52
e=0=
1
f
0,5
2,5226
+ 2 log
+
3,7065 D Re f 0,5
f
/D
Re
Incio
comparao
[eq. 2]
fator de atrito
rugosidade relativa
nmero de Reynolds
Falso
Fim
Verdadeiro
PROCESSO
1
No
Re, Rug
Sim
F1 = 0,1
F2 = 0,007
Fim
F = (F1 + F2)/2
EXEMPLO 2
Sistemas de busca por mnimos e zeros de funes podem usar o esquema de
loop por desio para determinar quando parar a busca do mnimo e/ou zero
de funo.
A equao de Colebrook uma das melhores equaes para calcular o fator
de atrito em tubulaes industriais, porm esta equao uma funo
intrnseca e requer um sistema iterativo para calcular o fator de atrito. O
mtodo de bisseo pode ser usado para esta operao.
ERRO < 0
1
Sim
F1 = F
ERRO = - ERRO
No
F2 = F
1
f
0,5
2,5226
= 2 log
+
3
,
7065
Re f 0,5
[eq. Colebrook]
Segundo o fluxograma, aps a leitura e inicializao das variveis, o algoritmo
entra no loop para clculo do fator de atrito. No loop, o fator de atrito
calculado baseado na teoria do mtodo da bisseo. O erro calculado e
dependendo do seu valor, pode-se inferir se o valor atual do fator de atrito est
54
53
super ou subestimado e baseado neste resultado, define-se os novos limites
superior e inferior para o valor do fator de atrito.
PROGRAM FATRITO
IMPLICIT REAL*8 (A-H,O-Z)
! LEITURA DAS VARIVEIS
READ(*,*) RE, RUG
Incio
PROCESSO
comparao
Verdadeiro
Falso
Fim
EXEMPLO 3
Se o exemplo 2 for utilizado com um loop infinito, tem-se o seguinte
fluxograma:
55
DO
Incio
Re, Rug
No
F = (F1 + F2)/2
F1 = 0,1
F2 = 0,007
Calcula ERRO pela EQ2
TOL = 0,001
ERRO = 1,0
1
56
ERRO < 0
Sim
F1 = F
ERRO = - ERRO
No
F2 = F
Sim
ERRO < TOL
F = (F1 + F2)/2.0D0
ERRO = F**(-0.5D0) + 2.0D0*DLOG10(RUG/3.7065D0 &
+ 2.5226/(RE*F**0.5D0))
IF (ERRO < 0.0D0) THEN
F1 = F
ERRO = - ERRO
ELSE
F2 = F
ENDIF
IF (ERRO < TOL) EXIT
ENDDO
! IMPRESSO DOS RESULTADOS
WRITE(*,*) F
END
No
Fim
8.4. CYCLE
Figura 8.6. Fluxograma lgico para clculo do fator de atrito.
Segundo o fluxograma, aps a leitura e inicializao das variveis, o algoritmo
entra no loop para clculo do fator de atrito. No loop, o fator de atrito
calculado pelo mtodo de bisseo. O erro calculado e dependendo do valor
do erro, pode-se inferir se o valor atual do fator de atrito est super ou
subestimado e baseado neste resultado, define-se os novos limites superior e
inferior para o valor do fator de atrito.
A comparao entre os valores do erro (ERRO) e da tolerncia requerida (TOL)
feita no final do loop. Caso o erro seja menor do que a tolerncia, a execuo
do programa sai do loop usando o comando EXIT.
Em termos de programao, a estrutura a seguinte:
PROGRAM FATRITO2
IMPLICIT REAL*8 (A-H,O-Z)
<var> = x
PROCESSO 1
Verdadeiro
<var> < y
Falso
PROCESSO 2
<var> < y
Sim
No
Fim
57
58
EXERCCIO 2
Desenvolva um algoritmo e programa para gerar pontos para o grfico de
performance de um sedimentador, obtendo pontos de 50 em 50 unidades da
varivel X. Sendo que o fim da gerao de dados para o grfico for quando o
valor do fluxo de sedimentao (G) for 1000 vezes menor do que o valor
mximo da funo (Gmax).
A equao do sedimentador dada pela equao:
DO <var> = x,y,z
:
PROCESSO 1
:
IF (<comparao>) CYCLE
:
PROCESSO 2
:
ENDDO
G = X 10 ( A X + B)
onde A = -0.0142
B = 0.370
G
X
fluxo de sedimentao
concentrao de slidos
O programa deve obter Gmax (maior valor da funo) usando a mesma funo
acima.
EXERCCIOS
EXERCCIO 1
Os ciclones so projetados para remover partculas at um certo tamanho de
corte. Para o projeto do equipamento, a granulometria das partculas a serem
processadas deve ser conhecida.
A equao de granulometria dada pela equao de Rosin-Rammler-Bennett:
X n
E( X ) = 1 exp
D *
D*
E
n
X
tamanho
de
59
9. VETORES E MATRIZES
Em Fortran, os vetores e matrizes comeam a ser contados a partir da
posio 1.
Um vetor com 5 posies tem forma:
1
2
3
4
5
Uma matriz 3x5 tem forma:
1,1 1,2 1,3 1,4 1,5
2,1 2,2 2,3 2,4 2,5
3,1 3,2 3,3 3,4 3,5
60
v forma individual
A(2) = 10
v por faixa
A(2:5) = 10
B(1:3,3:4) = 10
v total
A = 10
faixas diferentes
B no tem 10 campos
61
EXEMPLO 2
MATMUL (A,B)
DO I = 1,10
A(I) = B(I,2)*C(I)
SUM = SUM + C(I)
ENDDO
A(1) = B(3) + 2
A(2) = B(3)*C(5)*3 + C(1)
D(1,3) = E(1,3) + F(2,7)
DOT_PRODUCT(A,B)
62
Incio
I=1
I=1
Sim
I=1
DP = DP + (X(I) - MEDIA)**2
I=I+1
I=I+1
X(I)
I=I+1
MAXVAL (A)
Sim
I<N
Sim
I<N
No
I<N
No
MEDIA = MEDIA / N
DP = (DP/(N-1))**0.5
MEDIA, DP
No
MINVAL (A)
SUM(A)
Fim
64
63
O programa para em Fortran para realizar o clculo teria a forma:
PROGRAM ESTAT
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION X(10)
Incio
I=1
! LEITURA DE VARIVEIS
WRITE(*,*) NUMERO DE DADOS A SEREM LIDOS: (MAXIMO = 10)
READ(*,*) N
WRITE(*,*) ENTRE COM OS DADOS DO CONJUNTO
DO I = 1,N
READ(*,*) X(I)
ENDDO
THETA(I) >TMAX(I)
THETA(I) = TMAX(I)
No
THETA(I) <TMIN(I)
! CALCULO DA MDIA
DO I = 1,N
MEDIA = MEDIA + X(I)
ENDDO
MEDIA = MEDIA/N
! CALCULO DO DESVIO PADRO
DO I = 1,N
DP = DP + (X(I) MEDIA)**2.0D0
ENDDO
DP = (DP/(N 1.0D0))**0.5D0
Sim
Sim
THETA(I) = TMIN(I)
No
I=I+1
Sim
I < NPARAM
No
Fim
DO I = 1,NPARAM
IF (THETA(I) > TMAX(I)) THETA(I) = TMAX(I)
IF (THETA(I) < TMIN(I)) THETA(I) = TMIN(I)
ENDDO
EXEMPLO 3
Em processos de estimativa de parmetros, os valores dos parmetros podem
ser armazenados em vetores e estes valores podem estar sujeitos a limites
superiores e inferiores.
No caso, os valores dos parmetros esto armazenados no vetor THETA, os
limites superiores no vetor TMAX e os limites inferiores no vetor TMIN.
65
66
9.7.1. WHERE
onde <comparao> a expresso usada para testar a condio a ser verificada.
O comando WHERE afeta todo o vetor ou matriz e geralmente usado
para realizar alguma operao matemtica com o vetor ou matriz.
Este comando tem a seguinte estrutura lgica:
Incio
comparao
PROCESSO 1
Falso
PROCESSO 2
I=I+1
Sim
I<n
DO I = 1,N
IF (<comparao>) THEN
:
PROCESSO 1
:
ELSE
:
PROCESSO 2
:
ENDIF
ENDDO
No
Fim
EXEMPLO 4
No caso de diviso dos elementos de dois vetores, a diviso no pode ocorrer
se o valor em alguma posio do vetor divisor for zero. O comando WHERE
pode ser usado para executar a diviso somente quando o valor divisor for
zero.
Em termos de programao, a estrutura :
PROGRAM DIVVET
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(5), B(5), C(5)
! LEITURA DAS VARIVEIS
DO I = 1,5
READ(*,*) A(I), B(I)
ENDDO
! CLCULO DA DIVISO
C = 0.0D0
WHERE (A /= 0.0D0) C = B/A
67
! IMPRESSO DOS RESULTADOS
DO I = 1,5
WRITE(*,*) I, C(I)
ENDDO
END
Se A e B fossem:
B
20
A
2
O resultado da diviso seria:
C
10
68
5
0
12
2
18
3
5
-1
-5
9.7.2. FORALL
O comando FORALL funciona como um loop DO..ENDDO, porm
pode ser usado com mais de uma varivel de controle, sendo til com operaes
com matrizes. Este comando tem a seguinte estrutura lgica:
Incio
I=1
J=1
PROCESSO
J=J+1
Sim
J<n
No
I=I+1
Sim
I<m
No
Fim
EXERCCIOS
EXERCCIO 1
Muitos programas para engenharia envolvem a normalizao de parte dos dados
de entrada, como por exemplo, programas para redes neurais. Desenvolva um
programa para normalizar um conjunto de dados. A normalizao feita usando
a frmula:
X NORM =
X X MIN
X MAX X MIN
X
XMAX
XMIN
XNORM
dado original
maior valor do conjunto de dados
menor valor do conjunto de dados
dado normalizado
69
70
! CLCULO
C = A*B
<unit>
! IMPRESSO DO RESULTADO
WRITE(3,*) C
<arquivo>
CLOSE(2)
CLOSE(3)
END
72
71
DIMENSION A(1000)
EXEMPLO 2
Um arquivo de dados pode ser usado para armazenar os dados de um reator
qumico, das condies iniciais de sua operao e dados cinticos da reao.
Uma linha do arquivo pode conter as dimenses do reator: altura e dimetro;
uma segunda linha pode conter os parmetros cinticos da reao: k
(constante cintica) e Ea (energia de ativao) e uma terceira linha pode conter
as condies operacionais iniciais do reator e reagentes: temperatura,
concentrao de reagente A e concentrao de reagente B, como mostrado
abaixo:
2.58
510.0
342.5
0.54
30100.5
0.015
9.3D-2
10.2.1. EOF
O comando EOF (end of file) pode ser usado para auxiliar a leitura de
arquivos grandes. Este comando indica se a ltima linha do arquivo j foi lida
ou no. Se EOF for igual a verdadeiro, o final do arquivo foi atingido. Se for
igual a falso, o final do arquivo ainda no foi atingido.
O uso deste comando tem a forma:
EXERCCIOS
PROGRAM LEARQ
IMPLICIT REAL*8 (A-H,O-Z)
OPEN(2, FILES = REAT.DAT)
READ(2,*) H,D
READ(2,*) AK, EA
READ(2,*) TEMP, CA, CB
END
EOF(<unit>)
EXERCCIO 1
Desenvolva um programa que leia o arquivo DATA01.TXT abaixo:
EXEMPLO 3
Se o arquivo DADOS.TXT que contm duas colunas de nmeros reais, porm
com um nmero desconhecido de linhas tiver de ser lido, o comando EOF pode
ser usado para controlar quando o programa deve parar de ler o arquivo.
PROGRAM READDATA
IMPLICIT REAL*8 (A-H,O-Z)
8.12D0
0.15D0
4.88D3
1030.4D0
Os dados devem ser lidos na varivel X. O programa deve calcular X2 e X3 e
imprimir na tela e em um arquivo os valores de X, X2 e X3, para cada um dos
quatro valores contidos no arquivo de leitura.
73
74
C A = C A0 exp( k t )
Concentrao de tolueno:
Ea
k = A exp
R T
CA
CA0
A
Ea
k
R
t
T
concentrao de tolueno
concentrao inicial de tolueno
fator pr-exponencial
energia de ativao
taxa de reao
constante dos gases
tempo
temperatura
XA =
Converso de tolueno:
XA
C A0 C A
C A0
converso
T
Ea
75
Programa Principal
Subrotinas
76
MODULE GLOBAL
REAL*8 DENS, VISC, COND
REAL*8 TEMP, PRES
REAL*8 CONCA, CONCB
INTEGER NPARAM
END MODULE
Funes
EXEMPLO 1
Um mdulo de variveis pode ser criado para resolver problemas de clculo de
reatores. Este tipo de problema geralmente necessita ser integrado e os dados
relativos ao processo deve ser compartilhados entre o programa principal e a
subrotina de integrao numrica.
78
77
11.3. Subrotinas
WRITE(*,*) C
END
EXEMPLO 1
Um exemplo simples para ilustrar aplicao de subrotinas a criao de uma
subrotina para calcular o produto entre dois nmeros reais.
PROGRAM PROD1
IMPLICIT REAL*8 (A-H,O-Z)
READ(*,*) A,B
! CHAMADA DA SUBROTINA:
CALL PRODUTO (A,B,C)
EXEMPLO 2
Se o mesmo exemplo fosse utilizado para multiplicar os campos de dois
vetores, teramos:
PROGRAM PROD2
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(10), B(10), C(10)
DO I = 1,10
READ(*,*) A(I), B(I)
ENDDO
CALL PRODUTO (A,B,C)
END
SUBROUTINE PRODUTO (A,B,C)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(10), B(10), C(10)
DO I = 1,10
C(I) = A(I)*B(I)
ENDDO
END SUBROUTINE
79
SUBROUTINE PRODUTO (N,V1,V2,V3)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION V1(N), V2(N), V3(N)
DO I = 1,N
V3(I) = V1(I)*V2(I)
ENDDO
END SUBROUTINE
80
11.4. Funes
As funes so subprogramas que executam procedimentos especficos e
retornam um valor nico. Uma funo pode ser chamada em vrios pontos do
programa de forma que ajuda a evitar a duplicao do mesmo cdigo em pontos
diferentes do programa.
<tipo> FUNCTION <nome> (<variveis>)
:
PROCESSO
:
END FUNCTION
SUBROUTINE PRODUTO ( )
USE GLOBAL
IMPLICIT REAL*8 (A-H,O-Z)
DO I = 1,N
C(I) = A(I)*B(I)
ENDDO
END SUBROUTINE
81
Note que o nome da funo (PRODUTO) deve ser igual ao nome da varivel
(PRODUTO) que ter o valor retornado para o programa principal.
82
83
Programa Principal
Subrotina Numrica
84
MODULE GLOBAL
:
VARIVEIS
:
END MODULE
85
86
MODULE GLOBAL
!
DECLARAO DAS VARIVEIS GLOBAIS
INTEGER <variveis>
REAL*8 <variveis>
END MODULE
! PROGRAMA PRINCIPAL
PROGRAM <nome>
USE IMSL
! USA SUBROTINAS NUMRICAS DO IMSL
USE GLOBAL
! USA VARIVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL <subrotina do modelo>
! SUBROTINA DO MODELO
!
END
! SUBROTINA QUE CONTM O MODELO MATEMTICO
SUBROUTINE <subrotina do modelo>
USE GLOBAL
! USA VARIVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
!
EQUAES DO MODELO
<equaes>
END SUBROUTINE
87
88
MODULE GLOBAL
!
DECLARAO DAS VARIVEIS GLOBAIS
INTEGER <variveis>
REAL*8 <variveis>
END MODULE
! PROGRAMA PRINCIPAL
PROGRAM <nome>
USE GLOBAL
IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL <subrotina do modelo>
END
! SUBROTINA QUE CONTM O MODELO MATEMTICO
SUBROUTINE <subrotina do modelo>
USE GLOBAL
! USA VARIVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
!
EQUAES DO MODELO
<equaes>
END SUBROUTINE
! SUBROTINA QUE CONTM O MTODO NUMRICO
! A SUBROTINA DEVE SER COPIADA NESTE PONTO DO PROGRAMA
! NO DEVE-SE FAZER NENHUMA ALTERAO NESTA SUBROTINA
SUBROUTINE <subrotina do mtodo numrico>
<cdigo da subrotina>
END SUBROUTINE
onde <modelo>
ATOL
RTOL
EPS
ETA
NRAIZ
ITMAX
XGUESS
X
INFO
89
90
EPS = 1.0D-5
ETA = 1.0D-2
ATOL = 1.0D-5
RTOL = 1.0D-5
ITMAX = 1000
onde X
EXEMPLO 1
Considerando que se deseja obter as razes da equao:
2
f( X ) = X + 2 X 6
IMPRIME AS RAIZES
WRITE <X>
END
! FUNO QUE CONTM A EQUAO
REAL*8 FUNCTION <modelo> (X)
USE GLOBAL
IMPLICIT REAL*8(A-H,O-Z)
EQUAO
<modelo> = <equaes>
END FUNCTION
!
!
EXEMPLO 2
Se desejarmos obter as duas razes da equao apresentada no Exemplo 1,
devemos utilizar o seguinte programa:
! PROGRAMA PRINCIPAL
PROGRAM RAIZES01
USE IMSL
! USA SUBROTINAS NUMRICAS DO IMSL
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION XGUESS(2), X(2), INFO(2)
EXTERNAL FCN
! FUNO DO MODELO
!
!
!
92
91
!
IMPRIME AS RAIZES
WRITE(*,*) X(1), X(2)
END
onde X
!
!
RTBIS (<modelo>,X1,X2,TOL)
onde <modelo>
X1
X2
TOL
INFO
IMPRIME A RAIZ
WRITE <XRAIZ>
END
! FUNO QUE CONTM A EQUAO
REAL*8 FUNCTION <modelo> (X)
USE GLOBAL
93
IMPLICIT REAL*8(A-H,O-Z)
!
94
!
!
EQUAO
<modelo> = <equao>
END FUNCTION
! FUNO COM O MTODO DA BISSEO PARA
! OBTENO DA RAIZ DE UMA FUNO
REAL*8 FUNCTION RTBIS(FUNC,X1,X2,XACC)
IMPLICIT REAL*8(A-H,O-Z)
JMAX = 1000
FMID = FUNC(X2)
F = FUNC(X1)
IF (F*FMID >= 0.0D0) THEN
WRITE(*,*) ' NAO EXISTE RAIZ ENTRE ', X1, ' E ', X2
RETURN
ENDIF
IF (F < 0.0D0) THEN
RTBIS = X1
DX = X2 - X1
ELSE
RTBIS = X2
DX = X1 - X2
ENDIF
DO J = 1,JMAX
DX = DX*0.5D0
XMID = RTBIS + DX
FMID = FUNC(XMID)
IF (FMID <= 0.0D0) RTBIS = XMID
IF ((ABS(DX) < XACC).OR.(FMID == 0.0D0)) RETURN
ENDDO
WRITE(*,*) ' NUMERO MAXIMO DE ITERACOES FOI ULTRAPASSADO '
END FUNCTION
EXEMPLO 3
A funo RTBIS apenas retorna uma nica raiz no intervalo especificado. Se
duas ou mais razes tiverem de ser obtidas, o programa deve chamar a funo
RTBIS, especificando um intervalo de busca diferente.
Se desejarmos obter as duas razes da equao apresentada no Exemplo 1,
devemos utilizar o seguinte programa:
IMPRIME AS RAIZES
WRITE(*,*) XRAIZ1, XRAIZ2
END
! FUNO QUE CONTM A EQUAO
REAL*8 FUNCTION FCN(X)
IMPLICIT REAL*8(A-H,O-Z)
! EQUAO
FCN = X**2.0D0 + 2.0D0*X - 6.0D0
END FUNCTION
! INSERIR NESTE PONTO A FUNO DO MTODO NUMRICO (RTBIS)
! PROGRAMA PRINCIPAL
! OBTENO DE RAIZES PELO MTODO DA BISSEO
PROGRAM RAIZES03
IMPLICIT REAL*8(A-H,O-Z)
EXTERNAL FCN
! FUNO DO MODELO
95
DIVPRK(IDO, NEQ, <modelo>, T, TOUT, ATOL, PARAM, Y)
onde <modelo>
IDO
NEQ
T
TOUT
ATOL
PARAM
Y
96
onde N
T
Y
YPRIME
EXEMPLO 4
Considerando um sistema de equaes diferencias contendo trs equaes:
dC
= 3 X + 2 X2
dt
dT
= 2 X C
dt
dX
= 3 exp( 5 / T )
dt
Para construir um modelo matemtico para ser usado com a subrotina
DIVPRK, temos que renomear as variveis C, T e X tornando-as campos da
varivel Y. Portanto Y(1) = C, Y(2) = T e Y(3) = X.
A mesma analogia deve ser seguida para as derivadas de C, T e X, que se
tornaram campos da varivel YPRIME. Portanto YPRIME(1) = dC/dt,
YPRIME(2) = dT/dt e YPRIME(3) = dX/dt.
Ateno: A varivel YPRIME(1) deve conter a derivada da varivel Y(1) e assim
por diante.
O sistema de equaes que ser programado ser o seguinte:
forma:
MODULE GLOBAL
! DECLARAO DAS VARIVEIS GLOBAIS
INTEGER <variveis>
REAL*8 <variveis>
END MODULE
97
! PROGRAMA PRINCIPAL
PROGRAM <nome>
USE IMSL
! USA SUBROTINAS NUMRICAS DO IMSL
USE GLOBAL
! USA VARIVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
! Y = VARIVEL, YPRIME = DERIVADA DE Y
REAL*8 Y(<tamanho>), YPRIME(<tamanho>)
DIMENSION PARAM(50)
! OBRIGATRIO PARA DIVPRK
EXTERNAL <modelo>
! SUBROTINA DO MODELO
!
!
!
!
!
98
!
END SUBROUTINE
EXEMPLO 5
Compostos clorados derivados do benzeno so produzidos, geralmente, em
reatores do tipo semi-batelada, que um reator em que parte dos reagentes
introduzida antes do incio da reao e outra parte dos reagentes
continuamente alimentada ao longo do processo.
No caso da clorao do benzeno, uma carga inicial de benzeno introduzida
no reator e cloro alimentado um fluxo contnuo no reator de forma que a
concentrao de cloro no reator seja igual a sua concentrao de saturao no
benzeno e seus derivados.
Trs reaes ocorrem simultaneamente no reator, produzindo trs diferentes
derivados do benzeno: monoclorobenzeno, diclorobenzeno e triclorobenzeno.
C 6H6 + Cl2 C6H5Cl + HCl
C 6H5Cl + Cl2 C6H4Cl2 + HCl
C 6H4Cl2 + Cl2 C6H3Cl3 + HCl
No reator a concentrao de benzeno e seus derivados variam constantemente
com relao ao tempo de reao, de acordo com as equaes:
dC B
= k1 C B C Cl
dt
dC MCB
= +k1 C B C Cl k 2 C MCB C Cl
dt
dC DCB
= +k 2 C MCB C Cl k 3 C DCB C Cl
dt
dC TCB
= + k 3 C DCB C Cl
dt
CB
CMCB
CDCB
CTCB
CCl
concentrao de benzeno
concentrao de monoclorobenzeno
concentrao de diclorobenzeno
concentrao de triclorobenzeno
concentrao de cloro
99
k1
k2
k3
100
T
= 0.0D0
TFINAL = 10.0D0
TIMPR = 0.5D0
! TEMPO INICIAL
! TEMPO FINAL
! INVERVALO DE IMPRESSO
!
!
END
101
102
onde <modelo>
NEQ
Y
YPRIME
T
H
YOUT
MODULE GLOBAL
! DECLARAO DAS VARIVEIS GLOBAIS
INTEGER <variveis>
REAL*8 <variveis>
END MODULE
! PROGRAMA PRINCIPAL
PROGRAM <nome>
USE GLOBAL
! USA VARIVEIS GLOBAIS
IMPLICIT REAL*8(A-H,O-Z)
! Y = VARIVEL, YPRIME = DERIVADA DE Y, YOUT = VARIVEL AUXILIAR
REAL*8 Y(<tamanho>), YPRIME(<tamanho>), YOUT(<tamanho>)
EXTERNAL <modelo>
! SUBROTINA DO MODELO
!
onde NEQ
T
Y
YPRIME
END
103
104
EXEMPLO 6
EXTERNAL FCNMOD
!
!
!
! SUBROTINA DO MODELO
105
106
onde <modelo>
NPRM
IDERIV
THETA
R
LDR
IRANK
DFE
SSE
onde NPRM
THETA
IOPT
IOBS
FRQ
WT
E
DE
IEND
nmero de parmetros
vetor com os parmetros
opo de avaliao: 0 calcula a funo, 1 calcula a
derivada
nmero da observao
frequncia para a observao
peso da observao
erro da observao IOBS
vetor que contm as derivadas parciais do resduo para a
observao IOBS
indicador de finalizao: 0 menor ou igual ao nmero de
observaes, 1 maior que o nmero de observaes.
Ea
k = A exp
RT
A
Ea
k
R
T
Ea
ln k = ln A
RT
Para ser usada na subrotina, o erro entre o k observado e o k calculado deve
ser obtido, e portanto a subrotina deve calcular a seguinte equao:
Ea
E = ln k ln A
R T
107
108
!
THETA(2)
!
!
ou em Fortran:
EXEMPLO 8
Um programa para estimar as constantes da equao da lei de Arrhenius,
apresentada no Exemplo 7 teria a forma:
MODULE GLOBAL
REAL*8 CTEGAS, Y(10,1000)
INTEGER NOBS
END MODULE
109
! PROGRAMA PARA CALCULO DA ENERGIA DE ATIVAO E
! FATOR PR-EXPONENCIAL DE UMA REAO QUMICA
PROGRAM CINET01
USE GLOBAL
USE IMSL
IMPLICIT REAL*8 (A-H,O-Z)
PARAMETER (NPRM = 2)
! NPRM = NMERO DE PARMETROS
DIMENSION THETA(NPRM), R(NPRM,NPRM)
EXTERNAL FCNMOD
!
!
!
110
END SUBROUTINE
onde <modelo>
NOBS
NEQ
NPRM
THETA0
IBTYPE
XLB
XUB
XSCALE
FSCALE
IPARAM
111
RPARAM
THETA
FVEC
FJAC
LDFJAC
112
!
!
!
!
onde M
NPRM
THETA
ERRO
onde YOBS
YSIM
valor observado
valor calculado com o valor atual dos parmetros sendo
estimados pela subrotina.
MODULE GLOBAL
INTEGER NRUN,NEQT,NOBT,IMOD
REAL*8 XOBS(1000), YOBS(10,1000), YSIM(10,1000)
!
!
!
!
!
!
!
!
113
114
YSIM(J,I) = YOBS(J,I)
ENDDO
IPARAM(1) = 1
IPARAM(3) = 10000
IPARAM(4) = 1000
IPARAM(5) = 1000
!
!
!
!
!
!
!
!
!
!
MODELO ALGBRICO
ESCREVA AQUI AS EQUAES ALGBRICAS DO MODELO
YSIM(<campo>,I) A VARIVEL INDEPENDENTE SENDO CALCULADA
DO I = 1,NOBT
YSIM(<campo>,I) = <equao>
ENDDO
ENDIF
115
!
!
!
MODELO DIFERENCIAL
ESCREVA AQUI AS EQUAES DIFERENCIAIS ONDE
YPRIME(<campo>) = DIFERENCIAL DA VARIAVEL Y(<campo>)
YPRIME(<campo>) = <equao>
116
END SUBROUTINE
EXERCCIOS
EXERCCIO 1
Um experimento para obter a presso parcial de tolueno obteve os seguinte
dados:
Presso de Vapor
1
5
10
20
40
60
100
200
400
760
Temperatura
-26.7
-4.4
6.4
18.4
31.8
40.3
51.9
69.5
89.5
110.6
117
Pvap = exp A +
T + 273
AeB
Pvap
T
parmetros
presso de vapor (mmHg)
temperatura em C
EXERCCIO 2
Uma reao de hidrogenao do benzeno realizada em um reator tubular
operando de forma adiabtica.
O balano de massa (adimensionalizado) dado por:
dy
3,21
= 0,1744 exp
y
dx
T*
O balano de energia (adimensionalizado) dado por:
dT *
3,21
= 0,06984 exp
y
dx
T*
T* =
T
T0
T
T0
T*
y
x
Condies iniciais:
em x = 0
temperatura em K
temperatura inicial = 423 K
temperatura adimensional
concentrao de benzeno adimensional
comprimento do reator adimensional
y = 1 e T* = 1
118
119
120
Warning
Variable A is
C = B/A
------^
122
121
Error: An unterminated block exists.
DO I = 1,100
^
[A]
A varivel A foi definida como uma matriz A(x,y) e foi usada como um
vetor A(x).
Error: The statement
invalid.
IF (C == 0.0D0)
^
following
the
Logical
IF
statement
is
Error: Syntax error, found ',' when expecting one of: <END-OFSTATEMENT> ;
A = 2,0D0
-----^
Nmero foi digitado errado (2,0D0). O certo 2.0D0 (com ponto ao invs
de vrgula).
is
no
actual
argument
123
[A]
erro
ocorrido
linha do
erro
124
126
125
14. DEBUG
Debugar significa remover erros de programao que ocorrem durante a
execuo de um programa.
nmero da linha do
programa onde o erro
ocorreu
127
Errado
DO I = 1,100
SUM = SUM + X(I)
ENDDO
128
boto Stop
129
130