* fichier : dyna14.dgibi ************************************************************************ * Section : Mecanique Dynamique ************************************************************************ ************************************************************************ * * Mots-clés : Vibrations, calcul modal, sous-structuration, * Craigh-Brampton, dynamique * TEST POUR LA SOUS-STRUCTURATION SANS UTILISATION DE BASE * Etude d'un ASSEMBLAGE DE 2 PLAQUES * Creation : D. COMBESCURE 30/09/2005 * Modif : B Prabel, 12/09/2014 : + sous-structuration libre-libre * ************************************************************************ * *GRAPH = VRAI; OPTI TRAC PSC EPTR 5 POTR HELVETICA_16; GRAPH = FAUX; * opti dime 2 elem qua4 mode plan defo; ************************************************************************ * Maillage ************************************************************************ nele = 1; q0 = 0. 0. ; vz = 0. 1; q1 = 5. 0. ; q2 = 10. 0. ; q1b = q1 plus (0. 0.); q3 = q0 plus vz; q4 = q1 plus vz; q5 = q2 plus vz; q4b = q4 plus (0. 0.); lig1 = d (5*nele) q0 q1 ; sur1 = tran nele lig1 vz; ligi0 = d nele q0 q3; ligi1 = d nele q1 q4; elim 0.0001 (lig1 et sur1 et ligi1 et ligi0); lig2 = d (5*nele) q1b q2 ; sur2 = coul (tran nele lig2 vz) rouge; ligi1b = d nele q1b q4b; ligi2 = d nele q2 q5; elim 0.0001 (lig2 et sur2 et ligi2 et ligi1b); surtot = sur1 et sur2; si (GRAPH); trac (surtot) 'TITRE' 'Maillage 1 (noir) et 2 (rouge)'; finsi; ************************************************************************ * Modèles et matrices ************************************************************************ * Plaque 1 * MO1 = MODE SUR1 'MECANIQUE' 'ELASTIQUE' 'QUA4' ; MATE1 = MATE MO1 'YOUNG' 2.E5 'NU' 0.3 'RHO' 7.800D-3; RIGPL1 = RIGI MATE1 MO1 ; MASPL1 = MASS MATE1 MO1 ; BLOQ1 = BLOQ 'DEPL' ligi0; RIGPLA1= RIGPL1 et BLOQ1 ; *bp SPLA1 = STRU RIGPLA1 MASPL1; Meshi1 = ligi1; BLOQ1L = (BLOQ 'UX' Meshi1) et (BLOQ 'UY' Meshi1); * * Plaque 2 * MO2 = MODE SUR2 'MECANIQUE' 'ELASTIQUE' 'QUA4' ; MATE2 = MATE MO2 'YOUNG' 2.E5 'NU' 0.3 'RHO' 7.80d-3; RIGPL2 = RIGI MATE2 MO2 ; MASPL2 = MASS MATE2 MO2 ; BLOQ2 = BLOQ DEPL ligi2; Meshi2 = ligi1b; BLOQ2L =(BLOQ UX Meshi2) et (BLOQ UY Meshi2); RIGPLA2 = RIGPL2 et BLOQ2 ; * Liaison inter-plaque LIUX = RELA 'UX' Meshi1 - 'UX' Meshi2 ; LIUY= RELA 'UY' Meshi1 - 'UY' Meshi2; ENCL = (LIUX et LIUY); ************************************************************************ * Calcul du système complet sans sous-structuration ************************************************************************ * calcul des modes nmodo = 4; SOLREF = VIBR 'PROCH' (PROG 0.) (lect nmodo) (RIGPLA2 et RIGPLA1 et ENCL) (MASPL2 et MASPL1) ; * calcul de la reponse forcee harmonique ptF = sur2 poin PROCH (q1b plus (0.4*(q2 moins q1b))); F1 = FORC 'FY' 1. ptF; OMEGA = 50.; KDYN = (RIGPLA2 et RIGPLA1 et ENCL) et ( -1.*((2.*pi*OMEGA)**2) * (MASPL2 et MASPL1)); UDYN = RESO KDYN F1; UY1ref = EXTR UDYN 'UY' q1; si GRAPH; trac (vect F1 1. 'FORC' 'VERT') surtot; finsi; ************************************************************************ * Methode de sous-structuration de Craigh brampton ************************************************************************ ********* Etape 1 : calcul des modes propres et statiques ********* * mode propre Plaque 1 (= modes propres "bloqués") * nmod1 = 1; MODPLA1 = VIBR 'PROCH' (prog 0.) (lect nmod1) (RIGPLA1 et BLOQ1L) MASPL1 ; i = 0; repe Bmod1 nmod1; i = i + 1 ; def1 = MODPLA1 . 'MODES' . i . 'DEFORMEE_MODALE'; frq1 = MODPLA1 . 'MODES' . i . 'FREQUENCE'; mm1 = MODPLA1 . 'MODES' . i . 'MASSE_GENERALISEE'; cha1 = chai 'Plaque 1 : Mode bloqué ' i ' - f= ' frq1 ' - m=' mm1; MESS cha1; si (GRAPH); trac (defo sur1 def1) 'TITRE' cha1; finsi; fin Bmod1; * mode propre Plaque 2 (= modes propres "bloqués") * nmod2 = 1; MODPLA2 = VIBR 'PROCH' (prog 0.) (lect nmod2) (RIGPLA2 et BLOQ2L) MASPL2 ; * i = 0; repe Bmod2 nmod2; i = i + 1 ; def2 = MODPLA2 . 'MODES' . i . 'DEFORMEE_MODALE'; frq2 = MODPLA2 . 'MODES' . i . 'FREQUENCE'; mm2 = MODPLA2 . 'MODES' . i . 'MASSE_GENERALISEE'; cha2 = chai 'Plaque 2 : Mode bloqué ' i ' - f= ' frq2 ' - m=' mm2; MESS cha2; si (GRAPH); trac (defo sur2 def2) 'TITRE' cha2; finsi; fin Bmod2; * modes statiques Plaque 1 (on impose u=1 sur chaque ddl) * creation de la table LIAISONS_STATIQUES tblsta1 = IDLI BLOQ1L Meshi1; * creation des blocages de chaque ddl individuellement bliaiq1 = BLOQ tblsta1 ; * creation du 2nd membre associé à chaque blocage DEPI tblsta1; * resolution (statique) de chaque pb lineaire a deplacement imposé RESO (RIGPLA1 et bliaiq1) tblsta1; * calcul de chaque force de reaction REAC bliaiq1 tblsta1; nstat1 = ((dime tblsta1) - 1); i = 0; repe Bstat1 nstat1; i = i + 1; motinc = tblsta1 . i . 'DDL_LIAISON' ; notinc = noeu tblsta1 . i . 'POINT_LIAISON' ; ptrep1 = tblsta1 . i . 'POINT_REPERE' ; defsta1= tblsta1. i . 'DEFORMEE'; cha1 = chai 'Mode statique ' i ' - ddl :'motinc ' #'notinc ' ->' (noeu ptrep1); mess cha1; si (GRAPH); trac (defo (surtot) defsta1) 'TITRE' cha1; finsi; fin Bstat1; * modes statiques Plaque 2 (on impose u=1 sur chaque ddl) * creation de la table LIAISONS_STATIQUES tblsta2 = IDLI BLOQ2L Meshi2; * creation des blocages de chaque ddl individuellement bliaiq2 = BLOQ tblsta2 ; * creation du 2nd membre associé à chaque blocage DEPI tblsta2; * resolution (statique) de chaque pb lineaire a deplacement imposé RESO (RIGPLA2 et bliaiq2) tblsta2; * calcul de chaque force de reaction REAC bliaiq2 tblsta2; nstat2 = ((dime tblsta2) - 1); i = 0; repe Bstat2 nstat2; i = i + 1; motinc = tblsta2 . i . 'DDL_LIAISON' ; notinc = noeu tblsta2 . i . 'POINT_LIAISON' ; ptrep2 = tblsta2 . i . 'POINT_REPERE' ; defsta2= tblsta2. i . 'DEFORMEE'; cha2 = chai 'Mode statique ' i ' - ddl :'motinc ' #'notinc ' ->' (noeu ptrep2); mess cha2; si (GRAPH); trac (defo (surtot) defsta2) 'TITRE' cha2; finsi; fin Bstat2; ********* Etape 2 : calcul des matrices projetees ********* * calcul direct via les operateur RIGI et MASS rigtot1 = rigi tblsta1 modpla1; mastot1 = mass tblsta1 modpla1 MASPL1; rigtot2 = rigi tblsta2 modpla2; mastot2 = mass tblsta2 modpla2 MASPL2; * on peut aussi passer par PJBA (plus couteux mais plus general) rigtot1p = PJBA RIGPL1 tblsta1 modpla1; mastot1p = PJBA MASPL1 tblsta1 modpla1; rigtot2p = PJBA RIGPL2 tblsta2 modpla2; mastot2p = PJBA MASPL2 tblsta2 modpla2; * projection de la liaison 1-2 : seul les modes statiques sont non-nuls ENCLP = PJBA ENCL (tblsta1 et tblsta2); * assemblage RIGMO = rigtot1 et rigtot2 et ENCLP; MASMO = mastot1 et mastot2; ****** Etape 3 : calcul sur système complet sur base réduite ******* * * calcul des modes SOL_SS = VIBR 'PROCH' (PROG 0.1) (lect nmodo) RIGMO MASMO ; * calcul de la reponse forcee harmonique F1_SS = PJBA F1 modpla2 tblsta2; KDYNSS = RIGMO et ( -1.*((2.*pi*OMEGA)**2) * MASMO); UDYNSS = RESO KDYNSS F1_SS; UDYNSS = RECO UDYNSS (modpla1 et modpla2) (tblsta1 et tblsta2); UY1_ss = EXTR UDYNSS 'UY' q1; ************************************************************************ * Methode de sous-structuration libre-libre ************************************************************************ * mode propre Plaque 1 (= modes propres "libres") * nmod1 = 4; MODPLL1 = VIBR 'PROCH' (prog 0.) (lect nmod1) (RIGPLA1) MASPL1 ; * mode propre Plaque 2 (= modes propres "libres") * nmod2 = 4; MODPLL2 = VIBR 'PROCH' (prog 0.) (lect nmod2) (RIGPLA2) MASPL2 ; * reunion des 2 bases MODPLL = MODPLL1 et MODPLL2; * i = 0; repe Bmod (nmod1 + nmod2); i = i + 1 ; def = MODPLL . 'MODES' . i . 'DEFORMEE_MODALE'; frq = MODPLL . 'MODES' . i . 'FREQUENCE'; mm = MODPLL . 'MODES' . i . 'MASSE_GENERALISEE'; cha = chai ' Mode libre ' i ' - f= ' frq ' - m=' mm; MESS cha; si (GRAPH); trac (defo surtot def) 'TITRE' cha; finsi; fin Bmod; * equation de liaison projetee sur la base libre ENCLL = PJBA ENCL MODPLL; RIGLL = PJBA (RIGPLA1 et RIGPLA2) MODPLL; MASLL = PJBA (MASPL1 et MASPL2 ) MODPLL; * calcul des modes du système complet * SOL_LL = VIBR 'PROCH' (PROG 0.1) (lect nmodo) SOL_LL = VIBR 'SIMUL' 0.1 nmodo (RIGLL et ENCLL) MASLL ; * calcul de la reponse forcee harmonique * F1_LL = PJBA F1 MODPLL; F1_LL = PJBA F1 MODPLL2; KDYNLL = RIGLL et ENCLL et ( -1.*((2.*pi*OMEGA)**2) * MASLL); UDYNLL = RESO KDYNLL F1_LL; UDYNLL = RECO UDYNLL MODPLL; UY1_ll = EXTR UDYNLL 'UY' q1; ************************************************************************ * Comparaison des resultats obtenus avec diverses methodes ************************************************************************ * calcul des modes MESS ' Mode | Reference | Craigh-Brampton | Libre-Libre'; i = 0; REPE BMODO nmodo; i = i + 1 ; fr1ref = SOLREF . 'MODES' . i . 'FREQUENCE'; fr1_ss = SOL_SS . 'MODES' . i . 'FREQUENCE'; fr1_ll = SOL_LL . 'MODES' . i . 'FREQUENCE'; MESS i fr1ref fr1_ss fr1_ll; si (GRAPH); def0 = SOLREF. 'MODES' . i . 'DEFORMEE_MODALE'; trac (defo (surtot) def0) 'TITRE' (chai 'mode 'i 'f=' fr1ref); def1 = reco (SOL_SS. 'MODES' . i . 'DEFORMEE_MODALE') tblsta1 modpla1; def2 = reco (SOL_SS. 'MODES' . i . 'DEFORMEE_MODALE') tblsta2 modpla2; def1 = exco def1 (mots UX UY) NATURE DIFFUS; def2 = exco def2 (mots UX UY) NATURE DIFFUS; trac (defo (surtot) (def1 et def2)) 'TITRE' (chai 'mode 'i 'f=' fr1_ss); defLL = reco (SOL_LL . 'MODES' . i . 'DEFORMEE_MODALE') MODPLL; trac (defo (surtot) defLL); finsi; * fin BMODO; * calcul de la reponse forcee harmonique si GRAPH; amp = 2000.; trac ((defo UDYN amp surtot 'DEFA') et (defo UDYNSS amp surtot 'BLEU') et (defo UDYNLL amp surtot 'ROSE')); finsi; mess UY1ref UY1_ss UY1_LL; ************************************************************************ * Test de Non Regression ************************************************************************ fr1ref = SOLREF . 'MODES' . 1 . 'FREQUENCE'; fr1_ss = SOL_SS . 'MODES' . 1 . 'FREQUENCE'; fr1_ll = SOL_LL . 'MODES' . 1 . 'FREQUENCE'; erel1 = abs ((fr1_ss - fr1ref)/fr1ref); erel2 = abs ((fr1_ll - fr1ref)/fr1ref); erel3 = abs ((UY1_ss - UY1ref) / UY1ref); erel4 = abs ((UY1_LL - UY1ref) / UY1ref); mess 'Erreur relative Craigh Brampton = ' erel1 erel3; mess 'Erreur relative libre-libre = ' erel2 erel4; * les resultats obtenus par la methode libre-libre sont assez mauvais * dans ce cas de figure --> grande tolerance sur les valeurs testees SI ((erel1 < 0.01) et (erel2 < 0.20) et (erel3 < 0.01) et (erel4 < 0.50)); ERRE 0; SINON; ERRE 5; FINSI; * FIN ; * *