37 SUBROUTINE fvbag2(IFV, ITYP, NNA, NVENT, NJET, IVOLU, IBAGHOL, RBAGHOL,
38 . X, RVOLU, XXXA, NCONA, RBAGJET ,
39 . A, LGAUGE , GAUGE , NNT ,FEXT , NSKIP,
60#include "implicit_f.inc"
76 INTEGER IFV, , 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,*)
80 INTEGER,
INTENT(IN) :: WEIGHT(NUMNOD)
89 INTEGER II,J,N21,N22,N1
90 INTEGER I, I1, I2, IFVENT, NPOLH
93 LOGICAL :: UP_SWITCH, AUTO_SWITCH
96 IF(nskip >= 1 )
GOTO 90
99 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1)
THEN
108 IF(lgauge(1,i) <=0 .AND. lgauge(1,i) >= -numels) ii=1
110 IF(ii == 0)
GO TO 1200
113 IF(lgauge(1,i) > 0 .OR. lgauge(1,i) < -numels) cycle
114 IF(lgauge(1,i) == 0 . and. lgauge(3,i) > 0)
THEN
118 n21=
fvspmd(ifv)%IBUF_L(1,j)
119 n22=
fvspmd(ifv)%IBUF_L(2,j)
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)
127 n21=
fvspmd(ifv)%IBUFA_L(1,j)
128 n22=
fvspmd(ifv)%IBUFA_L(2,j)
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)
138 ELSEIF( lgauge(3,i) < 0 )
THEN
140 ELSEIF(lgauge(1,i) == 0 . and. lgauge(3,i) == 0)
THEN
148 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1)
THEN
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)
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)
177 IF(
fvspmd(ifv)%NNA_L_GLOB > 0)
THEN
179 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1 )
THEN
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)
198 DEALLOCATE(
fvspmd(ifv)%GGG)
199 DEALLOCATE(
fvspmd(ifv)%GGA)
201 DEALLOCATE(
fvspmd(ifv)%AAA)
203 IF(ityp /= 8 )
RETURN
209 IF (ivolu(74) <= 0)
THEN
210 up_switch = tt-ttf >= rvolu(70) .OR. npolh <= ivolu(37)
211 auto_switch = .false.
213 IF (ivolu(74) > 0)
THEN
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
222 IF (up_switch .AND. ivolu(74)==2)
THEN
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
237 IF (ivolu(74) == 0 .OR. ivolu(74) == 1)
THEN
239 IF(ibaghol(1,i) == 2) ibaghol(1,i) = 0
240 idef(i) = ibaghol(1,i)
242 IF(nspmd > 1 .AND.
fvspmd(ifv)%RANK > -1 )
THEN
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:
',
261 IBAGHOL(1,I) = IDEF(I)
262 IF(IFVENT == 2) IBAGHOL(10,I)=1
263 IF(IFVENT == 3) IBAGHOL(10,I)=2
265 ELSE IF (IVOLU(74) == 2) THEN
272.AND.
IF(NSPMD > 1 FVSPMD(IFV)%RANK > -1 )THEN
273 CALL SPMD_RBCAST_SUBCOMM(RVOLU,NRVOLU,0,FVSPMD(IFV)%MPI_COMM)
274 CALL SPMD_RBCAST_SUBCOMM(RBAGJET,NRBJET*NJET,0,FVSPMD(IFV)%MPI_COMM)
275 CALL SPMD_IBCAST_SUBCOMM(IDEF,NVENT,0,FVSPMD(IFV)%MPI_COMM)
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:
',
subroutine fvbag2(ifv, ityp, nna, nvent, njet, ivolu, ibaghol, rbaghol, x, rvolu, xxxa, ncona, rbagjet, a, lgauge, gauge, nnt, fext, nskip, h3d_data, weight)