Télécharger konv14.eso

Retour à la liste

Numérotation des lignes :

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

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