Contenido Ingreso de Datos ................................................................................................................................. 2 Ingreso de Plantilla SlopedTruss ..................................................................................................... 3 Ingreso de Plantilla VerticalTruss .................................................................................................... 4 Análisis................................................................................................................................................. 6 Análisis Lineal .................................................................................................................................. 6 Obtención de GDL libres y restringidos: ...................................................................................... 6 Fuerzas de Empotramiento: ........................................................................................................ 7 Análisis No lineal ............................................................................................................................. 9 Análisis No lineal por pasos ......................................................................................................... 9 Análisis No lineal rápido ............................................................................................................ 10 Resultados ......................................................................................................................................... 11 Ejemplo 1....................................................................................................................................... 11 Datos de entrada ....................................................................................................................... 11 Comparación Fuerzas Axiales .................................................................................................... 11 Comparación Desplazamientos ................................................................................................. 12 Comparación Reacciones .......................................................................................................... 13 Ejemplo 2....................................................................................................................................... 13 Datos de entrada ....................................................................................................................... 13 Comparación Fuerzas Axiales .................................................................................................... 14 Comparación Desplazamientos ................................................................................................. 15 Comparación Reacciones .......................................................................................................... 15 Ejemplo 3....................................................................................................................................... 16 Importación desde SAP2000 ..................................................................................................... 16 Comparación Fuerzas Axiales .................................................................................................... 17 Comparación Desplazamientos ................................................................................................. 17 Comparación Reacciones .......................................................................................................... 18 Ejemplo No lineal .......................................................................................................................... 18 Análisis paso a paso................................................................................................................... 19 Análisis rápido ........................................................................................................................... 20 Guardar Información ......................................................................................................................... 20 1 Ingreso de Datos Se puede utilizar la opción “En Blanco” para ingresar los datos desde cero. También se pueden utilizar plantillas para generar la matriz de coordenadas y conectividad de una manera más eficaz. La Figura 1 muestra las opciones que tiene el programa para empezar un análisis nuevo. Figura 1. Menú Archivo Nuevo El ingreso de Datos de una armadura nueva se realiza de acuerdo al Diagrama de Flujo 1: INICIO Escoger Opción "Nuevo" Leer: - Número de Divisiones - Longitud de División - Altura - Materiales - Secciones "Nuevo" = "En Blanco" Leer: - Coordenadas - Conectividad - Condicion de nodos - Fuerzas nodales - Cargas Distribuidas - Cambios de Temperatura - Errores de Fabricación - Materiales - Secciones Crear: - Coordenadas - Conectividad - Condición de nodos Leer: - Fuerzas nodales - Cargas Distribuidas - Cambios de Temperatura - Errores de Fabricación FIN Diagrama de Flujo 1. Ingreso de Datos A continuación, se muestra el código de la ventana Plantillas con el cual se recogen los datos: function BotonOK_Callback(hObject, eventdata, handles) handles.divisiones=str2num(get(handles.editDivisiones,'String')); handles.X=str2num(get(handles.editX,'String')); handles.Y=str2num(get(handles.editY,'String')); handles.Restr=get(handles.checkRestraints,'Value'); handles.sec=get(handles.TablaSecciones,'Data'); handles.mat=get(handles.TablaMateriales,'Data'); handles.secChord=get(handles.menuSeccionChords,'value'); handles.secBrace=get(handles.menuSeccionBraces,'value'); handles.matChord=get(handles.menuMaterialChords,'value'); handles.matBrace=get(handles.menuMaterialBraces,'value'); setappdata(0,'Variables',handles);%Envia variables a la ventana dibujarestructura close(Plantillas) %cierra la ventana Plantillas 2 Ingreso de Plantilla SlopedTruss La Figura 2 muestra la ventana en donde se recogen los datos necesarios para generar la geometría y propiedades de la armadura. Figura 2. Plantilla SlopedTruss A continuación, se indica parte del código de la ventana dibujarestructura para generar la armadura denominada SlopedTruss: function BotonSlopedTruss_Callback(hObject, eventdata, handles) setappdata(0,'tipo',1); %Envia a la ventana Plantillas: tipo Sloped uiwait(Plantillas) %Abre la ventana Plantillas variables=getappdata(0,'Variables'); %Recibe variables de la ventana Plantillas %Nombra las variables necesarias divisiones=variables.divisiones; X=variables.X; Y=variables.Y; Restr=variables.Restr; sec=variables.sec; mat=variables.mat; secChord=variables.secChord; secBrace=variables.secBrace; matChord=variables.matChord; matBrace=variables.matBrace; %Calcula el número de nodos y Elementos de la plantilla numNodos=2*divisiones+1; numElem=2*numNodos-3; %Establece condiciones en los nodos y las restricciones de desplazamiento cond=NaN(numNodos,3); cond(:,1)=[1:1:numNodos]; if Restr ==1 cond(1,2)=0; cond(1,3)=0; cond(divisiones+1,3)=0; end %Coordenadas coor=zeros(numNodos,3); conec=zeros(numElem,5); for i=1:divisiones+1 coor(i,1)=i;coor(i,2)=X*(i-1);coor(i,3)=0; end for i=divisiones+2:numNodos coor(i,1)=i;coor(i,2)=X/2+X*(i-(divisiones+2));coor(i,3)=Y; end 3 %Chords for i=1:divisiones conec(i,1)=i; conec(i,2)=i; conec(i,3)=i+1; conec(i,4)=mat(matChord,1); conec(i,5)=sec(secChord,1); end for i=divisiones+1:(divisiones*2-1) conec(i,1)=i; conec(i,2)=i+1; conec(i,3)=i+2; conec(i,4)=mat(matChord,1); conec(i,5)=sec(secChord,1); end %Braces c=1; for i=divisiones*2:(divisiones*3-1) conec(i,1)=i; conec(i,2)=c; conec(i,3)=1+c+divisiones; conec(i,4)=mat(matBrace,1); conec(i,5)=sec(secBrace,1); j=i+divisiones; conec(j,1)=j; conec(j,2)=c+1; conec(j,3)=1+c+divisiones; conec(j,4)=mat(matBrace,1); conec(j,5)=sec(secBrace,1); c=c+1; end Ingreso de Plantilla VerticalTruss La Figura 3 muestra la ventana en donde se recogen los datos necesarios para generar la geometría y propiedades de la armadura. Figura 3. Plantilla VerticalTruss A continuación, se indica parte del código de la ventana dibujarestructura para generar la armadura denominada VerticalTruss: 4 function BotonVerticalTruss_Callback(hObject, eventdata, handles) setappdata(0,'tipo',2); %Envia a ventana Plantillas: tipo Vertical uiwait(Plantillas) %Abre la ventana Plantillas variables=getappdata(0,'Variables'); %Recibe variables de la ventana Plantillas divisiones=variables.divisiones; X=variables.X; Y=variables.Y; Restr=variables.Restr; sec=variables.sec; mat=variables.mat; secChord=variables.secChord; secBrace=variables.secBrace; matChord=variables.matChord; matBrace=variables.matBrace; numNodos=2*(divisiones+1); numElem=5*divisiones+1; %Establece condiciones en los nodos y las restricciones de desplazamiento cond=NaN(numNodos,3); cond(:,1)=[1:1:numNodos]; if Restr ==1 cond(1,2)=0; cond(1,3)=0; cond(divisiones+1,3)=0; end %Coordenadas coor=zeros(numNodos,3); conec=zeros(numElem,5); for i=1:divisiones+1 coor(i*2-1,1)=i*2-1; coor(i*2-1,2)=X*(i-1); coor(i*2-1,3)=0; coor(i*2,1)=i*2; coor(i*2,2)=X*(i-1); coor(i*2,3)=Y; end %Chords for i=1:divisiones+1 conec(i,1)=i; conec(i,2)=i*2-1; conec(i,3)=i*2; conec(i,4)=mat(matChord,1); conec(i,5)=sec(secChord,1); end c=1; for i=divisiones+2:(divisiones*3+1) conec(i,1)=i; conec(i,2)=c; conec(i,3)=c+2; conec(i,4)=mat(matChord,1); conec(i,5)=sec(secChord,1); c=c+1; end c=1; %Braces for i=divisiones*3+2:(divisiones*4+1) conec(i,1)=i; conec(i,2)=c; conec(i,3)=c+3; conec(i,4)=mat(matBrace,1); conec(i,5)=sec(secBrace,1); c=c+2; end c=1; for i=divisiones*4+2:numElem c=c+2; conec(i,1)=i; conec(i,2)=c; conec(i,3)=c-1; conec(i,4)=mat(matBrace,1); conec(i,5)=sec(secBrace,1); end 5 Análisis El programa cuenta con la opción de realizar el análisis lineal de la armadura y también se puede obtener la curva pushover. Figura 4. Menú de Análisis Análisis Lineal El análisis lineal se realiza de acuerdo al Diagrama de Flujo 2. INICIO Leer: - Coordenadas - Conectividad - Condicion de nodos - Fuerzas nodales - Cargas Distribuidas - Cambios de Temperatura - Errores de Fabricación - Materiales - Secciones Obtener: - GDL Libres P - GDL Restringidos S Ordenar: - Desplazamientos U - Fuerzas nodales F - Fuerzas de Empotramiento - Fuerzas nodales F - Matriz de Rígidez Desplazamientos:Up=Kpp (Fp Kps Us) Reacciones:Fs=Ksp Up + Kss Us Femp Calcular Fuerzas en elementos - Ejes Globales - Ejes Locales FIN Diagrama de Flujo 2. Análisis Lineal Entre las partes más importantes del análisis lineal se encuentran la obtención y definición de los grados de libertad libres y restringidos, con los cuales se pueden definir los desplazamientos conocidos y desconocidos, así como también las fuerzas aplicadas y las reacciones a encontrar. Otro punto importante es la transformación de las cargas en los elementos a reacciones nodales. Obtención de GDL libres y restringidos: Los GDL libres y restringidos se obtienen de acuerdo al código de la ventana dibujarestructura: 6 function BotonCalcularLineal_Callback(hObject, eventdata, handles) coor=get(handles.TablaCoordenadas,'Data'); cond=get(handles.TablaCondiciones,'Data'); % “cond”: matriz de desplazamientos nodales donde los valores NaN indican GDL libres numNodos=size(coor,1); % Determina el número de nodos cont=1; restringidos=cond; restringidos(restringidos==0)=1; % Transforma desplazamiento 0 a valor 1 restringidos=restringidos./restringidos; % Factoriza todos los desplazamientos restringidos(isnan(restringidos))=0; % Transforma valores NaN a 0 for i=1:size(cond,1) % Crea el vector de GDL restringidos GDL_Restricciones(cont)=(cond(i,1)*2-1)*restringidos(i,2); cont=cont+1; GDL_Restricciones(cont)=(cond(i,1)*2)*restringidos(i,3); cont=cont+1; end GDL_Restricciones(GDL_Restricciones==0)=[]; % Elimina valores 0 de los restringidos GDL_Libres=1:2*numNodos; GDL_Libres(GDL_Restricciones)=[]; % vector de GDL libres Fuerzas de Empotramiento: Las fuerzas de empotramiento se determinan de acuerdo al Diagrama de Flujo 3: INICIO Desde i =1 hasta número de elementos Fin de Bucle For Fuerzas nodales + Fuerzas de Empotramiento Obtener propiedades del elemento i FIN pos_elem_CD=cargas distribuidas en elemento i pos_elem_Temp=cambios de temperatura en elemento i pos_elem_Fab=errores de fabricación en elemento i Desde j =1 hasta número de cargas distribuídas en elemento i Fin de Bucle For Desde j =1 hasta número de cambios de temperatura en elemento i -xoj = 0 -x1j = Longitud_i -y0j = Carga en nodo inicial -y1j = Carga en nodo final -m = (y1j y0j) / (x1j x0j) -y = y0j + m (x x0j) -R1= resolver la integral -R2= carga total j R1 Fin de Bucle For R1 = Tj E_i alfa_i Area_i R2 = R1 Asignar Reacciones a Rtemp_i a los GDL axiales F_eq_temp_i = F_eq_temp_i + {B}i ' Rtemp_i Asignar Reacciones a Rdist_i a los GDL axiales F_eq_dist_i = F_eq_dist_i + {B}i ' Rdist_i Actualizar Fuerzas de Empotramiento Fin de Bucle For Desde j =1 hasta número de errores de fabricación en elemento i R1 = Lj E_i Area_i Longitud_i R2 = R1 Asignar Reacciones a Rfab_i a los GDL axiales F_eq_fab_i = F_eq_fab_i + {B}i ' Rfab_i Diagrama de Flujo 3. Fuerzas de Empotramiento 7 El código utilizado para determinar las fuerzas de empotramiento se encuentra programado en la ventana dibujarestructura y se puede visualizar a continuación: for i=1:numElem A=sec(conec(i,5),2); E=mat(conec(i,4),2); alfa=mat(conec(i,4),3); xy=coor(new_conec(i,3) ,2:3)-coor(new_conec(i,2) ,2:3); [theta_rad,L(i)] = cart2pol(xy(1),xy(2)); theta(i) = radtodeg(theta_rad); B={}; B{i}= [cosd(theta(i)) sind(theta(i)) 0 0 -sind(theta(i)) cosd(theta(i)) 0 0 0 0 cosd(theta(i)) sind(theta(i)) 0 0 -sind(theta(i)) cosd(theta(i))] ; try pos_elem_CD=find(CD(:,1)==i); for j = 1:size(pos_elem_CD,1) pos_carga=pos_elem_CD(j,1); x0=0; y0=CD(pos_carga,3); x1=L(i); y1=CD(pos_carga,5); syms x syms r1 l=L(i); m=((y1-y0)/(x1-x0)); y=y0+m*(x-x0); areadistri =int(y,x,0,l); R1=solve(int((r1-int(y,x)),x,0,l),r1); R2=(areadistri-R1); Rdist(1,i)=R1; Rdist(3,i)=R2; Feq_Dist(i,:)=Feq_Dist(i,:)+((B{i}'*Rdist(:,i)))'; end end try pos_elem_Temp=find(Temp(:,1)==i); for j = 1:size(pos_elem_Temp,1) pos_carga=pos_elem_Temp(j,1); deltaT=Temp(pos_carga,2); R1=-deltaT*E*alfa*A; R2=-R1; Rtemp(1,i)=R1; Rtemp(3,i)=R2; Feq_Temp(i,:)=Feq_Temp(i,:)+((B{i}'*Rtemp(:,i)))'; end end try pos_elem_Fab=find(Fab(:,1)==i); for j = 1:size(pos_elem_Fab,1) pos_carga=pos_elem_Fab(j,1); deltaL=Fab(pos_carga,2); R1=-deltaL*E*A/L(i); R2=-R1; Rfab(1,i)=R1; Rfab(3,i)=R2; Feq_Fab(i,:)=Feq_Fab(i,:)+((B{i}'*Rfab(:,i)))'; end end Rs(1,Con_aux(i,3))=Rs(1,Con_aux(i,3))+Feq_Temp(i,1)+Feq_Dist(i,1)+Feq_Fab(i,1); Rs(1,Con_aux(i,4))=Rs(1,Con_aux(i,4))+Feq_Temp(i,2)+Feq_Dist(i,2)+Feq_Fab(i,2); Rs(1,Con_aux(i,5))=Rs(1,Con_aux(i,5))+Feq_Temp(i,3)+Feq_Dist(i,3)+Feq_Fab(i,3); Rs(1,Con_aux(i,6))=Rs(1,Con_aux(i,6))+Feq_Temp(i,4)+Feq_Dist(i,4)+Feq_Fab(i,4); end F=F+Rs'; 8 Análisis No lineal Análisis No lineal por pasos El análisis No lineal paso a paso se ejecuta de acuerdo al Diagrama de Flujo 4: INICIO Leer: - Coordenadas - Conectividad - Condicion de nodos - Fuerzas nodales - Cargas Distribuidas - Cambios de Temperatura - Errores de Fabricación - Materiales - Secciones Obtener: - GDL Libres P - GDL Restringidos S pasos = 1 flag = 0 Obtener para cada elemento: - Longitud - Area - Modulo de Elasticidad - Esfuerzo de Fluencia flag = 0 Y pasos límite de pasos Ordenar: - Fuerzas nodales F NO (Fin de Bucle While) SI Graficar curva Pushover ( F vs U ) GDL seleccionado Calcular K de cada elemento Calcular K de la armadura deltaUp=Kpp deltaFp Upasos+1 = deltaU + Upasos Fpasos+1 = deltaF + Fpasos FIN Fin de Bucle For Desde i = 1 hasta número de elementos Contar cuantos elementos han fluído SI Calcular: - Fuerza en elemento i - Esfuerzoi = Fuerzai /Areai Han fluído todos los elementos? Esfuerzoi >=Fy i flag =1 NO SI pasos=pasos+1 Reducir E i Diagrama de Flujo 4. Análisis No lineal paso a paso 9 NO Análisis No lineal rápido El análisis No lineal rápido se ejecuta de acuerdo al Diagrama de Flujo 5: INICIO Leer: - Coordenadas - Conectividad - Condicion de nodos - Fuerzas nodales - Cargas Distribuidas - Cambios de Temperatura - Errores de Fabricación - Materiales - Secciones Obtener: - GDL Libres P - GDL Restringidos S Ordenar: - Fuerzas nodales F Obtener para cada elemento: - Longitud - Area - Modulo de Elasticidad - Esfuerzo de Fluencia pasos = 1 flag = 0 F_aux 1,1=0 flag = 0 Y pasos número de elementos NO (Fin de Bucle While) SI Graficar curva Pushover ( F vs U ) GDL seleccionado Calcular K de cada elemento Calcular K de la armadura deltaUp=Kpp deltaFp Upasos+1 = deltaU FIN Desde i = 1 hasta número de elementos Fin de Bucle For Calcular: - Fuerza en elemento i - Límitei = fy i Areai - factori=Límitei F_aux i,pasos )/Fuerzai Fin de Bucle For Han fluído todos los elementos? SI flag =1 Fuerza= min(factor)*Fp deltaUp=Kpp Fuerza Upasos+1 = deltaU+Upasos Fpasos+1 = Fuerza+Fpasos Reducir E de Elementos que fluyen Desde i = 1 hasta número de elementos Calcular: - Fuerza en elemento i - Límite= fy i Areai - F1 = Fuerzai +F_aux i,pasos - F_aux i,pasos+1= min(F1,Límite) NO pasos=pasos+1 Diagrama de Flujo 5. Análisis No lineal Rápido 10 Resultados Ejemplo 1 Datos de entrada - Coordenadas Conectividad Condiciones en los nodos Movimiento del suelo de 0,5m en el nodo 2 en la dirección Y Fuerzas Verticales aplicadas en los nodos 9 y 10 Carga distribuida en el elemento 11 Variaciones de temperatura en elementos 13 y 18 Error de Fabricación en elemento 5 Dos tipos de secciones y un solo material A continuación, se muestran los datos ingresados en la ventana dibujarestructura del programa desarrollado en MATLAB (Figura 5) Figura 5. Datos de entrada del Ejemplo 1 en el programa Comparación Fuerzas Axiales A continuación (Figura 6), se indican los diagramas de fuerzas obtenidos en SAP2000 y en MATLAB, además se resaltan las fuerzas del elemento 12. 11 Figura 6. Comparación de Fuerzas Axiales del Ejemplo 1 Comparación Desplazamientos A continuación, se muestran los resultados de los desplazamientos, se puede visualizar la comparación de los desplazamientos obtenidos para el nodo 9 (Figura 7). Figura 7. Comparación de Desplazamientos del Ejemplo 1 12 Comparación Reacciones A continuación, se muestran las reacciones obtenidas al analizar el Ejemplo 1 (Figura 8) Figura 8. Comparación de Reacciones del Ejemplo 1 Ejemplo 2 Datos de entrada - Coordenadas Conectividad Condiciones en los nodos Movimiento del apoyo de 0,3m en el nodo 10 en la dirección X Fuerzas Nodales aplicadas en los nodos 1, 2 y 5 Cargas distribuidas en los elementos 3, 4 y 14 Variaciones de temperatura en elementos 20 y 21 Error de Fabricación en los elementos 2 y 6 Dos tipos de secciones y un solo material A continuación, se muestran los datos ingresados en la ventana dibujarestructura del programa desarrollado en MATLAB (Figura 9) 13 Figura 9. Datos de entrada del Ejemplo 2 en el programa Comparación Fuerzas Axiales A continuación (Figura 10), se indican los diagramas de fuerzas obtenidos en SAP2000 y en MATLAB, además se resaltan las fuerzas del elemento 16. Figura 10. Comparación de Fuerzas Axiales del Ejemplo 2 14 Comparación Desplazamientos A continuación, se muestran los resultados de los desplazamientos, se puede visualizar la comparación de los desplazamientos obtenidos para el nodo 8 (Figura 11). Figura 11. Comparación de Desplazamientos del Ejemplo 2 Comparación Reacciones A continuación, se muestran las reacciones obtenidas al analizar el Ejemplo 2 (Figura 12). Figura 12. Comparación de Reacciones del Ejemplo 2 15 Ejemplo 3 Importación desde SAP2000 Para este ejemplo se ha utilizado la opción de importar un archivo de Excel generado desde SAP2000. La opción de importación se puede apreciar en la Figura 13 Figura 13. Importar archivos desde SAP2000 - Coordenadas Conectividad Condiciones en los nodos Movimiento del suelo en el nodo 1: 0.5m en la dirección X y 1m en la dirección Y Fuerzas Verticales aplicadas en los nodos 12, 14, 16, 18, 20, 22 Cargas distribuidas en los elementos 22, 23, 24 y 26 Variaciones de temperatura en elementos 8, 9, 10, 11, 38, 39, 40 y 41 Error de Fabricación en elemento 26 Dos tipos de secciones y un solo material A continuación, se muestran los datos ingresados en la ventana dibujarestructura (Figura 14) Figura 14. Datos de entrada del Ejemplo 3 en el programa 16 Comparación Fuerzas Axiales A continuación (Figura 15), se indican los diagramas de fuerzas obtenidos en SAP2000 y en MATLAB, además se resaltan las fuerzas del elemento 36. Figura 15.Comparación de Fuerzas Axiales del Ejemplo 3 Comparación Desplazamientos A continuación, se muestran los resultados de los desplazamientos, se puede visualizar la comparación de los desplazamientos obtenidos para el nodo 9 (Figura 16). Figura 16. Comparación de Desplazamientos del Ejemplo 3 17 Comparación Reacciones A continuación, se muestran las reacciones obtenidas al analizar el Ejemplo 3 (Figura 17). Figura 17. Comparación de Reacciones del Ejemplo 3 Ejemplo No lineal En la Figura 18 se muestran los datos ingresados al programa para ejecutar el análisis no lineal: Figura 18. Datos de entrada para el Ejemplo de análisis No lineal Una vez que se ejecute cualquiera de las dos opciones de análisis no lineal, el programa solicita un factor necesario para reducir la rigidez de cada elemento que fluye (Figura 19) Figura 19. Ventana de ingreso de Factor de reducción de Rígidez 18 Una vez finalizado el análisis, se solicita el nodo y dirección para la curva pushover (Figura 20): Figura 20. Información requerida del nodo de control Análisis paso a paso Figura 21. Curva Pushover obtenida del análisis no lineal paso a paso 19 Análisis rápido Figura 22. Curva Pushover obtenida del análisis no lineal rápido Guardar Información El programa tiene las opciones de guardar los datos ingresados (Figura 23) en caso de que se requieran utilizar nuevamente y se pueden abrir buscándolos en el directorio de la computadora. Figura 23. Opciones de guardado de la información de las armaduras 20