Download exmali.eso

Back to the list

   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