41
42
43
44
45
46
47
48
49
50
51
54 USE elbufdef_mod
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com01_c.inc"
65#include "com04_c.inc"
66#include "com08_c.inc"
67#include "param_c.inc"
68#include "units_c.inc"
69#include "task_c.inc"
70#include "scr14_c.inc"
71#include "scr16_c.inc"
72#include "parit_c.inc"
73
74
75
76 INTEGER IFV, ITYP, NNA, NVENT, NJET, IVOLU(*), NCONA(16,*), IBAGHOL(NIBHOL,*)
77 my_real rvolu(*), x(3,*), xxxa(3,*), rbagjet(nrbjet,*), rbaghol(nrbhol,*)
78 INTEGER NNT,LGAUGE(3,*)
79 INTEGER NSKIP
80 INTEGER, INTENT(IN) :: WEIGHT(NUMNOD)
82 . a(3,*),
83 . fext(3,*),
84 . gauge(llgauge,*)
85 TYPE(H3D_DATABASE) :: H3D_DATA
86
87
88
89 INTEGER II,J,N21,N22,N1
90 INTEGER I, I1, I2, IFVENT, NPOLH
91 INTEGER IDEF(NVENT)
93 LOGICAL :: UP_SWITCH, AUTO_SWITCH
94
95
96 IF(nskip >= 1 ) GOTO 90
97
98 IF(nbgauge > 0)THEN
99 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1)
THEN
104 ENDIF
105
106 ii=0
107 DO i=1,nbgauge
108 IF(lgauge(1,i) <=0 .AND. lgauge(1,i) >= -numels) ii=1
109 ENDDO
110 IF(ii == 0) GO TO 1200
111
112 DO i=1,nbgauge
113 IF(lgauge(1,i) > 0 .OR. lgauge(1,i) < -numels) cycle
114 IF(lgauge(1,i) == 0 . and. lgauge(3,i) > 0) THEN
115
116 n1=lgauge(3,i)
118 n21=
fvspmd(ifv)%IBUF_L(1,j)
119 n22=
fvspmd(ifv)%IBUF_L(2,j)
120 IF(n22/=n1) cycle
121 gauge(30,i)=
fvspmd(ifv)%GGG(1,n21)
122 gauge(31,i)=
fvspmd(ifv)%GGG(2,n21)
123 gauge(32,i)=
fvspmd(ifv)%GGG(3,n21)
124 GO TO 800
125 ENDDO
127 n21=
fvspmd(ifv)%IBUFA_L(1,j)
128 n22=
fvspmd(ifv)%IBUFA_L(2,j)
129 IF(n22/=n1) cycle
130 gauge(30,i)=
fvspmd(ifv)%GGA(1,n21)
131 gauge(31,i)=
fvspmd(ifv)%GGA(2,n21)
132 gauge(32,i)=
fvspmd(ifv)%GGA(3,n21)
133 GO TO 800
134 ENDDO
135 gauge(30,i)=zero
136 gauge(31,i)=zero
137 gauge(32,i)=zero
138 ELSEIF( lgauge(3,i) < 0 )THEN
139
140 ELSEIF(lgauge(1,i) == 0 . and. lgauge(3,i) == 0)THEN
141
142 ENDIF
143 800 CONTINUE
144 ENDDO
145
146 1200 CONTINUE
147 ENDIF
148 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1)
THEN
154 ENDIF
156 i1=
fvspmd(ifv)%IBUF_L(1,i)
157 i2=
fvspmd(ifv)%IBUF_L(2,i)
158 IF(weight(i2) > 0 .OR. iparit .NE. 0) THEN
159 a(1,i2)=a(1,i2)+
fvspmd(ifv)%AAA(1,i1)
160 a(2,i2)=a(2,i2)+
fvspmd(ifv)%AAA(2,i1)
161 a(3,i2)=a(3,i2)+
fvspmd(ifv)%AAA(3,i1)
162 ENDIF
163 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT
164 . +anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0) THEN
165 fext(1,i2) = fext(1,i2)+
fvspmd(ifv)%AAA(1,i1)
166 fext(2,i2) = fext(2,i2)+
fvspmd(ifv)%AAA(2,i1)
167 fext(3,i2) = fext(3,i2)+
fvspmd(ifv)%AAA(3,i1)
168 ENDIF
169 ENDDO
170
17190 CONTINUE
172
173
174
175
176
177 IF(
fvspmd(ifv)%NNA_L_GLOB > 0)
THEN
178
179 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1 )
THEN
180
183
184 ENDIF
185 IF (
kmesh(ifv) < 2)
THEN
187 i1=
fvspmd(ifv)%IBUFA_L(1,i)
188 IF(ncona(2,i1) /= 0) cycle
189 i2=
fvspmd(ifv)%IBUFA_L(2,i)
190 x(1,i2)=xxxa(1,i1)
191 x(2,i2)=xxxa(2,i1)
192 x(3,i2)=xxxa(3,i1)
193 ENDDO
194 ENDIF
195 ENDIF
196
197 IF(nbgauge > 0) THEN
198 DEALLOCATE(
fvspmd(ifv)%GGG)
199 DEALLOCATE(
fvspmd(ifv)%GGA)
200 ENDIF
201 DEALLOCATE(
fvspmd(ifv)%AAA)
202
203 IF(ityp /= 8 ) RETURN
204
205
206
207 ttf =rvolu(49)
208 npolh=ivolu(49)
209 IF (ivolu(74) <= 0) THEN
210 up_switch = tt-ttf >= rvolu(70) .OR. npolh <= ivolu(37)
211 auto_switch = .false.
212 ENDIF
213 IF (ivolu(74) > 0) THEN
214
215 auto_switch = (
fvdata(ifv)%PDISP <
fvdata(ifv)%PDISP_OLD) .AND.
216 . (
fvdata(ifv)%PDISP < rvolu(73))
217 up_switch = tt-ttf >= rvolu(70)
218 up_switch = up_switch .OR. auto_switch
220 ENDIF
221
222 IF (up_switch .AND. ivolu(74)==2)THEN
223
224 ivolu(74) = 0
225 ivolu(60) = -1
226 rvolu(70) = ep20
227 rvolu(73) = zero
228 up_switch = .false.
229 IF(ispmd+1 ==
fvspmd(ifv)%PMAIN)
THEN
230 WRITE(iout,'(A,I10,A,E12.4/)')
231 . ' ** MONITORED VOLUME ID: ',ivolu(1),
232 . ' ALL POLYHEDRA ARE GOING TO BE MERGED ',tt
233 ENDIF
234 ENDIF
235
236 IF (up_switch) THEN
237 IF (ivolu(74) == 0 .OR. ivolu(74) == 1) THEN
238 DO i=1,nvent
239 IF(ibaghol(1,i) == 2) ibaghol(1,i) = 0
240 idef(i) = ibaghol(1,i)
241 ENDDO
242 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1 )
THEN
246 ENDIF
247 ivolu(2) = 7
248 ivolu(15)=-1
249 IF(ispmd+1 ==
fvspmd(ifv)%PMAIN)
THEN
250 WRITE(iout,'(A,I10,A,E12.4/)')
251 . ' ** MONITORED VOLUME ID: ',ivolu(1),
252 . ' IS SWITCHED TO UNIFORM PRESSURE AT TIME',tt
253 IF (auto_switch) THEN
254 WRITE(iout, '(A,E12.4)')
255 . '->AUTO SWITCH DUE TO LOW STANDARD DEVIATION OF PRESSURE AROUND ITS AVERAGE:',
257 ENDIF
258 ENDIF
259 DO i=1,nvent
260 ifvent=ibaghol(10,i)
261 ibaghol(1,i) = idef(i)
262 IF(ifvent == 2) ibaghol(10,i)=1
263 IF(ifvent == 3) ibaghol(10,i)=2
264 ENDDO
265 ELSE IF (ivolu(74) == 2) THEN
266
267 rvolu(31) = ep30
268
269 rvolu(70) = ep30
270
271 ivolu(74) = -2
272 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1 )
THEN
276 ENDIF
277
278 IF(ispmd+1 ==
fvspmd(ifv)%PMAIN)
THEN
279 WRITE(iout,'(A,I10,A,E12.4/)')
280 . ' ** MONITORED VOLUME ID: ',ivolu(1),
281 . ' IS SWITCHED TO 1 FINITE VOLUME AT TIME',tt
282 IF (auto_switch) THEN
283 WRITE(iout, '(A,E12.4)')
284 . '->AUTO SWITCH DUE TO LOW STANDARD DEVIATION OF PRESSURE AROUND ITS AVERAGE:',
286 ENDIF
287 ENDIF
288 ENDIF
289 ENDIF
290 RETURN
type(fvbag_spmd), dimension(:), allocatable fvspmd
type(fvbag_data), dimension(:), allocatable fvdata
integer, dimension(:), allocatable kmesh
subroutine spmd_ibcast_subcomm(buffer, n, from, comm)
subroutine spmd_rbcast_subcomm(buffer, n, from, comm)