35
36
37
38#include "implicit_f.inc"
39#include "comlock.inc"
40
41
42
43#include "com01_c.inc"
44#include "com04_c.inc"
45#include "com08_c.inc"
46#include "task_c.inc"
47
48
49
50 INTEGER NSN,NMN,ITASK,NSV(*),MSR(*),INACTI,CAND_S(*),
51 . NRTM,NRTS,NIN
53 . x(3,*),xsav(3,*),penis(2,*),penim(2,*),
54 . xslv_g(*),xmsr_g(*),stfs(*), v(3,*),
55 . vslv_g(*), vmsr_g(*)
56
57
58
59 INTEGER NSNF,NMNF,NSNL,NMNL,I,J,II,
60 . NRTSF, NRTSL, NRTMF,
62 . xslv(6),xmsr(6), vslv(6), vmsr(6)
63
64
65
66
67
68
69 nrtsf = 1 + itask * nrts / nthread
70 nrtsl = (itask+1) * nrts / nthread
71 IF(inacti==5.OR.inacti==6)THEN
72 nrtmf = 1 + itask * nrtm / nthread
73 nrtml = (itask+1) * nrtm / nthread
74
75
76
77
78 IF(nspmd>1 .AND. tt > zero) THEN
79
80
81
82
83
85
86
87
88
89 END IF
90
91
92 DO i=1,nrts
93 penis(1,i)=
min(penis(1,i),penis(2,i))
94 penis(2,i)=zero
95 ENDDO
96
97
98 DO i=1,nrtm
99 penim(1,i)=
min(penim(1,i),penim(2,i))
100 penim(2,i)=zero
101 ENDDO
102
103 ENDIF
104
105
106
107
108 IF (nspmd==1) THEN
109
110 DO i=1,nrts
111 stfs(i)=
max(stfs(i),zero)
112 ENDDO
113
114 END IF
115
116
117
118 xslv(1) = -ep30
119 xslv(2) = -ep30
120 xslv(3) = -ep30
121 xslv(4) = ep30
122 xslv(5) = ep30
123 xslv(6) = ep30
124 xmsr(1) = -ep30
125 xmsr(2) = -ep30
126 xmsr(3) = -ep30
127 xmsr(4) = ep30
128 xmsr(5) = ep30
129 xmsr(6) = ep30
130
131 vslv(1) = -ep30
132 vslv(2) = -ep30
133 vslv(3) = -ep30
134 vslv(4) = ep30
135 vslv(5) = ep30
136 vslv(6) = ep30
137 vmsr(1) = -ep30
138 vmsr(2) = -ep30
139 vmsr(3) = -ep30
140 vmsr(4) = ep30
141 vmsr(5) = ep30
142 vmsr(6) = ep30
143
144 nsnf = 1 + itask*nsn / nthread
145 nsnl = (itask+1)*nsn / nthread
146 nmnf = 1 + itask*nmn / nthread
147 nmnl = (itask+1)*nmn / nthread
148
149 IF(nsn+nmn<numnod)THEN
150
151
152 DO i=1,nsn
153 j=nsv(i)
154
155 IF(j>0) THEN
156 xslv(1)=
max(xslv(1),x(1,j)-xsav(1,i))
157 xslv(2)=
max(xslv(2),x(2,j)-xsav(2,i))
158 xslv(3)=
max(xslv(3),x(3,j)-xsav(3,i))
159 xslv(4)=
min(xslv(4),x(1,j)-xsav(1,i))
160 xslv(5)=
min(xslv(5),x(2,j)-xsav(2,i))
161 xslv(6)=
min(xslv(6),x(3,j)-xsav(3,i))
162
163 vslv(1)=
max(vslv(1),v(1,j))
164 vslv(2)=
max(vslv(2),v(2,j))
165 vslv(3)=
max(vslv(3),v(3,j))
166 vslv(4)=
min(vslv(4),v(1,j))
167 vslv(5)=
min(vslv(5),v(2,j))
168 vslv(6)=
min(vslv(6),v(3,j))
169 ENDIF
170 END DO
171
172
173
174 DO i=1,nmn
175 ii = i+nsn
176 j=msr(i)
177
178 IF(j>0) THEN
179 xmsr(1)=
max(xmsr(1),x(1,j)-xsav(1,ii))
180 xmsr(2)=
max(xmsr(2),x(2,j)-xsav(2,ii))
181 xmsr(3)=
max(xmsr(3),x(3,j)-xsav(3,ii))
182 xmsr(4)=
min(xmsr(4),x(1,j)-xsav(1,ii))
183 xmsr(5)=
min(xmsr(5),x(2,j)-xsav(2,ii))
184 xmsr(6)=
min(xmsr(6),x(3,j)-xsav(3,ii))
185
186 vmsr(1)=
max(vmsr(1),v(1,j))
187 vmsr(2)=
max(vmsr(2),v(2,j))
188 vmsr(3)=
max(vmsr(3),v(3,j))
189 vmsr(4)=
min(vmsr(4),v(1,j))
190 vmsr(5)=
min(vmsr(5),v(2,j))
191 vmsr(6)=
min(vmsr(6),v(3,j))
192
193 ENDIF
194 END DO
195
196 ELSE
197
198
199 DO i=1,nsn
200 j=nsv(i)
201
202 IF(j>0) THEN
203 xslv(1)=
max(xslv(1),x(1,j)-xsav(1,j))
204 xslv(2)=
max(xslv(2),x(2,j)-xsav(2,j))
205 xslv(3)=
max(xslv(3),x(3,j)-xsav(3,j))
206 xslv(4)=
min(xslv(4),x(1,j)-xsav(1,j))
207 xslv(5)=
min(xslv(5),x(2,j)-xsav(2,j))
208 xslv(6)=
min(xslv(6),x(3,j)-xsav(3,j))
209
210 vslv(1)=
max(vslv(1),v(1,j))
211 vslv(2)=
max(vslv(2),v(2,j))
212 vslv(3)=
max(vslv(3),v(3,j))
213 vslv(4)=
min(vslv(4),v(1,j))
214 vslv(5)=
min(vslv(5),v(2,j))
215 vslv(6)=
min(vslv(6),v(3,j))
216 ENDIF
217 END DO
218
219
220
221 DO i=1,nmn
222 j=msr(i)
223
224 IF(j>0) THEN
225 xmsr(1)=
max(xmsr(1),x(1,j)-xsav(1,j))
226 xmsr(2)=
max(xmsr(2),x(2,j)-xsav(2,j))
227 xmsr(3)=
max(xmsr(3),x(3,j)-xsav(3,j))
228 xmsr(4)=
min(xmsr(4),x(1,j)-xsav(1,j))
229 xmsr(5)=
min(xmsr(5),x(2,j)-xsav(2,j))
230 xmsr(6)=
min(xmsr(6),x(3,j)-xsav(3,j))
231
232 vmsr(1)=
max(vmsr(1),v(1,j))
233 vmsr(2)=
max(vmsr(2),v(2,j))
234 vmsr(3)=
max(vmsr(3),v(3,j))
235 vmsr(4)=
min(vmsr(4),v(1,j))
236 vmsr(5)=
min(vmsr(5),v(2,j))
237 vmsr(6)=
min(vmsr(6),v(3,j))
238
239 ENDIF
240 END DO
241
242 ENDIF
243
244#include "lockon.inc"
245 xslv_g(1)=
max(xslv_g(1),xslv(1))
246 xslv_g(2)=
max(xslv_g(2),xslv(2))
247 xslv_g(3)=
max(xslv_g(3),xslv(3))
248 xslv_g(4)=
min(xslv_g(4),xslv(4))
249 xslv_g(5)=
min(xslv_g(5),xslv(5))
250 xslv_g(6)=
min(xslv_g(6),xslv(6))
251 xmsr_g(1)=
max(xmsr_g(1),xmsr(1))
252 xmsr_g(2)=
max(xmsr_g(2),xmsr(2))
253 xmsr_g(3)=
max(xmsr_g(3),xmsr(3))
254 xmsr_g(4)=
min(xmsr_g(4),xmsr(4))
255 xmsr_g(5)=
min(xmsr_g(5),xmsr(5))
256 xmsr_g(6)=
min(xmsr_g(6),xmsr(6))
257
258 vslv_g(1)=
max(vslv_g(1),vslv(1))
259 vslv_g(2)=
max(vslv_g(2),vslv(2))
260 vslv_g(3)=
max(vslv_g(3),vslv(3))
261 vslv_g(4)=
min(vslv_g(4),vslv(4))
262 vslv_g(5)=
min(vslv_g(5),vslv(5))
263 vslv_g(6)=
min(vslv_g(6),vslv(6))
264 vmsr_g(1)=
max(vmsr_g(1),vmsr(1))
265 vmsr_g(2)=
max(vmsr_g(2),vmsr(2))
266 vmsr_g(3)=
max(vmsr_g(3),vmsr(3))
267 vmsr_g(4)=
min(vmsr_g(4),vmsr(4))
268 vmsr_g(5)=
min(vmsr_g(5),vmsr(5))
269 vmsr_g(6)=
min(vmsr_g(6),vmsr(6))
270#include "lockoff.inc"
271
272 RETURN
subroutine spmd_get_penis(penis, nin)