* fichier : vibr12.dgibi
***********************************************************
*
* VIBR12.DGIBI
* CALCUL DE MODE COMPLEXE AVEC L OPERATEUR VIBR
*
* Resolution du pb aux valeurs propres : [K-w²M]x = 0
* Modes COMPLEXEs car matrice(s) (K et/ou M) non symetrique(s)
*
* Matrices 3x3
*
***********************************************************
opti echo 0 ;
***********************************************************
* Maillage ************************************************
opti dime 3 elem cub8 ;
pt1 = poin 0. 0. 0.;
geo1 = MANU POI1 pt1;
***********************************************************
* qq tables et listes pour tester
terr1 = tabl;
err1tot = prog ; err2tot = prog ; err3tot = prog ; err4tot = prog ;
***********************************************************
* BOUCLE SUR DES MINI CAS TEST ***************************
icas = 0;
REPE BCAS 4;
icas = icas + 1 ;
errtot = prog ;
saut lign;
* definition du cas *********************************************
si(ega icas 1);
mess 'Cas 1 : tout est symetrique *****************************';
lm1 = (prog 0.5 0. 0. 0. 1. 0. 0. 0. 0.5);
lk1 = (prog 2. -1. 0. -1. 4. -1. 0. -1. 2.) ;
frq1th = (prog 2. 4. 6.)**0.5 / (2.*pi);
frq1thI = (prog 0. 0. 0.);
finsi;
si(ega icas 2);
mess 'Cas 2 : K et M nonsym mais a valeur propres reelles ******';
lm1 = (prog 1. 2. 3. 0. 1. 0. 3. 2. 1. ) ;
lk1 = (prog 4. 5. 6. -1. 4. -1. 6. 5. 4. ) ;
frq1th = (prog 1. 2.5 5.)**0.5 / (2.*pi);
frq1thI = (prog 0. 0. 0.);
finsi;
si(ega icas 3);
mess 'Cas 3 : K et M nonsym mais a valeur p Lambda reelles ******';
lm1 = (prog 1. 0. 0. 0. 1. 0. 0. 0. 1.);
lk1 = (prog 7. -9. -3. 0. -60. 0. 0. 0. -6.);
frq1th = (prog 0. 0. 7.)**0.5 / (2.*pi);
frq1thI = (prog 60. 6. 0.)**0.5 / (2.*pi);
inum3p = lect 2 3 1;
finsi;
si(ega icas 4);
mess 'Cas 4 : K et M nonsym -> Lambda= 1vp R et 2vp C conj ******';
lm1 = (prog 1. 2. 3. 4. 5. 6. 7. 0. 19. );
lk1 = (prog 4. 5. 6. -1. 4. -1. 6. 5. 4. );
frq1th = (prog 0.03392052 0.03392052 0.19340464);
frq1thI= (prog -0.14983744 0.14983744 0. );
finsi;
* Matrices ************************************************
M1 = manu 'RIGIDITE' 'TYPE' 'MASSE' geo1
(mots UX UY UZ ) 'DUAL' (mots FX FY FZ ) 'QUEL' lm1;
K1 = manu 'RIGIDITE' 'TYPE' 'RIGIDITE' geo1
(mots UX UY UZ ) 'DUAL' (mots FX FY FZ ) 'QUEL' lk1;
* VIBR sur 1 mode *****************************************
Tmod1 = VIBR 'PROC' K1 M1 (prog 0.) (lect 1) 'TBAS' VRAI 'IMPR';
frq1 = Tmod1 . 'MODES' . 1 . frequence_reelle;
frq1I = Tmod1 . 'MODES' . 1 . frequence_imaginaire;
* mess frq1 '+ i' frq1I 'Hz'
* ' soit lambda=' ((2.*pi*frq1)**2) '+' (-1.*((2.*pi*frq1I)**2));
si(icas < 3);
err1 = (abs(1. - (frq1/(extr frq1th 1))));
sino;
err1 = (abs(1. - (abs(frq1I/(extr frq1thI 2)))));
si(icas ega 4);
err1 = err1 + (abs(1. - (frq1/(extr frq1th 1))));
finsi;
finsi;
* mess 'VIBR 1 ecart rel=' err1;
* VIBR sur 1 mode avec shift ******************************
fshi2 = (0.2*(extr frq1th 2)) + (0.8*(extr frq1th 3));
Tmod2 = VIBR 'PROC' K1 M1 (prog fshi2) (lect 1) 'TBAS' VRAI 'IMPR';
frq2 = Tmod2 . 'MODES' . 1 . frequence_reelle;
frq2I = Tmod2 . 'MODES' . 1 . frequence_imaginaire;
* mess frq2 '+ i' frq2I 'Hz'
* ' soit lambda=' ((2.*pi*frq2)**2) '+' (-1.*((2.*pi*frq2I)**2));
err2 = (abs(1. - (frq2/(extr frq1th 3))));
* mess 'VIBR 2 ecart rel=' err2;
* VIBR sous espace ****************************************
nbmod = 3 ;
Tmod3 = VIBR 'PROC' K1 M1 (prog 0.) (lect nbmod)
'TBAS' VRAI 'IMPR';
ibou1 = 0;
frq3se = prog;
err3 = 0.;
repe bou3 nbmod;
ibou1 = ibou1 + 1 ;
frq3 = Tmod3 . 'MODES' . ibou1 . frequence_reelle;
frq3I = Tmod3 . 'MODES' . ibou1 . frequence_imaginaire;
frq3se = frq3se et (prog frq3) ;
si(icas < 3);
inumod1 = ibou1;
err3tmp = abs (1. - (frq3/(extr frq1th inumod1)));
finsi;
si(icas ega 3);
inumod1 = extr inum3p ibou1;
si(ega inumod1 3);
err3tmp = abs (1. - (frq3/(extr frq1th inumod1)));
sino;
err3tmp = abs (1. - (frq3I/(extr frq1thI inumod1)));
finsi;
finsi;
si(icas ega 4);
inumod1 = ibou1;
err3tmp = abs (1. - (frq3/(extr frq1th inumod1)));
si(inumod1 neg 3);
err3tmp = err3tmp
+ (abs (1. - (abs(frq3I/(extr frq1thI inumod1)))));
finsi;
finsi;
* mess 'VIBR' ibou1 inumod1 'frq1=' frq3 'ecart rel=' err3tmp;
err3 = maxi (prog err3tmp err3);
fin bou3;
* VIBR sous espace avec shift *****************************
Tmod4 = VIBR 'PROC' K1 M1 (prog fshi2) (lect nbmod)
'TBAS' VRAI 'IMPR';
ibou1 = 0;
err4 = 0.;
frq4se = prog;
repe bou4 nbmod;
ibou1 = ibou1 + 1 ;
frq4 = Tmod4 . 'MODES' . ibou1 . frequence_reelle;
frq4I = Tmod4 . 'MODES' . ibou1 . frequence_imaginaire;
frq4se = frq4se et (prog frq4) ;
inumod1 = nbmod - ibou1 + 1;
si(icas < 3);
err4tmp = abs (1. - (frq4/(extr frq1th inumod1)));
finsi;
si(icas ega 3);
si(ega inumod1 3);
err4tmp = abs (1. - (frq4/(extr frq1th inumod1)));
sino;
err4tmp = abs (1. - (abs(frq4I/(extr frq1thI inumod1))));
finsi;
finsi;
si(icas ega 4);
err4tmp = abs (1. - (frq4/(extr frq1th inumod1)));
si(neg inumod1 3);
err4tmp = err4tmp
+ (abs (1. - (abs(frq4I/(extr frq1thI inumod1)))));
finsi;
finsi;
finsi;
* mess 'VIBR' ibou1 inumod1 'frq1=' frq4 'ecart rel=' err4tmp;
err4 = maxi (prog err4tmp err4);
fin bou4;
* stockage des resultats
errtot = errtot et (prog err1 err2 err3 err4) ;
terr1 . icas = errtot;
err1tot = err1tot et (prog err1);
err2tot = err2tot et (prog err2);
err3tot = err3tot et (prog err3);
err4tot = err4tot et (prog err4);
*saut lign ;
fin BCAS;
************************************************************************
saut lign ;
mess '*** erreur relative (selon appel a vibr) ***';
icas = 0;
repe BCAS2 4;
icas= icas + 1 ;
saut lign;
mess (chai '*** Cas ' icas ' ***') ;
list (terr1 . icas);
fin BCAS2;
*opti donn 5 ;
*fin;
****************************************************************
* test de bon deroulement *
****************************************************************
*
TEST1234 = ((maxi err1tot)
© Cast3M 2003 - All rights reserved.
Disclaimer