Télécharger chole4i.eso

Retour à la liste

Numérotation des lignes :

chole4i
  1. C CHOLE4I SOURCE MB234859 26/01/26 21:15:06 12460
  2. C----------------------------------------------------------------------
  3. C Actualise les termes de la ligne LIGN courante, associee au noeud I,
  4. C en calculant les produits entre blocs de valeurs non nulles avec
  5. C les lignes associees aux noeuds IMIN a (I-1).
  6. C
  7. C Notations :
  8. C -----------
  9. C LIGN : Pointeur sur le segment LIGN associe au noeud I
  10. C I : Numero du noeud concerne
  11. C IMIN : Numero du noeud associe a la premier valeur non nulle
  12. C du segment LIGN
  13. C----------------------------------------------------------------------
  14. SUBROUTINE CHOLE4I(ITHR)
  15. C
  16. IMPLICIT INTEGER(I-N)
  17. IMPLICIT REAL*8 (A-H,O-Z)
  18. -INC SMMATRI
  19. -INC CCHOLE
  20. -INC CCREEL
  21. -INC CCASSIS
  22. SEGMENT IMMT(NBLIG)
  23. POINTEUR LILIGN.MILIGN
  24. NBO=NBOP(ITHR)
  25. C
  26. DO 100 JBIB=IL2,IL1,-NBTHR
  27. JBI=JBIB-ITHR+1
  28. IF (JBI.GT.IL2) GOTO 100
  29. IF (JBI.LT.IL1) GOTO 100
  30. IMJBI=IMMT(JBI)
  31. IF(IMJBI.GT.IDER) GOTO 100
  32. LIGN=ILIGN(JBI)
  33. CCC WRITE(*,*) '++++ CHOLE4I LIGNE=',JBI,'DE',MAX(IM,IPER),'A',IDER
  34. NBG2=LIGN.IPPVV(2)-1
  35. kidepb=lcara(1,jbi)-1
  36. lpl=lcara(2,jbi)-kidepb
  37. lplc=ivpo(2*(nbg2+1))-1
  38. * decoupage en rondelle pour optimiser la gestion du cache dans les produits scalaires
  39. iperi=iper
  40. iprelj=lcara(2,jbi)
  41. iderlj=lcara(3,jbi)
  42. na2=iderlj-iprelj+1
  43. ngm= 8500/na2
  44. C
  45. itron=1
  46. do 300 ironda=1,lplc,ngm
  47. irondb=min(ironda+ngm-1,lplc)
  48. 310 continue
  49. if (ivpo(2*(itron+1)).le.ironda) then
  50. itron=itron+1
  51. goto 310
  52. endif
  53. igt1=itron
  54. irondi=ironda-ivpo(2*itron)+ivpo(2*itron-1)
  55. 311 continue
  56. if (ivpo(2*(itron+1)).le.irondb) then
  57. itron=itron+1
  58. goto 311
  59. endif
  60. igt2=itron
  61. irondf=irondb-ivpo(2*itron)+ivpo(2*itron-1)
  62. * if (ithr.eq.1)
  63. * > write(6,*) 'ironda irondb irondi irondf',
  64. * > ironda,irondb,irondi,irondf
  65. *
  66. IGD=LIGN.IVPO(2*igt1)
  67. do 11 ig=igt1,nbg2-1
  68. C
  69. if(ipno(ivpo(2*ig-1)+kidepb).gt.ider) goto 300
  70. IGF=LIGN.IVPO(2*(IG+1))-1
  71. do 10 j=max(IMJBI,iperi,ipno(lign.ivpo(2*ig-1)+kidepb)),
  72. > min(ider,ipno(igf-igd+lign.ivpo(2*ig-1)+kidepb))
  73.  
  74. iprem=lcara(1,j)
  75. IPPR=LCARA(2,J)
  76. IDDR=LCARA(3,J)
  77. * sauver le nouveau debut
  78. if (iddr.lt.irondf+kidepb) then
  79. iperi=j+1
  80. endif
  81. * test si la ligne touche la rondelle
  82. if (iddr.lt.irondi+kidepb) then
  83. goto 10
  84. endif
  85.  
  86. IND1=MAX(1,IPPR-KIDEPB)
  87. IND2=IDDR-KIDEPB
  88. JND1=MASQA(IND1)
  89. JND2=MASQA(IND2)
  90. IMSQ1=IMASQ(JND1)
  91. IMSQ2=IMASQ(JND2)
  92. IMSQ=IMSQ1
  93. IF (IMSQ.EQ.0) THEN
  94. WRITE(*,*) 'erreur interne chole4i 1'
  95. CALL ERREUR(5)
  96. ENDIF
  97. * test si la ligne correspond a un terme a remplir
  98. if(jnd2-jnd1.gt.1) then
  99. WRITE(*,*) 'erreur interne chole4i 2'
  100. CALL ERREUR(5)
  101. ENDIF
  102. if(imsq1.lt.0.and.imsq2.lt.0) goto 10
  103. IF (IMSQ.LT.0) imsq=-imsq
  104. 18 CONTINUE
  105. IGD1=LIGN.IVPO(2*IMSQ-1)
  106. IGF1=LIGN.IVPO(2*(IMSQ+1)-1)-1
  107. if (igd1.gt.ind2) goto 10
  108. if (igf1.lt.ind1) then
  109. imsq=imsq+1
  110. goto 18
  111. endif
  112. * verif supplementaire avec la rondelle ????
  113. ird1=max(iprem-kidepb,irondi,1)
  114. ird2=min(iddr-kidepb,irondf)
  115. jrd1=masqa(ird1)
  116. jrd2=masqa(ird2)
  117. * write(6,*) 'jrd1 jrd2',jrd1,jrd2,iprem,kidepb,irondi
  118. if (imasq(jrd1).gt.0) goto 12
  119. jr=-imasq(jrd1)
  120. js= imasq(jrd2)
  121. if (jr.le.js) goto 12
  122. GOTO 10
  123. C
  124. 12 CONTINUE
  125. LIG1=LILIGN.ILIGN(J)
  126. NBG1=LIG1.IPPVV(2)-1
  127. NA1 =IDDR-IPPR+1
  128. CALL CHOLE4(LIGN.IPREL,NA2,NBG2,LIGN.IVPO(1),LIGN.VAL(1),
  129. & LIGN.IMASQ(1),IGT1,IGT2,
  130. & LIG1.IPREL,NA1,NBG1,LIG1.IVPO(1),LIG1.VAL(1),NBO,
  131. & irondi,irondf)
  132. 10 CONTINUE
  133. IGD=IGF+1
  134. 11 CONTINUE
  135. 300 CONTINUE
  136. CCC WRITE(*,*) ' SEGMENT APRES CHOLE4',JBI
  137. CCC segprt,lign
  138. 100 CONTINUE
  139. NBOP(ITHR)=NBO
  140. END
  141.  
  142.  

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