Télécharger graco11.eso

Retour à la liste

Numérotation des lignes :

graco11
  1. C GRACO11 SOURCE PV090527 26/02/20 21:15:01 12479
  2. SUBROUTINE GRACO11( ICHOLX,ilicre, iappel)
  3. *
  4. * Conversion de la matrice assemblee en stockage creux ligne
  5. *
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8(A-H,O-Z)
  8.  
  9. -INC PPARAM
  10. -INC CCOPTIO
  11. -INC SMMATRI
  12. -INC SMRIGID
  13. -INC SILICRE
  14. ligcre=0
  15. ilicre=0
  16. MMATRI=ICHOLX
  17. * activation de la matrice une fois pour toute.
  18. SEGACT,MMATRI*mod
  19. MILIGN=IASLIG
  20. if(iappel.eq.1) milign=iilign
  21. SEGACT,MILIGN
  22. INO=ILIGN(/1)
  23. MDNOR=IDNORM
  24. SEGACT MDNOR
  25. * nombre inconnues
  26. DO I=1,INO
  27. LLIGN=ILIGN(I)
  28. SEGACT LLIGN
  29. nbinc=nbinc+immmm(/1)
  30. enddo
  31. segini/err=1000/ilicre
  32. * longueur chaque ligne
  33. ** iliinc(1)=0
  34. do i=1,ino
  35. llign=ilign(i)
  36. ** iliinc(i+1)=immmm(immmm(/1))
  37. do jpa=1,immmm(/1)
  38. * ipp fin ligne precedente kpa longueur ligne
  39. ipp=ippo(jpa)
  40. kpa=ippo(jpa+1)-ipp
  41. ilideb(immmm(jpa))=kpa
  42. * mise a jour des longueurs partie transposee
  43. do mpa=ipp+1,ippo(jpa+1)
  44. if (linc(mpa).ne.immmm(jpa))
  45. > ilideb(linc(mpa))=ilideb(linc(mpa))+1
  46. enddo
  47. enddo
  48. SEGDES LLIGN
  49. enddo
  50. * taille totale de la matrice
  51. lmat=0
  52. do i=2,nbinc+1
  53. ilideb(i)=ilideb(i)+ilideb(i-1)
  54. enddo
  55. lmat=ilideb(nbinc+1)
  56. * ilideb pointe vers la fin de chaque ligne
  57. do i=nbinc+1,2,-1
  58. ilideb(i)=ilideb(i-1)
  59. enddo
  60. ilideb(1)=0
  61. * ilideb pointe maintenant vers la fin de la ligne precedente
  62. * write (6,*) ' nb inconnues ',nbinc,'taille matrice ',lmat
  63. segini/err=1100/ligcre
  64. ligcrp=ligcre
  65. do i=1,ino
  66. llign=ilign(i)
  67. segact llign
  68. do jpa=1,immmm(/1)
  69. ipp=ippo(jpa)
  70. incb=immmm(jpa)
  71. do mpa=ipp+1,ippo(jpa+1)
  72. ilideb(incb)=ilideb(incb)+1
  73. valm(ilideb(incb))=xxva(mpa)
  74. posm(ilideb(incb))=linc(mpa)
  75. enddo
  76. * remplissage partie transposee
  77. do mpa=ipp+1,ippo(jpa+1)
  78. inc=linc(mpa)
  79. if (inc.ne.incb) then
  80. ilideb(inc)=ilideb(inc)+1
  81. valm(ilideb(inc))=xxva(mpa)
  82. posm(ilideb(inc))=immmm(jpa)
  83. endif
  84. enddo
  85. enddo
  86. segdes llign
  87. enddo
  88. * repasser ilideb vers les debuts de ligne
  89. do i=nbinc+1,2,-1
  90. ilideb(i)=ilideb(i-1)+1
  91. enddo
  92. ilideb(1)=1
  93. ** write (6,*) ' structure de la matrice ',
  94. ** > (valm(i),posm(i),i=1,lmat)
  95. * matrice remplie ilideb pointe vers les fins de ligne
  96. *
  97. if(iappel.eq.1) segdes ilicre,ligcre,mdnor
  98. jlicre=ilicre
  99. return
  100. 1100 continue
  101. * segini ligcre echoue
  102. if(ilicre.ne.0) segsup ilicre
  103. 1000 continue
  104. * segini ilicre echoue
  105. DO I=1,INO
  106. LLIGN=ILIGN(I)
  107. SEGDES LLIGN
  108. enddo
  109. segdes milign
  110. segdes mdnor
  111. jlicre=ilicre
  112. return
  113. end
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  

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