Télécharger blocos.eso

Retour à la liste

Numérotation des lignes :

blocos
  1. C BLOCOS SOURCE PV 22/04/22 21:15:01 11344
  2. C **********************************************************************
  3. C FICHIER : BLOCOS.F
  4. C
  5. C MAILLAGE D'UN DOMAINE DE 4 COTES
  6. C
  7. C OBJET :
  8. C
  9. C OBJET BLOCOS : MAILLAGE EN QUADRANGLE A PARTIR D'UN MAILLAGE
  10. C OBJET LINEIQUE DE 4 COTES FORMANT UN CONTOUR FERME.
  11. C OBJET Q4CRGR : MAILLAGE EN GRILLE A PARTIR DE 4 COTES
  12. C OBJET (MEME CARDINAUX SUR LES COTES OPPOSES).
  13. C
  14. C
  15. C AUTEUR : O. STAB
  16. C DATE : 06.96
  17. C MODIFICATIONS :
  18. C AUTEUR, DATE, OBJET :
  19. C
  20. C
  21. C **********************************************************************
  22. C
  23. C
  24. SUBROUTINE BLOCOS(IPOLY,N,
  25. > COORD,IDIMC,NBCOOR,
  26. > NBLIG,NBCOL,ICOIN,
  27. > ITVL,NITMAX,
  28. > IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,NOEMAX,
  29. > NBE,NBP,NBEMAX,NBPMAX,
  30. > ICOMPR,ILISS,EPSLIS,W,
  31. > ITRACE,IERCOD,iarr)
  32. C **********************************************************************
  33. C OBJET BLOCOS : MAILLAGE EN QUADRANGLE A PARTIR D'UN MAILLAGE
  34. C OBJET LINEIQUE DE 4 COTES FORMANT UN CONTOUR FERME.
  35. C
  36. C EN ENTREE :
  37. C ------------- MAILLAGE LINEIQUE ------------
  38. C IPOLY : TABLEAU DES NOEUDS DU CONTOUR FERME
  39. C N : N(I) NOMBRE D'ELEMENTS SUR LE COTES I
  40. C N(I) DOIVENT ETRE STRICTEMENT POSITIF
  41. C LEUR SOMME DOIT ETRE PAIR.
  42. C COORD : TABLEAU DES COORDONNEES DES POINTS
  43. C IDIMC : DIMENSION DE L'ESPACE (>= 2)
  44. C ------------- TABLEAU DE TRAVAIL ------------
  45. C ITVL : TABLEAU D'ENTIERS POUR LES CALCULS
  46. C T1 = 2*(NBCOL+NBLIG) POUR LE CONTOUR
  47. C T2 = (NBCOL*NBLIG) POUR LA GRILLE
  48. C T3 = (NBLIG*NBCOL)*6 POUR LA STRUCTURE
  49. C ITVL >= T1+T3
  50. C NITMAX : TAILLE DE ITVL
  51. C SI NBEMAX = 0 NITMAX PEUT ETRE NUL
  52. C SINON NITMAX >= T1+T3
  53. c
  54. C NBNMAX : NOMBRE DE NOEUDS PAR ELEMENT (>=4)
  55. C NBCMAX : NOMBRE DE VOISINS A UN ELEMENT (>=4)
  56. C ------------- TAILLE DES TABLEAU DE SORTIE ------------
  57. C NBEMAX : NOMBRE MAXIMUM D'ELEMENTS
  58. C SI NBEMAX = 0 LE MAILLAGE N'EST PAS CALCULE
  59. C SEULES LES INFORMATIONS SUR LA GRILLE SONT DONNEES
  60. C SINON NBEMAX >= (NBLIG-1)*(NBCOL-1)
  61. C NBPMAX : NOMBRE MAXIMUM DE POINTS
  62. C NBPMAX >= NBLIG*NBCOL
  63. C
  64. C ITRNOE : TAILLE >= NBEMAX*NBNMAX
  65. C ITRTRI : TAILLE >= NBEMAX*NBCMAX
  66. C NOETRI : TAILLE >= NBPMAX
  67. C COORD : TAILLE >= NBPMAX*IDIMC
  68. C
  69. C ------------- PARAMETRES DE POSTTRAITEMENT ------------
  70. C ICOMPR : ICOMPR = 1, COMPRESSION ACTIVE
  71. C ILISS : LISSAGE DES NOEUDS INTERIEURS ACTIF
  72. C EPSLIS : DEPLACEMENT NEGLIGEABLE
  73. C W : COEFFICIENT DE RIGIDITE DES ELEMENTS QUADRANGULAIRES
  74. C [0,1] (LISSAGE DE HERRMANN)
  75. C
  76. C EN SORTIE :
  77. C ------------- INFORMATIONS SUR LA GRILLE -----------
  78. C NBLIG, NBCOL, ICOIN : NOMBRE DE LIGNE ET NOMBRE DE COLONNES DE
  79. C LA GRILLE AVEC LES VALEURS DES COUPER-COLLER AUX COINS.
  80. C ------------- LE MAILLAGE --------------------------
  81. C IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,NOEMAX,NBE,NBP : LE MAILLAGE
  82. C EN QUADRANGLES LINEAIRES
  83. C COORD : TABLEAU DES COORDONNEES DES POINTS (COMPLETE)
  84. C iarr : TYPE D'ERREUR
  85. C -1 SI DONNEES INCORRECTES
  86. C -2 SI TABLEAUX INSUFFISANTS(COORD,ITRNOE OU ITVL)
  87. C IERCOD : CODE DETAILLE DE L'ERREUR
  88. C -100 : ERREUR NON REPERTORIEE
  89. C -101 : LE NOMBRE DE NOEUDS SUR LE CONTOUR EST IMPAIR
  90. C -102 : LA DIMENSION DES COORDONNEES EST INCORRECTE
  91. C -103 : LE CONTOUR N A PAS 4 COTES
  92. C APPELS : Q4CRGR
  93. C **********************************************************************
  94. IMPLICIT INTEGER(I-N)
  95. INTEGER IPOLY(*),N(*)
  96. REAL*8 COORD(*)
  97. INTEGER IDIMC,NBCOOR,ITVL(*),NITMAX
  98. INTEGER NBLIG,NBCOL,ICOIN(*)
  99. INTEGER IDE,ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX,NOETRI(*),NOEMAX
  100. INTEGER NBEMAX,NBPMAX,NBE,NBP
  101. INTEGER ICOMPR,ILISS
  102. REAL*8 EPSLIS,W
  103. INTEGER ITRACE,IERCOD,iarr
  104. C
  105. C --- VARIABLES INTERNES ---
  106. INTEGER I,ICOURF,IND(4),NBEL2
  107. integer ibid(1)
  108. C
  109. INTEGER INDICE,INCREM
  110. INTEGER NBCOAJ(2),INCOAJ(2),NBAJ
  111. INTEGER INDXYZ,ITRAV,NITMX2
  112. INTEGER ITBLOQ,IPARA,NPASMX,NCC,NBENUL,NBISOL
  113. REAL*8 RELAX,RTRAV(3)
  114. C =============================
  115. C --- 0. VERIFICATION DES ENTREES ---
  116. C =============================
  117. IERCOD = -100
  118. NBE = 0
  119. NBP = 0
  120. NBLIG = 0
  121. NBCOL = 0
  122. DO 5 I=1,4
  123. ICOIN(I) = 0
  124. 5 CONTINUE
  125. C
  126. IF( (N(1).LT.1).OR.(N(2).LT.1).OR.
  127. > (N(3).LT.1).OR.(N(4).LT.1))THEN
  128. IERCOD = -103
  129. iarr = -1
  130. GOTO 9999
  131. ENDIF
  132. IF( MOD(N(1)+N(2)+N(3)+N(4),2) .NE.0 )THEN
  133. IERCOD = -101
  134. iarr = -1
  135. GOTO 9999
  136. ENDIF
  137. IF( IDIMC.LT.0 )THEN
  138. IERCOD = -102
  139. iarr = -1
  140. GOTO 9999
  141. ENDIF
  142. C
  143. C ===========================
  144. C --- 0. ON DETERMINE LA MEMOIRE ---
  145. C ===========================
  146. C
  147. CALL G2NBKK(N(1),N(2),N(3),N(4),
  148. > ICOIN(1),ICOIN(2),ICOIN(3),ICOIN(4),iarr)
  149. IF( iarr.NE. 0 )GOTO 9999
  150. C
  151. NBLIG = MAX(N(4)+ICOIN(4)+ICOIN(3),N(2)+ICOIN(2)+ICOIN(1)) + 1
  152. NBCOL = MAX(ICOIN(4)+N(1)+ICOIN(1),ICOIN(2)+N(3)+ICOIN(3)) + 1
  153. NBE = (NBLIG-1)*(NBCOL-1)
  154. NBP = NBCOL*NBLIG
  155. C
  156. IF(NBEMAX.EQ.0)GOTO 9999
  157. C
  158. IF(NBEMAX.LT.NBE)THEN
  159. iarr = -2
  160. CALL DSERRE(1,iarr,'BLOCOS',' POUR LE MAILLAGE 2D ')
  161. CALL ESEINT(1,'PLACE NECESSAIRE POUR LES ELEMENTS',NBE*NBNMAX,1)
  162. GOTO 9999
  163. ENDIF
  164. IF(NBPMAX.LT.NBP)THEN
  165. iarr = -2
  166. CALL DSERRE(1,iarr,'BLOCOS',' POUR LE MAILLAGE 2D ')
  167. CALL ESEINT(1,'PLACE NECESSAIRE POUR LES NOEUDS',NBP*IDIMC,1)
  168. GOTO 9999
  169. ENDIF
  170. IF(NITMAX.LT.(2*(NBCOL+NBLIG)+(NBCOL*NBLIG)))THEN
  171. iarr = -2
  172. CALL DSERRE(1,iarr,'BLOCOS',' POUR LE MAILLAGE 2D ')
  173. CALL ESEINT(1,'PLACE NECESSAIRE POUR LES CALCUL',
  174. > (2*(NBCOL+NBLIG)+(NBCOL*NBLIG)),1)
  175. ENDIF
  176. C
  177. C ===========================
  178. C --- 1. ON COMPLETE LES COURBES ---
  179. C ===========================
  180. C
  181. IF(ITRACE.GT.0)
  182. > CALL ESECHA(1,'-> COURBES COMPLETEES',' ')
  183. C
  184. C
  185. C --- CONSTRUCTION D'UN MAILLAGE DE FRONTIERE SIMPLE :
  186. C DE 4 COTES (NBLIG,NBCOL,NBLIG,NBCOL)
  187. C NOEUDS RESPECTIVEMENT
  188. C --- INDICE DES NOEUDS DES COTES ---
  189. IND(1) = N(1) + 1
  190. DO 10 I=2,4
  191. IND(I) = N(I) + IND(I-1)
  192. 10 CONTINUE
  193. ICOURF = 1
  194. C
  195. INDXYZ = NBCOOR+1
  196. INDICE = NBCOOR+1
  197. INCREM = 1
  198. C
  199. NBAJ = 2
  200. INCOAJ(1) = 1
  201. NBCOAJ(1) = ICOIN(4)
  202. NBCOAJ(2) = ICOIN(1)
  203. INCOAJ(2) = -N(1)-1
  204. CALL G2MOCO(IPOLY,1,N(1)+1,
  205. > NBAJ,INCOAJ,NBCOAJ,INDICE,INCREM,
  206. > ITVL(ICOURF),NBLIG2,NBEL2)
  207. C PRINT *,'N1 = ',NBEL2
  208. C PRINT *,'ICOURB = ',(ITVL(ICOURF-1+I),I=1,2*(NBCOL+NBLIG))
  209. CALL G2POCO(IPOLY,1,N(1)+1,
  210. > NBAJ,INCOAJ,NBCOAJ,INDXYZ,INCREM,
  211. > COORD,IDIMC)
  212. C
  213. INCOAJ(1) = 1
  214. NBCOAJ(1) = ICOIN(1)
  215. NBCOAJ(2) = ICOIN(2)
  216. INCOAJ(2) = -N(2)-1
  217. C PRINT *,' IND =',ICOURF+NBCOL-1
  218. CALL G2MOCO(IPOLY(IND(1)),1,N(2)+1,
  219. > NBAJ,INCOAJ,NBCOAJ,INDICE,INCREM,
  220. > ITVL(ICOURF+NBCOL),NBLIG2,NBEL2)
  221. CALL G2POCO(IPOLY(IND(1)),1,N(2)+1,
  222. > NBAJ,INCOAJ,NBCOAJ,INDXYZ,INCREM,
  223. > COORD,IDIMC)
  224. C PRINT *,'N2 = ',NBEL2
  225. C PRINT *,'ICOURB = ',(ITVL(ICOURF-1+I),I=1,2*(NBCOL+NBLIG))
  226. C
  227. INCOAJ(1) = 1
  228. NBCOAJ(1) = ICOIN(2)
  229. NBCOAJ(2) = ICOIN(3)
  230. INCOAJ(2) = -N(3)-1
  231. C PRINT *,' IND =',ICOURF+NBCOL+NBLIG-1
  232. CALL G2MOCO(IPOLY(IND(2)),1,N(3)+1,
  233. > NBAJ,INCOAJ,NBCOAJ,INDICE,INCREM,
  234. > ITVL(ICOURF+NBCOL+NBLIG),NBLIG2,NBEL2)
  235. CALL G2POCO(IPOLY(IND(2)),1,N(3)+1,
  236. > NBAJ,INCOAJ,NBCOAJ,INDXYZ,INCREM,
  237. > COORD,IDIMC)
  238. C PRINT *,'N3 = ',NBEL2
  239. C PRINT *,'ICOURB = ',(ITVL(ICOURF-1+I),I=1,2*(NBCOL+NBLIG))
  240. C
  241. INCOAJ(1) = 1
  242. NBCOAJ(1) = ICOIN(3)
  243. NBCOAJ(2) = ICOIN(4)
  244. INCOAJ(2) = -N(4)-1
  245. C PRINT *,' IND =',ICOURF+2*NBCOL+NBLIG-1
  246. CALL G2MOCO(IPOLY(IND(3)),1,N(4)+1,
  247. > NBAJ,INCOAJ,NBCOAJ,INDICE,INCREM,
  248. > ITVL(ICOURF+2*NBCOL+NBLIG),NBLIG2,NBEL2)
  249. CALL G2POCO(IPOLY(IND(3)),1,N(4)+1,
  250. > NBAJ,INCOAJ,NBCOAJ,INDXYZ,INCREM,
  251. > COORD,IDIMC)
  252. C
  253. C PRINT *,'N4 = ',NBEL2
  254. C PRINT *,'IPOLY = ',(IPOLY(I),I=1,N(1)+N(2)+N(3)+N(4))
  255. C PRINT *,'ICOURB = ',(ITVL(ICOURF-1+I),I=1,2*(NBCOL+NBLIG))
  256. C PRINT *,((COORD((I-1)*IDIMC+J),J=1,IDIMC),'+',I=1,INDXYZ)
  257. C PRINT *,'ITRACE =',ITRACE
  258. C
  259. C ========================================
  260. C --- 2.CREATION DU PAVAGE ---
  261. C ========================================
  262. C
  263. C
  264. IF(ITRACE.GT.0)
  265. > CALL ESECHA(1,'-> CREATION DU PAVAGE',' ')
  266. C
  267. ITRAV = ICOURF + 2*(NBLIG+NBCOL)
  268. NITMX2 = NITMAX - ITRAV
  269. NBCOOR = INDXYZ - 1
  270. C ------- POUR LE TEST SANS COLLAGE ---
  271. C DO 20 I=1,4
  272. C ICOIN(I) = 0
  273. C 20 CONTINUE
  274. CALL Q4CRGR(ITVL(ICOURF),ITVL(NBCOL+ICOURF),
  275. > ITVL(ICOURF+NBCOL+NBLIG),
  276. > ITVL(ICOURF+2*NBCOL+NBLIG),N,
  277. > COORD,IDIMC,NBCOOR,
  278. > NBLIG,NBCOL,ICOIN,
  279. > ITVL(ITRAV),NITMX2,
  280. > IDE,ITRNOE,NBNMAX,NBE,NBP,
  281. > NBEMAX,NBPMAX,ITRACE,iarr)
  282. C
  283. IF(iarr.NE.0)THEN
  284. CALL DSERRE(1,iarr,'BLOCOS',' APPEL Q4CRGR ')
  285. GOTO 9999
  286. ENDIF
  287. C
  288. C ===================================================
  289. C --- 3. COMPRESSION DU MAILLAGE ---
  290. C ===================================================
  291. C
  292. IDE = 2
  293. C
  294. IF(( (ICOIN(1)+ICOIN(2)+ICOIN(3)+ICOIN(4)).NE.0).AND.
  295. > (ICOMPR.EQ.1))THEN
  296. C
  297. IF(ITRACE.GT.0)
  298. > CALL ESECHA(1,'-> COMPRESSION DU MAILLAGE',' ')
  299. C
  300. NBENUL = NBE
  301. NBISOL = NBP
  302. CALL NUGCNU(IDE,ITRNOE,NBNMAX,ibid,0,
  303. > ibid,0,NBE,COORD,IDIMC,NBP,
  304. > ITVL,NITMAX,iarr)
  305. C
  306. IF(iarr.NE.0)THEN
  307. CALL DSERRE(1,iarr,'BLOCOS',' APPEL NUGCNU ')
  308. GOTO 9999
  309. ENDIF
  310. C
  311. IF(ITRACE.GT.0)THEN
  312. CALL ESEINT(1,'NOMBRE D ELEMENTS SUPPRIMES : ',NBENUL-NBE,1)
  313. CALL ESEINT(1,'NOMBRE DE POINTS SUPPRIMES : ',NBISOL-NBP,1)
  314. ENDIF
  315. ENDIF
  316. C
  317. C ============================================
  318. C --- 4.CREATION DE LA STRUCTURE DE DONNEES ---
  319. C ============================================
  320. C
  321. IF(ITRACE.GT.0)
  322. > CALL ESECHA(1,'-> CREATION DE LA STRUCTURE',' ')
  323. C
  324. CALL SMAOCR(IDE,ITRNOE,NBE,COORD,NBP,IDIMC,
  325. > ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,NOEMAX,
  326. > ITVL,NITMAX,NCC,iarr)
  327. C
  328. IF(iarr.NE.0)THEN
  329. CALL DSERRE(1,iarr,'BLOCOS',' APPEL SMAOCR ')
  330. GOTO 9999
  331. ENDIF
  332. C
  333. C ============================================
  334. C --- 5.LISSAGE (BARYCENTRIQUE,ISOPARAMETRIQUE) ---
  335. C ============================================
  336. C
  337. IF( ILISS.EQ. 1)THEN
  338. C
  339. IF(ITRACE.GT.0)
  340. > CALL ESECHA(1,'-> LISSAGE',' ')
  341. C
  342. C WRITE(6,*) 'ITRTRI = ',((ITRTRI((I-1)*NBCMAX+J),J=1,NBCMAX),
  343. C > '/',I=1,NBE)
  344. C WRITE(6,*) 'NOETRI = ',(NOETRI(I),I=1,NBN)
  345. ITBLOQ = 1
  346. IPARA = 0
  347. RELAX = 1.5
  348. NPASMX = 100
  349. * CALL LISNOI(ITRNOE,NBNMAX,ITRTRI,NBCMAX,NOETRI,NBP,
  350. * > COORD,IDIMC,
  351. * > COORD,IDIMC,EPSLIS,COORD,
  352. * > ITBLOQ,0,0,
  353. * > IPARA,RELAX,NPASMX,
  354. * > W,RTRAV,ITRACE,iarr)
  355. C
  356. IF(iarr.NE.0)THEN
  357. CALL DSERRE(1,iarr,'BLOCOS',' APPEL LISNOI ')
  358. GOTO 9999
  359. ENDIF
  360. ENDIF
  361. C
  362. 9999 END
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  

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