trabalho final pronto 30-11-10
DESCRIPTION
Meu trabalho de conclusão de Curso - TCCTRANSCRIPT
Seminários de Matemática Aplicada e Pesquisa em Ensino – Prática IV
CONTAMINAÇÃO METROPOLITANA DO
RIO CUIABÁ: MODELAGEM E SIMULAÇÃO
DE CENÁRIOS
Luiz Fernando de Moraes Campos Filho
Orientador: Prof. Dr. Geraldo Lucio Diniz
NOVEMBRO/2010 2010/2
INSTITUTO DE CIÊNCIAS EXATAS E DA TERRA
UFMT
UNIVERSIDADE FEDERAL DE MATO GROSSO
CONTAMINAÇÃO METROPOLITANA DO RIO CUIABÁ:
MODELAGEM E SIMULAÇÃO DE CENÁRIOS
Luiz Fernando De Moraes Campos Filho
Como orientador do trabalho
Contaminação Metropolitana do Rio
Cuiabá: Modelagem e simulação de
Cenários, realizado pelo discente Luiz
Fernando de Moraes Campos Filho,
aprovo esta versão final, como requisito
para disciplina “Prática de Ensino de
Matemática IV – Seminários de
Matemática Aplicada e Pesquisa em
Ensino”.
Cuiabá, 26 de novembro de 2010.
Geraldo Lúcio Diniz
CONTAMINAÇÃO METROPOLITANA DO RIO CUIABÁ:
MODELAGEM E SIMULAÇÃO DE CENÁRIOS
Metropolitan Contamination of Cuiaba River:
Modelling and simulations of scenarios
Luiz Fernando de Moraes Campos Filho
Discente do Curso de Licenciatura Plena em Matemática
Orientador: Geraldo Lúcio Diniz
Professor do Departamento de Matemática da UFMT
RESUMO
Neste relatório são apresentados o modelo matemático, as aproximações
numéricas e as simulações obtidas através do estudo do problema da
contaminação de um trecho urbano do rio Cuiabá por esgoto. No estudo foi
considerado apenas o meio aquático, tendo como objetivo avaliar a
degradação ambiental deste rio, de grande importância para as populações
ribeirinhas.
Palavras-chave: Dispersão de esgoto. Contaminação de rio. Método de diferenças
finitas.
ABSTRACT
In this paper a mathematical model is presented, including the numerical
approximations and simulations obtained by the studied problem of
contamination for the urban stretch of Cuiabá River by wastewater. In the
study, we considered only aquatic mean, of which goal was to model the
environmental degradation of this river, that has high importance for the
local population.
Key words: Dispersion of wastewater. Contamination of river. Finite differences
method.
1 INTRODUÇÃO
A água é um dos recursos naturais mais intensamente utilizados. É fundamental
para a existência e manutenção da vida e, para isso, deve estar presente no ambiente em
quantidade e qualidade apropriadas.
Dentre os benefícios que a água promove ao ser humano estão: abastecimento
residencial, abastecimento industrial, irrigação, geração de energia elétrica, agricultura e
recreação. Todavia, se a água não estiver em condições apropriadas todos os benefícios
citados acima são perdidos.
Grande parte da água utilizada pelo ser humano vem de rios e lagos de água doce.
Logo a contaminação destes é um grave problema para o próprio ser humano. Uma das
principais causas de contaminação dos rios e lagos é o lançamento de esgoto em suas
águas e esse impacto ambiental pode ser um problema fatal a estes e conseqüentemente
aos seus usuários (Alegria e Diniz, 2007).
Outro dado importante também é que o volume de água na Terra está estimado em
1 trilhão e 386 bilhões de quilômetros cúbicos (Km3), sendo a maior parte - 97,2% desse
total - formada pela água salgada dos mares e oceanos. Algo como 1,8% da água total
está estocada sob a forma de neve ou gelo, no topo das grandes cadeias de montanhas
ou nas zonas polares. Outra porção é a água subterrânea, que abrange cerca de 0,9%
desse total, restando então a água atmosférica (0,001%) e os rios e lagos de água doce,
que ficam com somente 0,0092% dessa água do nosso planeta. Esta pequena quantia
vem sofrendo com os impactos ambientais causados pelo homem, correndo risco até de
num tempo muito curto se extinguir (Fonte do saber, 2010).
Dentre os rios que sofrem com este problema está o Rio Cuiabá. Este rio é de
grande importância para a população de Mato Grosso, pois sua bacia hidrográfica
abrange 75% da população do estado e a maioria desse total é constituído de habitantes
de Cuiabá e Várzea Grande. (Wolmuth e Diniz, 2005).
O crescimento populacional das cidades de Cuiabá e Várzea Grande e a falta de
infra-estrutura existente nelas vêm causando grandes prejuízos ambientais. Estas
cidades depositam, diariamente, cerca de 20 toneladas de resíduos sólidos (lixo
doméstico) e 400 mil litros de esgoto doméstico e industrial no rio Cuiabá (Wolmuth e
Diniz, 2005).
Atualmente, cerca de 31% dos domicílios, em Cuiabá, estão conectados ao
sistema de saneamento, mas apenas 14% do esgoto coletado é tratado. Apesar de 80%
da cidade ter acesso a água canalizada, apenas 57% dos domicílios tem este serviço 24
horas por dia, o que mostra a necessidade de investimentos do poder público em
saneamento básico (Safford, 2009).
Pelos dados acima, se pode concluir que grande parte do esgoto não é tratada
adequadamente. Como solução “imediata” os órgãos responsáveis pelo saneamento
básico adotam a escolha do seu lançamento in natura nos corpos d’água,
comprometendo a qualidade da água, não apenas no local onde o esgoto é despejado,
mas em toda a sua bacia hidrográfica (Alegria e Diniz, 2007; Cunha e Ferreira, 2006).
A crescente degradação dos recursos hídricos, além de destruir os habitats
aquáticos e a biodiversidade, tem comprometido a própria saúde humana. Dessa forma,
a água passou a ser uma preocupação crescente não apenas no que se refere à
quantidade disponível, mas, principalmente, em relação à sua qualidade.
Para que se possa planejar uma maneira mais eficiente de implantar um sistema de
saneamento, que minimize os danos ao rio Cuiabá, é o que motivou o presente trabalho.
Neste sentido, será feito um estudo sobre a contaminação do rio Cuiabá por
esgoto, através de um modelo matemático (Meyer e Diniz, 2007), seguido de sua
discretização espacial e temporal, cujos resultados serão apresentados através de
simulações computacionais para os cenários das estações úmida e seca.
Como justificado acima, se espera que este trabalho possa servir para diagnóstico
e auxílio na adoção de políticas públicas de saneamento e mitigação da contaminação
do rio Cuiabá por esgoto.
2 DESCRIÇÃO DO PROBLEMA
O rio Cuiabá é de grande importância para a sociedade mato-grossense. Esta
importância pode ser comprovada, uma vez que, historicamente, este rio é uma fonte de
vida e de recursos para o estado e, em particular, para a cidade de Cuiabá (Instituto
Ação Verde).
Sua bacia hidrográfica apresenta uma superfície de aproximadamente 28.000 km²
até as proximidades do município de Barão do Melgaço e estende-se entre os paralelos
14º18’ a 17º00’ S e 54º40’ a 56º55’ W (Cavinatto et al.,1995), sendo dividida em três
bacias: superior, mediana e inferior.
A parte superior fica perto da nascente do rio, constituída pelos municípios de
Jangada, Acorizal, Rosário Oeste, Chapada dos Guimarães, Campo Verde, Nova
Brasilândia e Planalto da Serra, este trecho possuí uma vegetação do tipo cerrado onde a
agricultura é uma atividade predominante.
A bacia mediana abrange os municípios de Cuiabá, Várzea Grande, Nossa
Senhora do Livramento e Santo Antonio do Leverger, também conhecida como baixada
cuiabana onde a declividade do rio diminui o que favorece o depósito de sedimentos no
fundo do leito, transportados, principalmente, no período de cheias. Estes sedimentos
provocam uma redução da lamina d’água e diminui a seção do rio, tornando-o
suscetível à inundações e, com o aumento da velocidade das águas no período de
cheias, o solapamento* das barrancas (Lima, 1994).
A bacia inferior abrange os municípios de Barão de Melgaço e Poconé. Este
trecho final é constituído de planícies de inundações que corresponde à região do
Pantanal. Neste trecho, o rio Cuiabá banha as baías de Chacororé, Sá Mariana e outras.
A bacia hidrográfica do rio Cuiabá é local de habitação de 75% da população de
Mato Grosso e a maioria, desse total, encontra-se nesses dois municípios. A captação de
água para abastecimento das duas cidades é feita à montante delas e todo esgoto aí
produzido é despejado diretamente no rio com pouco ou nenhum tratamento.
* Solapamento é sinônimo de ceder, desmoronar.
A área de estudo corresponde ao trecho urbano do rio Cuiabá, compreendido entre
a Ponte Nova até a jusante do encontro com o rio Coxipó (ver figura 1). O rio Cuiabá,
neste trecho de estudo, possui aproximadamente 6,1 Km de comprimento e 0,2 Km de
largura (obtidos através da ferramenta métrica do Google Earth). O clima nesta região é
quente tropical, semi-úmido, com temperatura média anual de 26°C, com máximas
médias diárias ocorrendo nos meses de setembro a novembro e atingem 36°C, as médias
mínimas diárias ocorrem no mês de julho, chegando aos 15°C. A precipitação média
anual fica em torno de 1.342 mm/ano, de acordo com as séries temporais medidas entre
1989-2000 (INMET, 2000).
Figura 1: Mapa da área de estudo, obtido através do Google Earth.
3 O MODELO MATEMÁTICO
Neste relatório, serão considerados apenas poluentes oriundos da Estação
Elevatória da Prainha, Córrego do Barbado, Rio Coxipó e dois córregos da cidade de
Várzea Grande. Estes poluentes, em relação ao ponto de origem (Ponte Nova), estão
distribuídos da seguinte forma: Estação da Prainha (A) a 1,45 km, Córrego do Barbado
(B) a 4,85 km, Córrego do Coxipó (C) a 6,06 km, Afluente 1 de Várzea Grande (D) a
3,86 km e Afluente 2 de Várzea Grande (E) a 4,53km (ver a figura 2, a seguir).
Figura 2: Descrição da Localização dos Poluentes no domínio Simplificado.
No modelo, devem ser avaliados os fenômenos de difusão efetiva, transporte
advectivo, a degradação global e as fontes poluidoras.
A difusão efetiva consiste na mistura do esgoto lançado no rio com a água
presente no corpo d’água, em termos microscópicos (movimento browniano).
Os corpos d’água não são estáticos. Eles apresentam um movimento próprio que
transporta um poluente do seu ponto de despejo para outras regiões. Este transporte é
feito pelo campo de velocidades da água e a este fenômeno de transporte é que
denominamos advecção.
A degradação global consiste na absorção do poluente pela biota, que
denominamos autodepuração pelo rio.
As fontes poluidoras são as entradas de efluentes que, neste trabalho,
consideramos cinco ao todo (ver figura 2).
Chamando de C(x,y,t) a concentração de esgoto – medida em PPM (partes por
milhão) – no ponto (x,y) para o instante t, o modelo pode ser descrito, genericamente,
por:
C
difusão advecção decaimento fontet
(1)
onde,
Difusão - . Marchuk (1986);
Advecção - . Marchuk (1986);
Decaimento - . Bassanezi e Ferreira (1988);
div C cf
div VC cf
C cf
Assim, a equação evolutiva que modela a concentração de esgoto é dada por:
div div fonteC
C VC Ct
(2)
sendo,
α = a constante de difusibilidade efetiva no meio aquático.
V
= o campo de velocidades.
σ = a taxa de decaimento total no meio aquático.
Para o domínio Ω, cuja fronteira = 0 1 2 3 , se tem as seguintes
condições de contorno:
0 1 2 3
1 1 2 3 2
C C C C0, K D , K C, K D
(3)
4 METODOLOGIA
4.1 Discretização do modelo:
Na construção de soluções aproximadas para equações diferenciais parciais, em
primeiro lugar, será feita a discretização do domínio e, para isso, se introduz uma malha
sobre a qual está definida a solução aproximada.
Seja R o conjunto de pontos onde a equação está definida e S o contorno deste
conjunto, sendo que a malha tem pontos igualmente espaçados nas duas direções, ou
seja, Δx = Δy = h .
A figura 2 ilustra a malha onde os pontos que estão representados por + são os
pontos de S e os demais são pontos de R.
Figura 3: Discretização do domínio.
4.1.1 Discretização espacial - método de diferenças finitas centradas.
Para a discretização espacial será utilizado o método de diferenças finitas
centradas, esta discretização envolve em cada ponto da malha, além do valor da solução
neste ponto, os valores que a solução assume nos quatro pontos adjacentes como ilustra
a figura 3.
Figura 4: Ilustração gráfica do método de diferenças finitas centradas, para os nós
interiores.
A escolha do método de diferenças finitas centradas para a discretização espacial
é justificada por sua precisão, da ordem de h2, enquanto as fórmulas avante (forward) e
retrógradas (backward) fornecem uma aproximação da ordem de h.
No método de diferenças finitas centradas, as derivadas que aparecem na equação
diferencial (2) e (3) são substituídas pelas aproximações descritas por (4) a (13) a
seguir, onde os índices n e n+1 correspondem a discretização temporal, descrita na
seção seguinte.
Difusão:
2 2
2 2
C C C Cdiv C div ,
x y x y
(4)
Advecção:
1 2
C Cdiv VC V y V x, y
x y
(5)
onde,
n n n 1 n 1
i ny i ny i ny i nyC C C CC
x 4. x 4. x
(6)
n n n 1 n 1
i 1 i 1 i 1 i 1C C C CC
y 4. y 4. y
(7)
n n n n 1 n 1 n 12i ny i i ny i ny i i ny
2 2 2
C 2.C C C 2.C CC
x 2. x 2. x
(8)
n n n n 1 n 1 n 12
i 1 i i 1 i 1 i i 1
2 2 2
C 2.C C C 2.C CC
y 2. y 2. y
(9)
Em 0 , se tem:
n 1 n 1 n n
i ny i 2ny i ny i 2ny4.C C 4.C CC. 0
4. x 4. x
(10)
Pois n 1
iC 0 e n
iC 0
Em 1 , se tem:
n n n n 1 n 1 n 1
i i 1 i 2 i i 1 i 21 1
3.C 4.C C 3.C 4.C CC. K D
4. y 4. y
(11)
Em 2 , se tem:
n 1 n 1 n 1 n n n
i i ny i 2ny i i ny i 2ny
2
3.C 4.C C 3.C 4.C CC. K .C
4. x 4. x
(12)
Em 3 , se tem:
n n n n 1 n 1 n 1
i i 1 i 2 i i 1 i 23 2
3.C 4.C C 3.C 4.C CC. K D
4. y 4. y
(13)
4.1.2 Discretização temporal - método Crank-Nicolson.
Para a discretização temporal, será usado o método de Crank-Nicolson, por se
tratar de um método incondicionalmente estável, exceto para os casos de
descontinuidade da variável de estado, o que não é o caso. Neste caso, serão feitas as
aproximações dadas por (14) e (15), a seguir.
1
2
i n i ni n
C ( t ) C ( t )d tC t
dt t
(14)
Para as aproximações dadas anteriormente, o erro é da ordem de (Δt)², cf.
Carnaham (1969). Assim, quanto menor o passo no tempo, melhor a precisão da
aproximação.
1
2 2
n n
i in
C CtC t
(15)
4.2 Construção do sistema de Equações
Nesta etapa substituiremos os termos da equação (2) e da equação (3) pelas
aproximações propostas acima e obteremos um sistema de equações (considerando os
nós interiores e os nós da fronteira), cujo vetor solução do sistema nos dará como
resultado a solução aproximada sobre os nós da malha.
4.2.1 Construção do sistema para os pontos interiores da malha
Após a substituição dos termos da equação (2) pelas aproximações descritas
acima, se obtêm o seguinte sistema de equações:
n 1 n 1 1i i ny2 2 2
n 1 n 11 2i ny i 12 2
n 1 2i 1 2
n
i 2 2
tV (y)t t t tC 1 C
x y 2 2 x 4 x
tV (y) tV (x, y)t tC C
2 x 4 x 2 y 4 y
tV (x, y)tC
2 y 4 y
t tC 1
x y
n 1i ny 2
n n1 2i ny i 12 2
n 2i 1 2
tV (y)t tC
2 2 x 4 x
tV (y) tV (x, y)t tC C
2 x 4 x 2 y 4 y
tV (x, y)tC t f
2 y 4 y
4.2.2 Construção do sistema de equação para os pontos de contorno da malha
De acordo com as condições de contorno (3), através da substituição dos termos
das equações (10) a (13) pelas aproximações acima, se tem que:
Em 0 , se tem:
n 1 n 1 n n
i ny i 2ny i ny i 2ny4.C C 4.C CC. 0
4. x 4. x
(16)
Fazendo as substituições, se obtêm o seguinte sistema:
i ny i ny
i 2ny i 2nyn 1 n
C C. .
C Cx 4 x x 4 x
Em 1 , se tem:
n n n n 1 n 1 n 1
i i 1 i 2 i i 1 i 21
3.C 4.C C 3.C 4.C CC. K C
4. y 4. y
(17)
Após as substituições se obtêm o seguinte sistema:
i i
1 1i 1 i 1
i 2 i 2n 1 n
C CK K3 3
. C . C4 y 2 y 4 y 4 y 2 y 4 y
C C
Em 2 , se tem que:
n 1 n 1 n 1 n n n
i i ny i 2ny i i ny i 2ny
2
3.C 4.C C 3.C 4.C CC. K .C
4. x 4. x
(18)
Após as substituições se obtêm o seguinte sistema:
i i
2 2i ny i ny
i 2ny i 2nyn 1 n
C CK K3 3
. C . C4 x 2 x 4 x 4 x 2 x 4 x
C C
Em 3 , se tem que:
n n n n 1 n 1 n 1
i i 1 i 2 i i 1 i 23
3.C 4.C C 3.C 4.C CC. K C
4. y 4. y
(19)
Após as substituições, se obtêm o seguinte sistema:
i i
3 3i 1 i 1
i 2 i 2n 1 n
C CK K3 3
. C . C4 y 2 y 4 y 4 y 2 y 4 y
C C
Por fim, substituindo os termos da equação (2) e (3) pelas equações (4) a (19) e
fazendo a manipulação algébrica das equações, se obtém o sistema algébrico de
equações lineares, representado matricialmente na forma:
1n
n 1 n 2AC BC d
(16)
onde, 1nC é a solução aproximada procurada, para o instante n+1 e nC é a solução
aproximada para o instante n, a partir da condição inicial 0C .
Após a construção dos códigos numéricos se obteve a solução aproximada,
conforme as simulações computacionais apresentadas a seguir.
5 RESULTADOS E DISCUSSÃO
Para o coeficiente de difusão, foram adotados três valores, considerando a difusão
baixa, média e alta. Para difusão baixa e alta os valores foram considerados de acordo
com Wolmuth e Diniz (2005), tendo os seguintes valores para o coeficiente de difusão
0,09 e 0,32 km²/h, respectivamente. Para a difusão média, o valor adotado foi de acordo
com Carreras e Menéndez (1990), cujo valor para o coeficiente de difusão foi de 0,23
km²/h.
O parâmetro de decaimento total do meio aquático foi estimado, pois não foi
possível encontrá-lo na literatura.
Em Rocha (2003), encontramos a media anual de velocidades para o trecho do rio
em estudo, onde é apresentado que a menor média ocorre no mês de julho, mês
considerado de estação seca, e consiste no valor de 1,7 km/h, enquanto a maior média
ocorre no mês de dezembro, mês considerado de estação úmida, cujo valor é 3,0 km/h.
Com isto, foram adotados os valores de 1,7 km/h e de 3,0 km/h para as estações seca e
úmida, respectivamente.
Para a discretização espacial adotamos ∆x = ∆y = 0,01 km, e para a discretização
temporal, adotamos ∆t = 0,4 horas.
A tabela abaixo mostra os valores dos parâmetros adotados para obter as
simulações dos cenários.
A simulação de cenários foi realizada considerando um intervalo de tempo t = 40
horas, tanto para estação seca quanto úmida.
Tabela 1 - Parâmetros utilizados na simulação dos cenários
Valores
Parâmetros Estação Seca Estação Úmida Unidades
α
0,09† 0,09
km²/h 0,23‡ 0,23
0,32§ 0,32
σ 0,1 0,1 h-1
V1 1,7 3 Km/h
V2 (Estação Prainha) -0,1 -0,1 Km/h
V2 (Córrego do Barbado) -0,1 -0,1 Km/h
V2 (Córrego do Coxipó) -1,3 -1,3 Km/h
V2 (Afluente 1 de VG) 0,1 0,1 Km/h
V2 (Afluente 2 de VG) 0,2 0,2 Km/h
Com estes dados, foram obtidas as simulações para as estações seca (Figuras 5, 6 e
7), e úmida (figuras 8, 9 e 10), apresentadas a seguir.
† Difusão baixa ‡ Difusão média § Difusão Alta
Figura 5. Concentração para 4 nós do domínio ao longo do tempo, na estação seca com
difusão baixa.
Figura 6. Concentração para 4 nós do domínio ao longo do tempo na estação seca com
difusão média.
Figura 7. Concentração para 4 nós do domínio ao longo do tempo na estação seca com
difusão alta.
Figura 8. Concentração para 4 nós do domínio ao longo do tempo na estação úmida
com difusão baixa.
Figura 9. Concentração para 4 nós do domínio ao longo do tempo na estação úmida
com difusão média.
Figura 10. Concentração para 4 nós do domínio ao longo do tempo na estação úmida
com difusão alta.
De acordo com as simulações de cenários acima, observamos que na estação seca
há uma dispersão mais lenta e um maior nível de concentração de esgoto, ao contrário
da estação úmida, que apresentou uma dispersão mais rápida e um menor nível de
concentração de esgoto, para o mesmo intervalo de tempo estudado. Estes resultados
foram compatíveis, pois no período chuvoso a velocidade da correnteza é maior.
Observamos também que para os pontos próximos da fronteira 0 , isto é no
trecho inicial da área de estudo, o nível de concentração de esgoto é maior quando o
índice de difusão considerado é alto.
Já para os outros nós considerados valeu a seguinte lei: quanto maior for o índice
de difusão, menor será o nível de concentração de esgoto nos pontos de descarga.
Considerando os pontos próximos da região final da área de estudo, isto é, pontos sobre
a fronteira 2 , podemos concluir que sendo a difusão baixa e a estação seca então o
nível de concentração de esgoto é alto, enquanto o nível de concentração de esgoto
decresce em função da aumento do valor do coeficiente de difusão, chegando ao seu
valor mínimo de concentração, quando a difusão é alta e a estação é úmida. Estes
resultados se mostraram compatíveis com a realidade, pois quanto menor for o
coeficiente de difusão maior será a concentração de esgoto.
Em relação a trabalhos anteriores sobre o mesmo tipo de problema (Alegria e
Diniz, 2007; Wolmuth e Diniz, 2005; Carreras e Menéndez, 1990), este trabalho
apresenta algumas melhorias, com a inclusão de mais fontes poluidoras e melhor
precisão de resultados, uma vez que foi usada uma malha mais refinada (12.000 nós).
6 CONCLUSÕES
Com base nos resultados obtidos para as simulações dos diferentes cenários,
podemos concluir que o código elaborado se mostrou eficaz para os parâmetros de
velocidade encontrados na literatura e o coeficiente de difusão considerado, de modo a
simular o processo de dispersão de poluentes no trecho do rio, apesar das oscilações
numéricas inerentes ao método de diferenças finitas, apresentadas nas primeiras
iterações, cuja estabilização ocorre ao longo do tempo, devido ao método de Crank-
Nicolson, que é incondicionalmente estável.
Desta forma, acreditamos que o modelo e o código numérico desenvolvidos sejam
ferramentas úteis. A apresentação gráfica dos resultados facilita a compreensão para os
não matemáticos, interessados neste tipo de estudo, o que permite a parceria com
pesquisadores de outras áreas e utilização por agentes da área ambiental. Neste sentido,
o trabalho pode servir para diagnóstico e auxílio na adoção de políticas públicas de
saneamento e mitigação da contaminação do rio Cuiabá pelo esgoto, que é um afluente
de grande importância para a planície pantaneira.
7 REFERÊNCIAS BIBLIOGRÁFICAS:
ALEGRIA, A. F., DINIZ G. L. Estudo da poluição por esgoto num trecho urbano de
rio. Biomatemática, Campinas/SP, v. 17, 73-86, 2007.
BASSANESI, R. C.; FERREIRA Jr., W. C. Equações Diferenciais com Aplicações.
São Paulo: Ed. Harbra, 1988. 572p.
BRAGA, BENEDITO. Introdução Á Engenharia Ambiental. São Paulo: Ed. Prentice
Hall, 2002.
CARRERAS, P. E., MENÉNDEZ, A. M. Mathematical simulation of pollutant
dispersion. Ecological Modelling, Amsterdam, v. 52, 29-40, 1990.
CUNHA, C. Métodos Numéricos para as Engenharias e Ciências Aplicadas.
Campinas: Ed. Unicamp, 1993. 276p.
CUNHA, C. L. N.; FERREIRA, A. P. Modelagem matemática para avaliação dos
efeitos dos despejos orgânicos nas condições sanitárias de águas ambientais. Cadernos
de Saúde Pública, Rio de Janeiro, v. 22, n. 8, 1715-1725, 2006.
CARNAHAN, B; LUTHER, H. A; WILKES, J.D. Applied Numerical Methods,
N.York: John Wiley & Sons, Inc., 1969. 621p.
FONTE DO SABER. URL: http://www.fontedosaber.com/biologia/a-degradacao-do-
meio-ambiente.html. Acesso em: 23/11/2010.
INMET, Ministério da Agricultura e do Abastecimento, Delegacia Federal da
Agricultura – DFA/MT 9.º Distrito de Metereologia. Cuiabá/MT. 2000. Boletim da
Estação 2504600.
INSTITUTO AÇÃO VERDE. URL: http://www.acaoverde.org.br/rio_cuiaba.php.
Acesso em: 25/04/2010.
MARCHUK, G. I.. Mathematical models in environmental problems. Studies in
Mathematics and its Applications. Vol.16. North-Holland, Amsterdan. 1986. 217p.
MEYER, J. F. C. A.; DINIZ, G L. Pollutant dispersion in wetland systems:
mathematical modelling and numerical simulation. Ecological Modelling, Amsterdam,
v.200, 360-370. 2007.
SAFFORD, T. G. Características gerais da bacia do rio Cuiabá. Disponível em:
http://www.portalnaturezaviva.org.br/RioCuiaba_CaracteristicasGerais_1.asp. Acesso
em: 11/12/2009.
WOLMUTH, L. D., DINIZ, G. L. Contaminação do Rio Cuiabá por Esgoto.
Relatório técnico, disponível em:
http://www.ufmt.br/icet/matematica/geraldo/relat_2005_1.pdf. Acesso em: 30/12/2009.
2005.
AGRADECIMENTOS
Em primeiro lugar agradeço a Deus por todas as dádivas recebidas até o presente
momento.
Agradeço também a minha mãe Regina pela grande ajuda tanto no incentivo pelos
estudos como na luta para me dar condições adequadas para estudar.
Agradeço ao Professor Geraldo pela oportunidade que me deu, através da Iniciação
Cientifica e pelas eternas orientações ao longo da graduação.
Agradeço aos Professores do Departamento de Matemática da Universidade Federal
de Mato Grosso pela minha formação.
Ao Conselho Nacional de Pesquisa e Tecnologia (CNPq) agradeço pelo auxilio
financeiro durante a Bolsa de Iniciação Científica que gerou a base do presente trabalho.
A minha amiga Tatiana Leal, agradeço pelas correções de coerência na escrita do
trabalho.
Por fim, agradeço a todos os meus amigos mais chegados da graduação: Gilmar,
Renata, Thaís, Ericson, Lizias, Wilton e Ricardo pela companhia e sugestões.
APÊNDICE
Códigos Numéricos
Neste apêndice são apresentados os códigos numéricos utilizados na
implementação do método escolhido para as aproximações da solução do problema. O
código foi elaborado em ambiente MATLAB®, gerando seis testes numéricos que são:
teste estação seca – difusão baixa; teste estação seca – difusão média; teste estação seca
– difusão alta; teste estação úmida – difusão baixa; teste estação úmida – difusão média
e teste estação úmida difusão alta, que serão apresentados à seguir, respectivamente.
1. Teste estação Seca - Difusão Baixa
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação seca - Difusão Baixa
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.09; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 1.7; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);
2. Teste Estação Seca – Difusão Média
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação seca - Difusão Média
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.23; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 1.7; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);
3. Teste Estação seca – Difusão Alta
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação seca - Difusão Alta
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.32; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 1.7; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);
4. Teste Estação úmida – Difusão Baixa
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação úmida - Difusão Baixa
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.09; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 3.0; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);
5. Teste Estação úmida – Difusão Média
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação úmida - Difusão Baixa
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.23; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 3.0; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);
6. Teste Estação Úmida – Difusão Alta
1 % Programa preliminar p/ diferencas finitas
2 % Dispersao de esgoto no rio Cuiaba/MT - PIBIC Luiz Fernando
3 % sexta vesao - 26/11/2010 - Teste estação úmida - Difusão Alta
4 %
5 % Parametros do modelo
6 %
7 clear all; t0=clock; %format long;
8 alfa = 0.32; % coeficiente de difusão
9 sig = 0.1; % coeficiente de degradação
10 V1 = 3.0; % velocidade do rio
11 K1 = 0; % permeabilidade na fronteira Gama 1
12 K2 = 0; % permeabilidade na fronteira Gama 2
13 K3 = 0; % permeabilidade na fronteira Gama 3
14 %
15 % Parametros da discretizacao
16 %
17 xmin = 0; xmax = 6.0;
18 ymin = 0; ymax = 0.2;
19 ti = 0; tf = 40;
20 nx = 600;
21 ny = 20;
22 nt = 100;
23 %
24 % Calculo de parametros auxiliares
25 %
26 nnx= nx+1; nny= ny+1; ntn = nnx*nny; dt = (tf - ti)/nt;
27 dx = (xmax - xmin)/nx;
28 dy = (ymax - ymin)/ny;
29 nau1 = round(nx/3)*nny;
30 nau2 = round(2*nx/3)*nny;
31 nau3 = round(nx/20)*nny;
32 nau4 = round(nx/2)*nny;
33 %
34 % Construcao do campo V2 -> velocidades na direcao y
35 %
36 V2 = zeros(ntn,1);
37 V2(ntn-nau3) = -1.3;
38 V2(ntn-nau3-nny) = -1.3;
39 V2(ntn-nau3-2*nny) = -1.3;
40 V2(nau4) = -.1;
41 V2(nau4+nny) = -.1;
42 V2(nau3) = -0.1;
43 V2(nau3+nny) = -0.1;
44 V2(nau3+2*nny) = -0.1;
45 V2(nau1+1) = 0.1;
46 V2(nau1+nny+1) = 0.1;
47 V2(nau2+1) = 0.2;
48 V2(nau2+nny+1) = 0.2;
49 %
50 % Calculo do numero de Peclet
51 %
52 pec1 = (V1*dx)/alfa;
53 pec2 = (max(abs(V2))*dy)/alfa;
54 %
55 % Zerando as Matrizes e o vetor d
56 %
57 A = sparse(ntn,ntn);
58 B = sparse(ntn,ntn);
59 d = zeros(ntn,1);
60 %
61 % Estabelecendo a condicao inicial
62 %
63 u0 = zeros(ntn,1);
64 for k=1:1:nny
65 u0(k) = u0(k)+0.001;
66 end;
67 u0(ntn-nau3) = .3;
68 u0(ntn-nau3-nny) = .3;
69 u0(ntn-nau3-2*nny) = .3;
70 u0(nau4) = .3;
71 u0(nau4+nny) = .3;
72 u0(nau3) = .3;
73 u0(nau3+nny) = .3;
74 u0(nau3+2*nny) = .3;
75 u0(nau1+1) = .3;
76 u0(nau1+nny+1) = .3;
77 u0(nau2+1) = .3;
78 u0(nau2+nny+1) = .3;
79 %
80 % Construcao das Matrizes do sistema
81 %
82 % Construção em Gama 0
83 %
84 for i = 2:ny
85 A(i,i+nny) = -alfa/dx;
86 B(i,i+nny) = alfa/dx;
87 A(i,i+2*nny)= alfa/(4*dx);
88 B(i,i+2*nny)= -alfa/(4*dx);
89 end;
90 %
91 % Construção para os nodos centrais
92 %
93 for j = 1:1:nx-1
94 for i = nny*j+2:nny*j+ny
95 A(i,i-nny) = -alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
96 B(i,i-nny) = +alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
97 A(i,i-1) = -alfa*dt/(2*dy*dy)-V2(i-1)/(4*dy);
98 B(i,i-1) = +alfa*dt/(2*dy*dy)+V2(i-1)/(4*dy);
99 A(i,i) = 1+alfa*dt/(dx*dx)+alfa*dt/(dy*dy)+sig*dt/2;
100 B(i,i) = 1-alfa*dt/(dx*dx)-alfa*dt/(dy*dy)+sig*dt/2;
101 A(i,i+1) = -alfa*dt/(2*dy*dy)+V2(i+1)*dt/(4*dy);
102 B(i,i+1) = alfa*dt/(2*dy*dy)-V2(i+1)*dt/(4*dy);
103 A(i,i+nny) = -alfa*dt/(2*dx*dx)+V1*dt/(4*dx);
104 B(i,i+nny) = alfa*dt/(2*dx*dx)-V1*dt/(4*dx);
105 end;
106 end;
107 %
108 % Construção para a fronteira Gama 3
109 %
110 for i = 2*nny:nny:nx*nny
111 A(i,i) = 3*alfa/(4*dy)-K3/2;
112 B(i,i) = -3*alfa/(4*dy)-K3/2;
113 A(i,i-1) = -alfa/(dy);
114 B(i,i-1) = alfa/(dy);
115 A(i,i-2) = alfa/(4*dy);
116 B(i,i-2) = -alfa/(4*dy);
117 end;
118 %
119 % Construção para a fronteira Gama 1
120 %
121 for j = 1:nx-1
122 i = nny*j+1;
123 A(i,i) = 3*alfa/(4*dy)-K1/2;
124 B(i,i) = -3*alfa/(4*dy)-K1/2;
125 A(i,i+1) = -alfa/(dy);
126 B(i,i+1) = alfa/(dy);
127 A(i,i+2) = alfa/(4*dy);
128 B(i,i+2) = -alfa/(4*dy);
129 end;
130 %
131 % Construção para a fronteira Gama 2
132 %
133 for i = nx*nny+1:ntn
134 A(i,i) = 3*alfa/(4*dx)-K2/2;
135 B(i,i) = -3*alfa/(4*dx)-K2/2;
136 A(i,i-nny) = -alfa/(dx);
137 B(i,i-nny) = alfa/(dx);
138 A(i,i-2*nny) = alfa/(4*dx);
139 B(i,i-2*nny) = -alfa/(4*dx);
140 end;
141 %
142 % Estabelecendo vetor d
143 %
144 %for i = 10*ny:11*ny
145 % d(i) = 0.0001;
146 %end;
147 d(ntn-nau3) = 0.0001;
148 d(ntn-nau3-nny) = 0.0001;
149 d(ntn-nau3-2*nny) = 0.0001;
150 d(nau4) = 0.0002;
151 d(nau4+nny) = 0.0002;
152 d(nau3) = 0.0005;
153 d(nau3+nny) = 0.0005;
154 d(nau3+2*nny) = 0.0005;
155 d(nau1+1) = 0.0003;
156 d(nau1+nny+1) = 0.0003;
157 d(nau2+1) = 0.0003;
158 d(nau2+nny+1) = 0.0003;
159 %
160 % Fatoracao L U da matriz de rigidez
161 %
162 [ll uu] = lu(A);
163 %
164 % fazendo a matriz malha para o grid
165 %
166 k=0;
167 for i=1:nx;
168 for j=1:ny;
169 k=k+1;
170 ind = (i-1)*nny + j;
171 malha(k,1)=ind;
172 malha(k,2)=ind+nny;
173 malha(k,3)=ind+1;
174 k=k+1;
175 malha(k,1)=ind+nny+1;
176 malha(k,2)=ind+1;
177 malha(k,3)=ind+nny;
178 end;
179 end;
180 %
181 % montagem da malha de coordenadas dos nos
182 %
183 k=0;
184 for i=1:nnx
185 x = (i-1)*dx;
186 for j = 1:nny
187 y = (j-1)*dy;
188 k = k + 1;
189 coord(k,1) = x;
190 coord(k,2) = y;
191 end;
192 end;
193 %
194 % estruturando o vetor solucao para o grafico
195 fig=figure;
196 mov = avifile('animacao6.avi')
197 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
198 F = getframe(gca);
199 mov = addframe(mov,F);
200 %
201 % resolução dos sucessivos sistemas.
202 %
203 nsp1 = 2*nny+ny/2; % Nó próximo a fronteira Gama 0
204 nsp2 = (nx/2)*(ny/2); % Nó ao centro do domínio.
205 nsp3 = (ntn-1)/2; % Nó próximo a fronteira Gama 3 - na parte central do
domínio
206 nsp4 = ntn-ny/2-1; % Nó sobre a fronteira Gama 2
207 %
208 % resolução dos sucessivos sistemas.
209 %
210 for it = 1:nt
211 nosep1(it) = u0(nsp1);
212 nosep2(it) = u0(nsp2);
213 nosep3(it) = u0(nsp3);
214 nosep4(it) = u0(nsp4);
215 t(it) = (it-1)*dt;
216 ys = ll\(B*u0+d);
217 s = uu\ys;
218 if mod(it,2)==1
219 trisurf(malha,coord(:,1),coord(:,2),u0),title('Cenario
6'),xlabel('\Gamma_1'),ylabel('\Gamma_0'),view(0,90),colorbar,shading interp;
220 F = getframe(gca);
221 mov = addframe(mov,F);
222 end;
223 u0=s;
224 end;
225 t(it+1) = (it)*dt;
226 nosep1(it+1) = u0(nsp1);
227 nosep2(it+1) = u0(nsp2);
228 nosep3(it+1) = u0(nsp3);
229 nosep4(it+1) = u0(nsp4);
230 mov = close(mov);
231 subplot(2,2,1)
232 plot(t,nosep1),grid on,title('Nó prox. \Gamma_0'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');
233 subplot(2,2,2)
234 plot(t,nosep2),grid on,title('Nó ao centro de \Omega'), xlabel('tempo (horas)'),
ylabel('concentração(ppm)');;
235 subplot(2,2,3)
236 plot(t,nosep3),grid on,title('Nó ao centro de \Gamma_3'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
237 subplot(2,2,4)
238 plot(t,nosep4),grid on,title('Nó sobre \Gamma_2'), xlabel('tempo(horas)'),
ylabel('concentração(ppm)');;
239 etime(clock,t0);