Práctica 1 Descripción y uso de código de optimización...

58
Universidad Autónoma de Nuevo León Facultad de Ingeniería Mecánica y Eléctrica Laboratorio de Biomecánica Práctica 1 Descripción y uso de código de optimización topológica de 99 líneas en MATLAB M.I. Dante Ferreyra Méndez Alumno: Jesús Alejandro Medellín Gasca Matricula: 1724030 Carrera: Ingeniería en Mecatrónica Semestre Agosto - Diciembre 2019 Plan de estudios: 401 Día: Jueves Hora Clase: V6 Brigada: 416 Fecha: 30 de agosto de 2019 San Nicolás de los Garza, Nuevo León

Transcript of Práctica 1 Descripción y uso de código de optimización...

Page 1: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Laboratorio de Biomecánica

Práctica 1

Descripción y uso de código de optimización

topológica de 99 líneas en MATLAB

M.I. Dante Ferreyra Méndez

Alumno: Jesús Alejandro Medellín Gasca

Matricula: 1724030

Carrera: Ingeniería en Mecatrónica

Semestre Agosto - Diciembre 2019

Plan de estudios: 401

Día: Jueves Hora Clase: V6

Brigada: 416

Fecha: 30 de agosto de 2019

San Nicolás de los Garza, Nuevo León

Page 2: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

PRÁCTICA #1

Descripción y uso del código

de optimización topológica de 99 líneas en MATLAB

Objetivo:

El estudiante conocerá cada una de las secciones que integran el código de optimización

topológica, como se debe de crea el archivo (.m) en MATLAB y como se ejecuta el análisis.

Marco Teórico:

La optimización topológica comienza con la creación de un modelo 3D en la fase de

borrador, en el que se aplicaran las diferentes cargas o fuerzas para la pieza (una

presión sobre las lengüetas de sujeción, por ejemplo).

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.

Page 3: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

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 Home → 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

Page 4: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

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

“topp1”.

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. El código que se proporcionó viene preparado para optimizar un dominio de diseño con cargas y restricciones, este caso en particular, es evaluado y simulado cuando escribimos desde la línea de comando de MATLAB “topp1(60,20,0.5,3.0,1.5)”.

Page 5: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Resultados:

a) El documento presenta una implementación compacta de Matlab de un código de

optimización de topología para minimizar el cumplimiento de estructuras cargadas

estáticamente. El número total de líneas de entrada de Matlab es 99, incluido el

optimizador y la subrutina de elementos finitos. Las 99 líneas se dividen en 36 líneas

para el programa principal, 12 líneas para el optimizador basado en Criterios de

Optimidad, 16 líneas para un filtro de independencia de malla y 35 líneas para el

código de elementos finitos. De hecho, excluyendo las líneas de comentarios y las

líneas asociadas con la salida y el análisis de elementos finitos, se muestra que solo

se requieren 49 líneas de entrada de Matlab para resolver un problema de

optimización de topología bien planteado. Al agregar tres líneas adicionales, el

programa puede resolver problemas con múltiples casos de carga. El código está

destinado a fines educativos.

b) Código de 99 líneas %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp1(nelx,nely,volfrac,penal,rmin) % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2; 2*n1+1;2*n1+2],1); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc); % PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc)

Page 6: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),1); U =sparse(2*(nely+1)*(nelx+1),1); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(2,1) = -1; fixeddofs =union([1:2:2*(nely+1)],[2*(nelx+1)*(nely+1)]); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

.

Page 7: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Figura 1.4 Dominio de diseño, carga y restricciones propuestas.

Figura 1.5 Imagen del diseño optimizado.

c) Definir cada una de las variables de entrada. Conociendo que pusimos dentro del

programa ‘topp1(60,20,0.5,3.0,1.5)¿

▪ nelx y nely: Son el número de elementos en las direcciones horizontales (x) y

verticales (y).

▪ volfrac: Es la fracción de volumen.

▪ penal: Es el poder de penalización.

▪ rmi: Es el tamaño del filtro (dividido por el tamaño del elemento).

Page 8: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Impresión de pantalla

