File: N:\mfix\model\leq_sor.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SUBROUTINE LEQ_SOR(VNAME, VNO, VAR, A_M, B_M, ITMAX, IER)
18
19
20
21
22 USE param
23 USE param1
24 USE geometry
25 USE indices
26 USE compar
27 USE sendrecv
28 USE leqsol
29 USE functions
30 IMPLICIT NONE
31
32
33
34
35 CHARACTER(LEN=*), INTENT(IN) :: Vname
36
37 INTEGER, INTENT(IN) :: VNO
38
39
40
41
42 DOUBLE PRECISION, INTENT(INOUT) :: Var(DIMENSION_3)
43
44 DOUBLE PRECISION, INTENT(INOUT) :: &
45 A_m(DIMENSION_3, -3:3)
46
47 DOUBLE PRECISION, INTENT(INOUT) :: &
48 B_m(DIMENSION_3)
49
50 INTEGER, INTENT(IN) :: ITMAX
51
52 INTEGER, INTENT(INOUT) :: IER
53
54
55
56
57 DOUBLE PRECISION, PARAMETER :: OMEGA = 1.0
58 integer :: iidebug
59 parameter( iidebug = 0 )
60
61
62
63
64 DOUBLE PRECISION :: Var_tmp(DIMENSION_3)
65
66 INTEGER :: IJK
67 INTEGER :: ITER
68
69 DOUBLE PRECISION oAm
70
71
72
73 DO IJK = ijkstart3, ijkend3
74 IF(.NOT.IS_ON_myPE_owns(I_OF(IJK),J_OF(IJK), K_OF(IJK))) CYCLE
75
76 OAM = ONE/A_M(IJK,0)
77 A_M(IJK,0) = ONE
78 A_M(IJK,-2) = A_M(IJK,-2)*OAM
79 A_M(IJK,-1) = A_M(IJK,-1)*OAM
80 A_M(IJK,1) = A_M(IJK,1)*OAM
81 A_M(IJK,2) = A_M(IJK,2)*OAM
82 A_M(IJK,-3) = A_M(IJK,-3)*OAM
83 A_M(IJK,3) = A_M(IJK,3)*OAM
84 B_M(IJK) = B_M(IJK)*OAM
85 ENDDO
86
87 DO ITER = 1, ITMAX
88 IF (DO_K) THEN
89
90
91 DO IJK = ijkstart3, ijkend3
92 IF(.NOT.IS_ON_myPE_owns(I_OF(IJK),J_OF(IJK), K_OF(IJK))) CYCLE
93 VAR_tmp(IJK) = VAR(IJK) + OMEGA*(B_M(IJK)-&
94 A_M(IJK,-1)*VAR(IM_OF(IJK))-A_M(IJK,1)*VAR(IP_OF(IJK))-&
95 A_M(IJK,-2)*VAR(JM_OF(IJK))-A_M(IJK,2)*VAR(JP_OF(IJK))-&
96 A_M(IJK,-3)*VAR(KM_OF(IJK))-A_M(IJK,3)*VAR(KP_OF(IJK))-&
97 VAR(IJK))
98 ENDDO
99 ELSE
100
101
102 DO IJK = ijkstart3, ijkend3
103 IF(.NOT.IS_ON_myPE_owns(I_OF(IJK),J_OF(IJK), K_OF(IJK))) CYCLE
104 VAR_tmp(IJK) = VAR(IJK) + OMEGA*(B_M(IJK)-&
105 A_M(IJK,-2)*VAR(JM_OF(IJK))-A_M(IJK,2)*VAR(JP_OF(IJK))-&
106 A_M(IJK,-1)*VAR(IM_OF(IJK))-A_M(IJK,1)*VAR(IP_OF(IJK))-&
107 VAR(IJK))
108 ENDDO
109 ENDIF
110
111 call send_recv(var,2)
112 ENDDO
113
114
115 DO IJK = ijkstart3, ijkend3
116 VAR(IJK) = VAR_tmp(IJK)
117 ENDDO
118
119 ITER_TOT(VNO) = ITER
120
121
122 RETURN
123 END SUBROUTINE LEQ_SOR
124