File: N:\mfix\model\source_rop_s.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SUBROUTINE SOURCE_ROP_S(A_M, B_M, M)
21
22
23
24
25 USE param
26 USE param1
27 USE parallel
28 USE fldvar
29 USE rxns
30 USE run
31 USE geometry
32 USE indices
33 USE pgcor
34 USE pscor
35 USE compar
36 USE functions
37 IMPLICIT NONE
38
39
40
41
42 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
43
44 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
45
46 INTEGER, INTENT(IN) :: M
47
48
49
50
51 DOUBLE PRECISION :: DEL_V
52
53 DOUBLE PRECISION :: Src
54
55 INTEGER :: I, J, K, IJK, IMJK, IJMK, IJKM
56
57 CHARACTER(LEN=80) :: LINE
58
59
60
61
62
63 DO IJK = ijkstart3, ijkend3
64 IF (FLUID_AT(IJK) .AND. PHASE_4_P_G(IJK)/=M .AND. &
65 PHASE_4_P_S(IJK)/=M) THEN
66
67 I = I_OF(IJK)
68 J = J_OF(IJK)
69 K = K_OF(IJK)
70 IMJK = IM_OF(IJK)
71 IJMK = JM_OF(IJK)
72 IJKM = KM_OF(IJK)
73
74 DEL_V = U_S(IJK,M)*AYZ(IJK) - U_S(IMJK,M)*AYZ(IMJK) +&
75 V_S(IJK,M)*AXZ(IJK) - V_S(IJMK,M)*AXZ(IJMK) + &
76 W_S(IJK,M)*AXY(IJK) - W_S(IJKM,M)*AXY(IJKM)
77
78 IF (ROP_S(IJK,M) > ZERO) THEN
79 SRC = VOL(IJK)*ZMAX((-SUM_R_S(IJK,M)))/ROP_S(IJK,M)
80 ELSE
81 SRC = ZERO
82 ENDIF
83
84 A_M(IJK,0,M) = -(A_M(IJK,east,M)+A_M(IJK,west,M)+A_M(IJK,north,M)+&
85 A_M(IJK,south,M)+A_M(IJK,top,M)+A_M(IJK,bottom,M)+&
86 VOL(IJK)*ODT+ZMAX(DEL_V)+SRC)
87 B_M(IJK,M) = -(ROP_SO(IJK,M)*VOL(IJK)*ODT+&
88 ZMAX((-DEL_V))*ROP_S(IJK,M)+&
89 ZMAX(SUM_R_S(IJK,M))*VOL(IJK))
90
91 IF (ABS(A_M(IJK,0,M)) < SMALL_NUMBER) THEN
92 IF (ABS(B_M(IJK,M)) < SMALL_NUMBER) THEN
93 A_M(IJK,0,M) = -ONE
94 (IJK,M) = -ROP_S(IJK,M)
95 ELSE
96
97 WRITE (LINE, '(A,I6,A,I1,A,G12.5)') 'Error: At IJK = ', IJK, &
98 ' M = ', M, ' A = 0 and b = ', B_M(IJK,M)
99 CALL WRITE_ERROR ('SOURCE_ROP_s', LINE, 1)
100
101 ENDIF
102 ENDIF
103 ELSE
104
105
106 (IJK,east,M) = ZERO
107 A_M(IJK,west,M) = ZERO
108 A_M(IJK,north,M) = ZERO
109 A_M(IJK,south,M) = ZERO
110 A_M(IJK,top,M) = ZERO
111 A_M(IJK,bottom,M) = ZERO
112 A_M(IJK,0,M) = -ONE
113 B_M(IJK,M) = -ROP_S(IJK,M)
114 ENDIF
115 ENDDO
116
117 RETURN
118 END SUBROUTINE SOURCE_ROP_S
119
120
121
122
123
124
125
126
127
128
129
130 SUBROUTINE POINT_SOURCE_ROP_S(B_M, M)
131
132 use compar
133 use constant
134 use geometry
135 use indices
136 use param, only: dimension_m, dimension_3
137 use param1, only: small_number
138 use physprop
139 use ps
140 use run
141 use functions
142
143 IMPLICIT NONE
144
145
146
147
148 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
149
150 INTEGER, INTENT(IN) :: M
151
152
153
154
155
156
157 INTEGER :: IJK, I, J, K
158 INTEGER :: PSV
159
160
161 DOUBLE PRECISION :: pSource
162
163
164 PS_LP: do PSV = 1, DIMENSION_PS
165
166 if(.NOT.PS_DEFINED(PSV)) cycle PS_LP
167 if(PS_MASSFLOW_S(PSV,M) < small_number) cycle PS_LP
168
169 do k = PS_K_B(PSV), PS_K_T(PSV)
170 do j = PS_J_S(PSV), PS_J_N(PSV)
171 do i = PS_I_W(PSV), PS_I_E(PSV)
172
173 if(.NOT.IS_ON_myPE_plus2layers(I,J,K)) cycle
174 IF (DEAD_CELL_AT(I,J,K)) CYCLE
175
176 = funijk(i,j,k)
177 if(fluid_at(ijk)) then
178
179 pSource = PS_MASSFLOW_S(PSV,M) * &
180 (VOL(IJK)/PS_VOLUME(PSV))
181
182 B_M(IJK,M) = B_M(IJK,M) - pSource
183 endif
184 enddo
185 enddo
186 enddo
187
188 enddo PS_LP
189
190 RETURN
191 END SUBROUTINE POINT_SOURCE_ROP_S
192