File: RELATIVE:/../../../mfix.git/model/partial_elim.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
34 SUBROUTINE PARTIAL_ELIM_S(VAR_G, VAR_S, VXF, A_M, B_M)
35
36
37
38
39 USE param
40 USE param1
41 USE parallel
42 USE geometry
43 USE matrix
44 USE physprop
45 USE indices
46 USE compar
47 USE drag
48 USE fldvar
49 USE functions
50 IMPLICIT NONE
51
52
53
54
55 DOUBLE PRECISION, INTENT(IN) :: Var_g(DIMENSION_3)
56
57 DOUBLE PRECISION, INTENT(IN) :: Var_s(DIMENSION_3, DIMENSION_M)
58
59 DOUBLE PRECISION, INTENT(IN) :: VxF(DIMENSION_3, DIMENSION_M)
60
61 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
62
63 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
64
65
66
67
68 INTEGER :: IJK, IJKW, IJKS, IJKB, IJKE, IJKN, IJKT
69 INTEGER :: L, M, LP
70
71 DOUBLE PRECISION :: SUM_A, SUM_B, SUM_A_LPRIME,SUM_B_LPRIME, DEN
72
73 DOUBLE PRECISION :: a(0:DIMENSION_M), BB(0:DIMENSION_M),&
74 F(0:DIMENSION_M,0:DIMENSION_M),&
75 Saxf(0:DIMENSION_M)
76
77
78
79
80
81 DO IJK = ijkstart3, ijkend3
82 IF (FLUID_AT(IJK)) THEN
83 IJKW = WEST_OF(IJK)
84 IJKS = SOUTH_OF(IJK)
85 IJKE = EAST_OF(IJK)
86 IJKN = NORTH_OF(IJK)
87 DO M=0, MMAX
88 A(M)=A_M(IJK,0,M)
89 BB(M)=B_M(IJK,M)
90
91 if (m .ne. 0) then
92 F(M,0)=-VXF(IJK,M)
93 F(0,M)=F(M,0)
94 else
95 F(0,0) = ZERO
96 endif
97
98 DO L =1, MMAX
99 IF ((L .NE. M) .AND. (M .NE. 0)) THEN
100 F(M,L) = ZERO
101 ELSE
102 F(M,L) = ZERO
103 ENDIF
104 F(L,M) = ZERO
105 ENDDO
106
107 IF (M == 0 ) THEN
108 SAXF(M) = -(A_M(IJK,E,M)*VAR_G(IJKE)+A_M(IJK,W,M)*VAR_G(IJKW&
109 )+A_M(IJK,N,M)*VAR_G(IJKN)+A_M(IJK,S,M)*VAR_G(IJKS))
110 ELSE
111 SAXF(M) = -(A_M(IJK,E,M)*VAR_S(IJKE,M)+A_M(IJK,W,M)*VAR_S(&
112 IJKW,M)+A_M(IJK,N,M)*VAR_S(IJKN,M)+A_M(IJK,S,M)*VAR_S(&
113 IJKS,M))
114 ENDIF
115
116 IF (DO_K) THEN
117 IJKB = BOTTOM_OF(IJK)
118 IJKT = TOP_OF(IJK)
119 IF ( M ==0) THEN
120 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_G(IJKT)+A_M(IJK,B,M)*&
121 VAR_G(IJKB))
122 ELSE
123 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_S(IJKT,M)+A_M(IJK,B,M)*&
124 VAR_S(IJKB,M))
125 ENDIF
126 ENDIF
127 ENDDO
128
129 DO M=0,MMAX
130 SUM_A = ZERO
131 SUM_B = ZERO
132
133 DO L =0,MMAX
134 SUM_A_LPRIME = ZERO
135 SUM_B_LPRIME = ZERO
136
137 DO LP=0,MMAX
138 IF ( LP .NE. M) THEN
139 SUM_A_LPRIME=SUM_A_LPRIME+F(L,LP)
140 IF (LP == 0) THEN
141 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_G(IJK)
142 ELSE
143 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_S(IJK,LP)
144 ENDIF
145 ENDIF
146 ENDDO
147
148 DEN = A(L) + SUM_A_LPRIME + F(L,M)
149 IF ( DEN .NE. ZERO) THEN
150 SUM_A = SUM_A + ((F(L,M)*(A(L)+SUM_A_LPRIME))/DEN)
151 SUM_B = SUM_B + F(L,M)*(SAXF(L) + BB(L)+SUM_B_LPRIME &
152 )/DEN
153 ENDIF
154 ENDDO
155
156 A_M(IJK,0,M)= SUM_A+A(M)
157 B_M(IJK,M) = SUM_B+BB(M)
158 ENDDO
159 ENDIF
160 ENDDO
161
162 RETURN
163 END SUBROUTINE PARTIAL_ELIM_S
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186 SUBROUTINE PARTIAL_ELIM_IA(VAR_S, VXTCSS, A_M, B_M)
187
188
189
190
191 USE param
192 USE param1
193 USE parallel
194 USE geometry
195 USE matrix
196 USE physprop
197 USE indices
198 USE compar
199 USE drag
200 USE fldvar
201 USE functions
202 IMPLICIT NONE
203
204
205
206
207 DOUBLE PRECISION, INTENT(IN) :: Var_s(DIMENSION_3, DIMENSION_M)
208
209 DOUBLE PRECISION, INTENT(IN) :: VxTCss (DIMENSION_3, DIMENSION_LM)
210
211 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
212
213 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
214
215
216
217
218 INTEGER :: IJK, IJKW, IJKS, IJKB, IJKE, IJKN, IJKT
219 INTEGER :: L, M, LP, LM
220
221 DOUBLE PRECISION :: SUM_A, SUM_B, SUM_A_LPRIME,SUM_B_LPRIME, DEN
222
223 DOUBLE PRECISION :: a(DIMENSION_M), BB(DIMENSION_M),&
224 F(DIMENSION_M,DIMENSION_M),&
225 Saxf(DIMENSION_M)
226
227
228
229
230
231
232 DO IJK = ijkstart3, ijkend3
233
234 IF (FLUID_AT(IJK)) THEN
235 IJKW = WEST_OF(IJK)
236 IJKS = SOUTH_OF(IJK)
237 IJKE = EAST_OF(IJK)
238 IJKN = NORTH_OF(IJK)
239
240 F(:,:) = ZERO
241
242 DO M = 1, MMAX
243 A(M)=A_M(IJK,0,M)
244 BB(M)=B_M(IJK,M)
245
246 DO L = 1, MMAX
247 IF ( L .NE. M ) THEN
248 LM = FUNLM(L,M)
249 F(M,L)=-VxTCSS(IJK,LM)
250 ENDIF
251 F(L,M) = F(M,L)
252 ENDDO
253
254 SAXF(M) = -(A_M(IJK,E,M)*VAR_S(IJKE,M)+&
255 A_M(IJK,W,M)*VAR_S(IJKW,M)+&
256 A_M(IJK,N,M)*VAR_S(IJKN,M)+&
257 A_M(IJK,S,M)*VAR_S(IJKS,M))
258
259 IF (DO_K) THEN
260 IJKB = BOTTOM_OF(IJK)
261 IJKT = TOP_OF(IJK)
262 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_S(IJKT,M)+&
263 A_M(IJK,B,M)*VAR_S(IJKB,M))
264 ENDIF
265 ENDDO
266
267 DO M = 1, MMAX
268 SUM_A = ZERO
269 SUM_B = ZERO
270
271 DO L = 1, MMAX
272 SUM_A_LPRIME = ZERO
273 SUM_B_LPRIME = ZERO
274
275 DO LP = 1, MMAX
276 IF ( LP .NE. M) THEN
277 SUM_A_LPRIME=SUM_A_LPRIME+F(L,LP)
278 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_S(IJK,LP)
279 ENDIF
280 ENDDO
281
282 DEN = A(L) + SUM_A_LPRIME + F(L,M)
283
284 IF ( DEN .NE. ZERO) THEN
285 SUM_A = SUM_A + ((F(L,M)*(A(L)+SUM_A_LPRIME))/DEN)
286 SUM_B = SUM_B + F(L,M)*(SAXF(L) + BB(L)+&
287 SUM_B_LPRIME)/DEN
288 ENDIF
289 ENDDO
290
291 A_M(IJK,0,M)= SUM_A+A(M)
292 B_M(IJK,M) = SUM_B+BB(M)
293 ENDDO
294
295 ENDIF
296 ENDDO
297
298 RETURN
299 END SUBROUTINE PARTIAL_ELIM_IA
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327 SUBROUTINE PARTIAL_ELIM_U(VAR_G, VAR_S, VXF, A_M, B_M)
328
329
330
331
332 USE param
333 USE param1
334 USE parallel
335 USE geometry
336 USE matrix
337 USE physprop
338 USE indices
339 USE run
340 USE compar
341 USE drag
342 USE fldvar
343 USE fun_avg
344 USE functions
345 IMPLICIT NONE
346
347
348
349
350 DOUBLE PRECISION, INTENT(IN) :: Var_g(DIMENSION_3)
351
352 DOUBLE PRECISION, INTENT(IN) :: Var_s(DIMENSION_3, DIMENSION_M)
353
354 DOUBLE PRECISION, INTENT(IN) :: VxF(DIMENSION_3, DIMENSION_M)
355
356 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
357
358 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
359
360
361
362
363 INTEGER :: IJK, IMJK, IJMK, IJKM, IPJK, IJPK, IJKP, I, IJKE
364 INTEGER :: L, M, LP, LM
365
366 DOUBLE PRECISION :: SUM_A, SUM_B, SUM_A_LPRIME,SUM_B_LPRIME, DEN
367
368 DOUBLE PRECISION :: a(0:DIMENSION_M), BB(0:DIMENSION_M), &
369 F(0:DIMENSION_M,0:DIMENSION_M),&
370 Saxf(0:DIMENSION_M)
371
372
373
374
375
376 DO IJK = ijkstart3, ijkend3
377 IF (FLOW_AT_E(IJK)) THEN
378 IMJK = IM_OF(IJK)
379 IJMK = JM_OF(IJK)
380 IPJK = IP_OF(IJK)
381 IJPK = JP_OF(IJK)
382
383 F = ZERO
384 DO M=0, MMAX
385 A(M) = A_M(IJK,0,M)
386 BB(M)= B_M(IJK,M)
387
388
389
390 IF (M .NE. 0) THEN
391 F(M,0)=-VXF(IJK,M)
392 F(0,M) = F(M,0)
393 ENDIF
394
395
396
397 DO L =1, MMAX
398 IF ((L .NE. M) .AND. (M .NE. 0)) THEN
399 LM = FUNLM(L,M)
400 IF (.NOT.IP_AT_E(IJK)) THEN
401 I = I_OF(IJK)
402 IJKE = EAST_OF(IJK)
403 F(M,L) = -AVG_X(F_SS(IJK,LM),F_SS(IJKE,LM),I)*VOL_U(IJK)
404 ENDIF
405 ENDIF
406 F(L,M)=F(M,L)
407 ENDDO
408
409 IF (M == 0) THEN
410 SAXF(M) = -(A_M(IJK,E,M)*VAR_G(IPJK)+A_M(IJK,W,M)*VAR_G(IMJK&
411 )+A_M(IJK,N,M)*VAR_G(IJPK)+A_M(IJK,S,M)*VAR_G(IJMK))
412 ELSE
413 SAXF(M) = -(A_M(IJK,E,M)*VAR_S(IPJK,M)+A_M(IJK,W,M)*VAR_S(&
414 IMJK,M)+A_M(IJK,N,M)*VAR_S(IJPK,M)+A_M(IJK,S,M)*VAR_S(&
415 IJMK,M))
416 ENDIF
417
418 IF (DO_K) THEN
419 IJKM = KM_OF(IJK)
420 IJKP = KP_OF(IJK)
421 IF (M ==0) THEN
422 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_G(IJKP)+A_M(IJK,B,M)*&
423 VAR_G(IJKM))
424 ELSE
425 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_S(IJKP,M)+A_M(IJK,B,M)*&
426 VAR_S(IJKM,M))
427 ENDIF
428 ENDIF
429 ENDDO
430
431 DO M=0,MMAX
432 IF (MOMENTUM_X_EQ(M)) THEN
433 SUM_A = ZERO
434 SUM_B = ZERO
435
436 DO L =0,MMAX
437
438
439
440
441
442
443 IF (MOMENTUM_X_EQ(L)) THEN
444 SUM_A_LPRIME = ZERO
445 SUM_B_LPRIME = ZERO
446
447 DO LP=0,MMAX
448
449
450 IF ( LP .NE. M) THEN
451 SUM_A_LPRIME=SUM_A_LPRIME+F(L,LP)
452 IF (LP == 0) THEN
453 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_G(IJK)
454 ELSE
455 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_S(IJK,LP)
456 ENDIF
457 ENDIF
458 ENDDO
459
460 DEN = A(L) + SUM_A_LPRIME + F(L,M)
461 IF ( DEN .NE. ZERO) THEN
462 SUM_A = SUM_A + ((F(L,M)*(A(L)+SUM_A_LPRIME))/DEN)
463 SUM_B = SUM_B + F(L,M)*(SAXF(L) + BB(L)+SUM_B_LPRIME &
464 )/DEN
465 ENDIF
466 ELSE
467 SUM_A = SUM_A + F(L,M)
468 IF (L == 0) THEN
469 SUM_B = SUM_B + F(L,M)*VAR_G(IJK)
470 ELSE
471 SUM_B = SUM_B + F(L,M)*VAR_S(IJK,L)
472 ENDIF
473 ENDIF
474 ENDDO
475
476 (IJK,0,M) = SUM_A+A(M)
477 B_M(IJK,M) = SUM_B+BB(M)
478 ENDIF
479 ENDDO
480
481 ENDIF
482 ENDDO
483
484 RETURN
485 END SUBROUTINE PARTIAL_ELIM_U
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513 SUBROUTINE PARTIAL_ELIM_V(VAR_G, VAR_S, VXF, A_M, B_M)
514
515
516
517
518 USE param
519 USE param1
520 USE parallel
521 USE geometry
522 USE matrix
523 USE physprop
524 USE indices
525 USE run
526 USE compar
527 USE drag
528 USE fldvar
529 USE fun_avg
530 USE functions
531 IMPLICIT NONE
532
533
534
535
536 DOUBLE PRECISION, INTENT(IN) :: Var_g(DIMENSION_3)
537
538 DOUBLE PRECISION, INTENT(IN) :: Var_s(DIMENSION_3, DIMENSION_M)
539
540 DOUBLE PRECISION, INTENT(IN) :: VxF(DIMENSION_3, DIMENSION_M)
541
542 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
543
544 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
545
546
547
548
549 INTEGER :: IJK, IMJK, IJMK, IJKM, IPJK, IJPK, IJKP, IJKN, J
550 INTEGER :: L, M, LP, LM
551
552 DOUBLE PRECISION :: SUM_A, SUM_B, SUM_A_LPRIME,SUM_B_LPRIME, DEN
553
554 DOUBLE PRECISION :: a(0:DIMENSION_M), BB(0:DIMENSION_M),&
555 F(0:DIMENSION_M,0:DIMENSION_M),&
556 Saxf(0:DIMENSION_M)
557
558
559
560
561
562 DO IJK = ijkstart3, ijkend3
563 IF (FLOW_AT_N(IJK)) THEN
564 IMJK = IM_OF(IJK)
565 IJMK = JM_OF(IJK)
566 IPJK = IP_OF(IJK)
567 IJPK = JP_OF(IJK)
568
569 F = ZERO
570 DO M = 0, MMAX
571 A(M)=A_M(IJK,0,M)
572 BB(M)=B_M(IJK,M)
573
574
575
576 IF (M .NE. 0) THEN
577 F(M,0)=-VXF(IJK,M)
578 F(0,M)=F(M,0)
579 ENDIF
580
581
582
583 DO L =1, MMAX
584 IF ((L .NE. M) .AND. (M .NE. 0)) THEN
585 LM = FUNLM(L,M)
586 IF (.NOT.IP_AT_N(IJK)) THEN
587 J = J_OF(IJK)
588 IJKN = NORTH_OF(IJK)
589 F(M,L)=-AVG_Y(F_SS(IJK,LM),F_SS(IJKN,LM),J)*VOL_V(IJK)
590 ENDIF
591 ENDIF
592 F(L,M)=F(M,L)
593 ENDDO
594
595 IF (M == 0) THEN
596 SAXF(M) = -(A_M(IJK,E,M)*VAR_G(IPJK)+A_M(IJK,W,M)*VAR_G(IMJK&
597 )+A_M(IJK,N,M)*VAR_G(IJPK)+A_M(IJK,S,M)*VAR_G(IJMK))
598 ELSE
599 SAXF(M) = -(A_M(IJK,E,M)*VAR_S(IPJK,M)+A_M(IJK,W,M)*VAR_S(&
600 IMJK,M)+A_M(IJK,N,M)*VAR_S(IJPK,M)+A_M(IJK,S,M)*VAR_S(&
601 IJMK,M))
602 ENDIF
603
604 IF (DO_K) THEN
605 IJKM = KM_OF(IJK)
606 IJKP = KP_OF(IJK)
607 IF (M == 0) THEN
608 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_G(IJKP)+A_M(IJK,B,M)*&
609 VAR_G(IJKM))
610 ELSE
611 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_S(IJKP,M)+A_M(IJK,B,M)*&
612 VAR_S(IJKM,M))
613 ENDIF
614 ENDIF
615 ENDDO
616
617
618 DO M=0,MMAX
619 IF (MOMENTUM_Y_EQ(M)) THEN
620 SUM_A = ZERO
621 SUM_B = ZERO
622
623 DO L =0,MMAX
624 IF(MOMENTUM_Y_EQ(L)) THEN
625 SUM_A_LPRIME = ZERO
626 SUM_B_LPRIME = ZERO
627
628 DO LP=0,MMAX
629 IF ( LP .NE. M) THEN
630 SUM_A_LPRIME=SUM_A_LPRIME+F(L,LP)
631 IF (LP == 0) THEN
632 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_G(IJK)
633 ELSE
634 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_S(IJK,LP)
635 ENDIF
636 ENDIF
637 ENDDO
638
639 DEN = A(L) + SUM_A_LPRIME + F(L,M)
640 IF ( DEN .NE. ZERO) THEN
641 SUM_A = SUM_A + ((F(L,M)*(A(L)+SUM_A_LPRIME))/DEN)
642 SUM_B = SUM_B + F(L,M)*(SAXF(L) + BB(L)+SUM_B_LPRIME &
643 )/DEN
644 ENDIF
645 ELSE
646 SUM_A = SUM_A + F(L,M)
647 IF (L == 0) THEN
648 SUM_B = SUM_B + F(L,M)*VAR_G(IJK)
649 ELSE
650 SUM_B = SUM_B + F(L,M)*VAR_S(IJK,L)
651 ENDIF
652 ENDIF
653 ENDDO
654
655 (IJK,0,M)=SUM_A+A(M)
656 B_M(IJK,M) = SUM_B+BB(M)
657 ENDIF
658 ENDDO
659
660 ENDIF
661 ENDDO
662
663 RETURN
664 END SUBROUTINE PARTIAL_ELIM_V
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692 SUBROUTINE PARTIAL_ELIM_W(VAR_G, VAR_S, VXF, A_M, B_M)
693
694
695
696
697 USE param
698 USE param1
699 USE parallel
700 USE geometry
701 USE matrix
702 USE physprop
703 USE indices
704 USE run
705 USE compar
706 USE drag
707 USE fldvar
708 USE fun_avg
709 USE functions
710 IMPLICIT NONE
711
712
713
714
715 DOUBLE PRECISION, INTENT(IN) :: Var_g(DIMENSION_3)
716
717 DOUBLE PRECISION, INTENT(IN) :: Var_s(DIMENSION_3, DIMENSION_M)
718
719 DOUBLE PRECISION, INTENT(IN) :: VxF(DIMENSION_3, DIMENSION_M)
720
721 DOUBLE PRECISION, INTENT(INOUT) :: A_m(DIMENSION_3, -3:3, 0:DIMENSION_M)
722
723 DOUBLE PRECISION, INTENT(INOUT) :: B_m(DIMENSION_3, 0:DIMENSION_M)
724
725
726
727
728 INTEGER :: IJK, IMJK, IJMK, IJKM, IPJK, IJPK, IJKP, K, IJKT
729 INTEGER :: L, M, LP, LM
730
731 DOUBLE PRECISION :: SUM_A, SUM_B, SUM_A_LPRIME,SUM_B_LPRIME, DEN
732
733 DOUBLE PRECISION :: a(0:DIMENSION_M), BB(0:DIMENSION_M), &
734 F(0:DIMENSION_M,0:DIMENSION_M),&
735 Saxf(0:DIMENSION_M)
736
737
738
739
740
741 DO IJK = ijkstart3, ijkend3
742 IF (FLOW_AT_T(IJK)) THEN
743 IMJK = IM_OF(IJK)
744 IJMK = JM_OF(IJK)
745 IPJK = IP_OF(IJK)
746 IJPK = JP_OF(IJK)
747
748 F = ZERO
749 DO M=0, MMAX
750 A(M)=A_M(IJK,0,M)
751 BB(M)=B_M(IJK,M)
752
753
754
755 IF (M .NE. 0) THEN
756 F(M,0)=-VXF(IJK,M)
757 F(0,M)=F(M,0)
758 ENDIF
759
760
761
762 DO L =1, MMAX
763 IF ((L .NE. M) .AND. (M .NE. 0)) THEN
764 LM = FUNLM(L,M)
765 IF (.NOT.IP_AT_T(IJK)) THEN
766 K = K_OF(IJK)
767 IJKT = TOP_OF(IJK)
768 F(M,L) = -AVG_Z(F_SS(IJK,LM),F_SS(IJKT,LM),K)*VOL_W(IJK)
769 ENDIF
770 ENDIF
771 F(L,M)=F(M,L)
772 ENDDO
773
774 IF (M == 0) THEN
775 SAXF(M) = -(A_M(IJK,E,M)*VAR_G(IPJK)+A_M(IJK,W,M)*VAR_G(IMJK&
776 )+A_M(IJK,N,M)*VAR_G(IJPK)+A_M(IJK,S,M)*VAR_G(IJMK))
777 ELSE
778 SAXF(M) = -(A_M(IJK,E,M)*VAR_S(IPJK,M)+A_M(IJK,W,M)*VAR_S(&
779 IMJK,M)+A_M(IJK,N,M)*VAR_S(IJPK,M)+A_M(IJK,S,M)*VAR_S(&
780 IJMK,M))
781 ENDIF
782
783 IF (DO_K) THEN
784 IJKM = KM_OF(IJK)
785 IJKP = KP_OF(IJK)
786 IF (M == 0) THEN
787 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_G(IJKP)+A_M(IJK,B,M)*&
788 VAR_G(IJKM))
789 ELSE
790 SAXF(M) = SAXF(M) - (A_M(IJK,T,M)*VAR_S(IJKP,M)+A_M(IJK,B,M)*&
791 VAR_S(IJKM,M))
792 ENDIF
793 ENDIF
794 ENDDO
795
796
797 DO M=0,MMAX
798 IF (MOMENTUM_Z_EQ(M)) THEN
799 SUM_A = ZERO
800 SUM_B = ZERO
801
802 DO L =0,MMAX
803 IF (MOMENTUM_Z_EQ(L)) THEN
804 SUM_A_LPRIME = ZERO
805 SUM_B_LPRIME = ZERO
806
807 DO LP=0,MMAX
808 IF ( LP .NE. M) THEN
809 SUM_A_LPRIME=SUM_A_LPRIME+F(L,LP)
810 IF (LP == 0) THEN
811 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_G(IJK)
812 ELSE
813 SUM_B_LPRIME=SUM_B_LPRIME+F(L,LP)*VAR_S(IJK,LP)
814 ENDIF
815 ENDIF
816 ENDDO
817
818 DEN = A(L) + SUM_A_LPRIME + F(L,M)
819 IF ( DEN .NE. ZERO) THEN
820 SUM_A = SUM_A + ((F(L,M)*(A(L)+SUM_A_LPRIME))/DEN)
821 SUM_B = SUM_B + F(L,M)*(SAXF(L) + BB(L)+SUM_B_LPRIME &
822 )/DEN
823 ENDIF
824 ELSE
825 SUM_A = SUM_A + F(L,M)
826 IF (L == 0) THEN
827 SUM_B = SUM_B + F(L,M)*VAR_G(IJK)
828 ELSE
829 SUM_B = SUM_B + F(L,M)*VAR_S(IJK,L)
830 ENDIF
831 ENDIF
832 ENDDO
833
834 (IJK,0,M)=SUM_A+A(M)
835 B_M(IJK,M) = SUM_B+BB(M)
836 ENDIF
837 ENDDO
838
839 ENDIF
840 ENDDO
841
842 RETURN
843 END SUBROUTINE PARTIAL_ELIM_W
844
845
846