Tu modelo ya entiende parámetros. Ahora debe aprender algo igual de importante: reconocer regiones físicas aunque cambien la longitud, la malla y los números internos que MAPDL asigna a nodos y elementos.
Tu misión
Construirás cinco regiones con nombre: el extremo fijo, la punta, la cara superior, la arista superior de la punta y una banda central de elementos. Después modificarás la viga y comprobarás que todas siguen existiendo sin escribir un solo ID.
Pregunta guía: ¿cómo se programa una región física cuando todavía no conoces sus números de nodo?
Objetivos
Al completar M02 podrás demostrar que:
- Distingues entidades del modelo sólido y del modelo de elementos finitos.
- Explicas por qué una selección es estado temporal y un componente es una referencia persistente.
- Combinas conjuntos mediante
S,A,RyU. - Seleccionas nodos por localización y elementos por posición de su centroide.
- Controlas explícitamente la tolerancia mediante
SELTOL. - Utilizas un sistema local como referencia móvil ligada a la punta.
- Auditas componentes con
*GET,COUNTy relaciones entre conteos. - Recuperas el modelo completo antes de continuar mediante
ALLSEL,ALL.
Prerrequisitos y archivos
- Haber completado M01 o entender parámetros, expresiones y comprobaciones con
*IF. - Reconocer que la viga ocupa
0 ≤ X ≤ beam_l,0 ≤ Y ≤ beam_hy0 ≤ Z ≤ beam_b. - Mantener el sistema coherente SI: metros, newtons y pascales.
02_start.mac— punto de partida.02_geometry_selections.mac— solución guiada y auditoría.02_bug_hunt.mac— cinco defectos deliberados.02_challenge.mac— plantilla del reto.02_expected_results.csv— contrato de autocorrección.
Antes de programar: haz una predicción
Imagina que MAPDL asigna al extremo libre los nodos 241–255. Al aumentar la longitud
de 1.0 m a 1.2 m y refinar la malla, ¿seguirán representando la punta?
No hay ninguna garantía. Los IDs describen cómo quedó almacenado este mallado, no qué significa físicamente una región. En cambio, la frase «nodos situados en la punta» puede expresarse mediante geometría:
NSEL,S,LOC,X,beam_l
En esta lección iremos un paso más allá: colocaremos el origen de un sistema local en la punta
y la seleccionaremos siempre con X=0. La instrucción será relativa a la pieza,
no al tamaño particular del caso.
Modelo mental: dos modelos superpuestos
MAPDL mantiene en la misma base de datos dos familias de entidades. El modelo sólido describe la geometría; el modelo de elementos finitos describe su discretización.
fixed_nodes contiene nodos;
mid_elems, elementos.
| Pregunta física | Entidad útil | Ejemplo APDL |
|---|---|---|
| ¿Dónde termina el sólido? | Área o nodos de la cara | NSEL,...,LOC,X,... |
| ¿Qué parte se empotrará? | Componente nodal | CM,fixed_nodes,NODE |
| ¿Qué elementos están en el centro? | Elementos por centroide | ESEL,...,CENT,X,... |
| ¿Qué entidades están activas ahora? | Estado de selección | *GET,...,COUNT |
Seleccionar no significa borrar
Los comandos NSEL y ESEL cambian banderas internas. Las entidades no
seleccionadas siguen en la base de datos. El peligro no es perderlas, sino olvidar que están
temporalmente invisibles para comandos posteriores.
Paso 1 — Construir la geometría paramétrica
El bloque de M01 se mantiene:
/PREP7
ET,1,SOLID185
MP,EX,1,young
MP,PRXY,1,nu
TYPE,1
MAT,1
BLOCK,0,beam_l,0,beam_h,0,beam_b
ESIZE,mesh_h
VMESH,ALL
Un BLOCK aislado crea un volumen delimitado por seis áreas, doce líneas y ocho
keypoints. VMESH añade elementos y nodos. Sus IDs pueden cambiar aunque el sólido
represente exactamente la misma viga.
Límite de M02: utilizamos ET, MP, ESIZE y
VMESH como infraestructura heredada. La elección del elemento y el material se
justificará en M03; la estrategia de mallado se estudiará en M04.
Antes de reducir ninguna selección, guardamos el tamaño completo del modelo:
ALLSEL,ALL
*GET,n_nodes,NODE,0,COUNT
*GET,n_elements,ELEM,0,COUNTEstos dos valores son nuestra línea base. Al final deberán reaparecer exactamente.
Paso 2 — Pensar las selecciones como álgebra de conjuntos
El segundo argumento de los comandos xSEL indica cómo se combina la nueva condición
con el conjunto activo:
A, R y U dependen del estado previo.
| Operación | Lectura | Resultado |
|---|---|---|
S | Select | Sustituye el conjunto activo por uno nuevo. |
A | Additionally select | Añade entidades: unión. |
R | Reselect | Conserva la intersección. |
U | Unselect | Retira entidades: diferencia. |
Por eso una secuencia de selección debe leerse de arriba abajo. Si una operación deja el conjunto vacío, una reselección posterior no puede recuperar entidades que ya no estaban activas.
Paso 3 — Controlar la tolerancia geométrica
Una coordenada calculada y una coordenada almacenada pueden diferir unas fracciones diminutas.
MAPDL utiliza una tolerancia en las selecciones de valores no enteros. Su lógica automática depende
de VMIN y VMAX; por ejemplo, si ambos son iguales y no nulos, puede tomar
el 0.5 % del valor solicitado.
Seleccionar globalmente X=1.0 m podría implicar una banda mucho más ancha de la
esperada cuando la malla sea muy fina. En un script reproducible conviene declarar el criterio:
select_tol=MIN(beam_h,beam_b)*1E-5
SELTOL,select_tol
Para el caso base, select_tol=5E-7 m. Es pequeña frente a la geometría y suficiente
para absorber ruido numérico. La tolerancia permanece activa hasta que se redefine, así que al final
la restauraremos:
SELTOL,Una tolerancia no debe tener el tamaño de un elemento
Si escribieras SELTOL,mesh_h, una selección de cara podría capturar también la
siguiente capa de nodos. El comando funcionaría; la región física sería incorrecta.
Paso 4 — Crear fixed_nodes
Comenzamos en el sistema cartesiano global y seleccionamos la cara X=0:
CSYS,0
NSEL,S,LOC,X,0
*GET,n_fixed,NODE,0,COUNT
CM,fixed_nodes,NODE
ALLSEL,ALLEl patrón contiene cuatro decisiones:
NSEL,Sinicia un conjunto nodal nuevo.LOC,X,0expresa la región mediante una condición geométrica.*GETcomprueba inmediatamente que la selección existe.CMguarda una fotografía antes de restaurar todo conALLSEL.
El orden es esencial. Si ejecutaras ALLSEL antes de CM,
fixed_nodes contendría todos los nodos.
Paso 5 — Pegar una regla local a la punta
LOCAL define un sistema de coordenadas y CSYS decide cuál está activo.
Los números de sistemas locales deben ser mayores que 10; usaremos el 11:
LOCAL,11,CART,beam_l,0,0
CSYS,11
NSEL,S,LOC,X,0
*GET,n_tip,NODE,0,COUNT
CM,tip_nodes,NODE
CSYS,0
ALLSEL,ALL
No hemos girado los ejes; solo trasladamos el origen hasta X=beam_l. En el sistema
global, la punta está en X=beam_l. En el sistema 11, está en X=0.
Modelo mental: una regla pegada a la pieza
Si beam_l cambia, el origen local viaja con la punta. La condición
LOC,X,0 permanece idéntica. Esta idea será muy útil en modelos ensamblados,
regiones inclinadas y operaciones repetitivas.
LOC interpreta X, Y y Z en el sistema activo. Por eso CSYS,0 no es
limpieza estética: evita que las selecciones siguientes se interpreten desde el origen equivocado.
Paso 6 — Crear top_nodes y mid_elems
Con el sistema global restaurado, la cara superior se define mediante su altura:
NSEL,S,LOC,Y,beam_h
*GET,n_top,NODE,0,COUNT
CM,top_nodes,NODE
ALLSEL,ALL
Para la banda central cambiamos de clase de entidad. ESEL,CENT comprueba la coordenada
del centroide de cada elemento:
ESEL,S,CENT,X,0.4*beam_l,0.6*beam_l
*GET,n_mid_elems,ELEM,0,COUNT
CM,mid_elems,ELEM
ALLSEL,ALLLa banda debe contener elementos, pero no todos. Esa relación es más estable que exigir un número exacto, porque el conteo puede variar con la estrategia de mallado o la versión.
Paso 7 — Construir tip_top_nodes mediante intersección
La arista superior de la punta cumple dos condiciones simultáneas: pertenecer a
tip_nodes y a top_nodes.
CMSEL,S,tip_nodes
CMSEL,R,top_nodes
*GET,n_tip_top,NODE,0,COUNT
CM,tip_top_nodes,NODE
ALLSEL,ALL
CMSEL,S recupera el primer componente. CMSEL,R lo intersecta con el
segundo. El resultado debe ser no vacío, menor que la cara completa de la punta y menor que toda
la cara superior:
0 < n_tip_top < n_tip
0 < n_tip_top < n_topPaso 8 — Demostrar que los extremos no se solapan
Una viga de longitud positiva no puede tener nodos que pertenezcan a ambos extremos:
CMSEL,S,fixed_nodes
CMSEL,R,tip_nodes
*GET,n_overlap,NODE,0,COUNT
ALLSEL,ALL
*GET,n_restored,NODE,0,COUNTLas condiciones esperadas son:
n_overlap = 0
n_restored = n_nodesLa primera es una comprobación física. La segunda es una comprobación de estado: confirma que ningún filtro accidental seguirá afectando a módulos posteriores.
Paso 9 — Convertir las regiones en un contrato ejecutable
Un componente que existe por nombre puede estar vacío o contener demasiado. El entregable evalúa
todas las relaciones y resume el resultado en passes:
passes=1
*IF,n_fixed,LE,0,THEN
passes=0
*ENDIF
*IF,n_overlap,NE,0,THEN
passes=0
*ENDIF
*IF,n_restored,NE,n_nodes,THEN
passes=0
*ENDIFDespués genera una evidencia legible:
*CFOPEN,m02_selection_audit,csv
*VWRITE
('case,beam_l,beam_h,mesh_h,n_nodes,n_elements,n_fixed,n_tip,n_top,n_mid_elems,n_tip_top,n_overlap,n_restored,passes')
...
*CFCLOS
Abre m02_selection_audit.csv y comprueba que la última columna vale 1.
Los conteos concretos pueden variar; las relaciones del archivo
02_expected_results.csv deben cumplirse siempre.
El patrón que debes conservar
Seleccionar → contar → nombrar → restaurar → recuperar → auditar
Traducido a APDL:
NSEL,S,...
*GET,n_region,NODE,0,COUNT
CM,region_nodes,NODE
ALLSEL,ALL
CMSEL,S,region_nodes
! operacion sobre la region
ALLSEL,ALLEste patrón separa la definición de una región de su uso. En M05 podremos aplicar restricciones o cargas a componentes cuyo significado ya ha sido probado.
Caza de errores
Descarga 02_bug_hunt.mac.
El archivo se ejecuta, pero contiene cinco defectos lógicos:
- Una región física definida mediante IDs de nodo.
- Un componente creado después de restaurar todos los nodos.
- Un sistema local que continúa activo sin intención.
- Una tolerancia del mismo orden que el tamaño de malla.
- Una selección parcial de elementos que se propaga hasta el final.
Para cada defecto escribe: estado incorrecto → síntoma probable → comprobación que lo revela → corrección mínima. No basta con señalar la línea.
Reto verificable
Abre 02_challenge.mac.
La longitud ahora es 1.2 m y la malla usa 0.02 m.
- Crea los cinco componentes sin escribir IDs.
- Utiliza el sistema local 11 para definir
tip_nodes. - Construye
tip_top_nodesmediante intersección. - Demuestra que los extremos no se solapan.
- Genera
m02_selection_audit.csvcon el mismo esquema que la solución.
Criterios de aceptación
- Los cinco componentes son no vacíos.
n_overlap=0.n_tip_top<n_tipyn_tip_top<n_top.0<n_mid_elems<n_elements.n_restored=n_nodes.- La fila del CSV termina con
passes=1. - No aparece ningún ID de nodo o elemento en las instrucciones de selección.
Autoevaluación
¿Qué diferencia hay entre NSEL y CM?
NSEL modifica el conjunto nodal activo; CM guarda los nodos seleccionados bajo un nombre reutilizable.
¿Por qué CM debe ejecutarse antes de ALLSEL?
Porque CM captura la selección existente en ese instante. Después de ALLSEL guardaría todos los nodos.
¿Qué representa R en CMSEL,R,top_nodes?
Una reselección: conserva únicamente la intersección entre el conjunto activo y top_nodes.
¿Por qué restauramos CSYS,0?
Porque las selecciones por LOC interpretan las coordenadas en el sistema activo. Olvidarlo cambia silenciosamente el significado de X, Y y Z.
¿Por qué no exigimos un número exacto de nodos?
Porque puede depender del mallador o de la versión. Comprobamos invariantes físicas y relaciones entre conjuntos, que son más robustas.
¿Qué demuestra n_restored=n_nodes?
Que ALLSEL,ALL recuperó todos los nodos y no dejamos un filtro accidental activo.
Evidencia de aprendizaje
02_geometry_selections.macejecutado desde una sesión limpia.m02_selection_audit.csvconpasses=1.02_challenge.maccompletado para la viga de1.2 m.- Tabla de diagnóstico de los cinco defectos de
02_bug_hunt.mac. - Explicación breve de por qué una selección geométrica es más estable que una lista de IDs.
Checklist de validación
- Distingo entidades del modelo sólido y del modelo de elementos finitos.
- Puedo anticipar el efecto de
S,A,RyU. - Definí y restauré explícitamente
SELTOL. - Creé
fixed_nodesytip_nodessin IDs. - Restauré
CSYS,0después de utilizar el sistema 11. - Construí
tip_top_nodescomo intersección de dos componentes. - Comprobé que
fixed_nodesytip_nodesno se solapan. - Verifiqué que
ALLSEL,ALLrecupera todos los nodos. - El reto genera un CSV con
passes=1. - No apliqué cargas ni resolví el modelo en este módulo.
Trazabilidad técnica de M02
Contenido contrastado con Ansys Mechanical APDL Command Reference 2024 R1:
ALLSEL, CM, CMSEL, CSYS, ESEL,
LOCAL, NSEL y SELTOL; y con el capítulo 3 de
ANSYS Mechanical APDL Modeling and Meshing Guide.
Lo siguiente
Tu modelo ya reconoce regiones por significado, no por casualidad numérica. En M03 decidirás qué formulación de elemento, material y atributos deben recibir las entidades que acabas de construir y aprenderás a auditar esas asignaciones.