gyro2
C GYRO2 SOURCE OF166741 24/10/07 21:15:22 12016 * *_______________________________________________________________________ * * appelé par GYROS * * Creation d'une matrice de couplage gyroscopique * dans le repère inertiel ou fixe (éléments POUTR, TIMO, TUYAU) * * entrees : * ======== * ipmodl pointeur sur un mmodel * ipche1 pointeur sur un mchaml de caracteristiques * * sorties : * ========= * iprig pointeur sur la matrice d'amortissement construite * =0 sinon en cas d'erreur (et IERR non nul) * *_______________________________________________________________________ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC CCGEOME -INC CCREEL -INC SMRIGID -INC SMCHAML -INC SMELEME -INC SMCOORD -INC SMINTE -INC SMMODEL INTEGER oooval SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS),NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT CHARACTER*8 CMATE CHARACTER*(NCONCH) CONM PARAMETER ( INTYP = 4 ) PARAMETER (NINF=3) INTEGER INFOS(NINF) LOGICAL lsupde,lsupfo IPRIG = 0 C C ACTIVATION DU MODELE C MMODEL = IPMODL SEGACT,MMODEL NSOUS=KMODEL(/1) C C CREATION DE L'OBJET MATRICE DE COUPLAGE GYROSCOPIQUE C NRIGEL = 0 SEGINI,MRIGID MTYMAT = 'AMORTISS' IFORIG = IFOUR ICHOLE = 0 IMGEO1 = 0 IMGEO2 = 0 ISUPEQ = 0 C C_______________________________________________________________________ C C DEBUT DE LA BOUCLE SUR LES DIFFERENT MODELES ELEMENTAIRES C_______________________________________________________________________ C DO 500 ISOUS=1,NSOUS C IMODEL = KMODEL(ISOUS) SEGACT,IMODEL C- Initialisations IPMINT = 0 MOMATR = 0 MOCARA = 0 MOTYPM = 0 MOTYPC = 0 ISUPM = 0 ISUPC = 0 MODEPL = 0 MOFORC = 0 lsupde = .false. lsupfo = .false. IDESCR = 0 C- Recuperation d'informations sur le maillage elementaire IIPDPG = imodel.IPDPGE IPT1 = imodel.IMAMOD SEGACT,IPT1 NBNOE1 = IPT1.NUM(/1) NBELE1 = IPT1.NUM(/2) C- Quelques informations sur le modele CONM = CONMOD CMATE = CMATEE MATE = IMATEE c* INAT = INATUU C- Creation du tableau INFOS iret = 1 IF (iret.EQ.0) GOTO 599 C- Recuperation d'informations sur l'element fini MELE = NEFMOD C NPINT = MAX(INFMOD(1),1) C-- Support des champs IPLAZ = 4 IF (NPINT.EQ.12345) IPLAZ = 1 MFR = INFELE(13) LRE = INFELE(9) LW = INFELE(7) LHOOK = INFELE(10) NDDL = INFELE(15) c* IELE = INFELE(14) c* ICARA = INFELE(5) IPMINT = INFMOD(2+IPLAZ) c* IPMINT = INFELE(11) IPMIN1 = INFELE(12) c* IPMIN1 = INFMOD(8) IPPORE = 0 IF (MFR.EQ.33) IPPORE = NBNOE1 C C- RECHERCHE DES NOMS D'INCONNUES ET DES DUAUX if (lnomid(1).ne.0) then MODEPL =lnomid(1) else lsupde = .true. endif nomid = MODEPL SEGACT,nomid NDEPL = lesobl(/2) c* ndum = lesfac(/2) IF (lnomid(2).ne.0) then MOFORC = lnomid(2) ELSE lsupfo = .true. ENDIF nomid = MOFORC SEGACT,nomid NFORC = lesobl(/2) c* ndum=lesfac(/2) C IF (NDEPL.EQ.0.OR.NFORC.EQ.0.OR.NDEPL.NE.NFORC) THEN GOTO 598 ENDIF C C- REMPLISSAGE DU SEGMENT DESCRIPTEUR NLIGRP = LRE NLIGRD = LRE SEGINI,DESCR NCOMP = NDEPL NBNNS = NBNOE1 IF (MFR.EQ.33) NCOMP = NDEPL-1 IF (IFOUR.EQ.-3) THEN NCOMP = NDEPL-3 ENDIF c* ? IF (MFR.EQ.19.OR.MFR.EQ.21) NBNNS = NBNOE1/2 IDDL = 1 DO 1004 INOEUD=1,NBNNS DO 1005 ICOMP=1,NCOMP NOMID=MODEPL LISINC(IDDL)=LESOBL(ICOMP) NOMID=MOFORC LISDUA(IDDL)=LESOBL(ICOMP) NOELEP(IDDL)=INOEUD NOELED(IDDL)=INOEUD IDDL=IDDL+1 1005 CONTINUE 1004 CONTINUE * SEGDES,DESCR IDESCR = DESCR C- Recuperation des noms de composantes MATERIAU nbrobl = 0 nbrfac = 0 nomid = 0 notype = 0 LHOTRA = 0 C C rho dans les cas poutre,tuyau IF (MFR.EQ.7.OR.MFR.EQ.13) THEN IF (CMATE.NE.'SECTION') THEN nbrobl = 1 SEGINI,nomid lesobl(1)='RHO ' nbtype = 1 SEGINI,notype type(1) = 'REAL*8' ELSE LHOTRA = LHOOK nbrobl=2 SEGINI,nomid lesobl(1)='MODS' lesobl(2)='MATS' nbtype = 2 SEGINI,notype type(1) = 'POINTEURMMODEL' type(2) = 'POINTEURMCHAML' ENDIF ENDIF MOMATR = nomid MOTYPM = notype NMATR = nbrobl NMATF = nbrfac NMATT = NMATR+NMATF C-- Verification du support des composantes recherchees IF (MOMATR.NE.0) THEN IF (ISUPM.GT.1) GOTO 597 ENDIF C- Recuperation des noms de composantes CARACTERISTIQUES nbrobl = 0 nbrfac = 0 nomid = 0 notype = 0 IVECT = 0 * caracteristiques pour les poutres IF (MFR.EQ.7 ) THEN IF (CMATE.EQ.'SECTION') THEN nbrfac = 4 SEGINI,nomid lesfac(1) = 'OMEG' lesfac(2) = 'VX ' lesfac(3) = 'VY ' lesfac(4) = 'VZ ' IVECT = 1 * nbtype = 4 SEGINI,notype type(1) = 'REAL*8' type(2) = 'REAL*8' type(3) = 'REAL*8' type(4) = 'REAL*8' ELSE nbrobl = 4 nbrfac = 6 SEGINI,nomid lesobl(1) = 'TORS' lesobl(2) = 'INRY' lesobl(3) = 'INRZ' lesobl(4) = 'SECT' lesfac(1) = 'SECY' lesfac(2) = 'SECZ' lesfac(3) = 'OMEG' lesfac(4) = 'VX ' lesfac(5) = 'VY ' lesfac(6) = 'VZ ' IVECT = 1 * nbtype = 10 SEGINI,notype type(1) = 'REAL*8' type(2) = 'REAL*8' type(3) = 'REAL*8' type(4) = 'REAL*8' type(5) = 'REAL*8' type(6) = 'REAL*8' type(7) = 'REAL*8' type(8) = 'REAL*8' type(9) = 'REAL*8' type(10) = 'REAL*8' ENDIF * caracteristiques pour les tuyaux ELSE IF (MFR.EQ.13) THEN nbrobl = 2 nbrfac = 5 SEGINI,nomid lesobl(1) = 'EPAI' lesobl(2) = 'RAYO' lesfac(1) = 'RACO' lesfac(2) = 'OMEG' lesfac(3) = 'VX ' lesfac(4) = 'VY ' lesfac(5) = 'VZ ' IVECT = 1 * nbtype = 7 SEGINI,notype type(1) = 'REAL*8' type(2) = 'REAL*8' type(3) = 'REAL*8' type(4) = 'REAL*8' type(5) = 'REAL*8' type(6) = 'REAL*8' type(7) = 'REAL*8' ENDIF MOCARA = nomid MOTYPC = notype NCARA = nbrobl NCARF = nbrfac NCARR = NCARA+NCARF C--- Verification du support des composantes recherchées IF (MOCARA.NE.0) THEN IF (ISUPC.GT.1) GOTO 597 ENDIF C C- Activation du segment MINTE MINTE = IPMINT SEGACT,MINTE NBPGAU = POIGAU(/1) C C- Partionnement si necessaire de la matrice d'amortissement C- determinant ainsi le nombre d'objets elementaires de MRIGID LTRK = oooval(1,4) IF (LTRK.EQ.0) LTRK = oooval(1,1) LTRK=MAX(LTRK,2**24) * Ajout a la taille en mots de la matrice des infos du segment LSEG = LRE*LRE*NBELE1 + 16 NBLPRT = (LSEG-1)/LTRK + 1 NBLMAX = (NBELE1-1)/NBLPRT + 1 nblprt = (NBELE1-1)/NBLMAX + 1 c* write(ioimp,*) ' gyro2 : nblprt nblmax = ',nblprt,nblmax,nbele1 C-- Ajout de la matrice de couplage GYROSCOPIQUE a la matrice globale NRIGE0 = IRIGEL(/2) NRIGEL = NRIGE0 + nblprt SEGADJ,MRIGID descr = IDESCR meleme = IPT1 nbnn = NBNOE1 nbelem = NBELE1 nbsous = 0 nbref = 0 * Boucle sur les PARTITIONS elementaires de la matrice *------------------------------------------------------ DO 5000 irige = 1, nblprt IF (nblprt.GT.1) THEN C-- Partitionnement du maillage support de la matrice elementaire C- (IPT1 peut etre desactive suite a l'appel a KOMCHA !) SEGACT,IPT1 ielem = (irige-1)*NBLMAX nbelem = MIN(NBLMAX,NBELE1-ielem) * write(ioimp,*) ' creation segment ',nbnn,nbelem SEGINI,meleme itypel = IPT1.itypel DO ielt = 1, nbelem jelt = ielt + ielem DO inoe = 1, nbnn num(inoe,ielt) = IPT1.NUM(inoe,jelt) ENDDO icolor(ielt) = IPT1.ICOLOR(jelt) ENDDO C-- Recopie du descripteur des1 = IDESCR SEGINI,descr=des1 SEGDES,descr ENDIF C* Voir le cas IFOUR.EQ.-3 ipmail = meleme ipdesc = descr ipt2 = meleme C-- Initialisation de la matrice de rigidite elementaire (xmatri) NELRIG = nbelem SEGINI,xmatri ipmatr = xmatri C-- Recuperation des valeurs des proprietes materiau et geometriques ivamat = 0 ivacar = 0 IF (MOMATR.NE.0) THEN & INFOS,NINF,ivamat) IF (IERR.NE.0) GOTO 5099 IF (ISUPM.EQ.1) THEN IF (IERR.NE.0) THEN ISUPM = 0 GOTO 5099 ENDIF ENDIF ENDIF IF (MOCARA.NE.0) THEN & INFOS,NINF,ivacar) IF (IERR.NE.0) GOTO 5099 IF (ISUPC.EQ.1) THEN IF (IERR.NE.0) THEN ISUPC = 0 GOTO 5099 ENDIF ENDIF ENDIF C_______________________________________________________________________ C C NUMERO DES ETIQUETTES : C ETIQUETTES DE 1 A 98 POUR TRAITEMENT SPECIFIQUE A L ELEMENT C LES ELEMENTS SONT GROUPES COMME SUIT : C_______________________________________________________________________ * CABL SEG2 SEG3 TRI3 TRI4 TRI6 TRI7 QUA4 QUA5 QUA8 QUA9 GOTO ( 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * RAC2 RAC3 CUB8 CU20 PRI6 PR15 LIA3 LIA4 LIA6 LIA8 MULT & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * TET4 TE10 PYR5 PY13 COQ3 DKT POUT LISP FAC3 FAC4 FAC6 & , 99, 99, 99, 99, 99, 99, 21, 99, 99, 99, 99 * FAC8 LTR3 LQU4 LCU8 LPR6 LTE4 LPY5 COQ8 TUYA TUFI COQ2 & , 99, 99, 99, 99, 99, 99, 99, 99, 21, 99, 99 * POI1 BARR RACO LSU2 COQ4 LISM COF3 RES2 LSU3 LSU4 LICO & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * COQ6 CVS2 CVS3 CVT3 CVT6 CVQ4 CVQ8 THP5 TH13 THP6 TH15 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * THC8 TH20 ICT3 ICQ4 ICT6 ICQ8 ICC8 ICT4 ICP6 IC20 IC10 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * IC15 TRIP QUAP CUBP TETP PRIP TIMO JOI2 JOI3 JOT3 JOI4 & , 99, 99, 99, 99, 99, 99, 21, 99, 99, 99, 99 * JOI6 JOI8 LISC TRIH DST LIC4 CERC TUYO LSE2 LITU HYT3 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * HYQ4 HYT4 HYP6 HYC8 TRIS QUAS POIS FOR3 JOP3 JOP6 JOP8 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * POL3 POL4 POL5 POL6 POL7 POL8 POL9 PO10 PO11 PO12 PO13 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * PO14 BAR3 BAEX LIA2 QUAH CUBH ROT3 SEF2 TRF3 QUF4 CUF8 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * PRF6 TEF4 PYF5 MSE3 MTR6 MQU9 MC27 MP18 MT10 MP14 SEF3 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * TRF7 QUF9 CF27 PF21 TF15 PF19 SEG6 TR21 QU36 C216 P126 & , 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 * TE56 PY91 TRH6 & , 99, 99, 99),MELE C 99 CONTINUE MOTERR(1:4)=NOMTP(MELE) MOTERR(5:12)='GYROS' GOTO 5099 C_______________________________________________________________________ C C POUTRE, POUTRE DE TIMOSCHENKO C_______________________________________________________________________ C 21 CONTINUE & IVECT,ISOUS,NBPGAU,IPMINT,IPMIN1,NDDL,MATE, & CMATE,LHOTRA,ipmatr,IIPDPG) GOTO 5100 C_______________________________________________________________________ C C DESACTIVATION DES SEGMENTS PROPRES A LA ZONE GEOMETRIQUE IA C_______________________________________________________________________ 5100 CONTINUE 5099 CONTINUE c* xmatri = ipmatr IF (nblprt.GT.1) THEN c* meleme = ipmail SEGDES,meleme ENDIF IF (ISUPM.EQ.1 .OR. nblprt.GT.1) THEN ELSE ENDIF IF (ISUPC.EQ.1 .OR. nblprt.GT.1) THEN ELSE ENDIF C- Sortie prematuree en cas d'erreur IF (IERR.NE.0) GOTO 596 C- Stockage de la matrice jrige = NRIGE0 + irige COERIG(jrige) = 1. IRIGEL(1,jrige) = ipt2 IRIGEL(2,jrige) = 0 IRIGEL(3,jrige) = ipdesc IRIGEL(4,jrige) = ipmatr IRIGEL(5,jrige) = NIFOUR IRIGEL(6,jrige) = 0 C-- Matrice antisymetrique IRIGEL(7,jrige) = 1 xmatri.symre = 1 SEGDES,xmatri IRIGEL(8,jrige) = 0 5000 CONTINUE C- Fin de la boucle sur les partitions 596 CONTINUE c* MINTE = IPMINT SEGDES,MINTE 597 CONTINUE IF (MOMATR.NE.0) THEN nomid = MOMATR SEGSUP,nomid notype = MOTYPM SEGSUP,notype ENDIF IF (MOCARA.NE.0) THEN nomid = MOCARA SEGSUP,nomid notype = MOTYPC SEGSUP,notype ENDIF 598 CONTINUE NOMID = MODEPL SEGDES,NOMID IF (lsupde) SEGSUP,NOMID NOMID = MOFORC SEGDES,NOMID IF (lsupfo) SEGSUP,NOMID 599 CONTINUE SEGDES,IPT1 SEGDES,IMODEL C- Sortie prematuree en cas d'erreur IF (IERR.NE.0) GOTO 999 500 CONTINUE C- Fin de la boucle sur les modeles elementaires 999 CONTINUE IF (IERR.NE.0) THEN SEGSUP,MRIGID IPRIG = 0 ELSE SEGDES,MRIGID IPRIG = MRIGID ENDIF SEGDES,MMODEL RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales