35
36
37
38#include "implicit_f.inc"
39
40
41
42 INTEGER, INTENT(IN) :: I,NODE_FRAM1,NODE_FRAM2,II(6),NEL,ISMSTR,L_SMSTR,ORIENT
43 my_real,
INTENT(IN) :: l0fram1,l0fram2,xl2,yl2,xl3,yl3,xl4,yl4,offset,n_dir2(2)
44 my_real,
INTENT(INOUT) :: gstr(nel,8),dira_x,dira_y
45 DOUBLE PRECISION, INTENT(INOUT) :: SMSTR(L_SMSTR*NEL)
46
47
48
49 INTEGER NODE_FRAM_S,NODE_CORES_DIR1(4)
51 . xll(4),yll(4),dist,area0,ff(2,2),hh(2,2),
52 . ux13,ux24,uy13,uy24,px1b,px2b,py1b,py2b,vec(2),n_dir1(2)
53
54
55
56
57
58
59 IF (orient == 1) THEN
60 node_cores_dir1(1) = 2
61 node_cores_dir1(2) = 1
62 node_cores_dir1(3) = 4
63 node_cores_dir1(4) = 3
64 ELSE
65 node_cores_dir1(1) = 4
66 node_cores_dir1(2) = 3
67 node_cores_dir1(3) = 2
68 node_cores_dir1(4) = 1
69 ENDIF
70
71 xll(1) = zero
72 xll(2) = xl2
73 xll(3) = xl3
74 xll(4) = xl4
75 yll(1) = zero
76 yll(2) = yl2
77 yll(3) = yl3
78 yll(4) = yl4
79
80 node_fram_s = node_cores_dir1(node_fram1)
81 vec(1) = xll(node_fram_s)-xll(node_fram1)
82 vec(2) = yll(node_fram_s)-yll(node_fram1)
83 dist = sqrt(vec(1)**2+vec(2)**2)
84 n_dir1(1) = vec(1)/(dist*two)
85 n_dir1(2) = vec(2)/(dist*two)
86
87 node_fram_s = node_cores_dir1(node_fram2)
88 vec(1) = xll(node_fram_s)-xll(node_fram2)
89 vec(2) = yll(node_fram_s)-yll(node_fram2)
90 dist = sqrt(vec(1)**2+vec(2)**2)
91 n_dir1(1) = n_dir1(1) + vec(1)/(dist*two)
92 n_dir1(2) = n_dir1(2) + vec(2)/(dist*two)
93
94
95
96
97
98
99 node_fram_s = node_cores_dir1(node_fram1)
100 xll(node_fram1) = offset*n_dir1(1)
101 yll(node_fram1) = offset*n_dir1(2)
102 xll(node_fram_s) = xll(node_fram1) + l0fram1*n_dir1(1)
103 yll(node_fram_s) = yll(node_fram1) + l0fram1*n_dir1(2)
104
105
106 node_fram_s = node_cores_dir1(node_fram2)
107 xll(node_fram2) = n_dir2(1)
108 yll(node_fram2) = n_dir2(2)
109 xll(node_fram_s) = xll(node_fram2) + l0fram2*n_dir1(1)
110 yll(node_fram_s) = yll(node_fram2) + l0fram2*n_dir1(2)
111
112
113 xll(2) = xll(2)-xll(1)
114 xll(3) = xll(3)-xll(1)
115 xll(4) = xll(4)-xll(1)
116 yll(2) = yll(2)-yll(1)
117 yll(3) = yll(3)-yll(1)
118 yll(4) = yll(4)-yll(1)
119
120
121 dira_x = n_dir1(1)
122 dira_y = n_dir1(2)
123
124
125
126
127
128 IF (ismstr /= 11) THEN
129
130 ux13=-xl3
131 ux24=xl2-xl4
132 uy13=-yl3
133 uy24=yl2-yl4
134
135 px1b = (yll(2)-yll(4))*half
136 py1b = (xll(4)-xll(2))*half
137 px2b = yll(3)*half
138 py2b = -xll(3)*half
139 area0 = half*((xll(2)-xll(4))*yll(3)-xll(3)*(yll(2)-yll(4)))
140
141
142 ff(1,1)=(px1b*ux13+px2b*ux24)/area0
143 ff(2,2)=(py1b*uy13+py2b*uy24)/area0
144 ff(1,2)=(py1b*ux13+py2b*ux24)/area0
145 ff(2,1)=(px1b*uy13+px2b*uy24)/area0
146
147
149
150 gstr(i,1)=hh(1,1)
151 gstr(i,2)=hh(2,2)
152 gstr(i,3)=hh(1,2)*two
153 gstr(i,4)=zero
154 gstr(i,5)=zero
155 gstr(i,6)=zero
156 gstr(i,7)=zero
157 gstr(i,8)=zero
158
159 ELSE
160
161 smstr(ii(1)+i-1)=xll(2)
162 smstr(ii(2)+i-1)=yll(2)
163 smstr(ii(3)+i-1)=xll(3)
164 smstr(ii(4)+i-1)=yll(3)
165 smstr(ii(5)+i-1)=xll(4)
166 smstr(ii(6)+i-1)=yll(4)
167
168 ENDIF
169
170
171
172
173
174 RETURN
175
subroutine hencky_strain(ff, hh)