* fichier : chab_cis2.dgibi
complet = faux;
*
*************************************************
* pour calcul complet mettre complet à : vrai;
***************************************************
**************************************************
* *
* TEST DE VALIDATION D'UNE LOI DE COMPORTEMENT *
* -------------------------------------------- *
* DE MATERIAU *
* ----------- *
* *
* LOI DE COMPORTEMENT VISCOPLASTIQUE DE: *
* CHABOCHE *
* *
* COMPARAISON DE CALCULS SUR DES ELEMENTS: *
* - MASSIF 2D ( MFR=1 ) *
* ( DEFORMATIONS PLANES ) *
* AVEC UN RESULTAT ANALYTIQUE *
* *
* STRUCTURE : UNE PLAQUE CARREE *
* - COTE : .1 M *
* - EPAISSEUR : 5.E-4 M *
* *
* CHARGEMENT : DEPLACEMENTS IMPOSES *
* CISAILLEMENT PUR *
* *
**************************************************
*
opti echo 0 ;
*
'DEBPROC' VISOHNO ta1*'TABLE' i0*'ENTIER'
sigx01*'FLOTTANT' gam0*'FLOTTANT'
R01*'FLOTTANT'
epsp01*'FLOTTANT'
gamp01*'FLOTTANT'
Xx11*'FLOTTANT'
Xx21*'FLOTTANT' ;
*
* Résolution des lois viscoplastiques de OHNO dans
* le cas unidirectionnel
*
mat0 = ta1 .'CARACTERISTIQUES' ;
mod0 = ta1 .'MODELE' ;
q00 = 0. ;
rac0 = ( 3. ) ** ( .5 ) ;
*
youn0 = 'MAXI' ( 'EXCO' mat0 'YOUN' ) ;
xnu0 = 'MAXI' ( 'EXCO' mat0 'NU' ) ;
G0 = youn0 / ( 2. * ( 1. + xnu0 ) ) ;
n0 = 'MAXI' ( 'EXCO' mat0 'N' ) ;
kk0 = 'MAXI' ( 'EXCO' mat0 'KK' ) ;
k00 = 'MAXI' ( 'EXCO' mat0 'K0' ) ;
alfk0 = 'MAXI' ( 'EXCO' mat0 'ALFK0' ) ;
alfr0 = 'MAXI' ( 'EXCO' mat0 'ALFR0' ) ;
alf0 = 'MAXI' ( 'EXCO' mat0 'ALF' ) ;
a10 = 'MAXI' ( 'EXCO' mat0 'A1' ) ;
c10 = 'MAXI' ( 'EXCO' mat0 'C1' ) ;
bet10 = 'MAXI' ( 'EXCO' mat0 'BET1' ) ;
r10 = 'MAXI' ( 'EXCO' mat0 'R1' ) ;
a20 = 'MAXI' ( 'EXCO' mat0 'A2' ) ;
c20 = 'MAXI' ( 'EXCO' mat0 'C2' ) ;
bet20 = 'MAXI' ( 'EXCO' mat0 'BET2' ) ;
r20 = 'MAXI' ( 'EXCO' mat0 'R2' ) ;
phi0 = 'MAXI' ( 'EXCO' mat0 'PHI' ) ;
b0 = 'MAXI' ( 'EXCO' mat0 'B' ) ;
gama0 = 'MAXI' ('EXCO' mat0 'GAMA' ) ;
m0 = 'MAXI' ( 'EXCO' mat0 'M' ) ;
qmax0 = 'MAXI ' ( 'EXCO' mat0 'QMAX' ) ;
qsta0 = 'MAXI' ( 'EXCO' mat0 'QSTA' ) ;
mu0 = 'MAXI' ( 'EXCO' mat0 'MU' ) ;
eta0 = 'MAXI' ( 'EXCO' mat0 'ETA' ) ;
*exp10 = 'MAXI' ( 'EXCO' mat0 'EXP1' ) ;
*exp20 = 'MAXI' ( 'EXCO' mat0 'EXP2' ) ;
*
depl0 = ta1 .'DEPLACEMENTS'.( i0 - 1 ) ;
temp1 = ta1 .'TEMPS'.i0 ;
temp0 = ta1 .'TEMPS'.( i0 - 1 ) ;
temp01 = temp0 ;
gam_old = 'MAXI' ( 'EXCO' ( 'EPSI' mod0 depl0 ) 'GAXY' ) ;
*
niter0 = 100 ;
dt0 = ( temp1 - temp0 ) / niter0 ;
sigx00 = sigx01 ;
R00 = R01 ;
epsp00 = epsp01 ;
gamp00 = gamp01 ;
Xx10 = Xx11 ;
Xx20 = Xx21 ;
*
* Incrément de contrainte test
*
spt0 = G0 * ( gam0 - gam_old ) / ( temp1 - temp0 ) ;
*mess ' sigx00 R00 gamp00 Xx10 Xx20=' sigx00 R00 gamp00 Xx10 Xx20 ;
*
'REPETER' bloc0 niter0 ;
*
* Initialisation du calcul pour un pas de temps
*
temp01 = temp01 + dt0 ;
depsx9 = 0. ;
dXx8 = 0. ;
dXx9 = 0. ;
dr9 = 0. ;
sigx0 = sigx00 ;
R0 = R00 ;
epsp0 = epsp00 ;
gamp0 = gamp00 ;
Xx1 = Xx10 ;
Xx2 = Xx20 ;
*
'REPETER' bloc1 2 ;
i1 = &bloc1 ;
*
* Memoire en déformation inélastique
*
qq = eta0 * epsp0 ;
geta0 = ( 1. - eta0 ) * gamp0 / 2. ;
Q0 = qmax0 -
( ( qmax0 - q00 ) *
( 'EXP' ( -2. * mu0 * qq ) ) ) ;
QR = Q0 - ( qsta0 * ( 1. - ( ( ( qmax0 - Q0 ) / qmax0 ) ** 2. ) ) ) ;
RR0 = alfr0 * R0 ;
KR0 = k00 + ( alfk0 * R0 ) ;
* mess ' qq, Q0, QR, RR0, KR0=' qq Q0 QR RR0 KR0 ;
*
* Critère
*
Xx0 = Xx1 + Xx2 ;
F0 = rac0 * ( sigx0 - Xx0 ) ;
F0 = F0 - RR0 - kk0 ;
*
* Ecrouissages
*
'SI' ( F0 '>' 0. ) ;
depsx0 = ( F0 / KR0 ) ** ( n0 ) ;
depsx1 = alf0 * ( ( F0 / KR0 ) ** ( n0 + 1. ) ) ;
depsx1 = 'EXP' ( depsx1 ) ;
depsx0 = depsx0 * depsx1 * dt0 ;
'SINON' ;
depsx0 = 0. ;
'FINSI' ;
* mess ' depsx0 F0 = ' depsx0 F0 ;
dr0 = b0 * ( Q0 - R0 ) * depsx0 ;
dr1 = gama0 * ( ( 'ABS' ( QR - R0 ) ) ** ( m0 - 1. ) ) ;
dr1 = dr1 * ( QR - R0 ) ;
dr0 = dr0 + ( dr1 * dt0 ) ;
phi = phi0 + ( ( 1. - phi0 ) * ( 'EXP' ( -1. * b0 * epsp0 ) ) ) ;
dXx1 = 2. * a10 * c10 * rac0 * depsx0 / 6. ;
dXx1 = dXx1 - ( c10 * Xx1 * depsx0 * phi ) ;
dXx1 = dXx1 -
( ( ( ( Xx1 * rac0 ) / bet10 ) ** ( r10 - 1. ) ) * Xx1 * dt0 ) ;
dXx2 = 2. * a20 * c20 * depsx0 * rac0 / 6. ;
dXx2 = dXx2 - ( c20 * Xx2 * depsx0 * phi ) ;
dXx2 = dXx2 -
( ( ( ( Xx2 * rac0 ) / bet20 ) ** ( r20 - 1. ) ) * Xx2 * dt0 ) ;
* mess ' dr0 phi dXx1 dXx2 i1 =' dr0 phi dXx1 dXx2 i1 ;
*
* Somme ( Runge-Kutta )
*
dr0 = ( dr0 + dr9 ) / i1 ;
depsx0 = ( depsx0 + depsx9 ) / i1 ;
dXx1 = ( dXx1 + dXx8 ) / i1 ;
dXx2 = ( dXx2 + dXx9 ) / i1 ;
dr9 = dr0 ;
depsx9 = depsx0 ;
dXx8 = dXx1 ;
dXx9 = dXx2 ;
* mess ' dr0 depsx0 dXx1 dXx2 i1 =' dr0 depsx0 dXx1 dXx2 i1 ;
*
* Calcul des grandeurs actuelles
*
R0 = R00 + dr0 ;
epsp0 = epsp00 + depsx0 ;
gamp0 = gamp00 + ( depsx0 * rac0 ) ;
Xx1 = Xx10 + dXx1 ;
Xx2 = Xx20 + dXx2 ;
sigx0 = sigx00 + ( dt0 * spt0 )
- ( G0 * depsx0 * rac0 ) ;
* mess ' R00 epsx00 Xx10 Xx20 sigx00 =' R00 epsx00 Xx10 Xx20 sigx00 ;
* mess ' R0 epsx0 Xx1 Xx2 sigx0 =' R0 epsx0 Xx1 Xx2 sigx0 ;
*
'FIN' bloc1 ;
*
* Mise à jour des valeurs
*
R00 = R0 ;
epsp00 = epsp0 ;
gamp00 = gamp0 ;
geta0 = ( 1. - eta0 ) * gamp0 / 2. ;
Xx10 = Xx1 ;
Xx20 = Xx2 ;
sigx00 = sigx0 ;
*
'FIN' bloc0 ;
*
'MESS' ' Temps final ' temp01 temp1 ;
*
'FINP' sigx00 R00
epsp0 Xx10 Xx20 gamp0 geta0 ;
*
*---------------------------------------------------------------
*
*
*
opti echo 0 dime 2 elem qua4 ;
*
* Maillage
*
p1 = 0. 0. ;
p2 = 1. 0. ;
p3 = 1. 1. ;
p4 = 0. 1. ;
li1 = d p1 1 p2 ;
li2 = d p2 1 p3 ;
li3 = d p3 1 p4 ;
li4 = d p4 1 p1 ;
mail1 = 'SURF' ( li1 'ET' li2 'ET' li3 'ET' li4 ) 'PLAN' ;
*trace mail1 ;
*
* Modele
*
mod0 = 'MODE' mail1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
'VISCOPLASTIQUE' 'CHABOCHE' ;
mat0 = 'MATE' mod0 'YOUN' 2.1E11 'NU' .3
'N' 24 'KK' 10.E6 'K0' 116.E6 'ALFK' 1.5 'ALFR' .35 'ALF' 2.E6
'A1' 67.5E6 'C1' 1300 'BET1' 4807E6 'R1' 4 'A2' 80.6 'C2' 45
'BET2' 58480.E6 'R2' 4 'PHI' 1.
'B' 12 'GAMA' 2.E-7 'M' 2
'QMAX' 455.E6 'QSTA' 200.E6 'MU' 19 'ETA' 0.50 ;
*
* Conditions aux limites
*
cl1 = 'BLOQ' li1 'UX' 'UY' ;
cl2 = 'BLOQ' li3 'UY' ;
cl3 = 'BLOQ' li3 'UX' ;
cl0 = cl1 'ET' cl2 'ET' cl3 ;
*
* Chargement
*
dep0 = 'DEPI' cl3 .02 ;
ev0 = 'EVOL' 'MANU' temps ( 'PROG' 0. 1000. ) y ( 'PROG' 0. 1. ) ;
cha0 = 'CHAR' 'DIMP' dep0 ev0 ;
*
dt0 = 50. ;
tfin0 = 1000. ;
*
* Appel à PASAPAS
*
ta1 = 'TABLE' ;
ta1 .'MODELE' = mod0 ;
ta1 .'CARACTERISTIQUES' = mat0 ;
ta1 .'CHARGEMENT' = cha0 ;
ta1 .'BLOCAGES_MECANIQUES' = cl0 ;
ta1 .'TEMPS_CALCULES' = ( 'PROG' 0. 'PAS' dt0 tfin0 ) ;
*
TMASAU=table;
ta1 . 'MES_SAUVEGARDES'=TMASAU;
TMASAU .'DEFTO'=VRAI;
TMASAU .'DEFIN'=VRAI;
PASAPAS ta1 ;
*
* Post traitement
*
dim0 = 'DIME' ( ta1 .'TEMPS' ) ;
epsp00 = 0. ;
sig_th00 = 0. ;
gam_th00 = 0. ;
R01 = 0. ;
Xx11 = 0. ;
Xx21 = 0. ;
sigxy1 = 'PROG' 0. ;
gaxy1 = 'PROG' 0. ;
sig_th1 = 'PROG' 0. ;
gam_th1 = 'PROG' 0. ;
geta_th1 = 'PROG' 0. ;
err_e1 = 'PROG' 0. ;
err_s1 = 'PROG' 0. ;
err_g1 = 'PROG' 0. ;
geta1 = 'PROG' 0. ;
si ( non complet);
sig_th1 = 'PROG' 0. 5.30135E+07 6.72715E+07 7.56639E+07
8.03405E+07 8.29554E+07 8.45177E+07
8.55710E+07 8.63894E+07 8.71063E+07
8.77856E+07 8.84571E+07 8.91349E+07 8.98249E+07 9.05299E+07
9.12506E+07 9.19870E+07 9.27388E+07 9.35055E+07 9.42864E+07
9.50810E+07;
gam_th1 = 'PROG' 0. 3.43642E-04 1.16711E-03 2.06321E-03
3.00531E-03
3.97293E-03 4.95359E-03 5.94055E-03 6.93042E-03 7.92154E-03
8.91313E-03 9.90482E-03 1.08964E-02 1.18879E-02
1.28792E-02 1.38702E-02 1.48611E-02 1.58518E-02
1.68423E-02 1.78326E-02 1.88228E-02;
geta_th1 = 'PROG' 0.
8.54369E-05 2.91779E-04 5.15802E-04 7.51327E-04
9.93233E-04 1.23840E-03 1.48514E-03 1.73260E-03 1.98039E-03
2.22828E-03 2.47620E-03 2.72411E-03 2.97197E-03 3.21979E-03
3.46756E-03 3.71528E-03 3.96295E-03 4.21058E-03 4.45816E-03
4.70570E-03;
finsi;
*
bool0 = faux ;
'REPETER' bloc0 ( dim0 - 1 ) ;
i0 = &bloc0 ;
depl0 = ta1 .'DEPLACEMENTS'. i0 ;
sigm0 = ta1 .'CONTRAINTES'. i0 ;
eps0 = 'EPSI' mod0 depl0 ;
def0 = ta1 .'DEFORMATIONS_INELASTIQUES'. i0 ;
var0 = ta1 .'VARIABLES_INTERNES'. i0 ;
*
sigxy0 = 'MAXI' ( 'EXCO' sigm0 'SMXY' ) ;
gaxy0 = 'MAXI' ( 'EXCO' def0 'GIXY' ) ;
gam0 = 'MAXI' ( 'EXCO' eps0 'GAXY' ) ;
geta0 = 'MAXI' ( 'EXCO' var0 'GPXY' ) ;
*
gaxy1 = gaxy1 'ET' ( 'PROG' gaxy0 ) ;
sigxy1 = sigxy1 'ET' ( 'PROG' sigxy0 ) ;
geta1 = geta1 'ET' ( 'PROG' geta0 ) ;
*
si complet;
sig_th0 R00 epsp0 Xx10 Xx20 gam_th0 geta_th0 = VISOHNO
ta1 i0 sig_th00 gam0 R01 epsp00 gam_th00 Xx11 Xx21 ;
*
sig_th00 = sig_th0 ;
R01 = R00 ;
epsp00 = epsp0 ;
gam_th00 = gam_th0 ;
Xx11 = Xx10 ;
Xx21 = Xx20 ;
*
sig_th1 = sig_th1 'ET' ( 'PROG' sig_th0 ) ;
gam_th1 = gam_th1 'ET' ( 'PROG' gam_th0 ) ;
geta_th1 = geta_th1 'ET' ( 'PROG' geta_th0 ) ;
sinon;
sig_th0 = extr sig_th1 ( i0 + 1);
gam_th0 = extr gam_th1 ( i0 + 1);
geta_th0= extr geta_th1 ( i0 + 1);
finsi;
*
*'MESS' ' Gama theorique=' gam_th0 ;
*'MESS' ' Gama calculé =' gaxy0 ;
*'MESS' ' sig theorique =' sig_th0 ;
*'MESS' ' sig calcule =' sigxy0 ;
*
* Erreurs
*
'SI' ( gaxy0 'NEG' 0. ) ;
err_e0 = ( 'ABS' ( gam_th0 - gaxy0 ) ) / gaxy0 ;
err_e0 = err_e0 * 100. ;
'SINON' ;
err_e0 = 0. ;
'FINSI' ;
'SI' ( sigxy0 'NEG' 0. ) ;
err_s0 = ( 'ABS' ( sig_th0 - sigxy0 ) ) / sigxy0 ;
err_s0 = err_s0 * 100. ;
'SINON' ;
err_s0 = 0. ;
'FINSI' ;
*mess ' err_e0 , err_s0 =' err_e0 err_s0 ;
err_e1 = err_e1 'ET' ( 'PROG' err_e0 ) ;
err_s1 = err_s1 'ET' ( 'PROG' err_s0 ) ;
'SI' ( geta0 '>' 0. ) ;
err_g0 = ( 'ABS' ( geta_th0 - geta0 ) ) / geta0 ;
err_g0 = err_g0 * 100. ;
'SINON' ;
err_g0 = 0. ;
'FINSI' ;
err_g1 = err_g1 'ET' ( 'PROG' err_g0 ) ;
mess ' err_g0,geta0 , geta_th0 = ' err_g0 geta0 geta_th0 ;
'SI' ( ( ( err_e0 '>' 1.E-2 ) 'OU' ( err_s0 '>' 1.E-2 ) ) 'OU'
( err_g0 '>' 8.E-1 ) ) ;
bool0 = vrai ;
'FINSI' ;
*
'FIN' bloc0 ;
*
'SI' ( bool0 'EGA' vrai ) ;
'ERRE' 5 ;
'SINON' ;
'ERRE' 0 ;
'FINSI' ;
* Traces
*
trac1 = 'EVOL' 'MANU' 'gama' gaxy1 'sigm' sigxy1 ;
trac2 = 'EVOL' 'MANU' 'gama' gam_th1 'sigm' sig_th1 ;
TAB = 'TABLE' ;
TAB. 1 = 'MARQ PLUS ' ;
TAB. 2 = 'MARQ CROI ' ;
TAB.'TITRE' = 'TABLE' ;
TAB.'TITRE'. 1 = MOT 'THEORIE' ;
TAB.'TITRE'. 2 = MOT 'CALCUL' ;
*'DESSIN' ( trac2 'ET' trac1 )
*'TITR' ' Comparaison theorie calcul'
*'LEGE' TAB ;
trac3 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_e1 ;
trac4 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_s1 ;
TAB = 'TABLE' ;
TAB. 1 = 'MARQ PLUS ' ;
TAB. 2 = 'MARQ CROI ' ;
TAB.'TITRE' = 'TABLE' ;
TAB.'TITRE'. 1 = MOT 'GAMA' ;
TAB.'TITRE'. 2 = MOT 'CONTRAINTE' ;
*'DESSIN' ( trac3 'ET' trac4 )
*'TITR' ' Evolution des erreurs en %'
*'LEGE' TAB ;
trac5 = 'EVOL' 'MANU' 'gama' gaxy1 'erreur_%' err_g1 ;
trac6 = 'EVOL' 'MANU' 'gama' gaxy1 'geta' geta_th1 ;
trac7 = 'EVOL' 'MANU' 'gama' gaxy1 'geta' geta1 ;
'SI' ( geta0 '>' 0. ) ;
TAB = 'TABLE' ;
TAB. 1 = 'MARQ PLUS ' ;
TAB. 2 = 'MARQ CROI ' ;
TAB.'TITRE' = 'TABLE' ;
TAB.'TITRE'. 1 = MOT 'THEORIE' ;
TAB.'TITRE'. 2 = MOT 'CALCUL' ;
*'DESSIN' ( trac6 'ET' trac7 )
*'TITR' ' Geta calcul theorie'
*'LEGE' TAB ;
*'DESSIN' trac5 'TITR' ' Erreur sur geta en %' ;
'FINSI' ;
*
'FIN' ;
© Cast3M 2003 - All rights reserved.
Disclaimer