Consultar ensayos de calidad


Metodo de lementos finitos placas triangulares - alcances, manual de usuario, código de programa en lenguaje matlab



FACULTAD DE INGENIERIA Y ARQUITECTURA


UNIVERSIDAD DE EL SALVADOR

MAESTRIA EN DISEÑO ESTRUCTURAL

SEGUNDA TAREA

Asignación de Proyecto: La tarea consiste en escribir un programa de elementos finitos para el analisis de esfuerzos y deformaciones de una estructura bidimensional, Programa escribir usando lenguaje MATLAB

INTRODUCCION:

El objetivo de esta tarea es presentar un modelo de Elementos Finitos que permita observar el comportamiento mecanico (patrón de deformación y esfuerzo) de una placa estructural y a su vez pueda ser el modelo utilizado en el analisis de elementos estructurales como losas, vigas, etc.
Se utilizó un programa Matlab de Elementos para desarrollar el calculo bajo el modelo de elementos finitos y de esta manera presentamos una herramienta que simule la condición de carga debida con respecto al peso propio de este tipo de estructuras


El problema se fundamenta en el enfoque plano debido a que la distribución de carga entre en el cuerpo es inicialmente desconocida.
Una solución típica para este tipo de sistemas requiere demasiadas iteraciones, volviéndose engorroso y tardada su solución, por tal motivo se formula dicho programa tomando en consideración las características abajo detalladas.
Los nodos y elementos del modelo se generaron basandonos en la forma CST.

OBJETIVO GENERAL:
Escribir un programa de elemento finito quepermita realizar analisis de esfuerzos y deformaciones de estructuras bidimensionales

OBJETIVO ESPECIFICO:
Programa en escritura MATLAB para calcular esfuerzos y deformaciones de estructuras bidimensionales.

ALCANCES:
* La discretización del continuo se limitara al uso de elementos triangulares (CST)
* No se considerara el efecto de la temperatura.
* Se contemplaran las fuerzas de tracción, así como también las fuerzas de campo y las puntuales.
* Se trataran los vectores de fuerza.
* Se consideraran las Matrices de rigidez .
* Se consideraran las condiciones de frontera.
* Los Esquemas de definición de los grados de libertad se podran retomar de los fundamentos vistos en cada ponencia diaria.

MANUAL DE USUARIO

Para el uso de este pequeño programa sera necesario que se tengan conocimientos basicos acerca del Método de Elementos Finitos, en relación a la información que debera ser extraída del problema a resolver.

PROBLEMA PROPUESTO DEL LIBRO DE CHANDRUPATLA 5.9 (DEL PARCIAL)

5.9- Resuelva el problema de esfuerzo plano en la figura P5.9 por el método CST

figura P5.9 : placa a resolver

Discretizacion:
Fig 1: coordenadas de los nodos

Para enumerar los desplazamientos Q se adopta la siguiente solucion:

Qy= 2i para un nudo i = 4 tenemos que:
Qy= 2(4) = 8
Qx=2(4) -1 = 7
Qx=2i-1
nudo i

Fig 2: grados de libertad de cada nudo.Luego se procede a extraer los datos para colocarlos en el fichero de entrada “PROB5.9CST.p2d”:
Donde:
NN= Número de nudos
NE= Número de elementos
NM= Número de materiales
NDIM= Número de coordenadas por nudo
NEN= Número de nudos por elemento
NDN= Número de grados de libertad por nudo
lx= longitud de la placa en dirección x
ly= longitud de la placa en dirección y
nelex= Número de triangulos en dirección x
neley= Número de triangulos en dirección y

ND= Número de Grados de Libertad con desplazamientos especificados (apoyos)
NL= Número de cargas aplicadas
NMPC= Número de constricciones multi-punto (no aplica)
FC= Número de fuerzas de cuerpo
TS= Número de tracciones superficiales

Quedando esta parte de la siguiente manera:


Luego se colocan las coordenadas de los nodos X y Y; estos los extraemos de la figura 1
Quedando esta parte de la siguiente manera:

Ahora procedemos a hacer el cuadro de conectividad de los CST; esto lo podemos extraer de la figura 1 o 2 Quedando esta parte de la siguiente manera:

En la primera columna se coloca el numero de elemento
N1, N2 y N3 es el numero de nodo que corresponde a cada vértice del elemento.
Mat es el tipo de material del elemento.
Espesor de cada elemento triangular
TempRise corresponde a la temperatura (en nuestro caso no aplica)

