Télécharger part6.eso

Retour à la liste

Numérotation des lignes :

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

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