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

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