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