SfePy: Simulaciones con SfePy en Python

SfePy: Simulaciones con SfePy en Python

Introducción

SfePy es un software de análisis de elementos finitos (FEA) de código abierto escrito en Python. Es una herramienta potente y flexible que se puede utilizar para resolver una amplia gama de problemas PDE.

En este tutorial, aprenderemos a usar SfePy para realizar simulaciones FEA en Python. Cubriremos los siguientes temas:

  • Instalación de SfePy
  • Creación de un problema FEA
  • Resolución de un problema FEA
  • Visualización de los resultados de la simulación

Instalación de SfePy

La forma más fácil de instalar SfePy es usando Anaconda o pip.

Con Anaconda

  1. Instale Anaconda o Miniconda.
  2. Abra un terminal y ejecute el siguiente comando:
conda install sfepy

Con pip

  1. Instale pip.
  2. Abra un terminal y ejecute el siguiente comando:
pip install sfepy

Creación de un problema FEA

Para crear un problema FEA en SfePy, necesitamos definir los siguientes elementos:

  • El dominio del problema
  • La malla del dominio
  • Los elementos finitos
  • Las condiciones de contorno
  • Las condiciones iniciales

Dominio del problema

El dominio del problema es la región del espacio en la que se realiza la simulación. Se puede definir como una forma geométrica o como un conjunto de puntos.

Malla del dominio

La malla del dominio es la división del dominio en elementos finitos. SfePy proporciona una serie de herramientas para generar mallas, como la malla por cuadrícula, la malla por triángulos y la malla por elementos finitos sólidos.

Elementos finitos

Los elementos finitos son los bloques de construcción de un problema FEA. SfePy proporciona una amplia gama de elementos finitos para diferentes tipos de problemas.

Condiciones de contorno

Las condiciones de contorno especifican cómo se comportan los límites del dominio. SfePy proporciona una serie de condiciones de contorno, como condiciones de desplazamiento, condiciones de presión y condiciones de temperatura.

Condiciones iniciales

Las condiciones iniciales especifican el estado del dominio al inicio de la simulación.

Ejemplo: Soporte de barra

Consideremos el siguiente problema FEA:

  • Un soporte de barra está sujeto a una carga de compresión de 10 N.
  • La barra tiene una longitud de 1 m y un área de sección transversal de 1 cm².
  • El módulo de elasticidad de la barra es de 200 GPa.

Definición del dominio

El dominio del problema es una barra de 1 m de longitud.

Python
import sfepy.discrete.fem.domain as dm

domain = dm.Domain("barra")

Definición de la malla

La malla del dominio está formada por 10 elementos finitos de línea.

Python
mesh = dm.Mesh(domain, "mesh", 10, bcs=None)

Definición de los elementos finitos

Los elementos finitos son elementos de línea de primer grado.

Python
fe = dm.FE_Element("Bar", 1)

Definición de las condiciones de contorno

La condición de contorno en el extremo izquierdo de la barra es un desplazamiento fijo. La condición de contorno en el extremo derecho de la barra es una carga de compresión.

Python
bc = dm.BoundaryCondition("dirichlet", mesh.boundaries["left"], "u", 0.0)
bc.add_condition(mesh.boundaries["right"], "f", -10.0)

Definición de las condiciones iniciales

No hay condiciones iniciales en este problema.

Resolución del problema

Para resolver el problema, usamos el solucionador de SfePy.

Python
problem = dm.Problem(domain=domain, mesh=mesh, fe=fe, bc=bc)
solver = problem.solver
solver.solve()

Visualización de los resultados

Para visualizar los resultados, podemos usar la biblioteca Matplotlib.

Python
from matplotlib import pyplot as plt

displacement = solver.solution["u"]
plt.plot(mesh.vertices[:, 0], displacement)
plt.show()