43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "mvsiz_p.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER, INTENT(IN) :: NEL
57 INTEGER, INTENT(IN) :: IFORMDT
58 INTEGER MXT(*)
59 double precision
60 . x1(*), x2(*), x3(*), x4(*),
61 . y1(*), y2(*), y3(*), y4(*),
62 . z1(*), z2(*), z3(*), z4(*),voldp(*)
64 . off(*),det(*),deltax(*),
65 . px1(*), px2(*), px3(*), px4(*),
66 . py1(*), py2(*), py3(*), py4(*),
67 . pz1(*), pz2(*), pz3(*), pz4(*),
68 . rx(*), ry(*), rz(*), sx(*), sy(*), sz(*),tx(*), ty(*), tz(*),
69 . pm(npropm,*)
70
71
72
73#include "scr17_c.inc"
74
75
76
77 INTEGER NGL(*), I
78 double precision
79 . x41, y41, z41, x42, y42, z42, x43, y43, z43,b1dp,c1dp,d1dp
81 . b1(mvsiz), b2(mvsiz), b3(mvsiz), b4(mvsiz),
82 . c1(mvsiz), c2(mvsiz), c3(mvsiz), c4(mvsiz),
83 . d1(mvsiz), d2(mvsiz), d3(mvsiz), d4(mvsiz),
84 . d,
85 . pxx, pyy, pzz, pxy, pyz, pxz, gfac, aa, bb, p, ld
86
87
88 DO i=1,nel
89 x43 = x4(i) - x3(i)
90 y43 = y4(i) - y3(i)
91 z43 = z4(i) - z3(i)
92 x41 = x4(i) - x1(i)
93 y41 = y4(i) - y1(i)
94 z41 = z4(i) - z1(i)
95 x42 = x4(i) - x2(i)
96 y42 = y4(i) - y2(i)
97 z42 = z4(i) - z2(i)
98
99 rx(i) = -x41
100 ry(i) = -y41
101 rz(i) = -z41
102 sx(i) = -x42
103 sy(i) = -y42
104 sz(i) = -z42
105
106 tx(i) = -x43
107 ty(i) = -y43
108 tz(i) = -z43
109
110 b1dp = y43*z42 - y42*z43
111 b1(i) = b1dp
112 b2(i) = y41*z43 - y43*z41
113 b3(i) = y42*z41 - y41*z42
114 b4(i) = -(b1(i) + b2(i) + b3(i))
115
116 c1dp = z43*x42 - z42*x43
117 c1(i) = c1dp
118 c2(i) = z41*x43 - z43*x41
119 c3(i) = z42*x41 - z41*x42
120 c4(i) = -(c1(i) + c2(i) + c3(i))
121
122 d1dp = x43*y42 - x42*y43
123 d1(i) = d1dp
124 d2(i) = x41*y43 - x43*y41
125 d3(i) = x42*y41 - x41*y42
126 d4(i) = -(d1(i) + d2(i) + d3(i))
127
128 voldp(i) = (x41*b1dp + y41*c1dp + z41*d1dp)*one_over_6
129 det(i) = voldp(i)
130
131 ENDDO
132
134 1 off, det, ngl, nel)
135
136 DO i=1,nel
137 d = one/det(i)/six
138 px1(i)=-b1(i)*d
139 py1(i)=-c1(i)*d
140 pz1(i)=-d1(i)*d
141 px2(i)=-b2(i)*d
142 py2(i)=-c2(i)*d
143 pz2(i)=-d2(i)*d
144 px3(i)=-b3(i)*d
145 py3(i)=-c3(i)*d
146 pz3(i)=-d3(i)*d
147 px4(i)=-b4(i)*d
148 py4(i)=-c4(i)*d
149 pz4(i)=-d4(i)*d
150 END DO
151
152 IF(idt1sol==0)THEN
153
154 DO i=1,nel
155 d =
max(px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i),
156 . px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i),
157 . px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i),
158 . px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i))
159 deltax(i) = one / sqrt(d)
160 END DO
161
162
163 ELSEIF(iformdt==0)THEN
164 DO i=1,nel
165 d = px1(i)*px1(i)+py1(i)*py1(i)+pz1(i)*pz1(i)
166 . + px2(i)*px2(i)+py2(i)*py2(i)+pz2(i)*pz2(i)
167 . + px3(i)*px3(i)+py3(i)*py3(i)+pz3(i)*pz3(i)
168 . + px4(i)*px4(i)+py4(i)*py4(i)+pz4(i)*pz4(i)
169 deltax(i) = one / sqrt(d)
170 END DO
171
172 ELSEIF(iformdt==1)THEN
173
174 gfac=pm(105,mxt(1))
175 ld =two*sqrt(
max(one-gfac,zero))+one
176 DO i=1,nel
177 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
178 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
179 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
180 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
181 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
182 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
183
184 aa = -(pxx+pyy+pzz)
185 bb = (pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
186 p = bb-third*aa*aa
187 d=two*sqrt(third*
max(-p,zero))-third*aa
188
189 d=ld*d
190
191 deltax(i) = one / sqrt(d)
192 END DO
193
194 ELSEIF(iformdt==2)THEN
195
196 gfac=pm(105,mxt(1))
197 DO i=1,nel
198 pxx=px1(i)*px1(i)+px2(i)*px2(i)+px3(i)*px3(i)+px4(i)*px4(i)
199 pyy=py1(i)*py1(i)+py2(i)*py2(i)+py3(i)*py3(i)+py4(i)*py4(i)
200 pzz=pz1(i)*pz1(i)+pz2(i)*pz2(i)+pz3(i)*pz3(i)+pz4(i)*pz4(i)
201 pxy=px1(i)*py1(i)+px2(i)*py2(i)+px3(i)*py3(i)+px4(i)*py4(i)
202 pxz=px1(i)*pz1(i)+px2(i)*pz2(i)+px3(i)*pz3(i)+px4(i)*pz4(i)
203 pyz=py1(i)*pz1(i)+py2(i)*pz2(i)+py3(i)*pz3(i)+py4(i)*pz4(i)
204
205 aa = -(pxx+pyy+pzz)
206 bb = gfac*(pxx*pyy+pxx*pzz+pyy*pzz-pxy**2-pxz**2-pyz**2)
207 p = bb-third*aa*aa
208 d = two*sqrt(third*
max(-p,zero))-third*aa
209
210 deltax(i) = one / sqrt(d)
211 END DO
212
213 END IF
214
215 RETURN
216
subroutine schkjab3(off, det, ngl, nel)