* fichier :  dy_devo6.dgibi
************************************************************************
* Section : Mecanique Dynamique
************************************************************************
*         Test Dy_devo6.dgibi: Jeux de donn�es        *
*         ------------------------------------        *
*                                                     *
*******************************************************
*
*           DYNE       LIAISON POIN_PLAN 
*       avec plastification du ressort de choc
*
*    il s'agit d'une grande masse anim�e d'un mouvement
*    sinusoidale (avec deux amplitudes differentes) qui 
*    impacte un plan
*
*    on teste aussi la reprise de calcul
*
*******************************************************
opti echo 1 ;
graph ='N'  ;
dpasa='O' ; complet = 'N' ;
*******************************************************
m1 = 100000 ;    comm 'masse impact�e';
ke = 100. ;      comm 'raideur de choc';
se1 = 50. ;      comm 'limite �lastique';
dt = .01 ;       comm 'pas de temps';
t1 = 12 ;        comm 'dur�e du calcul';
*******************************************************
opti dime 3 ;
pp1 = 0 0 0 ;
p1 = 0 0 0 ;
*
tab1 = table 'BASE_MODALE' ;
TAB2 = TABLE 'BASE_DE_MODES' ;
TAB1 . MODES = TAB2 ;
TAB2 . 1 = TABLE 'MODE' ;
TAB2 . 1 .'POINT_REPERE' = PP1 ;
TAB2 . 1 . 'FREQUENCE' = 0 ;
TAB2 . 1 .'MASSE_GENERALISEE' = M1 ;
TAB2 . 1 .'DEFORMEE_MODALE' = manu chpo p1 1 ux 1. ;

ma1 = manu poi1 tab2 . 1 . point_repere ;
mo1 = mode ma1 mecanique elastique modal ;
ca1 = mate mo1 freq tab2 . 1 . frequence 
  mass tab2 . 1 . masse_generalisee defo tab2 . 1 . deformee_modale ;
*
** definition du chargement
w0 = .125*2*pi ;
list1 = prog 0. pas dt (t1/2-dt) ;
list2 = prog (t1/2) pas dt t1 ;
lisy1 = prog sinu .125 ampl (w0**2) list1 ;
lisy2 = prog sinu .125 ampl (1.5*(w0**2)) list2 ;
ev1 = evol manu 'temps' (list1 et list2)
         'accel' (lisy1 et lisy2) ;
fx1 = force fx (-1*m1) p1 ;
cha1 = char fx1 ev1 ;
*
** chargement et cond. initiales en base A
cham1 = pjba tab1 cha1 ;
TCHA1 = TABLE 'CHARGEMENT' ;
TCHA1.'BASE_A' = CHAM1  ; 
TINIT = TABLE 'INITIAL' ;
TINIT.'VITESSE' = manu chpo pp1 1 alfa w0 ;
*
** definition de la liaison
TLIA = TABLE 'LIAISON' ;
TLB = TABLE 'LIAISON_B' ;
TLIA.'LIAISON_B' = TLB ;
TL1 = TABLE 'LIAISON_ELEMENTAIRE' ;
TL1.'TYPE_LIAISON' = MOT 'POINT_PLAN';
TL1.'SUPPORT' = P1 ;
TL1.'NORMALE' = (1 0 0);
TL1.'RAIDEUR' = KE ;
TL1.'JEU' = 0.;
tl1.'SEUIL_PLASTIQUE' = se1 ; 
TL1.'AMORTISSEMENT'= 0. ;
TLB. 1 = TL1 ;
*
mappb = manu poi1 p1 ;
moppb = modele mappb  liaison point_plan ;
tsopb = table ; tsopb . moppb = vrai ;
cappb = mate moppb 'NORM' (1 0 0) 'RAID' ke 'JEU' 0. 
 'SPLA' se1 'AMOR' 0. 'SORT' tsopb ;

