Download dual01.eso

Back to the list

   1 : C DUAL01    SOURCE    GOUNAND   11/06/14    21:15:14     7005           
   2 :       SUBROUTINE dual01(mrigid,ri1)
   3 : C a appeler dual  ulterieurement
   4 : c====================================================================
   5 : c     
   6 : c     entrees
   7 : c           mrigid  rigidité   [C]  de dependance  rela depend
   8 : c     sorties
   9 : C           ri1   [C] Transpose non symétrique
  10 : C     La différence par rapport à dual00, c'est que la matrice à
  11 : C     transposer n'est pas nécessairement symétrique.
  12 : c     
  13 : c====================================================================
  14 :       IMPLICIT INTEGER(I-N)
  15 :       IMPLICIT REAL*8(A-H,O-Z)
  16 :       CHARACTER*4 CMOT
  17 : *     
  18 : -INC SMRIGID
  19 : -INC SMELEME
  20 : -INC CCHAMP
  21 :       character*4 NOMM,NODUA 
  22 :       
  23 :       segment snomip
  24 :       character*4 nomip(0)
  25 :       endsegment
  26 :       segment snomda
  27 :       character*4 nomda(0)
  28 :       endsegment
  29 :       
  30 :       segment snomm
  31 :       character*4 nompi(nomip(/2)),nompa(nomda(/2))                    
  32 :       endsegment 
  33 : 
  34 :       SEGACT MRIGID      
  35 :       
  36 : C on en profite  pour recenser les inconnues en question (primales)
  37 : C  a voir
  38 :       segini snomip,snomda
  39 :       segact mrigid
  40 :       
  41 :       DO 1501 I=1,IRIGEL(/2)
  42 : *         MELEME=IRIGEL(1,I)
  43 : *         SEGACT MELEME
  44 :          DESCR=IRIGEL(3,I)
  45 :          SEGACT DESCR
  46 : C   attention ces matrices ne sont pas carrees  il faut 2 boucles
  47 : C          pour identifier les inconnues
  48 :          
  49 :          DO 1402 J=1,LISINC(/2)
  50 :             IF(nomip(/2).EQ.0) THEN
  51 :                nomip(**)=LISINC(J)
  52 :             ELSE
  53 :                DO 1406 K=1,nomip(/2)
  54 :                   IF(LISINC(J).EQ.nomip(K)) GO TO 1405
  55 :  1406          CONTINUE
  56 :                nomip(**)=LISINC(J)
  57 :  1405          CONTINUE
  58 :             ENDIF
  59 :  1402    CONTINUE
  60 : C     
  61 :          DO 1502 J=1,LISDUA(/2)
  62 :             IF(nomda(/2).EQ.0) THEN
  63 :                nomda(**)=LISDUA(J)
  64 :             ELSE
  65 :                DO 1506 K=1,nomda(/2)
  66 :                   IF(LISDUA(J).EQ.nomda(K)) GO TO 1505
  67 :  1506          CONTINUE
  68 :                nomda(**)=LISDUA(J)
  69 :  1505          CONTINUE
  70 :             ENDIF
  71 :  1502    CONTINUE 
  72 :          
  73 :  1501 CONTINUE 
  74 :       
  75 : C      tableau des correspondances
  76 : 
  77 :       segini snomm 
  78 :       
  79 :       do 325 il=1,nomip(/2)
  80 :          NOMM =nomip(IL)
  81 :          do 326 in = 1,lnomdd
  82 :             if (NOMM.EQ.NOMDD(in)) then 
  83 :                NOMPI(il) =NOMDU(in)
  84 :                goto 327
  85 :             endif   
  86 :  326     continue
  87 :          NOMPI(il)=NOMM
  88 :  327     continue
  89 :  325  continue
  90 :       
  91 :       do 425 il=1,nomda(/2)
  92 :          NOMM =nomda(IL)
  93 :          do 426 in = 1,lnomdd
  94 :             if (NOMM.EQ.NOMDU(in)) then 
  95 :                NOMPA(il) =NOMDD(in)
  96 :                goto 427
  97 :             endif   
  98 :  426     continue
  99 :          NOMPA(il)=NOMM
 100 :  427     continue
 101 :  425  continue
 102 : 
 103 :       
 104 : *      write(6,*) 'primales',(nomip(j),j=1,nomip(/2)),'sortie ' ,
 105 : *     &     ( nompi(j),j=1,nompi(/2))
 106 : *      
 107 : *      
 108 : *      write(6,*) 'duales  ',(nomda(j),j=1,nomda(/2)),'sortie ' ,
 109 : *     &     ( nompa(j),j=1,nompa(/2))
 110 : 
 111 : C on stoke le ddel en question en position ad-hoc
 112 : 
 113 :       nrigel=coerig(/1)
 114 :       segini , ri1
 115 : *      segini , ri1=mrigid 
 116 :       
 117 :       do 1700 ima=1,IRIGEL(/2)
 118 :          ri1.mtymat=mtymat
 119 :          ri1.coerig(ima)=coerig(ima)
 120 :          do 1750 iri =1,irigel(/1)
 121 :             if(iri.eq.3.or.iri.eq.4) goto 1750
 122 :             ri1.irigel(iri,ima)= IRIGEL(iri,ima)
 123 :  1750    continue
 124 :          
 125 :          descr = irigel(3,ima)
 126 :          
 127 :          nligrp = lisdua(/2)
 128 :          nligrd = lisinc(/2)               
 129 :          segini des1
 130 :          ri1.irigel(3,ima) = des1
 131 : C     
 132 :          do 1634 ik=1,lisinc(/2)
 133 :             nomm = lisinc(ik)
 134 :             do 1635 ij=1,nomip(/2)
 135 :                if(NOMM.eq.NOMIP(ij)) des1.lisdua(ik) = nompi(ij)
 136 :  1635       continue
 137 :             des1.noeled(ik)=noelep(ik)
 138 :  1634    continue
 139 : 
 140 :          do 1644 ik=1,lisdua(/2)
 141 :             nomm = lisdua(ik)
 142 :             do 1645 ij=1,nomda(/2)
 143 :                if(NOMM.eq.NOMDA(ij)) des1.lisinc(ik) = nompa(ij)
 144 :  1645       continue
 145 :             des1.noelep(ik)=noeled(ik)
 146 :  1644    continue
 147 :          segdes des1,descr
 148 : 
 149 :          if (irigel(7,ima).ne.0.or.nligrp.ne.nligrd) then
 150 :             XMATRI = IRIGEL(4,ima)
 151 :             segact XMATRI
 152 :             NELRIG=XMATRI.RE(/3)
 153 :             SEGINI xmatr1
 154 :             do i=1,nelrig
 155 :                do j=1,nligrp
 156 :                   do k=1,nligrd
 157 :                      xmatr1.re(k,j,i)=re(j,k,i)
 158 :                   enddo
 159 :                enddo
 160 :             enddo
 161 :             segdes xmatr1,xmatri
 162 :             ri1.irigel(4,ima)=xmatr1
 163 :          else 
 164 :             ri1.irigel(4,ima)=irigel(4,ima)
 165 :          endif
 166 :  1700 continue
 167 : 
 168 :       segdes ri1,mrigid 
 169 :       
 170 :       segsup ,snomm,snomip,snomda
 171 :       
 172 :       RETURN
 173 :       END
 174 : 
 175 :  
 176 :  
 177 :  
 178 :  
 179 :  
 180 :  
 181 :  
 182 :  
 183 :  
 184 :  
 185 :  
 186 :  
 187 :  
 188 :  
 189 :  

© Cast3M 2003 - All rights reserved.
Disclaimer