Télécharger part6.eso

Retour à la liste

Numérotation des lignes :

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

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