elflia
C ELFLIA SOURCE CB215821 20/11/25 13:27:15 10792 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ==================================================================== C = APPELE PAR ELFE = C = TRAITEMENT DES LIAISONS ENTRE SOUS-STRUCTURES = C = POUR LIAISONS MECANIQUES PERMANENTES : = C = 1 MSOUMA -> 1 MATRICE A INVERSER = C = CREATION 11/04/86 = C = PROGRAMMEUR : GUILBAUD = C ==================================================================== C -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMATTAC -INC SMELEME -INC SMCHPOI -INC SMCOORD C SEGMENT MANBN POINTEUR KAB(NSGA).ANBN ENDSEGMENT C C NSGA : NOMBRE DE BLOCS ANBN C SEGMENT ANBN REAL*8 AB(NTANBN,LANBN) ENDSEGMENT C C AB(I,K) : TERME I DE LA MATRICE A OU B D'UN ELEMENT AU TEMPS K C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B DE TOUS LES ELEMENTS C LANBN : NOMBRE DE PAS DE TEMPS STOCKES DANS UN BLOC ANBN C C SEGMENT ICPR(nbpts) C C IKID=ICPR(NUM(I,J))+K C LA COMPOSANTE NOMD(K) DU POINT NUM EST LE IKID-IEME DDL DE DNCN C SEGMENT ICPR2(NIDNCN) C C NJ=ICPR2(IKID) : LE IKID-IEME DDL DE DNCN EST LE NJ-IEME DANS C L'ENSEMBLE DES XLIAI MIS BOUT-A-BOUT C SEGMENT ICPR1(NBPT) C SEGMENT MOMALI POINTEUR NOMALI(NBLIPE).MALIAI POINTEUR KCPR2.ICPR2 ENDSEGMENT C SEGMENT MALIAI REAL*8 ALIA1(NALI) REAL*8 ALIA2(NBLI) REAL*8 ALIA3(NL/2,NL/2) REAL*8 ALIA4(NL/2,NL/2) REAL*8 BLIAI(NL) REAL*8 XLIAI(NL) INTEGER NLBLI(2,NBSTLI) INTEGER NDCLIA(NL) INTEGER NVNLIA(NL/2) INTEGER IBCHA(NCHAL) POINTEUR KWLIAI.MWLIAI POINTEUR KLIMAS.MLIMAS ENDSEGMENT C C MATRICE DE LIAISON PUIS SON INVERSE EN 4 BLOCS: C ALIA1 : MATRICE BANDE I-A0 C -1 C ALIA2 : MATRICE BANDE -B0 C ALIA3 : MATRICE DE LIAISON TERMES EN DEPLACEMENT C ALIA4 : MATRICE DE LIAISON TERMES EN CONTRAINTE C NLBLI : TABLEAU DE CORRESPONDANCE ENTRE LES BLOCS C BLIAI : VECTEUR SECOND MEMBRE -> VN ET CHARGEMENT EVENTUEL C XLIAI : VECTEUR PREMIER MEMBRE -> DNCN C NDCLIA(NJC)=IKID : LA NJC-IEME INCONNUE DE XLIAI EST LE IKID-IEME C DDL DE DNCN C DNCN(IKID) <- XLIAI(NJC) C NVNLIA(NJL)=IKIV : LA NJL-IEME INCONNUE DE BLIAI EST LE IKIV-IEME C DDL DE VN C BLIAI(NJL) <- VN(IKIV) C NCHAL : NOMBRE DE SOUS-CHARGEMENTS AGISSANT SUR LA LIAISON C IBCHA(I)=K : LA PARTIE CHARGEMENT DE BLIAI POUR LE I-IEME SOUS- C CHARGEMENT SE TROUVE A PARTIR DE LA K+1-IEME PLACE DANS BCHAR2 C BLIAI(NL/2+NJL) <- BCHAR2(K+NJL) C SEGMENT MLIMAS REAL*8 BLIMAS(2,NJON) REAL*8 ALIMAS(LIM,NJON) INTEGER NLIMAS(LIM) ENDSEGMENT C C SEGMENT POUR LE CALCUL DE L'ACCELERATION DU CENTRE DE GRAVITE DE C L'ELEMENT RIGIDE DE LIAISON C BLIMAS(1,I) <--- DC(NDCLIA(I),N-1) C BLIMAS(2,I) <--- DC(NDCLIA(I),N-2) C NLIMAS(J)=K : BLIAI(NL+K)=-2*C(I,K)*BLIMAS(1,I)+C(I,K)*BLIMAS(2,I C SEGMENT MWLIAI REAL*8 ALIAI(NL/2,NL) ENDSEGMENT C SEGMENT MNREFE INTEGER NREFE(8,NSTR) INTEGER NTANBN INTEGER NIDNCN INTEGER NTVN POINTEUR NREPA.MPASS POINTEUR NRECA.MCARA POINTEUR NRENO.MNORM POINTEUR NRECPR.ICPR POINTEUR NREMEL.MELEME POINTEUR NREDEN.MDEN ENDSEGMENT C C NSTR : NOMBRE D'ELEMENTS C NREFE(1,I) : MELEME C NREFE(2,I) : MSOSTU C NREFE(3,I) : TYPE DE L'ELEMENT C NREFE(4,I) : NOMBRE DE POINTS DU MELEME C NREFE(5,I) : NOMBRE DE DDL PAR POINT C NREFE(6,I)=IVN :LE 1ER DDL DE L'ELEMENT EST LE IVN+1 IEME DE VN C NREFE(7,I)=IAN :LE 1ER TERME DE LA MATRICE A EST LE IAN IEME DE ANBN C NREFE(8,I)= 1 :LE IEME ELEMENT EST RIGIDE (OU PARTIELLEMENT) SINON 0 C NTANBN : NOMBRE DE TERMES DES MATRICES A ET B POUR TOUS LES ELEMENTS C NIDNCN : NOMBRE TOTAL D'INCONNUES DE DNCN C NTVN : LONGUEUR DU TABLEAU VN C SEGMENT MPASS REAL*8 PASS(9*NSTR) ENDSEGMENT C C PASS(9) : MATRICE DE CHANGEMENT DE REPERE POUR L'ELEMENT I C SEGMENT MNORM REAL*8 DNORM(LNORM) ENDSEGMENT C C DNORM : VECTEUR DE NORMALISATION C SEGMENT ITRAV(NSTR) C SEGMENT/MTRAV/(BT(NJON,NJON),IS(NJON)) C DIMENSION AA(3),BB(3) DATA L6/6/,L12/12/ WRITE(IOIMP,*) ' DEBUT DE ELFLIA ' MANBN=KANBN ANBN=KAB(1) SEGACT ANBN SEGACT MATTAC MNREFE=KNREFE MNORM=NRENO MPASS=NREPA MELEME=NREMEL NBPT=NUM(/2) SEGINI ICPR1,ICPR2 NSTR=NREFE(/2) ICPR=NRECPR SEGINI ITRAV NSOUMA=LISATT(/1) NBLIPE=NSOUMA SEGINI MOMALI KCPR2=ICPR2 NBLIP=0 NDECA=0 NCHAL=0 DO 400 NSOU=1,NSOUMA DO 10 L=1,NBPT ICPR1(L)=0 10 CONTINUE MSOUMA=LISATT(NSOU) SEGACT MSOUMA NJON=IATREL(/1) NJON6=NJON/L6 NL=2*NJON SEGINI MWLIAI NALI=0 NBLI=0 NBSTLI=0 SEGINI MALIAI KWLIAI=MWLIAI NBLIP=NBLIP+1 NOMALI(NBLIP)=MALIAI NJP=0 LIMM=0 KLIMAS=0 DO 290 NJ=1,NJON MJONCT=IATREL(NJ) SEGACT MJONCT NSTRU=ISTRJO(/1) DO 280 NST=1,NSTRU MCHPOI=IPCHJO(NST) C C RECHERCHE DES STRUCTURES QUI INTERVIENNENT DANS LA LIAISON MSOUMA C MSOSTU=ISTRJO(NST) DO 110 NF=1,NSTR IF(NREFE(2,NF).EQ.MSOSTU) THEN IF(NBSTLI.NE.0) THEN DO 100 NSS=1,NBSTLI IF(ITRAV(NSS).EQ.NF) GOTO 120 100 CONTINUE ENDIF NBSTLI=NBSTLI+1 ITRAV(NBSTLI)=NF GOTO 120 ENDIF 110 CONTINUE C *** LA LIAISON FAIT INTERVENIR UNE STRUCTURE QUI N'EST PAS DEFINIE INTERR(1)=MSOUMA INTERR(2)=MJONCT INTERR(3)=MSOSTU RETURN 120 CONTINUE C C CONSTRUCTION DE LA MATRICE ALIAI C RECHERCHE DES POINTS DE LIAISONS AVEC LE TABLEAU : ICPR1 C ICPR1(NKI)=NJC : LE NKI IEME PT DE DNCN EST LE NJP IEME DDL DE BLI C SEGACT MCHPOI NSOUPO=IPCHP(/1) DO 270 NS=1,NSOUPO MSOUPO=IPCHP(NS) SEGACT MSOUPO MELEME=IGEOC SEGACT MELEME NBELEM=NUM(/2) NC=NOCOMP(/2) MPOVAL=IPOVAL SEGACT MPOVAL DO 260 NB=1,NBELEM IKI=ICPR(NUM(1,NB)) NKI=IKI/L12+1 TCODDL=0.D0 TCODDU=0.D0 DO 240 NCC=1,NC IF(VPOCHA(NB,NCC).NE.0.D0) THEN DO 200 ND=1,L6 TCODDL=VPOCHA(NB,NCC) GOTO 230 ENDIF 200 CONTINUE DO 220 ND=1,L6 TCODDU=VPOCHA(NB,NCC) GOTO 230 ENDIF 220 CONTINUE C *** LA LIAISON EST MAL DEFINIE :LA COMPOSANTE N'EXISTE PAS INTERR(1)=MSOUMA INTERR(2)=MJONCT MOTERR=NOMC RETURN 230 IKID=IKI+ND IF(ICPR1(NKI).EQ.0) THEN IF(NJP.GE.NJON6) THEN C *** LA LIAISON EST MAL DEFINIE :TROP DE POINTS POUR LE NOMBRE DE LIAIS C SONS ELEMENTAIRES DONNEES INTERR(1)=MSOUMA RETURN ENDIF NJP=NJP+1 ICPR1(NKI)=NJP ENDIF NJC=L6*(ICPR1(NKI)-1)+ND IKID6=IKID+L6 NJCN=NJC+NJON IF(ICPR2(IKID).EQ.0.AND.ICPR2(IKID6).EQ.0) THEN ICPR2(IKID)=NJC+NDECA NDCLIA(NJC)=IKID ICPR2(IKID6)=NJCN+NDECA NDCLIA(NJCN)=IKID6 ENDIF ALIAI(NJ,NJC)=TCODDL ALIAI(NJ,NJCN)=TCODDU ENDIF 240 CONTINUE 260 CONTINUE SEGDES MPOVAL,MELEME,MSOUPO 270 CONTINUE SEGDES MCHPOI 280 CONTINUE IF(MJOTYP.EQ.'MASS') THEN IF(KLIMAS.EQ.0) THEN LIM=NJON SEGINI MLIMAS KLIMAS=MLIMAS ENDIF DO 210 NJC=1,NJON IF(ALIAI(NJ,NJON+NJC).NE.0.D0) THEN LIMM=LIMM+1 NLIMAS(LIMM)=NJC GOTO 215 ENDIF 210 CONTINUE 215 CONTINUE ENDIF SEGDES MJONCT 290 CONTINUE IF(KLIMAS.NE.0) THEN LIM=LIMM SEGADJ MLIMAS ENDIF C C VERIFICATION C C DO 398 I=1,NJON C WRITE(IOIMP,1002)(ALIAI(I,J),J=1,NL) C 398 CONTINUE C WRITE(IOIMP,*)(NDCLIA(I),I=1,NL) DO 295 NJ=1,NJON IF(NDCLIA(NJ).EQ.0) THEN C *** LA LIAISON EST MAL DEFINIE : IL MANQUE DES DDL INTERR(1)=MSOUMA RETURN ENDIF 295 CONTINUE C NALI=40*NBSTLI NBLI=40*NBSTLI SEGADJ MALIAI DO 314 NST=1,NBSTLI NLBLI(1,NST)=-1 NLBLI(2,NST)=-1 314 CONTINUE NAA=0 NBB=0 NALI=0 NBLI=0 DO 380 NST=1,NBSTLI NF=ITRAV(NST) MP=9*(NF-1) NBP=NREFE(4,NF) IVN=NREFE(6,NF) IAN=NREFE(7,NF) MELEME=NREFE(1,NF) SEGACT MELEME DO 370 NB1=1,NBP IKI=ICPR(NUM(NB1,1)) NKI=IKI/L12+1 NJP=ICPR1(NKI) IF(NJP.NE.0) THEN NJC=L6*(NJP-1) NLBLI(NB1,NST)=NJC NJCN=NJC+NJON DO 315 NDL=1,L6 NVNLIA(NJC+NDL)=IVN+(NB1-1)*L6+NDL 315 CONTINUE C C ECRITURE DES LIAISONS AVEC LES VARIABLES LOCALES C CHANGEMENT DE REPERE FABRICATION DE ALIA3 ALIA4 C DO 360 NJ=1,NJON DO 350 K=1,2 K3=3*(K-1) NJC3=NJC+K3 NJCN3=NJCN+K3 DO 330 I=1,3 AA(I)=0.D0 BB(I)=0.D0 MPI=MP+I DO 320 J=1,3 MPIJ=MPI+3*(J-1) AA(I)=AA(I)+ALIAI(NJ,NJC3+J)*PASS(MPIJ) BB(I)=BB(I)+ALIAI(NJ,NJCN3+J)*PASS(MPIJ) 320 CONTINUE 330 CONTINUE DO 340 I=1,3 NJC3I=NJC3+I IKID=NDCLIA(NJC3I) IKID3=NDCLIA(NJCN3+I) ALIA3(NJ,NJC3I)=AA(I)*DNORM(IKID) ALIA4(NJ,NJC3I)=BB(I)*DNORM(IKID3) 340 CONTINUE 350 CONTINUE 360 CONTINUE ENDIF 370 CONTINUE C C FABRICATION DE ALIA1 ALIA2 C NB1=3 IF(NLBLI(1,NST).LT.0) THEN NB1=2 NLBLI(1,NST)=NLBLI(2,NST) ENDIF IF(NLBLI(2,NST).LT.0) THEN NB1=1 NLBLI(2,NST)=NLBLI(1,NST) ENDIF IF(NB1.EQ.3) THEN NALI=NALI+40 NBLI=NBLI+40 ELSE NALI=NALI+10 NBLI=NBLI+6 ENDIF C WRITE(IOIMP,*) ' NLBLI ',NLBLI(1,NST),NLBLI(2,NST) C WRITE(IOIMP,*) ' NB1 ',NB1 IF(ISING.EQ.1) THEN C *** MATRICE SINGULIERE INTERR(1)=MSOUMA C CALL ERREUR(374) C RETURN WRITE(IOIMP,*) ' MATRICE SINGULIERE ' ENDIF NAA=NALI NBB=NBLI 380 CONTINUE SEGADJ MALIAI SEGSUP MSOUMA NDECA=NDECA+NL C WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI) C WRITE(IOIMP,1008) C WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI) C WRITE(IOIMP,1008) C DO 396 I=1,NJON C WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON) C 396 CONTINUE C WRITE(IOIMP,1008) C DO 397 I=1,NJON C WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON) C 397 CONTINUE IF(KLIMAS.NE.0) THEN DO 390 I=1,LIM K=NLIMAS(I) DO 390 J=1,NJON ALIMAS(I,J)=ALIA3(K,J) 390 CONTINUE ENDIF C C FABRICATION DE ALIA3 ET ALIA4 C SEGINI MTRAV *NBSTLI) SEGSUP MTRAV IF(ISING.EQ.1) THEN C *** MATRICE SINGULIERE INTERR(1)=MSOUMA RETURN C WRITE(IOIMP,*) ' MATRICE SINGULIERE ' ENDIF IF(IIMPI.EQ.1) THEN WRITE(IOIMP,1001) NBLIP 1001 FORMAT(1X,/I5,' IEME LIAISON '//) WRITE(IOIMP,1002)(ALIA1(J),J=1,NALI) WRITE(IOIMP,1008) 1008 FORMAT(/) WRITE(IOIMP,1002)(ALIA2(J),J=1,NBLI) WRITE(IOIMP,1008) DO 392 I=1,NJON WRITE(IOIMP,1002)(ALIA3(I,J),J=1,NJON) 392 CONTINUE WRITE(IOIMP,1008) DO 393 I=1,NJON WRITE(IOIMP,1002)(ALIA4(I,J),J=1,NJON) 393 CONTINUE 1002 FORMAT(12(1X,1PE10.3)) WRITE(IOIMP,1004) 1004 FORMAT(1X,/' TABLEAU NDCLIA ') WRITE(IOIMP,1005)(NDCLIA(I),I=1,NL) 1005 FORMAT(1X,20(I5,1X)) WRITE(IOIMP,1007) 1007 FORMAT(1X,/' TABLEAU NVNLIA ') NLS2=NL/2 WRITE(IOIMP,1005)(NVNLIA(I),I=1,NLS2) IF(KLIMAS.NE.0) THEN WRITE(IOIMP,1009) 1009 FORMAT(1X,/' LIAISON PAR ELEMENT MASSIQUE RIGIDE ') NLS2=NL/2 WRITE(IOIMP,1010) 1010 FORMAT(1X,/' TABLEAU NLIMAS ') WRITE(IOIMP,1005)(NLIMAS(I),I=1,NLIMAS(/1)) WRITE(IOIMP,1011) 1011 FORMAT(1X,/' TABLEAU ALIMAS ') DO 401 I=1,ALIMAS(/1) WRITE(IOIMP,1002)(ALIMAS(I,J),J=1,NJON) 401 CONTINUE ENDIF ENDIF 400 CONTINUE NBLIPE=NBLIP SEGADJ MOMALI KOMALI=MOMALI SEGSUP ITRAV,ICPR1 SEGSUP MATTAC SEGDES ANBN IF(IIMPI.EQ.1) THEN WRITE(IOIMP,1006) 1006 FORMAT(1X,/' TABLEAU ICPR2 '//) WRITE(IOIMP,1005)(ICPR2(L),L=1,NIDNCN) ENDIF WRITE(IOIMP,*) ' FIN DE ELFLIA ' RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales