Trabalho Computacional Transferência de Energia e Massa Dúvidas: [email protected] Ext:3430 Página: https://fenix.ist.utl.pt/homepage/ist146730 Guillaume Riflet, Metodologia de resolução Ler o enunciado do problema Conceber uma solução computacional Partir o problema e a solução em problemas mais pequenos (fazer um diagrama) Resolver as peças do problema, uma de cada vez Diagrama por blocos genérico dum problema computacional Input Processing / Factory/ Engine Output 1. Identificar o processamento / escrever o(s) algoritmo(s) 2. Identificar as variáveis necessárias para o processamento 3. Pensar na inicialização das variáveis e na selecção dos algoritmos 4. Pensar no input fornecido pelo utilizador para a resolução do problema e pensar na interface com o utilizador 5. Pensar no output da solução, na sua apresentação (tabelas e gráficos) Diagrama por blocos genérico dum problema computacional Input Single or continuous input? Processing / Factory/ Engine Single or continuous output? Output • • • Variables initialization 2 Algorithm selection User given input / User-Interface (UI) • • Processing variables Algorithms 1 • Product(s) • Tables • Graphics 3 Identificação dos Algoritmos Processing / Factory/ Engine • • Processing variables Algorithms Ci 1 2Ci Ci 1 Cit t Cit kCij 2 t x t t i C 1 enunciado t t t t t t 2 Ci 1 1 2 2 kt Ci 2 Ci 1 x x x t t t t t t t t t t 2 Ci 1 1 2 2 Ci 2 Ci 1 1 kt Ci x x x explicito implicito Algoritmos e Variáveis - esquema numérico explícito no tempo t Processing / Factory/ Engine i = 2, ..., N-1 i = 1 Boundary i = N Boundary explicito Dif x 2 Sk kt t t t t t t C 2 Ci 1 1 2 2 kt Ci 2 Ci 1 x x x t t t t t t t t C1 2 C2 1 2 2 kt C1 2 C L x x x t t t t t t t t C N 2 CU 1 2 2 kt C N 2 C N 1 x x x t t i Algoritmos - esquema numérico implícito no tempo Processing / Factory/ Engine implícito t t t t t t t t t t 2 Ci 1 1 2 2 Ci 2 Ci 1 1 kt Ci x x x Ti A i = 2, ..., N-1 B i = 1 Boundary i = N Boundary C t t t t t t t t t 2 C2 1 2 2 C1 1 kt C1 2 C L x x x t t t t t t t t t 1 2 C C 1 k t C 2 CU N 2 N 2 N 1 x x x Sistema matricial (n equações a n incógnitas) e tridiagonal. Resolução por eliminação de Gauss ou algoritmo semelhante. Neste caso usa-se o eficiente algoritmo de Thomas. Call Thomas(A,B,C,Ti) Algoritmos – ciclos no código Processing / Factory/ Engine For l = 1 to T ... For i = 1 to N ... Next ... Next Ciclo no tempo Ciclo no espaço Variáveis de processamento Processing / Factory/ Engine Os valores em algumas variáveis têm que ser deduzidos a partir dos dados de entrada do utilizador e do enunciado • N – tamanho do array da barra ou do canal • i – índice de célula do canal indo de 1 até N • Ctdt(1 to N) - array da Concentração ou Temperatura em t + dt • Ct(1 to N) – array Concentração ou Temperatura em t • t – índice de tempo indo de 1 até L • T – número total de iterações no tempo • Dif – coeficiente de difusão • Sk – coeficiente de decaimento • A(1 to N), B(1 to N), C(1 to N) e Ti(1 to N) – arrays de entrada do algoritmo de Thomas. Resultado escrito em Ti. • CL e CU – Concentração nas fronteiras abertas do canal. Exercício I Processing / Factory/ Engine Recorrendo às variáveis acima definidas, implemente um programa em VBA que resolva o método explícito da equação da difusão duma propriedade num fluido numa barra unidimensional utilizando arrays. Inicialize todas as variáveis no código. Resolva até à aula seguinte. TPC – Tente alterar o codigo em i = 1 e em i = N de forma a selar as fronteiras. Se não conseguir, simplesmente mude o valor nas condições de fronteira, corra o programa e comente os resultados. Exercício I – Solução tpc TPC – Tente alterar o codigo em i = 1 e em i = N de forma a selar as fronteiras. Se não conseguir, simplesmente mude o valor nas condições de fronteira, corra o programa e comente os resultados. A melhor forma de selar a fronteira aberta ao transporte de propriedades da água é de eliminar o termo de fluxo difusivo da equação na face com a fronteira aberta. Em particular, apenas para a equação da difusão, também se pode impôr um gradiente nulo na fronteira aberta: CL = C(1) e CU = C(N). Essa é outra forma de preservar a massa dentro do domínio. A forma adequada de verificação que a massa é preservada consiste em anular o termo de decaimento e em integrar a massa total da propriedade no canal. A integração tem que se manter constante ao longo do tempo. Exercício II Processing / Factory/ Engine Output Agora resolva utilizando o método implícito. Use a subrotina fornecida com o algoritmo de Thomas. Adicionalmente, implemente um método de cálculo da massa da propriedade no canal e faça outputs temporários para uma tabela de excel. TPC – Outputs para tabela e fazer graficos (manualmente) para comparar o metodo explicito com o metodo implicito. Identificação dos Algoritmos de Advecção Processing / Factory/ Engine • • Processing variables Algorithms Cit t Cit UC i 1/ 2 UC i 1/ 2 t x 1 enunciado U i 1/ 2 t t U i 1/ 2 t t t Upwind U>0, Exp C Ci 1 1 Ci 0Ci 1 x x U t U t U t U t Cit t i 1/ 2 Cit1 1 i 1/ 2 i 1/ 2 Cit i 1/ 2 Cit1 2x 2x 2x 2x t t i Faces centradas, Exp Identificação dos Algoritmos de Advecção Processing / Factory/ Engine Ut Cr ,U 0 x Cit t Cit UC i 1/ 2 UC i 1/ 2 t x enunciado U i 1/ 2 t t t U i 1/ 2 t t t t t t Ci 1 1 Ci 0Ci 1 Ci Upwind U>0, Imp x x U i 1/ 2 t t t U i 1/ 2 t U i 1/ 2 t t t U i 1/ 2 t t t t Ci 1 1 Ci Ci 1 Ci 2x 2x 2x 2x Faces centradas, Imp Refactoring dos Algoritmos de Advecção e de Difusão Processing / Factory/ Engine Ut Cr ,U 0 x Cit t Cit UC i 1/ 2 UC i 1/ 2 t x enunciado U i 1/ 2 t t t U i 1/ 2 t t t t t t Ci 1 1 Ci 0Ci 1 Ci Upwind U>0, Imp x x U i 1/ 2 t t t U i 1/ 2 t U i 1/ 2 t t t U i 1/ 2 t t t t Ci 1 1 Ci Ci 1 Ci 2x 2x 2x 2x Faces centradas, Imp Novas variáveis de processamento para advecção Processing / Factory/ Engine Os valores em algumas variáveis têm que ser deduzidos a partir dos dados de entrada do utilizador e do enunciado • Cr – Número de Courant Exercício III Processing / Factory/ Engine Adicione ao exercício anterior uma advecção com o método Upwind para U constante no canal e positivo. E se U for negativo? Qual o comportamento do método? Exercício IIIb Processing / Factory/ Engine Repense o esquema Upwind para que U possa ser positivo e negativo. Se não conseguir, resolva dois esquemas, um para U positivo e outro para U negativo, e utilize um “if”. Diagrama por blocos genérico dum problema computacional Input Processing / Factory/ Engine Output 1. Identificar o processamento / escrever o(s) algoritmo(s) 2. Identificar as variáveis necessárias para o processamento 3. Pensar na inicialização das variáveis e na selecção dos algoritmos 4. Pensar no input fornecido pelo utilizador para a resolução do problema e pensar na interface com o utilizador 5. Pensar no output da solução, na sua apresentação (tabelas e gráficos) Diagrama por blocos genérico dum problema computacional Input Single or continuous input? Processing / Factory/ Engine Single or continuous output? Output • • • Variables initialization 2 Algorithm selection User given input / User-Interface (UI) • • Processing variables Algorithms 1 • Product(s) • Tables • Graphics 3 Input – interface com o utilizador. Variáveis Input Pensar em dar um feedback ao utilizador indicando se as parametrizações seleccionadas são consistentes (ex: Cr e Dif não violam critérios de estabilidade) • • • • • • • • • • • • • • L - Comprimento do canal (m) Dx - Resolução espacial (m) Tp - Tempo de corrida da simulação (s) Dt - Resolução temporal (s) PI - Posição inicial do traçador (m) CI - Concentração inicial do traçador (kg/m^3) K - Coeficiente de difusividade do traçador (m^2/s) CL, CU - Valor imposto nas fronteiras a montante e a jusante do escoamento. U - Velocidade média uniforme do escoamento (m/s) isDir - Tipo de condição de fronteira (Dirichelet/Neumann) isOpen - Tipo de fronteira (aberta/fechada) isExp - Tipo de discretização temporal (explícito/implícito) isUp - Tipo de discretização para advecção (upwind/diferenças centrais) Noutputs - Frequência de escrita dos resultados OU número total de instantes a escrever na tabela de excel Input – interface com o utilizador. Subrotinas e Userforms 1. Input - Tipo que engloba as variáveis de entrada Input fornecidas pelo utilizador. 2. ReadInput - Subrotina que lê os dados fornecidos pelo utilizador e que os guarda numa variável do tipo de entrada. Pode ser programado usando uma userform, mas também pode ser programado lendo directamente valores duma tabela de excel. Pensar em dar um feedback 3. InterfaceInPr - Subrotina de interface que recebe um tipo ao utilizador indicando se as de entrada e um tipo de propriedade como argumentos. A parametrizações subrotina deve inicializar os campos do tipo propriedade seleccionadas são a partir dos campos do tipo entrada. consistentes (ex: Cr e Dif não violam critérios de estabilidade) Output – Resultados. 1. writeOutput - Subrotina que escreve a concentração do traçador no canal numa tabela. (disponível na página do projecto de tem-vba). 2. Plot - Subrotina que desenha uma curva da concentração em função da posição no canal para cada instante escrito na tabela de excel. (disponível na página do projecto de tem-vba). 3. Clear - Subrotina que apaga a tabela de excel e todos os gráficos de excel. (disponível na página do projecto de tem-vba). Output