Selfie individual

Page 9: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Conclusión:

A lo largo de este reporte pudimos hacer uso de razón y nos percatamos que se puede usar

Matlab para generar un análisis de elemento finito para objetos de ámbito simple y que se

pueden usar para diferentes casos, además de generar un buen soporte que nos ayudará

mucho en este caso. A partir de lo que aprendimos, nos damos cuenta que los softwares de

hoy en día nos apoyan mucho con cálculos e impresiones que nos facilitan el poder generar

nuevas ideas e ir más rápido en nuestras investigaciones.

Referencias:

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

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

2. 3D Natives (2017). La optimización topológica en la impresión 3D. Recuperado de:

https://www.3dnatives.com/es/optimizacion-topologica-10012017/

Page 10: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Laboratorio de Biomecánica

Práctica 2

Diseño del marco de una bicicleta

M.I. Dante Ferreyra Méndez

Alumno: Jesús Alejandro Medellín Gasca

Matricula: 1724030

Carrera: Ingeniería en Mecatrónica

Semestre Agosto - Diciembre 2019

Plan de estudios: 401

Día: Jueves Hora Clase: V6

Brigada: 416

Fecha: 13 de septiembre de 2019

San Nicolás de los Garza, Nuevo León

Page 11: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

PRACTICA #2

Diseño del marco de una Bicicleta

Objetivo:

Aprender a utilizar la lógica del código de Matlab para colocación de cargas, apoyos y fuerzas dentro de un espacio de diseño propuesto.

Marco Teórico:

Hay diferencias entre las bicicletas de los hombres y de las mujeres y una de ellas es el

diseño del cuadro. La bicicleta de las mujeres está diseñada para hacer más fácil de montar

mientras que las bicicletas del hombre no. En esta práctica vamos a optimizar el diseño del

marco para mejorarlo.

El problema de diseño se ilustra en la figura 2.1. Nuestra tarea es construir la parte frontal

del marco para que la bicicleta sea lo más rígido posible. Esta parte se conecta con el

manubrio y el asiento. El dominio de diseño se ilustra esquemáticamente en la figura 2.2. Consideraciones:

❖ El manubrio produce una fuerza en dirección vertical.

❖ Bastidor trasero actúa como soporte.

❖ Tenemos que declarar una parte vacía del domino de diseño para hacer espacio para la rueda delantera.

Figura 2.1 Problema de diseño Figura 2.2. Vista esquemática del dominio de diseño

Page 12: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Desarrollo:

Primero vamos a considerar solo la carga y el apoyo. Para esto editaremos líneas 80 y 81 del código de matlab:

▪ 80 F (2,1)=1; ▪ 81 fixeddofs = 2 * nelx * (nely + 1) + 1:2 * (nelx + 1) * (nely + 1);

Guarde el código en el mismo directorio. Luego ejecute Matlab con:

▪ top(20,20,0.33,3.0,1.5)

El resultado debe ser similar a la figura 2.3. El dominio de diseño se discretiza 20 veces en

20 elementos finitos. Tal vez piense que la magnitud de la fuerza no es realista y que el

módulo de Young debe ser corregido en la línea 89. Comúnmente E=2 *1011N/m2.

Figura 2.3 : Resultado de la primera optimización

También el tamaño de los elementos finitos se define como una1 vez por 1 unidad. Estos

valores se tienen que cambiar para obtener valores correctos de optimización, pero no

siempre es necesario cambiarlos ya que son solo correcciones de las escalas. Sin embargo,

si se quieren corregir se puede modificar la línea 41 para mantener la precisión mientras se

resuelven las ecuaciones: ▪ 41 while ((l2-l1)/l2 > 1e-4)

Page 13: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Penalización y filtro de radio

La sintaxis de la función es:

▪ top(nelx,nely,volfrac,penal,rmin)

Donde las variables denotan lo siguiente:

▪ nelx es el número de elementos finitos en la dirección horizontal.

▪ nely es el número de elementos finitos en la dirección vertical.

▪ volfrac es la fracción de volumen en el dominio de diseño.

