42
43
44
45 USE spmd_mod, ONLY : spmd_barrier
46 USE timer_mod
48
49
50
51#include "implicit_f.inc"
52#include "comlock.inc"
53
54
55
56#include "com01_c.inc"
57#include "sphcom.inc"
58#include "task_c.inc"
59#include "timeri_c.inc"
60
61
62
63 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
64 INTEGER (NISP,*), WSP2SORT(*),NSP2SORTF,NSP2SORTL,ITASK,NMN
65 my_real x(3,*),spbuf(nspbuf,*), bminma(12), dmax, dbuc
66
67
68
69 INTEGER N, J, NS,LOC_PROC
70 my_real xmax,
ymax,zmax,xmin,ymin,zmin,dbucl,mx,my,mz,dx,dy,dz,sx,sy,sz,sx2,sy2,sz2
71
72
73 xmin=ep30
74 xmax=-ep30
75 ymin=ep30
77 zmin=ep30
78 zmax=-ep30
79 sx=zero
80 sy=zero
81 sz=zero
82 sx2=zero
83 sy2=zero
84 sz2=zero
85
86
87
88
89 dbucl=zero
90 DO ns=nsp2sortf,nsp2sortl
91 n=wsp2sort(ns)
92 dbucl=
max(dbucl,spbuf(1,n))
93
94 j=kxsp(3,n)
95 xmin=
min(xmin,x(1,j))
96 ymin=
min(ymin,x(2,j))
97 zmin=
min(zmin,x(3,j))
98 xmax=
max(xmax,x(1,j))
100 zmax=
max(zmax,x(3,j))
101 sx=sx+x(1,j)
102 sy=sy+x(2,j)
103 sz=sz+x(3,j)
104 sx2=sx2+x(1,j)**2
105 sy2=sy2+x(2,j)**2
106 sz2=sz2+x(3,j)**2
107 END DO
108
109 IF(itask == 0)THEN
110 bminma(7:12)=0
111 bminma(1)=-ep30
112 bminma(2)=-ep30
113 bminma(3)=-ep30
114 bminma(4)=ep30
115 bminma(5)=ep30
116 bminma(6)=ep30
117 dbuc = zero
118 ENDIF
119
121
122#include "lockon.inc"
123 bminma(1) =
max(bminma(1),xmax)
124 bminma(2) =
max(bminma(2),
ymax)
125 bminma(3) =
max(bminma(3),zmax)
126 bminma(4) =
min(bminma(4),xmin)
127 bminma(5) =
min(bminma(5),ymin)
128 bminma(6) =
min(bminma(6),zmin)
129 dbuc =
max(dbuc,dbucl)
130 dmax = dbuc
131 bminma(7) = bminma(7)+sx
132 bminma(8) = bminma(8)+sy
133 bminma(9) = bminma(9)+sz
134 bminma(10)= bminma(10)+sx2
135 bminma(11)= bminma(11)+sy2
136 bminma(12)= bminma(12)+sz2
137#include "lockoff.inc"
138
140
141
142 dbuc=dbuc*sqrt(one +spatrue)*onep0001
143 bminma(1) = bminma(1)+dbuc
144 bminma(2) = bminma(2)+dbuc
145 bminma(3) = bminma(3)+dbuc
146 bminma(4) = bminma(4)-dbuc
147 bminma(5) = bminma(5)-dbuc
148 bminma(6) = bminma(6)-dbuc
149
150
151
152 mx=bminma(7)/
max(nmn,1)
153 my=bminma(8)/
max(nmn,1)
154 mz=bminma(9)/
max(nmn,1)
155
156
157 dx=sqrt(bminma(10)/
max(nmn,1)-mx**2)
158 dy=sqrt(bminma(11)/
max(nmn,1)-my**2)
159 dz=sqrt(bminma(12)/
max(nmn,1)-mz**2)
160
161
162
163 bminma(7) =
min(mx+2*dx,bminma(1))
164 bminma(8) =
min(my+2*dy,bminma(2))
165 bminma(9) =
min(mz+2*dz,bminma(3))
166 bminma(10)=
max(mx-2*dx,bminma(4))
167 bminma(11)=
max(my-2*dy,bminma(5))
168 bminma(12)=
max(mz-2*dz,bminma(6))
169
170
171 IF(bminma(10)==bminma(7))THEN
172 bminma(10)=bminma(4)
173 bminma(7)=bminma(1)
174 END IF
175 IF(bminma(11)==bminma(8))THEN
176 bminma(11)=bminma(5)
177 bminma(8)=bminma(2)
178 END IF
179 IF(bminma(12)==bminma(9))THEN
180 bminma(12)=bminma(6)
181 bminma(9)=bminma(3)
182 END IF
183
184
185
186 IF(nspmd>1) THEN
187
188
189
190 IF(itask==0) THEN
191 loc_proc = ispmd+1
193 ENDIF
194
196
198 2 nsp2sortf,nsp2sortl)
199
201
202 IF(itask==0)THEN
203
204 IF(imonm == 2)THEN
206 CALL spmd_barrier()
208 END IF
210
211
214
216 ENDIF
217
218 END IF
219
221
222 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, dimension(0:lrvoxel, 0:lrvoxel) crvoxel
subroutine spmd_all_dmax(v, len)
subroutine spmd_sphvox0(kxsp, spbuf, wsp2sort, bminmal, x, nsp2sortf, nsp2sortl)
subroutine spmd_sphvox(kxsp, spbuf, wsp2sort, bminmal, x)
subroutine startime(event, itask)
subroutine stoptime(event, itask)