31
32
33
34#include "implicit_f.inc"
35
36
37
38#include "mvsiz_p.inc"
39
40
41
42 INTEGER NRTM, NINT, NTY, NOINT,NMN
43 INTEGER IRECTM(4,*), MSR(*)
44
46 . x(3,*), nod_normal(3,*), xm0(3,*)
47
48
49
50 INTEGER I, J, FIRST, LAST, IRM, I1, I2, I3, I4
51 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ)
52
54 . x0(mvsiz), y0(mvsiz), z0(mvsiz),
55 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
56 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
57 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
58 . x01(mvsiz), x02(mvsiz), x03(mvsiz), x04(mvsiz),
59 . y01(mvsiz), y02(mvsiz), y03(mvsiz), y04(mvsiz),
60 . z01(mvsiz), z02(mvsiz), z03(mvsiz), z04(mvsiz),
61 . xn1(mvsiz),yn1(mvsiz),zn1(mvsiz),
62 . xn2(mvsiz),yn2(mvsiz),zn2(mvsiz),
63 . xn3(mvsiz),yn3(mvsiz),zn3(mvsiz),
64 . xn4(mvsiz),yn4(mvsiz),zn4(mvsiz),
65 . aaa
66
67 first=1
69
70 100 CONTINUE
71
72 DO i=1,last-first+1
73 irm=i+first-1
74 ix1(i)=msr(irectm(1,irm))
75 ix2(i)=msr(irectm(2,irm))
76 ix3(i)=msr(irectm(3,irm))
77 ix4(i)=msr(irectm(4,irm))
78 x1(i)=x(1,ix1(i))
79 y1(i)=x(2,ix1(i))
80 z1(i)=x(3,ix1(i))
81 x2(i)=x(1,ix2(i))
82 y2(i)=x(2,ix2(i))
83 z2(i)=x(3,ix2(i))
84 x3(i)=x(1,ix3(i))
85 y3(i)=x(2,ix3(i))
86 z3(i)=x(3,ix3(i))
87 x4(i)=x(1,ix4(i))
88 y4(i)=x(2,ix4(i))
89 z4(i)=x(3,ix4(i))
90 END DO
91
92 DO i=1,last-first+1
93 IF(ix3(i)/=ix4(i))THEN
94 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
95 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
96 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
97 ELSE
98 x0(i) = x3(i)
99 y0(i) = y3(i)
100 z0(i) = z3(i)
101 ENDIF
102 END DO
103
104 DO i=1,last-first+1
105
106 x01(i) = x1(i) - x0(i)
107 y01(i) = y1(i) - y0(i)
108 z01(i) = z1(i) - z0(i)
109
110 x02(i) = x2(i) - x0(i)
111 y02(i) = y2(i) - y0(i)
112 z02(i) = z2(i) - z0(i)
113
114 x03(i) = x3(i) - x0(i)
115 y03(i) = y3(i) - y0(i)
116 z03(i) = z3(i) - z0(i)
117
118 x04(i) = x4(i) - x0(i)
119 y04(i) = y4(i) - y0(i)
120 z04(i) = z4(i) - z0(i)
121
122 ENDDO
123
124 DO i=1,last-first+1
125
126 xn1(i) = y01(i)*z02(i) - z01(i)*y02(i)
127 yn1(i) = z01(i)*x02(i) - x01(i)*z02(i)
128 zn1(i) = x01(i)*y02(i) - y01(i)*x02(i)
129
130 xn2(i) = y02(i)*z03(i) - z02(i)*y03(i)
131 yn2(i) = z02(i)*x03(i) - x02(i)*z03(i)
132 zn2(i) = x02(i)*y03(i) - y02(i)*x03(i)
133
134 xn3(i) = y03(i)*z04(i) - z03(i)*y04(i)
135 yn3(i) = z03(i)*x04(i) - x03(i)*z04(i)
136 zn3(i) = x03(i)*y04(i) - y03(i)*x04(i)
137
138 xn4(i) = y04(i)*z01(i) - z04(i)*y01(i)
139 yn4(i) = z04(i)*x01(i) - x04(i)*z01(i)
140 zn4(i) = x04(i)*y01(i) - y04(i)*x01(i)
141
142 ENDDO
143
144 DO i=1,last-first+1
145
146 aaa=one/
max(em30,sqrt(xn1(i)*xn1(i)+yn1(i)*yn1(i)+zn1(i)*zn1(i)))
147 xn1(i) = xn1(i)*aaa
148 yn1(i) = yn1(i)*aaa
149 zn1(i) = zn1(i)*aaa
150
151 aaa=one/
max(em30,sqrt(xn2(i)*xn2(i)+yn2(i)*yn2(i)+zn2(i)*zn2(i)))
152 xn2(i) = xn2(i)*aaa
153 yn2(i) = yn2(i)*aaa
154 zn2(i) = zn2(i)*aaa
155
156 aaa=one/
max(em30,sqrt(xn3(i)*xn3(i)+yn3(i)*yn3(i)+zn3(i)*zn3(i)))
157 xn3(i) = xn3(i)*aaa
158 yn3(i) = yn3(i)*aaa
159 zn3(i) = zn3(i)*aaa
160
161 aaa=one/
max(em30,sqrt(xn4(i)*xn4(i)+yn4(i)*yn4(i)+zn4(i)*zn4(i)))
162 xn4(i) = xn4(i)*aaa
163 yn4(i) = yn4(i)*aaa
164 zn4(i) = zn4(i)*aaa
165
166 ENDDO
167
168 DO i=1,last-first+1
169
170 irm=i+first-1
171
172 i1=irectm(1,irm)
173 i2=irectm(2,irm)
174 i3=irectm(3,irm)
175 i4=irectm(4,irm)
176
177 IF(i4/=i3)THEN
178
179 nod_normal(1,i1)=nod_normal(1,i1)+xn4(i)+xn1(i)
180 nod_normal(2,i1)=nod_normal(2,i1)+yn4(i)+yn1(i)
181 nod_normal(3,i1)=nod_normal(3,i1)+zn4(i)+zn1(i)
182
183 nod_normal(1,i2)=nod_normal(1,i2)+xn1(i)+xn2(i)
184 nod_normal(2,i2)=nod_normal
185 nod_normal(3,i2)=nod_normal(3,i2)+zn1(i)+zn2(i)
186
187 nod_normal(1,i3)=nod_normal(1,i3)+xn2(i)+xn3(i)
188 nod_normal(2,i3)=nod_normal(2,i3)+yn2(i)+yn3(i)
189 nod_normal(3,i3)=nod_normal(3,i3)+zn2(i)+zn3(i)
190
191 nod_normal(1,i4)=nod_normal(1,i4)+xn3(i)+xn4(i)
192 nod_normal(2,i4)=nod_normal(2,i4)+yn3(i)+yn4(i)
193 nod_normal(3,i4)=nod_normal(3,i4)+zn3(i)+zn4(i)
194
195 ELSE
196
197 nod_normal(1,i1)=nod_normal(1,i1)+xn1(i)
198 nod_normal(2,i1)=nod_normal(2,i1)+yn1(i)
199 nod_normal(3,i1)=nod_normal(3,i1)+zn1(i)
200
201 nod_normal(1,i2)=nod_normal(1,i2)+xn1(i)
202 nod_normal(2,i2)=nod_normal(2,i2)+yn1(i)
203 nod_normal(3,i2)=nod_normal(3,i2)+zn1(i)
204
205 nod_normal(1,i3)=nod_normal(1,i3)+xn1(i)
206 nod_normal(2,i3)=nod_normal(2,i3)+yn1(i)
207 nod_normal(3,i3)=nod_normal(3,i3)+zn1(i)
208
209 END IF
210
211 ENDDO
212
213 IF(last < nrtm)THEN
214 first=last+1
215 last =
min(last+mvsiz,nrtm)
216 GO TO 100
217 END IF
218
219
220
221 DO i=1,nmn
222
223 aaa=one/
max(em30,sqrt(nod_normal(1,i)*nod_normal(1,i)+
224 . nod_normal(2,i)*nod_normal(2,i)+
225 . nod_normal(3,i)*nod_normal(3,i)))
226 nod_normal(1,i)=nod_normal(1,i)*aaa
227 nod_normal(2,i)=nod_normal(2,i)*aaa
228 nod_normal(3,i)=nod_normal(3,i)*aaa
229
230 END DO
231
232
233
234 DO i=1,nmn
235 DO j=1,3
236 xm0(j,i)=x(j,msr(i))
237 END DO
238 END DO
239
240 RETURN
241 1000 FORMAT(2x,'GAP MIN = ',1pg20.13)