** nombre de pas
npas0 = (enti (t1/dt)) ;
npas = npas0 / 2 ;
*npas = 2 ;
nins = 1 ;
** definition de la sortie
TSORT = TABLE 'SORTIE' ;
TSORL = TABLE 'LIAISON_B' ;
TSORT.'LIAISON_B' = TSORL ;
TSORL.TL1 = VRAI ;
*
** 1er bloc de calcul
*tres1 = dyne differences_centrees tlia tab1 tcha1 
*          tsort tinit npas dt nins;
tres1 = dyne de_vogelaere tlia tab1 tcha1 
         tsort tinit npas dt nins;

TTL1 = TRES1.TL1 ;
LIS_TEM0 = TRES1.'TEMPS_DE_SORTIE';
lisxp1 = TTL1.'UX' ;
lisyp1 = ttl1 .'FORCE_DE_CHOC' ;
titre 'force - deplacement';
evdf1 = evol manu 'depl' lisxp1 'force' lisyp1 ;
titre 'deplacement plastique - temps' ;
evdp1 = evol manu 'temps' lis_tem0 'dep_pl'
                          ttl1.deplacement_plastique ;

*dess (evdp1 et (ev2dp1 coul vert)) ;
*
*
si (ega dpasa 'O');
*
t_final = npas * dt ;

l_cal = prog 0 pas dt t_final ;

tabdyn = table 'PASAPAS' ;
tabdyn . dynamique = vrai ;
tabdyn . modele = mo1 et moppb ;
tabdyn . caracteristiques = ca1 et cappb ;
tabdyn . chargement = cham1 ;
tabdyn . vitesses = table ;
tabdyn . vitesses . 0 = manu chpo pp1 1 alfa w0 ;
tabdyn . temps_sauves = l_cal ;


pasapas tabdyn ;
*opti donn 5 ;
l_t0 = prog 0.  tabdyn . temps . 1 ;
tt1 = 'EXTR' tabdyn . variables_internes . 1 'SLIA' 2 1 1 ;
lis3xp1 = tt1.ux ;
lis3yp1 = tt1.force_de_choc ;
lis3dp1 = tt1.deplacement_plastique ;
indi1 = 1 ;

repeter  bs ((dime tabdyn . temps) - 2) ;
 indi1 = indi1 + 1 ;
 l_t0 = l_t0 et (prog tabdyn . temps . indi1) ;
 ttu1 = 'EXTR' tabdyn . variables_internes . indi1 'SLIA' 2 1 1 ;
 lis3xp1 = lis3xp1 et ttu1.ux ;
 lis3yp1 = lis3yp1 et ttu1.force_de_choc ;
 lis3dp1 = lis3dp1 et ttu1.deplacement_plastique ;
fin bs ;
ev3df1 = evol manu 'depl' lis3xp1 'force' lis3yp1 ;
ev3dp1 = evol manu 'temps' l_t0 'dep_pl'lis3dp1 ;

*
sinon ;
*
tabdyn . nombre_pas = npas ;
tabdyn . pas_de_temps = dt ;
tabdyn . pas_de_sortie = nins ;
tabdyn . sortie = table ;
tabdyn . sortie . moppb = vrai ;
  dyne de_vogelaere tabdyn ;
*
l_t0 = prog ;
repeter bs (dime tabdyn . temps) ;
 l_t0 = l_t0 et (prog tabdyn . temps . (&bs - 1)) ;
fin bs ;

lis2xp1 = tabdyn.liaisons.moppb.ux ;
lis2yp1= tabdyn.liaisons.moppb.force_de_choc ;
ev2df1 = evol manu 'depl' lis2xp1 'force' lis2yp1 ;
ev2dp1 = evol manu 'temps' l_t0 'dep_pl'
             tabdyn.liaisons.moppb.deplacement_plastique ;
*
finsi ;
*

** reprise de calcul

si (ega complet 'O') ;
si (ega dpasa 'O');
*
t_fin0 = npas * dt * 2 ;
l_cal = prog t_final pas dt t_fin0 ;
tabdyn . temps_sauves = l_cal ;

pasapas tabdyn ;
*l_t0 = prog 0.  tabdyn . temps . 1 ;
tt1 = 'EXTR' tabdyn . variables_internes . 1 'SLIA' 2 1 1 ;
lis3xp1 = tt1.ux ;
lis3yp1 = tt1.force_de_choc ;
lis3dp1 = tt1.deplacement_plastique ;
indi1 = 1 ;

