elfres
C ELFRES SOURCE FANDEUR 22/01/03 21:15:14 11136 *NFOIS,KSOLUT) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ==================================================================== C SOUS-PROGRAMME EFFECTUANT LA RESOLUTION TEMPORELLE C SOUS-PROGRAMME APPELE PAR ELFE C N'APPELLE QUE DES SOUS-PROGRAMMES FORTRAN C CREATION : 3/11/86 MODIFICATION LE 22/01/88 C PROGRAMMEUR : GUILBAUD PAR LIONEL VIVAN C ==================================================================== C -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMELEME -INC SMCHPOI -INC SMSOLUT -INC SMLREEL 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 SEGMENT MDNCN POINTEUR KDC(NSGD).DNCN ENDSEGMENT C C NSGD : NOMBRE DE BLOCS DNCN C SEGMENT DNCN REAL*8 DC(NIDNCN,LDNCN) ENDSEGMENT C C DC(I,K) : DDL I AU TEMPS K C NIDNCN : NOMBRE TOTAL D'INCONNUES C LDNCN : NOMBRE DE PAS DE TEMPS STOCKES DANS UN BLOC DNCN 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 VN(NTVN) C SEGMENT MACHAR INTEGER LACHAL(NCHAR) POINTEUR LACHAT(NCHAR).ICHATE POINTEUR LACHAF(NCHAR).ICHAFO 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 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 MNORM REAL*8 DNORM(LNORM) ENDSEGMENT C C DNORM : VECTEUR DE NORMALISATION C C SEGMENT MCARA REAL*8 CARA(LCAR*NSTR) ENDSEGMENT C C LCAR : NOMBRE DE CARACTERISTIQUES DE L'ELEMENT 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( , ,1 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 WRITE(IOIMP,*) ' DEBUT DE ELFRES ' MNREFE=KNREFE MNORM=NRENO MPASS=NREPA C C 0 - CREATION DE L'OBJET SOLUTION DYNAMIQUE C N=NPAS+1 NIPO=10 SEGINI MSOLUT ITYSOL='DYNAMIQU' SEGINI MSOLRE,MSOLEN MSOLIS(1)=MSOLRE MSOLIT(1)=0 MSOLIS(5)=MSOLEN MSOLIT(5)=2 SEGDES MSOLUT C C C - CREATION DU CHAMPOINT SOLUTION INITIALE C NSOUPO=1 NAT=1 SEGINI MCHPOI IFOPOI=IFOUR C Dans les solutions il n'y que des chpo diffus JATTRI(1) = 1 NDDL=NREFE(5,1) NC=2*NDDL SEGINI MSOUPO IPCHP(1)=MSOUPO IGEOC=NREMEL DO 5 I=1,NDDL NOCOMP(I)= NOMDD(I) NOCOMP(I+NDDL) = NOMDU(I) 5 CONTINUE MELEME=NREMEL N=NUM(/2) SEGINI MPOVAL IPOVAL=MPOVAL ISOLEN(1)=MCHPOI C CALL ECCHPO(MCHPOI) SOLRE(1)=0.D0 C SEGINI VN NSTR=NREFE(/2) LREF=NREFE(/1) MANBN=KANBN ANBN=KAB(1) SEGACT ANBN LANBN=AB(/2) MDNCN=KDNCN DNCN=KDC(1) SEGACT DNCN LDNCN=DC(/2) MOMALI=KOMALI NBLIPE=NOMALI(/1) MACHAR=KACHAR NCHAR=LACHAL(/1) C C BOUCLE SUR LES PAS EN TEMPS C NFF=0 NFS=0 NPAS1=NPAS+1 DO 70 NN=2,NPAS1 NFF=NFF+1 MNN=MIN(NN,M) IF (IIMPI.EQ.1) THEN WRITE(IOIMP,*) 'NN=',NN,'MNN=',MNN END IF DO 10 I=1,NTVN VN(I)=0.D0 10 CONTINUE C C C 1 - CALCUL DE LA CONVOLUTION, REMPLISSAGE DE VN C C LA CONVOLUTION SE FAIT DANS L ORDRE CROISSANT DES INDICES POUR DNCN C MNN-1 : LONGUEUR SUR LAQUELLE SE FAIT LA CONVOLUTION C IDEP : INDICE DE DEPART POUR LE CALCUL DE LA CONVOLUTION C IARR : INDICE D ARRIVEE POUR LE CALCUL DE LA CONVOLUTION C INDICES DE DEPART ET D'ARRIVEE A L INTERIEUR DES BLOCS: C POUR ANBN : DEPART NDANBN, ARRIVEE NAANBN C POUR DNCN : DEPART NDDNCN, ARRIVEE NADNCN C LAB : NUMERO DU BLOC ANBN C LDC : NUMERO DU BLOC DNCN C IDEP=NN-(MNN-1) IARR=NN-1 C WRITE (IOIMP,*) 'IDEP=',IDEP,'IARR=',IARR J=MNN LAB=((J-1)/LANBN)+1 C LDC=((IDEP-1)/LDNCN)+1 C DECALAGE DES BLOCS DNCN LORSQUE LE PREMIER NE SERT PLUS IF(IDEP.NE.1.AND.MOD(IDEP,LDNCN).EQ.1) THEN KKK=KDC(1) NDCL=KDC(/1)-1 DO 1 LDC1=1,NDCL KDC(LDC1)=KDC(LDC1+1) 1 CONTINUE KDC(NDCL+1)=KKK C WRITE (IOIMP,*) 'DECALAGE IDEP ',IDEP ENDIF LDC=1 C WRITE (IOIMP,*) 'LAB=',LAB,'LDC=',LDC ANBN=KAB(LAB) DNCN=KDC(LDC) SEGACT ANBN SEGACT DNCN C C BOUCLE SUR LES TERMES DU PRODUIT DE CONVOLUTION C NDDNCN=MOD(IDEP,LDNCN) IF(NDDNCN.EQ.0) NDDNCN=LDNCN NDANBN=MOD(J,LANBN) IF(NDANBN.EQ.0) NDANBN=LANBN DO 40 I=IDEP,IARR NADNCN=MOD(I,LDNCN) NAANBN=MOD(J,LANBN) C C PRODUIT DE CONVOLUTION PARTIEL UTILISANT LES DEUX BLOCS EN MEMOIRE C IF(NADNCN.EQ.0.OR.NAANBN.EQ.1.OR.I.EQ.IARR) THEN IF(NADNCN.EQ.0) NADNCN=LDNCN IF(NAANBN.EQ.0) NAANBN=LANBN C WRITE (IOIMP,*) 'NDANBN=',NDANBN,'NAANBN=',NAANBN C WRITE (IOIMP,*) 'NDDNCN=',NDDNCN,'NADNCN=',NADNCN C WRITE (IOIMP,*) I,LAB,ANBN,LDC,DNCN *NADNCN,LREF) C WRITE(IOIMP,*)'VN' C WRITE(IOIMP,*)(VN(IJ),IJ=1,VN(/1)) C NDDNCN=MOD(I+1,LDNCN) IF(NDDNCN.EQ.0) NDDNCN=LDNCN NDANBN=MOD(J-1,LANBN) IF(NDANBN.EQ.0) NDANBN=LANBN C C FIN DE BLOC DNCN C IF(NADNCN.EQ.LDNCN) THEN IF(I.NE.IARR) THEN SEGDES DNCN ELSE SEGDES DNCN ENDIF IF(LDC.LT.KDC(/1)) THEN LDC=LDC+1 DNCN=KDC(LDC) C WRITE(IOIMP,*) KDC(/1),LDC,DNCN SEGACT DNCN ENDIF ENDIF C C FIN DE BLOC ANBN C IF(NAANBN.EQ.1) THEN SEGDES ANBN IF(I.NE.IARR) THEN LAB=LAB-1 ANBN=KAB(LAB) SEGACT ANBN ENDIF ENDIF ENDIF J=J-1 40 CONTINUE C C C 2 - CALCUL DU CHARGEMENT - BOUCLE SUR LES SOUS-CHARGEMENTS C T=(NN-1)*DELTAT IDCH=1 C WRITE(IOIMP,*) ' NCHAR =',NCHAR DO 50 NCH=1,NCHAR MLREE1=LACHAT(NCH) MLREE2=LACHAF(NCH) C CALL INTER1(LACHAT(NCH),LACHAF(NCH),T,FT) LCH=LACHAL(NCH) C WRITE(IOIMP,*) ' LCH ',LCH,' NCH ',NCH IDCH=IDCH+LCH 50 CONTINUE C WRITE(IOIMP,*) ' BCHAR2 ' C WRITE(IOIMP,1002) (BCHAR2(IJ),IJ=1,BCHAR2(/1)) C C 3 - CALCUL DE DNCN - BOUCLE SUR LES LIAISONS C DO 60 NBLI=1,NBLIPE MALIAI=NOMALI(NBLI) NL=NDCLIA(/1) NLS2=NL/2 C C RANGEMENT DES SECONDS MEMBRES VN DANS LES NL PREMIERES C COMPOSANTES DU VECTEUR BLIAI DE LA NBLI- EME LIAISON C C WRITE(IOIMP,*) ' BLIAI 1 ' C WRITE(IOIMP,1002) (BLIAI(IJ),IJ=1,NLS2) C C CALCUL DE LA RESULTANTE DES NCHAL CHARGEMENTS CONTENUS DANS BCHAR2 C QUI AGISSENT SUR LA NBLI-IEME LIAISON, C ET RANGEMENT DANS LA DEUXIEME MOITIE DU VECTEUR SECOND MEMBRE BLIAI C A L'AIDE DU TABLEAU IBCHA C NCHAL=IBCHA(/1) NLS21=NLS2+1 IF(KLIMAS.NE.0) THEN C C CALCUL DE L'ACCELERATION DU CENTRE DE GRAVITE DE L'ELEMENT DE LIAISON C MLIMAS=KLIMAS LIM=NLIMAS(/1) ENDIF C WRITE(IOIMP,*) ' BLIAI 2 ' C WRITE(IOIMP,1002) (BLIAI(IJ),IJ=NLS21,NL) C C MULTIPLICATION ALIAI*BLIAI=XLIAI C NBSTLI=NLBLI(/2) *NBSTLI) C WRITE(IOIMP,*) ' XLIAI ' C WRITE(IOIMP,1002) (XLIAI(IJ),IJ=1,NL) IF(KLIMAS.NE.0) THEN C C RANGEMENT DE XLIAI DANS BLIMAS C ENDIF C C RANGEMENT DE XLIAI DANS DNCN C C WRITE(IOIMP,*) ' DNCN ' C WRITE(IOIMP,1002) (DC(IJ,NDDNCN),IJ=1,NIDNCN) C IF(IIMPI.EQ.1) THEN WRITE(IOIMP,1001) NBLI 1001 FORMAT(//I5,' IEME SECOND MEMBRE BLIAI'//) WRITE (IOIMP,1002) (BLIAI(L),L=1,NL) 1002 FORMAT(1X,10(1PE12.5,1X)) WRITE(IOIMP,1003) 1003 FORMAT(//' SOLUTION XLIAI'//) WRITE (IOIMP,1002) (XLIAI(L),L=1,NL) ENDIF 60 CONTINUE C C 4 - CREATION DU CHAMPOINT SOLUTION A L'INSTANT T C IF(NFF.EQ.NFOIS) THEN NFF=0 NFS=NFS+1 NAT=1 SEGINI MCHPOI IFOPOI=IFOUR JATTRI(1) = 1 SEGINI MSOUPO IPCHP(1)=MSOUPO IGEOC=NREMEL DO 65 I=1,NDDL NOCOMP(I)= NOMDD(I) NOCOMP(I + NDDL)= NOMDU(I) 65 CONTINUE SEGINI MPOVAL IPOVAL=MPOVAL ISOLEN(NFS)=MCHPOI C CALL ECCHPO(MCHPOI) SOLRE(NFS)=T ENDIF C 70 CONTINUE C C 5 - SUPPRESSION DES SEGMENTS DE TRAVAIL ET DESACTIVATION C SEGDES MSOLRE,MSOLEN C SEGSUP VN C NSGA=KAB(/1) DO 80 NSG=1,NSGA ANBN=KAB(NSG) SEGSUP ANBN 80 CONTINUE NSGD=KDC(/1) DO 90 NSG=1,NSGD DNCN=KDC(NSG) SEGSUP DNCN 90 CONTINUE SEGSUP MANBN SEGSUP MDNCN C DO 100 NCH=1,NCHAR MLREE1=LACHAT(NCH) MLREE2=LACHAF(NCH) SEGDES MLREE1,MLREE2 100 CONTINUE SEGSUP MACHAR C DO 110 NBLI=1,NBLIPE MALIAI=NOMALI(NBLI) IF(KLIMAS.NE.0) THEN MLIMAS=KLIMAS SEGSUP MLIMAS ENDIF SEGSUP MALIAI 110 CONTINUE ICPR2=KCPR2 SEGSUP ICPR2 SEGSUP MOMALI C SEGSUP MNORM SEGSUP MPASS ICPR=NRECPR MCARA=NRECA SEGSUP ICPR SEGSUP MCARA SEGSUP MNREFE KSOLUT=MSOLUT WRITE (IOIMP,*) 'FIN DE ELFRES ' RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales