Télécharger graco12.eso

Retour à la liste

Numérotation des lignes :

graco12
  1. C GRACO12 SOURCE PV090527 23/12/20 21:15:06 11813
  2. SUBROUTINE GRACO12( ICHOLX, ILICR1,ilicr2)
  3. *
  4. * Conversion de la matrice factorisee en stockage creux ligne
  5. * Ensuite construction du stockage ligne de la transposee
  6. *
  7. *
  8. IMPLICIT INTEGER(I-N)
  9. IMPLICIT REAL*8(A-H,O-Z)
  10.  
  11. -INC PPARAM
  12. -INC CCOPTIO
  13. -INC SMMATRI
  14. -INC SMRIGID
  15. segment ilicre
  16. * stockage matrice fatorise en creux
  17. * ilideb position debut de ligne dans ligcre
  18. integer ilideb(nbinc+1)
  19. integer ligcrp
  20. endsegment
  21. segment ligcre
  22. * lmatr: longueur reelle ligne
  23. * posm: numero inconnue
  24. * valm: valeur terme
  25. integer posm(lmat)
  26. real*8 valm(lmat)
  27. endsegment
  28. pointeur ilicr1.ilicre,ligcr1.ligcre
  29. MMATRI=ICHOLX
  30. * activation de la matrice une fois pour toute.
  31. MILIGN=IILIGN
  32. SEGACT,MILIGN
  33. INO=ILIGN(/1)
  34. * nombre inconnues
  35. DO I=1,INO
  36. LIGN=ILIGN(I)
  37. SEGACT LIGN
  38. nbinc=nbinc+immm(/1)
  39. enddo
  40. segini ilicre
  41. * longueur chaque ligne
  42. do i=1,ino
  43. lign=ilign(i)
  44. do jpa=1,immm(/1)
  45. ilideb(iprel+jpa-1)=ivpo(2*ippvv(jpa+1))-ivpo(2*ippvv(jpa))
  46. enddo
  47. enddo
  48. * taille totale de la matrice
  49. lmat=0
  50. do i=2,nbinc+1
  51. ilideb(i)=ilideb(i)+ilideb(i-1)
  52. enddo
  53. lmat=ilideb(nbinc+1)
  54. * ilideb pointe vers la fin de chaque ligne
  55. do i=nbinc+1,2,-1
  56. ilideb(i)=ilideb(i-1)
  57. enddo
  58. ilideb(1)=0
  59. * ilideb pointe maintenant vers la fin de la ligne precedente
  60. ** write (6,*) ' nb inconnues ',nbinc,'taille matrice ',lmat
  61. segini ligcre
  62. ligcrp=ligcre
  63. do i=1,ino
  64. lign=ilign(i)
  65. do jpa=1,immm(/1)
  66. incb=iprel+jpa-1
  67. igf=ippvv(jpa+1)-1
  68. ildebf=ivpo(2*igf)
  69. ilfinf=ivpo(2*(igf+1))-1
  70. idebf=ivpo(2*igf-1)
  71. ifinf=idebf+ilfinf-ildebf
  72. do ig=ippvv(jpa),ippvv(jpa+1)-1
  73. ildeb=ivpo(2*ig)
  74. ilfin=ivpo(2*(ig+1))-1
  75. ideb=ivpo(2*ig-1)
  76. ifin=ideb+ilfin-ildeb
  77. ** write (6,*) ' incb ilideb ',incb,ilideb(incb),ildeb,ilfin
  78. do mpa=ildeb,ilfin
  79. ilideb(incb)=ilideb(incb)+1
  80. valm(ilideb(incb))=val(mpa)
  81. posm(ilideb(incb))=mpa-ildeb+ideb + incb-ifinf
  82. enddo
  83. enddo
  84. ** write (6,*) 'graco12 dernier incb et derniere valeurs ',
  85. ** > incb,ilideb(incb),posm(ilideb(incb)),i,jpa
  86. enddo
  87. segdes lign
  88. enddo
  89.  
  90.  
  91. * repasser ilideb vers les debuts de ligne
  92. do i=nbinc+1,2,-1
  93. ilideb(i)=ilideb(i-1)+1
  94. enddo
  95. ilideb(1)=1
  96. ** write (6,*) ' structure de la matrice ',
  97. ** > (valm(i),posm(i),i=1,lmat)
  98. * matrice remplie ilideb pointe vers les fins de ligne
  99. *
  100. ilicr1=ilicre
  101. ligcr1=ligcre
  102. *
  103. * construction de la transposee
  104. segini ilicre
  105. ilicr2=ilicre
  106. segini ligcre
  107. ligcrp=ligcre
  108. *
  109. * calcul nb termes par ligne
  110. *
  111. do i=1,nbinc
  112. do j=ilicr1.ilideb(i),ilicr1.ilideb(i+1)-1
  113. inc=ligcr1.posm(j)
  114. ilideb(inc)=ilideb(inc)+1
  115. enddo
  116. enddo
  117. do i=2,nbinc+1
  118. ilideb(i)=ilideb(i)+ilideb(i-1)
  119. enddo
  120. lmat=ilideb(nbinc+1)
  121. * ilideb pointe vers la fin de chaque ligne
  122. do i=nbinc+1,2,-1
  123. ilideb(i)=ilideb(i-1)
  124. enddo
  125. ilideb(1)=0
  126. * ilideb pointe maintenant vers la fin de la ligne precedente
  127.  
  128.  
  129.  
  130. do i=1,nbinc
  131. do j=ilicr1.ilideb(i),ilicr1.ilideb(i+1)-1
  132. inc=ligcr1.posm(j)
  133. ilideb(inc)=ilideb(inc)+1
  134. valm(ilideb(inc))=ligcr1.valm(j)
  135. posm(ilideb(inc))=i
  136. enddo
  137. enddo
  138. * repasser ilideb vers les debuts de ligne
  139. do i=nbinc+1,2,-1
  140. ilideb(i)=ilideb(i-1)+1
  141. enddo
  142. ilideb(1)=1
  143.  
  144. end
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  

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