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