Télécharger chomod.eso

Retour à la liste

Numérotation des lignes :

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

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