Ahora procedemos a encontrar las condiciones de contorno (los desplazamientos son cero)
Como se puede observar los grados de libertad donde el desplazamiento es cero corresponde alos nodos que se encuentran en la parte empotrada siendo estos los siguientes:

Luego procedemos a colocar las cargas externas aplicadas según el numero de nodo (ver figura 2 carga de 10 kN en el nodo 12 y es negativa por su dirección hacia abajo)

A continuación se colocan las fuerzas de cuerpo y las tracciones superficiales (para este ejemplo se coloca cero debido a que el peso de la placa en estudio es despreciable o no ha sido considerado al igual que las tracciones superficiales)

A continuación se coloca el modulo de Young (E) el alpha que para nuestro caso es cero y el Nu (V) que es 0.33, la fila 34 es la construcción del multipunto.



Habiendo finalizado con la entrada de datos en el fichero “PROB5.9CST.p2d” se procede a la ejecución del programa en MATLAB de la siguiente forma:

Click en run y desplega la siguiente ventana:

Click en aceptar y desplega otra ventana:

Si aparece una ventana donde no se encuentra el archivo de entrada “PROB5.9CST.p2d” se procede a buscarlo en la direccion que a sido guardado; luego de encontrarlo se selecciona y se da click en abrir

Y el programa se ejecuta de forma instantanea y genera un archivo de salida llamado “EJEMPLO DE APLICACION CHANDRUPATLA 5.9(PARCIAL).sal”

Tambien desplega en pantalla los elementos triangulares:

A continuacion se presenta los datos guardados en el archivo “EJEMPLO DE APLICACION CHANDRUPATLA 5.9(PARCIAL).sal”

Discusión:
Este ejemplo se desarrollo discretizando el continuo en 4 triangulosaun siendo las dimensiones de esta placa muy pequeñas (60 mm x 30 mm) esto a manera de poder ver que se puede realizar para varios triangulos CST.
En cuanto a los resultados podemos observar que los desplazamientos en los nodos 1 y 4 son cero esto debido a las condiciones de frontera.
En los desplazamientos de los nodos 2 y 3 estos son negativos tanto en X como en Y esto era de esperarse porque estan siendo comprimidos no asi para los nodos 5 y 6 en la dirección X que presentan desplazamientos positivo y por lógica los desplazamientos en Y que son negativos.

Fig. 3. Bosquejo de como se flexiono la placa en estudio.

En cuanto a los esfuerzos: en los elementos 1 y 2 se observan que se encuentran a compresión, no asi los elementos 3 y 4 que se encuentran en tracción.

En cuanto a las reacciones en los apoyos se observa que la reacción 1 que se encuentra en la dirección x es de 20,000 y en el nudo 7 es -20,000 anulandose así; y quedando en equilibrio estatico en las componentes en X; en cuanto a las componentes en Y (reacción 2 y 8) estas se equilibran con la fuerza externa de 10,000 N.

Este trabajo podría mejorarse si se implementara una rutina que visualizara los desplazamientos en los nodos (por ejemplo la fig 3); también si fuese en Excel ya que es mas manipulable, ademas si se le hiciera un entorno mas vistoso tanto al archivo de entrada como al de salida; en cuanto a los resultados que arroja se debería de tener en cuenta presentar la matriz de rigidez ya ensamblada y lamatriz de rigidez reducida.

CÓDIGO DE PROGRAMA (DATOS DE ENTRADA EN FICHERO “PROB5.9CST.p2d”)

CÓDIGO DE PROGRAMA EN LENGUAJE MATLAB

%Analisis de Estructuras Sólidas bidimensionales utilizando elementos
%tipo CST (triangulos de deformación constante)

%presenta:
%WILSON DANILO CHINCHILLA LOPEZ
%YAMIL ABELARDO YAFFAR UMAÑA
%UNIVERSIDAD DE EL SALVADOR

clear
%% %%%% Se obtiene el nombre del archivo de entrada
button = questdlg('Se debe especificar un archivo de entrada de datos','CST 2D','Aceptar','Cancelar','Aceptar');
if strcmp(button,'Aceptar')
[archentrada,ruta]=uigetfile('*.p2d','Archivo de entrada - CST 2D');
else
archentrada=0;
end
if archentrada==0
disp('No se ha especificado ningún archivo de entrada.');
break
end

