Lección 8 · Gmsh, huecos y materiales múltiples
Nivel: intermedio · Tiempo: 5 h · Prerrequisitos: lecciones 4 y 7.
Qué cambia frente a la placa rectangular
La formulación de elasticidad se conserva. Cambian la construcción del dominio, la identificación de fronteras y la asignación de propiedades por región. Esta separación ayuda a depurar geometría antes de culpar al solver.
Objetivos
Construirás geometrías OCC con grupos físicos, convertirás sus etiquetas a DOLFINx y resolverás placas perforadas/heterogéneas con estudio de malla.
Modelos y unidades
- Placa 2×1 con agujero circular de radio 0.2 y tracción nominal 1.
- Placa 2×1 adherida con (E_1=100), (E_2=400), (\nu=0.3).
Forma fuerte y condiciones
En cada material (\Omega_i), (-\nabla\cdot\sigma_i(u)=0). En una interfaz perfecta, el desplazamiento y la tracción son continuos. El agujero es libre de tracción; izquierda empotrada y derecha cargada.
Forma débil
La continuidad de desplazamiento se hereda del espacio (H^1); la de tracción surge del equilibrio débil.
Mapa matemático → software
| Concepto | Objeto |
|---|---|
| diferencia booleana | gmsh.model.occ.cut |
| material/frontera | grupo físico 2D/1D |
| conversión colectiva | gmshio.model_to_mesh(..., rank=0) |
| materiales | dx(marker) con cell_tags |
| agujero libre | ausencia de término en ds(hole) |
Ejemplos e inspección
Ejecuta python examples/07_plate_with_hole.py --quick --output results y
python examples/08_two_materials.py --quick --output results. Comprueba que
facet_tags.find no sea vacío y que cada celda tenga material.
Solver
Ambos problemas son lineales y usan KSP con prefijo/error explícitos. Gmsh se inicializa solo en rango 0; la conversión/partición involucra a todo el comunicador.
Verificación cuantitativa
La placa perforada exige balance <2e-7 y concentración localizada entre 1.5/8; ese intervalo es smoke, no baseline final. La bimaterial exige balance <1e-8 y salto de desplazamiento continuo <1e-10.
Visualización
Muestra grupos físicos con etiquetas textuales. Para concentración, compara regiones cercanas al agujero y curvas contra tamaño de malla; no uses el máximo global junto al empotramiento como (K_t).
Errores frecuentes
- Crear geometría en todos los rangos.
- Añadir grupo físico antes de
occ.synchronize(). - Perder el agujero al no incluir superficies/facetas en grupos.
- Etiquetar por coordenadas con tolerancia dependiente de la malla.
Ejercicios graduados
- Exporta/relee malla y etiquetas en XDMF.
- Refina localmente el agujero y grafica (K_t(h)).
- Cambia (E_2/E_1) y verifica continuidad/equilibrio de interfaz.
Solución o guía
Clasifica curvas por bounding box y valida cardinalidades. Un valor estable de (K_t) requiere refinamientos sucesivos, no una sola malla fina.
Fuentes, licencia, versión y cambios
Demo Gmsh 0.11. Las geometrías, el código y los criterios de concentración/continuidad son originales del curso y están disponibles bajo MIT.
Anterior: elasticidad lineal · Siguiente: hiperelasticidad