Télécharger vfsym.eso

Retour à la liste

Numérotation des lignes :

vfsym
  1. C VFSYM SOURCE CB215821 20/11/25 13:42:24 10792
  2. C NORV SOURCE PV 07/11/23 21:18:24 5978
  3. SUBROUTINE VFSYM(IDOMA)
  4. C************************************************************************
  5. C
  6. C PROJET : CASTEM 2000
  7. C
  8. C NOM : NORV (OPERATEUR GIBIANE)
  9. C
  10. C DESCANDRIPTION : Calcul du gradient d'un CHPOINT 2D de type CENTRE
  11. C Avec tenseur dispersif hétérogène
  12. C Référence : Discretization on unstructured grids for
  13. C inhomogenous, anisotropic media. Part 1:derivation of the
  14. C methods,
  15. C I AAVATSMARK, T. BARKVE, O BOE, AND T. MANNSETH
  16. C SIAM JCP, VOL 19, n0 5, pp 1700-1716, Septembre 1998
  17. C
  18. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  19. C
  20. C AUTEUR : C. LE POTIER, DM2S/SFME/MTMS
  21. C
  22. C************************************************************************
  23. C
  24. C
  25. C************************************************************************
  26. C
  27. C PHRASE D'APPEL (GIBIANE) :
  28. C
  29. C
  30. C RCHPO1 RCHELEM1 = 'PENT'
  31. C MCLE1 MCLE2 TABDO CHPO1 (MCLE6 CHPO3) (MCLE4 CHPO2) ;
  32. C
  33. C ou
  34. C
  35. C RCHPO1 = 'PENT'
  36. C MCLE1 MCLE2 TABDO CHPO1 (MCLE6 CHPO3) (MCL4 CHPO2) MCLE5 RCHELEM1 ;
  37. C
  38. C
  39. C Entrées:
  40. C
  41. C TABDO : Donnée de la table domaine;
  42. C
  43. C MCLE1 : type du champ par point CHPO1. Pour le moment, seul le type
  44. C 'FACE' est autorisé;
  45. C
  46. C MCLE2 : Traitement des éléments de bord et ordre de précision du
  47. C calcul de gradient . Options sont possibles : 'NORVEGE'
  48. C
  49. C
  50. C CHPO1 : Donnée du Champ par point de type MCLE1;
  51. C
  52. C MCLE6 : Donnée ou non de CHPO3
  53. C 'DISPDIF' si donnée, vide sinon
  54. C
  55. C CHPO3 : Donnée du Champ par point du tenseur de diffusion dispersion
  56. C
  57. C MCLE4 : Donnée ou non du CHPO2
  58. C 'TIMP' si donnée, vide sinon.
  59. C
  60. C CHPO2 : Donnée du Champ par point des conditions aux limites
  61. C
  62. C MCLE5 : Donnée ou non du RCHELEM1:
  63. C 'GRADGEO' si donnée, vide sinon.
  64. C
  65. C
  66. C E/S :
  67. C
  68. C RCHELEM1: Champ par élément des coefficients géométriques pour le
  69. C calcul du gradient (et du hessien)
  70. C (entrée si MCLE4 = 'GRADGEO', sinon sortie).
  71. C
  72. C
  73. C Sorties:
  74. C
  75. C RCHPO1 : Champ par point contenant le gradient de CHPO1 (toujours
  76. C calculé) ;
  77. C
  78. C************************************************************************
  79. C
  80. C HISTORIQUE (Anomalies et modifications éventuelles)
  81. C
  82. C HISTORIQUE : Creé le 2/3/2001
  83. C HISTORIQUE : 11/02/2003 Ajout d'une option Neuman et d'une option MIXTE
  84. C : Prise en compte de plusieurs sous domaines, Optimisation
  85. C : des paramètres NBMAX,NBNN de manière à optimiser la place
  86. C : mémoire et le temps calcul
  87. C
  88. C************************************************************************
  89. C
  90. C
  91.  
  92. C
  93. C
  94. C
  95. IMPLICIT INTEGER(I-N)
  96. IMPLICIT REAL*8 (a-h,o-z)
  97.  
  98. -INC PPARAM
  99. -INC CCOPTIO
  100. -INC SMCHPOI
  101. -INC SMLMOTS
  102. C
  103. C**** Variables de COOPTIO
  104. C
  105. INTEGER ICOND, IDOMA, IRET1, ICEN, IFACEL, IFACEP, ICELL, ISOMM
  106. & ,NBOPT, IOPPOS, IOPMET, IOPLIM
  107. & ,ICHPO, ICHGRA, IMCALP, ICOEFF
  108. & ,NBCOMP
  109. & ,ICHCL, ICHCLG, ICHHES, IFAC, INORM, IVOLUM, ISURF
  110. & ,NSOUPO, IMAIL, ISGLIM,IELTFA,ICHTE
  111.  
  112. C
  113. CHARACTER*(8) MOT,MTYPR
  114. CHARACTER*(7) GRAD(2)
  115. REAL*8 XKT
  116. INTEGER LOGBOR,LOGCOE,LOGCCL
  117. DATA GRAD/'GRADGEO','GRADGCL'/
  118. C
  119. C
  120. C**** Lecture du MELEME SPG des points CENTRE.
  121. C
  122. c CALL GIBTEM(XKT)
  123. c WRITE(6,*) 'PENT XKT=',XKT
  124. CALL LEKTAB(IDOMA,'CENTRE',ICEN)
  125. IF(IERR .NE. 0) GOTO 9999
  126. C
  127. C**** Lecture du MELEME SPG des points SOMMET
  128. C
  129. CALL LEKTAB(IDOMA,'SOMMET',ISOMM)
  130. IF(IERR .NE. 0) GOTO 9999
  131. C
  132. C**** Lecture du MELEME de connect. FACEL
  133. C
  134. CALL LEKTAB(IDOMA,'FACEL',IFACEL)
  135. IF(IERR .NE. 0) GOTO 9999
  136. C
  137. C**** Lecture du MELEME de connect. FACEP
  138. C
  139. CALL LEKTAB(IDOMA,'FACEP',IFACEP)
  140. IF(IERR .NE. 0) GOTO 9999
  141. C
  142. C**** Lecture du MELEME des points FACE
  143. C
  144. CALL LEKTAB(IDOMA,'FACE',IFAC)
  145. IF (IERR .NE. 0) GOTO 9999
  146.  
  147. C
  148. C**** Lecture du MELEME de connect. IELTFA
  149. C
  150. CALL LEKTAB(IDOMA,'ELTFA',IELTFA)
  151. IF (IERR .NE. 0) GOTO 9999
  152.  
  153. C
  154. C**** Lecture du MELEME MAILLAGE
  155. C
  156. CALL LEKTAB(IDOMA,'MAILLAGE',IMAIL)
  157. IF(IERR .NE. 0) GOTO 9999
  158. C
  159. C**** Lecture du CHPOINT contenant les normales aux faces
  160. C
  161. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  162. IF (IERR .NE. 0) GOTO 9999
  163. C
  164. C
  165. C**** Lecture du CHPOINT contenant les surfaces
  166. C
  167. CALL LEKTAB(IDOMA,'XXSURFAC',ISURF)
  168. IF (IERR .NE. 0) GOTO 9999
  169.  
  170.  
  171. C
  172. C**** Lecture du CHPOINT dont on veut calculer le gradient!
  173. C
  174. CALL LIROBJ('CHPOINT ',ICHPO,1,IRET1)
  175. IF(IERR .NE. 0) GOTO 9999
  176.  
  177. C**** Control du CHPOINT
  178. C
  179. MLMOTS=0
  180. CALL QUEPO1(ICHPO, ICEN, MLMOTS)
  181. IF (IERR .NE. 0) GOTO 9999
  182. C En sortie, MLMOTS contient le nom de composantes de ICHPO
  183. SEGACT MLMOTS
  184. NBCOMP = MLMOTS.MOTS(/2)
  185. SEGDES MLMOTS
  186. IF(NBCOMP .GT. 9)THEN
  187. C
  188. C******* Message d'erreur standard
  189. C -301 0 %m1:40
  190. C
  191. MOTERR(1:40) = 'NBCOMP > 9 '
  192. WRITE(IOIMP,*) MOTERR(1:40)
  193. CALL ERREUR(22)
  194. GOTO 9999
  195. ENDIF
  196.  
  197. C LECTURE DES TENSEURS DE DIFFUSIONS
  198. IRET1=0
  199. CALL LIRCHA(MOT,0,IRET1)
  200. IF(IERR .NE. 0) GOTO 9999
  201. IF(IRET1.NE.0)THEN
  202. IF(MOT .EQ. 'DISPDIF') THEN
  203. CALL LIROBJ('CHPOINT ',ICHTE,1,ICELL)
  204. MCHPOI = ICHTE
  205. SEGACT MCHPOI
  206. NSOUPO = MCHPOI.IPCHP(/1)
  207. IF(NSOUPO .EQ. 0) ICHTE=0
  208. SEGDES MCHPOI
  209. ELSE
  210. C
  211. C******* Je la remets dans la pile
  212. C
  213. CALL ECRCHA(MOT)
  214. ICHTE=0
  215. ENDIF
  216. ELSE
  217. ICHTE=0
  218. ENDIF
  219. C
  220. C**** Lecture du CHPOINT du conditions aux limites dirichlet(optionel)
  221. C
  222. IRET1=0
  223. CALL LIRCHA(MOT,0,IRET1)
  224. IF(IERR .NE. 0) GOTO 9999
  225. IF(IRET1.NE.0)THEN
  226. IF(MOT .EQ. 'TIMP') THEN
  227. CALL LIROBJ('CHPOINT ',ICHCL,1,ICELL)
  228. MCHPOI = ICHCL
  229. SEGACT MCHPOI
  230. NSOUPO = MCHPOI.IPCHP(/1)
  231. IF(NSOUPO .EQ. 0) ICHCL=0
  232. SEGDES MCHPOI
  233. ELSE
  234. C
  235. C******* Je la remets dans la pile
  236. C
  237. CALL ECRCHA(MOT)
  238. ICHCL=0
  239. ENDIF
  240. ELSE
  241. ICHCL=0
  242. ENDIF
  243. C**** Control du CHPOIT
  244. C N.B.: MLMOTS contient les composantes de ICHPO
  245. C
  246. IF(ICHCL .GT. 0)THEN
  247. ICELL = 0
  248. CALL QUEPO1(ICHCL, ICELL, MLMOTS)
  249. IF (IERR .NE. 0) GOTO 9999
  250. ENDIF
  251. C
  252. C
  253. C**** Lecture du CHPOINT du conditions aux limites Neuman (optionel)
  254. C
  255. IRET1=0
  256. CALL LIRCHA(MOT,0,IRET1)
  257. IF(IERR .NE. 0) GOTO 9999
  258. IF(IRET1.NE.0)THEN
  259. IF(MOT .EQ. 'QIMP') THEN
  260. CALL LIROBJ('CHPOINT ',ICHNE,1,ICELL)
  261. MCHPOI = ICHNE
  262. SEGACT MCHPOI
  263. NSOUPO = MCHPOI.IPCHP(/1)
  264. IF(NSOUPO .EQ. 0) ICHNE=0
  265. SEGDES MCHPOI
  266. ELSE
  267. C
  268. C******* Je la remets dans la pile
  269. C
  270. CALL ECRCHA(MOT)
  271. ICHNE=0
  272. ENDIF
  273. ELSE
  274. ICHNE=0
  275. ENDIF
  276.  
  277. C
  278. C**** Lecture du CHPOINT du conditions aux limites mixtes (optionel)
  279. C
  280. IRET1=0
  281. CALL LIRCHA(MOT,0,IRET1)
  282. IF(IERR .NE. 0) GOTO 9999
  283. IF(IRET1.NE.0)THEN
  284. IF(MOT .EQ. 'MIXT') THEN
  285. CALL LIROBJ('CHPOINT ',ICHMI,1,ICELL)
  286. MCHPOI = ICHMI
  287. SEGACT MCHPOI
  288. NSOUPO = MCHPOI.IPCHP(/1)
  289. IF(NSOUPO .EQ. 0) ICHMI=0
  290. SEGDES MCHPOI
  291. ELSE
  292. C
  293. C******* Je la remets dans la pile
  294. C
  295. CALL ECRCHA(MOT)
  296. ICHMI=0
  297. ENDIF
  298. ELSE
  299. ICHMI=0
  300. ENDIF
  301.  
  302. IRET1=0
  303. IOP = 0
  304. CALL LIRCHA(MOT,0,IRET1)
  305. IF(IERR .NE. 0) GOTO 9999
  306. IF(IRET1.NE.0)THEN
  307. IF ((MOT .EQ. 'UPWIND')
  308. & .OR.(MOT .EQ. 'CENTERED')
  309. & .OR.(MOT .EQ. 'UPWICENT')) THEN
  310. IF (MOT .EQ. 'UPWIND') THEN
  311. IOP = 1
  312. ELSEIF (MOT .EQ. 'CENTERED') THEN
  313. IOP = 2
  314. ELSEIF (MOT .EQ. 'UPWICENT') THEN
  315. IOP = 3
  316. ENDIF
  317. CALL LIROBJ('CHPOINT ',ICHCO,1,ICELL)
  318. MCHPOI = ICHCO
  319. SEGACT MCHPOI
  320. NSOUPO = MCHPOI.IPCHP(/1)
  321. IF(NSOUPO .EQ. 0) ICHCO=0
  322. SEGDES MCHPOI
  323. ELSE
  324. C
  325. C******* Je la remets dans la pile
  326. C
  327. CALL ECRCHA(MOT)
  328. ICHCO=0
  329. ENDIF
  330. ELSE
  331. ICHCO=0
  332. ENDIF
  333. C
  334. C**** Lecture du MCHAMLs qui contiennent les elements de matrice
  335. C pour le calcul du gradient et (eventuelment) de l'hessian
  336. C
  337. C Si MOT = 'GRADGEO', on a ces MCHAMLs; sinon il faut le calculer
  338. C
  339. LOGCOE = 1
  340. LOGCCL = 1
  341. LOGBOR = 1
  342. CALL LIRCHA(MOT,0,IRET1)
  343. c CALL LIRMOT(GRAD,2,ICELL,1)
  344. IF(IERR .NE. 0) GOTO 9999
  345. IF(IRET1 .EQ. 0)THEN
  346. LOGCOE = 1
  347. LOGCCL = 1
  348. LOGBOR = 1
  349. ELSEIF( (MOT .NE. 'GRADGEO') .AND.
  350. & (MOT .NE. 'GRADGCL') .AND.
  351. & (MOT .NE. 'GRADBOR')) THEN
  352. CALL ECRCHA(MOT)
  353. c IF(IERR .NE. 0) GOTO 9999
  354. LOGCOE = 1
  355. LOGCCL = 1
  356. LOGBOR = 1
  357. ELSEIF (MOT .EQ. 'GRADGEO') THEN
  358. LOGCOE = 0
  359. CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  360. c IF(IERR .NE. 0) GOTO 9999
  361. ELSEIF (MOT .EQ. 'GRADGCL') THEN
  362. LOGCCL = 0
  363. CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  364. c IF(IERR .NE. 0) GOTO 9999
  365. ELSEIF (MOT .EQ. 'GRADBOR') THEN
  366. LOGBOR = 0
  367. CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  368. ENDIF
  369.  
  370. c IF(IERR .NE. 0)GOTO 9999
  371. c IF(ICELL .EQ. 1)THEN
  372. c LOGCOE = 0
  373. c CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  374. c IF(IERR .NE. 0) GOTO 9999
  375. c ELSEIF(ICELL .EQ. 2)THEN
  376. c LOGCL = 0
  377. c CALL LIROBJ('MCHAML ',ICOEFF,1,IRET1)
  378. c IF(IERR .NE. 0) GOTO 9999
  379. c ENDIF
  380.  
  381.  
  382.  
  383.  
  384.  
  385. CALL VFSYM1(IOPPOS,ICEN,ISOMM,IFAC,IFACEL,IFACEP,IELTFA,IMAIL,
  386. & INORM,ISURF,ICHPO,ICHTE,ICHCL,ICHNE,ICHMI,ICHCO,
  387. & IOP,ICHGRA,MPOGRA,ICOEFF,LOGBOR,LOGCOE,LOGCCL)
  388.  
  389.  
  390. IF(IERR .NE. 0) GOTO 9999
  391. C
  392. C**** Ecriture de gradient, (hessian), (limiteur),
  393. C (MCHAMLs pour le calcul de gradient et/ou du hessian)
  394. C
  395. IF( (MOT .NE. 'GRADGEO') .AND. (MOT .NE.'GRADGCL')
  396. & .AND. (MOT .NE.'GRADBOR') ) THEN
  397. CALL ECROBJ('MCHAML',ICOEFF)
  398. IF(IERR .NE. 0) GOTO 9999
  399. ENDIF
  400. CALL ECROBJ('CHPOINT',ICHGRA)
  401. IF(IERR .NE. 0) GOTO 9999
  402. C
  403. SEGSUP MLMOTS
  404. C
  405. C**** Sortie du programme
  406. C
  407. 9999 CONTINUE
  408. C
  409. RETURN
  410. END
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  

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