%% %%%% SE INICIA LA LECTURA DEL ARCHIVO

%% Lectura de datos generales del problema
fid=fopen(archentrada);
saltar=fgets(fid);
titulo=fgets(fid);
saltar=fgets(fid);
NN=fscanf(fid,'%f',1); %Número de nudos
NE=fscanf(fid,'%f',1); %Número de elementos
NM=fscanf(fid,'%f',1); %Número de materiales
NDIM=fscanf(fid,'%f',1); %Número de coordenadas por nudo
NEN=fscanf(fid,'%f',1); %Número de nudos por elemento
NDN=fscanf(fid,'%f',1); %Número de grados de libertad por nudo
lx=fscanf(fid,'%f',1); %Número de grados de libertad por nudo
ly=fscanf(fid,'%f',1); %Número de grados de libertad por nudo
nelex=fscanf(fid,'%f',1); %Número de grados de libertad por nudoneley=fscanf(fid,'%f',1); %Número de grados de libertad por nudo
NQ=NDN*NN; %Calcula el número total de grados de libertad de la estructura
saltar=fgetl(fid);
saltar=fgetl(fid);
ND=fscanf(fid,'%f',1); %Número de Grados de Libertad con desplazamientos especificados (apoyos)
NL=fscanf(fid,'%f',1); %Número de cargas aplicadas
NMPC=fscanf(fid,'%f',1); %Número de constricciones multi-punto (no aplica)
FC=fscanf(fid,'%f',1); %Número de fuerzas de cuerpo
TS=fscanf(fid,'%f',1); %Número de tracciones superficiales
saltar=fgetl(fid);

%% Lectura de coordenadas de nudos
coordnud=zeros(NN,NDIM);
saltar=fgetl(fid);
for i=1:NN
N=fscanf(fid,'%f',1); %Número de nudos
coordnud(N,1)=fscanf(fid,'%f',1); %Coordenada X de nudo N
coordnud(N,2)=fscanf(fid,'%f',1); %Coordenada Y de nudo N
end
saltar=fgetl(fid);

%% Lectura de conectividad, material, area y temperatura de elementos
conecelem=zeros(NE,NEN);
MAT=zeros(NE,1);
espesor=zeros(NE,1);
DT=zeros(NE,1);

saltar=fgetl(fid);
for i=1:NE
N=fscanf(fid,'%f',1); %Número de elemento
conecelem(N,1)=fscanf(fid,'%f',1); %Número local 1
conecelem(N,2)=fscanf(fid,'%f',1); %Número local 2
conecelem(N,3)=fscanf(fid,'%f',1); %Número local 3
MAT(N)=fscanf(fid,'%f',1); %Tipo de material del elemento
espesor(N)=fscanf(fid,'%f',1); %Espesor del elemento
DT(N)=fscanf(fid,'%f',1); %Temperatura del elemento(no aplica)
end
saltar=fgetl(fid);

%% Lectura de desplazamientos especificados (condiciones frontera)
apoyos=zeros(ND,2);
saltar=fgetl(fid);
for i=1:ND
apoyos(i,1)=fscanf(fid,'%f',1); %Número de Grados de Libertad frontera (apoyo)
apoyos(i,2)=fscanf(fid,'%f',1); %Desplazamiento especificado
end
saltar=fgetl(fid);

%% Lectua de cargas aplicadas a cada DOF
F=zeros(NQ,1);
saltar=fgetl(fid);
for i=1:NL
N=fscanf(fid,'%f',1); %Número de grado de libertad
F(N)=fscanf(fid,'%f',1); %Carga aplicada en el libertad
end
saltar=fgetl(fid);

%% Lectura de Fuerzas de cuerpo
Fcuerpo=zeros(FC,3);
saltar=fgetl(fid);
for i=1:FC
Fcuerpo(i,1)=fscanf(fid,'%f',1); %Número de elemento
Fcuerpo(i,2)=fscanf(fid,'%f',1); %Fuerza de cuerpo X
Fcuerpo(i,3)=fscanf(fid,'%f',1); %Fuerza de cuerpo Y
end
saltar=fgetl(fid);

