tidus747 /
Tutoriales_juegos_Python
Tutoriales sobre creación de juegos sencillos usando Python. Se introducirá la programación orientada a objetos y la creación de interfaces gráficas.
67/100 healthLoading repository data…
alejohg / repository
Tutoriales sobre creación de mallas en GMSH y uso de la API en Python
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
El propósito de este repositorio es albergar los códigos utilizados en los tutoriales de GMSH que subí a Youtube.
En estos tutoriales se busca explicar el uso del software libre GMSH para la creación de mallas de elementos finitos en 2D, desde los conceptos más básicos hasta algunos aspectos un poco más avanzados que permitan adaptar el uso del programa a las necesidades del usuario, según la malla que desee crear o en función del problema específico que desee modelar.
Los temas cubiertos en estos tutoriales son:
Cada uno de los tutoriales se basa en crear una cierta malla de elementos finitos en la cual se apliquen conceptos básicos o avanzados del software. Los archivos correspondientes a estas mallas se encuentran disponibles tanto en formato Python .py como en formato GMSH .geo
Video GMSH: Tutorial 1 en Youtube
.geo: Malla_1.geoVideo API de Python: Tutorial 1 (Python) en Youtube
.py: Malla_1.pyVideo GMSH + Python: Tutorial malla estructurada en Youtube
.geo: Malla_2.geo.py: Malla_2.pyVideo GMSH + Python: Tutorial malla extruida en Youtube
.geo: Malla_3.geo.py: Malla_3.pyVideo GMSH + Python: Tutorial malla con Splines en Youtube
.geo: Malla_4.geo.py: Malla_4.pyVideo GMSH + Python: Tutorial 1 malla de elementos Shell en Youtube
.geo: Malla_5.geo.py: Malla_5.pyVideo GMSH + Python: Tutorial 2 malla de elementos Shell en Youtube
.geo: Malla_6.geo [Pendiente].py: Malla_6.pyEl código leer_GMSH.py contiene funciones útiles para procesar en Python las mallas creadas con el GMSH. Estas funciones permiten obtener la matriz de coordenadas nodales y la matriz de interconexión nodal a partir del archivo .msh que exporta GMSH con los datos de la malla. Adicionalmente, incluye una función para graficar las mallas a partir del archivo leído, con múltiples opciones de visualización. (por ahora, solo permite leer y graficar mallas de elementos 2D y de tipo Shell, no mallas 3D).
Ejemplo de uso: Con el siguiente código se puede observar como utilizar las funciones dadas en leer_GMSH.py para obtener los parámetros más importantes de la malla:
from leer_GMSH import xnod_from_msh, LaG_from_msh, plot_msh
malla = 'ejm_2.msh'
# Matriz de coordenadas nodales
xnod = xnod_from_msh(malla, dim=2)
# Se imprimen los primeros 10 nodos
for i in range(10):
x, y = xnod[i]
print(f'Nodo {i+1:2.0f}: x = {x:.4f}, y = {y:.4f}')
# Matriz de interconexión nodal
LaG = LaG_from_msh(malla)
nef = LaG.shape[0]
# Se imprimen los primeros 5 elementos y los 5 últimos:
print()
for e in list(range(5)) + list(range(nef-5, nef)):
print(f'Elemento {e+1:3.0f}: Superficie = {LaG[e, 0]+1}, '
f'Nodos = {LaG[e, 1:]+1}')
# Se grafica la malla:
plot_msh(malla, '2D', mostrar_nodos=True, mostrar_num_nodo=False,
mostrar_num_elem=True)
Esto da como resultado:
Nodo 1: x = 1.0000, y = 0.0000
Nodo 2: x = 3.2500, y = 0.0000
Nodo 3: x = 3.2500, y = 3.2500
Nodo 4: x = 0.0000, y = 3.2500
Nodo 5: x = 0.0000, y = 1.0000
Nodo 6: x = 0.7071, y = 0.7071
Nodo 7: x = 1.1500, y = 0.0000
Nodo 8: x = 1.3000, y = 0.0000
Nodo 9: x = 1.4500, y = 0.0000
Nodo 10: x = 1.6000, y = 0.0000
Elemento 1: Superficie = 1, Nodos = [ 1 7 85 84]
Elemento 2: Superficie = 1, Nodos = [84 85 86 83]
Elemento 3: Superficie = 1, Nodos = [83 86 87 82]
Elemento 4: Superficie = 1, Nodos = [82 87 88 81]
Elemento 5: Superficie = 1, Nodos = [81 88 89 80]
Elemento 296: Superficie = 2, Nodos = [332 333 70 71]
Elemento 297: Superficie = 2, Nodos = [333 334 69 70]
Elemento 298: Superficie = 2, Nodos = [334 335 68 69]
Elemento 299: Superficie = 2, Nodos = [335 336 67 68]
Elemento 300: Superficie = 2, Nodos = [336 52 5 67]
El código obtener_grupos_fisicos.py contiene una función que utiliza las funcionalidades de GMSH en Python para leer una malla a partir del archivo .msh exportado por GMSH y obtener de él los grupos físicos creados, con sus respectivos nombres (si los hay) y los nodos asociados a cada grupo físico. Muy útil para identificar nodos a los cuales se debe imponer una condición particular asociada al análisis por MEF, por ejemplo, condiciones de frontera del sólido o cargas puntuales/distribuidas aplicadas. Con este propósito, contiene otra función que permite directamente obtener los nodos asociados a un grupo físico específico conociendo el nombre. (Por ahora, solo permite leer mallas de elementos 2D y de tipo Shell, no mallas 3D).
Ejemplo de uso: En el siguiente código se puede observar cómo utilizar estas funciones para obtener todos los parámetros de los grupos físicos que se tienen en una malla
from obtener_grupos_fisicos import grupos_fisicos, obtener_nodos
malla = 'scordelis.msh'
# Obtener todos los grupos físicos de la malla:
dict_nombres, dict_nodos = grupos_fisicos(malla)
print('Grupos físicos reportados:\n')
for tag in dict_nombres.keys():
dim = dict_nombres[tag][0]
nombre = dict_nombres[tag][1]
nodos = dict_nodos[tag]
print(f'Grupo físico: {tag}\nDimensión: {dim}\n'
f'Nombre: {nombre}\nContiene nodos: {nodos}.\n')
# Obtener nodos únicamente del grupo físico llamado "AB":
nod_AB = obtener_nodos(malla, 'AB')
print('~'*50)
print(f'Grupo físico "AB" contiene nodos: {nod_AB}')
Esto da como resultado:
Grupos físicos reportados:
Grupo físico: 1
Dimensión: 1
Nombre: AB
Contiene nodos: [23 24 20 19 21 3 1 22 25].
Grupo físico: 2
Dimensión: 1
Nombre: BC
Contiene nodos: [12 16 4 15 13 14 17 18 3].
Grupo físico: 3
Dimensión: 1
Nombre: CD
Contiene nodos: [28 4 30 26 29 31 2 27 32].
Grupo físico: 4
Dimensión: 1
Nombre: AD
Contiene nodos: [ 5 8 9 7 10 11 2 1 6].
Grupo físico: 101
Dimensión: 2
Nombre: mi superficie
Contiene nodos: [78 74 70 77 71 66 72 76 63 64 69 79 80 60 67 75 65 73 61 62 81 68 28 39
49 5 8 12 16 23 50 37 4 41 24 30 51 52 54 9 56 57 15 58 7 20 19 26
29 40 43 13 55 10 31 53 59 14 17 11 18 2 21 27 34 35 32 36 42 38 47 3
33 44 1 48 45 46 6 22 25].
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Grupo físico "AB" contiene nodos: [22 1 24 3 23 20 25 19 21]
Selected from shared topics, language and repository description—not editorial ratings.
tidus747 /
Tutoriales sobre creación de juegos sencillos usando Python. Se introducirá la programación orientada a objetos y la creación de interfaces gráficas.
67/100 healthtidus747 /
Tutoriales sobre la creación de gráficos realizados para el canal de YouTube Piensa 3D.
52/100 health