▪ penal es la penalización de las densidades intermedias. Una penalización alta hará

la solución en blanco y negro, es decir los elementos finitos estarán llenos o vacíos.

Una penalización = 1 significa que no hay penalización de las densidades

intermedias.

▪ rmin es un radio de filtro para un filtro que hace que el diseño de malla-independiente.

Definición de regiones vacías. El resultado en la figura 2.3 no deja ninguna zona hueca para la rueda delantera. Vamos a

llamar a los elementos finitos en este pasivo vacío, y definir una matriz con ceros en

elementos libres y seres en pasiva. Agregue las siguientes líneas al código de MATLAB

entre la línea 5 y 6 para hacer esto:

for ely = 1:nely for elx = 1:nelx

if ((elx)^2+(ely-nely)^2) < (0.65*nelx)^2

passive(ely,elx) = 1; else

passive(ely,elx) = 0; end

end

end x(find(passive))=0.001;

El último comando inicializa todos los elementos de la zona hueca en el bajo valor 0.001.

También tenemos que actualizar la línea 29 y 40 e insertar una línea adicional entre 43 y

44: ▪ 29 [x] = OC(nelx,nely,x,volfrac,dc,passive);

▪ 40 function [xnew]=OC(nelx,nely,x,volfrac,dc,passive)

▪ 43b xnew(find(passive)) = 0.001;

Page 14: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Realiza estos cambios y ejecuta con: ▪ top(20,20,0.33,3,1.5)

Esto va a generar algo más parecido a la bicicleta para un hombre, el marco frontal se muestra en la figura 2.4.

Figura 2.4 : Resultado de la segunda optimización

REPORTE #2

Ahora vuelva a realizar el ejercicio anterior y cambie los valores de los parámetros para responder a las siguientes preguntas:

1. ¿El diseño final depende del tamaño de mallado? Compare el resultado con los siguientes comandos:

top(12,12,0.33,3.0,0.9);

top(16,16,0.33,3.0,1.2);

top(20,20,0.33,3.0,1.5);

Page 15: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

2. ¿Cuán mejor es el resultado del diseño si no exigimos que sea en blanco y negro? Comprobar el cumplimiento de diseño final de los siguientes casos:

top(20,20,0.33,1.0,1.5);

top(20,20,0.33,3.0,1.5);

3. Ahora vamos a estudiar el filtro de mallado. El filtro se desactiva eligiendo un rmin

menor que 1 o poniendo la línea 27 como comentario para que el programa ignore la

instrucción. ➢ 27 % [dc] = check(nelx,nely,rmin,x,dc);

top(20,20,0.33,3.0,1.5);

Con filtro Sin filtro

4. Código del programa editado %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp1(nelx,nely,volfrac,penal,rmin) % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; for ely = 1:nely

Page 16: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

for elx = 1:nelx if ((elx)^2+(ely-nely)^2) < (0.65*nelx)^2 passive(ely,elx) = 1; else passive(ely,elx) = 0; end end end x(find(passive))=0.001; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2; 2*n1+1;2*n1+2],1); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; end end % FILTERING OF SENSITIVITIES %[dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc,passive); % PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc,passive) l1 = 0; l2 = 100000; move = 0.2; while ((l2-l1)/l2 > 1e-4) lmid = 0.5*(l2+l1); xnew(find(passive))=0.001 xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2);

Page 17: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),1); U =sparse(2*(nely+1)*(nelx+1),1); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(2,1) = 1; fixeddofs =2*nelx*(nely+1)+1:2*(nelx+1)*(nely + 1); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 18: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Impresión de pantalla

Selfie individual

Page 19: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Conclusión: Para empezar en la primera instrucción que nos dio la práctica somos capaces de observar que efectivamente el diseño final depende mucho del tamaño del mallado. Al exigir que el resultado no sea en blanco y negro podemos ver que se pierde la nitidez del diseño y se ve muy diferente. Por último, al aplicarle un filtro podemos suavizar los bordes del resultado final de diseño para poder obtener una imagen de una manera limpia comparandola con la anterior. Con esto podemos ver que podemos hacer varios diseños con las diferentes funciones dentro del código.

