Calcolo dei modi di vibrare di una trave appoggiata alle estremità.
Questo caso può facilmente essere risolto per via analitica e ci permette pertanto di saggiare la bontà del metodo FEM.
> restart: read "beam2D_FEMpack.m";
1. Caratteristiche della trave:
>
ll := 1.23;
lunghezza
>
mu:=0.14;
massa lineare
>
EJ:=1e4;
modulo di elasticità a flessione
>
EA:=infinity; in
questa maniera la trave non è deformabile assialmente
2. Definizione dei nodi
Schematizzo la trave con 6 elementi e definisco i rispettivi nodi numerati da 0 a 7
>
nn:=6:
>
node := table ([ seq( i = [ i*ll/nn , 0.0 ] , i=0..nn)
]);
3. Definizione degli elementi della struttura
> beam := table([ seq( [ i-1, i, mu,EA,EJ], i=1..nn) ]);
4. Definizione dei vincoli
Impongo i vincoli di tipo rotoidale: i punti estremi della trave sono solidali al telaio, ma sono possibili le rotazioni
> impl_constraint := [ x0 ,z0, x||nn,z||nn ];
4. Assemblaggio della struttura
Utilizzo la procedura built_structure , che verifica nodi, elementi e condizioni di vincolo
> built_structure(node,beam,impl_constraint):
Sono stati definiti 7 nodi: n = [ X [m] Z [m] ] -------------------------- 0 = [ +0.000 +0.000 ] 1 = [ +0.205 +0.000 ] 2 = [ +0.410 +0.000 ] 3 = [ +0.615 +0.000 ] 4 = [ +0.820 +0.000 ] 5 = [ +1.025 +0.000 ] 6 = [ +1.230 +0.000 ] -------------------------- Warning, global variables 'NE','bix' were been defined Sono stati definiti 6 elementi di tipo trave: m , ( i, j) = mu[kg/m] EA[N] EJ[Nm2] l[m] theta[rad] -------------------------------------------------------------------- 1 , ( 0 , 1) = .1 Inf 1.00e+04 0.205 +0.000 2 , ( 1 , 2) = .1 Inf 1.00e+04 0.205 +0.000 3 , ( 2 , 3) = .1 Inf 1.00e+04 0.205 +0.000 4 , ( 3 , 4) = .1 Inf 1.00e+04 0.205 +0.000 5 , ( 4 , 5) = .1 Inf 1.00e+04 0.205 +0.000 6 , ( 5 , 6) = .1 Inf 1.00e+04 0.205 +0.000 -------------------------------------------------------------------- Warning, global variables 'constraint','NC','dip','indip','NDOF' were been defined La struttura possiede 12 gradi di libertà.
I gradi di libertà calcolati sono pari
a 12 e corrispondono alle rotazioni dei 7 nodi e agli spostamenti verticali dei
5 nodi interni.
Gli spostamenti assiali non vengono considerati perché la trave è stata
definita infinitamente rigida in senso assiale.
Definisco i colori per la rappresentazione grafica
> blue :=COLOUR(RGB,0,0,1): red:=COLOUR(RGB,1,0,0): black:=COLOUR(RGB,0,0,0):
e disegno della struttura con la solita tecnica
> nlab := node_label(-0.05,-0.05):
> P_undeformed := draw_beams(beam,0,0,2,red):
> PLOT(P_undeformed,nlab,SCALING(CONSTRAINED),AXESSTYLE(NONE),THICKNESS(2));
5. Calcolo dei modi di vibrare
la relazione esatta per il calcolo delle pulsazioni naturali è la seguente
> omegaT := (mu,EJ,l,n) -> (n*3.14)^2*sqrt(EJ/mu/l^4):
la prime quattro pulsazioni sono di conseguenza
> for i from 1 to 4 do omega||i = omegaT(mu,EJ,ll,i) ; od;
Procediamo ora al calcolo con la tecnica FEM
> modal_analysis(beam, myomega, mymode, NDOF):
dove:
beam:
INPUT descrizione degli elementi
force:
INPUT forze esterne
constraint: INPUT
vincoli
static_disp: OUTPUT spostamenti dei nodi
Warning, pre-load conditions are not take into account in modal analysis frequenze proprie
omega( 1) = 3.1925e+05 rad/s = 5.0810e+04 Hz omega( 2) = 2.9064e+05 rad/s = 4.6257e+04 Hz omega( 3) = 2.3178e+05 rad/s = 3.6889e+04 Hz omega( 4) = 1.7511e+05 rad/s = 2.7870e+04 Hz omega( 5) = 9.4210e+04 rad/s = 1.4994e+04 Hz omega( 6) = 1.2954e+05 rad/s = 2.0617e+04 Hz omega( 7) = 6.9666e+04 rad/s = 1.1088e+04 Hz omega( 8) = 4.4745e+04 rad/s = 7121.3724 Hz omega( 9) = 2.8226e+04 rad/s = 4492.3019 Hz omega(10) = 1.5754e+04 rad/s = 2507.2572 Hz omega(11) = 6979.7041 rad/s = 1110.8544 Hz omega(12) = 1743.6046 rad/s = 277.5033 Hz
Possimamo osservare come i risultati ottenuti siano molto vicini a quelli teorici.
PAssiamo alla rappresentazione grafica
>
scd := 2:
scale factor
>
P_mode1 := draw_beams(beam,mymode[NDOF] ,scd,3,blue):
>
P_mode2 := draw_beams(beam,mymode[NDOF-1],scd,6,blue):
>
P_mode3 := draw_beams(beam,mymode[NDOF-2],scd,6,blue):
>
P_mode4 := draw_beams(beam,mymode[NDOF-3],scd,6,blue):
> PLOT(P_undeformed, P_mode1, P_mode2, P_mode3, P_mode3, P_mode4, SCALING(CONSTRAINED), AXESSTYLE(NONE), THICKNESS(1));