Télécharger reduaf.eso

Retour à la liste

Numérotation des lignes :

reduaf
  1. C REDUAF SOURCE CB215821 21/03/18 21:15:01 10922
  2.  
  3. C Reduction du champ par element jchelm sur le modele mmodtm
  4. C Le resultat est le champ par element mchel2 pour iret = 1 (KERRE=0),
  5. C sinon en cas d'erreur mchel2 = 0 pour iret = 0 (KERRE = num. erreur)
  6. C En sortie le champ mchel2 est un champ entierement actif.
  7. C (kich) en sortie mmodel deroule
  8.  
  9. SUBROUTINE REDUAF (jchelm,mmodtm,mchel2,istri,iret,KERRE)
  10.  
  11. IMPLICIT REAL*8(A-H,O-Z)
  12. IMPLICIT INTEGER (I-N)
  13.  
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17.  
  18. -INC SMCHAML
  19. -INC SMMODEL
  20.  
  21. -INC SMCOORD
  22. -INC SMELEME
  23. -INC SMLENTI
  24. -INC CCPRECO
  25. -INC CCASSIS
  26.  
  27. EXTERNAL LONG
  28.  
  29. segment izone(NZ,NSMOD)
  30. segment ismel(NZ,NSMOD)
  31.  
  32. segment icpr(nbpt)
  33. segment inde(jg)
  34.  
  35. CHARACTER*(NCONCH) conloc,MO24
  36. CHARACTER*(LOCOMP) nomloc
  37. CHARACTER*(16) typloc
  38. CHARACTER*(50) typ1
  39.  
  40.  
  41. LOGICAL BVALID,OOOVP1,dmopa
  42.  
  43.  
  44. melpv = 0
  45. ith1 = oothrd + 1
  46.  
  47. CG if (iimpi.eq.7203) then
  48. CG write(ioimp,*) 'Entree dans reduaf',mmodtm,jchelm
  49. CG call zpchel(jchelm,1)
  50. CG endif
  51. c write(6,*) 'Entree dans reduaf',jchelm,istri,mmodtm
  52. CALL oooho2(ihcour)
  53. iret = 1
  54. KERRE = 0
  55. mchel2 = 0
  56. MO24 =' '
  57.  
  58. IF(istri .EQ. 0)THEN
  59. C Extension du MMODEL en cas de modele de MELANGE et NON-STRICT
  60. CALL MODETE(mmodtm,mmodel,IMELAN)
  61. ELSEIF(istri .EQ. 1)THEN
  62. mmodel = mmodtm
  63. ELSE
  64. CALL ERREUR(5)
  65. ENDIF
  66.  
  67. NSMOD = mmodel.kmodel(/1)
  68. DO is = 1, NSMOD
  69. imodel = mmodel.kmodel(is)
  70. C Verification si on a un modele de DARCY actuellement incompatible
  71. C Car il se servent du MAILLAGE dans la TABLE DOMAINE et pas celui
  72. C contenu dans le MMODEL
  73. CALL PLACE(imodel.FORMOD,imodel.FORMOD(/2),IDARC,'DARCY')
  74. IF (IDARC .NE. 0) THEN
  75. mchel2=jchelm
  76. RETURN
  77. ENDIF
  78. ENDDO
  79.  
  80. C ---------------------------------------------------------------------
  81. C Preconditionnement de REDU
  82. C Verification que le resultat n'est pas deja dans le CCPRECO
  83. C ---------------------------------------------------------------------
  84. ITAILL = NBPRRE(ith1)
  85. DO 201 IPREC1 = 1, ITAILL
  86. IF (PRECMO(IPREC1,ith1) .NE. mmodel) GOTO 201
  87. IF (PRECM3(IPREC1,ith1) .NE. istri ) GOTO 201
  88. IF ((PRECM1(IPREC1,ith1) .NE. jchelm) .AND.
  89. & (PRECM2(IPREC1,ith1) .NE. jchelm)) GOTO 201
  90.  
  91. mchel2 = PRECM2(IPREC1,ith1)
  92. IF(mchel2 .NE. jchelm) CALL ACTOBJ('MCHAML ',mchel2,1)
  93. C IF (IPREC1 .EQ. NPREDU) THEN
  94. C PRINT *,' CCPRECO trop petit :',IPREC1
  95. C CALL ERREUR(5)
  96. C ENDIF
  97.  
  98. C Mise a jour du preconditionnement dans CCPRECO : Deplacement en position 1 du REDU deja fait
  99. IF (IPREC1 .EQ. 1) THEN
  100. RETURN
  101. ELSE
  102. DO IPREC2 = IPREC1,2,-1
  103. PRECMO(IPREC2,ith1) = PRECMO(IPREC2 - 1,ith1)
  104. PRECM1(IPREC2,ith1) = PRECM1(IPREC2 - 1,ith1)
  105. PRECM2(IPREC2,ith1) = PRECM2(IPREC2 - 1,ith1)
  106. PRECM3(IPREC2,ith1) = PRECM3(IPREC2 - 1,ith1)
  107. ENDDO
  108. PRECMO(1,ith1) = mmodel
  109. PRECM1(1,ith1) = jchelm
  110. PRECM2(1,ith1) = mchel2
  111. PRECM3(1,ith1) = istri
  112. RETURN
  113. ENDIF
  114. 201 CONTINUE
  115.  
  116. C 1 CONTINUE
  117.  
  118. C Mise a jour du preconditionnement dans CCPRECO : Deplacement pour ecrire le nouveau REDU en 1ere position
  119. ITAILL = MIN(ITAILL + 1, NPREDU)
  120. NBPRRE(ith1) = ITAILL
  121. DO IPRECO = ITAILL,2,-1
  122. PRECMO(IPRECO,ith1) = PRECMO(IPRECO - 1,ith1)
  123. PRECM1(IPRECO,ith1) = PRECM1(IPRECO - 1,ith1)
  124. PRECM2(IPRECO,ith1) = PRECM2(IPRECO - 1,ith1)
  125. PRECM3(IPRECO,ith1) = PRECM3(IPRECO - 1,ith1)
  126. ENDDO
  127. PRECMO(1,ith1) = mmodel
  128. PRECM1(1,ith1) = jchelm
  129. C PRECM2 est mis a jour plus loin avant de sortir
  130. PRECM3(1,ith1) = istri
  131.  
  132. mchelm = jchelm
  133. NZ = mchelm.imache(/1)
  134. L1 = mchelm.titche(/1)
  135. N3 = mchelm.infche(/2)
  136.  
  137. C -----------------------------------------
  138. C Cas tres particulier de MCHELM resultat :
  139. C -----------------------------------------
  140. IF (NZ.EQ.0) THEN
  141. CG if (iimpi.eq.7203) write(ioimp,*) 'CAS PARTICULIER NZ = 0'
  142. C Mise a jour du preconditionnement dans CCPRECO
  143. mchel2 = jchelm
  144. PRECM2(1,ith1) = jchelm
  145. RETURN
  146. ENDIF
  147.  
  148. C Quelques initialisations :
  149. C mlent2 contient le nombre d'elements du maillage de chaque sous-modele.
  150. jg = NSMOD
  151. call oooprl(1)
  152. SEGINI,mlent2,izone,ismel
  153.  
  154. C mlent3 contient les intersections entre les maillages determinees :
  155. C mlent3.lect(i3) avec ismel(iz,is) = i3 correspond a l'intersection
  156. C entre le maillage du sous-modele is et la sous-zone iz du champ si
  157. C la valeur de i3 n'est pas nulle !
  158.  
  159. jg = NSMOD * NZ
  160. SEGINI,mlent3
  161. call oooprl(0)
  162. NL3 = 0
  163. ISOZM = 0
  164.  
  165. icpr = 0
  166. inde = 0
  167. C
  168. C Regroupement des zones directement appariees avec un sous-modele
  169. C Recherche des zones pouvant intersecter le maillage d'un sous-modele
  170. DO 100 is = 1, NSMOD
  171. imodel = mmodel.kmodel(is)
  172. IF (imodel.nefmod.EQ.22) GOTO 100
  173. IF (imodel.nefmod.EQ.259) GOTO 100
  174. meleme = imodel.imamod
  175. CALL oooho1(meleme,IHO1)
  176. itypm = meleme.itypel
  177. mlent2.lect(is) = meleme.num(/2)
  178. C On parcourt tous les NZ chamelem elementaires.
  179. DO 101 iz = 1, NZ
  180. conloc = mchelm.conche(iz)
  181.  
  182. IF (conloc.NE.MO24 .AND.
  183. & conloc .NE.imodel.conmod(1:LCONMO)) GOTO 101
  184. C PRINT *,'REDUAF:',is,iz,':',conloc,':',imodel.conmod,':'
  185. ixx = 0
  186. ipt1 = mchelm.imache(iz)
  187. C Correspondance maillage sous-zone et sous-modele
  188. IF (ipt1.EQ.meleme) THEN
  189. ixx = 1
  190. C Pas de correspondance directe, recherche intersection potentielle
  191. ELSE
  192. IF (ipt1.itypel.NE.itypm) GOTO 102
  193.  
  194. CALL oooho1(ipt1,IHO2)
  195. C Verification dans le PRECONDITIONNEMENT si deja evaluee
  196. DO 400 III=1,NINTSA(ith1)
  197. IF(PMAMOD(III,ith1) .NE. meleme) GOTO 400
  198. IF(PMAMOH(III,ith1) .NE. IHO1 ) GOTO 400
  199. IF(PMACHA(III,ith1) .NE. ipt1 ) GOTO 400
  200. IF(PMACHH(III,ith1) .NE. IHO2 ) GOTO 400
  201. mlenti=PMLENT(III,ith1)
  202. C PRINT *,'REDUAF_PRECONDITION',oothrd,meleme,ipt1,mlenti
  203.  
  204. C IF(mlenti .EQ. 0) THEN
  205. C ixx = 0
  206. C ismel(iz,is) = 0
  207. C
  208. C ELSE
  209. NL3 = NL3 + 1
  210. mlent3.lect(NL3) = mlenti
  211. ixx = -1
  212. ismel(iz,is) = NL3
  213. C ENDIF
  214. GOTO 102
  215. 400 CONTINUE
  216.  
  217. C PRINT *,'REDUAF_INTERSECTION',oothrd,meleme,ipt1
  218.  
  219. C On va regarder si on n a pas deja evalue l'intersection :
  220. C (meme sous-modele is et sous-zone precedente ia<iz)
  221. DO ia = 1, iz-1
  222. IF (ipt1.EQ.mchelm.imache(ia)) THEN
  223. IF (ismel(ia,is).GT.0) THEN
  224. ixx = -2
  225. ismel(iz,is) = ismel(ia,is)
  226. GOTO 102
  227. ENDIF
  228. ENDIF
  229. ENDDO
  230. C (meme sous-zone iz et sous-modele ia<is)
  231. DO 103 ia = 1, is-1
  232. imode2 = mmodel.kmodel(ia)
  233. IF (imode2.nefmod.EQ.22) GOTO 103
  234. IF (imode2.nefmod.EQ.259) GOTO 103
  235. ipt2 = imode2.imamod
  236. IF (ipt2.EQ.meleme) THEN
  237. IF (ismel(iz,ia).GT.0) THEN
  238. ixx = -3
  239. ismel(iz,is) = ismel(iz,ia)
  240. GOTO 102
  241. ENDIF
  242. ENDIF
  243. 103 CONTINUE
  244.  
  245.  
  246. C Détermination de l'intersection de ipt1 et meleme :
  247. C Creation d'un tableau (LISTENTI) de correspondance des
  248. C elements de IPT1 qui sont dans MELEME
  249. nbno1 = ipt1.num(/1)
  250. nbel1 = ipt1.num(/2)
  251. IF (icpr.EQ.0) THEN
  252. nbpt = nbpts + 1
  253. np1 = nbpt - 1
  254. SEGINI,icpr
  255. ELSE
  256. DO j = 1, nbpt
  257. icpr(j) = 0
  258. ENDDO
  259. ENDIF
  260. DO j = 1, nbel1
  261. DO m = 1, nbno1
  262. ib = ipt1.num(m,j)
  263. icpr(ib) = icpr(ib) + 1
  264. ENDDO
  265. ENDDO
  266. iprec = icpr(1)
  267. DO j = 2, np1
  268. iprec = iprec + icpr(j)
  269. icpr(j) = iprec
  270. ENDDO
  271. jg = icpr(np1)
  272. icpr(nbpt) = jg
  273. IF (inde.EQ.0) THEN
  274. SEGINI,inde
  275. ELSE
  276. IF (jg.GT.inde(/1)) THEN
  277. SEGADJ,inde
  278. ENDIF
  279. DO j = 1, jg
  280. inde(j) = 0
  281. ENDDO
  282. ENDIF
  283. DO j = 1, nbel1
  284. DO m = 1, nbno1
  285. ib = ipt1.num(m,j)
  286. ia = icpr(ib)
  287. inde(ia) = j
  288. icpr(ib) = ia - 1
  289. ENDDO
  290. ENDDO
  291.  
  292.  
  293. C Fin du travail preparatoire pour le maillage ipt1
  294. ipt2 = imodel.imamod
  295. nbno2 = ipt2.num(/1)
  296. nbel2 = ipt2.num(/2)
  297. c* ipt2 = imodel.imamod = meleme
  298. c* nbno2 = ipt2.num(/1) = nbno1
  299. c* nbel2 = ipt2.num(/2) = mlent2.lect(is)
  300.  
  301.  
  302. C on fabrique le mlenti de correspondance
  303. C on dimensionne au nombre d elements de ipt2 = sous-modele is
  304. jg = nbel2
  305. SEGINI,mlenti
  306. ibon = 0
  307. DO 110 iel2 = 1, nbel2
  308. ia = ipt2.num(1,iel2)
  309. ideb = icpr(ia)+1
  310. ifin = icpr(ia+1)
  311. IF (ifin.LT.ideb) GOTO 110
  312. DO 111 ib = ideb, ifin
  313. iel1 = inde(ib)
  314. DO j = 1, nbno1
  315. IF (ipt2.num(j,iel2).NE.ipt1.num(j,iel1)) GOTO 111
  316. ENDDO
  317. ibon = ibon + 1
  318. mlenti.lect(iel2) = iel1
  319. GOTO 110
  320. 111 CONTINUE
  321. 110 CONTINUE
  322.  
  323. IF (ibon .EQ. 0) THEN
  324. C Intersection VIDE entre MELEME et IPT1
  325. ixx = 0
  326. ismel(iz,is) = 0
  327. SEGSUP,mlenti
  328.  
  329. ELSE
  330. C Intersection NON VIDE entre MELEME et IPT1
  331. IF (ibon.GT.nbel1) THEN
  332. C Si on a plus d'elements dans l'intersection que dans ipt1 !
  333. write(ioimp,*) 'REDUAF : Etiquette 11x intersection ?'
  334. ENDIF
  335. NL3 = NL3 + 1
  336. mlent3.lect(NL3) = mlenti
  337. ixx = -1
  338. ismel(iz,is) = NL3
  339. ENDIF
  340.  
  341. C Ajout dans le PRECONDITIONNEMENT : Ajout a la suite
  342. IF(mlenti .NE. 0)THEN
  343. IPLACE=MOD(NINTSA(ith1),MIN(NTRIPL,NBESCR))+1
  344. C PRINT *,'REDUAF_AJOUT',oothrd,IPLACE,meleme,ipt1,mlenti
  345. PMAMOD(IPLACE,ith1) = meleme
  346. PMAMOH(IPLACE,ith1) = IHO1
  347. PMACHA(IPLACE,ith1) = ipt1
  348. PMACHH(IPLACE,ith1) = IHO2
  349. PMLENT(IPLACE,ith1) = mlenti
  350. NINTSA(ith1) = IPLACE
  351. ENDIF
  352. ENDIF
  353. CG write(*,*) ' -',iz,is,ixx,ismel(iz,is)
  354.  
  355.  
  356. 102 CONTINUE
  357. C Sous-zone du mchelm a traiter
  358. IF (ixx .NE. 0) THEN
  359. DO 105 ia = 1, iz-1
  360. ib = izone(ia,is)
  361. IF (ib.EQ.0) GOTO 105
  362. IF (conche(ia)(1:NCONCH).NE.conloc) GOTO 105
  363. DO k = 1, N3
  364. IF (k.NE.4) THEN
  365. IF (infche(ia,k).NE.infche(iz,k)) GOTO 105
  366. ENDIF
  367. ENDDO
  368. izone(iz,is) = ib
  369. GOTO 106
  370. 105 CONTINUE
  371. ISOZM = ISOZM + 1
  372. izone(iz,is) = ISOZM
  373. 106 CONTINUE
  374. ENDIF
  375. CG write(*,*) ' -',iz,is,ixx,izone(iz,is)
  376. 101 CONTINUE
  377. 100 CONTINUE
  378.  
  379. IF (icpr.NE.0) SEGSUP,icpr
  380. IF (inde.NE.0) SEGSUP,inde
  381.  
  382.  
  383.  
  384.  
  385. C ---------------------------------
  386. C Construction du MCHELM resultat :
  387. C ---------------------------------
  388. C Grace au traitement ci-dessus (boucle 105), ISOZM correspond a N1 :
  389. N1 = ISOZM
  390. L1 = mchelm.titche(/1)
  391. N3 = mchelm.infche(/2)
  392.  
  393. CALL oooprl(1)
  394. SEGINI,mchel2
  395. mchel2.titche = mchelm.titche
  396. mchel2.ifoche = mchelm.ifoche
  397.  
  398. C Pour chaque sous-modele "is", on regroupe les sous-zones du mchelm "iz"
  399. C associees (izone(iz,is) > 0) :
  400. DO 200 is = 1, NSMOD
  401. imodel = kmodel(is)
  402. IF (imodel.nefmod.EQ.22) GOTO 200
  403. IF (imodel.nefmod.EQ.259) GOTO 200
  404. ipt2 = imodel.imamod
  405. nbel2 = mlent2.lect(is)
  406.  
  407. DO 210 iz = 1, NZ
  408. in1 = izone(iz,is)
  409. IF (in1.LE.0) GOTO 210
  410. mchaml = mchelm.ichaml(iz)
  411. n21 = mchaml.ielval(/1)
  412.  
  413. C Cas particulier du mchaml sans composante (on ne fait rien) :
  414. IF (n21.EQ.0) GOTO 210
  415.  
  416. IF (mchel2.imache(in1).EQ.0) THEN
  417. CG write(ioimp,*) ' Cas 1 :',mchel2.imache(in1)
  418. mchel2.conche(in1) = mchelm.conche(iz)
  419. mchel2.imache(in1) = ipt2
  420. DO k = 1, N3
  421. mchel2.infche(in1,k) = mchelm.infche(iz,k)
  422. ENDDO
  423. n22 = 0
  424. n2 = n22 + n21
  425. SEGINI,mcham2
  426. mchel2.ichaml(in1) = mcham2
  427. ELSE
  428. CG write(ioimp,*) ' Cas 2 :',mchel2.imache(in1)
  429. mcham2 = mchel2.ichaml(in1)
  430. n22 = mcham2.ielval(/1)
  431. n2 = n22 + n21
  432. SEGADJ,mcham2
  433. ENDIF
  434.  
  435. mlenti = ismel(iz,is)
  436. IF (mlenti.GT.0) mlenti = mlent3.lect(mlenti)
  437. CG write(ioimp,*) ' :',iz,is,mlenti,n22,n21,n2
  438. DO i = 1, n21
  439. nomloc = mchaml.nomche(i)
  440. iplac = 0
  441. IF (n22.NE.0) THEN
  442. CALL PLACE(mcham2.nomche(1),n22,iplac,nomloc)
  443. ENDIF
  444. typloc = mchaml.typche(i)
  445. melval = mchaml.ielval(i)
  446. if (melval.ne.melpv) then
  447. melpv=melval
  448. endif
  449. nbpi1 = MAX(melval.velche(/1),melval.ielche(/1))
  450. nbel1 = MAX(melval.velche(/2),melval.ielche(/2))
  451. IF (nbel1.GT.1) nbel1 = nbel2
  452.  
  453. IF (iplac.EQ.0) THEN
  454. iplac = n22 + i
  455. mcham2.nomche(iplac) = nomloc
  456. mcham2.typche(iplac) = typloc
  457. IF (typloc.EQ.'REAL*8 ') THEN
  458. n1ptel = nbpi1
  459. n1el = nbel2
  460. n2ptel = 0
  461. n2el = 0
  462. ELSE
  463. n1ptel = 0
  464. n1el = 0
  465. n2ptel = nbpi1
  466. n2el = nbel2
  467. ENDIF
  468. SEGINI,melva2
  469. mcham2.ielval(iplac) = melva2
  470. ELSE
  471. C incompatibilite du type de composante entre champs
  472. IF (mcham2.typche(iplac).NE.typloc) THEN
  473. KERRE = 917
  474. MOTERR(1:4) = nomloc
  475. MOTERR(5:21) = typloc
  476. MOTERR(22:38) = mcham2.typche(iplac)
  477. GOTO 9000
  478. ENDIF
  479. melva2 = mcham2.ielval(iplac)
  480. ENDIF
  481.  
  482. C On ajoute melval a melva2 en tenant compte de l'intersection entre
  483. C les maillages (mlenti = 0 si maillage identique, >0 sinon)
  484. C "Extension" de melva2 si besoin par rapport a melval (appel a MELEXT)
  485. C sera effectuee en prealable de l'addition des valeurs dans MELADD.
  486. CALL MELADD(melva2,melval,typloc,mlenti,KERRE)
  487. IF (KERRE.NE.0) GOTO 9000
  488. ENDDO
  489. C
  490. 210 CONTINUE
  491. 200 CONTINUE
  492. CALL oooprl(0)
  493.  
  494. C Compactage du champ resultat :
  495. C ------------------------------
  496. n1max = n1
  497. n1 = 0
  498. DO 310 i = 1, n1max
  499. mcham2 = mchel2.ichaml(i)
  500. IF (mcham2.EQ.0) GOTO 310
  501. C on compacte les composantes (s'il y en a bien sur !)
  502. n22 = mcham2.ielval(/1)
  503. IF (n22.EQ.0) GOTO 312
  504. n2 = 0
  505. DO 311 j = 1, n22
  506. melva2 = mcham2.ielval(j)
  507. IF (melva2.EQ.0) GOTO 311
  508. CALL oooho1(melva2,ihmelv)
  509. IF(ihmelv .EQ. ihcour)THEN
  510. C Reduction seulement pour les SEGMENTS nouveaux !
  511. CALL COMRED(melva2)
  512. ENDIF
  513. n2 = n2 + 1
  514. mcham2.nomche(n2) = mcham2.nomche(j)
  515. mcham2.typche(n2) = mcham2.typche(j)
  516. mcham2.ielval(n2) = melva2
  517. 311 CONTINUE
  518. IF (n2.EQ.0) GOTO 310
  519. IF (n2.NE.n22) SEGADJ,mcham2
  520. 312 CONTINUE
  521. n1 = n1 + 1
  522. mchel2.conche(n1) = mchel2.conche(i)
  523. mchel2.imache(n1) = mchel2.imache(i)
  524. mchel2.ichaml(n1) = mcham2
  525.  
  526. DO j = 1, N3
  527. mchel2.infche(n1,j) = mchel2.infche(i,j)
  528. ENDDO
  529. 310 CONTINUE
  530. IF (n1.NE.n1max) SEGADJ,mchel2
  531.  
  532.  
  533. C Definition du type du MCHAML
  534. C typ1 contient le nom du type identifie
  535. C ltyp1 la longueur de la chaine de caractere
  536. C
  537. CALL TYPCHL(mchel2,mmodtm,typ1,ltyp1)
  538. IF (IERR.NE.0) RETURN
  539. C Cas particuliers des modeles de modele (melange)
  540. IF(ltyp1.NE.-2 .AND. ltyp1.GT.0 .and. mchel2.titche.eq.' ')THEN
  541. IF (ltyp1 .NE. L1 ) THEN
  542. L1=ltyp1
  543. SEGADJ, mchel2
  544. ENDIF
  545. mchel2.titche=typ1
  546. ENDIF
  547. C On sort un champ vide s'il n'y a pas de zone commune :
  548. c* IF (n1.EQ.0) THEN
  549. c**G if (iimpi.eq.7203) write(ioimp,*) 'N1 = 0 apres traitement'
  550. c* KERRE = 21
  551. c* ENDIF
  552.  
  553. 9000 CONTINUE
  554. C Destruction des segments de travail devenus inutiles :
  555. SEGSUP,izone,ismel,mlent3,mlent2
  556.  
  557. 9010 CONTINUE
  558. IF (KERRE.NE.0) THEN
  559. iret = 0
  560. mchel2 = 0
  561. ENDIF
  562.  
  563. CG if (iimpi.eq.7203) then
  564. CG write(ioimp,*) 'Sortie de reduaf',mchel2,kerre
  565. CG if (kerre.eq.0) call zpchel(mchel2,1)
  566. CG endif
  567.  
  568. C Mise a jour du preconditionnement dans CCPRECO (Nouveau champ mchel2)
  569. CALL ACTOBJ('MCHAML ',mchel2,1)
  570. PRECM2(1,ith1) = mchel2
  571.  
  572. END
  573.  
  574.  

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