* fichier : joi1_lie_1.dgibi 'OPTI' 'ECHO' 0 ; ************************************************************************ * Section : Maillage Autres * Section : Mecanique Elastique ************************************************************************ ************************************************************************ * Cas test sur la mise a jour des vecteurs orientant les elements JOI1 * * avec FORM * * * * Un element JOI1 est considere, ses 6 ddl sont soumis a une serie * * de deplacements et rotations aleatoires. * * On verifie que les vecteurs du repere du joint sont correctement * * recalcule selon cette cinematique * ************************************************************************ tol1 = 1.E-13 ; ntest = 100 ; ************************************************************************ * Test en dimension 2 : on impose des valeurs aleatoires aux ddl * ************************************************************************ ** Options generales 'OPTI' 'DIME' 2 'ELEM' 'SEG2' ; p0 = 0. 0. ; ** Maillage d'un element joint p1 = 1. -2. ; p2 = p1 'PLUS' (3. -4.) ; l1 = 'DROI' 1 p1 p2 ; v1 = (0. 1.) ; ** Modele et champ materiau initial mo = 'MODE' l1 'MECANIQUE' 'ELASTIQUE' 'ORTHOTROPE' 'JOI1' 'LIE' ; ma = 'MATE' mo 'KN' 1. 'KS' 1. 'QS' 1. 'DIRECTION' v1 ; conf0 = 'FORM' ; ma1 = ma ; 'MESS' ; 'MESS' 'Test en dimension 2' ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' 'V1 initial' ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' (v1 'COOR' 1) ; 'MESS' (v1 'COOR' 2) ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' 'V1 (theorique - calcul)' ; 'MESS' '-------------------------------' '-------------------------------' ; * vecteur du repere initial v1i = v1 'PLUS' p0 ; * boucle realisant n rotation et deplacements aleatoires des deux noeuds 'REPE' b1 ntest ; mes1 = 'MESU' l1 ; rig1 = 'RIGI' mo ma1 ; lran = 'BRUI' 'BLAN' 'UNIF' 0. 1. 6 ; * deplacements et rotations (en radians) aleatoires a appliquer aux * noeuds ux1 = ('EXTR' lran 1) * mes1 ; uy1 = ('EXTR' lran 2) * mes1 ; ux2 = ('EXTR' lran 3) * mes1 ; uy2 = ('EXTR' lran 4) * mes1 ; rz1 = ('EXTR' lran 5) * pi ; rz2 = ('EXTR' lran 6) * pi ; * calcul de reference : rotation du repere avec l'operateur TOUR * on calcule la rotation equivalente a la translation du segment l1 p11 = p1 'PLUS' (ux1 uy1) ; p22 = p2 'PLUS' (ux2 uy2) ; vab = p2 'MOIN' p1 ; vcd = p22 'MOIN' p11 ; cosw1 = vab 'PSCA' vcd / (('NORM' vab) * ('NORM' vcd)) ; sig = 'SIGN' ((('COOR' 1 vab) * ('COOR' 2 vcd)) - (('COOR' 2 vab) * ('COOR' 1 vcd))) ; w1 = sig * ('ACOS' cosw1) ; cosw1 = 'COS' w1 ; v1f = v1i 'TOUR' w1 p0 ; v1f = v1f / ('NORM' v1f) ; v1i = v1f 'PLUS' p0 ; * application des ddl puis rotation du repere avec FORM bl1 = 'BLOQ' 'UX' p1 ; f1 = 'DEPI' bl1 ux1 ; bl2 = 'BLOQ' 'UX' p2 ; f2 = 'DEPI' bl2 ux2 ; bl3 = 'BLOQ' 'UY' p1 ; f3 = 'DEPI' bl3 uy1 ; bl4 = 'BLOQ' 'UY' p2 ; f4 = 'DEPI' bl4 uy2 ; bl5 = 'BLOQ' 'RZ' p1 ; f5 = 'DEPI' bl5 rz1 ; bl6 = 'BLOQ' 'RZ' p2 ; f6 = 'DEPI' bl6 rz2 ; u1 = 'RESO' (rig1 'ET' bl1 'ET' bl2 'ET' bl3 'ET' bl4 'ET' bl5 'ET' bl6) (f1 'ET' f2 'ET' f3 'ET' f4 'ET' f5 'ET' f6) ; conf1 ma1 = 'FORM' u1 mo ma1 ; r1 = ('EXTR' ma1 'V1X' 1 1 1) ('EXTR' ma1 'V1Y' 1 1 1) ; * comparaison a la solution de reference 'MESS' (v1f 'COOR' 1) (r1 'COOR' 1) ; 'MESS' (v1f 'COOR' 2) (r1 'COOR' 2) ; err1 = ('NORM' (v1f 'MOIN' r1)) / ('NORM' v1f) ; 'MESS' ' erreur = ' err1 ; 'MESS' '-------------------------------' '-------------------------------' ; * test sur l'erreur 'SI' (('ABS' err1) > tol1) ; 'ERREUR' 5 ; 'FINS' ; 'FIN' b1 ; 'MESS' ; 'MESS' ; 'MESS' ; ************************************************************************ * Test en dimension 3 : on impose des valeurs aleatoires aux ddl * ************************************************************************ ** Options generales 'OPTI' 'DIME' 3 'ELEM' 'SEG2' 'ECHO' 0 ; tol1 = 1.E-13 ; p0 = 0. 0. 0. ; ** Maillage d'un element joint p1 = 1. -2. 3. ; p2 = p1 'PLUS' (-4. 5. -6.) ; l1 = 'DROI' 1 p1 p2 ; v1 = (1. 0. 0.) ; v2 = (0. 1. 0.) ; ** Modele et champ materiau initial mo = 'MODE' l1 'MECANIQUE' 'ELASTIQUE' 'ORTHOTROPE' 'JOI1' 'LIE' ; ma = 'MATE' mo 'KN' 1. 'KS1' 1. 'KS2' 1. 'QN' 1. 'QS1' 1. 'QS2' 1. 'DIRECTION' v1 v2 ; conf0 = 'FORM' ; ma1 = ma ; 'MESS' ; 'MESS' 'Test en dimension 3' ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' 'V1 initial | V2 initial ' ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' (v1 'COOR' 1) ' | ' (v2 'COOR' 1) ; 'MESS' (v1 'COOR' 2) ' | ' (v2 'COOR' 2) ; 'MESS' (v1 'COOR' 3) ' | ' (v2 'COOR' 3) ; 'MESS' '-------------------------------' '-------------------------------' ; 'MESS' 'V1 (theorique - calcul) | V2 (theorique - calcul) ' ; 'MESS' '-------------------------------' '-------------------------------' ; * vecteurs du repere initial v1i = v1 'PLUS' p0 ; v2i = v2 'PLUS' p0 ; * boucle realisant n rotation et deplacements aleatoires des deux noeuds 'REPE' b1 ntest ; rig1 = 'RIGI' mo ma1 ; lran = 'BRUI' 'BLAN' 'UNIF' 0. 1. 12 ; * deplacements et rotations (en radians) aleatoires a appliquer aux * noeuds ux1 = 'EXTR' lran 1 ; uy1 = 'EXTR' lran 2 ; uz1 = 'EXTR' lran 3 ; ux2 = 'EXTR' lran 4 ; uy2 = 'EXTR' lran 5 ; uz2 = 'EXTR' lran 6 ; rx1 = ('EXTR' lran 7) * pi ; ry1 = ('EXTR' lran 8) * pi ; rz1 = ('EXTR' lran 9) * pi ; rx2 = ('EXTR' lran 10) * pi ; ry2 = ('EXTR' lran 11) * pi ; rz2 = ('EXTR' lran 12) * pi ; * calcul de reference 1 : rotation du repere avec l'operateur TOUR * on calcule la rotation equivalente autour de l'axe (p1,p2) p1p2 = (p2 'MOIN' p1) ; p1p2 = p1p2 / ('NORM' p1p2) ; vrmoy = 0.5 * (180. / pi) * ((rx1 ry1 rz1) 'PLUS' (rx2 ry2 rz2)) ; w1 = vrmoy 'PSCA' p1p2 ; v1o = v1i 'TOUR' w1 p0 p1p2 ; v2o = v2i 'TOUR' w1 p0 p1p2 ; * calcul de reference 2 : rotation du repere avec l'operateur TOUR * on calcule la rotation equivalente a la translation du segment l1 p11 = p1 'PLUS' (ux1 uy1 uz1) ; p22 = p2 'PLUS' (ux2 uy2 uz2) ; vr = (p2 'MOIN' p1) 'PVEC' (p22 'MOIN' p11) ; vr = vr / ('NORM' vr) ; cosw1 = (p2 'MOIN' p1) 'PSCA' (p22 'MOIN' p11) / (('NORM' (p2 'MOIN' p1)) * ('NORM' (p22 'MOIN' p11))) ; w1 = 'ACOS' cosw1 ; v1f = v1o 'TOUR' w1 p0 vr ; v2f = v2o 'TOUR' w1 p0 vr ; v1f = v1f / ('NORM' v1f) ; v2f = v2f / ('NORM' v2f) ; v1i = v1f 'PLUS' p0 ; v2i = v2f 'PLUS' p0 ; * application des ddl puis rotation du repere avec FORM bl1 = 'BLOQ' 'UX' p1 ; f1 = 'DEPI' bl1 ux1 ; bl2 = 'BLOQ' 'UX' p2 ; f2 = 'DEPI' bl2 ux2 ; bl3 = 'BLOQ' 'UY' p1 ; f3 = 'DEPI' bl3 uy1 ; bl4 = 'BLOQ' 'UY' p2 ; f4 = 'DEPI' bl4 uy2 ; bl5 = 'BLOQ' 'UZ' p1 ; f5 = 'DEPI' bl5 uz1 ; bl6 = 'BLOQ' 'UZ' p2 ; f6 = 'DEPI' bl6 uz2 ; bl7 = 'BLOQ' 'RX' p1 ; f7 = 'DEPI' bl7 rx1 ; bl8 = 'BLOQ' 'RX' p2 ; f8 = 'DEPI' bl8 rx2 ; bl9 = 'BLOQ' 'RY' p1 ; f9 = 'DEPI' bl9 ry1 ; bl10 = 'BLOQ' 'RY' p2 ; f10 = 'DEPI' bl10 ry2 ; bl11 = 'BLOQ' 'RZ' p1 ; f11 = 'DEPI' bl11 rz1 ; bl12 = 'BLOQ' 'RZ' p2 ; f12 = 'DEPI' bl12 rz2 ; u1 = 'RESO' (rig1 'ET' bl1 'ET' bl2 'ET' bl3 'ET' bl4 'ET' bl5 'ET' bl6 'ET' bl7 'ET' bl8 'ET' bl9 'ET' bl10 'ET' bl11 'ET' bl12) (f1 'ET' f2 'ET' f3 'ET' f4 'ET' f5 'ET' f6 'ET' f7 'ET' f8 'ET' f9 'ET' f10 'ET' f11 'ET' f12) ; conf1 ma1 = 'FORM' u1 mo ma1 ; r1 = ('EXTR' ma1 'V1X' 1 1 1) ('EXTR' ma1 'V1Y' 1 1 1) ('EXTR' ma1 'V1Z' 1 1 1) ; r2 = ('EXTR' ma1 'V2X' 1 1 1) ('EXTR' ma1 'V2Y' 1 1 1) ('EXTR' ma1 'V2Z' 1 1 1) ; * comparaison a la solution de reference 'MESS' (v1f 'COOR' 1) (r1 'COOR' 1) '| ' (v2f 'COOR' 1) (r2 'COOR' 1) ; 'MESS' (v1f 'COOR' 2) (r1 'COOR' 2) '| ' (v2f 'COOR' 2) (r2 'COOR' 2) ; 'MESS' (v1f 'COOR' 3) (r1 'COOR' 3) '| ' (v2f 'COOR' 3) (r2 'COOR' 3) ; err1 = ('NORM' (v1f 'MOIN' r1)) / ('NORM' v1f) ; err2 = ('NORM' (v2f 'MOIN' r2)) / ('NORM' v2f) ; 'MESS' ' erreur = ' err1 ' | erreur = ' err2 ; 'MESS' '-------------------------------' '-------------------------------' ; * test sur l'erreur 'SI' ((('ABS' err1) > tol1) 'OU' (('ABS' err2) > tol1)) ; 'ERREUR' 5 ; 'FINS' ; 'FIN' b1 ; 'FIN' ;