Download vibr12.dgibi

Back to the list

* 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