Télécharger dual01.eso

Retour à la liste

Numérotation des lignes :

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

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