Télécharger trialu.eso

Retour à la liste

Numérotation des lignes :

trialu
  1. C TRIALU SOURCE GOUNAND 22/08/25 21:15:12 11434
  2. SUBROUTINE TRIALU(MATRIK,AMORS,AISA,
  3. $ IDMAT,
  4. $ IMPR,IRET)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. IMPLICIT INTEGER (I-N)
  7. C************************************************************************
  8. C
  9. C Triangulation d'une matrice symetrique ou non
  10. C On decoupe la matrice en bloc
  11. C Si IDMAT ne 0 la matrice est deja triangulee on saute
  12. C
  13. C HISTORIQUE : 22/03/00 gounand
  14. C Amélioration de la détection des pivots nulles (pas encore parfaite)
  15. C HISTORIQUE : 13/01/00 Adaptation au nouvel assemblage :
  16. C Modifications cosmétiques.
  17. C Correction sur la détection des diagonales nulles (pas encore
  18. C parfaite).
  19. C Modification de la taille des paquets pour tenir dans le cache
  20. C (dépendant machine).
  21. C Inlining manuel des produits scalaires de vecteurs (sdot) qui
  22. C sont appelés de nombreuses fois...
  23. C Gestion correcte des allocations mémoire.
  24. C HISTORIQUE :
  25. C HISTORIQUE :
  26. C************************************************************************
  27. * REAL*8 SDOT
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC CCREEL
  32. INTEGER NTT,NPT,NBLK,KTRING
  33. INTEGER NBVA
  34. POINTEUR ISAU.IZA,ISAL.IZA
  35. POINTEUR ISAU0.IZA,ISAL0.IZA
  36. POINTEUR ISAU00.IZA,ISAL00.IZA
  37. POINTEUR AMORS.PMORS
  38. POINTEUR AISA.IZA
  39. POINTEUR PMTRAN.PMORS
  40. POINTEUR MYMINC.MINC
  41. -INC SMELEME
  42. POINTEUR MYPTS.MELEME
  43. -INC SMLREEL
  44. POINTEUR GGIS.MLREEL
  45. *STAT-INC SMSTAT
  46. INTEGER IMPR,IRET
  47. *
  48. INTEGER NBVD
  49. SEGMENT IZD
  50. REAL*8 D(NBVD)
  51. ENDSEGMENT
  52. INTEGER IBLSIZ
  53. * REAL*8 GGIS
  54. LOGICAL LACTL,LACTU
  55. * Le logique LISDDL indique si l'on est capable de faire
  56. * la correspondance numéro DDL <-> numéro de point, nom d'inconnue
  57. LOGICAL LISDDL
  58. INTEGER TRAMIN
  59. INTEGER I,ISTRT,ISTOP
  60. INTEGER J,JSTRT,JSTOP
  61. INTEGER NTTDDL
  62. REAL*8 TNORM,YZPREC,US
  63. C*******************************************************************
  64. C
  65. C
  66. IF (IMPR.GT.5) WRITE(IOIMP,*) 'Entrée dans trialu'
  67. IKOMPT=0
  68. * GGIS=XZPREC
  69. SEGACT MATRIK
  70. KTRING=MATRIK.KIDMAT(9)
  71. KSIM=MATRIK.KSYM
  72. IDMAT=MATRIK.KIDMAT(1)
  73. MYMINC=MATRIK.KMINC
  74. MYPTS=MATRIK.KISPGT
  75. SEGDES MATRIK
  76. IF(KTRING.NE.2) THEN
  77. *STAT CALL INMSTA(MSTAT,1)
  78. SEGACT MATRIK*MOD
  79. MATRIK.KIDMAT(9)=2
  80. SEGDES MATRIK
  81. SEGACT IDMAT*MOD
  82. C Initialisation des KZA
  83. SEGACT AMORS
  84. NTT=AMORS.IA(/1)-1
  85. NPT=IDMAT.NUAN(/1)
  86. LISDDL=(MYMINC.NE.0.AND.MYPTS.NE.0.AND.NPT.GT.0)
  87. NBLK=0
  88. SEGADJ,IDMAT
  89. DO 9 ITT=1,NTT
  90. IDMAT.KZA(ITT)=ITT-AMORS.JA(AMORS.IA(ITT))+1
  91. 9 CONTINUE
  92. SEGDES AMORS
  93. C On construit la transposée du profil
  94. C (La matrice Skyline est supposée avoir une structure symétrique)
  95. C La transposée du profil n'a pas ses colonnes ordonnées...
  96. CALL MAKPMT(AMORS,
  97. $ PMTRAN,
  98. $ IMPR,IRET)
  99. IF (IRET.NE.0) GOTO 9999
  100. SEGACT PMTRAN
  101. DO 91 ITT=1,NTT
  102. JSTRT=PMTRAN.IA(ITT)
  103. JSTOP=PMTRAN.IA(ITT+1)-1
  104. TRAMIN=PMTRAN.JA(JSTRT)
  105. DO 912 J=JSTRT+1,JSTOP
  106. TRAMIN=MIN(TRAMIN,PMTRAN.JA(J))
  107. 912 CONTINUE
  108. TRAMIN=DIM(ITT,TRAMIN)+1
  109. IDMAT.KZA(ITT)=MAX(IDMAT.KZA(ITT),TRAMIN)
  110. 91 CONTINUE
  111. SEGSUP PMTRAN
  112. *STAT CALL PRMSTA('Init. KZA',MSTAT,1)
  113. C
  114. C On cree les blocs
  115. C
  116. C La matrice est stockée par blocs de plusieurs lignes. En effet, il faut
  117. C l'équivalent de 900 opérations pour activer/désactiver un segment. Si
  118. C une ligne de la matrice comprend 50 éléments, on fait 100 opérations
  119. C utiles et 900 inutiles lors de la résolution.
  120. C La taille des blocs est fixée par le paramètre IBLSIZ. La diagonale est
  121. C stockée dans un segment à part.
  122. C
  123. C Il nous faut constituer un certain nombre de tableaux. Le premier segment
  124. C décrit la matrice. Il contient un tableau donnant les numéros des premières
  125. C lignes de chaque bloc et un tableau de pointeurs sur des segments
  126. C descripteurs de bloc.
  127. C
  128. C Calcul de la longueur des blocs, on choisit ce qu'il faut
  129. C
  130. C Attention !! il y a au moins deux blocs activés en même temps et au plus 4
  131. C Peut-être qu'une bonne formule fait intervenir la taille du cache...
  132. C (Cache-Place(KZA,NUIA,DESCL...)) / 4 (blocs simultanés)
  133. * IBLSIZ=OOOVAL(1,1)/100000
  134. * Pour 128Ko de cache => 8 KMots
  135. IBLSIZ=8000
  136. C
  137. C Il faut d'abord déterminer le nombre de blocs.
  138. C
  139. LONG=0
  140. NTT=KZA(/1)
  141. DO 96 I=1,NTT
  142. LONG=LONG+KZA(I)
  143. 96 CONTINUE
  144. NBLK=1
  145. IF(LONG-NTT.GT.IBLSIZ) THEN
  146. ILBL=0
  147. DO 12 KK=2,NTT
  148. LA=KZA(KK)-1
  149. IF(LA.GT.IBLSIZ) THEN
  150. NBLK=NBLK+2
  151. ILBL=0
  152. ELSE
  153. ILBL=ILBL+LA
  154. IF(ILBL.GT.IBLSIZ) THEN
  155. NBLK=NBLK+1
  156. ILBL=LA
  157. ENDIF
  158. ENDIF
  159. 12 CONTINUE
  160. ENDIF
  161. C
  162. C On peut allouer le segment descripteur de la matrice. On va pouvoir
  163. C remplir des numéros de ligne des débuts de bloc.
  164. C
  165. NTT=KZA(/1)
  166. NPT=NUAN(/1)
  167. SEGADJ IDMAT
  168. IF(NBLK.EQ.1) THEN
  169. NLDBLK(1)=1
  170. NLDBLK(2)=NTT+1
  171. ELSE
  172. IBLK=1
  173. ILBL=0
  174. NLDBLK(1)=1
  175. NLDBLK(NBLK+1)=NTT+1
  176. DO 13 KK=2,NTT
  177. LA=KZA(KK)-1
  178. IF(LA.GT.IBLSIZ) THEN
  179. NLDBLK(IBLK+1)=KK
  180. NLDBLK(IBLK+2)=KK+1
  181. IBLK=IBLK+2
  182. ILBL=0
  183. ELSE
  184. ILBL=ILBL+LA
  185. IF(ILBL.GT.IBLSIZ) THEN
  186. NLDBLK(IBLK+1)=KK
  187. ILBL=LA
  188. IBLK=IBLK+1
  189. ENDIF
  190. ENDIF
  191. 13 CONTINUE
  192. ENDIF
  193. IF(IMPR.GE.2) THEN
  194. IF(KSIM.EQ.0) THEN
  195. WRITE(IOIMP,*) '* NOMBRE DE BLOCS DE ',IBLSIZ,
  196. $ ' MOTS : ',NBLK
  197. ELSE
  198. WRITE(IOIMP,*)'* NOMBRE DE BLOCS DE ',IBLSIZ,
  199. $ ' MOTS : 2 X ',NBLK
  200. ENDIF
  201. ENDIF
  202. C
  203. C On Remplit les blocs
  204. C
  205. SEGACT AMORS
  206. SEGACT AISA
  207. * On construit le vecteurs des normes des lignes
  208. NTTDDL=AMORS.IA(/1)-1
  209. JG=NTTDDL
  210. SEGINI GGIS
  211. YZPREC=XZPREC**(0.9D0)
  212. * YZPREC=1.D-9
  213. DO 152 ITTDDL=1,NTTDDL
  214. * Calcul de la norme de la ittème ligne
  215. ISTRT=AMORS.IA(ITTDDL)
  216. ISTOP=AMORS.IA(ITTDDL+1)-1
  217. TNORM=XZERO
  218. DO 1521 IJA=ISTRT,ISTOP
  219. TNORM=TNORM+ABS(AISA.A(IJA))
  220. 1521 CONTINUE
  221. * WRITE(IOIMP,*) 'ITTDDL=',ITTDDL,' TNORM=',TNORM
  222. *
  223. C IF (TNORM.EQ.0.D0) THEN
  224. C WRITE(IOIMP,*) 'The ',ITTDDL,'th line is zero'
  225. CC Résolution impossible détectée au noeud %i1 pour l'inconnue %m1:4
  226. C SEGACT MYMINC
  227. C SEGACT MYPTS
  228. C N2=IDMAT.NUNA(ITTDDL)
  229. C CALL DDL2PI(N2,MYMINC,
  230. C $ IPT,IBI,
  231. C $ IMPR,IRET)
  232. C IF (IRET.NE.0) GOTO 9999
  233. C INTERR(1)=MYPTS.NUM(1,IPT)
  234. C MOTERR(1:8)=MYMINC.LISINC(IBI)
  235. C CALL ERREUR(143)
  236. C SEGDES MYPTS
  237. C SEGDES MYMINC
  238. C GOTO 9999
  239. C ENDIF
  240. GGIS.PROG(ITTDDL)=(TNORM/DBLE(ISTOP-ISTRT+1))*YZPREC
  241. 152 CONTINUE
  242. NBVD=KZA(/1)
  243. SEGINI IZD
  244. IDMAT.IDIAG=IZD
  245. ISAU=0
  246. DO 601 IBLK=1,NBLK
  247. * Gestion du CTRL-C
  248. if (ierr.NE.0) return
  249. C NUMÉROS DES LIGNES DE DÉBUT ET DE FIN DE BLOC KJD,KJF
  250. KJD=NLDBLK(IBLK)
  251. KJF=NLDBLK(IBLK+1)-1
  252. KA=0
  253. KA=KA+KZA(1)-1
  254. NUIA(1,1)=1
  255. DO 600 KJ=KJD,KJF
  256. NUIA(KJ,1)=IBLK
  257. NUIA(KJ,2)=KA
  258. KA=KA+KZA(KJ)-1
  259. 600 CONTINUE
  260. C ALLOCATION DE LA MÉMOIRE POUR LE BLOC
  261. NBVA=KA
  262. * WRITE(IOIMP,*) '* BLOC LOWER NUMERO : ',IBLK,' TAILLE = '
  263. * $ ,NBVA,' MOTS'
  264. SEGINI IZA
  265. IDESCL(IBLK)=IZA
  266. IDESCU(IBLK)=IZA
  267. IF(KSIM.EQ.2)IDESCU(IBLK)=NBVA
  268. IF(IBLK.EQ.1)THEN
  269. KJD=1
  270. D(1)=AISA.A(1)
  271. ENDIF
  272. DO 602 LI=KJD,KJF
  273. NBK=AMORS.IA(LI+1)-AMORS.IA(LI)
  274. I1=AMORS.IA(LI)
  275. DO 603 K=1,NBK
  276. MA=I1+K-1
  277. KO=AMORS.JA(MA)
  278. IF(LI.GT.KO)THEN
  279. NA=KO-LI+KZA(LI)+NUIA(LI,2)
  280. A(NA)=AISA.A(MA)
  281. ELSEIF(LI.EQ.KO.AND.LI.NE.1)THEN
  282. D(LI)=AISA.A(MA)
  283. ELSE
  284. GO TO 602
  285. ENDIF
  286. 603 CONTINUE
  287. 602 CONTINUE
  288. SEGDES IZA
  289. 601 CONTINUE
  290. IF(KSIM.EQ.2)THEN
  291. DO 604 IBLK=1,NBLK
  292. * Gestion du CTRL-C
  293. if (ierr.NE.0) return
  294. KJD=NLDBLK(IBLK)
  295. KJF=NLDBLK(IBLK+1)-1
  296. NBVA=IDESCU(IBLK)
  297. SEGINI IZA
  298. IDESCU(IBLK)=IZA
  299. IF(IBLK.EQ.1)THEN
  300. KJD=1
  301. ENDIF
  302. LDEB=KJD
  303. DO 605 KO=KJD,KJF
  304. L0=KO-KZA(KO)+1
  305. IF(LDEB.GT.L0)LDEB=L0
  306. 605 CONTINUE
  307. DO 606 LI=LDEB,KJF
  308. NBK=AMORS.IA(LI+1)-AMORS.IA(LI)
  309. I1=AMORS.IA(LI)
  310. DO 607 K=NBK,1,-1
  311. MA=I1+K-1
  312. KO=AMORS.JA(MA)
  313. IF(KO.GT.KJF)GO TO 607
  314. IF(KO.LT.KJD)GO TO 606
  315. IF(LI.LT.KO)THEN
  316. NA=LI-KO+KZA(KO)+NUIA(KO,2)
  317. A(NA)=AISA.A(MA)
  318. ELSE
  319. GO TO 606
  320. ENDIF
  321. 607 CONTINUE
  322. 606 CONTINUE
  323. SEGDES IZA
  324. 604 CONTINUE
  325. ENDIF
  326. SEGDES AISA
  327. SEGDES AMORS
  328. *STAT CALL PRMSTA('Remplissage des blocs',MSTAT,1)
  329. IF(KSIM.EQ.0.OR.KSIM.EQ.2)THEN
  330. DO 200 IBLK=1,NBLK
  331. * Gestion du CTRL-C
  332. if (ierr.NE.0) return
  333. KJD=NLDBLK(IBLK)
  334. KJF=NLDBLK(IBLK+1)-1
  335. ISAU=IDESCU(IBLK)
  336. ISAL=IDESCL(IBLK)
  337. SEGACT ISAU*MOD
  338. SEGACT ISAL*MOD
  339. IF(IBLK.NE.1)THEN
  340. ISAL0=0
  341. ISAU0=0
  342. C SEGACT ISAL0
  343. C SEGACT ISAU0
  344. ISAL00=0
  345. ISAU00=0
  346. LACTL=.FALSE.
  347. LACTU=.FALSE.
  348. KJD0=KJD-KZA(KJD)+1
  349. DO 304 I=KJD+1,KJF
  350. KLD=I-KZA(I)+1
  351. IF(KLD.LT.KJD0)KJD0=KLD
  352. 304 CONTINUE
  353. DO 302 I=KJD0,KJD-1
  354. LDEB=I-KZA(I)+1
  355. DO 301 N=KJD,KJF
  356. KDEB=N-KZA(N)+1
  357. IF(KDEB.LE.I) THEN
  358. C Calcul colonne n
  359. K1=MAX(KDEB,LDEB)
  360. LG=I-K1
  361. KL=NUIA(I,2)+K1-LDEB+1
  362. KU=NUIA(N,2)+K1-KDEB+1
  363. ISAL00=IDESCL(NUIA(I,1))
  364. LACTL=(ISAL00.NE.ISAL0.AND.ISAL00.NE.ISAL)
  365. IF (LACTL) THEN
  366. IF (ISAL0.NE.0) THEN
  367. SEGDES ISAL0
  368. ENDIF
  369. SEGACT ISAL00
  370. ENDIF
  371. ISAL0=ISAL00
  372. * US=SDOT(LG,ISAL00.A(KL),1,ISAU.A(KU),1)
  373. US=0.D0
  374. DO ILG=0,LG-1
  375. US=US+ISAL00.A(KL+ILG)*ISAU.A(KU+ILG)
  376. ENDDO
  377. KU=NUIA(N,2)+I-KDEB+1
  378. ISAU.A(KU)=(ISAU.A(KU)-US)
  379. C WRITE(IOIMP,*)' KU=',KU,' I=',I,' A(KU)=',ISAU.A(KU)
  380. IF(KSIM.NE.0)THEN
  381. C Calcul ligne n
  382. KU=NUIA(I,2)+K1-LDEB+1
  383. KL=NUIA(N,2)+K1-KDEB+1
  384. ISAU00=IDESCU(NUIA(I,1))
  385. LACTU=(ISAU00.NE.ISAU0.AND.ISAU00.NE.ISAU)
  386. IF (LACTU) THEN
  387. IF (ISAU0.NE.0) THEN
  388. SEGDES ISAU0
  389. ENDIF
  390. SEGACT ISAU00
  391. ENDIF
  392. ISAU0=ISAU00
  393. * US=SDOT(LG,ISAL.A(KL),1,ISAU00.A(KU),1)
  394. US=0.D0
  395. DO ILG=0,LG-1
  396. US=US+ISAL.A(KL+ILG)*ISAU00.A(KU+ILG)
  397. ENDDO
  398. KL=NUIA(N,2)+I-KDEB+1
  399. ISAL.A(KL)=(ISAL.A(KL)-US)
  400. ENDIF
  401. ENDIF
  402. 301 CONTINUE
  403. 302 CONTINUE
  404. IF (ISAL00.NE.ISAL.AND.ISAL00.NE.0) THEN
  405. SEGDES ISAL00
  406. ENDIF
  407. IF (ISAU00.NE.ISAU.AND.ISAU00.NE.0) THEN
  408. SEGDES ISAU00
  409. ENDIF
  410. ENDIF
  411. DO 202 I=KJD,KJF
  412. LDEB=I-KZA(I)+1
  413. KL=NUIA(I,2)
  414. DO 2011 II=LDEB,I-1
  415. ISAL.A(KL+II-LDEB+1)=ISAL.A(KL+II-LDEB+1)/D(II)
  416. 2011 CONTINUE
  417. IF(KSIM.EQ.2)THEN
  418. KL=NUIA(I,2)
  419. DO 2012 II=LDEB,I-1
  420. ISAU.A(KL+II-LDEB+1)=ISAU.A(KL+II-LDEB+1)/D(II)
  421. 2012 CONTINUE
  422. ENDIF
  423. C Calcul diagonale
  424. N=I
  425. IF(N.NE.1) THEN
  426. LG=N-LDEB
  427. KK=NUIA(N,2)+1
  428. US=0.D0
  429. DO 3003 II=1,LG
  430. US=US+
  431. $ ISAL.A(KK+II-1)
  432. $ *D(II+LDEB-1)*ISAU.A(KK+II-1)
  433. 3003 CONTINUE
  434. D(N)=D(N)-US
  435. ENDIF
  436. C! DEBUT
  437. ADK=ABS(D(N))
  438. * WRITE(IOIMP,*) 'N=',N,' ADK=',ADK
  439. IF(ADK.LE.GGIS.PROG(N))THEN
  440. IKOMPT=IKOMPT+1
  441. *
  442. * Désactivation temporaire, sinon des cas-tests (mal conçus !) plantent
  443. *
  444. C Résolution impossible détectée au noeud %i1 pour l'inconnue %m1:4
  445. * INTERR(1)=N
  446. * MOTERR(1: 8) = ' '
  447. * CALL ERREUR(143)
  448. IF (IKOMPT.EQ.1) THEN
  449. WRITE(IOIMP,*) '!!!!!!!!!!!!! WARNING !!!!!!!!!'
  450. IF (LISDDL) THEN
  451. SEGACT MYMINC
  452. SEGACT MYPTS
  453. DO IDDL=1,MIN(10,NTTDDL)
  454. N2=IDMAT.NUNA(IDDL)
  455. CALL DDL2PI(N2,MYMINC,
  456. $ IPT,IBI,
  457. $ IMPR,IRET)
  458. IF (IRET.NE.0) GOTO 9999
  459. WRITE(IOIMP,*) 'ddl ',IDDL
  460. $ ,' = point numero ',MYPTS.NUM(1,IPT),
  461. $ ' inconnue ',MYMINC.LISINC(IBI)
  462. ENDDO
  463. SEGDES MYPTS
  464. SEGDES MYMINC
  465. ENDIF
  466. ENDIF
  467. IF (IKOMPT.LE.10.OR.ADK.EQ.0.D0) THEN
  468. WRITE(IOIMP,*) 'Au ddl ',N,'le pivot vaut ',ADK,
  469. $ ' ; norme de la ligne =',GGIS.PROG(N)
  470. $ /YZPREC
  471. IF (LISDDL) THEN
  472. N2=IDMAT.NUNA(N)
  473. CALL DDL2PI(N2,MYMINC,
  474. $ IPT,IBI,
  475. $ IMPR,IRET)
  476. IF (IRET.NE.0) GOTO 9999
  477. SEGACT MYMINC
  478. SEGACT MYPTS
  479. IF (ADK.EQ.0.D0) THEN
  480. INTERR(1)=MYPTS.NUM(1,IPT)
  481. MOTERR(1:8)=MYMINC.LISINC(IBI)
  482. CALL ERREUR(143)
  483. GOTO 9999
  484. ELSE
  485. WRITE(IOIMP,*) 'ddl ',N,' = point numero '
  486. $ ,MYPTS.NUM(1,IPT),' inconnue ',MYMINC
  487. $ .LISINC(IBI)
  488. ENDIF
  489. SEGDES MYPTS
  490. SEGDES MYMINC
  491. ELSE
  492. IF (ADK.EQ.0.D0) THEN
  493. INTERR(1)=N
  494. * 49 2
  495. *Matrice singulière. Numéro de ligne =%i1
  496. CALL ERREUR(49)
  497. GOTO 9999
  498. ENDIF
  499. ENDIF
  500. IF (ADK.EQ.0.D0) RETURN
  501. ELSE IF (IKOMPT.EQ.11) THEN
  502. WRITE(IOIMP,*) 'Plus de 10 pivots petits'
  503. ELSE
  504. * Temporairement désactivé pour cause de mauvais cas-tests : difasyk2Dax.dgibi
  505. * GOTO 9999
  506. ENDIF
  507. D(N)=GGIS.PROG(N)
  508. * D(N)=1.D-200
  509. ENDIF
  510. C! FIN
  511. I1=I+1
  512. DO 201 N=I1,KJF
  513. KDEB=N-KZA(N)+1
  514. IF(KDEB.LE.I) THEN
  515. C Calcul colonne n
  516. K1=MAX(KDEB,LDEB)
  517. LG=I-K1
  518. KL=NUIA(I,2)+K1-LDEB+1
  519. KU=NUIA(N,2)+K1-KDEB+1
  520. * US=SDOT(LG,ISAL.A(KL),1,ISAU.A(KU),1)
  521. US=0.D0
  522. DO ILG=0,LG-1
  523. US=US+ISAL.A(KL+ILG)*ISAU.A(KU+ILG)
  524. ENDDO
  525. *
  526. KU=NUIA(N,2)+I-KDEB+1
  527. ISAU.A(KU)=(ISAU.A(KU)-US)
  528. IF(KSIM.NE.0) THEN
  529. C Calcul ligne n
  530. KU=NUIA(I,2)+K1-LDEB+1
  531. KL=NUIA(N,2)+K1-KDEB+1
  532. * US=SDOT(LG,ISAL.A(KL),1,ISAU.A(KU),1)
  533. US=0.D0
  534. DO ILG=0,LG-1
  535. US=US+ISAL.A(KL+ILG)*ISAU.A(KU+ILG)
  536. ENDDO
  537. *
  538. KL=NUIA(N,2)+I-KDEB+1
  539. ISAL.A(KL)=(ISAL.A(KL)-US)
  540. ENDIF
  541. ENDIF
  542. 201 CONTINUE
  543. 202 CONTINUE
  544. SEGDES ISAL
  545. SEGDES ISAU
  546. 200 CONTINUE
  547. SEGSUP GGIS
  548. ELSE
  549. WRITE(IOIMP,*)' TRIALU : KSIM=',KSIM,' Cas non prevu '
  550. GOTO 9999
  551. ENDIF
  552. *STAT CALL PRMSTA('Triangulation',MSTAT,1)
  553. SEGDES IZD
  554. SEGDES IDMAT
  555. ENDIF
  556. *
  557. * Normal termination
  558. *
  559. IRET=0
  560. RETURN
  561. *
  562. * Format handling
  563. *
  564. *
  565. * Error handling
  566. *
  567. 9999 CONTINUE
  568. IRET=1
  569. WRITE(IOIMP,*) 'An error was detected in subroutine trialu.eso'
  570. RETURN
  571. *
  572. * End of subroutine TRIALU
  573. *
  574. END
  575.  
  576.  

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