File: failrs.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 (156 lines) | stat: -rw-r--r-- 3,717 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
      SUBROUTINE FAILRS (FTHR,ULTSTN,STRESL,FINDEX)
C
C     THIS ROUTINE COMPUTES THE FAILURE INDEX OF A LAYER IN A LAMINATED
C     COMPOSITE ELEMENT USING ONE OF THE FOLLOWING FIVE FAILURE THEORIES
C     CURRENTLY AVAILABLE
C        1.   HILL
C        2.   HOFFMAN
C        3.   TSAI-WU
C        4.   MAX STRESS
C        5.   MAX STRAIN
C
C
C     DEFINITIONS
C
C     XT = ULTIMATE UNIAXIAL TENSILE STRENGTH IN THE FIBER DIRECTION
C     XC = ULTIMATE UNIAXIAL COMPRESSIVE STRENGTH IN THE FIBER DIRECTION
C     YT = ULTIMATE UNIAXIAL TENSILE STRENGTH PERPENDICULAR TO THE FIBER
C          DIRECTION
C     YC = ULTIMATE UNIAXIAL COMPRESSIVE STRENGTH PERPENDICULAR TO THE
C          FIBER DIRECTION
C     S  = ULTIMATE PLANAR SHEAR STRENGTH UNDER PURE SHEAR LOADING
C
C     SIMILARILY FOR THE ULTIMATE STRAINS
C
C
      INTEGER FTHR
      REAL    ULTSTN(6),STRESL(3)
C
C
C     CHECK FOR ZERO STRENGTH VALUES
C
      DO 50 I = 1,5
   50 IF (ULTSTN(I) .EQ. 0.0) GO TO 700
C
C     ULTIMATE STRENGTH VALUES
C
      XT   = ULTSTN(1)
      XC   = ULTSTN(2)
      YT   = ULTSTN(3)
      YC   = ULTSTN(4)
      S    = ULTSTN(5)
      F12  = ULTSTN(6)
C
C     LAYER STRESSES
C
      SIG1 = STRESL(1)
      SIG2 = STRESL(2)
      TAU12= STRESL(3)
C
C     LAYER STRAINS
C
      EPS1 = STRESL(1)
      EPS2 = STRESL(2)
      GAMA = STRESL(3)
C
      GO TO (100,200,300,400,500), FTHR
C
C     HILL FAILURE THEORY
C     -------------------
C
  100 X = XT
      IF (SIG1 .LT. 0.0) X = XC
C
      Y = YT
      IF (SIG2 .LT. 0.0) Y = YC
C
      XX = XT
      IF (SIG1*SIG2 .LT. 0.0) XX = XC
C
      FINDEX = (SIG1*SIG1)/(X*X)
      FINDEX = FINDEX + (SIG2 * SIG2)/(Y * Y)
      FINDEX = FINDEX - (SIG1 * SIG2)/(XX*XX)
      FINDEX = FINDEX + (TAU12*TAU12)/(S * S)
      GO TO 600
C
C
C     HOFFMAN FAILURE THEORY
C     ----------------------
C
  200 FINDEX = (1.0/XT-1.0/XC)*SIG1
      FINDEX = FINDEX + (1.0/YT-1.0/YC)*SIG2
      FINDEX = FINDEX + (SIG1 * SIG1)/(XT*XC)
      FINDEX = FINDEX + (SIG2 * SIG2)/(YT*YC)
      FINDEX = FINDEX + (TAU12*TAU12)/(S * S)
      FINDEX = FINDEX + (SIG1 * SIG2)/(XT*XC)
      GO TO 600
C
C
C     TSAI-WU FAILURE THEORY
C     ----------------------
C
C     CHECK STABILITY CRITERIA FOR THE INTERACTION TERM F12
C
  300 IF (F12 .EQ. 0.0) GO TO 350
C
      CRIT = (1.0/(XT*XC))*(1.0/(YT*YC)) - F12*F12
      IF (CRIT .GT. 0.0) GO TO 350
C
C     IF STABILITY CRITERIA IS VIOLATED THEN SET THE F12 THE INTERACTION
C     TERM TO ZERO
C
      F12 = 0.0
C
C
  350 FINDEX = (1.0/XT-1.0/XC)*SIG1
      FINDEX = FINDEX + (1.0/YT-1.0/YC)*SIG2
      FINDEX = FINDEX + (SIG1 * SIG1)/(XT*XC)
      FINDEX = FINDEX + (SIG2 * SIG2)/(YT*YC)
      FINDEX = FINDEX + (TAU12*TAU12)/(S * S)
      IF (F12 .EQ. 0.0) GO TO 600
      FINDEX = FINDEX + 2.0*F12*SIG1*SIG2
      GO TO 600
C
C
C     MAX STRESS FAILURE THEORY
C     -------------------------
C
  400 FI1 = SIG1/XT
      IF (SIG1 .LT. 0.0) FI1 = ABS(SIG1/XC)
C
      FI2 = SIG2/YT
      IF (SIG2 .LT. 0.0) FI2 = ABS(SIG2/YC)
C
      FI12 = ABS(TAU12)/S
C
      FINDEX = FI1
      IF (FI2  .GT. FINDEX) FINDEX = FI2
      IF (FI12 .GT. FINDEX) FINDEX = FI12
      GO TO 600
C
C
C     MAX STRAIN FAILURE THEORY
C     -------------------------
C
  500 FI1 = EPS1/XT
      IF (EPS1 .LT. 0.0) FI1 = ABS(EPS1/XC)
C
      FI2 = EPS2/YT
      IF (EPS2 .LT. 0.0) FI2 = ABS(EPS2/YC)
C
      FI12 = ABS(GAMA)/S
C
      FINDEX = FI1
      IF (FI2  .GT. FINDEX) FINDEX = FI2
      IF (FI12 .GT. FINDEX) FINDEX = FI12
C
  600 CONTINUE
C
      RETURN
C
C
C     NON-FATAL ERROR
C
  700 FINDEX = 0.0
      RETURN
      END