%% Lectura de Tracciones Superficiales
Tsup=zeros(TS,4);
saltar=fgetl(fid);
for i=1:TS
Tsup(i,1)=fscanf(fid,'%f',1); %Número de elemento
Tsup(i,2)=fscanf(fid,'%f',1); %Nudo inicial de la carga
Tsup(i,3)=fscanf(fid,'%f',1); %Nudo final de la carga
Tsup(i,4)=fscanf(fid,'%f',1); %Tracción superficial en nudo inicial
Tsup(i,5)=fscanf(fid,'%f',1); %Tracción superficial en nudo final
end
saltar=fgetl(fid);

%% Lectura de Propiedades de materiales
PM=zeros(NM,3);
saltar=fgetl(fid);
for i=1:NM
N=fscanf(fid,'%f',1); %Número de materialPM(N,1)=fscanf(fid,'%f',1); %Módulo de elasticidad
PM(N,2)=fscanf(fid,'%f',1); %Alpha del material (no aplica)
PM(N,3)=fscanf(fid,'%f',1); %NU del material
end
saltar=fgetl(fid);

%% Lectura de constricciones multi-punto B1*Qi+B2*Qj=B0
if NMPC>0
BT=zeros(NMPC,3);
MPC=zeros(NMPC,2);
saltar=fgetl(fid);
for i=1:NMPC
BT(i,1)=fscanf(fid,'%f',1);
MPC(i,1)=fscanf(fid,'%f',1);
BT(i,2)=fscanf(fid,'%f',1);
MPC(i,2)=fscanf(fid,'%f',1);
BT(i,3)=fscanf(fid,'%f',1);
end
end

fclose(fid); %Fin de lectura de datos y cierre del archivo de entrada

%% %%%% EVALUACIÓN DEL ANCHO DE BANDA

NBW=0;
for N=1:NE
NMIN=conecelem(N,1);
NMAX=conecelem(N,1);
for j=2:NEN
if NMIN>conecelem(N,j)
NMIN=conecelem(N,j);
end
if NMAX<conecelem(N,j)
NMAX=conecelem(N,j);
end
end
NTMP=NDN*(NMAX-NMIN+1);
if NBW<NTMP
NBW=NTMP;
end
end
for I=1:NMPC
NABS=abs(MPC(I,1)-MPC(I,2))+1;
if NBW<NABS
NBW=NABS;
end
end

%% %%%% ENSAMBLAJE DE MATRIZ DE RIGIDEZ GLOBAL BANDEADA

TLe=zeros(2*NDN);
S=zeros(NQ,NBW+1);
Bs=cell(1,NE);
eos=cell(1,NE);
Ds=cell(1,NE);

for N=1:NE
%Calculo de cosenos directores
I1=conecelem(N,1); %I1 nudo local 1
I2=conecelem(N,2); %I2 nudo local 2
I3=conecelem(N,3); %I3 nudolocal 3
E=PM(MAT(N),1); %Módulo de elasticidad del elemento
nu=PM(MAT(N),3); %nu del elemento
eo=[PM(MAT(N),2)*DT(N);PM(MAT(N),2)*DT(N);0];
eos=eo;
X13=coordnud(I1,1)-coordnud(I3,1);
X23=coordnud(I2,1)-coordnud(I3,1);
X21=coordnud(I2,1)-coordnud(I1,1);
X32=coordnud(I3,1)-coordnud(I2,1);
Y12=coordnud(I1,2)-coordnud(I2,2);
Y13=coordnud(I1,2)-coordnud(I3,2);
Y23=coordnud(I2,2)-coordnud(I3,2);
Y31=coordnud(I3,2)-coordnud(I1,2);

D=E/(1-nu^2)*[1,nu,0;nu,1,0;0,0,(1-nu)/2]; %Matriz de material para esfuerzo plano
Ds=D;
J=[X13,Y13;X23,Y23];
B=1/det(J)*[Y23,0,Y31,0,Y12,0;0,X32,0,X13,0,X21;X32,Y23,X13,Y31,X21,Y12];
Bs=B;
Ae=1/2*det(J);

SE=espesor(N)*Ae*B'*D*B; %Matriz de rigidez del elemento N

%Grados de libertad a los que contribuye el elemento N
gle(1)=NDN*I1-1;
gle(2)=NDN*I1;
gle(3)=NDN*I2-1;
gle(4)=NDN*I2;
gle(5)=NDN*I3-1;
gle(6)=NDN*I3;

