File: N:\mfix\model\set_fluidbed_p.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 SUBROUTINE SET_FLUIDBED_P
34
35
36
37
38 USE bc
39 USE bodyforce
40 USE compar
41 USE constant
42 USE discretelement
43 USE eos, ONLY: EOSG
44 USE exit, only: mfix_exit
45 USE fldvar
46 USE functions
47 USE funits
48 USE geometry
49 USE ic
50 USE indices
51 USE machine, only: start_log, end_log
52 USE mpi_utility
53 USE param
54 USE param1
55 USE physprop
56 USE scales
57 USE sendrecv
58 IMPLICIT NONE
59
60
61
62
63 INTEGER :: I, J, K, IJK, M
64
65 INTEGER :: L
66
67 DOUBLE PRECISION :: PJ
68
69 DOUBLE PRECISION :: BED_WEIGHT
70
71 DOUBLE PRECISION :: AREA
72
73 DOUBLE PRECISION :: dAREA
74
75 DOUBLE PRECISION :: DPoDX, DPoDY, DPoDZ
76
77
78
79
80 DO L = 1, DIMENSION_IC
81 IF (IC_DEFINED(L)) THEN
82 IF (IC_P_G(L) == UNDEFINED) GOTO 60
83 PJ = IC_P_G(L)
84 ENDIF
85 ENDDO
86
87
88
89
90
91
92 IF (DO_I .AND. DELP_X/=UNDEFINED) THEN
93 DPODX = DELP_X/XLENGTH
94 PJ = PJ - DPODX*HALF*(DX(IMAX1)+DX(IMAX2))
95 DO I = IMAX1, IMIN1, -1
96 PJ = PJ + DPODX*HALF*(DX(I)+DX(I+1))
97 DO K = KMIN1, KMAX1
98 DO J = JMIN1, JMAX1
99
100 IF(.NOT.IS_ON_MYPE_OWNS(I,J,K)) CYCLE
101 IF (DEAD_CELL_AT(I,J,K)) CYCLE
102 = FUNIJK(I,J,K)
103 IF (FLUID_AT(IJK)) P_G(IJK) = SCALE_PRESSURE(PJ)
104 ENDDO
105 ENDDO
106 ENDDO
107 ENDIF
108
109 IF (DO_J .AND. DELP_Y/=UNDEFINED) THEN
110 DPODY = DELP_Y/YLENGTH
111 PJ = PJ - DPODY*HALF*(DY(JMAX1)+DY(JMAX2))
112 DO J = JMAX1, JMIN1, -1
113 PJ = PJ + DPODY*HALF*(DY(J)+DY(J+1))
114 DO K = KMIN1, KMAX1
115 DO I = IMIN1, IMAX1
116
117 IF(.NOT.IS_ON_MYPE_OWNS(I,J,K)) CYCLE
118 IF (DEAD_CELL_AT(I,J,K)) CYCLE
119 = FUNIJK(I,J,K)
120 IF (FLUID_AT(IJK)) P_G(IJK) = SCALE_PRESSURE(PJ)
121 ENDDO
122 ENDDO
123 ENDDO
124 ENDIF
125
126 IF (DO_K .AND. DELP_Z/=UNDEFINED) THEN
127 DPODZ = DELP_Z/ZLENGTH
128 PJ = PJ - DPODZ*HALF*(DZ(KMAX1)+DZ(KMAX2))
129 DO K = KMAX1, KMIN1, -1
130 PJ = PJ + DPODZ*HALF*(DZ(K)+DZ(K+1))
131 DO J = JMIN1, JMAX1
132 DO I = IMIN1, IMAX1
133
134 IF(.NOT.IS_ON_MYPE_OWNS(I,J,K)) CYCLE
135 IF (DEAD_CELL_AT(I,J,K)) CYCLE
136 = FUNIJK(I,J,K)
137 IF (FLUID_AT(IJK)) P_G(IJK) = SCALE_PRESSURE(PJ)
138 ENDDO
139 ENDDO
140 ENDDO
141 ENDIF
142
143 GOTO 100
144
145 CONTINUE
146
147
148
149
150 = UNDEFINED
151 DO L = 1, DIMENSION_BC
152 IF (BC_DEFINED(L) .AND. BC_TYPE_ENUM(L)==P_OUTFLOW) PJ = BC_P_G(L)
153 ENDDO
154
155 IF (PJ == UNDEFINED) THEN
156
157
158 IF (RO_G0 /= UNDEFINED) THEN
159
160 DO IJK = IJKSTART3, IJKEND3
161 IF (FLUID_AT(IJK)) P_G(IJK) = ZERO
162 ENDDO
163 GOTO 100
164
165 ELSE
166
167
168
169
170
171 CALL START_LOG
172 IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
173 CALL MFIX_EXIT(myPE)
174 ENDIF
175 ENDIF
176
177
178
179
180
181 DO J = JMAX2, JMIN1, -1
182
183
184 = 0.0
185 AREA = 0.0
186 DO K = KMIN1, KMAX1
187 DO I = IMIN1, IMAX1
188 IF(.NOT.IS_ON_MYPE_OWNS(I,J,K)) CYCLE
189 IF (DEAD_CELL_AT(I,J,K)) CYCLE
190 = FUNIJK(I,J,K)
191 IF (FLUID_AT(IJK)) THEN
192 IF (COORDINATES == 'CARTESIAN') THEN
193 DAREA = DX(I)*DZ(K)
194 ELSE IF (CYLINDRICAL) THEN
195 DAREA = DX(I)*X(I)*DZ(K)
196 ENDIF
197 AREA = AREA + DAREA
198 IF (RO_G0 == UNDEFINED) THEN
199 BED_WEIGHT = BED_WEIGHT - DY(J)*BFY_G(IJK)*EP_G(IJK)*EOSG(&
200 MW_MIX_G(IJK),PJ,T_G(IJK))*DAREA
201 ELSE
202 BED_WEIGHT = BED_WEIGHT - DY(J)*BFY_G(IJK)*EP_G(IJK)*RO_G0&
203 *DAREA
204 ENDIF
205
206
207 IF (.NOT.DISCRETE_ELEMENT) THEN
208 DO M = 1, SMAX
209 BED_WEIGHT = BED_WEIGHT - DY(J)*BFY_S(IJK,M)*ROP_S(IJK,M)*&
210 DAREA
211 ENDDO
212 ENDIF
213 ENDIF
214 ENDDO
215 ENDDO
216
217
218 call global_all_sum(bed_weight)
219 call global_all_sum(area)
220 IF (AREA /= 0.0) BED_WEIGHT = BED_WEIGHT/AREA
221
222 PJ = PJ + BED_WEIGHT
223 DO K = KMIN1, KMAX1
224 DO I = IMIN1, IMAX1
225 IF(.NOT.IS_ON_MYPE_OWNS(I,J,K)) CYCLE
226 IF (DEAD_CELL_AT(I,J,K)) CYCLE
227 = FUNIJK(I,J,K)
228 IF(FLUID_AT(IJK).AND.P_G(IJK)==UNDEFINED)P_G(IJK)=SCALE_PRESSURE(PJ)
229 ENDDO
230 ENDDO
231 ENDDO
232
233
234
235 CONTINUE
236
237 call send_recv(P_G,2)
238
239 RETURN
240
241 1000 FORMAT(/1X,70('*')//' From: SET_FLUIDBED_P'/' Message: Outflow ',&
242 'pressure boundary condition (P_OUTFLOW) not found.',/&
243 'All the initial pressures (IC_P_g) or at least one P_OUTFLOW',/&
244 'condition need to be specified',/1X,70('*')/)
245
246 END SUBROUTINE SET_FLUIDBED_P
247
248
249