Practica 1

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

UNIVERSIDAD AUTONOMA DE NUEVO LEON

FACULTAD DE INGENIERIA MECANICA Y ELECTRICA

LABORATORIO DE BIOMECANICA

Practica #1

Descripción y uso del código de optimización topológica de 99


líneas en MATLAB
NOMBRE DEL ALUMNO: Miguel De Jesús Rodríguez Zozaya
MATRICULA: 1791679
HORA: viernes, V3 BRIGADA: 4444
NOMBRE DEL MAESTRO: M.I Dante Ferreyra Méndez

08/04/2020
Objetivo:
Conocer las partes del código de optimización topológica, como crear el
archivo “.m” en MatLab y como ejecutar el analisis

Marco Teórico:
Un problema clásico de la ingeniería consiste en determinar la
configuración geométrica óptima de un cuerpo que minimice o maximice
una cierta función objetivo, al mismo tiempo que satisface las restricciones
o condiciones de contorno del problema. La solución de este problema
puede ser planteada utilizando dos estrategias: como un problema de
optimización de forma o de optimización de la topología.

La optimización de forma consiste en modificar la geometría del dominio


preservando su topología, es decir sin crear huecos o cavidades en su
interior. Este tipo de análisis es usualmente conocido como análisis de
sensibilidad al cambio de forma y sus bases matemáticas se encuentran
bien establecidas. El principal inconveniente del análisis de sensibilidad al
cambio de forma es que sólo permite cambios en la frontera del dominio, lo
que limita su campo de aplicación.

Una manera más general de controlar un dominio es mediante


modificaciones de su topología, lo que permite obtener la configuración
deseada partiendo de una morfología inicial distante de la óptima. Los
métodos de homogenización son posiblemente los más utilizados para la
optimización topológica. Estos consisten en caracterizar la topología a
través de su densidad, es decir, los huecos se identifican con regiones de
densidad nula. De esta forma la solución del programa resulta en una
distribución ficticia de material.
Matlab es un software matemático que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programación propio (lenguaje M).
Entre sus prestaciones básicas se hallan: la manipulación de matrices, la
representación de datos y funciones, la implementación de algoritmos, la
creación de interfaces de usuario (GUI) y la comunicación con programas
en otros lenguajes y con otros dispositivos hardware.

El código de optimización topológica de 99 líneas en Matlab que se


utilizara en este laboratorio se divide en 36 líneas para la programación
principal, 12 líneas para los criterios de optimización, 16 líneas para el filtro
de mallado y 35 líneas para el código de elemento finito. De hecho,
excluyendo las líneas de comentarios y líneas asociadas con la producción
y el análisis de elementos finitos, el código resultante es de solo 49 líneas.
Este código fue desarrollado por O. Sigmund, Department of Solid
Mechanics, Building 404, Technical University of Denmark, DK-2800
Lyngby, Denmark. El código puede ser descargado desde la página del
autor: http://www.topopt.dtu.dk.

Desarrollo:

El código de Matlab está compuesto como un código de optimización


topológica estándar, el cual está listo para ser interpretado por MATLAB
luego de llevar a cabo la siguiente serie de sencillos pasos:

1) Abrir MATLAB y esperar a que éste se inicialice, y muestre su


pantalla principal.

2) Una vez en la pantalla de inicio de MATLAB es necesario seleccionar


en la barra de herramientas File -> New -> Script, tal como muestra
la figura 1, con lo que se abre un editor de texto, dentro del cual será
necesario escribir el código proporcionado.

Figura 1.- Opción a seleccionar para crear un nuevo script en MATLAB

3) Una vez con el código completamente escrito en el editor de texto, es necesario


salvar el archivo, teniendo especial atención en la ubicación donde se va a
guardar el script así como en el nombre que se le va a asignar al archivo.
Se recomienda que el archivo se guarde en el directorio raíz de MATLAB que por
default muestra es en el que el editor de texto nos ubica al seleccionar File->Save
como muestra la figura 1.2. En caso de no ser así, debemos de navegar a “Mis
Documentos\MATLAB” y guardar aquí el script recién creado. La figura 1.2
ejemplifica una script que está siendo guardado en el directorio de MATLAB con
el nombre “topp”.

Figura 1.2 Ventana para guardar script, dentro de la carpeta raíz de MATLAB
4) Una vez guardado el script en el directorio correcto, solo hace falta corroborar
que el intérprete de MATLAB se encuentre en el mismo directorio. Esto se hace
desde la pantalla principal de MATLAB. Para la versión R2010a del software, el
directorio actual del intérprete se encuentra en la barra de herramientas superior,
como muestra la figura 1.3.

Figura 1.3 Directorio actual del intérprete de MATLAB.

5) Por último, hay que ejecutar el programa desde la ventana de comando de


MATLAB.

1. Describir cada una de las partes principales del código de 99 líneas en


Matlab.

El código de Matlab (ver el Apéndice) está construido como un código de optimización de


topología estándar. El programa principal es llamado desde el prompt de Matlab por la línea
top(nelx,nely,volfrac,penal,rmin).

Programa principal (1-36)

El programa principal (líneas 1-36) comienza distribuyendo el material de manera uniforme en


