Télécharger triaks.eso

Retour à la liste

Numérotation des lignes :

triaks
  1. C TRIAKS SOURCE FANDEUR 22/05/02 21:15:31 11359
  2. SUBROUTINE TRIAKS(IZL)
  3. C************************************************************************
  4. C
  5. C TRIANGULATION D'UNE MATRICE SYMETRIQUE LIGNE A LIGNE
  6. C
  7. C POINTEUR : EN ENTREE IZL CONTIENT LA MATRICE TRIANGULEE
  8. C
  9. C SUR LES CONSEILS DE PV, LORSQUE L'ON CALCULE LIJ*LKJ*DJ POUR
  10. C J VARIANT DE JMIN A J-1, ON UTILISE ZKJ=LKJ*DJ QUE L'ON DIVISE
  11. C ENSUITE PAR DJ POUR RATTRAPER LKJ. ON REMPLACE L'APPEL A SDT3
  12. C PAR UN APPEL A DDOT ET ON ECONOMISE 1 OPERATION SUR 3.
  13. C
  14. C ON POURRAIT AMELIORER L'ALGORITHME EN CODANT PAR BLOCS. CETTE
  15. C PARTIE N'EST PAS CRUCIALE CAR ELLE N'EST EFFECTUEE QU'UNE SEULE
  16. C FOIS LORS D'UN CALCUL COMPLET.
  17. C
  18. C************************************************************************
  19. IMPLICIT INTEGER(I-N)
  20. IMPLICIT REAL*8 (A-H,O-Z)
  21.  
  22. REAL*8 SDT3,SOM
  23. EXTERNAL SDT3
  24. REAL*8 DDOT
  25. EXTERNAL DDOT
  26.  
  27. -INC CCREEL
  28. *-
  29. C-INC SMMATRAKANC
  30. C*************************************************************************
  31. C
  32. C REPERAGE ET STOKAGE DES MATRICES ELEMENTAIRES puis assemblees
  33. C
  34.  
  35. * LGEOC SPG de la pression et/ou des multiplicateurs de Lagrange
  36. * (points CENTRE ) pour chaque operateur de contrainte
  37. * KGEOC SPG pour la totalite des points CENTRE.
  38. * KGEOS SPG pour la totalite des points SOMMET (Diagonale vitesse)
  39. * KLEMC Connectivites de l'ensemble des contraintes
  40. * LIZAFM(NBSOUS) contient les pointeurs IZAFM des sous-zones
  41.  
  42. SEGMENT MATRAK
  43. INTEGER LGEOC(NBOP),IDEBS(NBOP),IFINS(NBOP)
  44. INTEGER LIZAFM(NBSOUS)
  45. INTEGER IKAM0 (NBSOUS)
  46. INTEGER IMEM (NBELC)
  47. INTEGER KLEMC,KGEOS,KGEOC,KDIAG,KCAC,KIZCL,KIZGC
  48. ENDSEGMENT
  49.  
  50. SEGMENT IZAFM
  51. REAL*8 AM(NNELP,NP,IESP),RPGI(NELAX)
  52. ENDSEGMENT
  53.  
  54. POINTEUR IPMJ.IZAFM,IPMK.IZAFM
  55.  
  56. C*******************************************************************
  57. POINTEUR IBLKK.IDBLK,IBLKI.IDBLK
  58.  
  59. SEGMENT/IZAK/(AK(1)*D)
  60. SEGMENT/IZAI/(AI(1)*D)
  61. SEGMENT/IZD/(D(1)*D)
  62. C
  63. C
  64. GGIS=XPETIT
  65. SIG=XGRAND
  66.  
  67. SEGACT IZL
  68. IDMAT=KZA1
  69. SEGACT IDMAT
  70. NBLK=IDESCR(/1)
  71. C
  72. C CALCUL DE L(I,J) A LA LIGNE J
  73. C LA MATRICE EST SYMETRIQUE
  74.  
  75. N=KZA(/1)
  76. IZD=IDIAG
  77. SEGACT IZD*MOD
  78. IF(N.NE.D(/1))CALL ARRET(0)
  79. C
  80. DO 100 IBLK=1,NBLK
  81. C NUMÉRO DES LIGNES DE DÉBUT ET FIN DE BLOC KJD,KJF
  82. KJD=NLDBLK(IBLK)
  83. KJF=NLDBLK(IBLK+1)-1
  84. C ACTIVATION DE LA PORTION DE MATRICE
  85. IBLKK=IDESCR(IBLK)
  86. SEGACT IBLKK
  87. IZAK=IBLKK.IMAT
  88. SEGACT IZAK*MOD
  89. DO 1 K=KJD,KJF
  90. KLL=K-1
  91. C LAK=LONGUEUR DE LA LIGNE K
  92. LAK=IBLKK.IDEBLK(K-KJD+2)-IBLKK.IDEBLK(K-KJD+1)
  93. C DÉCALAGE DANS LE TABLEAU POUR ACCÉDER À LA LIGNE K
  94. C - NUMÉRO DE LA LIGNE K DANS LE BLOC IBLKK=K-KJD+1
  95. IDECK=IBLKK.IDEBLK(K-KJD+1)-1
  96. JK=K-LAK
  97. L2=1-JK
  98. IF(LAK.EQ.0)GO TO 1
  99.  
  100. DO 4 I=JK,KLL
  101. C A QUEL BLOC APPARTIENT I ?
  102. C ATTENTION AU CAS PARTICULIER OÙ I VAUT 1
  103. IF(I.EQ.1) THEN
  104. IZAI=IZD
  105. LAI=N
  106. IDECI=0
  107. ELSE
  108. IBLI=IBLK
  109. DO 9 IBL=1,NBLK
  110. IF(I.GE.NLDBLK(IBL).AND.I.LT.NLDBLK(IBL+1)) THEN
  111. IBLI=IBL
  112. GOTO 99
  113. ENDIF
  114. 9 CONTINUE
  115. 99 CONTINUE
  116. IJD=KJD
  117. IJF=KJF
  118. IZAI=IZAK
  119. IBLKI=IBLKK
  120. C SI I APPARTIENT À UN BLOC DIFFÉRENT DE CELUI DE K
  121. IF(IBLI.NE.IBLK) THEN
  122. IJD=NLDBLK(IBLI)
  123. IJF=NLDBLK(IBLI+1)-1
  124. IBLKI=IDESCR(IBLI)
  125. SEGACT IBLKI
  126. IZAI=IBLKI.IMAT
  127. SEGACT IZAI*MOD
  128. ENDIF
  129. C LAI=LONGUEUR DE LA LIGNE I
  130. LAI=IBLKI.IDEBLK(I-IJD+2)-IBLKI.IDEBLK(I-IJD+1)
  131. C DÉCALAGE DANS LE TABLEAU POUR ACCÉDER À LA LIGNE I
  132. C - NUMÉRO DE LA LIGNE I DANS LE BLOC IBLKI=I-IJD+1
  133. IDECI=IBLKI.IDEBLK(I-IJD+1)-1
  134. ENDIF
  135. JI=I-LAI
  136. L1=1-JI
  137. I1=I-1
  138. L=L2+I
  139. SOM=0.D0
  140. JMIN=MAX0(JI,JK)
  141. IF (JMIN.LE.I1) THEN
  142. JMI1=I1-JMIN+1
  143. SOM=DDOT(JMI1,AI(IDECI+L1+JMIN),1,AK(IDECK+L2+JMIN),1)
  144. ENDIF
  145. AK(IDECK+L)=AK(IDECK+L)-SOM
  146. IF(IZAI.NE.IZAK.AND.IZAI.NE.IZD) THEN
  147. SEGDES IZAI
  148. SEGDES IBLKI
  149. ENDIF
  150. 4 CONTINUE
  151. C IL FAUT DIVISER CHAQUE TERME DE LA LIGNE QUI VIENT D'ÊTRE CALCULÉE PAR
  152. C LE TERME DIAGONAL CORRESPONDANT.
  153. DO 5 I=JK,KLL
  154. L=L2+I
  155. AK(IDECK+L)=AK(IDECK+L)/D(I)
  156. 5 CONTINUE
  157. C ON TRAITE LE TERME DIAGONAL, ON NE PEUT FAIRE LA RUSE DU TERME GÉNÉRAL
  158. SOM=SDT3(LAK,AK(IDECK+1),AK(IDECK+1),D(K-LAK))
  159. D(K)=D(K)-SOM
  160.  
  161. C! DEBUT
  162. ADK=ABS(D(K))
  163. IF(ADK.LE.GGIS)THEN
  164. WRITE(6,*)'SUB TRIAWS : DIAGONALE NULLE ADK=',ADK,' LIGNE K=',
  165. &NUNA(K)
  166. D(K)=SIG
  167. ENDIF
  168. C! FIN
  169.  
  170. 1 CONTINUE
  171.  
  172. SEGDES IZAK
  173. SEGDES IBLKK
  174. 100 CONTINUE
  175.  
  176. SEGDES IZD
  177. SEGDES IDMAT
  178. SEGDES IZL
  179.  
  180. RETURN
  181. 1002 FORMAT(10(1X,1PE11.4))
  182. END
  183.  
  184.  
  185.  

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