C ELFCHA SOURCE CB215821 20/11/25 13:27:13 10792 SUBROUTINE ELFCHA(MCHARG,KOMALI,KNREFE,KACHAR) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ===================================================================== C C CREATION DU SEGMENT MACHAR A PARTIR DE L'OBJET CHARGEMENT MCHARG C C SOUS PROGRAMME APPELE PAR ELFE C C KNREFE : SEGMENT QUI DECRIT LES ELEMENTS C KOMALI : SEGMENT DE POINTEURS SUR LES SEGMENTS MALIAI DEFINISSANT C LES LIAISONS C C GUILBAUD MAI 86 C C ===================================================================== C -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHARG -INC SMCHPOI -INC SMELEME -INC SMLREEL 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 MWLIAI REAL*8 ALIAI(NL/2,NL) ENDSEGMENT 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 MACHAR INTEGER LACHAL(NCHAR) POINTEUR LACHAT(NCHAR).ICHPO2 POINTEUR LACHAF(NCHAR).ICHPO3 REAL*8 BCHAR1(NV1) REAL*8 BCHAR2(NV1) ENDSEGMENT C C LACHAL(I) : NOMBRE DE TERMES RELATIFS AU CHARGEMENT I DANS BCHAR1 C LACHAT(I) : POINTEUR SUR LA LISTE DES TEMPS DU CHARGEMENT I C LACHAF(I) : POINTEUR SUR LA LISTE DES F(T) DU CHARGEMENT I C BCHAR1 : VECTEUR FORME PAR L'EMPILEMENT DE LA PARTIE CHARGEMENT C DES SECOND-MEMBRES BLIAI, POUR TOUTES LES LIAISONS CONCERNEES C PAR UN SOUS-CHARGEMENT ET POUR TOUS LES SOUS-CHARGEMENTS C BCHAR2 : IDEM MODULE PAR LES FONCTIONS TEMPORELLES C SEGMENT MOMALI POINTEUR NOMALI(NBLIPE).MALIAI POINTEUR KCPR2.ICPR2 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 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 V0(2*NTVN)*D C SEGMENT ITCOM(NC) C SEGMENT IT(NBLIPE) C SEGMENT/ITLI/(ITLIA(NCHAR,NBLIPE)) C CHARACTER*(LOCOMP) NOC WRITE(IOIMP,*) 'DEBUT DE ELFCHA' KACHAR=0 MNREFE=KNREFE ICPR=NRECPR SEGINI V0 C MOMALI=KOMALI ICPR2=KCPR2 NBLIPE=NOMALI(/1) SEGINI IT C SEGACT MCHARG NCHAR=KCHARG(/1) SEGINI ITLI DO 1 I=1,NBLIPE IT(I)=0 DO 1 J=1,NCHAR ITLIA(J,I)=0 1 CONTINUE C NV1=NTVN SEGINI MACHAR C C BOUCLE SUR LES SOUS-CHARGEMENTS DE L'OBJET CHARGEMENT C NV1=0 DO 140 I=1,NCHAR DO 10 II=1,NIDNCN V0(II)=0.D0 10 CONTINUE C C 1 - RECHERCHE DE LA POSITION DU DDL CHARGE DANS L'ENSEMBLE DES XLIAI C ET REMPLISSAGE DE V0 C ICHARG=KCHARG(I) SEGACT ICHARG IF(CHATYP.NE.'CHPOINT '.OR.CHAMOB(I).NE.'STAT' & .OR.CHALIE(I).NE.'LIE ') THEN SEGDES ICHARG,MCHARG CALL ERREUR(696) RETURN ENDIF MCHPOI=ICHPO1 SEGACT MCHPOI NSOUPO=IPCHP(/1) DO 70 ISOUPO=1,NSOUPO MSOUPO=IPCHP(ISOUPO) SEGACT MSOUPO MPOVAL=IPOVAL SEGACT MPOVAL NC=VPOCHA(/2) SEGINI ITCOM DO 40 INC=1,NC NOC=NOCOMP(INC) ITCOM(INC)=0 DO 20 IDD=1,6 IF(NOC.EQ.NOMDD(IDD)) THEN ITCOM(INC)=IDD GO TO 40 ENDIF 20 CONTINUE DO 30 IDU=1,6 IF(NOC.EQ.NOMDU(IDU)) THEN ITCOM(INC)=IDU+6 GO TO 40 ENDIF 30 CONTINUE 40 CONTINUE C MELEME=IGEOC SEGACT MELEME NBPO=NUM(/2) DO 60 IBPO=1,NBPO IKI=ICPR(NUM(1,IBPO)) IF(IKI.EQ.-1) THEN C *** LE POINT NE FAIT PAS PARTIE DE LA STRUCTURE INTERR(1)=IKI CALL ERREUR(384) RETURN ENDIF DO 50 INC=1,NC IKC=ITCOM(INC) IF(IKC.EQ.0) THEN C *** LA COMPOSANTE N'EST PAS DEFINIE POUR LA STRUCTURE MOTERR=NOCOMP(INC) CALL ERREUR(385) RETURN ENDIF VP=VPOCHA(IBPO,INC) IV=ICPR2(IKI+IKC) C WRITE(IOIMP,*) IV IF(VP.NE.0.D0) V0(IV)=VP 50 CONTINUE 60 CONTINUE SEGSUP ITCOM 70 CONTINUE C WRITE(IOIMP,*)(V0(J),J=1,NIDNCN) C C 2 - CREATION DU TABLEAU V1 A PARTIR DE V0 C NDEPLA=0 NV2=0 DO 130 INLIAI=1,NBLIPE MALIAI=NOMALI(INLIAI) MWLIAI=KWLIAI NL=NDCLIA(/1) C C Y A-T-IL UN CHARGEMENT SUR LA LIAISON ? C DO 80 NJCC=1,NL IF(V0(NDEPLA+NJCC).NE.0.D0) THEN C C CREATION DE LA PARTIE CHARGEMENT DU SECOND MEMBRE BLIAI C ET EMPILEMENT DANS BCHAR1 C ITT=IT(INLIAI)+1 IT(INLIAI)=ITT NLS2=NL/2 ITLIA(ITT,INLIAI)=NV1 NVA=NV1 NV1=NV1+NLS2 NV2=NV2+NLS2 C WRITE(IOIMP,*)ITT,NV1,NV2,INLIAI,NDEPLA DO 110 NJC=1,NL VV=V0(NDEPLA+NJC) IF(VV.NE.0.D0) THEN DO 100 NJ=1,NLS2 C WRITE(IOIMP,*) ALIAI(NJL,NJC) IF(ALIAI(NJ,NJC).NE.0.D0) THEN NJA=NVA+NJ BCHAR1(NJA)=BCHAR1(NJA)+VV C WRITE(IOIMP,*) BCHAR1(NJA) ENDIF 100 CONTINUE ENDIF 110 CONTINUE GOTO 120 ENDIF 80 CONTINUE 120 NDEPLA=NDEPLA+NL 130 CONTINUE C LACHAL(I)=NV2 MLREEL=ICHPO2 SEGACT MLREEL LACHAT(I)=ICHPO2 MLREEL=ICHPO3 SEGACT MLREEL LACHAF(I)=ICHPO3 SEGDES ICHARG 140 CONTINUE C SEGDES MCHARG SEGSUP V0 SEGADJ MACHAR KACHAR=MACHAR C C CREATION DU TABLEAU IBCHA DES SEGMENTS MALIAI C DO 160 INLIAI=1,NBLIPE MALIAI=NOMALI(INLIAI) MWLIAI=KWLIAI SEGSUP MWLIAI NCHAL=IT(INLIAI) IF(NCHAL.NE.0) THEN NL=NDCLIA(/1) NALI=ALIA1(/1) NBLI=ALIA2(/1) NBSTLI=NLBLI(/2) SEGADJ MALIAI DO 150 ITT=1,NCHAL IBCHA(ITT)=ITLIA(ITT,INLIAI) 150 CONTINUE ENDIF 160 CONTINUE SEGSUP IT,ITLI C IF(IIMPI.EQ.1) THEN DO 210 INLIAI=1,NBLIPE MALIAI=NOMALI(INLIAI) NCHAL=IBCHA(/1) WRITE(IOIMP,1001) INLIAI,NCHAL 1001 FORMAT(/1X,' LA ',I5,' IEME LIAISON EST CHARGEE AVEC ',I5, *' CHARGEMENT(S) '/) IF(NCHAL.NE.0) THEN NLS2=NDCLIA(/1)/2 DO 200 J=1,NCHAL IT1=IBCHA(J)+1 IT2=0 DO 170 N=1,NCHAR IT2=IT2+LACHAL(N) IF(IT1.LE.IT2) THEN WRITE(IOIMP,1002) N,LACHAT(N),LACHAF(N),LACHAL(N) 1002 FORMAT(//1X,' CHARGEMENT ',I5,' T, F(T) :',I6,1X,I6,1X,I6) GOTO 180 ENDIF 170 CONTINUE 180 CONTINUE IT2=IT1+NLS2-1 WRITE(IOIMP,1003)(BCHAR1(IT),IT=IT1,IT2) 1003 FORMAT(1X,10(1PE12.5,1X)) 200 CONTINUE ENDIF 210 CONTINUE ENDIF C WRITE(IOIMP,*) 'FIN DE ELFCHA' RETURN END