Você está na página 1de 20

Introdução ao cálculo de curvas de regolfo pelo método

das diferenças finitas.


Esquemas explı́citios para canais prismáticos de secção
rectangular.

Rui M. L. Ferreira

Instituto Superior Técnico


ruif@civil.ist.utl.pt
15 de Novembro de 2007

Resumo
As curvas de regolfo traduzem o andamento da superfı́cie livre em canais que trans-
portam caudal constante. O seu cálculo requer a resolução de uma equação diferencial
ordinária de 1a ordem sujeita a uma condição de fronteira. O cálculo é necessariamente
numérico e pode ser levado a cabo por diversos métodos. Neste texto apresenta-se uma
breve revisão de esquemas simples de diferenças finitas que permitem o cálculo expedito
de curvas de regolfo em canais prismáticos de secção rectangular. Mostra-se também
um exemplo de cálculo, a curva de regolfo do tipo F2 .

1 Curva de regolfo: problema de valores na fronteira


1.1 Canais prismáticos
O cálculo de uma curva de regolfo num canal prismático é um problema de valores na fronteira
representado pela da equação diferencial ordinária
dh I − J(h)
= (1)
dx 1 − Fr2 (h)
(ver [Qui80], p. 132, [Manz79], p. 166) e pela condição de fronteira

h(0) = hmontante se o escoamento é rápido
(2)
h(L) = hjusante se o escoamento é lento

Na equação diferencial (1), h é a altura do escoamento, x é a distância à origem (medida


ao longo do talvegue do canal), I é o declive do canal, J(h) é a perda de carga unitária, Fr (h)
é o número de Froude e L é comprimento do trecho de canal no qual se pretende calcular a
curva de regolfo.
Estudar-se-á apenas o caso em que h : [0, L] → Ê
é uma função contı́nua e diferenciável
para todos os x ∈ [0, L]. A superfı́cie livre de um escoamento em que ocorram descontinuida-
des1 não é, na vizinhança destas, exprimı́vel pela equação (1). Note-se também que a função
1 Refira-se, como exemplo de descontinuidade, o ressalto hidráulico.

1
Ê
ϕ : \{hc } → Ê I−J(h)
tal que ϕ(h) = 1−F 2
r (h)
não é definida nos pontos de escoamento crı́tico,
h = hc , i.e. em todos os valores de x tais que Fr (h(x)) = 1.
Assim, o comprimento L deve ser escolhido por forma a que não occorram descontinui-
dades em h ou pontos de escoamento crı́tico. Nestas condições, pode mostrar-se que se se
impuser Fr (h(0)) > 1 então Fr (h(x)) > 1 em x ∈ [0, L] (regime rápido em todo o trecho).
Do mesmo modo, se Fr (h(L)) < 1 então Fr (h(x)) < 1 em x ∈ [0, L] (regime lento em todo o
trecho).
O problema de valores na fronteira representado por (1) e (2) pode ser transformado num
problema de valores iniciais orientando
√ o eixo dos xx de acordo com o sentido da velocidade
das pequenas perturbações, √ gh, relativamente à velocidade média da corrente, U . Assim,
se Fr (h(x)) > 1 tem-se U > gh — o escoamento é controlado por montante√ — e o eixo dos
xx deve orientar-se segundo o escoamento. Se Fr (h(x)) < 1, U < gh — o escoamento é
controlado por jusante — e o eixo dos xx deve orientar-se contra o escoamento. A equação
(1) transforma-se em
dh I − J(h)
=σ (3)
dx 1 − Fr2 (h)
em que o parâmetro σ é +1 quando o regime do escoamento é rápido e −1 quando é lento.
A condição de fronteira (2) transforma-se na condição inicial

h(0) = hmontante se o escoamento é rápido
(4)
h(0) = hjusante se o escoamento é lento

1.2 Canais não prismáticos


A equação (1) não é válida em canais não prismáticos. Nestes, as curvas de regolfo resultam
da integração de
dH
= σ(I − J(h)), (5)
dx
ou de
Å d
= σ(ρgS(h)(I − J(h)) + ρgM2 (h)). (6)
dx
Os parâmetros e variáveis envolvidos nas equações (5) e (6) são
Q2
H =h+ , (7)
2gS(h)2
a energia especı́fica do escoamento ([Manz79], p. 136), Q, o caudal escoado, S(h), a área da
secção molhada, função da altura do escoamento, g, a aceleração da gravidade,
Q
Å = ρghg (h)S(h) + ρ S(h)
2
, (8)

a quantidade de movimento total (ou impulsão total) do escoamento ([Manz79], p. 154),


hg (g), a profundidade do centro de gravidade da secção transversal do escoamento, ρ, a massa
volúmica do fluido e ρgM2 (h), o acréscimo de impulsão hidrostática representado pela acção
h
das paredes do canal (não prismático) sobre o escoamento, no qual M2 (h) = 0 β(η)(h − η)dη
e β(η) é a largura da secção à altura η acima do talvegue.
Alternativamente, podem resolver-se as equações (5) ou (6) em ordem a dh dx , obtendo-se

Fr2 (h) ∂S 
dh I − J(h) + B(h) ∂x h=cte
=σ (9)
dx 1 − Fr2 (h)

2
em que B(h) = dS dh é a largura superficial do escoamento.
As condições de fronteira para as equações (5) e (6) obtêm-se a partir de (2) por aplicação
de (7) e (8). Para a resolução da equação (9) a condição de fronteira é a equação (2).
A equação (6) é válida em escoamentos que apresentam singularidades em que a energia
não se conserva, nomeadamente ressaltos hidráulicos, o que não acontace com as equações
(5) e (9). Note-se, todavia, que, se o regime de escoamento mudar na descontinuidade, a
resolução da equação (6) é em tudo igual à resolução da equação (5): serão integradas de
montante para jusante, entre uma secção de controlo do escoamento e a descontinuidade, se
o regime for rápido, e a partir de jusante até à descontinuidade, se o regime for lento. De
facto, é o sentido fı́sico de propagação de informação no meio lı́quido que impõe a localização
das condições iniciais e a direcção de resolução da equação.
Notar ainda que, se se optar por integrar as equações (5) ou (6), é necessário calcular a
Å
função h(x) em função de H(x) ou de (x) resolvendo as equações (7) ou (7), respetivamente.

2 Discretização por diferenças finitas


2.1 Discretização do domı́nio de cálculo
Procure-se, agora, resolver numericamente a equação (1). O domı́nio de cálculo, de com-
primento L, deve ser discretizado em n − 1 trechos de comprimento Δx. Existem, assim, n
secções de cálculo.
A secção x = 0 é a mais a jusante se o regime é lento (porque o eixo dos xx orienta-se
de jusante para montante). Se o regime é rápido, o eixo dos xx orienta-se de montante para
jusante e a secção x = 0 é a mais a montante.
Se a função h(x) for contı́nua e diferenciável entre duas secções de cálculo de abcissas xi
e xi+1 , suficientemente próximas para que h(x) seja monótona em x ∈ [xi , xi+1 ], o teorema
de Lagrange permite escrever 
hi+1 − hi dh 
= (10)
Δx dx xm
em que xm é a abcissa de uma secção entre xi e xi+1 . Portanto, o valor exacto da altura em
xi+1 é obtido, com base em h(xi ) ≡ hi , por

dh 
hi+1 = hi + Δx (11)
dx xm

A construção gráfica correspondente à equação (11) pode observar-se na Figura 1.

hi º h(xi)

dh hi+1 º h(xi+1)
dx xm

xi xm xi+1

Figura 1: Ilustração do teorema de Lagrange.

3
2.2 Aproximação de primeira ordem
Como a função  h(x) não é conhecida, não é possı́vel estimar o valor da abcissa xm . Assim,
a derivada dh 
dx xm terá que ser estimada, processo que envolve uma aproximação e, portanto,
um erro numérico.
Recorrendo a uma discretização por diferenças finitas, a aproximação mais simples para
a derivada dh  dh 
dx xm é dx xi , ou seja a derivada da altura do escoamento na secção cuja abcissa
é xi . Nesse caso, (11) transforma-se em

dh 
hi+1 = hi + Δx + ε1 (12)
dx xi
em que ε1 é o erro cometido na aproximação.
  Expandindo a função h(x) em série de Taylor
em torno de xi verifica-se que ε1 = O Δx2 . Diz-se que o esquema numérico representado
por (12) é de 1a ordem porque o erro na diferenciação é da ordem de grandeza de Δx.
Com efeito, re-ordenando os termos de (12), obtém-se

hi+1 − hi dh  1  
=  + O Δx2
Δx dx xi Δx

dh  hi+1 − hi
= + O (Δx) (13)
dx xi Δx
A construção geométrica correspondente à equação representada por (12) pode observar-
se na Figura 2.

hi

dh
dx ü
xi ï
ï
ý e1
ï
ïþ
hi +1
xi xi+1

Figura 2: Aproximação de primeira ordem.

Introduzindo (3) em (12) (e ignorando o termo do erro), o esquema de 1a ordem (conhecido


com esquema de Euler) fica
I − J(hi )
hi+1 = hi + σΔx (14)
1 − Fr2 (hi )

2.3 Aproximação de segunda ordem: esquema centrado



Uma melhor aproximação para a derivada dh  pode ser obtida se se combinar as derivadas

dh 
 dx xm

dx xie dh  . Se se fizer a média aritmética de ambas, a aproximação é de 2a ordem. A


dx xi+1

4
1 æ dh dh ö
ç + ÷
2 çè dx xi dx ÷
xi +1 ø

hi

dh
ü dh
dx ý e2
xi þ
hi +1 dx xi +1

xi xi+1

Figura 3: Aproximação de segunda ordem. Esquema centrado.


dh 
demonstração desta afirmação encontra-se no Anexo A. Assim, substituindo, em (11),
  dx xm
pela média aritmética de dh  dh 
dx xi e dx xi+1 obtém-se
   
Δx dh  dh 
hi+1 = hi + + + ε2 (15)
2 dx xi dx xi+1
 
em que ε2 = O Δx3 .
A construção gráfica correspondente à equação (15) pode observar-se na Figura 3.
O esquema de 2a ordem resultante, chamado esquema centrado, é

Δx I − J(hi ) I − J(hi+1 )
hi+1 = hi + σ + (16)
2 1 − Fr2 (hi ) 1 − Fr2 (hi+1 )
Devido à não linearidade das funções J(hi+1 ) e F r(hi+1 ), a equação (16) é implı́cita, i.e.,
não tem resolução explı́cita para hi+1 .
Para calcular o valor de hi+1 , a raiz adequada da equação (16) deve ser calculada nume-
ricamente, por exemplo pelo método de Newton. No Anexo B mostra-se como se pode obter,
por aquele método, a raiz apropriada de (16).

2.4 Aproximação de segunda ordem: esquema de Euler modificado



Uma outra forma de estimar a derivada dh  a
dx xm , mantendo uma aproximação de 2 ordem, é
o chamado esquema de Euler modificado ou predictor-corrector ([Asc95], p. 69). Neste
esquema, a altura do escoamento na secção xi+1 é estimada, numa primeira aproximação,
por intermédio de (14):
I − J(hi )
hi+1 = hi + σΔx (17)
1 − Fr2 (hi )

dh 
A estimativa hi+1 é utilizada para calcular a derivada aproximada dx x = I−J(2 hi+1 )
1−Fr ( hi+1 )
  i+1
dh  dh 

em xi+1 . A média aritmética das derivadas dx xi e dx  permite obter uma aproximação
xi+1

5
1 æç dh
~
dh ö
+ ÷
2 ç dx xi dx ÷
hi è xi +1 ø

dh
dx ü~
xi ý e2
þ
~ hi +1
dh
~
dx hi +1
xi +1
xi xi+1
Figura 4: Aproximação de segunda ordem. Esquema de Euler modificado.

de 2a ordem. A construção gráfica correspondente a esta aproximação pode observar-se na


Figura 4.
A equação fundamental do esquema de 2a ordem resultante é
⎛   ⎞
Δx ⎝ I − J(hi ) I −J hi+1
hi+1 = hi + σ +  ⎠ (18)
2 1 − Fr2 (hi ) 1 − F 2 hi+1 r

em que
hi+1 é calculado por (17).

2.5 Discretização da equação do regolfo para canais não prismáticos


Propõe-se, como exemplo, a discretização da equação (5), sujeita a

H(0) = F (hmontante ) se o escoamento é rápido
, (19)
H(0) = F (hjusante ) se o escoamento é lento

por intermédio de uma aproximação de segunda ordem. Obtém-se o seguinte esquema


Δx
Hi+1 = Hi + σ ((Ii − J(hi )) + (Ii+1 − J(hi+1 ))) (20)
2
em que se admite que a inclinação do fundo, I, pode variar entre secções de cálculo. Substi-
tuindo Hi+1 pela equação (7) obtém-se

Q2 Δx Δx
hi+1 + −σ (Ii+1 − J(hi+1 )) = Hi + σ (Ii − J(hi )) (21)
2gS 2 (hi+1 ) 2 2

A equação (21) é uma equação algébrica não linear com que admite três raı́zes distintas,
duas das quais correspondem às soluções de regime rápido e de regime lento. No Anexo C
mostra-se o procedimento algorı́tmico a adoptar para obter estas raı́zes.
A discretização e os passos a empreender para calcular a curva de regolfo por intermédio
Å
da equação (6) são similares aos acima descritos. Deve substituir-se i+1 pela definição (8)

6
e a equação resultante deve ser resolvida numericamente em ordem à altura do escoamento,
procurando se a raı́z de rápido ou a raı́z de lento consoante o regime do escoamento.
Se se optar por resolver a equação (9), os esquemas descritos em 2.2, 2.3 ou 2.4 são
I−J(h)
de aplicação directa, tendo-se apenas que substituir a função ϕ(h) = 1−F 2 (h) por ϕ(h) =
r
F 2 (h)
∂x |h=cte
r ∂S
I−J(h)+ B(h)
1−Fr2 (h) .

3 Exemplo de cálculo para canais prismáticos


3.1 Estrutura algorı́tmica
O cálculo da curva de regolfo pelo método das diferenças finitas tem a seguinte estrutura
algorı́tmica:
1. determinar h1 com base em considerações fı́sicas;
2. discretizar o domı́nio de cálculo em trechos de comprimento Δx;
3. resolver, em cada secção cuja abcissa é xi+1 , as equações (14) (esquema de 1a ordem),
(16) (esquema de 2a ordem centrado) ou (17) e (18) (esquema de 2a ordem predictor-
corrector);
4. executar 3. até que xi+1 corresponda à última secção do domı́nio de cálculo.
Deve sublinhar-se que a escolha do esquema numérico a utilizar no passo 3. não é indi-
ferente. Melhores resultados serão obtidos pelo esquema de 2a ordem centrado. Os piores
resultados correspondem à discretização de 1a ordem. Resultados de qualidade intermédia
serão obtidos pelo esquema de Euler modificado. As construções gráficas apresentadas nas
Figuras 2 a 4 justificam este facto.
Apresenta-se, de seguida, um exemplo de cálculo que ilustra o valor relativo dos esquemas
discutidos. No Anexo D mostra-se a implementação, em VBA, do algoritmo relativo ao
método das diferenças finitas, aplicado a este exemplo de cálculo.

3.2 Cálculo de uma curva de regolfo do tipo F2


Mostra-se, nas Figuras 5 e 6, uma comparação dos resultados dos três tipos de discretização.
Pretende-se calcular uma curva de regolfo do tipo F2 num canal prismático de secção rec-
tangular de inclinação I = 0.05, largura do fundo b = 10 m e coeficiente da fórmula de
Manning-Strickler K = 30 m1/3 s−1 . A condição inicial é h1 ≈ 4, 0 m. Apresenta-se resulta-
dos para Δx = 3 m, 1 m, 0, 5 m e 0, 1 m.
A Figura 5 mostra as cotas do fundo do canal e as cotas da superfı́cie livre para cada
uma das soluções. Na Figura 6 mostra-se as alturas do escoamento.
Verifica-se que os resultados correspondentes ao passo de cálculo Δx = 3 m são insatis-
fatórios; nenhuma solução numérica consegue reproduzir a curva de regolfo porque a altura
h2 , calculada por qualquer dos esquemas, é menor que altura do escoamento uniforme, o que
é impossı́vel numa curva F2 . Este exemplo ilustra a dificuldade de obtenção de uma solução
para problemas de valor inicial quando a variação da função é grande em comparação com
a medida do intervalo onde é definida. estes problemas são designados por problemas
rı́gidos (stiff problems na literatura de lı́ngua inglesa, veja-se [Asc95], p. 73). O problema
representado por (3) e (4) é rı́gido se