el dominio de diseño (línea 4). Después de algunos otras inicializaciones, el ciclo principal
comienza con una llamada a la subrutina de elementos finitos (línea 12) que devuelve el vector
de desplazamiento U. Desde la matriz de rigidez del elemento para el material sólido es el
mismo para todos los elementos, la subrutina de la matriz de rigidez del elemento se llama una
sola vez (línea 14). A continuación, un ciclo sobre todos los elementos (líneas 16- 24)
determina la función objetiva y las sensibilidades (4).

Las variables n1 y n2 denotan superior izquierda y derecha números de nodo de elemento en


los números de nodo globales y son utilizado para extraer el vector de desplazamiento del
elemento Ue del vector de desplazamiento global U. El análisis de sensibilidad es seguido por
una llamada al filtro de independencia de malla (línea 26) y el optimizador de criterios de
optimalidad (línea 28).

El cumplimiento actual y otros parámetros son impreso por las líneas 30-33 y la distribución de
densidad resultante se traza (línea 35). El ciclo principal finaliza si el cambio en las variables de
diseño (cambio determinado en línea 30) es menos del 1 por ciento. De lo contrario, los pasos
anteriores son repetidos.
Optimizador basado en criterios de optimalidad (líneas 3 7 - 4 8)

El optimizador encuentra las variables de diseño actualizadas (líneas 37 - 48). Sabiendo que el
volumen de material (sum (sum (xnew))) es una función monótonamente decreciente del
multiplicador de Lagrange (lag), el valor del multiplicador lagrangiano que satisface la
restricción de volumen se puede encontrar mediante un algoritmo de bisección (líneas 40-48).

El algoritmo de bisección se inicializa adivinando una l1 inferior y una l2 superior vinculada a la


lagrangiana multiplicador (línea 39). El intervalo que limita el multiplicador lagrangiano se
reduce a la mitad repetidas veces hasta que su tamaño sea menos que los criterios de
convergencia (línea 40).

Filtrado de independencia de malla (líneas 49 - 64)

Las líneas 49-64 representan la implementación de Matlab de (5).

Tenga en cuenta que no se buscan todos los elementos en el dominio de diseño para encontrar
los elementos que se encuentran dentro del radio rmin, sino solo aquellos dentro de un
cuadrado con lado longitudes dos veces redondas (rmin) alrededor del elemento considerado.
Al seleccionar rmin menos de uno en la llamada de la rutina, las sensibilidades filtradas serán
iguales a las sensibilidades originales que hacen que el filtro esté inactivo.

Código de elemento finito (líneas 65 -99)

El código de elemento finito está escrito en las líneas 65-99. Nota que el solucionador hace uso
de la opción dispersa en Matlab. La matriz de rigidez global está formada por un ciclo sobre
todos los elementos (líneas 70-77). Como fue el caso en el principal programa, las variables n1
y n2 denotan los números de nodo del elemento superior izquierdo y derecho en los números
de nodo globales y se utilizan para insertar la matriz de rigidez del elemento a la derecha
lugares en la matriz de rigidez global.

Como se mencionó anteriormente, tanto los nodos como los elementos están numerados en
columnas de izquierda a derecha. Además, cada nodo tiene dos grados de libertad (horizontal y
vertical), por lo tanto, el comando F (2,1) = - 1. (Línea 79) aplica una fuerza de fuerza de unidad
vertical en la esquina superior izquierda.

Las ayudas se implementan eliminando grados de libertad fijos de las ecuaciones lineales.
Matlab puede hacer esto muy elegantemente con la línea:

84 U(freedofs,:) = K(freedofs,freedofs) \

F(freedofs,:);

donde los liberados indican los grados de libertad que no están restringidos. Sobre todo, es
más fácil definir los grados de libertad que son fijos (fixeddofs) a partir de entonces los
liberados se encuentran automáticamente usando el operador Matlab setdiff que encuentra los
grados de libertad libres como la diferencia entre todos los grados de libertad y los grados de
libertad fijos (línea 82).

La matriz de rigidez del elemento se calcula en las líneas 86-99. La matriz de 8 por 8 para un
elemento cuadrático bi-lineal de 4 nodos se determinó analíticamente usando un software de
manipulación simbólica. El módulo E de Young y la relación nu de Poisson se pueden alterar en
las líneas 88 y 89.
Capturas de pantalla del código
Líneas 1 a 29
Líneas 30 a 57
Líneas 58 a 85
Líneas 86-99
2 Hacer el ejercicio propuesto de la viga (pdf)

Después de realizar el programa y después cocrrerlo en MatLab y escribir en la ventana


de comando “topp(60,20,0.5,3.0,1.5)”, pudimos observar como el programa nos arrojaba
la siguiente figura:
Conclusiones
Con la realización de esta práctica pudimos observar el funcionamiento de las parte del
programa de 99 líneas, y así mismo ver un claro ejemplo de cómo es posible realizar un
análisis de un problema propuesto que es el análisis de una viga.

Referencias

99 Line Topology Optimization Code – O. Sigmund, Department of Solid Mechanics,


Building 404, Technical University of Denmark, DK-2800 Lyngby, Denmark.

También podría gustarte