Télécharger chomod.eso

Retour à la liste

Numérotation des lignes :

  1. C CHOMOD SOURCE CB215821 17/07/25 12:27:26 9516
  2. C
  3. C DECOMPOSITION DE CROUT MODIFIEE POUR LE CALCUL DES MATRICES
  4. C CONDENSEES D'UN SUPER-ELEMENT
  5. C RESULTAT DANS XMATRI
  6. C
  7. SUBROUTINE CHOMOD(MMATRX,NBNNMA,SNTT,SNTO,XMATRI,NLIGRA)
  8. IMPLICIT INTEGER(I-N)
  9. IMPLICIT REAL*8(A-H,O-Z)
  10. C TANT QUE OOOVAL(1,4) NE MARCHE PAS SUR CRAY
  11. PARAMETER (LPCRAY=10000)
  12. INTEGER OOOVAL,ILIMITE,OOOLEN
  13. dimension ittime(4)
  14. SEGMENT ITMASQ(NBLIG)
  15. SEGMENT IMASQ(LMASQ)
  16. POINTEUR LILIGN.MILIGN
  17. external chole3i
  18. C
  19. LOGICAL TEST1,LIMIT
  20. C
  21. C **** MISE SOUS FORME A=Lt D L DE LA MATRICE MMATRX
  22. C
  23. -INC CCOPTIO
  24. -INC SMMATRI
  25. -INC SMRIGID
  26. -INC CCASSIS
  27. -INC CCHOLE
  28. C
  29. SEGMENT SNTO
  30. INTEGER NTOTMA(NN)
  31. ENDSEGMENT
  32. C
  33. SEGMENT SNTT
  34. INTEGER NTTMAI(NN)
  35. ENDSEGMENT
  36. C
  37. SEGMENT KIVPO(IIMAX)
  38. SEGMENT KIVLO(IIMAX)
  39. SAVE IPASV
  40. DATA IPASV/0/
  41. DATA PREC /1D-18/
  42. C character*8 zen
  43. C equivalence (zen,izen)
  44. call timespv(ittime)
  45. kcour=(ittime(1)+ittime(2))/10
  46. kcourp=kcour
  47. kcouri=kcour
  48. kdiff=0
  49. kcour=0
  50. perf=0.d0
  51. perfp=-1
  52. nbchan=1
  53. nbopit=0
  54. iposm=0
  55. C zen='CPU'//char(0)
  56. C le=4
  57. lolig=0
  58. nvaor=0
  59. nbthro=nbthrs
  60. ithrd=0
  61. if (nbthro.gt.1) then
  62. ithrd=1
  63. call threadii
  64. endif
  65. nbthr=nbthro
  66. do ith=1,nbthro
  67. nbop(ith)=0
  68. enddo
  69.  
  70. C nouvelle methode de gestion de l'espace memoire necessitee par la parallelisation
  71. C memoire vive totale
  72. MACTIT=OOOVAL(1,1)
  73. C un bloc de memoire fera au plus macti/2
  74. nvstrm=0
  75. MMATRI=MMATRX
  76. SEGACT,MMATRI*MOD
  77. PRCHLV=PREC
  78. MILIGN=IILIGN
  79.  
  80. SEGACT,MILIGN*MOD
  81. INO=ILIGN(/1)
  82. MDIAG=IDIAG
  83. SEGACT,MDIAG*MOD
  84. NBLIG=INO
  85.  
  86. SEGINI ITMASQ
  87. precc=prec
  88. INC=DIAG(/1)
  89. nvstrm=inc
  90. INCC=INC
  91. MIMIK=IIMIK
  92. MINCPO=IINCPO
  93. SEGACT,MINCPO,MIMIK
  94. IPLUMI=IMIK(/2)*2 +4
  95. IL2=0
  96. IIMAX=IJMAX+IPLUMI
  97. SEGINI KIVPO,KIVLO
  98. INEG=0
  99. NBLAG=0
  100. NENSLX=0
  101. NVSTOC=0
  102. NVSTOR=0
  103. NLIGRP=NLIGRA
  104. NLIGRD=NLIGRA
  105. C
  106. C ngmaxy vient de option
  107. C ngmaxx est la valeur autoajustee
  108. C ngmaxz est la valeur utilisee dans les tests (grande si il y a du debordement)
  109. ngmaxx=ngmaxy
  110. NGMAXZ=NGMAXX
  111. C
  112. nelrig=1
  113. SEGINI,XMATRI
  114. C
  115. C** ILIMITE = nb de noeuds qui ne sont pas maitres
  116. C
  117. SEGACT,SNTO
  118. SEGACT,SNTT
  119. ILIMITE = INO - (NTOTMA(/1) + NTTMAI(/1))
  120. TEST1=.FALSE.
  121. IF(ILIMITE.EQ.0) THEN
  122. IL2=0
  123. TEST1=.TRUE.
  124. ENDIF
  125. NGMAXZ=NGMAXY
  126.  
  127. LIMIT=.FALSE.
  128. C
  129. C **** DEBUT DE LA TRIANGULARISATION. ON PREND NOEUD A NOEUD,
  130. C **** DECOMPACTAGE PUIS TRAVAIL SUR LES LIGNES DU NOEUD
  131. C
  132. C **** LA LONGUEUR DE LA PLUS GRANDE LIGNE EST DONNEE PAR IMAX
  133. C
  134. 1 CONTINUE
  135. IF (TEST1) LIMIT=.TRUE.
  136. C
  137. IVALMA=IJMAX+IPLUMI
  138. IL1=IL2+1
  139. IMIN=IL1
  140.  
  141. mactic=0
  142. DO 2 I=IL1,INO
  143. LLIGN=ILIGN(I)
  144. SEGACT /ERR=3/LLIGN
  145. NA=IMMMM(/1)
  146. NBPAR=NA+1
  147. NVALL=NJMAX
  148. lolig=nvall/na+1
  149. if (lolig.gt.6000.and.lolig.gt.2*loligp.and.
  150. > mactic.gt.NGMAXZ*nbthro/2 .and.
  151. > i-il1.ge.nbthro) goto 3
  152. loligp=lolig
  153. SEGINI /ERR=3/ LIGN
  154. C recuperer la longueur du segment
  155. mactic=mactic+ooolen(lign)
  156. if ((mactic.gt.mactit/2.or.mactic.gt.mactit-nvstrm*12)
  157. > .AND.I.GT.IL1) THEN
  158. SEGSUP LIGN
  159. GOTO 3
  160. endif
  161. NVSTOC=NVSTOC + NVALL
  162. IVALMA=IVALMA+NVALL
  163. nvaor=nvaor+xxva(/1)
  164. C
  165. C **** DECOMPACTAGE
  166. C
  167. LMASQ=NVALL/MASDIM+2
  168. SEGINI IMASQ
  169. IPA=1
  170. DO 121 JPA=1,NA
  171. IVPO(JPA)=IPA
  172. KPA=IPPO(JPA+1)-IPPO(JPA)
  173. IPP=IPPO(JPA)
  174. IPPVV(JPA)=IPA-1
  175. LPA=LDEB(JPA)
  176. LPA1=LPA-IPA
  177. DO 122 MPA=1,KPA
  178. LL=LINC(MPA+IPP)
  179. IPLA=LL-LPA1
  180. VAL(IPLA)=XXVA(MPA+IPP)
  181. IMASQ(IPLA/MASDIM+1)=1
  182. if (ipla-ipa+1.ge.1) IMASQ((IPLA-ipa+1)/MASDIM+1)=1
  183. 122 CONTINUE
  184. IPA=IPA+IMMMM(JPA)-LPA+1
  185. Cpv IMMM(JPA)=IPNO(LPA)
  186. IMMM(JPA)=LPA
  187. IF(IMIN.GT.IPNO(LPA)) IMIN=IPNO(LPA)
  188. 121 CONTINUE
  189. * indexation de imasq
  190. ipln=lmasq/na
  191. iplp=lmasq/na
  192. do 123 ipl=lmasq/na,1,-1
  193. if (imasq(ipl).gt.0) then
  194. imasq(ipl)=iplp*masdim
  195. ipln=ipl-1
  196. else
  197. imasq(ipl)=-ipln*masdim
  198. iplp=ipl-1
  199. endif
  200. 123 continue
  201. ** write (6,*) ' imasq ',lmasq/na
  202. ** write (6,*) (imasq(ipl),ipl=1,lmasq/na)
  203. C*** **** ****
  204. ITMASQ(I)=IMASQ
  205.  
  206.  
  207. if (na.gt.0) then
  208. IPREL= IMMMM(1)
  209. IDERL= IMMMM(NA)
  210. lcara(2,i)=iprel
  211. lcara(3,i)=iderl
  212. endif
  213. IPPVV(NA+1)=IPA-1
  214. SEGSUP LLIGN
  215. ILIGN(I)=LIGN
  216. IF(IIMPI.EQ.1525) THEN
  217. WRITE( IOIMP,4987) I
  218. 4987 FORMAT (' NOEUD NUMERO ',I5)
  219. LL=VAL(/1)
  220. WRITE(IOIMP, 4926)(VAL(MPA),MPA=1,LL)
  221. 4926 FORMAT(' VAL ' , 10E11.4)
  222. ENDIF
  223. nbths=nbthr
  224. C
  225. IF ((I.EQ.(ILIMITE)).AND.(.NOT.TEST1)) THEN
  226. TEST1=.TRUE.
  227. IL2 = I
  228. GOTO 4
  229. ENDIF
  230. C* write (6,*) 'longueur ligne ',nvall
  231. C nb de ligne multiple du nb de threads
  232. C blocage ligne lecture-ecriture pour minimiser le cache
  233. if (mod(i+1-il1,nbths).eq.0
  234. > .and.mactic.gt.NGMAXZ*nbthro.OR.I+1-il1.gt.1000) then
  235. il2=i
  236. GOTO 4
  237. endif
  238. 2 CONTINUE
  239. IL2=INO
  240. GO TO 4
  241. 3 IL2=I-1
  242. 4 CONTINUE
  243. nbthro=nbthrs
  244. if (mactic.le.50000) nbthro=1
  245. nbthr=nbthro
  246. C
  247. IF(IL2.GE.IL1) GO TO 40
  248. C
  249. C **** APPEL AUX ERREURS MESSAGE PAS ASSEZ DE PLACE MEMOIRE
  250. C
  251. ITYP=48
  252. CALL ERREUR(48)
  253. if (ithrd.eq.1) call threadis
  254. RETURN
  255. 40 CONTINUE
  256. IM=INC
  257.  
  258.  
  259.  
  260.  
  261. DO 352 IH=IL2 ,IL1,-1
  262. LIGN= ILIGN(IH )
  263. IL=INC
  264. DO 354 JH=1, IMMM(/1)
  265. IM=MIN(IM, IMMM(JH))
  266. IL=MIN(IL, IMMM(JH))
  267. 354 CONTINUE
  268. IML=IL
  269. IMM=ipno(IM)
  270. 352 CONTINUE
  271. C 353 CONTINUE
  272. LIGN=ILIGN(IL1)
  273. IL11=IPREL
  274. C
  275. C **** BOUCLE *5* TRAVAILLE SUR LE NOEUD I QUI EST EN LECTURE
  276. C
  277. C if (ngmaxz.eq.ngmaxx) write (6,*) 'resolution in core ',il1,il2
  278. C if (ngmaxz.ne.ngmaxx) write (6,*) 'resolution out of core ',
  279. C > il1,il2
  280. lig1=ilign(imin)
  281. ipos=0
  282. iper=imin
  283. ider=imin-1
  284. iderac=imin-1
  285. if (ngmaxz.lt.ngmaxx*2) ngmaxz=ngmaxx
  286. macsec=0
  287. isec=0
  288. DO 5 I=IMIN,IL2
  289. IMASQ=ITMASQ(I)
  290. LIG1=ILIGN(I)
  291. IF(I.LT.IL1) GO TO 7
  292. C____________
  293. C
  294. C ******* LE NOEUD I EST EN MEMOIRE IL EST TRIANGULE JUSQU'A
  295. C ******* IPREL IL FAUT CONTINUER TOUTE LES LIGNES PUIS CALCULER
  296. C ******* LE TERME DIAGONAL
  297. C
  298. LIGN=LIG1
  299. DO 156 KHG=1,IMMM(/1)
  300. II=IPREL-1+KHG
  301. IMMM(KHG)=0
  302. NN=IPPVV(KHG+1)
  303. NNM1=IPPVV(KHG)
  304. N=NN-NNM1
  305. DIAG(II)=VAL(NN)
  306. IF(N.EQ.1) THEN
  307. IF(LIMIT) THEN
  308. RE(II-NBNNMA,II-NBNNMA,1)=VAL(NN)
  309. GO TO 41
  310. ELSE
  311. GO TO 8
  312. ENDIF
  313. ENDIF
  314. NMI=N-II
  315. KI1=N-1
  316. KQ=-NMI
  317. IF(LIMIT) THEN
  318. C
  319. C ****** CAS NOEUD MAITRE
  320. C
  321. IDEP=MAX(IL11,1-NMI)
  322. KIDEP=IDEP+NMI
  323. VAL(NN)=VAL(NN)+
  324. # SUPER1(ILIGN,LIGN,VAL(1+IPPVV(KHG)),DIAG(1-NMI),IPNO(1-NMI),
  325. # IPPVV(1),KHG,IVPO(1),KIDEP,KI1,KQ,NBNNMA,XMATRI,
  326. # IMASQ(1),1+IPPVV(KHG),prec,nbop(1))
  327. imasq(nn/masdim+1)=1
  328. imasq(n/masdim+1)=1
  329. RE(II-NBNNMA,II-NBNNMA,1)=VAL(NN)
  330. GOTO 41
  331. ENDIF
  332. C
  333. C ****** CAS NOEUD NON MAITRE
  334. C
  335. IDEP=MAX(IL11,2-NMI)
  336. KIDEP=IDEP+NMI
  337. VAL(NN)=VAL(NN)+
  338. # CHOLE1(ILIGN,LIGN,VAL(1+IPPVV(KHG)),DIAG(1-NMI),IPNO(1-NMI),
  339. # IPPVV(1),KHG,IVPO(1),KIDEP,KI1,KQ,IMASQ(1),1+IPPVV(KHG),
  340. # prec,nbop(1))
  341. imasq(nn/masdim+1)=1
  342. imasq(n/masdim+1)=1
  343. C
  344. 8 CONTINUE
  345. IF(ITTR(II).EQ.0.AND.
  346. & ABS(VAL(NN)).GT.ABS(DIAG(II))*1.E-10) GO TO 12
  347. IF(ITTR(II).NE.0.AND.
  348. & ABS(VAL(NN)).GT.ABS(DIAG(II))*1.E-6 ) GO TO 12
  349. C
  350. C **** ON VIENT DE DETECTER UN MODE D'ENSEMBLE
  351. C **** ON AJOUTE A LA STRUCTURE UN RESSORT EGAL A CELUI QUI EXISTAIT
  352. C **** AU PREALABLE SUR CETTE INCONNUE.
  353. C
  354. C write (6,*) ' chomod nens ittr val diag ',ittr(ii),nens+1,
  355. C > val(nn),diag(ii),ii,ipno(ii),ilimite
  356. if (ittr(ii).eq.0) then
  357. VAL(NN)=DIAG(II)*1d0
  358. else
  359. VAL(NN)=val(nn)-4.D0*abs(DIAG(II))
  360. NENSLX=NENSLX+1
  361. endif
  362. NENS=NENS+1
  363. IMMM(KHG)=NENS
  364. 12 CONTINUE
  365. IMASQ(NN/MASDIM+1)=1
  366. IMASQ(N/MASDIM+1)=1
  367. DIAG(II)=VAL(NN)
  368. IF(DIAG(II).NE.0.d0) GO TO 41
  369. KQ1=1+NNM1
  370. KQN=N+NNM1
  371. DO 16 LFG=KQ1,KQN
  372. IF(VAL(LFG).NE.0.d0) GO TO 17
  373. 16 CONTINUE
  374. DIAG(II)=1.d0
  375. if (ittr(ii).ne.0) diag(ii)=-1.d0
  376. VAL(NN)=diag(ii)
  377. GO TO 41
  378. 17 CONTINUE
  379. diag(ii)=val(lfg)
  380. if (ittr(ii).ne.0) diag(ii)=-abs(diag(ii))
  381. val(nn)=diag(ii)
  382. goto 41
  383. C
  384. C **** ENVOI ERREUR MATRICE SINGULIERE
  385. C
  386. ITYP=49
  387. INTERR(1)=I
  388. CALL ERREUR(49)
  389. if (ithrd.eq.1) call threadis
  390. RETURN
  391. C
  392. C **** ON COMPTE LE NOMBRE DE TERMES DIAGONAUX NEGATIFS
  393. C ET LE NOMBRE DE MULTIPLICATEUR DE LAGRANGE
  394. C
  395. 41 IF(DIAG(II).LT.0.D0) INEG=INEG+1
  396. IF(ITTR(II).NE.0) NBLAG=NBLAG+1
  397. 156 CONTINUE
  398. NA=IMMM(/1)
  399. C
  400. C RECOMPACTAGE DE LIGN (DEJA ENTIEREMENT TRAITEE)
  401. C
  402. if (na.gt.0)
  403. >CALL COMPAC(VAL(1),NBPAR,KIVPO(1),KIVLO(1),
  404. # NVALL,IPPVV(1),IZROSF,NA,PREC,imasq(1),iprel,iderl)
  405. C
  406. C on recree lign car la compacter en place emiette la memoire
  407. segini,lig1
  408. do it=1,nvall
  409. lig1.val(it)=val(it)
  410. enddo
  411. do it=1,na
  412. lig1.immm(it)=immm(it)
  413. lig1.ippvv(it)=ippvv(it)
  414. enddo
  415. lig1.ippvv(na+1)=ippvv(na+1)
  416. lig1.iml=iml
  417. lig1.iprel=iprel
  418. lig1.iderl=iderl
  419. lcara(1,i)=iml
  420. lcara(2,i)=iprel
  421. lcara(3,i)=iderl
  422. segsup lign
  423. lign=lig1
  424. ilign(i)=lign
  425. NVSTOR=NVSTOR+NVALL
  426. nvstrm=max(nvstrm,nvall)
  427. DO 143 LHG=1,NBPAR
  428. IVPO(2*LHG-1)=KIVPO(LHG)
  429. IVPO(2*LHG)=KIVLO(LHG)
  430. 143 CONTINUE
  431. C si la ligne est petite, il n'y a pas interet a paralleliser
  432. nbthr=min(nbthro,(nvall*(il2-il1+1))/64 +1)
  433. segsup imasq
  434. imasq=itmasq(i)
  435. if (i.gt.1) then
  436. lig1=ilign(i-1)
  437. segdes lig1
  438. iderac=min(iderac,i-2)
  439. endif
  440. C
  441. C **** ON TRIANGULARISE LES AUTRES LIGNES
  442. C
  443. il1=il1+1
  444. if (il1.gt.il2) goto 5
  445. LIG1=ILIGN(I)
  446. lign=ilign(il1)
  447. IL11=IPREL
  448. goto 7
  449. 72 continue
  450. C write (6,*) ' chomod segact ',i,ILIMITE,il1,il2
  451. 71 continue
  452. if (i.lt.il1-10.and.i.ne.ilimite) then
  453. ngmaxz= (oooval(1,1)/nbths)*0.95
  454. c write (ioimp,*) ' passage au grand ngmax ',i,il1,il2,ngmaxz
  455. endif
  456. if (isec.ne.0) ider=isec
  457. macsec=0
  458. isec=0
  459. C soit parce qu'on a fini, soit parce qu'on manque de memoire
  460. C il faut executer les lignes activees puis les desactiver
  461. C lancer les chole3 et attendre qu'ils soient finis
  462. if (ipos.ne.0) then
  463. C write (6,*) ' lancement thread ',iper,ider,il1,il2
  464. if (iper.gt.ider) then
  465. write (6,*) ' erreur interne chole '
  466. call erreur(5)
  467. endif
  468. IF(I.LE.ILIMITE) THEN
  469. nbthr=min(nbthr,il2-il1+1)
  470. if (nbthr.ge.1) then
  471. LILIGN=MILIGN
  472. do ith=2,nbthr
  473. call threadid(ith,chole3i)
  474. enddo
  475. call chole3i(1)
  476. do ith=2,nbthr
  477. call threadif(ith)
  478. enddo
  479. C en multithread il peut y avoir n'importe quoi dans oov(1) du
  480. C aux acces simultanes et ca crache gemat. donc :
  481. oov(1)=0
  482. else
  483. LILIGN=MILIGN
  484. do ith=1,nbthr
  485. call chole3i(ith)
  486. enddo
  487. endif
  488. endif
  489. C test ctrlC
  490. if (ierr.ne.0) goto 9999
  491. iposm=max(iposm,ipos)
  492. ipos=0
  493. iderf=ider-1
  494. if (ider.ne.il1-1) iderf=ider
  495. do il=iderf,iper,-1
  496. lign=ilign(il)
  497. segdes lign
  498. C write (6,*) ' desactivation ligne ',il
  499. enddo
  500. iderac=min(iderac,iper-1)
  501. iper=ider+1
  502. C write (6,*) ' iper ider il1 ',iper,ider,il1
  503. if (i.eq.ilimite) goto 5
  504. if (iper.ne.il1) goto 7
  505. ENDIF
  506. goto 5
  507. 7 CONTINUE
  508. C blocage secondaire sur les lignes en lecture pour minimiser le cache
  509. ** if (isec.le.iper+nbthrs.and.i.lt.ILIMITE ) then
  510. ** if (macsec.gt.ngmaxz*nbthrs*2) then
  511. ** isec=i-1
  512. C on continue a activer pour voir si on doit passer en mode lent
  513. ** if (il2.gt.ilimite) goto 72
  514. ** endif
  515. ** endif
  516. C* if (i.gt.iderac) SEGACT/err=71/LIG1
  517. SEGACT/err=71/LIG1
  518. C macsec=macsec+ooolen(lig1)
  519. ipos=ipos+1
  520. ider=i
  521. if (i.gt.iderac) iderac=i
  522. if (i.eq.il1-1.and.i.le.ilimite) goto 71
  523. IF(I.EQ.ILIMITE) GOTO 71
  524. IF(I.GT.ILIMITE) THEN
  525. IPPR=LIG1.IPREL
  526. IDDR=LIG1.IDERL
  527. C
  528. C
  529. DO 10 JBI=IL1,IL2
  530. LIGN=ILIGN(JBI)
  531. IMASQ=ITMASQ(JBI)
  532. C
  533. C ****** CAS NOEUD MAITRE
  534. C
  535. CALL SUPER3(IPREL,IDERL,IPPVV(1),IPPR,IDDR,
  536. # IVPO(1),LIG1.IPPVV(1),VAL(1),
  537. # LIG1.VAL(1),LIG1.IVPO(1),NBNNMA,xmatri,
  538. # imasq(1),prec,nbop(1))
  539. IF(IMM.GT.I) GO TO 106
  540. 10 CONTINUE
  541. 106 CONTINUE
  542. IF(I.LT.IL1) then
  543. SEGDES,LIG1
  544. endif
  545. ENDIF
  546. 5 CONTINUE
  547. DO 11 I=IL1,IL2
  548. LIGN=ILIGN(I)
  549. SEGDES,LIGN
  550. 11 CONTINUE
  551. nbopt=0
  552. do ith=1,nbthro
  553. nbopt=nbopt+nbop(ith)
  554. nbop(ith)=0
  555. enddo
  556. nbopin=nbopt
  557. nbopit=nbopit+nbopin
  558. call timespv(ittime)
  559. kcourp=kcour
  560. kcour=(ittime(1)+ittime(2))/10
  561. kdiff=kcour-kcourp
  562. C* write (6,*) ' nb operation temps ',nbopin,kdiff
  563. if (kdiff.gt.5) then
  564. perf=nbopin/kdiff
  565. C* write (6,*) 'perf ngmaxy il1 il2',perf,ngmaxy,il1i,il2
  566. if (perf.lt.perfp*0.90 .and.nbchan.ne.1 ) then
  567. nbchan=1
  568. ngmaxx=ngmaxx*0.90
  569. perfp=perf
  570. elseif (nbchan.eq.0) then
  571. nbchan=-1
  572. ngmaxx=ngmaxx*1.10
  573. perfp=max(perf,perfp)
  574. else
  575. nbchan=0
  576. endif
  577. C* nbchan=0
  578. ngmaxx=max(10000,min(100000000,ngmaxx))
  579. ngmaxz=ngmaxx
  580. endif
  581.  
  582. iderac=min(iderac,il1-1)
  583. macsec=0
  584. isec=0
  585. IF(IL2.LT.INO) GO TO 1
  586.  
  587. C ON MET A JOUR LE NOMBRE DE TERMES DIAGONAUX NEGATIF
  588. C ON ENLEVE LE NOMBRE DE MULTIPLICATEUR DE LAGRANGE
  589. c INEG=INEG-NBLAG
  590. C on ne compte pas 2 fois les multiplicateurs qui vont etre
  591. C elimines lors de la resolution car mode d'ensemble
  592. INEG=INEG-(NBLAG-NENSLX)
  593. if (iimpi.ne.0.and.NENSLX.gt.0) WRITE(IOIMP,4820) NENSLX
  594. 4820 FORMAT(I12,' MODES D ENSEMBLE PORTANT SUR DES MULTIPLICATEURS',
  595. 1' DE LAGRANGE DETECTES')
  596.  
  597. IF (IIMPI.EQ.1)WRITE(IOIMP,4821) NVSTOC
  598. 4821 FORMAT( ' CHOMOD NOMBRE DE VALEURS DANS LE PROFIL',I9)
  599. IF (IIMPI.EQ.1)WRITE(IOIMP,4822) NVSTOR
  600. 4822 FORMAT( ' CHOMOD NOMBRE DE VALEURS STOCKEES DANS LE PROFIL',I9)
  601. IF (IIMPI.EQ.1)WRITE(IOIMP,4823) NVaor
  602. 4823 FORMAT( ' CHOMOD NOMBRE DE VALEURS initiales',I9)
  603. INTERR(1)=NVSTOR
  604. reaerr(1)=nvstor/inc**(4./3)
  605. reaerr(2)=2*nbopit/1D6/max(1,(kcour-kcouri))
  606. IF (IPASV.EQ.0) CALL ERREUR(-278)
  607. IPASV=1
  608. SEGDES,MINCPO
  609. SEGDES,MIMIK
  610. SEGDES,MMATRI
  611. SEGDES,MILIGN
  612. SEGDES,MDIAG
  613. SEGDES,SNTO
  614. SEGDES,SNTT
  615. * verif re
  616.  
  617. SEGDES,XMATRI
  618. MMATRX=MMATRI
  619. SEGSUP KIVPO,KIVLO,ITMASQ
  620. 9999 continue
  621. if (ithrd.eq.1) call threadis
  622. RETURN
  623. END
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  

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