33
34
35
36#include "implicit_f.inc"
37
38
39
40#include "param_c.inc"
41#include "com01_c.inc"
42
43
44
45
46 INTEGER NIR
48 . stbrk,rs(3),rm(3),dpara(7),x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,dwdu,
49 . e1x,e1y,e1z,e2x,e2y,e2z,e3x,e3y,e3z,betax,betay
50
51
52
53
55 . r(3),
56 . x12,x22,x32,x42,y12,y22,y32,y42,z12,z22,z32,z42,
57 . xx,yy,zz,xxx,yyy,zzz,xy,yz,zx,xy2,yz2,zx2,
58 . b1,b2,b3,c1,c2,c3,det,bb1,bb2,bb3,cc1,cc2,cc3,
59 . mloc(3,3),mloc2(3,3),mglob(3,3),pass(3,3),tpass(3,3),
60 . vect_sx,vect_sy,vect_sz,surf,ratio,l12_2,l23_2,l34_2,l41_2
61
62
63 r(1)=rs(1)-rm(1)
64 r(2)=rs(2)-rm(2)
65 r(3)=rs(3)-rm(3)
66
67 x12=x1*x1
68 x22=x2*x2
69 x32=x3*x3
70 x42=x4*x4
71 y12=y1*y1
72 y22=y2*y2
73 y32=y3*y3
74 y42=y4*y4
75 z12=z1*z1
76 z22=z2*z2
77 z32=z3*z3
78 z42=z4*z4
79 xx=x12 + x22 + x32 + x42
80 yy=y12 + y22 + y32 + y42
81 zz=z12 + z22 + z32 + z42
82 xy=x1*y1 + x2*y2 + x3*y3 + x4*y4
83 yz=y1*z1 + y2*z2 + y3*z3 + y4*z4
84 zx=z1*x1 + z2*x2 + z3*x3 + z4*x4
85 zzz=xx+yy
86 xxx=yy+zz
87 yyy=zz+xx
88 xy2=xy*xy
89 yz2=yz*yz
90 zx2=zx*zx
91 det= xxx*yyy*zzz - xxx*yz2 - yyy*zx2 - zzz*xy2
92 . - two*xy*yz*zx
93
94
95
96 IF (nir == 4) THEN
97 vect_sx = y1*z2+y2*z3+y3*z4+y4*z1-z1*y2-z2*y3-z3*y4-z4*y1
98 vect_sy = z1*x2+z2*x3+z3*x4+z4*x1-x1*z2-x2*z3-x3*z4-x4*z1
99 vect_sz = x1*y2+x2*y3+x3*y4+x4*y1-y1*x2-y2*x3-y3*x4-y4*x1
100 ELSE
101 vect_sx = y1*z2+y2*z3+y3*z1-z1*y2-z2*y3-z3*y1
102 vect_sy = z1*x2+z2*x3+z3*x1-x1*z2-x2*z3-x3*z1
103 vect_sz = x1*y2+x2*y3+x3*y1-y1*x2-y2*x3-y3*x1
104 ENDIF
105
106 surf = sqrt(vect_sx*vect_sx+vect_sy*vect_sy+vect_sz*vect_sz)
107
108 l12_2 = (x2-x1)**2+(y2-y1)**2+(z2-z1)**2
109 l23_2 = (x3-x2)**2+(y3-y2)**2+(z3-z2)**2
110 l34_2 = (x4-x3)**2+(y4-y3)**2+(z4-z3)**2
111 l41_2 = (x1-x4)**2+(y1-y4)**2+(z1-z4)**2
112
113
114
115 ratio = surf /
max(l12_2,l23_2,l34_2,l41_2)
116
117
118
119 IF (ratio > 5e-3) THEN
120
121 det = one/det
122 b1=zzz*yyy-yz2
123 b2=xxx*zzz-zx2
124 b3=yyy*xxx-xy2
125 c3=zzz*xy+yz*zx
126 c1=xxx*yz+zx*xy
127 c2=yyy*zx+xy*yz
128 betax = one
129 betay = one
130 ELSEIF (yy < xx) THEN
131
132 det = one
133 b1=zero
134 b2=one/xx
135 b3=one/xx
136 c3=zero
137 c1=zero
138 c2=zero
139 betax = zero
140 betay = one
141 ELSE
142
143 det = one
144 b1=one/yy
145 b2=zero
146 b3=one/yy
147 c3=zero
148 c1=zero
149 c2=zero
150 betax = one
151 betay = zero
152 ENDIF
153
154 bb1=b1*b1
155 bb2=b2*b2
156 bb3=b3*b3
157 cc1=c1*c1
158 cc2=c2*c2
159 cc3=c3*c3
160
161 dwdu=det*sqrt(
max(bb1*(yy+zz)+cc3*(zz+xx)+cc2*(xx+yy),
162 . bb2*(zz+xx)+cc1*(xx+yy)+cc3*(yy+zz),
163 . bb3*(xx+yy)+cc2*(yy+zz)+cc1*(zz+xx)))
164
165 stbrk=sqrt((r(1)*r(1)+r(2)*r(2)+r(3)*r(3)))*dwdu
166
167
168
169 mloc(1,1)=b1
170 mloc(1,2)=c3
171 mloc(1,3)=c2
172 mloc(2,1)=c3
173 mloc(2,2)=b2
174 mloc(2,3)=c1
175 mloc(3,1)=c2
176 mloc(3,2)=c1
177 mloc(3,3)=b3
178
179 pass(1,1) = e1x
180 pass(1,2) = e2x
181 pass(1,3) = e3x
182 pass(2,1) = e1y
183 pass(2,2) = e2y
184 pass(2,3) = e3y
185 pass(3,1) = e1z
186 pass(3,2) = e2z
187 pass(3,3) = e3z
188
189 tpass(1,1) = e1x
190 tpass(1,2) = e1y
191 tpass(1,3) = e1z
192 tpass(2,1) = e2x
193 tpass(2,2) = e2y
194 tpass(2,3) = e2z
195 tpass(3,1) = e3x
196 tpass(3,2) = e3y
197 tpass(3,3) = e3z
198
199 mloc2(1:3,1:3) = matmul(mloc(1:3,1:3),tpass(1:3,1:3))
200 mglob(1:3,1:3) = matmul(pass(1:3,1:3),mloc2(1:3,1:3))
201
202 dpara(1)=det
203 dpara(2)=mglob(1,1)
204 dpara(3)=mglob(2,2)
205 dpara(4)=mglob(3,3)
206 dpara(5)=mglob(2,3)
207 dpara(6)=mglob(1,3)
208 dpara(7)=mglob(1,2)
209
210
211 RETURN