Télécharger ipmul0.eso

Retour à la liste

Numérotation des lignes :

ipmul0
  1. C IPMUL0 SOURCE CB215821 20/11/25 13:30:30 10792
  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 IPMUL0(ITHR,IPARAL)
  30. C
  31. IMPLICIT INTEGER(I-N)
  32. IMPLICIT REAL*8 (A-H,O-Z)
  33.  
  34.  
  35. -INC PPARAM
  36. -INC CCOPTIO
  37. -INC SMCHAML
  38. -INC SMCHPOI
  39. -INC SMLENTI
  40.  
  41. SEGMENT SPARAL
  42. INTEGER NNN,ML1,ML2,MPV1,MPV2,MCH1,MEL2,
  43. & N1EL1,N1PEL1
  44. INTEGER IXX(NBTHR)
  45. ENDSEGMENT
  46.  
  47. SEGMENT SXX
  48. REAL*8 XX(NDIM)
  49. ENDSEGMENT
  50.  
  51. SPARAL = IPARAL
  52. SXX = IXX(ITHR)
  53.  
  54. NDIM = SXX.XX(/1)
  55. NBTHR = SPARAL.IXX(/1)
  56. N = SPARAL.NNN
  57. MLENT1 = SPARAL.ML1
  58. MLENT2 = SPARAL.ML2
  59. MPOVA1 = SPARAL.MPV1
  60. MPOVA2 = SPARAL.MPV2
  61. MCHAM1 = SPARAL.MCH1
  62. MELVA2 = SPARAL.MEL2
  63. N1EL = SPARAL.N1EL1
  64. N1PTEL = SPARAL.N1PEL1
  65.  
  66. C Utilisation du bon pointeur : MPOVAL ou MCHAML
  67. IF (MPOVA1.NE.0) THEN
  68. MPOVA1 = MPOVA1
  69. ELSEIF (MCH1.NE.0) THEN
  70. MCHAM1 = MCH1
  71. ELSE
  72. C Ce cas ne peut en theorie pas arriver, mais ne sait on jamais
  73. CALL ERREUR(5)
  74. RETURN
  75. ENDIF
  76.  
  77.  
  78. C Debut du travail sur tous les points a interpoler
  79. C Cas des CHPOINTS
  80. IF (MPOVA1.NE.0) THEN
  81. C Boucle sur les points du sous champ d'entree ou l'on va
  82. C interpoler la fonction (Continue en mémoire par thread)
  83. IRES = MOD(N,NBTHR)
  84. IF (IRES .EQ. 0) THEN
  85. ILON = N / NBTHR
  86. IDEB = (ithr -1)* ILON + 1
  87. ELSE
  88. IF (ithr .LE. IRES) THEN
  89. ILON = (N / NBTHR) + 1
  90. IDEB = (ithr -1)* ILON + 1
  91. ELSE
  92. ILON = N / NBTHR
  93. IDEB = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
  94. ENDIF
  95. ENDIF
  96. IFIN = IDEB + ILON - 1
  97. DO J=IDEB,IFIN
  98. C On recupere les valeurs des coordonnes du point J et on les
  99. C range dans le tableau XX
  100. DO K =1,NDIM
  101. KK = MLENT2.LECT(K)
  102. XX(K)= MPOVA1.VPOCHA(J,KK)
  103. ENDDO
  104. C On fait l'interpolation au point J
  105. CALL IPMUL(XX,NDIM,MLENT1,XVAL)
  106. IF (IERR.NE.0) RETURN
  107. C Puis on range la valeur calculee dans le champ de sortie
  108. MPOVA2.VPOCHA(J,1)=XVAL
  109. ENDDO
  110. C FIN Boucle sur les valeurs independantes a traiter (CHPOINT)
  111. C
  112. C Cas des MCHAML
  113. ELSEIF (MCH1.NE.0) THEN
  114. C Boucle sur les elements du champ d'entree (Continue en mémoire par thread)
  115. N = N1EL
  116. IRES = MOD(N,NBTHR)
  117. IF (IRES .EQ. 0) THEN
  118. ILON = N / NBTHR
  119. IDEB = (ithr -1)* ILON + 1
  120. ELSE
  121. IF (ithr .LE. IRES) THEN
  122. ILON = (N / NBTHR) + 1
  123. IDEB = (ithr -1)* ILON + 1
  124. ELSE
  125. ILON = N / NBTHR
  126. IDEB = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
  127. ENDIF
  128. ENDIF
  129. IFIN = IDEB + ILON - 1
  130. DO J=IDEB,IFIN
  131. C Boucle sur les points supports de l'element J
  132. DO K=1,N1PTEL
  133. C On recupere les valeurs des coordonnes du point K, de l'
  134. C element J et on les range dans le tableau XX
  135. DO L=1,NDIM
  136. LL = MLENT2.LECT(L)
  137. MELVA1= MCHAM1.IELVAL(LL)
  138. KK = MIN(K,N1PTEL)
  139. JJ = MIN(J,N1EL)
  140. XX(L) = MELVA1.VELCHE(KK,JJ)
  141. ENDDO
  142. C On fait l'interpolation au point K de l'element J
  143. CALL IPMUL(XX,NDIM,MLENT1,XVAL)
  144. IF (IERR.NE.0) RETURN
  145. C Puis on range la valeur calculee dans le champ de sortie
  146. MELVA2.VELCHE(K,J)=XVAL
  147. ENDDO
  148. ENDDO
  149. ENDIF
  150.  
  151.  
  152. RETURN
  153. END
  154.  
  155.  
  156.  
  157.  

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