Referencias:

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

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

2. 3D Natives (2017). La optimización topológica en la impresión 3D. Recuperado de:

https://www.3dnatives.com/es/optimizacion-topologica-10012017/

Page 20: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Laboratorio de Biomecánica

Práctica 3

Diseño de la estructura de un panorámico

M.I. Dante Ferreyra Méndez

Alumno: Jesús Alejandro Medellín Gasca

Matricula: 1724030

Carrera: Ingeniería en Mecatrónica

Semestre Agosto - Diciembre 2019

Plan de estudios: 401

Día: Jueves Hora Clase: V6

Brigada: 416

Fecha: 11 de octubre de 2019

San Nicolás de los Garza, Nuevo León

Page 21: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

1

Índice

Objetivo……………………………………………………………………………………..2

Marco teórico……………………………………………………………………………....2

Desarrollo…………………………………………………………………………………..3

Reporte…………………………………………………………….……………………….4

Evidencias……………………………………………………………………………...…12

Conclusiones………………………………………………………………..……………13

Referencias……………………………………………………....…..……………..……13

Page 22: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

2

PRACTICA #3

Diseño de la estructura de un Panorámico Objetivo:

Desarrollar en el estudiante la capacidad de análisis, implementación y solución de

un problema propuesto.

Marco Teórico:

Los panorámicos se exponen a altas ráfagas de viento, por lo que su estructura

ocupa ser muy rígida para soportar estas fuerzas. El espacio de diseño a evaluar

será de 2 dimensiones, las cargas y los apoyos de observan en la figura 3.1

Figura 3.1 Imagen del Panorámico

Page 23: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

3

En la figura 3.2 se puede ver el espacio de diseño para esta práctica. Se espera una

fracción volumétrica aproximada de 0.20% del espacio de diseño. Supongamos que

el panorámico es muy rígido 1, y sus patas son del mismo material que el marco.

Desarrollo:

Se tomaran ciertas consideraciones para la solución de esta práctica: 5 cargas, los

apoyos tendrán restricciones en “X”,”Y” y el espacio de diseño para esta práctica

será de:

Figura 3.2 Espacio de diseño

Page 24: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

4

Reporte:

Realizar el ejercicio con el espacio de diseño propuesto

Fuerzas múltiples

Para empezar tenemos que editar nuestro script topp, se tiene guardado como

topp3, para poder ingresar las fuerzas que requerimos, si observamos nos

encontramos con 5 y para cambiar el anclaje del espacio de diseño a otra posición

se tiene que cambiar la línea con la instrucción fixeddofs, para esto se modificaran

las siguientes líneas:

Figura 1. Código original

Figura 2. Líneas modificadas

Figura 3. Código original

Figura 4. Líneas modificadas

Page 25: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

5

Empotramiento diagonal (elementos pasivos)

Para crear el empotramiento diagonal, o crear el espacio en blanco para recrear el

empotramiento en la parte inferior derecha; en el archivo del uso del código de 99

líneas existe una sección donde se habla de elementos pasivos el cual sirve de

ayuda para determinar un espacio en blanco, en el ejemplo del archivo viene como

hacer un circulo, y nosotros necesitamos un rectángulo y un triángulo para esto se

modificaron y/o agregaron las siguientes líneas:

Figura 5. Código original

Figura 6. Líneas modificadas

Figura 7. Código original

Figura 8. Líneas modificadas

Page 26: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

6

Figura 9. Código original

Figura 10. Líneas modificadas

Figura 11. Código original

Figura 12. Líneas modificadas

Page 27: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

7

Resultado de la optimización

Figura 13. Resultado en la ventana de comando y editor

Figura 14. Diseño resultante para el problema planteado

Page 28: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

8

Código completo con las modificaciones finales

%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp3(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; %Declarando vacio for ely = 1:nely for elx = 1:nelx if (((ely-(nely*0.5)<(2*elx)-(1.36*nelx)) |(ely <(1+nely*0.5))) &(elx

>(1+nelx)*0.6666)) passive(ely,elx) = 1; else passive(ely,elx) = 0; end end end x(find(passive))=0.001; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); %13 OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; %19 dc(ely,elx) = 0.; for i = 1:5 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2;

