Nesse artigo você vai aprender:
- Etapas necessárias para construir um modelo de qualidade da água para rios;
- Conservação de massa em ambientes aquáticos e sua relação com concentrações;
- Como definir processos e formulações para seu modelo de qualidade da água;
- Criar seu próprio modelo de qualidade da água em rios;
Para melhor aproveitar os conteúdos apresentados neste artigo é recomendado ler a publicação:
Porque é tão difícil criar um modelo de qualidade da água?
A criação de um modelo matemático que simule qualidade da água pode ser alcançada de diversas maneiras. Contudo, normalmente o processo criativo se limita a duas etapas principais e suas necessidades específicas de conhecimento:
- Análise do sistema: Elementos de qualidade da água, hidrodinâmica e tipos de escoamento, balanço de massa, ciência de materiais/processos de transformação de materiais, parâmetros de qualidade da água, ecologia aquática. Estes tópicos podem ser teóricos ou experimentais.
- Síntese matemática do sistema: Elementos de ciência da computação, algoritmos computacionais, linguagens de programação, métodos numéricos, matemática computacional.
Em resumo, é necessário entender não apenas o fenômeno que causa as transformações na qualidade da água, mas também como representar isto da melhor forma via técnicas de modelagem matemática. É exatamente esta necessidade de conhecimentos gerais e específicos que transformam a utilização e criação de modelos de qualidade da água em uma tarefa árdua.
A maioria das pessoas assume que este problema é grande demais, complexo demais, envolve tempo e dedicação demais, resultando em uma barreira quase instransponível que assusta e nos impede de construir nossos próprios modelos. Para muitos, criar/aprender a utilizar um modelo de qualidade da água é tão complexo que só quem faz mestrado ou doutorado consegue ter essa habilidade. Em outras palavras, acreditamos que nunca seremos capazes de obter esse conhecimento e ganhar esta habilidade.
Mas esta realidade pode ser diferente. A criação de um modelo de qualidade da água segue uma sequência de etapas bem consolidada e confiável:
- Definir o problema: Deve ser o mais claro e quantitativo possível. A definição de um output (um resultado final) claro torna as etapas posteriores bem mais simples e fáceis de obter. Esta definição pode auxiliar também na atualização de modelos já existentes para resolver novos problemas.
- Conhecer a teoria fundamental: Geralmente é chamada “revisão bibliográfica” durante a construção de teses. O objetivo é avaliar se já existe um esforço para construção de modelos similares, com foco nos parâmetros de qualidade da água representados, formulação de processos existentes, métodos de representação de processos e faixas de variação dos parâmetros do modelo. Se o modelo que se deseja construir já existe e resolve o problema que você quer resolver, se torna desnecessário construir um novo modelo só para criar uma nova ferramenta;
- Formular equações: Esta etapa envolve a decisão sobre o tipo de modelo (determinístico ou estocástico, permanente ou não-permanente, etc). A concepção do modelo resulta na necessidade de dados para sua utilização. Esta etapa é importante pois é nela que se define a complexidade que o modelo irá representar, e consequentemente, a que ele necessita para seu uso. Modelos com muitos parâmetros são capazes de representar processos complexos, mas seu uso se torna tão difícil que apenas poucos especialistas conseguem utilizá-lo com sucesso;
- Criar a estrutura do modelo: Esta etapa é onde o algoritmo principal da solução computacional do modelo é criada. Aqui é importante estabelecer o ordenamento de etapas, quais dados são necessários, quando estes dados devem estar disponível para as soluções, quais decisões e quando o usuário deve realizar estas decisões para usar o modelo. Quanto mais específicos formos nesta etapa, melhor para o uso do modelo posteriormente. Devemos entrar no detalhe de informar o tipo de dado, como ele deve ser disponibilizado, qual processo ele representa, como o modelo vai utilizá-lo e como ele influencia outros processos na geração dos resultados.
- Formular método para solução das equações: Nesta etapa o modelo demonstra seu valor para os usuários. Qual método será utilizado para representar os processos matematicamente é uma etapa importante e está diretamente ligada a etapa 2. Não adianta criarmos um modelo que já existe, as equações representadas devem trazer uma inovação. Pode ser um novo processo sendo representado ou uma nova forma de representar processos já existentes. Aqui é importante garantir uma base de dados experimental que valide os métodos escolhidos, para que o modelo seja representativo de fenômenos reais e não apenas uma equação matemática genérica.
- Formular métodos computacionais: Em algumas situações o conjunto de equações diferenciais que usamos nos nossos modelos podem ser resolvidas de forma analítica. Ou seja, temos uma solução única e direta para o problema. Esta não é a realidade para todos os processos e os modelos computacionais evoluíram para ter soluções numéricas que são utilizadas para interpolação, solução de matrizes, discretização de equações diferenciais ordinárias e parciais e etc. Definir o método numérica ideal é importante pois cada um tem particularidades que levam a instabilidades e imprecisões nos resultados, bem como na demanda por esforço computacional (se bem que este último está deixando de ser um problema com os computadores recentes).
- Produzir programa: Nesta etapa é importante avaliar o fluxo de entrada/saída de dados do modelo, o que indica possíveis linguagens de programação que sejam mais adaptadas para a solução correta. Existem programas que exigem muitas informações espaciais, o que nos leva a adotar linguagens com pacotes gráficos mais robustos. Existem programas que existem muitas soluções de matrizes, cálculos que demandam muito esforço computacional, o que nos leva a adotar linguagens com pacotes de soluções mais robustos. Além disso, algumas linguagens possuem capacidades gráficas de gerar interfaces, tornando a solução completa (front-end, back-end, processamento, etc). Outras necessitam integração entre as diversas etapas da interface em diferentes plataformas (cross-platform). A opção pela linguagem de programação correta faz toda a diferença para manutenção, atualização e distribuição dos códigos do programa para manter seu uso no longo prazo.
- Calibração e Validação do modelo: Para ser validado o modelo deve ser capaz de representar os processos que originaram sua construção descrevendo conjuntos de dados observados que investigam os processos desejados. Esta etapa demonstra a robustez do modelo para diferentes conjuntos de dados, resultando em confiabilidade no seu uso para diferentes situações.
- Análise de sensibilidade: Esta etapa envolve entender a sensibilidade dos resultados do modelo a alguns parâmetros específicos adotados na solução das equações propostas. Esta etapa facilita na compreensão dos resultados e simplifica o processo de calibração e validação do modelo. Além disso, demonstra suas limitações em representar processos específicos ou cenários específicos.
Se este não é o seu caso, e você quer se tornar um usuário de modelos previamente construídos, a utilização de interfaces gráficas e uso de modelos matemáticos também segue um padrão de etapas que podemos aprender e reproduzir:
Construindo um modelo de qualidade da água simples
Formulação do objetivo
O objetivo da construção do modelo será avaliar os impactos do lançamento de efluentes domésticos tratados de um município genérico sobre um rio genérico. Vamos assumir que os rios simulados não possuem enquadramento definido, mas que o lago existente a jusante possui enquadramento em Classe 1. A Figura abaixo apresenta a representação conceitual do problema:
Vamos concentrar nossos esforços em um parâmetro de qualidade da água que usualmente descreve poluição originada de lançamento de esgotos domésticos: Coliformes Fecais (E.Coli). A tabela abaixo apresenta as características dos trechos usados neste exemplo:
Trecho: | T1 | T2 | T3 | Efluente |
Vazão de referência Q90 (m3/s) | 0,50 | 0,10 | Qt1 + Qt2 | 0,02 |
Comprimento (m) | 500 | 100 | 50 | – |
Largura média (m) | 2,0 | 1,5 | 1,8 | – |
Profundidade média (m) | 1,0 | 0,5 | 1,3 | – |
E. Coli (NMP/100mL) | 1000,0 | 1000,0 | – | 10.000,0 |
Revisão de conhecimento
O primeiro passo para construir um modelo de qualidade da água é entender os processos relacionados com a variável sendo simulada. Nesta etapa geralmente é construído um diagrama na forma de ciclo, que facilita a compreensão dos diversos processos envolvidos durante a permanência do elemento sendo simulado no meio aquático. Para patógenos, um exemplo de ciclo é dado abaixo.
Em resumo, alguns processos são identificados:
- Decaimento devido a mistura/renovação de águas com diferentes composições;
- Advecção devido ao movimento no ambiente aquático;
- Dispersão devido a turbulência;
- Mortalidade natural;
- Mortalidade devido a presença de radiação UV;
- Decaimento devido a decantação;
- Efeito da temperatura nos processos identificados;
A decisão de representar todos os processos deve ser baseada em dados. Quando há informações sobre estes processos, os mesmos são bons candidatos a serem representados pelo modelo. Quando as informações são escassas, incluir o processo no modelo pode dar a impressão de robustez, mas não agrega valor ao resultado final. Sem dados, representar um processo se torna genérico e um exercício de modelagem, não uma aplicação de modelagem matemática de fato.
Para seguir com nosso exemplo vamos simplificar o modelo com apenas alguns processos: Mistura de águas e Mortalidade devido a radiação UV. Vamos considerar um cenário em regime permanente, ou seja, não há variações nas condições de escoamento e meteorologia ao longo do tempo de simulação.
Formulação dos processos
Uma vez identificado, é necessário representar o processo matematicamente para que o modelo possa representar seu impacto ao longo da simulação. Os dois processos escolhidos são representados da seguinte maneira:
Mistura
A mistura entre dois lançamentos é construída com base em equações de conservação da massa. O balanço de massa para essa situação é dado por:
Que matematicamente é representado como:
Onde: C3 é a concentração após a mistura; Q1 é a vazão do lançamento; C1 é a concentração de patógeno no lançamento; Q2 é a vazão do rio; e C2 é a concentração escoada no rio. A vazão escoada após a mistura é dada pela equação da continuidade, representada no denominador da equação: Q3 = Q1 + Q2.
Mortalidade devido a Radiação UV
A mortalidade de patógenos devido a radiação UV é dada com base em equações empíricas. Estas equações podem ter diversas formas, mas são usualmente representadas como reações de primeira ordem:
Que matematicamente é representado como:
Onde: C4 é a concentração após a mortalidade; K é o coeficiente de mortalidade; e T é o tempo de detenção, ou seja, o tempo que uma partícula de água fica no ambiente sendo simulado (função das características do escoamento).
Tempo de detenção
O tempo de detenção é função das características de escoamento no rio. Geralmente ele é representado por alguma função que depende da vazão de escoamento, seção transversal de escoamento, declividade do trecho, comprimento do trecho e etc. A relação pode ser gerada estatisticamente a partir de dados observados e tem a seguinte forma:
Que matematicamente é representado como:
Onde: T é o tempo de detenção; a, b e c são parâmetros que representam a relação entre tempo de detenção e vazão, conforme a figura abaixo.
Criação da estrutura do modelo
A estrutura do modelo é construída com base em um algoritmo simples. Para o caso apresentado, a estrutura mostrada na figura abaixo representa um algoritmo de solução numérica que pode ser utilizado para construir o modelo. Aqui, os seguintes aspectos são importantes:
- Entrada/saída de dados: A formatação de dados, leitura, escrita e visualização é uma etapa relevante que muitas vezes toma mais tempo que o necessário. Por décadas linguagens de programação robustas matematicamente possuíam visualizações pobres. Atualmente, linguagens de programação possuem bibliotecas que permitem soluções matemáticas robustas e com pouco esforço computacional E a visualização de dados de entrada e saída de forma organizada e intuitiva. De forma prática, a forma mais simples de entrar e sair dados é por meio de arquivos ASCII (arquivos de texto estruturados), como um .csv ou .txt.
- Estrutura de blocos: Cada elemento do modelo pode ser estruturado de forma a se tornar independente, permitindo que outros códigos aproveitem sua estrutura. Esta forma de pensar e organizar os modelos permite que uma mesma rotina (por exemplo, interpolação temporal de dados) seja utilizada por vários modelos ou chamada diversas vezes dentro do mesmo código. Aqui é importante organizar também o uso de memória do computador, uma vez que cada chamada a rotina irá alocar variáveis na memória do computador e pode sobrecarregar o hardware onde o modelo está localizado;
- Solução numérica: Soluções de equações diferenciais em computadores carregam consigo limitações e incertezas, que geram instabilidades. Conhecer estas instabilidades é um diferencial pois permite ao modelo retornar para o usuário porque os resultados podem não estar dentro do esperado. Estruturar onde estas mensagens (ou flags) serão expostas é uma etapa importante na solução numérica e permite que todos os usuários compreendam e solucionem seus problemas ao utilizar o modelo de forma eficaz.
No algoritmo abaixo, observe que as etapas 01 e 02 são etapas iniciais de leitura e escrita de dados. As etapas 03 – 06 formam o que chamamos de Loop, ou seja, um trecho de código onde o modelo vai repetir uma ação até atingir uma certa condição pré-definida. As etapas 02 e 05 são escritas de dados, com o mesmo contexto. Ao observar em seu algoritmo que etapas similares estão presentes em diferentes partes do código, elas se tornam candidatas a se tornarem uma rotina a ser construída para manter o código de forma estruturada.
Observe que esta etapa trouxe novas condições não apresentadas na etapa anterior (formulação dos processos), como a definição de um trecho espacial e a definição de uma concentração final. Estas características são requisitadas quando construímos modelos e conhecidas como critérios de parada, para que o computador entenda quando deve encerrar os cálculos.
Loops mal construídos e condições de parada mal elaboradas levam códigos a ficarem perdidos dentro do loop, sem gerar resultados ou evoluir dentro da solução numérica.
Nesse algoritmo, a solução da concentração C4 é onde a solução numérica pode ter instabilidades. Para esta aplicação simples, esse detalhe não vem ao caso.
Formulação do método de solução
Uma vez que determinamos nosso algoritmo, agora é feito o trabalho de encontrar o melhor método numérica para solução das nossas equações. Este exemplo traz uma equação simples, com uma exponencial facilmente resolvida. Soluções mais complexas, que envolvam variações no tempo e espaço, por exemplo, podem levar a métodos numéricos robustos, sendo necessário uma avaliação e estudo dos melhores métodos antes de escolher e programar um.
A própria programação de um método pode conter erros, devido a experiência do programador. Então esta etapa deve sempre ser validada contra resultados já consagrados, conhecidos como benchmark. Geralmente os idealizadores dos métodos numéricos comprovam suas criações em aplicações de fácil reprodução (na verdade, é um critério para publicação de um novo método numérico).
Retornando ao nosso algoritmo, vejam que na etapa 03 temos três cálculos: Xf, C3 e T.
Xf é a posição espacial final, após a simulação do trecho. Foi uma opção minha criar uma segmentação espacial na simulação, pois acredito ser melhor de visualizar resultados assim. Desta forma, o cálculo de Xf é dado por uma equação simples:
No início da simulação, Xf é igual a 0, pois não percorremos nenhum espaçamento no rio ainda. Este dado é recebido na rotina de entrada de dados, etapa 01 do nosso algoritmo.
C3 é a concentração após mistura entre diferentes fluxos. Ele foi definido matematicamente anteriormente e computacionalmente definimos ele como:
Observe que o valor de C3 considera a mistura entre diferentes entradas apenas uma vez na nossa solução numérica. Isto resulta na necessidade de simular trechos isolados entre confluências ou lançamentos. Poderíamos fazer um código mais robusto, que considerasse automaticamente diferentes trechos e lançamentos ao longo da simulação, mas vamos deixar isto para o futuro.
Para qualificar o resultado, vamos adicionar também uma nova variável chamada Ttotal, que vai somando todos os tempos de detenção ao longo da simulação. Esta variável irá aparecer no próximo item, quando elaboramos o modelo. No início da simulação, Ttotal é igual a 0, pois não percorremos nenhum tempo de simulação ainda. Este dado é recebido na rotina de entrada de dados, etapa 01 do nosso algoritmo.
T é o tempo de detenção no trecho simulado. É uma função das condições de escoamento e características do leito do rio. Sua determinação é dada como:
Observe que adicionamos uma nova variável a equação, a velocidade do escoamento. Seu cálculo é feito de forma simplificada a partir da equação da continuidade, que considera a vazão escoada no rio a área da seção transversal do rio (idealizado como um canal retangular).
Finalmente, a concentração final após o decaimento no trecho, C4, é calculada de forma direta conforme equação apresentada anteriormente:
Produção do programa de computador
A produção do programa de computador passa por imaginar o seu uso no futuro. O ideal é conseguir visualizar como o usuário final vai executar o seu código, como ele vai imputar dados, como ele vai extrair dados e onde estes dados ficam armazenados e são disponibilizados.
Aqui a coisa começa a ficar mais complexa… tipicamente programadores científicos, aqueles que criam códigos apenas para resolver um problema que apareceu ao longo da sua pesquisa de mestrado ou doutorado, adotam uma única linguagem de programação e desenvolvem o código fonte que atenda suas necessidades. Uma vez que não há preocupação com uso, desempenho ou outras coisas do tipo, esses programadores focam em criar um programa que resolva seu problema e funcione da forma como ele precisa, sem flexibilidade ou refinamento.
Produzir um programa de computador vai além disto, pois ele deve ter como objetivo a experiência do usuário final. Existem inúmeros modelos de qualidade da água disponíveis no mercado e pelo menos o dobro disponível em repositórios do github espalhados pelo mundo. Muitos deles focam apenas em resolver o problema técnico/científico que origina seu desenvolvimento, tornando quase impossível a compreensão e utilização dos códigos por terceiros. Se você nunca passou por isto, basta tentar customizar um programa pronto para sua aplicação específica… é comum que “limitações do modelo” impeçam que resultados específicos sejam obtidos.
Num cenário ideal, cada etapa do programa terá sua própria elaboração, com a melhor linguagem que garanta sua performance e conectado por APIs que façam a troca de dados entre diferentes partes do programa de forma rápida e confiável. Aplicando este conceito para o nosso caso, podemos usar, por exemplo:
- SQL para manipulação de bancos de dados espaciais ou tabulares, contendo informações relevantes sobre corpos hídricos, monitoramento de qualidade da água, relevo e outras características hidrológicas/hidráulicas dos rios simulados. Montar um banco de dados é difícil e pode demorar, mas é sempre uma boa opção para ferramentas de modelagem matemática.
- Python para leitura e escrita de dados, criando interfaces rápidas que possibilitam a padronização da entrada de dados utilizada pelo modelo.
- Fortran para soluções numéricas complexas, como as matrizes e equações resultantes da discretização numérica das equações diferenciais parciais que tradicionalmente são o coração de modelos hidrodinâmicos e de qualidade da água.
A complexidade na construção do código e no conhecimento necessário aumenta, mas também aumenta sua estabilidade e facilidade de usos por outras pessoas. Para acessar o código desenvolvido neste artigo, desenvolvido em linguagem Python, acesse: StreamWaterQuality
Calibração do modelo
O programa que desenvolvemos aqui possui diversos parâmetros necessários para sua aplicação. Os parâmetros referentes ao efluente lançado e ao corpo hídrico (vazões e concentrações) podem ser obtidos por análise de campo, projetos de engenharia ou estudos hidrológicos. Da mesma forma, as características do escoamento (declividade, largura, profundidade e etc) também são obtidas de forma direta, por meio de inspeções locais. Nesta aplicação que apresentamos, há apenas um parâmetro a ser calibrado no modelo, referente a taxa de mortalidade dos coliformes na água devido a radiação UV. Este foi o único processo que descrevemos no modelo, explorado na etapa 3.
Num cenário ideal, a calibração/validação do modelo é feita com dados obtidos em campo, por meio de campanhas de monitoramento que permitam confrontar os resultados do modelo contra dados reais. Isto pode ser realizado por meio de campanhas de monitoramento de qualidade da frequentes, caracterizando diferentes situações de vazão no corpo hídrico por exemplo, ou por experimentos específicos executados em ambiente controlado. Independente da forma como os dados são obtidos, a calibração e validação do modelo é uma etapa importante que garante a representatividade do modelo nas condições de escoamento monitoradas.
Análise de sensibilidade
Quando um novo modelo de qualidade da água é desenvolvido, a etapa de análise de sensibilidade apresenta a importância dos diferentes parâmetros utilizados no resultado. Geralmente é conduzida com uma análise estocástica como a de Monte-Carlo, onde diversos conjuntos de parâmetros são considerados e uma faixa de confiança (ou incerteza) é determinada. Desta forma, a influência relativa de um parâmetro ou de um conjunto de parâmetros é conhecida e gerenciada tornando os resultados do modelo mais confiáveis.
Limitações e incertezas
Representar processos reais via técnicas de computação sempre resultam em cenários próximos, mas ligeiramente diferentes dos reais. Modelos matemáticos possuem a habilidade de aproximar a realidade e, muitas vezes, conseguem fazer isto de forma confiável. Isto não elimina possíveis limitações na construção do modelo, como a simplificação de processos ou mesmo a negligência de algumas características do ambiente aquático que podem ser importantes em algumas aplicações. Quando estas limitações são conhecidas e aceitáveis, ainda nos resta a incerteza existente nos dados que damos para o modelo realizar as simulações.
Modelos matemáticos trabalham como caixas-pretas, onde um dado de entrada (ou um conjunto de dados de entrada) é convertido em uma saída (ou um conjunto de saídas). O modelo em si não analisa ou processa estes dados para verificar suas tendências, viés, ou consistência frente a realidade regional e local, sendo esta responsabilidade do usuário que aplica os modelos. A máxima trash in = trash out (o lixo que entra é igual ao lixo que sai, em tradução interpretada) é conhecida e considerada na hora de avaliar e aplicar modelos matemáticos para quaisquer tipos de resultados desejados, não apenas para aplicações no campo da simulação de qualidade da água.
Encerrando…
A produção de modelos matemáticos não é um trabalho de outro mundo. Compreendendo limitações e fazendo as idealizações certas, qualquer pessoa pode desenvolver seu próprio modelo. Apesar de simples e rápido, é necessário avaliar se o esforço para criar algo novo vale a pena, uma vez que existem inúmeros modelos matemáticos disponíveis para uso e muitos deles com interfaces amigáveis que permite que os resultado sejam obtidos de forma simples e rápida.
Conheça nossas postagens!
Conheça nosso blog ou navegue pelas postagens.
Como me adaptar as mudanças climáticas?
É possível se adaptar e mitigar prejuízos decorrentes de mudanças climáticas com o planejamento correto.
O controle de cheias no rio Taquari pode ser feito por barragens?
O controle de inundações em bacias hidrográficas pode ser feito com barragens de controle de nível. Contudo, nem sempre esta é a melhor solução.
Estamos errados ao estimar um CN?
Estimar um CN único pode levar a incertezas na geração de vazões máximas, prejudicando a elaboração de alternativas viáveis de segurança hídrica.
Porque é tão difícil prever o futuro em hidrologia?
O risco hidrológico está em constante alteração e estimar riscos hidrológicos futuros depende de muitos aspectos de difícil gerenciamento.
Participação Social: Porque nossos sistemas de alerta falham?
Sistemas de alertas que falham ao concretizar riscos causam a perda de confiança da população. Alertas posteriores podem não ser respeitados causando prejuízos.
Modelos matemáticos: O que são, onde vivem, o que comem?
Resumo sobre uso de modelos matemáticos em recursos hídricos.