Télécharger yfimp.eso

Retour à la liste

Numérotation des lignes :

yfimp
  1. C YFIMP SOURCE GOUNAND 25/11/12 21:15:47 12399
  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,2,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.  

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