Télécharger konv14.eso

Retour à la liste

Numérotation des lignes :

  1. C KONV14 SOURCE PV 16/11/17 22:00:14 9180
  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 CCOPTIO
  92. -INC SMLMOTS
  93. -INC SMCHAML
  94. -INC SMCHPOI
  95. POINTEUR MLMVIT.MLMOTS, MLMSF.MLMOTS
  96. C
  97. C**** Variables de COOPTIO
  98. C
  99. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  100. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  101. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  102. C & ,IECHO, IIMPI, IOSPI
  103. C & ,IDIM
  104. C & ,MCOORD
  105. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  106. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  107. C & ,NORINC,NORVAL,NORIND,NORVAD
  108. C & ,NUCROU, IPSAUV
  109. C
  110. INTEGER IDOMA, MELEMC, MELEMF, MELEFE, ICHPSU, ICHPDI , ICHPVO
  111. & , INORM, ICELL, NBMET, NBDIS,INDMET, IRES, IRET
  112. & , ISF
  113. & , INDIC, NBCOMP, IVN, IJACO
  114. & , JGM, JGN
  115. & , ICHFLU, ICHRES
  116. & , N1, N2, I1, INEFMD, ICOND
  117. C
  118. PARAMETER (NBMET=2,NBDIS=1)
  119. REAL*8 DT
  120. CHARACTER*8 LMETO(NBMET), TYPE, LVITE(NBDIS)
  121. CHARACTER*4 MOT, LFLUX(3)
  122. CHARACTER*(40) MESERR
  123. LOGICAL LOGAN
  124. C
  125. DATA LVITE/'FACE '/
  126. DATA LMETO/'UPWIND ','CENTERED'/
  127. DATA LFLUX/'FLUX','RESI','JACO'/
  128. C
  129. C**** Initialisation des variables pour la gestion des erreurs.
  130. C
  131. LOGAN = .FALSE.
  132. MESERR = ' '
  133. C
  134. C***** Vitesse aux faces???
  135. C
  136. CALL LIRMOT(LVITE,NBDIS,ICELL,1)
  137. IF(IERR .NE. 0)GOTO 9999
  138. IF(ICELL .EQ. 0)THEN
  139. C
  140. C******** Message d'erreur standard
  141. C 251 2
  142. C Tentative d'utilisation d'une option non implémentée
  143. C
  144. CALL ERREUR(251)
  145. ENDIF
  146. C
  147. C******* Flux, residu, ou jacobien ???
  148. C
  149. CALL LIRMOT(LFLUX,3,IRES,1)
  150. IF(IERR .NE. 0)GOTO 9999
  151. C
  152. C**** Metode utilisée
  153. C
  154. CALL LIRMOT(LMETO,NBMET,INDMET,1)
  155. IF(IERR .NE. 0)GOTO 9999
  156. IF(INDMET .EQ. 0)THEN
  157. C
  158. C******** Message d'erreur standard
  159. C 251 2
  160. C Tentative d'utilisation d'une option non implémentée
  161. C
  162. CALL ERREUR(251)
  163. ENDIF
  164. C
  165. C**********************************
  166. C**** Lecture de l'objet MODELE ***
  167. C**********************************
  168. C
  169. ICOND = 1
  170. CALL QUETYP(TYPE,ICOND,IRET)
  171.  
  172. IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
  173. WRITE(6,*)' On attend un objet MMODEL'
  174. RETURN
  175. ENDIF
  176. CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
  177. IF(IERR.NE.0)GOTO 9999
  178. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  179. IF(IERR.NE.0)GOTO 9999
  180. C
  181. C**** Centre, FACE, FACEL, ELTFA
  182. C
  183. CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
  184. IF(IERR .NE. 0) GOTO 9999
  185. C
  186. CALL LEKTAB(IDOMA,'FACE',MELEMF)
  187. IF(IERR .NE. 0) GOTO 9999
  188. C
  189. CALL LEKTAB(IDOMA,'FACEL',MELEFE)
  190. IF(IERR .NE. 0) GOTO 9999
  191. C
  192. C**** Lecture du CHPOINT contenant les surfaces des faces.
  193. C
  194. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  195. IF(IERR .NE. 0) GOTO 9999
  196. INDIC = 1
  197. NBCOMP = 1
  198. MOT = 'SCAL'
  199. CALL QUEPOI(ICHPSU, MELEMF, INDIC, NBCOMP, MOT)
  200. IF(IERR .NE. 0) GOTO 9999
  201. C
  202. C**** Lecture du CHPOINT contenant les diametres minimums.
  203. C
  204. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  205. IF(IERR .NE. 0) GOTO 9999
  206. INDIC = 1
  207. NBCOMP = 1
  208. MOT = 'SCAL'
  209. CALL QUEPOI(ICHPDI, MELEMC, INDIC, NBCOMP, MOT)
  210. IF(IERR .NE. 0) GOTO 9999
  211.  
  212. C
  213. C**** Lecture du CHPOINT contenant les volumes
  214. C
  215. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  216. IF(IERR .NE. 0) GOTO 9999
  217. INDIC = 1
  218. NBCOMP = 1
  219. MOT = 'SCAL'
  220. CALL QUEPOI(ICHPVO, MELEMC, INDIC, NBCOMP, MOT)
  221. IF(IERR .NE. 0) GOTO 9999
  222. C
  223. C**** Les normales aux faces
  224. C
  225. C Que les normales
  226. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  227. IF(IERR .NE. 0) GOTO 9999
  228. JGN = 4
  229. JGM = IDIM
  230. SEGINI MLMVIT
  231. MLMVIT.MOTS(1) = 'UX '
  232. MLMVIT.MOTS(2) = 'UY '
  233. IF(IDIM.EQ.3) MLMVIT.MOTS(3) = 'UZ '
  234. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  235. SEGSUP MLMVIT
  236. IF(IERR .NE. 0) GOTO 9999
  237. C
  238. C********************************
  239. C**** Fin table domaine *********
  240. C********************************
  241. C
  242. C**** La vitesse aux faces
  243. C
  244. TYPE = 'CHPOINT '
  245. CALL LIROBJ(TYPE,IVN,1,IRET)
  246. IF(IERR .NE. 0) GOTO 9999
  247. C
  248. JGN = 4
  249. JGM = IDIM
  250. SEGINI MLMVIT
  251. MLMVIT.MOTS(1) = 'UX '
  252. MLMVIT.MOTS(2) = 'UY '
  253. IF(IDIM .EQ. 3) MLMVIT.MOTS(3) = 'UZ '
  254. CALL QUEPO1(IVN, MELEMF, MLMVIT)
  255. IF(IERR .NE. 0) GOTO 9999
  256. SEGSUP MLMVIT
  257. C
  258. C**** On va lire le pointeur du MCHAML
  259. C
  260. TYPE='MCHAML '
  261. CALL LIROBJ(TYPE,ISF,1,IRET)
  262. IF(IERR.NE.0) GOTO 9999
  263. C
  264. C**** On lit les composantes du MCHAML
  265. C
  266. MCHELM=ISF
  267. SEGACT MCHELM
  268. N1=MCHELM.IMACHE(/1)
  269. IF(N1 .NE. 1)THEN
  270. MOTERR(1:40)='MCHAM1 = ??? '
  271. WRITE(IOIMP,*) MOTERR
  272. C
  273. C******** Message d'erreur standard
  274. C 251 2
  275. C Tentative d'utilisation d'une option non implémentée
  276. C
  277. CALL ERREUR(251)
  278. GOTO 9999
  279. ENDIF
  280. MCHAML=MCHELM.ICHAML(1)
  281. SEGDES MCHELM
  282. SEGACT MCHAML
  283. N2=MCHAML.IELVAL(/1)
  284. JGN = 4
  285. JGM = N2
  286. SEGINI MLMSF
  287. DO I1=1,N2,1
  288. MLMSF.MOTS(I1) = MCHAML.NOMCHE(I1)
  289. ENDDO
  290. C
  291. C
  292. C**** Calcul du flux/residu
  293. C
  294. IF((IRES .EQ. 1) .OR. (IRES .EQ. 2))THEN
  295. IJACO=0
  296. TYPE = 'CHPOINT '
  297. CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMSF)
  298. IF(IERR.NE.0) GOTO 9999
  299. C
  300. CALL KONSF1(INDMET,ISF,IVN,INORM,ICHPSU,ICHPDI,
  301. & MELEMC,MELEMF,MELEFE,ICHFLU,DT,LOGAN,
  302. & MESERR)
  303. IF(IERR.NE.0)GOTO 9999
  304. IF(LOGAN)THEN
  305. C
  306. C******* Anomalie detectée
  307. C
  308. C
  309. C******* Message d'erreur standard
  310. C -301 0
  311. C %m1:40
  312. C
  313. MOTERR(1:40) = MESERR(1:40)
  314. WRITE(IOIMP,*) MOTERR(1:40)
  315. C
  316. C******* Message d'erreur standard
  317. C 5 3
  318. C Erreur anormale.contactez votre support
  319. C
  320. CALL ERREUR(5)
  321. GOTO 9999
  322. ENDIF
  323. C
  324. C**** Calcul de residu (IRES=2)
  325. C
  326. IF(IRES .EQ. 2)THEN
  327. TYPE = 'CHPOINT '
  328. CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMSF)
  329. IF(IERR.NE.0)GOTO 9999
  330. C
  331. CALL KONRE1(MELEMC,MELEMF,MELEFE,ICHPVO,
  332. & ICHFLU, ICHRES,
  333. & LOGAN,MESERR)
  334. IF(IERR.NE.0)GOTO 9999
  335. ICHFLU=0
  336. IF(LOGAN)THEN
  337. C
  338. C******* Anomalie detectée
  339. C
  340. C
  341. C******* Message d'erreur standard
  342. C -301 0
  343. C %m1:40
  344. C
  345. MOTERR(1:40) = MESERR(1:40)
  346. WRITE(IOIMP,*) MOTERR(1:40)
  347. C
  348. C******* Message d'erreur standard
  349. C 5 3
  350. C Erreur anormale.contactez votre support
  351. C
  352. CALL ERREUR(5)
  353. GOTO 9999
  354. ENDIF
  355. ELSE
  356. ICHRES = 0
  357. ENDIF
  358. ELSEIF(IRES.EQ.3)THEN
  359. C
  360. C**** Calcul du jacobien
  361. C
  362. ICHRES=0
  363. ICHFLU=0
  364. CALL KONJS1(INDMET,MLMSF,ISF,IVN,INORM,ICHPVO,
  365. & ICHPSU,MELEMC,MELEMF,MELEFE,IJACO)
  366. IF(IERR .NE. 0) GOTO 9999
  367. ELSE
  368. CALL ERREUR(251)
  369. GOTO 9999
  370. ENDIF
  371. C
  372. SEGSUP MLMSF
  373. C
  374. C**** Ecriture des resultats
  375. C
  376. IF(IJACO .EQ. 0)CALL ECRREE(DT)
  377. TYPE = 'CHPOINT '
  378. IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
  379. IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
  380. TYPE='MATRIK '
  381. IF(IJACO .NE. 0) CALL ECROBJ(TYPE,IJACO)
  382. 9999 CONTINUE
  383. RETURN
  384. END
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  

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