mldcdb
C MLDCDB SOURCE CHAT 05/01/13 01:46:38 5004 $ LMDCDB, $ IMPR,IRET) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C NOM : MLDCDB C DESCRIPTION : On construit la liste des éléments duaux de CD-1Bt. 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 : LILBLC, LMDUAC, NTOTPO C SORTIES : LMDCDB C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 09/02/2000, version initiale C HISTORIQUE : v1, 09/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 INTEGER JG POINTEUR KPDCDB.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 LILBLC.LSTIND POINTEUR LMDUAC.LSTIND POINTEUR LMDCDB.LSTIND * INTEGER NTOTPO INTEGER IMPR,IRET * INTEGER LDG,NEL INTEGER IDG,IEL,IVDCDB INTEGER IVLBLC,IVSTRT,IVSTOP INTEGER JVDUAC,JVSTRT,JVSTOP INTEGER LAST,PREC INTEGER NUELC,NUPODC * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans mldcdb.eso' * Dimensionnement de LMDCDB * Pour l'instant LMDCDB.IDX(IEL+1)=nombre de points du IELeme élément de * LMDCDB SEGACT LILBLC NEL=LILBLC.IDX(/1)-1 NBM=NEL NBTVAL=0 SEGINI LMDCDB SEGACT LMDUAC JG=NTOTPO SEGINI KPDCDB DO 1 IEL=1,NEL * Degré et fin de la liste chaînée LDG=0 LAST=-1 IVSTRT=LILBLC.IDX(IEL) IVSTOP=LILBLC.IDX(IEL+1)-1 DO 12 IVLBLC=IVSTRT,IVSTOP NUELC=LILBLC.IVAL(IVLBLC) JVSTRT=LMDUAC.IDX(NUELC) JVSTOP=LMDUAC.IDX(NUELC+1)-1 DO 122 JVDUAC=JVSTRT,JVSTOP NUPODC=LMDUAC.IVAL(JVDUAC) IF (KPDCDB.LECT(NUPODC).EQ.0) THEN LDG=LDG+1 KPDCDB.LECT(NUPODC)=LAST LAST=NUPODC ENDIF 122 CONTINUE 12 CONTINUE LMDCDB.IDX(IEL+1)=LDG * Remise à zéro de la liste chaînée DO 14 IDG=1,LDG PREC=KPDCDB.LECT(LAST) KPDCDB.LECT(LAST)=0 LAST=PREC 14 CONTINUE 1 CONTINUE * LMDCDB.IDX est transformé en la liste d'indexation sur * LMDCDB.IVAL LMDCDB.IDX(1)=1 DO 3 IEL=1,NEL LMDCDB.IDX(IEL+1)=LMDCDB.IDX(IEL+1)+LMDCDB.IDX(IEL) 3 CONTINUE NBM=NEL NBTVAL=LMDCDB.IDX(NEL+1)-1 SEGADJ,LMDCDB * Remplissage de LMDCDB IVDCDB=0 DO 5 IEL=1,NEL * Degré et fin de la liste chaînée LDG=0 LAST=-1 IVSTRT=LILBLC.IDX(IEL) IVSTOP=LILBLC.IDX(IEL+1)-1 DO 52 IVLBLC=IVSTRT,IVSTOP NUELC=LILBLC.IVAL(IVLBLC) JVSTRT=LMDUAC.IDX(NUELC) JVSTOP=LMDUAC.IDX(NUELC+1)-1 DO 522 JVDUAC=JVSTRT,JVSTOP NUPODC=LMDUAC.IVAL(JVDUAC) IF (KPDCDB.LECT(NUPODC).EQ.0) THEN LDG=LDG+1 KPDCDB.LECT(NUPODC)=LAST LAST=NUPODC ENDIF 522 CONTINUE 52 CONTINUE * Remise à zéro de la liste chaînée et vidage dans LMDCDB DO 54 IDG=1,LDG PREC=KPDCDB.LECT(LAST) IVDCDB=IVDCDB+1 LMDCDB.IVAL(IVDCDB)=LAST KPDCDB.LECT(LAST)=0 LAST=PREC 54 CONTINUE 5 CONTINUE SEGSUP KPDCDB SEGDES LMDUAC SEGDES LMDCDB SEGDES LILBLC * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine mldcdb' RETURN * * End of subroutine MLDCDB * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales