43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "mvsiz_p.inc"
51
52
53
54 INTEGER, INTENT(IN) ::
55 INTEGER JFT, JLT,NEL
57 . px1(*), px2(*), py1(*), py2(*),
58 . offg(*),sti(*), stir(*)
60 . x2(mvsiz), x3(mvsiz), x4(mvsiz),
area(mvsiz),
61 . y2(mvsiz), y3(mvsiz), y4(mvsiz), z2(mvsiz),
62 . x1g(mvsiz), x2g(mvsiz), x3g(mvsiz), x4g(mvsiz),
63 . y1g(mvsiz), y2g(mvsiz), y3g(mvsiz), y4g(mvsiz),
64 . z1g(mvsiz), z2g(mvsiz), z3g(mvsiz), z4g(mvsiz),
65 . e1x(mvsiz), e1y(mvsiz), e1z(mvsiz),
66 . e2x(mvsiz), e2y(mvsiz), e2z(mvsiz),
67 . e3x(mvsiz), e3y(mvsiz), e3z(mvsiz),
68 . vhx(mvsiz), vhy(mvsiz), a_i(mvsiz),
69 . ux1(mvsiz),ux2(mvsiz),ux3(mvsiz),ux4(mvsiz),
70 . uy1(mvsiz),uy2(mvsiz),uy3(mvsiz),uy4(mvsiz)
71 double precision
72 . smstr(*)
73
74
75
76
77
78
79 INTEGER I,II(6)
80
82 . x21ga, y21ga, z21ga, x31ga, y31ga, z31ga,
83 . x41ga, y41ga, z41ga
84
85 DO i=1,6
86 ii(i) = nel*(i-1)
87 ENDDO
88
89 DO i=jft,jlt
90 sti(i) = zero
91 stir(i)= zero
92 x21ga=x2g(i)-x1g(i)
93 y21ga=y2g(i)-y1g(i)
94 z21ga=z2g(i)-z1g(i)
95 x31ga=x3g(i)-x1g(i)
96 y31ga=y3g(i)-y1g(i)
97 z31ga=z3g(i)-z1g(i)
98 x41ga=x4g(i)-x1g(i)
99 y41ga=y4g(i)-y1g(i)
100 z41ga=z4g(i)-z1g(i)
101
102 x2(i)=e1x(i)*x21ga+e1y(i)*y21ga+e1z(i)*z21ga
103 y2(i)=e2x(i)*x21ga+e2y(i)*y21ga+e2z(i)*z21ga
104 y3(i)=e2x(i)*x31ga+e2y(i)*y31ga+e2z(i)*z31ga
105 x3(i)=e1x(i)*x31ga+e1y(i)*y31ga+e1z(i)*z31ga
106 x4(i)=e1x(i)*x41ga+e1y(i)*y41ga+e1z(i)*z41ga
107 y4(i)=e2x(i)*x41ga+e2y(i)*y41ga+e2z(i)*z41ga
108 z2(i)=e3x(i)*x21ga+e3y(i)*y21ga+e3z(i)*z21ga
109 ENDDO
110
111 IF (ismstr == 11) THEN
112 DO i=jft,jlt
113 IF(abs(offg(i)) == one)offg(i)=sign(two,offg(i))
114 ux1(i) = zero
115 uy1(i) = zero
116 ux2(i) = zero
117 uy2(i) = zero
118 ux3(i) = zero
119 uy3(i) = zero
120 ux4(i) = zero
121 uy4(i) = zero
122 IF(abs(offg(i)) == two)THEN
123 ux2(i) = x2(i)-smstr(ii(1)+i)
124 uy2(i) = y2(i)-smstr(ii(2)+i)
125 ux3(i) = x3(i)-smstr(ii(3)+i)
126 uy3(i) = y3(i)-smstr(ii(4)+i)
127 ux4(i) = x4(i)-smstr(ii(5)+i)
128 uy4(i) = y4(i)-smstr(ii(6)+i)
129 x2(i) = smstr(ii(1)+i)
130 y2(i) = smstr(ii(2)+i)
131 x3(i) = smstr(ii(3)+i)
132 y3(i) = smstr(ii(4)+i)
133 x4(i) = smstr(ii(5)+i)
134 y4(i) = smstr(ii(6)+i)
135 z2(i) = zero
136 ELSE
137 smstr(ii(1)+i)=x2(i)
138 smstr(ii(2)+i)=y2(i)
139 smstr(ii(3)+i)=x3(i)
140 smstr(ii(4)+i)=y3(i)
141 smstr(ii(5)+i)=x4(i)
142 smstr(ii(6)+i)=y4(i)
143 ENDIF
144 ENDDO
145 ELSEIF(ismstr == 1.OR.ismstr == 2)THEN
146 DO i=jft,jlt
147 IF(abs(offg(i)) == two)THEN
148 x2(i)=smstr(ii(1)+i)
149 y2(i)=smstr(ii(2)+i)
150 x3(i)=smstr(ii(3)+i)
151 y3(i)=smstr(ii(4)+i)
152 x4(i)=smstr(ii(5)+i)
153 y4(i)=smstr(ii(6)+i)
154 z2(i)=zero
155 ELSE
156 smstr(ii(1)+i)=x2(i)
157 smstr(ii(2)+i)=y2(i)
158 smstr(ii(3)+i)=x3(i)
159 smstr(ii(4)+i)=y3(i)
160 smstr(ii(5)+i)=x4(i)
161 smstr(ii(6)+i)=y4(i)
162 ENDIF
163 ENDDO
164 IF (ismstr == 1) THEN
165 DO i=jft,jlt
166 IF (offg(i) == one) offg(i)=two
167 ENDDO
168 ENDIF
169 ENDIF
170
171 DO 40 i=jft,jlt
172 px1(i)= half*(y2(i)-y4(i))
173 py1(i)= half*(x4(i)-x2(i))
174 px2(i)= half* y3(i)
175 py2(i)=-half* x3(i)
176 40 CONTINUE
177
178 DO i=jft,jlt
179 area(i)=
max(two*(py2(i)*px1(i)-py1(i)*px2(i)),em20)
180 a_i(i) = one /
area(i)
181 ENDDO
182
183
184
185 DO i=jft,jlt
186 vhx(i)=(-x2(i)+x3(i)-x4(i))/
area(i)
187 vhy(i)=(-y2(i)+y3(i)-y4(i))/
area(i)
188 ENDDO
189
190 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)