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
- Instale Anaconda o Miniconda.
- Abra un terminal y ejecute el siguiente comando:
conda install sfepy
Con pip
- Instale pip.
- 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.
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.
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.
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.
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.
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.
from matplotlib import pyplot as plt
displacement = solver.solution["u"]
plt.plot(mesh.vertices[:, 0], displacement)
plt.show()