mklblc
C MKLBLC SOURCE PV 06/04/16 21:16:53 5405 $ LILBLC, $ IMPR,IRET) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C NOM : MKLBLC C DESCRIPTION : Construction d'une liste indexée de correspondance : C matrice élémentaire B -> liste des matrices élémentaires C ayant un point de leurs maillages primaux en commun. C C C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : - C APPELE PAR : PROMAT C*********************************************************************** C ENTREES : LMPRIB, KRMPRI, LIPNLC, NELC C SORTIES : LILBLC C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 07/02/2000, version initiale C HISTORIQUE : v1, 07/02/2000, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC SMLENTI POINTEUR KRMPRI.MLENTI INTEGER JG POINTEUR KRELC.MLENTI * Includes persos * Segment LSTIND (liste séquentielle indexée) INTEGER NBM,NBTVAL SEGMENT LSTIND INTEGER IDX(NBM+1) INTEGER IVAL(NBTVAL) ENDSEGMENT *-INC SLSTIND POINTEUR LMPRIB.LSTIND POINTEUR LIPNLC.LSTIND POINTEUR LILBLC.LSTIND * INTEGER NELC INTEGER IMPR,IRET * INTEGER LDG,NELB INTEGER IDG,IELB,IELC,ILPOPB INTEGER IVPRIB,IVSTRT,IVSTOP INTEGER JVPNLC,JVSTRT,JVSTOP INTEGER IVLBLC,LAST,PREC * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans mklblc.eso' * Dimensionnement de LILBLC * Pour l'instant LILBLC.IDX(IELB+1)=nombre de matrices élémentaires de * IMATC reliées à la IELBème matrice élémentaire de IMATB SEGACT LMPRIB NELB=LMPRIB.IDX(/1)-1 SEGACT KRMPRI SEGACT LIPNLC JG=NELC SEGINI KRELC NBM=NELB NBTVAL=0 SEGINI LILBLC DO 1 IELB=1,NELB * Degré et fin de la liste chaînée LDG=0 LAST=-1 IVSTRT=LMPRIB.IDX(IELB) IVSTOP=LMPRIB.IDX(IELB+1)-1 DO 12 IVPRIB=IVSTRT,IVSTOP ILPOPB=KRMPRI.LECT(LMPRIB.IVAL(IVPRIB)) ** pv que faire si ilpopb=0 ????? if (ilpopb.eq.0) goto 12 JVSTRT=LIPNLC.IDX(ILPOPB) JVSTOP=LIPNLC.IDX(ILPOPB+1)-1 DO 122 JVPNLC=JVSTRT,JVSTOP IELC=LIPNLC.IVAL(JVPNLC) IF (KRELC.LECT(IELC).EQ.0) THEN LDG=LDG+1 KRELC.LECT(IELC)=LAST LAST=IELC ENDIF 122 CONTINUE 12 CONTINUE LILBLC.IDX(IELB+1)=LDG * Remise à zéro de la liste chaînée DO 14 IDG=1,LDG PREC=KRELC.LECT(LAST) KRELC.LECT(LAST)=0 LAST=PREC 14 CONTINUE 1 CONTINUE * LILBLC.IDX est transformé en la liste d'indexation sur * LILBLC.IVAL LILBLC.IDX(1)=1 DO 3 IELB=1,NELB LILBLC.IDX(IELB+1)=LILBLC.IDX(IELB+1)+LILBLC.IDX(IELB) 3 CONTINUE NBM=NELB NBTVAL=LILBLC.IDX(NELB+1)-1 SEGADJ,LILBLC * Remplissage de LILBLC IVLBLC=0 DO 5 IELB=1,NELB * Degré et fin de la liste chaînée LDG=0 LAST=-1 IVSTRT=LMPRIB.IDX(IELB) IVSTOP=LMPRIB.IDX(IELB+1)-1 DO 52 IVPRIB=IVSTRT,IVSTOP ILPOPB=KRMPRI.LECT(LMPRIB.IVAL(IVPRIB)) ** pv que faire si ilpopb=0 ????? if (ilpopb.eq.0) goto 52 JVSTRT=LIPNLC.IDX(ILPOPB) JVSTOP=LIPNLC.IDX(ILPOPB+1)-1 DO 522 JVPNLC=JVSTRT,JVSTOP IELC=LIPNLC.IVAL(JVPNLC) IF (KRELC.LECT(IELC).EQ.0) THEN LDG=LDG+1 KRELC.LECT(IELC)=LAST LAST=IELC ENDIF 522 CONTINUE 52 CONTINUE * Remise à zéro de la liste chaînée et vidage dans LILBLC DO 54 IDG=1,LDG PREC=KRELC.LECT(LAST) IVLBLC=IVLBLC+1 LILBLC.IVAL(IVLBLC)=LAST KRELC.LECT(LAST)=0 LAST=PREC 54 CONTINUE 5 CONTINUE SEGDES LILBLC SEGSUP KRELC SEGDES LIPNLC SEGDES KRMPRI SEGDES LMPRIB * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine mklblc' RETURN * * End of subroutine MKLBLC * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales