Télécharger gradia.eso

Retour à la liste

Numérotation des lignes :

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

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