2*n1+1;2*n1+2],1); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; end end end %25 FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); %27 DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc,passive); %29 PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-

6); end %40 %%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc,passive)

Page 29: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

9

l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); xnew(find(passive)) = 0.001; if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %65 %%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),5); U =zeros(2*(nely+1)*(nelx+1),5); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(2*nelx*(nely+1)+2,1) = 1; F(2*nelx*(nely+1)+(nely/4),2) = 1; F(2*nelx*(nely+1)+(nely/2),3) = 1; F(2*nelx*(nely+1)+(nely),4) = 1; F(2*nelx*(nely+1)+(nely*1.2),5) = 1;

fixeddofs =2*(nely+1):2*(nely+1):2*(nelx+1)*(nely+1); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3;

Page 30: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

10

k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 31: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

11

Impresión de pantalla

Selfie individual

Page 32: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

12

Conclusiones:

En esta reporte de laboratorio mostramos lo que se realizó a través de la práctica,

esto usando Matlab, observamos que el tiempo para la realización de ésta fue mayor

a la anteriores por el proceso que tuvo que llevar el software para optimizar los

esfuerzos, además de ver los espacios en blanco que son elementos pasivos que

necesitan ser tomados en cuenta para el diagrama.

A partir de lo que hicimos podemos concluir que aunque se crea que algo no se

toma en cuenta dentro de un sistema de esfuerzos por ser un espacio en blanco,

esto no debe ser así, debemos darle la importancia para el diseño óptimo del

diagrama.

Referencias:

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

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

Denmark.

2. 3D Natives (2017). La optimización topológica en la impresión 3D.

Recuperado de: https://www.3dnatives.com/es/optimizacion-topologica-

10012017/

Page 33: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Laboratorio de Biomecánica

Práctica 4

Refuerzo del cable de un teleférico

M.I. Dante Ferreyra Méndez

Alumno: Jesús Alejandro Medellín Gasca

Matricula: 1724030

Carrera: Ingeniería en Mecatrónica

Semestre Agosto - Diciembre 2019

Plan de estudios: 401

Día: Jueves Hora Clase: V6

Brigada: 416

Fecha: 25 de octubre de 2019

San Nicolás de los Garza, Nuevo León

Page 34: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

1

Índice

Índice....................................................................................................................................1

Objetivo................................................................................................................................2

Marco teórico........................................................................................................................2

Desarrollo……………………….............................................................................................2

Reporte…..........................................................................................................................…3

Evidencias………….........................................................................................................…10

Conclusión...........................................................................................................................11

Referencias..........................................................................................................................11

Page 35: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

2

PRACTICA #4

Refuerzo del cable de un Teleférico

Objetivo:

Introducir al estudiante en un estudio con múltiples cargas y que tome en consideración cuales son las implicaciones que esto conlleva.

Marco teórico: Ventajas del cable teleférico:

Alta resistencia de tensión, lo que resulta en el desempeño de cables de rendimiento superior (= alta carga de rotura para el diámetro de cable establecido).

Excelente ductilidad del alambre, lo cual resulta en propiedades de torsión de la cuerda óptimas a la fatiga.

Alambre adecuado para usos compactos y no compactos.

Gran utilidad y confiabilidad de rendimiento. Aplicaciones:

Deporte y ocio.

Alambre para vías de cuerda aérea.

Alambres para cables para remolques de esquíes (elevadores de persona).

Alambres para cables para elevadores de sillas y elevadores de góndola.

Alambre para cables de transporte para funiculares.

Alambre para teleféricos para transporte de personas.

Alambre para cable para transporte de material (grúas de cuerda/vías de cuerda para fletes).

Desarrollo:

El teleférico de la figura 1 necesita un refuerzo en su apoyo. Sugiera un refuerzo según la información dada en la figura 2.

Figura 1: Teleférico Figura 2: Espacio de diseño

Page 36: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

3

Al cuidador del teleférico también le gustaría que se hicieran mejoras para que la estructura