%Carga de temperatura en el elemento N (no aplica)
%TLe=espesor(N)*Ae*B'*D*eo;

%Modificación del vector de cargas por la temperatura (no aplica)
%for ii=1:NEN*NDN
% F(gle(ii))=F(gle(ii))+TLe(ii);
%end

%Fuerza de cuerpo en el elemento N
for z=1:FC
if Fcuerpo(z,1)==N
%Vector de fuerzas de cuerpo
fx=Fcuerpo(z,2);
fy=Fcuerpo(z,3);fce=espesor(N)*Ae/3*[fx;fy;fx;fy;fx;fy];
%Modificación de vector de cargas por fuerzas de cuerpo
for ii=1:NEN*NDN
F(gle(ii))=F(gle(ii))+fce(ii);
end
end
end


%Tracción superficial en el elemento N
for z=1:TS
if Tsup(z,1)==N
%Vector de fuerzas de tracción
ni=Tsup(i,2);
nf=Tsup(i,3);
p1=Tsup(i,4);
p2=Tsup(i,5);
Xt1=coordnud(ni,1);
Yt1=coordnud(ni,2);
Xt2=coordnud(nf,1);
Yt2=coordnud(nf,2);
lt12=sqrt((Xt2-Xt1)^2+(Yt2-Yt1)^2);
c=(Yt2-Yt1)/lt12;
s=(Xt1-Xt2)/lt12;
Tx1=-c*p1;
Tx2=-c*p2;
Ty1=-s*p1;
Ty2=-s*p2;
TSe=espesor(N)*lt12/6*[2*Tx1+Tx2;2*Ty1+Ty2;Tx1+2*Tx2;Ty1+2*Ty2];
%Modificación de vector de cargas por fuerzas de tracción
F(2*ni-1)=F(2*ni-1)+TSe(1);
F(2*ni)=F(2*ni)+TSe(2);
F(2*nf-1)=F(2*nf-1)+TSe(3);
F(2*nf)=F(2*nf)+TSe(4);
end
end


%Matriz de rigidez bandeada
for ii=1:NEN*NDN
for jj=1:NEN*NDN
if gle(jj)>=gle(ii)
S(gle(ii),gle(jj)-gle(ii)+1)=S(gle(ii),gle(jj)-gle(ii)+1)+SE(ii,jj);
end
end
end

end

%% %%%% MODIFICACIÓN PARA LAS CONDICIONES FRONTERA

%Valor de C para afectar matriz de rigidez
CNST=max(max(S))*10000;%Modificaciones por desplazamientos impuestos en rigidez y cargas
for i=1:ND
F(apoyos(i,1))=F(apoyos(i,1))+CNST*apoyos(i,2);
S(apoyos(i,1),1)=S(apoyos(i,1),1)+CNST;
end

for I=1:NMPC
%Modificaciones de rigidez por constricciones multi-punto
S(MPC(I,1),MPC(I,1)-MPC(I,1)+1)=S(MPC(I,1),MPC(I,1)-MPC(I,1)+1)+CNST*BT(I,1)^2;
S(MPC(I,1),MPC(I,2)-MPC(I,1)+1)=S(MPC(I,1),MPC(I,2)-MPC(I,1)+1)+CNST*BT(I,1)*BT(I,2);
S(MPC(I,2),MPC(I,2)-MPC(I,2)+1)=S(MPC(I,2),MPC(I,2)-MPC(I,2)+1)+CNST*BT(I,2)^2;

%Modificaciones de cargas por constricciones multi-punto
F(MPC(I,1))=F(MPC(I,1))+CNST*BT(I,3)*BT(I,1);
F(MPC(I,2))=F(MPC(I,2))+CNST*BT(I,3)*BT(I,2);
end

%% %%%% SOLUCIÓN DE ECUACIONES USANDO GAUSS MODIFICADO PARA MATRIZ DE RIGIDEZ BANDEADA

%inicialización de variables de proceso
n=NQ;
Q=zeros(1,n);
salir=0;
g=NBW;
b=F;

% Eliminacion hacia adelante
for k=1:n-1
fin=min(n,k+g);
for i=k+1:fin
%Verificación de singularidad de la matriz de rigidez
if S(k,1)==0
salir=1;
disp('Detención prematura de la solución del sistema');
disp('Sistema mal condicionado. Verifique condiciones frontera.');
break
end
factor=S(k,i-k+1)/S(k,k-k+1);
for j=i:fin
S(i,j-i+1)=S(i,j-i+1)-factor*S(k,j-k+1);
end
b(i)=b(i)-factor*b(k);
end
if salir==1
k=n-1;
end
end

