Télécharger matmu0.eso

Retour à la liste

Numérotation des lignes :

matmu0
  1. C MATMU0 SOURCE BP208322 22/09/21 21:15:02 11463
  2.  
  3. *******************************************************************
  4. * PRODUIT MATRICE X MATRICE PARALLELISE (THREAD)
  5. * POUR CERTAINES OPERATIONS DANS DYNE
  6. * creation : BP, 2022-09-20
  7. *******************************************************************
  8.  
  9. SUBROUTINE MATMU0(ithr,IPOINT)
  10.  
  11. IMPLICIT INTEGER(I-N)
  12. IMPLICIT REAL*8(A-H,O-Z)
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16. -INC CCASSIS
  17. c SPARAL : pour la parallelisation
  18. C + NBTHRD : nombre de threads demandes
  19. C + ... : pointeur vers segments utiles
  20. SEGMENT SPARAL
  21. INTEGER NBTHRD
  22. INTEGER IERROR(NBTHR)
  23. INTEGER KMTRAV
  24. INTEGER KMTFEX
  25. INTEGER NDIM1,NDIM2,NDIM3
  26. ENDSEGMENT
  27. SEGMENT,MTFEX
  28. REAL*8 FEXA(NPFEXA,NPC1,2)
  29. REAL*8 FEXPSM(NPLB,NPC1,2,IDIMB)
  30. REAL*8 FTEXB(NPLB,NPC1,2,IDIM)
  31. * INTEGER IFEXA(NPFEXA),IFEXB(NPFEXB)
  32. ENDSEGMENT
  33. SEGMENT,MTRAV
  34. REAL*8 FTCHG(NCHAR,NPC1)
  35. REAL*8 XFORCA(NPREF,NCHAR)
  36. ENDSEGMENT
  37.  
  38.  
  39. *******************************************************************
  40. * RECUP DES POINTEURS
  41. *******************************************************************
  42.  
  43. SPARAL = IPOINT
  44. NBTHR = SPARAL.NBTHRD
  45. MTRAV = SPARAL.KMTRAV
  46. MTFEX = SPARAL.KMTFEX
  47. * NPREF = XFORCA(/1)
  48. * NCHAR = XFORCA(/2)
  49. * NPC1 = FEXA(/2)
  50. NPREF = SPARAL.NDIM1
  51. NCHAR = SPARAL.NDIM2
  52. NPC1 = SPARAL.NDIM3
  53.  
  54.  
  55.  
  56. *******************************************************************
  57. C Decoupage pour le travail d'ecriture en parallele
  58. *******************************************************************
  59.  
  60. * on decoupe le temps (NPC1)
  61. IRES=MOD(NPC1,NBTHR)
  62. IF (IRES.EQ.0) THEN
  63. ILON = NPC1 / NBTHR
  64. IDEB = (ithr -1)* ILON + 1
  65. ELSE
  66. IF (ithr .LE. IRES) THEN
  67. ILON = (NPC1 / NBTHR) + 1
  68. IDEB = (ithr -1)* ILON + 1
  69. ELSE
  70. ILON = NPC1 / NBTHR
  71. IDEB = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
  72. ENDIF
  73. ENDIF
  74. IFIN = IDEB + ILON - 1
  75. * PRINT *,"matmu0: #",ithr,"/",NBTHR," traitement de :",IDEB,IFIN
  76.  
  77.  
  78. *******************************************************************
  79. * CALCUL
  80. *******************************************************************
  81.  
  82. * triple boucle : calcul des efforts en debut de chaque pas
  83. *// DO IT=1, NPC1
  84. DO IT=IDEB,IFIN
  85. DO ICHAR=1,NCHAR
  86. DO IPOS=1,NPREF
  87. FEXA(IPOS,IT,2) = FEXA(IPOS,IT,2)
  88. & + (XFORCA(IPOS,ICHAR) * FTCHG(ICHAR,IT ))
  89. ENDDO
  90. ENDDO
  91. ENDDO
  92.  
  93. * double boucle : copie des efforts en fin de chaque pas sauf le dernier (differences centrees)
  94. *// DO IT=1, (NPC1 - 1)
  95. DO IT=IDEB,MIN(IFIN,(NPC1 - 1))
  96. DO IPOS=1,NPREF
  97. FEXA(IPOS,IT,1) = FEXA(IPOS,IT+1,2)
  98. ENDDO
  99. ENDDO
  100.  
  101. * double boucle : calcul des efforts a la fin du dernier pas de temps
  102. IF(IFIN.EQ.NPC1) THEN
  103. DO ICHAR=1,NCHAR
  104. DO IPOS=1,NPREF
  105. FEXA(IPOS,NPC1,1) = FEXA(IPOS,NPC1,1)
  106. & + (XFORCA(IPOS,ICHAR) * FTCHG(ICHAR,NPC1))
  107. ENDDO
  108. ENDDO
  109. ENDIF
  110.  
  111. END
  112.  
  113.  
  114.  

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