Télécharger ipmuli.eso

Retour à la liste

Numérotation des lignes :

  1. C IPMULI SOURCE CB215821 16/02/17 21:15:03 8827
  2. C-----------------------------------------------------------------------
  3. C NOM : IPMULI
  4. C DESCRIPTION : Interface avec IPMUL qui peut etre appelee en parallele
  5. C pour un ensemble de valeurs a interpoler
  6. C LANGAGE : ESOPE
  7. C AUTEUR : Francois DI PAOLA / Clement BERTHINIER
  8. C-----------------------------------------------------------------------
  9. C APPELE PAR : THREADID via IPGRIL
  10. C APPELE : IPMUL
  11. C-----------------------------------------------------------------------
  12. C ENTREES
  13. C ITHR : Numero du thread
  14. C SORTIES
  15. C
  16. C-----------------------------------------------------------------------
  17. C VERSION : v1, 05/10/2015, version initiale
  18. C HISTORIQUE : v1, 05/10/2015, creation
  19. C HISTORIQUE :
  20. C HISTORIQUE :
  21. C-----------------------------------------------------------------------
  22. C Priere de PRENDRE LE TEMPS de completer les commentaires
  23. C en cas de modification de ce sous-programme afin de faciliter
  24. C la maintenance !
  25. C-----------------------------------------------------------------------
  26. C REMARQUES :
  27. C-----------------------------------------------------------------------
  28. C
  29. SUBROUTINE IPMULI(ITHR)
  30. C
  31. IMPLICIT INTEGER(I-N)
  32. IMPLICIT REAL*8 (A-H,O-Z)
  33.  
  34. -INC CCOPTIO
  35. -INC SMCHAML
  36. -INC SMCHPOI
  37. -INC SMLENTI
  38.  
  39. C Introduction d'un COMMON pour la parallelisation
  40. C Il est a repercuter aussi dans les sources suivantes :
  41. C - iplmui.eso
  42. COMMON/IPLMUC/NBTHR,N,NDIM,
  43. & MLENT1,MLENT2,
  44. & ICHPOI,MPOVA1,MPOVA2,
  45. & IMCHAM,MCHAM1,MELVA2,N1EL,N1PTEL
  46.  
  47.  
  48. REAL*8 XX(NDIM)
  49.  
  50.  
  51. C Utilisation du bon pointeur : MPOVAL ou MCHAML
  52. IF (ICHPOI.NE.0) THEN
  53. MPOVA1 = ICHPOI
  54. ELSEIF (IMCHAM.NE.0) THEN
  55. MCHAM1 = IMCHAM
  56. ELSE
  57. C Ce cas ne peut en theorie pas arriver, mais ne sait on jamais
  58. CALL ERREUR(5)
  59. RETURN
  60. ENDIF
  61.  
  62.  
  63. C Debut du travail sur tous les points a interpoler
  64. C Cas des CHPOINTS
  65. IF (ICHPOI.NE.0) THEN
  66. C Boucle sur les points du sous champ d'entree ou l'on va
  67. C interpoler la fonction (Continue en mémoire par thread)
  68. IRES = MOD(N,NBTHR)
  69. IF (IRES .EQ. 0) THEN
  70. ILON = N / NBTHR
  71. IDEB = (ithr -1)* ILON + 1
  72. ELSE
  73. IF (ithr .LE. IRES) THEN
  74. ILON = (N / NBTHR) + 1
  75. IDEB = (ithr -1)* ILON + 1
  76. ELSE
  77. ILON = N / NBTHR
  78. IDEB = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
  79. ENDIF
  80. ENDIF
  81. IFIN = IDEB + ILON - 1
  82. DO J=IDEB,IFIN
  83. C On recupere les valeurs des coordonnes du point J et on les
  84. C range dans le tableau XX
  85. DO K =1,NDIM
  86. KK = MLENT2.LECT(K)
  87. XX(K)= MPOVA1.VPOCHA(J,KK)
  88. ENDDO
  89. C On fait l'interpolation au point J
  90. CALL IPMUL(XX,NDIM,MLENT1,XVAL)
  91. IF (IERR.NE.0) RETURN
  92. C Puis on range la valeur calculee dans le champ de sortie
  93. MPOVA2.VPOCHA(J,1)=XVAL
  94. ENDDO
  95. C FIN Boucle sur les valeurs independantes a traiter (CHPOINT)
  96. C
  97. C Cas des MCHAML
  98. ELSEIF (IMCHAM.NE.0) THEN
  99. C Boucle sur les elements du champ d'entree (Continue en mémoire par thread)
  100. N = N1EL
  101. IRES = MOD(N,NBTHR)
  102. IF (IRES .EQ. 0) THEN
  103. ILON = N / NBTHR
  104. IDEB = (ithr -1)* ILON + 1
  105. ELSE
  106. IF (ithr .LE. IRES) THEN
  107. ILON = (N / NBTHR) + 1
  108. IDEB = (ithr -1)* ILON + 1
  109. ELSE
  110. ILON = N / NBTHR
  111. IDEB = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
  112. ENDIF
  113. ENDIF
  114. IFIN = IDEB + ILON - 1
  115. DO J=IDEB,IFIN
  116. C Boucle sur les points supports de l'element J
  117. DO K=1,N1PTEL
  118. C On recupere les valeurs des coordonnes du point K, de l'
  119. C element J et on les range dans le tableau XX
  120. DO L=1,NDIM
  121. LL = MLENT2.LECT(L)
  122. MELVA1= MCHAM1.IELVAL(LL)
  123. KK = MIN(K,N1PTEL)
  124. JJ = MIN(J,N1EL)
  125. XX(L) = MELVA1.VELCHE(KK,JJ)
  126. ENDDO
  127. C On fait l'interpolation au point K de l'element J
  128. CALL IPMUL(XX,NDIM,MLENT1,XVAL)
  129. IF (IERR.NE.0) RETURN
  130. C Puis on range la valeur calculee dans le champ de sortie
  131. MELVA2.VELCHE(K,J)=XVAL
  132. ENDDO
  133. ENDDO
  134. ENDIF
  135.  
  136.  
  137. RETURN
  138. END
  139.  
  140.  
  141.  
  142.  
  143.  

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