1 : C EXMALI SOURCE MAGN 09/07/30 21:16:57 6458 2 : SUBROUTINE EXMALI(IMAT,LNBME,LELEM, 3 : $ LMATR, 4 : $ IMPR,IRET) 5 : IMPLICIT INTEGER(I-N) 6 : IMPLICIT REAL*8 (A-H,O-Z) 7 : C*********************************************************************** 8 : C NOM : EXMALI 9 : C DESCRIPTION : Matrice + liste de noms de composantes + liste de numéro 10 : C d'élément => extraction et stockage dans un tableau de 11 : C listes indexées. 12 : C 13 : C 14 : C LANGAGE : ESOPE 15 : C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) 16 : C mél : gounand@semt2.smts.cea.fr 17 : C*********************************************************************** 18 : C APPELES : ACTIMA, DESIMA, INIRPM, RPELEM 19 : C APPELE PAR : PROMAT 20 : C*********************************************************************** 21 : C ENTREES : IMAT, LNBME, LELEM 22 : C SORTIES : LMATR 23 : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé 24 : C*********************************************************************** 25 : C VERSION : v1, 08/02/2000, version initiale 26 : C HISTORIQUE : v1, 08/02/2000, création 27 : C HISTORIQUE : 28 : C HISTORIQUE : 29 : C*********************************************************************** 30 : C Prière de PRENDRE LE TEMPS de compléter les commentaires 31 : C en cas de modification de ce sous-programme afin de faciliter 32 : C la maintenance ! 33 : C*********************************************************************** 34 : -INC CCOPTIO 35 : -INC SMLENTI 36 : POINTEUR LNBME.MLENTI 37 : POINTEUR LELEM.MLENTI 38 : POINTEUR RPMAT.MLENTI 39 : -INC SMMATRIK 40 : POINTEUR IMAT.IMATRI 41 : POINTEUR SIMAT.IZAFM 42 : * Includes persos 43 : * Segment LSRIND (liste séquentielle indexée) 44 : SEGMENT LSRIND 45 : INTEGER IDXX(NBM+1) 46 : REAL*8 XVAL(NBTVAL) 47 : ENDSEGMENT 48 : INTEGER NBM,NBTVAL 49 : POINTEUR SLMAT1.LSRIND 50 : POINTEUR SLMATR.LSRIND 51 : SEGMENT LLI 52 : POINTEUR LISLI(NBME).LSRIND 53 : ENDSEGMENT 54 : INTEGER NBME 55 : POINTEUR LMATR.LLI 56 : * 57 : INTEGER IMPR,IRET 58 : * 59 : INTEGER NELEM,NNBME,NPP,NPD 60 : INTEGER IELEM,INBME,IPP,IPD,IBME 61 : INTEGER IVMATR,NUELEM,NOSOMA,NUELMA 62 : INTEGER NPPD 63 : * 64 : * Executable statements 65 : * 66 : IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans exmali.eso' 66 : CALL ACTIMA(IMAT) 66 : CALL INIRPM(IMAT, 67 : $ RPMAT, 68 : $ IMPR,IRET) 69 : IF (IRET.NE.0) GOTO 9999 70 : * Dimensionnment de LMATR 71 : SEGACT LNBME 72 : NNBME=LNBME.LECT(/1) 73 : NBME=NNBME 74 : SEGINI LMATR 75 : * Dimensionnement des SLMATR stocké dans SLMAT1 76 : SEGACT RPMAT 77 : SEGACT LELEM 78 : NELEM=LELEM.LECT(/1) 79 : NBM=NELEM 80 : NBTVAL=0 81 : SEGINI SLMAT1 82 : DO 1 IELEM=1,NELEM 83 : NUELEM=LELEM.LECT(IELEM) 83 : CALL RPELEM(NUELEM,RPMAT, 84 : $ NOSOMA,NUELMA, 85 : $ IMPR,IRET) 86 : IF (IRET.NE.0) GOTO 9999 87 : NOSOMA=MAX(1,NOSOMA) 88 : SIMAT=IMAT.LIZAFM(NOSOMA,1) 89 : NPP=SIMAT.AM(/2) 90 : NPD=SIMAT.AM(/3) 91 : NPPD=NPP*NPD 92 : SLMAT1.IDXX(IELEM+1)=NPPD 93 : 1 CONTINUE 94 : SLMAT1.IDXX(1)=1 95 : DO 3 IELEM=1,NELEM 96 : SLMAT1.IDXX(IELEM+1)=SLMAT1.IDXX(IELEM+1)+SLMAT1.IDXX(IELEM) 97 : 3 CONTINUE 98 : * Remplissage des SLMATR 99 : DO 5 INBME=1,NNBME 100 : IBME=LNBME.LECT(INBME) 101 : NBM=NELEM 102 : NBTVAL=SLMAT1.IDXX(NELEM+1)-1 103 : SEGINI SLMATR 104 : SLMATR.IDXX(1)=1 105 : IVMATR=0 106 : DO 52 IELEM=1,NELEM 107 : NUELEM=LELEM.LECT(IELEM) 107 : CALL RPELEM(NUELEM,RPMAT, 108 : $ NOSOMA,NUELMA, 109 : $ IMPR,IRET) 110 : IF (IRET.NE.0) GOTO 9999 111 : NOSOMA=MAX(1,NOSOMA) 112 : SIMAT=IMAT.LIZAFM(NOSOMA,IBME) 113 : NPP=SIMAT.AM(/2) 114 : NPD=SIMAT.AM(/3) 115 : DO 522 IPD=1,NPD 116 : DO 5222 IPP=1,NPP 117 : IVMATR=IVMATR+1 118 : SLMATR.XVAL(IVMATR)=SIMAT.AM(NUELMA,IPP,IPD) 119 : 5222 CONTINUE 120 : 522 CONTINUE 121 : SLMATR.IDXX(IELEM+1)=SLMAT1.IDXX(IELEM+1) 122 : 52 CONTINUE 123 : SEGDES SLMATR 124 : * 125 : * Bug ! 126 : * 127 : * LMATR.LISLI(IBME)=SLMATR 128 : LMATR.LISLI(INBME)=SLMATR 129 : 5 CONTINUE 130 : SEGSUP SLMAT1 131 : SEGDES LELEM 132 : SEGSUP RPMAT 133 : SEGDES LMATR 134 : SEGDES LNBME 134 : CALL DESIMA(IMAT) 135 : * 136 : * Normal termination 137 : * 138 : IRET=0 139 : RETURN 140 : * 141 : * Format handling 142 : * 143 : * 144 : * Error handling 145 : * 146 : 9999 CONTINUE 147 : IRET=1 148 : WRITE(IOIMP,*) 'An error was detected in subroutine exmali' 149 : RETURN 150 : * 151 : * End of subroutine EXMALI 152 : * 153 : END 154 : 155 : 156 : 157 : 158 :
© Cast3M 2003 - All rights reserved.
Disclaimer