L  −1 (22)
dh

7
105 105
Dx = 3 m Dx = 1 m
104 104
103 103

Cotas (m)
Cotas (m)

102 102
101 101
100 100
99 99
98 98
0 10 20 30 0 10 20 30
Distância (m) Distância (m)

105 105
Dx = 0,5 m Dx = 0,1 m
104 104
103 103
Cotas (m)

Cotas (m)
102 102
101 101
100 100
99 99
98 98
0 10 20 30 0 10 20 30
Distância (m) Distância (m)

Figura 5: Cotas do fundo ( ) e da superfı́cie livre. As cotas da superfı́cie livre


correspondem às soluções de 1a ordem ( ), 2a ordem centrado ( ) e 2a ordem
predictor-corrector ( ).

 acima apresentada é h(0) ≈ hcrit = 3, 995 m. Considerando os restantes


A condição inicial
dados, obtém-se dϕ
dh L ≈ −104 se se tomar como valor de L o comprimento que necessário
para que se obtenha a altura do regime uniforme. Como −104  −1, conclui-se que o cálculo
de uma curva F2 , dada uma condição inicial próxima da condição de regime crı́tico, é um
problema rı́gido.
A forma mais simples de ultrapassar os problemas associados à resolução deste tipo de
problemas é operar a redução do passo de cálculo Δx. Pode provar-se que a maior variação
I−J(h)
de ϕ(h) = dh
dx = 1−Fr2 (h) ocorre na vizinhança da primeira secção de cálculo. Assim, se numa
vizinhança de x = 0, se aproximar a equação diferencial (3) por
dh ϕ(h1 )
= h (23)
dx h1
a condição de estabilidade para problemas lineares, |1 − λΔx| < 1 em que λ = ϕ(h h1
1)
(veja-se
[Asc95], p. 72), permite obter Δx ≈ 1, 0 m.
Assim, para valores do passo de cálculo menores que 1, 0 m, verifica-se que as soluções
numéricas reproduzem uma curva do tipo F2 . Os resultados são tanto melhores quanto mais
fina é a discretização, i.e., quanto menor é o valor de Δx.

É notório que a pior solução corresponde à discretização de 1a ordem, facto acentuado


para a discretização mais grosseira. As discretizações de 2a ordem apresentam valores muito
próximos independentemente do valor de Δx.

8
4 4
Dx = 3 m Dx = 1 m
3 3
h (m)

h (m)
2 2

1 1
0 0
0 2.5 5 7.5 10 0 2.5 5 7.5 10
Distância (m) Distância (m)

4 4
Dx = 0,5 m Dx = 0,1 m
3 3
h (m)
h (m)

2 2

1 1

0
0
0 2.5 5 7.5 10
0 2.5 5 7.5 10
Distância (m) Distância (m)

Figura 6: Alturas do escoamento correspondentes às soluções de 1a ordem ( ), 2a ordem


centrado ( ) e 2a ordem predictor-corrector ( ).

Referências
[Qui80] Quintela, A. (1980). Hidráulica. 8a edição, Edições Calouste Gulbenkian, Lisboa.
[Manz79] Manzanares, A. (1980). Hidráulica Geral. Edições Associação dos Estudantes do
Instituto Superior Técnico, Lisboa.
[Asc95] Ascher, U. M., Mattheij, R. M. M. & Russell, R. D. (1995). Numerical solution
of boundary value problems for ordinary differential equations. Classics in Applied
Mathematics, Society for Industrial and Applied Mathematics.

Anexo A: Ordem do esquema correspondente à equação


(15)
Se se expandir h(x) em série de Taylor em torno de xi obtém-se
 
dh  Δx d2 h   
hi+1 = hi + Δx + + O Δx3 (24)
dx xi 2 dx2 xi
A expansão h(x) em série de Taylor em torno de xi+1 é
 
dh  Δx d2 h   
hi = hi+1 − Δx  + 2  + O Δx3 (25)
dx xi+1 2 dx xi+1

9
Multiplicando (24) por −1 e adicionando a (25) obtém-se
 
hi+1 − hi = hi − hi+1 + Δx dh  + Δx dh 
+
 
dx xi dx xi+1
d2 h  d2 h 
 3 (26)
dx2  − dx2 
Δx
+ 2 + O Δx
xi xi+1

Expandindo a segunda derivada de h(x) em torno de xi e de xi+1 obtém-se, respectiva-


mente,   
d2 h  d2 h  d3 h   
2  = 2  + Δx 3  + O Δx2 (27)
dx xi+1 dx xi dx xi
e   
d2 h  d2 h  d3 h   
2  = 2  − Δx 3  + O Δx2 (28)
dx xi dx xi+1 dx xi+1
Multiplicando (27) por −1 e adicionando a (28) obtém-se
 
d2 h  d2 h 
2
dx x  − dx x
2 =
2 
 2 
 i
3 
 i+1   
d h d h d h d3 h 
dx 2  − dx 2  − Δx dx 3  − Δx dx 
3 + O Δx2
xi+1 xi xi+1 xi

     
d2 h  d2 h  Δx d3 h  d3 h   
2  − 2  =− 3  + 3  + O Δx2
dx xi dx xi+1 2 dx xi+1 dx xi
 
d2 h  d2 h 
− = O (Δx) (29)
dx2 xi dx2 xi+1
Substituindo (29) em (26) obtém-se
   
dh  dh  Δx2  
hi+1 − hi = hi − hi+1 + Δx  +  + O (Δx) + O Δx3
dx xi dx xi+1 2!
   
Δx dh  dh   
hi+1 = hi +  +  + O Δx3 (30)
2 dx xi dx xi+1

Reordenando os termos de (30), verifica-se que


   
1 dh  dh  hi+1 − hi  
 +  = + O Δx2 (31)
2 dx xi dx xi+1 Δx
 
O erro da aproximação em (31) é O Δx2 . O esquema associado à equação (15) é,
portanto, de segunda ordem.

Anexo B: Cálculo da raiz apropriada da equação (16) pelo


método de Newton.
O esquema de 2a ordem pressupõe a resolução da equação algébrica não linear (16) em cada
secção de cálculo cuja abcissa é xi+1 . Pretende-se a raiz (valor de hi+1 ) fisicamente correcta

10
da equação (16). Deve escrever-se aquela equação da forma mais simples. Assim, as seguintes
manipulações são aconselhadas:

Δx I − J(hi ) I − J(hi+1 )
hi+1 = hi + σ +
2 1 − Fr2 (hi ) 1 − Fr2 (hi+1 )
Δx I − J(hi+1 ) Δx I − J(hi )
hi+1 − σ = hi + σ (32)
2 1 − Fr (hi+1 )
2 2 1 − Fr2 (hi )
I−J(hi )
Como as grandezas na secção xi são conhecidas, o conjunto hi + σ Δx 2 1−Fr2 (hi ) é uma
constante numérica para os efeitos do cálculo das raı́zes de (32). Assim, esta fica
Δx I − J(hi+1 )
hi+1 − σ −C =0
2 1 − Fr2 (hi+1 )
  Δx
(hi+1 − C) 1 − Fr2 (hi+1 ) − σ (I − J(hi+1 )) = 0 (33)
2
Simplificando a notação, seja hi+1 ≡ h. Procurar-se-ão as raı́zes da equação
  Δx
F (h) = 0 ⇔ (h − C) 1 − Fr2 (h) − σ (I − J(h)) = 0 (34)
2
A estrutura algorı́tmica do método de Newton é

−1
k+1
  dh 
h = h − F hk
k
(35)
dx hk
É necessário determinar a derivada de F (h). É fácil verificar que
dF d   Δx
= (h − C) 1 − Fr2 (h) − σ (I − J(h)) =
dh dh 2
d   Δx d
= (h − C) 1 − Fr2 (h) − σ (I − J(h)) =
dh 2 dh
  d  2 Δx dJ
= 1 − Fr2 (h) − (h − C) F +σ (36)
dh r 2 dh
As derivadas do número de Froude e da perda de carga unitária são, respectivamente

d  2 d Q2 B dB 1 B
Fr = = F 2
r − 3 (37)
dh dh gS 3 dh B S
e 
2 

dJ d Q 4 1 dP 10 B
= =J − (38)
dh dh KSR 3
2
3 P dh 3 S
Introduzindo (37) e (38) em (36) obtém-se

dF   dB 1 B Δx 4 1 dP 10 B
= 1 − Fr (h) − (h − C) Fr
2 2
−3 +σ J − (39)
dh dh B S 2 3 P dh 3 S
Introduzindo (39) e a definição de F (h) (ver equação 34) em (35) obtém-se
    
hk+1⎛= hk − hk − C 1 − Fr 2 k
(h ) − σ Δx 2 I − J(h

k
⎞ ) /
B(hk )
(1−Fr2 (hk ))−(hk −C )Fr2 (hk ) dBdh |hk B(hk ) −3 S(hk )
1
+
⎝   ⎠ (40)
k
2 J(h ) 3 P (hk ) dh |hk − 3 S(hk )
k B(h )
+σ Δx 4 1 dP 10

11
Para calcular a raiz correcta da equação (16), o valor inicial para o cálculo numérico
representado pela equação (40) é h0 = hi (altura do escoamento na secção anterior) ou h0 =
heq.18
i+1 (altura do escoamento na própria secção calculada pelo  algoritmo Euler modificado).

A equação (40) deve ser aplicada recursivamente até que h k+1 k
− h < ξ em que ξ é um
erro previamente estipulado (por exemplo ξ = 10−6 m).
No final do cálculo da raiz da equação (16) tem-se hi+1 ≡ hk+1 .

Anexo C: Cálculo da raiz apropriada da equação (21) por


iteração do ponto fixo.
A resolução da equação algébrica não linear (21) em cada secção de cálculo pode ser levada
a cabo pelo método da iteração do ponto fixo. Este método, de convergência mais lenta que
o método de Newton, tem a vantagem de permitir duas estruturas algorı́tmicas pelas quais
se obtêm directamente as raı́zes correspondentes aos regimes rápido e lento. Simplificando
agrupando os termos em i obtém-se

Q2 Δx
hi+1 + −σ (Ii+1 − J(hi+1 )) = Ci . (41)
2gS 2 (hi+1 ) 2

A raı́z correspondente ao regime rápido pode ser obtida se se resolver a equação (41) em
ordem à secção do escoamento, S(hi+1 ):


Q2 1
S(hi+1 ) = (42)
2g Ci − hi+1 + σ Δx
2 (Ii+1 − J(hi+1 ))

A raı́z correspondente ao regime lento obtém-se resolvendo a equação (41) em ordem a hi+1 :

Q2 Δx
hi+1 = − +σ (Ii+1 − J(hi+1 )) + Ci . (43)
2gS 2 (h i+1 ) 2

O valor inicial deve estar de acordo com o tipo de raı́z que se pretende calcular em
cada um dos algoritmos (43) e (42). Assim, em regime lento, deve ter-se h0 > hcrit e, em
regime rápido, é necessário que h0 < hcrit em que hcrit é a altura do
 escoamento crı́tico. Os
algoritmos devem ser aplicados recursivamente até que hk+1 − hk  < ξ em que ξ é um erro
previamente estipulado (por exemplo ξ = 10−6 m). No final do cálculo da raiz da equação
(21) tem-se hi+1 ≡ hk+1 .

Anexo D: Código em VBA para o cálculo de uma curva


de regolfo do tipo F2.
Mostra-se, de seguida, o código, em VBA, relativo ao exemplo apresentado em §3.1.

Sub Regolfo_F()
Dim Q As Double
Dim L, I As Double
Dim Be, Br, m As Double
Dim Dx As Double
Dim h(50000), d(50000) As Double

12
Dim h1 As Double
Dim SumDx As Double
Dim j As Integer
Dim Ks As Double
Dim S, P, R, B, S_p, P_p, R_p, B_p, S_j, P_j, R_j, B_j, S0, P0, R0, B0
As Double
Dim dPdh0, dBdh0 As Double
Dim Sf, Fr, Sf_p, Fr_p, Sf_j, Fr_j, Sf0, Fr0 As Double
Dim d0, dd As Double
Dim F, dFdh As Double
Dim k As Integer

’ ler os dados geométricos

Q = Sheets("Sheet1").Cells(3, 5)
I = Sheets("Sheet1").Cells(4, 5)
L = Sheets("Sheet1").Cells(5, 5)
Br = Sheets("Sheet1").Cells(6, 5)
m = Sheets("Sheet1").Cells(7, 5)
Be = Sheets("Sheet1").Cells(8, 5)
Ks = Sheets("Sheet1").Cells(9, 5)
Dx = Sheets("Sheet1").Cells(10, 5)
h1 = Sheets("Sheet1").Cells(12, 5)

Range(Cells(15, 3), Cells(35000, 10)).Clear ’ elimina os cálculos


anteriores

Sheets("Sheet1").Cells(15, 3) = "x(m)"
Sheets("Sheet1").Cells(15, 4) = "z(m)"
Sheets("Sheet1").Cells(15, 5) = "h(m),1aordem"
Sheets("Sheet1").Cells(15, 6) = "Y(m),1aordem"
Sheets("Sheet1").Cells(15, 7) = "h(m),2aordem(p-c)"
Sheets("Sheet1").Cells(15, 8) = "Y(m),2aordem(p-c)"
Sheets("Sheet1").Cells(15, 9) = "h(m),2aordem"
Sheets("Sheet1").Cells(15, 10) = "Y(m),2aordem"

h(1) = h1 ’esquemas de 1a ordem e de 2a ordem "predictor-corrector"


d(1) = h1 ’esquema de 2a ordem
SumDx = 0#
j = 1

Sheets("Sheet1").Cells(15 + j, 3) = SumDx
Sheets("Sheet1").Cells(15 + j, 4) = 100 - SumDx * I
Sheets("Sheet1").Cells(15 + j, 5) = h(j)
Sheets("Sheet1").Cells(15 + j, 6) = 100 - SumDx * I + h(j)
Sheets("Sheet1").Cells(15 + j, 7) = h(j)
Sheets("Sheet1").Cells(15 + j, 8) = 100 - (SumDx + Dx) * I + h(j)
Sheets("Sheet1").Cells(15 + j, 9) = d(j)
Sheets("Sheet1").Cells(15 + j, 10) = 100 - (SumDx + Dx) * I + d(j)

13
’ ciclo principal

While (SumDx < L)

’ esquema de 1a ordem...

S = Area(Br, h(j))
P = Per(Br, h(j))
R = RaioH(P, S)
B = Bsup(Br, h(j))
Sf = Jota(Q, S, R, Ks) ’isto é o J (perda de carga unitária)
Fr = Fr2(Q, S, B) ^ 0.5

h(j + 1) = h(j) + Dx * ((I - Sf) / (1# - Fr ^ 2))

’ escrita dos resultados do esquema de 1a ordem


Sheets("Sheet1").Cells(15 + j + 1, 3) = SumDx + Dx
Sheets("Sheet1").Cells(15 + j + 1, 4) = 100 - (SumDx + Dx) * I
Sheets("Sheet1").Cells(15 + j + 1, 5) = h(j + 1)
Sheets("Sheet1").Cells(15 + j + 1, 6) = 100 - (SumDx + Dx) * I
+ h(j + 1)

’ complemento para o esquema de 2a ordem "predictor-corrector"

h_p = h(j + 1) ’ h(j+1) passa a ser uma previs~ao


(h_p do "verdadeiro" h(j+1))
S_p = Area(Br, h_p)
P_p = Per(Br, h_p)
R_p = RaioH(P_p, S_p)
B_p = Bsup(Br, h_p)
Sf_p = Jota(Q, S_p, R_p, Ks) ’isto é o J (perda de carga unitária)
Fr_p = Fr2(Q, S_p, B_p) ^ 0.5

h(j + 1) = h(j) + (Dx / 2#) * ((I - Sf) / (1# - Fr ^ 2) + (I - Sf_p) /


(1# - Fr_p ^ 2))

’ escrita do resultado de 2a ordem

Sheets("Sheet1").Cells(15 + j + 1, 7) = h(j + 1)
Sheets("Sheet1").Cells(15 + j + 1, 8) = 100 - (SumDx + Dx) * I + h(j + 1)

’ esquema de 2a ordem

S_j = Area(Br, d(j))


P_j = Per(Br, d(j))
R_j = RaioH(P_j, S_j)
B_j = Bsup(Br, d(j))
Sf_j = Jota(Q, S_j, R_j, Ks)
Fr_j = Fr2(Q, S_j, B_j) ^ 0.5

14
’ método de Newton para o cálculo de d(j+1)

d0 = h(j + 1) ’valor inicial para o método de Newton é o


’valor da altura
’do escoamento do esquema predictor corrector
Constante = d(j) + (Dx / 2#) * ((I - Sf_j) / (1# - Fr_j ^ 2))
dd = 999999# ’para forçar a entrada no ciclo
k = 0

While ((Abs(dd) > 0.000001) And (k < 200)) ’erro da ordem


da milésima de milı́metro
S0 = Area(Br, d0)
P0 = Per(Br, d0)
R0 = RaioH(P0, S0)
B0 = Bsup(Br, d0)

Sf0 = Jota(Q, S0, R0, Ks) ’isto é o J (perda de carga unitária)


Fr0 = Fr2(Q, S0, B0) ^ 0.5

dPdh0 = dPdh(Br, d0)


dBdh0 = dBsupdh(Br, d0)

F = (d0 - Constante) * (1# - Fr0 ^ 2) - (Dx / 2#) * (I - Sf0)


dFdh = (1 - Fr0 ^ 2) - (d0 - Constante) * Fr0 ^ 2 *
(dBdh0 / B0 - 3# * B0 / S0) + (Dx / 2#) * Sf0 *
((4# / 3#) * dPdh0 / P0 - (10# / 3#) * B0 / S0)

If (Abs(dFdh) < 0.0001) Then


dd = 0# ’método de newton n~
ao encontrou soluç~
ao
Else
dd = -F / dFdh
End If

d0 = d0 + dd
k = k + 1

Wend

d(j + 1) = d0
Sheets("Sheet1").Cells(15 + j + 1, 9) = d(j + 1)
Sheets("Sheet1").Cells(15 + j + 1, 10) = 100 - (SumDx + Dx) * I
+ d(j + 1)
d(j) = d(j + 1)

’ actualizaç~
ao para o próximo passo de cálculo
SumDx = SumDx + Dx
j = j + 1
Wend

End Sub

15
Anexo E: Código em MatLab para o cálculo de uma curva
de regolfo num canal não prismático.
Apresenta-se um código, em MatLab, para a resolução da equação (21). Resolve-se esta
equação num canal de secção rectangular cuja largura do fundo alarga 5 m, ao longo de 200
m.

% calculo de uma curva de regolfo num canal n~


ao prismático
% Rui Ferreira, 17 de Novembro de 2007
%
% variaveis:
% x - variaveis independentes (dist^ ancia à origem)
% dx - largura da malha de calculo
% N - número de secç~
oes de cálculo
% Q - caudal escoado
% h() - altura do escoamento
% zb() - cota do fundo
% u() - velocidade media do escoamento
% b() - largura do fundo
% mi - inverso do declive dos taludes = 0
% S() - área da secç~
ao transversal do escoamento
% h_crit() - alturas dos escoamentos crı́ticos
% h_unif() - alturas dos escoamentos uniformes, calculadas em cada secç~
ao,
% que se estabeleceriam em canais prismáticos com essa secç~
ao
% S0 - declive do fundo
% K - coeficiente da fórmula de Manning-Strickler
% Hesp() - energia especı́fica
% M() - quantidade de movimento total
% Y() - cota da superfı́cie livre
% Fr - número de Froude

close all
clear all
clc

% discretizaç~
ao

dx = 2; % canal com 200 metros de comprimento


N = 101;
x = [0:dx:200];

% definiç~
ao da geometria: canal de secç~
ao trapezoidal com alargamento suave

b = [10:.05:15]; % 101 secç~


oes, b variável entre 10 e 15
%mi(1:101) = 0. % 101 secç~oes, mi constante = 0 (secç~
ao rectangular)

% inicializaç~
ao

16
Q = 10; % m3s-1
K = 75; % m1/3s-1
S0 = 0.01; % -

zb(1:101) = 2 - S0.*x;

h_crit(1:101) = (Q^2./(9.8*b.^2)).^(1/3);

h_unif(1:101) = calcula_hu(Q,b(1:101),K,S0); % funç~ ao que calcula


%a altura do escoamento uniforme. cálculo numéico, iteraç~
ao do ponto fixo

h(1:101) = 1; % inicializa o vector das alturas do escoamento

% condiç~
ao de fronteira de montante (valor inicial para a
%integraç~ao da eq. diferencial ordinária)

h(1) = .99*h_crit(1); % regime rápido imposto a montante


rapido = true;
i = 1;
while ( (i < N) && ( rapido ) )

h(i+1) = calcula_prox_h_rapido(dx,h(i),Q,b(i),K,S0);

if (h(i+1) < .95*h_crit(i+1))

rapido = true;
else
rapido = false;
end

i = i + 1

end

S(1:101) = b .* h;
hg(1:101) = h/2;

Hesp(1:101) = h + Q^2./(2 * 9.8 .* S );


M(1:101) = 1000 * 9.8 * ( hg .* S ) + Q^2./( b .* h);

Y(1:101) = h + zb;

u(1:101) = Q./S;

% escrita dos resultados

nome_fich = ’regolfo_out.res’;
file_1 = fopen(nome_fich,’wt’);
fprintf(file_1, ’Ficheiro %20s \n ’, nome_fich);

17
fprintf(file_1, ’contador \t distancia(m) \t z(m) \t Y(m) \t h(m) \t ...
u(m/s) \t H(m) \t M(N) \n’);

% escrita no final e encerramento


for i = 1 : N
fprintf(file_1, ’%10.0d \t %10.5f \t %10.5f \t %10.5f ...
\t %10.5f \t %10.5f \t %10.5f \t %10.5f \n’, i, x(i), ...
zb(i), Y(i), h(i), u(i), Hesp(i), M(i));
end
fclose(file_1);
fprintf(’ficheiro criado’);
% abertura para fazer o grafico
file_1 = fopen(nome_fich,’r’);
cabecalho = fgets(file_1);
cabecalho = fgets(file_1);
[A, count] = fscanf(file_1,’%f’, [8 Inf]);
fclose(file_1);

hf1=figure(’outerposition’,[10 50 600 400]);


set(gcf,’Color’,[1 1 1]);

plot(A(2,:),A(3,:),’k’,A(2,:),A(4,:),’b’);

xlabel(’distancia (m)’,’Fontsize’,12,’Fontname’,’Times’),
ylabel(’Cotas do fundo e da superfı́cie livre (m)’,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’xtick’,0:25:200,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’ytick’,0:.5:3,’Fontsize’,12,’Fontname’,’Times’),
axis([0 200 0.0 3.0]);

hf2=figure(’outerposition’,[10 100 600 400]);


set(gcf,’Color’,[1 1 1]);

plot(A(2,:),A(6,:),’k’);

xlabel(’distancia (m)’,’Fontsize’,12,’Fontname’,’Times’),
ylabel(’velocidade (m/s)’,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’xtick’,0:25:200,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’ytick’,0:.5:5,’Fontsize’,12,’Fontname’,’Times’),
axis([0 200 0.0 5.0]);

hf3=figure(’outerposition’,[10 150 600 400]);


set(gcf,’Color’,[1 1 1]);

plot(A(2,:),A(5,:),’k’);

xlabel(’distancia (m)’,’Fontsize’,12,’Fontname’,’Times’),
ylabel(’profundidade do escoamento (m)’,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’xtick’,0:25:200,’Fontsize’,12,’Fontname’,’Times’),
set(gca,’ytick’,0:.1:.5,’Fontsize’,12,’Fontname’,’Times’),

18
axis([0 200 0.0 .5]);

fim = 1

%%%%%%%%%%%%%%%%%%%%
function calcula_prox_h = funcao(dx,xhi,xQ,xb,xK,xS0)
% Function calcula_prox_h
% resolve a equaç~
ao implı́cita que resulta do esquema de segunda ordem
% baseado na energia especı́fica para a equaç~
ao do regolfo
% - canais rectangulares apenas
%
% Calling sequence:
% funcao(flow_depth_i,discharge,bed_width,K_strickler,bed_slope)
%

constante0 = (xhi + xQ^2/(2*9.8*(xb*xhi)^2)) + dx/2*(xS0 - Jota(xhi,xQ,xb,xK,xS0))

h_trial = xhi

erro = 99999

while (erro >= 0.00001)

constante1 = (dx/2)*( xS0 - Jota(h_trial,xQ,xb,xK,xS0) ) - h_trial

seccao = h_trial*xb
funcao_S = ( (xQ^2/(2*9.8))/(constante0 + constante1) )^.5

erro = abs(funcao_S - seccao);

h_trial = funcao_S/xb

end

calcula_prox_h = h_trial

%end % function calcula_prox_h = funcao(xi,xhi)

%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Jota = funcao(xh,xQ,xb,xK,xS0)
% Function Jota
% calcula a perda de carga unitária
% - canais rectangulares apenas
%
% Calling sequence:
% funcao(discharge,bed_width,K_strickler,bed_slope)
%

xS = xb*xh

19
xR = xb*xh/(xb + 2*xh)
Jota = (xQ/(xK*xS*xR^(2/3)))^2

%end % function Jota = funcao(xQ,xb,xK,xS0)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function calcula_hu = funcao(xQ,xb,xK,xS0)
% Function calcula_hu
% calcula a altura de um escoamento uniforme num canal de secç~
ao
% rectangular
%
% Calling sequence:
% funcao(discharge,bed_width,strickler_K,bed_slope)
%

h_trial(1:101) = xb./2

erro(1:101) = 99999

while (erro>= 0.00001)

seccao = xb.*h_trial;

raioh = (xb.*h_trial)/(xb + 2*h_trial);


seccao1 = xQ./(xK*xS0^.5 .* raioh.^(2/3));

erro = abs(seccao - seccao1);

h_trial = seccao1./xb

end

calcula_hu = h_trial

%end % function calcula_hu = funcao(xQ,xb,xK,xS0)

20

Você também pode gostar