pueda llevar dos teleféricos a la vez, como se ilustra en la figura 3. Este último caso implica

considerar múltiples cargas.

Figura 3: Espacio de diseño para dos cargas.

REPORTE

1. Realizar los ejercicios tanto de una sola carga como el de múltiples cargas. Ejercicio 1. Modificación en el código: Declaración del vacío en la figura:

Declaración de fuerza:

Page 37: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

4

Ejercicio 2.

Modificaciones en el código:

Declaración de vacío de la figura T:

Declaracion de fuerzas:

Resultado de la optimización de la figura 1:

Page 38: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

5

Resultado optimización de la figura 2:

Código completo con las modificaciones finales Figura 1

%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, OCTOBER 1999 %%% function new_pr42_f(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; for ely = 1:nely for elx = 1:nelx if ely>21 if elx<31 passive(ely,elx) = 1; else passive(ely,elx) = 0; end end end end x(find(passive))=0.001; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS

Page 39: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

6

[KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; dc(ely,elx)=0.; for i=1:2 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2; 2*n1+1;2*n1+2],i); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)* Ue'*KE*Ue; end end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc,passive); % PRINT RESULTS change = max(max(abs(x-xold))); disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ... 'Vol.:' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc,passive) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); xnew(find(passive))=0.001; if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1): min(i+round(rmin),nelx) for l = max(j-round(rmin),1): min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),2); U = sparse(2*(nely+1)*(nelx+1),2); for ely = 1:nely for elx = 1:nelx

Page 40: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

7

n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(40,1) = -1; fixeddofs = 2*(nely+1):2*(nely+1):2*(nelx+1)*(nely+1); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)* [ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Figura 2

%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, OCTOBER 1999 %%% function new_pr42_f(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; for ely = 1:nely for elx = 1:nelx if ely>21 if elx<21 passive(ely,elx) = 1; elseif elx>41 passive(ely,elx)=1; else passive(ely,elx) = 0; end end end end x(find(passive))=0.001; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.;

Page 41: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

8

for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; dc(ely,elx)=0.; for i=1:2 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2; 2*n1+1;2*n1+2],i); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)* Ue'*KE*Ue; end end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc,passive); % PRINT RESULTS change = max(max(abs(x-xold))); disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ... 'Vol.:' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc,passive) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); xnew(find(passive))=0.001; if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1): min(i+round(rmin),nelx) for l = max(j-round(rmin),1): min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),2); U = sparse(2*(nely+1)*(nelx+1),2); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely;

Page 42: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

9

edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(40,1) = -1.; F(9760,2)=1.; fixeddofs = 2*(nely+1):2*(nely+1):2*(nelx+1)*(nely+1); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)* [ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 43: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

10

Impresión de pantalla

Selfie individual

Page 44: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

11

Conclusión:

En esta reporte de laboratorio mostramos lo que se realizó a través de la práctica,

esto usando Matlab, observamos que el tiempo para la realización de ésta fue mayor a la

anteriores por el proceso que tuvo que llevar el software para optimizar los esfuerzos,

además de ver los espacios en blanco que son elementos pasivos que necesitan ser

tomados en cuenta para el diagrama.

Se puede observar que en los resultados de los casos propuestos se tiene una

geometrica muy similar entre ellos. En el caso de dos cargas, este como las fuerzas son

aplicadas en opuestos simetricos la forma de pieza es simetrica en el eje Y.

Empezando con lo que hicimos podemos concluir que aunque se crea que algo no

se toma en cuenta dentro de un sistema de esfuerzos por ser un espacio en blanco, esto no

debe ser así, debemos darle la importancia para el diseño óptimo del diagrama.

Referencias:

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

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

2. Bakaert. (2018) Cable de alambre para teleféricos (vías de cuerda aérea/cuerdas

para montañas/telesquí/vías para materiales). Recuperado de:

https://www.bekaert.com/es-MX/productos/productos-de-consumo/deporte-y-

ocio/cable-de-alambre-para-telefericos-vias-de-cuerda-aerea-cuerdas-para-

montanas-telesqui-vias-para-materiales

Page 45: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

Universidad Autónoma de Nuevo León

Facultad de Ingeniería Mecánica y Eléctrica

Laboratorio de Biomecánica

Práctica 5

Optimización de una prótesis de pie

M.I. Dante Ferreyra Méndez

Alumno: Jesús Alejandro Medellín Gasca

Matricula: 1724030

Carrera: Ingeniería en Mecatrónica

Semestre Agosto - Diciembre 2019

Plan de estudios: 401

Día: Jueves Hora Clase: V6

Brigada: 416

Fecha: 8 de noviembre de 2019

San Nicolás de los Garza, Nuevo León

Page 46: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

1

Índice

Índice .................................................................................................................... 1

Objetivo ................................................................................................................ 2

Marco teórico ........................................................................................................ 2

Desarrollo ............................................................................................................. 4

Reporte ................................................................................................................ 5

Evidencias ............................................................................................................ 12

Conclusión............................................................................................................ 13

Referencias .......................................................................................................... 13

Page 47: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

2

PRACTICA #5

Optimización de una Prótesis de Pie

Objetivo:

Proponer el diseño de una prótesis de pie para los diferentes estadios

dentro de la marcha humana

Marco Teórico:

La locomoción proviene del fenómeno físico conocido como movimiento. Así,

el movimiento siempre significa un cambio de posición en el espacio. Es el

movimiento que permite que el sujeto (ya sea una persona o una máquina) se

desplace y, además de adquirir otra posición, cambie de lugar. Es una posibilidad

que sólo tienen los seres vivos y algunas máquinas o aparatos creados por el ser

humano que, de todas maneras, deben contar con algún método de propulsión

como motores o energía.

El conocimiento de la locomoción humana normal es la base del tratamiento

sistemático y del manejo de la marcha patológica, especialmente cuando se usan

prótesis y ortesis.

El caminar o andar de una persona, se define como la repetición de una serie de

movimientos simultáneos, que desplazan el cuerpo sobre una línea de progresión

deseada. Y al mismo tiempo mantienen una postura estable, soportando el peso

corporal.

La movilidad libre de las articulaciones y el trabajo que desempeñan los músculos

es importante para el éxito de esta tarea. Estos últimos deben actuar en el momento

preciso y con la intensidad necesaria. La falta de ciertas acciones durante la marcha

debe ser sustituida por otras, con el fin de mantener la estabilidad y la progresión

deseada.

Page 48: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

3

Ciclo de la marcha El ciclo de la marcha comienza cuando el pie contacta con el suelo y termina con el

siguiente contacto con el suelo del mismo pie. Los dos mayores componentes del

ciclo de la marcha son: la fase de apoyo y la fase de balanceo (Figura 1). Una pierna

está en fase de apoyo cuando está en contacto con el suelo y está en fase de

balanceo cuando no contacta con el suelo.

Figura 1. Fases en la Marcha Humana.

La longitud del paso completo es la distancia lineal entre los sucesivos puntos de

contacto del talón del mismo pie. Longitud del paso es la distancia lineal en el plano

de progresión entre los puntos de contacto de un pie y el otro pie (Figura 2).

Figura 2. Longitud de Paso.

Page 49: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

4

Desarrollo:

Para la realización de esta práctica se analizara el comportamiento de un solo pie dentro de las 3 fases de la marcha humana:

Normal (El talón y área metatarsial son los apoyos, la fuerza se aplica sobre el tobillo con una fuerza de 500N)

Despegue(El área metatarsial es el apoyo, la fuerza de 500N se aplica sobre el tobillo con un ángulo de 30º)

Apoyo (El área del talón es el apoyo, la fuerza de 500N se aplica sobre el tobillo con un ángulo de 60º)

Page 50: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

5

REPORTE

1. Realizar las simulaciones para los tres estados de las marcha y compare los resultados obtenidos.

2. Imprima cada uno de los códigos con sus modificaciones realizadas. 1.

Page 51: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

6

2. Código del ejercicio 1 %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; dc(ely,elx)=0.; for i=1:5 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2;

2*n1+1;2*n1+2],i); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)*

