Télécharger graco12.eso

Retour à la liste

Numérotation des lignes :

graco12
  1. C GRACO12 SOURCE MB234859 26/06/10 21:15:32 12569
  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. -INC SILICRE
  16. pointeur ilicr1.ilicre,ligcr1.ligcre
  17. MMATRI=ICHOLX
  18. * activation de la matrice une fois pour toute.
  19. MILIGN=IILIGN
  20. SEGACT,MILIGN
  21. INO=ILIGN(/1)
  22. * nombre inconnues
  23. DO I=1,INO
  24. LIGN=ILIGN(I)
  25. SEGACT LIGN
  26. nbinc=nbinc+immm(/1)
  27. enddo
  28. segini ilicre
  29. * longueur chaque ligne
  30. do i=1,ino
  31. lign=ilign(i)
  32. do jpa=1,immm(/1)
  33. ilideb(iprel+jpa-1)=ivpo(2*ippvv(jpa+1))-ivpo(2*ippvv(jpa))
  34. enddo
  35. enddo
  36. * taille totale de la matrice
  37. lmat=0
  38. do i=2,nbinc+1
  39. ilideb(i)=ilideb(i)+ilideb(i-1)
  40. enddo
  41. lmat=ilideb(nbinc+1)
  42. * ilideb pointe vers la fin de chaque ligne
  43. do i=nbinc+1,2,-1
  44. ilideb(i)=ilideb(i-1)
  45. enddo
  46. ilideb(1)=0
  47. * ilideb pointe maintenant vers la fin de la ligne precedente
  48. ** write (6,*) ' nb inconnues ',nbinc,'taille matrice ',lmat
  49. segini ligcre
  50. ligcrp=ligcre
  51. do i=1,ino
  52. lign=ilign(i)
  53. do jpa=1,immm(/1)
  54. incb=iprel+jpa-1
  55. igf=ippvv(jpa+1)-1
  56. ildebf=ivpo(2*igf)
  57. ilfinf=ivpo(2*(igf+1))-1
  58. idebf=ivpo(2*igf-1)
  59. ifinf=idebf+ilfinf-ildebf
  60. do ig=ippvv(jpa),ippvv(jpa+1)-1
  61. ildeb=ivpo(2*ig)
  62. ilfin=ivpo(2*(ig+1))-1
  63. ideb=ivpo(2*ig-1)
  64. ifin=ideb+ilfin-ildeb
  65. ** write (6,*) ' incb ilideb ',incb,ilideb(incb),ildeb,ilfin
  66. do mpa=ildeb,ilfin
  67. ilideb(incb)=ilideb(incb)+1
  68. valm(ilideb(incb))=val(mpa)
  69. posm(ilideb(incb))=mpa-ildeb+ideb + incb-ifinf
  70. enddo
  71. enddo
  72. ** write (6,*) 'graco12 dernier incb et derniere valeurs ',
  73. ** > incb,ilideb(incb),posm(ilideb(incb)),i,jpa
  74. enddo
  75. segdes lign
  76. enddo
  77.  
  78.  
  79. * repasser ilideb vers les debuts de ligne
  80. do i=nbinc+1,2,-1
  81. ilideb(i)=ilideb(i-1)+1
  82. enddo
  83. ilideb(1)=1
  84. ** write (6,*) ' structure de la matrice ',
  85. ** > (valm(i),posm(i),i=1,lmat)
  86. * matrice remplie ilideb pointe vers les fins de ligne
  87. *
  88. ilicr1=ilicre
  89. ligcr1=ligcre
  90. *
  91. * construction de la transposee
  92. segini ilicre
  93. ilicr2=ilicre
  94. segini ligcre
  95. ligcrp=ligcre
  96. *
  97. * calcul nb termes par ligne
  98. *
  99. do i=1,nbinc
  100. do j=ilicr1.ilideb(i),ilicr1.ilideb(i+1)-1
  101. inc=ligcr1.posm(j)
  102. ilideb(inc)=ilideb(inc)+1
  103. enddo
  104. enddo
  105. do i=2,nbinc+1
  106. ilideb(i)=ilideb(i)+ilideb(i-1)
  107. enddo
  108. lmat=ilideb(nbinc+1)
  109. * ilideb pointe vers la fin de chaque ligne
  110. do i=nbinc+1,2,-1
  111. ilideb(i)=ilideb(i-1)
  112. enddo
  113. ilideb(1)=0
  114. * ilideb pointe maintenant vers la fin de la ligne precedente
  115.  
  116.  
  117.  
  118. do i=1,nbinc
  119. do j=ilicr1.ilideb(i),ilicr1.ilideb(i+1)-1
  120. inc=ligcr1.posm(j)
  121. ilideb(inc)=ilideb(inc)+1
  122. valm(ilideb(inc))=ligcr1.valm(j)
  123. posm(ilideb(inc))=i
  124. enddo
  125. enddo
  126. * repasser ilideb vers les debuts de ligne
  127. do i=nbinc+1,2,-1
  128. ilideb(i)=ilideb(i-1)+1
  129. enddo
  130. ilideb(1)=1
  131.  
  132. end
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  

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