Télécharger zechi2.eso

Retour à la liste

Numérotation des lignes :

zechi2
  1. C ZECHI2 SOURCE FANDEUR 22/01/03 21:16:02 11136
  2. SUBROUTINE ZECHI2(IKAS,IVOL1,MTAB1,MTAB2,MTAB3,MPOVA1,MPOVA2,
  3. & IKH,IKT,IKP,MELEVF,MLENT1,NOMP,NOMD)
  4. C-----------------------------------------------------------------------
  5. C coeff d'échange étant un SCAL ou CHPO CENTRE, le champ exterieur
  6. C un SCAL, un CHPO CENTRE ou un CHPO SOMMET.
  7. C-----------------------------------------------------------------------
  8. C
  9. C--------------------
  10. C Paramètres Entrée :
  11. C--------------------
  12. C
  13. C E/ IKAS : Type de situation à traiter (1=EF, 2 ou 3=VF)
  14. C E/ IVOL1 : Type d'échange (0=surfacique, 1=volumique)
  15. C E/ MTAB1 : Pointeur de la table EQEX
  16. C E/ MTAB2 : Pointeur de la table DOMAINE locale
  17. C E/ MTAB3 : Pointeur de la table KIZX
  18. C E/ MPOVA1 : MPOVAL des valeurs du coefficient d'échange
  19. C E/ MPOVA2 : MPOVAL des valeurs du champ exterieur
  20. C E/ IKH : Forme originel du coefficient d'échange
  21. C (0=CHPO CENTRE, 1=FLOTTANT)
  22. C E/ IKT : Forme originel du champ exterieur
  23. C (0=CHPO CENTRE, 1=FLOTTANT, 4=CHPO SOMMET)
  24. C E/ IKP : Support de l'inconnue primale
  25. C (0=CHPO CENTRE, 4=CHPO SOMMET)
  26. C E/ MELEVF : Pointeur vers les points CENTRE du maillage volumique
  27. C en correspondance avec les points CENTRE surfacique
  28. C (Utilisé en Formulation VF et échange surfacique)
  29. C E/ MLENT1 : Correspondance de numérotations pour le champ exterieur
  30. C MLENT1.LECT(I)=J : point I en Jième position du spg
  31. C (Utilisé lorsque le champ exterieur est au SOMMET)
  32. C E/ NOMP : Nom de l'inconnue primale
  33. C E/ NOMD : Nom de l'inconnue duale
  34. C
  35. C------------------
  36. C Champs calculés :
  37. C------------------
  38. C
  39. C MTAB3.'MATELM' : Matrice associé à l'opérateur ECHIMP
  40. C MTAB1.'SMBR' : Second membre du système matriciel issu de la
  41. C discrétisation, la contribution de ECHIMP y est
  42. C assemblée.
  43. C
  44. C-----------------------------------------------------------------------
  45. IMPLICIT INTEGER(I-N)
  46. IMPLICIT REAL*8 (A-H,O-Z)
  47. C
  48. -INC CCGEOME
  49. -INC PPARAM
  50. -INC CCOPTIO
  51. -INC SIZFFB
  52. -INC SMCHPOI
  53. -INC SMCHAML
  54. -INC SMCOORD
  55. -INC SMELEME
  56. -INC SMLENTI
  57. C
  58. CHARACTER*8 TYPE,TYPC,TYPS
  59. CHARACTER*(*) NOMP,NOMD
  60. CHARACTER*(LOCOMP) NOM0
  61. INTEGER SPGP,SPGD
  62. C
  63. C- Initialisations
  64. C
  65. MLENT2 = 0
  66. MCHPO1 = 0
  67. MCHELM = 0
  68. NBCOMP = 1
  69. IAXI = 0
  70. IF (IFOMOD.EQ.0) IAXI=2
  71. SEGACT MPOVA1
  72. SEGACT MPOVA2
  73. C
  74. C- Récupération des informations géométriques locales
  75. C
  76. CALL LEKTAB(MTAB2,'CENTRE ',MELEMC)
  77. CALL LEKTAB(MTAB2,'SOMMET ',MELEMS)
  78. CALL LEKTAB(MTAB2,'MAILLAGE ',MELEME)
  79. CALL KRIPAD(MELEMS,MLENTI)
  80. C
  81. C- En echange surfacique et option VF création du spg du second-membre
  82. C- différent de MELEVF à cause des coins (dans le spg chaque point
  83. C- n'est présent qu'une fois meme si il est connecté plusieurs fois)
  84. C
  85. IF (IKAS.NE.1 .AND. IVOL1.EQ.0) THEN
  86. IPT1 = MELEVF
  87. SEGACT IPT1
  88. SEGINI, IPT2=IPT1
  89. IOK1 = 1
  90. NUMPD = IPT2.NUM(/2)
  91. DO 10 I=2,NUMPD
  92. ITEST = IPT1.NUM(1,I)
  93. DO 5 J=1,IOK1
  94. JTEST = IPT2.NUM(1,J)
  95. IF (JTEST.EQ.ITEST) GOTO 10
  96. 5 CONTINUE
  97. IOK1 = IOK1 + 1
  98. IPT2.NUM(1,IOK1) = ITEST
  99. 10 CONTINUE
  100. IF (IOK1.NE.NUMPD) THEN
  101. NBSOUS = 0
  102. NBELEM = IOK1
  103. NBREF = 0
  104. NBNN = 1
  105. SEGADJ IPT2
  106. ENDIF
  107. SEGDES IPT2
  108. ENDIF
  109. C
  110. C- Maillage de connectivités et supports géométriques des inconnues
  111. C
  112. C SPGP : Support géométrique local de l'inconnue primale
  113. C SPGD : Idem pour la duale
  114. C MLOCP : Connectivité local pour l'inconnue primale
  115. C MLOCD : Idem pour la duale
  116. C
  117. IF (IKAS.EQ.1) THEN
  118. TYPS = 'SOMMET '
  119. SPGD = MELEMS
  120. IF (IKP.EQ.0) THEN
  121. SPGP = MELEMC
  122. MLOCD = MELEME
  123. MLOCP = MELEMC
  124. ELSE
  125. SPGP = MELEMS
  126. MLOCD = MELEME
  127. MLOCP = MELEME
  128. ENDIF
  129. ELSE
  130. TYPS = 'CENTRE '
  131. IF (IVOL1.EQ.0) THEN
  132. SPGD = IPT2
  133. MLOCD = MELEVF
  134. ELSE
  135. SPGD = MELEMC
  136. MLOCD = MELEMC
  137. ENDIF
  138. IF (IKP.EQ.0) THEN
  139. SPGP = MELEMC
  140. MLOCP = MELEMC
  141. ELSE
  142. SPGP = MELEMS
  143. MLOCP = MELEME
  144. ENDIF
  145. CALL KRIPAD(SPGD,MLENT2)
  146. ENDIF
  147. C
  148. C- Création du CHPO contenant la contribution au second membre de ECHIMP
  149. C
  150. NAT = 1
  151. NSOUPO = 1
  152. SEGINI MCHPOI
  153. MTYPOI = TYPS
  154. JATTRI(1) = 2
  155. IFOPOI = IFOUR
  156. NC = 1
  157. SEGINI MSOUPO
  158. IPCHP(1) = MSOUPO
  159. SEGDES MCHPOI
  160. NOCOMP(1)= NOMD
  161. IGEOC = SPGD
  162. IPT3 = SPGD
  163. SEGACT IPT3
  164. N = IPT3.NUM(/2)
  165. SEGDES IPT3
  166. SEGINI MPOVAL
  167. IPOVAL = MPOVAL
  168. SEGDES MSOUPO
  169. C
  170. C-------------------
  171. C-------------------
  172. C
  173. IF (IKAS.EQ.1) THEN
  174. C
  175. C- Matrice EF dans le cas ou l'inconnue primale est au CENTRE
  176. C- (matrice colonne : h fois diagonale de la matrice MASSE condensée)
  177. C
  178. IF (IKP.EQ.0) THEN
  179. CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  180. IF (IERR.NE.0) RETURN
  181. SEGACT MCHELM
  182. NRIGE = 7
  183. NKID = 9
  184. NKMT = 7
  185. NMATRI = 1
  186. SEGINI MATRIK
  187. IRIGEL(1,1) = MLOCP
  188. IRIGEL(2,1) = MLOCD
  189. IRIGEL(7,1) = 3
  190. NBME = 1
  191. SEGACT MELEME
  192. NBSOUS = LISOUS(/1)
  193. IF (NBSOUS.EQ.0) NBSOUS=1
  194. SEGINI IMATRI
  195. IRIGEL(4,1) = IMATRI
  196. SEGDES MATRIK
  197. KSPGP = SPGP
  198. KSPGD = SPGD
  199. LISPRI(1) = NOMP
  200. LISDUA(1) = NOMD
  201. NUTOEL = 0
  202. DO 30 L=1,NBSOUS
  203. IPT1 = MELEME
  204. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  205. SEGACT IPT1
  206. NP = 1
  207. MP = IPT1.NUM(/1)
  208. NBEL = IPT1.NUM(/2)
  209. SEGINI IZAFM
  210. LIZAFM(L,1) = IZAFM
  211. MCHAML = ICHAML(L)
  212. SEGACT MCHAML
  213. MELVAL = IELVAL(1)
  214. SEGACT MELVAL
  215. DO 20 K=1,NBEL
  216. NK = NUTOEL + K
  217. KPOS = 1 + (1-IKH)*(NK-1)
  218. DO 15 I=1,MP
  219. VAL1 = MPOVA1.VPOCHA(KPOS,1)*VELCHE(I,K)
  220. AM(K,1,I) = AM(K,1,I) + VAL1
  221. C write(6,*) 'EF CENTRE AM K I',K,I,AM(K,1,I)
  222. 15 CONTINUE
  223. 20 CONTINUE
  224. SEGDES IZAFM
  225. SEGDES IPT1
  226. SEGDES MCHAML,MELVAL
  227. NUTOEL = NUTOEL + NBEL
  228. 30 CONTINUE
  229. IF (NBSOUS.NE.1) SEGDES MELEME
  230. SEGDES MCHELM
  231. SEGDES IMATRI
  232. C
  233. C- Matrice EF dans le cas ou l'inconnue primale est au SOMMET
  234. C- (matrice carrée : h fois matrice MASSE consistante)
  235. C
  236. ELSE
  237. NRIGE = 7
  238. NKID = 9
  239. NKMT = 7
  240. NMATRI = 1
  241. SEGINI MATRIK
  242. IRIGEL(1,1) = MLOCP
  243. IRIGEL(2,1) = MLOCD
  244. IRIGEL(7,1) = 2
  245. NBME = 1
  246. SEGACT MELEME
  247. NBSOUS = LISOUS(/1)
  248. IF (NBSOUS.EQ.0) NBSOUS=1
  249. SEGINI IMATRI
  250. IRIGEL(4,1) = IMATRI
  251. SEGDES MATRIK
  252. KSPGP = SPGP
  253. KSPGD = SPGD
  254. LISPRI(1) = NOMP
  255. LISDUA(1) = NOMD
  256. NUTOEL = 0
  257. DO 100 L=1,NBSOUS
  258. IPT1 = MELEME
  259. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  260. SEGACT IPT1
  261. NP = IPT1.NUM(/1)
  262. NBEL = IPT1.NUM(/2)
  263. MP = NP
  264. SEGINI IZAFM
  265. LIZAFM(L,1) = IZAFM
  266. NOM0 = NOMS(IPT1.ITYPEL)
  267. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  268. IF (IZFFM.EQ.0) THEN
  269. C Echec lors de la lecture des fonctions de forme d'un élément.
  270. CALL ERREUR(662)
  271. RETURN
  272. ENDIF
  273. SEGACT IZFFM*MOD
  274. IZHR = KZHR(1)
  275. SEGACT IZHR*MOD
  276. NPG = GR(/3)
  277. NES = GR(/1)
  278. DO 90 K=1,NBEL
  279. NK = NUTOEL + K
  280. KPOS = 1 + (1-IKH)*(NK-1)
  281. DO 50 I=1,NP
  282. II = IPT1.NUM(I,K)
  283. DO 40 N=1,IDIM
  284. XYZ(N,I) = XCOOR((II-1)*(IDIM+1)+N)
  285. 40 CONTINUE
  286. 50 CONTINUE
  287. CALL CALJBC(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,
  288. & NPG,IAXI,AIRE)
  289. DO 80 I=1,NP
  290. DO 70 J=1,NP
  291. UU = 0.D0
  292. DO 60 LG=1,NPG
  293. UU = UU + FN(I,LG)*FN(J,LG)*PGSQ(LG)
  294. 60 CONTINUE
  295. AM(K,I,J) = MPOVA1.VPOCHA(KPOS,1) * UU
  296. C write(6,*) 'EF SOMMET AM K I J',K,I,J,AM(K,I,J)
  297. 70 CONTINUE
  298. 80 CONTINUE
  299. 90 CONTINUE
  300. SEGDES IPT1
  301. SEGDES IZAFM
  302. SEGDES IZFFM*MOD
  303. SEGDES IZHR
  304. NUTOEL = NUTOEL + NBEL
  305. 100 CONTINUE
  306. IF (NBSOUS.NE.1) SEGDES MELEME
  307. SEGDES IMATRI
  308. ENDIF
  309. C
  310. C- Second membre EF, champ exterieur FLOTTANT ou CHPO CENTRE
  311. C- (matrice MASSE condensée saturé par h*champ exterieur)
  312. C
  313. IF (IKT.EQ.0.OR.IKT.EQ.1) THEN
  314. IF (MCHELM.EQ.0) CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  315. IF (IERR.NE.0) RETURN
  316. SEGACT MCHELM
  317. SEGACT MELEME
  318. NBSOUS = LISOUS(/1)
  319. IF (NBSOUS.EQ.0) NBSOUS=1
  320. NUTOEL = 0
  321. DO 130 L=1,NBSOUS
  322. IPT1 = MELEME
  323. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  324. SEGACT IPT1
  325. NP = IPT1.NUM(/1)
  326. NBEL = IPT1.NUM(/2)
  327. MCHAML = ICHAML(L)
  328. SEGACT MCHAML
  329. MELVAL = IELVAL(1)
  330. SEGACT MELVAL
  331. DO 120 K=1,NBEL
  332. NK = NUTOEL + K
  333. KPOS = 1 + (1-IKH)*(NK-1)
  334. KTEX = 1 + (1-IKT)*(NK-1)
  335. DO 110 I=1,NP
  336. II = IPT1.NUM(I,K)
  337. IPOS = LECT(II)
  338. VAL1 = MPOVA1.VPOCHA(KPOS,1)*VELCHE(I,K)
  339. & * MPOVA2.VPOCHA(KTEX,1)
  340. VPOCHA(IPOS,1) = VPOCHA(IPOS,1) + VAL1
  341. C write(6,*) 'EF CENTRE VPOCHA IPOS',IPOS,VPOCHA(IPOS,1)
  342. 110 CONTINUE
  343. 120 CONTINUE
  344. SEGDES IPT1
  345. SEGDES MCHAML,MELVAL
  346. NUTOEL = NUTOEL + NBEL
  347. 130 CONTINUE
  348. IF (NBSOUS.NE.1) SEGDES MELEME
  349. SEGDES MCHELM
  350. C
  351. C- Second membre EF, champ exterieur CHPO SOMMET
  352. C- (matrice MASSE consistante saturée par h*champ exterieur)
  353. C
  354. ELSE
  355. SEGACT MELEME
  356. NBSOUS = LISOUS(/1)
  357. IF (NBSOUS.EQ.0) NBSOUS=1
  358. NUTOEL = 0
  359. DO 200 L=1,NBSOUS
  360. IPT1 = MELEME
  361. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  362. SEGACT IPT1
  363. NP = IPT1.NUM(/1)
  364. NBEL = IPT1.NUM(/2)
  365. NOM0 = NOMS(IPT1.ITYPEL)
  366. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  367. IF (IZFFM.EQ.0) THEN
  368. C Echec lors de la lecture des fonctions de forme d'un élément.
  369. CALL ERREUR(662)
  370. RETURN
  371. ENDIF
  372. SEGACT IZFFM*MOD
  373. IZHR = KZHR(1)
  374. SEGACT IZHR*MOD
  375. NPG = GR(/3)
  376. NES = GR(/1)
  377. DO 190 K=1,NBEL
  378. NK = NUTOEL + K
  379. KPOS = 1 + (1-IKH)*(NK-1)
  380. DO 150 I=1,NP
  381. II = IPT1.NUM(I,K)
  382. DO 140 N=1,IDIM
  383. XYZ(N,I) = XCOOR((II-1)*(IDIM+1)+N)
  384. 140 CONTINUE
  385. 150 CONTINUE
  386. CALL CALJBC(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,
  387. & NPG,IAXI,AIRE)
  388. DO 180 I=1,NP
  389. II = IPT1.NUM(I,K)
  390. IPOS = LECT(II)
  391. SOM1 = 0.D0
  392. DO 170 J=1,NP
  393. JPOS = MLENT1.LECT(IPT1.NUM(J,K))
  394. UU = 0.D0
  395. DO 160 LG=1,NPG
  396. UU = UU + FN(I,LG)*FN(J,LG)*PGSQ(LG)
  397. 160 CONTINUE
  398. SOM1 = SOM1 + MPOVA1.VPOCHA(KPOS,1)
  399. & * MPOVA2.VPOCHA(JPOS,1) * UU
  400. 170 CONTINUE
  401. VPOCHA(IPOS,1) = VPOCHA(IPOS,1) + SOM1
  402. C write(6,*) 'EF SOMMET VPOCHA IPOS',IPOS,VPOCHA(IPOS,1)
  403. 180 CONTINUE
  404. 190 CONTINUE
  405. SEGDES IPT1
  406. SEGDES IZFFM*MOD
  407. SEGDES IZHR
  408. NUTOEL = NUTOEL + NBEL
  409. 200 CONTINUE
  410. IF (NBSOUS.NE.1) SEGDES MELEME
  411. ENDIF
  412. C
  413. C-------------------
  414. C-------------------
  415. C
  416. ELSE
  417. C
  418. C- Matrice VF dans le cas ou l'inconnue primale est au CENTRE
  419. C- (matrice IDENTITE multipliée par h*VOLUME)
  420. C
  421. IF (IKP.EQ.0) THEN
  422. CALL LEKTAB(MTAB2,'XXVOLUM ',MCHPO3)
  423. IF (IERR.NE.0) RETURN
  424. CALL LICHT(MCHPO3,MPOVA3,TYPC,IGEOM)
  425. NRIGE = 7
  426. NKID = 9
  427. NKMT = 7
  428. NMATRI = 1
  429. SEGINI MATRIK
  430. IRIGEL(1,1) = MLOCP
  431. IRIGEL(2,1) = MLOCD
  432. IF (MLOCP.EQ.MLOCD) THEN
  433. IF (NOMP.EQ.NOMD) THEN
  434. IRIGEL(7,1) = 5
  435. ELSE
  436. IRIGEL(7,1) = 2
  437. ENDIF
  438. ELSE
  439. IRIGEL(7,1) = 3
  440. ENDIF
  441. NBME = 1
  442. NBSOUS = 1
  443. SEGINI IMATRI
  444. IRIGEL(4,1) = IMATRI
  445. SEGDES MATRIK
  446. KSPGP = SPGP
  447. KSPGD = SPGD
  448. LISPRI(1) = NOMP
  449. LISDUA(1) = NOMD
  450. NBEL = MPOVA3.VPOCHA(/1)
  451. NP = 1
  452. MP = 1
  453. SEGINI IZAFM
  454. LIZAFM(1,1) = IZAFM
  455. SEGDES IMATRI
  456. DO 210 NK=1,NBEL
  457. KPOS = 1 + (1-IKH)*(NK-1)
  458. AM(NK,1,1) = AM(NK,1,1) +
  459. & MPOVA1.VPOCHA(KPOS,1) * MPOVA3.VPOCHA(NK,1)
  460. C write(6,*) 'VF CENTRE AM NK',NK,AM(NK,1,1)
  461. 210 CONTINUE
  462. C
  463. C- Matrice VF dans le cas ou l'inconnue primale est au SOMMET
  464. C- (matrice ligne : h fois diagonale matrice MASSE condensée)
  465. C
  466. ELSE
  467. CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  468. IF (IERR.NE.0) RETURN
  469. SEGACT MCHELM
  470. NRIGE = 7
  471. NKID = 9
  472. NKMT = 7
  473. NMATRI = 1
  474. SEGINI MATRIK
  475. IRIGEL(1,1) = MLOCP
  476. IRIGEL(2,1) = MLOCD
  477. IRIGEL(7,1) = 3
  478. NBME = 1
  479. SEGACT MELEME
  480. NBSOUS = LISOUS(/1)
  481. IF (NBSOUS.EQ.0) NBSOUS=1
  482. SEGINI IMATRI
  483. IRIGEL(4,1) = IMATRI
  484. SEGDES MATRIK
  485. KSPGP = SPGP
  486. KSPGD = SPGD
  487. LISPRI(1) = NOMP
  488. LISDUA(1) = NOMD
  489. NUTOEL = 0
  490. DO 240 L=1,NBSOUS
  491. IPT1 = MELEME
  492. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  493. SEGACT IPT1
  494. NP = IPT1.NUM(/1)
  495. MP = 1
  496. NBEL = IPT1.NUM(/2)
  497. SEGINI IZAFM
  498. LIZAFM(L,1) = IZAFM
  499. MCHAML = ICHAML(L)
  500. SEGACT MCHAML
  501. MELVAL = IELVAL(1)
  502. SEGACT MELVAL
  503. DO 230 K=1,NBEL
  504. NK = NUTOEL + K
  505. KPOS = 1 + (1-IKH)*(NK-1)
  506. DO 220 I=1,NP
  507. VAL1 = MPOVA1.VPOCHA(KPOS,1)*VELCHE(I,K)
  508. AM(K,I,1) = AM(K,I,1) + VAL1
  509. C write(6,*) 'VF SOMMET AM K I',K,I,AM(K,I,1)
  510. 220 CONTINUE
  511. 230 CONTINUE
  512. SEGDES IPT1
  513. SEGDES MCHAML,MELVAL
  514. SEGDES IZAFM
  515. NUTOEL = NUTOEL + NBEL
  516. 240 CONTINUE
  517. IF (NBSOUS.NE.1) SEGDES MELEME
  518. SEGDES MCHELM
  519. SEGDES IMATRI
  520. ENDIF
  521. C
  522. C- Second membre VF dans le cas ou le champ exterieur est au CENTRE
  523. C- (matrice diagonale h*VOLUME saturée par le champ exterieur)
  524. C
  525. IF (IKT.EQ.0.OR.IKT.EQ.1) THEN
  526. IF (MCHPO1.EQ.0) CALL LEKTAB(MTAB2,'XXVOLUM ',MCHPO1)
  527. IF (IERR.NE.0) RETURN
  528. CALL LICHT(MCHPO1,MPOVA3,TYPC,IGEOM)
  529. NBEL = MPOVA3.VPOCHA(/1)
  530. IPT2 = MLOCD
  531. SEGACT IPT2
  532. DO 250 NK=1,NBEL
  533. IPOS = MLENT2.LECT(IPT2.NUM(1,NK))
  534. KPOS = 1 + (1-IKH)*(NK-1)
  535. KTEX = 1 + (1-IKT)*(NK-1)
  536. VAL1 = MPOVA1.VPOCHA(KPOS,1) * MPOVA2.VPOCHA(KTEX,1)
  537. & * MPOVA3.VPOCHA(NK,1)
  538. VPOCHA(IPOS,1) = VPOCHA(IPOS,1) + VAL1
  539. C write(6,*) 'VF CENTRE VPOCHA IPOS',IPOS,VPOCHA(IPOS,1)
  540. 250 CONTINUE
  541. SEGDES IPT2
  542. SEGDES MPOVA3
  543. C
  544. C- Second membre VF dans le cas ou l'inconnue primale est au SOMMET
  545. C- (matrice MASSE condensée saturée par h*champ exterieur)
  546. C
  547. ELSE
  548. IF (MCHELM.EQ.0) CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  549. IF (IERR.NE.0) RETURN
  550. SEGACT MCHELM
  551. SEGACT MELEME
  552. NBSOUS = LISOUS(/1)
  553. IF (NBSOUS.EQ.0) NBSOUS=1
  554. NUTOEL = 0
  555. IPT2 = MLOCD
  556. SEGACT IPT2
  557. DO 280 L=1,NBSOUS
  558. IPT1 = MELEME
  559. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  560. SEGACT IPT1
  561. NP = IPT1.NUM(/1)
  562. NBEL = IPT1.NUM(/2)
  563. MCHAML = ICHAML(L)
  564. SEGACT MCHAML
  565. MELVAL = IELVAL(1)
  566. SEGACT MELVAL
  567. DO 270 K=1,NBEL
  568. NK = NUTOEL + K
  569. IPOS = MLENT2.LECT(IPT2.NUM(1,NK))
  570. KPOS = 1 + (1-IKH)*(NK-1)
  571. SOM1 = 0.D0
  572. DO 260 J=1,NP
  573. JPOS = MLENT1.LECT(IPT1.NUM(J,K))
  574. SOM1 = SOM1 + MPOVA2.VPOCHA(JPOS,1)*VELCHE(J,K)
  575. 260 CONTINUE
  576. VAL1 = SOM1 * MPOVA1.VPOCHA(KPOS,1)
  577. VPOCHA(IPOS,1) = VPOCHA(IPOS,1) + VAL1
  578. C write(6,*) 'VF SOMMET VPOCHA IPOS',IPOS,VPOCHA(IPOS,1)
  579. 270 CONTINUE
  580. SEGDES IPT1
  581. SEGDES MCHAML,MELVAL
  582. NUTOEL = NUTOEL + NBEL
  583. 280 CONTINUE
  584. IF (NBSOUS.NE.1) SEGDES MELEME
  585. SEGDES MCHELM
  586. SEGDES IPT2
  587. ENDIF
  588. ENDIF
  589. C
  590. C- Désactivation
  591. C
  592. SEGDES MPOVA2
  593. SEGDES MPOVA1
  594. SEGDES MPOVAL
  595. SEGSUP MLENTI
  596. IF (MLENT2.NE.0) SEGSUP MLENT2
  597. C
  598. C- Ecriture de la matrice et du second-membre
  599. C
  600. CALL ECMO(MTAB3,'MATELM','MATRIK',MATRIK)
  601. TYPE = ' '
  602. CALL ACMO(MTAB1,'SMBR',TYPE,MCHPO4)
  603. IF (TYPE.NE.'CHPOINT ') THEN
  604. CALL ECMO(MTAB1,'SMBR','CHPOINT ',MCHPOI)
  605. ELSE
  606. CALL ECROBJ('CHPOINT ',MCHPO4)
  607. CALL ECROBJ('CHPOINT ',MCHPOI)
  608. CALL PRFUSE
  609. CALL LIROBJ('CHPOINT ',MCHPOI,1,IRET)
  610. IF (IERR.NE.0) RETURN
  611. CALL ECMO(MTAB1,'SMBR','CHPOINT ',MCHPOI)
  612. ENDIF
  613. C write(6,*) 'IKAS IVOL IKH IKT IKP',IKAS,IVOL1,IKH,IKT,IKP
  614. RETURN
  615. END
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  

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