Télécharger pre111.eso

Retour à la liste

Numérotation des lignes :

pre111
  1. C PRE111 SOURCE OF166741 24/10/03 21:15:29 12022
  2. SUBROUTINE PRE111(ICEN,IFACE,IFACEL,INORM,IROC,IVITC,IPC,IGAMC,
  3. & IROF,IVITF,IPF,IGAMF,
  4. & LOGAN,LOGNEG,LOGBOR,MESERR,VALER,VAL1,VAL2)
  5. C************************************************************************
  6. C
  7. C PROJET : CASTEM 2000
  8. C
  9. C NOM : PRE111
  10. C
  11. C DESCRIPTION : Voir PRE11
  12. C
  13. C Cas Deux Dimensions
  14. C
  15. C Une Espece
  16. C
  17. C 1er ordre en espace, 1re ordre en temps
  18. C
  19. C Creations des objets MCHAML IROF, IVITF, IPF,
  20. C IGAMF
  21. C
  22. C
  23. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  24. C
  25. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  26. C
  27. C************************************************************************
  28. C
  29. C
  30. C APPELES (Outils) : KRIPAD, LICHT
  31. C
  32. C APPELES (Calcul) : AUCUN
  33. C
  34. C
  35. C************************************************************************
  36. C
  37. C ENTREES
  38. C
  39. C 1) Pointeurs de MELEMEs et de CHPOINTs de la table DOMAINE
  40. C
  41. C ICEN : MELEME de 'POI1' SPG des CENTRES
  42. C
  43. C IFACE : MELEME de 'POI1' SPG des FACES
  44. C
  45. C IFACEL : MELEME de 'SEG3' avec
  46. C CENTRE d'Elt "gauche"
  47. C CENTRE de Face
  48. C CENTRE d'Elt "droite"
  49. C
  50. C N.B. = IFACE.NUM(i,1) = IFACEL.NUM(i,2)
  51. C
  52. C INORM : CHPOINT des cosinus directeurs de normales aux faces
  53. C
  54. C 2) Pointeurs des CHPOINTs
  55. C
  56. C IROC : CHPOINT "CENTRE" contenant la masse volumique RHO
  57. C
  58. C IVITC : CHPOINT "CENTRE" contenant la vitesse UX, UY ;
  59. C
  60. C IPC : CHPOINT "CENTRE" contenat la pression P;
  61. C
  62. C IGAMC : CHPOINT "CENTRE" contenat le "Gamma" du gaz
  63. C
  64. C
  65. C SORTIES
  66. C
  67. C
  68. C IROF : MCHAML defini sur le MELEME de pointeur IFACEL,
  69. C contenant la masse volumique RHO
  70. C
  71. C IVITF : MCHAML defini sur le MELEME de pointeur IFACEL,
  72. C contenant la vitesse UN, UT dans le repaire local
  73. C (n,t) et defini sur le MELEME de pointeur IFACE,
  74. C contenant les cosinus directeurs du repere local
  75. C
  76. C IPF : MCHAML defini sur le MELEME de pointeur IFACEL,
  77. C contenant la pression P
  78. C
  79. C IGAMF : MCHAML defini sur le MELEME de pointeur IFACEL,
  80. C contenant le "gamma" du gaz
  81. C
  82. C LOGAN : anomalie detectee (changement de la convention dans
  83. C la table domaine)
  84. C
  85. C LOGNEG : (LOGICAL): si .TRUE. une pression ou une densité
  86. C negative a été detectée -> en interactif le
  87. C programme s'arrete en GIBIANE
  88. C (erreur stocké en MESERR et VALER)
  89. C
  90. C LOGBOR : (LOGICAL): si .TRUE. un gamma a ete detecte
  91. C dehor 1 et 3 (sa valeur stockée en MESERR et VALER;
  92. C en VAL1 et en VAL2 on stocke 1.0 et 3.0)
  93. C
  94. C MESERR
  95. C VALER
  96. C VAL1,
  97. C VAL2 : pour les messages d'erreur
  98. C
  99. C************************************************************************
  100. C
  101. C HISTORIQUE (Anomalies et modifications éventuelles)
  102. C
  103. C HISTORIQUE : Créée le 11.6.98.
  104. C
  105. C************************************************************************
  106. C
  107. C
  108. C ATTENTION: Cet programme marche que si le MAILLAGE est convex;
  109. C si non il faut changer l'argoritme de calcul de
  110. C l'orientation des normales aux faces.
  111. C
  112. C
  113. C************************************************************************
  114. C
  115. C**** Les variables
  116. C
  117. IMPLICIT INTEGER(I-N)
  118. INTEGER ICEN, IFACE, IFACEL, IROC, IVITC, IPC ,IGAMC, INORM
  119. & , IROF, IVITF, IPF, IGAMF
  120. & , IGEOM, NFAC
  121. & , N1PTEL, N1EL, N2PTEL, N2EL, N2, N1, N3, L1
  122. & , NLCF, NGCF, NGCEG, NLCEG, NGCED, NLCED, NGCF1
  123. REAL*8 VALER, VAL1, VAL2, XG, YG, XC, YC, DXG, DYG
  124. & , CNX, CNY, CTX, CTY, ORIENT
  125. & , ROG, PG, GAMG, UXG, UYG, UNG, UTG
  126. & , ROD, PD, GAMD, UXD, UYD, UND, UTD
  127. CHARACTER*(40) MESERR
  128. CHARACTER*(8) TYPE
  129. LOGICAL LOGAN,LOGNEG, LOGBOR
  130. C
  131. C**** Les Includes
  132. C
  133. -INC SMCOORD
  134.  
  135. -INC PPARAM
  136. -INC CCOPTIO
  137. -INC SMCHPOI
  138. POINTEUR MPROC.MPOVAL, MPVITC.MPOVAL, MPPC.MPOVAL,
  139. & MPGAMC.MPOVAL, MPNORM.MPOVAL
  140. -INC SMCHAML
  141. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  142. & MELT1X.MELVAL, MELT1Y.MELVAL
  143. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  144. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  145. & MELGAM.MELVAL
  146. -INC SMLENTI
  147. -INC SMELEME
  148. C
  149. C**** Initialisation des parametres d'erreur déjà faite, i.e.
  150. C
  151. C LOGNEG = .FALSE.
  152. C LOGBOR = .FALSE.
  153. C MESERR = ' '
  154. C MOTERR(1:40) = MESERR(1:40)
  155. C VALER = 0.0D0
  156. C VAL1 = 0.0D0
  157. C VAL2 = 0.0D0
  158. C
  159. C
  160. C**** KRIPAD pour la correspondance global/local de centre
  161. C
  162. CALL KRIPAD(ICEN,MLENT1)
  163. C
  164. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  165. C
  166. C Si i est le numero global d'un noeud de ICEN,
  167. C MLENT1.LECT(i) contient sa position, i.e.
  168. C
  169. C I = numero global du noeud centre
  170. C MLENT1.LECT(i) = numero local du noeud centre
  171. C
  172. C MLENT1 déjà activé, i.e.
  173. C
  174. C SEGACT MLENT1
  175. C
  176. C**** Activation de CHPOINTs
  177. C
  178. C densité
  179. C vitesse
  180. C pression
  181. C gamma
  182. C cosinus directeurs des normales aux surface
  183. C
  184. CALL LICHT(IROC ,MPROC ,TYPE,IGEOM)
  185. CALL LICHT(IVITC,MPVITC,TYPE,IGEOM)
  186. CALL LICHT(IPC ,MPPC ,TYPE,IGEOM)
  187. CALL LICHT(IGAMC,MPGAMC,TYPE,IGEOM)
  188. CALL LICHT(INORM,MPNORM,TYPE,IGEOM)
  189. C
  190. C**** MPOVA1 - MPOVA5 sont déjà activés i.e.:
  191. C
  192. C SEGACT MPROC
  193. C SEGACT MPVITC
  194. C SEGACT MPPC
  195. C SEGACT MPGAMC
  196. C SEGACT MPNORM
  197. C
  198. C**** Le MELEME FACEL
  199. C
  200. IPT1 = IFACEL
  201. IPT2 = IFACE
  202. SEGACT IPT1
  203. SEGACT IPT2
  204. NFAC = IPT1.NUM(/2)
  205. C
  206. C**** Creation de MCHAMLs contenant les etats gauche et droite,
  207. C
  208. C i.e.:
  209. C
  210. C vitesse + cosinus directors du repere local
  211. C densité
  212. C pression
  213. C gamma
  214. C
  215. C**** Cosinus directors du repere local et vitesse
  216. C
  217. C Les cosinus directeurs
  218. C
  219. N1 = 2
  220. N3 = 6
  221. L1 = 28
  222. SEGINI MCHEL1
  223. IVITF = MCHEL1
  224. MCHEL1.TITCHE = 'U '
  225. MCHEL1.IMACHE(1) = IFACE
  226. MCHEL1.IMACHE(2) = IFACEL
  227. MCHEL1.CONCHE(1) = ' (n,t) in (x,y) '
  228. MCHEL1.CONCHE(2) = ' U in (n,t) '
  229. C
  230. C**** Valeurs des cosinus definies par respect au repair global, i.e.
  231. C
  232. MCHEL1.INFCHE(1,1) = 2
  233. MCHEL1.INFCHE(1,3) = NIFOUR
  234. MCHEL1.INFCHE(1,4) = 0
  235. MCHEL1.INFCHE(1,5) = 0
  236. MCHEL1.INFCHE(1,6) = 1
  237. MCHEL1.IFOCHE = IFOUR
  238. C
  239. C**** Valeurs de vitesse definies par respect au repair local, i.e.
  240. C
  241. MCHEL1.INFCHE(2,1) = 1
  242. MCHEL1.INFCHE(2,3) = NIFOUR
  243. MCHEL1.INFCHE(2,4) = 0
  244. MCHEL1.INFCHE(2,5) = 0
  245. MCHEL1.INFCHE(2,6) = 1
  246. C
  247. C**** Le cosinus directeurs
  248. C
  249. N1PTEL = 1
  250. N1EL = NFAC
  251. N2PTEL = 0
  252. N2EL = 0
  253. C
  254. C**** MCHAML a N2 composantes:
  255. C
  256. C cosinus directeurs du repere local (n,t1)
  257. C
  258. C IDIM = 2 -> 4 composantes
  259. C
  260. N2 = 4
  261. SEGINI MCHAM1
  262. MCHEL1.ICHAML(1) = MCHAM1
  263. MCHAM1.NOMCHE(1) = 'NX '
  264. MCHAM1.NOMCHE(2) = 'NY '
  265. MCHAM1.NOMCHE(3) = 'TX '
  266. MCHAM1.NOMCHE(4) = 'TY '
  267. MCHAM1.TYPCHE(1) = 'REAL*8 '
  268. MCHAM1.TYPCHE(2) = 'REAL*8 '
  269. MCHAM1.TYPCHE(3) = 'REAL*8 '
  270. MCHAM1.TYPCHE(4) = 'REAL*8 '
  271. SEGINI MELVNX
  272. SEGINI MELVNY
  273. SEGINI MELT1X
  274. SEGINI MELT1Y
  275. MCHAM1.IELVAL(1) = MELVNX
  276. MCHAM1.IELVAL(2) = MELVNY
  277. MCHAM1.IELVAL(3) = MELT1X
  278. MCHAM1.IELVAL(4) = MELT1Y
  279. SEGDES MCHAM1
  280. C
  281. C**** Vitesse
  282. C
  283. N1EL = NFAC
  284. N1PTEL = 3
  285. N2EL = 0
  286. N2PTEL = 0
  287. C
  288. C**** MCHAML a N2 composantes:
  289. C
  290. C IDIM = 2 -> 2 composantes
  291. C
  292. N2 = 2
  293. SEGINI MCHAM1
  294. MCHEL1.ICHAML(2) = MCHAM1
  295. SEGDES MCHEL1
  296. MCHAM1.NOMCHE(1) = 'UN '
  297. MCHAM1.NOMCHE(2) = 'UT '
  298. MCHAM1.TYPCHE(1) = 'REAL*8 '
  299. MCHAM1.TYPCHE(2) = 'REAL*8 '
  300. SEGINI MELVUN
  301. SEGINI MELVUT
  302. MCHAM1.IELVAL(1) = MELVUN
  303. MCHAM1.IELVAL(2) = MELVUT
  304. SEGDES MCHAM1
  305. C
  306. C**** Densite
  307. C
  308. N1 = 1
  309. N3 = 6
  310. L1 = 15
  311. SEGINI MCHEL2
  312. IROF = MCHEL2
  313. MCHEL2.IMACHE(1) = IFACEL
  314. MCHEL2.TITCHE = 'RO '
  315. MCHEL2.CONCHE(1) = ' '
  316. C
  317. C**** Valeurs independente du repére, i.e.
  318. C
  319. MCHEL2.INFCHE(1,1) = 0
  320. MCHEL2.INFCHE(1,3) = NIFOUR
  321. MCHEL2.INFCHE(1,4) = 0
  322. MCHEL2.INFCHE(1,5) = 0
  323. MCHEL2.INFCHE(1,6) = 1
  324. MCHEL2.IFOCHE = IFOUR
  325. N2 = 1
  326. SEGINI MCHAM1
  327. MCHEL2.ICHAML(1) = MCHAM1
  328. SEGDES MCHEL2
  329. MCHAM1.NOMCHE(1) = 'SCAL '
  330. MCHAM1.TYPCHE(1) = 'REAL*8 '
  331. SEGINI MELRO
  332. MCHAM1.IELVAL(1) = MELRO
  333. SEGDES MCHAM1
  334. C
  335. C**** Pression
  336. C
  337. MCHEL1 = IROF
  338. SEGINI, MCHEL2 = MCHEL1
  339. IPF = MCHEL2
  340. MCHEL2.TITCHE = 'P '
  341. C
  342. C**** MCHAM1 = MCHAML de la densite
  343. C
  344. SEGINI, MCHAM2 = MCHAM1
  345. MCHEL2.ICHAML(1) = MCHAM2
  346. SEGDES MCHEL2
  347. SEGINI MELP
  348. MCHAM2.IELVAL(1) = MELP
  349. SEGDES MCHAM2
  350. C
  351. C**** Gamma
  352. C
  353. MCHEL1 = IROF
  354. SEGINI, MCHEL2 = MCHEL1
  355. IGAMF = MCHEL2
  356. MCHEL2.TITCHE = 'GAMMA '
  357. C
  358. C**** MCHAM1 = MCHAML de la densite
  359. C
  360. SEGINI, MCHAM2 = MCHAM1
  361. MCHEL2.ICHAML(1) = MCHAM2
  362. SEGDES MCHEL2
  363. SEGINI MELGAM
  364. MCHAM2.IELVAL(1) = MELGAM
  365. SEGDES MCHAM2
  366. C
  367. C**** Recapitulatif: les MELVALs et les MPOVALs actives
  368. C
  369. C MELVNX, MELVNY
  370. C MELT1X, MELT1Y
  371. C
  372. C MELVUN, MELVUT -> vitesse
  373. C
  374. C MELRO -> densite
  375. C
  376. C MELP -> pression
  377. C
  378. C MELGAM -> gamma
  379. C
  380. C MPROC -> densite
  381. C
  382. C MPVITC -> vitesse
  383. C
  384. C MPPC -> pression
  385. C
  386. C MPGAMC -> gamma
  387. C
  388. C MPNORM -> normales aux faces
  389. C
  390. C**** Boucle sur le faces
  391. C
  392. DO NLCF = 1, NFAC
  393. C
  394. C******* NLCF = numero local du centre de face
  395. C NGCF = numero global du centre de face
  396. C NGCEG = numero global du centre ELT "gauche"
  397. C NLCEG = numero local du centre ELT "gauche"
  398. C NGCED = numero global du centre ELT "droite"
  399. C NLCED = numero local du centre ELT "droite"
  400. C
  401. NGCEG = IPT1.NUM(1,NLCF)
  402. NGCF = IPT1.NUM(2,NLCF)
  403. NGCED = IPT1.NUM(3,NLCF)
  404. NLCEG = MLENT1.LECT(NGCEG)
  405. NLCED = MLENT1.LECT(NGCED)
  406. C
  407. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  408. C
  409. NGCF1 = IPT2.NUM(1,NLCF)
  410. IF( NGCF1 .NE. NGCF) THEN
  411. LOGAN = .TRUE.
  412. MESERR(1:40) = 'PRET, subroutine pre111.eso '
  413. GOTO 9999
  414. ENDIF
  415. C
  416. C******* Cosinus directeurs des NORMALES aux faces
  417. C
  418. C On impose que les normales sont direct "Gauche" -> "Centre"
  419. C
  420. XG = XCOOR((NGCEG-1)*(IDIM+1)+1)
  421. YG = XCOOR((NGCEG-1)*(IDIM+1)+2)
  422. XC = XCOOR((NGCF-1)*(IDIM+1)+1)
  423. YC = XCOOR((NGCF-1)*(IDIM+1)+2)
  424. DXG = XC - XG
  425. DYG = YC - YG
  426.  
  427. C
  428. C******* On calcule le sign du pruduit scalare
  429. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  430. C
  431. CNX = MPNORM.VPOCHA(NLCF,1)
  432. CNY = MPNORM.VPOCHA(NLCF,2)
  433. ORIENT = CNX * DXG + CNY * DYG
  434. ORIENT = SIGN(1.0D0,ORIENT)
  435. IF(ORIENT .NE. 1.0D0)THEN
  436. LOGAN = .TRUE.
  437. MESERR(1:30)=
  438. & 'PRET , subroutine pre111.eso. '
  439. GOTO 9999
  440. ENDIF
  441. CNX = CNX * ORIENT
  442. CNY = CNY * ORIENT
  443. C
  444. C********** Cosinus directeurs de tangent 2D
  445. C
  446. CTX = -1.0D0 * CNY
  447. CTY = CNX
  448. C
  449. C
  450. C******* Les autres MELVALs
  451. C
  452. C
  453. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0
  454. C GAMMA \in (1,3)
  455. C Si non il faut le faire, en utlisant LOGBOR,
  456. C LOGNEG, VALER, VAL1, VAL2
  457. C
  458. C
  459. C
  460. C******* NGCEG = NGCED -> Mur
  461. C
  462. IF( NGCEG .EQ. NGCED)THEN
  463. ROG = MPROC.VPOCHA(NLCEG , 1)
  464. PG = MPPC.VPOCHA(NLCEG, 1)
  465. GAMG = MPGAMC.VPOCHA(NLCEG, 1)
  466. UXG = MPVITC.VPOCHA(NLCEG , 1)
  467. UYG = MPVITC.VPOCHA(NLCEG , 2)
  468. UNG = UXG * CNX + UYG * CNY
  469. UTG = UXG * CTX + UYG * CTY
  470. C
  471. C********** Son etat droite
  472. C
  473. ROD = ROG
  474. PD = PG
  475. GAMD = GAMG
  476. UND = -1.0D0 * UNG
  477. UTD = UTG
  478. C
  479. C************* Fin cas mur
  480. C
  481. ELSE
  482. C
  483. C************* Etat gauche
  484. C
  485. ROG = MPROC.VPOCHA(NLCEG, 1)
  486. PG = MPPC.VPOCHA(NLCEG, 1)
  487. GAMG = MPGAMC.VPOCHA(NLCEG, 1)
  488. UXG = MPVITC.VPOCHA(NLCEG , 1)
  489. UYG = MPVITC.VPOCHA(NLCEG , 2)
  490. UNG = UXG * CNX + UYG * CNY
  491. UTG = UXG * CTX + UYG * CTY
  492. C
  493. C********** Etat gauche
  494. C
  495. ROD = MPROC.VPOCHA(NLCED,1)
  496. PD = MPPC.VPOCHA(NLCED,1)
  497. GAMD = MPGAMC.VPOCHA(NLCED,1)
  498. C
  499. C************* On suppose qu'on a déjà controlle ROG, PG > 0
  500. C Si non il faut le faire!!!
  501. C
  502. UXD = MPVITC.VPOCHA(NLCED,1)
  503. UYD = MPVITC.VPOCHA(NLCED,2)
  504. UND = UXD * CNX + UYD * CNY
  505. UTD = UXD * CTX + UYD * CTY
  506. ENDIF
  507. C
  508. C************* Les MELVALs
  509. C
  510. MELRO.VELCHE(1,NLCF) = ROG
  511. MELRO.VELCHE(3,NLCF) = ROD
  512. MELP.VELCHE(1,NLCF) = PG
  513. MELP.VELCHE(3,NLCF) = PD
  514. MELGAM.VELCHE(1,NLCF) = GAMG
  515. MELGAM.VELCHE(3,NLCF) = GAMD
  516. MELVUN.VELCHE(1,NLCF) = UNG
  517. MELVUN.VELCHE(3,NLCF) = UND
  518. MELVUT.VELCHE(1,NLCF) = UTG
  519. MELVUT.VELCHE(3,NLCF) = UTD
  520. MELVNX.VELCHE(1,NLCF) = CNX
  521. MELVNY.VELCHE(1,NLCF) = CNY
  522. MELT1X.VELCHE(1,NLCF) = CTX
  523. MELT1Y.VELCHE(1,NLCF) = CTY
  524. ENDDO
  525. C
  526. C**** Desactivation des SEGMENTs
  527. C
  528. SEGDES IPT1
  529. SEGDES IPT2
  530. C
  531. SEGDES MPROC
  532. SEGDES MPVITC
  533. SEGDES MPPC
  534. SEGDES MPGAMC
  535. SEGDES MPNORM
  536. C
  537. SEGDES MELRO
  538. SEGDES MELP
  539. SEGDES MELGAM
  540. SEGDES MELVUN
  541. SEGDES MELVUT
  542. SEGDES MELVNX
  543. SEGDES MELVNY
  544. SEGDES MELT1X
  545. SEGDES MELT1Y
  546. C
  547. C**** Destruction du MELNTI correspondance local/global
  548. C
  549. SEGSUP MLENT1
  550. C
  551. 9999 CONTINUE
  552. C
  553. RETURN
  554. END
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  

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