File: rand3.f

package info (click to toggle)
nastran 0.1.95-2
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm, bullseye, sid
  • size: 122,540 kB
  • sloc: fortran: 284,409; sh: 771; makefile: 324
file content (61 lines) | stat: -rw-r--r-- 1,656 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
      SUBROUTINE RAND3 (F,S,Q,N)
C
C     COMPUTES  MEAN RESPONSE  Q
C
      INTEGER         CHECK   ,NAME(2)
      REAL            Q(2)    ,F(1)     ,S(1)
      COMMON /CONDAS/ PHI     ,TWOPI    ,RADEG    ,DEGRA    ,
     1                S4PISQ
      DATA    NAME  / 4HRAND  ,4H3      /
C
C     F IS ARRAY OF FREQUENCIES
C     S IS ARRAY OF POWER SPECTRAL DENSITY FUNCTIONS
C     Q IS MEAN RESPONSE
C     N IS NUMBER OF FREQUENCIES
C
      SUM1 = 0.0
      NN   = N - 1
      SUM  = 0.0
      DO 10 I = 1,NN
      DF   = F(I+1) - F(I)
      SUM  = SUM + (S(I)+S(I+1))*DF
      FI   = F(I   )*F(I  )
      FI1  = F(I+1 )*F(I+1)
      FII1 = 2.*F(I)*F(I+1)
      ALP  = (3.*FI+FII1+FI1)/6.
      BTA  = (FI+FII1+3.*FI1)/6.
      SUM1 = SUM1 + (ALP*S(I)+BTA*S(I+1))*DF
   10 CONTINUE
      SUM  = SQRT(SUM*0.5)
      SUM1 = SQRT(SUM1*.5)
      Q(1) = SUM
      Q(2) = 0.0
      Q1   = Q(1)
      IF (Q1 .NE. 0.0) Q(2) = SUM1/Q1
      CHECK= 123456789
      RETURN
C
C     AUTOCORRALATION FUNCTION
C
      ENTRY RAND4 (F,S,TAU,R,N)
C     =========================
C
C     COMPUTES  AUTOCORRALATION FUNCTION R  AT TIME TAU
C     WHERE F,S AS ABOVE. IF TAU = 0.0  R = Q*Q
C
      IF (CHECK .NE. 123456789) CALL MESAGE (-37,0,NAME)
      IF (TAU .EQ. 0.0) GO TO 30
      NN  = N - 1
      A   = 2.0*PHI*TAU
      B   = 1.0/A
      SUM = 0.0
      DO 20 I = 1,NN
      SUM = SUM + B*(S(I+1)-S(I))/(F(I+1)-F(I))*(COS(A*F(I+1))
     1          - COS(A*F(I))) + S(I+1)*SIN(A*F(I+1))-S(I)*SIN(A*F(I))
   20 CONTINUE
      SUM = SUM*B
      R   = SUM
      GO TO 40
   30 R   = Q1*Q1
   40 RETURN
      END