45
46
47
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58
59
60
61
62
63 INTEGER IRECT(4,*), NSV(*), CAND_E(*), CAND_N(*),
64 . JLT,IDT, NOINT,IGAP , IGSTI,NIN,ITY,NSN
65 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), (MVSIZ),
66 . NSVG(MVSIZ)
68 . gap, x(3,*), stf(*), stfn(*),gap_s(*),gap_m(*),
69 . ms(*), v(3,*)
71 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
72 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
73 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
74 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
75 . gapv(mvsiz),
76 . vxi(mvsiz), vyi(mvsiz), vzi(mvsiz), msi(mvsiz),
77 . kmin, kmax, gapmax,gapmin
78
79
80
81 INTEGER I ,J ,IL, L, NN, IG,JFT,NI,IX
82
83
84 IF(igap==0)THEN
85 DO i=1,jlt
86 gapv(i)=gap
87 ENDDO
88 ELSE
89 DO i=1,jlt
90 IF(cand_n(i)<=nsn) THEN
91 gapv(i)=gap_s(cand_n(i))+gap_m(cand_e(i))
92 ELSE
93 gapv(i)=
gapfi(nin)%P(cand_n(i)-nsn)+gap_m(cand_e(i))
94 ENDIF
95 gapv(i)=
min(gapv(i),gapmax)
96 gapv(i)=
max(gapmin,gapv(i))
97 ENDDO
98 ENDIF
99
100 IF(ity==7) THEN
101 DO i=1,jlt
102 ni = cand_n(i)
103 l = cand_e(i)
104 IF(ni<=nsn)THEN
105 ig = nsv(ni)
106 nsvg(i) = ig
107
108 xi(i) = x(1,ig)
109 yi(i) = x(2,ig)
110 zi(i) = x(3,ig)
111 vxi(i) = v(1,ig)
112 vyi(i) = v(2,ig)
113 vzi(i) = v(3,ig)
114 msi(i)= ms(ig)
115 ELSE
116 nn = ni - nsn
117 nsvg(i) = -nn
118
119 xi(i) =
xfi(nin)%P(1,nn)
120 yi(i) =
xfi(nin)%P(2,nn)
121 zi(i) =
xfi(nin)%P(3,nn)
122 vxi(i)=
vfi(nin)%P(1,nn)
123 vyi(i)=
vfi(nin)%P(2,nn)
124 vzi(i)=
vfi(nin)%P(3,nn)
125 msi(i)=
msfi(nin)%P(nn)
126
127 END IF
128
129 ix=irect(1,l)
130 ix1(i)=ix
131 x1(i)=x(1,ix)
132 y1(i)=x(2,ix)
133 z1(i)=x(3,ix)
134
135 ix=irect(2,l)
136 ix2(i)=ix
137 x2(i)=x(1,ix)
138 y2(i)=x(2,ix)
139 z2(i)=x(3,ix)
140
141 ix=irect(3,l)
142 ix3(i)=ix
143 x3(i)=x(1,ix)
144 y3(i)=x(2,ix)
145 z3(i)=x(3,ix)
146
147 ix=irect(4,l)
148 ix4(i)=ix
149 x4(i)=x(1,ix)
150 y4(i)=x(2,ix)
151 z4(i)=x(3,ix)
152
153 END DO
154 IF(igsti<=1)THEN
155 DO i=1,jlt
156 l = cand_e(i)
157 ni = cand_n(i)
158 IF(ni<=nsn)THEN
159 stif(i)=stf(l)*abs(stfn(ni))
160 ELSE
161 nn = ni - nsn
162 stif(i)=stf(l)*abs(
stifi(nin)%P(nn))
163 END IF
164 ENDDO
165 ELSEIF(igsti==2)THEN
166 DO i=1,jlt
167 l = cand_e(i)
168 ni = cand_n(i)
169 IF(ni<=nsn)THEN
170 stif(i)=abs(stfn(ni))
171 ELSE
172 nn = ni - nsn
173 stif(i)=abs(
stifi(nin)%P(nn))
174 END IF
175 stif(i)=half*(stf(l)+stif(i))
176 stif(i)=
max(kmin,
min(stif(i),kmax))
177 ENDDO
178 ELSEIF(igsti==3)THEN
179 DO i=1,jlt
180 l = cand_e(i)
181 ni = cand_n(i)
182 IF(ni<=nsn)THEN
183 stif(i)=abs(stfn(ni))
184 ELSE
185 nn = ni - nsn
186 stif(i)=abs(
stifi(nin)%P(nn))
187 END IF
188 stif(i)=
max(stf(l),stif(i))
189 stif(i)=
max(kmin,
min(stif(i),kmax))
190 ENDDO
191 ELSEIF(igsti==4)THEN
192 DO i=1,jlt
193 l = cand_e(i)
194 ni = cand_n(i)
195 IF(ni<=nsn)THEN
196 stif(i)=abs(stfn(ni))
197 ELSE
198 nn = ni - nsn
199 stif(i)=abs(
stifi(nin)%P(nn))
200 END IF
201 stif(i)=
min(stf(l),stif(i))
202 stif(i)=
max(kmin,
min(stif(i),kmax))
203 ENDDO
204 ELSEIF(igsti==5)THEN
205 DO i=1,jlt
206 l = cand_e(i)
207 ni = cand_n(i)
208 IF(ni<=nsn)THEN
209 stif(i)=abs(stfn(ni))
210 ELSE
211 nn = ni - nsn
212 stif(i)=abs(
stifi(nin)%P(nn))
213 END IF
214 stif(i)=stf(l)*stif(i)/
215 .
max(em30,(stf(l)+stif(i)))
216 stif(i)=
max(kmin,
min(stif(i),kmax))
217 ENDDO
218 ENDIF
219 ELSE
220
221 DO i=1,jlt
222 ni = cand_n(i)
223 l = cand_e(i)
224 IF(ni<=nsn)THEN
225 ig = nsv(ni)
226 nsvg(i) = ig
227
228 xi(i) = x(1,ig)
229 yi(i) = x(2,ig)
230 zi(i) = x(3,ig)
231 vxi(i) = v(1,ig)
232 vyi(i) = v(2,ig)
233 vzi(i) = v(3,ig)
234 msi(i)= ms(ig)
235 stif(i)=stf(l)*abs(stfn(ni))
236 ELSE
237 nn = ni - nsn
238 nsvg(i) = -nn
239
240 xi(i) =
xfi(nin)%P(1,nn)
241 yi(i) =
xfi(nin)%P(2,nn)
242 zi(i) =
xfi(nin)%P(3,nn)
243 vxi(i)=
vfi(nin)%P(1,nn)
244 vyi(i)=
vfi(nin)%P(2,nn)
245 vzi(i)=
vfi(nin)%P(3,nn)
246 msi(i)=
msfi(nin)%P(nn)
247 stif(i)=stf(l)*abs(
stifi(nin)%P(nn))
248
249 END IF
250
251 ix=irect(1,l)
252 ix1(i)=ix
253 x1(i)=x(1,ix)
254 y1(i)=x(2,ix)
255 z1(i)=x(3,ix)
256
257 ix=irect(2,l)
258 ix2(i)=ix
259 x2(i)=x(1,ix)
260 y2(i)=x(2,ix)
261 z2(i)=x(3,ix)
262
263 ix=irect(3,l)
264 ix3(i)=ix
265 x3(i)=x(1,ix)
266 y3(i)=x(2,ix)
267 z3(i)=x(3,ix)
268
269 ix=irect(4,l)
270 ix4(i)=ix
271 x4(i)=x(1,ix)
272 y4(i)=x(2,ix)
273 z4(i)=x(3,ix)
274
275 END DO
276 END IF
277
278 RETURN
type(real_pointer2), dimension(:), allocatable vfi
type(real_pointer), dimension(:), allocatable stifi
type(real_pointer), dimension(:), allocatable gapfi
type(real_pointer), dimension(:), allocatable msfi
type(real_pointer2), dimension(:), allocatable xfi