* CAMPBELL PROCEDUR BP208322 17/10/03 21:15:11 9580 ************************************************************************* * * * Procédure CAMPBELL * * Calcule le diagramme de Campbell d'une machine tournante * Le diagramme peut être calculé dans le repère fixe * (diagramme classique pour des modélisation de type poutre avec couplage gyrosc * ou dans le repère tournant (évolution des fréquences en tenant compte * des raideurs centrifuges, de précontrainte et du couplage de Coriolis) * ************************************************************************* * * INPUT *========= * * * PRFREQ: LISTREEL contenant les fréquences de rotation pour lesquelles * on calcule le diagramme de Campbell * * TAB1 Table contenant: * * TAB1.'BASE_MODALE': Table contenant la base de modes réels utilisées * (table générée par VIBR) * * Les matrices de masse, de raideur, d'amortissement et de couplage * peuvent être données déjà projetées sur la base de modes réels ou non: * * TAB1.'MASS_PROJ': Matrice de masse projetée sur les modes réels utilisés * TAB1.'MASSE': Matrice de masse * * TAB1.'RIGI_PROJ': Matrice de rigidité projetée sur les modes réels utilisés * TAB1.'RIGIDITE': Matrice de rigidité * * TAB1.'AMOR_PROJ': Matrice d'amortissement projetée sur les modes réels utili * TAB1.'AMORTISSEMENT': Matrice d'amortissement * * Pour les diagrammes de Campbell classique (dans le repère fixe) * * TAB1.'KROT_PROJ': Matrice de raideur antisymétrique due à l'amortissement co * projetée sur les modes réels utilisés * TAB1.'KROTATIF': Matrice de raideur antisymétrique due à l'amortissement cor * * TAB1.'GYRO_PROJ': Matrice de couplage gyroscopique projetée sur les modes ré * TAB1.'GYROSCOPIQUE': Matrice de couplage gyroscopique pour une vitesse de ro * * Pour les diagrammes de Campbell dans le repère tournant * * TAB1.'CORI_PROJ': Matrice de couplage de Coriolis projetée sur les modes rée * TAB1.'CORIOLIS': Matrice de couplage de Coriolis pour une vitesse de rotatio * * TAB1.'KSIG_PROJ': Matrice de raideur de précontrainte projetée sur les modes * TAB1.'KSIGMA': Matrice de raideur de précontrainte pour une vitesse de rotat * * TAB1.'KCEN_PROJ': Matrice de raideur centrifuge projetée sur les modes réels * TAB1.'KCENT': Matrice de raideur centrifuge pour une vitesse de rotation uni * * Les matrices de couplage gyroscopique, de raideur de précontrainte et de r * doivent être données pour une vitesse de rotation unité * (1 Hz, 1 rad/s ou 1 tour/min selon le choix de l'utilisateur) * * TAB1.'AFFICHAGE': VRAI si on veut afficher les fréquences de rotation au cou * TAB1.'CLASSEMENT': VRAI si on veut classer les modes directs (pulsation reel * et les modes rétrogrades (pulsation * * TAB1.'AXE_DIRECT': Vecteur parallèle à la vitesse de rotation nécessaire pou * les sens direct et rétrograde * * OUTPUT *========== * * TAB1. i Table contenant les résultats pour le mode complexe i * (N modes réels donnant 2N modes complexes) * (TAB1. i). 'FREQUENCE_REELLE' : Evolution donnant la fréquence réelle * en fonction de la fréquence de rotation * (TAB1. i). 'FREQUENCE_IMAGINAIRE': Evolution donnant la fréquence imaginair * en fonction de la fréquence de rotation * (TAB1. i). 'FREQUENCE_MODULE' : Evolution donnant le module de la fréquence * en fonction de la fréquence de rotation * (TAB1. i). 'AMORTISSEMENT' : Evolution donnant l'amortissement en fonction * de la fréquence de rotation * * Remarque: Pour chaque fréquence de rotation, les fréquences et amortissement * sont classés par ordre croissant. La ligne i correspond donc * à la fréquence ième par ordre croissant (pas de suivi de mode). * ************************************************************************ * * * ERR = VRAI; * 'SI' (EXISTE TAB1 'AFFICHAGE'); SI ((TAB1.'AFFICHAGE') EGA VRAI); TESTAF = TAB1.'AFFICHAGE'; SINON; TESTAF = FAUX; FINSI; 'SINON'; TESTAF = FAUX; 'FINSI'; * * 'SI' (EXISTE TAB1 'FOURIER'); FLFOUR = TAB1.'FOURIER'; 'SINON'; FLFOUR = FAUX; 'FINSI'; * TESTCL = FAUX; 'SI' (EXISTE TAB1 'CLASSEMENT'); 'SI' (EGA (TAB1.'CLASSEMENT') VRAI); TESTCL = TAB1.'CLASSEMENT'; 'SINON'; TESTCL = FAUX; 'FINSI'; 'SI' (EXISTE TAB1 'AXE_DIRECT'); ppdirect = TAB1.'AXE_DIRECT'; 'SINON'; 'SI' (NON FLFOUR); ppdirect = 0. 0. 1.; 'FINSI'; 'FINSI'; 'FINSI'; * * 'SI' (EXISTE TAB1 'BASE_MODALE'); TBasR = TAB1.'BASE_MODALE'; TMod1 = (TAB1.'BASE_MODALE') . 'MODES' ; FLAMODE= FAUX; 'SINON'; 'SI' (EXISTE TAB1 'NMODES'); FLAMODE= VRAI; nmodes = TAB1.'NMODES'; NbModR = nmodes; 'SI' (EXISTE TAB1 'FREQ_PROCHE'); fproche = TAB1.'FREQ_PROCHE'; 'SINON'; fproche = 0; 'FINSI'; 'SINON'; ERR = FAUX; 'FINSI'; 'FINSI'; NbModC = 2*NbModR; * 'SI' (EXISTE TAB1 'RIGIDITE'); MRig = TAB1.'RIGIDITE'; mess 'Je lis la rigidite'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'RIGI_PROJ'); MRigP = TAB1.'RIGI_PROJ'; 'SINON'; ERR = FAUX; 'FINSI'; 'FINSI'; * * 'SI' (EXISTE TAB1 'MASSE'); Mmas = TAB1.'MASSE'; mess 'Je lis la masse'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'MASS_PROJ'); MMasP = TAB1.'MASS_PROJ'; 'SINON'; ERR = FAUX; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'AMORTISSEMENT'); MCam = TAB1.'AMORTISSEMENT'; mess 'Je lis l amortissement'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'AMOR_PROJ'); MCamP = TAB1.'AMOR_PROJ'; 'SINON'; MESS 'La matrice d amortissement est prise nulle'; SI FLAMODE; MCam = 0.*MRig; SINON; MCamP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'KROTATIF'); MCah = TAB1.'KROTATIF'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'KROT_PROJ'); MCahP = TAB1.'KROT_PROJ'; 'SINON'; MESS 'Absence d amortissement corotatif'; SI FLAMODE; MCah = 0.*MRig; SINON; MCahP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'GYROSCOPIQUE'); MCG = TAB1.'GYROSCOPIQUE'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'GYRO_PROJ'); MCGP = TAB1.'GYRO_PROJ'; 'SINON'; MESS 'La matrice de couplage gyroscopique est prise nulle'; SI FLAMODE; MCG = 0.*MRig; SINON; MCGP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'CORIOLIS'); MCCOR = TAB1.'CORIOLIS'; mess 'Je lis Coriolis'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'CORI_PROJ'); MCCORP = TAB1.'CORI_PROJ'; 'SINON'; MESS 'La matrice de couplage de Coriolis est prise nulle'; SI FLAMODE; MCCOR = 0.*MRig; SINON; MCCORP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'KSIGMA'); MKSIG = TAB1.'KSIGMA'; mess 'Je lis Ksigma'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'KSIG_PROJ'); MKSIP = TAB1.'KSIG_PROJ'; 'SINON'; MESS 'La matrice de raideur de precontrainte est prise nulle'; SI FLAMODE; MKSIG = 0.*MRig; SINON; MKSIP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' (EXISTE TAB1 'KCENT'); MKCEN = TAB1.'KCENT'; mess 'Je lis Kcent'; SI (NON FLAMODE); FINSI; 'SINON'; 'SI' (EXISTE TAB1 'KCEN_PROJ'); MKCEP = TAB1.'KCEN_PROJ'; 'SINON'; MESS 'La matrice de raideur centrifuge est prise nulle'; SI FLAMODE; MKCEN = 0.*MRig; SINON; MKCEP = 0.*MRigP; FINSI; 'FINSI'; 'FINSI'; * 'SI' ERR; * TFrqRe = TABLE; TFrqIm = TABLE; TFrqMo = TABLE; TAmor = TABLE; * Repeter LAB1 Nfreq; i1 = &lab1 ; SI TESTAF; MESS 'Frequence N°' i1; FINSI; * SI FLAMODE; (MRig et ((Omega1**2)*MKSIG) et ((Omega1**2)*MKCEN)) Mmas ; FINSI; * *+DC Test classement des modes * SI (EGA TESTCL VRAI); * ((Omega1**2)*MKSIP) et ((Omega1**2)*MKCEP)) ((Omega1*(MCgP et MCCORP)) et MCamP) TBASR; Imode = 1; * Repeter Lab5 NbModC; Frq1 = BasCiB.'MODES'. &lab5 . 'FREQUENCE_REELLE'; Frq1I = BasCiB.'MODES'. &lab5 . 'FREQUENCE_IMAGINAIRE'; DEFR1 =BasCiB.'MODES'. &lab5 . 'DEFORMEE_MODALE_REELLE'; DEFI1 =BasCiB.'MODES'. &lab5 . 'DEFORMEE_MODALE_IMAGINAIRE'; * 'SI' FLFOUR; RT 0. IUR 0. IUT 0. IUZ 0. IRT 0. NATURE 'DISCRET'); RT 0. IUR 0. IUT 0. IUZ 0. IRT 0. NATURE 'DISCRET'); * * * ((DEFR1R*DEFI1RI) - (DEFR1T*DEFI1TI) + (DEFR1Z*DEFI1ZI) - (DEFR1RI*DEFI1R) + (DEFR1TI*DEFI1T) - (DEFR1ZI*DEFI1Z)) ))); * SI ((abs TESTDIRE) > 1.D-20); TESTDIRE =TESTDIRE /(abs TESTDIRE); SINON; TESTDIRE = 2.; FINSI; * BasCiB.'MODES'. &lab5 . 'FREQUENCE_REELLE' = (SIGNE Frq1I)*(SIGNE TESTDIRE)* Frq1; BasCiB.'MODES'. &lab5 . 'FREQUENCE_IMAGINAIRE' = Frq1I; BasCiB.'MODES'. &lab5 . 'DEFORMEE_MODALE_IMAGINAIRE' = (SIGNE TESTDIRE)*DEFI1; * 'SINON'; NATURE 'DISCRET'); NATURE 'DISCRET'); * * * ((((DEFR1Y*DEFI1Z) - (DEFI1Y*DEFR1Z))) + ((((DEFR1Z*DEFI1X) - (DEFI1Z*DEFR1X))) + ((((DEFR1X*DEFI1Y) - (DEFI1X*DEFR1Y))) * * Si le mode est complexe... * Sinon il est réel et on ne change rien * SI ((abs TESTDIRE) > 1.D-13); SI (TESTDIRE > 0.D0); BasCiB.'MODES'. &lab5 . 'FREQUENCE_REELLE' = abs Frq1; BasCiB.'MODES'. &lab5 . 'FREQUENCE_IMAGINAIRE' = Frq1I; BasCiB.'MODES'. &lab5 . 'DEFORMEE_MODALE_IMAGINAIRE' = (SIGNE Frq1)*DEFI1; SINON; BasCiB.'MODES'. &lab5 . 'FREQUENCE_REELLE' = (-1.)*(abs Frq1); BasCiB.'MODES'. &lab5 . 'FREQUENCE_IMAGINAIRE' = Frq1I; BasCiB.'MODES'. &lab5 . 'DEFORMEE_MODALE_IMAGINAIRE' = (SIGNE Frq1)*DEFI1; FINSI; FINSI; * 'FINSI'; * * TESTDIRE = TESTDIRE + * ((-1.)*Frq1*(maxi (resu ( * ((((DEFR1RY*DEFI1RZ) - (DEFI1RY*DEFR1RZ))) * *(coor 1 ppdirect)) * + ((((DEFR1RZ*DEFI1RX) - (DEFI1RZ*DEFR1RX))) * *(coor 2 ppdirect)) * + ((((DEFR1RX*DEFI1RY) - (DEFI1RX*DEFR1RY))) * *(coor 3 ppdirect)))))); * * FIN LAB5; * * SINON; ((Omega1**2)*MKSIP) et ((Omega1**2)*MKCEP)) ((Omega1*(MCgP et MCCORP)) et MCamP) ; FINSI; * *+DC Test classement des modes * Repeter Lab2 NbModC; i2 = &lab2; si (i2 ega 1); FrqModul = PROG ((((BasCiB.'MODES'. i2 . 'FREQUENCE_REELLE')**2) + ((BasCiB.'MODES'. i2 . 'FREQUENCE_IMAGINAIRE')**2))**0.5); sinon; FrqReel = FrqReel et FrqImag = FrqImag et ((((BasCiB.'MODES'. i2 . 'FREQUENCE_REELLE')**2) + ((BasCiB.'MODES'. i2 . 'FREQUENCE_IMAGINAIRE')**2))**0.5)); AmorVal = AmorVal et finsi; FIN lab2; FrqReel = ORDONNER CROISSANT FrqReel; FrqImag = ORDONNER CROISSANT FrqImag; FrqModul = ORDONNER CROISSANT FrqModul; AmorVal = ORDONNER CROISSANT AmorVal; * Repeter Lab3 NbModC; i3 = &lab3; si (i1 ega 1); sinon; TFrqRe.i3 = (TFrqRe.i3) et TFrqIm.i3 = (TFrqIm.i3) et TFrqMo.i3 = (TFrqMo.i3)et TAmor.i3 = (TAmor.i3) et finsi; FIN lab3; FIN lab1; * Repeter Lab4 NbModC; i4 = &lab4; TAB1.i4 = TABLE; PRFREQ (TFrqRe.i4); PRFREQ (TFrqIm.i4); PRFREQ (TFrqMo.i4); PRFREQ (TAmor.i4); FIN lab4; * 'FINSI'; * 'FINPROC'; *
© Cast3M 2003 - Tous droits réservés.
Mentions légales