80 likes | 211 Views
Estructura básica del programa de elementos finitos. CoordenadasElemento1=[1,1;0,1;0,0;1.5,0]; CoordenadasElemento2=[2.5,1;1,1;1.5,0;2.5,0]; NodosDatos=[1,2,5,6]; ValorNodosDatos=[273,273,278,278]; VectorFuerzas=zeros(6,1); NODES=[3,5;1,3;2,4;4,6]; datos=[ 400 ,0];
E N D
Estructura básica del programa de elementos finitos CoordenadasElemento1=[1,1;0,1;0,0;1.5,0]; CoordenadasElemento2=[2.5,1;1,1;1.5,0;2.5,0]; NodosDatos=[1,2,5,6]; ValorNodosDatos=[273,273,278,278]; VectorFuerzas=zeros(6,1); NODES=[3,5;1,3;2,4;4,6]; datos=[400,0]; %CalcK(XY,tipodeproblema,tipodeelemento, puntosdecuadratura,datos) KE1=CalcK(CoordenadasElemento1,1,3,2,datos); KE2=CalcK(CoordenadasElemento2,1,3,2,datos); KG=zeros(6,6); KG=ensamble(KG,KE1,NODES,1); KG=ensamble(KG,KE2,NODES,2); Solucion=reducir(KG,VectorFuerzas,NodosDatos, ValorNodosDatos); Datos: Coordenadas de cada nodo Condiciones de contorno Relación entre las C locales y globales Datos de la Matriz constitutiva Calculo de las matrices elementales Ensamble de las matrices elementales en la matriz global Incorporación de las CC y solución del sistema de ecuaciones
if puntosdecuadratura==1 R=[0]; P=[2]; elseif puntosdecuadratura==2 R=[-sqrt(1/3),sqrt(1/3)]; P=[1,1]; elseif puntosdecuadratura==3 R=[-sqrt(3/5),0,sqrt(3/5)]; P=[5./9.,8./9.,5./9.]; elseif puntosdecuadratura==4 R=[-0.861136311594053,-0.339981043584856,0.339981043584856,0.861136311594053]; P=[0.347854845137454,0.652145154862546,0.652145154862546,0.347854845137454]; end CalcK
K=zeros(4,4); • k=datos(1); • Ce=k*eye(2); • for i=1:puntosdecuadratura • for j=1:puntosdecuadratura • r=R(j); • s=R(i); • p=P(i)*P(j); • DH=Calc_DH_2D_4N(r,s); • %Derivadas de la forma: • % Dh1/Dr Dh2/Dr .... Dh4/Dr • % Dh1/Ds Dh2/Ds .... Dh4/Ds • Je=DH*CoordenadasElemento; %genera el Jacobiano • InvJe=Je^-1; %Calcula la inversa • detJe=det(Je); %Calcula el determinante del jacobiano • Be=InvJe*DH; • % Be es la matriz de las derivadas de las funciones de forma, de la forma: • % Dh1/Dx Dh2/Dx .... Dh4/Dx • % Dh1/Dy Dh2/Dy .... Dh4s/Dy • K=K+p*Be'*Ce*Be*detJe; • end • end CalcK 2
function a=ensamble(KG,KE,NODES,elemento) Nodosporelemento=length(KE); for il=1:Nodosporelemento for jl=1:Nodosporelemento ig=NODES(il,elemento); jg=NODES(jl,elemento); KG(ig,jg)=KG(ig,jg)+K(il,jl); end end a=KG; Ensamble
function Solucion=reducir(KG,VectorFuerzas,NodosDatos,ValorNodosDatos) Ncondicionesdecontorno=length(NodosDatos); Nnodosglobales=length(KG); for ig=1:Ncondicionesdecontorno nodo=NodosDatos(ig); for jg=1:Nnodosglobales if jg~=nodo VectorFuerzas(jg)=VectorFuerzas(jg)-KG(jl,nodo)*ValorNodosDatos(ig); KG(jg,nodo)=0; end end for jg=1:Nnodosglobales if jg~=nodo KG(nodo,jg)=0; else KG(nodo,nodo)=1; VectorFuerzas(nodo)=ValorNodosDatos(ig); end end end %[V,D] = eig(KG); %V %D Solucion=KG\VectorFuerzas; Reducir
CoordenadasElemento1=[ 10,10; 0,10; 0,0; 10,0; 5,10; 0,5; 5,0; 10,5]; NodosDatos=[6,7,8,13,14]; ValorNodosDatos=zeros(1,5); NODES=[1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16]; VectorFuerzas=zeros(16,1); VectorFuerzas(2,1)=-100; VectorFuerzas(4,1)=100; VectorFuerzas(10,1)=100; E=2.1E6; v=0.3; datos=[E,v]; %CalcK(XY,tipodeproblema,tipodeelemento,puntosdecuadratura,datos) KE1=CalcK(CoordenadasElemento1,2,4,3,datos); KG=zeros(16,16); KG=ensamble(KG,KE1,NODES,1); Solucion=reducir(KG,VectorFuerzas,NodosDatos,ValorNodosDatos); Problema de elasticidad Datos: Coordenadas de cada nodo Condiciones de contorno Relación entre las C locales y globales Datos de la Matriz constitutiva Calculo de las matrices elementales Ensamble de las matrices elementales en la matriz global Incorporación de las CC y solución del sistema de ecuaciones
[E,v]=datos; • Ce2D=Calc_Ce2D(E,v); • K=zeros(16,16); • Be2D=zeros(3,16); • for i=1:puntosdecuadratura • for j=1:puntosdecuadratura • r=R(j); • s=R(i); • p=P(i)*P(j); • DH=Calc_DH_2D_8N(r,s); • NNodos=8; • Je=DH*CoordenadasElemento; • detJe=det(Je); • InvJe=Je^-1; • Be=InvJe*DH; • % Be es la matriz de las derivadas de las funciones de forma, de la forma: • % Dh1/Dx Dh2/Dx .... Dh8/Dx • % Dh1/Dy Dh2/Dy .... Dh8/Dy • for m=1:NNodos • Be2D(1,(m*2-1))=Be(1,m); • Be2D(2,(m*2))=Be(2,m); • Be2D(3,(m*2-1))=Be(2,m)/2; • Be2D(3,(m*2))=Be(1,m)/2; • end • % Con eso creo una matriz de 3x2NNodos, de la forma • % Dh1/Dx 0 Dh2/Dx 0 .... • % 0 Dh1/Dy 0 Dh2/Dy .... • % 1/2*Dh1/Dx 1/2*Dh1/Dy 1/2*Dh2/Dx 1/2*Dh2/Dy .... • K=K+p*Be2D'*Ce2D*Be2D*detJe; • end • End CalcK elasticidad
ValoresNodalesElemento=zeros(16,1); • for jl=1:16 • jg=NODES(jl,1); • ValoresNodalesElemento(jl)=Solucion(jg); • end • VectorTensiones=zeros(21,3); • VectorDeformaciones=zeros(21,3); • for m=1:21 • r=1; • s=(m-1)/10-1; • Be=CalcB(CoordenadasElemento1,2,4,datos,r,s); • Ce2D=Calc_Ce2D(E,v); • deformaciones=Be*ValoresNodalesElemento; • tensiones=Ce2D*deformaciones; • VectorDeformaciones(m,1:3)=deformaciones'; • VectorTensiones(m,1:3)=tensiones'; • end • save VectorDeformaciones.dat VectorDeformaciones -Ascii; • save VectorTensiones.dat VectorTensiones -Ascii; Recuperar deformaciones y tensiones