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