CHAPTER II : Death in the Viking Age
2.3. Death realms: life after death in a world beyond the grave
2.3.3. Valhalla – the warriors’ death realm
Como indiquei anteriormente, a escolha do Matlab para primeira implementação do programa deveu-se à facilidade de utilização desta plataforma e à possibilidade de estruturar convenientemente os modelos utilizados.
Assim, o que fiz foi traduzir a planificação dos modelos descritos nos capítulos 3 –
Modelação da temperatura da água e 5 – Modelação do crescimento da dourada para a
linguagem de programação utilizada pelo Matlab. Esta linguagem tem muitas semelhanças com a linguagem C.
O Matlab também possibilitou a comparação de vários métodos de discretização. O modelo do crescimento de um indivíduo adoptado está referido na bibliografia como uma função contínua (Libralato, 1998). Para simular o crescimento de um indivíduo a partir desse modelo é necessário discretizar a função de maneira a poder correr um programa que calcule, passo a passo, o seu peso. Para se proceder à discretização de uma função contínua podem-se utilizar diversos métodos. Para escolher o que melhor se adapta à situação em estudo, é preciso implementá-los e comparar os seus resultados. Os métodos que testei para a discretização da função de crescimento de um indivíduo da espécie Sparus aurata foram o Método de Euler, o Método de Runge-Kutta de Ordem 4 e uma rotina interna do Matlab ode45. Os dois primeiros métodos foram comparados de maneira a encontrar o mais indicado para ser utilizado no programa em C++. Esta comparação encontra-se discrita na secção 8.1.
De seguida irei descrever as rotinas implementadas. É possível estabelecer um paralelismo claro entre estas rotinas e a estrutura dos modelos apresentados anteriormente. Tal como indiquei anteriormente a apresentação dos algoritmos foi executada de maneira a facilitar a transcrição destes para uma linguagem de programação. Depois apresentarei um pequeno esquema do programa. Este esquema deverá facilitar a compreensão das relações entre as rotinas apresentadas.
criaDados.m – Rotina que cria dados de input aleatórios. Utilizada somente para testar o
programa, executando assim, um estudo inicial do modelo e possibilitando a comparação dos métodos de discretização da função crescimento (Método de Euler, Método de Runge-Kutta de Ordem 4 e a rotina interna do Matlab ode45.m).
modelo.m – Rotina cuja função é juntar os dois modelos em estudo (modelo da temperatura da
água e modelo de crescimento das douradas). Executa ainda a comparação dos três métodos de discretização referidos no intervalo de tempo considerado.
temperatura.m – Rotina que programa o modelo da temperatura da água e que conjuga todos
os seus módulos.
phiSN.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por penetração da radiação solar de ondas-curtas.
phiAt.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por radiação atmosférica.
phiWS.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por radiação da superfície da água.
phiE.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por evaporação.
phiC.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por convecção.
phiSNZ.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por penetração da radiação solar de ondas-curtas nas camadas profundas.
phiDZ.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor por difusão efectiva entre volumes.
phiSed.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor entre os sedimentos e o fundo.
phiGW.m – Rotina que programa a componente do modelo da temperatura da água da
transferência de calor dos sedimentos para os lençóis de água.
temperatura_media.m – Rotina que cria um conjunto de dados de temperatura da água diários
crescimento.m – Rotina que programa o modelo de temperatura do crescimento. É aqui que se
dá a discretização da função de crescimento. Esta rotina é que faz a chamada para a função de crescimento em si.
crescimento_funcao.m – Rotina que descreve a função de crescimento das douradas simplificada segundo Libralato (1998).
weight_function.m – Rotina que descreve a função de crescimento das douradas. Esta função
foi criada a partir da crescimento_funcao.m e permite a comparação dos diversos métodos de discretização de funções utilizados.
temperature_function.m – Rotina que utiliza a função interna do Matlab spline.m para criar
uma distribuição de pontos contínua a partir de um conjunto de pontos. Foi necessário criar esta rotina para se puder utilizar o método ode45 do Matlab.
Estas rotinas vão ser então integradas no programa geral do seguinte modo:
modelo.m
temperatura.m
crescimento.m
weigth_function.m
Fig. 7.1 – Representação das rotinas do Matlab criadas temperatura.m temperatura_media.m crescimento.m weight_function.m temperature_function.m phiSN.m phiAt.m phiWS.m phiE.m phiC.m phiSNZ.m phiDZ.m phiSed.m phiGW.m crescimento_funçao.m
Uma típica execução do programa vai então realizar os seguintes passos: simular a variação da temperatura da água num determinado intervalo de tempo numa base horária (temperatura.m); calcular a temperatura da água diária a partir da temperatura horária (temperatura_media.m); simular o crescimento de um indivíduo com base na temperatura diária da água calculada (crescimento.m); e comparar os três métodos de discretização considerados (segunda parte do modelo.m).
Os resultados do programa são apresentados a partir de três figuras. A primeira mostra graficamente a temperatura da água nos quatro estratos considerados. A segunda indica a variação do peso de um indivíduo da espécie Sparus aurata ao longo de um intervalo de tempo, calculada pelo método de Runge-Kutta de Ordem 4. A terceira figura apresenta quatro gráficos, o primeiro com a variação da temperatura média diária da água no estrato “meio” e os outros três com a variação do peso de um indivíduo calculado pelos métodos de Euler, de Runge-Kutta e pela rotina interna ode45.
Fig. 7.3 – Resultados do programa implementado em Matlab (Figura 2).