Télécharger norv.eso

Retour à la liste

Numérotation des lignes :

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

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