Télécharger extr13.eso

Retour à la liste

Numérotation des lignes :

extr13
  1. C EXTR13 SOURCE CB215821 25/04/23 21:15:21 12247
  2. SUBROUTINE EXTR13(IRIG,IRET)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. ************************************************************************
  6. *
  7. * E X T R 1 3
  8. * -----------
  9. *
  10. * FONCTION:
  11. * ---------
  12. *
  13. * Sous-programme pour extraire d'une rigidit{ :
  14. * - les matrices élémentaires symétriques si IRET = 3
  15. * - les matrices élémentaires antisymétriques si IRET = 4
  16. *
  17. * MODULES UTILISES:
  18. * -----------------
  19. *
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC SMRIGID
  24. -INC SMCOORD
  25. *
  26. * PARAMETRES: (e)=ENTREE (s)=SORTIE (+ = CONTENU DANS UN COMMUN)
  27. * -----------
  28. *
  29. * IRIG (e) pointeur sur l'objet RIGIDITE.
  30. * IRET (e) = 3 , matrice symétrique.
  31. * = 4 , matrice antisymétrique.
  32. *
  33. * AUTEUR, DATE DE CREATION:
  34. * -------------------------
  35. *
  36. * Lionel VIVAN juin 1991
  37. *
  38. * LANGAGE:
  39. * --------
  40. *
  41. * ESOPE + FORTRAN77
  42. *
  43. ************************************************************************
  44. *
  45. RI1 = IRIG
  46. SEGACT RI1
  47. C ... NRIG1 = taille du tableau d'infos ...
  48. NRIG1 = RI1.IRIGEL(/1)
  49. C ... NRIGE1 = nombre de "sous-matrices" ...
  50. NRIGE1 = RI1.IRIGEL(/2)
  51. ISYM = 0
  52. IANT = 0
  53. IF (NRIG1.GE.7) THEN
  54. DO 10 IN = 1,NRIGE1
  55. IANTI = RI1.IRIGEL(7,IN)
  56. IF (IANTI.EQ.0) ISYM = ISYM + 1
  57. IF (IANTI.EQ.1) IANT = IANT + 1
  58. IF (IANTI.EQ.2) THEN
  59. ISYM = ISYM + 1
  60. IANT = IANT + 1
  61. ENDIF
  62. 10 CONTINUE
  63. ELSE
  64. ISYM = NRIGE1
  65. ENDIF
  66. *
  67. * On extrait les matrices ...
  68. *
  69. NRIGE = NRIG1
  70. IF(IRET.EQ.3) THEN
  71. NRIGEL = ISYM
  72. ELSE IF(IRET.EQ.4) THEN
  73. NRIGEL = IANT
  74. ENDIF
  75. SEGINI MRIGID
  76. IRIS = MRIGID
  77. MTYMAT = RI1.MTYMAT
  78. ICHOLE = 0
  79. IMGEO1 = 0
  80. IMGEO2 = 0
  81. IFORIG = RI1.IFORIG
  82. ISUPEQ = 0
  83. II = 0
  84. DO 20 IN = 1,NRIGE1
  85. IF(NRIG1.GE.7) THEN
  86. IANTI = RI1.IRIGEL(7,IN)
  87. ELSE
  88. IANTI = 0
  89. ENDIF
  90. C ... Si la matrice possède déjà la bonne symétrie,
  91. C on ne fait que recopier les pointeurs, sinon,
  92. C si la matrice est non-symétrique on va en
  93. C extraire ce qu'il faut ...
  94. IF (IANTI.EQ.2.OR.IANTI.EQ.IRET-3) THEN
  95. II = II + 1
  96. COERIG(II) = RI1.COERIG(IN)
  97. DO 22 IN2 = 1,NRIGE
  98. IRIGEL(IN2,II) = RI1.IRIGEL(IN2,IN)
  99. 22 CONTINUE
  100. C ... si la matrice est non-symétrique, il faut
  101. C surcharger le flag de symétrie (N° 7) et
  102. C le pointeur sur IMATRI (N° 4) ...
  103. IF(IANTI.EQ.2) THEN
  104. IRIGEL(7,II) = IRET-3
  105. xMATR1 = RI1.IRIGEL(4,IN)
  106. SEGACT,xMATR1
  107. NELRIG = xmatr1.re(/3)
  108. nligrp = xmatr1.re(/2)
  109. nligrd= xmatr1.re(/1)
  110. SEGINI xMATRI
  111. xmatri.symre=irigel(7,ii)
  112. IRIGEL(4,II) = xMATRI
  113. DO 25 INUMEL = 1,NELRIG
  114. * XMATR1 = IMATR1.IMATTT(INUMEL)
  115. * SEGACT XMATR1
  116. * NLIGRD = XMATR1.RE(/1)
  117. * NLIGRP = XMATR1.RE(/2)
  118. IF(NLIGRD.NE.NLIGRP) THEN
  119. write(*,*) 'Matrice non carrée !!!'
  120. return
  121. ENDIF
  122. * SEGINI XMATRI
  123. * IMATTT(INUMEL) = XMATRI
  124. DO 26 ILIG=1,NLIGRP
  125. DO 27 ICOL=1,NLIGRD
  126. IF(IRET.EQ.3) RE(ICOL,ILIG,inumel) =
  127. & (XMATR1.RE(ICOL,ILIG,inumel)+XMATR1.RE(ILIG,ICOL,inumel))/2.d0
  128. IF(IRET.EQ.4) RE(ICOL,ILIG,inumel) =
  129. & (XMATR1.RE(ICOL,ILIG,inumel)-XMATR1.RE(ILIG,ICOL,inumel))/2.D0
  130. 27 CONTINUE
  131. 26 CONTINUE
  132. * SEGDES XMATRI
  133. * SEGDES XMATR1
  134. 25 CONTINUE
  135. SEGDES xMATR1,xmatri
  136. ENDIF
  137. ENDIF
  138. 20 CONTINUE
  139.  
  140. SEGDES MRIGID
  141. SEGDES RI1
  142. CALL ECROBJ('RIGIDITE',IRIS)
  143. *
  144. RETURN
  145. END
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  

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