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