Télécharger rainflow.eso

Retour à la liste

Numérotation des lignes :

rainflow
  1. C RAINFLOW SOURCE BP208322 23/03/10 19:39:26 11626
  2.  
  3. SUBROUTINE RAINFLOW
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8(A-H,O-Z)
  6. C
  7. C=======================================================================
  8. C
  9. C EFFECTUE LA DECOMPOSITION RAINFLOW D'UN SIGNAL
  10. C DE CONTRAINTE DONNE PAR UNE LISTREEL.
  11. C LE SIGNAL DE CONTRAINTE EN ENTREE DOIT ETRE AU PREALABLE SIMPLIFIE
  12. C A LA SUCCESSION DE SES MAXIMA ET MINIMA.
  13. C LE RESULTAT EST UNE LISTREEL DONNANT L'AMPLITUDE
  14. C DES CYCLES DE CONTRAINTE ET UNE LISTREEL DONNANT LE RESIDU, DEFINI
  15. C COMME LES EXTREMA N'APPARTENANT A AUCUN CYCLE DE CONTRAINTE IDENTIFIE.
  16. C
  17. C SYNTAXE : LAMPLI LRESID = RAIN LSIGNAL ;
  18. C
  19. C LSIGNAL : OBJET DE TYPE LISTREEL CONTENANT LE SIGNAL DE CONTRAINTE
  20. C A TRAITER
  21. C LAMPLI : OBJET DE TYPE LISTREEL RESULTAT CONTENANT L'AMPLITUDE
  22. C DES CYCLES DE CONTRAINTE
  23. c LRESID : OBJET DE TYPE LISTREEL RESULTAT CONTENANT LE RESIDU
  24. C (LES EXTREMA NON INCLUS DANS UN CYCLE DE CONTRAINTE)
  25. C
  26. C=======================================================================
  27. C
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC SMEVOLL
  32. -INC SMLREEL
  33. -INC SMLENTI
  34. -INC CCREEL
  35.  
  36. SEGMENT MLLOGI
  37. LOGICAL PRLO(JG)
  38. ENDSEGMENT
  39. LOGICAL ZS2,ZS3,ZS4
  40.  
  41. C=======================================================================
  42. C PREPARATION OBJETS ENTREE/SORTE
  43. C=======================================================================
  44.  
  45. C LECTURE ENTREE
  46. CALL LIROBJ('LISTREEL',IPREEL,1,IRET)
  47. IF(IERR.NE.0) RETURN
  48. MLREEL=IPREEL
  49. SEGACT MLREEL
  50. L1=PROG(/1)
  51.  
  52. C ERREUR SI LONGUEUR<4
  53. IF(L1.LT.4) THEN
  54. CALL ERREUR (725)
  55. RETURN
  56. ENDIF
  57.  
  58. C PREPARATION SORTIE
  59. JG = L1
  60. SEGINI,MLREE1,MLREE2
  61. IPOR1 = MLREE1
  62. IPOR2 = MLREE2
  63.  
  64. C CREATION LISTE ENTIER (0 SI ACTIF, 1 SI INACTIF)
  65. JG = L1
  66. SEGINI,MLLOGI
  67. IPORL=MLLOGI
  68. DO I = 1,L1
  69. MLLOGI.PRLO(I)=.TRUE.
  70. ENDDO
  71.  
  72. C=======================================================================
  73. C COMPTAGE RAINFLOW
  74. C=======================================================================
  75.  
  76. C INITIALISATION COMPTEURS
  77. INDEX=1
  78. NCYCLE=0
  79.  
  80. C BOUCLE TANT QUE LA FIN N'EST PAS ATTEINTE
  81. DO WHILE ((INDEX+3).LE.L1)
  82.  
  83. C VERIFICATION SI INDEX ACTIF
  84. IF (MLLOGI.PRLO(INDEX)) THEN
  85.  
  86. C LECTURE DU SIGNAL A INDEX
  87. SIGMA1 = PROG(INDEX)
  88.  
  89. C RECUPERATION DES 3 INDICES ACTIFS SUIVANTS
  90. INDEX2 = INDEX
  91. ZS2 = .FALSE.
  92. ZS3 = .FALSE.
  93. ZS4 = .FALSE.
  94.  
  95. C ON PARCOURT LE SIGNAL DEVANT INDEX
  96. 10 CONTINUE
  97.  
  98. DO WHILE (INDEX2.LT.L1)
  99. INDEX2 = INDEX2 + 1
  100.  
  101. C SI ACTIF, ON ECRIT DANS SIGMA2/3/4
  102. IF (MLLOGI.PRLO(INDEX2)) THEN
  103. C EN PREMIER -> SIGMA2
  104. IF (.NOT.ZS2) THEN
  105. ZS2 = .TRUE.
  106. INDSIGMA2 = INDEX2
  107. SIGMA2 = PROG(INDEX2)
  108. GOTO 10
  109. ENDIF
  110. C PUIS -> SIGMA3
  111. IF (.NOT.ZS3) THEN
  112. ZS3 = .TRUE.
  113. INDSIGMA3 = INDEX2
  114. SIGMA3 = PROG(INDEX2)
  115. GOTO 10
  116. ENDIF
  117. C ENFIN -> SIGMA4
  118. IF (.NOT.ZS4) THEN
  119. ZS4=.TRUE.
  120. SIGMA4=PROG(INDEX2)
  121. GOTO 20
  122. ENDIF
  123. ENDIF
  124.  
  125. ENDDO
  126. C FIN RECUPERATION
  127.  
  128. 20 CONTINUE
  129.  
  130. C SI 4 INDICES RECUPERES, EVALUATION CRITERE RAINFLOW
  131. IF (ZS4) THEN
  132. DSIGMA1 = ABS(SIGMA2-SIGMA1)
  133. DSIGMA2 = ABS(SIGMA3-SIGMA2)
  134. DSIGMA3 = ABS(SIGMA4-SIGMA3)
  135.  
  136. IF ((DSIGMA2.LE.DSIGMA1).AND.(DSIGMA2.LE.DSIGMA3)) THEN
  137. C INCREMENTE NB DE CYCLE ET ECRIT AMPLITUDE
  138. NCYCLE = NCYCLE+1
  139. MLREE1.PROG(NCYCLE) = DSIGMA2
  140. C DESACTIVE SIGMA2 ET SIGMA3
  141. MLLOGI.PRLO(INDSIGMA2) = .FALSE.
  142. MLLOGI.PRLO(INDSIGMA3) = .FALSE.
  143. C RECULE DE 2 INDICES ACTIFS
  144. CPT = 0
  145. DO WHILE (INDEX.GT.1)
  146. INDEX = INDEX - 1
  147. IF (MLLOGI.PRLO(INDEX)) CPT = CPT + 1
  148. IF (CPT.EQ.2) GOTO 30
  149. ENDDO
  150.  
  151. 30 CONTINUE
  152.  
  153. ELSE
  154. INDEX = INDEX + 1
  155. ENDIF
  156.  
  157. C SINON -> FIN DE LA BOUCLE
  158. ELSE
  159. GOTO 100
  160. ENDIF
  161.  
  162. C SI INACTIF, ON AVANCE
  163. ELSE
  164. INDEX = INDEX + 1
  165. ENDIF
  166.  
  167. ENDDO
  168.  
  169. 100 CONTINUE
  170.  
  171. C AJUSTEMENT DE LA LONGUEUR DE MLREE1
  172. JG=NCYCLE
  173. SEGADJ MLREE1
  174.  
  175. C CREATION LISTE RESIDU (SIGNAL ENCORE ACTIF)
  176. ICPT = 0
  177. DO I = 1,L1
  178. IF (MLLOGI.PRLO(I)) THEN
  179. ICPT = ICPT + 1
  180. MLREE2.PROG(ICPT) = MLREEL.PROG(I)
  181. ENDIF
  182. ENDDO
  183. JG = ICPT
  184. SEGADJ MLREE2
  185.  
  186. C SORTIE MLREE1 ET MLREE2
  187. CALL ECROBJ('LISTREEL',IPOR2)
  188. CALL ECROBJ('LISTREEL',IPOR1)
  189. SEGDES MLREEL,MLREE1,MLLOGI,MLREE2
  190.  
  191. END
  192.  

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