File: RELATIVE:/../../../mfix.git/model/source_w_s.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 SUBROUTINE SOURCE_W_S(A_M, B_M)
32
33
34
35
36 USE param
37 USE param1
38 USE parallel
39 USE matrix
40 USE scales
41 USE constant
42 USE physprop
43 USE fldvar
44 USE visc_s
45 USE rxns
46 USE run
47 USE toleranc
48 USE geometry
49 USE indices
50 USE is
51 USE tau_s
52 USE tau_g, only: ctau_w_g
53 USE bc
54 USE compar
55 USE sendrecv
56 use kintheory
57 USE ghdtheory
58 USE drag
59 USE cutcell
60 USE quadric
61 USE mms
62 USE bodyforce
63 USE fun_avg
64 USE functions
65
66 IMPLICIT NONE
67
68
69
70
71 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
72
73 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
74
75
76
77
78 INTEGER :: I, J, K, IJK, IJKT, IMJK, IJMK, IJKM, IJKP, IMJKP
79 INTEGER :: IJKE, IJKW, IJKTE, IJKTW, IM, IPJK, IJPK, IJMKP
80
81 INTEGER :: M, MM, L
82
83 INTEGER :: ISV
84
85 DOUBLE PRECISION :: PgT
86
87 DOUBLE PRECISION :: EPSA, EPStmp, epse, epsw, epsn, epss, &
88 epst, epsb, epsMix, epsMixT
89 DOUBLE PRECISION :: SUM_EPS_CP
90
91 DOUBLE PRECISION :: ROPSA
92
93 DOUBLE PRECISION :: dro1, dro2, droa
94
95 DOUBLE PRECISION :: ugt, Cte, Ctw, cpe, cpw, MUoX
96
97 DOUBLE PRECISION :: Sdp, Sdps
98
99 DOUBLE PRECISION :: V0, Vmt, Vbf, Vcoa, Vcob, Vmttmp, vxza
100
101 DOUBLE PRECISION :: Ghd_drag, avgRop
102
103 DOUBLE PRECISION :: HYS_drag, avgDrag
104
105 DOUBLE PRECISION :: F_vir, ROP_MA, Uge, Ugw, Vgb, Vgt, Wge, &
106 Wgw, Wgn, Wgs, Wgt, Wgb
107
108
109 DO M = 1, MMAX
110 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
111 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
112
113 IF (MOMENTUM_Z_EQ(M)) THEN
114
115
116
117
118
119
120
121
122
123
124
125
126 DO IJK = ijkstart3, ijkend3
127
128
129 IF(WALL_AT(IJK)) cycle
130
131 I = I_OF(IJK)
132 J = J_OF(IJK)
133 K = K_OF(IJK)
134 IMJK = IM_OF(IJK)
135 IJMK = JM_OF(IJK)
136 IJKM = KM_OF(IJK)
137 IJKP = KP_OF(IJK)
138 IPJK = IP_OF(IJK)
139 IMJKP = KP_OF(IMJK)
140 IJPK = JP_OF(IJK)
141 IJMKP = KP_OF(IJMK)
142 IJKT = TOP_OF(IJK)
143
144 IF (KT_TYPE_ENUM == GHD_2007) THEN
145
146 = ZERO
147 epsMix = ZERO
148 epsMixT= ZERO
149 DO L = 1, SMAX
150 EPStmp = EPStmp + AVG_Z(EP_S(IJK,L),EP_S(IJKT,L),K)
151 epsMix = epsMix + EP_S(IJK,L)
152 = epsMixT + EP_S(IJKT,L)
153 IF(IP_AT_T(IJK)) THEN
154 W_S(IJK,L) = ZERO
155 ELSEIF(SIP_AT_T(IJK)) THEN
156 ISV = IS_ID_AT_T(IJK)
157 W_S(IJK,L) = IS_VEL_S(ISV,L)
158 ENDIF
159 ENDDO
160 EPSA = EPStmp
161 ELSE
162 EPSA = AVG_Z(EP_S(IJK,M),EP_S(IJKT,M),K)
163 ENDIF
164
165
166 IF (IP_AT_T(IJK)) THEN
167 A_M(IJK,E,M) = ZERO
168 A_M(IJK,W,M) = ZERO
169 A_M(IJK,N,M) = ZERO
170 A_M(IJK,S,M) = ZERO
171 A_M(IJK,T,M) = ZERO
172 A_M(IJK,B,M) = ZERO
173 A_M(IJK,0,M) = -ONE
174 B_M(IJK,M) = ZERO
175
176
177 ELSEIF (SIP_AT_T(IJK)) THEN
178 A_M(IJK,E,M) = ZERO
179 A_M(IJK,W,M) = ZERO
180 A_M(IJK,N,M) = ZERO
181 A_M(IJK,S,M) = ZERO
182 A_M(IJK,T,M) = ZERO
183 A_M(IJK,B,M) = ZERO
184 A_M(IJK,0,M) = -ONE
185 ISV = IS_ID_AT_T(IJK)
186 B_M(IJK,M) = -IS_VEL_S(ISV,M)
187
188
189 ELSEIF (EPSA <= DIL_EP_S) THEN
190 A_M(IJK,E,M) = ZERO
191 A_M(IJK,W,M) = ZERO
192 A_M(IJK,N,M) = ZERO
193 A_M(IJK,S,M) = ZERO
194 A_M(IJK,T,M) = ZERO
195 A_M(IJK,B,M) = ZERO
196 A_M(IJK,0,M) = -ONE
197 B_M(IJK,M) = ZERO
198 IF (KT_TYPE_ENUM == GHD_2007) THEN
199 EPSw = ZERO
200 EPSe = ZERO
201 EPSn = ZERO
202 EPSs = ZERO
203 EPSt = ZERO
204 EPSb = ZERO
205 DO L = 1, SMAX
206 EPSw = EPSw + EP_S(WEST_OF(IJK),L)
207 EPSe = EPSe + EP_S(EAST_OF(IJK),L)
208 EPSn = EPSn + EP_S(NORTH_OF(IJK),L)
209 EPSs = EPSs + EP_S(SOUTH_OF(IJK),L)
210 EPSt = EPSt + EP_S(TOP_OF(IJK),L)
211 EPSb = EPSb + EP_S(BOTTOM_OF(IJK),L)
212 ENDDO
213 ELSE
214 EPSw = EP_S(WEST_OF(IJK),M)
215 EPSe = EP_S(EAST_OF(IJK),M)
216 EPSn = EP_S(NORTH_OF(IJK),M)
217 EPSs = EP_S(SOUTH_OF(IJK),M)
218 EPSt = EP_S(TOP_OF(IJK),M)
219 EPSb = EP_S(BOTTOM_OF(IJK),M)
220 ENDIF
221
222 IF (EPSw > DIL_EP_S .AND. .NOT.IS_AT_E(IMJK)) A_M(IJK,W,M) = ONE
223 IF (EPSe > DIL_EP_S .AND. .NOT.IS_AT_E(IJK)) A_M(IJK,E,M) = ONE
224 IF (EPSs > DIL_EP_S .AND. .NOT.IS_AT_N(IJMK)) A_M(IJK,S,M) = ONE
225 IF (EPSn > DIL_EP_S .AND. .NOT.IS_AT_N(IJK)) A_M(IJK,N,M) = ONE
226 IF (EPSb > DIL_EP_S .AND. .NOT.IS_AT_T(IJKM)) A_M(IJK,B,M) = ONE
227 IF (EPSt > DIL_EP_S .AND. .NOT.IS_AT_T(IJK)) A_M(IJK,T,M) = ONE
228 IF((A_M(IJK,W,M)+A_M(IJK,E,M)+A_M(IJK,S,M)+A_M(IJK,N,M)+ &
229 A_M(IJK,B,M)+A_M(IJK,T,M)) == ZERO) THEN
230 B_M(IJK,M) = -W_S(IJK,M)
231 ELSE
232 A_M(IJK,0,M) = -(A_M(IJK,E,M)+A_M(IJK,W,M)+A_M(IJK,N,M)+ &
233 A_M(IJK,S,M)+A_M(IJK,T,M)+A_M(IJK,B,M))
234 ENDIF
235
236
237 ELSEIF (BLOCKED_W_CELL_AT(IJK)) THEN
238 A_M(IJK,E,M) = ZERO
239 A_M(IJK,W,M) = ZERO
240 A_M(IJK,N,M) = ZERO
241 A_M(IJK,S,M) = ZERO
242 A_M(IJK,T,M) = ZERO
243 A_M(IJK,B,M) = ZERO
244 A_M(IJK,0,M) = -ONE
245 B_M(IJK,M) = ZERO
246
247
248 ELSE
249
250
251
252 = P_G(IJKT)
253 IF (CYCLIC_Z_PD) THEN
254
255
256
257 IF (KMAP(K_OF(IJK)).EQ.KMAX1) PGT = P_G(IJKT) - DELP_Z
258 ENDIF
259 IF (MODEL_B) THEN
260 SDP = ZERO
261 ELSE
262 IF(.NOT.CUT_W_TREATMENT_AT(IJK)) THEN
263 SDP = -P_SCALE*EPSA*(PGT - P_G(IJK))*AXY(IJK)
264 ELSE
265 SDP = -P_SCALE*EPSA*(PGT * A_WPG_T(IJK) - P_G(IJK) * A_WPG_B(IJK) )
266 ENDIF
267 ENDIF
268
269 IF (CLOSE_PACKED(M)) THEN
270 IF(SMAX > 1 .AND. KT_TYPE_ENUM /= GHD_2007) THEN
271 SUM_EPS_CP=0.0
272 DO MM=1,SMAX
273 IF (CLOSE_PACKED(MM))&
274 SUM_EPS_CP=SUM_EPS_CP+AVG_Z(EP_S(IJK,MM),EP_S(IJKT,MM),K)
275 ENDDO
276 SUM_EPS_CP = Max(SUM_EPS_CP, small_number)
277 SDPS = -((P_S(IJKT,M)-P_S(IJK,M))+(EPSA/SUM_EPS_CP)*&
278 (P_STAR(IJKT)-P_STAR(IJK)))*AXY(IJK)
279 ELSE
280 IF(.NOT.CUT_W_TREATMENT_AT(IJK)) THEN
281 SDPS =-((P_S(IJKT,M)-P_S(IJK,M))+(P_STAR(IJKT)-P_STAR(IJK)))*AXY(IJK)
282 ELSE
283 SDPS =-((P_S(IJKT,M)* A_WPG_T(IJK)-P_S(IJK,M)* A_WPG_B(IJK)) &
284 +(P_STAR(IJKT)* A_WPG_T(IJK)-P_STAR(IJK)* A_WPG_B(IJK)))
285 ENDIF
286 ENDIF
287 ELSE
288 IF(.NOT.CUT_W_TREATMENT_AT(IJK)) THEN
289 SDPS = -(P_S(IJKT,M)-P_S(IJK,M))*AXY(IJK)
290 ELSE
291 SDPS = -(P_S(IJKT,M) * A_WPG_T(IJK) - P_S(IJK,M) * A_WPG_B(IJK))
292 ENDIF
293 ENDIF
294
295
296 IF(.NOT.CUT_W_TREATMENT_AT(IJK)) THEN
297
298 = AVG_Z(ROP_S(IJK,M),ROP_S(IJKT,M),K)
299
300 = AVG_Z(ROP_SO(IJK,M),ROP_SO(IJKT,M),K)*ODT
301
302 IF(Added_Mass .AND. M == M_AM) THEN
303 ROP_MA = AVG_Z(ROP_g(IJK)*EP_s(IJK,M),&
304 ROP_g(IJKT)*EP_s(IJKT,M),K)
305 V0 = V0 + Cv * ROP_MA * ODT
306 ENDIF
307 ELSE
308
309 = (VOL(IJK)*ROP_S(IJK,M) + &
310 VOL(IJKT)*ROP_S(IJKT,M))/(VOL(IJK) + VOL(IJKT))
311
312 = (VOL(IJK)*ROP_SO(IJK,M) + &
313 VOL(IJKT)*ROP_SO(IJKT,M))*ODT/&
314 (VOL(IJK) + VOL(IJKT))
315
316 IF(Added_Mass .AND. M == M_AM) THEN
317 ROP_MA = (VOL(IJK)*ROP_g(IJK)*EP_s(IJK,M) +&
318 VOL(IJKT)*ROP_g(IJKT)*EP_s(IJKT,M))/&
319 (VOL(IJK) + VOL(IJKT))
320 V0 = V0 + Cv * ROP_MA * ODT
321 ENDIF
322 ENDIF
323
324
325
326 = ZERO
327 IF(Added_Mass .AND. M == M_AM .AND.&
328 (.NOT.CUT_W_TREATMENT_AT(IJK))) THEN
329 F_vir = ( (W_g(IJK) - W_gO(IJK)) )*ODT*VOL_W(IJK)
330
331
332 = AVG_Z_T(W_g(IJKM),W_g(IJK))
333 Wgt = AVG_Z_T(W_g(IJK),W_g(IJKP))
334 Uge = AVG_Z(U_g(IJK),U_g(IJKP),K)
335 Ugw = AVG_Z(U_g(IMJK),U_g(IMJKP),K)
336 Ugt = AVG_X_E(Ugw,Uge,IP1(I))
337 Wge = AVG_X(W_g(IJK),W_g(IPJK),IP1(I))
338 Wgw = AVG_X(W_g(IMJK),W_g(IJK),I)
339 Vgb = AVG_Y_N(V_g(IJMK),V_g(IJK))
340 Vgt = AVG_Y_N(V_g(IJMKP),V_g(IJKP))
341 Wgs = AVG_Y(W_g(IJMK),W_g(IJK),JM1(J))
342 Wgn = AVG_Y(W_g(IJK),W_g(IJPK),J)
343
344
345 IF (CYLINDRICAL) F_vir = F_vir + &
346 Ugt*W_g(IJK)*OX(I)
347
348
349 = F_vir + W_g(IJK)*OX(I) * &
350 (Wgt - Wgb)*AXY(IJK) + Ugt*(Wge - Wgw)*AYZ(IJK) + &
351 AVG_Z(Vgb,Vgt,K) * (Wgn - Wgs)*AXZ(IJK)
352 F_vir = F_vir * Cv * ROP_MA
353 ENDIF
354
355
356 IF (KT_TYPE_ENUM == GHD_2007) THEN
357 VMTtmp = ZERO
358 DO L = 1,SMAX
359 VMTtmp = VMTtmp + AVG_Z(SUM_R_S(IJK,L),SUM_R_S(IJKT,L),K)
360 ENDDO
361 VMT = VMTtmp
362 ELSE
363 IF(.NOT.CUT_W_TREATMENT_AT(IJK)) THEN
364 VMT = AVG_Z(SUM_R_S(IJK,M),SUM_R_S(IJKT,M),K)
365 ELSE
366 VMT = (VOL(IJK)*SUM_R_S(IJK,M) + VOL(IJKT)*&
367 SUM_R_S(IJKT,M))/(VOL(IJK) + VOL(IJKT))
368 ENDIF
369 ENDIF
370
371
372 IF (MODEL_B) THEN
373 IF (KT_TYPE_ENUM == GHD_2007) THEN
374 DRO1 = ROP_S(IJK,M) - RO_G(IJK) *epsMix
375 DRO2 = ROP_S(IJKT,M) - RO_G(IJKT)*epsMixT
376 DROA = AVG_Z(DRO1,DRO2,K)
377 VBF = DROA*BFZ_S(IJK,M)
378 ELSE
379 DRO1 = (RO_S(IJK,M)-RO_G(IJK))*EP_S(IJK,M)
380 DRO2 = (RO_S(IJK,M)-RO_G(IJKT))*EP_S(IJKT,M)
381 DROA = AVG_Z(DRO1,DRO2,K)
382 VBF = DROA*BFZ_S(IJK,M)
383 ENDIF
384 ELSE
385 VBF = ROPSA*BFZ_S(IJK,M)
386 ENDIF
387
388
389 = ZERO
390 IF (KT_TYPE_ENUM == GHD_2007) THEN
391 DO L = 1,SMAX
392 avgRop = AVG_Z(ROP_S(IJK,L),ROP_S(IJKT,L),K)
393 if(avgRop > ZERO) Ghd_drag = Ghd_drag -&
394 AVG_Z(F_GS(IJK,L),F_GS(IJKT,L),K) * JoiZ(IJK,L) / avgRop
395 ENDDO
396 ENDIF
397
398
399 = ZERO
400 IF (DRAG_TYPE_ENUM .EQ. HYS .AND. &
401 KT_TYPE_ENUM /= GHD_2007) THEN
402 DO L = 1,MMAX
403 IF (L /= M) THEN
404 avgDrag = AVG_Z(beta_ij(IJK,M,L),beta_ij(IJKT,M,L),K)
405 HYS_drag = HYS_drag - avgDrag * (W_g(ijk) - W_s(IJK,L))
406 ENDIF
407 ENDDO
408 ENDIF
409
410
411 = ZERO
412 VCOB = ZERO
413 VXZA = ZERO
414 CTE = ZERO
415 CTW = ZERO
416 CPE = ZERO
417 CPW = ZERO
418 IF (CYLINDRICAL) THEN
419
420 = IM_OF(IJK)
421 IJKP = KP_OF(IJK)
422 IMJKP = KP_OF(IMJK)
423 UGT = AVG_Z(HALF*(U_S(IJK,M)+U_S(IMJK,M)),&
424 HALF*(U_S(IJKP,M)+U_S(IMJKP,M)),K)
425 IF (UGT > ZERO) THEN
426 VCOA = ROPSA*UGT*OX(I)
427 VCOB = ZERO
428 IF(Added_Mass .AND. M == M_AM) &
429 VCOA = VCOA + Cv*ROP_MA*UGT*OX(I)
430 ELSE
431 VCOA = ZERO
432 VCOB = -ROPSA*UGT*W_S(IJK,M)*OX(I)
433 IF(Added_Mass .AND. M == M_AM) &
434 VCOB = VCOB - Cv*ROP_MA*UGT*W_S(IJK,M)*OX(I)
435 ENDIF
436
437
438 = EAST_OF(IJK)
439 IJKW = WEST_OF(IJK)
440 IJKTE = TOP_OF(IJKE)
441 IJKTW = TOP_OF(IJKW)
442 IM = IM1(I)
443 IPJK = IP_OF(IJK)
444
445 CTE = HALF*AVG_Z_H(AVG_X_H(EPMU_S(IJK,M),EPMU_S(IJKE,M),I),&
446 AVG_X_H(EPMU_S(IJKT,M),EPMU_S(IJKTE,M),I),K)*&
447 OX_E(I)*AYZ_W(IJK)
448 CTW = HALF*AVG_Z_H(AVG_X_H(EPMU_S(IJKW,M),EPMU_S(IJK,M),IM),&
449 AVG_X_H(EPMU_S(IJKTW,M),EPMU_S(IJKT,M),IM),K)*&
450 DY(J)*(HALF*(DZ(K)+DZ(KP1(K))))
451
452
453
454 = AVG_Z(EPMU_S(IJK,M),EPMU_S(IJKT,M),K)*OX(I)
455 CPE = MUOX* HALF*MUOX*ODX_E(I)*VOL_W(IJK)
456 CPW = MUOX* HALF*MUOX*ODX_E(IM)*VOL_W(IJK)
457
458
459 = MUOX*OX(I)
460 ENDIF
461
462
463 (IJK,E,M) = A_M(IJK,E,M) + CPE
464 A_M(IJK,W,M) = A_M(IJK,W,M) - CPW
465
466 A_M(IJK,0,M) = -(A_M(IJK,E,M)+A_M(IJK,W,M)+&
467 A_M(IJK,N,M)+A_M(IJK,S,M)+A_M(IJK,T,M)+&
468 A_M(IJK,B,M)+(V0+ZMAX(VMT)+VCOA+VXZA)*&
469 VOL_W(IJK)+ CTE - CTW)
470
471 A_M(IJK,E,M) = A_M(IJK,E,M) - CTE
472 A_M(IJK,W,M) = A_M(IJK,W,M) + CTW
473
474 B_M(IJK,M) = B_m(IJK, M) - (SDP + SDPS + &
475 TAU_W_S(IJK,M) + epsa*cTAU_W_G(IJK) + F_vir + &
476 ( (V0+ZMAX((-VMT)))*W_SO(IJK,M)+ &
477 VBF + VCOB + HYS_drag)*VOL_W(IJK) )
478
479 IF(USE_MMS) B_M(IJK,M) = &
480 B_M(IJK,M) - MMS_W_S_SRC(IJK)*VOL_W(IJK)
481
482 IF (KT_TYPE_ENUM == IA_2005) THEN
483 B_M(IJK,M) = B_M(IJK,M) - KTMOM_W_S(IJK,M)
484 ELSEIF (KT_TYPE_ENUM == GHD_2007) THEN
485 B_M(IJK,M) = B_M(IJK,M) - Ghd_drag*VOL_W(IJK)
486 ENDIF
487
488 ENDIF
489 ENDDO
490
491
492
493
494 IF(CARTESIAN_GRID) CALL CG_SOURCE_W_S(A_M, B_M, M)
495
496 CALL SOURCE_W_S_BC (A_M, B_M, M)
497 IF(CARTESIAN_GRID) CALL CG_SOURCE_W_S_BC(A_M, B_M, M)
498
499 ENDIF
500 ENDIF
501 ENDDO
502
503 RETURN
504 END SUBROUTINE SOURCE_W_S
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524 SUBROUTINE SOURCE_W_S_BC(A_M, B_M, M)
525
526
527
528
529 USE param
530 USE param1
531 USE parallel
532 USE matrix
533 USE scales
534 USE constant
535 USE physprop
536 USE fldvar
537 USE visc_s
538 USE rxns
539 USE run
540 USE toleranc
541 USE geometry
542 USE indices
543 USE is
544 USE tau_s
545 USE bc
546 USE output
547 USE compar
548 USE fun_avg
549 USE functions
550
551 IMPLICIT NONE
552
553
554
555
556 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
557
558 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
559
560 INTEGER, INTENT(IN) :: M
561
562
563
564
565 INTEGER :: L
566
567 INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK,&
568 IM, JM, IJKB, IJKM, IJKP
569
570
571
572 = 1
573 DO K1 = kmin3,kmax3
574 DO I1 = imin3,imax3
575 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
576 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
577 = FUNIJK(I1,J1,K1)
578 IF (NS_WALL_AT(IJK)) THEN
579
580 (IJK,E,M) = ZERO
581 A_M(IJK,W,M) = ZERO
582 A_M(IJK,N,M) = -ONE
583 A_M(IJK,S,M) = ZERO
584 A_M(IJK,T,M) = ZERO
585 A_M(IJK,B,M) = ZERO
586 A_M(IJK,0,M) = -ONE
587 B_M(IJK,M) = ZERO
588 ELSEIF (FS_WALL_AT(IJK)) THEN
589
590 (IJK,E,M) = ZERO
591 A_M(IJK,W,M) = ZERO
592 A_M(IJK,N,M) = ONE
593 A_M(IJK,S,M) = ZERO
594 A_M(IJK,T,M) = ZERO
595 A_M(IJK,B,M) = ZERO
596 A_M(IJK,0,M) = -ONE
597 B_M(IJK,M) = ZERO
598 ENDIF
599 ENDDO
600 ENDDO
601
602 J1 = JMAX2
603 DO K1 = kmin3, kmax3
604 DO I1 = imin3, imax3
605 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
606 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
607 = FUNIJK(I1,J1,K1)
608 IF (NS_WALL_AT(IJK)) THEN
609 A_M(IJK,E,M) = ZERO
610 A_M(IJK,W,M) = ZERO
611 A_M(IJK,N,M) = ZERO
612 A_M(IJK,S,M) = -ONE
613 A_M(IJK,T,M) = ZERO
614 A_M(IJK,B,M) = ZERO
615 A_M(IJK,0,M) = -ONE
616 B_M(IJK,M) = ZERO
617 ELSEIF (FS_WALL_AT(IJK)) THEN
618 A_M(IJK,E,M) = ZERO
619 A_M(IJK,W,M) = ZERO
620 A_M(IJK,N,M) = ZERO
621 A_M(IJK,S,M) = ONE
622 A_M(IJK,T,M) = ZERO
623 A_M(IJK,B,M) = ZERO
624 A_M(IJK,0,M) = -ONE
625 B_M(IJK,M) = ZERO
626 ENDIF
627 ENDDO
628 ENDDO
629
630 I1 = 1
631 DO K1 = kmin3, kmax3
632 DO J1 = jmin3, jmax3
633 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
634 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
635 = FUNIJK(I1,J1,K1)
636 IF (NS_WALL_AT(IJK)) THEN
637 A_M(IJK,E,M) = -ONE
638 A_M(IJK,W,M) = ZERO
639 A_M(IJK,N,M) = ZERO
640 A_M(IJK,S,M) = ZERO
641 A_M(IJK,T,M) = ZERO
642 A_M(IJK,B,M) = ZERO
643 A_M(IJK,0,M) = -ONE
644 B_M(IJK,M) = ZERO
645 ELSEIF (FS_WALL_AT(IJK)) THEN
646 A_M(IJK,E,M) = ONE
647 A_M(IJK,W,M) = ZERO
648 A_M(IJK,N,M) = ZERO
649 A_M(IJK,S,M) = ZERO
650 A_M(IJK,T,M) = ZERO
651 A_M(IJK,B,M) = ZERO
652 A_M(IJK,0,M) = -ONE
653 B_M(IJK,M) = ZERO
654 ENDIF
655 ENDDO
656 ENDDO
657
658 I1 = IMAX2
659 DO K1 = kmin3,kmax3
660 DO J1 = jmin3,jmax3
661 IF (.NOT.IS_ON_myPE_plus2layers(I1,J1,K1)) CYCLE
662 IF (DEAD_CELL_AT(I1,J1,K1)) CYCLE
663 = FUNIJK(I1,J1,K1)
664 IF (NS_WALL_AT(IJK)) THEN
665 A_M(IJK,E,M) = ZERO
666 A_M(IJK,W,M) = -ONE
667 A_M(IJK,N,M) = ZERO
668 A_M(IJK,S,M) = ZERO
669 A_M(IJK,T,M) = ZERO
670 A_M(IJK,B,M) = ZERO
671 A_M(IJK,0,M) = -ONE
672 B_M(IJK,M) = ZERO
673 ELSEIF (FS_WALL_AT(IJK)) THEN
674 A_M(IJK,E,M) = ZERO
675 A_M(IJK,W,M) = ONE
676 A_M(IJK,N,M) = ZERO
677 A_M(IJK,S,M) = ZERO
678 A_M(IJK,T,M) = ZERO
679 A_M(IJK,B,M) = ZERO
680 A_M(IJK,0,M) = -ONE
681 B_M(IJK,M) = ZERO
682 ENDIF
683 ENDDO
684 ENDDO
685
686
687
688
689 DO L = 1, DIMENSION_BC
690 IF (BC_DEFINED(L)) THEN
691
692
693 IF (BC_TYPE(L) == 'NO_SLIP_WALL') THEN
694 I1 = BC_I_W(L)
695 I2 = BC_I_E(L)
696 J1 = BC_J_S(L)
697 J2 = BC_J_N(L)
698 K1 = BC_K_B(L)
699 K2 = BC_K_T(L)
700 IF (BC_JJ_PS(L) == 0) THEN
701 DO K = K1, K2
702 DO J = J1, J2
703 DO I = I1, I2
704 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
705 IF (DEAD_CELL_AT(I,J,K)) CYCLE
706 = FUNIJK(I,J,K)
707 IF (.NOT.WALL_AT(IJK)) CYCLE
708 (IJK,E,M) = ZERO
709 A_M(IJK,W,M) = ZERO
710 A_M(IJK,N,M) = ZERO
711 A_M(IJK,S,M) = ZERO
712 A_M(IJK,T,M) = ZERO
713 A_M(IJK,B,M) = ZERO
714 A_M(IJK,0,M) = -ONE
715 B_M(IJK,M) = ZERO
716 IF (FLUID_AT(EAST_OF(IJK))) THEN
717 A_M(IJK,E,M) = -ONE
718 ELSEIF (FLUID_AT(WEST_OF(IJK))) THEN
719 A_M(IJK,W,M) = -ONE
720 ELSEIF (FLUID_AT(NORTH_OF(IJK))) THEN
721 A_M(IJK,N,M) = -ONE
722 ELSEIF (FLUID_AT(SOUTH_OF(IJK))) THEN
723 A_M(IJK,S,M) = -ONE
724 ENDIF
725 ENDDO
726 ENDDO
727 ENDDO
728 ELSE
729 CALL JJ_BC_W_S (I1, I2, J1, J2, K1, K2, L, M, A_M, B_M)
730 ENDIF
731
732 ELSEIF (BC_TYPE(L) == 'FREE_SLIP_WALL') THEN
733 I1 = BC_I_W(L)
734 I2 = BC_I_E(L)
735 J1 = BC_J_S(L)
736 J2 = BC_J_N(L)
737 K1 = BC_K_B(L)
738 K2 = BC_K_T(L)
739 IF (BC_JJ_PS(L) == 0) THEN
740 DO K = K1, K2
741 DO J = J1, J2
742 DO I = I1, I2
743 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
744 IF (DEAD_CELL_AT(I,J,K)) CYCLE
745 = FUNIJK(I,J,K)
746 IF (.NOT.WALL_AT(IJK)) CYCLE
747 (IJK,E,M) = ZERO
748 A_M(IJK,W,M) = ZERO
749 A_M(IJK,N,M) = ZERO
750 A_M(IJK,S,M) = ZERO
751 A_M(IJK,T,M) = ZERO
752 A_M(IJK,B,M) = ZERO
753 A_M(IJK,0,M) = -ONE
754 B_M(IJK,M) = ZERO
755 IF (FLUID_AT(EAST_OF(IJK))) THEN
756 A_M(IJK,E,M) = ONE
757 ELSEIF (FLUID_AT(WEST_OF(IJK))) THEN
758 A_M(IJK,W,M) = ONE
759 ELSEIF (FLUID_AT(NORTH_OF(IJK))) THEN
760 A_M(IJK,N,M) = ONE
761 ELSEIF (FLUID_AT(SOUTH_OF(IJK))) THEN
762 A_M(IJK,S,M) = ONE
763 ENDIF
764 ENDDO
765 ENDDO
766 ENDDO
767 ELSE
768 CALL JJ_BC_W_S (I1, I2, J1, J2, K1, K2, L, M, A_M, B_M)
769 ENDIF
770
771 ELSEIF (BC_TYPE(L) == 'PAR_SLIP_WALL') THEN
772 I1 = BC_I_W(L)
773 I2 = BC_I_E(L)
774 J1 = BC_J_S(L)
775 J2 = BC_J_N(L)
776 K1 = BC_K_B(L)
777 K2 = BC_K_T(L)
778 IF (BC_JJ_PS(L) == 0) THEN
779 DO K = K1, K2
780 DO J = J1, J2
781 DO I = I1, I2
782 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
783 IF (DEAD_CELL_AT(I,J,K)) CYCLE
784 = FUNIJK(I,J,K)
785 IF (.NOT.WALL_AT(IJK)) CYCLE
786 = IM1(I)
787 JM = JM1(J)
788 A_M(IJK,E,M) = ZERO
789 A_M(IJK,W,M) = ZERO
790 A_M(IJK,N,M) = ZERO
791 A_M(IJK,S,M) = ZERO
792 A_M(IJK,T,M) = ZERO
793 A_M(IJK,B,M) = ZERO
794 A_M(IJK,0,M) = -ONE
795 B_M(IJK,M) = ZERO
796 IF (FLUID_AT(EAST_OF(IJK))) THEN
797 IF (BC_HW_S(L,M) == UNDEFINED) THEN
798 A_M(IJK,E,M) = -HALF
799 A_M(IJK,0,M) = -HALF
800 B_M(IJK,M) = -BC_WW_S(L,M)
801 ELSE
802 IF (CYLINDRICAL) THEN
803 A_M(IJK,0,M) = -(HALF*(BC_HW_S(L,M)-OX_E(I)&
804 )+ODX_E(I))
805 A_M(IJK,E,M) = -(HALF*(BC_HW_S(L,M)-OX_E(I)&
806 )-ODX_E(I))
807 ELSE
808 A_M(IJK,0,M)=-(HALF*BC_HW_S(L,M)+ODX_E(I))
809 A_M(IJK,E,M)=-(HALF*BC_HW_S(L,M)-ODX_E(I))
810 ENDIF
811 B_M(IJK,M) = -BC_HW_S(L,M)*BC_WW_S(L,M)
812 ENDIF
813 ELSEIF (FLUID_AT(WEST_OF(IJK))) THEN
814 IF (BC_HW_S(L,M) == UNDEFINED) THEN
815 A_M(IJK,W,M) = -HALF
816 A_M(IJK,0,M) = -HALF
817 B_M(IJK,M) = -BC_WW_S(L,M)
818 ELSE
819 IF (CYLINDRICAL) THEN
820 A_M(IJK,W,M) = -(HALF*(BC_HW_S(L,M)-OX_E(IM&
821 ))-ODX_E(IM))
822 A_M(IJK,0,M) = -(HALF*(BC_HW_S(L,M)-OX_E(IM&
823 ))+ODX_E(IM))
824 ELSE
825 A_M(IJK,W,M) = -(HALF*BC_HW_S(L,M)-ODX_E(IM&
826 ))
827 A_M(IJK,0,M) = -(HALF*BC_HW_S(L,M)+ODX_E(IM&
828 ))
829 ENDIF
830 B_M(IJK,M) = -BC_HW_S(L,M)*BC_WW_S(L,M)
831 ENDIF
832 ELSEIF (FLUID_AT(NORTH_OF(IJK))) THEN
833 IF (BC_HW_S(L,M) == UNDEFINED) THEN
834 A_M(IJK,N,M) = -HALF
835 A_M(IJK,0,M) = -HALF
836 B_M(IJK,M) = -BC_WW_S(L,M)
837 ELSE
838 A_M(IJK,0,M) = -(HALF*BC_HW_S(L,M)+ODY_N(J))
839 A_M(IJK,N,M) = -(HALF*BC_HW_S(L,M)-ODY_N(J))
840 B_M(IJK,M) = -BC_HW_S(L,M)*BC_WW_S(L,M)
841 ENDIF
842 ELSEIF (FLUID_AT(SOUTH_OF(IJK))) THEN
843 IF (BC_HW_S(L,M) == UNDEFINED) THEN
844 A_M(IJK,S,M) = -HALF
845 A_M(IJK,0,M) = -HALF
846 B_M(IJK,M) = -BC_WW_S(L,M)
847 ELSE
848 A_M(IJK,S,M) = -(HALF*BC_HW_S(L,M)-ODY_N(JM))
849 A_M(IJK,0,M) = -(HALF*BC_HW_S(L,M)+ODY_N(JM))
850 B_M(IJK,M) = -BC_HW_S(L,M)*BC_WW_S(L,M)
851 ENDIF
852 ENDIF
853 ENDDO
854 ENDDO
855 ENDDO
856 ELSE
857 CALL JJ_BC_W_S (I1, I2, J1, J2, K1, K2, L, M, A_M, B_M)
858 ENDIF
859
860
861 ELSEIF (BC_TYPE(L)=='P_INFLOW' .OR. BC_TYPE(L)=='P_OUTFLOW') THEN
862 IF (BC_PLANE(L) == 'B') THEN
863 I1 = BC_I_W(L)
864 I2 = BC_I_E(L)
865 J1 = BC_J_S(L)
866 J2 = BC_J_N(L)
867 K1 = BC_K_B(L)
868 K2 = BC_K_T(L)
869 DO K = K1, K2
870 DO J = J1, J2
871 DO I = I1, I2
872 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
873 IF (DEAD_CELL_AT(I,J,K)) CYCLE
874 = FUNIJK(I,J,K)
875 A_M(IJK,E,M) = ZERO
876 A_M(IJK,W,M) = ZERO
877 A_M(IJK,N,M) = ZERO
878 A_M(IJK,S,M) = ZERO
879 A_M(IJK,T,M) = ZERO
880 A_M(IJK,B,M) = ONE
881 A_M(IJK,0,M) = -ONE
882 B_M(IJK,M) = ZERO
883 ENDDO
884 ENDDO
885 ENDDO
886 ENDIF
887
888 ELSEIF (BC_TYPE(L) == 'OUTFLOW') THEN
889 IF (BC_PLANE(L) == 'B') THEN
890 I1 = BC_I_W(L)
891 I2 = BC_I_E(L)
892 J1 = BC_J_S(L)
893 J2 = BC_J_N(L)
894 K1 = BC_K_B(L)
895 K2 = BC_K_T(L)
896 DO K = K1, K2
897 DO J = J1, J2
898 DO I = I1, I2
899 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
900 IF (DEAD_CELL_AT(I,J,K)) CYCLE
901 = FUNIJK(I,J,K)
902 A_M(IJK,E,M) = ZERO
903 A_M(IJK,W,M) = ZERO
904 A_M(IJK,N,M) = ZERO
905 A_M(IJK,S,M) = ZERO
906 A_M(IJK,T,M) = ZERO
907 A_M(IJK,B,M) = ONE
908 A_M(IJK,0,M) = -ONE
909 B_M(IJK,M) = ZERO
910 IJKM = KM_OF(IJK)
911 A_M(IJKM,E,M) = ZERO
912 A_M(IJKM,W,M) = ZERO
913 A_M(IJKM,N,M) = ZERO
914 A_M(IJKM,S,M) = ZERO
915 A_M(IJKM,T,M) = ZERO
916 A_M(IJKM,B,M) = ONE
917 A_M(IJKM,0,M) = -ONE
918 B_M(IJKM,M) = ZERO
919 ENDDO
920 ENDDO
921 ENDDO
922 ELSEIF (BC_PLANE(L) == 'T') THEN
923 I1 = BC_I_W(L)
924 I2 = BC_I_E(L)
925 J1 = BC_J_S(L)
926 J2 = BC_J_N(L)
927 K1 = BC_K_B(L)
928 K2 = BC_K_T(L)
929 DO K = K1, K2
930 DO J = J1, J2
931 DO I = I1, I2
932 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
933 IF (DEAD_CELL_AT(I,J,K)) CYCLE
934 = FUNIJK(I,J,K)
935 IJKP = KP_OF(IJK)
936 A_M(IJKP,E,M) = ZERO
937 A_M(IJKP,W,M) = ZERO
938 A_M(IJKP,N,M) = ZERO
939 A_M(IJKP,S,M) = ZERO
940 A_M(IJKP,T,M) = ONE
941 A_M(IJKP,B,M) = ZERO
942 A_M(IJKP,0,M) = -ONE
943 B_M(IJKP,M) = ZERO
944 ENDDO
945 ENDDO
946 ENDDO
947 ENDIF
948
949
950 ELSE
951 I1 = BC_I_W(L)
952 I2 = BC_I_E(L)
953 J1 = BC_J_S(L)
954 J2 = BC_J_N(L)
955 K1 = BC_K_B(L)
956 K2 = BC_K_T(L)
957 DO K = K1, K2
958 DO J = J1, J2
959 DO I = I1, I2
960 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
961 IF (DEAD_CELL_AT(I,J,K)) CYCLE
962 = FUNIJK(I,J,K)
963 A_M(IJK,E,M) = ZERO
964 A_M(IJK,W,M) = ZERO
965 A_M(IJK,N,M) = ZERO
966 A_M(IJK,S,M) = ZERO
967 A_M(IJK,T,M) = ZERO
968 A_M(IJK,B,M) = ZERO
969 A_M(IJK,0,M) = -ONE
970 B_M(IJK,M) = -W_S(IJK,M)
971 IF (BC_PLANE(L) == 'B') THEN
972 IJKB = BOTTOM_OF(IJK)
973 A_M(IJKB,E,M) = ZERO
974 A_M(IJKB,W,M) = ZERO
975 A_M(IJKB,N,M) = ZERO
976 A_M(IJKB,S,M) = ZERO
977 A_M(IJKB,T,M) = ZERO
978 A_M(IJKB,B,M) = ZERO
979 A_M(IJKB,0,M) = -ONE
980 B_M(IJKB,M) = -W_S(IJKB,M)
981 ENDIF
982 ENDDO
983 ENDDO
984 ENDDO
985
986 ENDIF
987 ENDIF
988 ENDDO
989
990 RETURN
991 END SUBROUTINE SOURCE_W_S_BC
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006 SUBROUTINE JJ_BC_W_S(I1, I2, J1, J2, K1, K2, L, M, A_M, B_M)
1007
1008
1009
1010
1011 USE param
1012 USE param1
1013 USE parallel
1014 USE matrix
1015 USE scales
1016 USE constant
1017 USE physprop
1018 USE fldvar
1019 USE visc_s
1020 USE rxns
1021 USE run
1022 USE toleranc
1023 USE geometry
1024 USE indices
1025 USE is
1026 USE tau_s
1027 USE bc
1028 USE output
1029 USE compar
1030 USE functions
1031
1032 IMPLICIT NONE
1033
1034
1035
1036
1037 INTEGER, INTENT(IN) :: L
1038
1039 INTEGER, INTENT(IN) :: I1, I2, J1, J2, K1, K2
1040
1041 INTEGER, INTENT(IN) :: M
1042
1043 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
1044
1045 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
1046
1047
1048
1049
1050 INTEGER :: I, J, K, IJK, JM, IM, IJKP
1051
1052 DOUBLE PRECISION :: hw, gw, cw
1053
1054
1055 DO K = K1, K2
1056 DO J = J1, J2
1057 DO I = I1, I2
1058 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
1059 IF (DEAD_CELL_AT(I,J,K)) CYCLE
1060 = FUNIJK(I,J,K)
1061 IF (.NOT.WALL_AT(IJK)) CYCLE
1062 = IM1(I)
1063 JM = JM1(J)
1064 A_M(IJK,E,M) = ZERO
1065 A_M(IJK,W,M) = ZERO
1066 A_M(IJK,N,M) = ZERO
1067 A_M(IJK,S,M) = ZERO
1068 A_M(IJK,T,M) = ZERO
1069 A_M(IJK,B,M) = ZERO
1070 A_M(IJK,0,M) = -ONE
1071 B_M(IJK,M) = ZERO
1072
1073 IF (FLUID_AT(EAST_OF(IJK))) THEN
1074 IJKP = KP_OF(EAST_OF(IJK))
1075 IF (WALL_AT(IJKP)) CYCLE
1076 IF (EP_S(EAST_OF(IJK),M) <= DIL_EP_S) THEN
1077 A_M(IJK,E,M) = ONE
1078 ELSE
1079 IF (BC_JJ_PS(L) == 1) THEN
1080 CALL CALC_GRBDRY (IJK, EAST_OF(IJK), 'E', 'W',&
1081 M, L, GW, HW, CW)
1082 ELSEIF (BC_JJ_PS(L) == 2) THEN
1083 GW = 0D0
1084 HW = 1D0
1085 CW = BC_WW_S(L,M)
1086 ELSE
1087 GW = 1D0
1088 CW = 0D0
1089 HW = 0D0
1090 ENDIF
1091 IF (CYLINDRICAL) THEN
1092 A_M(IJK,E,M) = -(HALF*(HW - OX_E(I)*GW)-ODX_E(I)*GW)
1093 A_M(IJK,0,M) = -(HALF*(HW - OX_E(I)*GW)+ODX_E(I)*GW)
1094 ELSE
1095 A_M(IJK,E,M) = -(HALF*HW - ODX_E(I)*GW)
1096 A_M(IJK,0,M) = -(HALF*HW + ODX_E(I)*GW)
1097 ENDIF
1098 B_M(IJK,M) = -CW
1099 ENDIF
1100
1101 ELSEIF (FLUID_AT(WEST_OF(IJK))) THEN
1102 IJKP = KP_OF(WEST_OF(IJK))
1103 IF (WALL_AT(IJKP)) CYCLE
1104 IF (EP_S(WEST_OF(IJK),M) <= DIL_EP_S) THEN
1105 A_M(IJK,W,M) = ONE
1106 ELSE
1107 IF (BC_JJ_PS(L) == 1) THEN
1108 CALL CALC_GRBDRY (IJK, WEST_OF(IJK), 'W', 'W',&
1109 M, L, GW, HW, CW)
1110 ELSEIF (BC_JJ_PS(L) == 2) THEN
1111 GW = 0D0
1112 HW = 1D0
1113 CW = BC_WW_S(L,M)
1114 ELSE
1115 GW = 1D0
1116 CW = 0D0
1117 HW = 0D0
1118 ENDIF
1119 IF (CYLINDRICAL) THEN
1120 A_M(IJK,W,M) = -(HALF*(HW - OX_E(IM)*GW)-ODX_E(IM)*GW)
1121 A_M(IJK,0,M) = -(HALF*(HW - OX_E(IM)*GW)+ODX_E(IM)*GW)
1122 ELSE
1123 A_M(IJK,W,M) = -(HALF*HW - ODX_E(IM)*GW)
1124 A_M(IJK,0,M) = -(HALF*HW + ODX_E(IM)*GW)
1125 ENDIF
1126 B_M(IJK,M) = -CW
1127 ENDIF
1128
1129 ELSEIF (FLUID_AT(NORTH_OF(IJK))) THEN
1130 IJKP = KP_OF(NORTH_OF(IJK))
1131 IF (WALL_AT(IJKP)) CYCLE
1132 IF (EP_S(NORTH_OF(IJK),M) <= DIL_EP_S) THEN
1133 A_M(IJK,N,M) = ONE
1134 ELSE
1135 IF (BC_JJ_PS(L) == 1) THEN
1136 CALL CALC_GRBDRY (IJK, NORTH_OF(IJK), 'N', 'W',&
1137 M, L, GW, HW, CW)
1138 ELSEIF (BC_JJ_PS(L) == 2) THEN
1139 GW = 0D0
1140 HW = 1D0
1141 CW = BC_WW_S(L,M)
1142 ELSE
1143 GW = 1D0
1144 CW = 0D0
1145 HW = 0D0
1146 ENDIF
1147 A_M(IJK,N,M) = -(HALF*HW - ODY_N(J)*GW)
1148 A_M(IJK,0,M) = -(HALF*HW + ODY_N(J)*GW)
1149 B_M(IJK,M) = -CW
1150 ENDIF
1151
1152 ELSEIF (FLUID_AT(SOUTH_OF(IJK))) THEN
1153 IJKP = KP_OF(SOUTH_OF(IJK))
1154 IF (WALL_AT(IJKP)) CYCLE
1155 IF (EP_S(SOUTH_OF(IJK),M) <= DIL_EP_S) THEN
1156 A_M(IJK,S,M) = ONE
1157 ELSE
1158 IF (BC_JJ_PS(L) == 1) THEN
1159 CALL CALC_GRBDRY (IJK, SOUTH_OF(IJK), 'S', 'W',&
1160 M, L, GW, HW, CW)
1161 ELSEIF (BC_JJ_PS(L) == 2) THEN
1162 GW = 0D0
1163 HW = 1D0
1164 CW = BC_WW_S(L,M)
1165 ELSE
1166 GW = 1D0
1167 CW = 0D0
1168 HW = 0D0
1169 ENDIF
1170 A_M(IJK,S,M) = -(HALF*HW - ODY_N(JM)*GW)
1171 A_M(IJK,0,M) = -(HALF*HW + ODY_N(JM)*GW)
1172 B_M(IJK,M) = -CW
1173 ENDIF
1174 ENDIF
1175
1176 ENDDO
1177 ENDDO
1178 ENDDO
1179
1180 RETURN
1181 END SUBROUTINE JJ_BC_W_S
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192 SUBROUTINE POINT_SOURCE_W_S(A_M, B_M)
1193
1194
1195
1196
1197 use compar
1198 use constant
1199 use fldvar
1200 use geometry
1201 use indices
1202 use param1, only: one, small_number, zero
1203 use physprop
1204 use ps
1205 use run
1206 use functions
1207
1208 IMPLICIT NONE
1209
1210
1211
1212
1213 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
1214
1215 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
1216
1217
1218
1219
1220 INTEGER :: IJK, I, J, K
1221 INTEGER :: PSV, M
1222 INTEGER :: lKT, lKB
1223
1224 DOUBLE PRECISION :: pSource
1225
1226 do M=1, MMAX
1227
1228 PS_LP: do PSV = 1, DIMENSION_PS
1229 if(.NOT.PS_DEFINED(PSV)) cycle PS_LP
1230 if(abs(PS_W_s(PSV,M)) < small_number) cycle PS_LP
1231
1232 if(PS_W_s(PSV,M) < ZERO) then
1233 lKB = PS_K_B(PSV)-1
1234 lKT = PS_K_T(PSV)-1
1235 else
1236 lKB = PS_K_B(PSV)
1237 lKT = PS_K_T(PSV)
1238 endif
1239
1240 do k = lKB, lKT
1241 do j = PS_J_S(PSV), PS_J_N(PSV)
1242 do i = PS_I_W(PSV), PS_I_E(PSV)
1243
1244 if(.NOT.IS_ON_myPE_plus2layers(I,J,K)) cycle
1245 IF (DEAD_CELL_AT(I,J,K)) CYCLE
1246
1247 = funijk(i,j,k)
1248 if(.NOT.fluid_at(ijk)) cycle
1249
1250
1251 if(A_M(IJK,0,M) == -ONE .AND. &
1252 B_M(IJK,M) == -W_s(IJK,M)) then
1253 B_M(IJK,M) = -PS_W_s(PSV,M) * PS_VEL_MAG_S(PSV,M)
1254 else
1255 pSource = PS_MASSFLOW_S(PSV,M) * &
1256 (VOL(IJK)/PS_VOLUME(PSV))
1257
1258 B_M(IJK,M) = B_M(IJK,M) - pSource * &
1259 PS_W_s(PSV,M) * PS_VEL_MAG_S(PSV,M)
1260 endif
1261
1262 enddo
1263 enddo
1264 enddo
1265
1266 enddo PS_LP
1267
1268 enddo
1269
1270 RETURN
1271 END SUBROUTINE POINT_SOURCE_W_S
1272