dyn207
C DYN207 SOURCE CB215821 20/11/25 13:26:18 10792 C DYN206 SOURCE LAVARENN 96/10/30 21:23:03 2349 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Opérateur DYNE : algorithme de Fu - de Vogelaere * * ________________________________________________ * * * * Remplissage des tableaux de description des liaisons sur * * la base à partir des informations contenues dans la * * table ILIB * * Liaison ligne_cercle avec ou sans amortissement * * * * Paramètres: * * * * e I Numéro de la liaison. * * e ITLB Table rassemblant la description d'une liaison. * * e ITYP Type de la liaison. * * s KTLIAB Segment descriptif des liaisons sur base B. * * e NPLB Nombre total de points. * * * * * * Auteur, date de création: * * * * Ibrahim PINTO,05/97 * * * *--------------------------------------------------------------------* -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMELEME -INC SMCHPOI * SEGMENT MTLIAB INTEGER IPALB(NLIAB,NIPALB),IPLIB(NLIAB,NPLBB),JPLIB(NPLB) REAL*8 XPALB(NLIAB,NXPALB) REAL*8 XABSCI(NLIAB,NIP),XORDON(NLIAB,NIP) ENDSEGMENT * SEGMENT MLIGNE INTEGER KPLIB(NPLB) ENDSEGMENT * LOGICAL L1,L0 CHARACTER*8 MONAMO,MONESC,MONREC,MONRAY,CMOT,CMOT1,MONINV CHARACTER*8 MONCAL,CMOT2,CHARRE * MTLIAB = KTLIAB SEGINI MLIGNE * * --- choc élémentaire LIGNE_CERCLE_FROTTEMENT * avec ou sans amortissement * & 'MAILLAGE',I1,X1,CHARRE,L1,IMAI) IF (IERR.NE.0) RETURN MONESC = ' ' & MONESC,I1,X1,CHARRE,L1,IESC) IF (IERR.NE.0) RETURN & 'CHPOINT',I0,X1,CHARRE,L1,IRAIES) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XGLIS,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XADHE,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XRAIT,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN & IP0,'FLOTTANT',I0,XAMOT,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN * MONAMO = ' ' & MONAMO,I1,X1,CHARRE,L1,IAMOES) IF (IERR.NE.0) RETURN * MONREC = ' ' & MONREC,I1,X1,CMOT,L1,IP1) IF (IERR.NE.0) RETURN * MONRAY = ' ' & MONRAY,I0,XRAY,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN MONCAL = ' ' & MONCAL,I1,X1,CMOT2,L1,IP1) IF (IERR.NE.0) RETURN *bp,2016 petit message informatif pour ceux qui, comme moi, n'auraient * pas lu la notice jusqu'au bout : IF(XRAIT.LT.0.D0) THEN IF(XAMOT.LE.0D0.OR.IIMPI.GT.0) THEN WRITE(IOIMP,*) 'Liaison elementaire ..._FROTTEMENT numero',I WRITE(IOIMP,*) & 'utilisation du modele de frottement regularise d ODEN' ENDIF IF(XAMOT.LE.0D0) THEN c ERREUR: %m1:8 = %r1 inferieur a %r2 MOTERR(1:8)='AMOR*_T*' REAERR(1)=XAMOT REAERR(2)=0.D0 RETURN ENDIF ENDIF * IPALB(I,1) = ITYP IPALB(I,3) = IDIM XPALB(I,3) = XGLIS XPALB(I,4) = XADHE XPALB(I,5) = XRAIT XPALB(I,6) = XAMOT * IF (MONCAL.EQ.'MOT') THEN IF (CMOT2(1:4).EQ.'VRAI') THEN IPALB(I,1)=39 ENDIF ENDIF IF (MONAMO.EQ.'CHPOINT') THEN IPALB(I,1) = IPALB(I,1)+1 ID1 = 7 ELSE ID1 = 6 ENDIF * Normale aux butees ou au cylindre enveloppant le segment IF (IDIM.EQ.3) THEN & 'POINT',I1,X1,CHARRE,L1,INOR) IF (IERR.NE.0) RETURN IPNO = (IDIM + 1) * (INOR - 1) PS = 0.D0 DO 80 ID = 1,IDIM XC = XCOOR(IPNO + ID) PS = PS + XC * XC 80 CONTINUE * end do IF (PS.LE.0.D0) THEN RETURN ENDIF DO 81 ID=1,IDIM XPALB(I,ID1+ID) = XCOOR(IPNO + ID) / SQRT(PS) 81 CONTINUE ELSE DO 82 ID=1,IDIM XPALB(I,ID1+ID) = 0.D0 82 CONTINUE ENDIF IF (MONRAY.EQ.'FLOTTANT') THEN XPALB(I,2) = XRAY ELSE XPALB(I,2) = 0.D0 ENDIF * La recherche s'effectue par défaut localement IF (MONREC.EQ.'MOT') THEN IF (CMOT(1:7).EQ.'GLOBALE') THEN IPALB(I,23) = 1 ELSE IPALB(I,23) = 0 ENDIF ELSE IPALB(I,23) = 0 ENDIF * * Coordonnées du maillage_maitre MELEME = IMAI SEGACT MELEME * Pour savoir si le contour est fermé NELEMA = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEMA)) THEN NNOEMA = NELEMA IFERMA = 1 ELSE NNOEMA = NELEMA +1 IFERMA = 0 ENDIF IPALB(I,21) = NNOEMA IPALB(I,24) = IFERMA ID2 = ID1 + 4*IDIM IPT = NUM(1,1) INPT = (IDIM+1)*(IPT-1) IPLIB(I,1) = IPLAC KPLIB(1) = IPT DO 84 ID=1,IDIM XPALB(I,ID2+ID) = XCOOR(INPT+ID) 84 CONTINUE DO 85 IE=1,(NNOEMA-1) IPT = NUM(2,IE) INPT = (IDIM+1)*(IPT-1) IPLIB(I,IE+1) = IPLAC KPLIB(IE+1) = IPT IDIE = ID2 + IE*IDIM DO 86 ID=1,IDIM XPALB(I,IDIE+ID) = XCOOR(INPT+ID) 86 CONTINUE 85 CONTINUE SEGDES MELEME * * Maillage_esclave ID3 = ID2 + NNOEMA*IDIM IF (MONESC.EQ.'POINT') THEN * La ligne esclave est un point NNOEES=1 IFERES=0 ISYMET=-1 * Lecture des coordonnées IPESC = (IDIM+1)*(IESC-1) IPLIB(I,NNOEMA+1) = IPLAC KPLIB(NNOEMA+1) = IESC DO 90 ID = 1,IDIM XPALB(I,ID3+ID) = XCOOR(IPESC+ID) 90 CONTINUE * IPALB(I,22) = NNOEES IPALB(I,25) = IFERES IPALB(I,26) = ISYMET ELSE IF (MONESC.EQ.'MAILLAGE') THEN * La ligne esclave est un maillage MELEME = IESC SEGACT MELEME * Pour savoir si le contour est fermé NELEES = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEES)) THEN NNOEES = NELEES IFERES = 1 ELSE NNOEES = NELEES +1 IFERES = 0 ENDIF IPALB(I,22) = NNOEES IPALB(I,25) = IFERES * Coordonnées du maillage_esclave IPT = NUM(1,1) INPT = (IDIM+1)*(IPT-1) IPLIB(I,NNOEMA+1) = IPLAC KPLIB(NNOEMA+1) = IPT DO 94 ID=1,IDIM XPALB(I,ID3+ID) = XCOOR(INPT+ID) 94 CONTINUE DO 95 IE=1,(NNOEES-1) IPT = NUM(2,IE) INPT = (IDIM+1)*(IPT-1) IPLIB(I,NNOEMA+IE+1) = IPLAC KPLIB(NNOEMA+IE+1) = IPT IDIE = ID3 + IE*IDIM DO 96 ID=1,IDIM XPALB(I,IDIE+ID) = XCOOR(INPT+ID) 96 CONTINUE 95 CONTINUE SEGDES MELEME MONINV=' ' & MONINV,I1,X1,CMOT1,L1,IP1) * Le traitement symétrique ne s'effectue pas PAR DÉFAUT IF (MONINV.EQ.'LOGIQUE') THEN IF (.NOT.L1) THEN IPALB(I,26) = -1 ELSE IPALB(I,26) = 0 ENDIF ELSE IPALB(I,26) = -1 ENDIF ELSE * La ligne esclave n'est ni un point ni un maillage * CALL ERREUR(...) RETURN ENDIF ENDIF * Lecture des chpoints de raideur et d amortissement * Raideurs des noeuds esclaves et maitres ID4=ID1+(2*(NNOEMA+NNOEES)+4)*IDIM MCHPOI=IRAIES SEGACT,MCHPOI NSOUP=IPCHP(/1) DO 100 IPC=1,NSOUP MSOUPO=IPCHP(IPC) SEGACT,MSOUPO MELEME = IGEOC SEGACT,MELEME MPOVAL = IPOVAL SEGACT,MPOVAL NNN = NUM(/2) DO 110 INN=1,NNN IPT = NUM(1,INN) IF (IPLAC.NE.0) THEN XPALB(I,ID4+IPLAC)=VPOCHA(INN,1) ENDIF 110 CONTINUE SEGDES,MPOVAL,MELEME SEGDES MSOUPO 100 CONTINUE SEGDES,MCHPOI * Amortissement des noeuds esclaves et maitres ID5=ID4+NNOEMA+NNOEES IF (IPALB(I,1).EQ.38 .OR. IPALB(I,1).EQ.40) THEN MCHPOI=IAMOES SEGACT,MCHPOI NSOUP = IPCHP(/1) DO 120 IPC=1,NSOUP MSOUPO=IPCHP(IPC) SEGACT,MSOUPO MELEME = IGEOC SEGACT,MELEME MPOVAL = IPOVAL SEGACT,MPOVAL NNN=NUM(/2) DO 130 INN=1,NNN IPT = NUM(1,INN) IF (IPLAC.NE.0) THEN XPALB(I,ID5+IPLAC)=VPOCHA(INN,1) ENDIF 130 CONTINUE SEGDES MPOVAL,MELEME SEGDES MSOUPO 120 CONTINUE SEGDES MCHPOI ENDIF SEGSUP MLIGNE * end do * * * --- choc élémentaire ..._PLAN... * * ELSE IF (ITYP.EQ. ) THEN * ... * ... * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales