prolis
C PROLIS SOURCE GOUNAND 06/04/26 21:16:21 5414 $ LIPNMC, KRIPRI, $ LMDUAB,LMPRIB,LMPRIC,LMDUAC, $ LILBLC,KRMPRI, $ LCHPOD,LMATRB,LMATRC, $ ICPCDB,ICDCDB,NIUNIQ, $ LMPCDB,LMDCDB,NTOTPO, $ LMACDB, $ IMPR,IRET) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C*********************************************************************** C NOM : PROLIS C DESCRIPTION : Produit des matrices stockées sous forme de listes C indexées (1 : Initialisation des tableaux de travail et C boucle sur les noms d'inconnues) 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 : INLMAP, RSETEE, PROLI2 C APPELE PAR : PROMAT C*********************************************************************** C ENTREES : tout sauf LMACDB C SORTIES : LMACDB C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 10/02/2000, version initiale C HISTORIQUE : v1, 10/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 JCPRIB.MLENTI POINTEUR JCDUAB.MLENTI POINTEUR JCPRIC.MLENTI POINTEUR JCDUAC.MLENTI POINTEUR KRIPRI.MLENTI POINTEUR ICPCDB.MLENTI INTEGER JG POINTEUR KRMPRI.MLENTI POINTEUR KIPCDB.MLENTI POINTEUR KIDCDB.MLENTI POINTEUR KMPRBP.MLENTI POINTEUR KMDCDB.MLENTI * Includes persos * Segment LSTIND (liste séquentielle indexée) SEGMENT LSTIND INTEGER IDX(NBM+1) INTEGER IVAL(NBTVAL) ENDSEGMENT POINTEUR LIPNMC.LSTIND POINTEUR ICDCDB.LSTIND POINTEUR LMDUAB.LSTIND POINTEUR LMPRIB.LSTIND POINTEUR LMPRIC.LSTIND POINTEUR LMDUAC.LSTIND POINTEUR LILBLC.LSTIND POINTEUR LMPCDB.LSTIND POINTEUR LMDCDB.LSTIND SEGMENT LSRIND INTEGER IDXX(NBM+1) REAL*8 XVAL(NBTVAL) ENDSEGMENT SEGMENT LLI POINTEUR LISLI(NBME).LSRIND ENDSEGMENT POINTEUR LMATRB.LLI POINTEUR LMATRC.LLI POINTEUR LMACDB.LLI POINTEUR SLMATB.LSRIND POINTEUR SLMATC.LSRIND POINTEUR SLMCDB.LSRIND -INC SMLREEL SEGMENT LLR POINTEUR LISLR(NBME).MLREEL ENDSEGMENT POINTEUR LCHPOD.LLR POINTEUR SLCHPD.MLREEL * INTEGER IMPR,IRET * INTEGER NIUNIQ INTEGER NTOTPO INTEGER NBMEB,NMPCDB,NELCDB INTEGER IBMEB,IMPCDB,IBMEC,IBMCDB,INMLPB,NUIDP INTEGER IVDCDB,IVSTRT,IVSTOP INTEGER JVBMEC,JVSTRT,JVSTOP * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans prolis.eso' * Initialisation de LMACDB $ LMACDB, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Bouclage sur les inconnues * * Repérage dans ICPCDB JG=NIUNIQ SEGINI KIPCDB SEGACT ICPCDB NMPCDB=ICPCDB.LECT(/1) $ KIPCDB.LECT,NIUNIQ, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGDES ICPCDB * Repérage dans ICDCDB JG=NIUNIQ SEGINI KIDCDB SEGACT ICDCDB * Repérage dans MAIPRI JG=NTOTPO SEGINI KMPRBP * Repérage dans LMDCDB JG=NTOTPO SEGINI KMDCDB SEGACT JCDUAB SEGACT JCPRIB NBMEB=JCPRIB.LECT(/1) SEGACT JCPRIC SEGACT JCDUAC SEGACT KRIPRI SEGACT LIPNMC SEGACT LMDUAB SEGACT LMPRIB SEGACT LMPRIC SEGACT LMDUAC SEGACT KRMPRI SEGACT LILBLC SEGACT LMPCDB NELCDB=LMPCDB.IDX(/1)-1 SEGACT LMDCDB SEGACT LMATRB SEGACT LMATRC IF (LCHPOD.NE.0) THEN SEGACT LCHPOD ENDIF SEGACT LMACDB * * Boucle sur les inconnues de B * DO 1 IBMEB=1,NBMEB IMPCDB=KIPCDB.LECT(JCDUAB.LECT(IBMEB)) IVSTRT=ICDCDB.IDX(IMPCDB) IVSTOP=ICDCDB.IDX(IMPCDB+1)-1 DO 12 IVDCDB=IVSTRT,IVSTOP NUIDP=ICDCDB.IVAL(IVDCDB) KIDCDB.LECT(NUIDP)=IVDCDB 12 CONTINUE INMLPB=KRIPRI.LECT(JCPRIB.LECT(IBMEB)) JVSTRT=LIPNMC.IDX(INMLPB) JVSTOP=LIPNMC.IDX(INMLPB+1)-1 * * Boucle sur les inconnues C associées à chaque inconnue B * DO 14 JVBMEC=JVSTRT,JVSTOP IBMEC=LIPNMC.IVAL(JVBMEC) IBMCDB=KIDCDB.LECT(JCDUAC.LECT(IBMEC)) SLMATB=LMATRB.LISLI(IBMEB) SLMATC=LMATRC.LISLI(IBMEC) IF (LCHPOD.NE.0) THEN SLCHPD=LCHPOD.LISLR(INMLPB) SEGACT SLCHPD ELSE SLCHPD=0 ENDIF SLMCDB=LMACDB.LISLI(IBMCDB) SEGACT SLMATB SEGACT SLMATC SEGACT SLMCDB*MOD $ LILBLC,KRMPRI,KMDCDB,KMPRBP, $ SLCHPD,SLMATB,SLMATC, $ LMPCDB,LMDCDB,NELCDB, $ SLMCDB, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGDES SLMCDB IF (SLCHPD.NE.0) THEN SEGDES SLCHPD ENDIF SEGDES SLMATC SEGDES SLMATB 14 CONTINUE DO 16 IVDCDB=IVSTRT,IVSTOP NUIDP=ICDCDB.IVAL(IVDCDB) KIDCDB.LECT(NUIDP)=0 16 CONTINUE 1 CONTINUE SEGDES LMACDB IF (LCHPOD.NE.0) THEN SEGDES LCHPOD ENDIF SEGDES LMATRC SEGDES LMATRB SEGDES LMDCDB SEGDES LMPCDB SEGDES LILBLC SEGDES KRMPRI SEGDES LMDUAC SEGDES LMPRIC SEGDES LMPRIB SEGDES LMDUAB SEGDES LIPNMC SEGDES KRIPRI SEGDES JCDUAC SEGDES JCPRIC SEGDES JCPRIB SEGDES JCDUAB SEGSUP KMDCDB SEGSUP KMPRBP SEGDES ICDCDB SEGSUP KIDCDB SEGSUP KIPCDB * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine prolis' RETURN * * End of subroutine PROLIS * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales