Lo que he aprendido: estudio paramétrico en Abaqus

Lo que os traigo hoy es algo bastante especializado en mi campo y la probabilidad de que os interese es sumamente pequeña, pero bueno, lo he aprendido así que aquí va como mandan los cánones.


Bien, os voy a contar cómo hacer un estudio paramétrico en Abaqus. Voy a dar por hecho que Abaqus sabéis usar más o menos (como yo) porque, verdaderamente, si no sabéis usarlo no sé qué andáis leyendo cosas extrañas sobre él 😉

Cuando digo estudio paramétrico me refiero a que en lugar de darle un valor fijo a una o varias variables les vamos a dar una ristra de valores diferentes y luego vamos a pintar como cambia nuestro resultado según estos valores. Que suena muy bien pero luego ya veis la chorrada que es.

En fin, Abaqus nos permite escribir una archivo .psf (Python Scripting File) que crea archivos .inp a partir de una plantilla y luego trata los resultados. Son archivos de Python que se lanzan en el terminal1 con:

abaqus script=archivo

Se organizan así:

  • Se crea el estudio paramétrico con ParStudy(). ParStudy es una clase, lo que viene a continuación son métodos que se aplican a dicha clase.
  • Se definen los parámetros: tipo (continuo o discreto), el dominio… con define()
  • Se muestrean lo parámetros dando las opciones de muestreo con sample()
  • Se combinan los parámetros para generar los puntos de muestreo con combine()
  • Se generan los diseños y los .inp correspondiente con generate()
  • Se ejecutan los .inp con execute()
  • Se recopilan los resultados deseados con gather()
  • Se saca un informe de los resultados con report()

Como dice el proverbio, las palabras son enanos y los ejemplos gigantes, así que aquí va un ejemplo de cómo se haría esto para el caso que queramos estudiar el efecto del módulo de Young en los modos de una pieza:

# Definir el estudio paramétrico 
# (name es el nombre del inp parametrizado)

aStudy=ParStudy (par='E', name='modos')

# Definir el dominio de la variable

aStudy.define(CONTINUOUS, par='E', domain=(100e9, 300e9)) 
aStudy.sample(NUMBER, par='E', number=5) 
aStudy.combine(MESH)

# Generar inps basándose en el inp original

aStudy.generate(template='modos')

# Ejecutar todos

aStudy.execute(ALL)

# Especificar que se quiere como output

aStudy.output(file=ODB, step=1)

# Se pueden coger las variables que se quiera y meterlas en una tabla

aStudy.gather(results='modos', variable='MODAL',  step=1, mode=2)
aStudy.report(PRINT, results='modos')

Nos queda la segunda parte, el .inp plantilla. Esto es muy fácil, solo hay que añadir esto al .inp:

*PARAMETER
Variable = valor

Y cuando aparezca el valor de la variable cambiarlo por . Siguiendo con el ejemplo del módulo de Young, tendríamos:

* PARAMETER
E = 210000000000

** MATERIALS
**
*Material, name=Material-1
*Density
7900.,
*Elastic
 <E>, 0.3

Ahora ya podemos lanzar el script. Empezaremos a ver algo parecido a esto:

cmd

Que nos irá diciendo cómo va el tema y finalmente nos enseñará los resultados.

En resumen, hay que hacer dos cosas: (1) crear un archivo .psf que defina el estudio paramétrico y (2) crear un .inp plantilla donde se diga qué parámetros van a estudiarse. Muy sencillo todo.

Bueno pues, ¡todos a parametrizar!

Más


  1. En Run script o en execfile() no funcionan, no me digáis por qué. 
Anuncios

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s