58#include "implicit_f.inc"
71 INTEGER,
INTENT(in) :: ITASK,NIN
72 INTEGER,
DIMENSION(NPARI,NINTER),
INTENT(in) :: IPARI
73 TYPE(intbuf_struct_),
DIMENSION(NINTER) :: INTBUF_TAB
74 my_real,
DIMENSION(3,NUMNOD),
INTENT(in) :: x
79 INTEGER :: FIRST, LAST
82 INTEGER :: NSN,NMN,NRTM,NRTM_T
83 INTEGER :: ADRESS,ESHIFT
87 my_real :: curv_max_local,curv_max_max,tzinf
90 my_real,
DIMENSION(3) :: max_limit,min_limit
91 my_real,
DIMENSION(3) :: max_limit_main,min_limit_main
92 my_real,
dimension(3) :: max_limit_s,min_limit_s
93 my_real,
DIMENSION(3) :: sigma,sigma2
95 inter_struct(nin)%CURV_MAX_MAX = zero
96 inter_struct(nin)%NMN_G = 0
98 max_limit(1:3) = -ep30
102 inter_struct(nin)%BOX_LIMIT_MAIN(1:3) = -ep30
103 inter_struct(nin)%BOX_LIMIT_MAIN(4:6) = ep30
104 inter_struct(nin)%BOX_LIMIT_MAIN(7:12) = zero
106 IF(.NOT.
ALLOCATED(inter_struct(nin)%CURV_MAX))
ALLOCATE(inter_struct(nin)%CURV_MAX(nrtm))
115 first = 1+itask*nmn/nthread
116 last = (itask+1)*nmn/nthread
120 nod = intbuf_tab(nin)%MSR(i)
123 max_limit(j) =
max(max_limit(j),x(j,nod))
124 min_limit(j) =
min(min_limit(j),x(j,nod))
125 sigma(j) = sigma(j) + x(j,nod)
126 sigma2(j) = sigma2(j) + x(j,nod)**2
132 IF(nsn+nmn < numnod+numfakenodigeo)
THEN
137 intbuf_tab(nin)%XSAV(1+shift)=x(1,nod)
138 intbuf_tab(nin)%XSAV(2+shift)=x(2,nod)
139 intbuf_tab(nin)%XSAV(3+shift)=x(3,nod)
143 max_limit_main(1:3) = max_limit(1:3)
144 min_limit_main(1:3) = min_limit(1:3)
149 min_limit_s(1:3) = ep30
150 first = 1+itask*nsn/nthread
151 last = (itask+1)*nsn/nthread
153 nod = intbuf_tab(nin)%nsv(i)
154 if(intbuf_tab(nin)%stfns(i)/=0)
then
155 max_limit_s(1) =
max(max_limit_s(1),x(1,nod))
156 max_limit_s(2) =
max(max_limit_s(2),x(2,nod))
157 max_limit_s(3) =
max(max_limit_s(3),x(3,nod
159 min_limit_s(1) =
min(min_limit_s(1),x(1,nod))
160 min_limit_s(2) =
min(min_limit_s(2),x(2,nod))
161 min_limit_s(3) =
min(min_limit_s(3),x(3,nod))
166 first = 1+itask*nsn/nthread
167 last = (itask+1)*nsn/nthread
169 nod = intbuf_tab(nin)%NSV(i)
170 IF(nsn+nmn < numnod+numfakenodigeo)
THEN
175 IF( nod>0.AND.nod<=(numnod+numfakenodigeo) )
THEN
176 intbuf_tab(nin)%XSAV(1+shift)=x(1,nod)
177 intbuf_tab(nin)%XSAV(2+shift)=x(2,nod)
178 intbuf_tab(nin)%XSAV(3+shift)=x(3,nod)
182 icurv = ipari(39,nin)
184 nrtm_t = nrtm/nthread
185 eshift = itask*nrtm_t
186 adress = 1 + itask*(ipari(4,nin)/nthread)
187 IF(itask==nthread-1) nrtm_t= nrtm - adress + 1
188 curv_max_local = zero
190 . intbuf_tab(nin)%IRECTM(1+4*eshift),curv_max_local,
191 . inter_struct(nin)%CURV_MAX(adress),x)
196 inter_struct(nin)%BOX_LIMIT_MAIN(1) =
max(inter_struct(nin)%BOX_LIMIT_MAIN(1),max_limit_main(1))
197 inter_struct(nin)%BOX_LIMIT_MAIN(2) =
max(inter_struct(nin)%BOX_LIMIT_MAIN(2),max_limit_main
198 inter_struct(nin)%BOX_LIMIT_MAIN(3) =
max(inter_struct(nin)%BOX_LIMIT_MAIN(3),max_limit_main(3))
200 inter_struct(nin)%BOX_LIMIT_MAIN(4) =
min(inter_struct(nin)%BOX_LIMIT_MAIN(4),min_limit_main(1))
201 inter_struct(nin)%BOX_LIMIT_MAIN(5) =
min(inter_struct(nin)%BOX_LIMIT_MAIN(5),min_limit_main(2))
202 inter_struct(nin)%BOX_LIMIT_MAIN(6) =
min(inter_struct(nin)%BOX_LIMIT_MAIN(6),min_limit_main(3))
204 inter_struct(nin)%CURV_MAX_MAX =
max(inter_struct(nin)%CURV_MAX_MAX,curv_max_local)
206 inter_struct(nin)%BOX_LIMIT_MAIN(7) = inter_struct(nin)%BOX_LIMIT_MAIN(7)+sigma(1)
207 inter_struct(nin)%BOX_LIMIT_MAIN(8) = inter_struct(nin)%BOX_LIMIT_MAIN(8)+sigma(2)
208 inter_struct(nin)%BOX_LIMIT_MAIN(9) = inter_struct(nin)%BOX_LIMIT_MAIN(9)+sigma(3)
209 inter_struct(nin)%BOX_LIMIT_MAIN(10)= inter_struct(nin)%BOX_LIMIT_MAIN(10)+sigma2(1)
210 inter_struct(nin)%BOX_LIMIT_MAIN(11)= inter_struct(nin)%BOX_LIMIT_MAIN(11)+sigma2(2)
211 inter_struct(nin)%BOX_LIMIT_MAIN(12)= inter_struct(nin)%BOX_LIMIT_MAIN(12)+sigma2(3)
212 inter_struct(nin)%NMN_G = inter_struct(nin)%NMN_G + nmn_l
214 box_limit(1) =
max(box_limit(1),max_limit_main(1),max_limit_s(1))
215 box_limit(2) =
max(box_limit(2),max_limit_main(2),max_limit_s(2))
216 box_limit(3) =
max(box_limit(3),max_limit_main(3),max_limit_s(3))
218 box_limit(4) =
min(box_limit(4),min_limit_main
219 box_limit(5) =
min(box_limit(5),min_limit_main(2),min_limit_s(2))
220 box_limit(6) =
min(box_limit(6),min_limit_main(3),min_limit_s(3))
221#include "lockoff.inc"
226 IF(abs(inter_struct(nin)%BOX_LIMIT_MAIN(6)-inter_struct(nin)%BOX_LIMIT_MAIN(3))>2*ep30.OR.
227 + abs(inter_struct(nin)%BOX_LIMIT_MAIN(5)-inter_struct(nin)%BOX_LIMIT_MAIN(2))>2*ep30.OR.
228 + abs(inter_struct(nin)%BOX_LIMIT_MAIN(4)-inter_struct(nin)%BOX_LIMIT_MAIN(1))>2*ep30)
THEN
229 noint = ipari(15,nin)
230 CALL ancmsg(msgid=87,anmode=aninfo,
231 . i1=noint,c1=
'(I7BUCE)')
235 tzinf = intbuf_tab(nin)%VARIABLES(tzinf_index)
236 curv_max_max = inter_struct(nin)%CURV_MAX_MAX
237 inter_struct(nin)%BOX_LIMIT_MAIN(1)=inter_struct(nin)%BOX_LIMIT_MAIN(1)+tzinf+curv_max_max
238 inter_struct(nin)%BOX_LIMIT_MAIN(2)=inter_struct(nin)%BOX_LIMIT_MAIN(2)+tzinf+curv_max_max
239 inter_struct(nin)%BOX_LIMIT_MAIN(3)=inter_struct(nin)%BOX_LIMIT_MAIN(3)+tzinf+curv_max_max
240 inter_struct(nin)%BOX_LIMIT_MAIN(4)=inter_struct(nin)%BOX_LIMIT_MAIN(4)-tzinf-curv_max_max
241 inter_struct(nin)%BOX_LIMIT_MAIN(5)=inter_struct(nin)%BOX_LIMIT_MAIN(5)-tzinf-curv_max_max
242 inter_struct(nin)%BOX_LIMIT_MAIN(6)=inter_struct(nin)%BOX_LIMIT_MAIN(6)-tzinf-curv_max_max
247 mx=inter_struct(nin)%BOX_LIMIT_MAIN(7)/
max(inter_struct(nin)%NMN_G,1)
248 my=inter_struct(nin)%BOX_LIMIT_MAIN(8)/
max(inter_struct(nin)%NMN_G,1)
249 mz=inter_struct(nin)%BOX_LIMIT_MAIN(9)/
max(inter_struct(nin)%NMN_G,1)
253 dx=sqrt(
max(inter_struct(nin)%BOX_LIMIT_MAIN(10)/
max(inter_struct(nin)%NMN_G,1)-mx**2,zero))
254 dy=sqrt(
max(inter_struct(nin)%BOX_LIMIT_MAIN(11)/
max(inter_struct(nin
255 dz=sqrt(
max(inter_struct(nin)%BOX_LIMIT_MAIN(12)/
max(inter_struct(nin)%NMN_G,1)-mz**2,zero))
259 inter_struct(nin)%BOX_LIMIT_MAIN(7) =
min(mx+2*dx,inter_struct(nin)%BOX_LIMIT_MAIN(1))
260 inter_struct(nin)%BOX_LIMIT_MAIN(8) =
min(my+2*dy,inter_struct(nin)%BOX_LIMIT_MAIN(2))
261 inter_struct(nin)%BOX_LIMIT_MAIN(9) =
min(mz+2*dz,inter_struct(nin)%BOX_LIMIT_MAIN(3))
262 inter_struct(nin)%BOX_LIMIT_MAIN(10) =
max(mx-2*dx,inter_struct(nin)%BOX_LIMIT_MAIN(4))
263 inter_struct(nin)%BOX_LIMIT_MAIN(11) =
max(my-2*dy,inter_struct(nin)%BOX_LIMIT_MAIN(5))
264 inter_struct(nin)%BOX_LIMIT_MAIN(12) =
max(mz-2*dz,inter_struct(nin)%BOX_LIMIT_MAIN(6))
266 IF(abs(inter_struct(nin)%BOX_LIMIT_MAIN(10)-inter_struct(nin)%BOX_LIMIT_MAIN(7))<em10)
THEN
267 inter_struct(nin)%BOX_LIMIT_MAIN(10)=inter_struct(nin)%BOX_LIMIT_MAIN(4)
268 inter_struct(nin)%BOX_LIMIT_MAIN(7)=inter_struct(nin)%BOX_LIMIT_MAIN(1)
270 IF(abs(inter_struct(nin)%BOX_LIMIT_MAIN(11)-inter_struct(nin)%BOX_LIMIT_MAIN(8))<em10)
THEN
271 inter_struct(nin)%BOX_LIMIT_MAIN(11)=inter_struct(nin)%BOX_LIMIT_MAIN(5)
272 inter_struct(nin)%BOX_LIMIT_MAIN(8)=inter_struct
274 IF(abs(inter_struct(nin)%BOX_LIMIT_MAIN(12)-inter_struct(nin)%BOX_LIMIT_MAIN(9))<em10)
THEN
275 inter_struct(nin)%BOX_LIMIT_MAIN(12)=inter_struct(nin)%BOX_LIMIT_MAIN(6)
276 inter_struct(nin)%BOX_LIMIT_MAIN(9)=inter_struct(nin)%BOX_LIMIT_MAIN(3)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)