Télécharger echimp.eso

Retour à la liste

Numérotation des lignes :

echimp
  1. C ECHIMP SOURCE CB215821 20/11/25 13:26:59 10792
  2. SUBROUTINE ECHIMP
  3. C=======================================================================
  4. C L'opérateur ECHIMP discrétise un échange surfacique ou volumique
  5. C avec un milieu exterieur. Le terme d'échange est de la forme
  6. * h(T-T0) où h est un coefficient d'échange, T une des inconnues du
  7. C problème traité et T0 "un champ exterieur connu".
  8. C-----------------------------------------------------------------------
  9. C La convention de signe associée à ce terme est la suivante : lorsque
  10. C h est positif et T0<T, le terme d'échange tant à faire diminuer la
  11. C quantité T présente dans le domaine.
  12. C D'un point de vue numérique, ce terme est dans l'équation traitée du
  13. C meme coté que le terme de dérivée en temps.
  14. C-----------------------------------------------------------------------
  15. C
  16. C-------------------------
  17. C Phrase d'appel GIBIANE :
  18. C-------------------------
  19. C
  20. C 'ECHI' KIZX ;
  21. C
  22. C KIZX : Table de sous-type KIZX associée à l'opérateur ECHI
  23. C
  24. C--------------------------------
  25. C Construction de KIZX via EQEX :
  26. C--------------------------------
  27. C
  28. C 'ZONE' TAB1 'OPER' 'ECHI' CHPO1 CHPO2 'INCO' MOT1 (MOT2) ;
  29. C
  30. C TAB1 : TABLE DOMAINE associée à la zone d'échange. On trouvera
  31. C à l'indice MAILLAGE de cette table la surface ou le volume
  32. C sur lequel à lieu l'échange avec le milieu exterieur.
  33. C CHPO1 : Coefficient d'échange (par unité de surface ou de volume
  34. C suivant le type d'échange traité) (CHPO, FLOTTANT ou MOT).
  35. C (spg du CHPO : CENTRE)
  36. C CHPO2 : Champ scalaire exterieur connu (CHPO, FLOTTANT ou MOT)
  37. C (spg du CHPO : CENTRE ou SOMMET)
  38. C MOT1 : Nom de l'inconnue scalaire primale sur laquelle porte
  39. C l'échange surfacique ou volumique (MOT).
  40. C MOT2 : Nom de l'inconnue scalaire duale (facultatif - MOT).
  41. C Indique l'équation dans laquelle le terme d'échange est à
  42. C considérer. Si MOT2 est omis, les inconnues primales et
  43. C duale sont identiques (obligatoire en explicite).
  44. C
  45. C------------
  46. C Résultats :
  47. C------------
  48. C On crée une partie implicite correspondant à la linéarisation
  49. C du terme h*T et un second membre correspondant au terme h*T0.
  50. C
  51. C
  52. C-> En explicite :
  53. C
  54. C On suppose que les inconnues primales et duales sont identiques
  55. C afin de pouvoir impliciter l'échange avec le milieu exterieur.
  56. C Pour cela, on condense la matrice masse, quelle que soit la
  57. C formulation utilisée (donc EF -> EFM1).
  58. C 1) La matrice diagonale est stockée dans un CHPO et rangée dans la
  59. C table KIZG1 à l'indice de type MOT MOT1 (nom de l'inconnue).
  60. C 2) Le second membre est stocké dans un CHPO et rangé dans la
  61. C table KIZG à l'indice de type MOT MOT1 (nom de l'inconnue).
  62. C
  63. C-> En implicite
  64. C
  65. C Les inconnues primales et duales peuvent etre différentes et de
  66. C spg CENTRE ou SOMMET. En implicite, on ne condense pas les matrices
  67. C masse (donc EFM1 -> EF).
  68. C 1) La matrice "masse" est stockée dans un MATRIK et rangée dans la
  69. C table KIZX à l'indice de type MOT MATELM.
  70. C 2) Le second membre est stocké dans un CHPO et assemblé dans la
  71. C table EQEX à l'indice de type MOT SMBR. Le nom de l'inconnue
  72. C duale MOT2 étant le nom de la composante du CHPO créé.
  73. C
  74. C-------------------------
  75. C Formulations acceptées :
  76. C-------------------------
  77. C 0) Défaut : EFM1 explicite.
  78. C 1) EFM1 en explicite (en implicite, assimilé à EF)
  79. C 2) EF en implicite (en explicite, assimilé à EFM1)
  80. C 3) VF en explicite et en implicite.
  81. C
  82. C----------------------
  83. C Support des données :
  84. C----------------------
  85. C H : SCAL ou CHPO SCAL CENTRE
  86. C T0 : SCAL ou CHPO SCAL CENTRE ou CHPO SCAL SOMMET
  87. C
  88. C------------------------------------------
  89. C Indices de table utilisés (racine KIZX) :
  90. C------------------------------------------
  91. C 'DOMZ' : Table domaine associé à l'opérateur (domaine local)
  92. C E/ 'MAILLAGE' -> Maillage du domaine local
  93. C E/ 'CENTRE' -> Points centre du domaine local
  94. C E/ 'XXPSOML' -> Intégrale des fonctions de base par élément (MCHAML)
  95. C E/ 'IARG' : Nombre d'arguments de l'opérateur
  96. C E/ 'ARG1' : Premier argument (coefficient d'échange)
  97. C E/ 'ARG2' : Deuxième argument (champ exterieur)
  98. C E/ 'LISTINCO' : Listmot contenant le nom de l'inconnue
  99. C 'KOPT' : Table des options
  100. C E/ 'KFORM' -> Formulation spatiale
  101. C E/ 'KIMPL' -> Formulation temporelle
  102. C 'EQEX' : Table décrivant la modélisation (modèle fluide)
  103. C E/ 'INCO' -> Table des inconnues et des données
  104. C /S 'KIZG' -> Table des seconds membres (cas explicite)
  105. C /S 'KIZG1' -> Table des matrices diagonales (cas explicite)
  106. C-----------------------------------------------------------------------
  107. C
  108. IMPLICIT INTEGER(I-N)
  109. IMPLICIT REAL*8 (A-H,O-Z)
  110. C
  111.  
  112. -INC PPARAM
  113. -INC CCOPTIO
  114. -INC SMCHPOI
  115. -INC SMLENTI
  116. -INC SMELEME
  117. POINTEUR MELEMC.MELEME
  118. -INC SMLMOTS
  119. -INC SMCOORD
  120. C
  121. CHARACTER*8 NOMD,NOMP,TYPE,TYPC,MTYP,CHAI
  122. PARAMETER (NTB=1)
  123. CHARACTER*8 LTAB(NTB)
  124. DIMENSION KTAB(NTB),IXV(4)
  125. DATA LTAB/'KIZX '/
  126.  
  127. segact mcoord
  128. C Nouvelle directive EQUA de EQEX
  129. MTYP=' '
  130. CALL QUETYP(MTYP,0,IRET)
  131. IF(IRET.EQ.0)THEN
  132. C% On attend un des objets : %m1:8 %m9:16 %m17:24 %m25:32 %m33:40
  133. MOTERR( 1: 8) = 'CHAI '
  134. MOTERR( 9:16) = 'MMODEL '
  135. MOTERR(17:24) = 'TABLE '
  136. CALL ERREUR(472)
  137. RETURN
  138. ENDIF
  139.  
  140. IF(MTYP.EQ.'MMODEL')THEN
  141. CALL YTCLSF('E ','ECHI ')
  142. RETURN
  143. ELSEIF(MTYP.EQ.'MOT ')THEN
  144. CALL LIRCHA(CHAI,1,IRET)
  145. CALL YTCLSF(CHAI,'ECHI ')
  146. RETURN
  147. ENDIF
  148. C Fin Nouvelle directive EQUA de EQEX
  149.  
  150. C
  151. C- Lecture de la table KIZX (pointeur MTABX) associée à ECHIMP
  152. C
  153. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  154. IF (IERR.NE.0) RETURN
  155. MTABX = KTAB(1)
  156. C
  157. C- Récupération de la table EQEX (pointeur MTAB1)
  158. C
  159. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  160. IF (MTAB1.EQ.0)THEN
  161. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  162. MOTERR( 1: 8) = ' EQEX '
  163. MOTERR( 9:16) = ' EQEX '
  164. MOTERR(17:24) = ' KIZX '
  165. CALL ERREUR(786)
  166. RETURN
  167. ENDIF
  168. CALL ACME(MTAB1,'NAVISTOK',NASTOK)
  169. IF(NASTOK.EQ.0)THEN
  170. CALL ZCHIMP(MTABX,MTAB1)
  171. RETURN
  172. ENDIF
  173. C
  174. C- Récupération de la table DOMAINE associée au domaine local
  175. C
  176. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  177. IF (MTABZ.EQ.0) THEN
  178. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  179. MOTERR( 1: 8) = ' DOMZ '
  180. MOTERR( 9:16) = ' DOMZ '
  181. MOTERR(17:24) = ' KIZX '
  182. CALL ERREUR(786)
  183. RETURN
  184. ENDIF
  185. C
  186. C- Récupération de la table INCO (pointeur KINC)
  187. C
  188. CALL LEKTAB(MTAB1,'INCO',KINC)
  189. IF (KINC.EQ.0) THEN
  190. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  191. MOTERR( 1: 8) = ' INCO '
  192. MOTERR( 9:16) = ' INCO '
  193. MOTERR(17:24) = ' EQEX '
  194. CALL ERREUR(786)
  195. RETURN
  196. ENDIF
  197. C
  198. C- Récupération de la table des options KOPT (pointeur KOPTI)
  199. C- et initialisations des options (par défaut SI et EXPL)
  200. C- KFORM = 0 -> SI 1 -> EF 2 -> VF
  201. C- KIMPL = 0 -> EXPL 1 -> IMPL 2 -> CN
  202. C
  203. KFORM = 0
  204. KIMPL = 0
  205. TYPE = ' '
  206. CALL ACMO(MTABX,'KOPT',TYPE,KOPTI)
  207. IF (TYPE.EQ.'TABLE') THEN
  208. TYPE = ' '
  209. CALL ACMO(KOPTI,'KFORM',TYPE,IENT)
  210. IF (TYPE.EQ.'ENTIER') CALL ACME(KOPTI,'KFORM',KFORM)
  211. TYPE = ' '
  212. CALL ACMO(KOPTI,'KIMPL',TYPE,IENT)
  213. IF (TYPE.EQ.'ENTIER') CALL ACME(KOPTI,'KIMPL',KIMPL)
  214. ENDIF
  215. C
  216. C- Identification du type d'échange :
  217. C- Surfacique (ISURF1=1) ou volumique (IVOL1=1).
  218. C
  219. ISURF1 = 0
  220. IVOL1 = 0
  221. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  222. IF (IERR.NE.0) RETURN
  223. SEGACT MELEME
  224. NBSOUS = LISOUS(/1)
  225. IF (NBSOUS.EQ.0) NBSOUS=1
  226. DO 10 I=1,NBSOUS
  227. IPT1=MELEME
  228. IF (NBSOUS.NE.1) IPT1=LISOUS(I)
  229. SEGACT IPT1
  230. ITYPL=IPT1.ITYPEL
  231. c write(6,*) '***************************',itypl
  232. IF (IDIM.EQ.2) THEN
  233. * - L'échange est surfacique (un flux est échangé) si
  234. * en 2D, les éléments sont de type SEG2 ou SEG3,
  235. IF (ITYPL.EQ.2.OR.ITYPL.EQ.3) THEN
  236. ISURF1 = 1
  237. * - L'échange est volumique (une source volumique est échangée) si
  238. * en 2D, les éléments sont de type TRI3, QUA4, TRI6, TRI7
  239. * ou QUA9.
  240. ELSEIF (ITYPL.EQ.4.OR.ITYPL.EQ.8.OR.
  241. $ ITYPL.EQ.6.OR.ITYPL.EQ.7.OR.
  242. $ ITYPL.EQ.11) THEN
  243. IVOL1 = 1
  244. ELSE
  245. C Type d'élément incorrect
  246. CALL ERREUR(16)
  247. RETURN
  248. ENDIF
  249. ELSEIF (IDIM.EQ.3) THEN
  250. * - L'échange est surfacique (un flux est échangé) si
  251. * en 3D, les éléments sont de type TRI3, QUA4, TRI6, TRI7
  252. * ou QUA9.
  253. IF (ITYPL.EQ.4.OR.ITYPL.EQ.8.OR.
  254. $ ITYPL.EQ.6.OR.ITYPL.EQ.7.OR.
  255. $ ITYPL.EQ.11) THEN
  256. ISURF1 = 1
  257. * - L'échange est volumique (une source volumique est échangée) si
  258. * en 3D, les éléments sont de type CUB8, PRI6, TET4,
  259. * CU27, PR21, TE15,
  260. * PR18 ou TE10.
  261. ELSEIF (ITYPL.EQ.14.OR.ITYPL.EQ.16.OR.
  262. $ ITYPL.EQ.23.OR.ITYPL.EQ.33.OR.
  263. $ ITYPL.EQ.34.OR.ITYPL.EQ.35.OR.
  264. $ ITYPL.EQ.40.OR.ITYPL.EQ.24) THEN
  265. IVOL1 = 1
  266. ELSE
  267. C Type d'élément incorrect
  268. CALL ERREUR(16)
  269. RETURN
  270. ENDIF
  271. ENDIF
  272. SEGDES IPT1
  273. 10 CONTINUE
  274. IF (IVOL1.EQ.1.AND.ISURF1.EQ.1) THEN
  275. C Maillage incorrect : contient des éléments 1D et 2D
  276. CALL ERREUR(798)
  277. RETURN
  278. ENDIF
  279. IF (NBSOUS.NE.1) SEGDES MELEME
  280. C
  281. C- Récupération du nom des inconnues (primale et duale)
  282. C
  283. TYPE = 'LISTMOTS'
  284. CALL ACMO(MTABX,'LISTINCO',TYPE,MLMOTS)
  285. IF (IERR.NE.0) RETURN
  286. SEGACT MLMOTS
  287. NBINC = MOTS(/2)
  288. IF (NBINC.LE.0.OR.NBINC.GE.3) THEN
  289. C Indice %m1:8 : contient plus de %i1 %m9:16
  290. MOTERR( 1:8) = 'LISTINCO'
  291. INTERR(1) = 2
  292. MOTERR(9:16) = ' MOTS '
  293. CALL ERREUR(799)
  294. RETURN
  295. ENDIF
  296. NOMP = MOTS(1)
  297. IF (NBINC.EQ.1) THEN
  298. NOMD = MOTS(1)
  299. ELSE
  300. NOMD = MOTS(2)
  301. ENDIF
  302. SEGDES MLMOTS
  303. C
  304. C- Informations géométriques locales associées à l'opérateur
  305. C
  306. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  307. IF (IERR.NE.0) RETURN
  308. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  309. IF (IERR.NE.0) RETURN
  310. C
  311. C- Identification du spg de l'inconnue duale
  312. C- Trois cas sont possible (identifier par IKAS)
  313. C- 1) spg contenant melems -> formulation EF
  314. C- 2) spg contenant melemc -> formulation VF si IVOL1=1; ERREUR sinon
  315. C- 3) ni 2) ni 3) -> formulation VF si IVOL1=0; ERREUR sinon
  316. C
  317. TYPE = ' '
  318. IKAS = 0
  319. CALL ACMO(KINC,NOMD,TYPE,MCHPOI)
  320. IF (TYPE.NE.'CHPOINT ') THEN
  321. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  322. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  323. MOTERR(9:16) = 'CHPOINT '
  324. CALL ERREUR(800)
  325. RETURN
  326. ELSE
  327. CALL LICHT(MCHPOI,MPOVAL,TYPC,MELEMD)
  328. NC = VPOCHA(/2)
  329. SEGDES MPOVAL
  330. IF (NC.NE.1) THEN
  331. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon nombre de composantes
  332. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  333. MOTERR(9:16) = 'CHPOINT '
  334. CALL ERREUR(784)
  335. RETURN
  336. ENDIF
  337. ENDIF
  338. CALL KRIPAD(MELEMD,MLENTI)
  339. CALL VERPAD(MLENTI,MELEMS,IRET1)
  340. CALL VERPAD(MLENTI,MELEMC,IRET2)
  341. IF (IRET1.EQ.0.AND.IRET2.EQ.1) THEN
  342. IKAS = 1
  343. ELSEIF (IRET1.EQ.1.AND.IRET2.EQ.0) THEN
  344. IKAS = 2
  345. IF (IVOL1.EQ.0) THEN
  346. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  347. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  348. MOTERR(9:16) = 'CHPOINT '
  349. CALL ERREUR(788)
  350. RETURN
  351. ENDIF
  352. ELSEIF (IRET1.EQ.1.AND.IRET2.EQ.1) THEN
  353. IKAS = 3
  354. IF (IVOL1.EQ.1) THEN
  355. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  356. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  357. MOTERR(9:16) = 'CHPOINT '
  358. CALL ERREUR(788)
  359. RETURN
  360. ENDIF
  361. SEGINI,IPT4=MELEMC
  362. ELSEIF (IRET1.EQ.0.AND.IRET2.EQ.0) THEN
  363. IKAS = 1
  364. ELSE
  365. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  366. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  367. MOTERR(9:16) = 'CHPOINT '
  368. CALL ERREUR(788)
  369. RETURN
  370. ENDIF
  371. C
  372. C- Identification du spg de l'inconnue primale
  373. C- Deux cas sont possibles (identifier par IKP)
  374. C- 1) spg contenant melemc -> IKP=0
  375. C- 2) spg contenant melems -> IKP=4
  376. C
  377. IF (NBINC.EQ.1) THEN
  378. IF (IKAS.EQ.1) THEN
  379. IKP = 4
  380. ELSE
  381. IKP = 0
  382. ENDIF
  383. ELSE
  384. TYPE = ' '
  385. CALL ACMO(KINC,NOMP,TYPE,MCHPOI)
  386. IF (TYPE.NE.'CHPOINT ') THEN
  387. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  388. MOTERR(1: 8) = 'INCO'//NOMP(1:4)
  389. MOTERR(9:16) = 'CHPOINT '
  390. CALL ERREUR(800)
  391. RETURN
  392. ELSE
  393. CALL LICHT(MCHPOI,MPOVAL,TYPC,MELEMP)
  394. NC = VPOCHA(/2)
  395. SEGDES MPOVAL
  396. IF (NC.NE.1) THEN
  397. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon nombre de composantes
  398. MOTERR(1: 8) = 'INCO'//NOMP(1:4)
  399. MOTERR(9:16) = 'CHPOINT '
  400. CALL ERREUR(784)
  401. RETURN
  402. ENDIF
  403. ENDIF
  404. CALL KRIPAD(MELEMP,MLENT3)
  405. CALL VERPAD(MLENT3,MELEMS,IRET1)
  406. CALL VERPAD(MLENT3,MELEMC,IRET2)
  407. SEGSUP MLENT3
  408. IF (IRET1.EQ.0.AND.IRET2.EQ.1) THEN
  409. IKP = 4
  410. ELSEIF (IRET1.EQ.1.AND.IRET2.EQ.0) THEN
  411. IKP = 0
  412. ELSEIF (IRET1.EQ.0.AND.IRET2.EQ.0) THEN
  413. IKP = 4
  414. ELSE
  415. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  416. MOTERR(1: 8) = 'INCO'//NOMP(1:4)
  417. MOTERR(9:16) = 'CHPOINT '
  418. CALL ERREUR(788)
  419. RETURN
  420. ENDIF
  421. ENDIF
  422. C
  423. C- On vérifie dans le cas surfacique que la surface est une frontière
  424. C- du domaine global dont la table DOMAINE est à l'indice 'PERE' de
  425. C- la table domaine locale.
  426. C
  427. C- Si IKAS=3, récupération des points CENTREs du maillage volumique
  428. C- associés aux points CENTREs du maillage surfacique.
  429. C
  430. IF (IVOL1.EQ.0.AND.KFORM.EQ.2) THEN
  431. TYPE = 'TABLE '
  432. CALL ACMO(MTABZ,'PERE',TYPE,KPERE)
  433. IF (IERR.NE.0) RETURN
  434. CALL LEKTAB(KPERE,'FACE ',IPT2)
  435. CALL KRIPAD(IPT2,MLENT2)
  436. CALL VERPAD(MLENT2,MELEMC,IRET)
  437. IF (IRET.EQ.1) THEN
  438. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  439. MOTERR(1: 8) = 'INCO'//NOMD(1:4)
  440. MOTERR(9:16) = 'CHPOINT '
  441. CALL ERREUR(788)
  442. RETURN
  443. ENDIF
  444. CALL LEKTAB(KPERE,'FACEL ',IPT3)
  445. IF (IERR.NE.0) RETURN
  446. SEGACT MELEMC
  447. SEGACT IPT3
  448. SEGACT MLENT2
  449. NBC = MELEMC.NUM(/2)
  450. DO 20 I=1,NBC
  451. J = MLENT2.LECT(MELEMC.NUM(1,I))
  452. IF (IPT3.NUM(2,J) .NE. MELEMC.NUM(1,I)) THEN
  453. C Incohérence entre tables DOMAINE
  454. CALL ERREUR(801)
  455. RETURN
  456. ELSE
  457. IF ( IPT3.NUM(1,J) .NE. IPT3.NUM(3,J)) THEN
  458. C La face %i1 n'est pas une frontière
  459. INTERR(1) = IPT3.NUM(2,J)
  460. CALL ERREUR(802)
  461. RETURN
  462. ENDIF
  463. IF (IKAS.EQ.3) THEN
  464. IPT4.NUM(1,I) = IPT3.NUM(1,J)
  465. ENDIF
  466. ENDIF
  467. 20 CONTINUE
  468. SEGDES MELEMC
  469. SEGDES IPT3
  470. IF (IVOL1.EQ.0 .AND. IKAS.EQ.3) SEGDES IPT4
  471. SEGDES MLENT2
  472. ENDIF
  473. C
  474. C- Cohérance des options avec le support de l'inconnue duale et IKAS
  475. C Option %m1:8 incompatible avec les données
  476. IF (IKAS.EQ.1 .AND. KFORM.EQ.2) THEN
  477. MOTERR(1:8) = ' VF '
  478. CALL ERREUR(803)
  479. RETURN
  480. ENDIF
  481. IF (IKAS.NE.1 .AND. KFORM.NE.2) THEN
  482. MOTERR(1:8) = ' EF '
  483. CALL ERREUR(803)
  484. RETURN
  485. ENDIF
  486. IF (NBINC.NE.1 .AND. KIMPL.EQ.0) THEN
  487. MOTERR(1:8) = ' EXPL '
  488. CALL ERREUR(803)
  489. RETURN
  490. ENDIF
  491. C
  492. C- Récupération des arguments (2 arguments attendus) :
  493. C- 1) Coefficient d'échange
  494. C- 2) Champ exterieur connu
  495. C
  496. CALL ACME(MTABX,'IARG',IARG)
  497. IF (IERR.NE.0) RETURN
  498. IF (IARG.NE.2) THEN
  499. C Indice %m1:8 : nombre d'arguments incorrect
  500. MOTERR(1:8) = 'IARG '
  501. CALL ERREUR(804)
  502. RETURN
  503. ENDIF
  504. IXV(1) = MELEMC
  505. IXV(2) = 1
  506. IXV(3) = 0
  507. IXV(4) = MELEMS
  508. IRET = 4
  509. CALL LEKCOF('Opérateur ECHI :',
  510. & MTABX,KINC,1,IXV,MCHPO1,MPOVA1,NPT1,NC1,IKH,IRET)
  511. IF (IRET.EQ.0) RETURN
  512. IXV(1) = MELEMC
  513. IXV(2) = 1
  514. IXV(3) = 0
  515. IXV(4) = MELEMS
  516. IRET = 4
  517. CALL LEKCOF('Opérateur ECHI :',
  518. & MTABX,KINC,2,IXV,MCHPO2,MPOVA2,NPT2,NC2,IKT,IRET)
  519. IF (IRET.EQ.0) RETURN
  520. IF (IKT.EQ.0) THEN
  521. MELEME = MELEMC
  522. ELSE
  523. MELEME = MELEMS
  524. ENDIF
  525. CALL KRIPAD(MELEME,MLENT1)
  526. C
  527. C- Calcul de la discrétisation du terme d'échange
  528. C
  529. IF(IKAS.EQ.1)THEN
  530. MELEMD=MELEMS
  531. ELSEIF(IKAS.EQ.2)THEN
  532. MELEMD=MELEMC
  533. ELSEIF(IKAS.EQ.3)THEN
  534. MELEMD=IPT4
  535. SEGDES IPT4
  536. ENDIF
  537. SEGSUP MLENTI
  538. CALL KRIPAD(MELEMD,MLENTI)
  539.  
  540. IF (KIMPL.EQ.0) THEN
  541. CALL ECHI1(IKAS,IVOL1,MTAB1,MTABZ,MPOVA1,MPOVA2,IKH,IKT,
  542. & MELEMD,IPT4,MLENTI,MLENT1,NOMD)
  543. ELSE
  544. CALL ECHI2(IKAS,IVOL1,MTAB1,MTABZ,MTABX,MPOVA1,MPOVA2,
  545. & IKH,IKT,IKP,IPT4,MLENT1,NOMP,NOMD)
  546. ENDIF
  547. RETURN
  548. END
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  

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