Télécharger gradia.eso

Retour à la liste

Numérotation des lignes :

gradia
  1. C GRADIA SOURCE OF166741 24/12/13 21:15:56 12097
  2. SUBROUTINE GRADIA(ICEN,ISOMM,IFACEL,IFACEP,IMAIL,ISGLIM,
  3. & ICHELM)
  4.  
  5. IMPLICIT INTEGER(I-N)
  6.  
  7. -INC PPARAM
  8. -INC CCOPTIO
  9. -INC SMCHPOI
  10. -INC SMELEME
  11. -INC SMLREEL
  12. -INC SMLENTI
  13. -INC SMLMOTS
  14. C
  15. INTEGER ISGLIM
  16. & ,ICEN,ISOMM,IFACEL,IFACEP,IMAIL,IFACE,IFACE1
  17. & ,ICHELM
  18.  
  19. SEGMENT MLELEM
  20. INTEGER INDEX(NBL+1)
  21. INTEGER LESPOI(NBTPOI)
  22. ENDSEGMENT
  23. POINTEUR MLELSB.MLELEM, MLELSC.MLELEM, MLESBC.MLELEM,
  24. & MLESCF.MLELEM,MLEFSC.MLELEM,
  25. & MLRDIS.MLREEL, MLEFC.MLELEM
  26. C
  27. INTEGER N1,N2
  28. SEGMENT MATRIX
  29. REAL*8 MAT(N1,N2)
  30. ENDSEGMENT
  31. POINTEUR MATCOE.MATRIX, MACOE1.MATRIX, MACOE2.MATRIX
  32. C
  33. C**** Ordonnement FACE, FACEL, FACEP avec le meme ordre
  34. C
  35. CALL RLEORD(IFACEL,IFACEP,IFACE,IFACE1)
  36. IF(IERR .NE. 0)GOTO 9999
  37. C
  38. C**** test RLEORD
  39. C
  40. C MELEME= IFACEP
  41. C IPT1 = IFACE1
  42. C SEGACT MELEME
  43. C SEGACT IPT1
  44. C NBSOUS=MELEME.LISOUS(/1)
  45. C JG=MAX(1,NBSOUS)
  46. C SEGINI MLENTI
  47. C IF(NBSOUS.EQ.0)THEN
  48. C MLENTI.LECT(1)=IFACEP
  49. C ELSE
  50. C DO I1 = 1, NBSOUS, 1
  51. C MLENTI.LECT(I1)=MELEME.LISOUS(I1)
  52. C ENDDO
  53. C ENDIF
  54. C NBSOUS=JG
  55. C IELEM=0
  56. C DO I1 = 1, NBSOUS, 1
  57. C IPT2=MLENTI.LECT(I1)
  58. C SEGACT IPT2
  59. C NBN=IPT2.NUM(/1)
  60. C NBE=IPT2.NUM(/2)
  61. C DO I2 = 1, NBE, 1
  62. C IELEM=IELEM+1
  63. C NGF=IPT2.NUM(NBN,I2)
  64. C NGF1=IPT1.NUM(2,IELEM)
  65. C write(ioimp,*) ngf, ngf1
  66. C ENDDO
  67. C ENDDO
  68. C
  69. C**** Fin test
  70. C
  71. IFACEL=IFACE1
  72. C
  73. C Ici on crée les MELEME IFACE, IFACEL (à eliminer)!
  74. C
  75. C**** Ls voisins type SOMMETS des sommets sur le bord
  76. C
  77. CALL RLEXVB(IFACEL,IFACEP,ISOMM,MLELSB)
  78. IF(IERR.NE.0) GOTO 9999
  79. C
  80. C**** MLELSB = LISTE SEQUENTIELLE INDEXEE D'ELEMENTS
  81. C
  82. C NBL : NOMBRE D'ELEMENTS
  83. C NBTPOI : NOMBRE TOTAL DE POINTS REFERENCEES
  84. C INDEX(I) : INDICE DU 1ER POINT DU IEME ELEMENT
  85. C DANS LE TABLEAU LESPOI
  86. C LESPOI(INDEX(I) -> INDEX(I+1)-1) : NUMERO DES NOEUDS
  87. C DU IEME ELEMENT
  88. C
  89. C NB: LESPOI contient de numero (globals) de noeuds
  90. C (voir RLEVFA)
  91. C
  92. C**** Test de RLEXVB
  93. C
  94. C SEGACT MLELSB
  95. C MELEME = ISOMM
  96. C SEGACT MELEME
  97. C NBL=MLELSB.INDEX(/1)-1
  98. C NBTPOI=MLELSB.LESPOI(/1)
  99. C IPOI=0
  100. C DO I1 = 1, NBL, 1
  101. C IPOI=IPOI+1
  102. C WRITE(IOIMP,*) I1
  103. C IPOS=MLELSB.INDEX(I1)
  104. C NGV=MLELSB.LESPOI(IPOS)
  105. C WRITE(IOIMP,*) 'NGV = ', NGV
  106. C WRITE(IOIMP,*) ' Position ', IPOS
  107. C NVOIS= MLELSB.INDEX(I1+1) - MLELSB.INDEX(I1) - 1
  108. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  109. C DO I2 = 1, NVOIS, 1
  110. C IPOI=IPOI+1
  111. C NGV1=MLELSB.LESPOI(IPOS+I2)
  112. C WRITE(IOIMP,*) NGV1
  113. C ENDDO
  114. C ENDDO
  115. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  116. C
  117. C***** Fin test
  118. C
  119. C**** Ls voisins type CENTRE des sommets
  120. C
  121. CALL RLEXVC(IMAIL,ICEN,ISOMM,MLELSC)
  122. IF(IERR .NE. 0) GOTO 9999
  123. C
  124. C**** MLELSC = LISTE SEQUENTIELLE INDEXEE D'ELEMENTS
  125. C (avec des numeros globals de noeuds)
  126. C
  127. C**** Test de RLEXVC
  128. C
  129. C SEGACT MLELSC
  130. C MELEME = ISOMM
  131. C SEGACT MELEME
  132. C NBL=MLELSC.INDEX(/1)-1
  133. C NBTPOI=MLELSC.LESPOI(/1)
  134. C IPOI=0
  135. C DO I1 = 1, NBL, 1
  136. C IPOI=IPOI+1
  137. C WRITE(IOIMP,*) I1
  138. C IPOS=MLELSC.INDEX(I1)
  139. C NGV=MLELSC.LESPOI(IPOS)
  140. C WRITE(IOIMP,*) 'NGV = ', NGV
  141. C WRITE(IOIMP,*) ' Position ', IPOS
  142. C NVOIS= MLELSC.INDEX(I1+1) - MLELSC.INDEX(I1) - 1
  143. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  144. C DO I2 = 1, NVOIS, 1
  145. C IPOI=IPOI+1
  146. C NGV1=MLELSC.LESPOI(IPOS+I2)
  147. C WRITE(IOIMP,*) NGV1
  148. C ENDDO
  149. C ENDDO
  150. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  151. C
  152. C***** Fin test
  153. C
  154. C Pour les points de bords on va chercher les centres voisins des
  155. C voisins et on va le mettre en ordre decroissante pas raport a la
  156. C distance
  157. C
  158. C MLESBC = sommet de bord - centres voisins de sommets voisins,
  159. C ordonné apar distance
  160. C MLRDIS = LISTREEL qui contient les distances aux carré
  161. C
  162. C En RLEVB1 on detrui MLELSB (= sommet de bord - sommets voisins)
  163. C
  164. CALL RLEVB1(ISOMM,ICEN,MLELSC,MLELSB,MLESBC,MLRDIS)
  165. IF(IERR.NE.0)GOTO 9999
  166. C
  167. C**** Test de RLEVB1
  168. C
  169. C SEGACT MLRDIS
  170. C SEGACT MLESBC
  171. C MELEME = ISOMM
  172. C SEGACT MELEME
  173. C NBL=MLESBC.INDEX(/1)-1
  174. C NBTPOI=MLESBC.LESPOI(/1)
  175. C IPOI=0
  176. C DO I1 = 1, NBL, 1
  177. C IPOI=IPOI+1
  178. C WRITE(IOIMP,*) I1
  179. C IPOS=MLESBC.INDEX(I1)
  180. C NGV=MLESBC.LESPOI(IPOS)
  181. C WRITE(IOIMP,*) 'NGV = ', NGV
  182. C WRITE(IOIMP,*) ' Position ', IPOS
  183. C NVOIS= MLESBC.INDEX(I1+1) - MLESBC.INDEX(I1) - 1
  184. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  185. C DO I2 = 1, NVOIS, 1
  186. C IPOI=IPOI+1
  187. C NGV1=MLESBC.LESPOI(IPOS+I2)
  188. C WRITE(IOIMP,*) NGV1
  189. C WRITE(IOIMP,*) MLRDIS.PROG(IPOS+I2)
  190. C ENDDO
  191. C ENDDO
  192. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  193. C
  194. C***** Fin test
  195. C
  196. C
  197. C**** On cree: MLESCF : sommet - centres "voisins" (F = final)
  198. C MATCOE : MATIRCE qui contient les coeff pour
  199. C la projection CENTRE -> SOMMET
  200. C
  201. C On detrui MLELSC, MLESBC, MLRDIS
  202. C
  203. CALL RLEXCA(ISGLIM,MLELSC,MLESBC,MLRDIS,MLESCF,MATCOE)
  204. IF(IERR.NE.0) GOTO 9999
  205. C
  206. C**** Test de RLEXCA
  207. C
  208. C SEGACT MLESCF
  209. C SEGACT MATCOE
  210. C MELEME = ISOMM
  211. C SEGACT MELEME
  212. C JG=IDIM+1
  213. C SEGINI MLREE1
  214. C NBL=MLESCF.INDEX(/1)-1
  215. C NBTPOI=MLESCF.LESPOI(/1)
  216. C IPOI=0
  217. C DO I1 = 1, NBL, 1
  218. C IPOI=IPOI+1
  219. C WRITE(IOIMP,*) I1
  220. C IPOS=MLESCF.INDEX(I1)
  221. C NGV=MLESCF.LESPOI(IPOS)
  222. C WRITE(IOIMP,*) 'NGV = ', NGV
  223. C WRITE(IOIMP,*) ' Position ', IPOS
  224. C WRITE(IOIMP,*)
  225. C & 'Coeff(',NGV,')=',(MATCOE.MAT(I3,IPOS),I3=1,IDIM+1)
  226. C DO I3=1,IDIM+1
  227. C MLREE1.PROG(I3)=MATCOE.MAT(I3,IPOS)
  228. C ENDDO
  229. C NVOIS= MLESCF.INDEX(I1+1) - MLESCF.INDEX(I1) - 1
  230. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  231. C DO I2 = 1, NVOIS, 1
  232. C IPOI=IPOI+1
  233. C NGV1=MLESCF.LESPOI(IPOS+I2)
  234. C WRITE(IOIMP,*) NGV1
  235. C WRITE(IOIMP,*)
  236. C & 'Coeff(',NGV1,')=',(MATCOE.MAT(I3,IPOI),I3=1,IDIM+1)
  237. C DO I3=1,IDIM+1
  238. C MLREE1.PROG(I3)=MLREE1.PROG(I3)+MATCOE.MAT(I3,IPOI)
  239. C ENDDO
  240. C ENDDO
  241. C WRITE(IOIMP,*) 'Somme =',(MLREE1.PROG(I3),I3=1,IDIM+1)
  242. C ENDDO
  243. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  244. C
  245. C***** Fin test
  246. C
  247. C**** On cree: MLEFSC : centre de face - (sommets - centres) voisins
  248. C MACOE1 : MATRICE qui contient les coeff pour
  249. C la projection CENTRE, SOMMET -> FACE
  250. C
  251. CALL RLECA1(IFACEL,IFACEP,MLEFSC,MACOE1)
  252. IF(IERR.NE.0)GOTO 9999
  253. C
  254. C**** Test de RLECA1
  255. C
  256. C SEGACT MLEFSC
  257. C SEGACT MACOE1
  258. C JG=IDIM+1
  259. C SEGINI MLREE1
  260. C NBL=MLEFSC.INDEX(/1)-1
  261. C NBTPOI=MLEFSC.LESPOI(/1)
  262. C IPOI=0
  263. C DO I1 = 1, NBL, 1
  264. C IPOI=IPOI+1
  265. C WRITE(IOIMP,*) I1
  266. C IPOS=MLEFSC.INDEX(I1)
  267. C NGV=MLEFSC.LESPOI(IPOS)
  268. C WRITE(IOIMP,*) 'NGF = ', NGV
  269. C WRITE(IOIMP,*) ' Position ', IPOS
  270. C WRITE(IOIMP,*)
  271. C & 'Coeff(',NGV,')=',(MACOE1.MAT(I3,IPOS),I3=1,IDIM+1)
  272. C DO I3=1,IDIM+1
  273. C MLREE1.PROG(I3)=MACOE1.MAT(I3,IPOS)
  274. C ENDDO
  275. C NVOIS= MLEFSC.INDEX(I1+1) - MLEFSC.INDEX(I1) - 1
  276. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  277. C DO I2 = 1, NVOIS, 1
  278. C IPOI=IPOI+1
  279. C NGV1=MLEFSC.LESPOI(IPOS+I2)
  280. C WRITE(IOIMP,*) NGV1
  281. C WRITE(IOIMP,*)
  282. C & 'Coeff(',NGV1,')=',(MACOE1.MAT(I3,IPOI),I3=1,IDIM+1)
  283. C DO I3=1,IDIM+1
  284. C MLREE1.PROG(I3)=MLREE1.PROG(I3)+MACOE1.MAT(I3,IPOI)
  285. C ENDDO
  286. C ENDDO
  287. C WRITE(IOIMP,*) 'Somme =',(MLREE1.PROG(I3),I3=1,IDIM+1)
  288. C ENDDO
  289. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  290. C
  291. C***** Fin test
  292. C
  293. C
  294. C**** RLEXFI
  295. C
  296. C Creation du MLELEM qui contient
  297. C Points faces - voisins centres
  298. C
  299. CALL RLEXFI(MLESCF,MATCOE,MLEFSC,MACOE1,MLEFC,MACOE2)
  300. C
  301. C**** Test de RLEXFI
  302. C
  303. C SEGACT MLEFC
  304. C SEGACT MACOE2
  305. C JG=IDIM
  306. C SEGINI MLREE1
  307. C MELEME = ISOMM
  308. C SEGACT MELEME
  309. C NBL=MLEFC.INDEX(/1)-1
  310. C NBTPOI=MLEFC.LESPOI(/1)
  311. C IPOI=0
  312. C DO I1 = 1, NBL, 1
  313. C IPOI=IPOI+1
  314. C WRITE(IOIMP,*) I1
  315. C IPOS=MLEFC.INDEX(I1)
  316. C NGV=MLEFC.LESPOI(IPOS)
  317. C WRITE(IOIMP,*) 'NGV = ', NGV
  318. C WRITE(IOIMP,*) ' Position ', IPOS
  319. C WRITE(IOIMP,*)
  320. C & 'Coeff(',NGV,')=',(MACOE2.MAT(I3,IPOS),I3=1,IDIM)
  321. C DO I3=1,IDIM
  322. C MLREE1.PROG(I3)=MACOE2.MAT(I3,IPOS)
  323. C ENDDO
  324. C NVOIS= MLEFC.INDEX(I1+1) - MLEFC.INDEX(I1) - 1
  325. C WRITE(IOIMP,*) 'Nombre voisins : ', NVOIS
  326. C DO I2 = 1, NVOIS, 1
  327. C IPOI=IPOI+1
  328. C NGV1=MLEFC.LESPOI(IPOS+I2)
  329. C WRITE(IOIMP,*) NGV1
  330. C WRITE(IOIMP,*)
  331. C & 'Coeff(',NGV1,')=',(MACOE2.MAT(I3,IPOI),I3=1,IDIM)
  332. C DO I3=1,IDIM
  333. C MLREE1.PROG(I3)=MLREE1.PROG(I3)+MACOE2.MAT(I3,IPOI)
  334. C ENDDO
  335. C ENDDO
  336. C WRITE(IOIMP,*) 'Somme =',(MLREE1.PROG(I3),I3=1,IDIM)
  337. C ENDDO
  338. C WRITE(IOIMP,*) 'Total points:', NBTPOI, IPOI
  339. C
  340. C***** Fin test
  341. C
  342. C
  343. C**** Creation de MCHAML
  344. C MLEFC, MACOE2 -> MCHAML
  345. C
  346. CALL RLEXCO(MLEFC,MACOE2,ICHELM)
  347. IF(IERR.NE.0)GOTO 9999
  348. C
  349. C**** On detrui le FACEL et IFAC ici crée
  350. C
  351. MELEME=IFACEL
  352. SEGSUP MELEME
  353. MELEME=IFACE
  354. SEGSUP MELEME
  355. C
  356. 9999 CONTINUE
  357. RETURN
  358. END
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  

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