%Verificación si salir es 0(no) secalcula sustitución hacia atras
%pero si salir es 1(si) no se realizan dichos calculos
if salir==0
% Sustitución hacia atras
Q(n)=b(n)/S(n,n-n+1);
for i=n-1:-1:1
fin=min(n,i+g);
sum=0;
for j=i+1:fin
sum=sum+S(i,j-i+1)*Q(j);
end
Q(i)=(b(i)-sum)/S(i,i-i+1);
end
end

%% %%%% CALCULO DE ESFUERZOS Y FUERZAS INTERNAS EN ELEMENTOS

%esfuerzos=zeros(NE,3);
%fuerzas=zeros(NE,2);
esfuerzos=cell(1,NE);
for I=1:NE
I1=conecelem(I,1); %Nudo local 1
I2=conecelem(I,2); %Nudo local 2
I3=conecelem(I,3); %Nudo local 3
q=[Q(NDN*I1-1);Q(NDN*I1);Q(NDN*I2-1);Q(NDN*I2);Q(NDN*I3-1);Q(NDN*I3)];
%esfuerzos(I,1)=I;
esfuerzos=(Ds*Bs)*q-Ds*eos;
%esfuerzos(I,2)=PM(me,1)/le*lm*q-PM(me,1)*PM(me,2)*DT(I);
%fuerzas(I,1)=I;
%fuerzas(I,2)=esfuerzos(I,2)*espesor(I);
end

%% %%%% CALCULO DE REACCIONES

reacciones=zeros(ND+NMPC*NDN,2);

%Calculo de reacciones en apoyos especificados
for i=1:ND
N=apoyos(i,1);
reacciones(i,1)=N;
reacciones(i,2)=CNST*(apoyos(i,2)-Q(N));
end

%Calculo de reacciones en constricciones multi-punto
for i=1:2:NMPC
reacciones(ND+i,1)=MPC(i,1);
reacciones(ND+i,2)=-CNST*BT(i,1)*(BT(i,1)*Q(MPC(i,1))+BT(i,2)*Q(MPC(i,2)-BT(i,3)));
reacciones(ND+i+1,1)=MPC(i,2);
reacciones(ND+i+1,2)=-CNST*BT(i,2)*(BT(i,1)*Q(MPC(i,1))+BT(i,2)*Q(MPC(i,2)-BT(i,3)));
end

%% %%%% SALIDA DE RESULTADOS

%Guardandoresultados en archivo de salida
archsalida=strcat(ruta,titulo,'.sal');
fid=fopen(archsalida,'w');
fprintf(fid,' rn');
fprintf(fid,'Salida de Datos - %srn',titulo);
fprintf(fid,'nttt ‘ ; ----‘-------‘-------‘-------‘-------‘------------ ');
fprintf(fid,'nttt ‘;| UNIVERSIDAD DE EL SALVADOR |')
fprintf(fid,'nttt ‘;');
fprintf(fid,'nttt ‘;| MAESTRIA EN INGENIERIA ESTRUCTURAL |')
fprintf(fid,'nttt ‘;| METODO DE ELEMENTOS FINITOS |')
fprintf(fid,'nttt ‘;');
fprintf(fid,'nttt ‘;| PROGRAMA PARA RESOLVER: |')
fprintf(fid,'nttt ‘;| ESTRUCTURAS SOLIDAS BIDIMENSIONALES |')
fprintf(fid,'nttt ‘;| UTILIZANDO ELEMENTOS TIPO CST (TRIANGULOS |')
fprintf(fid,'nttt ‘;| DE DEFORMACION CONSTANTE |')
fprintf(fid,'nttt ‘;| YAMIL ABELARDO YAFFAR U. |')
fprintf(fid,'nttt ‘;| WILSON DANILO CHINCHILLA L. |')
fprintf(fid,'nttt ‘;');
fprintf(fid,'nttt ‘;| JULIO DE 2012 |');
fprintf(fid,'nttt ‘;-----‘-------‘-------‘--------‘-------‘-----------');
fprintf(fid,'nnn');
fprintf(fid,'Analisis de Estructuras Sólidas bidimensionalesrn');
fprintf(fid,'utilizando elementos tipo CSTrn');
fprintf(fid,'(triangulos dedeformación constante)rn');
fprintf(fid,'DESPLAZAMIENTOS EN LOS NUDOSrn');
fprintf(fid,' Nudo X Yrn');
for I=1:NN
fprintf(fid,' %g %f %frn',I,Q(I*2-1),Q(I*2));
end

