Télécharger raflre.eso

Retour à la liste

Numérotation des lignes :

raflre
  1. C RAFLRE SOURCE PASCAL 20/06/08 21:15:10 10623
  2. SUBROUTINE RAFLRE(ILRE1,KR1,XR1,ICAS,ILRE2)
  3. C----------------------------------------------------------------------C
  4. C Sous-programme de raffinement d'un LISTREEL (Operateur RAFF) C
  5. C----------------------------------------------------------------------C
  6. C
  7. C Syntaxe : LRE2 = RAFF LRE1 | ENT1 ;
  8. C | FLOT1 ;
  9. C
  10. C Entrees :
  11. C - ILRE1 : pointeur sur LISTREEL
  12. C - KR1 : ENTIER, nb de coupes de chaque intervalles
  13. C - XR1 : FLOTTANT, taille cible des intervalles
  14. C - ICAS : ICAS = 1 : syntaxe avec un entier
  15. C ICAS = 2 : syntaxe avec un flottant
  16. C
  17. C Sortie :
  18. C - ILRE2 : pointeur sur LISTREEL resultat
  19. C
  20. C----------------------------------------------------------------------C
  21. IMPLICIT REAL*8(A-H,O-Z)
  22. IMPLICIT INTEGER(I-N)
  23. C
  24. -INC SMLREEL
  25. -INC CCREEL
  26. -INC PPARAM
  27. -INC CCOPTIO
  28. C
  29. MLREEL = ILRE1
  30. SEGACT,MLREEL
  31. NL1 = PROG(/1)
  32. C
  33. C---- CAS OU LE LISTREEL EST VIDE OU N'A QU'UNE SEULE VALEUR
  34. C => on le renvoie en sortie
  35. IF (NL1.LE.1) THEN
  36. ILRE2 = ILRE1
  37. RETURN
  38. ENDIF
  39.  
  40. C---- ANALYSE DES ARGUMENTS si donnee d'un ENTIER :
  41. IF (ICAS.EQ.1) THEN
  42. C
  43. C Si LE NOMBRE DE COUPES EST EGAL A 1 OU -1
  44. C => on renvoie le LISTREEL en entree (identite)
  45. IF (ABS(KR1).EQ.1) THEN
  46. ILRE2 = ILRE1
  47. RETURN
  48. ENDIF
  49. C
  50. C Si LE NOMBRE DE COUPES EST NUL => erreur
  51. IF (KR1.EQ.0) THEN
  52. INTERR(1) = KR1
  53. CALL ERREUR(36)
  54. RETURN
  55. ENDIF
  56.  
  57. C---- Cas donnee d'un FLOTTANT
  58. ELSEIF (ICAS.EQ.2) THEN
  59. KR1 = 1
  60. ELSE
  61. CALL ERREUR(5)
  62. RETURN
  63. ENDIF
  64. C
  65. C---- CAS GENERAL
  66. C Initialisation du LISTREEL resultat
  67. JG = ABS(KR1)*(NL1-1)+1
  68. JG = 5*JG
  69. SEGINI,MLREE1
  70. ILRE2 = MLREE1
  71. C
  72. C Sous-decoupage des intervalles
  73. XKR1 = REAL(KR1)
  74. VAL1 = MLREEL.PROG(1)
  75. DVI1 = 0.D0
  76. ICP1 = 1
  77. MLREE1.PROG(ICP1) = VAL1
  78. DO 20 I=2,NL1
  79. VAL2 = MLREEL.PROG(I)
  80. DVI2 = VAL2 - VAL1
  81. C IF (I.EQ.2) DVI1 = DVI2
  82. VALM = MAX(VAL1,VAL2)
  83. TOL1 = MAX(XZPREC*VALM,XPETIT)
  84. IF (ABS(DVI2).GT.TOL1) THEN
  85. C write(6,*) 'Cas DVI2 non nul'
  86. IF (ICAS.EQ.2) THEN
  87. IF (ABS(XR1).LT.TOL1) THEN
  88. REAERR(1) = XR1
  89. CALL ERREUR(1009)
  90. RETURN
  91. ELSE
  92. XKR1 = DVI2/XR1
  93. KR1 = INT(XKR1+0.5D0)
  94. KR1 = MAX(1,KR1)
  95. ENDIF
  96. ENDIF
  97. DEN2 = 1.D0 / ABS(XKR1)
  98. IF(ABS(DVI1).GT.TOL1.AND.ICAS.EQ.1)THEN
  99. DEN1 = ABS(DVI1 / (XKR1 * DVI2))
  100. ELSE
  101. DEN1 = DEN2
  102. ENDIF
  103. C Si FLOT1 donne, alors KR1 peut valoir 1
  104. IF (KR1.GT.1) THEN
  105. C Appel a decoup
  106. C write(6,*) 'DEN1, DEN2',DEN1,DEN2
  107. KR2 = KR1
  108. CALL DECOUP(KR2,DEN1,DEN2,A1,NBE,DENI,DECA,DVI2)
  109. C write(6,*) 'NBE,A1,DENI = ',NBE,A1,DENI
  110. XVA1 = A1*DENI
  111. XVA1 = XVA1 + VAL1
  112. ICP1 = ICP1 + 1
  113. IF(ICP1 .GT. JG)THEN
  114. JG = ICP1*2 + 20
  115. SEGADJ,MLREE1
  116. ENDIF
  117. MLREE1.PROG(ICP1) = XVA1
  118. XXVA = XVA1
  119. DO 21 J=1,NBE-2
  120. XXVA = A1*(XXVA - VAL1) + XVA1
  121. ICP1 = ICP1 + 1
  122. IF(ICP1 .GT. JG)THEN
  123. JG = ICP1*2 + 20
  124. SEGADJ,MLREE1
  125. ENDIF
  126. MLREE1.PROG(ICP1) = XXVA
  127. 21 CONTINUE
  128. ENDIF
  129. ICP1 = ICP1 + 1
  130. IF(ICP1 .GT. JG)THEN
  131. JG = ICP1*2 + 20
  132. SEGADJ,MLREE1
  133. ENDIF
  134. MLREE1.PROG(ICP1) = VAL2
  135. ELSE
  136. C write(6,*) 'Cas DVI2 nul'
  137. IF (ICAS.EQ.2) KR1 = 1
  138. DO 22 J=1,ABS(KR1)
  139. ICP1 = ICP1 + 1
  140. IF(ICP1 .GT. JG)THEN
  141. JG = ICP1*2 + 20
  142. SEGADJ,MLREE1
  143. ENDIF
  144. MLREE1.PROG(ICP1) = MLREE1.PROG(ICP1-1)
  145. 22 CONTINUE
  146. ENDIF
  147. DVI1 = DVI2
  148. VAL1 = VAL2
  149. 20 CONTINUE
  150. JG = ICP1
  151. SEGADJ,MLREE1
  152.  
  153. SEGACT,MLREE1*NOMOD
  154. C
  155. END
  156.  
  157.  
  158.  
  159.  

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