rela
C RELA SOURCE FANDEUR 22/03/01 21:15:07 11301 SUBROUTINE RELA C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C FABRIQUE UN OBJET ATTACHE CORRESPONDANT A UNE LIAISON ELEMENTAIRE C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (a-h,o-z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMELSTR -INC SMCLSTR -INC SMSTRUC -INC SMELEME -INC SMCOORD -INC SMRIGID -INC SMCHPOI -INC SMATTAC -INC SMLREEL SEGMENT ITRA1(0) SEGMENT IWOR1(0) SEGMENT ITRA2(0) SEGMENT ITRA3(0) SEGMENT ITRA4(0) SEGMENT ITRA5(0) SEGMENT RCOEF(0) SEGMENT IGEO(0) SEGMENT IDEN(NPO) SEGMENT ICO(NPO) SEGMENT SINCO ENDSEGMENT SEGMENT NTABK(NLIGRE) SEGMENT MNOC CHARACTER*(LOCOMP) NOCO(ICMAX,NPO) ENDSEGMENT SEGMENT/MVAL/(VALE(ICMAX,NPO)) CHARACTER*(LOCOMP) NOMCO DATA ICMAX/15/ segact mcoord IRETO2=0 IF ((IRETO1+IRETO2).EQ.0) THEN CALL RELA1 RETURN ENDIF SEGINI ITRA1 SEGINI IWOR1 MJON=0 NBCLST=0 IF (IRETO1.EQ.1) GO TO 15 IF (IRETO2.EQ.1) GO TO 25 1 CONTINUE C C LECTURE DES MELSTR C IF(IRETOU.EQ.0) GOTO 10 15 MELSTR=IRET IF(IERR.EQ.0) GOTO 2 C *** OUBLI DE LA COMPOSANTE GOTO 3 2 NOMCO=NOMDD(IMOT) IF(IPROG.EQ.0) GOTO 3 SEGACT MELSTR NBSTRU=ISOSTU(/1) MSOSTU=ISOSTU(1) MELEME=IMELEM(1) SEGDES MELSTR IF(NBSTRU.EQ.1) GOTO 4 C *** LA SOUS-STRUCTURE N'EST PAS ELEMENTAIRE INTERR(1)=MSOSTU 3 CONTINUE SEGSUP ITRA1,IWOR1 RETURN 4 ITRA1(**)=MSOSTU ITRA1(**)=MELEME READ (NOMCO,FMT='(A4)') IPV ITRA1(**)=IPV ITRA1(**)=IPROG GOTO 1 10 CONTINUE C C LECTURE DES CLSTR C IF(IRETOU.EQ.0) GOTO 20 25 MCLSTR=IRET IF(IERR.EQ.0) GOTO 11 C *** OUBLI DE LA COMPOSANTE GOTO 3 11 IF(NOMDD(IMOT).EQ.'LX ') GOTO 12 C *** LA COMPOSANTE DOIT ETRE LX GOTO 3 12 CONTINUE IF(IPROG.EQ.0) GOTO 3 SEGACT MCLSTR NBSTRU=ISOSTR(/1) MSOSTU=ISOSTR(1) IRIG=IRIGCL(1) SEGDES MCLSTR IF(NBSTRU.EQ.1) GOTO 13 C *** LA SOUS-STRUCTURE N'EST PAS ELEMENTAIRE INTERR(1)=MSOSTU GOTO 3 13 IWOR1(**)=MSOSTU IWOR1(**)=IRIG IWOR1(**)=IPROG GOTO 1 20 NBELST=ITRA1(/1)/4 IF(NBELST.EQ.0) GOTO 380 C C TRAITEMENT DES MELSTRS C ********************** C SEGINI ITRA5 C C RECHERCHE DES SOUS STRUCTURES INTERVENANT DS LA LIAISON C BOUCLE SUR L'ENSMBLE DES MELSTRS C QUAND UNE SOUS STRUCTURE EST EPUISEE ITRA1( )=0 C DO 350 NB=1,NBELST IT=4*(NB-1) MSOSTU=ITRA1(IT+1) IF(MSOSTU.EQ.0) GOTO 350 C C *********** 1 *********** C C CREATION DES TABLEAUX AUXILLIAIRES : C IGEO(IP)=NUM LE IP-IEME PT A LE NUMERO NUM C ITRA2(IKI)=IP NUMERO D'ORDRE DU PT NUM DS IGEO C ITRA2(IKI+1)=NOMCO NOM DU DDL ASSOCIE AU PT C RCOEF(I)=COEF COEFFICIENT ASSOCIE AU DDL NOMCO DU IP-IEME P C SEGINI ITRA2,IGEO,RCOEF C C RECHERCHE DES MELEMES D'UNE MEME SOUS STRUCTURE C IP=0 NPO=0 DO 140 NBB=NB,NBELST IT=4*(NBB-1) IF(MSOSTU.NE.ITRA1(IT+1)) GOTO 140 MELEME=ITRA1(IT+2) MLREEL=ITRA1(IT+4) SEGACT MELEME,MLREEL NBELEM=NUM(/2) IF(NBVAL.EQ.NBELEM) GOTO 80 C *** LE NB DE COEF N'EST PAS EGAL AU NB DE PTS SEGDES MELEME,MLREEL SEGSUP ITRA2,ITRA5,IGEO,RCOEF GOTO 3 C C BOUCLE SUR LES PTS DU MELEME DU MELSTR C 80 DO 130 NBE=1,NBELEM IKI=NUM(1,NBE) IF(NPO.EQ.0) GOTO 100 DO 90 J=1,NPO IPP=J IF(IKI.EQ.IGEO(J)) GOTO 120 90 CONTINUE 100 IP=IP+1 IGEO(**)=IKI IPP=IP 120 ITRA2(**)=IPP ITRA2(**)=ITRA1(IT+3) 130 CONTINUE SEGDES MELEME,MLREEL NPO=IGEO(/1) ITRA1(IT+1)=0 140 CONTINUE I21=I2-1 I3=RCOEF(/1) I4=IGEO(/1) IF(IIMPI.EQ.2) WRITE(IOIMP,1000)(I,ITRA2(I),I=1,I21,2) IF(IIMPI.EQ.2) WRITE(IOIMP,1002)(I,RCOEF(I),I=1,I3) IF(IIMPI.EQ.2) WRITE(IOIMP,1003)(I,IGEO(I) ,I=1,I4) 1000 FORMAT(1X,' ITRA2 ',10(I4,I4,1X)) 1001 FORMAT(1X,' ITRA2 ',10(I4,1X,A4,1X)) 1002 FORMAT(1X,' RCOEF ',8(I4,1PE12.5,1X)) 1003 FORMAT(1X,' IGEO ',10(I4,I4,1X)) C C ********** 2 ********** C C RECHERCHE ET REPERAGE DES DDL C CREATION DES TABLEAUX AUXILLIAIRES : C NOCO(IC,IP) NOM DU IC-IEME DDL DU PT IP C IDEN(IP) SI IDEN(IP)=IDEN(IPP) =>IP ET IPP ONT MEMES DDLS C ICO(IP) NB DE DDL DU PT IP C INCO(NUCO) NOM DU NUCO-IEME DDL C SEGACT MSOSTU MRIGID=ISRAID SEGDES MSOSTU SEGACT MRIGID NRIGEL=IRIGEL(/2) NDDL=0 SEGINI MNOC,IDEN,ICO,SINCO ICMA=0 C C BOUCLE SUR LES POINTS DE LA SOUS STRUCTURE C DO 250 IP=1,NPO NDCP=0 C C BOUCLE SUR LES ZONES GEOMETRIQUES DE LA SOUS STRUCTURE C DO 240 IAA=1,NRIGEL MELEME=IRIGEL(1,IAA) SEGACT MELEME IF(ITYPEL.EQ.22) GOTO 235 NBELEM=NUM(/2) NBPT=NUM(/1) DO 150 NBE=1,NBELEM DO 1501 NP=1,NBPT IKI=NUM(NP,NBE) NPEL=NP IF(IKI.EQ.IGEO(IP)) GOTO 160 1501 CONTINUE 150 CONTINUE GOTO 235 160 DESCR=IRIGEL(3,IAA) SEGACT DESCR NLIGRE=NOELEP(/1) IC=0 ICC=0 C C BOUCLE SUR LES INCONNUES DE LA MATRICE DE RIGIDITE DE L'ELEMENT C DO 230 I=1,NLIGRE IF(NOELEP(I).NE.NPEL) GOTO 230 NOMCO=LISINC(I) IF(NDDL.EQ.0) GOTO 180 C C BOUCLE SUR LES DDL TOTAUX DEJA CREES,ON DONNE UN NUMERO (NUCO) AU DD C DO 170 ND=1,NDDL NUCO=ND 170 CONTINUE 180 IC=IC+1 NUCO=NDDL+IC 190 CONTINUE IF(NDCP.EQ.0) GOTO 210 C C BOUCLE SUR LES DDL DU PT DEJA CREES C DO 200 NDC=1,NDCP IF(NOMCO.EQ.NOCO(NDC,IP)) GOTO 220 200 CONTINUE 210 ICC=ICC+1 NDIC=NDCP+ICC IF(NDIC.LE.ICMAX) GOTO 215 C *** A LA NUCO-IEME COMPOSANTE ON ASSOCIE LE NB 2**(NUCO-1) C TROP DE COMPOSANTES,ON DEPASSE LA CAPACITE DE LA MACHINE SEGDES DESCR,MELEME,MRIGID,MSOSTU SEGSUP ITRA2,ITRA5,IGEO,RCOEF,MNOC,IDEN,ICO,SINCO GOTO 3 215 NOCO(NDIC,IP)=NOMCO IF(NUCO.EQ.1) IDEN(IP)=IDEN(IP)+1 IF(NUCO.NE.1) IDEN(IP)=IDEN(IP)+2**(NUCO-1) 220 CONTINUE 230 CONTINUE SEGDES DESCR NDDL=NDDL+IC NDCP=NDCP+ICC 235 CONTINUE SEGDES MELEME 240 CONTINUE ICO(IP)=NDCP IF(NDCP.GT.ICMA) ICMA=NDCP 250 CONTINUE I1=NOCO(/2) I3=IDEN(/1) I4=ICO(/1) IF(IIMPI.EQ.2) WRITE(IOIMP,1005)(I,IDEN(I),I=1,I3) IF(IIMPI.EQ.2) WRITE(IOIMP,1006)(I,ICO(I),I=1,I4) 1004 FORMAT(1X,' NOCO ',8(I4,1X,I4,1X,A4,1X)) 1005 FORMAT(1X,' IDEN ',10(I4,1X,I4,1X)) 1006 FORMAT(1X,' ICO ',10(I4,1X,I4,1X)) 1007 FORMAT(1X,' INCO ',10(I4,1X,A4,1X)) SEGDES MRIGID SEGSUP SINCO C C ********** 3 ********** C C COMPATIBILITE DES DONNEES CORRESPONDANT AUX DDL ET C CREATION DU TABLEAU AUXILLIAIRE : C VALE(IC,IP) COEF POUR LE IC-IEME DDL DU IP-IEME PT C IKIMA=ITRA2(/1)/2 ICMAX=ICMA SEGINI MVAL C C BOUCLE SUR LES POINTS DE LA SOUS-STRUCTURE C DO 290 IP=1,NPO NDCP=ICO(IP) DO 255 IC=1,ICMAX VALE(IC,IP)=0. 255 CONTINUE C C RECHERCHE DU(ES) DDL DE LIAISON DU PT C ON PARCOURS LE TABLEAU ITRA2 C DO 280 IKI=1,IKIMA IT=2*(IKI-1) IKIN=ITRA2(IT+1) IF(IKIN.NE.IP) GOTO 280 WRITE (NOMCO,FMT='(A4)') ITRA2(IT+2) C C BOUCLE SUR LES DDL DU PT C DO 260 IC=1,NDCP ICC=IC IF(NOMCO.EQ.NOCO(IC,IP)) GOTO 270 260 CONTINUE C *** LE DDL N'EXISTE PAS INTERR(1)=MSOSTU MOTERR=NOMCO SEGSUP ITRA2,ITRA5,IGEO,RCOEF,MVAL,MNOC,ICO,IDEN GOTO 3 270 VALE(ICC,IP)=RCOEF(IKI) 280 CONTINUE 290 CONTINUE SEGSUP ITRA2,RCOEF I1=VALE(/1) 1008 FORMAT(1X,' VALE ',5(I4,1X,I4,1X,1PE12.5,1X)) C C ********** 4 ********** C SEGINI ITRA4 DO 330 IP=1,NPO IA=IDEN(IP) IF(IA.EQ.0) GOTO 330 SEGINI ITRA3 C C CREATION DES MSOUPO DU CHAMPOINT (ITRA4) C RECHERCHE DES PTS AYANT LES MEMES DDDL (ITRA3) C DO 300 IPP=IP,NPO IF(IA.NE.IDEN(IPP)) GOTO 300 ITRA3(**)=IPP IDEN(IPP)=0 300 CONTINUE NC=ICO(IP) SEGINI MSOUPO ITRA4(**)=MSOUPO NBSOUS=0 NBREF=0 NBNN=1 NBELEM=ITRA3(/1) SEGINI MELEME IGEOC=MELEME ITYPEL=1 N=NBELEM SEGINI MPOVAL IPOVAL=MPOVAL DO 310 IC=1,NC NOCOMP(IC)=NOCO(IC,IP) NOHARM(IC)=NIFOUR 310 CONTINUE DO 320 NBE=1,NBELEM IPP=ITRA3(NBE) NUM(1,NBE)=IGEO(IPP) DO 3201 IC=1,NC DO 315 ICC=1,NC IC1=ICC IF(NOCO(IC1,IPP).EQ.NOCOMP(IC)) GOTO 317 315 CONTINUE 317 VPOCHA(NBE,IC)=VALE(IC1,IPP) 3201 CONTINUE 320 CONTINUE SEGDES MELEME,MPOVAL,MSOUPO SEGSUP ITRA3 330 CONTINUE SEGSUP IDEN,ICO,IGEO,MNOC,MVAL NSOUPO=ITRA4(/1) NAT=1 SEGINI MCHPOI IFOPOI=IFOUR DO 340 NS=1,NSOUPO IPCHP(NS)=ITRA4(NS) 340 CONTINUE SEGDES MCHPOI SEGSUP ITRA4 C C ********** ********** C ITRA5(**)=MSOSTU ITRA5(**)=MCHPOI 350 CONTINUE C C CREATION DU MJONCT C 355 N=ITRA5(/1)/2 SEGINI MJONCT MJOTYP='MECA' MJODDL='LX' C NBCLST=0 LIAISON LIBRE NBCLST#0 LIAISON BLOQUE IF(NBCLST.NE.0) MJODDL='FLX' SEGACT MCOORD*MOD NBNO=nbpts XCOOR(**)=0. XCOOR(**)=0. IF(IDIM.EQ.3) XCOOR(**)=0. XCOOR(**)=0. nbpts=nbpts+1 NBNN=1 NBELEM=1 NBREF=0 NBSOUS=0 SEGINI MELEME ITYPEL=1 SEGDES MELEME MJOPOI=MELEME DO 360 NN=1,N NNN=2*NN ISTRJO(NN)=ITRA5(NNN-1) IPCHJO(NN)=ITRA5(NNN) 360 CONTINUE SEGSUP ITRA5 SEGDES MJONCT IF(MJON.EQ.0) MJON=MJONCT IF(NBCLST.NE.0) GOTO 500 380 NBCLST=IWOR1(/1)/3 IF(NBCLST.EQ.0) GOTO 500 C C TRAITEMENT DES CLSTRS C ********************* C SEGINI ITRA5 C C RECHERCHE DES SOUS STRUCTURES INTERVENANT DS LA LIAISON C BOUCLE SUR L'ENSEMBLE DES CLSTR C DO 490 NB=1,NBCLST IT=3*(NB-1) MSOSTU=IWOR1(IT+1) IF(MSOSTU.EQ.0) GOTO 490 NPO=0 SEGINI IGEO,RCOEF C C RECHERCHE DES CLSTR D'UNE MEME SOUS STRUCTURE C DO 470 NBB=NB,NBCLST IT=3*(NBB-1) IF(MSOSTU.NE.IWOR1(IT+1)) GOTO 470 MRIGID=IWOR1(IT+2) SEGACT MRIGID NRIGEL=IRIGEL(/2) C C BOUCLE SUR LES BLOCAGES DE LA SOUS STRUCTURE C DO 440 IAA=1,NRIGEL C RECHERCHE DE LA POSITION DES INCONNUES DE LAGRANGE DESCR=IRIGEL(3,IAA) SEGACT DESCR NLIGRE=LISINC(/2) SEGINI NTABK JK=0 DO 400 I=1,NLIGRE NOMCO=LISINC(I) IF(NOMCO.NE.'LX ') GOTO 400 JK=JK+1 NTABK(JK)=NOELEP(I) 400 CONTINUE SEGDES DESCR MELEME=IRIGEL(1,IAA) SEGACT MELEME NBELEM=NUM(/2) C C BOUCLES SUR LES NOEUDS DU BLOCAGE C DO 430 NBE=1,NBELEM DO 420 NP=1,JK IKI=NUM(NTABK(NP),NBE) IF(NPO.EQ.0) GOTO 415 DO 410 J=1,NPO IF(IKI.EQ.IGEO(J)) GOTO 450 410 CONTINUE 415 IGEO(**)=IKI 420 CONTINUE 430 CONTINUE SEGSUP NTABK SEGDES MELEME NPO=IGEO(/1) 440 CONTINUE MLREEL=IWOR1(IT+3) SEGACT MLREEL IF(NBVAL.EQ.NPO) GOTO 460 C *** LE NB DE COEF N'EST PAS EGAL AU NB DE PTS SEGDES MLREEL 445 SEGDES MRIGID SEGSUP IGEO,RCOEF GOTO 3 SEGDES MELEME C *** UN DDL EST DONNE PLUSIEURS FOIS GOTO 445 460 IWOR1(IT+1)=0 SEGDES MRIGID DO NV=1,NBVAL ENDDO SEGDES MLREEL 470 CONTINUE IF(IIMPI.EQ.2) WRITE(IOIMP,1009)(I,IGEO(I),RCOEF(I),I=1,NPO) 1009 FORMAT(1X,' IGEO=',5(I4,1X,I4,1X,1PE12.5,1X)) C C CREATION DU CHAMPOINT (ITRA5) C NSOUPO=1 NAT=1 SEGINI MCHPOI MOCHDE=' ' MTYPOI=' ' IFOPOI=IFOUR NC=1 SEGINI MSOUPO IPCHP(1)=MSOUPO SEGDES MCHPOI ITRA5(**)=MSOSTU ITRA5(**)=MCHPOI NBSOUS=0 NBREF=0 NBNN=1 NBELEM=NPO SEGINI MELEME IGEOC=MELEME ITYPEL=1 N=NBELEM SEGINI MPOVAL DO 480 I=1,N NUM(1,I)=IGEO(I) VPOCHA(I,1)=RCOEF(I) 480 CONTINUE NOCOMP(1)='LX' NOHARM(1)=NIFOUR IPOVAL=MPOVAL SEGDES MELEME,MPOVAL,MSOUPO SEGSUP IGEO,RCOEF 490 CONTINUE GOTO 355 C C CREATION DU MATTAC C 500 SEGSUP ITRA1,IWOR1 IF (MJON.EQ.0) THEN C *** PAS D'OPERANDE CORRECT RETURN ENDIF N=1 M=0 C SI MJON # MJONCT LA LIAISON EST MIXTE IF(MJON.NE.MJONCT) N=2 IF(MJON.NE.MJONCT) M=1 SEGINI MSOUMA ITYATT='MECA' IGEOCH=0 IPHYCH=0 IATREL(1)=MJON IF(N.EQ.1) GOTO 520 IATREL(2)=MJONCT C *** CREATION DE LA MATRICE DUE A LA LIAISON MIXTE * LVAL=3 NLIGRE=2 NLIGRP=2 NLIGRD=2 nelrig=1 SEGINI XMATRI RE(1,1,1)=0. RE(2,1,1)=-1. RE(2,2,1)=0. RE(1,2,1)=-1. SEGDES XMATRI * NELRIG=1 * SEGINI IMATRI * IMATTT(1)=XMATRI * SEGDES IMATRI NLIGRP=2 NLIGRD=2 SEGINI DESCR NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 LISINC(1)='BETA' LISINC(2)='FBET' LISDUA(1)='FBET' LISDUA(2)='BETA' SEGDES DESCR NBNN=2 NBELEM=1 NBSOUS=0 NBREF=0 SEGINI MELEME ITYPEL=23 NUM(1,1)=MJOPO1 NUM(2,1)=MJOPO2 SEGDES MELEME NRIGEL=1 SEGINI MRIGID MTYMAT='RIGIDITE' IFORIG=IFOUR COERIG(1)=1.D0 IRIGEL(1,1)=MELEME IRIGEL(2,1)=0 IRIGEL(3,1)=DESCR IRIGEL(4,1)=xMATRI ICHOLE=0 SEGDES MRIGID IPMATK(1)=MRIGID 520 CONTINUE SEGDES MSOUMA N=1 SEGINI MATTAC LISATT(1)=MSOUMA SEGDES MATTAC c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales