Práctica 1 Descripción y uso de código de optimización...
Transcript of Práctica 1 Descripción y uso de código de optimización...
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
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.
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
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)”.
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)
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)];
.
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).
Impresión de pantalla
Selfie individual
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/
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
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
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)
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;
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);
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
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);
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)];
Impresión de pantalla
Selfie individual
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/
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
1
Índice
Objetivo……………………………………………………………………………………..2
Marco teórico……………………………………………………………………………....2
Desarrollo…………………………………………………………………………………..3
Reporte…………………………………………………………….……………………….4
Evidencias……………………………………………………………………………...…12
Conclusiones………………………………………………………………..……………13
Referencias……………………………………………………....…..……………..……13
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
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
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
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
6
Figura 9. Código original
Figura 10. Líneas modificadas
Figura 11. Código original
Figura 12. Líneas modificadas
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
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)
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;
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)];
11
Impresión de pantalla
Selfie individual
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/
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
1
Índice
Índice....................................................................................................................................1
Objetivo................................................................................................................................2
Marco teórico........................................................................................................................2
Desarrollo……………………….............................................................................................2
Reporte…..........................................................................................................................…3
Evidencias………….........................................................................................................…10
Conclusión...........................................................................................................................11
Referencias..........................................................................................................................11
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
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:
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:
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
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
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.;
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;
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)];
10
Impresión de pantalla
Selfie individual
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
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
1
Índice
Índice .................................................................................................................... 1
Objetivo ................................................................................................................ 2
Marco teórico ........................................................................................................ 2
Desarrollo ............................................................................................................. 4
Reporte ................................................................................................................ 5
Evidencias ............................................................................................................ 12
Conclusión............................................................................................................ 13
Referencias .......................................................................................................... 13
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.
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.
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º)
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.
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
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)];
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)
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)];
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)
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)];
12
Impresión de pantalla
Selfie individual
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