Télécharger konv14.eso

Retour à la liste

Numérotation des lignes :

konv14
  1. C KONV14 SOURCE OF166741 24/12/13 21:16:45 12097
  2. SUBROUTINE KONV14()
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : KONV14
  8. C
  9. C DESCRIPTION : Subroutine appellée par KONV1
  10. C
  11. C Modelisation 2D/3D du transport des scalaires
  12. C
  13. C Calcul du residu / jacobien / DELTAT
  14. C
  15. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  16. C
  17. C AUTEUR : A. BECCANTINI, DM2S/SFME
  18. C
  19. C************************************************************************
  20. C
  21. C APPELES (Calcul) :
  22. C
  23. C************************************************************************
  24. C
  25. C*** SYNTAXE
  26. C
  27. C Discrétisation en VF "cell-centered" du transport des scalaires
  28. C --> --->
  29. C d/dt S + u . grad (S) = 0
  30. C -->
  31. C avec div( u ) = 0
  32. C
  33. C RCHPO1 RFLOT1 = 'KONV' 'VF' 'CLAUDEIS' 'FACE' MOT1 MOT2
  34. C MOD1 CHPO1 MCHAM1 ;
  35. C
  36. C or
  37. C
  38. C RMAT1 = 'KONV' 'VF' 'CLAUDEIS' 'FACE' 'JACO' MOT2
  39. C MOD1 CHPO1 MCHAM1 ;
  40. C
  41. C ENTREES
  42. C
  43. C MOT1 : objet de type MOT
  44. C Il vaut 'RESI' si on veut calculer le résidu,
  45. C (i.e. l'increment des scalaires passives par unité
  46. C de temps)
  47. C Il vaut 'FLUX' si on veut calculer le flux
  48. C
  49. C MOT2 : objet de type MOT
  50. C Il indique la méthode de calcul du flux
  51. C Pour l'instant
  52. C 'UPWIND'
  53. C 'CENTERED'
  54. C
  55. C MOD1 : objet modele de type Navier_Stokes
  56. C
  57. C CHPO1 : CHPOINT contenant la vitesse aux FACEs
  58. C (SPG = l'indice 'FACE' de TAB1)
  59. C 2/3 composantes, 'UX', 'UY', 'UZ'
  60. C
  61. C MCHAM1 : MCHAML contenant les scalaires à transporter
  62. C SPG (support géométrique) l'indice 'FACEL' de
  63. C TAB1
  64. C
  65. C SORTIES
  66. C
  67. C RCHPO1 : objet de type CHPOINT (memes composantes que MCHAM1)
  68. C Residu si MOT2 = 'RESI' (SPG = TAB1 . 'CENTRE')
  69. C Flux si MOT2 = 'FLUX' (SPG = TAB1 . 'FACE')
  70. C
  71. C RFLOT1 : objet de type FLOTTANT
  72. C Il est le temps caracteristique associé à l'onde la plus
  73. C rapide.
  74. C
  75. C RMAT1 : objet de type MATRIK
  76. C (SPG = TAB1 . 'CENTRE')
  77. C (inconnues primales = inconnues duales = memes composantes
  78. C que MCHAM1)
  79. C
  80. C***********************************************************************
  81. C
  82. C************************************************************************
  83. C
  84. C HISTORIQUE (Anomalies et modifications éventuelles)
  85. C
  86. C HISTORIQUE : créée le 29.11.01
  87. C
  88. C************************************************************************
  89. C
  90. IMPLICIT INTEGER(I-N)
  91. -INC PPARAM
  92. -INC CCOPTIO
  93. -INC SMLMOTS
  94. -INC SMCHAML
  95. -INC SMCHPOI
  96. POINTEUR MLMVIT.MLMOTS, MLMSF.MLMOTS
  97. C
  98. INTEGER IDOMA, MELEMC, MELEMF, MELEFE, ICHPSU, ICHPDI , ICHPVO
  99. & , INORM, ICELL, NBMET, NBDIS,INDMET, IRES, IRET
  100. & , ISF
  101. & , INDIC, NBCOMP, IVN, IJACO
  102. & , JGM, JGN
  103. & , ICHFLU, ICHRES
  104. & , N1, N2, I1, INEFMD, ICOND
  105. C
  106. PARAMETER (NBMET=2,NBDIS=1)
  107. REAL*8 DT
  108. CHARACTER*8 LMETO(NBMET), TYPE, LVITE(NBDIS)
  109. CHARACTER*4 MOT, LFLUX(3)
  110. CHARACTER*(40) MESERR
  111. LOGICAL LOGAN
  112. C
  113. DATA LVITE/'FACE '/
  114. DATA LMETO/'UPWIND ','CENTERED'/
  115. DATA LFLUX/'FLUX','RESI','JACO'/
  116. C
  117. C**** Initialisation des variables pour la gestion des erreurs.
  118. C
  119. LOGAN = .FALSE.
  120. MESERR = ' '
  121. C
  122. C***** Vitesse aux faces???
  123. C
  124. CALL LIRMOT(LVITE,NBDIS,ICELL,1)
  125. IF(IERR .NE. 0)GOTO 9999
  126. IF(ICELL .EQ. 0)THEN
  127. C
  128. C******** Message d'erreur standard
  129. C 251 2
  130. C Tentative d'utilisation d'une option non implémentée
  131. C
  132. CALL ERREUR(251)
  133. ENDIF
  134. C
  135. C******* Flux, residu, ou jacobien ???
  136. C
  137. CALL LIRMOT(LFLUX,3,IRES,1)
  138. IF(IERR .NE. 0)GOTO 9999
  139. C
  140. C**** Metode utilisée
  141. C
  142. CALL LIRMOT(LMETO,NBMET,INDMET,1)
  143. IF(IERR .NE. 0)GOTO 9999
  144. IF(INDMET .EQ. 0)THEN
  145. C
  146. C******** Message d'erreur standard
  147. C 251 2
  148. C Tentative d'utilisation d'une option non implémentée
  149. C
  150. CALL ERREUR(251)
  151. ENDIF
  152. C
  153. C**********************************
  154. C**** Lecture de l'objet MODELE ***
  155. C**********************************
  156. C
  157. ICOND = 1
  158. CALL QUETYP(TYPE,ICOND,IRET)
  159.  
  160. IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
  161. WRITE(6,*)' On attend un objet MMODEL'
  162. RETURN
  163. ENDIF
  164. CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
  165. IF(IERR.NE.0)GOTO 9999
  166. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  167. IF(IERR.NE.0)GOTO 9999
  168. C
  169. C**** Centre, FACE, FACEL, ELTFA
  170. C
  171. CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
  172. IF(IERR .NE. 0) GOTO 9999
  173. C
  174. CALL LEKTAB(IDOMA,'FACE',MELEMF)
  175. IF(IERR .NE. 0) GOTO 9999
  176. C
  177. CALL LEKTAB(IDOMA,'FACEL',MELEFE)
  178. IF(IERR .NE. 0) GOTO 9999
  179. C
  180. C**** Lecture du CHPOINT contenant les surfaces des faces.
  181. C
  182. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  183. IF(IERR .NE. 0) GOTO 9999
  184. INDIC = 1
  185. NBCOMP = 1
  186. MOT = 'SCAL'
  187. CALL QUEPOI(ICHPSU, MELEMF, INDIC, NBCOMP, MOT)
  188. IF(IERR .NE. 0) GOTO 9999
  189. C
  190. C**** Lecture du CHPOINT contenant les diametres minimums.
  191. C
  192. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  193. IF(IERR .NE. 0) GOTO 9999
  194. INDIC = 1
  195. NBCOMP = 1
  196. MOT = 'SCAL'
  197. CALL QUEPOI(ICHPDI, MELEMC, INDIC, NBCOMP, MOT)
  198. IF(IERR .NE. 0) GOTO 9999
  199.  
  200. C
  201. C**** Lecture du CHPOINT contenant les volumes
  202. C
  203. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  204. IF(IERR .NE. 0) GOTO 9999
  205. INDIC = 1
  206. NBCOMP = 1
  207. MOT = 'SCAL'
  208. CALL QUEPOI(ICHPVO, MELEMC, INDIC, NBCOMP, MOT)
  209. IF(IERR .NE. 0) GOTO 9999
  210. C
  211. C**** Les normales aux faces
  212. C
  213. C Que les normales
  214. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  215. IF(IERR .NE. 0) GOTO 9999
  216. JGN = 4
  217. JGM = IDIM
  218. SEGINI MLMVIT
  219. MLMVIT.MOTS(1) = 'UX '
  220. MLMVIT.MOTS(2) = 'UY '
  221. IF(IDIM.EQ.3) MLMVIT.MOTS(3) = 'UZ '
  222. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  223. SEGSUP MLMVIT
  224. IF(IERR .NE. 0) GOTO 9999
  225. C
  226. C********************************
  227. C**** Fin table domaine *********
  228. C********************************
  229. C
  230. C**** La vitesse aux faces
  231. C
  232. TYPE = 'CHPOINT '
  233. CALL LIROBJ(TYPE,IVN,1,IRET)
  234. IF(IERR .NE. 0) GOTO 9999
  235. C
  236. JGN = 4
  237. JGM = IDIM
  238. SEGINI MLMVIT
  239. MLMVIT.MOTS(1) = 'UX '
  240. MLMVIT.MOTS(2) = 'UY '
  241. IF(IDIM .EQ. 3) MLMVIT.MOTS(3) = 'UZ '
  242. CALL QUEPO1(IVN, MELEMF, MLMVIT)
  243. IF(IERR .NE. 0) GOTO 9999
  244. SEGSUP MLMVIT
  245. C
  246. C**** On va lire le pointeur du MCHAML
  247. C
  248. TYPE='MCHAML '
  249. CALL LIROBJ(TYPE,ISF,1,IRET)
  250. IF(IERR.NE.0) GOTO 9999
  251. C
  252. C**** On lit les composantes du MCHAML
  253. C
  254. MCHELM=ISF
  255. SEGACT MCHELM
  256. N1=MCHELM.IMACHE(/1)
  257. IF(N1 .NE. 1)THEN
  258. MOTERR(1:40)='MCHAM1 = ??? '
  259. WRITE(IOIMP,*) MOTERR
  260. C
  261. C******** Message d'erreur standard
  262. C 251 2
  263. C Tentative d'utilisation d'une option non implémentée
  264. C
  265. CALL ERREUR(251)
  266. GOTO 9999
  267. ENDIF
  268. MCHAML=MCHELM.ICHAML(1)
  269. SEGDES MCHELM
  270. SEGACT MCHAML
  271. N2=MCHAML.IELVAL(/1)
  272. JGN = LOCOMP
  273. JGM = N2
  274. SEGINI MLMSF
  275. DO I1=1,N2,1
  276. MLMSF.MOTS(I1) = MCHAML.NOMCHE(I1)
  277. ENDDO
  278. C
  279. C
  280. C**** Calcul du flux/residu
  281. C
  282. IF((IRES .EQ. 1) .OR. (IRES .EQ. 2))THEN
  283. IJACO=0
  284. TYPE = 'CHPOINT '
  285. CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMSF)
  286. IF(IERR.NE.0) GOTO 9999
  287. C
  288. CALL KONSF1(INDMET,ISF,IVN,INORM,ICHPSU,ICHPDI,
  289. & MELEMC,MELEMF,MELEFE,ICHFLU,DT,LOGAN,
  290. & MESERR)
  291. IF(IERR.NE.0)GOTO 9999
  292. IF(LOGAN)THEN
  293. C
  294. C******* Anomalie detectée
  295. C
  296. C
  297. C******* Message d'erreur standard
  298. C -301 0
  299. C %m1:40
  300. C
  301. MOTERR(1:40) = MESERR(1:40)
  302. WRITE(IOIMP,*) MOTERR(1:40)
  303. C
  304. C******* Message d'erreur standard
  305. C 5 3
  306. C Erreur anormale.contactez votre support
  307. C
  308. CALL ERREUR(5)
  309. GOTO 9999
  310. ENDIF
  311. C
  312. C**** Calcul de residu (IRES=2)
  313. C
  314. IF(IRES .EQ. 2)THEN
  315. TYPE = 'CHPOINT '
  316. CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMSF)
  317. IF(IERR.NE.0)GOTO 9999
  318. C
  319. CALL KONRE1(MELEMC,MELEMF,MELEFE,ICHPVO,
  320. & ICHFLU, ICHRES,
  321. & LOGAN,MESERR)
  322. IF(IERR.NE.0)GOTO 9999
  323. ICHFLU=0
  324. IF(LOGAN)THEN
  325. C
  326. C******* Anomalie detectée
  327. C
  328. C
  329. C******* Message d'erreur standard
  330. C -301 0
  331. C %m1:40
  332. C
  333. MOTERR(1:40) = MESERR(1:40)
  334. WRITE(IOIMP,*) MOTERR(1:40)
  335. C
  336. C******* Message d'erreur standard
  337. C 5 3
  338. C Erreur anormale.contactez votre support
  339. C
  340. CALL ERREUR(5)
  341. GOTO 9999
  342. ENDIF
  343. ELSE
  344. ICHRES = 0
  345. ENDIF
  346. ELSEIF(IRES.EQ.3)THEN
  347. C
  348. C**** Calcul du jacobien
  349. C
  350. ICHRES=0
  351. ICHFLU=0
  352. CALL KONJS1(INDMET,MLMSF,ISF,IVN,INORM,ICHPVO,
  353. & ICHPSU,MELEMC,MELEMF,MELEFE,IJACO)
  354. IF(IERR .NE. 0) GOTO 9999
  355. ELSE
  356. CALL ERREUR(251)
  357. GOTO 9999
  358. ENDIF
  359. C
  360. SEGSUP MLMSF
  361. C
  362. C**** Ecriture des resultats
  363. C
  364. IF(IJACO .EQ. 0)CALL ECRREE(DT)
  365. TYPE = 'CHPOINT '
  366. IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
  367. IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
  368. TYPE='MATRIK '
  369. IF(IJACO .NE. 0) CALL ECROBJ(TYPE,IJACO)
  370. 9999 CONTINUE
  371. RETURN
  372. END
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  

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