repeter  bs ((dime tabdyn . temps) - 2) ;
 indi1 = indi1 + 1 ;
 l_t0 = l_t0 et (prog tabdyn . temps . indi1) ;
 ttu1 = 'EXTR' tabdyn . variables_internes . indi1 'SLIA' 2 1 1 ;
 lis3xp1 = lis3xp1 et ttu1.ux ;
 lis3yp1 = lis3yp1 et ttu1.force_de_choc ;
 lis3dp1 = lis3dp1 et ttu1.deplacement_plastique ;
fin bs ;
ev3df1 = evol manu 'depl' lis3xp1 'force' lis3yp1 ;
ev3dp1 = evol manu 'temps' l_t0 'dep_pl'lis3dp1 ;

sinon ;
*
 tabdyn . init_dyne = tabdyn . reprise_dyne ;
 dyne de_vogelaere tabdyn ; 

   si faux ;
t2dyn = table 'PASAPAS' ;
t2dyn . modele = mo1 et moppb ;
t2dyn . caracteristiques = ca1 et cappb ;
t2dyn . chargement = cham1 ;
t2dyn . init_dyne = tabdyn . reprise_dyne ;
t2dyn . nombre_pas = npas ;
t2dyn . pas_de_temps = dt ;
t2dyn . pas_de_sortie = nins ;
t2dyn . sortie = table ;
t2dyn . sortie . moppb = vrai ;

dyne de_vogelaere t2dyn ;

   sinon ;

t2dyn = tabdyn ;

   finsi ;

l_t2 = prog ;
repeter bs (dime t2dyn . temps) ;
 l_t2 = l_t2 et (prog t2dyn . temps . (&bs - 1)) ;
fin bs ;

lis2xp2 = t2dyn.liaisons.moppb.ux ;
lis2yp2= t2dyn.liaisons.moppb.force_de_choc ;
ev2df2 = evol manu 'depl' lis2xp2 'force' lis2yp2 ;
ev2dp2 = evol manu 'temps' l_t2 'dep_pl'
             t2dyn.liaisons.moppb.deplacement_plastique ;
*
finsi ;
finsi ;
**
*
tinit = table initial ;
tinit.reprise = tres1.reprise ;
tres2 = dyne de_vogelaere tlia tab1 tcha1 tsort 
        tinit npas dt nins ;
TTL2 = TRES2.TL1 ;
LIS_TEM2 = TRES2.'TEMPS_DE_SORTIE';
lisxp2 = TTL2.'UX' ;
lisyp2 = ttl2 .'FORCE_DE_CHOC' ;
titre 'force - deplacement';
evdf2 = evol rouge  manu 'depl' lisxp2 'force' lisyp2 ;
titre 'deplacement plastique - temps' ;
evdp2 = evol rouge manu 'temps' lis_tem2 'dep_pl'
                          ttl2.deplacement_plastique;
*
  si (neg graph  'N');
    titre 'force - deplacement';
    dess (evdf1  et evdf2) ;
    titre 'deplacement plastique - temps' ;
    dess (evdp1 et evdp2) ;
  finsi;
*
* maxima des  deplacements  plastiques theoriques
d11 = .5 ; d22 = 1.5 ;
mess 
'max des depl.  plastiques theoriques'd11'     ' d22;
d1 = maxi (extr evdp1 ordo) ; 
d2 = maxi (extr evdp2 ordo) ;
d31 = maxi (extr ev3dp1 ordo) ;
mess 
'max des depl.  plastiques  C2000    'd1'     ' d2  '    ' d31 ;
er1 = abs(d1/d11  - 1); er2 = abs (d2/d22 - 1);  
er3 = abs(d31/d11  - 1) ;
mess 
'erreur                         'er1'%     'er2'%  'er3 '%  ' ;
err =  maxi (prog  er1 er2) ;
 si (err > .005) ;
   erre  5 ;
 sinon ;
   erre  0 ;
 finsi;
fin ;



 

 

 

 

