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.