Programa
A disciplina GA-033 — Método de Elementos Finitos: Implementação Computacional integra o Programa de Pós-Graduação em Modelagem Computacional do Laboratório Nacional de Computação Científica (LNCC). A carga horária é de 36 horas.
Plano de ensino da turma atual (PDF).
#Ementa
Visão geral do Método de Elementos Finitos e do Método de Galerkin; representação e estrutura de dados de malhas; tipos de elementos, funções de base e elementos de referência; quadratura numérica; montagem dos sistemas algébricos resultantes, mapeamento local-global e aplicação de condições de contorno; solução de sistemas lineares por métodos diretos e iterativos; verificação da implementação e avaliação de taxas de convergência; aplicações e pacotes computacionais para problemas de Poisson e advecção-difusão, com FEniCS, Firedrake e NGSolve.
#Objetivos de aprendizagem
O curso apresenta técnicas básicas de implementação de elementos finitos (FEM), partindo da formulação clássica do Método de Galerkin. Aborda práticas de desenvolvimento científico e os componentes necessários para implementar um pacote de FEM desde o início, além de introduzir ferramentas como Firedrake e FEniCS.
Ao final da disciplina, o discente deverá ser capaz de:
- Entender e utilizar práticas e técnicas de desenvolvimento científico para FEM.
- Compreender as diferentes etapas e componentes da implementação de um código de elementos finitos.
- Aplicar FEM à solução de problemas de equações diferenciais parciais.
#Conteúdo programático
#1. Revisão e introdução
- 1.1. Conceitos básicos do Método de Elementos Finitos.
- 1.2. Formas forte e fraca.
- 1.3. Discretização do domínio.
- 1.4. Espaços de aproximação.
- 1.5. Tripla de Ciarlet.
#2. Ambiente e fluxo de trabalho para implementação de software científico
- 2.1. Linguagem Python.
- 2.2. Introdução às bibliotecas científicas de Python.
- 2.3. Ambientes de desenvolvimento com Pixi.
- 2.4. Controle de versão com git e GitHub.
#3. Elementos finitos em 1D para problemas de Poisson
- 3.1. Forma forte e problema variacional (Galerkin conforme).
- 3.2. Discretização da reta e estrutura de dados de malhas.
- 3.3. Aproximações de primeira e segunda ordem.
- 3.4. Elementos de referência e funções de base.
- 3.5. Quadratura gaussiana.
- 3.6. Montagem do sistema algébrico (mapeamento local-global).
- 3.7. Aplicação de condições de contorno.
- 3.8. Solução do sistema resultante.
#4. Elementos finitos em 2D para problemas de Poisson
- 4.1. Forma forte e problema variacional (Galerkin conforme).
- 4.2. Discretização do domínio em elementos triangulares.
- 4.3. Discretização do domínio em elementos quadrilaterais.
- 4.4. Aproximação P1 e mapeamento de elementos triangulares globais para locais (de referência).
- 4.5. Aproximação Q1 e mapeamento de elementos quadrilaterais globais para locais (de referência).
- 4.6. Montagem do sistema resultante e condições de contorno.
- 4.7. Comentários sobre aproximações de alta ordem e serendipidade.
#5. Solucionadores
- 5.1. Métodos diretos e iterativos (Gradiente Conjugado e GMRES).
- 5.2. Pré-condicionadores (Jacobi/ILU).
#6. Verificação de código
- 6.1. Método das Soluções Manufaturadas.
- 6.2. Erros L2/H1 em função do tamanho da malha (taxa de convergência).
- 6.3. (Opcional) Erros L2 em função do grau de aproximação.
#7. Tópicos avançados (opcional)
- 7.1. Comentários sobre métodos mistos.
- 7.2. Comentários sobre problemas de campos vetoriais.
- 7.3. Comentários sobre problemas de advecção-difusão.
#8. Pacotes científicos de elementos finitos
- 8.1. Discretização: Gmsh, Netgen e meshio.
- 8.2. Firedrake.
- 8.3. FEniCS.
- 8.4. (Opcional) NGSolve.
#9. Projeto final
Trabalho expositivo individual com aplicação de um pacote de elementos finitos a um problema de interesse escolhido pelo discente. Consulte a descrição do projeto final e sua participação na avaliação.
#Metodologia de ensino e aprendizagem
O conteúdo é apresentado principalmente por slides, com uso de Jupyter Notebooks e demonstrações práticas de código. A disciplina incentiva atividades práticas, listas de exercícios manuais, trabalhos pontuais de implementação e um projeto final.
O fempack é o pacote didático em Python que acompanha a disciplina, dedicado à implementação de elementos finitos. Consulte o repositório no GitHub e o site de documentação para o código, exemplos e orientações de uso.
As aulas combinam encontros em sala e atividades práticas em laboratório de informática. A presença é contabilizada no início de cada aula. Datas, horários e locais da turma atual estão no cronograma.
A gestão e a comunicação da turma serão realizadas pelo Google Classroom. Os materiais serão disponibilizados pelo Google Classroom ou pelo GitHub, e os trabalhos pontuais serão realizados no GitHub. Os discentes devem criar uma conta no GitHub e informar seu nome de usuário ao professor.
Haverá atendimentos semanais, individuais ou em grupo, mediante agendamento por e-mail com antecedência mínima de 24 horas. Os atendimentos serão presenciais, com possibilidade de realização pelo Google Meet quando justificado. Nos atendimentos online, o uso de câmera e microfone é preferencial.
Consulte o cronograma das aulas e o sistema de avaliação.