elfgr2
C ELFGR2 SOURCE CB215821 17/11/30 21:16:01 9639 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C ===================================================================== C APPELE PAR ELFE C INITIALISATION DES BLOCS ANBN ET DNCN C REMPLISSAGE DES ANBN AVEC LES FONCTIONS DE GREEN ( KGREEN ) C C CREATION : 22/09/87 C PROGRAMMEUR : GUILBAUD C ===================================================================== -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMEVOLL -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-1)*DELTAT C NIDNCN : NOMBRE TOTAL D'INCONNUES C LDNCN : 1 + 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 MCARA REAL*8 CARA(LCAR*NSTR) ENDSEGMENT C C LCAR : NOMBRE DE CARACTERISTIQUES DE L'ELEMENT C SEGMENT MDEN INTEGER IDEN(INS) ENDSEGMENT C C IL Y A INS STRUCTURES AYANT DES CARACTERISTIQUES DIFFERENTES C IDEN CONTIENT LEUR NUMERO D'ORDRE DANS MNREFE C SEGMENT ITRAV(INS) CHARACTER *72 ITEX LOGICAL TRACTI,TORSIO C EPS=1.D-3 IF (IIMPI.EQ.1) THEN WRITE(IOIMP,*) ' DEBUT DE ELFGR2 ' END IF MNREFE=KNREFE MDEN=NREDEN NSTR=NREFE(/2) MCARA=NRECA LCAR=CARA(/1)/NSTR IF(M.EQ.0) M=NPAS TMAX=M*DELTAT C C RECHERCHE DES FONCTIONS DE GREEN C MEVOLL=KGREEN SEGACT MEVOLL C *** IL MANQUE DES FONCTIONS DE GREEN SEGDES MEVOLL RETURN ENDIF INS=IDEN(/1) SEGINI ITRAV KEVOLL=IEVOLL((NB-1)*28+1) SEGACT KEVOLL MLREEL=IPROGX SEGACT MLREEL SEGDES MLREEL DT2=DT*0.999999999 IF (DELTAT.LT.DT2 .OR. (INT(DELTAT/DT)*DT).LT.DT2) THEN SEGDES KEVOLL SEGDES MEVOLL RETURN END IF IF(TMAX .GT. TT) THEN C *** LA DUREE DU CALCUL EST TROP GRANDE POUR LES FONCTIONS DE GREEN SEGDES KEVOLL SEGDES MEVOLL RETURN ENDIF ITEX=KEVTEX READ (ITEX(6:17),FMT='(1PE12.5)') DLL READ (ITEX(24:35),FMT='(1PE12.5)') CTC READ (ITEX(43:54),FMT='(1PE12.5)') RTC SEGDES KEVOLL KEVOLL=IEVOLL((NB-1)*28+3) SEGACT KEVOLL ITEX=KEVTEX READ (ITEX(24:35),FMT='(1PE12.5)') CTO READ (ITEX(43:54),FMT='(1PE12.5)') RTO SEGDES KEVOLL KEVOLL=IEVOLL((NB-1)*28+5) SEGACT KEVOLL ITEX=KEVTEX READ (ITEX(43:54),FMT='(1PE12.5)') RFZ SEGDES KEVOLL KEVOLL=IEVOLL((NB-1)*28+10) SEGACT KEVOLL ITEX=KEVTEX READ (ITEX(43:54),FMT='(1PE12.5)') RFY SEGDES KEVOLL C C BOUCLE SUR LES ELEMENTS------------------------------ C DO 10 IN=1,INS IF(ITRAV(IN).EQ.0) THEN NS=IDEN(IN) NCA=LCAR*(NS-1) DIF=ABS(1.D0-DLL/CARA(NCA+1)) IF(DIF.GT.EPS) GOTO 10 C DIF=ABS(1.D0-CTC/CARA(NCA+6)) C IF(DIF.GT.EPS) GOTO 10 DIF=ABS(1.D0-RTC/CARA(NCA+2)) IF(DIF.GT.EPS) GOTO 10 C DIF=ABS(1.D0-CTO/CARA(NCA+7)) C IF(DIF.GT.EPS) GOTO 10 DIF=ABS(1.D0-RTO/CARA(NCA+3)) IF(DIF.GT.EPS) GOTO 10 DIF=ABS(1.D0-RFY/CARA(NCA+4)) IF(DIF.GT.EPS) GOTO 10 DIF=ABS(1.D0-RFZ/CARA(NCA+5)) IF(DIF.GT.EPS) GOTO 10 ITRAV(IN)=NB GOTO 20 ENDIF 10 CONTINUE 20 CONTINUE DO 30 IN=1,INS IF(ITRAV(IN).EQ.0) THEN C *** IL MANQUE LES FONCTIONS DE GREEN DE LA SOUS-STRUCTURE NS=IDEN(IN) INTERR(1)=NREFE(2,NS) ENDIF 30 CONTINUE IF(IERR.EQ.2) THEN SEGSUP ITRAV SEGDES MEVOLL RETURN ENDIF C C CREATION DES BLOCS ANBN C IF(NTANBN.GT.MAXBLO) THEN C *** TAILLE DU CALCUL TROP IMPORTANTE RETURN ENDIF LANBN=MAXBLO/NTANBN LANBND=LANBN NSGA=(M-1)/LANBN+1 SEGINI MANBN KANBN=MANBN DO 40 K=1,NSGA IF(K.EQ.NSGA) LANBN=M-(NSGA-1)*LANBN SEGINI ANBN SEGDES ANBN KAB(K)=ANBN 40 CONTINUE LANBN=LANBND C C CREATION DES BLOCS DNCN C IF(NIDNCN.GT.MAXBLO) THEN C *** TAILLE DU CALCUL TROP IMPORTANTE RETURN ENDIF LDNCN=MAXBLO/NIDNCN MPAS=NPAS IF(M.NE.NPAS) THEN C TRONCATURE DU PRODUIT DE CONVOLUTION ( MEMOIRE GLISSANT PAR BLOC ) MMPAS=M+LDNCN IF(NPAS.GT.MMPAS) MPAS=MMPAS ENDIF NSGD=MPAS/LDNCN+1 SEGINI MDNCN KDNCN=MDNCN DO 50 K=1,NSGD SEGINI DNCN SEGDES DNCN KDC(K)=DNCN 50 CONTINUE IF (IIMPI .EQ. 1801) THEN WRITE(IOIMP,*) 'NIDNC= ',NIDNCN WRITE(IOIMP,*) 'MAXBLO= ',MAXBLO WRITE(IOIMP,*) 'NB DE BLOCS ',NSGD END IF C C BOUCLE SUR LES BLOCS C LDEC=0 DO 100 K=1,NSGA ANBN=KAB(K) SEGACT ANBN LANBN=AB(/2) C C--------BOUCLE SUR LES ELEMENTS------------------------------ C DO 90 IN=1,INS NB=ITRAV(IN) NS=IDEN(IN) NRG=NREFE(7,NS)-1 * DO 80 J=1,28 KEVOLL=IEVOLL((NB-1)*28+J) SEGACT KEVOLL MLREEL=IPROGX SEGACT MLREEL DIF=ABS(1.D0-DT/DELTAT) SEGDES MLREEL MLREEL=IPROGY SEGACT MLREEL IF (DIF.LT.EPS) THEN DO 60 L=1,LANBN 60 CONTINUE ELSE DO 70 L=1,LANBN T=DELTAT*DBLE(L+LDEC) N=INT(T/DT) N1=N+1 N2=N+2 70 CONTINUE END IF SEGDES MLREEL SEGDES KEVOLL 80 CONTINUE * IF(IIMPI.EQ.1801)THEN WRITE(IOIMP,*) ' STRUCTURE ',NS WRITE(IOIMP,1000) K 1000 FORMAT(1X,//I5,'IEME BLOC DES TERMES DES MATRICES ANBN'/) DO 120 J=1,28 WRITE(IOIMP,1001) (J,AB(NRG+J,LL2),LL2=1,LANBN) 1001 FORMAT(1X,5(I5,1X,1PE12.5)) 120 CONTINUE ENDIF 90 CONTINUE SEGDES ANBN LDEC=LDEC+LANBN 100 CONTINUE C C BOUCLE SUR LES ELEMENTS POUR DETERMINER CEUX QUI SONT RIGIDES C DO 110 NS=1,NSTR NCA=LCAR*(NS-1) DLL=CARA(NCA+1) CTC=CARA(NCA+6) WRITE(IOIMP,*)' CTC= ',CTC DTL=DLL/CTC IF(DELTAT.GT.DTL) THEN NREFE(8,NS)=1 GOTO 110 ENDIF CTO=CARA(NCA+7) DTL=DLL/CTO IF(DELTAT.GT.DTL) THEN NREFE(8,NS)=1 GOTO 110 ENDIF RFY=CARA(NCA+4) DTL=DLL*DLL/(3.D0*CTC*RFY*XPI) IF(DELTAT.GT.DTL) THEN NREFE(8,NS)=1 GOTO 110 ENDIF RFZ=CARA(NCA+5) DTL=DLL*DLL/(3.D0*CTC*RFZ*XPI) IF(DELTAT.GT.DTL) THEN NREFE(8,NS)=1 GOTO 110 ENDIF 110 CONTINUE WRITE(IOIMP,*) ' NREFE ',(NREFE(8,NS),NS=1,NSTR) SEGSUP ITRAV SEGDES MEVOLL IF (IIMPI.EQ.1) THEN WRITE(IOIMP,*)' FIN DE ELFGR2 ' END IF RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales