Télécharger addmat.eso

Retour à la liste

Numérotation des lignes :

addmat
  1. C ADDMAT SOURCE PV 20/09/26 21:15:03 10724
  2. SUBROUTINE ADDMAT(M1,M2,M3,IRET)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5.  
  6. POINTEUR M1.MATRIK,M2.MATRIK,M3.MATRIK
  7. POINTEUR PMS3.PMORS, IZA3.IZA
  8. POINTEUR IMAT1.IMATRI,IMAT2.IMATRI,IMAT3.IMATRI
  9.  
  10. SEGMENT ASSTAB
  11. INTEGER ITAB(NBCOMP,NTA)
  12. ENDSEGMENT
  13.  
  14. INTEGER NBCOMP,NTA,PRI,DUA,NTTP,NTTD,IRET
  15.  
  16. C =========================================
  17. IRET=0
  18.  
  19. SEGACT M1
  20.  
  21. C Si les matrices ne sont pas morse, on les crees
  22. C en morse
  23. IF (M1.IRIGEL(7,1).NE.6) THEN
  24. CALL ELMORS(M1,1)
  25. END IF
  26.  
  27. SEGACT M2
  28.  
  29. IF (M2.IRIGEL(7,1).NE.6) THEN
  30. CALL ELMORS(M2,1)
  31. END IF
  32.  
  33. SEGACT M1,M2
  34.  
  35. PMS1=M1.IRIGEL(5,1)
  36. PMS2=M2.IRIGEL(5,1)
  37.  
  38. IZA1=M1.IRIGEL(6,1)
  39. IZA2=M2.IRIGEL(6,1)
  40.  
  41. IMAT1=M1.IRIGEL(4,1)
  42. IMAT2=M2.IRIGEL(4,1)
  43.  
  44. SEGACT IMAT1,IMAT2
  45.  
  46. NBSOUS=IMAT1.LIZAFM(/1)
  47. NBME1=IMAT1.LIZAFM(/2)
  48. NBME2=IMAT2.LIZAFM(/2)
  49.  
  50. IF (NBME1.NE.NBME2) THEN
  51. WRITE(6,*) 'ADDMAT: Les 2 MATRIK n ont pas'
  52. WRITE(6,*) 'le meme support, impossible de les'
  53. WRITE(6,*) 'additionner.'
  54. IRET=1
  55. RETURN
  56. ELSE
  57. IFLAG=0
  58. NBME=NBME1
  59. DO I=1,NBME
  60. IF ((IMAT1.LISPRI(I).NE.IMAT2.LISPRI(I)).OR.
  61. & (IMAT1.LISDUA(I).NE.IMAT2.LISDUA(I))) THEN
  62. IFLAG=1
  63. END IF
  64. END DO
  65. IF (IFLAG.NE.0) THEN
  66. WRITE(6,*) 'ADDMAT: Les 2 MATRIK n ont pas'
  67. WRITE(6,*) 'le meme support, impossible de les'
  68. WRITE(6,*) 'additionner.'
  69. IRET=1
  70. RETURN
  71. END IF
  72. END IF
  73.  
  74. SEGINI IMAT3
  75.  
  76. C On recopie le segact IMATRI de la matrice 1 dans le IMATRI
  77. C pour la matrice 3
  78.  
  79. DO I=1,NBME
  80. IMAT3.LISPRI(I)=IMAT1.LISPRI(I)
  81. IMAT3.LISDUA(I)=IMAT1.LISDUA(I)
  82. END DO
  83. IMAT3.KSPGP=IMAT1.KSPGP
  84. IMAT3.KSPGD=IMAT1.KSPGD
  85.  
  86. C On initialise M3
  87. NMATRI=1
  88. NRIGE=7
  89. NKID=9
  90. NKMT=7
  91. SEGINI M3
  92.  
  93. M3.KMINCP=M1.KMINCP
  94. M3.KMINCD=M1.KMINCD
  95. c WRITE(6,*) 'ADDMAT',M1.KMINCP,M1.KMINCD
  96.  
  97. CALL RSETI(M3.IRIGEL(1,1),M1.IRIGEL(1,1),7)
  98.  
  99. SEGACT PMS1,PMS2
  100. SEGACT IZA1,IZA2
  101.  
  102. NTT=PMS1.IA(/1)-1
  103.  
  104. NBCOMP=10
  105. NTA=NTT
  106. SEGINI ASSTAB
  107.  
  108. DO I=1,NTT
  109. LI1=PMS1.IA(I)
  110. NB1=PMS1.IA(I+1)-PMS1.IA(I)
  111.  
  112. LI2=PMS2.IA(I)
  113. NB2=PMS2.IA(I+1)-PMS2.IA(I)
  114.  
  115. DO J=1,NB1
  116. NB=ITAB(1,I)
  117. PRI=PMS1.JA(LI1+J-1)
  118.  
  119. 10 IF (NB+1.GE.NBCOMP) THEN
  120. SEGADJ ASSTAB
  121. GO TO 10
  122. END IF
  123.  
  124. C On regarde sur la ligne DUA si la colonne PRI est
  125. C deja inserer dans le profil ITAB
  126. DO II=1,NB
  127. IF (ITAB(II+1,I).EQ.PRI) GO TO 30
  128. END DO
  129. ITAB(1,I)=NB+1
  130. ITAB(NB+2,I)=PRI
  131.  
  132. 30 CONTINUE
  133. END DO
  134.  
  135. DO J=1,NB2
  136. NB=ITAB(1,I)
  137. PRI=PMS2.JA(LI2+J-1)
  138.  
  139. 35 IF (NB+1.GE.NBCOMP) THEN
  140. SEGADJ ASSTAB
  141. GO TO 35
  142. END IF
  143.  
  144. C On regarde sur la ligne DUA si la colonne PRI est
  145. C deja inserer dans le profil ITAB
  146. DO II=1,NB
  147. IF (ITAB(II+1,I).EQ.PRI) GO TO 40
  148. END DO
  149. ITAB(1,I)=NB+1
  150. ITAB(NB+2,I)=PRI
  151.  
  152. 40 CONTINUE
  153. END DO
  154. END DO
  155.  
  156. DO I=1,NTT
  157. CALL ORDOTA(ITAB(2,I),ITAB(1,I))
  158. END DO
  159.  
  160. c write(6,*)' KTAB ************** NPTD=',NTT
  161. c DO II=1,NTT
  162. c nb=ITAB(1,II)
  163. c write(6,*)' II=',ii,' NB=',nb
  164. c write(6,*)(ITAB(ji+1,ii),ji=1,nb)
  165. c END DO
  166.  
  167. c SEGDES ASSTAB
  168. M3.KNTTD=NTT
  169. c CALL PFMORS(ASSTAB,M3,1)
  170.  
  171. NJA=PMS1.JA(/1)
  172. SEGINI PMS3
  173.  
  174. M=0
  175. DO I=1,NTT
  176. NB=ITAB(1,I)
  177.  
  178. PMS3.IA(I)=M+1
  179. DO J=1,NB
  180. M=M+1
  181. 110 CONTINUE
  182. IF (M.GT.NJA) THEN
  183. NJA=NJA+100
  184. SEGADJ PMS3
  185. GOTO 110
  186. END IF
  187.  
  188. PMS3.JA(M)=ITAB(J+1,I)
  189. END DO
  190. END DO
  191.  
  192. PMS3.IA(NTT+1)=M+1
  193. NJA=M
  194. SEGADJ PMS3
  195.  
  196. c SEGACT M3*MOD
  197. c PMS3=M3.IRIGEL(5,1)
  198. c SEGACT PMS3
  199. NBVA=PMS3.JA(/1)
  200. SEGINI IZA3
  201.  
  202. N=PMS3.IA(/1)
  203. c WRITE(6,*) 'N=',N
  204. c DO I=1,N
  205. c WRITE(6,*) I,'IA',PMS3.IA(I)
  206. c END DO
  207. c WRITE(6,*) 'NBVA=',NBVA
  208. c DO I=1,NBVA
  209. c WRITE(6,*) I,'JA',PMS3.JA(I)
  210. c END DO
  211.  
  212. NTT=PMS3.IA(/1)-1
  213. DO I=1,NTT
  214.  
  215. LI1=PMS1.IA(I)
  216. NB1=PMS1.IA(I+1)-PMS1.IA(I)
  217.  
  218. LI2=PMS2.IA(I)
  219. NB2=PMS2.IA(I+1)-PMS2.IA(I)
  220.  
  221. DO J=1,NB1
  222. PRI=PMS1.JA(LI1+J-1)
  223.  
  224. MA=IMORSE(PMS1.IA,PMS1.JA,I,PRI)
  225. MM=IMORSE(PMS3.IA,PMS3.JA,I,PRI)
  226.  
  227. IZA3.A(MM)=IZA3.A(MM)+IZA1.A(MA)
  228. END DO
  229.  
  230. DO J=1,NB2
  231. PRI=PMS2.JA(LI2+J-1)
  232.  
  233. MA=IMORSE(PMS2.IA,PMS2.JA,I,PRI)
  234. MM=IMORSE(PMS3.IA,PMS3.JA,I,PRI)
  235.  
  236. IZA3.A(MM)=IZA3.A(MM)+IZA2.A(MA)
  237. END DO
  238. END DO
  239.  
  240. SEGDES PMS1,PMS2,PMS3
  241. SEGDES IZA1,IZA2,PMS3
  242. C SEGSUP ASSTAB
  243.  
  244. C On remplit les pointeurs de M3
  245.  
  246. M3.IRIGEL(4,1)=IMAT3
  247. M3.IRIGEL(5,1)=PMS3
  248. M3.IRIGEL(6,1)=IZA3
  249. M3.IRIGEL(7,1)=6
  250.  
  251. M3.KSYM=2
  252. M3.KNTTP=M2.KNTTP
  253. M3.KNTTD=M1.KNTTD
  254.  
  255. SEGDES IMAT1,IMAT2,IMAT3
  256. SEGDES M1,M2,M3
  257.  
  258. CALL OPTIM(M3,1)
  259. RETURN
  260. END
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  

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