ESERCITAZIONE 6 Scrittura e applicazione di un programma MATLAB per lanalisi FEM di travature reticolari piane
1 Esercitazione 6 Scrittura e applicazione di un programma MATLAB per lanalisi FEM di travature reticolari piane 1. SCOPO DELLESERCITAZIONE Lesercitazione consiste nellanalisi statica di una travatura reticolare piana con il metodo degli elementi finiti e si divide in due fasi: 1. scrittura di un programma in ambiente MATLAB per lanalisi statica di travature reticolari piane secondo il metodo degli elementi finiti; 2. applicazione di tale programma allo studio di una travatura reticolare assegnata. In particolare viene richiesto di calcolare con lanalisi a elementi finiti i seguenti valori: spostamenti dei nodi; reazioni vincolari; deformazioni delle aste; tensioni nelle aste; sforzi normali nelle aste. Nel seguito si illustrano i risultati ottenuti con il codice MATLAB. 2. APPLICAZIONE DEL PROGRAMMA La struttura assegnata caratterizzata da una particolare travatura reticolare le cui aste vengono modellizzate con lelemento unidimensionale ROD. Si noti la presenza di soli carichi concentrati applicati ai nodi.
2 La struttura composta da 12 nodi collegati tra loro da 21 elementi Asta. In ingresso bisogna fornire al programma le caratteristiche dei materiali, tra cui il modulo elastico, necessari a calcolare le matrici di rigidezza dei singoli elementi. Inoltre lutente deve scegliere la numerazione dei nodi della struttura e degli elementi per poter: assegnare la geometria attraverso la matrice delle coordinate globali dei nodi; individuare la relazione tra numerazione locale dei nodi e numerazione globale, costruendo la matrice di connectivity. In figura viene evidenziata la numerazione utilizzata per lapplicazione, nel seguito sono riportate le relative matrici da inserire nel codice.
Coerentemente con questa numerazione si definiscono i gradi di libert (due per ogni nodo) vincolati ed il vettore dei carichi esterni applicati ai nodi della struttura.
3 3. RISULTATI Il codice di post-processing produce in output un grafico della deformata statica della travatura (in blu):
Le reazioni vincolari calcolate dal codice sono: Reazioni vincolari [N] R1 4166667 R2 2333333 R23 -4166667 R24 3666667
Inoltre il programma fornisce in uscita anche la matrice [D] (ne x 4) contenente, in ogni riga, il numero dellelemento, la deformazione, la tensione e lo sforzo normale in quellelemento. I valori numerici sono riportati in tabella: Deformazioni e sollecitazioni negli elementi Elemento Deformazioni [%] Sforzi [N/mm 2 ] Tensioni [N] 1 -2,125 -4,463E+03 -4,206E+06 2 -9,690E-01 -7,074E+02 -6,667E+05 3 -2,776E-15 -2,914E-12 -4,578E-09 4 -9,690E-01 -7,074E+02 -6,667E+05 5 3,123E-15 6,557E-12 6,180E-09
CODICE MATLAB Pre-processing & Processing clear all close all
% Svolge in successione pre-processing e processing, salvando poi i risultati % statici in un file % 1. pre-processing; raccolta dei dati su materiali, geometria e mesh, % vincoli e carichi; % 2. processing; calcolo vero e proprio (si tratta di calcolare la matrice di % rigidezza ed il vettore delle forze dellintera struttura e, quindi, di % determinare i gradi di libert non vincolati e le reazioni vincolari);
%% Inserimento dei dati per lanalisi
applicazione
%% Calcoli preliminari:
nn=size(Pn,1); % numero di nodi ne=size(Cne,1); % numero di elementi L=zeros(ne,1); % vettore della lunghezza degli elementi ca=zeros(ne,1); % vettore cos(alpha) sa=zeros(ne,1); % vettore sen(alpha) for i=1:ne
5
% matrice di connectivity dei gradi di libert per elemento Cse(i,:)=[2*Cne(i,1)-1 2*Cne(i,1) 2*Cne(i,2)-1 2*Cne(i,2)];
% lunghezza, cos(alpha) e sen(alpha) per ogni elemento deltax=(Pn(Cne(i,2),1)-Pn(Cne(i,1),1)); deltay=(Pn(Cne(i,2),2)-Pn(Cne(i,1),2)); L(i,1)=sqrt(deltax^2+deltay^2); ca(i,1)=deltax/L(i); sa(i,1)=deltay/L(i); end ni=max(max(Cse)); % numero di gdl o incognite
%% Calcolo della matrice [KG] e del vettore {FG} per lintera struttura: % calcolo, per ogni elemento, di [KG(e)] K=zeros(ni); % matrice globale dell'intera struttura for i=1:ne Ke=stiff_mat(L(i),ca(i),sa(i),A(Cpe(i,1)),E(Cpe(i,2))); % matrice di rigidezza dell'elemento nel sistema globale I=Cse(i,:); K(I,I)=K(I,I)+Ke; end
% calcolo diretto di {F} F=zeros(2*nn,1); for j=1:size(Fn,1) F(Fn(j,1),1)=Fn(j,2); end
% calcolo delle matrici e dei vettori ridotti ib=sort(ib); il=zeros(2*nn-size(ib,1),1); % vettore dei gradi di libert non vincolati k=1; % indice vettore il presente=0; % segnale per vedere se il grado di libert j vincolato (presente=1) oppure no (presente=0) for j=1:size(F,1) for i=1:size(ib,1) if j==ib(i,1) presente=1; end end if presente~=1 il(k,1)=j; k=k+1; end presente=0; end % sottomatrici di rigidezza Kff=K(il,il); Kfv=K(il,ib); Kvf=K(ib,il); Kvv=K(ib,ib); % sottovettori dei carichi nodali equivalenti Fef=F(il,1); Fev=F(ib,1);
% calcolo statico (spostamenti nodali e reazioni vincolari) Qf=Kff\Fef; % gdl non vincolati Rv=Kvf*Qf-Fev; % reazioni vincolari
6
Q(il,:)=Qf; % sottovettore del vettore dei gdl nodali dell'intera struttura Q(ib,:)=zeros(length(ib),1); % gdl vincolati
Cv(il,:)=zeros(length(il),1); % sottovettore del vettore completo delle reazioni vincolari dell'intera struttura ... sottovettore delle reazioni vincolari (nulle) presenti nei gdl non vincolati Cv(ib,:)=Rv;
%% Salvataggio dei risultati statici nomesave=input([' scrivi il nome (tra apici) del file nel quale salvare i risultati: ']); str=['save ',nomesave,' A E Pn Cne Cpe Cse ib Fn nn ne ni L ca sa K F Q Cv;']; eval(str);
Post-processing clear all close all
% 3. post-processing: a partire dai risultati precedenti, si calcolano % dei risultati secondari (le deformazioni e le tensioni in ogni elemento)
%% Elaborazione dei risultati (statici): % richiamo dei risultati
nomefile=input([' scrivi il nome (tra apici) del file di risultati da usare: ']); importfile(nomefile);
% assegnazione dei gradi di libert ai vari elementi % matrice [q] (4 x ne) che ha nella colonna e i valori dei 4 gradi di % libert (globali) dellelemento e q=zeros(4,ne);
for e=1:ne q(:,e)=Q(Cse(e,:),1); end
% realizzazione del grafico della deformata statica figure(1); hold on; axis equal; grid on; for e=1:ne plot([Pn(Cne(e,1),1) Pn(Cne(e,2),1)],[Pn(Cne(e,1),2) Pn(Cne(e,2),2)],'r'); % struttura plot([Pn(Cne(e,1),1)+q(1,e) Pn(Cne(e,2),1)+q(3,e)],[Pn(Cne(e,1),2)+q(2,e) Pn(Cne(e,2),2)+q(4,e)]); % deformata
end
legend('Struttura','Deformata')
7 % calcolo di deformazione, tensione e sforzo normale in ogni elemento % matrice[D] (ne x 4) contenente, in ogni riga, il numero dellelemento, % la deformazione, la tensione e lo sforzo normale in quellelemento. D=zeros(ne,4); D(:,1)=[1:1:ne]'; for e=1:ne Lambdae=[ca(e,1) sa(e,1) 0 0; 0 0 ca(e,1) sa(e,1)]; D(e,2)=(1/L(e))*[-1 1]*Lambdae*q(:,e); D(e,3)=E(Cpe(e,2))*D(e,2); D(e,4)=A(Cpe(e,1))*D(e,3); end
%% Salvataggio dei risultati secondari nomesave=input([' scrivi il nome (tra apici) del file nel quale salvare i risultati di post processing: ']); str=['save ',nomesave,' q D']; eval(str);
nomefig=input([' scrivi il nome tra apici del file nel quale salvare la deformata statica: ']); print('-dpdf',nomefig)
Dati in input E=[210e9;105e9;73e9]; % vettore dei moduli elastici dei diversi materiali A=2*pi*(5e-3)*[5e-2;3e-2]; % vettore della aree delle diverse sezioni
ib=[1 2 23 24]'; % gradi di libert bloccati Fn=[12,-3e6;16,-2e6;20,-1e6]; % carichi concentrati nei nodi
Funzione per la matrice di rigidezza globale degli elementi function [ Ke ] = stiff_mat(L,ca,sa,A,E) % Calcola la matrice di rigidezza (globale) di ciascun elemento finito. % Bisogna prima calcolare la matrice nel sistema locale dellelemento, % poi determinare la matrice di rotazione [R] e, quindi, la matrice nel sistema % globale.
Ke_loc=(E*A/L)*[1 -1;-1 1]; R=[ca sa 0 0; 0 0 ca sa]; Ke=R'*Ke_loc*R;