Télécharger yfimp.eso

Retour à la liste

Numérotation des lignes :

yfimp
  1. C YFIMP SOURCE CB215821 20/11/25 13:43:49 10792
  2. SUBROUTINE YFIMP
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C
  7. C SYNTAXE :
  8. C
  9. C I)
  10. C
  11. C FIMP coef
  12. C / /
  13. C On calcule | W S do = | Ma NbSb do
  14. C / /
  15. C EN 2D
  16. C elements SEG2 -> Flux
  17. C elements TRI3 -> Source volumique
  18. C elements QUA4 -> Source volumique
  19. C EN 3D
  20. C elements SEG2 -> Pas de sens !!
  21. C elements TRI3 -> Flux
  22. C elements QUA4 -> Flux
  23. C elements CUB8 -> Source volumique
  24. C elements PRI6 -> Source volumique
  25. C elements TET4 -> Source volumique
  26. C
  27. C
  28. C MTAB1 : Table type EQEX -> RV
  29. C MTABZ : Table type DOMAINE -> Zone definition opérateur
  30. C MTABD : Table type DOMAINE -> Zone Totale apres assemblage
  31. C MTABX : Table type KIZX -> Description opérateur
  32. C
  33. C
  34. C II) Source term into the Euler/Navier Stokes equations
  35. C (FV formulation) (see fimpvf.eso)
  36. C
  37. C
  38. C***********************************************************************
  39.  
  40.  
  41. -INC PPARAM
  42. -INC CCOPTIO
  43. -INC CCREEL
  44. -INC CCGEOME
  45. -INC SMCHAML
  46. -INC SMCOORD
  47. -INC SMLENTI
  48. -INC SMELEME
  49. POINTEUR MELEM1.MELEME,SPGID.MELEME,SPGZ.MELEME
  50. POINTEUR MELEMD.MELEME,SPGD.MELEME
  51. -INC SMCHPOI
  52. POINTEUR IZG1.MCHPOI, IZGG1.MPOVAL
  53. POINTEUR IZTU1.MPOVAL
  54. POINTEUR MZFLU.MPOVAL
  55. -INC SIZFFB
  56. POINTEUR IZF1.IZFFM,IZH2.IZHR,IZW.IZFFM,IZWH.IZHR
  57. SEGMENT SAJT
  58. REAL*8 AJT(IDIM,IDIM,NPG),RF1(NP,MP,IDIM),SM1(NP,IDIM)
  59. REAL*8 TN1(NP,IDIM),TN2(NP,IDIM)
  60. ENDSEGMENT
  61.  
  62. -INC SMLMOTS
  63. POINTEUR LINCO.MLMOTS
  64. CHARACTER*8 NOMZ,NOMI,NOMA,TYPE,NOM0,TYPC,MTERR,MTYP,CHAI
  65. CHARACTER*4 NOMD4,CHAR
  66. LOGICAL LOGI,XPG
  67. PARAMETER (NTB=1)
  68. CHARACTER*8 LTAB(NTB),LNOMD(6)
  69. DIMENSION KTAB(NTB),IXV(4)
  70. DATA LTAB/'KIZX '/
  71. DATA LNOMD/'SOMMET ','FACE ','CENTRE ','CENTREP0','CENTREP1'
  72. & ,'MSOMMET '/
  73. C*****************************************************************************
  74. CFIMP
  75. c write(6,*)' Debut FIMP'
  76. C
  77. segact mcoord
  78. C***** FV Euler/Navier-Stokes equations
  79. C
  80. IRET=0
  81. CALL LIRCHA(CHAR,0,IRET)
  82. IF(IERR.NE.0)GOTO 9999
  83. IF(IRET.NE.0)THEN
  84. IF(CHAR .EQ. 'VF ')THEN
  85. CALL FIMPVF()
  86. GOTO 9999
  87. ELSE
  88. CALL REFUS
  89. ENDIF
  90. ENDIF
  91. C Nouvelle directive EQUA de EQEX
  92. MTYP=' '
  93. CALL QUETYP(MTYP,0,IRET)
  94. IF(IRET.EQ.0)THEN
  95. C% On attend un des objets : %m1:8 %m9:16 %m17:24 %m25:32 %m33:40
  96. MOTERR( 1: 8) = 'CHAI '
  97. MOTERR( 9:16) = 'MMODEL '
  98. MOTERR(17:24) = 'TABLE '
  99. CALL ERREUR(472)
  100. RETURN
  101. ENDIF
  102.  
  103. IF(MTYP.EQ.'MMODEL')THEN
  104. CALL YTCLSF(' S ','FIMP ')
  105. RETURN
  106. ELSEIF(MTYP.EQ.'MOT ')THEN
  107. CALL LIRCHA(CHAI,1,IRET)
  108. CALL YTCLSF(CHAI,'FIMP ')
  109. RETURN
  110. ENDIF
  111. C Fin Nouvelle directive EQUA de EQEX
  112.  
  113. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  114. IF (IERR.NE.0) RETURN
  115. MTABX=KTAB(1)
  116.  
  117. C.......................................................................
  118. C
  119. C- Récupération de la table EQEX (pointeur MTAB1)
  120. C
  121.  
  122. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  123. IF(MTAB1.EQ.0)THEN
  124. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  125. MOTERR( 1: 8) = ' EQEX '
  126. MOTERR( 9:16) = ' EQEX '
  127. MOTERR(17:24) = ' KIZX '
  128. CALL ERREUR(786)
  129. RETURN
  130. ENDIF
  131. CALL ACME(MTAB1,'NAVISTOK',NASTOK)
  132. IF(NASTOK.EQ.0)THEN
  133. CALL ZZFIMP(MTABX,MTAB1)
  134. RETURN
  135. ENDIF
  136. C
  137. C- Récupération de la table INCO (pointeur KINC)
  138. C
  139. CALL LEKTAB(MTAB1,'INCO',KINC)
  140. IF(KINC.EQ.0)THEN
  141. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  142. MOTERR( 1: 8) = ' INCO '
  143. MOTERR( 9:16) = ' INCO '
  144. MOTERR(17:24) = ' EQEX '
  145. CALL ERREUR(786)
  146. RETURN
  147. ENDIF
  148. C.......................................................................
  149.  
  150. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  151.  
  152. CALL LIROBJ('MMODEL',MMDZ,0,IRET)
  153. IF(IRET.EQ.0)THEN
  154. TYPE=' '
  155. CALL ACMO(MTABX,'DOMZ',TYPE,MMDZ)
  156. IF(TYPE.NE.'MMODEL')THEN
  157. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  158. MOTERR( 1: 8) = ' DOMZ '
  159. MOTERR( 9:16) = ' DOMZ '
  160. MOTERR(17:24) = ' KIZX '
  161. CALL ERREUR(786)
  162. RETURN
  163. ENDIF
  164. ENDIF
  165.  
  166. C*****************************************************************************
  167. C OPTIONS
  168. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  169. C IDCEN = 0->rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  170. C KPOIN = 0->SOMMET 1-> FACE 2-> CENTRE 3-> CENTREP0 4-> CENTREP1 5-> MSOMMET
  171.  
  172. IAXI=0
  173. IF(IFOMOD.EQ.0)IAXI=2
  174. DEUPI=1.D0
  175. IF(IAXI.NE.0)DEUPI=2.D0*XPI
  176. C
  177. C- Récupération de la table des options KOPT (pointeur KOPTI)
  178. C
  179. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  180. IF (KOPTI.EQ.0) THEN
  181. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  182. MOTERR( 1: 8) = ' KOPT '
  183. MOTERR( 9:16) = ' KOPT '
  184. MOTERR(17:24) = ' KIZX '
  185. CALL ERREUR(786)
  186. RETURN
  187. ENDIF
  188.  
  189.  
  190. XPG=.FALSE.
  191. CALL ACME(KOPTI,'IDCEN',IDCEN)
  192. CALL ACMF(KOPTI,'CMD ',CMD )
  193. IF(IDCEN.NE.0)XPG=.TRUE.
  194. KDIM=1
  195. IF(IDCEN.EQ.2)KDIM=IDIM
  196. CALL ACME(KOPTI,'KFORM',KFORM)
  197. CALL ACME(KOPTI,'KPOIND',KPOIND)
  198. c write(6,*)' INCOD=',KPOIND,' IDCEN=',IDCEN
  199.  
  200. IF(KFORM.GE.2)THEN
  201. C Option %m1:8 incompatible avec les données
  202. MOTERR( 1: 8) = 'EF/EFM1 '
  203. CALL ERREUR(803)
  204. RETURN
  205. ENDIF
  206. IF (IERR.NE.0) RETURN
  207.  
  208. C write(6,*)' Apres les options '
  209. C*****************************************************************************
  210. C
  211. C- Récupération de la table DOMAINE associée au domaine local
  212. C
  213.  
  214. C E/ MMODEL : Pointeur de la table contenant l'information cherchée
  215. C /S IPOINT : Pointeur sur la table DOMAINE
  216. C /S INEFMD : Type formulation INEFMD=1 LINE,=2 MACRO,=3 QUADRATIQUE
  217. C INEFMD=4 LINB
  218.  
  219. CALL LEKMOD(MMDZ,MTABZ,INEFMD)
  220. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  221. IF (IERR.NE.0) RETURN
  222. c write(6,*)' INEFMD=',inefmd
  223.  
  224. C
  225. C- Vérification des compatiblités Formulation/SPG
  226. C- Identification du spg de l'inconnue
  227. C- SPGZ=spg inco duale de la zone; MELEME=connectivité associée ;
  228. C
  229.  
  230. C EFM1 / EF
  231. c write(6,*)' KFORM=',kform,' KPOIND=',kpoind
  232. IF(KPOIND.EQ.99.OR.KPOIND.EQ.0)THEN
  233.  
  234. NOMD4= ' '
  235. KPOIND=0
  236. CALL LEKTAB(MTABZ,'MAILLAGE',MELEMD)
  237. CALL LEKTAB(MTABZ,'SOMMET',SPGD)
  238. c write(6,*)'SOMMET MTABZ=',MTABZ,'SPGD=',SPGD,'MELEMD=',MELEMD
  239. IF (IERR.NE.0) RETURN
  240.  
  241. ELSEIF(KPOIND.EQ.2)THEN
  242.  
  243. NOMD4= ' '
  244. c CALL LEKTAB(MTABZ,'MAILLAGE',MELEMD)
  245. CALL LEKTAB(MTABZ,'CENTRE',MELEMD)
  246. CALL LEKTAB(MTABZ,'CENTRE ',SPGD)
  247. IF (IERR.NE.0) RETURN
  248.  
  249. ELSEIF(KPOIND.EQ.3)THEN
  250.  
  251. MTERR='EF CTRP0'
  252. IF(INEFMD.EQ.2)NOMD4='MCP0'
  253. IF(INEFMD.EQ.3)NOMD4='PRP0'
  254. IF(INEFMD.NE.2.AND.INEFMD.NE.3)GO TO 90
  255. CALL LEKTAB(MTABZ,'CENTREP0',MELEMD)
  256. CALL LEKTAB(MTABZ,'CENTREP0',SPGD)
  257. IF(INEFMD.EQ.2)CALL LEKTAB(MTABZ,'MACRO1',MELEME)
  258. IF (IERR.NE.0) RETURN
  259.  
  260. ELSEIF(KPOIND.EQ.4)THEN
  261.  
  262. MTERR='EF CTRP1'
  263. IF(INEFMD.EQ.2)NOMD4='MCP1'
  264. IF(INEFMD.EQ.3)NOMD4='PRP1'
  265. IF(INEFMD.NE.2.AND.INEFMD.NE.3)GO TO 90
  266. CALL LEKTAB(MTABZ,'CENTREP1',SPGD)
  267. CALL LEKTAB(MTABZ,'ELTP1NC ',MELEMD)
  268. IF(INEFMD.EQ.2)CALL LEKTAB(MTABZ,'MACRO1',MELEME)
  269. IF (IERR.NE.0) RETURN
  270.  
  271. ELSEIF(KPOIND.EQ.5)THEN
  272.  
  273. MTERR='EF Pcont'
  274. NOMD4= 'P1P1'
  275. IF(INEFMD.EQ.2)NOMD4='MCF1'
  276. IF(INEFMD.EQ.3)NOMD4='PFP1'
  277. CALL LEKTAB(MTABZ,'MSOMMET',SPGD)
  278. CALL LEKTAB(MTABZ,'MMAIL ',MELEMD)
  279. IF(INEFMD.EQ.2)CALL LEKTAB(MTABZ,'MACRO1',MELEME)
  280. IF (IERR.NE.0) RETURN
  281.  
  282. ELSEIF(KPOIND.NE.2.AND.KPOIND.NE.0.AND.KPOIND.NE.3
  283. & .AND.KPOIND.NE.4.AND.KPOIND.NE.5)THEN
  284. C Option %m1:8 incompatible avec les données
  285. MOTERR( 1: 8) = ' EF '
  286. CALL ERREUR(803)
  287. RETURN
  288. ENDIF
  289.  
  290. C*************************************************************************
  291. C Lecture du coefficient
  292. C write(6,*)' Lecture des coefficients '
  293.  
  294. CALL ACME(MTABX,'IARG',IARG)
  295. IF(IARG.NE.1)THEN
  296. C Indice %m1:8 : nombre d'arguments incorrect
  297. MOTERR(1:8) = 'IARG '
  298. CALL ERREUR(804)
  299. RETURN
  300. ENDIF
  301.  
  302. XPG=.FALSE.
  303. IDCEN=0
  304. IVC=0
  305. c write(6,*)' KPOIND=',KPOIND,'INEFMD=',INEFMD,MELEME
  306. CALL LEKMOF(MTABZ,1,MTABX,KINC,IVC,MCHEL4,KPOIND,0,MCHELG)
  307. IF (IERR.NE.0) RETURN
  308. c write(6,*)' MCHEL4=',MCHEL4,'IRET=',IRET
  309. c & ,' MELEMD=',MELEMD,'SPGD=',SPGD
  310.  
  311. C Fin lecture Arguments **************************************************
  312.  
  313. C*************************************************************************
  314. C VERIFICATIONS SUR LES INCONNUES
  315. C
  316. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  317. C
  318. TYPE='LISTMOTS'
  319. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  320. IF (IERR.NE.0) RETURN
  321. SEGACT LINCO
  322. NBINC=LINCO.MOTS(/2)
  323. IF(NBINC.NE.1)THEN
  324. C Indice %m1:8 : contient plus de %i1 %m9:16
  325. MOTERR( 1:8) = 'LISTINCO'
  326. INTERR(1) = 1
  327. MOTERR(9:16) = ' MOTS '
  328. CALL ERREUR(799)
  329. RETURN
  330. ENDIF
  331.  
  332. NOMI=LINCO.MOTS(1)
  333.  
  334. C --> 1 ere Inconnue
  335.  
  336. NOMI=LINCO.MOTS(1)
  337. C write(6,*)' NOMI=',nomi
  338.  
  339. TYPE=' '
  340. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  341. IF(TYPE.NE.'CHPOINT ')THEN
  342. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  343. MOTERR( 1: 8) = 'INC '//NOMI
  344. MOTERR( 9:16) = 'CHPOINT '
  345. CALL ERREUR(800)
  346. RETURN
  347. ELSE
  348. CALL LICHT(MCHPOI,IZTU1,TYPC,SPGID)
  349. ENDIF
  350.  
  351. C*************************************************************************
  352. C Le domaine de definition est donne par le SPG de la premiere inconnue
  353. C Les inconnues suivantes devront posseder ce meme pointeur
  354. C On verifie que les points de la zone sont tous inclus dans ce SPG
  355.  
  356.  
  357. CALL KRIPAD(SPGID,MLENTI)
  358. CALL VERPAD(MLENTI,SPGD,IRET)
  359. SEGSUP MLENTI
  360. IF(IRET.NE.0)THEN
  361. WRITE(6,*)'KPOIND =',KPOIND,' SPGD=',SPGD,' SPGID=',SPGID
  362. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  363. MOTERR(1: 8) = 'INC '//NOMI
  364. MOTERR(9:16) = 'CHPOINT '
  365. CALL ERREUR(788)
  366. RETURN
  367. ENDIF
  368.  
  369. NC=IZTU1.VPOCHA(/2)
  370. SEGDES IZTU1
  371. CALL KRCHPT(LNOMD(KPOIND+1),SPGD,NC,MCHPO1,NOMI(1:4))
  372.  
  373. CALL XXSOUR(KPOIND,NOMD4,MCHPO1,XPG,MELEME,MELEMD,SPGD,MCHEL4,
  374. &INEFMD)
  375.  
  376. NRIGE=7
  377. NMATRI=0
  378. NKID =9
  379. NKMT =7
  380. SEGINI MATRIK
  381. segdes matrik
  382. CALL ECROBJ('MATRIK',MATRIK)
  383.  
  384. segdes MCHPO1
  385. CALL ECROBJ('CHPOINT',MCHPO1)
  386.  
  387. SEGDES LINCO
  388.  
  389. c write(6,*)' FIN FIMP'
  390. 9999 CONTINUE
  391. RETURN
  392. 90 CONTINUE
  393. C Option %m1:8 incompatible avec les données
  394. MOTERR( 1: 8) = MTERR
  395. CALL ERREUR(803)
  396. RETURN
  397.  
  398. 1002 FORMAT(10(1X,1PE11.4))
  399. END
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  

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