Télécharger part6.eso

Retour à la liste

Numérotation des lignes :

  1. C PART6 SOURCE CB215821 20/01/16 21:15:13 10499
  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. call ecctab(mtable,'ENTIER',1,0.D0,cha,bool, 0
  116. & ,'MMODEL',0,0.D0,cha,bool,MMODEL)
  117. SEGSUP,SSREF
  118. RETURN
  119. ENDIF
  120.  
  121. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  122. C Initialisations et Dimensionnement des MELEME, MMODEL, IMODEL
  123. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  124. JA = 0
  125. DO 10 ISOUS=1,N1INI
  126. imodel= kmodel(isous)
  127. SEGACT,imodel
  128.  
  129. C Recuperation du MAILLAGE ELEMENTAIRE du MODELE ELEMENTAIRE
  130. IPT2 = imamod
  131. SEGACT,IPT2
  132. NBEL0 =IPT2.NUM(/2)
  133. NF = MIN(NBEL0,NBZON)
  134.  
  135. NBZMAX= MAX(NBZMAX,NF)
  136.  
  137. C Dimentionnement des MELEME SIMPLES a 1 element pres
  138. if(MOD(NBEL0,NBZON) .EQ. 0)then
  139. nbelem= NBEL0 / NBZON
  140. else
  141. nbelem=(NBEL0 / NBZON) + 1
  142. endif
  143.  
  144. nbnn = IPT2.NUM(/1)
  145. nbsous = 0
  146. nbref = 0
  147.  
  148. DO 20 II=1,NF
  149. SEGINI,IPT5
  150. IPT5.ITYPEL = IPT2.ITYPEL
  151.  
  152. SEGINI,IMODE1=IMODEL
  153. C write(ioimp,*) conmod(/1), imode1.conmod(/1)
  154. C write(ioimp,*)' imode1 ' , imode1
  155. C write(ioimp,*) ' conmod imode1.conmod ',conmod,imode1.conmod
  156. IMODE1.IMAMOD=IPT5
  157. if (IMODE1.INFMOD(/1) .GE. 2) IMODE1.INFMOD(2) = 0
  158.  
  159.  
  160. C Sauvegarde des Informations dans le SEGMENT
  161. IZ = MOD(II + JA - 1,NBZON) + 1
  162. IMELE(IZ,ISOUS) = IPT5
  163. IMODE(IZ,ISOUS) = IMODE1
  164. ISREF(IZ,ISOUS) = 1
  165. IPOS (IZ) = IPOS(IZ)+1
  166.  
  167. NBZMAX = MAX(NBZMAX,IZ)
  168.  
  169. IF( MTA(IZ) .EQ. 0 ) THEN
  170. SEGINI,mmode1
  171. call ecctab(mtable,'ENTIER',IZ,0.D0,cha,bool, 0
  172. & ,'MMODEL',0 ,0.D0,cha,bool,mmode1)
  173. MTA(IZ) = mmode1
  174. ELSE
  175. mmode1 = MTA(IZ)
  176. ENDIF
  177.  
  178. mmode1.kmodel(IPOS(IZ))=IMODE1
  179. 20 CONTINUE
  180. JA = JA + NF
  181.  
  182. 10 CONTINUE
  183.  
  184.  
  185. C Ajustement des MMODEL de chacune des ZONES
  186. DO IZ=1,NBZON
  187. N1 = IPOS(IZ)
  188. IF(N1 .GT. 0) THEN
  189. mmode1 = MTA(IZ)
  190. IF(N1 .LT. N1INI) THEN
  191. SEGADJ,MMODE1
  192. ENDIF
  193. ENDIF
  194. ENDDO
  195.  
  196. C Ajustement de la TABLE
  197. MM=NBZMAX
  198. IF (KESCL.GT.0) MM=MM+2
  199. IF (MM .LT. M) THEN
  200. M = MM
  201. SEGADJ,mtable
  202. MLOTAB = M
  203. ENDIF
  204.  
  205. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  206. C Debut du travail de repartition
  207. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  208. JA = 0
  209. DO 30 ISOUS=1,N1INI
  210. C Chargement des infos sans SEGACT car deja fait au-dessus
  211. imodel= kmodel(isous)
  212. IPT2 = imamod
  213. NBELEM=IPT2.NUM(/2)
  214. NBNN =IPT2.NUM(/1)
  215. NF = MIN(NBELEM,NBZON)
  216.  
  217. C Reinitialisation du nombre d'element de ce type
  218. DO IZ = 1,NBZMAX
  219. NBELE(IZ) = 0
  220. ENDDO
  221.  
  222. NBTHR = MIN(NBELEM,NBTHRS)
  223. ITH = 0
  224. IF (NBESC .NE. 0) ith=oothrd
  225.  
  226. IF ((NBTHR .LE. 1) .OR. (NBTHRS .EQ. 1) .OR. (ITH .GT. 0)) THEN
  227. BTHRD = .FALSE.
  228. ELSE
  229. BTHRD = .TRUE.
  230. CALL THREADII
  231. ENDIF
  232.  
  233. IF (BTHRD) THEN
  234. DO ith=2,NBTHR
  235. CALL THREADID(ith,part6i)
  236. ENDDO
  237. CALL part6i(1)
  238.  
  239. DO ith=2,NBTHR
  240. CALL THREADIF(ith)
  241. ENDDO
  242.  
  243. CALL THREADIS
  244.  
  245. ELSE
  246. CALL part6i(1)
  247. ENDIF
  248.  
  249. DO 40 IZ = 1,NBZMAX
  250. JF = NBELE(IZ)
  251. IF (JF .EQ. 0) GOTO 40
  252. IPT5 = IMELE(IZ,ISOUS)
  253. IMODE1 = IMODE(IZ,ISOUS)
  254.  
  255. C Ajustement des MELEME SIMPLE si besoin
  256. IF (JF .NE. 0) THEN
  257. NBELEM = IPT5.NUM(/2)
  258.  
  259. IF(JF .EQ. (NBELEM - 1))THEN
  260. NBNN = IPT5.NUM(/1)
  261. NBELEM = JF
  262. NBREF = 0
  263. NBSOUS = 0
  264. SEGADJ,IPT5
  265. ENDIF
  266.  
  267. C Recherche du numero de FORMULATION associee aux XFEM
  268. IF (NUMMFR(nefmod) .EQ. 63) THEN
  269. CALL PARTXR(IMODEL,0,IMODE1)
  270. ENDIF
  271. ENDIF
  272. 40 CONTINUE
  273. JA = JA + NF
  274. 30 CONTINUE
  275.  
  276. C Restitution des MMODEL en *NOMOD
  277. DO IZ=1,NBZON
  278. N1 = IPOS(IZ)
  279. IF(N1 .GT. 0) THEN
  280. mmode1 = MTA(IZ)
  281. CALL actobj('MMODEL ',mmode1,1)
  282. ENDIF
  283. ENDDO
  284.  
  285. SEGSUP,SSREF
  286.  
  287. end
  288.  
  289.  
  290.  
  291.  

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