Download dual00.eso

Back to the list

   1 : C DUAL00    SOURCE    GOUNAND   12/07/23    21:15:00     7440           
   2 :            
   3 :       SUBROUTINE dual00(mrigid,ri1)
   4 : C a appeler dual  ulterieurement  
   5 : c====================================================================
   6 : c      
   7 : c     entrees
   8 : c           mrigid  rigidité   [C]  de dependance  rela depend  
   9 : c     sorties 
  10 : C           ri1   [C] Transpose  
  11 : c      
  12 : c====================================================================        
  13 :       IMPLICIT INTEGER(I-N)
  14 :       IMPLICIT REAL*8(A-H,O-Z)
  15 : 
  16 : -INC CCOPTIO
  17 : -INC CCGEOME
  18 : -INC CCHAMP
  19 : -INC SMRIGID
  20 : 
  21 :       character*4 NOMM
  22 :     
  23 :       segment snomip
  24 :         character*4 nomip(lnomip), nompi(lnomip)
  25 :       endsegment
  26 :       segment snomda
  27 :         character*4 nomda(lnomda), nompa(lnomda)
  28 :       endsegment
  29 :        
  30 : C on en profite  pour recenser les inconnues en question (primales)
  31 :       lnomip = 200
  32 :       lnomda = 200
  33 :       segini,snomip,snomda
  34 :       inomip = 0
  35 :       inomda = 0
  36 : 
  37 :       segact mrigid
  38 :       nrigel = IRIGEL(/2)
  39 : 
  40 :       DO 1501 I=1, NRIGEL
  41 :           DESCR=IRIGEL(3,I)
  42 :           SEGACT DESCR
  43 : C   attention ces matrices ne sont pas carrees  il faut 2 boucles
  44 : C          pour identifier les inconnues 
  45 :           DO 1402 J=1,LISINC(/2)
  46 :             NOMM = LISINC(J)
  47 :             DO 1406 K=1,inomip
  48 :               IF (NOMM.EQ.nomip(K)) GO TO 1405
  49 :  1406       CONTINUE
  50 :             IF (inomip.EQ.lnomip) THEN
  51 :               lnomip = lnomip + 200
  52 :               segadj,snomip
  53 :             ENDIF
  54 :             inomip = inomip + 1
  55 :             nomip(inomip)=NOMM
  56 :  1405       CONTINUE
  57 :  1402     CONTINUE
  58 : C
  59 :           DO 1502 J=1,LISDUA(/2)
  60 :             NOMM = LISDUA(J)
  61 :             DO 1506 K=1,inomda
  62 :               IF (NOMM.EQ.nomda(K)) GO TO 1505
  63 :  1506       CONTINUE
  64 :             IF (inomda.EQ.lnomda) THEN
  65 :               lnomda = lnomda + 200
  66 :               segadj,snomda
  67 :             ENDIF
  68 :             inomda = inomda + 1
  69 :             nomda(inomda)=NOMM
  70 :  1505       CONTINUE
  71 :  1502     CONTINUE 
  72 : 
  73 :  1501 CONTINUE 
  74 : 
  75 : C      tableau des correspondances
  76 : 
  77 :           do 325 il=1,inomip
  78 :           NOMM =nomip(IL)
  79 :           do 326 in = 1,lnomdd
  80 :           if (NOMM.EQ.NOMDD(in)) then 
  81 :           NOMPI(il) =NOMDU(in)
  82 :           goto 327
  83 :           endif   
  84 : 326       continue
  85 : C          nompi(il) = '    '
  86 :           nompi(il) = NOMM
  87 : 327       continue
  88 : 325       continue
  89 :  
  90 :           do 425 il=1,inomda
  91 :           NOMM =nomda(IL)
  92 :           do 426 in = 1,lnomdd
  93 :           if (NOMM.EQ.NOMDD(in)) then 
  94 :           NOMPA(il) =NOMDU(in)
  95 :           goto 427
  96 :           endif   
  97 : 426       continue
  98 : C          nompa(il) = '    '
  99 :           nompa(il) = NOMM
 100 : 427       continue
 101 : 425       continue
 102 : 
 103 : C       write(ioimp,*) 'primales',(nomip(j),j=1,inomip),'sortie ' ,
 104 : C     &   ( nompi(j),j=1,inomip)
 105 : C       write(ioimp,*) 'duales  ',(nomda(j),j=1,inomda),'sortie ' ,
 106 : C     &   ( nompa(j),j=1,inomda)
 107 : 
 108 : C on stoke le ddel en question en position ad-hoc 
 109 : 
 110 :        segini , ri1=mrigid 
 111 :     
 112 :        do 1700 ima=1,NRIGEL
 113 :    
 114 :        descr = irigel(3,ima)
 115 :        
 116 :        nligrp = lisdua(/2)
 117 :        nligrd = lisinc(/2)               
 118 :        segini,des1
 119 :        ri1.irigel(3,ima) = des1
 120 : C        
 121 :         do 1634 ik=1,nligrd
 122 :         nomm = lisinc(ik)
 123 :         do 1635 ij=1,inomip
 124 :         if(NOMM.eq.NOMIP(ij)) des1.lisdua(ik) = nompi(ij)
 125 : 1635    continue
 126 :         des1.noeled(ik)=noelep(ik)
 127 : 1634    continue
 128 : 
 129 :         do 1644 ik=1,nligrp
 130 :         nomm = lisdua(ik)
 131 :         do 1645 ij=1,inomda
 132 :         if(NOMM.eq.NOMDA(ij)) des1.lisinc(ik) = nompa(ij)
 133 : 1645    continue
 134 :         des1.noelep(ik)=noeled(ik)
 135 : 1644    continue
 136 : 
 137 :         segdes,descr,des1
 138 : 
 139 : 1700   continue
 140 : 
 141 :       segdes ri1,mrigid 
 142 : 
 143 :       segsup,snomip,snomda
 144 : 
 145 :       RETURN
 146 :       END
 147 : 
 148 :  
 149 :  

© Cast3M 2003 - All rights reserved.
Disclaimer