Télécharger part6.eso

Retour à la liste

Numérotation des lignes :

  1. C PART6 SOURCE CB215821 17/10/04 21:15:11 9586
  2.  
  3. subroutine part6(NBZON,mmodel,itab,ireter,kescl)
  4. C_______________________________________________________________________
  5. C
  6. C PARTITIONNEMENT DE MMODEL
  7. C -------------------------
  8. C HISTORIQUE :
  9. C CB215821 : Parallelisation du partitionnement des MMODEL
  10. C Reprise de la methode employee dans part5.eso
  11. C qui traite le partitionnement de MELEME
  12. C JCARDO : Ajout du parametre kescl
  13. C_______________________________________________________________________
  14.  
  15.  
  16. implicit integer (i-n)
  17. implicit real*8(a-h,o-z)
  18.  
  19. -INC CCOPTIO
  20. -INC SMELEME
  21. -INC SMMODEL
  22. -INC SMTABLE
  23. -INC CCASSIS
  24. -INC CCPRECO
  25.  
  26. SEGMENT SSREF
  27. C NBZON : Nombre de ZONES demandees
  28. C NBSM : Nombre de IMODEL du MMODEL
  29. C ISREF : Tableau indiquant si la sous-zone contient ou non des elements
  30. C IMELE : Tableau avec les references des MELEME SIMPLES de chaque ZONE
  31. C IMODE : Tableau avec les references des IMODEL ELEMENTAIRES de chaque ZONE
  32. C NBELE : Tableau indiquant le nombre d'elements reellement present dans le MELEME SIMPLE en COURS
  33. C MTA : Tableau avec les references des MMODEL de chaque ZONE
  34. C IPOS : Tableau indiquant le nombre de IMODEL contenus dans les MMODEL de chaque ZONE
  35. INTEGER ISREF(NBZON,NBSM)
  36. INTEGER IMELE(NBZON,NBSM)
  37. INTEGER IMODE(NBZON,NBSM)
  38. INTEGER NBELE(NBZON)
  39. INTEGER MTA (NBZON)
  40. INTEGER IPOS (NBZON)
  41. ENDSEGMENT
  42.  
  43. C Declaration du COMMON pour le travail en parallele
  44. COMMON/part6c/NBTHR,SSREF,JA,IPT2,NBNN,NBELEM,ISOUS,NBZONE
  45.  
  46. EXTERNAL part6i
  47. LOGICAL BTHRD
  48.  
  49. character*1 cha
  50. logical bool
  51.  
  52. ireter=0
  53. itab =0
  54. bool = .FALSE.
  55. cha ='O'
  56.  
  57. C Verification que le MMODEL n'est pas deja dans le CCPRECO
  58. DO IIMOD1 = 1, NMOPAR
  59. IF (PARMOD(IIMOD1) .EQ. 0) GOTO 1
  60. IF (MMODEL .EQ. PARMOD(IIMOD1)) THEN
  61. itab = PESCLA(IIMOD1)
  62. C PRINT *,'PART6, CCPRECO :', IIMOD1
  63. C Mise a jour du preconditionnement dans CCPRECO : Deplacement en position 1
  64. IF (IIMOD1 .EQ. 1) RETURN
  65. DO IIMOD2 = IIMOD1,2,-1
  66. PARMOD(IIMOD2) = PARMOD(IIMOD2 - 1)
  67. PESCLA(IIMOD2) = PESCLA(IIMOD2 - 1)
  68. ENDDO
  69. PARMOD(1) = MMODEL
  70. PESCLA(1) = itab
  71. RETURN
  72. ENDIF
  73. ENDDO
  74.  
  75. 1 CONTINUE
  76. SEGACT,MMODEL
  77. n1=kmodel(/1)
  78. N1INI = n1
  79. NBSM=MAX(1,n1)
  80.  
  81. NBZMAX = 0
  82.  
  83. C Initialisation du SEGMENT de travail
  84. SEGINI,SSREF
  85.  
  86.  
  87. C Creation de la TABLE resultat
  88. m=NBZON
  89. IF (KESCL.GT.0) M=M+2
  90. NBZONE=NBZON
  91. segini,mtable
  92. itab=mtable
  93.  
  94.  
  95. C Mise a jour du preconditionnement dans CCPRECO
  96. C Glissement des valeurs vers le bas
  97. DO IIMOD = NMOPAR,2,-1
  98. PARMOD(IIMOD) = PARMOD(IIMOD - 1)
  99. PESCLA(IIMOD) = PESCLA(IIMOD - 1)
  100. ENDDO
  101. PARMOD(1) = MMODEL
  102. PESCLA(1) = itab
  103.  
  104. IF (KESCL.GT.0) THEN
  105. CALL ECCTAB(mtable,'MOT',0,0.D0,'SOUSTYPE',bool,0
  106. & ,'MOT',0,0.D0,'ESCLAVE' ,bool,0)
  107. CALL ECCTAB(mtable,'MOT',0,0.D0,'CREATEUR',bool,0
  108. & ,'MOT',0,0.D0,'PART' ,bool,0)
  109. ENDIF
  110.  
  111.  
  112.  
  113. IF (NBZON .EQ. 1) THEN
  114. C Cas trivial de travail
  115. SEGINI,mmode1=MMODEL
  116. call ecctab(mtable,'ENTIER',1,0.D0,cha,bool, 0
  117. & ,'MMODEL',0 ,0.D0,cha,bool,mmode1)
  118. SEGDES,MMODEL,MMODE1,MTABLE
  119. SEGSUP,SSREF
  120. RETURN
  121. ENDIF
  122.  
  123. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  124. C Initialisations et Dimensionnement des MELEME, MMODEL, IMODEL
  125. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  126. JA = 0
  127. DO 10 ISOUS=1,N1INI
  128. imodel= kmodel(isous)
  129. SEGACT,imodel
  130.  
  131. C Recuperation du MAILLAGE ELEMENTAIRE du MODELE ELEMENTAIRE
  132. IPT2 = imamod
  133. SEGACT,IPT2
  134. NBEL0 =IPT2.NUM(/2)
  135. NF = MIN(NBEL0,NBZON)
  136.  
  137. NBZMAX= MAX(NBZMAX,NF)
  138.  
  139. C Dimentionnement des MELEME SIMPLES a 1 element pres
  140. if(MOD(NBEL0,NBZON) .EQ. 0)then
  141. nbelem= NBEL0 / NBZON
  142. else
  143. nbelem=(NBEL0 / NBZON) + 1
  144. endif
  145.  
  146. nbnn = IPT2.NUM(/1)
  147. nbsous = 0
  148. nbref = 0
  149.  
  150. DO 20 II=1,NF
  151. SEGINI,IPT5
  152. IPT5.ITYPEL = IPT2.ITYPEL
  153.  
  154. SEGINI,IMODE1=IMODEL
  155. C write(ioimp,*) conmod(/1), imode1.conmod(/1)
  156. C write(ioimp,*)' imode1 ' , imode1
  157. C write(ioimp,*) ' conmod imode1.conmod ',conmod,imode1.conmod
  158. IMODE1.IMAMOD=IPT5
  159. if (IMODE1.INFMOD(/1) .GE. 2) IMODE1.INFMOD(2) = 0
  160.  
  161.  
  162. C Sauvegarde des Informations dans le SEGMENT
  163. IZ = MOD(II + JA - 1,NBZON) + 1
  164. IMELE(IZ,ISOUS) = IPT5
  165. IMODE(IZ,ISOUS) = IMODE1
  166. ISREF(IZ,ISOUS) = 1
  167. IPOS (IZ) = IPOS(IZ)+1
  168.  
  169. NBZMAX = MAX(NBZMAX,IZ)
  170.  
  171. IF( MTA(IZ) .EQ. 0 ) THEN
  172. SEGINI,mmode1
  173. call ecctab(mtable,'ENTIER',IZ,0.D0,cha,bool, 0
  174. & ,'MMODEL',0 ,0.D0,cha,bool,mmode1)
  175. MTA(IZ) = mmode1
  176. ELSE
  177. mmode1 = MTA(IZ)
  178. ENDIF
  179.  
  180. mmode1.kmodel(IPOS(IZ))=IMODE1
  181. 20 CONTINUE
  182. JA = JA + NF
  183.  
  184. 10 CONTINUE
  185.  
  186.  
  187. C Ajustement des MMODEL de chacune des ZONES
  188. DO IZ=1,NBZON
  189. N1 = IPOS(IZ)
  190. IF(N1 .GT. 0) THEN
  191. mmode1 = MTA(IZ)
  192. IF(N1 .LT. N1INI) THEN
  193. SEGADJ,MMODE1
  194. ENDIF
  195.  
  196. SEGDES,MMODE1
  197. ENDIF
  198. ENDDO
  199.  
  200. C Ajustement de la TABLE
  201. MM=NBZMAX
  202. IF (KESCL.GT.0) MM=MM+2
  203. IF (MM .LT. M) THEN
  204. M = MM
  205. SEGADJ,mtable
  206. MLOTAB = M
  207. ENDIF
  208.  
  209. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  210. C Debut du travail de repartition
  211. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  212. JA = 0
  213. DO 30 ISOUS=1,N1INI
  214. C Chargement des infos sans SEGACT car deja fait au-dessus
  215. imodel= kmodel(isous)
  216. IPT2 = imamod
  217. NBELEM=IPT2.NUM(/2)
  218. NBNN =IPT2.NUM(/1)
  219. NF = MIN(NBELEM,NBZON)
  220.  
  221. C Reinitialisation du nombre d'element de ce type
  222. DO IZ = 1,NBZMAX
  223. NBELE(IZ) = 0
  224. ENDDO
  225.  
  226. NBTHR = MIN(NBELEM,NBTHRS)
  227. ITH = 0
  228. IF (NBESC .NE. 0) CALL OOONTH(ITH)
  229.  
  230. IF ((NBTHR .LE. 1) .OR. (NBTHRS .EQ. 1) .OR. (ITH .GT. 0)) THEN
  231. BTHRD = .FALSE.
  232. ELSE
  233. BTHRD = .TRUE.
  234. CALL THREADII
  235. ENDIF
  236.  
  237. IF (BTHRD) THEN
  238. DO ith=2,NBTHR
  239. CALL THREADID(ith,part6i)
  240. ENDDO
  241. CALL part6i(1)
  242.  
  243. DO ith=2,NBTHR
  244. CALL THREADIF(ith)
  245. ENDDO
  246. C En multithread il peut y avoir n'importe quoi dans OOV(1)
  247. OOV(1) = 0
  248.  
  249. CALL THREADIS
  250.  
  251. ELSE
  252. CALL part6i(1)
  253. ENDIF
  254.  
  255. DO 40 IZ = 1,NBZMAX
  256. JF = NBELE(IZ)
  257. IF (JF .EQ. 0) GOTO 40
  258. IPT5 = IMELE(IZ,ISOUS)
  259. IMODE1 = IMODE(IZ,ISOUS)
  260.  
  261. C Ajustement des MELEME SIMPLE si besoin
  262. IF (JF .NE. 0) THEN
  263. NBELEM = IPT5.NUM(/2)
  264.  
  265. IF(JF .EQ. (NBELEM - 1))THEN
  266. NBNN = IPT5.NUM(/1)
  267. NBELEM = JF
  268. NBREF = 0
  269. NBSOUS = 0
  270. SEGADJ,IPT5
  271. ENDIF
  272.  
  273. C Recherche du numero de FORMULATION associee aux XFEM
  274. IF (NUMMFR(nefmod) .EQ. 63) THEN
  275. CALL PARTXR(IMODEL,0,IMODE1)
  276. ENDIF
  277. ENDIF
  278. SEGDES,IMODE1,IPT5
  279. 40 CONTINUE
  280. JA = JA + NF
  281. 30 CONTINUE
  282.  
  283. C Desactivation des IMAMOD apres (pas avant car 2 SOUS-ZONES peuvent
  284. C partager le même MELEME...)
  285. DO 50 ISOUS=1,N1INI
  286. C Chargement des infos sans SEGACT car deja fait au-dessus
  287. imodel= kmodel(isous)
  288. IPT2 = imamod
  289. SEGDES,IMODEL,IPT2
  290. 50 CONTINUE
  291. SEGDES,MMODEL,MTABLE
  292. SEGSUP,SSREF
  293.  
  294. return
  295. end
  296.  
  297.  
  298.  
  299.  

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