Télécharger dual01.eso

Retour à la liste

Numérotation des lignes :

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

© Cast3M 2003 - Tous droits réservés.
Mentions légales