Ue'*KE*Ue; end end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc); % PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-

6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end

Page 52: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

7

end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),5); U =sparse(2*(nely+1)*(nelx+1),5); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(3222,1) = -1; F(3782,2) = -1; F(2662,3) = -1; F(2942,4) = -1; F(3502,5) = -1; fixeddofs = union([560:2*(nely+1):1260],[3920:2*(nely+1):4620]); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 53: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

8

Código del ejercicio 2 %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; dc(ely,elx)=0.; for i=1:5 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2;

2*n1+1;2*n1+2],i); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)*

Ue'*KE*Ue; end end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc); % PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-

6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc)

Page 54: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

9

dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),5); U =sparse(2*(nely+1)*(nelx+1),5); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(3222,1) = -1; F(3782,2) = -1; F(2662,3) = -1; F(2942,4) = -1; F(3502,5) = -1; fixeddofs = [3920:2*(nely+1):4620]; alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 55: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

10

Código del ejercicio 3 %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLESIGMUND, OCTOBER 1999 %%% function topp(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; dc(ely,elx)=0.; for i=1:5 Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1; 2*n2+2;

2*n1+1;2*n1+2],i); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = dc(ely,elx)-penal*x(ely,elx)^(penal-1)*

Ue'*KE*Ue; end end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx,nely,x,volfrac,dc); % PRINT RESULTS change = max(max(abs(x-xold))); disp(['It.:' sprintf('%4i',loop) 'Obj.:' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) % PLOT DENSITIES colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-

6); end %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1); xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(xnew)) - volfrac*nelx*nely > 0; l1 = lmid; else l2 = lmid; end end %%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc)

Page 56: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

11

dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0; for k = max(i-round(rmin),1):min(i+round(rmin),nelx) for l = max(j-round(rmin),1):min(j+round(rmin), nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac); dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end end %%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%% function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),5); U =sparse(2*(nely+1)*(nelx+1),5); for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1;2*n2+2;2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADSAND SUPPORTS(HALF MBB-BEAM) F(3222,1) = -1; F(3782,2) = -1; F(2662,3) = -1; F(2942,4) = -1; F(3502,5) = -1; fixeddofs = [560:2*(nely+1):1260]; alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING 127 U(freedofs,:) = K(freedofs,freedofs) \F(freedofs,:); U(fixeddofs,:)= 0; %%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%% function [KE]=lk E = 1.; nu = 0.3; k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8]; KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];

Page 57: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

12

Impresión de pantalla

Selfie individual

Page 58: Práctica 1 Descripción y uso de código de optimización ...labmtc.fime.uanl.mx/@acad_mi/@479/Muestra479.pdfpantalla principal de MATLAB. Para la versión R2010a del software, el

13

CONCLUSION

A lo largo de este reporte pudimos hacer uso de razón y nos percatamos que se puede usar Matlab para generar un análisis de elemento finito para objetos de ámbito simple y que se pueden usar para diferentes casos, además de generar un buen soporte que nos ayudará mucho en este caso. A partir de lo que aprendimos, nos damos cuenta que los softwares de hoy en día nos apoyan mucho con cálculos e impresiones que nos facilitan el poder generar nuevas ideas e ir más rápido en nuestras investigaciones. Así mismo, es importante destacar que la movilidad libre de las articulaciones y el trabajo que desempeñan los músculos es importante para lograr el mejor diseño posible. La falta de ciertas acciones, debe ser sustituida por otras, con el fin de mantener la estabilidad y la progresión. El uso de estas herramientas nos permite analizar nuestro diseño desde diferentes perspectivas. BIBLIOGRAFIA

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

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

Denmark.

3D Natives (2017). La optimización topológica en la impresión 3D.

Recuperado de: https://www.3dnatives.com/es/optimizacion-topologica-

10012017/

http://es.mathworks.com/products/matlab/index.html?s_tid=gn_loc_drop

http://mmc2.geofisica.unam.mx/cursos/tfs/TFSPresentaciones/Presentacion21Aaron.pdf

https://www.ecured.cu/Locomoción