Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

fempack.bcs

LNCC - Laboratório Nacional de Computação Científica

Imposição de condições de contorno de Dirichlet.

Funções

apply_dirichlet(A, b, V, nodes=None, g=None)

Aplica condições de contorno de Dirichlet por modificação de linhas/colunas.

Parâmetros:

Retorna: (A_bc, b_bc) - Matriz e lado direito modificados com condições de Dirichlet impostas fortemente

Método de Imposição

A implementação segue a abordagem padrão:

  1. Ajustar lado direito para condições não-homogêneas: bbA[:,nodes]gvecb \leftarrow b - A[:, \text{nodes}] \cdot g_{\text{vec}}

  2. Zerar linhas e colunas correspondentes e definir entradas diagonais unitárias para nós de Dirichlet

  3. Definir b[i]=gib[i] = g_i para cada nó de Dirichlet

Exemplo

from fempack.mesh import Mesh
from fempack.spaces import FunctionSpace
from fempack.assemble import assemble_stiffness, assemble_load
from fempack.bcs import apply_dirichlet
import numpy as np

# Configurar problema
mesh = Mesh.unit_interval(10)
V = FunctionSpace(mesh)
A = assemble_stiffness(V)
f = lambda x: np.pi**2 * np.sin(np.pi * x)
b = assemble_load(V, f)

# Aplicar u = 0 na fronteira (condições homogêneas)
A_bc, b_bc = apply_dirichlet(A, b, V, nodes=None, g=None)

# Aplicar condições não-homogêneas: u = sin(π*x) na fronteira
g_func = lambda x: np.sin(np.pi * x)
A_bc, b_bc = apply_dirichlet(A, b, V, g=g_func)

# Aplicar em nós específicos
boundary_nodes = mesh.boundary_nodes()
A_bc, b_bc = apply_dirichlet(A, b, V, nodes=boundary_nodes, g=0.0)

Veja o código fonte.