fprintf(fid,' rn');
fprintf(fid,'ESFUERZOS EN ELEMENTOSrn');
fprintf(fid,'Elemento Efuerzo X Esfuerzo Y Esfuerzo XYrn');
for i=1:NE
fprintf(fid,' %g %10.3f %10.3f %10.3frn',i,esfuerzos);
end

fprintf(fid,' rn');
fprintf(fid,'REACCIONES EN APOYOSrn');
fprintf(fid,' DOF# Reacciónrn');
for i=1:ND+NMPC*NDN
fprintf(fid,' %g %10.3frn',reacciones(i,1),reacciones(i,2));
end

fclose(fid); %Cierre del archivo de salida

%Desplegando resultados en pantalla
type(archsalida);

fprintf('Resultados guardados en %sn',archsalida);
fprintf('n');
fprintf('%s nn', '==========GENERACION DEL TRIANGULO========');
%Calculations
%No. of elements and increment in x & y direction
nnodex = nelex + 1;
nnodey = neley + 1;
dx = lx / nelex;
dy = ly / neley;
% Generate Coordinates
nelexy = nelex * neley*2; % total no. of Triangular elements
nnodexy = nnodex * nnodey; % total no. of nodes
% zero matrices and vectors
xc=zeros(nnodexy,1);
yc=zeros(nnodexy,1);
nodedata=zeros(nnodexy,3);
for row = 1: nnodey
for col = 1: nnodex
nt = (row-1)* nnodex + col;
xc(nt)= (col-1)*dx;
yc(nt)= (row-1)*dy;
end
end
% combining node data into a matrix nodedata=[no., xc, yc]
% and elementdata=[no., 3 nodes]
format shortfor i= 1: nnodexy
nodedata(i,1)= i;
nodedata(i,2)= xc(i);
nodedata(i,3)= yc(i);
end
for elerow = 1: neley
for elecol = 1: nelex
eleno = (elerow-1)* (nnodex-1) + elecol;
node1 = eleno + (elerow-1);
node2 = eleno + (elerow);
node3 = node2 + nnodex;
node4 = node1 + nnodex;
elementdata(eleno,1)=eleno;
elementdata(eleno,2)=node1;
elementdata(eleno,3)=node2;
elementdata(eleno,4)=node3;
elementdata(eleno+nelex * neley,1)=eleno+nelex * neley;
elementdata(eleno+nelex * neley,2)=node1;
elementdata(eleno+nelex * neley,3)=node3;
elementdata(eleno+nelex * neley,4)=node4;
end
end
% Plot of the structure
figure (1)
for n=1:nelexy
x(1)= xc(elementdata(n,2));
x(2)= xc(elementdata(n,3));
x(3)= xc(elementdata(n,4));
x(4)= x(1);
y(1)= yc(elementdata(n,2));
y(2)= yc(elementdata(n,3));
y(3)= yc(elementdata(n,4));
y(4)= y(1);
plot (x, y, '-o', 'linewidth', 0.05, 'markersize', 1.5,'markerfacecolor', 'b')
axis equal
hold on
end
leng=length(xc);
for i=1:leng
istr=num2str(i);
text(xc(i)+0.1*dx, yc(i)+0.1*dy, istr )
end
for i=1:length (elementdata)
elementno=elementdata(i,1);
nd1=elementdata((i),2);
x1=xc(nd1);
y1=yc(nd1);
nd2=elementdata((i),3);
x2=xc(nd2);
y2=yc(nd2);
nd3=elementdata((i),4);
x3=xc(nd3);
y3=yc(nd3);
xx= [x1; x2; x3];
yy= [y1; y2; y3];
xaverage=mean(xx);
yaverage=mean(yy);
elnStr = num2str(elementno);
text(xaverage, yaverage, elnStr )
end
nodedata
elementdata
NoOfElements = nelexy
NoOfNodes= nnodexy
%%%%%%% FIN DEL PROGRAMA


Política de privacidad